Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/source
diff options
context:
space:
mode:
authorMartin Poirier <theeth@yahoo.com>2008-10-03 00:39:57 +0400
committerMartin Poirier <theeth@yahoo.com>2008-10-03 00:39:57 +0400
commitc35a2d6ea9dc5226911bd90848e96a59233bdaf8 (patch)
treebe895ae3982a72a5b1cfd4ff9b1766037c07a6d0 /source
parent39e66e4d6f48b7a54a510ec5504fd500cc07174f (diff)
parent06c43148a19ad7e8cddf9ba51549b51bdb1f6f0c (diff)
merge trunk 16118 -> 116886
Diffstat (limited to 'source')
-rw-r--r--source/Makefile9
-rw-r--r--source/blender/CMakeLists.txt2
-rw-r--r--source/blender/Makefile2
-rw-r--r--source/blender/SConscript1
-rw-r--r--source/blender/blenkernel/BKE_DerivedMesh.h54
-rw-r--r--source/blender/blenkernel/BKE_action.h6
-rw-r--r--source/blender/blenkernel/BKE_bad_level_calls.h6
-rw-r--r--source/blender/blenkernel/BKE_blender.h2
-rw-r--r--source/blender/blenkernel/BKE_bullet.h (renamed from source/blender/src/cre/license.jpeg.c)18
-rw-r--r--source/blender/blenkernel/BKE_bvhutils.h98
-rw-r--r--source/blender/blenkernel/BKE_collision.h11
-rw-r--r--source/blender/blenkernel/BKE_colortools.h1
-rw-r--r--source/blender/blenkernel/BKE_curve.h12
-rw-r--r--source/blender/blenkernel/BKE_customdata.h4
-rw-r--r--source/blender/blenkernel/BKE_deform.h4
-rw-r--r--source/blender/blenkernel/BKE_effect.h6
-rw-r--r--source/blender/blenkernel/BKE_endian.h6
-rw-r--r--source/blender/blenkernel/BKE_fluidsim.h55
-rw-r--r--source/blender/blenkernel/BKE_global.h9
-rw-r--r--source/blender/blenkernel/BKE_ipo.h53
-rw-r--r--source/blender/blenkernel/BKE_mesh.h1
-rw-r--r--source/blender/blenkernel/BKE_node.h8
-rw-r--r--source/blender/blenkernel/BKE_object.h5
-rw-r--r--source/blender/blenkernel/BKE_particle.h7
-rw-r--r--source/blender/blenkernel/BKE_property.h3
-rw-r--r--source/blender/blenkernel/BKE_shrinkwrap.h146
-rw-r--r--source/blender/blenkernel/BKE_simple_deform.h39
-rw-r--r--source/blender/blenkernel/BKE_suggestions.h93
-rw-r--r--source/blender/blenkernel/BKE_text.h29
-rw-r--r--source/blender/blenkernel/BKE_texture.h1
-rw-r--r--source/blender/blenkernel/BKE_utildefines.h8
-rw-r--r--source/blender/blenkernel/BKE_writeframeserver.h2
-rw-r--r--source/blender/blenkernel/CMakeLists.txt5
-rw-r--r--source/blender/blenkernel/SConscript4
-rw-r--r--source/blender/blenkernel/bad_level_call_stubs/stubs.c34
-rw-r--r--source/blender/blenkernel/intern/CCGSubSurf.c96
-rw-r--r--source/blender/blenkernel/intern/CCGSubSurf.h28
-rw-r--r--source/blender/blenkernel/intern/DerivedMesh.c1102
-rw-r--r--source/blender/blenkernel/intern/Makefile4
-rw-r--r--source/blender/blenkernel/intern/action.c61
-rw-r--r--source/blender/blenkernel/intern/anim.c24
-rw-r--r--source/blender/blenkernel/intern/armature.c40
-rw-r--r--source/blender/blenkernel/intern/blender.c36
-rw-r--r--source/blender/blenkernel/intern/brush.c1
-rw-r--r--source/blender/blenkernel/intern/bullet.c95
-rw-r--r--source/blender/blenkernel/intern/bvhutils.c426
-rw-r--r--source/blender/blenkernel/intern/cdderivedmesh.c145
-rw-r--r--source/blender/blenkernel/intern/cloth.c22
-rw-r--r--source/blender/blenkernel/intern/collision.c72
-rw-r--r--source/blender/blenkernel/intern/colortools.c22
-rw-r--r--source/blender/blenkernel/intern/constraint.c116
-rw-r--r--source/blender/blenkernel/intern/curve.c438
-rw-r--r--source/blender/blenkernel/intern/customdata.c7
-rw-r--r--source/blender/blenkernel/intern/deform.c28
-rw-r--r--source/blender/blenkernel/intern/depsgraph.c170
-rw-r--r--source/blender/blenkernel/intern/displist.c34
-rw-r--r--source/blender/blenkernel/intern/effect.c476
-rw-r--r--source/blender/blenkernel/intern/exotic.c14
-rw-r--r--source/blender/blenkernel/intern/fluidsim.c642
-rw-r--r--source/blender/blenkernel/intern/group.c13
-rw-r--r--source/blender/blenkernel/intern/icons.c2
-rw-r--r--source/blender/blenkernel/intern/idprop.c2
-rw-r--r--source/blender/blenkernel/intern/image.c21
-rw-r--r--source/blender/blenkernel/intern/implicit.c135
-rw-r--r--source/blender/blenkernel/intern/ipo.c3654
-rw-r--r--source/blender/blenkernel/intern/material.c7
-rw-r--r--source/blender/blenkernel/intern/mesh.c39
-rw-r--r--source/blender/blenkernel/intern/modifier.c856
-rw-r--r--source/blender/blenkernel/intern/multires.c8
-rw-r--r--source/blender/blenkernel/intern/node.c114
-rw-r--r--source/blender/blenkernel/intern/object.c102
-rw-r--r--source/blender/blenkernel/intern/particle.c640
-rw-r--r--source/blender/blenkernel/intern/particle_system.c1446
-rw-r--r--source/blender/blenkernel/intern/property.c16
-rw-r--r--source/blender/blenkernel/intern/sca.c3
-rw-r--r--source/blender/blenkernel/intern/scene.c7
-rw-r--r--source/blender/blenkernel/intern/shrinkwrap.c588
-rw-r--r--source/blender/blenkernel/intern/simple_deform.c248
-rw-r--r--source/blender/blenkernel/intern/softbody.c120
-rw-r--r--source/blender/blenkernel/intern/subsurf_ccg.c379
-rw-r--r--source/blender/blenkernel/intern/suggestions.c254
-rw-r--r--source/blender/blenkernel/intern/text.c556
-rw-r--r--source/blender/blenkernel/intern/texture.c12
-rw-r--r--source/blender/blenkernel/intern/writeframeserver.c2
-rw-r--r--source/blender/blenlib/BLI_arithb.h9
-rw-r--r--source/blender/blenlib/BLI_blenlib.h7
-rw-r--r--source/blender/blenlib/BLI_editVert.h8
-rw-r--r--source/blender/blenlib/BLI_kdopbvh.h3
-rw-r--r--source/blender/blenlib/BLI_rand.h1
-rw-r--r--source/blender/blenlib/BLI_winstuff.h8
-rw-r--r--source/blender/blenlib/SConscript2
-rw-r--r--source/blender/blenlib/intern/BLI_ghash.c8
-rw-r--r--source/blender/blenlib/intern/BLI_kdopbvh.c260
-rw-r--r--source/blender/blenlib/intern/arithb.c136
-rw-r--r--source/blender/blenlib/intern/bpath.c6
-rw-r--r--source/blender/blenlib/intern/dynlib.c6
-rw-r--r--source/blender/blenlib/intern/edgehash.c14
-rw-r--r--source/blender/blenlib/intern/fileops.c6
-rw-r--r--source/blender/blenlib/intern/freetypefont.c2
-rw-r--r--source/blender/blenlib/intern/psfont.c16
-rw-r--r--source/blender/blenlib/intern/rand.c18
-rw-r--r--source/blender/blenlib/intern/util.c93
-rw-r--r--source/blender/blenloader/BLO_readfile.h2
-rw-r--r--source/blender/blenloader/BLO_soundfile.h2
-rw-r--r--source/blender/blenloader/BLO_sys_types.h29
-rw-r--r--source/blender/blenloader/intern/genfile.c10
-rw-r--r--source/blender/blenloader/intern/readblenentry.c4
-rw-r--r--source/blender/blenloader/intern/readfile.c296
-rw-r--r--source/blender/blenloader/intern/writefile.c33
-rw-r--r--source/blender/blenpluginapi/intern/pluginapi.c4
-rw-r--r--source/blender/gpu/CMakeLists.txt34
-rw-r--r--source/blender/gpu/GPU_draw.h116
-rw-r--r--source/blender/gpu/GPU_extensions.h144
-rw-r--r--source/blender/gpu/GPU_material.h169
-rw-r--r--source/blender/gpu/Makefile37
-rw-r--r--source/blender/gpu/SConscript11
-rw-r--r--source/blender/gpu/intern/Makefile53
-rw-r--r--source/blender/gpu/intern/gpu_codegen.c1443
-rw-r--r--source/blender/gpu/intern/gpu_codegen.h87
-rw-r--r--source/blender/gpu/intern/gpu_draw.c1171
-rw-r--r--source/blender/gpu/intern/gpu_extensions.c992
-rw-r--r--source/blender/gpu/intern/gpu_material.c1496
-rw-r--r--source/blender/gpu/intern/gpu_shader_material.glsl1555
-rw-r--r--source/blender/gpu/intern/gpu_shader_material.glsl.c1032
-rw-r--r--source/blender/gpu/intern/gpu_shader_vertex.glsl12
-rw-r--r--source/blender/gpu/intern/gpu_shader_vertex.glsl.c13
-rw-r--r--source/blender/imbuf/intern/bmp.c4
-rw-r--r--source/blender/imbuf/intern/cineon/cineonlib.c32
-rw-r--r--source/blender/imbuf/intern/cineon/dpxlib.c36
-rw-r--r--source/blender/imbuf/intern/cineon/logImageCore.h6
-rw-r--r--source/blender/imbuf/intern/cineon/logmemfile.c6
-rw-r--r--source/blender/imbuf/intern/cineon/logmemfile.h2
-rw-r--r--source/blender/imbuf/intern/dds/ColorBlock.cpp37
-rw-r--r--source/blender/imbuf/intern/dds/ColorBlock.h2
-rw-r--r--source/blender/imbuf/intern/dds/DirectDrawSurface.cpp307
-rw-r--r--source/blender/imbuf/intern/dds/DirectDrawSurface.h4
-rw-r--r--source/blender/imbuf/intern/dds/dds_api.cpp1
-rw-r--r--source/blender/imbuf/intern/divers.c2
-rw-r--r--source/blender/imbuf/intern/rectop.c5
-rw-r--r--source/blender/imbuf/intern/scaling.c74
-rw-r--r--source/blender/include/BDR_drawmesh.h43
-rw-r--r--source/blender/include/BDR_drawobject.h3
-rw-r--r--source/blender/include/BDR_editobject.h2
-rw-r--r--source/blender/include/BDR_gpencil.h4
-rw-r--r--source/blender/include/BDR_imagepaint.h4
-rw-r--r--source/blender/include/BIF_drawgpencil.h5
-rw-r--r--source/blender/include/BIF_drawseq.h2
-rw-r--r--source/blender/include/BIF_drawtext.h5
-rw-r--r--source/blender/include/BIF_editaction.h2
-rw-r--r--source/blender/include/BIF_editarmature.h7
-rw-r--r--source/blender/include/BIF_editmesh.h4
-rw-r--r--source/blender/include/BIF_editparticle.h2
-rw-r--r--source/blender/include/BIF_editseq.h1
-rw-r--r--source/blender/include/BIF_editview.h1
-rw-r--r--source/blender/include/BIF_gl.h15
-rw-r--r--source/blender/include/BIF_glutil.h1
-rw-r--r--source/blender/include/BIF_keyframing.h131
-rw-r--r--source/blender/include/BIF_keyval.h3
-rw-r--r--source/blender/include/BIF_meshlaplacian.h2
-rw-r--r--source/blender/include/BIF_meshtools.h4
-rw-r--r--source/blender/include/BIF_outliner.h5
-rw-r--r--source/blender/include/BIF_resources.h14
-rw-r--r--source/blender/include/BIF_retopo.h18
-rw-r--r--source/blender/include/BIF_space.h4
-rw-r--r--source/blender/include/BSE_drawipo.h3
-rw-r--r--source/blender/include/BSE_drawview.h6
-rw-r--r--source/blender/include/BSE_editipo.h13
-rw-r--r--source/blender/include/blendef.h56
-rw-r--r--source/blender/include/butspace.h3
-rw-r--r--source/blender/include/license_key.h92
-rw-r--r--source/blender/include/transform.h2
-rw-r--r--source/blender/makesdna/DNA_action_types.h4
-rw-r--r--source/blender/makesdna/DNA_actuator_types.h19
-rw-r--r--source/blender/makesdna/DNA_brush_types.h4
-rw-r--r--source/blender/makesdna/DNA_constraint_types.h2
-rw-r--r--source/blender/makesdna/DNA_curve_types.h45
-rw-r--r--source/blender/makesdna/DNA_gpencil_types.h6
-rw-r--r--source/blender/makesdna/DNA_group_types.h2
-rw-r--r--source/blender/makesdna/DNA_image_types.h4
-rw-r--r--source/blender/makesdna/DNA_ipo_types.h170
-rw-r--r--source/blender/makesdna/DNA_lamp_types.h27
-rw-r--r--source/blender/makesdna/DNA_material_types.h12
-rw-r--r--source/blender/makesdna/DNA_meshdata_types.h1
-rw-r--r--source/blender/makesdna/DNA_modifier_types.h101
-rw-r--r--source/blender/makesdna/DNA_object_fluidsim.h18
-rw-r--r--source/blender/makesdna/DNA_object_force.h59
-rw-r--r--source/blender/makesdna/DNA_object_types.h25
-rw-r--r--source/blender/makesdna/DNA_particle_types.h6
-rw-r--r--source/blender/makesdna/DNA_scene_types.h11
-rw-r--r--source/blender/makesdna/DNA_sensor_types.h17
-rw-r--r--source/blender/makesdna/DNA_space_types.h16
-rw-r--r--source/blender/makesdna/DNA_text_types.h25
-rw-r--r--source/blender/makesdna/DNA_texture_types.h1
-rw-r--r--source/blender/makesdna/DNA_userdef_types.h12
-rw-r--r--source/blender/makesdna/DNA_view3d_types.h11
-rw-r--r--source/blender/makesdna/DNA_world_types.h4
-rw-r--r--source/blender/makesdna/intern/makesdna.c8
-rw-r--r--source/blender/nodes/CMakeLists.txt2
-rw-r--r--source/blender/nodes/SConscript1
-rw-r--r--source/blender/nodes/intern/CMP_nodes/CMP_tonemap.c9
-rw-r--r--source/blender/nodes/intern/CMP_nodes/Makefile1
-rw-r--r--source/blender/nodes/intern/Makefile2
-rw-r--r--source/blender/nodes/intern/SHD_nodes/Makefile2
-rw-r--r--source/blender/nodes/intern/SHD_nodes/SHD_camera.c10
-rw-r--r--source/blender/nodes/intern/SHD_nodes/SHD_curves.c24
-rw-r--r--source/blender/nodes/intern/SHD_nodes/SHD_geom.c16
-rw-r--r--source/blender/nodes/intern/SHD_nodes/SHD_hueSatVal.c9
-rw-r--r--source/blender/nodes/intern/SHD_nodes/SHD_invert.c8
-rw-r--r--source/blender/nodes/intern/SHD_nodes/SHD_mapping.c17
-rw-r--r--source/blender/nodes/intern/SHD_nodes/SHD_material.c79
-rw-r--r--source/blender/nodes/intern/SHD_nodes/SHD_math.c43
-rw-r--r--source/blender/nodes/intern/SHD_nodes/SHD_mixRgb.c14
-rw-r--r--source/blender/nodes/intern/SHD_nodes/SHD_normal.c11
-rw-r--r--source/blender/nodes/intern/SHD_nodes/SHD_output.c16
-rw-r--r--source/blender/nodes/intern/SHD_nodes/SHD_rgb.c11
-rw-r--r--source/blender/nodes/intern/SHD_nodes/SHD_sepcombRGB.c16
-rw-r--r--source/blender/nodes/intern/SHD_nodes/SHD_squeeze.c8
-rw-r--r--source/blender/nodes/intern/SHD_nodes/SHD_texture.c17
-rw-r--r--source/blender/nodes/intern/SHD_nodes/SHD_valToRgb.c20
-rw-r--r--source/blender/nodes/intern/SHD_nodes/SHD_value.c9
-rw-r--r--source/blender/nodes/intern/SHD_nodes/SHD_vectMath.c31
-rw-r--r--source/blender/nodes/intern/SHD_util.h2
-rw-r--r--source/blender/python/BPY_extern.h9
-rw-r--r--source/blender/python/BPY_interface.c203
-rw-r--r--source/blender/python/BPY_menus.c40
-rw-r--r--source/blender/python/BPY_menus.h2
-rw-r--r--source/blender/python/CMakeLists.txt6
-rw-r--r--source/blender/python/SConscript4
-rw-r--r--source/blender/python/api2_2x/Armature.c6
-rw-r--r--source/blender/python/api2_2x/BGL.h9
-rw-r--r--source/blender/python/api2_2x/Blender.c22
-rw-r--r--source/blender/python/api2_2x/Camera.c15
-rw-r--r--source/blender/python/api2_2x/Constraint.c3
-rw-r--r--source/blender/python/api2_2x/Draw.c120
-rw-r--r--source/blender/python/api2_2x/Geometry.c36
-rw-r--r--source/blender/python/api2_2x/Group.c39
-rw-r--r--source/blender/python/api2_2x/IDProp.c48
-rw-r--r--source/blender/python/api2_2x/Image.c4
-rw-r--r--source/blender/python/api2_2x/Ipo.c5
-rw-r--r--source/blender/python/api2_2x/Ipocurve.c1
-rw-r--r--source/blender/python/api2_2x/Ipocurve.h2
-rw-r--r--source/blender/python/api2_2x/Lamp.c150
-rw-r--r--source/blender/python/api2_2x/MTex.c347
-rw-r--r--source/blender/python/api2_2x/MTex.h8
-rw-r--r--source/blender/python/api2_2x/Makefile6
-rw-r--r--source/blender/python/api2_2x/Material.c466
-rw-r--r--source/blender/python/api2_2x/Mathutils.c2
-rw-r--r--source/blender/python/api2_2x/Mathutils.h2
-rw-r--r--source/blender/python/api2_2x/Mesh.c19
-rw-r--r--source/blender/python/api2_2x/Modifier.c53
-rw-r--r--source/blender/python/api2_2x/NLA.c4
-rw-r--r--source/blender/python/api2_2x/NMesh.c4
-rw-r--r--source/blender/python/api2_2x/Object.c186
-rw-r--r--source/blender/python/api2_2x/Particle.c20
-rw-r--r--source/blender/python/api2_2x/Pose.c30
-rw-r--r--source/blender/python/api2_2x/Scene.c31
-rw-r--r--source/blender/python/api2_2x/Sys.c4
-rw-r--r--source/blender/python/api2_2x/Text.c416
-rw-r--r--source/blender/python/api2_2x/Text.h2
-rw-r--r--source/blender/python/api2_2x/Text3d.c46
-rw-r--r--source/blender/python/api2_2x/Texture.c9
-rw-r--r--source/blender/python/api2_2x/Window.c16
-rw-r--r--source/blender/python/api2_2x/World.c151
-rw-r--r--source/blender/python/api2_2x/bpy_data.c27
-rw-r--r--source/blender/python/api2_2x/constant.c6
-rw-r--r--source/blender/python/api2_2x/doc/API_intro.py8
-rw-r--r--source/blender/python/api2_2x/doc/API_related.py13
-rw-r--r--source/blender/python/api2_2x/doc/Blender.py10
-rw-r--r--source/blender/python/api2_2x/doc/Draw.py8
-rw-r--r--source/blender/python/api2_2x/doc/Geometry.py12
-rw-r--r--source/blender/python/api2_2x/doc/Group.py2
-rw-r--r--source/blender/python/api2_2x/doc/Lamp.py2
-rw-r--r--source/blender/python/api2_2x/doc/Material.py81
-rw-r--r--source/blender/python/api2_2x/doc/Mathutils.py9
-rw-r--r--source/blender/python/api2_2x/doc/Mesh.py3
-rw-r--r--source/blender/python/api2_2x/doc/Modifier.py5
-rw-r--r--source/blender/python/api2_2x/doc/Object.py10
-rw-r--r--source/blender/python/api2_2x/doc/Text.py103
-rw-r--r--source/blender/python/api2_2x/doc/Text3d.py20
-rw-r--r--source/blender/python/api2_2x/doc/Texture.py151
-rw-r--r--source/blender/python/api2_2x/doc/World.py2
-rw-r--r--source/blender/python/api2_2x/gen_utils.h1
-rw-r--r--source/blender/python/api2_2x/matrix.c2
-rw-r--r--source/blender/python/api2_2x/sceneRender.c185
-rw-r--r--source/blender/python/api2_2x/sceneSequence.c123
-rw-r--r--source/blender/python/api2_2x/vector.c52
-rw-r--r--source/blender/python/api2_2x/vector.h1
-rw-r--r--source/blender/radiosity/CMakeLists.txt2
-rw-r--r--source/blender/radiosity/SConscript2
-rw-r--r--source/blender/radiosity/intern/source/Makefile2
-rw-r--r--source/blender/radiosity/intern/source/radfactors.c12
-rw-r--r--source/blender/radiosity/intern/source/radnode.c26
-rw-r--r--source/blender/radiosity/intern/source/radpreprocess.c6
-rw-r--r--source/blender/readblenfile/intern/BLO_readblenfile.c2
-rw-r--r--source/blender/render/CMakeLists.txt2
-rw-r--r--source/blender/render/SConscript2
-rw-r--r--source/blender/render/extern/include/RE_pipeline.h2
-rw-r--r--source/blender/render/intern/include/pixelshading.h2
-rw-r--r--source/blender/render/intern/include/render_types.h12
-rw-r--r--source/blender/render/intern/include/sunsky.h9
-rw-r--r--source/blender/render/intern/include/texture.h2
-rw-r--r--source/blender/render/intern/source/convertblender.c164
-rw-r--r--source/blender/render/intern/source/imagetexture.c8
-rw-r--r--source/blender/render/intern/source/initrender.c7
-rw-r--r--source/blender/render/intern/source/occlusion.c6
-rw-r--r--source/blender/render/intern/source/pipeline.c52
-rw-r--r--source/blender/render/intern/source/pixelshading.c91
-rw-r--r--source/blender/render/intern/source/rayshade.c62
-rw-r--r--source/blender/render/intern/source/rendercore.c174
-rw-r--r--source/blender/render/intern/source/renderdatabase.c14
-rw-r--r--source/blender/render/intern/source/shadbuf.c20
-rw-r--r--source/blender/render/intern/source/shadeinput.c15
-rw-r--r--source/blender/render/intern/source/shadeoutput.c45
-rw-r--r--source/blender/render/intern/source/strand.c4
-rw-r--r--source/blender/render/intern/source/sunsky.c27
-rw-r--r--source/blender/render/intern/source/texture.c14
-rw-r--r--source/blender/render/intern/source/zbuf.c142
-rw-r--r--source/blender/src/CMakeLists.txt5
-rw-r--r--source/blender/src/Makefile1
-rw-r--r--source/blender/src/SConscript11
-rw-r--r--source/blender/src/blenderbuttons.c4310
-rw-r--r--source/blender/src/buttons_editing.c171
-rw-r--r--source/blender/src/buttons_logic.c800
-rw-r--r--source/blender/src/buttons_object.c888
-rw-r--r--source/blender/src/buttons_scene.c24
-rw-r--r--source/blender/src/buttons_shading.c251
-rw-r--r--source/blender/src/cre/license_key.c194
-rw-r--r--source/blender/src/drawaction.c48
-rw-r--r--source/blender/src/drawarmature.c6
-rw-r--r--source/blender/src/drawgpencil.c437
-rw-r--r--source/blender/src/drawimage.c60
-rw-r--r--source/blender/src/drawipo.c86
-rw-r--r--source/blender/src/drawmesh.c783
-rw-r--r--source/blender/src/drawnode.c11
-rw-r--r--source/blender/src/drawobject.c433
-rw-r--r--source/blender/src/drawseq.c17
-rw-r--r--source/blender/src/drawtext.c2694
-rw-r--r--source/blender/src/drawtime.c24
-rw-r--r--source/blender/src/drawview.c458
-rw-r--r--source/blender/src/edit.c8
-rw-r--r--source/blender/src/editaction.c48
-rw-r--r--source/blender/src/editarmature.c240
-rw-r--r--source/blender/src/editcurve.c39
-rw-r--r--source/blender/src/editdeform.c2
-rw-r--r--source/blender/src/editface.c11
-rw-r--r--source/blender/src/editimasel.c13
-rw-r--r--source/blender/src/editipo.c1593
-rw-r--r--source/blender/src/editipo_lib.c15
-rw-r--r--source/blender/src/editipo_mods.c66
-rw-r--r--source/blender/src/editkey.c11
-rw-r--r--source/blender/src/editlattice.c2
-rw-r--r--source/blender/src/editmesh.c22
-rw-r--r--source/blender/src/editmesh_add.c159
-rw-r--r--source/blender/src/editmesh_lib.c4
-rw-r--r--source/blender/src/editmesh_loop.c12
-rw-r--r--source/blender/src/editmesh_mods.c22
-rw-r--r--source/blender/src/editmesh_tools.c412
-rw-r--r--source/blender/src/editmode_undo.c40
-rw-r--r--source/blender/src/editnla.c21
-rw-r--r--source/blender/src/editnode.c6
-rw-r--r--source/blender/src/editobject.c221
-rw-r--r--source/blender/src/editparticle.c6
-rw-r--r--source/blender/src/editscreen.c9
-rw-r--r--source/blender/src/editseq.c29
-rw-r--r--source/blender/src/editsima.c28
-rw-r--r--source/blender/src/editsound.c26
-rw-r--r--source/blender/src/editview.c5
-rw-r--r--source/blender/src/filelist.c30
-rw-r--r--source/blender/src/filesel.c83
-rw-r--r--source/blender/src/fluidsim.c481
-rw-r--r--source/blender/src/glutil.c78
-rw-r--r--source/blender/src/gpencil.c876
-rw-r--r--source/blender/src/header_action.c2
-rw-r--r--source/blender/src/header_buttonswin.c4
-rw-r--r--source/blender/src/header_image.c11
-rw-r--r--source/blender/src/header_info.c115
-rw-r--r--source/blender/src/header_ipo.c19
-rw-r--r--source/blender/src/header_nla.c2
-rw-r--r--source/blender/src/header_node.c6
-rw-r--r--source/blender/src/header_oops.c8
-rw-r--r--source/blender/src/header_script.c8
-rw-r--r--source/blender/src/header_seq.c2
-rw-r--r--source/blender/src/header_text.c405
-rw-r--r--source/blender/src/header_time.c28
-rw-r--r--source/blender/src/header_view3d.c89
-rw-r--r--source/blender/src/headerbuttons.c7
-rw-r--r--source/blender/src/imagepaint.c307
-rw-r--r--source/blender/src/interface.c146
-rw-r--r--source/blender/src/keyframing.c2092
-rw-r--r--source/blender/src/keyval.c195
-rw-r--r--source/blender/src/meshlaplacian.c18
-rw-r--r--source/blender/src/meshtools.c33
-rw-r--r--source/blender/src/mywindow.c12
-rw-r--r--source/blender/src/outliner.c282
-rw-r--r--source/blender/src/parametrizer.c24
-rw-r--r--source/blender/src/parametrizer.h4
-rw-r--r--source/blender/src/parametrizer_intern.h2
-rw-r--r--source/blender/src/playanim.c20
-rw-r--r--source/blender/src/poselib.c2
-rw-r--r--source/blender/src/poseobject.c5
-rw-r--r--source/blender/src/preview.blend.c24135
-rw-r--r--source/blender/src/previewrender.c52
-rw-r--r--source/blender/src/pub/license_key.c444
-rw-r--r--source/blender/src/renderwin.c48
-rw-r--r--source/blender/src/resources.c22
-rw-r--r--source/blender/src/retopo.c32
-rw-r--r--source/blender/src/sculptmode.c33
-rw-r--r--source/blender/src/seqaudio.c24
-rw-r--r--source/blender/src/seqscopes.c1
-rw-r--r--source/blender/src/sequence.c13
-rw-r--r--source/blender/src/space.c259
-rw-r--r--source/blender/src/toets.c28
-rw-r--r--source/blender/src/toolbox.c38
-rw-r--r--source/blender/src/transform.c6
-rw-r--r--source/blender/src/transform_conversions.c222
-rw-r--r--source/blender/src/transform_generics.c49
-rw-r--r--source/blender/src/transform_ndofinput.c8
-rw-r--r--source/blender/src/transform_numinput.c14
-rw-r--r--source/blender/src/transform_orientations.c2
-rw-r--r--source/blender/src/transform_snap.c8
-rw-r--r--source/blender/src/unwrapper.c3
-rw-r--r--source/blender/src/usiblender.c52
-rw-r--r--source/blender/src/verse_image.c4
-rw-r--r--source/blender/src/view.c224
-rw-r--r--source/blender/src/vpaint.c6
-rw-r--r--source/blender/src/writeimage.c1
-rw-r--r--source/blender/yafray/intern/export_File.cpp4
-rw-r--r--source/blender/yafray/intern/export_Plugin.cpp8
-rw-r--r--source/creator/CMakeLists.txt15
-rw-r--r--source/creator/Makefile8
-rw-r--r--source/creator/SConscript2
-rw-r--r--source/creator/creator.c110
-rw-r--r--source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp100
-rw-r--r--source/gameengine/BlenderRoutines/CMakeLists.txt1
-rw-r--r--source/gameengine/BlenderRoutines/KX_BlenderGL.cpp75
-rw-r--r--source/gameengine/BlenderRoutines/KX_BlenderGL.h3
-rw-r--r--source/gameengine/BlenderRoutines/KX_BlenderRenderTools.cpp262
-rw-r--r--source/gameengine/BlenderRoutines/KX_BlenderRenderTools.h71
-rw-r--r--source/gameengine/BlenderRoutines/Makefile5
-rw-r--r--source/gameengine/BlenderRoutines/SConscript5
-rw-r--r--source/gameengine/Converter/BL_ActionActuator.cpp91
-rw-r--r--source/gameengine/Converter/BL_ArmatureObject.cpp91
-rw-r--r--source/gameengine/Converter/BL_ArmatureObject.h10
-rw-r--r--source/gameengine/Converter/BL_BlenderDataConversion.cpp363
-rw-r--r--source/gameengine/Converter/BL_DeformableGameObject.cpp8
-rw-r--r--source/gameengine/Converter/BL_DeformableGameObject.h14
-rw-r--r--source/gameengine/Converter/BL_MeshDeformer.cpp89
-rw-r--r--source/gameengine/Converter/BL_MeshDeformer.h5
-rw-r--r--source/gameengine/Converter/BL_ShapeActionActuator.cpp220
-rw-r--r--source/gameengine/Converter/BL_ShapeActionActuator.h5
-rw-r--r--source/gameengine/Converter/BL_ShapeDeformer.cpp9
-rw-r--r--source/gameengine/Converter/BL_ShapeDeformer.h13
-rw-r--r--source/gameengine/Converter/BL_SkinDeformer.cpp51
-rw-r--r--source/gameengine/Converter/BL_SkinDeformer.h18
-rw-r--r--source/gameengine/Converter/BL_SkinMeshObject.cpp74
-rw-r--r--source/gameengine/Converter/BL_SkinMeshObject.h45
-rw-r--r--source/gameengine/Converter/CMakeLists.txt1
-rw-r--r--source/gameengine/Converter/KX_BlenderSceneConverter.cpp72
-rw-r--r--source/gameengine/Converter/KX_BlenderSceneConverter.h2
-rw-r--r--source/gameengine/Converter/KX_ConvertActuators.cpp168
-rw-r--r--source/gameengine/Converter/KX_ConvertProperties.cpp8
-rw-r--r--source/gameengine/Converter/KX_ConvertSensors.cpp49
-rw-r--r--source/gameengine/Converter/KX_ConvertSensors.h1
-rw-r--r--source/gameengine/Converter/Makefile1
-rw-r--r--source/gameengine/Converter/SConscript2
-rw-r--r--source/gameengine/Expressions/Makefile1
-rw-r--r--source/gameengine/Expressions/PyObjectPlus.cpp4
-rw-r--r--source/gameengine/Expressions/PyObjectPlus.h55
-rw-r--r--source/gameengine/Expressions/Value.cpp30
-rw-r--r--source/gameengine/GameLogic/Joystick/SCA_Joystick.cpp245
-rw-r--r--source/gameengine/GameLogic/Joystick/SCA_Joystick.h214
-rw-r--r--source/gameengine/GameLogic/Joystick/SCA_JoystickDefines.h8
-rw-r--r--source/gameengine/GameLogic/Joystick/SCA_JoystickEvents.cpp59
-rw-r--r--source/gameengine/GameLogic/Joystick/SCA_JoystickPrivate.h7
-rw-r--r--source/gameengine/GameLogic/Makefile1
-rw-r--r--source/gameengine/GameLogic/SCA_2DFilterActuator.cpp8
-rw-r--r--source/gameengine/GameLogic/SCA_ActuatorSensor.cpp8
-rw-r--r--source/gameengine/GameLogic/SCA_DelaySensor.cpp257
-rw-r--r--source/gameengine/GameLogic/SCA_DelaySensor.h77
-rw-r--r--source/gameengine/GameLogic/SCA_IController.cpp2
-rw-r--r--source/gameengine/GameLogic/SCA_ILogicBrick.cpp1
-rw-r--r--source/gameengine/GameLogic/SCA_ISensor.cpp103
-rw-r--r--source/gameengine/GameLogic/SCA_ISensor.h14
-rw-r--r--source/gameengine/GameLogic/SCA_JoystickManager.cpp35
-rw-r--r--source/gameengine/GameLogic/SCA_JoystickManager.h4
-rw-r--r--source/gameengine/GameLogic/SCA_JoystickSensor.cpp210
-rw-r--r--source/gameengine/GameLogic/SCA_JoystickSensor.h43
-rw-r--r--source/gameengine/GameLogic/SCA_KeyboardSensor.cpp40
-rw-r--r--source/gameengine/GameLogic/SCA_LogicManager.cpp31
-rw-r--r--source/gameengine/GameLogic/SCA_LogicManager.h2
-rw-r--r--source/gameengine/GameLogic/SCA_MouseSensor.cpp8
-rw-r--r--source/gameengine/GameLogic/SCA_PropertyActuator.cpp16
-rw-r--r--source/gameengine/GameLogic/SCA_PropertySensor.cpp24
-rw-r--r--source/gameengine/GameLogic/SCA_PythonController.cpp41
-rw-r--r--source/gameengine/GameLogic/SCA_PythonController.h10
-rw-r--r--source/gameengine/GameLogic/SCA_RandomActuator.cpp68
-rw-r--r--source/gameengine/GameLogic/SCA_RandomSensor.cpp12
-rw-r--r--source/gameengine/GameLogic/SConscript7
-rw-r--r--source/gameengine/GamePlayer/CMakeLists.txt4
-rw-r--r--source/gameengine/GamePlayer/common/CMakeLists.txt2
-rw-r--r--source/gameengine/GamePlayer/common/GPC_RawImage.cpp2
-rw-r--r--source/gameengine/GamePlayer/common/GPC_RawImage.h2
-rw-r--r--source/gameengine/GamePlayer/common/GPC_RenderTools.cpp538
-rw-r--r--source/gameengine/GamePlayer/common/GPC_RenderTools.h168
-rw-r--r--source/gameengine/GamePlayer/common/Makefile5
-rw-r--r--source/gameengine/GamePlayer/common/SConscript2
-rw-r--r--source/gameengine/GamePlayer/common/unix/GPU_PolygonMaterial.h4
-rw-r--r--source/gameengine/GamePlayer/ghost/CMakeLists.txt1
-rw-r--r--source/gameengine/GamePlayer/ghost/GPG_Application.cpp104
-rw-r--r--source/gameengine/GamePlayer/ghost/GPG_Application.h17
-rw-r--r--source/gameengine/GamePlayer/ghost/GPG_ghost.cpp119
-rw-r--r--source/gameengine/GamePlayer/ghost/Makefile6
-rw-r--r--source/gameengine/GamePlayer/ghost/SConscript4
-rw-r--r--source/gameengine/Ketsji/BL_BlenderShader.cpp124
-rw-r--r--source/gameengine/Ketsji/BL_BlenderShader.h10
-rw-r--r--source/gameengine/Ketsji/BL_Material.h6
-rw-r--r--source/gameengine/Ketsji/BL_Shader.cpp40
-rw-r--r--source/gameengine/Ketsji/BL_Shader.h6
-rw-r--r--source/gameengine/Ketsji/CMakeLists.txt1
-rw-r--r--source/gameengine/Ketsji/KXNetwork/KX_NetworkMessageSensor.cpp88
-rw-r--r--source/gameengine/Ketsji/KXNetwork/KX_NetworkMessageSensor.h10
-rw-r--r--source/gameengine/Ketsji/KX_BlenderMaterial.cpp126
-rw-r--r--source/gameengine/Ketsji/KX_BlenderMaterial.h3
-rw-r--r--source/gameengine/Ketsji/KX_BulletPhysicsController.cpp41
-rw-r--r--source/gameengine/Ketsji/KX_BulletPhysicsController.h4
-rw-r--r--source/gameengine/Ketsji/KX_CameraActuator.cpp42
-rw-r--r--source/gameengine/Ketsji/KX_ConstraintActuator.cpp357
-rw-r--r--source/gameengine/Ketsji/KX_ConstraintActuator.h26
-rw-r--r--source/gameengine/Ketsji/KX_ConstraintWrapper.cpp1
-rw-r--r--source/gameengine/Ketsji/KX_ConvertPhysicsObject.h42
-rw-r--r--source/gameengine/Ketsji/KX_ConvertPhysicsObjects.cpp655
-rw-r--r--source/gameengine/Ketsji/KX_GameActuator.cpp74
-rw-r--r--source/gameengine/Ketsji/KX_GameActuator.h2
-rw-r--r--source/gameengine/Ketsji/KX_GameObject.cpp369
-rw-r--r--source/gameengine/Ketsji/KX_GameObject.h118
-rw-r--r--source/gameengine/Ketsji/KX_IPO_SGController.cpp117
-rw-r--r--source/gameengine/Ketsji/KX_IPO_SGController.h6
-rw-r--r--source/gameengine/Ketsji/KX_IPhysicsController.h4
-rw-r--r--source/gameengine/Ketsji/KX_ISceneConverter.h4
-rw-r--r--source/gameengine/Ketsji/KX_IpoActuator.cpp95
-rw-r--r--source/gameengine/Ketsji/KX_IpoActuator.h4
-rw-r--r--source/gameengine/Ketsji/KX_KetsjiEngine.cpp246
-rw-r--r--source/gameengine/Ketsji/KX_KetsjiEngine.h14
-rw-r--r--source/gameengine/Ketsji/KX_Light.cpp64
-rw-r--r--source/gameengine/Ketsji/KX_Light.h11
-rw-r--r--source/gameengine/Ketsji/KX_MaterialIpoController.cpp10
-rw-r--r--source/gameengine/Ketsji/KX_MeshProxy.cpp46
-rw-r--r--source/gameengine/Ketsji/KX_MeshProxy.h2
-rw-r--r--source/gameengine/Ketsji/KX_MouseFocusSensor.cpp60
-rw-r--r--source/gameengine/Ketsji/KX_MouseFocusSensor.h16
-rw-r--r--source/gameengine/Ketsji/KX_NearSensor.cpp16
-rw-r--r--source/gameengine/Ketsji/KX_OdePhysicsController.cpp5
-rw-r--r--source/gameengine/Ketsji/KX_OdePhysicsController.h2
-rw-r--r--source/gameengine/Ketsji/KX_ParentActuator.cpp10
-rw-r--r--source/gameengine/Ketsji/KX_PhysicsObjectWrapper.cpp2
-rw-r--r--source/gameengine/Ketsji/KX_PolyProxy.cpp265
-rw-r--r--source/gameengine/Ketsji/KX_PolyProxy.h71
-rw-r--r--source/gameengine/Ketsji/KX_PolygonMaterial.cpp50
-rw-r--r--source/gameengine/Ketsji/KX_PolygonMaterial.h2
-rw-r--r--source/gameengine/Ketsji/KX_PyConstraintBinding.cpp40
-rw-r--r--source/gameengine/Ketsji/KX_PythonInit.cpp918
-rw-r--r--source/gameengine/Ketsji/KX_PythonInit.h6
-rw-r--r--source/gameengine/Ketsji/KX_RadarSensor.cpp12
-rw-r--r--source/gameengine/Ketsji/KX_RayCast.cpp85
-rw-r--r--source/gameengine/Ketsji/KX_RayCast.h60
-rw-r--r--source/gameengine/Ketsji/KX_RaySensor.cpp74
-rw-r--r--source/gameengine/Ketsji/KX_RaySensor.h8
-rw-r--r--source/gameengine/Ketsji/KX_SCA_AddObjectActuator.cpp142
-rw-r--r--source/gameengine/Ketsji/KX_SCA_AddObjectActuator.h30
-rw-r--r--source/gameengine/Ketsji/KX_SCA_ReplaceMeshActuator.cpp43
-rw-r--r--source/gameengine/Ketsji/KX_SCA_ReplaceMeshActuator.h2
-rw-r--r--source/gameengine/Ketsji/KX_SG_BoneParentNodeRelationship.cpp2
-rw-r--r--source/gameengine/Ketsji/KX_Scene.cpp111
-rw-r--r--source/gameengine/Ketsji/KX_Scene.h16
-rw-r--r--source/gameengine/Ketsji/KX_SceneActuator.cpp24
-rw-r--r--source/gameengine/Ketsji/KX_SoundActuator.cpp64
-rw-r--r--source/gameengine/Ketsji/KX_StateActuator.cpp8
-rw-r--r--source/gameengine/Ketsji/KX_SumoPhysicsController.cpp5
-rw-r--r--source/gameengine/Ketsji/KX_SumoPhysicsController.h1
-rw-r--r--source/gameengine/Ketsji/KX_TouchSensor.cpp20
-rw-r--r--source/gameengine/Ketsji/KX_TrackToActuator.cpp26
-rw-r--r--source/gameengine/Ketsji/KX_VehicleWrapper.cpp2
-rw-r--r--source/gameengine/Ketsji/KX_VertexProxy.cpp14
-rw-r--r--source/gameengine/Ketsji/KX_VisibilityActuator.cpp14
-rw-r--r--source/gameengine/Ketsji/KX_VisibilityActuator.h2
-rw-r--r--source/gameengine/Ketsji/Makefile11
-rw-r--r--source/gameengine/Ketsji/SConscript5
-rw-r--r--source/gameengine/Physics/BlOde/OdePhysicsController.h2
-rw-r--r--source/gameengine/Physics/BlOde/OdePhysicsEnvironment.cpp5
-rw-r--r--source/gameengine/Physics/BlOde/OdePhysicsEnvironment.h3
-rw-r--r--source/gameengine/Physics/Bullet/CMakeLists.txt4
-rw-r--r--source/gameengine/Physics/Bullet/CcdPhysicsController.cpp1098
-rw-r--r--source/gameengine/Physics/Bullet/CcdPhysicsController.h263
-rw-r--r--source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.cpp731
-rw-r--r--source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.h22
-rw-r--r--source/gameengine/Physics/Bullet/Makefile5
-rw-r--r--source/gameengine/Physics/Bullet/SConscript2
-rw-r--r--source/gameengine/Physics/Dummy/DummyPhysicsEnvironment.cpp3
-rw-r--r--source/gameengine/Physics/Dummy/DummyPhysicsEnvironment.h3
-rw-r--r--source/gameengine/Physics/Sumo/SumoPhysicsController.h1
-rw-r--r--source/gameengine/Physics/Sumo/SumoPhysicsEnvironment.cpp31
-rw-r--r--source/gameengine/Physics/Sumo/SumoPhysicsEnvironment.h3
-rw-r--r--source/gameengine/Physics/common/PHY_DynamicTypes.h12
-rw-r--r--source/gameengine/Physics/common/PHY_IPhysicsController.h3
-rw-r--r--source/gameengine/Physics/common/PHY_IPhysicsEnvironment.h47
-rw-r--r--source/gameengine/PyDoc/BL_ActionActuator.py13
-rw-r--r--source/gameengine/PyDoc/BL_ShapeActionActuator.py13
-rw-r--r--source/gameengine/PyDoc/GameKeys.py9
-rw-r--r--source/gameengine/PyDoc/GameLogic.py21
-rw-r--r--source/gameengine/PyDoc/KX_GameObject.py90
-rw-r--r--source/gameengine/PyDoc/KX_MeshProxy.py15
-rw-r--r--source/gameengine/PyDoc/KX_ObjectActuator.py4
-rw-r--r--source/gameengine/PyDoc/KX_PolyProxy.py100
-rw-r--r--source/gameengine/PyDoc/KX_SCA_AddObjectActuator.py17
-rw-r--r--source/gameengine/PyDoc/KX_SCA_ReplaceMeshActuator.py5
-rw-r--r--source/gameengine/PyDoc/KX_TrackToActuator.py2
-rw-r--r--source/gameengine/PyDoc/Rasterizer.py50
-rw-r--r--source/gameengine/PyDoc/SCA_DelaySensor.py56
-rw-r--r--source/gameengine/PyDoc/SCA_ISensor.py13
-rw-r--r--source/gameengine/Rasterizer/Makefile4
-rw-r--r--source/gameengine/Rasterizer/RAS_2DFilterManager.cpp2
-rw-r--r--source/gameengine/Rasterizer/RAS_2DFilterManager.h2
-rw-r--r--source/gameengine/Rasterizer/RAS_BucketManager.cpp254
-rw-r--r--source/gameengine/Rasterizer/RAS_BucketManager.h21
-rw-r--r--source/gameengine/Rasterizer/RAS_Deformer.h6
-rw-r--r--source/gameengine/Rasterizer/RAS_FramingManager.h15
-rw-r--r--source/gameengine/Rasterizer/RAS_IPolygonMaterial.cpp25
-rw-r--r--source/gameengine/Rasterizer/RAS_IPolygonMaterial.h9
-rw-r--r--source/gameengine/Rasterizer/RAS_IRasterizer.h52
-rw-r--r--source/gameengine/Rasterizer/RAS_IRenderTools.cpp24
-rw-r--r--source/gameengine/Rasterizer/RAS_IRenderTools.h39
-rw-r--r--source/gameengine/Rasterizer/RAS_MaterialBucket.cpp576
-rw-r--r--source/gameengine/Rasterizer/RAS_MaterialBucket.h213
-rw-r--r--source/gameengine/Rasterizer/RAS_MeshObject.cpp725
-rw-r--r--source/gameengine/Rasterizer/RAS_MeshObject.h240
-rw-r--r--source/gameengine/Rasterizer/RAS_OpenGLFilters/RAS_Blur2DFilter.h2
-rw-r--r--source/gameengine/Rasterizer/RAS_OpenGLFilters/RAS_Dilation2DFilter.h2
-rw-r--r--source/gameengine/Rasterizer/RAS_OpenGLFilters/RAS_Erosion2DFilter.h2
-rw-r--r--source/gameengine/Rasterizer/RAS_OpenGLFilters/RAS_GrayScale2DFilter.h2
-rw-r--r--source/gameengine/Rasterizer/RAS_OpenGLFilters/RAS_Invert2DFilter.h2
-rw-r--r--source/gameengine/Rasterizer/RAS_OpenGLFilters/RAS_Laplacian2DFilter.h2
-rw-r--r--source/gameengine/Rasterizer/RAS_OpenGLFilters/RAS_Prewitt2DFilter.h2
-rw-r--r--source/gameengine/Rasterizer/RAS_OpenGLFilters/RAS_Sepia2DFilter.h2
-rw-r--r--source/gameengine/Rasterizer/RAS_OpenGLFilters/RAS_Sharpen2DFilter.h2
-rw-r--r--source/gameengine/Rasterizer/RAS_OpenGLFilters/RAS_Sobel2DFilter.h2
-rw-r--r--source/gameengine/Rasterizer/RAS_OpenGLRasterizer/CMakeLists.txt1
-rw-r--r--source/gameengine/Rasterizer/RAS_OpenGLRasterizer/Makefile5
-rw-r--r--source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_ListRasterizer.cpp84
-rw-r--r--source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_ListRasterizer.h24
-rw-r--r--source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp782
-rw-r--r--source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.h49
-rw-r--r--source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_VAOpenGLRasterizer.cpp216
-rw-r--r--source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_VAOpenGLRasterizer.h18
-rw-r--r--source/gameengine/Rasterizer/RAS_OpenGLRasterizer/SConscript5
-rw-r--r--source/gameengine/Rasterizer/RAS_Polygon.cpp83
-rw-r--r--source/gameengine/Rasterizer/RAS_Polygon.h56
-rw-r--r--source/gameengine/Rasterizer/RAS_TexVert.cpp31
-rw-r--r--source/gameengine/Rasterizer/RAS_TexVert.h49
-rw-r--r--source/gameengine/Rasterizer/SConscript5
-rw-r--r--source/kernel/CMakeLists.txt2
-rw-r--r--source/kernel/SConscript2
-rw-r--r--source/kernel/gen_system/GEN_HashedPtr.cpp8
-rw-r--r--source/kernel/gen_system/GEN_Map.h13
-rw-r--r--source/kernel/gen_system/Makefile1
-rw-r--r--source/nan_definitions.mk11
665 files changed, 58311 insertions, 33315 deletions
diff --git a/source/Makefile b/source/Makefile
index d06962cbe3f..99155206987 100644
--- a/source/Makefile
+++ b/source/Makefile
@@ -100,10 +100,13 @@ COMLIB += $(OCGDIR)/blender/nodes_cmp/$(DEBUG_DIR)libnodes_cmp.a
COMLIB += $(OCGDIR)/blender/nodes/$(DEBUG_DIR)libnodes.a
COMLIB += $(OCGDIR)/blender/imbuf/$(DEBUG_DIR)libimbuf.a
COMLIB += $(OCGDIR)/blender/blenlib/$(DEBUG_DIR)libblenlib.a
+COMLIB += $(NAN_IKSOLVER)/lib/libiksolver.a
COMLIB += $(NAN_OPENNL)/lib/$(DEBUG_DIR)libopennl.a
COMLIB += $(NAN_SUPERLU)/lib/$(DEBUG_DIR)libsuperlu.a
COMLIB += $(OCGDIR)/blender/avi/$(DEBUG_DIR)libavi.a
COMLIB += $(NAN_JPEG)/lib/libjpeg.a
+COMLIB += $(OCGDIR)/blender/gpu/$(DEBUG_DIR)libgpu.a
+COMLIB += $(NAN_GLEW)/lib/libglew.a
ifneq ($(NAN_NO_KETSJI),true)
COMLIB += $(OCGDIR)/gameengine/bloutines/$(DEBUG_DIR)libbloutines.a
@@ -157,7 +160,6 @@ COMLIB += $(NAN_BMFONT)/lib/$(DEBUG_DIR)libbmfont.a
COMLIB += $(NAN_PNG)/lib/libpng.a
COMLIB += $(OCGDIR)/blender/yafray/$(DEBUG_DIR)libyafrayexport.a
COMLIB += $(OCGDIR)/blender/blenlib/$(DEBUG_DIR)libblenlib.a
-COMLIB += $(NAN_GLEW)/lib/libglew.a
ifeq ($(WITH_QUICKTIME), true)
COMLIB += $(OCGDIR)/blender/blenderqt/$(DEBUG_DIR)libblenderqt.a
@@ -226,8 +228,7 @@ ifeq ($(WITH_OPENEXR), true)
COMLIB += $(NAN_OPENEXR_LIBS)
endif
-PULIB = $(NAN_IKSOLVER)/lib/libiksolver.a
-PULIB += $(NAN_MOTO)/lib/libmoto.a
+PULIB = $(NAN_MOTO)/lib/libmoto.a
PULIB += $(NAN_ELBEEM)/lib/$(DEBUG_DIR)libelbeem.a
PULIB += $(OCGDIR)/blender/readblenfile/$(DEBUG_DIR)libreadblenfile.a
PULIB += $(OCGDIR)/blender/src/$(DEBUG_DIR)libsrcpublisher.a
@@ -241,6 +242,7 @@ endif
SPLIB1 = $(OCGDIR)/gameengine/GamePlayer/ghost/$(DEBUG_DIR)libghost.a
SPLIB1 += $(OCGDIR)/gameengine/GamePlayer/common/$(DEBUG_DIR)libcommon.a
+SPLIB1 += $(OCGDIR)/gameengine/blconverter/$(DEBUG_DIR)libblconverter.a
SPLIB1 += $(NAN_STRING)/lib/$(DEBUG_DIR)libstring.a
SPLIB1 += $(NAN_GHOST)/lib/$(DEBUG_DIR)libghost.a
@@ -250,6 +252,7 @@ SPLIB += $(OCGDIR)/blender/readblenfile/$(DEBUG_DIR)libreadblenfile.a
# but somehow it consistently fails to resolve these symbols... or
# can I just not check them? nm claims they aren't...
SPLIB += $(OCGDIR)/blender/blenkernel/blenkernel_blc/$(DEBUG_DIR)libblenkernel_blc.a
+SPLIB += $(OCGDIR)/blender/python/$(DEBUG_DIR)libpython.a
# These three need to be explicitly mentioned on the cl, because
# if they are offered as a lib, they are optimized away. (nzc)
diff --git a/source/blender/CMakeLists.txt b/source/blender/CMakeLists.txt
index 966bf5f7be4..a21eadf15fa 100644
--- a/source/blender/CMakeLists.txt
+++ b/source/blender/CMakeLists.txt
@@ -24,7 +24,7 @@
#
# ***** END GPL LICENSE BLOCK *****
-SUBDIRS(avi nodes blenkernel blenlib blenloader blenpluginapi imbuf imbuf/intern/cineon makesdna python radiosity readblenfile render src yafray)
+SUBDIRS(avi nodes blenkernel blenlib blenloader blenpluginapi imbuf imbuf/intern/cineon gpu makesdna python radiosity readblenfile render src yafray)
IF(WITH_INTERNATIONAL)
SUBDIRS(ftfont)
diff --git a/source/blender/Makefile b/source/blender/Makefile
index 937512f34bd..52abd2cdddb 100644
--- a/source/blender/Makefile
+++ b/source/blender/Makefile
@@ -33,7 +33,7 @@ include nan_definitions.mk
DIRS = blenloader readblenfile
DIRS += avi imbuf render radiosity blenlib blenkernel blenpluginapi
DIRS += makesdna src yafray
-DIRS += python nodes
+DIRS += python nodes gpu
ifeq ($(WITH_FREETYPE2), true)
DIRS += ftfont
diff --git a/source/blender/SConscript b/source/blender/SConscript
index 56a661238f8..25745c0e51a 100644
--- a/source/blender/SConscript
+++ b/source/blender/SConscript
@@ -7,6 +7,7 @@ SConscript(['avi/SConscript',
'blenlib/SConscript',
'blenloader/SConscript',
'blenpluginapi/SConscript',
+ 'gpu/SConscript',
'imbuf/SConscript',
'imbuf/intern/cineon/SConscript',
'makesdna/SConscript',
diff --git a/source/blender/blenkernel/BKE_DerivedMesh.h b/source/blender/blenkernel/BKE_DerivedMesh.h
index 7dc10c53e22..5a1e266adeb 100644
--- a/source/blender/blenkernel/BKE_DerivedMesh.h
+++ b/source/blender/blenkernel/BKE_DerivedMesh.h
@@ -55,6 +55,7 @@ struct EditMesh;
struct ModifierData;
struct MCol;
struct ColorBand;
+struct GPUVertexAttribs;
/* number of sub-elements each mesh element has (for interpolation) */
#define SUB_ELEMS_VERT 0
@@ -198,7 +199,8 @@ struct DerivedMesh {
*
* Also called for *final* editmode DerivedMeshes
*/
- void (*drawFacesSolid)(DerivedMesh *dm, int (*setMaterial)(int));
+ void (*drawFacesSolid)(DerivedMesh *dm,
+ int (*setMaterial)(int, void *attribs));
/* Draw all faces
* o If useTwoSided, draw front and back using col arrays
@@ -215,6 +217,13 @@ struct DerivedMesh {
int (*setDrawOptions)(struct MTFace *tface,
struct MCol *mcol, int matnr));
+ /* Draw all faces with GLSL materials
+ * o setMaterial is called for every different material nr
+ * o Only if setMaterial returns true
+ */
+ void (*drawFacesGLSL)(DerivedMesh *dm,
+ int (*setMaterial)(int, void *attribs));
+
/* Draw mapped faces (no color, or texture)
* o Only if !setDrawOptions or
* setDrawOptions(userData, mapped-face-index, drawSmooth_r)
@@ -241,6 +250,15 @@ struct DerivedMesh {
int index),
void *userData);
+ /* Draw mapped faces with GLSL materials
+ * o setMaterial is called for every different material nr
+ * o setDrawOptions is called for every face
+ * o Only if setMaterial and setDrawOptions return true
+ */
+ void (*drawMappedFacesGLSL)(DerivedMesh *dm,
+ int (*setMaterial)(int, void *attribs),
+ int (*setDrawOptions)(void *userData, int index), void *userData);
+
/* Draw mapped edges as lines
* o Only if !setDrawOptions or setDrawOptions(userData, mapped-edge)
* returns true
@@ -412,7 +430,10 @@ DerivedMesh *mesh_create_derived_for_modifier(struct Object *ob, struct Modifier
DerivedMesh *mesh_create_derived_render(struct Object *ob,
CustomDataMask dataMask);
-/* same as above but wont use render settings */
+
+DerivedMesh *mesh_create_derived_index_render(struct Object *ob, CustomDataMask dataMask, int index);
+
+ /* same as above but wont use render settings */
DerivedMesh *mesh_create_derived_view(struct Object *ob,
CustomDataMask dataMask);
DerivedMesh *mesh_create_derived_no_deform(struct Object *ob,
@@ -437,6 +458,35 @@ void weight_to_rgb(float input, float *fr, float *fg, float *fb);
/* determines required DerivedMesh data according to view and edit modes */
CustomDataMask get_viewedit_datamask();
+/* convert layers requested by a GLSL material to actually available layers in
+ * the DerivedMesh, with both a pointer for arrays and an offset for editmesh */
+typedef struct DMVertexAttribs {
+ struct {
+ struct MTFace *array;
+ int emOffset, glIndex;
+ } tface[MAX_MTFACE];
+
+ struct {
+ struct MCol *array;
+ int emOffset, glIndex;
+ } mcol[MAX_MCOL];
+
+ struct {
+ float (*array)[3];
+ int emOffset, glIndex;
+ } tang;
+
+ struct {
+ float (*array)[3];
+ int emOffset, glIndex;
+ } orco;
+
+ int tottface, totmcol, tottang, totorco;
+} DMVertexAttribs;
+
+void DM_vertex_attributes_from_gpu(DerivedMesh *dm,
+ struct GPUVertexAttribs *gattribs, DMVertexAttribs *attribs);
+
void DM_add_tangent_layer(DerivedMesh *dm);
#endif
diff --git a/source/blender/blenkernel/BKE_action.h b/source/blender/blenkernel/BKE_action.h
index 716eac81b55..37ced4cb00b 100644
--- a/source/blender/blenkernel/BKE_action.h
+++ b/source/blender/blenkernel/BKE_action.h
@@ -159,10 +159,14 @@ float get_action_frame(struct Object *ob, float cframe);
/* map strip time to global time (frame nr) */
float get_action_frame_inv(struct Object *ob, float cframe);
/* builds a list of NlaIpoChannel with ipo values to write in datablock */
-void extract_ipochannels_from_action(ListBase *lb, struct ID *id, struct bAction *act, char *name, float ctime);
+void extract_ipochannels_from_action(ListBase *lb, struct ID *id, struct bAction *act, const char *name, float ctime);
/* write values returned by extract_ipochannels_from_action, returns the number of value written */
int execute_ipochannels(ListBase *lb);
+/* functions used by the game engine */
+void game_copy_pose(struct bPose **dst, struct bPose *src);
+void game_free_pose(struct bPose *pose);
+
#ifdef __cplusplus
};
#endif
diff --git a/source/blender/blenkernel/BKE_bad_level_calls.h b/source/blender/blenkernel/BKE_bad_level_calls.h
index 3e45749c26a..0b623526562 100644
--- a/source/blender/blenkernel/BKE_bad_level_calls.h
+++ b/source/blender/blenkernel/BKE_bad_level_calls.h
@@ -115,10 +115,6 @@ void free_editArmature(void);
void docenter_new(void);
int saveover(char *str);
-/* image.c */
-#include "DNA_image_types.h"
-void free_realtime_image(Image *ima); // has to become a callback, opengl stuff
-
/* ipo.c */
void copy_view3d_lock(short val); // was a hack, to make scene layer ipo's possible
@@ -145,7 +141,7 @@ short pupmenu(char *instr); // will be general callback
/* scene.c */
#include "DNA_sequence_types.h"
void free_editing(struct Editing *ed); // scenes and sequences problem...
-void BPY_do_all_scripts (short int event);
+void BPY_do_all_scripts (short int event, short int anim);
int BPY_call_importloader(char *name);
diff --git a/source/blender/blenkernel/BKE_blender.h b/source/blender/blenkernel/BKE_blender.h
index e1eb6718a30..0105587c5b4 100644
--- a/source/blender/blenkernel/BKE_blender.h
+++ b/source/blender/blenkernel/BKE_blender.h
@@ -41,7 +41,7 @@ struct ListBase;
struct MemFile;
#define BLENDER_VERSION 247
-#define BLENDER_SUBVERSION 0
+#define BLENDER_SUBVERSION 9
#define BLENDER_MINVERSION 245
#define BLENDER_MINSUBVERSION 15
diff --git a/source/blender/src/cre/license.jpeg.c b/source/blender/blenkernel/BKE_bullet.h
index 6d8f0e3da9d..1c3bb175d66 100644
--- a/source/blender/src/cre/license.jpeg.c
+++ b/source/blender/blenkernel/BKE_bullet.h
@@ -1,4 +1,5 @@
/**
+ *
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -17,7 +18,7 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*
- * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
+ * The Original Code is Copyright (C) Blender Foundation.
* All rights reserved.
*
* The Original Code is: all of this file.
@@ -26,10 +27,17 @@
*
* ***** END GPL LICENSE BLOCK *****
*/
+#ifndef BKE_BULLET_H
+#define BKE_BULLET_H
+
+struct BulletSoftBody;
+
+
+/* allocates and initializes general main data */
+extern struct BulletSoftBody *bsbNew(void);
+
+/* frees internal data and softbody itself */
+extern void bsbFree(struct BulletSoftBody *sb);
-#ifdef HAVE_CONFIG_H
-#include <config.h>
#endif
-int datatoc_tonize= 0;
-char datatoc_ton[]= {0};
diff --git a/source/blender/blenkernel/BKE_bvhutils.h b/source/blender/blenkernel/BKE_bvhutils.h
new file mode 100644
index 00000000000..dd9ea61f24b
--- /dev/null
+++ b/source/blender/blenkernel/BKE_bvhutils.h
@@ -0,0 +1,98 @@
+/**
+ *
+ * $Id$
+ *
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * The Original Code is Copyright (C) 2006 by NaN Holding BV.
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): André Pinto
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+#ifndef BKE_BVHUTILS_H
+#define BKE_BVHUTILS_H
+
+#include "BLI_kdopbvh.h"
+
+/*
+ * This header encapsulates necessary code to buld a BVH
+ */
+
+struct DerivedMesh;
+struct MVert;
+struct MFace;
+
+/*
+ * struct that kepts basic information about a BVHTree build from a mesh
+ */
+typedef struct BVHTreeFromMesh
+{
+ struct BVHTree *tree;
+
+ /* default callbacks to bvh nearest and raycast */
+ BVHTree_NearestPointCallback nearest_callback;
+ BVHTree_RayCastCallback raycast_callback;
+
+ /* Mesh represented on this BVHTree */
+ struct DerivedMesh *mesh;
+
+ /* Vertex array, so that callbacks have instante access to data */
+ struct MVert *vert;
+ struct MFace *face;
+
+ /* radius for raycast */
+ float sphere_radius;
+
+} BVHTreeFromMesh;
+
+/*
+ * Builds a bvh tree where nodes are the vertexs of the given mesh.
+ * Configures BVHTreeFromMesh.
+ *
+ * The tree is build in mesh space coordinates, this means special care must be made on queries
+ * so that the coordinates and rays are first translated on the mesh local coordinates.
+ * Reason for this is that later bvh_from_mesh_* might use a cache system and so it becames possible to reuse
+ * a BVHTree.
+ *
+ * free_bvhtree_from_mesh should be called when the tree is no longer needed.
+ */
+void bvhtree_from_mesh_verts(struct BVHTreeFromMesh *data, struct DerivedMesh *mesh, float epsilon, int tree_type, int axis);
+
+/*
+ * Builds a bvh tree where nodes are the faces of the given mesh.
+ * Configures BVHTreeFromMesh.
+ *
+ * The tree is build in mesh space coordinates, this means special care must be made on queries
+ * so that the coordinates and rays are first translated on the mesh local coordinates.
+ * Reason for this is that later bvh_from_mesh_* might use a cache system and so it becames possible to reuse
+ * a BVHTree.
+ *
+ * free_bvhtree_from_mesh should be called when the tree is no longer needed.
+ */
+void bvhtree_from_mesh_faces(struct BVHTreeFromMesh *data, struct DerivedMesh *mesh, float epsilon, int tree_type, int axis);
+
+/*
+ * Frees data allocated by a call to bvhtree_from_mesh_*.
+ */
+void free_bvhtree_from_mesh(struct BVHTreeFromMesh *data);
+
+#endif
+
diff --git a/source/blender/blenkernel/BKE_collision.h b/source/blender/blenkernel/BKE_collision.h
index 2966d932a49..c483148e4de 100644
--- a/source/blender/blenkernel/BKE_collision.h
+++ b/source/blender/blenkernel/BKE_collision.h
@@ -119,8 +119,10 @@ FaceCollPair;
/////////////////////////////////////////////////
// used in modifier.c from collision.c
/////////////////////////////////////////////////
+
BVHTree *bvhtree_build_from_mvert ( MFace *mfaces, unsigned int numfaces, MVert *x, unsigned int numverts, float epsilon );
void bvhtree_update_from_mvert ( BVHTree * bvhtree, MFace *faces, int numfaces, MVert *x, MVert *xnew, int numverts, int moving );
+
/////////////////////////////////////////////////
LinkNode *BLI_linklist_append_fast ( LinkNode **listp, void *ptr );
@@ -134,6 +136,15 @@ void collisions_compute_barycentric ( float pv[3], float p1[3], float p2[3], flo
void interpolateOnTriangle ( float to[3], float v1[3], float v2[3], float v3[3], double w1, double w2, double w3 );
/////////////////////////////////////////////////
+// used in effect.c
+/////////////////////////////////////////////////
+CollisionModifierData **get_collisionobjects(Object *self, int *numcollobj);
+
+/////////////////////////////////////////////////
+
+
+
+/////////////////////////////////////////////////
#endif
diff --git a/source/blender/blenkernel/BKE_colortools.h b/source/blender/blenkernel/BKE_colortools.h
index e78882220a9..555b467b1d6 100644
--- a/source/blender/blenkernel/BKE_colortools.h
+++ b/source/blender/blenkernel/BKE_colortools.h
@@ -57,6 +57,7 @@ void curvemapping_do_ibuf(struct CurveMapping *cumap, struct ImBuf *ibuf);
void curvemapping_premultiply(struct CurveMapping *cumap, int restore);
int curvemapping_RGBA_does_something(struct CurveMapping *cumap);
void curvemapping_initialize(struct CurveMapping *cumap);
+void curvemapping_table_RGBA(struct CurveMapping *cumap, float **array, int *size);
#endif
diff --git a/source/blender/blenkernel/BKE_curve.h b/source/blender/blenkernel/BKE_curve.h
index 45d8193b16f..25d6d78c4aa 100644
--- a/source/blender/blenkernel/BKE_curve.h
+++ b/source/blender/blenkernel/BKE_curve.h
@@ -39,9 +39,12 @@ struct ListBase;
struct BezTriple;
struct BevList;
-#define KNOTSU(nu) ( (nu)->orderu+ (nu)->pntsu+ (nu->orderu-1)*((nu)->flagu & CU_CYCLIC) )
-#define KNOTSV(nu) ( (nu)->orderv+ (nu)->pntsv+ (nu->orderv-1)*((nu)->flagv & CU_CYCLIC) )
+#define KNOTSU(nu) ( (nu)->orderu+ (nu)->pntsu+ (((nu)->flagu & CU_CYCLIC) ? (nu->orderu-1) : 0) )
+#define KNOTSV(nu) ( (nu)->orderv+ (nu)->pntsv+ (((nu)->flagv & CU_CYCLIC) ? (nu->orderv-1) : 0) )
+/* Non cyclic nurbs have 1 less segment */
+#define SEGMENTSU(nu) ( ((nu)->flagu & CU_CYCLIC) ? (nu)->pntsu : (nu)->pntsu-1 )
+#define SEGMENTSV(nu) ( ((nu)->flagv & CU_CYCLIC) ? (nu)->pntsv : (nu)->pntsv-1 )
void unlink_curve( struct Curve *cu);
void free_curve( struct Curve *cu);
@@ -62,15 +65,14 @@ void minmaxNurb( struct Nurb *nu, float *min, float *max);
void makeknots( struct Nurb *nu, short uv, short type);
-void makeNurbfaces( struct Nurb *nu, float *data, int rowstride);
-void makeNurbcurve( struct Nurb *nu, float *data, int resolu, int dim);
+void makeNurbfaces(struct Nurb *nu, float *coord_array, int rowstride);
+void makeNurbcurve(struct Nurb *nu, float *coord_array, float *tilt_array, float *radius_array, int resolu);
void forward_diff_bezier(float q0, float q1, float q2, float q3, float *p, int it, int stride);
float *make_orco_curve( struct Object *ob);
float *make_orco_surf( struct Object *ob);
void makebevelcurve( struct Object *ob, struct ListBase *disp);
void makeBevelList( struct Object *ob);
-float calc_curve_subdiv_radius( struct Curve *cu, struct Nurb *nu, int cursubdiv);
void calchandleNurb( struct BezTriple *bezt, struct BezTriple *prev, struct BezTriple *next, int mode);
void calchandlesNurb( struct Nurb *nu);
diff --git a/source/blender/blenkernel/BKE_customdata.h b/source/blender/blenkernel/BKE_customdata.h
index e84c7d30956..c84b690bc49 100644
--- a/source/blender/blenkernel/BKE_customdata.h
+++ b/source/blender/blenkernel/BKE_customdata.h
@@ -32,9 +32,11 @@
#ifndef BKE_CUSTOMDATA_H
#define BKE_CUSTOMDATA_H
+#include "BLO_sys_types.h" // for intptr_t support
+
struct CustomData;
struct CustomDataLayer;
-typedef long CustomDataMask;
+typedef intptr_t CustomDataMask;
extern const CustomDataMask CD_MASK_BAREMESH;
extern const CustomDataMask CD_MASK_MESH;
diff --git a/source/blender/blenkernel/BKE_deform.h b/source/blender/blenkernel/BKE_deform.h
index a1975dd4265..e982806a6cc 100644
--- a/source/blender/blenkernel/BKE_deform.h
+++ b/source/blender/blenkernel/BKE_deform.h
@@ -38,6 +38,7 @@
struct Object;
struct ListBase;
struct bDeformGroup;
+struct MDeformVert;
void copy_defgroups (struct ListBase *lb1, struct ListBase *lb2);
struct bDeformGroup *copy_defgroup (struct bDeformGroup *ingroup);
@@ -46,5 +47,8 @@ int get_defgroup_num (struct Object *ob, struct bDeformGroup *dg);
int get_named_vertexgroup_num (Object *ob, char *name);
void unique_vertexgroup_name (struct bDeformGroup *dg, struct Object *ob);
+float deformvert_get_weight(const struct MDeformVert *dvert, int group_num);
+float vertexgroup_get_vertex_weight(const struct MDeformVert *dvert, int index, int group_num);
+
#endif
diff --git a/source/blender/blenkernel/BKE_effect.h b/source/blender/blenkernel/BKE_effect.h
index 3763a659f2f..6475f7a71ac 100644
--- a/source/blender/blenkernel/BKE_effect.h
+++ b/source/blender/blenkernel/BKE_effect.h
@@ -37,6 +37,7 @@ struct Effect;
struct ListBase;
struct Particle;
struct Group;
+struct RNG;
typedef struct pEffectorCache {
struct pEffectorCache *next, *prev;
@@ -64,6 +65,11 @@ struct ListBase *pdInitEffectors(struct Object *obsrc, struct Group *group);
void pdEndEffectors(struct ListBase *lb);
void pdDoEffectors(struct ListBase *lb, float *opco, float *force, float *speed, float cur_time, float loc_time, unsigned int flags);
+/* required for particle_system.c */
+void do_physical_effector(Object *ob, float *opco, short type, float force_val, float distance, float falloff, float size, float damp, float *eff_velocity, float *vec_to_part, float *velocity, float *field, int planar, struct RNG *rng, float noise_factor, float charge, float pa_size);
+float effector_falloff(struct PartDeflect *pd, float *eff_velocity, float *vec_to_part);
+
+
#endif
diff --git a/source/blender/blenkernel/BKE_endian.h b/source/blender/blenkernel/BKE_endian.h
index 1757103eaf6..dc5efd5ea46 100644
--- a/source/blender/blenkernel/BKE_endian.h
+++ b/source/blender/blenkernel/BKE_endian.h
@@ -33,11 +33,11 @@
#define BKE_ENDIANNESS(a) { \
union { \
- long l; \
- char c[sizeof (long)]; \
+ intptr_t l; \
+ char c[sizeof (intptr_t)]; \
} u; \
u.l = 1; \
- a = (u.c[sizeof (long) - 1] == 1) ? 1 : 0; \
+ a = (u.c[sizeof (intptr_t) - 1] == 1) ? 1 : 0; \
}
#endif
diff --git a/source/blender/blenkernel/BKE_fluidsim.h b/source/blender/blenkernel/BKE_fluidsim.h
new file mode 100644
index 00000000000..33c706da82b
--- /dev/null
+++ b/source/blender/blenkernel/BKE_fluidsim.h
@@ -0,0 +1,55 @@
+/**
+ * BKE_fluidsim.h
+ *
+ *
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * The Original Code is Copyright (C) Blender Foundation
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): none yet.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+#include "DNA_modifier_types.h"
+#include "DNA_object_fluidsim.h" // N_T
+#include "DNA_object_types.h"
+
+#include "BKE_DerivedMesh.h"
+
+/* old interface */
+FluidsimSettings *fluidsimSettingsNew(Object *srcob);
+
+void initElbeemMesh(Object *ob, int *numVertices, float **vertices, int *numTriangles, int **triangles, int useGlobalCoords, int modifierIndex);
+
+
+/* new fluid-modifier interface */
+void fluidsim_init(FluidsimModifierData *fluidmd);
+void fluidsim_free(FluidsimModifierData *fluidmd);
+
+DerivedMesh *fluidsim_read_cache(Object *ob, DerivedMesh *orgdm, FluidsimModifierData *fluidmd, int framenr, int useRenderParams);
+DerivedMesh *fluidsimModifier_do(FluidsimModifierData *fluidmd, Object *ob, DerivedMesh *dm, int useRenderParams, int isFinalCalc);
+
+// get bounding box of mesh
+void fluid_get_bb(MVert *mvert, int totvert, float obmat[][4],
+ /*RET*/ float start[3], /*RET*/ float size[3] );
+
+
+
diff --git a/source/blender/blenkernel/BKE_global.h b/source/blender/blenkernel/BKE_global.h
index 8c9634cba06..1cc336db69e 100644
--- a/source/blender/blenkernel/BKE_global.h
+++ b/source/blender/blenkernel/BKE_global.h
@@ -218,8 +218,15 @@ typedef struct Global {
#define G_FILE_NO_UI (1 << 10)
#define G_FILE_GAME_TO_IPO (1 << 11)
#define G_FILE_GAME_MAT (1 << 12)
-#define G_FILE_DIAPLAY_LISTS (1 << 13)
+#define G_FILE_DISPLAY_LISTS (1 << 13)
#define G_FILE_SHOW_PHYSICS (1 << 14)
+#define G_FILE_GAME_MAT_GLSL (1 << 15)
+#define G_FILE_GLSL_NO_LIGHTS (1 << 16)
+#define G_FILE_GLSL_NO_SHADERS (1 << 17)
+#define G_FILE_GLSL_NO_SHADOWS (1 << 18)
+#define G_FILE_GLSL_NO_RAMPS (1 << 19)
+#define G_FILE_GLSL_NO_NODES (1 << 20)
+#define G_FILE_GLSL_NO_EXTRA_TEX (1 << 21)
/* G.windowstate */
#define G_WINDOWSTATE_USERDEF 0
diff --git a/source/blender/blenkernel/BKE_ipo.h b/source/blender/blenkernel/BKE_ipo.h
index 5b209cb8f5b..fdd176e0e64 100644
--- a/source/blender/blenkernel/BKE_ipo.h
+++ b/source/blender/blenkernel/BKE_ipo.h
@@ -54,41 +54,71 @@ struct bPoseChannel;
struct bActionChannel;
struct rctf;
+/* ------------ Time Management ------------ */
+
float frame_to_float(int cfra);
+/* ------------ IPO Management ---------- */
+
void free_ipo_curve(struct IpoCurve *icu);
void free_ipo(struct Ipo *ipo);
+
void ipo_default_v2d_cur(int blocktype, struct rctf *cur);
+
struct Ipo *add_ipo(char *name, int idcode);
struct Ipo *copy_ipo(struct Ipo *ipo);
+
void ipo_idnew(struct Ipo *ipo);
+
+struct IpoCurve *find_ipocurve(struct Ipo *ipo, int adrcode);
+short has_ipo_code(struct Ipo *ipo, int code);
+
+/* -------------- Make Local -------------- */
+
void make_local_obipo(struct Ipo *ipo);
void make_local_matipo(struct Ipo *ipo);
void make_local_keyipo(struct Ipo *ipo);
void make_local_ipo(struct Ipo *ipo);
-struct IpoCurve *find_ipocurve(struct Ipo *ipo, int adrcode);
+
+/* ------------ IPO-Curve Sanity ---------------- */
void calchandles_ipocurve(struct IpoCurve *icu);
void testhandles_ipocurve(struct IpoCurve *icu);
void sort_time_ipocurve(struct IpoCurve *icu);
int test_time_ipocurve(struct IpoCurve *icu);
+
+/* -------- IPO-Curve (Bezier) Calculations ---------- */
+
void correct_bezpart(float *v1, float *v2, float *v3, float *v4);
int findzero(float x, float q0, float q1, float q2, float q3, float *o);
void berekeny(float f1, float f2, float f3, float f4, float *o, int b);
void berekenx(float *f, float *o, int b);
+
+/* -------- IPO Curve Calculation and Evaluation --------- */
+
float eval_icu(struct IpoCurve *icu, float ipotime);
void calc_icu(struct IpoCurve *icu, float ctime);
float calc_ipo_time(struct Ipo *ipo, float ctime);
void calc_ipo(struct Ipo *ipo, float ctime);
+
+/* ------------ Keyframe Column Tools -------------- */
+
+void add_to_cfra_elem(struct ListBase *lb, struct BezTriple *bezt);
+void make_cfra_list(struct Ipo *ipo, struct ListBase *elems);
+
+/* ---------------- IPO DataAPI ----------------- */
+
void write_ipo_poin(void *poin, int type, float val);
float read_ipo_poin(void *poin, int type);
-void *give_mtex_poin(struct MTex *mtex, int adrcode );
-void *get_ipo_poin(struct ID *id, struct IpoCurve *icu, int *type);
+void *give_mtex_poin(struct MTex *mtex, int adrcode );
void *get_pchan_ipo_poin(struct bPoseChannel *pchan, int adrcode);
+void *get_ipo_poin(struct ID *id, struct IpoCurve *icu, int *type);
void set_icu_vars(struct IpoCurve *icu);
+/* ---------------- IPO Execution --------------- */
+
void execute_ipo(struct ID *id, struct Ipo *ipo);
void execute_action_ipo(struct bActionChannel *achan, struct bPoseChannel *pchan);
@@ -99,21 +129,16 @@ void do_ob_ipo(struct Object *ob);
void do_seq_ipo(struct Sequence *seq, int cfra);
void do_ob_ipodrivers(struct Object *ob, struct Ipo *ipo, float ctime);
-int has_ipo_code(struct Ipo *ipo, int code);
void do_all_data_ipos(void);
-int calc_ipo_spec(struct Ipo *ipo, int adrcode, float *ctime);
+short calc_ipo_spec(struct Ipo *ipo, int adrcode, float *ctime);
void clear_delta_obipo(struct Ipo *ipo);
-void add_to_cfra_elem(struct ListBase *lb, struct BezTriple *bezt);
-void make_cfra_list(struct Ipo *ipo, struct ListBase *elems);
-/* the sort is an IPO_Channel... */
-int IPO_GetChannels(struct Ipo *ipo, short *channels);
+/* ----------- IPO <-> GameEngine API ---------------- */
+
+/* the short is an IPO_Channel... */
-float IPO_GetFloatValue(struct Ipo *ipo,
-/* struct IPO_Channel channel, */
- /* channels are shorts... bit ugly for now*/
- short c,
- float ctime);
+short IPO_GetChannels(struct Ipo *ipo, short *channels);
+float IPO_GetFloatValue(struct Ipo *ipo, short c, float ctime);
#ifdef __cplusplus
};
diff --git a/source/blender/blenkernel/BKE_mesh.h b/source/blender/blenkernel/BKE_mesh.h
index d4ae76e8984..2ca4b3aa39a 100644
--- a/source/blender/blenkernel/BKE_mesh.h
+++ b/source/blender/blenkernel/BKE_mesh.h
@@ -68,7 +68,6 @@ void mball_to_mesh(struct ListBase *lb, struct Mesh *me);
void nurbs_to_mesh(struct Object *ob);
void free_dverts(struct MDeformVert *dvert, int totvert);
void copy_dverts(struct MDeformVert *dst, struct MDeformVert *src, int totvert); /* __NLA */
-int update_realtime_texture(struct MTFace *tface, double time);
void mesh_delete_material_index(struct Mesh *me, int index);
void mesh_set_smooth_flag(struct Object *meshOb, int enableSmooth);
diff --git a/source/blender/blenkernel/BKE_node.h b/source/blender/blenkernel/BKE_node.h
index b3b68a9b3ff..01c54663c6d 100644
--- a/source/blender/blenkernel/BKE_node.h
+++ b/source/blender/blenkernel/BKE_node.h
@@ -47,6 +47,9 @@ struct rctf;
struct ListBase;
struct RenderData;
struct Scene;
+struct GPUMaterial;
+struct GPUNode;
+struct GPUNodeStack;
#define SOCK_IN 1
#define SOCK_OUT 2
@@ -91,6 +94,9 @@ typedef struct bNodeType {
void *pynode; /* holds pointer to python script */
void *pydict; /* holds pointer to python script dictionary (scope)*/
+ /* gpu */
+ int (*gpufunc)(struct GPUMaterial *mat, struct bNode *node, struct GPUNodeStack *in, struct GPUNodeStack *out);
+
} bNodeType;
/* node->exec, now in use for composites (#define for break is same as ready yes) */
@@ -252,6 +258,8 @@ void nodeShaderSynchronizeID(struct bNode *node, int copyto);
extern void (*node_shader_lamp_loop)(struct ShadeInput *, struct ShadeResult *);
void set_node_shader_lamp_loop(void (*lamp_loop_func)(struct ShadeInput *, struct ShadeResult *));
+void ntreeGPUMaterialNodes(struct bNodeTree *ntree, struct GPUMaterial *mat);
+
/* ************** COMPOSITE NODES *************** */
diff --git a/source/blender/blenkernel/BKE_object.h b/source/blender/blenkernel/BKE_object.h
index 116a59fa97e..a4a06b704bc 100644
--- a/source/blender/blenkernel/BKE_object.h
+++ b/source/blender/blenkernel/BKE_object.h
@@ -41,6 +41,7 @@ struct Camera;
struct BoundBox;
struct View3D;
struct SoftBody;
+struct BulletSoftBody;
struct Group;
struct bAction;
@@ -48,10 +49,12 @@ void clear_workob(void);
void copy_baseflags(void);
void copy_objectflags(void);
struct SoftBody *copy_softbody(struct SoftBody *sb);
+struct BulletSoftBody *copy_bulletsoftbody(struct BulletSoftBody *sb);
void copy_object_particlesystems(struct Object *obn, struct Object *ob);
void copy_object_softbody(struct Object *obn, struct Object *ob);
void object_free_particlesystems(struct Object *ob);
void object_free_softbody(struct Object *ob);
+void object_free_bulletsoftbody(struct Object *ob);
void update_base_layer(struct Object *ob);
void free_object(struct Object *ob);
@@ -85,6 +88,8 @@ void set_field_offs(float field);
void disable_speed_curve(int val);
float bsystem_time(struct Object *ob, float cfra, float ofs);
+void object_scale_to_mat3(struct Object *ob, float mat[][3]);
+void object_rot_to_mat3(struct Object *ob, float mat[][3]);
void object_to_mat3(struct Object *ob, float mat[][3]);
void object_to_mat4(struct Object *ob, float mat[][4]);
diff --git a/source/blender/blenkernel/BKE_particle.h b/source/blender/blenkernel/BKE_particle.h
index 944a9081679..caba63ef8ce 100644
--- a/source/blender/blenkernel/BKE_particle.h
+++ b/source/blender/blenkernel/BKE_particle.h
@@ -73,6 +73,7 @@ typedef struct ParticleEffectorCache {
short type, psys_nbr;
struct Object obcopy; /* for restoring transformation data */
+ struct RNG *rng; /* random noise generator for e.g. wind */
} ParticleEffectorCache;
typedef struct ParticleReactEvent {
@@ -225,7 +226,7 @@ void psys_interpolate_mcol(struct MCol *mcol, int quad, float *uv, struct MCol *
void copy_particle_key(struct ParticleKey *to, struct ParticleKey *from, int time);
-void psys_particle_on_emitter(struct Object *ob, struct ParticleSystemModifierData *psmd, int distr, int index, int index_dmcache, float *fuv, float foffset, float *vec, float *nor, float *utan, float *vtan, float *orco, float *ornor);
+void psys_particle_on_emitter(struct ParticleSystemModifierData *psmd, int distr, int index, int index_dmcache, float *fuv, float foffset, float *vec, float *nor, float *utan, float *vtan, float *orco, float *ornor);
struct ParticleSystemModifierData *psys_get_modifier(struct Object *ob, struct ParticleSystem *psys);
struct ParticleSettings *psys_new_settings(char *name, struct Main *main);
@@ -283,11 +284,12 @@ void psys_mat_hair_to_orco(struct Object *ob, struct DerivedMesh *dm, short from
float *psys_cache_vgroup(struct DerivedMesh *dm, struct ParticleSystem *psys, int vgroup);
void psys_get_texture(struct Object *ob, struct Material *ma, struct ParticleSystemModifierData *psmd, struct ParticleSystem *psys, struct ParticleData *pa, struct ParticleTexture *ptex, int event);
void psys_interpolate_face(struct MVert *mvert, struct MFace *mface, struct MTFace *tface, float (*orcodata)[3], float *uv, float *vec, float *nor, float *utan, float *vtan, float *orco, float *ornor);
+float psys_particle_value_from_verts(struct DerivedMesh *dm, short from, struct ParticleData *pa, float *values);
float psys_interpolate_value_from_verts(struct DerivedMesh *dm, short from, int index, float *fw, float *values);
void psys_get_from_key(struct ParticleKey *key, float *loc, float *vel, float *rot, float *time);
int psys_intersect_dm(struct Object *ob, struct DerivedMesh *dm, float *vert_cos, float *co1, float* co2, float *min_d, int *min_face, float *min_uv, float *face_minmax, float *pa_minmax, float radius, float *ipoint);
-void psys_particle_on_dm(struct Object *ob, struct DerivedMesh *dm, int from, int index, int index_dmcache, float *fw, float foffset, float *vec, float *nor, float *utan, float *vtan, float *orco, float *ornor);
+void psys_particle_on_dm(struct DerivedMesh *dm, int from, int index, int index_dmcache, float *fw, float foffset, float *vec, float *nor, float *utan, float *vtan, float *orco, float *ornor);
/* particle_system.c */
void initialize_particle(struct ParticleData *pa, int p, struct Object *ob, struct ParticleSystem *psys, struct ParticleSystemModifierData *psmd);
@@ -302,6 +304,7 @@ int psys_particle_dm_face_lookup(struct Object *ob, struct DerivedMesh *dm, int
#define PSYS_RESET_ALL 1
#define PSYS_RESET_DEPSGRAPH 2
#define PSYS_RESET_CHILDREN 3
+#define PSYS_RESET_CACHE_MISS 4
/* ParticleEffectorCache->type */
#define PSYS_EC_EFFECTOR 1
diff --git a/source/blender/blenkernel/BKE_property.h b/source/blender/blenkernel/BKE_property.h
index f1587790c4a..6af1deda727 100644
--- a/source/blender/blenkernel/BKE_property.h
+++ b/source/blender/blenkernel/BKE_property.h
@@ -41,7 +41,8 @@ struct bProperty *copy_property(struct bProperty *prop);
void copy_properties(struct ListBase *lbn, struct ListBase *lbo);
void init_property(struct bProperty *prop);
struct bProperty *new_property(int type);
-struct bProperty *get_property(struct Object *ob, char *name);
+struct bProperty *get_ob_property(struct Object *ob, char *name);
+void set_ob_property(struct Object *ob, struct bProperty *propc);
int compare_property(struct bProperty *prop, char *str);
void set_property(struct bProperty *prop, char *str);
void add_property(struct bProperty *prop, char *str);
diff --git a/source/blender/blenkernel/BKE_shrinkwrap.h b/source/blender/blenkernel/BKE_shrinkwrap.h
new file mode 100644
index 00000000000..e8276238ff2
--- /dev/null
+++ b/source/blender/blenkernel/BKE_shrinkwrap.h
@@ -0,0 +1,146 @@
+/**
+ * BKE_shrinkwrap.h
+ *
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * The Original Code is Copyright (C) Blender Foundation.
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): none yet.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+#ifndef BKE_SHRINKWRAP_H
+#define BKE_SHRINKWRAP_H
+
+/* mesh util */
+//TODO: move this somewhere else
+#include "BKE_customdata.h"
+struct DerivedMesh;
+struct Object;
+struct DerivedMesh *object_get_derived_final(struct Object *ob, CustomDataMask dataMask);
+
+
+/* SpaceTransform stuff */
+/*
+ * TODO: move this somewhere else
+ *
+ * this structs encapsulates all needed data to convert between 2 coordinate spaces
+ * (where conversion can be represented by a matrix multiplication)
+ *
+ * This is used to reduce the number of arguments to pass to functions that need to perform
+ * this kind of operation and make it easier for the coder, as he/she doenst needs to recode
+ * the matrix calculation.
+ *
+ * A SpaceTransform is initialized using:
+ * space_transform_setup( &data, ob1, ob2 )
+ *
+ * After that the following calls can be used:
+ * space_transform_apply (&data, co); //converts a coordinate in ob1 coords space to the corresponding ob2 coords
+ * space_transform_invert(&data, co); //converts a coordinate in ob2 coords space to the corresponding ob1 coords
+ *
+ * //Same Concept as space_transform_apply and space_transform_invert, but no is normalized after conversion
+ * space_transform_apply_normal (&data, &no);
+ * space_transform_invert_normal(&data, &no);
+ *
+ */
+struct Object;
+
+typedef struct SpaceTransform
+{
+ float local2target[4][4];
+ float target2local[4][4];
+
+} SpaceTransform;
+
+void space_transform_from_matrixs(SpaceTransform *data, float local[][4], float target[][4]);
+#define space_transform_setup(data, local, target) space_transform_from_matrixs(data, (local)->obmat, (target)->obmat)
+
+void space_transform_apply (const SpaceTransform *data, float *co);
+void space_transform_invert(const SpaceTransform *data, float *co);
+
+void space_transform_apply_normal (const SpaceTransform *data, float *no);
+void space_transform_invert_normal(const SpaceTransform *data, float *no);
+
+/* Shrinkwrap stuff */
+#include "BKE_bvhutils.h"
+
+/*
+ * Shrinkwrap is composed by a set of functions and options that define the type of shrink.
+ *
+ * 3 modes are available:
+ * - Nearest vertex
+ * - Nearest surface
+ * - Normal projection
+ *
+ * ShrinkwrapCalcData encapsulates all needed data for shrinkwrap functions.
+ * (So that you dont have to pass an enormous ammount of arguments to functions)
+ */
+
+struct Object;
+struct DerivedMesh;
+struct ShrinkwrapModifierData;
+struct BVHTree;
+
+
+typedef struct ShrinkwrapCalcData
+{
+ ShrinkwrapModifierData *smd; //shrinkwrap modifier data
+
+ struct Object *ob; //object we are applying shrinkwrap to
+ struct DerivedMesh *original; //mesh before shrinkwrap
+
+ float (*vertexCos)[3]; //vertexs being shrinkwraped
+ int numVerts;
+
+ struct DerivedMesh *target; //mesh we are shrinking to
+ SpaceTransform local2target; //transform to move bettwem local and target space
+
+ float keepDist; //Distance to kept from target (units are in local space)
+
+} ShrinkwrapCalcData;
+
+void shrinkwrap_calc_nearest_vertex(ShrinkwrapCalcData *data);
+void shrinkwrap_calc_normal_projection(ShrinkwrapCalcData *data);
+void shrinkwrap_calc_nearest_surface_point(ShrinkwrapCalcData *data);
+
+void shrinkwrapModifier_deform(struct ShrinkwrapModifierData *smd, struct Object *ob, struct DerivedMesh *dm, float (*vertexCos)[3], int numVerts);
+
+/*
+ * This function casts a ray in the given BVHTree.. but it takes into consideration the space_transform, that is:
+ *
+ * if transf was configured with "space_transform_setup( &transf, ob1, ob2 )"
+ * then the input (vert, dir, BVHTreeRayHit) must be defined in ob1 coordinates space
+ * and the BVHTree must be built in ob2 coordinate space.
+ *
+ * Thus it provides an easy way to cast the same ray across several trees (where each tree was built on its own coords space)
+ */
+int normal_projection_project_vertex(char options, const float *vert, const float *dir, const SpaceTransform *transf, BVHTree *tree, BVHTreeRayHit *hit, BVHTree_RayCastCallback callback, void *userdata);
+
+/*
+ * NULL initializers to local data
+ */
+#define NULL_ShrinkwrapCalcData {NULL, }
+#define NULL_BVHTreeFromMesh {NULL, }
+#define NULL_BVHTreeRayHit {NULL, }
+#define NULL_BVHTreeNearest {0, }
+
+
+#endif
+
diff --git a/source/blender/blenkernel/BKE_simple_deform.h b/source/blender/blenkernel/BKE_simple_deform.h
new file mode 100644
index 00000000000..161871a64bc
--- /dev/null
+++ b/source/blender/blenkernel/BKE_simple_deform.h
@@ -0,0 +1,39 @@
+/**
+ * BKE_shrinkwrap.h
+ *
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * The Original Code is Copyright (C) Blender Foundation.
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): none yet.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+#ifndef BKE_SIMPLE_DEFORM_H
+#define BKE_SIMPLE_DEFORM_H
+
+struct Object;
+struct DerivedMesh;
+struct SimpleDeformModifierData;
+
+void SimpleDeformModifier_do(SimpleDeformModifierData *smd, struct Object *ob, struct DerivedMesh *dm, float (*vertexCos)[3], int numVerts);
+
+#endif
+
diff --git a/source/blender/blenkernel/BKE_suggestions.h b/source/blender/blenkernel/BKE_suggestions.h
new file mode 100644
index 00000000000..d58b8f58bf5
--- /dev/null
+++ b/source/blender/blenkernel/BKE_suggestions.h
@@ -0,0 +1,93 @@
+/**
+ * $Id: $
+ *
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * The Original Code is Copyright (C) 2008, Blender Foundation
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): none yet.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+#ifndef BKE_SUGGESTIONS_H
+#define BKE_SUGGESTIONS_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* ****************************************************************************
+Suggestions should be added in sorted order although a linear sorting method is
+implemented. The list is then divided up based on the prefix provided by
+update_suggestions:
+
+Example:
+ Prefix: ab
+ aaa <-- first
+ aab
+ aba <-- firstmatch
+ abb <-- lastmatch
+ baa
+ bab <-- last
+**************************************************************************** */
+
+struct Text;
+
+typedef struct SuggItem {
+ struct SuggItem *prev, *next;
+ char *name;
+ char type;
+} SuggItem;
+
+typedef struct SuggList {
+ SuggItem *first, *last;
+ SuggItem *firstmatch, *lastmatch;
+ SuggItem *selected;
+ int top;
+} SuggList;
+
+/* Free all text tool memory */
+void free_texttools();
+
+/* Used to identify which Text object the current tools should appear against */
+void texttool_text_set_active(Text *text);
+void texttool_text_clear();
+short texttool_text_is_active(Text *text);
+
+/* Suggestions */
+void texttool_suggest_add(const char *name, char type);
+void texttool_suggest_prefix(const char *prefix);
+void texttool_suggest_clear();
+SuggItem *texttool_suggest_first();
+SuggItem *texttool_suggest_last();
+void texttool_suggest_select(SuggItem *sel);
+SuggItem *texttool_suggest_selected();
+int *texttool_suggest_top();
+
+/* Documentation */
+void texttool_docs_show(const char *docs);
+char *texttool_docs_get();
+void texttool_docs_clear();
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/source/blender/blenkernel/BKE_text.h b/source/blender/blenkernel/BKE_text.h
index 6f891ab4887..002c804f17f 100644
--- a/source/blender/blenkernel/BKE_text.h
+++ b/source/blender/blenkernel/BKE_text.h
@@ -52,20 +52,24 @@ void txt_free_cut_buffer (void);
char* txt_to_buf (struct Text *text);
void txt_clean_text (struct Text *text);
void txt_order_cursors (struct Text *text);
-int txt_find_string (struct Text *text, char *findstr);
+int txt_find_string (struct Text *text, char *findstr, int wrap);
int txt_has_sel (struct Text *text);
int txt_get_span (struct TextLine *from, struct TextLine *to);
void txt_move_up (struct Text *text, short sel);
void txt_move_down (struct Text *text, short sel);
void txt_move_left (struct Text *text, short sel);
void txt_move_right (struct Text *text, short sel);
+void txt_jump_left (struct Text *text, short sel);
+void txt_jump_right (struct Text *text, short sel);
void txt_move_bof (struct Text *text, short sel);
void txt_move_eof (struct Text *text, short sel);
void txt_move_bol (struct Text *text, short sel);
void txt_move_eol (struct Text *text, short sel);
void txt_move_toline (struct Text *text, unsigned int line, short sel);
+void txt_move_to (struct Text *text, unsigned int line, unsigned int ch, short sel);
void txt_pop_sel (struct Text *text);
void txt_delete_char (struct Text *text);
+void txt_delete_word (struct Text *text);
void txt_copy_sel (struct Text *text);
void txt_sel_all (struct Text *text);
void txt_sel_line (struct Text *text);
@@ -80,8 +84,10 @@ void txt_do_undo (struct Text *text);
void txt_do_redo (struct Text *text);
void txt_split_curline (struct Text *text);
void txt_backspace_char (struct Text *text);
+void txt_backspace_word (struct Text *text);
int txt_add_char (struct Text *text, char add);
-void txt_find_panel (struct SpaceText *st, int again);
+int txt_replace_char (struct Text *text, char add);
+void find_and_replace (struct SpaceText *st, short mode);
void run_python_script (struct SpaceText *st);
int jumptoline_interactive (struct SpaceText *st);
void txt_export_to_object (struct Text *text);
@@ -94,6 +100,17 @@ int setcurr_tab (struct Text *text);
void convert_tabs (struct SpaceText *st, int tab);
void txt_copy_clipboard (struct Text *text);
void txt_paste_clipboard (struct Text *text);
+
+void txt_add_marker (struct Text *text, struct TextLine *line, int start, int end, char color[4], int group, int flags);
+short txt_clear_marker_region (struct Text *text, struct TextLine *line, int start, int end, int group, int flags);
+short txt_clear_markers (struct Text *text, int group, int flags);
+struct TextMarker *txt_find_marker (struct Text *text, struct TextLine *line, int curs, int group, int flags);
+struct TextMarker *txt_find_marker_region (struct Text *text, struct TextLine *line, int start, int end, int group, int flags);
+struct TextMarker *txt_prev_marker (struct Text *text, struct TextMarker *marker);
+struct TextMarker *txt_next_marker (struct Text *text, struct TextMarker *marker);
+struct TextMarker *txt_prev_marker_color (struct Text *text, struct TextMarker *marker);
+struct TextMarker *txt_next_marker_color (struct Text *text, struct TextMarker *marker);
+
/* Undo opcodes */
/* Simple main cursor movement */
@@ -135,6 +152,14 @@ void txt_paste_clipboard (struct Text *text);
#define UNDO_COMMENT 034
#define UNDO_UNCOMMENT 035
+/* Find and replace flags */
+#define TXT_FIND_WRAP 0x01
+#define TXT_FIND_ALLTEXTS 0x02
+
+/* Marker flags */
+#define TMARK_TEMP 0x01 /* Remove on non-editing events, don't save */
+#define TMARK_EDITALL 0x02 /* Edit all markers of the same group as one */
+
#ifdef __cplusplus
}
#endif
diff --git a/source/blender/blenkernel/BKE_texture.h b/source/blender/blenkernel/BKE_texture.h
index c162a04e055..cfcae3c44bc 100644
--- a/source/blender/blenkernel/BKE_texture.h
+++ b/source/blender/blenkernel/BKE_texture.h
@@ -53,6 +53,7 @@ void free_plugin_tex(struct PluginTex *pit);
void init_colorband(struct ColorBand *coba, int rangetype);
struct ColorBand *add_colorband(int rangetype);
int do_colorband(struct ColorBand *coba, float in, float out[4]);
+void colorband_table_RGBA(struct ColorBand *coba, float **array, int *size);
void default_tex(struct Tex *tex);
struct Tex *add_texture(char *name);
diff --git a/source/blender/blenkernel/BKE_utildefines.h b/source/blender/blenkernel/BKE_utildefines.h
index a96a3e10f40..9662d6fbff8 100644
--- a/source/blender/blenkernel/BKE_utildefines.h
+++ b/source/blender/blenkernel/BKE_utildefines.h
@@ -55,6 +55,8 @@
#define ELEM7(a, b, c, d, e, f, g, h) ( ELEM3(a, b, c, d) || ELEM4(a, e, f, g, h) )
#define ELEM8(a, b, c, d, e, f, g, h, i) ( ELEM4(a, b, c, d, e) || ELEM4(a, f, g, h, i) )
#define ELEM9(a, b, c, d, e, f, g, h, i, j) ( ELEM4(a, b, c, d, e) || ELEM5(a, f, g, h, i, j) )
+#define ELEM10(a, b, c, d, e, f, g, h, i, j, k) ( ELEM4(a, b, c, d, e) || ELEM6(a, f, g, h, i, j, k) )
+#define ELEM11(a, b, c, d, e, f, g, h, i, j, k, l) ( ELEM4(a, b, c, d, e) || ELEM7(a, f, g, h, i, j, k, l) )
/* shift around elements */
#define SHIFT3(type, a, b, c) { type tmp; tmp = a; a = c; c = b; b = tmp; }
@@ -100,6 +102,8 @@
#define AVG2(x, y) ( 0.5 * ((x) + (y)) )
+#define FTOCHAR(val) (val<=0.0f)? 0 : ((val>(1.0f-0.5f/255.0f))? 255 : (char)((255.0f*val)+0.5f))
+
#define VECCOPY(v1,v2) {*(v1)= *(v2); *(v1+1)= *(v2+1); *(v1+2)= *(v2+2);}
#define VECCOPY2D(v1,v2) {*(v1)= *(v2); *(v1+1)= *(v2+1);}
#define QUATCOPY(v1,v2) {*(v1)= *(v2); *(v1+1)= *(v2+1); *(v1+2)= *(v2+2); *(v1+3)= *(v2+3);}
@@ -197,8 +201,8 @@
/* Warning-free macros for storing ints in pointers. Use these _only_
* for storing an int in a pointer, not a pointer in an int (64bit)! */
-#define SET_INT_IN_POINTER(i) ((void*)(long)(i))
-#define GET_INT_FROM_POINTER(i) ((int)(long)(i))
+#define SET_INT_IN_POINTER(i) ((void*)(intptr_t)(i))
+#define GET_INT_FROM_POINTER(i) ((int)(intptr_t)(i))
#endif
diff --git a/source/blender/blenkernel/BKE_writeframeserver.h b/source/blender/blenkernel/BKE_writeframeserver.h
index a6ece63bc56..4774906a2fa 100644
--- a/source/blender/blenkernel/BKE_writeframeserver.h
+++ b/source/blender/blenkernel/BKE_writeframeserver.h
@@ -37,7 +37,7 @@ struct RenderData;
extern void start_frameserver(struct RenderData *rd, int rectx, int recty);
extern void end_frameserver(void);
extern void append_frameserver(int frame, int *pixels, int rectx, int recty);
-extern int frameserver_loop();
+extern int frameserver_loop(void);
#ifdef __cplusplus
}
diff --git a/source/blender/blenkernel/CMakeLists.txt b/source/blender/blenkernel/CMakeLists.txt
index 9088b410e27..c3cbc36a94f 100644
--- a/source/blender/blenkernel/CMakeLists.txt
+++ b/source/blender/blenkernel/CMakeLists.txt
@@ -32,7 +32,7 @@ SET(INC
../imbuf ../avi ../../../intern/elbeem/extern ../../../intern/opennl/extern
../../../intern/iksolver/extern ../blenloader ../quicktime
../../../intern/bmfont ../../../extern/bullet2/src
- ../nodes
+ ../nodes ../../../extern/glew/include ../gpu
${SDL_INC}
${ZLIB_INC}
${PYTHON_INC}
@@ -73,3 +73,6 @@ IF(WITH_INTERNATIONAL)
ADD_DEFINITIONS(-DWITH_FREETYPE2)
ENDIF(WITH_INTERNATIONAL)
+IF(NOT WITH_ELBEEM)
+ ADD_DEFINITIONS(-DDISABLE_ELBEEM)
+ENDIF(NOT WITH_ELBEEM)
diff --git a/source/blender/blenkernel/SConscript b/source/blender/blenkernel/SConscript
index 1bb98239a68..f891b307b2c 100644
--- a/source/blender/blenkernel/SConscript
+++ b/source/blender/blenkernel/SConscript
@@ -10,6 +10,7 @@ incs += ' #/intern/iksolver/extern ../blenloader ../quicktime'
incs += ' #/extern/bullet2/src'
incs += ' #/intern/bmfont'
incs += ' #/intern/opennl/extern'
+incs += ' ../gpu #/extern/glew/include'
incs += ' ' + env['BF_PYTHON_INC']
incs += ' ' + env['BF_OPENGL_INC']
@@ -42,7 +43,8 @@ if env['WITH_BF_QUICKTIME'] == 1:
defs += ' WITH_QUICKTIME'
incs += ' ' + env['BF_QUICKTIME_INC']
-defs += ' WITH_CCGSUBSURF'
+if env['BF_NO_ELBEEM'] == 1:
+ defs += ' DISABLE_ELBEEM'
if env['WITH_BF_PLAYER']:
SConscript(['bad_level_call_stubs/SConscript'])
diff --git a/source/blender/blenkernel/bad_level_call_stubs/stubs.c b/source/blender/blenkernel/bad_level_call_stubs/stubs.c
index 561d8d7c2a6..ae336d0fc26 100644
--- a/source/blender/blenkernel/bad_level_call_stubs/stubs.c
+++ b/source/blender/blenkernel/bad_level_call_stubs/stubs.c
@@ -60,7 +60,7 @@ struct EditFace;
char *getIpoCurveName( struct IpoCurve * icu );
void insert_vert_icu(struct IpoCurve *icu, float x, float y, short fast);
-struct IpoCurve *verify_ipocurve(struct ID *id, short a, char *b, char *d, int e);
+struct IpoCurve *verify_ipocurve(struct ID *id, short a, char *b, char *d, int e, short f);
void elbeemDebugOut(char *msg);
void fluidsimSettingsFree(struct FluidsimSettings* sb);
void fluidsimSettingsCopy(struct FluidsimSettings* sb);
@@ -88,7 +88,7 @@ void insert_vert_icu(struct IpoCurve *icu, float x, float y, short fast)
}
-struct IpoCurve *verify_ipocurve(struct ID *id, short a, char *b, char *d, int e)
+struct IpoCurve *verify_ipocurve(struct ID *id, short a, char *b, char *d, int e, short f)
{
return 0;
}
@@ -176,10 +176,6 @@ void free_editMesh(struct EditMesh *em){}
void docenter_new(void){}
int saveover(char *str){ return 0;}
-/* image.c */
-#include "DNA_image_types.h"
-void free_realtime_image(Image *ima){} // has to become a callback, opengl stuff
-
/* ipo.c */
void copy_view3d_lock(short val){} // was a hack, to make scene layer ipo's possible
@@ -205,7 +201,7 @@ short pupmenu(char *instr){ return 0;} // will be general callback
/* scene.c */
#include "DNA_sequence_types.h"
void free_editing(struct Editing *ed){} // scenes and sequences problem...
-void BPY_do_all_scripts (short int event){}
+void BPY_do_all_scripts (short int event, short int anim){}
/*editmesh_lib.c*/
void EM_select_face(struct EditFace *efa, int sel) {}
@@ -220,30 +216,6 @@ struct EditEdge *findedgelist(struct EditVert *v1, struct EditVert *v2) { retur
void countall(void) {}
-
-/* IKsolver stubs */
-#include "IK_solver.h"
-
-IK_Segment *IK_CreateSegment(int flag) { return 0; }
-void IK_FreeSegment(IK_Segment *seg) {}
-
-void IK_SetParent(IK_Segment *seg, IK_Segment *parent) {}
-void IK_SetTransform(IK_Segment *seg, float start[3], float rest_basis[][3], float basis[][3], float length) {}
-void IK_GetBasisChange(IK_Segment *seg, float basis_change[][3]) {}
-void IK_GetTranslationChange(IK_Segment *seg, float *translation_change) {};
-void IK_SetLimit(IK_Segment *seg, IK_SegmentAxis axis, float lower, float upper) {};
-void IK_SetStiffness(IK_Segment *seg, IK_SegmentAxis axis, float stiffness) {};
-
-IK_Solver *IK_CreateSolver(IK_Segment *root) { return 0; }
-void IK_FreeSolver(IK_Solver *solver) {};
-
-void IK_SolverAddGoal(IK_Solver *solver, IK_Segment *tip, float goal[3], float weight) {}
-void IK_SolverAddGoalOrientation(IK_Solver *solver, IK_Segment *tip, float goal[][3], float weight) {}
-void IK_SolverSetPoleVectorConstraint(IK_Solver *solver, IK_Segment *tip, float goal[3], float polegoal[3], float poleangle, int getangle) {}
-float IK_SolverGetPoleAngle(IK_Solver *solver) { return 0.0f; }
-
-int IK_Solve(IK_Solver *solver, float tolerance, int max_iterations) { return 0; }
-
/* exotic.c */
int BPY_call_importloader(char *name)
{
diff --git a/source/blender/blenkernel/intern/CCGSubSurf.c b/source/blender/blenkernel/intern/CCGSubSurf.c
index 9dcb6b6e7fa..ce4458b4307 100644
--- a/source/blender/blenkernel/intern/CCGSubSurf.c
+++ b/source/blender/blenkernel/intern/CCGSubSurf.c
@@ -7,6 +7,8 @@
#include "CCGSubSurf.h"
+#include "BLO_sys_types.h" // for intptr_t support
+
/***/
typedef unsigned char byte;
@@ -35,7 +37,7 @@ typedef struct _EHash {
#define EHASH_alloc(eh, nb) ((eh)->allocatorIFC.alloc((eh)->allocator, nb))
#define EHASH_free(eh, ptr) ((eh)->allocatorIFC.free((eh)->allocator, ptr))
-#define EHASH_hash(eh, item) (((unsigned long) (item))%((unsigned int) (eh)->curSize))
+#define EHASH_hash(eh, item) (((uintptr_t) (item))%((unsigned int) (eh)->curSize))
static EHash *_ehash_new(int estimatedNumEntries, CCGAllocatorIFC *allocatorIFC, CCGAllocatorHDL allocator) {
EHash *eh = allocatorIFC->alloc(allocator, sizeof(*eh));
@@ -199,21 +201,21 @@ static CCGAllocatorIFC *_getStandardAllocatorIFC(void) {
static int VertDataEqual(float *a, float *b) {
return a[0]==b[0] && a[1]==b[1] && a[2]==b[2];
}
-#define VertDataZero(av) { float *a = (float*) av; a[0] = a[1] = a[2] = 0.0f; }
-#define VertDataCopy(av, bv) { float *a = (float*) av, *b = (float*) bv; a[0] =b[0]; a[1] =b[1]; a[2] =b[2]; }
-#define VertDataAdd(av, bv) { float *a = (float*) av, *b = (float*) bv; a[0]+=b[0]; a[1]+=b[1]; a[2]+=b[2]; }
-#define VertDataSub(av, bv) { float *a = (float*) av, *b = (float*) bv; a[0]-=b[0]; a[1]-=b[1]; a[2]-=b[2]; }
-#define VertDataMulN(av, n) { float *a = (float*) av; a[0]*=n; a[1]*=n; a[2]*=n; }
+#define VertDataZero(av) { float *_a = (float*) av; _a[0] = _a[1] = _a[2] = 0.0f; }
+#define VertDataCopy(av, bv) { float *_a = (float*) av, *_b = (float*) bv; _a[0] =_b[0]; _a[1] =_b[1]; _a[2] =_b[2]; }
+#define VertDataAdd(av, bv) { float *_a = (float*) av, *_b = (float*) bv; _a[0]+=_b[0]; _a[1]+=_b[1]; _a[2]+=_b[2]; }
+#define VertDataSub(av, bv) { float *_a = (float*) av, *_b = (float*) bv; _a[0]-=_b[0]; _a[1]-=_b[1]; _a[2]-=_b[2]; }
+#define VertDataMulN(av, n) { float *_a = (float*) av; _a[0]*=n; _a[1]*=n; _a[2]*=n; }
#define VertDataAvg4(tv, av, bv, cv, dv) \
{ \
- float *t = (float*) tv, *a = (float*) av, *b = (float*) bv, *c = (float*) cv, *d = (float*) dv; \
- t[0] = (a[0]+b[0]+c[0]+d[0])*.25; \
- t[1] = (a[1]+b[1]+c[1]+d[1])*.25; \
- t[2] = (a[2]+b[2]+c[2]+d[2])*.25; \
+ float *_t = (float*) tv, *_a = (float*) av, *_b = (float*) bv, *_c = (float*) cv, *_d = (float*) dv; \
+ _t[0] = (_a[0]+_b[0]+_c[0]+_d[0])*.25; \
+ _t[1] = (_a[1]+_b[1]+_c[1]+_d[1])*.25; \
+ _t[2] = (_a[2]+_b[2]+_c[2]+_d[2])*.25; \
}
-#define NormZero(av) { float *a = (float*) av; a[0] = a[1] = a[2] = 0.0f; }
-#define NormCopy(av, bv) { float *a = (float*) av, *b = (float*) bv; a[0] =b[0]; a[1] =b[1]; a[2] =b[2]; }
-#define NormAdd(av, bv) { float *a = (float*) av, *b = (float*) bv; a[0]+=b[0]; a[1]+=b[1]; a[2]+=b[2]; }
+#define NormZero(av) { float *_a = (float*) av; _a[0] = _a[1] = _a[2] = 0.0f; }
+#define NormCopy(av, bv) { float *_a = (float*) av, *_b = (float*) bv; _a[0] =_b[0]; _a[1] =_b[1]; _a[2] =_b[2]; }
+#define NormAdd(av, bv) { float *_a = (float*) av, *_b = (float*) bv; _a[0]+=_b[0]; _a[1]+=_b[1]; _a[2]+=_b[2]; }
static int _edge_isBoundary(CCGEdge *e);
@@ -328,7 +330,7 @@ struct _CCGSubSurf {
/***/
-static CCGVert *_vert_new(CCGVertHDL vHDL, int levels, int dataSize, CCGSubSurf *ss) {
+static CCGVert *_vert_new(CCGVertHDL vHDL, CCGSubSurf *ss) {
CCGVert *v = CCGSUBSURF_alloc(ss, sizeof(CCGVert) + ss->meshIFC.vertDataSize * (ss->subdivLevels+1) + ss->meshIFC.vertUserSize);
byte *userData;
@@ -344,7 +346,7 @@ static CCGVert *_vert_new(CCGVertHDL vHDL, int levels, int dataSize, CCGSubSurf
return v;
}
-static void _vert_remEdge(CCGVert *v, CCGEdge *e, CCGSubSurf *ss) {
+static void _vert_remEdge(CCGVert *v, CCGEdge *e) {
int i;
for (i=0; i<v->numEdges; i++) {
if (v->edges[i]==e) {
@@ -353,7 +355,7 @@ static void _vert_remEdge(CCGVert *v, CCGEdge *e, CCGSubSurf *ss) {
}
}
}
-static void _vert_remFace(CCGVert *v, CCGFace *f, CCGSubSurf *ss) {
+static void _vert_remFace(CCGVert *v, CCGFace *f) {
int i;
for (i=0; i<v->numFaces; i++) {
if (v->faces[i]==f) {
@@ -401,13 +403,13 @@ static void _vert_free(CCGVert *v, CCGSubSurf *ss) {
CCGSUBSURF_free(ss, v);
}
-static int VERT_seam(CCGVert *v, CCGSubSurf *ss) {
+static int VERT_seam(CCGVert *v) {
return ((v->flags & Vert_eSeam) != 0);
}
/***/
-static CCGEdge *_edge_new(CCGEdgeHDL eHDL, CCGVert *v0, CCGVert *v1, float crease, int levels, int dataSize, CCGSubSurf *ss) {
+static CCGEdge *_edge_new(CCGEdgeHDL eHDL, CCGVert *v0, CCGVert *v1, float crease, CCGSubSurf *ss) {
CCGEdge *e = CCGSUBSURF_alloc(ss, sizeof(CCGEdge) + ss->meshIFC.vertDataSize *((ss->subdivLevels+1) + (1<<(ss->subdivLevels+1))-1) + ss->meshIFC.edgeUserSize);
byte *userData;
@@ -427,7 +429,7 @@ static CCGEdge *_edge_new(CCGEdgeHDL eHDL, CCGVert *v0, CCGVert *v1, float creas
return e;
}
-static void _edge_remFace(CCGEdge *e, CCGFace *f, CCGSubSurf *ss) {
+static void _edge_remFace(CCGEdge *e, CCGFace *f) {
int i;
for (i=0; i<e->numFaces; i++) {
if (e->faces[i]==f) {
@@ -476,8 +478,8 @@ static void _edge_free(CCGEdge *e, CCGSubSurf *ss) {
CCGSUBSURF_free(ss, e);
}
static void _edge_unlinkMarkAndFree(CCGEdge *e, CCGSubSurf *ss) {
- _vert_remEdge(e->v0, e, ss);
- _vert_remEdge(e->v1, e, ss);
+ _vert_remEdge(e->v0, e);
+ _vert_remEdge(e->v1, e);
e->v0->flags |= Vert_eEffected;
e->v1->flags |= Vert_eEffected;
_edge_free(e, ss);
@@ -494,7 +496,7 @@ static float EDGE_getSharpness(CCGEdge *e, int lvl) {
return e->crease - lvl;
}
-static CCGFace *_face_new(CCGFaceHDL fHDL, CCGVert **verts, CCGEdge **edges, int numVerts, int levels, int dataSize, CCGSubSurf *ss) {
+static CCGFace *_face_new(CCGFaceHDL fHDL, CCGVert **verts, CCGEdge **edges, int numVerts, CCGSubSurf *ss) {
int maxGridSize = 1 + (1<<(ss->subdivLevels-1));
CCGFace *f = CCGSUBSURF_alloc(ss, sizeof(CCGFace) + sizeof(CCGVert*)*numVerts + sizeof(CCGEdge*)*numVerts + ss->meshIFC.vertDataSize *(1 + numVerts*maxGridSize + numVerts*maxGridSize*maxGridSize) + ss->meshIFC.faceUserSize);
byte *userData;
@@ -608,8 +610,8 @@ static void _face_free(CCGFace *f, CCGSubSurf *ss) {
static void _face_unlinkMarkAndFree(CCGFace *f, CCGSubSurf *ss) {
int j;
for (j=0; j<f->numVerts; j++) {
- _vert_remFace(FACE_getVerts(f)[j], f, ss);
- _edge_remFace(FACE_getEdges(f)[j], f, ss);
+ _vert_remFace(FACE_getVerts(f)[j], f);
+ _edge_remFace(FACE_getEdges(f)[j], f);
FACE_getVerts(f)[j]->flags |= Vert_eEffected;
}
_face_free(f, ss);
@@ -882,7 +884,7 @@ CCGError ccgSubSurf_syncVert(CCGSubSurf *ss, CCGVertHDL vHDL, void *vertData, in
if (ss->syncState==eSyncState_Partial) {
v = _ehash_lookupWithPrev(ss->vMap, vHDL, &prevp);
if (!v) {
- v = _vert_new(vHDL, ss->subdivLevels, ss->meshIFC.vertDataSize, ss);
+ v = _vert_new(vHDL, ss);
VertDataCopy(_vert_getCo(v,0,ss->meshIFC.vertDataSize), vertData);
_ehash_insert(ss->vMap, (EHEntry*) v);
v->flags = Vert_eEffected|seamflag;
@@ -911,7 +913,7 @@ CCGError ccgSubSurf_syncVert(CCGSubSurf *ss, CCGVertHDL vHDL, void *vertData, in
v = _ehash_lookupWithPrev(ss->oldVMap, vHDL, &prevp);
if (!v) {
- v = _vert_new(vHDL, ss->subdivLevels, ss->meshIFC.vertDataSize, ss);
+ v = _vert_new(vHDL, ss);
VertDataCopy(_vert_getCo(v,0,ss->meshIFC.vertDataSize), vertData);
_ehash_insert(ss->vMap, (EHEntry*) v);
v->flags = Vert_eEffected|seamflag;
@@ -941,7 +943,7 @@ CCGError ccgSubSurf_syncEdge(CCGSubSurf *ss, CCGEdgeHDL eHDL, CCGVertHDL e_vHDL0
CCGVert *v0 = _ehash_lookup(ss->vMap, e_vHDL0);
CCGVert *v1 = _ehash_lookup(ss->vMap, e_vHDL1);
- eNew = _edge_new(eHDL, v0, v1, crease, ss->subdivLevels, ss->meshIFC.vertDataSize, ss);
+ eNew = _edge_new(eHDL, v0, v1, crease, ss);
if (e) {
*prevp = eNew;
@@ -966,7 +968,7 @@ CCGError ccgSubSurf_syncEdge(CCGSubSurf *ss, CCGEdgeHDL eHDL, CCGVertHDL e_vHDL0
if (!e || e->v0->vHDL!=e_vHDL0 || e->v1->vHDL!=e_vHDL1|| e->crease!=crease) {
CCGVert *v0 = _ehash_lookup(ss->vMap, e_vHDL0);
CCGVert *v1 = _ehash_lookup(ss->vMap, e_vHDL1);
- e = _edge_new(eHDL, v0, v1, crease, ss->subdivLevels, ss->meshIFC.vertDataSize, ss);
+ e = _edge_new(eHDL, v0, v1, crease, ss);
_ehash_insert(ss->eMap, (EHEntry*) e);
e->v0->flags |= Vert_eEffected;
e->v1->flags |= Vert_eEffected;
@@ -1015,7 +1017,7 @@ CCGError ccgSubSurf_syncFace(CCGSubSurf *ss, CCGFaceHDL fHDL, int numVerts, CCGV
}
if (!f || topologyChanged) {
- fNew = _face_new(fHDL, ss->tempVerts, ss->tempEdges, numVerts, ss->subdivLevels, ss->meshIFC.vertDataSize, ss);
+ fNew = _face_new(fHDL, ss->tempVerts, ss->tempEdges, numVerts, ss);
if (f) {
ss->numGrids += numVerts - f->numVerts;
@@ -1052,7 +1054,7 @@ CCGError ccgSubSurf_syncFace(CCGSubSurf *ss, CCGFaceHDL fHDL, int numVerts, CCGV
if (!ss->tempEdges[k]) {
if (ss->allowEdgeCreation) {
- CCGEdge *e = ss->tempEdges[k] = _edge_new((CCGEdgeHDL) -1, ss->tempVerts[k], ss->tempVerts[(k+1)%numVerts], ss->defaultCreaseValue, ss->subdivLevels, ss->meshIFC.vertDataSize, ss);
+ CCGEdge *e = ss->tempEdges[k] = _edge_new((CCGEdgeHDL) -1, ss->tempVerts[k], ss->tempVerts[(k+1)%numVerts], ss->defaultCreaseValue, ss);
_ehash_insert(ss->eMap, (EHEntry*) e);
e->v0->flags |= Vert_eEffected;
e->v1->flags |= Vert_eEffected;
@@ -1073,7 +1075,7 @@ CCGError ccgSubSurf_syncFace(CCGSubSurf *ss, CCGFaceHDL fHDL, int numVerts, CCGV
}
if (!f || topologyChanged) {
- f = _face_new(fHDL, ss->tempVerts, ss->tempEdges, numVerts, ss->subdivLevels, ss->meshIFC.vertDataSize, ss);
+ f = _face_new(fHDL, ss->tempVerts, ss->tempEdges, numVerts, ss);
_ehash_insert(ss->fMap, (EHEntry*) f);
ss->numGrids += numVerts;
@@ -1226,7 +1228,7 @@ static void ccgSubSurf__sync(CCGSubSurf *ss) {
void *nCo = VERT_getCo(v, nextLvl);
int sharpCount = 0, allSharp = 1;
float avgSharpness = 0.0;
- int seam = VERT_seam(v, ss), seamEdges = 0;
+ int seam = VERT_seam(v), seamEdges = 0;
for (i=0; i<v->numEdges; i++) {
CCGEdge *e = v->edges[i];
@@ -1524,7 +1526,7 @@ static void ccgSubSurf__sync(CCGSubSurf *ss) {
void *nCo = VERT_getCo(v, nextLvl);
int sharpCount = 0, allSharp = 1;
float avgSharpness = 0.0;
- int seam = VERT_seam(v, ss), seamEdges = 0;
+ int seam = VERT_seam(v), seamEdges = 0;
for (i=0; i<v->numEdges; i++) {
CCGEdge *e = v->edges[i];
@@ -2069,7 +2071,7 @@ int ccgSubSurf_getGridLevelSize(CCGSubSurf *ss, int level) {
/* Vert accessors */
-CCGVertHDL ccgSubSurf_getVertVertHandle(CCGSubSurf *ss, CCGVert *v) {
+CCGVertHDL ccgSubSurf_getVertVertHandle(CCGVert *v) {
return v->vHDL;
}
int ccgSubSurf_getVertAge(CCGSubSurf *ss, CCGVert *v) {
@@ -2083,20 +2085,20 @@ int ccgSubSurf_getVertAge(CCGSubSurf *ss, CCGVert *v) {
void *ccgSubSurf_getVertUserData(CCGSubSurf *ss, CCGVert *v) {
return VERT_getLevelData(v) + ss->meshIFC.vertDataSize*(ss->subdivLevels+1);
}
-int ccgSubSurf_getVertNumFaces(CCGSubSurf *ss, CCGVert *v) {
+int ccgSubSurf_getVertNumFaces(CCGVert *v) {
return v->numFaces;
}
-CCGFace *ccgSubSurf_getVertFace(CCGSubSurf *ss, CCGVert *v, int index) {
+CCGFace *ccgSubSurf_getVertFace(CCGVert *v, int index) {
if (index<0 || index>=v->numFaces) {
return NULL;
} else {
return v->faces[index];
}
}
-int ccgSubSurf_getVertNumEdges(CCGSubSurf *ss, CCGVert *v) {
+int ccgSubSurf_getVertNumEdges(CCGVert *v) {
return v->numEdges;
}
-CCGEdge *ccgSubSurf_getVertEdge(CCGSubSurf *ss, CCGVert *v, int index) {
+CCGEdge *ccgSubSurf_getVertEdge(CCGVert *v, int index) {
if (index<0 || index>=v->numEdges) {
return NULL;
} else {
@@ -2116,7 +2118,7 @@ void *ccgSubSurf_getVertLevelData(CCGSubSurf *ss, CCGVert *v, int level) {
/* Edge accessors */
-CCGEdgeHDL ccgSubSurf_getEdgeEdgeHandle(CCGSubSurf *ss, CCGEdge *e) {
+CCGEdgeHDL ccgSubSurf_getEdgeEdgeHandle(CCGEdge *e) {
return e->eHDL;
}
int ccgSubSurf_getEdgeAge(CCGSubSurf *ss, CCGEdge *e) {
@@ -2130,20 +2132,20 @@ int ccgSubSurf_getEdgeAge(CCGSubSurf *ss, CCGEdge *e) {
void *ccgSubSurf_getEdgeUserData(CCGSubSurf *ss, CCGEdge *e) {
return EDGE_getLevelData(e) + ss->meshIFC.vertDataSize *((ss->subdivLevels+1) + (1<<(ss->subdivLevels+1))-1);
}
-int ccgSubSurf_getEdgeNumFaces(CCGSubSurf *ss, CCGEdge *e) {
+int ccgSubSurf_getEdgeNumFaces(CCGEdge *e) {
return e->numFaces;
}
-CCGFace *ccgSubSurf_getEdgeFace(CCGSubSurf *ss, CCGEdge *e, int index) {
+CCGFace *ccgSubSurf_getEdgeFace(CCGEdge *e, int index) {
if (index<0 || index>=e->numFaces) {
return NULL;
} else {
return e->faces[index];
}
}
-CCGVert *ccgSubSurf_getEdgeVert0(CCGSubSurf *ss, CCGEdge *e) {
+CCGVert *ccgSubSurf_getEdgeVert0(CCGEdge *e) {
return e->v0;
}
-CCGVert *ccgSubSurf_getEdgeVert1(CCGSubSurf *ss, CCGEdge *e) {
+CCGVert *ccgSubSurf_getEdgeVert1(CCGEdge *e) {
return e->v1;
}
void *ccgSubSurf_getEdgeDataArray(CCGSubSurf *ss, CCGEdge *e) {
@@ -2159,7 +2161,7 @@ void *ccgSubSurf_getEdgeLevelData(CCGSubSurf *ss, CCGEdge *e, int x, int level)
return _edge_getCo(e, level, x, ss->meshIFC.vertDataSize);
}
}
-float ccgSubSurf_getEdgeCrease(CCGSubSurf *ss, CCGEdge *e) {
+float ccgSubSurf_getEdgeCrease(CCGEdge *e) {
return e->crease;
}
@@ -2180,7 +2182,7 @@ void *ccgSubSurf_getFaceUserData(CCGSubSurf *ss, CCGFace *f) {
int maxGridSize = 1 + (1<<(ss->subdivLevels-1));
return FACE_getCenterData(f) + ss->meshIFC.vertDataSize *(1 + f->numVerts*maxGridSize + f->numVerts*maxGridSize*maxGridSize);
}
-int ccgSubSurf_getFaceNumVerts(CCGSubSurf *ss, CCGFace *f) {
+int ccgSubSurf_getFaceNumVerts(CCGFace *f) {
return f->numVerts;
}
CCGVert *ccgSubSurf_getFaceVert(CCGSubSurf *ss, CCGFace *f, int index) {
@@ -2197,7 +2199,7 @@ CCGEdge *ccgSubSurf_getFaceEdge(CCGSubSurf *ss, CCGFace *f, int index) {
return FACE_getEdges(f)[index];
}
}
-int ccgSubSurf_getFaceEdgeIndex(CCGSubSurf *ss, CCGFace *f, CCGEdge *e) {
+int ccgSubSurf_getFaceEdgeIndex(CCGFace *f, CCGEdge *e) {
int i;
for (i=0; i<f->numVerts; i++)
@@ -2206,7 +2208,7 @@ int ccgSubSurf_getFaceEdgeIndex(CCGSubSurf *ss, CCGFace *f, CCGEdge *e) {
return -1;
}
-void *ccgSubSurf_getFaceCenterData(CCGSubSurf *ss, CCGFace *f) {
+void *ccgSubSurf_getFaceCenterData(CCGFace *f) {
return FACE_getCenterData(f);
}
void *ccgSubSurf_getFaceGridEdgeDataArray(CCGSubSurf *ss, CCGFace *f, int gridIndex) {
diff --git a/source/blender/blenkernel/intern/CCGSubSurf.h b/source/blender/blenkernel/intern/CCGSubSurf.h
index 91f3ffab43b..fbd0aecc0a5 100644
--- a/source/blender/blenkernel/intern/CCGSubSurf.h
+++ b/source/blender/blenkernel/intern/CCGSubSurf.h
@@ -82,11 +82,11 @@ int ccgSubSurf_getGridSize (CCGSubSurf *ss);
int ccgSubSurf_getGridLevelSize (CCGSubSurf *ss, int level);
CCGVert* ccgSubSurf_getVert (CCGSubSurf *ss, CCGVertHDL v);
-CCGVertHDL ccgSubSurf_getVertVertHandle (CCGSubSurf *ss, CCGVert *v);
-int ccgSubSurf_getVertNumFaces (CCGSubSurf *ss, CCGVert *v);
-CCGFace* ccgSubSurf_getVertFace (CCGSubSurf *ss, CCGVert *v, int index);
-int ccgSubSurf_getVertNumEdges (CCGSubSurf *ss, CCGVert *v);
-CCGEdge* ccgSubSurf_getVertEdge (CCGSubSurf *ss, CCGVert *v, int index);
+CCGVertHDL ccgSubSurf_getVertVertHandle (CCGVert *v);
+int ccgSubSurf_getVertNumFaces (CCGVert *v);
+CCGFace* ccgSubSurf_getVertFace (CCGVert *v, int index);
+int ccgSubSurf_getVertNumEdges (CCGVert *v);
+CCGEdge* ccgSubSurf_getVertEdge (CCGVert *v, int index);
int ccgSubSurf_getVertAge (CCGSubSurf *ss, CCGVert *v);
void* ccgSubSurf_getVertUserData (CCGSubSurf *ss, CCGVert *v);
@@ -94,12 +94,12 @@ void* ccgSubSurf_getVertData (CCGSubSurf *ss, CCGVert *v);
void* ccgSubSurf_getVertLevelData (CCGSubSurf *ss, CCGVert *v, int level);
CCGEdge* ccgSubSurf_getEdge (CCGSubSurf *ss, CCGEdgeHDL e);
-CCGEdgeHDL ccgSubSurf_getEdgeEdgeHandle (CCGSubSurf *ss, CCGEdge *e);
-int ccgSubSurf_getEdgeNumFaces (CCGSubSurf *ss, CCGEdge *e);
-CCGFace* ccgSubSurf_getEdgeFace (CCGSubSurf *ss, CCGEdge *e, int index);
-CCGVert* ccgSubSurf_getEdgeVert0 (CCGSubSurf *ss, CCGEdge *e);
-CCGVert* ccgSubSurf_getEdgeVert1 (CCGSubSurf *ss, CCGEdge *e);
-float ccgSubSurf_getEdgeCrease (CCGSubSurf *ss, CCGEdge *e);
+CCGEdgeHDL ccgSubSurf_getEdgeEdgeHandle (CCGEdge *e);
+int ccgSubSurf_getEdgeNumFaces (CCGEdge *e);
+CCGFace* ccgSubSurf_getEdgeFace (CCGEdge *e, int index);
+CCGVert* ccgSubSurf_getEdgeVert0 (CCGEdge *e);
+CCGVert* ccgSubSurf_getEdgeVert1 (CCGEdge *e);
+float ccgSubSurf_getEdgeCrease (CCGEdge *e);
int ccgSubSurf_getEdgeAge (CCGSubSurf *ss, CCGEdge *e);
void* ccgSubSurf_getEdgeUserData (CCGSubSurf *ss, CCGEdge *e);
@@ -109,14 +109,14 @@ void* ccgSubSurf_getEdgeLevelData (CCGSubSurf *ss, CCGEdge *e, int x, int lev
CCGFace* ccgSubSurf_getFace (CCGSubSurf *ss, CCGFaceHDL f);
CCGFaceHDL ccgSubSurf_getFaceFaceHandle (CCGSubSurf *ss, CCGFace *f);
-int ccgSubSurf_getFaceNumVerts (CCGSubSurf *ss, CCGFace *f);
+int ccgSubSurf_getFaceNumVerts (CCGFace *f);
CCGVert* ccgSubSurf_getFaceVert (CCGSubSurf *ss, CCGFace *f, int index);
CCGEdge* ccgSubSurf_getFaceEdge (CCGSubSurf *ss, CCGFace *f, int index);
-int ccgSubSurf_getFaceEdgeIndex (CCGSubSurf *ss, CCGFace *f, CCGEdge *e);
+int ccgSubSurf_getFaceEdgeIndex (CCGFace *f, CCGEdge *e);
int ccgSubSurf_getFaceAge (CCGSubSurf *ss, CCGFace *f);
void* ccgSubSurf_getFaceUserData (CCGSubSurf *ss, CCGFace *f);
-void* ccgSubSurf_getFaceCenterData (CCGSubSurf *ss, CCGFace *f);
+void* ccgSubSurf_getFaceCenterData (CCGFace *f);
void* ccgSubSurf_getFaceGridEdgeDataArray (CCGSubSurf *ss, CCGFace *f, int gridIndex);
void* ccgSubSurf_getFaceGridEdgeData (CCGSubSurf *ss, CCGFace *f, int gridIndex, int x);
void* ccgSubSurf_getFaceGridDataArray (CCGSubSurf *ss, CCGFace *f, int gridIndex);
diff --git a/source/blender/blenkernel/intern/DerivedMesh.c b/source/blender/blenkernel/intern/DerivedMesh.c
index 67cf89d5ee2..d4b17f97ad9 100644
--- a/source/blender/blenkernel/intern/DerivedMesh.c
+++ b/source/blender/blenkernel/intern/DerivedMesh.c
@@ -33,8 +33,6 @@
#include <config.h>
#endif
-#include <zlib.h>
-
#include "PIL_time.h"
#include "MEM_guardedalloc.h"
@@ -67,6 +65,7 @@
#include "BKE_deform.h"
#include "BKE_displist.h"
#include "BKE_effect.h"
+#include "BKE_fluidsim.h"
#include "BKE_global.h"
#include "BKE_key.h"
#include "BKE_material.h"
@@ -79,6 +78,8 @@
#include "BKE_utildefines.h"
#include "BKE_particle.h"
+#include "BLO_sys_types.h" // for intptr_t support
+
#ifdef WITH_VERSE
#include "BKE_verse.h"
#endif
@@ -86,15 +87,14 @@
#include "BIF_gl.h"
#include "BIF_glutil.h"
-// headers for fluidsim bobj meshes
-#include <stdlib.h>
-#include "LBM_fluidsim.h"
-#include "elbeem.h"
+#include "GPU_draw.h"
+#include "GPU_extensions.h"
+#include "GPU_material.h"
///////////////////////////////////
///////////////////////////////////
-MVert *dm_getVertArray(DerivedMesh *dm)
+static MVert *dm_getVertArray(DerivedMesh *dm)
{
MVert *mvert = CustomData_get_layer(&dm->vertData, CD_MVERT);
@@ -108,7 +108,7 @@ MVert *dm_getVertArray(DerivedMesh *dm)
return mvert;
}
-MEdge *dm_getEdgeArray(DerivedMesh *dm)
+static MEdge *dm_getEdgeArray(DerivedMesh *dm)
{
MEdge *medge = CustomData_get_layer(&dm->edgeData, CD_MEDGE);
@@ -122,7 +122,7 @@ MEdge *dm_getEdgeArray(DerivedMesh *dm)
return medge;
}
-MFace *dm_getFaceArray(DerivedMesh *dm)
+static MFace *dm_getFaceArray(DerivedMesh *dm)
{
MFace *mface = CustomData_get_layer(&dm->faceData, CD_MFACE);
@@ -136,7 +136,7 @@ MFace *dm_getFaceArray(DerivedMesh *dm)
return mface;
}
-MVert *dm_dupVertArray(DerivedMesh *dm)
+static MVert *dm_dupVertArray(DerivedMesh *dm)
{
MVert *tmp = MEM_callocN(sizeof(*tmp) * dm->getNumVerts(dm),
"dm_dupVertArray tmp");
@@ -146,7 +146,7 @@ MVert *dm_dupVertArray(DerivedMesh *dm)
return tmp;
}
-MEdge *dm_dupEdgeArray(DerivedMesh *dm)
+static MEdge *dm_dupEdgeArray(DerivedMesh *dm)
{
MEdge *tmp = MEM_callocN(sizeof(*tmp) * dm->getNumEdges(dm),
"dm_dupEdgeArray tmp");
@@ -156,7 +156,7 @@ MEdge *dm_dupEdgeArray(DerivedMesh *dm)
return tmp;
}
-MFace *dm_dupFaceArray(DerivedMesh *dm)
+static MFace *dm_dupFaceArray(DerivedMesh *dm)
{
MFace *tmp = MEM_callocN(sizeof(*tmp) * dm->getNumFaces(dm),
"dm_dupFaceArray tmp");
@@ -409,38 +409,20 @@ void DM_swap_face_data(DerivedMesh *dm, int index, int *corner_indices)
CustomData_swap(&dm->faceData, index, corner_indices);
}
+///
+
static DerivedMesh *getMeshDerivedMesh(Mesh *me, Object *ob, float (*vertCos)[3])
{
DerivedMesh *dm = CDDM_from_mesh(me, ob);
- int i, dofluidsim;
-
- dofluidsim = ((ob->fluidsimFlag & OB_FLUIDSIM_ENABLE) &&
- (ob->fluidsimSettings->type & OB_FLUIDSIM_DOMAIN)&&
- (ob->fluidsimSettings->meshSurface) &&
- (me->totvert == ((Mesh *)(ob->fluidsimSettings->meshSurface))->totvert));
-
- if (vertCos && !dofluidsim)
+
+ if(!dm)
+ return NULL;
+
+ if (vertCos)
CDDM_apply_vert_coords(dm, vertCos);
CDDM_calc_normals(dm);
- /* apply fluidsim normals */
- if (dofluidsim) {
- // use normals from readBobjgz
- // TODO? check for modifiers!?
- MVert *fsvert = ob->fluidsimSettings->meshSurfNormals;
- short (*normals)[3] = MEM_mallocN(sizeof(short)*3*me->totvert, "fluidsim nor");
-
- for (i=0; i<me->totvert; i++) {
- VECCOPY(normals[i], fsvert[i].no);
- //mv->no[0]= 30000; mv->no[1]= mv->no[2]= 0; // DEBUG fixed test normals
- }
-
- CDDM_apply_vert_normals(dm, normals);
-
- MEM_freeN(normals);
- }
-
return dm;
}
@@ -479,7 +461,7 @@ static void emDM_foreachMappedEdge(DerivedMesh *dm, void (*func)(void *userData,
EditVert *eve;
for (i=0,eve=emdm->em->verts.first; eve; eve= eve->next)
- eve->tmp.l = (long) i++;
+ eve->tmp.l = (intptr_t) i++;
for(i=0,eed= emdm->em->edges.first; eed; i++,eed= eed->next)
func(userData, i, emdm->vertexCos[(int) eed->v1->tmp.l], emdm->vertexCos[(int) eed->v2->tmp.l]);
} else {
@@ -497,7 +479,7 @@ static void emDM_drawMappedEdges(DerivedMesh *dm, int (*setDrawOptions)(void *us
EditVert *eve;
for (i=0,eve=emdm->em->verts.first; eve; eve= eve->next)
- eve->tmp.l = (long) i++;
+ eve->tmp.l = (intptr_t) i++;
glBegin(GL_LINES);
for(i=0,eed= emdm->em->edges.first; eed; i++,eed= eed->next) {
@@ -532,7 +514,7 @@ static void emDM_drawMappedEdgesInterp(DerivedMesh *dm, int (*setDrawOptions)(vo
EditVert *eve;
for (i=0,eve=emdm->em->verts.first; eve; eve= eve->next)
- eve->tmp.l = (long) i++;
+ eve->tmp.l = (intptr_t) i++;
glBegin(GL_LINES);
for (i=0,eed= emdm->em->edges.first; eed; i++,eed= eed->next) {
@@ -619,7 +601,7 @@ static void emDM_foreachMappedFaceCenter(DerivedMesh *dm, void (*func)(void *use
if (emdm->vertexCos) {
for (i=0,eve=emdm->em->verts.first; eve; eve= eve->next)
- eve->tmp.l = (long) i++;
+ eve->tmp.l = (intptr_t) i++;
}
for(i=0,efa= emdm->em->faces.first; efa; i++,efa= efa->next) {
@@ -637,7 +619,7 @@ static void emDM_drawMappedFaces(DerivedMesh *dm, int (*setDrawOptions)(void *us
EditVert *eve;
for (i=0,eve=emdm->em->verts.first; eve; eve= eve->next)
- eve->tmp.l = (long) i++;
+ eve->tmp.l = (intptr_t) i++;
for (i=0,efa= emdm->em->faces.first; efa; i++,efa= efa->next) {
int drawSmooth = (efa->flag & ME_SMOOTH);
@@ -733,7 +715,7 @@ static void emDM_drawFacesTex_common(DerivedMesh *dm,
EditVert *eve;
for (i=0,eve=em->verts.first; eve; eve= eve->next)
- eve->tmp.l = (long) i++;
+ eve->tmp.l = (intptr_t) i++;
for (i=0,efa= em->faces.first; efa; i++,efa= efa->next) {
MTFace *tf= CustomData_em_get(&em->fdata, efa->data, CD_MTFACE);
@@ -892,6 +874,162 @@ static void emDM_drawMappedFacesTex(DerivedMesh *dm, int (*setDrawOptions)(void
emDM_drawFacesTex_common(dm, NULL, setDrawOptions, userData);
}
+static void emDM_drawMappedFacesGLSL(DerivedMesh *dm,
+ int (*setMaterial)(int, void *attribs),
+ int (*setDrawOptions)(void *userData, int index), void *userData)
+{
+ EditMeshDerivedMesh *emdm= (EditMeshDerivedMesh*) dm;
+ EditMesh *em= emdm->em;
+ float (*vertexCos)[3]= emdm->vertexCos;
+ float (*vertexNos)[3]= emdm->vertexNos;
+ EditVert *eve;
+ EditFace *efa;
+ DMVertexAttribs attribs;
+ GPUVertexAttribs gattribs;
+ MTFace *tf;
+ int transp, new_transp, orig_transp, tfoffset;
+ int i, b, matnr, new_matnr, dodraw, layer;
+
+ dodraw = 0;
+ matnr = -1;
+
+ transp = GPU_get_material_blend_mode();
+ orig_transp = transp;
+ layer = CustomData_get_layer_index(&em->fdata, CD_MTFACE);
+ tfoffset = (layer == -1)? -1: em->fdata.layers[layer].offset;
+
+ memset(&attribs, 0, sizeof(attribs));
+
+ /* always use smooth shading even for flat faces, else vertex colors wont interpolate */
+ glShadeModel(GL_SMOOTH);
+
+ for (i=0,eve=em->verts.first; eve; eve= eve->next)
+ eve->tmp.l = (long) i++;
+
+#define PASSATTRIB(efa, eve, vert) { \
+ if(attribs.totorco) { \
+ float *orco = attribs.orco.array[eve->tmp.l]; \
+ glVertexAttrib3fvARB(attribs.orco.glIndex, orco); \
+ } \
+ for(b = 0; b < attribs.tottface; b++) { \
+ MTFace *_tf = (MTFace*)((char*)efa->data + attribs.tface[b].emOffset); \
+ glVertexAttrib2fvARB(attribs.tface[b].glIndex, _tf->uv[vert]); \
+ } \
+ for(b = 0; b < attribs.totmcol; b++) { \
+ MCol *cp = (MCol*)((char*)efa->data + attribs.mcol[b].emOffset); \
+ GLubyte col[4]; \
+ col[0]= cp->b; col[1]= cp->g; col[2]= cp->r; col[3]= cp->a; \
+ glVertexAttrib4ubvARB(attribs.mcol[b].glIndex, col); \
+ } \
+ if(attribs.tottang) { \
+ float *tang = attribs.tang.array[i*4 + vert]; \
+ glVertexAttrib3fvARB(attribs.tang.glIndex, tang); \
+ } \
+}
+
+ for (i=0,efa= em->faces.first; efa; i++,efa= efa->next) {
+ int drawSmooth= (efa->flag & ME_SMOOTH);
+
+ if(setDrawOptions && !setDrawOptions(userData, i))
+ continue;
+
+ new_matnr = efa->mat_nr + 1;
+ if(new_matnr != matnr) {
+ dodraw = setMaterial(matnr = new_matnr, &gattribs);
+ if(dodraw)
+ DM_vertex_attributes_from_gpu(dm, &gattribs, &attribs);
+ }
+
+ if(tfoffset != -1) {
+ tf = (MTFace*)((char*)efa->data)+tfoffset;
+ new_transp = tf->transp;
+
+ if(new_transp != transp) {
+ if(new_transp == GPU_BLEND_SOLID && orig_transp != GPU_BLEND_SOLID)
+ GPU_set_material_blend_mode(orig_transp);
+ else
+ GPU_set_material_blend_mode(new_transp);
+ transp = new_transp;
+ }
+ }
+
+ if(dodraw) {
+ glBegin(efa->v4?GL_QUADS:GL_TRIANGLES);
+ if (!drawSmooth) {
+ if(vertexCos) glNormal3fv(emdm->faceNos[i]);
+ else glNormal3fv(efa->n);
+
+ PASSATTRIB(efa, efa->v1, 0);
+ if(vertexCos) glVertex3fv(vertexCos[(int) efa->v1->tmp.l]);
+ else glVertex3fv(efa->v1->co);
+
+ PASSATTRIB(efa, efa->v2, 1);
+ if(vertexCos) glVertex3fv(vertexCos[(int) efa->v2->tmp.l]);
+ else glVertex3fv(efa->v2->co);
+
+ PASSATTRIB(efa, efa->v3, 2);
+ if(vertexCos) glVertex3fv(vertexCos[(int) efa->v3->tmp.l]);
+ else glVertex3fv(efa->v3->co);
+
+ if(efa->v4) {
+ PASSATTRIB(efa, efa->v4, 3);
+ if(vertexCos) glVertex3fv(vertexCos[(int) efa->v4->tmp.l]);
+ else glVertex3fv(efa->v4->co);
+ }
+ } else {
+ PASSATTRIB(efa, efa->v1, 0);
+ if(vertexCos) {
+ glNormal3fv(vertexNos[(int) efa->v1->tmp.l]);
+ glVertex3fv(vertexCos[(int) efa->v1->tmp.l]);
+ }
+ else {
+ glNormal3fv(efa->v1->no);
+ glVertex3fv(efa->v1->co);
+ }
+
+ PASSATTRIB(efa, efa->v2, 1);
+ if(vertexCos) {
+ glNormal3fv(vertexNos[(int) efa->v2->tmp.l]);
+ glVertex3fv(vertexCos[(int) efa->v2->tmp.l]);
+ }
+ else {
+ glNormal3fv(efa->v2->no);
+ glVertex3fv(efa->v2->co);
+ }
+
+ PASSATTRIB(efa, efa->v3, 2);
+ if(vertexCos) {
+ glNormal3fv(vertexNos[(int) efa->v3->tmp.l]);
+ glVertex3fv(vertexCos[(int) efa->v3->tmp.l]);
+ }
+ else {
+ glNormal3fv(efa->v3->no);
+ glVertex3fv(efa->v3->co);
+ }
+
+ if(efa->v4) {
+ PASSATTRIB(efa, efa->v4, 3);
+ if(vertexCos) {
+ glNormal3fv(vertexNos[(int) efa->v4->tmp.l]);
+ glVertex3fv(vertexCos[(int) efa->v4->tmp.l]);
+ }
+ else {
+ glNormal3fv(efa->v4->no);
+ glVertex3fv(efa->v4->co);
+ }
+ }
+ }
+ glEnd();
+ }
+ }
+}
+
+static void emDM_drawFacesGLSL(DerivedMesh *dm,
+ int (*setMaterial)(int, void *attribs))
+{
+ dm->drawMappedFacesGLSL(dm, setMaterial, NULL, NULL);
+}
+
static void emDM_getMinMax(DerivedMesh *dm, float min_r[3], float max_r[3])
{
EditMeshDerivedMesh *emdm= (EditMeshDerivedMesh*) dm;
@@ -931,7 +1069,7 @@ static int emDM_getNumFaces(DerivedMesh *dm)
return BLI_countlist(&emdm->em->faces);
}
-void emDM_getVert(DerivedMesh *dm, int index, MVert *vert_r)
+static void emDM_getVert(DerivedMesh *dm, int index, MVert *vert_r)
{
EditVert *ev = ((EditMeshDerivedMesh *)dm)->em->verts.first;
int i;
@@ -949,7 +1087,7 @@ void emDM_getVert(DerivedMesh *dm, int index, MVert *vert_r)
vert_r->bweight = (unsigned char) (ev->bweight*255.0f);
}
-void emDM_getEdge(DerivedMesh *dm, int index, MEdge *edge_r)
+static void emDM_getEdge(DerivedMesh *dm, int index, MEdge *edge_r)
{
EditMesh *em = ((EditMeshDerivedMesh *)dm)->em;
EditEdge *ee = em->edges.first;
@@ -984,7 +1122,7 @@ void emDM_getEdge(DerivedMesh *dm, int index, MEdge *edge_r)
}
}
-void emDM_getFace(DerivedMesh *dm, int index, MFace *face_r)
+static void emDM_getFace(DerivedMesh *dm, int index, MFace *face_r)
{
EditMesh *em = ((EditMeshDerivedMesh *)dm)->em;
EditFace *ef = em->faces.first;
@@ -1026,7 +1164,7 @@ void emDM_getFace(DerivedMesh *dm, int index, MFace *face_r)
test_index_face(face_r, NULL, 0, ef->v4?4:3);
}
-void emDM_copyVertArray(DerivedMesh *dm, MVert *vert_r)
+static void emDM_copyVertArray(DerivedMesh *dm, MVert *vert_r)
{
EditVert *ev = ((EditMeshDerivedMesh *)dm)->em->verts.first;
@@ -1044,7 +1182,7 @@ void emDM_copyVertArray(DerivedMesh *dm, MVert *vert_r)
}
}
-void emDM_copyEdgeArray(DerivedMesh *dm, MEdge *edge_r)
+static void emDM_copyEdgeArray(DerivedMesh *dm, MEdge *edge_r)
{
EditMesh *em = ((EditMeshDerivedMesh *)dm)->em;
EditEdge *ee = em->edges.first;
@@ -1053,7 +1191,7 @@ void emDM_copyEdgeArray(DerivedMesh *dm, MEdge *edge_r)
/* store vertex indices in tmp union */
for(ev = em->verts.first, i = 0; ev; ev = ev->next, ++i)
- ev->tmp.l = (long) i;
+ ev->tmp.l = (intptr_t) i;
for( ; ee; ee = ee->next, ++edge_r) {
edge_r->crease = (unsigned char) (ee->crease*255.0f);
@@ -1072,7 +1210,7 @@ void emDM_copyEdgeArray(DerivedMesh *dm, MEdge *edge_r)
}
}
-void emDM_copyFaceArray(DerivedMesh *dm, MFace *face_r)
+static void emDM_copyFaceArray(DerivedMesh *dm, MFace *face_r)
{
EditMesh *em = ((EditMeshDerivedMesh *)dm)->em;
EditFace *ef = em->faces.first;
@@ -1081,7 +1219,7 @@ void emDM_copyFaceArray(DerivedMesh *dm, MFace *face_r)
/* store vertexes indices in tmp union */
for(ev = em->verts.first, i = 0; ev; ev = ev->next, ++i)
- ev->tmp.l = (long) i;
+ ev->tmp.l = (intptr_t) i;
for( ; ef; ef = ef->next, ++face_r) {
face_r->mat_nr = ef->mat_nr;
@@ -1097,6 +1235,43 @@ void emDM_copyFaceArray(DerivedMesh *dm, MFace *face_r)
}
}
+static void *emDM_getFaceDataArray(DerivedMesh *dm, int type)
+{
+ EditMeshDerivedMesh *emdm= (EditMeshDerivedMesh*) dm;
+ EditMesh *em= emdm->em;
+ EditFace *efa;
+ char *data, *emdata;
+ void *datalayer;
+ int index, offset, size;
+
+ datalayer = DM_get_face_data_layer(dm, type);
+ if(datalayer)
+ return datalayer;
+
+ /* layers are store per face for editmesh, we convert to a temporary
+ * data layer array in the derivedmesh when these are requested */
+ if(type == CD_MTFACE || type == CD_MCOL) {
+ index = CustomData_get_layer_index(&em->fdata, type);
+
+ if(index != -1) {
+ offset = em->fdata.layers[index].offset;
+ size = CustomData_sizeof(type);
+
+ DM_add_face_layer(dm, type, CD_CALLOC, NULL);
+ index = CustomData_get_layer_index(&dm->faceData, type);
+ dm->faceData.layers[index].flag |= CD_FLAG_TEMPORARY;
+
+ data = datalayer = DM_get_face_data_layer(dm, type);
+ for(efa=em->faces.first; efa; efa=efa->next, data+=size) {
+ emdata = CustomData_em_get(&em->fdata, efa->data, type);
+ memcpy(data, emdata, size);
+ }
+ }
+ }
+
+ return datalayer;
+}
+
static void emDM_release(DerivedMesh *dm)
{
EditMeshDerivedMesh *emdm= (EditMeshDerivedMesh*) dm;
@@ -1132,6 +1307,7 @@ static DerivedMesh *getEditMeshDerivedMesh(EditMesh *em, Object *ob,
emdm->dm.copyVertArray = emDM_copyVertArray;
emdm->dm.copyEdgeArray = emDM_copyEdgeArray;
emdm->dm.copyFaceArray = emDM_copyFaceArray;
+ emdm->dm.getFaceDataArray = emDM_getFaceDataArray;
emdm->dm.foreachMappedVert = emDM_foreachMappedVert;
emdm->dm.foreachMappedEdge = emDM_foreachMappedEdge;
@@ -1142,7 +1318,9 @@ static DerivedMesh *getEditMeshDerivedMesh(EditMesh *em, Object *ob,
emdm->dm.drawMappedEdgesInterp = emDM_drawMappedEdgesInterp;
emdm->dm.drawMappedFaces = emDM_drawMappedFaces;
emdm->dm.drawMappedFacesTex = emDM_drawMappedFacesTex;
+ emdm->dm.drawMappedFacesGLSL = emDM_drawMappedFacesGLSL;
emdm->dm.drawFacesTex = emDM_drawFacesTex;
+ emdm->dm.drawFacesGLSL = emDM_drawFacesGLSL;
emdm->dm.drawUVEdges = emDM_drawUVEdges;
emdm->dm.release = emDM_release;
@@ -1168,7 +1346,7 @@ static DerivedMesh *getEditMeshDerivedMesh(EditMesh *em, Object *ob,
int i;
for (i=0,eve=em->verts.first; eve; eve= eve->next)
- eve->tmp.l = (long) i++;
+ eve->tmp.l = (intptr_t) i++;
emdm->vertexNos = MEM_callocN(sizeof(*emdm->vertexNos)*i, "emdm_vno");
emdm->faceNos = MEM_mallocN(sizeof(*emdm->faceNos)*totface, "emdm_vno");
@@ -1572,7 +1750,7 @@ static void vDM_drawUVEdges(DerivedMesh *dm)
}
/* draw all VerseFaces */
-static void vDM_drawFacesSolid(DerivedMesh *dm, int (*setMaterial)(int))
+static void vDM_drawFacesSolid(DerivedMesh *dm, int (*setMaterial)(int, void *attribs))
{
VDerivedMesh *vdm = (VDerivedMesh*)dm;
struct VerseFace *vface;
@@ -1672,6 +1850,8 @@ static void vDM_drawMappedFacesTex(
int (*setDrawParams)(void *userData, int index),
void *userData)
{
+ /* not supported yet */
+ vDM_drawFacesTex(dm, NULL);
}
/**/
@@ -1813,19 +1993,23 @@ CustomDataMask get_viewedit_datamask()
ScrArea *sa;
/* check if we need tfaces & mcols due to face select or texture paint */
- if(FACESEL_PAINT_TEST || G.f & G_TEXTUREPAINT) {
+ if(FACESEL_PAINT_TEST || G.f & G_TEXTUREPAINT)
mask |= CD_MASK_MTFACE | CD_MASK_MCOL;
- } else {
- /* check if we need tfaces & mcols due to view mode */
- for(sa = G.curscreen->areabase.first; sa; sa = sa->next) {
- if(sa->spacetype == SPACE_VIEW3D) {
- View3D *view = sa->spacedata.first;
- if(view->drawtype == OB_SHADED) {
- /* this includes normals for mesh_create_shadedColors */
- mask |= CD_MASK_MTFACE | CD_MASK_MCOL | CD_MASK_NORMAL | CD_MASK_ORCO;
- }
- if((view->drawtype == OB_TEXTURE) || ((view->drawtype == OB_SOLID) && (view->flag2 & V3D_SOLID_TEX))) {
- mask |= CD_MASK_MTFACE | CD_MASK_MCOL;
+
+ /* check if we need tfaces & mcols due to view mode */
+ for(sa = G.curscreen->areabase.first; sa; sa = sa->next) {
+ if(sa->spacetype == SPACE_VIEW3D) {
+ View3D *view = sa->spacedata.first;
+ if(view->drawtype == OB_SHADED) {
+ /* this includes normals for mesh_create_shadedColors */
+ mask |= CD_MASK_MTFACE | CD_MASK_MCOL | CD_MASK_NORMAL | CD_MASK_ORCO;
+ }
+ if((view->drawtype == OB_TEXTURE) || ((view->drawtype == OB_SOLID) && (view->flag2 & V3D_SOLID_TEX))) {
+ mask |= CD_MASK_MTFACE | CD_MASK_MCOL;
+
+ if((G.fileflags & G_FILE_GAME_MAT) &&
+ (G.fileflags & G_FILE_GAME_MAT_GLSL)) {
+ mask |= CD_MASK_ORCO;
}
}
}
@@ -1838,13 +2022,41 @@ CustomDataMask get_viewedit_datamask()
return mask;
}
-static DerivedMesh *create_orco_dm(Object *ob, Mesh *me)
+static float *get_editmesh_orco_verts(EditMesh *em)
+{
+ EditVert *eve;
+ float *orco;
+ int a, totvert;
+
+ /* these may not really be the orco's, but it's only for preview.
+ * could be solver better once, but isn't simple */
+
+ totvert= 0;
+ for(eve=em->verts.first; eve; eve=eve->next)
+ totvert++;
+
+ orco = MEM_mallocN(sizeof(float)*3*totvert, "EditMesh Orco");
+
+ for(a=0, eve=em->verts.first; eve; eve=eve->next, a+=3)
+ VECCOPY(orco+a, eve->co);
+
+ return orco;
+}
+
+static DerivedMesh *create_orco_dm(Object *ob, Mesh *me, EditMesh *em)
{
DerivedMesh *dm;
float (*orco)[3];
- dm= CDDM_from_mesh(me, ob);
- orco= (float(*)[3])get_mesh_orco_verts(ob);
+ if(em) {
+ dm= CDDM_from_editmesh(em, me);
+ orco= (float(*)[3])get_editmesh_orco_verts(em);
+ }
+ else {
+ dm= CDDM_from_mesh(me, ob);
+ orco= (float(*)[3])get_mesh_orco_verts(ob);
+ }
+
CDDM_apply_vert_coords(dm, orco);
CDDM_calc_normals(dm);
MEM_freeN(orco);
@@ -1852,7 +2064,7 @@ static DerivedMesh *create_orco_dm(Object *ob, Mesh *me)
return dm;
}
-static void add_orco_dm(Object *ob, DerivedMesh *dm, DerivedMesh *orcodm)
+static void add_orco_dm(Object *ob, EditMesh *em, DerivedMesh *dm, DerivedMesh *orcodm)
{
float (*orco)[3], (*layerorco)[3];
int totvert;
@@ -1867,8 +2079,10 @@ static void add_orco_dm(Object *ob, DerivedMesh *dm, DerivedMesh *orcodm)
else
dm->getVertCos(dm, orco);
}
- else
- orco= (float(*)[3])get_mesh_orco_verts(ob);
+ else {
+ if(em) orco= (float(*)[3])get_editmesh_orco_verts(em);
+ else orco= (float(*)[3])get_mesh_orco_verts(ob);
+ }
transform_mesh_orco_verts(ob->data, orco, totvert, 0);
@@ -1883,7 +2097,7 @@ static void add_orco_dm(Object *ob, DerivedMesh *dm, DerivedMesh *orcodm)
static void mesh_calc_modifiers(Object *ob, float (*inputVertexCos)[3],
DerivedMesh **deform_r, DerivedMesh **final_r,
int useRenderParams, int useDeform,
- int needMapping, CustomDataMask dataMask)
+ int needMapping, CustomDataMask dataMask, int index)
{
Mesh *me = ob->data;
ModifierData *firstmd, *md;
@@ -1892,7 +2106,6 @@ static void mesh_calc_modifiers(Object *ob, float (*inputVertexCos)[3],
float (*deformedVerts)[3] = NULL;
DerivedMesh *dm, *orcodm, *finaldm;
int numVerts = me->totvert;
- int fluidsimMeshUsed = 0;
int required_mode;
md = firstmd = modifiers_getVirtualModifierList(ob);
@@ -1908,21 +2121,6 @@ static void mesh_calc_modifiers(Object *ob, float (*inputVertexCos)[3],
if(deform_r) *deform_r = NULL;
*final_r = NULL;
- /* replace original mesh by fluidsim surface mesh for fluidsim
- * domain objects
- */
- if((G.obedit!=ob) && !needMapping) {
- if((ob->fluidsimFlag & OB_FLUIDSIM_ENABLE)) {
- if(ob->fluidsimSettings->type & OB_FLUIDSIM_DOMAIN) {
- loadFluidsimMesh(ob,useRenderParams);
- fluidsimMeshUsed = 1;
- /* might have changed... */
- me = ob->data;
- numVerts = me->totvert;
- }
- }
- }
-
if(useRenderParams) required_mode = eModifierMode_Render;
else required_mode = eModifierMode_Realtime;
@@ -1931,7 +2129,7 @@ static void mesh_calc_modifiers(Object *ob, float (*inputVertexCos)[3],
deformedVerts = mesh_getVertexCos(me, &numVerts);
/* Apply all leading deforming modifiers */
- for(; md; md = md->next, curr = curr->next) {
+ for(;md; md = md->next, curr = curr->next) {
ModifierTypeInfo *mti = modifierType_getInfo(md->type);
if((md->mode & required_mode) != required_mode) continue;
@@ -1945,6 +2143,10 @@ static void mesh_calc_modifiers(Object *ob, float (*inputVertexCos)[3],
} else {
break;
}
+
+ /* grab modifiers until index i */
+ if((index >= 0) && (modifiers_indexInObject(ob, md) >= index))
+ break;
}
/* Result of all leading deforming modifiers is cached for
@@ -1970,18 +2172,11 @@ static void mesh_calc_modifiers(Object *ob, float (*inputVertexCos)[3],
#endif
}
} else {
- if(!fluidsimMeshUsed) {
- /* default behaviour for meshes */
- if(inputVertexCos)
- deformedVerts = inputVertexCos;
- else
- deformedVerts = mesh_getRefKeyCos(me, &numVerts);
- } else {
- /* the fluid sim mesh might have more vertices than the original
- * one, so inputVertexCos shouldnt be used
- */
- deformedVerts = mesh_getVertexCos(me, &numVerts);
- }
+ /* default behaviour for meshes */
+ if(inputVertexCos)
+ deformedVerts = inputVertexCos;
+ else
+ deformedVerts = mesh_getRefKeyCos(me, &numVerts);
}
@@ -1998,7 +2193,7 @@ static void mesh_calc_modifiers(Object *ob, float (*inputVertexCos)[3],
if(me->vnode) dm = derivedmesh_from_versemesh(me->vnode, deformedVerts);
#endif
- for(; md; md = md->next, curr = curr->next) {
+ for(;md; md = md->next, curr = curr->next) {
ModifierTypeInfo *mti = modifierType_getInfo(md->type);
if((md->mode & required_mode) != required_mode) continue;
@@ -2014,7 +2209,7 @@ static void mesh_calc_modifiers(Object *ob, float (*inputVertexCos)[3],
if(dm && mti->requiredDataMask) {
mask = mti->requiredDataMask(md);
if(mask & CD_MASK_ORCO)
- add_orco_dm(ob, dm, orcodm);
+ add_orco_dm(ob, NULL, dm, orcodm);
}
/* How to apply modifier depends on (a) what we already have as
@@ -2067,7 +2262,7 @@ static void mesh_calc_modifiers(Object *ob, float (*inputVertexCos)[3],
mask= (CustomDataMask)curr->link;
if(mask & CD_MASK_ORCO) {
if(!orcodm)
- orcodm= create_orco_dm(ob, me);
+ orcodm= create_orco_dm(ob, me, NULL);
mask &= ~CD_MASK_ORCO;
DM_set_only_copy(orcodm, mask);
@@ -2104,6 +2299,10 @@ static void mesh_calc_modifiers(Object *ob, float (*inputVertexCos)[3],
}
}
}
+
+ /* grab modifiers until index i */
+ if((index >= 0) && (modifiers_indexInObject(ob, md) >= index))
+ break;
}
for(md=firstmd; md; md=md->next)
@@ -2144,10 +2343,10 @@ static void mesh_calc_modifiers(Object *ob, float (*inputVertexCos)[3],
/* add an orco layer if needed */
if(dataMask & CD_MASK_ORCO) {
- add_orco_dm(ob, finaldm, orcodm);
+ add_orco_dm(ob, NULL, finaldm, orcodm);
if(deform_r && *deform_r)
- add_orco_dm(ob, *deform_r, NULL);
+ add_orco_dm(ob, NULL, *deform_r, NULL);
}
*final_r = finaldm;
@@ -2159,9 +2358,6 @@ static void mesh_calc_modifiers(Object *ob, float (*inputVertexCos)[3],
MEM_freeN(deformedVerts);
BLI_linklist_free(datamasks, NULL);
-
- /* restore mesh in any case */
- if(fluidsimMeshUsed) ob->data = ob->fluidsimSettings->orgMesh;
}
static float (*editmesh_getVertexCos(EditMesh *em, int *numVerts_r))[3]
@@ -2203,7 +2399,8 @@ static void editmesh_calc_modifiers(DerivedMesh **cage_r,
EditMesh *em = G.editMesh;
ModifierData *md;
float (*deformedVerts)[3] = NULL;
- DerivedMesh *dm;
+ CustomDataMask mask;
+ DerivedMesh *dm, *orcodm = NULL;
int i, numVerts = 0, cageIndex = modifiers_getCageIndex(ob, NULL);
LinkNode *datamasks, *curr;
@@ -2228,6 +2425,13 @@ static void editmesh_calc_modifiers(DerivedMesh **cage_r,
if(!editmesh_modifier_is_enabled(md, dm))
continue;
+ /* add an orco layer if needed by this modifier */
+ if(dm && mti->requiredDataMask) {
+ mask = mti->requiredDataMask(md);
+ if(mask & CD_MASK_ORCO)
+ add_orco_dm(ob, em, dm, orcodm);
+ }
+
/* How to apply modifier depends on (a) what we already have as
* a result of previous modifiers (could be a DerivedMesh or just
* deformed vertices) and (b) what type the modifier is.
@@ -2278,6 +2482,23 @@ static void editmesh_calc_modifiers(DerivedMesh **cage_r,
}
}
+ /* create an orco derivedmesh in parallel */
+ mask= (CustomDataMask)curr->link;
+ if(mask & CD_MASK_ORCO) {
+ if(!orcodm)
+ orcodm= create_orco_dm(ob, ob->data, em);
+
+ mask &= ~CD_MASK_ORCO;
+ DM_set_only_copy(orcodm, mask);
+ ndm = mti->applyModifierEM(md, ob, em, orcodm);
+
+ if(ndm) {
+ /* if the modifier returned a new dm, release the old one */
+ if(orcodm && orcodm != ndm) orcodm->release(orcodm);
+ orcodm = ndm;
+ }
+ }
+
/* set the DerivedMesh to only copy needed data */
DM_set_only_copy(dm, (CustomDataMask)curr->link);
@@ -2336,6 +2557,13 @@ static void editmesh_calc_modifiers(DerivedMesh **cage_r,
deformedVerts = NULL;
}
+ /* add an orco layer if needed */
+ if(dataMask & CD_MASK_ORCO)
+ add_orco_dm(ob, em, *final_r, orcodm);
+
+ if(orcodm)
+ orcodm->release(orcodm);
+
if(deformedVerts)
MEM_freeN(deformedVerts);
}
@@ -2481,13 +2709,13 @@ static void mesh_build_data(Object *ob, CustomDataMask dataMask)
mesh_calc_modifiers(ob, NULL, &ob->derivedDeform,
&ob->derivedFinal, 0, 1,
- needMapping, dataMask);
+ needMapping, dataMask, -1);
CustomData_free_layer_active(&me->fdata, CD_MCOL, me->totface);
} else {
mesh_calc_modifiers(ob, NULL, &ob->derivedDeform,
&ob->derivedFinal, G.rendering, 1,
- needMapping, dataMask);
+ needMapping, dataMask, -1);
}
INIT_MINMAX(min, max);
@@ -2630,7 +2858,7 @@ void multires_render_final(Object *ob, Mesh *me, DerivedMesh **dm, float *vert_c
old->release(old);
if(dataMask & CD_MASK_ORCO)
- add_orco_dm(ob, *dm, NULL);
+ add_orco_dm(ob, NULL, *dm, NULL);
/* Restore the original verts */
me->mr->newlvl= BLI_countlist(&me->mr->levels);
@@ -2658,7 +2886,21 @@ DerivedMesh *mesh_create_derived_render(Object *ob, CustomDataMask dataMask)
int orig_lvl= 0;
vert_copy= multires_render_pin(ob, me, &orig_lvl);
- mesh_calc_modifiers(ob, NULL, NULL, &final, 1, 1, 0, dataMask);
+ mesh_calc_modifiers(ob, NULL, NULL, &final, 1, 1, 0, dataMask, -1);
+ multires_render_final(ob, me, &final, vert_copy, orig_lvl, dataMask);
+
+ return final;
+}
+
+DerivedMesh *mesh_create_derived_index_render(Object *ob, CustomDataMask dataMask, int index)
+{
+ DerivedMesh *final;
+ Mesh *me= get_mesh(ob);
+ float *vert_copy= NULL;
+ int orig_lvl= 0;
+
+ vert_copy= multires_render_pin(ob, me, &orig_lvl);
+ mesh_calc_modifiers(ob, NULL, NULL, &final, 1, 1, 0, dataMask, index);
multires_render_final(ob, me, &final, vert_copy, orig_lvl, dataMask);
return final;
@@ -2668,7 +2910,7 @@ DerivedMesh *mesh_create_derived_view(Object *ob, CustomDataMask dataMask)
{
DerivedMesh *final;
- mesh_calc_modifiers(ob, NULL, NULL, &final, 0, 1, 0, dataMask);
+ mesh_calc_modifiers(ob, NULL, NULL, &final, 0, 1, 0, dataMask, -1);
return final;
}
@@ -2678,7 +2920,7 @@ DerivedMesh *mesh_create_derived_no_deform(Object *ob, float (*vertCos)[3],
{
DerivedMesh *final;
- mesh_calc_modifiers(ob, vertCos, NULL, &final, 0, 0, 0, dataMask);
+ mesh_calc_modifiers(ob, vertCos, NULL, &final, 0, 0, 0, dataMask, -1);
return final;
}
@@ -2693,7 +2935,7 @@ DerivedMesh *mesh_create_derived_no_deform_render(Object *ob,
int orig_lvl= 0;
vert_copy= multires_render_pin(ob, me, &orig_lvl);
- mesh_calc_modifiers(ob, vertCos, NULL, &final, 1, 0, 0, dataMask);
+ mesh_calc_modifiers(ob, vertCos, NULL, &final, 1, 0, 0, dataMask, -1);
multires_render_final(ob, me, &final, vert_copy, orig_lvl, dataMask);
return final;
@@ -2845,6 +3087,8 @@ int editmesh_get_first_deform_matrices(float (**deformmats)[3][3], float (**defo
return numleft;
}
+/* ******************* GLSL ******************** */
+
void DM_add_tangent_layer(DerivedMesh *dm)
{
/* mesh vars */
@@ -2965,583 +3209,89 @@ void DM_add_tangent_layer(DerivedMesh *dm)
MEM_freeN(vtangents);
}
-
-/* ************************* fluidsim bobj file handling **************************** */
-
-#ifndef DISABLE_ELBEEM
-
-#ifdef WIN32
-#ifndef snprintf
-#define snprintf _snprintf
-#endif
-#endif
-
-/* write .bobj.gz file for a mesh object */
-void writeBobjgz(char *filename, struct Object *ob, int useGlobalCoords, int append, float time)
+void DM_vertex_attributes_from_gpu(DerivedMesh *dm, GPUVertexAttribs *gattribs, DMVertexAttribs *attribs)
{
- char debugStrBuffer[256];
- int wri,i,j,totvert,totface;
- float wrf;
- gzFile gzf;
- DerivedMesh *dm;
- float vec[3];
- float rotmat[3][3];
- MVert *mvert;
- MFace *mface;
- //if(append)return; // DEBUG
-
- if(!ob->data || (ob->type!=OB_MESH)) {
- snprintf(debugStrBuffer,256,"Writing GZ_BOBJ Invalid object %s ...\n", ob->id.name);
- elbeemDebugOut(debugStrBuffer);
- return;
- }
- if((ob->size[0]<0.0) || (ob->size[0]<0.0) || (ob->size[0]<0.0) ) {
- snprintf(debugStrBuffer,256,"\nfluidSim::writeBobjgz:: Warning object %s has negative scaling - check triangle ordering...?\n\n", ob->id.name);
- elbeemDebugOut(debugStrBuffer);
- }
+ CustomData *vdata, *fdata, *tfdata = NULL;
+ int a, b, layer;
- snprintf(debugStrBuffer,256,"Writing GZ_BOBJ '%s' ... ",filename); elbeemDebugOut(debugStrBuffer);
- if(append) gzf = gzopen(filename, "a+b9");
- else gzf = gzopen(filename, "wb9");
- if (!gzf) {
- snprintf(debugStrBuffer,256,"writeBobjgz::error - Unable to open file for writing '%s'\n", filename);
- elbeemDebugOut(debugStrBuffer);
- return;
- }
-
- dm = mesh_create_derived_render(ob, CD_MASK_BAREMESH);
- //dm = mesh_create_derived_no_deform(ob,NULL);
-
- mvert = dm->getVertArray(dm);
- mface = dm->getFaceArray(dm);
- totvert = dm->getNumVerts(dm);
- totface = dm->getNumFaces(dm);
-
- // write time value for appended anim mesh
- if(append) {
- gzwrite(gzf, &time, sizeof(time));
- }
-
- // continue with verts/norms
- if(sizeof(wri)!=4) { snprintf(debugStrBuffer,256,"Writing GZ_BOBJ, Invalid int size %d...\n", wri); elbeemDebugOut(debugStrBuffer); return; } // paranoia check
- wri = dm->getNumVerts(dm);
- mvert = dm->getVertArray(dm);
- gzwrite(gzf, &wri, sizeof(wri));
- for(i=0; i<wri;i++) {
- VECCOPY(vec, mvert[i].co);
- if(useGlobalCoords) { Mat4MulVecfl(ob->obmat, vec); }
- for(j=0; j<3; j++) {
- wrf = vec[j];
- gzwrite(gzf, &wrf, sizeof( wrf ));
- }
- }
+ /* From the layers requested by the GLSL shader, figure out which ones are
+ * actually available for this derivedmesh, and retrieve the pointers */
- // should be the same as Vertices.size
- wri = totvert;
- gzwrite(gzf, &wri, sizeof(wri));
- EulToMat3(ob->rot, rotmat);
- for(i=0; i<wri;i++) {
- VECCOPY(vec, mvert[i].no);
- Normalize(vec);
- if(useGlobalCoords) { Mat3MulVecfl(rotmat, vec); }
- for(j=0; j<3; j++) {
- wrf = vec[j];
- gzwrite(gzf, &wrf, sizeof( wrf ));
- }
- }
+ memset(attribs, 0, sizeof(DMVertexAttribs));
- // append only writes verts&norms
- if(!append) {
- //float side1[3],side2[3],norm1[3],norm2[3];
- //float inpf;
-
- // compute no. of triangles
- wri = 0;
- for(i=0; i<totface; i++) {
- wri++;
- if(mface[i].v4) { wri++; }
- }
- gzwrite(gzf, &wri, sizeof(wri));
- for(i=0; i<totface; i++) {
-
- int face[4];
- face[0] = mface[i].v1;
- face[1] = mface[i].v2;
- face[2] = mface[i].v3;
- face[3] = mface[i].v4;
- //snprintf(debugStrBuffer,256,"F %s %d = %d,%d,%d,%d \n",ob->id.name, i, face[0],face[1],face[2],face[3] ); elbeemDebugOut(debugStrBuffer);
- //VecSubf(side1, mvert[face[1]].co,mvert[face[0]].co);
- //VecSubf(side2, mvert[face[2]].co,mvert[face[0]].co);
- //Crossf(norm1,side1,side2);
- gzwrite(gzf, &(face[0]), sizeof( face[0] ));
- gzwrite(gzf, &(face[1]), sizeof( face[1] ));
- gzwrite(gzf, &(face[2]), sizeof( face[2] ));
- if(face[3]) {
- //VecSubf(side1, mvert[face[2]].co,mvert[face[0]].co);
- //VecSubf(side2, mvert[face[3]].co,mvert[face[0]].co);
- //Crossf(norm2,side1,side2);
- //inpf = Inpf(norm1,norm2);
- //if(inpf>0.) {
- gzwrite(gzf, &(face[0]), sizeof( face[0] ));
- gzwrite(gzf, &(face[2]), sizeof( face[2] ));
- gzwrite(gzf, &(face[3]), sizeof( face[3] ));
- //} else {
- //gzwrite(gzf, &(face[0]), sizeof( face[0] ));
- //gzwrite(gzf, &(face[3]), sizeof( face[3] ));
- //gzwrite(gzf, &(face[2]), sizeof( face[2] ));
- //}
- } // quad
- }
- }
+ vdata = &dm->vertData;
+ fdata = &dm->faceData;
- snprintf(debugStrBuffer,256,"Done. #Vertices: %d, #Triangles: %d\n", totvert, totface );
- elbeemDebugOut(debugStrBuffer);
-
- gzclose( gzf );
- dm->release(dm);
-}
-
-void initElbeemMesh(struct Object *ob,
- int *numVertices, float **vertices,
- int *numTriangles, int **triangles,
- int useGlobalCoords)
-{
- DerivedMesh *dm = NULL;
- MVert *mvert;
- MFace *mface;
- int countTris=0, i, totvert, totface;
- float *verts;
- int *tris;
-
- dm = mesh_create_derived_render(ob, CD_MASK_BAREMESH);
- //dm = mesh_create_derived_no_deform(ob,NULL);
-
- mvert = dm->getVertArray(dm);
- mface = dm->getFaceArray(dm);
- totvert = dm->getNumVerts(dm);
- totface = dm->getNumFaces(dm);
-
- *numVertices = totvert;
- verts = MEM_callocN( totvert*3*sizeof(float), "elbeemmesh_vertices");
- for(i=0; i<totvert; i++) {
- VECCOPY( &verts[i*3], mvert[i].co);
- if(useGlobalCoords) { Mat4MulVecfl(ob->obmat, &verts[i*3]); }
- }
- *vertices = verts;
-
- for(i=0; i<totface; i++) {
- countTris++;
- if(mface[i].v4) { countTris++; }
- }
- *numTriangles = countTris;
- tris = MEM_callocN( countTris*3*sizeof(int), "elbeemmesh_triangles");
- countTris = 0;
- for(i=0; i<totface; i++) {
- int face[4];
- face[0] = mface[i].v1;
- face[1] = mface[i].v2;
- face[2] = mface[i].v3;
- face[3] = mface[i].v4;
-
- tris[countTris*3+0] = face[0];
- tris[countTris*3+1] = face[1];
- tris[countTris*3+2] = face[2];
- countTris++;
- if(face[3]) {
- tris[countTris*3+0] = face[0];
- tris[countTris*3+1] = face[2];
- tris[countTris*3+2] = face[3];
- countTris++;
- }
- }
- *triangles = tris;
-
- dm->release(dm);
-}
+ /* ugly hack, editmesh derivedmesh doesn't copy face data, this way we
+ * can use offsets instead */
+ if(dm->release == emDM_release)
+ tfdata = &((EditMeshDerivedMesh*)dm)->em->fdata;
+ else
+ tfdata = fdata;
+
+ /* add a tangent layer if necessary */
+ for(b = 0; b < gattribs->totlayer; b++)
+ if(gattribs->layer[b].type == CD_TANGENT)
+ if(CustomData_get_layer_index(fdata, CD_TANGENT) == -1)
+ DM_add_tangent_layer(dm);
+
+ for(b = 0; b < gattribs->totlayer; b++) {
+ if(gattribs->layer[b].type == CD_MTFACE) {
+ /* uv coordinates */
+ if(gattribs->layer[b].name[0])
+ layer = CustomData_get_named_layer_index(tfdata, CD_MTFACE,
+ gattribs->layer[b].name);
+ else
+ layer = CustomData_get_active_layer_index(tfdata, CD_MTFACE);
-/* read .bobj.gz file into a fluidsimDerivedMesh struct */
-Mesh* readBobjgz(char *filename, Mesh *orgmesh, float* bbstart, float *bbsize) //, fluidsimDerivedMesh *fsdm)
-{
- int wri,i,j;
- char debugStrBuffer[256];
- float wrf;
- Mesh *newmesh;
- const int debugBobjRead = 1;
- // init data from old mesh (materials,flags)
- MFace *origMFace = &((MFace*) orgmesh->mface)[0];
- int mat_nr = -1;
- int flag = -1;
- MFace *fsface = NULL;
- int gotBytes;
- gzFile gzf;
-
- if(!orgmesh) return NULL;
- if(!origMFace) return NULL;
- mat_nr = origMFace->mat_nr;
- flag = origMFace->flag;
-
- // similar to copy_mesh
- newmesh = MEM_dupallocN(orgmesh);
- newmesh->mat= orgmesh->mat;
-
- newmesh->mvert= NULL;
- newmesh->medge= NULL;
- newmesh->mface= NULL;
- newmesh->mtface= NULL;
-
- newmesh->dvert = NULL;
-
- newmesh->mcol= NULL;
- newmesh->msticky= NULL;
- newmesh->texcomesh= NULL;
- memset(&newmesh->vdata, 0, sizeof(newmesh->vdata));
- memset(&newmesh->edata, 0, sizeof(newmesh->edata));
- memset(&newmesh->fdata, 0, sizeof(newmesh->fdata));
-
- newmesh->key= NULL;
- newmesh->totface = 0;
- newmesh->totvert = 0;
- newmesh->totedge = 0;
- newmesh->medge = NULL;
-
-
- snprintf(debugStrBuffer,256,"Reading '%s' GZ_BOBJ... ",filename); elbeemDebugOut(debugStrBuffer);
- gzf = gzopen(filename, "rb");
- // gzf = fopen(filename, "rb");
- // debug: fread(b,c,1,a) = gzread(a,b,c)
- if (!gzf) {
- //snprintf(debugStrBuffer,256,"readBobjgz::error - Unable to open file for reading '%s'\n", filename); // DEBUG
- MEM_freeN(newmesh);
- return NULL;
- }
+ if(layer != -1) {
+ a = attribs->tottface++;
- //if(sizeof(wri)!=4) { snprintf(debugStrBuffer,256,"Reading GZ_BOBJ, Invalid int size %d...\n", wri); return NULL; } // paranoia check
- gotBytes = gzread(gzf, &wri, sizeof(wri));
- newmesh->totvert = wri;
- newmesh->mvert = CustomData_add_layer(&newmesh->vdata, CD_MVERT, CD_CALLOC, NULL, newmesh->totvert);
- if(debugBobjRead){ snprintf(debugStrBuffer,256,"#vertices %d ", newmesh->totvert); elbeemDebugOut(debugStrBuffer); } //DEBUG
- for(i=0; i<newmesh->totvert;i++) {
- //if(debugBobjRead) snprintf(debugStrBuffer,256,"V %d = ",i);
- for(j=0; j<3; j++) {
- gotBytes = gzread(gzf, &wrf, sizeof( wrf ));
- newmesh->mvert[i].co[j] = wrf;
- //if(debugBobjRead) snprintf(debugStrBuffer,256,"%25.20f ", wrf);
+ attribs->tface[a].array = tfdata->layers[layer].data;
+ attribs->tface[a].emOffset = tfdata->layers[layer].offset;
+ attribs->tface[a].glIndex = gattribs->layer[b].glindex;
+ }
}
- //if(debugBobjRead) snprintf(debugStrBuffer,256,"\n");
- }
+ else if(gattribs->layer[b].type == CD_MCOL) {
+ /* vertex colors */
+ if(gattribs->layer[b].name[0])
+ layer = CustomData_get_named_layer_index(tfdata, CD_MCOL,
+ gattribs->layer[b].name);
+ else
+ layer = CustomData_get_active_layer_index(tfdata, CD_MCOL);
- // should be the same as Vertices.size
- gotBytes = gzread(gzf, &wri, sizeof(wri));
- if(wri != newmesh->totvert) {
- // complain #vertices has to be equal to #normals, reset&abort
- CustomData_free_layer_active(&newmesh->vdata, CD_MVERT, newmesh->totvert);
- MEM_freeN(newmesh);
- snprintf(debugStrBuffer,256,"Reading GZ_BOBJ, #normals=%d, #vertices=%d, aborting...\n", wri,newmesh->totvert );
- return NULL;
- }
- for(i=0; i<newmesh->totvert;i++) {
- for(j=0; j<3; j++) {
- gotBytes = gzread(gzf, &wrf, sizeof( wrf ));
- newmesh->mvert[i].no[j] = (short)(wrf*32767.0f);
- //newmesh->mvert[i].no[j] = 0.5; // DEBUG tst
- }
- //fprintf(stderr," DEBDPCN nm%d, %d = %d,%d,%d \n",
- //(int)(newmesh->mvert), i, newmesh->mvert[i].no[0], newmesh->mvert[i].no[1], newmesh->mvert[i].no[2]);
- }
- //fprintf(stderr," DPCN 0 = %d,%d,%d \n", newmesh->mvert[0].no[0], newmesh->mvert[0].no[1], newmesh->mvert[0].no[2]);
+ if(layer != -1) {
+ a = attribs->totmcol++;
-
- /* compute no. of triangles */
- gotBytes = gzread(gzf, &wri, sizeof(wri));
- newmesh->totface = wri;
- newmesh->mface = CustomData_add_layer(&newmesh->fdata, CD_MFACE, CD_CALLOC, NULL, newmesh->totface);
- if(debugBobjRead){ snprintf(debugStrBuffer,256,"#faces %d ", newmesh->totface); elbeemDebugOut(debugStrBuffer); } //DEBUG
- fsface = newmesh->mface;
- for(i=0; i<newmesh->totface; i++) {
- int face[4];
-
- gotBytes = gzread(gzf, &(face[0]), sizeof( face[0] ));
- gotBytes = gzread(gzf, &(face[1]), sizeof( face[1] ));
- gotBytes = gzread(gzf, &(face[2]), sizeof( face[2] ));
- face[3] = 0;
-
- fsface[i].v1 = face[0];
- fsface[i].v2 = face[1];
- fsface[i].v3 = face[2];
- fsface[i].v4 = face[3];
- }
-
- // correct triangles with v3==0 for blender, cycle verts
- for(i=0; i<newmesh->totface; i++) {
- if(!fsface[i].v3) {
- int temp = fsface[i].v1;
- fsface[i].v1 = fsface[i].v2;
- fsface[i].v2 = fsface[i].v3;
- fsface[i].v3 = temp;
- }
- }
-
- gzclose( gzf );
- for(i=0;i<newmesh->totface;i++) {
- fsface[i].mat_nr = mat_nr;
- fsface[i].flag = flag;
- fsface[i].edcode = ME_V1V2 | ME_V2V3 | ME_V3V1;
- //snprintf(debugStrBuffer,256,"%d : %d,%d,%d\n", i,fsface[i].mat_nr, fsface[i].flag, fsface[i].edcode );
- }
-
- snprintf(debugStrBuffer,256," (%d,%d) done\n", newmesh->totvert,newmesh->totface); elbeemDebugOut(debugStrBuffer); //DEBUG
- return newmesh;
-}
-
-/* read zipped fluidsim velocities into the co's of the fluidsimsettings normals struct */
-void readVelgz(char *filename, Object *srcob)
-{
- char debugStrBuffer[256];
- int wri, i, j;
- float wrf;
- gzFile gzf;
- MVert *vverts = srcob->fluidsimSettings->meshSurfNormals;
- int len = strlen(filename);
- Mesh *mesh = srcob->data;
- // mesh and vverts have to be valid from loading...
-
- // clean up in any case
- for(i=0; i<mesh->totvert;i++) {
- for(j=0; j<3; j++) {
- vverts[i].co[j] = 0.;
- }
- }
- if(srcob->fluidsimSettings->domainNovecgen>0) return;
-
- if(len<7) {
- //printf("readVelgz Eror: invalid filename '%s'\n",filename); // DEBUG
- return;
- }
-
- // .bobj.gz , correct filename
- // 87654321
- filename[len-6] = 'v';
- filename[len-5] = 'e';
- filename[len-4] = 'l';
-
- snprintf(debugStrBuffer,256,"Reading '%s' GZ_VEL... ",filename); elbeemDebugOut(debugStrBuffer);
- gzf = gzopen(filename, "rb");
- if (!gzf) {
- //printf("readVelgz Eror: unable to open file '%s'\n",filename); // DEBUG
- return;
- }
-
- gzread(gzf, &wri, sizeof( wri ));
- if(wri != mesh->totvert) {
- //printf("readVelgz Eror: invalid no. of velocities %d vs. %d aborting.\n" ,wri ,mesh->totvert ); // DEBUG
- return;
- }
-
- for(i=0; i<mesh->totvert;i++) {
- for(j=0; j<3; j++) {
- gzread(gzf, &wrf, sizeof( wrf ));
- vverts[i].co[j] = wrf;
+ attribs->mcol[a].array = tfdata->layers[layer].data;
+ attribs->mcol[a].emOffset = tfdata->layers[layer].offset;
+ attribs->mcol[a].glIndex = gattribs->layer[b].glindex;
+ }
}
- //if(i<20) fprintf(stderr, "GZ_VELload %d = %f,%f,%f \n",i,vverts[i].co[0],vverts[i].co[1],vverts[i].co[2]); // DEBUG
- }
+ else if(gattribs->layer[b].type == CD_TANGENT) {
+ /* tangents */
+ layer = CustomData_get_layer_index(fdata, CD_TANGENT);
- gzclose(gzf);
-}
-
-
-/* ***************************** fluidsim derived mesh ***************************** */
-
-/* check which file to load, and replace old mesh of the object with it */
-/* this replacement is undone at the end of mesh_calc_modifiers */
-void loadFluidsimMesh(Object *srcob, int useRenderParams)
-{
- Mesh *mesh = NULL;
- float *bbStart = NULL, *bbSize = NULL;
- float lastBB[3];
- int displaymode = 0;
- int curFrame = G.scene->r.cfra - 1 /*G.scene->r.sfra*/; /* start with 0 at start frame */
- char targetDir[FILE_MAXFILE+FILE_MAXDIR], targetFile[FILE_MAXFILE+FILE_MAXDIR];
- char debugStrBuffer[256];
- //snprintf(debugStrBuffer,256,"loadFluidsimMesh call (obid '%s', rp %d)\n", srcob->id.name, useRenderParams); // debug
+ if(layer != -1) {
+ attribs->tottang = 1;
- if((!srcob)||(!srcob->fluidsimSettings)) {
- snprintf(debugStrBuffer,256,"DEBUG - Invalid loadFluidsimMesh call, rp %d, dm %d)\n", useRenderParams, displaymode); // debug
- elbeemDebugOut(debugStrBuffer); // debug
- return;
- }
- // make sure the original mesh data pointer is stored
- if(!srcob->fluidsimSettings->orgMesh) {
- srcob->fluidsimSettings->orgMesh = srcob->data;
- }
-
- // free old mesh, if there is one (todo, check if it's still valid?)
- if(srcob->fluidsimSettings->meshSurface) {
- Mesh *freeFsMesh = srcob->fluidsimSettings->meshSurface;
-
- // similar to free_mesh(...) , but no things like unlink...
- CustomData_free(&freeFsMesh->vdata, freeFsMesh->totvert);
- CustomData_free(&freeFsMesh->edata, freeFsMesh->totedge);
- CustomData_free(&freeFsMesh->fdata, freeFsMesh->totface);
- MEM_freeN(freeFsMesh);
-
- if(srcob->data == srcob->fluidsimSettings->meshSurface)
- srcob->data = srcob->fluidsimSettings->orgMesh;
- srcob->fluidsimSettings->meshSurface = NULL;
-
- if(srcob->fluidsimSettings->meshSurfNormals) MEM_freeN(srcob->fluidsimSettings->meshSurfNormals);
- srcob->fluidsimSettings->meshSurfNormals = NULL;
- }
-
- // init bounding box
- bbStart = srcob->fluidsimSettings->bbStart;
- bbSize = srcob->fluidsimSettings->bbSize;
- lastBB[0] = bbSize[0]; // TEST
- lastBB[1] = bbSize[1];
- lastBB[2] = bbSize[2];
- fluidsimGetAxisAlignedBB(srcob->fluidsimSettings->orgMesh, srcob->obmat, bbStart, bbSize, &srcob->fluidsimSettings->meshBB);
- // check free fsmesh... TODO
-
- if(!useRenderParams) {
- displaymode = srcob->fluidsimSettings->guiDisplayMode;
- } else {
- displaymode = srcob->fluidsimSettings->renderDisplayMode;
- }
-
- snprintf(debugStrBuffer,256,"loadFluidsimMesh call (obid '%s', rp %d, dm %d), curFra=%d, sFra=%d #=%d \n",
- srcob->id.name, useRenderParams, displaymode, G.scene->r.cfra, G.scene->r.sfra, curFrame ); // debug
- elbeemDebugOut(debugStrBuffer); // debug
-
- strncpy(targetDir, srcob->fluidsimSettings->surfdataPath, FILE_MAXDIR);
- // use preview or final mesh?
- if(displaymode==1) {
- // just display original object
- srcob->data = srcob->fluidsimSettings->orgMesh;
- return;
- } else if(displaymode==2) {
- strcat(targetDir,"fluidsurface_preview_####");
- } else { // 3
- strcat(targetDir,"fluidsurface_final_####");
- }
- BLI_convertstringcode(targetDir, G.sce);
- BLI_convertstringframe(targetDir, curFrame); // fixed #frame-no
-
- strcpy(targetFile,targetDir);
- strcat(targetFile, ".bobj.gz");
-
- snprintf(debugStrBuffer,256,"loadFluidsimMesh call (obid '%s', rp %d, dm %d) '%s' \n", srcob->id.name, useRenderParams, displaymode, targetFile); // debug
- elbeemDebugOut(debugStrBuffer); // debug
-
- if(displaymode!=2) { // dont add bounding box for final
- mesh = readBobjgz(targetFile, srcob->fluidsimSettings->orgMesh ,NULL,NULL);
- } else {
- mesh = readBobjgz(targetFile, srcob->fluidsimSettings->orgMesh, bbSize,bbSize );
- }
- if(!mesh) {
- // switch, abort background rendering when fluidsim mesh is missing
- const char *strEnvName2 = "BLENDER_ELBEEMBOBJABORT"; // from blendercall.cpp
- if(G.background==1) {
- if(getenv(strEnvName2)) {
- int elevel = atoi(getenv(strEnvName2));
- if(elevel>0) {
- printf("Env. var %s set, fluid sim mesh '%s' not found, aborting render...\n",strEnvName2, targetFile);
- exit(1);
- }
+ attribs->tang.array = fdata->layers[layer].data;
+ attribs->tang.emOffset = fdata->layers[layer].offset;
+ attribs->tang.glIndex = gattribs->layer[b].glindex;
}
}
-
- // display org. object upon failure
- srcob->data = srcob->fluidsimSettings->orgMesh;
- return;
- }
-
- if((mesh)&&(mesh->totvert>0)) {
- make_edges(mesh, 0); // 0 = make all edges draw
- }
- srcob->fluidsimSettings->meshSurface = mesh;
- srcob->data = mesh;
- srcob->fluidsimSettings->meshSurfNormals = MEM_dupallocN(mesh->mvert);
-
- // load vertex velocities, if they exist...
- // TODO? use generate flag as loading flag as well?
- // warning, needs original .bobj.gz mesh loading filename
- if(displaymode==3) {
- readVelgz(targetFile, srcob);
- } else {
- // no data for preview, only clear...
- int i,j;
- for(i=0; i<mesh->totvert;i++) { for(j=0; j<3; j++) { srcob->fluidsimSettings->meshSurfNormals[i].co[j] = 0.; }}
- }
+ else if(gattribs->layer[b].type == CD_ORCO) {
+ /* original coordinates */
+ layer = CustomData_get_layer_index(vdata, CD_ORCO);
- //fprintf(stderr,"LOADFLM DEBXHCH fs=%d 3:%d,%d,%d \n", (int)mesh, ((Mesh *)(srcob->fluidsimSettings->meshSurface))->mvert[3].no[0], ((Mesh *)(srcob->fluidsimSettings->meshSurface))->mvert[3].no[1], ((Mesh *)(srcob->fluidsimSettings->meshSurface))->mvert[3].no[2]);
- return;
-}
+ if(layer != -1) {
+ attribs->totorco = 1;
-/* helper function */
-/* init axis aligned BB for mesh object */
-void fluidsimGetAxisAlignedBB(struct Mesh *mesh, float obmat[][4],
- /*RET*/ float start[3], /*RET*/ float size[3], /*RET*/ struct Mesh **bbmesh )
-{
- float bbsx=0.0, bbsy=0.0, bbsz=0.0;
- float bbex=1.0, bbey=1.0, bbez=1.0;
- int i;
- float vec[3];
-
- VECCOPY(vec, mesh->mvert[0].co);
- Mat4MulVecfl(obmat, vec);
- bbsx = vec[0]; bbsy = vec[1]; bbsz = vec[2];
- bbex = vec[0]; bbey = vec[1]; bbez = vec[2];
-
- for(i=1; i<mesh->totvert;i++) {
- VECCOPY(vec, mesh->mvert[i].co);
- Mat4MulVecfl(obmat, vec);
-
- if(vec[0] < bbsx){ bbsx= vec[0]; }
- if(vec[1] < bbsy){ bbsy= vec[1]; }
- if(vec[2] < bbsz){ bbsz= vec[2]; }
- if(vec[0] > bbex){ bbex= vec[0]; }
- if(vec[1] > bbey){ bbey= vec[1]; }
- if(vec[2] > bbez){ bbez= vec[2]; }
- }
-
- // return values...
- if(start) {
- start[0] = bbsx;
- start[1] = bbsy;
- start[2] = bbsz;
- }
- if(size) {
- size[0] = bbex-bbsx;
- size[1] = bbey-bbsy;
- size[2] = bbez-bbsz;
- }
-
- // init bounding box mesh?
- if(bbmesh) {
- int i,j;
- Mesh *newmesh = NULL;
- if(!(*bbmesh)) { newmesh = MEM_callocN(sizeof(Mesh), "fluidsimGetAxisAlignedBB_meshbb"); }
- else { newmesh = *bbmesh; }
-
- newmesh->totvert = 8;
- if(!newmesh->mvert)
- newmesh->mvert = CustomData_add_layer(&newmesh->vdata, CD_MVERT, CD_CALLOC, NULL, newmesh->totvert);
- for(i=0; i<8; i++) {
- for(j=0; j<3; j++) newmesh->mvert[i].co[j] = start[j];
+ attribs->orco.array = vdata->layers[layer].data;
+ attribs->orco.emOffset = vdata->layers[layer].offset;
+ attribs->orco.glIndex = gattribs->layer[b].glindex;
+ }
}
-
- newmesh->totface = 6;
- if(!newmesh->mface)
- newmesh->mface = CustomData_add_layer(&newmesh->fdata, CD_MFACE, CD_CALLOC, NULL, newmesh->totface);
-
- *bbmesh = newmesh;
}
}
-#else // DISABLE_ELBEEM
-
-/* dummy for mesh_calc_modifiers */
-void loadFluidsimMesh(Object *srcob, int useRenderParams) {
-}
-
-#endif // DISABLE_ELBEEM
-
diff --git a/source/blender/blenkernel/intern/Makefile b/source/blender/blenkernel/intern/Makefile
index 74c6c551a83..8921ea5d3b7 100644
--- a/source/blender/blenkernel/intern/Makefile
+++ b/source/blender/blenkernel/intern/Makefile
@@ -36,6 +36,7 @@ include nan_compile.mk
CFLAGS += $(LEVEL_1_C_WARNINGS)
# OpenGL and Python
+CPPFLAGS += -I$(NAN_GLEW)/include
CPPFLAGS += -I$(OPENGL_HEADERS)
CPPFLAGS += -I$(NAN_PYTHON)/include/python$(NAN_PYTHON_VERSION)
@@ -74,6 +75,9 @@ CPPFLAGS += -I$(NAN_ZLIB)/include
#path to nodes
CPPFLAGS += -I../../nodes
+#path to gpu
+CPPFLAGS += -I../../gpu
+
# path to our own external headerfiles
CPPFLAGS += -I..
diff --git a/source/blender/blenkernel/intern/action.c b/source/blender/blenkernel/intern/action.c
index 5b96bf11056..e0afdec5e23 100644
--- a/source/blender/blenkernel/intern/action.c
+++ b/source/blender/blenkernel/intern/action.c
@@ -62,6 +62,7 @@
#include "BLI_arithb.h"
#include "BLI_blenlib.h"
+#include "BLI_ghash.h"
#include "nla.h"
@@ -340,6 +341,60 @@ void free_pose(bPose *pose)
}
}
+void game_copy_pose(bPose **dst, bPose *src)
+{
+ bPose *out;
+ bPoseChannel *pchan, *outpchan;
+ GHash *ghash;
+
+ /* the game engine copies the current armature pose and then swaps
+ * the object pose pointer. this makes it possible to change poses
+ * without affecting the original blender data. */
+
+ if (!src) {
+ *dst=NULL;
+ return;
+ }
+ else if (*dst==src) {
+ printf("copy_pose source and target are the same\n");
+ *dst=NULL;
+ return;
+ }
+
+ out= MEM_dupallocN(src);
+ out->agroups.first= out->agroups.last= NULL;
+ duplicatelist(&out->chanbase, &src->chanbase);
+
+ /* remap pointers */
+ ghash= BLI_ghash_new(BLI_ghashutil_ptrhash, BLI_ghashutil_ptrcmp);
+
+ pchan= src->chanbase.first;
+ outpchan= out->chanbase.first;
+ for (; pchan; pchan=pchan->next, outpchan=outpchan->next)
+ BLI_ghash_insert(ghash, pchan, outpchan);
+
+ for (pchan=out->chanbase.first; pchan; pchan=pchan->next) {
+ pchan->parent= BLI_ghash_lookup(ghash, pchan->parent);
+ pchan->child= BLI_ghash_lookup(ghash, pchan->child);
+ pchan->path= NULL;
+ }
+
+ BLI_ghash_free(ghash, NULL, NULL);
+
+ *dst=out;
+}
+
+void game_free_pose(bPose *pose)
+{
+ if (pose) {
+ /* we don't free constraints, those are owned by the original pose */
+ if(pose->chanbase.first)
+ BLI_freelistN(&pose->chanbase);
+
+ MEM_freeN(pose);
+ }
+}
+
static void copy_pose_channel_data(bPoseChannel *pchan, const bPoseChannel *chan)
{
bConstraint *pcon, *con;
@@ -347,6 +402,8 @@ static void copy_pose_channel_data(bPoseChannel *pchan, const bPoseChannel *chan
VECCOPY(pchan->loc, chan->loc);
VECCOPY(pchan->size, chan->size);
QUATCOPY(pchan->quat, chan->quat);
+ Mat4CpyMat4(pchan->chan_mat, (float(*)[4])chan->chan_mat);
+ Mat4CpyMat4(pchan->pose_mat, (float(*)[4])chan->pose_mat);
pchan->flag= chan->flag;
con= chan->constraints.first;
@@ -860,7 +917,7 @@ typedef struct NlaIpoChannel {
int type;
} NlaIpoChannel;
-void extract_ipochannels_from_action(ListBase *lb, ID *id, bAction *act, char *name, float ctime)
+void extract_ipochannels_from_action(ListBase *lb, ID *id, bAction *act, const char *name, float ctime)
{
bActionChannel *achan= get_action_channel(act, name);
IpoCurve *icu;
@@ -991,7 +1048,7 @@ static float nla_time(float cfra, float unit)
static float stridechannel_frame(Object *ob, float sizecorr, bActionStrip *strip, Path *path, float pathdist, float *stride_offset)
{
bAction *act= strip->act;
- char *name= strip->stridechannel;
+ const char *name= strip->stridechannel;
bActionChannel *achan= get_action_channel(act, name);
int stride_axis= strip->stride_axis;
diff --git a/source/blender/blenkernel/intern/anim.c b/source/blender/blenkernel/intern/anim.c
index 1592c3e5504..731c2a18c55 100644
--- a/source/blender/blenkernel/intern/anim.c
+++ b/source/blender/blenkernel/intern/anim.c
@@ -52,6 +52,7 @@
#include "DNA_vfont_types.h"
#include "BKE_anim.h"
+#include "BKE_curve.h"
#include "BKE_DerivedMesh.h"
#include "BKE_displist.h"
#include "BKE_effect.h"
@@ -118,7 +119,7 @@ void calc_curvepath(Object *ob)
path->len= tot+1;
/* exception: vector handle paths and polygon paths should be subdivided at least a factor resolu */
- if(path->len<nu->resolu*nu->pntsu) path->len= nu->resolu*nu->pntsu;
+ if(path->len<nu->resolu*SEGMENTSU(nu)) path->len= nu->resolu*SEGMENTSU(nu);
dist= (float *)MEM_mallocN((tot+1)*4, "calcpathdist");
@@ -303,7 +304,7 @@ static void group_duplilist(ListBase *lb, Object *ob, int level, int animated)
DupliObject *dob;
Group *group;
GroupObject *go;
- float mat[4][4];
+ float mat[4][4], tmat[4][4];
if(ob->dup_group==NULL) return;
group= ob->dup_group;
@@ -320,7 +321,15 @@ static void group_duplilist(ListBase *lb, Object *ob, int level, int animated)
/* note, if you check on layer here, render goes wrong... it still deforms verts and uses parent imat */
if(go->ob!=ob) {
- Mat4MulMat4(mat, go->ob->obmat, ob->obmat);
+ /* Group Dupli Offset, should apply after everything else */
+ if (group->dupli_ofs[0] || group->dupli_ofs[1] || group->dupli_ofs[2]) {
+ Mat4CpyMat4(tmat, go->ob->obmat);
+ VecSubf(tmat[3], tmat[3], group->dupli_ofs);
+ Mat4MulMat4(mat, tmat, ob->obmat);
+ } else {
+ Mat4MulMat4(mat, go->ob->obmat, ob->obmat);
+ }
+
dob= new_dupli_object(lb, go->ob, mat, ob->lay, 0, OB_DUPLIGROUP, animated);
dob->no_draw= (dob->origlay & group->layer)==0;
@@ -775,6 +784,10 @@ static void new_particle_duplilist(ListBase *lb, ID *id, Object *par, float par_
hair= (totchild == 0 || psys->childcache) && psys->pathcache;
if(!hair)
return;
+
+ /* we use cache, update totchild according to cached data */
+ totchild = psys->totchildcache;
+ totpart = psys->totcached;
}
psys->lattice = psys_get_lattice(par, psys);
@@ -857,6 +870,8 @@ static void new_particle_duplilist(ListBase *lb, ID *id, Object *par, float par_
}
VECCOPY(pamat[3], cache->co);
+ pamat[3][3]= 1.0f;
+
}
else if(step_nbr) {
/* other keys */
@@ -1059,7 +1074,8 @@ static void object_duplilist_recursive(ID *id, Object *ob, ListBase *duplilist,
}
}
-/* note; group dupli's already set transform matrix. see note in group_duplilist() */
+/* Returns a list of DupliObject
+ * note; group dupli's already set transform matrix. see note in group_duplilist() */
ListBase *object_duplilist(Scene *sce, Object *ob)
{
ListBase *duplilist= MEM_mallocN(sizeof(ListBase), "duplilist");
diff --git a/source/blender/blenkernel/intern/armature.c b/source/blender/blenkernel/intern/armature.c
index fb7d59c137a..155d5a7d21c 100644
--- a/source/blender/blenkernel/intern/armature.c
+++ b/source/blender/blenkernel/intern/armature.c
@@ -1573,21 +1573,16 @@ static void initialize_posetree(struct Object *ob, bPoseChannel *pchan_tip)
/* find IK constraint, and validate it */
for(con= pchan_tip->constraints.first; con; con= con->next) {
- if(con->type==CONSTRAINT_TYPE_KINEMATIC) break;
+ if(con->type==CONSTRAINT_TYPE_KINEMATIC) {
+ data=(bKinematicConstraint*)con->data;
+ if (data->flag & CONSTRAINT_IK_AUTO) break;
+ if (data->tar==NULL) continue;
+ if (data->tar->type==OB_ARMATURE && data->subtarget[0]==0) continue;
+ if ((con->flag & CONSTRAINT_DISABLE)==0 && (con->enforce!=0.0)) break;
+ }
}
if(con==NULL) return;
- data=(bKinematicConstraint*)con->data;
-
- /* two types of targets */
- if(data->flag & CONSTRAINT_IK_AUTO);
- else {
- if(con->flag & CONSTRAINT_DISABLE) return; /* checked in editconstraint.c */
- if(con->enforce == 0.0f) return;
- if(data->tar==NULL) return;
- if(data->tar->type==OB_ARMATURE && data->subtarget[0]==0) return;
- }
-
/* exclude tip from chain? */
if(!(data->flag & CONSTRAINT_IK_TIP))
pchan_tip= pchan_tip->parent;
@@ -1690,7 +1685,7 @@ static void initialize_posetree(struct Object *ob, bPoseChannel *pchan_tip)
were executed & assigned. Now as last we do an IK pass */
static void execute_posetree(Object *ob, PoseTree *tree)
{
- float R_parmat[3][3];
+ float R_parmat[3][3], identity[3][3];
float iR_parmat[3][3];
float R_bonemat[3][3];
float goalrot[3][3], goalpos[3];
@@ -1699,7 +1694,8 @@ static void execute_posetree(Object *ob, PoseTree *tree)
float irest_basis[3][3], full_basis[3][3];
float end_pose[4][4], world_pose[4][4];
float length, basis[3][3], rest_basis[3][3], start[3], *ikstretch=NULL;
- int a, flag, hasstretch=0;
+ float resultinf=0.0f;
+ int a, flag, hasstretch=0, resultblend=0;
bPoseChannel *pchan;
IK_Segment *seg, *parent, **iktree, *iktarget;
IK_Solver *solver;
@@ -1844,6 +1840,12 @@ static void execute_posetree(Object *ob, PoseTree *tree)
Mat4MulMat4(goal, rootmat, goalinv);
VECCOPY(polepos, goal[3]);
poleconstrain= 1;
+
+ /* for pole targets, we blend the result of the ik solver
+ * instead of the target position, otherwise we can't get
+ * a smooth transition */
+ resultblend= 1;
+ resultinf= target->con->enforce;
if(data->flag & CONSTRAINT_IK_GETANGLE) {
poleangledata= data;
@@ -1853,7 +1855,7 @@ static void execute_posetree(Object *ob, PoseTree *tree)
}
/* do we need blending? */
- if (target->con->enforce!=1.0) {
+ if (!resultblend && target->con->enforce!=1.0) {
float q1[4], q2[4], q[4];
float fac= target->con->enforce;
float mfac= 1.0-fac;
@@ -1903,7 +1905,7 @@ static void execute_posetree(Object *ob, PoseTree *tree)
tree->basis_change= MEM_mallocN(sizeof(float[3][3])*tree->totchannel, "ik basis change");
if(hasstretch)
ikstretch= MEM_mallocN(sizeof(float)*tree->totchannel, "ik stretch");
-
+
for(a=0; a<tree->totchannel; a++) {
IK_GetBasisChange(iktree[a], tree->basis_change[a]);
@@ -1931,6 +1933,12 @@ static void execute_posetree(Object *ob, PoseTree *tree)
VecMulf(tree->basis_change[a][1], stretch);
VecMulf(tree->basis_change[a][2], stretch);
}
+
+ if(resultblend && resultinf!=1.0f) {
+ Mat3One(identity);
+ Mat3BlendMat3(tree->basis_change[a], identity,
+ tree->basis_change[a], resultinf);
+ }
IK_FreeSegment(iktree[a]);
}
diff --git a/source/blender/blenkernel/intern/blender.c b/source/blender/blenkernel/intern/blender.c
index aca51e56c6e..1fe6447752e 100644
--- a/source/blender/blenkernel/intern/blender.c
+++ b/source/blender/blenkernel/intern/blender.c
@@ -525,6 +525,7 @@ typedef struct UndoElem {
char str[FILE_MAXDIR+FILE_MAXFILE];
char name[MAXUNDONAME];
MemFile memfile;
+ uintptr_t undosize;
} UndoElem;
static ListBase undobase={NULL, NULL};
@@ -555,6 +556,7 @@ static int read_undosave(UndoElem *uel)
/* name can be a dynamic string */
void BKE_write_undo(char *name)
{
+ uintptr_t maxmem, totmem, memused;
int nr, success;
UndoElem *uel;
@@ -616,8 +618,36 @@ void BKE_write_undo(char *name)
if(curundo->prev) prevfile= &(curundo->prev->memfile);
+ memused= MEM_get_memory_in_use();
success= BLO_write_file_mem(prevfile, &curundo->memfile, G.fileflags, &err);
-
+ curundo->undosize= MEM_get_memory_in_use() - memused;
+ }
+
+ if(U.undomemory != 0) {
+ /* limit to maximum memory (afterwards, we can't know in advance) */
+ totmem= 0;
+ maxmem= ((uintptr_t)U.undomemory)*1024*1024;
+
+ /* keep at least two (original + other) */
+ uel= undobase.last;
+ while(uel && uel->prev) {
+ totmem+= uel->undosize;
+ if(totmem>maxmem) break;
+ uel= uel->prev;
+ }
+
+ if(uel) {
+ if(uel->prev && uel->prev->prev)
+ uel= uel->prev;
+
+ while(undobase.first!=uel) {
+ UndoElem *first= undobase.first;
+ BLI_remlink(&undobase, first);
+ /* the merge is because of compression */
+ BLO_merge_memfile(&first->memfile, &first->next->memfile);
+ MEM_freeN(first);
+ }
+ }
}
}
@@ -683,14 +713,14 @@ char *BKE_undo_menu_string(void)
UndoElem *uel;
DynStr *ds= BLI_dynstr_new();
char *menu;
-
+
BLI_dynstr_append(ds, "Global Undo History %t");
for(uel= undobase.first; uel; uel= uel->next) {
BLI_dynstr_append(ds, "|");
BLI_dynstr_append(ds, uel->name);
}
-
+
menu= BLI_dynstr_get_cstring(ds);
BLI_dynstr_free(ds);
diff --git a/source/blender/blenkernel/intern/brush.c b/source/blender/blenkernel/intern/brush.c
index 6ea470a2263..1c53af97dbb 100644
--- a/source/blender/blenkernel/intern/brush.c
+++ b/source/blender/blenkernel/intern/brush.c
@@ -359,7 +359,6 @@ void brush_sample_tex(Brush *brush, float *xy, float *rgba)
rgba[0]= rgba[1]= rgba[2]= rgba[3]= 1.0f;
}
-#define FTOCHAR(val) val<=0.0f?0: (val>=1.0f?255: (char)(255.0f*val))
void brush_imbuf_new(Brush *brush, short flt, short texfall, int size, ImBuf **outbuf)
{
diff --git a/source/blender/blenkernel/intern/bullet.c b/source/blender/blenkernel/intern/bullet.c
new file mode 100644
index 00000000000..eeec4d0bd4e
--- /dev/null
+++ b/source/blender/blenkernel/intern/bullet.c
@@ -0,0 +1,95 @@
+/*
+ *
+ * $Id$
+ *
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * The Original Code is Copyright (C) Blender Foundation
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): none yet.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+#include "MEM_guardedalloc.h"
+
+/* types */
+#include "DNA_object_force.h" /* here is the softbody struct */
+
+#include "BKE_bullet.h"
+
+
+/* ************ Object level, exported functions *************** */
+
+/* allocates and initializes general main data */
+BulletSoftBody *bsbNew(void)
+{
+ BulletSoftBody *bsb;
+
+ bsb= MEM_callocN(sizeof(BulletSoftBody), "bulletsoftbody");
+
+ bsb->flag = OB_BSB_BENDING_CONSTRAINTS | OB_BSB_SHAPE_MATCHING | OB_BSB_AERO_VPOINT;
+ bsb->linStiff = 0.5f;
+ bsb->angStiff = 1.0f;
+ bsb->volume = 1.0f;
+
+
+ bsb->viterations = 0;
+ bsb->piterations = 2;
+ bsb->diterations = 0;
+ bsb->citerations = 4;
+
+ bsb->kSRHR_CL = 0.1f;
+ bsb->kSKHR_CL = 1.f;
+ bsb->kSSHR_CL = 0.5f;
+ bsb->kSR_SPLT_CL = 0.5f;
+
+ bsb->kSK_SPLT_CL = 0.5f;
+ bsb->kSS_SPLT_CL = 0.5f;
+ bsb->kVCF = 1;
+ bsb->kDP = 0;
+
+ bsb->kDG = 0;
+ bsb->kLF = 0;
+ bsb->kPR = 0;
+ bsb->kVC = 0;
+
+ bsb->kDF = 0.2f;
+ bsb->kMT = 0.05;
+ bsb->kCHR = 1.0f;
+ bsb->kKHR = 0.1f;
+
+ bsb->kSHR = 1.0f;
+ bsb->kAHR = 0.7f;
+ bsb->collisionflags = 0;
+ //bsb->collisionflags = OB_BSB_COL_CL_RS + OB_BSB_COL_CL_SS;
+ bsb->numclusteriterations = 64;
+
+ return bsb;
+}
+
+/* frees all */
+void bsbFree(BulletSoftBody *bsb)
+{
+ /* no internal data yet */
+ MEM_freeN(bsb);
+}
+
+
diff --git a/source/blender/blenkernel/intern/bvhutils.c b/source/blender/blenkernel/intern/bvhutils.c
new file mode 100644
index 00000000000..5b68a637ea2
--- /dev/null
+++ b/source/blender/blenkernel/intern/bvhutils.c
@@ -0,0 +1,426 @@
+/**
+ *
+ * $Id$
+ *
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * The Original Code is Copyright (C) Blender Foundation.
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): André Pinto.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+#include <stdio.h>
+#include <string.h>
+#include <math.h>
+
+#include "BKE_bvhutils.h"
+
+#include "DNA_object_types.h"
+#include "DNA_modifier_types.h"
+#include "DNA_meshdata_types.h"
+
+#include "BKE_DerivedMesh.h"
+#include "BKE_utildefines.h"
+#include "BKE_deform.h"
+#include "BKE_cdderivedmesh.h"
+#include "BKE_displist.h"
+#include "BKE_global.h"
+
+#include "BLI_arithb.h"
+
+/* Math stuff for ray casting on mesh faces and for nearest surface */
+
+static float nearest_point_in_tri_surface(const float *point, const float *v0, const float *v1, const float *v2, float *nearest);
+
+#define ISECT_EPSILON 1e-6
+static float ray_tri_intersection(const BVHTreeRay *ray, const float m_dist, const float *v0, const float *v1, const float *v2)
+{
+ float dist;
+
+ if(RayIntersectsTriangle(ray->origin, ray->direction, v0, v1, v2, &dist, NULL))
+ return dist;
+
+ return FLT_MAX;
+}
+
+static float sphereray_tri_intersection(const BVHTreeRay *ray, float radius, const float m_dist, const float *v0, const float *v1, const float *v2)
+{
+
+ float idist;
+ float p1[3];
+ float plane_normal[3], hit_point[3];
+
+ CalcNormFloat((float*)v0, (float*)v1, (float*)v2, plane_normal);
+
+ VECADDFAC( p1, ray->origin, ray->direction, m_dist);
+ if(SweepingSphereIntersectsTriangleUV(ray->origin, p1, radius, v0, v1, v2, &idist, &hit_point))
+ {
+ return idist * m_dist;
+ }
+
+ return FLT_MAX;
+}
+
+/*
+ * This calculates the distance from point to the plane
+ * Distance is negative if point is on the back side of plane
+ */
+static float point_plane_distance(const float *point, const float *plane_point, const float *plane_normal)
+{
+ float pp[3];
+ VECSUB(pp, point, plane_point);
+ return INPR(pp, plane_normal);
+}
+static float choose_nearest(const float v0[2], const float v1[2], const float point[2], float closest[2])
+{
+ float d[2][2], sdist[2];
+ VECSUB2D(d[0], v0, point);
+ VECSUB2D(d[1], v1, point);
+
+ sdist[0] = d[0][0]*d[0][0] + d[0][1]*d[0][1];
+ sdist[1] = d[1][0]*d[1][0] + d[1][1]*d[1][1];
+
+ if(sdist[0] < sdist[1])
+ {
+ if(closest)
+ VECCOPY2D(closest, v0);
+ return sdist[0];
+ }
+ else
+ {
+ if(closest)
+ VECCOPY2D(closest, v1);
+ return sdist[1];
+ }
+}
+/*
+ * calculates the closest point between point-tri (2D)
+ * returns that tri must be right-handed
+ * Returns square distance
+ */
+static float closest_point_in_tri2D(const float point[2], /*const*/ float tri[3][2], float closest[2])
+{
+ float edge_di[2];
+ float v_point[2];
+ float proj[2]; //point projected over edge-dir, edge-normal (witouth normalized edge)
+ const float *v0 = tri[2], *v1;
+ float edge_slen, d; //edge squared length
+ int i;
+ const float *nearest_vertex = NULL;
+
+
+ //for each edge
+ for(i=0, v0=tri[2], v1=tri[0]; i < 3; v0=tri[i++], v1=tri[i])
+ {
+ VECSUB2D(edge_di, v1, v0);
+ VECSUB2D(v_point, point, v0);
+
+ proj[1] = v_point[0]*edge_di[1] - v_point[1]*edge_di[0]; //dot product with edge normal
+
+ //point inside this edge
+ if(proj[1] < 0)
+ continue;
+
+ proj[0] = v_point[0]*edge_di[0] + v_point[1]*edge_di[1];
+
+ //closest to this edge is v0
+ if(proj[0] < 0)
+ {
+ if(nearest_vertex == NULL || nearest_vertex == v0)
+ nearest_vertex = v0;
+ else
+ {
+ //choose nearest
+ return choose_nearest(nearest_vertex, v0, point, closest);
+ }
+ i++; //We can skip next edge
+ continue;
+ }
+
+ edge_slen = edge_di[0]*edge_di[0] + edge_di[1]*edge_di[1]; //squared edge len
+ //closest to this edge is v1
+ if(proj[0] > edge_slen)
+ {
+ if(nearest_vertex == NULL || nearest_vertex == v1)
+ nearest_vertex = v1;
+ else
+ {
+ return choose_nearest(nearest_vertex, v1, point, closest);
+ }
+ continue;
+ }
+
+ //nearest is on this edge
+ d= proj[1] / edge_slen;
+ closest[0] = point[0] - edge_di[1] * d;
+ closest[1] = point[1] + edge_di[0] * d;
+
+ return proj[1]*proj[1]/edge_slen;
+ }
+
+ if(nearest_vertex)
+ {
+ VECSUB2D(v_point, nearest_vertex, point);
+ VECCOPY2D(closest, nearest_vertex);
+ return v_point[0]*v_point[0] + v_point[1]*v_point[1];
+ }
+ else
+ {
+ VECCOPY(closest, point); //point is already inside
+ return 0.0f;
+ }
+}
+
+/*
+ * Returns the square of the minimum distance between the point and a triangle surface
+ * If nearest is not NULL the nearest surface point is written on it
+ */
+static float nearest_point_in_tri_surface(const float *point, const float *v0, const float *v1, const float *v2, float *nearest)
+{
+ //Lets solve the 2D problem (closest point-tri)
+ float normal_dist, plane_sdist, plane_offset;
+ float du[3], dv[3], dw[3]; //orthogonal axis (du=(v0->v1), dw=plane normal)
+
+ float p_2d[2], tri_2d[3][2], nearest_2d[2];
+
+ CalcNormFloat((float*)v0, (float*)v1, (float*)v2, dw);
+
+ //point-plane distance and calculate axis
+ normal_dist = point_plane_distance(point, v0, dw);
+
+ // OPTIMIZATION
+ // if we are only interested in nearest distance if its closer than some distance already found
+ // we can:
+ // if(normal_dist*normal_dist >= best_dist_so_far) return FLOAT_MAX;
+ //
+
+ VECSUB(du, v1, v0);
+ Normalize(du);
+ Crossf(dv, dw, du);
+ plane_offset = INPR(v0, dw);
+
+ //project stuff to 2d
+ tri_2d[0][0] = INPR(du, v0);
+ tri_2d[0][1] = INPR(dv, v0);
+
+ tri_2d[1][0] = INPR(du, v1);
+ tri_2d[1][1] = INPR(dv, v1);
+
+ tri_2d[2][0] = INPR(du, v2);
+ tri_2d[2][1] = INPR(dv, v2);
+
+ p_2d[0] = INPR(du, point);
+ p_2d[1] = INPR(dv, point);
+
+ //we always have a right-handed tri
+ //this should always happen because of the way normal is calculated
+ plane_sdist = closest_point_in_tri2D(p_2d, tri_2d, nearest_2d);
+
+ //project back to 3d
+ if(nearest)
+ {
+ nearest[0] = du[0]*nearest_2d[0] + dv[0] * nearest_2d[1] + dw[0] * plane_offset;
+ nearest[1] = du[1]*nearest_2d[0] + dv[1] * nearest_2d[1] + dw[1] * plane_offset;
+ nearest[2] = du[2]*nearest_2d[0] + dv[2] * nearest_2d[1] + dw[2] * plane_offset;
+ }
+
+ return plane_sdist + normal_dist*normal_dist;
+}
+
+
+/*
+ * BVH from meshs callbacks
+ */
+
+// Callback to bvh tree nearest point. The tree must bust have been built using bvhtree_from_mesh_faces.
+// userdata must be a BVHMeshCallbackUserdata built from the same mesh as the tree.
+static void mesh_faces_nearest_point(void *userdata, int index, const float *co, BVHTreeNearest *nearest)
+{
+ const BVHTreeFromMesh *data = (BVHTreeFromMesh*) userdata;
+ MVert *vert = data->vert;
+ MFace *face = data->face + index;
+
+ float *t0, *t1, *t2, *t3;
+ t0 = vert[ face->v1 ].co;
+ t1 = vert[ face->v2 ].co;
+ t2 = vert[ face->v3 ].co;
+ t3 = face->v4 ? vert[ face->v4].co : NULL;
+
+
+ do
+ {
+ float nearest_tmp[3], dist;
+
+ dist = nearest_point_in_tri_surface(co,t0, t1, t2, nearest_tmp);
+ if(dist < nearest->dist)
+ {
+ nearest->index = index;
+ nearest->dist = dist;
+ VECCOPY(nearest->co, nearest_tmp);
+ CalcNormFloat((float*)t0, (float*)t1, (float*)t2, nearest->no); //TODO.. (interpolate normals from the vertexs coordinates?
+ }
+
+
+ t1 = t2;
+ t2 = t3;
+ t3 = NULL;
+
+ } while(t2);
+}
+
+// Callback to bvh tree raycast. The tree must bust have been built using bvhtree_from_mesh_faces.
+// userdata must be a BVHMeshCallbackUserdata built from the same mesh as the tree.
+static void mesh_faces_spherecast(void *userdata, int index, const BVHTreeRay *ray, BVHTreeRayHit *hit)
+{
+ const BVHTreeFromMesh *data = (BVHTreeFromMesh*) userdata;
+ MVert *vert = data->vert;
+ MFace *face = data->face + index;
+
+ float *t0, *t1, *t2, *t3;
+ t0 = vert[ face->v1 ].co;
+ t1 = vert[ face->v2 ].co;
+ t2 = vert[ face->v3 ].co;
+ t3 = face->v4 ? vert[ face->v4].co : NULL;
+
+
+ do
+ {
+ float dist;
+ if(data->sphere_radius == 0.0f)
+ dist = ray_tri_intersection(ray, hit->dist, t0, t1, t2);
+ else
+ dist = sphereray_tri_intersection(ray, data->sphere_radius, hit->dist, t0, t1, t2);
+
+ if(dist >= 0 && dist < hit->dist)
+ {
+ hit->index = index;
+ hit->dist = dist;
+ VECADDFAC(hit->co, ray->origin, ray->direction, dist);
+
+ CalcNormFloat(t0, t1, t2, hit->no);
+ }
+
+ t1 = t2;
+ t2 = t3;
+ t3 = NULL;
+
+ } while(t2);
+}
+
+/*
+ * BVH builders
+ */
+// Builds a bvh tree.. where nodes are the vertexs of the given mesh
+void bvhtree_from_mesh_verts(BVHTreeFromMesh *data, DerivedMesh *mesh, float epsilon, int tree_type, int axis)
+{
+ int i;
+ int numVerts= mesh->getNumVerts(mesh);
+ MVert *vert = mesh->getVertDataArray(mesh, CD_MVERT);
+ BVHTree *tree = NULL;
+
+ memset(data, 0, sizeof(*data));
+
+ if(vert == NULL)
+ {
+ printf("bvhtree cant be build: cant get a vertex array");
+ return;
+ }
+
+ tree = BLI_bvhtree_new(numVerts, epsilon, tree_type, axis);
+ if(tree != NULL)
+ {
+ for(i = 0; i < numVerts; i++)
+ BLI_bvhtree_insert(tree, i, vert[i].co, 1);
+
+ BLI_bvhtree_balance(tree);
+
+ data->tree = tree;
+
+ //a NULL nearest callback works fine
+ //remeber the min distance to point is the same as the min distance to BV of point
+ data->nearest_callback = NULL;
+ data->raycast_callback = NULL;
+
+ data->mesh = mesh;
+ data->vert = mesh->getVertDataArray(mesh, CD_MVERT);
+ data->face = mesh->getFaceDataArray(mesh, CD_MFACE);
+
+ data->sphere_radius = epsilon;
+ }
+}
+
+// Builds a bvh tree.. where nodes are the faces of the given mesh.
+void bvhtree_from_mesh_faces(BVHTreeFromMesh *data, DerivedMesh *mesh, float epsilon, int tree_type, int axis)
+{
+ int i;
+ int numFaces= mesh->getNumFaces(mesh);
+ MVert *vert = mesh->getVertDataArray(mesh, CD_MVERT);
+ MFace *face = mesh->getFaceDataArray(mesh, CD_MFACE);
+ BVHTree *tree = NULL;
+
+ memset(data, 0, sizeof(*data));
+
+ if(vert == NULL && face == NULL)
+ {
+ printf("bvhtree cant be build: cant get a vertex/face array");
+ return;
+ }
+
+ /* Create a bvh-tree of the given target */
+ tree = BLI_bvhtree_new(numFaces, epsilon, tree_type, axis);
+ if(tree != NULL)
+ {
+ for(i = 0; i < numFaces; i++)
+ {
+ float co[4][3];
+ VECCOPY(co[0], vert[ face[i].v1 ].co);
+ VECCOPY(co[1], vert[ face[i].v2 ].co);
+ VECCOPY(co[2], vert[ face[i].v3 ].co);
+ if(face[i].v4)
+ VECCOPY(co[3], vert[ face[i].v4 ].co);
+
+ BLI_bvhtree_insert(tree, i, co[0], face[i].v4 ? 4 : 3);
+ }
+ BLI_bvhtree_balance(tree);
+
+ data->tree = tree;
+ data->nearest_callback = mesh_faces_nearest_point;
+ data->raycast_callback = mesh_faces_spherecast;
+
+ data->mesh = mesh;
+ data->vert = mesh->getVertDataArray(mesh, CD_MVERT);
+ data->face = mesh->getFaceDataArray(mesh, CD_MFACE);
+
+ data->sphere_radius = epsilon;
+ }
+}
+
+// Frees data allocated by a call to bvhtree_from_mesh_*.
+void free_bvhtree_from_mesh(struct BVHTreeFromMesh *data)
+{
+ if(data->tree)
+ {
+ BLI_bvhtree_free(data->tree);
+ memset( data, 0, sizeof(data) );
+ }
+}
+
+
diff --git a/source/blender/blenkernel/intern/cdderivedmesh.c b/source/blender/blenkernel/intern/cdderivedmesh.c
index 472df3d0f26..2c1b5ced614 100644
--- a/source/blender/blenkernel/intern/cdderivedmesh.c
+++ b/source/blender/blenkernel/intern/cdderivedmesh.c
@@ -58,6 +58,10 @@
#include "MEM_guardedalloc.h"
+#include "GPU_draw.h"
+#include "GPU_extensions.h"
+#include "GPU_material.h"
+
#include <string.h>
#include <limits.h>
@@ -117,7 +121,7 @@ static void cdDM_copyEdgeArray(DerivedMesh *dm, MEdge *edge_r)
memcpy(edge_r, cddm->medge, sizeof(*edge_r) * dm->numEdgeData);
}
-void cdDM_copyFaceArray(DerivedMesh *dm, MFace *face_r)
+static void cdDM_copyFaceArray(DerivedMesh *dm, MFace *face_r)
{
CDDerivedMesh *cddm = (CDDerivedMesh *)dm;
memcpy(face_r, cddm->mface, sizeof(*face_r) * dm->numFaceData);
@@ -243,7 +247,7 @@ static void cdDM_drawLooseEdges(DerivedMesh *dm)
glEnd();
}
-static void cdDM_drawFacesSolid(DerivedMesh *dm, int (*setMaterial)(int))
+static void cdDM_drawFacesSolid(DerivedMesh *dm, int (*setMaterial)(int, void *attribs))
{
CDDerivedMesh *cddm = (CDDerivedMesh*) dm;
MVert *mvert = cddm->mvert;
@@ -271,7 +275,7 @@ static void cdDM_drawFacesSolid(DerivedMesh *dm, int (*setMaterial)(int))
|| new_shademodel != shademodel) {
glEnd();
- drawCurrentMat = setMaterial(matnr = new_matnr);
+ drawCurrentMat = setMaterial(matnr = new_matnr, NULL);
glShadeModel(shademodel = new_shademodel);
glBegin(glmode = new_glmode);
@@ -556,6 +560,134 @@ static void cdDM_drawMappedFacesTex(DerivedMesh *dm, int (*setDrawOptions)(void
cdDM_drawFacesTex_common(dm, NULL, setDrawOptions, userData);
}
+static void cdDM_drawMappedFacesGLSL(DerivedMesh *dm, int (*setMaterial)(int, void *attribs), int (*setDrawOptions)(void *userData, int index), void *userData)
+{
+ CDDerivedMesh *cddm = (CDDerivedMesh*) dm;
+ GPUVertexAttribs gattribs;
+ DMVertexAttribs attribs;
+ MVert *mvert = cddm->mvert;
+ MFace *mface = cddm->mface;
+ MTFace *tf = dm->getFaceDataArray(dm, CD_MTFACE);
+ float (*nors)[3] = dm->getFaceDataArray(dm, CD_NORMAL);
+ int a, b, dodraw, smoothnormal, matnr, new_matnr;
+ int transp, new_transp, orig_transp;
+ int orig, *index = dm->getFaceDataArray(dm, CD_ORIGINDEX);
+
+ matnr = -1;
+ smoothnormal = 0;
+ dodraw = 0;
+ transp = GPU_get_material_blend_mode();
+ orig_transp = transp;
+
+ memset(&attribs, 0, sizeof(attribs));
+
+ glShadeModel(GL_SMOOTH);
+ glBegin(GL_QUADS);
+
+ for(a = 0; a < dm->numFaceData; a++, mface++) {
+ new_matnr = mface->mat_nr + 1;
+
+ if(new_matnr != matnr) {
+ glEnd();
+
+ dodraw = setMaterial(matnr = new_matnr, &gattribs);
+ if(dodraw)
+ DM_vertex_attributes_from_gpu(dm, &gattribs, &attribs);
+
+ glBegin(GL_QUADS);
+ }
+
+ if(!dodraw) {
+ continue;
+ }
+ else if(setDrawOptions) {
+ orig = index[a];
+
+ if(orig == ORIGINDEX_NONE)
+ continue;
+ else if(!setDrawOptions(userData, orig))
+ continue;
+ }
+
+ if(tf) {
+ new_transp = tf[a].transp;
+
+ if(new_transp != transp) {
+ glEnd();
+
+ if(new_transp == GPU_BLEND_SOLID && orig_transp != GPU_BLEND_SOLID)
+ GPU_set_material_blend_mode(orig_transp);
+ else
+ GPU_set_material_blend_mode(new_transp);
+ transp = new_transp;
+
+ glBegin(GL_QUADS);
+ }
+ }
+
+ smoothnormal = (mface->flag & ME_SMOOTH);
+
+ if(!smoothnormal) {
+ if(nors) {
+ glNormal3fv(nors[a]);
+ }
+ else {
+ /* TODO ideally a normal layer should always be available */
+ float nor[3];
+ if(mface->v4) {
+ CalcNormFloat4(mvert[mface->v1].co, mvert[mface->v2].co,
+ mvert[mface->v3].co, mvert[mface->v4].co,
+ nor);
+ } else {
+ CalcNormFloat(mvert[mface->v1].co, mvert[mface->v2].co,
+ mvert[mface->v3].co, nor);
+ }
+ glNormal3fv(nor);
+ }
+ }
+
+#define PASSVERT(index, vert) { \
+ if(attribs.totorco) \
+ glVertexAttrib3fvARB(attribs.orco.glIndex, attribs.orco.array[index]); \
+ for(b = 0; b < attribs.tottface; b++) { \
+ MTFace *tf = &attribs.tface[b].array[a]; \
+ glVertexAttrib2fvARB(attribs.tface[b].glIndex, tf->uv[vert]); \
+ } \
+ for(b = 0; b < attribs.totmcol; b++) { \
+ MCol *cp = &attribs.mcol[b].array[a*4 + vert]; \
+ GLubyte col[4]; \
+ col[0]= cp->b; col[1]= cp->g; col[2]= cp->r; col[3]= cp->a; \
+ glVertexAttrib4ubvARB(attribs.mcol[b].glIndex, col); \
+ } \
+ if(attribs.tottang) { \
+ float *tang = attribs.tang.array[a*4 + vert]; \
+ glVertexAttrib3fvARB(attribs.tang.glIndex, tang); \
+ } \
+ if(smoothnormal) \
+ glNormal3sv(mvert[index].no); \
+ glVertex3fv(mvert[index].co); \
+}
+
+ PASSVERT(mface->v1, 0);
+ PASSVERT(mface->v2, 1);
+ PASSVERT(mface->v3, 2);
+ if(mface->v4)
+ PASSVERT(mface->v4, 3)
+ else
+ PASSVERT(mface->v3, 2)
+
+#undef PASSVERT
+ }
+ glEnd();
+
+ glShadeModel(GL_FLAT);
+}
+
+static void cdDM_drawFacesGLSL(DerivedMesh *dm, int (*setMaterial)(int, void *attribs))
+{
+ dm->drawMappedFacesGLSL(dm, setMaterial, NULL, NULL);
+}
+
static void cdDM_drawMappedEdges(DerivedMesh *dm, int (*setDrawOptions)(void *userData, int index), void *userData)
{
CDDerivedMesh *cddm = (CDDerivedMesh*) dm;
@@ -713,8 +845,10 @@ static CDDerivedMesh *cdDM_create(const char *desc)
dm->drawFacesSolid = cdDM_drawFacesSolid;
dm->drawFacesColored = cdDM_drawFacesColored;
dm->drawFacesTex = cdDM_drawFacesTex;
+ dm->drawFacesGLSL = cdDM_drawFacesGLSL;
dm->drawMappedFaces = cdDM_drawMappedFaces;
dm->drawMappedFacesTex = cdDM_drawMappedFacesTex;
+ dm->drawMappedFacesGLSL = cdDM_drawMappedFacesGLSL;
dm->foreachMappedVert = cdDM_foreachMappedVert;
dm->foreachMappedEdge = cdDM_foreachMappedEdge;
@@ -764,10 +898,7 @@ DerivedMesh *CDDM_from_mesh(Mesh *mesh, Object *ob)
dm->deformedOnly = 1;
- if(ob && ob->fluidsimSettings && ob->fluidsimSettings->meshSurface)
- alloctype= CD_DUPLICATE;
- else
- alloctype= CD_REFERENCE;
+ alloctype= CD_REFERENCE;
CustomData_merge(&mesh->vdata, &dm->vertData, CD_MASK_MESH, alloctype,
mesh->totvert);
diff --git a/source/blender/blenkernel/intern/cloth.c b/source/blender/blenkernel/intern/cloth.c
index c7817b017ef..dbc94571cad 100644
--- a/source/blender/blenkernel/intern/cloth.c
+++ b/source/blender/blenkernel/intern/cloth.c
@@ -155,7 +155,7 @@ void cloth_init ( ClothModifierData *clmd )
BVHTree *bvhselftree_build_from_cloth (ClothModifierData *clmd, float epsilon)
{
- int i;
+ unsigned int i;
BVHTree *bvhtree;
Cloth *cloth = clmd->clothObject;
ClothVertex *verts;
@@ -196,7 +196,7 @@ BVHTree *bvhselftree_build_from_cloth (ClothModifierData *clmd, float epsilon)
BVHTree *bvhtree_build_from_cloth (ClothModifierData *clmd, float epsilon)
{
- int i;
+ unsigned int i;
BVHTree *bvhtree;
Cloth *cloth = clmd->clothObject;
ClothVertex *verts;
@@ -782,11 +782,11 @@ static void cloth_to_object (Object *ob, ClothModifierData *clmd, DerivedMesh *
/* can be optimized to do all groups in one loop */
static void cloth_apply_vgroup ( ClothModifierData *clmd, DerivedMesh *dm )
{
- unsigned int i = 0;
- unsigned int j = 0;
+ int i = 0;
+ int j = 0;
MDeformVert *dvert = NULL;
Cloth *clothObj = NULL;
- unsigned int numverts = dm->getNumVerts ( dm );
+ int numverts = dm->getNumVerts ( dm );
float goalfac = 0;
ClothVertex *verts = NULL;
@@ -857,7 +857,7 @@ static void cloth_apply_vgroup ( ClothModifierData *clmd, DerivedMesh *dm )
static int cloth_from_object(Object *ob, ClothModifierData *clmd, DerivedMesh *dm, float framenr, int first)
{
- unsigned int i = 0;
+ int i = 0;
MVert *mvert = NULL;
ClothVertex *verts = NULL;
float tnull[3] = {0,0,0};
@@ -1082,13 +1082,13 @@ int cloth_build_springs ( ClothModifierData *clmd, DerivedMesh *dm )
Cloth *cloth = clmd->clothObject;
ClothSpring *spring = NULL, *tspring = NULL, *tspring2 = NULL;
unsigned int struct_springs = 0, shear_springs=0, bend_springs = 0;
- unsigned int i = 0;
- unsigned int numverts = dm->getNumVerts ( dm );
- unsigned int numedges = dm->getNumEdges ( dm );
- unsigned int numfaces = dm->getNumFaces ( dm );
+ int i = 0;
+ int numverts = dm->getNumVerts ( dm );
+ int numedges = dm->getNumEdges ( dm );
+ int numfaces = dm->getNumFaces ( dm );
MEdge *medge = CDDM_get_edges ( dm );
MFace *mface = CDDM_get_faces ( dm );
- unsigned int index2 = 0; // our second vertex index
+ int index2 = 0; // our second vertex index
LinkNode **edgelist = NULL;
EdgeHash *edgehash = NULL;
LinkNode *search = NULL, *search2 = NULL;
diff --git a/source/blender/blenkernel/intern/collision.c b/source/blender/blenkernel/intern/collision.c
index cfcab54058d..b8f5b467c11 100644
--- a/source/blender/blenkernel/intern/collision.c
+++ b/source/blender/blenkernel/intern/collision.c
@@ -31,10 +31,11 @@
#include "BKE_cloth.h"
-#include "DNA_group_types.h"
-#include "DNA_object_types.h"
#include "DNA_cloth_types.h"
+#include "DNA_group_types.h"
#include "DNA_mesh_types.h"
+#include "DNA_object_types.h"
+#include "DNA_object_force.h"
#include "DNA_scene_types.h"
#include "BKE_DerivedMesh.h"
@@ -1306,10 +1307,39 @@ CollisionModifierData **get_collisionobjects(Object *self, int *numcollobj)
// check all collision objects
for ( base = G.scene->base.first; base; base = base->next )
{
+ /*Only proceed for mesh object in same layer */
+ if(!(base->object->type==OB_MESH && (base->lay & self->lay)))
+ continue;
+
coll_ob = base->object;
- collmd = ( CollisionModifierData * ) modifiers_findByType ( coll_ob, eModifierType_Collision );
-
- if ( !collmd )
+
+ if(coll_ob->pd && coll_ob->pd->deflect)
+ {
+ collmd = ( CollisionModifierData * ) modifiers_findByType ( coll_ob, eModifierType_Collision );
+ }
+
+ if ( collmd )
+ {
+ if(coll_ob == self)
+ continue;
+
+ if(numobj >= maxobj)
+ {
+ // realloc
+ int oldmax = maxobj;
+ CollisionModifierData **tmp;
+ maxobj *= 2;
+ tmp = MEM_callocN(sizeof(CollisionModifierData *)*maxobj, "CollisionObjectsArray");
+ memcpy(tmp, objs, sizeof(CollisionModifierData *)*oldmax);
+ MEM_freeN(objs);
+ objs = tmp;
+
+ }
+
+ objs[numobj] = collmd;
+ numobj++;
+ }
+ else
{
if ( coll_ob->dup_group )
{
@@ -1319,8 +1349,12 @@ CollisionModifierData **get_collisionobjects(Object *self, int *numcollobj)
for ( go= group->gobject.first; go; go= go->next )
{
coll_ob = go->ob;
-
- collmd = ( CollisionModifierData * ) modifiers_findByType ( coll_ob, eModifierType_Collision );
+ collmd = NULL;
+
+ if(coll_ob->pd && coll_ob->pd->deflect)
+ {
+ collmd = ( CollisionModifierData * ) modifiers_findByType ( coll_ob, eModifierType_Collision );
+ }
if ( !collmd )
continue;
@@ -1347,27 +1381,6 @@ CollisionModifierData **get_collisionobjects(Object *self, int *numcollobj)
numobj++;
}
}
- }
- else
- {
- if(coll_ob == self)
- continue;
-
- if(numobj >= maxobj)
- {
- // realloc
- int oldmax = maxobj;
- CollisionModifierData **tmp;
- maxobj *= 2;
- tmp = MEM_callocN(sizeof(CollisionModifierData *)*maxobj, "CollisionObjectsArray");
- memcpy(tmp, objs, sizeof(CollisionModifierData *)*oldmax);
- MEM_freeN(objs);
- objs = tmp;
-
- }
-
- objs[numobj] = collmd;
- numobj++;
}
}
*numcollobj = numobj;
@@ -1484,6 +1497,9 @@ int cloth_bvh_objcollision ( Object *ob, ClothModifierData * clmd, float step, f
BVHTreeOverlap *overlap = NULL;
int result = 0;
+ if(!collmd->bvhtree)
+ continue;
+
/* move object to position (step) in time */
collision_move_object ( collmd, step + dt, step );
diff --git a/source/blender/blenkernel/intern/colortools.c b/source/blender/blenkernel/intern/colortools.c
index 295b8fe3552..1bc34aea9a1 100644
--- a/source/blender/blenkernel/intern/colortools.c
+++ b/source/blender/blenkernel/intern/colortools.c
@@ -650,7 +650,6 @@ void curvemapping_evaluate_premulRGBF(CurveMapping *cumap, float *vecout, const
vecout[2]= curvemap_evaluateF(cumap->cm+2, fac);
}
-#define FTOCHAR(val) val<=0.0f?0: (val>=1.0f?255: (char)(255.0f*val))
void curvemapping_do_ibuf(CurveMapping *cumap, ImBuf *ibuf)
{
@@ -730,3 +729,24 @@ void curvemapping_initialize(CurveMapping *cumap)
curvemap_make_table(cumap->cm+a, &cumap->clipr);
}
}
+
+void curvemapping_table_RGBA(CurveMapping *cumap, float **array, int *size)
+{
+ int a;
+
+ *size = CM_TABLE+1;
+ *array = MEM_callocN(sizeof(float)*(*size)*4, "CurveMapping");
+ curvemapping_initialize(cumap);
+
+ for(a=0; a<*size; a++) {
+ if(cumap->cm[0].table)
+ (*array)[a*4+0]= cumap->cm[0].table[a].y;
+ if(cumap->cm[1].table)
+ (*array)[a*4+1]= cumap->cm[1].table[a].y;
+ if(cumap->cm[2].table)
+ (*array)[a*4+2]= cumap->cm[2].table[a].y;
+ if(cumap->cm[3].table)
+ (*array)[a*4+3]= cumap->cm[3].table[a].y;
+ }
+}
+
diff --git a/source/blender/blenkernel/intern/constraint.c b/source/blender/blenkernel/intern/constraint.c
index f13fd5f9963..99cf58e8e5a 100644
--- a/source/blender/blenkernel/intern/constraint.c
+++ b/source/blender/blenkernel/intern/constraint.c
@@ -367,19 +367,12 @@ void constraint_mat_convertspace (Object *ob, bPoseChannel *pchan, float mat[][4
case CONSTRAINT_SPACE_WORLD: /* ---------- FROM WORLDSPACE ---------- */
{
/* world to pose */
- if (to==CONSTRAINT_SPACE_POSE || to==CONSTRAINT_SPACE_LOCAL || to==CONSTRAINT_SPACE_PARLOCAL) {
- Mat4Invert(imat, ob->obmat);
- Mat4CpyMat4(tempmat, mat);
- Mat4MulMat4(mat, tempmat, imat);
- }
+ Mat4Invert(imat, ob->obmat);
+ Mat4CpyMat4(tempmat, mat);
+ Mat4MulMat4(mat, tempmat, imat);
- /* pose to local */
- if (to == CONSTRAINT_SPACE_LOCAL) {
- /* call self with slightly different values */
- constraint_mat_convertspace(ob, pchan, mat, CONSTRAINT_SPACE_POSE, to);
- }
- /* pose to local + parent */
- else if (to == CONSTRAINT_SPACE_PARLOCAL) {
+ /* use pose-space as stepping stone for other spaces... */
+ if (ELEM(to, CONSTRAINT_SPACE_LOCAL, CONSTRAINT_SPACE_PARLOCAL)) {
/* call self with slightly different values */
constraint_mat_convertspace(ob, pchan, mat, CONSTRAINT_SPACE_POSE, to);
}
@@ -445,69 +438,66 @@ void constraint_mat_convertspace (Object *ob, bPoseChannel *pchan, float mat[][4
break;
case CONSTRAINT_SPACE_LOCAL: /* ------------ FROM LOCALSPACE --------- */
{
- /* local to pose */
- if (to==CONSTRAINT_SPACE_POSE || to==CONSTRAINT_SPACE_WORLD) {
- /* do inverse procedure that was done for pose to local */
- if (pchan->bone) {
- /* we need the posespace_matrix = local_matrix + (parent_posespace_matrix + restpos) */
- if (pchan->parent) {
- float offs_bone[4][4];
+ /* local to pose - do inverse procedure that was done for pose to local */
+ if (pchan->bone) {
+ /* we need the posespace_matrix = local_matrix + (parent_posespace_matrix + restpos) */
+ if (pchan->parent) {
+ float offs_bone[4][4];
+
+ /* construct offs_bone the same way it is done in armature.c */
+ Mat4CpyMat3(offs_bone, pchan->bone->bone_mat);
+ VECCOPY(offs_bone[3], pchan->bone->head);
+ offs_bone[3][1]+= pchan->bone->parent->length;
+
+ if (pchan->bone->flag & BONE_HINGE) {
+ /* pose_mat = par_pose-space_location * chan_mat */
+ float tmat[4][4];
- /* construct offs_bone the same way it is done in armature.c */
- Mat4CpyMat3(offs_bone, pchan->bone->bone_mat);
- VECCOPY(offs_bone[3], pchan->bone->head);
- offs_bone[3][1]+= pchan->bone->parent->length;
+ /* the rotation of the parent restposition */
+ Mat4CpyMat4(tmat, pchan->bone->parent->arm_mat);
- if (pchan->bone->flag & BONE_HINGE) {
- /* pose_mat = par_pose-space_location * chan_mat */
- float tmat[4][4];
-
- /* the rotation of the parent restposition */
- Mat4CpyMat4(tmat, pchan->bone->parent->arm_mat);
-
- /* the location of actual parent transform */
- VECCOPY(tmat[3], offs_bone[3]);
- offs_bone[3][0]= offs_bone[3][1]= offs_bone[3][2]= 0.0f;
- Mat4MulVecfl(pchan->parent->pose_mat, tmat[3]);
-
- Mat4MulMat4(diff_mat, offs_bone, tmat);
- Mat4CpyMat4(tempmat, mat);
- Mat4MulMat4(mat, tempmat, diff_mat);
- }
- else {
- /* pose_mat = par_pose_mat * bone_mat * chan_mat */
- Mat4MulMat4(diff_mat, offs_bone, pchan->parent->pose_mat);
- Mat4CpyMat4(tempmat, mat);
- Mat4MulMat4(mat, tempmat, diff_mat);
- }
+ /* the location of actual parent transform */
+ VECCOPY(tmat[3], offs_bone[3]);
+ offs_bone[3][0]= offs_bone[3][1]= offs_bone[3][2]= 0.0f;
+ Mat4MulVecfl(pchan->parent->pose_mat, tmat[3]);
+
+ Mat4MulMat4(diff_mat, offs_bone, tmat);
+ Mat4CpyMat4(tempmat, mat);
+ Mat4MulMat4(mat, tempmat, diff_mat);
}
else {
- Mat4CpyMat4(diff_mat, pchan->bone->arm_mat);
-
+ /* pose_mat = par_pose_mat * bone_mat * chan_mat */
+ Mat4MulMat4(diff_mat, offs_bone, pchan->parent->pose_mat);
Mat4CpyMat4(tempmat, mat);
Mat4MulMat4(mat, tempmat, diff_mat);
}
}
+ else {
+ Mat4CpyMat4(diff_mat, pchan->bone->arm_mat);
+
+ Mat4CpyMat4(tempmat, mat);
+ Mat4MulMat4(mat, tempmat, diff_mat);
+ }
}
- /* local to world */
- if (to == CONSTRAINT_SPACE_WORLD) {
+
+ /* use pose-space as stepping stone for other spaces */
+ if (ELEM(to, CONSTRAINT_SPACE_WORLD, CONSTRAINT_SPACE_PARLOCAL)) {
/* call self with slightly different values */
constraint_mat_convertspace(ob, pchan, mat, CONSTRAINT_SPACE_POSE, to);
- }
+ }
}
break;
case CONSTRAINT_SPACE_PARLOCAL: /* -------------- FROM LOCAL WITH PARENT ---------- */
{
- /* local to pose */
- if (to==CONSTRAINT_SPACE_POSE || to==CONSTRAINT_SPACE_WORLD) {
- if (pchan->bone) {
- Mat4CpyMat4(diff_mat, pchan->bone->arm_mat);
- Mat4CpyMat4(tempmat, mat);
- Mat4MulMat4(mat, diff_mat, tempmat);
- }
+ /* local + parent to pose */
+ if (pchan->bone) {
+ Mat4CpyMat4(diff_mat, pchan->bone->arm_mat);
+ Mat4CpyMat4(tempmat, mat);
+ Mat4MulMat4(mat, diff_mat, tempmat);
}
- /* local to world */
- if (to == CONSTRAINT_SPACE_WORLD) {
+
+ /* use pose-space as stepping stone for other spaces */
+ if (ELEM(to, CONSTRAINT_SPACE_WORLD, CONSTRAINT_SPACE_LOCAL)) {
/* call self with slightly different values */
constraint_mat_convertspace(ob, pchan, mat, CONSTRAINT_SPACE_POSE, to);
}
@@ -1882,7 +1872,7 @@ static void pycon_get_tarmat (bConstraint *con, bConstraintOb *cob, bConstraintT
{
bPythonConstraint *data= con->data;
- if ((G.f & G_DOSCRIPTLINKS) && VALID_CONS_TARGET(ct)) {
+ if (VALID_CONS_TARGET(ct)) {
/* special exception for curves - depsgraph issues */
if (ct->tar->type == OB_CURVE) {
Curve *cu= ct->tar->data;
@@ -1896,7 +1886,10 @@ static void pycon_get_tarmat (bConstraint *con, bConstraintOb *cob, bConstraintT
* this matrix if it needs to do so
*/
constraint_target_to_mat4(ct->tar, ct->subtarget, ct->matrix, CONSTRAINT_SPACE_WORLD, ct->space, con->headtail);
- BPY_pyconstraint_target(data, ct);
+
+ /* only execute target calculation if allowed */
+ if (G.f & G_DOSCRIPTLINKS)
+ BPY_pyconstraint_target(data, ct);
}
else if (ct)
Mat4One(ct->matrix);
@@ -1906,6 +1899,7 @@ static void pycon_evaluate (bConstraint *con, bConstraintOb *cob, ListBase *targ
{
bPythonConstraint *data= con->data;
+ /* only evaluate in python if we're allowed to do so */
if ((G.f & G_DOSCRIPTLINKS)==0) return;
/* currently removed, until I this can be re-implemented for multiple targets */
diff --git a/source/blender/blenkernel/intern/curve.c b/source/blender/blenkernel/intern/curve.c
index 396bdda9c10..c29a92558d6 100644
--- a/source/blender/blenkernel/intern/curve.c
+++ b/source/blender/blenkernel/intern/curve.c
@@ -247,7 +247,7 @@ void tex_space_curve(Curve *cu)
{
DispList *dl;
BoundBox *bb;
- float *data, min[3], max[3], loc[3], size[3];
+ float *fp, min[3], max[3], loc[3], size[3];
int tot, doit= 0;
if(cu->bb==NULL) cu->bb= MEM_callocN(sizeof(BoundBox), "boundbox");
@@ -262,10 +262,10 @@ void tex_space_curve(Curve *cu)
else tot= dl->nr*dl->parts;
if(tot) doit= 1;
- data= dl->verts;
+ fp= dl->verts;
while(tot--) {
- DO_MINMAX(data, min, max);
- data+= 3;
+ DO_MINMAX(fp, min, max);
+ fp += 3;
}
dl= dl->next;
}
@@ -650,31 +650,31 @@ static void basisNurb(float t, short order, short pnts, float *knots, float *bas
}
-void makeNurbfaces(Nurb *nu, float *data, int rowstride)
-/* data has to be 3*4*resolu*resolv in size, and zero-ed */
+void makeNurbfaces(Nurb *nu, float *coord_array, int rowstride)
+/* coord_array has to be 3*4*resolu*resolv in size, and zero-ed */
{
BPoint *bp;
float *basisu, *basis, *basisv, *sum, *fp, *in;
float u, v, ustart, uend, ustep, vstart, vend, vstep, sumdiv;
int i, j, iofs, jofs, cycl, len, resolu, resolv;
int istart, iend, jsta, jen, *jstart, *jend, ratcomp;
-
+
+ int totu = nu->pntsu*nu->resolu, totv = nu->pntsv*nu->resolv;
+
if(nu->knotsu==NULL || nu->knotsv==NULL) return;
if(nu->orderu>nu->pntsu) return;
if(nu->orderv>nu->pntsv) return;
- if(data==0) return;
-
+ if(coord_array==NULL) return;
+
/* allocate and initialize */
- len= nu->pntsu*nu->pntsv;
+ len = totu * totv;
if(len==0) return;
sum= (float *)MEM_callocN(sizeof(float)*len, "makeNurbfaces1");
-
- resolu= nu->resolu;
- resolv= nu->resolv;
- len= resolu*resolv;
+
+ len= totu*totv;
if(len==0) {
MEM_freeN(sum);
return;
@@ -690,12 +690,13 @@ void makeNurbfaces(Nurb *nu, float *data, int rowstride)
}
bp++;
}
-
+
fp= nu->knotsu;
ustart= fp[nu->orderu-1];
if(nu->flagu & CU_CYCLIC) uend= fp[nu->pntsu+nu->orderu-1];
else uend= fp[nu->pntsu];
- ustep= (uend-ustart)/(resolu-1+(nu->flagu & CU_CYCLIC));
+ ustep= (uend-ustart)/((nu->flagu & CU_CYCLIC) ? totu : totu - 1);
+
basisu= (float *)MEM_mallocN(sizeof(float)*KNOTSU(nu), "makeNurbfaces3");
fp= nu->knotsv;
@@ -703,17 +704,19 @@ void makeNurbfaces(Nurb *nu, float *data, int rowstride)
if(nu->flagv & CU_CYCLIC) vend= fp[nu->pntsv+nu->orderv-1];
else vend= fp[nu->pntsv];
- vstep= (vend-vstart)/(resolv-1+(nu->flagv & CU_CYCLIC));
+ vstep= (vend-vstart)/((nu->flagv & CU_CYCLIC) ? totv : totv - 1);
+
len= KNOTSV(nu);
- basisv= (float *)MEM_mallocN(sizeof(float)*len*resolv, "makeNurbfaces3");
- jstart= (int *)MEM_mallocN(sizeof(float)*resolv, "makeNurbfaces4");
- jend= (int *)MEM_mallocN(sizeof(float)*resolv, "makeNurbfaces5");
+ basisv= (float *)MEM_mallocN(sizeof(float)*len*totv, "makeNurbfaces3");
+ jstart= (int *)MEM_mallocN(sizeof(float)*totv, "makeNurbfaces4");
+ jend= (int *)MEM_mallocN(sizeof(float)*totv, "makeNurbfaces5");
/* precalculation of basisv and jstart,jend */
if(nu->flagv & CU_CYCLIC) cycl= nu->orderv-1;
else cycl= 0;
v= vstart;
basis= basisv;
+ resolv= totv;
while(resolv--) {
basisNurb(v, nu->orderv, (short)(nu->pntsv+cycl), nu->knotsv, basis, jstart+resolv, jend+resolv);
basis+= KNOTSV(nu);
@@ -722,14 +725,15 @@ void makeNurbfaces(Nurb *nu, float *data, int rowstride)
if(nu->flagu & CU_CYCLIC) cycl= nu->orderu-1;
else cycl= 0;
- in= data;
+ in= coord_array;
u= ustart;
+ resolu= totu;
while(resolu--) {
basisNurb(u, nu->orderu, (short)(nu->pntsu+cycl), nu->knotsu, basisu, &istart, &iend);
basis= basisv;
- resolv= nu->resolv;
+ resolv= totv;
while(resolv--) {
jsta= jstart[resolv];
@@ -798,7 +802,7 @@ void makeNurbfaces(Nurb *nu, float *data, int rowstride)
basis+= KNOTSV(nu);
}
u+= ustep;
- if (rowstride!=0) in = (float*) (((unsigned char*) in) + (rowstride - 3*nu->resolv*sizeof(*in)));
+ if (rowstride!=0) in = (float*) (((unsigned char*) in) + (rowstride - 3*totv*sizeof(*in)));
}
/* free */
@@ -809,24 +813,26 @@ void makeNurbfaces(Nurb *nu, float *data, int rowstride)
MEM_freeN(jend);
}
-void makeNurbcurve(Nurb *nu, float *data, int resolu, int dim)
-/* data has to be dim*4*pntsu*resolu in size and zero-ed */
+void makeNurbcurve(Nurb *nu, float *coord_array, float *tilt_array, float *radius_array, int resolu)
+/* coord_array has to be 3*4*pntsu*resolu in size and zero-ed
+ * tilt_array and radius_array will be written to if valid */
{
BPoint *bp;
float u, ustart, uend, ustep, sumdiv;
- float *basisu, *sum, *fp, *in;
+ float *basisu, *sum, *fp;
+ float *coord_fp= coord_array, *tilt_fp= tilt_array, *radius_fp= radius_array;
int i, len, istart, iend, cycl;
if(nu->knotsu==NULL) return;
if(nu->orderu>nu->pntsu) return;
- if(data==0) return;
+ if(coord_array==0) return;
/* allocate and initialize */
len= nu->pntsu;
if(len==0) return;
sum= (float *)MEM_callocN(sizeof(float)*len, "makeNurbcurve1");
-
- resolu*= nu->pntsu;
+
+ resolu= (resolu*SEGMENTSU(nu))+1;
if(resolu==0) {
MEM_freeN(sum);
return;
@@ -836,13 +842,12 @@ void makeNurbcurve(Nurb *nu, float *data, int resolu, int dim)
ustart= fp[nu->orderu-1];
if(nu->flagu & CU_CYCLIC) uend= fp[nu->pntsu+nu->orderu-1];
else uend= fp[nu->pntsu];
- ustep= (uend-ustart)/(resolu-1+(nu->flagu & CU_CYCLIC));
+ ustep= (uend-ustart)/(resolu-1);
basisu= (float *)MEM_mallocN(sizeof(float)*KNOTSU(nu), "makeNurbcurve3");
if(nu->flagu & CU_CYCLIC) cycl= nu->orderu-1;
else cycl= 0;
- in= data;
u= ustart;
while(resolu--) {
@@ -877,17 +882,24 @@ void makeNurbcurve(Nurb *nu, float *data, int resolu, int dim)
if(*fp!=0.0) {
- in[0]+= (*fp) * bp->vec[0];
- in[1]+= (*fp) * bp->vec[1];
- if(dim>=3) {
- in[2]+= (*fp) * bp->vec[2];
- if(dim==4) in[3]+= (*fp) * bp->alfa;
- }
+ coord_fp[0]+= (*fp) * bp->vec[0];
+ coord_fp[1]+= (*fp) * bp->vec[1];
+ coord_fp[2]+= (*fp) * bp->vec[2];
+
+ if (tilt_fp)
+ (*tilt_fp) += (*fp) * bp->alfa;
+
+ if (radius_fp)
+ (*radius_fp) += (*fp) * bp->radius;
+
}
}
- in+= dim;
-
+ coord_fp+= 3;
+
+ if (tilt_fp) tilt_fp++;
+ if (radius_fp) radius_fp++;
+
u+= ustep;
}
@@ -932,7 +944,7 @@ float *make_orco_surf(Object *ob)
Nurb *nu;
int a, b, tot=0;
int sizeu, sizev;
- float *data, *orco;
+ float *fp, *coord_array;
/* first calculate the size of the datablock */
nu= cu->nurb.first;
@@ -946,8 +958,8 @@ float *make_orco_surf(Object *ob)
See also convertblender.c: init_render_surf()
*/
- sizeu = nu->resolu;
- sizev = nu->resolv;
+ sizeu = nu->pntsu*nu->resolu;
+ sizev = nu->pntsv*nu->resolv;
if (nu->flagu & CU_CYCLIC) sizeu++;
if (nu->flagv & CU_CYCLIC) sizev++;
if(nu->pntsv>1) tot+= sizeu * sizev;
@@ -955,13 +967,13 @@ float *make_orco_surf(Object *ob)
nu= nu->next;
}
/* makeNurbfaces wants zeros */
- data= orco= MEM_callocN(3*sizeof(float)*tot, "make_orco");
+ fp= coord_array= MEM_callocN(3*sizeof(float)*tot, "make_orco");
nu= cu->nurb.first;
while(nu) {
if(nu->pntsv>1) {
- sizeu = nu->resolu;
- sizev = nu->resolv;
+ sizeu = nu->pntsu*nu->resolu;
+ sizev = nu->pntsv*nu->resolv;
if (nu->flagu & CU_CYCLIC) sizeu++;
if (nu->flagv & CU_CYCLIC) sizev++;
@@ -969,20 +981,20 @@ float *make_orco_surf(Object *ob)
for(b=0; b< sizeu; b++) {
for(a=0; a< sizev; a++) {
- if(sizev <2) data[0]= 0.0f;
- else data[0]= -1.0f + 2.0f*((float)a)/(sizev - 1);
+ if(sizev <2) fp[0]= 0.0f;
+ else fp[0]= -1.0f + 2.0f*((float)a)/(sizev - 1);
- if(sizeu <2) data[1]= 0.0f;
- else data[1]= -1.0f + 2.0f*((float)b)/(sizeu - 1);
+ if(sizeu <2) fp[1]= 0.0f;
+ else fp[1]= -1.0f + 2.0f*((float)b)/(sizeu - 1);
- data[2]= 0.0;
+ fp[2]= 0.0;
- data+= 3;
+ fp+= 3;
}
}
}
else {
- float *_tdata= MEM_callocN(nu->resolu*nu->resolv*3*sizeof(float), "temp data");
+ float *_tdata= MEM_callocN((nu->pntsu*nu->resolu) * (nu->pntsv*nu->resolv) *3*sizeof(float), "temp data");
float *tdata= _tdata;
makeNurbfaces(nu, tdata, 0);
@@ -997,12 +1009,12 @@ float *make_orco_surf(Object *ob)
if (a==sizev-1 && (nu->flagv & CU_CYCLIC))
use_a= 0;
- tdata = _tdata + 3 * (use_b * nu->resolv + use_a);
+ tdata = _tdata + 3 * (use_b * (nu->pntsv*nu->resolv) + use_a);
- data[0]= (tdata[0]-cu->loc[0])/cu->size[0];
- data[1]= (tdata[1]-cu->loc[1])/cu->size[1];
- data[2]= (tdata[2]-cu->loc[2])/cu->size[2];
- data+= 3;
+ fp[0]= (tdata[0]-cu->loc[0])/cu->size[0];
+ fp[1]= (tdata[1]-cu->loc[1])/cu->size[1];
+ fp[2]= (tdata[2]-cu->loc[2])/cu->size[2];
+ fp+= 3;
}
}
@@ -1012,7 +1024,7 @@ float *make_orco_surf(Object *ob)
nu= nu->next;
}
- return orco;
+ return coord_array;
}
@@ -1024,7 +1036,7 @@ float *make_orco_curve(Object *ob)
Curve *cu = ob->data;
DispList *dl;
int u, v, numVerts;
- float *fp, *orco;
+ float *fp, *coord_array;
int remakeDisp = 0;
if (!(cu->flag&CU_UV_ORCO) && cu->key && cu->key->refkey) {
@@ -1052,7 +1064,7 @@ float *make_orco_curve(Object *ob)
}
}
- fp= orco= MEM_mallocN(3*sizeof(float)*numVerts, "cu_orco");
+ fp= coord_array= MEM_mallocN(3*sizeof(float)*numVerts, "cu_orco");
for (dl=cu->disp.first; dl; dl=dl->next) {
if (dl->type==DL_INDEX3) {
for (u=0; u<dl->nr; u++, fp+=3) {
@@ -1102,7 +1114,7 @@ float *make_orco_curve(Object *ob)
makeDispListCurveTypes(ob, 0);
}
- return orco;
+ return coord_array;
}
@@ -1429,7 +1441,7 @@ static void calc_bevel_sin_cos(float x1, float y1, float x2, float y2, float *si
}
-static void alfa_bezpart(BezTriple *prevbezt, BezTriple *bezt, Nurb *nu, float *data_a, int resolu)
+static void alfa_bezpart(BezTriple *prevbezt, BezTriple *bezt, Nurb *nu, float *tilt_array, float *radius_array, int resolu)
{
BezTriple *pprev, *next, *last;
float fac, dfac, t[4];
@@ -1455,10 +1467,30 @@ static void alfa_bezpart(BezTriple *prevbezt, BezTriple *bezt, Nurb *nu, float *
dfac= 1.0f/(float)resolu;
for(a=0; a<resolu; a++, fac+= dfac) {
+ if (tilt_array) {
+ if (nu->tilt_interp==3) { /* May as well support for tilt also 2.47 ease interp */
+ tilt_array[a] = prevbezt->alfa + (bezt->alfa - prevbezt->alfa)*(3.0f*fac*fac - 2.0f*fac*fac*fac);
+ } else {
+ set_four_ipo(fac, t, nu->tilt_interp);
+ tilt_array[a]= t[0]*pprev->alfa + t[1]*prevbezt->alfa + t[2]*bezt->alfa + t[3]*next->alfa;
+ }
+ }
- set_four_ipo(fac, t, nu->tilt_interp);
-
- data_a[a]= t[0]*pprev->alfa + t[1]*prevbezt->alfa + t[2]*bezt->alfa + t[3]*next->alfa;
+ if (radius_array) {
+ if (nu->radius_interp==3) {
+ /* Support 2.47 ease interp
+ * Note! - this only takes the 2 points into account,
+ * giving much more localized results to changes in radius, sometimes you want that */
+ radius_array[a] = prevbezt->radius + (bezt->radius - prevbezt->radius)*(3.0f*fac*fac - 2.0f*fac*fac*fac);
+ } else {
+
+ /* reuse interpolation from tilt if we can */
+ if (tilt_array==NULL || nu->tilt_interp != nu->radius_interp) {
+ set_four_ipo(fac, t, nu->radius_interp);
+ }
+ radius_array[a]= t[0]*pprev->radius + t[1]*prevbezt->radius + t[2]*bezt->radius + t[3]*next->radius;
+ }
+ }
}
}
@@ -1476,13 +1508,19 @@ void makeBevelList(Object *ob)
BPoint *bp;
BevList *bl, *blnew, *blnext;
BevPoint *bevp, *bevp2, *bevp1 = NULL, *bevp0;
- float *data, *data_a, *v1, *v2, min, inp, x1, x2, y1, y2, vec[3];
+ float min, inp, x1, x2, y1, y2, vec[3];
+ float *coord_array, *tilt_array=NULL, *radius_array=NULL, *coord_fp, *tilt_fp=NULL, *radius_fp=NULL;
+ float *v1, *v2;
struct bevelsort *sortdata, *sd, *sd1;
int a, b, nr, poly, resolu, len=0;
-
+ int do_tilt, do_radius;
+
/* this function needs an object, because of tflag and upflag */
cu= ob->data;
+ /* do we need to calculate the radius for each point? */
+ /* do_radius = (cu->bevobj || cu->taperobj || (cu->flag & CU_FRONT) || (cu->flag & CU_BACK)) ? 0 : 1; */
+
/* STEP 1: MAKE POLYS */
BLI_freelistN(&(cu->bev));
@@ -1490,10 +1528,15 @@ void makeBevelList(Object *ob)
else nu= cu->nurb.first;
while(nu) {
+
+ /* check if we will calculate tilt data */
+ do_tilt = ((nu->type & CU_2D) && (cu->flag & CU_3D)==0) ? 0 : 1;
+ do_radius = (do_tilt || cu->bevobj) ? 1 : 0; /* normal display uses the radius, better just to calculate them */
+
/* check we are a single point? also check we are not a surface and that the orderu is sane,
* enforced in the UI but can go wrong possibly */
if(!check_valid_nurb_u(nu)) {
- bl= MEM_callocN(sizeof(BevList)+1*sizeof(BevPoint), "makeBevelList");
+ bl= MEM_callocN(sizeof(BevList)+1*sizeof(BevPoint), "makeBevelList1");
BLI_addtail(&(cu->bev), bl);
bl->nr= 0;
} else {
@@ -1504,7 +1547,7 @@ void makeBevelList(Object *ob)
if((nu->type & 7)==CU_POLY) {
len= nu->pntsu;
- bl= MEM_callocN(sizeof(BevList)+len*sizeof(BevPoint), "makeBevelList");
+ bl= MEM_callocN(sizeof(BevList)+len*sizeof(BevPoint), "makeBevelList2");
BLI_addtail(&(cu->bev), bl);
if(nu->flagu & CU_CYCLIC) bl->poly= 0;
@@ -1519,7 +1562,8 @@ void makeBevelList(Object *ob)
bevp->y= bp->vec[1];
bevp->z= bp->vec[2];
bevp->alfa= bp->alfa;
- bevp->f1= 1;
+ bevp->radius= bp->radius;
+ bevp->f1= SELECT;
bevp++;
bp++;
}
@@ -1527,7 +1571,7 @@ void makeBevelList(Object *ob)
else if((nu->type & 7)==CU_BEZIER) {
len= resolu*(nu->pntsu+ (nu->flagu & CU_CYCLIC) -1)+1; /* in case last point is not cyclic */
- bl= MEM_callocN(sizeof(BevList)+len*sizeof(BevPoint), "makeBevelList");
+ bl= MEM_callocN(sizeof(BevList)+len*sizeof(BevPoint), "makeBevelBPoints");
BLI_addtail(&(cu->bev), bl);
if(nu->flagu & CU_CYCLIC) bl->poly= 0;
@@ -1545,8 +1589,13 @@ void makeBevelList(Object *ob)
bezt++;
}
- data= MEM_mallocN(3*sizeof(float)*(resolu+1), "makeBevelList2");
- data_a= MEM_callocN(sizeof(float)*(resolu+1), "data_a");
+ coord_array= coord_fp= MEM_mallocN(3*sizeof(float)*(resolu+1), "makeBevelCoords");
+
+ if(do_tilt)
+ tilt_array= tilt_fp= MEM_callocN(sizeof(float)*(resolu+1), "makeBevelTilt");
+
+ if (do_radius)
+ radius_array= radius_fp= MEM_callocN(sizeof(float)*(resolu+1), "nakeBevelRadius");
while(a--) {
if(prevbezt->h2==HD_VECT && bezt->h1==HD_VECT) {
@@ -1555,6 +1604,7 @@ void makeBevelList(Object *ob)
bevp->y= prevbezt->vec[1][1];
bevp->z= prevbezt->vec[1][2];
bevp->alfa= prevbezt->alfa;
+ bevp->radius= prevbezt->radius;
bevp->f1= SELECT;
bevp->f2= 0;
bevp++;
@@ -1566,38 +1616,44 @@ void makeBevelList(Object *ob)
v2= bezt->vec[0];
/* always do all three, to prevent data hanging around */
- forward_diff_bezier(v1[0], v1[3], v2[0], v2[3], data, resolu, 3);
- forward_diff_bezier(v1[1], v1[4], v2[1], v2[4], data+1, resolu, 3);
- forward_diff_bezier(v1[2], v1[5], v2[2], v2[5], data+2, resolu, 3);
-
- if((nu->type & CU_2D)==0) {
- if(cu->flag & CU_3D) {
- alfa_bezpart(prevbezt, bezt, nu, data_a, resolu);
- }
- }
+ forward_diff_bezier(v1[0], v1[3], v2[0], v2[3], coord_array, resolu, 3);
+ forward_diff_bezier(v1[1], v1[4], v2[1], v2[4], coord_array+1, resolu, 3);
+ forward_diff_bezier(v1[2], v1[5], v2[2], v2[5], coord_array+2, resolu, 3);
+ if (do_tilt || do_radius)
+ alfa_bezpart(prevbezt, bezt, nu, tilt_array, radius_array, resolu);
/* indicate with handlecodes double points */
if(prevbezt->h1==prevbezt->h2) {
- if(prevbezt->h1==0 || prevbezt->h1==HD_VECT) bevp->f1= 1;
+ if(prevbezt->h1==0 || prevbezt->h1==HD_VECT) bevp->f1= SELECT;
}
else {
- if(prevbezt->h1==0 || prevbezt->h1==HD_VECT) bevp->f1= 1;
- else if(prevbezt->h2==0 || prevbezt->h2==HD_VECT) bevp->f1= 1;
+ if(prevbezt->h1==0 || prevbezt->h1==HD_VECT) bevp->f1= SELECT;
+ else if(prevbezt->h2==0 || prevbezt->h2==HD_VECT) bevp->f1= SELECT;
}
- v1= data;
- v2= data_a;
nr= resolu;
+ coord_fp = coord_array;
+ tilt_fp = tilt_array;
+ radius_fp = radius_array;
+
while(nr--) {
- bevp->x= v1[0];
- bevp->y= v1[1];
- bevp->z= v1[2];
- bevp->alfa= v2[0];
+ bevp->x= coord_fp[0];
+ bevp->y= coord_fp[1];
+ bevp->z= coord_fp[2];
+ coord_fp+=3;
+
+ if (do_tilt) {
+ bevp->alfa= *tilt_fp;
+ tilt_fp++;
+ }
+
+ if (do_radius) {
+ bevp->radius= *radius_fp;
+ radius_fp++;
+ }
bevp++;
- v1+=3;
- v2++;
}
bl->nr+= resolu;
@@ -1606,22 +1662,24 @@ void makeBevelList(Object *ob)
bezt++;
}
- MEM_freeN(data);
- MEM_freeN(data_a);
+ MEM_freeN(coord_array);
+ if (do_tilt) MEM_freeN(tilt_array);
+ if (do_radius) MEM_freeN(radius_array);
+ coord_array = tilt_array = radius_array = NULL;
if((nu->flagu & CU_CYCLIC)==0) { /* not cyclic: endpoint */
bevp->x= prevbezt->vec[1][0];
bevp->y= prevbezt->vec[1][1];
bevp->z= prevbezt->vec[1][2];
bevp->alfa= prevbezt->alfa;
+ bevp->radius= prevbezt->radius;
bl->nr++;
}
-
}
else if((nu->type & 7)==CU_NURBS) {
if(nu->pntsv==1) {
- len= resolu*nu->pntsu;
- bl= MEM_mallocN(sizeof(BevList)+len*sizeof(BevPoint), "makeBevelList3");
+ len= (resolu*SEGMENTSU(nu))+1;
+ bl= MEM_callocN(sizeof(BevList)+len*sizeof(BevPoint), "makeBevelList3");
BLI_addtail(&(cu->bev), bl);
bl->nr= len;
bl->flag= 0;
@@ -1629,21 +1687,40 @@ void makeBevelList(Object *ob)
else bl->poly= -1;
bevp= (BevPoint *)(bl+1);
- data= MEM_callocN(4*sizeof(float)*len, "makeBevelList4"); /* has to be zero-ed */
- makeNurbcurve(nu, data, resolu, 4);
+ coord_array= coord_fp= MEM_callocN(3*sizeof(float)*len, "makeBevelCoords"); /* has to be zero-ed */
+
+ if(do_tilt)
+ tilt_array= tilt_fp= MEM_callocN(sizeof(float)*len, "makeBevelTilt");
+
+ if (do_radius)
+ radius_array= radius_fp= MEM_callocN(sizeof(float)*len, "nakeBevelRadius");
+
+ makeNurbcurve(nu, coord_array, tilt_array, radius_array, resolu);
- v1= data;
while(len--) {
- bevp->x= v1[0];
- bevp->y= v1[1];
- bevp->z= v1[2];
- bevp->alfa= v1[3];
+ bevp->x= coord_fp[0];
+ bevp->y= coord_fp[1];
+ bevp->z= coord_fp[2];
+ coord_fp+=3;
+
+ if (do_tilt) {
+ bevp->alfa= *tilt_fp;
+ tilt_fp++;
+ }
+
+ if (do_radius) {
+ bevp->radius= *radius_fp;
+ radius_fp++;
+ }
+
bevp->f1= bevp->f2= 0;
bevp++;
- v1+=4;
}
- MEM_freeN(data);
+ MEM_freeN(coord_array);
+ if (do_tilt) MEM_freeN(tilt_array);
+ if (do_radius) MEM_freeN(radius_array);
+ coord_array = tilt_array = radius_array = NULL;
}
}
}
@@ -1678,7 +1755,7 @@ void makeBevelList(Object *ob)
blnext= bl->next;
if(bl->nr && bl->flag) {
nr= bl->nr- bl->flag+1; /* +1 because vectorbezier sets flag too */
- blnew= MEM_mallocN(sizeof(BevList)+nr*sizeof(BevPoint), "makeBevelList");
+ blnew= MEM_mallocN(sizeof(BevList)+nr*sizeof(BevPoint), "makeBevelList4");
memcpy(blnew, bl, sizeof(BevList));
blnew->nr= 0;
BLI_remlink(&(cu->bev), bl);
@@ -1886,137 +1963,6 @@ void makeBevelList(Object *ob)
}
}
-/* calculates a bevel width (radius) for a particular subdivided curve part,
- * based on the radius value of the surrounding CVs */
-float calc_curve_subdiv_radius(Curve *cu, Nurb *nu, int cursubdiv)
-{
- BezTriple *bezt, *beztfirst, *beztlast, *beztnext, *beztprev;
- BPoint *bp, *bpfirst, *bplast;
- int resolu;
- float prevrad=0.0, nextrad=0.0, rad=0.0, ratio=0.0;
- int vectseg=0, subdivs=0;
-
- if((nu==NULL) || (nu->pntsu<=1)) return 1.0;
- bezt= nu->bezt;
- bp = nu->bp;
-
- if(G.rendering && cu->resolu_ren!=0) resolu= cu->resolu_ren;
- else resolu= nu->resolu;
-
- if(((nu->type & 7)==CU_BEZIER) && (bezt != NULL)) {
- beztfirst = nu->bezt;
- beztlast = nu->bezt + (nu->pntsu - 1);
-
- /* loop through the CVs to end up with a pointer to the CV before the subdiv in question, and a ratio
- * of how far that subdiv is between this CV and the next */
- while(bezt<=beztlast) {
- beztnext = bezt+1;
- beztprev = bezt-1;
- vectseg=0;
-
- if (subdivs==cursubdiv) {
- ratio= 0.0;
- break;
- }
-
- /* check to see if we're looking at a vector segment (no subdivisions) */
- if (nu->flagu & CU_CYCLIC) {
- if (bezt == beztfirst) {
- if ((beztlast->h2==HD_VECT) && (bezt->h1==HD_VECT)) vectseg = 1;
- } else {
- if ((beztprev->h2==HD_VECT) && (bezt->h1==HD_VECT)) vectseg = 1;
- }
- } else if ((bezt->h2==HD_VECT) && (beztnext->h1==HD_VECT)) vectseg = 1;
-
-
- if (vectseg==0) {
- /* if it's NOT a vector segment, check to see if the subdiv falls within the segment */
- subdivs += resolu;
-
- if (cursubdiv < subdivs) {
- ratio = 1.0 - ((subdivs - cursubdiv)/(float)resolu);
- break;
- }
- } else {
- /* must be a vector segment.. loop again! */
- subdivs += 1;
- }
-
- bezt++;
- }
-
- /* Now we have a nice bezt pointer to the CV that we want. But cyclic messes it up, so must correct for that..
- * (cyclic goes last-> first -> first+1 -> first+2 -> ...) */
- if (nu->flagu & CU_CYCLIC) {
- if (bezt == beztfirst) bezt = beztlast;
- else bezt--;
- }
-
- /* find the radii at the bounding CVs and interpolate between them based on ratio */
- rad = prevrad = bezt->radius;
-
- if ((bezt == beztlast) && (nu->flagu & CU_CYCLIC)) { /* loop around */
- bezt= beztfirst;
- } else if (bezt != beztlast) {
- bezt++;
- }
- nextrad = bezt->radius;
-
- }
- else if( ( ((nu->type & 7)==CU_NURBS) || ((nu->type & 7)==CU_POLY)) && (bp != NULL)) {
- /* follows similar algo as for bezt above */
- bpfirst = nu->bp;
- bplast = nu->bp + (nu->pntsu - 1);
-
- if ((nu->type & 7)==CU_POLY) resolu=1;
-
- while(bp<=bplast) {
- if (subdivs==cursubdiv) {
- ratio= 0.0;
- break;
- }
-
- subdivs += resolu;
-
- if (cursubdiv < subdivs) {
- ratio = 1.0 - ((subdivs - cursubdiv)/(float)resolu);
- break;
- }
-
- bp++;
- }
-
- if ( ((nu->type & 7)==CU_NURBS) && (nu->flagu & CU_CYCLIC)) {
- if (bp >= bplast) bp = bpfirst;
- else bp++;
- } else if ( bp > bplast ) {
- /* this can happen in rare cases, refer to bug [#8596] */
- bp = bplast;
- }
-
- rad = prevrad = bp->radius;
-
- if ((bp == bplast) && (nu->flagu & CU_CYCLIC)) { /* loop around */
- bp= bpfirst;
- } else if (bp < bplast) {
- bp++;
- }
- nextrad = bp->radius;
-
- }
-
-
- if (nextrad != prevrad) {
- /* smooth interpolation */
- rad = prevrad + (nextrad-prevrad)*(3.0f*ratio*ratio - 2.0f*ratio*ratio*ratio);
- }
-
- if (rad > 0.0)
- return rad;
- else
- return 1.0;
-}
-
/* ****************** HANDLES ************** */
/*
@@ -2385,9 +2331,9 @@ void sethandlesNurb(short code)
bezt= nu->bezt;
a= nu->pntsu;
while(a--) {
- if(bezt->f1 || bezt->f3) {
- if(bezt->f1) bezt->h1= code;
- if(bezt->f3) bezt->h2= code;
+ if((bezt->f1 & SELECT) || (bezt->f3 & SELECT)) {
+ if(bezt->f1 & SELECT) bezt->h1= code;
+ if(bezt->f3 & SELECT) bezt->h2= code;
if(bezt->h1!=bezt->h2) {
if ELEM(bezt->h1, HD_ALIGN, HD_AUTO) bezt->h1= HD_FREE;
if ELEM(bezt->h2, HD_ALIGN, HD_AUTO) bezt->h2= HD_FREE;
@@ -2415,8 +2361,8 @@ void sethandlesNurb(short code)
bezt= nu->bezt;
a= nu->pntsu;
while(a--) {
- if(bezt->f1 && bezt->h1) ok= 1;
- if(bezt->f3 && bezt->h2) ok= 1;
+ if((bezt->f1 & SELECT) && bezt->h1) ok= 1;
+ if((bezt->f3 & SELECT) && bezt->h2) ok= 1;
if(ok) break;
bezt++;
}
@@ -2432,8 +2378,8 @@ void sethandlesNurb(short code)
bezt= nu->bezt;
a= nu->pntsu;
while(a--) {
- if(bezt->f1) bezt->h1= ok;
- if(bezt->f3 ) bezt->h2= ok;
+ if(bezt->f1 & SELECT) bezt->h1= ok;
+ if(bezt->f3 & SELECT) bezt->h2= ok;
bezt++;
}
diff --git a/source/blender/blenkernel/intern/customdata.c b/source/blender/blenkernel/intern/customdata.c
index 2c1f6bb84c1..e93266c85f3 100644
--- a/source/blender/blenkernel/intern/customdata.c
+++ b/source/blender/blenkernel/intern/customdata.c
@@ -265,9 +265,9 @@ static void layerSwap_tface(void *data, int *corner_indices)
{
MTFace *tf = data;
float uv[4][2];
- const static short pin_flags[4] =
+ static const short pin_flags[4] =
{ TF_PIN1, TF_PIN2, TF_PIN3, TF_PIN4 };
- const static char sel_flags[4] =
+ static const char sel_flags[4] =
{ TF_SEL1, TF_SEL2, TF_SEL3, TF_SEL4 };
short unwrap = tf->unwrap & ~(TF_PIN1 | TF_PIN2 | TF_PIN3 | TF_PIN4);
char flag = tf->flag & ~(TF_SEL1 | TF_SEL2 | TF_SEL3 | TF_SEL4);
@@ -926,12 +926,9 @@ void *CustomData_add_layer_named(CustomData *data, int type, int alloctype,
int CustomData_free_layer(CustomData *data, int type, int totelem, int index)
{
int i;
- CustomDataLayer *layer;
if (index < 0) return 0;
- layer = &data->layers[index];
-
customData_free_layer__internal(&data->layers[index], totelem);
for (i=index+1; i < data->totlayer; ++i)
diff --git a/source/blender/blenkernel/intern/deform.c b/source/blender/blenkernel/intern/deform.c
index ab53571b62d..3143c5e4df2 100644
--- a/source/blender/blenkernel/intern/deform.c
+++ b/source/blender/blenkernel/intern/deform.c
@@ -220,3 +220,31 @@ void unique_vertexgroup_name (bDeformGroup *dg, Object *ob)
}
}
}
+
+float deformvert_get_weight(const struct MDeformVert *dvert, int group_num)
+{
+ if(dvert)
+ {
+ const MDeformWeight *dw = dvert->dw;
+ int i;
+
+ for(i=dvert->totweight; i>0; i--, dw++)
+ if(dw->def_nr == group_num)
+ return dw->weight;
+ }
+
+ /* Not found */
+ return 0.0;
+}
+
+float vertexgroup_get_vertex_weight(const struct MDeformVert *dvert, int index, int group_num)
+{
+ if(group_num == -1)
+ return 1.0;
+
+ if(dvert == 0)
+ return 0.0;
+
+ return deformvert_get_weight(dvert+index, group_num);
+}
+
diff --git a/source/blender/blenkernel/intern/depsgraph.c b/source/blender/blenkernel/intern/depsgraph.c
index 80f450000bb..7f4910a9765 100644
--- a/source/blender/blenkernel/intern/depsgraph.c
+++ b/source/blender/blenkernel/intern/depsgraph.c
@@ -581,9 +581,12 @@ static void build_dag_object(DagForest *dag, DagNode *scenenode, Object *ob, int
for(; psys; psys=psys->next) {
ParticleSettings *part= psys->part;
-
+
dag_add_relation(dag, node, node, DAG_RL_OB_DATA, "Particle-Object Relation");
+ if(psys->flag & PSYS_DISABLED || psys->flag & PSYS_DELETE)
+ continue;
+
if(part->phystype==PART_PHYS_KEYED && psys->keyed_ob &&
BLI_findlink(&psys->keyed_ob->particlesystem,psys->keyed_psys-1)) {
node2 = dag_get_node(dag, psys->keyed_ob);
@@ -862,12 +865,12 @@ DagNode * dag_get_sub_node (DagForest *forest,void * fob)
return node;
}
-void dag_add_relation(DagForest *forest, DagNode *fob1, DagNode *fob2, short rel, char *name)
+static void dag_add_parent_relation(DagForest *forest, DagNode *fob1, DagNode *fob2, short rel, char *name)
{
- DagAdjList *itA = fob1->child;
+ DagAdjList *itA = fob2->parent;
while (itA) { /* search if relation exist already */
- if (itA->node == fob2) {
+ if (itA->node == fob1) {
itA->type |= rel;
itA->count += 1;
return;
@@ -876,20 +879,23 @@ void dag_add_relation(DagForest *forest, DagNode *fob1, DagNode *fob2, short rel
}
/* create new relation and insert at head. MALLOC alert! */
itA = MEM_mallocN(sizeof(DagAdjList),"DAG adj list");
- itA->node = fob2;
+ itA->node = fob1;
itA->type = rel;
itA->count = 1;
- itA->next = fob1->child;
+ itA->next = fob2->parent;
itA->name = name;
- fob1->child = itA;
+ fob2->parent = itA;
}
-static void dag_add_parent_relation(DagForest *forest, DagNode *fob1, DagNode *fob2, short rel, char *name)
+void dag_add_relation(DagForest *forest, DagNode *fob1, DagNode *fob2, short rel, char *name)
{
- DagAdjList *itA = fob2->parent;
+ DagAdjList *itA = fob1->child;
+ /* parent relation is for cycle checking */
+ dag_add_parent_relation(forest, fob1, fob2, rel, name);
+
while (itA) { /* search if relation exist already */
- if (itA->node == fob1) {
+ if (itA->node == fob2) {
itA->type |= rel;
itA->count += 1;
return;
@@ -898,12 +904,12 @@ static void dag_add_parent_relation(DagForest *forest, DagNode *fob1, DagNode *f
}
/* create new relation and insert at head. MALLOC alert! */
itA = MEM_mallocN(sizeof(DagAdjList),"DAG adj list");
- itA->node = fob1;
+ itA->node = fob2;
itA->type = rel;
itA->count = 1;
- itA->next = fob2->parent;
+ itA->next = fob1->child;
itA->name = name;
- fob2->parent = itA;
+ fob1->child = itA;
}
static char *dag_node_name(DagNode *node)
@@ -963,6 +969,63 @@ static void dag_node_print_dependency_cycle(DagForest *dag, DagNode *startnode,
printf("\n");
}
+static int dag_node_recurs_level(DagNode *node, int level)
+{
+ DagAdjList *itA;
+ int newlevel;
+
+ node->color= DAG_BLACK; /* done */
+ newlevel= ++level;
+
+ for(itA= node->parent; itA; itA= itA->next) {
+ if(itA->node->color==DAG_WHITE) {
+ itA->node->ancestor_count= dag_node_recurs_level(itA->node, level);
+ newlevel= MAX2(newlevel, level+itA->node->ancestor_count);
+ }
+ else
+ newlevel= MAX2(newlevel, level+itA->node->ancestor_count);
+ }
+
+ return newlevel;
+}
+
+static void dag_check_cycle(DagForest *dag)
+{
+ DagNode *node;
+ DagAdjList *itA;
+
+ /* tag nodes unchecked */
+ for(node = dag->DagNode.first; node; node= node->next)
+ node->color= DAG_WHITE;
+
+ for(node = dag->DagNode.first; node; node= node->next) {
+ if(node->color==DAG_WHITE) {
+ node->ancestor_count= dag_node_recurs_level(node, 0);
+ }
+ }
+
+ /* check relations, and print errors */
+ for(node = dag->DagNode.first; node; node= node->next) {
+ for(itA= node->parent; itA; itA= itA->next) {
+ if(itA->node->ancestor_count > node->ancestor_count) {
+ if(node->ob && itA->node->ob) {
+ printf("Dependency cycle detected:\n");
+ dag_node_print_dependency_cycle(dag, itA->node, node, itA->name);
+ }
+ }
+ }
+ }
+
+ /* parent relations are only needed for cycle checking, so free now */
+ for(node = dag->DagNode.first; node; node= node->next) {
+ while (node->parent) {
+ itA = node->parent->next;
+ MEM_freeN(node->parent);
+ node->parent = itA;
+ }
+ }
+}
+
/*
* MainDAG is the DAG of all objects in current scene
* used only for drawing there is one also in each scene
@@ -1600,6 +1663,8 @@ void DAG_scene_sort(struct Scene *sce)
build_dag(sce, DAG_RL_ALL_BUT_DATA);
+ dag_check_cycle(sce->theDag);
+
nqueue = queue_create(DAGQUEUEALLOC);
for(node = sce->theDag->DagNode.first; node; node= node->next) {
@@ -1924,8 +1989,10 @@ static void dag_object_time_update_flags(Object *ob)
}
}
}
- else if(ob->scriptlink.totscript) ob->recalc |= OB_RECALC_OB;
- else if(ob->parent) {
+
+ if(ob->scriptlink.totscript) ob->recalc |= OB_RECALC_OB;
+
+ if(ob->parent) {
/* motion path or bone child */
if(ob->parent->type==OB_CURVE || ob->parent->type==OB_ARMATURE) ob->recalc |= OB_RECALC_OB;
}
@@ -1946,10 +2013,11 @@ static void dag_object_time_update_flags(Object *ob)
}
}
}
- else if(modifiers_isSoftbodyEnabled(ob)) ob->recalc |= OB_RECALC_DATA;
- else if(object_modifiers_use_time(ob)) ob->recalc |= OB_RECALC_DATA;
- else if((ob->pose) && (ob->pose->flag & POSE_CONSTRAINTS_TIMEDEPEND)) ob->recalc |= OB_RECALC_DATA;
- else {
+
+ if(object_modifiers_use_time(ob)) ob->recalc |= OB_RECALC_DATA;
+ if((ob->pose) && (ob->pose->flag & POSE_CONSTRAINTS_TIMEDEPEND)) ob->recalc |= OB_RECALC_DATA;
+
+ {
Mesh *me;
Curve *cu;
Lattice *lt;
@@ -1963,12 +2031,6 @@ static void dag_object_time_update_flags(Object *ob)
ob->shapeflag &= ~OB_SHAPE_TEMPLOCK;
}
}
- if((ob->fluidsimFlag & OB_FLUIDSIM_ENABLE) && (ob->fluidsimSettings)) {
- // fluidsimSettings might not be initialized during load...
- if(ob->fluidsimSettings->type & (OB_FLUIDSIM_DOMAIN|OB_FLUIDSIM_PARTICLE)) {
- ob->recalc |= OB_RECALC_DATA; // NT FSPARTICLE
- }
- }
if(ob->particlesystem.first)
ob->recalc |= OB_RECALC_DATA;
break;
@@ -2206,57 +2268,6 @@ void DAG_object_update_flags(Scene *sce, Object *ob, unsigned int lay)
/* ******************* DAG FOR ARMATURE POSE ***************** */
-static int node_recurs_level(DagNode *node, int level)
-{
- DagAdjList *itA;
- int newlevel;
-
- node->color= DAG_BLACK; /* done */
- newlevel= ++level;
-
- for(itA= node->parent; itA; itA= itA->next) {
- if(itA->node->color==DAG_WHITE) {
- itA->node->ancestor_count= node_recurs_level(itA->node, level);
- newlevel= MAX2(newlevel, level+itA->node->ancestor_count);
- }
- else
- newlevel= MAX2(newlevel, level+itA->node->ancestor_count);
- }
-
- return newlevel;
-}
-
-static void pose_check_cycle(DagForest *dag)
-{
- DagNode *node;
- DagAdjList *itA;
-
- /* tag nodes unchecked */
- for(node = dag->DagNode.first; node; node= node->next)
- node->color= DAG_WHITE;
-
- for(node = dag->DagNode.first; node; node= node->next) {
- if(node->color==DAG_WHITE) {
- node->ancestor_count= node_recurs_level(node, 0);
- }
- }
-
- /* check relations, and print errors */
- for(node = dag->DagNode.first; node; node= node->next) {
- for(itA= node->parent; itA; itA= itA->next) {
- if(itA->node->ancestor_count > node->ancestor_count) {
- bPoseChannel *pchan= (bPoseChannel *)node->ob;
- bPoseChannel *parchan= (bPoseChannel *)itA->node->ob;
-
- if(pchan && parchan) {
- printf("Cycle detected:\n");
- dag_node_print_dependency_cycle(dag, itA->node, node, itA->name);
- }
- }
- }
- }
-}
-
/* we assume its an armature with pose */
void DAG_pose_sort(Object *ob)
{
@@ -2286,7 +2297,6 @@ void DAG_pose_sort(Object *ob)
if(pchan->parent) {
node2 = dag_get_node(dag, pchan->parent);
dag_add_relation(dag, node2, node, 0, "Parent Relation");
- dag_add_parent_relation(dag, node2, node, 0, "Parent Relation");
addtoroot = 0;
}
for (con = pchan->constraints.first; con; con=con->next) {
@@ -2305,7 +2315,6 @@ void DAG_pose_sort(Object *ob)
if(target) {
node2 = dag_get_node(dag, target);
dag_add_relation(dag, node2, node, 0, "Ipo Driver");
- dag_add_parent_relation(dag, node2, node, 0, "Ipo Driver");
/* uncommented this line, results in dependencies
* not being added properly for this constraint,
@@ -2325,7 +2334,6 @@ void DAG_pose_sort(Object *ob)
if (target) {
node2= dag_get_node(dag, target);
dag_add_relation(dag, node2, node, 0, "IK Constraint");
- dag_add_parent_relation(dag, node2, node, 0, "IK Constraint");
if (con->type==CONSTRAINT_TYPE_KINEMATIC) {
bKinematicConstraint *data = (bKinematicConstraint *)con->data;
@@ -2342,7 +2350,6 @@ void DAG_pose_sort(Object *ob)
while (parchan) {
node3= dag_get_node(dag, parchan);
dag_add_relation(dag, node2, node3, 0, "IK Constraint");
- dag_add_parent_relation(dag, node2, node3, 0, "IK Constraint");
segcount++;
if (segcount==data->rootbone || segcount>255) break; // 255 is weak
@@ -2359,11 +2366,10 @@ void DAG_pose_sort(Object *ob)
}
if (addtoroot == 1 ) {
dag_add_relation(dag, rootnode, node, 0, "Root Bone Relation");
- dag_add_parent_relation(dag, rootnode, node, 0, "Root Bone Relation");
}
}
- pose_check_cycle(dag);
+ dag_check_cycle(dag);
/* now we try to sort... */
tempbase.first= tempbase.last= NULL;
diff --git a/source/blender/blenkernel/intern/displist.c b/source/blender/blenkernel/intern/displist.c
index 298e4b81d5b..be24d1d2474 100644
--- a/source/blender/blenkernel/intern/displist.c
+++ b/source/blender/blenkernel/intern/displist.c
@@ -88,6 +88,8 @@
#include "RE_pipeline.h"
#include "RE_shader_ext.h"
+#include "BLO_sys_types.h" // for intptr_t support
+
static void boundbox_displist(Object *ob);
@@ -755,7 +757,10 @@ void reshadeall_displist(void)
for(base= G.scene->base.first; base; base= base->next) {
ob= base->object;
- freedisplist(&ob->disp);
+
+ if(ELEM5(ob->type, OB_MESH, OB_CURVE, OB_SURF, OB_FONT, OB_MBALL))
+ freedisplist(&ob->disp);
+
if(base->lay & G.scene->lay) {
/* Metaballs have standard displist at the Object */
if(ob->type==OB_MBALL) shadeDispList(base);
@@ -853,7 +858,8 @@ static void curve_to_displist(Curve *cu, ListBase *nubase, ListBase *dispbase)
}
}
else if((nu->type & 7)==CU_NURBS) {
- len= nu->pntsu*resolu;
+ len= (resolu*SEGMENTSU(nu))+1;
+
dl= MEM_callocN(sizeof(DispList), "makeDispListsurf");
dl->verts= MEM_callocN(len*3*sizeof(float), "dlverts");
BLI_addtail(dispbase, dl);
@@ -865,7 +871,7 @@ static void curve_to_displist(Curve *cu, ListBase *nubase, ListBase *dispbase)
data= dl->verts;
if(nu->flagu & CU_CYCLIC) dl->type= DL_POLY;
else dl->type= DL_SEGM;
- makeNurbcurve(nu, data, resolu, 3);
+ makeNurbcurve(nu, data, NULL, NULL, resolu);
}
else if((nu->type & 7)==CU_POLY) {
len= nu->pntsu;
@@ -986,9 +992,9 @@ void filldisplist(ListBase *dispbase, ListBase *to)
efa= fillfacebase.first;
index= dlnew->index;
while(efa) {
- index[0]= (long)efa->v1->tmp.l;
- index[1]= (long)efa->v2->tmp.l;
- index[2]= (long)efa->v3->tmp.l;
+ index[0]= (intptr_t)efa->v1->tmp.l;
+ index[1]= (intptr_t)efa->v2->tmp.l;
+ index[2]= (intptr_t)efa->v3->tmp.l;
index+= 3;
efa= efa->next;
@@ -1228,7 +1234,7 @@ void curve_calc_modifiers_pre(Object *ob, ListBase *nurb, int forRender, float (
*numVerts_r = numVerts;
}
-void curve_calc_modifiers_post(Object *ob, ListBase *nurb, ListBase *dispbase, int forRender, float (*originalVerts)[3], float (*deformedVerts)[3])
+static void curve_calc_modifiers_post(Object *ob, ListBase *nurb, ListBase *dispbase, int forRender, float (*originalVerts)[3], float (*deformedVerts)[3])
{
int editmode = (!forRender && ob==G.obedit);
ModifierData *md = modifiers_getVirtualModifierList(ob);
@@ -1317,7 +1323,7 @@ void makeDispListSurf(Object *ob, ListBase *dispbase, int forRender)
for (nu=nubase->first; nu; nu=nu->next) {
if(forRender || nu->hide==0) {
if(nu->pntsv==1) {
- len= nu->pntsu*nu->resolu;
+ len= nu->resolu*SEGMENTSU(nu)+1;
dl= MEM_callocN(sizeof(DispList), "makeDispListsurf");
dl->verts= MEM_callocN(len*3*sizeof(float), "dlverts");
@@ -1333,10 +1339,10 @@ void makeDispListSurf(Object *ob, ListBase *dispbase, int forRender)
if(nu->flagu & CU_CYCLIC) dl->type= DL_POLY;
else dl->type= DL_SEGM;
- makeNurbcurve(nu, data, nu->resolu, 3);
+ makeNurbcurve(nu, data, NULL, NULL, nu->resolu);
}
else {
- len= nu->resolu*nu->resolv;
+ len= (nu->pntsu*nu->resolu) * (nu->pntsv*nu->resolv);
dl= MEM_callocN(sizeof(DispList), "makeDispListsurf");
dl->verts= MEM_callocN(len*3*sizeof(float), "dlverts");
@@ -1348,9 +1354,9 @@ void makeDispListSurf(Object *ob, ListBase *dispbase, int forRender)
data= dl->verts;
dl->type= DL_SURF;
-
- dl->parts= nu->resolu; /* in reverse, because makeNurbfaces works that way */
- dl->nr= nu->resolv;
+
+ dl->parts= (nu->pntsu*nu->resolu); /* in reverse, because makeNurbfaces works that way */
+ dl->nr= (nu->pntsv*nu->resolv);
if(nu->flagv & CU_CYCLIC) dl->flag|= DL_CYCL_U; /* reverse too! */
if(nu->flagu & CU_CYCLIC) dl->flag|= DL_CYCL_V;
@@ -1480,7 +1486,7 @@ void makeDispListCurveTypes(Object *ob, int forOrco)
float fac=1.0;
if (cu->taperobj==NULL) {
if ( (cu->bevobj!=NULL) || !((cu->flag & CU_FRONT) || (cu->flag & CU_BACK)) )
- fac = calc_curve_subdiv_radius(cu, nu, a);
+ fac = bevp->radius;
} else {
fac = calc_taper(cu->taperobj, a, bl->nr);
}
diff --git a/source/blender/blenkernel/intern/effect.c b/source/blender/blenkernel/intern/effect.c
index 4588ef800e1..122c6c71a6c 100644
--- a/source/blender/blenkernel/intern/effect.c
+++ b/source/blender/blenkernel/intern/effect.c
@@ -59,6 +59,7 @@
#include "BKE_armature.h"
#include "BKE_bad_level_calls.h"
#include "BKE_blender.h"
+#include "BKE_collision.h"
#include "BKE_constraint.h"
#include "BKE_deform.h"
#include "BKE_depsgraph.h"
@@ -157,6 +158,13 @@ static void add_to_effectorcache(ListBase *lb, Object *ob, Object *obsrc)
}
}
else if(pd->forcefield) {
+
+ if(pd->forcefield == PFIELD_WIND)
+ {
+ pd->rng = rng_new(1);
+ rng_srandom(pd->rng, (unsigned int)(ceil(PIL_check_seconds_timer()))); // use better seed
+ }
+
ec= MEM_callocN(sizeof(pEffectorCache), "effector cache");
ec->ob= ob;
BLI_addtail(lb, ec);
@@ -205,13 +213,288 @@ void pdEndEffectors(ListBase *lb)
pEffectorCache *ec;
/* restore full copy */
for(ec= lb->first; ec; ec= ec->next)
+ {
+ if(ec->ob->pd && (ec->ob->pd->forcefield == PFIELD_WIND))
+ rng_free(ec->ob->pd->rng);
+
*(ec->ob)= ec->obcopy;
+ }
BLI_freelistN(lb);
}
}
+/************************************************/
+/* Effectors */
+/************************************************/
+
+// triangle - ray callback function
+static void eff_tri_ray_hit(void *userdata, int index, const BVHTreeRay *ray, BVHTreeRayHit *hit)
+{
+ // whenever we hit a bounding box, we don't check further
+ hit->dist = -1;
+ hit->index = 1;
+}
+
+// get visibility of a wind ray
+static float eff_calc_visibility(Object *ob, float *co, float *dir)
+{
+ CollisionModifierData **collobjs = NULL;
+ int numcollobj = 0, i;
+ float norm[3], len = 0.0;
+ float visibility = 1.0;
+
+ collobjs = get_collisionobjects(ob, &numcollobj);
+
+ if(!collobjs)
+ return 0;
+
+ VECCOPY(norm, dir);
+ VecMulf(norm, -1.0);
+ len = Normalize(norm);
+
+ // check all collision objects
+ for(i = 0; i < numcollobj; i++)
+ {
+ CollisionModifierData *collmd = collobjs[i];
+
+ if(collmd->bvhtree)
+ {
+ BVHTreeRayHit hit;
+
+ hit.index = -1;
+ hit.dist = len + FLT_EPSILON;
+
+ // check if the way is blocked
+ if(BLI_bvhtree_ray_cast(collmd->bvhtree, co, norm, 0.0f, &hit, eff_tri_ray_hit, NULL)>=0)
+ {
+ // visibility is only between 0 and 1, calculated from 1-absorption
+ visibility *= MAX2(0.0, MIN2(1.0, (1.0-((float)collmd->absorption)*0.01)));
+
+ if(visibility <= 0.0f)
+ break;
+ }
+ }
+ }
+
+ MEM_freeN(collobjs);
+
+ return visibility;
+}
+
+// noise function for wind e.g.
+static float wind_func(struct RNG *rng, float strength)
+{
+ int random = (rng_getInt(rng)+1) % 65535; // max 2357
+ float force = rng_getFloat(rng) + 1.0f;
+ float ret;
+ float sign = 0;
+
+ sign = (random > 32000.0) ? 1.0: -1.0; // dividing by 2 is not giving equal sign distribution
+
+ ret = sign*((float)random / force)*strength/65535.0f;
+
+ return ret;
+}
+
+
+static float falloff_func(float fac, int usemin, float mindist, int usemax, float maxdist, float power)
+{
+ if(!usemin)
+ mindist= 0.0f;
+
+ if(fac < mindist) {
+ return 1.0f;
+ }
+ else if(usemax) {
+ if(fac>maxdist || (maxdist-mindist)<=0.0f)
+ return 0.0f;
+
+ fac= (fac-mindist)/(maxdist-mindist);
+ return 1.0f - (float)pow((double)fac, (double)power);
+ }
+ else
+ return pow((double)1.0f+fac-mindist, (double)-power);
+}
+
+static float falloff_func_dist(PartDeflect *pd, float fac)
+{
+ return falloff_func(fac, pd->flag&PFIELD_USEMIN, pd->mindist, pd->flag&PFIELD_USEMAX, pd->maxdist, pd->f_power);
+}
+
+static float falloff_func_rad(PartDeflect *pd, float fac)
+{
+ return falloff_func(fac, pd->flag&PFIELD_USEMINR, pd->minrad, pd->flag&PFIELD_USEMAXR, pd->maxrad, pd->f_power_r);
+}
+
+float effector_falloff(PartDeflect *pd, float *eff_velocity, float *vec_to_part)
+{
+ float eff_dir[3], temp[3];
+ float falloff=1.0, fac, r_fac;
+
+ if(pd->forcefield==PFIELD_LENNARDJ)
+ return falloff; /* Lennard-Jones field has it's own falloff built in */
+
+ VecCopyf(eff_dir,eff_velocity);
+ Normalize(eff_dir);
+
+ if(pd->flag & PFIELD_POSZ && Inpf(eff_dir,vec_to_part)<0.0f)
+ falloff=0.0f;
+ else switch(pd->falloff){
+ case PFIELD_FALL_SPHERE:
+ fac=VecLength(vec_to_part);
+ falloff= falloff_func_dist(pd, fac);
+ break;
+
+ case PFIELD_FALL_TUBE:
+ fac=Inpf(vec_to_part,eff_dir);
+ falloff= falloff_func_dist(pd, ABS(fac));
+ if(falloff == 0.0f)
+ break;
+
+ VECADDFAC(temp,vec_to_part,eff_dir,-fac);
+ r_fac=VecLength(temp);
+ falloff*= falloff_func_rad(pd, r_fac);
+ break;
+ case PFIELD_FALL_CONE:
+ fac=Inpf(vec_to_part,eff_dir);
+ falloff= falloff_func_dist(pd, ABS(fac));
+ if(falloff == 0.0f)
+ break;
+
+ r_fac=saacos(fac/VecLength(vec_to_part))*180.0f/(float)M_PI;
+ falloff*= falloff_func_rad(pd, r_fac);
+
+ break;
+ }
+
+ return falloff;
+}
+
+void do_physical_effector(Object *ob, float *opco, short type, float force_val, float distance, float falloff, float size, float damp, float *eff_velocity, float *vec_to_part, float *velocity, float *field, int planar, struct RNG *rng, float noise_factor, float charge, float pa_size)
+{
+ float mag_vec[3]={0,0,0};
+ float temp[3], temp2[3];
+ float eff_vel[3];
+ float noise = 0, visibility;
+
+ // calculate visibility
+ visibility = eff_calc_visibility(ob, opco, vec_to_part);
+ if(visibility <= 0.0)
+ return;
+ falloff *= visibility;
+
+ VecCopyf(eff_vel,eff_velocity);
+ Normalize(eff_vel);
+
+ switch(type){
+ case PFIELD_WIND:
+ VECCOPY(mag_vec,eff_vel);
+
+ // add wind noise here, only if we have wind
+ if((noise_factor > 0.0f) && (force_val > FLT_EPSILON))
+ noise = wind_func(rng, noise_factor);
+
+ VecMulf(mag_vec,(force_val+noise)*falloff);
+ VecAddf(field,field,mag_vec);
+ break;
+
+ case PFIELD_FORCE:
+ if(planar)
+ Projf(mag_vec,vec_to_part,eff_vel);
+ else
+ VecCopyf(mag_vec,vec_to_part);
+
+ Normalize(mag_vec);
+
+ VecMulf(mag_vec,force_val*falloff);
+ VecAddf(field,field,mag_vec);
+ break;
+
+ case PFIELD_VORTEX:
+ Crossf(mag_vec,eff_vel,vec_to_part);
+
+ Normalize(mag_vec);
+
+ VecMulf(mag_vec,force_val*distance*falloff);
+ VecAddf(field,field,mag_vec);
+
+ break;
+ case PFIELD_MAGNET:
+ if(planar)
+ VecCopyf(temp,eff_vel);
+ else
+ /* magnetic field of a moving charge */
+ Crossf(temp,eff_vel,vec_to_part);
+
+ Normalize(temp);
+
+ Crossf(temp2,velocity,temp);
+ VecAddf(mag_vec,mag_vec,temp2);
+
+ VecMulf(mag_vec,force_val*falloff);
+ VecAddf(field,field,mag_vec);
+ break;
+ case PFIELD_HARMONIC:
+ if(planar)
+ Projf(mag_vec,vec_to_part,eff_vel);
+ else
+ VecCopyf(mag_vec,vec_to_part);
+
+ Normalize(mag_vec);
+
+ VecMulf(mag_vec,force_val*falloff);
+ VecSubf(field,field,mag_vec);
+
+ VecCopyf(mag_vec,velocity);
+ /* 1.9 is an experimental value to get critical damping at damp=1.0 */
+ VecMulf(mag_vec,damp*1.9f*(float)sqrt(force_val));
+ VecSubf(field,field,mag_vec);
+ break;
+ case PFIELD_CHARGE:
+ if(planar)
+ Projf(mag_vec,vec_to_part,eff_vel);
+ else
+ VecCopyf(mag_vec,vec_to_part);
+
+ Normalize(mag_vec);
+
+ VecMulf(mag_vec,charge*force_val*falloff);
+ VecAddf(field,field,mag_vec);
+ break;
+ case PFIELD_LENNARDJ:
+ {
+ float fac;
+
+ if(planar) {
+ Projf(mag_vec,vec_to_part,eff_vel);
+ distance = VecLength(mag_vec);
+ }
+ else
+ VecCopyf(mag_vec,vec_to_part);
+
+ /* at this distance the field is 60 times weaker than maximum */
+ if(distance > 2.22 * (size+pa_size))
+ break;
+
+ fac = pow((size+pa_size)/distance,6.0);
+
+ fac = - fac * (1.0 - fac) / distance;
+
+ /* limit the repulsive term drastically to avoid huge forces */
+ fac = ((fac>2.0) ? 2.0 : fac);
+
+ /* 0.003715 is the fac value at 2.22 times (size+pa_size),
+ substracted to avoid discontinuity at the border
+ */
+ VecMulf(mag_vec, force_val * (fac-0.0037315));
+ VecAddf(field,field,mag_vec);
+ break;
+ }
+ }
+}
+
/* -------- pdDoEffectors() --------
generic force/speed system, now used for particles and softbodies
lb = listbase with objects that take part in effecting
@@ -243,14 +526,9 @@ void pdDoEffectors(ListBase *lb, float *opco, float *force, float *speed, float
Object *ob;
pEffectorCache *ec;
PartDeflect *pd;
- float vect_to_vert[3];
- float f_force, force_vec[3];
- float *obloc;
- float distance, force_val, ffall_val;
- float guidecollect[3], guidedist= 0.0f;
- int cur_frame;
- guidecollect[0]= guidecollect[1]= guidecollect[2]=0.0f;
+ float distance, vec_to_part[3];
+ float falloff;
/* Cycle through collected objects, get total of (1/(gravity_strength * dist^gravity_power)) */
/* Check for min distance here? (yes would be cool to add that, ton) */
@@ -261,178 +539,28 @@ void pdDoEffectors(ListBase *lb, float *opco, float *force, float *speed, float
pd= ob->pd;
/* Get IPO force strength and fall off values here */
- if (has_ipo_code(ob->ipo, OB_PD_FSTR))
- force_val = IPO_GetFloatValue(ob->ipo, OB_PD_FSTR, cur_time);
- else
- force_val = pd->f_strength;
-
- if (has_ipo_code(ob->ipo, OB_PD_FFALL))
- ffall_val = IPO_GetFloatValue(ob->ipo, OB_PD_FFALL, cur_time);
- else
- ffall_val = pd->f_power;
-
- /* Need to set r.cfra for paths (investigate, ton) (uses ob->ctime now, ton) */
- if(ob->ctime!=cur_time) {
- cur_frame = G.scene->r.cfra;
- G.scene->r.cfra = (int)cur_time;
- where_is_object_time(ob, cur_time);
- G.scene->r.cfra = cur_frame;
- }
+ where_is_object_time(ob,cur_time);
/* use center of object for distance calculus */
- obloc= ob->obmat[3];
- VECSUB(vect_to_vert, obloc, opco);
- distance = VecLength(vect_to_vert);
-
- if((pd->flag & PFIELD_USEMAX) && distance>pd->maxdist && pd->forcefield != PFIELD_GUIDE)
- ; /* don't do anything */
- else if((pd->flag & PFIELD_USEMIN) && distance<pd->mindist && pd->forcefield != PFIELD_GUIDE)
+ VecSubf(vec_to_part, opco, ob->obmat[3]);
+ distance = VecLength(vec_to_part);
+
+ falloff=effector_falloff(pd,ob->obmat[2],vec_to_part);
+
+ if(falloff<=0.0f)
; /* don't do anything */
- else if(pd->forcefield == PFIELD_WIND) {
- VECCOPY(force_vec, ob->obmat[2]);
-
- /* wind works harder perpendicular to normal, would be nice for softbody later (ton) */
-
- /* Limit minimum distance to vertex so that */
- /* the force is not too big */
- if (distance < 0.001) distance = 0.001f;
- f_force = (force_val)*(1/(1000 * (float)pow((double)distance, (double)ffall_val)));
- /* this option for softbody only */
- if(flags && PE_WIND_AS_SPEED){
- speed[0] -= (force_vec[0] * f_force );
- speed[1] -= (force_vec[1] * f_force );
- speed[2] -= (force_vec[2] * f_force );
- }
- else{
- force[0] += force_vec[0]*f_force;
- force[1] += force_vec[1]*f_force;
- force[2] += force_vec[2]*f_force;
- }
- }
- else if(pd->forcefield == PFIELD_FORCE) {
-
- /* only use center of object */
- obloc= ob->obmat[3];
-
- /* Now calculate the gravitational force */
- VECSUB(vect_to_vert, obloc, opco);
- distance = VecLength(vect_to_vert);
-
- /* Limit minimum distance to vertex so that */
- /* the force is not too big */
- if (distance < 0.001) distance = 0.001f;
- f_force = (force_val)*(1.0/(1000.0 * (float)pow((double)distance, (double)ffall_val)));
- force[0] += (vect_to_vert[0] * f_force );
- force[1] += (vect_to_vert[1] * f_force );
- force[2] += (vect_to_vert[2] * f_force );
- }
- else if(pd->forcefield == PFIELD_VORTEX) {
- float vortexvec[3];
+ else {
+ float field[3]={0,0,0}, tmp[3];
+ VECCOPY(field, force);
+ do_physical_effector(ob, opco, pd->forcefield,pd->f_strength,distance,
+ falloff,pd->f_dist,pd->f_damp,ob->obmat[2],vec_to_part,
+ speed,force,pd->flag&PFIELD_PLANAR, pd->rng, pd->f_noise, 0.0f, 0.0f);
- /* only use center of object */
- obloc= ob->obmat[3];
-
- /* Now calculate the vortex force */
- VECSUB(vect_to_vert, obloc, opco);
- distance = VecLength(vect_to_vert);
-
- Crossf(force_vec, ob->obmat[2], vect_to_vert);
- Normalize(force_vec);
-
- /* Limit minimum distance to vertex so that */
- /* the force is not too big */
- if (distance < 0.001) distance = 0.001f;
- f_force = (force_val)*(1.0/(100.0 * (float)pow((double)distance, (double)ffall_val)));
- vortexvec[0]= -(force_vec[0] * f_force );
- vortexvec[1]= -(force_vec[1] * f_force );
- vortexvec[2]= -(force_vec[2] * f_force );
-
- /* this option for softbody only */
- if(flags &&PE_WIND_AS_SPEED) {
- speed[0]+= vortexvec[0];
- speed[1]+= vortexvec[1];
- speed[2]+= vortexvec[2];
- }
- else {
- /* since vortex alters the speed, we have to correct for the previous vortex result */
- speed[0]+= vortexvec[0] - ec->oldspeed[0];
- speed[1]+= vortexvec[1] - ec->oldspeed[1];
- speed[2]+= vortexvec[2] - ec->oldspeed[2];
-
- VECCOPY(ec->oldspeed, vortexvec);
+ // for softbody backward compatibility
+ if(flags & PE_WIND_AS_SPEED){
+ VECSUB(tmp, force, field);
+ VECSUB(speed, speed, tmp);
}
}
- else if(pd->forcefield == PFIELD_GUIDE) {
- float guidevec[4], guidedir[3];
- float mindist= force_val; /* force_val is actually mindist in the UI */
-
- distance= ec->guide_dist;
-
- /* WARNING: bails out with continue here */
- if((pd->flag & PFIELD_USEMAX) && distance>pd->maxdist) continue;
-
- /* calculate contribution factor for this guide */
- if(distance<=mindist) f_force= 1.0f;
- else if(pd->flag & PFIELD_USEMAX) {
- if(distance>pd->maxdist || mindist>=pd->maxdist) f_force= 0.0f;
- else {
- f_force= 1.0f - (distance-mindist)/(pd->maxdist - mindist);
- if(ffall_val!=0.0f)
- f_force = (float)pow(f_force, ffall_val+1.0);
- }
- }
- else {
- f_force= 1.0f/(1.0f + distance-mindist);
- if(ffall_val!=0.0f)
- f_force = (float)pow(f_force, ffall_val+1.0);
- }
-
- /* now derive path point from loc_time */
- if(pd->flag & PFIELD_GUIDE_PATH_ADD)
- where_on_path(ob, f_force*loc_time*ec->time_scale, guidevec, guidedir);
- else
- where_on_path(ob, loc_time*ec->time_scale, guidevec, guidedir);
-
- VECSUB(guidedir, guidevec, ec->oldloc);
- VECCOPY(ec->oldloc, guidevec);
-
- Mat4Mul3Vecfl(ob->obmat, guidedir);
- VecMulf(guidedir, ec->scale); /* correction for lifetime and speed */
-
- /* we subtract the speed we gave it previous step */
- VECCOPY(guidevec, guidedir);
- VECSUB(guidedir, guidedir, ec->oldspeed);
- VECCOPY(ec->oldspeed, guidevec);
-
- /* if it fully contributes, we stop */
- if(f_force==1.0) {
- VECCOPY(guidecollect, guidedir);
- guidedist= 1.0f;
- break;
- }
- else if(guidedist<1.0f) {
- VecMulf(guidedir, f_force);
- VECADD(guidecollect, guidecollect, guidedir);
- guidedist += f_force;
- }
- }
- }
-
- /* all guides are accumulated here */
- if(guidedist!=0.0f) {
- if(guidedist!=1.0f) VecMulf(guidecollect, 1.0f/guidedist);
- VECADD(speed, speed, guidecollect);
}
}
-
-
-/* for paf start to end, store all matrices for objects */
-typedef struct pMatrixCache {
- float obmat[4][4];
- float imat[3][3];
-} pMatrixCache;
-
-/* for fluidsim win32 debug messages */
-#if defined(WIN32) && (!(defined snprintf))
-#define snprintf _snprintf
-#endif
diff --git a/source/blender/blenkernel/intern/exotic.c b/source/blender/blenkernel/intern/exotic.c
index fb48c875995..479be2ee644 100644
--- a/source/blender/blenkernel/intern/exotic.c
+++ b/source/blender/blenkernel/intern/exotic.c
@@ -2632,17 +2632,17 @@ static void write_videoscape_mesh(Object *ob, char *str)
if(evl->v4==0) {
fprintf(fp, "3 %ld %ld %ld 0x%x\n",
- evl->v1->tmp.l,
- evl->v2->tmp.l,
- evl->v3->tmp.l,
+ (long int) evl->v1->tmp.l,
+ (long int) evl->v2->tmp.l,
+ (long int) evl->v3->tmp.l,
kleur[evl->mat_nr]);
}
else {
fprintf(fp, "4 %ld %ld %ld %ld 0x%x\n",
- evl->v1->tmp.l,
- evl->v2->tmp.l,
- evl->v3->tmp.l,
- evl->v4->tmp.l,
+ (long int) evl->v1->tmp.l,
+ (long int) evl->v2->tmp.l,
+ (long int) evl->v3->tmp.l,
+ (long int) evl->v4->tmp.l,
kleur[evl->mat_nr]);
}
evl= evl->next;
diff --git a/source/blender/blenkernel/intern/fluidsim.c b/source/blender/blenkernel/intern/fluidsim.c
new file mode 100644
index 00000000000..9c1b3ee5a8d
--- /dev/null
+++ b/source/blender/blenkernel/intern/fluidsim.c
@@ -0,0 +1,642 @@
+/**
+ * fluidsim.c
+ *
+ *
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * The Original Code is Copyright (C) Blender Foundation
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): none yet.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+#include "MEM_guardedalloc.h"
+
+#include "DNA_mesh_types.h"
+#include "DNA_meshdata_types.h"
+#include "DNA_object_force.h" // for pointcache
+#include "DNA_particle_types.h"
+#include "DNA_scene_types.h" // N_T
+
+#include "BLI_arithb.h"
+#include "BLI_blenlib.h"
+
+#include "BKE_cdderivedmesh.h"
+#include "BKE_customdata.h"
+#include "BKE_DerivedMesh.h"
+#include "BKE_fluidsim.h"
+#include "BKE_global.h"
+#include "BKE_modifier.h"
+#include "BKE_mesh.h"
+#include "BKE_pointcache.h"
+#include "BKE_utildefines.h"
+
+// headers for fluidsim bobj meshes
+#include <stdlib.h>
+#include "LBM_fluidsim.h"
+#include "elbeem.h"
+#include <zlib.h>
+#include <string.h>
+#include <stdio.h>
+
+/* ************************* fluidsim bobj file handling **************************** */
+
+// -----------------------------------------
+// forward decleration
+// -----------------------------------------
+
+// -----------------------------------------
+
+void fluidsim_init(FluidsimModifierData *fluidmd)
+{
+#ifndef DISABLE_ELBEEM
+ if(fluidmd)
+ {
+ FluidsimSettings *fss = MEM_callocN(sizeof(FluidsimSettings), "fluidsimsettings");
+
+ fluidmd->fss = fss;
+
+ if(!fss)
+ return;
+
+ fss->type = 0;
+ fss->show_advancedoptions = 0;
+
+ fss->resolutionxyz = 50;
+ fss->previewresxyz = 25;
+ fss->realsize = 0.03;
+ fss->guiDisplayMode = 2; // preview
+ fss->renderDisplayMode = 3; // render
+
+ fss->viscosityMode = 2; // default to water
+ fss->viscosityValue = 1.0;
+ fss->viscosityExponent = 6;
+
+ // dg TODO: change this to []
+ fss->gravx = 0.0;
+ fss->gravy = 0.0;
+ fss->gravz = -9.81;
+ fss->animStart = 0.0;
+ fss->animEnd = 0.30;
+ fss->gstar = 0.005; // used as normgstar
+ fss->maxRefine = -1;
+ // maxRefine is set according to resolutionxyz during bake
+
+ // fluid/inflow settings
+ // fss->iniVel --> automatically set to 0
+
+ /* elubie: changed this to default to the same dir as the render output
+ to prevent saving to C:\ on Windows */
+ BLI_strncpy(fss->surfdataPath, btempdir, FILE_MAX);
+
+ // first init of bounding box
+ // no bounding box needed
+
+ // todo - reuse default init from elbeem!
+ fss->typeFlags = 0;
+ fss->domainNovecgen = 0;
+ fss->volumeInitType = 1; // volume
+ fss->partSlipValue = 0.0;
+
+ fss->generateTracers = 0;
+ fss->generateParticles = 0.0;
+ fss->surfaceSmoothing = 1.0;
+ fss->surfaceSubdivs = 1.0;
+ fss->particleInfSize = 0.0;
+ fss->particleInfAlpha = 0.0;
+
+ // init fluid control settings
+ fss->attractforceStrength = 0.2;
+ fss->attractforceRadius = 0.75;
+ fss->velocityforceStrength = 0.2;
+ fss->velocityforceRadius = 0.75;
+ fss->cpsTimeStart = fss->animStart;
+ fss->cpsTimeEnd = fss->animEnd;
+ fss->cpsQuality = 10.0; // 1.0 / 10.0 => means 0.1 width
+
+ /*
+ BAD TODO: this is done in buttons_object.c in the moment
+ Mesh *mesh = ob->data;
+ // calculate bounding box
+ fluid_get_bb(mesh->mvert, mesh->totvert, ob->obmat, fss->bbStart, fss->bbSize);
+ */
+
+ fss->lastgoodframe = -1;
+
+ fss->flag = 0;
+
+ }
+#endif
+ return;
+}
+
+void fluidsim_free(FluidsimModifierData *fluidmd)
+{
+#ifndef DISABLE_ELBEEM
+ if(fluidmd)
+ {
+ MEM_freeN(fluidmd->fss);
+ }
+#endif
+ return;
+}
+
+DerivedMesh *fluidsimModifier_do(FluidsimModifierData *fluidmd, Object *ob, DerivedMesh *dm, int useRenderParams, int isFinalCalc)
+{
+#ifndef DISABLE_ELBEEM
+ DerivedMesh *result = NULL;
+ int framenr;
+ FluidsimSettings *fss = NULL;
+
+ framenr= (int)G.scene->r.cfra;
+
+ // only handle fluidsim domains
+ if(fluidmd && fluidmd->fss && (fluidmd->fss->type != OB_FLUIDSIM_DOMAIN))
+ return dm;
+
+ // sanity check
+ if(!fluidmd || (fluidmd && !fluidmd->fss))
+ return dm;
+
+ fss = fluidmd->fss;
+
+ // timescale not supported yet
+ // clmd->sim_parms->timescale= timescale;
+
+ // support reversing of baked fluid frames here
+ if((fss->flag & OB_FLUIDSIM_REVERSE) && (fss->lastgoodframe >= 0))
+ {
+ framenr = fss->lastgoodframe - framenr + 1;
+ CLAMP(framenr, 1, fss->lastgoodframe);
+ }
+
+ /* try to read from cache */
+ if(((fss->lastgoodframe >= framenr) || (fss->lastgoodframe < 0)) && (result = fluidsim_read_cache(ob, dm, fluidmd, framenr, useRenderParams)))
+ {
+ // fss->lastgoodframe = framenr; // set also in src/fluidsim.c
+ return result;
+ }
+ else
+ {
+ // display last known good frame
+ if(fss->lastgoodframe >= 0)
+ {
+ if((result = fluidsim_read_cache(ob, dm, fluidmd, fss->lastgoodframe, useRenderParams)))
+ {
+ return result;
+ }
+
+ // it was supposed to be a valid frame but it isn't!
+ fss->lastgoodframe = framenr - 1;
+
+
+ // this could be likely the case when you load an old fluidsim
+ if((result = fluidsim_read_cache(ob, dm, fluidmd, fss->lastgoodframe, useRenderParams)))
+ {
+ return result;
+ }
+ }
+
+ result = CDDM_copy(dm);
+
+ if(result)
+ {
+ return result;
+ }
+ }
+
+ return dm;
+#else
+ return NULL;
+#endif
+}
+
+#ifndef DISABLE_ELBEEM
+/* read .bobj.gz file into a fluidsimDerivedMesh struct */
+static DerivedMesh *fluidsim_read_obj(char *filename)
+{
+ int wri,i,j;
+ float wrf;
+ int gotBytes;
+ gzFile gzf;
+ int numverts = 0, numfaces = 0;
+ DerivedMesh *dm = NULL;
+ MFace *mface;
+ MVert *mvert;
+ short *normals;
+
+ // ------------------------------------------------
+ // get numverts + numfaces first
+ // ------------------------------------------------
+ gzf = gzopen(filename, "rb");
+ if (!gzf)
+ {
+ return NULL;
+ }
+
+ // read numverts
+ gotBytes = gzread(gzf, &wri, sizeof(wri));
+ numverts = wri;
+
+ // skip verts
+ for(i=0; i<numverts*3; i++)
+ {
+ gotBytes = gzread(gzf, &wrf, sizeof( wrf ));
+ }
+
+ // read number of normals
+ gotBytes = gzread(gzf, &wri, sizeof(wri));
+
+ // skip normals
+ for(i=0; i<numverts*3; i++)
+ {
+ gotBytes = gzread(gzf, &wrf, sizeof( wrf ));
+ }
+
+ /* get no. of triangles */
+ gotBytes = gzread(gzf, &wri, sizeof(wri));
+ numfaces = wri;
+
+ gzclose( gzf );
+ // ------------------------------------------------
+
+ if(!numfaces || !numverts)
+ return NULL;
+
+ gzf = gzopen(filename, "rb");
+ if (!gzf)
+ {
+ return NULL;
+ }
+
+ dm = CDDM_new(numverts, 0, numfaces);
+
+ if(!dm)
+ {
+ gzclose( gzf );
+ return NULL;
+ }
+
+ // read numverts
+ gotBytes = gzread(gzf, &wri, sizeof(wri));
+
+ // read vertex position from file
+ mvert = CDDM_get_verts(dm);
+ for(i=0; i<numverts; i++)
+ {
+ MVert *mv = &mvert[i];
+
+ for(j=0; j<3; j++)
+ {
+ gotBytes = gzread(gzf, &wrf, sizeof( wrf ));
+ mv->co[j] = wrf;
+ }
+ }
+
+ // should be the same as numverts
+ gotBytes = gzread(gzf, &wri, sizeof(wri));
+ if(wri != numverts)
+ {
+ if(dm)
+ dm->release(dm);
+ gzclose( gzf );
+ return NULL;
+ }
+
+ normals = MEM_callocN(sizeof(short) * numverts * 3, "fluid_tmp_normals" );
+ if(!normals)
+ {
+ if(dm)
+ dm->release(dm);
+ gzclose( gzf );
+ return NULL;
+ }
+
+ // read normals from file (but don't save them yet)
+ for(i=0; i<numverts*3; i++)
+ {
+ gotBytes = gzread(gzf, &wrf, sizeof( wrf ));
+ normals[i] = (short)(wrf*32767.0f);
+ }
+
+ /* read no. of triangles */
+ gotBytes = gzread(gzf, &wri, sizeof(wri));
+
+ if(wri!=numfaces)
+ printf("Fluidsim: error in reading data from file.\n");
+
+ // read triangles from file
+ mface = CDDM_get_faces(dm);
+ for(i=0; i<numfaces; i++)
+ {
+ int face[4];
+ MFace *mf = &mface[i];
+
+ gotBytes = gzread(gzf, &(face[0]), sizeof( face[0] ));
+ gotBytes = gzread(gzf, &(face[1]), sizeof( face[1] ));
+ gotBytes = gzread(gzf, &(face[2]), sizeof( face[2] ));
+ face[3] = 0;
+
+ // check if 3rd vertex has index 0 (not allowed in blender)
+ if(face[2])
+ {
+ mf->v1 = face[0];
+ mf->v2 = face[1];
+ mf->v3 = face[2];
+ }
+ else
+ {
+ mf->v1 = face[1];
+ mf->v2 = face[2];
+ mf->v3 = face[0];
+ }
+ mf->v4 = face[3];
+
+ test_index_face(mf, NULL, 0, 3);
+ }
+
+ gzclose( gzf );
+
+ CDDM_calc_edges(dm);
+
+ CDDM_apply_vert_normals(dm, (short (*)[3])normals);
+ MEM_freeN(normals);
+
+ // CDDM_calc_normals(result);
+
+ return dm;
+}
+
+DerivedMesh *fluidsim_read_cache(Object *ob, DerivedMesh *orgdm, FluidsimModifierData *fluidmd, int framenr, int useRenderParams)
+{
+ int displaymode = 0;
+ int curFrame = framenr - 1 /*G.scene->r.sfra*/; /* start with 0 at start frame */
+ char targetDir[FILE_MAXFILE+FILE_MAXDIR], targetFile[FILE_MAXFILE+FILE_MAXDIR];
+ FluidsimSettings *fss = fluidmd->fss;
+ DerivedMesh *dm = NULL;
+ MFace *mface;
+ int numfaces;
+ int mat_nr, flag, i;
+
+ if(!useRenderParams) {
+ displaymode = fss->guiDisplayMode;
+ } else {
+ displaymode = fss->renderDisplayMode;
+ }
+
+ strncpy(targetDir, fss->surfdataPath, FILE_MAXDIR);
+
+ // use preview or final mesh?
+ if(displaymode==1)
+ {
+ // just display original object
+ return NULL;
+ }
+ else if(displaymode==2)
+ {
+ strcat(targetDir,"fluidsurface_preview_####");
+ }
+ else
+ { // 3
+ strcat(targetDir,"fluidsurface_final_####");
+ }
+
+ BLI_convertstringcode(targetDir, G.sce);
+ BLI_convertstringframe(targetDir, curFrame); // fixed #frame-no
+
+ strcpy(targetFile,targetDir);
+ strcat(targetFile, ".bobj.gz");
+
+ dm = fluidsim_read_obj(targetFile);
+
+ if(!dm)
+ {
+ // switch, abort background rendering when fluidsim mesh is missing
+ const char *strEnvName2 = "BLENDER_ELBEEMBOBJABORT"; // from blendercall.cpp
+
+ if(G.background==1) {
+ if(getenv(strEnvName2)) {
+ int elevel = atoi(getenv(strEnvName2));
+ if(elevel>0) {
+ printf("Env. var %s set, fluid sim mesh '%s' not found, aborting render...\n",strEnvName2, targetFile);
+ exit(1);
+ }
+ }
+ }
+
+ // display org. object upon failure which is in dm
+ return NULL;
+ }
+
+ // assign material + flags to new dm
+ mface = orgdm->getFaceArray(orgdm);
+ mat_nr = mface[0].mat_nr;
+ flag = mface[0].flag;
+
+ mface = dm->getFaceArray(dm);
+ numfaces = dm->getNumFaces(dm);
+ for(i=0; i<numfaces; i++)
+ {
+ mface[i].mat_nr = mat_nr;
+ mface[i].flag = flag;
+ }
+
+ // load vertex velocities, if they exist...
+ // TODO? use generate flag as loading flag as well?
+ // warning, needs original .bobj.gz mesh loading filename
+ /*
+ if(displaymode==3)
+ {
+ readVelgz(targetFile, srcob);
+ }
+ else
+ {
+ // no data for preview, only clear...
+ int i,j;
+ for(i=0; i<mesh->totvert;i++) { for(j=0; j<3; j++) { srcob->fluidsimSettings->meshSurfNormals[i].co[j] = 0.; }}
+ }*/
+
+ return dm;
+}
+
+void fluid_get_bb(MVert *mvert, int totvert, float obmat[][4],
+ /*RET*/ float start[3], /*RET*/ float size[3] )
+{
+ float bbsx=0.0, bbsy=0.0, bbsz=0.0;
+ float bbex=1.0, bbey=1.0, bbez=1.0;
+ int i;
+ float vec[3];
+
+ VECCOPY(vec, mvert[0].co);
+ Mat4MulVecfl(obmat, vec);
+ bbsx = vec[0]; bbsy = vec[1]; bbsz = vec[2];
+ bbex = vec[0]; bbey = vec[1]; bbez = vec[2];
+
+ for(i = 1; i < totvert; i++) {
+ VECCOPY(vec, mvert[i].co);
+ Mat4MulVecfl(obmat, vec);
+
+ if(vec[0] < bbsx){ bbsx= vec[0]; }
+ if(vec[1] < bbsy){ bbsy= vec[1]; }
+ if(vec[2] < bbsz){ bbsz= vec[2]; }
+ if(vec[0] > bbex){ bbex= vec[0]; }
+ if(vec[1] > bbey){ bbey= vec[1]; }
+ if(vec[2] > bbez){ bbez= vec[2]; }
+ }
+
+ // return values...
+ if(start) {
+ start[0] = bbsx;
+ start[1] = bbsy;
+ start[2] = bbsz;
+ }
+ if(size) {
+ size[0] = bbex-bbsx;
+ size[1] = bbey-bbsy;
+ size[2] = bbez-bbsz;
+ }
+}
+
+//-------------------------------------------------------------------------------
+// old interface
+//-------------------------------------------------------------------------------
+
+
+
+//-------------------------------------------------------------------------------
+// file handling
+//-------------------------------------------------------------------------------
+
+void initElbeemMesh(struct Object *ob,
+ int *numVertices, float **vertices,
+ int *numTriangles, int **triangles,
+ int useGlobalCoords, int modifierIndex)
+{
+ DerivedMesh *dm = NULL;
+ MVert *mvert;
+ MFace *mface;
+ int countTris=0, i, totvert, totface;
+ float *verts;
+ int *tris;
+
+ dm = mesh_create_derived_index_render(ob, CD_MASK_BAREMESH, modifierIndex);
+ //dm = mesh_create_derived_no_deform(ob,NULL);
+
+ mvert = dm->getVertArray(dm);
+ mface = dm->getFaceArray(dm);
+ totvert = dm->getNumVerts(dm);
+ totface = dm->getNumFaces(dm);
+
+ *numVertices = totvert;
+ verts = MEM_callocN( totvert*3*sizeof(float), "elbeemmesh_vertices");
+ for(i=0; i<totvert; i++) {
+ VECCOPY( &verts[i*3], mvert[i].co);
+ if(useGlobalCoords) { Mat4MulVecfl(ob->obmat, &verts[i*3]); }
+ }
+ *vertices = verts;
+
+ for(i=0; i<totface; i++) {
+ countTris++;
+ if(mface[i].v4) { countTris++; }
+ }
+ *numTriangles = countTris;
+ tris = MEM_callocN( countTris*3*sizeof(int), "elbeemmesh_triangles");
+ countTris = 0;
+ for(i=0; i<totface; i++) {
+ int face[4];
+ face[0] = mface[i].v1;
+ face[1] = mface[i].v2;
+ face[2] = mface[i].v3;
+ face[3] = mface[i].v4;
+
+ tris[countTris*3+0] = face[0];
+ tris[countTris*3+1] = face[1];
+ tris[countTris*3+2] = face[2];
+ countTris++;
+ if(face[3]) {
+ tris[countTris*3+0] = face[0];
+ tris[countTris*3+1] = face[2];
+ tris[countTris*3+2] = face[3];
+ countTris++;
+ }
+ }
+ *triangles = tris;
+
+ dm->release(dm);
+}
+
+/* read zipped fluidsim velocities into the co's of the fluidsimsettings normals struct */
+void readVelgz(char *filename, Object *srcob)
+{
+ int wri, i, j;
+ float wrf;
+ gzFile gzf;
+ MVert *vverts = srcob->fluidsimSettings->meshSurfNormals;
+ int len = strlen(filename);
+ Mesh *mesh = srcob->data;
+ // mesh and vverts have to be valid from loading...
+
+ // clean up in any case
+ for(i=0; i<mesh->totvert;i++)
+ {
+ for(j=0; j<3; j++)
+ {
+ vverts[i].co[j] = 0.;
+ }
+ }
+ if(srcob->fluidsimSettings->domainNovecgen>0) return;
+
+ if(len<7)
+ {
+ return;
+ }
+
+ // .bobj.gz , correct filename
+ // 87654321
+ filename[len-6] = 'v';
+ filename[len-5] = 'e';
+ filename[len-4] = 'l';
+
+ gzf = gzopen(filename, "rb");
+ if (!gzf)
+ return;
+
+ gzread(gzf, &wri, sizeof( wri ));
+ if(wri != mesh->totvert)
+ {
+ return;
+ }
+
+ for(i=0; i<mesh->totvert;i++)
+ {
+ for(j=0; j<3; j++)
+ {
+ gzread(gzf, &wrf, sizeof( wrf ));
+ vverts[i].co[j] = wrf;
+ }
+ }
+
+ gzclose(gzf);
+}
+
+
+#endif // DISABLE_ELBEEM
+
diff --git a/source/blender/blenkernel/intern/group.c b/source/blender/blenkernel/intern/group.c
index 2ffe8590b59..0d2f86bb151 100644
--- a/source/blender/blenkernel/intern/group.c
+++ b/source/blender/blenkernel/intern/group.c
@@ -91,6 +91,16 @@ void unlink_group(Group *group)
ma->group= NULL;
}
for (sce= G.main->scene.first; sce; sce= sce->id.next) {
+ Base *base= sce->base.first;
+
+ /* ensure objects are not in this group */
+ for(; base; base= base->next) {
+ if(rem_from_group(group, base->object) && find_group(base->object, NULL)==NULL) {
+ base->object->flag &= ~OB_FROMGROUP;
+ base->flag &= ~OB_FROMGROUP;
+ }
+ }
+
for(srl= sce->r.layers.first; srl; srl= srl->next) {
if (srl->light_override==group)
srl->light_override= NULL;
@@ -117,6 +127,9 @@ void unlink_group(Group *group)
psys->part->eff_group= NULL;
}
}
+
+ /* group stays in library, but no members */
+ free_group(group);
group->id.us= 0;
}
diff --git a/source/blender/blenkernel/intern/icons.c b/source/blender/blenkernel/intern/icons.c
index cab7865c1b6..b9e3c593ddf 100644
--- a/source/blender/blenkernel/intern/icons.c
+++ b/source/blender/blenkernel/intern/icons.c
@@ -50,6 +50,8 @@
#include "BKE_icons.h"
#include "BKE_utildefines.h"
+#include "BLO_sys_types.h" // for intptr_t support
+
#define GS(a) (*((short *)(a)))
/* GLOBALS */
diff --git a/source/blender/blenkernel/intern/idprop.c b/source/blender/blenkernel/intern/idprop.c
index b16f52571f6..0a140ebaba1 100644
--- a/source/blender/blenkernel/intern/idprop.c
+++ b/source/blender/blenkernel/intern/idprop.c
@@ -317,7 +317,7 @@ void IDP_FreeIterBeforeEnd(void *vself)
This is because all ID Property freeing functions free only direct data (not the ID Property
struct itself), but for Groups the child properties *are* considered
direct data.*/
-void IDP_FreeGroup(IDProperty *prop)
+static void IDP_FreeGroup(IDProperty *prop)
{
IDProperty *loop, *next;
for (loop=prop->data.group.first; loop; loop=next)
diff --git a/source/blender/blenkernel/intern/image.c b/source/blender/blenkernel/intern/image.c
index b6c8ad59e08..18570515057 100644
--- a/source/blender/blenkernel/intern/image.c
+++ b/source/blender/blenkernel/intern/image.c
@@ -53,6 +53,7 @@
#include "DNA_packedFile_types.h"
#include "DNA_scene_types.h"
#include "DNA_camera_types.h"
+#include "DNA_sequence_types.h"
#include "DNA_texture_types.h"
#include "DNA_userdef_types.h"
@@ -77,15 +78,17 @@
#include "RE_pipeline.h"
-/* bad level; call to free_realtime_image */
-#include "BKE_bad_level_calls.h"
-
/* for stamp drawing to an image */
#include "BMF_Api.h"
#include "blendef.h"
#include "BSE_time.h"
+#include "GPU_extensions.h"
+#include "GPU_draw.h"
+
+#include "BLO_sys_types.h" // for intptr_t support
+
/* max int, to indicate we don't store sequences in ibuf */
#define IMA_NO_INDEX 0x7FEFEFEF
@@ -238,7 +241,7 @@ static void image_free_buffers(Image *ima)
ima->rr= NULL;
}
- free_realtime_image(ima);
+ GPU_free_image(ima);
ima->ok= IMA_OK;
}
@@ -582,7 +585,7 @@ void tag_image_time(Image *ima)
ima->lastused = (int)PIL_check_seconds_timer();
}
-void tag_all_images_time()
+static void tag_all_images_time()
{
Image *ima;
int ctime = (int)PIL_check_seconds_timer();
@@ -618,7 +621,7 @@ void free_old_images()
This gives textures a "second chance" to be used before dying.
*/
if(ima->bindcode || ima->repbind) {
- free_realtime_image(ima);
+ GPU_free_image(ima);
ima->lastused = ctime;
}
/* Otherwise, just kill the buffers */
@@ -630,11 +633,11 @@ void free_old_images()
}
}
-static unsigned long image_mem_size(Image *ima)
+static uintptr_t image_mem_size(Image *ima)
{
ImBuf *ibuf, *ibufm;
int level;
- unsigned long size = 0;
+ uintptr_t size = 0;
size= 0;
for(ibuf= ima->ibufs.first; ibuf; ibuf= ibuf->next) {
@@ -656,7 +659,7 @@ static unsigned long image_mem_size(Image *ima)
void BKE_image_print_memlist(void)
{
Image *ima;
- unsigned long size, totsize= 0;
+ uintptr_t size, totsize= 0;
for(ima= G.main->image.first; ima; ima= ima->id.next)
totsize += image_mem_size(ima);
diff --git a/source/blender/blenkernel/intern/implicit.c b/source/blender/blenkernel/intern/implicit.c
index 297ac0b1530..93e35a4db06 100644
--- a/source/blender/blenkernel/intern/implicit.c
+++ b/source/blender/blenkernel/intern/implicit.c
@@ -1354,25 +1354,57 @@ DO_INLINE void cloth_apply_spring_force(ClothModifierData *clmd, ClothSpring *s,
}
}
+
+static void CalcFloat( float *v1, float *v2, float *v3, float *n)
+{
+ float n1[3],n2[3];
+
+ n1[0]= v1[0]-v2[0];
+ n2[0]= v2[0]-v3[0];
+ n1[1]= v1[1]-v2[1];
+ n2[1]= v2[1]-v3[1];
+ n1[2]= v1[2]-v2[2];
+ n2[2]= v2[2]-v3[2];
+ n[0]= n1[1]*n2[2]-n1[2]*n2[1];
+ n[1]= n1[2]*n2[0]-n1[0]*n2[2];
+ n[2]= n1[0]*n2[1]-n1[1]*n2[0];
+}
+
+static void CalcFloat4( float *v1, float *v2, float *v3, float *v4, float *n)
+{
+ /* real cross! */
+ float n1[3],n2[3];
+
+ n1[0]= v1[0]-v3[0];
+ n1[1]= v1[1]-v3[1];
+ n1[2]= v1[2]-v3[2];
+
+ n2[0]= v2[0]-v4[0];
+ n2[1]= v2[1]-v4[1];
+ n2[2]= v2[2]-v4[2];
+
+ n[0]= n1[1]*n2[2]-n1[2]*n2[1];
+ n[1]= n1[2]*n2[0]-n1[0]*n2[2];
+ n[2]= n1[0]*n2[1]-n1[1]*n2[0];
+}
+
float calculateVertexWindForce(float wind[3], float vertexnormal[3])
{
- return fabs(INPR(wind, vertexnormal));
+ return (INPR(wind, vertexnormal));
}
void cloth_calc_force(ClothModifierData *clmd, lfVector *lF, lfVector *lX, lfVector *lV, fmatrix3x3 *dFdV, fmatrix3x3 *dFdX, ListBase *effectors, float time, fmatrix3x3 *M)
{
/* Collect forces and derivatives: F,dFdX,dFdV */
Cloth *cloth = clmd->clothObject;
- long i = 0;
+ int i = 0;
float spring_air = clmd->sim_parms->Cvi * 0.01f; /* viscosity of air scaled in percent */
float gravity[3];
float tm2[3][3] = {{-spring_air,0,0}, {0,-spring_air,0},{0,0,-spring_air}};
MFace *mfaces = cloth->mfaces;
- //ClothVertex *verts = cloth->verts;
- float wind_normalized[3];
unsigned int numverts = cloth->numverts;
LinkNode *search = cloth->springs;
-
+ lfVector *winvec;
VECCOPY(gravity, clmd->sim_parms->gravity);
mul_fvector_S(gravity, gravity, 0.001f); /* scale gravity force */
@@ -1387,7 +1419,7 @@ void cloth_calc_force(ClothModifierData *clmd, lfVector *lF, lfVector *lX, lfVec
/* multiply lF with mass matrix
// force = mass * acceleration (in this case: gravity)
*/
- for(i = 0; i < (long)numverts; i++)
+ for(i = 0; i < numverts; i++)
{
float temp[3];
VECCOPY(temp, lF[i]);
@@ -1399,70 +1431,61 @@ void cloth_calc_force(ClothModifierData *clmd, lfVector *lF, lfVector *lX, lfVec
/* handle external forces like wind */
if(effectors)
{
- for(i = 0; i < cloth->numfaces; i++)
+ // 0 = force, 1 = normalized force
+ winvec = create_lfvector(cloth->numverts);
+
+ if(!winvec)
+ printf("winvec: out of memory in implicit.c\n");
+
+ // precalculate wind forces
+ for(i = 0; i < cloth->numverts; i++)
{
- float vertexnormal[3]={0,0,0};
float speed[3] = {0.0f, 0.0f,0.0f};
- float force[3]= {0.0f, 0.0f, 0.0f};
+ pdDoEffectors(effectors, lX[i], winvec[i], speed, (float)G.scene->r.cfra, 0.0f, 0);
+ }
+
+ for(i = 0; i < cloth->numfaces; i++)
+ {
+ float trinormal[3]={0,0,0}; // normalized triangle normal
+ float triunnormal[3]={0,0,0}; // not-normalized-triangle normal
+ float tmp[3]={0,0,0};
+ float factor = (mfaces[i].v4) ? 0.25 : 1.0 / 3.0;
+ factor *= 0.02;
+
+ // calculate face normal
if(mfaces[i].v4)
- CalcNormFloat4(lX[mfaces[i].v1],lX[mfaces[i].v2],lX[mfaces[i].v3],lX[mfaces[i].v4],vertexnormal);
+ CalcFloat4(lX[mfaces[i].v1],lX[mfaces[i].v2],lX[mfaces[i].v3],lX[mfaces[i].v4],triunnormal);
else
- CalcNormFloat(lX[mfaces[i].v1],lX[mfaces[i].v2],lX[mfaces[i].v3],vertexnormal);
+ CalcFloat(lX[mfaces[i].v1],lX[mfaces[i].v2],lX[mfaces[i].v3],triunnormal);
- pdDoEffectors(effectors, lX[mfaces[i].v1], force, speed, (float)G.scene->r.cfra, 0.0f, PE_WIND_AS_SPEED);
- VECCOPY(wind_normalized, speed);
- Normalize(wind_normalized);
- VecMulf(wind_normalized, -calculateVertexWindForce(speed, vertexnormal));
+ VECCOPY(trinormal, triunnormal);
+ Normalize(trinormal);
- if(mfaces[i].v4)
- {
- VECADDS(lF[mfaces[i].v1], lF[mfaces[i].v1], wind_normalized, 0.25);
- }
- else
- {
- VECADDS(lF[mfaces[i].v1], lF[mfaces[i].v1], wind_normalized, 1.0 / 3.0);
- }
+ // add wind from v1
+ VECCOPY(tmp, trinormal);
+ VecMulf(tmp, calculateVertexWindForce(winvec[mfaces[i].v1], triunnormal));
+ VECADDS(lF[mfaces[i].v1], lF[mfaces[i].v1], tmp, factor);
- speed[0] = speed[1] = speed[2] = 0.0;
- pdDoEffectors(effectors, lX[mfaces[i].v2], force, speed, (float)G.scene->r.cfra, 0.0f, PE_WIND_AS_SPEED);
- VECCOPY(wind_normalized, speed);
- Normalize(wind_normalized);
- VecMulf(wind_normalized, -calculateVertexWindForce(speed, vertexnormal));
- if(mfaces[i].v4)
- {
- VECADDS(lF[mfaces[i].v2], lF[mfaces[i].v2], wind_normalized, 0.25);
- }
- else
- {
- VECADDS(lF[mfaces[i].v2], lF[mfaces[i].v2], wind_normalized, 1.0 / 3.0);
- }
+ // add wind from v2
+ VECCOPY(tmp, trinormal);
+ VecMulf(tmp, calculateVertexWindForce(winvec[mfaces[i].v2], triunnormal));
+ VECADDS(lF[mfaces[i].v2], lF[mfaces[i].v2], tmp, factor);
- speed[0] = speed[1] = speed[2] = 0.0;
- pdDoEffectors(effectors, lX[mfaces[i].v3], force, speed, (float)G.scene->r.cfra, 0.0f, PE_WIND_AS_SPEED);
- VECCOPY(wind_normalized, speed);
- Normalize(wind_normalized);
- VecMulf(wind_normalized, -calculateVertexWindForce(speed, vertexnormal));
- if(mfaces[i].v4)
- {
- VECADDS(lF[mfaces[i].v3], lF[mfaces[i].v3], wind_normalized, 0.25);
- }
- else
- {
- VECADDS(lF[mfaces[i].v3], lF[mfaces[i].v3], wind_normalized, 1.0 / 3.0);
- }
+ // add wind from v3
+ VECCOPY(tmp, trinormal);
+ VecMulf(tmp, calculateVertexWindForce(winvec[mfaces[i].v3], triunnormal));
+ VECADDS(lF[mfaces[i].v3], lF[mfaces[i].v3], tmp, factor);
- speed[0] = speed[1] = speed[2] = 0.0;
+ // add wind from v4
if(mfaces[i].v4)
{
- pdDoEffectors(effectors, lX[mfaces[i].v4], force, speed, (float)G.scene->r.cfra, 0.0f, PE_WIND_AS_SPEED);
- VECCOPY(wind_normalized, speed);
- Normalize(wind_normalized);
- VecMulf(wind_normalized, -calculateVertexWindForce(speed, vertexnormal));
- VECADDS(lF[mfaces[i].v4], lF[mfaces[i].v4], wind_normalized, 0.25);
+ VECCOPY(tmp, trinormal);
+ VecMulf(tmp, calculateVertexWindForce(winvec[mfaces[i].v4], triunnormal));
+ VECADDS(lF[mfaces[i].v4], lF[mfaces[i].v4], tmp, factor);
}
-
}
+ del_lfvector(winvec);
}
// calculate spring forces
diff --git a/source/blender/blenkernel/intern/ipo.c b/source/blender/blenkernel/intern/ipo.c
index 59eb3837aab..a115ac39e1a 100644
--- a/source/blender/blenkernel/intern/ipo.c
+++ b/source/blender/blenkernel/intern/ipo.c
@@ -23,7 +23,7 @@
*
* The Original Code is: all of this file.
*
- * Contributor(s): none yet.
+ * Contributor(s): 2008, Joshua Leung (IPO System cleanup)
*
* ***** END GPL LICENSE BLOCK *****
*/
@@ -77,11 +77,16 @@
#define SMALL -1.0e-10
+/* ***************************** Adrcode Blocktype Defines ********************************* */
+
/* This array concept was meant to make sure that defines such as OB_LOC_X
don't have to be enumerated, also for backward compatibility, future changes,
and to enable it all can be accessed with a for-next loop.
+
+ This should whole adrcode system should eventually be replaced by a proper Data API
*/
+
int co_ar[CO_TOTIPO]= {
CO_ENFORCE, CO_HEADTAIL
};
@@ -151,9 +156,9 @@ int wo_ar[WO_TOTIPO]= {
};
int la_ar[LA_TOTIPO]= {
- LA_ENERGY, LA_COL_R, LA_COL_G, LA_COL_B,
+ LA_ENERGY, LA_COL_R, LA_COL_G, LA_COL_B,
LA_DIST, LA_SPOTSI, LA_SPOTBL,
- LA_QUAD1, LA_QUAD2, LA_HALOINT,
+ LA_QUAD1, LA_QUAD2, LA_HALOINT,
MA_MAP1+MAP_OFS_X, MA_MAP1+MAP_OFS_Y, MA_MAP1+MAP_OFS_Z,
MA_MAP1+MAP_SIZE_X, MA_MAP1+MAP_SIZE_Y, MA_MAP1+MAP_SIZE_Z,
@@ -175,460 +180,617 @@ int fluidsim_ar[FLUIDSIM_TOTIPO]= {
FLUIDSIM_VISC, FLUIDSIM_TIME,
FLUIDSIM_GRAV_X , FLUIDSIM_GRAV_Y , FLUIDSIM_GRAV_Z ,
FLUIDSIM_VEL_X , FLUIDSIM_VEL_Y , FLUIDSIM_VEL_Z ,
- FLUIDSIM_ACTIVE
+ FLUIDSIM_ACTIVE,
+ FLUIDSIM_ATTR_FORCE_STR, FLUIDSIM_ATTR_FORCE_RADIUS,
+ FLUIDSIM_VEL_FORCE_STR, FLUIDSIM_VEL_FORCE_RADIUS,
};
int part_ar[PART_TOTIPO]= {
PART_EMIT_FREQ, PART_EMIT_LIFE, PART_EMIT_VEL, PART_EMIT_AVE, PART_EMIT_SIZE,
PART_AVE, PART_SIZE, PART_DRAG, PART_BROWN, PART_DAMP, PART_LENGTH, PART_CLUMP,
PART_GRAV_X, PART_GRAV_Y, PART_GRAV_Z, PART_KINK_AMP, PART_KINK_FREQ, PART_KINK_SHAPE,
- PART_BB_TILT
+ PART_BB_TILT, PART_PD_FSTR, PART_PD_FFALL, PART_PD_FMAXD, PART_PD2_FSTR, PART_PD2_FFALL, PART_PD2_FMAXD
};
+/* ************************** Data-Level Functions ************************* */
+
+/* ---------------------- Freeing --------------------------- */
-float frame_to_float(int cfra) /* see also bsystem_time in object.c */
+/* frees the ipo curve itself too */
+void free_ipo_curve (IpoCurve *icu)
{
- extern float bluroffs; /* bad stuff borrowed from object.c */
- extern float fieldoffs;
- float ctime;
+ if (icu == NULL)
+ return;
- ctime= (float)cfra;
- ctime+= bluroffs+fieldoffs;
- ctime*= G.scene->r.framelen;
+ if (icu->bezt)
+ MEM_freeN(icu->bezt);
+ if (icu->driver)
+ MEM_freeN(icu->driver);
- return ctime;
-}
-
-/* includes ipo curve itself */
-void free_ipo_curve(IpoCurve *icu)
-{
- if(icu->bezt) MEM_freeN(icu->bezt);
- if(icu->bp) MEM_freeN(icu->bp);
- if(icu->driver) MEM_freeN(icu->driver);
MEM_freeN(icu);
}
/* do not free ipo itself */
-void free_ipo(Ipo *ipo)
+void free_ipo (Ipo *ipo)
{
- IpoCurve *icu;
+ IpoCurve *icu, *icn;
- while( (icu= ipo->curve.first) ) {
+ if (ipo == NULL)
+ return;
+
+ for (icu= ipo->curve.first; icu; icu= icn) {
+ icn= icu->next;
+
+ /* must remove the link before freeing, as the curve is freed too */
BLI_remlink(&ipo->curve, icu);
free_ipo_curve(icu);
}
}
+/* ---------------------- Init --------------------------- */
+
/* on adding new ipos, or for empty views */
-void ipo_default_v2d_cur(int blocktype, rctf *cur)
+void ipo_default_v2d_cur (int blocktype, rctf *cur)
{
- if(blocktype==ID_CA) {
+ switch (blocktype) {
+ case ID_CA:
cur->xmin= G.scene->r.sfra;
cur->xmax= G.scene->r.efra;
cur->ymin= 0.0;
cur->ymax= 100.0;
- }
- else if ELEM5(blocktype, ID_MA, ID_CU, ID_WO, ID_LA, ID_CO) {
+ break;
+
+ case ID_MA: case ID_WO: case ID_LA:
+ case ID_CU: case ID_CO:
cur->xmin= (float)G.scene->r.sfra-0.1;
cur->xmax= G.scene->r.efra;
cur->ymin= (float)-0.1;
cur->ymax= (float)+1.1;
- }
- else if(blocktype==ID_TE) {
+ break;
+
+ case ID_TE:
cur->xmin= (float)G.scene->r.sfra-0.1;
cur->xmax= G.scene->r.efra;
cur->ymin= (float)-0.1;
cur->ymax= (float)+1.1;
- }
- else if(blocktype==ID_SEQ) {
+ break;
+
+ case ID_SEQ:
cur->xmin= -5.0;
cur->xmax= 105.0;
cur->ymin= (float)-0.1;
cur->ymax= (float)+1.1;
- }
- else if(blocktype==ID_KE) {
+ break;
+
+ case ID_KE:
cur->xmin= (float)G.scene->r.sfra-0.1;
cur->xmax= G.scene->r.efra;
cur->ymin= (float)-0.1;
cur->ymax= (float)+2.1;
- }
- else { /* ID_OB and everything else */
+ break;
+
+ default: /* ID_OB and everything else */
cur->xmin= G.scene->r.sfra;
cur->xmax= G.scene->r.efra;
cur->ymin= -5.0;
cur->ymax= +5.0;
+ break;
}
}
-
-Ipo *add_ipo(char *name, int idcode)
+/* create a new IPO block (allocates the block) */
+Ipo *add_ipo (char name[], int blocktype)
{
Ipo *ipo;
ipo= alloc_libblock(&G.main->ipo, ID_IP, name);
- ipo->blocktype= idcode;
- ipo_default_v2d_cur(idcode, &ipo->cur);
+ ipo->blocktype= blocktype;
+ ipo_default_v2d_cur(blocktype, &ipo->cur);
return ipo;
}
-Ipo *copy_ipo(Ipo *ipo)
+/* ---------------------- Copy --------------------------- */
+
+/* duplicate an IPO block and all its data */
+Ipo *copy_ipo (Ipo *src)
{
- Ipo *ipon;
+ Ipo *dst;
IpoCurve *icu;
- if(ipo==NULL) return 0;
-
- ipon= copy_libblock(ipo);
+ if (src == NULL)
+ return NULL;
- duplicatelist(&(ipon->curve), &(ipo->curve));
+ dst= copy_libblock(src);
+ duplicatelist(&dst->curve, &src->curve);
- for(icu= ipo->curve.first; icu; icu= icu->next) {
+ for (icu= src->curve.first; icu; icu= icu->next) {
icu->bezt= MEM_dupallocN(icu->bezt);
- if(icu->driver) icu->driver= MEM_dupallocN(icu->driver);
+
+ if (icu->driver)
+ icu->driver= MEM_dupallocN(icu->driver);
}
- return ipon;
+ return dst;
}
-/* uses id->newid to match pointers with other copied data */
-void ipo_idnew(Ipo *ipo)
+/* ---------------------- Relink --------------------------- */
+
+/* uses id->newid to match pointers with other copied data
+ * - called after single-user or other such
+ */
+void ipo_idnew (Ipo *ipo)
{
- if(ipo) {
+ if (ipo) {
IpoCurve *icu;
- for(icu= ipo->curve.first; icu; icu= icu->next) {
- if(icu->driver) {
+ for (icu= ipo->curve.first; icu; icu= icu->next) {
+ if (icu->driver)
ID_NEW(icu->driver->ob);
- }
}
}
}
-void make_local_obipo(Ipo *ipo)
+/* --------------------- Find + Check ----------------------- */
+
+/* find the IPO-curve within a given IPO-block with the adrcode of interest */
+IpoCurve *find_ipocurve (Ipo *ipo, int adrcode)
+{
+ if (ipo) {
+ IpoCurve *icu;
+
+ for (icu= ipo->curve.first; icu; icu= icu->next) {
+ if (icu->adrcode == adrcode)
+ return icu;
+ }
+ }
+ return NULL;
+}
+
+/* return whether the given IPO block has a IPO-curve with the given adrcode */
+short has_ipo_code(Ipo *ipo, int adrcode)
+{
+ /* return success of faliure from trying to find such an IPO-curve */
+ return (find_ipocurve(ipo, adrcode) != NULL);
+}
+
+/* ---------------------- Make Local --------------------------- */
+
+
+/* make the given IPO local (for Objects)
+ * - only lib users: do nothing
+ * - only local users: set flag
+ * - mixed: make copy
+ */
+void make_local_obipo (Ipo *src)
{
Object *ob;
- Ipo *ipon;
+ Ipo *dst;
int local=0, lib=0;
- /* - only lib users: do nothing
- * - only local users: set flag
- * - mixed: make copy
- */
-
- ob= G.main->object.first;
- while(ob) {
- if(ob->ipo==ipo) {
- if(ob->id.lib) lib= 1;
+ /* check if only local and/or lib */
+ for (ob= G.main->object.first; ob; ob= ob->id.next) {
+ if (ob->ipo == src) {
+ if (ob->id.lib) lib= 1;
else local= 1;
}
- ob= ob->id.next;
}
- if(local && lib==0) {
- ipo->id.lib= 0;
- ipo->id.flag= LIB_LOCAL;
- new_id(0, (ID *)ipo, 0);
+ /* only local - set flag */
+ if (local && lib==0) {
+ src->id.lib= 0;
+ src->id.flag= LIB_LOCAL;
+ new_id(0, (ID *)src, 0);
}
- else if(local && lib) {
- ipon= copy_ipo(ipo);
- ipon->id.us= 0;
+ /* mixed: make copy */
+ else if (local && lib) {
+ dst= copy_ipo(src);
+ dst->id.us= 0;
- ob= G.main->object.first;
- while(ob) {
- if(ob->ipo==ipo) {
-
- if(ob->id.lib==NULL) {
- ob->ipo= ipon;
- ipon->id.us++;
- ipo->id.us--;
+ for (ob= G.main->object.first; ob; ob= ob->id.next) {
+ if (ob->ipo == src) {
+ if (ob->id.lib == NULL) {
+ ob->ipo= dst;
+ dst->id.us++;
+ src->id.us--;
}
}
- ob= ob->id.next;
}
}
}
-void make_local_matipo(Ipo *ipo)
+/* make the given IPO local (for Materials)
+ * - only lib users: do nothing
+ * - only local users: set flag
+ * - mixed: make copy
+ */
+void make_local_matipo (Ipo *src)
{
Material *ma;
- Ipo *ipon;
+ Ipo *dst;
int local=0, lib=0;
-
- /* - only lib users: do nothing
- * - only local users: set flag
- * - mixed: make copy
- */
- ma= G.main->mat.first;
- while(ma) {
- if(ma->ipo==ipo) {
- if(ma->id.lib) lib= 1;
+ /* check if only local and/or lib */
+ for (ma= G.main->mat.first; ma; ma= ma->id.next) {
+ if (ma->ipo == src) {
+ if (ma->id.lib) lib= 1;
else local= 1;
}
- ma= ma->id.next;
}
- if(local && lib==0) {
- ipo->id.lib= 0;
- ipo->id.flag= LIB_LOCAL;
- new_id(0, (ID *)ipo, 0);
+ /* only local - set flag */
+ if (local && lib==0) {
+ src->id.lib= 0;
+ src->id.flag= LIB_LOCAL;
+ new_id(0, (ID *)src, 0);
}
- else if(local && lib) {
- ipon= copy_ipo(ipo);
- ipon->id.us= 0;
+ /* mixed: make copy */
+ else if (local && lib) {
+ dst= copy_ipo(src);
+ dst->id.us= 0;
- ma= G.main->mat.first;
- while(ma) {
- if(ma->ipo==ipo) {
-
- if(ma->id.lib==NULL) {
- ma->ipo= ipon;
- ipon->id.us++;
- ipo->id.us--;
+ for (ma= G.main->mat.first; ma; ma= ma->id.next) {
+ if (ma->ipo == src) {
+ if (ma->id.lib == NULL) {
+ ma->ipo= dst;
+ dst->id.us++;
+ src->id.us--;
}
}
- ma= ma->id.next;
}
}
}
-void make_local_keyipo(Ipo *ipo)
+/* make the given IPO local (for ShapeKeys)
+ * - only lib users: do nothing
+ * - only local users: set flag
+ * - mixed: make copy
+ */
+void make_local_keyipo (Ipo *src)
{
Key *key;
- Ipo *ipon;
+ Ipo *dst;
int local=0, lib=0;
-
- /* - only lib users: do nothing
- * - only local users: set flag
- * - mixed: make copy
- */
- key= G.main->key.first;
- while(key) {
- if(key->ipo==ipo) {
- if(key->id.lib) lib= 1;
+ /* check if only local and/or lib */
+ for (key= G.main->key.first; key; key= key->id.next) {
+ if (key->ipo == src) {
+ if (key->id.lib) lib= 1;
else local= 1;
}
- key= key->id.next;
}
- if(local && lib==0) {
- ipo->id.lib= 0;
- ipo->id.flag= LIB_LOCAL;
- new_id(0, (ID *)ipo, 0);
+ /* only local - set flag */
+ if (local && lib==0) {
+ src->id.lib= 0;
+ src->id.flag= LIB_LOCAL;
+ new_id(0, (ID *)src, 0);
}
- else if(local && lib) {
- ipon= copy_ipo(ipo);
- ipon->id.us= 0;
+ /* mixed: make copy */
+ else if (local && lib) {
+ dst= copy_ipo(src);
+ dst->id.us= 0;
- key= G.main->key.first;
- while(key) {
- if(key->ipo==ipo) {
-
- if(key->id.lib==NULL) {
- key->ipo= ipon;
- ipon->id.us++;
- ipo->id.us--;
+ for (key= G.main->key.first; key; key= key->id.next) {
+ if (key->ipo == src) {
+ if (key->id.lib == NULL) {
+ key->ipo= dst;
+ dst->id.us++;
+ src->id.us--;
}
}
- key= key->id.next;
}
}
}
-void make_local_ipo(Ipo *ipo)
+/* generic call to make IPO's local */
+void make_local_ipo (Ipo *ipo)
{
-
- if(ipo->id.lib==NULL) return;
- if(ipo->id.us==1) {
+ /* can't touch lib-linked data */
+ if (ipo->id.lib == NULL)
+ return;
+
+ /* with only one user, just set local flag */
+ if (ipo->id.us == 1) {
ipo->id.lib= 0;
ipo->id.flag= LIB_LOCAL;
new_id(0, (ID *)ipo, 0);
return;
}
- if(ipo->blocktype==ID_OB) make_local_obipo(ipo);
- else if(ipo->blocktype==ID_MA) make_local_matipo(ipo);
- else if(ipo->blocktype==ID_KE) make_local_keyipo(ipo);
-
+ /* when more than 1 user, can only make local for certain blocktypes */
+ switch (ipo->blocktype) {
+ case ID_OB:
+ make_local_obipo(ipo);
+ break;
+ case ID_MA:
+ make_local_matipo(ipo);
+ break;
+ case ID_KE:
+ make_local_keyipo(ipo);
+ break;
+ }
}
-IpoCurve *find_ipocurve(Ipo *ipo, int adrcode)
+/* ***************************** Keyframe Column Tools ********************************* */
+
+/* add a BezTriple to a column */
+void add_to_cfra_elem(ListBase *lb, BezTriple *bezt)
{
- if(ipo) {
- IpoCurve *icu;
- for(icu= ipo->curve.first; icu; icu= icu->next) {
- if(icu->adrcode==adrcode) return icu;
+ CfraElem *ce, *cen;
+
+ for (ce= lb->first; ce; ce= ce->next) {
+ /* double key? */
+ if (ce->cfra == bezt->vec[1][0]) {
+ if (bezt->f2 & SELECT) ce->sel= bezt->f2;
+ return;
}
+ /* should key be inserted before this column? */
+ else if (ce->cfra > bezt->vec[1][0]) break;
}
- return NULL;
+
+ /* create a new column */
+ cen= MEM_callocN(sizeof(CfraElem), "add_to_cfra_elem");
+ if (ce) BLI_insertlinkbefore(lb, ce, cen);
+ else BLI_addtail(lb, cen);
+
+ cen->cfra= bezt->vec[1][0];
+ cen->sel= bezt->f2;
}
-void calchandles_ipocurve(IpoCurve *icu)
+/* make a list of keyframe 'columns' in an IPO block */
+void make_cfra_list (Ipo *ipo, ListBase *elems)
{
- BezTriple *bezt, *prev, *next;
+ IpoCurve *icu;
+ BezTriple *bezt;
int a;
+
+ for (icu= ipo->curve.first; icu; icu= icu->next) {
+ if (icu->flag & IPO_VISIBLE) {
+ /* ... removed old checks for adrcode types from here ...
+ * - (was this used for IpoKeys in the past?)
+ */
+
+ bezt= icu->bezt;
+ if (bezt) {
+ for (a=0; a < icu->totvert; a++, bezt++) {
+ add_to_cfra_elem(elems, bezt);
+ }
+ }
+ }
+ }
+}
+
+/* ***************************** Timing Stuff ********************************* */
- a= icu->totvert;
+/* This (evil) function is needed to cope with two legacy Blender rendering features
+ * mblur (motion blur that renders 'subframes' and blurs them together), and fields
+ * rendering. Thus, the use of ugly globals from object.c
+ */
+// BAD... EVIL... JUJU...!!!!
+float frame_to_float (int cfra) /* see also bsystem_time in object.c */
+{
+ extern float bluroffs; /* bad stuff borrowed from object.c */
+ extern float fieldoffs;
+ float ctime;
- /* IPO_CONST doesn't have handles */
- if(a<2 || icu->ipo==IPO_CONST) return;
+ ctime= (float)cfra;
+ ctime+= bluroffs+fieldoffs;
+ ctime*= G.scene->r.framelen;
- bezt= icu->bezt;
- prev= 0;
- next= bezt+1;
+ return ctime;
+}
- while(a--) {
+/* ***************************** IPO Curve Sanity ********************************* */
+/* The functions here are used in various parts of Blender, usually after some editing
+ * of keyframe data has occurred. They ensure that keyframe data is properly ordered and
+ * that the handles are correctly
+ */
- if(bezt->vec[0][0]>bezt->vec[1][0]) bezt->vec[0][0]= bezt->vec[1][0];
- if(bezt->vec[2][0]<bezt->vec[1][0]) bezt->vec[2][0]= bezt->vec[1][0];
+/* This function recalculates the handles of an IPO-Curve
+ * If the BezTriples have been rearranged, sort them first before using this.
+ */
+void calchandles_ipocurve (IpoCurve *icu)
+{
+ BezTriple *bezt, *prev, *next;
+ int a= icu->totvert;
- if(icu->flag & IPO_AUTO_HORIZ)
+ /* Error checking:
+ * - need at least two points
+ * - need bezier keys
+ * - only bezier-interpolation has handles (for now)
+ */
+ if (ELEM(NULL, icu, icu->bezt) || (a < 2) || ELEM(icu->ipo, IPO_CONST, IPO_LIN))
+ return;
+
+ /* get initial pointers */
+ bezt= icu->bezt;
+ prev= NULL;
+ next= (bezt + 1);
+
+ /* loop over all beztriples, adjusting handles */
+ while (a--) {
+ /* clamp timing of handles to be on either side of beztriple */
+ if (bezt->vec[0][0] > bezt->vec[1][0]) bezt->vec[0][0]= bezt->vec[1][0];
+ if (bezt->vec[2][0] < bezt->vec[1][0]) bezt->vec[2][0]= bezt->vec[1][0];
+
+ /* calculate autohandles */
+ if (icu->flag & IPO_AUTO_HORIZ)
calchandleNurb(bezt, prev, next, 2); /* 2==special autohandle && keep extrema horizontal */
else
calchandleNurb(bezt, prev, next, 1); /* 1==special autohandle */
-
- prev= bezt;
- if(a==1) {
- next= 0;
- }
- else next++;
-
+
/* for automatic ease in and out */
- if(bezt->h1==HD_AUTO && bezt->h2==HD_AUTO) {
- if(a==0 || a==icu->totvert-1) {
- if(icu->extrap==IPO_HORIZ) {
+ if ((bezt->h1==HD_AUTO) && (bezt->h2==HD_AUTO)) {
+ /* only do this on first or last beztriple */
+ if ((a==0) || (a==icu->totvert-1)) {
+ /* set both handles to have same horizontal value as keyframe */
+ if (icu->extrap==IPO_HORIZ) {
bezt->vec[0][1]= bezt->vec[2][1]= bezt->vec[1][1];
}
}
}
+ /* advance pointers for next iteration */
+ prev= bezt;
+ if (a == 1) next= NULL;
+ else next++;
bezt++;
}
}
-void testhandles_ipocurve(IpoCurve *icu)
+/* Use when IPO-Curve with handles has changed
+ * It treats all BezTriples with the following rules:
+ * - PHASE 1: do types have to be altered?
+ * -> Auto handles: become aligned when selection status is NOT(000 || 111)
+ * -> Vector handles: become 'nothing' when (one half selected AND other not)
+ * - PHASE 2: recalculate handles
+*/
+void testhandles_ipocurve (IpoCurve *icu)
{
- /* use when something has changed with handles.
- it treats all BezTriples with the following rules:
- PHASE 1: do types have to be altered?
- Auto handles: become aligned when selection status is NOT(000 || 111)
- Vector handles: become 'nothing' when (one half selected AND other not)
- PHASE 2: recalculate handles
- */
- BezTriple *bezt;
- int flag, a;
+ BezTriple *bezt;
+ int a;
- bezt= icu->bezt;
- if(bezt==NULL) return;
+ /* only beztriples have handles (bpoints don't though) */
+ if (ELEM(NULL, icu, icu->bezt))
+ return;
- a= icu->totvert;
- while(a--) {
- flag= 0;
- if(bezt->f1 & SELECT) flag++;
- if(bezt->f2 & SELECT) flag += 2;
- if(bezt->f3 & SELECT) flag += 4;
-
- if( !(flag==0 || flag==7) ) {
- if(bezt->h1==HD_AUTO) { /* auto */
+ /* loop over beztriples */
+ for (a=0, bezt=icu->bezt; a < icu->totvert; a++, bezt++) {
+ short flag= 0;
+
+ /* flag is initialised as selection status
+ * of beztriple control-points (labelled 0,1,2)
+ */
+ if (bezt->f1 & SELECT) flag |= (1<<0); // == 1
+ if (bezt->f2 & SELECT) flag |= (1<<1); // == 2
+ if (bezt->f3 & SELECT) flag |= (1<<2); // == 4
+
+ /* one or two handles selected only */
+ if (ELEM(flag, 0, 7)==0) {
+ /* auto handles become aligned */
+ if (bezt->h1==HD_AUTO)
bezt->h1= HD_ALIGN;
- }
- if(bezt->h2==HD_AUTO) { /* auto */
+ if(bezt->h2==HD_AUTO)
bezt->h2= HD_ALIGN;
+
+ /* vector handles become 'free' when only one half selected */
+ if(bezt->h1==HD_VECT) {
+ /* only left half (1 or 2 or 1+2) */
+ if (flag < 4)
+ bezt->h1= 0;
}
-
- if(bezt->h1==HD_VECT) { /* vector */
- if(flag < 4) bezt->h1= 0;
- }
- if(bezt->h2==HD_VECT) { /* vector */
- if( flag > 3) bezt->h2= 0;
+ if(bezt->h2==HD_VECT) {
+ /* only right half (4 or 2+4) */
+ if (flag > 3)
+ bezt->h2= 0;
}
}
- bezt++;
}
+ /* recalculate handles */
calchandles_ipocurve(icu);
}
-
+/* This function sorts BezTriples so that they are arranged in chronological order,
+ * as tools working on IPO-Curves expect that the BezTriples are in order.
+ */
void sort_time_ipocurve(IpoCurve *icu)
{
- BezTriple *bezt;
- int a, ok= 1;
+ short ok= 1;
- while(ok) {
+ /* keep adjusting order of beztriples until nothing moves (bubble-sort) */
+ while (ok) {
ok= 0;
-
- if(icu->bezt) {
- bezt= icu->bezt;
- a= icu->totvert;
- while(a--) {
- if(a>0) {
- if( bezt->vec[1][0] > (bezt+1)->vec[1][0]) {
+
+ /* currently, will only be needed when there are beztriples */
+ if (icu->bezt) {
+ BezTriple *bezt;
+ int a;
+
+ /* loop over ALL points to adjust position in array and recalculate handles */
+ for (a=0, bezt=icu->bezt; a < icu->totvert; a++, bezt++) {
+ /* check if thee's a next beztriple which we could try to swap with current */
+ if (a < (icu->totvert-1)) {
+ /* swap if one is after the other (and indicate that order has changed) */
+ if (bezt->vec[1][0] > (bezt+1)->vec[1][0]) {
SWAP(BezTriple, *bezt, *(bezt+1));
ok= 1;
}
+
+ /* if either one of both of the points exceeds crosses over the keyframe time... */
+ if ( (bezt->vec[0][0] > bezt->vec[1][0]) && (bezt->vec[2][0] < bezt->vec[1][0]) ) {
+ /* swap handles if they have switched sides for some reason */
+ SWAP(float, bezt->vec[0][0], bezt->vec[2][0]);
+ SWAP(float, bezt->vec[0][1], bezt->vec[2][1]);
+ }
+ else {
+ /* clamp handles */
+ if (bezt->vec[0][0] > bezt->vec[1][0])
+ bezt->vec[0][0]= bezt->vec[1][0];
+ if (bezt->vec[2][0] < bezt->vec[1][0])
+ bezt->vec[2][0]= bezt->vec[1][0];
+ }
}
- if(bezt->vec[0][0]>bezt->vec[1][0] && bezt->vec[2][0]<bezt->vec[1][0]) {
- SWAP(float, bezt->vec[0][0], bezt->vec[2][0]);
- SWAP(float, bezt->vec[0][1], bezt->vec[2][1]);
- }
- else {
- if(bezt->vec[0][0]>bezt->vec[1][0]) bezt->vec[0][0]= bezt->vec[1][0];
- if(bezt->vec[2][0]<bezt->vec[1][0]) bezt->vec[2][0]= bezt->vec[1][0];
- }
- bezt++;
}
}
- else {
-
- }
}
}
-int test_time_ipocurve(IpoCurve *icu)
+/* This function tests if any BezTriples are out of order, thus requiring a sort */
+int test_time_ipocurve (IpoCurve *icu)
{
- BezTriple *bezt;
int a;
- if(icu->bezt) {
- bezt= icu->bezt;
- a= icu->totvert-1;
- while(a--) {
- if( bezt->vec[1][0] > (bezt+1)->vec[1][0]) {
- return 1;
- }
- bezt++;
- }
- }
- else {
+ /* currently, only need to test beztriples */
+ if (icu->bezt) {
+ BezTriple *bezt;
+ /* loop through all beztriples, stopping when one exceeds the one after it */
+ for (a=0, bezt= icu->bezt; a < (icu->totvert - 1); a++, bezt++) {
+ if (bezt->vec[1][0] > (bezt+1)->vec[1][0])
+ return 1;
+ }
}
-
+
+ /* none need any swapping */
return 0;
}
-void correct_bezpart(float *v1, float *v2, float *v3, float *v4)
+/* --------- */
+
+/* The total length of the handles is not allowed to be more
+ * than the horizontal distance between (v1-v4).
+ * This is to prevent curve loops.
+*/
+void correct_bezpart (float *v1, float *v2, float *v3, float *v4)
{
- /* the total length of the handles is not allowed to be more
- * than the horizontal distance between (v1-v4)
- * this to prevent curve loops
- */
float h1[2], h2[2], len1, len2, len, fac;
+ /* calculate handle deltas */
h1[0]= v1[0]-v2[0];
h1[1]= v1[1]-v2[1];
h2[0]= v4[0]-v3[0];
h2[1]= v4[1]-v3[1];
+ /* calculate distances:
+ * - len = span of time between keyframes
+ * - len1 = length of handle of start key
+ * - len2 = length of handle of end key
+ */
len= v4[0]- v1[0];
len1= (float)fabs(h1[0]);
len2= (float)fabs(h2[0]);
- if(len1+len2==0.0) return;
- if(len1+len2 > len) {
+ /* if the handles have no length, no need to do any corrections */
+ if ((len1+len2) == 0.0)
+ return;
+
+ /* the two handles cross over each other, so force them
+ * apart using the proportion they overlap
+ */
+ if ((len1+len2) > len) {
fac= len/(len1+len2);
v2[0]= (v1[0]-fac*h1[0]);
@@ -636,57 +798,86 @@ void correct_bezpart(float *v1, float *v2, float *v3, float *v4)
v3[0]= (v4[0]-fac*h2[0]);
v3[1]= (v4[1]-fac*h2[1]);
-
}
}
-/* *********************** ARITH *********************** */
+#if 0 // TODO: enable when we have per-segment interpolation
+/* This function sets the interpolation mode for an entire Ipo-Curve.
+ * It is primarily used for patching old files, but is also used in the interface
+ * to make sure that all segments of the curve use the same interpolation.
+ */
+void set_interpolation_ipocurve (IpoCurve *icu, short ipo)
+{
+ BezTriple *bezt;
+ int a;
+
+ /* validate arguments */
+ if (icu == NULL) return;
+ if (ELEM3(ipo, IPO_CONST, IPO_LIN, IPO_BEZ)==0) return;
-int findzero(float x, float q0, float q1, float q2, float q3, float *o)
+ /* set interpolation mode for whole curve */
+ icu->ipo= ipo;
+
+ /* set interpolation mode of all beztriples */
+ for (a=0, bezt=icu->bezt; a<icu->totvert; a++, bezt++)
+ bezt->ipo= ipo;
+}
+#endif // TODO: enable when we have per-segment interpolation
+
+/* ***************************** Curve Calculations ********************************* */
+
+/* find root/zero */
+int findzero (float x, float q0, float q1, float q2, float q3, float *o)
{
double c0, c1, c2, c3, a, b, c, p, q, d, t, phi;
int nr= 0;
- c0= q0-x;
- c1= 3*(q1-q0);
- c2= 3*(q0-2*q1+q2);
- c3= q3-q0+3*(q1-q2);
+ c0= q0 - x;
+ c1= 3 * (q1 - q0);
+ c2= 3 * (q0 - 2*q1 + q2);
+ c3= q3 - q0 + 3 * (q1 - q2);
- if(c3!=0.0) {
+ if (c3 != 0.0) {
a= c2/c3;
b= c1/c3;
c= c0/c3;
a= a/3;
-
- p= b/3-a*a;
- q= (2*a*a*a-a*b+c)/2;
- d= q*q+p*p*p;
-
- if(d>0.0) {
+
+ p= b/3 - a*a;
+ q= (2*a*a*a - a*b + c) / 2;
+ d= q*q + p*p*p;
+
+ if (d > 0.0) {
t= sqrt(d);
- o[0]= (float)(Sqrt3d(-q+t)+Sqrt3d(-q-t)-a);
- if(o[0]>= SMALL && o[0]<=1.000001) return 1;
+ o[0]= (float)(Sqrt3d(-q+t) + Sqrt3d(-q-t) - a);
+
+ if ((o[0] >= SMALL) && (o[0] <= 1.000001)) return 1;
else return 0;
}
- else if(d==0.0) {
+ else if (d == 0.0) {
t= Sqrt3d(-q);
- o[0]= (float)(2*t-a);
- if(o[0]>=SMALL && o[0]<=1.000001) nr++;
+ o[0]= (float)(2*t - a);
+
+ if ((o[0] >= SMALL) && (o[0] <= 1.000001)) nr++;
o[nr]= (float)(-t-a);
- if(o[nr]>=SMALL && o[nr]<=1.000001) return nr+1;
+
+ if ((o[nr] >= SMALL) && (o[nr] <= 1.000001)) return nr+1;
else return nr;
}
else {
- phi= acos(-q/sqrt(-(p*p*p)));
+ phi= acos(-q / sqrt(-(p*p*p)));
t= sqrt(-p);
p= cos(phi/3);
- q= sqrt(3-3*p*p);
- o[0]= (float)(2*t*p-a);
- if(o[0]>=SMALL && o[0]<=1.000001) nr++;
- o[nr]= (float)(-t*(p+q)-a);
- if(o[nr]>=SMALL && o[nr]<=1.000001) nr++;
- o[nr]= (float)(-t*(p-q)-a);
- if(o[nr]>=SMALL && o[nr]<=1.000001) return nr+1;
+ q= sqrt(3 - 3*p*p);
+ o[0]= (float)(2*t*p - a);
+
+ if ((o[0] >= SMALL) && (o[0] <= 1.000001)) nr++;
+ o[nr]= (float)(-t * (p + q) - a);
+
+ if ((o[nr] >= SMALL) && (o[nr] <= 1.000001)) nr++;
+ o[nr]= (float)(-t * (p - q) - a);
+
+ if ((o[nr] >= SMALL) && (o[nr] <= 1.000001)) return nr+1;
else return nr;
}
}
@@ -695,83 +886,97 @@ int findzero(float x, float q0, float q1, float q2, float q3, float *o)
b=c1;
c=c0;
- if(a!=0.0) {
- p=b*b-4*a*c;
- if(p>0) {
+ if (a != 0.0) {
+ // discriminant
+ p= b*b - 4*a*c;
+
+ if (p > 0) {
p= sqrt(p);
- o[0]= (float)((-b-p)/(2*a));
- if(o[0]>=SMALL && o[0]<=1.000001) nr++;
+ o[0]= (float)((-b-p) / (2 * a));
+
+ if ((o[0] >= SMALL) && (o[0] <= 1.000001)) nr++;
o[nr]= (float)((-b+p)/(2*a));
- if(o[nr]>=SMALL && o[nr]<=1.000001) return nr+1;
+
+ if ((o[nr] >= SMALL) && (o[nr] <= 1.000001)) return nr+1;
else return nr;
}
- else if(p==0) {
- o[0]= (float)(-b/(2*a));
- if(o[0]>=SMALL && o[0]<=1.000001) return 1;
+ else if (p == 0) {
+ o[0]= (float)(-b / (2 * a));
+ if ((o[0] >= SMALL) && (o[0] <= 1.000001)) return 1;
else return 0;
}
}
- else if(b!=0.0) {
+ else if (b != 0.0) {
o[0]= (float)(-c/b);
- if(o[0]>=SMALL && o[0]<=1.000001) return 1;
+
+ if ((o[0] >= SMALL) && (o[0] <= 1.000001)) return 1;
else return 0;
}
- else if(c==0.0) {
+ else if (c == 0.0) {
o[0]= 0.0;
return 1;
}
+
return 0;
}
}
-void berekeny(float f1, float f2, float f3, float f4, float *o, int b)
+void berekeny (float f1, float f2, float f3, float f4, float *o, int b)
{
float t, c0, c1, c2, c3;
int a;
c0= f1;
- c1= 3.0f*(f2 - f1);
- c2= 3.0f*(f1 - 2.0f*f2 + f3);
- c3= f4 - f1 + 3.0f*(f2-f3);
+ c1= 3.0f * (f2 - f1);
+ c2= 3.0f * (f1 - 2.0f*f2 + f3);
+ c3= f4 - f1 + 3.0f * (f2 - f3);
- for(a=0; a<b; a++) {
+ for (a=0; a < b; a++) {
t= o[a];
- o[a]= c0+t*c1+t*t*c2+t*t*t*c3;
+ o[a]= c0 + t*c1 + t*t*c2 + t*t*t*c3;
}
}
-void berekenx(float *f, float *o, int b)
+void berekenx (float *f, float *o, int b)
{
float t, c0, c1, c2, c3;
int a;
c0= f[0];
- c1= 3*(f[3]-f[0]);
- c2= 3*(f[0]-2*f[3]+f[6]);
- c3= f[9]-f[0]+3*(f[3]-f[6]);
- for(a=0; a<b; a++) {
+ c1= 3 * (f[3] - f[0]);
+ c2= 3 * (f[0] - 2*f[3] + f[6]);
+ c3= f[9] - f[0] + 3 * (f[3] - f[6]);
+
+ for (a=0; a < b; a++) {
t= o[a];
- o[a]= c0+t*c1+t*t*c2+t*t*t*c3;
+ o[a]= c0 + t*c1 + t*t*c2 + t*t*t*c3;
}
}
-/* we need the local transform = current transform - (parent transform + bone transform) */
-/* (local transform is on action channel level) */
-static void posechannel_get_local_transform(bPoseChannel *pchan, float *loc, float *eul, float *size)
+/* ***************************** IPO - Calculations ********************************* */
+
+/* ---------------------- Curve Evaluation --------------------------- */
+
+/* helper function for evaluating drivers:
+ * - we need the local transform = current transform - (parent transform + bone transform)
+ * - (local transform is on action channel level)
+ */
+static void posechannel_get_local_transform (bPoseChannel *pchan, float loc[], float eul[], float size[])
{
- float diff_mat[4][4];
float parmat[4][4], offs_bone[4][4], imat[4][4];
+ float diff_mat[4][4];
+ /* get first the parent + bone transform in parmat */
if (pchan->parent) {
- /* get first the parent + bone transform in parmat */
-
/* bone transform itself */
Mat4CpyMat3(offs_bone, pchan->bone->bone_mat);
+
/* The bone's root offset (is in the parent's coordinate system) */
VECCOPY(offs_bone[3], pchan->bone->head);
+
/* Get the length translation of parent (length along y axis) */
offs_bone[3][1]+= pchan->parent->bone->length;
-
+
Mat4MulSerie(parmat, pchan->parent->pose_mat, offs_bone, NULL, NULL, NULL, NULL, NULL, NULL);
/* invert it */
@@ -780,63 +985,78 @@ static void posechannel_get_local_transform(bPoseChannel *pchan, float *loc, flo
else {
Mat4CpyMat3(offs_bone, pchan->bone->bone_mat);
VECCOPY(offs_bone[3], pchan->bone->head);
-
+
/* invert it */
Mat4Invert(imat, offs_bone);
-
}
/* difference: current transform - (parent transform + bone transform) */
Mat4MulMat4(diff_mat, pchan->pose_mat, imat);
- if(loc)
+ /* extract relevant components */
+ if (loc)
VECCOPY(loc, diff_mat[3]);
- if(eul)
+ if (eul)
Mat4ToEul(diff_mat, eul);
- if(size)
+ if (size)
Mat4ToSize(diff_mat, size);
-
}
-/* has to return a float value */
-static float eval_driver(IpoDriver *driver, float ipotime)
+/* evaluate an IPO-driver to get a 'time' value to use instead of "ipotime"
+ * - "ipotime" is the frame at which IPO-curve is being evaluated
+ * - has to return a float value
+ */
+static float eval_driver (IpoDriver *driver, float ipotime)
{
-
- if(driver->type == IPO_DRIVER_TYPE_PYTHON) {
+ /* currently, drivers are either PyDrivers (evaluating a PyExpression, or Object/Pose-Channel transforms) */
+ if (driver->type == IPO_DRIVER_TYPE_PYTHON) {
/* check for empty or invalid expression */
- if ((driver->name[0] == '\0') ||
- (driver->flag & IPO_DRIVER_FLAG_INVALID))
+ if ( (driver->name[0] == '\0') ||
+ (driver->flag & IPO_DRIVER_FLAG_INVALID) )
+ {
return 0.0f;
- /* this evals the expression and returns its result:
- * (on errors it reports, then returns 0.0f) */
+ }
+
+ /* this evaluates the expression using Python,and returns its result:
+ * - on errors it reports, then returns 0.0f
+ */
return BPY_pydriver_eval(driver);
}
else {
Object *ob= driver->ob;
-
- if(ob==NULL) return 0.0f;
- if(ob->proxy_from)
+
+ /* must have an object to evaluate */
+ if (ob == NULL)
+ return 0.0f;
+
+ /* if a proxy, use the proxy source*/
+ if (ob->proxy_from)
ob= ob->proxy_from;
- if(driver->blocktype==ID_OB) {
- /* depsgraph failure; ob ipos are calculated in where_is_object, this might get called too late */
- if(ob->ipo && ob->ctime!=ipotime) {
+ /* use given object as driver */
+ if (driver->blocktype == ID_OB) {
+ /* depsgraph failure: ob ipos are calculated in where_is_object, this might get called too late */
+ if ((ob->ipo) && (ob->ctime != ipotime)) {
+ /* calculate the value of relevant channel on the Object, but do not write the value
+ * calculated on to the Object but onto "ipotime" instead
+ */
calc_ipo_spec(ob->ipo, driver->adrcode, &ipotime);
return ipotime;
}
- switch(driver->adrcode) {
+ /* return the value of the relevant channel */
+ switch (driver->adrcode) {
case OB_LOC_X:
return ob->loc[0];
case OB_LOC_Y:
return ob->loc[1];
case OB_LOC_Z:
return ob->loc[2];
- case OB_ROT_X:
+ case OB_ROT_X: /* hack: euler rotations are divided by 10 deg to fit on same axes as other channels */
return ob->rot[0]/(M_PI_2/9.0);
- case OB_ROT_Y:
+ case OB_ROT_Y: /* hack: euler rotations are divided by 10 deg to fit on same axes as other channels */
return ob->rot[1]/(M_PI_2/9.0);
- case OB_ROT_Z:
+ case OB_ROT_Z: /* hack: euler rotations are divided by 10 deg to fit on same axes as other channels */
return ob->rot[2]/(M_PI_2/9.0);
case OB_SIZE_X:
return ob->size[0];
@@ -846,14 +1066,20 @@ static float eval_driver(IpoDriver *driver, float ipotime)
return ob->size[2];
}
}
+
+ /* use given pose-channel as driver */
else { /* ID_AR */
bPoseChannel *pchan= get_pose_channel(ob->pose, driver->name);
- if(pchan && pchan->bone) {
-
- /* rotation difference is not a simple driver (i.e. value drives value), but the angle between 2 bones is driving stuff... which is useful */
- if(driver->adrcode==OB_ROT_DIFF) {
+
+ /* must have at least 1 bone to use */
+ if (pchan && pchan->bone) {
+ /* rotation difference is not a simple driver (i.e. value drives value), but the angle between 2 bones is driving stuff...
+ * - the name of the second pchan is also stored in driver->name, but packed after the other one by DRIVER_NAME_OFFS chars
+ */
+ if (driver->adrcode == OB_ROT_DIFF) {
bPoseChannel *pchan2= get_pose_channel(ob->pose, driver->name+DRIVER_NAME_OFFS);
- if(pchan2 && pchan2->bone) {
+
+ if (pchan2 && pchan2->bone) {
float q1[4], q2[4], quat[4], angle;
Mat4ToQuat(pchan->pose_mat, q1);
@@ -864,26 +1090,32 @@ static float eval_driver(IpoDriver *driver, float ipotime)
angle = 2.0f * (saacos(quat[0]));
angle= ABS(angle);
- return angle>M_PI?2.0f*M_PI-angle:angle;
+ return (angle > M_PI) ? ((2.0f * M_PI) - angle) : (angle);
}
}
+
+ /* standard driver */
else {
float loc[3], eul[3], size[3];
+ /* retrieve local transforms to return
+ * - we use eulers here NOT quats, so that Objects can be driven by bones easily
+ * also, this way is more understandable for users
+ */
posechannel_get_local_transform(pchan, loc, eul, size);
-
- switch(driver->adrcode) {
+
+ switch (driver->adrcode) {
case OB_LOC_X:
return loc[0];
case OB_LOC_Y:
return loc[1];
case OB_LOC_Z:
return loc[2];
- case OB_ROT_X:
+ case OB_ROT_X: /* hack: euler rotations are divided by 10 deg to fit on same axes as other channels */
return eul[0]/(M_PI_2/9.0);
- case OB_ROT_Y:
+ case OB_ROT_Y: /* hack: euler rotations are divided by 10 deg to fit on same axes as other channels */
return eul[1]/(M_PI_2/9.0);
- case OB_ROT_Z:
+ case OB_ROT_Z: /* hack: euler rotations are divided by 10 deg to fit on same axes as other channels */
return eul[2]/(M_PI_2/9.0);
case OB_SIZE_X:
return size[0];
@@ -896,227 +1128,722 @@ static float eval_driver(IpoDriver *driver, float ipotime)
}
}
}
+
+ /* return 0.0f, as couldn't find relevant data to use */
return 0.0f;
}
-float eval_icu(IpoCurve *icu, float ipotime)
+/* evaluate and return the value of the given IPO-curve at the specified frame ("evaltime") */
+float eval_icu(IpoCurve *icu, float evaltime)
{
- BezTriple *bezt, *prevbezt;
- float v1[2], v2[2], v3[2], v4[2], opl[32], dx, fac;
- float cycdx, cycdy, ofs, cycyofs, cvalue = 0.0;
- int a, b;
-
- cycyofs= 0.0;
+ float cvalue = 0.0f;
- if(icu->driver) {
+ /* if there is a driver, evaluate it to find value to use as "evaltime"
+ * - this value will also be returned as the value of the 'curve', if there are no keyframes
+ */
+ if (icu->driver) {
/* ipotime now serves as input for the curve */
- ipotime= cvalue= eval_driver(icu->driver, ipotime);
+ evaltime= cvalue= eval_driver(icu->driver, evaltime);
}
- if(icu->bezt) {
+
+ /* there are keyframes (in the form of BezTriples) which can be interpolated between */
+ if (icu->bezt) {
+ /* get pointers */
+ BezTriple *bezt, *prevbezt, *lastbezt;
+ float v1[2], v2[2], v3[2], v4[2], opl[32], dx, fac;
+ float cycdx, cycdy, ofs, cycyofs= 0.0;
+ int a, b;
+
+ /* get pointers */
+ a= icu->totvert-1;
prevbezt= icu->bezt;
bezt= prevbezt+1;
- a= icu->totvert-1;
+ lastbezt= prevbezt + a;
- /* cyclic? */
- if(icu->extrap & IPO_CYCL) {
- ofs= icu->bezt->vec[1][0];
- cycdx= (icu->bezt+icu->totvert-1)->vec[1][0] - ofs;
- cycdy= (icu->bezt+icu->totvert-1)->vec[1][1] - icu->bezt->vec[1][1];
- if(cycdx!=0.0) {
-
- if(icu->extrap & IPO_DIR) {
- cycyofs= (float)floor((ipotime-ofs)/cycdx);
- cycyofs*= cycdy;
+ /* extrapolation mode is 'cyclic' - find relative place within a cycle */
+ if (icu->extrap & IPO_CYCL) {
+ /* ofs is start frame of cycle */
+ ofs= prevbezt->vec[1][0];
+
+ /* calculate period and amplitude (total height) of a cycle */
+ cycdx= lastbezt->vec[1][0] - prevbezt->vec[1][0];
+ cycdy= lastbezt->vec[1][1] - prevbezt->vec[1][1];
+
+ /* cycle occurs over some period of time (cycdx should be positive all the time) */
+ if (cycdx) {
+ /* check if 'cyclic extrapolation', and thus calculate y-offset for this cycle
+ * - IPO_CYCLX = (IPO_CYCL + IPO_DIR)
+ */
+ if (icu->extrap & IPO_DIR) {
+ cycyofs = (float)floor((evaltime - ofs) / cycdx);
+ cycyofs *= cycdy;
}
-
- ipotime= (float)(fmod(ipotime-ofs, cycdx)+ofs);
- if(ipotime<ofs) ipotime+= cycdx;
+
+ /* calculate where in the cycle we are (overwrite evaltime to reflect this) */
+ evaltime= (float)(fmod(evaltime-ofs, cycdx) + ofs);
+ if (evaltime < ofs) evaltime += cycdx;
}
}
- /* endpoints? */
-
- if(prevbezt->vec[1][0]>=ipotime) {
- if( (icu->extrap & IPO_DIR) && icu->ipo!=IPO_CONST) {
- dx= prevbezt->vec[1][0]-ipotime;
- fac= prevbezt->vec[1][0]-prevbezt->vec[0][0];
- if(fac!=0.0) {
- fac= (prevbezt->vec[1][1]-prevbezt->vec[0][1])/fac;
- cvalue= prevbezt->vec[1][1]-fac*dx;
+ /* evaluation time at or past endpoints? */
+ // TODO: for per-bezt interpolation, replace all icu->ipo with (bezt)->ipo
+ if (prevbezt->vec[1][0] >= evaltime) {
+ /* before or on first keyframe */
+ if ((icu->extrap & IPO_DIR) && (icu->ipo != IPO_CONST)) {
+ /* linear or bezier interpolation */
+ if (icu->ipo==IPO_LIN) {
+ /* Use the next center point instead of our own handle for
+ * linear interpolated extrapolate
+ */
+ if (icu->totvert == 1)
+ cvalue= prevbezt->vec[1][1];
+ else {
+ bezt = prevbezt+1;
+ dx= prevbezt->vec[1][0] - evaltime;
+ fac= bezt->vec[1][0] - prevbezt->vec[1][0];
+
+ /* prevent division by zero */
+ if (fac) {
+ fac= (bezt->vec[1][1] - prevbezt->vec[1][1]) / fac;
+ cvalue= prevbezt->vec[1][1] - (fac * dx);
+ }
+ else
+ cvalue= prevbezt->vec[1][1];
+ }
+ }
+ else {
+ /* Use the first handle (earlier) of first BezTriple to calculate the
+ * gradient and thus the value of the curve at evaltime
+ */
+ dx= prevbezt->vec[1][0] - evaltime;
+ fac= prevbezt->vec[1][0] - prevbezt->vec[0][0];
+
+ /* prevent division by zero */
+ if (fac) {
+ fac= (prevbezt->vec[1][1] - prevbezt->vec[0][1]) / fac;
+ cvalue= prevbezt->vec[1][1] - (fac * dx);
+ }
+ else
+ cvalue= prevbezt->vec[1][1];
}
- else cvalue= prevbezt->vec[1][1];
}
- else cvalue= prevbezt->vec[1][1];
-
- cvalue+= cycyofs;
+ else {
+ /* constant (IPO_HORIZ) extrapolation or constant interpolation,
+ * so just extend first keyframe's value
+ */
+ cvalue= prevbezt->vec[1][1];
+ }
}
- else if( (prevbezt+a)->vec[1][0]<=ipotime) {
- if( (icu->extrap & IPO_DIR) && icu->ipo!=IPO_CONST) {
- prevbezt+= a;
- dx= ipotime-prevbezt->vec[1][0];
- fac= prevbezt->vec[2][0]-prevbezt->vec[1][0];
-
- if(fac!=0) {
- fac= (prevbezt->vec[2][1]-prevbezt->vec[1][1])/fac;
- cvalue= prevbezt->vec[1][1]+fac*dx;
+ else if (lastbezt->vec[1][0] <= evaltime) {
+ /* after or on last keyframe */
+ if( (icu->extrap & IPO_DIR) && (icu->ipo != IPO_CONST)) {
+ /* linear or bezier interpolation */
+ if (icu->ipo==IPO_LIN) {
+ /* Use the next center point instead of our own handle for
+ * linear interpolated extrapolate
+ */
+ if (icu->totvert == 1)
+ cvalue= lastbezt->vec[1][1];
+ else {
+ prevbezt = lastbezt - 1;
+ dx= evaltime - lastbezt->vec[1][0];
+ fac= lastbezt->vec[1][0] - prevbezt->vec[1][0];
+
+ /* prevent division by zero */
+ if (fac) {
+ fac= (lastbezt->vec[1][1] - prevbezt->vec[1][1]) / fac;
+ cvalue= lastbezt->vec[1][1] + (fac * dx);
+ }
+ else
+ cvalue= lastbezt->vec[1][1];
+ }
+ }
+ else {
+ /* Use the gradient of the second handle (later) of last BezTriple to calculate the
+ * gradient and thus the value of the curve at evaltime
+ */
+ dx= evaltime - lastbezt->vec[1][0];
+ fac= lastbezt->vec[2][0] - lastbezt->vec[1][0];
+
+ /* prevent division by zero */
+ if (fac) {
+ fac= (lastbezt->vec[2][1] - lastbezt->vec[1][1]) / fac;
+ cvalue= lastbezt->vec[1][1] + (fac * dx);
+ }
+ else
+ cvalue= lastbezt->vec[1][1];
}
- else cvalue= prevbezt->vec[1][1];
}
- else cvalue= (prevbezt+a)->vec[1][1];
-
- cvalue+= cycyofs;
+ else {
+ /* constant (IPO_HORIZ) extrapolation or constant interpolation,
+ * so just extend last keyframe's value
+ */
+ cvalue= lastbezt->vec[1][1];
+ }
}
else {
- while(a--) {
- if(prevbezt->vec[1][0]<=ipotime && bezt->vec[1][0]>=ipotime) {
- if(icu->ipo==IPO_CONST) {
- cvalue= prevbezt->vec[1][1]+cycyofs;
+ /* evaltime occurs somewhere in the middle of the curve */
+ // TODO: chould be optimised by using a binary search instead???
+ for (a=0; prevbezt && bezt && (a < icu->totvert-1); a++, prevbezt=bezt, bezt++) {
+ /* evaltime occurs within the interval defined by these two keyframes */
+ if ((prevbezt->vec[1][0] <= evaltime) && (bezt->vec[1][0] >= evaltime)) {
+ /* value depends on interpolation mode */
+ if (icu->ipo == IPO_CONST) {
+ /* constant (evaltime not relevant, so no interpolation needed) */
+ cvalue= prevbezt->vec[1][1];
}
- else if(icu->ipo==IPO_LIN) {
- fac= bezt->vec[1][0]-prevbezt->vec[1][0];
- if(fac==0) cvalue= cycyofs+prevbezt->vec[1][1];
- else {
- fac= (ipotime-prevbezt->vec[1][0])/fac;
- cvalue= cycyofs+prevbezt->vec[1][1]+ fac*(bezt->vec[1][1]-prevbezt->vec[1][1]);
+ else if (icu->ipo == IPO_LIN) {
+ /* linear - interpolate between values of the two keyframes */
+ fac= bezt->vec[1][0] - prevbezt->vec[1][0];
+
+ /* prevent division by zero */
+ if (fac) {
+ fac= (evaltime - prevbezt->vec[1][0]) / fac;
+ cvalue= prevbezt->vec[1][1] + (fac * (bezt->vec[1][1] - prevbezt->vec[1][1]));
}
+ else
+ cvalue= prevbezt->vec[1][1];
}
else {
+ /* bezier interpolation */
+ /* v1,v2 are the first keyframe and its 2nd handle */
v1[0]= prevbezt->vec[1][0];
v1[1]= prevbezt->vec[1][1];
v2[0]= prevbezt->vec[2][0];
v2[1]= prevbezt->vec[2][1];
-
+ /* v3,v4 are the last keyframe's 1st handle + the last keyframe */
v3[0]= bezt->vec[0][0];
v3[1]= bezt->vec[0][1];
v4[0]= bezt->vec[1][0];
v4[1]= bezt->vec[1][1];
-
+
+ /* adjust handles so that they don't overlap (forming a loop) */
correct_bezpart(v1, v2, v3, v4);
- b= findzero(ipotime, v1[0], v2[0], v3[0], v4[0], opl);
- if(b) {
+ /* try to get a value for this position - if failure, try another set of points */
+ b= findzero(evaltime, v1[0], v2[0], v3[0], v4[0], opl);
+ if (b) {
berekeny(v1[1], v2[1], v3[1], v4[1], opl, 1);
- cvalue= opl[0]+cycyofs;
+ cvalue= opl[0];
break;
}
}
}
- prevbezt= bezt;
- bezt++;
}
}
+
+ /* apply y-offset (for 'cyclic extrapolation') to calculated value */
+ cvalue+= cycyofs;
}
-
- if(icu->ymin < icu->ymax) {
- if(cvalue < icu->ymin) cvalue= icu->ymin;
- else if(cvalue > icu->ymax) cvalue= icu->ymax;
+
+ /* clamp evaluated value to lie within allowable value range for this channel */
+ if (icu->ymin < icu->ymax) {
+ CLAMP(cvalue, icu->ymin, icu->ymax);
}
+ /* return evaluated value */
return cvalue;
}
-void calc_icu(IpoCurve *icu, float ctime)
+/* ------------------- IPO-Block/Curve Calculation - General API ----------------------- */
+
+/* calculate the value of the given IPO-curve at the current frame, and set its curval */
+void calc_icu (IpoCurve *icu, float ctime)
{
+ /* calculate and set curval (evaluates driver too) */
icu->curval= eval_icu(icu, ctime);
}
-float calc_ipo_time(Ipo *ipo, float ctime)
+/* calculate for the current frame, all IPO-curves in IPO-block that can be evaluated
+ * - icu->curval is set for all IPO-curves which are evaluated!
+ */
+void calc_ipo (Ipo *ipo, float ctime)
{
+ IpoCurve *icu;
+
+ /* if there is no IPO block to evaluate, or whole block is "muted" */
+ if (ipo == NULL) return;
+ if (ipo->muteipo) return;
+
+ /* loop over all curves */
+ for (icu= ipo->curve.first; icu; icu= icu->next) {
+ /* only evaluated curve if allowed to:
+ * - Muted channels should not be evaluated as they shouldn't have any effect
+ * --> user explictly turned them off!
+ * - Drivers should be evaluated at all updates
+ * --> TODO Note: drivers should be separated from standard channels
+ * - IPO_LOCK is not set, as it is set by some internal mechanisms to prevent
+ * IPO-curve from overwriting data (currently only used for IPO-Record).
+ */
+ if ((icu->driver) || (icu->flag & IPO_LOCK)==0) {
+ if ((icu->flag & IPO_MUTE)==0)
+ calc_icu(icu, ctime);
+ }
+ }
+}
- if(ipo && ipo->blocktype==ID_OB) {
- IpoCurve *icu= ipo->curve.first;
+/* ------------------- IPO-Block/Curve Calculation - Special Hacks ----------------------- */
- while(icu) {
- if (icu->adrcode==OB_TIME) {
- calc_icu(icu, ctime);
- return 10.0f*icu->curval;
- }
- icu= icu->next;
- }
+/* Calculate and return the value of the 'Time' Ipo-Curve from an Object,
+ * OR return the current time if not found
+ * - used in object.c -> bsystem_time()
+ */
+float calc_ipo_time (Ipo *ipo, float ctime)
+{
+ /* only Time IPO from Object IPO-blocks are relevant */
+ if ((ipo) && (ipo->blocktype == ID_OB)) {
+ IpoCurve *icu= find_ipocurve(ipo, OB_TIME);
+
+ /* only calculate (and set icu->curval) for time curve */
+ if (icu) {
+ calc_icu(icu, ctime);
+ return (10.0f * icu->curval);
+ }
}
+ /* no appropriate time-curve found */
return ctime;
}
-void calc_ipo(Ipo *ipo, float ctime)
+/* Evaluate the specified channel in the given IPO block on the specified frame (ctime),
+ * writing the value into that channel's icu->curval, but ALSO dumping it in ctime.
+ * - Returns success and modifies ctime!
+ */
+short calc_ipo_spec (Ipo *ipo, int adrcode, float *ctime)
+{
+ IpoCurve *icu= find_ipocurve(ipo, adrcode);
+
+ /* only evaluate if found */
+ if (icu) {
+ /* only calculate if allowed to (not locked and not muted)
+ * - drivers not taken into account, because this may be called when calculating a driver
+ */
+ if ((icu->flag & (IPO_LOCK|IPO_MUTE))==0)
+ calc_icu(icu, *ctime);
+
+ /* value resulting from calculations is written into ctime! */
+ *ctime= icu->curval;
+ return 1;
+ }
+
+ /* couldn't evaluate */
+ return 0;
+}
+
+/* ***************************** IPO - DataAPI ********************************* */
+
+/* --------------------- Flush/Execute IPO Values ----------------------------- */
+
+/* Flush IpoCurve->curvals to the data they affect (defined by ID)
+ * - not for Actions or Constraints! (those have their own special handling)
+ */
+void execute_ipo (ID *id, Ipo *ipo)
{
IpoCurve *icu;
+ void *poin;
+ int type;
- if(ipo==NULL) return;
- if(ipo->muteipo) return;
+ /* don't do anything without an IPO block */
+ if (ipo == NULL)
+ return;
- for(icu= ipo->curve.first; icu; icu= icu->next) {
- if(icu->driver || (icu->flag & IPO_LOCK)==0) {
- if((icu->flag & IPO_MUTE)==0)
- calc_icu(icu, ctime);
+ /* loop over IPO Curves, getting pointer to var to affect, and write into that pointer */
+ for (icu= ipo->curve.first; icu; icu= icu->next) {
+ poin= get_ipo_poin(id, icu, &type);
+ if (poin) write_ipo_poin(poin, type, icu->curval);
+ }
+}
+
+/* Flush Action-Channel IPO data to Pose Channel */
+void execute_action_ipo (bActionChannel *achan, bPoseChannel *pchan)
+{
+ /* only do this if there's an Action Channel and Pose Channel to use */
+ if (achan && achan->ipo && pchan) {
+ IpoCurve *icu;
+
+ /* loop over IPO-curves, getting a pointer to pchan var to write to
+ * - assume for now that only 'float' channels will ever get written into
+ */
+ for (icu= achan->ipo->curve.first; icu; icu= icu->next) {
+ void *poin= get_pchan_ipo_poin(pchan, icu->adrcode);
+ if (poin) write_ipo_poin(poin, IPO_FLOAT, icu->curval);
}
}
}
-/* ************************************** */
-/* DO THE IPO! */
-/* ************************************** */
-void write_ipo_poin(void *poin, int type, float val)
+/* --------------------- Force Calculation + Flush IPO Values ----------------------------- */
+
+/* Calculate values for given IPO block, then flush to all of block's users
+ * - for general usage
+ */
+void do_ipo (Ipo *ipo)
{
+ if (ipo) {
+ float ctime= frame_to_float(G.scene->r.cfra);
+
+ /* calculate values, then flush to all users of this IPO block */
+ calc_ipo(ipo, ctime);
+ do_ipo_nocalc(ipo);
+ }
+}
- switch(type) {
- case IPO_FLOAT:
- *( (float *)poin)= val;
- break;
- case IPO_FLOAT_DEGR:
- *( (float *)poin)= (float)(val*M_PI_2/9.0);
- break;
- case IPO_INT:
- case IPO_INT_BIT:
- case IPO_LONG:
- *( (int *)poin)= (int)val;
- break;
- case IPO_SHORT:
- case IPO_SHORT_BIT:
- *( (short *)poin)= (short)val;
- break;
- case IPO_CHAR:
- case IPO_CHAR_BIT:
- *( (char *)poin)= (char)val;
- break;
+/* Calculate values for given Material's IPO block, then flush to given Material only */
+void do_mat_ipo (Material *ma)
+{
+ float ctime;
+
+ if (ELEM(NULL, ma, ma->ipo))
+ return;
+
+ ctime= frame_to_float(G.scene->r.cfra);
+ /* if(ob->ipoflag & OB_OFFS_OB) ctime-= ob->sf; */
+
+ /* calculate values for current time, then flush values to given material only */
+ calc_ipo(ma->ipo, ctime);
+ execute_ipo((ID *)ma, ma->ipo);
+}
+
+/* Calculate values for given Object's IPO block, then flush to given Object only
+ * - there's also some funky stuff that looks like it's for scene layers
+ */
+void do_ob_ipo (Object *ob)
+{
+ float ctime;
+ unsigned int lay;
+
+ if (ob->ipo == NULL)
+ return;
+
+ /* do not set ob->ctime here: for example when parent in invisible layer */
+ ctime= bsystem_time(ob, (float) G.scene->r.cfra, 0.0);
+
+ /* calculate values of */
+ calc_ipo(ob->ipo, ctime);
+
+ /* Patch: remember localview */
+ lay= ob->lay & 0xFF000000;
+
+ /* flush IPO values to this object only */
+ execute_ipo((ID *)ob, ob->ipo);
+
+ /* hack: for layer animation??? - is this what this is? (Aligorith, 28Sep2008) */
+ ob->lay |= lay;
+ if ((ob->id.name[2]=='S') && (ob->id.name[3]=='C') && (ob->id.name[4]=='E')) {
+ if (strcmp(G.scene->id.name+2, ob->id.name+6)==0) {
+ G.scene->lay= ob->lay;
+ copy_view3d_lock(0);
+ /* no redraw here! creates too many calls */
+ }
}
}
-float read_ipo_poin(void *poin, int type)
+/* Only execute those IPO-Curves with drivers, on the current frame, for the given Object
+ * - TODO: Drivers should really be made separate from standard anim channels
+ */
+void do_ob_ipodrivers (Object *ob, Ipo *ipo, float ctime)
{
- float val = 0.0;
+ IpoCurve *icu;
+ void *poin;
+ int type;
- switch(type) {
- case IPO_FLOAT:
- val= *( (float *)poin);
+ for (icu= ipo->curve.first; icu; icu= icu->next) {
+ if (icu->driver) {
+ icu->curval= eval_icu(icu, ctime);
+
+ poin= get_ipo_poin((ID *)ob, icu, &type);
+ if (poin) write_ipo_poin(poin, type, icu->curval);
+ }
+ }
+}
+
+/* Special variation to calculate IPO values for Sequence + perform other stuff */
+void do_seq_ipo (Sequence *seq, int cfra)
+{
+ float ctime, div;
+
+ /* seq_ipo has an exception: calc both fields immediately */
+ if (seq->ipo) {
+ if ((seq->flag & SEQ_IPO_FRAME_LOCKED) != 0) {
+ ctime = frame_to_float(cfra);
+ div = 1.0;
+ }
+ else {
+ ctime= frame_to_float(cfra - seq->startdisp);
+ div= (seq->enddisp - seq->startdisp) / 100.0f;
+ if (div == 0.0) return;
+ }
+
+ /* 2nd field */
+ calc_ipo(seq->ipo, (ctime+0.5f)/div);
+ execute_ipo((ID *)seq, seq->ipo);
+ seq->facf1= seq->facf0;
+
+ /* 1st field */
+ calc_ipo(seq->ipo, ctime/div);
+ execute_ipo((ID *)seq, seq->ipo);
+ }
+ else
+ seq->facf1= seq->facf0= 1.0f;
+}
+
+/* --------- */
+
+
+/* exception: it does calc for objects...
+ * now find out why this routine was used anyway!
+ */
+void do_ipo_nocalc (Ipo *ipo)
+{
+ Object *ob;
+ Material *ma;
+ Tex *tex;
+ World *wo;
+ Lamp *la;
+ Camera *ca;
+ bSound *snd;
+
+ if (ipo == NULL)
+ return;
+
+ /* only flush IPO values (without calculating first/again) on
+ * to the datablocks that use the given IPO block
+ */
+ switch (ipo->blocktype) {
+ case ID_OB:
+ for (ob= G.main->object.first; ob; ob= ob->id.next) {
+ if (ob->ipo == ipo) do_ob_ipo(ob);
+ }
break;
- case IPO_FLOAT_DEGR:
- val= *( (float *)poin);
- val = (float)(val/(M_PI_2/9.0));
+ case ID_MA:
+ for (ma= G.main->mat.first; ma; ma= ma->id.next) {
+ if (ma->ipo == ipo) execute_ipo((ID *)ma, ipo);
+ }
break;
- case IPO_INT:
- case IPO_INT_BIT:
- case IPO_LONG:
- val= (float)(*( (int *)poin));
+ case ID_TE:
+ for (tex= G.main->tex.first; tex; tex= tex->id.next) {
+ if (tex->ipo == ipo) execute_ipo((ID *)tex, ipo);
+ }
break;
- case IPO_SHORT:
- case IPO_SHORT_BIT:
- val= *( (short *)poin);
+ case ID_WO:
+ for (wo= G.main->world.first; wo; wo= wo->id.next) {
+ if (wo->ipo == ipo) execute_ipo((ID *)wo, ipo);
+ }
break;
- case IPO_CHAR:
- case IPO_CHAR_BIT:
- val= *( (char *)poin);
+ case ID_LA:
+ for (la= G.main->lamp.first; la; la= la->id.next) {
+ if (la->ipo == ipo) execute_ipo((ID *)la, ipo);
+ }
+ break;
+ case ID_CA:
+ for (ca= G.main->camera.first; ca; ca= ca->id.next) {
+ if (ca->ipo == ipo) execute_ipo((ID *)ca, ipo);
+ }
+ break;
+ case ID_SO:
+ for (snd= G.main->sound.first; snd; snd= snd->id.next) {
+ if (snd->ipo == ipo) execute_ipo((ID *)snd, ipo);
+ }
break;
}
- return val;
}
-static void *give_tex_poin(Tex *tex, int adrcode, int *type )
+/* Executes IPO's for whole database on frame change, in a specified order,
+ * with datablocks being calculated in alphabetical order
+ * - called on scene_update_for_newframe() only
+ */
+void do_all_data_ipos ()
{
- void *poin=0;
+ Material *ma;
+ Tex *tex;
+ World *wo;
+ Ipo *ipo;
+ Lamp *la;
+ Key *key;
+ Camera *ca;
+ bSound *snd;
+ Sequence *seq;
+ Editing *ed;
+ Base *base;
+ float ctime;
+
+ ctime= frame_to_float(G.scene->r.cfra);
+
+ /* this exception cannot be depgraphed yet... what todo with objects in other layers?... */
+ for (base= G.scene->base.first; base; base= base->next) {
+ Object *ob= base->object;
+
+ /* only update layer when an ipo */
+ if (has_ipo_code(ob->ipo, OB_LAY)) {
+ do_ob_ipo(ob);
+ base->lay= ob->lay;
+ }
+ }
+
+ /* layers for the set...*/
+ if (G.scene->set) {
+ for (base= G.scene->set->base.first; base; base= base->next) {
+ Object *ob= base->object;
+
+ if (has_ipo_code(ob->ipo, OB_LAY)) {
+ do_ob_ipo(ob);
+ base->lay= ob->lay;
+ }
+ }
+ }
+
+ /* Calculate all IPO blocks in use, execept those for Objects */
+ for (ipo= G.main->ipo.first; ipo; ipo= ipo->id.next) {
+ if ((ipo->id.us) && (ipo->blocktype != ID_OB)) {
+ calc_ipo(ipo, ctime);
+ }
+ }
+
+ /* Texture Blocks */
+ for (tex= G.main->tex.first; tex; tex= tex->id.next) {
+ if (tex->ipo) execute_ipo((ID *)tex, tex->ipo);
+ }
+
+ /* Material Blocks */
+ for (ma= G.main->mat.first; ma; ma= ma->id.next) {
+ if (ma->ipo) execute_ipo((ID *)ma, ma->ipo);
+ }
+
+ /* World Blocks */
+ for (wo= G.main->world.first; wo; wo= wo->id.next) {
+ if (wo->ipo) execute_ipo((ID *)wo, wo->ipo);
+ }
+
+ /* ShapeKey Blocks */
+ for (key= G.main->key.first; key; key= key->id.next) {
+ if (key->ipo) execute_ipo((ID *)key, key->ipo);
+ }
+
+ /* Lamp Blocks */
+ for (la= G.main->lamp.first; la; la= la->id.next) {
+ if (la->ipo) execute_ipo((ID *)la, la->ipo);
+ }
+
+ /* Camera Blocks */
+ for (ca= G.main->camera.first; ca; ca= ca->id.next) {
+ if (ca->ipo) execute_ipo((ID *)ca, ca->ipo);
+ }
+
+ /* Sound Blocks (Old + Unused) */
+ for (snd= G.main->sound.first; snd; snd= snd->id.next) {
+ if (snd->ipo) execute_ipo((ID *)snd, snd->ipo);
+ }
+
+ /* Sequencer: process FAC Ipos used as volume envelopes */
+ ed= G.scene->ed;
+ if (ed) {
+ for (seq= ed->seqbasep->first; seq; seq= seq->next) {
+ if ( ((seq->type == SEQ_RAM_SOUND) || (seq->type == SEQ_HD_SOUND)) &&
+ (seq->startdisp <= G.scene->r.cfra+2) &&
+ (seq->enddisp>G.scene->r.cfra) &&
+ (seq->ipo) )
+ {
+ do_seq_ipo(seq, G.scene->r.cfra);
+ }
+ }
+ }
+}
+
+
+/* --------------------- Assorted ----------------------------- */
+
+/* clear delta-transforms on all Objects which use the given IPO block */
+void clear_delta_obipo(Ipo *ipo)
+{
+ Object *ob;
+
+ /* only search if there's an IPO */
+ if (ipo == NULL)
+ return;
+
+ /* search through all objects in database */
+ for (ob= G.main->object.first; ob; ob= ob->id.next) {
+ /* can only update if not a library */
+ if (ob->id.lib == NULL) {
+ if (ob->ipo == ipo) {
+ memset(&ob->dloc, 0, 12);
+ memset(&ob->drot, 0, 12);
+ memset(&ob->dsize, 0, 12);
+ }
+ }
+ }
+}
+
+/* ***************************** IPO - DataAPI ********************************* */
+
+// !!!!!!!!!!!!!!!!!!!!!!!!!!!! FIXME - BAD CRUFT WARNING !!!!!!!!!!!!!!!!!!!!!!!
+
+/* These functions here should be replaced eventually by the Data API, as this is
+ * inflexible duplication...
+ */
- switch(adrcode) {
+/* --------------------- Get Pointer API ----------------------------- */
+
+/* get pointer to pose-channel's channel, but set appropriate flags first */
+void *get_pchan_ipo_poin (bPoseChannel *pchan, int adrcode)
+{
+ void *poin= NULL;
+
+ switch (adrcode) {
+ case AC_QUAT_W:
+ poin= &(pchan->quat[0]);
+ pchan->flag |= POSE_ROT;
+ break;
+ case AC_QUAT_X:
+ poin= &(pchan->quat[1]);
+ pchan->flag |= POSE_ROT;
+ break;
+ case AC_QUAT_Y:
+ poin= &(pchan->quat[2]);
+ pchan->flag |= POSE_ROT;
+ break;
+ case AC_QUAT_Z:
+ poin= &(pchan->quat[3]);
+ pchan->flag |= POSE_ROT;
+ break;
+
+ case AC_LOC_X:
+ poin= &(pchan->loc[0]);
+ pchan->flag |= POSE_LOC;
+ break;
+ case AC_LOC_Y:
+ poin= &(pchan->loc[1]);
+ pchan->flag |= POSE_LOC;
+ break;
+ case AC_LOC_Z:
+ poin= &(pchan->loc[2]);
+ pchan->flag |= POSE_LOC;
+ break;
+
+ case AC_SIZE_X:
+ poin= &(pchan->size[0]);
+ pchan->flag |= POSE_SIZE;
+ break;
+ case AC_SIZE_Y:
+ poin= &(pchan->size[1]);
+ pchan->flag |= POSE_SIZE;
+ break;
+ case AC_SIZE_Z:
+ poin= &(pchan->size[2]);
+ pchan->flag |= POSE_SIZE;
+ break;
+ }
+
+ /* return pointer */
+ return poin;
+}
+
+/* get texture channel */
+static void *give_tex_poin (Tex *tex, int adrcode, int *type )
+{
+ void *poin= NULL;
+
+ switch (adrcode) {
case TE_NSIZE:
poin= &(tex->noisesize); break;
case TE_TURB:
@@ -1169,17 +1896,18 @@ static void *give_tex_poin(Tex *tex, int adrcode, int *type )
poin= &(tex->bright); break;
case TE_CONTRA:
poin= &(tex->contrast); break;
-
}
+ /* return pointer */
return poin;
}
-void *give_mtex_poin(MTex *mtex, int adrcode )
+/* get texture-slot/mapping channel */
+void *give_mtex_poin (MTex *mtex, int adrcode)
{
- void *poin=0;
-
- switch(adrcode) {
+ void *poin= NULL;
+
+ switch (adrcode) {
case MAP_OFS_X:
poin= &(mtex->ofs[0]); break;
case MAP_OFS_Y:
@@ -1210,6 +1938,7 @@ void *give_mtex_poin(MTex *mtex, int adrcode )
poin= &(mtex->dispfac); break;
}
+ /* return pointer */
return poin;
}
@@ -1226,1284 +1955,909 @@ void *give_mtex_poin(MTex *mtex, int adrcode )
/* from misc_util: flip the bytes from x */
/* #define GS(x) (((unsigned char *)(x))[0] << 8 | ((unsigned char *)(x))[1]) */
-void *get_ipo_poin(ID *id, IpoCurve *icu, int *type)
+
+/* general function to get pointer to source/destination data */
+void *get_ipo_poin (ID *id, IpoCurve *icu, int *type)
{
void *poin= NULL;
- Object *ob;
- Material *ma;
- MTex *mtex;
- Tex *tex;
- Lamp *la;
- Sequence *seq;
- World *wo;
- ParticleSettings *part;
+ MTex *mtex= NULL;
+ /* most channels will have float data, but those with other types will override this */
*type= IPO_FLOAT;
- if( GS(id->name)==ID_OB) {
-
- ob= (Object *)id;
-
- switch(icu->adrcode) {
- case OB_LOC_X:
- poin= &(ob->loc[0]); break;
- case OB_LOC_Y:
- poin= &(ob->loc[1]); break;
- case OB_LOC_Z:
- poin= &(ob->loc[2]); break;
- case OB_DLOC_X:
- poin= &(ob->dloc[0]); break;
- case OB_DLOC_Y:
- poin= &(ob->dloc[1]); break;
- case OB_DLOC_Z:
- poin= &(ob->dloc[2]); break;
-
- case OB_ROT_X:
- poin= &(ob->rot[0]); *type= IPO_FLOAT_DEGR; break;
- case OB_ROT_Y:
- poin= &(ob->rot[1]); *type= IPO_FLOAT_DEGR; break;
- case OB_ROT_Z:
- poin= &(ob->rot[2]); *type= IPO_FLOAT_DEGR; break;
- case OB_DROT_X:
- poin= &(ob->drot[0]); *type= IPO_FLOAT_DEGR; break;
- case OB_DROT_Y:
- poin= &(ob->drot[1]); *type= IPO_FLOAT_DEGR; break;
- case OB_DROT_Z:
- poin= &(ob->drot[2]); *type= IPO_FLOAT_DEGR; break;
+ /* data is divided into 'blocktypes' based on ID-codes */
+ switch (GS(id->name)) {
+ case ID_OB: /* object channels ----------------------------- */
+ {
+ Object *ob= (Object *)id;
- case OB_SIZE_X:
- poin= &(ob->size[0]); break;
- case OB_SIZE_Y:
- poin= &(ob->size[1]); break;
- case OB_SIZE_Z:
- poin= &(ob->size[2]); break;
- case OB_DSIZE_X:
- poin= &(ob->dsize[0]); break;
- case OB_DSIZE_Y:
- poin= &(ob->dsize[1]); break;
- case OB_DSIZE_Z:
- poin= &(ob->dsize[2]); break;
-
- case OB_LAY:
- poin= &(ob->lay); *type= IPO_INT_BIT; break;
+ switch (icu->adrcode) {
+ case OB_LOC_X:
+ poin= &(ob->loc[0]); break;
+ case OB_LOC_Y:
+ poin= &(ob->loc[1]); break;
+ case OB_LOC_Z:
+ poin= &(ob->loc[2]); break;
+ case OB_DLOC_X:
+ poin= &(ob->dloc[0]); break;
+ case OB_DLOC_Y:
+ poin= &(ob->dloc[1]); break;
+ case OB_DLOC_Z:
+ poin= &(ob->dloc[2]); break;
- case OB_COL_R:
- poin= &(ob->col[0]);
- break;
- case OB_COL_G:
- poin= &(ob->col[1]);
- break;
- case OB_COL_B:
- poin= &(ob->col[2]);
- break;
- case OB_COL_A:
- poin= &(ob->col[3]);
- break;
- case OB_PD_FSTR:
- if(ob->pd) poin= &(ob->pd->f_strength);
- break;
- case OB_PD_FFALL:
- if(ob->pd) poin= &(ob->pd->f_power);
- break;
- case OB_PD_SDAMP:
- if(ob->pd) poin= &(ob->pd->pdef_damp);
- break;
- case OB_PD_RDAMP:
- if(ob->pd) poin= &(ob->pd->pdef_rdamp);
- break;
- case OB_PD_PERM:
- if(ob->pd) poin= &(ob->pd->pdef_perm);
- break;
- case OB_PD_FMAXD:
- if(ob->pd) poin= &(ob->pd->maxdist);
- break;
- }
- }
- else if( GS(id->name)==ID_MA) {
-
- ma= (Material *)id;
-
- switch(icu->adrcode) {
- case MA_COL_R:
- poin= &(ma->r); break;
- case MA_COL_G:
- poin= &(ma->g); break;
- case MA_COL_B:
- poin= &(ma->b); break;
- case MA_SPEC_R:
- poin= &(ma->specr); break;
- case MA_SPEC_G:
- poin= &(ma->specg); break;
- case MA_SPEC_B:
- poin= &(ma->specb); break;
- case MA_MIR_R:
- poin= &(ma->mirr); break;
- case MA_MIR_G:
- poin= &(ma->mirg); break;
- case MA_MIR_B:
- poin= &(ma->mirb); break;
- case MA_REF:
- poin= &(ma->ref); break;
- case MA_ALPHA:
- poin= &(ma->alpha); break;
- case MA_EMIT:
- poin= &(ma->emit); break;
- case MA_AMB:
- poin= &(ma->amb); break;
- case MA_SPEC:
- poin= &(ma->spec); break;
- case MA_HARD:
- poin= &(ma->har); *type= IPO_SHORT; break;
- case MA_SPTR:
- poin= &(ma->spectra); break;
- case MA_IOR:
- poin= &(ma->ang); break;
- case MA_MODE:
- poin= &(ma->mode); *type= IPO_INT_BIT; break;
- case MA_HASIZE:
- poin= &(ma->hasize); break;
- case MA_TRANSLU:
- poin= &(ma->translucency); break;
- case MA_RAYM:
- poin= &(ma->ray_mirror); break;
- case MA_FRESMIR:
- poin= &(ma->fresnel_mir); break;
- case MA_FRESMIRI:
- poin= &(ma->fresnel_mir_i); break;
- case MA_FRESTRA:
- poin= &(ma->fresnel_tra); break;
- case MA_FRESTRAI:
- poin= &(ma->fresnel_tra_i); break;
- case MA_ADD:
- poin= &(ma->add); break;
- }
-
- if(poin==NULL) {
- mtex= 0;
- if(icu->adrcode & MA_MAP1) mtex= ma->mtex[0];
- else if(icu->adrcode & MA_MAP2) mtex= ma->mtex[1];
- else if(icu->adrcode & MA_MAP3) mtex= ma->mtex[2];
- else if(icu->adrcode & MA_MAP4) mtex= ma->mtex[3];
- else if(icu->adrcode & MA_MAP5) mtex= ma->mtex[4];
- else if(icu->adrcode & MA_MAP6) mtex= ma->mtex[5];
- else if(icu->adrcode & MA_MAP7) mtex= ma->mtex[6];
- else if(icu->adrcode & MA_MAP8) mtex= ma->mtex[7];
- else if(icu->adrcode & MA_MAP9) mtex= ma->mtex[8];
- else if(icu->adrcode & MA_MAP10) mtex= ma->mtex[9];
+ case OB_ROT_X:
+ poin= &(ob->rot[0]); *type= IPO_FLOAT_DEGR; break;
+ case OB_ROT_Y:
+ poin= &(ob->rot[1]); *type= IPO_FLOAT_DEGR; break;
+ case OB_ROT_Z:
+ poin= &(ob->rot[2]); *type= IPO_FLOAT_DEGR; break;
+ case OB_DROT_X:
+ poin= &(ob->drot[0]); *type= IPO_FLOAT_DEGR; break;
+ case OB_DROT_Y:
+ poin= &(ob->drot[1]); *type= IPO_FLOAT_DEGR; break;
+ case OB_DROT_Z:
+ poin= &(ob->drot[2]); *type= IPO_FLOAT_DEGR; break;
+
+ case OB_SIZE_X:
+ poin= &(ob->size[0]); break;
+ case OB_SIZE_Y:
+ poin= &(ob->size[1]); break;
+ case OB_SIZE_Z:
+ poin= &(ob->size[2]); break;
+ case OB_DSIZE_X:
+ poin= &(ob->dsize[0]); break;
+ case OB_DSIZE_Y:
+ poin= &(ob->dsize[1]); break;
+ case OB_DSIZE_Z:
+ poin= &(ob->dsize[2]); break;
- if(mtex) {
- poin= give_mtex_poin(mtex, icu->adrcode & (MA_MAP1-1) );
- }
- }
- }
- else if( GS(id->name)==ID_TE) {
- tex= (Tex *)id;
-
- if(tex) poin= give_tex_poin(tex, icu->adrcode, type);
- }
- else if( GS(id->name)==ID_SEQ) {
- seq= (Sequence *)id;
-
- switch(icu->adrcode) {
- case SEQ_FAC1:
- poin= &(seq->facf0); break;
- }
- }
- else if( GS(id->name)==ID_CU) {
-
- poin= &(icu->curval);
-
- }
- else if( GS(id->name)==ID_KE) {
- KeyBlock *kb= ((Key *)id)->block.first;
-
- for(; kb; kb= kb->next)
- if(kb->adrcode==icu->adrcode)
+ case OB_LAY:
+ poin= &(ob->lay); *type= IPO_INT_BIT; break;
+
+ case OB_COL_R:
+ poin= &(ob->col[0]); break;
+ case OB_COL_G:
+ poin= &(ob->col[1]); break;
+ case OB_COL_B:
+ poin= &(ob->col[2]); break;
+ case OB_COL_A:
+ poin= &(ob->col[3]); break;
+
+ case OB_PD_FSTR:
+ if (ob->pd) poin= &(ob->pd->f_strength);
+ break;
+ case OB_PD_FFALL:
+ if (ob->pd) poin= &(ob->pd->f_power);
+ break;
+ case OB_PD_SDAMP:
+ if (ob->pd) poin= &(ob->pd->pdef_damp);
+ break;
+ case OB_PD_RDAMP:
+ if (ob->pd) poin= &(ob->pd->pdef_rdamp);
+ break;
+ case OB_PD_PERM:
+ if (ob->pd) poin= &(ob->pd->pdef_perm);
+ break;
+ case OB_PD_FMAXD:
+ if (ob->pd) poin= &(ob->pd->maxdist);
break;
- if(kb)
- poin= &(kb->curval);
-
- }
- else if(GS(id->name)==ID_WO) {
-
- wo= (World *)id;
-
- switch(icu->adrcode) {
- case WO_HOR_R:
- poin= &(wo->horr); break;
- case WO_HOR_G:
- poin= &(wo->horg); break;
- case WO_HOR_B:
- poin= &(wo->horb); break;
- case WO_ZEN_R:
- poin= &(wo->zenr); break;
- case WO_ZEN_G:
- poin= &(wo->zeng); break;
- case WO_ZEN_B:
- poin= &(wo->zenb); break;
-
- case WO_EXPOS:
- poin= &(wo->exposure); break;
-
- case WO_MISI:
- poin= &(wo->misi); break;
- case WO_MISTDI:
- poin= &(wo->mistdist); break;
- case WO_MISTSTA:
- poin= &(wo->miststa); break;
- case WO_MISTHI:
- poin= &(wo->misthi); break;
-
- case WO_STAR_R:
- poin= &(wo->starr); break;
- case WO_STAR_G:
- poin= &(wo->starg); break;
- case WO_STAR_B:
- poin= &(wo->starb); break;
-
- case WO_STARDIST:
- poin= &(wo->stardist); break;
- case WO_STARSIZE:
- poin= &(wo->starsize); break;
- }
-
- if(poin==NULL) {
- mtex= 0;
- if(icu->adrcode & MA_MAP1) mtex= wo->mtex[0];
- else if(icu->adrcode & MA_MAP2) mtex= wo->mtex[1];
- else if(icu->adrcode & MA_MAP3) mtex= wo->mtex[2];
- else if(icu->adrcode & MA_MAP4) mtex= wo->mtex[3];
- else if(icu->adrcode & MA_MAP5) mtex= wo->mtex[4];
- else if(icu->adrcode & MA_MAP6) mtex= wo->mtex[5];
- else if(icu->adrcode & MA_MAP7) mtex= wo->mtex[6];
- else if(icu->adrcode & MA_MAP8) mtex= wo->mtex[7];
- else if(icu->adrcode & MA_MAP9) mtex= wo->mtex[8];
- else if(icu->adrcode & MA_MAP10) mtex= wo->mtex[9];
-
- if(mtex) {
- poin= give_mtex_poin(mtex, icu->adrcode & (MA_MAP1-1) );
- }
- }
- }
- else if( GS(id->name)==ID_LA) {
-
- la= (Lamp *)id;
-
- switch(icu->adrcode) {
- case LA_ENERGY:
- poin= &(la->energy); break;
- case LA_COL_R:
- poin= &(la->r); break;
- case LA_COL_G:
- poin= &(la->g); break;
- case LA_COL_B:
- poin= &(la->b); break;
- case LA_DIST:
- poin= &(la->dist); break;
- case LA_SPOTSI:
- poin= &(la->spotsize); break;
- case LA_SPOTBL:
- poin= &(la->spotblend); break;
- case LA_QUAD1:
- poin= &(la->att1); break;
- case LA_QUAD2:
- poin= &(la->att2); break;
- case LA_HALOINT:
- poin= &(la->haint); break;
- }
-
- if(poin==NULL) {
- mtex= 0;
- if(icu->adrcode & MA_MAP1) mtex= la->mtex[0];
- else if(icu->adrcode & MA_MAP2) mtex= la->mtex[1];
- else if(icu->adrcode & MA_MAP3) mtex= la->mtex[2];
- else if(icu->adrcode & MA_MAP4) mtex= la->mtex[3];
- else if(icu->adrcode & MA_MAP5) mtex= la->mtex[4];
- else if(icu->adrcode & MA_MAP6) mtex= la->mtex[5];
- else if(icu->adrcode & MA_MAP7) mtex= la->mtex[6];
- else if(icu->adrcode & MA_MAP8) mtex= la->mtex[7];
- else if(icu->adrcode & MA_MAP9) mtex= la->mtex[8];
- else if(icu->adrcode & MA_MAP10) mtex= la->mtex[9];
-
- if(mtex) {
- poin= give_mtex_poin(mtex, icu->adrcode & (MA_MAP1-1) );
}
}
- }
- else if(GS(id->name)==ID_CA) {
- Camera *ca= (Camera *)id;
-
- /* yafray: aperture & focal distance params */
- switch(icu->adrcode) {
- case CAM_LENS:
- if(ca->type==CAM_ORTHO)
- poin= &(ca->ortho_scale);
- else
- poin= &(ca->lens);
break;
- case CAM_STA:
- poin= &(ca->clipsta); break;
- case CAM_END:
- poin= &(ca->clipend); break;
- case CAM_YF_APERT:
- poin= &(ca->YF_aperture); break;
- case CAM_YF_FDIST:
- poin= &(ca->YF_dofdist); break;
- case CAM_SHIFT_X:
- poin= &(ca->shiftx); break;
- case CAM_SHIFT_Y:
- poin= &(ca->shifty); break;
- }
- }
- else if(GS(id->name)==ID_SO) {
- bSound *snd= (bSound *)id;
-
- switch(icu->adrcode) {
- case SND_VOLUME:
- poin= &(snd->volume); break;
- case SND_PITCH:
- poin= &(snd->pitch); break;
- case SND_PANNING:
- poin= &(snd->panning); break;
- case SND_ATTEN:
- poin= &(snd->attenuation); break;
- }
- }
- else if( GS(id->name)==ID_PA) {
-
- part= (ParticleSettings *)id;
-
- switch(icu->adrcode) {
- case PART_EMIT_FREQ:
- case PART_EMIT_LIFE:
- case PART_EMIT_VEL:
- case PART_EMIT_AVE:
- case PART_EMIT_SIZE:
- poin= NULL; break;
- case PART_CLUMP:
- poin= &(part->clumpfac); break;
- case PART_AVE:
- poin= &(part->avefac); break;
- case PART_SIZE:
- poin= &(part->size); break;
- case PART_DRAG:
- poin= &(part->dragfac); break;
- case PART_BROWN:
- poin= &(part->brownfac); break;
- case PART_DAMP:
- poin= &(part->dampfac); break;
- case PART_LENGTH:
- poin= &(part->length); break;
- case PART_GRAV_X:
- poin= &(part->acc[0]); break;
- case PART_GRAV_Y:
- poin= &(part->acc[1]); break;
- case PART_GRAV_Z:
- poin= &(part->acc[2]); break;
- case PART_KINK_AMP:
- poin= &(part->kink_amp); break;
- case PART_KINK_FREQ:
- poin= &(part->kink_freq); break;
- case PART_KINK_SHAPE:
- poin= &(part->kink_shape); break;
- case PART_BB_TILT:
- poin= &(part->bb_tilt); break;
- }
- }
-
- return poin;
-}
-
-void set_icu_vars(IpoCurve *icu)
-{
- /* defaults. 0.0 for y-extents makes these ignored */
- icu->ymin= icu->ymax= 0.0;
- icu->ipo= IPO_BEZ;
-
- if(icu->blocktype==ID_OB) {
-
- if(icu->adrcode==OB_LAY) {
- icu->ipo= IPO_CONST;
- icu->vartype= IPO_BITS;
- }
-
- }
- else if(icu->blocktype==ID_MA) {
-
- if(icu->adrcode < MA_MAP1) {
- switch(icu->adrcode) {
- case MA_HASIZE:
- icu->ymax= 10000.0; break;
- case MA_HARD:
- icu->ymax= 511.0; break;
+ case ID_MA: /* material channels ----------------------------- */
+ {
+ Material *ma= (Material *)id;
+
+ switch (icu->adrcode) {
+ case MA_COL_R:
+ poin= &(ma->r); break;
+ case MA_COL_G:
+ poin= &(ma->g); break;
+ case MA_COL_B:
+ poin= &(ma->b); break;
+ case MA_SPEC_R:
+ poin= &(ma->specr); break;
+ case MA_SPEC_G:
+ poin= &(ma->specg); break;
+ case MA_SPEC_B:
+ poin= &(ma->specb); break;
+ case MA_MIR_R:
+ poin= &(ma->mirr); break;
+ case MA_MIR_G:
+ poin= &(ma->mirg); break;
+ case MA_MIR_B:
+ poin= &(ma->mirb); break;
+ case MA_REF:
+ poin= &(ma->ref); break;
+ case MA_ALPHA:
+ poin= &(ma->alpha); break;
+ case MA_EMIT:
+ poin= &(ma->emit); break;
+ case MA_AMB:
+ poin= &(ma->amb); break;
case MA_SPEC:
- icu->ymax= 2.0; break;
+ poin= &(ma->spec); break;
+ case MA_HARD:
+ poin= &(ma->har); *type= IPO_SHORT; break;
+ case MA_SPTR:
+ poin= &(ma->spectra); break;
+ case MA_IOR:
+ poin= &(ma->ang); break;
case MA_MODE:
- icu->ipo= IPO_CONST;
- icu->vartype= IPO_BITS; break;
- case MA_RAYM:
- icu->ymax= 1.0; break;
+ poin= &(ma->mode); *type= IPO_INT_BIT; break; // evil... dumping bitflags directly to user!
+ case MA_HASIZE:
+ poin= &(ma->hasize); break;
case MA_TRANSLU:
- icu->ymax= 1.0; break;
- case MA_IOR:
- icu->ymin= 1.0;
- icu->ymax= 3.0; break;
+ poin= &(ma->translucency); break;
+ case MA_RAYM:
+ poin= &(ma->ray_mirror); break;
case MA_FRESMIR:
- icu->ymax= 5.0; break;
+ poin= &(ma->fresnel_mir); break;
case MA_FRESMIRI:
- icu->ymin= 1.0;
- icu->ymax= 5.0; break;
+ poin= &(ma->fresnel_mir_i); break;
case MA_FRESTRA:
- icu->ymax= 5.0; break;
+ poin= &(ma->fresnel_tra); break;
case MA_FRESTRAI:
- icu->ymin= 1.0;
- icu->ymax= 5.0; break;
+ poin= &(ma->fresnel_tra_i); break;
case MA_ADD:
- icu->ymax= 1.0; break;
- default:
- icu->ymax= 1.0; break;
+ poin= &(ma->add); break;
+ }
+
+ if (poin == NULL) {
+ if (icu->adrcode & MA_MAP1) mtex= ma->mtex[0];
+ else if (icu->adrcode & MA_MAP2) mtex= ma->mtex[1];
+ else if (icu->adrcode & MA_MAP3) mtex= ma->mtex[2];
+ else if (icu->adrcode & MA_MAP4) mtex= ma->mtex[3];
+ else if (icu->adrcode & MA_MAP5) mtex= ma->mtex[4];
+ else if (icu->adrcode & MA_MAP6) mtex= ma->mtex[5];
+ else if (icu->adrcode & MA_MAP7) mtex= ma->mtex[6];
+ else if (icu->adrcode & MA_MAP8) mtex= ma->mtex[7];
+ else if (icu->adrcode & MA_MAP9) mtex= ma->mtex[8];
+ else if (icu->adrcode & MA_MAP10) mtex= ma->mtex[9];
+ else if (icu->adrcode & MA_MAP12) mtex= ma->mtex[11];
+ else if (icu->adrcode & MA_MAP11) mtex= ma->mtex[10];
+ else if (icu->adrcode & MA_MAP13) mtex= ma->mtex[12];
+ else if (icu->adrcode & MA_MAP14) mtex= ma->mtex[13];
+ else if (icu->adrcode & MA_MAP15) mtex= ma->mtex[14];
+ else if (icu->adrcode & MA_MAP16) mtex= ma->mtex[15];
+ else if (icu->adrcode & MA_MAP17) mtex= ma->mtex[16];
+ else if (icu->adrcode & MA_MAP18) mtex= ma->mtex[17];
+
+ if (mtex)
+ poin= give_mtex_poin(mtex, (icu->adrcode & (MA_MAP1-1)));
}
}
- else {
- switch(icu->adrcode & (MA_MAP1-1)) {
- case MAP_OFS_X:
- case MAP_OFS_Y:
- case MAP_OFS_Z:
- case MAP_SIZE_X:
- case MAP_SIZE_Y:
- case MAP_SIZE_Z:
- icu->ymax= 1000.0;
- icu->ymin= -1000.0;
+ break;
+ case ID_TE: /* texture channels ----------------------------- */
+ {
+ Tex *tex= (Tex *)id;
- break;
- case MAP_R:
- case MAP_G:
- case MAP_B:
- case MAP_DVAR:
- case MAP_COLF:
- case MAP_VARF:
- case MAP_DISP:
- icu->ymax= 1.0;
- break;
- case MAP_NORF:
- icu->ymax= 25.0;
- break;
+ if (tex)
+ poin= give_tex_poin(tex, icu->adrcode, type);
+ }
+ break;
+ case ID_SEQ: /* sequence channels ----------------------------- */
+ {
+ Sequence *seq= (Sequence *)id;
+
+ switch (icu->adrcode) {
+ case SEQ_FAC1:
+ poin= &(seq->facf0); break;
}
}
- }
- else if(icu->blocktype==ID_TE) {
- switch(icu->adrcode & (MA_MAP1-1)) {
- case TE_NSIZE:
- icu->ymin= 0.0001;
- icu->ymax= 2.0; break;
- case TE_NDEPTH:
- icu->vartype= IPO_SHORT;
- icu->ipo= IPO_CONST;
- icu->ymax= 6.0; break;
- case TE_NTYPE:
- icu->vartype= IPO_SHORT;
- icu->ipo= IPO_CONST;
- icu->ymax= 1.0; break;
- case TE_TURB:
- icu->ymax= 200.0; break;
- case TE_VNW1:
- case TE_VNW2:
- case TE_VNW3:
- case TE_VNW4:
- icu->ymax= 2.0;
- icu->ymin= -2.0; break;
- case TE_VNMEXP:
- icu->ymax= 10.0;
- icu->ymin= 0.01; break;
- case TE_VN_DISTM:
- icu->vartype= IPO_SHORT;
- icu->ipo= IPO_CONST;
- icu->ymax= 6.0; break;
- case TE_VN_COLT:
- icu->vartype= IPO_SHORT;
- icu->ipo= IPO_CONST;
- icu->ymax= 3.0; break;
- case TE_ISCA:
- icu->ymax= 10.0;
- icu->ymin= 0.01; break;
- case TE_DISTA:
- icu->ymax= 10.0; break;
- case TE_MG_TYP:
- icu->vartype= IPO_SHORT;
- icu->ipo= IPO_CONST;
- icu->ymax= 6.0; break;
- case TE_MGH:
- icu->ymin= 0.0001;
- icu->ymax= 2.0; break;
- case TE_MG_LAC:
- case TE_MG_OFF:
- case TE_MG_GAIN:
- icu->ymax= 6.0; break;
- case TE_MG_OCT:
- icu->ymax= 8.0; break;
- case TE_N_BAS1:
- case TE_N_BAS2:
- icu->vartype= IPO_SHORT;
- icu->ipo= IPO_CONST;
- icu->ymax= 8.0; break;
- case TE_COL_R:
- icu->ymax= 0.0; break;
- case TE_COL_G:
- icu->ymax= 2.0; break;
- case TE_COL_B:
- icu->ymax= 2.0; break;
- case TE_BRIGHT:
- icu->ymax= 2.0; break;
- case TE_CONTRA:
- icu->ymax= 5.0; break;
-
+ break;
+ case ID_CU: /* curve channels ----------------------------- */
+ {
+ poin= &(icu->curval);
}
- }
- else if(icu->blocktype==ID_SEQ) {
-
- icu->ymax= 1.0;
-
- }
- else if(icu->blocktype==ID_CU) {
-
- icu->ymax= 1.0;
-
- }
- else if(icu->blocktype==ID_WO) {
-
- if(icu->adrcode < MA_MAP1) {
- switch(icu->adrcode) {
+ break;
+ case ID_KE: /* shapekey channels ----------------------------- */
+ {
+ Key *key= (Key *)id;
+ KeyBlock *kb;
+
+ for(kb= key->block.first; kb; kb= kb->next) {
+ if (kb->adrcode == icu->adrcode)
+ break;
+ }
+
+ if (kb)
+ poin= &(kb->curval);
+ }
+ break;
+ case ID_WO: /* world channels ----------------------------- */
+ {
+ World *wo= (World *)id;
+
+ switch (icu->adrcode) {
+ case WO_HOR_R:
+ poin= &(wo->horr); break;
+ case WO_HOR_G:
+ poin= &(wo->horg); break;
+ case WO_HOR_B:
+ poin= &(wo->horb); break;
+ case WO_ZEN_R:
+ poin= &(wo->zenr); break;
+ case WO_ZEN_G:
+ poin= &(wo->zeng); break;
+ case WO_ZEN_B:
+ poin= &(wo->zenb); break;
+
case WO_EXPOS:
- icu->ymax= 5.0; break;
+ poin= &(wo->exposure); break;
+
+ case WO_MISI:
+ poin= &(wo->misi); break;
case WO_MISTDI:
+ poin= &(wo->mistdist); break;
case WO_MISTSTA:
+ poin= &(wo->miststa); break;
case WO_MISTHI:
+ poin= &(wo->misthi); break;
+
+ case WO_STAR_R:
+ poin= &(wo->starr); break;
+ case WO_STAR_G:
+ poin= &(wo->starg); break;
+ case WO_STAR_B:
+ poin= &(wo->starb); break;
+
case WO_STARDIST:
+ poin= &(wo->stardist); break;
case WO_STARSIZE:
- break;
-
- default:
- icu->ymax= 1.0;
- break;
+ poin= &(wo->starsize); break;
}
- }
- else {
- switch(icu->adrcode & (MA_MAP1-1)) {
- case MAP_OFS_X:
- case MAP_OFS_Y:
- case MAP_OFS_Z:
- case MAP_SIZE_X:
- case MAP_SIZE_Y:
- case MAP_SIZE_Z:
- icu->ymax= 100.0;
- icu->ymin= -100.0;
- break;
- case MAP_R:
- case MAP_G:
- case MAP_B:
- case MAP_DVAR:
- case MAP_COLF:
- case MAP_NORF:
- case MAP_VARF:
- case MAP_DISP:
- icu->ymax= 1.0;
+ if (poin == NULL) {
+ if (icu->adrcode & MA_MAP1) mtex= wo->mtex[0];
+ else if (icu->adrcode & MA_MAP2) mtex= wo->mtex[1];
+ else if (icu->adrcode & MA_MAP3) mtex= wo->mtex[2];
+ else if (icu->adrcode & MA_MAP4) mtex= wo->mtex[3];
+ else if (icu->adrcode & MA_MAP5) mtex= wo->mtex[4];
+ else if (icu->adrcode & MA_MAP6) mtex= wo->mtex[5];
+ else if (icu->adrcode & MA_MAP7) mtex= wo->mtex[6];
+ else if (icu->adrcode & MA_MAP8) mtex= wo->mtex[7];
+ else if (icu->adrcode & MA_MAP9) mtex= wo->mtex[8];
+ else if (icu->adrcode & MA_MAP10) mtex= wo->mtex[9];
+ else if (icu->adrcode & MA_MAP11) mtex= wo->mtex[10];
+ else if (icu->adrcode & MA_MAP12) mtex= wo->mtex[11];
+ else if (icu->adrcode & MA_MAP13) mtex= wo->mtex[12];
+ else if (icu->adrcode & MA_MAP14) mtex= wo->mtex[13];
+ else if (icu->adrcode & MA_MAP15) mtex= wo->mtex[14];
+ else if (icu->adrcode & MA_MAP16) mtex= wo->mtex[15];
+ else if (icu->adrcode & MA_MAP17) mtex= wo->mtex[16];
+ else if (icu->adrcode & MA_MAP18) mtex= wo->mtex[17];
+
+ if (mtex)
+ poin= give_mtex_poin(mtex, (icu->adrcode & (MA_MAP1-1)));
}
}
- }
- else if(icu->blocktype==ID_LA) {
- if(icu->adrcode < MA_MAP1) {
- switch(icu->adrcode) {
+ break;
+ case ID_LA: /* lamp channels ----------------------------- */
+ {
+ Lamp *la= (Lamp *)id;
+
+ switch (icu->adrcode) {
case LA_ENERGY:
- case LA_DIST:
- break;
-
+ poin= &(la->energy); break;
case LA_COL_R:
+ poin= &(la->r); break;
case LA_COL_G:
+ poin= &(la->g); break;
case LA_COL_B:
+ poin= &(la->b); break;
+ case LA_DIST:
+ poin= &(la->dist); break;
+ case LA_SPOTSI:
+ poin= &(la->spotsize); break;
case LA_SPOTBL:
+ poin= &(la->spotblend); break;
case LA_QUAD1:
+ poin= &(la->att1); break;
case LA_QUAD2:
- icu->ymax= 1.0; break;
- case LA_SPOTSI:
- icu->ymax= 180.0; break;
+ poin= &(la->att2); break;
case LA_HALOINT:
- icu->ymax= 5.0; break;
+ poin= &(la->haint); break;
+ }
+
+ if (poin == NULL) {
+ if (icu->adrcode & MA_MAP1) mtex= la->mtex[0];
+ else if (icu->adrcode & MA_MAP2) mtex= la->mtex[1];
+ else if (icu->adrcode & MA_MAP3) mtex= la->mtex[2];
+ else if (icu->adrcode & MA_MAP4) mtex= la->mtex[3];
+ else if (icu->adrcode & MA_MAP5) mtex= la->mtex[4];
+ else if (icu->adrcode & MA_MAP6) mtex= la->mtex[5];
+ else if (icu->adrcode & MA_MAP7) mtex= la->mtex[6];
+ else if (icu->adrcode & MA_MAP8) mtex= la->mtex[7];
+ else if (icu->adrcode & MA_MAP9) mtex= la->mtex[8];
+ else if (icu->adrcode & MA_MAP10) mtex= la->mtex[9];
+ else if (icu->adrcode & MA_MAP11) mtex= la->mtex[10];
+ else if (icu->adrcode & MA_MAP12) mtex= la->mtex[11];
+ else if (icu->adrcode & MA_MAP13) mtex= la->mtex[12];
+ else if (icu->adrcode & MA_MAP14) mtex= la->mtex[13];
+ else if (icu->adrcode & MA_MAP15) mtex= la->mtex[14];
+ else if (icu->adrcode & MA_MAP16) mtex= la->mtex[15];
+ else if (icu->adrcode & MA_MAP17) mtex= la->mtex[16];
+ else if (icu->adrcode & MA_MAP18) mtex= la->mtex[17];
+
+ if (mtex)
+ poin= give_mtex_poin(mtex, (icu->adrcode & (MA_MAP1-1)));
}
}
- else {
- switch(icu->adrcode & (MA_MAP1-1)) {
- case MAP_OFS_X:
- case MAP_OFS_Y:
- case MAP_OFS_Z:
- case MAP_SIZE_X:
- case MAP_SIZE_Y:
- case MAP_SIZE_Z:
- icu->ymax= 100.0;
- icu->ymin= -100.0;
+ break;
+ case ID_CA: /* camera channels ----------------------------- */
+ {
+ Camera *ca= (Camera *)id;
+
+ switch (icu->adrcode) {
+ case CAM_LENS:
+ if (ca->type == CAM_ORTHO)
+ poin= &(ca->ortho_scale);
+ else
+ poin= &(ca->lens);
break;
- case MAP_R:
- case MAP_G:
- case MAP_B:
- case MAP_DVAR:
- case MAP_COLF:
- case MAP_NORF:
- case MAP_VARF:
- case MAP_DISP:
- icu->ymax= 1.0;
+ case CAM_STA:
+ poin= &(ca->clipsta); break;
+ case CAM_END:
+ poin= &(ca->clipend); break;
+
+ case CAM_YF_APERT:
+ poin= &(ca->YF_aperture); break;
+ case CAM_YF_FDIST:
+ poin= &(ca->YF_dofdist); break;
+
+ case CAM_SHIFT_X:
+ poin= &(ca->shiftx); break;
+ case CAM_SHIFT_Y:
+ poin= &(ca->shifty); break;
}
}
- }
- else if(icu->blocktype==ID_CA) {
-
- /* yafray: aperture & focal distance params */
- switch(icu->adrcode) {
- case CAM_LENS:
- icu->ymin= 1.0;
- icu->ymax= 1000.0;
- break;
- case CAM_STA:
- icu->ymin= 0.001f;
- break;
- case CAM_END:
- icu->ymin= 0.1f;
- break;
- case CAM_YF_APERT:
- icu->ymin = 0.0;
- icu->ymax = 2.0;
- break;
- case CAM_YF_FDIST:
- icu->ymin = 0.0;
- icu->ymax = 5000.0;
break;
+ case ID_SO: /* sound channels ----------------------------- */
+ {
+ bSound *snd= (bSound *)id;
- case CAM_SHIFT_X:
- case CAM_SHIFT_Y:
- icu->ymin= -2.0f;
- icu->ymax= 2.0f;
- break;
+ switch (icu->adrcode) {
+ case SND_VOLUME:
+ poin= &(snd->volume); break;
+ case SND_PITCH:
+ poin= &(snd->pitch); break;
+ case SND_PANNING:
+ poin= &(snd->panning); break;
+ case SND_ATTEN:
+ poin= &(snd->attenuation); break;
+ }
}
- }
- else if(icu->blocktype==ID_SO) {
-
- switch(icu->adrcode) {
- case SND_VOLUME:
- icu->ymin= 0.0;
- icu->ymax= 1.0;
- break;
- case SND_PITCH:
- icu->ymin= -12.0;
- icu->ymin= 12.0;
- break;
- case SND_PANNING:
- icu->ymin= 0.0;
- icu->ymax= 1.0;
- break;
- case SND_ATTEN:
- icu->ymin= 0.0;
- icu->ymin= 1.0;
break;
+ case ID_PA: /* particle channels ----------------------------- */
+ {
+ ParticleSettings *part= (ParticleSettings *)id;
+
+ switch (icu->adrcode) {
+ case PART_EMIT_FREQ:
+ case PART_EMIT_LIFE:
+ case PART_EMIT_VEL:
+ case PART_EMIT_AVE:
+ case PART_EMIT_SIZE:
+ poin= NULL;
+ break;
+
+ case PART_CLUMP:
+ poin= &(part->clumpfac); break;
+ case PART_AVE:
+ poin= &(part->avefac); break;
+ case PART_SIZE:
+ poin= &(part->size); break;
+ case PART_DRAG:
+ poin= &(part->dragfac); break;
+ case PART_BROWN:
+ poin= &(part->brownfac); break;
+ case PART_DAMP:
+ poin= &(part->dampfac); break;
+ case PART_LENGTH:
+ poin= &(part->length); break;
+ case PART_GRAV_X:
+ poin= &(part->acc[0]); break;
+ case PART_GRAV_Y:
+ poin= &(part->acc[1]); break;
+ case PART_GRAV_Z:
+ poin= &(part->acc[2]); break;
+ case PART_KINK_AMP:
+ poin= &(part->kink_amp); break;
+ case PART_KINK_FREQ:
+ poin= &(part->kink_freq); break;
+ case PART_KINK_SHAPE:
+ poin= &(part->kink_shape); break;
+ case PART_BB_TILT:
+ poin= &(part->bb_tilt); break;
+
+ case PART_PD_FSTR:
+ if (part->pd) poin= &(part->pd->f_strength);
+ break;
+ case PART_PD_FFALL:
+ if (part->pd) poin= &(part->pd->f_power);
+ break;
+ case PART_PD_FMAXD:
+ if (part->pd) poin= &(part->pd->maxdist);
+ break;
+ case PART_PD2_FSTR:
+ if (part->pd2) poin= &(part->pd2->f_strength);
+ break;
+ case PART_PD2_FFALL:
+ if (part->pd2) poin= &(part->pd2->f_power);
+ break;
+ case PART_PD2_FMAXD:
+ if (part->pd2) poin= &(part->pd2->maxdist);
+ break;
+ }
}
- }
- else if(icu->blocktype==ID_PA){
-
- switch(icu->adrcode) {
- case PART_EMIT_LIFE:
- case PART_SIZE:
- case PART_KINK_FREQ:
- case PART_EMIT_VEL:
- case PART_EMIT_AVE:
- case PART_EMIT_SIZE:
- icu->ymin= 0.0;
- break;
- case PART_CLUMP:
- icu->ymin= -1.0;
- icu->ymax= 1.0;
- break;
- case PART_DRAG:
- case PART_DAMP:
- case PART_LENGTH:
- icu->ymin= 0.0;
- icu->ymax= 1.0;
- break;
- case PART_KINK_SHAPE:
- icu->ymin= -0.999;
- icu->ymax= 0.999;
break;
- }
- }
- else if(icu->blocktype==ID_CO) {
- icu->ymin= 0.0;
- icu->ymax= 1.0f;
}
-
- /* by default, slider limits will be icu->ymin and icu->ymax */
- icu->slide_min= icu->ymin;
- icu->slide_max= icu->ymax;
-}
-/* not for actions or constraints! */
-void execute_ipo(ID *id, Ipo *ipo)
-{
- IpoCurve *icu;
- void *poin;
- int type;
-
- if(ipo==NULL) return;
-
- for(icu= ipo->curve.first; icu; icu= icu->next) {
- poin= get_ipo_poin(id, icu, &type);
- if(poin) write_ipo_poin(poin, type, icu->curval);
- }
+ /* return pointer */
+ return poin;
}
-void *get_pchan_ipo_poin(bPoseChannel *pchan, int adrcode)
+/* --------------------- IPO-Curve Limits ----------------------------- */
+
+/* set limits for IPO-curve
+ * Note: must be synced with UI and PyAPI
+ */
+void set_icu_vars (IpoCurve *icu)
{
- void *poin= NULL;
+ /* defaults. 0.0 for y-extents makes these ignored */
+ icu->ymin= icu->ymax= 0.0;
+ icu->ipo= IPO_BEZ;
- switch (adrcode) {
- case AC_QUAT_W:
- poin= &(pchan->quat[0]);
- pchan->flag |= POSE_ROT;
+ switch (icu->blocktype) {
+ case ID_OB: /* object channels ----------------------------- */
+ {
+ if (icu->adrcode == OB_LAY) {
+ icu->ipo= IPO_CONST;
+ icu->vartype= IPO_BITS;
+ }
+ }
break;
- case AC_QUAT_X:
- poin= &(pchan->quat[1]);
- pchan->flag |= POSE_ROT;
+ case ID_MA: /* material channels ----------------------------- */
+ {
+ if (icu->adrcode < MA_MAP1) {
+ switch (icu->adrcode) {
+ case MA_HASIZE:
+ icu->ymax= 10000.0; break;
+ case MA_HARD:
+ icu->ymax= 511.0; break;
+ case MA_SPEC:
+ icu->ymax= 2.0; break;
+ case MA_MODE:
+ icu->ipo= IPO_CONST;
+ icu->vartype= IPO_BITS; break;
+ case MA_RAYM:
+ icu->ymax= 1.0; break;
+ case MA_TRANSLU:
+ icu->ymax= 1.0; break;
+ case MA_IOR:
+ icu->ymin= 1.0;
+ icu->ymax= 3.0; break;
+ case MA_FRESMIR:
+ icu->ymax= 5.0; break;
+ case MA_FRESMIRI:
+ icu->ymin= 1.0;
+ icu->ymax= 5.0; break;
+ case MA_FRESTRA:
+ icu->ymax= 5.0; break;
+ case MA_FRESTRAI:
+ icu->ymin= 1.0;
+ icu->ymax= 5.0; break;
+ case MA_ADD:
+ icu->ymax= 1.0; break;
+ case MA_EMIT:
+ icu->ymax= 2.0; break;
+ default:
+ icu->ymax= 1.0; break;
+ }
+ }
+ else {
+ switch (icu->adrcode & (MA_MAP1-1)) {
+ case MAP_OFS_X:
+ case MAP_OFS_Y:
+ case MAP_OFS_Z:
+ case MAP_SIZE_X:
+ case MAP_SIZE_Y:
+ case MAP_SIZE_Z:
+ icu->ymax= 1000.0;
+ icu->ymin= -1000.0;
+ break;
+ case MAP_R:
+ case MAP_G:
+ case MAP_B:
+ case MAP_DVAR:
+ case MAP_COLF:
+ case MAP_VARF:
+ case MAP_DISP:
+ icu->ymax= 1.0;
+ break;
+ case MAP_NORF:
+ icu->ymax= 25.0;
+ break;
+ }
+ }
+ }
break;
- case AC_QUAT_Y:
- poin= &(pchan->quat[2]);
- pchan->flag |= POSE_ROT;
+ case ID_TE: /* texture channels ----------------------------- */
+ {
+ switch (icu->adrcode & (MA_MAP1-1)) {
+ case TE_NSIZE:
+ icu->ymin= 0.0001;
+ icu->ymax= 2.0; break;
+ case TE_NDEPTH:
+ icu->vartype= IPO_SHORT;
+ icu->ipo= IPO_CONST;
+ icu->ymax= 6.0; break;
+ case TE_NTYPE:
+ icu->vartype= IPO_SHORT;
+ icu->ipo= IPO_CONST;
+ icu->ymax= 1.0; break;
+ case TE_TURB:
+ icu->ymax= 200.0; break;
+ case TE_VNW1:
+ case TE_VNW2:
+ case TE_VNW3:
+ case TE_VNW4:
+ icu->ymax= 2.0;
+ icu->ymin= -2.0; break;
+ case TE_VNMEXP:
+ icu->ymax= 10.0;
+ icu->ymin= 0.01; break;
+ case TE_VN_DISTM:
+ icu->vartype= IPO_SHORT;
+ icu->ipo= IPO_CONST;
+ icu->ymax= 6.0; break;
+ case TE_VN_COLT:
+ icu->vartype= IPO_SHORT;
+ icu->ipo= IPO_CONST;
+ icu->ymax= 3.0; break;
+ case TE_ISCA:
+ icu->ymax= 10.0;
+ icu->ymin= 0.01; break;
+ case TE_DISTA:
+ icu->ymax= 10.0; break;
+ case TE_MG_TYP:
+ icu->vartype= IPO_SHORT;
+ icu->ipo= IPO_CONST;
+ icu->ymax= 6.0; break;
+ case TE_MGH:
+ icu->ymin= 0.0001;
+ icu->ymax= 2.0; break;
+ case TE_MG_LAC:
+ case TE_MG_OFF:
+ case TE_MG_GAIN:
+ icu->ymax= 6.0; break;
+ case TE_MG_OCT:
+ icu->ymax= 8.0; break;
+ case TE_N_BAS1:
+ case TE_N_BAS2:
+ icu->vartype= IPO_SHORT;
+ icu->ipo= IPO_CONST;
+ icu->ymax= 8.0; break;
+ case TE_COL_R:
+ icu->ymax= 0.0; break;
+ case TE_COL_G:
+ icu->ymax= 2.0; break;
+ case TE_COL_B:
+ icu->ymax= 2.0; break;
+ case TE_BRIGHT:
+ icu->ymax= 2.0; break;
+ case TE_CONTRA:
+ icu->ymax= 5.0; break;
+ }
+ }
break;
- case AC_QUAT_Z:
- poin= &(pchan->quat[3]);
- pchan->flag |= POSE_ROT;
+ case ID_SEQ: /* sequence channels ----------------------------- */
+ {
+ icu->ymax= 1.0;
+ }
break;
- case AC_LOC_X:
- poin= &(pchan->loc[0]);
- pchan->flag |= POSE_LOC;
+ case ID_CU: /* curve channels ----------------------------- */
+ {
+ icu->ymax= 1.0;
+ }
break;
- case AC_LOC_Y:
- poin= &(pchan->loc[1]);
- pchan->flag |= POSE_LOC;
+ case ID_WO: /* world channels ----------------------------- */
+ {
+ if (icu->adrcode < MA_MAP1) {
+ switch (icu->adrcode) {
+ case WO_EXPOS:
+ icu->ymax= 5.0; break;
+ case WO_MISTDI:
+ case WO_MISTSTA:
+ case WO_MISTHI:
+ case WO_STARDIST:
+ case WO_STARSIZE:
+ break;
+
+ default:
+ icu->ymax= 1.0;
+ break;
+ }
+ }
+ else {
+ switch (icu->adrcode & (MA_MAP1-1)) {
+ case MAP_OFS_X:
+ case MAP_OFS_Y:
+ case MAP_OFS_Z:
+ case MAP_SIZE_X:
+ case MAP_SIZE_Y:
+ case MAP_SIZE_Z:
+ icu->ymax= 100.0;
+ icu->ymin= -100.0;
+ break;
+ case MAP_R:
+ case MAP_G:
+ case MAP_B:
+ case MAP_DVAR:
+ case MAP_COLF:
+ case MAP_NORF:
+ case MAP_VARF:
+ case MAP_DISP:
+ icu->ymax= 1.0;
+ }
+ }
+ }
break;
- case AC_LOC_Z:
- poin= &(pchan->loc[2]);
- pchan->flag |= POSE_LOC;
- break;
- case AC_SIZE_X:
- poin= &(pchan->size[0]);
- pchan->flag |= POSE_SIZE;
+ case ID_LA: /* lamp channels ----------------------------- */
+ {
+ if (icu->adrcode < MA_MAP1) {
+ switch (icu->adrcode) {
+ case LA_ENERGY:
+ case LA_DIST:
+ break;
+
+ case LA_COL_R:
+ case LA_COL_G:
+ case LA_COL_B:
+ case LA_SPOTBL:
+ case LA_QUAD1:
+ case LA_QUAD2:
+ icu->ymax= 1.0; break;
+
+ case LA_SPOTSI:
+ icu->ymax= 180.0; break;
+
+ case LA_HALOINT:
+ icu->ymax= 5.0; break;
+ }
+ }
+ else {
+ switch (icu->adrcode & (MA_MAP1-1)) {
+ case MAP_OFS_X:
+ case MAP_OFS_Y:
+ case MAP_OFS_Z:
+ case MAP_SIZE_X:
+ case MAP_SIZE_Y:
+ case MAP_SIZE_Z:
+ icu->ymax= 100.0;
+ icu->ymin= -100.0;
+ break;
+ case MAP_R:
+ case MAP_G:
+ case MAP_B:
+ case MAP_DVAR:
+ case MAP_COLF:
+ case MAP_NORF:
+ case MAP_VARF:
+ case MAP_DISP:
+ icu->ymax= 1.0;
+ }
+ }
+ }
break;
- case AC_SIZE_Y:
- poin= &(pchan->size[1]);
- pchan->flag |= POSE_SIZE;
+ case ID_CA: /* camera channels ----------------------------- */
+ {
+ switch (icu->adrcode) {
+ case CAM_LENS:
+ icu->ymin= 1.0;
+ icu->ymax= 1000.0;
+ break;
+ case CAM_STA:
+ icu->ymin= 0.001f;
+ break;
+ case CAM_END:
+ icu->ymin= 0.1f;
+ break;
+
+ case CAM_YF_APERT:
+ icu->ymin = 0.0;
+ icu->ymax = 2.0;
+ break;
+ case CAM_YF_FDIST:
+ icu->ymin = 0.0;
+ icu->ymax = 5000.0;
+ break;
+
+ case CAM_SHIFT_X:
+ case CAM_SHIFT_Y:
+ icu->ymin= -2.0f;
+ icu->ymax= 2.0f;
+ break;
+ }
+ }
break;
- case AC_SIZE_Z:
- poin= &(pchan->size[2]);
- pchan->flag |= POSE_SIZE;
+ case ID_SO: /* sound channels ----------------------------- */
+ {
+ switch (icu->adrcode) {
+ case SND_VOLUME:
+ icu->ymin= 0.0;
+ icu->ymax= 1.0;
+ break;
+ case SND_PITCH:
+ icu->ymin= -12.0;
+ icu->ymin= 12.0;
+ break;
+ case SND_PANNING:
+ icu->ymin= 0.0;
+ icu->ymax= 1.0;
+ break;
+ case SND_ATTEN:
+ icu->ymin= 0.0;
+ icu->ymin= 1.0;
+ break;
+ }
+ }
break;
- }
- return poin;
-}
-
-void execute_action_ipo(bActionChannel *achan, bPoseChannel *pchan)
-{
-
- if(achan && achan->ipo) {
- IpoCurve *icu;
- for(icu= achan->ipo->curve.first; icu; icu= icu->next) {
- void *poin= get_pchan_ipo_poin(pchan, icu->adrcode);
- if(poin) {
- write_ipo_poin(poin, IPO_FLOAT, icu->curval);
- //printf("execute_action_ipo wrote_ipo_poin: %f\n", icu->curval);
- //printf("%s has poin %p value %f\n", achan->name, poin, icu->curval);
+ case ID_PA: /* particle channels ----------------------------- */
+ {
+ switch (icu->adrcode) {
+ case PART_EMIT_LIFE:
+ case PART_SIZE:
+ case PART_KINK_FREQ:
+ case PART_EMIT_VEL:
+ case PART_EMIT_AVE:
+ case PART_EMIT_SIZE:
+ icu->ymin= 0.0;
+ break;
+ case PART_CLUMP:
+ icu->ymin= -1.0;
+ icu->ymax= 1.0;
+ break;
+ case PART_DRAG:
+ case PART_DAMP:
+ case PART_LENGTH:
+ icu->ymin= 0.0;
+ icu->ymax= 1.0;
+ break;
+ case PART_KINK_SHAPE:
+ icu->ymin= -0.999;
+ icu->ymax= 0.999;
+ break;
}
}
+ break;
+ case ID_CO: /* constraint channels ----------------------------- */
+ {
+ icu->ymin= 0.0;
+ icu->ymax= 1.0f;
+ }
+ break;
}
+
+ /* by default, slider limits will be icu->ymin and icu->ymax */
+ icu->slide_min= icu->ymin;
+ icu->slide_max= icu->ymax;
}
-/* exception: it does calc for objects...
- * now find out why this routine was used anyway!
- */
-void do_ipo_nocalc(Ipo *ipo)
+/* --------------------- Pointer I/O API ----------------------------- */
+
+/* write the given value directly into the given pointer */
+void write_ipo_poin (void *poin, int type, float val)
{
- Object *ob;
- Material *ma;
- Tex *tex;
- World *wo;
- Lamp *la;
- Camera *ca;
- bSound *snd;
-
- if(ipo==NULL) return;
-
- switch(ipo->blocktype) {
- case ID_OB:
- ob= G.main->object.first;
- while(ob) {
- if(ob->ipo==ipo) {
- do_ob_ipo(ob);
- /* execute_ipo((ID *)ob, ipo); */
- }
- ob= ob->id.next;
- }
- break;
- case ID_MA:
- ma= G.main->mat.first;
- while(ma) {
- if(ma->ipo==ipo) execute_ipo((ID *)ma, ipo);
- ma= ma->id.next;
- }
- break;
- case ID_TE:
- tex= G.main->tex.first;
- while(tex) {
- if(tex->ipo==ipo) execute_ipo((ID *)tex, ipo);
- tex=tex->id.next;
- }
+ /* Note: we only support a limited number of types, with the value
+ * to set needing to be cast to the appropriate type first
+ * -> (float to integer conversions could be slow)
+ */
+ switch(type) {
+ case IPO_FLOAT:
+ *((float *)poin)= val;
break;
- case ID_WO:
- wo= G.main->world.first;
- while(wo) {
- if(wo->ipo==ipo) execute_ipo((ID *)wo, ipo);
- wo= wo->id.next;
- }
+
+ case IPO_FLOAT_DEGR: /* special hack for rotation so that it fits on same axis as other transforms */
+ *((float *)poin)= (float)(val * M_PI_2 / 9.0);
break;
- case ID_LA:
- la= G.main->lamp.first;
- while(la) {
- if(la->ipo==ipo) execute_ipo((ID *)la, ipo);
- la= la->id.next;
- }
+
+ case IPO_INT:
+ case IPO_INT_BIT: // fixme... directly revealing bitflag combinations is evil!
+ case IPO_LONG:
+ *((int *)poin)= (int)val;
break;
- case ID_CA:
- ca= G.main->camera.first;
- while(ca) {
- if(ca->ipo==ipo) execute_ipo((ID *)ca, ipo);
- ca= ca->id.next;
- }
+
+ case IPO_SHORT:
+ case IPO_SHORT_BIT: // fixme... directly revealing bitflag combinations is evil!
+ *((short *)poin)= (short)val;
break;
- case ID_SO:
- snd= G.main->sound.first;
- while(snd) {
- if(snd->ipo==ipo) execute_ipo((ID *)snd, ipo);
- snd= snd->id.next;
- }
+
+ case IPO_CHAR:
+ case IPO_CHAR_BIT: // fixme... directly revealing bitflag combinations is evil!
+ *((char *)poin)= (char)val;
break;
}
}
-void do_ipo(Ipo *ipo)
+/* read the value from the pointer that was obtained */
+float read_ipo_poin (void *poin, int type)
{
- if(ipo) {
- float ctime= frame_to_float(G.scene->r.cfra);
- calc_ipo(ipo, ctime);
-
- do_ipo_nocalc(ipo);
- }
-}
-
-
-
-void do_mat_ipo(Material *ma)
-{
- float ctime;
-
- if(ma==NULL || ma->ipo==NULL) return;
-
- ctime= frame_to_float(G.scene->r.cfra);
- /* if(ob->ipoflag & OB_OFFS_OB) ctime-= ob->sf; */
-
- calc_ipo(ma->ipo, ctime);
-
- execute_ipo((ID *)ma, ma->ipo);
-}
-
-void do_ob_ipo(Object *ob)
-{
- float ctime;
- unsigned int lay;
-
- if(ob->ipo==NULL) return;
-
- /* do not set ob->ctime here: for example when parent in invisible layer */
-
- ctime= bsystem_time(ob, (float) G.scene->r.cfra, 0.0);
-
- calc_ipo(ob->ipo, ctime);
-
- /* Patch: remember localview */
- lay= ob->lay & 0xFF000000;
-
- execute_ipo((ID *)ob, ob->ipo);
-
- ob->lay |= lay;
- if(ob->id.name[2]=='S' && ob->id.name[3]=='C' && ob->id.name[4]=='E') {
- if(strcmp(G.scene->id.name+2, ob->id.name+6)==0) {
- G.scene->lay= ob->lay;
- copy_view3d_lock(0);
- /* no redraw here! creates too many calls */
- }
- }
-}
-
-void do_ob_ipodrivers(Object *ob, Ipo *ipo, float ctime)
-{
- IpoCurve *icu;
- void *poin;
- int type;
-
- for(icu= ipo->curve.first; icu; icu= icu->next) {
- if(icu->driver) {
- icu->curval= eval_icu(icu, ctime);
- poin= get_ipo_poin((ID *)ob, icu, &type);
- if(poin) write_ipo_poin(poin, type, icu->curval);
- }
- }
-}
-
-void do_seq_ipo(Sequence *seq, int cfra)
-{
- float ctime, div;
-
- /* seq_ipo has an exception: calc both fields immediately */
+ float val = 0.0;
- if(seq->ipo) {
- if((seq->flag & SEQ_IPO_FRAME_LOCKED) != 0) {
- ctime = frame_to_float(cfra);
- div = 1.0;
- } else {
- ctime= frame_to_float(cfra - seq->startdisp);
- div= (seq->enddisp - seq->startdisp)/100.0f;
- if(div==0.0) return;
- }
+ /* Note: we only support a limited number of types, with the value
+ * to set needing to be cast to the appropriate type first
+ * -> (int to float conversions may loose accuracy in rare cases)
+ */
+ switch (type) {
+ case IPO_FLOAT:
+ val= *((float *)poin);
+ break;
- /* 2nd field */
- calc_ipo(seq->ipo, (ctime+0.5f)/div);
- execute_ipo((ID *)seq, seq->ipo);
- seq->facf1= seq->facf0;
-
- /* 1st field */
- calc_ipo(seq->ipo, ctime/div);
- execute_ipo((ID *)seq, seq->ipo);
-
- }
- else seq->facf1= seq->facf0= 1.0f;
-}
-
-int has_ipo_code(Ipo *ipo, int code)
-{
- IpoCurve *icu;
-
- if(ipo==NULL) return 0;
-
- for(icu= ipo->curve.first; icu; icu= icu->next) {
- if(icu->adrcode==code) return 1;
- }
- return 0;
-}
-
-void do_all_data_ipos()
-{
- Material *ma;
- Tex *tex;
- World *wo;
- Ipo *ipo;
- Lamp *la;
- Key *key;
- Camera *ca;
- bSound *snd;
- Sequence *seq;
- Editing *ed;
- Base *base;
- float ctime;
-
- ctime= frame_to_float(G.scene->r.cfra);
-
- /* this exception cannot be depgraphed yet... what todo with objects in other layers?... */
- for(base= G.scene->base.first; base; base= base->next) {
- /* only update layer when an ipo */
- if( has_ipo_code(base->object->ipo, OB_LAY) ) {
- do_ob_ipo(base->object);
- base->lay= base->object->lay;
- }
- }
-
- /* layers for the set...*/
- if(G.scene->set) {
- for(base= G.scene->set->base.first; base; base= base->next) {
- if( has_ipo_code(base->object->ipo, OB_LAY) ) {
- do_ob_ipo(base->object);
- base->lay= base->object->lay;
- }
- }
- }
-
-
- ipo= G.main->ipo.first;
- while(ipo) {
- if(ipo->id.us && ipo->blocktype!=ID_OB) {
- calc_ipo(ipo, ctime);
- }
- ipo= ipo->id.next;
- }
-
- for(tex= G.main->tex.first; tex; tex= tex->id.next) {
- if(tex->ipo) execute_ipo((ID *)tex, tex->ipo);
- }
-
- for(ma= G.main->mat.first; ma; ma= ma->id.next) {
- if(ma->ipo) execute_ipo((ID *)ma, ma->ipo);
- }
-
- for(wo= G.main->world.first; wo; wo= wo->id.next) {
- if(wo->ipo) execute_ipo((ID *)wo, wo->ipo);
- }
-
- for(key= G.main->key.first; key; key= key->id.next) {
- if(key->ipo) execute_ipo((ID *)key, key->ipo);
- }
-
- la= G.main->lamp.first;
- while(la) {
- if(la->ipo) execute_ipo((ID *)la, la->ipo);
- la= la->id.next;
- }
-
- ca= G.main->camera.first;
- while(ca) {
- if(ca->ipo) execute_ipo((ID *)ca, ca->ipo);
- ca= ca->id.next;
- }
-
- snd= G.main->sound.first;
- while(snd) {
- if(snd->ipo) execute_ipo((ID *)snd, snd->ipo);
- snd= snd->id.next;
- }
-
- /* process FAC Ipos used as volume envelopes */
- ed= G.scene->ed;
- if (ed) {
- seq= ed->seqbasep->first;
- while(seq) {
- if ((seq->type == SEQ_RAM_SOUND
- || seq->type == SEQ_HD_SOUND) && (seq->ipo) &&
- (seq->startdisp<=G.scene->r.cfra+2) &&
- (seq->enddisp>G.scene->r.cfra))
- do_seq_ipo(seq, G.scene->r.cfra);
- seq= seq->next;
- }
- }
-
-}
-
-
-int calc_ipo_spec(Ipo *ipo, int adrcode, float *ctime)
-{
- IpoCurve *icu;
-
- if(ipo==NULL) return 0;
-
- for(icu= ipo->curve.first; icu; icu= icu->next) {
- if(icu->adrcode == adrcode) {
- if(icu->flag & IPO_LOCK);
- else calc_icu(icu, *ctime);
-
- *ctime= icu->curval;
- return 1;
- }
- }
-
- return 0;
-}
-
-
-/* ************************** */
-
-void clear_delta_obipo(Ipo *ipo)
-{
- Object *ob;
+ case IPO_FLOAT_DEGR: /* special hack for rotation so that it fits on same axis as other transforms */
+ val= *( (float *)poin);
+ val = (float)(val / (M_PI_2/9.0));
+ break;
- if(ipo==NULL) return;
+ case IPO_INT:
+ case IPO_INT_BIT: // fixme... directly revealing bitflag combinations is evil!
+ case IPO_LONG:
+ val= (float)( *((int *)poin) );
+ break;
+
+ case IPO_SHORT:
+ case IPO_SHORT_BIT: // fixme... directly revealing bitflag combinations is evil!
+ val= *((short *)poin);
+ break;
- ob= G.main->object.first;
- while(ob) {
- if(ob->id.lib==NULL) {
- if(ob->ipo==ipo) {
- memset(&ob->dloc, 0, 12);
- memset(&ob->drot, 0, 12);
- memset(&ob->dsize, 0, 12);
- }
- }
- ob= ob->id.next;
+ case IPO_CHAR:
+ case IPO_CHAR_BIT: // fixme... directly revealing bitflag combinations is evil
+ val= *((char *)poin);
+ break;
}
-}
-
-void add_to_cfra_elem(ListBase *lb, BezTriple *bezt)
-{
- CfraElem *ce, *cen;
-
- ce= lb->first;
- while(ce) {
-
- if( ce->cfra==bezt->vec[1][0] ) {
- /* do because of double keys */
- if(bezt->f2 & SELECT) ce->sel= bezt->f2;
- return;
- }
- else if(ce->cfra > bezt->vec[1][0]) break;
-
- ce= ce->next;
- }
- cen= MEM_callocN(sizeof(CfraElem), "add_to_cfra_elem");
- if(ce) BLI_insertlinkbefore(lb, ce, cen);
- else BLI_addtail(lb, cen);
-
- cen->cfra= bezt->vec[1][0];
- cen->sel= bezt->f2;
+ /* return value */
+ return val;
}
+// !!!!!!!!!!!!!!!!!!!!!!!!!!!! FIXME - BAD CRUFT WARNING !!!!!!!!!!!!!!!!!!!!!!!
-void make_cfra_list(Ipo *ipo, ListBase *elems)
-{
- IpoCurve *icu;
- BezTriple *bezt;
- int a;
-
- if(ipo->blocktype==ID_OB) {
- for(icu= ipo->curve.first; icu; icu= icu->next) {
- if(icu->flag & IPO_VISIBLE) {
- switch(icu->adrcode) {
- case OB_DLOC_X:
- case OB_DLOC_Y:
- case OB_DLOC_Z:
- case OB_DROT_X:
- case OB_DROT_Y:
- case OB_DROT_Z:
- case OB_DSIZE_X:
- case OB_DSIZE_Y:
- case OB_DSIZE_Z:
-
- case OB_LOC_X:
- case OB_LOC_Y:
- case OB_LOC_Z:
- case OB_ROT_X:
- case OB_ROT_Y:
- case OB_ROT_Z:
- case OB_SIZE_X:
- case OB_SIZE_Y:
- case OB_SIZE_Z:
- case OB_PD_FSTR:
- case OB_PD_FFALL:
- case OB_PD_SDAMP:
- case OB_PD_RDAMP:
- case OB_PD_PERM:
- case OB_PD_FMAXD:
- bezt= icu->bezt;
- if(bezt) {
- a= icu->totvert;
- while(a--) {
- add_to_cfra_elem(elems, bezt);
- bezt++;
- }
- }
- break;
- }
- }
- }
- }
- else if(ipo->blocktype==ID_AC) {
- for(icu= ipo->curve.first; icu; icu= icu->next) {
- if(icu->flag & IPO_VISIBLE) {
- switch(icu->adrcode) {
- case AC_LOC_X:
- case AC_LOC_Y:
- case AC_LOC_Z:
- case AC_SIZE_X:
- case AC_SIZE_Y:
- case AC_SIZE_Z:
- case AC_QUAT_W:
- case AC_QUAT_X:
- case AC_QUAT_Y:
- case AC_QUAT_Z:
- bezt= icu->bezt;
- if(bezt) {
- a= icu->totvert;
- while(a--) {
- add_to_cfra_elem(elems, bezt);
- bezt++;
- }
- }
- break;
- }
- }
- }
- }
- else {
- for(icu= ipo->curve.first; icu; icu= icu->next) {
- if(icu->flag & IPO_VISIBLE) {
- bezt= icu->bezt;
- if(bezt) {
- a= icu->totvert;
- while(a--) {
- add_to_cfra_elem(elems, bezt);
- bezt++;
- }
- }
- }
- }
- }
-
- /* what's the point of this little block of code? */
-#if 0
- if(ipo->showkey==0) {
- /* deselect all keys */
- ce= elems->first;
- while(ce) {
- ce->sel= 0;
- ce= ce->next;
- }
- }
-#endif
-}
-
-/* *********************** INTERFACE FOR KETSJI ********** */
-
+/* ***************************** IPO <--> GameEngine Interface ********************************* */
-int IPO_GetChannels(Ipo *ipo, IPO_Channel *channels)
+/* channels is max 32 items, allocated by calling function */
+short IPO_GetChannels (Ipo *ipo, IPO_Channel *channels)
{
- /* channels is max 32 items, allocated by calling function */
-
IpoCurve *icu;
- int total=0;
+ int total = 0;
- if(ipo==NULL) return 0;
+ /* don't do anything with no IPO-block */
+ if (ipo == NULL)
+ return 0;
- for(icu= ipo->curve.first; icu; icu= icu->next) {
+ /* store the IPO-curve's adrcode in the relevant channel slot */
+ for (icu=ipo->curve.first; (icu) && (total < 31); icu=icu->next, total++)
channels[total]= icu->adrcode;
- total++;
- if(total>31) break;
- }
+ /* return the number of channels stored */
return total;
}
-
-
/* Get the float value for channel 'channel' at time 'ctime' */
-
-float IPO_GetFloatValue(Ipo *ipo, IPO_Channel channel, float ctime)
+float IPO_GetFloatValue (Ipo *ipo, IPO_Channel channel, float ctime)
{
- if(ipo==NULL) return 0;
+ /* don't evaluate if no IPO to use */
+ if (ipo == NULL)
+ return 0;
+ /* only calculate the specified channel */
calc_ipo_spec(ipo, channel, &ctime);
- if (OB_ROT_X <= channel && channel <= OB_DROT_Z) {
+ /* unapply rotation hack, as gameengine doesn't use it */
+ if ((OB_ROT_X <= channel) && (channel <= OB_DROT_Z))
ctime *= (float)(M_PI_2/9.0);
- }
+ /* return the value of this channel */
return ctime;
}
diff --git a/source/blender/blenkernel/intern/material.c b/source/blender/blenkernel/intern/material.c
index 3983eecdaba..f05b84f6e90 100644
--- a/source/blender/blenkernel/intern/material.c
+++ b/source/blender/blenkernel/intern/material.c
@@ -61,6 +61,8 @@
#include "BPY_extern.h"
+#include "GPU_material.h"
+
/* used in UI and render */
Material defmaterial;
@@ -96,6 +98,9 @@ void free_material(Material *ma)
ntreeFreeTree(ma->nodetree);
MEM_freeN(ma->nodetree);
}
+
+ if(ma->gpumaterial.first)
+ GPU_material_free(ma);
}
void init_material(Material *ma)
@@ -207,6 +212,8 @@ Material *copy_material(Material *ma)
if(ma->nodetree) {
man->nodetree= ntreeCopyTree(ma->nodetree, 0); /* 0 == full new tree */
}
+
+ man->gpumaterial.first= man->gpumaterial.last= NULL;
return man;
}
diff --git a/source/blender/blenkernel/intern/mesh.c b/source/blender/blenkernel/intern/mesh.c
index 43e48c3bacd..77b9ea4fa2d 100644
--- a/source/blender/blenkernel/intern/mesh.c
+++ b/source/blender/blenkernel/intern/mesh.c
@@ -79,45 +79,6 @@
#include "BLI_editVert.h"
#include "BLI_arithb.h"
-int update_realtime_texture(MTFace *tface, double time)
-{
- Image *ima;
- int inc = 0;
- float diff;
- int newframe;
-
- ima = tface->tpage;
-
- if (!ima)
- return 0;
-
- if (ima->lastupdate<0)
- ima->lastupdate = 0;
-
- if (ima->lastupdate>time)
- ima->lastupdate=(float)time;
-
- if(ima->tpageflag & IMA_TWINANIM) {
- if(ima->twend >= ima->xrep*ima->yrep) ima->twend= ima->xrep*ima->yrep-1;
-
- /* check: is the bindcode not in the array? Then free. (still to do) */
-
- diff = (float)(time-ima->lastupdate);
-
- inc = (int)(diff*(float)ima->animspeed);
-
- ima->lastupdate+=((float)inc/(float)ima->animspeed);
-
- newframe = ima->lastframe+inc;
-
- if (newframe > (int)ima->twend)
- newframe = (int)ima->twsta-1 + (newframe-ima->twend)%(ima->twend-ima->twsta);
-
- ima->lastframe = newframe;
- }
- return inc;
-}
-
void mesh_update_customdata_pointers(Mesh *me)
{
me->mvert = CustomData_get_layer(&me->vdata, CD_MVERT);
diff --git a/source/blender/blenkernel/intern/modifier.c b/source/blender/blenkernel/intern/modifier.c
index 1dc76296c28..b9a60ca9329 100644
--- a/source/blender/blenkernel/intern/modifier.c
+++ b/source/blender/blenkernel/intern/modifier.c
@@ -54,8 +54,11 @@
#include "MEM_guardedalloc.h"
+#include "DNA_action_types.h"
#include "DNA_armature_types.h"
+#include "DNA_camera_types.h"
#include "DNA_cloth_types.h"
+#include "DNA_curve_types.h"
#include "DNA_effect_types.h"
#include "DNA_material_types.h"
#include "DNA_mesh_types.h"
@@ -66,8 +69,6 @@
#include "DNA_particle_types.h"
#include "DNA_scene_types.h"
#include "DNA_texture_types.h"
-#include "DNA_curve_types.h"
-#include "DNA_camera_types.h"
#include "BLI_editVert.h"
@@ -77,30 +78,34 @@
#include "BKE_main.h"
#include "BKE_anim.h"
#include "BKE_bad_level_calls.h"
+#include "BKE_bmesh.h"
+#include "BKE_booleanops.h"
#include "BKE_cloth.h"
#include "BKE_collision.h"
+#include "BKE_cdderivedmesh.h"
#include "BKE_curve.h"
#include "BKE_customdata.h"
-#include "BKE_global.h"
-#include "BKE_cdderivedmesh.h"
#include "BKE_DerivedMesh.h"
-#include "BKE_booleanops.h"
#include "BKE_displist.h"
-#include "BKE_modifier.h"
+#include "BKE_fluidsim.h"
+#include "BKE_global.h"
#include "BKE_lattice.h"
#include "BKE_library.h"
-#include "BKE_subsurf.h"
-#include "BKE_object.h"
-#include "BKE_mesh.h"
-#include "BKE_softbody.h"
-#include "BKE_cloth.h"
#include "BKE_material.h"
+#include "BKE_mesh.h"
+#include "BKE_modifier.h"
+#include "BKE_object.h"
#include "BKE_particle.h"
#include "BKE_pointcache.h"
+#include "BKE_softbody.h"
+#include "BKE_subsurf.h"
#include "BKE_texture.h"
#include "BKE_utildefines.h"
+
#include "depsgraph_private.h"
-#include "BKE_bmesh.h"
+#include "BKE_deform.h"
+#include "BKE_shrinkwrap.h"
+#include "BKE_simple_deform.h"
#include "LOD_DependKludge.h"
#include "LOD_decimation.h"
@@ -584,6 +589,361 @@ static DerivedMesh *buildModifier_applyModifier(ModifierData *md, Object *ob,
return result;
}
+/* Mask */
+
+static void maskModifier_copyData(ModifierData *md, ModifierData *target)
+{
+ MaskModifierData *mmd = (MaskModifierData*) md;
+ MaskModifierData *tmmd = (MaskModifierData*) target;
+
+ strcpy(tmmd->vgroup, mmd->vgroup);
+}
+
+static CustomDataMask maskModifier_requiredDataMask(ModifierData *md)
+{
+ return (1 << CD_MDEFORMVERT);
+}
+
+static void maskModifier_foreachObjectLink(
+ ModifierData *md, Object *ob,
+ void (*walk)(void *userData, Object *ob, Object **obpoin),
+ void *userData)
+{
+ MaskModifierData *mmd = (MaskModifierData *)md;
+ walk(userData, ob, &mmd->ob_arm);
+}
+
+static void maskModifier_updateDepgraph(ModifierData *md, DagForest *forest,
+ Object *ob, DagNode *obNode)
+{
+ MaskModifierData *mmd = (MaskModifierData *)md;
+
+ if (mmd->ob_arm)
+ {
+ DagNode *armNode = dag_get_node(forest, mmd->ob_arm);
+
+ dag_add_relation(forest, armNode, obNode,
+ DAG_RL_DATA_DATA | DAG_RL_OB_DATA, "Mask Modifier");
+ }
+}
+
+static DerivedMesh *maskModifier_applyModifier(ModifierData *md, Object *ob,
+ DerivedMesh *derivedData,
+ int useRenderParams, int isFinalCalc)
+{
+ MaskModifierData *mmd= (MaskModifierData *)md;
+ DerivedMesh *dm= derivedData, *result= NULL;
+ GHash *vertHash=NULL, *edgeHash, *faceHash;
+ GHashIterator *hashIter;
+ MDeformVert *dvert= NULL;
+ int numFaces=0, numEdges=0, numVerts=0;
+ int maxVerts, maxEdges, maxFaces;
+ int i;
+
+ /* Overview of Method:
+ * 1. Get the vertices that are in the vertexgroup of interest
+ * 2. Filter out unwanted geometry (i.e. not in vertexgroup), by populating mappings with new vs old indices
+ * 3. Make a new mesh containing only the mapping data
+ */
+
+ /* get original number of verts, edges, and faces */
+ maxVerts= dm->getNumVerts(dm);
+ maxEdges= dm->getNumEdges(dm);
+ maxFaces= dm->getNumFaces(dm);
+
+ /* check if we can just return the original mesh
+ * - must have verts and therefore verts assigned to vgroups to do anything useful
+ */
+ if ( !(ELEM(mmd->mode, MOD_MASK_MODE_ARM, MOD_MASK_MODE_VGROUP)) ||
+ (maxVerts == 0) || (ob->defbase.first == NULL) )
+ {
+ return derivedData;
+ }
+
+ /* if mode is to use selected armature bones, aggregate the bone groups */
+ if (mmd->mode == MOD_MASK_MODE_ARM) /* --- using selected bones --- */
+ {
+ GHash *vgroupHash, *boneHash;
+ Object *oba= mmd->ob_arm;
+ bPoseChannel *pchan;
+ bDeformGroup *def;
+
+ /* check that there is armature object with bones to use, otherwise return original mesh */
+ if (ELEM(NULL, mmd->ob_arm, mmd->ob_arm->pose))
+ return derivedData;
+
+ /* hashes for finding mapping of:
+ * - vgroups to indicies -> vgroupHash (string, int)
+ * - bones to vgroup indices -> boneHash (index of vgroup, dummy)
+ */
+ vgroupHash= BLI_ghash_new(BLI_ghashutil_strhash, BLI_ghashutil_strcmp);
+ boneHash= BLI_ghash_new(BLI_ghashutil_inthash, BLI_ghashutil_intcmp);
+
+ /* build mapping of names of vertex groups to indices */
+ for (i = 0, def = ob->defbase.first; def; def = def->next, i++)
+ BLI_ghash_insert(vgroupHash, def->name, SET_INT_IN_POINTER(i));
+
+ /* get selected-posechannel <-> vertexgroup index mapping */
+ for (pchan= oba->pose->chanbase.first; pchan; pchan= pchan->next)
+ {
+ /* check if bone is selected */
+ // TODO: include checks for visibility too?
+ // FIXME: the depsgraph needs extensions to make this work in realtime...
+ if ( (pchan->bone) && (pchan->bone->flag & BONE_SELECTED) )
+ {
+ /* check if hash has group for this bone */
+ if (BLI_ghash_haskey(vgroupHash, pchan->name))
+ {
+ int defgrp_index= GET_INT_FROM_POINTER(BLI_ghash_lookup(vgroupHash, pchan->name));
+
+ /* add index to hash (store under key only) */
+ BLI_ghash_insert(boneHash, SET_INT_IN_POINTER(defgrp_index), pchan);
+ }
+ }
+ }
+
+ /* if no bones selected, free hashes and return original mesh */
+ if (BLI_ghash_size(boneHash) == 0)
+ {
+ BLI_ghash_free(vgroupHash, NULL, NULL);
+ BLI_ghash_free(boneHash, NULL, NULL);
+
+ return derivedData;
+ }
+
+ /* repeat the previous check, but for dverts */
+ dvert= dm->getVertDataArray(dm, CD_MDEFORMVERT);
+ if (dvert == NULL)
+ {
+ BLI_ghash_free(vgroupHash, NULL, NULL);
+ BLI_ghash_free(boneHash, NULL, NULL);
+
+ return derivedData;
+ }
+
+ /* hashes for quickly providing a mapping from old to new - use key=oldindex, value=newindex */
+ vertHash= BLI_ghash_new(BLI_ghashutil_inthash, BLI_ghashutil_intcmp);
+
+ /* add vertices which exist in vertexgroups into vertHash for filtering */
+ for (i = 0; i < maxVerts; i++)
+ {
+ MDeformWeight *def_weight = NULL;
+ int j;
+
+ for (j= 0; j < dvert[i].totweight; j++)
+ {
+ if (BLI_ghash_haskey(boneHash, SET_INT_IN_POINTER(dvert[i].dw[j].def_nr)))
+ {
+ def_weight = &dvert[i].dw[j];
+ break;
+ }
+ }
+
+ /* check if include vert in vertHash */
+ if (mmd->flag & MOD_MASK_INV) {
+ /* if this vert is in the vgroup, don't include it in vertHash */
+ if (def_weight) continue;
+ }
+ else {
+ /* if this vert isn't in the vgroup, don't include it in vertHash */
+ if (!def_weight) continue;
+ }
+
+ /* add to ghash for verts (numVerts acts as counter for mapping) */
+ BLI_ghash_insert(vertHash, SET_INT_IN_POINTER(i), SET_INT_IN_POINTER(numVerts));
+ numVerts++;
+ }
+
+ /* free temp hashes */
+ BLI_ghash_free(vgroupHash, NULL, NULL);
+ BLI_ghash_free(boneHash, NULL, NULL);
+ }
+ else /* --- Using Nominated VertexGroup only --- */
+ {
+ int defgrp_index = -1;
+
+ /* get index of vertex group */
+ if (mmd->vgroup[0])
+ {
+ bDeformGroup *def;
+
+ /* find index by comparing names - SLOW... */
+ for (i = 0, def = ob->defbase.first; def; def = def->next, i++)
+ {
+ if (!strcmp(def->name, mmd->vgroup))
+ {
+ defgrp_index = i;
+ break;
+ }
+ }
+ }
+
+ /* get dverts */
+ if (defgrp_index >= 0)
+ dvert = dm->getVertDataArray(dm, CD_MDEFORMVERT);
+
+ /* if no vgroup (i.e. dverts) found, return the initial mesh */
+ if ((defgrp_index < 0) || (dvert == NULL))
+ return dm;
+
+ /* hashes for quickly providing a mapping from old to new - use key=oldindex, value=newindex */
+ vertHash= BLI_ghash_new(BLI_ghashutil_inthash, BLI_ghashutil_intcmp);
+
+ /* add vertices which exist in vertexgroup into ghash for filtering */
+ for (i = 0; i < maxVerts; i++)
+ {
+ MDeformWeight *def_weight = NULL;
+ int j;
+
+ for (j= 0; j < dvert[i].totweight; j++)
+ {
+ if (dvert[i].dw[j].def_nr == defgrp_index)
+ {
+ def_weight = &dvert[i].dw[j];
+ break;
+ }
+ }
+
+ /* check if include vert in vertHash */
+ if (mmd->flag & MOD_MASK_INV) {
+ /* if this vert is in the vgroup, don't include it in vertHash */
+ if (def_weight) continue;
+ }
+ else {
+ /* if this vert isn't in the vgroup, don't include it in vertHash */
+ if (!def_weight) continue;
+ }
+
+ /* add to ghash for verts (numVerts acts as counter for mapping) */
+ BLI_ghash_insert(vertHash, SET_INT_IN_POINTER(i), SET_INT_IN_POINTER(numVerts));
+ numVerts++;
+ }
+ }
+
+ /* hashes for quickly providing a mapping from old to new - use key=oldindex, value=newindex */
+ edgeHash= BLI_ghash_new(BLI_ghashutil_inthash, BLI_ghashutil_intcmp);
+ faceHash= BLI_ghash_new(BLI_ghashutil_inthash, BLI_ghashutil_intcmp);
+
+ /* loop over edges and faces, and do the same thing to
+ * ensure that they only reference existing verts
+ */
+ for (i = 0; i < maxEdges; i++)
+ {
+ MEdge me;
+ dm->getEdge(dm, i, &me);
+
+ /* only add if both verts will be in new mesh */
+ if ( BLI_ghash_haskey(vertHash, SET_INT_IN_POINTER(me.v1)) &&
+ BLI_ghash_haskey(vertHash, SET_INT_IN_POINTER(me.v2)) )
+ {
+ BLI_ghash_insert(edgeHash, SET_INT_IN_POINTER(i), SET_INT_IN_POINTER(numEdges));
+ numEdges++;
+ }
+ }
+ for (i = 0; i < maxFaces; i++)
+ {
+ MFace mf;
+ dm->getFace(dm, i, &mf);
+
+ /* all verts must be available */
+ if ( BLI_ghash_haskey(vertHash, SET_INT_IN_POINTER(mf.v1)) &&
+ BLI_ghash_haskey(vertHash, SET_INT_IN_POINTER(mf.v2)) &&
+ BLI_ghash_haskey(vertHash, SET_INT_IN_POINTER(mf.v3)) &&
+ (mf.v4==0 || BLI_ghash_haskey(vertHash, SET_INT_IN_POINTER(mf.v4))) )
+ {
+ BLI_ghash_insert(faceHash, SET_INT_IN_POINTER(i), SET_INT_IN_POINTER(numFaces));
+ numFaces++;
+ }
+ }
+
+
+ /* now we know the number of verts, edges and faces,
+ * we can create the new (reduced) mesh
+ */
+ result = CDDM_from_template(dm, numVerts, numEdges, numFaces);
+
+
+ /* using ghash-iterators, map data into new mesh */
+ /* vertices */
+ for ( hashIter = BLI_ghashIterator_new(vertHash);
+ !BLI_ghashIterator_isDone(hashIter);
+ BLI_ghashIterator_step(hashIter) )
+ {
+ MVert source;
+ MVert *dest;
+ int oldIndex = GET_INT_FROM_POINTER(BLI_ghashIterator_getKey(hashIter));
+ int newIndex = GET_INT_FROM_POINTER(BLI_ghashIterator_getValue(hashIter));
+
+ dm->getVert(dm, oldIndex, &source);
+ dest = CDDM_get_vert(result, newIndex);
+
+ DM_copy_vert_data(dm, result, oldIndex, newIndex, 1);
+ *dest = source;
+ }
+ BLI_ghashIterator_free(hashIter);
+
+ /* edges */
+ for ( hashIter = BLI_ghashIterator_new(edgeHash);
+ !BLI_ghashIterator_isDone(hashIter);
+ BLI_ghashIterator_step(hashIter) )
+ {
+ MEdge source;
+ MEdge *dest;
+ int oldIndex = GET_INT_FROM_POINTER(BLI_ghashIterator_getKey(hashIter));
+ int newIndex = GET_INT_FROM_POINTER(BLI_ghashIterator_getValue(hashIter));
+
+ dm->getEdge(dm, oldIndex, &source);
+ dest = CDDM_get_edge(result, newIndex);
+
+ source.v1 = GET_INT_FROM_POINTER(BLI_ghash_lookup(vertHash, SET_INT_IN_POINTER(source.v1)));
+ source.v2 = GET_INT_FROM_POINTER(BLI_ghash_lookup(vertHash, SET_INT_IN_POINTER(source.v2)));
+
+ DM_copy_edge_data(dm, result, oldIndex, newIndex, 1);
+ *dest = source;
+ }
+ BLI_ghashIterator_free(hashIter);
+
+ /* faces */
+ for ( hashIter = BLI_ghashIterator_new(faceHash);
+ !BLI_ghashIterator_isDone(hashIter);
+ BLI_ghashIterator_step(hashIter) )
+ {
+ MFace source;
+ MFace *dest;
+ int oldIndex = GET_INT_FROM_POINTER(BLI_ghashIterator_getKey(hashIter));
+ int newIndex = GET_INT_FROM_POINTER(BLI_ghashIterator_getValue(hashIter));
+ int orig_v4;
+
+ dm->getFace(dm, oldIndex, &source);
+ dest = CDDM_get_face(result, newIndex);
+
+ orig_v4 = source.v4;
+
+ source.v1 = GET_INT_FROM_POINTER(BLI_ghash_lookup(vertHash, SET_INT_IN_POINTER(source.v1)));
+ source.v2 = GET_INT_FROM_POINTER(BLI_ghash_lookup(vertHash, SET_INT_IN_POINTER(source.v2)));
+ source.v3 = GET_INT_FROM_POINTER(BLI_ghash_lookup(vertHash, SET_INT_IN_POINTER(source.v3)));
+ if (source.v4)
+ source.v4 = GET_INT_FROM_POINTER(BLI_ghash_lookup(vertHash, SET_INT_IN_POINTER(source.v4)));
+
+ DM_copy_face_data(dm, result, oldIndex, newIndex, 1);
+ *dest = source;
+
+ test_index_face(dest, &result->faceData, newIndex, (orig_v4 ? 4 : 3));
+ }
+ BLI_ghashIterator_free(hashIter);
+
+ /* recalculate normals */
+ CDDM_calc_normals(result);
+
+ /* free hashes */
+ BLI_ghash_free(vertHash, NULL, NULL);
+ BLI_ghash_free(edgeHash, NULL, NULL);
+ BLI_ghash_free(faceHash, NULL, NULL);
+
+ /* return the new mesh */
+ return result;
+}
+
/* Array */
/* Array modifier: duplicates the object multiple times along an axis
*/
@@ -791,12 +1151,18 @@ static DerivedMesh *arrayModifier_doArray(ArrayModifierData *amd,
if(amd->fit_type == MOD_ARR_FITCURVE && amd->curve_ob) {
Curve *cu = amd->curve_ob->data;
if(cu) {
+ float tmp_mat[3][3];
+ float scale;
+
+ object_to_mat3(amd->curve_ob, tmp_mat);
+ scale = Mat3ToScalef(tmp_mat);
+
if(!cu->path) {
cu->flag |= CU_PATH; // needed for path & bevlist
makeDispListCurveTypes(amd->curve_ob, 0);
}
if(cu->path)
- length = cu->path->totdist;
+ length = scale*cu->path->totdist;
}
}
@@ -1773,6 +2139,8 @@ typedef struct SmoothMesh {
DerivedMesh *dm;
float threshold; /* the cosine of the smoothing angle */
int flags;
+ MemArena *arena;
+ ListBase propagatestack, reusestack;
} SmoothMesh;
static SmoothVert *smoothvert_copy(SmoothVert *vert, SmoothMesh *mesh)
@@ -1855,6 +2223,9 @@ static void smoothmesh_free(SmoothMesh *mesh)
for(i = 0; i < mesh->num_edges; ++i)
BLI_linklist_free(mesh->edges[i].faces, NULL);
+
+ if(mesh->arena)
+ BLI_memarena_free(mesh->arena);
MEM_freeN(mesh->verts);
MEM_freeN(mesh->edges);
@@ -2506,6 +2877,49 @@ static void split_single_vert(SmoothVert *vert, SmoothFace *face,
face_replace_vert(face, &repdata);
}
+typedef struct PropagateEdge {
+ struct PropagateEdge *next, *prev;
+ SmoothEdge *edge;
+ SmoothVert *vert;
+} PropagateEdge;
+
+static void push_propagate_stack(SmoothEdge *edge, SmoothVert *vert, SmoothMesh *mesh)
+{
+ PropagateEdge *pedge = mesh->reusestack.first;
+
+ if(pedge) {
+ BLI_remlink(&mesh->reusestack, pedge);
+ }
+ else {
+ if(!mesh->arena) {
+ mesh->arena = BLI_memarena_new(BLI_MEMARENA_STD_BUFSIZE);
+ BLI_memarena_use_calloc(mesh->arena);
+ }
+
+ pedge = BLI_memarena_alloc(mesh->arena, sizeof(PropagateEdge));
+ }
+
+ pedge->edge = edge;
+ pedge->vert = vert;
+ BLI_addhead(&mesh->propagatestack, pedge);
+}
+
+static void pop_propagate_stack(SmoothEdge **edge, SmoothVert **vert, SmoothMesh *mesh)
+{
+ PropagateEdge *pedge = mesh->propagatestack.first;
+
+ if(pedge) {
+ *edge = pedge->edge;
+ *vert = pedge->vert;
+ BLI_remlink(&mesh->propagatestack, pedge);
+ BLI_addhead(&mesh->reusestack, pedge);
+ }
+ else {
+ *edge = NULL;
+ *vert = NULL;
+ }
+}
+
static void split_edge(SmoothEdge *edge, SmoothVert *vert, SmoothMesh *mesh);
static void propagate_split(SmoothEdge *edge, SmoothVert *vert,
@@ -2583,7 +2997,7 @@ static void split_edge(SmoothEdge *edge, SmoothVert *vert, SmoothMesh *mesh)
if(!edge2) {
/* didn't find a sharp or loose edge, so try the other vert */
vert2 = other_vert(edge, vert);
- propagate_split(edge, vert2, mesh);
+ push_propagate_stack(edge, vert2, mesh);
} else if(!edge_is_loose(edge2)) {
/* edge2 is not loose, so it must be sharp */
SmoothEdge *copy_edge = smoothedge_copy(edge, mesh);
@@ -2612,11 +3026,11 @@ static void split_edge(SmoothEdge *edge, SmoothVert *vert, SmoothMesh *mesh)
/* all copying and replacing is done; the mesh should be consistent.
* now propagate the split to the vertices at either end
*/
- propagate_split(copy_edge, other_vert(copy_edge, vert2), mesh);
- propagate_split(copy_edge2, other_vert(copy_edge2, vert2), mesh);
+ push_propagate_stack(copy_edge, other_vert(copy_edge, vert2), mesh);
+ push_propagate_stack(copy_edge2, other_vert(copy_edge2, vert2), mesh);
if(smoothedge_has_vert(edge, vert))
- propagate_split(edge, vert, mesh);
+ push_propagate_stack(edge, vert, mesh);
} else {
/* edge2 is loose */
SmoothEdge *copy_edge = smoothedge_copy(edge, mesh);
@@ -2639,10 +3053,10 @@ static void split_edge(SmoothEdge *edge, SmoothVert *vert, SmoothMesh *mesh)
/* copying and replacing is done; the mesh should be consistent.
* now propagate the split to the vertex at the other end
*/
- propagate_split(copy_edge, other_vert(copy_edge, vert2), mesh);
+ push_propagate_stack(copy_edge, other_vert(copy_edge, vert2), mesh);
if(smoothedge_has_vert(edge, vert))
- propagate_split(edge, vert, mesh);
+ push_propagate_stack(edge, vert, mesh);
}
BLI_linklist_free(visited_faces, NULL);
@@ -2714,6 +3128,7 @@ static void tag_and_count_extra_edges(SmoothMesh *mesh, float split_angle,
static void split_sharp_edges(SmoothMesh *mesh, float split_angle, int flags)
{
+ SmoothVert *vert;
int i;
/* if normal1 dot normal2 < threshold, angle is greater, so split */
/* FIXME not sure if this always works */
@@ -2726,10 +3141,16 @@ static void split_sharp_edges(SmoothMesh *mesh, float split_angle, int flags)
for(i = 0; i < mesh->num_edges; i++) {
SmoothEdge *edge = &mesh->edges[i];
- if(edge_is_sharp(edge, flags, mesh->threshold))
+ if(edge_is_sharp(edge, flags, mesh->threshold)) {
split_edge(edge, edge->verts[0], mesh);
- }
+ do {
+ pop_propagate_stack(&edge, &vert, mesh);
+ if(edge && smoothedge_has_vert(edge, vert))
+ propagate_split(edge, vert, mesh);
+ } while(edge);
+ }
+ }
}
static int count_bridge_verts(SmoothMesh *mesh)
@@ -5285,6 +5706,11 @@ static void softbodyModifier_deformVerts(
sbObjectStep(ob, (float)G.scene->r.cfra, vertexCos, numVerts);
}
+static int softbodyModifier_dependsOnTime(ModifierData *md)
+{
+ return 1;
+}
+
/* Cloth */
@@ -5493,7 +5919,7 @@ static void collisionModifier_deformVerts(
numverts = dm->getNumVerts ( dm );
- if(current_time > collmd->time)
+ if((current_time > collmd->time)|| (BKE_ptcache_get_continue_physics()))
{
// check if mesh has changed
if(collmd->x && (numverts != collmd->numverts))
@@ -6120,22 +6546,6 @@ CustomDataMask explodeModifier_requiredDataMask(ModifierData *md)
return dataMask;
}
-/* this should really be put somewhere permanently */
-static float vert_weight(MDeformVert *dvert, int group)
-{
- MDeformWeight *dw;
- int i;
-
- if(dvert) {
- dw= dvert->dw;
- for(i= dvert->totweight; i>0; i--, dw++) {
- if(dw->def_nr == group) return dw->weight;
- if(i==1) break; /*otherwise dw will point to somewhere it shouldn't*/
- }
- }
- return 0.0;
-}
-
static void explodeModifier_createFacepa(ExplodeModifierData *emd,
ParticleSystemModifierData *psmd,
Object *ob, DerivedMesh *dm)
@@ -6179,7 +6589,7 @@ static void explodeModifier_createFacepa(ExplodeModifierData *emd,
for(i=0; i<totvert; i++){
val = BLI_frand();
val = (1.0f-emd->protect)*val + emd->protect*0.5f;
- if(val < vert_weight(dvert+i,emd->vgroup-1))
+ if(val < deformvert_get_weight(dvert+i,emd->vgroup-1))
vertpa[i] = -1;
}
}
@@ -6188,7 +6598,7 @@ static void explodeModifier_createFacepa(ExplodeModifierData *emd,
/* make tree of emitter locations */
tree=BLI_kdtree_new(totpart);
for(p=0,pa=psys->particles; p<totpart; p++,pa++){
- psys_particle_on_dm(ob,psmd->dm,psys->part->from,pa->num,pa->num_dmcache,pa->fuv,pa->foffset,co,0,0,0,0,0);
+ psys_particle_on_dm(psmd->dm,psys->part->from,pa->num,pa->num_dmcache,pa->fuv,pa->foffset,co,0,0,0,0,0);
BLI_kdtree_insert(tree, p, co, NULL);
}
BLI_kdtree_balance(tree);
@@ -6708,7 +7118,6 @@ static DerivedMesh * explodeModifier_explodeMesh(ExplodeModifierData *emd,
{
DerivedMesh *explode, *dm=to_explode;
MFace *mf=0;
- MVert *dupvert=0;
ParticleSettings *part=psmd->psys->part;
ParticleData *pa=NULL, *pars=psmd->psys->particles;
ParticleKey state;
@@ -6763,7 +7172,7 @@ static DerivedMesh * explodeModifier_explodeMesh(ExplodeModifierData *emd,
/* the final duplicated vertices */
explode= CDDM_from_template(dm, totdup, 0,totface);
- dupvert= CDDM_get_verts(explode);
+ /*dupvert= CDDM_get_verts(explode);*/
/* getting back to object space */
Mat4Invert(imat,ob->obmat);
@@ -6792,7 +7201,7 @@ static DerivedMesh * explodeModifier_explodeMesh(ExplodeModifierData *emd,
pa= pars+i;
/* get particle state */
- psys_particle_on_emitter(ob, psmd,part->from,pa->num,-1,pa->fuv,pa->foffset,loc0,nor,0,0,0,0);
+ psys_particle_on_emitter(psmd,part->from,pa->num,-1,pa->fuv,pa->foffset,loc0,nor,0,0,0,0);
Mat4MulVecfl(ob->obmat,loc0);
state.time=cfra;
@@ -6924,6 +7333,93 @@ static DerivedMesh * explodeModifier_applyModifier(
}
return derivedData;
}
+
+/* Fluidsim */
+static void fluidsimModifier_initData(ModifierData *md)
+{
+ FluidsimModifierData *fluidmd= (FluidsimModifierData*) md;
+
+ fluidsim_init(fluidmd);
+}
+static void fluidsimModifier_freeData(ModifierData *md)
+{
+ FluidsimModifierData *fluidmd= (FluidsimModifierData*) md;
+
+ fluidsim_free(fluidmd);
+}
+
+static void fluidsimModifier_copyData(ModifierData *md, ModifierData *target)
+{
+ FluidsimModifierData *fluidmd= (FluidsimModifierData*) md;
+ FluidsimModifierData *tfluidmd= (FluidsimModifierData*) target;
+
+ if(tfluidmd->fss)
+ MEM_freeN(tfluidmd->fss);
+
+ tfluidmd->fss = MEM_dupallocN(fluidmd->fss);
+}
+
+static DerivedMesh * fluidsimModifier_applyModifier(
+ ModifierData *md, Object *ob, DerivedMesh *derivedData,
+ int useRenderParams, int isFinalCalc)
+{
+ FluidsimModifierData *fluidmd= (FluidsimModifierData*) md;
+ DerivedMesh *result = NULL;
+
+ /* check for alloc failing */
+ if(!fluidmd->fss)
+ {
+ fluidsimModifier_initData(md);
+
+ if(!fluidmd->fss)
+ return derivedData;
+ }
+
+ result = fluidsimModifier_do(fluidmd, ob, derivedData, useRenderParams, isFinalCalc);
+
+ if(result)
+ {
+ return result;
+ }
+
+ return derivedData;
+}
+
+static void fluidsimModifier_updateDepgraph(
+ ModifierData *md, DagForest *forest,
+ Object *ob, DagNode *obNode)
+{
+ FluidsimModifierData *fluidmd= (FluidsimModifierData*) md;
+ Base *base;
+
+ if(fluidmd && fluidmd->fss)
+ {
+ if(fluidmd->fss->type == OB_FLUIDSIM_DOMAIN)
+ {
+ for(base = G.scene->base.first; base; base= base->next)
+ {
+ Object *ob1= base->object;
+ if(ob1 != ob)
+ {
+ FluidsimModifierData *fluidmdtmp = (FluidsimModifierData *)modifiers_findByType(ob1, eModifierType_Fluidsim);
+
+ // only put dependancies from NON-DOMAIN fluids in here
+ if(fluidmdtmp && fluidmdtmp->fss && (fluidmdtmp->fss->type!=OB_FLUIDSIM_DOMAIN))
+ {
+ DagNode *curNode = dag_get_node(forest, ob1);
+ dag_add_relation(forest, curNode, obNode, DAG_RL_DATA_DATA|DAG_RL_OB_DATA, "Fluidsim Object");
+ }
+ }
+ }
+ }
+ }
+}
+
+static int fluidsimModifier_dependsOnTime(ModifierData *md)
+{
+ return 1;
+}
+
/* MeshDeform */
static void meshdeformModifier_initData(ModifierData *md)
@@ -7236,6 +7732,229 @@ static void meshdeformModifier_deformVertsEM(
dm->release(dm);
}
+
+/* Shrinkwrap */
+
+static void shrinkwrapModifier_initData(ModifierData *md)
+{
+ ShrinkwrapModifierData *smd = (ShrinkwrapModifierData*) md;
+ smd->shrinkType = MOD_SHRINKWRAP_NEAREST_SURFACE;
+ smd->shrinkOpts = MOD_SHRINKWRAP_PROJECT_ALLOW_POS_DIR;
+ smd->keepDist = 0.0f;
+
+ smd->target = NULL;
+ smd->auxTarget = NULL;
+}
+
+static void shrinkwrapModifier_copyData(ModifierData *md, ModifierData *target)
+{
+ ShrinkwrapModifierData *smd = (ShrinkwrapModifierData*)md;
+ ShrinkwrapModifierData *tsmd = (ShrinkwrapModifierData*)target;
+
+ tsmd->target = smd->target;
+ tsmd->auxTarget = smd->auxTarget;
+
+ strcpy(tsmd->vgroup_name, smd->vgroup_name);
+
+ tsmd->keepDist = smd->keepDist;
+ tsmd->shrinkType= smd->shrinkType;
+ tsmd->shrinkOpts= smd->shrinkOpts;
+}
+
+CustomDataMask shrinkwrapModifier_requiredDataMask(ModifierData *md)
+{
+ ShrinkwrapModifierData *smd = (ShrinkwrapModifierData *)md;
+ CustomDataMask dataMask = 0;
+
+ /* ask for vertexgroups if we need them */
+ if(smd->vgroup_name[0])
+ dataMask |= (1 << CD_MDEFORMVERT);
+
+ if(smd->shrinkType == MOD_SHRINKWRAP_PROJECT
+ && smd->projAxis == MOD_SHRINKWRAP_PROJECT_OVER_NORMAL)
+ dataMask |= (1 << CD_MVERT);
+
+ return dataMask;
+}
+
+static int shrinkwrapModifier_isDisabled(ModifierData *md)
+{
+ ShrinkwrapModifierData *smd = (ShrinkwrapModifierData*) md;
+ return !smd->target;
+}
+
+
+static void shrinkwrapModifier_foreachObjectLink(ModifierData *md, Object *ob, ObjectWalkFunc walk, void *userData)
+{
+ ShrinkwrapModifierData *smd = (ShrinkwrapModifierData*) md;
+
+ walk(userData, ob, &smd->target);
+ walk(userData, ob, &smd->auxTarget);
+}
+
+static void shrinkwrapModifier_deformVerts(ModifierData *md, Object *ob, DerivedMesh *derivedData, float (*vertexCos)[3], int numVerts)
+{
+ DerivedMesh *dm = NULL;
+ CustomDataMask dataMask = shrinkwrapModifier_requiredDataMask(md);
+
+ /* We implement requiredDataMask but thats not really usefull since mesh_calc_modifiers pass a NULL derivedData or without the modified vertexs applied */
+ if(dataMask)
+ {
+ if(derivedData) dm = CDDM_copy(derivedData);
+ else if(ob->type==OB_MESH) dm = CDDM_from_mesh(ob->data, ob);
+ else return;
+
+ if(dataMask & CD_MVERT)
+ {
+ CDDM_apply_vert_coords(dm, vertexCos);
+ CDDM_calc_normals(dm);
+ }
+ }
+
+ shrinkwrapModifier_deform((ShrinkwrapModifierData*)md, ob, dm, vertexCos, numVerts);
+
+ if(dm)
+ dm->release(dm);
+}
+
+static void shrinkwrapModifier_deformVertsEM(ModifierData *md, Object *ob, EditMesh *editData, DerivedMesh *derivedData, float (*vertexCos)[3], int numVerts)
+{
+ DerivedMesh *dm = NULL;
+ CustomDataMask dataMask = shrinkwrapModifier_requiredDataMask(md);
+
+ if(dataMask)
+ {
+ if(derivedData) dm = CDDM_copy(derivedData);
+ else if(ob->type==OB_MESH) dm = CDDM_from_editmesh(editData, ob->data);
+ else return;
+
+ if(dataMask & CD_MVERT)
+ {
+ CDDM_apply_vert_coords(dm, vertexCos);
+ CDDM_calc_normals(dm);
+ }
+ }
+
+ shrinkwrapModifier_deform((ShrinkwrapModifierData*)md, ob, dm, vertexCos, numVerts);
+
+ if(dm)
+ dm->release(dm);
+}
+
+static void shrinkwrapModifier_updateDepgraph(ModifierData *md, DagForest *forest, Object *ob, DagNode *obNode)
+{
+ ShrinkwrapModifierData *smd = (ShrinkwrapModifierData*) md;
+
+ if (smd->target)
+ dag_add_relation(forest, dag_get_node(forest, smd->target), obNode, DAG_RL_OB_DATA | DAG_RL_DATA_DATA, "Shrinkwrap Modifier");
+
+ if (smd->auxTarget)
+ dag_add_relation(forest, dag_get_node(forest, smd->auxTarget), obNode, DAG_RL_OB_DATA | DAG_RL_DATA_DATA, "Shrinkwrap Modifier");
+}
+
+/* SimpleDeform */
+static void simpledeformModifier_initData(ModifierData *md)
+{
+ SimpleDeformModifierData *smd = (SimpleDeformModifierData*) md;
+
+ smd->mode = MOD_SIMPLEDEFORM_MODE_TWIST;
+ smd->axis = 0;
+
+ smd->origin = NULL;
+ smd->factor = 0.35f;
+ smd->limit[0] = 0.0f;
+ smd->limit[1] = 1.0f;
+}
+
+static void simpledeformModifier_copyData(ModifierData *md, ModifierData *target)
+{
+ SimpleDeformModifierData *smd = (SimpleDeformModifierData*)md;
+ SimpleDeformModifierData *tsmd = (SimpleDeformModifierData*)target;
+
+ tsmd->mode = smd->mode;
+ tsmd->axis = smd->axis;
+ tsmd->origin= smd->origin;
+ tsmd->factor= smd->factor;
+ memcpy(tsmd->limit, smd->limit, sizeof(tsmd->limit));
+}
+
+static CustomDataMask simpledeformModifier_requiredDataMask(ModifierData *md)
+{
+ SimpleDeformModifierData *smd = (SimpleDeformModifierData *)md;
+ CustomDataMask dataMask = 0;
+
+ /* ask for vertexgroups if we need them */
+ if(smd->vgroup_name[0])
+ dataMask |= (1 << CD_MDEFORMVERT);
+
+ return dataMask;
+}
+
+static void simpledeformModifier_foreachObjectLink(ModifierData *md, Object *ob, void (*walk)(void *userData, Object *ob, Object **obpoin), void *userData)
+{
+ SimpleDeformModifierData *smd = (SimpleDeformModifierData*)md;
+ walk(userData, ob, &smd->origin);
+}
+
+static void simpledeformModifier_updateDepgraph(ModifierData *md, DagForest *forest, Object *ob, DagNode *obNode)
+{
+ SimpleDeformModifierData *smd = (SimpleDeformModifierData*)md;
+
+ if (smd->origin)
+ dag_add_relation(forest, dag_get_node(forest, smd->origin), obNode, DAG_RL_OB_DATA, "SimpleDeform Modifier");
+}
+
+static void simpledeformModifier_deformVerts(ModifierData *md, Object *ob, DerivedMesh *derivedData, float (*vertexCos)[3], int numVerts)
+{
+ DerivedMesh *dm = NULL;
+ CustomDataMask dataMask = simpledeformModifier_requiredDataMask(md);
+
+ /* We implement requiredDataMask but thats not really usefull since mesh_calc_modifiers pass a NULL derivedData or without the modified vertexs applied */
+ if(dataMask)
+ {
+ if(derivedData) dm = CDDM_copy(derivedData);
+ else if(ob->type==OB_MESH) dm = CDDM_from_mesh(ob->data, ob);
+ else return;
+
+ if(dataMask & CD_MVERT)
+ {
+ CDDM_apply_vert_coords(dm, vertexCos);
+ CDDM_calc_normals(dm);
+ }
+ }
+
+ SimpleDeformModifier_do((SimpleDeformModifierData*)md, ob, dm, vertexCos, numVerts);
+
+ if(dm)
+ dm->release(dm);
+
+}
+
+static void simpledeformModifier_deformVertsEM(ModifierData *md, Object *ob, EditMesh *editData, DerivedMesh *derivedData, float (*vertexCos)[3], int numVerts)
+{
+ DerivedMesh *dm = NULL;
+ CustomDataMask dataMask = simpledeformModifier_requiredDataMask(md);
+
+ /* We implement requiredDataMask but thats not really usefull since mesh_calc_modifiers pass a NULL derivedData or without the modified vertexs applied */
+ if(dataMask)
+ {
+ if(derivedData) dm = CDDM_copy(derivedData);
+ else if(ob->type==OB_MESH) dm = CDDM_from_editmesh(editData, ob->data);
+ else return;
+
+ if(dataMask & CD_MVERT)
+ {
+ CDDM_apply_vert_coords(dm, vertexCos);
+ CDDM_calc_normals(dm);
+ }
+ }
+
+ SimpleDeformModifier_do((SimpleDeformModifierData*)md, ob, dm, vertexCos, numVerts);
+
+ if(dm)
+ dm->release(dm);
+}
+
/***/
static ModifierTypeInfo typeArr[NUM_MODIFIER_TYPES];
@@ -7314,6 +8033,15 @@ ModifierTypeInfo *modifierType_getInfo(ModifierType type)
mti->copyData = buildModifier_copyData;
mti->dependsOnTime = buildModifier_dependsOnTime;
mti->applyModifier = buildModifier_applyModifier;
+
+ mti = INIT_TYPE(Mask);
+ mti->type = eModifierTypeType_Nonconstructive;
+ mti->flags = eModifierTypeFlag_AcceptsMesh;
+ mti->copyData = maskModifier_copyData;
+ mti->requiredDataMask= maskModifier_requiredDataMask;
+ mti->foreachObjectLink = maskModifier_foreachObjectLink;
+ mti->updateDepgraph = maskModifier_updateDepgraph;
+ mti->applyModifier = maskModifier_applyModifier;
mti = INIT_TYPE(Array);
mti->type = eModifierTypeType_Constructive;
@@ -7468,6 +8196,7 @@ ModifierTypeInfo *modifierType_getInfo(ModifierType type)
mti->flags = eModifierTypeFlag_AcceptsCVs
| eModifierTypeFlag_RequiresOriginalData;
mti->deformVerts = softbodyModifier_deformVerts;
+ mti->dependsOnTime = softbodyModifier_dependsOnTime;
mti = INIT_TYPE(Cloth);
mti->type = eModifierTypeType_Nonconstructive;
@@ -7556,6 +8285,46 @@ ModifierTypeInfo *modifierType_getInfo(ModifierType type)
mti->dependsOnTime = explodeModifier_dependsOnTime;
mti->requiredDataMask = explodeModifier_requiredDataMask;
mti->applyModifier = explodeModifier_applyModifier;
+
+ mti = INIT_TYPE(Fluidsim);
+ mti->type = eModifierTypeType_Nonconstructive
+ | eModifierTypeFlag_RequiresOriginalData;
+ mti->flags = eModifierTypeFlag_AcceptsMesh;
+ mti->initData = fluidsimModifier_initData;
+ mti->freeData = fluidsimModifier_freeData;
+ mti->copyData = fluidsimModifier_copyData;
+ mti->dependsOnTime = fluidsimModifier_dependsOnTime;
+ mti->applyModifier = fluidsimModifier_applyModifier;
+ mti->updateDepgraph = fluidsimModifier_updateDepgraph;
+
+ mti = INIT_TYPE(Shrinkwrap);
+ mti->type = eModifierTypeType_OnlyDeform;
+ mti->flags = eModifierTypeFlag_AcceptsMesh
+ | eModifierTypeFlag_AcceptsCVs
+ | eModifierTypeFlag_SupportsEditmode
+ | eModifierTypeFlag_EnableInEditmode;
+ mti->initData = shrinkwrapModifier_initData;
+ mti->copyData = shrinkwrapModifier_copyData;
+ mti->requiredDataMask = shrinkwrapModifier_requiredDataMask;
+ mti->isDisabled = shrinkwrapModifier_isDisabled;
+ mti->foreachObjectLink = shrinkwrapModifier_foreachObjectLink;
+ mti->deformVerts = shrinkwrapModifier_deformVerts;
+ mti->deformVertsEM = shrinkwrapModifier_deformVertsEM;
+ mti->updateDepgraph = shrinkwrapModifier_updateDepgraph;
+
+ mti = INIT_TYPE(SimpleDeform);
+ mti->type = eModifierTypeType_OnlyDeform;
+ mti->flags = eModifierTypeFlag_AcceptsMesh
+ | eModifierTypeFlag_AcceptsCVs
+ | eModifierTypeFlag_SupportsEditmode
+ | eModifierTypeFlag_EnableInEditmode;
+ mti->initData = simpledeformModifier_initData;
+ mti->copyData = simpledeformModifier_copyData;
+ mti->requiredDataMask = simpledeformModifier_requiredDataMask;
+ mti->deformVerts = simpledeformModifier_deformVerts;
+ mti->deformVertsEM = simpledeformModifier_deformVertsEM;
+ mti->foreachObjectLink = simpledeformModifier_foreachObjectLink;
+ mti->updateDepgraph = simpledeformModifier_updateDepgraph;
typeArrInit = 0;
#undef INIT_TYPE
@@ -7979,3 +8748,4 @@ void modifier_freeTemporaryData(ModifierData *md)
}
+
diff --git a/source/blender/blenkernel/intern/multires.c b/source/blender/blenkernel/intern/multires.c
index 9bc7fe28f44..259a4e0de04 100644
--- a/source/blender/blenkernel/intern/multires.c
+++ b/source/blender/blenkernel/intern/multires.c
@@ -208,7 +208,7 @@ static void multires_get_edge(MultiresEdge *e, EditEdge *eed, MEdge *m, short *f
}
}
-static void multires_get_face(MultiresFace *f, EditFace *efa, MFace *m)
+static void multires_get_face(MultiresFace *f, CustomData *fdata, int findex, EditFace *efa, MFace *m)
{
if(efa) {
MFace tmp;
@@ -218,7 +218,7 @@ static void multires_get_face(MultiresFace *f, EditFace *efa, MFace *m)
tmp.v3= efa->v3->tmp.l;
tmp.v4= 0;
if(efa->v4) tmp.v4= efa->v4->tmp.l;
- test_index_face(&tmp, NULL, 0, efa->v4?4:3);
+ test_index_face(&tmp, fdata, findex, efa->v4?4:3);
for(j=0; j<4; ++j) f->v[j]= (&tmp.v1)[j];
/* Flags */
@@ -388,7 +388,7 @@ void multires_create(Object *ob, Mesh *me)
&me->mr->fdata, CD_MTFACE);
if(em) efa= em->faces.first;
for(i=0; i<lvl->totface; ++i) {
- multires_get_face(&lvl->faces[i], efa, &me->mface[i]);
+ multires_get_face(&lvl->faces[i], &me->mr->fdata, i, efa, &me->mface[i]);
if(em) efa= efa->next;
}
@@ -765,7 +765,7 @@ static void multires_update_faces(Mesh *me, EditMesh *em)
if(em) efa= em->faces.first;
for(i=0; i<cr_lvl->totface; ++i) {
MultiresFace mftmp;
- multires_get_face(&mftmp, efa, &me->mface[i]);
+ multires_get_face(&mftmp, &me->mr->fdata, i, efa, &me->mface[i]);
if(cr_lvl->faces[i].flag != mftmp.flag)
cr_flag_damaged[i]= 1;
if(cr_lvl->faces[i].mat_nr != mftmp.mat_nr)
diff --git a/source/blender/blenkernel/intern/node.c b/source/blender/blenkernel/intern/node.c
index 4e36df35a14..94a21cdd5df 100644
--- a/source/blender/blenkernel/intern/node.c
+++ b/source/blender/blenkernel/intern/node.c
@@ -68,6 +68,9 @@
#include "SHD_node.h"
+#include "GPU_extensions.h"
+#include "GPU_material.h"
+
static ListBase empty_list = {NULL, NULL};
ListBase node_all_composit = {NULL, NULL};
ListBase node_all_shaders = {NULL, NULL};
@@ -2352,6 +2355,117 @@ void ntreeCompositExecTree(bNodeTree *ntree, RenderData *rd, int do_preview)
ntreeEndExecTree(ntree);
}
+/* GPU material from shader nodes */
+
+static void gpu_from_node_stack(ListBase *sockets, bNodeStack **ns, GPUNodeStack *gs)
+{
+ bNodeSocket *sock;
+ int i;
+
+ for (sock=sockets->first, i=0; sock; sock=sock->next, i++) {
+ memset(&gs[i], 0, sizeof(gs[i]));
+
+ QUATCOPY(gs[i].vec, ns[i]->vec);
+ gs[i].link= ns[i]->data;
+
+ if (sock->type == SOCK_VALUE)
+ gs[i].type= GPU_FLOAT;
+ else if (sock->type == SOCK_VECTOR)
+ gs[i].type= GPU_VEC3;
+ else if (sock->type == SOCK_RGBA)
+ gs[i].type= GPU_VEC4;
+ else
+ gs[i].type= GPU_NONE;
+
+ gs[i].name = "";
+ gs[i].hasinput= ns[i]->hasinput && ns[i]->data;
+ gs[i].hasoutput= ns[i]->hasinput && ns[i]->data;
+ gs[i].sockettype= ns[i]->sockettype;
+ }
+
+ gs[i].type= GPU_NONE;
+}
+
+static void data_from_gpu_stack(ListBase *sockets, bNodeStack **ns, GPUNodeStack *gs)
+{
+ bNodeSocket *sock;
+ int i;
+
+ for (sock=sockets->first, i=0; sock; sock=sock->next, i++) {
+ ns[i]->data= gs[i].link;
+ ns[i]->hasinput= gs[i].hasinput && gs[i].link;
+ ns[i]->hasoutput= gs[i].hasoutput;
+ ns[i]->sockettype= gs[i].sockettype;
+ }
+}
+
+static void gpu_node_group_execute(bNodeStack *stack, GPUMaterial *mat, bNode *gnode, bNodeStack **in, bNodeStack **out)
+{
+ bNode *node;
+ bNodeTree *ntree= (bNodeTree *)gnode->id;
+ bNodeStack *nsin[MAX_SOCKET]; /* arbitrary... watch this */
+ bNodeStack *nsout[MAX_SOCKET]; /* arbitrary... watch this */
+ GPUNodeStack gpuin[MAX_SOCKET+1], gpuout[MAX_SOCKET+1];
+ int doit = 0;
+
+ if(ntree==NULL) return;
+
+ stack+= gnode->stack_index;
+
+ for(node= ntree->nodes.first; node; node= node->next) {
+ if(node->typeinfo->gpufunc) {
+ group_node_get_stack(node, stack, nsin, nsout, in, out);
+
+ doit = 0;
+
+ /* for groups, only execute outputs for edited group */
+ if(node->typeinfo->nclass==NODE_CLASS_OUTPUT) {
+ if(gnode->flag & NODE_GROUP_EDIT)
+ if(node->flag & NODE_DO_OUTPUT)
+ doit = 1;
+ }
+ else
+ doit = 1;
+
+ if(doit) {
+ gpu_from_node_stack(&node->inputs, nsin, gpuin);
+ gpu_from_node_stack(&node->outputs, nsout, gpuout);
+ if(node->typeinfo->gpufunc(mat, node, gpuin, gpuout))
+ data_from_gpu_stack(&node->outputs, nsout, gpuout);
+ }
+ }
+ }
+}
+
+void ntreeGPUMaterialNodes(bNodeTree *ntree, GPUMaterial *mat)
+{
+ bNode *node;
+ bNodeStack *stack;
+ bNodeStack *nsin[MAX_SOCKET]; /* arbitrary... watch this */
+ bNodeStack *nsout[MAX_SOCKET]; /* arbitrary... watch this */
+ GPUNodeStack gpuin[MAX_SOCKET+1], gpuout[MAX_SOCKET+1];
+
+ if((ntree->init & NTREE_EXEC_INIT)==0)
+ ntreeBeginExecTree(ntree);
+
+ stack= ntree->stack;
+
+ for(node= ntree->nodes.first; node; node= node->next) {
+ if(node->typeinfo->gpufunc) {
+ node_get_stack(node, stack, nsin, nsout);
+ gpu_from_node_stack(&node->inputs, nsin, gpuin);
+ gpu_from_node_stack(&node->outputs, nsout, gpuout);
+ if(node->typeinfo->gpufunc(mat, node, gpuin, gpuout))
+ data_from_gpu_stack(&node->outputs, nsout, gpuout);
+ }
+ else if(node->type==NODE_GROUP && node->id) {
+ node_get_stack(node, stack, nsin, nsout);
+ gpu_node_group_execute(stack, mat, node, nsin, nsout);
+ }
+ }
+
+ ntreeEndExecTree(ntree);
+}
/* **************** call to switch lamploop for material node ************ */
diff --git a/source/blender/blenkernel/intern/object.c b/source/blender/blenkernel/intern/object.c
index 7b36e46d45e..b6f6820ca73 100644
--- a/source/blender/blenkernel/intern/object.c
+++ b/source/blender/blenkernel/intern/object.c
@@ -70,6 +70,7 @@
#include "BKE_armature.h"
#include "BKE_action.h"
+#include "BKE_bullet.h"
#include "BKE_colortools.h"
#include "BKE_deform.h"
#include "BKE_DerivedMesh.h"
@@ -112,6 +113,8 @@
#include "BPY_extern.h"
+#include "GPU_material.h"
+
#include "blendef.h"
/* Local function protos */
@@ -177,6 +180,14 @@ void object_free_softbody(Object *ob)
}
}
+void object_free_bulletsoftbody(Object *ob)
+{
+ if(ob->bsoft) {
+ bsbFree(ob->bsoft);
+ ob->bsoft= NULL;
+ }
+}
+
void object_free_modifiers(Object *ob)
{
while (ob->modifiers.first) {
@@ -267,7 +278,8 @@ void free_object(Object *ob)
MEM_freeN(ob->pd);
}
if(ob->soft) sbFree(ob->soft);
- if(ob->fluidsimSettings) fluidsimSettingsFree(ob->fluidsimSettings);
+ if(ob->bsoft) bsbFree(ob->bsoft);
+ if(ob->gpulamp.first) GPU_lamp_free(ob);
}
static void unlink_object__unlinkModifierLinks(void *userData, Object *ob, Object **obpoin)
@@ -694,9 +706,11 @@ float dof_camera(Object *ob)
if (cam->dof_ob) {
/* too simple, better to return the distance on the view axis only
* return VecLenf(ob->obmat[3], cam->dof_ob->obmat[3]); */
+ float mat[4][4], obmat[4][4];
- float mat[4][4];
- Mat4Invert(ob->imat, ob->obmat);
+ Mat4CpyMat4(obmat, ob->obmat);
+ Mat4Ortho(obmat);
+ Mat4Invert(ob->imat, obmat);
Mat4MulMat4(mat, cam->dof_ob->obmat, ob->imat);
return fabs(mat[3][2]);
}
@@ -743,6 +757,11 @@ void *add_lamp(char *name)
la->atm_extinction_factor = 1.0;
la->atm_distance_factor = 1.0;
la->sun_intensity = 1.0;
+ la->skyblendtype= MA_RAMP_ADD;
+ la->skyblendfac= 1.0f;
+ la->sky_colorspace= BLI_CS_CIE;
+ la->sky_exposure= 1.0f;
+
curvemapping_initialize(la->curfalloff);
return la;
}
@@ -918,7 +937,7 @@ Object *add_only_object(int type, char *name)
QuatOne(ob->dquat);
#endif
- ob->col[0]= ob->col[1]= ob->col[2]= 0.0;
+ ob->col[0]= ob->col[1]= ob->col[2]= 1.0;
ob->col[3]= 1.0;
ob->loc[0]= ob->loc[1]= ob->loc[2]= 0.0;
@@ -955,8 +974,9 @@ Object *add_only_object(int type, char *name)
ob->anisotropicFriction[0] = 1.0f;
ob->anisotropicFriction[1] = 1.0f;
ob->anisotropicFriction[2] = 1.0f;
- ob->gameflag= OB_PROP;
-
+ ob->gameflag= OB_PROP|OB_COLLISION;
+ ob->margin = 0.0;
+
/* NT fluid sim defaults */
ob->fluidsimFlag = 0;
ob->fluidsimSettings = NULL;
@@ -1039,6 +1059,17 @@ SoftBody *copy_softbody(SoftBody *sb)
return sbn;
}
+BulletSoftBody *copy_bulletsoftbody(BulletSoftBody *bsb)
+{
+ BulletSoftBody *bsbn;
+
+ if (bsb == NULL)
+ return NULL;
+ bsbn = MEM_dupallocN(bsb);
+ /* no pointer in this structure yet */
+ return bsbn;
+}
+
ParticleSystem *copy_particlesystem(ParticleSystem *psys)
{
ParticleSystem *psysn;
@@ -1174,7 +1205,9 @@ Object *copy_object(Object *ob)
BPY_copy_scriptlink(&ob->scriptlink);
+ obn->prop.first = obn->prop.last = NULL;
copy_properties(&obn->prop, &ob->prop);
+
copy_sensors(&obn->sensors, &ob->sensors);
copy_controllers(&obn->controllers, &ob->controllers);
copy_actuators(&obn->actuators, &ob->actuators);
@@ -1207,15 +1240,7 @@ Object *copy_object(Object *ob)
id_us_plus(&(obn->pd->tex->id));
}
obn->soft= copy_softbody(ob->soft);
-
- /* NT copy fluid sim setting memory */
- if(obn->fluidsimSettings) {
- obn->fluidsimSettings = fluidsimSettingsCopy(ob->fluidsimSettings);
- /* copying might fail... */
- if(obn->fluidsimSettings) {
- obn->fluidsimSettings->orgMesh = (Mesh *)obn->data;
- }
- }
+ obn->bsoft = copy_bulletsoftbody(ob->bsoft);
copy_object_particlesystems(obn, ob);
@@ -1226,6 +1251,7 @@ Object *copy_object(Object *ob)
obn->vnode = NULL;
#endif
+ obn->gpulamp.first = obn->gpulamp.last = NULL;
return obn;
}
@@ -1454,22 +1480,42 @@ float bsystem_time(Object *ob, float cfra, float ofs)
return cfra;
}
-void object_to_mat3(Object *ob, float mat[][3]) /* no parent */
+void object_scale_to_mat3(Object *ob, float mat[][3])
{
- float smat[3][3], vec[3];
- float rmat[3][3];
- /*float q1[4];*/
-
- /* size */
+ float vec[3];
if(ob->ipo) {
vec[0]= ob->size[0]+ob->dsize[0];
vec[1]= ob->size[1]+ob->dsize[1];
vec[2]= ob->size[2]+ob->dsize[2];
- SizeToMat3(vec, smat);
+ SizeToMat3(vec, mat);
}
else {
- SizeToMat3(ob->size, smat);
+ SizeToMat3(ob->size, mat);
}
+}
+
+void object_rot_to_mat3(Object *ob, float mat[][3])
+{
+ float vec[3];
+ if(ob->ipo) {
+ vec[0]= ob->rot[0]+ob->drot[0];
+ vec[1]= ob->rot[1]+ob->drot[1];
+ vec[2]= ob->rot[2]+ob->drot[2];
+ EulToMat3(vec, mat);
+ }
+ else {
+ EulToMat3(ob->rot, mat);
+ }
+}
+
+void object_to_mat3(Object *ob, float mat[][3]) /* no parent */
+{
+ float smat[3][3];
+ float rmat[3][3];
+ /*float q1[4];*/
+
+ /* size */
+ object_scale_to_mat3(ob, smat);
/* rot */
/* Quats arnt used yet */
@@ -1483,15 +1529,7 @@ void object_to_mat3(Object *ob, float mat[][3]) /* no parent */
}
}
else {*/
- if(ob->ipo) {
- vec[0]= ob->rot[0]+ob->drot[0];
- vec[1]= ob->rot[1]+ob->drot[1];
- vec[2]= ob->rot[2]+ob->drot[2];
- EulToMat3(vec, rmat);
- }
- else {
- EulToMat3(ob->rot, rmat);
- }
+ object_rot_to_mat3(ob, rmat);
/*}*/
Mat3MulMat3(mat, rmat, smat);
}
diff --git a/source/blender/blenkernel/intern/particle.c b/source/blender/blenkernel/intern/particle.c
index 643f90637ad..44ee5c236fa 100644
--- a/source/blender/blenkernel/intern/particle.c
+++ b/source/blender/blenkernel/intern/particle.c
@@ -46,6 +46,7 @@
#include "DNA_object_types.h"
#include "DNA_curve_types.h"
#include "DNA_key_types.h"
+#include "DNA_ipo_types.h"
#include "BLI_arithb.h"
#include "BLI_blenlib.h"
@@ -295,7 +296,7 @@ int psys_check_enabled(Object *ob, ParticleSystem *psys)
ParticleSystemModifierData *psmd;
Mesh *me;
- if(psys->flag & PSYS_DISABLED)
+ if(psys->flag & PSYS_DISABLED || psys->flag & PSYS_DELETE)
return 0;
if(ob->type == OB_MESH) {
@@ -320,8 +321,14 @@ int psys_check_enabled(Object *ob, ParticleSystem *psys)
/************************************************/
void psys_free_settings(ParticleSettings *part)
{
- if(part->pd)
+ if(part->pd) {
MEM_freeN(part->pd);
+ part->pd = NULL;
+ }
+ if(part->pd2) {
+ MEM_freeN(part->pd2);
+ part->pd2 = NULL;
+ }
}
void free_hair(ParticleSystem *psys, int softbody)
@@ -373,8 +380,11 @@ void psys_free_children(ParticleSystem *psys)
}
/* free everything */
void psys_free(Object *ob, ParticleSystem * psys)
-{
+{
if(psys){
+ int nr = 0;
+ ParticleSystem * tpsys;
+
if(ob->particlesystem.first == NULL && G.f & G_PARTICLEEDIT)
G.f &= ~G_PARTICLEEDIT;
@@ -400,6 +410,21 @@ void psys_free(Object *ob, ParticleSystem * psys)
if(psys->effectors.first)
psys_end_effectors(psys);
+
+ // check if we are last non-visible particle system
+ for(tpsys=ob->particlesystem.first; tpsys; tpsys=tpsys->next){
+ if(tpsys->part)
+ {
+ if(ELEM(tpsys->part->draw_as,PART_DRAW_OB,PART_DRAW_GR))
+ {
+ nr++;
+ break;
+ }
+ }
+ }
+ // clear do-not-draw-flag
+ if(!nr)
+ ob->transflag &= ~OB_DUPLIPARTS;
if(psys->part){
psys->part->id.us--;
@@ -411,7 +436,7 @@ void psys_free(Object *ob, ParticleSystem * psys)
if(psys->pointcache)
BKE_ptcache_free(psys->pointcache);
-
+
MEM_freeN(psys);
}
}
@@ -1092,8 +1117,8 @@ static void psys_origspace_to_w(OrigSpaceFace *osface, int quad, float *w, float
}
}
-/* find the derived mesh face for a particle, set the mf passed.
-This is slow, can be optimized but only for many lookups, return the face lookup index*/
+/* find the derived mesh face for a particle, set the mf passed. this is slow
+ * and can be optimized but only for many lookups. returns the face index. */
int psys_particle_dm_face_lookup(Object *ob, DerivedMesh *dm, int index, float *fw, struct LinkNode *node)
{
Mesh *me= (Mesh*)ob->data;
@@ -1161,168 +1186,142 @@ int psys_particle_dm_face_lookup(Object *ob, DerivedMesh *dm, int index, float *
return DMCACHE_NOTFOUND;
}
-/* interprets particle data to get a point on a mesh in object space */
-#define PARTICLE_ON_DM_ERROR \
- { if(vec) { vec[0]=vec[1]=vec[2]=0.0; } \
- if(nor) { nor[0]=nor[1]=0.0; nor[2]=1.0; } \
- if(orco) { orco[0]=orco[1]=orco[2]=0.0; } \
- if(ornor) { ornor[0]=ornor[1]=0.0; ornor[2]=1.0; } \
- if(utan) { utan[0]=utan[1]=utan[2]=0.0; } \
- if(vtan) { vtan[0]=vtan[1]=vtan[2]=0.0; } }
-
-void psys_particle_on_dm(Object *ob, DerivedMesh *dm, int from, int index, int index_dmcache, float *fw, float foffset, float *vec, float *nor, float *utan, float *vtan, float *orco, float *ornor)
+static int psys_map_index_on_dm(DerivedMesh *dm, int from, int index, int index_dmcache, float *fw, float foffset, int *mapindex, float *mapfw)
{
- float temp1[3];
- float (*orcodata)[3];
-
- if(index < 0) { /* 'no dm' error has happened! */
- PARTICLE_ON_DM_ERROR;
- return;
- }
- orcodata= dm->getVertDataArray(dm, CD_ORCO);
+ if(index < 0)
+ return 0;
if (dm->deformedOnly || index_dmcache == DMCACHE_ISCHILD) {
- /* this works for meshes with deform verts only - constructive modifiers wont work properly*/
+ /* for meshes that are either only defined or for child particles, the
+ * index and fw do not require any mapping, so we can directly use it */
if(from == PART_FROM_VERT) {
- if(index >= dm->getNumVerts(dm)) {
- PARTICLE_ON_DM_ERROR;
- return;
- }
-
- dm->getVertCo(dm,index,vec);
- if(nor){
- dm->getVertNo(dm,index,nor);
- Normalize(nor);
- }
- if(orco)
- VECCOPY(orco, orcodata[index])
- if(ornor) {
- dm->getVertNo(dm,index,nor);
- Normalize(nor);
- }
- }
- else { /* PART_FROM_FACE / PART_FROM_VOLUME */
- MFace *mface;
- MTFace *mtface=0;
- MVert *mvert;
- int uv_index;
-
- if(index >= dm->getNumFaces(dm)) {
- PARTICLE_ON_DM_ERROR;
- return;
- }
-
- mface=dm->getFaceData(dm,index,CD_MFACE);
- mvert=dm->getVertDataArray(dm,CD_MVERT);
- uv_index=CustomData_get_active_layer_index(&dm->faceData,CD_MTFACE);
+ if(index >= dm->getNumVerts(dm))
+ return 0;
- if(uv_index>=0){
- CustomDataLayer *layer=&dm->faceData.layers[uv_index];
- mtface= &((MTFace*)layer->data)[index];
- }
+ *mapindex = index;
+ }
+ else { /* FROM_FACE/FROM_VOLUME */
+ if(index >= dm->getNumFaces(dm))
+ return 0;
- if(from==PART_FROM_VOLUME){
- psys_interpolate_face(mvert,mface,mtface,orcodata,fw,vec,temp1,utan,vtan,orco,ornor);
- if(nor)
- VECCOPY(nor,temp1);
- Normalize(temp1);
- VecMulf(temp1,-foffset);
- VECADD(vec,vec,temp1);
- }
- else
- psys_interpolate_face(mvert,mface,mtface,orcodata,fw,vec,nor,utan,vtan,orco,ornor);
+ *mapindex = index;
+ QUATCOPY(mapfw, fw);
}
} else {
- /* Need to support constructive modifiers, this is a bit more tricky
- we need a customdata layer like UV's so we can position the particle */
-
- /* Only face supported at the moment */
- if(ELEM(from, PART_FROM_FACE, PART_FROM_VOLUME)) {
+ /* for other meshes that have been modified, we try to map the particle
+ * to their new location, which means a different index, and for faces
+ * also a new face interpolation weights */
+ if(from == PART_FROM_VERT) {
+ if (index_dmcache == DMCACHE_NOTFOUND || index_dmcache > dm->getNumVerts(dm))
+ return 0;
+
+ *mapindex = index_dmcache;
+ }
+ else { /* FROM_FACE/FROM_VOLUME */
/* find a face on the derived mesh that uses this face */
- Mesh *me= (Mesh*)ob->data;
- MVert *mvert;
MFace *mface;
- MTFace *mtface;
OrigSpaceFace *osface;
- int *origindex;
- float fw_mod[4];
- int i, totface;
-
- mvert= dm->getVertDataArray(dm,CD_MVERT);
+ int i;
+
+ i = index_dmcache;
+
+ if(i== DMCACHE_NOTFOUND || i >= dm->getNumFaces(dm))
+ return 0;
+
+ *mapindex = i;
+ /* modify the original weights to become
+ * weights for the derived mesh face */
osface= dm->getFaceDataArray(dm, CD_ORIGSPACE);
- origindex= dm->getFaceDataArray(dm, CD_ORIGINDEX);
+ mface= dm->getFaceData(dm, i, CD_MFACE);
- /* For this to work we need origindex and OrigSpace coords */
- if(origindex==NULL || osface==NULL || index>=me->totface) {
- PARTICLE_ON_DM_ERROR;
- return;
- }
-
- if (index_dmcache == DMCACHE_NOTFOUND)
- i = psys_particle_dm_face_lookup(ob, dm, index, fw, (LinkNode*)NULL);
+ if(osface == NULL)
+ mapfw[0]= mapfw[1]= mapfw[2]= mapfw[3]= 0.0f;
else
- i = index_dmcache;
+ psys_origspace_to_w(&osface[i], mface->v4, fw, mapfw);
+ }
+ }
- totface = dm->getNumFaces(dm);
+ return 1;
+}
- /* Any time this happens, and the face has not been removed,
- * its a BUG watch out for this error! */
- if (i==-1) {
- printf("Cannot find original face %i\n", index);
- PARTICLE_ON_DM_ERROR;
- return;
- }
- else if(i >= totface)
- return;
+/* interprets particle data to get a point on a mesh in object space */
+void psys_particle_on_dm(DerivedMesh *dm, int from, int index, int index_dmcache, float *fw, float foffset, float *vec, float *nor, float *utan, float *vtan, float *orco, float *ornor)
+{
+ float tmpnor[3], mapfw[4];
+ float (*orcodata)[3];
+ int mapindex;
- mface= dm->getFaceData(dm, i, CD_MFACE);
- mtface= dm->getFaceData(dm, i, CD_MTFACE);
- osface += i;
-
- /* we need to modify the original weights to become weights for
- * the derived mesh face */
- psys_origspace_to_w(osface, mface->v4, fw, fw_mod);
-
- if(from==PART_FROM_VOLUME){
- psys_interpolate_face(mvert,mface,mtface,orcodata,fw_mod,vec,temp1,utan,vtan,orco,ornor);
- if(nor)
- VECCOPY(nor,temp1);
- Normalize(temp1);
- VecMulf(temp1,-foffset);
- VECADD(vec,vec,temp1);
- }
- else
- psys_interpolate_face(mvert,mface,mtface,orcodata,fw_mod,vec,nor,utan,vtan,orco,ornor);
+ if(!psys_map_index_on_dm(dm, from, index, index_dmcache, fw, foffset, &mapindex, mapfw)) {
+ if(vec) { vec[0]=vec[1]=vec[2]=0.0; }
+ if(nor) { nor[0]=nor[1]=0.0; nor[2]=1.0; }
+ if(orco) { orco[0]=orco[1]=orco[2]=0.0; }
+ if(ornor) { ornor[0]=ornor[1]=0.0; ornor[2]=1.0; }
+ if(utan) { utan[0]=utan[1]=utan[2]=0.0; }
+ if(vtan) { vtan[0]=vtan[1]=vtan[2]=0.0; }
+
+ return;
+ }
+
+ orcodata= dm->getVertDataArray(dm, CD_ORCO);
+
+ if(from == PART_FROM_VERT) {
+ dm->getVertCo(dm,mapindex,vec);
+
+ if(nor) {
+ dm->getVertNo(dm,mapindex,nor);
+ Normalize(nor);
}
- else if(from == PART_FROM_VERT) {
- if (index_dmcache == DMCACHE_NOTFOUND || index_dmcache > dm->getNumVerts(dm)) {
- PARTICLE_ON_DM_ERROR;
- return;
- }
- dm->getVertCo(dm,index_dmcache,vec);
- if(nor) {
- dm->getVertNo(dm,index_dmcache,nor);
- Normalize(nor);
- }
- if(orco)
- VECCOPY(orco, orcodata[index])
- if(ornor) {
- dm->getVertNo(dm,index_dmcache,nor);
- Normalize(nor);
- }
- if(utan && vtan) {
- utan[0]= utan[1]= utan[2]= 0.0f;
- vtan[0]= vtan[1]= vtan[2]= 0.0f;
- }
+ if(orco)
+ VECCOPY(orco, orcodata[mapindex])
+
+ if(ornor) {
+ dm->getVertNo(dm,mapindex,nor);
+ Normalize(nor);
}
- else {
- PARTICLE_ON_DM_ERROR;
+
+ if(utan && vtan) {
+ utan[0]= utan[1]= utan[2]= 0.0f;
+ vtan[0]= vtan[1]= vtan[2]= 0.0f;
}
}
+ else { /* PART_FROM_FACE / PART_FROM_VOLUME */
+ MFace *mface;
+ MTFace *mtface;
+ MVert *mvert;
+
+ mface=dm->getFaceData(dm,mapindex,CD_MFACE);
+ mvert=dm->getVertDataArray(dm,CD_MVERT);
+ mtface=CustomData_get_layer(&dm->faceData,CD_MTFACE);
+
+ if(mtface)
+ mtface += mapindex;
+
+ if(from==PART_FROM_VOLUME) {
+ psys_interpolate_face(mvert,mface,mtface,orcodata,mapfw,vec,tmpnor,utan,vtan,orco,ornor);
+ if(nor)
+ VECCOPY(nor,tmpnor);
+
+ Normalize(tmpnor);
+ VecMulf(tmpnor,-foffset);
+ VECADD(vec,vec,tmpnor);
+ }
+ else
+ psys_interpolate_face(mvert,mface,mtface,orcodata,mapfw,vec,nor,utan,vtan,orco,ornor);
+ }
+}
+
+float psys_particle_value_from_verts(DerivedMesh *dm, short from, ParticleData *pa, float *values)
+{
+ float mapfw[4];
+ int mapindex;
+
+ if(!psys_map_index_on_dm(dm, from, pa->num, pa->num_dmcache, pa->fuv, pa->foffset, &mapindex, mapfw))
+ return 0.0f;
+
+ return psys_interpolate_value_from_verts(dm, from, mapindex, mapfw, values);
}
-#undef PARTICLE_ON_DM_ERROR
ParticleSystemModifierData *psys_get_modifier(Object *ob, ParticleSystem *psys)
{
@@ -1343,7 +1342,7 @@ ParticleSystemModifierData *psys_get_modifier(Object *ob, ParticleSystem *psys)
/* Particles on a shape */
/************************************************/
/* ready for future use */
-void psys_particle_on_shape(int distr, int index, float *fuv, float *vec, float *nor, float *utan, float *vtan, float *orco, float *ornor)
+static void psys_particle_on_shape(int distr, int index, float *fuv, float *vec, float *nor, float *utan, float *vtan, float *orco, float *ornor)
{
/* TODO */
float zerovec[3]={0.0f,0.0f,0.0f};
@@ -1369,7 +1368,7 @@ void psys_particle_on_shape(int distr, int index, float *fuv, float *vec, float
/************************************************/
/* Particles on emitter */
/************************************************/
-void psys_particle_on_emitter(Object *ob, ParticleSystemModifierData *psmd, int from, int index, int index_dmcache, float *fuv, float foffset, float *vec, float *nor, float *utan, float *vtan, float *orco, float *ornor){
+void psys_particle_on_emitter(ParticleSystemModifierData *psmd, int from, int index, int index_dmcache, float *fuv, float foffset, float *vec, float *nor, float *utan, float *vtan, float *orco, float *ornor){
if(psmd){
if(psmd->psys->part->distr==PART_DISTR_GRID && psmd->psys->part->from != PART_FROM_VERT){
if(vec){
@@ -1378,7 +1377,7 @@ void psys_particle_on_emitter(Object *ob, ParticleSystemModifierData *psmd, int
return;
}
/* we cant use the num_dmcache */
- psys_particle_on_dm(ob, psmd->dm,from,index,index_dmcache,fuv,foffset,vec,nor,utan,vtan,orco,ornor);
+ psys_particle_on_dm(psmd->dm,from,index,index_dmcache,fuv,foffset,vec,nor,utan,vtan,orco,ornor);
}
else
psys_particle_on_shape(from,index,fuv,vec,nor,utan,vtan,orco,ornor);
@@ -1649,7 +1648,6 @@ int do_guide(ParticleKey *state, int pa_num, float time, ListBase *lb)
/* TODO */
//else{
///* curve size*/
- // calc_curve_subdiv_radius(cu,cu->nurb.first,((Nurb*)cu->nurb.first)->
//}
par.co[0]=par.co[1]=par.co[2]=0.0f;
VECCOPY(key.co,pa_loc);
@@ -1750,37 +1748,17 @@ static void do_path_effectors(Object *ob, ParticleSystem *psys, int i, ParticleC
static int check_path_length(int k, ParticleCacheKey *keys, ParticleCacheKey *state, float max_length, float *cur_length, float length, float *dvec)
{
if(*cur_length + length > max_length){
- //if(p<totparent){
- // if(k<=(int)cache[totpart+p]->time){
- // /* parents need to be calculated fully first so that they don't mess up their children */
- // /* we'll make a note of where we got to though so that they're easy to finish later */
- // state->time=(max_length-*cur_length)/length;
- // cache[totpart+p]->time=(float)k;
- // }
- //}
- //else{
VecMulf(dvec, (max_length - *cur_length) / length);
VECADD(state->co, (state - 1)->co, dvec);
keys->steps = k;
/* something over the maximum step value */
return k=100000;
- //}
}
else {
*cur_length+=length;
return k;
}
}
-static void finalize_path_length(ParticleCacheKey *keys)
-{
- ParticleCacheKey *state = keys;
- float dvec[3];
- state += state->steps;
-
- VECSUB(dvec, state->co, (state - 1)->co);
- VecMulf(dvec, state->steps);
- VECADD(state->co, (state - 1)->co, dvec);
-}
static void offset_child(ChildParticle *cpa, ParticleKey *par, ParticleKey *child, float flat, float radius)
{
VECCOPY(child->co,cpa->fuv);
@@ -1830,14 +1808,14 @@ void psys_find_parents(Object *ob, ParticleSystemModifierData *psmd, ParticleSys
tree=BLI_kdtree_new(totparent);
for(p=0,cpa=psys->child; p<totparent; p++,cpa++){
- psys_particle_on_emitter(ob,psmd,from,cpa->num,-1,cpa->fuv,cpa->foffset,co,0,0,0,orco,0);
+ psys_particle_on_emitter(psmd,from,cpa->num,-1,cpa->fuv,cpa->foffset,co,0,0,0,orco,0);
BLI_kdtree_insert(tree, p, orco, NULL);
}
BLI_kdtree_balance(tree);
for(; p<totchild; p++,cpa++){
- psys_particle_on_emitter(ob,psmd,from,cpa->num,DMCACHE_ISCHILD,cpa->fuv,cpa->foffset,co,0,0,0,orco,0);
+ psys_particle_on_emitter(psmd,from,cpa->num,DMCACHE_ISCHILD,cpa->fuv,cpa->foffset,co,0,0,0,orco,0);
cpa->parent=BLI_kdtree_find_nearest(tree, orco, NULL, NULL);
}
@@ -1961,7 +1939,7 @@ void psys_thread_create_path(ParticleThread *thread, struct ChildParticle *cpa,
ParticleCacheKey **cache= psys->childcache;
ParticleCacheKey **pcache= psys->pathcache;
ParticleCacheKey *state, *par = NULL, *key[4];
- ParticleData *pa;
+ ParticleData *pa=NULL;
ParticleTexture ptex;
float *cpa_fuv=0;
float co[3], orco[3], ornor[3], t, rough_t, cpa_1st[3], dvec[3];
@@ -2029,7 +2007,7 @@ void psys_thread_create_path(ParticleThread *thread, struct ChildParticle *cpa,
cpa_fuv = cpa->fuv;
cpa_from = PART_FROM_FACE;
- psys_particle_on_emitter(ob,ctx->psmd,cpa_from,cpa_num,DMCACHE_ISCHILD,cpa->fuv,foffset,co,ornor,0,0,orco,0);
+ psys_particle_on_emitter(ctx->psmd,cpa_from,cpa_num,DMCACHE_ISCHILD,cpa->fuv,foffset,co,ornor,0,0,orco,0);
/* we need to save the actual root position of the child for positioning it accurately to the surface of the emitter */
VECCOPY(cpa_1st,co);
@@ -2055,7 +2033,7 @@ void psys_thread_create_path(ParticleThread *thread, struct ChildParticle *cpa,
cpa_num=pa->num;
cpa_fuv=pa->fuv;
- psys_particle_on_emitter(ob,ctx->psmd,cpa_from,cpa_num,DMCACHE_ISCHILD,cpa_fuv,pa->foffset,co,ornor,0,0,orco,0);
+ psys_particle_on_emitter(ctx->psmd,cpa_from,cpa_num,DMCACHE_ISCHILD,cpa_fuv,pa->foffset,co,ornor,0,0,orco,0);
}
keys->steps = ctx->steps;
@@ -2262,13 +2240,9 @@ void psys_thread_create_path(ParticleThread *thread, struct ChildParticle *cpa,
get_strand_normal(ctx->ma, ornor, cur_length, state->vel);
}
}
-
- /* now let's finalise the interpolated parents that we might have left half done before */
- if(i<ctx->totparent)
- finalize_path_length(keys);
}
-void *exec_child_path_cache(void *data)
+static void *exec_child_path_cache(void *data)
{
ParticleThread *thread= (ParticleThread*)data;
ParticleThreadContext *ctx= thread->ctx;
@@ -2339,6 +2313,7 @@ void psys_cache_paths(Object *ob, ParticleSystem *psys, float cfra, int editupda
ParticleCacheKey *ca, **cache=psys->pathcache;
ParticleSystemModifierData *psmd = psys_get_modifier(ob, psys);
ParticleEditSettings *pset = &G.scene->toolsettings->particle;
+ ParticleSettings *part = psys->part;
ParticleData *pa;
ParticleKey keys[4], result, *kkey[2] = {NULL, NULL};
@@ -2364,6 +2339,8 @@ void psys_cache_paths(Object *ob, ParticleSystem *psys, float cfra, int editupda
float nosel_col[3];
float length, vec[3];
float *vg_effector= NULL, effector=0.0f;
+ float *vg_length= NULL, pa_length=1.0f, max_length=1.0f, cur_length=0.0f;
+ float len, dvec[3];
/* we don't have anything valid to create paths from so let's quit here */
if((psys->flag & PSYS_HAIR_DONE)==0 && (psys->flag & PSYS_KEYED)==0)
@@ -2415,6 +2392,9 @@ void psys_cache_paths(Object *ob, ParticleSystem *psys, float cfra, int editupda
if(psys->part->from!=PART_FROM_PARTICLE) {
if(!(psys->part->flag & PART_CHILD_EFFECT))
vg_effector = psys_cache_vgroup(psmd->dm, psys, PSYS_VG_EFFECTOR);
+
+ if(!edit && !psys->totchild)
+ vg_length = psys_cache_vgroup(psmd->dm, psys, PSYS_VG_LENGTH);
}
/*---first main loop: create all actual particles' paths---*/
@@ -2428,6 +2408,12 @@ void psys_cache_paths(Object *ob, ParticleSystem *psys, float cfra, int editupda
if(editupdate && !(pa->flag & PARS_EDIT_RECALC)) continue;
else memset(cache[i], 0, sizeof(*cache[i])*(steps+1));
+ if(!edit && !psys->totchild) {
+ pa_length = part->length * (1.0f - part->randlength*pa->r_ave[0]);
+ if(vg_length)
+ pa_length *= psys_particle_value_from_verts(psmd->dm,part->from,pa,vg_length);
+ }
+
cache[i]->steps = steps;
if(edit)
@@ -2586,7 +2572,7 @@ void psys_cache_paths(Object *ob, ParticleSystem *psys, float cfra, int editupda
effector= 1.0f;
if(vg_effector)
- effector*= psys_interpolate_value_from_verts(psmd->dm,psys->part->from,pa->num,pa->fuv,vg_effector);
+ effector*= psys_particle_value_from_verts(psmd->dm,psys->part->from,pa,vg_effector);
for(k=0, ca=cache[i]; k<=steps; k++, ca++) {
/* apply effectors */
@@ -2653,6 +2639,27 @@ void psys_cache_paths(Object *ob, ParticleSystem *psys, float cfra, int editupda
}
+ if(!edit && !psys->totchild) {
+ /* check if path needs to be cut before actual end of data points */
+ if(k){
+ VECSUB(dvec,ca->co,(ca-1)->co);
+ if(part->flag&PART_ABS_LENGTH)
+ len=VecLength(dvec);
+ else
+ len=1.0f/(float)steps;
+
+ k=check_path_length(k,cache[i],ca,max_length,&cur_length,len,dvec);
+ }
+ else{
+ /* initialize length calculation */
+ if(part->flag&PART_ABS_LENGTH)
+ max_length= part->abslength*pa_length;
+ else
+ max_length= pa_length;
+
+ cur_length= 0.0f;
+ }
+ }
}
}
@@ -2665,6 +2672,9 @@ void psys_cache_paths(Object *ob, ParticleSystem *psys, float cfra, int editupda
if(vg_effector)
MEM_freeN(vg_effector);
+
+ if(vg_length)
+ MEM_freeN(vg_length);
}
/************************************************/
/* Particle Key handling */
@@ -2803,7 +2813,7 @@ void psys_mat_hair_to_object(Object *ob, DerivedMesh *dm, short from, ParticleDa
float vec[3];
psys_face_mat(0, dm, pa, hairmat, 0);
- psys_particle_on_dm(ob, dm, from, pa->num, pa->num_dmcache, pa->fuv, pa->foffset, vec, 0, 0, 0, 0, 0);
+ psys_particle_on_dm(dm, from, pa->num, pa->num_dmcache, pa->fuv, pa->foffset, vec, 0, 0, 0, 0, 0);
VECCOPY(hairmat[3],vec);
}
@@ -2812,62 +2822,14 @@ void psys_mat_hair_to_orco(Object *ob, DerivedMesh *dm, short from, ParticleData
float vec[3], orco[3];
psys_face_mat(ob, dm, pa, hairmat, 1);
- psys_particle_on_dm(ob, dm, from, pa->num, pa->num_dmcache, pa->fuv, pa->foffset, vec, 0, 0, 0, orco, 0);
+ psys_particle_on_dm(dm, from, pa->num, pa->num_dmcache, pa->fuv, pa->foffset, vec, 0, 0, 0, orco, 0);
/* see psys_face_mat for why this function is called */
transform_mesh_orco_verts(ob->data, &orco, 1, 1);
VECCOPY(hairmat[3],orco);
}
-/*
-void psys_key_to_geometry(DerivedMesh *dm, ParticleData *pa, ParticleKey *key)
-{
- float q[4], v1[3], v2[3], v3[3];
-
- dm->getVertCo(dm,pa->verts[0],v1);
- dm->getVertCo(dm,pa->verts[1],v2);
- dm->getVertCo(dm,pa->verts[2],v3);
-
- triatoquat(v1, v2, v3, q);
-
- QuatInv(q);
-
- VECSUB(key->co,key->co,v1);
-
- VECADD(key->vel,key->vel,key->co);
-
- QuatMulVecf(q, key->co);
- QuatMulVecf(q, key->vel);
-
- VECSUB(key->vel,key->vel,key->co);
-
- QuatMul(key->rot,q,key->rot);
-}
-
-void psys_key_from_geometry(DerivedMesh *dm, ParticleData *pa, ParticleKey *key)
-{
- float q[4], v1[3], v2[3], v3[3];
-
- dm->getVertCo(dm,pa->verts[0],v1);
- dm->getVertCo(dm,pa->verts[1],v2);
- dm->getVertCo(dm,pa->verts[2],v3);
-
- triatoquat(v1, v2, v3, q);
-
- VECADD(key->vel,key->vel,key->co);
-
- QuatMulVecf(q, key->co);
- QuatMulVecf(q, key->vel);
-
- VECSUB(key->vel,key->vel,key->co);
-
- VECADD(key->co,key->co,v1);
-
- QuatMul(key->rot,q,key->rot);
-}
-*/
-
-void psys_vec_rot_to_face(DerivedMesh *dm, ParticleData *pa, float *vec)//to_geometry(DerivedMesh *dm, ParticleData *pa, float *vec)
+void psys_vec_rot_to_face(DerivedMesh *dm, ParticleData *pa, float *vec)
{
float mat[4][4];
@@ -2876,36 +2838,6 @@ void psys_vec_rot_to_face(DerivedMesh *dm, ParticleData *pa, float *vec)//to_geo
Mat4Mul3Vecfl(mat, vec);
}
-/* unused */
-#if 0
-static void psys_vec_rot_from_face(DerivedMesh *dm, ParticleData *pa, float *vec)//from_geometry(DerivedMesh *dm, ParticleData *pa, float *vec)
-{
- float q[4], v1[3], v2[3], v3[3];
- /*
- dm->getVertCo(dm,pa->verts[0],v1);
- dm->getVertCo(dm,pa->verts[1],v2);
- dm->getVertCo(dm,pa->verts[2],v3);
- */
- /* replace with this */
- MFace *mface;
- int i; // = psys_particle_dm_face_lookup(dm, pa->num, pa->fuv, pa->foffset, (LinkNode*)NULL);
- i = pa->num_dmcache==DMCACHE_NOTFOUND ? pa->num : pa->num_dmcache;
- if (i==-1 || i >= dm->getNumFaces(dm)) { vec[0] = vec[1] = 0; vec[2] = 1; return; }
- mface=dm->getFaceData(dm,i,CD_MFACE);
-
- dm->getVertCo(dm,mface->v1,v1);
- dm->getVertCo(dm,mface->v2,v2);
- dm->getVertCo(dm,mface->v3,v3);
- /* done */
-
- triatoquat(v1, v2, v3, q);
-
- QuatMulVecf(q, vec);
-
- //VECADD(vec,vec,v1);
-}
-#endif
-
void psys_mat_hair_to_global(Object *ob, DerivedMesh *dm, short from, ParticleData *pa, float hairmat[][4])
{
float facemat[4][4];
@@ -3015,6 +2947,7 @@ ParticleSettings *psys_copy_settings(ParticleSettings *part)
partn= copy_libblock(part);
if(partn->pd) partn->pd= MEM_dupallocN(part->pd);
+ if(partn->pd2) partn->pd2= MEM_dupallocN(part->pd2);
return partn;
}
@@ -3154,6 +3087,47 @@ LinkNode *psys_using_settings(ParticleSettings *part, int flush_update)
/************************************************/
/* Textures */
/************************************************/
+
+static int get_particle_uv(DerivedMesh *dm, ParticleData *pa, int face_index, float *fuv, char *name, float *texco)
+{
+ MFace *mf;
+ MTFace *tf;
+ int i;
+
+ tf= CustomData_get_layer_named(&dm->faceData, CD_MTFACE, name);
+
+ if(tf == NULL)
+ tf= CustomData_get_layer(&dm->faceData, CD_MTFACE);
+
+ if(tf == NULL)
+ return 0;
+
+ if(pa) {
+ i= (pa->num_dmcache==DMCACHE_NOTFOUND)? pa->num: pa->num_dmcache;
+ if(i >= dm->getNumFaces(dm))
+ i = -1;
+ }
+ else
+ i= face_index;
+
+ if (i==-1) {
+ texco[0]= 0.0f;
+ texco[1]= 0.0f;
+ texco[2]= 0.0f;
+ }
+ else {
+ mf= dm->getFaceData(dm, i, CD_MFACE);
+
+ psys_interpolate_uvs(&tf[i], mf->v4, fuv, texco);
+
+ texco[0]= texco[0]*2.0f - 1.0f;
+ texco[1]= texco[1]*2.0f - 1.0f;
+ texco[2]= 0.0f;
+ }
+
+ return 1;
+}
+
static void get_cpa_texture(DerivedMesh *dm, Material *ma, int face_index, float *fw, float *orco, ParticleTexture *ptex, int event)
{
MTex *mtex;
@@ -3168,27 +3142,13 @@ static void get_cpa_texture(DerivedMesh *dm, Material *ma, int face_index, float
short blend=mtex->blendtype;
short neg=mtex->pmaptoneg;
- if(mtex->texco & TEXCO_UV && fw){
- int uv_index=CustomData_get_named_layer_index(&dm->faceData,CD_MTFACE,mtex->uvname);
- if(uv_index<0){
- uv_index=CustomData_get_active_layer_index(&dm->faceData,CD_MTFACE);
- }
- if(uv_index>=0){
- CustomDataLayer *layer=&dm->faceData.layers[uv_index];
- MTFace *mtface= &((MTFace*)layer->data)[face_index];
- MFace *mf=dm->getFaceData(dm,face_index,CD_MFACE);
- psys_interpolate_uvs(mtface,mf->v4,fw,texco);
- texco[0]*=2.0;
- texco[1]*=2.0;
- texco[0]-=1.0;
- texco[1]-=1.0;
- }
- else
+ if((mtex->texco & TEXCO_UV) && fw) {
+ if(!get_particle_uv(dm, NULL, face_index, fw, mtex->uvname, texco))
VECCOPY(texco,orco);
}
- else{
+ else
VECCOPY(texco,orco);
- }
+
externtex(mtex, texco, &value, rgba, rgba+1, rgba+2, rgba+3);
if((event & mtex->pmapto) & MAP_PA_TIME){
if((setvars&MAP_PA_TIME)==0){
@@ -3228,33 +3188,16 @@ void psys_get_texture(Object *ob, Material *ma, ParticleSystemModifierData *psmd
short blend=mtex->blendtype;
short neg=mtex->pmaptoneg;
- if(mtex->texco & TEXCO_UV){
- int uv_index=CustomData_get_named_layer_index(&psmd->dm->faceData,CD_MTFACE,mtex->uvname);
- if(uv_index<0){
- uv_index=CustomData_get_active_layer_index(&psmd->dm->faceData,CD_MTFACE);
- }
- if(uv_index>=0){
- CustomDataLayer *layer=&psmd->dm->faceData.layers[uv_index];
- MTFace *mtface= &((MTFace*)layer->data)[pa->num];
- MFace *mf=psmd->dm->getFaceData(psmd->dm,pa->num,CD_MFACE);
- psys_interpolate_uvs(mtface,mf->v4,pa->fuv,texco);
- texco[0]*=2.0;
- texco[1]*=2.0;
- texco[0]-=1.0;
- texco[1]-=1.0;
+ if((mtex->texco & TEXCO_UV) && ELEM(psys->part->from, PART_FROM_FACE, PART_FROM_VOLUME)) {
+ if(!get_particle_uv(psmd->dm, pa, 0, pa->fuv, mtex->uvname, texco)) {
+ /* failed to get uv's, let's try orco's */
+ psys_particle_on_emitter(psmd,psys->part->from,pa->num,pa->num_dmcache,pa->fuv,pa->foffset,co,0,0,0,texco, 0);
}
- else
- //psys_particle_on_emitter(ob,psmd,psys->part->from,pa->num,pa->fuv,pa->foffset,texco,0,0,0);
- /* <jahka> anyways I think it will be too small a difference to notice, so psys_get_texture should only know about the original mesh structure.. no dm needed anywhere */
- /* <brecht> the code only does dm based lookup now, so passing num_dmcache anyway to avoid^
- * massive slowdown here */
- psys_particle_on_emitter(ob,psmd,psys->part->from,pa->num,pa->num_dmcache,pa->fuv,pa->foffset,co,0,0,0,texco, 0);
}
- else{
- //psys_particle_on_emitter(ob,psmd,psys->part->from,pa->num,pa->fuv,pa->offset,texco,0,0,0);
- /* ditto above */
- psys_particle_on_emitter(ob,psmd,psys->part->from,pa->num,pa->num_dmcache,pa->fuv,pa->foffset,co,0,0,0,texco, 0);
+ else {
+ psys_particle_on_emitter(psmd,psys->part->from,pa->num,pa->num_dmcache,pa->fuv,pa->foffset,co,0,0,0,texco, 0);
}
+
externtex(mtex, texco, &value, rgba, rgba+1, rgba+2, rgba+3);
if((event & mtex->pmapto) & MAP_PA_TIME){
@@ -3319,7 +3262,7 @@ float psys_get_size(Object *ob, Material *ma, ParticleSystemModifierData *psmd,
}
if(vg_size)
- size*=psys_interpolate_value_from_verts(psmd->dm,part->from,pa->num,pa->fuv,vg_size);
+ size*=psys_particle_value_from_verts(psmd->dm,part->from,pa,vg_size);
if(part->randsize!=0.0)
size*= 1.0f - part->randsize*pa->sizemul;
@@ -3352,16 +3295,24 @@ float psys_get_child_size(ParticleSystem *psys, ChildParticle *cpa, float cfra,
float size, time;
if(part->childtype==PART_CHILD_FACES){
- if(pa_time)
- time=*pa_time;
- else
- time=psys_get_child_time(psys,cpa,cfra);
+ size=part->size;
if((part->flag&PART_ABS_TIME)==0 && part->ipo){
+ IpoCurve *icu;
+
+ if(pa_time)
+ time=*pa_time;
+ else
+ time=psys_get_child_time(psys,cpa,cfra);
+
+ /* correction for lifetime */
calc_ipo(part->ipo, 100*time);
- execute_ipo((ID *)part, part->ipo);
+
+ for(icu = part->ipo->curve.first; icu; icu=icu->next) {
+ if(icu->adrcode == PART_SIZE)
+ size = icu->curval;
+ }
}
- size=part->size;
}
else
size=psys->particles[cpa->parent].size;
@@ -3558,7 +3509,7 @@ void psys_get_particle_on_path(Object *ob, ParticleSystem *psys, int p, Particle
cpa_fuv = cpa->fuv;
cpa_from = PART_FROM_FACE;
- psys_particle_on_emitter(ob,psmd,cpa_from,cpa_num,DMCACHE_ISCHILD,cpa->fuv,foffset,co,0,0,0,orco,0);
+ psys_particle_on_emitter(psmd,cpa_from,cpa_num,DMCACHE_ISCHILD,cpa->fuv,foffset,co,0,0,0,orco,0);
/* we need to save the actual root position of the child for positioning it accurately to the surface of the emitter */
//VECCOPY(cpa_1st,co);
@@ -3580,7 +3531,7 @@ void psys_get_particle_on_path(Object *ob, ParticleSystem *psys, int p, Particle
cpa_num=pa->num;
cpa_fuv=pa->fuv;
- psys_particle_on_emitter(ob,psmd,cpa_from,cpa_num,DMCACHE_ISCHILD,cpa_fuv,pa->foffset,co,0,0,0,orco,0);
+ psys_particle_on_emitter(psmd,cpa_from,cpa_num,DMCACHE_ISCHILD,cpa_fuv,pa->foffset,co,0,0,0,orco,0);
}
/* correct child ipo timing */
@@ -3675,6 +3626,7 @@ int psys_get_particle_state(Object *ob, ParticleSystem *psys, int p, ParticleKey
float cfra;
int totpart=psys->totpart, between=0;
+ /* negative time means "use current time" */
if(state->time>0)
cfra=state->time;
else
@@ -3750,7 +3702,48 @@ int psys_get_particle_state(Object *ob, ParticleSystem *psys, int p, ParticleKey
}
else{
if (pa) { /* TODO PARTICLE - should this ever be NULL? - Campbell */
- copy_particle_key(state,&pa->state,0);
+ if(pa->state.time==state->time || ELEM(part->phystype,PART_PHYS_NO,PART_PHYS_KEYED))
+ copy_particle_key(state, &pa->state, 1);
+ else if(pa->prev_state.time==state->time)
+ copy_particle_key(state, &pa->prev_state, 1);
+ else {
+ /* let's interpolate to try to be as accurate as possible */
+ if(pa->state.time + 1.0f > state->time && pa->prev_state.time - 1.0f < state->time) {
+ ParticleKey keys[4];
+ float dfra, keytime, frs_sec = G.scene->r.frs_sec;
+
+ if(pa->prev_state.time >= pa->state.time) {
+ /* prev_state is wrong so let's not use it, this can happen at frame 1 or particle birth */
+ copy_particle_key(state, &pa->state, 1);
+
+ VECADDFAC(state->co, state->co, state->vel, (state->time-pa->state.time)/frs_sec);
+ }
+ else {
+ copy_particle_key(keys+1, &pa->prev_state, 1);
+ copy_particle_key(keys+2, &pa->state, 1);
+
+ dfra = keys[2].time - keys[1].time;
+
+ keytime = (state->time - keys[1].time) / dfra;
+
+ /* convert velocity to timestep size */
+ VecMulf(keys[1].vel, dfra / frs_sec);
+ VecMulf(keys[2].vel, dfra / frs_sec);
+
+ interpolate_particle(-1, keys, keytime, state, 1);
+
+ /* convert back to real velocity */
+ VecMulf(state->vel, frs_sec / dfra);
+
+ VecLerpf(state->ave, keys[1].ave, keys[2].ave, keytime);
+ QuatInterpol(state->rot, keys[1].rot, keys[2].rot, keytime);
+ }
+ }
+ else {
+ /* extrapolating over big ranges is not accurate so let's just give something close to reasonable back */
+ copy_particle_key(state, &pa->state, 0);
+ }
+ }
if(pa->alive==PARS_DEAD && part->flag&PART_STICKY && pa->flag&PARS_STICKY && pa->stick_ob){
key_from_object(pa->stick_ob,state);
@@ -3786,7 +3779,7 @@ void psys_get_dupli_texture(Object *ob, ParticleSettings *part, ParticleSystemMo
else
uv[0]= uv[1]= 0.0f;
- psys_particle_on_emitter(ob, psmd,
+ psys_particle_on_emitter(psmd,
(part->childtype == PART_CHILD_FACES)? PART_FROM_FACE: PART_FROM_PARTICLE,
cpa->num,DMCACHE_ISCHILD,cpa->fuv,cpa->foffset,loc,0,0,0,orco,0);
}
@@ -3810,7 +3803,7 @@ void psys_get_dupli_texture(Object *ob, ParticleSettings *part, ParticleSystemMo
else
uv[0]= uv[1]= 0.0f;
- psys_particle_on_emitter(ob,psmd,part->from,pa->num,pa->num_dmcache,pa->fuv,pa->foffset,loc,0,0,0,orco,0);
+ psys_particle_on_emitter(psmd,part->from,pa->num,pa->num_dmcache,pa->fuv,pa->foffset,loc,0,0,0,orco,0);
}
}
@@ -3823,9 +3816,9 @@ void psys_get_dupli_path_transform(Object *ob, ParticleSystem *psys, ParticleSys
len= Normalize(vec);
if(pa)
- psys_particle_on_emitter(ob,psmd,psys->part->from,pa->num,pa->num_dmcache,pa->fuv,pa->foffset,loc,nor,0,0,0,0);
+ psys_particle_on_emitter(psmd,psys->part->from,pa->num,pa->num_dmcache,pa->fuv,pa->foffset,loc,nor,0,0,0,0);
else
- psys_particle_on_emitter(ob, psmd,
+ psys_particle_on_emitter(psmd,
(psys->part->childtype == PART_CHILD_FACES)? PART_FROM_FACE: PART_FROM_PARTICLE,
cpa->num,DMCACHE_ISCHILD,cpa->fuv,cpa->foffset,loc,nor,0,0,0,0);
@@ -3841,11 +3834,24 @@ void psys_get_dupli_path_transform(Object *ob, ParticleSystem *psys, ParticleSys
Mat4MulMat4(mat, obrotmat, qmat);
}
else {
+ /* make sure that we get a proper side vector */
+ if(fabs(Inpf(nor,vec))>0.999999) {
+ if(fabs(Inpf(nor,xvec))>0.999999) {
+ nor[0] = 0.0f;
+ nor[1] = 1.0f;
+ nor[2] = 0.0f;
+ }
+ else {
+ nor[0] = 1.0f;
+ nor[1] = 0.0f;
+ nor[2] = 0.0f;
+ }
+ }
Crossf(side, nor, vec);
Normalize(side);
Crossf(nor, vec, side);
- Mat4One(mat);
+ Mat4One(mat);
VECCOPY(mat[0], vec);
VECCOPY(mat[1], side);
VECCOPY(mat[2], nor);
diff --git a/source/blender/blenkernel/intern/particle_system.c b/source/blender/blenkernel/intern/particle_system.c
index d1c0cdec71d..8f7a90625ba 100644
--- a/source/blender/blenkernel/intern/particle_system.c
+++ b/source/blender/blenkernel/intern/particle_system.c
@@ -53,13 +53,16 @@
#include "BLI_arithb.h"
#include "BLI_blenlib.h"
#include "BLI_kdtree.h"
+#include "BLI_kdopbvh.h"
#include "BLI_linklist.h"
#include "BLI_threads.h"
#include "BKE_anim.h"
#include "BKE_bad_level_calls.h"
#include "BKE_cdderivedmesh.h"
+#include "BKE_collision.h"
#include "BKE_displist.h"
+#include "BKE_effect.h"
#include "BKE_particle.h"
#include "BKE_global.h"
#include "BKE_utildefines.h"
@@ -75,6 +78,8 @@
#include "BKE_modifier.h"
#include "BKE_scene.h"
+#include "PIL_time.h"
+
#include "BSE_headerbuttons.h"
#include "blendef.h"
@@ -145,6 +150,14 @@ void psys_reset(ParticleSystem *psys, int mode)
BLI_freelistN(&psys->reactevents);
}
}
+ else if(mode == PSYS_RESET_CACHE_MISS) {
+ /* set all particles to be skipped */
+ ParticleData *pa = psys->particles;
+ int p=0;
+
+ for(; p<psys->totpart; p++, pa++)
+ pa->flag |= PARS_NO_DISP;
+ }
/* reset children */
if(psys->child) {
@@ -609,7 +622,7 @@ void psys_thread_distribute_particle(ParticleThread *thread, ParticleData *pa, C
KDTreeNearest ptn[3];
int w, maxw;
- psys_particle_on_dm(ctx->ob,ctx->dm,from,pa->num,pa->num_dmcache,pa->fuv,pa->foffset,co1,0,0,0,orco1,0);
+ psys_particle_on_dm(ctx->dm,from,pa->num,pa->num_dmcache,pa->fuv,pa->foffset,co1,0,0,0,orco1,0);
transform_mesh_orco_verts((Mesh*)ob->data, &orco1, 1, 1);
maxw = BLI_kdtree_find_n_nearest(ctx->tree,3,orco1,NULL,ptn);
@@ -753,7 +766,7 @@ void psys_thread_distribute_particle(ParticleThread *thread, ParticleData *pa, C
do_seams= (part->flag&PART_CHILD_SEAMS && ctx->seams);
- psys_particle_on_dm(ob,dm,cfrom,cpa->num,DMCACHE_ISCHILD,cpa->fuv,cpa->foffset,co1,nor1,0,0,orco1,ornor1);
+ psys_particle_on_dm(dm,cfrom,cpa->num,DMCACHE_ISCHILD,cpa->fuv,cpa->foffset,co1,nor1,0,0,orco1,ornor1);
transform_mesh_orco_verts((Mesh*)ob->data, &orco1, 1, 1);
maxw = BLI_kdtree_find_n_nearest(ctx->tree,(do_seams)?10:4,orco1,ornor1,ptn);
@@ -851,7 +864,7 @@ void psys_thread_distribute_particle(ParticleThread *thread, ParticleData *pa, C
}
}
-void *exec_distribution(void *data)
+static void *exec_distribution(void *data)
{
ParticleThread *thread= (ParticleThread*)data;
ParticleSystem *psys= thread->ctx->psys;
@@ -967,7 +980,7 @@ int psys_threads_init_distribution(ParticleThread *threads, DerivedMesh *finaldm
tree=BLI_kdtree_new(totpart);
for(p=0,pa=psys->particles; p<totpart; p++,pa++){
- psys_particle_on_dm(ob,dm,part->from,pa->num,pa->num_dmcache,pa->fuv,pa->foffset,co,nor,0,0,orco,ornor);
+ psys_particle_on_dm(dm,part->from,pa->num,pa->num_dmcache,pa->fuv,pa->foffset,co,nor,0,0,orco,ornor);
transform_mesh_orco_verts((Mesh*)ob->data, &orco, 1, 1);
BLI_kdtree_insert(tree, p, orco, ornor);
}
@@ -1115,12 +1128,14 @@ int psys_threads_init_distribution(ParticleThread *threads, DerivedMesh *finaldm
if(children){
if(G.f & G_DEBUG)
fprintf(stderr,"Particle child distribution error: Nothing to emit from!\n");
- for(p=0,cpa=psys->child; p<totpart; p++,cpa++){
- cpa->fuv[0]=cpa->fuv[1]=cpa->fuv[2]=cpa->fuv[3]= 0.0;
- cpa->foffset= 0.0f;
- cpa->parent=0;
- cpa->pa[0]=cpa->pa[1]=cpa->pa[2]=cpa->pa[3]=0;
- cpa->num= -1;
+ if(psys->child) {
+ for(p=0,cpa=psys->child; p<totpart; p++,cpa++){
+ cpa->fuv[0]=cpa->fuv[1]=cpa->fuv[2]=cpa->fuv[3]= 0.0;
+ cpa->foffset= 0.0f;
+ cpa->parent=0;
+ cpa->pa[0]=cpa->pa[1]=cpa->pa[2]=cpa->pa[3]=0;
+ cpa->num= -1;
+ }
}
}
else {
@@ -1699,10 +1714,8 @@ void reset_particle(ParticleData *pa, ParticleSystem *psys, ParticleSystemModifi
tob=ob;
tpsys=BLI_findlink(&tob->particlesystem,psys->target_psys-1);
-
- /*TODO: get precise location of particle at birth*/
- state.time=cfra;
+ state.time = pa->time;
if(pa->num == -1)
memset(&state, 0, sizeof(state));
else
@@ -1728,7 +1741,7 @@ void reset_particle(ParticleData *pa, ParticleSystem *psys, ParticleSystemModifi
where_is_object_time(ob,pa->time);
/* get birth location from object */
- psys_particle_on_emitter(ob,psmd,part->from,pa->num, pa->num_dmcache, pa->fuv,pa->foffset,loc,nor,utan,vtan,0,0);
+ psys_particle_on_emitter(psmd,part->from,pa->num, pa->num_dmcache, pa->fuv,pa->foffset,loc,nor,utan,vtan,0,0);
/* save local coordinates for later */
VECCOPY(tloc,loc);
@@ -1737,7 +1750,7 @@ void reset_particle(ParticleData *pa, ParticleSystem *psys, ParticleSystemModifi
psys_get_texture(ob,give_current_material(ob,part->omat),psmd,psys,pa,&ptex,MAP_PA_IVEL);
if(vg_vel && pa->num != -1)
- ptex.ivel*=psys_interpolate_value_from_verts(psmd->dm,part->from,pa->num,pa->fuv,vg_vel);
+ ptex.ivel*=psys_particle_value_from_verts(psmd->dm,part->from,pa,vg_vel);
/* particles live in global space so */
/* let's convert: */
@@ -1752,7 +1765,7 @@ void reset_particle(ParticleData *pa, ParticleSystem *psys, ParticleSystemModifi
/* -tangent */
if(part->tanfac!=0.0){
- float phase=vg_rot?2.0f*(psys_interpolate_value_from_verts(psmd->dm,part->from,pa->num,pa->fuv,vg_rot)-0.5f):0.0f;
+ float phase=vg_rot?2.0f*(psys_particle_value_from_verts(psmd->dm,part->from,pa,vg_rot)-0.5f):0.0f;
VecMulf(vtan,-(float)cos(M_PI*(part->tanphase+phase)));
fac=-(float)sin(M_PI*(part->tanphase+phase));
VECADDFAC(vtan,vtan,utan,fac);
@@ -1794,6 +1807,12 @@ void reset_particle(ParticleData *pa, ParticleSystem *psys, ParticleSystemModifi
}
/* conversion done so now we apply new: */
/* -velocity from: */
+
+ /* *reactions */
+ if(dtime>0.0f){
+ VECSUB(vel,pa->state.vel,pa->prev_state.vel);
+ }
+
/* *emitter velocity */
if(dtime!=0.0 && part->obfac!=0.0){
VECSUB(vel,loc,pa->state.co);
@@ -1806,7 +1825,7 @@ void reset_particle(ParticleData *pa, ParticleSystem *psys, ParticleSystemModifi
/* *emitter tangent */
if(part->tanfac!=0.0)
- VECADDFAC(vel,vel,vtan,part->tanfac*(vg_tan?psys_interpolate_value_from_verts(psmd->dm,part->from,pa->num,pa->fuv,vg_tan):1.0f));
+ VECADDFAC(vel,vel,vtan,part->tanfac*(vg_tan?psys_particle_value_from_verts(psmd->dm,part->from,pa,vg_tan):1.0f));
/* *texture */
/* TODO */
@@ -2095,22 +2114,18 @@ static void react_to_events(ParticleSystem *psys, int pa_num)
for(re=psys->reactevents.first; re; re=re->next){
birth=0;
if(part->from==PART_FROM_PARTICLE){
- if(pa->num==re->pa_num){
+ if(pa->num==re->pa_num && pa->alive==PARS_UNBORN){
if(re->event==PART_EVENT_NEAR){
ParticleData *tpa = re->psys->particles+re->pa_num;
float pa_time=tpa->time + pa->foffset*tpa->lifetime;
- if(re->time > pa_time){
- pa->alive=PARS_ALIVE;
+ if(re->time >= pa_time){
pa->time=pa_time;
pa->dietime=pa->time+pa->lifetime;
}
}
else{
- if(pa->alive==PARS_UNBORN){
- pa->alive=PARS_ALIVE;
- pa->time=re->time;
- pa->dietime=pa->time+pa->lifetime;
- }
+ pa->time=re->time;
+ pa->dietime=pa->time+pa->lifetime;
}
}
}
@@ -2118,7 +2133,6 @@ static void react_to_events(ParticleSystem *psys, int pa_num)
dist=VecLenf(pa->state.co, re->state.co);
if(dist <= re->size){
if(pa->alive==PARS_UNBORN){
- pa->alive=PARS_ALIVE;
pa->time=re->time;
pa->dietime=pa->time+pa->lifetime;
birth=1;
@@ -2194,6 +2208,8 @@ static int get_particles_from_cache(Object *ob, ParticleSystem *psys, int cfra)
/* assuming struct consists of tightly packed floats */
for(i=0, pa=psys->particles; i<totpart; i++, pa++) {
+ if(cfra!=pa->state.time)
+ copy_particle_key(&pa->prev_state,&pa->state,1);
if(!BKE_ptcache_file_read_floats(pf, (float*)&pa->state, sizeof(ParticleKey)/sizeof(float))) {
BKE_ptcache_file_close(pf);
return 0;
@@ -2208,174 +2224,6 @@ static int get_particles_from_cache(Object *ob, ParticleSystem *psys, int cfra)
/************************************************/
/* Effectors */
/************************************************/
-static float falloff_func(float fac, int usemin, float mindist, int usemax, float maxdist, float power)
-{
- if(!usemin)
- mindist= 0.0f;
-
- if(fac < mindist) {
- return 1.0f;
- }
- else if(usemax) {
- if(fac>maxdist || (maxdist-mindist)<=0.0f)
- return 0.0f;
-
- fac= (fac-mindist)/(maxdist-mindist);
- return 1.0f - (float)pow((double)fac, (double)power);
- }
- else
- return pow((double)1.0f+fac-mindist, (double)-power);
-}
-
-static float falloff_func_dist(PartDeflect *pd, float fac)
-{
- return falloff_func(fac, pd->flag&PFIELD_USEMIN, pd->mindist, pd->flag&PFIELD_USEMAX, pd->maxdist, pd->f_power);
-}
-
-static float falloff_func_rad(PartDeflect *pd, float fac)
-{
- return falloff_func(fac, pd->flag&PFIELD_USEMINR, pd->minrad, pd->flag&PFIELD_USEMAXR, pd->maxrad, pd->f_power_r);
-}
-
-static float effector_falloff(PartDeflect *pd, float *eff_velocity, float *vec_to_part)
-{
- float eff_dir[3], temp[3];
- float falloff=1.0, fac, r_fac;
-
- VecCopyf(eff_dir,eff_velocity);
- Normalize(eff_dir);
-
- if(pd->flag & PFIELD_POSZ && Inpf(eff_dir,vec_to_part)<0.0f)
- falloff=0.0f;
- else switch(pd->falloff){
- case PFIELD_FALL_SPHERE:
- fac=VecLength(vec_to_part);
- falloff= falloff_func_dist(pd, fac);
- break;
-
- case PFIELD_FALL_TUBE:
- fac=Inpf(vec_to_part,eff_dir);
- falloff= falloff_func_dist(pd, ABS(fac));
- if(falloff == 0.0f)
- break;
-
- VECADDFAC(temp,vec_to_part,eff_dir,-fac);
- r_fac=VecLength(temp);
- falloff*= falloff_func_rad(pd, r_fac);
- break;
- case PFIELD_FALL_CONE:
- fac=Inpf(vec_to_part,eff_dir);
- falloff= falloff_func_dist(pd, ABS(fac));
- if(falloff == 0.0f)
- break;
-
- r_fac=saacos(fac/VecLength(vec_to_part))*180.0f/(float)M_PI;
- falloff*= falloff_func_rad(pd, r_fac);
-
- break;
-// case PFIELD_FALL_INSIDE:
- //for(i=0; i<totface; i++,mface++){
- // VECCOPY(v1,mvert[mface->v1].co);
- // VECCOPY(v2,mvert[mface->v2].co);
- // VECCOPY(v3,mvert[mface->v3].co);
-
- // if(AxialLineIntersectsTriangle(a,co1, co2, v2, v3, v1, &lambda)){
- // if(from==PART_FROM_FACE)
- // (pa+(int)(lambda*size[a])*a0mul)->flag &= ~PARS_UNEXIST;
- // else /* store number of intersections */
- // (pa+(int)(lambda*size[a])*a0mul)->loop++;
- // }
- //
- // if(mface->v4){
- // VECCOPY(v4,mvert[mface->v4].co);
-
- // if(AxialLineIntersectsTriangle(a,co1, co2, v4, v1, v3, &lambda)){
- // if(from==PART_FROM_FACE)
- // (pa+(int)(lambda*size[a])*a0mul)->flag &= ~PARS_UNEXIST;
- // else
- // (pa+(int)(lambda*size[a])*a0mul)->loop++;
- // }
- // }
- //}
-
-// break;
- }
-
- return falloff;
-}
-static void do_physical_effector(short type, float force_val, float distance, float falloff, float size, float damp,
- float *eff_velocity, float *vec_to_part, float *velocity, float *field, int planar)
-{
- float mag_vec[3]={0,0,0};
- float temp[3], temp2[3];
- float eff_vel[3];
-
- VecCopyf(eff_vel,eff_velocity);
- Normalize(eff_vel);
-
- switch(type){
- case PFIELD_WIND:
- VECCOPY(mag_vec,eff_vel);
-
- VecMulf(mag_vec,force_val*falloff);
- VecAddf(field,field,mag_vec);
- break;
-
- case PFIELD_FORCE:
- if(planar)
- Projf(mag_vec,vec_to_part,eff_vel);
- else
- VecCopyf(mag_vec,vec_to_part);
-
- VecMulf(mag_vec,force_val*falloff);
- VecAddf(field,field,mag_vec);
- break;
-
- case PFIELD_VORTEX:
- Crossf(mag_vec,eff_vel,vec_to_part);
- Normalize(mag_vec);
-
- VecMulf(mag_vec,force_val*distance*falloff);
- VecAddf(field,field,mag_vec);
-
- break;
- case PFIELD_MAGNET:
- if(planar)
- VecCopyf(temp,eff_vel);
- else
- /* magnetic field of a moving charge */
- Crossf(temp,eff_vel,vec_to_part);
-
- Crossf(temp2,velocity,temp);
- VecAddf(mag_vec,mag_vec,temp2);
-
- VecMulf(mag_vec,force_val*falloff);
- VecAddf(field,field,mag_vec);
- break;
- case PFIELD_HARMONIC:
- if(planar)
- Projf(mag_vec,vec_to_part,eff_vel);
- else
- VecCopyf(mag_vec,vec_to_part);
-
- VecMulf(mag_vec,force_val*falloff);
- VecSubf(field,field,mag_vec);
-
- VecCopyf(mag_vec,velocity);
- /* 1.9 is an experimental value to get critical damping at damp=1.0 */
- VecMulf(mag_vec,damp*1.9f*(float)sqrt(force_val));
- VecSubf(field,field,mag_vec);
- break;
- case PFIELD_NUCLEAR:
- /*pow here is root of cosine expression below*/
- //rad=(float)pow(2.0,-1.0/power)*distance/size;
- //VECCOPY(mag_vec,vec_to_part);
- //Normalize(mag_vec);
- //VecMulf(mag_vec,(float)cos(3.0*M_PI/2.0*(1.0-1.0/(pow(rad,power)+1.0)))/(rad+0.2f));
- //VECADDFAC(field,field,mag_vec,force_val);
- break;
- }
-}
static void do_texture_effector(Tex *tex, short mode, short is_2d, float nabla, short object, float *pa_co, float obmat[4][4], float force_val, float falloff, float *field)
{
TexResult result[4];
@@ -2468,7 +2316,9 @@ static void add_to_effectors(ListBase *lb, Object *ob, Object *obsrc, ParticleSy
}
}
else if(pd->forcefield)
+ {
type |= PSYS_EC_EFFECTOR;
+ }
}
if(pd && pd->deflect)
@@ -2480,6 +2330,9 @@ static void add_to_effectors(ListBase *lb, Object *ob, Object *obsrc, ParticleSy
ec->type=type;
ec->distances=0;
ec->locations=0;
+ ec->rng = rng_new(1);
+ rng_srandom(ec->rng, (unsigned int)(ceil(PIL_check_seconds_timer()))); // use better seed
+
BLI_addtail(lb, ec);
}
@@ -2493,11 +2346,14 @@ static void add_to_effectors(ListBase *lb, Object *ob, Object *obsrc, ParticleSy
for(i=0; epsys; epsys=epsys->next,i++){
type=0;
- if(epsys!=psys){
+ if(epsys!=psys || (psys->part->flag & PART_SELF_EFFECT)){
epart=epsys->part;
- if(epsys->part->pd && epsys->part->pd->forcefield)
+ if((epsys->part->pd && epsys->part->pd->forcefield)
+ || (epsys->part->pd2 && epsys->part->pd2->forcefield))
+ {
type=PSYS_EC_PARTICLE;
+ }
if(epart->type==PART_REACTOR) {
tob=epsys->target_ob;
@@ -2512,6 +2368,9 @@ static void add_to_effectors(ListBase *lb, Object *ob, Object *obsrc, ParticleSy
ec->ob= ob;
ec->type=type;
ec->psys_nbr=i;
+ ec->rng = rng_new(1);
+ rng_srandom(ec->rng, (unsigned int)(ceil(PIL_check_seconds_timer())));
+
BLI_addtail(lb, ec);
}
}
@@ -2561,6 +2420,9 @@ void psys_init_effectors(Object *obsrc, Group *group, ParticleSystem *psys)
void psys_end_effectors(ParticleSystem *psys)
{
+ /* NOTE:
+ ec->ob is not valid in here anymore! - dg
+ */
ListBase *lb=&psys->effectors;
if(lb->first) {
ParticleEffectorCache *ec;
@@ -2579,20 +2441,24 @@ void psys_end_effectors(ParticleSystem *psys)
if(ec->tree)
BLI_kdtree_free(ec->tree);
+
+ if(ec->rng)
+ rng_free(ec->rng);
+
}
BLI_freelistN(lb);
}
}
-static void precalc_effectors(Object *ob, ParticleSystem *psys, ParticleSystemModifierData *psmd)
+static void precalc_effectors(Object *ob, ParticleSystem *psys, ParticleSystemModifierData *psmd, float cfra)
{
ListBase *lb=&psys->effectors;
ParticleEffectorCache *ec;
ParticleSettings *part=psys->part;
ParticleData *pa;
float vec2[3],loc[3],*co=0;
- int p,totpart,totvert;
+ int p,totpart;
for(ec= lb->first; ec; ec= ec->next) {
PartDeflect *pd= ec->ob->pd;
@@ -2617,7 +2483,7 @@ static void precalc_effectors(Object *ob, ParticleSystem *psys, ParticleSystemMo
ec->locations=MEM_callocN(totpart*3*sizeof(float),"particle locations");
for(p=0,pa=psys->particles; p<totpart; p++, pa++){
- psys_particle_on_emitter(ob,psmd,part->from,pa->num,pa->num_dmcache,pa->fuv,pa->foffset,loc,0,0,0,0,0);
+ psys_particle_on_emitter(psmd,part->from,pa->num,pa->num_dmcache,pa->fuv,pa->foffset,loc,0,0,0,0,0);
Mat4MulVecfl(ob->obmat,loc);
ec->distances[p]=VecLenf(loc,vec);
VECSUB(loc,loc,vec);
@@ -2625,96 +2491,18 @@ static void precalc_effectors(Object *ob, ParticleSystem *psys, ParticleSystemMo
}
}
}
- else if(ec->type==PSYS_EC_DEFLECT){
- DerivedMesh *dm;
- MFace *mface=0;
- MVert *mvert=0;
- int i, totface;
- float v1[3],v2[3],v3[3],v4[4], *min, *max;
-
- if(ob==ec->ob)
- dm=psmd->dm;
- else{
- psys_disable_all(ec->ob);
-
- dm=mesh_get_derived_final(ec->ob,0);
-
- psys_enable_all(ec->ob);
- }
-
- if(dm){
- totvert=dm->getNumVerts(dm);
- totface=dm->getNumFaces(dm);
- mface=dm->getFaceDataArray(dm,CD_MFACE);
- mvert=dm->getVertDataArray(dm,CD_MVERT);
-
- /* Decide which is faster to calculate by the amount of*/
- /* matrice multiplications needed to convert spaces. */
- /* With size deflect we have to convert allways because */
- /* the object can be scaled nonuniformly (sphere->ellipsoid). */
- if(totvert<2*psys->totpart || part->flag & PART_SIZE_DEFL){
- co=ec->vert_cos=MEM_callocN(sizeof(float)*3*totvert,"Particle deflection vert cos");
- /* convert vert coordinates to global (particle) coordinates */
- for(i=0; i<totvert; i++, co+=3){
- VECCOPY(co,mvert[i].co);
- Mat4MulVecfl(ec->ob->obmat,co);
- }
- co=ec->vert_cos;
- }
- else
- ec->vert_cos=0;
-
- INIT_MINMAX(ec->ob_minmax,ec->ob_minmax+3);
-
- min=ec->face_minmax=MEM_callocN(sizeof(float)*6*totface,"Particle deflection face minmax");
- max=min+3;
-
- for(i=0; i<totface; i++,mface++,min+=6,max+=6){
- if(co){
- VECCOPY(v1,co+3*mface->v1);
- VECCOPY(v2,co+3*mface->v2);
- VECCOPY(v3,co+3*mface->v3);
- }
- else{
- VECCOPY(v1,mvert[mface->v1].co);
- VECCOPY(v2,mvert[mface->v2].co);
- VECCOPY(v3,mvert[mface->v3].co);
- }
- INIT_MINMAX(min,max);
- DO_MINMAX(v1,min,max);
- DO_MINMAX(v2,min,max);
- DO_MINMAX(v3,min,max);
-
- if(mface->v4){
- if(co){
- VECCOPY(v4,co+3*mface->v4);
- }
- else{
- VECCOPY(v4,mvert[mface->v4].co);
- }
- DO_MINMAX(v4,min,max);
- }
-
- DO_MINMAX(min,ec->ob_minmax,ec->ob_minmax+3);
- DO_MINMAX(max,ec->ob_minmax,ec->ob_minmax+3);
- }
- }
- else
- ec->face_minmax=0;
- }
else if(ec->type==PSYS_EC_PARTICLE){
+ Object *eob = ec->ob;
+ ParticleSystem *epsys = BLI_findlink(&eob->particlesystem,ec->psys_nbr);
+ ParticleSettings *epart = epsys->part;
+ ParticleData *epa;
+ int p, totepart = epsys->totpart;
+
if(psys->part->phystype==PART_PHYS_BOIDS){
- Object *eob = ec->ob;
- ParticleSystem *epsys;
- ParticleSettings *epart;
- ParticleData *epa;
ParticleKey state;
PartDeflect *pd;
- int totepart, p;
- epsys= BLI_findlink(&eob->particlesystem,ec->psys_nbr);
- epart= epsys->part;
+
pd= epart->pd;
- totepart= epsys->totpart;
if(pd->forcefield==PFIELD_FORCE && totepart){
KDTree *tree;
@@ -2728,6 +2516,12 @@ static void precalc_effectors(Object *ob, ParticleSystem *psys, ParticleSystemMo
BLI_kdtree_balance(tree);
}
}
+
+ }
+ else if(ec->type==PSYS_EC_DEFLECT) {
+ CollisionModifierData *collmd = ( CollisionModifierData * ) ( modifiers_findByType ( ec->ob, eModifierType_Collision ) );
+ if(collmd)
+ collision_move_object(collmd, 1.0, 0.0);
}
}
}
@@ -2745,35 +2539,31 @@ void do_effectors(int pa_no, ParticleData *pa, ParticleKey *state, Object *ob, P
ListBase *lb=&psys->effectors;
ParticleEffectorCache *ec;
float distance, vec_to_part[3];
- float falloff;
+ float falloff, charge = 0.0f;
int p;
/* check all effector objects for interaction */
if(lb->first){
+ if(psys->part->pd && psys->part->pd->forcefield==PFIELD_CHARGE){
+ /* Only the charge of the effected particle is used for
+ interaction, not fall-offs. If the fall-offs aren't the
+ same this will be unphysical, but for animation this
+ could be the wanted behavior. If you want physical
+ correctness the fall-off should be spherical 2.0 anyways.
+ */
+ charge = psys->part->pd->f_strength;
+ }
+ if(psys->part->pd2 && psys->part->pd2->forcefield==PFIELD_CHARGE){
+ charge += psys->part->pd2->f_strength;
+ }
for(ec = lb->first; ec; ec= ec->next){
eob= ec->ob;
if(ec->type & PSYS_EC_EFFECTOR){
pd=eob->pd;
if(psys->part->type!=PART_HAIR && psys->part->integrator)
where_is_object_time(eob,cfra);
- /* Get IPO force strength and fall off values here */
- //if (has_ipo_code(eob->ipo, OB_PD_FSTR))
- // force_val = IPO_GetFloatValue(eob->ipo, OB_PD_FSTR, cfra);
- //else
- // force_val = pd->f_strength;
-
- //if (has_ipo_code(eob->ipo, OB_PD_FFALL))
- // ffall_val = IPO_GetFloatValue(eob->ipo, OB_PD_FFALL, cfra);
- //else
- // ffall_val = pd->f_power;
-
- //if (has_ipo_code(eob->ipo, OB_PD_FMAXD))
- // maxdist = IPO_GetFloatValue(eob->ipo, OB_PD_FMAXD, cfra);
- //else
- // maxdist = pd->maxdist;
/* use center of object for distance calculus */
- //obloc= eob->obmat[3];
VecSubf(vec_to_part, state->co, eob->obmat[3]);
distance = VecLength(vec_to_part);
@@ -2786,22 +2576,22 @@ void do_effectors(int pa_no, ParticleData *pa, ParticleKey *state, Object *ob, P
pd->flag & PFIELD_TEX_OBJECT, (pd->flag & PFIELD_TEX_ROOTCO) ? rootco : state->co, eob->obmat,
pd->f_strength, falloff, force_field);
} else {
- do_physical_effector(pd->forcefield,pd->f_strength,distance,
- falloff,pd->f_dist,pd->f_damp,eob->obmat[2],vec_to_part,
- pa->state.vel,force_field,pd->flag&PFIELD_PLANAR);
+ do_physical_effector(eob, state->co, pd->forcefield,pd->f_strength,distance,
+ falloff,0.0,pd->f_damp,eob->obmat[2],vec_to_part,
+ state->vel,force_field,pd->flag&PFIELD_PLANAR,ec->rng,pd->f_noise,charge,pa->size);
}
}
if(ec->type & PSYS_EC_PARTICLE){
- int totepart;
+ int totepart, i;
epsys= BLI_findlink(&eob->particlesystem,ec->psys_nbr);
epart= epsys->part;
- pd= epart->pd;
+ pd=epart->pd;
totepart= epsys->totpart;
if(totepart <= 0)
continue;
- if(pd->forcefield==PFIELD_HARMONIC){
+ if(pd && pd->forcefield==PFIELD_HARMONIC){
/* every particle is mapped to only one harmonic effector particle */
p= pa_no%epsys->totpart;
totepart= p+1;
@@ -2813,33 +2603,29 @@ void do_effectors(int pa_no, ParticleData *pa, ParticleKey *state, Object *ob, P
epsys->lattice=psys_get_lattice(ob,psys);
for(; p<totepart; p++){
+ /* particle skips itself as effector */
+ if(epsys==psys && p == pa_no) continue;
+
epa = epsys->particles + p;
- estate.time=-1.0;
+ estate.time=cfra;
if(psys_get_particle_state(eob,epsys,p,&estate,0)){
VECSUB(vec_to_part, state->co, estate.co);
distance = VecLength(vec_to_part);
-
- //if(pd->forcefield==PFIELD_HARMONIC){
- // //if(cfra < epa->time + radius){ /* radius is fade-in in ui */
- // // eforce*=(cfra-epa->time)/radius;
- // //}
- //}
- //else{
- // /* Limit minimum distance to effector particle so that */
- // /* the force is not too big */
- // if (distance < 0.001) distance = 0.001f;
- //}
- falloff=effector_falloff(pd,estate.vel,vec_to_part);
+ for(i=0, pd = epart->pd; i<2; i++,pd = epart->pd2) {
+ if(pd==NULL || pd->forcefield==0) continue;
- if(falloff<=0.0f)
- ; /* don't do anything */
- else
- do_physical_effector(pd->forcefield,pd->f_strength,distance,
- falloff,epart->size,pd->f_damp,estate.vel,vec_to_part,
- state->vel,force_field,0);
+ falloff=effector_falloff(pd,estate.vel,vec_to_part);
+
+ if(falloff<=0.0f)
+ ; /* don't do anything */
+ else
+ do_physical_effector(eob, state->co, pd->forcefield,pd->f_strength,distance,
+ falloff,epart->size,pd->f_damp,estate.vel,vec_to_part,
+ state->vel,force_field,0, ec->rng, pd->f_noise,charge,pa->size);
+ }
}
- else if(pd->forcefield==PFIELD_HARMONIC && cfra-framestep <= epa->dietime && cfra>epa->dietime){
+ else if(pd && pd->forcefield==PFIELD_HARMONIC && cfra-framestep <= epa->dietime && cfra>epa->dietime){
/* first step after key release */
psys_get_particle_state(eob,epsys,p,&estate,1);
VECADD(vel,vel,estate.vel);
@@ -2860,7 +2646,7 @@ void do_effectors(int pa_no, ParticleData *pa, ParticleKey *state, Object *ob, P
/* Newtonian physics */
/************************************************/
/* gathers all forces that effect particles and calculates a new state for the particle */
-static void apply_particle_forces(int pa_no, ParticleData *pa, Object *ob, ParticleSystem *psys, ParticleSettings *part, float timestep, float dfra, float cfra, ParticleKey *state)
+static void apply_particle_forces(int pa_no, ParticleData *pa, Object *ob, ParticleSystem *psys, ParticleSettings *part, float timestep, float dfra, float cfra)
{
ParticleKey states[5], tkey;
float force[3],tvel[3],dx[4][3],dv[4][3];
@@ -2868,7 +2654,7 @@ static void apply_particle_forces(int pa_no, ParticleData *pa, Object *ob, Parti
int i, steps=1;
/* maintain angular velocity */
- VECCOPY(state->ave,pa->state.ave);
+ VECCOPY(pa->state.ave,pa->prev_state.ave);
if(part->flag & PART_SIZEMASS)
pa_mass*=pa->size;
@@ -2918,8 +2704,8 @@ static void apply_particle_forces(int pa_no, ParticleData *pa, Object *ob, Parti
switch(part->integrator){
case PART_INT_EULER:
- VECADDFAC(state->co,states->co,states->vel,dtime);
- VECADDFAC(state->vel,states->vel,force,dtime);
+ VECADDFAC(pa->state.co,states->co,states->vel,dtime);
+ VECADDFAC(pa->state.vel,states->vel,force,dtime);
break;
case PART_INT_MIDPOINT:
if(i==0){
@@ -2928,8 +2714,8 @@ static void apply_particle_forces(int pa_no, ParticleData *pa, Object *ob, Parti
fra=psys->cfra+0.5f*dfra;
}
else{
- VECADDFAC(state->co,states->co,states[1].vel,dtime);
- VECADDFAC(state->vel,states->vel,force,dtime);
+ VECADDFAC(pa->state.co,states->co,states[1].vel,dtime);
+ VECADDFAC(pa->state.vel,states->vel,force,dtime);
}
break;
case PART_INT_RK4:
@@ -2969,15 +2755,15 @@ static void apply_particle_forces(int pa_no, ParticleData *pa, Object *ob, Parti
VECCOPY(dv[3],force);
VecMulf(dv[3],dtime);
- VECADDFAC(state->co,states->co,dx[0],1.0f/6.0f);
- VECADDFAC(state->co,state->co,dx[1],1.0f/3.0f);
- VECADDFAC(state->co,state->co,dx[2],1.0f/3.0f);
- VECADDFAC(state->co,state->co,dx[3],1.0f/6.0f);
+ VECADDFAC(pa->state.co,states->co,dx[0],1.0f/6.0f);
+ VECADDFAC(pa->state.co,pa->state.co,dx[1],1.0f/3.0f);
+ VECADDFAC(pa->state.co,pa->state.co,dx[2],1.0f/3.0f);
+ VECADDFAC(pa->state.co,pa->state.co,dx[3],1.0f/6.0f);
- VECADDFAC(state->vel,states->vel,dv[0],1.0f/6.0f);
- VECADDFAC(state->vel,state->vel,dv[1],1.0f/3.0f);
- VECADDFAC(state->vel,state->vel,dv[2],1.0f/3.0f);
- VECADDFAC(state->vel,state->vel,dv[3],1.0f/6.0f);
+ VECADDFAC(pa->state.vel,states->vel,dv[0],1.0f/6.0f);
+ VECADDFAC(pa->state.vel,pa->state.vel,dv[1],1.0f/3.0f);
+ VECADDFAC(pa->state.vel,pa->state.vel,dv[2],1.0f/3.0f);
+ VECADDFAC(pa->state.vel,pa->state.vel,dv[3],1.0f/6.0f);
}
break;
}
@@ -2985,62 +2771,62 @@ static void apply_particle_forces(int pa_no, ParticleData *pa, Object *ob, Parti
/* damp affects final velocity */
if(part->dampfac!=0.0)
- VecMulf(state->vel,1.0f-part->dampfac);
+ VecMulf(pa->state.vel,1.0f-part->dampfac);
/* finally we do guides */
time=(cfra-pa->time)/pa->lifetime;
CLAMP(time,0.0,1.0);
- VECCOPY(tkey.co,state->co);
- VECCOPY(tkey.vel,state->vel);
- tkey.time=state->time;
+ VECCOPY(tkey.co,pa->state.co);
+ VECCOPY(tkey.vel,pa->state.vel);
+ tkey.time=pa->state.time;
if(part->type != PART_HAIR) {
if(do_guide(&tkey,pa_no,time,&psys->effectors)) {
- VECCOPY(state->co,tkey.co);
+ VECCOPY(pa->state.co,tkey.co);
/* guides don't produce valid velocity */
- VECSUB(state->vel,tkey.co,pa->state.co);
- VecMulf(state->vel,1.0f/dtime);
- state->time=tkey.time;
+ VECSUB(pa->state.vel,tkey.co,pa->prev_state.co);
+ VecMulf(pa->state.vel,1.0f/dtime);
+ pa->state.time=tkey.time;
}
}
}
-static void rotate_particle(ParticleSettings *part, ParticleData *pa, float dfra, float timestep, ParticleKey *state)
+static void rotate_particle(ParticleSettings *part, ParticleData *pa, float dfra, float timestep)
{
float rotfac, rot1[4], rot2[4]={1.0,0.0,0.0,0.0}, dtime=dfra*timestep;
if((part->flag & PART_ROT_DYN)==0){
if(part->avemode==PART_AVE_SPIN){
float angle;
- float len1 = VecLength(pa->state.vel);
- float len2 = VecLength(state->vel);
+ float len1 = VecLength(pa->prev_state.vel);
+ float len2 = VecLength(pa->state.vel);
if(len1==0.0f || len2==0.0f)
- state->ave[0]=state->ave[1]=state->ave[2]=0.0f;
+ pa->state.ave[0]=pa->state.ave[1]=pa->state.ave[2]=0.0f;
else{
- Crossf(state->ave,pa->state.vel,state->vel);
- Normalize(state->ave);
- angle=Inpf(pa->state.vel,state->vel)/(len1*len2);
- VecMulf(state->ave,saacos(angle)/dtime);
+ Crossf(pa->state.ave,pa->prev_state.vel,pa->state.vel);
+ Normalize(pa->state.ave);
+ angle=Inpf(pa->prev_state.vel,pa->state.vel)/(len1*len2);
+ VecMulf(pa->state.ave,saacos(angle)/dtime);
}
- VecRotToQuat(state->vel,dtime*part->avefac,rot2);
+ VecRotToQuat(pa->state.vel,dtime*part->avefac,rot2);
}
}
- rotfac=VecLength(state->ave);
+ rotfac=VecLength(pa->state.ave);
if(rotfac==0.0){ /* QuatOne (in VecRotToQuat) doesn't give unit quat [1,0,0,0]?? */
rot1[0]=1.0;
rot1[1]=rot1[2]=rot1[3]=0;
}
else{
- VecRotToQuat(state->ave,rotfac*dtime,rot1);
+ VecRotToQuat(pa->state.ave,rotfac*dtime,rot1);
}
- QuatMul(state->rot,rot1,pa->state.rot);
- QuatMul(state->rot,rot2,state->rot);
+ QuatMul(pa->state.rot,rot1,pa->prev_state.rot);
+ QuatMul(pa->state.rot,rot2,pa->state.rot);
/* keep rotation quat in good health */
- NormalQuat(state->rot);
+ NormalQuat(pa->state.rot);
}
/* convert from triangle barycentric weights to quad mean value weights */
@@ -3075,7 +2861,7 @@ int psys_intersect_dm(Object *ob, DerivedMesh *dm, float *vert_cos, float *co1,
dm=mesh_get_derived_final(ob,0);
if(dm==0)
- mesh_get_derived_deform(ob,0);
+ dm=mesh_get_derived_deform(ob,0);
psys_enable_all(ob);
@@ -3185,37 +2971,122 @@ int psys_intersect_dm(Object *ob, DerivedMesh *dm, float *vert_cos, float *co1,
}
return intersect;
}
+
+/* container for moving data between deflet_particle and particle_intersect_face */
+typedef struct ParticleCollision
+{
+ struct Object *ob, *ob_t; // collided and current objects
+ struct CollisionModifierData *md; // collision modifier for ob_t;
+ float nor[3]; // normal at collision point
+ float vel[3]; // velocity of collision point
+ float co1[3], co2[3]; // ray start and end points
+ float ray_len; // original length of co2-co1, needed for collision time evaluation
+ float t; // time of previous collision, needed for substracting face velocity
+}
+ParticleCollision;
+
+static void particle_intersect_face(void *userdata, int index, const BVHTreeRay *ray, BVHTreeRayHit *hit)
+{
+ ParticleCollision *col = (ParticleCollision *) userdata;
+ MFace *face = col->md->mfaces + index;
+ MVert *x = col->md->x;
+ MVert *v = col->md->current_v;
+ float vel[3], co1[3], co2[3], uv[2], ipoint[3], temp[3], t;
+
+ float *t0, *t1, *t2, *t3;
+ t0 = x[ face->v1 ].co;
+ t1 = x[ face->v2 ].co;
+ t2 = x[ face->v3 ].co;
+ t3 = face->v4 ? x[ face->v4].co : NULL;
+
+ /* calculate average velocity of face */
+ VECCOPY(vel, v[ face->v1 ].co);
+ VECADD(vel, vel, v[ face->v2 ].co);
+ VECADD(vel, vel, v[ face->v3 ].co);
+ VecMulf(vel, 0.33334f);
+
+ /* substract face velocity, in other words convert to
+ a coordinate system where only the particle moves */
+ VECADDFAC(co1, col->co1, vel, -col->t);
+ VECSUB(co2, col->co2, vel);
+
+ do
+ {
+ if(ray->radius == 0.0f) {
+ if(LineIntersectsTriangle(co1, co2, t0, t1, t2, &t, uv)) {
+ if(t >= 0.0f && t < hit->dist/col->ray_len) {
+ hit->dist = col->ray_len * t;
+ hit->index = index;
+
+ /* calculate normal that's facing the particle */
+ CalcNormFloat(t0, t1, t2, col->nor);
+ VECSUB(temp, co2, co1);
+ if(Inpf(col->nor, temp) > 0.0f)
+ VecMulf(col->nor, -1.0f);
+
+ VECCOPY(col->vel,vel);
+
+ col->ob = col->ob_t;
+ }
+ }
+ }
+ else {
+ if(SweepingSphereIntersectsTriangleUV(co1, co2, ray->radius, t0, t1, t2, &t, ipoint)) {
+ if(t >=0.0f && t < hit->dist/col->ray_len) {
+ hit->dist = col->ray_len * t;
+ hit->index = index;
+
+ VecLerpf(temp, co1, co2, t);
+
+ VECSUB(col->nor, temp, ipoint);
+ Normalize(col->nor);
+
+ VECCOPY(col->vel,vel);
+
+ col->ob = col->ob_t;
+ }
+ }
+ }
+
+ t1 = t2;
+ t2 = t3;
+ t3 = NULL;
+
+ } while(t2);
+}
/* particle - mesh collision code */
/* in addition to basic point to surface collisions handles friction & damping,*/
/* angular momentum <-> linear momentum and swept sphere - mesh collisions */
/* 1. check for all possible deflectors for closest intersection on particle path */
/* 2. if deflection was found kill the particle or calculate new coordinates */
-static void deflect_particle(Object *pob, ParticleSystemModifierData *psmd, ParticleSystem *psys, ParticleSettings *part, ParticleData *pa, int p, float dfra, float cfra, ParticleKey *state, int *pa_die){
- Object *ob, *min_ob;
- MFace *mface;
- MVert *mvert;
- DerivedMesh *dm;
+static void deflect_particle(Object *pob, ParticleSystemModifierData *psmd, ParticleSystem *psys, ParticleSettings *part, ParticleData *pa, int p, float timestep, float dfra, float cfra){
+ Object *ob = NULL;
ListBase *lb=&psys->effectors;
ParticleEffectorCache *ec;
- ParticleKey cstate;
- float imat[4][4];
- float co1[3],co2[3],def_loc[3],def_nor[3],unit_nor[3],def_tan[3],dvec[3],def_vel[3],dave[3],dvel[3];
- float pa_minmax[6];
- float min_w[4], zerovec[3]={0.0,0.0,0.0}, ipoint[3];
- float min_d,dotprod,damp,frict,o_len,d_len,radius=-1.0f;
- int min_face=0, intersect=1, through=0;
- short deflections=0, global=0;
+ ParticleKey reaction_state;
+ ParticleCollision col;
+ BVHTreeRayHit hit;
+ float ray_dir[3], zerovec[3]={0.0,0.0,0.0};
+ float radius = ((part->flag & PART_SIZE_DEFL)?pa->size:0.0f);
+ int deflections=0, max_deflections=10;
- VECCOPY(def_loc,pa->state.co);
- VECCOPY(def_vel,pa->state.vel);
+ VECCOPY(col.co1, pa->prev_state.co);
+ VECCOPY(col.co2, pa->state.co);
+ col.t = 0.0f;
/* 10 iterations to catch multiple deflections */
- if(lb->first) while(deflections<10){
- intersect=0;
- global=0;
- min_d=20000.0;
- min_ob=NULL;
+ if(lb->first) while(deflections < max_deflections){
/* 1. */
+
+ VECSUB(ray_dir, col.co2, col.co1);
+ hit.index = -1;
+ hit.dist = col.ray_len = VecLength(ray_dir);
+
+ /* even if particle is stationary we want to check for moving colliders */
+ /* if hit.dist is zero the bvhtree_ray_cast will just ignore everything */
+ if(hit.dist == 0.0f)
+ hit.dist = col.ray_len = 0.000001f;
+
for(ec=lb->first; ec; ec=ec->next){
if(ec->type & PSYS_EC_DEFLECT){
ob= ec->ob;
@@ -3223,263 +3094,168 @@ static void deflect_particle(Object *pob, ParticleSystemModifierData *psmd, Part
if(part->type!=PART_HAIR)
where_is_object_time(ob,cfra);
- if(ob==pob){
- dm=psmd->dm;
- /* particles should not collide with emitter at birth */
- if(pa->time < cfra && pa->time >= psys->cfra)
- continue;
- }
- else
- dm=0;
-
- VECCOPY(co1,def_loc);
- VECCOPY(co2,state->co);
-
- if(ec->vert_cos==0){
- /* convert particle coordinates to object coordinates */
- Mat4Invert(imat,ob->obmat);
- Mat4MulVecfl(imat,co1);
- Mat4MulVecfl(imat,co2);
- }
-
- INIT_MINMAX(pa_minmax,pa_minmax+3);
- DO_MINMAX(co1,pa_minmax,pa_minmax+3);
- DO_MINMAX(co2,pa_minmax,pa_minmax+3);
- if(part->flag&PART_SIZE_DEFL){
- pa_minmax[0]-=pa->size;
- pa_minmax[1]-=pa->size;
- pa_minmax[2]-=pa->size;
- pa_minmax[3]+=pa->size;
- pa_minmax[4]+=pa->size;
- pa_minmax[5]+=pa->size;
-
- radius=pa->size;
- }
-
- if(ec->face_minmax==0 || AabbIntersectAabb(pa_minmax,pa_minmax+3,ec->ob_minmax,ec->ob_minmax+3)) {
- if(psys_intersect_dm(ob,dm,ec->vert_cos,co1,co2,&min_d,&min_face,min_w,
- ec->face_minmax,pa_minmax,radius,ipoint)){
+ /* particles should not collide with emitter at birth */
+ if(ob==pob && pa->time < cfra && pa->time >= psys->cfra)
+ continue;
- min_ob=ob;
+ col.md = ( CollisionModifierData * ) ( modifiers_findByType ( ec->ob, eModifierType_Collision ) );
+ col.ob_t = ob;
- if(ec->vert_cos)
- global=1;
- else
- global=0;
- }
- }
+ if(col.md->bvhtree)
+ BLI_bvhtree_ray_cast(col.md->bvhtree, col.co1, ray_dir, radius, &hit, particle_intersect_face, &col);
}
}
/* 2. */
- if(min_ob){
- BLI_srandom((int)cfra+p);
- ob=min_ob;
-
- if(ob==pob){
- dm=psmd->dm;
- }
- else{
- psys_disable_all(ob);
-
- dm=mesh_get_derived_final(ob,0);
-
- psys_enable_all(ob);
- }
-
- mface=dm->getFaceDataArray(dm,CD_MFACE);
- mface+=min_face;
- mvert=dm->getVertDataArray(dm,CD_MVERT);
-
- /* permeability check */
- if(BLI_frand()<ob->pd->pdef_perm)
- through=1;
- else
- through=0;
-
- if(through==0 && (part->flag & PART_DIE_ON_COL || ob->pd->flag & PDEFLE_KILL_PART)){
- pa->dietime = cfra-(1.0f-min_d)*dfra;
- VecLerpf(def_loc,def_loc,state->co,min_d);
-
- VECCOPY(state->co,def_loc);
- VecLerpf(state->vel,pa->state.vel,state->vel,min_d);
- QuatInterpol(state->rot,pa->state.rot,state->rot,min_d);
- VecLerpf(state->ave,pa->state.ave,state->ave,min_d);
+ if(hit.index>=0) {
+ PartDeflect *pd = col.ob->pd;
+ int through = (BLI_frand() < pd->pdef_perm) ? 1 : 0;
+ float co[3]; /* point of collision */
+ float vec[3]; /* movement through collision */
+ float t = hit.dist/col.ray_len; /* time of collision between this iteration */
+ float dt = col.t + t * (1.0f - col.t); /* time of collision between frame change*/
+
+ VecLerpf(co, col.co1, col.co2, t);
+ VECSUB(vec, col.co2, col.co1);
+
+ VecMulf(col.vel, 1.0f-col.t);
+
+ /* particle dies in collision */
+ if(through == 0 && (part->flag & PART_DIE_ON_COL || pd->flag & PDEFLE_KILL_PART)) {
+ pa->alive = PARS_DYING;
+ pa->dietime = pa->state.time + (cfra - pa->state.time) * dt;
+
+ /* we have to add this for dying particles too so that reactors work correctly */
+ VECADDFAC(co, co, col.nor, (through ? -0.0001f : 0.0001f));
- *pa_die=1;
+ VECCOPY(pa->state.co, co);
+ VecLerpf(pa->state.vel, pa->prev_state.vel, pa->state.vel, dt);
+ QuatInterpol(pa->state.rot, pa->prev_state.rot, pa->state.rot, dt);
+ VecLerpf(pa->state.ave, pa->prev_state.ave, pa->state.ave, dt);
/* particle is dead so we don't need to calculate further */
- deflections=10;
+ deflections=max_deflections;
/* store for reactors */
- copy_particle_key(&cstate,state,0);
+ copy_particle_key(&reaction_state,&pa->state,0);
if(part->flag & PART_STICKY){
pa->stick_ob=ob;
pa->flag |= PARS_STICKY;
}
}
- else{
- VECCOPY(co1,def_loc);
- VECCOPY(co2,state->co);
+ else {
+ float nor_vec[3], tan_vec[3], tan_vel[3], vel[3];
+ float damp, frict;
+ float inp, inp_v;
+
+ /* get damping & friction factors */
+ damp = pd->pdef_damp + pd->pdef_rdamp * 2 * (BLI_frand() - 0.5f);
+ CLAMP(damp,0.0,1.0);
- if(global==0){
- /* convert particle coordinates to object coordinates */
- Mat4Invert(imat,ob->obmat);
- Mat4MulVecfl(imat,co1);
- Mat4MulVecfl(imat,co2);
- }
+ frict = pd->pdef_frict + pd->pdef_rfrict * 2 * (BLI_frand() - 0.5f);
+ CLAMP(frict,0.0,1.0);
- VecLerpf(def_loc,co1,co2,min_d);
+ /* treat normal & tangent components separately */
+ inp = Inpf(col.nor, vec);
+ inp_v = Inpf(col.nor, col.vel);
- if(radius>0.0f){
- VECSUB(unit_nor,def_loc,ipoint);
- }
- else{
- /* get deflection point & normal */
- psys_interpolate_face(mvert,mface,0,0,min_w,ipoint,unit_nor,0,0,0,0);
- if(global){
- Mat4Mul3Vecfl(ob->obmat,unit_nor);
- Mat4MulVecfl(ob->obmat,ipoint);
- }
- }
+ VECADDFAC(tan_vec, vec, col.nor, -inp);
+ VECADDFAC(tan_vel, col.vel, col.nor, -inp_v);
+ if((part->flag & PART_ROT_DYN)==0)
+ VecLerpf(tan_vec, tan_vec, tan_vel, frict);
- Normalize(unit_nor);
+ VECCOPY(nor_vec, col.nor);
+ inp *= 1.0f - damp;
- VECSUB(dvec,co1,co2);
- /* scale to remaining length after deflection */
- VecMulf(dvec,1.0f-min_d);
+ if(through)
+ inp_v *= damp;
- /* flip normal to face particle */
- if(Inpf(unit_nor,dvec)<0.0f)
- VecMulf(unit_nor,-1.0f);
+ /* special case for object hitting the particle from behind */
+ if(through==0 && ((inp_v>0 && inp>0 && inp_v>inp) || (inp_v<0 && inp<0 && inp_v<inp)))
+ VecMulf(nor_vec, inp_v);
+ else
+ VecMulf(nor_vec, inp_v + (through ? 1.0f : -1.0f) * inp);
- /* store for easy velocity calculation */
- o_len=VecLength(dvec);
+ /* angular <-> linear velocity - slightly more physical and looks even nicer than before */
+ if(part->flag & PART_ROT_DYN) {
+ float surface_vel[3], rot_vel[3], friction[3], dave[3], dvel[3];
- /* project particle movement to normal & create tangent */
- dotprod=Inpf(dvec,unit_nor);
- VECCOPY(def_nor,unit_nor);
- VecMulf(def_nor,dotprod);
- VECSUB(def_tan,def_nor,dvec);
+ /* apparent velocity along collision surface */
+ VECSUB(surface_vel, tan_vec, tan_vel);
- damp=ob->pd->pdef_damp+ob->pd->pdef_rdamp*2*(BLI_frand()-0.5f);
+ /* direction of rolling friction */
+ Crossf(rot_vel, pa->state.ave, col.nor);
+ /* convert to current dt */
+ VecMulf(rot_vel, (timestep*dfra) * (1.0f - col.t));
+ VecMulf(rot_vel, pa->size);
- /* create location after deflection */
- VECCOPY(dvec,def_nor);
- damp=ob->pd->pdef_damp+ob->pd->pdef_rdamp*2*(BLI_frand()-0.5f);
- CLAMP(damp,0.0,1.0);
- VecMulf(dvec,1.0f-damp);
- if(through)
- VecMulf(dvec,-1.0);
-
- frict=ob->pd->pdef_frict+ob->pd->pdef_rfrict*2.0f*(BLI_frand()-0.5f);
- CLAMP(frict,0.0,1.0);
- VECADDFAC(dvec,dvec,def_tan,1.0f-frict);
+ /* apply sliding friction */
+ VECSUB(surface_vel, surface_vel, rot_vel);
+ VECCOPY(friction, surface_vel);
- /* store for easy velocity calculation */
- d_len=VecLength(dvec);
+ VecMulf(surface_vel, 1.0 - frict);
+ VecMulf(friction, frict);
- /* just to be sure we don't hit the current face again */
- if(through){
- VECADDFAC(ipoint,ipoint,unit_nor,-0.0001f);
- VECADDFAC(def_loc,def_loc,unit_nor,-0.0001f);
+ /* sliding changes angular velocity */
+ Crossf(dave, col.nor, friction);
+ VecMulf(dave, 1.0f/MAX2(pa->size, 0.001));
- if(part->flag & PART_ROT_DYN){
- VECADDFAC(def_tan,def_tan,unit_nor,-0.0001f);
- VECADDFAC(def_nor,def_nor,unit_nor,-0.0001f);
- }
- }
- else{
- VECADDFAC(ipoint,ipoint,unit_nor,0.0001f);
- VECADDFAC(def_loc,def_loc,unit_nor,0.0001f);
+ /* we assume rolling friction is around 0.01 of sliding friction */
+ VecMulf(rot_vel, 1.0 - frict*0.01);
- if(part->flag & PART_ROT_DYN){
- VECADDFAC(def_tan,def_tan,unit_nor,0.0001f);
- VECADDFAC(def_nor,def_nor,unit_nor,0.0001f);
- }
- }
+ /* change in angular velocity has to be added to the linear velocity too */
+ Crossf(dvel, dave, col.nor);
+ VecMulf(dvel, pa->size);
+ VECADD(rot_vel, rot_vel, dvel);
- /* lets get back to global space */
- if(global==0){
- Mat4Mul3Vecfl(ob->obmat,dvec);
- Mat4MulVecfl(ob->obmat,ipoint);
- Mat4MulVecfl(ob->obmat,def_loc);/* def_loc remains as intersection point for next iteration */
- }
+ VECADD(surface_vel, surface_vel, rot_vel);
+ VECADD(tan_vec, surface_vel, tan_vel);
- /* store for reactors */
- VECCOPY(cstate.co,ipoint);
- VecLerpf(cstate.vel,pa->state.vel,state->vel,min_d);
- QuatInterpol(cstate.rot,pa->state.rot,state->rot,min_d);
-
- /* slightly unphysical but looks nice enough */
- if(part->flag & PART_ROT_DYN){
- if(global==0){
- Mat4Mul3Vecfl(ob->obmat,def_nor);
- Mat4Mul3Vecfl(ob->obmat,def_tan);
- }
+ /* convert back to normal time */
+ VecMulf(dave, 1.0f/MAX2((timestep*dfra) * (1.0f - col.t), 0.00001));
- Normalize(def_tan);
- Normalize(def_nor);
- VECCOPY(unit_nor,def_nor);
+ VecMulf(pa->state.ave, 1.0 - frict*0.01);
+ VECADD(pa->state.ave, pa->state.ave, dave);
+ }
- /* create normal velocity */
- VecMulf(def_nor,Inpf(pa->state.vel,def_nor));
+ /* combine components together again */
+ VECADD(vec, nor_vec, tan_vec);
- /* create tangential velocity */
- VecMulf(def_tan,Inpf(pa->state.vel,def_tan));
-
- /* angular velocity change due to tangential velocity */
- Crossf(dave,unit_nor,def_tan);
- VecMulf(dave,1.0f/pa->size);
+ /* calculate velocity from collision vector */
+ VECCOPY(vel, vec);
+ VecMulf(vel, 1.0f/MAX2((timestep*dfra) * (1.0f - col.t), 0.00001));
- /* linear velocity change due to angular velocity */
- VecMulf(unit_nor,pa->size); /* point of impact from particle center */
- Crossf(dvel,pa->state.ave,unit_nor);
+ /* make sure we don't hit the current face again */
+ VECADDFAC(co, co, col.nor, (through ? -0.0001f : 0.0001f));
- if(through)
- VecMulf(def_nor,-1.0);
+ /* store state for reactors */
+ VECCOPY(reaction_state.co, co);
+ VecLerpf(reaction_state.vel, pa->prev_state.vel, pa->state.vel, dt);
+ QuatInterpol(reaction_state.rot, pa->prev_state.rot, pa->state.rot, dt);
- VecMulf(def_nor,1.0f-damp);
- VECSUB(dvel,dvel,def_nor);
+ /* set coordinates for next iteration */
+ VECCOPY(col.co1, co);
+ VECADDFAC(col.co2, co, vec, 1.0f - t);
+ col.t = dt;
- VecMulf(dvel,1.0f-frict);
- VecMulf(dave,1.0f-frict);
- }
-
- if(d_len<0.001 && VecLength(pa->state.vel)<0.001){
+ if(VecLength(vec) < 0.001 && VecLength(pa->state.vel) < 0.001) {
/* kill speed to stop slipping */
- VECCOPY(state->vel,zerovec);
- VECCOPY(state->co,def_loc);
- if(part->flag & PART_ROT_DYN)
- VECCOPY(state->ave,zerovec);
- deflections=10;
- }
- else{
-
- /* apply new coordinates */
- VECADD(state->co,def_loc,dvec);
-
- Normalize(dvec);
-
- /* we have to use original velocity because otherwise we get slipping */
- /* when forces like gravity balance out damping & friction */
- VecMulf(dvec,VecLength(pa->state.vel)*(d_len/o_len));
- VECCOPY(state->vel,dvec);
-
- if(part->flag & PART_ROT_DYN){
- VECADD(state->vel,state->vel,dvel);
- VecMulf(state->vel,0.5);
- VECADD(state->ave,state->ave,dave);
- VecMulf(state->ave,0.5);
+ VECCOPY(pa->state.vel,zerovec);
+ VECCOPY(pa->state.co, co);
+ if(part->flag & PART_ROT_DYN) {
+ VECCOPY(pa->state.ave,zerovec);
}
}
+ else {
+ VECCOPY(pa->state.co, col.co2);
+ VECCOPY(pa->state.vel, vel);
+ }
}
deflections++;
- cstate.time=cfra-(1.0f-min_d)*dfra;
- //particle_react_to_collision(min_ob,pob,psys,pa,p,&cstate);
- push_reaction(pob,psys,p,PART_EVENT_COLLIDE,&cstate);
+ reaction_state.time = cfra - (1.0f - dt) * dfra;
+ push_reaction(col.ob, psys, p, PART_EVENT_COLLIDE, &reaction_state);
}
else
return;
@@ -3540,7 +3316,9 @@ static int boid_see_mesh(ListBase *lb, Object *pob, ParticleSystem *psys, float
else{
psys_disable_all(ob);
- dm=mesh_get_derived_deform(ob,0);
+ dm=mesh_get_derived_final(ob,0);
+ if(dm==0)
+ dm=mesh_get_derived_deform(ob,0);
psys_enable_all(ob);
}
@@ -3643,7 +3421,7 @@ static int add_boid_acc(BoidVecFunc *bvf, float lat_max, float tan_max, float *l
}
}
/* determines the acceleration that the boid tries to acchieve */
-static void boid_brain(BoidVecFunc *bvf, ParticleData *pa, Object *ob, ParticleSystem *psys, ParticleSettings *part, KDTree *tree, float timestep, float cfra, float *acc, int *pa_die)
+static void boid_brain(BoidVecFunc *bvf, ParticleData *pa, Object *ob, ParticleSystem *psys, ParticleSettings *part, KDTree *tree, float timestep, float cfra, float *acc)
{
ParticleData *pars=psys->particles;
KDTreeNearest ptn[MAX_BOIDNEIGHBOURS+1];
@@ -3674,18 +3452,18 @@ static void boid_brain(BoidVecFunc *bvf, ParticleData *pa, Object *ob, ParticleS
switch(part->boidrule[i]){
case BOID_COLLIDE:
/* collision avoidance */
- bvf->Copyf(dvec,pa->state.vel);
+ bvf->Copyf(dvec,pa->prev_state.vel);
bvf->Mulf(dvec,5.0f);
- bvf->Addf(dvec,dvec,pa->state.co);
- if(boid_see_mesh(&psys->effectors,ob,psys,pa->state.co,dvec,ob_co,ob_nor,cfra)){
+ bvf->Addf(dvec,dvec,pa->prev_state.co);
+ if(boid_see_mesh(&psys->effectors,ob,psys,pa->prev_state.co,dvec,ob_co,ob_nor,cfra)){
float probelen = bvf->Length(dvec);
float proj;
float oblen;
Normalize(ob_nor);
- proj = bvf->Inpf(ob_nor,pa->state.vel);
+ proj = bvf->Inpf(ob_nor,pa->prev_state.vel);
- bvf->Subf(dvec,pa->state.co,ob_co);
+ bvf->Subf(dvec,pa->prev_state.co,ob_co);
oblen=bvf->Length(dvec);
bvf->Copyf(dvec,ob_nor);
@@ -3705,12 +3483,12 @@ static void boid_brain(BoidVecFunc *bvf, ParticleData *pa, Object *ob, ParticleS
if(pd->forcefield==PFIELD_FORCE && pd->f_strength<0.0){
float distance;
- VECSUB(dvec,eob->obmat[3],pa->state.co);
+ VECSUB(dvec,eob->obmat[3],pa->prev_state.co);
distance=Normalize(dvec);
if(part->flag & PART_DIE_ON_COL && distance < pd->mindist){
- *pa_die=1;
+ pa->alive = PARS_DYING;
pa->dietime=cfra;
i=BOID_TOT_RULES;
break;
@@ -3739,17 +3517,17 @@ static void boid_brain(BoidVecFunc *bvf, ParticleData *pa, Object *ob, ParticleS
pd= epart->pd;
totepart= epsys->totpart;
- if(pd->forcefield==PFIELD_FORCE && pd->f_strength<0.0){
- count=BLI_kdtree_find_n_nearest(ec->tree,epart->boidneighbours,pa->state.co,NULL,ptn2);
+ if(pd->forcefield==PFIELD_FORCE && pd->f_strength<0.0 && ec->tree){
+ count=BLI_kdtree_find_n_nearest(ec->tree,epart->boidneighbours,pa->prev_state.co,NULL,ptn2);
for(p=0; p<count; p++){
state.time=-1.0;
if(psys_get_particle_state(eob,epsys,ptn2[p].index,&state,0)){
- VECSUB(dvec, state.co, pa->state.co);
+ VECSUB(dvec, state.co, pa->prev_state.co);
distance = Normalize(dvec);
if(part->flag & PART_DIE_ON_COL && distance < (epsys->particles+ptn2[p].index)->size){
- *pa_die=1;
+ pa->alive = PARS_DYING;
pa->dietime=cfra;
i=BOID_TOT_RULES;
break;
@@ -3775,7 +3553,7 @@ static void boid_brain(BoidVecFunc *bvf, ParticleData *pa, Object *ob, ParticleS
for(n=1; n<neighbours; n++){
if(ptn[n].dist<2.0f*pa->size){
if(ptn[n].dist!=0.0f) {
- bvf->Subf(dvec,pa->state.co,pars[ptn[n].index].state.co);
+ bvf->Subf(dvec,pa->prev_state.co,pars[ptn[n].index].state.co);
bvf->Mulf(dvec,(2.0f*pa->size-ptn[n].dist)/ptn[n].dist);
bvf->Addf(avoid,avoid,dvec);
near++;
@@ -3798,7 +3576,7 @@ static void boid_brain(BoidVecFunc *bvf, ParticleData *pa, Object *ob, ParticleS
}
bvf->Mulf(center,1.0f/((float)neighbours-1.0f));
- bvf->Subf(dvec,center,pa->state.co);
+ bvf->Subf(dvec,center,pa->prev_state.co);
bvf->Mulf(dvec,part->boidfac[BOID_CENTER]*2.0f);
@@ -3807,9 +3585,9 @@ static void boid_brain(BoidVecFunc *bvf, ParticleData *pa, Object *ob, ParticleS
break;
case BOID_AV_VEL:
/* average velocity */
- cur_vel=bvf->Length(pa->state.vel);
+ cur_vel=bvf->Length(pa->prev_state.vel);
if(cur_vel>0.0){
- bvf->Copyf(dvec,pa->state.vel);
+ bvf->Copyf(dvec,pa->prev_state.vel);
bvf->Mulf(dvec,part->boidfac[BOID_AV_VEL]*(avg_vel-cur_vel)/cur_vel);
not_finished=add_boid_acc(bvf,max_lat_acc,max_tan_acc,&lat_accu,&tan_accu,acc,dvec,0);
}
@@ -3824,7 +3602,7 @@ static void boid_brain(BoidVecFunc *bvf, ParticleData *pa, Object *ob, ParticleS
}
bvf->Mulf(velocity,1.0f/((float)neighbours-1.0f));
- bvf->Subf(dvec,velocity,pa->state.vel);
+ bvf->Subf(dvec,velocity,pa->prev_state.vel);
bvf->Mulf(dvec,part->boidfac[BOID_VEL_MATCH]);
@@ -3842,7 +3620,7 @@ static void boid_brain(BoidVecFunc *bvf, ParticleData *pa, Object *ob, ParticleS
if(pd->forcefield==PFIELD_FORCE && pd->f_strength>0.0){
float distance;
- VECSUB(dvec,eob->obmat[3],pa->state.co);
+ VECSUB(dvec,eob->obmat[3],pa->prev_state.co);
distance=Normalize(dvec);
@@ -3859,7 +3637,7 @@ static void boid_brain(BoidVecFunc *bvf, ParticleData *pa, Object *ob, ParticleS
where_on_path(eob, (cfra-pa->time)/pa->lifetime, temp, dvec);
- VECSUB(dvec,temp,pa->state.co);
+ VECSUB(dvec,temp,pa->prev_state.co);
distance=Normalize(dvec);
@@ -3886,12 +3664,12 @@ static void boid_brain(BoidVecFunc *bvf, ParticleData *pa, Object *ob, ParticleS
pd= epart->pd;
totepart= epsys->totpart;
- if(pd->forcefield==PFIELD_FORCE && pd->f_strength>0.0){
- count=BLI_kdtree_find_n_nearest(ec->tree,epart->boidneighbours,pa->state.co,NULL,ptn2);
+ if(pd->forcefield==PFIELD_FORCE && pd->f_strength>0.0 && ec->tree){
+ count=BLI_kdtree_find_n_nearest(ec->tree,epart->boidneighbours,pa->prev_state.co,NULL,ptn2);
for(p=0; p<count; p++){
state.time=-1.0;
if(psys_get_particle_state(eob,epsys,ptn2[p].index,&state,0)){
- VECSUB(dvec, state.co, pa->state.co);
+ VECSUB(dvec, state.co, pa->prev_state.co);
distance = Normalize(dvec);
@@ -3913,7 +3691,7 @@ static void boid_brain(BoidVecFunc *bvf, ParticleData *pa, Object *ob, ParticleS
/* level flight */
if((part->flag & PART_BOIDS_2D)==0){
dvec[0]=dvec[1]=0.0;
- dvec[2]=-pa->state.vel[2];
+ dvec[2]=-pa->prev_state.vel[2];
VecMulf(dvec,part->boidfac[BOID_LEVEL]);
not_finished=add_boid_acc(bvf,max_lat_acc,max_tan_acc,&lat_accu,&tan_accu,acc,dvec,0);
@@ -3923,7 +3701,7 @@ static void boid_brain(BoidVecFunc *bvf, ParticleData *pa, Object *ob, ParticleS
}
}
/* tries to realize the wanted acceleration */
-static void boid_body(BoidVecFunc *bvf, ParticleData *pa, ParticleSystem *psys, ParticleSettings *part, float timestep, float *acc, ParticleKey *state)
+static void boid_body(BoidVecFunc *bvf, ParticleData *pa, ParticleSystem *psys, ParticleSettings *part, float timestep, float *acc)
{
float dvec[3], bvec[3], length, max_vel=part->max_vel;
float q2[4], q[4];
@@ -3931,7 +3709,7 @@ static void boid_body(BoidVecFunc *bvf, ParticleData *pa, ParticleSystem *psys,
float yvec[3]={0.0,1.0,0.0}, zvec[3]={0.0,0.0,-1.0}, bank;
/* apply new velocity, location & rotation */
- copy_particle_key(state,&pa->state,0);
+ copy_particle_key(&pa->state,&pa->prev_state,0);
if(part->flag & PART_SIZEMASS)
pa_mass*=pa->size;
@@ -3943,32 +3721,49 @@ static void boid_body(BoidVecFunc *bvf, ParticleData *pa, ParticleSystem *psys,
bvf->Copyf(dvec,acc);
bvf->Mulf(dvec,timestep*timestep*0.5f);
- bvf->Copyf(bvec,state->vel);
+ bvf->Copyf(bvec,pa->state.vel);
bvf->Mulf(bvec,timestep);
bvf->Addf(dvec,dvec,bvec);
- bvf->Addf(state->co,state->co,dvec);
+ bvf->Addf(pa->state.co,pa->state.co,dvec);
- /* air speed from wind effectors */
- if(psys->effectors.first){
+ /* air speed from wind and vortex effectors */
+ if(psys->effectors.first) {
ParticleEffectorCache *ec;
- for(ec=psys->effectors.first; ec; ec=ec->next){
- if(ec->type & PSYS_EC_EFFECTOR){
+ for(ec=psys->effectors.first; ec; ec=ec->next) {
+ if(ec->type & PSYS_EC_EFFECTOR) {
Object *eob = ec->ob;
PartDeflect *pd = eob->pd;
+ float direction[3], vec_to_part[3];
+ float falloff;
+
+ if(pd->f_strength != 0.0f) {
+ VecCopyf(direction, eob->obmat[2]);
+ VecSubf(vec_to_part, pa->state.co, eob->obmat[3]);
+
+ falloff=effector_falloff(pd, direction, vec_to_part);
+
+ switch(pd->forcefield) {
+ case PFIELD_WIND:
+ if(falloff <= 0.0f)
+ ; /* don't do anything */
+ else {
+ Normalize(direction);
+ VecMulf(direction, pd->f_strength * falloff);
+ bvf->Addf(pa->state.co, pa->state.co, direction);
+ }
+ break;
+ case PFIELD_VORTEX:
+ {
+ float distance, mag_vec[3];
+ Crossf(mag_vec, direction, vec_to_part);
+ Normalize(mag_vec);
- if(pd->forcefield==PFIELD_WIND && pd->f_strength!=0.0){
- float distance, wind[3];
- VecCopyf(wind,eob->obmat[2]);
- distance=VecLenf(state->co,eob->obmat[3]);
-
- if (distance < 0.001) distance = 0.001f;
+ distance = VecLength(vec_to_part);
- if(pd->flag&PFIELD_USEMAX && distance > pd->maxdist)
- ;
- else{
- Normalize(wind);
- VecMulf(wind,pd->f_strength/(float)pow((double)distance,(double)pd->f_power));
- bvf->Addf(state->co,state->co,wind);
+ VecMulf(mag_vec, pd->f_strength * distance * falloff);
+ bvf->Addf(pa->state.co, pa->state.co, mag_vec);
+ break;
+ }
}
}
}
@@ -3976,8 +3771,8 @@ static void boid_body(BoidVecFunc *bvf, ParticleData *pa, ParticleSystem *psys,
}
- if((part->flag & PART_BOIDS_2D)==0 && pa->state.vel[0]!=0.0 && pa->state.vel[0]!=0.0 && pa->state.vel[0]!=0.0){
- Crossf(yvec,state->vel,zvec);
+ if((part->flag & PART_BOIDS_2D)==0 && pa->prev_state.vel[0]!=0.0 && pa->prev_state.vel[0]!=0.0 && pa->prev_state.vel[0]!=0.0){
+ Crossf(yvec,pa->state.vel,zvec);
Normalize(yvec);
@@ -4004,27 +3799,27 @@ static void boid_body(BoidVecFunc *bvf, ParticleData *pa, ParticleSystem *psys,
}
- VecRotToQuat(state->vel,bank,q);
+ VecRotToQuat(pa->state.vel,bank,q);
- VECCOPY(dvec,state->vel);
+ VECCOPY(dvec,pa->state.vel);
VecMulf(dvec,-1.0f);
vectoquat(dvec, OB_POSX, OB_POSZ, q2);
- QuatMul(state->rot,q,q2);
+ QuatMul(pa->state.rot,q,q2);
bvf->Mulf(acc,timestep);
- bvf->Addf(state->vel,state->vel,acc);
+ bvf->Addf(pa->state.vel,pa->state.vel,acc);
if(part->flag & PART_BOIDS_2D){
- state->vel[2]=0.0;
- state->co[2]=part->groundz;
+ pa->state.vel[2]=0.0;
+ pa->state.co[2]=part->groundz;
- if(psys->keyed_ob){
+ if(psys->keyed_ob && (psys->keyed_ob->type == OB_MESH)){
Object *zob=psys->keyed_ob;
int min_face;
float co1[3],co2[3],min_d=2.0,min_w[4],imat[4][4];
- VECCOPY(co1,state->co);
- VECCOPY(co2,state->co);
+ VECCOPY(co1,pa->state.co);
+ VECCOPY(co2,pa->state.co);
co1[2]=1000.0f;
co2[2]=-1000.0f;
@@ -4055,7 +3850,7 @@ static void boid_body(BoidVecFunc *bvf, ParticleData *pa, ParticleSystem *psys,
Normalize(nor);
- VECCOPY(state->co,loc);
+ VECCOPY(pa->state.co,loc);
zvec[2]=1.0;
@@ -4067,22 +3862,22 @@ static void boid_body(BoidVecFunc *bvf, ParticleData *pa, ParticleSystem *psys,
VecRotToQuat(loc,bank,q);
- QUATCOPY(q1,state->rot);
+ QUATCOPY(q1,pa->state.rot);
- QuatMul(state->rot,q,q1);
+ QuatMul(pa->state.rot,q,q1);
}
}
}
}
- length=bvf->Length(state->vel);
+ length=bvf->Length(pa->state.vel);
if(length > max_vel)
- bvf->Mulf(state->vel,max_vel/length);
+ bvf->Mulf(pa->state.vel,max_vel/length);
}
/************************************************/
/* Hair */
/************************************************/
-void save_hair(Object *ob, ParticleSystem *psys, ParticleSystemModifierData *psmd, float cfra){
+static void save_hair(Object *ob, ParticleSystem *psys, ParticleSystemModifierData *psmd, float cfra){
ParticleData *pa;
HairKey *key;
int totpart;
@@ -4134,14 +3929,13 @@ static void dynamics_step(Object *ob, ParticleSystem *psys, ParticleSystemModifi
float *vg_vel, float *vg_tan, float *vg_rot, float *vg_size)
{
ParticleData *pa;
- ParticleKey *outstate, *key;
ParticleSettings *part=psys->part;
KDTree *tree=0;
BoidVecFunc bvf;
IpoCurve *icu_esize=find_ipocurve(part->ipo,PART_EMIT_SIZE);
Material *ma=give_current_material(ob,part->omat);
float timestep;
- int p, totpart, pa_die;
+ int p, totpart;
/* current time */
float ctime, ipotime;
/* frame & time changes */
@@ -4204,15 +3998,9 @@ static void dynamics_step(Object *ob, ParticleSystem *psys, ParticleSystemModifi
if(vg_size)
MEM_freeN(vg_size);
-
- //if(part->phystype==PART_PHYS_SOLID)
- // reset_to_first_fragment(psys);
}
else{
BLI_srandom(31415926 + (int)cfra + psys->seed);
-
- /* outstate is used so that particles are updated in parallel */
- outstate=MEM_callocN(totpart*sizeof(ParticleKey),"Particle Outstates");
/* update effectors */
if(psys->effectors.first)
@@ -4221,7 +4009,7 @@ static void dynamics_step(Object *ob, ParticleSystem *psys, ParticleSystemModifi
psys_init_effectors(ob,part->eff_group,psys);
if(psys->effectors.first)
- precalc_effectors(ob,psys,psmd);
+ precalc_effectors(ob,psys,psmd,cfra);
if(part->phystype==PART_PHYS_BOIDS){
/* create particle tree for fast inter-particle comparisons */
@@ -4237,10 +4025,10 @@ static void dynamics_step(Object *ob, ParticleSystem *psys, ParticleSystemModifi
}
/* main loop: calculate physics for all particles */
- for(p=0, pa=psys->particles, key=outstate; p<totpart; p++,pa++,key++){
+ for(p=0, pa=psys->particles; p<totpart; p++,pa++){
if(pa->flag & PARS_UNEXIST) continue;
- copy_particle_key(key,&pa->state,1);
+ copy_particle_key(&pa->prev_state,&pa->state,1);
/* set correct ipo timing */
if((part->flag&PART_ABS_TIME)==0 && part->ipo){
@@ -4250,99 +4038,85 @@ static void dynamics_step(Object *ob, ParticleSystem *psys, ParticleSystemModifi
}
pa->size=psys_get_size(ob,ma,psmd,icu_esize,psys,part,pa,vg_size);
- pa_die=0;
+ /* reactions can change birth time so they need to be checked first */
+ if(psys->reactevents.first && ELEM(pa->alive,PARS_DEAD,PARS_KILLED)==0)
+ react_to_events(psys,p);
birthtime = pa->time + pa->loop * pa->lifetime;
+ dietime = birthtime + pa->lifetime;
+ /* allways reset particles to emitter before birth */
if(pa->alive==PARS_UNBORN
|| pa->alive==PARS_KILLED
|| ELEM(part->phystype,PART_PHYS_NO,PART_PHYS_KEYED)
|| birthtime >= cfra){
- /* allways reset particles to emitter before birth */
reset_particle(pa,psys,psmd,ob,dtime,cfra,vg_vel,vg_tan,vg_rot);
- copy_particle_key(key,&pa->state,1);
}
- if(1) {
-
- if(psys->reactevents.first && ELEM(pa->alive,PARS_DEAD,PARS_KILLED)==0)
- react_to_events(psys,p);
-
- pa_dfra = dfra;
- pa_dtime = dtime;
-
- dietime = birthtime + pa->lifetime;
-
- if(birthtime < cfra && birthtime >= psys->cfra){
- /* particle is born some time between this and last step*/
- pa->alive = PARS_ALIVE;
- pa_dfra = cfra - birthtime;
- pa_dtime = pa_dfra*timestep;
- }
- else if(dietime <= cfra && psys->cfra < dietime){
- /* particle dies some time between this and last step */
- pa_dfra = dietime - psys->cfra;
- pa_dtime = pa_dfra * timestep;
- pa_die = 1;
- }
- else if(dietime < cfra){
- /* TODO: figure out if there's something to be done when particle is dead */
- }
-
- copy_particle_key(key,&pa->state,1);
+ pa_dfra = dfra;
+ pa_dtime = dtime;
- if(dfra>0.0 && pa->alive==PARS_ALIVE){
- switch(part->phystype){
- case PART_PHYS_NEWTON:
- /* do global forces & effectors */
- apply_particle_forces(p,pa,ob,psys,part,timestep,pa_dfra,cfra,key);
+ if(birthtime <= cfra && birthtime >= psys->cfra){
+ /* particle is born some time between this and last step*/
+ pa->alive = PARS_ALIVE;
+ pa_dfra = cfra - birthtime;
+ pa_dtime = pa_dfra*timestep;
+ }
+ else if(dietime <= cfra && psys->cfra < dietime){
+ /* particle dies some time between this and last step */
+ pa_dfra = dietime - psys->cfra;
+ pa_dtime = pa_dfra * timestep;
+ pa->alive = PARS_DYING;
+ }
+ else if(dietime < cfra){
+ /* nothing to be done when particle is dead */
+ }
- /* deflection */
- deflect_particle(ob,psmd,psys,part,pa,p,pa_dfra,cfra,key,&pa_die);
- /* rotations */
- rotate_particle(part,pa,pa_dfra,timestep,key);
+ if(dfra>0.0 && ELEM(pa->alive,PARS_ALIVE,PARS_DYING)){
+ switch(part->phystype){
+ case PART_PHYS_NEWTON:
+ /* do global forces & effectors */
+ apply_particle_forces(p,pa,ob,psys,part,timestep,pa_dfra,cfra);
+
+ /* deflection */
+ deflect_particle(ob,psmd,psys,part,pa,p,timestep,pa_dfra,cfra);
- break;
- case PART_PHYS_BOIDS:
- {
- float acc[3];
- boid_brain(&bvf,pa,ob,psys,part,tree,timestep,cfra,acc,&pa_die);
- if(pa_die==0)
- boid_body(&bvf,pa,psys,part,timestep,acc,key);
- break;
- }
+ /* rotations */
+ rotate_particle(part,pa,pa_dfra,timestep);
+ break;
+ case PART_PHYS_BOIDS:
+ {
+ float acc[3];
+ boid_brain(&bvf,pa,ob,psys,part,tree,timestep,cfra,acc);
+ if(pa->alive != PARS_DYING)
+ boid_body(&bvf,pa,psys,part,timestep,acc);
+ break;
}
+ }
- push_reaction(ob,psys,p,PART_EVENT_NEAR,key);
-
- if(pa_die){
- push_reaction(ob,psys,p,PART_EVENT_DEATH,key);
+ if(pa->alive == PARS_DYING){
+ push_reaction(ob,psys,p,PART_EVENT_DEATH,&pa->state);
- if(part->flag & PART_LOOP && part->type!=PART_HAIR){
- pa->loop++;
- reset_particle(pa,psys,psmd,ob,0.0,cfra,vg_vel,vg_tan,vg_rot);
- copy_particle_key(key,&pa->state,1);
- pa->alive=PARS_ALIVE;
- }
- else{
- pa->alive=PARS_DEAD;
- key->time=pa->dietime;
+ if(part->flag & PART_LOOP && part->type!=PART_HAIR){
+ pa->loop++;
+ reset_particle(pa,psys,psmd,ob,0.0,cfra,vg_vel,vg_tan,vg_rot);
+ pa->alive=PARS_ALIVE;
+ }
+ else{
+ pa->alive=PARS_DEAD;
+ pa->state.time=pa->dietime;
- if(pa->flag&PARS_STICKY)
- psys_key_to_object(pa->stick_ob,key,0);
- }
+ if(pa->flag&PARS_STICKY)
+ psys_key_to_object(pa->stick_ob,&pa->state,0);
}
- else
- key->time=cfra;
}
+ else
+ pa->state.time=cfra;
+
+ push_reaction(ob,psys,p,PART_EVENT_NEAR,&pa->state);
}
}
- /* apply outstates to particles */
- for(p=0, pa=psys->particles, key=outstate; p<totpart; p++,pa++,key++)
- copy_particle_key(&pa->state,key,1);
-
- MEM_freeN(outstate);
}
if(psys->reactevents.first)
BLI_freelistN(&psys->reactevents);
@@ -4380,7 +4154,7 @@ static void psys_update_path_cache(Object *ob, ParticleSystemModifierData *psmd,
}
if((part->type==PART_HAIR || psys->flag&PSYS_KEYED) && (psys_in_edit_mode(psys)
- || (part->type==PART_HAIR || part->draw_as==PART_DRAW_PATH) || part->draw&PART_DRAW_KEYS)){
+ || (part->type==PART_HAIR || part->draw_as==PART_DRAW_PATH))){
psys_cache_paths(ob, psys, cfra, 0);
/* for render, child particle paths are computed on the fly */
@@ -4417,7 +4191,7 @@ static void hair_step(Object *ob, ParticleSystemModifierData *psmd, ParticleSyst
psys_init_effectors(ob,part->eff_group,psys);
if(psys->effectors.first)
- precalc_effectors(ob,psys,psmd);
+ precalc_effectors(ob,psys,psmd,cfra);
if(psys_in_edit_mode(psys))
PE_recalc_world_cos(ob, psys);
@@ -4445,7 +4219,7 @@ static void cached_step(Object *ob, ParticleSystemModifierData *psmd, ParticleSy
//if(part->flag & (PART_BAKED_GUIDES+PART_BAKED_DEATHS)){
psys_init_effectors(ob,part->eff_group,psys);
if(psys->effectors.first)
- precalc_effectors(ob,psys,psmd);
+ precalc_effectors(ob,psys,psmd,cfra);
//}
disp= (float)get_current_display_percentage(psys)/50.0f-1.0f;
@@ -4543,7 +4317,7 @@ void psys_changed_type(ParticleSystem *psys)
}
static void particles_fluid_step(Object *ob, ParticleSystem *psys, int cfra)
-{
+{
if(psys->particles){
MEM_freeN(psys->particles);
psys->particles = 0;
@@ -4552,94 +4326,98 @@ static void particles_fluid_step(Object *ob, ParticleSystem *psys, int cfra)
/* fluid sim particle import handling, actual loading of particles from file */
#ifndef DISABLE_ELBEEM
- if( (1) && (ob->fluidsimFlag & OB_FLUIDSIM_ENABLE) && // broken, disabled for now!
- (ob->fluidsimSettings)) {
- ParticleSettings *part = psys->part;
- ParticleData *pa=0;
- char *suffix = "fluidsurface_particles_####";
- char *suffix2 = ".gz";
- char filename[256];
- char debugStrBuffer[256];
- int curFrame = G.scene->r.cfra -1; // warning - sync with derived mesh fsmesh loading
- int p, j, numFileParts, totpart;
- int readMask, activeParts = 0, fileParts = 0;
- gzFile gzf;
-
- if(ob==G.obedit) // off...
- return;
-
- // ok, start loading
- strcpy(filename, ob->fluidsimSettings->surfdataPath);
- strcat(filename, suffix);
- BLI_convertstringcode(filename, G.sce);
- BLI_convertstringframe(filename, curFrame); // fixed #frame-no
- strcat(filename, suffix2);
-
- gzf = gzopen(filename, "rb");
- if (!gzf) {
- snprintf(debugStrBuffer,256,"readFsPartData::error - Unable to open file for reading '%s' \n", filename);
- //elbeemDebugOut(debugStrBuffer);
- return;
- }
-
- gzread(gzf, &totpart, sizeof(totpart));
- numFileParts = totpart;
- totpart = (G.rendering)?totpart:(part->disp*totpart)/100;
-
- part->totpart= totpart;
- part->sta=part->end = 1.0f;
- part->lifetime = G.scene->r.efra + 1;
-
- /* initialize particles */
- realloc_particles(ob, psys, part->totpart);
- initialize_all_particles(ob, psys, 0);
-
- // set up reading mask
- readMask = ob->fluidsimSettings->typeFlags;
+ {
+ FluidsimModifierData *fluidmd = (FluidsimModifierData *)modifiers_findByType(ob, eModifierType_Fluidsim);
- for(p=0, pa=psys->particles; p<totpart; p++, pa++) {
- int ptype=0;
-
- gzread(gzf, &ptype, sizeof( ptype ));
- if(ptype&readMask) {
- activeParts++;
-
- gzread(gzf, &(pa->size), sizeof( float ));
-
- pa->size /= 10.0f;
-
- for(j=0; j<3; j++) {
- float wrf;
- gzread(gzf, &wrf, sizeof( wrf ));
- pa->state.co[j] = wrf;
- //fprintf(stderr,"Rj%d ",j);
- }
- for(j=0; j<3; j++) {
- float wrf;
- gzread(gzf, &wrf, sizeof( wrf ));
- pa->state.vel[j] = wrf;
- }
-
- pa->state.ave[0] = pa->state.ave[1] = pa->state.ave[2] = 0.0f;
- pa->state.rot[0] = 1.0;
- pa->state.rot[1] = pa->state.rot[2] = pa->state.rot[3] = 0.0;
-
- pa->alive = PARS_ALIVE;
- //if(a<25) fprintf(stderr,"FSPARTICLE debug set %s , a%d = %f,%f,%f , life=%f \n", filename, a, pa->co[0],pa->co[1],pa->co[2], pa->lifetime );
- } else {
- // skip...
- for(j=0; j<2*3+1; j++) {
- float wrf; gzread(gzf, &wrf, sizeof( wrf ));
+ if( fluidmd && fluidmd->fss) {
+ FluidsimSettings *fss= fluidmd->fss;
+ ParticleSettings *part = psys->part;
+ ParticleData *pa=0;
+ char *suffix = "fluidsurface_particles_####";
+ char *suffix2 = ".gz";
+ char filename[256];
+ char debugStrBuffer[256];
+ int curFrame = G.scene->r.cfra -1; // warning - sync with derived mesh fsmesh loading
+ int p, j, numFileParts, totpart;
+ int readMask, activeParts = 0, fileParts = 0;
+ gzFile gzf;
+
+ if(ob==G.obedit) // off...
+ return;
+
+ // ok, start loading
+ strcpy(filename, fss->surfdataPath);
+ strcat(filename, suffix);
+ BLI_convertstringcode(filename, G.sce);
+ BLI_convertstringframe(filename, curFrame); // fixed #frame-no
+ strcat(filename, suffix2);
+
+ gzf = gzopen(filename, "rb");
+ if (!gzf) {
+ snprintf(debugStrBuffer,256,"readFsPartData::error - Unable to open file for reading '%s' \n", filename);
+ //elbeemDebugOut(debugStrBuffer);
+ return;
+ }
+
+ gzread(gzf, &totpart, sizeof(totpart));
+ numFileParts = totpart;
+ totpart = (G.rendering)?totpart:(part->disp*totpart)/100;
+
+ part->totpart= totpart;
+ part->sta=part->end = 1.0f;
+ part->lifetime = G.scene->r.efra + 1;
+
+ /* initialize particles */
+ realloc_particles(ob, psys, part->totpart);
+ initialize_all_particles(ob, psys, 0);
+
+ // set up reading mask
+ readMask = fss->typeFlags;
+
+ for(p=0, pa=psys->particles; p<totpart; p++, pa++) {
+ int ptype=0;
+
+ gzread(gzf, &ptype, sizeof( ptype ));
+ if(ptype&readMask) {
+ activeParts++;
+
+ gzread(gzf, &(pa->size), sizeof( float ));
+
+ pa->size /= 10.0f;
+
+ for(j=0; j<3; j++) {
+ float wrf;
+ gzread(gzf, &wrf, sizeof( wrf ));
+ pa->state.co[j] = wrf;
+ //fprintf(stderr,"Rj%d ",j);
+ }
+ for(j=0; j<3; j++) {
+ float wrf;
+ gzread(gzf, &wrf, sizeof( wrf ));
+ pa->state.vel[j] = wrf;
+ }
+
+ pa->state.ave[0] = pa->state.ave[1] = pa->state.ave[2] = 0.0f;
+ pa->state.rot[0] = 1.0;
+ pa->state.rot[1] = pa->state.rot[2] = pa->state.rot[3] = 0.0;
+
+ pa->alive = PARS_ALIVE;
+ //if(a<25) fprintf(stderr,"FSPARTICLE debug set %s , a%d = %f,%f,%f , life=%f \n", filename, a, pa->co[0],pa->co[1],pa->co[2], pa->lifetime );
+ } else {
+ // skip...
+ for(j=0; j<2*3+1; j++) {
+ float wrf; gzread(gzf, &wrf, sizeof( wrf ));
+ }
}
+ fileParts++;
}
- fileParts++;
- }
- gzclose( gzf );
-
- totpart = psys->totpart = activeParts;
- snprintf(debugStrBuffer,256,"readFsPartData::done - particles:%d, active:%d, file:%d, mask:%d \n", psys->totpart,activeParts,fileParts,readMask);
- elbeemDebugOut(debugStrBuffer);
- } // fluid sim particles done
+ gzclose( gzf );
+
+ totpart = psys->totpart = activeParts;
+ snprintf(debugStrBuffer,256,"readFsPartData::done - particles:%d, active:%d, file:%d, mask:%d \n", psys->totpart,activeParts,fileParts,readMask);
+ elbeemDebugOut(debugStrBuffer);
+ } // fluid sim particles done
+ }
#endif // DISABLE_ELBEEM
}
@@ -4686,10 +4464,8 @@ static void system_step(Object *ob, ParticleSystem *psys, ParticleSystemModifier
return;
}
- /* cache shouldn't be used for hair or "none" or "first keyed" physics */
- if(part->type == PART_HAIR || part->phystype == PART_PHYS_NO)
- usecache= 0;
- else if(part->type == PART_PHYS_KEYED && (psys->flag & PSYS_FIRST_KEYED))
+ /* cache shouldn't be used for hair or "none" or "keyed" physics */
+ if(part->type == PART_HAIR || ELEM(part->phystype, PART_PHYS_NO, PART_PHYS_KEYED))
usecache= 0;
else if(BKE_ptcache_get_continue_physics())
usecache= 0;
@@ -4699,7 +4475,7 @@ static void system_step(Object *ob, ParticleSystem *psys, ParticleSystemModifier
if(usecache) {
/* frame clamping */
if(framenr < startframe) {
- psys_reset(psys, PSYS_RESET_DEPSGRAPH);
+ psys_reset(psys, PSYS_RESET_CACHE_MISS);
psys->cfra = cfra;
psys->recalc = 0;
return;
@@ -4779,14 +4555,14 @@ static void system_step(Object *ob, ParticleSystem *psys, ParticleSystemModifier
return;
}
else if(ob->id.lib || (cache->flag & PTCACHE_BAKED)) {
- psys_reset(psys, PSYS_RESET_DEPSGRAPH);
+ psys_reset(psys, PSYS_RESET_CACHE_MISS);
psys->cfra=cfra;
psys->recalc = 0;
return;
}
if(framenr != startframe && framedelta != 1) {
- psys_reset(psys, PSYS_RESET_DEPSGRAPH);
+ psys_reset(psys, PSYS_RESET_CACHE_MISS);
psys->cfra = cfra;
psys->recalc = 0;
return;
@@ -4867,7 +4643,7 @@ static void system_step(Object *ob, ParticleSystem *psys, ParticleSystemModifier
}
}
-void psys_to_softbody(Object *ob, ParticleSystem *psys)
+static void psys_to_softbody(Object *ob, ParticleSystem *psys)
{
SoftBody *sb;
short softflag;
diff --git a/source/blender/blenkernel/intern/property.c b/source/blender/blenkernel/intern/property.c
index f55bdd15279..d2eb058a9a0 100644
--- a/source/blender/blenkernel/intern/property.c
+++ b/source/blender/blenkernel/intern/property.c
@@ -83,8 +83,7 @@ bProperty *copy_property(bProperty *prop)
void copy_properties(ListBase *lbn, ListBase *lbo)
{
bProperty *prop, *propn;
-
- lbn->first= lbn->last= 0;
+ free_properties( lbn ); /* incase we are copying to an object with props */
prop= lbo->first;
while(prop) {
propn= copy_property(prop);
@@ -139,7 +138,7 @@ bProperty *new_property(int type)
return prop;
}
-bProperty *get_property(Object *ob, char *name)
+bProperty *get_ob_property(Object *ob, char *name)
{
bProperty *prop;
@@ -151,6 +150,17 @@ bProperty *get_property(Object *ob, char *name)
return NULL;
}
+void set_ob_property(Object *ob, bProperty *propc)
+{
+ bProperty *prop;
+ prop= get_ob_property(ob, propc->name);
+ if(prop) {
+ free_property(prop);
+ BLI_remlink(&ob->prop, prop);
+ }
+ BLI_addtail(&ob->prop, copy_property(propc));
+}
+
/* negative: prop is smaller
* positive: prop is larger
*/
diff --git a/source/blender/blenkernel/intern/sca.c b/source/blender/blenkernel/intern/sca.c
index fcf1c7ce311..47d11bb9d29 100644
--- a/source/blender/blenkernel/intern/sca.c
+++ b/source/blender/blenkernel/intern/sca.c
@@ -153,6 +153,9 @@ void init_sensor(bSensor *sens)
case SENS_ACTUATOR:
sens->data= MEM_callocN(sizeof(bActuatorSensor), "actsens");
break;
+ case SENS_DELAY:
+ sens->data= MEM_callocN(sizeof(bDelaySensor), "delaysens");
+ break;
case SENS_MOUSE:
ms=sens->data= MEM_callocN(sizeof(bMouseSensor), "mousesens");
ms->type= LEFTMOUSE;
diff --git a/source/blender/blenkernel/intern/scene.c b/source/blender/blenkernel/intern/scene.c
index 6102ee9a5d7..7d864c83d2c 100644
--- a/source/blender/blenkernel/intern/scene.c
+++ b/source/blender/blenkernel/intern/scene.c
@@ -188,6 +188,7 @@ Scene *add_scene(char *name)
sce->lay= 1;
sce->selectmode= SCE_SELECT_VERTEX;
sce->editbutsize= 0.1;
+ sce->autokey_mode= U.autokey_mode;
sce->r.mode= R_GAMMA;
sce->r.cfra= 1;
@@ -365,7 +366,7 @@ void set_scene_bg(Scene *sce)
/* no full animation update, this to enable render code to work (render code calls own animation updates) */
/* do we need FRAMECHANGED in set_scene? */
-// if (G.f & G_DOSCRIPTLINKS) BPY_do_all_scripts(SCRIPT_FRAMECHANGED);
+// if (G.f & G_DOSCRIPTLINKS) BPY_do_all_scripts(SCRIPT_FRAMECHANGED, 0);
}
/* called from creator.c */
@@ -585,8 +586,8 @@ void scene_update_for_newframe(Scene *sce, unsigned int lay)
/* object ipos are calculated in where_is_object */
do_all_data_ipos();
- if (G.f & G_DOSCRIPTLINKS) BPY_do_all_scripts(SCRIPT_FRAMECHANGED);
-
+ if (G.f & G_DOSCRIPTLINKS) BPY_do_all_scripts(SCRIPT_FRAMECHANGED, 0);
+
/* sets first, we allow per definition current scene to have dependencies on sets */
for(sce= sce->set; sce; sce= sce->set)
scene_update(sce, lay);
diff --git a/source/blender/blenkernel/intern/shrinkwrap.c b/source/blender/blenkernel/intern/shrinkwrap.c
new file mode 100644
index 00000000000..76af9a763ee
--- /dev/null
+++ b/source/blender/blenkernel/intern/shrinkwrap.c
@@ -0,0 +1,588 @@
+/**
+ * shrinkwrap.c
+ *
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * The Original Code is Copyright (C) Blender Foundation.
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): André Pinto
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+#include <string.h>
+#include <float.h>
+#include <math.h>
+#include <memory.h>
+#include <stdio.h>
+#include <time.h>
+#include <assert.h>
+
+#include "DNA_object_types.h"
+#include "DNA_modifier_types.h"
+#include "DNA_meshdata_types.h"
+#include "DNA_mesh_types.h"
+
+#include "BKE_shrinkwrap.h"
+#include "BKE_DerivedMesh.h"
+#include "BKE_utildefines.h"
+#include "BKE_deform.h"
+#include "BKE_cdderivedmesh.h"
+#include "BKE_displist.h"
+#include "BKE_global.h"
+#include "BKE_subsurf.h"
+
+#include "BLI_arithb.h"
+#include "BLI_kdtree.h"
+#include "BLI_kdopbvh.h"
+
+#include "RE_raytrace.h"
+#include "MEM_guardedalloc.h"
+
+
+/* Util macros */
+#define TO_STR(a) #a
+#define JOIN(a,b) a##b
+
+#define OUT_OF_MEMORY() ((void)printf("Shrinkwrap: Out of memory\n"))
+
+/* Benchmark macros */
+#if !defined(_WIN32) && 0
+
+#include <sys/time.h>
+
+#define BENCH(a) \
+ do { \
+ double _t1, _t2; \
+ struct timeval _tstart, _tend; \
+ clock_t _clock_init = clock(); \
+ gettimeofday ( &_tstart, NULL); \
+ (a); \
+ gettimeofday ( &_tend, NULL); \
+ _t1 = ( double ) _tstart.tv_sec + ( double ) _tstart.tv_usec/ ( 1000*1000 ); \
+ _t2 = ( double ) _tend.tv_sec + ( double ) _tend.tv_usec/ ( 1000*1000 ); \
+ printf("%s: %fs (real) %fs (cpu)\n", #a, _t2-_t1, (float)(clock()-_clock_init)/CLOCKS_PER_SEC);\
+ } while(0)
+
+#else
+
+#define BENCH(a) (a)
+
+#endif
+
+typedef void ( *Shrinkwrap_ForeachVertexCallback) (DerivedMesh *target, float *co, float *normal);
+
+/* get derived mesh */
+//TODO is anyfunction that does this? returning the derivedFinal witouth we caring if its in edit mode or not?
+DerivedMesh *object_get_derived_final(Object *ob, CustomDataMask dataMask)
+{
+ if (ob==G.obedit)
+ {
+ DerivedMesh *final = NULL;
+ editmesh_get_derived_cage_and_final(&final, dataMask);
+ return final;
+ }
+ else
+ return mesh_get_derived_final(ob, dataMask);
+}
+
+/* Space transform */
+void space_transform_from_matrixs(SpaceTransform *data, float local[4][4], float target[4][4])
+{
+ float itarget[4][4];
+ Mat4Invert(itarget, target);
+ Mat4MulSerie(data->local2target, itarget, local, 0, 0, 0, 0, 0, 0);
+ Mat4Invert(data->target2local, data->local2target);
+}
+
+void space_transform_apply(const SpaceTransform *data, float *co)
+{
+ VecMat4MulVecfl(co, ((SpaceTransform*)data)->local2target, co);
+}
+
+void space_transform_invert(const SpaceTransform *data, float *co)
+{
+ VecMat4MulVecfl(co, ((SpaceTransform*)data)->target2local, co);
+}
+
+void space_transform_apply_normal(const SpaceTransform *data, float *no)
+{
+ Mat4Mul3Vecfl( ((SpaceTransform*)data)->local2target, no);
+ Normalize(no); // TODO: could we just determine de scale value from the matrix?
+}
+
+void space_transform_invert_normal(const SpaceTransform *data, float *no)
+{
+ Mat4Mul3Vecfl(((SpaceTransform*)data)->target2local, no);
+ Normalize(no); // TODO: could we just determine de scale value from the matrix?
+}
+
+/*
+ * Returns the squared distance between two given points
+ */
+static float squared_dist(const float *a, const float *b)
+{
+ float tmp[3];
+ VECSUB(tmp, a, b);
+ return INPR(tmp, tmp);
+}
+
+/* Main shrinkwrap function */
+void shrinkwrapModifier_deform(ShrinkwrapModifierData *smd, Object *ob, DerivedMesh *dm, float (*vertexCos)[3], int numVerts)
+{
+
+ ShrinkwrapCalcData calc = NULL_ShrinkwrapCalcData;
+
+ //remove loop dependencies on derived meshs (TODO should this be done elsewhere?)
+ if(smd->target == ob) smd->target = NULL;
+ if(smd->auxTarget == ob) smd->auxTarget = NULL;
+
+
+ //Configure Shrinkwrap calc data
+ calc.smd = smd;
+ calc.ob = ob;
+ calc.original = dm;
+ calc.numVerts = numVerts;
+ calc.vertexCos = vertexCos;
+
+ if(smd->target)
+ {
+ //TODO currently we need a copy in case object_get_derived_final returns an emDM that does not defines getVertArray or getFace array
+ calc.target = CDDM_copy( object_get_derived_final(smd->target, CD_MASK_BAREMESH) );
+
+ //TODO there might be several "bugs" on non-uniform scales matrixs.. because it will no longer be nearest surface, not sphere projection
+ //because space has been deformed
+ space_transform_setup(&calc.local2target, ob, smd->target);
+
+ calc.keepDist = smd->keepDist; //TODO: smd->keepDist is in global units.. must change to local
+ }
+
+
+ //Projecting target defined - lets work!
+ if(calc.target)
+ {
+ switch(smd->shrinkType)
+ {
+ case MOD_SHRINKWRAP_NEAREST_SURFACE:
+ BENCH(shrinkwrap_calc_nearest_surface_point(&calc));
+ break;
+
+ case MOD_SHRINKWRAP_PROJECT:
+ BENCH(shrinkwrap_calc_normal_projection(&calc));
+ break;
+
+ case MOD_SHRINKWRAP_NEAREST_VERTEX:
+ BENCH(shrinkwrap_calc_nearest_vertex(&calc));
+ break;
+ }
+ }
+
+ //free memory
+ if(calc.target)
+ calc.target->release( calc.target );
+}
+
+/*
+ * Shrinkwrap to the nearest vertex
+ *
+ * it builds a kdtree of vertexs we can attach to and then
+ * for each vertex performs a nearest vertex search on the tree
+ */
+void shrinkwrap_calc_nearest_vertex(ShrinkwrapCalcData *calc)
+{
+ int i;
+ const int vgroup = get_named_vertexgroup_num(calc->ob, calc->smd->vgroup_name);
+ MDeformVert *const dvert = calc->original ? calc->original->getVertDataArray(calc->original, CD_MDEFORMVERT) : NULL;
+
+ BVHTreeFromMesh treeData = NULL_BVHTreeFromMesh;
+ BVHTreeNearest nearest = NULL_BVHTreeNearest;
+
+
+ BENCH(bvhtree_from_mesh_verts(&treeData, calc->target, 0.0, 2, 6));
+ if(treeData.tree == NULL) return OUT_OF_MEMORY();
+
+ //Setup nearest
+ nearest.index = -1;
+ nearest.dist = FLT_MAX;
+
+#pragma omp parallel for default(none) private(i) firstprivate(nearest) shared(treeData,calc) schedule(static)
+ for(i = 0; i<calc->numVerts; ++i)
+ {
+ float *co = calc->vertexCos[i];
+ float tmp_co[3];
+ float weight = vertexgroup_get_vertex_weight(dvert, i, vgroup);
+ if(weight == 0.0f) continue;
+
+ VECCOPY(tmp_co, co);
+ space_transform_apply(&calc->local2target, tmp_co); //Convert the coordinates to the tree coordinates
+
+ //Use local proximity heuristics (to reduce the nearest search)
+ //
+ //If we already had an hit before.. we assume this vertex is going to have a close hit to that other vertex
+ //so we can initiate the "nearest.dist" with the expected value to that last hit.
+ //This will lead in prunning of the search tree.
+ if(nearest.index != -1)
+ nearest.dist = squared_dist(tmp_co, nearest.co);
+ else
+ nearest.dist = FLT_MAX;
+
+ BLI_bvhtree_find_nearest(treeData.tree, tmp_co, &nearest, treeData.nearest_callback, &treeData);
+
+
+ //Found the nearest vertex
+ if(nearest.index != -1)
+ {
+ //Adjusting the vertex weight, so that after interpolating it keeps a certain distance from the nearest position
+ float dist = sasqrt(nearest.dist);
+ if(dist > FLT_EPSILON) weight *= (dist - calc->keepDist)/dist;
+
+ //Convert the coordinates back to mesh coordinates
+ VECCOPY(tmp_co, nearest.co);
+ space_transform_invert(&calc->local2target, tmp_co);
+
+ VecLerpf(co, co, tmp_co, weight); //linear interpolation
+ }
+ }
+
+ free_bvhtree_from_mesh(&treeData);
+}
+
+/*
+ * This function raycast a single vertex and updates the hit if the "hit" is considered valid.
+ * Returns TRUE if "hit" was updated.
+ * Opts control whether an hit is valid or not
+ * Supported options are:
+ * MOD_SHRINKWRAP_CULL_TARGET_FRONTFACE (front faces hits are ignored)
+ * MOD_SHRINKWRAP_CULL_TARGET_BACKFACE (back faces hits are ignored)
+ */
+int normal_projection_project_vertex(char options, const float *vert, const float *dir, const SpaceTransform *transf, BVHTree *tree, BVHTreeRayHit *hit, BVHTree_RayCastCallback callback, void *userdata)
+{
+ float tmp_co[3], tmp_no[3];
+ const float *co, *no;
+ BVHTreeRayHit hit_tmp;
+
+ //Copy from hit (we need to convert hit rays from one space coordinates to the other
+ memcpy( &hit_tmp, hit, sizeof(hit_tmp) );
+
+ //Apply space transform (TODO readjust dist)
+ if(transf)
+ {
+ VECCOPY( tmp_co, vert );
+ space_transform_apply( transf, tmp_co );
+ co = tmp_co;
+
+ VECCOPY( tmp_no, dir );
+ space_transform_apply_normal( transf, tmp_no );
+ no = tmp_no;
+
+ hit_tmp.dist *= Mat4ToScalef( ((SpaceTransform*)transf)->local2target );
+ }
+ else
+ {
+ co = vert;
+ no = dir;
+ }
+
+ hit_tmp.index = -1;
+
+ BLI_bvhtree_ray_cast(tree, co, no, 0.0f, &hit_tmp, callback, userdata);
+
+ if(hit_tmp.index != -1)
+ {
+ float dot = INPR( dir, hit_tmp.no);
+
+ if(((options & MOD_SHRINKWRAP_CULL_TARGET_FRONTFACE) && dot <= 0.0f)
+ || ((options & MOD_SHRINKWRAP_CULL_TARGET_BACKFACE) && dot >= 0.0f))
+ return FALSE; //Ignore hit
+
+
+ //Inverting space transform (TODO make coeherent with the initial dist readjust)
+ if(transf)
+ {
+ space_transform_invert( transf, hit_tmp.co );
+ space_transform_invert_normal( transf, hit_tmp.no );
+
+ hit_tmp.dist = VecLenf( (float*)vert, hit_tmp.co );
+ }
+
+ memcpy(hit, &hit_tmp, sizeof(hit_tmp) );
+ return TRUE;
+ }
+ return FALSE;
+}
+
+
+void shrinkwrap_calc_normal_projection(ShrinkwrapCalcData *calc)
+{
+ int i;
+
+ //Options about projection direction
+ const char use_normal = calc->smd->shrinkOpts;
+ float proj_axis[3] = {0.0f, 0.0f, 0.0f};
+ MVert *vert = NULL; //Needed in case of vertex normal
+ DerivedMesh* ss_mesh = NULL;
+
+ //Vertex group data
+ const int vgroup = get_named_vertexgroup_num(calc->ob, calc->smd->vgroup_name);
+ const MDeformVert *dvert = calc->original ? calc->original->getVertDataArray(calc->original, CD_MDEFORMVERT) : NULL;
+
+
+ //Raycast and tree stuff
+ BVHTreeRayHit hit;
+ BVHTreeFromMesh treeData = NULL_BVHTreeFromMesh; //target
+
+ //auxiliar target
+ DerivedMesh * aux_mesh = NULL;
+ BVHTreeFromMesh auxData= NULL_BVHTreeFromMesh;
+ SpaceTransform local2aux;
+
+do
+{
+
+ //Prepare data to retrieve the direction in which we should project each vertex
+ if(calc->smd->projAxis == MOD_SHRINKWRAP_PROJECT_OVER_NORMAL)
+ {
+ //No Mvert information: jump to "free memory and return" part
+ if(calc->original == NULL) break;
+
+ if(calc->smd->subsurfLevels)
+ {
+ SubsurfModifierData smd;
+ memset(&smd, 0, sizeof(smd));
+ smd.subdivType = ME_CC_SUBSURF; //catmull clark
+ smd.levels = calc->smd->subsurfLevels; //levels
+
+ ss_mesh = subsurf_make_derived_from_derived(calc->original, &smd, FALSE, NULL, 0, 0);
+
+ if(ss_mesh)
+ {
+ vert = ss_mesh->getVertDataArray(ss_mesh, CD_MVERT);
+ if(vert)
+ {
+ //TRICKY: this code assumes subsurface will have the transformed original vertices
+ //in their original order at the end of the vert array.
+ vert = vert
+ + ss_mesh->getNumVerts(ss_mesh)
+ - calc->original->getNumVerts(calc->original);
+ }
+ }
+
+ //To make sure we are not letting any memory behind
+ assert(smd.emCache == NULL);
+ assert(smd.mCache == NULL);
+ }
+ else
+ vert = calc->original->getVertDataArray(calc->original, CD_MVERT);
+
+ //Not able to get vert information: jump to "free memory and return" part
+ if(vert == NULL) break;
+ }
+ else
+ {
+ //The code supports any axis that is a combination of X,Y,Z.. altought currently UI only allows to set the 3 diferent axis
+ if(calc->smd->projAxis & MOD_SHRINKWRAP_PROJECT_OVER_X_AXIS) proj_axis[0] = 1.0f;
+ if(calc->smd->projAxis & MOD_SHRINKWRAP_PROJECT_OVER_Y_AXIS) proj_axis[1] = 1.0f;
+ if(calc->smd->projAxis & MOD_SHRINKWRAP_PROJECT_OVER_Z_AXIS) proj_axis[2] = 1.0f;
+
+ Normalize(proj_axis);
+
+ //Invalid projection direction: jump to "free memory and return" part
+ if(INPR(proj_axis, proj_axis) < FLT_EPSILON) break;
+ }
+
+ //If the user doesn't allows to project in any direction of projection axis... then theres nothing todo.
+ if((use_normal & (MOD_SHRINKWRAP_PROJECT_ALLOW_POS_DIR | MOD_SHRINKWRAP_PROJECT_ALLOW_NEG_DIR)) == 0)
+ break; //jump to "free memory and return" part
+
+
+ //Build target tree
+ BENCH(bvhtree_from_mesh_faces(&treeData, calc->target, calc->keepDist, 4, 6));
+ if(treeData.tree == NULL)
+ break; //jump to "free memory and return" part
+
+
+ //Build auxiliar target
+ if(calc->smd->auxTarget)
+ {
+ space_transform_setup( &local2aux, calc->ob, calc->smd->auxTarget);
+
+ aux_mesh = CDDM_copy( object_get_derived_final(calc->smd->auxTarget, CD_MASK_BAREMESH) ); //TODO currently we need a copy in case object_get_derived_final returns an emDM that does not defines getVertArray or getFace array
+ if(aux_mesh)
+ BENCH(bvhtree_from_mesh_faces(&auxData, aux_mesh, 0.0, 4, 6));
+ else
+ printf("Auxiliar target finalDerived mesh is null\n");
+ }
+
+
+ //Now, everything is ready to project the vertexs!
+#pragma omp parallel for private(i,hit) schedule(static)
+ for(i = 0; i<calc->numVerts; ++i)
+ {
+ float *co = calc->vertexCos[i];
+ float tmp_co[3], tmp_no[3];
+ float lim = 10000.0f; //TODO: we should use FLT_MAX here, but sweepsphere code isnt prepared for that
+ float weight = vertexgroup_get_vertex_weight(dvert, i, vgroup);
+
+ if(weight == 0.0f) continue;
+
+ if(ss_mesh)
+ {
+ VECCOPY(tmp_co, vert[i].co);
+ }
+ else
+ {
+ VECCOPY(tmp_co, co);
+ }
+
+
+ if(vert)
+ NormalShortToFloat(tmp_no, vert[i].no);
+ else
+ VECCOPY( tmp_no, proj_axis );
+
+
+ hit.index = -1;
+ hit.dist = lim;
+
+
+ //Project over positive direction of axis
+ if(use_normal & MOD_SHRINKWRAP_PROJECT_ALLOW_POS_DIR)
+ {
+
+ if(auxData.tree)
+ normal_projection_project_vertex(0, tmp_co, tmp_no, &local2aux, auxData.tree, &hit, auxData.raycast_callback, &auxData);
+
+ normal_projection_project_vertex(calc->smd->shrinkOpts, tmp_co, tmp_no, &calc->local2target, treeData.tree, &hit, treeData.raycast_callback, &treeData);
+ }
+
+ //Project over negative direction of axis
+ if(use_normal & MOD_SHRINKWRAP_PROJECT_ALLOW_NEG_DIR)
+ {
+ float inv_no[3] = { -tmp_no[0], -tmp_no[1], -tmp_no[2] };
+
+
+ if(auxData.tree)
+ normal_projection_project_vertex(0, tmp_co, inv_no, &local2aux, auxData.tree, &hit, auxData.raycast_callback, &auxData);
+
+ normal_projection_project_vertex(calc->smd->shrinkOpts, tmp_co, inv_no, &calc->local2target, treeData.tree, &hit, treeData.raycast_callback, &treeData);
+ }
+
+
+ if(hit.index != -1)
+ {
+ VecLerpf(co, co, hit.co, weight);
+ }
+ }
+
+
+//Simple do{} while(0) structure to allow to easily jump to the "free memory and return" part
+} while(0);
+
+ //free data structures
+
+ free_bvhtree_from_mesh(&treeData);
+ free_bvhtree_from_mesh(&auxData);
+
+ if(aux_mesh)
+ aux_mesh->release(aux_mesh);
+
+ if(ss_mesh)
+ ss_mesh->release(ss_mesh);
+}
+
+/*
+ * Shrinkwrap moving vertexs to the nearest surface point on the target
+ *
+ * it builds a BVHTree from the target mesh and then performs a
+ * NN matchs for each vertex
+ */
+void shrinkwrap_calc_nearest_surface_point(ShrinkwrapCalcData *calc)
+{
+ int i;
+
+ const int vgroup = get_named_vertexgroup_num(calc->ob, calc->smd->vgroup_name);
+ const MDeformVert *const dvert = calc->original ? calc->original->getVertDataArray(calc->original, CD_MDEFORMVERT) : NULL;
+
+ BVHTreeFromMesh treeData = NULL_BVHTreeFromMesh;
+ BVHTreeNearest nearest = NULL_BVHTreeNearest;
+
+
+
+ //Create a bvh-tree of the given target
+ BENCH(bvhtree_from_mesh_faces( &treeData, calc->target, 0.0, 2, 6));
+ if(treeData.tree == NULL) return OUT_OF_MEMORY();
+
+ //Setup nearest
+ nearest.index = -1;
+ nearest.dist = FLT_MAX;
+
+
+ //Find the nearest vertex
+#pragma omp parallel for default(none) private(i) firstprivate(nearest) shared(calc,treeData) schedule(static)
+ for(i = 0; i<calc->numVerts; ++i)
+ {
+ float *co = calc->vertexCos[i];
+ float tmp_co[3];
+ float weight = vertexgroup_get_vertex_weight(dvert, i, vgroup);
+ if(weight == 0.0f) continue;
+
+ //Convert the vertex to tree coordinates
+ VECCOPY(tmp_co, co);
+ space_transform_apply(&calc->local2target, tmp_co);
+
+ //Use local proximity heuristics (to reduce the nearest search)
+ //
+ //If we already had an hit before.. we assume this vertex is going to have a close hit to that other vertex
+ //so we can initiate the "nearest.dist" with the expected value to that last hit.
+ //This will lead in prunning of the search tree.
+ if(nearest.index != -1)
+ nearest.dist = squared_dist(tmp_co, nearest.co);
+ else
+ nearest.dist = FLT_MAX;
+
+ BLI_bvhtree_find_nearest(treeData.tree, tmp_co, &nearest, treeData.nearest_callback, &treeData);
+
+ //Found the nearest vertex
+ if(nearest.index != -1)
+ {
+ if(calc->smd->shrinkOpts & MOD_SHRINKWRAP_KEEP_ABOVE_SURFACE)
+ {
+ //Make the vertex stay on the front side of the face
+ VECADDFAC(tmp_co, nearest.co, nearest.no, calc->keepDist);
+ }
+ else
+ {
+ //Adjusting the vertex weight, so that after interpolating it keeps a certain distance from the nearest position
+ float dist = sasqrt( nearest.dist );
+ if(dist > FLT_EPSILON)
+ VecLerpf(tmp_co, tmp_co, nearest.co, (dist - calc->keepDist)/dist); //linear interpolation
+ else
+ VECCOPY( tmp_co, nearest.co );
+ }
+
+ //Convert the coordinates back to mesh coordinates
+ space_transform_invert(&calc->local2target, tmp_co);
+ VecLerpf(co, co, tmp_co, weight); //linear interpolation
+ }
+ }
+
+
+ free_bvhtree_from_mesh(&treeData);
+}
+
diff --git a/source/blender/blenkernel/intern/simple_deform.c b/source/blender/blenkernel/intern/simple_deform.c
new file mode 100644
index 00000000000..0eb710fa48e
--- /dev/null
+++ b/source/blender/blenkernel/intern/simple_deform.c
@@ -0,0 +1,248 @@
+/**
+ * deform_simple.c
+ *
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * The Original Code is Copyright (C) Blender Foundation.
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): André Pinto
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+#include "DNA_object_types.h"
+#include "DNA_modifier_types.h"
+#include "DNA_meshdata_types.h"
+
+#include "BKE_simple_deform.h"
+#include "BKE_DerivedMesh.h"
+#include "BKE_deform.h"
+#include "BKE_utildefines.h"
+#include "BLI_arithb.h"
+#include "BKE_shrinkwrap.h"
+
+#include <string.h>
+#include <math.h>
+
+
+//Clamps/Limits the given coordinate to: limits[0] <= co[axis] <= limits[1]
+//The ammount of clamp is saved on dcut
+static void axis_limit(int axis, const float limits[2], float co[3], float dcut[3])
+{
+ float val = co[axis];
+ if(limits[0] > val) val = limits[0];
+ if(limits[1] < val) val = limits[1];
+
+ dcut[axis] = co[axis] - val;
+ co[axis] = val;
+}
+
+static void simpleDeform_taper(const float factor, const float dcut[3], float *co)
+{
+ float x = co[0], y = co[1], z = co[2];
+ float scale = z*factor;
+
+ co[0] = x + x*scale;
+ co[1] = y + y*scale;
+ co[2] = z;
+
+ if(dcut)
+ {
+ co[0] += dcut[0];
+ co[1] += dcut[1];
+ co[2] += dcut[2];
+ }
+}
+
+static void simpleDeform_stretch(const float factor, const float dcut[3], float *co)
+{
+ float x = co[0], y = co[1], z = co[2];
+ float scale;
+
+ scale = (z*z*factor-factor + 1.0);
+
+ co[0] = x*scale;
+ co[1] = y*scale;
+ co[2] = z*(1.0+factor);
+
+
+ if(dcut)
+ {
+ co[0] += dcut[0];
+ co[1] += dcut[1];
+ co[2] += dcut[2];
+ }
+}
+
+static void simpleDeform_twist(const float factor, const float *dcut, float *co)
+{
+ float x = co[0], y = co[1], z = co[2];
+ float theta, sint, cost;
+
+ theta = z*factor;
+ sint = sin(theta);
+ cost = cos(theta);
+
+ co[0] = x*cost - y*sint;
+ co[1] = x*sint + y*cost;
+ co[2] = z;
+
+ if(dcut)
+ {
+ co[0] += dcut[0];
+ co[1] += dcut[1];
+ co[2] += dcut[2];
+ }
+}
+
+static void simpleDeform_bend(const float factor, const float dcut[3], float *co)
+{
+ float x = co[0], y = co[1], z = co[2];
+ float theta, sint, cost;
+
+ theta = x*factor;
+ sint = sin(theta);
+ cost = cos(theta);
+
+ if(fabs(factor) > 1e-7f)
+ {
+ co[0] = -(y-1.0f/factor)*sint;
+ co[1] = (y-1.0f/factor)*cost + 1.0f/factor;
+ co[2] = z;
+ }
+
+
+ if(dcut)
+ {
+ co[0] += cost*dcut[0];
+ co[1] += sint*dcut[0];
+ co[2] += dcut[2];
+ }
+
+}
+
+
+/* simple deform modifier */
+void SimpleDeformModifier_do(SimpleDeformModifierData *smd, struct Object *ob, struct DerivedMesh *dm, float (*vertexCos)[3], int numVerts)
+{
+ static const float lock_axis[2] = {0.0f, 0.0f};
+
+ int i;
+ int limit_axis = 0;
+ float smd_limit[2], smd_factor;
+ SpaceTransform *transf = NULL, tmp_transf;
+ void (*simpleDeform_callback)(const float factor, const float dcut[3], float *co) = NULL; //Mode callback
+ int vgroup = get_named_vertexgroup_num(ob, smd->vgroup_name);
+ MDeformVert *dvert = NULL;
+
+ //Safe-check
+ if(smd->origin == ob) smd->origin = NULL; //No self references
+
+ if(smd->limit[0] < 0.0) smd->limit[0] = 0.0f;
+ if(smd->limit[0] > 1.0) smd->limit[0] = 1.0f;
+
+ smd->limit[0] = MIN2(smd->limit[0], smd->limit[1]); //Upper limit >= than lower limit
+
+ //Calculate matrixs do convert between coordinate spaces
+ if(smd->origin)
+ {
+ transf = &tmp_transf;
+
+ if(smd->originOpts & MOD_SIMPLEDEFORM_ORIGIN_LOCAL)
+ {
+ space_transform_from_matrixs(transf, ob->obmat, smd->origin->obmat);
+ }
+ else
+ {
+ Mat4CpyMat4(transf->local2target, smd->origin->obmat);
+ Mat4Invert(transf->target2local, transf->local2target);
+ }
+ }
+
+ //Setup vars
+ limit_axis = (smd->mode == MOD_SIMPLEDEFORM_MODE_BEND) ? 0 : 2; //Bend limits on X.. all other modes limit on Z
+
+ //Update limits if needed
+ {
+ float lower = FLT_MAX;
+ float upper = -FLT_MAX;
+
+ for(i=0; i<numVerts; i++)
+ {
+ float tmp[3];
+ VECCOPY(tmp, vertexCos[i]);
+
+ if(transf) space_transform_apply(transf, tmp);
+
+ lower = MIN2(lower, tmp[limit_axis]);
+ upper = MAX2(upper, tmp[limit_axis]);
+ }
+
+
+ //SMD values are normalized to the BV, calculate the absolut values
+ smd_limit[1] = lower + (upper-lower)*smd->limit[1];
+ smd_limit[0] = lower + (upper-lower)*smd->limit[0];
+
+ smd_factor = smd->factor / MAX2(FLT_EPSILON, smd_limit[1]-smd_limit[0]);
+ }
+
+
+ if(dm)
+ dvert = dm->getVertDataArray(dm, CD_MDEFORMVERT);
+
+
+ switch(smd->mode)
+ {
+ case MOD_SIMPLEDEFORM_MODE_TWIST: simpleDeform_callback = simpleDeform_twist; break;
+ case MOD_SIMPLEDEFORM_MODE_BEND: simpleDeform_callback = simpleDeform_bend; break;
+ case MOD_SIMPLEDEFORM_MODE_TAPER: simpleDeform_callback = simpleDeform_taper; break;
+ case MOD_SIMPLEDEFORM_MODE_STRETCH: simpleDeform_callback = simpleDeform_stretch; break;
+ default:
+ return; //No simpledeform mode?
+ }
+
+ for(i=0; i<numVerts; i++)
+ {
+ float weight = vertexgroup_get_vertex_weight(dvert, i, vgroup);
+
+ if(weight != 0.0f)
+ {
+ float co[3], dcut[3] = {0.0f, 0.0f, 0.0f};
+
+ if(transf) space_transform_apply(transf, vertexCos[i]);
+
+ VECCOPY(co, vertexCos[i]);
+
+ //Apply axis limits
+ if(smd->mode != MOD_SIMPLEDEFORM_MODE_BEND) //Bend mode shoulnt have any lock axis
+ {
+ if(smd->axis & MOD_SIMPLEDEFORM_LOCK_AXIS_X) axis_limit(0, lock_axis, co, dcut);
+ if(smd->axis & MOD_SIMPLEDEFORM_LOCK_AXIS_Y) axis_limit(1, lock_axis, co, dcut);
+ }
+ axis_limit(limit_axis, smd_limit, co, dcut);
+
+ simpleDeform_callback(smd_factor, dcut, co); //Apply deform
+ VecLerpf(vertexCos[i], vertexCos[i], co, weight); //Use vertex weight has coef of linear interpolation
+
+ if(transf) space_transform_invert(transf, vertexCos[i]);
+ }
+ }
+}
+
+
diff --git a/source/blender/blenkernel/intern/softbody.c b/source/blender/blenkernel/intern/softbody.c
index d465c058d30..5d93f10526a 100644
--- a/source/blender/blenkernel/intern/softbody.c
+++ b/source/blender/blenkernel/intern/softbody.c
@@ -236,7 +236,7 @@ typedef struct ccd_Mesh {
-ccd_Mesh *ccd_mesh_make(Object *ob, DerivedMesh *dm)
+static ccd_Mesh *ccd_mesh_make(Object *ob, DerivedMesh *dm)
{
ccd_Mesh *pccd_M = NULL;
ccdf_minmax *mima =NULL;
@@ -333,7 +333,7 @@ ccd_Mesh *ccd_mesh_make(Object *ob, DerivedMesh *dm)
}
return pccd_M;
}
-void ccd_mesh_update(Object *ob,ccd_Mesh *pccd_M, DerivedMesh *dm)
+static void ccd_mesh_update(Object *ob,ccd_Mesh *pccd_M, DerivedMesh *dm)
{
ccdf_minmax *mima =NULL;
MFace *mface=NULL;
@@ -472,7 +472,7 @@ void ccd_mesh_update(Object *ob,ccd_Mesh *pccd_M, DerivedMesh *dm)
return ;
}
-void ccd_mesh_free(ccd_Mesh *ccdm)
+static void ccd_mesh_free(ccd_Mesh *ccdm)
{
if(ccdm && (ccdm->savety == CCD_SAVETY )){ /*make sure we're not nuking objects we don't know*/
MEM_freeN(ccdm->mface);
@@ -484,7 +484,7 @@ void ccd_mesh_free(ccd_Mesh *ccdm)
}
}
-void ccd_build_deflector_hache(Object *vertexowner,GHash *hash)
+static void ccd_build_deflector_hache(Object *vertexowner,GHash *hash)
{
Base *base;
Object *ob;
@@ -536,7 +536,7 @@ void ccd_build_deflector_hache(Object *vertexowner,GHash *hash)
} /* while (base) */
}
-void ccd_update_deflector_hache(Object *vertexowner,GHash *hash)
+static void ccd_update_deflector_hache(Object *vertexowner,GHash *hash)
{
Base *base;
Object *ob;
@@ -991,7 +991,7 @@ static int query_external_colliders(Object *me)
/* +++ the aabb "force" section*/
-int sb_detect_aabb_collisionCached( float force[3], unsigned int par_layer,struct Object *vertexowner,float time)
+static int sb_detect_aabb_collisionCached( float force[3], unsigned int par_layer,struct Object *vertexowner,float time)
{
Object *ob;
SoftBody *sb=vertexowner->soft;
@@ -1055,7 +1055,7 @@ int sb_detect_aabb_collisionCached( float force[3], unsigned int par_layer,struc
/* +++ the face external section*/
-int sb_detect_face_pointCached(float face_v1[3],float face_v2[3],float face_v3[3],float *damp,
+static int sb_detect_face_pointCached(float face_v1[3],float face_v2[3],float face_v3[3],float *damp,
float force[3], unsigned int par_layer,struct Object *vertexowner,float time)
{
Object *ob;
@@ -1153,7 +1153,7 @@ int sb_detect_face_pointCached(float face_v1[3],float face_v2[3],float face_v3[3
}
-int sb_detect_face_collisionCached(float face_v1[3],float face_v2[3],float face_v3[3],float *damp,
+static int sb_detect_face_collisionCached(float face_v1[3],float face_v2[3],float face_v3[3],float *damp,
float force[3], unsigned int par_layer,struct Object *vertexowner,float time)
{
Object *ob;
@@ -1291,7 +1291,7 @@ int sb_detect_face_collisionCached(float face_v1[3],float face_v2[3],float face_
-void scan_for_ext_face_forces(Object *ob,float timenow)
+static void scan_for_ext_face_forces(Object *ob,float timenow)
{
SoftBody *sb = ob->soft;
BodyFace *bf;
@@ -1379,7 +1379,7 @@ void scan_for_ext_face_forces(Object *ob,float timenow)
/* +++ the spring external section*/
-int sb_detect_edge_collisionCached(float edge_v1[3],float edge_v2[3],float *damp,
+static int sb_detect_edge_collisionCached(float edge_v1[3],float edge_v2[3],float *damp,
float force[3], unsigned int par_layer,struct Object *vertexowner,float time)
{
Object *ob;
@@ -1530,7 +1530,7 @@ int sb_detect_edge_collisionCached(float edge_v1[3],float edge_v2[3],float *damp
-void _scan_for_ext_spring_forces(Object *ob,float timenow,int ifirst,int ilast, struct ListBase *do_effector)
+static void _scan_for_ext_spring_forces(Object *ob,float timenow,int ifirst,int ilast, struct ListBase *do_effector)
{
SoftBody *sb = ob->soft;
int a;
@@ -1601,7 +1601,7 @@ void _scan_for_ext_spring_forces(Object *ob,float timenow,int ifirst,int ilast,
}
-void scan_for_ext_spring_forces(Object *ob,float timenow)
+static void scan_for_ext_spring_forces(Object *ob,float timenow)
{
SoftBody *sb = ob->soft;
ListBase *do_effector= NULL;
@@ -1613,32 +1613,32 @@ void scan_for_ext_spring_forces(Object *ob,float timenow)
pdEndEffectors(do_effector);
}
-void *exec_scan_for_ext_spring_forces(void *data)
+static void *exec_scan_for_ext_spring_forces(void *data)
{
SB_thread_context *pctx = (SB_thread_context*)data;
_scan_for_ext_spring_forces(pctx->ob,pctx->timenow,pctx->ifirst,pctx->ilast,pctx->do_effector);
return 0;
}
-void sb_sfesf_threads_run(struct Object *ob, float timenow,int totsprings,int *ptr_to_break_func())
+static void sb_sfesf_threads_run(struct Object *ob, float timenow,int totsprings,int *ptr_to_break_func())
{
- ListBase *do_effector = NULL;
+ ListBase *do_effector = NULL;
ListBase threads;
SB_thread_context *sb_threads;
int i, totthread,left,dec;
- int lowsprings =10; /* wild guess .. may increase with better thread management 'above' or even be UI option sb->spawn_cf_threads_nopts */
+ int lowsprings =100; /* wild guess .. may increase with better thread management 'above' or even be UI option sb->spawn_cf_threads_nopts */
do_effector= pdInitEffectors(ob,NULL);
/* figure the number of threads while preventing pretty pointless threading overhead */
- if(totsprings < lowsprings) {totthread=1;}
- else{
- if(G.scene->r.mode & R_FIXED_THREADS)
- totthread= G.scene->r.threads;
- else
- totthread= BLI_system_thread_count();
+ if(G.scene->r.mode & R_FIXED_THREADS)
+ totthread= G.scene->r.threads;
+ else
+ totthread= BLI_system_thread_count();
+ /* what if we got zillions of CPUs running but less to spread*/
+ while ((totsprings/totthread < lowsprings) && (totthread > 1)) {
+ totthread--;
}
- /*left to do--> what if we got zillions of CPUs running but 'totsprings' tasks to spread*/
sb_threads= MEM_callocN(sizeof(SB_thread_context)*totthread, "SBSpringsThread");
memset(sb_threads, 0, sizeof(SB_thread_context)*totthread);
@@ -1682,7 +1682,7 @@ void sb_sfesf_threads_run(struct Object *ob, float timenow,int totsprings,int *p
/* --- the spring external section*/
-int choose_winner(float*w, float* pos,float*a,float*b,float*c,float*ca,float*cb,float*cc)
+static int choose_winner(float*w, float* pos,float*a,float*b,float*c,float*ca,float*cb,float*cc)
{
float mindist,cp;
int winner =1;
@@ -1709,7 +1709,7 @@ int choose_winner(float*w, float* pos,float*a,float*b,float*c,float*ca,float*cb,
-int sb_detect_vertex_collisionCached(float opco[3], float facenormal[3], float *damp,
+static int sb_detect_vertex_collisionCached(float opco[3], float facenormal[3], float *damp,
float force[3], unsigned int par_layer,struct Object *vertexowner,
float time,float vel[3], float *intrusion)
{
@@ -2119,7 +2119,7 @@ static void sb_spring_force(Object *ob,int bpi,BodySpring *bs,float iks,float fo
/* since this is definitely the most CPU consuming task here .. try to spread it */
/* core function _softbody_calc_forces_slice_in_a_thread */
/* result is int to be able to flag user break */
-int _softbody_calc_forces_slice_in_a_thread(Object *ob, float forcetime, float timenow,int ifirst,int ilast,int *ptr_to_break_func(),ListBase *do_effector,int do_deflector,float fieldfactor, float windfactor)
+static int _softbody_calc_forces_slice_in_a_thread(Object *ob, float forcetime, float timenow,int ifirst,int ilast,int *ptr_to_break_func(),ListBase *do_effector,int do_deflector,float fieldfactor, float windfactor)
{
float iks;
int bb,do_selfcollision,do_springcollision,do_aero;
@@ -2279,6 +2279,11 @@ int _softbody_calc_forces_slice_in_a_thread(Object *ob, float forcetime, float t
float kd = 1.0f;
if (sb_deflect_face(ob,bp->pos,facenormal,defforce,&cf,timenow,vel,&intrusion)){
+ if (intrusion < 0.0f){
+ sb->scratch->flag |= SBF_DOFUZZY;
+ bp->flag |= SBF_DOFUZZY;
+ bp->choke = sb->choke*0.01f;
+ }
VECSUB(cfforce,bp->vec,vel);
Vec3PlusStVec(bp->force,-cf*50.0f,cfforce);
@@ -2314,29 +2319,31 @@ int _softbody_calc_forces_slice_in_a_thread(Object *ob, float forcetime, float t
return 0; /*done fine*/
}
-void *exec_softbody_calc_forces(void *data)
+static void *exec_softbody_calc_forces(void *data)
{
SB_thread_context *pctx = (SB_thread_context*)data;
_softbody_calc_forces_slice_in_a_thread(pctx->ob,pctx->forcetime,pctx->timenow,pctx->ifirst,pctx->ilast,NULL,pctx->do_effector,pctx->do_deflector,pctx->fieldfactor,pctx->windfactor);
return 0;
}
-void sb_cf_threads_run(struct Object *ob, float forcetime, float timenow,int totpoint,int *ptr_to_break_func(),struct ListBase *do_effector,int do_deflector,float fieldfactor, float windfactor)
+static void sb_cf_threads_run(struct Object *ob, float forcetime, float timenow,int totpoint,int *ptr_to_break_func(),struct ListBase *do_effector,int do_deflector,float fieldfactor, float windfactor)
{
ListBase threads;
SB_thread_context *sb_threads;
int i, totthread,left,dec;
- int lowpoints =10; /* wild guess .. may increase with better thread management 'above' or even be UI option sb->spawn_cf_threads_nopts */
+ int lowpoints =100; /* wild guess .. may increase with better thread management 'above' or even be UI option sb->spawn_cf_threads_nopts */
/* figure the number of threads while preventing pretty pointless threading overhead */
- if(totpoint < lowpoints) {totthread=1;}
- else{
- if(G.scene->r.mode & R_FIXED_THREADS)
- totthread= G.scene->r.threads;
- else
- totthread= BLI_system_thread_count();
+ if(G.scene->r.mode & R_FIXED_THREADS)
+ totthread= G.scene->r.threads;
+ else
+ totthread= BLI_system_thread_count();
+ /* what if we got zillions of CPUs running but less to spread*/
+ while ((totpoint/totthread < lowpoints) && (totthread > 1)) {
+ totthread--;
}
- /*left to do--> what if we got zillions of CPUs running but 'totpoint' tasks to spread*/
+
+ /* printf("sb_cf_threads_run spawning %d threads \n",totthread); */
sb_threads= MEM_callocN(sizeof(SB_thread_context)*totthread, "SBThread");
memset(sb_threads, 0, sizeof(SB_thread_context)*totthread);
@@ -2425,7 +2432,7 @@ static void softbody_calc_forcesEx(Object *ob, float forcetime, float timenow, i
static void softbody_calc_forces(Object *ob, float forcetime, float timenow, int nl_flags)
{
/* redirection to the new threaded Version */
- if (G.rt !=16){
+ if (!(G.rt & 0x10)){ // 16
softbody_calc_forcesEx(ob, forcetime, timenow, nl_flags);
return;
}
@@ -2433,6 +2440,10 @@ static void softbody_calc_forces(Object *ob, float forcetime, float timenow, int
/* so the following will die */
/* |||||||||||||||||||||||||| */
/* VVVVVVVVVVVVVVVVVVVVVVVVVV */
+ /*backward compatibility note:
+ fixing bug [17428] which forces adaptive step size to tiny steps
+ in some situations
+ .. keeping G.rt==17 0x11 option for old files 'needing' the bug*/
/* rule we never alter free variables :bp->vec bp->pos in here !
* this will ruin adaptive stepsize AKA heun! (BM)
@@ -2681,14 +2692,25 @@ static void softbody_calc_forces(Object *ob, float forcetime, float timenow, int
if (sb_deflect_face(ob,bp->pos,facenormal,defforce,&cf,timenow,vel,&intrusion)){
if ((!nl_flags)&&(intrusion < 0.0f)){
- /*bjornmose: uugh.. what an evil hack
- violation of the 'don't touch bp->pos in here' rule
- but works nice, like this-->
- we predict the solution beeing out of the collider
- in heun step No1 and leave the heun step No2 adapt to it
- so we kind of introduced a implicit solver for this case
- */
- Vec3PlusStVec(bp->pos,-intrusion,facenormal);
+ if(G.rt & 0x01){ // 17 we did check for bit 0x10 before
+ /*fixing bug [17428] this forces adaptive step size to tiny steps
+ in some situations .. keeping G.rt==17 option for old files 'needing' the bug
+ */
+ /*bjornmose: uugh.. what an evil hack
+ violation of the 'don't touch bp->pos in here' rule
+ but works nice, like this-->
+ we predict the solution beeing out of the collider
+ in heun step No1 and leave the heun step No2 adapt to it
+ so we kind of introduced a implicit solver for this case
+ */
+ Vec3PlusStVec(bp->pos,-intrusion,facenormal);
+ }
+ else{
+
+ VECSUB(cfforce,bp->vec,vel);
+ Vec3PlusStVec(bp->force,-cf*50.0f,cfforce);
+ }
+
sb->scratch->flag |= SBF_DOFUZZY;
bp->flag |= SBF_DOFUZZY;
@@ -3045,7 +3067,7 @@ static void softbody_apply_goalsnap(Object *ob)
}
-void apply_spring_memory(Object *ob)
+static void apply_spring_memory(Object *ob)
{
SoftBody *sb = ob->soft;
BodySpring *bs;
@@ -3271,7 +3293,7 @@ static void mesh_faces_to_scratch(Object *ob)
helper function to get proper spring length
when object is rescaled
*/
-float globallen(float *v1,float *v2,Object *ob)
+static float globallen(float *v1,float *v2,Object *ob)
{
float p1[3],p2[3];
VECCOPY(p1,v1);
@@ -3689,7 +3711,7 @@ static int softbody_read_cache(Object *ob, float framenr)
}
/* +++ ************ maintaining scratch *************** */
-void sb_new_scratch(SoftBody *sb)
+static void sb_new_scratch(SoftBody *sb)
{
if (!sb) return;
sb->scratch = MEM_callocN(sizeof(SBScratch), "SBScratch");
@@ -4040,7 +4062,7 @@ static void softbody_step(Object *ob, SoftBody *sb, float dtime)
if(sb->solverflags & SBSO_MONITOR ){
sct=PIL_check_seconds_timer();
- if (sct-sst > 0.5f) printf(" solver time %f sec %s \n",sct-sst,ob->id.name);
+ if ((sct-sst > 0.5f) || (G.f & G_DEBUG)) printf(" solver time %f sec %s \n",sct-sst,ob->id.name);
}
}
diff --git a/source/blender/blenkernel/intern/subsurf_ccg.c b/source/blender/blenkernel/intern/subsurf_ccg.c
index bba79bd6d28..f79009e673d 100644
--- a/source/blender/blenkernel/intern/subsurf_ccg.c
+++ b/source/blender/blenkernel/intern/subsurf_ccg.c
@@ -61,6 +61,10 @@
#include "BIF_gl.h"
+#include "GPU_draw.h"
+#include "GPU_extensions.h"
+#include "GPU_material.h"
+
#include "CCGSubSurf.h"
typedef struct _VertData {
@@ -82,9 +86,9 @@ struct CCGDerivedMesh {
typedef struct CCGDerivedMesh CCGDerivedMesh;
-static int ccgDM_getVertMapIndex(CCGDerivedMesh *ccgdm, CCGSubSurf *ss, CCGVert *v);
-static int ccgDM_getEdgeMapIndex(CCGDerivedMesh *ccgdm, CCGSubSurf *ss, CCGEdge *e);
-static int ccgDM_getFaceMapIndex(CCGDerivedMesh *ccgdm, CCGSubSurf *ss, CCGFace *f);
+static int ccgDM_getVertMapIndex(CCGSubSurf *ss, CCGVert *v);
+static int ccgDM_getEdgeMapIndex(CCGSubSurf *ss, CCGEdge *e);
+static int ccgDM_getFaceMapIndex(CCGSubSurf *ss, CCGFace *f);
///
@@ -157,8 +161,8 @@ static CCGSubSurf *_getSubSurf(CCGSubSurf *prevSS, int subdivLevels, int useAgin
}
static int getEdgeIndex(CCGSubSurf *ss, CCGEdge *e, int x, int edgeSize) {
- CCGVert *v0 = ccgSubSurf_getEdgeVert0(ss, e);
- CCGVert *v1 = ccgSubSurf_getEdgeVert1(ss, e);
+ CCGVert *v0 = ccgSubSurf_getEdgeVert0(e);
+ CCGVert *v1 = ccgSubSurf_getEdgeVert1(e);
int v0idx = *((int*) ccgSubSurf_getVertUserData(ss, v0));
int v1idx = *((int*) ccgSubSurf_getVertUserData(ss, v1));
int edgeBase = *((int*) ccgSubSurf_getEdgeUserData(ss, e));
@@ -173,7 +177,7 @@ static int getEdgeIndex(CCGSubSurf *ss, CCGEdge *e, int x, int edgeSize) {
}
static int getFaceIndex(CCGSubSurf *ss, CCGFace *f, int S, int x, int y, int edgeSize, int gridSize) {
int faceBase = *((int*) ccgSubSurf_getFaceUserData(ss, f));
- int numVerts = ccgSubSurf_getFaceNumVerts(ss, f);
+ int numVerts = ccgSubSurf_getFaceNumVerts(f);
if (x==gridSize-1 && y==gridSize-1) {
CCGVert *v = ccgSubSurf_getFaceVert(ss, f, S);
@@ -182,7 +186,7 @@ static int getFaceIndex(CCGSubSurf *ss, CCGFace *f, int S, int x, int y, int edg
CCGVert *v = ccgSubSurf_getFaceVert(ss, f, S);
CCGEdge *e = ccgSubSurf_getFaceEdge(ss, f, S);
int edgeBase = *((int*) ccgSubSurf_getEdgeUserData(ss, e));
- if (v==ccgSubSurf_getEdgeVert0(ss, e)) {
+ if (v==ccgSubSurf_getEdgeVert0(e)) {
return edgeBase + (gridSize-1-y)-1;
} else {
return edgeBase + (edgeSize-2-1)-((gridSize-1-y)-1);
@@ -191,7 +195,7 @@ static int getFaceIndex(CCGSubSurf *ss, CCGFace *f, int S, int x, int y, int edg
CCGVert *v = ccgSubSurf_getFaceVert(ss, f, S);
CCGEdge *e = ccgSubSurf_getFaceEdge(ss, f, (S+numVerts-1)%numVerts);
int edgeBase = *((int*) ccgSubSurf_getEdgeUserData(ss, e));
- if (v==ccgSubSurf_getEdgeVert0(ss, e)) {
+ if (v==ccgSubSurf_getEdgeVert0(e)) {
return edgeBase + (gridSize-1-x)-1;
} else {
return edgeBase + (edgeSize-2-1)-((gridSize-1-x)-1);
@@ -296,7 +300,7 @@ static int ss_sync_from_uv(CCGSubSurf *ss, CCGSubSurf *origss, DerivedMesh *dm,
if ((mv0->flag&mv1->flag) & ME_VERT_MERGED)
crease = creaseFactor;
else
- crease = ccgSubSurf_getEdgeCrease(origss, orige);
+ crease = ccgSubSurf_getEdgeCrease(orige);
ccgSubSurf_syncEdge(ss, ehdl, fverts[j], fverts[(j+1)%nverts], crease, &e);
BLI_edgehash_insert(ehash, v0, v1, NULL);
@@ -364,7 +368,7 @@ static void set_subsurf_uv(CCGSubSurf *ss, DerivedMesh *dm, DerivedMesh *result,
for(index = 0; index < totface; index++) {
CCGFace *f = faceMap[index];
- int numVerts = ccgSubSurf_getFaceNumVerts(uvss, f);
+ int numVerts = ccgSubSurf_getFaceNumVerts(f);
for (S=0; S<numVerts; S++) {
VertData *faceGridData= ccgSubSurf_getFaceGridDataArray(uvss, f, S);
@@ -395,12 +399,12 @@ static void set_subsurf_uv(CCGSubSurf *ss, DerivedMesh *dm, DerivedMesh *result,
static unsigned int ss_getEdgeFlags(CCGSubSurf *ss, CCGEdge *e, int ssFromEditmesh, DispListMesh *dlm, MEdge *medge, MTFace *tface)
{
unsigned int flags = 0;
- int N = ccgSubSurf_getEdgeNumFaces(ss, e);
+ int N = ccgSubSurf_getEdgeNumFaces(e);
if (!N) flags |= ME_LOOSEEDGE;
if (ssFromEditmesh) {
- EditEdge *eed = ccgSubSurf_getEdgeEdgeHandle(ss, e);
+ EditEdge *eed = ccgSubSurf_getEdgeEdgeHandle(e);
flags |= ME_EDGEDRAW|ME_EDGERENDER;
if (eed->seam) {
@@ -466,7 +470,7 @@ static void calc_ss_weights(int gridFaces,
}
}
-DerivedMesh *ss_to_cdderivedmesh(CCGSubSurf *ss, int ssFromEditmesh,
+static DerivedMesh *ss_to_cdderivedmesh(CCGSubSurf *ss, int ssFromEditmesh,
int drawInteriorEdges, int useSubsurfUv,
DerivedMesh *dm)
{
@@ -476,7 +480,6 @@ DerivedMesh *ss_to_cdderivedmesh(CCGSubSurf *ss, int ssFromEditmesh,
int gridFaces = gridSize - 1;
int edgeBase, faceBase;
int i, j, k, S, x, y, index;
- int vertBase = 0;
CCGVertIterator *vi;
CCGEdgeIterator *ei;
CCGFaceIterator *fi;
@@ -499,7 +502,7 @@ DerivedMesh *ss_to_cdderivedmesh(CCGSubSurf *ss, int ssFromEditmesh,
for(; !ccgVertIterator_isStopped(vi); ccgVertIterator_next(vi)) {
CCGVert *v = ccgVertIterator_getCurrent(vi);
- vertMap2[GET_INT_FROM_POINTER(ccgSubSurf_getVertVertHandle(ss, v))] = v;
+ vertMap2[GET_INT_FROM_POINTER(ccgSubSurf_getVertVertHandle(v))] = v;
}
ccgVertIterator_free(vi);
@@ -509,7 +512,7 @@ DerivedMesh *ss_to_cdderivedmesh(CCGSubSurf *ss, int ssFromEditmesh,
for(; !ccgEdgeIterator_isStopped(ei); ccgEdgeIterator_next(ei)) {
CCGEdge *e = ccgEdgeIterator_getCurrent(ei);
- edgeMap2[GET_INT_FROM_POINTER(ccgSubSurf_getEdgeEdgeHandle(ss, e))] = e;
+ edgeMap2[GET_INT_FROM_POINTER(ccgSubSurf_getEdgeEdgeHandle(e))] = e;
}
totface = ccgSubSurf_getNumFaces(ss);
@@ -539,18 +542,18 @@ DerivedMesh *ss_to_cdderivedmesh(CCGSubSurf *ss, int ssFromEditmesh,
for(index = 0; index < totface; index++) {
CCGFace *f = faceMap2[index];
- int x, y, S, numVerts = ccgSubSurf_getFaceNumVerts(ss, f);
+ int x, y, S, numVerts = ccgSubSurf_getFaceNumVerts(f);
FaceVertWeight *weight = (numVerts == 4) ? qweight : tweight;
int vertIdx[4];
for(S = 0; S < numVerts; S++) {
CCGVert *v = ccgSubSurf_getFaceVert(ss, f, S);
- vertIdx[S] = GET_INT_FROM_POINTER(ccgSubSurf_getVertVertHandle(ss, v));
+ vertIdx[S] = GET_INT_FROM_POINTER(ccgSubSurf_getVertVertHandle(v));
}
DM_interp_vert_data(dm, result, vertIdx, weight[0][0], numVerts, i);
- VecCopyf(mvert->co, ccgSubSurf_getFaceCenterData(ss, f));
+ VecCopyf(mvert->co, ccgSubSurf_getFaceCenterData(f));
*origIndex = ORIGINDEX_NONE;
++mvert;
++origIndex;
@@ -609,10 +612,10 @@ DerivedMesh *ss_to_cdderivedmesh(CCGSubSurf *ss, int ssFromEditmesh,
int vertIdx[2];
CCGVert *v;
- v = ccgSubSurf_getEdgeVert0(ss, e);
- vertIdx[0] = GET_INT_FROM_POINTER(ccgSubSurf_getVertVertHandle(ss, v));
- v = ccgSubSurf_getEdgeVert1(ss, e);
- vertIdx[1] = GET_INT_FROM_POINTER(ccgSubSurf_getVertVertHandle(ss, v));
+ v = ccgSubSurf_getEdgeVert0(e);
+ vertIdx[0] = GET_INT_FROM_POINTER(ccgSubSurf_getVertVertHandle(v));
+ v = ccgSubSurf_getEdgeVert1(e);
+ vertIdx[1] = GET_INT_FROM_POINTER(ccgSubSurf_getVertVertHandle(v));
for(x = 1; x < edgeSize - 1; x++) {
float w[2];
@@ -630,18 +633,17 @@ DerivedMesh *ss_to_cdderivedmesh(CCGSubSurf *ss, int ssFromEditmesh,
edgeBase += edgeSize-2;
}
- vertBase = i;
for(index = 0; index < totvert; index++) {
CCGVert *v = vertMap2[index];
int vertIdx;
- vertIdx = GET_INT_FROM_POINTER(ccgSubSurf_getVertVertHandle(ss, v));
+ vertIdx = GET_INT_FROM_POINTER(ccgSubSurf_getVertVertHandle(v));
DM_copy_vert_data(dm, result, vertIdx, i, 1);
VecCopyf(mvert->co, ccgSubSurf_getVertData(ss, v));
*((int*)ccgSubSurf_getVertUserData(ss, v)) = i;
- *origIndex = ccgDM_getVertMapIndex(NULL, ss, v);
+ *origIndex = ccgDM_getVertMapIndex(ss, v);
++mvert;
++origIndex;
i++;
@@ -654,7 +656,7 @@ DerivedMesh *ss_to_cdderivedmesh(CCGSubSurf *ss, int ssFromEditmesh,
for(index = 0; index < totface; index++) {
CCGFace *f = faceMap2[index];
- int numVerts = ccgSubSurf_getFaceNumVerts(ss, f);
+ int numVerts = ccgSubSurf_getFaceNumVerts(f);
for(k = 0; k < numVerts; k++) {
for(x = 0; x < gridFaces; x++) {
@@ -696,9 +698,10 @@ DerivedMesh *ss_to_cdderivedmesh(CCGSubSurf *ss, int ssFromEditmesh,
for(index = 0; index < totedge; index++) {
CCGEdge *e = edgeMap2[index];
unsigned int flags = 0;
- int edgeIdx = GET_INT_FROM_POINTER(ccgSubSurf_getEdgeEdgeHandle(ss, e));
+ char bweight = 0;
+ int edgeIdx = GET_INT_FROM_POINTER(ccgSubSurf_getEdgeEdgeHandle(e));
- if(!ccgSubSurf_getEdgeNumFaces(ss, e)) flags |= ME_LOOSEEDGE;
+ if(!ccgSubSurf_getEdgeNumFaces(e)) flags |= ME_LOOSEEDGE;
if(edgeIdx != -1 && dm) {
@@ -706,13 +709,15 @@ DerivedMesh *ss_to_cdderivedmesh(CCGSubSurf *ss, int ssFromEditmesh,
dm->getEdge(dm, edgeIdx, &origMed);
flags |= origMed.flag;
+ bweight = origMed.bweight;
}
for(x = 0; x < edgeSize - 1; x++) {
med->v1 = getEdgeIndex(ss, e, x, edgeSize);
med->v2 = getEdgeIndex(ss, e, x + 1, edgeSize);
med->flag = flags;
- *origIndex = ccgDM_getEdgeMapIndex(NULL, ss, e);
+ med->bweight = bweight;
+ *origIndex = ccgDM_getEdgeMapIndex(ss, e);
++med;
++origIndex;
i++;
@@ -726,10 +731,10 @@ DerivedMesh *ss_to_cdderivedmesh(CCGSubSurf *ss, int ssFromEditmesh,
for(index = 0; index < totface; index++) {
CCGFace *f = faceMap2[index];
- int numVerts = ccgSubSurf_getFaceNumVerts(ss, f);
+ int numVerts = ccgSubSurf_getFaceNumVerts(f);
int mat_nr;
int flag;
- int mapIndex = ccgDM_getFaceMapIndex(NULL, ss, f);
+ int mapIndex = ccgDM_getFaceMapIndex(ss, f);
int faceIdx = GET_INT_FROM_POINTER(ccgSubSurf_getFaceFaceHandle(ss, f));
if(!ssFromEditmesh) {
@@ -893,15 +898,15 @@ static void ss_sync_from_derivedmesh(CCGSubSurf *ss, DerivedMesh *dm,
/***/
-static int ccgDM_getVertMapIndex(CCGDerivedMesh *ccgdm, CCGSubSurf *ss, CCGVert *v) {
+static int ccgDM_getVertMapIndex(CCGSubSurf *ss, CCGVert *v) {
return ((int*) ccgSubSurf_getVertUserData(ss, v))[1];
}
-static int ccgDM_getEdgeMapIndex(CCGDerivedMesh *ccgdm, CCGSubSurf *ss, CCGEdge *e) {
+static int ccgDM_getEdgeMapIndex(CCGSubSurf *ss, CCGEdge *e) {
return ((int*) ccgSubSurf_getEdgeUserData(ss, e))[1];
}
-static int ccgDM_getFaceMapIndex(CCGDerivedMesh *ccgdm, CCGSubSurf *ss, CCGFace *f) {
+static int ccgDM_getFaceMapIndex(CCGSubSurf *ss, CCGFace *f) {
return ((int*) ccgSubSurf_getFaceUserData(ss, f))[1];
}
@@ -934,7 +939,7 @@ static void ccgDM_getMinMax(DerivedMesh *dm, float min_r[3], float max_r[3]) {
for (; !ccgFaceIterator_isStopped(fi); ccgFaceIterator_next(fi)) {
CCGFace *f = ccgFaceIterator_getCurrent(fi);
- int S, x, y, numVerts = ccgSubSurf_getFaceNumVerts(ss, f);
+ int S, x, y, numVerts = ccgSubSurf_getFaceNumVerts(f);
for (S=0; S<numVerts; S++) {
VertData *faceGridData = ccgSubSurf_getFaceGridDataArray(ss, f, S);
@@ -973,7 +978,7 @@ static void ccgDM_getFinalVert(DerivedMesh *dm, int vertNum, MVert *mv)
memset(mv, 0, sizeof(*mv));
- if(vertNum < ccgdm->edgeMap[0].startVert) {
+ if((vertNum < ccgdm->edgeMap[0].startVert) && (ccgSubSurf_getNumFaces(ss) > 0)) {
/* this vert comes from face data */
int lastface = ccgSubSurf_getNumFaces(ss) - 1;
CCGFace *f;
@@ -990,7 +995,7 @@ static void ccgDM_getFinalVert(DerivedMesh *dm, int vertNum, MVert *mv)
++i;
f = ccgdm->faceMap[i].face;
- numVerts = ccgSubSurf_getFaceNumVerts(ss, f);
+ numVerts = ccgSubSurf_getFaceNumVerts(f);
gridSideVerts = gridSize - 2;
gridInternalVerts = gridSideVerts * gridSideVerts;
@@ -1000,7 +1005,7 @@ static void ccgDM_getFinalVert(DerivedMesh *dm, int vertNum, MVert *mv)
offset = vertNum - ccgdm->faceMap[i].startVert;
if(offset < 1) {
- VecCopyf(mv->co, ccgSubSurf_getFaceCenterData(ss, f));
+ VecCopyf(mv->co, ccgSubSurf_getFaceCenterData(f));
} else if(offset < gridSideEnd) {
offset -= 1;
grid = offset / gridSideVerts;
@@ -1014,7 +1019,7 @@ static void ccgDM_getFinalVert(DerivedMesh *dm, int vertNum, MVert *mv)
x = offset % gridSideVerts + 1;
VecCopyf(mv->co, ccgSubSurf_getFaceGridData(ss, f, grid, x, y));
}
- } else if(vertNum < ccgdm->vertMap[0].startVert) {
+ } else if((vertNum < ccgdm->vertMap[0].startVert) && (ccgSubSurf_getNumEdges(ss) > 0)) {
/* this vert comes from edge data */
CCGEdge *e;
int lastedge = ccgSubSurf_getNumEdges(ss) - 1;
@@ -1062,7 +1067,7 @@ static void ccgDM_getFinalEdge(DerivedMesh *dm, int edgeNum, MEdge *med)
++i;
f = ccgdm->faceMap[i].face;
- numVerts = ccgSubSurf_getFaceNumVerts(ss, f);
+ numVerts = ccgSubSurf_getFaceNumVerts(f);
gridSideEdges = gridSize - 1;
gridInternalEdges = (gridSideEdges - 1) * gridSideEdges * 2;
@@ -1098,7 +1103,7 @@ static void ccgDM_getFinalEdge(DerivedMesh *dm, int edgeNum, MEdge *med)
e = ccgdm->edgeMap[i].edge;
- if(!ccgSubSurf_getEdgeNumFaces(ss, e)) flags |= ME_LOOSEEDGE;
+ if(!ccgSubSurf_getEdgeNumFaces(e)) flags |= ME_LOOSEEDGE;
x = edgeNum - ccgdm->edgeMap[i].startEdge;
@@ -1140,7 +1145,7 @@ static void ccgDM_getFinalFace(DerivedMesh *dm, int faceNum, MFace *mf)
++i;
f = ccgdm->faceMap[i].face;
- numVerts = ccgSubSurf_getFaceNumVerts(ss, f);
+ numVerts = ccgSubSurf_getFaceNumVerts(f);
offset = faceNum - ccgdm->faceMap[i].startFace;
grid = offset / gridFaces;
@@ -1170,9 +1175,9 @@ static void ccgDM_copyFinalVertArray(DerivedMesh *dm, MVert *mvert)
totface = ccgSubSurf_getNumFaces(ss);
for(index = 0; index < totface; index++) {
CCGFace *f = ccgdm->faceMap[index].face;
- int x, y, S, numVerts = ccgSubSurf_getFaceNumVerts(ss, f);
+ int x, y, S, numVerts = ccgSubSurf_getFaceNumVerts(f);
- VecCopyf(mvert[i++].co, ccgSubSurf_getFaceCenterData(ss, f));
+ VecCopyf(mvert[i++].co, ccgSubSurf_getFaceCenterData(f));
for(S = 0; S < numVerts; S++) {
for(x = 1; x < gridSize - 1; x++) {
@@ -1225,7 +1230,7 @@ static void ccgDM_copyFinalEdgeArray(DerivedMesh *dm, MEdge *medge)
totface = ccgSubSurf_getNumFaces(ss);
for(index = 0; index < totface; index++) {
CCGFace *f = ccgdm->faceMap[index].face;
- int x, y, S, numVerts = ccgSubSurf_getFaceNumVerts(ss, f);
+ int x, y, S, numVerts = ccgSubSurf_getFaceNumVerts(f);
for(S = 0; S < numVerts; S++) {
for(x = 0; x < gridSize - 1; x++) {
@@ -1269,9 +1274,9 @@ static void ccgDM_copyFinalEdgeArray(DerivedMesh *dm, MEdge *medge)
CCGEdge *e = ccgdm->edgeMap[index].edge;
unsigned int flags = 0;
int x;
- int edgeIdx = GET_INT_FROM_POINTER(ccgSubSurf_getEdgeEdgeHandle(ss, e));
+ int edgeIdx = GET_INT_FROM_POINTER(ccgSubSurf_getEdgeEdgeHandle(e));
- if(!ccgSubSurf_getEdgeNumFaces(ss, e)) flags |= ME_LOOSEEDGE;
+ if(!ccgSubSurf_getEdgeNumFaces(e)) flags |= ME_LOOSEEDGE;
if(edgeFlags) {
if(edgeIdx != -1) {
@@ -1306,7 +1311,7 @@ static void ccgDM_copyFinalFaceArray(DerivedMesh *dm, MFace *mface)
totface = ccgSubSurf_getNumFaces(ss);
for(index = 0; index < totface; index++) {
CCGFace *f = ccgdm->faceMap[index].face;
- int x, y, S, numVerts = ccgSubSurf_getFaceNumVerts(ss, f);
+ int x, y, S, numVerts = ccgSubSurf_getFaceNumVerts(f);
int mat_nr = 0;
int flag = ME_SMOOTH; /* assume face is smooth by default */
@@ -1353,7 +1358,7 @@ static void ccgdm_getVertCos(DerivedMesh *dm, float (*cos)[3]) {
for (; !ccgVertIterator_isStopped(vi); ccgVertIterator_next(vi)) {
CCGVert *v = ccgVertIterator_getCurrent(vi);
- vertMap2[GET_INT_FROM_POINTER(ccgSubSurf_getVertVertHandle(ss, v))] = v;
+ vertMap2[GET_INT_FROM_POINTER(ccgSubSurf_getVertVertHandle(v))] = v;
}
ccgVertIterator_free(vi);
@@ -1363,7 +1368,7 @@ static void ccgdm_getVertCos(DerivedMesh *dm, float (*cos)[3]) {
for (i=0; !ccgEdgeIterator_isStopped(ei); i++,ccgEdgeIterator_next(ei)) {
CCGEdge *e = ccgEdgeIterator_getCurrent(ei);
- edgeMap2[GET_INT_FROM_POINTER(ccgSubSurf_getEdgeEdgeHandle(ss, e))] = e;
+ edgeMap2[GET_INT_FROM_POINTER(ccgSubSurf_getEdgeEdgeHandle(e))] = e;
}
totface = ccgSubSurf_getNumFaces(ss);
@@ -1379,9 +1384,9 @@ static void ccgdm_getVertCos(DerivedMesh *dm, float (*cos)[3]) {
i = 0;
for (index=0; index<totface; index++) {
CCGFace *f = faceMap2[index];
- int x, y, S, numVerts = ccgSubSurf_getFaceNumVerts(ss, f);
+ int x, y, S, numVerts = ccgSubSurf_getFaceNumVerts(f);
- VecCopyf(cos[i++], ccgSubSurf_getFaceCenterData(ss, f));
+ VecCopyf(cos[i++], ccgSubSurf_getFaceCenterData(f));
for (S=0; S<numVerts; S++) {
for (x=1; x<gridSize-1; x++) {
@@ -1423,7 +1428,7 @@ static void ccgDM_foreachMappedVert(DerivedMesh *dm, void (*func)(void *userData
for (; !ccgVertIterator_isStopped(vi); ccgVertIterator_next(vi)) {
CCGVert *v = ccgVertIterator_getCurrent(vi);
VertData *vd = ccgSubSurf_getVertData(ccgdm->ss, v);
- int index = ccgDM_getVertMapIndex(ccgdm, ccgdm->ss, v);
+ int index = ccgDM_getVertMapIndex(ccgdm->ss, v);
if (index!=-1)
func(userData, index, vd->co, vd->no, NULL);
@@ -1440,7 +1445,7 @@ static void ccgDM_foreachMappedEdge(DerivedMesh *dm, void (*func)(void *userData
for (; !ccgEdgeIterator_isStopped(ei); ccgEdgeIterator_next(ei)) {
CCGEdge *e = ccgEdgeIterator_getCurrent(ei);
VertData *edgeData = ccgSubSurf_getEdgeDataArray(ss, e);
- int index = ccgDM_getEdgeMapIndex(ccgdm, ss, e);
+ int index = ccgDM_getEdgeMapIndex(ss, e);
if (index!=-1) {
for (i=0; i<edgeSize-1; i++)
@@ -1481,9 +1486,9 @@ static void ccgDM_drawVerts(DerivedMesh *dm) {
fi = ccgSubSurf_getFaceIterator(ss);
for (; !ccgFaceIterator_isStopped(fi); ccgFaceIterator_next(fi)) {
CCGFace *f = ccgFaceIterator_getCurrent(fi);
- int x, y, S, numVerts = ccgSubSurf_getFaceNumVerts(ss, f);
+ int x, y, S, numVerts = ccgSubSurf_getFaceNumVerts(f);
- glVertex3fv(ccgSubSurf_getFaceCenterData(ss, f));
+ glVertex3fv(ccgSubSurf_getFaceCenterData(f));
for (S=0; S<numVerts; S++)
for (x=1; x<gridSize-1; x++)
glVertex3fv(ccgSubSurf_getFaceGridEdgeData(ss, f, S, x));
@@ -1510,7 +1515,7 @@ static void ccgDM_drawEdges(DerivedMesh *dm, int drawLooseEdges) {
CCGEdge *e = ccgEdgeIterator_getCurrent(ei);
VertData *edgeData = ccgSubSurf_getEdgeDataArray(ss, e);
- if (!drawLooseEdges && !ccgSubSurf_getEdgeNumFaces(ss, e))
+ if (!drawLooseEdges && !ccgSubSurf_getEdgeNumFaces(e))
continue;
if (useAging && !(G.f&G_BACKBUFSEL)) {
@@ -1533,7 +1538,7 @@ static void ccgDM_drawEdges(DerivedMesh *dm, int drawLooseEdges) {
if (ccgdm->drawInteriorEdges) {
for (; !ccgFaceIterator_isStopped(fi); ccgFaceIterator_next(fi)) {
CCGFace *f = ccgFaceIterator_getCurrent(fi);
- int S, x, y, numVerts = ccgSubSurf_getFaceNumVerts(ss, f);
+ int S, x, y, numVerts = ccgSubSurf_getFaceNumVerts(f);
for (S=0; S<numVerts; S++) {
VertData *faceGridData = ccgSubSurf_getFaceGridDataArray(ss, f, S);
@@ -1571,7 +1576,7 @@ static void ccgDM_drawLooseEdges(DerivedMesh *dm) {
CCGEdge *e = ccgEdgeIterator_getCurrent(ei);
VertData *edgeData = ccgSubSurf_getEdgeDataArray(ss, e);
- if (!ccgSubSurf_getEdgeNumFaces(ss, e)) {
+ if (!ccgSubSurf_getEdgeNumFaces(e)) {
glBegin(GL_LINE_STRIP);
for (i=0; i<edgeSize-1; i++) {
glVertex3fv(edgeData[i].co);
@@ -1599,7 +1604,7 @@ static void ccgDM_glNormalFast(float *a, float *b, float *c, float *d)
}
/* Only used by non-editmesh types */
-static void ccgDM_drawFacesSolid(DerivedMesh *dm, int (*setMaterial)(int)) {
+static void ccgDM_drawFacesSolid(DerivedMesh *dm, int (*setMaterial)(int, void *attribs)) {
CCGDerivedMesh *ccgdm = (CCGDerivedMesh*) dm;
CCGSubSurf *ss = ccgdm->ss;
CCGFaceIterator *fi = ccgSubSurf_getFaceIterator(ss);
@@ -1608,7 +1613,7 @@ static void ccgDM_drawFacesSolid(DerivedMesh *dm, int (*setMaterial)(int)) {
for (; !ccgFaceIterator_isStopped(fi); ccgFaceIterator_next(fi)) {
CCGFace *f = ccgFaceIterator_getCurrent(fi);
- int S, x, y, numVerts = ccgSubSurf_getFaceNumVerts(ss, f);
+ int S, x, y, numVerts = ccgSubSurf_getFaceNumVerts(f);
int index = GET_INT_FROM_POINTER(ccgSubSurf_getFaceFaceHandle(ss, f));
int drawSmooth, mat_nr;
@@ -1621,7 +1626,7 @@ static void ccgDM_drawFacesSolid(DerivedMesh *dm, int (*setMaterial)(int)) {
mat_nr= 0;
}
- if (!setMaterial(mat_nr+1))
+ if (!setMaterial(mat_nr+1, NULL))
continue;
glShadeModel(drawSmooth? GL_SMOOTH: GL_FLAT);
@@ -1666,6 +1671,168 @@ static void ccgDM_drawFacesSolid(DerivedMesh *dm, int (*setMaterial)(int)) {
ccgFaceIterator_free(fi);
}
+
+ /* Only used by non-editmesh types */
+static void ccgDM_drawMappedFacesGLSL(DerivedMesh *dm, int (*setMaterial)(int, void *attribs), int (*setDrawOptions)(void *userData, int index), void *userData) {
+ CCGDerivedMesh *ccgdm = (CCGDerivedMesh*) dm;
+ CCGSubSurf *ss = ccgdm->ss;
+ CCGFaceIterator *fi = ccgSubSurf_getFaceIterator(ss);
+ GPUVertexAttribs gattribs;
+ DMVertexAttribs attribs;
+ MTFace *tf = dm->getFaceDataArray(dm, CD_MTFACE);
+ int gridSize = ccgSubSurf_getGridSize(ss);
+ int gridFaces = gridSize - 1;
+ int edgeSize = ccgSubSurf_getEdgeSize(ss);
+ int transp, orig_transp, new_transp;
+ char *faceFlags = DM_get_face_data_layer(dm, CD_FLAGS);
+ int a, b, i, doDraw, numVerts, matnr, new_matnr, totface;
+
+ doDraw = 0;
+ numVerts = 0;
+ matnr = -1;
+ transp = GPU_get_material_blend_mode();
+ orig_transp = transp;
+
+ memset(&attribs, 0, sizeof(attribs));
+
+#define PASSATTRIB(dx, dy, vert) { \
+ if(attribs.totorco) { \
+ index = getFaceIndex(ss, f, S, x+dx, y+dy, edgeSize, gridSize); \
+ glVertexAttrib3fvARB(attribs.orco.glIndex, attribs.orco.array[index]); \
+ } \
+ for(b = 0; b < attribs.tottface; b++) { \
+ MTFace *tf = &attribs.tface[b].array[a]; \
+ glVertexAttrib2fvARB(attribs.tface[b].glIndex, tf->uv[vert]); \
+ } \
+ for(b = 0; b < attribs.totmcol; b++) { \
+ MCol *cp = &attribs.mcol[b].array[a*4 + vert]; \
+ GLubyte col[4]; \
+ col[0]= cp->b; col[1]= cp->g; col[2]= cp->r; col[3]= cp->a; \
+ glVertexAttrib4ubvARB(attribs.mcol[b].glIndex, col); \
+ } \
+ if(attribs.tottang) { \
+ float *tang = attribs.tang.array[a*4 + vert]; \
+ glVertexAttrib3fvARB(attribs.tang.glIndex, tang); \
+ } \
+}
+
+ totface = ccgSubSurf_getNumFaces(ss);
+ for(a = 0, i = 0; i < totface; i++) {
+ CCGFace *f = ccgdm->faceMap[i].face;
+ int S, x, y, drawSmooth;
+ int index = GET_INT_FROM_POINTER(ccgSubSurf_getFaceFaceHandle(ss, f));
+ int origIndex = ccgDM_getFaceMapIndex(ss, f);
+
+ numVerts = ccgSubSurf_getFaceNumVerts(f);
+
+ if(faceFlags) {
+ drawSmooth = (faceFlags[index*4] & ME_SMOOTH);
+ new_matnr= faceFlags[index*4 + 1] + 1;
+ }
+ else {
+ drawSmooth = 1;
+ new_matnr= 1;
+ }
+
+ if(new_matnr != matnr) {
+ doDraw = setMaterial(matnr = new_matnr, &gattribs);
+ if(doDraw)
+ DM_vertex_attributes_from_gpu(dm, &gattribs, &attribs);
+ }
+
+ if(!doDraw || (setDrawOptions && !setDrawOptions(userData, origIndex))) {
+ a += gridFaces*gridFaces*numVerts;
+ continue;
+ }
+
+ if(tf) {
+ new_transp = tf[i].transp;
+
+ if(new_transp != transp) {
+ if(new_transp == GPU_BLEND_SOLID && orig_transp != GPU_BLEND_SOLID)
+ GPU_set_material_blend_mode(orig_transp);
+ else
+ GPU_set_material_blend_mode(new_transp);
+ transp = new_transp;
+ }
+ }
+
+ glShadeModel(drawSmooth? GL_SMOOTH: GL_FLAT);
+ for (S=0; S<numVerts; S++) {
+ VertData *faceGridData = ccgSubSurf_getFaceGridDataArray(ss, f, S);
+ VertData *vda, *vdb;
+
+ if (drawSmooth) {
+ for (y=0; y<gridFaces; y++) {
+ glBegin(GL_QUAD_STRIP);
+ for (x=0; x<gridFaces; x++) {
+ vda = &faceGridData[(y+0)*gridSize + x];
+ vdb = &faceGridData[(y+1)*gridSize + x];
+
+ PASSATTRIB(0, 0, 0);
+ glNormal3fv(vda->no);
+ glVertex3fv(vda->co);
+
+ PASSATTRIB(0, 1, 1);
+ glNormal3fv(vdb->no);
+ glVertex3fv(vdb->co);
+
+ if(x != gridFaces-1)
+ a++;
+ }
+
+ vda = &faceGridData[(y+0)*gridSize + x];
+ vdb = &faceGridData[(y+1)*gridSize + x];
+
+ PASSATTRIB(0, 0, 3);
+ glNormal3fv(vda->no);
+ glVertex3fv(vda->co);
+
+ PASSATTRIB(0, 1, 2);
+ glNormal3fv(vdb->no);
+ glVertex3fv(vdb->co);
+
+ glEnd();
+
+ a++;
+ }
+ } else {
+ glBegin(GL_QUADS);
+ for (y=0; y<gridFaces; y++) {
+ for (x=0; x<gridFaces; x++) {
+ float *aco = faceGridData[(y+0)*gridSize + x].co;
+ float *bco = faceGridData[(y+0)*gridSize + x + 1].co;
+ float *cco = faceGridData[(y+1)*gridSize + x + 1].co;
+ float *dco = faceGridData[(y+1)*gridSize + x].co;
+
+ ccgDM_glNormalFast(aco, bco, cco, dco);
+
+ PASSATTRIB(0, 1, 1);
+ glVertex3fv(dco);
+ PASSATTRIB(1, 1, 2);
+ glVertex3fv(cco);
+ PASSATTRIB(1, 0, 3);
+ glVertex3fv(bco);
+ PASSATTRIB(0, 0, 0);
+ glVertex3fv(aco);
+
+ a++;
+ }
+ }
+ glEnd();
+ }
+ }
+ }
+
+#undef PASSATTRIB
+
+ ccgFaceIterator_free(fi);
+}
+
+static void ccgDM_drawFacesGLSL(DerivedMesh *dm, int (*setMaterial)(int, void *attribs)) {
+ dm->drawMappedFacesGLSL(dm, setMaterial, NULL, NULL);
+}
+
static void ccgDM_drawFacesColored(DerivedMesh *dm, int useTwoSided, unsigned char *col1, unsigned char *col2) {
CCGDerivedMesh *ccgdm = (CCGDerivedMesh*) dm;
CCGSubSurf *ss = ccgdm->ss;
@@ -1689,7 +1856,7 @@ static void ccgDM_drawFacesColored(DerivedMesh *dm, int useTwoSided, unsigned ch
glBegin(GL_QUADS);
for (; !ccgFaceIterator_isStopped(fi); ccgFaceIterator_next(fi)) {
CCGFace *f = ccgFaceIterator_getCurrent(fi);
- int S, x, y, numVerts = ccgSubSurf_getFaceNumVerts(ss, f);
+ int S, x, y, numVerts = ccgSubSurf_getFaceNumVerts(f);
for (S=0; S<numVerts; S++) {
VertData *faceGridData = ccgSubSurf_getFaceGridDataArray(ss, f, S);
@@ -1747,8 +1914,8 @@ static void ccgDM_drawFacesTex_common(DerivedMesh *dm,
totface = ccgSubSurf_getNumFaces(ss);
for(i = 0; i < totface; i++) {
CCGFace *f = ccgdm->faceMap[i].face;
- int S, x, y, numVerts = ccgSubSurf_getFaceNumVerts(ss, f);
- int drawSmooth, index = ccgDM_getFaceMapIndex(ccgdm, ss, f);
+ int S, x, y, numVerts = ccgSubSurf_getFaceNumVerts(f);
+ int drawSmooth, index = ccgDM_getFaceMapIndex(ss, f);
int origIndex = GET_INT_FROM_POINTER(ccgSubSurf_getFaceFaceHandle(ss, f));
unsigned char *cp= NULL;
int mat_nr;
@@ -1830,28 +1997,28 @@ static void ccgDM_drawFacesTex_common(DerivedMesh *dm,
glBegin(GL_QUADS);
for (y=0; y<gridFaces; y++) {
for (x=0; x<gridFaces; x++) {
- float *a = faceGridData[(y+0)*gridSize + x].co;
- float *b = faceGridData[(y+0)*gridSize + x + 1].co;
- float *c = faceGridData[(y+1)*gridSize + x + 1].co;
- float *d = faceGridData[(y+1)*gridSize + x].co;
+ float *a_co = faceGridData[(y+0)*gridSize + x].co;
+ float *b_co = faceGridData[(y+0)*gridSize + x + 1].co;
+ float *c_co = faceGridData[(y+1)*gridSize + x + 1].co;
+ float *d_co = faceGridData[(y+1)*gridSize + x].co;
- ccgDM_glNormalFast(a, b, c, d);
+ ccgDM_glNormalFast(a_co, b_co, c_co, d_co);
if(tf) glTexCoord2fv(tf->uv[1]);
if(cp) glColor3ub(cp[7], cp[6], cp[5]);
- glVertex3fv(d);
+ glVertex3fv(d_co);
if(tf) glTexCoord2fv(tf->uv[2]);
if(cp) glColor3ub(cp[11], cp[10], cp[9]);
- glVertex3fv(c);
+ glVertex3fv(c_co);
if(tf) glTexCoord2fv(tf->uv[3]);
if(cp) glColor3ub(cp[15], cp[14], cp[13]);
- glVertex3fv(b);
+ glVertex3fv(b_co);
if(tf) glTexCoord2fv(tf->uv[0]);
if(cp) glColor3ub(cp[3], cp[2], cp[1]);
- glVertex3fv(a);
+ glVertex3fv(a_co);
if(tf) tf++;
if(cp) cp += 16;
@@ -1915,8 +2082,8 @@ static void ccgDM_drawMappedFaces(DerivedMesh *dm, int (*setDrawOptions)(void *u
for (i=0; !ccgFaceIterator_isStopped(fi); i++,ccgFaceIterator_next(fi)) {
CCGFace *f = ccgFaceIterator_getCurrent(fi);
- int S, x, y, numVerts = ccgSubSurf_getFaceNumVerts(ss, f);
- int drawSmooth, index = ccgDM_getFaceMapIndex(ccgdm, ss, f);
+ int S, x, y, numVerts = ccgSubSurf_getFaceNumVerts(f);
+ int drawSmooth, index = ccgDM_getFaceMapIndex(ss, f);
int origIndex;
origIndex = GET_INT_FROM_POINTER(ccgSubSurf_getFaceFaceHandle(ss, f));
@@ -1997,7 +2164,7 @@ static void ccgDM_drawMappedEdges(DerivedMesh *dm, int (*setDrawOptions)(void *u
for (; !ccgEdgeIterator_isStopped(ei); ccgEdgeIterator_next(ei)) {
CCGEdge *e = ccgEdgeIterator_getCurrent(ei);
VertData *edgeData = ccgSubSurf_getEdgeDataArray(ss, e);
- int index = ccgDM_getEdgeMapIndex(ccgdm, ss, e);
+ int index = ccgDM_getEdgeMapIndex(ss, e);
glBegin(GL_LINE_STRIP);
if (index!=-1 && (!setDrawOptions || setDrawOptions(userData, index))) {
@@ -2027,7 +2194,7 @@ static void ccgDM_drawMappedEdgesInterp(DerivedMesh *dm, int (*setDrawOptions)(v
for (; !ccgEdgeIterator_isStopped(ei); ccgEdgeIterator_next(ei)) {
CCGEdge *e = ccgEdgeIterator_getCurrent(ei);
VertData *edgeData = ccgSubSurf_getEdgeDataArray(ss, e);
- int index = ccgDM_getEdgeMapIndex(ccgdm, ss, e);
+ int index = ccgDM_getEdgeMapIndex(ss, e);
glBegin(GL_LINE_STRIP);
if (index!=-1 && (!setDrawOptions || setDrawOptions(userData, index))) {
@@ -2054,7 +2221,7 @@ static void ccgDM_foreachMappedFaceCenter(DerivedMesh *dm, void (*func)(void *us
for (; !ccgFaceIterator_isStopped(fi); ccgFaceIterator_next(fi)) {
CCGFace *f = ccgFaceIterator_getCurrent(fi);
- int index = ccgDM_getFaceMapIndex(ccgdm, ss, f);
+ int index = ccgDM_getFaceMapIndex(ss, f);
if (index!=-1) {
/* Face center data normal isn't updated atm. */
@@ -2090,17 +2257,17 @@ static CCGDerivedMesh *getCCGDerivedMesh(CCGSubSurf *ss,
int index, totvert, totedge, totface;
int i;
int vertNum, edgeNum, faceNum;
- int *vertOrigIndex, *edgeOrigIndex, *faceOrigIndex;
+ int *vertOrigIndex, *faceOrigIndex; /* *edgeOrigIndex - as yet, unused */
int *edgeFlags;
char *faceFlags;
int edgeSize;
int gridSize;
int gridFaces;
int gridSideVerts;
- int gridInternalVerts;
+ /*int gridInternalVerts; - as yet unused */
int gridSideEdges;
int gridInternalEdges;
- MVert *mvert = NULL;
+ /* MVert *mvert = NULL; - as yet unused */
MEdge *medge = NULL;
MFace *mface = NULL;
FaceVertWeight *qweight, *tweight;
@@ -2143,8 +2310,10 @@ static CCGDerivedMesh *getCCGDerivedMesh(CCGSubSurf *ss,
ccgdm->dm.drawFacesSolid = ccgDM_drawFacesSolid;
ccgdm->dm.drawFacesColored = ccgDM_drawFacesColored;
ccgdm->dm.drawFacesTex = ccgDM_drawFacesTex;
+ ccgdm->dm.drawFacesGLSL = ccgDM_drawFacesGLSL;
ccgdm->dm.drawMappedFaces = ccgDM_drawMappedFaces;
ccgdm->dm.drawMappedFacesTex = ccgDM_drawMappedFacesTex;
+ ccgdm->dm.drawMappedFacesGLSL = ccgDM_drawMappedFacesGLSL;
ccgdm->dm.drawUVEdges = ccgDM_drawUVEdges;
ccgdm->dm.drawMappedEdgesInterp = ccgDM_drawMappedEdgesInterp;
@@ -2162,7 +2331,7 @@ static CCGDerivedMesh *getCCGDerivedMesh(CCGSubSurf *ss,
for(; !ccgVertIterator_isStopped(vi); ccgVertIterator_next(vi)) {
CCGVert *v = ccgVertIterator_getCurrent(vi);
- ccgdm->vertMap[GET_INT_FROM_POINTER(ccgSubSurf_getVertVertHandle(ss, v))].vert = v;
+ ccgdm->vertMap[GET_INT_FROM_POINTER(ccgSubSurf_getVertVertHandle(v))].vert = v;
}
ccgVertIterator_free(vi);
@@ -2172,7 +2341,7 @@ static CCGDerivedMesh *getCCGDerivedMesh(CCGSubSurf *ss,
for(; !ccgEdgeIterator_isStopped(ei); ccgEdgeIterator_next(ei)) {
CCGEdge *e = ccgEdgeIterator_getCurrent(ei);
- ccgdm->edgeMap[GET_INT_FROM_POINTER(ccgSubSurf_getEdgeEdgeHandle(ss, e))].edge = e;
+ ccgdm->edgeMap[GET_INT_FROM_POINTER(ccgSubSurf_getEdgeEdgeHandle(e))].edge = e;
}
totface = ccgSubSurf_getNumFaces(ss);
@@ -2189,7 +2358,7 @@ static CCGDerivedMesh *getCCGDerivedMesh(CCGSubSurf *ss,
gridSize = ccgSubSurf_getGridSize(ss);
gridFaces = gridSize - 1;
gridSideVerts = gridSize - 2;
- gridInternalVerts = gridSideVerts * gridSideVerts;
+ /*gridInternalVerts = gridSideVerts * gridSideVerts; - as yet, unused */
gridSideEdges = gridSize - 1;
gridInternalEdges = (gridSideEdges - 1) * gridSideEdges * 2;
@@ -2199,21 +2368,21 @@ static CCGDerivedMesh *getCCGDerivedMesh(CCGSubSurf *ss,
edgeNum = 0;
faceNum = 0;
- mvert = dm->getVertArray(dm);
+ /* mvert = dm->getVertArray(dm); - as yet unused */
medge = dm->getEdgeArray(dm);
mface = dm->getFaceArray(dm);
vertOrigIndex = DM_get_vert_data_layer(&ccgdm->dm, CD_ORIGINDEX);
- edgeOrigIndex = DM_get_edge_data_layer(&ccgdm->dm, CD_ORIGINDEX);
+ /*edgeOrigIndex = DM_get_edge_data_layer(&ccgdm->dm, CD_ORIGINDEX);*/
faceOrigIndex = DM_get_face_data_layer(&ccgdm->dm, CD_ORIGINDEX);
faceFlags = DM_get_face_data_layer(&ccgdm->dm, CD_FLAGS);
for(index = 0; index < totface; ++index) {
CCGFace *f = ccgdm->faceMap[index].face;
- int numVerts = ccgSubSurf_getFaceNumVerts(ss, f);
+ int numVerts = ccgSubSurf_getFaceNumVerts(f);
int numFinalEdges = numVerts * (gridSideEdges + gridInternalEdges);
- int mapIndex = ccgDM_getFaceMapIndex(ccgdm, ss, f);
+ int mapIndex = ccgDM_getFaceMapIndex(ss, f);
int origIndex = GET_INT_FROM_POINTER(ccgSubSurf_getFaceFaceHandle(ss, f));
FaceVertWeight *weight = (numVerts == 4) ? qweight : tweight;
int S, x, y;
@@ -2229,7 +2398,7 @@ static CCGDerivedMesh *getCCGDerivedMesh(CCGSubSurf *ss,
for(S = 0; S < numVerts; S++) {
CCGVert *v = ccgSubSurf_getFaceVert(ss, f, S);
- vertIdx[S] = GET_INT_FROM_POINTER(ccgSubSurf_getVertVertHandle(ss, v));
+ vertIdx[S] = GET_INT_FROM_POINTER(ccgSubSurf_getVertVertHandle(v));
}
DM_interp_vert_data(dm, &ccgdm->dm, vertIdx, weight[0][0],
@@ -2332,16 +2501,16 @@ static CCGDerivedMesh *getCCGDerivedMesh(CCGSubSurf *ss,
for(index = 0; index < totedge; ++index) {
CCGEdge *e = ccgdm->edgeMap[index].edge;
int numFinalEdges = edgeSize - 1;
- int mapIndex = ccgDM_getEdgeMapIndex(ccgdm, ss, e);
+ int mapIndex = ccgDM_getEdgeMapIndex(ss, e);
int x;
int vertIdx[2];
- int edgeIdx = GET_INT_FROM_POINTER(ccgSubSurf_getEdgeEdgeHandle(ss, e));
+ int edgeIdx = GET_INT_FROM_POINTER(ccgSubSurf_getEdgeEdgeHandle(e));
CCGVert *v;
- v = ccgSubSurf_getEdgeVert0(ss, e);
- vertIdx[0] = GET_INT_FROM_POINTER(ccgSubSurf_getVertVertHandle(ss, v));
- v = ccgSubSurf_getEdgeVert1(ss, e);
- vertIdx[1] = GET_INT_FROM_POINTER(ccgSubSurf_getVertVertHandle(ss, v));
+ v = ccgSubSurf_getEdgeVert0(e);
+ vertIdx[0] = GET_INT_FROM_POINTER(ccgSubSurf_getVertVertHandle(v));
+ v = ccgSubSurf_getEdgeVert1(e);
+ vertIdx[1] = GET_INT_FROM_POINTER(ccgSubSurf_getVertVertHandle(v));
ccgdm->edgeMap[index].startVert = vertNum;
ccgdm->edgeMap[index].startEdge = edgeNum;
@@ -2372,10 +2541,10 @@ static CCGDerivedMesh *getCCGDerivedMesh(CCGSubSurf *ss,
for(index = 0; index < totvert; ++index) {
CCGVert *v = ccgdm->vertMap[index].vert;
- int mapIndex = ccgDM_getVertMapIndex(ccgdm, ccgdm->ss, v);
+ int mapIndex = ccgDM_getVertMapIndex(ccgdm->ss, v);
int vertIdx;
- vertIdx = GET_INT_FROM_POINTER(ccgSubSurf_getVertVertHandle(ss, v));
+ vertIdx = GET_INT_FROM_POINTER(ccgSubSurf_getVertVertHandle(v));
ccgdm->vertMap[index].startVert = vertNum;
@@ -2508,9 +2677,9 @@ void subsurf_calculate_limit_positions(Mesh *me, float (*positions_r)[3])
vi = ccgSubSurf_getVertIterator(ss);
for (; !ccgVertIterator_isStopped(vi); ccgVertIterator_next(vi)) {
CCGVert *v = ccgVertIterator_getCurrent(vi);
- int idx = GET_INT_FROM_POINTER(ccgSubSurf_getVertVertHandle(ss, v));
- int N = ccgSubSurf_getVertNumEdges(ss, v);
- int numFaces = ccgSubSurf_getVertNumFaces(ss, v);
+ int idx = GET_INT_FROM_POINTER(ccgSubSurf_getVertVertHandle(v));
+ int N = ccgSubSurf_getVertNumEdges(v);
+ int numFaces = ccgSubSurf_getVertNumFaces(v);
float *co;
int i;
@@ -2518,12 +2687,12 @@ void subsurf_calculate_limit_positions(Mesh *me, float (*positions_r)[3])
face_sum[0]= face_sum[1]= face_sum[2]= 0.0;
for (i=0; i<N; i++) {
- CCGEdge *e = ccgSubSurf_getVertEdge(ss, v, i);
+ CCGEdge *e = ccgSubSurf_getVertEdge(v, i);
VecAddf(edge_sum, edge_sum, ccgSubSurf_getEdgeData(ss, e, 1));
}
for (i=0; i<numFaces; i++) {
- CCGFace *f = ccgSubSurf_getVertFace(ss, v, i);
- VecAddf(face_sum, face_sum, ccgSubSurf_getFaceCenterData(ss, f));
+ CCGFace *f = ccgSubSurf_getVertFace(v, i);
+ VecAddf(face_sum, face_sum, ccgSubSurf_getFaceCenterData(f));
}
/* ad-hoc correction for boundary vertices, to at least avoid them
diff --git a/source/blender/blenkernel/intern/suggestions.c b/source/blender/blenkernel/intern/suggestions.c
new file mode 100644
index 00000000000..6530909336c
--- /dev/null
+++ b/source/blender/blenkernel/intern/suggestions.c
@@ -0,0 +1,254 @@
+/**
+ * $Id: $
+ *
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * The Original Code is Copyright (C) 2008, Blender Foundation
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): Ian Thompson.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+
+#include "MEM_guardedalloc.h"
+#include "BLI_blenlib.h"
+#include "DNA_text_types.h"
+#include "BKE_text.h"
+#include "BKE_suggestions.h"
+
+/**********************/
+/* Static definitions */
+/**********************/
+
+static Text *activeToolText = NULL;
+static SuggList suggestions = {NULL, NULL, NULL, NULL, NULL};
+static char *documentation = NULL;
+//static int doc_lines = 0;
+
+static int txttl_cmp(const char *first, const char *second, int len) {
+ int cmp, i;
+ for (cmp=0, i=0; i<len; i++) {
+ if ( (cmp= toupper(first[i])-toupper(second[i])) ) {
+ break;
+ }
+ }
+ return cmp;
+}
+
+static void txttl_free_suggest() {
+ SuggItem *item, *prev;
+ for (item = suggestions.last; item; item=prev) {
+ prev = item->prev;
+ MEM_freeN(item);
+ }
+ suggestions.first = suggestions.last = NULL;
+ suggestions.firstmatch = suggestions.lastmatch = NULL;
+ suggestions.selected = NULL;
+ suggestions.top = 0;
+}
+
+static void txttl_free_docs() {
+ if (documentation) {
+ MEM_freeN(documentation);
+ documentation = NULL;
+ }
+}
+
+/**************************/
+/* General tool functions */
+/**************************/
+
+void free_texttools() {
+ txttl_free_suggest();
+ txttl_free_docs();
+}
+
+void texttool_text_set_active(Text *text) {
+ if (activeToolText == text) return;
+ texttool_text_clear();
+ activeToolText = text;
+}
+
+void texttool_text_clear() {
+ free_texttools();
+ activeToolText = NULL;
+}
+
+short texttool_text_is_active(Text *text) {
+ return activeToolText==text ? 1 : 0;
+}
+
+/***************************/
+/* Suggestion list methods */
+/***************************/
+
+void texttool_suggest_add(const char *name, char type) {
+ SuggItem *newitem, *item;
+ int len, cmp;
+
+ newitem = MEM_mallocN(sizeof(SuggItem) + strlen(name) + 1, "SuggestionItem");
+ if (!newitem) {
+ printf("Failed to allocate memory for suggestion.\n");
+ return;
+ }
+
+ newitem->name = (char *) (newitem + 1);
+ len = strlen(name);
+ strncpy(newitem->name, name, len);
+ newitem->name[len] = '\0';
+ newitem->type = type;
+ newitem->prev = newitem->next = NULL;
+
+ /* Perform simple linear search for ordered storage */
+ if (!suggestions.first || !suggestions.last) {
+ suggestions.first = suggestions.last = newitem;
+ } else {
+ cmp = -1;
+ for (item=suggestions.last; item; item=item->prev) {
+ cmp = txttl_cmp(name, item->name, len);
+
+ /* Newitem comes after this item, insert here */
+ if (cmp >= 0) {
+ newitem->prev = item;
+ if (item->next)
+ item->next->prev = newitem;
+ newitem->next = item->next;
+ item->next = newitem;
+
+ /* At last item, set last pointer here */
+ if (item == suggestions.last)
+ suggestions.last = newitem;
+ break;
+ }
+ }
+ /* Reached beginning of list, insert before first */
+ if (cmp < 0) {
+ newitem->next = suggestions.first;
+ suggestions.first->prev = newitem;
+ suggestions.first = newitem;
+ }
+ }
+ suggestions.firstmatch = suggestions.lastmatch = suggestions.selected = NULL;
+ suggestions.top= 0;
+}
+
+void texttool_suggest_prefix(const char *prefix) {
+ SuggItem *match, *first, *last;
+ int cmp, len = strlen(prefix), top = 0;
+
+ if (!suggestions.first) return;
+ if (len==0) {
+ suggestions.selected = suggestions.firstmatch = suggestions.first;
+ suggestions.lastmatch = suggestions.last;
+ return;
+ }
+
+ first = last = NULL;
+ for (match=suggestions.first; match; match=match->next) {
+ cmp = txttl_cmp(prefix, match->name, len);
+ if (cmp==0) {
+ if (!first) {
+ first = match;
+ suggestions.top = top;
+ }
+ } else if (cmp<0) {
+ if (!last) {
+ last = match->prev;
+ break;
+ }
+ }
+ top++;
+ }
+ if (first) {
+ if (!last) last = suggestions.last;
+ suggestions.firstmatch = first;
+ suggestions.lastmatch = last;
+ suggestions.selected = first;
+ } else {
+ suggestions.firstmatch = NULL;
+ suggestions.lastmatch = NULL;
+ suggestions.selected = NULL;
+ suggestions.top = 0;
+ }
+}
+
+void texttool_suggest_clear() {
+ txttl_free_suggest();
+}
+
+SuggItem *texttool_suggest_first() {
+ return suggestions.firstmatch;
+}
+
+SuggItem *texttool_suggest_last() {
+ return suggestions.lastmatch;
+}
+
+void texttool_suggest_select(SuggItem *sel) {
+ suggestions.selected = sel;
+}
+
+SuggItem *texttool_suggest_selected() {
+ return suggestions.selected;
+}
+
+int *texttool_suggest_top() {
+ return &suggestions.top;
+}
+
+/*************************/
+/* Documentation methods */
+/*************************/
+
+void texttool_docs_show(const char *docs) {
+ int len;
+
+ if (!docs) return;
+
+ len = strlen(docs);
+
+ if (documentation) {
+ MEM_freeN(documentation);
+ documentation = NULL;
+ }
+
+ /* Ensure documentation ends with a '\n' */
+ if (docs[len-1] != '\n') {
+ documentation = MEM_mallocN(len+2, "Documentation");
+ strncpy(documentation, docs, len);
+ documentation[len++] = '\n';
+ } else {
+ documentation = MEM_mallocN(len+1, "Documentation");
+ strncpy(documentation, docs, len);
+ }
+ documentation[len] = '\0';
+}
+
+char *texttool_docs_get() {
+ return documentation;
+}
+
+void texttool_docs_clear() {
+ txttl_free_docs();
+}
diff --git a/source/blender/blenkernel/intern/text.c b/source/blender/blenkernel/intern/text.c
index 53b7bb975a3..9e6efa59d71 100644
--- a/source/blender/blenkernel/intern/text.c
+++ b/source/blender/blenkernel/intern/text.c
@@ -30,6 +30,8 @@
*/
#include <string.h> /* strstr */
+#include <sys/types.h>
+#include <sys/stat.h>
#include "MEM_guardedalloc.h"
@@ -81,12 +83,19 @@ The st->top determines at what line the top of the text is displayed.
If the user moves the cursor the st containing that cursor should
be popped ... other st's retain their own top location.
-*/ /***************/
-
+Markers
+--
+The mrk->flags define the behaviour and relationships between markers. The
+upper two bytes are used to hold a group ID, the lower two are normal flags. If
+TMARK_EDITALL is set the group ID defines which other markers should be edited.
-/****************/ /*
- Undo
+The mrk->clr field is used to visually group markers where the flags may not
+match. A template system, for example, may allow editing of repeating tokens
+(in one group) but include other marked positions (in another group) all in the
+same template with the same colour.
+Undo
+--
Undo/Redo works by storing
events in a queue, and a pointer
to the current position in the
@@ -145,6 +154,7 @@ void free_text(Text *text)
}
BLI_freelistN(&text->lines);
+ BLI_freelistN(&text->markers);
if(text->name) MEM_freeN(text->name);
MEM_freeN(text->undo_buf);
@@ -169,10 +179,11 @@ Text *add_empty_text(char *name)
ta->flags= TXT_ISDIRTY | TXT_ISTMP | TXT_ISMEM;
ta->lines.first= ta->lines.last= NULL;
+ ta->markers.first= ta->markers.last= NULL;
tmp= (TextLine*) MEM_mallocN(sizeof(TextLine), "textline");
tmp->line= (char*) MEM_mallocN(1, "textline_string");
- tmp->format= (char*) MEM_mallocN(2, "Syntax_format");
+ tmp->format= NULL;
tmp->line[0]=0;
tmp->len= 0;
@@ -209,11 +220,12 @@ static void cleanup_textline(TextLine * tl)
int reopen_text(Text *text)
{
FILE *fp;
- int i, llen, len;
+ int i, llen, len, res;
unsigned char *buffer;
TextLine *tmp;
char sfile[FILE_MAXFILE];
char str[FILE_MAXDIR+FILE_MAXFILE];
+ struct stat st;
if (!text || !text->name) return 0;
@@ -242,7 +254,7 @@ int reopen_text(Text *text)
text->undo_len= TXT_INIT_UNDO;
text->undo_buf= MEM_mallocN(text->undo_len, "undo buf");
- text->flags= TXT_ISDIRTY | TXT_ISTMP;
+ text->flags= TXT_ISTMP;
fseek(fp, 0L, SEEK_END);
len= ftell(fp);
@@ -256,6 +268,9 @@ int reopen_text(Text *text)
len = fread(buffer, 1, len, fp);
fclose(fp);
+
+ res= stat(str, &st);
+ text->mtime= st.st_mtime;
text->nlines=0;
i=0;
@@ -264,7 +279,7 @@ int reopen_text(Text *text)
if (buffer[i]=='\n') {
tmp= (TextLine*) MEM_mallocN(sizeof(TextLine), "textline");
tmp->line= (char*) MEM_mallocN(llen+1, "textline_string");
- tmp->format= (char*) MEM_mallocN(llen+2, "Syntax_format");
+ tmp->format= NULL;
if(llen) memcpy(tmp->line, &buffer[i-llen], llen);
tmp->line[llen]=0;
@@ -284,7 +299,7 @@ int reopen_text(Text *text)
if (llen!=0 || text->nlines==0) {
tmp= (TextLine*) MEM_mallocN(sizeof(TextLine), "textline");
tmp->line= (char*) MEM_mallocN(llen+1, "textline_string");
- tmp->format= (char*) MEM_mallocN(llen+2, "Syntax_format");
+ tmp->format= NULL;
if(llen) memcpy(tmp->line, &buffer[i-llen], llen);
@@ -307,12 +322,13 @@ int reopen_text(Text *text)
Text *add_text(char *file)
{
FILE *fp;
- int i, llen, len;
+ int i, llen, len, res;
unsigned char *buffer;
TextLine *tmp;
Text *ta;
char sfile[FILE_MAXFILE];
char str[FILE_MAXDIR+FILE_MAXFILE];
+ struct stat st;
BLI_strncpy(str, file, FILE_MAXDIR+FILE_MAXFILE);
if (G.scene) /* can be NULL (bg mode) */
@@ -326,6 +342,7 @@ Text *add_text(char *file)
ta->id.us= 1;
ta->lines.first= ta->lines.last= NULL;
+ ta->markers.first= ta->markers.last= NULL;
ta->curl= ta->sell= NULL;
/* ta->flags= TXT_ISTMP | TXT_ISEXT; */
@@ -348,6 +365,9 @@ Text *add_text(char *file)
len = fread(buffer, 1, len, fp);
fclose(fp);
+
+ res= stat(str, &st);
+ ta->mtime= st.st_mtime;
ta->nlines=0;
i=0;
@@ -356,7 +376,7 @@ Text *add_text(char *file)
if (buffer[i]=='\n') {
tmp= (TextLine*) MEM_mallocN(sizeof(TextLine), "textline");
tmp->line= (char*) MEM_mallocN(llen+1, "textline_string");
- tmp->format= (char*) MEM_mallocN(llen+2, "Syntax_format");
+ tmp->format= NULL;
if(llen) memcpy(tmp->line, &buffer[i-llen], llen);
tmp->line[llen]=0;
@@ -376,7 +396,7 @@ Text *add_text(char *file)
if (llen!=0 || ta->nlines==0) {
tmp= (TextLine*) MEM_mallocN(sizeof(TextLine), "textline");
tmp->line= (char*) MEM_mallocN(llen+1, "textline_string");
- tmp->format= (char*) MEM_mallocN(llen+2, "Syntax_format");
+ tmp->format= NULL;
if(llen) memcpy(tmp->line, &buffer[i-llen], llen);
@@ -410,6 +430,7 @@ Text *copy_text(Text *ta)
tan->flags = ta->flags | TXT_ISDIRTY | TXT_ISTMP;
tan->lines.first= tan->lines.last= NULL;
+ tan->markers.first= tan->markers.last= NULL;
tan->curl= tan->sell= NULL;
tan->nlines= ta->nlines;
@@ -419,7 +440,7 @@ Text *copy_text(Text *ta)
while (line) {
tmp= (TextLine*) MEM_mallocN(sizeof(TextLine), "textline");
tmp->line= MEM_mallocN(line->len+1, "textline_string");
- tmp->format= MEM_mallocN(line->len+2, "Syntax_format");
+ tmp->format= NULL;
strcpy(tmp->line, line->line);
@@ -440,14 +461,14 @@ Text *copy_text(Text *ta)
/* Editing utility functions */
/*****************************/
-static void make_new_line (TextLine *line, char *newline, char *newformat)
+static void make_new_line (TextLine *line, char *newline)
{
if (line->line) MEM_freeN(line->line);
if (line->format) MEM_freeN(line->format);
line->line= newline;
line->len= strlen(newline);
- line->format= newformat;
+ line->format= NULL;
}
static TextLine *txt_new_line(char *str)
@@ -458,7 +479,7 @@ static TextLine *txt_new_line(char *str)
tmp= (TextLine *) MEM_mallocN(sizeof(TextLine), "textline");
tmp->line= MEM_mallocN(strlen(str)+1, "textline_string");
- tmp->format= MEM_mallocN(strlen(str)+2, "Syntax_format");
+ tmp->format= NULL;
strcpy(tmp->line, str);
@@ -476,7 +497,7 @@ static TextLine *txt_new_linen(char *str, int n)
tmp= (TextLine *) MEM_mallocN(sizeof(TextLine), "textline");
tmp->line= MEM_mallocN(n+1, "textline_string");
- tmp->format= MEM_mallocN(n+2, "Syntax_format");
+ tmp->format= NULL;
BLI_strncpy(tmp->line, str, n+1);
@@ -553,6 +574,20 @@ static void txt_make_dirty (Text *text)
if (text->compiled) BPY_free_compiled_text(text);
}
+/* 0:whitespace, 1:punct, 2:alphanumeric */
+static short txt_char_type (char ch)
+{
+ if (ch <= ' ') return 0; /* 32 */
+ if (ch <= '/') return 1; /* 47 */
+ if (ch <= '9') return 2; /* 57 */
+ if (ch <= '@') return 1; /* 64 */
+ if (ch <= 'Z') return 2; /* 90 */
+ if (ch == '_') return 2; /* 95, dont delimit '_' */
+ if (ch <= '`') return 1; /* 96 */
+ if (ch <= 'z') return 2; /* 122 */
+ return 1;
+}
+
/****************************/
/* Cursor utility functions */
/****************************/
@@ -606,8 +641,7 @@ void txt_move_up(Text *text, short sel)
if(!undoing) txt_undo_add_op(text, sel?UNDO_SUP:UNDO_CUP);
}
} else {
- *charp= 0;
- if(!undoing) txt_undo_add_op(text, sel?UNDO_SUP:UNDO_CUP);
+ txt_move_bol(text, sel);
}
if(!sel) txt_pop_sel(text);
@@ -632,8 +666,7 @@ void txt_move_down(Text *text, short sel)
} else
if(!undoing) txt_undo_add_op(text, sel?UNDO_SDOWN:UNDO_CDOWN);
} else {
- *charp= (*linep)->len;
- if(!undoing) txt_undo_add_op(text, sel?UNDO_SDOWN:UNDO_CDOWN);
+ txt_move_eol(text, sel);
}
if(!sel) txt_pop_sel(text);
@@ -689,6 +722,68 @@ void txt_move_right(Text *text, short sel)
if(!sel) txt_pop_sel(text);
}
+void txt_jump_left(Text *text, short sel)
+{
+ TextLine **linep, *oldl;
+ int *charp, oldc, count, i;
+ unsigned char oldu;
+
+ if (!text) return;
+ if(sel) txt_curs_sel(text, &linep, &charp);
+ else { txt_pop_first(text); txt_curs_cur(text, &linep, &charp); }
+ if (!*linep) return;
+
+ oldl= *linep;
+ oldc= *charp;
+ oldu= undoing;
+ undoing= 1; /* Don't push individual moves to undo stack */
+
+ count= 0;
+ for (i=0; i<3; i++) {
+ if (count < 2) {
+ while (*charp>0 && txt_char_type((*linep)->line[*charp-1])==i) {
+ txt_move_left(text, sel);
+ count++;
+ }
+ }
+ }
+ if (count==0) txt_move_left(text, sel);
+
+ undoing= oldu;
+ if(!undoing) txt_undo_add_toop(text, sel?UNDO_STO:UNDO_CTO, txt_get_span(text->lines.first, oldl), oldc, txt_get_span(text->lines.first, *linep), (unsigned short)*charp);
+}
+
+void txt_jump_right(Text *text, short sel)
+{
+ TextLine **linep, *oldl;
+ int *charp, oldc, count, i;
+ unsigned char oldu;
+
+ if (!text) return;
+ if(sel) txt_curs_sel(text, &linep, &charp);
+ else { txt_pop_last(text); txt_curs_cur(text, &linep, &charp); }
+ if (!*linep) return;
+
+ oldl= *linep;
+ oldc= *charp;
+ oldu= undoing;
+ undoing= 1; /* Don't push individual moves to undo stack */
+
+ count= 0;
+ for (i=0; i<3; i++) {
+ if (count < 2) {
+ while (*charp<(*linep)->len && txt_char_type((*linep)->line[*charp])==i) {
+ txt_move_right(text, sel);
+ count++;
+ }
+ }
+ }
+ if (count==0) txt_move_right(text, sel);
+
+ undoing= oldu;
+ if(!undoing) txt_undo_add_toop(text, sel?UNDO_STO:UNDO_CTO, txt_get_span(text->lines.first, oldl), oldc, txt_get_span(text->lines.first, *linep), (unsigned short)*charp);
+}
+
void txt_move_bol (Text *text, short sel)
{
TextLine **linep;
@@ -761,6 +856,11 @@ void txt_move_eof (Text *text, short sel)
void txt_move_toline (Text *text, unsigned int line, short sel)
{
+ txt_move_to(text, line, 0, sel);
+}
+
+void txt_move_to (Text *text, unsigned int line, unsigned int ch, short sel)
+{
TextLine **linep, *oldl;
int *charp, oldc;
unsigned int i;
@@ -777,10 +877,12 @@ void txt_move_toline (Text *text, unsigned int line, short sel)
if ((*linep)->next) *linep= (*linep)->next;
else break;
}
- *charp= 0;
+ if (ch>(*linep)->len)
+ ch= (*linep)->len;
+ *charp= ch;
if(!sel) txt_pop_sel(text);
- if(!undoing) txt_undo_add_toop(text, sel?UNDO_STO:UNDO_CTO, txt_get_span(text->lines.first, oldl), oldc, txt_get_span(text->lines.first, *linep), (unsigned short)*charp);
+ if(!undoing) txt_undo_add_toop(text, sel?UNDO_STO:UNDO_CTO, txt_get_span(text->lines.first, oldl), oldc, txt_get_span(text->lines.first, *linep), (unsigned short)*charp);
}
/****************************/
@@ -865,7 +967,9 @@ int txt_has_sel(Text *text)
static void txt_delete_sel (Text *text)
{
TextLine *tmpl;
- char *buf, *format;
+ TextMarker *mrk;
+ char *buf;
+ int move, lineno;
if (!text) return;
if (!text->curl) return;
@@ -882,13 +986,33 @@ static void txt_delete_sel (Text *text)
}
buf= MEM_mallocN(text->curc+(text->sell->len - text->selc)+1, "textline_string");
- format= MEM_mallocN(text->curc+(text->sell->len - text->selc)+2, "Syntax_format");
+ if (text->curl != text->sell) {
+ txt_clear_marker_region(text, text->curl, text->curc, text->curl->len, 0, 0);
+ move= txt_get_span(text->curl, text->sell);
+ } else {
+ mrk= txt_find_marker_region(text, text->curl, text->curc, text->selc, 0, 0);
+ if (mrk && (mrk->start > text->curc || mrk->end < text->selc))
+ txt_clear_marker_region(text, text->curl, text->curc, text->selc, 0, 0);
+ move= 0;
+ }
+
+ mrk= txt_find_marker_region(text, text->sell, text->selc-1, text->sell->len, 0, 0);
+ if (mrk) {
+ lineno= mrk->lineno;
+ do {
+ mrk->lineno -= move;
+ if (mrk->start > text->curc) mrk->start -= text->selc - text->curc;
+ mrk->end -= text->selc - text->curc;
+ mrk= mrk->next;
+ } while (mrk && mrk->lineno==lineno);
+ }
+
strncpy(buf, text->curl->line, text->curc);
strcpy(buf+text->curc, text->sell->line + text->selc);
buf[text->curc+(text->sell->len - text->selc)]=0;
- make_new_line(text->curl, buf, format);
+ make_new_line(text->curl, buf);
tmpl= text->sell;
while (tmpl != text->curl) {
@@ -995,22 +1119,31 @@ char *txt_to_buf (Text *text)
return buf;
}
-int txt_find_string(Text *text, char *findstr)
+int txt_find_string(Text *text, char *findstr, int wrap)
{
TextLine *tl, *startl;
char *s= NULL;
+ int oldcl, oldsl, oldcc, oldsc;
if (!text || !text->curl || !text->sell) return 0;
txt_order_cursors(text);
+ oldcl= txt_get_span(text->lines.first, text->curl);
+ oldsl= txt_get_span(text->lines.first, text->sell);
tl= startl= text->sell;
+ oldcc= text->curc;
+ oldsc= text->selc;
s= strstr(&tl->line[text->selc], findstr);
while (!s) {
tl= tl->next;
- if (!tl)
- tl= text->lines.first;
+ if (!tl) {
+ if (wrap)
+ tl= text->lines.first;
+ else
+ break;
+ }
s= strstr(tl->line, findstr);
if (tl==startl)
@@ -1018,10 +1151,10 @@ int txt_find_string(Text *text, char *findstr)
}
if (s) {
- text->curl= text->sell= tl;
- text->curc= (int) (s-tl->line);
- text->selc= text->curc + strlen(findstr);
-
+ int newl= txt_get_span(text->lines.first, tl);
+ int newc= (int)(s-tl->line);
+ txt_move_to(text, newl, newc, 0);
+ txt_move_to(text, newl, newc + strlen(findstr), 1);
return 1;
} else
return 0;
@@ -1621,7 +1754,6 @@ void txt_do_undo(Text *text)
case UNDO_SWAP:
txt_curs_swap(text);
- txt_do_undo(text); /* swaps should appear transparent */
break;
case UNDO_DBLOCK:
@@ -1736,6 +1868,19 @@ void txt_do_undo(Text *text)
break;
}
+
+ /* next undo step may need evaluating */
+ if (text->undo_pos>=0) {
+ switch (text->undo_buf[text->undo_pos]) {
+ case UNDO_STO:
+ txt_do_undo(text);
+ txt_do_redo(text); /* selections need restoring */
+ break;
+ case UNDO_SWAP:
+ txt_do_undo(text); /* swaps should appear transparent */
+ break;
+ }
+ }
undoing= 0;
}
@@ -1810,7 +1955,7 @@ void txt_do_redo(Text *text)
case UNDO_SWAP:
txt_curs_swap(text);
- txt_do_undo(text); /* swaps should appear transparent a*/
+ txt_do_redo(text); /* swaps should appear transparent a*/
break;
case UNDO_CTO:
@@ -1947,22 +2092,37 @@ void txt_do_redo(Text *text)
void txt_split_curline (Text *text)
{
TextLine *ins;
- char *left, *right, *fleft, *fright;
+ TextMarker *mrk;
+ char *left, *right;
+ int lineno= -1;
if (!text) return;
if (!text->curl) return;
- txt_delete_sel(text);
+ txt_delete_sel(text);
+
+ /* Move markers */
+
+ lineno= txt_get_span(text->lines.first, text->curl);
+ mrk= text->markers.first;
+ while (mrk) {
+ if (mrk->lineno==lineno && mrk->start>text->curc) {
+ mrk->lineno++;
+ mrk->start -= text->curc;
+ mrk->end -= text->curc;
+ } else if (mrk->lineno > lineno) {
+ mrk->lineno++;
+ }
+ mrk= mrk->next;
+ }
/* Make the two half strings */
left= MEM_mallocN(text->curc+1, "textline_string");
- fleft= MEM_mallocN(text->curc+2, "Syntax_format");
if (text->curc) memcpy(left, text->curl->line, text->curc);
left[text->curc]=0;
right= MEM_mallocN(text->curl->len - text->curc+1, "textline_string");
- fright= MEM_mallocN(text->curl->len - text->curc+2, "Syntax_format");
if (text->curl->len - text->curc) memcpy(right, text->curl->line+text->curc, text->curl->len-text->curc);
right[text->curl->len - text->curc]=0;
@@ -1973,11 +2133,11 @@ void txt_split_curline (Text *text)
ins= MEM_mallocN(sizeof(TextLine), "textline");
ins->line= left;
- ins->format= fleft;
+ ins->format= NULL;
ins->len= text->curc;
text->curl->line= right;
- text->curl->format= fright;
+ text->curl->format= NULL;
text->curl->len= text->curl->len - text->curc;
BLI_insertlinkbefore(&text->lines, text->curl, ins);
@@ -1993,9 +2153,23 @@ void txt_split_curline (Text *text)
static void txt_delete_line (Text *text, TextLine *line)
{
+ TextMarker *mrk=NULL, *nxt;
+ int lineno= -1;
+
if (!text) return;
if (!text->curl) return;
+ lineno= txt_get_span(text->lines.first, line);
+ mrk= text->markers.first;
+ while (mrk) {
+ nxt= mrk->next;
+ if (mrk->lineno==lineno)
+ BLI_freelinkN(&text->markers, mrk);
+ else if (mrk->lineno > lineno)
+ mrk->lineno--;
+ mrk= nxt;
+ }
+
BLI_remlink (&text->lines, line);
if (line->line) MEM_freeN(line->line);
@@ -2009,21 +2183,35 @@ static void txt_delete_line (Text *text, TextLine *line)
static void txt_combine_lines (Text *text, TextLine *linea, TextLine *lineb)
{
- char *tmp, *format;
+ char *tmp;
+ TextMarker *mrk= NULL;
+ int lineno=-1;
if (!text) return;
if(!linea || !lineb) return;
+
+ mrk= txt_find_marker_region(text, lineb, 0, lineb->len, 0, 0);
+ if (mrk) {
+ lineno= mrk->lineno;
+ do {
+ mrk->lineno--;
+ mrk->start += linea->len;
+ mrk->end += linea->len;
+ mrk= mrk->next;
+ } while (mrk && mrk->lineno==lineno);
+ }
+ if (lineno==-1) lineno= txt_get_span(text->lines.first, lineb);
+ if (!mrk) mrk= text->markers.first;
tmp= MEM_mallocN(linea->len+lineb->len+1, "textline_string");
- format= MEM_mallocN(linea->len+lineb->len+1, "Syntax_format");
strcpy(tmp, linea->line);
strcat(tmp, lineb->line);
- make_new_line(linea, tmp, format);
+ make_new_line(linea, tmp);
- txt_delete_line(text, lineb);
+ txt_delete_line(text, lineb);
txt_make_dirty(text);
txt_clean_text(text);
@@ -2037,8 +2225,9 @@ void txt_delete_char (Text *text)
if (!text->curl) return;
if (txt_has_sel(text)) { /* deleting a selection */
- txt_delete_sel(text);
- return;
+ txt_delete_sel(text);
+ txt_make_dirty(text);
+ return;
}
else if (text->curc== text->curl->len) { /* Appending two lines */
if (text->curl->next) {
@@ -2047,6 +2236,24 @@ void txt_delete_char (Text *text)
}
} else { /* Just deleting a char */
int i= text->curc;
+
+ TextMarker *mrk= txt_find_marker_region(text, text->curl, i-1, text->curl->len, 0, 0);
+ if (mrk) {
+ int lineno= mrk->lineno;
+ if (mrk->end==i) {
+ if ((mrk->flags & TMARK_TEMP) && !(mrk->flags & TMARK_EDITALL)) {
+ txt_clear_markers(text, mrk->group, TMARK_TEMP);
+ } else {
+ BLI_freelinkN(&text->markers, mrk);
+ }
+ return;
+ }
+ do {
+ if (mrk->start>i) mrk->start--;
+ mrk->end--;
+ mrk= mrk->next;
+ } while (mrk && mrk->lineno==lineno);
+ }
c= text->curl->line[i];
while(i< text->curl->len) {
@@ -2064,6 +2271,12 @@ void txt_delete_char (Text *text)
if(!undoing) txt_undo_add_charop(text, UNDO_DEL, c);
}
+void txt_delete_word (Text *text)
+{
+ txt_jump_right(text, 1);
+ txt_delete_sel(text);
+}
+
void txt_backspace_char (Text *text)
{
char c='\n';
@@ -2072,8 +2285,9 @@ void txt_backspace_char (Text *text)
if (!text->curl) return;
if (txt_has_sel(text)) { /* deleting a selection */
- txt_delete_sel(text);
- return;
+ txt_delete_sel(text);
+ txt_make_dirty(text);
+ return;
}
else if (text->curc==0) { /* Appending two lines */
if (!text->curl->prev) return;
@@ -2083,19 +2297,37 @@ void txt_backspace_char (Text *text)
txt_combine_lines(text, text->curl, text->curl->next);
txt_pop_sel(text);
- }
+ }
else { /* Just backspacing a char */
- int i= text->curc-1;
-
- c= text->curl->line[i];
- while(i< text->curl->len) {
- text->curl->line[i]= text->curl->line[i+1];
- i++;
- }
- text->curl->len--;
- text->curc--;
+ int i= text->curc-1;
+
+ TextMarker *mrk= txt_find_marker_region(text, text->curl, i, text->curl->len, 0, 0);
+ if (mrk) {
+ int lineno= mrk->lineno;
+ if (mrk->start==i+1) {
+ if ((mrk->flags & TMARK_TEMP) && !(mrk->flags & TMARK_EDITALL)) {
+ txt_clear_markers(text, mrk->group, TMARK_TEMP);
+ } else {
+ BLI_freelinkN(&text->markers, mrk);
+ }
+ return;
+ }
+ do {
+ if (mrk->start>i) mrk->start--;
+ mrk->end--;
+ mrk= mrk->next;
+ } while (mrk && mrk->lineno==lineno);
+ }
- txt_pop_sel(text);
+ c= text->curl->line[i];
+ while(i< text->curl->len) {
+ text->curl->line[i]= text->curl->line[i+1];
+ i++;
+ }
+ text->curl->len--;
+ text->curc--;
+
+ txt_pop_sel(text);
}
txt_make_dirty(text);
@@ -2104,10 +2336,17 @@ void txt_backspace_char (Text *text)
if(!undoing) txt_undo_add_charop(text, UNDO_BS, c);
}
+void txt_backspace_word (Text *text)
+{
+ txt_jump_left(text, 1);
+ txt_delete_sel(text);
+}
+
int txt_add_char (Text *text, char add)
{
- int len;
- char *tmp, *format;
+ int len, lineno;
+ char *tmp;
+ TextMarker *mrk;
if (!text) return 0;
if (!text->curl) return 0;
@@ -2119,8 +2358,17 @@ int txt_add_char (Text *text, char add)
txt_delete_sel(text);
+ mrk= txt_find_marker_region(text, text->curl, text->curc-1, text->curl->len, 0, 0);
+ if (mrk) {
+ lineno= mrk->lineno;
+ do {
+ if (mrk->start>text->curc) mrk->start++;
+ mrk->end++;
+ mrk= mrk->next;
+ } while (mrk && mrk->lineno==lineno);
+ }
+
tmp= MEM_mallocN(text->curl->len+2, "textline_string");
- format= MEM_mallocN(text->curl->len+4, "Syntax_format");
if(text->curc) memcpy(tmp, text->curl->line, text->curc);
tmp[text->curc]= add;
@@ -2128,7 +2376,7 @@ int txt_add_char (Text *text, char add)
len= text->curl->len - text->curc;
if(len>0) memcpy(tmp+text->curc+1, text->curl->line+text->curc, len);
tmp[text->curl->len+1]=0;
- make_new_line(text->curl, tmp, format);
+ make_new_line(text->curl, tmp);
text->curc++;
@@ -2141,10 +2389,42 @@ int txt_add_char (Text *text, char add)
return 1;
}
+int txt_replace_char (Text *text, char add)
+{
+ char del;
+
+ if (!text) return 0;
+ if (!text->curl) return 0;
+
+ /* If text is selected or we're at the end of the line just use txt_add_char */
+ if (text->curc==text->curl->len || txt_has_sel(text) || add=='\n') {
+ TextMarker *mrk;
+ int i= txt_add_char(text, add);
+ mrk= txt_find_marker(text, text->curl, text->curc, 0, 0);
+ if (mrk && mrk->end==text->curc) mrk->end--;
+ return i;
+ }
+
+ del= text->curl->line[text->curc];
+ text->curl->line[text->curc]= (unsigned char) add;
+ text->curc++;
+ txt_pop_sel(text);
+
+ txt_make_dirty(text);
+ txt_clean_text(text);
+
+ /* Should probably create a new op for this */
+ if(!undoing) {
+ txt_undo_add_charop(text, UNDO_DEL, del);
+ txt_undo_add_charop(text, UNDO_INSERT, add);
+ }
+ return 1;
+}
+
void indent(Text *text)
{
int len, num;
- char *tmp, *format;
+ char *tmp;
char add = '\t';
if (!text) return;
@@ -2155,7 +2435,6 @@ void indent(Text *text)
while (TRUE)
{
tmp= MEM_mallocN(text->curl->len+2, "textline_string");
- format= MEM_mallocN(text->curl->len+3, "Syntax_format");
text->curc = 0;
if(text->curc) memcpy(tmp, text->curl->line, text->curc);
@@ -2165,7 +2444,7 @@ void indent(Text *text)
if(len>0) memcpy(tmp+text->curc+1, text->curl->line+text->curc, len);
tmp[text->curl->len+1]=0;
- make_new_line(text->curl, tmp, format);
+ make_new_line(text->curl, tmp);
text->curc++;
@@ -2246,7 +2525,7 @@ void unindent(Text *text)
void comment(Text *text)
{
int len, num;
- char *tmp, *format;
+ char *tmp;
char add = '#';
if (!text) return;
@@ -2257,7 +2536,6 @@ void comment(Text *text)
while (TRUE)
{
tmp= MEM_mallocN(text->curl->len+2, "textline_string");
- format = MEM_mallocN(text->curl->len+3, "Syntax_format");
text->curc = 0;
if(text->curc) memcpy(tmp, text->curl->line, text->curc);
@@ -2267,7 +2545,7 @@ void comment(Text *text)
if(len>0) memcpy(tmp+text->curc+1, text->curl->line+text->curc, len);
tmp[text->curl->len+1]=0;
- make_new_line(text->curl, tmp, format);
+ make_new_line(text->curl, tmp);
text->curc++;
@@ -2398,3 +2676,141 @@ int setcurr_tab (Text *text)
return i;
}
+/*********************************/
+/* Text marker utility functions */
+/*********************************/
+
+/* Creates and adds a marker to the list maintaining sorted order */
+void txt_add_marker(Text *text, TextLine *line, int start, int end, char color[4], int group, int flags) {
+ TextMarker *tmp, *marker;
+
+ marker= MEM_mallocN(sizeof(TextMarker), "text_marker");
+
+ marker->lineno= txt_get_span(text->lines.first, line);
+ marker->start= MIN2(start, end);
+ marker->end= MAX2(start, end);
+ marker->group= group;
+ marker->flags= flags;
+
+ marker->color[0]= color[0];
+ marker->color[1]= color[1];
+ marker->color[2]= color[2];
+ marker->color[3]= color[3];
+
+ for (tmp=text->markers.last; tmp; tmp=tmp->prev)
+ if (tmp->lineno < marker->lineno || (tmp->lineno==marker->lineno && tmp->start < marker->start))
+ break;
+
+ if (tmp) BLI_insertlinkafter(&text->markers, tmp, marker);
+ else BLI_addhead(&text->markers, marker);
+}
+
+/* Returns the first matching marker on the specified line between two points.
+ If the group or flags fields are non-zero the returned flag must be in the
+ specified group and have at least the specified flags set. */
+TextMarker *txt_find_marker_region(Text *text, TextLine *line, int start, int end, int group, int flags) {
+ TextMarker *marker, *next;
+ int lineno= txt_get_span(text->lines.first, line);
+
+ for (marker=text->markers.first; marker; marker=next) {
+ next= marker->next;
+
+ if (group && marker->group != group) continue;
+ else if ((marker->flags & flags) != flags) continue;
+ else if (marker->lineno < lineno) continue;
+ else if (marker->lineno > lineno) break;
+
+ if ((marker->start==marker->end && start<=marker->start && marker->start<=end) ||
+ (marker->start<end && marker->end>start))
+ return marker;
+ }
+ return NULL;
+}
+
+/* Clears all markers on the specified line between two points. If the group or
+ flags fields are non-zero the returned flag must be in the specified group
+ and have at least the specified flags set. */
+short txt_clear_marker_region(Text *text, TextLine *line, int start, int end, int group, int flags) {
+ TextMarker *marker, *next;
+ int lineno= txt_get_span(text->lines.first, line);
+ short cleared= 0;
+
+ for (marker=text->markers.first; marker; marker=next) {
+ next= marker->next;
+
+ if (group && marker->group != group) continue;
+ else if ((marker->flags & flags) != flags) continue;
+ else if (marker->lineno < lineno) continue;
+ else if (marker->lineno > lineno) break;
+
+ if ((marker->start==marker->end && start<=marker->start && marker->start<=end) ||
+ (marker->start<end && marker->end>start)) {
+ BLI_freelinkN(&text->markers, marker);
+ cleared= 1;
+ }
+ }
+ return cleared;
+}
+
+/* Clears all markers in the specified group (if given) with at least the
+ specified flags set. Useful for clearing temporary markers (group=0,
+ flags=TMARK_TEMP) */
+short txt_clear_markers(Text *text, int group, int flags) {
+ TextMarker *marker, *next;
+ short cleared= 0;
+
+ for (marker=text->markers.first; marker; marker=next) {
+ next= marker->next;
+
+ if ((!group || marker->group==group) &&
+ (marker->flags & flags) == flags) {
+ BLI_freelinkN(&text->markers, marker);
+ cleared= 1;
+ }
+ }
+ return cleared;
+}
+
+/* Finds the marker at the specified line and cursor position with at least the
+ specified flags set in the given group (if non-zero). */
+TextMarker *txt_find_marker(Text *text, TextLine *line, int curs, int group, int flags) {
+ TextMarker *marker;
+ int lineno= txt_get_span(text->lines.first, line);
+
+ for (marker=text->markers.first; marker; marker=marker->next) {
+ if (group && marker->group != group) continue;
+ else if ((marker->flags & flags) != flags) continue;
+ else if (marker->lineno < lineno) continue;
+ else if (marker->lineno > lineno) break;
+
+ if (marker->start <= curs && curs <= marker->end)
+ return marker;
+ }
+ return NULL;
+}
+
+/* Finds the previous marker in the same group. If no other is found, the same
+ marker will be returned */
+TextMarker *txt_prev_marker(Text *text, TextMarker *marker) {
+ TextMarker *tmp= marker;
+ while (tmp) {
+ if (tmp->prev) tmp= tmp->prev;
+ else tmp= text->markers.last;
+ if (tmp->group == marker->group)
+ return tmp;
+ }
+ return NULL; /* Only if marker==NULL */
+}
+
+/* Finds the next marker in the same group. If no other is found, the same
+ marker will be returned */
+TextMarker *txt_next_marker(Text *text, TextMarker *marker) {
+ TextMarker *tmp= marker;
+ while (tmp) {
+ if (tmp->next) tmp= tmp->next;
+ else tmp= text->markers.first;
+ if (tmp->group == marker->group)
+ return tmp;
+ }
+ return NULL; /* Only if marker==NULL */
+}
diff --git a/source/blender/blenkernel/intern/texture.c b/source/blender/blenkernel/intern/texture.c
index 936381c85cc..bb726887d32 100644
--- a/source/blender/blenkernel/intern/texture.c
+++ b/source/blender/blenkernel/intern/texture.c
@@ -53,6 +53,7 @@
#include "DNA_world_types.h"
#include "DNA_brush_types.h"
#include "DNA_node_types.h"
+#include "DNA_color_types.h"
#include "DNA_scene_types.h"
#include "IMB_imbuf_types.h"
@@ -390,6 +391,17 @@ int do_colorband(ColorBand *coba, float in, float out[4])
return 1; /* OK */
}
+void colorband_table_RGBA(ColorBand *coba, float **array, int *size)
+{
+ int a;
+
+ *size = CM_TABLE+1;
+ *array = MEM_callocN(sizeof(float)*(*size)*4, "ColorBand");
+
+ for(a=0; a<*size; a++)
+ do_colorband(coba, (float)a/(float)CM_TABLE, &(*array)[a*4]);
+}
+
/* ******************* TEX ************************ */
void free_texture(Tex *tex)
diff --git a/source/blender/blenkernel/intern/writeframeserver.c b/source/blender/blenkernel/intern/writeframeserver.c
index 6b38d7deadb..40e1dc1bb03 100644
--- a/source/blender/blenkernel/intern/writeframeserver.c
+++ b/source/blender/blenkernel/intern/writeframeserver.c
@@ -251,7 +251,7 @@ static int handle_request(char * req)
return -1;
}
-int frameserver_loop()
+int frameserver_loop(void)
{
fd_set readfds;
struct timeval tv;
diff --git a/source/blender/blenlib/BLI_arithb.h b/source/blender/blenlib/BLI_arithb.h
index a0fde98843d..e4b983d9ba3 100644
--- a/source/blender/blenlib/BLI_arithb.h
+++ b/source/blender/blenlib/BLI_arithb.h
@@ -91,6 +91,7 @@ float saasin(float fac);
float sasqrt(float fac);
int FloatCompare(float *v1, float *v2, float limit);
+int FloatCompare4(float *v1, float *v2, float limit);
float FloatLerpf(float target, float origin, float fac);
float CalcNormFloat(float *v1, float *v2, float *v3, float *n);
@@ -164,6 +165,7 @@ void Mat3Inv(float m1[][3], float m2[][3]);
void Mat3CpyMat4(float m1[][3],float m2[][4]);
void Mat4CpyMat3(float m1[][4], float m2[][3]);
+void Mat3BlendMat3(float out[][3], float dst[][3], float src[][3], float srcweight);
void Mat4BlendMat4(float out[][4], float dst[][4], float src[][4], float srcweight);
float Det2x2(float a,float b,float c, float d);
@@ -261,6 +263,7 @@ void Vec2Mulf(float *v1, float f);
void Vec2Addf(float *v, float *v1, float *v2);
void Vec2Subf(float *v, float *v1, float *v2);
void Vec2Copyf(float *v1, float *v2);
+void Vec2Lerpf(float *target, float *a, float *b, float t);
void AxisAngleToQuat(float *q, float *axis, float angle);
void RotationBetweenVectorsToQuat(float *q, float v1[3], float v2[3]);
@@ -321,6 +324,10 @@ void i_window(
float mat[][4]
);
+#define BLI_CS_SMPTE 0
+#define BLI_CS_REC709 1
+#define BLI_CS_CIE 2
+
void hsv_to_rgb(float h, float s, float v, float *r, float *g, float *b);
void hex_to_rgb(char *hexcol, float *r, float *g, float *b);
void rgb_to_yuv(float r, float g, float b, float *ly, float *lu, float *lv);
@@ -328,7 +335,7 @@ void yuv_to_rgb(float y, float u, float v, float *lr, float *lg, float *lb);
void ycc_to_rgb(float y, float cb, float cr, float *lr, float *lg, float *lb);
void rgb_to_ycc(float r, float g, float b, float *ly, float *lcb, float *lcr);
void rgb_to_hsv(float r, float g, float b, float *lh, float *ls, float *lv);
-void xyz_to_rgb(float x, float y, float z, float *r, float *g, float *b);
+void xyz_to_rgb(float x, float y, float z, float *r, float *g, float *b, int colorspace);
int constrain_rgb(float *r, float *g, float *b);
void gamma_correct_rgb(float *r, float *g, float *b);
unsigned int hsv_to_cpack(float h, float s, float v);
diff --git a/source/blender/blenlib/BLI_blenlib.h b/source/blender/blenlib/BLI_blenlib.h
index e24ccad12fb..4bbda9709d7 100644
--- a/source/blender/blenlib/BLI_blenlib.h
+++ b/source/blender/blenlib/BLI_blenlib.h
@@ -73,7 +73,6 @@ extern ListBase fillvertbase;
* @attention Defined in scanfill.c
*/
extern ListBase filledgebase;
-extern int totblock;
extern char btempdir[]; /* creator.c temp dir used instead of U.tempdir, set with BLI_where_is_temp( btempdir, 1 ); */
@@ -138,6 +137,9 @@ void BLI_dlist_reinit(struct DynamicList *dlist);
void BLI_cleanup_file(const char *relabase, char *dir);
void BLI_cleanup_dir(const char *relabase, char *dir); /* same as above but adds a trailing slash */
+/* go back one directory */
+int BLI_parent_dir(char *path);
+
/**
* Blender's path code replacement function.
* Bases @a path strings leading with "//" by the
@@ -152,6 +154,7 @@ void BLI_cleanup_dir(const char *relabase, char *dir); /* same as above but adds
*/
int BLI_convertstringcode(char *path, const char *basepath);
int BLI_convertstringframe(char *path, int frame);
+int BLI_convertstringcwd(char *path);
void BLI_makestringcode(const char *relfile, char *file);
@@ -224,7 +227,7 @@ int BLI_strcaseeq(char *a, char *b);
/* in util.c */
#ifdef WITH_ICONV
-void BLI_string_to_utf8(char *original, char *utf_8, char *code);
+void BLI_string_to_utf8(char *original, char *utf_8, const char *code);
#endif
/**
diff --git a/source/blender/blenlib/BLI_editVert.h b/source/blender/blenlib/BLI_editVert.h
index d42663e17c7..447f6a2a485 100644
--- a/source/blender/blenlib/BLI_editVert.h
+++ b/source/blender/blenlib/BLI_editVert.h
@@ -38,6 +38,8 @@
#include "DNA_customdata_types.h"
#include "DNA_mesh_types.h"
+#include "BLO_sys_types.h" // for intptr_t support
+
struct DerivedMesh;
struct RetopoPaintData;
@@ -53,7 +55,7 @@ typedef struct EditVert
struct EditEdge *e;
struct EditFace *f;
void *p;
- long l;
+ intptr_t l;
float fp;
} tmp;
float no[3]; /*vertex normal */
@@ -95,7 +97,7 @@ typedef struct EditEdge
struct EditEdge *e;
struct EditFace *f;
void *p;
- long l;
+ intptr_t l;
float fp;
} tmp;
short f1, f2; /* short, f1 is (ab)used in subdiv */
@@ -122,7 +124,7 @@ typedef struct EditFace
struct EditEdge *e;
struct EditFace *f;
void *p;
- long l;
+ intptr_t l;
float fp;
} tmp;
float n[3], cent[3];
diff --git a/source/blender/blenlib/BLI_kdopbvh.h b/source/blender/blenlib/BLI_kdopbvh.h
index 6d9a17efebf..e3591a84e98 100644
--- a/source/blender/blenlib/BLI_kdopbvh.h
+++ b/source/blender/blenlib/BLI_kdopbvh.h
@@ -54,6 +54,7 @@ typedef struct BVHTreeRay
{
float origin[3]; /* ray origin */
float direction[3]; /* ray direction */
+ float radius; /* radius around ray */
} BVHTreeRay;
typedef struct BVHTreeRayHit
@@ -90,7 +91,7 @@ float BLI_bvhtree_getepsilon(BVHTree *tree);
/* find nearest node to the given coordinates (if nearest is given it will only search nodes where square distance is smaller than nearest->dist) */
int BLI_bvhtree_find_nearest(BVHTree *tree, const float *co, BVHTreeNearest *nearest, BVHTree_NearestPointCallback callback, void *userdata);
-int BLI_bvhtree_ray_cast(BVHTree *tree, const float *co, const float *dir, BVHTreeRayHit *hit, BVHTree_RayCastCallback callback, void *userdata);
+int BLI_bvhtree_ray_cast(BVHTree *tree, const float *co, const float *dir, float radius, BVHTreeRayHit *hit, BVHTree_RayCastCallback callback, void *userdata);
#endif // BLI_KDOPBVH_H
diff --git a/source/blender/blenlib/BLI_rand.h b/source/blender/blenlib/BLI_rand.h
index 0e534783c17..266aa347aff 100644
--- a/source/blender/blenlib/BLI_rand.h
+++ b/source/blender/blenlib/BLI_rand.h
@@ -44,6 +44,7 @@ struct RNG* rng_new (unsigned int seed);
void rng_free (struct RNG* rng);
void rng_seed (struct RNG* rng, unsigned int seed);
+void rng_srandom(struct RNG *rng, unsigned int seed);
int rng_getInt (struct RNG* rng);
double rng_getDouble (struct RNG* rng);
float rng_getFloat (struct RNG* rng);
diff --git a/source/blender/blenlib/BLI_winstuff.h b/source/blender/blenlib/BLI_winstuff.h
index 11150075bac..3bb63506c95 100644
--- a/source/blender/blenlib/BLI_winstuff.h
+++ b/source/blender/blenlib/BLI_winstuff.h
@@ -61,6 +61,10 @@
// These definitions are also in arithb for simplicity
+#ifdef __cplusplus
+extern "C" {
+#endif
+
#ifndef M_PI
#define M_PI 3.14159265358979323846
#endif
@@ -116,5 +120,9 @@ int closedir (DIR *dp);
void get_default_root(char *root);
int check_file_chars(char *filename);
+#ifdef __cplusplus
+}
+#endif
+
#endif /* __WINSTUFF_H__ */
diff --git a/source/blender/blenlib/SConscript b/source/blender/blenlib/SConscript
index 649d3cb5659..65cebf02f62 100644
--- a/source/blender/blenlib/SConscript
+++ b/source/blender/blenlib/SConscript
@@ -24,4 +24,4 @@ if env['OURPLATFORM'] == 'linux2':
if env['OURPLATFORM'] in ('win32-vc', 'win32-mingw'):
incs += ' ' + env['BF_PTHREADS_INC']
-env.BlenderLib ( 'bf_blenlib', sources, Split(incs), Split(defs), libtype=['core','player'], priority = [85,195], compileflags =cflags )
+env.BlenderLib ( 'bf_blenlib', sources, Split(incs), Split(defs), libtype=['core', 'intern', 'player'], priority = [85,150,195], compileflags =cflags )
diff --git a/source/blender/blenlib/intern/BLI_ghash.c b/source/blender/blenlib/intern/BLI_ghash.c
index bae6ad428ea..1967b8a88e2 100644
--- a/source/blender/blenlib/intern/BLI_ghash.c
+++ b/source/blender/blenlib/intern/BLI_ghash.c
@@ -34,6 +34,8 @@
#include "MEM_guardedalloc.h"
#include "BLI_ghash.h"
+#include "BLO_sys_types.h" // for intptr_t support
+
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
@@ -261,11 +263,7 @@ int BLI_ghashutil_ptrcmp(void *a, void *b) {
}
unsigned int BLI_ghashutil_inthash(void *ptr) {
-#if defined(_WIN64)
- unsigned __int64 key = (unsigned __int64)ptr;
-#else
- unsigned long key = (unsigned long)ptr;
-#endif
+ uintptr_t key = (uintptr_t)ptr;
key += ~(key << 16);
key ^= (key >> 5);
diff --git a/source/blender/blenlib/intern/BLI_kdopbvh.c b/source/blender/blenlib/intern/BLI_kdopbvh.c
index 9671551a7f1..30472beb3e6 100644
--- a/source/blender/blenlib/intern/BLI_kdopbvh.c
+++ b/source/blender/blenlib/intern/BLI_kdopbvh.c
@@ -46,10 +46,12 @@
#define MAX_TREETYPE 32
+#define DEFAULT_FIND_NEAREST_HEAP_SIZE 1024
typedef struct BVHNode
{
struct BVHNode **children;
+ struct BVHNode *parent; // some user defined traversed need that
float *bv; // Bounding volume of all nodes, max 13 axis
int index; // face, edge, vertex index
char totnode; // how many nodes are used, used for speedup
@@ -81,7 +83,7 @@ typedef struct BVHOverlapData
typedef struct BVHNearestData
{
BVHTree *tree;
- float *co;
+ const float *co;
BVHTree_NearestPointCallback callback;
void *userdata;
float proj[13]; //coordinates projection over axis
@@ -119,6 +121,72 @@ static float KDOP_AXES[13][3] =
{0, 1.0, -1.0}
};
+/*
+ * Generic push and pop heap
+ */
+#define PUSH_HEAP_BODY(HEAP_TYPE,PRIORITY,heap,heap_size) \
+{ \
+ HEAP_TYPE element = heap[heap_size-1]; \
+ int child = heap_size-1; \
+ while(child != 0) \
+ { \
+ int parent = (child-1) / 2; \
+ if(PRIORITY(element, heap[parent])) \
+ { \
+ heap[child] = heap[parent]; \
+ child = parent; \
+ } \
+ else break; \
+ } \
+ heap[child] = element; \
+}
+
+#define POP_HEAP_BODY(HEAP_TYPE, PRIORITY,heap,heap_size) \
+{ \
+ HEAP_TYPE element = heap[heap_size-1]; \
+ int parent = 0; \
+ while(parent < (heap_size-1)/2 ) \
+ { \
+ int child2 = (parent+1)*2; \
+ if(PRIORITY(heap[child2-1], heap[child2])) \
+ --child2; \
+ \
+ if(PRIORITY(element, heap[child2])) \
+ break; \
+ \
+ heap[parent] = heap[child2]; \
+ parent = child2; \
+ } \
+ heap[parent] = element; \
+}
+
+int ADJUST_MEMORY(void *local_memblock, void **memblock, int new_size, int *max_size, int size_per_item)
+{
+ int new_max_size = *max_size * 2;
+ void *new_memblock = NULL;
+
+ if(new_size <= *max_size)
+ return TRUE;
+
+ if(*memblock == local_memblock)
+ {
+ new_memblock = malloc( size_per_item * new_max_size );
+ memcpy( new_memblock, *memblock, size_per_item * *max_size );
+ }
+ else
+ new_memblock = realloc(*memblock, size_per_item * new_max_size );
+
+ if(new_memblock)
+ {
+ *memblock = new_memblock;
+ *max_size = new_max_size;
+ return TRUE;
+ }
+ else
+ return FALSE;
+}
+
+
//////////////////////////////////////////////////////////////////////////////////////////////////////
// Introsort
// with permission deriven from the following Java code:
@@ -414,7 +482,7 @@ static void bvhtree_print_tree(BVHTree *tree, BVHNode *node, int depth)
{
int i;
for(i=0; i<depth; i++) printf(" ");
- printf(" - %d (%d): ", node->index, node - tree->nodearray);
+ printf(" - %d (%ld): ", node->index, node - tree->nodearray);
for(i=2*tree->start_axis; i<2*tree->stop_axis; i++)
printf("%.3f ", node->bv[i]);
printf("\n");
@@ -429,10 +497,10 @@ static void bvhtree_info(BVHTree *tree)
printf("BVHTree info\n");
printf("tree_type = %d, axis = %d, epsilon = %f\n", tree->tree_type, tree->axis, tree->epsilon);
printf("nodes = %d, branches = %d, leafs = %d\n", tree->totbranch + tree->totleaf, tree->totbranch, tree->totleaf);
- printf("Memory per node = %dbytes\n", sizeof(BVHNode) + sizeof(BVHNode*)*tree->tree_type + sizeof(float)*tree->axis);
+ printf("Memory per node = %ldbytes\n", sizeof(BVHNode) + sizeof(BVHNode*)*tree->tree_type + sizeof(float)*tree->axis);
printf("BV memory = %dbytes\n", MEM_allocN_len(tree->nodebv));
- printf("Total memory = %dbytes\n", sizeof(BVHTree)
+ printf("Total memory = %ldbytes\n", sizeof(BVHTree)
+ MEM_allocN_len(tree->nodes)
+ MEM_allocN_len(tree->nodearray)
+ MEM_allocN_len(tree->nodechild)
@@ -633,6 +701,23 @@ static void non_recursive_bvh_div_nodes(BVHTree *tree, BVHNode *branches_array,
BVHBuildHelper data;
int depth;
+
+ // set parent from root node to NULL
+ BVHNode *tmp = branches_array+0;
+ tmp->parent = NULL;
+
+ //Most of bvhtree code relies on 1-leaf trees having at least one branch
+ //We handle that special case here
+ if(num_leafs == 1)
+ {
+ BVHNode *root = branches_array+0;
+ refit_kdop_hull(tree, root, 0, num_leafs);
+ root->main_axis = get_largest_axis(root->bv) / 2;
+ root->totnode = 1;
+ root->children[0] = leafs_array[0];
+ root->children[0]->parent = root;
+ return;
+ }
branches_array--; //Implicit trees use 1-based indexs
@@ -693,9 +778,15 @@ static void non_recursive_bvh_div_nodes(BVHTree *tree, BVHNode *branches_array,
int child_leafs_end = implicit_leafs_index(&data, depth+1, child_level_index+1);
if(child_leafs_end - child_leafs_begin > 1)
+ {
parent->children[k] = branches_array + child_index;
+ parent->children[k]->parent = parent;
+ }
else if(child_leafs_end - child_leafs_begin == 1)
+ {
parent->children[k] = leafs_array[ child_leafs_begin ];
+ parent->children[k]->parent = parent;
+ }
else
break;
@@ -722,6 +813,11 @@ BVHTree *BLI_bvhtree_new(int maxsize, float epsilon, char tree_type, char axis)
return NULL;
tree = (BVHTree *)MEM_callocN(sizeof(BVHTree), "BVHTree");
+
+ //tree epsilon must be >= FLT_EPSILON
+ //so that tangent rays can still hit a bounding volume..
+ //this bug would show up when casting a ray aligned with a kdop-axis and with an edge of 2 faces
+ epsilon = MAX2(FLT_EPSILON, epsilon);
if(tree)
{
@@ -1012,7 +1108,7 @@ BVHTreeOverlap *BLI_bvhtree_overlap(BVHTree *tree1, BVHTree *tree2, int *result)
BVHOverlapData **data;
// check for compatibility of both trees (can't compare 14-DOP with 18-DOP)
- if((tree1->axis != tree2->axis) && ((tree1->axis == 14) || tree2->axis == 14))
+ if((tree1->axis != tree2->axis) && (tree1->axis == 14 || tree2->axis == 14) && (tree1->axis == 18 || tree2->axis == 18))
return 0;
// fast check root nodes for collision before doing big splitting + traversal
@@ -1114,15 +1210,18 @@ static float calc_nearest_point(BVHNearestData *data, BVHNode *node, float *near
}
-// TODO: use a priority queue to reduce the number of nodes looked on
-static void dfs_find_nearest(BVHNearestData *data, BVHNode *node)
+typedef struct NodeDistance
{
- int i;
- float nearest[3], sdist;
+ BVHNode *node;
+ float dist;
- sdist = calc_nearest_point(data, node, nearest);
- if(sdist >= data->nearest.dist) return;
+} NodeDistance;
+
+#define NodeDistance_priority(a,b) ( (a).dist < (b).dist )
+// TODO: use a priority queue to reduce the number of nodes looked on
+static void dfs_find_nearest_dfs(BVHNearestData *data, BVHNode *node)
+{
if(node->totnode == 0)
{
if(data->callback)
@@ -1130,17 +1229,129 @@ static void dfs_find_nearest(BVHNearestData *data, BVHNode *node)
else
{
data->nearest.index = node->index;
- VECCOPY(data->nearest.co, nearest);
- data->nearest.dist = sdist;
+ data->nearest.dist = calc_nearest_point(data, node, data->nearest.co);
}
}
else
{
- for(i=0; i != node->totnode; i++)
- dfs_find_nearest(data, node->children[i]);
+ //Better heuristic to pick the closest node to dive on
+ int i;
+ float nearest[3];
+
+ if(data->proj[ node->main_axis ] <= node->children[0]->bv[node->main_axis*2+1])
+ {
+
+ for(i=0; i != node->totnode; i++)
+ {
+ if( calc_nearest_point(data, node->children[i], nearest) >= data->nearest.dist) continue;
+ dfs_find_nearest_dfs(data, node->children[i]);
+ }
+ }
+ else
+ {
+ for(i=node->totnode-1; i >= 0 ; i--)
+ {
+ if( calc_nearest_point(data, node->children[i], nearest) >= data->nearest.dist) continue;
+ dfs_find_nearest_dfs(data, node->children[i]);
+ }
+ }
+ }
+}
+
+static void dfs_find_nearest_begin(BVHNearestData *data, BVHNode *node)
+{
+ float nearest[3], sdist;
+ sdist = calc_nearest_point(data, node, nearest);
+ if(sdist >= data->nearest.dist) return;
+ dfs_find_nearest_dfs(data, node);
+}
+
+
+static void NodeDistance_push_heap(NodeDistance *heap, int heap_size)
+PUSH_HEAP_BODY(NodeDistance, NodeDistance_priority, heap, heap_size)
+
+static void NodeDistance_pop_heap(NodeDistance *heap, int heap_size)
+POP_HEAP_BODY(NodeDistance, NodeDistance_priority, heap, heap_size)
+
+//NN function that uses an heap.. this functions leads to an optimal number of min-distance
+//but for normal tri-faces and BV 6-dop.. a simple dfs with local heuristics (as implemented
+//in source/blender/blenkernel/intern/shrinkwrap.c) works faster.
+//
+//It may make sense to use this function if the callback queries are very slow.. or if its impossible
+//to get a nice heuristic
+//
+//this function uses "malloc/free" instead of the MEM_* because it intends to be openmp safe
+static void bfs_find_nearest(BVHNearestData *data, BVHNode *node)
+{
+ int i;
+ NodeDistance default_heap[DEFAULT_FIND_NEAREST_HEAP_SIZE];
+ NodeDistance *heap=default_heap, current;
+ int heap_size = 0, max_heap_size = sizeof(default_heap)/sizeof(default_heap[0]);
+ float nearest[3];
+
+ int callbacks = 0, push_heaps = 0;
+
+ if(node->totnode == 0)
+ {
+ dfs_find_nearest_dfs(data, node);
+ return;
}
+
+ current.node = node;
+ current.dist = calc_nearest_point(data, node, nearest);
+
+ while(current.dist < data->nearest.dist)
+ {
+// printf("%f : %f\n", current.dist, data->nearest.dist);
+ for(i=0; i< current.node->totnode; i++)
+ {
+ BVHNode *child = current.node->children[i];
+ if(child->totnode == 0)
+ {
+ callbacks++;
+ dfs_find_nearest_dfs(data, child);
+ }
+ else
+ {
+ //adjust heap size
+ if(heap_size >= max_heap_size
+ && ADJUST_MEMORY(default_heap, (void**)&heap, heap_size+1, &max_heap_size, sizeof(heap[0])) == FALSE)
+ {
+ printf("WARNING: bvh_find_nearest got out of memory\n");
+
+ if(heap != default_heap)
+ free(heap);
+
+ return;
+ }
+
+ heap[heap_size].node = current.node->children[i];
+ heap[heap_size].dist = calc_nearest_point(data, current.node->children[i], nearest);
+
+ if(heap[heap_size].dist >= data->nearest.dist) continue;
+ heap_size++;
+
+ NodeDistance_push_heap(heap, heap_size);
+ // PUSH_HEAP_BODY(NodeDistance, NodeDistance_priority, heap, heap_size);
+ push_heaps++;
+ }
+ }
+
+ if(heap_size == 0) break;
+
+ current = heap[0];
+ NodeDistance_pop_heap(heap, heap_size);
+// POP_HEAP_BODY(NodeDistance, NodeDistance_priority, heap, heap_size);
+ heap_size--;
+ }
+
+// printf("hsize=%d, callbacks=%d, pushs=%d\n", heap_size, callbacks, push_heaps);
+
+ if(heap != default_heap)
+ free(heap);
}
+
int BLI_bvhtree_find_nearest(BVHTree *tree, const float *co, BVHTreeNearest *nearest, BVHTree_NearestPointCallback callback, void *userdata)
{
int i;
@@ -1172,7 +1383,7 @@ int BLI_bvhtree_find_nearest(BVHTree *tree, const float *co, BVHTreeNearest *nea
//dfs search
if(root)
- dfs_find_nearest(&data, root);
+ dfs_find_nearest_begin(&data, root);
//copy back results
if(nearest)
@@ -1203,16 +1414,16 @@ static float ray_nearest_hit(BVHRayCastData *data, BVHNode *node)
if(data->ray_dot_axis[i] == 0.0f)
{
//axis aligned ray
- if(data->ray.origin[i] < bv[0]
- || data->ray.origin[i] > bv[1])
+ if(data->ray.origin[i] < bv[0] - data->ray.radius
+ || data->ray.origin[i] > bv[1] + data->ray.radius)
return FLT_MAX;
}
else
{
- float ll = (bv[0] - data->ray.origin[i]) / data->ray_dot_axis[i];
- float lu = (bv[1] - data->ray.origin[i]) / data->ray_dot_axis[i];
+ float ll = (bv[0] - data->ray.radius - data->ray.origin[i]) / data->ray_dot_axis[i];
+ float lu = (bv[1] + data->ray.radius - data->ray.origin[i]) / data->ray_dot_axis[i];
- if(data->ray_dot_axis[i] > 0)
+ if(data->ray_dot_axis[i] > 0.0f)
{
if(ll > low) low = ll;
if(lu < upper) upper = lu;
@@ -1252,7 +1463,7 @@ static void dfs_raycast(BVHRayCastData *data, BVHNode *node)
else
{
//pick loop direction to dive into the tree (based on ray direction and split axis)
- if(data->ray_dot_axis[ node->main_axis ] > 0)
+ if(data->ray_dot_axis[ node->main_axis ] > 0.0f)
{
for(i=0; i != node->totnode; i++)
{
@@ -1269,7 +1480,7 @@ static void dfs_raycast(BVHRayCastData *data, BVHNode *node)
}
}
-int BLI_bvhtree_ray_cast(BVHTree *tree, const float *co, const float *dir, BVHTreeRayHit *hit, BVHTree_RayCastCallback callback, void *userdata)
+int BLI_bvhtree_ray_cast(BVHTree *tree, const float *co, const float *dir, float radius, BVHTreeRayHit *hit, BVHTree_RayCastCallback callback, void *userdata)
{
int i;
BVHRayCastData data;
@@ -1282,6 +1493,7 @@ int BLI_bvhtree_ray_cast(BVHTree *tree, const float *co, const float *dir, BVHTr
VECCOPY(data.ray.origin, co);
VECCOPY(data.ray.direction, dir);
+ data.ray.radius = radius;
Normalize(data.ray.direction);
@@ -1289,7 +1501,7 @@ int BLI_bvhtree_ray_cast(BVHTree *tree, const float *co, const float *dir, BVHTr
{
data.ray_dot_axis[i] = INPR( data.ray.direction, KDOP_AXES[i]);
- if(fabs(data.ray_dot_axis[i]) < 1e-7)
+ if(fabs(data.ray_dot_axis[i]) < FLT_EPSILON)
data.ray_dot_axis[i] = 0.0;
}
diff --git a/source/blender/blenlib/intern/arithb.c b/source/blender/blenlib/intern/arithb.c
index 3083078abac..149d3cf1f8f 100644
--- a/source/blender/blenlib/intern/arithb.c
+++ b/source/blender/blenlib/intern/arithb.c
@@ -759,6 +759,28 @@ void Mat4MulSerie(float answ[][4], float m1[][4],
}
}
+void Mat3BlendMat3(float out[][3], float dst[][3], float src[][3], float srcweight)
+{
+ float squat[4], dquat[4], fquat[4];
+ float ssize[3], dsize[3], fsize[4];
+ float rmat[3][3], smat[3][3];
+
+ Mat3ToQuat(dst, dquat);
+ Mat3ToSize(dst, dsize);
+
+ Mat3ToQuat(src, squat);
+ Mat3ToSize(src, ssize);
+
+ /* do blending */
+ QuatInterpol(fquat, dquat, squat, srcweight);
+ VecLerpf(fsize, dsize, ssize, srcweight);
+
+ /* compose new matrix */
+ QuatToMat3(fquat, rmat);
+ SizeToMat3(fsize, smat);
+ Mat3MulMat3(out, rmat, smat);
+}
+
void Mat4BlendMat4(float out[][4], float dst[][4], float src[][4], float srcweight)
{
float squat[4], dquat[4], fquat[4];
@@ -1004,6 +1026,19 @@ int FloatCompare( float *v1, float *v2, float limit)
return 0;
}
+int FloatCompare4( float *v1, float *v2, float limit)
+{
+
+ if( fabs(v1[0]-v2[0])<limit ) {
+ if( fabs(v1[1]-v2[1])<limit ) {
+ if( fabs(v1[2]-v2[2])<limit ) {
+ if( fabs(v1[3]-v2[3])<limit ) return 1;
+ }
+ }
+ }
+ return 0;
+}
+
float FloatLerpf( float target, float origin, float fac)
{
return (fac*target) + (1.0f-fac)*origin;
@@ -2125,6 +2160,14 @@ void VecLerpf(float *target, float *a, float *b, float t)
target[2]= s*a[2] + t*b[2];
}
+void Vec2Lerpf(float *target, float *a, float *b, float t)
+{
+ float s = 1.0f-t;
+
+ target[0]= s*a[0] + t*b[0];
+ target[1]= s*a[1] + t*b[1];
+}
+
void VecMidf(float *v, float *v1, float *v2)
{
v[0]= 0.5f*(v1[0]+ v2[0]);
@@ -2477,7 +2520,7 @@ short IsectLL2Df(float *v1, float *v2, float *v3, float *v4)
1: intersection
*/
-short IsectLLPt2Df(float x0,float y0,float x1,float y1,
+static short IsectLLPt2Df(float x0,float y0,float x1,float y1,
float x2,float y2,float x3,float y3, float *xi,float *yi)
{
@@ -2527,29 +2570,47 @@ short IsectLLPt2Df(float x0,float y0,float x1,float y1,
} // end Intersect_Lines
#define SIDE_OF_LINE(pa,pb,pp) ((pa[0]-pp[0])*(pb[1]-pp[1]))-((pb[0]-pp[0])*(pa[1]-pp[1]))
-#define ISECT_EPSILON 1e-6
-
/* point in tri */
int IsectPT2Df(float pt[2], float v1[2], float v2[2], float v3[2])
{
- if ((SIDE_OF_LINE(v1,v2,pt)>=-ISECT_EPSILON) &&
- (SIDE_OF_LINE(v2,v3,pt)>=-ISECT_EPSILON) &&
- (SIDE_OF_LINE(v3,v1,pt)>=-ISECT_EPSILON))
- return 1;
- else {
- return 0;
+ if (SIDE_OF_LINE(v1,v2,pt)>=0.0) {
+ if (SIDE_OF_LINE(v2,v3,pt)>=0.0) {
+ if (SIDE_OF_LINE(v3,v1,pt)>=0.0) {
+ return 1;
+ }
+ }
+ } else {
+ if (! (SIDE_OF_LINE(v2,v3,pt)>=0.0) ) {
+ if (! (SIDE_OF_LINE(v3,v1,pt)>=0.0)) {
+ return -1;
+ }
+ }
}
+
+ return 0;
}
/* point in quad - only convex quads */
int IsectPQ2Df(float pt[2], float v1[2], float v2[2], float v3[2], float v4[2])
{
- if ((SIDE_OF_LINE(v1,v2,pt)>=-ISECT_EPSILON) &&
- (SIDE_OF_LINE(v2,v3,pt)>=-ISECT_EPSILON) &&
- (SIDE_OF_LINE(v3,v4,pt)>=-ISECT_EPSILON) &&
- (SIDE_OF_LINE(v4,v1,pt)>=-ISECT_EPSILON))
- return 1;
- else
- return 0;
+ if (SIDE_OF_LINE(v1,v2,pt)>=0.0) {
+ if (SIDE_OF_LINE(v2,v3,pt)>=0.0) {
+ if (SIDE_OF_LINE(v3,v4,pt)>=0.0) {
+ if (SIDE_OF_LINE(v4,v1,pt)>=0.0) {
+ return 1;
+ }
+ }
+ }
+ } else {
+ if (! (SIDE_OF_LINE(v2,v3,pt)>=0.0) ) {
+ if (! (SIDE_OF_LINE(v3,v4,pt)>=0.0)) {
+ if (! (SIDE_OF_LINE(v4,v1,pt)>=0.0)) {
+ return -1;
+ }
+ }
+ }
+ }
+
+ return 0;
}
@@ -3427,13 +3488,27 @@ void rgb_to_hsv(float r, float g, float b, float *lh, float *ls, float *lv)
*lv = v;
}
-/*http://brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html
- * SMPTE-C XYZ to RGB matrix*/
-void xyz_to_rgb(float xc, float yc, float zc, float *r, float *g, float *b)
-{
- *r = (3.50570 * xc) + (-1.73964 * yc) + (-0.544011 * zc);
- *g = (-1.06906 * xc) + (1.97781 * yc) + (0.0351720 * zc);
- *b = (0.0563117 * xc) + (-0.196994 * yc) + (1.05005 * zc);
+/*http://brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html */
+
+void xyz_to_rgb(float xc, float yc, float zc, float *r, float *g, float *b, int colorspace)
+{
+ switch (colorspace) {
+ case BLI_CS_SMPTE:
+ *r = (3.50570 * xc) + (-1.73964 * yc) + (-0.544011 * zc);
+ *g = (-1.06906 * xc) + (1.97781 * yc) + (0.0351720 * zc);
+ *b = (0.0563117 * xc) + (-0.196994 * yc) + (1.05005 * zc);
+ break;
+ case BLI_CS_REC709:
+ *r = (3.240476 * xc) + (-1.537150 * yc) + (-0.498535 * zc);
+ *g = (-0.969256 * xc) + (1.875992 * yc) + (0.041556 * zc);
+ *b = (0.055648 * xc) + (-0.204043 * yc) + (1.057311 * zc);
+ break;
+ case BLI_CS_CIE:
+ *r = (2.28783848734076f * xc) + (-0.833367677835217f * yc) + (-0.454470795871421f * zc);
+ *g = (-0.511651380743862f * xc) + (1.42275837632178f * yc) + (0.0888930017552939f * zc);
+ *b = (0.00572040983140966f * xc) + (-0.0159068485104036f * yc) + (1.0101864083734f * zc);
+ break;
+ }
}
/*If the requested RGB shade contains a negative weight for
@@ -3468,7 +3543,7 @@ int constrain_rgb(float *r, float *g, float *b)
Parameter Values for the HDTV Standard for the Studio and
for International Programme Exchange'', formerly CCIR Rec.
709.*/
-void gamma_correct(float *c)
+static void gamma_correct(float *c)
{
/* Rec. 709 gamma correction. */
float cc = 0.018;
@@ -3574,6 +3649,8 @@ void spheremap(float x, float y, float z, float *u, float *v)
/* ------------------------------------------------------------------------- */
+/* proposed api by ton and zr, not used yet */
+#if 0
/* ***************** m1 = m2 ***************** */
void cpy_m3_m3(float m1[][3], float m2[][3])
{
@@ -3597,7 +3674,6 @@ void ident_m4(float m[][4])
m[3][0]= m[3][1]= m[3][2]= 0.0;
}
-
/* ***************** m1 = m2 (pre) * m3 (post) ***************** */
void mul_m3_m3m3(float m1[][3], float m2[][3], float m3[][3])
{
@@ -3735,6 +3811,8 @@ void mul_v3_v3m4(float *v1, float *v2, float mat[][4])
}
+#endif
+
/* moved from effect.c
test if the line starting at p1 ending at p2 intersects the triangle v0..v2
return non zero if it does
@@ -4182,7 +4260,7 @@ float lambda_cp_line_ex(float p[3], float l1[3], float l2[3], float cp[3])
}
/* little sister we only need to know lambda */
-float lambda_cp_line(float p[3], float l1[3], float l2[3])
+static float lambda_cp_line(float p[3], float l1[3], float l2[3])
{
float h[3],u[3];
VecSubf(u, l2, l1);
@@ -4341,7 +4419,7 @@ void VecfCubicInterpol(float *x1, float *v1, float *x2, float *v2, float t, floa
v[2]= 3*a[2]*t2 + 2*b[2]*t + v1[2];
}
-int point_in_slice(float p[3], float v1[3], float l1[3], float l2[3])
+static int point_in_slice(float p[3], float v1[3], float l1[3], float l2[3])
{
/*
what is a slice ?
@@ -4368,7 +4446,7 @@ but see a 'spat' which is a deformed cube with paired parallel planes needs only
/*adult sister defining the slice planes by the origin and the normal
NOTE |normal| may not be 1 but defining the thickness of the slice*/
-int point_in_slice_as(float p[3],float origin[3],float normal[3])
+static int point_in_slice_as(float p[3],float origin[3],float normal[3])
{
float h,rp[3];
VecSubf(rp,p,origin);
@@ -4378,7 +4456,7 @@ int point_in_slice_as(float p[3],float origin[3],float normal[3])
}
/*mama (knowing the squared lenght of the normal)*/
-int point_in_slice_m(float p[3],float origin[3],float normal[3],float lns)
+static int point_in_slice_m(float p[3],float origin[3],float normal[3],float lns)
{
float h,rp[3];
VecSubf(rp,p,origin);
diff --git a/source/blender/blenlib/intern/bpath.c b/source/blender/blenlib/intern/bpath.c
index 898ad6ddd67..e23c2658399 100644
--- a/source/blender/blenlib/intern/bpath.c
+++ b/source/blender/blenlib/intern/bpath.c
@@ -254,7 +254,7 @@ static struct Sequence *seq_stepdata__internal(struct BPathIterator *bpi, int st
return NULL;
}
-void seq_getpath(struct BPathIterator *bpi, char *path) {
+static void seq_getpath(struct BPathIterator *bpi, char *path) {
Sequence *seq = (Sequence *)bpi->data;
@@ -275,7 +275,7 @@ void seq_getpath(struct BPathIterator *bpi, char *path) {
}
}
-void seq_setpath(struct BPathIterator *bpi, char *path) {
+static void seq_setpath(struct BPathIterator *bpi, char *path) {
Sequence *seq = (Sequence *)bpi->data;
if (seq==NULL) return;
@@ -456,7 +456,6 @@ void checkMissingFiles( char *txtname ) {
/* be sure there is low chance of the path being too short */
char filepath_expanded[FILE_MAXDIR*2];
- int files_missing = 0;
BLI_bpathIterator_init(&bpi);
while (!BLI_bpathIterator_isDone(&bpi)) {
@@ -470,7 +469,6 @@ void checkMissingFiles( char *txtname ) {
}
}
bpathToText(btxt, &bpi);
- files_missing = 1;
}
BLI_bpathIterator_step(&bpi);
}
diff --git a/source/blender/blenlib/intern/dynlib.c b/source/blender/blenlib/intern/dynlib.c
index c4692995f20..e7fa3332f43 100644
--- a/source/blender/blenlib/intern/dynlib.c
+++ b/source/blender/blenlib/intern/dynlib.c
@@ -77,12 +77,12 @@ char *PIL_dynlib_get_error_as_string(PILdynlib* lib) {
int err;
/* if lib is NULL reset the last error code */
+ err= GetLastError();
if (!lib) {
SetLastError(ERROR_SUCCESS);
- return NULL;
+ err = ERROR_SUCCESS;
}
- err= GetLastError();
if (err) {
static char buf[1024];
@@ -96,7 +96,7 @@ char *PIL_dynlib_get_error_as_string(PILdynlib* lib) {
return buf;
}
- return NULL;
+ return "unrecognized error";
}
void PIL_dynlib_close(PILdynlib *lib) {
diff --git a/source/blender/blenlib/intern/edgehash.c b/source/blender/blenlib/intern/edgehash.c
index 3e1c8afb7a8..603c85655d7 100644
--- a/source/blender/blenlib/intern/edgehash.c
+++ b/source/blender/blenlib/intern/edgehash.c
@@ -77,8 +77,12 @@ void BLI_edgehash_insert(EdgeHash *eh, int v0, int v1, void *val) {
unsigned int hash;
Entry *e= malloc(sizeof(*e));
- if (v1<v0) v0 ^= v1 ^= v0 ^= v1;
- hash = EDGEHASH(v0,v1)%eh->nbuckets;
+ if (v1<v0) {
+ v0 ^= v1;
+ v1 ^= v0;
+ v0 ^= v1;
+ }
+ hash = EDGEHASH(v0,v1)%eh->nbuckets;
e->v0 = v0;
e->v1 = v1;
@@ -114,7 +118,11 @@ void** BLI_edgehash_lookup_p(EdgeHash *eh, int v0, int v1) {
unsigned int hash;
Entry *e;
- if (v1<v0) v0 ^= v1 ^= v0 ^= v1;
+ if (v1<v0) {
+ v0 ^= v1;
+ v1 ^= v0;
+ v0 ^= v1;
+ }
hash = EDGEHASH(v0,v1)%eh->nbuckets;
for (e= eh->buckets[hash]; e; e= e->next)
if (v0==e->v0 && v1==e->v1)
diff --git a/source/blender/blenlib/intern/fileops.c b/source/blender/blenlib/intern/fileops.c
index 96de5e99f4f..2acbbbe6712 100644
--- a/source/blender/blenlib/intern/fileops.c
+++ b/source/blender/blenlib/intern/fileops.c
@@ -62,6 +62,8 @@
#include "BKE_utildefines.h"
#include <errno.h>
+#include "BLO_sys_types.h" // for intptr_t support
+
/* implementations: */
char *first_slash(char *string) {
char *ffslash, *fbslash;
@@ -72,7 +74,7 @@ char *first_slash(char *string) {
if (!ffslash) return fbslash;
else if (!fbslash) return ffslash;
- if ((long)ffslash < (long)fbslash) return ffslash;
+ if ((intptr_t)ffslash < (intptr_t)fbslash) return ffslash;
else return fbslash;
}
@@ -85,7 +87,7 @@ char *BLI_last_slash(const char *string) {
if (!lfslash) return lbslash;
else if (!lbslash) return lfslash;
- if ((long)lfslash < (long)lbslash) return lbslash;
+ if ((intptr_t)lfslash < (intptr_t)lbslash) return lbslash;
else return lfslash;
}
diff --git a/source/blender/blenlib/intern/freetypefont.c b/source/blender/blenlib/intern/freetypefont.c
index 74f152ac635..48a40db6a72 100644
--- a/source/blender/blenlib/intern/freetypefont.c
+++ b/source/blender/blenlib/intern/freetypefont.c
@@ -404,8 +404,6 @@ static VFontData *objfnt_to_ftvfontdata(PackedFile * pf)
break;
lcode = charcode;
}
-
- err = FT_Select_Charmap( face, FT_ENCODING_UNICODE );
return vfd;
}
diff --git a/source/blender/blenlib/intern/psfont.c b/source/blender/blenlib/intern/psfont.c
index 498c87cdef9..54d7f8ec1af 100644
--- a/source/blender/blenlib/intern/psfont.c
+++ b/source/blender/blenlib/intern/psfont.c
@@ -43,6 +43,8 @@
#include "DNA_packedFile_types.h"
#include "DNA_curve_types.h"
+#include "BLO_sys_types.h" // for intptr_t support
+
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
@@ -54,7 +56,7 @@ typedef struct chardesc {
short llx, lly; /* bounding box */
short urx, ury;
short *data; /* char data */
- long datalen;
+ intptr_t datalen;
} chardesc;
typedef struct objfnt {
@@ -975,7 +977,7 @@ static void applymat(float mat[][2], float *x, float *y)
static void setcharlist(void)
{
- char *name, found;
+ char *name; /*found;*/
int i, j;
for(i=0; i<NASCII; i++) ISOcharlist[i].prog = -1;
@@ -983,11 +985,11 @@ static void setcharlist(void)
for(j=0; j<my_nchars; j++) {
name = my_charname[j];
if(name) {
- found = 0;
+ /*found = 0;*/
for(i=0; i<NASCII; i++) {
if(ISOcharlist[i].name && (strcmp(name,ISOcharlist[i].name) == 0)){
ISOcharlist[i].prog = j;
- found = 1;
+ /*found = 1;*/
}
}
/*if (found == 0) printf("no match found for: %s\n", name);*/
@@ -1256,10 +1258,10 @@ static void subr0(void)
int x1, y1;
int x2, y2;
int x3, y3;
- int xpos, ypos, noise;
+ int noise;
- ypos = pop();
- xpos = pop();
+ pop(); /* xpos, unused */
+ pop(); /* ypos, unused */
noise = pop();
if(coordpos!=7) {
fprintf(stderr,"subr0: bad poop\n");
diff --git a/source/blender/blenlib/intern/rand.c b/source/blender/blenlib/intern/rand.c
index ccc478203fe..c484a307393 100644
--- a/source/blender/blenlib/intern/rand.c
+++ b/source/blender/blenlib/intern/rand.c
@@ -81,6 +81,16 @@ void rng_seed(RNG *rng, unsigned int seed) {
rng->X= (((r_uint64) seed)<<16) | LOWSEED;
}
+void rng_srandom(RNG *rng, unsigned int seed) {
+ extern unsigned char hash[]; // noise.c
+
+ rng_seed(rng, seed + hash[seed & 255]);
+ seed= rng_getInt(rng);
+ rng_seed(rng, seed + hash[seed & 255]);
+ seed= rng_getInt(rng);
+ rng_seed(rng, seed + hash[seed & 255]);
+}
+
int rng_getInt(RNG *rng) {
rng->X= (MULTIPLIER*rng->X + ADDEND)&MASK;
return (int) (rng->X>>17);
@@ -132,13 +142,7 @@ void BLI_srand(unsigned int seed) {
/* using hash table to create better seed */
void BLI_srandom(unsigned int seed) {
- extern unsigned char hash[]; // noise.c
-
- rng_seed(&theBLI_rng, seed + hash[seed & 255]);
- seed= rng_getInt(&theBLI_rng);
- rng_seed(&theBLI_rng, seed + hash[seed & 255]);
- seed= rng_getInt(&theBLI_rng);
- rng_seed(&theBLI_rng, seed + hash[seed & 255]);
+ rng_srandom(&theBLI_rng, seed);
}
int BLI_rand(void) {
diff --git a/source/blender/blenlib/intern/util.c b/source/blender/blenlib/intern/util.c
index 48ebf770e1b..442a629b12d 100644
--- a/source/blender/blenlib/intern/util.c
+++ b/source/blender/blenlib/intern/util.c
@@ -1058,6 +1058,26 @@ void BLI_makestringcode(const char *relfile, char *file)
}
}
+int BLI_parent_dir(char *path)
+{
+#ifdef WIN32
+ static char *parent_dir="..\\";
+#else
+ static char *parent_dir="../";
+#endif
+ char tmp[FILE_MAXDIR+FILE_MAXFILE+4];
+ BLI_strncpy(tmp, path, sizeof(tmp));
+ BLI_add_slash(tmp);
+ strcat(tmp, parent_dir);
+ BLI_cleanup_dir(NULL, tmp);
+
+ if (!BLI_testextensie(tmp, parent_dir)) {
+ BLI_strncpy(path, tmp, sizeof(tmp));
+ return 1;
+ } else {
+ return 0;
+ }
+}
int BLI_convertstringframe(char *path, int frame)
{
@@ -1129,15 +1149,13 @@ int BLI_convertstringframe(char *path, int frame)
int BLI_convertstringcode(char *path, const char *basepath)
{
- int wasrelative;
+ int wasrelative = (strncmp(path, "//", 2)==0);
char tmp[FILE_MAX];
char base[FILE_MAX];
+#ifdef WIN32
char vol[3] = {'\0', '\0', '\0'};
BLI_strncpy(vol, path, 3);
- wasrelative= (vol[0]=='/' && vol[1]=='/');
-
-#ifdef WIN32
/* we are checking here if we have an absolute path that is not in the current
blend file as a lib main - we are basically checking for the case that a
UNIX root '/' is passed.
@@ -1156,6 +1174,20 @@ int BLI_convertstringcode(char *path, const char *basepath)
}
#else
BLI_strncpy(tmp, path, FILE_MAX);
+
+ /* Check for loading a windows path on a posix system
+ * in this case, there is no use in trying C:/ since it
+ * will never exist on a unix os.
+ *
+ * Add a / prefix and lowercase the driveletter, remove the :
+ * C:\foo.JPG -> /c/foo.JPG */
+
+ if (tmp[1] == ':' && isalpha(tmp[0]) && (tmp[2]=='\\' || tmp[2]=='/') ) {
+ tmp[1] = tolower(tmp[0]); /* replace ':' with driveletter */
+ tmp[0] = '/';
+ /* '\' the slash will be converted later */
+ }
+
#endif
BLI_strncpy(base, basepath, FILE_MAX);
@@ -1211,6 +1243,49 @@ int BLI_convertstringcode(char *path, const char *basepath)
return wasrelative;
}
+
+/*
+ * Should only be done with command line paths.
+ * this is NOT somthing blenders internal paths support like the // prefix
+ */
+int BLI_convertstringcwd(char *path)
+{
+ int wasrelative = 1;
+ int filelen = strlen(path);
+
+#ifdef WIN32
+ if (filelen >= 3 && path[1] == ':' && (path[2] == '\\' || path[2] == '/'))
+ wasrelative = 0;
+#else
+ if (filelen >= 2 && path[0] == '/')
+ wasrelative = 0;
+#endif
+
+ if (wasrelative==1) {
+ char cwd[FILE_MAXDIR + FILE_MAXFILE];
+ BLI_getwdN(cwd); /* incase the full path to the blend isnt used */
+
+ if (cwd[0] == '\0') {
+ printf( "Could not get the current working directory - $PWD for an unknown reason.");
+ } else {
+ /* uses the blend path relative to cwd important for loading relative linked files.
+ *
+ * cwd should contain c:\ etc on win32 so the relbase can be NULL
+ * relbase being NULL also prevents // being misunderstood as relative to the current
+ * blend file which isnt a feature we want to use in this case since were dealing
+ * with a path from the command line, rather then from inside Blender */
+
+ char origpath[FILE_MAXDIR + FILE_MAXFILE];
+ BLI_strncpy(origpath, path, FILE_MAXDIR + FILE_MAXFILE);
+
+ BLI_make_file_string(NULL, path, cwd, origpath);
+ }
+ }
+
+ return wasrelative;
+}
+
+
/* copy di to fi, filename only */
void BLI_splitdirstring(char *di, char *fi)
{
@@ -1912,7 +1987,7 @@ int BLI_strncasecmp(const char *s1, const char *s2, int n) {
#include "iconv.h"
#include "localcharset.h"
-void BLI_string_to_utf8(char *original, char *utf_8, char *code)
+void BLI_string_to_utf8(char *original, char *utf_8, const char *code)
{
size_t inbytesleft=strlen(original);
size_t outbytesleft=512;
@@ -1970,7 +2045,7 @@ void BLI_timestr(double _time, char *str)
int BLI_int_from_pointer(void *poin)
{
- long lval= (long)poin;
+ intptr_t lval= (intptr_t)poin;
return (int)(lval>>3);
}
@@ -1978,17 +2053,17 @@ int BLI_int_from_pointer(void *poin)
void *BLI_pointer_from_int(int val)
{
static int firsttime= 1;
- static long basevalue= 0;
+ static intptr_t basevalue= 0;
if(firsttime) {
void *poin= malloc(10000);
- basevalue= (long)poin;
+ basevalue= (intptr_t)poin;
basevalue &= ~PMASK;
printf("base: %d pointer %p\n", basevalue, poin); /* debug */
firsttime= 0;
free(poin);
}
- return (void *)(basevalue | (((long)val)<<3));
+ return (void *)(basevalue | (((intptr_t)val)<<3));
}
#else
diff --git a/source/blender/blenloader/BLO_readfile.h b/source/blender/blenloader/BLO_readfile.h
index ff2a256f606..4aa2a229dcc 100644
--- a/source/blender/blenloader/BLO_readfile.h
+++ b/source/blender/blenloader/BLO_readfile.h
@@ -237,7 +237,7 @@ void BLO_library_append(struct SpaceFile *sfile, char *dir, int idcode);
void BLO_library_append_(BlendHandle **libfiledata, struct direntry* filelist, int totfile, char *dir, char* file, short flag, int idcode);
void BLO_script_library_append(BlendHandle **bh, char *dir, char *name, int idcode, short flag, struct Scene *scene);
-BlendFileData* blo_read_blendafterruntime(int file, int actualsize, BlendReadError *error_r);
+BlendFileData* blo_read_blendafterruntime(int file, char *name, int actualsize, BlendReadError *error_r);
#ifdef __cplusplus
}
diff --git a/source/blender/blenloader/BLO_soundfile.h b/source/blender/blenloader/BLO_soundfile.h
index 3d133b2d3bd..a239c7d8965 100644
--- a/source/blender/blenloader/BLO_soundfile.h
+++ b/source/blender/blenloader/BLO_soundfile.h
@@ -35,7 +35,5 @@
struct bSound;
struct PackedFile;
-//void sound_read_wav_data(bSound * sound, PackedFile * pf);
-
#endif
diff --git a/source/blender/blenloader/BLO_sys_types.h b/source/blender/blenloader/BLO_sys_types.h
index a1885894fe3..49155260b31 100644
--- a/source/blender/blenloader/BLO_sys_types.h
+++ b/source/blender/blenloader/BLO_sys_types.h
@@ -43,17 +43,13 @@
#ifdef __cplusplus
extern "C" {
#endif
-
-#ifdef FREE_WINDOWS
-typedef unsigned char uint8_t;
-typedef unsigned int uint32_t;
-#endif
#if defined(_WIN32) && !defined(FREE_WINDOWS)
/* The __intXX are built-in types of the visual complier! So we don't
* need to include anything else here. */
+
typedef signed __int8 int8_t;
typedef signed __int16 int16_t;
typedef signed __int32 int32_t;
@@ -64,6 +60,24 @@ typedef unsigned __int16 uint16_t;
typedef unsigned __int32 uint32_t;
typedef unsigned __int64 uint64_t;
+#ifndef _INTPTR_T_DEFINED
+#ifdef _WIN64
+typedef __int64 intptr_t;
+#else
+typedef long intptr_t;
+#endif
+#define _INTPTR_T_DEFINED
+#endif
+
+#ifndef _UINTPTR_T_DEFINED
+#ifdef _WIN64
+typedef unsigned __int64 uintptr_t;
+#else
+typedef unsigned long uintptr_t;
+#endif
+#define _UINTPTR_T_DEFINED
+#endif
+
#elif defined(__linux__)
/* Linux-i386, Linux-Alpha, Linux-ppc */
@@ -73,6 +87,10 @@ typedef unsigned __int64 uint64_t;
#include <inttypes.h>
+#elif defined(FREE_WINDOWS)
+
+#include <stdint.h>
+
#else
/* FreeBSD, Irix, Solaris */
@@ -80,6 +98,7 @@ typedef unsigned __int64 uint64_t;
#endif /* ifdef platform for types */
+
#ifdef _WIN32
#define htonl(x) correctByteOrder(x)
#define ntohl(x) correctByteOrder(x)
diff --git a/source/blender/blenloader/intern/genfile.c b/source/blender/blenloader/intern/genfile.c
index 87c859de839..86338ca9e89 100644
--- a/source/blender/blenloader/intern/genfile.c
+++ b/source/blender/blenloader/intern/genfile.c
@@ -58,6 +58,8 @@
#include "genfile.h"
+#include "BLO_sys_types.h" // for intptr_t support
+
/* gcc 4.1 on mingw was complaining that __int64 was alredy defined
actually is saw the line below as typedef long long long long...
Anyhow, since its alredy defined, its safe to do an ifndef here- Cambpell*/
@@ -315,7 +317,7 @@ static void init_structDNA(struct SDNA *sdna, int do_endian_swap)
/* in sdna->data the data, now we convert that to something understandable */
{
int *data, *verg;
- long nr;
+ intptr_t nr;
short *sp;
char str[8], *cp;
@@ -351,7 +353,7 @@ static void init_structDNA(struct SDNA *sdna, int do_endian_swap)
cp++;
nr++;
}
- nr= (long)cp; /* prevent BUS error */
+ nr= (intptr_t)cp; /* prevent BUS error */
nr= (nr+3) & ~3;
cp= (char *)nr;
@@ -389,7 +391,7 @@ static void init_structDNA(struct SDNA *sdna, int do_endian_swap)
cp++;
nr++;
}
- nr= (long)cp; /* prevent BUS error */
+ nr= (intptr_t)cp; /* prevent BUS error */
nr= (nr+3) & ~3;
cp= (char *)nr;
@@ -1098,7 +1100,7 @@ int dna_elem_offset(struct SDNA *sdna, char *stype, char *vartype, char *name)
int SDNAnr= dna_findstruct_nr(sdna, stype);
short *spo= sdna->structs[SDNAnr];
char *cp= find_elem(sdna, vartype, name, spo, NULL, NULL);
- return (int)((long)cp);
+ return (int)((intptr_t)cp);
}
diff --git a/source/blender/blenloader/intern/readblenentry.c b/source/blender/blenloader/intern/readblenentry.c
index f56b261efe2..5a75b5c8b11 100644
--- a/source/blender/blenloader/intern/readblenentry.c
+++ b/source/blender/blenloader/intern/readblenentry.c
@@ -63,6 +63,8 @@
#include "BLO_readblenfile.h"
+#include "BLO_sys_types.h" // needed for intptr_t
+
/**
* IDType stuff, I plan to move this
* out into its own file + prefix, and
@@ -193,7 +195,7 @@ void BLO_blendhandle_print_sizes(BlendHandle *bh, void *fp)
buf[2]= buf[2]?buf[2]:' ';
buf[3]= buf[3]?buf[3]:' ';
- fprintf(fp, "['%.4s', '%s', %d, %ld ], \n", buf, name, bhead->nr, (long)bhead->len+sizeof(BHead));
+ fprintf(fp, "['%.4s', '%s', %d, %ld ], \n", buf, name, bhead->nr, (intptr_t)bhead->len+sizeof(BHead));
}
}
fprintf(fp, "]\n");
diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c
index c399ca13437..c918a82f36a 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -39,6 +39,7 @@
#include "BLI_winstuff.h"
#endif
+#include <limits.h>
#include <stdio.h> // for printf fopen fwrite fclose sprintf FILE
#include <stdlib.h> // for getenv atoi
#include <fcntl.h> // for open
@@ -136,10 +137,11 @@
#include "BKE_object.h"
#include "BKE_particle.h"
#include "BKE_pointcache.h"
-#include "BKE_property.h" // for get_property
+#include "BKE_property.h" // for get_ob_property
#include "BKE_sca.h" // for init_actuator
#include "BKE_scene.h"
#include "BKE_softbody.h" // sbNew()
+#include "BKE_bullet.h" // bsbNew()
#include "BKE_sculpt.h"
#include "BKE_texture.h" // for open_plugin_tex
#include "BKE_utildefines.h" // SWITCH_INT DATA ENDB DNA1 O_BINARY GLOB USER TEST REND
@@ -970,9 +972,11 @@ FileData *blo_openblenderfile(char *name, BlendReadError *error_r)
} else {
FileData *fd = filedata_new();
fd->gzfiledes = gzfile;
- BLI_strncpy(fd->filename, name, sizeof(fd->filename)); // now only in use by library append
fd->read = fd_read_gzip_from_file;
+ /* needed for library_append and read_libraries */
+ BLI_strncpy(fd->filename, name, sizeof(fd->filename));
+
return blo_decode_and_check(fd, error_r);
}
}
@@ -1138,6 +1142,8 @@ void blo_make_image_pointer_map(FileData *fd)
Link *ibuf= ima->ibufs.first;
for(; ibuf; ibuf= ibuf->next)
oldnewmap_insert(fd->imamap, ibuf, ibuf, 0);
+ if(ima->gputexture)
+ oldnewmap_insert(fd->imamap, ima->gputexture, ima->gputexture, 0);
}
for(; sce; sce= sce->id.next) {
if(sce->nodetree) {
@@ -1172,8 +1178,11 @@ void blo_end_image_pointer_map(FileData *fd)
if(NULL==newimaadr(fd, ibuf)) { /* so was restored */
BLI_remlink(&ima->ibufs, ibuf);
ima->bindcode= 0;
+ ima->gputexture= NULL;
}
}
+
+ ima->gputexture= newimaadr(fd, ima->gputexture);
}
for(; sce; sce= sce->id.next) {
if(sce->nodetree) {
@@ -1338,7 +1347,7 @@ static void test_pointer_array(FileData *fd, void **mat)
void IDP_DirectLinkProperty(IDProperty *prop, int switch_endian, void *fd);
void IDP_LibLinkProperty(IDProperty *prop, int switch_endian, void *fd);
-void IDP_DirectLinkArray(IDProperty *prop, int switch_endian, void *fd)
+static void IDP_DirectLinkArray(IDProperty *prop, int switch_endian, void *fd)
{
int i;
@@ -1359,14 +1368,14 @@ void IDP_DirectLinkArray(IDProperty *prop, int switch_endian, void *fd)
}
}
-void IDP_DirectLinkString(IDProperty *prop, int switch_endian, void *fd)
+static void IDP_DirectLinkString(IDProperty *prop, int switch_endian, void *fd)
{
/*since we didn't save the extra string buffer, set totallen to len.*/
prop->totallen = prop->len;
prop->data.pointer = newdataadr(fd, prop->data.pointer);
}
-void IDP_DirectLinkGroup(IDProperty *prop, int switch_endian, void *fd)
+static void IDP_DirectLinkGroup(IDProperty *prop, int switch_endian, void *fd)
{
ListBase *lb = &prop->data.group;
IDProperty *loop;
@@ -2273,6 +2282,7 @@ static void direct_link_text(FileData *fd, Text *text)
*/
link_list(fd, &text->lines);
+ link_list(fd, &text->markers);
text->curl= newdataadr(fd, text->curl);
text->sell= newdataadr(fd, text->sell);
@@ -2339,8 +2349,10 @@ static void direct_link_image(FileData *fd, Image *ima)
ima->ibufs.first= ima->ibufs.last= NULL;
/* if not restored, we keep the binded opengl index */
- if(ima->ibufs.first==NULL)
+ if(ima->ibufs.first==NULL) {
ima->bindcode= 0;
+ ima->gputexture= NULL;
+ }
ima->anim= NULL;
ima->rr= NULL;
@@ -2551,6 +2563,7 @@ static void direct_link_material(FileData *fd, Material *ma)
direct_link_nodetree(fd, ma->nodetree);
ma->preview = direct_link_preview_image(fd, ma->preview);
+ ma->gpumaterial.first = ma->gpumaterial.last = NULL;
}
/* ************ READ PARTICLE SETTINGS ***************** */
@@ -2582,21 +2595,36 @@ static void lib_link_particlesettings(FileData *fd, Main *main)
static void direct_link_particlesettings(FileData *fd, ParticleSettings *part)
{
part->pd= newdataadr(fd, part->pd);
+ part->pd2= newdataadr(fd, part->pd2);
}
-static void lib_link_particlesystems(FileData *fd, ID *id, ListBase *particles)
+static void lib_link_particlesystems(FileData *fd, Object *ob, ID *id, ListBase *particles)
{
- ParticleSystem *psys;
+ ParticleSystem *psys, *psysnext;
int a;
- for(psys=particles->first; psys; psys=psys->next){
+ for(psys=particles->first; psys; psys=psysnext){
ParticleData *pa;
+
+ psysnext= psys->next;
+
psys->part = newlibadr_us(fd, id->lib, psys->part);
- psys->target_ob = newlibadr(fd, id->lib, psys->target_ob);
- psys->keyed_ob = newlibadr(fd, id->lib, psys->keyed_ob);
+ if(psys->part) {
+ psys->target_ob = newlibadr(fd, id->lib, psys->target_ob);
+ psys->keyed_ob = newlibadr(fd, id->lib, psys->keyed_ob);
- for(a=0,pa=psys->particles; a<psys->totpart; a++,pa++){
- pa->stick_ob=newlibadr(fd, id->lib, pa->stick_ob);
+ for(a=0,pa=psys->particles; a<psys->totpart; a++,pa++){
+ pa->stick_ob=newlibadr(fd, id->lib, pa->stick_ob);
+ }
+ }
+ else {
+ /* particle modifier must be removed before particle system */
+ ParticleSystemModifierData *psmd= psys_get_modifier(ob,psys);
+ BLI_remlink(&ob->modifiers, psmd);
+ modifier_free((ModifierData *)psmd);
+
+ BLI_remlink(particles, psys);
+ MEM_freeN(psys);
}
}
}
@@ -2942,11 +2970,9 @@ static void lib_link_object(FileData *fd, Main *main)
sens= ob->sensors.first;
while(sens) {
- if(ob->id.lib==NULL) { // done in expand_main
- for(a=0; a<sens->totlinks; a++) {
- sens->links[a]= newglobadr(fd, sens->links[a]);
- }
- }
+ for(a=0; a<sens->totlinks; a++)
+ sens->links[a]= newglobadr(fd, sens->links[a]);
+
if(sens->type==SENS_TOUCH) {
bTouchSensor *ts= sens->data;
ts->ma= newlibadr(fd, ob->id.lib, ts->ma);
@@ -2961,11 +2987,9 @@ static void lib_link_object(FileData *fd, Main *main)
cont= ob->controllers.first;
while(cont) {
- if(ob->id.lib==NULL) { // done in expand_main
- for(a=0; a<cont->totlinks; a++) {
- cont->links[a]= newglobadr(fd, cont->links[a]);
- }
- }
+ for(a=0; a<cont->totlinks; a++)
+ cont->links[a]= newglobadr(fd, cont->links[a]);
+
if(cont->type==CONT_PYTHON) {
bPythonCont *pc= cont->data;
pc->text= newlibadr(fd, ob->id.lib, pc->text);
@@ -3041,9 +3065,12 @@ static void lib_link_object(FileData *fd, Main *main)
}
act= act->next;
}
-
- if(ob->fluidsimSettings) {
- ob->fluidsimSettings->ipo = newlibadr_us(fd, ob->id.lib, ob->fluidsimSettings->ipo);
+
+ {
+ FluidsimModifierData *fluidmd = (FluidsimModifierData *)modifiers_findByType(ob, eModifierType_Fluidsim);
+
+ if(fluidmd && fluidmd->fss)
+ fluidmd->fss->ipo = newlibadr_us(fd, ob->id.lib, fluidmd->fss->ipo);
}
/* texture field */
@@ -3052,7 +3079,7 @@ static void lib_link_object(FileData *fd, Main *main)
ob->pd->tex=newlibadr_us(fd, ob->id.lib, ob->pd->tex);
lib_link_scriptlink(fd, &ob->id, &ob->scriptlink);
- lib_link_particlesystems(fd, &ob->id, &ob->particlesystem);
+ lib_link_particlesystems(fd, ob, &ob->id, &ob->particlesystem);
lib_link_modifiers(fd, ob);
}
ob= ob->id.next;
@@ -3118,6 +3145,11 @@ static void direct_link_modifiers(FileData *fd, ListBase *lb)
}
}
+ else if (md->type==eModifierType_Fluidsim) {
+ FluidsimModifierData *fluidmd = (FluidsimModifierData*) md;
+
+ fluidmd->fss= newdataadr(fd, fluidmd->fss);
+ }
else if (md->type==eModifierType_Collision) {
CollisionModifierData *collmd = (CollisionModifierData*) md;
@@ -3303,14 +3335,8 @@ static void direct_link_object(FileData *fd, Object *ob)
if(sb->pointcache)
direct_link_pointcache(fd, sb->pointcache);
}
+ ob->bsoft= newdataadr(fd, ob->bsoft);
ob->fluidsimSettings= newdataadr(fd, ob->fluidsimSettings); /* NT */
- if(ob->fluidsimSettings) {
- // reinit mesh pointers
- ob->fluidsimSettings->orgMesh = NULL; //ob->data;
- ob->fluidsimSettings->meshSurface = NULL;
- ob->fluidsimSettings->meshBB = NULL;
- ob->fluidsimSettings->meshSurfNormals = NULL;
- }
link_list(fd, &ob->particlesystem);
direct_link_particlesystems(fd,&ob->particlesystem);
@@ -3392,6 +3418,7 @@ static void direct_link_object(FileData *fd, Object *ob)
ob->bb= NULL;
ob->derivedDeform= NULL;
ob->derivedFinal= NULL;
+ ob->gpulamp.first= ob->gpulamp.last= NULL;
}
/* ************ READ SCENE ***************** */
@@ -3593,9 +3620,9 @@ static void direct_link_scene(FileData *fd, Scene *sce)
{
Sequence temp;
char *poin;
- long offset;
+ intptr_t offset;
- offset= ((long)&(temp.seqbase)) - ((long)&temp);
+ offset= ((intptr_t)&(temp.seqbase)) - ((intptr_t)&temp);
/* root pointer */
if(ed->seqbasep == old_seqbasep) {
@@ -4094,7 +4121,7 @@ static void direct_link_screen(FileData *fd, bScreen *sc)
while(se) {
se->v1= newdataadr(fd, se->v1);
se->v2= newdataadr(fd, se->v2);
- if( (long)se->v1 > (long)se->v2) {
+ if( (intptr_t)se->v1 > (intptr_t)se->v2) {
sv= se->v1;
se->v1= se->v2;
se->v2= sv;
@@ -4166,6 +4193,9 @@ static void direct_link_screen(FileData *fd, bScreen *sc)
sima->cumap= newdataadr(fd, sima->cumap);
if(sima->cumap)
direct_link_curvemapping(fd, sima->cumap);
+ sima->gpd= newdataadr(fd, sima->gpd);
+ if (sima->gpd)
+ link_gpencil(fd, sima->gpd);
sima->iuser.ok= 1;
}
else if(sl->spacetype==SPACE_NODE) {
@@ -4844,7 +4874,7 @@ static void ntree_version_245(FileData *fd, Library *lib, bNodeTree *ntree)
}
}
-void idproperties_fix_groups_lengths_recurse(IDProperty *prop)
+static void idproperties_fix_groups_lengths_recurse(IDProperty *prop)
{
IDProperty *loop;
int i;
@@ -4859,7 +4889,7 @@ void idproperties_fix_groups_lengths_recurse(IDProperty *prop)
}
}
-void idproperties_fix_group_lengths(ListBase idlist)
+static void idproperties_fix_group_lengths(ListBase idlist)
{
ID *id;
@@ -4870,7 +4900,7 @@ void idproperties_fix_group_lengths(ListBase idlist)
}
}
-void alphasort_version_246(FileData *fd, Library *lib, Mesh *me)
+static void alphasort_version_246(FileData *fd, Library *lib, Mesh *me)
{
Material *ma;
MFace *mf;
@@ -5299,7 +5329,7 @@ static void do_versions(FileData *fd, Library *lib, Main *main)
while (act) {
if(act->type==ACT_IPO) {
ia= act->data;
- prop= get_property(ob, ia->name);
+ prop= get_ob_property(ob, ia->name);
if(prop) {
ia->type= ACT_IPO_FROM_PROP;
}
@@ -7621,8 +7651,12 @@ static void do_versions(FileData *fd, Library *lib, Main *main)
}
}
- if(ob->fluidsimSettings && ob->fluidsimSettings->type == OB_FLUIDSIM_PARTICLE)
- part->type = PART_FLUID;
+
+ {
+ FluidsimModifierData *fluidmd = (FluidsimModifierData *)modifiers_findByType(ob, eModifierType_Fluidsim);
+ if(fluidmd && fluidmd->fss && fluidmd->fss->type == OB_FLUIDSIM_PARTICLE)
+ part->type = PART_FLUID;
+ }
free_effects(&ob->effect);
@@ -7748,35 +7782,12 @@ static void do_versions(FileData *fd, Library *lib, Main *main)
idproperties_fix_group_lengths(main->brush);
idproperties_fix_group_lengths(main->particle);
}
-
- /* only needed until old bad svn/RC1,2 files are saved with a > 17 version -dg */
- if(main->versionfile == 245 && main->subversionfile < 17) {
- ModifierData *md;
- Object *ob;
-
- for(ob = main->object.first; ob; ob= ob->id.next) {
- for(md=ob->modifiers.first; md; ) {
- if(md->type==eModifierType_Cloth) {
- ModifierData *next;
- MEM_freeN(((ClothModifierData *)md)->sim_parms);
- MEM_freeN(((ClothModifierData *)md)->coll_parms);
- MEM_freeN(((ClothModifierData *)md)->point_cache);
- ((ClothModifierData *)md)->sim_parms = NULL;
- ((ClothModifierData *)md)->coll_parms = NULL;
- ((ClothModifierData *)md)->point_cache = NULL;
- next=md->next;
- BLI_remlink(&ob->modifiers, md);
- md = next;
- }
- else
- md = md->next;
- }
- }
- }
/* sun/sky */
if(main->versionfile < 246) {
Lamp *la;
+ Object *ob;
+ bActuator *act;
for(la=main->lamp.first; la; la= la->id.next) {
la->sun_effect_type = 0;
@@ -7791,15 +7802,151 @@ static void do_versions(FileData *fd, Library *lib, Main *main)
la->atm_distance_factor = 1.0;
la->sun_intensity = 1.0;
}
+ /* dRot actuator change direction in 2.46 */
+ for(ob = main->object.first; ob; ob= ob->id.next) {
+ for(act= ob->actuators.first; act; act= act->next) {
+ if (act->type == ACT_OBJECT) {
+ bObjectActuator *ba= act->data;
+
+ ba->drot[0] = -ba->drot[0];
+ ba->drot[1] = -ba->drot[1];
+ ba->drot[2] = -ba->drot[2];
+ }
+ }
+ }
}
+
+ // convert fluids to modifier
+ if(main->versionfile < 246 || (main->versionfile == 246 && main->subversionfile < 1))
+ {
+ Object *ob;
+
+ for(ob = main->object.first; ob; ob= ob->id.next) {
+ if(ob->fluidsimSettings)
+ {
+ FluidsimModifierData *fluidmd = (FluidsimModifierData *)modifier_new(eModifierType_Fluidsim);
+ BLI_addhead(&ob->modifiers, (ModifierData *)fluidmd);
+
+ MEM_freeN(fluidmd->fss);
+ fluidmd->fss = MEM_dupallocN(ob->fluidsimSettings);
+ fluidmd->fss->ipo = newlibadr_us(fd, ob->id.lib, ob->fluidsimSettings->ipo);
+ MEM_freeN(ob->fluidsimSettings);
+
+ fluidmd->fss->lastgoodframe = INT_MAX;
+ fluidmd->fss->flag = 0;
+ }
+ }
+ }
+
- if(main->versionfile <= 246 && main->subversionfile < 1){
+ if(main->versionfile < 246 || (main->versionfile == 246 && main->subversionfile < 1)) {
Mesh *me;
for(me=main->mesh.first; me; me= me->id.next)
alphasort_version_246(fd, lib, me);
}
+
+ if(main->versionfile < 246 || (main->versionfile == 246 && main->subversionfile < 1)){
+ Object *ob;
+ for(ob = main->object.first; ob; ob= ob->id.next) {
+ if(ob->pd && (ob->pd->forcefield == PFIELD_WIND))
+ ob->pd->f_noise = 0.0;
+ }
+ }
+
+ if (main->versionfile < 247 || (main->versionfile == 247 && main->subversionfile < 2)){
+ Object *ob;
+ for(ob = main->object.first; ob; ob= ob->id.next) {
+ ob->gameflag |= OB_COLLISION;
+ ob->margin = 0.06;
+ }
+ }
+ if (main->versionfile < 247 || (main->versionfile == 247 && main->subversionfile < 3)){
+ Object *ob;
+ for(ob = main->object.first; ob; ob= ob->id.next) {
+ // Starting from subversion 3, ACTOR is a separate feature.
+ // Before it was conditioning all the other dynamic flags
+ if (!(ob->gameflag & OB_ACTOR))
+ ob->gameflag &= ~(OB_GHOST|OB_DYNAMIC|OB_RIGID_BODY|OB_SOFT_BODY|OB_COLLISION_RESPONSE);
+ /* suitable default for older files */
+ }
+ }
+
+ if (main->versionfile < 247 || (main->versionfile == 247 && main->subversionfile < 4)){
+ Scene *sce= main->scene.first;
+ while(sce) {
+ if(sce->frame_step==0)
+ sce->frame_step= 1;
+ sce= sce->id.next;
+ }
+ }
+
+ if (main->versionfile < 247 || (main->versionfile == 247 && main->subversionfile < 5)) {
+ Lamp *la= main->lamp.first;
+ for(; la; la= la->id.next) {
+ la->skyblendtype= MA_RAMP_ADD;
+ la->skyblendfac= 1.0f;
+ }
+ }
+
+ /* set the curve radius interpolation to 2.47 default - easy */
+ if (main->versionfile < 247 || (main->versionfile == 247 && main->subversionfile < 6)) {
+ Curve *cu;
+ Nurb *nu;
+
+ for(cu= main->curve.first; cu; cu= cu->id.next) {
+ for(nu= cu->nurb.first; nu; nu= nu->next) {
+ if (nu) {
+ nu->radius_interp = 3;
+
+ /* resolu and resolv are now used differently for surfaces
+ * rather then using the resolution to define the entire number of divisions,
+ * use it for the number of divisions per segment
+ */
+ if (nu->pntsv > 1) {
+ nu->resolu = MAX2( 1, (int)(((float)nu->resolu / (float)nu->pntsu)+0.5f) );
+ nu->resolv = MAX2( 1, (int)(((float)nu->resolv / (float)nu->pntsv)+0.5f) );
+ }
+ }
+ }
+ }
+ }
+ /* direction constraint actuators were always local in previous version */
+ if (main->versionfile < 247 || (main->versionfile == 247 && main->subversionfile < 7)) {
+ bActuator *act;
+ Object *ob;
+
+ for(ob = main->object.first; ob; ob= ob->id.next) {
+ for(act= ob->actuators.first; act; act= act->next) {
+ if (act->type == ACT_CONSTRAINT) {
+ bConstraintActuator *coa = act->data;
+ if (coa->type == ACT_CONST_TYPE_DIST) {
+ coa->flag |= ACT_CONST_LOCAL;
+ }
+ }
+ }
+ }
+ }
+ /* autokey mode settings now used from scene, but need to be initialised off userprefs */
+ if (main->versionfile < 247 || (main->versionfile == 247 && main->subversionfile < 8)) {
+ Scene *sce;
+
+ for (sce= main->scene.first; sce; sce= sce->id.next) {
+ if (sce->autokey_mode == 0)
+ sce->autokey_mode= U.autokey_mode;
+ }
+ }
+
+ if (main->versionfile < 247 || (main->versionfile == 247 && main->subversionfile < 9)) {
+ Lamp *la= main->lamp.first;
+ for(; la; la= la->id.next) {
+ la->sky_exposure= 1.0f;
+ }
+ }
+
+
+
/* WATCH IT!!!: pointers from libdata have not been converted yet here! */
/* WATCH IT 2!: Userdef struct init has to be in src/usiblender.c! */
@@ -8516,9 +8663,6 @@ static void expand_object(FileData *fd, Main *mainvar, Object *ob)
sens= ob->sensors.first;
while(sens) {
- for(a=0; a<sens->totlinks; a++) {
- sens->links[a]= newglobadr(fd, sens->links[a]);
- }
if(sens->type==SENS_TOUCH) {
bTouchSensor *ts= sens->data;
expand_doit(fd, mainvar, ts->ma);
@@ -8532,9 +8676,6 @@ static void expand_object(FileData *fd, Main *mainvar, Object *ob)
cont= ob->controllers.first;
while(cont) {
- for(a=0; a<cont->totlinks; a++) {
- cont->links[a]= newglobadr(fd, cont->links[a]);
- }
if(cont->type==CONT_PYTHON) {
bPythonCont *pc= cont->data;
expand_doit(fd, mainvar, pc->text);
@@ -9156,7 +9297,7 @@ static void read_libraries(FileData *basefd, ListBase *mainlist)
/* reading runtime */
-BlendFileData *blo_read_blendafterruntime(int file, int actualsize, BlendReadError *error_r)
+BlendFileData *blo_read_blendafterruntime(int file, char *name, int actualsize, BlendReadError *error_r)
{
BlendFileData *bfd = NULL;
FileData *fd = filedata_new();
@@ -9164,6 +9305,9 @@ BlendFileData *blo_read_blendafterruntime(int file, int actualsize, BlendReadErr
fd->buffersize = actualsize;
fd->read = fd_read_from_file;
+ /* needed for library_append and read_libraries */
+ BLI_strncpy(fd->filename, name, sizeof(fd->filename));
+
fd = blo_decode_and_check(fd, error_r);
if (!fd)
return NULL;
diff --git a/source/blender/blenloader/intern/writefile.c b/source/blender/blenloader/intern/writefile.c
index 3a70438dd13..3c2ca92f3fc 100644
--- a/source/blender/blenloader/intern/writefile.c
+++ b/source/blender/blenloader/intern/writefile.c
@@ -399,7 +399,7 @@ static void writedata(WriteData *wd, int filecode, int len, void *adr) /* do not
void IDP_WriteProperty_OnlyData(IDProperty *prop, void *wd);
void IDP_WriteProperty(IDProperty *prop, void *wd);
-void IDP_WriteArray(IDProperty *prop, void *wd)
+static void IDP_WriteArray(IDProperty *prop, void *wd)
{
/*REMEMBER to set totalen to len in the linking code!!*/
if (prop->data.pointer) {
@@ -407,13 +407,13 @@ void IDP_WriteArray(IDProperty *prop, void *wd)
}
}
-void IDP_WriteString(IDProperty *prop, void *wd)
+static void IDP_WriteString(IDProperty *prop, void *wd)
{
/*REMEMBER to set totalen to len in the linking code!!*/
writedata(wd, DATA, prop->len+1, prop->data.pointer);
}
-void IDP_WriteGroup(IDProperty *prop, void *wd)
+static void IDP_WriteGroup(IDProperty *prop, void *wd)
{
IDProperty *loop;
@@ -535,6 +535,7 @@ static void write_particlesettings(WriteData *wd, ListBase *idbase)
writestruct(wd, ID_PA, "ParticleSettings", 1, part);
if (part->id.properties) IDP_WriteProperty(part->id.properties, wd);
writestruct(wd, DATA, "PartDeflect", 1, part->pd);
+ writestruct(wd, DATA, "PartDeflect", 1, part->pd2);
}
part= part->id.next;
}
@@ -608,6 +609,9 @@ static void write_sensors(WriteData *wd, ListBase *lb)
case SENS_ACTUATOR:
writestruct(wd, DATA, "bActuatorSensor", 1, sens->data);
break;
+ case SENS_DELAY:
+ writestruct(wd, DATA, "bDelaySensor", 1, sens->data);
+ break;
case SENS_COLLISION:
writestruct(wd, DATA, "bCollisionSensor", 1, sens->data);
break;
@@ -848,6 +852,11 @@ static void write_modifiers(WriteData *wd, ListBase *modbase)
writestruct(wd, DATA, "ClothCollSettings", 1, clmd->coll_parms);
writestruct(wd, DATA, "PointCache", 1, clmd->point_cache);
}
+ else if(md->type==eModifierType_Fluidsim) {
+ FluidsimModifierData *fluidmd = (FluidsimModifierData*) md;
+
+ writestruct(wd, DATA, "FluidsimSettings", 1, fluidmd->fss);
+ }
else if (md->type==eModifierType_Collision) {
/*
@@ -913,7 +922,7 @@ static void write_objects(WriteData *wd, ListBase *idbase)
writestruct(wd, DATA, "PartDeflect", 1, ob->pd);
writestruct(wd, DATA, "SoftBody", 1, ob->soft);
if(ob->soft) writestruct(wd, DATA, "PointCache", 1, ob->soft->pointcache);
- writestruct(wd, DATA, "FluidsimSettings", 1, ob->fluidsimSettings); // NT
+ writestruct(wd, DATA, "BulletSoftBody", 1, ob->bsoft);
write_particlesystems(wd, &ob->particlesystem);
write_modifiers(wd, &ob->modifiers);
@@ -1057,7 +1066,7 @@ static void write_mballs(WriteData *wd, ListBase *idbase)
}
}
-int amount_of_chars(char *str)
+static int amount_of_chars(char *str)
{
// Since the data is saved as UTF-8 to the cu->str
// The cu->len is not same as the strlen(cu->str)
@@ -1694,7 +1703,9 @@ static void write_screens(WriteData *wd, ListBase *scrbase)
writestruct(wd, DATA, "SpaceImage", 1, sl);
if(sima->cumap)
- write_curvemapping(wd, sima->cumap);
+ write_curvemapping(wd, sima->cumap);
+ if(sima->gpd)
+ write_gpencil(wd, sima->gpd);
}
else if(sl->spacetype==SPACE_IMASEL) {
writestruct(wd, DATA, "SpaceImaSel", 1, sl);
@@ -1845,6 +1856,7 @@ static void write_texts(WriteData *wd, ListBase *idbase)
{
Text *text;
TextLine *tmp;
+ TextMarker *mrk;
text= idbase->first;
while(text) {
@@ -1868,7 +1880,16 @@ static void write_texts(WriteData *wd, ListBase *idbase)
writedata(wd, DATA, tmp->len+1, tmp->line);
tmp= tmp->next;
}
+
+ /* write markers */
+ mrk= text->markers.first;
+ while (mrk) {
+ writestruct(wd, DATA, "TextMarker", 1, mrk);
+ mrk= mrk->next;
+ }
}
+
+
text= text->id.next;
}
diff --git a/source/blender/blenpluginapi/intern/pluginapi.c b/source/blender/blenpluginapi/intern/pluginapi.c
index e65148a0b04..9c08a0b2f9d 100644
--- a/source/blender/blenpluginapi/intern/pluginapi.c
+++ b/source/blender/blenpluginapi/intern/pluginapi.c
@@ -50,10 +50,12 @@
#include "plugin.h"
#include "MEM_guardedalloc.h"
+#include "BLO_sys_types.h" // needed for intptr_t
+
#include "BLI_blenlib.h" /* util and noise functions */
#include "BLI_threads.h" /* For threadsfe guardedalloc malloc/calloc/free */
#include "IMB_imbuf.h" /* image buffer stuff */
-#define GET_INT_FROM_POINTER(i) ((int)(long)(i)) /* should use BKE_utildefines.h */
+#define GET_INT_FROM_POINTER(i) ((int)(intptr_t)(i)) /* should use BKE_utildefines.h */
/* -------------------------------------------------------------------------- */
/* stuff from util.h */
diff --git a/source/blender/gpu/CMakeLists.txt b/source/blender/gpu/CMakeLists.txt
new file mode 100644
index 00000000000..4d376f47d91
--- /dev/null
+++ b/source/blender/gpu/CMakeLists.txt
@@ -0,0 +1,34 @@
+# $Id: CMakeLists.txt 14444 2008-04-16 22:40:48Z hos $
+# ***** BEGIN GPL LICENSE BLOCK *****
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation,
+# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+# The Original Code is Copyright (C) 2006, Blender Foundation
+# All rights reserved.
+#
+# The Original Code is: all of this file.
+#
+# Contributor(s): Jacques Beaurain.
+#
+# ***** END GPL LICENSE BLOCK *****
+
+FILE(GLOB SRC intern/*.c)
+
+SET(INC
+ . ../blenlib ../blenkernel ../makesdna ../include
+ ../../../extern/glew/include ../../../intern/guardedalloc ../imbuf)
+
+BLENDERLIB(bf_gpu "${SRC}" "${INC}")
+
diff --git a/source/blender/gpu/GPU_draw.h b/source/blender/gpu/GPU_draw.h
new file mode 100644
index 00000000000..2399e7b6a8c
--- /dev/null
+++ b/source/blender/gpu/GPU_draw.h
@@ -0,0 +1,116 @@
+/**
+ * $Id$
+ *
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This shader is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version. The Blender
+ * Foundation also sells licenses for use in proprietary software under
+ * the Blender License. See http://www.blender.org/BL/ for information
+ * about this.
+ *
+ * This shader is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this shader; if not, write to the Free Software Foundation,
+ * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * The Original Code is Copyright (C) 2005 Blender Foundation.
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): Brecht Van Lommel.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+#ifndef GPU_GAME_H
+#define GPU_GAME_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct MTFace;
+struct Image;
+struct Scene;
+struct Object;
+
+/* OpenGL drawing functions related to shading. These are also
+ * shared with the game engine, where there were previously
+ * duplicates of some of these functions. */
+
+/* Initialize
+ * - sets the default Blender opengl state, if in doubt, check
+ * the contents of this function
+ * - this is called when starting Blender, for opengl rendering,
+ * and for switching back from the game engine for example. */
+
+void GPU_state_init(void);
+
+/* Material drawing
+ * - first the state is initialized by a particular object and
+ * it's materials
+ * - after this, materials can be quickly enabled by their number,
+ * GPU_enable_material returns 0 if drawing should be skipped
+ * - after drawing, the material must be disabled again */
+
+void GPU_set_object_materials(struct Scene *scene, struct Object *ob,
+ int glsl, int *do_alpha_pass);
+int GPU_enable_material(int nr, void *attribs);
+void GPU_disable_material(void);
+
+void GPU_set_material_blend_mode(int blendmode);
+int GPU_get_material_blend_mode(void);
+
+/* TexFace drawing
+ * - this is mutually exclusive with material drawing, a mesh should
+ * be drawn using one or the other
+ * - passing NULL clears the state again */
+
+int GPU_set_tpage(struct MTFace *tface);
+
+/* Lights
+ * - returns how many lights were enabled
+ * - this affects fixed functions materials and texface, not glsl */
+
+int GPU_default_lights(void);
+int GPU_scene_object_lights(struct Scene *scene, struct Object *ob,
+ int lay, float viewmat[][4]);
+
+/* Text render
+ * - based on moving uv coordinates */
+
+void GPU_render_text(struct MTFace *tface, int mode,
+ const char *textstr, int textlen, unsigned int *col,
+ float *v1, float *v2, float *v3, float *v4, int glattrib);
+
+/* Mipmap settings
+ * - these will free textures on changes */
+
+void GPU_set_mipmap(int mipmap);
+void GPU_set_linear_mipmap(int linear);
+void GPU_paint_set_mipmap(int mipmap);
+
+/* Image updates and free
+ * - these deal with images bound as opengl textures */
+
+void GPU_paint_update_image(struct Image *ima, int x, int y, int w, int h);
+void GPU_update_images_framechange(void);
+int GPU_update_image_time(struct Image *ima, double time);
+int GPU_verify_image(struct Image *ima, int tftile, int tfmode, int compare);
+void GPU_free_image(struct Image *ima);
+void GPU_free_images(void);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
diff --git a/source/blender/gpu/GPU_extensions.h b/source/blender/gpu/GPU_extensions.h
new file mode 100644
index 00000000000..3813fe3da8e
--- /dev/null
+++ b/source/blender/gpu/GPU_extensions.h
@@ -0,0 +1,144 @@
+/**
+ * $Id$
+ *
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This shader is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version. The Blender
+ * Foundation also sells licenses for use in proprietary software under
+ * the Blender License. See http://www.blender.org/BL/ for information
+ * about this.
+ *
+ * This shader is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this shader; if not, write to the Free Software Foundation,
+ * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * The Original Code is Copyright (C) 2005 Blender Foundation.
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): Brecht Van Lommel.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+#ifndef GPU_EXTENSIONS_H
+#define GPU_EXTENSIONS_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* GPU extensions support */
+
+struct Image;
+struct ImageUser;
+
+struct GPUTexture;
+typedef struct GPUTexture GPUTexture;
+
+struct GPUFrameBuffer;
+typedef struct GPUFrameBuffer GPUFrameBuffer;
+
+struct GPUShader;
+typedef struct GPUShader GPUShader;
+
+void GPU_extensions_init(void); /* call this before running any of the functions below */
+void GPU_extensions_exit(void);
+int GPU_extensions_minimum_support(void);
+int GPU_print_error(char *str);
+
+/* GPU Texture
+ - always returns unsigned char RGBA textures
+ - if texture with non square dimensions is created, depending on the
+ graphics card capabilities the texture may actually be stored in a
+ larger texture with power of two dimensions. the actual dimensions
+ may be querd with GPU_texture_opengl_width/height. GPU_texture_coord_2f
+ calls glTexCoord2f with the coordinates adjust for this.
+ - can use reference counting:
+ - reference counter after GPU_texture_create is 1
+ - GPU_texture_ref increases by one
+ - GPU_texture_free decreases by one, and frees if 0
+ - if created with from_blender, will not free the texture
+*/
+
+GPUTexture *GPU_texture_create_1D(int w, float *pixels);
+GPUTexture *GPU_texture_create_2D(int w, int h, float *pixels);
+GPUTexture *GPU_texture_create_depth(int w, int h);
+GPUTexture *GPU_texture_from_blender(struct Image *ima,
+ struct ImageUser *iuser, double time);
+void GPU_texture_free(GPUTexture *tex);
+
+void GPU_texture_ref(GPUTexture *tex);
+
+void GPU_texture_bind(GPUTexture *tex, int number);
+void GPU_texture_unbind(GPUTexture *tex);
+
+GPUFrameBuffer *GPU_texture_framebuffer(GPUTexture *tex);
+
+int GPU_texture_target(GPUTexture *tex);
+int GPU_texture_opengl_width(GPUTexture *tex);
+int GPU_texture_opengl_height(GPUTexture *tex);
+
+/* GPU Framebuffer
+ - this is a wrapper for an OpenGL framebuffer object (FBO). in practice
+ multiple FBO's may be created, to get around limitations on the number
+ of attached textures and the dimension requirements.
+ - after any of the GPU_framebuffer_* functions, GPU_framebuffer_restore must
+ be called before rendering to the window framebuffer again */
+
+GPUFrameBuffer *GPU_framebuffer_create();
+int GPU_framebuffer_texture_attach(GPUFrameBuffer *fb, GPUTexture *tex);
+void GPU_framebuffer_texture_detach(GPUFrameBuffer *fb, GPUTexture *tex);
+void GPU_framebuffer_texture_bind(GPUFrameBuffer *fb, GPUTexture *tex);
+void GPU_framebuffer_texture_unbind(GPUFrameBuffer *fb, GPUTexture *tex);
+void GPU_framebuffer_free(GPUFrameBuffer *fb);
+
+void GPU_framebuffer_restore();
+
+/* GPU Shader
+ - only for fragment shaders now
+ - must call texture bind before setting a texture as uniform! */
+
+GPUShader *GPU_shader_create(const char *vertexcode, const char *fragcode, const char *libcode); /*GPUShader *lib);*/
+/*GPUShader *GPU_shader_create_lib(const char *code);*/
+void GPU_shader_free(GPUShader *shader);
+
+void GPU_shader_bind(GPUShader *shader);
+void GPU_shader_unbind();
+
+int GPU_shader_get_uniform(GPUShader *shader, char *name);
+void GPU_shader_uniform_vector(GPUShader *shader, int location, int length,
+ int arraysize, float *value);
+void GPU_shader_uniform_texture(GPUShader *shader, int location, GPUTexture *tex);
+
+int GPU_shader_get_attribute(GPUShader *shader, char *name);
+
+/* Vertex attributes for shaders */
+
+#define GPU_MAX_ATTRIB 32
+
+typedef struct GPUVertexAttribs {
+ struct {
+ int type;
+ int glindex;
+ char name[32];
+ } layer[GPU_MAX_ATTRIB];
+
+ int totlayer;
+} GPUVertexAttribs;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
diff --git a/source/blender/gpu/GPU_material.h b/source/blender/gpu/GPU_material.h
new file mode 100644
index 00000000000..ccc687858f4
--- /dev/null
+++ b/source/blender/gpu/GPU_material.h
@@ -0,0 +1,169 @@
+/**
+ * $Id$
+ *
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This shader is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version. The Blender
+ * Foundation also sells licenses for use in proprietary software under
+ * the Blender License. See http://www.blender.org/BL/ for information
+ * about this.
+ *
+ * This shader is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this shader; if not, write to the Free Software Foundation,
+ * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * The Original Code is Copyright (C) 2005 Blender Foundation.
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): Brecht Van Lommel.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+#ifndef __GPU_MATERIAL__
+#define __GPU_MATERIAL__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct Image;
+struct ImageUser;
+struct Material;
+struct Object;
+struct Lamp;
+struct bNode;
+struct LinkNode;
+struct Scene;
+struct GPUVertexAttribs;
+struct GPUNode;
+struct GPUNodeLink;
+struct GPUNodeStack;
+struct GPUMaterial;
+struct GPUTexture;
+struct GPULamp;
+
+typedef struct GPUNode GPUNode;
+typedef struct GPUNodeLink GPUNodeLink;
+typedef struct GPUMaterial GPUMaterial;
+typedef struct GPULamp GPULamp;
+
+/* Functions to create GPU Materials nodes */
+
+typedef enum GPUType {
+ GPU_NONE = 0,
+ GPU_FLOAT = 1,
+ GPU_VEC2 = 2,
+ GPU_VEC3 = 3,
+ GPU_VEC4 = 4,
+ GPU_MAT3 = 9,
+ GPU_MAT4 = 16,
+ GPU_TEX1D = 1001,
+ GPU_TEX2D = 1002,
+ GPU_SHADOW2D = 1003,
+ GPU_ATTRIB = 3001
+} GPUType;
+
+typedef enum GPUBuiltin {
+ GPU_VIEW_MATRIX = 1,
+ GPU_OBJECT_MATRIX = 2,
+ GPU_INVERSE_VIEW_MATRIX = 4,
+ GPU_INVERSE_OBJECT_MATRIX = 8,
+ GPU_VIEW_POSITION = 16,
+ GPU_VIEW_NORMAL = 32,
+ GPU_OBCOLOR = 64
+} GPUBuiltin;
+
+typedef enum GPUBlendMode {
+ GPU_BLEND_SOLID = 0,
+ GPU_BLEND_ADD = 1,
+ GPU_BLEND_ALPHA = 2,
+ GPU_BLEND_CLIP = 4
+} GPUBlendMode;
+
+typedef struct GPUNodeStack {
+ GPUType type;
+ char *name;
+ float vec[4];
+ struct GPUNodeLink *link;
+ short hasinput;
+ short hasoutput;
+ short sockettype;
+} GPUNodeStack;
+
+GPUNodeLink *GPU_attribute(int type, char *name);
+GPUNodeLink *GPU_uniform(float *num);
+GPUNodeLink *GPU_dynamic_uniform(float *num);
+GPUNodeLink *GPU_image(struct Image *ima, struct ImageUser *iuser);
+GPUNodeLink *GPU_texture(int size, float *pixels);
+GPUNodeLink *GPU_dynamic_texture(struct GPUTexture *tex);
+GPUNodeLink *GPU_socket(GPUNodeStack *sock);
+GPUNodeLink *GPU_builtin(GPUBuiltin builtin);
+
+int GPU_link(GPUMaterial *mat, char *name, ...);
+int GPU_stack_link(GPUMaterial *mat, char *name, GPUNodeStack *in, GPUNodeStack *out, ...);
+
+void GPU_material_output_link(GPUMaterial *material, GPUNodeLink *link);
+void GPU_material_enable_alpha(GPUMaterial *material);
+GPUBlendMode GPU_material_blend_mode(GPUMaterial *material, float obcol[4]);
+
+/* High level functions to create and use GPU materials */
+
+GPUMaterial *GPU_material_from_blender(struct Scene *scene, struct Material *ma);
+void GPU_material_free(struct Material *ma);
+
+void GPU_materials_free();
+
+void GPU_material_bind(GPUMaterial *material, int oblay, int viewlay, double time);
+void GPU_material_bind_uniforms(GPUMaterial *material, float obmat[][4], float viewmat[][4], float viewinv[][4], float obcol[4]);
+void GPU_material_unbind(GPUMaterial *material);
+int GPU_material_bound(GPUMaterial *material);
+
+void GPU_material_vertex_attributes(GPUMaterial *material,
+ struct GPUVertexAttribs *attrib);
+
+/* Exported shading */
+
+typedef struct GPUShadeInput {
+ GPUMaterial *gpumat;
+ struct Material *mat;
+
+ GPUNodeLink *rgb, *specrgb, *vn, *view, *vcol, *ref;
+ GPUNodeLink *alpha, *refl, *spec, *emit, *har, *amb;
+} GPUShadeInput;
+
+typedef struct GPUShadeResult {
+ GPUNodeLink *diff, *spec, *combined, *alpha;
+} GPUShadeResult;
+
+void GPU_shadeinput_set(GPUMaterial *mat, struct Material *ma, GPUShadeInput *shi);
+void GPU_shaderesult_set(GPUShadeInput *shi, GPUShadeResult *shr);
+
+/* Lamps */
+
+GPULamp *GPU_lamp_from_blender(struct Scene *scene, struct Object *ob, struct Object *par);
+void GPU_lamp_free(struct Object *ob);
+
+int GPU_lamp_has_shadow_buffer(GPULamp *lamp);
+void GPU_lamp_shadow_buffer_bind(GPULamp *lamp, float viewmat[][4], int *winsize, float winmat[][4]);
+void GPU_lamp_shadow_buffer_unbind(GPULamp *lamp);
+
+void GPU_lamp_update(GPULamp *lamp, int lay, float obmat[][4]);
+int GPU_lamp_shadow_layer(GPULamp *lamp);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /*__GPU_MATERIAL__*/
+
diff --git a/source/blender/gpu/Makefile b/source/blender/gpu/Makefile
new file mode 100644
index 00000000000..b9bde147115
--- /dev/null
+++ b/source/blender/gpu/Makefile
@@ -0,0 +1,37 @@
+#
+# $Id$
+#
+# ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version. The Blender
+# Foundation also sells licenses for use in proprietary software under
+# the Blender License. See http://www.blender.org/BL/ for information
+# about this.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation,
+# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
+# All rights reserved.
+#
+# The Original Code is: all of this file.
+#
+# Contributor(s): none yet.
+#
+# ***** END GPL/BL DUAL LICENSE BLOCK *****
+#
+# Makes module object directory and bounces make to subdirectories.
+
+SOURCEDIR = source/blender/gpu
+DIRS = intern
+
+include nan_subdirs.mk
diff --git a/source/blender/gpu/SConscript b/source/blender/gpu/SConscript
new file mode 100644
index 00000000000..8ccd4b7b24c
--- /dev/null
+++ b/source/blender/gpu/SConscript
@@ -0,0 +1,11 @@
+#!/usr/bin/python
+Import ('env')
+
+sources = env.Glob('intern/*.c')
+
+incs = '../blenlib ../blenkernel ../makesdna ../include'
+incs += ' #/extern/glew/include #intern/guardedalloc ../imbuf .'
+
+incs += ' ' + env['BF_OPENGL_INC']
+
+env.BlenderLib ( 'bf_gpu', sources, Split(incs), [], libtype=['core', 'player'], priority=[65, 20] )
diff --git a/source/blender/gpu/intern/Makefile b/source/blender/gpu/intern/Makefile
new file mode 100644
index 00000000000..733ee3f764c
--- /dev/null
+++ b/source/blender/gpu/intern/Makefile
@@ -0,0 +1,53 @@
+#
+# $Id$
+#
+# ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version. The Blender
+# Foundation also sells licenses for use in proprietary software under
+# the Blender License. See http://www.blender.org/BL/ for information
+# about this.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation,
+# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
+# All rights reserved.
+#
+# The Original Code is: all of this file.
+#
+# Contributor(s): none yet.
+#
+# ***** END GPL/BL DUAL LICENSE BLOCK *****
+#
+
+LIBNAME = gpu
+DIR = $(OCGDIR)/blender/$(LIBNAME)
+
+include nan_compile.mk
+
+ifeq ($(OS),$(findstring $(OS), "beos darwin freebsd linux openbsd solaris windows"))
+ CFLAGS += -funsigned-char
+endif
+
+CFLAGS += $(LEVEL_1_C_WARNINGS)
+
+CPPFLAGS += -I$(OPENGL_HEADERS)
+
+CPPFLAGS += -I../../blenlib
+CPPFLAGS += -I../../makesdna
+CPPFLAGS += -I../../imbuf
+CPPFLAGS += -I../../blenkernel
+CPPFLAGS += -I$(NAN_GUARDEDALLOC)/include
+CPPFLAGS += -I$(NAN_GLEW)/include
+CPPFLAGS += -I../
+
diff --git a/source/blender/gpu/intern/gpu_codegen.c b/source/blender/gpu/intern/gpu_codegen.c
new file mode 100644
index 00000000000..1c29bdc8741
--- /dev/null
+++ b/source/blender/gpu/intern/gpu_codegen.c
@@ -0,0 +1,1443 @@
+/**
+ * $Id$
+ *
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version. The Blender
+ * Foundation also sells licenses for use in proprietary software under
+ * the Blender License. See http://www.blender.org/BL/ for information
+ * about this.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * The Original Code is Copyright (C) 2005 Blender Foundation.
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): Brecht Van Lommel.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+#include "GL/glew.h"
+
+#include "MEM_guardedalloc.h"
+
+#include "DNA_customdata_types.h"
+#include "DNA_image_types.h"
+#include "DNA_listBase.h"
+#include "DNA_material_types.h"
+
+#include "BLI_dynstr.h"
+#include "BLI_blenlib.h"
+#include "BLI_ghash.h"
+#include "BLI_heap.h"
+
+#include "BKE_global.h"
+#include "BKE_utildefines.h"
+
+#include "GPU_material.h"
+#include "GPU_extensions.h"
+
+#include "BLO_sys_types.h" // for intptr_t support
+
+#include "gpu_codegen.h"
+
+#include <string.h>
+#include <stdarg.h>
+
+#ifdef _WIN32
+#ifndef vsnprintf
+#define vsnprintf _vsnprintf
+#endif
+#ifndef snprintf
+#define snprintf _snprintf
+#endif
+#endif
+
+extern char datatoc_gpu_shader_material_glsl[];
+extern char datatoc_gpu_shader_vertex_glsl[];
+
+/* structs and defines */
+
+typedef enum GPUDataSource {
+ GPU_SOURCE_VEC_UNIFORM,
+ GPU_SOURCE_BUILTIN,
+ GPU_SOURCE_TEX_PIXEL,
+ GPU_SOURCE_TEX,
+ GPU_SOURCE_ATTRIB
+} GPUDataSource;
+
+static char* GPU_DATATYPE_STR[17] = {"", "float", "vec2", "vec3", "vec4",
+ 0, 0, 0, 0, "mat3", 0, 0, 0, 0, 0, 0, "mat4"};
+
+struct GPUNode {
+ struct GPUNode *next, *prev;
+
+ char *name;
+ int tag;
+
+ ListBase inputs;
+ ListBase outputs;
+};
+
+struct GPUNodeLink {
+ GPUNodeStack *socket;
+
+ int attribtype;
+ char *attribname;
+
+ int image;
+
+ int texture;
+ int texturesize;
+
+ void *ptr1, *ptr2;
+
+ int dynamic;
+
+ int type;
+ int users;
+
+ GPUTexture *dynamictex;
+
+ GPUBuiltin builtin;
+
+ struct GPUOutput *output;
+};
+
+typedef struct GPUOutput {
+ struct GPUOutput *next, *prev;
+
+ GPUNode *node;
+ int type; /* data type = length of vector/matrix */
+ GPUNodeLink *link; /* output link */
+ int id; /* unique id as created by code generator */
+} GPUOutput;
+
+typedef struct GPUInput {
+ struct GPUInput *next, *prev;
+
+ GPUNode *node;
+
+ int type; /* datatype */
+ int source; /* data source */
+
+ int id; /* unique id as created by code generator */
+ int texid; /* number for multitexture */
+ int attribid; /* id for vertex attributes */
+ int bindtex; /* input is responsible for binding the texture? */
+ int definetex; /* input is responsible for defining the pixel? */
+ int textarget; /* GL_TEXTURE_* */
+ int textype; /* datatype */
+
+ struct Image *ima; /* image */
+ struct ImageUser *iuser;/* image user */
+ float *dynamicvec; /* vector data in case it is dynamic */
+ GPUTexture *tex; /* input texture, only set at runtime */
+ int shaderloc; /* id from opengl */
+ char shadername[32]; /* name in shader */
+
+ float vec[16]; /* vector data */
+ GPUNodeLink *link;
+ int dynamictex; /* dynamic? */
+ int attribtype; /* attribute type */
+ char attribname[32]; /* attribute name */
+ int attribfirst; /* this is the first one that is bound */
+ GPUBuiltin builtin; /* builtin uniform */
+} GPUInput;
+
+struct GPUPass {
+ struct GPUPass *next, *prev;
+
+ ListBase inputs;
+ struct GPUOutput *output;
+ struct GPUShader *shader;
+};
+
+/* Strings utility */
+
+static void BLI_dynstr_printf(DynStr *dynstr, const char *format, ...)
+{
+ va_list args;
+ int retval;
+ char str[2048];
+
+ va_start(args, format);
+ retval = vsnprintf(str, sizeof(str), format, args);
+ va_end(args);
+
+ if (retval >= sizeof(str))
+ fprintf(stderr, "BLI_dynstr_printf: limit exceeded\n");
+ else
+ BLI_dynstr_append(dynstr, str);
+}
+
+/* GLSL code parsing for finding function definitions.
+ * These are stored in a hash for lookup when creating a material. */
+
+static GHash *FUNCTION_HASH= NULL;
+/*static char *FUNCTION_PROTOTYPES= NULL;
+static GPUShader *FUNCTION_LIB= NULL;*/
+
+static int gpu_str_prefix(char *str, char *prefix)
+{
+ while(*str && *prefix) {
+ if(*str != *prefix)
+ return 0;
+
+ str++;
+ prefix++;
+ }
+
+ return (*prefix == '\0');
+}
+
+static char *gpu_str_skip_token(char *str, char *token, int max)
+{
+ int len = 0;
+
+ /* skip a variable/function name */
+ while(*str) {
+ if(ELEM6(*str, ' ', '(', ')', ',', '\t', '\n'))
+ break;
+ else {
+ if(token && len < max-1) {
+ *token= *str;
+ token++;
+ len++;
+ }
+ str++;
+ }
+ }
+
+ if(token)
+ *token= '\0';
+
+ /* skip the next special characters:
+ * note the missing ')' */
+ while(*str) {
+ if(ELEM5(*str, ' ', '(', ',', '\t', '\n'))
+ str++;
+ else
+ break;
+ }
+
+ return str;
+}
+
+static void gpu_parse_functions_string(GHash *hash, char *code)
+{
+ GPUFunction *function;
+ int i, type, qual;
+
+ while((code = strstr(code, "void "))) {
+ function = MEM_callocN(sizeof(GPUFunction), "GPUFunction");
+
+ code = gpu_str_skip_token(code, NULL, 0);
+ code = gpu_str_skip_token(code, function->name, MAX_FUNCTION_NAME);
+
+ /* get parameters */
+ while(*code && *code != ')') {
+ /* test if it's an input or output */
+ qual = FUNCTION_QUAL_IN;
+ if(gpu_str_prefix(code, "out "))
+ qual = FUNCTION_QUAL_OUT;
+ if(gpu_str_prefix(code, "inout "))
+ qual = FUNCTION_QUAL_INOUT;
+ if((qual != FUNCTION_QUAL_IN) || gpu_str_prefix(code, "in "))
+ code = gpu_str_skip_token(code, NULL, 0);
+
+ /* test for type */
+ type= 0;
+ for(i=1; i<=16; i++) {
+ if(GPU_DATATYPE_STR[i] && gpu_str_prefix(code, GPU_DATATYPE_STR[i])) {
+ type= i;
+ break;
+ }
+ }
+
+ if(!type && gpu_str_prefix(code, "sampler2DShadow"))
+ type= GPU_SHADOW2D;
+ if(!type && gpu_str_prefix(code, "sampler1D"))
+ type= GPU_TEX1D;
+ if(!type && gpu_str_prefix(code, "sampler2D"))
+ type= GPU_TEX2D;
+
+ if(type) {
+ /* add paramater */
+ code = gpu_str_skip_token(code, NULL, 0);
+ code = gpu_str_skip_token(code, NULL, 0);
+ function->paramqual[function->totparam]= qual;
+ function->paramtype[function->totparam]= type;
+ function->totparam++;
+ }
+ else {
+ fprintf(stderr, "GPU invalid function parameter in %s.\n", function->name);
+ break;
+ }
+ }
+
+ if(strlen(function->name) == 0 || function->totparam == 0) {
+ fprintf(stderr, "GPU functions parse error.\n");
+ MEM_freeN(function);
+ break;
+ }
+
+ BLI_ghash_insert(hash, function->name, function);
+ }
+}
+
+#if 0
+static char *gpu_generate_function_prototyps(GHash *hash)
+{
+ DynStr *ds = BLI_dynstr_new();
+ GHashIterator *ghi;
+ GPUFunction *function;
+ char *name, *prototypes;
+ int a;
+
+ /* automatically generate function prototypes to add to the top of the
+ * generated code, to avoid have to add the actual code & recompile all */
+ ghi = BLI_ghashIterator_new(hash);
+
+ for(; !BLI_ghashIterator_isDone(ghi); BLI_ghashIterator_step(ghi)) {
+ name = BLI_ghashIterator_getValue(ghi);
+ function = BLI_ghashIterator_getValue(ghi);
+
+ BLI_dynstr_printf(ds, "void %s(", name);
+ for(a=0; a<function->totparam; a++) {
+ if(function->paramqual[a] == FUNCTION_QUAL_OUT)
+ BLI_dynstr_append(ds, "out ");
+ else if(function->paramqual[a] == FUNCTION_QUAL_INOUT)
+ BLI_dynstr_append(ds, "inout ");
+
+ if(function->paramtype[a] == GPU_TEX1D)
+ BLI_dynstr_append(ds, "sampler1D");
+ else if(function->paramtype[a] == GPU_TEX2D)
+ BLI_dynstr_append(ds, "sampler2D");
+ else if(function->paramtype[a] == GPU_SHADOW2D)
+ BLI_dynstr_append(ds, "sampler2DShadow");
+ else
+ BLI_dynstr_append(ds, GPU_DATATYPE_STR[function->paramtype[a]]);
+
+ //BLI_dynstr_printf(ds, " param%d", a);
+
+ if(a != function->totparam-1)
+ BLI_dynstr_append(ds, ", ");
+ }
+ BLI_dynstr_append(ds, ");\n");
+ }
+
+ BLI_dynstr_append(ds, "\n");
+
+ prototypes = BLI_dynstr_get_cstring(ds);
+ BLI_dynstr_free(ds);
+
+ return prototypes;
+}
+#endif
+
+GPUFunction *GPU_lookup_function(char *name)
+{
+ if(!FUNCTION_HASH) {
+ FUNCTION_HASH = BLI_ghash_new(BLI_ghashutil_strhash, BLI_ghashutil_strcmp);
+ gpu_parse_functions_string(FUNCTION_HASH, datatoc_gpu_shader_material_glsl);
+ /*FUNCTION_PROTOTYPES = gpu_generate_function_prototyps(FUNCTION_HASH);
+ FUNCTION_LIB = GPU_shader_create_lib(datatoc_gpu_shader_material_glsl);*/
+ }
+
+ return (GPUFunction*)BLI_ghash_lookup(FUNCTION_HASH, name);
+}
+
+void GPU_extensions_exit(void)
+{
+ extern Material defmaterial; // render module abuse...
+
+ if(defmaterial.gpumaterial.first)
+ GPU_material_free(&defmaterial);
+
+ if(FUNCTION_HASH) {
+ BLI_ghash_free(FUNCTION_HASH, NULL, (GHashValFreeFP)MEM_freeN);
+ FUNCTION_HASH = NULL;
+ }
+ /*if(FUNCTION_PROTOTYPES) {
+ MEM_freeN(FUNCTION_PROTOTYPES);
+ FUNCTION_PROTOTYPES = NULL;
+ }*/
+ /*if(FUNCTION_LIB) {
+ GPU_shader_free(FUNCTION_LIB);
+ FUNCTION_LIB = NULL;
+ }*/
+}
+
+/* GLSL code generation */
+
+static void codegen_convert_datatype(DynStr *ds, int from, int to, char *tmp, int id)
+{
+ char name[1024];
+
+ snprintf(name, sizeof(name), "%s%d", tmp, id);
+
+ if (from == to) {
+ BLI_dynstr_append(ds, name);
+ }
+ else if (to == GPU_FLOAT) {
+ if (from == GPU_VEC4)
+ BLI_dynstr_printf(ds, "dot(%s.rgb, vec3(0.35, 0.45, 0.2))", name);
+ else if (from == GPU_VEC3)
+ BLI_dynstr_printf(ds, "dot(%s, vec3(0.33))", name);
+ else if (from == GPU_VEC2)
+ BLI_dynstr_printf(ds, "%s.r", name);
+ }
+ else if (to == GPU_VEC2) {
+ if (from == GPU_VEC4)
+ BLI_dynstr_printf(ds, "vec2(dot(%s.rgb, vec3(0.35, 0.45, 0.2)), %s.a)", name, name);
+ else if (from == GPU_VEC3)
+ BLI_dynstr_printf(ds, "vec2(dot(%s.rgb, vec3(0.33)), 1.0)", name);
+ else if (from == GPU_FLOAT)
+ BLI_dynstr_printf(ds, "vec2(%s, 1.0)", name);
+ }
+ else if (to == GPU_VEC3) {
+ if (from == GPU_VEC4)
+ BLI_dynstr_printf(ds, "%s.rgb", name);
+ else if (from == GPU_VEC2)
+ BLI_dynstr_printf(ds, "vec3(%s.r, %s.r, %s.r)", name, name, name);
+ else if (from == GPU_FLOAT)
+ BLI_dynstr_printf(ds, "vec3(%s, %s, %s)", name, name, name);
+ }
+ else {
+ if (from == GPU_VEC3)
+ BLI_dynstr_printf(ds, "vec4(%s, 1.0)", name);
+ else if (from == GPU_VEC2)
+ BLI_dynstr_printf(ds, "vec4(%s.r, %s.r, %s.r, %s.g)", name, name, name, name);
+ else if (from == GPU_FLOAT)
+ BLI_dynstr_printf(ds, "vec4(%s, %s, %s, 1.0)", name, name, name);
+ }
+}
+
+static void codegen_print_datatype(DynStr *ds, int type, float *data)
+{
+ int i;
+
+ BLI_dynstr_printf(ds, "%s(", GPU_DATATYPE_STR[type]);
+
+ for(i=0; i<type; i++) {
+ BLI_dynstr_printf(ds, "%f", data[i]);
+ if(i == type-1)
+ BLI_dynstr_append(ds, ")");
+ else
+ BLI_dynstr_append(ds, ", ");
+ }
+}
+
+static int codegen_input_has_texture(GPUInput *input)
+{
+ if (input->link)
+ return 0;
+ else if(input->ima)
+ return 1;
+ else
+ return input->tex != 0;
+}
+
+char *GPU_builtin_name(GPUBuiltin builtin)
+{
+ if(builtin == GPU_VIEW_MATRIX)
+ return "unfviewmat";
+ else if(builtin == GPU_OBJECT_MATRIX)
+ return "unfobmat";
+ else if(builtin == GPU_INVERSE_VIEW_MATRIX)
+ return "unfinvviewmat";
+ else if(builtin == GPU_INVERSE_OBJECT_MATRIX)
+ return "unfinvobmat";
+ else if(builtin == GPU_VIEW_POSITION)
+ return "varposition";
+ else if(builtin == GPU_VIEW_NORMAL)
+ return "varnormal";
+ else if(builtin == GPU_OBCOLOR)
+ return "unfobcolor";
+ else
+ return "";
+}
+
+static void codegen_set_unique_ids(ListBase *nodes)
+{
+ GHash *bindhash, *definehash;
+ GPUNode *node;
+ GPUInput *input;
+ GPUOutput *output;
+ int id = 1, texid = 0;
+
+ bindhash= BLI_ghash_new(BLI_ghashutil_ptrhash, BLI_ghashutil_ptrcmp);
+ definehash= BLI_ghash_new(BLI_ghashutil_ptrhash, BLI_ghashutil_ptrcmp);
+
+ for (node=nodes->first; node; node=node->next) {
+ for (input=node->inputs.first; input; input=input->next) {
+ /* set id for unique names of uniform variables */
+ input->id = id++;
+ input->bindtex = 0;
+ input->definetex = 0;
+
+ /* set texid used for settings texture slot with multitexture */
+ if (codegen_input_has_texture(input) &&
+ ((input->source == GPU_SOURCE_TEX) || (input->source == GPU_SOURCE_TEX_PIXEL))) {
+ if (input->link) {
+ /* input is texture from buffer, assign only one texid per
+ buffer to avoid sampling the same texture twice */
+ if (!BLI_ghash_haskey(bindhash, input->link)) {
+ input->texid = texid++;
+ input->bindtex = 1;
+ BLI_ghash_insert(bindhash, input->link, SET_INT_IN_POINTER(input->texid));
+ }
+ else
+ input->texid = GET_INT_FROM_POINTER(BLI_ghash_lookup(bindhash, input->link));
+ }
+ else if(input->ima) {
+ /* input is texture from image, assign only one texid per
+ buffer to avoid sampling the same texture twice */
+ if (!BLI_ghash_haskey(bindhash, input->ima)) {
+ input->texid = texid++;
+ input->bindtex = 1;
+ BLI_ghash_insert(bindhash, input->ima, SET_INT_IN_POINTER(input->texid));
+ }
+ else
+ input->texid = GET_INT_FROM_POINTER(BLI_ghash_lookup(bindhash, input->ima));
+ }
+ else {
+ /* input is user created texture, we know there there is
+ only one, so assign new texid */
+ input->bindtex = 1;
+ input->texid = texid++;
+ }
+
+ /* make sure this pixel is defined exactly once */
+ if (input->source == GPU_SOURCE_TEX_PIXEL) {
+ if(input->ima) {
+ if (!BLI_ghash_haskey(definehash, input->ima)) {
+ input->definetex = 1;
+ BLI_ghash_insert(definehash, input->ima, SET_INT_IN_POINTER(input->texid));
+ }
+ }
+ else {
+ if (!BLI_ghash_haskey(definehash, input->link)) {
+ input->definetex = 1;
+ BLI_ghash_insert(definehash, input->link, SET_INT_IN_POINTER(input->texid));
+ }
+ }
+ }
+ }
+ }
+
+ for (output=node->outputs.first; output; output=output->next)
+ /* set id for unique names of tmp variables storing output */
+ output->id = id++;
+ }
+
+ BLI_ghash_free(bindhash, NULL, NULL);
+ BLI_ghash_free(definehash, NULL, NULL);
+}
+
+static void codegen_print_uniforms_functions(DynStr *ds, ListBase *nodes)
+{
+ GPUNode *node;
+ GPUInput *input;
+ char *name;
+ int builtins = 0;
+
+ /* print uniforms */
+ for (node=nodes->first; node; node=node->next) {
+ for (input=node->inputs.first; input; input=input->next) {
+ if ((input->source == GPU_SOURCE_TEX) || (input->source == GPU_SOURCE_TEX_PIXEL)) {
+ /* create exactly one sampler for each texture */
+ if (codegen_input_has_texture(input) && input->bindtex)
+ BLI_dynstr_printf(ds, "uniform %s samp%d;\n",
+ (input->textype == GPU_TEX1D)? "sampler1D":
+ (input->textype == GPU_TEX2D)? "sampler2D": "sampler2DShadow",
+ input->texid);
+ }
+ else if(input->source == GPU_SOURCE_BUILTIN) {
+ /* only define each builting uniform/varying once */
+ if(!(builtins & input->builtin)) {
+ builtins |= input->builtin;
+ name = GPU_builtin_name(input->builtin);
+
+ if(gpu_str_prefix(name, "unf")) {
+ BLI_dynstr_printf(ds, "uniform %s %s;\n",
+ GPU_DATATYPE_STR[input->type], name);
+ }
+ else {
+ BLI_dynstr_printf(ds, "varying %s %s;\n",
+ GPU_DATATYPE_STR[input->type], name);
+ }
+ }
+ }
+ else if (input->source == GPU_SOURCE_VEC_UNIFORM) {
+ if(input->dynamicvec) {
+ /* only create uniforms for dynamic vectors */
+ BLI_dynstr_printf(ds, "uniform %s unf%d;\n",
+ GPU_DATATYPE_STR[input->type], input->id);
+ }
+ else {
+ /* for others use const so the compiler can do folding */
+ BLI_dynstr_printf(ds, "const %s cons%d = ",
+ GPU_DATATYPE_STR[input->type], input->id);
+ codegen_print_datatype(ds, input->type, input->vec);
+ BLI_dynstr_append(ds, ";\n");
+ }
+ }
+ else if (input->source == GPU_SOURCE_ATTRIB && input->attribfirst) {
+ BLI_dynstr_printf(ds, "varying %s var%d;\n",
+ GPU_DATATYPE_STR[input->type], input->attribid);
+ }
+ }
+ }
+
+ BLI_dynstr_append(ds, "\n");
+}
+
+static void codegen_declare_tmps(DynStr *ds, ListBase *nodes)
+{
+ GPUNode *node;
+ GPUInput *input;
+ GPUOutput *output;
+
+ for (node=nodes->first; node; node=node->next) {
+ /* load pixels from textures */
+ for (input=node->inputs.first; input; input=input->next) {
+ if (input->source == GPU_SOURCE_TEX_PIXEL) {
+ if (codegen_input_has_texture(input) && input->definetex) {
+ BLI_dynstr_printf(ds, "\tvec4 tex%d = texture2D(", input->texid);
+ BLI_dynstr_printf(ds, "samp%d, gl_TexCoord[%d].st);\n",
+ input->texid, input->texid);
+ }
+ }
+ }
+
+ /* declare temporary variables for node output storage */
+ for (output=node->outputs.first; output; output=output->next)
+ BLI_dynstr_printf(ds, "\t%s tmp%d;\n",
+ GPU_DATATYPE_STR[output->type], output->id);
+ }
+
+ BLI_dynstr_append(ds, "\n");
+}
+
+static void codegen_call_functions(DynStr *ds, ListBase *nodes, GPUOutput *finaloutput)
+{
+ GPUNode *node;
+ GPUInput *input;
+ GPUOutput *output;
+
+ for (node=nodes->first; node; node=node->next) {
+ BLI_dynstr_printf(ds, "\t%s(", node->name);
+
+ for (input=node->inputs.first; input; input=input->next) {
+ if (input->source == GPU_SOURCE_TEX) {
+ BLI_dynstr_printf(ds, "samp%d", input->texid);
+ if (input->link)
+ BLI_dynstr_printf(ds, ", gl_TexCoord[%d].st", input->texid);
+ }
+ else if (input->source == GPU_SOURCE_TEX_PIXEL) {
+ if (input->link && input->link->output)
+ codegen_convert_datatype(ds, input->link->output->type, input->type,
+ "tmp", input->link->output->id);
+ else
+ codegen_convert_datatype(ds, input->link->output->type, input->type,
+ "tex", input->texid);
+ }
+ else if(input->source == GPU_SOURCE_BUILTIN)
+ BLI_dynstr_printf(ds, "%s", GPU_builtin_name(input->builtin));
+ else if(input->source == GPU_SOURCE_VEC_UNIFORM) {
+ if(input->dynamicvec)
+ BLI_dynstr_printf(ds, "unf%d", input->id);
+ else
+ BLI_dynstr_printf(ds, "cons%d", input->id);
+ }
+ else if (input->source == GPU_SOURCE_ATTRIB)
+ BLI_dynstr_printf(ds, "var%d", input->attribid);
+
+ BLI_dynstr_append(ds, ", ");
+ }
+
+ for (output=node->outputs.first; output; output=output->next) {
+ BLI_dynstr_printf(ds, "tmp%d", output->id);
+ if (output->next)
+ BLI_dynstr_append(ds, ", ");
+ }
+
+ BLI_dynstr_append(ds, ");\n");
+ }
+
+ BLI_dynstr_append(ds, "\n\tgl_FragColor = ");
+ codegen_convert_datatype(ds, finaloutput->type, GPU_VEC4, "tmp", finaloutput->id);
+ BLI_dynstr_append(ds, ";\n");
+}
+
+static char *code_generate_fragment(ListBase *nodes, GPUOutput *output, const char *name)
+{
+ DynStr *ds = BLI_dynstr_new();
+ char *code;
+
+ /*BLI_dynstr_append(ds, FUNCTION_PROTOTYPES);*/
+
+ codegen_set_unique_ids(nodes);
+ codegen_print_uniforms_functions(ds, nodes);
+
+ //if(G.f & G_DEBUG)
+ // BLI_dynstr_printf(ds, "/* %s */\n", name);
+
+ BLI_dynstr_append(ds, "void main(void)\n");
+ BLI_dynstr_append(ds, "{\n");
+
+ codegen_declare_tmps(ds, nodes);
+ codegen_call_functions(ds, nodes, output);
+
+ BLI_dynstr_append(ds, "}\n");
+
+ /* create shader */
+ code = BLI_dynstr_get_cstring(ds);
+ BLI_dynstr_free(ds);
+
+ //if(G.f & G_DEBUG) printf("%s\n", code);
+
+ return code;
+}
+
+static char *code_generate_vertex(ListBase *nodes)
+{
+ DynStr *ds = BLI_dynstr_new();
+ GPUNode *node;
+ GPUInput *input;
+ char *code;
+
+ for (node=nodes->first; node; node=node->next) {
+ for (input=node->inputs.first; input; input=input->next) {
+ if (input->source == GPU_SOURCE_ATTRIB && input->attribfirst) {
+ BLI_dynstr_printf(ds, "attribute %s att%d;\n",
+ GPU_DATATYPE_STR[input->type], input->attribid);
+ BLI_dynstr_printf(ds, "varying %s var%d;\n",
+ GPU_DATATYPE_STR[input->type], input->attribid);
+ }
+ }
+ }
+
+ BLI_dynstr_append(ds, "\n");
+ BLI_dynstr_append(ds, datatoc_gpu_shader_vertex_glsl);
+
+ for (node=nodes->first; node; node=node->next)
+ for (input=node->inputs.first; input; input=input->next)
+ if (input->source == GPU_SOURCE_ATTRIB && input->attribfirst) {
+ if(input->attribtype == CD_TANGENT) /* silly exception */
+ BLI_dynstr_printf(ds, "\tvar%d = gl_NormalMatrix * ", input->attribid);
+ else
+ BLI_dynstr_printf(ds, "\tvar%d = ", input->attribid);
+
+ BLI_dynstr_printf(ds, "att%d;\n", input->attribid);
+ }
+
+ BLI_dynstr_append(ds, "}\n\n");
+
+ code = BLI_dynstr_get_cstring(ds);
+
+ BLI_dynstr_free(ds);
+
+ //if(G.f & G_DEBUG) printf("%s\n", code);
+
+ return code;
+}
+
+/* GPU pass binding/unbinding */
+
+GPUShader *GPU_pass_shader(GPUPass *pass)
+{
+ return pass->shader;
+}
+
+void GPU_nodes_extract_dynamic_inputs(GPUPass *pass, ListBase *nodes)
+{
+ GPUShader *shader = pass->shader;
+ GPUNode *node;
+ GPUInput *next, *input;
+ ListBase *inputs = &pass->inputs;
+ int extract, z;
+
+ memset(inputs, 0, sizeof(*inputs));
+
+ if(!shader)
+ return;
+
+ GPU_shader_bind(shader);
+
+ for (node=nodes->first; node; node=node->next) {
+ z = 0;
+ for (input=node->inputs.first; input; input=next, z++) {
+ next = input->next;
+
+ /* attributes don't need to be bound, they already have
+ * an id that the drawing functions will use */
+ if(input->source == GPU_SOURCE_ATTRIB ||
+ input->source == GPU_SOURCE_BUILTIN)
+ continue;
+
+ if (input->ima || input->tex)
+ snprintf(input->shadername, sizeof(input->shadername), "samp%d", input->texid);
+ else
+ snprintf(input->shadername, sizeof(input->shadername), "unf%d", input->id);
+
+ /* pass non-dynamic uniforms to opengl */
+ extract = 0;
+
+ if(input->ima || input->tex) {
+ if (input->bindtex)
+ extract = 1;
+ }
+ else if(input->dynamicvec)
+ extract = 1;
+
+ if(extract)
+ input->shaderloc = GPU_shader_get_uniform(shader, input->shadername);
+
+ /* extract nodes */
+ if(extract) {
+ BLI_remlink(&node->inputs, input);
+ BLI_addtail(inputs, input);
+ }
+ }
+ }
+
+ GPU_shader_unbind(shader);
+}
+
+void GPU_pass_bind(GPUPass *pass, double time)
+{
+ GPUInput *input;
+ GPUShader *shader = pass->shader;
+ ListBase *inputs = &pass->inputs;
+
+ if (!shader)
+ return;
+
+ GPU_shader_bind(shader);
+
+ /* now bind the textures */
+ for (input=inputs->first; input; input=input->next) {
+ if (input->ima)
+ input->tex = GPU_texture_from_blender(input->ima, input->iuser, time);
+
+ if(input->ima || input->tex) {
+ if(input->tex) {
+ GPU_texture_bind(input->tex, input->texid);
+ GPU_shader_uniform_texture(shader, input->shaderloc, input->tex);
+ }
+ }
+ }
+}
+
+void GPU_pass_update_uniforms(GPUPass *pass)
+{
+ GPUInput *input;
+ GPUShader *shader = pass->shader;
+ ListBase *inputs = &pass->inputs;
+
+ if (!shader)
+ return;
+
+ /* pass dynamic inputs to opengl, others were removed */
+ for (input=inputs->first; input; input=input->next)
+ if(!(input->ima || input->tex))
+ GPU_shader_uniform_vector(shader, input->shaderloc, input->type, 1,
+ input->dynamicvec);
+}
+
+void GPU_pass_unbind(GPUPass *pass)
+{
+ GPUInput *input;
+ GPUShader *shader = pass->shader;
+ ListBase *inputs = &pass->inputs;
+
+ if (!shader)
+ return;
+
+ for (input=inputs->first; input; input=input->next) {
+ if (input->tex)
+ if(input->bindtex)
+ GPU_texture_unbind(input->tex);
+ if (input->ima)
+ input->tex = 0;
+ }
+
+ GPU_shader_unbind(shader);
+}
+
+/* Node Link Functions */
+
+GPUNodeLink *GPU_node_link_create(int type)
+{
+ GPUNodeLink *link = MEM_callocN(sizeof(GPUNodeLink), "GPUNodeLink");
+ link->type = type;
+ link->users++;
+
+ return link;
+}
+
+void GPU_node_link_free(GPUNodeLink *link)
+{
+ link->users--;
+
+ if (link->users < 0)
+ fprintf(stderr, "GPU_node_link_free: negative refcount\n");
+
+ if (link->users == 0) {
+ if (link->output)
+ link->output->link = NULL;
+ MEM_freeN(link);
+ }
+}
+
+/* Node Functions */
+
+GPUNode *GPU_node_begin(char *name)
+{
+ GPUNode *node = MEM_callocN(sizeof(GPUNode), "GPUNode");
+
+ node->name = name;
+
+ return node;
+}
+
+void GPU_node_end(GPUNode *node)
+{
+ /* empty */
+}
+
+static void gpu_node_input_link(GPUNode *node, GPUNodeLink *link, int type)
+{
+ GPUInput *input;
+ GPUNode *outnode;
+ char *name;
+
+ if(link->output) {
+ outnode = link->output->node;
+ name = outnode->name;
+
+ if(strcmp(name, "set_value")==0 || strcmp(name, "set_rgb")==0) {
+ input = MEM_dupallocN(outnode->inputs.first);
+ input->type = type;
+ if(input->link)
+ input->link->users++;
+ BLI_addtail(&node->inputs, input);
+ return;
+ }
+ }
+
+ input = MEM_callocN(sizeof(GPUInput), "GPUInput");
+ input->node = node;
+
+ if(link->builtin) {
+ /* builtin uniform */
+ input->type = type;
+ input->source = GPU_SOURCE_BUILTIN;
+ input->builtin = link->builtin;
+
+ MEM_freeN(link);
+ }
+ else if(link->output) {
+ /* link to a node output */
+ input->type = type;
+ input->source = GPU_SOURCE_TEX_PIXEL;
+ input->link = link;
+ link->users++;
+ }
+ else if(link->dynamictex) {
+ /* dynamic texture, GPUTexture is updated/deleted externally */
+ input->type = type;
+ input->source = GPU_SOURCE_TEX;
+
+ input->tex = link->dynamictex;
+ input->textarget = GL_TEXTURE_2D;
+ input->textype = type;
+ input->dynamictex = 1;
+ MEM_freeN(link);
+ }
+ else if(link->texture) {
+ /* small texture created on the fly, like for colorbands */
+ input->type = GPU_VEC4;
+ input->source = GPU_SOURCE_TEX;
+ input->textype = type;
+
+ if (type == GPU_TEX1D) {
+ input->tex = GPU_texture_create_1D(link->texturesize, link->ptr1);
+ input->textarget = GL_TEXTURE_1D;
+ }
+ else {
+ input->tex = GPU_texture_create_2D(link->texturesize, link->texturesize, link->ptr2);
+ input->textarget = GL_TEXTURE_2D;
+ }
+
+ MEM_freeN(link->ptr1);
+ MEM_freeN(link);
+ }
+ else if(link->image) {
+ /* blender image */
+ input->type = GPU_VEC4;
+ input->source = GPU_SOURCE_TEX;
+
+ input->ima = link->ptr1;
+ input->textarget = GL_TEXTURE_2D;
+ input->textype = GPU_TEX2D;
+ MEM_freeN(link);
+ }
+ else if(link->attribtype) {
+ /* vertex attribute */
+ input->type = type;
+ input->source = GPU_SOURCE_ATTRIB;
+
+ input->attribtype = link->attribtype;
+ BLI_strncpy(input->attribname, link->attribname, sizeof(input->attribname));
+ MEM_freeN(link);
+ }
+ else {
+ /* uniform vector */
+ input->type = type;
+ input->source = GPU_SOURCE_VEC_UNIFORM;
+
+ memcpy(input->vec, link->ptr1, type*sizeof(float));
+ if(link->dynamic)
+ input->dynamicvec= link->ptr1;
+ MEM_freeN(link);
+ }
+
+ BLI_addtail(&node->inputs, input);
+}
+
+static void gpu_node_input_socket(GPUNode *node, GPUNodeStack *sock)
+{
+ GPUNodeLink *link;
+
+ if(sock->link) {
+ gpu_node_input_link(node, sock->link, sock->type);
+ }
+ else {
+ link = GPU_node_link_create(0);
+ link->ptr1 = sock->vec;
+ gpu_node_input_link(node, link, sock->type);
+ }
+}
+
+void GPU_node_output(GPUNode *node, int type, char *name, GPUNodeLink **link)
+{
+ GPUOutput *output = MEM_callocN(sizeof(GPUOutput), "GPUOutput");
+
+ output->type = type;
+ output->node = node;
+
+ if (link) {
+ *link = output->link = GPU_node_link_create(type);
+ output->link->output = output;
+
+ /* note: the caller owns the reference to the linkfer, GPUOutput
+ merely points to it, and if the node is destroyed it will
+ set that pointer to NULL */
+ }
+
+ BLI_addtail(&node->outputs, output);
+}
+
+void GPU_inputs_free(ListBase *inputs)
+{
+ GPUInput *input;
+
+ for(input=inputs->first; input; input=input->next) {
+ if(input->link)
+ GPU_node_link_free(input->link);
+ else if(input->tex && !input->dynamictex)
+ GPU_texture_free(input->tex);
+ }
+
+ BLI_freelistN(inputs);
+}
+
+void GPU_node_free(GPUNode *node)
+{
+ GPUOutput *output;
+
+ GPU_inputs_free(&node->inputs);
+
+ for (output=node->outputs.first; output; output=output->next)
+ if (output->link) {
+ output->link->output = NULL;
+ GPU_node_link_free(output->link);
+ }
+
+ BLI_freelistN(&node->outputs);
+ MEM_freeN(node);
+}
+
+void GPU_nodes_free(ListBase *nodes)
+{
+ GPUNode *node;
+
+ while (nodes->first) {
+ node = nodes->first;
+ BLI_remlink(nodes, node);
+ GPU_node_free(node);
+ }
+}
+
+/* vertex attributes */
+
+void gpu_nodes_get_vertex_attributes(ListBase *nodes, GPUVertexAttribs *attribs)
+{
+ GPUNode *node;
+ GPUInput *input;
+ int a;
+
+ /* convert attributes requested by node inputs to an array of layers,
+ * checking for duplicates and assigning id's starting from zero. */
+
+ memset(attribs, 0, sizeof(*attribs));
+
+ for(node=nodes->first; node; node=node->next) {
+ for(input=node->inputs.first; input; input=input->next) {
+ if(input->source == GPU_SOURCE_ATTRIB) {
+ for(a=0; a<attribs->totlayer; a++) {
+ if(attribs->layer[a].type == input->attribtype &&
+ strcmp(attribs->layer[a].name, input->attribname) == 0)
+ break;
+ }
+
+ if(a == attribs->totlayer && a < GPU_MAX_ATTRIB) {
+ input->attribid = attribs->totlayer++;
+ input->attribfirst = 1;
+
+ attribs->layer[a].type = input->attribtype;
+ attribs->layer[a].glindex = input->attribid;
+ BLI_strncpy(attribs->layer[a].name, input->attribname,
+ sizeof(attribs->layer[a].name));
+ }
+ else
+ input->attribid = attribs->layer[a].glindex;
+ }
+ }
+ }
+}
+
+void gpu_nodes_get_builtin_flag(ListBase *nodes, int *builtin)
+{
+ GPUNode *node;
+ GPUInput *input;
+
+ *builtin= 0;
+
+ for(node=nodes->first; node; node=node->next)
+ for(input=node->inputs.first; input; input=input->next)
+ if(input->source == GPU_SOURCE_BUILTIN)
+ *builtin |= input->builtin;
+}
+
+/* varargs linking */
+
+GPUNodeLink *GPU_attribute(int type, char *name)
+{
+ GPUNodeLink *link = GPU_node_link_create(0);
+
+ link->attribtype= type;
+ link->attribname= name;
+
+ return link;
+}
+
+GPUNodeLink *GPU_uniform(float *num)
+{
+ GPUNodeLink *link = GPU_node_link_create(0);
+
+ link->ptr1= num;
+ link->ptr2= NULL;
+
+ return link;
+}
+
+GPUNodeLink *GPU_dynamic_uniform(float *num)
+{
+ GPUNodeLink *link = GPU_node_link_create(0);
+
+ link->ptr1= num;
+ link->ptr2= NULL;
+ link->dynamic= 1;
+
+ return link;
+}
+
+GPUNodeLink *GPU_image(Image *ima, ImageUser *iuser)
+{
+ GPUNodeLink *link = GPU_node_link_create(0);
+
+ link->image= 1;
+ link->ptr1= ima;
+ link->ptr2= iuser;
+
+ return link;
+}
+
+GPUNodeLink *GPU_texture(int size, float *pixels)
+{
+ GPUNodeLink *link = GPU_node_link_create(0);
+
+ link->texture = 1;
+ link->texturesize = size;
+ link->ptr1= pixels;
+
+ return link;
+}
+
+GPUNodeLink *GPU_dynamic_texture(GPUTexture *tex)
+{
+ GPUNodeLink *link = GPU_node_link_create(0);
+
+ link->dynamic = 1;
+ link->dynamictex = tex;
+
+ return link;
+}
+
+GPUNodeLink *GPU_socket(GPUNodeStack *sock)
+{
+ GPUNodeLink *link = GPU_node_link_create(0);
+
+ link->socket= sock;
+
+ return link;
+}
+
+GPUNodeLink *GPU_builtin(GPUBuiltin builtin)
+{
+ GPUNodeLink *link = GPU_node_link_create(0);
+
+ link->builtin= builtin;
+
+ return link;
+}
+
+int GPU_link(GPUMaterial *mat, char *name, ...)
+{
+ GPUNode *node;
+ GPUFunction *function;
+ GPUNodeLink *link, **linkptr;
+ va_list params;
+ int i;
+
+ function = GPU_lookup_function(name);
+ if(!function) {
+ fprintf(stderr, "GPU failed to find function %s\n", name);
+ return 0;
+ }
+
+ node = GPU_node_begin(name);
+
+ va_start(params, name);
+ for(i=0; i<function->totparam; i++) {
+ if(function->paramqual[i] != FUNCTION_QUAL_IN) {
+ linkptr= va_arg(params, GPUNodeLink**);
+ GPU_node_output(node, function->paramtype[i], "", linkptr);
+ }
+ else {
+ link= va_arg(params, GPUNodeLink*);
+ gpu_node_input_link(node, link, function->paramtype[i]);
+ }
+ }
+ va_end(params);
+
+ GPU_node_end(node);
+
+ gpu_material_add_node(mat, node);
+
+ return 1;
+}
+
+int GPU_stack_link(GPUMaterial *mat, char *name, GPUNodeStack *in, GPUNodeStack *out, ...)
+{
+ GPUNode *node;
+ GPUFunction *function;
+ GPUNodeLink *link, **linkptr;
+ va_list params;
+ int i, totin, totout;
+
+ function = GPU_lookup_function(name);
+ if(!function) {
+ fprintf(stderr, "GPU failed to find function %s\n", name);
+ return 0;
+ }
+
+ node = GPU_node_begin(name);
+ totin = 0;
+ totout = 0;
+
+ if(in) {
+ for(i = 0; in[i].type != GPU_NONE; i++) {
+ gpu_node_input_socket(node, &in[i]);
+ totin++;
+ }
+ }
+
+ if(out) {
+ for(i = 0; out[i].type != GPU_NONE; i++) {
+ GPU_node_output(node, out[i].type, out[i].name, &out[i].link);
+ totout++;
+ }
+ }
+
+ va_start(params, out);
+ for(i=0; i<function->totparam; i++) {
+ if(function->paramqual[i] != FUNCTION_QUAL_IN) {
+ if(totout == 0) {
+ linkptr= va_arg(params, GPUNodeLink**);
+ GPU_node_output(node, function->paramtype[i], "", linkptr);
+ }
+ else
+ totout--;
+ }
+ else {
+ if(totin == 0) {
+ link= va_arg(params, GPUNodeLink*);
+ if(link->socket)
+ gpu_node_input_socket(node, link->socket);
+ else
+ gpu_node_input_link(node, link, function->paramtype[i]);
+ }
+ else
+ totin--;
+ }
+ }
+ va_end(params);
+
+ GPU_node_end(node);
+
+ gpu_material_add_node(mat, node);
+
+ return 1;
+}
+
+int GPU_link_changed(GPUNodeLink *link)
+{
+ GPUNode *node;
+ GPUInput *input;
+ char *name;
+
+ if(link->output) {
+ node = link->output->node;
+ name = node->name;
+
+ if(strcmp(name, "set_value")==0 || strcmp(name, "set_rgb")==0) {
+ input = node->inputs.first;
+ return (input->link != NULL);
+ }
+
+ return 1;
+ }
+ else
+ return 0;
+}
+
+/* Pass create/free */
+
+void gpu_nodes_tag(GPUNodeLink *link)
+{
+ GPUNode *node;
+ GPUInput *input;
+
+ if(!link->output)
+ return;
+
+ node = link->output->node;
+ if(node->tag)
+ return;
+
+ node->tag= 1;
+ for(input=node->inputs.first; input; input=input->next)
+ if(input->link)
+ gpu_nodes_tag(input->link);
+}
+
+void gpu_nodes_prune(ListBase *nodes, GPUNodeLink *outlink)
+{
+ GPUNode *node, *next;
+
+ for(node=nodes->first; node; node=node->next)
+ node->tag= 0;
+
+ gpu_nodes_tag(outlink);
+
+ for(node=nodes->first; node; node=next) {
+ next = node->next;
+
+ if(!node->tag) {
+ BLI_remlink(nodes, node);
+ GPU_node_free(node);
+ }
+ }
+}
+
+GPUPass *GPU_generate_pass(ListBase *nodes, GPUNodeLink *outlink, GPUVertexAttribs *attribs, int *builtins, const char *name)
+{
+ GPUShader *shader;
+ GPUPass *pass;
+ char *vertexcode, *fragmentcode;
+
+ /*if(!FUNCTION_LIB) {
+ GPU_nodes_free(nodes);
+ return NULL;
+ }*/
+
+ /* prune unused nodes */
+ gpu_nodes_prune(nodes, outlink);
+
+ gpu_nodes_get_vertex_attributes(nodes, attribs);
+ gpu_nodes_get_builtin_flag(nodes, builtins);
+
+ /* generate code and compile with opengl */
+ fragmentcode = code_generate_fragment(nodes, outlink->output, name);
+ vertexcode = code_generate_vertex(nodes);
+ shader = GPU_shader_create(vertexcode, fragmentcode, datatoc_gpu_shader_material_glsl); /*FUNCTION_LIB);*/
+ MEM_freeN(fragmentcode);
+ MEM_freeN(vertexcode);
+
+ /* failed? */
+ if (!shader) {
+ memset(attribs, 0, sizeof(*attribs));
+ memset(builtins, 0, sizeof(*builtins));
+ GPU_nodes_free(nodes);
+ return NULL;
+ }
+
+ /* create pass */
+ pass = MEM_callocN(sizeof(GPUPass), "GPUPass");
+
+ pass->output = outlink->output;
+ pass->shader = shader;
+
+ /* extract dynamic inputs and throw away nodes */
+ GPU_nodes_extract_dynamic_inputs(pass, nodes);
+ GPU_nodes_free(nodes);
+
+ return pass;
+}
+
+void GPU_pass_free(GPUPass *pass)
+{
+ GPU_shader_free(pass->shader);
+ GPU_inputs_free(&pass->inputs);
+ MEM_freeN(pass);
+}
+
diff --git a/source/blender/gpu/intern/gpu_codegen.h b/source/blender/gpu/intern/gpu_codegen.h
new file mode 100644
index 00000000000..53b52f24f16
--- /dev/null
+++ b/source/blender/gpu/intern/gpu_codegen.h
@@ -0,0 +1,87 @@
+/**
+ * $Id$
+ *
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version. The Blender
+ * Foundation also sells licenses for use in proprietary software under
+ * the Blender License. See http://www.blender.org/BL/ for information
+ * about this.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * The Original Code is Copyright (C) 2005 Blender Foundation.
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): Brecht Van Lommel.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+#ifndef __GPU_CODEGEN_H__
+#define __GPU_CODEGEN_H__
+
+#include "DNA_listBase.h"
+
+struct ListBase;
+struct GPUShader;
+struct GPUOutput;
+struct GPUNode;
+struct GPUVertexAttribs;
+
+#define MAX_FUNCTION_NAME 64
+#define MAX_PARAMETER 32
+
+#define FUNCTION_QUAL_IN 0
+#define FUNCTION_QUAL_OUT 1
+#define FUNCTION_QUAL_INOUT 2
+
+typedef struct GPUFunction {
+ char name[MAX_FUNCTION_NAME];
+ int paramtype[MAX_PARAMETER];
+ int paramqual[MAX_PARAMETER];
+ int totparam;
+} GPUFunction;
+
+GPUFunction *GPU_lookup_function(char *name);
+
+/* Pass Generation
+ - Takes a list of nodes and a desired output, and makes a pass. This
+ will take ownership of the nodes and free them early if unused or
+ at the end if used.
+*/
+
+struct GPUPass;
+typedef struct GPUPass GPUPass;
+
+GPUPass *GPU_generate_pass(ListBase *nodes, struct GPUNodeLink *outlink,
+ struct GPUVertexAttribs *attribs, int *builtin, const char *name);
+
+struct GPUShader *GPU_pass_shader(GPUPass *pass);
+
+void GPU_pass_bind(GPUPass *pass, double time);
+void GPU_pass_update_uniforms(GPUPass *pass);
+void GPU_pass_unbind(GPUPass *pass);
+
+void GPU_pass_free(GPUPass *pass);
+
+/* Material calls */
+
+char *GPU_builtin_name(GPUBuiltin builtin);
+void gpu_material_add_node(struct GPUMaterial *material, struct GPUNode *node);
+int GPU_link_changed(struct GPUNodeLink *link);
+
+#endif
+
diff --git a/source/blender/gpu/intern/gpu_draw.c b/source/blender/gpu/intern/gpu_draw.c
new file mode 100644
index 00000000000..700dd6dedb2
--- /dev/null
+++ b/source/blender/gpu/intern/gpu_draw.c
@@ -0,0 +1,1171 @@
+/**
+ * $Id$
+ *
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version. The Blender
+ * Foundation also sells licenses for use in proprietary software under
+ * the Blender License. See http://www.blender.org/BL/ for information
+ * about this.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * The Original Code is Copyright (C) 2005 Blender Foundation.
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): Brecht Van Lommel.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+#include <string.h>
+
+#include "GL/glew.h"
+
+#include "DNA_image_types.h"
+#include "DNA_lamp_types.h"
+#include "DNA_material_types.h"
+#include "DNA_meshdata_types.h"
+#include "DNA_node_types.h"
+#include "DNA_object_types.h"
+#include "DNA_scene_types.h"
+#include "DNA_userdef_types.h"
+#include "DNA_view3d_types.h"
+
+#include "MEM_guardedalloc.h"
+
+#include "IMB_imbuf.h"
+#include "IMB_imbuf_types.h"
+
+#include "BKE_bmfont.h"
+#include "BKE_global.h"
+#include "BKE_image.h"
+#include "BKE_main.h"
+#include "BKE_material.h"
+#include "BKE_node.h"
+#include "BKE_object.h"
+#include "BKE_utildefines.h"
+
+#include "GPU_extensions.h"
+#include "GPU_material.h"
+#include "GPU_draw.h"
+
+/* These are some obscure rendering functions shared between the
+ * game engine and the blender, in this module to avoid duplicaten
+ * and abstract them away from the rest a bit */
+
+/* Text Rendering */
+
+static void gpu_mcol(unsigned int ucol)
+{
+ /* mcol order is swapped */
+ char *cp= (char *)&ucol;
+ glColor3ub(cp[3], cp[2], cp[1]);
+}
+
+void GPU_render_text(MTFace *tface, int mode,
+ const char *textstr, int textlen, unsigned int *col,
+ float *v1, float *v2, float *v3, float *v4, int glattrib)
+{
+ if (mode & TF_BMFONT) {
+ Image* ima;
+ int characters, index, character;
+ float centerx, centery, sizex, sizey, transx, transy, movex, movey, advance;
+
+ characters = textlen;
+
+ ima = (Image*)tface->tpage;
+ if (ima == NULL)
+ characters = 0;
+
+ // color has been set
+ if (tface->mode & TF_OBCOL)
+ col= NULL;
+ else if (!col)
+ glColor3f(1.0f, 1.0f, 1.0f);
+
+ glPushMatrix();
+ for (index = 0; index < characters; index++) {
+ float uv[4][2];
+
+ // lets calculate offset stuff
+ character = textstr[index];
+
+ // space starts at offset 1
+ // character = character - ' ' + 1;
+ matrixGlyph((ImBuf *)ima->ibufs.first, character, & centerx, &centery,
+ &sizex, &sizey, &transx, &transy, &movex, &movey, &advance);
+
+ uv[0][0] = (tface->uv[0][0] - centerx) * sizex + transx;
+ uv[0][1] = (tface->uv[0][1] - centery) * sizey + transy;
+ uv[1][0] = (tface->uv[1][0] - centerx) * sizex + transx;
+ uv[1][1] = (tface->uv[1][1] - centery) * sizey + transy;
+ uv[2][0] = (tface->uv[2][0] - centerx) * sizex + transx;
+ uv[2][1] = (tface->uv[2][1] - centery) * sizey + transy;
+
+ glBegin(GL_POLYGON);
+ if(glattrib >= 0) glVertexAttrib2fvARB(glattrib, uv[0]);
+ else glTexCoord2fv(uv[0]);
+ if(col) gpu_mcol(col[0]);
+ glVertex3f(sizex * v1[0] + movex, sizey * v1[1] + movey, v1[2]);
+
+ if(glattrib >= 0) glVertexAttrib2fvARB(glattrib, uv[1]);
+ else glTexCoord2fv(uv[1]);
+ if(col) gpu_mcol(col[1]);
+ glVertex3f(sizex * v2[0] + movex, sizey * v2[1] + movey, v2[2]);
+
+ if(glattrib >= 0) glVertexAttrib2fvARB(glattrib, uv[2]);
+ else glTexCoord2fv(uv[2]);
+ if(col) gpu_mcol(col[2]);
+ glVertex3f(sizex * v3[0] + movex, sizey * v3[1] + movey, v3[2]);
+
+ if(v4) {
+ uv[3][0] = (tface->uv[3][0] - centerx) * sizex + transx;
+ uv[3][1] = (tface->uv[3][1] - centery) * sizey + transy;
+
+ if(glattrib >= 0) glVertexAttrib2fvARB(glattrib, uv[3]);
+ else glTexCoord2fv(uv[3]);
+ if(col) gpu_mcol(col[3]);
+ glVertex3f(sizex * v4[0] + movex, sizey * v4[1] + movey, v4[2]);
+ }
+ glEnd();
+
+ glTranslatef(advance, 0.0, 0.0);
+ }
+ glPopMatrix();
+ }
+}
+
+/* Checking powers of two for images since opengl 1.x requires it */
+
+static int is_pow2(int num)
+{
+ /* (n&(n-1)) zeros the least significant bit of n */
+ return ((num)&(num-1))==0;
+}
+
+static int smaller_pow2(int num)
+{
+ while (!is_pow2(num))
+ num= num&(num-1);
+
+ return num;
+}
+
+static int is_pow2_limit(int num)
+{
+ /* take texture clamping into account */
+ if (U.glreslimit != 0 && num > U.glreslimit)
+ return 0;
+
+ return ((num)&(num-1))==0;
+}
+
+static int smaller_pow2_limit(int num)
+{
+ /* take texture clamping into account */
+ if (U.glreslimit != 0 && num > U.glreslimit)
+ return U.glreslimit;
+
+ return smaller_pow2(num);
+}
+
+/* Current OpenGL state caching for GPU_set_tpage */
+
+static struct GPUTextureState {
+ int curtile, tile;
+ int curtilemode, tilemode;
+ int curtileXRep, tileXRep;
+ int curtileYRep, tileYRep;
+ Image *ima, *curima;
+
+ int domipmap, linearmipmap;
+
+ int alphamode;
+ MTFace *lasttface;
+} GTS = {0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, 1, 0, -1, NULL};
+
+/* Mipmap settings */
+
+void GPU_set_mipmap(int mipmap)
+{
+ if (GTS.domipmap != (mipmap != 0)) {
+ GPU_free_images();
+ GTS.domipmap = mipmap != 0;
+ }
+}
+
+void GPU_set_linear_mipmap(int linear)
+{
+ if (GTS.linearmipmap != (linear != 0)) {
+ GPU_free_images();
+ GTS.linearmipmap = linear != 0;
+ }
+}
+
+static int gpu_get_mipmap(void)
+{
+ return GTS.domipmap && (!(G.f & G_TEXTUREPAINT));
+}
+
+static GLenum gpu_get_mipmap_filter()
+{
+ /* linearmipmap is off by default
+ * when mipmapping is off, use unfiltered display */
+ return GTS.linearmipmap? GL_LINEAR_MIPMAP_LINEAR :
+ (GTS.domipmap ? GL_LINEAR_MIPMAP_NEAREST : GL_NEAREST);
+}
+
+/* Set OpenGL state for an MTFace */
+
+static void gpu_make_repbind(Image *ima)
+{
+ ImBuf *ibuf;
+
+ ibuf = BKE_image_get_ibuf(ima, NULL);
+ if(ibuf==NULL)
+ return;
+
+ if(ima->repbind) {
+ glDeleteTextures(ima->totbind, (GLuint *)ima->repbind);
+ MEM_freeN(ima->repbind);
+ ima->repbind= 0;
+ ima->tpageflag &= ~IMA_MIPMAP_COMPLETE;
+ }
+
+ ima->totbind= ima->xrep*ima->yrep;
+
+ if(ima->totbind>1)
+ ima->repbind= MEM_callocN(sizeof(int)*ima->totbind, "repbind");
+}
+
+static void gpu_clear_tpage()
+{
+ if(GTS.lasttface==0)
+ return;
+
+ GTS.lasttface= 0;
+ GTS.curtile= 0;
+ GTS.curima= 0;
+ if(GTS.curtilemode!=0) {
+ glMatrixMode(GL_TEXTURE);
+ glLoadIdentity();
+ glMatrixMode(GL_MODELVIEW);
+ }
+ GTS.curtilemode= 0;
+ GTS.curtileXRep=0;
+ GTS.curtileYRep=0;
+ GTS.alphamode= -1;
+
+ glDisable(GL_BLEND);
+ glDisable(GL_TEXTURE_2D);
+ glDisable(GL_TEXTURE_GEN_S);
+ glDisable(GL_TEXTURE_GEN_T);
+ glDisable(GL_ALPHA_TEST);
+}
+
+static void gpu_set_blend_mode(GPUBlendMode blendmode)
+{
+ if(blendmode == GPU_BLEND_SOLID) {
+ glDisable(GL_BLEND);
+ glDisable(GL_ALPHA_TEST);
+ glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+ }
+ else if(blendmode==GPU_BLEND_ADD) {
+ glEnable(GL_BLEND);
+ glBlendFunc(GL_ONE, GL_ONE);
+ glDisable(GL_ALPHA_TEST);
+ }
+ else if(blendmode==GPU_BLEND_ALPHA) {
+ glEnable(GL_BLEND);
+ glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+
+ /* if U.glalphaclip == 1.0, some cards go bonkers...
+ * turn off alpha test in this case */
+
+ /* added after 2.45 to clip alpha */
+ if(U.glalphaclip == 1.0) {
+ glDisable(GL_ALPHA_TEST);
+ }
+ else {
+ glEnable(GL_ALPHA_TEST);
+ glAlphaFunc(GL_GREATER, U.glalphaclip);
+ }
+ }
+ else if(blendmode==GPU_BLEND_CLIP) {
+ glDisable(GL_BLEND);
+ glEnable(GL_ALPHA_TEST);
+ glAlphaFunc(GL_GREATER, 0.5f);
+ }
+}
+
+static void gpu_verify_alpha_mode(MTFace *tface)
+{
+ /* verify alpha blending modes */
+ if(GTS.alphamode == tface->transp)
+ return;
+
+ gpu_set_blend_mode(tface->transp);
+ GTS.alphamode= tface->transp;
+}
+
+static void gpu_verify_reflection(Image *ima)
+{
+ if (ima && (ima->flag & IMA_REFLECT)) {
+ /* enable reflection mapping */
+ glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP);
+ glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP);
+
+ glEnable(GL_TEXTURE_GEN_S);
+ glEnable(GL_TEXTURE_GEN_T);
+ }
+ else {
+ /* disable reflection mapping */
+ glDisable(GL_TEXTURE_GEN_S);
+ glDisable(GL_TEXTURE_GEN_T);
+ }
+}
+
+int GPU_verify_image(Image *ima, int tftile, int tfmode, int compare)
+{
+ ImBuf *ibuf = NULL;
+ unsigned int *bind = NULL;
+ int rectw, recth, tpx=0, tpy=0, y;
+ unsigned int *rectrow, *tilerectrow;
+ unsigned int *tilerect= NULL, *scalerect= NULL, *rect= NULL;
+ short texwindx, texwindy, texwinsx, texwinsy;
+
+ /* initialize tile mode and number of repeats */
+ GTS.ima = ima;
+ GTS.tilemode= (tfmode & TF_TILES) || (ima && (ima->tpageflag & IMA_TWINANIM));
+ GTS.tileXRep = 0;
+ GTS.tileYRep = 0;
+
+ /* setting current tile according to frame */
+ if(ima && (ima->tpageflag & IMA_TWINANIM))
+ GTS.tile= ima->lastframe;
+ else
+ GTS.tile= tftile;
+
+ if(ima) {
+ GTS.tileXRep = ima->xrep;
+ GTS.tileYRep = ima->yrep;
+ }
+
+ /* if same image & tile, we're done */
+ if(compare && ima == GTS.curima && GTS.curtile == GTS.tile &&
+ GTS.tilemode == GTS.curtilemode && GTS.curtileXRep == GTS.tileXRep &&
+ GTS.curtileYRep == GTS.tileYRep)
+ return (ima!=0);
+
+ /* if tiling mode or repeat changed, change texture matrix to fit */
+ if(GTS.tilemode!=GTS.curtilemode || GTS.curtileXRep!=GTS.tileXRep ||
+ GTS.curtileYRep != GTS.tileYRep) {
+
+ glMatrixMode(GL_TEXTURE);
+ glLoadIdentity();
+
+ if((tfmode & TF_TILES) && ima!=NULL)
+ glScalef(ima->xrep, ima->yrep, 1.0);
+
+ glMatrixMode(GL_MODELVIEW);
+ }
+
+ /* check if we have a valid image */
+ if(ima==NULL || ima->ok==0)
+ return 0;
+
+ /* check if we have a valid image buffer */
+ ibuf= BKE_image_get_ibuf(ima, NULL);
+
+ if(ibuf==NULL)
+ return 0;
+
+ /* ensure we have a char buffer and not only float */
+ if ((ibuf->rect==NULL) && ibuf->rect_float)
+ IMB_rect_from_float(ibuf);
+
+ if(GTS.tilemode) {
+ /* tiled mode */
+ if(ima->repbind==0) gpu_make_repbind(ima);
+ if(GTS.tile>=ima->totbind) GTS.tile= 0;
+
+ /* this happens when you change repeat buttons */
+ if(ima->repbind) bind= &ima->repbind[GTS.tile];
+ else bind= &ima->bindcode;
+
+ if(*bind==0) {
+
+ texwindx= ibuf->x/ima->xrep;
+ texwindy= ibuf->y/ima->yrep;
+
+ if(GTS.tile>=ima->xrep*ima->yrep)
+ GTS.tile= ima->xrep*ima->yrep-1;
+
+ texwinsy= GTS.tile / ima->xrep;
+ texwinsx= GTS.tile - texwinsy*ima->xrep;
+
+ texwinsx*= texwindx;
+ texwinsy*= texwindy;
+
+ tpx= texwindx;
+ tpy= texwindy;
+
+ rect= ibuf->rect + texwinsy*ibuf->x + texwinsx;
+ }
+ }
+ else {
+ /* regular image mode */
+ bind= &ima->bindcode;
+
+ if(*bind==0) {
+ tpx= ibuf->x;
+ tpy= ibuf->y;
+ rect= ibuf->rect;
+ }
+ }
+
+ if(*bind != 0) {
+ /* enable opengl drawing with textures */
+ glBindTexture(GL_TEXTURE_2D, *bind);
+ return *bind;
+ }
+
+ rectw = tpx;
+ recth = tpy;
+
+ /* for tiles, copy only part of image into buffer */
+ if (GTS.tilemode) {
+ tilerect= MEM_mallocN(rectw*recth*sizeof(*tilerect), "tilerect");
+
+ for (y=0; y<recth; y++) {
+ rectrow= &rect[y*ibuf->x];
+ tilerectrow= &tilerect[y*rectw];
+
+ memcpy(tilerectrow, rectrow, tpx*sizeof(*rectrow));
+ }
+
+ rect= tilerect;
+ }
+
+ /* scale if not a power of two */
+ if (!is_pow2_limit(rectw) || !is_pow2_limit(recth)) {
+ rectw= smaller_pow2_limit(rectw);
+ recth= smaller_pow2_limit(recth);
+
+ scalerect= MEM_mallocN(rectw*recth*sizeof(*scalerect), "scalerect");
+ gluScaleImage(GL_RGBA, tpx, tpy, GL_UNSIGNED_BYTE, rect, rectw, recth, GL_UNSIGNED_BYTE, scalerect);
+ rect= scalerect;
+ }
+
+ /* create image */
+ glGenTextures(1, (GLuint *)bind);
+ glBindTexture( GL_TEXTURE_2D, *bind);
+
+ if (!gpu_get_mipmap()) {
+ glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, rectw, recth, 0, GL_RGBA, GL_UNSIGNED_BYTE, rect);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, gpu_get_mipmap_filter());
+ }
+ else {
+ gluBuild2DMipmaps(GL_TEXTURE_2D, GL_RGBA, rectw, recth, GL_RGBA, GL_UNSIGNED_BYTE, rect);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, gpu_get_mipmap_filter());
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, gpu_get_mipmap_filter());
+
+ ima->tpageflag |= IMA_MIPMAP_COMPLETE;
+ }
+
+ /* set to modulate with vertex color */
+ glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
+
+ /* clean up */
+ if (tilerect)
+ MEM_freeN(tilerect);
+ if (scalerect)
+ MEM_freeN(scalerect);
+
+ return *bind;
+}
+
+static void gpu_verify_repeat(Image *ima)
+{
+ /* set either clamp or repeat in X/Y */
+ if (ima->tpageflag & IMA_CLAMP_U)
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
+ else
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
+
+ if (ima->tpageflag & IMA_CLAMP_V)
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
+ else
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
+}
+
+int GPU_set_tpage(MTFace *tface)
+{
+ Image *ima;
+
+ /* check if we need to clear the state */
+ if(tface==0) {
+ gpu_clear_tpage();
+ return 0;
+ }
+
+ ima= tface->tpage;
+ GTS.lasttface= tface;
+
+ gpu_verify_alpha_mode(tface);
+ gpu_verify_reflection(ima);
+
+ if(GPU_verify_image(ima, tface->tile, tface->mode, 1)) {
+ GTS.curtile= GTS.tile;
+ GTS.curima= GTS.ima;
+ GTS.curtilemode= GTS.tilemode;
+ GTS.curtileXRep = GTS.tileXRep;
+ GTS.curtileYRep = GTS.tileYRep;
+
+ glEnable(GL_TEXTURE_2D);
+ }
+ else {
+ glDisable(GL_TEXTURE_2D);
+
+ GTS.curtile= 0;
+ GTS.curima= 0;
+ GTS.curtilemode= 0;
+ GTS.curtileXRep = 0;
+ GTS.curtileYRep = 0;
+
+ return 0;
+ }
+
+ gpu_verify_repeat(ima);
+
+ /* Did this get lost in the image recode? */
+ /* tag_image_time(ima);*/
+
+ return 1;
+}
+
+/* these two functions are called on entering and exiting texture paint mode,
+ temporary disabling/enabling mipmapping on all images for quick texture
+ updates with glTexSubImage2D. images that didn't change don't have to be
+ re-uploaded to OpenGL */
+void GPU_paint_set_mipmap(int mipmap)
+{
+ Image* ima;
+
+ if(!GTS.domipmap)
+ return;
+
+ if(mipmap) {
+ for(ima=G.main->image.first; ima; ima=ima->id.next) {
+ if(ima->bindcode) {
+ if(ima->tpageflag & IMA_MIPMAP_COMPLETE) {
+ glBindTexture(GL_TEXTURE_2D, ima->bindcode);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, gpu_get_mipmap_filter());
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, gpu_get_mipmap_filter());
+ }
+ else
+ GPU_free_image(ima);
+ }
+ }
+
+ }
+ else {
+ for(ima=G.main->image.first; ima; ima=ima->id.next) {
+ if(ima->bindcode) {
+ glBindTexture(GL_TEXTURE_2D, ima->bindcode);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, gpu_get_mipmap_filter());
+ }
+ }
+ }
+}
+
+void GPU_paint_update_image(Image *ima, int x, int y, int w, int h)
+{
+ ImBuf *ibuf;
+
+ ibuf = BKE_image_get_ibuf(ima, NULL);
+
+ if (ima->repbind || gpu_get_mipmap() || !ima->bindcode || !ibuf ||
+ (!is_pow2(ibuf->x) || !is_pow2(ibuf->y)) ||
+ (w == 0) || (h == 0)) {
+ /* these cases require full reload still */
+ GPU_free_image(ima);
+ }
+ else {
+ /* for the special case, we can do a partial update
+ * which is much quicker for painting */
+ GLint row_length, skip_pixels, skip_rows;
+
+ glGetIntegerv(GL_UNPACK_ROW_LENGTH, &row_length);
+ glGetIntegerv(GL_UNPACK_SKIP_PIXELS, &skip_pixels);
+ glGetIntegerv(GL_UNPACK_SKIP_ROWS, &skip_rows);
+
+ if ((ibuf->rect==NULL) && ibuf->rect_float)
+ IMB_rect_from_float(ibuf);
+
+ glBindTexture(GL_TEXTURE_2D, ima->bindcode);
+
+ glPixelStorei(GL_UNPACK_ROW_LENGTH, ibuf->x);
+ glPixelStorei(GL_UNPACK_SKIP_PIXELS, x);
+ glPixelStorei(GL_UNPACK_SKIP_ROWS, y);
+
+ glTexSubImage2D(GL_TEXTURE_2D, 0, x, y, w, h, GL_RGBA,
+ GL_UNSIGNED_BYTE, ibuf->rect);
+
+ glPixelStorei(GL_UNPACK_ROW_LENGTH, row_length);
+ glPixelStorei(GL_UNPACK_SKIP_PIXELS, skip_pixels);
+ glPixelStorei(GL_UNPACK_SKIP_ROWS, skip_rows);
+
+ if(ima->tpageflag & IMA_MIPMAP_COMPLETE)
+ ima->tpageflag &= ~IMA_MIPMAP_COMPLETE;
+ }
+}
+
+void GPU_update_images_framechange(void)
+{
+ Image *ima;
+
+ for(ima=G.main->image.first; ima; ima=ima->id.next) {
+ if(ima->tpageflag & IMA_TWINANIM) {
+ if(ima->twend >= ima->xrep*ima->yrep)
+ ima->twend= ima->xrep*ima->yrep-1;
+
+ /* check: is bindcode not in the array? free. (to do) */
+
+ ima->lastframe++;
+ if(ima->lastframe > ima->twend)
+ ima->lastframe= ima->twsta;
+ }
+ }
+}
+
+int GPU_update_image_time(Image *ima, double time)
+{
+ int inc = 0;
+ float diff;
+ int newframe;
+
+ if (!ima)
+ return 0;
+
+ if (ima->lastupdate<0)
+ ima->lastupdate = 0;
+
+ if (ima->lastupdate>time)
+ ima->lastupdate=(float)time;
+
+ if(ima->tpageflag & IMA_TWINANIM) {
+ if(ima->twend >= ima->xrep*ima->yrep) ima->twend= ima->xrep*ima->yrep-1;
+
+ /* check: is the bindcode not in the array? Then free. (still to do) */
+
+ diff = (float)(time-ima->lastupdate);
+ inc = (int)(diff*(float)ima->animspeed);
+
+ ima->lastupdate+=((float)inc/(float)ima->animspeed);
+
+ newframe = ima->lastframe+inc;
+
+ if(newframe > (int)ima->twend) {
+ if(ima->twend-ima->twsta != 0)
+ newframe = (int)ima->twsta-1 + (newframe-ima->twend)%(ima->twend-ima->twsta);
+ else
+ newframe = ima->twsta;
+ }
+
+ ima->lastframe = newframe;
+ }
+
+ return inc;
+}
+
+void GPU_free_image(Image *ima)
+{
+ /* free regular image binding */
+ if(ima->bindcode) {
+ glDeleteTextures(1, (GLuint *)&ima->bindcode);
+ ima->bindcode= 0;
+ ima->tpageflag &= ~IMA_MIPMAP_COMPLETE;
+ }
+
+ /* free glsl image binding */
+ if(ima->gputexture) {
+ GPU_texture_free(ima->gputexture);
+ ima->gputexture= NULL;
+ }
+
+ /* free repeated image binding */
+ if(ima->repbind) {
+ glDeleteTextures(ima->totbind, (GLuint *)ima->repbind);
+
+ MEM_freeN(ima->repbind);
+ ima->repbind= NULL;
+ ima->tpageflag &= ~IMA_MIPMAP_COMPLETE;
+ }
+}
+
+void GPU_free_images(void)
+{
+ Image* ima;
+
+ if(G.main)
+ for(ima=G.main->image.first; ima; ima=ima->id.next)
+ GPU_free_image(ima);
+}
+
+/* OpenGL Materials */
+
+/* materials start counting at # one.... */
+#define MAXMATBUF (MAXMAT+1)
+
+/* OpenGL state caching for materials */
+
+static struct GPUMaterialState {
+ float matbuf[MAXMATBUF][2][4];
+ int totmat;
+
+ Material *gmatbuf[MAXMATBUF];
+ Material *gboundmat;
+ Object *gob;
+ Scene *gscene;
+
+ GPUBlendMode blendmode[MAXMATBUF];
+ int alphapass;
+
+ int lastmatnr, lastretval;
+ GPUBlendMode lastblendmode;
+} GMS;
+
+Material *gpu_active_node_material(Material *ma)
+{
+ if(ma && ma->use_nodes && ma->nodetree) {
+ bNode *node= nodeGetActiveID(ma->nodetree, ID_MA);
+
+ if(node)
+ return (Material *)node->id;
+ else
+ return NULL;
+ }
+
+ return ma;
+}
+
+void GPU_set_object_materials(Scene *scene, Object *ob, int glsl, int *do_alpha_pass)
+{
+ extern Material defmaterial; /* from material.c */
+ Material *ma;
+ GPUMaterial *gpumat;
+ GPUBlendMode blendmode;
+ int a;
+
+ /* initialize state */
+ memset(&GMS, 0, sizeof(GMS));
+ GMS.lastmatnr = -1;
+ GMS.lastretval = -1;
+ GMS.lastblendmode = GPU_BLEND_SOLID;
+
+ GMS.gob = ob;
+ GMS.gscene = scene;
+ GMS.totmat= ob->totcol;
+
+ GMS.alphapass = (G.vd && G.vd->transp);
+ if(do_alpha_pass)
+ *do_alpha_pass = 0;
+
+ /* no materials assigned? */
+ if(ob->totcol==0) {
+ GMS.matbuf[0][0][0]= defmaterial.r;
+ GMS.matbuf[0][0][1]= defmaterial.g;
+ GMS.matbuf[0][0][2]= defmaterial.b;
+ GMS.matbuf[0][0][3]= 1.0;
+
+ GMS.matbuf[0][1][0]= defmaterial.specr;
+ GMS.matbuf[0][1][1]= defmaterial.specg;
+ GMS.matbuf[0][1][2]= defmaterial.specb;
+ GMS.matbuf[0][1][3]= 1.0;
+
+ /* do material 1 too, for displists! */
+ QUATCOPY(GMS.matbuf[1][0], GMS.matbuf[0][0]);
+ QUATCOPY(GMS.matbuf[1][1], GMS.matbuf[0][1]);
+
+ if(glsl) {
+ GMS.gmatbuf[0]= &defmaterial;
+ GPU_material_from_blender(GMS.gscene, &defmaterial);
+ }
+
+ GMS.blendmode[0]= GPU_BLEND_SOLID;
+ }
+
+ /* setup materials */
+ for(a=1; a<=ob->totcol; a++) {
+ /* find a suitable material */
+ ma= give_current_material(ob, a);
+ if(!glsl) ma= gpu_active_node_material(ma);
+ if(ma==NULL) ma= &defmaterial;
+
+ /* this shouldn't happen .. */
+ if(a>=MAXMATBUF)
+ continue;
+
+ /* create glsl material if requested */
+ gpumat = (glsl)? GPU_material_from_blender(GMS.gscene, ma): NULL;
+
+ if(gpumat) {
+ /* do glsl only if creating it succeed, else fallback */
+ GMS.gmatbuf[a]= ma;
+ blendmode = GPU_material_blend_mode(gpumat, ob->col);
+ }
+ else {
+ /* fixed function opengl materials */
+ if (ma->mode & MA_SHLESS) {
+ GMS.matbuf[a][0][0]= ma->r;
+ GMS.matbuf[a][0][1]= ma->g;
+ GMS.matbuf[a][0][2]= ma->b;
+ } else {
+ GMS.matbuf[a][0][0]= (ma->ref+ma->emit)*ma->r;
+ GMS.matbuf[a][0][1]= (ma->ref+ma->emit)*ma->g;
+ GMS.matbuf[a][0][2]= (ma->ref+ma->emit)*ma->b;
+
+ GMS.matbuf[a][1][0]= ma->spec*ma->specr;
+ GMS.matbuf[a][1][1]= ma->spec*ma->specg;
+ GMS.matbuf[a][1][2]= ma->spec*ma->specb;
+ GMS.matbuf[a][1][3]= 1.0;
+ }
+
+ blendmode = (ma->alpha == 1.0f)? GPU_BLEND_SOLID: GPU_BLEND_ALPHA;
+ if(do_alpha_pass && GMS.alphapass)
+ GMS.matbuf[a][0][3]= ma->alpha;
+ else
+ GMS.matbuf[a][0][3]= 1.0f;
+ }
+
+ /* setting do_alpha_pass = 1 indicates this object needs to be
+ * drawn in a second alpha pass for improved blending */
+ if(do_alpha_pass) {
+ GMS.blendmode[a]= blendmode;
+ if(ELEM(blendmode, GPU_BLEND_ALPHA, GPU_BLEND_ADD) && !GMS.alphapass)
+ *do_alpha_pass= 1;
+ }
+ }
+
+ /* let's start with a clean state */
+ GPU_disable_material();
+}
+
+int GPU_enable_material(int nr, void *attribs)
+{
+ GPUVertexAttribs *gattribs = attribs;
+ GPUMaterial *gpumat;
+ GPUBlendMode blendmode;
+
+ /* prevent index to use un-initialized array items */
+ if(nr>GMS.totmat)
+ nr= GMS.totmat;
+
+ if(gattribs)
+ memset(gattribs, 0, sizeof(*gattribs));
+
+ /* keep current material */
+ if(nr>=MAXMATBUF || nr==GMS.lastmatnr)
+ return GMS.lastretval;
+
+ /* unbind glsl material */
+ if(GMS.gboundmat) {
+ if(GMS.alphapass) glDepthMask(0);
+ GPU_material_unbind(GPU_material_from_blender(GMS.gscene, GMS.gboundmat));
+ GMS.gboundmat= NULL;
+ }
+
+ /* draw materials with alpha in alpha pass */
+ GMS.lastmatnr = nr;
+ GMS.lastretval = ELEM(GMS.blendmode[nr], GPU_BLEND_SOLID, GPU_BLEND_CLIP);
+ if(GMS.alphapass)
+ GMS.lastretval = !GMS.lastretval;
+
+ if(GMS.lastretval) {
+ if(gattribs && GMS.gmatbuf[nr]) {
+ /* bind glsl material and get attributes */
+ Material *mat = GMS.gmatbuf[nr];
+
+ gpumat = GPU_material_from_blender(GMS.gscene, mat);
+ GPU_material_vertex_attributes(gpumat, gattribs);
+ GPU_material_bind(gpumat, GMS.gob->lay, G.vd->lay, 1.0);
+ GPU_material_bind_uniforms(gpumat, GMS.gob->obmat, G.vd->viewmat, G.vd->viewinv, GMS.gob->col);
+ GMS.gboundmat= mat;
+
+ if(GMS.alphapass) glDepthMask(1);
+ }
+ else {
+ /* or do fixed function opengl material */
+ glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, GMS.matbuf[nr][0]);
+ glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, GMS.matbuf[nr][1]);
+ }
+
+ /* set (alpha) blending mode */
+ blendmode = (GMS.alphapass)? GPU_BLEND_ALPHA: GPU_BLEND_SOLID;
+ GPU_set_material_blend_mode(blendmode);
+ }
+
+ return GMS.lastretval;
+}
+
+void GPU_set_material_blend_mode(int blendmode)
+{
+ if(GMS.lastblendmode == blendmode)
+ return;
+
+ gpu_set_blend_mode(blendmode);
+ GMS.lastblendmode = blendmode;
+}
+
+int GPU_get_material_blend_mode(void)
+{
+ return GMS.lastblendmode;
+}
+
+void GPU_disable_material(void)
+{
+ GMS.lastmatnr= -1;
+ GMS.lastretval= 1;
+
+ if(GMS.gboundmat) {
+ if(GMS.alphapass) glDepthMask(0);
+ GPU_material_unbind(GPU_material_from_blender(GMS.gscene, GMS.gboundmat));
+ GMS.gboundmat= NULL;
+ }
+
+ GPU_set_material_blend_mode(GPU_BLEND_SOLID);
+}
+
+/* Lights */
+
+int GPU_default_lights(void)
+{
+ int a, count = 0;
+
+ /* initialize */
+ if(U.light[0].flag==0 && U.light[1].flag==0 && U.light[2].flag==0) {
+ U.light[0].flag= 1;
+ U.light[0].vec[0]= -0.3; U.light[0].vec[1]= 0.3; U.light[0].vec[2]= 0.9;
+ U.light[0].col[0]= 0.8; U.light[0].col[1]= 0.8; U.light[0].col[2]= 0.8;
+ U.light[0].spec[0]= 0.5; U.light[0].spec[1]= 0.5; U.light[0].spec[2]= 0.5;
+ U.light[0].spec[3]= 1.0;
+
+ U.light[1].flag= 0;
+ U.light[1].vec[0]= 0.5; U.light[1].vec[1]= 0.5; U.light[1].vec[2]= 0.1;
+ U.light[1].col[0]= 0.4; U.light[1].col[1]= 0.4; U.light[1].col[2]= 0.8;
+ U.light[1].spec[0]= 0.3; U.light[1].spec[1]= 0.3; U.light[1].spec[2]= 0.5;
+ U.light[1].spec[3]= 1.0;
+
+ U.light[2].flag= 0;
+ U.light[2].vec[0]= 0.3; U.light[2].vec[1]= -0.3; U.light[2].vec[2]= -0.2;
+ U.light[2].col[0]= 0.8; U.light[2].col[1]= 0.5; U.light[2].col[2]= 0.4;
+ U.light[2].spec[0]= 0.5; U.light[2].spec[1]= 0.4; U.light[2].spec[2]= 0.3;
+ U.light[2].spec[3]= 1.0;
+ }
+
+ glLightfv(GL_LIGHT0, GL_POSITION, U.light[0].vec);
+ glLightfv(GL_LIGHT0, GL_DIFFUSE, U.light[0].col);
+ glLightfv(GL_LIGHT0, GL_SPECULAR, U.light[0].spec);
+
+ glLightfv(GL_LIGHT1, GL_POSITION, U.light[1].vec);
+ glLightfv(GL_LIGHT1, GL_DIFFUSE, U.light[1].col);
+ glLightfv(GL_LIGHT1, GL_SPECULAR, U.light[1].spec);
+
+ glLightfv(GL_LIGHT2, GL_POSITION, U.light[2].vec);
+ glLightfv(GL_LIGHT2, GL_DIFFUSE, U.light[2].col);
+ glLightfv(GL_LIGHT2, GL_SPECULAR, U.light[2].spec);
+
+ for(a=0; a<8; a++) {
+ if(a<3) {
+ if(U.light[a].flag) {
+ glEnable(GL_LIGHT0+a);
+ count++;
+ }
+ else
+ glDisable(GL_LIGHT0+a);
+
+ // clear stuff from other opengl lamp usage
+ glLightf(GL_LIGHT0+a, GL_SPOT_CUTOFF, 180.0);
+ glLightf(GL_LIGHT0+a, GL_CONSTANT_ATTENUATION, 1.0);
+ glLightf(GL_LIGHT0+a, GL_LINEAR_ATTENUATION, 0.0);
+ }
+ else
+ glDisable(GL_LIGHT0+a);
+ }
+
+ glDisable(GL_LIGHTING);
+
+ glDisable(GL_COLOR_MATERIAL);
+
+ return count;
+}
+
+int GPU_scene_object_lights(Scene *scene, Object *ob, int lay, float viewmat[][4])
+{
+ Base *base;
+ Lamp *la;
+ int count;
+ float position[4], direction[4], energy[4];
+
+ /* disable all lights */
+ for(count=0; count<8; count++)
+ glDisable(GL_LIGHT0+count);
+
+ count= 0;
+
+ for(base=scene->base.first; base; base=base->next) {
+ if(base->object->type!=OB_LAMP)
+ continue;
+
+ if(!(base->lay & lay) || !(base->lay & ob->lay))
+ continue;
+
+ la= base->object->data;
+
+ /* setup lamp transform */
+ glPushMatrix();
+ glLoadMatrixf((float *)viewmat);
+
+ where_is_object_simul(base->object);
+
+ if(la->type==LA_SUN) {
+ /* sun lamp */
+ VECCOPY(position, base->object->obmat[2]);
+ direction[3]= 0.0;
+
+ glLightfv(GL_LIGHT0+count, GL_POSITION, direction);
+ }
+ else {
+ /* other lamps with attenuation */
+ VECCOPY(position, base->object->obmat[3]);
+ position[3]= 1.0f;
+
+ glLightfv(GL_LIGHT0+count, GL_POSITION, position);
+ glLightf(GL_LIGHT0+count, GL_CONSTANT_ATTENUATION, 1.0);
+ glLightf(GL_LIGHT0+count, GL_LINEAR_ATTENUATION, la->att1/la->dist);
+ glLightf(GL_LIGHT0+count, GL_QUADRATIC_ATTENUATION, la->att2/(la->dist*la->dist));
+
+ if(la->type==LA_SPOT) {
+ /* spot lamp */
+ direction[0]= -base->object->obmat[2][0];
+ direction[1]= -base->object->obmat[2][1];
+ direction[2]= -base->object->obmat[2][2];
+ glLightfv(GL_LIGHT0+count, GL_SPOT_DIRECTION, direction);
+ glLightf(GL_LIGHT0+count, GL_SPOT_CUTOFF, la->spotsize/2.0);
+ glLightf(GL_LIGHT0+count, GL_SPOT_EXPONENT, 128.0*la->spotblend);
+ }
+ else
+ glLightf(GL_LIGHT0+count, GL_SPOT_CUTOFF, 180.0);
+ }
+
+ /* setup energy */
+ energy[0]= la->energy*la->r;
+ energy[1]= la->energy*la->g;
+ energy[2]= la->energy*la->b;
+ energy[3]= 1.0;
+
+ glLightfv(GL_LIGHT0+count, GL_DIFFUSE, energy);
+ glLightfv(GL_LIGHT0+count, GL_SPECULAR, energy);
+ glEnable(GL_LIGHT0+count);
+
+ glPopMatrix();
+
+ count++;
+ if(count==8)
+ break;
+ }
+
+ return count;
+}
+
+/* Default OpenGL State */
+
+void GPU_state_init(void)
+{
+ /* also called when doing opengl rendering and in the game engine */
+ float mat_ambient[] = { 0.0, 0.0, 0.0, 0.0 };
+ float mat_specular[] = { 0.5, 0.5, 0.5, 1.0 };
+ float mat_shininess[] = { 35.0 };
+ int a, x, y;
+ GLubyte pat[32*32];
+ const GLubyte *patc= pat;
+
+ glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, mat_ambient);
+ glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mat_specular);
+ glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, mat_specular);
+ glMaterialfv(GL_FRONT_AND_BACK, GL_SHININESS, mat_shininess);
+
+ GPU_default_lights();
+
+ /* no local viewer, looks ugly in ortho mode */
+ /* glLightModelfv(GL_LIGHT_MODEL_LOCAL_VIEWER, &one); */
+
+ glDepthFunc(GL_LEQUAL);
+ /* scaling matrices */
+ glEnable(GL_NORMALIZE);
+
+ glShadeModel(GL_FLAT);
+
+ glDisable(GL_ALPHA_TEST);
+ glDisable(GL_BLEND);
+ glDisable(GL_DEPTH_TEST);
+ glDisable(GL_FOG);
+ glDisable(GL_LIGHTING);
+ glDisable(GL_LOGIC_OP);
+ glDisable(GL_STENCIL_TEST);
+ glDisable(GL_TEXTURE_1D);
+ glDisable(GL_TEXTURE_2D);
+
+ /* default on, disable/enable should be local per function */
+ glEnableClientState(GL_VERTEX_ARRAY);
+ glEnableClientState(GL_NORMAL_ARRAY);
+
+ glPixelTransferi(GL_MAP_COLOR, GL_FALSE);
+ glPixelTransferi(GL_RED_SCALE, 1);
+ glPixelTransferi(GL_RED_BIAS, 0);
+ glPixelTransferi(GL_GREEN_SCALE, 1);
+ glPixelTransferi(GL_GREEN_BIAS, 0);
+ glPixelTransferi(GL_BLUE_SCALE, 1);
+ glPixelTransferi(GL_BLUE_BIAS, 0);
+ glPixelTransferi(GL_ALPHA_SCALE, 1);
+ glPixelTransferi(GL_ALPHA_BIAS, 0);
+
+ glPixelTransferi(GL_DEPTH_BIAS, 0);
+ glPixelTransferi(GL_DEPTH_SCALE, 1);
+ glDepthRange(0.0, 1.0);
+
+ a= 0;
+ for(x=0; x<32; x++) {
+ for(y=0; y<4; y++) {
+ if( (x) & 1) pat[a++]= 0x88;
+ else pat[a++]= 0x22;
+ }
+ }
+
+ glPolygonStipple(patc);
+
+ glMatrixMode(GL_TEXTURE);
+ glLoadIdentity();
+ glMatrixMode(GL_MODELVIEW);
+
+ glFrontFace(GL_CCW);
+ glCullFace(GL_BACK);
+ glDisable(GL_CULL_FACE);
+}
+
diff --git a/source/blender/gpu/intern/gpu_extensions.c b/source/blender/gpu/intern/gpu_extensions.c
new file mode 100644
index 00000000000..a8dc369460c
--- /dev/null
+++ b/source/blender/gpu/intern/gpu_extensions.c
@@ -0,0 +1,992 @@
+/**
+ * $Id$
+ *
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version. The Blender
+ * Foundation also sells licenses for use in proprietary software under
+ * the Blender License. See http://www.blender.org/BL/ for information
+ * about this.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * The Original Code is Copyright (C) 2005 Blender Foundation.
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): Brecht Van Lommel.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+#include "GL/glew.h"
+
+#include "DNA_listBase.h"
+#include "DNA_image_types.h"
+#include "DNA_userdef_types.h"
+
+#include "MEM_guardedalloc.h"
+
+#include "BKE_image.h"
+#include "BKE_global.h"
+#include "BKE_utildefines.h"
+
+#include "IMB_imbuf.h"
+#include "IMB_imbuf_types.h"
+
+#include "BLI_blenlib.h"
+
+#include "GPU_draw.h"
+#include "GPU_extensions.h"
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+/* Extensions support */
+
+/* extensions used:
+ - texture border clamp: 1.3 core
+ - fragement shader: 2.0 core
+ - framebuffer object: ext specification
+ - multitexture 1.3 core
+ - arb non power of two: 2.0 core
+ - pixel buffer objects? 2.1 core
+ - arb draw buffers? 2.0 core
+*/
+
+struct GPUGlobal {
+ GLint maxtextures;
+ GLuint currentfb;
+ int minimumsupport;
+} GG = {1, 0, 0};
+
+void GPU_extensions_init()
+{
+ glewInit();
+
+ /* glewIsSupported("GL_VERSION_2_0") */
+
+ if (GLEW_ARB_multitexture)
+ glGetIntegerv(GL_MAX_TEXTURE_IMAGE_UNITS_ARB, &GG.maxtextures);
+
+ GG.minimumsupport = 1;
+ if (!GLEW_ARB_multitexture) GG.minimumsupport = 0;
+ if (!GLEW_ARB_vertex_shader) GG.minimumsupport = 0;
+ if (!GLEW_ARB_fragment_shader) GG.minimumsupport = 0;
+}
+
+int GPU_extensions_minimum_support()
+{
+ return GG.minimumsupport;
+}
+
+int GPU_print_error(char *str)
+{
+ GLenum errCode;
+
+ if (G.f & G_DEBUG) {
+ if ((errCode = glGetError()) != GL_NO_ERROR) {
+ fprintf(stderr, "%s opengl error: %s\n", str, gluErrorString(errCode));
+ return 1;
+ }
+ }
+
+ return 0;
+}
+
+static void GPU_print_framebuffer_error(GLenum status)
+{
+ fprintf(stderr, "GPUFrameBuffer: framebuffer incomplete error %d\n",
+ (int)status);
+
+ switch(status) {
+ case GL_FRAMEBUFFER_COMPLETE_EXT:
+ break;
+ case GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT:
+ fprintf(stderr, "Incomplete attachment.\n");
+ break;
+ case GL_FRAMEBUFFER_UNSUPPORTED_EXT:
+ fprintf(stderr, "Unsupported framebuffer format.\n");
+ break;
+ case GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT:
+ fprintf(stderr, "Missing attachment.\n");
+ break;
+ case GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT:
+ fprintf(stderr, "Attached images must have same dimensions.\n");
+ break;
+ case GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT:
+ fprintf(stderr, "Attached images must have same format.\n");
+ break;
+ case GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT:
+ fprintf(stderr, "Missing draw buffer.\n");
+ break;
+ case GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT:
+ fprintf(stderr, "Missing read buffer.\n");
+ break;
+ default:
+ fprintf(stderr, "Unknown.\n");
+ break;
+ }
+}
+
+/* GPUTexture */
+
+struct GPUTexture {
+ int w, h; /* width/height */
+ int number; /* number for multitexture binding */
+ int refcount; /* reference count */
+ GLenum target; /* GL_TEXTURE_* */
+ GLuint bindcode; /* opengl identifier for texture */
+ int fromblender; /* we got the texture from Blender */
+
+ GPUFrameBuffer *fb; /* GPUFramebuffer this texture is attached to */
+ int depth; /* is a depth texture? */
+};
+
+static unsigned char *GPU_texture_convert_pixels(int length, float *fpixels)
+{
+ unsigned char *pixels, *p;
+ float *fp;
+ int a, len;
+
+ len = 4*length;
+ fp = fpixels;
+ p = pixels = MEM_callocN(sizeof(unsigned char)*len, "GPUTexturePixels");
+
+ for (a=0; a<len; a++, p++, fp++)
+ *p = FTOCHAR((*fp));
+
+ return pixels;
+}
+
+static int is_pow2(int n)
+{
+ return ((n)&(n-1))==0;
+}
+
+static int larger_pow2(int n)
+{
+ if (is_pow2(n))
+ return n;
+
+ while(!is_pow2(n))
+ n= n&(n-1);
+
+ return n*2;
+}
+
+static void GPU_glTexSubImageEmpty(GLenum target, GLenum format, int x, int y, int w, int h)
+{
+ void *pixels = MEM_callocN(sizeof(char)*4*w*h, "GPUTextureEmptyPixels");
+
+ if (target == GL_TEXTURE_1D)
+ glTexSubImage1D(target, 0, x, w, format, GL_UNSIGNED_BYTE, pixels);
+ else
+ glTexSubImage2D(target, 0, x, y, w, h, format, GL_UNSIGNED_BYTE, pixels);
+
+ MEM_freeN(pixels);
+}
+
+static GPUTexture *GPU_texture_create_nD(int w, int h, int n, float *fpixels, int depth)
+{
+ GPUTexture *tex;
+ GLenum type, format, internalformat;
+ void *pixels = NULL;
+
+ if(depth && !GLEW_ARB_depth_texture)
+ return NULL;
+
+ tex = MEM_callocN(sizeof(GPUTexture), "GPUTexture");
+ tex->w = w;
+ tex->h = h;
+ tex->number = -1;
+ tex->refcount = 1;
+ tex->target = (n == 1)? GL_TEXTURE_1D: GL_TEXTURE_2D;
+ tex->depth = depth;
+
+ glGenTextures(1, &tex->bindcode);
+
+ if (!tex->bindcode) {
+ fprintf(stderr, "GPUTexture: texture create failed: %d\n",
+ (int)glGetError());
+ GPU_texture_free(tex);
+ return NULL;
+ }
+
+ if (!GLEW_ARB_texture_non_power_of_two) {
+ tex->w = larger_pow2(tex->w);
+ tex->h = larger_pow2(tex->h);
+ }
+
+ tex->number = 0;
+ glBindTexture(tex->target, tex->bindcode);
+
+ if(depth) {
+ type = GL_UNSIGNED_BYTE;
+ format = GL_DEPTH_COMPONENT;
+ internalformat = GL_DEPTH_COMPONENT;
+ }
+ else {
+ type = GL_UNSIGNED_BYTE;
+ format = GL_RGBA;
+ internalformat = GL_RGBA8;
+
+ if (fpixels)
+ pixels = GPU_texture_convert_pixels(w*h, fpixels);
+ }
+
+ if (tex->target == GL_TEXTURE_1D) {
+ glTexImage1D(tex->target, 0, internalformat, tex->w, 0, format, type, 0);
+
+ if (fpixels) {
+ glTexSubImage1D(tex->target, 0, 0, w, format, type,
+ pixels? pixels: fpixels);
+
+ if (tex->w > w)
+ GPU_glTexSubImageEmpty(tex->target, format, w, 0,
+ tex->w-w, 1);
+ }
+ }
+ else {
+ glTexImage2D(tex->target, 0, internalformat, tex->w, tex->h, 0,
+ format, type, 0);
+
+ if (fpixels) {
+ glTexSubImage2D(tex->target, 0, 0, 0, w, h,
+ format, type, pixels? pixels: fpixels);
+
+ if (tex->w > w)
+ GPU_glTexSubImageEmpty(tex->target, format, w, 0, tex->w-w, tex->h);
+ if (tex->h > h)
+ GPU_glTexSubImageEmpty(tex->target, format, 0, h, w, tex->h-h);
+ }
+ }
+
+ if (pixels)
+ MEM_freeN(pixels);
+
+ if(depth) {
+ glTexParameteri(tex->target, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
+ glTexParameteri(tex->target, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
+ glTexParameteri(tex->target, GL_TEXTURE_COMPARE_MODE_ARB, GL_COMPARE_R_TO_TEXTURE);
+ glTexParameteri(tex->target, GL_TEXTURE_COMPARE_FUNC_ARB, GL_LEQUAL);
+ glTexParameteri(tex->target, GL_DEPTH_TEXTURE_MODE_ARB, GL_INTENSITY);
+ }
+ else {
+ glTexParameteri(tex->target, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
+ glTexParameteri(tex->target, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
+ }
+
+ if (tex->target != GL_TEXTURE_1D) {
+ /* CLAMP_TO_BORDER is an OpenGL 1.3 core feature */
+ GLenum wrapmode = (depth)? GL_CLAMP_TO_EDGE: GL_CLAMP_TO_BORDER;
+ glTexParameteri(tex->target, GL_TEXTURE_WRAP_S, wrapmode);
+ glTexParameteri(tex->target, GL_TEXTURE_WRAP_T, wrapmode);
+
+#if 0
+ float borderColor[] = { 1.0f, 1.0f, 1.0f, 1.0f };
+ glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_BORDER_COLOR, borderColor);
+#endif
+ }
+ else
+ glTexParameteri(tex->target, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
+
+ return tex;
+}
+
+GPUTexture *GPU_texture_from_blender(Image *ima, ImageUser *iuser, double time)
+{
+ GPUTexture *tex;
+ GLint w, h, border, lastbindcode, bindcode;
+
+ glGetIntegerv(GL_TEXTURE_BINDING_2D, &lastbindcode);
+
+ GPU_update_image_time(ima, time);
+ bindcode = GPU_verify_image(ima, 0, 0, 0);
+
+ if(ima->gputexture) {
+ ima->gputexture->bindcode = bindcode;
+ glBindTexture(GL_TEXTURE_2D, lastbindcode);
+ return ima->gputexture;
+ }
+
+ if(!bindcode) {
+ glBindTexture(GL_TEXTURE_2D, lastbindcode);
+ return NULL;
+ }
+
+ tex = MEM_callocN(sizeof(GPUTexture), "GPUTexture");
+ tex->bindcode = bindcode;
+ tex->number = -1;
+ tex->refcount = 1;
+ tex->target = GL_TEXTURE_2D;
+ tex->fromblender = 1;
+
+ ima->gputexture= tex;
+
+ if (!glIsTexture(tex->bindcode)) {
+ GPU_print_error("Blender Texture");
+ }
+ else {
+ glBindTexture(GL_TEXTURE_2D, tex->bindcode);
+ glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_WIDTH, &w);
+ glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_HEIGHT, &h);
+ glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_BORDER, &border);
+
+ tex->w = w - border;
+ tex->h = h - border;
+ }
+
+ glBindTexture(GL_TEXTURE_2D, lastbindcode);
+
+ return tex;
+}
+
+GPUTexture *GPU_texture_create_1D(int w, float *fpixels)
+{
+ GPUTexture *tex = GPU_texture_create_nD(w, 1, 1, fpixels, 0);
+
+ if (tex)
+ GPU_texture_unbind(tex);
+
+ return tex;
+}
+
+GPUTexture *GPU_texture_create_2D(int w, int h, float *fpixels)
+{
+ GPUTexture *tex = GPU_texture_create_nD(w, h, 2, fpixels, 0);
+
+ if (tex)
+ GPU_texture_unbind(tex);
+
+ return tex;
+}
+
+GPUTexture *GPU_texture_create_depth(int w, int h)
+{
+ GPUTexture *tex = GPU_texture_create_nD(w, h, 2, NULL, 1);
+
+ if (tex)
+ GPU_texture_unbind(tex);
+
+ return tex;
+}
+
+void GPU_texture_bind(GPUTexture *tex, int number)
+{
+ GLenum arbnumber;
+
+ if (number >= GG.maxtextures) {
+ GPU_print_error("Not enough texture slots.");
+ return;
+ }
+
+ if(number == -1)
+ return;
+
+ GPU_print_error("Pre Texture Bind");
+
+ arbnumber = (GLenum)((GLuint)GL_TEXTURE0_ARB + number);
+ if (number != 0) glActiveTextureARB(arbnumber);
+ glBindTexture(tex->target, tex->bindcode);
+ glEnable(tex->target);
+ if (number != 0) glActiveTextureARB(GL_TEXTURE0_ARB);
+
+ tex->number = number;
+
+ GPU_print_error("Post Texture Bind");
+}
+
+void GPU_texture_unbind(GPUTexture *tex)
+{
+ GLenum arbnumber;
+
+ if (tex->number >= GG.maxtextures) {
+ GPU_print_error("Not enough texture slots.");
+ return;
+ }
+
+ if(tex->number == -1)
+ return;
+
+ GPU_print_error("Pre Texture Unbind");
+
+ arbnumber = (GLenum)((GLuint)GL_TEXTURE0_ARB + tex->number);
+ if (tex->number != 0) glActiveTextureARB(arbnumber);
+ glBindTexture(tex->target, 0);
+ glDisable(tex->target);
+ if (tex->number != 0) glActiveTextureARB(GL_TEXTURE0_ARB);
+
+ tex->number = -1;
+
+ GPU_print_error("Post Texture Unbind");
+}
+
+void GPU_texture_free(GPUTexture *tex)
+{
+ tex->refcount--;
+
+ if (tex->refcount < 0)
+ fprintf(stderr, "GPUTexture: negative refcount\n");
+
+ if (tex->refcount == 0) {
+ if (tex->fb)
+ GPU_framebuffer_texture_detach(tex->fb, tex);
+ if (tex->bindcode && !tex->fromblender)
+ glDeleteTextures(1, &tex->bindcode);
+
+ MEM_freeN(tex);
+ }
+}
+
+void GPU_texture_ref(GPUTexture *tex)
+{
+ tex->refcount++;
+}
+
+int GPU_texture_target(GPUTexture *tex)
+{
+ return tex->target;
+}
+
+int GPU_texture_opengl_width(GPUTexture *tex)
+{
+ return tex->w;
+}
+
+int GPU_texture_opengl_height(GPUTexture *tex)
+{
+ return tex->h;
+}
+
+GPUFrameBuffer *GPU_texture_framebuffer(GPUTexture *tex)
+{
+ return tex->fb;
+}
+
+/* GPUFrameBuffer */
+
+struct GPUFrameBuffer {
+ GLuint object;
+ GPUTexture *colortex;
+ GPUTexture *depthtex;
+};
+
+GPUFrameBuffer *GPU_framebuffer_create()
+{
+ GPUFrameBuffer *fb;
+
+ if (!GLEW_EXT_framebuffer_object)
+ return NULL;
+
+ fb= MEM_callocN(sizeof(GPUFrameBuffer), "GPUFrameBuffer");
+ glGenFramebuffersEXT(1, &fb->object);
+
+ if (!fb->object) {
+ fprintf(stderr, "GPUFFrameBuffer: framebuffer gen failed. %d\n",
+ (int)glGetError());
+ GPU_framebuffer_free(fb);
+ return NULL;
+ }
+
+ return fb;
+}
+
+int GPU_framebuffer_texture_attach(GPUFrameBuffer *fb, GPUTexture *tex)
+{
+ GLenum status;
+ GLenum attachment;
+
+ if(tex->depth)
+ attachment = GL_DEPTH_ATTACHMENT_EXT;
+ else
+ attachment = GL_COLOR_ATTACHMENT0_EXT;
+
+ glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fb->object);
+ GG.currentfb = fb->object;
+
+ glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, attachment,
+ tex->target, tex->bindcode, 0);
+
+ if(tex->depth) {
+ glDrawBuffer(GL_NONE);
+ glReadBuffer(GL_NONE);
+ }
+ else {
+ glDrawBuffer(GL_COLOR_ATTACHMENT0_EXT);
+ glReadBuffer(GL_NONE);
+ }
+
+ status = glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT);
+
+ if (status != GL_FRAMEBUFFER_COMPLETE_EXT) {
+ GPU_framebuffer_restore();
+ GPU_print_framebuffer_error(status);
+ return 0;
+ }
+
+ if(tex->depth)
+ fb->depthtex = tex;
+ else
+ fb->colortex = tex;
+
+ tex->fb= fb;
+
+ return 1;
+}
+
+void GPU_framebuffer_texture_detach(GPUFrameBuffer *fb, GPUTexture *tex)
+{
+ GLenum attachment;
+
+ if(!tex->fb)
+ return;
+
+ if(GG.currentfb != tex->fb->object) {
+ glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, tex->fb->object);
+ GG.currentfb = tex->fb->object;
+ }
+
+ if(tex->depth) {
+ fb->depthtex = NULL;
+ attachment = GL_DEPTH_ATTACHMENT_EXT;
+ }
+ else {
+ fb->colortex = NULL;
+ attachment = GL_COLOR_ATTACHMENT0_EXT;
+ }
+
+ glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, attachment,
+ tex->target, 0, 0);
+
+ tex->fb = NULL;
+}
+
+void GPU_framebuffer_texture_bind(GPUFrameBuffer *fb, GPUTexture *tex)
+{
+ /* push attributes */
+ glPushAttrib(GL_ENABLE_BIT);
+ glPushAttrib(GL_VIEWPORT_BIT);
+ glDisable(GL_SCISSOR_TEST);
+
+ /* bind framebuffer */
+ glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, tex->fb->object);
+
+ /* push matrices and set default viewport and matrix */
+ glViewport(0, 0, tex->w, tex->h);
+ GG.currentfb = tex->fb->object;
+
+ glMatrixMode(GL_PROJECTION);
+ glPushMatrix();
+ glLoadIdentity();
+ glMatrixMode(GL_MODELVIEW);
+ glPushMatrix();
+ glLoadIdentity();
+}
+
+void GPU_framebuffer_texture_unbind(GPUFrameBuffer *fb, GPUTexture *tex)
+{
+ /* restore matrix */
+ glMatrixMode(GL_PROJECTION);
+ glPopMatrix();
+ glMatrixMode(GL_MODELVIEW);
+ glPopMatrix();
+
+ /* restore attributes */
+ glPopAttrib();
+ glPopAttrib();
+ glEnable(GL_SCISSOR_TEST);
+}
+
+void GPU_framebuffer_free(GPUFrameBuffer *fb)
+{
+ if(fb->depthtex)
+ GPU_framebuffer_texture_detach(fb, fb->depthtex);
+ if(fb->colortex)
+ GPU_framebuffer_texture_detach(fb, fb->colortex);
+
+ if(fb->object) {
+ glDeleteFramebuffersEXT(1, &fb->object);
+
+ if (GG.currentfb == fb->object) {
+ glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
+ GG.currentfb = 0;
+ }
+ }
+
+ MEM_freeN(fb);
+}
+
+void GPU_framebuffer_restore()
+{
+ if (GG.currentfb != 0) {
+ glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
+ GG.currentfb = 0;
+ }
+}
+
+/* GPUShader */
+
+struct GPUShader {
+ GLhandleARB object; /* handle for full shader */
+ GLhandleARB vertex; /* handle for vertex shader */
+ GLhandleARB fragment; /* handle for fragment shader */
+ GLhandleARB lib; /* handle for libment shader */
+ int totattrib; /* total number of attributes */
+};
+
+static void shader_print_errors(char *task, char *log, const char *code)
+{
+ const char *c, *pos, *end = code + strlen(code);
+ int line = 1;
+
+ fprintf(stderr, "GPUShader: %s error:\n", task);
+
+ if(G.f & G_DEBUG) {
+ c = code;
+ while ((c < end) && (pos = strchr(c, '\n'))) {
+ fprintf(stderr, "%2d ", line);
+ fwrite(c, (pos+1)-c, 1, stderr);
+ c = pos+1;
+ line++;
+ }
+
+ fprintf(stderr, "%s", c);
+ }
+
+ fprintf(stderr, "%s\n", log);
+}
+
+GPUShader *GPU_shader_create(const char *vertexcode, const char *fragcode, /*GPUShader *lib,*/ const char *libcode)
+{
+ GLint status;
+ GLcharARB log[5000];
+ const char *fragsource[2];
+ GLsizei length = 0;
+ GLint count;
+ GPUShader *shader;
+
+ if (!GLEW_ARB_vertex_shader || !GLEW_ARB_fragment_shader)
+ return NULL;
+
+ shader = MEM_callocN(sizeof(GPUShader), "GPUShader");
+
+ if(vertexcode)
+ shader->vertex = glCreateShaderObjectARB(GL_VERTEX_SHADER_ARB);
+ if(fragcode)
+ shader->fragment = glCreateShaderObjectARB(GL_FRAGMENT_SHADER_ARB);
+ shader->object = glCreateProgramObjectARB();
+
+ if (!shader->object ||
+ (vertexcode && !shader->vertex) ||
+ (fragcode && !shader->fragment)) {
+ fprintf(stderr, "GPUShader, object creation failed.\n");
+ GPU_shader_free(shader);
+ return NULL;
+ }
+
+ if(vertexcode) {
+ glAttachObjectARB(shader->object, shader->vertex);
+ glShaderSourceARB(shader->vertex, 1, (const char**)&vertexcode, NULL);
+
+ glCompileShaderARB(shader->vertex);
+ glGetObjectParameterivARB(shader->vertex, GL_OBJECT_COMPILE_STATUS_ARB, &status);
+
+ if (!status) {
+ glGetInfoLogARB(shader->vertex, sizeof(log), &length, log);
+ shader_print_errors("compile", log, vertexcode);
+
+ GPU_shader_free(shader);
+ return NULL;
+ }
+ }
+
+ if(fragcode) {
+ count = 0;
+ if(libcode) fragsource[count++] = libcode;
+ if(fragcode) fragsource[count++] = fragcode;
+
+ glAttachObjectARB(shader->object, shader->fragment);
+ glShaderSourceARB(shader->fragment, count, fragsource, NULL);
+
+ glCompileShaderARB(shader->fragment);
+ glGetObjectParameterivARB(shader->fragment, GL_OBJECT_COMPILE_STATUS_ARB, &status);
+
+ if (!status) {
+ glGetInfoLogARB(shader->fragment, sizeof(log), &length, log);
+ shader_print_errors("compile", log, fragcode);
+
+ GPU_shader_free(shader);
+ return NULL;
+ }
+ }
+
+ /*if(lib && lib->lib)
+ glAttachObjectARB(shader->object, lib->lib);*/
+
+ glLinkProgramARB(shader->object);
+ glGetObjectParameterivARB(shader->object, GL_OBJECT_LINK_STATUS_ARB, &status);
+ if (!status) {
+ glGetInfoLogARB(shader->object, sizeof(log), &length, log);
+ shader_print_errors("linking", log, fragcode);
+
+ GPU_shader_free(shader);
+ return NULL;
+ }
+
+ return shader;
+}
+
+#if 0
+GPUShader *GPU_shader_create_lib(const char *code)
+{
+ GLint status;
+ GLcharARB log[5000];
+ GLsizei length = 0;
+ GPUShader *shader;
+
+ if (!GLEW_ARB_vertex_shader || !GLEW_ARB_fragment_shader)
+ return NULL;
+
+ shader = MEM_callocN(sizeof(GPUShader), "GPUShader");
+
+ shader->lib = glCreateShaderObjectARB(GL_FRAGMENT_SHADER_ARB);
+
+ if (!shader->lib) {
+ fprintf(stderr, "GPUShader, object creation failed.\n");
+ GPU_shader_free(shader);
+ return NULL;
+ }
+
+ glShaderSourceARB(shader->lib, 1, (const char**)&code, NULL);
+
+ glCompileShaderARB(shader->lib);
+ glGetObjectParameterivARB(shader->lib, GL_OBJECT_COMPILE_STATUS_ARB, &status);
+
+ if (!status) {
+ glGetInfoLogARB(shader->lib, sizeof(log), &length, log);
+ shader_print_errors("compile", log, code);
+
+ GPU_shader_free(shader);
+ return NULL;
+ }
+
+ return shader;
+}
+#endif
+
+void GPU_shader_bind(GPUShader *shader)
+{
+ GPU_print_error("Pre Shader Bind");
+ glUseProgramObjectARB(shader->object);
+ GPU_print_error("Post Shader Bind");
+}
+
+void GPU_shader_unbind()
+{
+ GPU_print_error("Pre Shader Unbind");
+ glUseProgramObjectARB(0);
+ GPU_print_error("Post Shader Unbind");
+}
+
+void GPU_shader_free(GPUShader *shader)
+{
+ if (shader->lib)
+ glDeleteObjectARB(shader->lib);
+ if (shader->vertex)
+ glDeleteObjectARB(shader->vertex);
+ if (shader->fragment)
+ glDeleteObjectARB(shader->fragment);
+ if (shader->object)
+ glDeleteObjectARB(shader->object);
+ MEM_freeN(shader);
+}
+
+int GPU_shader_get_uniform(GPUShader *shader, char *name)
+{
+ return glGetUniformLocationARB(shader->object, name);
+}
+
+void GPU_shader_uniform_vector(GPUShader *shader, int location, int length, int arraysize, float *value)
+{
+ if(location == -1)
+ return;
+
+ GPU_print_error("Pre Uniform Vector");
+
+ if (length == 1) glUniform1fvARB(location, arraysize, value);
+ else if (length == 2) glUniform2fvARB(location, arraysize, value);
+ else if (length == 3) glUniform3fvARB(location, arraysize, value);
+ else if (length == 4) glUniform4fvARB(location, arraysize, value);
+ else if (length == 9) glUniformMatrix3fvARB(location, arraysize, 0, value);
+ else if (length == 16) glUniformMatrix4fvARB(location, arraysize, 0, value);
+
+ GPU_print_error("Post Uniform Vector");
+}
+
+void GPU_shader_uniform_texture(GPUShader *shader, int location, GPUTexture *tex)
+{
+ GLenum arbnumber;
+
+ if (tex->number >= GG.maxtextures) {
+ GPU_print_error("Not enough texture slots.");
+ return;
+ }
+
+ if(tex->number == -1)
+ return;
+
+ if(location == -1)
+ return;
+
+ GPU_print_error("Pre Uniform Texture");
+
+ arbnumber = (GLenum)((GLuint)GL_TEXTURE0_ARB + tex->number);
+
+ if (tex->number != 0) glActiveTextureARB(arbnumber);
+ glBindTexture(tex->target, tex->bindcode);
+ glUniform1iARB(location, tex->number);
+ glEnable(tex->target);
+ if (tex->number != 0) glActiveTextureARB(GL_TEXTURE0_ARB);
+
+ GPU_print_error("Post Uniform Texture");
+}
+
+int GPU_shader_get_attribute(GPUShader *shader, char *name)
+{
+ int index;
+
+ GPU_print_error("Pre Get Attribute");
+
+ index = glGetAttribLocationARB(shader->object, name);
+
+ GPU_print_error("Post Get Attribute");
+
+ return index;
+}
+
+#if 0
+/* GPUPixelBuffer */
+
+typedef struct GPUPixelBuffer {
+ GLuint bindcode[2];
+ GLuint current;
+ int datasize;
+ int numbuffers;
+ int halffloat;
+} GPUPixelBuffer;
+
+void GPU_pixelbuffer_free(GPUPixelBuffer *pb)
+{
+ if (pb->bindcode[0])
+ glDeleteBuffersARB(pb->numbuffers, pb->bindcode);
+ MEM_freeN(pb);
+}
+
+GPUPixelBuffer *gpu_pixelbuffer_create(int x, int y, int halffloat, int numbuffers)
+{
+ GPUPixelBuffer *pb;
+
+ if (!GLEW_ARB_multitexture || !GLEW_EXT_pixel_buffer_object)
+ return NULL;
+
+ pb = MEM_callocN(sizeof(GPUPixelBuffer), "GPUPBO");
+ pb->datasize = x*y*4*((halffloat)? 16: 8);
+ pb->numbuffers = numbuffers;
+ pb->halffloat = halffloat;
+
+ glGenBuffersARB(pb->numbuffers, pb->bindcode);
+
+ if (!pb->bindcode[0]) {
+ fprintf(stderr, "GPUPixelBuffer allocation failed\n");
+ GPU_pixelbuffer_free(pb);
+ return NULL;
+ }
+
+ return pb;
+}
+
+void GPU_pixelbuffer_texture(GPUTexture *tex, GPUPixelBuffer *pb)
+{
+ void *pixels;
+ int i;
+
+ glBindTexture(GL_TEXTURE_RECTANGLE_EXT, tex->bindcode);
+
+ for (i = 0; i < pb->numbuffers; i++) {
+ glBindBufferARB(GL_PIXEL_UNPACK_BUFFER_EXT, pb->bindcode[pb->current]);
+ glBufferDataARB(GL_PIXEL_UNPACK_BUFFER_EXT, pb->datasize, NULL,
+ GL_STREAM_DRAW_ARB);
+
+ pixels = glMapBufferARB(GL_PIXEL_UNPACK_BUFFER_EXT, GL_WRITE_ONLY);
+ /*memcpy(pixels, _oImage.data(), pb->datasize);*/
+
+ if (!glUnmapBufferARB(GL_PIXEL_UNPACK_BUFFER_EXT)) {
+ fprintf(stderr, "Could not unmap opengl PBO\n");
+ break;
+ }
+ }
+
+ glBindTexture(GL_TEXTURE_RECTANGLE_EXT, 0);
+}
+
+static int pixelbuffer_map_into_gpu(GLuint bindcode)
+{
+ void *pixels;
+
+ glBindBufferARB(GL_PIXEL_UNPACK_BUFFER_EXT, bindcode);
+ pixels = glMapBufferARB(GL_PIXEL_UNPACK_BUFFER_EXT, GL_WRITE_ONLY);
+
+ /* do stuff in pixels */
+
+ if (!glUnmapBufferARB(GL_PIXEL_UNPACK_BUFFER_EXT)) {
+ fprintf(stderr, "Could not unmap opengl PBO\n");
+ return 0;
+ }
+
+ return 1;
+}
+
+static void pixelbuffer_copy_to_texture(GPUTexture *tex, GPUPixelBuffer *pb, GLuint bindcode)
+{
+ GLenum type = (pb->halffloat)? GL_HALF_FLOAT_NV: GL_UNSIGNED_BYTE;
+ glBindTexture(GL_TEXTURE_RECTANGLE_EXT, tex->bindcode);
+ glBindBufferARB(GL_PIXEL_UNPACK_BUFFER_EXT, bindcode);
+
+ glTexSubImage2D(GL_TEXTURE_RECTANGLE_EXT, 0, 0, 0, tex->w, tex->h,
+ GL_RGBA, type, NULL);
+
+ glBindBufferARB(GL_PIXEL_UNPACK_BUFFER_EXT, 0);
+ glBindTexture(GL_TEXTURE_RECTANGLE_EXT, 0);
+}
+
+void GPU_pixelbuffer_async_to_gpu(GPUTexture *tex, GPUPixelBuffer *pb)
+{
+ int newbuffer;
+
+ if (pb->numbuffers == 1) {
+ pixelbuffer_copy_to_texture(tex, pb, pb->bindcode[0]);
+ pixelbuffer_map_into_gpu(pb->bindcode[0]);
+ }
+ else {
+ pb->current = (pb->current+1)%pb->numbuffers;
+ newbuffer = (pb->current+1)%pb->numbuffers;
+
+ pixelbuffer_map_into_gpu(pb->bindcode[newbuffer]);
+ pixelbuffer_copy_to_texture(tex, pb, pb->bindcode[pb->current]);
+ }
+}
+#endif
+
diff --git a/source/blender/gpu/intern/gpu_material.c b/source/blender/gpu/intern/gpu_material.c
new file mode 100644
index 00000000000..d4da2866d96
--- /dev/null
+++ b/source/blender/gpu/intern/gpu_material.c
@@ -0,0 +1,1496 @@
+/**
+ * $Id$
+ *
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * The Original Code is Copyright (C) 2006 Blender Foundation.
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): Brecht Van Lommel.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+#include <math.h>
+#include <string.h>
+
+#include "GL/glew.h"
+
+#include "MEM_guardedalloc.h"
+
+#include "DNA_image_types.h"
+#include "DNA_lamp_types.h"
+#include "DNA_listBase.h"
+#include "DNA_material_types.h"
+#include "DNA_object_types.h"
+#include "DNA_scene_types.h"
+#include "DNA_texture_types.h"
+#include "DNA_view3d_types.h"
+#include "DNA_world_types.h"
+
+#include "BKE_anim.h"
+#include "BKE_colortools.h"
+#include "BKE_DerivedMesh.h"
+#include "BKE_global.h"
+#include "BKE_main.h"
+#include "BKE_node.h"
+#include "BKE_scene.h"
+#include "BKE_texture.h"
+#include "BKE_utildefines.h"
+
+#include "BLI_arithb.h"
+#include "BLI_blenlib.h"
+
+#include "GPU_extensions.h"
+#include "GPU_material.h"
+
+#include "gpu_codegen.h"
+
+#include <string.h>
+
+/* Structs */
+
+typedef enum DynMatProperty {
+ DYN_LAMP_CO = 1,
+ DYN_LAMP_VEC = 2,
+ DYN_LAMP_IMAT = 4,
+ DYN_LAMP_PERSMAT = 8,
+} DynMatProperty;
+
+struct GPUMaterial {
+ Scene *scene;
+ Material *ma;
+
+ /* for creating the material */
+ ListBase nodes;
+ GPUNodeLink *outlink;
+
+ /* for binding the material */
+ GPUPass *pass;
+ GPUVertexAttribs attribs;
+ int bound;
+ int builtins;
+ int alpha, obcolalpha;
+ int dynproperty;
+
+ /* for passing uniforms */
+ int viewmatloc, invviewmatloc;
+ int obmatloc, invobmatloc;
+ int obcolloc;
+
+ ListBase lamps;
+};
+
+struct GPULamp {
+ Scene *scene;
+ Object *ob;
+ Object *par;
+ Lamp *la;
+
+ int type, mode, lay;
+
+ float dynenergy, dyncol[3];
+ float energy, col[3];
+
+ float co[3], vec[3];
+ float dynco[3], dynvec[3];
+ float obmat[4][4];
+ float imat[4][4];
+ float dynimat[4][4];
+
+ float spotsi, spotbl, k;
+ float dist, att1, att2;
+
+ float bias, d, clipend;
+ int size;
+
+ int falloff_type;
+ struct CurveMapping *curfalloff;
+
+ float winmat[4][4];
+ float viewmat[4][4];
+ float persmat[4][4];
+ float dynpersmat[4][4];
+
+ GPUFrameBuffer *fb;
+ GPUTexture *tex;
+
+ ListBase materials;
+};
+
+/* Functions */
+
+static GPUMaterial *GPU_material_construct_begin(Material *ma)
+{
+ GPUMaterial *material = MEM_callocN(sizeof(GPUMaterial), "GPUMaterial");
+
+ material->ma= ma;
+
+ return material;
+}
+
+static void gpu_material_set_attrib_id(GPUMaterial *material)
+{
+ GPUVertexAttribs *attribs;
+ GPUShader *shader;
+ GPUPass *pass;
+ char name[32];
+ int a, b;
+
+ attribs= &material->attribs;
+ pass= material->pass;
+ if(!pass) {
+ attribs->totlayer = 0;
+ return;
+ }
+
+ shader= GPU_pass_shader(pass);
+ if(!shader) {
+ attribs->totlayer = 0;
+ return;
+ }
+
+ /* convert from attribute number to the actual id assigned by opengl,
+ * in case the attrib does not get a valid index back, it was probably
+ * removed by the glsl compiler by dead code elimination */
+
+ for(a=0, b=0; a<attribs->totlayer; a++) {
+ sprintf(name, "att%d", attribs->layer[a].glindex);
+ attribs->layer[a].glindex = GPU_shader_get_attribute(shader, name);
+
+ if(attribs->layer[a].glindex >= 0) {
+ attribs->layer[b] = attribs->layer[a];
+ b++;
+ }
+ }
+
+ attribs->totlayer = b;
+}
+
+static int GPU_material_construct_end(GPUMaterial *material)
+{
+ if (material->outlink) {
+ GPUNodeLink *outlink;
+ GPUShader *shader;
+
+ outlink = material->outlink;
+ material->pass = GPU_generate_pass(&material->nodes, outlink,
+ &material->attribs, &material->builtins, material->ma->id.name);
+
+ if(!material->pass)
+ return 0;
+
+ gpu_material_set_attrib_id(material);
+
+ shader = GPU_pass_shader(material->pass);
+
+ if(material->builtins & GPU_VIEW_MATRIX)
+ material->viewmatloc = GPU_shader_get_uniform(shader, GPU_builtin_name(GPU_VIEW_MATRIX));
+ if(material->builtins & GPU_INVERSE_VIEW_MATRIX)
+ material->invviewmatloc = GPU_shader_get_uniform(shader, GPU_builtin_name(GPU_INVERSE_VIEW_MATRIX));
+ if(material->builtins & GPU_OBJECT_MATRIX)
+ material->obmatloc = GPU_shader_get_uniform(shader, GPU_builtin_name(GPU_OBJECT_MATRIX));
+ if(material->builtins & GPU_INVERSE_OBJECT_MATRIX)
+ material->invobmatloc = GPU_shader_get_uniform(shader, GPU_builtin_name(GPU_INVERSE_OBJECT_MATRIX));
+ if(material->builtins & GPU_OBCOLOR)
+ material->obcolloc = GPU_shader_get_uniform(shader, GPU_builtin_name(GPU_OBCOLOR));
+
+ return 1;
+ }
+
+ return 0;
+}
+
+void GPU_material_free(Material *ma)
+{
+ LinkData *link;
+ LinkData *nlink, *mlink, *next;
+
+ for(link=ma->gpumaterial.first; link; link=link->next) {
+ GPUMaterial *material = link->data;
+
+ if(material->pass)
+ GPU_pass_free(material->pass);
+
+ for(nlink=material->lamps.first; nlink; nlink=nlink->next) {
+ GPULamp *lamp = nlink->data;
+
+ for(mlink=lamp->materials.first; mlink; mlink=next) {
+ next = mlink->next;
+ if(mlink->data == ma)
+ BLI_freelinkN(&lamp->materials, mlink);
+ }
+ }
+
+ BLI_freelistN(&material->lamps);
+
+ MEM_freeN(material);
+ }
+
+ BLI_freelistN(&ma->gpumaterial);
+}
+
+void GPU_material_bind(GPUMaterial *material, int oblay, int viewlay, double time)
+{
+ if(material->pass) {
+ LinkData *nlink;
+ GPULamp *lamp;
+
+ /* handle layer lamps */
+ for(nlink=material->lamps.first; nlink; nlink=nlink->next) {
+ lamp= nlink->data;
+
+ if((lamp->lay & viewlay) && (!(lamp->mode & LA_LAYER) || (lamp->lay & oblay))) {
+ lamp->dynenergy = lamp->energy;
+ VECCOPY(lamp->dyncol, lamp->col);
+ }
+ else {
+ lamp->dynenergy = 0.0f;
+ lamp->dyncol[0]= lamp->dyncol[1]= lamp->dyncol[2] = 0.0f;
+ }
+ }
+
+ GPU_pass_bind(material->pass, time);
+ material->bound = 1;
+ }
+}
+
+void GPU_material_bind_uniforms(GPUMaterial *material, float obmat[][4], float viewmat[][4], float viewinv[][4], float obcol[4])
+{
+ if(material->pass) {
+ GPUShader *shader = GPU_pass_shader(material->pass);
+ LinkData *nlink;
+ GPULamp *lamp;
+ float invmat[4][4], col[4];
+
+ /* handle builtins */
+ if(material->builtins & GPU_VIEW_MATRIX) {
+ GPU_shader_uniform_vector(shader, material->viewmatloc, 16, 1, (float*)viewmat);
+ }
+ if(material->builtins & GPU_INVERSE_VIEW_MATRIX) {
+ GPU_shader_uniform_vector(shader, material->invviewmatloc, 16, 1, (float*)viewinv);
+ }
+ if(material->builtins & GPU_OBJECT_MATRIX) {
+ GPU_shader_uniform_vector(shader, material->obmatloc, 16, 1, (float*)obmat);
+ }
+ if(material->builtins & GPU_INVERSE_OBJECT_MATRIX) {
+ Mat4Invert(invmat, obmat);
+ GPU_shader_uniform_vector(shader, material->invobmatloc, 16, 1, (float*)invmat);
+ }
+ if(material->builtins & GPU_OBCOLOR) {
+ QUATCOPY(col, obcol);
+ CLAMP(col[3], 0.0f, 1.0f);
+ GPU_shader_uniform_vector(shader, material->obcolloc, 4, 1, col);
+ }
+
+ /* update lamps */
+ for(nlink=material->lamps.first; nlink; nlink=nlink->next) {
+ lamp= nlink->data;
+
+ if(material->dynproperty & DYN_LAMP_VEC) {
+ VECCOPY(lamp->dynvec, lamp->vec);
+ Normalize(lamp->dynvec);
+ VecMulf(lamp->dynvec, -1.0f);
+ Mat4Mul3Vecfl(viewmat, lamp->dynvec);
+ }
+
+ if(material->dynproperty & DYN_LAMP_CO) {
+ VECCOPY(lamp->dynco, lamp->co);
+ Mat4MulVecfl(viewmat, lamp->dynco);
+ }
+
+ if(material->dynproperty & DYN_LAMP_IMAT)
+ Mat4MulMat4(lamp->dynimat, viewinv, lamp->imat);
+ if(material->dynproperty & DYN_LAMP_PERSMAT)
+ Mat4MulMat4(lamp->dynpersmat, viewinv, lamp->persmat);
+ }
+
+ GPU_pass_update_uniforms(material->pass);
+ }
+}
+
+void GPU_material_unbind(GPUMaterial *material)
+{
+ if (material->pass) {
+ material->bound = 0;
+ GPU_pass_unbind(material->pass);
+ }
+}
+
+int GPU_material_bound(GPUMaterial *material)
+{
+ return material->bound;
+}
+
+void GPU_material_vertex_attributes(GPUMaterial *material, GPUVertexAttribs *attribs)
+{
+ *attribs = material->attribs;
+}
+
+void GPU_material_output_link(GPUMaterial *material, GPUNodeLink *link)
+{
+ if(!material->outlink)
+ material->outlink= link;
+}
+
+void GPU_material_enable_alpha(GPUMaterial *material)
+{
+ material->alpha= 1;
+}
+
+GPUBlendMode GPU_material_blend_mode(GPUMaterial *material, float obcol[3])
+{
+ if(material->alpha || (material->obcolalpha && obcol[3] < 1.0f))
+ return GPU_BLEND_ALPHA;
+ else
+ return GPU_BLEND_SOLID;
+}
+
+void gpu_material_add_node(GPUMaterial *material, GPUNode *node)
+{
+ BLI_addtail(&material->nodes, node);
+}
+
+/* Code generation */
+
+static GPUNodeLink *lamp_get_visibility(GPUMaterial *mat, GPULamp *lamp, GPUNodeLink **lv, GPUNodeLink **dist)
+{
+ GPUNodeLink *visifac, *inpr;
+
+ /* from get_lamp_visibility */
+ if(lamp->type==LA_SUN || lamp->type==LA_HEMI) {
+ mat->dynproperty |= DYN_LAMP_VEC;
+ GPU_link(mat, "lamp_visibility_sun_hemi", GPU_dynamic_uniform(lamp->dynvec), lv, dist, &visifac);
+ return visifac;
+ }
+ else {
+ mat->dynproperty |= DYN_LAMP_CO;
+ GPU_link(mat, "lamp_visibility_other", GPU_builtin(GPU_VIEW_POSITION), GPU_dynamic_uniform(lamp->dynco), lv, dist, &visifac);
+
+ if(lamp->type==LA_AREA)
+ return visifac;
+
+ switch(lamp->falloff_type)
+ {
+ case LA_FALLOFF_CONSTANT:
+ break;
+ case LA_FALLOFF_INVLINEAR:
+ GPU_link(mat, "lamp_falloff_invlinear", GPU_uniform(&lamp->dist), *dist, &visifac);
+ break;
+ case LA_FALLOFF_INVSQUARE:
+ GPU_link(mat, "lamp_falloff_invsquare", GPU_uniform(&lamp->dist), *dist, &visifac);
+ break;
+ case LA_FALLOFF_SLIDERS:
+ GPU_link(mat, "lamp_falloff_sliders", GPU_uniform(&lamp->dist), GPU_uniform(&lamp->att1), GPU_uniform(&lamp->att2), *dist, &visifac);
+ break;
+ case LA_FALLOFF_CURVE:
+ {
+ float *array;
+ int size;
+
+ curvemapping_table_RGBA(lamp->curfalloff, &array, &size);
+ GPU_link(mat, "lamp_falloff_curve", GPU_uniform(&lamp->dist), GPU_texture(size, array), *dist, &visifac);
+ }
+ break;
+ }
+
+ if(lamp->mode & LA_SPHERE)
+ GPU_link(mat, "lamp_visibility_sphere", GPU_uniform(&lamp->dist), *dist, visifac, &visifac);
+
+ if(lamp->type == LA_SPOT) {
+ if(lamp->mode & LA_SQUARE) {
+ mat->dynproperty |= DYN_LAMP_VEC|DYN_LAMP_IMAT;
+ GPU_link(mat, "lamp_visibility_spot_square", GPU_dynamic_uniform(lamp->dynvec), GPU_dynamic_uniform((float*)lamp->dynimat), *lv, &inpr);
+ }
+ else {
+ mat->dynproperty |= DYN_LAMP_VEC;
+ GPU_link(mat, "lamp_visibility_spot_circle", GPU_dynamic_uniform(lamp->dynvec), *lv, &inpr);
+ }
+
+ GPU_link(mat, "lamp_visibility_spot", GPU_uniform(&lamp->spotsi), GPU_uniform(&lamp->spotbl), inpr, visifac, &visifac);
+ }
+
+ GPU_link(mat, "lamp_visibility_clamp", visifac, &visifac);
+
+ return visifac;
+ }
+}
+
+#if 0
+static void area_lamp_vectors(LampRen *lar)
+{
+ float xsize= 0.5*lar->area_size, ysize= 0.5*lar->area_sizey, multifac;
+
+ /* make it smaller, so area light can be multisampled */
+ multifac= 1.0f/sqrt((float)lar->ray_totsamp);
+ xsize *= multifac;
+ ysize *= multifac;
+
+ /* corner vectors */
+ lar->area[0][0]= lar->co[0] - xsize*lar->mat[0][0] - ysize*lar->mat[1][0];
+ lar->area[0][1]= lar->co[1] - xsize*lar->mat[0][1] - ysize*lar->mat[1][1];
+ lar->area[0][2]= lar->co[2] - xsize*lar->mat[0][2] - ysize*lar->mat[1][2];
+
+ /* corner vectors */
+ lar->area[1][0]= lar->co[0] - xsize*lar->mat[0][0] + ysize*lar->mat[1][0];
+ lar->area[1][1]= lar->co[1] - xsize*lar->mat[0][1] + ysize*lar->mat[1][1];
+ lar->area[1][2]= lar->co[2] - xsize*lar->mat[0][2] + ysize*lar->mat[1][2];
+
+ /* corner vectors */
+ lar->area[2][0]= lar->co[0] + xsize*lar->mat[0][0] + ysize*lar->mat[1][0];
+ lar->area[2][1]= lar->co[1] + xsize*lar->mat[0][1] + ysize*lar->mat[1][1];
+ lar->area[2][2]= lar->co[2] + xsize*lar->mat[0][2] + ysize*lar->mat[1][2];
+
+ /* corner vectors */
+ lar->area[3][0]= lar->co[0] + xsize*lar->mat[0][0] - ysize*lar->mat[1][0];
+ lar->area[3][1]= lar->co[1] + xsize*lar->mat[0][1] - ysize*lar->mat[1][1];
+ lar->area[3][2]= lar->co[2] + xsize*lar->mat[0][2] - ysize*lar->mat[1][2];
+ /* only for correction button size, matrix size works on energy */
+ lar->areasize= lar->dist*lar->dist/(4.0*xsize*ysize);
+}
+#endif
+
+static void ramp_blend(GPUMaterial *mat, GPUNodeLink *fac, GPUNodeLink *col1, GPUNodeLink *col2, int type, GPUNodeLink **outcol)
+{
+ static char *names[] = {"mix_blend", "mix_add", "mix_mult", "mix_sub",
+ "mix_screen", "mix_div", "mix_diff", "mix_dark", "mix_light",
+ "mix_overlay", "mix_dodge", "mix_burn", "mix_hue", "mix_sat",
+ "mix_val", "mix_color"};
+
+ GPU_link(mat, names[type], fac, col1, col2, outcol);
+}
+
+static void do_colorband_blend(GPUMaterial *mat, ColorBand *coba, GPUNodeLink *fac, float rampfac, int type, GPUNodeLink *incol, GPUNodeLink **outcol)
+{
+ GPUNodeLink *tmp, *alpha, *col;
+ float *array;
+ int size;
+
+ /* do colorband */
+ colorband_table_RGBA(coba, &array, &size);
+ GPU_link(mat, "valtorgb", fac, GPU_texture(size, array), &col, &tmp);
+
+ /* use alpha in fac */
+ GPU_link(mat, "mtex_alpha_from_col", col, &alpha);
+ GPU_link(mat, "math_multiply", alpha, GPU_uniform(&rampfac), &fac);
+
+ /* blending method */
+ ramp_blend(mat, fac, incol, col, type, outcol);
+}
+
+static void ramp_diffuse_result(GPUShadeInput *shi, GPUNodeLink **diff)
+{
+ Material *ma= shi->mat;
+ GPUMaterial *mat= shi->gpumat;
+ GPUNodeLink *fac;
+
+ if(!(G.fileflags & G_FILE_GLSL_NO_RAMPS)) {
+ if(ma->ramp_col) {
+ if(ma->rampin_col==MA_RAMP_IN_RESULT) {
+ GPU_link(mat, "ramp_rgbtobw", *diff, &fac);
+
+ /* colorband + blend */
+ do_colorband_blend(mat, ma->ramp_col, fac, ma->rampfac_col, ma->rampblend_col, *diff, diff);
+ }
+ }
+ }
+}
+
+static void add_to_diffuse(GPUMaterial *mat, Material *ma, GPUShadeInput *shi, GPUNodeLink *is, GPUNodeLink *rgb, GPUNodeLink **diff)
+{
+ GPUNodeLink *fac, *tmp, *addcol;
+
+ if(!(G.fileflags & G_FILE_GLSL_NO_RAMPS) &&
+ ma->ramp_col && (ma->mode & MA_RAMP_COL)) {
+ /* MA_RAMP_IN_RESULT is exceptional */
+ if(ma->rampin_col==MA_RAMP_IN_RESULT) {
+ addcol = shi->rgb;
+ }
+ else {
+ /* input */
+ switch(ma->rampin_col) {
+ case MA_RAMP_IN_ENERGY:
+ GPU_link(mat, "ramp_rgbtobw", rgb, &fac);
+ break;
+ case MA_RAMP_IN_SHADER:
+ fac= is;
+ break;
+ case MA_RAMP_IN_NOR:
+ GPU_link(mat, "vec_math_dot", shi->view, shi->vn, &tmp, &fac);
+ break;
+ default:
+ GPU_link(mat, "set_value_zero", &fac);
+ break;
+ }
+
+ /* colorband + blend */
+ do_colorband_blend(mat, ma->ramp_col, fac, ma->rampfac_col, ma->rampblend_col, shi->rgb, &addcol);
+ }
+ }
+ else
+ addcol = shi->rgb;
+
+ /* output to */
+ GPU_link(mat, "shade_madd", *diff, rgb, addcol, diff);
+}
+
+static void ramp_spec_result(GPUShadeInput *shi, GPUNodeLink **spec)
+{
+ Material *ma= shi->mat;
+ GPUMaterial *mat= shi->gpumat;
+ GPUNodeLink *fac;
+
+ if(!(G.fileflags & G_FILE_GLSL_NO_RAMPS) &&
+ ma->ramp_spec && ma->rampin_spec==MA_RAMP_IN_RESULT) {
+ GPU_link(mat, "ramp_rgbtobw", *spec, &fac);
+
+ /* colorband + blend */
+ do_colorband_blend(mat, ma->ramp_spec, fac, ma->rampfac_spec, ma->rampblend_spec, *spec, spec);
+ }
+}
+
+static void do_specular_ramp(GPUShadeInput *shi, GPUNodeLink *is, GPUNodeLink *t, GPUNodeLink **spec)
+{
+ Material *ma= shi->mat;
+ GPUMaterial *mat= shi->gpumat;
+ GPUNodeLink *fac, *tmp;
+
+ *spec = shi->specrgb;
+
+ /* MA_RAMP_IN_RESULT is exception */
+ if(ma->ramp_spec && (ma->rampin_spec!=MA_RAMP_IN_RESULT)) {
+
+ /* input */
+ switch(ma->rampin_spec) {
+ case MA_RAMP_IN_ENERGY:
+ fac = t;
+ break;
+ case MA_RAMP_IN_SHADER:
+ fac = is;
+ break;
+ case MA_RAMP_IN_NOR:
+ GPU_link(mat, "vec_math_dot", shi->view, shi->vn, &tmp, &fac);
+ break;
+ default:
+ GPU_link(mat, "set_value_zero", &fac);
+ break;
+ }
+
+ /* colorband + blend */
+ do_colorband_blend(mat, ma->ramp_spec, fac, ma->rampfac_spec, ma->rampblend_spec, *spec, spec);
+ }
+}
+
+void add_user_list(ListBase *list, void *data)
+{
+ LinkData *link = MEM_callocN(sizeof(LinkData), "GPULinkData");
+ link->data = data;
+ BLI_addtail(list, link);
+}
+
+static void shade_one_light(GPUShadeInput *shi, GPUShadeResult *shr, GPULamp *lamp)
+{
+ Material *ma= shi->mat;
+ GPUMaterial *mat= shi->gpumat;
+ GPUNodeLink *lv, *dist, *visifac, *is, *inp, *i, *vn, *view;
+ GPUNodeLink *outcol, *specfac, *t, *shadfac;
+ float one = 1.0f;
+
+ if((lamp->mode & LA_ONLYSHADOW) && !(ma->mode & MA_SHADOW))
+ return;
+
+ vn= shi->vn;
+ view= shi->view;
+
+ visifac= lamp_get_visibility(mat, lamp, &lv, &dist);
+
+ /*if(ma->mode & MA_TANGENT_V)
+ GPU_link(mat, "shade_tangent_v", lv, GPU_attribute(CD_TANGENT, ""), &vn);*/
+
+ GPU_link(mat, "shade_inp", vn, lv, &inp);
+
+ if(lamp->mode & LA_NO_DIFF) {
+ GPU_link(mat, "shade_is_no_diffuse", &is);
+ }
+ else if(lamp->type == LA_HEMI) {
+ GPU_link(mat, "shade_is_hemi", inp, &is);
+ }
+ else {
+ if(lamp->type == LA_AREA) {
+ float area[4][4], areasize;
+
+ memset(&area, 0, sizeof(area));
+ memset(&areasize, 0, sizeof(areasize));
+ mat->dynproperty |= DYN_LAMP_VEC|DYN_LAMP_CO;
+ GPU_link(mat, "shade_inp_area", GPU_builtin(GPU_VIEW_POSITION), GPU_dynamic_uniform(lamp->dynco), GPU_dynamic_uniform(lamp->dynvec), vn, GPU_uniform((float*)area),
+ GPU_uniform(&areasize), GPU_uniform(&lamp->k), &inp);
+ }
+
+ is= inp; /* Lambert */
+
+ if(!(G.fileflags & G_FILE_GLSL_NO_SHADERS)) {
+ if(ma->diff_shader==MA_DIFF_ORENNAYAR)
+ GPU_link(mat, "shade_diffuse_oren_nayer", inp, vn, lv, view, GPU_uniform(&ma->roughness), &is);
+ else if(ma->diff_shader==MA_DIFF_TOON)
+ GPU_link(mat, "shade_diffuse_toon", vn, lv, view, GPU_uniform(&ma->param[0]), GPU_uniform(&ma->param[1]), &is);
+ else if(ma->diff_shader==MA_DIFF_MINNAERT)
+ GPU_link(mat, "shade_diffuse_minnaert", inp, vn, view, GPU_uniform(&ma->darkness), &is);
+ else if(ma->diff_shader==MA_DIFF_FRESNEL)
+ GPU_link(mat, "shade_diffuse_fresnel", vn, lv, view, GPU_uniform(&ma->param[0]), GPU_uniform(&ma->param[1]), &is);
+ }
+ }
+
+ if(!(G.fileflags & G_FILE_GLSL_NO_SHADERS))
+ if(ma->shade_flag & MA_CUBIC)
+ GPU_link(mat, "shade_cubic", is, &is);
+
+ i = is;
+ GPU_link(mat, "shade_visifac", i, visifac, shi->refl, &i);
+
+ vn = shi->vn;
+ /*if(ma->mode & MA_TANGENT_VN)
+ GPU_link(mat, "shade_tangent_v_spec", GPU_attribute(CD_TANGENT, ""), &vn);*/
+
+ /* this replaces if(i > 0.0) conditional until that is supported */
+ // done in shade_visifac now, GPU_link(mat, "mtex_value_clamp_positive", i, &i);
+
+ if((ma->mode & MA_SHADOW) && GPU_lamp_has_shadow_buffer(lamp)) {
+ if(!(G.fileflags & G_FILE_GLSL_NO_SHADOWS)) {
+ mat->dynproperty |= DYN_LAMP_PERSMAT;
+
+ GPU_link(mat, "test_shadowbuf",
+ GPU_builtin(GPU_VIEW_POSITION),
+ GPU_dynamic_texture(lamp->tex),
+ GPU_dynamic_uniform((float*)lamp->dynpersmat),
+ GPU_uniform(&lamp->bias), inp, &shadfac);
+
+ if(lamp->mode & LA_ONLYSHADOW) {
+ GPU_link(mat, "shade_only_shadow", i, shadfac,
+ GPU_dynamic_uniform(&lamp->dynenergy), &shadfac);
+
+ if(!(lamp->mode & LA_NO_DIFF))
+ GPU_link(mat, "shade_only_shadow_diffuse", shadfac, shi->rgb,
+ shr->diff, &shr->diff);
+
+ if(!(lamp->mode & LA_NO_SPEC))
+ GPU_link(mat, "shade_only_shadow_specular", shadfac, shi->specrgb,
+ shr->spec, &shr->spec);
+
+ add_user_list(&mat->lamps, lamp);
+ add_user_list(&lamp->materials, ma);
+ return;
+ }
+
+ GPU_link(mat, "math_multiply", i, shadfac, &i);
+ }
+ }
+ else if((G.fileflags & G_FILE_GLSL_NO_SHADOWS) && (lamp->mode & LA_ONLYSHADOW)) {
+ add_user_list(&mat->lamps, lamp);
+ add_user_list(&lamp->materials, ma);
+ return;
+ }
+ else
+ GPU_link(mat, "set_value", GPU_uniform(&one), &shadfac);
+
+ if(GPU_link_changed(shi->refl) || ma->ref != 0.0f) {
+ if(!(lamp->mode & LA_NO_DIFF)) {
+ GPUNodeLink *rgb;
+ GPU_link(mat, "shade_mul_value", i, GPU_dynamic_uniform(lamp->dyncol), &rgb);
+ add_to_diffuse(mat, ma, shi, is, rgb, &shr->diff);
+ }
+ }
+
+ if(G.fileflags & G_FILE_GLSL_NO_SHADERS);
+ else if(!(lamp->mode & LA_NO_SPEC) && !(lamp->mode & LA_ONLYSHADOW) &&
+ (GPU_link_changed(shi->spec) || ma->spec != 0.0f)) {
+ if(lamp->type == LA_HEMI) {
+ GPU_link(mat, "shade_hemi_spec", vn, lv, view, GPU_uniform(&ma->spec), shi->har, visifac, &t);
+ GPU_link(mat, "shade_add_spec", t, GPU_dynamic_uniform(lamp->dyncol), shi->specrgb, &outcol);
+ GPU_link(mat, "shade_add", shr->spec, outcol, &shr->spec);
+ }
+ else {
+ if(ma->spec_shader==MA_SPEC_PHONG)
+ GPU_link(mat, "shade_phong_spec", vn, lv, view, shi->har, &specfac);
+ else if(ma->spec_shader==MA_SPEC_COOKTORR)
+ GPU_link(mat, "shade_cooktorr_spec", vn, lv, view, shi->har, &specfac);
+ else if(ma->spec_shader==MA_SPEC_BLINN)
+ GPU_link(mat, "shade_blinn_spec", vn, lv, view, GPU_uniform(&ma->refrac), shi->har, &specfac);
+ else if(ma->spec_shader==MA_SPEC_WARDISO)
+ GPU_link(mat, "shade_wardiso_spec", vn, lv, view, GPU_uniform(&ma->rms), &specfac);
+ else
+ GPU_link(mat, "shade_toon_spec", vn, lv, view, GPU_uniform(&ma->param[2]), GPU_uniform(&ma->param[3]), &specfac);
+
+ if(lamp->type==LA_AREA)
+ GPU_link(mat, "shade_spec_area_inp", specfac, inp, &specfac);
+
+ GPU_link(mat, "shade_spec_t", shadfac, shi->spec, visifac, specfac, &t);
+
+ if(ma->mode & MA_RAMP_SPEC) {
+ GPUNodeLink *spec;
+ do_specular_ramp(shi, specfac, t, &spec);
+ GPU_link(mat, "shade_add_spec", t, GPU_dynamic_uniform(lamp->dyncol), spec, &outcol);
+ GPU_link(mat, "shade_add", shr->spec, outcol, &shr->spec);
+ }
+ else {
+ GPU_link(mat, "shade_add_spec", t, GPU_dynamic_uniform(lamp->dyncol), shi->specrgb, &outcol);
+ GPU_link(mat, "shade_add", shr->spec, outcol, &shr->spec);
+ }
+ }
+ }
+
+ add_user_list(&mat->lamps, lamp);
+ add_user_list(&lamp->materials, ma);
+}
+
+static void material_lights(GPUShadeInput *shi, GPUShadeResult *shr)
+{
+ Base *base;
+ Object *ob;
+ Scene *sce;
+ GPULamp *lamp;
+
+ for(SETLOOPER(shi->gpumat->scene, base)) {
+ ob= base->object;
+
+ if(ob->type==OB_LAMP) {
+ lamp = GPU_lamp_from_blender(shi->gpumat->scene, ob, NULL);
+ if(lamp)
+ shade_one_light(shi, shr, lamp);
+ }
+
+ if (ob->transflag & OB_DUPLI) {
+ DupliObject *dob;
+ ListBase *lb = object_duplilist(shi->gpumat->scene, ob);
+
+ for(dob=lb->first; dob; dob=dob->next) {
+ Object *ob = dob->ob;
+
+ if(ob->type==OB_LAMP) {
+ Mat4CpyMat4(ob->obmat, dob->mat);
+
+ lamp = GPU_lamp_from_blender(shi->gpumat->scene, ob, base->object);
+ if(lamp)
+ shade_one_light(shi, shr, lamp);
+ }
+ }
+
+ free_object_duplilist(lb);
+ }
+ }
+}
+
+static void texture_rgb_blend(GPUMaterial *mat, GPUNodeLink *tex, GPUNodeLink *out, GPUNodeLink *fact, GPUNodeLink *facg, int blendtype, GPUNodeLink **in)
+{
+ switch(blendtype) {
+ case MTEX_BLEND:
+ GPU_link(mat, "mtex_rgb_blend", out, tex, fact, facg, in);
+ break;
+ case MTEX_MUL:
+ GPU_link(mat, "mtex_rgb_mul", out, tex, fact, facg, in);
+ break;
+ case MTEX_SCREEN:
+ GPU_link(mat, "mtex_rgb_screen", out, tex, fact, facg, in);
+ break;
+ case MTEX_OVERLAY:
+ GPU_link(mat, "mtex_rgb_overlay", out, tex, fact, facg, in);
+ break;
+ case MTEX_SUB:
+ GPU_link(mat, "mtex_rgb_sub", out, tex, fact, facg, in);
+ break;
+ case MTEX_ADD:
+ GPU_link(mat, "mtex_rgb_add", out, tex, fact, facg, in);
+ break;
+ case MTEX_DIV:
+ GPU_link(mat, "mtex_rgb_div", out, tex, fact, facg, in);
+ break;
+ case MTEX_DIFF:
+ GPU_link(mat, "mtex_rgb_diff", out, tex, fact, facg, in);
+ break;
+ case MTEX_DARK:
+ GPU_link(mat, "mtex_rgb_dark", out, tex, fact, facg, in);
+ break;
+ case MTEX_LIGHT:
+ GPU_link(mat, "mtex_rgb_light", out, tex, fact, facg, in);
+ break;
+ case MTEX_BLEND_HUE:
+ GPU_link(mat, "mtex_rgb_hue", out, tex, fact, facg, in);
+ break;
+ case MTEX_BLEND_SAT:
+ GPU_link(mat, "mtex_rgb_sat", out, tex, fact, facg, in);
+ break;
+ case MTEX_BLEND_VAL:
+ GPU_link(mat, "mtex_rgb_val", out, tex, fact, facg, in);
+ break;
+ case MTEX_BLEND_COLOR:
+ GPU_link(mat, "mtex_rgb_color", out, tex, fact, facg, in);
+ break;
+ default:
+ GPU_link(mat, "set_rgb_zero", &in);
+ break;
+ }
+}
+
+static void texture_value_blend(GPUMaterial *mat, GPUNodeLink *tex, GPUNodeLink *out, GPUNodeLink *fact, GPUNodeLink *facg, int blendtype, int flip, GPUNodeLink **in)
+{
+ float flipf = (flip)? 1.0f: 0.0;
+
+ switch(blendtype) {
+ case MTEX_BLEND:
+ GPU_link(mat, "mtex_value_blend", out, tex, fact, facg, GPU_uniform(&flipf), in);
+ break;
+ case MTEX_MUL:
+ GPU_link(mat, "mtex_value_mul", out, tex, fact, facg, GPU_uniform(&flipf), in);
+ break;
+ case MTEX_SCREEN:
+ GPU_link(mat, "mtex_value_screen", out, tex, fact, facg, GPU_uniform(&flipf), in);
+ break;
+ case MTEX_SUB:
+ GPU_link(mat, "mtex_value_sub", out, tex, fact, facg, GPU_uniform(&flipf), in);
+ break;
+ case MTEX_ADD:
+ GPU_link(mat, "mtex_value_add", out, tex, fact, facg, GPU_uniform(&flipf), in);
+ break;
+ case MTEX_DIV:
+ GPU_link(mat, "mtex_value_div", out, tex, fact, facg, GPU_uniform(&flipf), in);
+ break;
+ case MTEX_DIFF:
+ GPU_link(mat, "mtex_value_diff", out, tex, fact, facg, GPU_uniform(&flipf), in);
+ break;
+ case MTEX_DARK:
+ GPU_link(mat, "mtex_value_dark", out, tex, fact, facg, GPU_uniform(&flipf), in);
+ break;
+ case MTEX_LIGHT:
+ GPU_link(mat, "mtex_value_light", out, tex, fact, facg, GPU_uniform(&flipf), in);
+ break;
+ default:
+ GPU_link(mat, "set_value_zero", &in);
+ break;
+ }
+}
+
+static void do_material_tex(GPUShadeInput *shi)
+{
+ Material *ma= shi->mat;
+ GPUMaterial *mat= shi->gpumat;
+ MTex *mtex;
+ Tex *tex;
+ GPUNodeLink *texco, *tin, *trgb, *tnor, *tcol, *stencil, *tnorfac;
+ GPUNodeLink *texco_norm, *texco_orco, *texco_object, *texco_tangent;
+ GPUNodeLink *texco_global, *texco_uv = NULL;
+ GPUNodeLink *colfac, *newnor, *varfac, *orn;
+ char *lastuvname = NULL;
+ float one = 1.0f, norfac, ofs[3];
+ int tex_nr, rgbnor, talpha;
+
+ GPU_link(mat, "set_value", GPU_uniform(&one), &stencil);
+
+ GPU_link(mat, "texco_norm", GPU_builtin(GPU_VIEW_NORMAL), &texco_norm);
+ GPU_link(mat, "texco_orco", GPU_attribute(CD_ORCO, ""), &texco_orco);
+ GPU_link(mat, "texco_object", GPU_builtin(GPU_INVERSE_VIEW_MATRIX),
+ GPU_builtin(GPU_INVERSE_OBJECT_MATRIX),
+ GPU_builtin(GPU_VIEW_POSITION), &texco_object);
+ GPU_link(mat, "texco_tangent", GPU_attribute(CD_TANGENT, ""), &texco_tangent);
+ GPU_link(mat, "texco_global", GPU_builtin(GPU_INVERSE_VIEW_MATRIX),
+ GPU_builtin(GPU_VIEW_POSITION), &texco_global);
+
+ orn= texco_norm;
+
+ /* go over texture slots */
+ for(tex_nr=0; tex_nr<MAX_MTEX; tex_nr++) {
+ /* separate tex switching */
+ if(ma->septex & (1<<tex_nr)) continue;
+
+ if(ma->mtex[tex_nr]) {
+ mtex= ma->mtex[tex_nr];
+
+ tex= mtex->tex;
+ if(tex==0) continue;
+
+ /* which coords */
+ if(mtex->texco==TEXCO_ORCO)
+ texco= texco_orco;
+ else if(mtex->texco==TEXCO_OBJECT)
+ texco= texco_object;
+ else if(mtex->texco==TEXCO_NORM)
+ texco= texco_norm;
+ else if(mtex->texco==TEXCO_TANGENT)
+ texco= texco_object;
+ else if(mtex->texco==TEXCO_GLOB)
+ texco= texco_global;
+ else if(mtex->texco==TEXCO_REFL)
+ texco= shi->ref;
+ else if(mtex->texco==TEXCO_UV) {
+ if(1) { //!(texco_uv && strcmp(mtex->uvname, lastuvname) == 0)) {
+ GPU_link(mat, "texco_uv", GPU_attribute(CD_MTFACE, mtex->uvname), &texco_uv);
+ lastuvname = mtex->uvname;
+ }
+ texco= texco_uv;
+ }
+ else
+ continue;
+
+ /* in case of uv, this would just undo a multiplication in texco_uv */
+ if(mtex->texco != TEXCO_UV)
+ GPU_link(mat, "mtex_2d_mapping", texco, &texco);
+
+ if(mtex->size[0] != 1.0f || mtex->size[1] != 1.0f || mtex->size[2] != 1.0f)
+ GPU_link(mat, "mtex_mapping_size", texco, GPU_uniform(mtex->size), &texco);
+
+ ofs[0] = mtex->ofs[0] + 0.5f - 0.5f*mtex->size[0];
+ ofs[1] = mtex->ofs[1] + 0.5f - 0.5f*mtex->size[1];
+ ofs[2] = 0.0f;
+ if(ofs[0] != 0.0f || ofs[1] != 0.0f || ofs[2] != 0.0f)
+ GPU_link(mat, "mtex_mapping_ofs", texco, GPU_uniform(ofs), &texco);
+
+ talpha = 0;
+ rgbnor = 0;
+
+ if(tex && tex->type == TEX_IMAGE && tex->ima) {
+ GPU_link(mat, "mtex_image", texco, GPU_image(tex->ima, NULL), &tin, &trgb, &tnor);
+ rgbnor= TEX_RGB;
+
+ if(tex->imaflag & TEX_USEALPHA)
+ talpha= 1;
+ }
+ else continue;
+
+ /* texture output */
+ if((rgbnor & TEX_RGB) && (mtex->texflag & MTEX_RGBTOINT)) {
+ GPU_link(mat, "mtex_rgbtoint", trgb, &tin);
+ rgbnor -= TEX_RGB;
+ }
+
+ if(mtex->texflag & MTEX_NEGATIVE) {
+ if(rgbnor & TEX_RGB)
+ GPU_link(mat, "mtex_rgb_invert", trgb, &trgb);
+ else
+ GPU_link(mat, "mtex_value_invert", tin, &tin);
+ }
+
+ if(mtex->texflag & MTEX_STENCIL) {
+ if(rgbnor & TEX_RGB)
+ GPU_link(mat, "mtex_rgb_stencil", stencil, trgb, &stencil, &trgb);
+ else
+ GPU_link(mat, "mtex_value_stencil", stencil, tin, &stencil, &tin);
+ }
+
+ /* mapping */
+ if(mtex->mapto & (MAP_COL+MAP_COLSPEC)) {
+ /* stencil maps on the texture control slider, not texture intensity value */
+ if(mtex->colfac == 1.0f)
+ colfac = stencil;
+ else
+ GPU_link(mat, "math_multiply", GPU_uniform(&mtex->colfac), stencil, &colfac);
+
+ if((rgbnor & TEX_RGB)==0) {
+ GPU_link(mat, "set_rgb", GPU_uniform(&mtex->r), &tcol);
+ }
+ else {
+ GPU_link(mat, "set_rgba", trgb, &tcol);
+
+ if(mtex->mapto & MAP_ALPHA)
+ GPU_link(mat, "set_value", stencil, &tin);
+ else if(talpha)
+ GPU_link(mat, "mtex_alpha_from_col", trgb, &tin);
+ else
+ GPU_link(mat, "set_value_one", &tin);
+ }
+
+ if(mtex->mapto & MAP_COL)
+ texture_rgb_blend(mat, tcol, shi->rgb, tin, colfac, mtex->blendtype, &shi->rgb);
+
+ if(!(G.fileflags & G_FILE_GLSL_NO_EXTRA_TEX) && (mtex->mapto & MAP_COLSPEC))
+ texture_rgb_blend(mat, tcol, shi->specrgb, tin, colfac, mtex->blendtype, &shi->specrgb);
+ }
+
+ if(!(G.fileflags & G_FILE_GLSL_NO_EXTRA_TEX) && (mtex->mapto & MAP_NORM)) {
+ if(mtex->maptoneg & MAP_NORM) tex->norfac= -mtex->norfac;
+ else tex->norfac= mtex->norfac;
+
+ if((tex->type==TEX_IMAGE) && (tex->imaflag & TEX_NORMALMAP)) {
+ tex->norfac = mtex->norfac;
+
+ if(mtex->maptoneg & MAP_NORM)
+ GPU_link(mat, "mtex_negate_texnormal", tnor, &tnor);
+
+ if(mtex->normapspace == MTEX_NSPACE_TANGENT)
+ GPU_link(mat, "mtex_nspace_tangent", GPU_attribute(CD_TANGENT, ""), shi->vn, tnor, &newnor);
+ else
+ newnor = tnor;
+
+ norfac = MIN2(mtex->norfac, 1.0);
+ if(norfac == 1.0f && !GPU_link_changed(stencil)) {
+ shi->vn = newnor;
+ }
+ else {
+ tnorfac = GPU_uniform(&norfac);
+
+ if(GPU_link_changed(stencil))
+ GPU_link(mat, "math_multiply", tnorfac, stencil, &tnorfac);
+
+ GPU_link(mat, "mtex_blend_normal", tnorfac, shi->vn, newnor, &shi->vn);
+ }
+ }
+
+ GPU_link(mat, "vec_math_negate", shi->vn, &orn);
+ GPU_link(mat, "texco_refl", shi->vn, shi->view, &shi->ref);
+ }
+
+ if((mtex->mapto & MAP_VARS)) {
+ if(mtex->varfac == 1.0f)
+ varfac = stencil;
+ else
+ GPU_link(mat, "math_multiply", GPU_uniform(&mtex->varfac), stencil, &varfac);
+
+ if(rgbnor & TEX_RGB) {
+ if(talpha)
+ GPU_link(mat, "mtex_alpha_from_col", trgb, &tin);
+ else
+ GPU_link(mat, "mtex_rgbtoint", trgb, &tin);
+ }
+
+ if(!(G.fileflags & G_FILE_GLSL_NO_EXTRA_TEX) && mtex->mapto & MAP_REF) {
+ int flip= mtex->maptoneg & MAP_REF;
+ texture_value_blend(mat, GPU_uniform(&mtex->def_var), shi->refl, tin, varfac, mtex->blendtype, flip, &shi->refl);
+ GPU_link(mat, "mtex_value_clamp_positive", shi->refl, &shi->refl);
+ }
+ if(!(G.fileflags & G_FILE_GLSL_NO_EXTRA_TEX) && mtex->mapto & MAP_SPEC) {
+ int flip= mtex->maptoneg & MAP_SPEC;
+ texture_value_blend(mat, GPU_uniform(&mtex->def_var), shi->spec, tin, varfac, mtex->blendtype, flip, &shi->spec);
+ GPU_link(mat, "mtex_value_clamp_positive", shi->spec, &shi->spec);
+ }
+ if(!(G.fileflags & G_FILE_GLSL_NO_EXTRA_TEX) && mtex->mapto & MAP_EMIT) {
+ int flip= mtex->maptoneg & MAP_EMIT;
+ texture_value_blend(mat, GPU_uniform(&mtex->def_var), shi->emit, tin, varfac, mtex->blendtype, flip, &shi->emit);
+ GPU_link(mat, "mtex_value_clamp_positive", shi->emit, &shi->emit);
+ }
+ if(!(G.fileflags & G_FILE_GLSL_NO_EXTRA_TEX) && mtex->mapto & MAP_HAR) {
+ int flip= mtex->maptoneg & MAP_HAR;
+ GPU_link(mat, "mtex_har_divide", shi->har, &shi->har);
+ texture_value_blend(mat, GPU_uniform(&mtex->def_var), shi->har, tin, varfac, mtex->blendtype, flip, &shi->har);
+ GPU_link(mat, "mtex_har_multiply_clamp", shi->har, &shi->har);
+ }
+ if(mtex->mapto & MAP_ALPHA) {
+ int flip= mtex->maptoneg & MAP_ALPHA;
+ texture_value_blend(mat, GPU_uniform(&mtex->def_var), shi->alpha, tin, varfac, mtex->blendtype, flip, &shi->alpha);
+ GPU_link(mat, "mtex_value_clamp", shi->alpha, &shi->alpha);
+ }
+ if(!(G.fileflags & G_FILE_GLSL_NO_EXTRA_TEX) && mtex->mapto & MAP_AMB) {
+ int flip= mtex->maptoneg & MAP_AMB;
+ texture_value_blend(mat, GPU_uniform(&mtex->def_var), shi->amb, tin, varfac, mtex->blendtype, flip, &shi->amb);
+ GPU_link(mat, "mtex_value_clamp", shi->amb, &shi->amb);
+ }
+ }
+ }
+ }
+}
+
+void GPU_shadeinput_set(GPUMaterial *mat, Material *ma, GPUShadeInput *shi)
+{
+ float hard = ma->har;
+
+ memset(shi, 0, sizeof(*shi));
+
+ shi->gpumat = mat;
+ shi->mat = ma;
+
+ GPU_link(mat, "set_rgb", GPU_uniform(&ma->r), &shi->rgb);
+ GPU_link(mat, "set_rgb", GPU_uniform(&ma->specr), &shi->specrgb);
+ GPU_link(mat, "shade_norm", GPU_builtin(GPU_VIEW_NORMAL), &shi->vn);
+ GPU_link(mat, "set_value", GPU_uniform(&ma->alpha), &shi->alpha);
+ GPU_link(mat, "set_value", GPU_uniform(&ma->ref), &shi->refl);
+ GPU_link(mat, "set_value", GPU_uniform(&ma->spec), &shi->spec);
+ GPU_link(mat, "set_value", GPU_uniform(&ma->emit), &shi->emit);
+ GPU_link(mat, "set_value", GPU_uniform(&hard), &shi->har);
+ GPU_link(mat, "set_value", GPU_uniform(&ma->amb), &shi->amb);
+ GPU_link(mat, "shade_view", GPU_builtin(GPU_VIEW_POSITION), &shi->view);
+ GPU_link(mat, "vcol_attribute", GPU_attribute(CD_MCOL, ""), &shi->vcol);
+ GPU_link(mat, "texco_refl", shi->vn, shi->view, &shi->ref);
+}
+
+void GPU_shaderesult_set(GPUShadeInput *shi, GPUShadeResult *shr)
+{
+ GPUMaterial *mat= shi->gpumat;
+ GPUNodeLink *emit, *ulinfac, *ulogfac, *mistfac;
+ Material *ma= shi->mat;
+ World *world= mat->scene->world;
+ float linfac, logfac, misttype;
+
+ memset(shr, 0, sizeof(*shr));
+
+ if(ma->mode & MA_VERTEXCOLP)
+ shi->rgb = shi->vcol;
+
+ do_material_tex(shi);
+
+ if(ma->mode & MA_ZTRA)
+ GPU_material_enable_alpha(mat);
+
+ if((G.fileflags & G_FILE_GLSL_NO_LIGHTS) || (ma->mode & MA_SHLESS)) {
+ shr->combined = shi->rgb;
+ shr->alpha = shi->alpha;
+ }
+ else {
+ if(GPU_link_changed(shi->emit) || ma->emit != 0.0f) {
+ if((ma->mode & (MA_VERTEXCOL|MA_VERTEXCOLP))== MA_VERTEXCOL) {
+ GPU_link(mat, "shade_add", shi->emit, shi->vcol, &emit);
+ GPU_link(mat, "shade_mul", emit, shi->rgb, &shr->diff);
+ }
+ else
+ GPU_link(mat, "shade_mul_value", shi->emit, shi->rgb, &shr->diff);
+ }
+ else
+ GPU_link(mat, "set_rgb_zero", &shr->diff);
+
+ GPU_link(mat, "set_rgb_zero", &shr->spec);
+
+ material_lights(shi, shr);
+
+ shr->combined = shr->diff;
+ shr->alpha = shi->alpha;
+
+ if(world) {
+ /* exposure correction */
+ if(world->exp!=0.0f || world->range!=1.0f) {
+ linfac= 1.0 + pow((2.0*world->exp + 0.5), -10);
+ logfac= log((linfac-1.0)/linfac)/world->range;
+
+ GPU_link(mat, "set_value", GPU_uniform(&linfac), &ulinfac);
+ GPU_link(mat, "set_value", GPU_uniform(&logfac), &ulogfac);
+
+ GPU_link(mat, "shade_exposure_correct", shr->combined,
+ ulinfac, ulogfac, &shr->combined);
+ GPU_link(mat, "shade_exposure_correct", shr->spec,
+ ulinfac, ulogfac, &shr->spec);
+ }
+
+ /* ambient color */
+ if(world->ambr!=0.0f || world->ambg!=0.0f || world->ambb!=0.0f) {
+ if(GPU_link_changed(shi->amb) || ma->amb != 0.0f)
+ GPU_link(mat, "shade_maddf", shr->combined, GPU_uniform(&ma->amb),
+ GPU_uniform(&world->ambr), &shr->combined);
+ }
+ }
+
+ if(ma->mode & MA_RAMP_COL) ramp_diffuse_result(shi, &shr->combined);
+ if(ma->mode & MA_RAMP_SPEC) ramp_spec_result(shi, &shr->spec);
+
+ if(GPU_link_changed(shi->spec) || ma->spec != 0.0f)
+ GPU_link(mat, "shade_add", shr->combined, shr->spec, &shr->combined);
+ }
+
+ GPU_link(mat, "mtex_alpha_to_col", shr->combined, shr->alpha, &shr->combined);
+
+ if(ma->shade_flag & MA_OBCOLOR)
+ GPU_link(mat, "shade_obcolor", shr->combined, GPU_builtin(GPU_OBCOLOR), &shr->combined);
+
+ if(world && (world->mode & WO_MIST) && !(ma->mode & MA_NOMIST)) {
+ misttype = world->mistype;
+
+ GPU_link(mat, "shade_mist_factor", GPU_builtin(GPU_VIEW_POSITION),
+ GPU_uniform(&world->miststa), GPU_uniform(&world->mistdist),
+ GPU_uniform(&misttype), GPU_uniform(&world->misi), &mistfac);
+
+ GPU_link(mat, "mix_blend", mistfac, shr->combined,
+ GPU_uniform(&world->horr), &shr->combined);
+ }
+
+ if(!(ma->mode & MA_ZTRA)) {
+ if(world && (GPU_link_changed(shr->alpha) || ma->alpha != 1.0f))
+ GPU_link(mat, "shade_world_mix", GPU_uniform(&world->horr),
+ shr->combined, &shr->combined);
+
+ GPU_link(mat, "shade_alpha_opaque", shr->combined, &shr->combined);
+ }
+
+ if(ma->shade_flag & MA_OBCOLOR) {
+ mat->obcolalpha = 1;
+ GPU_link(mat, "shade_alpha_obcolor", shr->combined, GPU_builtin(GPU_OBCOLOR), &shr->combined);
+ }
+}
+
+GPUNodeLink *GPU_blender_material(GPUMaterial *mat, Material *ma)
+{
+ GPUShadeInput shi;
+ GPUShadeResult shr;
+
+ GPU_shadeinput_set(mat, ma, &shi);
+ GPU_shaderesult_set(&shi, &shr);
+
+ return shr.combined;
+}
+
+GPUMaterial *GPU_material_from_blender(Scene *scene, Material *ma)
+{
+ GPUMaterial *mat;
+ GPUNodeLink *outlink;
+ LinkData *link;
+
+ for(link=ma->gpumaterial.first; link; link=link->next)
+ if(((GPUMaterial*)link->data)->scene == scene)
+ return link->data;
+
+ mat = GPU_material_construct_begin(ma);
+ mat->scene = scene;
+
+ if(!(G.fileflags & G_FILE_GLSL_NO_NODES) && ma->nodetree && ma->use_nodes) {
+ ntreeGPUMaterialNodes(ma->nodetree, mat);
+ }
+ else {
+ outlink = GPU_blender_material(mat, ma);
+ GPU_material_output_link(mat, outlink);
+ }
+
+ /*if(!GPU_material_construct_end(mat)) {
+ GPU_material_free(mat);
+ mat= NULL;
+ return 0;
+ }*/
+
+ GPU_material_construct_end(mat);
+
+ link = MEM_callocN(sizeof(LinkData), "GPUMaterialLink");
+ link->data = mat;
+ BLI_addtail(&ma->gpumaterial, link);
+
+ return mat;
+}
+
+void GPU_materials_free()
+{
+ Object *ob;
+ Material *ma;
+ extern Material defmaterial;
+
+ for(ma=G.main->mat.first; ma; ma=ma->id.next)
+ GPU_material_free(ma);
+
+ GPU_material_free(&defmaterial);
+
+ for(ob=G.main->object.first; ma; ma=ma->id.next)
+ GPU_lamp_free(ob);
+}
+
+/* Lamps and shadow buffers */
+
+void GPU_lamp_update(GPULamp *lamp, int lay, float obmat[][4])
+{
+ float mat[4][4];
+
+ lamp->lay = lay;
+
+ Mat4CpyMat4(mat, obmat);
+ Mat4Ortho(mat);
+
+ VECCOPY(lamp->vec, mat[2]);
+ VECCOPY(lamp->co, mat[3]);
+ Mat4CpyMat4(lamp->obmat, mat);
+ Mat4Invert(lamp->imat, mat);
+}
+
+static void gpu_lamp_from_blender(Scene *scene, Object *ob, Object *par, Lamp *la, GPULamp *lamp)
+{
+ float temp, angle, pixsize, wsize;
+
+ lamp->scene = scene;
+ lamp->ob = ob;
+ lamp->par = par;
+ lamp->la = la;
+
+ /* add_render_lamp */
+ lamp->mode = la->mode;
+ lamp->type = la->type;
+
+ lamp->energy = la->energy;
+ if(lamp->mode & LA_NEG) lamp->energy= -lamp->energy;
+
+ lamp->col[0]= la->r*lamp->energy;
+ lamp->col[1]= la->g*lamp->energy;
+ lamp->col[2]= la->b*lamp->energy;
+
+ GPU_lamp_update(lamp, ob->lay, ob->obmat);
+
+ lamp->spotsi= la->spotsize;
+ if(lamp->mode & LA_HALO)
+ if(lamp->spotsi > 170.0)
+ lamp->spotsi = 170.0;
+ lamp->spotsi= cos(M_PI*lamp->spotsi/360.0);
+ lamp->spotbl= (1.0 - lamp->spotsi)*la->spotblend;
+ lamp->k= la->k;
+
+ lamp->dist= la->dist;
+ lamp->falloff_type= la->falloff_type;
+ lamp->att1= la->att1;
+ lamp->att2= la->att2;
+ lamp->curfalloff= la->curfalloff;
+
+ /* initshadowbuf */
+ lamp->bias = 0.02f*la->bias;
+ lamp->size = la->bufsize;
+ lamp->d= la->clipsta;
+ lamp->clipend= la->clipend;
+
+ /* arbitrary correction for the fact we do no soft transition */
+ lamp->bias *= 0.25f;
+
+ /* makeshadowbuf */
+ angle= saacos(lamp->spotsi);
+ temp= 0.5f*lamp->size*cos(angle)/sin(angle);
+ pixsize= (lamp->d)/temp;
+ wsize= pixsize*0.5f*lamp->size;
+
+ i_window(-wsize, wsize, -wsize, wsize, lamp->d, lamp->clipend, lamp->winmat);
+}
+
+static void gpu_lamp_shadow_free(GPULamp *lamp)
+{
+ if(lamp->tex)
+ GPU_texture_free(lamp->tex);
+ if(lamp->fb)
+ GPU_framebuffer_free(lamp->fb);
+}
+
+GPULamp *GPU_lamp_from_blender(Scene *scene, Object *ob, Object *par)
+{
+ Lamp *la;
+ GPULamp *lamp;
+ LinkData *link;
+
+ for(link=ob->gpulamp.first; link; link=link->next) {
+ lamp = (GPULamp*)link->data;
+
+ if(lamp->par == par && lamp->scene == scene)
+ return link->data;
+ }
+
+ lamp = MEM_callocN(sizeof(GPULamp), "GPULamp");
+
+ link = MEM_callocN(sizeof(LinkData), "GPULampLink");
+ link->data = lamp;
+ BLI_addtail(&ob->gpulamp, link);
+
+ la = ob->data;
+ gpu_lamp_from_blender(scene, ob, par, la, lamp);
+
+ if(la->type==LA_SPOT && (la->mode & LA_SHAD_BUF)) {
+ /* opengl */
+ lamp->fb = GPU_framebuffer_create();
+ if(!lamp->fb) {
+ gpu_lamp_shadow_free(lamp);
+ return lamp;
+ }
+
+ lamp->tex = GPU_texture_create_depth(lamp->size, lamp->size);
+ if(!lamp->tex) {
+ gpu_lamp_shadow_free(lamp);
+ return lamp;
+ }
+
+ if(!GPU_framebuffer_texture_attach(lamp->fb, lamp->tex)) {
+ gpu_lamp_shadow_free(lamp);
+ return lamp;
+ }
+
+ GPU_framebuffer_restore();
+ }
+
+ return lamp;
+}
+
+void GPU_lamp_free(Object *ob)
+{
+ GPULamp *lamp;
+ LinkData *link;
+ LinkData *nlink;
+ Material *ma;
+
+ for(link=ob->gpulamp.first; link; link=link->next) {
+ lamp = link->data;
+
+ while(lamp->materials.first) {
+ nlink = lamp->materials.first;
+ ma = nlink->data;
+ BLI_freelinkN(&lamp->materials, nlink);
+
+ if(ma->gpumaterial.first)
+ GPU_material_free(ma);
+ }
+
+ gpu_lamp_shadow_free(lamp);
+
+ MEM_freeN(lamp);
+ }
+
+ BLI_freelistN(&ob->gpulamp);
+}
+
+int GPU_lamp_has_shadow_buffer(GPULamp *lamp)
+{
+ return (!(G.fileflags & G_FILE_GLSL_NO_SHADOWS) &&
+ !(G.fileflags & G_FILE_GLSL_NO_LIGHTS) &&
+ lamp->tex && lamp->fb);
+}
+
+void GPU_lamp_shadow_buffer_bind(GPULamp *lamp, float viewmat[][4], int *winsize, float winmat[][4])
+{
+ float rangemat[4][4], persmat[4][4];
+
+ /* initshadowbuf */
+ Mat4Invert(lamp->viewmat, lamp->obmat);
+ Normalize(lamp->viewmat[0]);
+ Normalize(lamp->viewmat[1]);
+ Normalize(lamp->viewmat[2]);
+
+ /* makeshadowbuf */
+ Mat4MulMat4(persmat, lamp->viewmat, lamp->winmat);
+
+ /* opengl depth buffer is range 0.0..1.0 instead of -1.0..1.0 in blender */
+ Mat4One(rangemat);
+ rangemat[0][0] = 0.5f;
+ rangemat[1][1] = 0.5f;
+ rangemat[2][2] = 0.5f;
+ rangemat[3][0] = 0.5f;
+ rangemat[3][1] = 0.5f;
+ rangemat[3][2] = 0.5f;
+
+ Mat4MulMat4(lamp->persmat, persmat, rangemat);
+
+ /* opengl */
+ GPU_framebuffer_texture_bind(lamp->fb, lamp->tex);
+
+ /* set matrices */
+ Mat4CpyMat4(viewmat, lamp->viewmat);
+ Mat4CpyMat4(winmat, lamp->winmat);
+ *winsize = lamp->size;
+}
+
+void GPU_lamp_shadow_buffer_unbind(GPULamp *lamp)
+{
+ GPU_framebuffer_texture_unbind(lamp->fb, lamp->tex);
+ GPU_framebuffer_restore();
+}
+
+int GPU_lamp_shadow_layer(GPULamp *lamp)
+{
+ if(lamp->fb && lamp->tex && (lamp->mode & (LA_LAYER|LA_LAYER_SHADOW)))
+ return lamp->lay;
+ else
+ return -1;
+}
+
diff --git a/source/blender/gpu/intern/gpu_shader_material.glsl b/source/blender/gpu/intern/gpu_shader_material.glsl
new file mode 100644
index 00000000000..16ed38cb47d
--- /dev/null
+++ b/source/blender/gpu/intern/gpu_shader_material.glsl
@@ -0,0 +1,1555 @@
+
+float exp_blender(float f)
+{
+ return pow(2.71828182846, f);
+}
+
+void rgb_to_hsv(vec4 rgb, out vec4 outcol)
+{
+ float cmax, cmin, h, s, v, cdelta;
+ vec3 c;
+
+ cmax = max(rgb[0], max(rgb[1], rgb[2]));
+ cmin = min(rgb[0], min(rgb[1], rgb[2]));
+ cdelta = cmax-cmin;
+
+ v = cmax;
+ if (cmax!=0.0)
+ s = cdelta/cmax;
+ else {
+ s = 0.0;
+ h = 0.0;
+ }
+
+ if (s == 0.0) {
+ h = 0.0;
+ }
+ else {
+ c = (vec3(cmax, cmax, cmax) - rgb.xyz)/cdelta;
+
+ if (rgb.x==cmax) h = c[2] - c[1];
+ else if (rgb.y==cmax) h = 2.0 + c[0] - c[2];
+ else h = 4.0 + c[1] - c[0];
+
+ h /= 6.0;
+
+ if (h<0.0)
+ h += 1.0;
+ }
+
+ outcol = vec4(h, s, v, rgb.w);
+}
+
+void hsv_to_rgb(vec4 hsv, out vec4 outcol)
+{
+ float i, f, p, q, t, h, s, v;
+ vec3 rgb;
+
+ h = hsv[0];
+ s = hsv[1];
+ v = hsv[2];
+
+ if(s==0.0) {
+ rgb = vec3(v, v, v);
+ }
+ else {
+ if(h==1.0)
+ h = 0.0;
+
+ h *= 6.0;
+ i = floor(h);
+ f = h - i;
+ rgb = vec3(f, f, f);
+ p = v*(1.0-s);
+ q = v*(1.0-(s*f));
+ t = v*(1.0-(s*(1.0-f)));
+
+ if (i == 0.0) rgb = vec3(v, t, p);
+ else if (i == 1.0) rgb = vec3(q, v, p);
+ else if (i == 2.0) rgb = vec3(p, v, t);
+ else if (i == 3.0) rgb = vec3(p, q, v);
+ else if (i == 4.0) rgb = vec3(t, p, v);
+ else rgb = vec3(v, p, q);
+ }
+
+ outcol = vec4(rgb, hsv.w);
+}
+
+#define M_PI 3.14159265358979323846
+
+/*********** SHADER NODES ***************/
+
+void vcol_attribute(vec4 attvcol, out vec4 vcol)
+{
+ vcol = vec4(attvcol.x/255.0, attvcol.y/255.0, attvcol.z/255.0, 1.0);
+}
+
+void uv_attribute(vec2 attuv, out vec3 uv)
+{
+ uv = vec3(attuv*2.0 - vec2(1.0, 1.0), 0.0);
+}
+
+void geom(vec3 co, vec3 nor, mat4 viewinvmat, vec3 attorco, vec2 attuv, vec4 attvcol, out vec3 global, out vec3 local, out vec3 view, out vec3 orco, out vec3 uv, out vec3 normal, out vec4 vcol, out float frontback)
+{
+ local = co;
+ view = normalize(local);
+ global = (viewinvmat*vec4(local, 1.0)).xyz;
+ orco = attorco;
+ uv_attribute(attuv, uv);
+ normal = -normalize(nor); /* blender render normal is negated */
+ vcol_attribute(attvcol, vcol);
+ frontback = 1.0;
+}
+
+void mapping(vec3 vec, mat4 mat, vec3 minvec, vec3 maxvec, float domin, float domax, out vec3 outvec)
+{
+ outvec = (mat * vec4(vec, 1.0)).xyz;
+ if(domin == 1.0)
+ outvec = max(outvec, minvec);
+ if(domax == 1.0)
+ outvec = min(outvec, maxvec);
+}
+
+void camera(vec3 co, out vec3 outview, out float outdepth, out float outdist)
+{
+ outdepth = abs(co.z);
+ outdist = length(co);
+ outview = normalize(co);
+}
+
+void math_add(float val1, float val2, out float outval)
+{
+ outval = val1 + val2;
+}
+
+void math_subtract(float val1, float val2, out float outval)
+{
+ outval = val1 - val2;
+}
+
+void math_multiply(float val1, float val2, out float outval)
+{
+ outval = val1 * val2;
+}
+
+void math_divide(float val1, float val2, out float outval)
+{
+ if (val2 == 0.0)
+ outval = 0.0;
+ else
+ outval = val1 / val2;
+}
+
+void math_sine(float val, out float outval)
+{
+ outval = sin(val);
+}
+
+void math_cosine(float val, out float outval)
+{
+ outval = cos(val);
+}
+
+void math_tangent(float val, out float outval)
+{
+ outval = tan(val);
+}
+
+void math_asin(float val, out float outval)
+{
+ if (val <= 1.0 && val >= -1.0)
+ outval = asin(val);
+ else
+ outval = 0.0;
+}
+
+void math_acos(float val, out float outval)
+{
+ if (val <= 1.0 && val >= -1.0)
+ outval = acos(val);
+ else
+ outval = 0.0;
+}
+
+void math_atan(float val, out float outval)
+{
+ outval = atan(val);
+}
+
+void math_pow(float val1, float val2, out float outval)
+{
+ if (val1 >= 0.0)
+ outval = pow(val1, val2);
+ else
+ outval = 0.0;
+}
+
+void math_log(float val1, float val2, out float outval)
+{
+ if(val1 > 0.0 && val2 > 0.0)
+ outval= log2(val1) / log2(val2);
+ else
+ outval= 0.0;
+}
+
+void math_max(float val1, float val2, out float outval)
+{
+ outval = max(val1, val2);
+}
+
+void math_min(float val1, float val2, out float outval)
+{
+ outval = min(val1, val2);
+}
+
+void math_round(float val, out float outval)
+{
+ outval= floor(val + 0.5);
+}
+
+void math_less_than(float val1, float val2, out float outval)
+{
+ if(val1 < val2)
+ outval = 1.0;
+ else
+ outval = 0.0;
+}
+
+void math_greater_than(float val1, float val2, out float outval)
+{
+ if(val1 > val2)
+ outval = 1.0;
+ else
+ outval = 0.0;
+}
+
+void squeeze(float val, float width, float center, out float outval)
+{
+ outval = 1.0/(1.0 + pow(2.71828183, -((val-center)*width)));
+}
+
+void vec_math_add(vec3 v1, vec3 v2, out vec3 outvec, out float outval)
+{
+ outvec = v1 + v2;
+ outval = (abs(outvec[0]) + abs(outvec[1]) + abs(outvec[2]))/3.0;
+}
+
+void vec_math_sub(vec3 v1, vec3 v2, out vec3 outvec, out float outval)
+{
+ outvec = v1 - v2;
+ outval = (abs(outvec[0]) + abs(outvec[1]) + abs(outvec[2]))/3.0;
+}
+
+void vec_math_average(vec3 v1, vec3 v2, out vec3 outvec, out float outval)
+{
+ outvec = v1 + v2;
+ outval = length(outvec);
+ outvec = normalize(outvec);
+}
+
+void vec_math_dot(vec3 v1, vec3 v2, out vec3 outvec, out float outval)
+{
+ outvec = vec3(0, 0, 0);
+ outval = dot(v1, v2);
+}
+
+void vec_math_cross(vec3 v1, vec3 v2, out vec3 outvec, out float outval)
+{
+ outvec = cross(v1, v2);
+ outval = length(outvec);
+}
+
+void vec_math_normalize(vec3 v, out vec3 outvec, out float outval)
+{
+ outval = length(v);
+ outvec = normalize(v);
+}
+
+void vec_math_negate(vec3 v, out vec3 outv)
+{
+ outv = -v;
+}
+
+void normal(vec3 dir, vec3 nor, out vec3 outnor, out float outdot)
+{
+ outnor = dir;
+ outdot = -dot(dir, nor);
+}
+
+void curves_vec(vec3 vec, sampler1D curvemap, out vec3 outvec)
+{
+ outvec.x = texture1D(curvemap, (vec.x + 1.0)*0.5).x;
+ outvec.y = texture1D(curvemap, (vec.y + 1.0)*0.5).y;
+ outvec.z = texture1D(curvemap, (vec.z + 1.0)*0.5).z;
+}
+
+void curves_rgb(vec4 col, sampler1D curvemap, out vec4 outcol)
+{
+ outcol.r = texture1D(curvemap, texture1D(curvemap, col.r).a).r;
+ outcol.g = texture1D(curvemap, texture1D(curvemap, col.g).a).g;
+ outcol.b = texture1D(curvemap, texture1D(curvemap, col.b).a).b;
+ outcol.a = col.a;
+}
+
+void set_value(float val, out float outval)
+{
+ outval = val;
+}
+
+void set_rgb(vec3 col, out vec3 outcol)
+{
+ outcol = col;
+}
+
+void set_rgba(vec4 col, out vec4 outcol)
+{
+ outcol = col;
+}
+
+void set_value_zero(out float outval)
+{
+ outval = 0.0;
+}
+
+void set_value_one(out float outval)
+{
+ outval = 1.0;
+}
+
+void set_rgb_zero(out vec3 outval)
+{
+ outval = vec3(0.0);
+}
+
+void set_rgba_zero(out vec4 outval)
+{
+ outval = vec4(0.0);
+}
+
+void mix_blend(float fac, vec4 col1, vec4 col2, out vec4 outcol)
+{
+ fac = clamp(fac, 0.0, 1.0);
+ outcol = mix(col1, col2, fac);
+ outcol.a = col1.a;
+}
+
+void mix_add(float fac, vec4 col1, vec4 col2, out vec4 outcol)
+{
+ fac = clamp(fac, 0.0, 1.0);
+ outcol = mix(col1, col1 + col2, fac);
+ outcol.a = col1.a;
+}
+
+void mix_mult(float fac, vec4 col1, vec4 col2, out vec4 outcol)
+{
+ fac = clamp(fac, 0.0, 1.0);
+ outcol = mix(col1, col1 * col2, fac);
+ outcol.a = col1.a;
+}
+
+void mix_screen(float fac, vec4 col1, vec4 col2, out vec4 outcol)
+{
+ fac = clamp(fac, 0.0, 1.0);
+ float facm = 1.0 - fac;
+
+ outcol = vec4(1.0) - (vec4(facm) + fac*(vec4(1.0) - col2))*(vec4(1.0) - col1);
+ outcol.a = col1.a;
+}
+
+void mix_overlay(float fac, vec4 col1, vec4 col2, out vec4 outcol)
+{
+ fac = clamp(fac, 0.0, 1.0);
+ float facm = 1.0 - fac;
+
+ outcol = col1;
+
+ if(outcol.r < 0.5)
+ outcol.r *= facm + 2.0*fac*col2.r;
+ else
+ outcol.r = 1.0 - (facm + 2.0*fac*(1.0 - col2.r))*(1.0 - outcol.r);
+
+ if(outcol.g < 0.5)
+ outcol.g *= facm + 2.0*fac*col2.g;
+ else
+ outcol.g = 1.0 - (facm + 2.0*fac*(1.0 - col2.g))*(1.0 - outcol.g);
+
+ if(outcol.b < 0.5)
+ outcol.b *= facm + 2.0*fac*col2.b;
+ else
+ outcol.b = 1.0 - (facm + 2.0*fac*(1.0 - col2.b))*(1.0 - outcol.b);
+}
+
+void mix_sub(float fac, vec4 col1, vec4 col2, out vec4 outcol)
+{
+ fac = clamp(fac, 0.0, 1.0);
+ outcol = mix(col1, col1 - col2, fac);
+ outcol.a = col1.a;
+}
+
+void mix_div(float fac, vec4 col1, vec4 col2, out vec4 outcol)
+{
+ fac = clamp(fac, 0.0, 1.0);
+ float facm = 1.0 - fac;
+
+ outcol = col1;
+
+ if(col2.r != 0.0) outcol.r = facm*outcol.r + fac*outcol.r/col2.r;
+ if(col2.g != 0.0) outcol.g = facm*outcol.g + fac*outcol.g/col2.g;
+ if(col2.b != 0.0) outcol.b = facm*outcol.b + fac*outcol.b/col2.b;
+}
+
+void mix_diff(float fac, vec4 col1, vec4 col2, out vec4 outcol)
+{
+ fac = clamp(fac, 0.0, 1.0);
+ outcol = mix(col1, abs(col1 - col2), fac);
+ outcol.a = col1.a;
+}
+
+void mix_dark(float fac, vec4 col1, vec4 col2, out vec4 outcol)
+{
+ fac = clamp(fac, 0.0, 1.0);
+ outcol.rgb = min(col1.rgb, col2.rgb*fac);
+ outcol.a = col1.a;
+}
+
+void mix_light(float fac, vec4 col1, vec4 col2, out vec4 outcol)
+{
+ fac = clamp(fac, 0.0, 1.0);
+ outcol.rgb = max(col1.rgb, col2.rgb*fac);
+ outcol.a = col1.a;
+}
+
+void mix_dodge(float fac, vec4 col1, vec4 col2, out vec4 outcol)
+{
+ fac = clamp(fac, 0.0, 1.0);
+ outcol = col1;
+
+ if(outcol.r != 0.0) {
+ float tmp = 1.0 - fac*col2.r;
+ if(tmp <= 0.0)
+ outcol.r = 1.0;
+ else if((tmp = outcol.r/tmp) > 1.0)
+ outcol.r = 1.0;
+ else
+ outcol.r = tmp;
+ }
+ if(outcol.g != 0.0) {
+ float tmp = 1.0 - fac*col2.g;
+ if(tmp <= 0.0)
+ outcol.g = 1.0;
+ else if((tmp = outcol.g/tmp) > 1.0)
+ outcol.g = 1.0;
+ else
+ outcol.g = tmp;
+ }
+ if(outcol.b != 0.0) {
+ float tmp = 1.0 - fac*col2.b;
+ if(tmp <= 0.0)
+ outcol.b = 1.0;
+ else if((tmp = outcol.b/tmp) > 1.0)
+ outcol.b = 1.0;
+ else
+ outcol.b = tmp;
+ }
+}
+
+void mix_burn(float fac, vec4 col1, vec4 col2, out vec4 outcol)
+{
+ fac = clamp(fac, 0.0, 1.0);
+ float tmp, facm = 1.0 - fac;
+
+ outcol = col1;
+
+ tmp = facm + fac*col2.r;
+ if(tmp <= 0.0)
+ outcol.r = 0.0;
+ else if((tmp = (1.0 - (1.0 - outcol.r)/tmp)) < 0.0)
+ outcol.r = 0.0;
+ else if(tmp > 1.0)
+ outcol.r = 1.0;
+ else
+ outcol.r = tmp;
+
+ tmp = facm + fac*col2.g;
+ if(tmp <= 0.0)
+ outcol.g = 0.0;
+ else if((tmp = (1.0 - (1.0 - outcol.g)/tmp)) < 0.0)
+ outcol.g = 0.0;
+ else if(tmp > 1.0)
+ outcol.g = 1.0;
+ else
+ outcol.g = tmp;
+
+ tmp = facm + fac*col2.b;
+ if(tmp <= 0.0)
+ outcol.b = 0.0;
+ else if((tmp = (1.0 - (1.0 - outcol.b)/tmp)) < 0.0)
+ outcol.b = 0.0;
+ else if(tmp > 1.0)
+ outcol.b = 1.0;
+ else
+ outcol.b = tmp;
+}
+
+void mix_hue(float fac, vec4 col1, vec4 col2, out vec4 outcol)
+{
+ fac = clamp(fac, 0.0, 1.0);
+ float facm = 1.0 - fac;
+
+ outcol = col1;
+
+ vec4 hsv, hsv2, tmp;
+ rgb_to_hsv(col2, hsv2);
+
+ if(hsv2.y != 0.0) {
+ rgb_to_hsv(outcol, hsv);
+ hsv.x = hsv2.x;
+ hsv_to_rgb(hsv, tmp);
+
+ outcol = mix(outcol, tmp, fac);
+ outcol.a = col1.a;
+ }
+}
+
+void mix_sat(float fac, vec4 col1, vec4 col2, out vec4 outcol)
+{
+ fac = clamp(fac, 0.0, 1.0);
+ float facm = 1.0 - fac;
+
+ outcol = col1;
+
+ vec4 hsv, hsv2;
+ rgb_to_hsv(outcol, hsv);
+
+ if(hsv.y != 0.0) {
+ rgb_to_hsv(col2, hsv2);
+
+ hsv.y = facm*hsv.y + fac*hsv2.y;
+ hsv_to_rgb(hsv, outcol);
+ }
+}
+
+void mix_val(float fac, vec4 col1, vec4 col2, out vec4 outcol)
+{
+ fac = clamp(fac, 0.0, 1.0);
+ float facm = 1.0 - fac;
+
+ vec4 hsv, hsv2;
+ rgb_to_hsv(col1, hsv);
+ rgb_to_hsv(col2, hsv2);
+
+ hsv.z = facm*hsv.z + fac*hsv2.z;
+ hsv_to_rgb(hsv, outcol);
+}
+
+void mix_color(float fac, vec4 col1, vec4 col2, out vec4 outcol)
+{
+ fac = clamp(fac, 0.0, 1.0);
+ float facm = 1.0 - fac;
+
+ outcol = col1;
+
+ vec4 hsv, hsv2, tmp;
+ rgb_to_hsv(col2, hsv2);
+
+ if(hsv2.y != 0.0) {
+ rgb_to_hsv(outcol, hsv);
+ hsv.x = hsv2.x;
+ hsv.y = hsv2.y;
+ hsv_to_rgb(hsv, tmp);
+
+ outcol = mix(outcol, tmp, fac);
+ outcol.a = col1.a;
+ }
+}
+
+void valtorgb(float fac, sampler1D colormap, out vec4 outcol, out float outalpha)
+{
+ outcol = texture1D(colormap, fac);
+ outalpha = outcol.a;
+}
+
+void rgbtobw(vec4 color, out float outval)
+{
+ outval = color.r*0.35 + color.g*0.45 + color.b*0.2;
+}
+
+void invert(float fac, vec4 col, out vec4 outcol)
+{
+ outcol.xyz = mix(col.xyz, vec3(1.0, 1.0, 1.0) - col.xyz, fac);
+ outcol.w = col.w;
+}
+
+void hue_sat(float hue, float sat, float value, float fac, vec4 col, out vec4 outcol)
+{
+ vec4 hsv;
+
+ rgb_to_hsv(col, hsv);
+
+ hsv[0] += (hue - 0.5);
+ if(hsv[0]>1.0) hsv[0]-=1.0; else if(hsv[0]<0.0) hsv[0]+= 1.0;
+ hsv[1] *= sat;
+ if(hsv[1]>1.0) hsv[1]= 1.0; else if(hsv[1]<0.0) hsv[1]= 0.0;
+ hsv[2] *= value;
+ if(hsv[2]>1.0) hsv[2]= 1.0; else if(hsv[2]<0.0) hsv[2]= 0.0;
+
+ hsv_to_rgb(hsv, outcol);
+
+ outcol = mix(col, outcol, fac);
+}
+
+void separate_rgb(vec4 col, out float r, out float g, out float b)
+{
+ r = col.r;
+ g = col.g;
+ b = col.b;
+}
+
+void combine_rgb(float r, float g, float b, out vec4 col)
+{
+ col = vec4(r, g, b, 1.0);
+}
+
+void output_node(vec4 rgb, float alpha, out vec4 outrgb)
+{
+ outrgb = vec4(rgb.rgb, alpha);
+}
+
+/*********** TEXTURES ***************/
+
+void texture_flip_blend(vec3 vec, out vec3 outvec)
+{
+ outvec = vec.yxz;
+}
+
+void texture_blend_lin(vec3 vec, out float outval)
+{
+ outval = (1.0+vec.x)/2.0;
+}
+
+void texture_blend_quad(vec3 vec, out float outval)
+{
+ outval = max((1.0+vec.x)/2.0, 0.0);
+ outval *= outval;
+}
+
+void texture_wood_sin(vec3 vec, out float value, out vec4 color, out vec3 normal)
+{
+ float a = sqrt(vec.x*vec.x + vec.y*vec.y + vec.z*vec.z)*20.0;
+ float wi = 0.5 + 0.5*sin(a);
+
+ value = wi;
+ color = vec4(wi, wi, wi, 1.0);
+ normal = vec3(0.0, 0.0, 0.0);
+}
+
+void texture_image(vec3 vec, sampler2D ima, out float value, out vec4 color, out vec3 normal)
+{
+ color = texture2D(ima, (vec.xy + vec2(1.0, 1.0))*0.5);
+ value = 1.0;
+
+ normal.x = 2.0*(color.r - 0.5);
+ normal.y = 2.0*(0.5 - color.g);
+ normal.z = 2.0*(color.b - 0.5);
+}
+
+/************* MTEX *****************/
+
+void texco_orco(vec3 attorco, out vec3 orco)
+{
+ orco = attorco;
+}
+
+void texco_uv(vec2 attuv, out vec3 uv)
+{
+ /* disabled for now, works together with leaving out mtex_2d_mapping
+ uv = vec3(attuv*2.0 - vec2(1.0, 1.0), 0.0); */
+ uv = vec3(attuv, 0.0);
+}
+
+void texco_norm(vec3 normal, out vec3 outnormal)
+{
+ /* corresponds to shi->orn, which is negated so cancels
+ out blender normal negation */
+ outnormal = normalize(normal);
+}
+
+void texco_tangent(vec3 tangent, out vec3 outtangent)
+{
+ outtangent = normalize(tangent);
+}
+
+void texco_global(mat4 viewinvmat, vec3 co, out vec3 global)
+{
+ global = (viewinvmat*vec4(co, 1.0)).xyz;
+}
+
+void texco_object(mat4 viewinvmat, mat4 obinvmat, vec3 co, out vec3 object)
+{
+ object = (obinvmat*(viewinvmat*vec4(co, 1.0))).xyz;
+}
+
+void texco_refl(vec3 vn, vec3 view, out vec3 ref)
+{
+ ref = view - 2.0*dot(vn, view)*vn;
+}
+
+void shade_norm(vec3 normal, out vec3 outnormal)
+{
+ /* blender render normal is negated */
+ outnormal = -normalize(normal);
+}
+
+void mtex_rgb_blend(vec3 outcol, vec3 texcol, float fact, float facg, out vec3 incol)
+{
+ float facm;
+
+ fact *= facg;
+ facm = 1.0-fact;
+
+ incol = fact*texcol + facm*outcol;
+}
+
+void mtex_rgb_mul(vec3 outcol, vec3 texcol, float fact, float facg, out vec3 incol)
+{
+ float facm;
+
+ fact *= facg;
+ facm = 1.0-facg;
+
+ incol = (facm + fact*texcol)*outcol;
+}
+
+void mtex_rgb_screen(vec3 outcol, vec3 texcol, float fact, float facg, out vec3 incol)
+{
+ float facm;
+
+ fact *= facg;
+ facm = 1.0-facg;
+
+ incol = vec3(1.0) - (vec3(facm) + fact*(vec3(1.0) - texcol))*(vec3(1.0) - outcol);
+}
+
+void mtex_rgb_overlay(vec3 outcol, vec3 texcol, float fact, float facg, out vec3 incol)
+{
+ float facm;
+
+ fact *= facg;
+ facm = 1.0-facg;
+
+ if(outcol.r < 0.5)
+ incol.r = outcol.r*(facm + 2.0*fact*texcol.r);
+ else
+ incol.r = 1.0 - (facm + 2.0*fact*(1.0 - texcol.r))*(1.0 - outcol.r);
+
+ if(outcol.g < 0.5)
+ incol.g = outcol.g*(facm + 2.0*fact*texcol.g);
+ else
+ incol.g = 1.0 - (facm + 2.0*fact*(1.0 - texcol.g))*(1.0 - outcol.g);
+
+ if(outcol.b < 0.5)
+ incol.b = outcol.b*(facm + 2.0*fact*texcol.b);
+ else
+ incol.b = 1.0 - (facm + 2.0*fact*(1.0 - texcol.b))*(1.0 - outcol.b);
+}
+
+void mtex_rgb_sub(vec3 outcol, vec3 texcol, float fact, float facg, out vec3 incol)
+{
+ incol = -fact*facg*texcol + outcol;
+}
+
+void mtex_rgb_add(vec3 outcol, vec3 texcol, float fact, float facg, out vec3 incol)
+{
+ incol = fact*facg*texcol + outcol;
+}
+
+void mtex_rgb_div(vec3 outcol, vec3 texcol, float fact, float facg, out vec3 incol)
+{
+ float facm;
+
+ fact *= facg;
+ facm = 1.0-fact;
+
+ if(texcol.r != 0.0) incol.r = facm*outcol.r + fact*outcol.r/texcol.r;
+ if(texcol.g != 0.0) incol.g = facm*outcol.g + fact*outcol.g/texcol.g;
+ if(texcol.b != 0.0) incol.b = facm*outcol.b + fact*outcol.b/texcol.b;
+}
+
+void mtex_rgb_diff(vec3 outcol, vec3 texcol, float fact, float facg, out vec3 incol)
+{
+ float facm;
+
+ fact *= facg;
+ facm = 1.0-fact;
+
+ incol = facm*outcol + fact*abs(texcol - outcol);
+}
+
+void mtex_rgb_dark(vec3 outcol, vec3 texcol, float fact, float facg, out vec3 incol)
+{
+ float facm, col;
+
+ fact *= facg;
+ facm = 1.0-fact;
+
+ col = fact*texcol.r;
+ if(col < outcol.r) incol.r = col; else incol.r = outcol.r;
+ col = fact*texcol.g;
+ if(col < outcol.g) incol.g = col; else incol.g = outcol.g;
+ col = fact*texcol.b;
+ if(col < outcol.b) incol.b = col; else incol.b = outcol.b;
+}
+
+void mtex_rgb_light(vec3 outcol, vec3 texcol, float fact, float facg, out vec3 incol)
+{
+ float facm, col;
+
+ fact *= facg;
+ facm = 1.0-fact;
+
+ col = fact*texcol.r;
+ if(col > outcol.r) incol.r = col; else incol.r = outcol.r;
+ col = fact*texcol.g;
+ if(col > outcol.g) incol.g = col; else incol.g = outcol.g;
+ col = fact*texcol.b;
+ if(col > outcol.b) incol.b = col; else incol.b = outcol.b;
+}
+
+void mtex_rgb_hue(vec3 outcol, vec3 texcol, float fact, float facg, out vec3 incol)
+{
+ vec4 col;
+
+ mix_hue(fact*facg, vec4(outcol, 1.0), vec4(texcol, 1.0), col);
+ incol.rgb = col.rgb;
+}
+
+void mtex_rgb_sat(vec3 outcol, vec3 texcol, float fact, float facg, out vec3 incol)
+{
+ vec4 col;
+
+ mix_sat(fact*facg, vec4(outcol, 1.0), vec4(texcol, 1.0), col);
+ incol.rgb = col.rgb;
+}
+
+void mtex_rgb_val(vec3 outcol, vec3 texcol, float fact, float facg, out vec3 incol)
+{
+ vec4 col;
+
+ mix_val(fact*facg, vec4(outcol, 1.0), vec4(texcol, 1.0), col);
+ incol.rgb = col.rgb;
+}
+
+void mtex_rgb_color(vec3 outcol, vec3 texcol, float fact, float facg, out vec3 incol)
+{
+ vec4 col;
+
+ mix_color(fact*facg, vec4(outcol, 1.0), vec4(texcol, 1.0), col);
+ incol.rgb = col.rgb;
+}
+
+void mtex_value_vars(inout float fact, float facg, out float facm, float flip)
+{
+ fact *= facg;
+ facm = 1.0-fact;
+
+ if(flip != 0.0) {
+ float tmp = fact;
+ fact = facm;
+ facm = tmp;
+ }
+}
+
+void mtex_value_blend(float outcol, float texcol, float fact, float facg, float flip, out float incol)
+{
+ float facm;
+ mtex_value_vars(fact, facg, facm, flip);
+
+ incol = fact*texcol + facm*outcol;
+}
+
+void mtex_value_mul(float outcol, float texcol, float fact, float facg, float flip, out float incol)
+{
+ float facm;
+ mtex_value_vars(fact, facg, facm, flip);
+
+ facm = 1.0 - facg;
+ incol = (facm + fact*texcol)*outcol;
+}
+
+void mtex_value_screen(float outcol, float texcol, float fact, float facg, float flip, out float incol)
+{
+ float facm;
+ mtex_value_vars(fact, facg, facm, flip);
+
+ facm = 1.0 - facg;
+ incol = 1.0 - (facm + fact*(1.0 - texcol))*(1.0 - outcol);
+}
+
+void mtex_value_sub(float outcol, float texcol, float fact, float facg, float flip, out float incol)
+{
+ float facm;
+ mtex_value_vars(fact, facg, facm, flip);
+
+ fact = -fact;
+ incol = fact*texcol + outcol;
+}
+
+void mtex_value_add(float outcol, float texcol, float fact, float facg, float flip, out float incol)
+{
+ float facm;
+ mtex_value_vars(fact, facg, facm, flip);
+
+ fact = fact;
+ incol = fact*texcol + outcol;
+}
+
+void mtex_value_div(float outcol, float texcol, float fact, float facg, float flip, out float incol)
+{
+ float facm;
+ mtex_value_vars(fact, facg, facm, flip);
+
+ if(texcol != 0.0)
+ incol = facm*outcol + fact*outcol/texcol;
+ else
+ incol = 0.0;
+}
+
+void mtex_value_diff(float outcol, float texcol, float fact, float facg, float flip, out float incol)
+{
+ float facm;
+ mtex_value_vars(fact, facg, facm, flip);
+
+ incol = facm*outcol + fact*abs(texcol - outcol);
+}
+
+void mtex_value_dark(float outcol, float texcol, float fact, float facg, float flip, out float incol)
+{
+ float facm;
+ mtex_value_vars(fact, facg, facm, flip);
+
+ float col = fact*texcol;
+ if(col < outcol) incol = col; else incol = outcol;
+}
+
+void mtex_value_light(float outcol, float texcol, float fact, float facg, float flip, out float incol)
+{
+ float facm;
+ mtex_value_vars(fact, facg, facm, flip);
+
+ float col = fact*texcol;
+ if(col > outcol) incol = col; else incol = outcol;
+}
+
+void mtex_value_clamp_positive(float fac, out float outfac)
+{
+ outfac = max(fac, 0.0);
+}
+
+void mtex_value_clamp(float fac, out float outfac)
+{
+ outfac = clamp(fac, 0.0, 1.0);
+}
+
+void mtex_har_divide(float har, out float outhar)
+{
+ outhar = har/128.0;
+}
+
+void mtex_har_multiply_clamp(float har, out float outhar)
+{
+ har *= 128.0;
+
+ if(har < 1.0) outhar = 1.0;
+ else if(har > 511.0) outhar = 511.0;
+ else outhar = har;
+}
+
+void mtex_alpha_from_col(vec4 col, out float alpha)
+{
+ alpha = col.a;
+}
+
+void mtex_alpha_to_col(vec4 col, float alpha, out vec4 outcol)
+{
+ outcol = vec4(col.rgb, alpha);
+}
+
+void mtex_rgbtoint(vec4 rgb, out float intensity)
+{
+ intensity = dot(vec3(0.35, 0.45, 0.2), rgb.rgb);
+}
+
+void mtex_value_invert(float invalue, out float outvalue)
+{
+ outvalue = 1.0 - invalue;
+}
+
+void mtex_rgb_invert(vec4 inrgb, out vec4 outrgb)
+{
+ outrgb = vec4(vec3(1.0) - inrgb.rgb, inrgb.a);
+}
+
+void mtex_value_stencil(float stencil, float intensity, out float outstencil, out float outintensity)
+{
+ float fact = intensity;
+ outintensity = intensity*stencil;
+ outstencil = stencil*fact;
+}
+
+void mtex_rgb_stencil(float stencil, vec4 rgb, out float outstencil, out vec4 outrgb)
+{
+ float fact = rgb.a;
+ outrgb = vec4(rgb.rgb, rgb.a*stencil);
+ outstencil = stencil*fact;
+}
+
+void mtex_mapping_ofs(vec3 texco, vec3 ofs, out vec3 outtexco)
+{
+ outtexco = texco + ofs;
+}
+
+void mtex_mapping_size(vec3 texco, vec3 size, out vec3 outtexco)
+{
+ outtexco = size*texco;
+}
+
+void mtex_2d_mapping(vec3 vec, out vec3 outvec)
+{
+ outvec = vec3(vec.xy*0.5 + vec2(0.5, 0.5), vec.z);
+}
+
+void mtex_image(vec3 vec, sampler2D ima, out float value, out vec4 color, out vec3 normal)
+{
+ color = texture2D(ima, vec.xy);
+ value = 1.0;
+
+ normal = 2.0*(vec3(color.r, -color.g, color.b) - vec3(0.5, -0.5, 0.5));
+}
+
+void mtex_negate_texnormal(vec3 normal, out vec3 outnormal)
+{
+ outnormal = vec3(-normal.x, -normal.y, normal.z);
+}
+
+void mtex_nspace_tangent(vec3 tangent, vec3 normal, vec3 texnormal, out vec3 outnormal)
+{
+ tangent = normalize(tangent);
+ vec3 B = cross(normal, tangent);
+
+ outnormal = texnormal.x*tangent + texnormal.y*B + texnormal.z*normal;
+ outnormal = normalize(outnormal);
+}
+
+void mtex_blend_normal(float norfac, vec3 normal, vec3 newnormal, out vec3 outnormal)
+{
+ outnormal = (1.0 - norfac)*normal + norfac*newnormal;
+ outnormal = normalize(outnormal);
+}
+
+/******* MATERIAL *********/
+
+void lamp_visibility_sun_hemi(vec3 lampvec, out vec3 lv, out float dist, out float visifac)
+{
+ lv = lampvec;
+ dist = 1.0;
+ visifac = 1.0;
+}
+
+void lamp_visibility_other(vec3 co, vec3 lampco, out vec3 lv, out float dist, out float visifac)
+{
+ lv = co - lampco;
+ dist = length(lv);
+ lv = normalize(lv);
+ visifac = 1.0;
+}
+
+void lamp_falloff_invlinear(float lampdist, float dist, out float visifac)
+{
+ visifac = lampdist/(lampdist + dist);
+}
+
+void lamp_falloff_invsquare(float lampdist, float dist, out float visifac)
+{
+ visifac = lampdist/(lampdist + dist*dist);
+}
+
+void lamp_falloff_sliders(float lampdist, float ld1, float ld2, float dist, out float visifac)
+{
+ float lampdistkw = lampdist*lampdist;
+
+ visifac = lampdist/(lampdist + ld1*dist);
+ visifac *= lampdistkw/(lampdistkw + ld2*dist*dist);
+}
+
+void lamp_falloff_curve(float lampdist, sampler1D curvemap, float dist, out float visifac)
+{
+ visifac = texture1D(curvemap, dist/lampdist).x;
+}
+
+void lamp_visibility_sphere(float lampdist, float dist, float visifac, out float outvisifac)
+{
+ float t= lampdist - dist;
+
+ outvisifac= visifac*max(t, 0.0)/lampdist;
+}
+
+void lamp_visibility_spot_square(vec3 lampvec, mat4 lampimat, vec3 lv, out float inpr)
+{
+ if(dot(lv, lampvec) > 0.0) {
+ vec3 lvrot = (lampimat*vec4(lv, 0.0)).xyz;
+ float x = max(abs(lvrot.x/lvrot.z), abs(lvrot.y/lvrot.z));
+
+ inpr = 1.0/sqrt(1.0 + x*x);
+ }
+ else
+ inpr = 0.0;
+}
+
+void lamp_visibility_spot_circle(vec3 lampvec, vec3 lv, out float inpr)
+{
+ inpr = dot(lv, lampvec);
+}
+
+void lamp_visibility_spot(float spotsi, float spotbl, float inpr, float visifac, out float outvisifac)
+{
+ float t = spotsi;
+
+ if(inpr <= t) {
+ outvisifac = 0.0;
+ }
+ else {
+ t = inpr - t;
+
+ /* soft area */
+ if(spotbl != 0.0)
+ inpr *= smoothstep(0.0, 1.0, t/spotbl);
+
+ outvisifac = visifac*inpr;
+ }
+}
+
+void lamp_visibility_clamp(float visifac, out float outvisifac)
+{
+ outvisifac = (visifac < 0.001)? 0.0: visifac;
+}
+
+void shade_view(vec3 co, out vec3 view)
+{
+ /* handle perspective/orthographic */
+ view = (gl_ProjectionMatrix[3][3] == 0.0)? normalize(co): vec3(0.0, 0.0, -1.0);
+}
+
+void shade_tangent_v(vec3 lv, vec3 tang, out vec3 vn)
+{
+ vec3 c = cross(lv, tang);
+ vec3 vnor = cross(c, tang);
+
+ vn = -normalize(vnor);
+}
+
+void shade_inp(vec3 vn, vec3 lv, out float inp)
+{
+ inp = dot(vn, lv);
+}
+
+void shade_is_no_diffuse(out float is)
+{
+ is = 0.0;
+}
+
+void shade_is_hemi(float inp, out float is)
+{
+ is = 0.5*inp + 0.5;
+}
+
+float area_lamp_energy(mat4 area, vec3 co, vec3 vn)
+{
+ vec3 vec[4], c[4];
+ float rad[4], fac;
+
+ vec[0] = normalize(co - area[0].xyz);
+ vec[1] = normalize(co - area[1].xyz);
+ vec[2] = normalize(co - area[2].xyz);
+ vec[3] = normalize(co - area[3].xyz);
+
+ c[0] = normalize(cross(vec[0], vec[1]));
+ c[1] = normalize(cross(vec[1], vec[2]));
+ c[2] = normalize(cross(vec[2], vec[3]));
+ c[3] = normalize(cross(vec[3], vec[0]));
+
+ rad[0] = acos(dot(vec[0], vec[1]));
+ rad[1] = acos(dot(vec[1], vec[2]));
+ rad[2] = acos(dot(vec[2], vec[3]));
+ rad[3] = acos(dot(vec[3], vec[0]));
+
+ fac= rad[0]*dot(vn, c[0]);
+ fac+= rad[1]*dot(vn, c[1]);
+ fac+= rad[2]*dot(vn, c[2]);
+ fac+= rad[3]*dot(vn, c[3]);
+
+ return max(fac, 0.0);
+}
+
+void shade_inp_area(vec3 position, vec3 lampco, vec3 lampvec, vec3 vn, mat4 area, float areasize, float k, out float inp)
+{
+ vec3 co = position;
+ vec3 vec = co - lampco;
+
+ if(dot(vec, lampvec) < 0.0) {
+ inp = 0.0;
+ }
+ else {
+ float intens = area_lamp_energy(area, co, vn);
+
+ inp = pow(intens*areasize, k);
+ }
+}
+
+void shade_diffuse_oren_nayer(float nl, vec3 n, vec3 l, vec3 v, float rough, out float is)
+{
+ vec3 h = normalize(v + l);
+ float nh = max(dot(n, h), 0.0);
+ float nv = max(dot(n, v), 0.0);
+ float realnl = dot(n, l);
+
+ if(realnl < 0.0) {
+ is = 0.0;
+ }
+ else if(nl < 0.0) {
+ is = 0.0;
+ }
+ else {
+ float vh = max(dot(v, h), 0.0);
+ float Lit_A = acos(realnl);
+ float View_A = acos(nv);
+
+ vec3 Lit_B = normalize(l - realnl*n);
+ vec3 View_B = normalize(v - nv*n);
+
+ float t = max(dot(Lit_B, View_B), 0.0);
+
+ float a, b;
+
+ if(Lit_A > View_A) {
+ a = Lit_A;
+ b = View_A;
+ }
+ else {
+ a = View_A;
+ b = Lit_A;
+ }
+
+ float A = 1.0 - (0.5*((rough*rough)/((rough*rough) + 0.33)));
+ float B = 0.45*((rough*rough)/((rough*rough) + 0.09));
+
+ b *= 0.95;
+ is = nl*(A + (B * t * sin(a) * tan(b)));
+ }
+}
+
+void shade_diffuse_toon(vec3 n, vec3 l, vec3 v, float size, float tsmooth, out float is)
+{
+ float rslt = dot(n, l);
+ float ang = acos(rslt);
+
+ if(ang < size) is = 1.0;
+ else if(ang > (size + tsmooth) || tsmooth == 0.0) is = 0.0;
+ else is = 1.0 - ((ang - size)/tsmooth);
+}
+
+void shade_diffuse_minnaert(float nl, vec3 n, vec3 v, float darkness, out float is)
+{
+ if(nl <= 0.0) {
+ is = 0.0;
+ }
+ else {
+ float nv = max(dot(n, v), 0.0);
+
+ if(darkness <= 1.0)
+ is = nl*pow(max(nv*nl, 0.1), darkness - 1.0);
+ else
+ is = nl*pow(1.0001 - nv, darkness - 1.0);
+ }
+}
+
+float fresnel_fac(vec3 view, vec3 vn, float grad, float fac)
+{
+ float t1, t2;
+ float ffac;
+
+ if(fac==0.0) {
+ ffac = 1.0;
+ }
+ else {
+ t1= dot(view, vn);
+ if(t1>0.0) t2= 1.0+t1;
+ else t2= 1.0-t1;
+
+ t2= grad + (1.0-grad)*pow(t2, fac);
+
+ if(t2<0.0) ffac = 0.0;
+ else if(t2>1.0) ffac = 1.0;
+ else ffac = t2;
+ }
+
+ return ffac;
+}
+
+void shade_diffuse_fresnel(vec3 vn, vec3 lv, vec3 view, float fac_i, float fac, out float is)
+{
+ is = fresnel_fac(lv, vn, fac_i, fac);
+}
+
+void shade_cubic(float is, out float outis)
+{
+ if(is>0.0 && is<1.0)
+ outis= smoothstep(0.0, 1.0, is);
+ else
+ outis= is;
+}
+
+void shade_visifac(float i, float visifac, float refl, out float outi)
+{
+ /*if(i > 0.0)*/
+ outi = max(i*visifac*refl, 0.0);
+ /*else
+ outi = i;*/
+}
+
+void shade_tangent_v_spec(vec3 tang, out vec3 vn)
+{
+ vn = tang;
+}
+
+void shade_add_to_diffuse(float i, vec3 lampcol, vec3 col, out vec3 outcol)
+{
+ if(i > 0.0)
+ outcol = i*lampcol*col;
+ else
+ outcol = vec3(0.0, 0.0, 0.0);
+}
+
+void shade_hemi_spec(vec3 vn, vec3 lv, vec3 view, float spec, float hard, float visifac, out float t)
+{
+ lv += view;
+ lv = normalize(lv);
+
+ t = dot(vn, lv);
+ t = 0.5*t + 0.5;
+
+ t = visifac*spec*pow(t, hard);
+}
+
+void shade_phong_spec(vec3 n, vec3 l, vec3 v, float hard, out float specfac)
+{
+ vec3 h = normalize(l + v);
+ float rslt = max(dot(h, n), 0.0);
+
+ specfac = pow(rslt, hard);
+}
+
+void shade_cooktorr_spec(vec3 n, vec3 l, vec3 v, float hard, out float specfac)
+{
+ vec3 h = normalize(v + l);
+ float nh = dot(n, h);
+
+ if(nh < 0.0) {
+ specfac = 0.0;
+ }
+ else {
+ float nv = max(dot(n, v), 0.0);
+ float i = pow(nh, hard);
+
+ i = i/(0.1+nv);
+ specfac = i;
+ }
+}
+
+void shade_blinn_spec(vec3 n, vec3 l, vec3 v, float refrac, float spec_power, out float specfac)
+{
+ if(refrac < 1.0) {
+ specfac = 0.0;
+ }
+ else if(spec_power == 0.0) {
+ specfac = 0.0;
+ }
+ else {
+ if(spec_power<100.0)
+ spec_power= sqrt(1.0/spec_power);
+ else
+ spec_power= 10.0/spec_power;
+
+ vec3 h = normalize(v + l);
+ float nh = dot(n, h);
+ if(nh < 0.0) {
+ specfac = 0.0;
+ }
+ else {
+ float nv = max(dot(n, v), 0.01);
+ float nl = dot(n, l);
+ if(nl <= 0.01) {
+ specfac = 0.0;
+ }
+ else {
+ float vh = max(dot(v, h), 0.01);
+
+ float a = 1.0;
+ float b = (2.0*nh*nv)/vh;
+ float c = (2.0*nh*nl)/vh;
+
+ float g = 0.0;
+
+ if(a < b && a < c) g = a;
+ else if(b < a && b < c) g = b;
+ else if(c < a && c < b) g = c;
+
+ float p = sqrt(((refrac * refrac)+(vh*vh)-1.0));
+ float f = (((p-vh)*(p-vh))/((p+vh)*(p+vh)))*(1.0+((((vh*(p+vh))-1.0)*((vh*(p+vh))-1.0))/(((vh*(p-vh))+1.0)*((vh*(p-vh))+1.0))));
+ float ang = acos(nh);
+
+ specfac = max(f*g*exp_blender((-(ang*ang)/(2.0*spec_power*spec_power))), 0.0);
+ }
+ }
+ }
+}
+
+void shade_wardiso_spec(vec3 n, vec3 l, vec3 v, float rms, out float specfac)
+{
+ vec3 h = normalize(l + v);
+ float nh = max(dot(n, h), 0.001);
+ float nv = max(dot(n, v), 0.001);
+ float nl = max(dot(n, l), 0.001);
+ float angle = tan(acos(nh));
+ float alpha = max(rms, 0.001);
+
+ specfac= nl * (1.0/(4.0*M_PI*alpha*alpha))*(exp_blender(-(angle*angle)/(alpha*alpha))/(sqrt(nv*nl)));
+}
+
+void shade_toon_spec(vec3 n, vec3 l, vec3 v, float size, float tsmooth, out float specfac)
+{
+ vec3 h = normalize(l + v);
+ float rslt = dot(h, n);
+ float ang = acos(rslt);
+
+ if(ang < size) rslt = 1.0;
+ else if(ang >= (size + tsmooth) || tsmooth == 0.0) rslt = 0.0;
+ else rslt = 1.0 - ((ang - size)/tsmooth);
+
+ specfac = rslt;
+}
+
+void shade_spec_area_inp(float specfac, float inp, out float outspecfac)
+{
+ outspecfac = specfac*inp;
+}
+
+void shade_spec_t(float shadfac, float spec, float visifac, float specfac, out float t)
+{
+ t = shadfac*spec*visifac*specfac;
+}
+
+void shade_add_spec(float t, vec3 lampcol, vec3 speccol, out vec3 outcol)
+{
+ outcol = t*lampcol*speccol;
+}
+
+void shade_add(vec4 col1, vec4 col2, out vec4 outcol)
+{
+ outcol = col1 + col2;
+}
+
+void shade_madd(vec4 col, vec4 col1, vec4 col2, out vec4 outcol)
+{
+ outcol = col + col1*col2;
+}
+
+void shade_maddf(vec4 col, float f, vec4 col1, out vec4 outcol)
+{
+ outcol = col + f*col1;
+}
+
+void shade_mul(vec4 col1, vec4 col2, out vec4 outcol)
+{
+ outcol = col1*col2;
+}
+
+void shade_mul_value(float fac, vec4 col, out vec4 outcol)
+{
+ outcol = col*fac;
+}
+
+void shade_obcolor(vec4 col, vec4 obcol, out vec4 outcol)
+{
+ outcol = vec4(col.rgb*obcol.rgb, col.a);
+}
+
+void ramp_rgbtobw(vec3 color, out float outval)
+{
+ outval = color.r*0.3 + color.g*0.58 + color.b*0.12;
+}
+
+void shade_only_shadow(float i, float shadfac, float energy, out float outshadfac)
+{
+ outshadfac = i*energy*(1.0 - shadfac);
+}
+
+void shade_only_shadow_diffuse(float shadfac, vec3 rgb, vec4 diff, out vec4 outdiff)
+{
+ outdiff = diff - vec4(rgb*shadfac, 0.0);
+}
+
+void shade_only_shadow_specular(float shadfac, vec3 specrgb, vec4 spec, out vec4 outspec)
+{
+ outspec = spec - vec4(specrgb*shadfac, 0.0);
+}
+
+void test_shadowbuf(vec3 rco, sampler2DShadow shadowmap, mat4 shadowpersmat, float shadowbias, float inp, out float result)
+{
+ if(inp <= 0.0) {
+ result = 0.0;
+ }
+ else {
+ vec4 co = shadowpersmat*vec4(rco, 1.0);
+
+ //float bias = (1.5 - inp*inp)*shadowbias;
+ co.z -= shadowbias*co.w;
+
+ result = shadow2DProj(shadowmap, co).x;
+ }
+}
+
+void shade_exposure_correct(vec3 col, float linfac, float logfac, out vec3 outcol)
+{
+ outcol = linfac*(1.0 - exp(col*logfac));
+}
+
+void shade_mist_factor(vec3 co, float miststa, float mistdist, float misttype, float misi, out float outfac)
+{
+ float fac, zcor;
+
+ zcor = (gl_ProjectionMatrix[3][3] == 0.0)? length(co): -co[2];
+
+ fac = clamp((zcor-miststa)/mistdist, 0.0, 1.0);
+ if(misttype == 0.0) fac *= fac;
+ else if(misttype == 1.0);
+ else fac = sqrt(fac);
+
+ outfac = 1.0 - (1.0-fac)*(1.0-misi);
+}
+
+void shade_world_mix(vec3 hor, vec4 col, out vec4 outcol)
+{
+ float fac = clamp(col.a, 0.0, 1.0);
+ outcol = vec4(mix(hor, col.rgb, fac), col.a);
+}
+
+void shade_alpha_opaque(vec4 col, out vec4 outcol)
+{
+ outcol = vec4(col.rgb, 1.0);
+}
+
+void shade_alpha_obcolor(vec4 col, vec4 obcol, out vec4 outcol)
+{
+ outcol = vec4(col.rgb, col.a*obcol.a);
+}
+
diff --git a/source/blender/gpu/intern/gpu_shader_material.glsl.c b/source/blender/gpu/intern/gpu_shader_material.glsl.c
new file mode 100644
index 00000000000..8287efe84ea
--- /dev/null
+++ b/source/blender/gpu/intern/gpu_shader_material.glsl.c
@@ -0,0 +1,1032 @@
+/* DataToC output of file <gpu_shader_material_glsl> */
+
+int datatoc_gpu_shader_material_glsl_size= 32828;
+char datatoc_gpu_shader_material_glsl[]= {
+ 10,102,108,111, 97,116, 32,101,120,112, 95, 98,108,101,110,100,101,114, 40,102,108,111, 97,116, 32,102, 41, 10,
+123, 10, 9,114,101,116,117,114,110, 32,112,111,119, 40, 50, 46, 55, 49, 56, 50, 56, 49, 56, 50, 56, 52, 54, 44, 32,102, 41, 59,
+ 10,125, 10, 10,118,111,105,100, 32,114,103, 98, 95,116,111, 95,104,115,118, 40,118,101, 99, 52, 32,114,103, 98, 44, 32,111,117,
+116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,102,108,111, 97,116, 32, 99,109, 97,120, 44, 32, 99,109,
+105,110, 44, 32,104, 44, 32,115, 44, 32,118, 44, 32, 99,100,101,108,116, 97, 59, 10, 9,118,101, 99, 51, 32, 99, 59, 10, 10, 9,
+ 99,109, 97,120, 32, 61, 32,109, 97,120, 40,114,103, 98, 91, 48, 93, 44, 32,109, 97,120, 40,114,103, 98, 91, 49, 93, 44, 32,114,
+103, 98, 91, 50, 93, 41, 41, 59, 10, 9, 99,109,105,110, 32, 61, 32,109,105,110, 40,114,103, 98, 91, 48, 93, 44, 32,109,105,110,
+ 40,114,103, 98, 91, 49, 93, 44, 32,114,103, 98, 91, 50, 93, 41, 41, 59, 10, 9, 99,100,101,108,116, 97, 32, 61, 32, 99,109, 97,
+120, 45, 99,109,105,110, 59, 10, 10, 9,118, 32, 61, 32, 99,109, 97,120, 59, 10, 9,105,102, 32, 40, 99,109, 97,120, 33, 61, 48,
+ 46, 48, 41, 10, 9, 9,115, 32, 61, 32, 99,100,101,108,116, 97, 47, 99,109, 97,120, 59, 10, 9,101,108,115,101, 32,123, 10, 9,
+ 9,115, 32, 61, 32, 48, 46, 48, 59, 10, 9, 9,104, 32, 61, 32, 48, 46, 48, 59, 10, 9,125, 10, 10, 9,105,102, 32, 40,115, 32,
+ 61, 61, 32, 48, 46, 48, 41, 32,123, 10, 9, 9,104, 32, 61, 32, 48, 46, 48, 59, 10, 9,125, 10, 9,101,108,115,101, 32,123, 10,
+ 9, 9, 99, 32, 61, 32, 40,118,101, 99, 51, 40, 99,109, 97,120, 44, 32, 99,109, 97,120, 44, 32, 99,109, 97,120, 41, 32, 45, 32,
+114,103, 98, 46,120,121,122, 41, 47, 99,100,101,108,116, 97, 59, 10, 10, 9, 9,105,102, 32, 40,114,103, 98, 46,120, 61, 61, 99,
+109, 97,120, 41, 32,104, 32, 61, 32, 99, 91, 50, 93, 32, 45, 32, 99, 91, 49, 93, 59, 10, 9, 9,101,108,115,101, 32,105,102, 32,
+ 40,114,103, 98, 46,121, 61, 61, 99,109, 97,120, 41, 32,104, 32, 61, 32, 50, 46, 48, 32, 43, 32, 99, 91, 48, 93, 32, 45, 32, 32,
+ 99, 91, 50, 93, 59, 10, 9, 9,101,108,115,101, 32,104, 32, 61, 32, 52, 46, 48, 32, 43, 32, 99, 91, 49, 93, 32, 45, 32, 99, 91,
+ 48, 93, 59, 10, 10, 9, 9,104, 32, 47, 61, 32, 54, 46, 48, 59, 10, 10, 9, 9,105,102, 32, 40,104, 60, 48, 46, 48, 41, 10, 9,
+ 9, 9,104, 32, 43, 61, 32, 49, 46, 48, 59, 10, 9,125, 10, 10, 9,111,117,116, 99,111,108, 32, 61, 32,118,101, 99, 52, 40,104,
+ 44, 32,115, 44, 32,118, 44, 32,114,103, 98, 46,119, 41, 59, 10,125, 10, 10,118,111,105,100, 32,104,115,118, 95,116,111, 95,114,
+103, 98, 40,118,101, 99, 52, 32,104,115,118, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10,
+ 9,102,108,111, 97,116, 32,105, 44, 32,102, 44, 32,112, 44, 32,113, 44, 32,116, 44, 32,104, 44, 32,115, 44, 32,118, 59, 10, 9,
+118,101, 99, 51, 32,114,103, 98, 59, 10, 10, 9,104, 32, 61, 32,104,115,118, 91, 48, 93, 59, 10, 9,115, 32, 61, 32,104,115,118,
+ 91, 49, 93, 59, 10, 9,118, 32, 61, 32,104,115,118, 91, 50, 93, 59, 10, 10, 9,105,102, 40,115, 61, 61, 48, 46, 48, 41, 32,123,
+ 10, 9, 9,114,103, 98, 32, 61, 32,118,101, 99, 51, 40,118, 44, 32,118, 44, 32,118, 41, 59, 10, 9,125, 10, 9,101,108,115,101,
+ 32,123, 10, 9, 9,105,102, 40,104, 61, 61, 49, 46, 48, 41, 10, 9, 9, 9,104, 32, 61, 32, 48, 46, 48, 59, 10, 9, 9, 10, 9,
+ 9,104, 32, 42, 61, 32, 54, 46, 48, 59, 10, 9, 9,105, 32, 61, 32,102,108,111,111,114, 40,104, 41, 59, 10, 9, 9,102, 32, 61,
+ 32,104, 32, 45, 32,105, 59, 10, 9, 9,114,103, 98, 32, 61, 32,118,101, 99, 51, 40,102, 44, 32,102, 44, 32,102, 41, 59, 10, 9,
+ 9,112, 32, 61, 32,118, 42, 40, 49, 46, 48, 45,115, 41, 59, 10, 9, 9,113, 32, 61, 32,118, 42, 40, 49, 46, 48, 45, 40,115, 42,
+102, 41, 41, 59, 10, 9, 9,116, 32, 61, 32,118, 42, 40, 49, 46, 48, 45, 40,115, 42, 40, 49, 46, 48, 45,102, 41, 41, 41, 59, 10,
+ 9, 9, 10, 9, 9,105,102, 32, 40,105, 32, 61, 61, 32, 48, 46, 48, 41, 32,114,103, 98, 32, 61, 32,118,101, 99, 51, 40,118, 44,
+ 32,116, 44, 32,112, 41, 59, 10, 9, 9,101,108,115,101, 32,105,102, 32, 40,105, 32, 61, 61, 32, 49, 46, 48, 41, 32,114,103, 98,
+ 32, 61, 32,118,101, 99, 51, 40,113, 44, 32,118, 44, 32,112, 41, 59, 10, 9, 9,101,108,115,101, 32,105,102, 32, 40,105, 32, 61,
+ 61, 32, 50, 46, 48, 41, 32,114,103, 98, 32, 61, 32,118,101, 99, 51, 40,112, 44, 32,118, 44, 32,116, 41, 59, 10, 9, 9,101,108,
+115,101, 32,105,102, 32, 40,105, 32, 61, 61, 32, 51, 46, 48, 41, 32,114,103, 98, 32, 61, 32,118,101, 99, 51, 40,112, 44, 32,113,
+ 44, 32,118, 41, 59, 10, 9, 9,101,108,115,101, 32,105,102, 32, 40,105, 32, 61, 61, 32, 52, 46, 48, 41, 32,114,103, 98, 32, 61,
+ 32,118,101, 99, 51, 40,116, 44, 32,112, 44, 32,118, 41, 59, 10, 9, 9,101,108,115,101, 32,114,103, 98, 32, 61, 32,118,101, 99,
+ 51, 40,118, 44, 32,112, 44, 32,113, 41, 59, 10, 9,125, 10, 10, 9,111,117,116, 99,111,108, 32, 61, 32,118,101, 99, 52, 40,114,
+103, 98, 44, 32,104,115,118, 46,119, 41, 59, 10,125, 10, 10, 35,100,101,102,105,110,101, 32, 77, 95, 80, 73, 32, 51, 46, 49, 52,
+ 49, 53, 57, 50, 54, 53, 51, 53, 56, 57, 55, 57, 51, 50, 51, 56, 52, 54, 10, 10, 47, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
+ 32, 83, 72, 65, 68, 69, 82, 32, 78, 79, 68, 69, 83, 32, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 47, 10, 10,
+118,111,105,100, 32,118, 99,111,108, 95, 97,116,116,114,105, 98,117,116,101, 40,118,101, 99, 52, 32, 97,116,116,118, 99,111,108,
+ 44, 32,111,117,116, 32,118,101, 99, 52, 32,118, 99,111,108, 41, 10,123, 10, 9,118, 99,111,108, 32, 61, 32,118,101, 99, 52, 40,
+ 97,116,116,118, 99,111,108, 46,120, 47, 50, 53, 53, 46, 48, 44, 32, 97,116,116,118, 99,111,108, 46,121, 47, 50, 53, 53, 46, 48,
+ 44, 32, 97,116,116,118, 99,111,108, 46,122, 47, 50, 53, 53, 46, 48, 44, 32, 49, 46, 48, 41, 59, 10,125, 10, 10,118,111,105,100,
+ 32,117,118, 95, 97,116,116,114,105, 98,117,116,101, 40,118,101, 99, 50, 32, 97,116,116,117,118, 44, 32,111,117,116, 32,118,101,
+ 99, 51, 32,117,118, 41, 10,123, 10, 9,117,118, 32, 61, 32,118,101, 99, 51, 40, 97,116,116,117,118, 42, 50, 46, 48, 32, 45, 32,
+118,101, 99, 50, 40, 49, 46, 48, 44, 32, 49, 46, 48, 41, 44, 32, 48, 46, 48, 41, 59, 10,125, 10, 10,118,111,105,100, 32,103,101,
+111,109, 40,118,101, 99, 51, 32, 99,111, 44, 32,118,101, 99, 51, 32,110,111,114, 44, 32,109, 97,116, 52, 32,118,105,101,119,105,
+110,118,109, 97,116, 44, 32,118,101, 99, 51, 32, 97,116,116,111,114, 99,111, 44, 32,118,101, 99, 50, 32, 97,116,116,117,118, 44,
+ 32,118,101, 99, 52, 32, 97,116,116,118, 99,111,108, 44, 32,111,117,116, 32,118,101, 99, 51, 32,103,108,111, 98, 97,108, 44, 32,
+111,117,116, 32,118,101, 99, 51, 32,108,111, 99, 97,108, 44, 32,111,117,116, 32,118,101, 99, 51, 32,118,105,101,119, 44, 32,111,
+117,116, 32,118,101, 99, 51, 32,111,114, 99,111, 44, 32,111,117,116, 32,118,101, 99, 51, 32,117,118, 44, 32,111,117,116, 32,118,
+101, 99, 51, 32,110,111,114,109, 97,108, 44, 32,111,117,116, 32,118,101, 99, 52, 32,118, 99,111,108, 44, 32,111,117,116, 32,102,
+108,111, 97,116, 32,102,114,111,110,116, 98, 97, 99,107, 41, 10,123, 10, 9,108,111, 99, 97,108, 32, 61, 32, 99,111, 59, 10, 9,
+118,105,101,119, 32, 61, 32,110,111,114,109, 97,108,105,122,101, 40,108,111, 99, 97,108, 41, 59, 10, 9,103,108,111, 98, 97,108,
+ 32, 61, 32, 40,118,105,101,119,105,110,118,109, 97,116, 42,118,101, 99, 52, 40,108,111, 99, 97,108, 44, 32, 49, 46, 48, 41, 41,
+ 46,120,121,122, 59, 10, 9,111,114, 99,111, 32, 61, 32, 97,116,116,111,114, 99,111, 59, 10, 9,117,118, 95, 97,116,116,114,105,
+ 98,117,116,101, 40, 97,116,116,117,118, 44, 32,117,118, 41, 59, 10, 9,110,111,114,109, 97,108, 32, 61, 32, 45,110,111,114,109,
+ 97,108,105,122,101, 40,110,111,114, 41, 59, 9, 47, 42, 32, 98,108,101,110,100,101,114, 32,114,101,110,100,101,114, 32,110,111,
+114,109, 97,108, 32,105,115, 32,110,101,103, 97,116,101,100, 32, 42, 47, 10, 9,118, 99,111,108, 95, 97,116,116,114,105, 98,117,
+116,101, 40, 97,116,116,118, 99,111,108, 44, 32,118, 99,111,108, 41, 59, 10, 9,102,114,111,110,116, 98, 97, 99,107, 32, 61, 32,
+ 49, 46, 48, 59, 10,125, 10, 10,118,111,105,100, 32,109, 97,112,112,105,110,103, 40,118,101, 99, 51, 32,118,101, 99, 44, 32,109,
+ 97,116, 52, 32,109, 97,116, 44, 32,118,101, 99, 51, 32,109,105,110,118,101, 99, 44, 32,118,101, 99, 51, 32,109, 97,120,118,101,
+ 99, 44, 32,102,108,111, 97,116, 32,100,111,109,105,110, 44, 32,102,108,111, 97,116, 32,100,111,109, 97,120, 44, 32,111,117,116,
+ 32,118,101, 99, 51, 32,111,117,116,118,101, 99, 41, 10,123, 10, 9,111,117,116,118,101, 99, 32, 61, 32, 40,109, 97,116, 32, 42,
+ 32,118,101, 99, 52, 40,118,101, 99, 44, 32, 49, 46, 48, 41, 41, 46,120,121,122, 59, 10, 9,105,102, 40,100,111,109,105,110, 32,
+ 61, 61, 32, 49, 46, 48, 41, 10, 9, 9,111,117,116,118,101, 99, 32, 61, 32,109, 97,120, 40,111,117,116,118,101, 99, 44, 32,109,
+105,110,118,101, 99, 41, 59, 10, 9,105,102, 40,100,111,109, 97,120, 32, 61, 61, 32, 49, 46, 48, 41, 10, 9, 9,111,117,116,118,
+101, 99, 32, 61, 32,109,105,110, 40,111,117,116,118,101, 99, 44, 32,109, 97,120,118,101, 99, 41, 59, 10,125, 10, 10,118,111,105,
+100, 32, 99, 97,109,101,114, 97, 40,118,101, 99, 51, 32, 99,111, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116,118,105,
+101,119, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,100,101,112,116,104, 44, 32,111,117,116, 32,102,108,111, 97,
+116, 32,111,117,116,100,105,115,116, 41, 10,123, 10, 9,111,117,116,100,101,112,116,104, 32, 61, 32, 97, 98,115, 40, 99,111, 46,
+122, 41, 59, 10, 9,111,117,116,100,105,115,116, 32, 61, 32,108,101,110,103,116,104, 40, 99,111, 41, 59, 10, 9,111,117,116,118,
+105,101,119, 32, 61, 32,110,111,114,109, 97,108,105,122,101, 40, 99,111, 41, 59, 10,125, 10, 10,118,111,105,100, 32,109, 97,116,
+104, 95, 97,100,100, 40,102,108,111, 97,116, 32,118, 97,108, 49, 44, 32,102,108,111, 97,116, 32,118, 97,108, 50, 44, 32,111,117,
+116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118, 97,108, 32, 61, 32,118, 97,108, 49,
+ 32, 43, 32,118, 97,108, 50, 59, 10,125, 10, 10,118,111,105,100, 32,109, 97,116,104, 95,115,117, 98,116,114, 97, 99,116, 40,102,
+108,111, 97,116, 32,118, 97,108, 49, 44, 32,102,108,111, 97,116, 32,118, 97,108, 50, 44, 32,111,117,116, 32,102,108,111, 97,116,
+ 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118, 97,108, 32, 61, 32,118, 97,108, 49, 32, 45, 32,118, 97,108, 50,
+ 59, 10,125, 10, 10,118,111,105,100, 32,109, 97,116,104, 95,109,117,108,116,105,112,108,121, 40,102,108,111, 97,116, 32,118, 97,
+108, 49, 44, 32,102,108,111, 97,116, 32,118, 97,108, 50, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108,
+ 41, 10,123, 10, 9,111,117,116,118, 97,108, 32, 61, 32,118, 97,108, 49, 32, 42, 32,118, 97,108, 50, 59, 10,125, 10, 10,118,111,
+105,100, 32,109, 97,116,104, 95,100,105,118,105,100,101, 40,102,108,111, 97,116, 32,118, 97,108, 49, 44, 32,102,108,111, 97,116,
+ 32,118, 97,108, 50, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,105,102, 32, 40,
+118, 97,108, 50, 32, 61, 61, 32, 48, 46, 48, 41, 10, 9, 9,111,117,116,118, 97,108, 32, 61, 32, 48, 46, 48, 59, 10, 9,101,108,
+115,101, 10, 9, 9,111,117,116,118, 97,108, 32, 61, 32,118, 97,108, 49, 32, 47, 32,118, 97,108, 50, 59, 10,125, 10, 10,118,111,
+105,100, 32,109, 97,116,104, 95,115,105,110,101, 40,102,108,111, 97,116, 32,118, 97,108, 44, 32,111,117,116, 32,102,108,111, 97,
+116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118, 97,108, 32, 61, 32,115,105,110, 40,118, 97,108, 41, 59, 10,
+125, 10, 10,118,111,105,100, 32,109, 97,116,104, 95, 99,111,115,105,110,101, 40,102,108,111, 97,116, 32,118, 97,108, 44, 32,111,
+117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118, 97,108, 32, 61, 32, 99,111,115,
+ 40,118, 97,108, 41, 59, 10,125, 10, 10,118,111,105,100, 32,109, 97,116,104, 95,116, 97,110,103,101,110,116, 40,102,108,111, 97,
+116, 32,118, 97,108, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118,
+ 97,108, 32, 61, 32,116, 97,110, 40,118, 97,108, 41, 59, 10,125, 10, 10,118,111,105,100, 32,109, 97,116,104, 95, 97,115,105,110,
+ 40,102,108,111, 97,116, 32,118, 97,108, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10,
+ 9,105,102, 32, 40,118, 97,108, 32, 60, 61, 32, 49, 46, 48, 32, 38, 38, 32,118, 97,108, 32, 62, 61, 32, 45, 49, 46, 48, 41, 10,
+ 9, 9,111,117,116,118, 97,108, 32, 61, 32, 97,115,105,110, 40,118, 97,108, 41, 59, 10, 9,101,108,115,101, 10, 9, 9,111,117,
+116,118, 97,108, 32, 61, 32, 48, 46, 48, 59, 10,125, 10, 10,118,111,105,100, 32,109, 97,116,104, 95, 97, 99,111,115, 40,102,108,
+111, 97,116, 32,118, 97,108, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,105,102,
+ 32, 40,118, 97,108, 32, 60, 61, 32, 49, 46, 48, 32, 38, 38, 32,118, 97,108, 32, 62, 61, 32, 45, 49, 46, 48, 41, 10, 9, 9,111,
+117,116,118, 97,108, 32, 61, 32, 97, 99,111,115, 40,118, 97,108, 41, 59, 10, 9,101,108,115,101, 10, 9, 9,111,117,116,118, 97,
+108, 32, 61, 32, 48, 46, 48, 59, 10,125, 10, 10,118,111,105,100, 32,109, 97,116,104, 95, 97,116, 97,110, 40,102,108,111, 97,116,
+ 32,118, 97,108, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118, 97,
+108, 32, 61, 32, 97,116, 97,110, 40,118, 97,108, 41, 59, 10,125, 10, 10,118,111,105,100, 32,109, 97,116,104, 95,112,111,119, 40,
+102,108,111, 97,116, 32,118, 97,108, 49, 44, 32,102,108,111, 97,116, 32,118, 97,108, 50, 44, 32,111,117,116, 32,102,108,111, 97,
+116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,105,102, 32, 40,118, 97,108, 49, 32, 62, 61, 32, 48, 46, 48, 41, 10, 9, 9,
+111,117,116,118, 97,108, 32, 61, 32,112,111,119, 40,118, 97,108, 49, 44, 32,118, 97,108, 50, 41, 59, 10, 9,101,108,115,101, 10,
+ 9, 9,111,117,116,118, 97,108, 32, 61, 32, 48, 46, 48, 59, 10,125, 10, 10,118,111,105,100, 32,109, 97,116,104, 95,108,111,103,
+ 40,102,108,111, 97,116, 32,118, 97,108, 49, 44, 32,102,108,111, 97,116, 32,118, 97,108, 50, 44, 32,111,117,116, 32,102,108,111,
+ 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,105,102, 40,118, 97,108, 49, 32, 62, 32, 48, 46, 48, 32, 32, 38, 38, 32,
+118, 97,108, 50, 32, 62, 32, 48, 46, 48, 41, 10, 9, 9,111,117,116,118, 97,108, 61, 32,108,111,103, 50, 40,118, 97,108, 49, 41,
+ 32, 47, 32,108,111,103, 50, 40,118, 97,108, 50, 41, 59, 10, 9,101,108,115,101, 10, 9, 9,111,117,116,118, 97,108, 61, 32, 48,
+ 46, 48, 59, 10,125, 10, 10,118,111,105,100, 32,109, 97,116,104, 95,109, 97,120, 40,102,108,111, 97,116, 32,118, 97,108, 49, 44,
+ 32,102,108,111, 97,116, 32,118, 97,108, 50, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123,
+ 10, 9,111,117,116,118, 97,108, 32, 61, 32,109, 97,120, 40,118, 97,108, 49, 44, 32,118, 97,108, 50, 41, 59, 10,125, 10, 10,118,
+111,105,100, 32,109, 97,116,104, 95,109,105,110, 40,102,108,111, 97,116, 32,118, 97,108, 49, 44, 32,102,108,111, 97,116, 32,118,
+ 97,108, 50, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118, 97,108,
+ 32, 61, 32,109,105,110, 40,118, 97,108, 49, 44, 32,118, 97,108, 50, 41, 59, 10,125, 10, 10,118,111,105,100, 32,109, 97,116,104,
+ 95,114,111,117,110,100, 40,102,108,111, 97,116, 32,118, 97,108, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118,
+ 97,108, 41, 10,123, 10, 9,111,117,116,118, 97,108, 61, 32,102,108,111,111,114, 40,118, 97,108, 32, 43, 32, 48, 46, 53, 41, 59,
+ 10,125, 10, 10,118,111,105,100, 32,109, 97,116,104, 95,108,101,115,115, 95,116,104, 97,110, 40,102,108,111, 97,116, 32,118, 97,
+108, 49, 44, 32,102,108,111, 97,116, 32,118, 97,108, 50, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108,
+ 41, 10,123, 10, 9,105,102, 40,118, 97,108, 49, 32, 60, 32,118, 97,108, 50, 41, 10, 9, 9,111,117,116,118, 97,108, 32, 61, 32,
+ 49, 46, 48, 59, 10, 9,101,108,115,101, 10, 9, 9,111,117,116,118, 97,108, 32, 61, 32, 48, 46, 48, 59, 10,125, 10, 10,118,111,
+105,100, 32,109, 97,116,104, 95,103,114,101, 97,116,101,114, 95,116,104, 97,110, 40,102,108,111, 97,116, 32,118, 97,108, 49, 44,
+ 32,102,108,111, 97,116, 32,118, 97,108, 50, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123,
+ 10, 9,105,102, 40,118, 97,108, 49, 32, 62, 32,118, 97,108, 50, 41, 10, 9, 9,111,117,116,118, 97,108, 32, 61, 32, 49, 46, 48,
+ 59, 10, 9,101,108,115,101, 10, 9, 9,111,117,116,118, 97,108, 32, 61, 32, 48, 46, 48, 59, 10,125, 10, 10,118,111,105,100, 32,
+115,113,117,101,101,122,101, 40,102,108,111, 97,116, 32,118, 97,108, 44, 32,102,108,111, 97,116, 32,119,105,100,116,104, 44, 32,
+102,108,111, 97,116, 32, 99,101,110,116,101,114, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,
+123, 10, 9,111,117,116,118, 97,108, 32, 61, 32, 49, 46, 48, 47, 40, 49, 46, 48, 32, 43, 32,112,111,119, 40, 50, 46, 55, 49, 56,
+ 50, 56, 49, 56, 51, 44, 32, 45, 40, 40,118, 97,108, 45, 99,101,110,116,101,114, 41, 42,119,105,100,116,104, 41, 41, 41, 59, 10,
+125, 10, 10,118,111,105,100, 32,118,101, 99, 95,109, 97,116,104, 95, 97,100,100, 40,118,101, 99, 51, 32,118, 49, 44, 32,118,101,
+ 99, 51, 32,118, 50, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116,118,101, 99, 44, 32,111,117,116, 32,102,108,111, 97,
+116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118,101, 99, 32, 61, 32,118, 49, 32, 43, 32,118, 50, 59, 10, 9,
+111,117,116,118, 97,108, 32, 61, 32, 40, 97, 98,115, 40,111,117,116,118,101, 99, 91, 48, 93, 41, 32, 43, 32, 97, 98,115, 40,111,
+117,116,118,101, 99, 91, 49, 93, 41, 32, 43, 32, 97, 98,115, 40,111,117,116,118,101, 99, 91, 50, 93, 41, 41, 47, 51, 46, 48, 59,
+ 10,125, 10, 10,118,111,105,100, 32,118,101, 99, 95,109, 97,116,104, 95,115,117, 98, 40,118,101, 99, 51, 32,118, 49, 44, 32,118,
+101, 99, 51, 32,118, 50, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116,118,101, 99, 44, 32,111,117,116, 32,102,108,111,
+ 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118,101, 99, 32, 61, 32,118, 49, 32, 45, 32,118, 50, 59, 10,
+ 9,111,117,116,118, 97,108, 32, 61, 32, 40, 97, 98,115, 40,111,117,116,118,101, 99, 91, 48, 93, 41, 32, 43, 32, 97, 98,115, 40,
+111,117,116,118,101, 99, 91, 49, 93, 41, 32, 43, 32, 97, 98,115, 40,111,117,116,118,101, 99, 91, 50, 93, 41, 41, 47, 51, 46, 48,
+ 59, 10,125, 10, 10,118,111,105,100, 32,118,101, 99, 95,109, 97,116,104, 95, 97,118,101,114, 97,103,101, 40,118,101, 99, 51, 32,
+118, 49, 44, 32,118,101, 99, 51, 32,118, 50, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116,118,101, 99, 44, 32,111,117,
+116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118,101, 99, 32, 61, 32,118, 49, 32, 43,
+ 32,118, 50, 59, 10, 9,111,117,116,118, 97,108, 32, 61, 32,108,101,110,103,116,104, 40,111,117,116,118,101, 99, 41, 59, 10, 9,
+111,117,116,118,101, 99, 32, 61, 32,110,111,114,109, 97,108,105,122,101, 40,111,117,116,118,101, 99, 41, 59, 10,125, 10, 10,118,
+111,105,100, 32,118,101, 99, 95,109, 97,116,104, 95,100,111,116, 40,118,101, 99, 51, 32,118, 49, 44, 32,118,101, 99, 51, 32,118,
+ 50, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116,118,101, 99, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,
+116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118,101, 99, 32, 61, 32,118,101, 99, 51, 40, 48, 44, 32, 48, 44, 32, 48, 41, 59,
+ 10, 9,111,117,116,118, 97,108, 32, 61, 32,100,111,116, 40,118, 49, 44, 32,118, 50, 41, 59, 10,125, 10, 10,118,111,105,100, 32,
+118,101, 99, 95,109, 97,116,104, 95, 99,114,111,115,115, 40,118,101, 99, 51, 32,118, 49, 44, 32,118,101, 99, 51, 32,118, 50, 44,
+ 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116,118,101, 99, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118,
+ 97,108, 41, 10,123, 10, 9,111,117,116,118,101, 99, 32, 61, 32, 99,114,111,115,115, 40,118, 49, 44, 32,118, 50, 41, 59, 10, 9,
+111,117,116,118, 97,108, 32, 61, 32,108,101,110,103,116,104, 40,111,117,116,118,101, 99, 41, 59, 10,125, 10, 10,118,111,105,100,
+ 32,118,101, 99, 95,109, 97,116,104, 95,110,111,114,109, 97,108,105,122,101, 40,118,101, 99, 51, 32,118, 44, 32,111,117,116, 32,
+118,101, 99, 51, 32,111,117,116,118,101, 99, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123,
+ 10, 9,111,117,116,118, 97,108, 32, 61, 32,108,101,110,103,116,104, 40,118, 41, 59, 10, 9,111,117,116,118,101, 99, 32, 61, 32,
+110,111,114,109, 97,108,105,122,101, 40,118, 41, 59, 10,125, 10, 10,118,111,105,100, 32,118,101, 99, 95,109, 97,116,104, 95,110,
+101,103, 97,116,101, 40,118,101, 99, 51, 32,118, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116,118, 41, 10,123, 10, 9,
+111,117,116,118, 32, 61, 32, 45,118, 59, 10,125, 10, 10,118,111,105,100, 32,110,111,114,109, 97,108, 40,118,101, 99, 51, 32,100,
+105,114, 44, 32,118,101, 99, 51, 32,110,111,114, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116,110,111,114, 44, 32,111,
+117,116, 32,102,108,111, 97,116, 32,111,117,116,100,111,116, 41, 10,123, 10, 9,111,117,116,110,111,114, 32, 61, 32,100,105,114,
+ 59, 10, 9,111,117,116,100,111,116, 32, 61, 32, 45,100,111,116, 40,100,105,114, 44, 32,110,111,114, 41, 59, 10,125, 10, 10,118,
+111,105,100, 32, 99,117,114,118,101,115, 95,118,101, 99, 40,118,101, 99, 51, 32,118,101, 99, 44, 32,115, 97,109,112,108,101,114,
+ 49, 68, 32, 99,117,114,118,101,109, 97,112, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116,118,101, 99, 41, 10,123, 10,
+ 9,111,117,116,118,101, 99, 46,120, 32, 61, 32,116,101,120,116,117,114,101, 49, 68, 40, 99,117,114,118,101,109, 97,112, 44, 32,
+ 40,118,101, 99, 46,120, 32, 43, 32, 49, 46, 48, 41, 42, 48, 46, 53, 41, 46,120, 59, 10, 9,111,117,116,118,101, 99, 46,121, 32,
+ 61, 32,116,101,120,116,117,114,101, 49, 68, 40, 99,117,114,118,101,109, 97,112, 44, 32, 40,118,101, 99, 46,121, 32, 43, 32, 49,
+ 46, 48, 41, 42, 48, 46, 53, 41, 46,121, 59, 10, 9,111,117,116,118,101, 99, 46,122, 32, 61, 32,116,101,120,116,117,114,101, 49,
+ 68, 40, 99,117,114,118,101,109, 97,112, 44, 32, 40,118,101, 99, 46,122, 32, 43, 32, 49, 46, 48, 41, 42, 48, 46, 53, 41, 46,122,
+ 59, 10,125, 10, 10,118,111,105,100, 32, 99,117,114,118,101,115, 95,114,103, 98, 40,118,101, 99, 52, 32, 99,111,108, 44, 32,115,
+ 97,109,112,108,101,114, 49, 68, 32, 99,117,114,118,101,109, 97,112, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,
+111,108, 41, 10,123, 10, 9,111,117,116, 99,111,108, 46,114, 32, 61, 32,116,101,120,116,117,114,101, 49, 68, 40, 99,117,114,118,
+101,109, 97,112, 44, 32,116,101,120,116,117,114,101, 49, 68, 40, 99,117,114,118,101,109, 97,112, 44, 32, 99,111,108, 46,114, 41,
+ 46, 97, 41, 46,114, 59, 10, 9,111,117,116, 99,111,108, 46,103, 32, 61, 32,116,101,120,116,117,114,101, 49, 68, 40, 99,117,114,
+118,101,109, 97,112, 44, 32,116,101,120,116,117,114,101, 49, 68, 40, 99,117,114,118,101,109, 97,112, 44, 32, 99,111,108, 46,103,
+ 41, 46, 97, 41, 46,103, 59, 10, 9,111,117,116, 99,111,108, 46, 98, 32, 61, 32,116,101,120,116,117,114,101, 49, 68, 40, 99,117,
+114,118,101,109, 97,112, 44, 32,116,101,120,116,117,114,101, 49, 68, 40, 99,117,114,118,101,109, 97,112, 44, 32, 99,111,108, 46,
+ 98, 41, 46, 97, 41, 46, 98, 59, 10, 9,111,117,116, 99,111,108, 46, 97, 32, 61, 32, 99,111,108, 46, 97, 59, 10,125, 10, 10,118,
+111,105,100, 32,115,101,116, 95,118, 97,108,117,101, 40,102,108,111, 97,116, 32,118, 97,108, 44, 32,111,117,116, 32,102,108,111,
+ 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118, 97,108, 32, 61, 32,118, 97,108, 59, 10,125, 10, 10,118,
+111,105,100, 32,115,101,116, 95,114,103, 98, 40,118,101, 99, 51, 32, 99,111,108, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,
+117,116, 99,111,108, 41, 10,123, 10, 9,111,117,116, 99,111,108, 32, 61, 32, 99,111,108, 59, 10,125, 10, 10,118,111,105,100, 32,
+115,101,116, 95,114,103, 98, 97, 40,118,101, 99, 52, 32, 99,111,108, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,
+111,108, 41, 10,123, 10, 9,111,117,116, 99,111,108, 32, 61, 32, 99,111,108, 59, 10,125, 10, 10,118,111,105,100, 32,115,101,116,
+ 95,118, 97,108,117,101, 95,122,101,114,111, 40,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10,
+ 9,111,117,116,118, 97,108, 32, 61, 32, 48, 46, 48, 59, 10,125, 10, 10,118,111,105,100, 32,115,101,116, 95,118, 97,108,117,101,
+ 95,111,110,101, 40,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118, 97,108,
+ 32, 61, 32, 49, 46, 48, 59, 10,125, 10, 10,118,111,105,100, 32,115,101,116, 95,114,103, 98, 95,122,101,114,111, 40,111,117,116,
+ 32,118,101, 99, 51, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118, 97,108, 32, 61, 32,118,101, 99, 51, 40, 48,
+ 46, 48, 41, 59, 10,125, 10, 10,118,111,105,100, 32,115,101,116, 95,114,103, 98, 97, 95,122,101,114,111, 40,111,117,116, 32,118,
+101, 99, 52, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118, 97,108, 32, 61, 32,118,101, 99, 52, 40, 48, 46, 48,
+ 41, 59, 10,125, 10, 10,118,111,105,100, 32,109,105,120, 95, 98,108,101,110,100, 40,102,108,111, 97,116, 32,102, 97, 99, 44, 32,
+118,101, 99, 52, 32, 99,111,108, 49, 44, 32,118,101, 99, 52, 32, 99,111,108, 50, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,
+117,116, 99,111,108, 41, 10,123, 10, 9,102, 97, 99, 32, 61, 32, 99,108, 97,109,112, 40,102, 97, 99, 44, 32, 48, 46, 48, 44, 32,
+ 49, 46, 48, 41, 59, 10, 9,111,117,116, 99,111,108, 32, 61, 32,109,105,120, 40, 99,111,108, 49, 44, 32, 99,111,108, 50, 44, 32,
+102, 97, 99, 41, 59, 10, 9,111,117,116, 99,111,108, 46, 97, 32, 61, 32, 99,111,108, 49, 46, 97, 59, 10,125, 10, 10,118,111,105,
+100, 32,109,105,120, 95, 97,100,100, 40,102,108,111, 97,116, 32,102, 97, 99, 44, 32,118,101, 99, 52, 32, 99,111,108, 49, 44, 32,
+118,101, 99, 52, 32, 99,111,108, 50, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,102,
+ 97, 99, 32, 61, 32, 99,108, 97,109,112, 40,102, 97, 99, 44, 32, 48, 46, 48, 44, 32, 49, 46, 48, 41, 59, 10, 9,111,117,116, 99,
+111,108, 32, 61, 32,109,105,120, 40, 99,111,108, 49, 44, 32, 99,111,108, 49, 32, 43, 32, 99,111,108, 50, 44, 32,102, 97, 99, 41,
+ 59, 10, 9,111,117,116, 99,111,108, 46, 97, 32, 61, 32, 99,111,108, 49, 46, 97, 59, 10,125, 10, 10,118,111,105,100, 32,109,105,
+120, 95,109,117,108,116, 40,102,108,111, 97,116, 32,102, 97, 99, 44, 32,118,101, 99, 52, 32, 99,111,108, 49, 44, 32,118,101, 99,
+ 52, 32, 99,111,108, 50, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,102, 97, 99, 32,
+ 61, 32, 99,108, 97,109,112, 40,102, 97, 99, 44, 32, 48, 46, 48, 44, 32, 49, 46, 48, 41, 59, 10, 9,111,117,116, 99,111,108, 32,
+ 61, 32,109,105,120, 40, 99,111,108, 49, 44, 32, 99,111,108, 49, 32, 42, 32, 99,111,108, 50, 44, 32,102, 97, 99, 41, 59, 10, 9,
+111,117,116, 99,111,108, 46, 97, 32, 61, 32, 99,111,108, 49, 46, 97, 59, 10,125, 10, 10,118,111,105,100, 32,109,105,120, 95,115,
+ 99,114,101,101,110, 40,102,108,111, 97,116, 32,102, 97, 99, 44, 32,118,101, 99, 52, 32, 99,111,108, 49, 44, 32,118,101, 99, 52,
+ 32, 99,111,108, 50, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,102, 97, 99, 32, 61,
+ 32, 99,108, 97,109,112, 40,102, 97, 99, 44, 32, 48, 46, 48, 44, 32, 49, 46, 48, 41, 59, 10, 9,102,108,111, 97,116, 32,102, 97,
+ 99,109, 32, 61, 32, 49, 46, 48, 32, 45, 32,102, 97, 99, 59, 10, 10, 9,111,117,116, 99,111,108, 32, 61, 32,118,101, 99, 52, 40,
+ 49, 46, 48, 41, 32, 45, 32, 40,118,101, 99, 52, 40,102, 97, 99,109, 41, 32, 43, 32,102, 97, 99, 42, 40,118,101, 99, 52, 40, 49,
+ 46, 48, 41, 32, 45, 32, 99,111,108, 50, 41, 41, 42, 40,118,101, 99, 52, 40, 49, 46, 48, 41, 32, 45, 32, 99,111,108, 49, 41, 59,
+ 10, 9,111,117,116, 99,111,108, 46, 97, 32, 61, 32, 99,111,108, 49, 46, 97, 59, 10,125, 10, 10,118,111,105,100, 32,109,105,120,
+ 95,111,118,101,114,108, 97,121, 40,102,108,111, 97,116, 32,102, 97, 99, 44, 32,118,101, 99, 52, 32, 99,111,108, 49, 44, 32,118,
+101, 99, 52, 32, 99,111,108, 50, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,102, 97,
+ 99, 32, 61, 32, 99,108, 97,109,112, 40,102, 97, 99, 44, 32, 48, 46, 48, 44, 32, 49, 46, 48, 41, 59, 10, 9,102,108,111, 97,116,
+ 32,102, 97, 99,109, 32, 61, 32, 49, 46, 48, 32, 45, 32,102, 97, 99, 59, 10, 10, 9,111,117,116, 99,111,108, 32, 61, 32, 99,111,
+108, 49, 59, 10, 10, 9,105,102, 40,111,117,116, 99,111,108, 46,114, 32, 60, 32, 48, 46, 53, 41, 10, 9, 9,111,117,116, 99,111,
+108, 46,114, 32, 42, 61, 32,102, 97, 99,109, 32, 43, 32, 50, 46, 48, 42,102, 97, 99, 42, 99,111,108, 50, 46,114, 59, 10, 9,101,
+108,115,101, 10, 9, 9,111,117,116, 99,111,108, 46,114, 32, 61, 32, 49, 46, 48, 32, 45, 32, 40,102, 97, 99,109, 32, 43, 32, 50,
+ 46, 48, 42,102, 97, 99, 42, 40, 49, 46, 48, 32, 45, 32, 99,111,108, 50, 46,114, 41, 41, 42, 40, 49, 46, 48, 32, 45, 32,111,117,
+116, 99,111,108, 46,114, 41, 59, 10, 10, 9,105,102, 40,111,117,116, 99,111,108, 46,103, 32, 60, 32, 48, 46, 53, 41, 10, 9, 9,
+111,117,116, 99,111,108, 46,103, 32, 42, 61, 32,102, 97, 99,109, 32, 43, 32, 50, 46, 48, 42,102, 97, 99, 42, 99,111,108, 50, 46,
+103, 59, 10, 9,101,108,115,101, 10, 9, 9,111,117,116, 99,111,108, 46,103, 32, 61, 32, 49, 46, 48, 32, 45, 32, 40,102, 97, 99,
+109, 32, 43, 32, 50, 46, 48, 42,102, 97, 99, 42, 40, 49, 46, 48, 32, 45, 32, 99,111,108, 50, 46,103, 41, 41, 42, 40, 49, 46, 48,
+ 32, 45, 32,111,117,116, 99,111,108, 46,103, 41, 59, 10, 10, 9,105,102, 40,111,117,116, 99,111,108, 46, 98, 32, 60, 32, 48, 46,
+ 53, 41, 10, 9, 9,111,117,116, 99,111,108, 46, 98, 32, 42, 61, 32,102, 97, 99,109, 32, 43, 32, 50, 46, 48, 42,102, 97, 99, 42,
+ 99,111,108, 50, 46, 98, 59, 10, 9,101,108,115,101, 10, 9, 9,111,117,116, 99,111,108, 46, 98, 32, 61, 32, 49, 46, 48, 32, 45,
+ 32, 40,102, 97, 99,109, 32, 43, 32, 50, 46, 48, 42,102, 97, 99, 42, 40, 49, 46, 48, 32, 45, 32, 99,111,108, 50, 46, 98, 41, 41,
+ 42, 40, 49, 46, 48, 32, 45, 32,111,117,116, 99,111,108, 46, 98, 41, 59, 10,125, 10, 10,118,111,105,100, 32,109,105,120, 95,115,
+117, 98, 40,102,108,111, 97,116, 32,102, 97, 99, 44, 32,118,101, 99, 52, 32, 99,111,108, 49, 44, 32,118,101, 99, 52, 32, 99,111,
+108, 50, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,102, 97, 99, 32, 61, 32, 99,108,
+ 97,109,112, 40,102, 97, 99, 44, 32, 48, 46, 48, 44, 32, 49, 46, 48, 41, 59, 10, 9,111,117,116, 99,111,108, 32, 61, 32,109,105,
+120, 40, 99,111,108, 49, 44, 32, 99,111,108, 49, 32, 45, 32, 99,111,108, 50, 44, 32,102, 97, 99, 41, 59, 10, 9,111,117,116, 99,
+111,108, 46, 97, 32, 61, 32, 99,111,108, 49, 46, 97, 59, 10,125, 10, 10,118,111,105,100, 32,109,105,120, 95,100,105,118, 40,102,
+108,111, 97,116, 32,102, 97, 99, 44, 32,118,101, 99, 52, 32, 99,111,108, 49, 44, 32,118,101, 99, 52, 32, 99,111,108, 50, 44, 32,
+111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,102, 97, 99, 32, 61, 32, 99,108, 97,109,112, 40,
+102, 97, 99, 44, 32, 48, 46, 48, 44, 32, 49, 46, 48, 41, 59, 10, 9,102,108,111, 97,116, 32,102, 97, 99,109, 32, 61, 32, 49, 46,
+ 48, 32, 45, 32,102, 97, 99, 59, 10, 10, 9,111,117,116, 99,111,108, 32, 61, 32, 99,111,108, 49, 59, 10, 10, 9,105,102, 40, 99,
+111,108, 50, 46,114, 32, 33, 61, 32, 48, 46, 48, 41, 32,111,117,116, 99,111,108, 46,114, 32, 61, 32,102, 97, 99,109, 42,111,117,
+116, 99,111,108, 46,114, 32, 43, 32,102, 97, 99, 42,111,117,116, 99,111,108, 46,114, 47, 99,111,108, 50, 46,114, 59, 10, 9,105,
+102, 40, 99,111,108, 50, 46,103, 32, 33, 61, 32, 48, 46, 48, 41, 32,111,117,116, 99,111,108, 46,103, 32, 61, 32,102, 97, 99,109,
+ 42,111,117,116, 99,111,108, 46,103, 32, 43, 32,102, 97, 99, 42,111,117,116, 99,111,108, 46,103, 47, 99,111,108, 50, 46,103, 59,
+ 10, 9,105,102, 40, 99,111,108, 50, 46, 98, 32, 33, 61, 32, 48, 46, 48, 41, 32,111,117,116, 99,111,108, 46, 98, 32, 61, 32,102,
+ 97, 99,109, 42,111,117,116, 99,111,108, 46, 98, 32, 43, 32,102, 97, 99, 42,111,117,116, 99,111,108, 46, 98, 47, 99,111,108, 50,
+ 46, 98, 59, 10,125, 10, 10,118,111,105,100, 32,109,105,120, 95,100,105,102,102, 40,102,108,111, 97,116, 32,102, 97, 99, 44, 32,
+118,101, 99, 52, 32, 99,111,108, 49, 44, 32,118,101, 99, 52, 32, 99,111,108, 50, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,
+117,116, 99,111,108, 41, 10,123, 10, 9,102, 97, 99, 32, 61, 32, 99,108, 97,109,112, 40,102, 97, 99, 44, 32, 48, 46, 48, 44, 32,
+ 49, 46, 48, 41, 59, 10, 9,111,117,116, 99,111,108, 32, 61, 32,109,105,120, 40, 99,111,108, 49, 44, 32, 97, 98,115, 40, 99,111,
+108, 49, 32, 45, 32, 99,111,108, 50, 41, 44, 32,102, 97, 99, 41, 59, 10, 9,111,117,116, 99,111,108, 46, 97, 32, 61, 32, 99,111,
+108, 49, 46, 97, 59, 10,125, 10, 10,118,111,105,100, 32,109,105,120, 95,100, 97,114,107, 40,102,108,111, 97,116, 32,102, 97, 99,
+ 44, 32,118,101, 99, 52, 32, 99,111,108, 49, 44, 32,118,101, 99, 52, 32, 99,111,108, 50, 44, 32,111,117,116, 32,118,101, 99, 52,
+ 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,102, 97, 99, 32, 61, 32, 99,108, 97,109,112, 40,102, 97, 99, 44, 32, 48, 46, 48,
+ 44, 32, 49, 46, 48, 41, 59, 10, 9,111,117,116, 99,111,108, 46,114,103, 98, 32, 61, 32,109,105,110, 40, 99,111,108, 49, 46,114,
+103, 98, 44, 32, 99,111,108, 50, 46,114,103, 98, 42,102, 97, 99, 41, 59, 10, 9,111,117,116, 99,111,108, 46, 97, 32, 61, 32, 99,
+111,108, 49, 46, 97, 59, 10,125, 10, 10,118,111,105,100, 32,109,105,120, 95,108,105,103,104,116, 40,102,108,111, 97,116, 32,102,
+ 97, 99, 44, 32,118,101, 99, 52, 32, 99,111,108, 49, 44, 32,118,101, 99, 52, 32, 99,111,108, 50, 44, 32,111,117,116, 32,118,101,
+ 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,102, 97, 99, 32, 61, 32, 99,108, 97,109,112, 40,102, 97, 99, 44, 32, 48,
+ 46, 48, 44, 32, 49, 46, 48, 41, 59, 10, 9,111,117,116, 99,111,108, 46,114,103, 98, 32, 61, 32,109, 97,120, 40, 99,111,108, 49,
+ 46,114,103, 98, 44, 32, 99,111,108, 50, 46,114,103, 98, 42,102, 97, 99, 41, 59, 10, 9,111,117,116, 99,111,108, 46, 97, 32, 61,
+ 32, 99,111,108, 49, 46, 97, 59, 10,125, 10, 10,118,111,105,100, 32,109,105,120, 95,100,111,100,103,101, 40,102,108,111, 97,116,
+ 32,102, 97, 99, 44, 32,118,101, 99, 52, 32, 99,111,108, 49, 44, 32,118,101, 99, 52, 32, 99,111,108, 50, 44, 32,111,117,116, 32,
+118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,102, 97, 99, 32, 61, 32, 99,108, 97,109,112, 40,102, 97, 99, 44,
+ 32, 48, 46, 48, 44, 32, 49, 46, 48, 41, 59, 10, 9,111,117,116, 99,111,108, 32, 61, 32, 99,111,108, 49, 59, 10, 10, 9,105,102,
+ 40,111,117,116, 99,111,108, 46,114, 32, 33, 61, 32, 48, 46, 48, 41, 32,123, 10, 9, 9,102,108,111, 97,116, 32,116,109,112, 32,
+ 61, 32, 49, 46, 48, 32, 45, 32,102, 97, 99, 42, 99,111,108, 50, 46,114, 59, 10, 9, 9,105,102, 40,116,109,112, 32, 60, 61, 32,
+ 48, 46, 48, 41, 10, 9, 9, 9,111,117,116, 99,111,108, 46,114, 32, 61, 32, 49, 46, 48, 59, 10, 9, 9,101,108,115,101, 32,105,
+102, 40, 40,116,109,112, 32, 61, 32,111,117,116, 99,111,108, 46,114, 47,116,109,112, 41, 32, 62, 32, 49, 46, 48, 41, 10, 9, 9,
+ 9,111,117,116, 99,111,108, 46,114, 32, 61, 32, 49, 46, 48, 59, 10, 9, 9,101,108,115,101, 10, 9, 9, 9,111,117,116, 99,111,
+108, 46,114, 32, 61, 32,116,109,112, 59, 10, 9,125, 10, 9,105,102, 40,111,117,116, 99,111,108, 46,103, 32, 33, 61, 32, 48, 46,
+ 48, 41, 32,123, 10, 9, 9,102,108,111, 97,116, 32,116,109,112, 32, 61, 32, 49, 46, 48, 32, 45, 32,102, 97, 99, 42, 99,111,108,
+ 50, 46,103, 59, 10, 9, 9,105,102, 40,116,109,112, 32, 60, 61, 32, 48, 46, 48, 41, 10, 9, 9, 9,111,117,116, 99,111,108, 46,
+103, 32, 61, 32, 49, 46, 48, 59, 10, 9, 9,101,108,115,101, 32,105,102, 40, 40,116,109,112, 32, 61, 32,111,117,116, 99,111,108,
+ 46,103, 47,116,109,112, 41, 32, 62, 32, 49, 46, 48, 41, 10, 9, 9, 9,111,117,116, 99,111,108, 46,103, 32, 61, 32, 49, 46, 48,
+ 59, 10, 9, 9,101,108,115,101, 10, 9, 9, 9,111,117,116, 99,111,108, 46,103, 32, 61, 32,116,109,112, 59, 10, 9,125, 10, 9,
+105,102, 40,111,117,116, 99,111,108, 46, 98, 32, 33, 61, 32, 48, 46, 48, 41, 32,123, 10, 9, 9,102,108,111, 97,116, 32,116,109,
+112, 32, 61, 32, 49, 46, 48, 32, 45, 32,102, 97, 99, 42, 99,111,108, 50, 46, 98, 59, 10, 9, 9,105,102, 40,116,109,112, 32, 60,
+ 61, 32, 48, 46, 48, 41, 10, 9, 9, 9,111,117,116, 99,111,108, 46, 98, 32, 61, 32, 49, 46, 48, 59, 10, 9, 9,101,108,115,101,
+ 32,105,102, 40, 40,116,109,112, 32, 61, 32,111,117,116, 99,111,108, 46, 98, 47,116,109,112, 41, 32, 62, 32, 49, 46, 48, 41, 10,
+ 9, 9, 9,111,117,116, 99,111,108, 46, 98, 32, 61, 32, 49, 46, 48, 59, 10, 9, 9,101,108,115,101, 10, 9, 9, 9,111,117,116,
+ 99,111,108, 46, 98, 32, 61, 32,116,109,112, 59, 10, 9,125, 10,125, 10, 10,118,111,105,100, 32,109,105,120, 95, 98,117,114,110,
+ 40,102,108,111, 97,116, 32,102, 97, 99, 44, 32,118,101, 99, 52, 32, 99,111,108, 49, 44, 32,118,101, 99, 52, 32, 99,111,108, 50,
+ 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,102, 97, 99, 32, 61, 32, 99,108, 97,109,
+112, 40,102, 97, 99, 44, 32, 48, 46, 48, 44, 32, 49, 46, 48, 41, 59, 10, 9,102,108,111, 97,116, 32,116,109,112, 44, 32,102, 97,
+ 99,109, 32, 61, 32, 49, 46, 48, 32, 45, 32,102, 97, 99, 59, 10, 10, 9,111,117,116, 99,111,108, 32, 61, 32, 99,111,108, 49, 59,
+ 10, 10, 9,116,109,112, 32, 61, 32,102, 97, 99,109, 32, 43, 32,102, 97, 99, 42, 99,111,108, 50, 46,114, 59, 10, 9,105,102, 40,
+116,109,112, 32, 60, 61, 32, 48, 46, 48, 41, 10, 9, 9,111,117,116, 99,111,108, 46,114, 32, 61, 32, 48, 46, 48, 59, 10, 9,101,
+108,115,101, 32,105,102, 40, 40,116,109,112, 32, 61, 32, 40, 49, 46, 48, 32, 45, 32, 40, 49, 46, 48, 32, 45, 32,111,117,116, 99,
+111,108, 46,114, 41, 47,116,109,112, 41, 41, 32, 60, 32, 48, 46, 48, 41, 10, 9, 9,111,117,116, 99,111,108, 46,114, 32, 61, 32,
+ 48, 46, 48, 59, 10, 9,101,108,115,101, 32,105,102, 40,116,109,112, 32, 62, 32, 49, 46, 48, 41, 10, 9, 9,111,117,116, 99,111,
+108, 46,114, 32, 61, 32, 49, 46, 48, 59, 10, 9,101,108,115,101, 10, 9, 9,111,117,116, 99,111,108, 46,114, 32, 61, 32,116,109,
+112, 59, 10, 10, 9,116,109,112, 32, 61, 32,102, 97, 99,109, 32, 43, 32,102, 97, 99, 42, 99,111,108, 50, 46,103, 59, 10, 9,105,
+102, 40,116,109,112, 32, 60, 61, 32, 48, 46, 48, 41, 10, 9, 9,111,117,116, 99,111,108, 46,103, 32, 61, 32, 48, 46, 48, 59, 10,
+ 9,101,108,115,101, 32,105,102, 40, 40,116,109,112, 32, 61, 32, 40, 49, 46, 48, 32, 45, 32, 40, 49, 46, 48, 32, 45, 32,111,117,
+116, 99,111,108, 46,103, 41, 47,116,109,112, 41, 41, 32, 60, 32, 48, 46, 48, 41, 10, 9, 9,111,117,116, 99,111,108, 46,103, 32,
+ 61, 32, 48, 46, 48, 59, 10, 9,101,108,115,101, 32,105,102, 40,116,109,112, 32, 62, 32, 49, 46, 48, 41, 10, 9, 9,111,117,116,
+ 99,111,108, 46,103, 32, 61, 32, 49, 46, 48, 59, 10, 9,101,108,115,101, 10, 9, 9,111,117,116, 99,111,108, 46,103, 32, 61, 32,
+116,109,112, 59, 10, 10, 9,116,109,112, 32, 61, 32,102, 97, 99,109, 32, 43, 32,102, 97, 99, 42, 99,111,108, 50, 46, 98, 59, 10,
+ 9,105,102, 40,116,109,112, 32, 60, 61, 32, 48, 46, 48, 41, 10, 9, 9,111,117,116, 99,111,108, 46, 98, 32, 61, 32, 48, 46, 48,
+ 59, 10, 9,101,108,115,101, 32,105,102, 40, 40,116,109,112, 32, 61, 32, 40, 49, 46, 48, 32, 45, 32, 40, 49, 46, 48, 32, 45, 32,
+111,117,116, 99,111,108, 46, 98, 41, 47,116,109,112, 41, 41, 32, 60, 32, 48, 46, 48, 41, 10, 9, 9,111,117,116, 99,111,108, 46,
+ 98, 32, 61, 32, 48, 46, 48, 59, 10, 9,101,108,115,101, 32,105,102, 40,116,109,112, 32, 62, 32, 49, 46, 48, 41, 10, 9, 9,111,
+117,116, 99,111,108, 46, 98, 32, 61, 32, 49, 46, 48, 59, 10, 9,101,108,115,101, 10, 9, 9,111,117,116, 99,111,108, 46, 98, 32,
+ 61, 32,116,109,112, 59, 10,125, 10, 10,118,111,105,100, 32,109,105,120, 95,104,117,101, 40,102,108,111, 97,116, 32,102, 97, 99,
+ 44, 32,118,101, 99, 52, 32, 99,111,108, 49, 44, 32,118,101, 99, 52, 32, 99,111,108, 50, 44, 32,111,117,116, 32,118,101, 99, 52,
+ 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,102, 97, 99, 32, 61, 32, 99,108, 97,109,112, 40,102, 97, 99, 44, 32, 48, 46, 48,
+ 44, 32, 49, 46, 48, 41, 59, 10, 9,102,108,111, 97,116, 32,102, 97, 99,109, 32, 61, 32, 49, 46, 48, 32, 45, 32,102, 97, 99, 59,
+ 10, 10, 9,111,117,116, 99,111,108, 32, 61, 32, 99,111,108, 49, 59, 10, 10, 9,118,101, 99, 52, 32,104,115,118, 44, 32,104,115,
+118, 50, 44, 32,116,109,112, 59, 10, 9,114,103, 98, 95,116,111, 95,104,115,118, 40, 99,111,108, 50, 44, 32,104,115,118, 50, 41,
+ 59, 10, 10, 9,105,102, 40,104,115,118, 50, 46,121, 32, 33, 61, 32, 48, 46, 48, 41, 32,123, 10, 9, 9,114,103, 98, 95,116,111,
+ 95,104,115,118, 40,111,117,116, 99,111,108, 44, 32,104,115,118, 41, 59, 10, 9, 9,104,115,118, 46,120, 32, 61, 32,104,115,118,
+ 50, 46,120, 59, 10, 9, 9,104,115,118, 95,116,111, 95,114,103, 98, 40,104,115,118, 44, 32,116,109,112, 41, 59, 32, 10, 10, 9,
+ 9,111,117,116, 99,111,108, 32, 61, 32,109,105,120, 40,111,117,116, 99,111,108, 44, 32,116,109,112, 44, 32,102, 97, 99, 41, 59,
+ 10, 9, 9,111,117,116, 99,111,108, 46, 97, 32, 61, 32, 99,111,108, 49, 46, 97, 59, 10, 9,125, 10,125, 10, 10,118,111,105,100,
+ 32,109,105,120, 95,115, 97,116, 40,102,108,111, 97,116, 32,102, 97, 99, 44, 32,118,101, 99, 52, 32, 99,111,108, 49, 44, 32,118,
+101, 99, 52, 32, 99,111,108, 50, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,102, 97,
+ 99, 32, 61, 32, 99,108, 97,109,112, 40,102, 97, 99, 44, 32, 48, 46, 48, 44, 32, 49, 46, 48, 41, 59, 10, 9,102,108,111, 97,116,
+ 32,102, 97, 99,109, 32, 61, 32, 49, 46, 48, 32, 45, 32,102, 97, 99, 59, 10, 10, 9,111,117,116, 99,111,108, 32, 61, 32, 99,111,
+108, 49, 59, 10, 10, 9,118,101, 99, 52, 32,104,115,118, 44, 32,104,115,118, 50, 59, 10, 9,114,103, 98, 95,116,111, 95,104,115,
+118, 40,111,117,116, 99,111,108, 44, 32,104,115,118, 41, 59, 10, 10, 9,105,102, 40,104,115,118, 46,121, 32, 33, 61, 32, 48, 46,
+ 48, 41, 32,123, 10, 9, 9,114,103, 98, 95,116,111, 95,104,115,118, 40, 99,111,108, 50, 44, 32,104,115,118, 50, 41, 59, 10, 10,
+ 9, 9,104,115,118, 46,121, 32, 61, 32,102, 97, 99,109, 42,104,115,118, 46,121, 32, 43, 32,102, 97, 99, 42,104,115,118, 50, 46,
+121, 59, 10, 9, 9,104,115,118, 95,116,111, 95,114,103, 98, 40,104,115,118, 44, 32,111,117,116, 99,111,108, 41, 59, 10, 9,125,
+ 10,125, 10, 10,118,111,105,100, 32,109,105,120, 95,118, 97,108, 40,102,108,111, 97,116, 32,102, 97, 99, 44, 32,118,101, 99, 52,
+ 32, 99,111,108, 49, 44, 32,118,101, 99, 52, 32, 99,111,108, 50, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,
+108, 41, 10,123, 10, 9,102, 97, 99, 32, 61, 32, 99,108, 97,109,112, 40,102, 97, 99, 44, 32, 48, 46, 48, 44, 32, 49, 46, 48, 41,
+ 59, 10, 9,102,108,111, 97,116, 32,102, 97, 99,109, 32, 61, 32, 49, 46, 48, 32, 45, 32,102, 97, 99, 59, 10, 10, 9,118,101, 99,
+ 52, 32,104,115,118, 44, 32,104,115,118, 50, 59, 10, 9,114,103, 98, 95,116,111, 95,104,115,118, 40, 99,111,108, 49, 44, 32,104,
+115,118, 41, 59, 10, 9,114,103, 98, 95,116,111, 95,104,115,118, 40, 99,111,108, 50, 44, 32,104,115,118, 50, 41, 59, 10, 10, 9,
+104,115,118, 46,122, 32, 61, 32,102, 97, 99,109, 42,104,115,118, 46,122, 32, 43, 32,102, 97, 99, 42,104,115,118, 50, 46,122, 59,
+ 10, 9,104,115,118, 95,116,111, 95,114,103, 98, 40,104,115,118, 44, 32,111,117,116, 99,111,108, 41, 59, 10,125, 10, 10,118,111,
+105,100, 32,109,105,120, 95, 99,111,108,111,114, 40,102,108,111, 97,116, 32,102, 97, 99, 44, 32,118,101, 99, 52, 32, 99,111,108,
+ 49, 44, 32,118,101, 99, 52, 32, 99,111,108, 50, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123,
+ 10, 9,102, 97, 99, 32, 61, 32, 99,108, 97,109,112, 40,102, 97, 99, 44, 32, 48, 46, 48, 44, 32, 49, 46, 48, 41, 59, 10, 9,102,
+108,111, 97,116, 32,102, 97, 99,109, 32, 61, 32, 49, 46, 48, 32, 45, 32,102, 97, 99, 59, 10, 10, 9,111,117,116, 99,111,108, 32,
+ 61, 32, 99,111,108, 49, 59, 10, 10, 9,118,101, 99, 52, 32,104,115,118, 44, 32,104,115,118, 50, 44, 32,116,109,112, 59, 10, 9,
+114,103, 98, 95,116,111, 95,104,115,118, 40, 99,111,108, 50, 44, 32,104,115,118, 50, 41, 59, 10, 10, 9,105,102, 40,104,115,118,
+ 50, 46,121, 32, 33, 61, 32, 48, 46, 48, 41, 32,123, 10, 9, 9,114,103, 98, 95,116,111, 95,104,115,118, 40,111,117,116, 99,111,
+108, 44, 32,104,115,118, 41, 59, 10, 9, 9,104,115,118, 46,120, 32, 61, 32,104,115,118, 50, 46,120, 59, 10, 9, 9,104,115,118,
+ 46,121, 32, 61, 32,104,115,118, 50, 46,121, 59, 10, 9, 9,104,115,118, 95,116,111, 95,114,103, 98, 40,104,115,118, 44, 32,116,
+109,112, 41, 59, 32, 10, 10, 9, 9,111,117,116, 99,111,108, 32, 61, 32,109,105,120, 40,111,117,116, 99,111,108, 44, 32,116,109,
+112, 44, 32,102, 97, 99, 41, 59, 10, 9, 9,111,117,116, 99,111,108, 46, 97, 32, 61, 32, 99,111,108, 49, 46, 97, 59, 10, 9,125,
+ 10,125, 10, 10,118,111,105,100, 32,118, 97,108,116,111,114,103, 98, 40,102,108,111, 97,116, 32,102, 97, 99, 44, 32,115, 97,109,
+112,108,101,114, 49, 68, 32, 99,111,108,111,114,109, 97,112, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108,
+ 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116, 97,108,112,104, 97, 41, 10,123, 10, 9,111,117,116, 99,111,108, 32,
+ 61, 32,116,101,120,116,117,114,101, 49, 68, 40, 99,111,108,111,114,109, 97,112, 44, 32,102, 97, 99, 41, 59, 10, 9,111,117,116,
+ 97,108,112,104, 97, 32, 61, 32,111,117,116, 99,111,108, 46, 97, 59, 10,125, 10, 10,118,111,105,100, 32,114,103, 98,116,111, 98,
+119, 40,118,101, 99, 52, 32, 99,111,108,111,114, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,
+123, 10, 9,111,117,116,118, 97,108, 32, 61, 32, 99,111,108,111,114, 46,114, 42, 48, 46, 51, 53, 32, 43, 32, 99,111,108,111,114,
+ 46,103, 42, 48, 46, 52, 53, 32, 43, 32, 99,111,108,111,114, 46, 98, 42, 48, 46, 50, 59, 10,125, 10, 10,118,111,105,100, 32,105,
+110,118,101,114,116, 40,102,108,111, 97,116, 32,102, 97, 99, 44, 32,118,101, 99, 52, 32, 99,111,108, 44, 32,111,117,116, 32,118,
+101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,111,117,116, 99,111,108, 46,120,121,122, 32, 61, 32,109,105,120, 40,
+ 99,111,108, 46,120,121,122, 44, 32,118,101, 99, 51, 40, 49, 46, 48, 44, 32, 49, 46, 48, 44, 32, 49, 46, 48, 41, 32, 45, 32, 99,
+111,108, 46,120,121,122, 44, 32,102, 97, 99, 41, 59, 10, 9,111,117,116, 99,111,108, 46,119, 32, 61, 32, 99,111,108, 46,119, 59,
+ 10,125, 10, 10,118,111,105,100, 32,104,117,101, 95,115, 97,116, 40,102,108,111, 97,116, 32,104,117,101, 44, 32,102,108,111, 97,
+116, 32,115, 97,116, 44, 32,102,108,111, 97,116, 32,118, 97,108,117,101, 44, 32,102,108,111, 97,116, 32,102, 97, 99, 44, 32,118,
+101, 99, 52, 32, 99,111,108, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,118,101, 99,
+ 52, 32,104,115,118, 59, 10, 10, 9,114,103, 98, 95,116,111, 95,104,115,118, 40, 99,111,108, 44, 32,104,115,118, 41, 59, 10, 10,
+ 9,104,115,118, 91, 48, 93, 32, 43, 61, 32, 40,104,117,101, 32, 45, 32, 48, 46, 53, 41, 59, 10, 9,105,102, 40,104,115,118, 91,
+ 48, 93, 62, 49, 46, 48, 41, 32,104,115,118, 91, 48, 93, 45, 61, 49, 46, 48, 59, 32,101,108,115,101, 32,105,102, 40,104,115,118,
+ 91, 48, 93, 60, 48, 46, 48, 41, 32,104,115,118, 91, 48, 93, 43, 61, 32, 49, 46, 48, 59, 10, 9,104,115,118, 91, 49, 93, 32, 42,
+ 61, 32,115, 97,116, 59, 10, 9,105,102, 40,104,115,118, 91, 49, 93, 62, 49, 46, 48, 41, 32,104,115,118, 91, 49, 93, 61, 32, 49,
+ 46, 48, 59, 32,101,108,115,101, 32,105,102, 40,104,115,118, 91, 49, 93, 60, 48, 46, 48, 41, 32,104,115,118, 91, 49, 93, 61, 32,
+ 48, 46, 48, 59, 10, 9,104,115,118, 91, 50, 93, 32, 42, 61, 32,118, 97,108,117,101, 59, 10, 9,105,102, 40,104,115,118, 91, 50,
+ 93, 62, 49, 46, 48, 41, 32,104,115,118, 91, 50, 93, 61, 32, 49, 46, 48, 59, 32,101,108,115,101, 32,105,102, 40,104,115,118, 91,
+ 50, 93, 60, 48, 46, 48, 41, 32,104,115,118, 91, 50, 93, 61, 32, 48, 46, 48, 59, 10, 10, 9,104,115,118, 95,116,111, 95,114,103,
+ 98, 40,104,115,118, 44, 32,111,117,116, 99,111,108, 41, 59, 10, 10, 9,111,117,116, 99,111,108, 32, 61, 32,109,105,120, 40, 99,
+111,108, 44, 32,111,117,116, 99,111,108, 44, 32,102, 97, 99, 41, 59, 10,125, 10, 10,118,111,105,100, 32,115,101,112, 97,114, 97,
+116,101, 95,114,103, 98, 40,118,101, 99, 52, 32, 99,111,108, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,114, 44, 32,111,117,
+116, 32,102,108,111, 97,116, 32,103, 44, 32,111,117,116, 32,102,108,111, 97,116, 32, 98, 41, 10,123, 10, 9,114, 32, 61, 32, 99,
+111,108, 46,114, 59, 10, 9,103, 32, 61, 32, 99,111,108, 46,103, 59, 10, 9, 98, 32, 61, 32, 99,111,108, 46, 98, 59, 10,125, 10,
+ 10,118,111,105,100, 32, 99,111,109, 98,105,110,101, 95,114,103, 98, 40,102,108,111, 97,116, 32,114, 44, 32,102,108,111, 97,116,
+ 32,103, 44, 32,102,108,111, 97,116, 32, 98, 44, 32,111,117,116, 32,118,101, 99, 52, 32, 99,111,108, 41, 10,123, 10, 9, 99,111,
+108, 32, 61, 32,118,101, 99, 52, 40,114, 44, 32,103, 44, 32, 98, 44, 32, 49, 46, 48, 41, 59, 10,125, 10, 10,118,111,105,100, 32,
+111,117,116,112,117,116, 95,110,111,100,101, 40,118,101, 99, 52, 32,114,103, 98, 44, 32,102,108,111, 97,116, 32, 97,108,112,104,
+ 97, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116,114,103, 98, 41, 10,123, 10, 9,111,117,116,114,103, 98, 32, 61, 32,
+118,101, 99, 52, 40,114,103, 98, 46,114,103, 98, 44, 32, 97,108,112,104, 97, 41, 59, 10,125, 10, 10, 47, 42, 42, 42, 42, 42, 42,
+ 42, 42, 42, 42, 42, 32, 84, 69, 88, 84, 85, 82, 69, 83, 32, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 47, 10,
+ 10,118,111,105,100, 32,116,101,120,116,117,114,101, 95,102,108,105,112, 95, 98,108,101,110,100, 40,118,101, 99, 51, 32,118,101,
+ 99, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116,118,101, 99, 41, 10,123, 10, 9,111,117,116,118,101, 99, 32, 61, 32,
+118,101, 99, 46,121,120,122, 59, 10,125, 10, 10,118,111,105,100, 32,116,101,120,116,117,114,101, 95, 98,108,101,110,100, 95,108,
+105,110, 40,118,101, 99, 51, 32,118,101, 99, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123,
+ 10, 9,111,117,116,118, 97,108, 32, 61, 32, 40, 49, 46, 48, 43,118,101, 99, 46,120, 41, 47, 50, 46, 48, 59, 10,125, 10, 10,118,
+111,105,100, 32,116,101,120,116,117,114,101, 95, 98,108,101,110,100, 95,113,117, 97,100, 40,118,101, 99, 51, 32,118,101, 99, 44,
+ 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118, 97,108, 32, 61, 32,109,
+ 97,120, 40, 40, 49, 46, 48, 43,118,101, 99, 46,120, 41, 47, 50, 46, 48, 44, 32, 48, 46, 48, 41, 59, 10, 9,111,117,116,118, 97,
+108, 32, 42, 61, 32,111,117,116,118, 97,108, 59, 10,125, 10, 10,118,111,105,100, 32,116,101,120,116,117,114,101, 95,119,111,111,
+100, 95,115,105,110, 40,118,101, 99, 51, 32,118,101, 99, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,118, 97,108,117,101, 44,
+ 32,111,117,116, 32,118,101, 99, 52, 32, 99,111,108,111,114, 44, 32,111,117,116, 32,118,101, 99, 51, 32,110,111,114,109, 97,108,
+ 41, 10,123, 10, 9,102,108,111, 97,116, 32, 97, 32, 61, 32,115,113,114,116, 40,118,101, 99, 46,120, 42,118,101, 99, 46,120, 32,
+ 43, 32,118,101, 99, 46,121, 42,118,101, 99, 46,121, 32, 43, 32,118,101, 99, 46,122, 42,118,101, 99, 46,122, 41, 42, 50, 48, 46,
+ 48, 59, 10, 9,102,108,111, 97,116, 32,119,105, 32, 61, 32, 48, 46, 53, 32, 43, 32, 48, 46, 53, 42,115,105,110, 40, 97, 41, 59,
+ 10, 10, 9,118, 97,108,117,101, 32, 61, 32,119,105, 59, 10, 9, 99,111,108,111,114, 32, 61, 32,118,101, 99, 52, 40,119,105, 44,
+ 32,119,105, 44, 32,119,105, 44, 32, 49, 46, 48, 41, 59, 10, 9,110,111,114,109, 97,108, 32, 61, 32,118,101, 99, 51, 40, 48, 46,
+ 48, 44, 32, 48, 46, 48, 44, 32, 48, 46, 48, 41, 59, 10,125, 10, 10,118,111,105,100, 32,116,101,120,116,117,114,101, 95,105,109,
+ 97,103,101, 40,118,101, 99, 51, 32,118,101, 99, 44, 32,115, 97,109,112,108,101,114, 50, 68, 32,105,109, 97, 44, 32,111,117,116,
+ 32,102,108,111, 97,116, 32,118, 97,108,117,101, 44, 32,111,117,116, 32,118,101, 99, 52, 32, 99,111,108,111,114, 44, 32,111,117,
+116, 32,118,101, 99, 51, 32,110,111,114,109, 97,108, 41, 10,123, 10, 9, 99,111,108,111,114, 32, 61, 32,116,101,120,116,117,114,
+101, 50, 68, 40,105,109, 97, 44, 32, 40,118,101, 99, 46,120,121, 32, 43, 32,118,101, 99, 50, 40, 49, 46, 48, 44, 32, 49, 46, 48,
+ 41, 41, 42, 48, 46, 53, 41, 59, 10, 9,118, 97,108,117,101, 32, 61, 32, 49, 46, 48, 59, 10, 10, 9,110,111,114,109, 97,108, 46,
+120, 32, 61, 32, 50, 46, 48, 42, 40, 99,111,108,111,114, 46,114, 32, 45, 32, 48, 46, 53, 41, 59, 10, 9,110,111,114,109, 97,108,
+ 46,121, 32, 61, 32, 50, 46, 48, 42, 40, 48, 46, 53, 32, 45, 32, 99,111,108,111,114, 46,103, 41, 59, 10, 9,110,111,114,109, 97,
+108, 46,122, 32, 61, 32, 50, 46, 48, 42, 40, 99,111,108,111,114, 46, 98, 32, 45, 32, 48, 46, 53, 41, 59, 10,125, 10, 10, 47, 42,
+ 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 32, 77, 84, 69, 88, 32, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
+ 42, 42, 42, 47, 10, 10,118,111,105,100, 32,116,101,120, 99,111, 95,111,114, 99,111, 40,118,101, 99, 51, 32, 97,116,116,111,114,
+ 99,111, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,114, 99,111, 41, 10,123, 10, 9,111,114, 99,111, 32, 61, 32, 97,116,116,
+111,114, 99,111, 59, 10,125, 10, 10,118,111,105,100, 32,116,101,120, 99,111, 95,117,118, 40,118,101, 99, 50, 32, 97,116,116,117,
+118, 44, 32,111,117,116, 32,118,101, 99, 51, 32,117,118, 41, 10,123, 10, 9, 47, 42, 32,100,105,115, 97, 98,108,101,100, 32,102,
+111,114, 32,110,111,119, 44, 32,119,111,114,107,115, 32,116,111,103,101,116,104,101,114, 32,119,105,116,104, 32,108,101, 97,118,
+105,110,103, 32,111,117,116, 32,109,116,101,120, 95, 50,100, 95,109, 97,112,112,105,110,103, 10, 9, 32, 32, 32,117,118, 32, 61,
+ 32,118,101, 99, 51, 40, 97,116,116,117,118, 42, 50, 46, 48, 32, 45, 32,118,101, 99, 50, 40, 49, 46, 48, 44, 32, 49, 46, 48, 41,
+ 44, 32, 48, 46, 48, 41, 59, 32, 42, 47, 10, 9,117,118, 32, 61, 32,118,101, 99, 51, 40, 97,116,116,117,118, 44, 32, 48, 46, 48,
+ 41, 59, 10,125, 10, 10,118,111,105,100, 32,116,101,120, 99,111, 95,110,111,114,109, 40,118,101, 99, 51, 32,110,111,114,109, 97,
+108, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116,110,111,114,109, 97,108, 41, 10,123, 10, 9, 47, 42, 32, 99,111,114,
+114,101,115,112,111,110,100,115, 32,116,111, 32,115,104,105, 45, 62,111,114,110, 44, 32,119,104,105, 99,104, 32,105,115, 32,110,
+101,103, 97,116,101,100, 32,115,111, 32, 99, 97,110, 99,101,108,115, 10, 9, 32, 32, 32,111,117,116, 32, 98,108,101,110,100,101,
+114, 32,110,111,114,109, 97,108, 32,110,101,103, 97,116,105,111,110, 32, 42, 47, 10, 9,111,117,116,110,111,114,109, 97,108, 32,
+ 61, 32,110,111,114,109, 97,108,105,122,101, 40,110,111,114,109, 97,108, 41, 59, 10,125, 10, 10,118,111,105,100, 32,116,101,120,
+ 99,111, 95,116, 97,110,103,101,110,116, 40,118,101, 99, 51, 32,116, 97,110,103,101,110,116, 44, 32,111,117,116, 32,118,101, 99,
+ 51, 32,111,117,116,116, 97,110,103,101,110,116, 41, 10,123, 10, 9,111,117,116,116, 97,110,103,101,110,116, 32, 61, 32,110,111,
+114,109, 97,108,105,122,101, 40,116, 97,110,103,101,110,116, 41, 59, 10,125, 10, 10,118,111,105,100, 32,116,101,120, 99,111, 95,
+103,108,111, 98, 97,108, 40,109, 97,116, 52, 32,118,105,101,119,105,110,118,109, 97,116, 44, 32,118,101, 99, 51, 32, 99,111, 44,
+ 32,111,117,116, 32,118,101, 99, 51, 32,103,108,111, 98, 97,108, 41, 10,123, 10, 9,103,108,111, 98, 97,108, 32, 61, 32, 40,118,
+105,101,119,105,110,118,109, 97,116, 42,118,101, 99, 52, 40, 99,111, 44, 32, 49, 46, 48, 41, 41, 46,120,121,122, 59, 10,125, 10,
+ 10,118,111,105,100, 32,116,101,120, 99,111, 95,111, 98,106,101, 99,116, 40,109, 97,116, 52, 32,118,105,101,119,105,110,118,109,
+ 97,116, 44, 32,109, 97,116, 52, 32,111, 98,105,110,118,109, 97,116, 44, 32,118,101, 99, 51, 32, 99,111, 44, 32,111,117,116, 32,
+118,101, 99, 51, 32,111, 98,106,101, 99,116, 41, 10,123, 10, 9,111, 98,106,101, 99,116, 32, 61, 32, 40,111, 98,105,110,118,109,
+ 97,116, 42, 40,118,105,101,119,105,110,118,109, 97,116, 42,118,101, 99, 52, 40, 99,111, 44, 32, 49, 46, 48, 41, 41, 41, 46,120,
+121,122, 59, 10,125, 10, 10,118,111,105,100, 32,116,101,120, 99,111, 95,114,101,102,108, 40,118,101, 99, 51, 32,118,110, 44, 32,
+118,101, 99, 51, 32,118,105,101,119, 44, 32,111,117,116, 32,118,101, 99, 51, 32,114,101,102, 41, 10,123, 10, 9,114,101,102, 32,
+ 61, 32,118,105,101,119, 32, 45, 32, 50, 46, 48, 42,100,111,116, 40,118,110, 44, 32,118,105,101,119, 41, 42,118,110, 59, 10,125,
+ 10, 10,118,111,105,100, 32,115,104, 97,100,101, 95,110,111,114,109, 40,118,101, 99, 51, 32,110,111,114,109, 97,108, 44, 32,111,
+117,116, 32,118,101, 99, 51, 32,111,117,116,110,111,114,109, 97,108, 41, 10,123, 10, 9, 47, 42, 32, 98,108,101,110,100,101,114,
+ 32,114,101,110,100,101,114, 32,110,111,114,109, 97,108, 32,105,115, 32,110,101,103, 97,116,101,100, 32, 42, 47, 10, 9,111,117,
+116,110,111,114,109, 97,108, 32, 61, 32, 45,110,111,114,109, 97,108,105,122,101, 40,110,111,114,109, 97,108, 41, 59, 10,125, 10,
+ 10,118,111,105,100, 32,109,116,101,120, 95,114,103, 98, 95, 98,108,101,110,100, 40,118,101, 99, 51, 32,111,117,116, 99,111,108,
+ 44, 32,118,101, 99, 51, 32,116,101,120, 99,111,108, 44, 32,102,108,111, 97,116, 32,102, 97, 99,116, 44, 32,102,108,111, 97,116,
+ 32,102, 97, 99,103, 44, 32,111,117,116, 32,118,101, 99, 51, 32,105,110, 99,111,108, 41, 10,123, 10, 9,102,108,111, 97,116, 32,
+102, 97, 99,109, 59, 10, 10, 9,102, 97, 99,116, 32, 42, 61, 32,102, 97, 99,103, 59, 10, 9,102, 97, 99,109, 32, 61, 32, 49, 46,
+ 48, 45,102, 97, 99,116, 59, 10, 10, 9,105,110, 99,111,108, 32, 61, 32,102, 97, 99,116, 42,116,101,120, 99,111,108, 32, 43, 32,
+102, 97, 99,109, 42,111,117,116, 99,111,108, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,114,103, 98, 95,109,117,
+108, 40,118,101, 99, 51, 32,111,117,116, 99,111,108, 44, 32,118,101, 99, 51, 32,116,101,120, 99,111,108, 44, 32,102,108,111, 97,
+116, 32,102, 97, 99,116, 44, 32,102,108,111, 97,116, 32,102, 97, 99,103, 44, 32,111,117,116, 32,118,101, 99, 51, 32,105,110, 99,
+111,108, 41, 10,123, 10, 9,102,108,111, 97,116, 32,102, 97, 99,109, 59, 10, 10, 9,102, 97, 99,116, 32, 42, 61, 32,102, 97, 99,
+103, 59, 10, 9,102, 97, 99,109, 32, 61, 32, 49, 46, 48, 45,102, 97, 99,103, 59, 10, 10, 9,105,110, 99,111,108, 32, 61, 32, 40,
+102, 97, 99,109, 32, 43, 32,102, 97, 99,116, 42,116,101,120, 99,111,108, 41, 42,111,117,116, 99,111,108, 59, 10,125, 10, 10,118,
+111,105,100, 32,109,116,101,120, 95,114,103, 98, 95,115, 99,114,101,101,110, 40,118,101, 99, 51, 32,111,117,116, 99,111,108, 44,
+ 32,118,101, 99, 51, 32,116,101,120, 99,111,108, 44, 32,102,108,111, 97,116, 32,102, 97, 99,116, 44, 32,102,108,111, 97,116, 32,
+102, 97, 99,103, 44, 32,111,117,116, 32,118,101, 99, 51, 32,105,110, 99,111,108, 41, 10,123, 10, 9,102,108,111, 97,116, 32,102,
+ 97, 99,109, 59, 10, 10, 9,102, 97, 99,116, 32, 42, 61, 32,102, 97, 99,103, 59, 10, 9,102, 97, 99,109, 32, 61, 32, 49, 46, 48,
+ 45,102, 97, 99,103, 59, 10, 10, 9,105,110, 99,111,108, 32, 61, 32,118,101, 99, 51, 40, 49, 46, 48, 41, 32, 45, 32, 40,118,101,
+ 99, 51, 40,102, 97, 99,109, 41, 32, 43, 32,102, 97, 99,116, 42, 40,118,101, 99, 51, 40, 49, 46, 48, 41, 32, 45, 32,116,101,120,
+ 99,111,108, 41, 41, 42, 40,118,101, 99, 51, 40, 49, 46, 48, 41, 32, 45, 32,111,117,116, 99,111,108, 41, 59, 10,125, 10, 10,118,
+111,105,100, 32,109,116,101,120, 95,114,103, 98, 95,111,118,101,114,108, 97,121, 40,118,101, 99, 51, 32,111,117,116, 99,111,108,
+ 44, 32,118,101, 99, 51, 32,116,101,120, 99,111,108, 44, 32,102,108,111, 97,116, 32,102, 97, 99,116, 44, 32,102,108,111, 97,116,
+ 32,102, 97, 99,103, 44, 32,111,117,116, 32,118,101, 99, 51, 32,105,110, 99,111,108, 41, 10,123, 10, 9,102,108,111, 97,116, 32,
+102, 97, 99,109, 59, 10, 10, 9,102, 97, 99,116, 32, 42, 61, 32,102, 97, 99,103, 59, 10, 9,102, 97, 99,109, 32, 61, 32, 49, 46,
+ 48, 45,102, 97, 99,103, 59, 10, 10, 9,105,102, 40,111,117,116, 99,111,108, 46,114, 32, 60, 32, 48, 46, 53, 41, 10, 9, 9,105,
+110, 99,111,108, 46,114, 32, 61, 32,111,117,116, 99,111,108, 46,114, 42, 40,102, 97, 99,109, 32, 43, 32, 50, 46, 48, 42,102, 97,
+ 99,116, 42,116,101,120, 99,111,108, 46,114, 41, 59, 10, 9,101,108,115,101, 10, 9, 9,105,110, 99,111,108, 46,114, 32, 61, 32,
+ 49, 46, 48, 32, 45, 32, 40,102, 97, 99,109, 32, 43, 32, 50, 46, 48, 42,102, 97, 99,116, 42, 40, 49, 46, 48, 32, 45, 32,116,101,
+120, 99,111,108, 46,114, 41, 41, 42, 40, 49, 46, 48, 32, 45, 32,111,117,116, 99,111,108, 46,114, 41, 59, 10, 10, 9,105,102, 40,
+111,117,116, 99,111,108, 46,103, 32, 60, 32, 48, 46, 53, 41, 10, 9, 9,105,110, 99,111,108, 46,103, 32, 61, 32,111,117,116, 99,
+111,108, 46,103, 42, 40,102, 97, 99,109, 32, 43, 32, 50, 46, 48, 42,102, 97, 99,116, 42,116,101,120, 99,111,108, 46,103, 41, 59,
+ 10, 9,101,108,115,101, 10, 9, 9,105,110, 99,111,108, 46,103, 32, 61, 32, 49, 46, 48, 32, 45, 32, 40,102, 97, 99,109, 32, 43,
+ 32, 50, 46, 48, 42,102, 97, 99,116, 42, 40, 49, 46, 48, 32, 45, 32,116,101,120, 99,111,108, 46,103, 41, 41, 42, 40, 49, 46, 48,
+ 32, 45, 32,111,117,116, 99,111,108, 46,103, 41, 59, 10, 10, 9,105,102, 40,111,117,116, 99,111,108, 46, 98, 32, 60, 32, 48, 46,
+ 53, 41, 10, 9, 9,105,110, 99,111,108, 46, 98, 32, 61, 32,111,117,116, 99,111,108, 46, 98, 42, 40,102, 97, 99,109, 32, 43, 32,
+ 50, 46, 48, 42,102, 97, 99,116, 42,116,101,120, 99,111,108, 46, 98, 41, 59, 10, 9,101,108,115,101, 10, 9, 9,105,110, 99,111,
+108, 46, 98, 32, 61, 32, 49, 46, 48, 32, 45, 32, 40,102, 97, 99,109, 32, 43, 32, 50, 46, 48, 42,102, 97, 99,116, 42, 40, 49, 46,
+ 48, 32, 45, 32,116,101,120, 99,111,108, 46, 98, 41, 41, 42, 40, 49, 46, 48, 32, 45, 32,111,117,116, 99,111,108, 46, 98, 41, 59,
+ 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,114,103, 98, 95,115,117, 98, 40,118,101, 99, 51, 32,111,117,116, 99,111,
+108, 44, 32,118,101, 99, 51, 32,116,101,120, 99,111,108, 44, 32,102,108,111, 97,116, 32,102, 97, 99,116, 44, 32,102,108,111, 97,
+116, 32,102, 97, 99,103, 44, 32,111,117,116, 32,118,101, 99, 51, 32,105,110, 99,111,108, 41, 10,123, 10, 9,105,110, 99,111,108,
+ 32, 61, 32, 45,102, 97, 99,116, 42,102, 97, 99,103, 42,116,101,120, 99,111,108, 32, 43, 32,111,117,116, 99,111,108, 59, 10,125,
+ 10, 10,118,111,105,100, 32,109,116,101,120, 95,114,103, 98, 95, 97,100,100, 40,118,101, 99, 51, 32,111,117,116, 99,111,108, 44,
+ 32,118,101, 99, 51, 32,116,101,120, 99,111,108, 44, 32,102,108,111, 97,116, 32,102, 97, 99,116, 44, 32,102,108,111, 97,116, 32,
+102, 97, 99,103, 44, 32,111,117,116, 32,118,101, 99, 51, 32,105,110, 99,111,108, 41, 10,123, 10, 9,105,110, 99,111,108, 32, 61,
+ 32,102, 97, 99,116, 42,102, 97, 99,103, 42,116,101,120, 99,111,108, 32, 43, 32,111,117,116, 99,111,108, 59, 10,125, 10, 10,118,
+111,105,100, 32,109,116,101,120, 95,114,103, 98, 95,100,105,118, 40,118,101, 99, 51, 32,111,117,116, 99,111,108, 44, 32,118,101,
+ 99, 51, 32,116,101,120, 99,111,108, 44, 32,102,108,111, 97,116, 32,102, 97, 99,116, 44, 32,102,108,111, 97,116, 32,102, 97, 99,
+103, 44, 32,111,117,116, 32,118,101, 99, 51, 32,105,110, 99,111,108, 41, 10,123, 10, 9,102,108,111, 97,116, 32,102, 97, 99,109,
+ 59, 10, 10, 9,102, 97, 99,116, 32, 42, 61, 32,102, 97, 99,103, 59, 10, 9,102, 97, 99,109, 32, 61, 32, 49, 46, 48, 45,102, 97,
+ 99,116, 59, 10, 10, 9,105,102, 40,116,101,120, 99,111,108, 46,114, 32, 33, 61, 32, 48, 46, 48, 41, 32,105,110, 99,111,108, 46,
+114, 32, 61, 32,102, 97, 99,109, 42,111,117,116, 99,111,108, 46,114, 32, 43, 32,102, 97, 99,116, 42,111,117,116, 99,111,108, 46,
+114, 47,116,101,120, 99,111,108, 46,114, 59, 10, 9,105,102, 40,116,101,120, 99,111,108, 46,103, 32, 33, 61, 32, 48, 46, 48, 41,
+ 32,105,110, 99,111,108, 46,103, 32, 61, 32,102, 97, 99,109, 42,111,117,116, 99,111,108, 46,103, 32, 43, 32,102, 97, 99,116, 42,
+111,117,116, 99,111,108, 46,103, 47,116,101,120, 99,111,108, 46,103, 59, 10, 9,105,102, 40,116,101,120, 99,111,108, 46, 98, 32,
+ 33, 61, 32, 48, 46, 48, 41, 32,105,110, 99,111,108, 46, 98, 32, 61, 32,102, 97, 99,109, 42,111,117,116, 99,111,108, 46, 98, 32,
+ 43, 32,102, 97, 99,116, 42,111,117,116, 99,111,108, 46, 98, 47,116,101,120, 99,111,108, 46, 98, 59, 10,125, 10, 10,118,111,105,
+100, 32,109,116,101,120, 95,114,103, 98, 95,100,105,102,102, 40,118,101, 99, 51, 32,111,117,116, 99,111,108, 44, 32,118,101, 99,
+ 51, 32,116,101,120, 99,111,108, 44, 32,102,108,111, 97,116, 32,102, 97, 99,116, 44, 32,102,108,111, 97,116, 32,102, 97, 99,103,
+ 44, 32,111,117,116, 32,118,101, 99, 51, 32,105,110, 99,111,108, 41, 10,123, 10, 9,102,108,111, 97,116, 32,102, 97, 99,109, 59,
+ 10, 10, 9,102, 97, 99,116, 32, 42, 61, 32,102, 97, 99,103, 59, 10, 9,102, 97, 99,109, 32, 61, 32, 49, 46, 48, 45,102, 97, 99,
+116, 59, 10, 10, 9,105,110, 99,111,108, 32, 61, 32,102, 97, 99,109, 42,111,117,116, 99,111,108, 32, 43, 32,102, 97, 99,116, 42,
+ 97, 98,115, 40,116,101,120, 99,111,108, 32, 45, 32,111,117,116, 99,111,108, 41, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,
+101,120, 95,114,103, 98, 95,100, 97,114,107, 40,118,101, 99, 51, 32,111,117,116, 99,111,108, 44, 32,118,101, 99, 51, 32,116,101,
+120, 99,111,108, 44, 32,102,108,111, 97,116, 32,102, 97, 99,116, 44, 32,102,108,111, 97,116, 32,102, 97, 99,103, 44, 32,111,117,
+116, 32,118,101, 99, 51, 32,105,110, 99,111,108, 41, 10,123, 10, 9,102,108,111, 97,116, 32,102, 97, 99,109, 44, 32, 99,111,108,
+ 59, 10, 10, 9,102, 97, 99,116, 32, 42, 61, 32,102, 97, 99,103, 59, 10, 9,102, 97, 99,109, 32, 61, 32, 49, 46, 48, 45,102, 97,
+ 99,116, 59, 10, 10, 9, 99,111,108, 32, 61, 32,102, 97, 99,116, 42,116,101,120, 99,111,108, 46,114, 59, 10, 9,105,102, 40, 99,
+111,108, 32, 60, 32,111,117,116, 99,111,108, 46,114, 41, 32,105,110, 99,111,108, 46,114, 32, 61, 32, 99,111,108, 59, 32,101,108,
+115,101, 32,105,110, 99,111,108, 46,114, 32, 61, 32,111,117,116, 99,111,108, 46,114, 59, 10, 9, 99,111,108, 32, 61, 32,102, 97,
+ 99,116, 42,116,101,120, 99,111,108, 46,103, 59, 10, 9,105,102, 40, 99,111,108, 32, 60, 32,111,117,116, 99,111,108, 46,103, 41,
+ 32,105,110, 99,111,108, 46,103, 32, 61, 32, 99,111,108, 59, 32,101,108,115,101, 32,105,110, 99,111,108, 46,103, 32, 61, 32,111,
+117,116, 99,111,108, 46,103, 59, 10, 9, 99,111,108, 32, 61, 32,102, 97, 99,116, 42,116,101,120, 99,111,108, 46, 98, 59, 10, 9,
+105,102, 40, 99,111,108, 32, 60, 32,111,117,116, 99,111,108, 46, 98, 41, 32,105,110, 99,111,108, 46, 98, 32, 61, 32, 99,111,108,
+ 59, 32,101,108,115,101, 32,105,110, 99,111,108, 46, 98, 32, 61, 32,111,117,116, 99,111,108, 46, 98, 59, 10,125, 10, 10,118,111,
+105,100, 32,109,116,101,120, 95,114,103, 98, 95,108,105,103,104,116, 40,118,101, 99, 51, 32,111,117,116, 99,111,108, 44, 32,118,
+101, 99, 51, 32,116,101,120, 99,111,108, 44, 32,102,108,111, 97,116, 32,102, 97, 99,116, 44, 32,102,108,111, 97,116, 32,102, 97,
+ 99,103, 44, 32,111,117,116, 32,118,101, 99, 51, 32,105,110, 99,111,108, 41, 10,123, 10, 9,102,108,111, 97,116, 32,102, 97, 99,
+109, 44, 32, 99,111,108, 59, 10, 10, 9,102, 97, 99,116, 32, 42, 61, 32,102, 97, 99,103, 59, 10, 9,102, 97, 99,109, 32, 61, 32,
+ 49, 46, 48, 45,102, 97, 99,116, 59, 10, 10, 9, 99,111,108, 32, 61, 32,102, 97, 99,116, 42,116,101,120, 99,111,108, 46,114, 59,
+ 10, 9,105,102, 40, 99,111,108, 32, 62, 32,111,117,116, 99,111,108, 46,114, 41, 32,105,110, 99,111,108, 46,114, 32, 61, 32, 99,
+111,108, 59, 32,101,108,115,101, 32,105,110, 99,111,108, 46,114, 32, 61, 32,111,117,116, 99,111,108, 46,114, 59, 10, 9, 99,111,
+108, 32, 61, 32,102, 97, 99,116, 42,116,101,120, 99,111,108, 46,103, 59, 10, 9,105,102, 40, 99,111,108, 32, 62, 32,111,117,116,
+ 99,111,108, 46,103, 41, 32,105,110, 99,111,108, 46,103, 32, 61, 32, 99,111,108, 59, 32,101,108,115,101, 32,105,110, 99,111,108,
+ 46,103, 32, 61, 32,111,117,116, 99,111,108, 46,103, 59, 10, 9, 99,111,108, 32, 61, 32,102, 97, 99,116, 42,116,101,120, 99,111,
+108, 46, 98, 59, 10, 9,105,102, 40, 99,111,108, 32, 62, 32,111,117,116, 99,111,108, 46, 98, 41, 32,105,110, 99,111,108, 46, 98,
+ 32, 61, 32, 99,111,108, 59, 32,101,108,115,101, 32,105,110, 99,111,108, 46, 98, 32, 61, 32,111,117,116, 99,111,108, 46, 98, 59,
+ 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,114,103, 98, 95,104,117,101, 40,118,101, 99, 51, 32,111,117,116, 99,111,
+108, 44, 32,118,101, 99, 51, 32,116,101,120, 99,111,108, 44, 32,102,108,111, 97,116, 32,102, 97, 99,116, 44, 32,102,108,111, 97,
+116, 32,102, 97, 99,103, 44, 32,111,117,116, 32,118,101, 99, 51, 32,105,110, 99,111,108, 41, 10,123, 10, 9,118,101, 99, 52, 32,
+ 99,111,108, 59, 10, 10, 9,109,105,120, 95,104,117,101, 40,102, 97, 99,116, 42,102, 97, 99,103, 44, 32,118,101, 99, 52, 40,111,
+117,116, 99,111,108, 44, 32, 49, 46, 48, 41, 44, 32,118,101, 99, 52, 40,116,101,120, 99,111,108, 44, 32, 49, 46, 48, 41, 44, 32,
+ 99,111,108, 41, 59, 10, 9,105,110, 99,111,108, 46,114,103, 98, 32, 61, 32, 99,111,108, 46,114,103, 98, 59, 10,125, 10, 10,118,
+111,105,100, 32,109,116,101,120, 95,114,103, 98, 95,115, 97,116, 40,118,101, 99, 51, 32,111,117,116, 99,111,108, 44, 32,118,101,
+ 99, 51, 32,116,101,120, 99,111,108, 44, 32,102,108,111, 97,116, 32,102, 97, 99,116, 44, 32,102,108,111, 97,116, 32,102, 97, 99,
+103, 44, 32,111,117,116, 32,118,101, 99, 51, 32,105,110, 99,111,108, 41, 10,123, 10, 9,118,101, 99, 52, 32, 99,111,108, 59, 10,
+ 10, 9,109,105,120, 95,115, 97,116, 40,102, 97, 99,116, 42,102, 97, 99,103, 44, 32,118,101, 99, 52, 40,111,117,116, 99,111,108,
+ 44, 32, 49, 46, 48, 41, 44, 32,118,101, 99, 52, 40,116,101,120, 99,111,108, 44, 32, 49, 46, 48, 41, 44, 32, 99,111,108, 41, 59,
+ 10, 9,105,110, 99,111,108, 46,114,103, 98, 32, 61, 32, 99,111,108, 46,114,103, 98, 59, 10,125, 10, 10,118,111,105,100, 32,109,
+116,101,120, 95,114,103, 98, 95,118, 97,108, 40,118,101, 99, 51, 32,111,117,116, 99,111,108, 44, 32,118,101, 99, 51, 32,116,101,
+120, 99,111,108, 44, 32,102,108,111, 97,116, 32,102, 97, 99,116, 44, 32,102,108,111, 97,116, 32,102, 97, 99,103, 44, 32,111,117,
+116, 32,118,101, 99, 51, 32,105,110, 99,111,108, 41, 10,123, 10, 9,118,101, 99, 52, 32, 99,111,108, 59, 10, 10, 9,109,105,120,
+ 95,118, 97,108, 40,102, 97, 99,116, 42,102, 97, 99,103, 44, 32,118,101, 99, 52, 40,111,117,116, 99,111,108, 44, 32, 49, 46, 48,
+ 41, 44, 32,118,101, 99, 52, 40,116,101,120, 99,111,108, 44, 32, 49, 46, 48, 41, 44, 32, 99,111,108, 41, 59, 10, 9,105,110, 99,
+111,108, 46,114,103, 98, 32, 61, 32, 99,111,108, 46,114,103, 98, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,114,
+103, 98, 95, 99,111,108,111,114, 40,118,101, 99, 51, 32,111,117,116, 99,111,108, 44, 32,118,101, 99, 51, 32,116,101,120, 99,111,
+108, 44, 32,102,108,111, 97,116, 32,102, 97, 99,116, 44, 32,102,108,111, 97,116, 32,102, 97, 99,103, 44, 32,111,117,116, 32,118,
+101, 99, 51, 32,105,110, 99,111,108, 41, 10,123, 10, 9,118,101, 99, 52, 32, 99,111,108, 59, 10, 10, 9,109,105,120, 95, 99,111,
+108,111,114, 40,102, 97, 99,116, 42,102, 97, 99,103, 44, 32,118,101, 99, 52, 40,111,117,116, 99,111,108, 44, 32, 49, 46, 48, 41,
+ 44, 32,118,101, 99, 52, 40,116,101,120, 99,111,108, 44, 32, 49, 46, 48, 41, 44, 32, 99,111,108, 41, 59, 10, 9,105,110, 99,111,
+108, 46,114,103, 98, 32, 61, 32, 99,111,108, 46,114,103, 98, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,118, 97,
+108,117,101, 95,118, 97,114,115, 40,105,110,111,117,116, 32,102,108,111, 97,116, 32,102, 97, 99,116, 44, 32,102,108,111, 97,116,
+ 32,102, 97, 99,103, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,102, 97, 99,109, 44, 32,102,108,111, 97,116, 32,102,108,105,
+112, 41, 10,123, 10, 9,102, 97, 99,116, 32, 42, 61, 32,102, 97, 99,103, 59, 10, 9,102, 97, 99,109, 32, 61, 32, 49, 46, 48, 45,
+102, 97, 99,116, 59, 10, 10, 9,105,102, 40,102,108,105,112, 32, 33, 61, 32, 48, 46, 48, 41, 32,123, 10, 9, 9,102,108,111, 97,
+116, 32,116,109,112, 32, 61, 32,102, 97, 99,116, 59, 10, 9, 9,102, 97, 99,116, 32, 61, 32,102, 97, 99,109, 59, 10, 9, 9,102,
+ 97, 99,109, 32, 61, 32,116,109,112, 59, 10, 9,125, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,118, 97,108,117,101,
+ 95, 98,108,101,110,100, 40,102,108,111, 97,116, 32,111,117,116, 99,111,108, 44, 32,102,108,111, 97,116, 32,116,101,120, 99,111,
+108, 44, 32,102,108,111, 97,116, 32,102, 97, 99,116, 44, 32,102,108,111, 97,116, 32,102, 97, 99,103, 44, 32,102,108,111, 97,116,
+ 32,102,108,105,112, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,105,110, 99,111,108, 41, 10,123, 10, 9,102,108,111, 97,116,
+ 32,102, 97, 99,109, 59, 10, 9,109,116,101,120, 95,118, 97,108,117,101, 95,118, 97,114,115, 40,102, 97, 99,116, 44, 32,102, 97,
+ 99,103, 44, 32,102, 97, 99,109, 44, 32,102,108,105,112, 41, 59, 10, 10, 9,105,110, 99,111,108, 32, 61, 32,102, 97, 99,116, 42,
+116,101,120, 99,111,108, 32, 43, 32,102, 97, 99,109, 42,111,117,116, 99,111,108, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,
+101,120, 95,118, 97,108,117,101, 95,109,117,108, 40,102,108,111, 97,116, 32,111,117,116, 99,111,108, 44, 32,102,108,111, 97,116,
+ 32,116,101,120, 99,111,108, 44, 32,102,108,111, 97,116, 32,102, 97, 99,116, 44, 32,102,108,111, 97,116, 32,102, 97, 99,103, 44,
+ 32,102,108,111, 97,116, 32,102,108,105,112, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,105,110, 99,111,108, 41, 10,123, 10,
+ 9,102,108,111, 97,116, 32,102, 97, 99,109, 59, 10, 9,109,116,101,120, 95,118, 97,108,117,101, 95,118, 97,114,115, 40,102, 97,
+ 99,116, 44, 32,102, 97, 99,103, 44, 32,102, 97, 99,109, 44, 32,102,108,105,112, 41, 59, 10, 10, 9,102, 97, 99,109, 32, 61, 32,
+ 49, 46, 48, 32, 45, 32,102, 97, 99,103, 59, 10, 9,105,110, 99,111,108, 32, 61, 32, 40,102, 97, 99,109, 32, 43, 32,102, 97, 99,
+116, 42,116,101,120, 99,111,108, 41, 42,111,117,116, 99,111,108, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,118,
+ 97,108,117,101, 95,115, 99,114,101,101,110, 40,102,108,111, 97,116, 32,111,117,116, 99,111,108, 44, 32,102,108,111, 97,116, 32,
+116,101,120, 99,111,108, 44, 32,102,108,111, 97,116, 32,102, 97, 99,116, 44, 32,102,108,111, 97,116, 32,102, 97, 99,103, 44, 32,
+102,108,111, 97,116, 32,102,108,105,112, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,105,110, 99,111,108, 41, 10,123, 10, 9,
+102,108,111, 97,116, 32,102, 97, 99,109, 59, 10, 9,109,116,101,120, 95,118, 97,108,117,101, 95,118, 97,114,115, 40,102, 97, 99,
+116, 44, 32,102, 97, 99,103, 44, 32,102, 97, 99,109, 44, 32,102,108,105,112, 41, 59, 10, 10, 9,102, 97, 99,109, 32, 61, 32, 49,
+ 46, 48, 32, 45, 32,102, 97, 99,103, 59, 10, 9,105,110, 99,111,108, 32, 61, 32, 49, 46, 48, 32, 45, 32, 40,102, 97, 99,109, 32,
+ 43, 32,102, 97, 99,116, 42, 40, 49, 46, 48, 32, 45, 32,116,101,120, 99,111,108, 41, 41, 42, 40, 49, 46, 48, 32, 45, 32,111,117,
+116, 99,111,108, 41, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,118, 97,108,117,101, 95,115,117, 98, 40,102,108,
+111, 97,116, 32,111,117,116, 99,111,108, 44, 32,102,108,111, 97,116, 32,116,101,120, 99,111,108, 44, 32,102,108,111, 97,116, 32,
+102, 97, 99,116, 44, 32,102,108,111, 97,116, 32,102, 97, 99,103, 44, 32,102,108,111, 97,116, 32,102,108,105,112, 44, 32,111,117,
+116, 32,102,108,111, 97,116, 32,105,110, 99,111,108, 41, 10,123, 10, 9,102,108,111, 97,116, 32,102, 97, 99,109, 59, 10, 9,109,
+116,101,120, 95,118, 97,108,117,101, 95,118, 97,114,115, 40,102, 97, 99,116, 44, 32,102, 97, 99,103, 44, 32,102, 97, 99,109, 44,
+ 32,102,108,105,112, 41, 59, 10, 10, 9,102, 97, 99,116, 32, 61, 32, 45,102, 97, 99,116, 59, 10, 9,105,110, 99,111,108, 32, 61,
+ 32,102, 97, 99,116, 42,116,101,120, 99,111,108, 32, 43, 32,111,117,116, 99,111,108, 59, 10,125, 10, 10,118,111,105,100, 32,109,
+116,101,120, 95,118, 97,108,117,101, 95, 97,100,100, 40,102,108,111, 97,116, 32,111,117,116, 99,111,108, 44, 32,102,108,111, 97,
+116, 32,116,101,120, 99,111,108, 44, 32,102,108,111, 97,116, 32,102, 97, 99,116, 44, 32,102,108,111, 97,116, 32,102, 97, 99,103,
+ 44, 32,102,108,111, 97,116, 32,102,108,105,112, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,105,110, 99,111,108, 41, 10,123,
+ 10, 9,102,108,111, 97,116, 32,102, 97, 99,109, 59, 10, 9,109,116,101,120, 95,118, 97,108,117,101, 95,118, 97,114,115, 40,102,
+ 97, 99,116, 44, 32,102, 97, 99,103, 44, 32,102, 97, 99,109, 44, 32,102,108,105,112, 41, 59, 10, 10, 9,102, 97, 99,116, 32, 61,
+ 32,102, 97, 99,116, 59, 10, 9,105,110, 99,111,108, 32, 61, 32,102, 97, 99,116, 42,116,101,120, 99,111,108, 32, 43, 32,111,117,
+116, 99,111,108, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,118, 97,108,117,101, 95,100,105,118, 40,102,108,111,
+ 97,116, 32,111,117,116, 99,111,108, 44, 32,102,108,111, 97,116, 32,116,101,120, 99,111,108, 44, 32,102,108,111, 97,116, 32,102,
+ 97, 99,116, 44, 32,102,108,111, 97,116, 32,102, 97, 99,103, 44, 32,102,108,111, 97,116, 32,102,108,105,112, 44, 32,111,117,116,
+ 32,102,108,111, 97,116, 32,105,110, 99,111,108, 41, 10,123, 10, 9,102,108,111, 97,116, 32,102, 97, 99,109, 59, 10, 9,109,116,
+101,120, 95,118, 97,108,117,101, 95,118, 97,114,115, 40,102, 97, 99,116, 44, 32,102, 97, 99,103, 44, 32,102, 97, 99,109, 44, 32,
+102,108,105,112, 41, 59, 10, 10, 9,105,102, 40,116,101,120, 99,111,108, 32, 33, 61, 32, 48, 46, 48, 41, 10, 9, 9,105,110, 99,
+111,108, 32, 61, 32,102, 97, 99,109, 42,111,117,116, 99,111,108, 32, 43, 32,102, 97, 99,116, 42,111,117,116, 99,111,108, 47,116,
+101,120, 99,111,108, 59, 10, 9,101,108,115,101, 10, 9, 9,105,110, 99,111,108, 32, 61, 32, 48, 46, 48, 59, 10,125, 10, 10,118,
+111,105,100, 32,109,116,101,120, 95,118, 97,108,117,101, 95,100,105,102,102, 40,102,108,111, 97,116, 32,111,117,116, 99,111,108,
+ 44, 32,102,108,111, 97,116, 32,116,101,120, 99,111,108, 44, 32,102,108,111, 97,116, 32,102, 97, 99,116, 44, 32,102,108,111, 97,
+116, 32,102, 97, 99,103, 44, 32,102,108,111, 97,116, 32,102,108,105,112, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,105,110,
+ 99,111,108, 41, 10,123, 10, 9,102,108,111, 97,116, 32,102, 97, 99,109, 59, 10, 9,109,116,101,120, 95,118, 97,108,117,101, 95,
+118, 97,114,115, 40,102, 97, 99,116, 44, 32,102, 97, 99,103, 44, 32,102, 97, 99,109, 44, 32,102,108,105,112, 41, 59, 10, 10, 9,
+105,110, 99,111,108, 32, 61, 32,102, 97, 99,109, 42,111,117,116, 99,111,108, 32, 43, 32,102, 97, 99,116, 42, 97, 98,115, 40,116,
+101,120, 99,111,108, 32, 45, 32,111,117,116, 99,111,108, 41, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,118, 97,
+108,117,101, 95,100, 97,114,107, 40,102,108,111, 97,116, 32,111,117,116, 99,111,108, 44, 32,102,108,111, 97,116, 32,116,101,120,
+ 99,111,108, 44, 32,102,108,111, 97,116, 32,102, 97, 99,116, 44, 32,102,108,111, 97,116, 32,102, 97, 99,103, 44, 32,102,108,111,
+ 97,116, 32,102,108,105,112, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,105,110, 99,111,108, 41, 10,123, 10, 9,102,108,111,
+ 97,116, 32,102, 97, 99,109, 59, 10, 9,109,116,101,120, 95,118, 97,108,117,101, 95,118, 97,114,115, 40,102, 97, 99,116, 44, 32,
+102, 97, 99,103, 44, 32,102, 97, 99,109, 44, 32,102,108,105,112, 41, 59, 10, 10, 9,102,108,111, 97,116, 32, 99,111,108, 32, 61,
+ 32,102, 97, 99,116, 42,116,101,120, 99,111,108, 59, 10, 9,105,102, 40, 99,111,108, 32, 60, 32,111,117,116, 99,111,108, 41, 32,
+105,110, 99,111,108, 32, 61, 32, 99,111,108, 59, 32,101,108,115,101, 32,105,110, 99,111,108, 32, 61, 32,111,117,116, 99,111,108,
+ 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,118, 97,108,117,101, 95,108,105,103,104,116, 40,102,108,111, 97,116,
+ 32,111,117,116, 99,111,108, 44, 32,102,108,111, 97,116, 32,116,101,120, 99,111,108, 44, 32,102,108,111, 97,116, 32,102, 97, 99,
+116, 44, 32,102,108,111, 97,116, 32,102, 97, 99,103, 44, 32,102,108,111, 97,116, 32,102,108,105,112, 44, 32,111,117,116, 32,102,
+108,111, 97,116, 32,105,110, 99,111,108, 41, 10,123, 10, 9,102,108,111, 97,116, 32,102, 97, 99,109, 59, 10, 9,109,116,101,120,
+ 95,118, 97,108,117,101, 95,118, 97,114,115, 40,102, 97, 99,116, 44, 32,102, 97, 99,103, 44, 32,102, 97, 99,109, 44, 32,102,108,
+105,112, 41, 59, 10, 10, 9,102,108,111, 97,116, 32, 99,111,108, 32, 61, 32,102, 97, 99,116, 42,116,101,120, 99,111,108, 59, 10,
+ 9,105,102, 40, 99,111,108, 32, 62, 32,111,117,116, 99,111,108, 41, 32,105,110, 99,111,108, 32, 61, 32, 99,111,108, 59, 32,101,
+108,115,101, 32,105,110, 99,111,108, 32, 61, 32,111,117,116, 99,111,108, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120,
+ 95,118, 97,108,117,101, 95, 99,108, 97,109,112, 95,112,111,115,105,116,105,118,101, 40,102,108,111, 97,116, 32,102, 97, 99, 44,
+ 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,102, 97, 99, 41, 10,123, 10, 9,111,117,116,102, 97, 99, 32, 61, 32,109,
+ 97,120, 40,102, 97, 99, 44, 32, 48, 46, 48, 41, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,118, 97,108,117,101,
+ 95, 99,108, 97,109,112, 40,102,108,111, 97,116, 32,102, 97, 99, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,102,
+ 97, 99, 41, 10,123, 10, 9,111,117,116,102, 97, 99, 32, 61, 32, 99,108, 97,109,112, 40,102, 97, 99, 44, 32, 48, 46, 48, 44, 32,
+ 49, 46, 48, 41, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,104, 97,114, 95,100,105,118,105,100,101, 40,102,108,
+111, 97,116, 32,104, 97,114, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,104, 97,114, 41, 10,123, 10, 9,111,117,
+116,104, 97,114, 32, 61, 32,104, 97,114, 47, 49, 50, 56, 46, 48, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,104,
+ 97,114, 95,109,117,108,116,105,112,108,121, 95, 99,108, 97,109,112, 40,102,108,111, 97,116, 32,104, 97,114, 44, 32,111,117,116,
+ 32,102,108,111, 97,116, 32,111,117,116,104, 97,114, 41, 10,123, 10, 9,104, 97,114, 32, 42, 61, 32, 49, 50, 56, 46, 48, 59, 10,
+ 10, 9,105,102, 40,104, 97,114, 32, 60, 32, 49, 46, 48, 41, 32,111,117,116,104, 97,114, 32, 61, 32, 49, 46, 48, 59, 10, 9,101,
+108,115,101, 32,105,102, 40,104, 97,114, 32, 62, 32, 53, 49, 49, 46, 48, 41, 32,111,117,116,104, 97,114, 32, 61, 32, 53, 49, 49,
+ 46, 48, 59, 10, 9,101,108,115,101, 32,111,117,116,104, 97,114, 32, 61, 32,104, 97,114, 59, 10,125, 10, 10,118,111,105,100, 32,
+109,116,101,120, 95, 97,108,112,104, 97, 95,102,114,111,109, 95, 99,111,108, 40,118,101, 99, 52, 32, 99,111,108, 44, 32,111,117,
+116, 32,102,108,111, 97,116, 32, 97,108,112,104, 97, 41, 10,123, 10, 9, 97,108,112,104, 97, 32, 61, 32, 99,111,108, 46, 97, 59,
+ 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95, 97,108,112,104, 97, 95,116,111, 95, 99,111,108, 40,118,101, 99, 52, 32,
+ 99,111,108, 44, 32,102,108,111, 97,116, 32, 97,108,112,104, 97, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,
+108, 41, 10,123, 10, 9,111,117,116, 99,111,108, 32, 61, 32,118,101, 99, 52, 40, 99,111,108, 46,114,103, 98, 44, 32, 97,108,112,
+104, 97, 41, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,114,103, 98,116,111,105,110,116, 40,118,101, 99, 52, 32,
+114,103, 98, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,105,110,116,101,110,115,105,116,121, 41, 10,123, 10, 9,105,110,116,
+101,110,115,105,116,121, 32, 61, 32,100,111,116, 40,118,101, 99, 51, 40, 48, 46, 51, 53, 44, 32, 48, 46, 52, 53, 44, 32, 48, 46,
+ 50, 41, 44, 32,114,103, 98, 46,114,103, 98, 41, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,118, 97,108,117,101,
+ 95,105,110,118,101,114,116, 40,102,108,111, 97,116, 32,105,110,118, 97,108,117,101, 44, 32,111,117,116, 32,102,108,111, 97,116,
+ 32,111,117,116,118, 97,108,117,101, 41, 10,123, 10, 9,111,117,116,118, 97,108,117,101, 32, 61, 32, 49, 46, 48, 32, 45, 32,105,
+110,118, 97,108,117,101, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,114,103, 98, 95,105,110,118,101,114,116, 40,
+118,101, 99, 52, 32,105,110,114,103, 98, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116,114,103, 98, 41, 10,123, 10, 9,
+111,117,116,114,103, 98, 32, 61, 32,118,101, 99, 52, 40,118,101, 99, 51, 40, 49, 46, 48, 41, 32, 45, 32,105,110,114,103, 98, 46,
+114,103, 98, 44, 32,105,110,114,103, 98, 46, 97, 41, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,118, 97,108,117,
+101, 95,115,116,101,110, 99,105,108, 40,102,108,111, 97,116, 32,115,116,101,110, 99,105,108, 44, 32,102,108,111, 97,116, 32,105,
+110,116,101,110,115,105,116,121, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,115,116,101,110, 99,105,108, 44, 32,
+111,117,116, 32,102,108,111, 97,116, 32,111,117,116,105,110,116,101,110,115,105,116,121, 41, 10,123, 10, 9,102,108,111, 97,116,
+ 32,102, 97, 99,116, 32, 61, 32,105,110,116,101,110,115,105,116,121, 59, 10, 9,111,117,116,105,110,116,101,110,115,105,116,121,
+ 32, 61, 32,105,110,116,101,110,115,105,116,121, 42,115,116,101,110, 99,105,108, 59, 10, 9,111,117,116,115,116,101,110, 99,105,
+108, 32, 61, 32,115,116,101,110, 99,105,108, 42,102, 97, 99,116, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,114,
+103, 98, 95,115,116,101,110, 99,105,108, 40,102,108,111, 97,116, 32,115,116,101,110, 99,105,108, 44, 32,118,101, 99, 52, 32,114,
+103, 98, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,115,116,101,110, 99,105,108, 44, 32,111,117,116, 32,118,101,
+ 99, 52, 32,111,117,116,114,103, 98, 41, 10,123, 10, 9,102,108,111, 97,116, 32,102, 97, 99,116, 32, 61, 32,114,103, 98, 46, 97,
+ 59, 10, 9,111,117,116,114,103, 98, 32, 61, 32,118,101, 99, 52, 40,114,103, 98, 46,114,103, 98, 44, 32,114,103, 98, 46, 97, 42,
+115,116,101,110, 99,105,108, 41, 59, 10, 9,111,117,116,115,116,101,110, 99,105,108, 32, 61, 32,115,116,101,110, 99,105,108, 42,
+102, 97, 99,116, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,109, 97,112,112,105,110,103, 95,111,102,115, 40,118,
+101, 99, 51, 32,116,101,120, 99,111, 44, 32,118,101, 99, 51, 32,111,102,115, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,
+116,116,101,120, 99,111, 41, 10,123, 10, 9,111,117,116,116,101,120, 99,111, 32, 61, 32,116,101,120, 99,111, 32, 43, 32,111,102,
+115, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,109, 97,112,112,105,110,103, 95,115,105,122,101, 40,118,101, 99,
+ 51, 32,116,101,120, 99,111, 44, 32,118,101, 99, 51, 32,115,105,122,101, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116,
+116,101,120, 99,111, 41, 10,123, 10, 9,111,117,116,116,101,120, 99,111, 32, 61, 32,115,105,122,101, 42,116,101,120, 99,111, 59,
+ 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95, 50,100, 95,109, 97,112,112,105,110,103, 40,118,101, 99, 51, 32,118,101,
+ 99, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116,118,101, 99, 41, 10,123, 10, 9,111,117,116,118,101, 99, 32, 61, 32,
+118,101, 99, 51, 40,118,101, 99, 46,120,121, 42, 48, 46, 53, 32, 43, 32,118,101, 99, 50, 40, 48, 46, 53, 44, 32, 48, 46, 53, 41,
+ 44, 32,118,101, 99, 46,122, 41, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,105,109, 97,103,101, 40,118,101, 99,
+ 51, 32,118,101, 99, 44, 32,115, 97,109,112,108,101,114, 50, 68, 32,105,109, 97, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,
+118, 97,108,117,101, 44, 32,111,117,116, 32,118,101, 99, 52, 32, 99,111,108,111,114, 44, 32,111,117,116, 32,118,101, 99, 51, 32,
+110,111,114,109, 97,108, 41, 10,123, 10, 9, 99,111,108,111,114, 32, 61, 32,116,101,120,116,117,114,101, 50, 68, 40,105,109, 97,
+ 44, 32,118,101, 99, 46,120,121, 41, 59, 10, 9,118, 97,108,117,101, 32, 61, 32, 49, 46, 48, 59, 10, 9, 10, 9,110,111,114,109,
+ 97,108, 32, 61, 32, 50, 46, 48, 42, 40,118,101, 99, 51, 40, 99,111,108,111,114, 46,114, 44, 32, 45, 99,111,108,111,114, 46,103,
+ 44, 32, 99,111,108,111,114, 46, 98, 41, 32, 45, 32,118,101, 99, 51, 40, 48, 46, 53, 44, 32, 45, 48, 46, 53, 44, 32, 48, 46, 53,
+ 41, 41, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,110,101,103, 97,116,101, 95,116,101,120,110,111,114,109, 97,
+108, 40,118,101, 99, 51, 32,110,111,114,109, 97,108, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116,110,111,114,109, 97,
+108, 41, 10,123, 10, 9,111,117,116,110,111,114,109, 97,108, 32, 61, 32,118,101, 99, 51, 40, 45,110,111,114,109, 97,108, 46,120,
+ 44, 32, 45,110,111,114,109, 97,108, 46,121, 44, 32,110,111,114,109, 97,108, 46,122, 41, 59, 10,125, 10, 10,118,111,105,100, 32,
+109,116,101,120, 95,110,115,112, 97, 99,101, 95,116, 97,110,103,101,110,116, 40,118,101, 99, 51, 32,116, 97,110,103,101,110,116,
+ 44, 32,118,101, 99, 51, 32,110,111,114,109, 97,108, 44, 32,118,101, 99, 51, 32,116,101,120,110,111,114,109, 97,108, 44, 32,111,
+117,116, 32,118,101, 99, 51, 32,111,117,116,110,111,114,109, 97,108, 41, 10,123, 10, 9,116, 97,110,103,101,110,116, 32, 61, 32,
+110,111,114,109, 97,108,105,122,101, 40,116, 97,110,103,101,110,116, 41, 59, 10, 9,118,101, 99, 51, 32, 66, 32, 61, 32, 99,114,
+111,115,115, 40,110,111,114,109, 97,108, 44, 32,116, 97,110,103,101,110,116, 41, 59, 10, 10, 9,111,117,116,110,111,114,109, 97,
+108, 32, 61, 32,116,101,120,110,111,114,109, 97,108, 46,120, 42,116, 97,110,103,101,110,116, 32, 43, 32,116,101,120,110,111,114,
+109, 97,108, 46,121, 42, 66, 32, 43, 32,116,101,120,110,111,114,109, 97,108, 46,122, 42,110,111,114,109, 97,108, 59, 10, 9,111,
+117,116,110,111,114,109, 97,108, 32, 61, 32,110,111,114,109, 97,108,105,122,101, 40,111,117,116,110,111,114,109, 97,108, 41, 59,
+ 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95, 98,108,101,110,100, 95,110,111,114,109, 97,108, 40,102,108,111, 97,116,
+ 32,110,111,114,102, 97, 99, 44, 32,118,101, 99, 51, 32,110,111,114,109, 97,108, 44, 32,118,101, 99, 51, 32,110,101,119,110,111,
+114,109, 97,108, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116,110,111,114,109, 97,108, 41, 10,123, 10, 9,111,117,116,
+110,111,114,109, 97,108, 32, 61, 32, 40, 49, 46, 48, 32, 45, 32,110,111,114,102, 97, 99, 41, 42,110,111,114,109, 97,108, 32, 43,
+ 32,110,111,114,102, 97, 99, 42,110,101,119,110,111,114,109, 97,108, 59, 10, 9,111,117,116,110,111,114,109, 97,108, 32, 61, 32,
+110,111,114,109, 97,108,105,122,101, 40,111,117,116,110,111,114,109, 97,108, 41, 59, 10,125, 10, 10, 47, 42, 42, 42, 42, 42, 42,
+ 42, 32, 77, 65, 84, 69, 82, 73, 65, 76, 32, 42, 42, 42, 42, 42, 42, 42, 42, 42, 47, 10, 10,118,111,105,100, 32,108, 97,109,112,
+ 95,118,105,115,105, 98,105,108,105,116,121, 95,115,117,110, 95,104,101,109,105, 40,118,101, 99, 51, 32,108, 97,109,112,118,101,
+ 99, 44, 32,111,117,116, 32,118,101, 99, 51, 32,108,118, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,100,105,115,116, 44, 32,
+111,117,116, 32,102,108,111, 97,116, 32,118,105,115,105,102, 97, 99, 41, 10,123, 10, 9,108,118, 32, 61, 32,108, 97,109,112,118,
+101, 99, 59, 10, 9,100,105,115,116, 32, 61, 32, 49, 46, 48, 59, 10, 9,118,105,115,105,102, 97, 99, 32, 61, 32, 49, 46, 48, 59,
+ 10,125, 10, 10,118,111,105,100, 32,108, 97,109,112, 95,118,105,115,105, 98,105,108,105,116,121, 95,111,116,104,101,114, 40,118,
+101, 99, 51, 32, 99,111, 44, 32,118,101, 99, 51, 32,108, 97,109,112, 99,111, 44, 32,111,117,116, 32,118,101, 99, 51, 32,108,118,
+ 44, 32,111,117,116, 32,102,108,111, 97,116, 32,100,105,115,116, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,118,105,115,105,
+102, 97, 99, 41, 10,123, 10, 9,108,118, 32, 61, 32, 99,111, 32, 45, 32,108, 97,109,112, 99,111, 59, 10, 9,100,105,115,116, 32,
+ 61, 32,108,101,110,103,116,104, 40,108,118, 41, 59, 10, 9,108,118, 32, 61, 32,110,111,114,109, 97,108,105,122,101, 40,108,118,
+ 41, 59, 10, 9,118,105,115,105,102, 97, 99, 32, 61, 32, 49, 46, 48, 59, 10,125, 10, 10,118,111,105,100, 32,108, 97,109,112, 95,
+102, 97,108,108,111,102,102, 95,105,110,118,108,105,110,101, 97,114, 40,102,108,111, 97,116, 32,108, 97,109,112,100,105,115,116,
+ 44, 32,102,108,111, 97,116, 32,100,105,115,116, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,118,105,115,105,102, 97, 99, 41,
+ 10,123, 10, 9,118,105,115,105,102, 97, 99, 32, 61, 32,108, 97,109,112,100,105,115,116, 47, 40,108, 97,109,112,100,105,115,116,
+ 32, 43, 32,100,105,115,116, 41, 59, 10,125, 10, 10,118,111,105,100, 32,108, 97,109,112, 95,102, 97,108,108,111,102,102, 95,105,
+110,118,115,113,117, 97,114,101, 40,102,108,111, 97,116, 32,108, 97,109,112,100,105,115,116, 44, 32,102,108,111, 97,116, 32,100,
+105,115,116, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,118,105,115,105,102, 97, 99, 41, 10,123, 10, 9,118,105,115,105,102,
+ 97, 99, 32, 61, 32,108, 97,109,112,100,105,115,116, 47, 40,108, 97,109,112,100,105,115,116, 32, 43, 32,100,105,115,116, 42,100,
+105,115,116, 41, 59, 10,125, 10, 10,118,111,105,100, 32,108, 97,109,112, 95,102, 97,108,108,111,102,102, 95,115,108,105,100,101,
+114,115, 40,102,108,111, 97,116, 32,108, 97,109,112,100,105,115,116, 44, 32,102,108,111, 97,116, 32,108,100, 49, 44, 32,102,108,
+111, 97,116, 32,108,100, 50, 44, 32,102,108,111, 97,116, 32,100,105,115,116, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,118,
+105,115,105,102, 97, 99, 41, 10,123, 10, 9,102,108,111, 97,116, 32,108, 97,109,112,100,105,115,116,107,119, 32, 61, 32,108, 97,
+109,112,100,105,115,116, 42,108, 97,109,112,100,105,115,116, 59, 10, 10, 9,118,105,115,105,102, 97, 99, 32, 61, 32,108, 97,109,
+112,100,105,115,116, 47, 40,108, 97,109,112,100,105,115,116, 32, 43, 32,108,100, 49, 42,100,105,115,116, 41, 59, 10, 9,118,105,
+115,105,102, 97, 99, 32, 42, 61, 32,108, 97,109,112,100,105,115,116,107,119, 47, 40,108, 97,109,112,100,105,115,116,107,119, 32,
+ 43, 32,108,100, 50, 42,100,105,115,116, 42,100,105,115,116, 41, 59, 10,125, 10, 10,118,111,105,100, 32,108, 97,109,112, 95,102,
+ 97,108,108,111,102,102, 95, 99,117,114,118,101, 40,102,108,111, 97,116, 32,108, 97,109,112,100,105,115,116, 44, 32,115, 97,109,
+112,108,101,114, 49, 68, 32, 99,117,114,118,101,109, 97,112, 44, 32,102,108,111, 97,116, 32,100,105,115,116, 44, 32,111,117,116,
+ 32,102,108,111, 97,116, 32,118,105,115,105,102, 97, 99, 41, 10,123, 10, 9,118,105,115,105,102, 97, 99, 32, 61, 32,116,101,120,
+116,117,114,101, 49, 68, 40, 99,117,114,118,101,109, 97,112, 44, 32,100,105,115,116, 47,108, 97,109,112,100,105,115,116, 41, 46,
+120, 59, 10,125, 10, 10,118,111,105,100, 32,108, 97,109,112, 95,118,105,115,105, 98,105,108,105,116,121, 95,115,112,104,101,114,
+101, 40,102,108,111, 97,116, 32,108, 97,109,112,100,105,115,116, 44, 32,102,108,111, 97,116, 32,100,105,115,116, 44, 32,102,108,
+111, 97,116, 32,118,105,115,105,102, 97, 99, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118,105,115,105,102, 97,
+ 99, 41, 10,123, 10, 9,102,108,111, 97,116, 32,116, 61, 32,108, 97,109,112,100,105,115,116, 32, 45, 32,100,105,115,116, 59, 10,
+ 10, 9,111,117,116,118,105,115,105,102, 97, 99, 61, 32,118,105,115,105,102, 97, 99, 42,109, 97,120, 40,116, 44, 32, 48, 46, 48,
+ 41, 47,108, 97,109,112,100,105,115,116, 59, 10,125, 10, 10,118,111,105,100, 32,108, 97,109,112, 95,118,105,115,105, 98,105,108,
+105,116,121, 95,115,112,111,116, 95,115,113,117, 97,114,101, 40,118,101, 99, 51, 32,108, 97,109,112,118,101, 99, 44, 32,109, 97,
+116, 52, 32,108, 97,109,112,105,109, 97,116, 44, 32,118,101, 99, 51, 32,108,118, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,
+105,110,112,114, 41, 10,123, 10, 9,105,102, 40,100,111,116, 40,108,118, 44, 32,108, 97,109,112,118,101, 99, 41, 32, 62, 32, 48,
+ 46, 48, 41, 32,123, 10, 9, 9,118,101, 99, 51, 32,108,118,114,111,116, 32, 61, 32, 40,108, 97,109,112,105,109, 97,116, 42,118,
+101, 99, 52, 40,108,118, 44, 32, 48, 46, 48, 41, 41, 46,120,121,122, 59, 10, 9, 9,102,108,111, 97,116, 32,120, 32, 61, 32,109,
+ 97,120, 40, 97, 98,115, 40,108,118,114,111,116, 46,120, 47,108,118,114,111,116, 46,122, 41, 44, 32, 97, 98,115, 40,108,118,114,
+111,116, 46,121, 47,108,118,114,111,116, 46,122, 41, 41, 59, 10, 10, 9, 9,105,110,112,114, 32, 61, 32, 49, 46, 48, 47,115,113,
+114,116, 40, 49, 46, 48, 32, 43, 32,120, 42,120, 41, 59, 10, 9,125, 10, 9,101,108,115,101, 10, 9, 9,105,110,112,114, 32, 61,
+ 32, 48, 46, 48, 59, 10,125, 10, 10,118,111,105,100, 32,108, 97,109,112, 95,118,105,115,105, 98,105,108,105,116,121, 95,115,112,
+111,116, 95, 99,105,114, 99,108,101, 40,118,101, 99, 51, 32,108, 97,109,112,118,101, 99, 44, 32,118,101, 99, 51, 32,108,118, 44,
+ 32,111,117,116, 32,102,108,111, 97,116, 32,105,110,112,114, 41, 10,123, 10, 9,105,110,112,114, 32, 61, 32,100,111,116, 40,108,
+118, 44, 32,108, 97,109,112,118,101, 99, 41, 59, 10,125, 10, 10,118,111,105,100, 32,108, 97,109,112, 95,118,105,115,105, 98,105,
+108,105,116,121, 95,115,112,111,116, 40,102,108,111, 97,116, 32,115,112,111,116,115,105, 44, 32,102,108,111, 97,116, 32,115,112,
+111,116, 98,108, 44, 32,102,108,111, 97,116, 32,105,110,112,114, 44, 32,102,108,111, 97,116, 32,118,105,115,105,102, 97, 99, 44,
+ 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118,105,115,105,102, 97, 99, 41, 10,123, 10, 9,102,108,111, 97,116, 32,
+116, 32, 61, 32,115,112,111,116,115,105, 59, 10, 10, 9,105,102, 40,105,110,112,114, 32, 60, 61, 32,116, 41, 32,123, 10, 9, 9,
+111,117,116,118,105,115,105,102, 97, 99, 32, 61, 32, 48, 46, 48, 59, 10, 9,125, 10, 9,101,108,115,101, 32,123, 10, 9, 9,116,
+ 32, 61, 32,105,110,112,114, 32, 45, 32,116, 59, 10, 10, 9, 9, 47, 42, 32,115,111,102,116, 32, 97,114,101, 97, 32, 42, 47, 10,
+ 9, 9,105,102, 40,115,112,111,116, 98,108, 32, 33, 61, 32, 48, 46, 48, 41, 10, 9, 9, 9,105,110,112,114, 32, 42, 61, 32,115,
+109,111,111,116,104,115,116,101,112, 40, 48, 46, 48, 44, 32, 49, 46, 48, 44, 32,116, 47,115,112,111,116, 98,108, 41, 59, 10, 10,
+ 9, 9,111,117,116,118,105,115,105,102, 97, 99, 32, 61, 32,118,105,115,105,102, 97, 99, 42,105,110,112,114, 59, 10, 9,125, 10,
+125, 10, 10,118,111,105,100, 32,108, 97,109,112, 95,118,105,115,105, 98,105,108,105,116,121, 95, 99,108, 97,109,112, 40,102,108,
+111, 97,116, 32,118,105,115,105,102, 97, 99, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118,105,115,105,102, 97,
+ 99, 41, 10,123, 10, 9,111,117,116,118,105,115,105,102, 97, 99, 32, 61, 32, 40,118,105,115,105,102, 97, 99, 32, 60, 32, 48, 46,
+ 48, 48, 49, 41, 63, 32, 48, 46, 48, 58, 32,118,105,115,105,102, 97, 99, 59, 10,125, 10, 10,118,111,105,100, 32,115,104, 97,100,
+101, 95,118,105,101,119, 40,118,101, 99, 51, 32, 99,111, 44, 32,111,117,116, 32,118,101, 99, 51, 32,118,105,101,119, 41, 10,123,
+ 10, 9, 47, 42, 32,104, 97,110,100,108,101, 32,112,101,114,115,112,101, 99,116,105,118,101, 47,111,114,116,104,111,103,114, 97,
+112,104,105, 99, 32, 42, 47, 10, 9,118,105,101,119, 32, 61, 32, 40,103,108, 95, 80,114,111,106,101, 99,116,105,111,110, 77, 97,
+116,114,105,120, 91, 51, 93, 91, 51, 93, 32, 61, 61, 32, 48, 46, 48, 41, 63, 32,110,111,114,109, 97,108,105,122,101, 40, 99,111,
+ 41, 58, 32,118,101, 99, 51, 40, 48, 46, 48, 44, 32, 48, 46, 48, 44, 32, 45, 49, 46, 48, 41, 59, 10,125, 10, 10,118,111,105,100,
+ 32,115,104, 97,100,101, 95,116, 97,110,103,101,110,116, 95,118, 40,118,101, 99, 51, 32,108,118, 44, 32,118,101, 99, 51, 32,116,
+ 97,110,103, 44, 32,111,117,116, 32,118,101, 99, 51, 32,118,110, 41, 10,123, 10, 9,118,101, 99, 51, 32, 99, 32, 61, 32, 99,114,
+111,115,115, 40,108,118, 44, 32,116, 97,110,103, 41, 59, 10, 9,118,101, 99, 51, 32,118,110,111,114, 32, 61, 32, 99,114,111,115,
+115, 40, 99, 44, 32,116, 97,110,103, 41, 59, 10, 10, 9,118,110, 32, 61, 32, 45,110,111,114,109, 97,108,105,122,101, 40,118,110,
+111,114, 41, 59, 10,125, 10, 10,118,111,105,100, 32,115,104, 97,100,101, 95,105,110,112, 40,118,101, 99, 51, 32,118,110, 44, 32,
+118,101, 99, 51, 32,108,118, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,105,110,112, 41, 10,123, 10, 9,105,110,112, 32, 61,
+ 32,100,111,116, 40,118,110, 44, 32,108,118, 41, 59, 10,125, 10, 10,118,111,105,100, 32,115,104, 97,100,101, 95,105,115, 95,110,
+111, 95,100,105,102,102,117,115,101, 40,111,117,116, 32,102,108,111, 97,116, 32,105,115, 41, 10,123, 10, 9,105,115, 32, 61, 32,
+ 48, 46, 48, 59, 10,125, 10, 10,118,111,105,100, 32,115,104, 97,100,101, 95,105,115, 95,104,101,109,105, 40,102,108,111, 97,116,
+ 32,105,110,112, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,105,115, 41, 10,123, 10, 9,105,115, 32, 61, 32, 48, 46, 53, 42,
+105,110,112, 32, 43, 32, 48, 46, 53, 59, 10,125, 10, 10,102,108,111, 97,116, 32, 97,114,101, 97, 95,108, 97,109,112, 95,101,110,
+101,114,103,121, 40,109, 97,116, 52, 32, 97,114,101, 97, 44, 32,118,101, 99, 51, 32, 99,111, 44, 32,118,101, 99, 51, 32,118,110,
+ 41, 10,123, 10, 9,118,101, 99, 51, 32,118,101, 99, 91, 52, 93, 44, 32, 99, 91, 52, 93, 59, 10, 9,102,108,111, 97,116, 32,114,
+ 97,100, 91, 52, 93, 44, 32,102, 97, 99, 59, 10, 9, 10, 9,118,101, 99, 91, 48, 93, 32, 61, 32,110,111,114,109, 97,108,105,122,
+101, 40, 99,111, 32, 45, 32, 97,114,101, 97, 91, 48, 93, 46,120,121,122, 41, 59, 10, 9,118,101, 99, 91, 49, 93, 32, 61, 32,110,
+111,114,109, 97,108,105,122,101, 40, 99,111, 32, 45, 32, 97,114,101, 97, 91, 49, 93, 46,120,121,122, 41, 59, 10, 9,118,101, 99,
+ 91, 50, 93, 32, 61, 32,110,111,114,109, 97,108,105,122,101, 40, 99,111, 32, 45, 32, 97,114,101, 97, 91, 50, 93, 46,120,121,122,
+ 41, 59, 10, 9,118,101, 99, 91, 51, 93, 32, 61, 32,110,111,114,109, 97,108,105,122,101, 40, 99,111, 32, 45, 32, 97,114,101, 97,
+ 91, 51, 93, 46,120,121,122, 41, 59, 10, 10, 9, 99, 91, 48, 93, 32, 61, 32,110,111,114,109, 97,108,105,122,101, 40, 99,114,111,
+115,115, 40,118,101, 99, 91, 48, 93, 44, 32,118,101, 99, 91, 49, 93, 41, 41, 59, 10, 9, 99, 91, 49, 93, 32, 61, 32,110,111,114,
+109, 97,108,105,122,101, 40, 99,114,111,115,115, 40,118,101, 99, 91, 49, 93, 44, 32,118,101, 99, 91, 50, 93, 41, 41, 59, 10, 9,
+ 99, 91, 50, 93, 32, 61, 32,110,111,114,109, 97,108,105,122,101, 40, 99,114,111,115,115, 40,118,101, 99, 91, 50, 93, 44, 32,118,
+101, 99, 91, 51, 93, 41, 41, 59, 10, 9, 99, 91, 51, 93, 32, 61, 32,110,111,114,109, 97,108,105,122,101, 40, 99,114,111,115,115,
+ 40,118,101, 99, 91, 51, 93, 44, 32,118,101, 99, 91, 48, 93, 41, 41, 59, 10, 10, 9,114, 97,100, 91, 48, 93, 32, 61, 32, 97, 99,
+111,115, 40,100,111,116, 40,118,101, 99, 91, 48, 93, 44, 32,118,101, 99, 91, 49, 93, 41, 41, 59, 10, 9,114, 97,100, 91, 49, 93,
+ 32, 61, 32, 97, 99,111,115, 40,100,111,116, 40,118,101, 99, 91, 49, 93, 44, 32,118,101, 99, 91, 50, 93, 41, 41, 59, 10, 9,114,
+ 97,100, 91, 50, 93, 32, 61, 32, 97, 99,111,115, 40,100,111,116, 40,118,101, 99, 91, 50, 93, 44, 32,118,101, 99, 91, 51, 93, 41,
+ 41, 59, 10, 9,114, 97,100, 91, 51, 93, 32, 61, 32, 97, 99,111,115, 40,100,111,116, 40,118,101, 99, 91, 51, 93, 44, 32,118,101,
+ 99, 91, 48, 93, 41, 41, 59, 10, 10, 9,102, 97, 99, 61, 32, 32,114, 97,100, 91, 48, 93, 42,100,111,116, 40,118,110, 44, 32, 99,
+ 91, 48, 93, 41, 59, 10, 9,102, 97, 99, 43, 61, 32,114, 97,100, 91, 49, 93, 42,100,111,116, 40,118,110, 44, 32, 99, 91, 49, 93,
+ 41, 59, 10, 9,102, 97, 99, 43, 61, 32,114, 97,100, 91, 50, 93, 42,100,111,116, 40,118,110, 44, 32, 99, 91, 50, 93, 41, 59, 10,
+ 9,102, 97, 99, 43, 61, 32,114, 97,100, 91, 51, 93, 42,100,111,116, 40,118,110, 44, 32, 99, 91, 51, 93, 41, 59, 10, 10, 9,114,
+101,116,117,114,110, 32,109, 97,120, 40,102, 97, 99, 44, 32, 48, 46, 48, 41, 59, 10,125, 10, 10,118,111,105,100, 32,115,104, 97,
+100,101, 95,105,110,112, 95, 97,114,101, 97, 40,118,101, 99, 51, 32,112,111,115,105,116,105,111,110, 44, 32,118,101, 99, 51, 32,
+108, 97,109,112, 99,111, 44, 32,118,101, 99, 51, 32,108, 97,109,112,118,101, 99, 44, 32,118,101, 99, 51, 32,118,110, 44, 32,109,
+ 97,116, 52, 32, 97,114,101, 97, 44, 32,102,108,111, 97,116, 32, 97,114,101, 97,115,105,122,101, 44, 32,102,108,111, 97,116, 32,
+107, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,105,110,112, 41, 10,123, 10, 9,118,101, 99, 51, 32, 99,111, 32, 61, 32,112,
+111,115,105,116,105,111,110, 59, 10, 9,118,101, 99, 51, 32,118,101, 99, 32, 61, 32, 99,111, 32, 45, 32,108, 97,109,112, 99,111,
+ 59, 10, 10, 9,105,102, 40,100,111,116, 40,118,101, 99, 44, 32,108, 97,109,112,118,101, 99, 41, 32, 60, 32, 48, 46, 48, 41, 32,
+123, 10, 9, 9,105,110,112, 32, 61, 32, 48, 46, 48, 59, 10, 9,125, 10, 9,101,108,115,101, 32,123, 10, 9, 9,102,108,111, 97,
+116, 32,105,110,116,101,110,115, 32, 61, 32, 97,114,101, 97, 95,108, 97,109,112, 95,101,110,101,114,103,121, 40, 97,114,101, 97,
+ 44, 32, 99,111, 44, 32,118,110, 41, 59, 10, 10, 9, 9,105,110,112, 32, 61, 32,112,111,119, 40,105,110,116,101,110,115, 42, 97,
+114,101, 97,115,105,122,101, 44, 32,107, 41, 59, 10, 9,125, 10,125, 10, 10,118,111,105,100, 32,115,104, 97,100,101, 95,100,105,
+102,102,117,115,101, 95,111,114,101,110, 95,110, 97,121,101,114, 40,102,108,111, 97,116, 32,110,108, 44, 32,118,101, 99, 51, 32,
+110, 44, 32,118,101, 99, 51, 32,108, 44, 32,118,101, 99, 51, 32,118, 44, 32,102,108,111, 97,116, 32,114,111,117,103,104, 44, 32,
+111,117,116, 32,102,108,111, 97,116, 32,105,115, 41, 10,123, 10, 9,118,101, 99, 51, 32,104, 32, 61, 32,110,111,114,109, 97,108,
+105,122,101, 40,118, 32, 43, 32,108, 41, 59, 10, 9,102,108,111, 97,116, 32,110,104, 32, 61, 32,109, 97,120, 40,100,111,116, 40,
+110, 44, 32,104, 41, 44, 32, 48, 46, 48, 41, 59, 10, 9,102,108,111, 97,116, 32,110,118, 32, 61, 32,109, 97,120, 40,100,111,116,
+ 40,110, 44, 32,118, 41, 44, 32, 48, 46, 48, 41, 59, 10, 9,102,108,111, 97,116, 32,114,101, 97,108,110,108, 32, 61, 32,100,111,
+116, 40,110, 44, 32,108, 41, 59, 10, 10, 9,105,102, 40,114,101, 97,108,110,108, 32, 60, 32, 48, 46, 48, 41, 32,123, 10, 9, 9,
+105,115, 32, 61, 32, 48, 46, 48, 59, 10, 9,125, 10, 9,101,108,115,101, 32,105,102, 40,110,108, 32, 60, 32, 48, 46, 48, 41, 32,
+123, 10, 9, 9,105,115, 32, 61, 32, 48, 46, 48, 59, 10, 9,125, 10, 9,101,108,115,101, 32,123, 10, 9, 9,102,108,111, 97,116,
+ 32,118,104, 32, 61, 32,109, 97,120, 40,100,111,116, 40,118, 44, 32,104, 41, 44, 32, 48, 46, 48, 41, 59, 10, 9, 9,102,108,111,
+ 97,116, 32, 76,105,116, 95, 65, 32, 61, 32, 97, 99,111,115, 40,114,101, 97,108,110,108, 41, 59, 10, 9, 9,102,108,111, 97,116,
+ 32, 86,105,101,119, 95, 65, 32, 61, 32, 97, 99,111,115, 40,110,118, 41, 59, 10, 10, 9, 9,118,101, 99, 51, 32, 76,105,116, 95,
+ 66, 32, 61, 32,110,111,114,109, 97,108,105,122,101, 40,108, 32, 45, 32,114,101, 97,108,110,108, 42,110, 41, 59, 10, 9, 9,118,
+101, 99, 51, 32, 86,105,101,119, 95, 66, 32, 61, 32,110,111,114,109, 97,108,105,122,101, 40,118, 32, 45, 32,110,118, 42,110, 41,
+ 59, 10, 10, 9, 9,102,108,111, 97,116, 32,116, 32, 61, 32,109, 97,120, 40,100,111,116, 40, 76,105,116, 95, 66, 44, 32, 86,105,
+101,119, 95, 66, 41, 44, 32, 48, 46, 48, 41, 59, 10, 10, 9, 9,102,108,111, 97,116, 32, 97, 44, 32, 98, 59, 10, 10, 9, 9,105,
+102, 40, 76,105,116, 95, 65, 32, 62, 32, 86,105,101,119, 95, 65, 41, 32,123, 10, 9, 9, 9, 97, 32, 61, 32, 76,105,116, 95, 65,
+ 59, 10, 9, 9, 9, 98, 32, 61, 32, 86,105,101,119, 95, 65, 59, 10, 9, 9,125, 10, 9, 9,101,108,115,101, 32,123, 10, 9, 9,
+ 9, 97, 32, 61, 32, 86,105,101,119, 95, 65, 59, 10, 9, 9, 9, 98, 32, 61, 32, 76,105,116, 95, 65, 59, 10, 9, 9,125, 10, 10,
+ 9, 9,102,108,111, 97,116, 32, 65, 32, 61, 32, 49, 46, 48, 32, 45, 32, 40, 48, 46, 53, 42, 40, 40,114,111,117,103,104, 42,114,
+111,117,103,104, 41, 47, 40, 40,114,111,117,103,104, 42,114,111,117,103,104, 41, 32, 43, 32, 48, 46, 51, 51, 41, 41, 41, 59, 10,
+ 9, 9,102,108,111, 97,116, 32, 66, 32, 61, 32, 48, 46, 52, 53, 42, 40, 40,114,111,117,103,104, 42,114,111,117,103,104, 41, 47,
+ 40, 40,114,111,117,103,104, 42,114,111,117,103,104, 41, 32, 43, 32, 48, 46, 48, 57, 41, 41, 59, 10, 10, 9, 9, 98, 32, 42, 61,
+ 32, 48, 46, 57, 53, 59, 10, 9, 9,105,115, 32, 61, 32,110,108, 42, 40, 65, 32, 43, 32, 40, 66, 32, 42, 32,116, 32, 42, 32,115,
+105,110, 40, 97, 41, 32, 42, 32,116, 97,110, 40, 98, 41, 41, 41, 59, 10, 9,125, 10,125, 10, 10,118,111,105,100, 32,115,104, 97,
+100,101, 95,100,105,102,102,117,115,101, 95,116,111,111,110, 40,118,101, 99, 51, 32,110, 44, 32,118,101, 99, 51, 32,108, 44, 32,
+118,101, 99, 51, 32,118, 44, 32,102,108,111, 97,116, 32,115,105,122,101, 44, 32,102,108,111, 97,116, 32,116,115,109,111,111,116,
+104, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,105,115, 41, 10,123, 10, 9,102,108,111, 97,116, 32,114,115,108,116, 32, 61,
+ 32,100,111,116, 40,110, 44, 32,108, 41, 59, 10, 9,102,108,111, 97,116, 32, 97,110,103, 32, 61, 32, 97, 99,111,115, 40,114,115,
+108,116, 41, 59, 10, 10, 9,105,102, 40, 97,110,103, 32, 60, 32,115,105,122,101, 41, 32,105,115, 32, 61, 32, 49, 46, 48, 59, 10,
+ 9,101,108,115,101, 32,105,102, 40, 97,110,103, 32, 62, 32, 40,115,105,122,101, 32, 43, 32,116,115,109,111,111,116,104, 41, 32,
+124,124, 32,116,115,109,111,111,116,104, 32, 61, 61, 32, 48, 46, 48, 41, 32,105,115, 32, 61, 32, 48, 46, 48, 59, 10, 9,101,108,
+115,101, 32,105,115, 32, 61, 32, 49, 46, 48, 32, 45, 32, 40, 40, 97,110,103, 32, 45, 32,115,105,122,101, 41, 47,116,115,109,111,
+111,116,104, 41, 59, 10,125, 10, 10,118,111,105,100, 32,115,104, 97,100,101, 95,100,105,102,102,117,115,101, 95,109,105,110,110,
+ 97,101,114,116, 40,102,108,111, 97,116, 32,110,108, 44, 32,118,101, 99, 51, 32,110, 44, 32,118,101, 99, 51, 32,118, 44, 32,102,
+108,111, 97,116, 32,100, 97,114,107,110,101,115,115, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,105,115, 41, 10,123, 10, 9,
+105,102, 40,110,108, 32, 60, 61, 32, 48, 46, 48, 41, 32,123, 10, 9, 9,105,115, 32, 61, 32, 48, 46, 48, 59, 10, 9,125, 10, 9,
+101,108,115,101, 32,123, 10, 9, 9,102,108,111, 97,116, 32,110,118, 32, 61, 32,109, 97,120, 40,100,111,116, 40,110, 44, 32,118,
+ 41, 44, 32, 48, 46, 48, 41, 59, 10, 10, 9, 9,105,102, 40,100, 97,114,107,110,101,115,115, 32, 60, 61, 32, 49, 46, 48, 41, 10,
+ 9, 9, 9,105,115, 32, 61, 32,110,108, 42,112,111,119, 40,109, 97,120, 40,110,118, 42,110,108, 44, 32, 48, 46, 49, 41, 44, 32,
+100, 97,114,107,110,101,115,115, 32, 45, 32, 49, 46, 48, 41, 59, 10, 9, 9,101,108,115,101, 10, 9, 9, 9,105,115, 32, 61, 32,
+110,108, 42,112,111,119, 40, 49, 46, 48, 48, 48, 49, 32, 45, 32,110,118, 44, 32,100, 97,114,107,110,101,115,115, 32, 45, 32, 49,
+ 46, 48, 41, 59, 10, 9,125, 10,125, 10, 10,102,108,111, 97,116, 32,102,114,101,115,110,101,108, 95,102, 97, 99, 40,118,101, 99,
+ 51, 32,118,105,101,119, 44, 32,118,101, 99, 51, 32,118,110, 44, 32,102,108,111, 97,116, 32,103,114, 97,100, 44, 32,102,108,111,
+ 97,116, 32,102, 97, 99, 41, 10,123, 10, 9,102,108,111, 97,116, 32,116, 49, 44, 32,116, 50, 59, 10, 9,102,108,111, 97,116, 32,
+102,102, 97, 99, 59, 10, 10, 9,105,102, 40,102, 97, 99, 61, 61, 48, 46, 48, 41, 32,123, 10, 9, 9,102,102, 97, 99, 32, 61, 32,
+ 49, 46, 48, 59, 10, 9,125, 10, 9,101,108,115,101, 32,123, 10, 9, 9,116, 49, 61, 32,100,111,116, 40,118,105,101,119, 44, 32,
+118,110, 41, 59, 10, 9, 9,105,102, 40,116, 49, 62, 48, 46, 48, 41, 32, 32,116, 50, 61, 32, 49, 46, 48, 43,116, 49, 59, 10, 9,
+ 9,101,108,115,101, 32,116, 50, 61, 32, 49, 46, 48, 45,116, 49, 59, 10, 10, 9, 9,116, 50, 61, 32,103,114, 97,100, 32, 43, 32,
+ 40, 49, 46, 48, 45,103,114, 97,100, 41, 42,112,111,119, 40,116, 50, 44, 32,102, 97, 99, 41, 59, 10, 10, 9, 9,105,102, 40,116,
+ 50, 60, 48, 46, 48, 41, 32,102,102, 97, 99, 32, 61, 32, 48, 46, 48, 59, 10, 9, 9,101,108,115,101, 32,105,102, 40,116, 50, 62,
+ 49, 46, 48, 41, 32,102,102, 97, 99, 32, 61, 32, 49, 46, 48, 59, 10, 9, 9,101,108,115,101, 32,102,102, 97, 99, 32, 61, 32,116,
+ 50, 59, 10, 9,125, 10, 10, 9,114,101,116,117,114,110, 32,102,102, 97, 99, 59, 10,125, 10, 10,118,111,105,100, 32,115,104, 97,
+100,101, 95,100,105,102,102,117,115,101, 95,102,114,101,115,110,101,108, 40,118,101, 99, 51, 32,118,110, 44, 32,118,101, 99, 51,
+ 32,108,118, 44, 32,118,101, 99, 51, 32,118,105,101,119, 44, 32,102,108,111, 97,116, 32,102, 97, 99, 95,105, 44, 32,102,108,111,
+ 97,116, 32,102, 97, 99, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,105,115, 41, 10,123, 10, 9,105,115, 32, 61, 32,102,114,
+101,115,110,101,108, 95,102, 97, 99, 40,108,118, 44, 32,118,110, 44, 32,102, 97, 99, 95,105, 44, 32,102, 97, 99, 41, 59, 10,125,
+ 10, 10,118,111,105,100, 32,115,104, 97,100,101, 95, 99,117, 98,105, 99, 40,102,108,111, 97,116, 32,105,115, 44, 32,111,117,116,
+ 32,102,108,111, 97,116, 32,111,117,116,105,115, 41, 10,123, 10, 9,105,102, 40,105,115, 62, 48, 46, 48, 32, 38, 38, 32,105,115,
+ 60, 49, 46, 48, 41, 10, 9, 9,111,117,116,105,115, 61, 32,115,109,111,111,116,104,115,116,101,112, 40, 48, 46, 48, 44, 32, 49,
+ 46, 48, 44, 32,105,115, 41, 59, 10, 9,101,108,115,101, 10, 9, 9,111,117,116,105,115, 61, 32,105,115, 59, 10,125, 10, 10,118,
+111,105,100, 32,115,104, 97,100,101, 95,118,105,115,105,102, 97, 99, 40,102,108,111, 97,116, 32,105, 44, 32,102,108,111, 97,116,
+ 32,118,105,115,105,102, 97, 99, 44, 32,102,108,111, 97,116, 32,114,101,102,108, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,
+111,117,116,105, 41, 10,123, 10, 9, 47, 42,105,102, 40,105, 32, 62, 32, 48, 46, 48, 41, 42, 47, 10, 9, 9,111,117,116,105, 32,
+ 61, 32,109, 97,120, 40,105, 42,118,105,115,105,102, 97, 99, 42,114,101,102,108, 44, 32, 48, 46, 48, 41, 59, 10, 9, 47, 42,101,
+108,115,101, 10, 9, 9,111,117,116,105, 32, 61, 32,105, 59, 42, 47, 10,125, 10, 10,118,111,105,100, 32,115,104, 97,100,101, 95,
+116, 97,110,103,101,110,116, 95,118, 95,115,112,101, 99, 40,118,101, 99, 51, 32,116, 97,110,103, 44, 32,111,117,116, 32,118,101,
+ 99, 51, 32,118,110, 41, 10,123, 10, 9,118,110, 32, 61, 32,116, 97,110,103, 59, 10,125, 10, 10,118,111,105,100, 32,115,104, 97,
+100,101, 95, 97,100,100, 95,116,111, 95,100,105,102,102,117,115,101, 40,102,108,111, 97,116, 32,105, 44, 32,118,101, 99, 51, 32,
+108, 97,109,112, 99,111,108, 44, 32,118,101, 99, 51, 32, 99,111,108, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116, 99,
+111,108, 41, 10,123, 10, 9,105,102, 40,105, 32, 62, 32, 48, 46, 48, 41, 10, 9, 9,111,117,116, 99,111,108, 32, 61, 32,105, 42,
+108, 97,109,112, 99,111,108, 42, 99,111,108, 59, 10, 9,101,108,115,101, 10, 9, 9,111,117,116, 99,111,108, 32, 61, 32,118,101,
+ 99, 51, 40, 48, 46, 48, 44, 32, 48, 46, 48, 44, 32, 48, 46, 48, 41, 59, 10,125, 10, 10,118,111,105,100, 32,115,104, 97,100,101,
+ 95,104,101,109,105, 95,115,112,101, 99, 40,118,101, 99, 51, 32,118,110, 44, 32,118,101, 99, 51, 32,108,118, 44, 32,118,101, 99,
+ 51, 32,118,105,101,119, 44, 32,102,108,111, 97,116, 32,115,112,101, 99, 44, 32,102,108,111, 97,116, 32,104, 97,114,100, 44, 32,
+102,108,111, 97,116, 32,118,105,115,105,102, 97, 99, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,116, 41, 10,123, 10, 9,108,
+118, 32, 43, 61, 32,118,105,101,119, 59, 10, 9,108,118, 32, 61, 32,110,111,114,109, 97,108,105,122,101, 40,108,118, 41, 59, 10,
+ 10, 9,116, 32, 61, 32,100,111,116, 40,118,110, 44, 32,108,118, 41, 59, 10, 9,116, 32, 61, 32, 48, 46, 53, 42,116, 32, 43, 32,
+ 48, 46, 53, 59, 10, 10, 9,116, 32, 61, 32,118,105,115,105,102, 97, 99, 42,115,112,101, 99, 42,112,111,119, 40,116, 44, 32,104,
+ 97,114,100, 41, 59, 10,125, 10, 10,118,111,105,100, 32,115,104, 97,100,101, 95,112,104,111,110,103, 95,115,112,101, 99, 40,118,
+101, 99, 51, 32,110, 44, 32,118,101, 99, 51, 32,108, 44, 32,118,101, 99, 51, 32,118, 44, 32,102,108,111, 97,116, 32,104, 97,114,
+100, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,115,112,101, 99,102, 97, 99, 41, 10,123, 10, 9,118,101, 99, 51, 32,104, 32,
+ 61, 32,110,111,114,109, 97,108,105,122,101, 40,108, 32, 43, 32,118, 41, 59, 10, 9,102,108,111, 97,116, 32,114,115,108,116, 32,
+ 61, 32,109, 97,120, 40,100,111,116, 40,104, 44, 32,110, 41, 44, 32, 48, 46, 48, 41, 59, 10, 10, 9,115,112,101, 99,102, 97, 99,
+ 32, 61, 32,112,111,119, 40,114,115,108,116, 44, 32,104, 97,114,100, 41, 59, 10,125, 10, 10,118,111,105,100, 32,115,104, 97,100,
+101, 95, 99,111,111,107,116,111,114,114, 95,115,112,101, 99, 40,118,101, 99, 51, 32,110, 44, 32,118,101, 99, 51, 32,108, 44, 32,
+118,101, 99, 51, 32,118, 44, 32,102,108,111, 97,116, 32,104, 97,114,100, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,115,112,
+101, 99,102, 97, 99, 41, 10,123, 10, 9,118,101, 99, 51, 32,104, 32, 61, 32,110,111,114,109, 97,108,105,122,101, 40,118, 32, 43,
+ 32,108, 41, 59, 10, 9,102,108,111, 97,116, 32,110,104, 32, 61, 32,100,111,116, 40,110, 44, 32,104, 41, 59, 10, 10, 9,105,102,
+ 40,110,104, 32, 60, 32, 48, 46, 48, 41, 32,123, 10, 9, 9,115,112,101, 99,102, 97, 99, 32, 61, 32, 48, 46, 48, 59, 10, 9,125,
+ 10, 9,101,108,115,101, 32,123, 10, 9, 9,102,108,111, 97,116, 32,110,118, 32, 61, 32,109, 97,120, 40,100,111,116, 40,110, 44,
+ 32,118, 41, 44, 32, 48, 46, 48, 41, 59, 10, 9, 9,102,108,111, 97,116, 32,105, 32, 61, 32,112,111,119, 40,110,104, 44, 32,104,
+ 97,114,100, 41, 59, 10, 10, 9, 9,105, 32, 61, 32,105, 47, 40, 48, 46, 49, 43,110,118, 41, 59, 10, 9, 9,115,112,101, 99,102,
+ 97, 99, 32, 61, 32,105, 59, 10, 9,125, 10,125, 10, 10,118,111,105,100, 32,115,104, 97,100,101, 95, 98,108,105,110,110, 95,115,
+112,101, 99, 40,118,101, 99, 51, 32,110, 44, 32,118,101, 99, 51, 32,108, 44, 32,118,101, 99, 51, 32,118, 44, 32,102,108,111, 97,
+116, 32,114,101,102,114, 97, 99, 44, 32,102,108,111, 97,116, 32,115,112,101, 99, 95,112,111,119,101,114, 44, 32,111,117,116, 32,
+102,108,111, 97,116, 32,115,112,101, 99,102, 97, 99, 41, 10,123, 10, 9,105,102, 40,114,101,102,114, 97, 99, 32, 60, 32, 49, 46,
+ 48, 41, 32,123, 10, 9, 9,115,112,101, 99,102, 97, 99, 32, 61, 32, 48, 46, 48, 59, 10, 9,125, 10, 9,101,108,115,101, 32,105,
+102, 40,115,112,101, 99, 95,112,111,119,101,114, 32, 61, 61, 32, 48, 46, 48, 41, 32,123, 10, 9, 9,115,112,101, 99,102, 97, 99,
+ 32, 61, 32, 48, 46, 48, 59, 10, 9,125, 10, 9,101,108,115,101, 32,123, 10, 9, 9,105,102, 40,115,112,101, 99, 95,112,111,119,
+101,114, 60, 49, 48, 48, 46, 48, 41, 10, 9, 9, 9,115,112,101, 99, 95,112,111,119,101,114, 61, 32,115,113,114,116, 40, 49, 46,
+ 48, 47,115,112,101, 99, 95,112,111,119,101,114, 41, 59, 10, 9, 9,101,108,115,101, 10, 9, 9, 9,115,112,101, 99, 95,112,111,
+119,101,114, 61, 32, 49, 48, 46, 48, 47,115,112,101, 99, 95,112,111,119,101,114, 59, 10, 10, 9, 9,118,101, 99, 51, 32,104, 32,
+ 61, 32,110,111,114,109, 97,108,105,122,101, 40,118, 32, 43, 32,108, 41, 59, 10, 9, 9,102,108,111, 97,116, 32,110,104, 32, 61,
+ 32,100,111,116, 40,110, 44, 32,104, 41, 59, 10, 9, 9,105,102, 40,110,104, 32, 60, 32, 48, 46, 48, 41, 32,123, 10, 9, 9, 9,
+115,112,101, 99,102, 97, 99, 32, 61, 32, 48, 46, 48, 59, 10, 9, 9,125, 10, 9, 9,101,108,115,101, 32,123, 10, 9, 9, 9,102,
+108,111, 97,116, 32,110,118, 32, 61, 32,109, 97,120, 40,100,111,116, 40,110, 44, 32,118, 41, 44, 32, 48, 46, 48, 49, 41, 59, 10,
+ 9, 9, 9,102,108,111, 97,116, 32,110,108, 32, 61, 32,100,111,116, 40,110, 44, 32,108, 41, 59, 10, 9, 9, 9,105,102, 40,110,
+108, 32, 60, 61, 32, 48, 46, 48, 49, 41, 32,123, 10, 9, 9, 9, 9,115,112,101, 99,102, 97, 99, 32, 61, 32, 48, 46, 48, 59, 10,
+ 9, 9, 9,125, 10, 9, 9, 9,101,108,115,101, 32,123, 10, 9, 9, 9, 9,102,108,111, 97,116, 32,118,104, 32, 61, 32,109, 97,
+120, 40,100,111,116, 40,118, 44, 32,104, 41, 44, 32, 48, 46, 48, 49, 41, 59, 10, 10, 9, 9, 9, 9,102,108,111, 97,116, 32, 97,
+ 32, 61, 32, 49, 46, 48, 59, 10, 9, 9, 9, 9,102,108,111, 97,116, 32, 98, 32, 61, 32, 40, 50, 46, 48, 42,110,104, 42,110,118,
+ 41, 47,118,104, 59, 10, 9, 9, 9, 9,102,108,111, 97,116, 32, 99, 32, 61, 32, 40, 50, 46, 48, 42,110,104, 42,110,108, 41, 47,
+118,104, 59, 10, 10, 9, 9, 9, 9,102,108,111, 97,116, 32,103, 32, 61, 32, 48, 46, 48, 59, 10, 10, 9, 9, 9, 9,105,102, 40,
+ 97, 32, 60, 32, 98, 32, 38, 38, 32, 97, 32, 60, 32, 99, 41, 32,103, 32, 61, 32, 97, 59, 10, 9, 9, 9, 9,101,108,115,101, 32,
+105,102, 40, 98, 32, 60, 32, 97, 32, 38, 38, 32, 98, 32, 60, 32, 99, 41, 32,103, 32, 61, 32, 98, 59, 10, 9, 9, 9, 9,101,108,
+115,101, 32,105,102, 40, 99, 32, 60, 32, 97, 32, 38, 38, 32, 99, 32, 60, 32, 98, 41, 32,103, 32, 61, 32, 99, 59, 10, 10, 9, 9,
+ 9, 9,102,108,111, 97,116, 32,112, 32, 61, 32,115,113,114,116, 40, 40, 40,114,101,102,114, 97, 99, 32, 42, 32,114,101,102,114,
+ 97, 99, 41, 43, 40,118,104, 42,118,104, 41, 45, 49, 46, 48, 41, 41, 59, 10, 9, 9, 9, 9,102,108,111, 97,116, 32,102, 32, 61,
+ 32, 40, 40, 40,112, 45,118,104, 41, 42, 40,112, 45,118,104, 41, 41, 47, 40, 40,112, 43,118,104, 41, 42, 40,112, 43,118,104, 41,
+ 41, 41, 42, 40, 49, 46, 48, 43, 40, 40, 40, 40,118,104, 42, 40,112, 43,118,104, 41, 41, 45, 49, 46, 48, 41, 42, 40, 40,118,104,
+ 42, 40,112, 43,118,104, 41, 41, 45, 49, 46, 48, 41, 41, 47, 40, 40, 40,118,104, 42, 40,112, 45,118,104, 41, 41, 43, 49, 46, 48,
+ 41, 42, 40, 40,118,104, 42, 40,112, 45,118,104, 41, 41, 43, 49, 46, 48, 41, 41, 41, 41, 59, 10, 9, 9, 9, 9,102,108,111, 97,
+116, 32, 97,110,103, 32, 61, 32, 97, 99,111,115, 40,110,104, 41, 59, 10, 10, 9, 9, 9, 9,115,112,101, 99,102, 97, 99, 32, 61,
+ 32,109, 97,120, 40,102, 42,103, 42,101,120,112, 95, 98,108,101,110,100,101,114, 40, 40, 45, 40, 97,110,103, 42, 97,110,103, 41,
+ 47, 40, 50, 46, 48, 42,115,112,101, 99, 95,112,111,119,101,114, 42,115,112,101, 99, 95,112,111,119,101,114, 41, 41, 41, 44, 32,
+ 48, 46, 48, 41, 59, 10, 9, 9, 9,125, 10, 9, 9,125, 10, 9,125, 10,125, 10, 10,118,111,105,100, 32,115,104, 97,100,101, 95,
+119, 97,114,100,105,115,111, 95,115,112,101, 99, 40,118,101, 99, 51, 32,110, 44, 32,118,101, 99, 51, 32,108, 44, 32,118,101, 99,
+ 51, 32,118, 44, 32,102,108,111, 97,116, 32,114,109,115, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,115,112,101, 99,102, 97,
+ 99, 41, 10,123, 10, 9,118,101, 99, 51, 32,104, 32, 61, 32,110,111,114,109, 97,108,105,122,101, 40,108, 32, 43, 32,118, 41, 59,
+ 10, 9,102,108,111, 97,116, 32,110,104, 32, 61, 32,109, 97,120, 40,100,111,116, 40,110, 44, 32,104, 41, 44, 32, 48, 46, 48, 48,
+ 49, 41, 59, 10, 9,102,108,111, 97,116, 32,110,118, 32, 61, 32,109, 97,120, 40,100,111,116, 40,110, 44, 32,118, 41, 44, 32, 48,
+ 46, 48, 48, 49, 41, 59, 10, 9,102,108,111, 97,116, 32,110,108, 32, 61, 32,109, 97,120, 40,100,111,116, 40,110, 44, 32,108, 41,
+ 44, 32, 48, 46, 48, 48, 49, 41, 59, 10, 9,102,108,111, 97,116, 32, 97,110,103,108,101, 32, 61, 32,116, 97,110, 40, 97, 99,111,
+115, 40,110,104, 41, 41, 59, 10, 9,102,108,111, 97,116, 32, 97,108,112,104, 97, 32, 61, 32,109, 97,120, 40,114,109,115, 44, 32,
+ 48, 46, 48, 48, 49, 41, 59, 10, 10, 9,115,112,101, 99,102, 97, 99, 61, 32,110,108, 32, 42, 32, 40, 49, 46, 48, 47, 40, 52, 46,
+ 48, 42, 77, 95, 80, 73, 42, 97,108,112,104, 97, 42, 97,108,112,104, 97, 41, 41, 42, 40,101,120,112, 95, 98,108,101,110,100,101,
+114, 40, 45, 40, 97,110,103,108,101, 42, 97,110,103,108,101, 41, 47, 40, 97,108,112,104, 97, 42, 97,108,112,104, 97, 41, 41, 47,
+ 40,115,113,114,116, 40,110,118, 42,110,108, 41, 41, 41, 59, 10,125, 10, 10,118,111,105,100, 32,115,104, 97,100,101, 95,116,111,
+111,110, 95,115,112,101, 99, 40,118,101, 99, 51, 32,110, 44, 32,118,101, 99, 51, 32,108, 44, 32,118,101, 99, 51, 32,118, 44, 32,
+102,108,111, 97,116, 32,115,105,122,101, 44, 32,102,108,111, 97,116, 32,116,115,109,111,111,116,104, 44, 32,111,117,116, 32,102,
+108,111, 97,116, 32,115,112,101, 99,102, 97, 99, 41, 10,123, 10, 9,118,101, 99, 51, 32,104, 32, 61, 32,110,111,114,109, 97,108,
+105,122,101, 40,108, 32, 43, 32,118, 41, 59, 10, 9,102,108,111, 97,116, 32,114,115,108,116, 32, 61, 32,100,111,116, 40,104, 44,
+ 32,110, 41, 59, 10, 9,102,108,111, 97,116, 32, 97,110,103, 32, 61, 32, 97, 99,111,115, 40,114,115,108,116, 41, 59, 10, 10, 9,
+105,102, 40, 97,110,103, 32, 60, 32,115,105,122,101, 41, 32,114,115,108,116, 32, 61, 32, 49, 46, 48, 59, 10, 9,101,108,115,101,
+ 32,105,102, 40, 97,110,103, 32, 62, 61, 32, 40,115,105,122,101, 32, 43, 32,116,115,109,111,111,116,104, 41, 32,124,124, 32,116,
+115,109,111,111,116,104, 32, 61, 61, 32, 48, 46, 48, 41, 32,114,115,108,116, 32, 61, 32, 48, 46, 48, 59, 10, 9,101,108,115,101,
+ 32,114,115,108,116, 32, 61, 32, 49, 46, 48, 32, 45, 32, 40, 40, 97,110,103, 32, 45, 32,115,105,122,101, 41, 47,116,115,109,111,
+111,116,104, 41, 59, 10, 10, 9,115,112,101, 99,102, 97, 99, 32, 61, 32,114,115,108,116, 59, 10,125, 10, 10,118,111,105,100, 32,
+115,104, 97,100,101, 95,115,112,101, 99, 95, 97,114,101, 97, 95,105,110,112, 40,102,108,111, 97,116, 32,115,112,101, 99,102, 97,
+ 99, 44, 32,102,108,111, 97,116, 32,105,110,112, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,115,112,101, 99,102,
+ 97, 99, 41, 10,123, 10, 9,111,117,116,115,112,101, 99,102, 97, 99, 32, 61, 32,115,112,101, 99,102, 97, 99, 42,105,110,112, 59,
+ 10,125, 10, 10,118,111,105,100, 32,115,104, 97,100,101, 95,115,112,101, 99, 95,116, 40,102,108,111, 97,116, 32,115,104, 97,100,
+102, 97, 99, 44, 32,102,108,111, 97,116, 32,115,112,101, 99, 44, 32,102,108,111, 97,116, 32,118,105,115,105,102, 97, 99, 44, 32,
+102,108,111, 97,116, 32,115,112,101, 99,102, 97, 99, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,116, 41, 10,123, 10, 9,116,
+ 32, 61, 32,115,104, 97,100,102, 97, 99, 42,115,112,101, 99, 42,118,105,115,105,102, 97, 99, 42,115,112,101, 99,102, 97, 99, 59,
+ 10,125, 10, 10,118,111,105,100, 32,115,104, 97,100,101, 95, 97,100,100, 95,115,112,101, 99, 40,102,108,111, 97,116, 32,116, 44,
+ 32,118,101, 99, 51, 32,108, 97,109,112, 99,111,108, 44, 32,118,101, 99, 51, 32,115,112,101, 99, 99,111,108, 44, 32,111,117,116,
+ 32,118,101, 99, 51, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,111,117,116, 99,111,108, 32, 61, 32,116, 42,108, 97,109,112,
+ 99,111,108, 42,115,112,101, 99, 99,111,108, 59, 10,125, 10, 10,118,111,105,100, 32,115,104, 97,100,101, 95, 97,100,100, 40,118,
+101, 99, 52, 32, 99,111,108, 49, 44, 32,118,101, 99, 52, 32, 99,111,108, 50, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,
+116, 99,111,108, 41, 10,123, 10, 9,111,117,116, 99,111,108, 32, 61, 32, 99,111,108, 49, 32, 43, 32, 99,111,108, 50, 59, 10,125,
+ 10, 10,118,111,105,100, 32,115,104, 97,100,101, 95,109, 97,100,100, 40,118,101, 99, 52, 32, 99,111,108, 44, 32,118,101, 99, 52,
+ 32, 99,111,108, 49, 44, 32,118,101, 99, 52, 32, 99,111,108, 50, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,
+108, 41, 10,123, 10, 9,111,117,116, 99,111,108, 32, 61, 32, 99,111,108, 32, 43, 32, 99,111,108, 49, 42, 99,111,108, 50, 59, 10,
+125, 10, 10,118,111,105,100, 32,115,104, 97,100,101, 95,109, 97,100,100,102, 40,118,101, 99, 52, 32, 99,111,108, 44, 32,102,108,
+111, 97,116, 32,102, 44, 32,118,101, 99, 52, 32, 99,111,108, 49, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,
+108, 41, 10,123, 10, 9,111,117,116, 99,111,108, 32, 61, 32, 99,111,108, 32, 43, 32,102, 42, 99,111,108, 49, 59, 10,125, 10, 10,
+118,111,105,100, 32,115,104, 97,100,101, 95,109,117,108, 40,118,101, 99, 52, 32, 99,111,108, 49, 44, 32,118,101, 99, 52, 32, 99,
+111,108, 50, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,111,117,116, 99,111,108, 32,
+ 61, 32, 99,111,108, 49, 42, 99,111,108, 50, 59, 10,125, 10, 10,118,111,105,100, 32,115,104, 97,100,101, 95,109,117,108, 95,118,
+ 97,108,117,101, 40,102,108,111, 97,116, 32,102, 97, 99, 44, 32,118,101, 99, 52, 32, 99,111,108, 44, 32,111,117,116, 32,118,101,
+ 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,111,117,116, 99,111,108, 32, 61, 32, 99,111,108, 42,102, 97, 99, 59, 10,
+125, 10, 10,118,111,105,100, 32,115,104, 97,100,101, 95,111, 98, 99,111,108,111,114, 40,118,101, 99, 52, 32, 99,111,108, 44, 32,
+118,101, 99, 52, 32,111, 98, 99,111,108, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,
+111,117,116, 99,111,108, 32, 61, 32,118,101, 99, 52, 40, 99,111,108, 46,114,103, 98, 42,111, 98, 99,111,108, 46,114,103, 98, 44,
+ 32, 99,111,108, 46, 97, 41, 59, 10,125, 10, 10,118,111,105,100, 32,114, 97,109,112, 95,114,103, 98,116,111, 98,119, 40,118,101,
+ 99, 51, 32, 99,111,108,111,114, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111,
+117,116,118, 97,108, 32, 61, 32, 99,111,108,111,114, 46,114, 42, 48, 46, 51, 32, 43, 32, 99,111,108,111,114, 46,103, 42, 48, 46,
+ 53, 56, 32, 43, 32, 99,111,108,111,114, 46, 98, 42, 48, 46, 49, 50, 59, 10,125, 10, 10,118,111,105,100, 32,115,104, 97,100,101,
+ 95,111,110,108,121, 95,115,104, 97,100,111,119, 40,102,108,111, 97,116, 32,105, 44, 32,102,108,111, 97,116, 32,115,104, 97,100,
+102, 97, 99, 44, 32,102,108,111, 97,116, 32,101,110,101,114,103,121, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,
+115,104, 97,100,102, 97, 99, 41, 10,123, 10, 9,111,117,116,115,104, 97,100,102, 97, 99, 32, 61, 32,105, 42,101,110,101,114,103,
+121, 42, 40, 49, 46, 48, 32, 45, 32,115,104, 97,100,102, 97, 99, 41, 59, 10,125, 10, 10,118,111,105,100, 32,115,104, 97,100,101,
+ 95,111,110,108,121, 95,115,104, 97,100,111,119, 95,100,105,102,102,117,115,101, 40,102,108,111, 97,116, 32,115,104, 97,100,102,
+ 97, 99, 44, 32,118,101, 99, 51, 32,114,103, 98, 44, 32,118,101, 99, 52, 32,100,105,102,102, 44, 32,111,117,116, 32,118,101, 99,
+ 52, 32,111,117,116,100,105,102,102, 41, 10,123, 10, 9,111,117,116,100,105,102,102, 32, 61, 32,100,105,102,102, 32, 45, 32,118,
+101, 99, 52, 40,114,103, 98, 42,115,104, 97,100,102, 97, 99, 44, 32, 48, 46, 48, 41, 59, 10,125, 10, 10,118,111,105,100, 32,115,
+104, 97,100,101, 95,111,110,108,121, 95,115,104, 97,100,111,119, 95,115,112,101, 99,117,108, 97,114, 40,102,108,111, 97,116, 32,
+115,104, 97,100,102, 97, 99, 44, 32,118,101, 99, 51, 32,115,112,101, 99,114,103, 98, 44, 32,118,101, 99, 52, 32,115,112,101, 99,
+ 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116,115,112,101, 99, 41, 10,123, 10, 9,111,117,116,115,112,101, 99, 32, 61,
+ 32,115,112,101, 99, 32, 45, 32,118,101, 99, 52, 40,115,112,101, 99,114,103, 98, 42,115,104, 97,100,102, 97, 99, 44, 32, 48, 46,
+ 48, 41, 59, 10,125, 10, 10,118,111,105,100, 32,116,101,115,116, 95,115,104, 97,100,111,119, 98,117,102, 40,118,101, 99, 51, 32,
+114, 99,111, 44, 32,115, 97,109,112,108,101,114, 50, 68, 83,104, 97,100,111,119, 32,115,104, 97,100,111,119,109, 97,112, 44, 32,
+109, 97,116, 52, 32,115,104, 97,100,111,119,112,101,114,115,109, 97,116, 44, 32,102,108,111, 97,116, 32,115,104, 97,100,111,119,
+ 98,105, 97,115, 44, 32,102,108,111, 97,116, 32,105,110,112, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,114,101,115,117,108,
+116, 41, 10,123, 10, 9,105,102, 40,105,110,112, 32, 60, 61, 32, 48, 46, 48, 41, 32,123, 10, 9, 9,114,101,115,117,108,116, 32,
+ 61, 32, 48, 46, 48, 59, 10, 9,125, 10, 9,101,108,115,101, 32,123, 10, 9, 9,118,101, 99, 52, 32, 99,111, 32, 61, 32,115,104,
+ 97,100,111,119,112,101,114,115,109, 97,116, 42,118,101, 99, 52, 40,114, 99,111, 44, 32, 49, 46, 48, 41, 59, 10, 10, 9, 9, 47,
+ 47,102,108,111, 97,116, 32, 98,105, 97,115, 32, 61, 32, 40, 49, 46, 53, 32, 45, 32,105,110,112, 42,105,110,112, 41, 42,115,104,
+ 97,100,111,119, 98,105, 97,115, 59, 10, 9, 9, 99,111, 46,122, 32, 45, 61, 32,115,104, 97,100,111,119, 98,105, 97,115, 42, 99,
+111, 46,119, 59, 10, 10, 9, 9,114,101,115,117,108,116, 32, 61, 32,115,104, 97,100,111,119, 50, 68, 80,114,111,106, 40,115,104,
+ 97,100,111,119,109, 97,112, 44, 32, 99,111, 41, 46,120, 59, 10, 9,125, 10,125, 10, 10,118,111,105,100, 32,115,104, 97,100,101,
+ 95,101,120,112,111,115,117,114,101, 95, 99,111,114,114,101, 99,116, 40,118,101, 99, 51, 32, 99,111,108, 44, 32,102,108,111, 97,
+116, 32,108,105,110,102, 97, 99, 44, 32,102,108,111, 97,116, 32,108,111,103,102, 97, 99, 44, 32,111,117,116, 32,118,101, 99, 51,
+ 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,111,117,116, 99,111,108, 32, 61, 32,108,105,110,102, 97, 99, 42, 40, 49, 46, 48,
+ 32, 45, 32,101,120,112, 40, 99,111,108, 42,108,111,103,102, 97, 99, 41, 41, 59, 10,125, 10, 10,118,111,105,100, 32,115,104, 97,
+100,101, 95,109,105,115,116, 95,102, 97, 99,116,111,114, 40,118,101, 99, 51, 32, 99,111, 44, 32,102,108,111, 97,116, 32,109,105,
+115,116,115,116, 97, 44, 32,102,108,111, 97,116, 32,109,105,115,116,100,105,115,116, 44, 32,102,108,111, 97,116, 32,109,105,115,
+116,116,121,112,101, 44, 32,102,108,111, 97,116, 32,109,105,115,105, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,
+102, 97, 99, 41, 10,123, 10, 9,102,108,111, 97,116, 32,102, 97, 99, 44, 32,122, 99,111,114, 59, 10, 10, 9,122, 99,111,114, 32,
+ 61, 32, 40,103,108, 95, 80,114,111,106,101, 99,116,105,111,110, 77, 97,116,114,105,120, 91, 51, 93, 91, 51, 93, 32, 61, 61, 32,
+ 48, 46, 48, 41, 63, 32,108,101,110,103,116,104, 40, 99,111, 41, 58, 32, 45, 99,111, 91, 50, 93, 59, 10, 9, 10, 9,102, 97, 99,
+ 32, 61, 32, 99,108, 97,109,112, 40, 40,122, 99,111,114, 45,109,105,115,116,115,116, 97, 41, 47,109,105,115,116,100,105,115,116,
+ 44, 32, 48, 46, 48, 44, 32, 49, 46, 48, 41, 59, 10, 9,105,102, 40,109,105,115,116,116,121,112,101, 32, 61, 61, 32, 48, 46, 48,
+ 41, 32,102, 97, 99, 32, 42, 61, 32,102, 97, 99, 59, 10, 9,101,108,115,101, 32,105,102, 40,109,105,115,116,116,121,112,101, 32,
+ 61, 61, 32, 49, 46, 48, 41, 59, 10, 9,101,108,115,101, 32,102, 97, 99, 32, 61, 32,115,113,114,116, 40,102, 97, 99, 41, 59, 10,
+ 10, 9,111,117,116,102, 97, 99, 32, 61, 32, 49, 46, 48, 32, 45, 32, 40, 49, 46, 48, 45,102, 97, 99, 41, 42, 40, 49, 46, 48, 45,
+109,105,115,105, 41, 59, 10,125, 10, 10,118,111,105,100, 32,115,104, 97,100,101, 95,119,111,114,108,100, 95,109,105,120, 40,118,
+101, 99, 51, 32,104,111,114, 44, 32,118,101, 99, 52, 32, 99,111,108, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,
+111,108, 41, 10,123, 10, 9,102,108,111, 97,116, 32,102, 97, 99, 32, 61, 32, 99,108, 97,109,112, 40, 99,111,108, 46, 97, 44, 32,
+ 48, 46, 48, 44, 32, 49, 46, 48, 41, 59, 10, 9,111,117,116, 99,111,108, 32, 61, 32,118,101, 99, 52, 40,109,105,120, 40,104,111,
+114, 44, 32, 99,111,108, 46,114,103, 98, 44, 32,102, 97, 99, 41, 44, 32, 99,111,108, 46, 97, 41, 59, 10,125, 10, 10,118,111,105,
+100, 32,115,104, 97,100,101, 95, 97,108,112,104, 97, 95,111,112, 97,113,117,101, 40,118,101, 99, 52, 32, 99,111,108, 44, 32,111,
+117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,111,117,116, 99,111,108, 32, 61, 32,118,101, 99, 52,
+ 40, 99,111,108, 46,114,103, 98, 44, 32, 49, 46, 48, 41, 59, 10,125, 10, 10,118,111,105,100, 32,115,104, 97,100,101, 95, 97,108,
+112,104, 97, 95,111, 98, 99,111,108,111,114, 40,118,101, 99, 52, 32, 99,111,108, 44, 32,118,101, 99, 52, 32,111, 98, 99,111,108,
+ 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,111,117,116, 99,111,108, 32, 61, 32,118,
+101, 99, 52, 40, 99,111,108, 46,114,103, 98, 44, 32, 99,111,108, 46, 97, 42,111, 98, 99,111,108, 46, 97, 41, 59, 10,125, 10, 10,
+ 0};
+
diff --git a/source/blender/gpu/intern/gpu_shader_vertex.glsl b/source/blender/gpu/intern/gpu_shader_vertex.glsl
new file mode 100644
index 00000000000..ba9ef7dead6
--- /dev/null
+++ b/source/blender/gpu/intern/gpu_shader_vertex.glsl
@@ -0,0 +1,12 @@
+
+varying vec3 varposition;
+varying vec3 varnormal;
+
+void main()
+{
+ vec4 co = gl_ModelViewMatrix * gl_Vertex;
+
+ varposition = co.xyz;
+ varnormal = gl_NormalMatrix * gl_Normal;
+ gl_Position = gl_ProjectionMatrix * co;
+
diff --git a/source/blender/gpu/intern/gpu_shader_vertex.glsl.c b/source/blender/gpu/intern/gpu_shader_vertex.glsl.c
new file mode 100644
index 00000000000..edf93d838d5
--- /dev/null
+++ b/source/blender/gpu/intern/gpu_shader_vertex.glsl.c
@@ -0,0 +1,13 @@
+/* DataToC output of file <gpu_shader_vertex_glsl> */
+
+int datatoc_gpu_shader_vertex_glsl_size= 217;
+char datatoc_gpu_shader_vertex_glsl[]= {
+ 10,118, 97,114,121,105,110,103, 32,118,101, 99, 51, 32,118, 97,114,112,111,115,105,116,105,111,110,
+ 59, 10,118, 97,114,121,105,110,103, 32,118,101, 99, 51, 32,118, 97,114,110,111,114,109, 97,108, 59, 10, 10,118,111,105,100, 32,
+109, 97,105,110, 40, 41, 10,123, 10, 9,118,101, 99, 52, 32, 99,111, 32, 61, 32,103,108, 95, 77,111,100,101,108, 86,105,101,119,
+ 77, 97,116,114,105,120, 32, 42, 32,103,108, 95, 86,101,114,116,101,120, 59, 10, 10, 9,118, 97,114,112,111,115,105,116,105,111,
+110, 32, 61, 32, 99,111, 46,120,121,122, 59, 10, 9,118, 97,114,110,111,114,109, 97,108, 32, 61, 32,103,108, 95, 78,111,114,109,
+ 97,108, 77, 97,116,114,105,120, 32, 42, 32,103,108, 95, 78,111,114,109, 97,108, 59, 10, 9,103,108, 95, 80,111,115,105,116,105,
+111,110, 32, 61, 32,103,108, 95, 80,114,111,106,101, 99,116,105,111,110, 77, 97,116,114,105,120, 32, 42, 32, 99,111, 59, 10, 10,
+ 0};
+
diff --git a/source/blender/imbuf/intern/bmp.c b/source/blender/imbuf/intern/bmp.c
index 2aa276a5f53..141b8a985cf 100644
--- a/source/blender/imbuf/intern/bmp.c
+++ b/source/blender/imbuf/intern/bmp.c
@@ -164,9 +164,9 @@ struct ImBuf *imb_bmp_decode(unsigned char *mem, int size, int flags)
}
} else if (depth == 32) {
for (i = x * y; i > 0; i--) {
- rect[0] = bmp[0];
+ rect[0] = bmp[2];
rect[1] = bmp[1];
- rect[2] = bmp[2];
+ rect[2] = bmp[0];
rect[3] = bmp[3];
rect += 4; bmp += 4;
}
diff --git a/source/blender/imbuf/intern/cineon/cineonlib.c b/source/blender/imbuf/intern/cineon/cineonlib.c
index 3b45a9de822..ecee3c7d6c0 100644
--- a/source/blender/imbuf/intern/cineon/cineonlib.c
+++ b/source/blender/imbuf/intern/cineon/cineonlib.c
@@ -67,12 +67,12 @@ fillCineonFileInfo(CineonFile* cineon, CineonFileInformation* fileInfo, const ch
static void
dumpCineonFileInfo(CineonFileInformation* fileInfo) {
d_printf("\n--File Information--\n");
- d_printf("Magic: %8.8lX\n", (unsigned long)ntohl(fileInfo->magic_num));
- d_printf("Image Offset %ld\n", (long)ntohl(fileInfo->image_offset));
- d_printf("Generic Header size %ld\n", (long)ntohl(fileInfo->gen_hdr_size));
- d_printf("Industry Header size %ld\n", (long)ntohl(fileInfo->ind_hdr_size));
- d_printf("User Data size %ld\n", (long)ntohl(fileInfo->user_data_size));
- d_printf("File size %ld\n", (long)ntohl(fileInfo->file_size));
+ d_printf("Magic: %8.8lX\n", (uintptr_t)ntohl(fileInfo->magic_num));
+ d_printf("Image Offset %ld\n", (intptr_t)ntohl(fileInfo->image_offset));
+ d_printf("Generic Header size %ld\n", (intptr_t)ntohl(fileInfo->gen_hdr_size));
+ d_printf("Industry Header size %ld\n", (intptr_t)ntohl(fileInfo->ind_hdr_size));
+ d_printf("User Data size %ld\n", (intptr_t)ntohl(fileInfo->user_data_size));
+ d_printf("File size %ld\n", (intptr_t)ntohl(fileInfo->file_size));
d_printf("Version \"%s\"\n", fileInfo->vers);
d_printf("File name \"%s\"\n", fileInfo->file_name);
d_printf("Creation date \"%s\"\n", fileInfo->create_date);
@@ -112,11 +112,11 @@ dumpCineonChannelInfo(CineonChannelInformation* chan) {
default: d_printf(" (unknown)\n"); break;
}
d_printf(" Bits per pixel %d\n", chan->bits_per_pixel);
- d_printf(" Pixels per line %ld\n", (long)ntohl(chan->pixels_per_line));
- d_printf(" Lines per image %ld\n", (long)ntohl(chan->lines_per_image));
- d_printf(" Ref low data %ld\n", (long)ntohl(chan->ref_low_data));
+ d_printf(" Pixels per line %ld\n", (intptr_t)ntohl(chan->pixels_per_line));
+ d_printf(" Lines per image %ld\n", (intptr_t)ntohl(chan->lines_per_image));
+ d_printf(" Ref low data %ld\n", (intptr_t)ntohl(chan->ref_low_data));
d_printf(" Ref low quantity %f\n", ntohf(chan->ref_low_quantity));
- d_printf(" Ref high data %ld\n", (long)ntohl(chan->ref_high_data));
+ d_printf(" Ref high data %ld\n", (intptr_t)ntohl(chan->ref_high_data));
d_printf(" Ref high quantity %f\n", ntohf(chan->ref_high_quantity));
}
@@ -231,8 +231,8 @@ dumpCineonFormatInfo(CineonFormatInformation* formatInfo) {
} else {
d_printf(" positive\n");
}
- d_printf("End of line padding %ld\n", (long)ntohl(formatInfo->line_padding));
- d_printf("End of channel padding %ld\n", (long)ntohl(formatInfo->channel_padding));
+ d_printf("End of line padding %ld\n", (intptr_t)ntohl(formatInfo->line_padding));
+ d_printf("End of channel padding %ld\n", (intptr_t)ntohl(formatInfo->channel_padding));
}
static void
@@ -256,8 +256,8 @@ fillCineonOriginationInfo(CineonFile* cineon,
static void
dumpCineonOriginationInfo(CineonOriginationInformation* originInfo) {
d_printf("\n--Origination Information--\n");
- d_printf("X offset %ld\n", (long)ntohl(originInfo->x_offset));
- d_printf("Y offset %ld\n", (long)ntohl(originInfo->y_offset));
+ d_printf("X offset %ld\n", (intptr_t)ntohl(originInfo->x_offset));
+ d_printf("Y offset %ld\n", (intptr_t)ntohl(originInfo->y_offset));
d_printf("File name \"%s\"\n", originInfo->file_name);
d_printf("Creation date \"%s\"\n", originInfo->create_date);
d_printf("Creation time \"%s\"\n", originInfo->create_time);
@@ -529,7 +529,7 @@ cineonOpen(const char* filename) {
/* let's assume cineon files are always network order */
if (header.fileInfo.magic_num != ntohl(CINEON_FILE_MAGIC)) {
if (verbose) d_printf("Bad magic number %8.8lX in \"%s\".\n",
- (unsigned long)ntohl(header.fileInfo.magic_num), filename);
+ (uintptr_t)ntohl(header.fileInfo.magic_num), filename);
cineonClose(cineon);
return 0;
}
@@ -628,7 +628,7 @@ cineonOpenFromMem(unsigned char *mem, unsigned int size) {
/* let's assume cineon files are always network order */
if (header.fileInfo.magic_num != ntohl(CINEON_FILE_MAGIC)) {
- if (verbose) d_printf("Bad magic number %8.8lX in\n", (unsigned long)ntohl(header.fileInfo.magic_num));
+ if (verbose) d_printf("Bad magic number %8.8lX in\n", (uintptr_t)ntohl(header.fileInfo.magic_num));
cineonClose(cineon);
return 0;
diff --git a/source/blender/imbuf/intern/cineon/dpxlib.c b/source/blender/imbuf/intern/cineon/dpxlib.c
index 500c09ba265..1710cdde501 100644
--- a/source/blender/imbuf/intern/cineon/dpxlib.c
+++ b/source/blender/imbuf/intern/cineon/dpxlib.c
@@ -58,15 +58,15 @@ fillDpxChannelInfo(DpxFile* dpx, DpxChannelInformation* chan, int des) {
static void
dumpDpxChannelInfo(DpxChannelInformation* chan) {
- d_printf(" Signage %ld", (long)ntohl(chan->signage));
- d_printf(" Ref low data %ld\n", (long)ntohl(chan->ref_low_data));
+ d_printf(" Signage %ld", (intptr_t)ntohl(chan->signage));
+ d_printf(" Ref low data %ld\n", (intptr_t)ntohl(chan->ref_low_data));
d_printf(" Ref low quantity %f\n", ntohf(chan->ref_low_quantity));
- d_printf(" Ref high data %ld\n", (long)ntohl(chan->ref_high_data));
+ d_printf(" Ref high data %ld\n", (intptr_t)ntohl(chan->ref_high_data));
d_printf(" Ref high quantity %f\n", ntohf(chan->ref_high_quantity));
d_printf(" Designator1: %d,", chan->designator1);
d_printf(" Bits per pixel %d\n", chan->bits_per_pixel);
d_printf(" Packing: %d,", ntohs(chan->packing));
- d_printf(" Data Offset: %ld,", (long)ntohl(chan->data_offset));
+ d_printf(" Data Offset: %ld,", (intptr_t)ntohl(chan->data_offset));
}
static void
@@ -110,19 +110,19 @@ static void
dumpDpxFileInfo(DpxFileInformation* fileInfo) {
d_printf("\n--File Information--\n");
d_printf("Magic: %8.8lX\n", (unsigned long)ntohl(fileInfo->magic_num));
- d_printf("Image Offset %ld\n", (long)ntohl(fileInfo->offset));
+ d_printf("Image Offset %ld\n", (intptr_t)ntohl(fileInfo->offset));
d_printf("Version \"%s\"\n", fileInfo->vers);
- d_printf("File size %ld\n", (long)ntohl(fileInfo->file_size));
- d_printf("Ditto key %ld\n", (long)ntohl(fileInfo->ditto_key));
- d_printf("Generic Header size %ld\n", (long)ntohl(fileInfo->gen_hdr_size));
- d_printf("Industry Header size %ld\n", (long)ntohl(fileInfo->ind_hdr_size));
- d_printf("User Data size %ld\n", (long)ntohl(fileInfo->user_data_size));
+ d_printf("File size %ld\n", (intptr_t)ntohl(fileInfo->file_size));
+ d_printf("Ditto key %ld\n", (intptr_t)ntohl(fileInfo->ditto_key));
+ d_printf("Generic Header size %ld\n", (intptr_t)ntohl(fileInfo->gen_hdr_size));
+ d_printf("Industry Header size %ld\n", (intptr_t)ntohl(fileInfo->ind_hdr_size));
+ d_printf("User Data size %ld\n", (intptr_t)ntohl(fileInfo->user_data_size));
d_printf("File name \"%s\"\n", fileInfo->file_name);
d_printf("Creation date \"%s\"\n", fileInfo->create_date);
d_printf("Creator \"%s\"\n", fileInfo->creator);
d_printf("Project \"%s\"\n", fileInfo->project);
d_printf("Copyright \"%s\"\n", fileInfo->copyright);
- d_printf("Key %ld\n", (long)ntohl(fileInfo->key));
+ d_printf("Key %ld\n", (intptr_t)ntohl(fileInfo->key));
}
static void
@@ -150,8 +150,8 @@ dumpDpxImageInfo(DpxImageInformation* imageInfo) {
d_printf("Image orientation %d,", ntohs(imageInfo->orientation));
n = ntohs(imageInfo->channels_per_image);
d_printf("Channels %d\n", n);
- d_printf("Pixels per line %ld\n", (long)ntohl(imageInfo->pixels_per_line));
- d_printf("Lines per image %ld\n", (long)ntohl(imageInfo->lines_per_image));
+ d_printf("Pixels per line %ld\n", (intptr_t)ntohl(imageInfo->pixels_per_line));
+ d_printf("Lines per image %ld\n", (intptr_t)ntohl(imageInfo->lines_per_image));
for (i = 0; i < n; ++i) {
d_printf(" --Channel %d--\n", i);
dumpDpxChannelInfo(&imageInfo->channel[i]);
@@ -166,12 +166,12 @@ fillDpxOriginationInfo(
static void
dumpDpxOriginationInfo(DpxOriginationInformation* originInfo) {
d_printf("\n--Origination Information--\n");
- d_printf("X offset %ld\n", (long)ntohl(originInfo->x_offset));
- d_printf("Y offset %ld\n", (long)ntohl(originInfo->y_offset));
+ d_printf("X offset %ld\n", (intptr_t)ntohl(originInfo->x_offset));
+ d_printf("Y offset %ld\n", (intptr_t)ntohl(originInfo->y_offset));
d_printf("X centre %f\n", ntohf(originInfo->x_centre));
d_printf("Y centre %f\n", ntohf(originInfo->y_centre));
- d_printf("Original X %ld\n", (long)ntohl(originInfo->x_original_size));
- d_printf("Original Y %ld\n", (long)ntohl(originInfo->y_original_size));
+ d_printf("Original X %ld\n", (intptr_t)ntohl(originInfo->x_original_size));
+ d_printf("Original Y %ld\n", (intptr_t)ntohl(originInfo->y_original_size));
d_printf("File name \"%s\"\n", originInfo->file_name);
d_printf("Creation time \"%s\"\n", originInfo->creation_time);
d_printf("Input device \"%s\"\n", originInfo->input_device);
@@ -417,7 +417,7 @@ intern_dpxOpen(int mode, const char* bytestuff, int bufsize) {
/* let's assume dpx files are always network order */
if (header.fileInfo.magic_num != ntohl(DPX_FILE_MAGIC)) {
if (verbose) d_printf("Bad magic number %8.8lX in \"%s\".\n",
- (unsigned long)ntohl(header.fileInfo.magic_num), filename);
+ (uintptr_t)ntohl(header.fileInfo.magic_num), filename);
dpxClose(dpx);
return 0;
}
diff --git a/source/blender/imbuf/intern/cineon/logImageCore.h b/source/blender/imbuf/intern/cineon/logImageCore.h
index 01eff8d570d..2646e8b3c12 100644
--- a/source/blender/imbuf/intern/cineon/logImageCore.h
+++ b/source/blender/imbuf/intern/cineon/logImageCore.h
@@ -34,7 +34,9 @@
extern "C" {
#endif
-
+#include "BLO_sys_types.h" // for intptr_t support
+#undef ntohl
+#undef htonl
typedef int (GetRowFn)(LogImageFile* logImage, unsigned short* row, int lineNum);
typedef int (SetRowFn)(LogImageFile* logImage, const unsigned short* row, int lineNum);
typedef void (CloseFn)(LogImageFile* logImage);
@@ -80,7 +82,7 @@ struct _Log_Image_File_t_
CloseFn* close;
unsigned char *membuffer;
- unsigned long membuffersize;
+ uintptr_t membuffersize;
unsigned char *memcursor;
};
diff --git a/source/blender/imbuf/intern/cineon/logmemfile.c b/source/blender/imbuf/intern/cineon/logmemfile.c
index 20359335933..160e8453713 100644
--- a/source/blender/imbuf/intern/cineon/logmemfile.c
+++ b/source/blender/imbuf/intern/cineon/logmemfile.c
@@ -24,10 +24,10 @@
#include "logImageCore.h"
-int logimage_fseek(void* logfile, long offsett, int origin)
+int logimage_fseek(void* logfile, intptr_t offsett, int origin)
{
struct _Log_Image_File_t_ *file = (struct _Log_Image_File_t_*) logfile;
- long offset = offsett;
+ intptr_t offset = offsett;
if (file->file) fseek(file->file, offset, origin);
else { /*we're seeking in memory*/
@@ -38,7 +38,7 @@ int logimage_fseek(void* logfile, long offsett, int origin)
if (offset > file->membuffersize) return 1;
file->memcursor = (file->membuffer + file->membuffersize) - offset;
} else if (origin==SEEK_CUR) {
- unsigned long pos = (unsigned long)file->membuffer - (unsigned long)file->memcursor;
+ uintptr_t pos = (uintptr_t)file->membuffer - (uintptr_t)file->memcursor;
if (pos + offset > file->membuffersize) return 1;
if (pos < 0) return 1;
file->memcursor += offset;
diff --git a/source/blender/imbuf/intern/cineon/logmemfile.h b/source/blender/imbuf/intern/cineon/logmemfile.h
index 6e82cf2b145..39e2f36dad9 100644
--- a/source/blender/imbuf/intern/cineon/logmemfile.h
+++ b/source/blender/imbuf/intern/cineon/logmemfile.h
@@ -22,7 +22,7 @@
#ifndef _LOGMEMFILE_H
#define _LOGMEMFILE_H
-int logimage_fseek(void* logfile, long offsett, int origin);
+int logimage_fseek(void* logfile, intptr_t offsett, int origin);
int logimage_fwrite(void *buffer, unsigned int size, unsigned int count, void *logfile);
int logimage_fread(void *buffer, unsigned int size, unsigned int count, void *logfile);
diff --git a/source/blender/imbuf/intern/dds/ColorBlock.cpp b/source/blender/imbuf/intern/dds/ColorBlock.cpp
index d298e8b5ea8..043fba9d675 100644
--- a/source/blender/imbuf/intern/dds/ColorBlock.cpp
+++ b/source/blender/imbuf/intern/dds/ColorBlock.cpp
@@ -53,6 +53,14 @@ ColorBlock::ColorBlock()
{
}
+/// Init the color block from an array of colors.
+ColorBlock::ColorBlock(const uint * linearImage)
+{
+ for(uint i = 0; i < 16; i++) {
+ color(i) = Color32(linearImage[i]);
+ }
+}
+
/// Init the color block with the contents of the given block.
ColorBlock::ColorBlock(const ColorBlock & block)
{
@@ -125,9 +133,36 @@ void ColorBlock::splatY()
/// Returns true if the block has a single color.
bool ColorBlock::isSingleColor() const
{
+ Color32 mask(0xFF, 0xFF, 0xFF, 0x00);
+ uint u = m_color[0].u & mask.u;
+
for(int i = 1; i < 16; i++)
{
- if (m_color[0] != m_color[i])
+ if (u != (m_color[i].u & mask.u))
+ {
+ return false;
+ }
+ }
+
+ return true;
+}
+
+/// Returns true if the block has a single color, ignoring transparent pixels.
+bool ColorBlock::isSingleColorNoAlpha() const
+{
+ Color32 c;
+ int i;
+ for(i = 0; i < 16; i++)
+ {
+ if (m_color[i].a != 0) c = m_color[i];
+ }
+
+ Color32 mask(0xFF, 0xFF, 0xFF, 0x00);
+ uint u = c.u & mask.u;
+
+ for(; i < 16; i++)
+ {
+ if (u != (m_color[i].u & mask.u))
{
return false;
}
diff --git a/source/blender/imbuf/intern/dds/ColorBlock.h b/source/blender/imbuf/intern/dds/ColorBlock.h
index 141411f37af..537c17346a1 100644
--- a/source/blender/imbuf/intern/dds/ColorBlock.h
+++ b/source/blender/imbuf/intern/dds/ColorBlock.h
@@ -41,6 +41,7 @@
struct ColorBlock
{
ColorBlock();
+ ColorBlock(const uint * linearImage);
ColorBlock(const ColorBlock & block);
ColorBlock(const Image * img, uint x, uint y);
@@ -51,6 +52,7 @@ struct ColorBlock
void splatY();
bool isSingleColor() const;
+ bool isSingleColorNoAlpha() const;
uint countUniqueColors() const;
Color32 averageColor() const;
bool hasAlpha() const;
diff --git a/source/blender/imbuf/intern/dds/DirectDrawSurface.cpp b/source/blender/imbuf/intern/dds/DirectDrawSurface.cpp
index 01838281dee..0981ae88db6 100644
--- a/source/blender/imbuf/intern/dds/DirectDrawSurface.cpp
+++ b/source/blender/imbuf/intern/dds/DirectDrawSurface.cpp
@@ -80,6 +80,10 @@ static const uint FOURCC_RXGB = MAKEFOURCC('R', 'X', 'G', 'B');
static const uint FOURCC_ATI1 = MAKEFOURCC('A', 'T', 'I', '1');
static const uint FOURCC_ATI2 = MAKEFOURCC('A', 'T', 'I', '2');
+static const uint FOURCC_A2XY = MAKEFOURCC('A', '2', 'X', 'Y');
+
+static const uint FOURCC_DX10 = MAKEFOURCC('D', 'X', '1', '0');
+
// 32 bit RGB formats.
static const uint D3DFMT_R8G8B8 = 20;
static const uint D3DFMT_A8R8G8B8 = 21;
@@ -279,6 +283,144 @@ static const uint DDPF_NORMAL = 0x80000000U; // @@ Custom nv flag.
D3D10_RESOURCE_DIMENSION_TEXTURE3D = 4,
};
+
+ const char * getDxgiFormatString(DXGI_FORMAT dxgiFormat)
+ {
+#define CASE(format) case DXGI_FORMAT_##format: return #format
+ switch(dxgiFormat)
+ {
+ CASE(UNKNOWN);
+
+ CASE(R32G32B32A32_TYPELESS);
+ CASE(R32G32B32A32_FLOAT);
+ CASE(R32G32B32A32_UINT);
+ CASE(R32G32B32A32_SINT);
+
+ CASE(R32G32B32_TYPELESS);
+ CASE(R32G32B32_FLOAT);
+ CASE(R32G32B32_UINT);
+ CASE(R32G32B32_SINT);
+
+ CASE(R16G16B16A16_TYPELESS);
+ CASE(R16G16B16A16_FLOAT);
+ CASE(R16G16B16A16_UNORM);
+ CASE(R16G16B16A16_UINT);
+ CASE(R16G16B16A16_SNORM);
+ CASE(R16G16B16A16_SINT);
+
+ CASE(R32G32_TYPELESS);
+ CASE(R32G32_FLOAT);
+ CASE(R32G32_UINT);
+ CASE(R32G32_SINT);
+
+ CASE(R32G8X24_TYPELESS);
+ CASE(D32_FLOAT_S8X24_UINT);
+ CASE(R32_FLOAT_X8X24_TYPELESS);
+ CASE(X32_TYPELESS_G8X24_UINT);
+
+ CASE(R10G10B10A2_TYPELESS);
+ CASE(R10G10B10A2_UNORM);
+ CASE(R10G10B10A2_UINT);
+
+ CASE(R11G11B10_FLOAT);
+
+ CASE(R8G8B8A8_TYPELESS);
+ CASE(R8G8B8A8_UNORM);
+ CASE(R8G8B8A8_UNORM_SRGB);
+ CASE(R8G8B8A8_UINT);
+ CASE(R8G8B8A8_SNORM);
+ CASE(R8G8B8A8_SINT);
+
+ CASE(R16G16_TYPELESS);
+ CASE(R16G16_FLOAT);
+ CASE(R16G16_UNORM);
+ CASE(R16G16_UINT);
+ CASE(R16G16_SNORM);
+ CASE(R16G16_SINT);
+
+ CASE(R32_TYPELESS);
+ CASE(D32_FLOAT);
+ CASE(R32_FLOAT);
+ CASE(R32_UINT);
+ CASE(R32_SINT);
+
+ CASE(R24G8_TYPELESS);
+ CASE(D24_UNORM_S8_UINT);
+ CASE(R24_UNORM_X8_TYPELESS);
+ CASE(X24_TYPELESS_G8_UINT);
+
+ CASE(R8G8_TYPELESS);
+ CASE(R8G8_UNORM);
+ CASE(R8G8_UINT);
+ CASE(R8G8_SNORM);
+ CASE(R8G8_SINT);
+
+ CASE(R16_TYPELESS);
+ CASE(R16_FLOAT);
+ CASE(D16_UNORM);
+ CASE(R16_UNORM);
+ CASE(R16_UINT);
+ CASE(R16_SNORM);
+ CASE(R16_SINT);
+
+ CASE(R8_TYPELESS);
+ CASE(R8_UNORM);
+ CASE(R8_UINT);
+ CASE(R8_SNORM);
+ CASE(R8_SINT);
+ CASE(A8_UNORM);
+
+ CASE(R1_UNORM);
+
+ CASE(R9G9B9E5_SHAREDEXP);
+
+ CASE(R8G8_B8G8_UNORM);
+ CASE(G8R8_G8B8_UNORM);
+
+ CASE(BC1_TYPELESS);
+ CASE(BC1_UNORM);
+ CASE(BC1_UNORM_SRGB);
+
+ CASE(BC2_TYPELESS);
+ CASE(BC2_UNORM);
+ CASE(BC2_UNORM_SRGB);
+
+ CASE(BC3_TYPELESS);
+ CASE(BC3_UNORM);
+ CASE(BC3_UNORM_SRGB);
+
+ CASE(BC4_TYPELESS);
+ CASE(BC4_UNORM);
+ CASE(BC4_SNORM);
+
+ CASE(BC5_TYPELESS);
+ CASE(BC5_UNORM);
+ CASE(BC5_SNORM);
+
+ CASE(B5G6R5_UNORM);
+ CASE(B5G5R5A1_UNORM);
+ CASE(B8G8R8A8_UNORM);
+ CASE(B8G8R8X8_UNORM);
+
+ default:
+ return "UNKNOWN";
+ }
+#undef CASE
+ }
+
+ const char * getD3d10ResourceDimensionString(D3D10_RESOURCE_DIMENSION resourceDimension)
+ {
+ switch(resourceDimension)
+ {
+ default:
+ case D3D10_RESOURCE_DIMENSION_UNKNOWN: return "UNKNOWN";
+ case D3D10_RESOURCE_DIMENSION_BUFFER: return "BUFFER";
+ case D3D10_RESOURCE_DIMENSION_TEXTURE1D: return "TEXTURE1D";
+ case D3D10_RESOURCE_DIMENSION_TEXTURE2D: return "TEXTURE2D";
+ case D3D10_RESOURCE_DIMENSION_TEXTURE3D: return "TEXTURE3D";
+ }
+ }
+
/*** implementation ***/
void mem_read(Stream & mem, DDSPixelFormat & pf)
@@ -451,7 +593,16 @@ void DDSHeader::setFourCC(uint8 c0, uint8 c1, uint8 c2, uint8 c3)
// set fourcc pixel format.
this->pf.flags = DDPF_FOURCC;
this->pf.fourcc = MAKEFOURCC(c0, c1, c2, c3);
- this->pf.bitcount = 0;
+
+ if (this->pf.fourcc == FOURCC_ATI2)
+ {
+ this->pf.bitcount = FOURCC_A2XY;
+ }
+ else
+ {
+ this->pf.bitcount = 0;
+ }
+
this->pf.rmask = 0;
this->pf.gmask = 0;
this->pf.bmask = 0;
@@ -508,7 +659,8 @@ void DDSHeader::setPixelFormat(uint bitcount, uint rmask, uint gmask, uint bmask
void DDSHeader::setDX10Format(uint format)
{
- this->pf.flags = 0;
+ //this->pf.flags = 0;
+ this->pf.fourcc = FOURCC_DX10;
this->header10.dxgiFormat = format;
}
@@ -520,12 +672,18 @@ void DDSHeader::setNormalFlag(bool b)
bool DDSHeader::hasDX10Header() const
{
- return this->pf.flags == 0;
+ return this->pf.fourcc == FOURCC_DX10; // @@ This is according to AMD
+ //return this->pf.flags == 0; // @@ This is according to MS
}
DirectDrawSurface::DirectDrawSurface(unsigned char *mem, uint size) : stream(mem, size), header()
{
mem_read(stream, header);
+
+ // some ATI2 compressed normal maps do not have their
+ // normal flag set, so force it here (the original nvtt don't do
+ // this, but the decompressor has a -forcenormal flag)
+ if (header.pf.fourcc == FOURCC_ATI2) header.setNormalFlag(true);
}
DirectDrawSurface::~DirectDrawSurface()
@@ -539,7 +697,7 @@ bool DirectDrawSurface::isValid() const
return false;
}
- const uint required = (DDSD_WIDTH|DDSD_HEIGHT|DDSD_CAPS|DDSD_PIXELFORMAT);
+ const uint required = (DDSD_WIDTH|DDSD_HEIGHT/*|DDSD_CAPS|DDSD_PIXELFORMAT*/);
if( (header.flags & required) != required ) {
return false;
}
@@ -560,40 +718,46 @@ bool DirectDrawSurface::isValid() const
bool DirectDrawSurface::isSupported() const
{
- if (header.pf.flags & DDPF_FOURCC)
- {
- if (header.pf.fourcc != FOURCC_DXT1 &&
- header.pf.fourcc != FOURCC_DXT2 &&
- header.pf.fourcc != FOURCC_DXT3 &&
- header.pf.fourcc != FOURCC_DXT4 &&
- header.pf.fourcc != FOURCC_DXT5 &&
- header.pf.fourcc != FOURCC_RXGB &&
- header.pf.fourcc != FOURCC_ATI1 &&
- header.pf.fourcc != FOURCC_ATI2)
- {
- // Unknown fourcc code.
- return false;
- }
- }
- else if (header.pf.flags & DDPF_RGB)
+ if (header.hasDX10Header())
{
- // All RGB formats are supported now.
}
else
{
- return false;
- }
-
- if (isTextureCube() && (header.caps.caps2 & DDSCAPS2_CUBEMAP_ALL_FACES) != DDSCAPS2_CUBEMAP_ALL_FACES)
- {
- // Cubemaps must contain all faces.
- return false;
- }
+ if (header.pf.flags & DDPF_FOURCC)
+ {
+ if (header.pf.fourcc != FOURCC_DXT1 &&
+ header.pf.fourcc != FOURCC_DXT2 &&
+ header.pf.fourcc != FOURCC_DXT3 &&
+ header.pf.fourcc != FOURCC_DXT4 &&
+ header.pf.fourcc != FOURCC_DXT5 &&
+ header.pf.fourcc != FOURCC_RXGB &&
+ header.pf.fourcc != FOURCC_ATI1 &&
+ header.pf.fourcc != FOURCC_ATI2)
+ {
+ // Unknown fourcc code.
+ return false;
+ }
+ }
+ else if (header.pf.flags & DDPF_RGB)
+ {
+ // All RGB formats are supported now.
+ }
+ else
+ {
+ return false;
+ }
+
+ if (isTextureCube() && (header.caps.caps2 & DDSCAPS2_CUBEMAP_ALL_FACES) != DDSCAPS2_CUBEMAP_ALL_FACES)
+ {
+ // Cubemaps must contain all faces.
+ return false;
+ }
- if (isTexture3D())
- {
- // @@ 3D textures not supported yet.
- return false;
+ if (isTexture3D())
+ {
+ // @@ 3D textures not supported yet.
+ return false;
+ }
}
return true;
@@ -641,14 +805,37 @@ bool DirectDrawSurface::hasAlpha() const
}
}
+bool DirectDrawSurface::isTexture1D() const
+{
+ if (header.hasDX10Header())
+ {
+ return header.header10.resourceDimension == D3D10_RESOURCE_DIMENSION_TEXTURE1D;
+ }
+ return false;
+}
+
bool DirectDrawSurface::isTexture2D() const
{
- return !isTexture3D() && !isTextureCube();
+ if (header.hasDX10Header())
+ {
+ return header.header10.resourceDimension == D3D10_RESOURCE_DIMENSION_TEXTURE2D;
+ }
+ else
+ {
+ return !isTexture3D() && !isTextureCube();
+ }
}
bool DirectDrawSurface::isTexture3D() const
{
+ if (header.hasDX10Header())
+ {
+ return header.header10.resourceDimension == D3D10_RESOURCE_DIMENSION_TEXTURE3D;
+ }
+ else
+ {
return (header.caps.caps2 & DDSCAPS2_VOLUME) != 0;
+ }
}
bool DirectDrawSurface::isTextureCube() const
@@ -656,6 +843,11 @@ bool DirectDrawSurface::isTextureCube() const
return (header.caps.caps2 & DDSCAPS2_CUBEMAP) != 0;
}
+void DirectDrawSurface::setNormalFlag(bool b)
+{
+ header.setNormalFlag(b);
+}
+
void DirectDrawSurface::mipmap(Image * img, uint face, uint mipmap)
{
stream.seek(offset(face, mipmap));
@@ -709,7 +901,13 @@ void DirectDrawSurface::readLinearImage(Image * img)
return;
}
- if (header.pf.amask != 0)
+ // set image format: RGB or ARGB
+ // alpha channel exists if and only if the alpha mask is non-zero
+ if (header.pf.amask == 0)
+ {
+ img->setFormat(Image::Format_RGB);
+ }
+ else
{
img->setFormat(Image::Format_ARGB);
}
@@ -735,6 +933,20 @@ void DirectDrawSurface::readLinearImage(Image * img)
void DirectDrawSurface::readBlockImage(Image * img)
{
+
+ // set image format: RGB or ARGB
+ if (header.pf.fourcc == FOURCC_RXGB ||
+ header.pf.fourcc == FOURCC_ATI1 ||
+ header.pf.fourcc == FOURCC_ATI2 ||
+ header.pf.flags & DDPF_NORMAL)
+ {
+ img->setFormat(Image::Format_RGB);
+ }
+ else
+ {
+ img->setFormat(Image::Format_ARGB);
+ }
+
const uint w = img->width();
const uint h = img->height();
@@ -971,8 +1183,23 @@ void DirectDrawSurface::printInfo() const
if (header.pf.flags & DDPF_ALPHAPREMULT) printf("\t\tDDPF_ALPHAPREMULT\n");
if (header.pf.flags & DDPF_NORMAL) printf("\t\tDDPF_NORMAL\n");
- printf("\tFourCC: '%c%c%c%c'\n", ((header.pf.fourcc >> 0) & 0xFF), ((header.pf.fourcc >> 8) & 0xFF), ((header.pf.fourcc >> 16) & 0xFF), ((header.pf.fourcc >> 24) & 0xFF));
- printf("\tBit count: %d\n", header.pf.bitcount);
+ printf("\tFourCC: '%c%c%c%c'\n",
+ ((header.pf.fourcc >> 0) & 0xFF),
+ ((header.pf.fourcc >> 8) & 0xFF),
+ ((header.pf.fourcc >> 16) & 0xFF),
+ ((header.pf.fourcc >> 24) & 0xFF));
+ if ((header.pf.fourcc & DDPF_FOURCC) && (header.pf.bitcount != 0))
+ {
+ printf("\tSwizzle: '%c%c%c%c'\n",
+ (header.pf.bitcount >> 0) & 0xFF,
+ (header.pf.bitcount >> 8) & 0xFF,
+ (header.pf.bitcount >> 16) & 0xFF,
+ (header.pf.bitcount >> 24) & 0xFF);
+ }
+ else
+ {
+ printf("\tBit count: %d\n", header.pf.bitcount);
+ }
printf("\tRed mask: 0x%.8X\n", header.pf.rmask);
printf("\tGreen mask: 0x%.8X\n", header.pf.gmask);
printf("\tBlue mask: 0x%.8X\n", header.pf.bmask);
@@ -1003,11 +1230,11 @@ void DirectDrawSurface::printInfo() const
printf("\tCaps 3: 0x%.8X\n", header.caps.caps3);
printf("\tCaps 4: 0x%.8X\n", header.caps.caps4);
- if (header.pf.flags == 0)
+ if (header.hasDX10Header())
{
printf("DX10 Header:\n");
- printf("\tDXGI Format: %u\n", header.header10.dxgiFormat);
- printf("\tResource dimension: %u\n", header.header10.resourceDimension);
+ printf("\tDXGI Format: %u (%s)\n", header.header10.dxgiFormat, getDxgiFormatString((DXGI_FORMAT)header.header10.dxgiFormat));
+ printf("\tResource dimension: %u (%s)\n", header.header10.resourceDimension, getD3d10ResourceDimensionString((D3D10_RESOURCE_DIMENSION)header.header10.resourceDimension));
printf("\tMisc flag: %u\n", header.header10.miscFlag);
printf("\tArray size: %u\n", header.header10.arraySize);
}
diff --git a/source/blender/imbuf/intern/dds/DirectDrawSurface.h b/source/blender/imbuf/intern/dds/DirectDrawSurface.h
index d8abfc69167..28fcc95fe83 100644
--- a/source/blender/imbuf/intern/dds/DirectDrawSurface.h
+++ b/source/blender/imbuf/intern/dds/DirectDrawSurface.h
@@ -142,9 +142,13 @@ public:
uint width() const;
uint height() const;
uint depth() const;
+ bool isTexture1D() const;
bool isTexture2D() const;
bool isTexture3D() const;
bool isTextureCube() const;
+
+ void setNormalFlag(bool b);
+
bool hasAlpha() const; /* false for DXT1, true for all other DXTs */
void mipmap(Image * img, uint f, uint m);
diff --git a/source/blender/imbuf/intern/dds/dds_api.cpp b/source/blender/imbuf/intern/dds/dds_api.cpp
index b41b940dca7..cf2f6c16d08 100644
--- a/source/blender/imbuf/intern/dds/dds_api.cpp
+++ b/source/blender/imbuf/intern/dds/dds_api.cpp
@@ -94,6 +94,7 @@ struct ImBuf *imb_load_dds(unsigned char *mem, int size, int flags)
}
/* convert DDS into ImBuf */
+ // TODO use the image RGB or RGBA tag to determine the bits per pixel
if (dds.hasAlpha()) bits_per_pixel = 32;
else bits_per_pixel = 24;
ibuf = IMB_allocImBuf(dds.width(), dds.height(), bits_per_pixel, 0, 0);
diff --git a/source/blender/imbuf/intern/divers.c b/source/blender/imbuf/intern/divers.c
index 84588b52573..8043e594454 100644
--- a/source/blender/imbuf/intern/divers.c
+++ b/source/blender/imbuf/intern/divers.c
@@ -38,6 +38,7 @@
#include "IMB_imbuf.h"
#include "IMB_allocimbuf.h"
#include "IMB_divers.h"
+#include "BKE_utildefines.h"
void imb_checkncols(struct ImBuf *ibuf)
{
@@ -171,7 +172,6 @@ void IMB_gamwarp(struct ImBuf *ibuf, double gamma)
}
}
-#define FTOCHAR(val) val<=0.0f?0: (val>=1.0f?255: (char)(255.99f*val))
void IMB_rect_from_float(struct ImBuf *ibuf)
{
diff --git a/source/blender/imbuf/intern/rectop.c b/source/blender/imbuf/intern/rectop.c
index a8ddb271309..56714c3b481 100644
--- a/source/blender/imbuf/intern/rectop.c
+++ b/source/blender/imbuf/intern/rectop.c
@@ -37,6 +37,7 @@
#include "IMB_imbuf.h"
#include "IMB_allocimbuf.h"
+#include "BKE_utildefines.h"
/* blend modes */
@@ -514,10 +515,6 @@ void IMB_rectfill(struct ImBuf *drect, float col[4])
}
}
-/* maybe we should use BKE_utildefines.h */
-#define FTOCHAR(val) (val<=0.0f ? 0: (val>=1.0f ? 255: (char)(255.99f*val)))
-#define CLAMP(a, b, c) if((a)<(b)) (a)=(b); else if((a)>(c)) (a)=(c)
-#define SWAP(type, a, b) { type sw_ap; sw_ap=(a); (a)=(b); (b)=sw_ap; }
void buf_rectfill_area(unsigned char *rect, float *rectf, int width, int height, float *col, int x1, int y1, int x2, int y2)
{
diff --git a/source/blender/imbuf/intern/scaling.c b/source/blender/imbuf/intern/scaling.c
index 40c1f83c98c..8257eb4643e 100644
--- a/source/blender/imbuf/intern/scaling.c
+++ b/source/blender/imbuf/intern/scaling.c
@@ -39,6 +39,8 @@
#include "IMB_allocimbuf.h"
#include "IMB_filter.h"
+#include "BLO_sys_types.h" // for intptr_t support
+
/************************************************************************/
/* SCALING */
/************************************************************************/
@@ -490,8 +492,8 @@ static void enlarge_picture_byte(
/ (double) (src_width - 1.001);
double ratioy = (double) (dst_height - 1.0)
/ (double) (src_height - 1.001);
- unsigned long x_src, dx_src, x_dst;
- unsigned long y_src, dy_src, y_dst;
+ uintptr_t x_src, dx_src, x_dst;
+ uintptr_t y_src, dy_src, y_dst;
dx_src = 65536.0 / ratiox;
dy_src = 65536.0 / ratioy;
@@ -500,8 +502,8 @@ static void enlarge_picture_byte(
for (y_dst = 0; y_dst < dst_height; y_dst++) {
unsigned char* line1 = src + (y_src >> 16) * 4 * src_width;
unsigned char* line2 = line1 + 4 * src_width;
- unsigned long weight1y = 65536 - (y_src & 0xffff);
- unsigned long weight2y = 65536 - weight1y;
+ uintptr_t weight1y = 65536 - (y_src & 0xffff);
+ uintptr_t weight2y = 65536 - weight1y;
if ((y_src >> 16) == src_height - 1) {
line2 = line1;
@@ -509,8 +511,8 @@ static void enlarge_picture_byte(
x_src = 0;
for (x_dst = 0; x_dst < dst_width; x_dst++) {
- unsigned long weight1x = 65536 - (x_src & 0xffff);
- unsigned long weight2x = 65536 - weight1x;
+ uintptr_t weight1x = 65536 - (x_src & 0xffff);
+ uintptr_t weight2x = 65536 - weight1x;
unsigned long x = (x_src >> 16) * 4;
@@ -557,12 +559,12 @@ static void enlarge_picture_byte(
}
struct scale_outpix_byte {
- unsigned long r;
- unsigned long g;
- unsigned long b;
- unsigned long a;
+ uintptr_t r;
+ uintptr_t g;
+ uintptr_t b;
+ uintptr_t a;
- unsigned long weight;
+ uintptr_t weight;
};
static void shrink_picture_byte(
@@ -571,9 +573,9 @@ static void shrink_picture_byte(
{
double ratiox = (double) (dst_width) / (double) (src_width);
double ratioy = (double) (dst_height) / (double) (src_height);
- unsigned long x_src, dx_dst, x_dst;
- unsigned long y_src, dy_dst, y_dst;
- long y_counter;
+ uintptr_t x_src, dx_dst, x_dst;
+ uintptr_t y_src, dy_dst, y_dst;
+ intptr_t y_counter;
unsigned char * dst_begin = dst;
struct scale_outpix_byte * dst_line1 = NULL;
@@ -593,16 +595,16 @@ static void shrink_picture_byte(
y_counter = 65536;
for (y_src = 0; y_src < src_height; y_src++) {
unsigned char* line = src + y_src * 4 * src_width;
- unsigned long weight1y = 65536 - (y_dst & 0xffff);
- unsigned long weight2y = 65536 - weight1y;
+ uintptr_t weight1y = 65536 - (y_dst & 0xffff);
+ uintptr_t weight2y = 65536 - weight1y;
x_dst = 0;
for (x_src = 0; x_src < src_width; x_src++) {
- unsigned long weight1x = 65536 - (x_dst & 0xffff);
- unsigned long weight2x = 65536 - weight1x;
+ uintptr_t weight1x = 65536 - (x_dst & 0xffff);
+ uintptr_t weight2x = 65536 - weight1x;
- unsigned long x = x_dst >> 16;
+ uintptr_t x = x_dst >> 16;
- unsigned long w;
+ uintptr_t w;
w = (weight1y * weight1x) >> 16;
@@ -643,13 +645,13 @@ static void shrink_picture_byte(
y_dst += dy_dst;
y_counter -= dy_dst;
if (y_counter < 0) {
- unsigned long x;
+ uintptr_t x;
struct scale_outpix_byte * temp;
y_counter += 65536;
for (x=0; x < dst_width; x++) {
- unsigned long f = 0x80000000UL
+ uintptr_t f = 0x80000000UL
/ dst_line1[x].weight;
*dst++ = (dst_line1[x].r * f) >> 15;
*dst++ = (dst_line1[x].g * f) >> 15;
@@ -664,9 +666,9 @@ static void shrink_picture_byte(
}
}
if (dst - dst_begin < dst_width * dst_height * 4) {
- unsigned long x;
+ uintptr_t x;
for (x = 0; x < dst_width; x++) {
- unsigned long f = 0x80000000UL / dst_line1[x].weight;
+ uintptr_t f = 0x80000000UL / dst_line1[x].weight;
*dst++ = (dst_line1[x].r * f) >> 15;
*dst++ = (dst_line1[x].g * f) >> 15;
*dst++ = (dst_line1[x].b * f) >> 15;
@@ -698,8 +700,8 @@ static void enlarge_picture_float(
/ (double) (src_width - 1.001);
double ratioy = (double) (dst_height - 1.0)
/ (double) (src_height - 1.001);
- unsigned long x_dst;
- unsigned long y_dst;
+ uintptr_t x_dst;
+ uintptr_t y_dst;
double x_src, dx_src;
double y_src, dy_src;
@@ -727,7 +729,7 @@ static void enlarge_picture_float(
float w12 = weight1y * weight2x;
float w22 = weight2y * weight2x;
- unsigned long x = ((int) x_src) * 4;
+ uintptr_t x = ((int) x_src) * 4;
*dst++ = line1[x] * w11
+ line2[x] * w21
@@ -770,8 +772,8 @@ static void shrink_picture_float(
{
double ratiox = (double) (dst_width) / (double) (src_width);
double ratioy = (double) (dst_height) / (double) (src_height);
- unsigned long x_src;
- unsigned long y_src;
+ uintptr_t x_src;
+ uintptr_t y_src;
float dx_dst, x_dst;
float dy_dst, y_dst;
float y_counter;
@@ -794,14 +796,14 @@ static void shrink_picture_float(
y_counter = 1.0;
for (y_src = 0; y_src < src_height; y_src++) {
float* line = src + y_src * 4 * src_width;
- unsigned long weight1y = 1.0 - (y_dst - (int) y_dst);
- unsigned long weight2y = 1.0 - weight1y;
+ uintptr_t weight1y = 1.0 - (y_dst - (int) y_dst);
+ uintptr_t weight2y = 1.0 - weight1y;
x_dst = 0;
for (x_src = 0; x_src < src_width; x_src++) {
- unsigned long weight1x = 1.0 - (x_dst - (int) x_dst);
- unsigned long weight2x = 1.0 - weight1x;
+ uintptr_t weight1x = 1.0 - (x_dst - (int) x_dst);
+ uintptr_t weight2x = 1.0 - weight1x;
- unsigned long x = (int) x_dst;
+ uintptr_t x = (int) x_dst;
float w;
@@ -844,7 +846,7 @@ static void shrink_picture_float(
y_dst += dy_dst;
y_counter -= dy_dst;
if (y_counter < 0) {
- unsigned long x;
+ uintptr_t x;
struct scale_outpix_float * temp;
y_counter += 1.0;
@@ -864,7 +866,7 @@ static void shrink_picture_float(
}
}
if (dst - dst_begin < dst_width * dst_height * 4) {
- unsigned long x;
+ uintptr_t x;
for (x = 0; x < dst_width; x++) {
float f = 1.0 / dst_line1[x].weight;
*dst++ = dst_line1[x].r * f;
diff --git a/source/blender/include/BDR_drawmesh.h b/source/blender/include/BDR_drawmesh.h
index 93e08ab452d..34351549345 100644
--- a/source/blender/include/BDR_drawmesh.h
+++ b/source/blender/include/BDR_drawmesh.h
@@ -30,52 +30,11 @@
#ifndef BDR_DRAWMESH_H
#define BDR_DRAWMESH_H
-struct Image;
-struct MTFace;
struct Object;
struct DerivedMesh;
-struct Mesh;
-struct EdgeHash;
-
-/**
- * Enables or disable mipmapping for realtime images (textures).
- * Note that this will will destroy all texture bindings in OpenGL.
- * @see free_realtime_image()
- * @param mipmap Turn mipmapping on (mipmap!=0) or off (mipmap==0).
- */
-void set_mipmap(int mipmap);
-
-/**
- * Enables or disable linear mipmap setting for realtime images (textures).
- * Note that this will will destroy all texture bindings in OpenGL.
- * @see free_realtime_image()
- * @param mipmap Turn linear mipmapping on (linear!=0) or off (linear==0).
- */
-void set_linear_mipmap(int linear);
-
-/**
- * Returns the current setting for linear mipmapping.
- */
-int get_linear_mipmap(void);
-
-/**
- * Resets the realtime image cache variables.
- */
-void clear_realtime_image_cache(void);
-
-
-void update_realtime_image(struct Image *ima, int x, int y, int w, int h);
-void free_realtime_image(struct Image *ima);
-void free_all_realtime_images(void);
-void make_repbind(struct Image *ima);
-int set_tpage(struct MTFace *tface);
-
-void texpaint_enable_mipmap(void);
-void texpaint_disable_mipmap(void);
void draw_mesh_textured(struct Object *ob, struct DerivedMesh *dm, int facesel);
-struct EdgeHash *get_tface_mesh_marked_edge_info(struct Mesh *me);
-void init_realtime_GL(void);
+void draw_mesh_text(struct Object *ob, int glsl);
#endif /* BDR_DRAWMESH_H */
diff --git a/source/blender/include/BDR_drawobject.h b/source/blender/include/BDR_drawobject.h
index de28db64c3b..635b73af80c 100644
--- a/source/blender/include/BDR_drawobject.h
+++ b/source/blender/include/BDR_drawobject.h
@@ -47,8 +47,7 @@ struct EditVert;
struct EditFace;
struct EditEdge;
-int set_gl_material(int nr);
-int init_gl_materials(struct Object *ob, int check_alpha);
+int draw_glsl_material(struct Object *ob, int dt);
void mesh_foreachScreenVert(void (*func)(void *userData, struct EditVert *eve, int x, int y, int index), void *userData, int clipVerts);
void mesh_foreachScreenEdge(void (*func)(void *userData, struct EditEdge *eed, int x0, int y0, int x1, int y1, int index), void *userData, int clipVerts);
diff --git a/source/blender/include/BDR_editobject.h b/source/blender/include/BDR_editobject.h
index ac60aece344..bc95c221b51 100644
--- a/source/blender/include/BDR_editobject.h
+++ b/source/blender/include/BDR_editobject.h
@@ -77,6 +77,8 @@ void make_links_menu(void);
void make_links(short event);
void make_duplilist_real(void);
void apply_objects_locrot(void);
+void apply_objects_scale(void);
+void apply_objects_rot(void);
void apply_objects_visual_tx(void);
void apply_object(void);
diff --git a/source/blender/include/BDR_gpencil.h b/source/blender/include/BDR_gpencil.h
index eb749cf28ec..9b9294b0343 100644
--- a/source/blender/include/BDR_gpencil.h
+++ b/source/blender/include/BDR_gpencil.h
@@ -43,7 +43,6 @@ struct bGPDframe;
/* Temporary 'Stroke Point' data */
typedef struct tGPspoint {
short x, y; /* x and y coordinates of cursor (in relative to area) */
- float xf, yf; /* same as x and y, but as floats */
float pressure; /* pressure of tablet at this point */
} tGPspoint;
@@ -77,6 +76,9 @@ void gpencil_delete_laststroke(struct bGPdata *gpd);
void gpencil_delete_operation(short mode);
void gpencil_delete_menu(void);
+void gpencil_convert_operation(short mode);
+void gpencil_convert_menu(void);
+
//short gpencil_paint(short mousebutton);
short gpencil_do_paint(struct ScrArea *sa, short mousebutton);
diff --git a/source/blender/include/BDR_imagepaint.h b/source/blender/include/BDR_imagepaint.h
index 26f2375e60a..bd1ac301416 100644
--- a/source/blender/include/BDR_imagepaint.h
+++ b/source/blender/include/BDR_imagepaint.h
@@ -34,8 +34,8 @@ void imagepaint_redraw_tool(void);
void imagepaint_pick(short mousebutton);
void imagepaint_paint(short mousebutton, short texturepaint);
-void imagepaint_undo();
-void free_imagepaint();
+void undo_imagepaint_step(int step);
+void undo_imagepaint_clear(void);
#endif /* BDR_IMAGEPAINT_H */
diff --git a/source/blender/include/BIF_drawgpencil.h b/source/blender/include/BIF_drawgpencil.h
index 418446313df..eacafce058d 100644
--- a/source/blender/include/BIF_drawgpencil.h
+++ b/source/blender/include/BIF_drawgpencil.h
@@ -28,15 +28,18 @@
#ifndef BIF_DRAWGPENCIL_H
#define BIF_DRAWGPENCIL_H
+
+struct bGPdata;
struct ScrArea;
struct View3D;
struct SpaceNode;
struct SpaceSeq;
-struct bGPdata;
struct uiBlock;
+struct ImBuf;
short draw_gpencil_panel(struct uiBlock *block, struct bGPdata *gpd, struct ScrArea *sa);
+void draw_gpencil_2dimage(struct ScrArea *sa, struct ImBuf *ibuf);
void draw_gpencil_2dview(struct ScrArea *sa, short onlyv2d);
void draw_gpencil_3dview(struct ScrArea *sa, short only3d);
void draw_gpencil_oglrender(struct View3D *v3d, int winx, int winy);
diff --git a/source/blender/include/BIF_drawseq.h b/source/blender/include/BIF_drawseq.h
index 462075cdf3d..85a6c7a9e2d 100644
--- a/source/blender/include/BIF_drawseq.h
+++ b/source/blender/include/BIF_drawseq.h
@@ -33,6 +33,8 @@
struct ScrArea;
struct Sequence;
+#define SEQ_ZOOM_FAC(szoom) (szoom > 0)? (szoom) : (szoom == 0)? (1.0) : (-1.0/szoom)
+
void drawprefetchseqspace(struct ScrArea *sa, void *spacedata);
void drawseqspace(struct ScrArea *sa, void *spacedata);
void set_special_seq_update(int val);
diff --git a/source/blender/include/BIF_drawtext.h b/source/blender/include/BIF_drawtext.h
index a75e0f1bd86..db2889d4e9d 100644
--- a/source/blender/include/BIF_drawtext.h
+++ b/source/blender/include/BIF_drawtext.h
@@ -33,6 +33,7 @@
struct ScrArea;
struct SpaceText;
struct Text;
+struct TextLine;
void unlink_text(struct Text *text);
@@ -44,8 +45,8 @@ void add_text_fs(char *file);
void free_txt_data(void);
void pop_space_text(struct SpaceText *st);
-void get_format_string(struct SpaceText *st);
-void do_brackets(void);
+void txt_format_text(struct SpaceText *st);
+void txt_format_line(struct SpaceText *st, struct TextLine *line, int do_next);
#endif
diff --git a/source/blender/include/BIF_editaction.h b/source/blender/include/BIF_editaction.h
index 77c2f19bb9b..1425cf6a67c 100644
--- a/source/blender/include/BIF_editaction.h
+++ b/source/blender/include/BIF_editaction.h
@@ -78,7 +78,7 @@ enum {
#define SEL_GPL(gpl) ((gpl->flag & GP_LAYER_ACTIVE) || (gpl->flag & GP_LAYER_SELECT))
#define NLA_ACTION_SCALED (G.saction->mode==SACTCONT_ACTION && G.saction->pin==0 && OBACT && OBACT->action)
-#define NLA_IPO_SCALED (OBACT && OBACT->action && G.sipo->pin==0 && G.sipo->actname)
+#define NLA_IPO_SCALED (OBACT && OBACT->action && G.sipo && G.sipo->pin==0 && G.sipo->actname)
/* constants for setting ipo-interpolation type */
enum {
diff --git a/source/blender/include/BIF_editarmature.h b/source/blender/include/BIF_editarmature.h
index 556351d7165..02d73680818 100644
--- a/source/blender/include/BIF_editarmature.h
+++ b/source/blender/include/BIF_editarmature.h
@@ -93,6 +93,7 @@ void free_editArmature(void);
int join_armature(void);
void separate_armature(void);
+void apply_armature_pose2bones(void);
void load_editArmature(void);
void make_bone_parent(void);
@@ -101,13 +102,14 @@ struct Bone *get_indexed_bone (struct Object *ob, int index);
void make_editArmature(void);
void make_trans_bones (char mode);
+void remake_editArmature(void);
+void editbones_to_armature(struct ListBase *list, struct Object *ob);
int do_pose_selectbuffer(struct Base *base, unsigned int *buffer, short hits);
void generateSkeleton(void);
void mouse_armature(void);
-void remake_editArmature(void);
void selectconnected_armature(void);
void selectconnected_posearmature(void);
void armature_select_hierarchy(short direction, short add_to_sel);
@@ -139,6 +141,8 @@ void hide_selected_armature_bones(void);
void hide_unselected_armature_bones(void);
void show_all_armature_bones(void);
+void align_selected_bones(void);
+
#define BONESEL_ROOT 0x10000000
#define BONESEL_TIP 0x20000000
#define BONESEL_BONE 0x40000000
@@ -166,3 +170,4 @@ float calcDistance(struct ReebArc *arc, int start, int end, float head[3], float
#endif
+
diff --git a/source/blender/include/BIF_editmesh.h b/source/blender/include/BIF_editmesh.h
index 9354a577ac1..30e9e16355e 100644
--- a/source/blender/include/BIF_editmesh.h
+++ b/source/blender/include/BIF_editmesh.h
@@ -73,7 +73,7 @@ extern void add_primitiveMesh(int type);
extern void adduplicate_mesh(void);
extern void add_click_mesh(void);
extern void addedgeface_mesh(void);
-void addfaces_from_edgenet();
+void addfaces_from_edgenet(void);
/* ******************* editmesh_lib.c */
@@ -221,7 +221,7 @@ extern void beauty_fill(void);
extern void join_triangles(void);
extern void edge_flip(void);
extern void fill_mesh(void);
-extern void bevel_menu();
+extern void bevel_menu(void);
void mesh_set_face_flags(short mode);
extern void mesh_set_smooth_faces(short event);
extern void mesh_rotate_uvs(void);
diff --git a/source/blender/include/BIF_editparticle.h b/source/blender/include/BIF_editparticle.h
index 41d86565b13..aecaee31d53 100644
--- a/source/blender/include/BIF_editparticle.h
+++ b/source/blender/include/BIF_editparticle.h
@@ -54,7 +54,7 @@ short PE_get_current_num(struct Object *ob);
int PE_minmax(float *min, float *max);
void PE_get_colors(char sel[4], char nosel[4]);
struct ParticleEditSettings *PE_settings(void);
-struct RadialControl **PE_radialcontrol();
+struct RadialControl **PE_radialcontrol(void);
/* update calls */
void PE_hide_keys_time(struct ParticleSystem *psys, float cfra);
diff --git a/source/blender/include/BIF_editseq.h b/source/blender/include/BIF_editseq.h
index b353e7bb45c..be30a3eaaf3 100644
--- a/source/blender/include/BIF_editseq.h
+++ b/source/blender/include/BIF_editseq.h
@@ -52,6 +52,7 @@ struct Sequence* find_next_prev_sequence(struct Sequence *test, int lr, int sel)
struct Sequence* find_nearest_seq(int *hand);
int insert_gap(int gap, int cfra);
void make_meta(void);
+void select_single_seq(struct Sequence *seq, int deselect_all);
void select_channel_direction(struct Sequence *test,int lr);
void select_more_seq(void);
void select_less_seq(void);
diff --git a/source/blender/include/BIF_editview.h b/source/blender/include/BIF_editview.h
index d2c6c56d01a..204733a19d6 100644
--- a/source/blender/include/BIF_editview.h
+++ b/source/blender/include/BIF_editview.h
@@ -40,6 +40,7 @@ void arrows_move_cursor(unsigned short event);
void lasso_select_boundbox(struct rcti *rect, short mcords[][2], short moves);
int lasso_inside(short mcords[][2], short moves, short sx, short sy);
int lasso_inside_edge(short mcords[][2], short moves, int x0, int y0, int x1, int y1);
+int edge_inside_circle(short centx, short centy, short rad, short x1, short y1, short x2, short y2);
void borderselect(void);
void circle_select(void);
void deselectall(void);
diff --git a/source/blender/include/BIF_gl.h b/source/blender/include/BIF_gl.h
index 2468abdff60..c1b3b056d62 100644
--- a/source/blender/include/BIF_gl.h
+++ b/source/blender/include/BIF_gl.h
@@ -49,20 +49,7 @@
#endif
#endif
-#ifdef __APPLE__
- #include <OpenGL/gl.h>
- #include <OpenGL/glu.h>
-#else
-/* #if defined (__sun) || defined (__sun__)
- #include <GL/gl.h>
- #include <mesa/glu.h>
- #else
-*/
- #include <GL/gl.h>
- #include <GL/glu.h>
-/* #endif */
-#endif
-
+#include "GL/glew.h"
/*
* these should be phased out. cpack should be replaced in
diff --git a/source/blender/include/BIF_glutil.h b/source/blender/include/BIF_glutil.h
index f530e7ba8d0..ed9096549ca 100644
--- a/source/blender/include/BIF_glutil.h
+++ b/source/blender/include/BIF_glutil.h
@@ -204,6 +204,7 @@ void bglVertex2fv(float *vec);
/* intel gfx cards frontbuffer problem */
void bglFlush(void);
int is_a_really_crappy_intel_card(void);
+int is_a_really_crappy_nvidia_card(void);
void set_inverted_drawing(int enable);
diff --git a/source/blender/include/BIF_keyframing.h b/source/blender/include/BIF_keyframing.h
new file mode 100644
index 00000000000..9f85e69b77f
--- /dev/null
+++ b/source/blender/include/BIF_keyframing.h
@@ -0,0 +1,131 @@
+/**
+ * $Id: BIF_keyframing.h 14444 2008-04-16 22:40:48Z aligorith $
+ *
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 59 Temple Place * Suite 330, Boston, MA 02111*1307, USA.
+ *
+ * The Original Code is Copyright (C) 2008, Blender Foundation
+ * This is a new part of Blender (with some old code)
+ *
+ * Contributor(s): Joshua Leung
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+#ifndef BIF_KEYFRAMING_H
+#define BIF_KEYFRAMING_H
+
+struct ListBase;
+struct ID;
+
+struct IpoCurve;
+struct BezTriple;
+
+/* ************ Keyframing Management **************** */
+
+/* Lesser Keyframing API call:
+ * Use this when validation of necessary animation data isn't necessary as it already
+ * exists, and there is a beztriple that can be directly copied into the array.
+ */
+int insert_bezt_icu(struct IpoCurve *icu, struct BezTriple *bezt);
+
+/* Main Keyframing API call:
+ * Use this when validation of necessary animation data isn't necessary as it
+ * already exists. It will insert a keyframe using the current value being keyframed.
+ */
+void insert_vert_icu(struct IpoCurve *icu, float x, float y, short flag);
+
+
+/* flags for use by keyframe creation/deletion calls */
+enum {
+ /* used by isnertkey() and insert_vert_icu() */
+ INSERTKEY_NEEDED = (1<<0), /* only insert keyframes where they're needed */
+ INSERTKEY_MATRIX = (1<<1), /* insert 'visual' keyframes where possible/needed */
+ INSERTKEY_FAST = (1<<2), /* don't recalculate handles,etc. after adding key */
+ INSERTKEY_FASTR = (1<<3), /* don't realloc mem (or increase count, as array has already been set out) */
+ INSERTKEY_REPLACE = (1<<4), /* only replace an existing keyframe (this overrides INSERTKEY_NEEDED) */
+
+ /* used by common_*key() functions */
+ COMMONKEY_ADDMAP = (1<<10), /* common key: add texture-slot offset bitflag to adrcode before use */
+} eInsertKeyFlags;
+
+/* -------- */
+
+/* Main Keyframing API calls:
+ * Use this to create any necessary animation data, and then insert a keyframe
+ * using the current value being keyframed, in the relevant place. Returns success.
+ */
+ // TODO: adapt this for new data-api -> this blocktype, etc. stuff is evil!
+short insertkey(struct ID *id, int blocktype, char *actname, char *constname, int adrcode, short flag);
+
+/* Main Keyframing API call:
+ * Use this to delete keyframe on current frame for relevant channel. Will perform checks just in case.
+ */
+short deletekey(struct ID *id, int blocktype, char *actname, char *constname, int adrcode, short flag);
+
+
+/* Main Keyframe Management calls:
+ * These handle keyframes management from various spaces. They will handle the menus
+ * required for each space.
+ */
+void common_insertkey(void);
+void common_deletekey(void);
+
+/* ************ Auto-Keyframing ********************** */
+/* Notes:
+ * - All the defines for this (User-Pref settings and Per-Scene settings)
+ * are defined in DNA_userdef_types.h
+ * - Scene settings take presidence over those for userprefs, with old files
+ * inheriting userpref settings for the scene settings
+ * - "On/Off + Mode" are stored per Scene, but "settings" are currently stored
+ * as userprefs
+ */
+
+/* Auto-Keying macros for use by various tools */
+ /* check if auto-keyframing is enabled (per scene takes presidence) */
+#define IS_AUTOKEY_ON ((G.scene) ? (G.scene->autokey_mode & AUTOKEY_ON) : (U.autokey_mode & AUTOKEY_ON))
+ /* check the mode for auto-keyframing (per scene takes presidence) */
+#define IS_AUTOKEY_MODE(mode) ((G.scene) ? (G.scene->autokey_mode == AUTOKEY_MODE_##mode) : (U.autokey_mode == AUTOKEY_MODE_##mode))
+ /* check if a flag is set for auto-keyframing (as userprefs only!) */
+#define IS_AUTOKEY_FLAG(flag) (U.autokey_flag & AUTOKEY_FLAG_##flag)
+
+/* ************ Keyframe Checking ******************** */
+
+/* Main Keyframe Checking API call:
+ * Checks whether a keyframe exists for the given ID-block one the given frame.
+ * - It is recommended to call this method over the other keyframe-checkers directly,
+ * in case some detail of the implementation changes...
+ * - frame: the value of this is quite often result of frame_to_float(CFRA)
+ */
+short id_frame_has_keyframe(struct ID *id, float frame, short filter);
+
+/* filter flags for id_cfra_has_keyframe
+ *
+ * WARNING: do not alter order of these, as also stored in files
+ * (for v3d->keyflags)
+ */
+enum {
+ /* general */
+ ANIMFILTER_LOCAL = (1<<0), /* only include locally available anim data */
+ ANIMFILTER_MUTED = (1<<1), /* include muted elements */
+ ANIMFILTER_ACTIVE = (1<<2), /* only include active-subelements */
+
+ /* object specific */
+ ANIMFILTER_NOMAT = (1<<9), /* don't include material keyframes */
+ ANIMFILTER_NOSKEY = (1<<10), /* don't include shape keys (for geometry) */
+} eAnimFilterFlags;
+
+#endif /* BIF_KEYFRAMING_H */
diff --git a/source/blender/include/BIF_keyval.h b/source/blender/include/BIF_keyval.h
index 70d248ded91..9693684e425 100644
--- a/source/blender/include/BIF_keyval.h
+++ b/source/blender/include/BIF_keyval.h
@@ -31,6 +31,9 @@
#define BIF_KEYVAL_H
char *key_event_to_string(unsigned short event);
+int decode_key_string(char *str, unsigned short *key, unsigned short *qual);
#endif
+
+
diff --git a/source/blender/include/BIF_meshlaplacian.h b/source/blender/include/BIF_meshlaplacian.h
index 9fb8aad0eb6..71db8d0bba2 100644
--- a/source/blender/include/BIF_meshlaplacian.h
+++ b/source/blender/include/BIF_meshlaplacian.h
@@ -47,7 +47,7 @@ struct EditMesh;
struct LaplacianSystem;
typedef struct LaplacianSystem LaplacianSystem;
-LaplacianSystem *laplacian_construct_begin(int totvert, int totface);
+LaplacianSystem *laplacian_construct_begin(int totvert, int totface, int lsq);
void laplacian_add_vertex(LaplacianSystem *sys, float *co, int pinned);
void laplacian_add_triangle(LaplacianSystem *sys, int v1, int v2, int v3);
diff --git a/source/blender/include/BIF_meshtools.h b/source/blender/include/BIF_meshtools.h
index b08c66fd16e..a894d66cb10 100644
--- a/source/blender/include/BIF_meshtools.h
+++ b/source/blender/include/BIF_meshtools.h
@@ -30,6 +30,8 @@
#ifndef BIF_MESHTOOLS_H
#define BIF_MESHTOOLS_H
+#include "BLO_sys_types.h"
+
struct Object;
struct EditVert;
@@ -40,7 +42,7 @@ extern void objects_bake_render_menu(void);
extern void objects_bake_render_ui(short event);
extern void objects_bake_render(short event, char **error_msg);
-extern long mesh_octree_table(struct Object *ob, float *co, char mode);
+extern intptr_t mesh_octree_table(struct Object *ob, float *co, char mode);
extern int mesh_get_x_mirror_vert(struct Object *ob, int index);
extern struct EditVert *editmesh_get_x_mirror_vert(struct Object *ob, float *co);
extern int *mesh_get_x_mirror_faces(struct Object *ob);
diff --git a/source/blender/include/BIF_outliner.h b/source/blender/include/BIF_outliner.h
index abf8b58b1c9..fcd206bb828 100644
--- a/source/blender/include/BIF_outliner.h
+++ b/source/blender/include/BIF_outliner.h
@@ -41,7 +41,7 @@ typedef struct TreeElement {
short idcode; // from TreeStore id
short xend; // width of item display, for select
char *name;
- void *directdata; // Armature Bones, Base, ...
+ void *directdata; // Armature Bones, Base, Sequence, Strip...
} TreeElement;
/* TreeElement->flag */
@@ -77,6 +77,9 @@ typedef struct TreeElement {
#define TSE_LINKED_LAMP 23
#define TSE_POSEGRP_BASE 24
#define TSE_POSEGRP 25
+#define TSE_SEQUENCE 26
+#define TSE_SEQ_STRIP 27
+#define TSE_SEQUENCE_DUP 28
/* outliner search flags */
#define OL_FIND 0
diff --git a/source/blender/include/BIF_resources.h b/source/blender/include/BIF_resources.h
index df514190270..b6a9882309d 100644
--- a/source/blender/include/BIF_resources.h
+++ b/source/blender/include/BIF_resources.h
@@ -57,8 +57,8 @@ typedef enum {
ICON_TRIA_UP,
ICON_FONTPREVIEW,
ICON_BLANK4,
- ICON_BLANK5,
- ICON_BLANK6,
+ ICON_WORDWRAP,
+ ICON_WORDWRAP_OFF,
ICON_ORTHO,
ICON_PERSP,
@@ -108,7 +108,7 @@ typedef enum {
ICON_FF,
ICON_REW,
ICON_PYTHON,
- ICON_BLANK11,
+ ICON_PYTHON_ON,
ICON_BLANK12,
ICON_BLANK13,
ICON_BLANK14,
@@ -266,8 +266,8 @@ typedef enum {
ICON_WINDOW_WINDOW,
ICON_PANEL_CLOSE,
ICON_PHYSICS,
- ICON_BLANK36,
- ICON_BLANK37,
+ ICON_LAYER_USED,
+ ICON_LAYER_ACTIVE,
ICON_BLANK38,
ICON_BLENDER,
@@ -524,6 +524,10 @@ enum {
TH_EDGE_SHARP,
TH_EDITMESH_ACTIVE,
+
+ TH_HANDLE_VERTEX,
+ TH_HANDLE_VERTEX_SELECT,
+ TH_HANDLE_VERTEX_SIZE,
};
/* XXX WARNING: previous is saved in file, so do not change order! */
diff --git a/source/blender/include/BIF_retopo.h b/source/blender/include/BIF_retopo.h
index 5d39923a398..cc2fda56b07 100644
--- a/source/blender/include/BIF_retopo.h
+++ b/source/blender/include/BIF_retopo.h
@@ -79,27 +79,27 @@ typedef struct RetopoPaintData {
struct View3D *paint_v3d;
} RetopoPaintData;
-RetopoPaintData *get_retopo_paint_data();
+RetopoPaintData *get_retopo_paint_data(void);
-char retopo_mesh_check();
-char retopo_curve_check();
+char retopo_mesh_check(void);
+char retopo_curve_check(void);
-void retopo_end_okee();
+void retopo_end_okee(void);
void retopo_free_paint_data(RetopoPaintData *rpd);
-void retopo_free_paint();
+void retopo_free_paint(void);
-char retopo_mesh_paint_check();
+char retopo_mesh_paint_check(void);
void retopo_paint_view_update(struct View3D *v3d);
-void retopo_force_update();
+void retopo_force_update(void);
void retopo_paint_toggle(void*,void*);
char retopo_paint(const unsigned short event);
-void retopo_draw_paint_lines();
+void retopo_draw_paint_lines(void);
RetopoPaintData *retopo_paint_data_copy(RetopoPaintData *rpd);
void retopo_toggle(void*,void*);
void retopo_do_vert(struct View3D *v3d, float *v);
-void retopo_do_all();
+void retopo_do_all(void);
void retopo_do_all_cb(void *, void *);
void retopo_queue_updates(struct View3D *v3d);
diff --git a/source/blender/include/BIF_space.h b/source/blender/include/BIF_space.h
index 4b2b8e14bb6..c7d0f4a1ada 100644
--- a/source/blender/include/BIF_space.h
+++ b/source/blender/include/BIF_space.h
@@ -65,6 +65,7 @@ struct SpaceOops;
#define IMAGE_HANDLER_PREVIEW 33
#define IMAGE_HANDLER_GAME_PROPERTIES 34
#define IMAGE_HANDLER_VIEW_PROPERTIES 35
+#define IMAGE_HANDLER_GREASEPENCIL 36
/*#define IMAGE_HANDLER_TRANSFORM_PROPERTIES 36*/
/* action handler codes */
@@ -83,6 +84,9 @@ struct SpaceOops;
/* nodes handler codes */
#define NODES_HANDLER_GREASEPENCIL 80
+/* text handler codes */
+#define TEXT_HANDLER_FIND 90
+
/* theme codes */
#define B_ADD_THEME 3301
#define B_DEL_THEME 3302
diff --git a/source/blender/include/BSE_drawipo.h b/source/blender/include/BSE_drawipo.h
index 932f103a579..b8388b2172a 100644
--- a/source/blender/include/BSE_drawipo.h
+++ b/source/blender/include/BSE_drawipo.h
@@ -42,6 +42,7 @@ struct ScrArea;
struct EditIpo;
struct View2D;
struct rctf;
+struct SpaceLink;
void calc_ipogrid(void);
void draw_ipogrid(void);
@@ -50,6 +51,8 @@ void areamouseco_to_ipoco (struct View2D *v2d, short *mval, float *x, float *y);
void ipoco_to_areaco (struct View2D *v2d, float *vec, short *mval);
void ipoco_to_areaco_noclip (struct View2D *v2d, float *vec, short *mval);
+struct View2D *spacelink_get_view2d(struct SpaceLink *sl);
+
void view2d_do_locks (struct ScrArea *cursa, int flag);
void view2d_zoom (struct View2D *v2d, float factor, int winx, int winy);
void view2d_getscale (struct View2D *v2d, float *x, float *y);
diff --git a/source/blender/include/BSE_drawview.h b/source/blender/include/BSE_drawview.h
index e6f22a4fb67..1b2834b2e3b 100644
--- a/source/blender/include/BSE_drawview.h
+++ b/source/blender/include/BSE_drawview.h
@@ -36,8 +36,6 @@ struct rctf;
struct ScrArea;
struct ImBuf;
-void default_gl_light(void);
-void init_gl_stuff(void);
void circf(float x, float y, float rad);
void circ(float x, float y, float rad);
@@ -55,8 +53,8 @@ struct ImBuf *read_backbuf(short xmin, short ymin, short xmax, short ymax);
unsigned int sample_backbuf_rect(short mval[2], int size, unsigned int min, unsigned int max, int *dist, short strict, unsigned int (*indextest)(unsigned int index));
void drawview3dspace(struct ScrArea *sa, void *spacedata);
-void drawview3d_render(struct View3D *v3d, int winx, int winy, float winmat[][4]);
-void draw_depth(struct ScrArea *sa, void *spacedata);
+void drawview3d_render(struct View3D *v3d, float viewmat[][4], int winx, int winy, float winmat[][4], int shadow);
+void draw_depth(struct ScrArea *sa, void *spacedata, int (*func)(void *) );
void view3d_update_depths(struct View3D *v3d);
int update_time(int cfra);
diff --git a/source/blender/include/BSE_editipo.h b/source/blender/include/BSE_editipo.h
index e7445efc63e..807e338f514 100644
--- a/source/blender/include/BSE_editipo.h
+++ b/source/blender/include/BSE_editipo.h
@@ -86,13 +86,10 @@ void do_ipo_selectbuttons(void);
/* gets ipo curve, creates if needed */
-struct IpoCurve *verify_ipocurve(struct ID *, short, char *, char *, char *, int);
-struct Ipo *verify_ipo(struct ID *, short, char *, char *, char *);
+struct IpoCurve *verify_ipocurve(struct ID *, short, char *, char *, char *, int, short);
+struct Ipo *verify_ipo(struct ID *, short, char *, char *, char *, short);
int texchannel_to_adrcode(int channel);
-int insert_bezt_icu(struct IpoCurve *icu, struct BezTriple *bezt);
-void insert_vert_icu(struct IpoCurve *icu, float x, float y, short fast);
-void add_vert_ipo(void);
void add_duplicate_editipo(void);
void remove_doubles_ipo(void);
@@ -121,10 +118,8 @@ void paste_editipo(void);
void set_exprap_ipo(int mode);
void set_speed_editipo(float speed);
-void insertkey(ID *id, int blocktype, char *actname, char *constname, int adrcode, short fast);
-void insertkey_smarter(ID *id, int blocktype, char *actname, char *constname, int adrcode);
void insertkey_editipo(void);
-void common_insertkey(void);
+void add_vert_ipo(void);
void free_ipokey(struct ListBase *lb);
void add_to_ipokey(struct ListBase *lb, struct BezTriple *bezt, int nr, int len);
void make_ipokey(void);
@@ -163,8 +158,6 @@ void duplicate_ipo_keys(struct Ipo *ipo);
void borderselect_ipo_key(struct Ipo *ipo, float xmin, float xmax, int val);
void borderselect_icu_key(struct IpoCurve *icu, float xmin, float xmax,
int (*select_function)(struct BezTriple *));
-int insertmatrixkey(ID *id, int blocktype, char *actname, char *constname, int adrcode);
-void insertfloatkey(ID *id, int blocktype, char *actname, char *constname, int adrcode, float floatkey);
void select_ipo_key(struct Ipo *ipo, float selx, int sel);
void select_icu_key(struct IpoCurve *icu, float selx, int selectmode);
void setexprap_ipoloop(struct Ipo *ipo, int code);
diff --git a/source/blender/include/blendef.h b/source/blender/include/blendef.h
index 6f8b94d7cd1..50179325609 100644
--- a/source/blender/include/blendef.h
+++ b/source/blender/include/blendef.h
@@ -42,8 +42,6 @@
#define MAXSEQ 32
/* in buttons.c */
-#define MAX_EFFECT 20
-
#ifndef MAXFLOAT
#define MAXFLOAT ((float)3.40282347e+38)
#endif
@@ -67,8 +65,6 @@
#define RET_OK 0
#define RET_ERROR 1
#define RET_CANCEL 2
-#define RET_YES (1 == 1)
-#define RET_NO (1 == 0)
#if defined(__sgi) || defined(__sparc) || defined(__sparc__) || defined (__PPC__) || defined (__ppc__) || defined (__hppa__) || defined (__BIG_ENDIAN__)
/* big endian */
@@ -90,7 +86,6 @@
#define VERSE 3
/*#endif*/
#define DESELECT 0
-#define NOT_YET 0
#define VISIBLE 0
#define LAST 0
@@ -113,6 +108,7 @@
#define F_CFRA ((float)(G.scene->r.cfra))
#define SFRA (G.scene->r.sfra)
#define EFRA (G.scene->r.efra)
+#define STFRA (G.scene->frame_step)
#define PSFRA ((G.scene->r.psfra != 0)? (G.scene->r.psfra): (G.scene->r.sfra))
#define PEFRA ((G.scene->r.psfra != 0)? (G.scene->r.pefra): (G.scene->r.efra))
#define FRA2TIME(a) ((((double) G.scene->r.frs_sec_base) * (a)) / G.scene->r.frs_sec)
@@ -127,9 +123,9 @@
/* for curve objects in editmode that can have hidden handles - may use for IPO's later */
#define BEZSELECTED_HIDDENHANDLES(bezt) ((G.f & G_HIDDENHANDLES) ? (bezt)->f2 & SELECT : BEZSELECTED(bezt))
-/* psfont */
-#define FNT_PDRAW 1
-#define FNT_HAEBERLI 2
+#define BEZ_SEL(bezt) { (bezt)->f1 |= SELECT; (bezt)->f2 |= SELECT; (bezt)->f3 |= SELECT; }
+#define BEZ_DESEL(bezt) { (bezt)->f1 &= ~SELECT; (bezt)->f2 &= ~SELECT; (bezt)->f3 &= ~SELECT; }
+#define BEZ_INVSEL(bezt) { (bezt)->f1 ^= SELECT; (bezt)->f2 ^= SELECT; (bezt)->f3 ^= SELECT; }
/* getbutton */
@@ -171,7 +167,6 @@
/* EVENT < 50: alones en locals */
#define B_KEEPDATA 60
-#define B_CONSOLETOG 61
#define B_DRAWINFO 62
#define B_REDRCURW3D 63
#define B_FLIPINFOMENU 64
@@ -219,12 +214,10 @@
/* watch: codes 102-132 in in use for layers */
#define B_AUTOKEY 139
#define B_SCENELOCK 140
-#define B_LOCALVIEW 141
#define B_U_CAPSLOCK 142
#define B_VIEWBUT 146
#define B_PERSP 147
-#define B_PROPTOOL 148
#define B_VIEWRENDER 149
#define B_STARTGAME 150
@@ -241,6 +234,7 @@
#define B_SEL_END 168
#define B_MAN_MODE 169
#define B_NDOF 170
+#define B_VIEW_BUTSEDIT 171
/* IPO: 200 */
#define B_IPOHOME 201
@@ -264,9 +258,8 @@
/* OOPS: 250 */
#define B_OOPSHOME 251
-#define B_OOPSBORDER 252
-#define B_NEWOOPS 253
-#define B_OOPSVIEWSEL 254
+#define B_NEWOOPS 252
+#define B_OOPSVIEWSEL 253
/* INFO: 300 */
/* watch: also in filesel.c and editobject.c */
@@ -274,8 +267,6 @@
#define B_INFODELSCR 302
#define B_INFOSCE 304
#define B_INFODELSCE 305
-#define B_FILEMENU 306
-#define B_PACKFILE 307
#define B_CONSOLEOUT 308
#define B_CONSOLENUMLINES 309
@@ -289,11 +280,7 @@
#define B_RESTOREFONT 317
#define B_USETEXTUREFONT 318
-#define B_UITHEMECHANGED 320
-#define B_UITHEMECOLORMOD 321
#define B_UITHEMERESET 322
-#define B_UITHEMEIMPORT 323
-#define B_UITHEMEEXPORT 324
#define B_MEMCACHELIMIT 325
#define B_WPAINT_RANGE 326
@@ -318,15 +305,9 @@
#define B_SIMAGELOAD 353
#define B_SIMA_REDR_IMA_3D 354
#define B_SIMAGETILE 355
-#define B_BE_SQUARE 356
#define B_TWINANIM 357
-#define B_SIMAGEREPLACE 358
-#define B_CLIP_UV 359
-#define B_SIMAGELOAD1 360
-#define B_SIMAGEREPLACE1 361
#define B_SIMAGEPAINTTOOL 362
#define B_SIMAPACKIMA 363
-#define B_SIMAGESAVE 364
#define B_SIMACLONEBROWSE 365
#define B_SIMACLONEDELETE 366
#define B_SIMANOTHING 368
@@ -358,8 +339,7 @@
#define B_BUTSPREVIEW 402
#define B_MATCOPY 403
#define B_MATPASTE 404
-#define B_MESHTYPE 405
-#define B_CONTEXT_SWITCH 406
+#define B_CONTEXT_SWITCH 405
/* IMASEL: 450 */
/* in imasel.h - not any more - elubie */
@@ -369,14 +349,19 @@
/* TEXT: 500 */
#define B_TEXTBROWSE 501
-#define B_TEXTALONE 502
-#define B_TEXTLOCAL 503
#define B_TEXTDELETE 504
#define B_TEXTFONT 505
#define B_TEXTSTORE 506
#define B_TEXTLINENUM 507
#define B_TAB_NUMBERS 508
#define B_SYNTAX 509
+#define B_WORDWRAP 510
+#define B_TEXTPLUGINS 511
+#define B_PASTEFIND 512
+#define B_PASTEREPLACE 513
+#define B_TEXTREPLACE 514
+#define B_TEXTFIND 515
+#define B_TEXTMARKALL 516
/* SCRIPT: 525 */
#define B_SCRIPTBROWSE 526
@@ -387,14 +372,12 @@
#define B_RELOADDIR 552
/* SEQUENCE: 600 */
-#define B_SEQHOME 601
-#define B_SEQCLEAR 602
+#define B_SEQCLEAR 601
/* SOUND: 650 */
#define B_SOUNDBROWSE 651
#define B_SOUNDBROWSE2 652
#define B_SOUNDHOME 653
-#define B_PACKSOUND 654
/* ACTION: 701 - 750 */
#define B_ACTHOME 701
@@ -423,14 +406,15 @@
#define B_TL_NEXTKEY 755
#define B_TL_STOP 756
#define B_TL_PREVIEWON 757
+#define B_TL_INSERTKEY 758
+#define B_TL_DELETEKEY 759
/* NLA: 801-850 */
#define B_NLAHOME 801
/* NODE: 851-900 */
-#define B_NODEHOME 851
-#define B_NODE_USEMAT 852
-#define B_NODE_USESCENE 853
+#define B_NODE_USEMAT 851
+#define B_NODE_USESCENE 852
/* FREE 901 - 999 */
diff --git a/source/blender/include/butspace.h b/source/blender/include/butspace.h
index 6cf010571c4..8cac5a074ab 100644
--- a/source/blender/include/butspace.h
+++ b/source/blender/include/butspace.h
@@ -281,9 +281,6 @@ void curvemap_buttons(struct uiBlock *block, struct CurveMapping *cumap, char la
#define B_SOFTBODY_BAKE 1422
#define B_SOFTBODY_BAKE_FREE 1423
-/* this has MAX_EFFECT settings! Next free define is 1450... */
-#define B_SELEFFECT 1430
-
/* Fluidsim button defines */
#define B_FLUIDSIM_BAKE 1450
#define B_FLUIDSIM_SELDIR 1451
diff --git a/source/blender/include/license_key.h b/source/blender/include/license_key.h
deleted file mode 100644
index 7dc14f45e74..00000000000
--- a/source/blender/include/license_key.h
+++ /dev/null
@@ -1,92 +0,0 @@
-/**
- * $Id$
- *
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
- * All rights reserved.
- *
- * The Original Code is: all of this file.
- *
- * Contributor(s): none yet.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-#ifndef LICENCEKEY_H
-#define LICENCEKEY_H
-
-#define I_AM_PUBLISHER temp_val2
-#define LICENSE_KEY_VALID temp_val
-#define SHOW_LICENSE_KEY rotop
-
-extern int LICENSE_KEY_VALID;
-extern int I_AM_PUBLISHER;
-
-extern char * license_key_name;
-extern void loadKeyboard(char * name);
-extern void checkhome(void);
-extern void SHOW_LICENSE_KEY(void);
-
-#define LICENSE_CHECK_0 (0==0)
-
-// Stuff from the Python files from Strubi
-
-typedef int (*Fptr)(void *);
-
-extern Fptr g_functab[];
-extern Fptr g_ptrtab[];
-
-// TODO: From here on, this should be a generated header file...
-
-// change all KEY_FUNC values
-// if you change PYKEY_TABLEN or PYKEY_SEED
-// see below
-
-#define PYKEY_TABLEN 21 // don't change this unless needed. Other values
- // may yield bad random orders
-
-#define PYKEY_SEED {26,8,1972}
-
-// these values are generated by $HOME/develop/intern/keymaker/makeseed.py
-// from the above seed value.
-
-// DO NOT EDIT THESE VALUES BY HAND!
-
-#define KEY_FUNC1 12
-#define KEY_FUNC2 8
-#define KEY_FUNC3 1
-#define KEY_FUNC4 16
-#define KEY_FUNC5 20
-#define KEY_FUNC6 18
-#define KEY_FUNC7 13
-#define KEY_FUNC8 6
-#define KEY_FUNC9 9
-#define KEY_FUNC10 7
-#define KEY_FUNC11 14
-#define KEY_FUNC12 0
-#define KEY_FUNC13 5
-#define KEY_FUNC14 10
-#define KEY_FUNC15 19
-#define KEY_FUNC16 2
-#define KEY_FUNC17 11
-#define KEY_FUNC18 3
-#define KEY_FUNC19 17
-#define KEY_FUNC20 15
-#define KEY_FUNC21 4
-
-#endif
-
diff --git a/source/blender/include/transform.h b/source/blender/include/transform.h
index 720b856a149..51fa39ff9d6 100644
--- a/source/blender/include/transform.h
+++ b/source/blender/include/transform.h
@@ -466,7 +466,6 @@ int validSnappingNormal(TransInfo *t);
/*********************** Generics ********************************/
void initTrans(TransInfo *t);
-void initTransModeFlags(TransInfo *t, int mode);
void postTrans (TransInfo *t);
void drawLine(float *center, float *dir, char axis, short options);
@@ -498,6 +497,7 @@ TransInfo * BIF_GetTransInfo(void);
/*********************** NumInput ********************************/
+void initNumInput(NumInput *n);
void outputNumInput(NumInput *n, char *str);
short hasNumInput(NumInput *n);
void applyNumInput(NumInput *n, float *vec);
diff --git a/source/blender/makesdna/DNA_action_types.h b/source/blender/makesdna/DNA_action_types.h
index 2e8d95335cc..4a10ecf2368 100644
--- a/source/blender/makesdna/DNA_action_types.h
+++ b/source/blender/makesdna/DNA_action_types.h
@@ -277,7 +277,9 @@ typedef enum POSE_FLAG {
/* clears the POSE_LOCKED flag for the next time the pose is evaluated */
POSE_DO_UNLOCK = (1<<2),
/* pose has constraints which depend on time (used when depsgraph updates for a new frame) */
- POSE_CONSTRAINTS_TIMEDEPEND = (1<<3)
+ POSE_CONSTRAINTS_TIMEDEPEND = (1<<3),
+ /* recalculate bone paths */
+ POSE_RECALCPATHS = (1<<4),
} POSE_FLAG;
/* PoseChannel (transform) flags */
diff --git a/source/blender/makesdna/DNA_actuator_types.h b/source/blender/makesdna/DNA_actuator_types.h
index 7444ce95f56..43dada97d0e 100644
--- a/source/blender/makesdna/DNA_actuator_types.h
+++ b/source/blender/makesdna/DNA_actuator_types.h
@@ -81,7 +81,9 @@ typedef struct bEditObjectActuator {
struct Mesh *me;
char name[32];
float linVelocity[3]; /* initial lin. velocity on creation */
- short localflag; /* flag for the lin. vel: apply locally */
+ float angVelocity[3]; /* initial ang. velocity on creation */
+ float pad;
+ short localflag; /* flag for the lin & ang. vel: apply locally */
short dyn_operation;
} bEditObjectActuator;
@@ -111,6 +113,7 @@ typedef struct bIpoActuator {
short flag, type;
int sta, end;
char name[32];
+ char frameProp[32]; /* Set this property to the actions current frame */
short pad1, cur, butsta, butend;
@@ -191,7 +194,8 @@ typedef struct bGameActuator {
} bGameActuator;
typedef struct bVisibilityActuator {
- /** bit 0: Is this object visible? */
+ /** bit 0: Is this object visible?
+ ** bit 1: Apply recursively */
int flag;
} bVisibilityActuator;
@@ -298,6 +302,7 @@ typedef struct FreeCamera {
#define ACT_NEW 4
#define ACT_LINKED 8
#define ACT_VISIBLE 16
+#define ACT_PIN 32
/* link codes */
#define LINK_SENSOR 0
@@ -364,6 +369,9 @@ typedef struct FreeCamera {
#define ACT_CONST_MATERIAL 128
#define ACT_CONST_PERMANENT 256
#define ACT_CONST_DISTANCE 512
+#define ACT_CONST_LOCAL 1024
+#define ACT_CONST_DOROTFH 2048
+
/* constraint mode */
#define ACT_CONST_DIRPX 1
#define ACT_CONST_DIRPY 2
@@ -376,6 +384,7 @@ typedef struct FreeCamera {
#define ACT_CONST_TYPE_LOC 0
#define ACT_CONST_TYPE_DIST 1
#define ACT_CONST_TYPE_ORI 2
+#define ACT_CONST_TYPE_FH 3
/* editObjectActuator->type */
#define ACT_EDOB_ADD_OBJECT 0
@@ -384,6 +393,9 @@ typedef struct FreeCamera {
#define ACT_EDOB_TRACK_TO 3
#define ACT_EDOB_DYNAMICS 4
+/* editObjectActuator->localflag */
+#define ACT_EDOB_LOCAL_LINV 2
+#define ACT_EDOB_LOCAL_ANGV 4
/* editObjectActuator->flag */
@@ -438,10 +450,13 @@ typedef struct FreeCamera {
#define ACT_GAME_START 1
#define ACT_GAME_RESTART 2
#define ACT_GAME_QUIT 3
+#define ACT_GAME_SAVECFG 4
+#define ACT_GAME_LOADCFG 5
/* visibilityact->flag */
/* Set means the object will become invisible */
#define ACT_VISIBILITY_INVISIBLE (1 << 0)
+#define ACT_VISIBILITY_RECURSIVE (1 << 1)
/* twodfilter->type */
#define ACT_2DFILTER_ENABLED -2
diff --git a/source/blender/makesdna/DNA_brush_types.h b/source/blender/makesdna/DNA_brush_types.h
index 1c272105067..c7196763358 100644
--- a/source/blender/makesdna/DNA_brush_types.h
+++ b/source/blender/makesdna/DNA_brush_types.h
@@ -33,7 +33,7 @@
#include "DNA_ID.h"
#ifndef MAX_MTEX
-#define MAX_MTEX 10
+#define MAX_MTEX 18
#endif
struct MTex;
@@ -58,7 +58,7 @@ typedef struct Brush {
float alpha; /* opacity */
short texact, pad;
- struct MTex *mtex[10];
+ struct MTex *mtex[18]; /* MAX_MTEX */
struct BrushClone clone;
} Brush;
diff --git a/source/blender/makesdna/DNA_constraint_types.h b/source/blender/makesdna/DNA_constraint_types.h
index fa5b5a75941..ecfb7dc7a90 100644
--- a/source/blender/makesdna/DNA_constraint_types.h
+++ b/source/blender/makesdna/DNA_constraint_types.h
@@ -463,7 +463,9 @@ typedef enum B_CONSTRAINTCHANNEL_FLAG {
/* bKinematicConstraint->flag */
#define CONSTRAINT_IK_TIP 1
#define CONSTRAINT_IK_ROT 2
+ /* targetless */
#define CONSTRAINT_IK_AUTO 4
+ /* autoik */
#define CONSTRAINT_IK_TEMP 8
#define CONSTRAINT_IK_STRETCH 16
#define CONSTRAINT_IK_POS 32
diff --git a/source/blender/makesdna/DNA_curve_types.h b/source/blender/makesdna/DNA_curve_types.h
index a4fb8dc1150..f809cac037d 100644
--- a/source/blender/makesdna/DNA_curve_types.h
+++ b/source/blender/makesdna/DNA_curve_types.h
@@ -68,7 +68,7 @@ typedef struct BevList {
#
#
typedef struct BevPoint {
- float x, y, z, alfa, sina, cosa, mat[3][3];
+ float x, y, z, alfa, radius, sina, cosa, mat[3][3];
short f1, f2;
} BevPoint;
@@ -115,7 +115,7 @@ typedef struct Nurb {
BezTriple *bezt;
short tilt_interp; /* KEY_LINEAR, KEY_CARDINAL, KEY_BSPLINE */
- short pad;
+ short radius_interp;
int charidx;
} Nurb;
@@ -187,37 +187,6 @@ typedef struct Curve {
struct CharInfo curinfo;
} Curve;
-typedef struct IpoDriver {
- struct Object *ob;
- short blocktype, adrcode, type, flag;
- char name[128]; /* bone or constraint(?), or python expression here */
-} IpoDriver;
-
-/* temp? we store more bone names in 1 driver... */
-#define DRIVER_NAME_OFFS 32
-
-typedef struct IpoCurve {
- struct IpoCurve *next, *prev;
-
- struct BPoint *bp; /* are these even used anywhere? */
- struct BezTriple *bezt; /* array of BezTriples (sizeof(BezTriple)*totvert. i.e. keyframes */
-
- rctf maxrct, totrct; /* bounding boxes */
-
- short blocktype, adrcode, vartype; /* blocktype= ipo-blocktype; adrcode= type of ipo-curve; vartype= 'format' of data */
- short totvert; /* total number of BezTriples (i.e. keyframes) on curve */
- short ipo, extrap; /* interpolation and extrapolation modes */
- short flag, rt; /* flag= settings; rt= ??? */
- float ymin, ymax; /* minimum/maximum y-extents for curve */
- unsigned int bitmask; /* ??? */
-
- float slide_min, slide_max; /* minimum/maximum values for sliders (in action editor) */
- float curval; /* value of ipo-curve for current frame */
-
- IpoDriver *driver; /* pointer to ipo-driver for this curve */
-
-} IpoCurve;
-
/* **************** CURVE ********************* */
/* texflag */
@@ -273,15 +242,5 @@ typedef struct IpoCurve {
#define CU_UNDERLINE 4
#define CU_WRAP 8 /* wordwrap occured here */
-/* *************** driver ****************** */
-
-/* driver->type */
-#define IPO_DRIVER_TYPE_NORMAL 0
-#define IPO_DRIVER_TYPE_PYTHON 1
-
-/* driver->flag */
-/* invalid flag: currently only used for buggy pydriver expressions: */
-#define IPO_DRIVER_FLAG_INVALID 1
-
#endif
diff --git a/source/blender/makesdna/DNA_gpencil_types.h b/source/blender/makesdna/DNA_gpencil_types.h
index dca4e28688d..cc0c9912057 100644
--- a/source/blender/makesdna/DNA_gpencil_types.h
+++ b/source/blender/makesdna/DNA_gpencil_types.h
@@ -59,8 +59,10 @@ typedef struct bGPDstroke {
#define GP_STROKE_3DSPACE (1<<0)
/* stroke is in 2d-space */
#define GP_STROKE_2DSPACE (1<<1)
- /* stroke is an "eraser" stroke */
-#define GP_STROKE_ERASER (1<<2)
+ /* stroke is in 2d-space (but with special 'image' scaling) */
+#define GP_STROKE_2DIMAGE (1<<2)
+ /* only for use with stroke-buffer (while drawing eraser) */
+#define GP_STROKE_ERASER (1<<15)
/* Grease-Pencil Annotations - 'Frame'
diff --git a/source/blender/makesdna/DNA_group_types.h b/source/blender/makesdna/DNA_group_types.h
index 1bb18ca2ca2..0987050261d 100644
--- a/source/blender/makesdna/DNA_group_types.h
+++ b/source/blender/makesdna/DNA_group_types.h
@@ -54,7 +54,7 @@ typedef struct Group {
* the objects that show in the group can change depending
* on the last used scene */
unsigned int layer;
- int pad;
+ float dupli_ofs[3];
} Group;
diff --git a/source/blender/makesdna/DNA_image_types.h b/source/blender/makesdna/DNA_image_types.h
index 42b651a7555..e1d79f0f875 100644
--- a/source/blender/makesdna/DNA_image_types.h
+++ b/source/blender/makesdna/DNA_image_types.h
@@ -37,6 +37,7 @@ struct PackedFile;
struct anim;
struct ImBuf;
struct RenderResult;
+struct GPUTexture;
/* ImageUser is in Texture, in Nodes, Background Image, Image Window, .... */
@@ -62,7 +63,8 @@ typedef struct Image {
char name[240]; /* file path */
- ListBase ibufs; /* not written in file */
+ ListBase ibufs; /* not written in file */
+ struct GPUTexture *gputexture; /* not written in file */
/* sources from: */
struct anim *anim;
diff --git a/source/blender/makesdna/DNA_ipo_types.h b/source/blender/makesdna/DNA_ipo_types.h
index 3954a500dc7..432399e3581 100644
--- a/source/blender/makesdna/DNA_ipo_types.h
+++ b/source/blender/makesdna/DNA_ipo_types.h
@@ -24,7 +24,7 @@
*
* The Original Code is: all of this file.
*
- * Contributor(s): none yet.
+ * Contributor(s): Joshua Leung
*
* ***** END GPL LICENSE BLOCK *****
*/
@@ -32,10 +32,54 @@
#define DNA_IPO_TYPES_H
#include "DNA_listBase.h"
+#include "DNA_curve_types.h"
#include "DNA_vec_types.h"
#include "DNA_ID.h"
+/* -------------------------- Type Defines --------------------------- */
+
+/* sometimes used - mainly for GE/Ketsji */
+typedef short IPO_Channel;
+
+
+/* --- IPO Curve Driver --- */
+
+/* IPO Curve Driver */
+typedef struct IpoDriver {
+ struct Object *ob; /* target/driver ob */
+ short blocktype, adrcode; /* sub-channel to use */
+
+ short type, flag; /* driver settings */
+ char name[128]; /* bone, or python expression here */
+} IpoDriver;
+
+/* --- IPO Curve --- */
+
+/* IPO Curve */
+typedef struct IpoCurve {
+ struct IpoCurve *next, *prev;
+
+ struct BPoint *bp; /* array of BPoints (sizeof(BPoint)*totvert) - i.e. baked/imported data */
+ struct BezTriple *bezt; /* array of BezTriples (sizeof(BezTriple)*totvert) - i.e. user-editable keyframes */
+
+ rctf maxrct, totrct; /* bounding boxes */
+
+ short blocktype, adrcode, vartype; /* blocktype= ipo-blocktype; adrcode= type of ipo-curve; vartype= 'format' of data */
+ short totvert; /* total number of BezTriples (i.e. keyframes) on curve */
+ short ipo, extrap; /* interpolation and extrapolation modes */
+ short flag, rt; /* flag= settings; rt= ??? */
+ float ymin, ymax; /* minimum/maximum y-extents for curve */
+ unsigned int bitmask; /* ??? */
+
+ float slide_min, slide_max; /* minimum/maximum values for sliders (in action editor) */
+ float curval; /* value of ipo-curve for current frame */
+
+ IpoDriver *driver; /* pointer to ipo-driver for this curve */
+} IpoCurve;
+
+/* --- ID-Datablock --- */
+
/* IPO Data-Block */
typedef struct Ipo {
ID id;
@@ -47,13 +91,9 @@ typedef struct Ipo {
short muteipo, pad; /* muteipo: either 0 or 1 (whether ipo block is muted) */
} Ipo;
-/* NOTE: IpoCurve struct is defined in DNA_curve_types.h, not in here... */
-
-/* sometimes used */
-typedef short IPO_Channel;
+/* ----------- adrcodes (for matching ipo-curves to data) ------------- */
/* defines: are these duped or new? */
-
#define IPOBUTY 17
#define TOB_IPO 1
@@ -64,7 +104,7 @@ typedef short IPO_Channel;
#define IPO_DISPBITS 2
#define IPO_DISPTIME 3
-/* ******************** */
+/* ********** Object (ID_OB) ********** */
#define OB_TOTIPO 30
#define OB_TOTNAM 30
@@ -110,7 +150,7 @@ typedef short IPO_Channel;
#define OB_ROT_DIFF 100
-/* ******************** */
+/* ********** Material (ID_MA) ********** */
#define MA_TOTIPO 40
#define MA_TOTNAM 26
@@ -142,16 +182,26 @@ typedef short IPO_Channel;
#define MA_FRESTRAI 25
#define MA_ADD 26
-#define MA_MAP1 0x20
-#define MA_MAP2 0x40
-#define MA_MAP3 0x80
-#define MA_MAP4 0x100
-#define MA_MAP5 0x200
-#define MA_MAP6 0x400
-#define MA_MAP7 0x800
-#define MA_MAP8 0x1000
-#define MA_MAP9 0x2000
-#define MA_MAP10 0x4000
+#define MA_MAP1 (1<<5)
+#define MA_MAP2 (1<<6)
+#define MA_MAP3 (1<<7)
+#define MA_MAP4 (1<<8)
+#define MA_MAP5 (1<<9)
+#define MA_MAP6 (1<<10)
+#define MA_MAP7 (1<<11)
+#define MA_MAP8 (1<<12)
+#define MA_MAP9 (1<<13)
+#define MA_MAP10 (1<<14)
+#define MA_MAP11 (1<<15)
+#define MA_MAP12 (1<<16)
+#define MA_MAP13 (1<<17)
+#define MA_MAP14 (1<<18)
+#define MA_MAP15 (1<<19)
+#define MA_MAP16 (1<<20)
+#define MA_MAP17 (1<<21)
+#define MA_MAP18 (1<<22)
+
+/* ********** Texture Slots (MTex) ********** */
#define TEX_TOTNAM 14
@@ -171,7 +221,7 @@ typedef short IPO_Channel;
#define MAP_VARF 13
#define MAP_DISP 14
-/* ******************** */
+/* ********** Texture (ID_TE) ********** */
#define TE_TOTIPO 26
#define TE_TOTNAM 26
@@ -208,21 +258,21 @@ typedef short IPO_Channel;
#define TE_BRIGHT 25
#define TE_CONTRA 26
-/* ******************** */
+/* ******** Sequence (ID_SEQ) ********** */
#define SEQ_TOTIPO 1
#define SEQ_TOTNAM 1
#define SEQ_FAC1 1
-/* ******************** */
+/* ********* Curve (ID_CU) *********** */
#define CU_TOTIPO 1
#define CU_TOTNAM 1
#define CU_SPEED 1
-/* ******************** */
+/* ********* ShapeKey (ID_KE) *********** */
#define KEY_TOTIPO 64
#define KEY_TOTNAM 64
@@ -230,7 +280,7 @@ typedef short IPO_Channel;
#define KEY_SPEED 0
#define KEY_NR 1
-/* ******************** */
+/* ********* World (ID_WO) *********** */
#define WO_TOTIPO 29
#define WO_TOTNAM 16
@@ -255,7 +305,7 @@ typedef short IPO_Channel;
#define WO_STARDIST 15
#define WO_STARSIZE 16
-/* ******************** */
+/* ********** Lamp (ID_LA) ********** */
#define LA_TOTIPO 21
#define LA_TOTNAM 10
@@ -271,9 +321,8 @@ typedef short IPO_Channel;
#define LA_QUAD2 9
#define LA_HALOINT 10
-/* ******************** */
+/* ********* Camera (ID_CA) ************ */
-/* yafray: totipo & totnam +2 because of added curves */
#define CAM_TOTIPO 7
#define CAM_TOTNAM 7
@@ -288,7 +337,7 @@ typedef short IPO_Channel;
#define CAM_SHIFT_X 6
#define CAM_SHIFT_Y 7
-/* ******************** */
+/* ********* Sound (ID_SO) *********** */
#define SND_TOTIPO 4
#define SND_TOTNAM 4
@@ -298,9 +347,9 @@ typedef short IPO_Channel;
#define SND_PANNING 3
#define SND_ATTEN 4
-/* ******************** */
+/* ******* PoseChannel (ID_PO) ********* */
-#define AC_TOTIPO 10 /* __NLA */
+#define AC_TOTIPO 10
#define AC_TOTNAM 10
#define AC_LOC_X 1
@@ -316,28 +365,18 @@ typedef short IPO_Channel;
#define AC_QUAT_Y 27
#define AC_QUAT_Z 28
-/* ******************** */
-#define CO_TOTIPO 2 /* Constraint Ipos */
+/* ******** Constraint (ID_CO) ********** */
+
+#define CO_TOTIPO 2
#define CO_TOTNAM 2
#define CO_ENFORCE 1
#define CO_HEADTAIL 2
-/*
-#define CO_TIME 2
-#define CO_OFFSET_X 3
-#define CO_OFFSET_Y 4
-#define CO_OFFSET_Z 5
-#define CO_ORIENT_X 6
-#define CO_ORIENT_Y 7
-#define CO_ORIENT_Z 8
-#define CO_ROLL 9
-*/
-/* ******************** */
-/* fluidsim ipos NT */
+/* ****** FluidSim (ID_FLUIDSIM) ****** */
-#define FLUIDSIM_TOTIPO 9
-#define FLUIDSIM_TOTNAM 9
+#define FLUIDSIM_TOTIPO 13
+#define FLUIDSIM_TOTNAM 13
#define FLUIDSIM_VISC 1
#define FLUIDSIM_TIME 2
@@ -352,10 +391,17 @@ typedef short IPO_Channel;
#define FLUIDSIM_ACTIVE 9
+#define FLUIDSIM_ATTR_FORCE_STR 10
+#define FLUIDSIM_ATTR_FORCE_RADIUS 11
+#define FLUIDSIM_VEL_FORCE_STR 12
+#define FLUIDSIM_VEL_FORCE_RADIUS 13
+
/* ******************** */
/* particle ipos */
-#define PART_TOTIPO 19
-#define PART_TOTNAM 19
+
+/* ******* Particle (ID_PA) ******** */
+#define PART_TOTIPO 25
+#define PART_TOTNAM 25
#define PART_EMIT_FREQ 1
#define PART_EMIT_LIFE 2
@@ -381,9 +427,18 @@ typedef short IPO_Channel;
#define PART_BB_TILT 19
+#define PART_PD_FSTR 20
+#define PART_PD_FFALL 21
+#define PART_PD_FMAXD 22
+
+#define PART_PD2_FSTR 23
+#define PART_PD2_FFALL 24
+#define PART_PD2_FMAXD 25
+
+
+/* -------------------- Defines: Flags and Types ------------------ */
-/* these are IpoCurve specific */
-/* **************** IPO ********************* */
+/* ----- IPO Curve Defines ------- */
/* icu->vartype */
#define IPO_CHAR 0
@@ -393,6 +448,7 @@ typedef short IPO_Channel;
#define IPO_FLOAT 4
#define IPO_DOUBLE 5
#define IPO_FLOAT_DEGR 6
+
/* very special case, in keys */
#define IPO_BEZTRIPLE 100
#define IPO_BPOINT 101
@@ -407,7 +463,8 @@ typedef short IPO_Channel;
#define IPO_CONST 0
#define IPO_LIN 1
#define IPO_BEZ 2
-#define IPO_MIXED 3 /* not used yet */
+ /* not used yet */
+#define IPO_MIXED 3
/* icu->extrap */
#define IPO_HORIZ 0
@@ -425,6 +482,19 @@ typedef short IPO_Channel;
#define IPO_PROTECT 64
#define IPO_MUTE 128
+/* ---------- IPO Drivers ----------- */
+
+/* offset in driver->name for finding second posechannel for rot-diff */
+#define DRIVER_NAME_OFFS 32
+
+/* driver->type */
+#define IPO_DRIVER_TYPE_NORMAL 0
+#define IPO_DRIVER_TYPE_PYTHON 1
+
+/* driver->flag */
+ /* invalid flag: currently only used for buggy pydriver expressions */
+#define IPO_DRIVER_FLAG_INVALID (1<<0)
+
#endif
diff --git a/source/blender/makesdna/DNA_lamp_types.h b/source/blender/makesdna/DNA_lamp_types.h
index c00dae08eb4..f8f2255c1a7 100644
--- a/source/blender/makesdna/DNA_lamp_types.h
+++ b/source/blender/makesdna/DNA_lamp_types.h
@@ -35,7 +35,7 @@
#include "DNA_scriptlink_types.h"
#ifndef MAX_MTEX
-#define MAX_MTEX 10
+#define MAX_MTEX 18
#endif
struct MTex;
@@ -45,20 +45,21 @@ struct CurveMapping;
typedef struct Lamp {
ID id;
- short type, mode;
+ short type, pad3;
+ int mode;
short colormodel, totex;
float r, g, b, k;
+ float shdwr, shdwg, shdwb, shdwpad;
float energy, dist, spotsize, spotblend;
float haint;
float att1, att2; /* Quad1 and Quad2 attenuation */
- int pad2;
struct CurveMapping *curfalloff;
short falloff_type;
- short pad3;
+ short pad2;
float clipsta, clipend, shadspotsize;
float bias, soft;
@@ -78,7 +79,7 @@ typedef struct Lamp {
/* sun/sky */
short sun_effect_type;
- short atm_pad[3];
+ short skyblendtype;
float horizon_brightness;
float spread;
float sun_brightness;
@@ -89,8 +90,10 @@ typedef struct Lamp {
float atm_inscattering_factor;
float atm_extinction_factor;
float atm_distance_factor;
-
-
+ float skyblendfac;
+ float sky_exposure;
+ short sky_colorspace, pad4;
+
/* yafray: photonlight params */
int YF_numphotons, YF_numsearch;
short YF_phdepth, YF_useqmc, YF_bufsize, YF_pad;
@@ -99,7 +102,7 @@ typedef struct Lamp {
float YF_glowint, YF_glowofs;
short YF_glowtype, YF_pad2;
- struct MTex *mtex[10];
+ struct MTex *mtex[18]; /* MAX_MTEX */
struct Ipo *ipo;
/* preview */
@@ -137,6 +140,13 @@ typedef struct Lamp {
/* yafray: lamp shadowbuffer flag, softlight */
/* Since it is used with LOCAL lamp, can't use LA_SHAD */
#define LA_YF_SOFT 16384
+#define LA_LAYER_SHADOW 32768
+#define LA_SHAD_TEX (1<<16)
+
+/* layer_shadow */
+#define LA_LAYER_SHADOW_BOTH 0
+#define LA_LAYER_SHADOW_CAST 1
+#define LA_LAYER_SHADOW_RECEIVE 2
/* sun effect type*/
#define LA_SUN_EFFECT_SKY 1
@@ -184,6 +194,7 @@ typedef struct Lamp {
/* mapto */
#define LAMAP_COL 1
+#define LAMAP_SHAD 2
#endif /* DNA_LAMP_TYPES_H */
diff --git a/source/blender/makesdna/DNA_material_types.h b/source/blender/makesdna/DNA_material_types.h
index 9412a09d0f4..aa847050581 100644
--- a/source/blender/makesdna/DNA_material_types.h
+++ b/source/blender/makesdna/DNA_material_types.h
@@ -36,7 +36,7 @@
#include "DNA_listBase.h"
#ifndef MAX_MTEX
-#define MAX_MTEX 10
+#define MAX_MTEX 18
#endif
struct MTex;
@@ -88,11 +88,11 @@ typedef struct Material {
float sbias; /* shadow bias to prevent terminator prob */
float lbias; /* factor to multiply lampbias with (0.0 = no mult) */
float shad_alpha; /* in use for irregular shadowbuffer */
- float padf; /* free padding, take me! */
+ int septex;
/* for buttons and render*/
char rgbsel, texact, pr_type, use_nodes;
- short pr_back, pr_lamp, septex, ml_flag; /* ml_flag is for disable base material */
+ short pr_back, pr_lamp, pad4, ml_flag; /* ml_flag is for disable base material */
/* shaders */
short diff_shader, spec_shader;
@@ -110,7 +110,7 @@ typedef struct Material {
short ramp_show, pad3;
float rampfac_col, rampfac_spec;
- struct MTex *mtex[10];
+ struct MTex *mtex[18]; /* MAX_MTEX */
struct bNodeTree *nodetree;
struct Ipo *ipo;
struct Group *group; /* light group */
@@ -133,6 +133,8 @@ typedef struct Material {
int YF_dsmp, YF_preset, YF_djit;
ScriptLink scriptlink;
+
+ ListBase gpumaterial; /* runtime */
} Material;
/* **************** MATERIAL ********************* */
@@ -203,6 +205,7 @@ typedef struct Material {
/* shade_flag */
#define MA_CUBIC 1
+#define MA_OBCOLOR 2
/* diff_shader */
#define MA_DIFF_LAMBERT 0
@@ -317,6 +320,7 @@ typedef struct Material {
#define MA_LAMP 6
#define MA_SKY 7
#define MA_HAIR 10
+#define MA_ATMOS 11
/* pr_back */
#define MA_DARK 1
diff --git a/source/blender/makesdna/DNA_meshdata_types.h b/source/blender/makesdna/DNA_meshdata_types.h
index 4e427ed733c..fc686a4cc10 100644
--- a/source/blender/makesdna/DNA_meshdata_types.h
+++ b/source/blender/makesdna/DNA_meshdata_types.h
@@ -82,6 +82,7 @@ typedef struct MLoopUV{
typedef struct MLoopCol{
char a, r, g, b;
+ int pad; /*waste!*/
}MLoopCol;
typedef struct MSticky {
diff --git a/source/blender/makesdna/DNA_modifier_types.h b/source/blender/makesdna/DNA_modifier_types.h
index a44d9793062..ae07434a37f 100644
--- a/source/blender/makesdna/DNA_modifier_types.h
+++ b/source/blender/makesdna/DNA_modifier_types.h
@@ -35,6 +35,10 @@ typedef enum ModifierType {
eModifierType_Cloth,
eModifierType_Collision,
eModifierType_Bevel,
+ eModifierType_Shrinkwrap,
+ eModifierType_Fluidsim,
+ eModifierType_Mask,
+ eModifierType_SimpleDeform,
NUM_MODIFIER_TYPES
} ModifierType;
@@ -103,6 +107,24 @@ typedef struct BuildModifierData {
int randomize, seed;
} BuildModifierData;
+/* Mask Modifier */
+typedef struct MaskModifierData {
+ ModifierData modifier;
+
+ struct Object *ob_arm; /* armature to use to in place of hardcoded vgroup */
+ char vgroup[32]; /* name of vertex group to use to mask */
+
+ int mode; /* using armature or hardcoded vgroup */
+ int flag; /* flags for various things */
+} MaskModifierData;
+
+/* Mask Modifier -> mode */
+#define MOD_MASK_MODE_VGROUP 0
+#define MOD_MASK_MODE_ARM 1
+
+/* Mask Modifier -> flag */
+#define MOD_MASK_INV (1<<0)
+
typedef struct ArrayModifierData {
ModifierData modifier;
@@ -390,7 +412,8 @@ typedef struct CollisionModifierData {
unsigned int numverts;
unsigned int numfaces;
- int pad;
+ short absorption; /* used for forces, in % */
+ short pad;
float time; /* cfra time of modifier */
struct BVHTree *bvhtree; /* bounding volume hierarchy for this cloth object */
} CollisionModifierData;
@@ -490,4 +513,80 @@ typedef struct ExplodeModifierData {
float protect;
} ExplodeModifierData;
+typedef struct FluidsimModifierData {
+ ModifierData modifier;
+
+ struct FluidsimSettings *fss; /* definition is is DNA_object_fluidsim.h */
+ struct PointCache *point_cache; /* definition is in DNA_object_force.h */
+} FluidsimModifierData;
+
+typedef struct ShrinkwrapModifierData {
+ ModifierData modifier;
+
+ struct Object *target; /* shrink target */
+ struct Object *auxTarget; /* additional shrink target */
+ char vgroup_name[32]; /* optional vertexgroup name */
+ float keepDist; /* distance offset to keep from mesh/projection point */
+ short shrinkType; /* shrink type projection */
+ short shrinkOpts; /* shrink options */
+ char projAxis; /* axis to project over */
+
+ /*
+ * if using projection over vertex normal this controls the
+ * the level of subsurface that must be done before getting the
+ * vertex coordinates and normal
+ */
+ char subsurfLevels;
+
+ char pad[6];
+
+} ShrinkwrapModifierData;
+
+/* Shrinkwrap->shrinkType */
+#define MOD_SHRINKWRAP_NEAREST_SURFACE 0
+#define MOD_SHRINKWRAP_PROJECT 1
+#define MOD_SHRINKWRAP_NEAREST_VERTEX 2
+
+/* Shrinkwrap->shrinkOpts */
+#define MOD_SHRINKWRAP_PROJECT_ALLOW_POS_DIR (1<<0) /* allow shrinkwrap to move the vertex in the positive direction of axis */
+#define MOD_SHRINKWRAP_PROJECT_ALLOW_NEG_DIR (1<<1) /* allow shrinkwrap to move the vertex in the negative direction of axis */
+
+#define MOD_SHRINKWRAP_CULL_TARGET_FRONTFACE (1<<3) /* ignore vertex moves if a vertex ends projected on a front face of the target */
+#define MOD_SHRINKWRAP_CULL_TARGET_BACKFACE (1<<4) /* ignore vertex moves if a vertex ends projected on a back face of the target */
+
+#define MOD_SHRINKWRAP_KEEP_ABOVE_SURFACE (1<<5) /* distance is measure to the front face of the target */
+
+#define MOD_SHRINKWRAP_PROJECT_OVER_X_AXIS (1<<0)
+#define MOD_SHRINKWRAP_PROJECT_OVER_Y_AXIS (1<<1)
+#define MOD_SHRINKWRAP_PROJECT_OVER_Z_AXIS (1<<2)
+#define MOD_SHRINKWRAP_PROJECT_OVER_NORMAL 0 /* projection over normal is used if no axis is selected */
+
+
+typedef struct SimpleDeformModifierData {
+ ModifierData modifier;
+
+ struct Object *origin; /* object to control the origin of modifier space coordinates */
+ char vgroup_name[32]; /* optional vertexgroup name */
+ float factor; /* factors to control simple deforms */
+ float limit[2]; /* lower and upper limit */
+
+ char mode; /* deform function */
+ char axis; /* lock axis (for taper and strech) */
+ char originOpts; /* originOptions */
+ char pad;
+
+} SimpleDeformModifierData;
+
+#define MOD_SIMPLEDEFORM_MODE_TWIST 1
+#define MOD_SIMPLEDEFORM_MODE_BEND 2
+#define MOD_SIMPLEDEFORM_MODE_TAPER 3
+#define MOD_SIMPLEDEFORM_MODE_STRETCH 4
+
+#define MOD_SIMPLEDEFORM_LOCK_AXIS_X (1<<0)
+#define MOD_SIMPLEDEFORM_LOCK_AXIS_Y (1<<1)
+
+/* indicates whether simple deform should use the local
+ coordinates or global coordinates of origin */
+#define MOD_SIMPLEDEFORM_ORIGIN_LOCAL (1<<0)
+
#endif
diff --git a/source/blender/makesdna/DNA_object_fluidsim.h b/source/blender/makesdna/DNA_object_fluidsim.h
index 9b1e4fb56cb..fde1ce57875 100644
--- a/source/blender/makesdna/DNA_object_fluidsim.h
+++ b/source/blender/makesdna/DNA_object_fluidsim.h
@@ -108,7 +108,7 @@ typedef struct FluidsimSettings {
float surfaceSmoothing;
/* number of surface subdivisions*/
int surfaceSubdivs;
- int unusedDNADummy;
+ int flag; /* GUI flags */
/* particle display - size scaling, and alpha influence */
float particleInfSize, particleInfAlpha;
@@ -117,6 +117,18 @@ typedef struct FluidsimSettings {
/* save fluidsurface normals in mvert.no, and surface vertex velocities (if available) in mvert.co */
struct MVert *meshSurfNormals;
+
+ /* Fluid control settings */
+ float cpsTimeStart;
+ float cpsTimeEnd;
+ float cpsQuality;
+
+ float attractforceStrength;
+ float attractforceRadius;
+ float velocityforceStrength;
+ float velocityforceRadius;
+
+ int lastgoodframe;
} FluidsimSettings;
@@ -128,6 +140,7 @@ typedef struct FluidsimSettings {
#define OB_FLUIDSIM_INFLOW 16
#define OB_FLUIDSIM_OUTFLOW 32
#define OB_FLUIDSIM_PARTICLE 64
+#define OB_FLUIDSIM_CONTROL 128
#define OB_TYPEFLAG_START 0
#define OB_FSGEO_THIN (1<<(OB_TYPEFLAG_START+1))
@@ -145,6 +158,9 @@ typedef struct FluidsimSettings {
#define OB_FSPART_NEWPART (1<<3)
#define OB_FSPART_FLOAT (1<<4)
+// new fluid bit flags for fss->flags - dg
+#define OB_FLUIDSIM_REVERSE (1 << 0)
+
#ifdef __cplusplus
}
#endif
diff --git a/source/blender/makesdna/DNA_object_force.h b/source/blender/makesdna/DNA_object_force.h
index dc6c2bcbcc0..21c5242a703 100644
--- a/source/blender/makesdna/DNA_object_force.h
+++ b/source/blender/makesdna/DNA_object_force.h
@@ -67,6 +67,9 @@ typedef struct PartDeflect {
float tex_nabla;
short tex_mode, kink, kink_axis, rt2;
struct Tex *tex; /* Texture of the texture effector */
+ struct RNG *rng; /* random noise generator for e.g. wind */
+ float f_noise; /* noise of force (currently used for wind) */
+ int pad;
} PartDeflect;
typedef struct PointCache {
@@ -81,6 +84,58 @@ typedef struct SBVertex {
float vec[4];
} SBVertex;
+typedef struct BulletSoftBody {
+ int flag; /* various boolean options */
+ float linStiff; /* linear stiffness 0..1 */
+ float angStiff; /* angular stiffness 0..1 */
+ float volume; /* volume preservation 0..1 */
+
+ int viterations; /* Velocities solver iterations */
+ int piterations; /* Positions solver iterations */
+ int diterations; /* Drift solver iterations */
+ int citerations; /* Cluster solver iterations */
+
+ float kSRHR_CL; /* Soft vs rigid hardness [0,1] (cluster only) */
+ float kSKHR_CL; /* Soft vs kinetic hardness [0,1] (cluster only) */
+ float kSSHR_CL; /* Soft vs soft hardness [0,1] (cluster only) */
+ float kSR_SPLT_CL; /* Soft vs rigid impulse split [0,1] (cluster only) */
+
+ float kSK_SPLT_CL; /* Soft vs rigid impulse split [0,1] (cluster only) */
+ float kSS_SPLT_CL; /* Soft vs rigid impulse split [0,1] (cluster only) */
+ float kVCF; /* Velocities correction factor (Baumgarte) */
+ float kDP; /* Damping coefficient [0,1] */
+
+ float kDG; /* Drag coefficient [0,+inf] */
+ float kLF; /* Lift coefficient [0,+inf] */
+ float kPR; /* Pressure coefficient [-inf,+inf] */
+ float kVC; /* Volume conversation coefficient [0,+inf] */
+
+ float kDF; /* Dynamic friction coefficient [0,1] */
+ float kMT; /* Pose matching coefficient [0,1] */
+ float kCHR; /* Rigid contacts hardness [0,1] */
+ float kKHR; /* Kinetic contacts hardness [0,1] */
+
+ float kSHR; /* Soft contacts hardness [0,1] */
+ float kAHR; /* Anchors hardness [0,1] */
+ int collisionflags; /* Vertex/Face or Signed Distance Field(SDF) or Clusters, Soft versus Soft or Rigid */
+ int numclusteriterations; /* number of iterations to refine collision clusters*/
+
+} BulletSoftBody;
+
+/* BulletSoftBody.flag */
+#define OB_BSB_SHAPE_MATCHING 2
+#define OB_BSB_UNUSED 4
+#define OB_BSB_BENDING_CONSTRAINTS 8
+#define OB_BSB_AERO_VPOINT 16 /* aero model, Vertex normals are oriented toward velocity*/
+#define OB_BSB_AERO_VTWOSIDE 32 /* aero model, Vertex normals are flipped to match velocity */
+
+/* BulletSoftBody.collisionflags */
+#define OB_BSB_COL_SDF_RS 2 /* SDF based rigid vs soft */
+#define OB_BSB_COL_CL_RS 4 /* Cluster based rigid vs soft */
+#define OB_BSB_COL_CL_SS 8 /* Cluster based soft vs soft */
+#define OB_BSB_COL_VF_SS 16 /* Vertex/Face based soft vs soft */
+
+
typedef struct SoftBody {
struct ParticleSystem *particles; /* particlesystem softbody */
@@ -153,8 +208,8 @@ typedef struct SoftBody {
#define PFIELD_GUIDE 5
#define PFIELD_TEXTURE 6
#define PFIELD_HARMONIC 7
-#define PFIELD_NUCLEAR 8
-#define PFIELD_MDIPOLE 9
+#define PFIELD_CHARGE 8
+#define PFIELD_LENNARDJ 9
/* pd->flag: various settings */
diff --git a/source/blender/makesdna/DNA_object_types.h b/source/blender/makesdna/DNA_object_types.h
index 85c49a03569..fad5c020727 100644
--- a/source/blender/makesdna/DNA_object_types.h
+++ b/source/blender/makesdna/DNA_object_types.h
@@ -156,7 +156,9 @@ typedef struct Object {
float formfactor;
float rdamping, sizefac;
-
+ float margin;
+ int pad3;
+
char dt, dtx;
char totcol; /* copy of mesh or curve or meta */
char actcol; /* currently selected material in the user interface */
@@ -191,7 +193,9 @@ typedef struct Object {
* bit 15: Always ignore activity culling
*/
int gameflag2;
- short softflag; /* softboday settings */
+ struct BulletSoftBody *bsoft; /* settings for game engine bullet soft body */
+
+ short softflag; /* softbody settings */
short recalc; /* dependency flag */
float anisotropicFriction[3];
@@ -210,7 +214,8 @@ typedef struct Object {
short shapenr, shapeflag; /* current shape key for menu or pinned, flag for pinning */
float smoothresh; /* smoothresh is phong interpolation ray_shadow correction in render */
- short recalco, pad4; /* recalco for temp storage of ob->recalc, bad design warning */
+ short recalco; /* recalco for temp storage of ob->recalc, bad design warning */
+ short body_type; /* for now used to temporarily holds the type of collision object */
struct FluidsimSettings *fluidsimSettings; /* if fluidsim enabled, store additional settings */
@@ -223,6 +228,8 @@ typedef struct Object {
/*#ifdef WITH_VERSE*/
void *vnode; /* pointer at object VerseNode */
/*#endif*/
+
+ ListBase gpulamp; /* runtime, for lamps only */
} Object;
/* Warning, this is not used anymore because hooks are now modifiers */
@@ -406,6 +413,7 @@ extern Object workob;
#define OB_RECALC_TIME 4
#define OB_RECALC 7
+
/* ob->gameflag */
#define OB_DYNAMIC 1
#define OB_CHILD 2
@@ -425,11 +433,21 @@ extern Object workob;
#define OB_PROP 16384
#define OB_MAINACTOR 32768
+#define OB_COLLISION 65536
+#define OB_SOFT_BODY 0x20000
+
/* ob->gameflag2 */
#define OB_NEVER_DO_ACTIVITY_CULLING 1
#define OB_LIFE (OB_PROP|OB_DYNAMIC|OB_ACTOR|OB_MAINACTOR|OB_CHILD)
+/* ob->body_type */
+#define OB_BODY_TYPE_NO_COLLISION 0
+#define OB_BODY_TYPE_STATIC 1
+#define OB_BODY_TYPE_DYNAMIC 2
+#define OB_BODY_TYPE_RIGID 3
+#define OB_BODY_TYPE_SOFT 4
+
/* ob->scavisflag */
#define OB_VIS_SENS 1
#define OB_VIS_CONT 2
@@ -444,6 +462,7 @@ extern Object workob;
#define OB_SHOWCONT 2048
#define OB_SETSTBIT 4096
#define OB_INITSTBIT 8192
+#define OB_DEBUGSTATE 16384
/* ob->restrictflag */
#define OB_RESTRICT_VIEW 1
diff --git a/source/blender/makesdna/DNA_particle_types.h b/source/blender/makesdna/DNA_particle_types.h
index 4f62cd084cc..7dd69b2151c 100644
--- a/source/blender/makesdna/DNA_particle_types.h
+++ b/source/blender/makesdna/DNA_particle_types.h
@@ -66,6 +66,8 @@ typedef struct ParticleData {
ParticleKey state; /* normally current global coordinates or */
/* in sticky object space if dead & sticky */
+ ParticleKey prev_state; /* previous state */
+
HairKey *hair; /* hair vertices */
ParticleKey *keys; /* keyed states */
@@ -166,6 +168,7 @@ typedef struct ParticleSettings {
struct Object *bb_ob;
struct Ipo *ipo;
struct PartDeflect *pd;
+ struct PartDeflect *pd2;
} ParticleSettings;
typedef struct ParticleSystem{ /* note, make sure all (runtime) are NULL's in copy_particlesystem */
@@ -264,6 +267,8 @@ typedef struct ParticleSystem{ /* note, make sure all (runtime) are NULL's in
#define PART_CHILD_RENDER (1<<29)
#define PART_CHILD_GUIDE (1<<30)
+#define PART_SELF_EFFECT (1<<22)
+
/* part->rotfrom */
#define PART_ROT_KEYS 0 /* interpolate directly from keys */
#define PART_ROT_ZINCR 1 /* same as zdir but done incrementally from previous position */
@@ -413,6 +418,7 @@ typedef struct ParticleSystem{ /* note, make sure all (runtime) are NULL's in
#define PARS_DEAD 1
#define PARS_UNBORN 2
#define PARS_ALIVE 3
+#define PARS_DYING 4
/* psys->vg */
#define PSYS_TOT_VG 12
diff --git a/source/blender/makesdna/DNA_scene_types.h b/source/blender/makesdna/DNA_scene_types.h
index 5acc4b4acbe..c1c164f136f 100644
--- a/source/blender/makesdna/DNA_scene_types.h
+++ b/source/blender/makesdna/DNA_scene_types.h
@@ -470,7 +470,7 @@ typedef struct SculptData
struct SculptSession *session;
/* Pointers to all of sculptmodes's textures */
- struct MTex *mtex[10];
+ struct MTex *mtex[18];
/* Editable brush shape */
struct CurveMapping *cumap;
@@ -526,7 +526,9 @@ typedef struct Scene {
float editbutsize; /* size of normals */
short selectmode; /* for mesh only! */
short proportional, prop_mode;
- short automerge, pad5, pad6, pad7;
+ short automerge, pad5, pad6;
+
+ short autokey_mode; /* mode for autokeying (defines in DNA_userdef_types.h */
short use_nodes;
@@ -559,6 +561,10 @@ typedef struct Scene {
/* Sculptmode data */
struct SculptData sculptdata;
+
+ /* frame step. */
+ int frame_step;
+ int pad;
} Scene;
@@ -796,6 +802,7 @@ typedef struct Scene {
/* toolsettings->uvcalc_flag */
#define UVCALC_FILLHOLES 1
#define UVCALC_NO_ASPECT_CORRECT 2 /* would call this UVCALC_ASPECT_CORRECT, except it should be default with old file */
+#define UVCALC_TRANSFORM_CORRECT 4 /* adjust UV's while transforming to avoid distortion */
/* toolsettings->edge_mode */
#define EDGE_MODE_SELECT 0
diff --git a/source/blender/makesdna/DNA_sensor_types.h b/source/blender/makesdna/DNA_sensor_types.h
index c0306f43730..1fd97fe0158 100644
--- a/source/blender/makesdna/DNA_sensor_types.h
+++ b/source/blender/makesdna/DNA_sensor_types.h
@@ -88,6 +88,13 @@ typedef struct bActuatorSensor {
char name[32];
} bActuatorSensor;
+typedef struct bDelaySensor {
+ short delay;
+ short duration;
+ short flag;
+ short pad;
+} bDelaySensor;
+
typedef struct bCollisionSensor {
char name[32]; /* property name */
char materialName[32]; /* material */
@@ -157,7 +164,7 @@ typedef struct bSensor {
typedef struct bJoystickSensor {
char name[32];
short type;
- short pad;
+ short joyindex;
int axis;
int axisf;
int button;
@@ -204,12 +211,14 @@ typedef struct bJoystickSensor {
#define SENS_MESSAGE 10
#define SENS_JOYSTICK 11
#define SENS_ACTUATOR 12
+#define SENS_DELAY 13
/* sensor->flag */
#define SENS_SHOW 1
#define SENS_DEL 2
#define SENS_NEW 4
#define SENS_NOT 8
#define SENS_VISIBLE 16
+#define SENS_PIN 32
/* sensor->pulse */
#define SENS_PULSE_CONT 0
@@ -229,6 +238,9 @@ typedef struct bJoystickSensor {
* */
/* #define SENS_COLLISION_PROPERTY 0 */
#define SENS_COLLISION_MATERIAL 1
+/* ray specific mode */
+/* X-Ray means that the ray will traverse objects that don't have the property/material */
+#define SENS_RAY_XRAY 2
/* Some stuff for the mouse sensor Type: */
#define BL_SENS_MOUSE_LEFT_BUTTON 1
@@ -254,5 +266,8 @@ typedef struct bJoystickSensor {
#define SENS_JOY_HAT 2
#define SENS_JOY_HAT_DIR 0
+#define SENS_DELAY_REPEAT 1
+// should match JOYINDEX_MAX in SCA_JoystickDefines.h */
+#define SENS_JOY_MAXINDEX 8
#endif
diff --git a/source/blender/makesdna/DNA_space_types.h b/source/blender/makesdna/DNA_space_types.h
index a8694dfb7f5..226a3ecd834 100644
--- a/source/blender/makesdna/DNA_space_types.h
+++ b/source/blender/makesdna/DNA_space_types.h
@@ -247,6 +247,7 @@ typedef struct SpaceImage {
float xof, yof; /* user defined offset, image is centered */
float centx, centy; /* storage for offset while render drawing */
+ struct bGPdata *gpd; /* grease pencil data */
} SpaceImage;
typedef struct SpaceNla {
@@ -275,22 +276,23 @@ typedef struct SpaceText {
struct Text *text;
int top, viewlines;
- short flags, menunr;
-
- int font_id;
+ short flags, menunr;
+ int font_id;
+
int lheight;
int left;
int showlinenrs;
-
int tabnumber;
+
int currtab_set;
int showsyntax;
- int unused_padd;
-
+ int overwrite;
float pix_per_line;
struct rcti txtscroll, txtbar;
+ int wordwrap, doplugins;
+
} SpaceText;
typedef struct Script {
@@ -536,6 +538,7 @@ typedef struct SpaceImaSel {
#define SI_DRAW_TILE 1<<19
#define SI_SMOOTH_UV 1<<20
#define SI_DRAW_STRETCH 1<<21
+#define SI_DISPGP 1<<22
/* SpaceIpo->flag */
#define SIPO_LOCK_VIEW 1<<0
@@ -586,6 +589,7 @@ typedef struct SpaceImaSel {
#define SO_LIBRARIES 7
#define SO_VERSE_SESSION 8
#define SO_VERSE_MS 9
+#define SO_SEQUENCE 10
/* SpaceOops->storeflag */
#define SO_TREESTORE_CLEANUP 1
diff --git a/source/blender/makesdna/DNA_text_types.h b/source/blender/makesdna/DNA_text_types.h
index d1859d22115..48ecccd517a 100644
--- a/source/blender/makesdna/DNA_text_types.h
+++ b/source/blender/makesdna/DNA_text_types.h
@@ -38,25 +38,36 @@ typedef struct TextLine {
struct TextLine *next, *prev;
char *line;
- char *format;
- int len, blen;
+ char *format; /* may be NULL if syntax is off or not yet formatted */
+ int len, blen; /* blen unused */
} TextLine;
+typedef struct TextMarker {
+ struct TextMarker *next, *prev;
+
+ int lineno, start, end, pad1; /* line number and start/end character indices */
+
+ int group, flags; /* see BKE_text.h for flag defines */
+ char color[4], pad[4]; /* draw color of the marker */
+} TextMarker;
+
typedef struct Text {
ID id;
char *name;
-
+
int flags, nlines;
ListBase lines;
TextLine *curl, *sell;
int curc, selc;
+ ListBase markers;
char *undo_buf;
int undo_pos, undo_len;
void *compiled;
+ double mtime;
} Text;
@@ -74,4 +85,12 @@ typedef struct Text {
#define TXT_READONLY 0x0100
#define TXT_FOLLOW 0x0200 /* always follow cursor (console) */
+/* format continuation flags */
+#define TXT_NOCONT 0x00 /* no continuation */
+#define TXT_SNGQUOTSTR 0x01 /* single quotes */
+#define TXT_DBLQUOTSTR 0x02 /* double quotes */
+#define TXT_TRISTR 0x04 /* triplets of quotes: """ or ''' */
+#define TXT_SNGTRISTR 0x05 /*(TXT_TRISTR | TXT_SNGQUOTSTR)*/
+#define TXT_DBLTRISTR 0x06 /*(TXT_TRISTR | TXT_DBLQUOTSTR)*/
+
#endif
diff --git a/source/blender/makesdna/DNA_texture_types.h b/source/blender/makesdna/DNA_texture_types.h
index 8a79ce845d7..111dc08ee02 100644
--- a/source/blender/makesdna/DNA_texture_types.h
+++ b/source/blender/makesdna/DNA_texture_types.h
@@ -367,6 +367,7 @@ typedef struct TexMapping {
#define MTEX_BLEND_SAT 11
#define MTEX_BLEND_VAL 12
#define MTEX_BLEND_COLOR 13
+#define MTEX_NUM_BLENDTYPES 14
/* **************** EnvMap ********************* */
diff --git a/source/blender/makesdna/DNA_userdef_types.h b/source/blender/makesdna/DNA_userdef_types.h
index cd1c047dac9..ead1df4ddac 100644
--- a/source/blender/makesdna/DNA_userdef_types.h
+++ b/source/blender/makesdna/DNA_userdef_types.h
@@ -101,6 +101,11 @@ typedef struct ThemeSpace {
char movie[4], image[4], scene[4], audio[4]; // for sequence editor
char effect[4], plugin[4], transition[4], meta[4];
char editmesh_active[4];
+
+ char handle_vertex[4];
+ char handle_vertex_select[4];
+ char handle_vertex_size;
+ char hpad[7];
} ThemeSpace;
@@ -183,6 +188,8 @@ typedef struct UserDef {
char fontname[256]; // FILE_MAXDIR+FILE length
struct ListBase themes;
short undosteps;
+ short undomemory;
+ short gp_manhattendist, gp_euclideandist, pad;
short curssize;
short tb_leftmouse, tb_rightmouse;
struct SolidLight light[3];
@@ -262,6 +269,7 @@ extern UserDef U; /* from usiblender.c !!!! */
#define USER_GLOBALUNDO (1 << 13)
#define USER_ORBIT_SELECTION (1 << 14)
// old flag for #define USER_KEYINSERTAVAI (1 << 15)
+#define USER_ORBIT_ZBUF (1 << 15)
#define USER_HIDE_DOT (1 << 16)
#define USER_SHOW_ROTVIEWICON (1 << 17)
#define USER_SHOW_VIEWPORTNAME (1 << 18)
@@ -282,10 +290,6 @@ extern UserDef U; /* from usiblender.c !!!! */
#define AUTOKEY_FLAG_INSERTNEEDED (1<<1)
#define AUTOKEY_FLAG_AUTOMATKEY (1<<2)
-/* Auto-Keying macros */
-#define IS_AUTOKEY_ON (U.autokey_mode & AUTOKEY_ON)
-#define IS_AUTOKEY_MODE(mode) (U.autokey_mode == AUTOKEY_MODE_##mode)
-#define IS_AUTOKEY_FLAG(flag) (U.autokey_flag == AUTOKEY_FLAG_##flag)
/* transopts */
#define USER_TR_TOOLTIPS (1 << 0)
diff --git a/source/blender/makesdna/DNA_view3d_types.h b/source/blender/makesdna/DNA_view3d_types.h
index 135272b9ac2..ae0dcfc3f0e 100644
--- a/source/blender/makesdna/DNA_view3d_types.h
+++ b/source/blender/makesdna/DNA_view3d_types.h
@@ -86,7 +86,8 @@ typedef struct View3D {
float winmat1[4][4]; // persp(1) storage, for swap matrices
float viewmat1[4][4];
- float viewquat[4], dist, zfac, pad0; /* zfac is initgrabz() result */
+ float viewquat[4], dist, zfac; /* zfac is initgrabz() result */
+ int lay_used; /* used while drawing */
short persp;
short view;
@@ -136,13 +137,19 @@ typedef struct View3D {
short gridsubdiv; /* Number of subdivisions in the grid between each highlighted grid line */
- short pad3;
+ short keyflags; /* flags for display of keyframes */
char ndofmode; /* mode of transform for 6DOF devices -1 not found, 0 normal, 1 fly, 2 ob transform */
char ndoffilter; /*filter for 6DOF devices 0 normal, 1 dominant */
void *properties_storage; /* Nkey panel stores stuff here, not in file */
struct bGPdata *gpd; /* Grease-Pencil Data (annotation layers) */
+
+ /* last view */
+ float lviewquat[4];
+ short lpersp, lview;
+ short lastview_set;
+ short pad5;
} View3D;
diff --git a/source/blender/makesdna/DNA_world_types.h b/source/blender/makesdna/DNA_world_types.h
index 26b3f051944..ab7e25190ad 100644
--- a/source/blender/makesdna/DNA_world_types.h
+++ b/source/blender/makesdna/DNA_world_types.h
@@ -38,7 +38,7 @@ struct Ipo;
struct MTex;
#ifndef MAX_MTEX
-#define MAX_MTEX 10
+#define MAX_MTEX 18
#endif
@@ -108,7 +108,7 @@ typedef struct World {
struct Ipo *ipo;
- struct MTex *mtex[10];
+ struct MTex *mtex[18]; /* MAX_MTEX */
/* previews */
struct PreviewImage *preview;
diff --git a/source/blender/makesdna/intern/makesdna.c b/source/blender/makesdna/intern/makesdna.c
index 3818d66b39c..b4deb1f2b60 100644
--- a/source/blender/makesdna/intern/makesdna.c
+++ b/source/blender/makesdna/intern/makesdna.c
@@ -55,6 +55,8 @@
#include "MEM_guardedalloc.h"
#include "DNA_sdna_types.h"
+#include "BLO_sys_types.h" // for intptr_t support
+
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
@@ -955,7 +957,7 @@ int make_structDNA(char *baseDirectory, FILE *file)
/* calculate size of datablock with strings */
cp= names[nr_names-1];
cp+= strlen(names[nr_names-1]) + 1; /* +1: null-terminator */
- len= (long) (cp - (char*) names[0]);
+ len= (intptr_t) (cp - (char*) names[0]);
len= (len+3) & ~3;
dna_write(file, names[0], len);
@@ -968,7 +970,7 @@ int make_structDNA(char *baseDirectory, FILE *file)
/* calculate datablock size */
cp= types[nr_types-1];
cp+= strlen(types[nr_types-1]) + 1; /* +1: null-terminator */
- len= (long) (cp - (char*) types[0]);
+ len= (intptr_t) (cp - (char*) types[0]);
len= (len+3) & ~3;
dna_write(file, types[0], len);
@@ -990,7 +992,7 @@ int make_structDNA(char *baseDirectory, FILE *file)
/* calc datablock size */
sp= structs[nr_structs-1];
sp+= 2+ 2*( sp[1] );
- len= (long) ((char*) sp - (char*) structs[0]);
+ len= (intptr_t) ((char*) sp - (char*) structs[0]);
len= (len+3) & ~3;
dna_write(file, structs[0], len);
diff --git a/source/blender/nodes/CMakeLists.txt b/source/blender/nodes/CMakeLists.txt
index 2cb855ed440..cf83804b999 100644
--- a/source/blender/nodes/CMakeLists.txt
+++ b/source/blender/nodes/CMakeLists.txt
@@ -30,7 +30,7 @@ SET(INC
../python ../render/extern/include ../../../intern/decimation/extern
../imbuf ../avi ../../../intern/elbeem/extern
../../../intern/iksolver/extern ../blenloader ../quicktime
- ../blenkernel
+ ../blenkernel ../../../extern/glew/include ../gpu
${SDL_INC}
${ZLIB_INC}
${PYTHON_INC}
diff --git a/source/blender/nodes/SConscript b/source/blender/nodes/SConscript
index 8682f626b80..8af7b67520e 100644
--- a/source/blender/nodes/SConscript
+++ b/source/blender/nodes/SConscript
@@ -11,6 +11,7 @@ incs += ' ../python ../render/extern/include '
incs += ' ../imbuf ../avi '
incs += ' ../blenloader ../quicktime'
incs += ' ../blenkernel ../renderconverter '
+incs += ' ../gpu #/extern/glew/include '
incs += ' ' + env['BF_PYTHON_INC']
diff --git a/source/blender/nodes/intern/CMP_nodes/CMP_tonemap.c b/source/blender/nodes/intern/CMP_nodes/CMP_tonemap.c
index 5e1803a6774..950ad97a397 100644
--- a/source/blender/nodes/intern/CMP_nodes/CMP_tonemap.c
+++ b/source/blender/nodes/intern/CMP_nodes/CMP_tonemap.c
@@ -130,13 +130,16 @@ static void node_composit_exec_tonemap(void *data, bNode *node, bNodeStack **in,
if ((img==NULL) || (out[0]->hasoutput==0)) return;
if (img->type != CB_RGBA)
- new = typecheck_compbuf(img, CB_RGBA);
- else
- new = dupalloc_compbuf(img);
+ img = typecheck_compbuf(img, CB_RGBA);
+
+ new = dupalloc_compbuf(img);
tonemap(node->storage, new, img);
out[0]->data = new;
+
+ if(img!=in[0]->data)
+ free_compbuf(img);
}
static void node_composit_init_tonemap(bNode* node)
diff --git a/source/blender/nodes/intern/CMP_nodes/Makefile b/source/blender/nodes/intern/CMP_nodes/Makefile
index 61b03f237db..8a8d323ac5b 100644
--- a/source/blender/nodes/intern/CMP_nodes/Makefile
+++ b/source/blender/nodes/intern/CMP_nodes/Makefile
@@ -42,4 +42,5 @@ CPPFLAGS += -I../../../blenlib
CPPFLAGS += -I../../../include
CPPFLAGS += -I../../../imbuf
CPPFLAGS += -I../../../render/extern/include
+CPPFLAGS += -I$(NAN_GLEW)/include
CPPFLAGS += -I$(OPENGL_HEADERS)
diff --git a/source/blender/nodes/intern/Makefile b/source/blender/nodes/intern/Makefile
index 7cf2411ed84..6167cf6bc72 100644
--- a/source/blender/nodes/intern/Makefile
+++ b/source/blender/nodes/intern/Makefile
@@ -42,4 +42,6 @@ CPPFLAGS += -I../../blenlib
CPPFLAGS += -I../../include
CPPFLAGS += -I../../imbuf
CPPFLAGS += -I../../render/extern/include
+CPPFLAGS += -I../../gpu
+CPPFLAGS += -I$(NAN_GLEW)/include
CPPFLAGS += -I$(OPENGL_HEADERS)
diff --git a/source/blender/nodes/intern/SHD_nodes/Makefile b/source/blender/nodes/intern/SHD_nodes/Makefile
index 1917e9ba15c..ae3cae029d2 100644
--- a/source/blender/nodes/intern/SHD_nodes/Makefile
+++ b/source/blender/nodes/intern/SHD_nodes/Makefile
@@ -44,4 +44,6 @@ CPPFLAGS += -I../../../blenlib
CPPFLAGS += -I../../../include
CPPFLAGS += -I../../../imbuf
CPPFLAGS += -I../../../render/extern/include
+CPPFLAGS += -I../../../gpu
+CPPFLAGS += -I$(NAN_GLEW)/include
CPPFLAGS += -I$(OPENGL_HEADERS)
diff --git a/source/blender/nodes/intern/SHD_nodes/SHD_camera.c b/source/blender/nodes/intern/SHD_nodes/SHD_camera.c
index 63260ff91ed..20136d75540 100644
--- a/source/blender/nodes/intern/SHD_nodes/SHD_camera.c
+++ b/source/blender/nodes/intern/SHD_nodes/SHD_camera.c
@@ -46,8 +46,13 @@ static void node_shader_exec_camera(void *data, bNode *node, bNodeStack **in, bN
VECCOPY(out[0]->vec, shi->co); /* get view vector */
out[1]->vec[0]= fabs(shi->co[2]); /* get view z-depth */
out[2]->vec[0]= Normalize(out[0]->vec); /* get view distance */
- }
}
+}
+
+static int gpu_shader_camera(GPUMaterial *mat, bNode *node, GPUNodeStack *in, GPUNodeStack *out)
+{
+ return GPU_stack_link(mat, "camera", in, out, GPU_builtin(GPU_VIEW_POSITION));
+}
bNodeType sh_node_camera= {
/* *next,*prev */ NULL, NULL,
@@ -63,6 +68,7 @@ bNodeType sh_node_camera= {
/* initfunc */ NULL,
/* freestoragefunc */ NULL,
/* copystoragefunc */ NULL,
- /* id */ NULL
+ /* id */ NULL, NULL, NULL,
+ /* gpufunc */ gpu_shader_camera
};
diff --git a/source/blender/nodes/intern/SHD_nodes/SHD_curves.c b/source/blender/nodes/intern/SHD_nodes/SHD_curves.c
index b6f1f8d52cd..d277547b636 100644
--- a/source/blender/nodes/intern/SHD_nodes/SHD_curves.c
+++ b/source/blender/nodes/intern/SHD_nodes/SHD_curves.c
@@ -56,6 +56,15 @@ static void node_shader_init_curve_vec(bNode* node)
node->storage= curvemapping_add(3, -1.0f, -1.0f, 1.0f, 1.0f);
}
+static int gpu_shader_curve_vec(GPUMaterial *mat, bNode *node, GPUNodeStack *in, GPUNodeStack *out)
+{
+ float *array;
+ int size;
+
+ curvemapping_table_RGBA(node->storage, &array, &size);
+ return GPU_stack_link(mat, "curves_vec", in, out, GPU_texture(size, array));
+}
+
bNodeType sh_node_curve_vec= {
/* *next,*prev */ NULL, NULL,
/* type code */ SH_NODE_CURVE_VEC,
@@ -70,7 +79,8 @@ bNodeType sh_node_curve_vec= {
/* initfunc */ node_shader_init_curve_vec,
/* freestoragefunc */ node_free_curves,
/* copystoragefunc */ node_copy_curves,
- /* id */ NULL
+ /* id */ NULL, NULL, NULL,
+ /* gpufunc */ gpu_shader_curve_vec
};
@@ -100,6 +110,15 @@ static void node_shader_init_curve_rgb(bNode *node)
node->storage= curvemapping_add(4, 0.0f, 0.0f, 1.0f, 1.0f);
}
+static int gpu_shader_curve_rgb(GPUMaterial *mat, bNode *node, GPUNodeStack *in, GPUNodeStack *out)
+{
+ float *array;
+ int size;
+
+ curvemapping_table_RGBA(node->storage, &array, &size);
+ return GPU_stack_link(mat, "curves_rgb", in, out, GPU_texture(size, array));
+}
+
bNodeType sh_node_curve_rgb= {
/* *next,*prev */ NULL, NULL,
/* type code */ SH_NODE_CURVE_RGB,
@@ -114,6 +133,7 @@ bNodeType sh_node_curve_rgb= {
/* initfunc */ node_shader_init_curve_rgb,
/* freestoragefunc */ node_free_curves,
/* copystoragefunc */ node_copy_curves,
- /* id */ NULL
+ /* id */ NULL, NULL, NULL,
+ /* gpufunc */ gpu_shader_curve_rgb
};
diff --git a/source/blender/nodes/intern/SHD_nodes/SHD_geom.c b/source/blender/nodes/intern/SHD_nodes/SHD_geom.c
index 24395059c60..bc345759b98 100644
--- a/source/blender/nodes/intern/SHD_nodes/SHD_geom.c
+++ b/source/blender/nodes/intern/SHD_nodes/SHD_geom.c
@@ -29,6 +29,7 @@
#include "../SHD_util.h"
+#include "DNA_customdata_types.h"
/* **************** GEOMETRY ******************** */
@@ -124,6 +125,18 @@ static void node_shader_init_geometry(bNode *node)
node->storage= MEM_callocN(sizeof(NodeGeometry), "NodeGeometry");
}
+static int gpu_shader_geom(GPUMaterial *mat, bNode *node, GPUNodeStack *in, GPUNodeStack *out)
+{
+ NodeGeometry *ngeo= (NodeGeometry*)node->storage;
+ GPUNodeLink *orco = GPU_attribute(CD_ORCO, "");
+ GPUNodeLink *mtface = GPU_attribute(CD_MTFACE, ngeo->uvname);
+ GPUNodeLink *mcol = GPU_attribute(CD_MCOL, ngeo->colname);
+
+ return GPU_stack_link(mat, "geom", in, out,
+ GPU_builtin(GPU_VIEW_POSITION), GPU_builtin(GPU_VIEW_NORMAL),
+ GPU_builtin(GPU_INVERSE_VIEW_MATRIX), orco, mtface, mcol);
+}
+
/* node type definition */
bNodeType sh_node_geom= {
/* *next,*prev */ NULL, NULL,
@@ -139,6 +152,7 @@ bNodeType sh_node_geom= {
/* initfunc */ node_shader_init_geometry,
/* freestoragefunc */ node_free_standard_storage,
/* copystoragefunc */ node_copy_standard_storage,
- /* id */ NULL
+ /* id */ NULL, NULL, NULL,
+ /* gpufunc */ gpu_shader_geom
};
diff --git a/source/blender/nodes/intern/SHD_nodes/SHD_hueSatVal.c b/source/blender/nodes/intern/SHD_nodes/SHD_hueSatVal.c
index 67dfc619080..1b7b2dfb8e7 100644
--- a/source/blender/nodes/intern/SHD_nodes/SHD_hueSatVal.c
+++ b/source/blender/nodes/intern/SHD_nodes/SHD_hueSatVal.c
@@ -71,6 +71,12 @@ static void node_shader_exec_hue_sat(void *data, bNode *node, bNodeStack **in, b
do_hue_sat_fac(node, out[0]->vec, in[0]->vec, in[1]->vec, in[2]->vec, in[4]->vec, in[3]->vec);
}
+
+static int gpu_shader_hue_sat(GPUMaterial *mat, bNode *node, GPUNodeStack *in, GPUNodeStack *out)
+{
+ return GPU_stack_link(mat, "hue_sat", in, out);
+}
+
bNodeType sh_node_hue_sat= {
/* *next,*prev */ NULL, NULL,
/* type code */ SH_NODE_HUE_SAT,
@@ -85,7 +91,8 @@ bNodeType sh_node_hue_sat= {
/* initfunc */ NULL,
/* freestoragefunc */ NULL,
/* copystoragefunc */ NULL,
- /* id */ NULL
+ /* id */ NULL, NULL, NULL,
+ /* gpufunc */ gpu_shader_hue_sat
};
diff --git a/source/blender/nodes/intern/SHD_nodes/SHD_invert.c b/source/blender/nodes/intern/SHD_nodes/SHD_invert.c
index 4d1ce282fce..72ee1483ecf 100644
--- a/source/blender/nodes/intern/SHD_nodes/SHD_invert.c
+++ b/source/blender/nodes/intern/SHD_nodes/SHD_invert.c
@@ -64,6 +64,11 @@ bNodeStack **out)
VECCOPY(out[0]->vec, col);
}
+static int gpu_shader_invert(GPUMaterial *mat, bNode *node, GPUNodeStack *in, GPUNodeStack *out)
+{
+ return GPU_stack_link(mat, "invert", in, out);
+}
+
bNodeType sh_node_invert= {
/* *next,*prev */ NULL, NULL,
/* type code */ SH_NODE_INVERT,
@@ -78,6 +83,7 @@ bNodeType sh_node_invert= {
/* initfunc */ NULL,
/* freestoragefunc */ NULL,
/* copystoragefunc */ NULL,
- /* id */ NULL
+ /* id */ NULL, NULL, NULL,
+ /* gpufunc */ gpu_shader_invert
};
diff --git a/source/blender/nodes/intern/SHD_nodes/SHD_mapping.c b/source/blender/nodes/intern/SHD_nodes/SHD_mapping.c
index 589954c8f7b..c081929a2fc 100644
--- a/source/blender/nodes/intern/SHD_nodes/SHD_mapping.c
+++ b/source/blender/nodes/intern/SHD_nodes/SHD_mapping.c
@@ -69,6 +69,20 @@ static void node_shader_init_mapping(bNode *node)
node->storage= add_mapping();
}
+static int gpu_shader_mapping(GPUMaterial *mat, bNode *node, GPUNodeStack *in, GPUNodeStack *out)
+{
+ TexMapping *texmap= node->storage;
+ float domin= (texmap->flag & TEXMAP_CLIP_MIN) != 0;
+ float domax= (texmap->flag & TEXMAP_CLIP_MAX) != 0;
+ GPUNodeLink *tmat = GPU_uniform((float*)texmap->mat);
+ GPUNodeLink *tmin = GPU_uniform(texmap->min);
+ GPUNodeLink *tmax = GPU_uniform(texmap->max);
+ GPUNodeLink *tdomin = GPU_uniform(&domin);
+ GPUNodeLink *tdomax = GPU_uniform(&domax);
+
+ return GPU_stack_link(mat, "mapping", in, out, tmat, tmin, tmax, tdomin, tdomax);
+}
+
bNodeType sh_node_mapping= {
/* *next,*prev */ NULL, NULL,
/* type code */ SH_NODE_MAPPING,
@@ -83,7 +97,8 @@ bNodeType sh_node_mapping= {
/* initfunc */ node_shader_init_mapping,
/* freestoragefunc */ node_free_standard_storage,
/* copystoragefunc */ node_copy_standard_storage,
- /* id */ NULL
+ /* id */ NULL, NULL, NULL,
+ /* gpufunc */ gpu_shader_mapping
};
diff --git a/source/blender/nodes/intern/SHD_nodes/SHD_material.c b/source/blender/nodes/intern/SHD_nodes/SHD_material.c
index 9396410f850..c0a2534ac4a 100644
--- a/source/blender/nodes/intern/SHD_nodes/SHD_material.c
+++ b/source/blender/nodes/intern/SHD_nodes/SHD_material.c
@@ -182,6 +182,77 @@ static void node_shader_init_material(bNode* node)
node->custom1= SH_NODE_MAT_DIFF|SH_NODE_MAT_SPEC;
}
+static int gpu_shader_material(GPUMaterial *mat, bNode *node, GPUNodeStack *in, GPUNodeStack *out)
+{
+ if(node->id) {
+ GPUShadeInput shi;
+ GPUShadeResult shr;
+
+ GPU_shadeinput_set(mat, (Material*)node->id, &shi);
+
+ /* write values */
+ if(in[MAT_IN_COLOR].hasinput)
+ shi.rgb = in[MAT_IN_COLOR].link;
+
+ if(in[MAT_IN_SPEC].hasinput)
+ shi.specrgb = in[MAT_IN_SPEC].link;
+
+ if(in[MAT_IN_REFL].hasinput)
+ shi.refl = in[MAT_IN_REFL].link;
+
+ /* retrieve normal */
+ if(in[MAT_IN_NORMAL].hasinput) {
+ GPUNodeLink *tmp;
+ shi.vn = in[MAT_IN_NORMAL].link;
+ GPU_link(mat, "vec_math_normalize", shi.vn, &shi.vn, &tmp);
+ }
+
+ /* custom option to flip normal */
+ if(node->custom1 & SH_NODE_MAT_NEG)
+ GPU_link(mat, "vec_math_negate", shi.vn, &shi.vn);
+
+ if (node->type == SH_NODE_MATERIAL_EXT) {
+ if(in[MAT_IN_AMB].hasinput)
+ shi.amb= in[MAT_IN_AMB].link;
+ if(in[MAT_IN_EMIT].hasinput)
+ shi.emit= in[MAT_IN_EMIT].link;
+ if(in[MAT_IN_ALPHA].hasinput)
+ shi.alpha= in[MAT_IN_ALPHA].link;
+ }
+
+ GPU_shaderesult_set(&shi, &shr); /* clears shr */
+
+ /* write to outputs */
+ if(node->custom1 & SH_NODE_MAT_DIFF) {
+ if(node->custom1 & SH_NODE_MAT_SPEC)
+ out[MAT_OUT_COLOR].link= shr.combined;
+ else
+ out[MAT_OUT_COLOR].link= shr.diff;
+ }
+ else if(node->custom1 & SH_NODE_MAT_SPEC) {
+ out[MAT_OUT_COLOR].link= shr.spec;
+ }
+ else
+ GPU_link(mat, "set_rgb_zero", &out[MAT_OUT_COLOR].link);
+
+ GPU_link(mat, "mtex_alpha_to_col", out[MAT_OUT_COLOR].link, shr.alpha, &out[MAT_OUT_COLOR].link);
+
+ out[MAT_OUT_ALPHA].link = shr.alpha; //
+
+ if(node->custom1 & SH_NODE_MAT_NEG)
+ GPU_link(mat, "vec_math_negate", shi.vn, &shi.vn);
+ out[MAT_OUT_NORMAL].link = shi.vn;
+
+ if (node->type == SH_NODE_MATERIAL_EXT) {
+ out[MAT_OUT_DIFFUSE].link = shr.diff;
+ out[MAT_OUT_SPEC].link = shr.spec;
+ }
+
+ return 1;
+ }
+
+ return 0;
+}
bNodeType sh_node_material= {
/* *next,*prev */ NULL, NULL,
@@ -197,8 +268,8 @@ bNodeType sh_node_material= {
/* initfunc */ node_shader_init_material,
/* freestoragefunc */ NULL,
/* copystoragefunc */ NULL,
- /* id */ NULL
-
+ /* id */ NULL, NULL, NULL,
+ /* gpufunc */ gpu_shader_material
};
bNodeType sh_node_material_ext= {
@@ -215,7 +286,7 @@ bNodeType sh_node_material_ext= {
/* initfunc */ node_shader_init_material,
/* freestoragefunc */ NULL,
/* copystoragefunc */ NULL,
- /* id */ NULL
-
+ /* id */ NULL, NULL, NULL,
+ /* gpufunc */ gpu_shader_material
};
diff --git a/source/blender/nodes/intern/SHD_nodes/SHD_math.c b/source/blender/nodes/intern/SHD_nodes/SHD_math.c
index 2e156cf12bf..050c2cdcc95 100644
--- a/source/blender/nodes/intern/SHD_nodes/SHD_math.c
+++ b/source/blender/nodes/intern/SHD_nodes/SHD_math.c
@@ -194,6 +194,46 @@ bNodeStack **out)
}
}
+static int gpu_shader_math(GPUMaterial *mat, bNode *node, GPUNodeStack *in, GPUNodeStack *out)
+{
+ static char *names[] = {"math_add", "math_subtract", "math_multiply",
+ "math_divide", "math_sine", "math_cosine", "math_tangnet", "math_asin",
+ "math_acos", "math_atan", "math_pow", "math_log", "math_min", "math_max",
+ "math_round", "math_less_than", "math_greater_than"};
+
+ switch (node->custom1) {
+ case 0:
+ case 1:
+ case 2:
+ case 3:
+ case 10:
+ case 11:
+ case 12:
+ case 13:
+ case 15:
+ case 16:
+ GPU_stack_link(mat, names[node->custom1], NULL, out,
+ GPU_socket(&in[0]), GPU_socket(&in[1]));
+ break;
+ case 4:
+ case 5:
+ case 6:
+ case 7:
+ case 8:
+ case 9:
+ case 14:
+ if(in[0].hasinput || !in[1].hasinput)
+ GPU_stack_link(mat, names[node->custom1], NULL, out, GPU_socket(&in[0]));
+ else
+ GPU_stack_link(mat, names[node->custom1], NULL, out, GPU_socket(&in[1]));
+ break;
+ default:
+ return 0;
+ }
+
+ return 1;
+}
+
bNodeType sh_node_math= {
/* *next,*prev */ NULL, NULL,
/* type code */ SH_NODE_MATH,
@@ -208,6 +248,7 @@ bNodeType sh_node_math= {
/* initfunc */ NULL,
/* freestoragefunc */ NULL,
/* copystoragefunc */ NULL,
- /* id */ NULL
+ /* id */ NULL, NULL, NULL,
+ /* gpufunc */ gpu_shader_math
};
diff --git a/source/blender/nodes/intern/SHD_nodes/SHD_mixRgb.c b/source/blender/nodes/intern/SHD_nodes/SHD_mixRgb.c
index dba70253fda..2da1dee5623 100644
--- a/source/blender/nodes/intern/SHD_nodes/SHD_mixRgb.c
+++ b/source/blender/nodes/intern/SHD_nodes/SHD_mixRgb.c
@@ -60,6 +60,17 @@ static void node_shader_exec_mix_rgb(void *data, bNode *node, bNodeStack **in, b
VECCOPY(out[0]->vec, col);
}
+static int gpu_shader_mix_rgb(GPUMaterial *mat, bNode *node, GPUNodeStack *in, GPUNodeStack *out)
+{
+ static char *names[] = {"mix_blend", "mix_add", "mix_mult", "mix_sub",
+ "mix_screen", "mix_div", "mix_diff", "mix_dark", "mix_light",
+ "mix_overlay", "mix_dodge", "mix_burn", "mix_hue", "mix_sat",
+ "mix_val", "mix_color"};
+
+ return GPU_stack_link(mat, names[node->custom1], in, out);
+}
+
+
bNodeType sh_node_mix_rgb= {
/* *next,*prev */ NULL, NULL,
/* type code */ SH_NODE_MIX_RGB,
@@ -74,6 +85,7 @@ bNodeType sh_node_mix_rgb= {
/* initfunc */ NULL,
/* freestoragefunc */ NULL,
/* copystoragefunc */ NULL,
- /* id */ NULL
+ /* id */ NULL, NULL, NULL,
+ /* gpufunc */ gpu_shader_mix_rgb
};
diff --git a/source/blender/nodes/intern/SHD_nodes/SHD_normal.c b/source/blender/nodes/intern/SHD_nodes/SHD_normal.c
index f1ffd3446af..9d4ea1ccf67 100644
--- a/source/blender/nodes/intern/SHD_nodes/SHD_normal.c
+++ b/source/blender/nodes/intern/SHD_nodes/SHD_normal.c
@@ -57,6 +57,14 @@ static void node_shader_exec_normal(void *data, bNode *node, bNodeStack **in, bN
out[1]->vec[0]= -INPR(out[0]->vec, vec);
}
+static int gpu_shader_normal(GPUMaterial *mat, bNode *node, GPUNodeStack *in, GPUNodeStack *out)
+{
+ bNodeSocket *sock= node->outputs.first;
+ GPUNodeLink *vec = GPU_uniform(sock->ns.vec);
+
+ return GPU_stack_link(mat, "normal", in, out, vec);
+}
+
bNodeType sh_node_normal= {
/* *next,*prev */ NULL, NULL,
/* type code */ SH_NODE_NORMAL,
@@ -71,6 +79,7 @@ bNodeType sh_node_normal= {
/* initfunc */ NULL,
/* freestoragefunc */ NULL,
/* copystoragefunc */ NULL,
- /* id */ NULL
+ /* id */ NULL, NULL, NULL,
+ /* gpufunc */ gpu_shader_normal
};
diff --git a/source/blender/nodes/intern/SHD_nodes/SHD_output.c b/source/blender/nodes/intern/SHD_nodes/SHD_output.c
index 0a9a30c452b..76856cfd2e8 100644
--- a/source/blender/nodes/intern/SHD_nodes/SHD_output.c
+++ b/source/blender/nodes/intern/SHD_nodes/SHD_output.c
@@ -62,6 +62,19 @@ static void node_shader_exec_output(void *data, bNode *node, bNodeStack **in, bN
}
}
+static int gpu_shader_output(GPUMaterial *mat, bNode *node, GPUNodeStack *in, GPUNodeStack *out)
+{
+ GPUNodeLink *outlink;
+
+ /*if(in[1].hasinput)
+ GPU_material_enable_alpha(mat);*/
+
+ GPU_stack_link(mat, "output_node", in, out, &outlink);
+ GPU_material_output_link(mat, outlink);
+
+ return 1;
+}
+
bNodeType sh_node_output= {
/* *next,*prev */ NULL, NULL,
/* type code */ SH_NODE_OUTPUT,
@@ -76,7 +89,8 @@ bNodeType sh_node_output= {
/* initfunc */ NULL,
/* freestoragefunc */ NULL,
/* copystoragefunc */ NULL,
- /* id */ NULL
+ /* id */ NULL, NULL, NULL,
+ /* gpufunc */ gpu_shader_output
};
diff --git a/source/blender/nodes/intern/SHD_nodes/SHD_rgb.c b/source/blender/nodes/intern/SHD_nodes/SHD_rgb.c
index 4e56e26d3ad..1aa1a2ffc33 100644
--- a/source/blender/nodes/intern/SHD_nodes/SHD_rgb.c
+++ b/source/blender/nodes/intern/SHD_nodes/SHD_rgb.c
@@ -42,6 +42,14 @@ static void node_shader_exec_rgb(void *data, bNode *node, bNodeStack **in, bNode
VECCOPY(out[0]->vec, sock->ns.vec);
}
+static int gpu_shader_rgb(GPUMaterial *mat, bNode *node, GPUNodeStack *in, GPUNodeStack *out)
+{
+ bNodeSocket *sock= node->outputs.first;
+ GPUNodeLink *vec = GPU_uniform(sock->ns.vec);
+
+ return GPU_stack_link(mat, "set_rgba", in, out, vec);
+}
+
bNodeType sh_node_rgb= {
/* *next,*prev */ NULL, NULL,
/* type code */ SH_NODE_RGB,
@@ -56,6 +64,7 @@ bNodeType sh_node_rgb= {
/* initfunc */ NULL,
/* freestoragefunc */ NULL,
/* copystoragefunc */ NULL,
- /* id */ NULL
+ /* id */ NULL, NULL, NULL,
+ /* gpufunc */ gpu_shader_rgb
};
diff --git a/source/blender/nodes/intern/SHD_nodes/SHD_sepcombRGB.c b/source/blender/nodes/intern/SHD_nodes/SHD_sepcombRGB.c
index 2b52a8e2229..6d5df2a1321 100644
--- a/source/blender/nodes/intern/SHD_nodes/SHD_sepcombRGB.c
+++ b/source/blender/nodes/intern/SHD_nodes/SHD_sepcombRGB.c
@@ -48,6 +48,11 @@ static void node_shader_exec_seprgb(void *data, bNode *node, bNodeStack **in, bN
out[2]->vec[0] = in[0]->vec[2];
}
+static int gpu_shader_seprgb(GPUMaterial *mat, bNode *node, GPUNodeStack *in, GPUNodeStack *out)
+{
+ return GPU_stack_link(mat, "separate_rgb", in, out);
+}
+
bNodeType sh_node_seprgb= {
/* *next,*prev */ NULL, NULL,
/* type code */ SH_NODE_SEPRGB,
@@ -62,7 +67,8 @@ bNodeType sh_node_seprgb= {
/* initfunc */ NULL,
/* freestoragefunc */ NULL,
/* copystoragefunc */ NULL,
- /* id */ NULL
+ /* id */ NULL, NULL, NULL,
+ /* gpufunc */ gpu_shader_seprgb
};
@@ -86,6 +92,11 @@ static void node_shader_exec_combrgb(void *data, bNode *node, bNodeStack **in, b
out[0]->vec[2] = in[2]->vec[0];
}
+static int gpu_shader_combrgb(GPUMaterial *mat, bNode *node, GPUNodeStack *in, GPUNodeStack *out)
+{
+ return GPU_stack_link(mat, "combine_rgb", in, out);
+}
+
bNodeType sh_node_combrgb= {
/* *next,*prev */ NULL, NULL,
/* type code */ SH_NODE_COMBRGB,
@@ -100,6 +111,7 @@ bNodeType sh_node_combrgb= {
/* initfunc */ NULL,
/* freestoragefunc */ NULL,
/* copystoragefunc */ NULL,
- /* id */ NULL
+ /* id */ NULL, NULL, NULL,
+ /* gpufunc */ gpu_shader_combrgb
};
diff --git a/source/blender/nodes/intern/SHD_nodes/SHD_squeeze.c b/source/blender/nodes/intern/SHD_nodes/SHD_squeeze.c
index 30abad666c4..d3480a6ae9d 100644
--- a/source/blender/nodes/intern/SHD_nodes/SHD_squeeze.c
+++ b/source/blender/nodes/intern/SHD_nodes/SHD_squeeze.c
@@ -54,6 +54,11 @@ bNodeStack **out)
out[0]->vec[0] = 1.0f / (1.0f + pow(2.71828183,-((vec[0]-vec[2])*vec[1]))) ;
}
+static int gpu_shader_squeeze(GPUMaterial *mat, bNode *node, GPUNodeStack *in, GPUNodeStack *out)
+{
+ return GPU_stack_link(mat, "squeeze", in, out);
+}
+
bNodeType sh_node_squeeze= {
/* *next,*prev */ NULL, NULL,
/* type code */ SH_NODE_SQUEEZE,
@@ -68,6 +73,7 @@ bNodeType sh_node_squeeze= {
/* initfunc */ NULL,
/* freestoragefunc */ NULL,
/* copystoragefunc */ NULL,
- /* id */ NULL
+ /* id */ NULL, NULL, NULL,
+ /* gpufunc */ gpu_shader_squeeze
};
diff --git a/source/blender/nodes/intern/SHD_nodes/SHD_texture.c b/source/blender/nodes/intern/SHD_nodes/SHD_texture.c
index ace11a20d42..31dbde940fd 100644
--- a/source/blender/nodes/intern/SHD_nodes/SHD_texture.c
+++ b/source/blender/nodes/intern/SHD_nodes/SHD_texture.c
@@ -27,6 +27,8 @@
* ***** END GPL LICENSE BLOCK *****
*/
+#include "DNA_texture_types.h"
+
#include "../SHD_util.h"
/* **************** TEXTURE ******************** */
@@ -110,6 +112,18 @@ static void node_shader_exec_texture(void *data, bNode *node, bNodeStack **in, b
}
}
+static int gpu_shader_texture(GPUMaterial *mat, bNode *node, GPUNodeStack *in, GPUNodeStack *out)
+{
+ Tex *tex = (Tex*)node->id;
+
+ if(tex && tex->type == TEX_IMAGE && tex->ima) {
+ GPUNodeLink *texlink = GPU_image(tex->ima, NULL);
+ return GPU_stack_link(mat, "texture_image", in, out, texlink);
+ }
+ else
+ return 0;
+}
+
bNodeType sh_node_texture= {
/* *next,*prev */ NULL, NULL,
/* type code */ SH_NODE_TEXTURE,
@@ -124,7 +138,8 @@ bNodeType sh_node_texture= {
/* initfunc */ NULL,
/* freestoragefunc */ NULL,
/* copystoragefunc */ NULL,
- /* id */ NULL
+ /* id */ NULL, NULL, NULL,
+ /* gpufunc */ gpu_shader_texture
};
diff --git a/source/blender/nodes/intern/SHD_nodes/SHD_valToRgb.c b/source/blender/nodes/intern/SHD_nodes/SHD_valToRgb.c
index cf7e33d9dca..301c0cb7031 100644
--- a/source/blender/nodes/intern/SHD_nodes/SHD_valToRgb.c
+++ b/source/blender/nodes/intern/SHD_nodes/SHD_valToRgb.c
@@ -59,6 +59,15 @@ static void node_shader_init_valtorgb(bNode *node)
node->storage= add_colorband(1);
}
+static int gpu_shader_valtorgb(GPUMaterial *mat, bNode *node, GPUNodeStack *in, GPUNodeStack *out)
+{
+ float *array;
+ int size;
+
+ colorband_table_RGBA(node->storage, &array, &size);
+ return GPU_stack_link(mat, "valtorgb", in, out, GPU_texture(size, array));
+}
+
bNodeType sh_node_valtorgb= {
/* *next,*prev */ NULL, NULL,
/* type code */ SH_NODE_VALTORGB,
@@ -73,7 +82,8 @@ bNodeType sh_node_valtorgb= {
/* initfunc */ node_shader_init_valtorgb,
/* freestoragefunc */ node_free_standard_storage,
/* copystoragefunc */ node_copy_standard_storage,
- /* id */ NULL
+ /* id */ NULL, NULL, NULL,
+ /* gpufunc */ gpu_shader_valtorgb
};
@@ -96,6 +106,11 @@ static void node_shader_exec_rgbtobw(void *data, bNode *node, bNodeStack **in, b
out[0]->vec[0]= in[0]->vec[0]*0.35f + in[0]->vec[1]*0.45f + in[0]->vec[2]*0.2f;
}
+static int gpu_shader_rgbtobw(GPUMaterial *mat, bNode *node, GPUNodeStack *in, GPUNodeStack *out)
+{
+ return GPU_stack_link(mat, "rgbtobw", in, out);
+}
+
bNodeType sh_node_rgbtobw= {
/* *next,*prev */ NULL, NULL,
/* type code */ SH_NODE_RGBTOBW,
@@ -110,7 +125,8 @@ bNodeType sh_node_rgbtobw= {
/* initfunc */ NULL,
/* freestoragefunc */ NULL,
/* copystoragefunc */ NULL,
- /* id */ NULL
+ /* id */ NULL, NULL, NULL,
+ /* gpufunc */ gpu_shader_rgbtobw
};
diff --git a/source/blender/nodes/intern/SHD_nodes/SHD_value.c b/source/blender/nodes/intern/SHD_nodes/SHD_value.c
index 57ef7226066..768ef3cda3d 100644
--- a/source/blender/nodes/intern/SHD_nodes/SHD_value.c
+++ b/source/blender/nodes/intern/SHD_nodes/SHD_value.c
@@ -42,7 +42,13 @@ static void node_shader_exec_value(void *data, bNode *node, bNodeStack **in, bNo
out[0]->vec[0]= sock->ns.vec[0];
}
+static int gpu_shader_value(GPUMaterial *mat, bNode *node, GPUNodeStack *in, GPUNodeStack *out)
+{
+ bNodeSocket *sock= node->outputs.first;
+ GPUNodeLink *vec = GPU_uniform(sock->ns.vec);
+ return GPU_stack_link(mat, "set_value", in, out, vec);
+}
bNodeType sh_node_value= {
/* *next,*prev */ NULL, NULL,
@@ -58,7 +64,8 @@ bNodeType sh_node_value= {
/* initfunc */ NULL,
/* freestoragefunc */ NULL,
/* copystoragefunc */ NULL,
- /* id */ NULL
+ /* id */ NULL, NULL, NULL,
+ /* gpufunc */ gpu_shader_value
};
diff --git a/source/blender/nodes/intern/SHD_nodes/SHD_vectMath.c b/source/blender/nodes/intern/SHD_nodes/SHD_vectMath.c
index 8d0a4b3abe3..96db8db18a6 100644
--- a/source/blender/nodes/intern/SHD_nodes/SHD_vectMath.c
+++ b/source/blender/nodes/intern/SHD_nodes/SHD_vectMath.c
@@ -99,6 +99,34 @@ static void node_shader_exec_vect_math(void *data, bNode *node, bNodeStack **in,
}
+static int gpu_shader_vect_math(GPUMaterial *mat, bNode *node, GPUNodeStack *in, GPUNodeStack *out)
+{
+ static char *names[] = {"vec_math_add", "vec_math_subtract",
+ "vec_math_average", "vec_math_dot", "vec_math_cross",
+ "vec_math_normalize"};
+
+ switch (node->custom1) {
+ case 0:
+ case 1:
+ case 2:
+ case 3:
+ case 4:
+ GPU_stack_link(mat, names[node->custom1], NULL, out,
+ GPU_socket(&in[0]), GPU_socket(&in[1]));
+ break;
+ case 5:
+ if(in[0].hasinput || !in[1].hasinput)
+ GPU_stack_link(mat, names[node->custom1], NULL, out, GPU_socket(&in[0]));
+ else
+ GPU_stack_link(mat, names[node->custom1], NULL, out, GPU_socket(&in[1]));
+ break;
+ default:
+ return 0;
+ }
+
+ return 1;
+}
+
bNodeType sh_node_vect_math= {
/* *next,*prev */ NULL, NULL,
/* type code */ SH_NODE_VECT_MATH,
@@ -113,6 +141,7 @@ bNodeType sh_node_vect_math= {
/* initfunc */ NULL,
/* freestoragefunc */ NULL,
/* copystoragefunc */ NULL,
- /* id */ NULL
+ /* id */ NULL, NULL, NULL,
+ /* gpufunc */ gpu_shader_vect_math
};
diff --git a/source/blender/nodes/intern/SHD_util.h b/source/blender/nodes/intern/SHD_util.h
index bdb2bb3707d..eda985529c1 100644
--- a/source/blender/nodes/intern/SHD_util.h
+++ b/source/blender/nodes/intern/SHD_util.h
@@ -88,6 +88,8 @@
#include "RE_pipeline.h"
#include "RE_shader_ext.h"
+#include "GPU_material.h"
+
#include "butspace.h"
#include "blendef.h"
#include "mydevice.h"
diff --git a/source/blender/python/BPY_extern.h b/source/blender/python/BPY_extern.h
index f6a27b80733..aac3c51b97e 100644
--- a/source/blender/python/BPY_extern.h
+++ b/source/blender/python/BPY_extern.h
@@ -48,6 +48,7 @@ struct bPythonConstraint; /* DNA_constraint_types.h */
struct bConstraintOb; /* DNA_constraint_types.h */
struct bConstraintTarget; /* DNA_constraint_types.h*/
struct Script; /* DNA_screen_types.h */
+struct BPyMenu;
#ifdef __cplusplus
extern "C" {
#endif
@@ -91,13 +92,15 @@ extern "C" {
int BPY_txt_do_python_Text( struct Text *text );
int BPY_menu_do_python( short menutype, int event );
- void BPY_run_python_script( char *filename );
+ int BPY_menu_do_shortcut( short menutype, unsigned short key, unsigned short modifiers );
+ int BPY_menu_invoke( struct BPyMenu *pym, short menutype );
+ void BPY_run_python_script( const char *filename );
int BPY_run_script(struct Script *script);
void BPY_free_compiled_text( struct Text *text );
void BPY_clear_bad_scriptlinks( struct Text *byebye );
int BPY_has_onload_script( void );
- void BPY_do_all_scripts( short event );
+ void BPY_do_all_scripts( short event, short anim );
int BPY_check_all_scriptlinks( struct Text *text );
void BPY_do_pyscript( struct ID *id, short event );
void BPY_free_scriptlink( struct ScriptLink *slink );
@@ -109,7 +112,7 @@ extern "C" {
int BPY_has_spacehandler(struct Text *text, struct ScrArea *sa);
void BPY_screen_free_spacehandlers(struct bScreen *sc);
int BPY_do_spacehandlers(struct ScrArea *sa, unsigned short event,
- unsigned short space_event);
+ short eventValue, unsigned short space_event);
void BPY_pydriver_update(void);
float BPY_pydriver_eval(struct IpoDriver *driver);
diff --git a/source/blender/python/BPY_interface.c b/source/blender/python/BPY_interface.c
index 69bff059356..1c56709111f 100644
--- a/source/blender/python/BPY_interface.c
+++ b/source/blender/python/BPY_interface.c
@@ -100,7 +100,7 @@ PyObject *bpy_orig_syspath_List = NULL;
* creates list in __main__ module dict
*/
-int setup_armature_weakrefs()
+static int setup_armature_weakrefs()
{
PyObject *maindict;
PyObject *main_module;
@@ -159,19 +159,18 @@ ScriptError g_script_error;
/***************************************************************************
* Function prototypes
***************************************************************************/
-PyObject *RunPython( Text * text, PyObject * globaldict );
-PyObject *CreateGlobalDictionary( void );
-void ReleaseGlobalDictionary( PyObject * dict );
-void DoAllScriptsFromList( ListBase * list, short event );
+static PyObject *RunPython( Text * text, PyObject * globaldict );
+static PyObject *CreateGlobalDictionary( void );
+static void ReleaseGlobalDictionary( PyObject * dict );
+static void DoAllScriptsFromList( ListBase * list, short event );
static PyObject *importText( char *name );
-void init_ourImport( void );
-void init_ourReload( void );
-PyObject *blender_import( PyObject * self, PyObject * args );
-PyObject *RunPython2( Text * text, PyObject * globaldict, PyObject *localdict );
+static void init_ourImport( void );
+static void init_ourReload( void );
+static PyObject *blender_import( PyObject * self, PyObject * args );
-void BPY_Err_Handle( char *script_name );
-PyObject *traceback_getFilename( PyObject * tb );
+static void BPY_Err_Handle( char *script_name );
+static PyObject *traceback_getFilename( PyObject * tb );
/****************************************************************************
* Description: This function will start the interpreter and load all modules
@@ -292,7 +291,7 @@ void syspath_append( char *dirname )
short ok=1;
PyErr_Clear( );
- dir = Py_BuildValue( "s", dirname );
+ dir = PyString_FromString( dirname );
mod_sys = PyImport_ImportModule( "sys" ); /* new ref */
@@ -307,33 +306,32 @@ void syspath_append( char *dirname )
ok = 0;
}
- if (PySequence_Contains(path, dir)==0) { /* Only add if we need to */
- if (ok && PyList_Append( path, dir ) != 0)
+ if (ok && PySequence_Contains(path, dir)==0) { /* Only add if we need to */
+ if (ok && PyList_Append( path, dir ) != 0) /* decref below */
ok = 0; /* append failed */
-
- if( (ok==0) || PyErr_Occurred( ) )
- Py_FatalError( "could import or build sys.path, can't continue" );
}
+
+ if( (ok==0) || PyErr_Occurred( ) )
+ fprintf(stderr, "could import or build sys.path\n" );
+
+ PyErr_Clear();
+ Py_DECREF( dir );
Py_XDECREF( mod_sys );
}
void init_syspath( int first_time )
{
- PyObject *path;
PyObject *mod, *d;
char *progname;
char execdir[FILE_MAXDIR]; /*defines from DNA_space_types.h */
int n;
-
-
- path = Py_BuildValue( "s", bprogname );
mod = PyImport_ImportModule( "Blender.sys" );
if( mod ) {
d = PyModule_GetDict( mod );
- EXPP_dict_set_item_str( d, "progname", path );
+ EXPP_dict_set_item_str( d, "progname", PyString_FromString( bprogname ) );
Py_DECREF( mod );
} else
printf( "Warning: could not set Blender.sys.progname\n" );
@@ -510,7 +508,7 @@ const char *BPY_Err_getFilename( void )
/*****************************************************************************/
/* Description: Return PyString filename from a traceback object */
/*****************************************************************************/
-PyObject *traceback_getFilename( PyObject * tb )
+static PyObject *traceback_getFilename( PyObject * tb )
{
PyObject *v = NULL;
@@ -534,7 +532,7 @@ PyObject *traceback_getFilename( PyObject * tb )
* Description: Blender Python error handler. This catches the error and
* stores filename and line number in a global
*****************************************************************************/
-void BPY_Err_Handle( char *script_name )
+static void BPY_Err_Handle( char *script_name )
{
PyObject *exception, *err, *tb, *v;
@@ -556,6 +554,7 @@ void BPY_Err_Handle( char *script_name )
if( exception
&& PyErr_GivenExceptionMatches( exception, PyExc_SyntaxError ) ) {
/* no traceback available when SyntaxError */
+ PyErr_NormalizeException( &exception, &err, &tb );
PyErr_Restore( exception, err, tb ); /* takes away reference! */
PyErr_Print( );
v = PyObject_GetAttrString( err, "lineno" );
@@ -722,13 +721,23 @@ int BPY_txt_do_python_Text( struct Text *text )
* automatically. The script can be a file or a Blender Text in the current
* .blend.
****************************************************************************/
-void BPY_run_python_script( char *fn )
+void BPY_run_python_script( const char *fn )
{
+ char filename[FILE_MAXDIR + FILE_MAXFILE];
Text *text = NULL;
int is_blender_text = 0;
-
- if (!BLI_exists(fn)) { /* if there's no such filename ... */
- text = G.main->text.first; /* try an already existing Blender Text */
+
+ BLI_strncpy(filename, fn, FILE_MAXDIR + FILE_MAXFILE);
+
+ if (!BLI_exists(filename))
+ BLI_convertstringcwd(filename);
+
+ if (!BLI_exists(filename)) { /* if there's no such filename ... */
+ /* try an already existing Blender Text.
+ * use 'fn' rather then filename for this since were looking for
+ * internal text
+ */
+ text = G.main->text.first;
while (text) {
if (!strcmp(fn, text->id.name + 2)) break;
@@ -743,11 +752,14 @@ void BPY_run_python_script( char *fn )
}
else {
- text = add_text(fn);
+ /* use filename here since we know it exists,
+ * 'fn' may have been a relative path
+ */
+ text = add_text(filename);
if (text == NULL) {
printf("\nError in BPY_run_python_script:\n"
- "couldn't create Blender text from %s\n", fn);
+ "couldn't create Blender text from \"%s\"\n", filename);
/* Chris: On Windows if I continue I just get a segmentation
* violation. To get a baseline file I exit here. */
exit(2);
@@ -764,13 +776,8 @@ void BPY_run_python_script( char *fn )
/* We can't simply free the text, since the script might have called
* Blender.Load() to load a new .blend, freeing previous data.
* So we check if the pointer is still valid. */
- Text *txtptr = G.main->text.first;
- while (txtptr) {
- if (txtptr == text) {
- free_libblock(&G.main->text, text);
- break;
- }
- txtptr = txtptr->id.next;
+ if (BLI_findindex(&G.main->text, text) != -1) {
+ free_libblock(&G.main->text, text);
}
}
}
@@ -780,9 +787,6 @@ int BPY_run_script(Script *script)
PyObject *py_dict, *py_res, *pyarg;
Text *text = NULL;
BPy_constant *info;
- int len;
-
- FILE *fp = NULL;
PyGILState_STATE gilstate = PyGILState_Ensure();
@@ -827,12 +831,8 @@ int BPY_run_script(Script *script)
Py_INCREF( Py_None );
pyarg = Py_None;
} else {
- if (BLI_exists(script->scriptname)) {
- fp = fopen( script->scriptname, "rb" );
- }
-
- if( !fp ) {
- printf( "Error loading script: couldn't open file %s\n", script->scriptname );
+ if (!BLI_exists(script->scriptname)) {
+ printf( "Script does not exit %s\n", script->scriptname );
free_libblock( &G.main->script, script );
PyGILState_Release(gilstate);
return 0;
@@ -877,51 +877,17 @@ int BPY_run_script(Script *script)
if (text) {
py_res = RunPython( text, py_dict );
} else {
+ char pystring[sizeof(script->scriptname) + 15];
+ sprintf(pystring, "execfile(r'%s')", script->scriptname);
+ py_res = PyRun_String( pystring, Py_file_input, py_dict, py_dict );
+ }
+
+ if( !py_res ) { /* Failed execution of the script */
/* Previously we used PyRun_File to run directly the code on a FILE
* object, but as written in the Python/C API Ref Manual, chapter 2,
* 'FILE structs for different C libraries can be different and
* incompatible'.
* So now we load the script file data to a buffer */
- char *buffer=NULL, *buffer_ofs=NULL, *b_to, *b_from;
-
- fseek( fp, 0L, SEEK_END );
- len = ftell( fp );
- fseek( fp, 0L, SEEK_SET );
-
- buffer = buffer_ofs = MEM_mallocN( len + 2, "pyfilebuf" ); /* len+2 to add '\n\0' */
- len = fread( buffer, 1, len, fp );
-
- buffer[len] = '\n'; /* fix syntax error in files w/o eol */
- buffer[len + 1] = '\0';
-
-
- /* fast clean-up of dos cr/lf line endings, remove convert '\r\n's to '\n' */
- if (*buffer_ofs == '\r' && *(buffer_ofs+1) == '\n') {
- buffer_ofs++;
- }
- b_from = b_to = buffer_ofs;
-
- while(*b_from != '\0') {
- if (*b_from == '\r' && *( b_from+1 ) == '\n') {
- b_from++;
- }
- if (b_from != b_to) {
- *b_to = *b_from;
- }
- b_to++;
- b_from++;
- }
- *b_to = '\0';
- /* done cleaning the string */
-
- fclose( fp );
-
- py_res = PyRun_String( buffer_ofs, Py_file_input, py_dict, py_dict );
- MEM_freeN( buffer );
- }
-
- if( !py_res ) { /* Failed execution of the script */
-
BPY_Err_Handle( script->id.name + 2 );
ReleaseGlobalDictionary( py_dict );
script->py_globaldict = NULL;
@@ -965,8 +931,38 @@ int BPY_run_script(Script *script)
*****************************************************************************/
int BPY_menu_do_python( short menutype, int event )
{
- char *argstr = NULL;
BPyMenu *pym;
+ pym = BPyMenu_GetEntry( menutype, ( short ) event );
+ return BPY_menu_invoke( pym, menutype );
+}
+
+/****************************************************************************
+* Description: This function executes the script by its shortcut.
+* Notes: It is called by the ui code in src/???.c when a user presses an
+* unassigned key combination. Scripts are searched in the BPyMenuTable,
+* using the given menutype and event values to know which one to invoke.
+*****************************************************************************/
+int BPY_menu_do_shortcut( short menutype, unsigned short key, unsigned short qual )
+{
+ BPyMenu *pym;
+ pym = BPyMenu_GetEntry( menutype, 0 );
+
+ while ( pym ) {
+ if ( pym->key && pym->key == key && pym->qual == qual ) {
+ return BPY_menu_invoke( pym, menutype );
+ }
+ pym = pym->next;
+ }
+
+ return 0;
+}
+
+/****************************************************************************
+* Description: This function executes the script described by a menu item.
+*****************************************************************************/
+int BPY_menu_invoke( BPyMenu *pym, short menutype )
+{
+ char *argstr = NULL;
BPySubMenu *pysm;
char scriptname[21];
Script *script = NULL;
@@ -974,8 +970,6 @@ int BPY_menu_do_python( short menutype, int event )
PyGILState_STATE gilstate;
char filestr[FILE_MAX];
- pym = BPyMenu_GetEntry( menutype, ( short ) event );
-
if( !pym )
return 0;
@@ -1059,6 +1053,7 @@ int BPY_menu_do_python( short menutype, int event )
case PYMENU_RENDER:
case PYMENU_WIZARDS:
case PYMENU_SCRIPTTEMPLATE:
+ case PYMENU_TEXTPLUGIN:
case PYMENU_MESHFACEKEY:
break;
@@ -2169,8 +2164,14 @@ void BPY_clear_bad_scriptlinks( struct Text *byebye )
* For the scene, only the current active scene the scripts are
* executed (if any).
*****************************************************************************/
-void BPY_do_all_scripts( short event )
+void BPY_do_all_scripts( short event, short anim )
{
+ /* during stills rendering we disable FRAMECHANGED events */
+ static char disable_frame_changed = 0;
+
+ if ((event == SCRIPT_FRAMECHANGED) && disable_frame_changed)
+ return;
+
DoAllScriptsFromList( &( G.main->object ), event );
DoAllScriptsFromList( &( G.main->lamp ), event );
DoAllScriptsFromList( &( G.main->camera ), event );
@@ -2186,9 +2187,12 @@ void BPY_do_all_scripts( short event )
* "import sys; sys.setcheckinterval(sys.maxint)" */
if (event == SCRIPT_RENDER) {
_Py_CheckInterval = PyInt_GetMax();
+ if (!anim)
+ disable_frame_changed = 1;
}
else if (event == SCRIPT_POSTRENDER) {
_Py_CheckInterval = 100; /* Python default */
+ disable_frame_changed = 0;
}
return;
@@ -2472,7 +2476,7 @@ int BPY_add_spacehandler(Text *text, ScrArea *sa, char spacetype)
}
int BPY_do_spacehandlers( ScrArea *sa, unsigned short event,
- unsigned short space_event )
+ short eventValue, unsigned short space_event )
{
ScriptLink *scriptlink;
int retval = 0;
@@ -2512,8 +2516,9 @@ int BPY_do_spacehandlers( ScrArea *sa, unsigned short event,
PyDict_SetItemString(g_blenderdict, "bylink", Py_True);
/* unlike normal scriptlinks, here Blender.link is int (space event type) */
EXPP_dict_set_item_str(g_blenderdict, "link", PyInt_FromLong(space_event));
- /* note: DRAW space_events set event to 0 */
+ /* note: DRAW space_events set event and val to 0 */
EXPP_dict_set_item_str(g_blenderdict, "event", PyInt_FromLong(event));
+ EXPP_dict_set_item_str(g_blenderdict, "eventValue", PyInt_FromLong(eventValue));
/* now run all assigned space handlers for this space and space_event */
for( index = 0; index < scriptlink->totscript; index++ ) {
@@ -2709,7 +2714,7 @@ int BPY_call_importloader( char *name )
* The Python dictionary containing global variables needs to
* be passed in globaldict.
*****************************************************************************/
-PyObject *RunPython( Text * text, PyObject * globaldict )
+static PyObject *RunPython( Text * text, PyObject * globaldict )
{
char *buf = NULL;
@@ -2737,7 +2742,7 @@ PyObject *RunPython( Text * text, PyObject * globaldict )
/*****************************************************************************
* Description: This function creates a new Python dictionary object.
*****************************************************************************/
-PyObject *CreateGlobalDictionary( void )
+static PyObject *CreateGlobalDictionary( void )
{
PyObject *dict = PyDict_New( );
@@ -2751,7 +2756,7 @@ PyObject *CreateGlobalDictionary( void )
/*****************************************************************************
* Description: This function deletes a given Python dictionary object.
*****************************************************************************/
-void ReleaseGlobalDictionary( PyObject * dict )
+static void ReleaseGlobalDictionary( PyObject * dict )
{
PyDict_Clear( dict );
Py_DECREF( dict ); /* Release dictionary. */
@@ -2764,7 +2769,7 @@ void ReleaseGlobalDictionary( PyObject * dict )
* list argument. The event by which the function has been
* called, is passed in the event argument.
*****************************************************************************/
-void DoAllScriptsFromList( ListBase * list, short event )
+static void DoAllScriptsFromList( ListBase * list, short event )
{
ID *id;
@@ -2817,7 +2822,7 @@ static PyMethodDef bimport[] = {
{"blimport", blender_import, METH_VARARGS, "our own import"}
};
-PyObject *blender_import( PyObject * self, PyObject * args )
+static PyObject *blender_import( PyObject * self, PyObject * args )
{
PyObject *exception, *err, *tb;
char *name;
@@ -2848,7 +2853,7 @@ PyObject *blender_import( PyObject * self, PyObject * args )
return m;
}
-void init_ourImport( void )
+static void init_ourImport( void )
{
PyObject *m, *d;
PyObject *import = PyCFunction_New( bimport, NULL );
@@ -2949,7 +2954,7 @@ static PyMethodDef breload[] = {
{"blreload", blender_reload, METH_VARARGS, "our own reload"}
};
-void init_ourReload( void )
+static void init_ourReload( void )
{
PyObject *m, *d;
PyObject *reload = PyCFunction_New( breload, NULL );
diff --git a/source/blender/python/BPY_menus.c b/source/blender/python/BPY_menus.c
index 82da9edbee6..69b50e5c47a 100644
--- a/source/blender/python/BPY_menus.c
+++ b/source/blender/python/BPY_menus.c
@@ -42,6 +42,7 @@
#endif
#include "BKE_global.h"
#include "BKE_utildefines.h"
+#include "BIF_keyval.h"
#include "BLI_blenlib.h"
#include "MEM_guardedalloc.h"
#include "DNA_userdef_types.h" /* for U.pythondir */
@@ -106,6 +107,8 @@ static int bpymenu_group_atoi( char *str )
return PYMENU_ARMATURE;
else if( !strcmp( str, "ScriptTemplate" ) )
return PYMENU_SCRIPTTEMPLATE;
+ else if( !strcmp( str, "TextPlugin" ) )
+ return PYMENU_TEXTPLUGIN;
else if( !strcmp( str, "MeshFaceKey" ) )
return PYMENU_MESHFACEKEY;
else if( !strcmp( str, "AddMesh" ) )
@@ -184,6 +187,9 @@ char *BPyMenu_group_itoa( short menugroup )
case PYMENU_SCRIPTTEMPLATE:
return "ScriptTemplate";
break;
+ case PYMENU_TEXTPLUGIN:
+ return "TextPlugin";
+ break;
case PYMENU_MESHFACEKEY:
return "MeshFaceKey";
break;
@@ -328,6 +334,23 @@ static void bpymenu_set_tooltip( BPyMenu * pymenu, char *tip )
return;
}
+static void bpymenu_set_shortcut( BPyMenu * pymenu, char *combi )
+{
+ unsigned short key, qual;
+
+ if( !pymenu )
+ return;
+
+ if (!decode_key_string(combi, &key, &qual)) {
+ return; /* TODO: Print some error */
+ }
+
+ pymenu->key = key;
+ pymenu->qual = qual;
+
+ return;
+}
+
/* bpymenu_AddEntry:
* try to find an existing pymenu entry with the given type and name;
* if found, update it with new info, otherwise create a new one and fill it.
@@ -688,6 +711,7 @@ void BPyMenu_PrintAllEntries( void )
* # Blender: <code>short int</code> (minimal Blender version)
* # Group: 'group name' (defines menu)
* # Submenu: 'submenu name' related_1word_arg
+ * # Shortcut: Modifier+Key (optional shortcut combination for supported groups)
* # Tooltip: 'tooltip for the menu'
* # \"\"\"
*
@@ -796,13 +820,19 @@ static int bpymenu_ParseFile(FILE *file, char *fname, int is_userdir)
if ((matches == 3) && (strstr(head, "Submenu:") != NULL)) {
bpymenu_AddSubEntry(scriptMenu, middle, tail);
} else {
- /* Tooltip: 'tooltip for the menu */
+ /* Shortcut: 'key+combination' */
matches = sscanf(line, "%[^']'%[^']'%c", head, middle, tail);
- if ((matches == 3) && ((strstr(head, "Tooltip:") != NULL) ||
- (strstr(head, "Tip:") != NULL))) {
- bpymenu_set_tooltip(scriptMenu, middle);
+ if ((matches == 3) && (strstr(head, "Shortcut:") != NULL)) {
+ bpymenu_set_shortcut(scriptMenu, middle);
+ } else {
+ /* Tooltip: 'tooltip for the menu */
+ matches = sscanf(line, "%[^']'%[^']'%c", head, middle, tail);
+ if ((matches == 3) && ((strstr(head, "Tooltip:") != NULL) ||
+ (strstr(head, "Tip:") != NULL))) {
+ bpymenu_set_tooltip(scriptMenu, middle);
+ }
+ parser_state = 0;
}
- parser_state = 0;
}
break;
diff --git a/source/blender/python/BPY_menus.h b/source/blender/python/BPY_menus.h
index 1b557f79286..576d7b8dcd6 100644
--- a/source/blender/python/BPY_menus.h
+++ b/source/blender/python/BPY_menus.h
@@ -59,6 +59,7 @@ typedef struct BPyMenu {
char *name;
char *filename;
char *tooltip;
+ unsigned short key, qual; /* Registered shortcut key */
short version; /* Blender version */
int dir; /* 0: default, 1: U.pythondir */
struct BPySubMenu *submenus;
@@ -99,6 +100,7 @@ typedef enum {
PYMENU_UVCALCULATION,
PYMENU_ARMATURE,
PYMENU_SCRIPTTEMPLATE,
+ PYMENU_TEXTPLUGIN,
PYMENU_HELP,/*Main Help menu items - prob best to leave for 'official' ones*/
PYMENU_HELPSYSTEM,/* Resources, troubleshooting, system tools */
PYMENU_HELPWEBSITES,/* Help -> Websites submenu */
diff --git a/source/blender/python/CMakeLists.txt b/source/blender/python/CMakeLists.txt
index 0106ab77843..63a1e67236e 100644
--- a/source/blender/python/CMakeLists.txt
+++ b/source/blender/python/CMakeLists.txt
@@ -34,7 +34,7 @@ SET(INC
api2_2x ../blenkernel ../blenlib ../blenloader
../render/extern/include ../radiosity/extern/include
../makesdna ../../../intern/guardedalloc ../../../intern/bmfont ../imbuf ../include
- ${PYTHON_INC}
+ ${PYTHON_INC} ../../../extern/glew/include ../gpu
)
IF(WITH_QUICKTIME)
@@ -50,5 +50,9 @@ IF(WITH_FFMPEG)
ADD_DEFINITIONS(-DWITH_FFMPEG)
ENDIF(WITH_FFMPEG)
+IF(BF_BUILDINFO)
+ ADD_DEFINITIONS(-DNAN_BUILDINFO)
+ENDIF(BF_BUILDINFO)
+
BLENDERLIB_NOLIST(blender_python "${SRC}" "${INC}")
#env.BlenderLib ( libname='blender_python', sources = Split(sources), includes = Split(incs), defines = defs, libtype=['core','game2'], priority = [60,115] )
diff --git a/source/blender/python/SConscript b/source/blender/python/SConscript
index 481fdcbe13e..27dd510f944 100644
--- a/source/blender/python/SConscript
+++ b/source/blender/python/SConscript
@@ -6,6 +6,7 @@ sources = Split('BPY_interface.c BPY_menus.c') + env.Glob('api2_2x/*.c')
incs = 'api2_2x ../blenkernel ../nodes ../blenlib ../blenloader'
incs += ' ../render/extern/include ../radiosity/extern/include'
incs += ' ../makesdna #intern/guardedalloc #intern/bmfont ../imbuf ../include'
+incs += ' #extern/glew/include ../gpu'
incs += ' ' + env['BF_PYTHON_INC']
incs += ' ' + env['BF_OPENGL_INC']
@@ -23,4 +24,7 @@ if env['WITH_BF_OPENEXR'] == 1:
if env['WITH_BF_FFMPEG'] == 1:
defs.append('WITH_FFMPEG')
+if env['BF_BUILDINFO'] == 1:
+ defs.append('NAN_BUILDINFO')
+
env.BlenderLib ( libname='blender_python', sources = Split(sources), includes = Split(incs), defines = defs, libtype=['core','game2'], priority = [60,115] )
diff --git a/source/blender/python/api2_2x/Armature.c b/source/blender/python/api2_2x/Armature.c
index 0db87c00dd2..acf18ac6058 100644
--- a/source/blender/python/api2_2x/Armature.c
+++ b/source/blender/python/api2_2x/Armature.c
@@ -57,9 +57,9 @@ static const char sArmatureBadArgs[] = "ArmatureType - Bad Arguments: ";
static const char sModuleError[] = "Blender.Armature - Error: ";
static const char sModuleBadArgs[] = "Blender.Armature - Bad Arguments: ";
-PyObject * arm_weakref_callback_weakref_dealloc(PyObject *self, PyObject *weakref);
+static PyObject * arm_weakref_callback_weakref_dealloc(PyObject *self, PyObject *weakref);
/* python callable */
-PyObject * arm_weakref_callback_weakref_dealloc__pyfunc;
+static PyObject * arm_weakref_callback_weakref_dealloc__pyfunc;
//################## BonesDict_Type (internal) ########################
/*This is an internal psuedo-dictionary type that allows for manipulation
@@ -1323,7 +1323,7 @@ PyObject *Armature_RebuildBones(PyObject *pyarmature)
}
/* internal func to remove weakref from weakref list */
-PyObject * arm_weakref_callback_weakref_dealloc(PyObject *self, PyObject *weakref)
+static PyObject * arm_weakref_callback_weakref_dealloc(PyObject *self, PyObject *weakref)
{
char *list_name = ARM_WEAKREF_LIST_NAME;
PyObject *maindict = NULL, *armlist = NULL;
diff --git a/source/blender/python/api2_2x/BGL.h b/source/blender/python/api2_2x/BGL.h
index ce972795322..461f5bc9372 100644
--- a/source/blender/python/api2_2x/BGL.h
+++ b/source/blender/python/api2_2x/BGL.h
@@ -323,8 +323,13 @@ typedef struct _Buffer {
#define ret_def_GLstring const unsigned char *ret_str;
#define ret_set_GLstring ret_str=
-#define ret_ret_GLstring return PyString_FromString(ret_str);
-
+#define ret_ret_GLstring \
+ if (ret_str) {\
+ return PyString_FromString(ret_str);\
+ } else {\
+ PyErr_SetString(PyExc_AttributeError, "could not get opengl string");\
+ return NULL;\
+ }
#endif /* EXPP_BGL_H */
diff --git a/source/blender/python/api2_2x/Blender.c b/source/blender/python/api2_2x/Blender.c
index 2b190a6c828..47e7bcb2007 100644
--- a/source/blender/python/api2_2x/Blender.c
+++ b/source/blender/python/api2_2x/Blender.c
@@ -34,7 +34,7 @@ struct ID; /*keep me up here */
/* for open, close in Blender_Load */
#include <fcntl.h>
#include "BDR_editobject.h" /* exit_editmode() */
-#include "BDR_drawmesh.h" /* set_mipmap() */
+#include "GPU_draw.h" /* GPU_set_mipmap() */
#include "BIF_usiblender.h"
#include "BLI_blenlib.h"
#include "BLI_bpath.h"
@@ -314,8 +314,8 @@ static PyObject *Blender_Set( PyObject * self, PyObject * args )
else
U.gameflags |= USER_DISABLE_MIPMAP;
- set_mipmap(!(U.gameflags & USER_DISABLE_MIPMAP));
- }else
+ GPU_set_mipmap(!(U.gameflags & USER_DISABLE_MIPMAP));
+ } else
return ( EXPP_ReturnPyObjError( PyExc_AttributeError,
"value given is not a blender setting" ) );
Py_RETURN_NONE;
@@ -543,7 +543,21 @@ static PyObject *Blender_Get( PyObject * self, PyObject * value )
} /* End 'quick hack' part. */
else if(StringEqual( str, "version" ))
ret = PyInt_FromLong( G.version );
-
+ else if(StringEqual( str, "buildinfo" )) {
+#ifdef NAN_BUILDINFO
+ char buffer[1024];
+ extern char * build_date;
+ extern char * build_time;
+ extern char * build_rev;
+ extern char * build_platform;
+ extern char * build_type;
+
+ sprintf(buffer, "Built on %s %s, Rev-%s Version %s %s", build_date, build_time, build_rev, build_platform, build_type);
+ ret = PyString_FromString( buffer );
+#else
+ ret = PyString_FromString( "No Build Info" );
+#endif
+ }
else if(StringEqual( str, "compressfile" ))
ret = PyInt_FromLong( (U.flag & USER_FILECOMPRESS) >> 15 );
else if(StringEqual( str, "mipmap" ))
diff --git a/source/blender/python/api2_2x/Camera.c b/source/blender/python/api2_2x/Camera.c
index b35fcf410a4..af93a1130cb 100644
--- a/source/blender/python/api2_2x/Camera.c
+++ b/source/blender/python/api2_2x/Camera.c
@@ -36,7 +36,9 @@
#include "BKE_utildefines.h"
#include "BLI_blenlib.h"
#include "BLI_arithb.h" /* for M_PI */
+#include "DNA_userdef_types.h"
#include "BSE_editipo.h"
+#include "BIF_keyframing.h"
#include "BIF_space.h"
#include "mydevice.h"
#include "gen_utils.h"
@@ -1031,18 +1033,21 @@ static PyObject *Camera_repr( BPy_Camera * self )
static PyObject *Camera_insertIpoKey( BPy_Camera * self, PyObject * args )
{
- int key = 0;
+ int key = 0, flag = 0;
if( !PyArg_ParseTuple( args, "i", &( key ) ) )
return ( EXPP_ReturnPyObjError( PyExc_AttributeError,
"expected int argument" ) );
-
+
+ /* flag should be initialised with the 'autokeying' flags like for normal keying */
+ if (IS_AUTOKEY_FLAG(INSERTNEEDED)) flag |= INSERTKEY_NEEDED;
+
if (key == IPOKEY_LENS){
- insertkey((ID *)self->camera, ID_CA, NULL, NULL, CAM_LENS, 0);
+ insertkey((ID *)self->camera, ID_CA, NULL, NULL, CAM_LENS, flag);
}
else if (key == IPOKEY_CLIPPING){
- insertkey((ID *)self->camera, ID_CA, NULL, NULL, CAM_STA, 0);
- insertkey((ID *)self->camera, ID_CA, NULL, NULL, CAM_END, 0);
+ insertkey((ID *)self->camera, ID_CA, NULL, NULL, CAM_STA, flag);
+ insertkey((ID *)self->camera, ID_CA, NULL, NULL, CAM_END, flag);
}
allspace(REMAKEIPO, 0);
diff --git a/source/blender/python/api2_2x/Constraint.c b/source/blender/python/api2_2x/Constraint.c
index a62a5ee7ed8..b0b9aa04a08 100644
--- a/source/blender/python/api2_2x/Constraint.c
+++ b/source/blender/python/api2_2x/Constraint.c
@@ -44,6 +44,7 @@
#include "BKE_constraint.h"
#include "BLI_blenlib.h"
#include "BIF_editconstraint.h"
+#include "BIF_keyframing.h"
#include "BIF_poseobject.h"
#include "BSE_editipo.h"
#include "MEM_guardedalloc.h"
@@ -441,7 +442,7 @@ static PyObject *Constraint_insertKey( BPy_Constraint * self, PyObject * value )
return EXPP_ReturnPyObjError( PyExc_RuntimeError,
"constraint doesn't belong to anything" );
}
- icu= verify_ipocurve((ID *)ob, ID_CO, actname, con->name, NULL, CO_ENFORCE);
+ icu= verify_ipocurve((ID *)ob, ID_CO, actname, con->name, NULL, CO_ENFORCE, 1);
if (!icu)
return EXPP_ReturnPyObjError( PyExc_RuntimeError,
diff --git a/source/blender/python/api2_2x/Draw.c b/source/blender/python/api2_2x/Draw.c
index 047a035fb8b..c942657fbd0 100644
--- a/source/blender/python/api2_2x/Draw.c
+++ b/source/blender/python/api2_2x/Draw.c
@@ -928,6 +928,11 @@ static PyObject *Method_Register( PyObject * self, PyObject * args )
Script *script;
int startspace = 0;
+ if (G.background) {
+ return EXPP_ReturnPyObjError( PyExc_RuntimeError,
+ "Can't run Draw.Register() in background mode." );
+ }
+
if( !PyArg_ParseTuple
( args, "O|OO", &newdrawc, &neweventc, &newbuttonc ) )
return EXPP_ReturnPyObjError( PyExc_TypeError,
@@ -1008,6 +1013,10 @@ static PyObject *Method_Redraw( PyObject * self, PyObject * args )
{
int after = 0;
+ if (G.background) {
+ Py_RETURN_NONE;
+ }
+
if( !PyArg_ParseTuple( args, "|i", &after ) )
return EXPP_ReturnPyObjError( PyExc_TypeError,
"expected int argument (or nothing)" );
@@ -1022,6 +1031,10 @@ static PyObject *Method_Redraw( PyObject * self, PyObject * args )
static PyObject *Method_Draw( PyObject * self )
{
+ if (G.background) {
+ Py_RETURN_NONE;
+ }
+
/*@ If forced drawing is disable queue a redraw event instead */
if( EXPP_disable_force_draw ) {
scrarea_queue_winredraw( curarea );
@@ -1089,6 +1102,11 @@ static PyObject *Method_UIBlock( PyObject * self, PyObject * args )
PyObject *result = NULL;
ListBase listb= {NULL, NULL};
+ if (G.background) {
+ return EXPP_ReturnPyObjError( PyExc_RuntimeError,
+ "Can't run Draw.UIBlock() in background mode." );
+ }
+
if ( !PyArg_ParseTuple( args, "O", &val ) || !PyCallable_Check( val ) )
return EXPP_ReturnPyObjError( PyExc_AttributeError,
"expected 1 python function and 2 ints" );
@@ -1138,10 +1156,12 @@ static PyObject *Method_UIBlock( PyObject * self, PyObject * args )
Py_RETURN_NONE;
}
-void Set_uiBlock(uiBlock *block)
+#if 0 /* not used yet */
+static void Set_uiBlock(uiBlock *block)
{
uiblock = block;
}
+#endif
static uiBlock *Get_uiBlock( void )
{
@@ -1201,6 +1221,11 @@ static PyObject *Method_Button( PyObject * self, PyObject * args )
int x, y, w, h;
PyObject *callback=NULL;
+ if (G.background) {
+ return EXPP_ReturnPyObjError( PyExc_RuntimeError,
+ "Can't run Draw.Button() in background mode." );
+ }
+
if( !PyArg_ParseTuple( args, "siiiii|sO", &name, &event,
&x, &y, &w, &h, &tip, &callback ) )
return EXPP_ReturnPyObjError( PyExc_TypeError,
@@ -1225,6 +1250,11 @@ static PyObject *Method_Menu( PyObject * self, PyObject * args )
Button *but;
PyObject *callback=NULL;
+ if (G.background) {
+ return EXPP_ReturnPyObjError( PyExc_RuntimeError,
+ "Can't run Draw.Menu() in background mode." );
+ }
+
if( !PyArg_ParseTuple( args, "siiiiii|sO", &name, &event,
&x, &y, &w, &h, &def, &tip, &callback ) )
return EXPP_ReturnPyObjError( PyExc_TypeError,
@@ -1255,6 +1285,11 @@ static PyObject *Method_Toggle( PyObject * self, PyObject * args )
Button *but;
PyObject *callback=NULL;
+ if (G.background) {
+ return EXPP_ReturnPyObjError( PyExc_RuntimeError,
+ "Can't run Draw.Toggle() in background mode." );
+ }
+
if( !PyArg_ParseTuple( args, "siiiiii|sO", &name, &event,
&x, &y, &w, &h, &def, &tip, &callback ) )
return EXPP_ReturnPyObjError( PyExc_TypeError,
@@ -1322,6 +1357,11 @@ static PyObject *Method_Slider( PyObject * self, PyObject * args )
PyObject *mino, *maxo, *inio;
PyObject *callback=NULL;
+ if (G.background) {
+ return EXPP_ReturnPyObjError( PyExc_RuntimeError,
+ "Can't run Draw.Sider() in background mode." );
+ }
+
if( !PyArg_ParseTuple( args, "siiiiiOOO|isO", &name, &event,
&x, &y, &w, &h, &inio, &mino, &maxo, &realtime,
&tip, &callback ) )
@@ -1395,6 +1435,11 @@ static PyObject *Method_Scrollbar( PyObject * self, PyObject * args )
float ini, min, max;
uiBut *ubut;
+ if (G.background) {
+ return EXPP_ReturnPyObjError( PyExc_RuntimeError,
+ "Can't run Draw.Scrollbar() in background mode." );
+ }
+
if( !PyArg_ParseTuple( args, "iiiiiOOO|isO", &event, &x, &y, &w, &h,
&inio, &mino, &maxo, &realtime, &tip ) )
return EXPP_ReturnPyObjError( PyExc_TypeError,
@@ -1454,6 +1499,11 @@ static PyObject *Method_ColorPicker( PyObject * self, PyObject * args )
short x, y, w, h;
PyObject *callback=NULL;
+ if (G.background) {
+ return EXPP_ReturnPyObjError( PyExc_RuntimeError,
+ "Can't run Draw.ColorPicker() in background mode." );
+ }
+
if( !PyArg_ParseTuple( args, "ihhhhO!|sO", &event,
&x, &y, &w, &h, &PyTuple_Type, &inio, &tip, &callback ) )
return EXPP_ReturnPyObjError( PyExc_TypeError,
@@ -1504,6 +1554,11 @@ static PyObject *Method_Normal( PyObject * self, PyObject * args )
short x, y, w, h;
PyObject *callback=NULL;
+ if (G.background) {
+ return EXPP_ReturnPyObjError( PyExc_RuntimeError,
+ "Can't run Draw.Normal() in background mode." );
+ }
+
if( !PyArg_ParseTuple( args, "ihhhhO!|sO", &event,
&x, &y, &w, &h, &PyTuple_Type, &inio, &tip, &callback ) )
return EXPP_ReturnPyObjError( PyExc_TypeError,
@@ -1546,6 +1601,11 @@ static PyObject *Method_Number( PyObject * self, PyObject * args )
PyObject *callback=NULL;
uiBut *ubut= NULL;
+ if (G.background) {
+ return EXPP_ReturnPyObjError( PyExc_RuntimeError,
+ "Can't run Draw.Number() in background mode." );
+ }
+
if( !PyArg_ParseTuple( args, "siiiiiOOO|sO", &name, &event,
&x, &y, &w, &h, &inio, &mino, &maxo, &tip, &callback ) )
return EXPP_ReturnPyObjError( PyExc_TypeError,
@@ -1554,6 +1614,12 @@ static PyObject *Method_Number( PyObject * self, PyObject * args )
UI_METHOD_ERRORCHECK;
+ if ( !PyNumber_Check(inio) || !PyNumber_Check(mino) ||
+ !PyNumber_Check(maxo) ) {
+ return EXPP_ReturnPyObjError( PyExc_TypeError,
+ "expected ints or floats for the initial, min and max values" );
+ }
+
but = newbutton( );
if (tip) strncpy(but->tooltip, tip, BPY_MAX_TOOLTIP);
block = Get_uiBlock( );
@@ -1611,6 +1677,11 @@ static PyObject *Method_String( PyObject * self, PyObject * args )
Button *but;
PyObject *callback=NULL;
+ if (G.background) {
+ return EXPP_ReturnPyObjError( PyExc_RuntimeError,
+ "Can't run Draw.String() in background mode." );
+ }
+
if( !PyArg_ParseTuple( args, "siiiiisi|sO", &info_arg, &event,
&x, &y, &w, &h, &newstr, &len, &tip, &callback ) )
return EXPP_ReturnPyObjError( PyExc_TypeError,
@@ -1687,6 +1758,11 @@ static PyObject *Method_Text( PyObject * self, PyObject * args )
char *font_str = NULL;
struct BMF_Font *font;
+ if (G.background) {
+ return EXPP_ReturnPyObjError( PyExc_RuntimeError,
+ "Can't run Draw.Text() in background mode." );
+ }
+
if( !PyArg_ParseTuple( args, "s|s", &text, &font_str ) )
return EXPP_ReturnPyObjError( PyExc_TypeError,
"expected one or two string arguments" );
@@ -1718,6 +1794,11 @@ static PyObject *Method_Label( PyObject * self, PyObject * args )
char *text;
int x, y, w, h;
+ if (G.background) {
+ return EXPP_ReturnPyObjError( PyExc_RuntimeError,
+ "Can't run Draw.Label() in background mode." );
+ }
+
if( !PyArg_ParseTuple( args, "siiii", &text, &x, &y, &w, &h ) )
return EXPP_ReturnPyObjError( PyExc_TypeError,
"expected a string and four ints" );
@@ -1734,7 +1815,12 @@ static PyObject *Method_PupMenu( PyObject * self, PyObject * args )
char *text;
int maxrow = -1;
PyObject *ret;
-
+
+ if (G.background) {
+ return EXPP_ReturnPyObjError( PyExc_RuntimeError,
+ "Can't run Draw.PupMenu() in background mode." );
+ }
+
if( !PyArg_ParseTuple( args, "s|i", &text, &maxrow ) )
return EXPP_ReturnPyObjError( PyExc_TypeError,
"expected a string and optionally an int as arguments" );
@@ -1821,6 +1907,11 @@ static PyObject *Method_PupTreeMenu( PyObject * self, PyObject * args )
ListBase storage = {NULL, NULL};
TBitem *tb;
+ if (G.background) {
+ return EXPP_ReturnPyObjError( PyExc_RuntimeError,
+ "Can't run Draw.PupMenuTree() in background mode." );
+ }
+
if( !PyArg_ParseTuple( args, "O!", &PyList_Type, &current_menu ) )
return EXPP_ReturnPyObjError( PyExc_TypeError,
"Expected a list" );
@@ -1851,6 +1942,11 @@ static PyObject *Method_PupIntInput( PyObject * self, PyObject * args )
short var = 0;
PyObject *ret = NULL;
+ if (G.background) {
+ return EXPP_ReturnPyObjError( PyExc_RuntimeError,
+ "Can't run Draw.PupIntInput() in background mode." );
+ }
+
if( !PyArg_ParseTuple( args, "s|hii", &text, &var, &min, &max ) )
return EXPP_ReturnPyObjError( PyExc_TypeError,
"expected 1 string and 3 int arguments" );
@@ -1873,6 +1969,11 @@ static PyObject *Method_PupFloatInput( PyObject * self, PyObject * args )
float min = 0, max = 1, var = 0, a1 = 10, a2 = 2;
PyObject *ret = NULL;
+ if (G.background) {
+ return EXPP_ReturnPyObjError( PyExc_RuntimeError,
+ "Can't run Draw.PupFloatInput() in background mode." );
+ }
+
if( !PyArg_ParseTuple
( args, "s|fffff", &text, &var, &min, &max, &a1, &a2 ) )
return EXPP_ReturnPyObjError( PyExc_TypeError,
@@ -1897,6 +1998,11 @@ static PyObject *Method_PupStrInput( PyObject * self, PyObject * args )
char max = 20;
PyObject *ret = NULL;
+ if (G.background) {
+ return EXPP_ReturnPyObjError( PyExc_RuntimeError,
+ "Can't run Draw.PupStrInput() in background mode." );
+ }
+
if( !PyArg_ParseTuple( args, "ss|b", &textMsg, &text, &max ) )
return EXPP_ReturnPyObjError( PyExc_TypeError,
"expected 2 strings and 1 int" );
@@ -1931,6 +2037,11 @@ static PyObject *Method_PupBlock( PyObject * self, PyObject * args )
int len, i;
char *title;
+ if (G.background) {
+ return EXPP_ReturnPyObjError( PyExc_RuntimeError,
+ "Can't run Draw.PupBlock() in background mode." );
+ }
+
if (!PyArg_ParseTuple( args, "sO", &title, &pyList ) || !PySequence_Check( pyList ))
return EXPP_ReturnPyObjError( PyExc_TypeError, "expected a string and a sequence" );
@@ -2064,6 +2175,11 @@ static PyObject *Method_Image( PyObject * self, PyObject * args )
int clipX = 0, clipY = 0, clipW = -1, clipH = -1;
/*GLfloat scissorBox[4];*/
+ if (G.background) {
+ return EXPP_ReturnPyObjError( PyExc_RuntimeError,
+ "Can't run Draw.Image() in background mode." );
+ }
+
/* parse the arguments passed-in from Python */
if( !PyArg_ParseTuple( args, "O!ff|ffiiii", &Image_Type, &pyObjImage,
&originX, &originY, &zoomX, &zoomY,
diff --git a/source/blender/python/api2_2x/Geometry.c b/source/blender/python/api2_2x/Geometry.c
index c800adee30b..89c63870d59 100644
--- a/source/blender/python/api2_2x/Geometry.c
+++ b/source/blender/python/api2_2x/Geometry.c
@@ -54,6 +54,7 @@ static PyObject *M_Geometry_PolyFill( PyObject * self, PyObject * polyLineSeq );
static PyObject *M_Geometry_LineIntersect2D( PyObject * self, PyObject * args );
static PyObject *M_Geometry_ClosestPointOnLine( PyObject * self, PyObject * args );
static PyObject *M_Geometry_PointInTriangle2D( PyObject * self, PyObject * args );
+static PyObject *M_Geometry_PointInQuad2D( PyObject * self, PyObject * args );
static PyObject *M_Geometry_BoxPack2D( PyObject * self, PyObject * args );
@@ -62,7 +63,8 @@ static char M_Geometry_doc[] = "The Blender Geometry module\n\n";
static char M_Geometry_PolyFill_doc[] = "(veclist_list) - takes a list of polylines (each point a vector) and returns the point indicies for a polyline filled with triangles";
static char M_Geometry_LineIntersect2D_doc[] = "(lineA_p1, lineA_p2, lineB_p1, lineB_p2) - takes 2 lines (as 4 vectors) and returns a vector for their point of intersection or None";
static char M_Geometry_ClosestPointOnLine_doc[] = "(pt, line_p1, line_p2) - takes a point and a line and returns a (Vector, Bool) for the point on the line, and the bool so you can know if the point was between the 2 points";
-static char M_Geometry_PointInTriangle2D_doc[] = "(pt, tri_p1, tri_p2, tri_p3) - takes 4 vectors, one is the point and the next 3 define the triabgle, only the x and y are used from the vectors";
+static char M_Geometry_PointInTriangle2D_doc[] = "(pt, tri_p1, tri_p2, tri_p3) - takes 4 vectors, one is the point and the next 3 define the triangle, only the x and y are used from the vectors";
+static char M_Geometry_PointInQuad2D_doc[] = "(pt, quad_p1, quad_p2, quad_p3, quad_p4) - takes 5 vectors, one is the point and the next 4 define the quad, only the x and y are used from the vectors";
static char M_Geometry_BoxPack2D_doc[] = "";
/*-----------------------METHOD DEFINITIONS ----------------------*/
struct PyMethodDef M_Geometry_methods[] = {
@@ -70,6 +72,7 @@ struct PyMethodDef M_Geometry_methods[] = {
{"LineIntersect2D", ( PyCFunction ) M_Geometry_LineIntersect2D, METH_VARARGS, M_Geometry_LineIntersect2D_doc},
{"ClosestPointOnLine", ( PyCFunction ) M_Geometry_ClosestPointOnLine, METH_VARARGS, M_Geometry_ClosestPointOnLine_doc},
{"PointInTriangle2D", ( PyCFunction ) M_Geometry_PointInTriangle2D, METH_VARARGS, M_Geometry_PointInTriangle2D_doc},
+ {"PointInQuad2D", ( PyCFunction ) M_Geometry_PointInQuad2D, METH_VARARGS, M_Geometry_PointInQuad2D_doc},
{"BoxPack2D", ( PyCFunction ) M_Geometry_BoxPack2D, METH_O, M_Geometry_BoxPack2D_doc},
{NULL, NULL, 0, NULL}
};
@@ -313,9 +316,6 @@ static PyObject *M_Geometry_ClosestPointOnLine( PyObject * self, PyObject * args
return ret;
}
-#define SIDE_OF_LINE(pa,pb,pp) ((pa[0]-pp[0])*(pb[1]-pp[1]))-((pb[0]-pp[0])*(pa[1]-pp[1]))
-#define POINT_IN_TRI(p0,p1,p2,p3) ((SIDE_OF_LINE(p1,p2,p0)>=0) && (SIDE_OF_LINE(p2,p3,p0)>=0) && (SIDE_OF_LINE(p3,p1,p0)>=0))
-
static PyObject *M_Geometry_PointInTriangle2D( PyObject * self, PyObject * args )
{
VectorObject *pt_vec, *tri_p1, *tri_p2, *tri_p3;
@@ -329,13 +329,27 @@ static PyObject *M_Geometry_PointInTriangle2D( PyObject * self, PyObject * args
return ( EXPP_ReturnPyObjError
( PyExc_TypeError, "expected 4 vector types\n" ) );
- if POINT_IN_TRI(pt_vec->vec, tri_p1->vec, tri_p2->vec, tri_p3->vec)
- Py_RETURN_TRUE;
- else
- Py_RETURN_FALSE;
+ return PyInt_FromLong(IsectPT2Df(pt_vec->vec, tri_p1->vec, tri_p2->vec, tri_p3->vec));
+}
+
+static PyObject *M_Geometry_PointInQuad2D( PyObject * self, PyObject * args )
+{
+ VectorObject *pt_vec, *quad_p1, *quad_p2, *quad_p3, *quad_p4;
+
+ if( !PyArg_ParseTuple ( args, "O!O!O!O!O!",
+ &vector_Type, &pt_vec,
+ &vector_Type, &quad_p1,
+ &vector_Type, &quad_p2,
+ &vector_Type, &quad_p3,
+ &vector_Type, &quad_p4)
+ )
+ return ( EXPP_ReturnPyObjError
+ ( PyExc_TypeError, "expected 5 vector types\n" ) );
+
+ return PyInt_FromLong(IsectPQ2Df(pt_vec->vec, quad_p1->vec, quad_p2->vec, quad_p3->vec, quad_p4->vec));
}
-int boxPack_FromPyObject(PyObject * value, boxPack **boxarray )
+static int boxPack_FromPyObject(PyObject * value, boxPack **boxarray )
{
int len, i;
PyObject *list_item, *item_1, *item_2;
@@ -379,7 +393,7 @@ int boxPack_FromPyObject(PyObject * value, boxPack **boxarray )
return 0;
}
-void boxPack_ToPyObject(PyObject * value, boxPack **boxarray)
+static void boxPack_ToPyObject(PyObject * value, boxPack **boxarray)
{
int len, i;
PyObject *list_item;
@@ -399,7 +413,7 @@ void boxPack_ToPyObject(PyObject * value, boxPack **boxarray)
static PyObject *M_Geometry_BoxPack2D( PyObject * self, PyObject * boxlist )
{
- boxPack *boxarray;
+ boxPack *boxarray = NULL;
float tot_width, tot_height;
int len;
int error;
diff --git a/source/blender/python/api2_2x/Group.c b/source/blender/python/api2_2x/Group.c
index 3e7f02c3797..0998053e7e1 100644
--- a/source/blender/python/api2_2x/Group.c
+++ b/source/blender/python/api2_2x/Group.c
@@ -46,6 +46,8 @@
#include "gen_utils.h"
#include "gen_library.h"
+#include "vector.h"
+
/* checks for the group being removed */
#define GROUP_DEL_CHECK_PY(bpy_group) if (!(bpy_group->group)) return ( EXPP_ReturnPyObjError( PyExc_RuntimeError, "Group has been removed" ) )
#define GROUP_DEL_CHECK_INT(bpy_group) if (!(bpy_group->group)) return ( EXPP_ReturnIntError( PyExc_RuntimeError, "Group has been removed" ) )
@@ -54,8 +56,8 @@
/* Python API function prototypes for the Blender module. */
/*****************************************************************************/
static PyObject *M_Group_New( PyObject * self, PyObject * args );
-PyObject *M_Group_Get( PyObject * self, PyObject * args );
-PyObject *M_Group_Unlink( PyObject * self, BPy_Group * pygrp );
+static PyObject *M_Group_Get( PyObject * self, PyObject * args );
+static PyObject *M_Group_Unlink( PyObject * self, BPy_Group * pygrp );
/* internal */
static PyObject *GroupObSeq_CreatePyObject( BPy_Group *self, GroupObject *iter );
@@ -200,6 +202,31 @@ static int Group_setObjects( BPy_Group * self, PyObject * args )
return 0;
}
+static PyObject *Group_getDupliOfs( BPy_Group * self )
+{
+ GROUP_DEL_CHECK_PY(self);
+ return newVectorObject( self->group->dupli_ofs, 3, Py_WRAP );
+}
+
+static int Group_setDupliOfs( BPy_Group * self, PyObject * value )
+{
+ VectorObject *bpy_vec;
+ GROUP_DEL_CHECK_INT(self);
+ if (!VectorObject_Check(value))
+ return ( EXPP_ReturnIntError( PyExc_TypeError,
+ "expected a vector" ) );
+
+ bpy_vec = (VectorObject *)value;
+
+ if (bpy_vec->size != 3)
+ return ( EXPP_ReturnIntError( PyExc_ValueError,
+ "can only assign a 3D vector" ) );
+
+ self->group->dupli_ofs[0] = bpy_vec->vec[0];
+ self->group->dupli_ofs[1] = bpy_vec->vec[1];
+ self->group->dupli_ofs[2] = bpy_vec->vec[2];
+ return 0;
+}
/*****************************************************************************/
@@ -251,6 +278,10 @@ static PyGetSetDef BPy_Group_getseters[] = {
(getter)Group_getObjects, (setter)Group_setObjects,
"objects in this group",
NULL},
+ {"dupliOffset",
+ (getter)Group_getDupliOfs, (setter)Group_setDupliOfs,
+ "offset to use when instancing this group as a DupliGroup",
+ NULL},
{NULL,NULL,NULL,NULL,NULL} /* Sentinel */
};
@@ -374,7 +405,7 @@ PyObject *M_Group_New( PyObject * self, PyObject * args )
/* Function: M_Group_Get */
/* Python equivalent: Blender.Group.Get */
/*****************************************************************************/
-PyObject *M_Group_Get( PyObject * self, PyObject * args )
+static PyObject *M_Group_Get( PyObject * self, PyObject * args )
{
char *name = NULL;
Group *group_iter;
@@ -444,7 +475,7 @@ PyObject *M_Group_Get( PyObject * self, PyObject * args )
/* Function: M_Group_Unlink */
/* Python equivalent: Blender.Group.Unlink */
/*****************************************************************************/
-PyObject *M_Group_Unlink( PyObject * self, BPy_Group * pygrp )
+static PyObject *M_Group_Unlink( PyObject * self, BPy_Group * pygrp )
{
Group *group;
if( !BPy_Group_Check(pygrp) )
diff --git a/source/blender/python/api2_2x/IDProp.c b/source/blender/python/api2_2x/IDProp.c
index 4a51619aec4..07269e54c7c 100644
--- a/source/blender/python/api2_2x/IDProp.c
+++ b/source/blender/python/api2_2x/IDProp.c
@@ -154,7 +154,7 @@ PyObject *BPy_IDGroup_GetName(BPy_IDProperty *self, void *bleh)
return PyString_FromString(self->prop->name);
}
-int BPy_IDGroup_SetName(BPy_IDProperty *self, PyObject *value, void *bleh)
+static int BPy_IDGroup_SetName(BPy_IDProperty *self, PyObject *value, void *bleh)
{
char *st;
if (!PyString_Check(value))
@@ -168,7 +168,7 @@ int BPy_IDGroup_SetName(BPy_IDProperty *self, PyObject *value, void *bleh)
return 0;
}
-PyObject *BPy_IDGroup_GetType(BPy_IDProperty *self)
+static PyObject *BPy_IDGroup_GetType(BPy_IDProperty *self)
{
return PyInt_FromLong((long)self->prop->type);
}
@@ -181,7 +181,7 @@ static PyGetSetDef BPy_IDGroup_getseters[] = {
{NULL, NULL, NULL, NULL, NULL}
};
-int BPy_IDGroup_Map_Len(BPy_IDProperty *self)
+static int BPy_IDGroup_Map_Len(BPy_IDProperty *self)
{
if (self->prop->type != IDP_GROUP)
return EXPP_ReturnIntError( PyExc_TypeError,
@@ -190,7 +190,7 @@ int BPy_IDGroup_Map_Len(BPy_IDProperty *self)
return self->prop->len;
}
-PyObject *BPy_IDGroup_Map_GetItem(BPy_IDProperty *self, PyObject *item)
+static PyObject *BPy_IDGroup_Map_GetItem(BPy_IDProperty *self, PyObject *item)
{
IDProperty *loop;
char *st;
@@ -212,7 +212,7 @@ PyObject *BPy_IDGroup_Map_GetItem(BPy_IDProperty *self, PyObject *item)
}
/*returns NULL on success, error string on failure*/
-char *BPy_IDProperty_Map_ValidateAndCreate(char *name, IDProperty *group, PyObject *ob)
+static char *BPy_IDProperty_Map_ValidateAndCreate(char *name, IDProperty *group, PyObject *ob)
{
IDProperty *prop = NULL;
IDPropertyTemplate val = {0};
@@ -297,7 +297,7 @@ char *BPy_IDProperty_Map_ValidateAndCreate(char *name, IDProperty *group, PyObje
return NULL;
}
-int BPy_IDGroup_Map_SetItem(BPy_IDProperty *self, PyObject *key, PyObject *val)
+static int BPy_IDGroup_Map_SetItem(BPy_IDProperty *self, PyObject *key, PyObject *val)
{
char *err;
@@ -325,7 +325,7 @@ int BPy_IDGroup_Map_SetItem(BPy_IDProperty *self, PyObject *key, PyObject *val)
return 0;
}
-PyObject *BPy_IDGroup_SpawnIterator(BPy_IDProperty *self)
+static PyObject *BPy_IDGroup_SpawnIterator(BPy_IDProperty *self)
{
BPy_IDGroup_Iter *iter = PyObject_New(BPy_IDGroup_Iter, &IDGroup_Iter_Type);
@@ -339,7 +339,7 @@ PyObject *BPy_IDGroup_SpawnIterator(BPy_IDProperty *self)
return (PyObject*) iter;
}
-PyObject *BPy_IDGroup_MapDataToPy(IDProperty *prop)
+static PyObject *BPy_IDGroup_MapDataToPy(IDProperty *prop)
{
switch (prop->type) {
case IDP_STRING:
@@ -401,7 +401,7 @@ PyObject *BPy_IDGroup_MapDataToPy(IDProperty *prop)
"eek!! a property exists with a bad type code!!!" );
}
-PyObject *BPy_IDGroup_Pop(BPy_IDProperty *self, PyObject *value)
+static PyObject *BPy_IDGroup_Pop(BPy_IDProperty *self, PyObject *value)
{
IDProperty *loop;
PyObject *pyform;
@@ -431,7 +431,7 @@ PyObject *BPy_IDGroup_Pop(BPy_IDProperty *self, PyObject *value)
"item not in group" );
}
-PyObject *BPy_IDGroup_IterItems(BPy_IDProperty *self)
+static PyObject *BPy_IDGroup_IterItems(BPy_IDProperty *self)
{
BPy_IDGroup_Iter *iter = PyObject_New(BPy_IDGroup_Iter, &IDGroup_Iter_Type);
@@ -446,7 +446,7 @@ PyObject *BPy_IDGroup_IterItems(BPy_IDProperty *self)
return (PyObject*) iter;
}
-PyObject *BPy_IDGroup_GetKeys(BPy_IDProperty *self)
+static PyObject *BPy_IDGroup_GetKeys(BPy_IDProperty *self)
{
PyObject *seq = PyList_New(self->prop->len);
IDProperty *loop;
@@ -481,7 +481,7 @@ PyObject *BPy_IDGroup_GetKeys(BPy_IDProperty *self)
return seq;
}
-PyObject *BPy_IDGroup_GetValues(BPy_IDProperty *self)
+static PyObject *BPy_IDGroup_GetValues(BPy_IDProperty *self)
{
PyObject *seq = PyList_New(self->prop->len);
IDProperty *loop;
@@ -517,7 +517,7 @@ PyObject *BPy_IDGroup_GetValues(BPy_IDProperty *self)
return seq;
}
-PyObject *BPy_IDGroup_HasKey(BPy_IDProperty *self, PyObject *value)
+static PyObject *BPy_IDGroup_HasKey(BPy_IDProperty *self, PyObject *value)
{
IDProperty *loop;
char *name = PyString_AsString(value);
@@ -533,7 +533,7 @@ PyObject *BPy_IDGroup_HasKey(BPy_IDProperty *self, PyObject *value)
Py_RETURN_FALSE;
}
-PyObject *BPy_IDGroup_Update(BPy_IDProperty *self, PyObject *vars)
+static PyObject *BPy_IDGroup_Update(BPy_IDProperty *self, PyObject *vars)
{
PyObject *pyob, *pkey, *pval;
Py_ssize_t i=0;
@@ -555,7 +555,7 @@ PyObject *BPy_IDGroup_Update(BPy_IDProperty *self, PyObject *vars)
Py_RETURN_NONE;
}
-PyObject *BPy_IDGroup_ConvertToPy(BPy_IDProperty *self)
+static PyObject *BPy_IDGroup_ConvertToPy(BPy_IDProperty *self)
{
return BPy_IDGroup_MapDataToPy(self->prop);
}
@@ -665,18 +665,18 @@ PyObject *BPy_Wrap_IDProperty(ID *id, IDProperty *prop, IDProperty *parent)
/********Array Wrapper********/
-PyObject *IDArray_repr(BPy_IDArray *self)
+static PyObject *IDArray_repr(BPy_IDArray *self)
{
return PyString_FromString("(ID Array)");
}
-PyObject *BPy_IDArray_GetType(BPy_IDArray *self)
+static PyObject *BPy_IDArray_GetType(BPy_IDArray *self)
{
return PyInt_FromLong( (long)self->prop->subtype );
}
-PyObject *BPy_IDArray_GetLen(BPy_IDArray *self)
+static PyObject *BPy_IDArray_GetLen(BPy_IDArray *self)
{
return PyInt_FromLong( (long)self->prop->len );
}
@@ -693,12 +693,12 @@ static PyGetSetDef BPy_IDArray_getseters[] = {
{NULL, NULL, NULL, NULL, NULL},
};
-int BPy_IDArray_Len(BPy_IDArray *self)
+static int BPy_IDArray_Len(BPy_IDArray *self)
{
return self->prop->len;
}
-PyObject *BPy_IDArray_GetItem(BPy_IDArray *self, int index)
+static PyObject *BPy_IDArray_GetItem(BPy_IDArray *self, int index)
{
if (index < 0 || index >= self->prop->len)
return EXPP_ReturnPyObjError( PyExc_IndexError,
@@ -719,7 +719,7 @@ PyObject *BPy_IDArray_GetItem(BPy_IDArray *self, int index)
"invalid/corrupt array type!");
}
-int BPy_IDArray_SetItem(BPy_IDArray *self, int index, PyObject *val)
+static int BPy_IDArray_SetItem(BPy_IDArray *self, int index, PyObject *val)
{
int i;
float f;
@@ -865,18 +865,18 @@ PyTypeObject IDArray_Type = {
/*********** ID Property Group iterator ********/
-PyObject *IDGroup_Iter_iterself(PyObject *self)
+static PyObject *IDGroup_Iter_iterself(PyObject *self)
{
Py_XINCREF(self);
return self;
}
-PyObject *IDGroup_Iter_repr(BPy_IDGroup_Iter *self)
+static PyObject *IDGroup_Iter_repr(BPy_IDGroup_Iter *self)
{
return PyString_FromString("(ID Property Group)");
}
-PyObject *BPy_Group_Iter_Next(BPy_IDGroup_Iter *self)
+static PyObject *BPy_Group_Iter_Next(BPy_IDGroup_Iter *self)
{
IDProperty *cur=NULL;
PyObject *tmpval;
diff --git a/source/blender/python/api2_2x/Image.c b/source/blender/python/api2_2x/Image.c
index 94da5a77170..5ef2cbadbdc 100644
--- a/source/blender/python/api2_2x/Image.c
+++ b/source/blender/python/api2_2x/Image.c
@@ -29,7 +29,6 @@
*/
#include "Image.h" /*This must come first */
-#include "BDR_drawmesh.h" /* free_realtime_image */
#include "BKE_main.h"
#include "BKE_global.h"
#include "BKE_library.h"
@@ -48,6 +47,7 @@
#include "BKE_icons.h"
#include "IMB_imbuf.h"
#include "IDProp.h"
+#include "GPU_draw.h"
/* used so we can get G.scene->r.cfra for getting the
current image frame, some images change frame if they are a sequence */
@@ -1003,7 +1003,7 @@ static PyObject *Image_glFree( BPy_Image * self )
{
Image *image = self->image;
- free_realtime_image( image );
+ GPU_free_image( image );
/* remove the nocollect flag, image is available for garbage collection again */
image->flag &= ~IMA_NOCOLLECT;
Py_RETURN_NONE;
diff --git a/source/blender/python/api2_2x/Ipo.c b/source/blender/python/api2_2x/Ipo.c
index 68768fc9346..e6c67534a36 100644
--- a/source/blender/python/api2_2x/Ipo.c
+++ b/source/blender/python/api2_2x/Ipo.c
@@ -36,6 +36,7 @@
#include "BKE_object.h"
#include "BKE_ipo.h"
#include "BLI_blenlib.h"
+#include "BIF_keyframing.h"
#include "BIF_space.h"
#include "BSE_editipo.h"
#include "MEM_guardedalloc.h"
@@ -1026,7 +1027,6 @@ static PyObject *Ipo_getCurveNames( BPy_Ipo * self )
{
namefunc lookup_name;
int size;
- PyObject *dict;
int *vals = NULL;
char name[32];
PyObject *attr = Py_None;
@@ -1130,7 +1130,6 @@ static PyObject *Ipo_getCurveNames( BPy_Ipo * self )
* with string as key and adrcode as value
*/
- dict = PyModule_GetDict( submodule );
attr = PyConstant_New();
while( size-- ) {
@@ -1147,7 +1146,7 @@ static PyObject *Ipo_getCurveNames( BPy_Ipo * self )
return attr;
}
-void generate_curveconsts( PyObject* module )
+static void generate_curveconsts( PyObject* module )
{
namefunc lookup_name = NULL;
int size = 0;
diff --git a/source/blender/python/api2_2x/Ipocurve.c b/source/blender/python/api2_2x/Ipocurve.c
index b9bfb77d19e..4a8cba30e8e 100644
--- a/source/blender/python/api2_2x/Ipocurve.c
+++ b/source/blender/python/api2_2x/Ipocurve.c
@@ -35,6 +35,7 @@
#include "BKE_depsgraph.h"
#include "BKE_ipo.h"
#include "BKE_utildefines.h"
+#include "BIF_keyframing.h"
#include "BIF_space.h"
#include "BSE_editipo.h"
#include "MEM_guardedalloc.h"
diff --git a/source/blender/python/api2_2x/Ipocurve.h b/source/blender/python/api2_2x/Ipocurve.h
index 8263bf2022f..6f474d4d167 100644
--- a/source/blender/python/api2_2x/Ipocurve.h
+++ b/source/blender/python/api2_2x/Ipocurve.h
@@ -31,7 +31,7 @@
#define EXPP_IPOCURVE_H
#include <Python.h>
-#include "DNA_curve_types.h" /* declaration of IpoCurve */
+#include "DNA_ipo_types.h" /* declaration of IpoCurve */
/*****************************************************************************/
/* Python C_IpoCurve structure definition: */
diff --git a/source/blender/python/api2_2x/Lamp.c b/source/blender/python/api2_2x/Lamp.c
index 53d25a6429d..799833d4ee0 100644
--- a/source/blender/python/api2_2x/Lamp.c
+++ b/source/blender/python/api2_2x/Lamp.c
@@ -34,15 +34,20 @@
#include "BKE_global.h"
#include "BKE_object.h"
#include "BKE_library.h"
+#include "BKE_texture.h"
#include "BLI_blenlib.h"
+#include "BIF_keyframing.h"
#include "BIF_space.h"
#include "BSE_editipo.h"
#include "mydevice.h"
#include "Ipo.h"
+#include "MTex.h"
#include "constant.h"
#include "gen_utils.h"
#include "gen_library.h"
#include "BKE_utildefines.h"
+#include "DNA_userdef_types.h"
+#include "MEM_guardedalloc.h"
/*****************************************************************************/
/* Python BPy_Lamp defaults: */
@@ -84,6 +89,8 @@
#define EXPP_LAMP_MODE_NODIFFUSE 2048
#define EXPP_LAMP_MODE_NOSPECULAR 4096
#define EXPP_LAMP_MODE_SHAD_RAY 8192
+#define EXPP_LAMP_MODE_LAYER_SHADOW 32768
+
/* Lamp MIN, MAX values */
#define EXPP_LAMP_SAMPLES_MIN 1
@@ -204,6 +211,7 @@ static PyObject *Lamp_getQuad2( BPy_Lamp * self );
static PyObject *Lamp_getCol( BPy_Lamp * self );
static PyObject *Lamp_getIpo( BPy_Lamp * self );
static PyObject *Lamp_getComponent( BPy_Lamp * self, void * closure );
+static PyObject *Lamp_getTextures( BPy_Lamp * self );
static PyObject *Lamp_clearIpo( BPy_Lamp * self );
static PyObject *Lamp_insertIpoKey( BPy_Lamp * self, PyObject * args );
static PyObject *Lamp_oldsetIpo( BPy_Lamp * self, PyObject * args );
@@ -251,6 +259,7 @@ static int Lamp_setHaloInt( BPy_Lamp * self, PyObject * args );
static int Lamp_setQuad1( BPy_Lamp * self, PyObject * args );
static int Lamp_setQuad2( BPy_Lamp * self, PyObject * args );
static int Lamp_setCol( BPy_Lamp * self, PyObject * args );
+static int Lamp_setTextures( BPy_Lamp * self, PyObject * value );
static PyObject *Lamp_getScriptLinks( BPy_Lamp * self, PyObject * value );
static PyObject *Lamp_addScriptLink( BPy_Lamp * self, PyObject * args );
static PyObject *Lamp_clearScriptLinks( BPy_Lamp * self, PyObject * args );
@@ -498,6 +507,10 @@ static PyGetSetDef BPy_Lamp_getseters[] = {
(getter)Lamp_getComponent, (setter)Lamp_setComponent,
"Lamp color blue component",
(void *)EXPP_LAMP_COMP_B},
+ {"textures",
+ (getter)Lamp_getTextures, (setter)Lamp_setTextures,
+ "The Lamp's texture list as a tuple",
+ NULL},
{"Modes",
(getter)Lamp_getModesConst, (setter)NULL,
"Dictionary of values for 'mode' attribute",
@@ -780,6 +793,8 @@ static PyObject *Lamp_ModesDict( void )
PyInt_FromLong( EXPP_LAMP_MODE_NOSPECULAR ) );
PyConstant_Insert( c, "RayShadow",
PyInt_FromLong( EXPP_LAMP_MODE_SHAD_RAY ) );
+ PyConstant_Insert( c, "LayerShadow",
+ PyInt_FromLong( EXPP_LAMP_MODE_LAYER_SHADOW ) );
}
return Modes;
@@ -1011,8 +1026,8 @@ static int Lamp_setType( BPy_Lamp * self, PyObject * value )
static int Lamp_setMode( BPy_Lamp * self, PyObject * value )
{
- short param;
- static short bitmask = EXPP_LAMP_MODE_SHADOWS
+ int param;
+ static int bitmask = EXPP_LAMP_MODE_SHADOWS
| EXPP_LAMP_MODE_HALO
| EXPP_LAMP_MODE_LAYER
| EXPP_LAMP_MODE_QUAD
@@ -1022,14 +1037,15 @@ static int Lamp_setMode( BPy_Lamp * self, PyObject * value )
| EXPP_LAMP_MODE_SQUARE
| EXPP_LAMP_MODE_NODIFFUSE
| EXPP_LAMP_MODE_NOSPECULAR
- | EXPP_LAMP_MODE_SHAD_RAY;
+ | EXPP_LAMP_MODE_SHAD_RAY
+ | EXPP_LAMP_MODE_LAYER_SHADOW;
if( !PyInt_Check ( value ) ) {
char errstr[128];
sprintf ( errstr , "expected int bitmask of 0x%04x", bitmask );
return EXPP_ReturnIntError( PyExc_TypeError, errstr );
}
- param = (short)PyInt_AS_LONG ( value );
+ param = PyInt_AS_LONG ( value );
if ( ( param & bitmask ) != param )
return EXPP_ReturnIntError( PyExc_ValueError,
@@ -1321,7 +1337,7 @@ static int Lamp_setIpo( BPy_Lamp * self, PyObject * value )
static PyObject *Lamp_insertIpoKey( BPy_Lamp * self, PyObject * args )
{
- int key = 0, map;
+ int key = 0, flag = 0, map;
if( !PyArg_ParseTuple( args, "i", &( key ) ) )
return ( EXPP_ReturnPyObjError( PyExc_AttributeError,
@@ -1329,26 +1345,29 @@ static PyObject *Lamp_insertIpoKey( BPy_Lamp * self, PyObject * args )
map = texchannel_to_adrcode(self->lamp->texact);
+ /* flag should be initialised with the 'autokeying' flags like for normal keying */
+ if (IS_AUTOKEY_FLAG(INSERTNEEDED)) flag |= INSERTKEY_NEEDED;
+
if (key == IPOKEY_RGB ) {
- insertkey((ID *)self->lamp, ID_LA, NULL, NULL, LA_COL_R, 0);
- insertkey((ID *)self->lamp, ID_LA, NULL, NULL,LA_COL_G, 0);
- insertkey((ID *)self->lamp, ID_LA, NULL, NULL,LA_COL_B, 0);
+ insertkey((ID *)self->lamp, ID_LA, NULL, NULL, LA_COL_R, flag);
+ insertkey((ID *)self->lamp, ID_LA, NULL, NULL,LA_COL_G, flag);
+ insertkey((ID *)self->lamp, ID_LA, NULL, NULL,LA_COL_B, flag);
}
if (key == IPOKEY_ENERGY ) {
- insertkey((ID *)self->lamp, ID_LA, NULL, NULL,LA_ENERGY, 0);
+ insertkey((ID *)self->lamp, ID_LA, NULL, NULL,LA_ENERGY, flag);
}
if (key == IPOKEY_SPOTSIZE ) {
- insertkey((ID *)self->lamp, ID_LA, NULL, NULL,LA_SPOTSI, 0);
+ insertkey((ID *)self->lamp, ID_LA, NULL, NULL,LA_SPOTSI, flag);
}
if (key == IPOKEY_OFFSET ) {
- insertkey((ID *)self->lamp, ID_LA, NULL, NULL, map+MAP_OFS_X, 0);
- insertkey((ID *)self->lamp, ID_LA, NULL, NULL, map+MAP_OFS_Y, 0);
- insertkey((ID *)self->lamp, ID_LA, NULL, NULL, map+MAP_OFS_Z, 0);
+ insertkey((ID *)self->lamp, ID_LA, NULL, NULL, map+MAP_OFS_X, flag);
+ insertkey((ID *)self->lamp, ID_LA, NULL, NULL, map+MAP_OFS_Y, flag);
+ insertkey((ID *)self->lamp, ID_LA, NULL, NULL, map+MAP_OFS_Z, flag);
}
if (key == IPOKEY_SIZE ) {
- insertkey((ID *)self->lamp, ID_LA, NULL, NULL, map+MAP_SIZE_X, 0);
- insertkey((ID *)self->lamp, ID_LA, NULL, NULL, map+MAP_SIZE_Y, 0);
- insertkey((ID *)self->lamp, ID_LA, NULL, NULL, map+MAP_SIZE_Z, 0);
+ insertkey((ID *)self->lamp, ID_LA, NULL, NULL, map+MAP_SIZE_X, flag);
+ insertkey((ID *)self->lamp, ID_LA, NULL, NULL, map+MAP_SIZE_Y, flag);
+ insertkey((ID *)self->lamp, ID_LA, NULL, NULL, map+MAP_SIZE_Z, flag);
}
allspace(REMAKEIPO, 0);
@@ -1373,7 +1392,8 @@ static PyObject *Lamp_getModesConst( void )
EXPP_LAMP_MODE_SQUARE, "NoDiffuse",
EXPP_LAMP_MODE_NODIFFUSE, "NoSpecular",
EXPP_LAMP_MODE_NOSPECULAR, "RayShadow",
- EXPP_LAMP_MODE_SHAD_RAY);
+ EXPP_LAMP_MODE_SHAD_RAY, "LayerShadow",
+ EXPP_LAMP_MODE_LAYER_SHADOW);
}
static PyObject *Lamp_getTypesConst( void )
@@ -1387,6 +1407,100 @@ static PyObject *Lamp_getTypesConst( void )
"Photon", EXPP_LAMP_TYPE_YF_PHOTON );
}
+static PyObject *Lamp_getTextures( BPy_Lamp * self )
+{
+ int i;
+ PyObject *tuple;
+
+ /* build a texture list */
+ tuple = PyTuple_New( MAX_MTEX );
+ if( !tuple )
+ return EXPP_ReturnPyObjError( PyExc_MemoryError,
+ "couldn't create PyTuple" );
+
+ for( i = 0; i < MAX_MTEX; ++i ) {
+ struct MTex *mtex = self->lamp->mtex[i];
+ if( mtex ) {
+ PyTuple_SET_ITEM( tuple, i, MTex_CreatePyObject( mtex, ID_LA ) );
+ } else {
+ Py_INCREF( Py_None );
+ PyTuple_SET_ITEM( tuple, i, Py_None );
+ }
+ }
+
+ return tuple;
+}
+
+static int Lamp_setTextures( BPy_Lamp * self, PyObject * value )
+{
+ int i;
+
+ if( !PyList_Check( value ) && !PyTuple_Check( value ) )
+ return EXPP_ReturnIntError( PyExc_TypeError,
+ "expected tuple or list of integers" );
+
+ /* don't allow more than MAX_MTEX items */
+ if( PySequence_Size(value) > MAX_MTEX )
+ return EXPP_ReturnIntError( PyExc_AttributeError,
+ "size of sequence greater than number of allowed textures" );
+
+ /* get a fast sequence; in Python 2.5, this just return the original
+ * list or tuple and INCREFs it, so we must DECREF */
+ value = PySequence_Fast( value, "" );
+
+ /* check the list for valid entries */
+ for( i= 0; i < PySequence_Size(value) ; ++i ) {
+ PyObject *item = PySequence_Fast_GET_ITEM( value, i );
+ if( item == Py_None || ( BPy_MTex_Check( item ) &&
+ ((BPy_MTex *)item)->type == ID_LA ) ) {
+ continue;
+ } else {
+ Py_DECREF(value);
+ return EXPP_ReturnIntError( PyExc_TypeError,
+ "expected tuple or list containing lamp MTex objects and NONE" );
+ }
+ }
+
+ /* for each MTex object, copy to this structure */
+ for( i= 0; i < PySequence_Size(value) ; ++i ) {
+ PyObject *item = PySequence_Fast_GET_ITEM( value, i );
+ struct MTex *mtex = self->lamp->mtex[i];
+ if( item != Py_None ) {
+ BPy_MTex *obj = (BPy_MTex *)item;
+
+ /* if MTex is already at this location, just skip it */
+ if( obj->mtex == mtex ) continue;
+
+ /* create a new entry if needed, otherwise update reference count
+ * for texture that is being replaced */
+ if( !mtex )
+ mtex = self->lamp->mtex[i] = add_mtex( );
+ else
+ mtex->tex->id.us--;
+
+ /* copy the data */
+ mtex->tex = obj->mtex->tex;
+ id_us_plus( &mtex->tex->id );
+ mtex->texco = obj->mtex->texco;
+ mtex->mapto = obj->mtex->mapto;
+ }
+ }
+
+ /* now go back and free any entries now marked as None */
+ for( i= 0; i < PySequence_Size(value) ; ++i ) {
+ PyObject *item = PySequence_Fast_GET_ITEM( value, i );
+ struct MTex *mtex = self->lamp->mtex[i];
+ if( item == Py_None && mtex ) {
+ mtex->tex->id.us--;
+ MEM_freeN( mtex );
+ self->lamp->mtex[i] = NULL;
+ }
+ }
+
+ Py_DECREF(value);
+ return 0;
+}
+
/* #####DEPRECATED###### */
static PyObject *Lamp_oldsetSamples( BPy_Lamp * self, PyObject * args )
@@ -1597,6 +1711,8 @@ static PyObject *Lamp_oldsetMode( BPy_Lamp * self, PyObject * args )
flag |= ( short ) EXPP_LAMP_MODE_NOSPECULAR;
else if( !strcmp( name, "RayShadow" ) )
flag |= ( short ) EXPP_LAMP_MODE_SHAD_RAY;
+ else if( !strcmp( name, "LayerShadow" ) )
+ flag |= ( short ) EXPP_LAMP_MODE_LAYER_SHADOW;
else
return EXPP_ReturnPyObjError( PyExc_AttributeError,
"unknown lamp flag argument" );
diff --git a/source/blender/python/api2_2x/MTex.c b/source/blender/python/api2_2x/MTex.c
index b9a8f7fff65..4db9715a465 100644
--- a/source/blender/python/api2_2x/MTex.c
+++ b/source/blender/python/api2_2x/MTex.c
@@ -22,10 +22,11 @@
*
* This is a new part of Blender.
*
- * Contributor(s): Alex Mole, Yehoshua Sapir
+ * Contributor(s): Alex Mole, Yehoshua Sapir, Ken Hughes
*
* ***** END GPL LICENSE BLOCK *****
*/
+
#include "MTex.h" /*This must come first*/
#include "BKE_utildefines.h"
@@ -35,7 +36,8 @@
#include "gen_utils.h"
#include "gen_library.h"
-#include <DNA_material_types.h>
+#include "DNA_material_types.h"
+#include "DNA_world_types.h"
/*****************************************************************************/
/* Python BPy_MTex methods declarations: */
@@ -94,6 +96,7 @@ MTEXGETSET(ProjX)
MTEXGETSET(ProjY)
MTEXGETSET(ProjZ)
MTEXGETSET(MapToFlag)
+MTEXGETSET(WorldMapToFlag)
/*****************************************************************************/
/* Python get/set methods table */
@@ -154,8 +157,14 @@ static PyGetSetDef MTex_getseters[] = {
"Projection of Y axis to Texture space", NULL },
{ "zproj", (getter) MTex_getProjZ, (setter) MTex_setProjZ,
"Projection of Z axis to Texture space", NULL },
+
+ /* MapTo for Material and Lamp MTex */
+
{ "mtCol", (getter) MTex_getMapToFlag, (setter) MTex_setMapToFlag,
"How texture maps to color", (void*) MAP_COL },
+
+ /* MapTo for Material MTex */
+
{ "mtNor", (getter) MTex_getMapToFlag, (setter) MTex_setMapToFlag,
"How texture maps to normals", (void*) MAP_NORM },
{ "mtCsp", (getter) MTex_getMapToFlag, (setter) MTex_setMapToFlag,
@@ -182,6 +191,18 @@ static PyGetSetDef MTex_getseters[] = {
"How texture maps to displacement", (void*) MAP_DISPLACE },
{ "mtWarp", (getter) MTex_getMapToFlag, (setter) MTex_setMapToFlag,
"How texture maps to warp", (void*) MAP_WARP },
+
+ /* MapTo for World MTex */
+
+ { "mtBlend", (getter) MTex_getWorldMapToFlag, (setter) MTex_setWorldMapToFlag,
+ "Texture affects color progression of background", (void*) WOMAP_BLEND },
+ { "mtHoriz", (getter) MTex_getWorldMapToFlag, (setter) MTex_setWorldMapToFlag,
+ "Texture affects color of the horizon", (void*) WOMAP_HORIZ },
+ { "mtZenUp", (getter) MTex_getWorldMapToFlag, (setter) MTex_setWorldMapToFlag,
+ "Texture affects color of the zenith above", (void*) WOMAP_ZENUP },
+ { "mtZenDown", (getter) MTex_getWorldMapToFlag, (setter) MTex_setWorldMapToFlag,
+ "Texture affects color of the zenith below", (void*) WOMAP_ZENDOWN },
+
{ NULL, NULL, NULL, NULL, NULL }
};
@@ -252,7 +273,7 @@ PyObject *MTex_Init( void )
return submodule;
}
-PyObject *MTex_CreatePyObject( MTex * mtex )
+PyObject *MTex_CreatePyObject( MTex * mtex, unsigned short type )
{
BPy_MTex *pymtex;
@@ -262,6 +283,7 @@ PyObject *MTex_CreatePyObject( MTex * mtex )
"couldn't create BPy_MTex PyObject" );
pymtex->mtex = mtex;
+ pymtex->type = type;
return ( PyObject * ) pymtex;
}
@@ -286,7 +308,12 @@ static int MTex_compare( BPy_MTex * a, BPy_MTex * b )
static PyObject *MTex_repr( BPy_MTex * self )
{
- return PyString_FromFormat( "[MTex]" );
+ if( self->type == ID_MA )
+ return PyString_FromFormat( "[MTex (Material)]" );
+ else if( self->type == ID_LA )
+ return PyString_FromFormat( "[MTex (Lamp)]" );
+ else
+ return PyString_FromFormat( "[MTex (World)]" );
}
@@ -316,19 +343,37 @@ static int MTex_setTexCo( BPy_MTex *self, PyObject *value, void *closure)
{
int texco;
- if( !PyInt_Check( value ) ) {
+ if( !PyInt_Check( value ) )
return EXPP_ReturnIntError( PyExc_TypeError,
"Value must be a member of Texture.TexCo dictionary" );
- }
texco = PyInt_AsLong( value ) ;
- if (texco != TEXCO_ORCO && texco != TEXCO_REFL && texco != TEXCO_NORM &&
- texco != TEXCO_GLOB && texco != TEXCO_UV && texco != TEXCO_OBJECT &&
- texco != TEXCO_STRESS && texco != TEXCO_TANGENT && texco != TEXCO_WINDOW &&
- texco != TEXCO_VIEW && texco != TEXCO_STICKY )
- return EXPP_ReturnIntError( PyExc_ValueError,
- "Value must be a member of Texture.TexCo dictionary" );
+ switch ( self->type ) {
+ case ID_MA :
+ if( texco != TEXCO_ORCO && texco != TEXCO_REFL &&
+ texco != TEXCO_NORM && texco != TEXCO_GLOB &&
+ texco != TEXCO_UV && texco != TEXCO_OBJECT &&
+ texco != TEXCO_STRESS && texco != TEXCO_TANGENT &&
+ texco != TEXCO_WINDOW && texco != TEXCO_VIEW &&
+ texco != TEXCO_STICKY )
+ return EXPP_ReturnIntError( PyExc_ValueError,
+ "Value must be a member of Texture.TexCo dictionary" );
+ break;
+ case ID_LA :
+ if( texco != TEXCO_VIEW && texco != TEXCO_GLOB &&
+ texco != TEXCO_OBJECT )
+ return EXPP_ReturnIntError( PyExc_ValueError,
+ "Value must be a member of Texture.TexCo dictionary" );
+ break;
+ default: /* ID_WO */
+ if( texco != TEXCO_VIEW && texco != TEXCO_GLOB &&
+ texco != TEXCO_ANGMAP && texco != TEXCO_OBJECT &&
+ texco != TEXCO_H_SPHEREMAP && texco != TEXCO_H_TUBEMAP )
+ return EXPP_ReturnIntError( PyExc_ValueError,
+ "Value must be a member of Texture.TexCo dictionary" );
+ break;
+ }
self->mtex->texco = (short)texco;
@@ -350,6 +395,10 @@ static int MTex_setObject( BPy_MTex *self, PyObject *value, void *closure)
static PyObject *MTex_getUVLayer( BPy_MTex *self, void *closure )
{
+ if( self->type != ID_MA )
+ return EXPP_ReturnPyObjError( PyExc_AttributeError,
+ "not a Material MTex object" );
+
return PyString_FromString(self->mtex->uvname);
}
@@ -364,6 +413,10 @@ static int MTex_setUVLayer( BPy_MTex *self, PyObject *value, void *closure)
static PyObject *MTex_getMapTo( BPy_MTex *self, void *closure )
{
+ if( self->type != ID_MA )
+ return EXPP_ReturnPyObjError( PyExc_AttributeError,
+ "not a Material MTex object" );
+
return PyInt_FromLong( self->mtex->mapto );
}
@@ -371,18 +424,20 @@ static int MTex_setMapTo( BPy_MTex *self, PyObject *value, void *closure)
{
int mapto;
- if( !PyInt_Check( value ) ) {
+ if( self->type != ID_MA )
+ return EXPP_ReturnIntError( PyExc_AttributeError,
+ "not a material MTex object" );
+
+ if( !PyInt_Check( value ) )
return EXPP_ReturnIntError( PyExc_TypeError,
- "expected an int" );
- }
+ "expected an int" );
mapto = PyInt_AsLong( value );
/* This method is deprecated anyway. */
- if ( mapto < 0 || mapto > 16383 ) {
+ if ( mapto < 0 || mapto > 16383 )
return EXPP_ReturnIntError( PyExc_ValueError,
"Value must be a sum of values from Texture.MapTo dictionary" );
- }
self->mtex->mapto = (short)mapto;
@@ -400,11 +455,9 @@ static int MTex_setCol( BPy_MTex *self, PyObject *value, void *closure)
float rgb[3];
int i;
- if( !PyArg_ParseTuple( value, "fff",
- &rgb[0], &rgb[1], &rgb[2] ) )
-
+ if( !PyArg_ParseTuple( value, "fff", &rgb[0], &rgb[1], &rgb[2] ) )
return EXPP_ReturnIntError( PyExc_TypeError,
- "expected tuple of 3 floats" );
+ "expected tuple of 3 floats" );
for( i = 0; i < 3; ++i )
if( rgb[i] < 0 || rgb[i] > 1 )
@@ -453,18 +506,13 @@ static int MTex_setBlendMode( BPy_MTex *self, PyObject *value, void *closure)
if ( !PyInt_Check( value ) )
return EXPP_ReturnIntError( PyExc_TypeError,
- "Value must be member of Texture.BlendModes dictionary" );
+ "Value must be member of Texture.BlendModes dictionary" );
n = PyInt_AsLong(value);
-/* if (n != MTEX_BLEND && n != MTEX_MUL && n != MTEX_ADD &&
- n != MTEX_SUB && n != MTEX_DIV && n != MTEX_DARK &&
- n != MTEX_DIFF && n != MTEX_LIGHT && n != MTEX_SCREEN)*/
if (n < 0 || n > 8)
- {
return EXPP_ReturnIntError( PyExc_ValueError,
- "Value must be member of Texture.BlendModes dictionary" );
- }
+ "Value must be member of Texture.BlendModes dictionary" );
self->mtex->blendtype = (short)n;
@@ -478,117 +526,84 @@ static PyObject *MTex_getColFac( BPy_MTex *self, void *closure )
static int MTex_setColFac( BPy_MTex *self, PyObject *value, void *closure)
{
- float f;
-
- if ( !PyFloat_Check( value ) )
- return EXPP_ReturnIntError( PyExc_TypeError,
- "expected a float" );
-
- f = (float)PyFloat_AsDouble(value);
-
- if (f < 0 || f > 1)
- return EXPP_ReturnIntError( PyExc_ValueError,
- "values must be in range [0,1]" );
-
- self->mtex->colfac = f;
-
- return 0;
+ return EXPP_setFloatRange( value, &self->mtex->colfac, 0.0f, 1.0f );
}
static PyObject *MTex_getNorFac( BPy_MTex *self, void *closure )
{
+ if( self->type == ID_LA )
+ return EXPP_ReturnPyObjError( PyExc_AttributeError,
+ "not a material or world MTex object" );
+
return PyFloat_FromDouble(self->mtex->norfac);
}
static int MTex_setNorFac( BPy_MTex *self, PyObject *value, void *closure)
{
- float f;
-
- if ( !PyFloat_Check( value ) )
- return EXPP_ReturnIntError( PyExc_TypeError,
- "expected a float" );
-
- f = (float)PyFloat_AsDouble(value);
-
- if (f < 0 || f > 25)
- return EXPP_ReturnIntError( PyExc_ValueError,
- "values must be in range [0,25]" );
-
- self->mtex->norfac = f;
-
- return 0;
+ switch( self->type )
+ {
+ case ID_WO:
+ return EXPP_setFloatRange( value, &self->mtex->norfac, 0.0f, 1.0f );
+ case ID_MA:
+ return EXPP_setFloatRange( value, &self->mtex->norfac, 0.0f, 25.0f );
+ default:
+ return EXPP_ReturnIntError( PyExc_AttributeError,
+ "not a material or world MTex object" );
+ }
}
static PyObject *MTex_getVarFac( BPy_MTex *self, void *closure )
{
+ if( self->type == ID_LA )
+ return EXPP_ReturnPyObjError( PyExc_AttributeError,
+ "not a material or world MTex object" );
+
return PyFloat_FromDouble(self->mtex->varfac);
}
static int MTex_setVarFac( BPy_MTex *self, PyObject *value, void *closure)
{
- float f;
-
- if ( !PyFloat_Check( value ) )
- return EXPP_ReturnIntError( PyExc_TypeError,
- "expected a float" );
-
- f = (float)PyFloat_AsDouble(value);
+ if( self->type == ID_LA )
+ return EXPP_ReturnIntError( PyExc_AttributeError,
+ "not a material or world MTex object" );
- if (f < 0 || f > 1)
- return EXPP_ReturnIntError( PyExc_ValueError,
- "values must be in range [0,1]" );
-
- self->mtex->varfac = f;
-
- return 0;
+ return EXPP_setFloatRange( value, &self->mtex->varfac, 0.0f, 1.0f );
}
static PyObject *MTex_getDispFac( BPy_MTex *self, void *closure )
{
+ if( self->type != ID_MA )
+ return EXPP_ReturnPyObjError( PyExc_AttributeError,
+ "not a material MTex object" );
+
return PyFloat_FromDouble(self->mtex->dispfac);
}
static int MTex_setDispFac( BPy_MTex *self, PyObject *value, void *closure)
{
- float f;
+ if( self->type != ID_MA )
+ return EXPP_ReturnIntError( PyExc_AttributeError,
+ "not a material MTex object" );
- if ( !PyFloat_Check( value ) )
- return EXPP_ReturnIntError( PyExc_TypeError,
- "expected a float" );
-
- f = (float)PyFloat_AsDouble(value);
-
- if (f < 0 || f > 1)
- return EXPP_ReturnIntError( PyExc_ValueError,
- "values must be in range [0,1]" );
-
- self->mtex->dispfac = f;
-
- return 0;
+ return EXPP_setFloatRange( value, &self->mtex->dispfac, 0.0f, 1.0f );
}
static PyObject *MTex_getWarpFac( BPy_MTex *self, void *closure )
{
+ if( self->type != ID_MA )
+ return EXPP_ReturnPyObjError( PyExc_AttributeError,
+ "not a material MTex object" );
+
return PyFloat_FromDouble(self->mtex->warpfac);
}
static int MTex_setWarpFac( BPy_MTex *self, PyObject *value, void *closure)
{
- float f;
-
- if ( !PyFloat_Check( value ) )
- return EXPP_ReturnIntError( PyExc_TypeError,
- "expected a float" );
-
- f = (float)PyFloat_AsDouble(value);
+ if( self->type != ID_MA )
+ return EXPP_ReturnIntError( PyExc_AttributeError,
+ "not a material MTex object" );
- if (f < 0 || f > 1)
- return EXPP_ReturnIntError( PyExc_ValueError,
- "values must be in range [0,1]" );
-
- self->mtex->warpfac = f;
-
- return 0;
+ return EXPP_setFloatRange( value, &self->mtex->warpfac, 0.0f, 1.0f );
}
static PyObject *MTex_getOfs( BPy_MTex *self, void *closure )
@@ -601,16 +616,24 @@ static int MTex_setOfs( BPy_MTex *self, PyObject *value, void *closure)
{
float f[3];
int i;
+ float max;
if( !PyArg_ParseTuple( value, "fff", &f[0], &f[1], &f[2] ) )
-
return EXPP_ReturnIntError( PyExc_TypeError,
"expected tuple of 3 floats" );
+ if( self->type == ID_MA )
+ max = 10.0f;
+ else
+ max = 20.0f;
+
for( i = 0; i < 3; ++i )
- if( f[i] < -10 || f[i] > 10 )
- return EXPP_ReturnIntError( PyExc_ValueError,
- "values must be in range [-10,10]" );
+ if( f[i] < -max || f[i] > max ) {
+ char errstr[64];
+ sprintf( errstr, "values must be in range [-%6.0f,%6.0f]",
+ max, max );
+ return EXPP_ReturnIntError( PyExc_ValueError, errstr );
+ }
self->mtex->ofs[0] = f[0];
self->mtex->ofs[1] = f[1];
@@ -649,6 +672,10 @@ static int MTex_setSize( BPy_MTex *self, PyObject *value, void *closure)
static PyObject *MTex_getMapping( BPy_MTex *self, void *closure )
{
+ if( self->type != ID_MA )
+ return EXPP_ReturnPyObjError( PyExc_AttributeError,
+ "not a material MTex object" );
+
return PyInt_FromLong( self->mtex->mapping );
}
@@ -656,6 +683,11 @@ static int MTex_setMapping( BPy_MTex *self, PyObject *value, void *closure)
{
int n;
+ if( self->type != ID_MA )
+ return EXPP_ReturnIntError( PyExc_AttributeError,
+ "not a material MTex object" );
+
+
if ( !PyInt_Check( value ) )
return EXPP_ReturnIntError( PyExc_TypeError,
"Value must be member of Texture.Mappings dictionary" );
@@ -664,8 +696,7 @@ static int MTex_setMapping( BPy_MTex *self, PyObject *value, void *closure)
/* if (n != MTEX_FLAT && n != MTEX_TUBE && n != MTEX_CUBE &&
n != MTEX_SPHERE) */
- if (n < 0 || n > 3)
- {
+ if (n < 0 || n > 3) {
return EXPP_ReturnIntError( PyExc_ValueError,
"Value must be member of Texture.Mappings dictionary" );
}
@@ -677,25 +708,43 @@ static int MTex_setMapping( BPy_MTex *self, PyObject *value, void *closure)
static PyObject *MTex_getFlag( BPy_MTex *self, void *closure )
{
- return PyBool_FromLong( self->mtex->texflag & ((int) closure) );
+ int flag = GET_INT_FROM_POINTER(closure);
+
+ if( self->type != ID_MA &&
+ flag & ( MTEX_VIEWSPACE | MTEX_DUPLI_MAPTO | MTEX_OB_DUPLI_ORIG ) )
+ return EXPP_ReturnPyObjError( PyExc_AttributeError,
+ "attribute only vaild for material MTex object" );
+
+ return PyBool_FromLong( self->mtex->texflag & flag );
}
static int MTex_setFlag( BPy_MTex *self, PyObject *value, void *closure)
{
+ int flag = GET_INT_FROM_POINTER(closure);
+
+ if( self->type != ID_MA &&
+ flag & ( MTEX_VIEWSPACE | MTEX_DUPLI_MAPTO | MTEX_OB_DUPLI_ORIG ) )
+ return EXPP_ReturnIntError( PyExc_AttributeError,
+ "attribute only vaild for material MTex object" );
+
if ( !PyBool_Check( value ) )
return EXPP_ReturnIntError( PyExc_TypeError,
"expected a bool");
if ( value == Py_True )
- self->mtex->texflag |= (int)closure;
+ self->mtex->texflag |= flag;
else
- self->mtex->texflag &= ~((int) closure);
+ self->mtex->texflag &= ~flag;
return 0;
}
static PyObject *MTex_getProjX( BPy_MTex *self, void *closure )
{
+ if( self->type != ID_MA )
+ return EXPP_ReturnPyObjError( PyExc_AttributeError,
+ "not a material MTex object" );
+
return PyInt_FromLong( self->mtex->projx );
}
@@ -703,6 +752,10 @@ static int MTex_setProjX( BPy_MTex *self, PyObject *value, void *closure)
{
int proj;
+ if( self->type != ID_MA )
+ return EXPP_ReturnIntError( PyExc_AttributeError,
+ "not a material MTex object" );
+
if( !PyInt_Check( value ) ) {
return EXPP_ReturnIntError( PyExc_TypeError,
"Value must be a member of Texture.Proj dictionary" );
@@ -722,6 +775,10 @@ static int MTex_setProjX( BPy_MTex *self, PyObject *value, void *closure)
static PyObject *MTex_getProjY( BPy_MTex *self, void *closure )
{
+ if( self->type != ID_MA )
+ return EXPP_ReturnPyObjError( PyExc_AttributeError,
+ "not a material MTex object" );
+
return PyInt_FromLong( self->mtex->projy );
}
@@ -729,6 +786,10 @@ static int MTex_setProjY( BPy_MTex *self, PyObject *value, void *closure )
{
int proj;
+ if( self->type != ID_MA )
+ return EXPP_ReturnIntError( PyExc_AttributeError,
+ "not a material MTex object" );
+
if( !PyInt_Check( value ) ) {
return EXPP_ReturnIntError( PyExc_TypeError,
"Value must be a member of Texture.Proj dictionary" );
@@ -748,6 +809,10 @@ static int MTex_setProjY( BPy_MTex *self, PyObject *value, void *closure )
static PyObject *MTex_getProjZ( BPy_MTex *self, void *closure )
{
+ if( self->type != ID_MA )
+ return EXPP_ReturnPyObjError( PyExc_AttributeError,
+ "not a material MTex object" );
+
return PyInt_FromLong( self->mtex->projz );
}
@@ -755,6 +820,10 @@ static int MTex_setProjZ( BPy_MTex *self, PyObject *value, void *closure)
{
int proj;
+ if( self->type != ID_MA )
+ return EXPP_ReturnIntError( PyExc_AttributeError,
+ "not a material MTex object" );
+
if( !PyInt_Check( value ) ) {
return EXPP_ReturnIntError( PyExc_TypeError,
"Value must be a member of Texture.Proj dictionary" );
@@ -774,29 +843,45 @@ static int MTex_setProjZ( BPy_MTex *self, PyObject *value, void *closure)
static PyObject *MTex_getMapToFlag( BPy_MTex *self, void *closure )
{
- int flag = (int) closure;
+ int flag = GET_INT_FROM_POINTER(closure);
+
+ if( self->type == ID_LA && flag != MAP_COL )
+ return EXPP_ReturnPyObjError( PyExc_AttributeError,
+ "attribute not available for a lamp MTex" );
if ( self->mtex->mapto & flag )
- {
return PyInt_FromLong( ( self->mtex->maptoneg & flag ) ? -1 : 1 );
- } else {
+ else
return PyInt_FromLong( 0 );
- }
+}
+
+static PyObject *MTex_getWorldMapToFlag( BPy_MTex *self, void *closure )
+{
+ int flag = GET_INT_FROM_POINTER(closure);
+
+ if( self->type != ID_WO )
+ return EXPP_ReturnPyObjError( PyExc_AttributeError,
+ "not a world MTex object" );
+
+ return PyInt_FromLong( (long)( (self->mtex->mapto & flag) != 0 ) );
}
static int MTex_setMapToFlag( BPy_MTex *self, PyObject *value, void *closure)
{
- int flag = (int) closure;
+ int flag = GET_INT_FROM_POINTER(closure);
int intVal;
+ if( self->type == ID_LA && flag != MAP_COL )
+ return EXPP_ReturnIntError( PyExc_AttributeError,
+ "attribute not available for a lamp MTex" );
+
if ( !PyInt_Check( value ) )
return EXPP_ReturnIntError( PyExc_TypeError,
"expected an int");
- intVal = PyInt_AsLong( value );
+ intVal = PyInt_AsLong( value ) ;
- if (flag == MAP_COL || flag == MAP_COLSPEC || flag == MAP_COLMIR ||
- flag == MAP_WARP) {
+ if( flag & ( MAP_COL | MAP_COLSPEC | MAP_COLMIR | MAP_WARP ) ) {
if (intVal < 0 || intVal > 1) {
return EXPP_ReturnIntError( PyExc_ValueError,
"value for that mapping must be 0 or 1" );
@@ -828,3 +913,31 @@ static int MTex_setMapToFlag( BPy_MTex *self, PyObject *value, void *closure)
return 0;
}
+
+static int MTex_setWorldMapToFlag( BPy_MTex *self, PyObject *value, void *closure)
+{
+ int flag = GET_INT_FROM_POINTER(closure);
+
+ if( self->type != ID_WO )
+ return EXPP_ReturnIntError( PyExc_AttributeError,
+ "attribute only available for a world MTex" );
+
+ if ( !PyInt_Check( value ) )
+ return EXPP_ReturnIntError( PyExc_TypeError,
+ "expected an int");
+
+ switch( PyInt_AsLong( value ) ) {
+ case 0:
+ self->mtex->mapto &= ~flag;
+ break;
+ case 1:
+ self->mtex->mapto |= flag;
+ break;
+ default:
+ return EXPP_ReturnIntError( PyExc_ValueError,
+ "value for mapping must be 0 or 1" );
+ }
+
+ return 0;
+}
+
diff --git a/source/blender/python/api2_2x/MTex.h b/source/blender/python/api2_2x/MTex.h
index 5e67ebc47ca..b6c98a40d2e 100644
--- a/source/blender/python/api2_2x/MTex.h
+++ b/source/blender/python/api2_2x/MTex.h
@@ -38,22 +38,26 @@
/* Python BPy_MTex structure definition */
/*****************************************************************************/
+#define MATERIAL_MTEX_TYPE 1
+#define WORLD_MTEX_TYPE 2
+#define LAMP_MTEX_TYPE 3
+
typedef struct {
PyObject_HEAD
MTex * mtex;
+ unsigned short type;
} BPy_MTex;
extern PyTypeObject MTex_Type;
#define BPy_MTex_Check(v) ((v)->ob_type == &MTex_Type)
-
/*****************************************************************************/
/* Module Blender.Texture.MTex - public functions */
/*****************************************************************************/
PyObject *MTex_Init( void );
-PyObject *MTex_CreatePyObject( struct MTex *obj );
+PyObject *MTex_CreatePyObject( struct MTex *obj, unsigned short type );
MTex *MTex_FromPyObject( PyObject * py_obj );
diff --git a/source/blender/python/api2_2x/Makefile b/source/blender/python/api2_2x/Makefile
index 7c831952042..a2b77bf8c98 100644
--- a/source/blender/python/api2_2x/Makefile
+++ b/source/blender/python/api2_2x/Makefile
@@ -37,6 +37,10 @@ include nan_compile.mk
CFLAGS += $(LEVEL_1_C_WARNINGS)
+ifdef NAN_BUILDINFO
+ CPPFLAGS += -DNAN_BUILDINFO
+endif
+
ifeq ($(WITH_FFMPEG), true)
CPPFLAGS += -DWITH_FFMPEG
endif
@@ -45,6 +49,7 @@ ifeq ($(WITH_OPENEXR),true)
CPPFLAGS += -DWITH_OPENEXR
endif
+CPPFLAGS += -I$(NAN_GLEW)/include
CPPFLAGS += -I$(OPENGL_HEADERS)
CPPFLAGS += -I$(NAN_GUARDEDALLOC)/include
CPPFLAGS += -I../../makesdna
@@ -52,6 +57,7 @@ CPPFLAGS += -I../../blenkernel
CPPFLAGS += -I../../blenlib
CPPFLAGS += -I../../blenloader
CPPFLAGS += -I../../include
+CPPFLAGS += -I../../gpu
CPPFLAGS += -I../../render/extern/include
CPPFLAGS += -I../../radiosity/extern/include
CPPFLAGS += -I$(NAN_BMFONT)/include
diff --git a/source/blender/python/api2_2x/Material.c b/source/blender/python/api2_2x/Material.c
index ccd24a437b5..ef19fab462a 100644
--- a/source/blender/python/api2_2x/Material.c
+++ b/source/blender/python/api2_2x/Material.c
@@ -32,16 +32,19 @@
#include "DNA_space_types.h"
#include "DNA_material_types.h"
+#include "DNA_userdef_types.h"
#include "BKE_main.h"
#include "BKE_global.h"
#include "BKE_library.h"
#include "BKE_material.h"
#include "BKE_texture.h"
+#include "BKE_node.h"
#include "BKE_idprop.h"
#include "BKE_utildefines.h" /* for CLAMP */
#include "MEM_guardedalloc.h"
#include "BLI_blenlib.h"
#include "BSE_editipo.h"
+#include "BIF_keyframing.h"
#include "BIF_space.h"
#include "mydevice.h"
#include "constant.h"
@@ -154,6 +157,8 @@
#define EXPP_MAT_SPECTRANS_MAX 1.0
#define EXPP_MAT_MIRRTRANSADD_MIN 0.0
#define EXPP_MAT_MIRRTRANSADD_MAX 1.0
+#define EXPP_MAT_COLORBAND_FACTOR_MIN 0.0
+#define EXPP_MAT_COLORBAND_FACTOR_MAX 1.0
/* closure values for getColorComponent()/setColorComponent() */
@@ -402,19 +407,62 @@ static PyObject *Material_ShadersDict( void )
return Shaders;
}
+static PyObject *Material_ColorRampMethodsDict( void )
+{
+ PyObject *Methods = PyConstant_New( );
+ if( Methods ) {
+ BPy_constant *c = (BPy_constant * ) Methods;
+
+ PyConstant_Insert(c, "BLEND", PyInt_FromLong(MA_RAMP_BLEND));
+ PyConstant_Insert(c, "MIX", PyInt_FromLong(MA_RAMP_BLEND)); /* This one is added to solve confusion between Blend-Mix name. */
+ PyConstant_Insert(c, "ADD", PyInt_FromLong(MA_RAMP_ADD));
+ PyConstant_Insert(c, "MULT", PyInt_FromLong(MA_RAMP_MULT));
+ PyConstant_Insert(c, "SUB", PyInt_FromLong(MA_RAMP_SUB));
+ PyConstant_Insert(c, "SCREEN", PyInt_FromLong(MA_RAMP_SCREEN));
+ PyConstant_Insert(c, "DIV", PyInt_FromLong(MA_RAMP_DIV));
+ PyConstant_Insert(c, "DIFF", PyInt_FromLong(MA_RAMP_DIFF));
+ PyConstant_Insert(c, "DARK", PyInt_FromLong(MA_RAMP_DARK));
+ PyConstant_Insert(c, "LIGHT", PyInt_FromLong(MA_RAMP_LIGHT));
+ PyConstant_Insert(c, "OVERLAY", PyInt_FromLong(MA_RAMP_OVERLAY));
+ PyConstant_Insert(c, "DODGE", PyInt_FromLong(MA_RAMP_DODGE));
+ PyConstant_Insert(c, "BURN", PyInt_FromLong(MA_RAMP_BURN));
+ PyConstant_Insert(c, "HUE", PyInt_FromLong(MA_RAMP_HUE));
+ PyConstant_Insert(c, "SAT", PyInt_FromLong(MA_RAMP_SAT));
+ PyConstant_Insert(c, "VAL", PyInt_FromLong(MA_RAMP_VAL));
+ PyConstant_Insert(c, "COLOR", PyInt_FromLong(MA_RAMP_COLOR));
+
+ }
+ return Methods;
+}
+
+static PyObject *Material_ColorRampInputDict( void )
+{
+ PyObject *Inputs = PyConstant_New( );
+ if( Inputs ) {
+ BPy_constant *c = (BPy_constant * ) Inputs;
+
+ PyConstant_Insert(c, "SHADER", PyInt_FromLong(MA_RAMP_IN_SHADER));
+ PyConstant_Insert(c, "ENERGY", PyInt_FromLong(MA_RAMP_IN_ENERGY));
+ PyConstant_Insert(c, "NORMAL", PyInt_FromLong(MA_RAMP_IN_NOR));
+ PyConstant_Insert(c, "RESULT", PyInt_FromLong(MA_RAMP_IN_RESULT));
+ }
+ return Inputs;
+}
/*****************************************************************************/
/* Function: Material_Init */
/*****************************************************************************/
PyObject *Material_Init( void )
{
- PyObject *submodule, *Modes, *Shaders;
+ PyObject *submodule, *Modes, *Shaders, *ColorbandInput, *ColorbandMethod;
if( PyType_Ready( &Material_Type ) < 0)
return NULL;
Modes = Material_ModesDict( );
Shaders = Material_ShadersDict( );
+ ColorbandMethod = Material_ColorRampMethodsDict( );
+ ColorbandInput = Material_ColorRampInputDict( );
submodule = Py_InitModule3( "Blender.Material",
M_Material_methods, M_Material_doc );
@@ -423,6 +471,10 @@ PyObject *Material_Init( void )
PyModule_AddObject( submodule, "Modes", Modes );
if( Shaders )
PyModule_AddObject( submodule, "Shaders", Shaders );
+ if( ColorbandMethod )
+ PyModule_AddObject( submodule, "ColorbandMethod", ColorbandMethod );
+ if( ColorbandInput )
+ PyModule_AddObject( submodule, "ColorbandInput", ColorbandInput );
PyModule_AddIntConstant( submodule, "RGB", IPOKEY_RGB );
PyModule_AddIntConstant( submodule, "ALPHA", IPOKEY_ALPHA );
@@ -554,6 +606,8 @@ static int Material_setSssTexScatter( BPy_Material * self, PyObject * value );
static int Material_setSssFront( BPy_Material * self, PyObject * value );
static int Material_setSssBack( BPy_Material * self, PyObject * value );
static int Material_setSssBack( BPy_Material * self, PyObject * value );
+static int Material_setTexChannel( BPy_Material * self, PyObject * value );
+static int Material_setTextures( BPy_Material * self, PyObject * value );
static PyObject *Material_getColorComponent( BPy_Material * self,
void * closure );
@@ -633,6 +687,7 @@ static PyObject *Material_getSssBack( BPy_Material * self );
static PyObject *Material_getFilter( BPy_Material * self );
static PyObject *Material_getTranslucency( BPy_Material * self );
static PyObject *Material_getTextures( BPy_Material * self );
+static PyObject *Material_getTexChannel( BPy_Material * self );
static PyObject *Material_clearIpo( BPy_Material * self );
static PyObject *Material_setTexture( BPy_Material * self, PyObject * args );
@@ -644,8 +699,23 @@ static PyObject *Material_clearScriptLinks(BPy_Material *self, PyObject *args);
static PyObject *Material_insertIpoKey( BPy_Material * self, PyObject * args );
static PyObject *Material_getColorband( BPy_Material * self, void * type);
-int Material_setColorband( BPy_Material * self, PyObject * value, void * type);
+static int Material_setColorband( BPy_Material * self, PyObject * value, void * type);
static PyObject *Material_copy( BPy_Material * self );
+static PyObject *Material_freeNodes( BPy_Material * self );
+
+static PyObject *Material_getColorbandDiffuseFactor( BPy_Material * self );
+static PyObject *Material_getColorbandSpecularFactor( BPy_Material * self );
+static int Material_setColorbandDiffuseFactor ( BPy_Material * self, PyObject * value );
+static int Material_setColorbandSpecularFactor ( BPy_Material * self, PyObject * value );
+static PyObject *Material_getColorbandDiffuseMethod( BPy_Material * self );
+static PyObject *Material_getColorbandSpecularMethod ( BPy_Material * self );
+static int Material_setColorbandDiffuseMethod ( BPy_Material * self, PyObject * value);
+static int Material_setColorbandSpecularMethod ( BPy_Material * self, PyObject * value);
+static PyObject *Material_getColorbandDiffuseInput( BPy_Material * self );
+static PyObject *Material_getColorbandSpecularInput( BPy_Material * self );
+static int Material_setColorbandDiffuseInput ( BPy_Material * self, PyObject * value);
+static int Material_setColorbandSpecularInput ( BPy_Material * self, PyObject * value);
+
/*****************************************************************************/
@@ -884,6 +954,8 @@ static PyMethodDef BPy_Material_methods[] = {
"() - Return a copy of the material."},
{"copy", ( PyCFunction ) Material_copy, METH_NOARGS,
"() - Return a copy of the material."},
+ {"freeNodes", ( PyCFunction ) Material_freeNodes, METH_NOARGS,
+ "() - Free this materials nodes."},
{NULL, NULL, 0, NULL}
};
@@ -1140,7 +1212,11 @@ static PyGetSetDef BPy_Material_getseters[] = {
NULL},
{"lightGroup",
(getter)Material_getLightGroup, (setter)Material_setLightGroup,
- "Set the light group for this material",
+ "The light group for this material",
+ NULL},
+ {"enabledTextures",
+ (getter)Material_getTexChannel, (setter)Material_setTexChannel,
+ "Enabled texture channels for this material",
NULL},
{"R",
(getter)Material_getColorComponent, (setter)Material_setColorComponent,
@@ -1162,7 +1238,35 @@ static PyGetSetDef BPy_Material_getseters[] = {
(getter)Material_getColorband, (setter)Material_setColorband,
"The specular colorband for this material",
(void *) 1},
-
+ {"textures",
+ (getter)Material_getTextures, (setter)Material_setTextures,
+ "The Material's texture list as a tuple",
+ NULL},
+ {"colorbandSpecularFactor",
+ (getter)Material_getColorbandSpecularFactor, (setter)Material_setColorbandSpecularFactor,
+ "The specular colorband factor for this material",
+ NULL},
+ {"colorbandSpecularMethod",
+ (getter)Material_getColorbandSpecularMethod, (setter)Material_setColorbandSpecularMethod,
+ "The specular colorband method for this material",
+ NULL},
+ {"colorbandSpecularInput",
+ (getter)Material_getColorbandSpecularInput, (setter)Material_setColorbandSpecularInput,
+ "The specular colorband input for this material",
+ NULL},
+ {"colorbandDiffuseFactor",
+ (getter)Material_getColorbandDiffuseFactor, (setter)Material_setColorbandDiffuseFactor,
+ "The diffuse colorband factor for this material",
+ NULL},
+ {"colorbandDiffuseMethod",
+ (getter)Material_getColorbandDiffuseMethod, (setter)Material_setColorbandDiffuseMethod,
+ "The diffuse colorband method for this material",
+ NULL},
+ {"colorbandDiffuseInput",
+ (getter)Material_getColorbandDiffuseInput, (setter)Material_setColorbandDiffuseInput,
+ "The diffuse colorband input for this material",
+ NULL},
+
/* SSS settings */
{"enableSSS",
(getter)Material_getSssEnable, (setter)Material_setSssEnable,
@@ -1517,6 +1621,36 @@ static PyObject *Material_getLightGroup( BPy_Material * self )
return Group_CreatePyObject( self->material->group );
}
+static PyObject *Material_getTexChannel( BPy_Material * self )
+{
+ int i;
+ short mask = 1;
+ PyObject *list = PyList_New(0);
+ if( !list )
+ return EXPP_ReturnPyObjError( PyExc_MemoryError,
+ "PyList_New() failed" );
+
+ for( i = 0, mask = 1; i < MAX_MTEX ; ++i, mask <<= 1 ) {
+ if( self->material->mtex[i] && (mask & self->material->septex) == 0 ) {
+ PyObject * val = PyInt_FromLong(i);
+ if( !val ) {
+ Py_DECREF( list );
+ return EXPP_ReturnPyObjError( PyExc_MemoryError,
+ "PyInt_FromLong() failed" );
+ }
+ if( PyList_Append( list, val ) < 0 ) {
+ Py_DECREF( val );
+ Py_DECREF( list );
+ return EXPP_ReturnPyObjError( PyExc_RuntimeError,
+ "PyList_Append() failed" );
+ }
+ Py_DECREF( val );
+ }
+ }
+
+ return list;
+}
+
static PyObject *Material_getHaloSize( BPy_Material * self )
{
return PyFloat_FromDouble( ( double ) self->material->hasize );
@@ -1701,29 +1835,24 @@ static PyObject* Material_getSssBack( BPy_Material * self )
static PyObject *Material_getTextures( BPy_Material * self )
{
int i;
- struct MTex *mtex;
- PyObject *t[MAX_MTEX];
PyObject *tuple;
/* build a texture list */
- for( i = 0; i < MAX_MTEX; ++i ) {
- mtex = self->material->mtex[i];
+ tuple = PyTuple_New( MAX_MTEX );
+ if( !tuple )
+ return EXPP_ReturnPyObjError( PyExc_MemoryError,
+ "couldn't create PyTuple" );
+ for( i = 0; i < MAX_MTEX; ++i ) {
+ struct MTex *mtex = self->material->mtex[i];
if( mtex ) {
- t[i] = MTex_CreatePyObject( mtex );
+ PyTuple_SET_ITEM( tuple, i, MTex_CreatePyObject( mtex, ID_MA ) );
} else {
Py_INCREF( Py_None );
- t[i] = Py_None;
+ PyTuple_SET_ITEM( tuple, i, Py_None );
}
}
- /* turn the array into a tuple */
- tuple = Py_BuildValue( "NNNNNNNNNN", t[0], t[1], t[2], t[3],
- t[4], t[5], t[6], t[7], t[8], t[9] );
- if( !tuple )
- return EXPP_ReturnPyObjError( PyExc_MemoryError,
- "Material_getTextures: couldn't create PyTuple" );
-
return tuple;
}
@@ -1745,7 +1874,7 @@ static int Material_setIpo( BPy_Material * self, PyObject * value )
static PyObject *Material_insertIpoKey( BPy_Material * self, PyObject * args )
{
- int key = 0, map;
+ int key = 0, flag = 0, map;
if( !PyArg_ParseTuple( args, "i", &( key ) ) )
return ( EXPP_ReturnPyObjError( PyExc_AttributeError,
@@ -1753,59 +1882,62 @@ static PyObject *Material_insertIpoKey( BPy_Material * self, PyObject * args )
map = texchannel_to_adrcode(self->material->texact);
+ /* flag should be initialised with the 'autokeying' flags like for normal keying */
+ if (IS_AUTOKEY_FLAG(INSERTNEEDED)) flag |= INSERTKEY_NEEDED;
+
if(key==IPOKEY_RGB || key==IPOKEY_ALLCOLOR) {
- insertkey((ID *)self->material, ID_MA, NULL, NULL, MA_COL_R, 0);
- insertkey((ID *)self->material, ID_MA, NULL, NULL, MA_COL_G, 0);
- insertkey((ID *)self->material, ID_MA, NULL, NULL, MA_COL_B, 0);
+ insertkey((ID *)self->material, ID_MA, NULL, NULL, MA_COL_R, flag);
+ insertkey((ID *)self->material, ID_MA, NULL, NULL, MA_COL_G, flag);
+ insertkey((ID *)self->material, ID_MA, NULL, NULL, MA_COL_B, flag);
}
if(key==IPOKEY_ALPHA || key==IPOKEY_ALLCOLOR) {
- insertkey((ID *)self->material, ID_MA, NULL, NULL, MA_ALPHA, 0);
+ insertkey((ID *)self->material, ID_MA, NULL, NULL, MA_ALPHA, flag);
}
if(key==IPOKEY_HALOSIZE || key==IPOKEY_ALLCOLOR) {
- insertkey((ID *)self->material, ID_MA, NULL, NULL, MA_HASIZE, 0);
+ insertkey((ID *)self->material, ID_MA, NULL, NULL, MA_HASIZE, flag);
}
if(key==IPOKEY_MODE || key==IPOKEY_ALLCOLOR) {
- insertkey((ID *)self->material, ID_MA, NULL, NULL, MA_MODE, 0);
+ insertkey((ID *)self->material, ID_MA, NULL, NULL, MA_MODE, flag);
}
if(key==IPOKEY_ALLCOLOR) {
- insertkey((ID *)self->material, ID_MA, NULL, NULL, MA_SPEC_R, 0);
- insertkey((ID *)self->material, ID_MA, NULL, NULL, MA_SPEC_G, 0);
- insertkey((ID *)self->material, ID_MA, NULL, NULL, MA_SPEC_B, 0);
- insertkey((ID *)self->material, ID_MA, NULL, NULL, MA_REF, 0);
- insertkey((ID *)self->material, ID_MA, NULL, NULL, MA_EMIT, 0);
- insertkey((ID *)self->material, ID_MA, NULL, NULL, MA_AMB, 0);
- insertkey((ID *)self->material, ID_MA, NULL, NULL, MA_SPEC, 0);
- insertkey((ID *)self->material, ID_MA, NULL, NULL, MA_HARD, 0);
- insertkey((ID *)self->material, ID_MA, NULL, NULL, MA_MODE, 0);
- insertkey((ID *)self->material, ID_MA, NULL, NULL, MA_TRANSLU, 0);
- insertkey((ID *)self->material, ID_MA, NULL, NULL, MA_ADD, 0);
+ insertkey((ID *)self->material, ID_MA, NULL, NULL, MA_SPEC_R, flag);
+ insertkey((ID *)self->material, ID_MA, NULL, NULL, MA_SPEC_G, flag);
+ insertkey((ID *)self->material, ID_MA, NULL, NULL, MA_SPEC_B, flag);
+ insertkey((ID *)self->material, ID_MA, NULL, NULL, MA_REF, flag);
+ insertkey((ID *)self->material, ID_MA, NULL, NULL, MA_EMIT, flag);
+ insertkey((ID *)self->material, ID_MA, NULL, NULL, MA_AMB, flag);
+ insertkey((ID *)self->material, ID_MA, NULL, NULL, MA_SPEC, flag);
+ insertkey((ID *)self->material, ID_MA, NULL, NULL, MA_HARD, flag);
+ insertkey((ID *)self->material, ID_MA, NULL, NULL, MA_MODE, flag);
+ insertkey((ID *)self->material, ID_MA, NULL, NULL, MA_TRANSLU, flag);
+ insertkey((ID *)self->material, ID_MA, NULL, NULL, MA_ADD, flag);
}
if(key==IPOKEY_ALLMIRROR) {
- insertkey((ID *)self->material, ID_MA, NULL, NULL, MA_RAYM, 0);
- insertkey((ID *)self->material, ID_MA, NULL, NULL, MA_FRESMIR, 0);
- insertkey((ID *)self->material, ID_MA, NULL, NULL, MA_FRESMIRI, 0);
- insertkey((ID *)self->material, ID_MA, NULL, NULL, MA_FRESTRA, 0);
- insertkey((ID *)self->material, ID_MA, NULL, NULL, MA_FRESTRAI, 0);
+ insertkey((ID *)self->material, ID_MA, NULL, NULL, MA_RAYM, flag);
+ insertkey((ID *)self->material, ID_MA, NULL, NULL, MA_FRESMIR, flag);
+ insertkey((ID *)self->material, ID_MA, NULL, NULL, MA_FRESMIRI, flag);
+ insertkey((ID *)self->material, ID_MA, NULL, NULL, MA_FRESTRA, flag);
+ insertkey((ID *)self->material, ID_MA, NULL, NULL, MA_FRESTRAI, flag);
}
if(key==IPOKEY_OFS || key==IPOKEY_ALLMAPPING) {
- insertkey((ID *)self->material, ID_MA, NULL, NULL, map+MAP_OFS_X, 0);
- insertkey((ID *)self->material, ID_MA, NULL, NULL, map+MAP_OFS_Y, 0);
- insertkey((ID *)self->material, ID_MA, NULL, NULL, map+MAP_OFS_Z, 0);
+ insertkey((ID *)self->material, ID_MA, NULL, NULL, map+MAP_OFS_X, flag);
+ insertkey((ID *)self->material, ID_MA, NULL, NULL, map+MAP_OFS_Y, flag);
+ insertkey((ID *)self->material, ID_MA, NULL, NULL, map+MAP_OFS_Z, flag);
}
if(key==IPOKEY_SIZE || key==IPOKEY_ALLMAPPING) {
- insertkey((ID *)self->material, ID_MA, NULL, NULL, map+MAP_SIZE_X, 0);
- insertkey((ID *)self->material, ID_MA, NULL, NULL, map+MAP_SIZE_Y, 0);
- insertkey((ID *)self->material, ID_MA, NULL, NULL, map+MAP_SIZE_Z, 0);
+ insertkey((ID *)self->material, ID_MA, NULL, NULL, map+MAP_SIZE_X, flag);
+ insertkey((ID *)self->material, ID_MA, NULL, NULL, map+MAP_SIZE_Y, flag);
+ insertkey((ID *)self->material, ID_MA, NULL, NULL, map+MAP_SIZE_Z, flag);
}
if(key==IPOKEY_ALLMAPPING) {
- insertkey((ID *)self->material, ID_MA, NULL, NULL, map+MAP_R, 0);
- insertkey((ID *)self->material, ID_MA, NULL, NULL, map+MAP_G, 0);
- insertkey((ID *)self->material, ID_MA, NULL, NULL, map+MAP_B, 0);
- insertkey((ID *)self->material, ID_MA, NULL, NULL, map+MAP_DVAR, 0);
- insertkey((ID *)self->material, ID_MA, NULL, NULL, map+MAP_COLF, 0);
- insertkey((ID *)self->material, ID_MA, NULL, NULL, map+MAP_NORF, 0);
- insertkey((ID *)self->material, ID_MA, NULL, NULL, map+MAP_VARF, 0);
- insertkey((ID *)self->material, ID_MA, NULL, NULL, map+MAP_DISP, 0);
+ insertkey((ID *)self->material, ID_MA, NULL, NULL, map+MAP_R, flag);
+ insertkey((ID *)self->material, ID_MA, NULL, NULL, map+MAP_G, flag);
+ insertkey((ID *)self->material, ID_MA, NULL, NULL, map+MAP_B, flag);
+ insertkey((ID *)self->material, ID_MA, NULL, NULL, map+MAP_DVAR, flag);
+ insertkey((ID *)self->material, ID_MA, NULL, NULL, map+MAP_COLF, flag);
+ insertkey((ID *)self->material, ID_MA, NULL, NULL, map+MAP_NORF, flag);
+ insertkey((ID *)self->material, ID_MA, NULL, NULL, map+MAP_VARF, flag);
+ insertkey((ID *)self->material, ID_MA, NULL, NULL, map+MAP_DISP, flag);
}
allspace(REMAKEIPO, 0);
@@ -1982,6 +2114,57 @@ static int Material_setLightGroup( BPy_Material * self, PyObject * value )
return GenericLib_assignData(value, (void **) &self->material->group, NULL, 1, ID_GR, 0);
}
+static int Material_setTexChannel( BPy_Material * self, PyObject * value )
+{
+ int i, mask;
+ short septex = 0;
+ int result = 1;
+
+ /* fail if input is not a standard sequence */
+ if( !PyList_Check( value ) && !PyTuple_Check( value ) )
+ return EXPP_ReturnIntError( PyExc_TypeError,
+ "expected tuple or list of integers" );
+
+ /* get a fast sequence; in Python 2.5, this just return the original
+ * list or tuple and INCREFs it, so we must DECREF */
+ value = PySequence_Fast( value, "" );
+
+ /* set the disable bit for each existing texture */
+ for( i= 0, mask= 1; i < MAX_MTEX; ++i, mask <<= 1 )
+ if( self->material->mtex[i] != NULL )
+ septex |= mask;
+
+ /* check the list, and build new septex value */
+ for( i= PySequence_Size(value)-1; i >= 0; --i ) {
+ long ival;
+ PyObject *item = PySequence_Fast_GET_ITEM( value, i );
+ if( !PyInt_Check( item ) ) {
+ PyErr_SetString ( PyExc_TypeError,
+ "expected tuple or list of integers" );
+ goto exit;
+ }
+ ival= PyInt_AsLong( item );
+ if(ival < 0 || ival > MAX_MTEX) {
+ PyErr_SetString( PyExc_ValueError,
+ "channel value out of range" );
+ goto exit;
+ }
+ ival&= (1<<MAX_MTEX)-1;
+ if( self->material->mtex[(int)ival] == NULL ) {
+ PyErr_SetString( PyExc_ValueError,
+ "channels must have a texture assigned" );
+ goto exit;
+ }
+ septex&= ~(1<<ival);
+ }
+ self->material->septex= septex;
+ result = 0;
+
+exit:
+ Py_DECREF(value);
+ return result;
+}
+
static int Material_setAdd( BPy_Material * self, PyObject * value )
{
return EXPP_setFloatClamped ( value, &self->material->add,
@@ -2313,9 +2496,6 @@ static int Material_setSssBack( BPy_Material * self, PyObject * value )
EXPP_MAT_SSS_BACK_MAX);
}
-
-
-
static PyObject *Material_setTexture( BPy_Material * self, PyObject * args )
{
int texnum;
@@ -2349,14 +2529,86 @@ static PyObject *Material_setTexture( BPy_Material * self, PyObject * args )
Py_RETURN_NONE;
}
+static int Material_setTextures( BPy_Material * self, PyObject * value )
+{
+ int i;
+
+ if( !PyList_Check( value ) && !PyTuple_Check( value ) )
+ return EXPP_ReturnIntError( PyExc_TypeError,
+ "expected tuple or list of integers" );
+
+ /* don't allow more than MAX_MTEX items */
+ if( PySequence_Size(value) > MAX_MTEX )
+ return EXPP_ReturnIntError( PyExc_AttributeError,
+ "size of sequence greater than number of allowed textures" );
+
+ /* get a fast sequence; in Python 2.5, this just return the original
+ * list or tuple and INCREFs it, so we must DECREF */
+ value = PySequence_Fast( value, "" );
+
+ /* check the list for valid entries */
+ for( i= 0; i < PySequence_Size(value) ; ++i ) {
+ PyObject *item = PySequence_Fast_GET_ITEM( value, i );
+ if( item == Py_None || ( BPy_MTex_Check( item ) &&
+ ((BPy_MTex *)item)->type == ID_MA ) ) {
+ continue;
+ } else {
+ Py_DECREF(value);
+ return EXPP_ReturnIntError( PyExc_TypeError,
+ "expected tuple or list containing material MTex objects and NONE" );
+ }
+ }
+
+ /* for each MTex object, copy to this structure */
+ for( i= 0; i < PySequence_Size(value) ; ++i ) {
+ PyObject *item = PySequence_Fast_GET_ITEM( value, i );
+ struct MTex *mtex = self->material->mtex[i];
+ if( item != Py_None ) {
+ BPy_MTex *obj = (BPy_MTex *)item;
+
+ /* if MTex is already at this location, just skip it */
+ if( obj->mtex == mtex ) continue;
+
+ /* create a new entry if needed, otherwise update reference count
+ * for texture that is being replaced */
+ if( !mtex )
+ mtex = self->material->mtex[i] = add_mtex( );
+ else
+ mtex->tex->id.us--;
+
+ /* copy the data */
+ mtex->tex = obj->mtex->tex;
+ id_us_plus( &mtex->tex->id );
+ mtex->texco = obj->mtex->texco;
+ mtex->mapto = obj->mtex->mapto;
+ }
+ }
+
+ /* now go back and free any entries now marked as None */
+ for( i= 0; i < PySequence_Size(value) ; ++i ) {
+ PyObject *item = PySequence_Fast_GET_ITEM( value, i );
+ struct MTex *mtex = self->material->mtex[i];
+ if( item == Py_None && mtex ) {
+ mtex->tex->id.us--;
+ MEM_freeN( mtex );
+ self->material->mtex[i] = NULL;
+ }
+ }
+
+ Py_DECREF(value);
+ return 0;
+}
+
static PyObject *Material_clearTexture( BPy_Material * self, PyObject * value )
{
int texnum = (int)PyInt_AsLong(value);
struct MTex *mtex;
/* non ints will be -1 */
- if( ( texnum < 0 ) || ( texnum >= MAX_MTEX ) )
- return EXPP_ReturnPyObjError( PyExc_TypeError,
- "expected int in [0,9]" );
+ if( ( texnum < 0 ) || ( texnum >= MAX_MTEX ) ) {
+ char errstr[64];
+ sprintf( errstr, "expected int in [0,%d]", MAX_MTEX );
+ return EXPP_ReturnPyObjError( PyExc_TypeError, errstr );
+ }
mtex = self->material->mtex[texnum];
if( mtex ) {
@@ -2435,6 +2687,22 @@ static PyObject *Material_copy( BPy_Material * self )
return ( PyObject * ) pymat;
}
+/* mat.freeNodes() */
+static PyObject *Material_freeNodes( BPy_Material * self )
+{
+ if (self->material->nodetree) {
+ if(self->material->nodetree) {
+ ntreeFreeTree(self->material->nodetree);
+ MEM_freeN(self->material->nodetree);
+ }
+ self->material->nodetree = NULL;
+ self->material->use_nodes = 0;
+ Py_RETURN_TRUE;
+ } else {
+ Py_RETURN_FALSE;
+ }
+}
+
/* mat_a==mat_b or mat_a!=mat_b*/
static int Material_compare( BPy_Material * a, BPy_Material * b )
{
@@ -2514,10 +2782,10 @@ int EXPP_Colorband_fromPyList( ColorBand **coba, PyObject * value )
for (i=0; i<5; i++) {
pyflt = PySequence_GetItem( colseq, i );
if (!PyNumber_Check(pyflt)) {
- return ( EXPP_ReturnIntError( PyExc_ValueError,
- "Colorband colors must be sequences of 5 floats" ) );
Py_DECREF ( pyflt );
Py_DECREF ( colseq );
+ return ( EXPP_ReturnIntError( PyExc_ValueError,
+ "Colorband colors must be sequences of 5 floats" ) );
}
Py_DECREF ( pyflt );
}
@@ -2770,7 +3038,7 @@ static PyObject *Material_getColorband( BPy_Material * self, void * type)
Py_RETURN_NONE;
}
-int Material_setColorband( BPy_Material * self, PyObject * value, void * type)
+static int Material_setColorband( BPy_Material * self, PyObject * value, void * type)
{
switch( (long)type ) {
case 0: /* these are backwards, but that how it works */
@@ -3137,3 +3405,75 @@ static PyObject *Material_clearIpo( BPy_Material * self )
return EXPP_incr_ret_False(); /* no ipo found */
}
+/* RampCol Factor */
+
+static PyObject *Material_getColorbandDiffuseFactor( BPy_Material * self )
+{
+ return PyFloat_FromDouble( (double) self->material->rampfac_col);
+}
+
+static PyObject *Material_getColorbandSpecularFactor( BPy_Material * self )
+{
+ return PyFloat_FromDouble( (double) self->material->rampfac_spec);
+}
+
+static int Material_setColorbandDiffuseFactor ( BPy_Material * self, PyObject * value )
+{
+ return EXPP_setFloatClamped(value, &self->material->rampfac_col,
+ EXPP_MAT_COLORBAND_FACTOR_MIN, EXPP_MAT_COLORBAND_FACTOR_MAX);
+}
+
+static int Material_setColorbandSpecularFactor ( BPy_Material * self, PyObject * value )
+{
+ return EXPP_setFloatClamped(value, &self->material->rampfac_spec,
+ EXPP_MAT_COLORBAND_FACTOR_MIN, EXPP_MAT_COLORBAND_FACTOR_MAX);
+}
+
+/* RampCol Method */
+
+static PyObject *Material_getColorbandDiffuseMethod( BPy_Material * self )
+{
+ return PyInt_FromLong( (long) self->material->rampblend_col);
+}
+
+static PyObject *Material_getColorbandSpecularMethod ( BPy_Material * self )
+{
+ return PyInt_FromLong( (long) self->material->rampblend_spec);
+}
+
+static int Material_setColorbandDiffuseMethod ( BPy_Material * self, PyObject * value)
+{
+ return EXPP_setIValueClamped(value, &self->material->rampblend_col,
+ MA_RAMP_BLEND, MA_RAMP_COLOR, 'b');
+}
+
+static int Material_setColorbandSpecularMethod ( BPy_Material * self, PyObject * value)
+{
+ return EXPP_setIValueClamped(value, &self->material->rampblend_spec,
+ MA_RAMP_BLEND, MA_RAMP_COLOR, 'b');
+}
+
+/* RampCol Input */
+
+static PyObject *Material_getColorbandDiffuseInput( BPy_Material * self )
+{
+ return PyInt_FromLong( (long) self->material->rampin_col);
+}
+
+static PyObject *Material_getColorbandSpecularInput( BPy_Material * self )
+{
+ return PyInt_FromLong( (long) self->material->rampin_spec);
+}
+
+static int Material_setColorbandDiffuseInput ( BPy_Material * self, PyObject * value)
+{
+ return EXPP_setIValueClamped(value, &self->material->rampin_col,
+ MA_RAMP_IN_SHADER, MA_RAMP_IN_RESULT, 'b');
+}
+
+static int Material_setColorbandSpecularInput ( BPy_Material * self, PyObject * value)
+{
+ return EXPP_setIValueClamped(value, &self->material->rampin_spec,
+ MA_RAMP_IN_SHADER, MA_RAMP_IN_RESULT, 'b');
+}
+
diff --git a/source/blender/python/api2_2x/Mathutils.c b/source/blender/python/api2_2x/Mathutils.c
index 217e096060f..f0b51285376 100644
--- a/source/blender/python/api2_2x/Mathutils.c
+++ b/source/blender/python/api2_2x/Mathutils.c
@@ -108,7 +108,7 @@ struct PyMethodDef M_Mathutils_methods[] = {
};
/*----------------------------MODULE INIT-------------------------*/
/* from can be Blender.Mathutils or GameLogic.Mathutils for the BGE */
-PyObject *Mathutils_Init(char *from)
+PyObject *Mathutils_Init(const char *from)
{
PyObject *submodule;
diff --git a/source/blender/python/api2_2x/Mathutils.h b/source/blender/python/api2_2x/Mathutils.h
index 76d53cb6c4c..0db83216178 100644
--- a/source/blender/python/api2_2x/Mathutils.h
+++ b/source/blender/python/api2_2x/Mathutils.h
@@ -38,7 +38,7 @@
#include "euler.h"
#include "point.h"
-PyObject *Mathutils_Init( char * from );
+PyObject *Mathutils_Init( const char * from );
PyObject *row_vector_multiplication(VectorObject* vec, MatrixObject * mat);
PyObject *column_vector_multiplication(MatrixObject * mat, VectorObject* vec);
PyObject *row_point_multiplication(PointObject* pt, MatrixObject * mat);
diff --git a/source/blender/python/api2_2x/Mesh.c b/source/blender/python/api2_2x/Mesh.c
index 9f68287d658..d513a8be4db 100644
--- a/source/blender/python/api2_2x/Mesh.c
+++ b/source/blender/python/api2_2x/Mesh.c
@@ -160,7 +160,7 @@ typedef struct FaceEdges {
* compare edges by vertex indices
*/
-int medge_comp( const void *va, const void *vb )
+static int medge_comp( const void *va, const void *vb )
{
const unsigned int *a = ((SrchEdges *)va)->v;
const unsigned int *b = ((SrchEdges *)vb)->v;
@@ -180,7 +180,7 @@ int medge_comp( const void *va, const void *vb )
* compare edges by insert list indices
*/
-int medge_index_comp( const void *va, const void *vb )
+static int medge_index_comp( const void *va, const void *vb )
{
const SrchEdges *a = (SrchEdges *)va;
const SrchEdges *b = (SrchEdges *)vb;
@@ -196,7 +196,7 @@ int medge_index_comp( const void *va, const void *vb )
* compare faces by vertex indices
*/
-int mface_comp( const void *va, const void *vb )
+static int mface_comp( const void *va, const void *vb )
{
const SrchFaces *a = va;
const SrchFaces *b = vb;
@@ -231,7 +231,7 @@ int mface_comp( const void *va, const void *vb )
* compare faces by insert list indices
*/
-int mface_index_comp( const void *va, const void *vb )
+static int mface_index_comp( const void *va, const void *vb )
{
const SrchFaces *a = va;
const SrchFaces *b = vb;
@@ -248,7 +248,7 @@ int mface_index_comp( const void *va, const void *vb )
* compare edges by vertex indices
*/
-int faceedge_comp( const void *va, const void *vb )
+static int faceedge_comp( const void *va, const void *vb )
{
const unsigned int *a = ((FaceEdges *)va)->v;
const unsigned int *b = ((FaceEdges *)vb)->v;
@@ -4163,6 +4163,7 @@ static int MFace_setMode( BPy_MFace *self, PyObject *value )
{
int param;
static short bitmask = TF_DYNAMIC
+ | TF_ALPHASORT
| TF_TEX
| TF_SHAREDVERT
| TF_LIGHT
@@ -5381,11 +5382,11 @@ static PyObject *MFaceSeq_delete( BPy_MFaceSeq * self, PyObject *args )
if( PySequence_Size( args ) != 2 ||
!PyArg_ParseTuple( args, "iO", &edge_also, &args ) )
return EXPP_ReturnPyObjError( PyExc_TypeError,
- "expected and int and a sequence of ints or MFaces" );
+ "expected an int and a sequence of ints or MFaces" );
if( !PyList_Check( args ) && !PyTuple_Check( args ) )
return EXPP_ReturnPyObjError( PyExc_TypeError,
- "expected and int and a sequence of ints or MFaces" );
+ "expected an int and a sequence of ints or MFaces" );
/* see how many args we need to parse */
len = PySequence_Size( args );
@@ -8696,11 +8697,11 @@ static PyObject *M_Mesh_FaceModesDict( void )
if( FM ) {
BPy_constant *d = ( BPy_constant * ) FM;
- PyConstant_Insert( d, "BILLBOARD",
- PyInt_FromLong( TF_BILLBOARD2 ) );
+ PyConstant_Insert( d, "BILLBOARD", PyInt_FromLong( TF_BILLBOARD2 ) );
PyConstant_Insert( d, "ALL", PyInt_FromLong( 0xffff ) );
PyConstant_Insert( d, "HALO", PyInt_FromLong( TF_BILLBOARD ) );
PyConstant_Insert( d, "DYNAMIC", PyInt_FromLong( TF_DYNAMIC ) );
+ PyConstant_Insert( d, "ALPHASORT", PyInt_FromLong( TF_ALPHASORT ) );
PyConstant_Insert( d, "INVISIBLE", PyInt_FromLong( TF_INVISIBLE ) );
PyConstant_Insert( d, "LIGHT", PyInt_FromLong( TF_LIGHT ) );
PyConstant_Insert( d, "OBCOL", PyInt_FromLong( TF_OBCOL ) );
diff --git a/source/blender/python/api2_2x/Modifier.c b/source/blender/python/api2_2x/Modifier.c
index 9775bce2235..3bef0eead09 100644
--- a/source/blender/python/api2_2x/Modifier.c
+++ b/source/blender/python/api2_2x/Modifier.c
@@ -83,7 +83,12 @@ enum mod_constants {
EXPP_MOD_UV,
/*ARMATURE SPECIFIC*/
+ EXPP_MOD_VGROUPS,
EXPP_MOD_ENVELOPES,
+ EXPP_MOD_QUATERNION,
+ EXPP_MOD_B_BONE_REST,
+ EXPP_MOD_INVERT_VERTGROUP,
+ EXPP_MOD_MULTIMODIFIER,
/*ARRAY SPECIFIC*/
EXPP_MOD_OBJECT_OFFSET,
@@ -376,12 +381,23 @@ static PyObject *armature_getter( BPy_Modifier * self, int type )
case EXPP_MOD_OBJECT:
return Object_CreatePyObject( md->object );
case EXPP_MOD_VERTGROUP:
- return PyBool_FromLong( ( long )( md->deformflag & 1 ) ) ;
+ return PyString_FromString( md->defgrp_name ) ;
+ case EXPP_MOD_VGROUPS:
+ return EXPP_getBitfield( &md->deformflag, ARM_DEF_VGROUP, 'h' );
case EXPP_MOD_ENVELOPES:
- return PyBool_FromLong( ( long )( md->deformflag & 2 ) ) ;
+ return EXPP_getBitfield( &md->deformflag, ARM_DEF_ENVELOPE, 'h' );
+ case EXPP_MOD_QUATERNION:
+ return EXPP_getBitfield( &md->deformflag, ARM_DEF_QUATERNION, 'h' );
+ case EXPP_MOD_B_BONE_REST:
+ return EXPP_getBitfield( &md->deformflag, ARM_DEF_B_BONE_REST, 'h' );
+ case EXPP_MOD_INVERT_VERTGROUP:
+ return EXPP_getBitfield( &md->deformflag, ARM_DEF_INVERT_VGROUP, 'h' );
+ case EXPP_MOD_MULTIMODIFIER:
+ return EXPP_getBitfield( &md->multi, 1, 'h' );
default:
return EXPP_ReturnPyObjError( PyExc_KeyError, "key not found" );
}
+ return 0;
}
static int armature_setter( BPy_Modifier *self, int type, PyObject *value )
@@ -391,13 +407,30 @@ static int armature_setter( BPy_Modifier *self, int type, PyObject *value )
switch( type ) {
case EXPP_MOD_OBJECT:
return GenericLib_assignData(value, (void **) &md->object, 0, 0, ID_OB, OB_ARMATURE);
- case EXPP_MOD_VERTGROUP:
- return EXPP_setBitfield( value, &md->deformflag, 1, 'h' );
+ case EXPP_MOD_VERTGROUP: {
+ char *defgrp_name = PyString_AsString( value );
+ if( !defgrp_name )
+ return EXPP_ReturnIntError( PyExc_TypeError,
+ "expected string arg" );
+ BLI_strncpy( md->defgrp_name, defgrp_name, sizeof( md->defgrp_name ) );
+ break;
+ }
+ case EXPP_MOD_VGROUPS:
+ return EXPP_setBitfield( value, &md->deformflag, ARM_DEF_VGROUP, 'h' );
case EXPP_MOD_ENVELOPES:
- return EXPP_setBitfield( value, &md->deformflag, 2, 'h' );
+ return EXPP_setBitfield( value, &md->deformflag, ARM_DEF_ENVELOPE, 'h' );
+ case EXPP_MOD_QUATERNION:
+ return EXPP_setBitfield( value, &md->deformflag, ARM_DEF_QUATERNION, 'h' );
+ case EXPP_MOD_B_BONE_REST:
+ return EXPP_setBitfield( value, &md->deformflag, ARM_DEF_B_BONE_REST, 'h' );
+ case EXPP_MOD_INVERT_VERTGROUP:
+ return EXPP_setBitfield( value, &md->deformflag, ARM_DEF_INVERT_VGROUP, 'h' );
+ case EXPP_MOD_MULTIMODIFIER:
+ return EXPP_setBitfield( value, &md->multi, 1, 'h' );
default:
return EXPP_ReturnIntError( PyExc_KeyError, "key not found" );
}
+ return 0;
}
static PyObject *lattice_getter( BPy_Modifier * self, int type )
@@ -1595,8 +1628,18 @@ for var in st.replace(',','').split('\n'):
PyInt_FromLong( EXPP_MOD_OPTIMAL ) );
PyConstant_Insert( d, "UV",
PyInt_FromLong( EXPP_MOD_UV ) );
+ PyConstant_Insert( d, "VGROUPS",
+ PyInt_FromLong( EXPP_MOD_VGROUPS ) );
PyConstant_Insert( d, "ENVELOPES",
PyInt_FromLong( EXPP_MOD_ENVELOPES ) );
+ PyConstant_Insert( d, "QUATERNION",
+ PyInt_FromLong( EXPP_MOD_QUATERNION ) );
+ PyConstant_Insert( d, "B_BONE_REST",
+ PyInt_FromLong( EXPP_MOD_B_BONE_REST ) );
+ PyConstant_Insert( d, "INVERT_VERTGROUP",
+ PyInt_FromLong( EXPP_MOD_INVERT_VERTGROUP ) );
+ PyConstant_Insert( d, "MULTIMODIFIER",
+ PyInt_FromLong( EXPP_MOD_MULTIMODIFIER ) );
PyConstant_Insert( d, "OBJECT_OFFSET",
PyInt_FromLong( EXPP_MOD_OBJECT_OFFSET ) );
PyConstant_Insert( d, "OBJECT_CURVE",
diff --git a/source/blender/python/api2_2x/NLA.c b/source/blender/python/api2_2x/NLA.c
index cc477c7b5cf..18eef7c1a2f 100644
--- a/source/blender/python/api2_2x/NLA.c
+++ b/source/blender/python/api2_2x/NLA.c
@@ -1438,7 +1438,11 @@ static PyObject *ActionStrips_append( BPy_ActionStrips *self, PyObject * args )
strip->flag = ACTSTRIP_LOCK_ACTION;
find_stridechannel(ob, strip);
+ if(ob->nlastrips.first == NULL)
+ ob->nlaflag |= OB_NLA_OVERRIDE;
+
strip->repeat = 1.0;
+ strip->scale = 1.0;
act->id.us++;
BLI_addtail(&ob->nlastrips, strip);
diff --git a/source/blender/python/api2_2x/NMesh.c b/source/blender/python/api2_2x/NMesh.c
index e7ed89573fb..28407f174da 100644
--- a/source/blender/python/api2_2x/NMesh.c
+++ b/source/blender/python/api2_2x/NMesh.c
@@ -88,9 +88,6 @@ extern void countall(void);
#define NMESH_SUBDIV_MIN 0
#define NMESH_SUBDIV_MAX 6
-/* Globals */
-static PyObject *g_nmeshmodule = NULL;
-
static int unlink_existingMeshData( Mesh * mesh );
static int convert_NMeshToMesh( Mesh *mesh, BPy_NMesh *nmesh );
static void check_dverts(Mesh *me, int old_totverts);
@@ -3321,7 +3318,6 @@ PyObject *NMesh_Init( void )
if( EdgeFlags )
PyModule_AddObject( submodule, "EdgeFlags", EdgeFlags );
- g_nmeshmodule = submodule;
return submodule;
}
diff --git a/source/blender/python/api2_2x/Object.c b/source/blender/python/api2_2x/Object.c
index 45cce46d389..4495dc6c655 100644
--- a/source/blender/python/api2_2x/Object.c
+++ b/source/blender/python/api2_2x/Object.c
@@ -81,6 +81,7 @@ struct rctf;
#include "BIF_editarmature.h"
#include "BIF_editaction.h"
#include "BIF_editnla.h"
+#include "BIF_keyframing.h"
#include "BLI_arithb.h"
#include "BLI_blenlib.h"
@@ -204,6 +205,7 @@ enum obj_consts {
EXPP_OBJ_ATTR_SB_INSPRING,
EXPP_OBJ_ATTR_SB_INFRICT,
+ EXPP_OBJ_ATTR_EMPTY_DRAWTYPE
};
#define EXPP_OBJECT_DRAWSIZEMIN 0.01f
@@ -1696,11 +1698,9 @@ static PyObject *Object_getBoundBox( BPy_Object * self, PyObject *args )
"This object isn't linked to any object data (mesh, curve, etc) yet" );
if( !self->object->bb ) { /* if no ob bbox, we look in obdata */
- Mesh *me;
Curve *curve;
switch ( self->object->type ) {
case OB_MESH:
- me = self->object->data;
vec = (float*) mesh_get_bb(self->object)->vec;
break;
case OB_CURVE:
@@ -2431,6 +2431,12 @@ static int Object_setDrawType( BPy_Object * self, PyObject * value )
OB_BOUNDBOX, OB_TEXTURE, 'b' );
}
+static int Object_setEmptyShape( BPy_Object * self, PyObject * value )
+{
+ return EXPP_setIValueRange( value, &self->object->empty_drawtype,
+ OB_ARROWS, OB_EMPTY_CONE, 'b' );
+}
+
static int Object_setEuler( BPy_Object * self, PyObject * args )
{
float rot1, rot2, rot3;
@@ -2560,7 +2566,7 @@ static int Object_setMatrix( BPy_Object * self, MatrixObject * mat )
static PyObject *Object_insertIpoKey( BPy_Object * self, PyObject * args )
{
Object *ob= self->object;
- int key = 0;
+ int key = 0, flag = 0;
char *actname= NULL;
if( !PyArg_ParseTuple( args, "i", &key ) )
@@ -2570,35 +2576,39 @@ static PyObject *Object_insertIpoKey( BPy_Object * self, PyObject * args )
if(ob->ipoflag & OB_ACTION_OB)
actname= "Object";
+ /* flag should be initialised with the 'autokeying' flags like for normal keying */
+ if (IS_AUTOKEY_FLAG(AUTOMATKEY)) flag |= INSERTKEY_MATRIX;
+ if (IS_AUTOKEY_FLAG(INSERTNEEDED)) flag |= INSERTKEY_NEEDED;
+
if (key == IPOKEY_LOC || key == IPOKEY_LOCROT || key == IPOKEY_LOCROTSIZE){
- insertkey((ID *)ob, ID_OB, actname, NULL,OB_LOC_X, 0);
- insertkey((ID *)ob, ID_OB, actname, NULL,OB_LOC_Y, 0);
- insertkey((ID *)ob, ID_OB, actname, NULL,OB_LOC_Z, 0);
+ insertkey((ID *)ob, ID_OB, actname, NULL,OB_LOC_X, flag);
+ insertkey((ID *)ob, ID_OB, actname, NULL,OB_LOC_Y, flag);
+ insertkey((ID *)ob, ID_OB, actname, NULL,OB_LOC_Z, flag);
}
if (key == IPOKEY_ROT || key == IPOKEY_LOCROT || key == IPOKEY_LOCROTSIZE){
- insertkey((ID *)ob, ID_OB, actname, NULL,OB_ROT_X, 0);
- insertkey((ID *)ob, ID_OB, actname, NULL,OB_ROT_Y, 0);
- insertkey((ID *)ob, ID_OB, actname, NULL,OB_ROT_Z, 0);
+ insertkey((ID *)ob, ID_OB, actname, NULL,OB_ROT_X, flag);
+ insertkey((ID *)ob, ID_OB, actname, NULL,OB_ROT_Y, flag);
+ insertkey((ID *)ob, ID_OB, actname, NULL,OB_ROT_Z, flag);
}
if (key == IPOKEY_SIZE || key == IPOKEY_LOCROTSIZE ){
- insertkey((ID *)ob, ID_OB, actname, NULL,OB_SIZE_X, 0);
- insertkey((ID *)ob, ID_OB, actname, NULL,OB_SIZE_Y, 0);
- insertkey((ID *)ob, ID_OB, actname, NULL,OB_SIZE_Z, 0);
+ insertkey((ID *)ob, ID_OB, actname, NULL,OB_SIZE_X, flag);
+ insertkey((ID *)ob, ID_OB, actname, NULL,OB_SIZE_Y, flag);
+ insertkey((ID *)ob, ID_OB, actname, NULL,OB_SIZE_Z, flag);
}
if (key == IPOKEY_LAYER ){
- insertkey((ID *)ob, ID_OB, actname, NULL,OB_LAY, 0);
+ insertkey((ID *)ob, ID_OB, actname, NULL,OB_LAY, flag);
}
if (key == IPOKEY_PI_STRENGTH ){
- insertkey((ID *)ob, ID_OB, actname, NULL, OB_PD_FSTR, 0);
+ insertkey((ID *)ob, ID_OB, actname, NULL, OB_PD_FSTR, flag);
} else if (key == IPOKEY_PI_FALLOFF ){
- insertkey((ID *)ob, ID_OB, actname, NULL, OB_PD_FFALL, 0);
+ insertkey((ID *)ob, ID_OB, actname, NULL, OB_PD_FFALL, flag);
} else if (key == IPOKEY_PI_SURFACEDAMP ){
- insertkey((ID *)ob, ID_OB, actname, NULL, OB_PD_SDAMP, 0);
+ insertkey((ID *)ob, ID_OB, actname, NULL, OB_PD_SDAMP, flag);
} else if (key == IPOKEY_PI_RANDOMDAMP ){
- insertkey((ID *)ob, ID_OB, actname, NULL, OB_PD_RDAMP, 0);
+ insertkey((ID *)ob, ID_OB, actname, NULL, OB_PD_RDAMP, flag);
} else if (key == IPOKEY_PI_PERM ){
- insertkey((ID *)ob, ID_OB, actname, NULL, OB_PD_PERM, 0);
+ insertkey((ID *)ob, ID_OB, actname, NULL, OB_PD_PERM, flag);
}
allspace(REMAKEIPO, 0);
@@ -2622,6 +2632,7 @@ static PyObject *Object_insertPoseKey( BPy_Object * self, PyObject * args )
BPy_Action *sourceact;
char *chanName;
int actframe;
+ int flag=0;
/* for doing the time trick, similar to editaction bake_action_with_client() */
@@ -2640,17 +2651,21 @@ static PyObject *Object_insertPoseKey( BPy_Object * self, PyObject * args )
/* XXX: must check chanName actually exists, otherwise segfaults! */
//achan = get_action_channel(sourceact->action, chanName);
-
- insertkey(&ob->id, ID_PO, chanName, NULL, AC_LOC_X, 0);
- insertkey(&ob->id, ID_PO, chanName, NULL, AC_LOC_Y, 0);
- insertkey(&ob->id, ID_PO, chanName, NULL, AC_LOC_Z, 0);
- insertkey(&ob->id, ID_PO, chanName, NULL, AC_QUAT_X, 0);
- insertkey(&ob->id, ID_PO, chanName, NULL, AC_QUAT_Y, 0);
- insertkey(&ob->id, ID_PO, chanName, NULL, AC_QUAT_Z, 0);
- insertkey(&ob->id, ID_PO, chanName, NULL, AC_QUAT_W, 0);
- insertkey(&ob->id, ID_PO, chanName, NULL, AC_SIZE_X, 0);
- insertkey(&ob->id, ID_PO, chanName, NULL, AC_SIZE_Y, 0);
- insertkey(&ob->id, ID_PO, chanName, NULL, AC_SIZE_Z, 0);
+
+ /* flag should be initialised with the 'autokeying' flags like for normal keying */
+ if (IS_AUTOKEY_FLAG(AUTOMATKEY)) flag |= INSERTKEY_MATRIX;
+ if (IS_AUTOKEY_FLAG(INSERTNEEDED)) flag |= INSERTKEY_NEEDED;
+
+ insertkey(&ob->id, ID_PO, chanName, NULL, AC_LOC_X, flag);
+ insertkey(&ob->id, ID_PO, chanName, NULL, AC_LOC_Y, flag);
+ insertkey(&ob->id, ID_PO, chanName, NULL, AC_LOC_Z, flag);
+ insertkey(&ob->id, ID_PO, chanName, NULL, AC_QUAT_X, flag);
+ insertkey(&ob->id, ID_PO, chanName, NULL, AC_QUAT_Y, flag);
+ insertkey(&ob->id, ID_PO, chanName, NULL, AC_QUAT_Z, flag);
+ insertkey(&ob->id, ID_PO, chanName, NULL, AC_QUAT_W, flag);
+ insertkey(&ob->id, ID_PO, chanName, NULL, AC_SIZE_X, flag);
+ insertkey(&ob->id, ID_PO, chanName, NULL, AC_SIZE_Y, flag);
+ insertkey(&ob->id, ID_PO, chanName, NULL, AC_SIZE_Z, flag);
G.scene->r.cfra = oldframe;
@@ -2672,6 +2687,7 @@ static PyObject *Object_insertPoseKey( BPy_Object * self, PyObject * args )
static PyObject *Object_insertCurrentPoseKey( BPy_Object * self, PyObject * args )
{
Object *ob= self->object;
+ int flag = 0;
char *chanName;
/* for doing the time trick, similar to editaction bake_action_with_client() */
@@ -2687,16 +2703,20 @@ static PyObject *Object_insertCurrentPoseKey( BPy_Object * self, PyObject * args
/* XXX: must check chanName actually exists, otherwise segfaults! */
- insertkey(&ob->id, ID_PO, chanName, NULL, AC_LOC_X, 0);
- insertkey(&ob->id, ID_PO, chanName, NULL, AC_LOC_Y, 0);
- insertkey(&ob->id, ID_PO, chanName, NULL, AC_LOC_Z, 0);
- insertkey(&ob->id, ID_PO, chanName, NULL, AC_QUAT_X, 0);
- insertkey(&ob->id, ID_PO, chanName, NULL, AC_QUAT_Y, 0);
- insertkey(&ob->id, ID_PO, chanName, NULL, AC_QUAT_Z, 0);
- insertkey(&ob->id, ID_PO, chanName, NULL, AC_QUAT_W, 0);
- insertkey(&ob->id, ID_PO, chanName, NULL, AC_SIZE_X, 0);
- insertkey(&ob->id, ID_PO, chanName, NULL, AC_SIZE_Y, 0);
- insertkey(&ob->id, ID_PO, chanName, NULL, AC_SIZE_Z, 0);
+ /* flag should be initialised with the 'autokeying' flags like for normal keying */
+ if (IS_AUTOKEY_FLAG(AUTOMATKEY)) flag |= INSERTKEY_MATRIX;
+ if (IS_AUTOKEY_FLAG(INSERTNEEDED)) flag |= INSERTKEY_NEEDED;
+
+ insertkey(&ob->id, ID_PO, chanName, NULL, AC_LOC_X, flag);
+ insertkey(&ob->id, ID_PO, chanName, NULL, AC_LOC_Y, flag);
+ insertkey(&ob->id, ID_PO, chanName, NULL, AC_LOC_Z, flag);
+ insertkey(&ob->id, ID_PO, chanName, NULL, AC_QUAT_X, flag);
+ insertkey(&ob->id, ID_PO, chanName, NULL, AC_QUAT_Y, flag);
+ insertkey(&ob->id, ID_PO, chanName, NULL, AC_QUAT_Z, flag);
+ insertkey(&ob->id, ID_PO, chanName, NULL, AC_QUAT_W, flag);
+ insertkey(&ob->id, ID_PO, chanName, NULL, AC_SIZE_X, flag);
+ insertkey(&ob->id, ID_PO, chanName, NULL, AC_SIZE_Y, flag);
+ insertkey(&ob->id, ID_PO, chanName, NULL, AC_SIZE_Z, flag);
G.scene->r.cfra = oldframe;
@@ -2727,7 +2747,7 @@ static PyObject *Object_setConstraintInfluenceForBone( BPy_Object * self,
"expects bonename, constraintname, influenceval" );
icu = verify_ipocurve((ID *)self->object, ID_CO, boneName, constName, NULL,
- CO_ENFORCE);
+ CO_ENFORCE, 1);
if (!icu)
return EXPP_ReturnPyObjError( PyExc_RuntimeError,
@@ -2980,7 +3000,7 @@ static PyObject *Object_getProperty( BPy_Object * self, PyObject * args )
return EXPP_ReturnPyObjError( PyExc_TypeError,
"expected a string" );
- prop = get_property( self->object, prop_name );
+ prop = get_ob_property( self->object, prop_name );
if( prop )
return Property_CreatePyObject( prop );
@@ -2996,7 +3016,7 @@ static PyObject *Object_addProperty( BPy_Object * self, PyObject * args )
char *prop_type = NULL;
short type = -1;
BPy_Property *py_prop = NULL;
- int argslen = PyObject_Length( args );
+ int argslen = PyTuple_Size( args );
if( argslen == 3 || argslen == 2 ) {
if( !PyArg_ParseTuple( args, "sO|s", &prop_name, &prop_data,
@@ -3107,7 +3127,7 @@ static PyObject *Object_removeProperty( BPy_Object * self, PyObject * args )
py_prop->property = NULL;
}
} else {
- prop = get_property( self->object, prop_name );
+ prop = get_ob_property( self->object, prop_name );
if( prop ) {
BLI_remlink( &self->object->prop, prop );
free_property( prop );
@@ -3126,18 +3146,22 @@ static PyObject *Object_copyAllPropertiesTo( BPy_Object * self,
PyObject * args )
{
PyObject *dest;
+ Object *dest_ob;
bProperty *prop = NULL;
- bProperty *propn = NULL;
if( !PyArg_ParseTuple( args, "O!", &Object_Type, &dest ) )
return EXPP_ReturnPyObjError( PyExc_TypeError,
"expected an Object" );
-
+
+ if (dest == (PyObject *)self) {
+ Py_RETURN_NONE;
+ }
+ dest_ob = ( ( BPy_Object * ) dest )->object;
+
/*make a copy of all its properties*/
prop = self->object->prop.first;
while( prop ) {
- propn = copy_property( prop );
- BLI_addtail( &( ( BPy_Object * ) dest )->object->prop, propn );
+ set_ob_property( dest_ob, prop );
prop = prop->next;
}
@@ -3297,6 +3321,33 @@ static PyObject *Object_insertShapeKey(BPy_Object * self)
Py_RETURN_NONE;
}
+static PyObject *Object_getColor( BPy_Object *self, void *type )
+{
+ return Py_BuildValue( "(ffff)", self->object->col[0], self->object->col[1], self->object->col[2], self->object->col[3] );
+}
+
+static int Object_setColor( BPy_Object *self, PyObject *value )
+{
+ int i;
+ float color[4];
+ struct Object *object = self->object;
+
+ value = PySequence_Tuple( value );
+
+ if( !value || !PyArg_ParseTuple( value, "ffff", &color[0], &color[1], &color[2], &color[3] ) ) {
+ Py_XDECREF( value );
+ return EXPP_ReturnIntError( PyExc_TypeError,
+ "expected a list or tuple of 3 floats" );
+ }
+
+ Py_DECREF( value );
+
+ for( i = 0; i < 4; ++i ) {
+ object->col[i] = MAX2(MIN2(color[i], 1.0), 0);
+ }
+ return 0;
+}
+
/* __copy__() */
static PyObject *Object_copy(BPy_Object * self)
{
@@ -3511,8 +3562,8 @@ static int Object_setRBMass( BPy_Object * self, PyObject * args )
/* this is too low level, possible to add helper methods */
-#define GAMEFLAG_MASK ( OB_DYNAMIC | OB_CHILD | OB_ACTOR | OB_DO_FH | \
- OB_ROT_FH | OB_ANISOTROPIC_FRICTION | OB_GHOST | OB_RIGID_BODY | \
+#define GAMEFLAG_MASK ( OB_COLLISION | OB_DYNAMIC | OB_CHILD | OB_ACTOR | OB_DO_FH | \
+ OB_ROT_FH | OB_ANISOTROPIC_FRICTION | OB_GHOST | OB_RIGID_BODY | OB_SOFT_BODY | \
OB_BOUNDS | OB_COLLISION_RESPONSE | OB_SECTOR | OB_PROP | \
OB_MAINACTOR )
@@ -3758,6 +3809,9 @@ static PyObject *getIntAttr( BPy_Object *self, void *type )
case EXPP_OBJ_ATTR_DRAWTYPE:
param = object->dt;
break;
+ case EXPP_OBJ_ATTR_EMPTY_DRAWTYPE:
+ param = object->empty_drawtype;
+ break;
case EXPP_OBJ_ATTR_PARENT_TYPE:
param = object->partype;
break;
@@ -4938,6 +4992,10 @@ static PyGetSetDef BPy_Object_getseters[] = {
(getter)getIntAttr, (setter)Object_setDrawType,
"The object's drawing type",
(void *)EXPP_OBJ_ATTR_DRAWTYPE},
+ {"emptyShape",
+ (getter)getIntAttr, (setter)Object_setEmptyShape,
+ "The empty's drawing shape",
+ (void *)EXPP_OBJ_ATTR_EMPTY_DRAWTYPE},
{"parentType",
(getter)getIntAttr, (setter)NULL,
"The object's parent type",
@@ -5174,7 +5232,10 @@ static PyGetSetDef BPy_Object_getseters[] = {
(getter)Object_getDrawModeBits, (setter)Object_setDrawModeBits,
"Transparent materials for the active object (mesh only) enabled",
(void *)OB_DRAWTRANSP},
-
+ {"color",
+ (getter)Object_getColor, (setter)Object_setColor,
+ "Object color used by the game engine and optionally for materials",
+ NULL},
{"enableNLAOverride",
(getter)Object_getNLAflagBits, (setter)Object_setNLAflagBits,
"Toggles Action-NLA based animation",
@@ -5482,6 +5543,7 @@ static PyObject *M_Object_RBFlagsDict( void )
if( M ) {
BPy_constant *d = ( BPy_constant * ) M;
+ PyConstant_Insert( d, "COLLISION", PyInt_FromLong( OB_COLLISION ) );
PyConstant_Insert( d, "DYNAMIC", PyInt_FromLong( OB_DYNAMIC ) );
PyConstant_Insert( d, "CHILD", PyInt_FromLong( OB_CHILD ) );
PyConstant_Insert( d, "ACTOR", PyInt_FromLong( OB_ACTOR ) );
@@ -5491,6 +5553,7 @@ static PyObject *M_Object_RBFlagsDict( void )
PyInt_FromLong( OB_ANISOTROPIC_FRICTION ) );
PyConstant_Insert( d, "GHOST", PyInt_FromLong( OB_GHOST ) );
PyConstant_Insert( d, "RIGIDBODY", PyInt_FromLong( OB_RIGID_BODY ) );
+ PyConstant_Insert( d, "SOFTBODY", PyInt_FromLong( OB_SOFT_BODY ) );
PyConstant_Insert( d, "BOUNDS", PyInt_FromLong( OB_BOUNDS ) );
PyConstant_Insert( d, "COLLISION_RESPONSE",
PyInt_FromLong( OB_COLLISION_RESPONSE ) );
@@ -5538,6 +5601,24 @@ static PyObject *M_Object_IpoKeyTypesDict( void )
return M;
}
+static PyObject *M_Object_EmptyShapesDict( void )
+{
+ PyObject *M = PyConstant_New( );
+
+ if( M ) {
+ BPy_constant *d = ( BPy_constant * ) M;
+ PyConstant_Insert( d, "ARROWS", PyInt_FromLong( OB_ARROWS ) );
+ PyConstant_Insert( d, "AXES", PyInt_FromLong( OB_PLAINAXES ) );
+ PyConstant_Insert( d, "CIRCLE", PyInt_FromLong( OB_CIRCLE ) );
+ PyConstant_Insert( d, "ARROW", PyInt_FromLong( OB_SINGLE_ARROW ) );
+ PyConstant_Insert( d, "CUBE", PyInt_FromLong( OB_CUBE ) );
+ PyConstant_Insert( d, "SPHERE", PyInt_FromLong( OB_EMPTY_SPHERE ) );
+ PyConstant_Insert( d, "CONE", PyInt_FromLong( OB_EMPTY_CONE ) );
+ }
+ return M;
+}
+
+
/*****************************************************************************/
/* Function: initObject */
/*****************************************************************************/
@@ -5552,6 +5633,7 @@ PyObject *Object_Init( void )
PyObject *RBFlagsDict = M_Object_RBFlagsDict( );
PyObject *RBShapesDict = M_Object_RBShapeBoundDict( );
PyObject *IpoKeyTypesDict = M_Object_IpoKeyTypesDict( );
+ PyObject *EmptyShapesDict = M_Object_EmptyShapesDict( );
PyType_Ready( &Object_Type ) ;
@@ -5596,7 +5678,9 @@ PyObject *Object_Init( void )
if( RBShapesDict )
PyModule_AddObject( module, "RBShapes", RBShapesDict );
if( IpoKeyTypesDict )
- PyModule_AddObject( module, "IpoKeyTypes", IpoKeyTypesDict );
+ PyModule_AddObject( module, "IpoKeyTypes", IpoKeyTypesDict );
+ if( EmptyShapesDict )
+ PyModule_AddObject( module, "EmptyShapes", EmptyShapesDict );
/*Add SUBMODULES to the module*/
dict = PyModule_GetDict( module ); /*borrowed*/
diff --git a/source/blender/python/api2_2x/Particle.c b/source/blender/python/api2_2x/Particle.c
index 2c2e724129e..893ee077d67 100644
--- a/source/blender/python/api2_2x/Particle.c
+++ b/source/blender/python/api2_2x/Particle.c
@@ -526,15 +526,18 @@ throws NameError if name not found
PyObject *M_ParticleSys_Get( PyObject * self, PyObject * args )
{
+#if 1
+ return EXPP_ReturnPyObjError( PyExc_NotImplementedError,
+ "Particle.Get() not implemented" );
+#else
ParticleSettings *psys_iter;
char *name = NULL;
-#if 0
ParticleSystem *blparticlesys = 0;
Object *ob;
PyObject *partsyslist,*current;
-#endif
+
if( !PyArg_ParseTuple( args, "|s", &name ) )
return EXPP_ReturnPyObjError( PyExc_TypeError,
"expected string argument" );
@@ -577,7 +580,6 @@ PyObject *M_ParticleSys_Get( PyObject * self, PyObject * args )
}
while( psys_iter ){
-#if 0
pyobj = ParticleSystem_CreatePyObject( psys_iter);
if( !pyobj){
Py_DECREF( pylist );
@@ -586,7 +588,6 @@ PyObject *M_ParticleSys_Get( PyObject * self, PyObject * args )
"could not create ParticleSystem PyObject");
}
PyList_SET_ITEM( pylist, index, pyobj);
-#endif
printf("name is %s\n", psys_iter->id.name+2);
psys_iter = psys_iter->id.next;
index++;
@@ -596,10 +597,6 @@ PyObject *M_ParticleSys_Get( PyObject * self, PyObject * args )
}
-
-
-#if 0
-
for( ob = G.main->particlesystem.first; ob; ob = ob->id.next )
if( !strcmp( name, ob->id.name + 2 ) )
break;
@@ -626,7 +623,6 @@ PyObject *M_ParticleSys_Get( PyObject * self, PyObject * args )
}
return partsyslist;
-
#endif
}
@@ -804,7 +800,7 @@ static PyObject *Part_GetLoc( BPy_PartSys * self, PyObject * args )
{
ParticleSystem *psys = 0L;
Object *ob = 0L;
- PyObject *partlist,*seglist;
+ PyObject *partlist,*seglist=0L;
ParticleCacheKey **cache,*path;
PyObject* loc = 0L;
ParticleKey state;
@@ -1107,7 +1103,7 @@ static PyObject *Part_GetSize( BPy_PartSys * self, PyObject * args )
ParticleSystem *psys = 0L;
ParticleData *data;
Object *ob = 0L;
- PyObject *partlist,*tuple;
+ PyObject *partlist,*tuple=0L;
DerivedMesh* dm;
float vm[4][4],wm[4][4];
float size;
@@ -1217,7 +1213,7 @@ static PyObject *Part_GetAge( BPy_PartSys * self, PyObject * args )
ParticleSystem *psys = 0L;
ParticleData *data;
Object *ob = 0L;
- PyObject *partlist,*tuple;
+ PyObject *partlist,*tuple=0L;
DerivedMesh* dm;
float vm[4][4],wm[4][4];
float life;
diff --git a/source/blender/python/api2_2x/Pose.c b/source/blender/python/api2_2x/Pose.c
index 1021eac5fc4..06d736f2cb6 100644
--- a/source/blender/python/api2_2x/Pose.c
+++ b/source/blender/python/api2_2x/Pose.c
@@ -43,6 +43,7 @@
#include "DNA_scene_types.h"
#include "DNA_space_types.h" //1 - this order
#include "BSE_editipo.h" //2
+#include "BIF_keyframing.h"
#include "BLI_blenlib.h"
#include "BLI_arithb.h"
#include "Mathutils.h"
@@ -413,16 +414,17 @@ static PyObject *PoseBone_insertKey(BPy_PoseBone *self, PyObject *args)
{
PyObject *parent_object = NULL;
PyObject *constants = NULL, *item = NULL;
- int frame = 1, oldframe, length, x, numeric_value = 0, oldflag, no_ipo_update = 0;
+ int frame = 1, oldframe, length, x, numeric_value = 0, oldflag, no_ipo_update = 0, flag = 0;
bPoseChannel *pchan = NULL;
if (!PyArg_ParseTuple(args, "O!i|Oi", &Object_Type, &parent_object, &frame, &constants, &no_ipo_update ))
goto AttributeError;
- /* incase we ever have a value other then 1 for fast */
- if (no_ipo_update)
- no_ipo_update = 1;
+ /* flag should be initialised with the 'autokeying' flags like for normal keying */
+ if (no_ipo_update) flag |= INSERTKEY_FAST;
+ if (IS_AUTOKEY_FLAG(AUTOMATKEY)) flag |= INSERTKEY_MATRIX;
+ if (IS_AUTOKEY_FLAG(INSERTNEEDED)) flag |= INSERTKEY_NEEDED;
//verify that this pchannel is part of the object->pose
for (pchan = ((BPy_Object*)parent_object)->object->pose->chanbase.first;
@@ -492,29 +494,29 @@ static PyObject *PoseBone_insertKey(BPy_PoseBone *self, PyObject *args)
//insert the pose keys
if (self->posechannel->flag & POSE_ROT){
insertkey(&((BPy_Object*)parent_object)->object->id,
- ID_PO, self->posechannel->name, NULL, AC_QUAT_X, no_ipo_update);
+ ID_PO, self->posechannel->name, NULL, AC_QUAT_X, flag);
insertkey(&((BPy_Object*)parent_object)->object->id,
- ID_PO, self->posechannel->name, NULL, AC_QUAT_Y, no_ipo_update);
+ ID_PO, self->posechannel->name, NULL, AC_QUAT_Y, flag);
insertkey(&((BPy_Object*)parent_object)->object->id,
- ID_PO, self->posechannel->name, NULL, AC_QUAT_Z, no_ipo_update);
+ ID_PO, self->posechannel->name, NULL, AC_QUAT_Z, flag);
insertkey(&((BPy_Object*)parent_object)->object->id,
- ID_PO, self->posechannel->name, NULL, AC_QUAT_W, no_ipo_update);
+ ID_PO, self->posechannel->name, NULL, AC_QUAT_W, flag);
}
if (self->posechannel->flag & POSE_LOC){
insertkey(&((BPy_Object*)parent_object)->object->id,
- ID_PO, self->posechannel->name, NULL, AC_LOC_X, no_ipo_update);
+ ID_PO, self->posechannel->name, NULL, AC_LOC_X, flag);
insertkey(&((BPy_Object*)parent_object)->object->id,
- ID_PO, self->posechannel->name, NULL, AC_LOC_Y, no_ipo_update);
+ ID_PO, self->posechannel->name, NULL, AC_LOC_Y, flag);
insertkey(&((BPy_Object*)parent_object)->object->id,
- ID_PO, self->posechannel->name, NULL, AC_LOC_Z, no_ipo_update);
+ ID_PO, self->posechannel->name, NULL, AC_LOC_Z, flag);
}
if (self->posechannel->flag & POSE_SIZE){
insertkey(&((BPy_Object*)parent_object)->object->id,
- ID_PO, self->posechannel->name, NULL, AC_SIZE_X, no_ipo_update);
+ ID_PO, self->posechannel->name, NULL, AC_SIZE_X, flag);
insertkey(&((BPy_Object*)parent_object)->object->id,
- ID_PO, self->posechannel->name, NULL, AC_SIZE_Y, no_ipo_update);
+ ID_PO, self->posechannel->name, NULL, AC_SIZE_Y, flag);
insertkey(&((BPy_Object*)parent_object)->object->id,
- ID_PO, self->posechannel->name, NULL, AC_SIZE_Z, no_ipo_update);
+ ID_PO, self->posechannel->name, NULL, AC_SIZE_Z, flag);
}
//flip the frame back
diff --git a/source/blender/python/api2_2x/Scene.c b/source/blender/python/api2_2x/Scene.c
index eba951b8813..8a2be2391a4 100644
--- a/source/blender/python/api2_2x/Scene.c
+++ b/source/blender/python/api2_2x/Scene.c
@@ -591,7 +591,7 @@ PyObject *Scene_CreatePyObject( Scene * scene )
}
/*-----------------------FromPyObject-----------------------------------*/
-Scene *Scene_FromPyObject( PyObject * pyobj )
+static Scene *Scene_FromPyObject( PyObject * pyobj )
{
return ( ( BPy_Scene * ) pyobj )->scene;
}
@@ -641,20 +641,18 @@ static PyObject *M_Scene_Get( PyObject * self, PyObject * args )
if( !PyArg_ParseTuple( args, "|s", &name ) )
return ( EXPP_ReturnPyObjError( PyExc_TypeError,
"expected string argument (or nothing)" ) );
-
+
scene_iter = G.main->scene.first;
if( name ) { /* (name) - Search scene by name */
PyObject *wanted_scene = NULL;
- while( ( scene_iter ) && ( wanted_scene == NULL ) ) {
-
- if( strcmp( name, scene_iter->id.name + 2 ) == 0 )
- wanted_scene =
- Scene_CreatePyObject( scene_iter );
-
- scene_iter = scene_iter->id.next;
+ for(;scene_iter; scene_iter = scene_iter->id.next) {
+ if( strcmp( name, scene_iter->id.name + 2 ) == 0 ) {
+ wanted_scene = Scene_CreatePyObject( scene_iter );
+ break;
+ }
}
if( wanted_scene == NULL ) { /* Requested scene doesn't exist */
@@ -678,19 +676,14 @@ static PyObject *M_Scene_Get( PyObject * self, PyObject * args )
return ( EXPP_ReturnPyObjError( PyExc_MemoryError,
"couldn't create PyList" ) );
- while( scene_iter ) {
+ for(; scene_iter; scene_iter = scene_iter->id.next, index++) {
pyobj = Scene_CreatePyObject( scene_iter );
if( !pyobj ) {
Py_DECREF(sce_pylist);
- return ( EXPP_ReturnPyObjError
- ( PyExc_MemoryError,
- "couldn't create PyString" ) );
+ return NULL; /* Scene_CreatePyObject sets an error */
}
PyList_SET_ITEM( sce_pylist, index, pyobj );
-
- scene_iter = scene_iter->id.next;
- index++;
}
return sce_pylist;
@@ -1228,7 +1221,7 @@ static PyObject *SceneObSeq_getObjects( BPy_SceneObSeq *self, void *mode)
return SceneObSeq_CreatePyObject(self->bpyscene, NULL, (int)((long)mode));
}
-int SceneObSeq_setObjects( BPy_SceneObSeq *self, PyObject *value, void *_mode_)
+static int SceneObSeq_setObjects( BPy_SceneObSeq *self, PyObject *value, void *_mode_)
{
/*
ONLY SUPPORTS scn.objects.selected and scn.objects.context
@@ -1649,7 +1642,7 @@ static PyObject *SceneObSeq_unlink( BPy_SceneObSeq * self, PyObject *args )
Py_RETURN_FALSE;
}
-PyObject *SceneObSeq_getActive(BPy_SceneObSeq *self)
+static PyObject *SceneObSeq_getActive(BPy_SceneObSeq *self)
{
Base *base;
SCENE_DEL_CHECK_PY(self->bpyscene);
@@ -1694,7 +1687,7 @@ static int SceneObSeq_setActive(BPy_SceneObSeq *self, PyObject *value)
return 0;
}
-PyObject *SceneObSeq_getCamera(BPy_SceneObSeq *self)
+static PyObject *SceneObSeq_getCamera(BPy_SceneObSeq *self)
{
SCENE_DEL_CHECK_PY(self->bpyscene);
diff --git a/source/blender/python/api2_2x/Sys.c b/source/blender/python/api2_2x/Sys.c
index baae2220143..16d879c3032 100644
--- a/source/blender/python/api2_2x/Sys.c
+++ b/source/blender/python/api2_2x/Sys.c
@@ -149,16 +149,12 @@ struct PyMethodDef M_sys_methods[] = {
/* Module Functions */
-static PyObject *g_sysmodule = NULL; /* pointer to Blender.sys module */
-
PyObject *sys_Init( void )
{
PyObject *submodule, *dict;
submodule = Py_InitModule3( "Blender.sys", M_sys_methods, M_sys_doc );
- g_sysmodule = submodule;
-
dict = PyModule_GetDict( submodule );
EXPP_dict_set_item_str( dict, "dirsep", PyString_FromString(DIRSEP_STR) );
diff --git a/source/blender/python/api2_2x/Text.c b/source/blender/python/api2_2x/Text.c
index 308ad094c7b..c8b96fbd97e 100644
--- a/source/blender/python/api2_2x/Text.c
+++ b/source/blender/python/api2_2x/Text.c
@@ -34,15 +34,23 @@
#include "BKE_global.h"
#include "BKE_main.h"
#include "BIF_drawtext.h"
+#include "BIF_screen.h"
#include "BKE_text.h"
+#include "BKE_suggestions.h"
#include "BLI_blenlib.h"
+#include "DNA_screen_types.h"
#include "DNA_space_types.h"
+#include "MEM_guardedalloc.h"
#include "gen_utils.h"
#include "gen_library.h"
#include "../BPY_extern.h"
#define EXPP_TEXT_MODE_FOLLOW TXT_FOLLOW
+/* checks for the group being removed */
+#define TEXT_DEL_CHECK_PY(bpy_text) if (!(bpy_text->text)) return ( EXPP_ReturnPyObjError( PyExc_RuntimeError, "Text has been removed" ) )
+#define TEXT_DEL_CHECK_INT(bpy_text) if (!(bpy_text->text)) return ( EXPP_ReturnIntError( PyExc_RuntimeError, "Text has been removed" ) )
+
/*****************************************************************************/
/* Python API function prototypes for the Text module. */
/*****************************************************************************/
@@ -90,9 +98,22 @@ struct PyMethodDef M_Text_methods[] = {
static PyObject *Text_getFilename( BPy_Text * self );
static PyObject *Text_getNLines( BPy_Text * self );
static PyObject *Text_clear( BPy_Text * self );
+static PyObject *Text_reset( BPy_Text * self );
+static PyObject *Text_readline( BPy_Text * self );
static PyObject *Text_write( BPy_Text * self, PyObject * value );
+static PyObject *Text_insert( BPy_Text * self, PyObject * value );
+static PyObject *Text_delete( BPy_Text * self, PyObject * value );
static PyObject *Text_set( BPy_Text * self, PyObject * args );
-static PyObject *Text_asLines( BPy_Text * self );
+static PyObject *Text_asLines( BPy_Text * self, PyObject * args );
+static PyObject *Text_getCursorPos( BPy_Text * self );
+static PyObject *Text_setCursorPos( BPy_Text * self, PyObject * args );
+static PyObject *Text_getSelectPos( BPy_Text * self );
+static PyObject *Text_setSelectPos( BPy_Text * self, PyObject * args );
+static PyObject *Text_markSelection( BPy_Text * self, PyObject * args );
+static PyObject *Text_suggest( BPy_Text * self, PyObject * args );
+static PyObject *Text_showDocs( BPy_Text * self, PyObject * args );
+
+static void text_reset_internal( BPy_Text * self ); /* internal func */
/*****************************************************************************/
/* Python BPy_Text methods table: */
@@ -109,12 +130,34 @@ static PyMethodDef BPy_Text_methods[] = {
"(str) - Change Text Object name"},
{"clear", ( PyCFunction ) Text_clear, METH_NOARGS,
"() - Clear Text buffer"},
+ {"reset", ( PyCFunction ) Text_reset, METH_NOARGS,
+ "() - Moves the IO pointer back to the start of the Text buffer for reading"},
+ {"readline", ( PyCFunction ) Text_readline, METH_NOARGS,
+ "() - Reads a line of text from the buffer and returns it incrementing the internal IO pointer."},
{"write", ( PyCFunction ) Text_write, METH_O,
"(line) - Append string 'str' to Text buffer"},
+ {"insert", ( PyCFunction ) Text_insert, METH_O,
+ "(line) - Insert string 'str' to Text buffer at cursor location"},
+ {"delete", ( PyCFunction ) Text_delete, METH_O,
+ "(chars) - Deletes a number of characters to the left (chars<0) or right (chars>0)"},
{"set", ( PyCFunction ) Text_set, METH_VARARGS,
"(name, val) - Set attribute 'name' to value 'val'"},
- {"asLines", ( PyCFunction ) Text_asLines, METH_NOARGS,
- "() - Return text buffer as a list of lines"},
+ {"asLines", ( PyCFunction ) Text_asLines, METH_VARARGS,
+ "(start=0, end=nlines) - Return text buffer as a list of lines between start and end"},
+ {"getCursorPos", ( PyCFunction ) Text_getCursorPos, METH_NOARGS,
+ "() - Return cursor position as (row, col) tuple"},
+ {"setCursorPos", ( PyCFunction ) Text_setCursorPos, METH_VARARGS,
+ "(row, col) - Set the cursor position to (row, col)"},
+ {"getSelectPos", ( PyCFunction ) Text_getSelectPos, METH_NOARGS,
+ "() - Return the selection cursor position as (row, col) tuple"},
+ {"setSelectPos", ( PyCFunction ) Text_setSelectPos, METH_VARARGS,
+ "(row, col) - Set the selection cursor position to (row, col)"},
+ {"markSelection", ( PyCFunction ) Text_markSelection, METH_VARARGS,
+ "(group, (r, g, b), flags) - Places a marker over the current selection. Group: number > 0, flags: TMARK_TEMP, TMARK_EDITALL, etc."},
+ {"suggest", ( PyCFunction ) Text_suggest, METH_VARARGS,
+ "(list, prefix='') - Presents a list of suggestions. List is of strings, or tuples. Tuples must be of the form (name, type) where type is one of 'm', 'v', 'f', 'k' for module, variable, function and keyword respectively or '?' for other types"},
+ {"showDocs", ( PyCFunction ) Text_showDocs, METH_VARARGS,
+ "(docs) - Documentation string"},
{NULL, NULL, 0, NULL}
};
@@ -302,7 +345,7 @@ static PyObject *M_Text_unlink( PyObject * self, PyObject * args )
/*****************************************************************************/
PyObject *Text_Init( void )
{
- PyObject *submodule;
+ PyObject *submodule, *dict;
if( PyType_Ready( &Text_Type ) < 0 )
return NULL;
@@ -310,6 +353,19 @@ PyObject *Text_Init( void )
submodule =
Py_InitModule3( "Blender.Text", M_Text_methods, M_Text_doc );
+ dict = PyModule_GetDict( submodule );
+
+#define EXPP_ADDCONST(x) \
+ EXPP_dict_set_item_str(dict, #x, PyInt_FromLong(x))
+
+ /* So, for example:
+ * EXPP_ADDCONST(LEFTMOUSE) becomes
+ * EXPP_dict_set_item_str(dict, "LEFTMOUSE", PyInt_FromLong(LEFTMOUSE))
+ */
+
+ EXPP_ADDCONST( TMARK_TEMP );
+ EXPP_ADDCONST( TMARK_EDITALL );
+
return ( submodule );
}
@@ -327,6 +383,7 @@ PyObject *Text_CreatePyObject( Text * txt )
"couldn't create BPy_Text PyObject" );
pytxt->text = txt;
+ text_reset_internal(pytxt);
return ( PyObject * ) pytxt;
}
@@ -336,6 +393,7 @@ PyObject *Text_CreatePyObject( Text * txt )
/*****************************************************************************/
static PyObject *Text_getFilename( BPy_Text * self )
{
+ TEXT_DEL_CHECK_PY(self);
if( self->text->name )
return PyString_FromString( self->text->name );
@@ -346,7 +404,9 @@ static PyObject *Text_getNLines( BPy_Text * self )
{ /* text->nlines isn't updated in Blender (?) */
int nlines = 0;
TextLine *line;
-
+
+ TEXT_DEL_CHECK_PY(self);
+
line = self->text->lines.first;
while( line ) { /* so we have to count them ourselves */
@@ -363,9 +423,7 @@ static PyObject *Text_clear( BPy_Text * self)
{
int oldstate;
- if( !self->text )
- return EXPP_ReturnPyObjError( PyExc_RuntimeError,
- "This object isn't linked to a Blender Text Object" );
+ TEXT_DEL_CHECK_PY(self);
oldstate = txt_get_undostate( );
txt_set_undostate( 1 );
@@ -376,23 +434,49 @@ static PyObject *Text_clear( BPy_Text * self)
Py_RETURN_NONE;
}
-static PyObject *Text_set( BPy_Text * self, PyObject * args )
+static void text_reset_internal( BPy_Text * self )
{
- int ival;
- char *attr;
+ self->iol = NULL;
+ self->ioc = -1;
+}
- if( !PyArg_ParseTuple( args, "si", &attr, &ival ) )
- return EXPP_ReturnPyObjError( PyExc_TypeError,
- "expected a string and an int as arguments" );
+static PyObject *Text_reset( BPy_Text * self )
+{
+ text_reset_internal(self);
+ Py_RETURN_NONE;
+}
- if( strcmp( "follow_cursor", attr ) == 0 ) {
- if( ival )
- self->text->flags |= EXPP_TEXT_MODE_FOLLOW;
- else
- self->text->flags &= EXPP_TEXT_MODE_FOLLOW;
+static PyObject *Text_readline( BPy_Text * self )
+{
+ PyObject *tmpstr;
+
+ TEXT_DEL_CHECK_PY(self);
+
+ /* Reset */
+ if (!self->iol && self->ioc == -1) {
+ self->iol = self->text->lines.first;
+ self->ioc = 0;
}
- Py_RETURN_NONE;
+ if (!self->iol) {
+ PyErr_SetString( PyExc_StopIteration, "End of buffer reached" );
+ return PyString_FromString( "" );
+ }
+
+ if (self->ioc > self->iol->len) {
+ self->iol = NULL;
+ return EXPP_ReturnPyObjError( PyExc_RuntimeError,
+ "Line length exceeded, text may have changed while reading" );
+ }
+
+ tmpstr = PyString_FromString( self->iol->line + self->ioc );
+ if (self->iol->next)
+ PyString_ConcatAndDel( &tmpstr, PyString_FromString("\n") );
+
+ self->iol = self->iol->next;
+ self->ioc = 0;
+
+ return tmpstr;
}
static PyObject *Text_write( BPy_Text * self, PyObject * value )
@@ -400,48 +484,321 @@ static PyObject *Text_write( BPy_Text * self, PyObject * value )
char *str = PyString_AsString(value);
int oldstate;
- if( !self->text )
- return EXPP_ReturnPyObjError( PyExc_RuntimeError,
- "This object isn't linked to a Blender Text Object" );
-
if( !str )
return EXPP_ReturnPyObjError( PyExc_TypeError,
"expected string argument" );
+ TEXT_DEL_CHECK_PY(self);
+
oldstate = txt_get_undostate( );
txt_insert_buf( self->text, str );
txt_move_eof( self->text, 0 );
txt_set_undostate( oldstate );
+ text_reset_internal( self );
+
+ Py_RETURN_NONE;
+}
+
+static PyObject *Text_insert( BPy_Text * self, PyObject * value )
+{
+ char *str = PyString_AsString(value);
+ int oldstate;
+
+ if( !str )
+ return EXPP_ReturnPyObjError( PyExc_TypeError,
+ "expected string argument" );
+
+ TEXT_DEL_CHECK_PY(self);
+
+ oldstate = txt_get_undostate( );
+ txt_insert_buf( self->text, str );
+ txt_set_undostate( oldstate );
+
+ text_reset_internal( self );
+
Py_RETURN_NONE;
}
-static PyObject *Text_asLines( BPy_Text * self )
+static PyObject *Text_delete( BPy_Text * self, PyObject * value )
+{
+ int num = PyInt_AsLong(value);
+ int oldstate;
+
+ TEXT_DEL_CHECK_PY(self);
+
+ /* zero num is invalid and -1 is an error value */
+ if( !num || (num==-1 && PyErr_Occurred()))
+ return EXPP_ReturnPyObjError( PyExc_TypeError,
+ "expected non-zero int argument" );
+
+ oldstate = txt_get_undostate( );
+ while (num<0) {
+ txt_backspace_char(self->text);
+ num++;
+ }
+ while (num>0) {
+ txt_delete_char(self->text);
+ num--;
+ }
+ txt_set_undostate( oldstate );
+
+ text_reset_internal( self );
+
+ Py_RETURN_NONE;
+}
+
+static PyObject *Text_set( BPy_Text * self, PyObject * args )
+{
+ int ival;
+ char *attr;
+
+ TEXT_DEL_CHECK_PY(self);
+
+ if( !PyArg_ParseTuple( args, "si", &attr, &ival ) )
+ return EXPP_ReturnPyObjError( PyExc_TypeError,
+ "expected a string and an int as arguments" );
+
+ if( strcmp( "follow_cursor", attr ) == 0 ) {
+ if( ival )
+ self->text->flags |= EXPP_TEXT_MODE_FOLLOW;
+ else
+ self->text->flags &= EXPP_TEXT_MODE_FOLLOW;
+ }
+
+ Py_RETURN_NONE;
+}
+
+static PyObject *Text_asLines( BPy_Text * self, PyObject * args )
{
TextLine *line;
PyObject *list, *tmpstr;
+ int start=0, end=-1, i;
- if( !self->text )
- return EXPP_ReturnPyObjError( PyExc_RuntimeError,
- "This object isn't linked to a Blender Text Object" );
+ TEXT_DEL_CHECK_PY(self);
+
+ if( !PyArg_ParseTuple( args, "|ii", &start, &end ) )
+ return EXPP_ReturnPyObjError( PyExc_TypeError,
+ "expected upto two optional ints as arguments" );
+
+ if (start<0)
+ start=0;
line = self->text->lines.first;
+ for (i = 0; i < start && line->next; i++)
+ line= line->next;
+
list = PyList_New( 0 );
if( !list )
return EXPP_ReturnPyObjError( PyExc_MemoryError,
"couldn't create PyList" );
- while( line ) {
+ while( line && (i < end || end == -1) ) {
tmpstr = PyString_FromString( line->line );
PyList_Append( list, tmpstr );
Py_DECREF(tmpstr);
line = line->next;
+ i++;
}
return list;
}
+static PyObject *Text_getCursorPos( BPy_Text * self )
+{
+ Text *text;
+ TextLine *linep;
+ int row, col;
+
+ TEXT_DEL_CHECK_PY(self);
+
+ text = self->text;
+
+ for (row=0,linep=text->lines.first; linep!=text->curl; linep=linep->next)
+ row++;
+ col= text->curc;
+
+ return Py_BuildValue( "ii", row, col );
+}
+
+static PyObject *Text_setCursorPos( BPy_Text * self, PyObject * args )
+{
+ int row, col;
+ SpaceText *st;
+
+ TEXT_DEL_CHECK_PY(self);
+
+ if (!PyArg_ParseTuple(args, "ii", &row, &col))
+ return EXPP_ReturnPyObjError(PyExc_TypeError,
+ "expected two ints as arguments.");
+ if (row<0) row=0;
+ if (col<0) col=0;
+
+ txt_move_to(self->text, row, col, 0);
+
+ if (curarea->spacetype == SPACE_TEXT && (st=curarea->spacedata.first))
+ pop_space_text(st);
+
+ Py_RETURN_NONE;
+}
+
+static PyObject *Text_getSelectPos( BPy_Text * self )
+{
+ Text *text;
+ TextLine *linep;
+ int row, col;
+
+ TEXT_DEL_CHECK_PY(self);
+
+ text = self->text;
+
+ for (row=0,linep=text->lines.first; linep!=text->sell; linep=linep->next)
+ row++;
+ col= text->selc;
+
+ return Py_BuildValue( "ii", row, col );
+}
+
+static PyObject *Text_setSelectPos( BPy_Text * self, PyObject * args )
+{
+ int row, col;
+ SpaceText *st;
+
+ TEXT_DEL_CHECK_PY(self);
+
+ if (!PyArg_ParseTuple(args, "ii", &row, &col))
+ return EXPP_ReturnPyObjError(PyExc_TypeError,
+ "expected two ints as arguments.");
+ if (row<0) row=0;
+ if (col<0) col=0;
+
+ txt_move_to(self->text, row, col, 1);
+
+ if (curarea->spacetype == SPACE_TEXT && (st=curarea->spacedata.first))
+ pop_space_text(st);
+
+ Py_RETURN_NONE;
+}
+
+static PyObject *Text_markSelection( BPy_Text * self, PyObject * args )
+{
+ int group = 0, flags = 0,r, g, b;
+ Text *text;
+ char color[4];
+
+ TEXT_DEL_CHECK_PY(self);
+
+ text = self->text;
+
+ if (!PyArg_ParseTuple(args, "i(iii)i", &group, &r, &g, &b, &flags))
+ return EXPP_ReturnPyObjError(PyExc_TypeError,
+ "expected int, 3-tuple of ints and int as arguments.");
+
+ if (text->curl != text->sell)
+ return EXPP_ReturnPyObjError(PyExc_RuntimeError,
+ "Cannot mark multi-line selection.");
+
+ color[0] = (char) (r&0xFF);
+ color[1] = (char) (g&0xFF);
+ color[2] = (char) (b&0xFF);
+ color[3] = 255;
+
+ group &= 0xFFFF;
+
+ txt_add_marker(text, text->curl, text->curc, text->selc, color, group, flags);
+
+ Py_RETURN_NONE;
+}
+
+static PyObject *Text_suggest( BPy_Text * self, PyObject * args )
+{
+ PyObject *item = NULL, *tup1 = NULL, *tup2 = NULL;
+ PyObject *list = NULL;
+ int list_len, i;
+ char *prefix = NULL, *name, type;
+ SpaceText *st;
+
+ TEXT_DEL_CHECK_PY(self);
+
+ /* Parse args for a list of strings/tuples */
+ if (!PyArg_ParseTuple(args, "O!|s", &PyList_Type, &list, &prefix))
+ return EXPP_ReturnPyObjError(PyExc_TypeError,
+ "expected list of strings or tuples followed by an optional string");
+
+ if (curarea->spacetype != SPACE_TEXT)
+ return EXPP_ReturnPyObjError(PyExc_RuntimeError,
+ "Active space type is not text");
+
+ st = curarea->spacedata.first;
+ if (!st || !st->text)
+ return EXPP_ReturnPyObjError(PyExc_RuntimeError,
+ "Active text area has no Text object");
+
+ texttool_suggest_clear();
+ texttool_text_set_active(st->text);
+ list_len = PyList_Size(list);
+
+ for (i = 0; i < list_len; i++) {
+ item = PyList_GetItem(list, i);
+
+ if (PyString_Check(item)) {
+ name = PyString_AsString(item);
+ type = '?';
+ } else if (PyTuple_Check(item) && PyTuple_GET_SIZE(item) == 2) {
+ tup1 = PyTuple_GetItem(item, 0);
+ tup2 = PyTuple_GetItem(item, 1);
+ if (PyString_Check(tup1) && PyString_Check(tup2)) {
+ name = PyString_AsString(tup1);
+ type = PyString_AsString(tup2)[0];
+ } else
+ return EXPP_ReturnPyObjError(PyExc_AttributeError,
+ "list must contain tuples of two strings only: (name, type)" );
+ } else
+ return EXPP_ReturnPyObjError(PyExc_AttributeError,
+ "list must contain only individual strings or tuples of size 2" );
+
+ if (!strlen(name) || (type!='m' && type!='v' && type!='f' && type!='k' && type!='?'))
+ return EXPP_ReturnPyObjError(PyExc_AttributeError,
+ "names must be non-empty and types in ['m', 'v', 'f', 'k', '?']" );
+
+ texttool_suggest_add(name, type);
+ }
+ if (!prefix)
+ prefix = "";
+ texttool_suggest_prefix(prefix);
+ scrarea_queue_redraw(curarea);
+
+ Py_RETURN_NONE;
+}
+
+static PyObject *Text_showDocs( BPy_Text * self, PyObject * args )
+{
+ char *docs;
+ SpaceText *st;
+
+ TEXT_DEL_CHECK_PY(self);
+
+ if (!PyArg_ParseTuple(args, "s", &docs))
+ return EXPP_ReturnPyObjError( PyExc_TypeError,
+ "expected a string as argument" );
+
+ if (curarea->spacetype != SPACE_TEXT)
+ return EXPP_ReturnPyObjError(PyExc_RuntimeError,
+ "Active space type is not text");
+
+ st = curarea->spacedata.first;
+ if (!st || !st->text)
+ return EXPP_ReturnPyObjError(PyExc_RuntimeError,
+ "Active text area has no Text object");
+
+ texttool_text_set_active(st->text);
+ texttool_docs_show(docs);
+ scrarea_queue_redraw(curarea);
+
+ Py_RETURN_NONE;
+}
+
/*****************************************************************************/
/* Function: Text_compare */
/* Description: This is a callback function for the BPy_Text type. It */
@@ -474,6 +831,7 @@ static PyObject *Text_repr( BPy_Text * self )
/*****************************************************************************/
static PyObject *Text_getMode(BPy_Text * self)
{
+ TEXT_DEL_CHECK_PY(self);
return PyInt_FromLong( self->text->flags );
}
diff --git a/source/blender/python/api2_2x/Text.h b/source/blender/python/api2_2x/Text.h
index 0c5e2607f03..73943ddb9cd 100644
--- a/source/blender/python/api2_2x/Text.h
+++ b/source/blender/python/api2_2x/Text.h
@@ -41,6 +41,8 @@ extern PyTypeObject Text_Type;
typedef struct {
PyObject_HEAD
Text * text; /* libdata must be second */
+ TextLine * iol; /* current line being read or NULL if reset */
+ int ioc; /* character offset in line being read */
} BPy_Text;
PyObject *Text_Init( void );
diff --git a/source/blender/python/api2_2x/Text3d.c b/source/blender/python/api2_2x/Text3d.c
index 5137e989b8d..202195cdcb4 100644
--- a/source/blender/python/api2_2x/Text3d.c
+++ b/source/blender/python/api2_2x/Text3d.c
@@ -132,9 +132,12 @@ static PyObject *Text3d_getAlignment( BPy_Text3d * self );
static PyObject *Text3d_setAlignment( BPy_Text3d * self, PyObject * args );
static PyObject *Text3d_getFont( BPy_Text3d * self );
static PyObject *Text3d_setFont( BPy_Text3d * self, PyObject * args );
+static PyObject *Text3d_getMaterial( BPy_Text3d * self, PyObject * value );
+static PyObject *Text3d_setMaterial( BPy_Text3d * self, PyObject * args );
static PyObject *Text3d_addFrame( BPy_Text3d * self );
static PyObject *Text3d_removeFrame( BPy_Text3d * self, PyObject * args );
+
/*****************************************************************************/
/* Python BPy_Text3d methods table: */
/*****************************************************************************/
@@ -210,6 +213,10 @@ static PyMethodDef BPy_Text3d_methods[] = {
METH_NOARGS, "() - Gets font list for Text3d"},
{"setFont", ( PyCFunction ) Text3d_setFont,
METH_VARARGS, "() - Sets font for Text3d"},
+ {"getMaterial", ( PyCFunction ) Text3d_getMaterial,
+ METH_O, "() - Gets font list for Text3d"},
+ {"setMaterial", ( PyCFunction ) Text3d_setMaterial,
+ METH_VARARGS, "() - Sets font for Text3d"},
{"addFrame", ( PyCFunction ) Text3d_addFrame,
METH_NOARGS, "() - adds a new text frame"},
{"removeFrame", ( PyCFunction ) Text3d_removeFrame,
@@ -1132,6 +1139,45 @@ static PyObject *Text3d_setFont( BPy_Text3d * self, PyObject * args )
Py_RETURN_NONE;
}
+/* todo, add style access, will be almost exact copy of these 2 */
+static PyObject *Text3d_getMaterial( BPy_Text3d * self, PyObject * value )
+{
+ int index = PyInt_AsLong( value );
+ if (index == -1 && PyErr_Occurred())
+ return EXPP_ReturnPyObjError( PyExc_TypeError, "expected a character index" );
+
+ if (index < 0)
+ index = self->curve->len + index;
+
+ if ( index < 0 || index >= self->curve->len )
+ return EXPP_ReturnPyObjError( PyExc_IndexError, "character index out of range" );
+
+ return PyInt_FromLong( self->curve->strinfo[index].mat_nr );
+}
+
+static PyObject *Text3d_setMaterial( BPy_Text3d * self, PyObject * args )
+{
+ int index, mat_nr;
+ if( !PyArg_ParseTuple( args, "ii",&index, &mat_nr) )
+ return NULL; /* Python error is ok */
+
+ if (index < 0)
+ index = self->curve->len + index;
+
+ if ( index < 0 || index >= self->curve->len )
+ return EXPP_ReturnPyObjError( PyExc_IndexError, "character index out of range" );
+
+ if (mat_nr < 0)
+ mat_nr = self->curve->totcol + mat_nr;
+
+ if ( mat_nr < 0 || mat_nr >= self->curve->totcol )
+ return EXPP_ReturnPyObjError( PyExc_IndexError, "material index out of range" );
+
+ self->curve->strinfo[index].mat_nr = mat_nr;
+
+ Py_RETURN_NONE;
+}
+
static PyObject *Text3d_addFrame( BPy_Text3d * self )
{
Curve *cu = self->curve;
diff --git a/source/blender/python/api2_2x/Texture.c b/source/blender/python/api2_2x/Texture.c
index 7ba8ad88ea6..51e1c389528 100644
--- a/source/blender/python/api2_2x/Texture.c
+++ b/source/blender/python/api2_2x/Texture.c
@@ -42,6 +42,7 @@
#include "DNA_material_types.h"
#include "DNA_scene_types.h"
#include "DNA_texture_types.h"
+#include "DNA_world_types.h"
#include "MTex.h"
#include "Image.h"
@@ -1142,6 +1143,11 @@ static PyObject *M_Texture_TexCoDict( void )
PyConstant_Insert(d, "STICK", PyInt_FromLong(TEXCO_STICKY));
PyConstant_Insert(d, "STRESS", PyInt_FromLong(TEXCO_STRESS));
PyConstant_Insert(d, "TANGENT", PyInt_FromLong(TEXCO_TANGENT));
+
+ /* World TexCo Settings */
+ PyConstant_Insert(d, "ANGMAP", PyInt_FromLong(TEXCO_ANGMAP));
+ PyConstant_Insert(d, "HSPHERE", PyInt_FromLong(TEXCO_H_SPHEREMAP));
+ PyConstant_Insert(d, "HTUBE", PyInt_FromLong(TEXCO_H_TUBEMAP));
}
return TexCo;
}
@@ -1195,6 +1201,7 @@ static PyObject *M_Texture_ExtendModesDict( void )
PyConstant_Insert(d, "CLIP", PyInt_FromLong(TEX_CLIP));
PyConstant_Insert(d, "CLIPCUBE", PyInt_FromLong(TEX_CLIPCUBE));
PyConstant_Insert(d, "REPEAT", PyInt_FromLong(TEX_REPEAT));
+ PyConstant_Insert(d, "CHECKER", PyInt_FromLong(TEX_CHECKER));
}
return ExtendModes;
}
@@ -2125,7 +2132,7 @@ static PyObject *Texture_getFlags( BPy_Texture *self )
static PyObject *Texture_getHFracDim( BPy_Texture *self )
{
- return PyInt_FromLong( (long)self->texture->mg_H );
+ return PyFloat_FromDouble( self->texture->mg_H );
}
static PyObject *Texture_getImageFlags( BPy_Texture *self, void *type )
diff --git a/source/blender/python/api2_2x/Window.c b/source/blender/python/api2_2x/Window.c
index fe789fb4811..a4c7802ff34 100644
--- a/source/blender/python/api2_2x/Window.c
+++ b/source/blender/python/api2_2x/Window.c
@@ -1209,7 +1209,7 @@ static PyObject *M_Window_QHandle( PyObject * self, PyObject * args )
if( sa ) {
BWinEvent evt;
- short do_redraw = 0, do_change = 0;
+ short do_redraw = 0;
if( sa != curarea || sa->win != mywinget( ) ) {
oldsa = curarea;
@@ -1221,7 +1221,6 @@ static PyObject *M_Window_QHandle( PyObject * self, PyObject * args )
do_redraw = 1;
} else if( evt.event == CHANGED ) {
sa->win_swap = 0;
- do_change = 1;
do_redraw = 1;
} else {
scrarea_do_winhandle( sa, &evt );
@@ -1249,9 +1248,10 @@ static PyObject *M_Window_TestBreak( PyObject * self )
static PyObject *M_Window_GetMouseCoords( PyObject * self )
{
- short mval[2];
+ short mval[2] = {0, 0};
- getmouse( mval );
+ if (!G.background)
+ getmouse( mval );
return Py_BuildValue( "hh", mval[0], mval[1] );
}
@@ -1283,16 +1283,12 @@ static PyObject *M_Window_SetMouseCoords( PyObject * self, PyObject * args )
static PyObject *M_Window_GetMouseButtons( PyObject * self )
{
- short mbut = get_mbut( );
-
- return Py_BuildValue( "h", mbut );
+ return PyInt_FromLong(G.background ? 0 : (int)get_mbut() );
}
static PyObject *M_Window_GetKeyQualifiers( PyObject * self )
{
- short qual = get_qual( );
-
- return Py_BuildValue( "h", qual );
+ return PyInt_FromLong( (int)get_qual() );
}
static PyObject *M_Window_SetKeyQualifiers( PyObject * self, PyObject * args )
diff --git a/source/blender/python/api2_2x/World.c b/source/blender/python/api2_2x/World.c
index 6021f8552ad..354d8cda0b7 100644
--- a/source/blender/python/api2_2x/World.c
+++ b/source/blender/python/api2_2x/World.c
@@ -43,17 +43,22 @@
#include "World.h" /*This must come first*/
#include "DNA_scene_types.h" /* for G.scene */
+#include "DNA_userdef_types.h"
#include "BKE_global.h"
#include "BKE_world.h"
#include "BKE_main.h"
#include "BKE_library.h"
+#include "BKE_texture.h"
#include "BLI_blenlib.h"
#include "BSE_editipo.h"
+#include "BIF_keyframing.h"
#include "BIF_space.h"
#include "mydevice.h"
#include "Ipo.h"
+#include "MTex.h"
#include "gen_utils.h"
#include "gen_library.h"
+#include "MEM_guardedalloc.h"
#define IPOKEY_ZENITH 0
#define IPOKEY_HORIZON 1
@@ -99,6 +104,8 @@ static PyObject *World_getScriptLinks( BPy_World * self, PyObject * value );
static PyObject *World_addScriptLink( BPy_World * self, PyObject * args );
static PyObject *World_clearScriptLinks( BPy_World * self, PyObject * args );
static PyObject *World_setCurrent( BPy_World * self );
+static PyObject *World_getTextures( BPy_World * self );
+static int World_setTextures( BPy_World * self, PyObject * value );
static PyObject *World_copy( BPy_World * self );
@@ -250,6 +257,9 @@ static PyGetSetDef BPy_World_getseters[] = {
"world mist settings", NULL},
{"ipo", (getter)World_getIpo, (setter)World_setIpo,
"world ipo", NULL},
+ {"textures", (getter)World_getTextures, (setter)World_setTextures,
+ "The World's texture list as a tuple",
+ NULL},
{NULL,NULL,NULL,NULL,NULL} /* Sentinel */
};
@@ -979,7 +989,7 @@ World *World_FromPyObject( PyObject * py_obj )
static PyObject *World_insertIpoKey( BPy_World * self, PyObject * args )
{
- int key = 0, map;
+ int key = 0, flag = 0, map;
if( !PyArg_ParseTuple( args, "i", &( key ) ) )
return ( EXPP_ReturnPyObjError( PyExc_AttributeError,
@@ -987,38 +997,41 @@ static PyObject *World_insertIpoKey( BPy_World * self, PyObject * args )
map = texchannel_to_adrcode(self->world->texact);
+ /* flag should be initialised with the 'autokeying' flags like for normal keying */
+ if (IS_AUTOKEY_FLAG(INSERTNEEDED)) flag |= INSERTKEY_NEEDED;
+
if(key == IPOKEY_ZENITH) {
- insertkey((ID *)self->world, ID_WO, NULL, NULL, WO_ZEN_R, 0);
- insertkey((ID *)self->world, ID_WO, NULL, NULL, WO_ZEN_G, 0);
- insertkey((ID *)self->world, ID_WO, NULL, NULL, WO_ZEN_B, 0);
+ insertkey((ID *)self->world, ID_WO, NULL, NULL, WO_ZEN_R, flag);
+ insertkey((ID *)self->world, ID_WO, NULL, NULL, WO_ZEN_G, flag);
+ insertkey((ID *)self->world, ID_WO, NULL, NULL, WO_ZEN_B, flag);
}
if(key == IPOKEY_HORIZON) {
- insertkey((ID *)self->world, ID_WO, NULL, NULL, WO_HOR_R, 0);
- insertkey((ID *)self->world, ID_WO, NULL, NULL, WO_HOR_G, 0);
- insertkey((ID *)self->world, ID_WO, NULL, NULL, WO_HOR_B, 0);
+ insertkey((ID *)self->world, ID_WO, NULL, NULL, WO_HOR_R, flag);
+ insertkey((ID *)self->world, ID_WO, NULL, NULL, WO_HOR_G, flag);
+ insertkey((ID *)self->world, ID_WO, NULL, NULL, WO_HOR_B, flag);
}
if(key == IPOKEY_MIST) {
- insertkey((ID *)self->world, ID_WO, NULL, NULL, WO_MISI, 0);
- insertkey((ID *)self->world, ID_WO, NULL, NULL, WO_MISTDI, 0);
- insertkey((ID *)self->world, ID_WO, NULL, NULL, WO_MISTSTA, 0);
- insertkey((ID *)self->world, ID_WO, NULL, NULL, WO_MISTHI, 0);
+ insertkey((ID *)self->world, ID_WO, NULL, NULL, WO_MISI, flag);
+ insertkey((ID *)self->world, ID_WO, NULL, NULL, WO_MISTDI, flag);
+ insertkey((ID *)self->world, ID_WO, NULL, NULL, WO_MISTSTA, flag);
+ insertkey((ID *)self->world, ID_WO, NULL, NULL, WO_MISTHI, flag);
}
if(key == IPOKEY_STARS) {
- insertkey((ID *)self->world, ID_WO, NULL, NULL, WO_STAR_R, 0);
- insertkey((ID *)self->world, ID_WO, NULL, NULL, WO_STAR_G, 0);
- insertkey((ID *)self->world, ID_WO, NULL, NULL, WO_STAR_B, 0);
- insertkey((ID *)self->world, ID_WO, NULL, NULL, WO_STARDIST, 0);
- insertkey((ID *)self->world, ID_WO, NULL, NULL, WO_STARSIZE, 0);
+ insertkey((ID *)self->world, ID_WO, NULL, NULL, WO_STAR_R, flag);
+ insertkey((ID *)self->world, ID_WO, NULL, NULL, WO_STAR_G, flag);
+ insertkey((ID *)self->world, ID_WO, NULL, NULL, WO_STAR_B, flag);
+ insertkey((ID *)self->world, ID_WO, NULL, NULL, WO_STARDIST, flag);
+ insertkey((ID *)self->world, ID_WO, NULL, NULL, WO_STARSIZE, flag);
}
if(key == IPOKEY_OFFSET) {
- insertkey((ID *)self->world, ID_WO, NULL, NULL, map+MAP_OFS_X, 0);
- insertkey((ID *)self->world, ID_WO, NULL, NULL, map+MAP_OFS_Y, 0);
- insertkey((ID *)self->world, ID_WO, NULL, NULL, map+MAP_OFS_Z, 0);
+ insertkey((ID *)self->world, ID_WO, NULL, NULL, map+MAP_OFS_X, flag);
+ insertkey((ID *)self->world, ID_WO, NULL, NULL, map+MAP_OFS_Y, flag);
+ insertkey((ID *)self->world, ID_WO, NULL, NULL, map+MAP_OFS_Z, flag);
}
if(key == IPOKEY_SIZE) {
- insertkey((ID *)self->world, ID_WO, NULL, NULL, map+MAP_SIZE_X, 0);
- insertkey((ID *)self->world, ID_WO, NULL, NULL, map+MAP_SIZE_Y, 0);
- insertkey((ID *)self->world, ID_WO, NULL, NULL, map+MAP_SIZE_Z, 0);
+ insertkey((ID *)self->world, ID_WO, NULL, NULL, map+MAP_SIZE_X, flag);
+ insertkey((ID *)self->world, ID_WO, NULL, NULL, map+MAP_SIZE_Y, flag);
+ insertkey((ID *)self->world, ID_WO, NULL, NULL, map+MAP_SIZE_Z, flag);
}
allspace(REMAKEIPO, 0);
@@ -1029,3 +1042,97 @@ static PyObject *World_insertIpoKey( BPy_World * self, PyObject * args )
Py_RETURN_NONE;
}
+
+static PyObject *World_getTextures( BPy_World * self )
+{
+ int i;
+ PyObject *tuple;
+
+ /* build a texture list */
+ tuple = PyTuple_New( MAX_MTEX );
+ if( !tuple )
+ return EXPP_ReturnPyObjError( PyExc_MemoryError,
+ "couldn't create PyTuple" );
+
+ for( i = 0; i < MAX_MTEX; ++i ) {
+ struct MTex *mtex = self->world->mtex[i];
+ if( mtex ) {
+ PyTuple_SET_ITEM( tuple, i, MTex_CreatePyObject( mtex, ID_WO ) );
+ } else {
+ Py_INCREF( Py_None );
+ PyTuple_SET_ITEM( tuple, i, Py_None );
+ }
+ }
+
+ return tuple;
+}
+
+static int World_setTextures( BPy_World * self, PyObject * value )
+{
+ int i;
+
+ if( !PyList_Check( value ) && !PyTuple_Check( value ) )
+ return EXPP_ReturnIntError( PyExc_TypeError,
+ "expected tuple or list of integers" );
+
+ /* don't allow more than MAX_MTEX items */
+ if( PySequence_Size(value) > MAX_MTEX )
+ return EXPP_ReturnIntError( PyExc_AttributeError,
+ "size of sequence greater than number of allowed textures" );
+
+ /* get a fast sequence; in Python 2.5, this just return the original
+ * list or tuple and INCREFs it, so we must DECREF */
+ value = PySequence_Fast( value, "" );
+
+ /* check the list for valid entries */
+ for( i= 0; i < PySequence_Size(value) ; ++i ) {
+ PyObject *item = PySequence_Fast_GET_ITEM( value, i );
+ if( item == Py_None || ( BPy_MTex_Check( item ) &&
+ ((BPy_MTex *)item)->type == ID_WO ) ) {
+ continue;
+ } else {
+ Py_DECREF(value);
+ return EXPP_ReturnIntError( PyExc_TypeError,
+ "expected tuple or list containing world MTex objects and NONE" );
+ }
+ }
+
+ /* for each MTex object, copy to this structure */
+ for( i= 0; i < PySequence_Size(value) ; ++i ) {
+ PyObject *item = PySequence_Fast_GET_ITEM( value, i );
+ struct MTex *mtex = self->world->mtex[i];
+ if( item != Py_None ) {
+ BPy_MTex *obj = (BPy_MTex *)item;
+
+ /* if MTex is already at this location, just skip it */
+ if( obj->mtex == mtex ) continue;
+
+ /* create a new entry if needed, otherwise update reference count
+ * for texture that is being replaced */
+ if( !mtex )
+ mtex = self->world->mtex[i] = add_mtex( );
+ else
+ mtex->tex->id.us--;
+
+ /* copy the data */
+ mtex->tex = obj->mtex->tex;
+ id_us_plus( &mtex->tex->id );
+ mtex->texco = obj->mtex->texco;
+ mtex->mapto = obj->mtex->mapto;
+ }
+ }
+
+ /* now go back and free any entries now marked as None */
+ for( i= 0; i < PySequence_Size(value) ; ++i ) {
+ PyObject *item = PySequence_Fast_GET_ITEM( value, i );
+ struct MTex *mtex = self->world->mtex[i];
+ if( item == Py_None && mtex ) {
+ mtex->tex->id.us--;
+ MEM_freeN( mtex );
+ self->world->mtex[i] = NULL;
+ }
+ }
+
+ Py_DECREF(value);
+ return 0;
+}
diff --git a/source/blender/python/api2_2x/bpy_data.c b/source/blender/python/api2_2x/bpy_data.c
index 4705c1bdd03..d3499a79874 100644
--- a/source/blender/python/api2_2x/bpy_data.c
+++ b/source/blender/python/api2_2x/bpy_data.c
@@ -243,7 +243,7 @@ static PyObject *LibBlockSeq_nextIter( BPy_LibBlockSeq * self )
return object;
}
-PyObject *LibBlockSeq_getActive(BPy_LibBlockSeq *self)
+static PyObject *LibBlockSeq_getActive(BPy_LibBlockSeq *self)
{
switch (self->type) {
case ID_SCE:
@@ -263,9 +263,12 @@ PyObject *LibBlockSeq_getActive(BPy_LibBlockSeq *self)
}
break;
case ID_TXT: {
- SpaceText *st= curarea->spacedata.first;
+ SpaceText *st = NULL;
- if (st->spacetype!=SPACE_TEXT || st->text==NULL) {
+ if (curarea)
+ st = curarea->spacedata.first;
+
+ if (st==NULL || st->spacetype!=SPACE_TEXT || st->text==NULL) {
Py_RETURN_NONE;
} else {
return Text_CreatePyObject( st->text );
@@ -330,9 +333,15 @@ static int LibBlockSeq_setActive(BPy_LibBlockSeq *self, PyObject *value)
return EXPP_ReturnIntError(PyExc_TypeError,
"Must be a text" );
} else {
- SpaceText *st= curarea->spacedata.first;
+ SpaceText *st= NULL;
Text *data = ((BPy_Text *)value)->text;
+ if (curarea==NULL) {
+ return 0;
+ } else {
+ st= curarea->spacedata.first;
+ }
+
if( !data )
return EXPP_ReturnIntError( PyExc_RuntimeError,
"This object isn't linked to a Blender Text Object" );
@@ -373,7 +382,7 @@ static int LibBlockSeq_setTag(BPy_LibBlockSeq *self, PyObject *value)
/* New Data, internal functions */
-Mesh *add_mesh__internal(char *name)
+static Mesh *add_mesh__internal(char *name)
{
Mesh *mesh = add_mesh(name); /* doesn't return NULL now, but might someday */
@@ -444,8 +453,7 @@ PyObject *LibBlockSeq_new(BPy_LibBlockSeq *self, PyObject * args, PyObject *kwd)
return EXPP_ReturnPyObjError( PyExc_IOError,
"couldn't create pyobject on load, unknown error" );
if (name) {
- ID *id = ((BPy_GenericLib *)ret)->id;
- rename_id( id, name );
+ rename_id( ((BPy_GenericLib *)ret)->id, name );
}
return ret;
}
@@ -590,7 +598,7 @@ PyObject *LibBlockSeq_new(BPy_LibBlockSeq *self, PyObject * args, PyObject *kwd)
}
-PyObject *LibBlockSeq_unlink(BPy_LibBlockSeq *self, PyObject * value)
+static PyObject *LibBlockSeq_unlink(BPy_LibBlockSeq *self, PyObject * value)
{
switch (self->type) {
case ID_SCE:
@@ -781,15 +789,12 @@ PyTypeObject LibBlockSeq_Type = {
PyObject * Data_Init( void )
{
PyObject *module;
- PyObject *dict;
-
PyType_Ready( &LibBlockSeq_Type );
PyType_Ready( &Config_Type );
/*submodule = Py_InitModule3( "Blender.Main", NULL, M_Main_doc );*/
module = Py_InitModule3( "bpy.data", NULL, "The bpy.data submodule" );
- dict = PyModule_GetDict( module );
/* Python Data Types */
PyModule_AddObject( module, "scenes", LibBlockSeq_CreatePyObject(NULL, ID_SCE) );
diff --git a/source/blender/python/api2_2x/constant.c b/source/blender/python/api2_2x/constant.c
index 7cf6a83e602..2bf1d189961 100644
--- a/source/blender/python/api2_2x/constant.c
+++ b/source/blender/python/api2_2x/constant.c
@@ -37,19 +37,19 @@ PyTypeObject constant_Type;
//------------------METHOD IMPLEMENTATIONS-----------------------------
//------------------------constant.items()
//Returns a list of key:value pairs like dict.items()
-PyObject* constant_items(BPy_constant *self)
+static PyObject* constant_items(BPy_constant *self)
{
return PyDict_Items(self->dict);
}
//------------------------constant.keys()
//Returns a list of keys like dict.keys()
-PyObject* constant_keys(BPy_constant *self)
+static PyObject* constant_keys(BPy_constant *self)
{
return PyDict_Keys(self->dict);
}
//------------------------constant.values()
//Returns a list of values like dict.values()
-PyObject* constant_values(BPy_constant *self)
+static PyObject* constant_values(BPy_constant *self)
{
return PyDict_Values(self->dict);
}
diff --git a/source/blender/python/api2_2x/doc/API_intro.py b/source/blender/python/api2_2x/doc/API_intro.py
index 2960d8ed1d2..192c9710ea2 100644
--- a/source/blender/python/api2_2x/doc/API_intro.py
+++ b/source/blender/python/api2_2x/doc/API_intro.py
@@ -61,6 +61,14 @@ The Blender Python API Reference
- L{World}
- L{sys<Sys>}
+ Additional information:
+ -----------------------
+ - L{API_related}:
+ - Calling scripts from command line
+ - Script links and space handlers
+ - How to register scripts in menus
+ - Recommended ways to document and support configuration options
+
Introduction:
=============
diff --git a/source/blender/python/api2_2x/doc/API_related.py b/source/blender/python/api2_2x/doc/API_related.py
index 4e29f95e76d..dcd2bdd1e60 100644
--- a/source/blender/python/api2_2x/doc/API_related.py
+++ b/source/blender/python/api2_2x/doc/API_related.py
@@ -226,6 +226,7 @@ Introduction:
import Blender
from Blender import Draw
evt = Blender.event
+ val = Blender.eventValue
return_it = False
if evt == Draw.LEFTMOUSE:
@@ -233,7 +234,7 @@ Introduction:
elif evt == Draw.AKEY:
print "Swallowing an 'a' character"
else:
- print "Let the 3D View itself process this event:", evt
+ print "Let the 3D View itself process this event: %d with value %d" % (evt, val)
return_it = True
# if Blender should not process itself the passed event:
@@ -249,8 +250,14 @@ Introduction:
tells what space this handler belongs to and the handler's type
(EVENT, DRAW);
- B{event}:
- - EVENT handlers: an input event (check keys and mouse events in L{Draw})
- to be processed or ignored.
+ - EVENT handlers: an input event (check keys and mouse events in
+ L{Draw}) to be processed or ignored;
+ - DRAW handlers: 0 always;
+ - B{eventValue}:
+ - EVENT handlers: the event value, it indicates mouse button or key
+ presses (since we don't pass releases) as 1 and mouse movements
+ (Draw.MOUSE.X and Draw.MOUSE.Y) as the current x or y coordinate,
+ for example;
- DRAW handlers: 0 always.
B{Guidelines (important)}:
diff --git a/source/blender/python/api2_2x/doc/Blender.py b/source/blender/python/api2_2x/doc/Blender.py
index 964b8f70e8b..9d89cae7137 100644
--- a/source/blender/python/api2_2x/doc/Blender.py
+++ b/source/blender/python/api2_2x/doc/Blender.py
@@ -10,8 +10,8 @@
"""
The main Blender module.
-B{New}: L{Run}, L{UpdateMenus}, new options to L{Get}, L{ShowHelp},
-L{SpaceHandlers} dictionary.
+B{New}: new var L{eventValue} for space handlers, L{Run}, L{UpdateMenus},
+new options to L{Get}, L{ShowHelp}, L{SpaceHandlers} dictionary.
L{UnpackModes} dictionary.
Blender
@@ -34,7 +34,11 @@ Blender
- for normal L{GUI<Draw.Register>} scripts I{during the events callback},
it holds the ascii value of the current event, if it is a valid one.
Users interested in this should also check the builtin 'ord' and 'chr'
- Python functions.
+ Python functions.
+@type eventValue: int
+@var eventValue: used only for EVENT space handlers, it holds the event value:
+ - for mouse button and key presses it's 1, for mouse movement
+ (Draw.MOUSEX and Draw.MOUSEY) it has the new x or y coordinate, resp.
@type mode: string
@var mode: Blender's current mode:
- 'interactive': normal mode, with an open window answering to user input;
diff --git a/source/blender/python/api2_2x/doc/Draw.py b/source/blender/python/api2_2x/doc/Draw.py
index 18234754315..97e22797902 100644
--- a/source/blender/python/api2_2x/doc/Draw.py
+++ b/source/blender/python/api2_2x/doc/Draw.py
@@ -357,12 +357,14 @@ def PupTreeMenu( menu ):
"""
Create a popup menu tree.
- Each item in the list is a menu item - (str, event), separator - None or submenu - (str, [...]).
+ Each item in the list is: a menu item - (str, event); a separator - None;
+ or submenu - (str, [...]).
- Submenus list uses the same syntax as the menu list.
+ Submenus list uses the same syntax as the menu list. To add a title to the
+ main menu, end the first entry str with '%t' - the event is ignored.
Example::
- result = Draw.PupTreeMenu( [ ("Menu Item 1", 10), ("Menu Item 2", 12), ("SubMenu", [("Menu Item 3", 100), ("MenuItem4", 101) ] ) ] )
+ result = Draw.PupTreeMenu( [ ("Title%t", 0), ("Menu Item 1", 10), ("Menu Item 2", 12), ("SubMenu", [("Menu Item 3", 100), ("MenuItem4", 101) ] ) ] )
@type menu: string
@param menu: A menu list
diff --git a/source/blender/python/api2_2x/doc/Geometry.py b/source/blender/python/api2_2x/doc/Geometry.py
index f882f4b3b57..5d507956cdb 100644
--- a/source/blender/python/api2_2x/doc/Geometry.py
+++ b/source/blender/python/api2_2x/doc/Geometry.py
@@ -59,8 +59,16 @@ def PointInTriangle2D(pt, tri_pt1, tri_pt2, tri_pt3):
"""
Takes 4 vectors (one for the test point and 3 for the triangle)
This is a 2d function so only X and Y are used, Z and W will be ignored.
- @rtype: bool
- @return: True or False depending on the points intersection.
+ @rtype: int
+ @return: 1 for a clockwise intersection, -1 for counter clockwise intersection, 0 when there is no intersection.
+ """
+
+def PointInQuad2D(pt, quad_pt1, quad_pt2, quad_pt3):
+ """
+ Takes 5 vectors (one for the test point and 5 for the quad)
+ This is a 2d function so only X and Y are used, Z and W will be ignored.
+ @rtype: int
+ @return: 1 for a clockwise intersection, -1 for counter clockwise intersection, 0 when there is no intersection.
"""
def BoxPack2D(boxlist):
diff --git a/source/blender/python/api2_2x/doc/Group.py b/source/blender/python/api2_2x/doc/Group.py
index 6bd6e105ec3..1266d2efb6e 100644
--- a/source/blender/python/api2_2x/doc/Group.py
+++ b/source/blender/python/api2_2x/doc/Group.py
@@ -105,6 +105,8 @@ class Group:
This object gives access to Groups in Blender.
@ivar layers: Layer bitmask for this group.
@type layers: int
+ @ivar dupliOffset: Object offset when instanced as a dupligroup
+ @type dupliOffset: vector
@ivar objects: Objects that this group uses.
This is a sequence with-list like access so use list(grp.objects) if you need to use a list (where grp is a group).
The groups objects can be set by assigning a list or iterator of objects to the groups objects.
diff --git a/source/blender/python/api2_2x/doc/Lamp.py b/source/blender/python/api2_2x/doc/Lamp.py
index a7a1fb94620..162d94ccff3 100644
--- a/source/blender/python/api2_2x/doc/Lamp.py
+++ b/source/blender/python/api2_2x/doc/Lamp.py
@@ -161,6 +161,8 @@ class Lamp:
@type type: int
@ivar falloffType: Lamp falloff type. See L{Falloffs} for values.
@type falloffType: int
+ @type textures: a tuple of Blender MTex objects.
+ @ivar textures: The Lamp's texture list. Empty texture channels contains None.
@warning: Most member variables assume values in some [Min, Max] interval.
When trying to set them, the given parameter will be clamped to lie in
diff --git a/source/blender/python/api2_2x/doc/Material.py b/source/blender/python/api2_2x/doc/Material.py
index a3496164cd1..fa6a9f7047a 100644
--- a/source/blender/python/api2_2x/doc/Material.py
+++ b/source/blender/python/api2_2x/doc/Material.py
@@ -80,6 +80,35 @@ Example::
- SPEC_BLINN - Make Material use the Blinn specular shader.
- SPEC_TOON - Make Material use the toon specular shader.
- SPEC_WARDISO - Make Material use the Ward-iso specular shader.
+
+@type ColorbandMethod: readonly dictionary
+@var ColorbandMethod: The available Colorband mixing methods.
+ - ADD - Make Material use the Add method.
+ - BLEND - Make Material use the Blend/Mix method.
+ - BURN - Make Material use the Burn method.
+ - COLOR - Make Material use the Color method.
+ - DARK - Make Material use the Darken method.
+ - DIFF - Make Material use the Difference method.
+ - DIV - Make Material use the Divide method.
+ - DODGE - Make Material use the Dodge method.
+ - HUE - Make Material use the Hue method.
+ - LIGHT - Make Material use the Lighten method.
+ - MIX - Make Material use the Blend/Mix method.
+ - MULT - Make Material use the Multiply method.
+ - OVERLAY - Make Material use the Overlay method.
+ - SAT - Make Material use the Saturation method.
+ - SCREEN - Make Material use the Screen method.
+ - SUB - Make Material use the Substract method.
+ - VAL - Make Material use the Value method.
+
+@type ColorbandInput: readonly dictionary
+@var ColorbandInput: The available Colorband Input sources.
+ - ENERGY - Make Material use the Energy input.
+ - NORMAL - Make Material use the Normal input.
+ - RESULT - Make Material use the Result input.
+ - SHADER - Make Material use the Shader input.
+
+
"""
def New (name = 'Mat'):
@@ -323,7 +352,46 @@ class Material:
each color a list of 5 floats [0 - 1], [r,g,b,a,pos].
The colorband can have between 1 and 31 colors.
@type colorbandSpecular: list
-
+ @ivar colorbandDiffuseInput: Material Diffuse colorband input.
+ The integer result must be compared with L{ColorbandInput}
+ dictionary.
+ @type colorbandDiffuseInput: int
+ @ivar colorbandDiffuseMethod: Material Diffuse colorband method.
+ The integer result must be compared with L{ColorbandMethod}
+ dictionary.
+ @type colorbandDiffuseMethod: int
+ @ivar colorbandDiffuseFactor: Material Diffuse colorband factor.
+ Value is clamped to the range [0.0,1.0].
+ @type colorbandDiffuseFactor: float
+ @ivar colorbandSpecularInput: Material Specular colorband input.
+ The integer result must be compared with L{ColorbandInput}
+ dictionary.
+ @type colorbandSpecularInput: int
+ @ivar colorbandSpecularMethod: Material Specular colorband method.
+ The integer result must be compared with L{ColorbandMethod}
+ dictionary.
+ @type colorbandSpecularMethod: int
+ @ivar colorbandSpecularFactor: Material Specular colorband factor.
+ Value is clamped to the range [0.0,1.0].
+ @type colorbandSpecularFactor: float
+ @type enabledTextures: list of integers
+ @ivar enabledTextures: The texture channels enabled in this material.
+ The attribute returns is list of integers in the range [0, 9], each
+ number representing the respective enabled MTex entry (see
+ L{getTextures()<getTextures>}). Enabling is done by assigning
+ a list of ints or an empty list. Attempting to enable a channel
+ which does not have a texture assigned to it will result in a
+ ValueError exception.
+ Example::
+ mat.enabledTextures = [] # no texture channels are enabled
+ mat.enabledTextures = [0, 6] # texture channels 0 and 6 are enabled
+ ch = mat.enabledTextures
+ ch.append(4)
+ mat.enabledTextures = ch
+ print mat.enabledTextures # will print: [0, 4, 6]
+
+ @type textures: a tuple of Blender MTex objects.
+ @ivar textures: the Material's Texture list. Empty texture channels contains None.
@ivar enableSSS: If True, subsurface scattering will be rendered on this material.
@type enableSSS: bool
@ivar sssScale: If True, subsurface scattering will be rendered on this material.
@@ -1010,7 +1078,7 @@ class Material:
def setTexture(index, texture, texco, mapto):
"""
- Assign a Blender Texture object to slot number 'number'.
+ Assign a Blender Texture object to channel number 'number'.
@type index: int
@param index: material's texture index in [0, 9].
@type texture: Blender Texture
@@ -1033,7 +1101,7 @@ class Material:
Get this Material's Texture list.
@rtype: list of MTex
@return: a list of Blender MTex objects. None is returned for each empty
- texture slot.
+ texture channel.
"""
def getScriptLinks (event):
@@ -1070,5 +1138,12 @@ class Material:
@return: a copy of this material
"""
+ def freeNodes ():
+ """
+ Removes the node tree from this material.
+ @rtype: bool
+ @return: true if nodes were freed from this material.
+ """
+
import id_generics
Material.__doc__ += id_generics.attributes
diff --git a/source/blender/python/api2_2x/doc/Mathutils.py b/source/blender/python/api2_2x/doc/Mathutils.py
index 8b0c41b9a69..524d1fb6d4c 100644
--- a/source/blender/python/api2_2x/doc/Mathutils.py
+++ b/source/blender/python/api2_2x/doc/Mathutils.py
@@ -521,6 +521,15 @@ class Vector:
@return: Return a quaternion rotation from the vector and the track and up axis.
"""
+ def reflect(mirror):
+ """
+ Return the reflection vector from the mirror vector argument.
+ @type mirror: Vector object
+ @param mirror: This vector could be a normal from the reflecting surface.
+ @rtype: Vector object matching the size of this vector.
+ @return: The reflected vector.
+ """
+
class Euler:
"""
The Euler object
diff --git a/source/blender/python/api2_2x/doc/Mesh.py b/source/blender/python/api2_2x/doc/Mesh.py
index 4a53f869283..e48f41e8f9c 100644
--- a/source/blender/python/api2_2x/doc/Mesh.py
+++ b/source/blender/python/api2_2x/doc/Mesh.py
@@ -69,6 +69,7 @@ done once.
- BILLBOARD - always orient after camera.
- HALO - halo face, always point to camera.
- DYNAMIC - respond to collisions.
+ - ALPHASORT - game engine sorts these faces only.
- INVISIBLE - invisible face.
- LIGHT - dynamic lighting.
- OBCOL - use object color instead of vertex colors.
@@ -635,7 +636,7 @@ class MFaceSeq:
This object provides sequence and iterator access to the mesh's faces.
"""
- def extend(vertseq,ignoreDups=True,indexList=True):
+ def extend(vertseq,ignoreDups=True,indexList=True,smooth=False):
"""
Add zero or more faces and edges to the mesh. Faces which already exist
in the mesh, or faces which contain the same vertex multiple times are
diff --git a/source/blender/python/api2_2x/doc/Modifier.py b/source/blender/python/api2_2x/doc/Modifier.py
index 1d7d2e121c9..47f72e566b2 100644
--- a/source/blender/python/api2_2x/doc/Modifier.py
+++ b/source/blender/python/api2_2x/doc/Modifier.py
@@ -93,7 +93,12 @@ Example::
- SCALE_VEC - Used for Array only (3d Vector)
- MERGE_DIST - Used for Array only (float)
+ - INVERT_VERTGROUP - Used for Armature only (bool)
- ENVELOPES - Used for Armature only (bool)
+ - VGROUPS - Used for Armature only (bool)
+ - QUATERNION - Used for Armature only (bool)
+ - B_BONE_REST - Used for Armature only (bool)
+ - MULTIMODIFIER - Used for Armature only (bool)
- START - Used for Build only (int)
- SEED - Used for Build only (int)
diff --git a/source/blender/python/api2_2x/doc/Object.py b/source/blender/python/api2_2x/doc/Object.py
index 2e4850aeb14..49cb14d1e66 100644
--- a/source/blender/python/api2_2x/doc/Object.py
+++ b/source/blender/python/api2_2x/doc/Object.py
@@ -117,6 +117,10 @@ Example::
attribute. Only one type can be selected at a time. Values are
BOX, SPHERE, CYLINDER, CONE, and POLYHEDERON
+@type EmptyShapes: readonly dictionary
+@var EmptyShapes: Constant dict used for with L{Object.emptyShape} attribute.
+ Only one type can be selected at a time. Values are
+ ARROW, ARROWS, AXES, CIRCLE, CONE, CUBE AND SPHERE
"""
def New (type, name='type'):
@@ -347,7 +351,7 @@ class Object:
ob.layers = [] # object won't be visible
ob.layers = [1, 4] # object visible only in layers 1 and 4
ls = o.layers
- ls.append([10])
+ ls.append(10)
o.layers = ls
print ob.layers # will print: [1, 4, 10]
B{Note}: changes will only be visible after the screen (at least
@@ -525,6 +529,8 @@ class Object:
@ivar drawType: The object's drawing type.
See L{DrawTypes} constant dict for values.
@type drawType: int
+ @ivar emptyShape: The empty drawing shape.
+ See L{EmptyShapes} constant dict for values.
@ivar parentType: The object's parent type. Read-only.
See L{ParentTypes} constant dict for values.
@type parentType: int
@@ -546,6 +552,8 @@ class Object:
@ivar transp: Enable transparent materials for the active object
(mesh only). Also see B{TRANSP} bit in L{drawMode} attribute.
@type transp: boolean
+ @ivar color: Object color used by the game engine and optionally for materials, 4 floats for RGBA object color.
+ @type color: tuple of 4 floats between 0 and 1
@ivar drawMode: The object's drawing mode bitfield.
See L{DrawModes} constant dict for values.
@type drawMode: int
diff --git a/source/blender/python/api2_2x/doc/Text.py b/source/blender/python/api2_2x/doc/Text.py
index 98ecb664b71..022205573aa 100644
--- a/source/blender/python/api2_2x/doc/Text.py
+++ b/source/blender/python/api2_2x/doc/Text.py
@@ -100,6 +100,19 @@ class Text:
Clear this Text object: its buffer becomes empty.
"""
+ def reset():
+ """
+ Reset the read IO pointer to the start of the buffer.
+ """
+
+ def readline():
+ """
+ Reads a line of text from the buffer from the current IO pointer
+ position to the end of the line. If the text has changed since the last
+ read, reset() *must* be called.
+ @rtype: string
+ """
+
def set(attribute, value):
"""
Set this Text's attributes.
@@ -118,12 +131,94 @@ class Text:
@param data: The string to append to the text buffer.
"""
- def asLines():
+ def insert(data):
"""
- Retrieve the contents of this Text buffer as a list of strings.
+ Inserts a string into this Text buffer at the cursor.
+ @type data: string
+ @param data: The string to insert into the text buffer.
+ """
+
+ def asLines(start=0, end=-1):
+ """
+ Retrieve the contents of this Text buffer as a list of strings between
+ the start and end lines specified. If end < 0 all lines from start will
+ be included.
+ @type start int
+ @param start: Optional index of first line of the span to return
+ @type end int
+ @param end: Optional index of the line to which the span is taken or
+ -1 to include all lines from start
@rtype: list of strings
- @return: A list of strings, one for each line in the buffer
+ @return: A list of strings, one for each line in the buffer between
+ start and end.
+ """
+
+ def getCursorPos():
+ """
+ Retrieve the position of the cursor in this Text buffer.
+ @rtype: (int, int)
+ @return: A pair (row, col) indexing the line and character of the
+ cursor.
+ """
+
+ def setCursorPos(row, col):
+ """
+ Set the position of the cursor in this Text buffer. Any selection will
+ be cleared. Use setSelectPos to extend a selection from the point
+ specified here.
+ @type row: int
+ @param row: The index of the line in which to position the cursor.
+ @type col: int
+ @param col: The index of the character within the line to position the
+ cursor.
+ """
+
+ def getSelectPos():
+ """
+ Retrieve the position of the selection cursor in this Text buffer.
+ @rtype: (int, int)
+ @return: A pair (row, col) indexing the line and character of the
+ selection cursor.
+ """
+
+ def setSelectPos(row, col):
+ """
+ Set the position of the selection cursor in this Text buffer. This
+ method should be called after setCursorPos to extend the selection to
+ the specified point.
+ @type row: int
+ @param row: The index of the line in which to position the cursor.
+ @type col: int
+ @param col: The index of the character within the line to position the
+ cursor.
+ """
+
+ def suggest(list, prefix=''):
+ """
+ Suggest a list of names. If list is a list of tuples (name, type) the
+ list will be formatted to syntax-highlight each entry type. Types must
+ be strings in the list ['m', 'f', 'v', 'k', '?']. It is recommended that
+ the list be sorted, case-insensitively by name.
+
+ @type list: list of tuples or strings
+ @param list: List of pair-tuples of the form (name, type) where name is
+ the suggested name and type is one of 'm' (module or class), 'f'
+ (function or method), 'v' (variable), 'k' (keyword), '?' (other).
+ Lists of plain strings are also accepted where the type is always
+ '?'.
+ @type prefix: string
+ @param prefix: The optional prefix used to limit what is suggested from
+ the list. This is usually whatever precedes the cursor so that
+ backspace will update it.
+ """
+
+ def showDocs(docs):
+ """
+ Displays a word-wrapped message box containing the specified
+ documentation when this Text object is visible.
+ @type docs: string
+ @param docs: The documentation string to display.
"""
import id_generics
-Text.__doc__ += id_generics.attributes \ No newline at end of file
+Text.__doc__ += id_generics.attributes
diff --git a/source/blender/python/api2_2x/doc/Text3d.py b/source/blender/python/api2_2x/doc/Text3d.py
index a7d8c585078..4bd989014f4 100644
--- a/source/blender/python/api2_2x/doc/Text3d.py
+++ b/source/blender/python/api2_2x/doc/Text3d.py
@@ -287,6 +287,26 @@ class Text3d:
@param align: The new text3d's Alignment value.
"""
+ def getMaterial(index):
+ """
+ get the material index of a character.
+ @rtype: int
+ @return: the material index if the character
+ @type index: int
+ @param index: the index of the character in a string
+ """
+
+ def setMaterial(index, material_index):
+ """
+ Set a characters material.
+ @note: after changing this youll need to update the object with object.makeDisplayList() to see the changes.
+ @rtype: None
+ @type index: int
+ @param index: the index of the character in a string
+ @type material_index: int
+ @param material_index: the material index set set the character.
+ """
+
def addFrame():
"""
Adds a text frame. maximum number of frames is 255.
diff --git a/source/blender/python/api2_2x/doc/Texture.py b/source/blender/python/api2_2x/doc/Texture.py
index cebb7de7011..b5b82b1a519 100644
--- a/source/blender/python/api2_2x/doc/Texture.py
+++ b/source/blender/python/api2_2x/doc/Texture.py
@@ -195,20 +195,23 @@ Example::
- DN_CELLNOISE - Steven Worley's cellular basis algorithm (1996)
@var TexCo: Flags for MTex.texco.
- - ORCO - Use the original coordinates of the mesh
- - REFL - Use reflection vector as texture coordinates
- - NOR - Use normal vector as texture coordinates
+ - ORCO - Use the original coordinates of the mesh (material texture only)
+ - REFL - Use reflection vector as texture coordinates (material texture only)
+ - NOR - Use normal vector as texture coordinates (material texture only)
- GLOB - Use global coordinates for the texture coordinates
- - UV - Use UV coordinates for texture coordinates
+ - UV - Use UV coordinates for texture coordinates (material texture only)
- OBJECT - Use linked object's coordinates for texture coordinates
- - WIN - Use screen coordinates as texture coordinates
- - VIEW - Pass camera view vector on to the texture (World texture only!)
- - STICK - Use mesh sticky coordinates for the texture coordinates
- - STRESS - Use mesh stress coordinates for the texture coordinates
- - TANGENT - Use mesh tangent coordinates for the texture coordinates
+ - WIN - Use screen coordinates as texture coordinates (material texture only)
+ - VIEW - Use view coordinates for the texture (world and lamp texture only)
+ - STICK - Use mesh sticky coordinates for the texture coordinates (material texture only)
+ - STRESS - Use mesh stress coordinates for the texture coordinates (material texture only)
+ - TANGENT - Use mesh tangent coordinates for the texture coordinates (material texture only)
+ - ANGMAP - Uses 360 degree angular coordinates, e.g. for spherical light probes (world texture only)
+ - HSPHERE - For 360 degree panorama sky, spherical mapped, only top half (world texture only)
+ - HTUBE - For 360 degree panorama sky, cylindrical mapped, only top half (world texture only)
@type TexCo: readonly dictionary
-@var MapTo: Flags for MTex.mapto.
+@var MapTo: Flags for MTex.mapto
- COL - Make the texture affect the basic color of the material
- NOR - Make the texture affect the rendered normal
- CSP - Make the texture affect the specularity color
@@ -500,48 +503,92 @@ class MTex:
This object links a material to a texture. It allows the same texture to be
used in several different ways.
- @ivar tex: The Texture this is linked to.
- @type tex: Blender Texture
- @ivar texco: Texture coordinates ("Map input"). See L{TexCo}
- @ivar mapto: "Map to" field of texture. OR'd values of L{MapTo}
- @ivar object: Object whose space to use when texco is Object
- @type object: Blender Object
- @ivar col: Color that the texture blends with
- @ivar dvar: Value that the texture blends with when not blending colors
- @ivar blendmode: Texture blending mode. L{BlendModes}
- @ivar colfac: Factor by which texture affects color
- @ivar norfac: Factor by which texture affects normal
- @ivar varfac: Factor by which texture affects most variables
- @ivar dispfac: Factor by which texture affects displacement
- @ivar warpfac: Factor by which texture affects warp
- @ivar ofs: Offset to adjust texture space
- @ivar size: Size to scale texture space
- @ivar mapping: Mapping of texture coordinates (flat, cube, etc.). L{Mappings}
- @ivar stencil: Stencil mode
- @ivar neg: Negate texture values mode
- @ivar noRGB: Convert texture RGB values to intensity values
- @ivar correctNor: Correct normal mapping for Texture space and Object space
- @ivar fromDupli: Dupli's instanced from verts, faces or particles, inherit texture coordinate from their parent
- @ivar fromOrig: Dupli's derive their object coordinates from the original objects transformation
- @ivar xproj: Projection of X axis to Texture space. L{Proj}
- @ivar yproj: Projection of Y axis to Texture space. L{Proj}
- @ivar zproj: Projection of Z axis to Texture space. L{Proj}
- @ivar mtCol: How texture maps to color
- @ivar mtNor: How texture maps to normals
- @ivar mtCsp: How texture maps to specularity color
- @ivar mtCmir: How texture maps to mirror color
- @ivar mtRef: How texture maps to reflectivity
- @ivar mtSpec: How texture maps to specularity
- @ivar mtEmit: How texture maps to emit value
- @ivar mtAlpha: How texture maps to alpha value
- @ivar mtHard: How texture maps to hardness
- @ivar mtRayMir: How texture maps to RayMir value
- @ivar mtTranslu: How texture maps to translucency
- @ivar mtAmb: How texture maps to ambient value
- @ivar mtDisp: How texture maps to displacement
- @ivar mtWarp: How texture maps to warp
- @ivar uvlayer: The name of the UV Layer this texture is mapped to (when left blank uses render layer)
- @type uvlayer: string
+ @ivar blendmode: Texture blending mode. See L{BlendModes}
+ @type blendmode: int
+ @ivar col: Color that the texture blends with.
+ @type col: tuple
+ @ivar colfac: Factor by which texture affects color.
+ @type colfac: float
+ @ivar correctNor: Correct normal mapping for Texture space and Object space (material only).
+ @type correctNor: boolean
+ @ivar dispfac: Factor by which texture affects displacement (material only).
+ @type dispfac: float
+ @ivar dvar: Value that the texture blends with when not blending colors.
+ @type dvar: float
+ @ivar fromDupli: Duplis instanced from verts, faces or particles, inherit texture coordinate from their parent (material only).
+ @type fromDupli: boolean
+ @ivar fromOrig: Duplis derive their object coordinates from the original objects transformation (material only).
+ @type fromOrig: boolean
+ @ivar mapping: Mapping of texture coordinates (flat, cube, etc.) (material only). See L{Mappings}.
+ @type mapping: int
+ @ivar mapto: "Map to" field of texture (material only). OR'd values of L{MapTo}.
+ @type mapto: int
+ @ivar mtCol: How texture maps to color (material and lamp only).
+ @type mtCol: int
+ @ivar mtAlpha: How texture maps to alpha value (material only).
+ @type mtAlpha: int
+ @ivar mtAmb: How texture maps to ambient value (material only).
+ @type mtAmb: int
+ @ivar mtCmir: How texture maps to mirror color (material only).
+ @type mtCmir: int
+ @ivar mtCsp: How texture maps to specularity color (material only).
+ @type mtCsp: int
+ @ivar mtDisp: How texture maps to displacement (material only).
+ @type mtDisp: int
+ @ivar mtEmit: How texture maps to emit value (material only).
+ @type mtEmit: int
+ @ivar mtHard: How texture maps to hardness (material only).
+ @type mtHard: int
+ @ivar mtNor: How texture maps to normals (material only).
+ @type mtNor: int
+ @ivar mtRayMir: How texture maps to RayMir value (material only).
+ @type mtRayMir: int
+ @ivar mtRef: How texture maps to reflectivity (material only).
+ @type mtRef: int
+ @ivar mtSpec: How texture maps to specularity (material only).
+ @type mtSpec: int
+ @ivar mtTranslu: How texture maps to translucency (material only).
+ @type mtTranslu: int
+ @ivar mtWarp: How texture maps to warp (material only).
+ @type mtWarp: int
+ @ivar mtBlend: Texture affects color progression of background (world only).
+ @type mtBlend: int
+ @ivar mtHoriz: Texture affects color of the horizon (world only).
+ @type mtHoriz: int
+ @ivar mtZenUp: Texture affects color of the zenith above (world only).
+ @type mtZenUp: int
+ @ivar mtZenDown: Texture affects color of the zenith below (world only).
+ @type mtZenDown: int
+ @ivar neg: Negate texture values mode.
+ @type neg: boolean
+ @ivar norfac: Factor by which texture affects normal (material and world only).
+ @type norfac: float
+ @ivar noRGB: Convert texture RGB values to intensity values.
+ @type noRGB: boolean
+ @ivar object: Object whose space to use when texco is Object.
+ @type object: Blender Object or None
+ @ivar ofs: Offset to adjust texture space.
+ @type ofs: tuple
+ @ivar size: Size to scale texture space.
+ @type size: tuple
+ @ivar stencil: Stencil mode.
+ @type stencil: boolean
+ @ivar tex: The Texture this is linked to.
+ @type tex: Blender Texture
+ @ivar texco: Texture coordinates ("Map input"). See L{TexCo}.
+ @type texco: int
+ @ivar uvlayer: The name of the UV Layer this texture is mapped to (when left blank uses render layer) (material only).
+ @type uvlayer: string
+ @ivar varfac: Factor by which texture affects most variables (material and world only).
+ @type varfac: float
+ @ivar warpfac: Factor by which texture affects warp (material only).
+ @type warpfac: float
+ @ivar xproj: Projection of X axis to Texture space (material only). See L{Proj}
+ @type xproj: int
+ @ivar yproj: Projection of Y axis to Texture space (material only). See L{Proj}
+ @type yproj: int
+ @ivar zproj: Projection of Z axis to Texture space (material only). See L{Proj}
+ @type zproj: int
"""
def getIpo():
diff --git a/source/blender/python/api2_2x/doc/World.py b/source/blender/python/api2_2x/doc/World.py
index d9e9bae750d..d8052c609cd 100644
--- a/source/blender/python/api2_2x/doc/World.py
+++ b/source/blender/python/api2_2x/doc/World.py
@@ -82,6 +82,8 @@ class World:
@ivar mist: the mist parameters of a world object. See getMist for the semantics of these parameters.
@type ipo: Blender Ipo
@ivar ipo: The world type ipo linked to this world object.
+ @type textures: a tuple of Blender MTex objects.
+ @ivar textures: The World's texture list. Empty texture channels contains None.
"""
def getRange():
diff --git a/source/blender/python/api2_2x/gen_utils.h b/source/blender/python/api2_2x/gen_utils.h
index 1f2fd55cf1b..f33dc69d703 100644
--- a/source/blender/python/api2_2x/gen_utils.h
+++ b/source/blender/python/api2_2x/gen_utils.h
@@ -45,6 +45,7 @@
Py_RETURN_NONE
Python 2.4 macro.
defined here until we switch to 2.4
+ also in PyObjectPlus.h for gameengine
*/
#ifndef Py_RETURN_NONE
#define Py_RETURN_NONE return Py_BuildValue("O", Py_None)
diff --git a/source/blender/python/api2_2x/matrix.c b/source/blender/python/api2_2x/matrix.c
index 9f5e49e8d88..79ca5e09b25 100644
--- a/source/blender/python/api2_2x/matrix.c
+++ b/source/blender/python/api2_2x/matrix.c
@@ -774,7 +774,7 @@ static PyObject *Matrix_mul(PyObject * m1, PyObject * m2)
return EXPP_ReturnPyObjError(PyExc_TypeError,
"Matrix multiplication: arguments not acceptable for this operation\n");
}
-PyObject* Matrix_inv(MatrixObject *self)
+static PyObject* Matrix_inv(MatrixObject *self)
{
return Matrix_Invert(self);
}
diff --git a/source/blender/python/api2_2x/sceneRender.c b/source/blender/python/api2_2x/sceneRender.c
index 22e165cbe9f..8e815b95ddf 100644
--- a/source/blender/python/api2_2x/sceneRender.c
+++ b/source/blender/python/api2_2x/sceneRender.c
@@ -397,13 +397,13 @@ static PyObject *M_Render_getInt( BPy_RenderData *self, int var )
/* Render Module Function Definitions */
/***************************************************************************/
-PyObject *M_Render_CloseRenderWindow( PyObject * self )
+static PyObject *M_Render_CloseRenderWindow( PyObject * self )
{
BIF_close_render_display( );
Py_RETURN_NONE;
}
-PyObject *M_Render_SetRenderWinPos( PyObject * self, PyObject * args )
+static PyObject *M_Render_SetRenderWinPos( PyObject * self, PyObject * args )
{
PyObject *list = NULL;
char *loc = NULL;
@@ -446,7 +446,7 @@ PyObject *M_Render_SetRenderWinPos( PyObject * self, PyObject * args )
Py_RETURN_NONE;
}
-PyObject *M_Render_EnableDispView( PyObject * self )
+static PyObject *M_Render_EnableDispView( PyObject * self )
{
G.displaymode = R_DISPLAYIMAGE;
EXPP_allqueue( REDRAWBUTSSCENE, 0 );
@@ -454,7 +454,7 @@ PyObject *M_Render_EnableDispView( PyObject * self )
Py_RETURN_NONE;
}
-PyObject *M_Render_EnableDispWin( PyObject * self )
+static PyObject *M_Render_EnableDispWin( PyObject * self )
{
G.displaymode = R_DISPLAYWIN;
EXPP_allqueue( REDRAWBUTSSCENE, 0 );
@@ -467,7 +467,7 @@ PyObject *M_Render_EnableDispWin( PyObject * self )
/* BPy_RenderData Function Definitions */
/***************************************************************************/
-PyObject *RenderData_Render( BPy_RenderData * self )
+static PyObject *RenderData_Render( BPy_RenderData * self )
{
Scene *oldsce;
/* unlock to prevent a deadlock when there are pynodes: */
@@ -481,7 +481,6 @@ PyObject *RenderData_Render( BPy_RenderData * self )
set_scene( oldsce );
}
else { /* background mode (blender -b file.blend -P script) */
- int slink_flag = 0;
Render *re= RE_NewRender(G.scene->id.name);
int end_frame = G.scene->r.efra;
@@ -492,20 +491,14 @@ PyObject *RenderData_Render( BPy_RenderData * self )
G.scene->r.efra = G.scene->r.sfra;
- if (G.f & G_DOSCRIPTLINKS) {
- BPY_do_all_scripts(SCRIPT_RENDER);
- G.f &= ~G_DOSCRIPTLINKS; /* avoid FRAMECHANGED events*/
- slink_flag = 1;
- }
+ if (G.f & G_DOSCRIPTLINKS)
+ BPY_do_all_scripts(SCRIPT_RENDER, 0);
tstate = PyEval_SaveThread();
- RE_BlenderAnim(re, G.scene, G.scene->r.sfra, G.scene->r.efra);
+ RE_BlenderAnim(re, G.scene, G.scene->r.sfra, G.scene->r.efra, G.scene->frame_step);
- if (slink_flag) {
- G.f |= G_DOSCRIPTLINKS;
- BPY_do_all_scripts(SCRIPT_POSTRENDER);
- }
+ BPY_do_all_scripts(SCRIPT_POSTRENDER, 0);
G.scene->r.efra = end_frame;
}
@@ -518,7 +511,7 @@ PyObject *RenderData_Render( BPy_RenderData * self )
/* BPy_Bake Function Definitions */
/***************************************************************************/
-PyObject *RenderData_Bake( BPy_RenderData * self )
+static PyObject *RenderData_Bake( BPy_RenderData * self )
{
char *error_msg = NULL;
Scene *oldsce;
@@ -539,7 +532,7 @@ PyObject *RenderData_Bake( BPy_RenderData * self )
/*
* This will save the rendered image to an output file path already defined.
*/
-PyObject *RenderData_SaveRenderedImage ( BPy_RenderData * self, PyObject *args )
+static PyObject *RenderData_SaveRenderedImage ( BPy_RenderData * self, PyObject *args )
{
char dir[FILE_MAXDIR * 2], str[FILE_MAXFILE * 2];
char *name_str, filepath[FILE_MAXDIR+FILE_MAXFILE];
@@ -578,7 +571,7 @@ PyObject *RenderData_SaveRenderedImage ( BPy_RenderData * self, PyObject *args )
Py_RETURN_NONE;
}
-PyObject *RenderData_RenderAnim( BPy_RenderData * self )
+static PyObject *RenderData_RenderAnim( BPy_RenderData * self )
{
Scene *oldsce;
/* unlock to prevent a deadlock when there are pynodes: */
@@ -603,20 +596,20 @@ PyObject *RenderData_RenderAnim( BPy_RenderData * self )
"start frame must be less or equal to end frame");
if (G.f & G_DOSCRIPTLINKS)
- BPY_do_all_scripts(SCRIPT_RENDER);
+ BPY_do_all_scripts(SCRIPT_RENDER, 1);
tstate = PyEval_SaveThread();
- RE_BlenderAnim(re, G.scene, G.scene->r.sfra, G.scene->r.efra);
+ RE_BlenderAnim(re, G.scene, G.scene->r.sfra, G.scene->r.efra, G.scene->frame_step);
if (G.f & G_DOSCRIPTLINKS)
- BPY_do_all_scripts(SCRIPT_POSTRENDER);
+ BPY_do_all_scripts(SCRIPT_POSTRENDER, 1);
}
PyEval_RestoreThread(tstate);
Py_RETURN_NONE;
}
-PyObject *RenderData_Play( BPy_RenderData * self )
+static PyObject *RenderData_Play( BPy_RenderData * self )
{
char file[FILE_MAXDIR + FILE_MAXFILE];
extern char bprogname[];
@@ -675,46 +668,46 @@ PyObject *RenderData_Play( BPy_RenderData * self )
Py_RETURN_NONE;
}
-PyObject *RenderData_EnableBackbuf( BPy_RenderData * self, PyObject * args )
+static PyObject *RenderData_EnableBackbuf( BPy_RenderData * self, PyObject * args )
{
return M_Render_BitToggleShort( args, 1,
&self->renderContext->bufflag );
}
-PyObject *RenderData_EnableExtensions( BPy_RenderData * self, PyObject * args )
+static PyObject *RenderData_EnableExtensions( BPy_RenderData * self, PyObject * args )
{
return M_Render_BitToggleInt( args, R_EXTENSION,
&self->renderContext->scemode );
}
-PyObject *RenderData_EnableSequencer( BPy_RenderData * self, PyObject * args )
+static PyObject *RenderData_EnableSequencer( BPy_RenderData * self, PyObject * args )
{
return M_Render_BitToggleInt( args, R_DOSEQ,
&self->renderContext->scemode );
}
-PyObject *RenderData_EnableRenderDaemon( BPy_RenderData * self,
+static PyObject *RenderData_EnableRenderDaemon( BPy_RenderData * self,
PyObject * args )
{
return M_Render_BitToggleInt( args, R_BG_RENDER,
&self->renderContext->scemode );
}
-PyObject *RenderData_EnableToonShading( BPy_RenderData * self,
+static PyObject *RenderData_EnableToonShading( BPy_RenderData * self,
PyObject * args )
{
return M_Render_BitToggleInt( args, R_EDGE,
&self->renderContext->mode );
}
-PyObject *RenderData_EdgeIntensity( BPy_RenderData * self, PyObject * args )
+static PyObject *RenderData_EdgeIntensity( BPy_RenderData * self, PyObject * args )
{
return M_Render_GetSetAttributeShort( args,
&self->renderContext->edgeint, 0,
255 );
}
-PyObject *RenderData_SetEdgeColor( BPy_RenderData * self, PyObject * args )
+static PyObject *RenderData_SetEdgeColor( BPy_RenderData * self, PyObject * args )
{
float red, green, blue;
@@ -739,7 +732,7 @@ PyObject *RenderData_SetEdgeColor( BPy_RenderData * self, PyObject * args )
Py_RETURN_NONE;
}
-PyObject *RenderData_GetEdgeColor( BPy_RenderData * self )
+static PyObject *RenderData_GetEdgeColor( BPy_RenderData * self )
{
char rgb[24];
@@ -748,7 +741,7 @@ PyObject *RenderData_GetEdgeColor( BPy_RenderData * self )
return PyString_FromString( rgb );
}
-PyObject *RenderData_EnableOversampling( BPy_RenderData * self,
+static PyObject *RenderData_EnableOversampling( BPy_RenderData * self,
PyObject * args )
{
return M_Render_BitToggleInt( args, R_OSA,
@@ -775,34 +768,34 @@ static int RenderData_setOSALevel( BPy_RenderData * self,
return 0;
}
-PyObject *RenderData_EnableMotionBlur( BPy_RenderData * self, PyObject * args )
+static PyObject *RenderData_EnableMotionBlur( BPy_RenderData * self, PyObject * args )
{
return M_Render_BitToggleInt( args, R_MBLUR,
&self->renderContext->mode );
}
-PyObject *RenderData_MotionBlurLevel( BPy_RenderData * self, PyObject * args )
+static PyObject *RenderData_MotionBlurLevel( BPy_RenderData * self, PyObject * args )
{
return M_Render_GetSetAttributeFloat( args,
&self->renderContext->blurfac,
0.01f, 5.0f );
}
-PyObject *RenderData_PartsX( BPy_RenderData * self, PyObject * args )
+static PyObject *RenderData_PartsX( BPy_RenderData * self, PyObject * args )
{
return M_Render_GetSetAttributeShort( args,
&self->renderContext->xparts, 1,
512 );
}
-PyObject *RenderData_PartsY( BPy_RenderData * self, PyObject * args )
+static PyObject *RenderData_PartsY( BPy_RenderData * self, PyObject * args )
{
return M_Render_GetSetAttributeShort( args,
&self->renderContext->yparts, 1,
64 );
}
-PyObject *RenderData_EnableSky( BPy_RenderData * self )
+static PyObject *RenderData_EnableSky( BPy_RenderData * self )
{
self->renderContext->alphamode = R_ADDSKY;
EXPP_allqueue( REDRAWBUTSSCENE, 0 );
@@ -810,7 +803,7 @@ PyObject *RenderData_EnableSky( BPy_RenderData * self )
Py_RETURN_NONE;
}
-PyObject *RenderData_EnablePremultiply( BPy_RenderData * self )
+static PyObject *RenderData_EnablePremultiply( BPy_RenderData * self )
{
self->renderContext->alphamode = R_ALPHAPREMUL;
EXPP_allqueue( REDRAWBUTSSCENE, 0 );
@@ -818,7 +811,7 @@ PyObject *RenderData_EnablePremultiply( BPy_RenderData * self )
Py_RETURN_NONE;
}
-PyObject *RenderData_EnableKey( BPy_RenderData * self )
+static PyObject *RenderData_EnableKey( BPy_RenderData * self )
{
self->renderContext->alphamode = R_ALPHAKEY;
EXPP_allqueue( REDRAWBUTSSCENE, 0 );
@@ -826,59 +819,59 @@ PyObject *RenderData_EnableKey( BPy_RenderData * self )
Py_RETURN_NONE;
}
-PyObject *RenderData_EnableShadow( BPy_RenderData * self, PyObject * args )
+static PyObject *RenderData_EnableShadow( BPy_RenderData * self, PyObject * args )
{
return M_Render_BitToggleInt( args, R_SHADOW,
&self->renderContext->mode );
}
-PyObject *RenderData_EnableEnvironmentMap( BPy_RenderData * self,
+static PyObject *RenderData_EnableEnvironmentMap( BPy_RenderData * self,
PyObject * args )
{
return M_Render_BitToggleInt( args, R_ENVMAP,
&self->renderContext->mode );
}
-PyObject *RenderData_EnablePanorama( BPy_RenderData * self, PyObject * args )
+static PyObject *RenderData_EnablePanorama( BPy_RenderData * self, PyObject * args )
{
return M_Render_BitToggleInt( args, R_PANORAMA,
&self->renderContext->mode );
}
-PyObject *RenderData_EnableRayTracing( BPy_RenderData * self, PyObject * args )
+static PyObject *RenderData_EnableRayTracing( BPy_RenderData * self, PyObject * args )
{
return M_Render_BitToggleInt( args, R_RAYTRACE,
&self->renderContext->mode );
}
-PyObject *RenderData_EnableRadiosityRender( BPy_RenderData * self,
+static PyObject *RenderData_EnableRadiosityRender( BPy_RenderData * self,
PyObject * args )
{
return M_Render_BitToggleInt( args, R_RADIO,
&self->renderContext->mode );
}
-PyObject *RenderData_EnableFieldRendering( BPy_RenderData * self,
+static PyObject *RenderData_EnableFieldRendering( BPy_RenderData * self,
PyObject * args )
{
return M_Render_BitToggleInt( args, R_FIELDS,
&self->renderContext->mode );
}
-PyObject *RenderData_EnableOddFieldFirst( BPy_RenderData * self,
+static PyObject *RenderData_EnableOddFieldFirst( BPy_RenderData * self,
PyObject * args )
{
return M_Render_BitToggleInt( args, R_ODDFIELD,
&self->renderContext->mode );
}
-PyObject *RenderData_EnableFieldTimeDisable( BPy_RenderData * self,
+static PyObject *RenderData_EnableFieldTimeDisable( BPy_RenderData * self,
PyObject * args )
{
return M_Render_BitToggleInt( args, R_FIELDSTILL,
&self->renderContext->mode );
}
-PyObject *RenderData_EnableGaussFilter( BPy_RenderData * self,
+static PyObject *RenderData_EnableGaussFilter( BPy_RenderData * self,
PyObject * args )
{
return M_Render_BitToggleInt( args, R_GAUSS,
@@ -889,7 +882,7 @@ PyObject *RenderData_EnableGaussFilter( BPy_RenderData * self,
/* choices are listed in DNA_scene_types.h (search filtertype) */
}
-PyObject *RenderData_EnableBorderRender( BPy_RenderData * self,
+static PyObject *RenderData_EnableBorderRender( BPy_RenderData * self,
PyObject * args )
{
return M_Render_BitToggleInt( args, R_BORDER,
@@ -931,57 +924,57 @@ static PyObject *RenderData_getBorder( BPy_RenderData * self )
self->renderContext->border.ymax );
}
-PyObject *RenderData_EnableGammaCorrection( BPy_RenderData * self,
+static PyObject *RenderData_EnableGammaCorrection( BPy_RenderData * self,
PyObject * args )
{
return M_Render_BitToggleInt( args, R_GAMMA,
&self->renderContext->mode );
}
-PyObject *RenderData_GaussFilterSize( BPy_RenderData * self, PyObject * args )
+static PyObject *RenderData_GaussFilterSize( BPy_RenderData * self, PyObject * args )
{
return M_Render_GetSetAttributeFloat( args,
&self->renderContext->gauss,
0.5f, 1.5f );
}
-PyObject *RenderData_AspectRatioX( BPy_RenderData * self, PyObject * args )
+static PyObject *RenderData_AspectRatioX( BPy_RenderData * self, PyObject * args )
{
return M_Render_GetSetAttributeFloat( args, &self->renderContext->xasp,
1.0f, 200.0f );
}
-PyObject *RenderData_AspectRatioY( BPy_RenderData * self, PyObject * args )
+static PyObject *RenderData_AspectRatioY( BPy_RenderData * self, PyObject * args )
{
return M_Render_GetSetAttributeFloat( args, &self->renderContext->yasp,
1.0f, 200.0f );
}
-PyObject *RenderData_StartFrame( BPy_RenderData * self, PyObject * args )
+static PyObject *RenderData_StartFrame( BPy_RenderData * self, PyObject * args )
{
return M_Render_GetSetAttributeInt( args, &self->renderContext->sfra,
1, MAXFRAME );
}
-PyObject *RenderData_CurrentFrame( BPy_RenderData * self, PyObject * args )
+static PyObject *RenderData_CurrentFrame( BPy_RenderData * self, PyObject * args )
{
return M_Render_GetSetAttributeInt( args, &self->renderContext->cfra,
1, MAXFRAME );
}
-PyObject *RenderData_EndFrame( BPy_RenderData * self, PyObject * args )
+static PyObject *RenderData_EndFrame( BPy_RenderData * self, PyObject * args )
{
return M_Render_GetSetAttributeInt( args, &self->renderContext->efra,
1, MAXFRAME );
}
-PyObject *RenderData_ImageSizeX( BPy_RenderData * self, PyObject * args )
+static PyObject *RenderData_ImageSizeX( BPy_RenderData * self, PyObject * args )
{
return M_Render_GetSetAttributeShort( args, &self->renderContext->xsch,
4, 10000 );
}
-PyObject *RenderData_ImageSizeY( BPy_RenderData * self, PyObject * args )
+static PyObject *RenderData_ImageSizeY( BPy_RenderData * self, PyObject * args )
{
return M_Render_GetSetAttributeShort( args, &self->renderContext->ysch,
4, 10000 );
@@ -1008,7 +1001,7 @@ static int RenderData_setRenderer( BPy_RenderData * self, PyObject * value )
return 0;
}
-PyObject *RenderData_EnableCropping( void )
+static PyObject *RenderData_EnableCropping( void )
{
/* return M_Render_BitToggleInt( args, R_MOVIECROP,
&self->renderContext->mode );
@@ -1074,21 +1067,21 @@ static int RenderData_setImageType( BPy_RenderData *self, PyObject *value )
return 0;
}
-PyObject *RenderData_Quality( BPy_RenderData * self, PyObject * args )
+static PyObject *RenderData_Quality( BPy_RenderData * self, PyObject * args )
{
return M_Render_GetSetAttributeShort( args,
&self->renderContext->quality,
10, 100 );
}
-PyObject *RenderData_FramesPerSec( BPy_RenderData * self, PyObject * args )
+static PyObject *RenderData_FramesPerSec( BPy_RenderData * self, PyObject * args )
{
return M_Render_GetSetAttributeShort( args,
&self->renderContext->frs_sec, 1,
120 );
}
-PyObject *RenderData_EnableGrayscale( BPy_RenderData * self )
+static PyObject *RenderData_EnableGrayscale( BPy_RenderData * self )
{
self->renderContext->planes = R_PLANESBW;
EXPP_allqueue( REDRAWBUTSSCENE, 0 );
@@ -1096,7 +1089,7 @@ PyObject *RenderData_EnableGrayscale( BPy_RenderData * self )
Py_RETURN_NONE;
}
-PyObject *RenderData_EnableRGBColor( BPy_RenderData * self )
+static PyObject *RenderData_EnableRGBColor( BPy_RenderData * self )
{
self->renderContext->planes = R_PLANES24;
EXPP_allqueue( REDRAWBUTSSCENE, 0 );
@@ -1104,7 +1097,7 @@ PyObject *RenderData_EnableRGBColor( BPy_RenderData * self )
Py_RETURN_NONE;
}
-PyObject *RenderData_EnableRGBAColor( BPy_RenderData * self )
+static PyObject *RenderData_EnableRGBAColor( BPy_RenderData * self )
{
self->renderContext->planes = R_PLANES32;
EXPP_allqueue( REDRAWBUTSSCENE, 0 );
@@ -1112,7 +1105,7 @@ PyObject *RenderData_EnableRGBAColor( BPy_RenderData * self )
Py_RETURN_NONE;
}
-PyObject *RenderData_SizePreset( BPy_RenderData * self, PyObject * args )
+static PyObject *RenderData_SizePreset( BPy_RenderData * self, PyObject * args )
{
int type;
@@ -1496,7 +1489,7 @@ static PyObject *RenderData_getYafrayGITunePhotons( BPy_RenderData * self )
/* (die) end */
-PyObject *RenderData_YafrayGIPower( BPy_RenderData * self, PyObject * args )
+static PyObject *RenderData_YafrayGIPower( BPy_RenderData * self, PyObject * args )
{
if( self->renderContext->GImethod > 0 ) {
return M_Render_GetSetAttributeFloat( args,
@@ -1508,7 +1501,7 @@ PyObject *RenderData_YafrayGIPower( BPy_RenderData * self, PyObject * args )
"YafrayGIMethod must be set to 'SKYDOME' or 'FULL'" ) );
}
-PyObject *RenderData_YafrayGIIndirPower( BPy_RenderData * self, PyObject * args )
+static PyObject *RenderData_YafrayGIIndirPower( BPy_RenderData * self, PyObject * args )
{
return M_Render_GetSetAttributeFloat( args,
&self->renderContext->
@@ -1516,7 +1509,7 @@ PyObject *RenderData_YafrayGIIndirPower( BPy_RenderData * self, PyObject * args
100.00f );
}
-PyObject *RenderData_YafrayGIDepth( BPy_RenderData * self, PyObject * args )
+static PyObject *RenderData_YafrayGIDepth( BPy_RenderData * self, PyObject * args )
{
if( self->renderContext->GImethod == 2 ) {
return M_Render_GetSetAttributeInt( args,
@@ -1527,7 +1520,7 @@ PyObject *RenderData_YafrayGIDepth( BPy_RenderData * self, PyObject * args )
"YafrayGIMethod must be set to 'FULL'" ) );
}
-PyObject *RenderData_YafrayGICDepth( BPy_RenderData * self, PyObject * args )
+static PyObject *RenderData_YafrayGICDepth( BPy_RenderData * self, PyObject * args )
{
if( self->renderContext->GImethod == 2 ) {
return M_Render_GetSetAttributeInt( args,
@@ -1538,7 +1531,7 @@ PyObject *RenderData_YafrayGICDepth( BPy_RenderData * self, PyObject * args )
"YafrayGIMethod must be set to 'FULL'" ) );
}
-PyObject *RenderData_EnableYafrayGICache( BPy_RenderData * self,
+static PyObject *RenderData_EnableYafrayGICache( BPy_RenderData * self,
PyObject * args )
{
if( self->renderContext->GImethod == 2 ) {
@@ -1550,7 +1543,7 @@ PyObject *RenderData_EnableYafrayGICache( BPy_RenderData * self,
"YafrayGIMethod must be set to 'FULL'" ) );
}
-PyObject *RenderData_EnableYafrayGIPhotons( BPy_RenderData * self,
+static PyObject *RenderData_EnableYafrayGIPhotons( BPy_RenderData * self,
PyObject * args )
{
if( self->renderContext->GImethod == 2 ) {
@@ -1562,7 +1555,7 @@ PyObject *RenderData_EnableYafrayGIPhotons( BPy_RenderData * self,
"YafrayGIMethod must be set to 'FULL'" ) );
}
-PyObject *RenderData_YafrayGIPhotonCount( BPy_RenderData * self,
+static PyObject *RenderData_YafrayGIPhotonCount( BPy_RenderData * self,
PyObject * args )
{
if( self->renderContext->GImethod == 2
@@ -1576,7 +1569,7 @@ PyObject *RenderData_YafrayGIPhotonCount( BPy_RenderData * self,
"YafrayGIMethod must be set to 'FULL' and GIPhotons must be enabled" ) );
}
-PyObject *RenderData_YafrayGIPhotonRadius( BPy_RenderData * self,
+static PyObject *RenderData_YafrayGIPhotonRadius( BPy_RenderData * self,
PyObject * args )
{
if( self->renderContext->GImethod == 2
@@ -1590,7 +1583,7 @@ PyObject *RenderData_YafrayGIPhotonRadius( BPy_RenderData * self,
"YafrayGIMethod must be set to 'FULL' and GIPhotons must be enabled" ) );
}
-PyObject *RenderData_YafrayGIPhotonMixCount( BPy_RenderData * self,
+static PyObject *RenderData_YafrayGIPhotonMixCount( BPy_RenderData * self,
PyObject * args )
{
if( self->renderContext->GImethod == 2
@@ -1603,7 +1596,7 @@ PyObject *RenderData_YafrayGIPhotonMixCount( BPy_RenderData * self,
"YafrayGIMethod must be set to 'FULL' and GIPhotons must be enabled" ) );
}
-PyObject *RenderData_EnableYafrayGITunePhotons( BPy_RenderData * self,
+static PyObject *RenderData_EnableYafrayGITunePhotons( BPy_RenderData * self,
PyObject * args )
{
if( self->renderContext->GImethod == 2
@@ -1616,7 +1609,7 @@ PyObject *RenderData_EnableYafrayGITunePhotons( BPy_RenderData * self,
"YafrayGIMethod must be set to 'FULL' and GIPhotons must be enabled" ) );
}
-PyObject *RenderData_YafrayGIShadowQuality( BPy_RenderData * self,
+static PyObject *RenderData_YafrayGIShadowQuality( BPy_RenderData * self,
PyObject * args )
{
if( self->renderContext->GImethod == 2
@@ -1630,7 +1623,7 @@ PyObject *RenderData_YafrayGIShadowQuality( BPy_RenderData * self,
"YafrayGIMethod must be set to 'FULL' and GICache must be enabled" ) );
}
-PyObject *RenderData_YafrayGIPixelsPerSample( BPy_RenderData * self,
+static PyObject *RenderData_YafrayGIPixelsPerSample( BPy_RenderData * self,
PyObject * args )
{
if( self->renderContext->GImethod == 2
@@ -1643,7 +1636,7 @@ PyObject *RenderData_YafrayGIPixelsPerSample( BPy_RenderData * self,
"YafrayGIMethod must be set to 'FULL' and GICache must be enabled" ) );
}
-PyObject *RenderData_YafrayGIRefinement( BPy_RenderData * self,
+static PyObject *RenderData_YafrayGIRefinement( BPy_RenderData * self,
PyObject * args )
{
if( self->renderContext->GImethod == 2
@@ -1657,53 +1650,53 @@ PyObject *RenderData_YafrayGIRefinement( BPy_RenderData * self,
"YafrayGIMethod must be set to 'FULL' and GICache must be enabled" ) );
}
-PyObject *RenderData_YafrayRayBias( BPy_RenderData * self, PyObject * args )
+static PyObject *RenderData_YafrayRayBias( BPy_RenderData * self, PyObject * args )
{
return M_Render_GetSetAttributeFloat( args,
&self->renderContext->YF_raybias,
0.0f, 10.0f );
}
-PyObject *RenderData_YafrayRayDepth( BPy_RenderData * self, PyObject * args )
+static PyObject *RenderData_YafrayRayDepth( BPy_RenderData * self, PyObject * args )
{
return M_Render_GetSetAttributeInt( args,
&self->renderContext->YF_raydepth,
1, 80 );
}
-PyObject *RenderData_YafrayGamma( BPy_RenderData * self, PyObject * args )
+static PyObject *RenderData_YafrayGamma( BPy_RenderData * self, PyObject * args )
{
return M_Render_GetSetAttributeFloat( args,
&self->renderContext->YF_gamma,
0.001f, 5.0f );
}
-PyObject *RenderData_YafrayExposure( BPy_RenderData * self, PyObject * args )
+static PyObject *RenderData_YafrayExposure( BPy_RenderData * self, PyObject * args )
{
return M_Render_GetSetAttributeFloat( args,
&self->renderContext->
YF_exposure, 0.0f, 10.0f );
}
-PyObject *RenderData_EnableGameFrameStretch( BPy_RenderData * self )
+static PyObject *RenderData_EnableGameFrameStretch( BPy_RenderData * self )
{
self->scene->framing.type = SCE_GAMEFRAMING_SCALE;
Py_RETURN_NONE;
}
-PyObject *RenderData_EnableGameFrameExpose( BPy_RenderData * self )
+static PyObject *RenderData_EnableGameFrameExpose( BPy_RenderData * self )
{
self->scene->framing.type = SCE_GAMEFRAMING_EXTEND;
Py_RETURN_NONE;
}
-PyObject *RenderData_EnableGameFrameBars( BPy_RenderData * self )
+static PyObject *RenderData_EnableGameFrameBars( BPy_RenderData * self )
{
self->scene->framing.type = SCE_GAMEFRAMING_BARS;
Py_RETURN_NONE;
}
-PyObject *RenderData_SetGameFrameColor( BPy_RenderData * self,
+static PyObject *RenderData_SetGameFrameColor( BPy_RenderData * self,
PyObject * args )
{
float red = 0.0f;
@@ -1731,7 +1724,7 @@ PyObject *RenderData_SetGameFrameColor( BPy_RenderData * self,
Py_RETURN_NONE;
}
-PyObject *RenderData_GetGameFrameColor( BPy_RenderData * self )
+static PyObject *RenderData_GetGameFrameColor( BPy_RenderData * self )
{
char rgb[24];
@@ -1741,33 +1734,33 @@ PyObject *RenderData_GetGameFrameColor( BPy_RenderData * self )
}
#ifdef __sgi
-PyObject *RenderData_SGIMaxsize( BPy_RenderData * self, PyObject * args )
+static PyObject *RenderData_SGIMaxsize( BPy_RenderData * self, PyObject * args )
{
return M_Render_GetSetAttributeShort( args,
&self->renderContext->maximsize,
0, 500 );
}
-PyObject *RenderData_EnableSGICosmo( BPy_RenderData *self, PyObject *args )
+static PyObject *RenderData_EnableSGICosmo( BPy_RenderData *self, PyObject *args )
{
return M_Render_BitToggleInt( args, R_COSMO,
&self->renderContext->mode );
}
#else
-PyObject *RenderData_SGIMaxsize( void )
+static PyObject *RenderData_SGIMaxsize( void )
{
return EXPP_ReturnPyObjError( PyExc_StandardError,
"SGI is not defined on this machine" );
}
-PyObject *RenderData_EnableSGICosmo( void )
+static PyObject *RenderData_EnableSGICosmo( void )
{
return EXPP_ReturnPyObjError( PyExc_StandardError,
"SGI is not defined on this machine" );
}
#endif
-PyObject *RenderData_OldMapValue( BPy_RenderData * self, PyObject * args )
+static PyObject *RenderData_OldMapValue( BPy_RenderData * self, PyObject * args )
{
PyObject *tmp = M_Render_GetSetAttributeInt(args,
&self->renderContext->framapto, 1, 900);
@@ -1776,7 +1769,7 @@ PyObject *RenderData_OldMapValue( BPy_RenderData * self, PyObject * args )
return tmp;
}
-PyObject *RenderData_NewMapValue( BPy_RenderData * self, PyObject * args )
+static PyObject *RenderData_NewMapValue( BPy_RenderData * self, PyObject * args )
{
PyObject *tmp = M_Render_GetSetAttributeInt(args,
&self->renderContext->images, 1, 900);
@@ -1808,7 +1801,7 @@ static PyObject *RenderData_getTimeCode( BPy_RenderData * self) {
/***************************************************************************/
/* Render layer functions */
/***************************************************************************/
-PyObject *RenderData_getRenderLayers(BPy_RenderData * self)
+static PyObject *RenderData_getRenderLayers(BPy_RenderData * self)
{
PyObject *list, *layer;
SceneRenderLayer *srl;
@@ -1823,7 +1816,7 @@ PyObject *RenderData_getRenderLayers(BPy_RenderData * self)
return list;
}
-PyObject *RenderData_removeRenderLayer(BPy_RenderData * self, BPy_RenderLayer *value)
+static PyObject *RenderData_removeRenderLayer(BPy_RenderData * self, BPy_RenderLayer *value)
{
int index;
if (!BPy_RenderLayer_Check(value))
@@ -1860,7 +1853,7 @@ PyObject *RenderData_removeRenderLayer(BPy_RenderData * self, BPy_RenderLayer *v
Py_RETURN_NONE;
}
-PyObject *RenderData_addRenderLayer(BPy_RenderData * self ) {
+static PyObject *RenderData_addRenderLayer(BPy_RenderData * self ) {
scene_add_render_layer(self->scene);
return RenderLayer_CreatePyObject( self->scene, self->renderContext->layers.last );
diff --git a/source/blender/python/api2_2x/sceneSequence.c b/source/blender/python/api2_2x/sceneSequence.c
index 0d3ad3fcb44..c7daea19fe7 100644
--- a/source/blender/python/api2_2x/sceneSequence.c
+++ b/source/blender/python/api2_2x/sceneSequence.c
@@ -33,12 +33,14 @@
#include "DNA_scene_types.h" /* for Base */
#include "BKE_mesh.h"
+#include "BKE_image.h" // RFS: openanim
#include "BKE_library.h"
#include "BKE_global.h"
#include "BKE_main.h"
#include "BKE_scene.h"
#include "BIF_editseq.h" /* get_last_seq */
+#include "BIF_editsound.h" // RFS: sound_open_hdaudio
#include "BLI_blenlib.h"
#include "BSE_sequence.h"
#include "Ipo.h"
@@ -48,6 +50,9 @@
#include "Sound.h"
#include "gen_utils.h"
+#include "IMB_imbuf_types.h" // RFS: IB_rect
+#include "IMB_imbuf.h" // RFS: IMB_anim_get_duration
+
enum seq_consts {
EXPP_SEQ_ATTR_TYPE = 0,
EXPP_SEQ_ATTR_CHAN,
@@ -145,7 +150,6 @@ static PyObject *NewSeq_internal(ListBase *seqbase, PyObject * args, Scene *sce)
seq->len = PyList_Size( list );
-
/* strip and stripdata */
seq->strip= strip= MEM_callocN(sizeof(Strip), "strip");
strip->len= seq->len;
@@ -185,12 +189,103 @@ static PyObject *NewSeq_internal(ListBase *seqbase, PyObject * args, Scene *sce)
strip->us= 1;
strip->stripdata= se= MEM_callocN(seq->len*sizeof(StripElem), "stripelem");
+ } else if (PyTuple_Check(py_data) && PyTuple_GET_SIZE(py_data) == 4) {
+ // MOVIE or AUDIO_HD
+ char *filename;
+ char *dir;
+ char *fullpath;
+ char *type;
+ int totframe;
+
+ if (!PyArg_ParseTuple( py_data, "ssss", &filename, &dir, &fullpath, &type )) {
+ BLI_remlink(seqbase, seq);
+ MEM_freeN(seq);
+
+ return EXPP_ReturnPyObjError( PyExc_ValueError,
+ "movie/audio hd data needs to be a tuple of a string and a list of images - (filename, dir, fullpath, type)" );
+ }
+
+ // RFS - Attempting to support Movie and Audio (HD) strips
+#define RFS
+#ifdef RFS
+ // Movie strips
+ if( strcmp( type, "movie" ) == 0 )
+ {
+ /* open it as an animation */
+ struct anim * an = openanim(fullpath, IB_rect);
+ if(an==0) {
+ BLI_remlink(seqbase, seq);
+ MEM_freeN(seq);
+
+ return EXPP_ReturnPyObjError( PyExc_ValueError,
+ "invalid movie strip" );
+ }
+
+ /* get the length in frames */
+ totframe = IMB_anim_get_duration( an );
+
+ /* set up sequence */
+ seq->type= SEQ_MOVIE;
+ seq->len= totframe;
+ seq->anim= an;
+ seq->anim_preseek = IMB_anim_get_preseek(an);
+
+ calc_sequence(seq);
+
+ /* strip and stripdata */
+ seq->strip= strip= MEM_callocN(sizeof(Strip), "strip");
+ strip->len= totframe;
+ strip->us= 1;
+ strncpy(strip->dir, dir, FILE_MAXDIR-1); // ????
+ strip->stripdata= se= MEM_callocN(sizeof(StripElem), "stripelem");
+
+ /* name movie in first strip */
+ strncpy(se->name, filename, FILE_MAXFILE-1); // ????
+ }
+
+ // Audio (HD) strips
+ if( strcmp( type, "audio_hd" ) == 0 )
+ {
+ struct hdaudio *hdaudio;
+
+ totframe= 0;
+
+ /* is it a sound file? */
+ hdaudio = sound_open_hdaudio( fullpath );
+ if(hdaudio==0) {
+ BLI_remlink(seqbase, seq);
+ MEM_freeN(seq);
+
+ return EXPP_ReturnPyObjError( PyExc_ValueError,
+ fullpath );
+ }
+
+ totframe= sound_hdaudio_get_duration(hdaudio, FPS);
+
+ /* set up sequence */
+ seq->type= SEQ_HD_SOUND;
+ seq->len= totframe;
+ seq->hdaudio= hdaudio;
+
+ calc_sequence(seq);
+
+ /* strip and stripdata - same as for MOVIE */
+ seq->strip= strip= MEM_callocN(sizeof(Strip), "strip");
+ strip->len= totframe;
+ strip->us= 1;
+ strncpy(strip->dir, dir, FILE_MAXDIR-1); // ????
+ strip->stripdata= se= MEM_callocN(sizeof(StripElem), "stripelem");
+
+ /* name movie in first strip */
+ strncpy(se->name, filename, FILE_MAXFILE-1); // ????
+ }
+#endif
+
} else if (BPy_Sound_Check(py_data)) {
- /* sound */
+ /* RAM sound */
int totframe;
bSound *sound = (( BPy_Sound * )py_data)->sound;
-
seq->type= SEQ_RAM_SOUND;
seq->sound = sound;
@@ -198,7 +293,6 @@ static PyObject *NewSeq_internal(ListBase *seqbase, PyObject * args, Scene *sce)
sound->flags |= SOUND_FLAGS_SEQUENCE;
-
/* strip and stripdata */
seq->strip= strip= MEM_callocN(sizeof(Strip), "strip");
strip->len= totframe;
@@ -211,32 +305,21 @@ static PyObject *NewSeq_internal(ListBase *seqbase, PyObject * args, Scene *sce)
} else if (BPy_Scene_Check(py_data)) {
/* scene */
- Scene *sce = ((BPy_Scene *)py_data)->scene;
+ Scene *sceseq = ((BPy_Scene *)py_data)->scene;
seq->type= SEQ_SCENE;
- seq->scene= sce;
+ seq->scene= sceseq;
/*seq->sfra= sce->r.sfra;*/
- seq->len= sce->r.efra - sce->r.sfra + 1;
+ seq->len= sceseq->r.efra - sceseq->r.sfra + 1;
seq->strip= strip= MEM_callocN(sizeof(Strip), "strip");
- strncpy(seq->name + 2, sce->id.name + 2,
+ strncpy(seq->name + 2, sceseq->id.name + 2,
sizeof(seq->name) - 2);
strip->len= seq->len;
strip->us= 1;
} else {
- /* movie, pydata is a path to a movie file */
- char *name = PyString_AsString ( py_data );
- if (!name) {
- /* only free these 2 because other stuff isnt set */
- BLI_remlink(seqbase, seq);
- MEM_freeN(seq);
-
- return EXPP_ReturnPyObjError( PyExc_TypeError,
- "expects a string for chan/bone name and an int for the frame where to put the new key" );
- }
-
- seq->type= SEQ_MOVIE;
+ // RFS: REMOVED MOVIE FROM HERE
}
strncpy(seq->name+2, "Untitled", 21);
intern_pos_update(seq);
diff --git a/source/blender/python/api2_2x/vector.c b/source/blender/python/api2_2x/vector.c
index 33ca993fb49..fe28f0fac42 100644
--- a/source/blender/python/api2_2x/vector.c
+++ b/source/blender/python/api2_2x/vector.c
@@ -42,6 +42,7 @@ char Vector_Resize3D_doc[] = "() - resize a vector to [x,y,z]";
char Vector_Resize4D_doc[] = "() - resize a vector to [x,y,z,w]";
char Vector_toPoint_doc[] = "() - create a new Point Object from this vector";
char Vector_ToTrackQuat_doc[] = "(track, up) - extract a quaternion from the vector and the track and up axis";
+char Vector_reflect_doc[] = "(mirror) - return a vector reflected on the mirror normal";
char Vector_copy_doc[] = "() - return a copy of the vector";
/*-----------------------METHOD DEFINITIONS ----------------------*/
struct PyMethodDef Vector_methods[] = {
@@ -53,6 +54,7 @@ struct PyMethodDef Vector_methods[] = {
{"resize4D", (PyCFunction) Vector_Resize4D, METH_NOARGS, Vector_Resize2D_doc},
{"toPoint", (PyCFunction) Vector_toPoint, METH_NOARGS, Vector_toPoint_doc},
{"toTrackQuat", ( PyCFunction ) Vector_ToTrackQuat, METH_VARARGS, Vector_ToTrackQuat_doc},
+ {"reflect", ( PyCFunction ) Vector_reflect, METH_O, Vector_reflect_doc},
{"copy", (PyCFunction) Vector_copy, METH_NOARGS, Vector_copy_doc},
{"__copy__", (PyCFunction) Vector_copy, METH_NOARGS, Vector_copy_doc},
{NULL, NULL, 0, NULL}
@@ -273,7 +275,55 @@ PyObject *Vector_ToTrackQuat( VectorObject * self, PyObject * args )
return newQuaternionObject(quat, Py_NEW);
}
-
+/*----------------------------Vector.reflect(mirror) ----------------------
+ return a reflected vector on the mirror normal
+ ((2 * DotVecs(vec, mirror)) * mirror) - vec
+ using arithb.c would be nice here */
+PyObject *Vector_reflect( VectorObject * self, PyObject * value )
+{
+ VectorObject *mirrvec;
+ float mirror[3];
+ float vec[3];
+ float reflect[4] = {0.0f, 0.0f, 0.0f, 0.0f};
+ float dot2;
+
+ /* for normalizing */
+ int i;
+ float norm = 0.0f;
+
+ if (!VectorObject_Check(value))
+ return EXPP_ReturnPyObjError( PyExc_TypeError, "expected a vector argument" );
+
+ mirrvec = (VectorObject *)value;
+
+ mirror[0] = mirrvec->vec[0];
+ mirror[1] = mirrvec->vec[1];
+ if (mirrvec->size > 2) mirror[2] = mirrvec->vec[2];
+ else mirror[2] = 0.0;
+
+ /* normalize, whos idea was it not to use arithb.c? :-/ */
+ for(i = 0; i < 3; i++) {
+ norm += mirror[i] * mirror[i];
+ }
+ norm = (float) sqrt(norm);
+ for(i = 0; i < 3; i++) {
+ mirror[i] /= norm;
+ }
+ /* done */
+
+ vec[0] = self->vec[0];
+ vec[1] = self->vec[1];
+ if (self->size > 2) vec[2] = self->vec[2];
+ else vec[2] = 0.0;
+
+ dot2 = 2 * vec[0]*mirror[0]+vec[1]*mirror[1]+vec[2]*mirror[2];
+
+ reflect[0] = (dot2 * mirror[0]) - vec[0];
+ reflect[1] = (dot2 * mirror[1]) - vec[1];
+ reflect[2] = (dot2 * mirror[2]) - vec[2];
+
+ return newVectorObject(reflect, self->size, Py_NEW);
+}
/*----------------------------Vector.copy() --------------------------------------
return a copy of the vector */
diff --git a/source/blender/python/api2_2x/vector.h b/source/blender/python/api2_2x/vector.h
index a86f2ddfe42..61b50d5f458 100644
--- a/source/blender/python/api2_2x/vector.h
+++ b/source/blender/python/api2_2x/vector.h
@@ -52,6 +52,7 @@ PyObject *Vector_Resize3D( VectorObject * self );
PyObject *Vector_Resize4D( VectorObject * self );
PyObject *Vector_toPoint( VectorObject * self );
PyObject *Vector_ToTrackQuat( VectorObject * self, PyObject * args );
+PyObject *Vector_reflect( VectorObject * self, PyObject * value );
PyObject *Vector_copy( VectorObject * self );
PyObject *newVectorObject(float *vec, int size, int type);
diff --git a/source/blender/radiosity/CMakeLists.txt b/source/blender/radiosity/CMakeLists.txt
index 36e9ad19770..502acf1e211 100644
--- a/source/blender/radiosity/CMakeLists.txt
+++ b/source/blender/radiosity/CMakeLists.txt
@@ -29,7 +29,7 @@ FILE(GLOB SRC intern/source/*.c)
SET(INC
extern/include ../blenlib ../blenkernel ../makesdna ../include
../../../intern/guardedalloc ../render/extern/include
- ../render/intern/include
+ ../render/intern/include ../blenloader ../../../extern/glew/include
)
BLENDERLIB_NOLIST(blender_radiosity "${SRC}" "${INC}")
diff --git a/source/blender/radiosity/SConscript b/source/blender/radiosity/SConscript
index 102f79683f9..82d84f5ef16 100644
--- a/source/blender/radiosity/SConscript
+++ b/source/blender/radiosity/SConscript
@@ -5,7 +5,7 @@ sources = env.Glob('intern/source/*.c')
incs = 'extern/include ../blenlib ../blenkernel ../makesdna ../include'
incs += ' #/intern/guardedalloc ../render/extern/include'
-incs += ' ../render/intern/include'
+incs += ' ../render/intern/include ../blenloader #/extern/glew/include'
incs += ' ' + env['BF_OPENGL_INC']
diff --git a/source/blender/radiosity/intern/source/Makefile b/source/blender/radiosity/intern/source/Makefile
index 19768c959c7..5912cdba590 100644
--- a/source/blender/radiosity/intern/source/Makefile
+++ b/source/blender/radiosity/intern/source/Makefile
@@ -36,6 +36,7 @@ include nan_compile.mk
CFLAGS += $(LEVEL_1_C_WARNINGS)
+CPPFLAGS += -I$(NAN_GLEW)/include
CPPFLAGS += -I$(OPENGL_HEADERS)
# not very neat....
@@ -44,6 +45,7 @@ CPPFLAGS += -I../../../blenlib
CPPFLAGS += -I../../../makesdna
CPPFLAGS += -I../../../imbuf
CPPFLAGS += -I../../../
+CPPFLAGS += -I../../../blenloader
CPPFLAGS += -I$(NAN_GUARDEDALLOC)/include
# first /include is my own includes, second are the external includes
diff --git a/source/blender/radiosity/intern/source/radfactors.c b/source/blender/radiosity/intern/source/radfactors.c
index 8c89e806034..ba4dbf1b793 100644
--- a/source/blender/radiosity/intern/source/radfactors.c
+++ b/source/blender/radiosity/intern/source/radfactors.c
@@ -53,9 +53,9 @@
#include "RE_render_ext.h" /* for `RE_zbufferall_radio and RE_zbufferall_radio */
/* locals */
-void rad_setmatrices(RadView *vw);
-void clearsubflagelem(RNode *rn);
-void setsubflagelem(RNode *rn);
+static void rad_setmatrices(RadView *vw);
+static void clearsubflagelem(RNode *rn);
+static void setsubflagelem(RNode *rn);
RadView hemitop, hemiside;
@@ -254,7 +254,7 @@ void rad_make_hocos(RadView *vw)
/* } */
}
-void rad_setmatrices(RadView *vw) /* for hemi's */
+static void rad_setmatrices(RadView *vw) /* for hemi's */
{
float up1[3], len, twist;
@@ -628,7 +628,7 @@ void minmaxradelemfilt(RNode *rn, float *min, float *max, float *errmin, float *
}
}
-void setsubflagelem(RNode *rn)
+static void setsubflagelem(RNode *rn)
{
if(rn->down1) {
@@ -640,7 +640,7 @@ void setsubflagelem(RNode *rn)
}
}
-void clearsubflagelem(RNode *rn)
+static void clearsubflagelem(RNode *rn)
{
if(rn->down1) {
diff --git a/source/blender/radiosity/intern/source/radnode.c b/source/blender/radiosity/intern/source/radnode.c
index 5517a22eb93..ae246476e6d 100644
--- a/source/blender/radiosity/intern/source/radnode.c
+++ b/source/blender/radiosity/intern/source/radnode.c
@@ -50,15 +50,17 @@
#include "radio.h"
+#include "BLO_sys_types.h" // for intptr_t support
+
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
/* locals */
-void *malloc_fast(int size);
-void *calloc_fast(int size);
-void free_fast(void *poin, int siz);
-void deleteTriNodes(RNode *node);
+static void *malloc_fast(int size);
+static void *calloc_fast(int size);
+static void free_fast(void *poin, int siz);
+static void deleteTriNodes(RNode *node);
/* lower because of local type define */
/* void check_mallocgroup(MallocGroup *mg); */
@@ -120,7 +122,7 @@ void check_mallocgroup(MallocGroup *mg)
printf("fastmalloc: shouldnt be here\n");
}
-void *malloc_fast(int size)
+static void *malloc_fast(int size)
{
MallocGroup *mg;
void *retval;
@@ -154,7 +156,7 @@ void *malloc_fast(int size)
return mg->data;
}
-void *calloc_fast(int size)
+static void *calloc_fast(int size)
{
void *poin;
@@ -164,17 +166,17 @@ void *calloc_fast(int size)
return poin;
}
-void free_fast(void *poin, int size)
+static void free_fast(void *poin, int size)
{
MallocGroup *mg;
- long val;
+ intptr_t val;
mg= MallocBase.last;
while(mg) {
if(mg->size==size) {
- if( ((long)poin) >= ((long)mg->data) ) {
- if( ((long)poin) < ((long)(mg->data+MAL_GROUPSIZE*size)) ) {
- val= ((long)poin) - ((long)mg->data);
+ if( ((intptr_t)poin) >= ((intptr_t)mg->data) ) {
+ if( ((intptr_t)poin) < ((intptr_t)(mg->data+MAL_GROUPSIZE*size)) ) {
+ val= ((intptr_t)poin) - ((intptr_t)mg->data);
val/= size;
mg->curfree= val;
mg->flags[val]= 0;
@@ -956,7 +958,7 @@ int comparelevel(RNode *node, RNode *nb, int level)
return 1;
}
-void deleteTriNodes(RNode *node) /* both children of node */
+static void deleteTriNodes(RNode *node) /* both children of node */
{
RNode *n1, *n2;
diff --git a/source/blender/radiosity/intern/source/radpreprocess.c b/source/blender/radiosity/intern/source/radpreprocess.c
index 5f8a39786c1..694cb261b08 100644
--- a/source/blender/radiosity/intern/source/radpreprocess.c
+++ b/source/blender/radiosity/intern/source/radpreprocess.c
@@ -68,6 +68,8 @@
#include "radio.h"
+#include "BLO_sys_types.h" // for intptr_t support
+
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
@@ -179,7 +181,7 @@ int vergedge(const void *v1,const void *v2)
void addedge(float *v1, float *v2, EdSort *es)
{
- if( ((long)v1)<((long)v2) ) {
+ if( ((intptr_t)v1)<((intptr_t)v2) ) {
es->v1= v1;
es->v2= v2;
}
@@ -287,7 +289,7 @@ void setedgepointers()
MEM_freeN(esblock);
}
-int materialIndex(Material *ma)
+static int materialIndex(Material *ma)
{
int i = 0;
for(i=0;i< RG.totmat; i++)
diff --git a/source/blender/readblenfile/intern/BLO_readblenfile.c b/source/blender/readblenfile/intern/BLO_readblenfile.c
index 6e5bf149c7a..ec71611b31d 100644
--- a/source/blender/readblenfile/intern/BLO_readblenfile.c
+++ b/source/blender/readblenfile/intern/BLO_readblenfile.c
@@ -159,7 +159,7 @@ blo_read_runtime(
} else {
//printf("starting to read runtime from %s at datastart %d\n", path, datastart);
lseek(fd, datastart, SEEK_SET);
- bfd = blo_read_blendafterruntime(fd, actualsize-datastart, error_r);
+ bfd = blo_read_blendafterruntime(fd, path, actualsize-datastart, error_r);
fd= -1; // file was closed in blo_read_blendafterruntime()
}
diff --git a/source/blender/render/CMakeLists.txt b/source/blender/render/CMakeLists.txt
index b543dff49ff..0b659554d1a 100644
--- a/source/blender/render/CMakeLists.txt
+++ b/source/blender/render/CMakeLists.txt
@@ -29,7 +29,7 @@ FILE(GLOB SRC intern/source/*.c)
SET(INC
intern/include ../../../intern/guardedalloc ../blenlib ../makesdna
extern/include ../blenkernel ../radiosity/extern/include ../imbuf
- ../quicktime ../include ../../kernel/gen_messaging ../yafray
+ ../quicktime ../include ../../kernel/gen_messaging ../yafray ../blenloader
)
IF(WITH_OPENEXR)
diff --git a/source/blender/render/SConscript b/source/blender/render/SConscript
index b1bc9673f23..f0d1353b0d3 100644
--- a/source/blender/render/SConscript
+++ b/source/blender/render/SConscript
@@ -6,7 +6,7 @@ sources = env.Glob('intern/source/*.c')
incs = 'intern/include #/intern/guardedalloc ../blenlib ../makesdna'
incs += ' extern/include ../blenkernel ../radiosity/extern/include ../imbuf'
-incs += ' ../quicktime ../include ../../kernel/gen_messaging'
+incs += ' ../quicktime ../include ../../kernel/gen_messaging ../blenloader'
defs = []
diff --git a/source/blender/render/extern/include/RE_pipeline.h b/source/blender/render/extern/include/RE_pipeline.h
index 64cf7fcb37b..60557403143 100644
--- a/source/blender/render/extern/include/RE_pipeline.h
+++ b/source/blender/render/extern/include/RE_pipeline.h
@@ -185,7 +185,7 @@ void RE_TileProcessor(struct Render *re, int firsttile, int threaded);
/* only RE_NewRender() needed, main Blender render calls */
void RE_BlenderFrame(struct Render *re, struct Scene *scene, int frame);
-void RE_BlenderAnim(struct Render *re, struct Scene *scene, int sfra, int efra);
+void RE_BlenderAnim(struct Render *re, struct Scene *scene, int sfra, int efra, int tfra);
void RE_ReadRenderResult(struct Scene *scene, struct Scene *scenode);
void RE_WriteRenderResult(RenderResult *rr, char *filename, int compress);
diff --git a/source/blender/render/intern/include/pixelshading.h b/source/blender/render/intern/include/pixelshading.h
index 15d696df89d..c6b11b4af9a 100644
--- a/source/blender/render/intern/include/pixelshading.h
+++ b/source/blender/render/intern/include/pixelshading.h
@@ -56,7 +56,7 @@ int shadeHaloFloat(HaloRen *har,
void shadeSkyPixel(float *collector, float fx, float fy);
void shadeSkyView(float *colf, float *rco, float *view, float *dxyview);
void shadeAtmPixel(struct SunSky *sunsky, float *collector, float fx, float fy, float distance);
-
+void shadeSunView(float *colf, float *view);
/* ------------------------------------------------------------------------- */
#endif
diff --git a/source/blender/render/intern/include/render_types.h b/source/blender/render/intern/include/render_types.h
index 2f97b19f75c..1768b052b54 100644
--- a/source/blender/render/intern/include/render_types.h
+++ b/source/blender/render/intern/include/render_types.h
@@ -44,6 +44,8 @@
#include "RE_shader_ext.h" /* TexResult, ShadeResult, ShadeInput */
#include "sunsky.h"
+#include "BLO_sys_types.h" // for intptr_t support
+
struct Object;
struct MemArena;
struct VertTableNode;
@@ -89,11 +91,11 @@ typedef struct RenderPart
int *rectp; /* polygon index table */
int *rectz; /* zbuffer */
int *rectmask; /* negative zmask */
- long *rectdaps; /* delta acum buffer for pixel structs */
+ intptr_t *rectdaps; /* delta acum buffer for pixel structs */
int *rectbacko; /* object table for backside sss */
int *rectbackp; /* polygon index table for backside sss */
int *rectbackz; /* zbuffer for backside sss */
- long *rectall; /* buffer for all faces for sss */
+ intptr_t *rectall; /* buffer for all faces for sss */
rcti disprect; /* part coordinates within total picture */
int rectx, recty; /* the size */
@@ -226,7 +228,7 @@ struct ISBData;
typedef struct ShadSampleBuf {
struct ShadSampleBuf *next, *prev;
- long *zbuf;
+ intptr_t *zbuf;
char *cbuf;
} ShadSampleBuf;
@@ -416,8 +418,10 @@ typedef struct LampRen {
float xs, ys, dist;
float co[3];
- short type, mode;
+ short type;
+ int mode;
float r, g, b, k;
+ float shdwr, shdwg, shdwb;
float energy, haint;
int lay;
float spotsi,spotbl;
diff --git a/source/blender/render/intern/include/sunsky.h b/source/blender/render/intern/include/sunsky.h
index c61a637269a..f61338bcf27 100644
--- a/source/blender/render/intern/include/sunsky.h
+++ b/source/blender/render/intern/include/sunsky.h
@@ -33,7 +33,7 @@
typedef struct SunSky
{
- short effect_type;
+ short effect_type, skyblendtype, sky_colorspace;
float turbidity;
float theta, phi;
@@ -53,7 +53,9 @@ typedef struct SunSky
float sun_brightness;
float sun_size;
float backscattered_light;
-
+ float skyblendfac;
+ float sky_exposure;
+
float atm_HGg;
float atm_SunIntensity;
@@ -84,7 +86,8 @@ typedef struct SunSky
* back_scatter, controls back scatter light
* */
void InitSunSky(struct SunSky *sunsky, float turb, float *toSun, float horizon_brightness,
- float spread,float sun_brightness, float sun_size, float back_scatter);
+ float spread,float sun_brightness, float sun_size, float back_scatter,
+ float skyblendfac, short skyblendtype, float sky_exposure, float sky_colorspace);
/**
* GetSkyXYZRadiance:
diff --git a/source/blender/render/intern/include/texture.h b/source/blender/render/intern/include/texture.h
index 8e56c4a852f..be5471e07c4 100644
--- a/source/blender/render/intern/include/texture.h
+++ b/source/blender/render/intern/include/texture.h
@@ -55,7 +55,7 @@ struct ImBuf;
void do_halo_tex(struct HaloRen *har, float xn, float yn, float *colf);
void do_sky_tex(float *rco, float *lo, float *dxyview, float *hor, float *zen, float *blend, int skyflag);
void do_material_tex(struct ShadeInput *shi);
-void do_lamp_tex(LampRen *la, float *lavec, struct ShadeInput *shi, float *colf);
+void do_lamp_tex(LampRen *la, float *lavec, struct ShadeInput *shi, float *colf, int effect);
void init_render_textures(Render *re);
diff --git a/source/blender/render/intern/source/convertblender.c b/source/blender/render/intern/source/convertblender.c
index e4a5ad67631..05e2d0a521a 100644
--- a/source/blender/render/intern/source/convertblender.c
+++ b/source/blender/render/intern/source/convertblender.c
@@ -674,94 +674,6 @@ static void calc_vertexnormals(Render *re, ObjectRen *obr, int do_tangent, int d
MEM_freeN(vtangents);
}
-// NT same as calc_vertexnormals, but dont modify the existing vertex normals
-// only recalculate other render data. If this is at some point used for other things than fluidsim,
-// this could be made on option for the normal calc_vertexnormals
-static void calc_fluidsimnormals(Render *re, ObjectRen *obr, int do_nmap_tangent)
-{
- int a;
-
- /* dont clear vertex normals here */
- // OFF for(a=0; a<obr->totvert; a++) { VertRen *ver= RE_findOrAddVert(obr, a); ver->n[0]=ver->n[1]=ver->n[2]= 0.0; }
- /* calculate cos of angles and point-masses, use as weight factor to add face normal to vertex */
- for(a=0; a<obr->totvlak; a++) {
- VlakRen *vlr= RE_findOrAddVlak(obr, a);
- if(vlr->flag & ME_SMOOTH) {
- VertRen *v1= vlr->v1;
- VertRen *v2= vlr->v2;
- VertRen *v3= vlr->v3;
- VertRen *v4= vlr->v4;
- float n1[3], n2[3], n3[3], n4[3];
- float fac1, fac2, fac3, fac4=0.0f;
-
- if(re->flag & R_GLOB_NOPUNOFLIP)
- vlr->flag |= R_NOPUNOFLIP;
-
- VecSubf(n1, v2->co, v1->co);
- Normalize(n1);
- VecSubf(n2, v3->co, v2->co);
- Normalize(n2);
- if(v4==NULL) {
- VecSubf(n3, v1->co, v3->co);
- Normalize(n3);
- fac1= saacos(-n1[0]*n3[0]-n1[1]*n3[1]-n1[2]*n3[2]);
- fac2= saacos(-n1[0]*n2[0]-n1[1]*n2[1]-n1[2]*n2[2]);
- fac3= saacos(-n2[0]*n3[0]-n2[1]*n3[1]-n2[2]*n3[2]);
- }
- else {
- VecSubf(n3, v4->co, v3->co);
- Normalize(n3);
- VecSubf(n4, v1->co, v4->co);
- Normalize(n4);
-
- fac1= saacos(-n4[0]*n1[0]-n4[1]*n1[1]-n4[2]*n1[2]);
- fac2= saacos(-n1[0]*n2[0]-n1[1]*n2[1]-n1[2]*n2[2]);
- fac3= saacos(-n2[0]*n3[0]-n2[1]*n3[1]-n2[2]*n3[2]);
- fac4= saacos(-n3[0]*n4[0]-n3[1]*n4[1]-n3[2]*n4[2]);
-
- if(!(vlr->flag & R_NOPUNOFLIP)) {
- if( check_vnormal(vlr->n, v4->n) ) fac4= -fac4;
- }
- }
-
- //if(do_nmap_tangent)
- // calc_tangent_vector(obr, vlr, fac1, fac2, fac3, fac4);
- }
- if(do_nmap_tangent) {
- /* tangents still need to be calculated for flat faces too */
- /* weighting removed, they are not vertexnormals */
- //calc_tangent_vector(obr, vlr);
- }
- }
-
- /* do solid faces */
- for(a=0; a<obr->totvlak; a++) {
- VlakRen *vlr= RE_findOrAddVlak(obr, a);
- if((vlr->flag & ME_SMOOTH)==0) {
- float *f1= vlr->v1->n;
- if(f1[0]==0.0 && f1[1]==0.0 && f1[2]==0.0) VECCOPY(f1, vlr->n);
- f1= vlr->v2->n;
- if(f1[0]==0.0 && f1[1]==0.0 && f1[2]==0.0) VECCOPY(f1, vlr->n);
- f1= vlr->v3->n;
- if(f1[0]==0.0 && f1[1]==0.0 && f1[2]==0.0) VECCOPY(f1, vlr->n);
- if(vlr->v4) {
- f1= vlr->v4->n;
- if(f1[0]==0.0 && f1[1]==0.0 && f1[2]==0.0) VECCOPY(f1, vlr->n);
- }
- }
- }
-
- /* normalize vertex normals */
- for(a=0; a<obr->totvert; a++) {
- VertRen *ver= RE_findOrAddVert(obr, a);
- Normalize(ver->n);
- if(do_nmap_tangent) {
- float *tav= RE_vertren_get_tangent(obr, ver, 0);
- if(tav) Normalize(tav);
- }
- }
-}
-
/* ------------------------------------------------------------------------- */
/* Autosmoothing: */
/* ------------------------------------------------------------------------- */
@@ -1565,7 +1477,7 @@ static int render_new_particle_system(Render *re, ObjectRen *obr, ParticleSystem
float hasize, pa_size, pa_time, r_tilt, cfra=bsystem_time(ob,(float)CFRA,0.0);
float adapt_angle=0.0, adapt_pix=0.0, random, simplify[2];
int i, a, k, max_k=0, totpart, totuv=0, totcol=0, override_uv=-1, dosimplify = 0, dosurfacecache = 0;
- int path_possible=0, keys_possible=0, baked_keys=0, totchild=psys->totchild;
+ int path_possible=0, keys_possible=0, baked_keys=0, totchild=0;
int seed, path_nbr=0, path=0, orco1=0, adapt=0, uv[3]={0,0,0}, num;
int totface, *origindex = 0;
char **uv_name=0;
@@ -1573,6 +1485,8 @@ static int render_new_particle_system(Render *re, ObjectRen *obr, ParticleSystem
/* 1. check that everything is ok & updated */
if(psys==NULL)
return 0;
+
+ totchild=psys->totchild;
part=psys->part;
pars=psys->particles;
@@ -1764,7 +1678,7 @@ static int render_new_particle_system(Render *re, ObjectRen *obr, ParticleSystem
psys->lattice=psys_get_lattice(ob,psys);
/* 3. start creating renderable things */
- for(a=0,pa=pars; a<totpart+totchild; a++, pa++) {
+ for(a=0,pa=pars; a<totpart+totchild; a++, pa++, seed++) {
random = rng_getFloat(rng);
if(a<totpart){
@@ -1789,10 +1703,10 @@ static int render_new_particle_system(Render *re, ObjectRen *obr, ParticleSystem
/* get orco */
if(tpsys && (part->from==PART_FROM_PARTICLE || part->phystype==PART_PHYS_NO)){
tpa=tpsys->particles+pa->num;
- psys_particle_on_emitter(ob, psmd,tpart->from,tpa->num,pa->num_dmcache,tpa->fuv,tpa->foffset,co,nor,0,0,orco,0);
+ psys_particle_on_emitter(psmd,tpart->from,tpa->num,pa->num_dmcache,tpa->fuv,tpa->foffset,co,nor,0,0,orco,0);
}
else
- psys_particle_on_emitter(ob, psmd,part->from,pa->num,pa->num_dmcache,pa->fuv,pa->foffset,co,nor,0,0,orco,0);
+ psys_particle_on_emitter(psmd,part->from,pa->num,pa->num_dmcache,pa->fuv,pa->foffset,co,nor,0,0,orco,0);
num= pa->num_dmcache;
@@ -1866,13 +1780,13 @@ static int render_new_particle_system(Render *re, ObjectRen *obr, ParticleSystem
/* get orco */
if(part->childtype == PART_CHILD_FACES) {
- psys_particle_on_emitter(ob, psmd,
+ psys_particle_on_emitter(psmd,
PART_FROM_FACE, cpa->num,DMCACHE_ISCHILD,
cpa->fuv,cpa->foffset,co,nor,0,0,orco,0);
}
else {
ParticleData *par = psys->particles + cpa->parent;
- psys_particle_on_emitter(ob, psmd, part->from,
+ psys_particle_on_emitter(psmd, part->from,
par->num,DMCACHE_ISCHILD,par->fuv,
par->foffset,co,nor,0,0,orco,0);
}
@@ -2528,7 +2442,8 @@ static int dl_surf_to_renderdata(ObjectRen *obr, DispList *dl, Material **matar,
VertRen *v1, *v2, *v3, *v4, *ver;
VlakRen *vlr, *vlr1, *vlr2, *vlr3;
Curve *cu= ob->data;
- float *data, n1[3], flen;
+ float *data, n1[3];
+ /*float flen; - as yet unused */
int u, v, orcoret= 0;
int p1, p2, p3, p4, a;
int sizeu, nsizeu, sizev, nsizev;
@@ -2600,7 +2515,7 @@ static int dl_surf_to_renderdata(ObjectRen *obr, DispList *dl, Material **matar,
vlr= RE_findOrAddVlak(obr, obr->totvlak++);
vlr->v1= v1; vlr->v2= v2; vlr->v3= v3; vlr->v4= v4;
- flen= CalcNormFloat4(vlr->v4->co, vlr->v3->co, vlr->v2->co, vlr->v1->co, n1);
+ /* flen= CalcNormFloat4(vlr->v4->co, vlr->v3->co, vlr->v2->co, vlr->v1->co, n1); - as yet unused */
VECCOPY(vlr->n, n1);
vlr->mat= matar[ dl->col];
@@ -3099,7 +3014,6 @@ static void init_render_mesh(Render *re, ObjectRen *obr, int timeoffset)
int need_orco=0, need_stress=0, need_nmap_tangent=0, need_tangent=0;
int a, a1, ok, vertofs;
int end, do_autosmooth=0, totvert = 0;
- int useFluidmeshNormals= 0; // NT fluidsim, use smoothed normals?
int use_original_normals= 0;
me= ob->data;
@@ -3179,12 +3093,6 @@ static void init_render_mesh(Render *re, ObjectRen *obr, int timeoffset)
}
}
- if((ob->fluidsimFlag & OB_FLUIDSIM_ENABLE) &&
- (ob->fluidsimSettings->type & OB_FLUIDSIM_DOMAIN)&&
- (ob->fluidsimSettings->meshSurface) ) {
- useFluidmeshNormals = 1;
- }
-
mvert= dm->getVertArray(dm);
totvert= dm->getNumVerts(dm);
@@ -3207,17 +3115,6 @@ static void init_render_mesh(Render *re, ObjectRen *obr, int timeoffset)
if(do_autosmooth==0) /* autosmooth on original unrotated data to prevent differences between frames */
MTC_Mat4MulVecfl(mat, ver->co);
- if(useFluidmeshNormals) {
- /* normals are inverted in render */
- xn = -mvert->no[0]/ 32767.0;
- yn = -mvert->no[1]/ 32767.0;
- zn = -mvert->no[2]/ 32767.0;
- /* transfor to cam space */
- ver->n[0]= imat[0][0]*xn+imat[0][1]*yn+imat[0][2]*zn;
- ver->n[1]= imat[1][0]*xn+imat[1][1]*yn+imat[1][2]*zn;
- ver->n[2]= imat[2][0]*xn+imat[2][1]*yn+imat[2][2]*zn;
- } // useFluidmeshNormals
-
if(orco) {
ver->orco= orco;
orco+=3;
@@ -3397,12 +3294,7 @@ static void init_render_mesh(Render *re, ObjectRen *obr, int timeoffset)
autosmooth(re, obr, mat, me->smoothresh);
}
- if(useFluidmeshNormals) {
- // do not recalculate, only init render data
- calc_fluidsimnormals(re, obr, need_tangent||need_nmap_tangent);
- } else {
- calc_vertexnormals(re, obr, need_tangent, need_nmap_tangent);
- }
+ calc_vertexnormals(re, obr, need_tangent, need_nmap_tangent);
if(need_stress)
calc_edge_stress(re, obr, me);
@@ -3564,6 +3456,9 @@ static GroupObject *add_render_lamp(Render *re, Object *ob)
lar->r= lar->energy*la->r;
lar->g= lar->energy*la->g;
lar->b= lar->energy*la->b;
+ lar->shdwr= la->shdwr;
+ lar->shdwg= la->shdwg;
+ lar->shdwb= la->shdwb;
lar->k= la->k;
// area
@@ -3633,7 +3528,8 @@ static GroupObject *add_render_lamp(Render *re, Object *ob)
Normalize(vec);
InitSunSky(lar->sunsky, la->atm_turbidity, vec, la->horizon_brightness,
- la->spread, la->sun_brightness, la->sun_size, la->backscattered_light);
+ la->spread, la->sun_brightness, la->sun_size, la->backscattered_light,
+ la->skyblendfac, la->skyblendtype, la->sky_exposure, la->sky_colorspace);
InitAtmosphere(lar->sunsky, la->sun_intensity, 1.0, 1.0, la->atm_inscattering_factor, la->atm_extinction_factor,
la->atm_distance_factor);
@@ -3716,7 +3612,10 @@ static GroupObject *add_render_lamp(Render *re, Object *ob)
for(c=0; c<MAX_MTEX; c++) {
if(la->mtex[c] && la->mtex[c]->tex) {
- lar->mode |= LA_TEXTURE;
+ if (la->mtex[c]->mapto & LAMAP_COL)
+ lar->mode |= LA_TEXTURE;
+ if (la->mtex[c]->mapto & LAMAP_SHAD)
+ lar->mode |= LA_SHAD_TEX;
if(G.rendering) {
if(re->osa) {
@@ -4576,17 +4475,19 @@ static int allow_render_object(Object *ob, int nolamps, int onlyselected, Object
static int allow_render_dupli_instance(Render *re, DupliObject *dob, Object *obd)
{
ParticleSystem *psys;
- Material ***material;
+ Material *ma;
short a, *totmaterial;
- /* don't allow objects with halos */
+ /* don't allow objects with halos. we need to have
+ * all halo's to sort them globally in advance */
totmaterial= give_totcolp(obd);
- material= give_matarar(obd);
- if(totmaterial && material) {
- for(a= 0; a<*totmaterial; a++)
- if((*material)[a] && (*material)[a]->mode & MA_HALO)
+ if(totmaterial) {
+ for(a= 0; a<*totmaterial; a++) {
+ ma= give_current_material(obd, a);
+ if(ma && (ma->mode & MA_HALO))
return 0;
+ }
}
for(psys=obd->particlesystem.first; psys; psys=psys->next)
@@ -4889,6 +4790,7 @@ void RE_Database_FromScene(Render *re, Scene *scene, int use_camera_view)
Mat4Ortho(re->scene->camera->obmat);
Mat4Invert(mat, re->scene->camera->obmat);
RE_SetView(re, mat);
+ re->scene->camera->recalc= OB_RECALC_OB; /* force correct matrix for scaled cameras */
}
init_render_world(re); /* do first, because of ambient. also requires re->osa set correct */
@@ -5281,7 +5183,7 @@ static int load_fluidsimspeedvectors(Render *re, ObjectInstanceRen *obi, float *
//fsvec[0] = fsvec[1] = fsvec[2] = fsvec[3] = 0.; fsvec[2] = 2.; // NT fixed test
for(j=0;j<3;j++) fsvec[j] = vverts[a].co[j];
- /* (bad) HACK insert average velocity if none is there (see previous comment */
+ /* (bad) HACK insert average velocity if none is there (see previous comment) */
if((fsvec[0] == 0.0) && (fsvec[1] == 0.0) && (fsvec[2] == 0.0))
{
fsvec[0] = avgvel[0];
@@ -5425,6 +5327,7 @@ void RE_Database_FromScene_Vectors(Render *re, Scene *sce)
oldobi= table->first;
for(obi= re->instancetable.first; obi && oldobi; obi= obi->next) {
int ok= 1;
+ FluidsimModifierData *fluidmd;
if(!(obi->obr->flag & R_NEED_VECTORS))
continue;
@@ -5448,7 +5351,8 @@ void RE_Database_FromScene_Vectors(Render *re, Scene *sce)
}
// NT check for fluidsim special treatment
- if((obi->ob->fluidsimFlag & OB_FLUIDSIM_ENABLE) && (obi->ob->fluidsimSettings->type & OB_FLUIDSIM_DOMAIN)) {
+ fluidmd = (FluidsimModifierData *)modifiers_findByType(obi->ob, eModifierType_Fluidsim);
+ if(fluidmd && fluidmd->fss && (fluidmd->fss->type & OB_FLUIDSIM_DOMAIN)) {
// use preloaded per vertex simulation data , only does calculation for step=1
// NOTE/FIXME - velocities and meshes loaded unnecessarily often during the database_fromscene_vectors calls...
load_fluidsimspeedvectors(re, obi, oldobi->vectors, step);
diff --git a/source/blender/render/intern/source/imagetexture.c b/source/blender/render/intern/source/imagetexture.c
index c2d27f8f3a7..b9a2acb8b1c 100644
--- a/source/blender/render/intern/source/imagetexture.c
+++ b/source/blender/render/intern/source/imagetexture.c
@@ -577,10 +577,10 @@ static void boxsample(ImBuf *ibuf, float minx, float miny, float maxx, float max
if(texres->talpha==0) texres->ta= 1.0;
if(alphaclip!=1.0) {
- /* this is for later investigation, premul or not? */
- /* texres->tr*= alphaclip; */
- /* texres->tg*= alphaclip; */
- /* texres->tb*= alphaclip; */
+ /* premul it all */
+ texres->tr*= alphaclip;
+ texres->tg*= alphaclip;
+ texres->tb*= alphaclip;
texres->ta*= alphaclip;
}
}
diff --git a/source/blender/render/intern/source/initrender.c b/source/blender/render/intern/source/initrender.c
index e9035f29b3c..40c0edb6e5f 100644
--- a/source/blender/render/intern/source/initrender.c
+++ b/source/blender/render/intern/source/initrender.c
@@ -257,7 +257,7 @@ void make_sample_tables(Render *re)
{
static int firsttime= 1;
SampleTables *st;
- float flweight[32], fmask[256];
+ float flweight[32];
float weight[32], totw, val, *fpx1, *fpx2, *fpy1, *fpy2, *m3, *m4;
int i, j, a;
@@ -300,11 +300,6 @@ void make_sample_tables(Render *re)
st->centLut[a]= -0.45+((float)a)/16.0;
}
- val= 1.0/((float)re->osa);
- for(a=0; a<256; a++) {
- fmask[a]= ((float)st->cmask[a])*val;
- }
-
/* calculate totw */
totw= 0.0;
for(j= -1; j<2; j++) {
diff --git a/source/blender/render/intern/source/occlusion.c b/source/blender/render/intern/source/occlusion.c
index d70c51b83bc..d2d2cf3fb77 100644
--- a/source/blender/render/intern/source/occlusion.c
+++ b/source/blender/render/intern/source/occlusion.c
@@ -402,7 +402,7 @@ static int occ_find_bbox_axis(OcclusionTree *tree, int begin, int end, float *mi
return axis;
}
-void occ_node_from_face(OccFace *face, OccNode *node)
+static void occ_node_from_face(OccFace *face, OccNode *node)
{
float n[3];
@@ -1143,7 +1143,7 @@ static float occ_quad_form_factor(float *p, float *n, float *q0, float *q1, floa
return result;
}
-float occ_form_factor(OccFace *face, float *p, float *n)
+static float occ_form_factor(OccFace *face, float *p, float *n)
{
ObjectInstanceRen *obi;
VlakRen *vlr;
@@ -1670,7 +1670,7 @@ void cache_occ_samples(Render *re, RenderPart *pa, ShadeSample *ssamp)
OcclusionCacheSample *sample;
OccFace exclude;
ShadeInput *shi;
- long *rd=NULL;
+ intptr_t *rd=NULL;
int *ro=NULL, *rp=NULL, *rz=NULL, onlyshadow;
int x, y, step = CACHE_STEP;
diff --git a/source/blender/render/intern/source/pipeline.c b/source/blender/render/intern/source/pipeline.c
index 6a0af82b4d7..1dfcbc6e45d 100644
--- a/source/blender/render/intern/source/pipeline.c
+++ b/source/blender/render/intern/source/pipeline.c
@@ -38,6 +38,7 @@
#include "DNA_scene_types.h"
#include "DNA_userdef_types.h"
+#include "BKE_utildefines.h"
#include "BKE_global.h"
#include "BKE_image.h"
#include "BKE_main.h"
@@ -138,7 +139,7 @@ static void print_error(char *str) {printf("ERROR: %s\n", str);}
static void stats_background(RenderStats *rs)
{
- extern unsigned long mem_in_use;
+ uintptr_t mem_in_use= MEM_get_memory_in_use();
float megs_used_memory= mem_in_use/(1024.0*1024.0);
char str[400], *spos= str;
@@ -961,7 +962,6 @@ void RE_GetResultImage(Render *re, RenderResult *rr)
}
}
-#define FTOCHAR(val) val<=0.0f?0: (val>=1.0f?255: (char)(255.0f*val))
/* caller is responsible for allocating rect in correct size! */
void RE_ResultGet32(Render *re, unsigned int *rect)
{
@@ -1889,6 +1889,7 @@ static void do_render_fields_blur_3d(Render *re)
re->result->tilerect= re->disprect;
/* this copying sequence could become function? */
+ /* weak is: it chances disprect from border */
re->disprect.xmin= re->disprect.ymin= 0;
re->disprect.xmax= re->winx;
re->disprect.ymax= re->winy;
@@ -2346,6 +2347,12 @@ static int is_rendering_allowed(Render *re)
if(re->osa==0)
re->r.scemode &= ~R_FULL_SAMPLE;
+ /* no fullsample and edge */
+ if((re->r.scemode & R_FULL_SAMPLE) && (re->r.mode & R_EDGE)) {
+ re->error("Full Sample doesn't support Edge Enhance");
+ return 0;
+ }
+
}
else
re->r.scemode &= ~R_FULL_SAMPLE; /* clear to be sure */
@@ -2407,7 +2414,7 @@ static int is_rendering_allowed(Render *re)
}
/* evaluating scene options for general Blender render */
-static int render_initialize_from_scene(Render *re, Scene *scene)
+static int render_initialize_from_scene(Render *re, Scene *scene, int anim)
{
int winx, winy;
rcti disprect;
@@ -2435,6 +2442,12 @@ static int render_initialize_from_scene(Render *re, Scene *scene)
re->scene= scene;
+ /* not too nice, but it survives anim-border render */
+ if(anim) {
+ re->disprect= disprect;
+ return 1;
+ }
+
/* check all scenes involved */
tag_scenes_for_render(re);
@@ -2466,7 +2479,7 @@ void RE_BlenderFrame(Render *re, Scene *scene, int frame)
scene->r.cfra= frame;
- if(render_initialize_from_scene(re, scene)) {
+ if(render_initialize_from_scene(re, scene, 0)) {
do_render_all_options(re);
}
@@ -2546,13 +2559,15 @@ static void do_write_image_or_movie(Render *re, Scene *scene, bMovieHandle *mh)
}
/* saves images to disk */
-void RE_BlenderAnim(Render *re, Scene *scene, int sfra, int efra)
+void RE_BlenderAnim(Render *re, Scene *scene, int sfra, int efra, int tfra)
{
bMovieHandle *mh= BKE_get_movie_handle(scene->r.imtype);
+ unsigned int lay;
int cfrao= scene->r.cfra;
+ int nfra;
- /* do not call for each frame, it initializes & pops output window */
- if(!render_initialize_from_scene(re, scene))
+ /* do not fully call for each frame, it initializes & pops output window */
+ if(!render_initialize_from_scene(re, scene, 0))
return;
/* ugly global still... is to prevent renderwin events and signal subsurfs etc to make full resol */
@@ -2578,8 +2593,29 @@ void RE_BlenderAnim(Render *re, Scene *scene, int sfra, int efra)
}
}
} else {
- for(scene->r.cfra= sfra; scene->r.cfra<=efra; scene->r.cfra++) {
+ for(nfra= sfra, scene->r.cfra= sfra; scene->r.cfra<=efra; scene->r.cfra++) {
char name[FILE_MAX];
+
+ /* only border now, todo: camera lens. (ton) */
+ render_initialize_from_scene(re, scene, 1);
+
+ if(nfra!=scene->r.cfra) {
+ /*
+ * Skip this frame, but update for physics and particles system.
+ * From convertblender.c:
+ * in localview, lamps are using normal layers, objects only local bits.
+ */
+ if(scene->lay & 0xFF000000)
+ lay= scene->lay & 0xFF000000;
+ else
+ lay= scene->lay;
+
+ scene_update_for_newframe(scene, lay);
+ continue;
+ }
+ else
+ nfra+= tfra;
+
if (scene->r.mode & (R_NO_OVERWRITE | R_TOUCH) ) {
BKE_makepicstring(name, scene->r.pic, scene->r.cfra, scene->r.imtype);
}
diff --git a/source/blender/render/intern/source/pixelshading.c b/source/blender/render/intern/source/pixelshading.c
index 2e3509f0471..60723963af9 100644
--- a/source/blender/render/intern/source/pixelshading.c
+++ b/source/blender/render/intern/source/pixelshading.c
@@ -45,6 +45,7 @@
#include "BKE_image.h"
#include "BKE_global.h"
+#include "BKE_material.h"
#include "BKE_texture.h"
#include "BKE_utildefines.h"
@@ -141,7 +142,7 @@ static void render_lighting_halo(HaloRen *har, float *colf)
VECCOPY(shi.co, rco);
shi.osatex= 0;
- do_lamp_tex(lar, lv, &shi, lacol);
+ do_lamp_tex(lar, lv, &shi, lacol, LA_TEXTURE);
}
if(lar->type==LA_SPOT) {
@@ -569,33 +570,37 @@ void shadeSkyView(float *colf, float *rco, float *view, float *dxyview)
}
/* shade sky according to sun lamps, all parameters are like shadeSkyView except sunsky*/
-void shadeSunView(struct SunSky *sunsky, float *colf, float *rco, float *view, float *dxyview)
+void shadeSunView(float *colf, float *view)
{
- float colorxyz[3];
- float scale;
+ GroupObject *go;
+ LampRen *lar;
+ float sview[3];
+ int do_init= 1;
+
+ for(go=R.lights.first; go; go= go->next) {
+ lar= go->lampren;
+ if(lar->type==LA_SUN && lar->sunsky && (lar->sunsky->effect_type & LA_SUN_EFFECT_SKY)){
+ float sun_collector[3];
+ float colorxyz[3];
- /**
- sunAngle = sqrt(sunsky->sunSolidAngle / M_PI);
-
- sunDir[0] = sunsky->toSun[0];
- sunDir[1] = sunsky->toSun[1];
- sunDir[2] = sunsky->toSun[2];
- */
+ if(do_init) {
+
+ VECCOPY(sview, view);
+ Normalize(sview);
+ MTC_Mat3MulVecfl(R.imat, sview);
+ if (sview[2] < 0.0)
+ sview[2] = 0.0;
+ Normalize(sview);
+ do_init= 0;
+ }
- Normalize(view);
- MTC_Mat3MulVecfl(R.imat, view);
- if (view[2] < 0.0)
- view[2] = 0.0;
- Normalize(view);
- GetSkyXYZRadiancef(sunsky, view, colorxyz);
- scale = MAX3(colorxyz[0], colorxyz[1], colorxyz[2]);
- colorxyz[0] /= scale;
- colorxyz[1] /= scale;
- colorxyz[2] /= scale;
-
- xyz_to_rgb(colorxyz[0], colorxyz[1], colorxyz[2], &colf[0], &colf[1], &colf[2]);
-
- ClipColor(colf);
+ GetSkyXYZRadiancef(lar->sunsky, sview, colorxyz);
+ xyz_to_rgb(colorxyz[0], colorxyz[1], colorxyz[2], &sun_collector[0], &sun_collector[1], &sun_collector[2],
+ lar->sunsky->sky_colorspace);
+
+ ramp_blend(lar->sunsky->skyblendtype, colf, colf+1, colf+2, lar->sunsky->skyblendfac, sun_collector);
+ }
+ }
}
@@ -605,11 +610,6 @@ void shadeSunView(struct SunSky *sunsky, float *colf, float *rco, float *view, f
void shadeSkyPixel(float *collector, float fx, float fy)
{
float view[3], dxyview[2];
- float sun_collector[3];
- float suns_color[3];
- short num_sun_lamp;
- GroupObject *go;
- LampRen *lar;
/*
The rules for sky:
@@ -656,34 +656,9 @@ void shadeSkyPixel(float *collector, float fx, float fy)
shadeSkyView(collector, NULL, view, dxyview);
collector[3] = 0.0f;
}
-
- suns_color[0] = suns_color[1] = suns_color[2] = 0;
- num_sun_lamp = 0;
- for(go=R.lights.first; go; go= go->next) {
- lar= go->lampren;
- if(lar->type==LA_SUN && lar->sunsky && (lar->sunsky->effect_type & LA_SUN_EFFECT_SKY)){
-
- num_sun_lamp ++;
- calc_view_vector(view, fx, fy);
- Normalize(view);
-
- shadeSunView(lar->sunsky, sun_collector, NULL, view, NULL);
- suns_color[0] += sun_collector[0];
- suns_color[1] += sun_collector[1];
- suns_color[2] += sun_collector[2];
-
- }
- }
- if( num_sun_lamp > 0 ){
- suns_color[0] /= num_sun_lamp;
- suns_color[1] /= num_sun_lamp;
- suns_color[2] /= num_sun_lamp;
-
- collector[0] += suns_color[0];
- collector[1] += suns_color[1];
- collector[2] += suns_color[2];
- ClipColor(collector);
- }
+
+ calc_view_vector(view, fx, fy);
+ shadeSunView(collector, view);
}
/* aerial perspective */
diff --git a/source/blender/render/intern/source/rayshade.c b/source/blender/render/intern/source/rayshade.c
index c352a83d0f4..9d457e7f0fc 100644
--- a/source/blender/render/intern/source/rayshade.c
+++ b/source/blender/render/intern/source/rayshade.c
@@ -397,6 +397,7 @@ static void ray_fadeout_endcolor(float *col, ShadeInput *origshi, ShadeInput *sh
Normalize(shi->view);
shadeSkyView(col, isec->start, shi->view, NULL);
+ shadeSunView(col, shi->view);
}
}
@@ -633,24 +634,27 @@ void init_jitter_plane(LampRen *lar)
/* at least 4, or max threads+1 tables */
if(BLENDER_MAX_THREADS < 4) x= 4;
else x= BLENDER_MAX_THREADS+1;
- fp= lar->jitter= MEM_mallocN(x*tot*2*sizeof(float), "lamp jitter tab");
+ fp= lar->jitter= MEM_callocN(x*tot*2*sizeof(float), "lamp jitter tab");
- /* set per-lamp fixed seed */
- BLI_srandom(tot);
-
- /* fill table with random locations, area_size large */
- for(x=0; x<tot; x++, fp+=2) {
- fp[0]= (BLI_frand()-0.5)*lar->area_size;
- fp[1]= (BLI_frand()-0.5)*lar->area_sizey;
- }
-
- while(iter--) {
- fp= lar->jitter;
- for(x=tot; x>0; x--, fp+=2) {
- DP_energy(lar->jitter, fp, tot, lar->area_size, lar->area_sizey);
+ /* if 1 sample, we leave table to be zero's */
+ if(tot>1) {
+
+ /* set per-lamp fixed seed */
+ BLI_srandom(tot);
+
+ /* fill table with random locations, area_size large */
+ for(x=0; x<tot; x++, fp+=2) {
+ fp[0]= (BLI_frand()-0.5)*lar->area_size;
+ fp[1]= (BLI_frand()-0.5)*lar->area_sizey;
}
- }
-
+
+ while(iter--) {
+ fp= lar->jitter;
+ for(x=tot; x>0; x--, fp+=2) {
+ DP_energy(lar->jitter, fp, tot, lar->area_size, lar->area_sizey);
+ }
+ }
+ }
/* create the dithered tables (could just check lamp type!) */
jitter_plane_offset(lar->jitter, lar->jitter+2*tot, tot, lar->area_size, lar->area_sizey, 0.5f, 0.0f);
jitter_plane_offset(lar->jitter, lar->jitter+4*tot, tot, lar->area_size, lar->area_sizey, 0.5f, 0.5f);
@@ -733,7 +737,7 @@ static void hammersley_create(double *out, int n)
}
}
-struct QMCSampler *QMC_initSampler(int type, int tot)
+static struct QMCSampler *QMC_initSampler(int type, int tot)
{
QMCSampler *qsa = MEM_callocN(sizeof(QMCSampler), "qmc sampler");
qsa->samp2d = MEM_callocN(2*sizeof(double)*tot, "qmc sample table");
@@ -882,7 +886,7 @@ void init_render_qmcsampler(Render *re)
re->qmcsamplers= MEM_callocN(sizeof(ListBase)*BLENDER_MAX_THREADS, "QMCListBase");
}
-QMCSampler *get_thread_qmcsampler(Render *re, int thread, int type, int tot)
+static QMCSampler *get_thread_qmcsampler(Render *re, int thread, int type, int tot)
{
QMCSampler *qsa;
@@ -903,7 +907,7 @@ QMCSampler *get_thread_qmcsampler(Render *re, int thread, int type, int tot)
return qsa;
}
-void release_thread_qmcsampler(Render *re, int thread, QMCSampler *qsa)
+static void release_thread_qmcsampler(Render *re, int thread, QMCSampler *qsa)
{
qsa->used= 0;
}
@@ -1173,7 +1177,6 @@ static void trace_reflect(float *col, ShadeInput *shi, ShadeResult *shr, float f
/* extern call from render loop */
void ray_trace(ShadeInput *shi, ShadeResult *shr)
{
- VlakRen *vlr;
float i, f, f1, fr, fg, fb;
float mircol[4], tracol[4];
float diff[3];
@@ -1181,7 +1184,7 @@ void ray_trace(ShadeInput *shi, ShadeResult *shr)
do_tra= ((shi->mat->mode & (MA_RAYTRANSP)) && shr->alpha!=1.0f);
do_mir= ((shi->mat->mode & MA_RAYMIRROR) && shi->ray_mirror!=0.0f);
- vlr= shi->vlr;
+
/* raytrace mirror amd refract like to separate the spec color */
if(shi->combinedflag & SCE_PASS_SPEC)
@@ -1524,7 +1527,7 @@ static float *sphere_sampler(int type, int resol, int thread, int xs, int ys)
}
}
-void ray_ao_qmc(ShadeInput *shi, float *shadfac)
+static void ray_ao_qmc(ShadeInput *shi, float *shadfac)
{
Isect isec;
QMCSampler *qsa=NULL;
@@ -1535,7 +1538,6 @@ void ray_ao_qmc(ShadeInput *shi, float *shadfac)
float fac=0.0f, prev=0.0f;
float adapt_thresh = G.scene->world->ao_adapt_thresh;
float adapt_speed_fac = G.scene->world->ao_adapt_speed_fac;
- float bias = G.scene->world->aobias;
int samples=0;
int max_samples = R.wrld.aosamp*R.wrld.aosamp;
@@ -1563,13 +1565,10 @@ void ray_ao_qmc(ShadeInput *shi, float *shadfac)
dxyview[2]= 0.0f;
}
- /* bias prevents smoothed faces to appear flat */
if(shi->vlr->flag & R_SMOOTH) {
- bias= G.scene->world->aobias;
VECCOPY(nrm, shi->vn);
}
else {
- bias= 0.0f;
VECCOPY(nrm, shi->facenor);
}
@@ -1629,6 +1628,7 @@ void ray_ao_qmc(ShadeInput *shi, float *shadfac)
}
else { /* WO_AOSKYTEX */
shadeSkyView(skycol, isec.start, view, dxyview);
+ shadeSunView(skycol, shi->view);
shadfac[0]+= skycol[0];
shadfac[1]+= skycol[1];
shadfac[2]+= skycol[2];
@@ -1664,7 +1664,7 @@ void ray_ao_qmc(ShadeInput *shi, float *shadfac)
}
/* extern call from shade_lamp_loop, ambient occlusion calculus */
-void ray_ao_spheresamp(ShadeInput *shi, float *shadfac)
+static void ray_ao_spheresamp(ShadeInput *shi, float *shadfac)
{
Isect isec;
float *vec, *nrm, div, bias, sh=0.0f;
@@ -1753,6 +1753,7 @@ void ray_ao_spheresamp(ShadeInput *shi, float *shadfac)
}
else { /* WO_AOSKYTEX */
shadeSkyView(skycol, isec.start, view, dxyview);
+ shadeSunView(skycol, shi->view);
shadfac[0]+= skycol[0];
shadfac[1]+= skycol[1];
shadfac[2]+= skycol[2];
@@ -2056,7 +2057,10 @@ void ray_shadow(ShadeInput *shi, LampRen *lar, float *shadfac)
if(shi->mat->mode & MA_SHADOW_TRA) isec.mode= RE_RAY_SHADOW_TRA;
else isec.mode= RE_RAY_SHADOW;
- if(lar->mode & LA_LAYER) isec.lay= lar->lay; else isec.lay= -1;
+ if(lar->mode & (LA_LAYER|LA_LAYER_SHADOW))
+ isec.lay= lar->lay;
+ else
+ isec.lay= -1;
/* only when not mir tracing, first hit optimm */
if(shi->depth==0) {
@@ -2117,7 +2121,7 @@ void ray_shadow(ShadeInput *shi, LampRen *lar, float *shadfac)
}
/* only when face points away from lamp, in direction of lamp, trace ray and find first exit point */
-void ray_translucent(ShadeInput *shi, LampRen *lar, float *distfac, float *co)
+static void ray_translucent(ShadeInput *shi, LampRen *lar, float *distfac, float *co)
{
Isect isec;
float lampco[3], maxsize;
diff --git a/source/blender/render/intern/source/rendercore.c b/source/blender/render/intern/source/rendercore.c
index 4520e4c10bb..05ff0d3c020 100644
--- a/source/blender/render/intern/source/rendercore.c
+++ b/source/blender/render/intern/source/rendercore.c
@@ -158,7 +158,7 @@ static int calchalo_z(HaloRen *har, int zz)
{
if(har->type & HA_ONLYSKY) {
- if(zz!=0x7FFFFFFF) zz= - 0x7FFFFF;
+ if(zz < 0x7FFFFFF0) zz= - 0x7FFFFF; /* edge render messes zvalues */
}
else {
zz= (zz>>8);
@@ -243,7 +243,7 @@ static void halo_tile(RenderPart *pa, RenderLayer *rl)
rcti disprect= pa->disprect, testrect= pa->disprect;
float dist, xsq, ysq, xn, yn;
float col[4];
- long *rd= NULL;
+ intptr_t *rd= NULL;
int a, *rz, zz, y, sample, totsample, od;
short minx, maxx, miny, maxy, x;
unsigned int lay= rl->lay;
@@ -324,7 +324,7 @@ static void lamphalo_tile(RenderPart *pa, RenderLayer *rl)
ShadeInput shi;
float *pass;
float fac, col[4];
- long *rd= pa->rectdaps;
+ intptr_t *rd= pa->rectdaps;
int *rz= pa->rectz;
int x, y, sample, totsample, fullsample, od;
@@ -672,22 +672,10 @@ static void atm_tile(RenderPart *pa, RenderLayer *rl)
GroupObject *go;
LampRen *lar;
RenderLayer *rlpp[RE_MAX_OSA];
-
- int totsample, fullsample, sample;
- int x, y,od;
- short first_lamp;
- float *zrect;
- float *rgbrect;
- float rgb[3]={0};
- float tmp_rgb[3];
- float fac;
- float facm;
+ int totsample;
+ int x, y, od= 0;
- fac = 0.5;
- facm = 1.0 - fac;
-
totsample= get_sample_layers(pa, rl, rlpp);
- fullsample= (totsample > 1);
/* check that z pass is enabled */
if(pa->rectz==NULL) return;
@@ -698,65 +686,66 @@ static void atm_tile(RenderPart *pa, RenderLayer *rl)
if(zpass==NULL) return;
/* check for at least one sun lamp that its atmosphere flag is is enabled */
- first_lamp = 1;
for(go=R.lights.first; go; go= go->next) {
lar= go->lampren;
- if(lar->type==LA_SUN && lar->sunsky &&
- (lar->sunsky->effect_type & LA_SUN_EFFECT_AP)){
- first_lamp = 0;
+ if(lar->type==LA_SUN && lar->sunsky && (lar->sunsky->effect_type & LA_SUN_EFFECT_AP))
break;
- }
}
/* do nothign and return if there is no sun lamp */
- if(first_lamp)
+ if(go==NULL)
return;
- zrect = zpass->rect;
- rgbrect = rl->rectf;
- od=0;
- /* for each x,y and sun lamp*/
+ /* for each x,y and each sample, and each sun lamp*/
for(y=pa->disprect.ymin; y<pa->disprect.ymax; y++) {
- for(x=pa->disprect.xmin; x<pa->disprect.xmax; x++, zrect++, od++) {
+ for(x=pa->disprect.xmin; x<pa->disprect.xmax; x++, od++) {
+ int sample;
- first_lamp = 1;
- for(go=R.lights.first; go; go= go->next) {
- lar= go->lampren;
- if(lar->type==LA_SUN && lar->sunsky)
+ for(sample=0; sample<totsample; sample++) {
+ float *zrect= RE_RenderLayerGetPass(rlpp[sample], SCE_PASS_Z) + od;
+ float *rgbrect = rlpp[sample]->rectf + 4*od;
+ float rgb[3];
+ int done= 0;
+
+ for(go=R.lights.first; go; go= go->next) {
+
- {
- /* if it's sky continue and don't apply atmosphere effect on it */
- if(*zrect >= 9.9e10){
- continue;
- }
-
- if(lar->sunsky->effect_type & LA_SUN_EFFECT_AP){
- VECCOPY(tmp_rgb, (float*)(rgbrect+4*od));
-
- shadeAtmPixel(lar->sunsky, tmp_rgb, x, y, *zrect);
+ lar= go->lampren;
+ if(lar->type==LA_SUN && lar->sunsky) {
- if(first_lamp){
- VECCOPY(rgb, tmp_rgb);
- first_lamp = 0;
+ /* if it's sky continue and don't apply atmosphere effect on it */
+ if(*zrect >= 9.9e10 || rgbrect[3]==0.0f) {
+ continue;
}
- else{
- rgb[0] = facm*rgb[0] + fac*tmp_rgb[0];
- rgb[1] = facm*rgb[1] + fac*tmp_rgb[1];
- rgb[2] = facm*rgb[2] + fac*tmp_rgb[2];
+
+ if((lar->sunsky->effect_type & LA_SUN_EFFECT_AP)) {
+ float tmp_rgb[3];
+
+ VECCOPY(tmp_rgb, rgbrect);
+ if(rgbrect[3]!=1.0f) { /* de-premul */
+ float div= 1.0f/rgbrect[3];
+ VECMUL(tmp_rgb, div);
+ }
+ shadeAtmPixel(lar->sunsky, tmp_rgb, x, y, *zrect);
+ if(rgbrect[3]!=1.0f) { /* premul */
+ VECMUL(tmp_rgb, rgbrect[3]);
+ }
+
+ if(done==0) {
+ VECCOPY(rgb, tmp_rgb);
+ done = 1;
+ }
+ else{
+ rgb[0] = 0.5f*rgb[0] + 0.5f*tmp_rgb[0];
+ rgb[1] = 0.5f*rgb[1] + 0.5f*tmp_rgb[1];
+ rgb[2] = 0.5f*rgb[2] + 0.5f*tmp_rgb[2];
+ }
}
}
}
- }
- /* if at least for one sun lamp aerial perspective was applied*/
- if(first_lamp==0)
- {
- if(fullsample) {
- for(sample=0; sample<totsample; sample++) {
- VECCOPY((float*)(rlpp[sample]->rectf + od*4), rgb);
- }
- }
- else {
- VECCOPY((float*)(rgbrect+4*od), rgb);
+ /* if at least for one sun lamp aerial perspective was applied*/
+ if(done) {
+ VECCOPY(rgbrect, rgb);
}
}
}
@@ -767,7 +756,7 @@ static void shadeDA_tile(RenderPart *pa, RenderLayer *rl)
{
RenderResult *rr= pa->result;
ShadeSample ssamp;
- long *rd, *rectdaps= pa->rectdaps;
+ intptr_t *rd, *rectdaps= pa->rectdaps;
int samp;
int x, y, seed, crop=0, offs=0, od;
@@ -874,7 +863,7 @@ static void freeps(ListBase *lb)
lb->first= lb->last= NULL;
}
-static void addps(ListBase *lb, long *rd, int obi, int facenr, int z, int maskz, unsigned short mask)
+static void addps(ListBase *lb, intptr_t *rd, int obi, int facenr, int z, int maskz, unsigned short mask)
{
PixStrMain *psm;
PixStr *ps, *last= NULL;
@@ -901,7 +890,7 @@ static void addps(ListBase *lb, long *rd, int obi, int facenr, int z, int maskz,
ps= psm->ps + psm->counter++;
if(last) last->next= ps;
- else *rd= (long)ps;
+ else *rd= (intptr_t)ps;
ps->next= NULL;
ps->obi= obi;
@@ -931,17 +920,23 @@ static void edge_enhance_add(RenderPart *pa, float *rectf, float *arect)
}
}
-
-static void convert_to_key_alpha(RenderPart *pa, float *rectf)
+static void convert_to_key_alpha(RenderPart *pa, RenderLayer *rl)
{
- int y;
-
- for(y= pa->rectx*pa->recty; y>0; y--, rectf+=4) {
- if(rectf[3] >= 1.0f);
- else if(rectf[3] > 0.0f) {
- rectf[0] /= rectf[3];
- rectf[1] /= rectf[3];
- rectf[2] /= rectf[3];
+ RenderLayer *rlpp[RE_MAX_OSA];
+ int y, sample, totsample;
+
+ totsample= get_sample_layers(pa, rl, rlpp);
+
+ for(sample= 0; sample<totsample; sample++) {
+ float *rectf= rlpp[sample]->rectf;
+
+ for(y= pa->rectx*pa->recty; y>0; y--, rectf+=4) {
+ if(rectf[3] >= 1.0f);
+ else if(rectf[3] > 0.0f) {
+ rectf[0] /= rectf[3];
+ rectf[1] /= rectf[3];
+ rectf[2] /= rectf[3];
+ }
}
}
}
@@ -1027,7 +1022,7 @@ static void reset_sky_speed(RenderPart *pa, RenderLayer *rl)
static unsigned short *make_solid_mask(RenderPart *pa)
{
- long *rd= pa->rectdaps;
+ intptr_t *rd= pa->rectdaps;
unsigned short *solidmask, *sp;
int x;
@@ -1092,7 +1087,7 @@ void make_pixelstructs(RenderPart *pa, ZSpan *zspan, int sample, void *data)
{
ZbufSolidData *sdata= (ZbufSolidData*)data;
ListBase *lb= sdata->psmlist;
- long *rd= pa->rectdaps;
+ intptr_t *rd= pa->rectdaps;
int *ro= zspan->recto;
int *rp= zspan->rectp;
int *rz= zspan->rectz;
@@ -1133,7 +1128,7 @@ void zbufshadeDA_tile(RenderPart *pa)
/* initialize pixelstructs and edge buffer */
addpsmain(&psmlist);
- pa->rectdaps= MEM_callocN(sizeof(long)*pa->rectx*pa->recty+4, "zbufDArectd");
+ pa->rectdaps= MEM_callocN(sizeof(intptr_t)*pa->rectx*pa->recty+4, "zbufDArectd");
if(rl->layflag & SCE_LAY_EDGE)
if(R.r.mode & R_EDGE)
@@ -1211,6 +1206,10 @@ void zbufshadeDA_tile(RenderPart *pa)
}
}
+ /* sun/sky */
+ if(rl->layflag & SCE_LAY_SKY)
+ atm_tile(pa, rl);
+
/* sky before edge */
if(rl->layflag & SCE_LAY_SKY)
sky_tile(pa, rl);
@@ -1220,16 +1219,12 @@ void zbufshadeDA_tile(RenderPart *pa)
if(R.r.mode & R_EDGE)
edge_enhance_add(pa, rl->rectf, edgerect);
- /* sun/sky */
- if(rl->layflag & SCE_LAY_SKY)
- atm_tile(pa, rl);
-
if(rl->passflag & SCE_PASS_VECTOR)
reset_sky_speed(pa, rl);
/* de-premul alpha */
if(R.r.alphamode & R_ALPHAKEY)
- convert_to_key_alpha(pa, rl->rectf);
+ convert_to_key_alpha(pa, rl);
/* free stuff within loop! */
MEM_freeN(pa->rectdaps); pa->rectdaps= NULL;
@@ -1374,6 +1369,10 @@ void zbufshade_tile(RenderPart *pa)
}
}
+ /* sun/sky */
+ if(rl->layflag & SCE_LAY_SKY)
+ atm_tile(pa, rl);
+
/* sky before edge */
if(rl->layflag & SCE_LAY_SKY)
sky_tile(pa, rl);
@@ -1384,16 +1383,12 @@ void zbufshade_tile(RenderPart *pa)
edge_enhance_add(pa, rl->rectf, edgerect);
}
- /* sun/sky */
- if(rl->layflag & SCE_LAY_SKY)
- atm_tile(pa, rl);
-
if(rl->passflag & SCE_PASS_VECTOR)
reset_sky_speed(pa, rl);
/* de-premul alpha */
if(R.r.alphamode & R_ALPHAKEY)
- convert_to_key_alpha(pa, rl->rectf);
+ convert_to_key_alpha(pa, rl);
if(edgerect) MEM_freeN(edgerect);
edgerect= NULL;
@@ -1433,7 +1428,7 @@ static void addps_sss(void *cb_handle, int obi, int facenr, int x, int y, int z)
return;
if(pa->rectall) {
- long *rs= pa->rectall + pa->rectx*y + x;
+ intptr_t *rs= pa->rectall + pa->rectx*y + x;
addps(&handle->psmlist, rs, obi, facenr, z, 0, 0);
handle->totps++;
@@ -1569,7 +1564,7 @@ void zbufshade_sss_tile(RenderPart *pa)
int *ro, *rz, *rp, *rbo, *rbz, *rbp, lay;
#if 0
PixStr *ps;
- long *rs;
+ intptr_t *rs;
int z;
#endif
@@ -1581,7 +1576,7 @@ void zbufshade_sss_tile(RenderPart *pa)
handle.psmlist.first= handle.psmlist.last= NULL;
addpsmain(&handle.psmlist);
- pa->rectall= MEM_callocN(sizeof(long)*pa->rectx*pa->recty+4, "rectall");
+ pa->rectall= MEM_callocN(sizeof(intptr_t)*pa->rectx*pa->recty+4, "rectall");
#else
pa->recto= MEM_mallocN(sizeof(int)*pa->rectx*pa->recty, "recto");
pa->rectp= MEM_mallocN(sizeof(int)*pa->rectx*pa->recty, "rectp");
@@ -1965,7 +1960,6 @@ void RE_shade_external(Render *re, ShadeInput *shi, ShadeResult *shr)
/* ************************* bake ************************ */
-#define FTOCHAR(val) val<=0.0f?0: (val>=1.0f?255: (char)(255.0f*val))
typedef struct BakeShade {
ShadeSample ssamp;
diff --git a/source/blender/render/intern/source/renderdatabase.c b/source/blender/render/intern/source/renderdatabase.c
index 98b1426e8ff..d44b49cc706 100644
--- a/source/blender/render/intern/source/renderdatabase.c
+++ b/source/blender/render/intern/source/renderdatabase.c
@@ -483,16 +483,16 @@ void RE_set_customdata_names(ObjectRen *obr, CustomData *data)
DerivedMesh which stores the layers is freed */
CustomDataLayer *layer;
- int numlayers, i, mtfn, mcn;
+ int numtf = 0, numcol = 0, i, mtfn, mcn;
if (CustomData_has_layer(data, CD_MTFACE)) {
- numlayers= CustomData_number_of_layers(data, CD_MTFACE);
- obr->mtface= MEM_callocN(sizeof(*obr->mtface)*numlayers, "mtfacenames");
+ numtf= CustomData_number_of_layers(data, CD_MTFACE);
+ obr->mtface= MEM_callocN(sizeof(*obr->mtface)*numtf, "mtfacenames");
}
if (CustomData_has_layer(data, CD_MCOL)) {
- numlayers= CustomData_number_of_layers(data, CD_MCOL);
- obr->mcol= MEM_callocN(sizeof(*obr->mcol)*numlayers, "mcolnames");
+ numcol= CustomData_number_of_layers(data, CD_MCOL);
+ obr->mcol= MEM_callocN(sizeof(*obr->mcol)*numcol, "mcolnames");
}
for (i=0, mtfn=0, mcn=0; i < data->totlayer; i++) {
@@ -500,12 +500,12 @@ void RE_set_customdata_names(ObjectRen *obr, CustomData *data)
if (layer->type == CD_MTFACE) {
strcpy(obr->mtface[mtfn++], layer->name);
- obr->actmtface= layer->active_rnd;
+ obr->actmtface= CLAMPIS(layer->active_rnd, 0, numtf);
obr->bakemtface= layer->active;
}
else if (layer->type == CD_MCOL) {
strcpy(obr->mcol[mcn++], layer->name);
- obr->actmcol= layer->active_rnd;
+ obr->actmcol= CLAMPIS(layer->active_rnd, 0, numcol);
}
}
}
diff --git a/source/blender/render/intern/source/shadbuf.c b/source/blender/render/intern/source/shadbuf.c
index f3258b601de..c53a2b68c9c 100644
--- a/source/blender/render/intern/source/shadbuf.c
+++ b/source/blender/render/intern/source/shadbuf.c
@@ -171,7 +171,7 @@ static void compress_shadowbuf(ShadBuf *shb, int *rectz, int square)
{
ShadSampleBuf *shsample;
float dist;
- unsigned long *ztile;
+ uintptr_t *ztile;
int *rz, *rz1, verg, verg1, size= shb->size;
int a, x, y, minx, miny, byt1, byt2;
char *rc, *rcline, *ctile, *zt;
@@ -179,10 +179,10 @@ static void compress_shadowbuf(ShadBuf *shb, int *rectz, int square)
shsample= MEM_mallocN( sizeof(ShadSampleBuf), "shad sample buf");
BLI_addtail(&shb->buffers, shsample);
- shsample->zbuf= MEM_mallocN( sizeof(unsigned long)*(size*size)/256, "initshadbuf2");
+ shsample->zbuf= MEM_mallocN( sizeof(uintptr_t)*(size*size)/256, "initshadbuf2");
shsample->cbuf= MEM_callocN( (size*size)/256, "initshadbuf3");
- ztile= (unsigned long *)shsample->zbuf;
+ ztile= (uintptr_t *)shsample->zbuf;
ctile= shsample->cbuf;
/* help buffer */
@@ -237,7 +237,7 @@ static void compress_shadowbuf(ShadBuf *shb, int *rectz, int square)
}
if(byt1 && byt2) { /* only store byte */
*ctile= 1;
- *ztile= (unsigned long)MEM_mallocN(256+4, "tile1");
+ *ztile= (uintptr_t)MEM_mallocN(256+4, "tile1");
rz= (int *)*ztile;
*rz= *rz1;
@@ -247,7 +247,7 @@ static void compress_shadowbuf(ShadBuf *shb, int *rectz, int square)
}
else if(byt1) { /* only store short */
*ctile= 2;
- *ztile= (unsigned long)MEM_mallocN(2*256+4,"Tile2");
+ *ztile= (uintptr_t)MEM_mallocN(2*256+4,"Tile2");
rz= (int *)*ztile;
*rz= *rz1;
@@ -260,7 +260,7 @@ static void compress_shadowbuf(ShadBuf *shb, int *rectz, int square)
}
else { /* store triple */
*ctile= 3;
- *ztile= (unsigned long)MEM_mallocN(3*256,"Tile3");
+ *ztile= (uintptr_t)MEM_mallocN(3*256,"Tile3");
zt= (char *)*ztile;
rc= rcline;
@@ -296,7 +296,7 @@ static void shadowbuf_autoclip(Render *re, LampRen *lar)
minz= 1.0e30f; maxz= -1.0e30f;
Mat4CpyMat4(viewmat, lar->shb->viewmat);
- if(lar->mode & LA_LAYER) lay= lar->lay;
+ if(lar->mode & (LA_LAYER|LA_LAYER_SHADOW)) lay= lar->lay;
maxtotvert= 0;
for(obr=re->objecttable.first; obr; obr=obr->next)
@@ -542,7 +542,7 @@ void freeshadowbuf(LampRen *lar)
v= (shb->size*shb->size)/256;
for(shsample= shb->buffers.first; shsample; shsample= shsample->next) {
- long *ztile= shsample->zbuf;
+ intptr_t *ztile= shsample->zbuf;
char *ctile= shsample->cbuf;
for(b=0; b<v; b++, ztile++, ctile++)
@@ -1520,7 +1520,7 @@ static void isb_bsp_fillfaces(Render *re, LampRen *lar, ISBBranch *root)
minmaxf[2]= (2.0f*root->box.ymin - size-2.0f)/size;
minmaxf[3]= (2.0f*root->box.ymax - size+2.0f)/size;
- if(lar->mode & LA_LAYER) lay= lar->lay;
+ if(lar->mode & (LA_LAYER|LA_LAYER_SHADOW)) lay= lar->lay;
/* (ab)use zspan, since we use zbuffer clipping code */
zbuf_alloc_span(&zspan, size, size, re->clipcrop);
@@ -1752,7 +1752,7 @@ static void isb_make_buffer(RenderPart *pa, LampRen *lar)
ISBSample *samp, *samplebuf[16]; /* should be RE_MAX_OSA */
ISBBranch root;
MemArena *memarena;
- long *rd;
+ intptr_t *rd;
int *recto, *rectp, x, y, sindex, sample, bsp_err=0;
/* storage for shadow, per thread */
diff --git a/source/blender/render/intern/source/shadeinput.c b/source/blender/render/intern/source/shadeinput.c
index 7397d623264..8904999432a 100644
--- a/source/blender/render/intern/source/shadeinput.c
+++ b/source/blender/render/intern/source/shadeinput.c
@@ -343,10 +343,19 @@ void shade_input_set_strand(ShadeInput *shi, StrandRen *strand, StrandPoint *spo
VECCOPY(shi->orignor, shi->facenor);
/* shade_input_set_normals equivalent */
- if(shi->mat->mode & MA_TANGENT_STR)
+ if(shi->mat->mode & MA_TANGENT_STR) {
VECCOPY(shi->vn, spoint->tan)
- else
- VECCOPY(shi->vn, spoint->nor)
+ }
+ else {
+ float cross[3];
+
+ Crossf(cross, spoint->co, spoint->tan);
+ Crossf(shi->vn, cross, spoint->tan);
+ Normalize(shi->vn);
+
+ if(INPR(shi->vn, shi->view) < 0.0f)
+ VecMulf(shi->vn, -1.0f);
+ }
VECCOPY(shi->vno, shi->vn);
}
diff --git a/source/blender/render/intern/source/shadeoutput.c b/source/blender/render/intern/source/shadeoutput.c
index 5b69323667e..c4fac1aeb06 100644
--- a/source/blender/render/intern/source/shadeoutput.c
+++ b/source/blender/render/intern/source/shadeoutput.c
@@ -1179,7 +1179,7 @@ static void shade_one_light(LampRen *lar, ShadeInput *shi, ShadeResult *shr, int
{
Material *ma= shi->mat;
VlakRen *vlr= shi->vlr;
- float lv[3], lampdist, lacol[3], shadfac[4];
+ float lv[3], lampdist, lacol[3], shadfac[4], lashdw[3];
float i, is, i_noshad, inp, *vn, *view, vnor[3], phongcorr=1.0f;
float visifac;
@@ -1219,7 +1219,12 @@ static void shade_one_light(LampRen *lar, ShadeInput *shi, ShadeResult *shr, int
lacol[1]= lar->g;
lacol[2]= lar->b;
- if(lar->mode & LA_TEXTURE) do_lamp_tex(lar, lv, shi, lacol);
+ lashdw[0]= lar->shdwr;
+ lashdw[1]= lar->shdwg;
+ lashdw[2]= lar->shdwb;
+
+ if(lar->mode & LA_TEXTURE) do_lamp_tex(lar, lv, shi, lacol, LA_TEXTURE);
+ if(lar->mode & LA_SHAD_TEX) do_lamp_tex(lar, lv, shi, lashdw, LA_SHAD_TEX);
/* tangent case; calculate fake face normal, aligned with lampvector */
/* note, vnor==vn is used as tangent trigger for buffer shadow */
@@ -1342,13 +1347,13 @@ static void shade_one_light(LampRen *lar, ShadeInput *shi, ShadeResult *shr, int
if((lar->mode & LA_ONLYSHADOW) && i>0.0) {
shadfac[3]= i*lar->energy*(1.0f-shadfac[3]);
- shr->shad[0] -= shadfac[3]*shi->r;
- shr->shad[1] -= shadfac[3]*shi->g;
- shr->shad[2] -= shadfac[3]*shi->b;
+ shr->shad[0] -= shadfac[3]*shi->r*(1.0f-lashdw[0]);
+ shr->shad[1] -= shadfac[3]*shi->g*(1.0f-lashdw[1]);
+ shr->shad[2] -= shadfac[3]*shi->b*(1.0f-lashdw[2]);
- shr->spec[0] -= shadfac[3]*shi->specr;
- shr->spec[1] -= shadfac[3]*shi->specg;
- shr->spec[2] -= shadfac[3]*shi->specb;
+ shr->spec[0] -= shadfac[3]*shi->specr*(1.0f-lashdw[0]);
+ shr->spec[1] -= shadfac[3]*shi->specg*(1.0f-lashdw[1]);
+ shr->spec[2] -= shadfac[3]*shi->specb*(1.0f-lashdw[2]);
return;
}
@@ -1366,6 +1371,10 @@ static void shade_one_light(LampRen *lar, ShadeInput *shi, ShadeResult *shr, int
else
add_to_diffuse(shr->shad, shi, is, i*lacol[0], i*lacol[1], i*lacol[2]);
}
+ /* add light for colored shadow */
+ if (i_noshad>i && !(lashdw[0]==0 && lashdw[1]==0 && lashdw[2]==0)) {
+ add_to_diffuse(shr->shad, shi, is, lashdw[0]*(i_noshad-i)*lacol[0], lashdw[1]*(i_noshad-i)*lacol[1], lashdw[2]*(i_noshad-i)*lacol[2]);
+ }
if(i_noshad>0.0f) {
if(passflag & (SCE_PASS_DIFFUSE|SCE_PASS_SHADOW)) {
if(ma->mode & MA_SHADOW_TRA)
@@ -1451,10 +1460,10 @@ static void shade_lamp_loop_only_shadow(ShadeInput *shi, ShadeResult *shr)
LampRen *lar;
GroupObject *go;
float inpr, lv[3];
- float *vn, *view, shadfac[4];
+ float *view, shadfac[4];
float ir, accum, visifac, lampdist;
- vn= shi->vn;
+
view= shi->view;
accum= ir= 0.0f;
@@ -1761,7 +1770,21 @@ void shade_lamp_loop(ShadeInput *shi, ShadeResult *shr)
if(shi->combinedflag & SCE_PASS_SPEC)
VECADD(shr->combined, shr->combined, shr->spec);
+ /* modulate by the object color */
+ if((ma->shade_flag & MA_OBCOLOR) && shi->obr->ob) {
+ if(!(ma->sss_flag & MA_DIFF_SSS) || !has_sss_tree(&R, ma)) {
+ float obcol[4];
+
+ QUATCOPY(obcol, shi->obr->ob->col);
+ CLAMP(obcol[3], 0.0f, 1.0f);
+
+ shr->combined[0] *= obcol[0];
+ shr->combined[1] *= obcol[1];
+ shr->combined[2] *= obcol[2];
+ shr->alpha *= obcol[3];
+ }
+ }
+
shr->combined[3]= shr->alpha;
}
-
diff --git a/source/blender/render/intern/source/strand.c b/source/blender/render/intern/source/strand.c
index 591d51a969d..05e36160f0e 100644
--- a/source/blender/render/intern/source/strand.c
+++ b/source/blender/render/intern/source/strand.c
@@ -416,7 +416,7 @@ typedef struct StrandPart {
int *totapixbuf;
int *rectz;
int *rectmask;
- long *rectdaps;
+ intptr_t *rectdaps;
int rectx, recty;
int sample;
@@ -510,7 +510,7 @@ static void do_strand_fillac(void *handle, int x, int y, float u, float v, float
if(spart->rectdaps) {
/* find the z of the sample */
PixStr *ps;
- long *rd= spart->rectdaps + offset;
+ intptr_t *rd= spart->rectdaps + offset;
bufferz= 0x7FFFFFFF;
if(spart->rectmask) maskz= 0x7FFFFFFF;
diff --git a/source/blender/render/intern/source/sunsky.c b/source/blender/render/intern/source/sunsky.c
index 191867765a3..2b490e71142 100644
--- a/source/blender/render/intern/source/sunsky.c
+++ b/source/blender/render/intern/source/sunsky.c
@@ -22,7 +22,7 @@
#include "sunsky.h"
#include "math.h"
#include "BLI_arithb.h"
-
+#include "BKE_global.h"
/**
* These macros are defined for vector operations
@@ -111,15 +111,14 @@ static void DirectionToThetaPhi(float *toSun, float *theta, float *phi)
float PerezFunction(struct SunSky *sunsky, const float *lam, float theta, float gamma, float lvz)
{
float den, num;
-
+
den = ((1 + lam[0] * exp(lam[1])) *
- (1 + lam[2] * exp(lam[3] * sunsky->theta) + lam[4] * cos(sunsky->theta) * cos(sunsky->theta)));
-
+ (1 + lam[2] * exp(lam[3] * sunsky->theta) + lam[4] * cos(sunsky->theta) * cos(sunsky->theta)));
+
num = ((1 + lam[0] * exp(lam[1] / cos(theta))) *
- (1 + lam[2] * exp(lam[3] * gamma) + lam[4] * cos(gamma) * cos(gamma)));
-
- return(lvz * num / den);
-}
+ (1 + lam[2] * exp(lam[3] * gamma) + lam[4] * cos(gamma) * cos(gamma)));
+
+ return(lvz * num / den);}
/**
* InitSunSky:
@@ -135,7 +134,8 @@ float PerezFunction(struct SunSky *sunsky, const float *lam, float theta, float
* back_scatter, controls back scatter light
* */
void InitSunSky(struct SunSky *sunsky, float turb, float *toSun, float horizon_brightness,
- float spread,float sun_brightness, float sun_size, float back_scatter)
+ float spread,float sun_brightness, float sun_size, float back_scatter,
+ float skyblendfac, short skyblendtype, float sky_exposure, float sky_colorspace)
{
float theta2;
@@ -151,6 +151,10 @@ void InitSunSky(struct SunSky *sunsky, float turb, float *toSun, float horizon_b
sunsky->sun_brightness = sun_brightness;
sunsky->sun_size = sun_size;
sunsky->backscattered_light = back_scatter;
+ sunsky->skyblendfac= skyblendfac;
+ sunsky->skyblendtype= skyblendtype;
+ sunsky->sky_exposure= -sky_exposure;
+ sunsky->sky_colorspace= sky_colorspace;
sunsky->toSun[0] = toSun[0];
sunsky->toSun[1] = toSun[1];
@@ -259,8 +263,11 @@ void GetSkyXYZRadiance(struct SunSky* sunsky, float theta, float phi, float colo
// Compute xyY values
x = PerezFunction(sunsky, sunsky->perez_x, theta, gamma, sunsky->zenith_x);
y = PerezFunction(sunsky, sunsky->perez_y, theta, gamma, sunsky->zenith_y);
- Y = nfade * hfade * PerezFunction(sunsky, sunsky->perez_Y, theta, gamma, sunsky->zenith_Y);
+ Y = 6.666666667e-5 * nfade * hfade * PerezFunction(sunsky, sunsky->perez_Y, theta, gamma, sunsky->zenith_Y);
+ if(sunsky->sky_exposure!=0.0f)
+ Y = 1.0 - exp(Y*sunsky->sky_exposure);
+
X = (x / y) * Y;
Z = ((1 - x - y) / y) * Y;
diff --git a/source/blender/render/intern/source/texture.c b/source/blender/render/intern/source/texture.c
index 27628d91465..7ce66ff6d12 100644
--- a/source/blender/render/intern/source/texture.c
+++ b/source/blender/render/intern/source/texture.c
@@ -1712,18 +1712,18 @@ void do_material_tex(ShadeInput *shi)
texres.nor[2]= texres.tb;
}
else {
- float co= 0.5*cos(texres.tin-0.5);
+ float co_nor= 0.5*cos(texres.tin-0.5);
float si= 0.5*sin(texres.tin-0.5);
float f1, f2;
f1= shi->vn[0];
f2= shi->vn[1];
- texres.nor[0]= f1*co+f2*si;
- texres.nor[1]= f2*co-f1*si;
+ texres.nor[0]= f1*co_nor+f2*si;
+ texres.nor[1]= f2*co_nor-f1*si;
f1= shi->vn[1];
f2= shi->vn[2];
- texres.nor[1]= f1*co+f2*si;
- texres.nor[2]= f2*co-f1*si;
+ texres.nor[1]= f1*co_nor+f2*si;
+ texres.nor[2]= f2*co_nor-f1*si;
}
}
// warping, local space
@@ -2301,7 +2301,7 @@ void do_sky_tex(float *rco, float *lo, float *dxyview, float *hor, float *zen, f
/* ------------------------------------------------------------------------- */
/* colf supposed to be initialized with la->r,g,b */
-void do_lamp_tex(LampRen *la, float *lavec, ShadeInput *shi, float *colf)
+void do_lamp_tex(LampRen *la, float *lavec, ShadeInput *shi, float *colf, int effect)
{
Object *ob;
MTex *mtex;
@@ -2440,7 +2440,7 @@ void do_lamp_tex(LampRen *la, float *lavec, ShadeInput *shi, float *colf)
}
/* mapping */
- if(mtex->mapto & LAMAP_COL) {
+ if(((mtex->mapto & LAMAP_COL) && (effect & LA_TEXTURE))||((mtex->mapto & LAMAP_SHAD) && (effect & LA_SHAD_TEX))) {
float col[3];
if(rgb==0) {
diff --git a/source/blender/render/intern/source/zbuf.c b/source/blender/render/intern/source/zbuf.c
index c91c9e2f799..1726c061df1 100644
--- a/source/blender/render/intern/source/zbuf.c
+++ b/source/blender/render/intern/source/zbuf.c
@@ -377,6 +377,8 @@ static void zbuffillAc4(ZSpan *zspan, int obi, int zvlnr, float *v1, float *v2,
if(sn1<0) sn1= 0;
if(sn2>=sn1) {
+ int intzverg;
+
zverg= (double)sn1*zxd + zy0;
rz= rectzofs+sn1;
rm= rectmaskofs+sn1;
@@ -386,22 +388,21 @@ static void zbuffillAc4(ZSpan *zspan, int obi, int zvlnr, float *v1, float *v2,
zverg-= zspan->polygon_offset;
while(x>=0) {
- if( (int)zverg < *rz) {
- if(!zspan->rectmask || (int)zverg > *rm) {
- // int i= zvlnr & 3;
+ intzverg= (int)CLAMPIS(zverg, INT_MIN, INT_MAX);
+
+ if( intzverg < *rz) {
+ if(!zspan->rectmask || intzverg > *rm) {
apn= ap;
while(apn) {
- if(apn->p[0]==0) {apn->obi[0]= obi; apn->p[0]= zvlnr; apn->z[0]= zverg; apn->mask[0]= mask; break; }
+ if(apn->p[0]==0) {apn->obi[0]= obi; apn->p[0]= zvlnr; apn->z[0]= intzverg; apn->mask[0]= mask; break; }
if(apn->p[0]==zvlnr && apn->obi[0]==obi) {apn->mask[0]|= mask; break; }
- if(apn->p[1]==0) {apn->obi[1]= obi; apn->p[1]= zvlnr; apn->z[1]= zverg; apn->mask[1]= mask; break; }
+ if(apn->p[1]==0) {apn->obi[1]= obi; apn->p[1]= zvlnr; apn->z[1]= intzverg; apn->mask[1]= mask; break; }
if(apn->p[1]==zvlnr && apn->obi[1]==obi) {apn->mask[1]|= mask; break; }
- if(apn->p[2]==0) {apn->obi[2]= obi; apn->p[2]= zvlnr; apn->z[2]= zverg; apn->mask[2]= mask; break; }
+ if(apn->p[2]==0) {apn->obi[2]= obi; apn->p[2]= zvlnr; apn->z[2]= intzverg; apn->mask[2]= mask; break; }
if(apn->p[2]==zvlnr && apn->obi[2]==obi) {apn->mask[2]|= mask; break; }
- if(apn->p[3]==0) {apn->obi[3]= obi; apn->p[3]= zvlnr; apn->z[3]= zverg; apn->mask[3]= mask; break; }
+ if(apn->p[3]==0) {apn->obi[3]= obi; apn->p[3]= zvlnr; apn->z[3]= intzverg; apn->mask[3]= mask; break; }
if(apn->p[3]==zvlnr && apn->obi[3]==obi) {apn->mask[3]|= mask; break; }
- // if(apn->p[i]==0) {apn->obi[i]= obi; apn->p[i]= zvlnr; apn->z[i]= zverg; apn->mask[i]= mask; break; }
- // if(apn->p[i]==zvlnr && apn->obi[i]==obi) {apn->mask[i]|= mask; break; }
if(apn->next==NULL) apn->next= addpsA(zspan);
apn= apn->next;
}
@@ -1115,6 +1116,8 @@ static void zbuffillGLinv4(ZSpan *zspan, int obi, int zvlnr, float *v1, float *v
if(sn1<0) sn1= 0;
if(sn2>=sn1) {
+ int intzverg;
+
zverg= (double)sn1*zxd + zy0;
rz= rectzofs+sn1;
rp= rectpofs+sn1;
@@ -1123,10 +1126,12 @@ static void zbuffillGLinv4(ZSpan *zspan, int obi, int zvlnr, float *v1, float *v
x= sn2-sn1;
while(x>=0) {
- if( (int)zverg > *rz || *rz==0x7FFFFFFF) {
- if(!zspan->rectmask || (int)zverg > *rm) {
+ intzverg= (int)CLAMPIS(zverg, INT_MIN, INT_MAX);
+
+ if( intzverg > *rz || *rz==0x7FFFFFFF) {
+ if(!zspan->rectmask || intzverg > *rm) {
*ro= obi;
- *rz= (int)zverg;
+ *rz= intzverg;
*rp= zvlnr;
}
}
@@ -1231,6 +1236,8 @@ static void zbuffillGL4(ZSpan *zspan, int obi, int zvlnr, float *v1, float *v2,
if(sn1<0) sn1= 0;
if(sn2>=sn1) {
+ int intzverg;
+
zverg= (double)sn1*zxd + zy0;
rz= rectzofs+sn1;
rp= rectpofs+sn1;
@@ -1239,9 +1246,11 @@ static void zbuffillGL4(ZSpan *zspan, int obi, int zvlnr, float *v1, float *v2,
x= sn2-sn1;
while(x>=0) {
- if((int)zverg < *rz) {
- if(!zspan->rectmask || (int)zverg > *rm) {
- *rz= (int)zverg;
+ intzverg= (int)CLAMPIS(zverg, INT_MIN, INT_MAX);
+
+ if(intzverg < *rz) {
+ if(!zspan->rectmask || intzverg > *rm) {
+ *rz= intzverg;
*rp= zvlnr;
*ro= obi;
}
@@ -1359,7 +1368,8 @@ static void zbuffillGL_onlyZ(ZSpan *zspan, int obi, int zvlnr, float *v1, float
x= sn2-sn1;
while(x>=0) {
- int zvergi= (int)zverg;
+ int zvergi= (int)CLAMPIS(zverg, INT_MIN, INT_MAX);
+
/* option: maintain two depth values, closest and 2nd closest */
if(zvergi < *rz) {
if(rectzofs1) *rz1= *rz;
@@ -2278,7 +2288,7 @@ static int hashlist_projectvert(float *v1, float winmat[][4], float *hoco)
return 0;
}
- buck= &bucket[ (((long)v1)/16) & 255 ];
+ buck= &bucket[ (((intptr_t)v1)/16) & 255 ];
if(buck->vert==v1) {
QUATCOPY(hoco, buck->hoco);
return buck->clip;
@@ -2410,7 +2420,7 @@ void zbuffer_shadow(Render *re, float winmat[][4], LampRen *lar, int *rectz, int
float obwinmat[4][4], ho1[4], ho2[4], ho3[4], ho4[4];
int a, b, c, i, c1, c2, c3, c4, ok=1, lay= -1;
- if(lar->mode & LA_LAYER) lay= lar->lay;
+ if(lar->mode & (LA_LAYER|LA_LAYER_SHADOW)) lay= lar->lay;
/* 1.0f for clipping in clippyra()... bad stuff actually */
zbuf_alloc_span(&zspan, size, size, 1.0f);
@@ -2981,10 +2991,11 @@ void RE_zbuf_accumulate_vecblur(NodeBlurData *nbd, int xsize, int ysize, float *
{
ZSpan zspan;
DrawBufPixel *rectdraw, *dr;
- static float jit[16][2];
+ static float jit[256][2];
float v1[3], v2[3], v3[3], v4[3], fx, fy;
- float *rectvz, *dvz, *dimg, *dvec1, *dvec2, *dz, *dz1, *dz2, *rectz, *minvecbufrect= NULL;
- float maxspeedsq= (float)nbd->maxspeed*nbd->maxspeed;
+ float *rectvz, *dvz, *dimg, *dvec1, *dvec2, *dz, *dz1, *dz2, *rectz;
+ float *minvecbufrect= NULL, *rectweight, *rw, *rectmax, *rm, *ro;
+ float maxspeedsq= (float)nbd->maxspeed*nbd->maxspeed, totfac;
int y, x, step, maxspeed=nbd->maxspeed, samples= nbd->samples;
int tsktsk= 0;
static int firsttime= 1;
@@ -3003,6 +3014,9 @@ void RE_zbuf_accumulate_vecblur(NodeBlurData *nbd, int xsize, int ysize, float *
rectmove= MEM_mapallocN(xsize*ysize, "rectmove");
rectdraw= MEM_mapallocN(sizeof(DrawBufPixel)*xsize*ysize, "rect draw");
zspan.rectp= (int *)rectdraw;
+
+ rectweight= MEM_mapallocN(sizeof(float)*xsize*ysize, "rect weight");
+ rectmax= MEM_mapallocN(sizeof(float)*xsize*ysize, "rect max");
/* debug... check if PASS_VECTOR_MAX still is in buffers */
dvec1= vecbufrect;
@@ -3142,7 +3156,7 @@ void RE_zbuf_accumulate_vecblur(NodeBlurData *nbd, int xsize, int ysize, float *
dm= rectmove;
dvec1= vecbufrect;
for(x=xsize*ysize; x>0; x--, dm++, dvec1+=4) {
- if(dvec1[0]!=0.0f || dvec1[1]!=0.0f || dvec1[2]!=0.0f || dvec1[3]!=0.0f)
+ if((dvec1[0]!=0.0f || dvec1[1]!=0.0f || dvec1[2]!=0.0f || dvec1[3]!=0.0f))
*dm= 255;
}
@@ -3151,9 +3165,12 @@ void RE_zbuf_accumulate_vecblur(NodeBlurData *nbd, int xsize, int ysize, float *
/* has to become static, the init-jit calls a random-seed, screwing up texture noise node */
if(firsttime) {
firsttime= 0;
- BLI_initjit(jit[0], 16);
+ BLI_initjit(jit[0], 256);
}
+ memset(newrect, 0, sizeof(float)*xsize*ysize*4);
+ totfac= 0.0f;
+
/* accumulate */
samples/= 2;
for(step= 1; step<=samples; step++) {
@@ -3161,7 +3178,7 @@ void RE_zbuf_accumulate_vecblur(NodeBlurData *nbd, int xsize, int ysize, float *
int side;
for(side=0; side<2; side++) {
- float blendfac= 1.0f/((ABS(step)*2+side)+1), ipodata[4];
+ float blendfac, ipodata[4];
/* clear zbuf, if we draw future we fill in not moving pixels */
if(0)
@@ -3193,30 +3210,32 @@ void RE_zbuf_accumulate_vecblur(NodeBlurData *nbd, int xsize, int ysize, float *
set_quad_bezier_ipo(0.5f + 0.5f*speedfac, ipodata);
- for(fy= -0.5f+jit[step & 15][0], y=0; y<ysize; y++, fy+=1.0f) {
- for(fx= -0.5f+jit[step & 15][1], x=0; x<xsize; x++, fx+=1.0f, dimg+=4, dz1+=4, dz2+=4, dm++, dz++) {
+ for(fy= -0.5f+jit[step & 255][0], y=0; y<ysize; y++, fy+=1.0f) {
+ for(fx= -0.5f+jit[step & 255][1], x=0; x<xsize; x++, fx+=1.0f, dimg+=4, dz1+=4, dz2+=4, dm++, dz++) {
if(*dm>1) {
+ float jfx = fx + 0.5f;
+ float jfy = fy + 0.5f;
DrawBufPixel col;
/* make vertices */
if(nbd->curved) { /* curved */
quad_bezier_2d(v1, dz1, dz1+2, ipodata);
- v1[0]+= fx; v1[1]+= fy; v1[2]= *dz;
+ v1[0]+= jfx; v1[1]+= jfy; v1[2]= *dz;
quad_bezier_2d(v2, dz1+4, dz1+4+2, ipodata);
- v2[0]+= fx+1.0f; v2[1]+= fy; v2[2]= *dz;
+ v2[0]+= jfx+1.0f; v2[1]+= jfy; v2[2]= *dz;
quad_bezier_2d(v3, dz2+4, dz2+4+2, ipodata);
- v3[0]+= fx+1.0f; v3[1]+= fy+1.0f; v3[2]= *dz;
+ v3[0]+= jfx+1.0f; v3[1]+= jfy+1.0f; v3[2]= *dz;
quad_bezier_2d(v4, dz2, dz2+2, ipodata);
- v4[0]+= fx; v4[1]+= fy+1.0f; v4[2]= *dz;
+ v4[0]+= jfx; v4[1]+= jfy+1.0f; v4[2]= *dz;
}
else {
- v1[0]= speedfac*dz1[0]+fx; v1[1]= speedfac*dz1[1]+fy; v1[2]= *dz;
- v2[0]= speedfac*dz1[4]+fx+1.0f; v2[1]= speedfac*dz1[5]+fy; v2[2]= *dz;
- v3[0]= speedfac*dz2[4]+fx+1.0f; v3[1]= speedfac*dz2[5]+fy+1.0f; v3[2]= *dz;
- v4[0]= speedfac*dz2[0]+fx; v4[1]= speedfac*dz2[1]+fy+1.0f; v4[2]= *dz;
+ v1[0]= speedfac*dz1[0]+jfx; v1[1]= speedfac*dz1[1]+jfy; v1[2]= *dz;
+ v2[0]= speedfac*dz1[4]+jfx+1.0f; v2[1]= speedfac*dz1[5]+jfy; v2[2]= *dz;
+ v3[0]= speedfac*dz2[4]+jfx+1.0f; v3[1]= speedfac*dz2[5]+jfy+1.0f; v3[2]= *dz;
+ v4[0]= speedfac*dz2[0]+jfx; v4[1]= speedfac*dz2[1]+jfy+1.0f; v4[2]= *dz;
}
if(*dm==255) col.alpha= 1.0f;
else if(*dm<2) col.alpha= 0.0f;
@@ -3229,26 +3248,59 @@ void RE_zbuf_accumulate_vecblur(NodeBlurData *nbd, int xsize, int ysize, float *
dz1+=4;
dz2+=4;
}
-
+
+ /* blend with a falloff. this fixes the ugly effect you get with
+ * a fast moving object. then it looks like a solid object overlayed
+ * over a very transparent moving version of itself. in reality, the
+ * whole object should become transparent if it is moving fast, be
+ * we don't know what is behind it so we don't do that. this hack
+ * overestimates the contribution of foreground pixels but looks a
+ * bit better without a sudden cutoff. */
+ blendfac= ((samples - step)/(float)samples);
+ /* smoothstep to make it look a bit nicer as well */
+ blendfac= 3.0f*pow(blendfac, 2.0f) - 2.0f*pow(blendfac, 3.0f);
+
/* accum */
- for(dr= rectdraw, dz2=newrect, x= xsize*ysize-1; x>=0; x--, dr++, dz2+=4) {
+ rw= rectweight;
+ rm= rectmax;
+ for(dr= rectdraw, dz2=newrect, x= xsize*ysize-1; x>=0; x--, dr++, dz2+=4, rw++, rm++) {
if(dr->colpoin) {
- float bfac= dr->alpha*blendfac*dr->colpoin[3];
- float mf= 1.0f - bfac;
+ float bfac= dr->alpha*blendfac;
- dz2[0]= mf*dz2[0] + bfac*dr->colpoin[0];
- dz2[1]= mf*dz2[1] + bfac*dr->colpoin[1];
- dz2[2]= mf*dz2[2] + bfac*dr->colpoin[2];
- dz2[3]= mf*dz2[3] + bfac*dr->colpoin[3];
+ dz2[0] += bfac*dr->colpoin[0];
+ dz2[1] += bfac*dr->colpoin[1];
+ dz2[2] += bfac*dr->colpoin[2];
+ dz2[3] += bfac*dr->colpoin[3];
+
+ *rw += bfac;
+ *rm= MAX2(*rm, bfac);
}
}
}
}
+ /* blend between original images and accumulated image */
+ rw= rectweight;
+ rm= rectmax;
+ ro= imgrect;
+ dm= rectmove;
+ for(dz2=newrect, x= xsize*ysize-1; x>=0; x--, dz2+=4, ro+=4, rw++, rm++, dm++) {
+ float mfac = *rm;
+ float fac = (*rw == 0.0f)? 0.0f: mfac/(*rw);
+ float nfac = 1.0f - mfac;
+
+ dz2[0]= fac*dz2[0] + nfac*ro[0];
+ dz2[1]= fac*dz2[1] + nfac*ro[1];
+ dz2[2]= fac*dz2[2] + nfac*ro[2];
+ dz2[3]= fac*dz2[3] + nfac*ro[3];
+ }
+
MEM_freeN(rectz);
MEM_freeN(rectmove);
MEM_freeN(rectdraw);
MEM_freeN(rectvz);
+ MEM_freeN(rectweight);
+ MEM_freeN(rectmax);
if(minvecbufrect) MEM_freeN(vecbufrect); /* rects were swapped! */
zbuf_free_span(&zspan);
}
@@ -3263,7 +3315,7 @@ static void copyto_abufz(RenderPart *pa, int *arectz, int *rectmask, int sample)
{
PixStr *ps;
int x, y, *rza, *rma;
- long *rd;
+ intptr_t *rd;
if(R.osa==0) {
memcpy(arectz, pa->rectz, sizeof(int)*pa->rectx*pa->recty);
@@ -3484,7 +3536,7 @@ static int zbuffer_abuf(RenderPart *pa, APixstr *APixbuf, ListBase *apsmbase, Re
/* speed pointer NULL = sky, we clear */
/* else if either alpha is full or no solid was filled in: copy speed */
/* else fill in minimum speed */
-void add_transp_speed(RenderLayer *rl, int offset, float *speed, float alpha, long *rdrect)
+void add_transp_speed(RenderLayer *rl, int offset, float *speed, float alpha, intptr_t *rdrect)
{
RenderPass *rpass;
@@ -3958,7 +4010,7 @@ unsigned short *zbuffer_transp_shade(RenderPart *pa, RenderLayer *rl, float *pas
ZTranspRow zrow[MAX_ZROW];
StrandShadeCache *sscache= NULL;
float sampalpha, alpha, *passrect= pass;
- long *rdrect;
+ intptr_t *rdrect;
int x, y, crop=0, a, b, totface, totsample, doztra;
int addpassflag, offs= 0, od, addzbuf, osa = (R.osa? R.osa: 1);
unsigned short *ztramask= NULL, filled;
diff --git a/source/blender/src/CMakeLists.txt b/source/blender/src/CMakeLists.txt
index 342579fb3b0..e2757dbc75d 100644
--- a/source/blender/src/CMakeLists.txt
+++ b/source/blender/src/CMakeLists.txt
@@ -35,7 +35,7 @@ SET(INC
../../kernel/gen_system ../../../intern/SoundSystem ../readstreamglue
../quicktime ../../../intern/elbeem/extern
../../../intern/ghost ../../../intern/opennl/extern
- ../nodes ../../../extern/glew/include
+ ../nodes ../../../extern/glew/include ../gpu
${PYTHON_INC}
${SDL_INC}
)
@@ -80,3 +80,6 @@ IF(WITH_VERSE)
ADD_DEPENDENCIES(src mkprot verse)
ENDIF(WITH_VERSE)
+IF(NOT WITH_ELBEEM)
+ ADD_DEFINITIONS(-DDISABLE_ELBEEM)
+ENDIF(NOT WITH_ELBEEM)
diff --git a/source/blender/src/Makefile b/source/blender/src/Makefile
index 001efc58b5d..46e916b0437 100644
--- a/source/blender/src/Makefile
+++ b/source/blender/src/Makefile
@@ -68,6 +68,7 @@ CPPFLAGS += -I..
CPPFLAGS += -I../../kernel/gen_system
CPPFLAGS += -I../../gameengine/SoundSystem
CPPFLAGS += -I../ftfont
+CPPFLAGS += -I../gpu
# Only used by py_demo.c !!!
CPPFLAGS += -I../radiosity/extern/include
diff --git a/source/blender/src/SConscript b/source/blender/src/SConscript
index 229cc87ef37..c421d1e8388 100644
--- a/source/blender/src/SConscript
+++ b/source/blender/src/SConscript
@@ -26,7 +26,8 @@ incs += ' #/intern/bsp/extern ../radiosity/extern/include'
incs += ' #/intern/decimation/extern ../blenloader ../python'
incs += ' ../../kernel/gen_system #/intern/SoundSystem ../readstreamglue ../nodes'
incs += ' ../quicktime #/intern/elbeem/extern'
-incs += ' #/intern/ghost #/intern/opennl/extern #/extern/glew/include'
+incs += ' #/intern/ghost #/intern/opennl/extern'
+incs += ' ../gpu #extern/glew/include'
incs += ' ' + env['BF_PYTHON_INC']
@@ -74,7 +75,13 @@ if env['WITH_BF_VERSE']:
# TODO buildinfo
if env['BF_BUILDINFO'] == 1:
defs.append('NAN_BUILDINFO')
-
+
+if env['BF_NO_ELBEEM'] == 1:
+ defs.append('DISABLE_ELBEEM')
+
+if env['WITH_BF_SDL'] == 0:
+ defs.append('DISABLE_SDL')
+
if (env['BF_SPLIT_SRC'] == 1) and (env['OURPLATFORM'] == 'win32-mingw'):
for i in range(numlibs):
env.BlenderLib ( libname = 'src%d' % (i), sources = subsources[i], includes = Split(incs), defines = defs, libtype=['core', 'intern'], priority = [5, 25] )
diff --git a/source/blender/src/blenderbuttons.c b/source/blender/src/blenderbuttons.c
index e15ef3fd898..f29397b2156 100644
--- a/source/blender/src/blenderbuttons.c
+++ b/source/blender/src/blenderbuttons.c
@@ -1,2181 +1,2139 @@
/* DataToC output of file <blenderbuttons> */
-int datatoc_blenderbuttons_size= 69599;
+int datatoc_blenderbuttons_size= 68242;
char datatoc_blenderbuttons[]= {
-137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 2, 0, 0, 0, 1, 0, 8, 6, 0, 0, 0,197,144,
-206,103, 0, 0, 0, 1,115, 82, 71, 66, 0,174,206, 28,233, 0, 0, 0, 6, 98, 75, 71, 68, 0,255, 0,255, 0,255,160,189,167,
-147, 0, 0, 0, 9,112, 72, 89,115, 0, 0, 11, 19, 0, 0, 11, 19, 1, 0,154,156, 24, 0, 0, 0, 7,116, 73, 77, 69, 7,216,
- 5, 19, 11, 8, 1, 11,126, 22,156, 0, 0, 32, 0, 73, 68, 65, 84,120,218,236,125,121, 92, 84,229,254,255,251, 57,179,179,239,
-168,184,128,138,251,130,224, 26,106, 80,168,201,215, 52, 21, 48,179,237,214,189, 78,150,173,150,102,117,111,245,203, 43,106,218,
-170,233,216,162, 89,106, 9,106,120,115, 5, 29,212,144,220, 21, 75, 19, 5, 17, 65,144,109, 96,134,217,207,156,231,247,199,204,
-208,128,192, 44,160, 81,205,251,197,188,152,115,230,204,123,158,115,158,229,253,249,124,158,141, 68, 69, 69, 81,184,225,134, 27,
-110,184,225,134, 27,127, 43, 48,238, 71,224,134, 27,110,184,225,134, 27,127, 31,156, 57,155, 5, 0, 32,238, 8,128, 27,110,184,
-225,134, 27,110,184, 35, 0,110,184,225,134, 27,110,184,225,134,219, 0,112,195, 13, 55,220,112,195, 13, 55,220, 6,128, 27,110,
-184,225,134, 27,110,184,241,151, 0,223,246, 96,222,188,121,196, 85,162,181,107,215,222, 54,150,192,205,231,230,107, 5,116,237,
-218,181,127, 88,250,178,179,179,105, 92, 92, 28,113,231,199,159,151,239,220,185,115, 46, 23,190,168,168, 40,184,243,195,205,247,
- 87,230,115,218, 0,248, 59, 67, 42,149, 54,122,128, 50,153,140,116,228,116,174, 91,183, 14,132, 16,226,206, 57,215,242,120,246,
-236,217, 72, 79, 79,111, 56, 78, 74, 74,250, 75, 60,203, 61,123,207,180,218, 16, 36, 78,142,254, 75,151, 25,137,255, 78,136,117,
-189, 17, 1, 3,234,177, 23,249,218,183, 58,108, 89,236,168,109,140, 27,127,211, 8,192,221, 40,172,123,246,236,137,203,200,200,
-144, 91,143,167, 77,155, 22,159,152,152,152,221, 17, 30, 6,165,230,182,179,163,234,170, 84, 42,165, 69, 69, 69, 0,128,240,240,
-112, 0,248, 83, 52, 34, 77,141, 43,139,129,213,162,103,238, 40,239,214,173, 91, 29, 54,212,164, 82, 41,221,182,109, 91,195,241,
-206,157, 59, 49, 97,194,132,134,227,244,244,116,250, 71, 25, 1, 49, 49, 49, 20, 0, 78,159, 62, 77,218,227,186,140, 31,100,173,
- 24, 0,178, 54,231, 95, 88, 68, 55, 0,192, 45,157, 14,172, 86,111, 62, 89,171, 4, 0, 36, 39, 39, 35, 33, 33,161,197,244,173,
- 79, 88, 79, 35,203, 34,157,250,253,248, 95,227, 29,200, 23, 9,252,159,189, 0, 93,198, 78, 40, 20,211,161, 0, 16, 45,121, 31,
-111, 73, 78,163,155, 24,168,212, 21,224, 45,109,138, 83,191,155,149,149, 21,151,150,150, 38,183, 61,151,156,156, 28,159,144,144,
-144,221,145,234, 86,123,181, 1,127,134,251,189, 19,120,231,141, 23,136,151,192,151,232,197, 66,170,175,213, 50,245, 90, 37,247,
-193, 39,171,255, 22,179,227,236, 26, 0,123,246,236,137,179,254,111,171, 80, 91, 27,146,119,183, 45,129, 87, 55, 95,212,223,168,
-195,219, 41,111,201, 51, 50, 50,224,182,134,237, 67, 38,147,145,240,240,112, 90, 84, 84,132,162,162, 34,236,219,183,175,195,122,
- 18,214,188,150,201,100, 68, 38,147, 9,164, 82,169,113,197,138, 21, 39, 1, 96,225,194,133, 35, 90,251,238,244,233,211, 27,222,
-179,172, 9, 6,163, 30, 6,189, 1, 6,131,249,197,178, 44, 22, 46, 92,232, 84, 90,108,197,191, 57, 76,152, 48,225, 15, 53, 2,
- 28, 49,126, 98, 98, 98,236,114, 36, 78,142, 38,174,136,188,195,240,243, 65, 94,225,119,144,160, 43, 76,200, 65,197, 23,103,112,
-190,160, 26, 51,150,109,112,232,235,145,101,145, 14, 10,186, 25,242,129,114,187, 13,177, 36,241, 45, 4, 76,123, 26,165, 47, 69,
- 3, 90, 69,195,249, 51,218,215,112, 6, 0,180,192,120, 73, 50, 14,250,159,134, 31,128, 24, 69,140,195,229,183, 41,210,210,210,
-228,105,105,105, 29,162,189,178,166,177, 61,218,128, 63,195,253,182, 55, 54,173, 89, 75, 30, 13,139,224,191,144,244, 56, 47,164,
-127, 24,195, 39, 33, 68, 83, 87,199,137, 17,106, 98,186,116, 53,233,110, 94, 51, 57,248,236,110, 58,209,134,119,113,128,111,129,
- 19,124,171,238,168, 1,144,145,145, 33,223,246,239, 55,144,242,222, 82,121, 98, 98, 34,105, 75, 1,179, 10, 63, 0, 84,105,170,
-129, 64, 96,241,193,119,160, 44, 84, 64,250,175,142, 37,100, 45, 85,136, 63, 58,141,182, 70,192, 3, 15, 60,128,162,162, 34,132,
-135,135,119,184,103, 39,151,155, 29,137,248,248,120, 42,147,201, 24,153, 76, 22, 38,149, 74, 75, 87,172, 88,113,218, 81, 30,150,
-101, 97, 48, 24, 27,132,223, 86,252, 79,157, 58,133,225,195,135, 59,149,174,148,148,223, 61,192,217,179,103, 35, 51, 51,179,145,
- 1,208, 30,101,197,149,124, 56,125,250, 52,201,206,206,166, 19, 39, 78,188,237,179, 3, 7, 14, 96,235,214,173, 13,199,173,141,
- 91,184,205,120,111,199,238,128,176,136,110, 40, 85,212, 97,199, 51, 51, 17, 72, 98, 81,240,249,171,232, 57,189, 39, 50,157, 16,
-127, 43,230,206,157, 75, 1, 96,253,250,245,109, 46,179, 97,219,114,160,185, 94,143, 82,105, 68,171,215, 93, 16,103,225,221,193,
-183,144,122,225,205, 54,229,103,123,136,110,123,114,180, 71, 36,224, 78,223,111,123, 33, 39, 39,199, 3,192, 61, 0,188,108, 78,
-215, 2,200,139,141,141,173,113,148, 71,203,105, 25, 67,149, 94, 48,121,234,116,177, 2, 70,177, 64,192,231, 43,117, 98, 70, 40,
-212,114, 60, 31, 79,214, 32, 49, 26,249,229, 55,245, 98,158, 72,167, 51,233, 77, 82,169,148, 52, 55,102,196, 22,181,181,181,255,
-181,190,207,207,207,175,242,244,244,100,212,106, 53,103,123,205,200,145, 35, 63,116, 52,141,148, 82,187,194, 78, 8, 89,208,214,
-103,202,183,231,253,247,233,211, 7,145, 94, 62,104, 75, 20,192, 86,252,171, 52,213, 72,189,255,157,134,207,254,145,241, 44, 16,
- 2, 76, 95,145,226, 84, 33,107, 73,160,219, 75,164,111,220,184, 1, 0,232,214,173, 91,163,247,214,223,181, 87, 32,238,100,136,
-207,214, 8, 48, 26, 89,172, 91,183,238,142,121, 1,206,114, 54, 17,127,219,239,223,148,201,100,254, 82,169, 84,225,176,248, 27,
-141, 48, 24,244,208, 27, 12, 48, 54, 17,127,202, 57, 23,161, 75, 73, 73,193,169, 83,167, 26,142, 87,173, 90,133,164,164,164,134,
-227,244,244,244, 54, 27, 59, 54, 6, 79,155,203,159,173,240,207,158, 61, 27,195,134, 13,115,137,167,189,186, 3, 74, 10,139,161,
-222,249, 31,120, 61,245, 49,194, 34,186, 33, 52, 80,130,194,157,133,102,241,247,243, 49,119, 1, 8,120, 14,113,181,135,240, 3,
- 64,159,139, 87,113,227,237, 37,208,166,109,108, 61, 66, 32,145, 64,167,211,161,160,160, 0, 21,186,203,232,131,176, 22,175,205,
-202,202,138,107,173,236,203,100, 50, 98,173, 39, 89, 89, 89,113,206,132,199,109,163, 98,214,250,106,123,206, 89, 71,160, 37,225,
-118,166, 45,104,238,126, 51, 51, 51, 41, 33, 4, 9, 9, 9,164, 45,247,107,197,211, 79, 63, 77,191,252,242,203, 54,229,121, 78,
- 78,142, 47,128,233, 7, 15, 30,252, 15,199,113,122, 27, 17,228,243,120, 60, 79, 0,255,140,141,141,221, 99,143, 39,191, 48,159,
- 47, 17,138,197, 2,129,200,147,225, 19, 31,202, 19,121,112, 60, 30,159, 35, 12, 56,194, 55, 81, 30, 79,207,227,136, 78,205, 51,
-105, 60,133, 2,194,235,213, 77, 39,158, 26,194,161,216,126, 26, 21, 10,133, 82,163,209,176, 0,160, 86,171,185, 55,222,120,163,
- 65,240,151, 46, 93,250,114, 91,203,251,132, 9, 19,158,177,190,207,204,204, 92,215, 30,117,136,177,231,253, 47,153,149, 4, 93,
-101, 37, 94, 29,216, 15,182,125,247, 14,123, 33,150, 46, 4, 91,241,159, 54,109, 90,188, 76, 38, 35,211,166, 77,139,223, 48,237,
- 51,115,100,177,111, 80,163,235, 29,193,194, 53,249, 88,184, 38, 31,207,173,188,132, 39,222,251, 5, 51, 22,159,107,243, 3, 41,
- 41, 41,113,200, 48,184, 91,226, 95, 84, 84,212,162, 48,135,135,135,195,104, 48, 96,212,200,145,109,254, 29,107,152,124,219,182,
-109,144,203,229, 13,175,214, 12,173,150,196, 48, 62, 62,190,169,248, 55, 24,202,142, 52, 76, 44,107, 50,123,254,122,115,232,191,
-169,248,155, 76, 38,168,181,106,167,238,209, 26, 49,104, 26, 53, 72, 79, 79, 71,122,122,122, 35, 99,192,169,251,205,110,220, 30,
-202,179,179,157,122,102,173,137,255,236,217,179,177, 98,197,138, 6,241, 23,240, 5, 78,241, 36, 78,142, 38,150, 46,152,102, 95,
-206,112,105, 81,140,250,233,163, 64,211, 94, 69, 73, 97, 49,232,244,254,191,123, 43,105,175,130,223, 57, 24,240,243,187,171, 30,
-161,186,170, 0,218,180,141,160,148,226,194,133, 11, 24, 63,126, 60, 36, 18, 73, 35,225,247,247,247,135, 86,171,133, 86,171, 69,
-105,105, 41, 30,209,190,128, 47,252, 95,106,145,211,218, 7,222,218,243,177,126,214,180,191,220, 81,225,110, 47,103,197,250,221,
-166,226,111,207, 65,106,237,126, 51, 51, 51,105,122,122, 58,210,210,210,144,149,149, 69,219,122,191, 79, 63,253, 52,229,243,249,
-120,250,233,167, 93,174, 19, 57, 57, 57, 98, 0,255,202,202,202,122,227,189,247,222, 59, 78, 8, 9,183,190, 0,116, 13, 12, 12,
-244, 56,116,232,208,218,156,156,156,241,173,241,152, 40,199,227, 17,129,200,192, 82, 31,189,222, 24, 98,226,184,174, 38,142,139,
- 48, 17,210, 29, 60, 94, 32, 33,196, 15,132,231,195, 81, 4, 80, 3,231,167,212, 26, 61, 67,124, 88, 30, 51, 82,229, 80, 30,105,
- 52, 26,182,169,215,223,209,193, 56,226,253,107,202,203, 48,121, 88,180,211, 2,109, 53, 34,222,221,182, 4, 0, 26,196,223, 26,
- 69, 72, 76, 76,204,182, 26, 1, 37,202,155,136, 94, 56,218, 41, 35, 67,173, 53, 65,173, 53,161,172, 90,143,210, 74, 29,110,220,
-210,185, 36,124,214,202, 98, 79,252,255, 40,180,100, 4, 0,128,206,160,135, 78,167,115,153,219, 42,218,214, 62,242,224,224, 96,
- 91,111, 22,142, 54, 38, 77, 61,225,150, 66,137,142, 52,122, 6,163,222,236,249,235, 13, 48, 24, 27,139,191,209,104,132, 90,173,
-134, 74,169,250, 67,243,196,108, 48,165,217, 6,228,172,127,216,182, 45,205,101, 35,192, 86,252,173,194,207, 48, 12,196, 98, 49,
- 60,189, 60,218,148,230, 61,123,207,208,150, 94,246,190,187,111,241, 59, 8, 68, 44,216,132,231, 1, 0, 94,185, 87,113,190,160,
-218,108,176, 37, 60, 15,227,133,119,129,170,106,167,210, 51,119,238, 92,106,237, 14,112, 5,158,168, 2, 0,108,220,184, 17, 25,
- 25, 25,120,255,253,247,113,226,196, 9,232,245,122, 84, 84, 84, 88,189,178,134,235,195,194,194,160, 5,192,195,181, 63,164,188,
-180, 84,238,155,122,243,174, 26, 20,205,117, 11, 56,203,103, 27, 9, 75, 75, 75,107,211, 61, 91,197, 31, 0, 92, 53, 2,114,114,
-114, 58, 89,196,127,238,215, 95,127,125,241,173,183,222,122,104,203,150, 45,232,211,167, 15, 0,160, 71,143, 30,168,171,171, 19,
-189,251,238,187,167, 15, 29, 58,244,109, 78, 78, 78,120,179, 68, 4, 0, 71, 9, 56, 86,108, 50,177, 1, 38,214,212,213,104, 50,
-246,230, 49,164,139,144,207, 8,196, 2,158,150,239, 33,172,245,244,230, 41,121, 98,202,138,121, 60, 79, 62,107,240,185,118,230,
-172,232,177,224,143,236,166, 59, 63, 63,191, 74,173, 86,115,205,133,249,135, 14, 29,122,217, 96, 48,180, 91, 89, 26, 58,116,104,
-187,113,241, 91, 19,238,207,231, 62,253,187,216,150,220,192,171, 3,251, 97,101, 70,134,211, 99, 1,172,222,191, 85,244, 27,121,
- 41,137,137,217, 25, 25, 25, 0,128,192,193,157,156, 74,124,189,214, 4,149,134,133, 82,205,162,174,158, 69,173,138,117,250, 1,
- 52, 55,242,223,214,203,183,125, 95, 88, 88,136,218,218,218,187,214,104,172, 91,183, 14,225,225,225,176, 14,250,179,237,235,151,
- 74,165,116,221,186,117,208,105,181, 46, 27, 0, 82,169,148,110,216,176, 1, 37,165,165, 16,240,120, 8,237,212,169,145,248,223,
-127,255,253, 72, 73, 73,113,168,113,146,201,100, 36, 62, 62,190,145, 17,208, 52,146,225,232, 88, 5,131,222, 0,131, 94, 15,163,
-209, 0,150, 53, 53,136,191, 94,175,135, 70,163, 65,125,125, 61, 84, 42,231, 13, 0,219, 46, 0, 43, 92,245,252,183,165,109, 3,
- 40, 80,101, 17, 26,106, 46, 68, 32,148,154,141,128,180, 52,164, 36, 39, 59,221, 29,208, 84,252, 5, 2, 1, 68, 34, 17,196, 98,
- 49,196, 98,177, 75,247,221,168, 94,183,208, 37, 96,175, 75,107,198,186,237,160, 83, 35,112,107, 76, 52, 2, 17, 11,201,204, 79,
-193,150, 85, 2,126, 62,224, 87,111,197,143, 31,157, 6,120, 60,167,210,210,214,174, 0, 53,207,220,166,164,166,166,162,178,178,
- 18,107,215,174,197,208,161, 67,241,222,123,239, 33, 58, 58, 26, 90,173,182,169,135,102, 53,169,239,170,240, 59, 42,208,174,118,
- 7,180,100, 72,184,194,147,156,156,220, 32,252,174,212,141,230,196,191, 65,108,248,124,176, 44,235,108,119,128,119, 94, 94,222,
- 39,243,230,205, 59, 50,120,240, 96, 31, 0,120,231,157,119,144,159,159, 15, 0, 24, 61,122, 52,118,236,216,129,177, 99,199,122,
- 62,242,200, 35, 5,217,217,217, 89, 60, 30,239,145,219, 27,122, 32, 32, 48,128, 43, 44, 44, 96,179,229, 7,247,246,238, 29,153,
- 29,209, 35,252, 34,207, 91, 82,193, 35, 66, 53, 35, 18,104, 24,177,135,202,192,231, 25, 64,141, 60, 78,108,244, 86,149, 86,123,
-157, 56,116,110,100,144,127,232, 14,187,198,168, 77,159,255,206,157, 59,159,152, 62,125,250,215,214,176,191, 82,169,100,132, 66,
- 97,155,203, 82,123,133,253,237, 70, 0,172, 94,254,240, 94,145,208, 85, 86, 66, 93, 98, 22,193,241, 22,239,208,217, 40, 64,225,
- 47, 87,111,227,110,238,184,250, 66,185, 83,137,111,171,248,219, 10, 63,165, 20,221,186,117,107,244,153,209,104,108,120,213,214,
-214, 66,173, 86,163,166,166,230,174, 53, 30,214,121,254,251,246,237,107, 20, 9,176,138,255,144, 33, 67,160,211,105, 27, 26, 58,
-106,181,102, 28,108,152,214,124,182, 6, 70,163, 17, 93,195,194, 96, 52,153,154, 21,127,103, 26, 18,139, 17,112,155, 87, 98,157,
-186,216, 90, 36,227, 54, 3,192, 96,108, 16,255,147, 39, 78, 66,163,213, 66,165, 82,161,174,174, 14,181,181,181,141, 60, 59,103,
- 97,237, 6,112,181,223, 31, 0,170,171,170, 81, 93, 93,133,170,234, 26, 84, 85, 87,163,186,186, 26,213, 85,102,143,180, 95,255,
-254,168,177,188,119,214,251, 7,128, 97,195,134,253,238,245,123,122,194,203,203, 27,222, 94,222, 80,169, 84,241,109, 41, 79,173,
-117, 9,216,251,110,193,251,115, 33,152,249, 41, 2, 17, 11,126,238,167, 48,110,127, 30,240,243,193,174,103,147,112,125,215, 53,
- 60,184, 98, 19,192,191,203,203,138,232,174, 67, 18, 38,129, 90,173,134, 78,167,131, 70,163, 65,110,110, 46,150, 45, 91,214,236,
-229, 30, 30,214, 8,202, 85,167,197,219, 85,175,218,246,249, 54,125,222, 45, 29,183,197,200,104,174, 91,192, 25,158,132,132, 4,
-146,156,156,140,164,164, 36, 76,152, 48,193,229,200,196,151, 95,126, 73, 88,182,113,155,204,178, 44,156, 29, 11, 16, 27, 27,123,
- 37, 57, 57,121,232,150, 45, 91,198, 31, 61,122,212, 59, 33, 33,225,132, 85,252, 45,142, 42, 68, 34, 17,189,126,253,186, 96,239,
-222,189,125,253,253,253, 79,198,198,198, 22, 52,199, 85, 87, 91,199, 69, 70,244, 81,141, 30, 61, 58,233,226,197, 95,239, 83,170,
- 85,157, 40,107,100,193,192,200,234, 25,189, 94,175,215, 42, 81,174,228,244, 58, 85,105,113, 57,251,227,238, 61,203,131, 2,131,
- 43, 12, 6,141, 93,247,189, 57,239, 95,161, 80,240, 1,192,199,199,167,195,118, 11, 48, 45,121,255,219,254,253,134,217,106, 46,
- 47,107,244,153,179, 99, 1,166, 77,155, 22,191,230, 95, 31, 3, 48, 15,248,203,200,200,144,219, 78, 45,204,200,200,144, 79,248,
-230, 33, 0,192,153, 21, 63, 99,218,180,105,241,119,235,230,109, 43, 73, 73, 73, 73,131,183,111, 21,125,155,204,133, 74,165,130,
- 78,167,179,105, 68,238, 94, 26,159,121,198, 60,246,195,200,178,184,120,241, 34,206,158, 57,131,161, 67,134, 66,167,211, 65,171,
-213, 65,167,213,226,219,111,190,129,245, 58, 71, 42,250,170, 85,171, 48,160,255, 0, 24,141, 70, 92,185,114, 5,172,209,128,210,
-146,210,118,125,166,214, 99,203,154, 5, 8, 15, 15,119,168, 97, 50, 24,245, 96, 77,230,176,255,241,227, 63, 67,173, 85,163, 94,
-165, 68, 93, 93, 29, 20,181,181, 80, 40,106,218,100,136, 89, 35, 1,109,241,112,142, 28, 57, 2,149, 74, 5,149, 74,105,249,175,
- 66, 80, 96, 32,250,245,239,143,223, 46, 93,194,225, 35, 71,156,230,180,122,255,124,190, 0, 30, 30, 30,240,242,242,130,183,151,
- 23,188,188, 60, 80,163,168,137, 7,144,125,167, 67,253, 45,225,124, 65, 53,140, 23,222, 69, 53,114, 64, 18, 87,130,196,254, 7,
- 5,239,207,197,212, 21, 95, 67, 44, 96, 0, 1,223,252,114, 1,174,118, 5,148, 78,249, 12, 1, 91,167, 64,163,209, 32, 32, 32,
- 0, 10,133, 2, 10,133, 2,199,142, 29, 67, 89, 89, 89, 67,152,184,225,250,210, 82, 60,235, 47, 65,144, 71,101,107, 30,112,188,
-173,168,218, 14,146,179,190,183,126,102,189,214, 21,239,220,209,238, 1, 71,197,223, 85,207,191,185,251, 77, 72, 72, 32, 19, 38,
- 76, 32,109,185,223,166, 70,128, 43,226,111, 69, 80, 80, 80,222, 67, 15, 61,244, 72,106,106,106,223,243,231,207,199, 74, 36, 18,
-222,212,169, 83,137, 72, 36, 2,199,113, 36, 49, 49, 49,239,197, 23, 95, 28, 50,104,208,160, 93,255,252,231, 63,159, 48,153, 76,
-213,173,196,188,185, 95, 47, 93, 57, 57,104,240,144, 71, 79,158, 56, 49, 99,215,238,255, 45, 61,117,226, 68,167,139,249,191,137,
-175,148, 22,208,111, 63,254, 94,146,186,234,253, 1, 89,187,119,175,234,221,171,247,143, 94,161,158, 71, 98, 99, 99, 77,112, 48,
-229, 9, 9, 9, 56,121,242,100,212,186,117,235,222,213,233,116,130,247,222,123,239,131, 93,187,118,205, 46, 45, 45,189,187,194,
-209,214, 46,128,192,107, 69,168,177,132,254,109, 49, 62, 56, 24, 43,241,155,227, 94,135, 37,196,255,219,233,139,240,235, 27,132,
- 9,223, 60,132,140,199,126,144, 91,195,254, 86,241,183,122,255,206,204, 50,216,145,218, 62, 35,241, 9, 33,184,116,233, 18,172,
-133,181,105,152, 85, 32, 16, 64, 32, 16,160,178,178, 18,137,137,137,119, 61,147,172,163,254,215,173, 91,135,145, 35, 71, 66,167,
-215, 67,171,211, 66,103, 25,220,164,213,153,187, 1, 86,175, 94,109,183, 49,145, 74,165,116,197,138, 21, 48,153, 76, 56,125,250,
- 12, 4,124,115,216, 54, 50, 50, 18,215,138,138, 80, 90, 90,138,173, 91,191,195,236,217, 15,227,224,193,131,212, 54, 18,208, 90,
- 3, 36,147,201,132, 0, 88,169, 84,202, 53,231, 1, 57, 51, 85,209,234,249,231,230,230, 66, 93,175,105, 48,192,148, 42, 37,148,
-202, 58, 40,149,245, 46,135,194,173,222,191,101, 37, 64,151, 12,129,217,179,103, 55, 58,142, 8, 15, 71,191,254,230, 65,113,191,
- 93,186,132,107,150,136, 71,211,235, 28,193,152,123,198, 64, 36, 20, 65, 34,145, 64, 44, 22, 67, 36, 18,161,188,188,220, 97,241,
-183, 23,234,119,117,141,128, 25,203, 54, 96, 7,128, 7, 82,255, 15, 52,237, 85,144,148, 85, 56, 95, 80, 13, 18,224,143,171, 37,
- 74,179,247,239,100, 23, 64,211,174, 0,167,167, 7,106,181, 0,175,160, 73,120,223, 44,244, 70,163, 17, 95,124,241, 5,198,143,
-255,125, 92,216,193, 39,195,128, 10, 13,250,238, 81, 32, 42,184, 71, 75, 13,120,118,147,190,111, 57,208,208,252,203,155, 94,235,
-138, 96,183,214,111,239,170,231,239,170, 33,113,167,239,215, 98, 4,180,121, 22, 64,120,120,248,214,177, 99,199, 6,159,203,203,
- 75,209,106,181, 67,228,242, 67, 18,145, 88,196,103, 8,131, 67,135, 14,121, 15, 24, 48, 96, 83,114,114,242,127, 42, 43, 43,237,
-122,235,179,103,205,228,126,220,251,227,225,161, 67,135, 45, 52,176,250, 7,174,230, 95, 89,202, 21, 21,176, 0,168, 24,140,113,
-112,239,190,105, 33, 33,193,123,120,124,225,183,255,125,107,185,225,219,141, 27, 44,125,124, 45, 99,228,200,145, 31, 38, 36, 36,
- 0, 0, 42, 43, 43,145,149,149,229,243,213, 87, 95, 45, 5,128,147, 39, 79,142, 28, 56,112,224,190, 63,133, 1, 96,245,206,239,
-255,118, 75,235, 94,134, 19, 83, 2,173,214,111,244,194,209, 8, 28,220,169, 65,244,109, 67,255,103, 86,252,236,148,229,218, 94,
-115, 82,173,105,235,223,191, 63, 46, 92,184,208, 72, 88,106,107,107, 11, 0,244,106,238, 59,174,174,189,220,214,116, 54, 61,255,
-237, 55,223, 66,167,211, 65,111,208,195, 96, 48, 96,197,138, 21,176, 39,254, 86,112,156, 9, 98,137, 23,180, 90, 29, 46, 93,188,
- 8,190, 64, 0,163,193, 0, 15, 79, 15,108,221,186, 21, 60, 30,207, 58,119,190,213,123, 93,177, 98,197, 62,169, 84,106,144,201,
-100, 33,214,116, 54, 89, 7,192,169,208,230,194,133, 11,145,147,147,131,250,250,122,212,171,213, 80, 41,149, 22,241, 87, 66,165,
- 84,161, 94, 85, 15,181, 77,131,239,200,179, 27, 62,124, 56, 61,117,234, 84,131,247,223,220, 52, 64, 71, 23, 1,138,139,139,187,
- 45, 47,172,162,127,246,236,217, 6,111,222,209,123,142,137,137,161,214, 69,126,188, 60,188, 32,150,136,161, 82,169,226,109,250,
-176,157,106,120,239,212, 98, 64, 86, 35, 96,122,234, 87,160,219,129,160, 39,101,200,126, 41, 9, 99,151,111, 6, 4, 2,120,138,
-219,214,207,217,212, 16, 0, 0,121,142,189, 96,227, 45, 12,222,231,129,242,255,105,160, 88,242,251, 89,163,209,136,113,227,198,
- 1, 0,194,252, 37,248, 73,214, 13,239, 47,187,129,207,206,104, 91,101,179,245,248, 1,243, 64, 56,107,195,222,116, 80,156,179,
-211,226,108,199,239,180,213,243,111,174, 77,112,133,235, 78,222,175,173, 17,208, 30,229,111,224,192,129,159,168,148,170,189, 35,
- 98,134,143, 84, 41,149, 1,172,137,213,135,134,134, 86,134,133,133,149, 43,149,202,243,149,149,149, 14, 55, 10, 83, 38, 79,225,
- 0,108, 61,122,228, 68,110,236,216,177, 63, 72, 36, 18, 95, 2,202, 17, 66,192,113,180, 78,171, 86,200, 47,231, 21,171,190,221,
-184,193,161,118,222,250,204, 0,243, 64,234,166, 3,245,150, 45, 91,246,159, 63,133, 1,144,152,152,152,221,150, 5,127, 28, 41,
-172, 86, 67,192, 42,252,237, 41,232,109, 73,219,224,193,131,113,242,228, 73, 84, 86, 54,132, 8,123, 1, 64,117,181, 57,162,244,
-216, 99,143,253,161,153,213,244, 25, 81, 74,233,163,143, 61,138,213,171,215, 88,250,204, 89,248,250,250, 18, 71,191,111,133, 68,
- 34,182,242,153,189, 41,181,198,246, 59, 0,236,110, 54,209,127,197,138, 21, 87,164, 82,105,133, 76, 38,227,217, 14, 8,180, 76,
- 11,116,184,161,179,206,125,143,141,141,109,247,103, 55,124,248,240,166,123, 1, 52,124,238,236, 10,128, 50,153,140,100,103,103,
-211,173, 91,183, 54, 90,168,199,202,237, 74,121,142,139,139, 35, 70,214, 8,163,202,216,174,247,222, 90,232,223,217,189, 1,102,
- 44,219, 0,216, 44,252,115,239, 27,191,143, 75, 82,183, 83,122, 27, 69, 0, 6,182,110,124,150,198,150,162, 20, 64,244,251,254,
- 88,114,186, 15,130, 1, 84, 22,168,209,187,119,111, 0,192, 39, 75,252, 49,105, 68, 48, 34, 38,229, 59,244,219,206, 76,117, 75,
- 75, 75,147,183,182,236,177,189,246,166, 61,218,188,182,114,221,141,251,109, 79,140, 30, 51,250, 10,128, 43,183, 69,172, 3, 3,
- 93,226, 27, 55,126,100, 17,154, 29, 21, 26,134,222,125, 6, 57, 99, 72,181,235,125,182,199, 34, 63, 46, 25, 0,119, 90,192,246,
-236,217, 19,151,177,162,227,237, 5, 96,173, 72, 35, 70,140,192,158, 61,123,116, 22,209,231, 0,120,220,137,200, 67, 59, 21, 18,
- 34,147,201, 26, 60,251,214,196,255, 78, 98,225,194,133,182,241,212,134, 6,219, 58,141,208, 25,111,231, 78, 62, 95, 91,238,236,
-236,236, 54, 47,251, 27, 23, 23, 71,226,226,226,218,156, 46,123,107,251,183, 7,218,210, 37,176,104,209, 34, 20, 22, 22,182, 91,
- 90, 28, 89,222,215, 89,156,121, 77,129, 51, 48, 15, 12, 29,159, 44,193,254,227,125, 16,234,225,133, 95, 79,221, 66, 95, 7,197,
-223, 94,249,235,168,203,225,182,199, 90, 2,127,166,251,237,128,207,191, 75, 59,243,173,186, 91,105,191,235,187, 1,222,169, 8,
- 67,123, 26, 1,137,137,137,226, 63, 89, 1, 36,127,240,111, 91, 87,168, 97,173, 6,128,187,241,232, 56,104,107,151, 64,207,158,
- 61, 73,207,158, 61,219,165,189,113,102, 31, 0, 87,113, 36, 77,139, 35,105,249,238, 58,235,134, 27,246,156,200,168,168, 40,234,
-126, 12,110,184,225,134, 27,110,184,241,247, 2,227,126, 4,110,184,225,134, 27,110,184,225, 54, 0,220,112,195, 13, 55,220,112,
-195, 13,183, 1,224,134, 27,110,184,225,134, 27,110,184, 13, 0, 55,220,112,195, 13, 55,220,112,227, 47,129, 70,179, 0,230,205,
-155,231,242,200,212,230,230,137,187,249, 58, 30,223,220,185,115, 93,226, 27, 54,108,216,109,124,103,207,158,117, 57,125,205,241,
-253, 89,242,195,217,103,184,126,253,250,187,146,190,246,206,143,187,153,191,246,166,137, 58,251,252,218,155,207,221,190,184,249,
-154,225,235, 10, 64, 1, 64, 8,160,182,163,165,207,105, 3,192,141,191, 62,214,175, 95,239,126, 8,127, 51,248,249,249, 49, 48,
- 79,207,228,215,213,213,113,148, 82, 83, 71, 74,159,117,223,249,172,172, 44,218, 30, 11,205,180,215, 74,123,110,220, 57,236,218,
-181, 43,110,234,212,169,217,127,242,219,176,174,125, 37,113,214, 0,232,144, 17, 0, 55,254,122,160,148, 54,218,234,216,213, 8,
-192,218,181,107,237, 94, 51,113,226,196,184,204,204,204, 70, 43,139, 77,152, 48, 33,254,192,129, 3, 46, 85,244,244,244,244,102,
-249,146,146,146, 58, 4, 95, 71, 6, 33,132,244, 8, 13, 69, 81,121, 57,173,173,173,181,238,207,224,212, 18,131,182,198,226,169,
- 29,171, 75, 8,193,115,178,189,121, 25,210,201, 67,190,161, 20,202,245,251,242,158, 91, 52, 99, 36, 1, 67,249, 10,149,142, 14,
-159,249,188,211, 91,114,102,101,101,197, 89,151,156,181,252,119,105,185,217,166,226,111, 45,247,109,221,104,167,185,239,186,202,
-217, 30,124,109,221, 50,216,149,104,201,157, 16,255, 61,123,246,200,167, 78,157,250,103, 55,206,172,251,176,223,209,174,244,119,
-222,120,129,241, 18,248, 50,122,177,144,211,215,106,249,245, 90, 37,251,193, 39,171,219,101,135,193,219, 12,128,246, 20, 8, 87,
-185,156,229, 35,132, 48, 22, 43, 76, 75, 41,229, 58, 90,250,218, 75, 96,219,195, 0,176, 54,234,182,105, 37,132,232, 41,165,162,
-182, 68, 10, 8, 33, 20, 0, 86,173, 90,213,104,199,176, 5, 11, 22,200, 9, 33,160,148, 18,103, 27, 37, 0,224,190,247,111,116,
-158,153,149, 41,207,204,204,116,186, 1,108, 79,190, 63, 67, 20,133, 82, 74,227,123, 69,208,248, 94, 17, 0,128,114, 3, 59,167,
-147,144,191,217,250,249,111,202,122, 81,153, 3, 27,167, 0,192,201,237,159,230,115, 28,194,238, 25, 19,228,243,193, 75, 99, 15,
- 12, 25,226,119,253,185,229, 35,255, 11, 0,183,234, 52,255, 39,224,147,255, 1,228,226,220,185,115, 7, 58,251,108,154, 46, 69,
-219,150,229,102,109,197,191, 61,140,128,150,190,227,170, 88,182, 7, 95,114,114, 50,210,210,210, 28,186, 39,103, 34, 42,173,241,
-181, 87,100,198, 86,252, 57,142,195,250,245,235,177,121,243,102, 58,103,206, 28,226,100, 30, 11,101, 50, 89,187,172,151,189,120,
-241,226,185,169,169,169,174, 86,104, 31,139,231,175,190, 19,117,120,211,154,181,204,163, 97, 17,226, 23,146, 30, 23,134,244, 15,
-227,243, 73, 8,163,169,171, 99,197, 8, 53, 48, 93,186, 26,116, 55,175, 25,218,250, 27,124, 71, 26, 55,169, 84, 26, 12, 96, 56,
-128, 83, 50,153,172,178,131,121, 58, 62, 0, 18, 0, 76, 7,176,147, 16,146, 69, 41, 85,182, 3,239,119,148,210,135, 93, 21,216,
-142, 2,134, 97, 90, 53, 82, 8, 33, 35, 1, 8, 9, 33, 33,148,210,138,150,174,107,205, 64, 33,132,208, 23, 95,124, 17,221,187,
-119,191,109,187,208, 85,171, 86,197, 23, 23, 23,203, 9, 33,212, 81, 35, 64, 42,149,210,141,207,123,226,241,177,183,111, 46,195,
-125,239,143, 77, 63, 25,240,164,147, 94, 83,123,242,213,213,213,197,189,254,250,235,242,148,148, 20,196,199,155, 87,182, 59,119,
-238, 92,220,218,181,107,229,221,187,119, 7,199,113,208,106,181,136,139,139,195,196,137, 19,237,114, 10,235,212,113,125, 95,223,
- 38,207,140,238, 26,223,233, 95, 19,178, 1,128, 45,103,227, 46,191,205,202, 77,221,125,160,228, 60,161,208,250,160,194,247,100,
-252,211,139, 66,236,122,199,189,186,117,234,212, 93, 40, 41,123,254,185,199,244,161, 18,161, 80, 89,163, 37, 43,190,218,178,249,
-141,103, 30,133,191, 68, 66,117, 70, 19,253,247,234,175,244, 0, 72,231,206, 65,252,242,242,106, 38, 42,170,249,157, 53, 71,132,
- 28,136,188, 25,230,225, 23,123, 79,240,170, 97, 49, 1,130,141, 27,175,134, 7, 7, 73,170, 62,124,233,248,170,162,235,195, 76,
-147, 39,117,206,205,191,162, 42,126,242,241, 94,137,214,114,227, 76, 29,176,221, 32,167, 45, 94,104, 83,241,111, 90, 63, 93,225,
-239,136, 17, 0,139, 16, 83,171, 17,144,156,156,108,123,190,145,104,219,110,236,227,170, 81, 97,229, 73, 75, 75,107,115,148,192,
- 86,252, 23, 44, 88,128, 83,167, 78,209,159,126,250, 9,115,230,204,113,150,202, 32,149, 74, 5, 50,153,140,109,135, 38,178,124,
-241,226,197,211, 83, 83, 83,119,186,240,221, 48, 0, 53, 0,194, 1,156,203,201,201,233, 1,224, 51, 0, 1,182,252, 0, 62,137,
-141,141,117,120,207, 5, 45,167,229, 27,170,244, 30,147,167, 78,247, 85,192,232, 43, 16,240, 69, 74,157,152, 47, 20,106, 89,158,
-143,167,222, 32, 49,106,249,229, 55, 85, 98,158,168, 86,103,210, 27,164, 82,105,139,245,183,205, 17, 0, 66, 72, 55, 0,159, 3,
- 40, 5,240,162, 84, 42,253, 23,165,244,198,221,242, 96,237,136,116, 32,128, 77, 0,110, 2, 56, 6,224, 1, 0, 79, 19, 66, 30,
-167,148, 86,183,145,126, 22, 33,100,142,189,254,210,187, 25, 98,191, 67, 24, 13,224, 50,128, 8, 0, 21,196,162,212,142, 26, 52,
- 19, 39, 78,140, 3,208, 72,252, 23, 44, 88, 32,183,141, 6, 88, 62,147, 79,156, 56, 49,206, 94,119, 64,122,122,122, 28,128, 70,
- 98,205,204, 82,192,214,123,127,124,172, 16, 79,126,170, 70,122,122,122,156,189,240,125,123,243, 1,192,241,227,199,229, 98,177,
- 24,185,185,185,141,246, 59, 96, 24, 6,111,190,249, 38,177, 54,118,187,119,239,150, 79,156, 56,209,110, 6,116, 58,126, 81, 78,
-197, 2, 12,169, 20,202, 43,126,223,138, 21,132,161, 24,242,166,129, 0, 6, 92, 56,114, 61,238,230,246, 41,114,224, 68,171,141,
-112,124,175, 8,218, 93, 40,193, 43,207,206,209,135,122, 9,133, 85, 23,114,136, 39,195,199, 11,227, 34,209,197, 79,130,235,185,
- 71,137,214, 64,201,130,185,143, 25,226,123, 69,208,126, 30,222, 40,163, 85,100,216,176, 97,205,242, 5, 5, 9,239, 21, 10, 25,
-241,177, 99,101, 47,178, 38,221, 71,161, 93,123, 26,253,130, 4, 68,169,188,234,209, 51,194, 35, 40, 32, 64, 84,201, 81,165,254,
-199, 19, 21,234,121,227,254,152, 2,220, 52,236,111, 91, 55,157, 53, 2,172,215,216,142, 35,176,119,157,189,237,183,219,147,207,
-214, 8,144,201, 20, 0, 20,144, 74,253,209,156,104, 59,138,150,140, 10, 75, 68,166, 77, 81, 15, 91,241,223,189,123,183,156, 97,
- 24, 48, 12,131,113,227,198,225,232,209,163,141,242,203, 81,152, 76,166, 60, 30,143,103,148, 74,165,124,153, 76,214,214,241, 44,
-146,234,234,234,239, 3, 3, 3,103,166,166,166,110,119,242,187, 90,152,247,139, 81,229,228,228, 12, 2,176,253,224,193,131,125,
- 56,142,179,213, 40,240,120,188,135, 0,100,199,198,198,198,219, 35,204, 47,204, 23, 75,132, 98, 95,129, 64, 20,204,240, 73,103,
-202, 19,249,113, 60,158,136, 35, 12, 56,194, 55, 82, 30,175,158,199, 17,149,154,103,170,241, 20, 10, 8,175, 87,183, 58,241,212,
- 16, 22,197,119, 46, 2,240, 17,128,131, 22,203,230, 89, 0, 31,173, 95,191,126,166,139,130,237, 15,224, 69, 0, 35, 0, 36, 2,
-216, 3,224, 36,128,143, 41,165, 10, 23, 40,143, 88,210,181,150, 82,202, 17, 66, 60, 1, 60, 97, 57, 63,176, 13,134,133,175,229,
-173, 39, 0,165, 51, 30,118, 11, 17, 20, 33,128, 55, 0, 44,149,201,100, 6,116, 44,140, 0,144, 3,160, 19, 33,100,171, 37, 79,
-190,105,106,208,180,100,160,100,102,102,202,109,195,254, 11, 22, 44,104, 56,182,125,191,106,213,170,120,139, 97,208,106,141,207,
-204,204,148,219,134,233,153, 89, 10, 92,217, 99,222,133,145, 73,252,166, 65,180,185,239,253,193,204,202,148,219,219,208,167, 57,
- 62,107, 99,198,204,146, 82,103,249, 40,165,113,199,142, 29,195,156, 57,115,240,197, 23, 95,224,204,153, 51,113,209,209,209,217,
- 77,175, 17,139,197,242,206,157, 59, 59, 18,171,143,235,124,236, 23, 92,158, 19, 7,175, 47, 46,128,148,105,226,104,103, 15, 11,
- 31,177, 92,130, 56,129,174,187, 60,160,115,235, 91,217,198,247,138,160,115,255, 57,203, 16,234, 41, 20, 24,175,158, 18,250, 7,
-123, 19,121,153, 18, 51,163,186,161, 95,152, 31,132,181,151, 33, 87,105,209, 77, 32,130, 31,225, 9, 22, 63, 61,135,214, 11, 69,
-249,241,189, 34, 40,124,252,154,229, 84,212,170, 2, 70,142,244, 90,165,100, 71, 45,242,246,175, 20,233, 24, 79, 78,226,101,208,
- 7, 4, 5, 50, 30,126, 98,190,162,166, 76,164,172, 99, 33,168,211, 19,219, 50,211,154, 65,107,233,247,151,219, 19,206,228,228,
-228,120,123,227, 1,154,243,252,155, 26, 2,206, 24, 1,214,207, 90, 19, 99,219,243,246,132,177, 41, 31,221,230,127,123,123,147,
-162,128,163,124,173,133,251,219, 34,218, 77,141, 10, 0, 8, 8,200,106, 23,241,159, 55,111,158,185,251,141,227,240,234,171,175,
-226,163,143, 62,106, 16,255,181,107,215, 58,205,205, 48, 12, 12, 6,195, 89,161, 80,200,182, 67, 36,160, 6, 0,170,171,171,183,
- 7, 6, 6,198,167,166,166,202,157,248, 46, 31, 0,158,124,242, 73, 81, 78, 78, 78,102, 86, 86, 86,167, 37, 75,150,176,111,189,
-245, 86, 35, 93, 13, 12, 12,196,161, 67,135,226, 0,164,197,198,198, 38,183, 70,200, 35, 2, 31, 3, 75,187,112,156, 49, 66,200,
-227,245,160,132,132, 16, 62,159,240,121,188, 58, 66,136, 22,132,167,228, 40,252,169,129,243, 80,154,140,232,229,195,106,153,145,
- 42,174,221, 12,128, 38,125,195, 97, 0,186, 81, 74,173,130,255, 62, 33,228,132, 84, 42, 13,163,148,150, 58,227,193, 18, 66, 30,
-179,136,245, 7, 0, 22, 1,120,212, 18, 66, 73, 6, 80, 76, 8,121,150, 82,250,141, 19, 34,253, 31, 0, 87, 41,165,107, 8, 33,
- 34, 75,133,103, 41,165,159, 17, 66, 38, 17, 66,254, 67, 41,253,127, 46, 22,138,241, 0, 42, 1,220, 11,224,127,206,124,177,185,
- 8,128, 84, 42,125, 10,192,219, 0,202,231,206,157,187,174,131, 69, 0, 6, 90,210, 54, 1,192,100, 0,215,237, 25, 52, 45,193,
- 86,240,109, 69,191,233,184, 0,135, 43,186,141,248, 3,192,149, 61,143, 53, 50, 2, 92,225,179,109,204,100, 50, 25,177, 53, 2,
- 28,193,225,195,135, 97, 48, 24, 16, 19, 19, 19,255,211, 79, 63,201,139,138,138,228,209,209,230, 45,117, 57,142, 67,106,106, 42,
-173,175,175,135, 64, 32,192,140, 25, 51,236,222,183, 46,247, 36, 24, 3,139,218,152,240,120,193, 79, 55,229, 87, 55, 28, 70,175,
- 55, 38,155, 69,139,163,200, 75, 21,210,154,122,111,104, 5, 94,152, 48,239,138,253,231,200,240,234, 43, 47,228,250,234,244, 38,
-198, 87, 34,162, 73, 81,221,225, 35, 17,144,146,234,122,120, 50,124,164, 12,235, 78,143,255, 90,129,159,255,183, 15, 61, 60,189,
-232,121,149,242, 58,128,190, 45,209,229,158,237,242,220,232, 97, 85,135,189,248, 17,172,144,189,213,107,252,152, 20, 47,157,193,
-115, 10,207,235, 36,163,172,173,241, 40,186,116, 50,194,104,184, 84, 89, 88,160,246,177,212, 25,187, 66,229,168,119,106, 29, 31,
-208, 82,255,115, 75,222,180, 61,175, 82, 42,149, 82, 87, 67,166, 29, 9, 77, 61,127,179,120, 3,105,105,237, 55, 72,176, 61, 60,
-127, 74, 41, 88,246,119,141, 30, 59,118, 44,142, 30, 61,234,146,248, 91, 96, 20, 8, 4, 38,142,227,142, 49, 12, 99,108,163, 17,
- 16, 98,125, 83, 93, 93, 45, 15, 12, 12,148,166,166,166, 58,186,115, 86, 81, 74, 74,138,207,225,195,135, 83,179,178,178, 58,125,
-253,245,215,220, 19, 79, 60,193,223,178,101, 11,222,121,231, 29,228,231,231,163, 71,143, 30, 40, 47, 47,199,187,239,190,107,122,
-251,237,183,147, 0, 60, 27, 27, 27,251, 89,139,140, 28,235,107, 2,211,131,112, 24,104, 4, 23,233, 33, 16, 9,133,124,166, 76,
- 44,224, 41,121, 18, 97,149, 72,196,171,215,155, 56, 15,190,145, 31, 96, 96,245,166,107,103,206, 42, 30, 11,254, 72,115, 28,174,
-233,135,189, 8,192, 36, 0, 57, 77, 6,142,229, 0,152,180,126,253,250,175,156, 16,235, 71, 0,188, 4, 32,188, 73,104, 94, 1,
-224, 23, 66,200, 39, 0, 14, 16, 66, 76,148,210, 45, 14,240,121, 0, 19, 92,166, 19, 0, 0, 32, 0, 73, 68, 65, 84,152,107,245,
-242, 41,165,250, 38,151, 60, 14,224, 87, 66,200, 74, 74,169,198,149,240, 63,128,175, 44,255,157, 50, 0,154, 10,166, 84, 42,253,
- 7,128,231, 44,207,114, 21, 33, 68, 47,147,201, 54,116,132, 6,132, 16,210,219, 18,194,250, 17, 64, 6, 0,107, 62,193,209, 8,
-192,223, 13,165,165,165,242, 81,163, 70,129, 16,146, 61,106,212, 40,252,240,195, 15,120,232,161,135,226, 58,117,234, 36,103, 24,
- 6,139, 23, 47, 38,150,198, 36,110,235,214,173,114,189, 94,143, 17, 35, 70,180,216,208,141,185,118, 83, 94, 62,170, 63, 64, 72,
-246,175,161,166,248,129,231, 2,228, 58, 14,241,230, 46, 0, 96,200, 98, 3, 1,170,161,174,174,139, 59,180,181,183, 92,237,125,
- 34,254,225, 39,124,154,245,138, 75, 12,236,202,245,235,183,188, 26, 28, 36, 41,170, 83, 27,124,195,253, 61, 5,201, 67,123,122,
- 12, 11, 23, 17,157,198, 4,141,150,195, 85,162, 53,101, 20,149,106, 10,202,235, 77,157,132,226,178,114,131,110,226, 13,189,241,
- 3,111,224,149,230, 56,125,252,195,186,106,235,175,116, 25,144,112, 31,115,241,120,217,248,210,223,126,184,209,123,248,220, 16,
- 94,255,168,146,179, 71,191,175, 35, 60,159, 17, 28,199,213,220,186,165,181,107, 69, 53, 21,108,123,199, 86,111, 54, 45, 45,173,
- 69,193,182, 13,175, 55,141, 4, 56,114,253,159, 21, 9, 9, 9,196,214,235,183,133,109, 8,191, 45,104, 15,158,250,250,122, 57,
- 0,240,249,124,188,252,242,203, 56,117,234, 20,126,250,233,167,182,210,234, 1,152,244,122, 61, 91, 90, 90,154, 25, 22, 22,102,
-180, 23, 89,108, 5, 42,219,131,234,234,106, 89, 96, 96,224,131,169,169,169,142,180,251,190, 58,157,174,207,194,133, 11,167,206,
-155, 55,143, 14, 30, 60,152, 0,104, 16,127, 0, 24, 61,122, 52,118,236,216,129,177, 99,199, 50,143, 60,242, 8,205,206,206, 94,
-195,227,241,180, 30, 30, 30,208,104,110,151, 38,142,163,186,108,249,193,244,222,189, 35,139, 35,122,132, 95,225,121, 75,202,120,
- 68, 88,199,136, 4,117,140,216,163,194,192,231,105, 64,141, 2, 78,108, 12, 81,149, 86, 7,157, 56,116,238,205, 32,255,208,183,
- 92,125,144,173, 70, 0,164, 82,233, 68, 0,155,155,120,181,135, 0,204,153, 59,119,238, 87,142,120,176,132, 16,158, 37,252, 61,
-173,165,126,121, 74,105, 53, 33, 36, 5, 64, 6, 33,228,123, 7,230, 41, 63, 2,224, 0,165,180,174, 5,190, 58, 66,200, 1,203,
-117, 95, 56, 41,138,247, 1, 8, 4, 48, 31,192, 86, 66,200,125,148,210, 67,174, 68, 0, 8, 33, 73, 0,222, 7,208,131, 82,170,
- 38,132,140, 6,112, 93, 42,149,170, 40,165,233,142, 70, 0,164,102, 83,223,145, 70,139,200,172,110,128, 99, 24, 3,224, 4,165,
-148, 18,179,219,116, 29,128,154, 16,210,205, 58,206,195,153, 8, 64, 83,143,191, 45,222,127, 67, 88, 62,241,155,134, 40, 64,100,
- 27,188,255,223,195,252,191,135,111,165, 82,231,188,127,163,209, 72, 79,157, 58, 5,111,111,111,228,229,229, 81,147,201, 4,165,
- 82,137, 75,151, 46,201, 3, 3, 3,209, 36,236,151, 61, 96,192,128,248,109,219,182,201, 71,140, 24,209,124,184,207,104,164,221,
- 78, 93,128,208, 59, 12,130,188,106, 26,106,242,134, 74,201,192,116,169, 30, 8,108,188, 35,181,103, 32,155,221,125,248,233,248,
-125,219,103,201,129,189,205, 54,118, 87,110,220,120, 45,178, 91, 55,160, 74,251, 42, 0,228,107,149,216, 45, 42,173, 28,112,239,
-248,224, 1,134, 60,252,114, 93,129,221,231,110,241, 11, 42,235,125, 0,160,220,160,243,191,161, 55, 38, 23,148,150,238,136, 10,
- 14,110,214, 0,184,119, 74, 10,227, 33,156, 56,152, 85,255, 82,220,189,127, 66,159,186, 27,219, 13, 87,127,201,172, 53,114, 94,
-183, 42,138,127,174, 80,214,120,142, 0,195,144, 26,149,206, 87, 58, 43,186,155,236,251, 51, 55, 90, 42, 51, 50,153,140,216, 70,
- 0,108,189,203,166,225,118,171, 72, 39, 39, 39, 35, 33, 33,129, 52,183,208, 73, 91, 70,227,187,186,112, 74, 71,131,181,186, 75,
-165,254,183, 69, 4, 92,141, 42,164,165,165,181,139,248,111,222,188,153, 30, 57,114, 4,116,155, 63, 72,138, 2, 31,126,248, 33,
- 40,165, 96, 24, 6,235,214,173,115, 57,178,160, 80, 40,244, 1, 1, 1,241, 71,142, 28,217, 59,126,252,248,201,205,149, 31, 39,
-224,103,169,175,115,171,171,171,215, 7, 6, 6, 62, 6,160,102,241,226,197,255, 72, 77, 77,181,231,168,213,237,218,181,171,116,
-223,190,125, 95,197,199,199, 63,213,175, 95, 63, 36, 36, 36,208,172,172,172,134,116,100,100,100, 64, 36, 18,225,250,245,235,216,
-187,119, 47,233,210,165, 11, 27, 27, 27,251,211,165, 75,151,154, 37,140,140,232, 83,166,213,234,230, 30, 57,114,100,125, 96, 80,
-160,210,215,199,167, 24, 66,161,158,213, 51,245, 44, 79, 95,171,227, 43,171, 60,245,158,226,155, 21,149,190,135,246,237, 93, 63,
- 96,224,160,247, 13, 58, 77,125,187, 24, 0, 82,169,148, 72,165, 82,107,226, 59, 89, 94,135, 45,211,236, 26,162,160, 0, 22, 16,
- 66,186,192, 60,194, 17, 0,154,181,208, 45,162,242, 2,204, 3,244,174, 53,225,105,138,107,150,235, 94, 32,132,124,212, 10, 31,
- 1, 48, 3,192,114, 59,124, 95, 3, 88, 68, 8,249,202, 78,250,108, 11, 77, 56,204,227, 29, 98, 96,238,251,127, 19,192,105, 66,
- 72, 47, 0, 69,182, 54,134, 3,124, 15, 3,120,218, 34,178, 90, 75, 90,181,150,227,117,132, 16, 33,128,239, 90,227,179,228,197,
- 99, 0,230, 57,106, 0, 72,165,210,181, 0,190,105,137,207,194,185, 18,128, 55, 0, 95, 0,187, 44,105, 19,195, 60, 79,252, 23,
- 0,163, 8, 33,243, 1,252, 4, 96,119, 75,233, 3,204,243,232, 91,232,235, 71,211,177, 1, 19, 38, 76,176,107, 12, 76,152, 48,
- 33,158,153,245,123,191,189,213, 8,176,190,183, 13,231,187,204, 55,235,246, 41,129,142,240,157, 59,119, 14,221,187,119,199,203,
- 47,191,220, 80,102, 54,109,218, 68,115,115,115, 49,101,202,148,219,174,247,240,240,144,139,197,226, 22,249,194,207,157, 67,109,
-247,206, 56,254,242, 83, 13,124,151, 95,219, 17, 23,145, 91, 39,103,166,136,111, 75, 75,113,190, 1, 34,113,235,179,159,174,150,
-148, 44, 68,215,174, 63, 3, 24, 77, 65,121,184, 86,249,178,134,101,193,234,204, 65,178,139,149,149,184,166, 51,108,226, 19,162,
- 2, 33,198,171, 37, 37,233, 0,208,210, 32,192, 46,225,253, 22, 2, 88,145,127,244,197, 34,113,232, 12, 69,105,185,184,107,121,
-201, 73, 49, 4, 1,189,139,174,155,194,170,203,111, 64, 40, 20,132, 12, 12,245,124,164, 86,101,252, 22,192, 13,123,158, 43,128,
-184,166,211,255, 90,240, 64,227, 93, 89, 19,160,185,254,255,191, 3,218, 58, 85,207,250,253,180,180, 52,218, 86,190, 45, 91, 54,
-211,236,236,108,144,116,179, 97,124,224, 45,111, 76, 92,162,194,248,241,227,225,204,180,191,230, 16, 16, 16, 16, 15, 0,247,220,
-115,143,166, 29,186, 41, 20,129,129,129,115, 0, 88,157, 83,125,106,106,234,110, 7,191,203, 2,168,200,200,200,144, 63,244,208,
- 67,195, 83, 83, 83,135,152, 76, 38, 34,145, 72, 48, 97,194, 4,236,223,191, 31, 28,199, 33, 49, 49,145,190,248,226,139, 36, 42,
- 42, 74, 63, 99,198,140, 30, 53, 53, 53,183,116, 58, 93, 75,138,204,254,122,233,202,166, 65,131,135,248,158, 60,113,226,253,179,
-124,254,160,158, 61,122,126,233, 19, 24, 92, 34, 8, 22,211,195,123, 15,249,215, 40,170,199,133, 5, 4,191,221,167, 79,159,195,
- 94,161,158,107,251,119,141, 49,228,229,229,181, 75, 4,128, 7,243,116,191, 88, 0,239, 1,120,222, 34, 60,158,182,245, 9,230,
- 65, 98, 87, 1,252,219,210, 37,112,170, 5,126, 6,230, 65,102, 7, 0,120, 56,144,158, 99, 0, 38,162,229,133, 21, 24, 0,193,
- 0,122, 0, 56,109,135,243,180,229,186, 16,180,220, 55,201,192,188,140,163,191,165,219,224, 33,139,112,231, 91,184,243, 45,199,
- 91, 0,252, 0,243,140, 3, 5, 0,131, 29,190, 89,150,200, 67, 63,139,145,100,155,206, 50, 0, 82, 0,191, 89,174,253,222, 14,
-223, 75, 48,207,110,112,164, 43,195, 3,192, 62, 0,155,237,228,199, 76, 0,255,181,252, 63,107,147, 62,129, 37, 47,211, 0,124,
- 10, 96,137,229,243,178,150,126,240,192,129, 3,217,132, 16, 20, 23, 23,203,173, 51, 1,154,122,253,197,197,197,114,235,181,246,
-110, 32, 41, 41, 41, 59, 51, 51, 19,155,126, 50, 52,140,220,111,234,165,111,250,201,208,112,237,221,228,203,205,205,197,184,113,
-141,135,186,135,135,135,199,111,219,182, 77,222,179,103,207,120,142,227,228, 75,151, 46,165,214,105,128,132, 16, 12, 31, 62,188,
- 69,163,162,111,110, 46,190, 11, 12,137,247,177, 57,215,127,254, 68,168,223,191, 1,220, 31, 2,202, 1,121, 75, 5,180,158,243,
- 66,141,214, 7, 10, 50, 12, 67,199,237,138,111,173,216, 91,102,112,108, 7,176,189,119,143,176,190, 0, 94,214,155, 56,164,231,
- 21, 97, 92,168,185,187,147, 80,170, 82,177,236,123,183,110,221,186,229, 64,153,122, 31,128,103,254,111, 53,143,214,158,222, 22,
- 84, 81, 86,131,138, 91, 42,240,249,213,158,245, 10,138, 90,165,137,134, 4, 11,253,248, 28,166,107,245,166,239,150,188, 28,235,
- 23,210,255,137, 90, 59, 66,147,109, 79, 92,218,220,135,157,176,205,252, 63, 43,197, 73, 15,248,206,206, 2, 32, 41, 10,180,133,
-175, 37,143, 61, 38, 38,166,195, 24, 34, 13,131, 29,173,226,159,199, 98,131,220, 92,199,218, 42,254,214,178,241,236,179,207, 6,
-243,249,252,138, 99,199,142,125,121,207, 61,247,180,101,138, 98,247,212,212,212, 53,150, 40,192, 44,203,140,128, 89,169,169,169,
-223, 59, 18, 84, 4, 80, 15,160, 42, 60, 60,124,232,216,177, 99, 75,207,229,229,117,214,106,181, 68, 46, 63, 4,145, 88, 4,134,
- 48, 56,116,232, 16, 25, 48, 96,128, 38, 57, 57,121, 84,101,101,165,221, 58, 55,123,214, 76,246,199,189, 63,126, 58,116,232,176,
-158, 6, 86, 63,249,106,254,149,167,185,162,130,167, 0, 64, 12,134, 14,238,221,247,100, 72, 72,112, 54,143, 47,124,237,191,111,
- 45,175,255,118,163,235, 61,202,205, 25, 0, 47, 91,172,161, 41, 0, 46, 1,240,106,230,123,123, 44, 30,123, 18,128,145, 22,241,
-108, 54,202, 9, 32, 18,192, 86, 7, 13,128,106,203,245,188, 86,248,226, 0, 92,113,144,239,138,229,250, 29,173,240,205, 5,240,
- 36,128, 11, 48,207, 80,184,214,132, 91,110,241,254,159,179,120,195, 27,129, 22, 71, 92,240, 44, 30,251,227, 0,162, 44, 81,132,
-230,210,169,180,124,190,206, 98, 4,108,108,133,239,107,139,209,229,200,253, 82,203,245,173, 61,191, 15, 44,145,141, 3, 22,163,
- 6, 77,184,247, 3, 24, 96,201,139,124,139, 33,213,173,213, 31, 53,247, 32, 80, 0,242,230, 22, 2,178, 94,227, 76, 5,127, 82,
- 42,165, 79,126,170,110,102,225, 30,133,211, 2,209, 94,124, 47,188,240,194,109,215,140, 31, 63, 62,123,252,248,241, 4, 0,238,
-187,239, 62,167, 26,161, 61, 47,188, 64,124,154,182, 40, 61,188,178, 37,171,251, 19, 0, 24, 40, 19, 16,115, 80,198, 58, 50,251,
-186,131,197,192,146, 47, 38, 90, 4, 62,192,171, 71,131,248, 91, 92,228, 91, 98,177,216,209,217, 40, 4,192, 59, 71,179,206,122,
-132,118,237,241, 32, 7,143,200,146,226,114,158, 81, 87, 75, 59,133,120, 17, 47, 79, 1, 97,141, 28, 20,181, 6,150, 72,136,164,
- 78,197,246, 14,105,217, 33,104, 86, 44,154,190,255, 35,151,239,189,211,179, 0,218,202,215,146,199,222,179,103,207, 14, 35,254,
-220,247,254, 56,144,103, 30,147,183, 81,110,192,119,199, 12,160,148,182, 75,190, 90, 57, 76, 38, 83, 53, 0, 68, 71, 71,183,105,
- 65, 32,171,248, 91, 80,101,249,239,104,221, 16, 90, 28,179, 51, 0, 48,112,224,192, 48,149, 82,181,104, 68,204,240,199, 84, 74,
-165, 47,107, 98,141,161,161,161,183,194,194,194,174, 40,149,202, 37,149,149,149,249,142,166,107,202,228, 41, 44,128,231,143, 30,
- 57, 49, 54,118,236,216, 41, 18,137, 36,136,128,154, 8, 33,224, 56, 90,173, 85, 43,214, 92,206, 43, 46,251,118,227,134, 54,173,
- 8,216,212, 0, 48, 1,248, 71, 43, 2, 98,139,147,150,151,201,242,106, 14, 38,152, 71,212,243, 28, 76,143, 28, 64,150, 29,190,
- 12,152, 7,173, 57,130, 71, 29, 72,223,122, 0, 95,218,225,249, 21,230, 41,144,112,128,239, 27, 75,196,192, 30,138, 44,158,189,
- 35,233,227, 57,145,167,235,237,240,221,239, 0,159, 53,218,176,209,242,108,236,206,181,165,148,146,137, 19, 39,198, 89, 5,223,
- 54, 4,239,202, 82,192, 50,153,140,164,167,167,199, 49,179,218,103,233,222,246,230,251, 51,160,160,228,166, 62,178, 91,183,141,
-243,222, 95,247,164,245,156, 65,192,108,214,105,184,125,229,197,197, 42,135, 10,211,250,245,180,234,244, 6,178,252,251, 95, 22,
-238, 94,125,223,206,227, 39,202,158, 9,246,229,166, 50, 1, 62,126,148, 2,132, 80,189,158,229,202, 57,160,202,160,231,252, 74,
-203,180,134, 72, 39,210,152,156,156, 28,111,219, 29,144,156,156, 28,223, 81,158, 95, 71, 92, 9,240,207,130, 73, 75, 84,119,244,
- 30,101, 50, 25, 39,149, 74, 59,139,197,226,178,232,232,232,251,219,131, 51, 53, 53,245, 96, 96, 96,224,147,169,169,169, 27,157,
- 48, 0, 88, 75,228, 20, 0, 48,122,204,232,229, 0,150, 55,189,176,233, 24, 33, 71, 49,110,252,200,159, 96,238,138,109,130, 48,
-244,238, 51,168,205,247,220,156, 1,160,115,129,135,182, 18, 34,209,187,249,254,178,124,141, 96, 17,250,118,171,232, 73, 73, 73,
-217,246,230,229,255,145,124,127, 6,212,104, 52, 79, 1, 30, 70, 0,193, 28,104,169, 78,103,216, 82, 94, 94,121,158, 82,234,240,
-180,169,160,152,127,208,140, 15, 39,147, 91,158, 15,231,118, 29,139,220,172,175, 62,120, 57, 32, 64,180,136,207, 35,180,172, 90,
-119,185,204,192,110,146, 8, 24,177,132,207,227, 25, 89, 78,236, 76,250,172,125,252,214,129,103,174,238, 3,112,219,212, 63,155,
-208,191, 43,139,205, 52,245,204, 29, 57,127,183,249,238,182,225,227, 40,152, 89, 10, 16, 66, 48,117,218,239, 3,162,247,236, 61,
-211,208,134, 36, 78,142,110,175, 41,138,229,237,217,222, 88,140,128,141, 78, 92,238,111, 49, 0,212,127,214,246,129,223,228,129,
- 82, 71, 27,251,166,104,110, 20,187,155,239,175,205,231, 70,199, 71,117,117, 53,133,185,155,171, 77,184,229, 57,157, 2,192,209,
-205, 31,147,132,167, 94,249,240,241,185,121,159, 62, 63,251,216, 0,131,154, 68, 4, 8,248, 65, 32, 68,227, 37,225, 87, 14,234,
-231,147,239, 44,119, 66, 66, 2, 73, 75, 75,115,121,189,249, 59, 37,158,127,150, 8, 64,199, 51, 30,204,177,161,191, 65,245, 10,
-179, 56,204,222,248,147,238, 6, 72,162,162,162,254, 30, 67,100,221,112,195, 13,240,121,128,135,136,128,227,204,109,116,189,214,
- 93,253,221,112,227,111,219, 30,184, 31,129, 27,110,252,125,192,154, 0,165,198, 42,250,110,241,119,195,141,191, 51, 24,247, 35,
-112,195, 13, 55,220,112,195, 13,183, 1,224,134, 27,110,184,225,134, 27,110,184, 13, 0, 55,220,112,195, 13, 55,220,112,227,175,
-136, 70, 99, 0,230,205,155,231,242,200,205,230,214,214,110,142,239,127,223,127, 30, 55,104, 72,111,121,231,174, 97,241, 42,173,
- 90,126, 88,158, 27,159, 52,235,217,108, 87,249, 86,127,181, 61, 46,106,200, 40,249,173,210, 82,120, 74, 60,113,163,164, 32,254,
- 95, 79, 77,115,153,175,189,239,247,194,225,121,113,163, 71,245,148, 75, 60,121,224,243, 24, 16, 49, 65,153,242, 69,226, 42,223,
-153, 91, 67,226, 70,140, 26, 33,247,245,226, 1,124,160,230,220,122,226,104,250, 34, 39, 69,186,124,191, 87,246, 95,185,141,111,
-228,200,145, 46,243,157, 56,113,226,118,190, 72,215,211,119,226,202,237,233, 27,213,167,143,203,124,199,243,243,255,116,124,147,
- 90,201,223,229,203,211,232,162, 69,201, 45,126,190,191,153,252,141,124, 96,146,235,229,101,223,254,219,203,243, 36,215,203,203,
-242,204,106,234,195, 21, 52, 58, 23, 20,249,176,203,124, 85, 87,190,187, 45,125,103,223,184,238,114, 67, 58,108,105,143,219,206,
-125, 24, 84,234, 50,223,203, 85, 97,248, 35,218,171,191, 59,159, 84, 42,229, 55,183,179,160, 35,124,251,247,239, 7, 0, 40, 20,
-138, 8,157, 78,167,120,242,201, 39,107,255,200,251,117,218, 0,104, 9,186,173,210, 72, 0, 61, 97, 94, 39,160, 64, 60, 91,118,
-205,209, 31,216,254,205,242, 56, 2, 14,193,126, 1,200, 61,124, 70,254,245,215, 31, 35, 54, 33, 22,172, 90, 35, 31,208,111, 60,
- 56, 14,242, 95, 35,190,142, 31, 54,108, 8,174, 94,189,142,186, 90, 53, 6,143,153,147,221, 18,223,250,111,229,113, 20, 4, 61,
-122,247,148, 75, 95, 89,130,234, 79,182,227,155,207, 63, 3, 32,198,158,243, 37, 96, 24,200, 63,126,231, 45,228,231, 95, 70,120,
-120, 15,136, 36,124,220, 44,201,111,113,113,145,194, 29,159, 81,161, 80, 8,137, 68,130,130,130, 2,116, 9,241, 65, 16,223, 11,
- 93,186,251,193, 95,226, 11, 79, 98, 2,195, 48,160,156, 9, 26, 17, 31,117,183,234, 80, 49,220,254, 92,242,186,130, 53,212, 91,
- 82,135, 49, 35,122,193,203,147, 15,161,132, 1,159, 7, 48, 66, 62,250,134,125, 78,141,148,135,194,155, 79, 57,156,225,171,247,
-234,226,194,194,194, 16,123, 79, 87,185, 86,167, 7, 35,146, 0, 70, 32,175, 62, 58, 78,171, 81, 99, 84,200,229,236, 63,202,138,
- 92,191,126, 61,157, 59,119,238,223,106,126,125, 71,133, 61,161,111,227,245,158, 0, 70,116,146,120,252,183,180,180,180,159, 64,
- 44, 2,231,225,177, 12,230,149, 49,235, 59,202, 51, 40,248,117,111,220,181,139,135,111,219,107, 32, 33,121,217, 95,165,140,146,
-111, 54,109,250, 77, 36, 20, 74, 56,142,243,245,244,242,242,122,112,234, 84, 15,152, 87,176,235,168, 35, 59,173,209,102,174,173,
- 68, 82,169,212,199,215,215,119, 65,223,190,125,103,136, 68,162,174, 37, 37, 37, 37,165,165,165, 39, 12, 6,195, 82,153, 76, 86,
-224, 2,159,159,191,191,255,146,251,238,187,111,242,179,207, 62, 27,254,197, 23, 95,220,186,112,225,194, 49,157, 78,247,174, 76,
- 38,187,224, 8,199,254,253,251,241,227,200, 29, 24,179,247,222, 21,225,225,225,175,121,122,122, 98,251,246,237,167,103,206,156,
- 57,252, 79, 19, 1,104, 65,252,121,158, 34,254,136,199,198,246, 90,201, 81,170, 59,122,249,214, 39,151,182, 74, 15,136,103,203,
- 46,218,251,110,242,212,222,116,234,125,203, 97,172,175, 5,223,196,224,151,139,151,241,196, 19, 47,254, 94, 34, 24,224,231,220,
-141, 8,234, 30, 38,231,234,149, 48,112, 4,135, 14,229,198,151,104, 91,202,168,165, 20, 66, 95, 16, 15, 31,156,185, 88,140,243,
- 23,255,129,175,190,219,223,240, 57,199, 1, 15,140, 25, 3,212,151, 3,240, 70,193,133, 75, 16, 4,249, 33,118,244, 32,121,173,
-166, 21,155,133, 48, 0, 97, 16, 53, 36, 26,157, 60,133,232, 18, 36,134, 79, 96, 0,252, 69,222,240, 23,243, 32,224,241, 96, 52,
-153, 80,203,114, 56, 89,117,218,238, 67, 45, 63,191,132, 6,248, 2, 62, 30, 30, 8, 14, 10,132,143,143, 7, 40, 99, 2,203,213,
-195, 4, 19,188,188, 60, 16,212,169, 43,122, 70,254, 68,179, 14,143,109,181, 81, 90,151,105,160,190,222,158,232, 25, 17,130,224,
-160, 64,168,213,106, 8, 69, 98, 8,116,230,197,249, 34,194,123,200,107, 20,181,248, 62,183, 40,190,184,228, 38, 20,229,215,177,
-244,217,232, 86,141,129,180,229,105, 14, 55, 18, 9, 79, 38,196,251,135,250,103,183, 38,254,119,195, 8,120,227,253,247, 41, 0,
- 44,125,237,181,118,249,141,197, 43, 86, 80, 0, 72, 93,184,208,101,190, 31,115,114,158, 48, 24, 12, 27, 1, 96, 70,124, 60,227,
- 74,227, 43,219,182,205,188, 70,188,205,180,105, 74, 41, 8, 33, 13,255,173,231,172,215,205, 77,110, 89,176, 23, 45, 74, 38,142,
-138,186,147,226, 63,192,211,200,110,247,246,243,237, 7, 0, 66,137, 24, 6,173, 14,156, 90,179,226,216,145,195,239,220, 59,115,
-102,127, 0,197,246, 72,244, 60, 33,133,121,241, 20,214, 34, 10,156,165, 29,106,182, 45, 26,122,239,100,252,118, 40,195,169, 60,
-186,118,241,176,188,247,160,184,248,240,254, 15, 56,111, 20, 39,215, 56,117,121, 74, 74, 10,182, 37,103,181,122, 77,124, 86,227,
-173, 72, 6,248,153,111,181, 66,199, 65,203,154,243, 85,109,249, 47, 27,229,135, 62,222,130, 86,249, 86,174, 92,153,253,198, 75,
-175,134, 76,155, 49,221, 75,167,211,226,227, 15, 63, 96, 86,175, 94,173,155, 63,127,126, 24,128,155,237, 93,247,246,237,219,151,
-176,115,231,206, 76,192,185, 53, 7,114,115,115,105, 81, 81, 17,170,171,171,161, 82,169,224,237,237,141,192,192, 64,132,135,135,
- 99,204,152, 49, 46,213, 59,169, 84, 58, 62, 58, 58,122,211, 43,175,188,114,181,111,223,190, 27,135, 13, 27,118,233,214,173, 91,
- 93,115,115,115,163,159,122,234,169,221, 82,169,116,133, 76, 38,251,202, 9,190,248, 25, 51,102,164, 45, 95,190, 60,208,104, 52,
- 66, 34,145,192,211,211,179,179, 90,173,158, 57,109,218,180, 7,165, 82,233,124,153, 76,246,121,107, 28,207, 43,164,192, 72, 96,
-202,137, 25,240,236,238,217,101,209,162, 69, 56,117,234, 20, 85,169, 84,126, 54,191, 3, 0,188,153, 51,103,154, 38, 78,156,120,
- 87,196,253,220,185,115,141,142,155,219,208,141,223,130,232,119, 3,208, 11,230, 37, 99, 77,106, 61,123, 35,247, 74,197, 71, 99,
- 34, 67, 94,188,111, 64,231,119, 58,249, 74,186,200,183, 74,183, 2,184, 44,158, 45,107,113,147, 26,125,125, 13, 58,245,190, 31,
- 75, 94,155,129,141,178,223,235,226,225, 99,235,160,214,232,145,152,240, 34,238,137,125, 18, 15,167,220, 7,137, 68, 4,131,137,
-133, 74, 99,144,247, 25,221,187,133,194,113, 29, 48, 0, 51,230,172,197,191, 94,121,166,225,236, 3,247,196, 65, 44, 22,225,135,
- 67,251,177, 39, 39, 23,155, 54,124, 6,157, 86, 15, 33,143, 15, 47, 15, 33,212,213, 37,241,181, 37,104,118,247, 49, 74, 41, 64,
- 57,243,139,225, 64, 41,133,222, 32, 50, 55, 79, 34,128, 26, 76, 48,241, 0, 19, 76, 48, 25, 56,176,166,214, 13,216,130, 19,169,
-180,107, 48,133,143,183, 39,194,186, 70,160,223,224,222,240,246,146,160,174,190, 18,229,149,229, 80,212,221,130, 81, 71,224,225,
-225,129,224,224, 88,204,156,126,129,110,223,217,183,249, 48,254,230, 27,212,228,237, 13, 45, 31, 16,138,133,208,106,132, 48,104,
-132,208,137, 69,224, 19, 22, 20, 60,232,180,245,208,106, 84,232,218,181,139, 92,200,227,163, 6, 74,124,244,209, 17,136, 68,173,
- 23,142,247, 55,189,111,183, 0,189,246,248,107,173,126,174, 80, 40,104,147,227,152,128,128,128,124, 66,136,142, 82,202,247,247,
-247,247, 40, 40, 40, 8, 76, 75, 75,203,158, 59,119,110, 23, 87, 11,178, 48, 52,116,118,195,111, 0,113,254, 64,187, 69, 59,214,
-167,165,209,231,158,123, 46,222, 88, 81,225, 20,231,143, 57, 57,210,145, 35, 71, 46, 29, 27, 21, 5,163, 72,132, 85,171, 86,113,
- 51,239,187,111, 2,165, 52,203, 41, 87,142, 16,172,124,231,157,134,227, 5,111,191,141, 85,239,190,219,234,177, 61, 52, 53, 2,
-150, 47, 79,163, 49, 49, 49,200,202, 42,164, 9, 9, 61, 7, 2, 40, 92,190, 60, 77,235,164,248,231, 14, 30, 56,208,199, 90,103,
- 60,197, 18,148, 85, 86, 64,169,168, 69,244,200, 81, 30, 63,126,181, 33,107,202, 83,255, 24, 8,243,230, 5,173,129,125, 97,233,
-106,254,163, 51, 31,228, 71,134,135,115, 86,207,240,237, 85,159, 54,186,232,221, 5,207,155, 13,191,151,230,199, 63, 62,117,130,
-211,249,234,146,248, 55, 88,200, 1, 78, 92,156,224, 20,181, 39,159,224,252,187, 79,131,248, 4,193, 84,120, 30,250,194, 95,145,
- 95,163,198,240,189, 21, 14,125,127,157, 76,118,244, 21,233,115, 61, 30,255,231, 83,126,105,155,191,227,194,195,195,153, 37,203,
- 87,192,251,157, 37,248,225,135, 31, 74, 31,122,232, 33,151, 12,209, 22,132,127,194,206,157, 59, 15, 88,143,167, 79,159,238,144,
-114,169, 84,170,184, 3, 7, 14,200,141, 70, 35,122,245,234,133,113,227,198,193,215,215, 23,181,181,181,184,121,243, 38,174, 93,
-187,134,155, 55,111,210,137, 19, 39,198,123,123,123, 59,156, 79, 82,169,116,250,125,247,221,247,241,202,149, 43,183, 14, 27, 54,
-236, 99,171,177,211,165, 75, 23,204,156, 57,147, 36, 37, 37,121, 1,200,149, 74,165,185, 45,237, 94,218,148,111,254,252,249,233,
-207, 61,247, 28,115,250,244,105, 16, 66, 16, 24, 24,216,240,218,187,119,175,112,244,232,209,159, 73,165,210,227, 45,241, 61,175,
-144, 98,202,137, 25, 0, 64,182,167,236,160,247,126, 54,190,123,126,126, 62, 10, 11, 11, 73, 93, 93, 93, 47,169, 84,202,159, 54,
-109,154, 9, 0,157, 54,109,154,137,101, 89,220, 13, 52, 21,127,235,185,166,247,193,111, 70,252, 3,135, 71, 4, 62, 30,213, 35,
- 96, 14, 33, 68, 64, 41, 53,114,230,151,193,100,212,105,133, 12,215,101,112, 39,241,107, 65, 62,189,122,239, 60,121,237, 59,221,
- 86,233, 81,241,108, 89, 89, 43,205, 55, 6,244,239, 11,134,201, 70,126,109, 53,128, 75,168, 43,189, 2,129, 88,132,140,221,159,
- 64, 83,101,194,156,127,188, 12,142, 3,166, 62, 56, 6, 38,190,151,221,155,203,207,191, 4,142, 3, 18,135, 18, 0, 93, 0,244,
-128, 78,111, 64,210, 3, 19, 33,246, 99,176,105,203, 62, 48, 12,144,254,221, 70,148, 22,254, 26,255, 80, 92,100,246,229,179,205,
-115,113, 20,224, 56, 14, 28,199,193,100, 50, 65, 47,160, 48, 18, 35, 12, 6, 3, 52, 30, 58,128, 19,131,161, 38,152,132, 20,245,
- 6, 29,212,202,186, 86,211, 22,236,165, 7,159, 47, 65, 96, 96, 32,122,247,238,141,208, 78,163, 0, 30, 3,147,233, 52, 24, 90,
- 11,157,154,133,137, 83,163,252,102, 13,130, 3,171, 16,232, 23, 11,133,106,113, 92,115,155,188, 72,116, 44,168,190, 10,208,137,
- 96, 96,140, 80, 11,249,168,151, 8,192, 23, 8, 1,206, 19,132, 71, 80,175,214, 64, 81,126, 29, 5,167,115, 80, 83, 92, 12,142,
-227,192, 80,158, 75,133,230,171,181,191, 27,206, 79,205,123,202,126, 59,105,217,215,221, 90,116,210,210,210, 22,189,242,202, 43,
-207, 20, 23, 23, 51,132,144, 96,153, 76,246, 29,204,155, 59,121,180,161, 44, 11,214,172, 89,179,229,214,173, 91, 72, 79, 79,199,
-240,190,125,121,254,131, 7,183,185,130,164, 46, 92, 72, 20, 64, 28,165, 84,190,122,245,106, 57, 0, 72, 83, 82, 28,246, 74, 12,
- 6,195,186,177,150,202, 36, 20, 10,209,167, 79, 31,108, 63,116, 40,211, 18, 13,112,152,231, 78,109, 85,187,104, 81, 50,201,202,
- 42,164,167, 79,155, 35, 86, 54,255,127,189,247,222,123, 75, 23, 45, 74,246,117, 84,179, 60,141,236,246,193, 3, 7,250,240, 24,
- 6,207, 62, 58, 7, 90,157, 30,171,190,252, 18, 30, 18, 9,116, 58, 29,116, 90, 45,134, 14,139,138,220,191,121,243,115,147,230,
-204,249,200, 94,212,241,221, 5,207,115, 0,152, 43, 69, 69, 76, 83,193,111, 90, 61, 93,185,247,110,253,198,199,103,165,189, 78,
- 39, 76,125, 58,158,138, 34, 93, 50, 4,108,119,237,163,219,252,237,158,183,107, 65,249,241,113,189,222,132,195, 19,130, 33,120,
- 81, 6,229,156, 8,240,253, 67,156, 18,255,131, 7, 15,150,135,119,238,114,243,159,207, 62,211,237,245,151, 23, 98,245,134,117,
- 23, 71, 70, 71,247, 92,247,233, 58,143,151, 22,190,138,205, 99, 70, 97,203,150, 45,143, 61,242,200, 35,155,218, 40,252,113, 59,
-119,238,108,112,152, 44, 97,245, 23, 96,222, 42,221, 46, 14, 28, 56, 32, 15, 14, 14,198,176, 97,195, 88,134, 97,248,230,232, 44,
- 7,129, 64,128,128,128, 0,116,234,212, 9,215,174, 93,195,129, 3, 7,228, 51,103,206,116,168,174, 72,165,210,228, 41, 83,166,
-124,176,114,229,202, 79,251,246,237,187,150, 16,194, 1,248, 12,192, 36, 0, 71, 0,188, 75, 41, 45, 34,132,188, 10,224, 93, 71,
-248, 86,206,159,255,253,216,228,100,178,107,215, 46,240,249,124,200,229,114,156, 63,127, 30,189,123,247,198,123,239,189,135, 65,
-131, 6,225,153,103,158,225,191,249,230,155, 43, 91,244,252, 45,216,158,178,131, 2,128,135,135, 71,153,159,159, 31,196, 98, 49,
-132, 66, 97,189,112, 25, 88,122,140,146,105,211,166, 97,217,178,101, 56,127,254, 60,182,110,221,122, 87,196,127,238,162,101,191,
- 59, 58,203, 95,111,214, 8,104, 46, 2,192,240,121, 12,159,229,168,138,229, 76, 58,137,128,223,213, 75,200,244, 7,199, 2,145,
-247, 2,157,122, 3,183,174,160,243,229,156,233,143,197, 70,132,103,156, 43, 19,215,108,149,102,152, 55,183,107,190, 14,243,120,
- 86, 65,242, 1,208, 21,190, 97,125,113,253,114, 58,214,202, 54,128,209,123, 96, 98,124, 44,246, 29,204,129, 70, 3,120, 4,180,
-220, 46, 73, 60,250, 66,171,185, 12,147,201,118,111,154,114, 0, 55,193,240,226,240,248, 19, 79,131, 19,169,241,227,238,175, 48,
-245,193,167,224,225, 9,168,235,203, 44, 26,212, 60,140,224, 65, 96, 17,127, 35,107,130, 94,105,132,198,168, 65,173,132, 15,163,
- 70, 0, 61,223, 8,158,145,128, 53,113, 80,106, 89,212,212,179, 45,170,217,121,249,114,218,179, 19, 1,143, 71, 64, 24, 17, 76,
- 38, 10, 86, 83, 12,189,201,136,210,242, 58,212, 40,234, 81,167, 50,129,209,233,192,162, 28, 60,193, 57,116,233,174,196,168,232,
- 24,249,119,223, 94,106,150,147, 7,128,170,116,208,170,110,194,116,171, 14,188, 94, 93,193, 48, 12, 76,172, 30,181,229, 69,184,
-124, 34, 23,149,215,139, 45, 66,194, 7,195, 7,192,187, 59,221,128,214,144,255,250,245,235,245, 73, 73, 73,253,163,162,162, 88,
-145, 72,164,254,224,131, 15, 70,194,188, 41, 81, 31,180,113,166,137, 48, 52,116, 1, 0,140, 30, 52, 8,161,161,161, 21,171, 87,
-175,206, 2, 16, 63,108,240,224, 54, 71, 1,252,129,108,105, 74, 10, 17,132,132,196,173, 94,189, 90, 46, 8, 9,137,115, 38, 18,
- 96, 20,137, 32,208,235,177,125,251,118,132,132,132, 96,198,196,137,214,104, 0,117,198, 8,184, 83,176,138,190, 76, 38,179,109,
-248,112,248,240,225,176,209,163,147, 31, 68,203,219, 70,219, 98,132,159,191,127, 63, 30,195,224, 31, 73, 73,168,173, 83,162,178,
-166, 26, 2, 1, 31,124,190,249, 37, 16, 8, 32,146,120,160, 87,120,248,135, 87, 79,157, 62,223,123,120,140,220, 30,233,149,162,
- 34,124,187,253,127,183,121,252,214, 72,192,168,232, 33, 72,140,191,215,201, 59, 86,197, 1,222,217,125, 7, 39,102,247,237, 19,
- 25,159,185,235, 75, 57,208, 49,250,254,243,190,254, 8,250,125, 27, 16,242,249, 25, 12,240,227,131,231, 19, 0, 86, 81,129,225,
-123, 43,224,201, 39, 80,179, 20, 60, 59, 53,229,218,213,171,213,123,118,237,238,251,245,231, 95,227,147, 47, 63,187,190,238,131,
-143,222, 14, 8, 12,168, 93,178,116,201,193, 77, 91, 54, 99,220,232, 88,124,155,182,245,235,110, 61,186,125, 61, 46,118,156, 75,
-247,220, 84,252,119,237,218,133,174, 93,187,246, 58,121,242,228, 28,152,183, 26,183, 27,246, 55, 26,141,136,142,142,230, 88,150,
-229,171, 84, 42,136,197, 98,112, 28,135,223,126,251, 13,249,249,249,240,242,242, 66, 76, 76, 12,202,203,203,145,155,155, 75,237,
-117, 7, 72,165,210,217, 41, 41, 41, 43, 31,120,224, 1,175,181,107,215,250,124,252,241,199, 66,152,119, 45,205, 4, 16, 13,243,
- 6,103, 31,193,188,157,251, 65,152,119, 60,109,149,111,231, 43,175,108, 30,208,191, 63, 89,157,148, 4,114,255,253,216,126,244,
- 40, 87, 90, 90,186, 4,192,234, 27, 55,110, 76, 91,180,104,209,231, 63,252,240, 3, 98, 99, 99,225,233,233, 57,166, 37,174, 41,
- 39,102, 96,199,142, 29, 88, 63,201, 92,199,252,252,228, 85,157, 58,117,130,151,151, 23,245,244,244,188, 97,120, 29, 32,211, 8,
- 93,182,108, 25,172,134, 70, 99,253,186, 59,152,187,104, 89,131, 17,208, 72,236,155,158, 16,207,150, 85,254,124,181,114,221,198,
- 35, 87, 95,254,173,180,238, 0, 3,202, 7, 40, 48,229, 61,252, 28,243, 1,254,171, 72,194,161,129, 43,128, 73,139,225, 45,224,
-134, 61, 16, 21, 62,199,210, 93,112, 27,118, 29,170, 33,128, 18,211,158,120, 17, 28, 7, 0, 53, 48, 47,155,108, 68,143,190,209,
- 16,139,248, 48,177,122, 80,131, 57, 44,226,237,237,141,234, 26, 69,139, 55,241,209,135,175, 16, 0,184,248,243,151, 96,152,198,
- 78, 2,167,253, 21, 58,189, 17, 60,129, 24, 68,104,238, 67, 83, 41,149, 24, 51,102, 76,235,238, 8,103, 0,199,113, 96, 89, 22,
-122,189, 30,245, 28,139, 58,131, 17,202, 50, 37,234,110,214, 65, 89, 94,131, 26,101, 45,202,117, 26, 40,213,181,168,213,183, 60,
-214,201,219, 75, 13,150,229,160, 55,152, 80, 91,167, 68,254,213, 98,156, 56,157,135,159, 79,228,225,210,111, 5, 40,185, 81,133,
-122,181, 1,170,122, 61,202, 74,235,112,225,215,107,200,205, 61,139,146,178,242, 22, 57,109,139, 10, 91,167, 70,201,185, 75,248,
-101,239, 33,100,110,248, 16,135,182,110, 64, 73,193, 85,112,212, 8,142,144, 6,225,119,166,230,219, 11,243,219, 3,159,207, 7,
-128, 91, 0,110,249,251,251,151,120,123,123,235, 23, 45, 90,116, 18,230, 1, 99, 12,204,107,101,231,187,202,191,102,205,154,212,
-164,164, 36, 0, 64, 68,112,112,136,165, 79,156,215,158,149,195, 42,250,214, 72,128, 3,225,255, 4, 0, 88,181,106, 21,174,148,
-149, 97,198,196,137,176, 70, 3,242,242,242, 0, 0, 59,228,114,234,104, 86, 44,120,251,109,188,250,206, 59, 13,225,125,235,123,
-235,177,245,189, 35,225,127, 43,178,178, 10,105, 83,241,183, 61,206,202, 42,252,214, 17, 30, 63, 62,255,191, 58,131, 30, 60, 30,
- 15,191, 21, 22,160,176,228, 6,142,159, 59, 15,131,193, 8, 6, 4,124, 62, 31,132, 16,112, 38, 19,180,106, 13,242, 14,103, 31,
-114,128,150,177, 21,255, 71,103, 62,120,155,199,127,252, 76, 30,108, 35, 4,142,193, 38,156, 44,138,204,182, 10,127, 86,218,235,
- 84,192, 94,137,251, 67, 45,128,154, 50, 8,187,247, 65,197,115,247, 32,239,235,143,192, 15,234,220,240, 81,197,115,247, 32, 72,
-204,192,135,223,122,113,233, 27,217,183,139,135,135,167,199, 39, 95,172,209,197,223,123,175,112,212,152,209,155,175, 93,189,198,
-253,118, 53, 31,224, 40,196, 34, 17, 98, 99, 98,177,123,215,110,236,220,185,211, 41, 47, 96,223,190,125,113, 82,169,148, 90,197,
-255,192,129, 3, 88,183,110,157, 1, 0, 78,156, 56, 97,144, 74,165,143, 56,210,181, 80, 84, 84, 4,203,214,196, 76, 81, 81, 17,
- 50, 51, 51,145,151,151, 7,181, 90, 13,133, 66,129, 83,167, 78,161,184,184, 24, 55,110,220, 64,143, 30, 61, 80, 84, 84,212, 42,
-223,188,121,243, 30,127,248,225,135,223,143,139,139,243, 58,121,242,164,143, 70,163,249,167, 68, 34,201, 6,240,169, 76, 38, 91,
- 44,147,201,234, 0,252, 15,192, 8, 66,136,144, 82,106,108,205,233,152, 63,127,254,227, 63, 44, 88,176, 57, 54, 36,132,176, 11,
- 23, 98,140,193,128,147,187,118,209,210,210,210,167,101, 50,217,219, 50,153,172, 18,192,198,139, 23, 47,178, 44,203,194,203,203,
- 11, 97, 97, 97, 94, 70,163,177, 89,241,159, 52,105, 18,100, 50, 25,164, 82, 41,164, 82,169, 71,105,105,105,223, 27, 55,110, 64,
-173, 86, 19,133, 66,209,159,207,231, 79,176, 21,127,185, 92,142, 7, 31,124, 16, 29, 5,205,117, 1,132, 2,232, 53,125,120,247,
-103,187, 5,122,206,129, 81, 11,244,157,128, 51,193,211,113,223,252,175,160,173,170, 5,207,199, 27,242,143, 31,199,184, 1, 63,
- 35, 32, 47,115, 60,128,238, 45,253, 64,111,159,174,248, 37,111,135,141,189,161,182,116, 19, 26, 1,163, 30,124,142, 7,198, 82,
-239,119,254, 96,238,110,138,157,156,210,114, 65,189, 64,241,192, 48,219,109, 16,137,229, 54, 4,128, 64, 12,150,152,192, 89,218,
-221, 89,115, 94, 0, 0,249,245, 99,235, 91,172, 89, 38,142,130,229, 24, 48, 44, 11,198,160,135,198, 98, 89,104,121, 60,120,178,
- 90, 40,181, 20, 68, 64, 96, 50,153,160, 49, 1, 21,106, 3, 90,234,204,102, 13, 28,116, 2, 30, 56, 13, 11,150,171,131,170,222,
- 8, 30, 17, 64,207, 26, 97,160, 6,176, 70, 3, 32,228,192, 16,128,136, 56,212,105, 77, 40,175,212, 64,173,103,155, 13,198, 48,
-196,212, 96, 0, 16,242,187,158, 24,117, 90,212,213,212,128, 33, 60,240,249, 20,160,124,240,136,235, 29,127,151,175, 95, 54,244,
-237,209, 87,232, 72,216,191, 81,152,148, 16, 72, 36, 18, 0,208, 2, 48,240,249,124, 20, 22, 22, 98,249,242,229, 15, 2,184,177,
-104,209,162, 97,190,190,190,126,117,117,117,215,107,107,107,157, 14,119, 11, 67, 67,159, 2,128, 78,157, 58,217, 86,224,218, 79,
- 63,253, 52, 11, 64,194,176,193,131, 15,182, 87, 69,152, 63,127,126,188, 35, 6,192,143, 57, 57,113, 35, 71,142, 12,150, 42,201,
-129, 0, 0, 32, 0, 73, 68, 65, 84, 27, 27, 21, 5,226,237,141,229,203,151, 99,225,194,133, 16, 8, 4, 48, 42, 20,240,245,245,
-197,235,243,231, 55,140, 11,112,100,112, 96,211, 62,126,123, 99, 2, 90,194,114, 39, 6,119,158, 62,125, 26,167, 79,159,110,184,
-190,165, 62, 78, 69, 77, 77, 63, 47,111,111, 84, 41, 20,144, 31, 63, 14, 62,195,131,222,104,132, 70,171, 5,199,113, 13,131, 21,
- 89,163, 1, 6,189,222,145, 60,230, 0, 48,150,110, 0,206,166,224,235, 44,231,241,246,170, 79,133, 0, 16, 25, 30, 94,113,237,
-226, 47,109,202,215,132,228,101,228,183, 51,233,113,123,119,126, 41,111,143, 72,128, 51, 97,255, 70, 97,217,109,159, 35,234,137,
-151, 33,138, 24, 98,110, 43,170,202,144, 95, 99,222, 68, 78, 52,102, 10,138, 77, 44, 60, 86, 31,111,149, 67,169, 84,250,137, 36,
- 98,244,142,136, 16, 95, 43,185,209,185,186,178, 26,179, 30,157, 35,223,115, 48, 19, 31, 47, 91,149,190,115,207,174,164,200,136,
- 72, 60, 62,243, 49,228,158,201,193,206,237,219,233,116, 7, 66,236,182, 94,255,129, 3, 7, 48, 97,194, 4,171,177, 40,188,121,
-243, 38,158,121,230, 25,161,245,246,237,113, 85, 87, 87, 99,220,184,113, 48,153, 76, 40, 42, 42, 66, 78, 78, 14, 6, 12, 24, 0,
- 95, 95, 95,116,235,214, 13, 81, 81, 81, 96, 24, 6, 12,195,160,115,231,206, 13, 81,170, 22, 60,245, 1, 67,134, 12,249,104,204,
-152, 49,188,188,188, 60, 31,147,201, 84,190,125,251,118,165, 86,171, 93, 46,147,201,108, 13,216,103, 39, 79,158, 92,188,103,207,
-158, 8, 66, 72, 25, 90,216,209, 86, 42,149, 14,155, 31, 31,191,113, 20,159, 79, 42,151, 46, 5, 53, 26, 33,231,241,184, 92,141,
-230, 73,153, 76,246,141,173,221,241,214, 91,111,241, 25,134, 65, 77, 77, 13, 10, 11, 11, 43, 6, 13, 26, 20,210,148,111,210,164,
- 73,183,253, 70, 88, 88, 88,128,137, 82,104, 53, 26, 92,188,120, 17, 44,203,146,142, 42,254,183, 25, 0,186,173,210,200, 80, 95,
-201,216,201, 67,195,158,241,145, 8, 70,178, 38, 78,193,167, 38, 31,248,117,230,149,213,234,160,173,170, 3,132,124,152,106, 85,
- 40, 81, 24,128,192,238, 96, 56,131, 24,173,204, 38,184,170, 84,162,143,159, 15, 88, 61,112, 53,251, 91,244,142,155,212,224,192,
- 25, 13, 70, 8,192,160, 94,103,222,161,246,129,184,104, 72, 2,195, 90, 77,240, 3,131, 9,246,156,167, 16,136, 1, 97,247, 73,
- 48, 20, 31,109,112, 28, 4, 66, 17,140,208,193, 75, 98,222,145,116,215,158,173,248,229, 68,118,252,156,137, 49, 45,183, 70, 28,
- 7,161, 65, 11, 35,132, 96, 24, 22,208,153, 27, 54,163,209, 8,189, 78, 0, 30, 95, 0,232, 0,202,153,187, 8,122,132, 71,180,
-200,165,209,113,224,241, 8,140,172, 17, 58, 61, 7,165,202, 92, 14,141, 28,133, 65,207, 1,124,128, 39,224,129, 47, 6,136,214,
- 4,142,176,224,160,133, 74,107, 9, 72,219,129, 9, 0,195, 1,148, 0, 12,195,129, 16, 30, 56, 74,192, 48,150,177, 84, 28, 3,
-142, 97, 64, 56,199, 28,100, 27,239, 95,232,106, 1,242,240,240,128,197,219, 15, 46, 44, 44,172, 88,190,124,121, 60,128,135, 22,
- 45, 90, 52,177,103,207,158,106,149, 74, 85,205,178,108,131, 80, 56,163,255,107,214,172,249, 50, 41, 41, 9,225, 65, 65, 13, 39,
-195,131,130,252, 44, 81,128,224, 63,162,194, 24, 12, 6,185,213,219,167, 42, 21,254,253,239,127, 67, 95, 93,221, 48,242,173,183,
-197, 88, 17,232,245,120,240,193, 7, 43, 74, 43, 42, 30, 9,243,240,216,124, 55,210,102, 59,168,207,182,255,191, 57,196,196,196,
- 32, 33,161,103,195,245,205,173, 3, 0, 0,172,222,128, 90, 67, 13,116, 58, 29,252,124,125, 33, 22,138, 96, 52,177,160,148,194,
-100, 50,193, 96, 48,192,104, 52,130, 99, 77,142,230, 47,119,165,168,136,137, 12, 15,183,122, 4,220,149,162, 34,230,219,237,255,
- 19,219, 70, 4, 34,195,195,107,209, 78,131,217,250, 69, 39,101,151, 20,156,106,151,103,236,234, 24,128,123, 51, 43, 81, 17,158,
- 14, 97,247, 62, 32, 17, 67,208, 99,195, 89, 84,233, 56,120,242, 9, 12, 63,253,128,203,133,215,236,238,159,167,101, 13, 56,157,
-123, 2, 31,173,252, 16,247,196,141,197, 91,255,239, 29,236,223,187, 31,155, 55,125,131, 49,227,199, 38,117, 11,239, 14,190,135,
- 0, 7,143, 30,196,150,175,191,193,142, 31,182, 99,247,238,221,244,255,254,239,255, 72, 43, 34, 75,155, 10,191, 21,181,181,206,
-111,112,167, 82,169,224,235,235,123, 28,192,168,240,240,112,196,196,196,128,199,227,129,227, 56,244,232,209, 3, 34,145, 8,117,
-117,117, 8, 15, 15,135,183,183,247,117,149, 74,213,163, 37, 46,153, 76,118, 81, 42,149,166,238,216,177, 35, 49, 50, 50,178,223,
-246,237,219,235, 21, 10,197,187, 50,153,108,139, 77,250,167,223,123,239,189,175,108,216,176, 97, 27,128, 10, 0,201, 0,126, 6,
- 48,180, 25,190,179, 82,169, 52,213,239,212,169, 55, 30,102, 89,124, 8,112, 95,214,215, 63,214,132,239,161, 23, 94,120,225,195,
-185,115,231,226,218,181,107,216,189,123, 55, 88,150, 61, 4,224,225,214,238,219, 18, 5, 96,252,120,188,106, 47,131, 1,234,179,
-103,105, 48,199,169,174, 2,170,187, 45,254, 81, 81, 81, 56,119,238, 92,179, 33,127,123, 93, 0, 61,167, 15,239,190,196, 71, 34,
- 24, 89,169,212,237, 63,118,165,114, 57,120, 34,224,242, 81,220, 31, 78,177,248,249, 7, 17, 51, 48, 28, 47, 72, 39, 99,106, 47,
- 3,112,225, 0,168, 64,194,162,213,193, 58,181,200,175, 45, 6, 95, 4, 60, 48,245,101,108,249,100, 25, 0, 3,160,209,195,164,
- 5,126,144,159, 67,214, 73,243,140,194,174,221, 35,192,240,237,139, 87,226, 80, 2,163, 14,216,181,123, 31,134, 79,124,222,236,
-253, 67, 0,158, 4, 72,153,146,140,196,241,211, 0, 0, 37,215, 11,192,234, 12,173, 91,244,148,130, 37,102,129,215, 27,204,131,
-255,244, 58, 45, 52, 26, 13,234,235,235,161, 82,214, 65,165, 82, 65,169,170,135,174,190, 30, 90,173,182,229,194, 95, 79,160,213,
-153,160,213,153,160,214, 24,161,170,215, 67,161,210,163, 86,105, 64,157,202,136,218, 90,243,255,154,106, 22, 53, 10, 22, 53,117,
- 44,170,106, 12,184, 85,213,114, 26, 25, 74, 97, 2, 64, 76, 4,132,225, 64, 9, 5, 40, 5,165, 60,152,184,223,179,143,179,180,
- 30,206,198,198,251,143,233,143,156, 61, 57,216,127,104,127,131, 81,112,249,250,101,135,190,203,227,241,192, 55,231, 87, 24,128,
- 94, 43, 86,172, 56, 15, 96,245,235,175,191,254, 82,207,158, 61, 89,115,144,192,156, 48, 39,197,159, 8, 67, 67,119, 2, 64,104,
-104,232,109, 31, 62,247,220,115,236,169,203,151,183,158,189,112,161,221,194,186,171, 87,175,150, 59,186,111,188,209,102,138,197,
-247,223,127,143,171,229,230, 46,156, 31,179,179, 27,125,118,249,242,229,144,224,224, 96,197, 31, 97,168, 36, 36,244,100, 44, 13,
- 90,211, 6,191,209,231,118, 13, 60, 31,239,223, 56,147, 9,202, 26, 5,170,170,170, 80, 93,171,128, 90,163,129, 90,163,129,170,
-190, 30,234, 58, 37, 84,181,255,159,189, 43,143,111,162,218,254,223, 59, 89,154,182, 64, 23,118,202, 90,164,236,178, 20,161, 5,
-129, 4, 82,168, 34, 42, 74, 1,225,137,125, 5,155,226, 6, 34, 62, 84, 84,220, 80,121, 63, 11,184,210,212, 39,130,239,129, 64,
-139, 11,155, 44,129,164,178,180,212,130, 11,139, 64,161,208, 66, 89, 10, 77,186, 37,105,182,185,191, 63,146, 9,105, 73,147, 73,
- 90, 4, 53,223,207,167,144, 89,114, 50,115,231,206,253,158,115,238,185,231, 84,160,214,104,128,185,182, 22,172,213,235,252, 38,
-211,163,107, 87,110,204, 96, 1,152, 93,167, 3, 0,224,127,155,182, 96,113,250,199,225, 0,218,250,122,223,191, 31,201,150,170,
-178, 94,170,211,217,206, 30,255,225,246,186,255, 1, 92,158,218, 21, 93,190,252, 25,164,219,221, 48,229,100,163,248,159,131, 16,
- 42, 36,216,151,208, 26,214,202,107, 24,178,163, 12, 94,102, 0, 48,121,242,100,242,228,220, 57, 56,115,234, 20,114, 53,251, 16,
-214, 60, 12,143, 77,125, 12,225, 45, 35,113, 36,191, 0,205,196, 18,132,134,134,162,125,215, 14,248,122,253,215,120,105,209, 43,
-168,169,240,191, 74,237,224,193,131,125,254, 78,243,230,205, 81, 89, 89, 57,140, 97, 24,115,167, 78,157, 48,116,232, 80,244,237,
-219, 23,173, 90,181,130, 68, 34, 65,215,174, 93, 49, 96,192, 0,132,135,135,163,186,186,186, 75,243,230,205,225,133, 88,255, 47,
- 39, 39,103,247, 87, 95,125, 37,210,233,116,175,214, 35,235,164,145, 35, 71,174,248,242,203, 47, 87,181,109,219,246, 93, 66, 72,
- 51, 0, 47, 1, 88,236, 65,222,162,119,170,171,255,111,150,213,106,251,194,104,156, 94, 79,222,228,105,138,215,191,121,118,222,
- 11,130, 83,167, 78,225,208,161, 67,248,242,203, 47,107, 0,188,204,243,246,153, 16,147, 73, 66,127,255, 29,157, 84, 42, 18, 85,
- 90, 42, 0, 64,151, 45, 91,134,173, 91,183,254,161,253,173,190, 71,175, 33, 15, 95,253, 65, 32, 72,192,144,230, 37,229,250,181,
- 95,231,158,123,249,151, 98,109,190,209, 70,206,224,250, 57, 72,190,121, 10,239,142,168, 70,193,155, 67,241,161,172, 6,161,223,
- 61, 13,104, 47,162,134, 74,142, 58, 52,175, 6,112, 35,170,255,215,223,182,224,245,215,191,194, 93, 45,250,227,248,193, 95,177,
- 75,253, 59,100,241,125,145, 48,210,222,209,168, 64, 8,179, 15,241, 17,137,131,122,225,157,255,123, 31, 59,142, 86,161, 89,215,
- 62,120,224,129,137,216,185,247, 91,108,219,105,143,178,100,108, 22, 4,137, 60,143,115,148,181,193,198,218,173, 25, 56,172, 25,
-179,217,140,218,218, 90, 24,141, 70,232, 13, 70, 24, 13,122, 24, 13,122, 24, 76,181, 48,155,106, 27,118,127, 25,155,163,178,198,
-134, 42, 35,139, 42, 35,107,255, 92,205,162, 70,111, 69,141,193, 10,157,214,134,114,173, 5,229, 58, 11,202,203, 45,184,126,221,
-140,171,215, 45, 30, 21,128, 27,238,127,151,107,230,220, 55, 2, 10, 1, 33,160,245,162,254, 41,241, 78,182, 47,206,124, 17,189,
-227,123, 59,183, 85,171, 85, 78,143,192,129,237, 7,112,170,248, 20,175,100, 79, 44,107,255,173,236,236,236,253,148,210,126,147,
- 39, 79,158,217,173, 91,183,214, 0, 24,150,101,131, 44, 22, 75,132,213,106,109,225, 70, 1, 96, 61,184,254, 23,127,250,233,167,
-247, 79,158, 60, 25,221, 90,183,230, 53,117,213, 24,136,218,180,145, 2,192,144, 94,189,100,222,206,237,209,174,157, 44, 61, 61,
- 29,199,139,139,171,190,217,181, 11, 39, 79,158,116, 90,253, 61,123,246,132,227,152,249,155, 93,187, 80, 92, 92,140, 83, 5, 5,
- 70,111, 50,111, 69, 12, 0, 0, 58,122,244,232,167, 92, 73,159,251, 63, 54, 54,150,151, 59, 23, 0, 10, 79,158, 45,176, 90,173,
- 48,155, 77,208, 94, 45,195,181,203, 87,112,253,202, 85, 92,191,114, 21,218,178,107,168, 40, 47,135, 73,175,183,199,207, 84, 84,
- 96,144, 92,238,173, 13,173,139,211, 63, 22, 46, 78,255, 88, 8,160, 10, 0, 59,108,240,221, 55,157,228, 18, 23,192, 27, 39,142,
-100, 75, 75,207, 22,168, 7, 12,189,113, 13,231,206, 28,148, 86, 92, 43, 82, 55,166,127,144, 41,186, 58,150,191, 63, 56,173,213,
-163,100,246, 61,160,231,126, 67,155,207,143, 32,116,229, 97, 92,158,218, 21,177, 59,202, 64, 68, 65, 16, 18, 64,200,120, 87, 64,
-159,126,230, 25,242,218,251,239,224,185, 5,243, 97, 97,109, 56,121,190, 16, 51, 30,155, 14,177, 68,130,239,191,219, 12, 88,108,
- 48,213,154,176,175,224, 32,140,198, 26,164, 38, 39,231, 20, 20, 20, 80, 15,132, 72, 38, 77,154, 36, 27, 55,110, 28, 8, 33,216,
-189,123,247, 77, 46,253, 23, 95,228, 31, 39,212,178,101, 75, 92,186,116, 9, 0,132, 25, 25, 25,184,118,237, 26,250,247,239,143,
-240,240,112, 48, 12,131,252,252,124, 48, 12, 3, 66, 8, 46, 93,186,132,150, 45, 91,122,149,169, 84, 42,223, 53,155,205,163,148,
- 74,229, 6, 23,178,126,108,228,200,145,233,179,103,207,142,200,200,200,144, 16, 66, 24, 0,223, 2, 88,160, 84, 42,175,122,145,
-247,175, 67, 22,203,144,250,242,166, 45,252,102,227,163,211,159, 38,247,207,201,128,230,208, 9,164,167,167,179, 85, 85, 85, 41,
- 74,165,242, 60,143, 41, 68, 0, 96,239,106,222, 60,188,211,149, 43,184,215, 96, 64,123,145, 40, 52, 84, 32, 96, 74, 75, 75,111,
-138,197,249,163,148, 0,238,143,215, 20, 0,128,179, 95, 31, 60,247,140, 86,111, 58, 12,123,224, 86,251,220,194,107,153,163,122,
-181, 93, 36, 60,119, 40, 18, 95, 62, 14, 4,133, 2, 38, 61, 64, 41, 44, 2,201,213,125,199, 47,127, 1,160,193,236, 75,235,214,
-126, 38,155, 62, 99,166, 26, 0,244,172, 5,103, 42, 74, 0,216,112, 87,139,110,144,201,238, 70,219, 86,237, 80, 94, 89,101,247,
- 21,152,173,184, 92,161, 71,111, 15, 55,213,177,115, 60, 46,150,228, 58,222, 76, 33, 18, 7,216, 99, 0,118, 28,181, 96,231,214,
-108, 92,189,126, 9, 45,195,237, 43, 9,194,197, 34,220, 61,196,243,122, 80, 51,132, 16,179, 86,216, 32, 0, 75, 8, 24, 27, 11,
- 88,172,176,137,132, 0, 97,192,189,147, 44,133, 61, 87,128, 7, 60, 60,237, 37,242,221,127, 23,208, 16, 49,133, 80,228,226, 97,
-176, 0, 86, 10,212,154, 1,155,201, 6, 66, 8,136,152,192,106, 3,244, 38, 96, 86,242,191,137,187, 84,142, 54, 23, 13,141,101,
- 88, 16,135,251,223,174, 20, 16,216, 88, 6,140,192,110,245, 51, 0,168,128, 2,148,159, 23,192,149,252,221,109, 31,216,126,160,
-155,215, 41, 9,155, 13, 38,147, 9,147, 39, 79,238,155,157,157,189, 28,192,192,236,236,236, 29,217,217,217,251, 38, 79,158,252,
- 76,247,238,221, 45,132,144,150, 31,126,248,225,174,151, 94,122,105,134, 86,171,205,241,160,124, 58,251,228,130, 5, 11, 22, 47,
- 88,176, 0, 59,118,236,128,254,234,205,239,114,183,214,173,113,238,220, 57, 0, 80,243, 73, 12,212, 80,210, 31, 81,155, 54,210,
- 79, 63,253, 84, 77, 41,197,144,158, 61,101,131,121,172, 44,232,223,187,183,134, 48,204,248,147, 63,253,212, 21, 64, 16,128,143,
-184,213, 0, 61,218,183,199,252,249,243,113,224,192,129,165, 49, 49, 49, 57,253,162,162,188,198, 40,184,203, 3,224,111, 12,128,
- 43,184, 60, 0,113,113, 73, 63,229,229,149, 29, 80, 40, 20, 98,199, 52,193,112, 0,185,124,147, 0,117, 29,208,231, 21,227,229,
- 43,227, 88,171,173,151,190,178, 18,149,215,175,129, 16, 6,148,178,168,173,173, 5,165, 20,148, 82,156, 59,241, 59, 44,102, 19,
-238, 26, 18,235,173, 13, 93,199,156,112, 0,204,253,178,209,236,253,178,209,117,130,254, 28, 83, 4,188,113,242,151,111,164,151,
-206, 22,168, 1,160,107,151, 46,248,190,158, 23,160,117,231,193, 50,220, 70, 12,249,161, 12, 5,247, 1, 3, 99,229, 40,123,122,
- 56,218,125,118, 16,167,181,122, 68,136, 9,202,181, 58, 8, 9,241,234, 1,224, 48,115,230,204, 58,103,110,217,178,133,222, 63,
-225, 62,108,221,188, 21, 27, 55,110,196, 27,139, 94,195, 46,205, 30, 8,132, 2, 68,117,140, 26, 93, 89,233,121,233,114, 98, 98,
-162, 38, 49, 49,145,236,216,177, 67, 58,110,220,184, 58,177, 0,187,119,239,198,153, 51,103,106,149, 74,101,123, 62,215,214,181,
-107, 87, 20, 21, 21,161, 79,159, 62,214,121,243,230,137,215,175, 95,143,176,176, 48,156, 60,121,242, 38,207,107, 81, 81, 17,186,
-242,124,206, 74,229,141,196,115, 10,133,226,241,123,238,185,231,173,199, 30,123, 44,172,160,160,160,121,109,109,237, 63,131,131,
-131, 31, 48, 26,141, 31, 40,149,202,239,121,202,251,197, 85,222, 3,207,174, 95,115,239,216, 73,228,223, 42,128,116,120, 16,239,
-174,120,133,106, 11, 79,166, 40,149,202, 44,111,178, 92,188,108,164,218, 98,169, 16, 7, 5,161,133, 88,140, 96,155,205,164,183,
-217,108,183,131,252,249,162,142, 2, 32,121, 76,121, 92,251,181,226,180,228, 49, 37, 55,165, 89,114,236,107,197, 15,213,181, 86,
-253,176,187, 90,221, 31, 25, 34,184, 71, 96,170, 13,181, 82,166,186,188,218,156,151,123,230,202,206, 82,173, 33, 71,242,152,242,
- 50, 86,174,116,251, 3, 53,250,214,154,180,167,231,200, 0,168, 89, 1, 55,205, 39,192,153,170,203,120,253,153, 20, 24, 12, 38,
- 84, 25,237, 49, 0,102, 38, 8, 99, 18, 61,167,217,125,109, 81, 50,217,177,109,136,253,229,182,113,150,179, 21,137,253, 9,166,
- 61,181, 12, 33, 33, 65,104, 17, 44,145, 1, 80, 23, 30, 59, 34,139,239,231, 57, 33,136,144, 90, 97, 38,118, 37, 0,132,192, 70,
-169, 93, 17,224, 18, 54, 16, 6, 66,150,133,149, 91,118,224, 69, 9,168, 48,134,195,104, 42,135, 88,200, 56,211,156, 89, 89,192,
- 98,161,176, 88, 41,106,140, 44,136,128,192, 6, 2, 11,123,195,117,239,150, 96, 89, 6, 12,177,129,216, 8, 40, 67,157,238,127,
-210,128,241,204, 73,122,238,121, 25, 89,185,242,164, 71, 11,239,247,220,223, 27,219,119,204,148, 82, 24,141, 70,244,239,223,255,
-114,116,116,244,164,243,231,207,247,216,184,113, 99, 62,128,135,178,179,179, 31,114, 61,249,253,247,223,215,188,244,210, 75, 50,
-173, 86,235,141, 32,156, 13,146,150,150,214,224, 73,143, 62,241, 4, 0,223, 18, 3,113, 89,247,234, 99,104,239,222, 62, 45, 43,
-236,215,179,231, 46, 87, 79, 70,122,122,250, 39, 19, 39, 78,180,158, 58,117, 74, 88, 92, 92,140,174, 45, 91,230, 70,133,132,240,
- 10, 80,188, 21,121, 0,234,145,251,213,156,156, 28,215, 24,143,163, 14, 69,128,111,198, 64,125,112,251,118,143,158,220,179, 55,
- 55, 60, 52,180, 69,149,174, 2, 86,171, 21,212,241, 30,232,174,150,161, 74,167, 3,165,148,143,245,111,127, 89,111,196,156, 48,
-142,229,128,140, 99,217,159, 51, 49, 80,225,249,243,252,149, 0,195,175,210,139,133,249, 78, 43,255,251, 44,251,242,191,214,209,
- 35,100, 3, 98, 39,106,110,223,240, 74,111, 86, 2,240, 57, 6,166,189,142, 43, 44,139, 1,171,243,145,159,216, 22,125,183, 94,
-133,144, 0,205, 69,254,173,152,157, 56,113, 34,217,171,217, 75,199, 36,140,197,230, 77,223,225,237,165,239, 99, 97,101, 37, 40,
-203, 98,195,134, 77, 40, 45, 45,125, 0,128, 87, 31,180, 59, 69, 0, 0, 38, 77,154,244, 11,128,106, 62,215, 18, 31, 31, 79, 46,
- 93,186, 68,143, 28, 57, 34, 30, 60,120, 48,198,142, 29, 11,181, 90,141,206,157, 59,195,100, 50, 97,244,232,209,160,148,178, 71,
-142, 28, 97, 68, 34,145,207, 25, 1, 21, 10, 69,159,176,176,176,229, 83,167, 78, 21,157, 56,113,162,133,201,100,106, 40, 48,144,
-175,188, 65, 81, 3,167,172, 25, 56,106, 42,249, 34, 7,168, 50, 2,230,115, 59, 88,109,161,186,126, 96,160, 39,101,130, 83, 2,
-132,218,202, 74,171,216, 98,129, 65, 44,134,208,158,245,135,253,163,123, 29,151, 7,192,213,242,119,183,207,173, 43,213,133,252,
-185,237,223,139,191, 86,148, 20, 95,175,201, 5,208,222,241,242,154, 0,148, 2, 40,146, 60,166,244,234,226, 28, 60,224, 65,205,
-241,223, 74,100, 54,218, 76,237,250,114,212,232,171, 32, 16,134, 1, 76, 8,254,245, 1,255, 20,147,137, 19,250,145,119,230, 60,
- 32, 5, 99, 80,187, 54,111,179,102, 97,176, 89,116, 0,213,163,248, 96, 38,153, 57, 45,209,171, 44, 11, 4, 0,165,118,162,134,
- 0, 98,234, 80, 4, 28,228,111,207, 1, 8,128,231,218,205,228,212, 87, 73,230,199,111, 80,171, 69, 11,161, 99, 97, 47,165, 20,
- 54, 43, 69,173, 5,168,170,182,194, 2, 10, 43,101, 32, 20, 17, 44,121,235,147, 6,239,123,246,108,123,144,214,154,213,103, 40,
-177,216,173,127, 10,128, 82, 2, 80,135,197, 64, 5, 32, 2, 22, 44, 43,196, 11, 11,198,241,106,195,217,111,207,150,157, 63,123,
-222, 19, 1,139, 96, 95,170,225,137,157, 88, 0, 48,153, 76,208,233,116,186,176,176, 48,196,198,198,254, 58,116,232,208,160,107,
-215,174,225,236,217,179,246,229, 97, 44, 43,221,180,105,147,218,161, 4,168,121, 40, 1,150,164,196,196,164,174,253,251,219,238,
-233,213, 75,239,232,163, 38,212, 93, 17,137,164, 68,251,179,237,202, 35, 41,208,139, 47,190, 40, 3,128, 33, 61,123,222,116, 44,
-118,192,128, 70, 17, 68,255,222,189, 63, 99, 24,198,118,242,167,159, 66,219,182,109,123,189,223,240,225,107,110,167, 70,239,134,
-212,245,177,177,177,174,209,214,206,117,172, 62, 40, 1, 39, 6,141, 29, 51,108,243,127,190,216, 20,221,173,107, 31,147,169, 22,
- 54,139, 21, 44,203,162,121, 68, 4, 42,181, 90, 12,146,203,101, 60,172,127, 0,168,120,243,133,103,219, 0, 48, 23,158, 63, 47,
-230,230,255, 15, 29,249, 13,247,203, 70,179,139,211, 63,246,150, 28,200,137,152,246, 58,122,242,212, 73,217,222,157,223,215,113,
-241,143, 25,255,144,140,105, 17,223,168,231,218, 80,128,159,251,253,252, 57,108,200, 15,101,192, 15,207, 56,183,239,250,254,198,
- 18,224, 74,139,255,235,195,199, 72,199,144,175, 74,190,186,111,220,132,196,237, 79, 62, 62,107,255,221, 3,250,223,187,249,251,
- 45,200,253,229, 48, 82, 83, 83,183,173,108,192, 64,243,162, 8,204,250,246,219,111,255,243,237,183,223,198, 37, 38, 38,242,190,
-184,113,227,198,141,217,181,107,215,222,173, 91,183, 34, 58, 58, 26, 9, 9, 9, 8, 11, 11, 59, 93, 89, 89, 25,115,252,248,113,
- 20, 21, 21, 49, 34,145, 8,227,198,141,147,251,122,159,142,192,192,165, 91,182,108,105, 48, 48,208, 71,121, 63, 43, 20,138,247,
-190,203,126,240, 21, 99,212, 12, 24,127,122,149,189,180,111,201,227,190,202,115, 40, 1,181,197,101,101,162, 23, 78,159,190,104,
- 51, 24,152, 95, 25, 70,212, 78, 32,184,162, 80, 40,110,203, 20,128,187,108,128,222,166, 0,220, 66,242,152, 82, 15,224, 55,199,
-159, 95,120,252,241,103, 52,105,105, 47,201, 50,148,111,171,163,186,244, 0, 96,130, 40, 72,130,139,151,171, 48,122,226, 76,226,
-187,188, 7, 53,119,245,138,193,234, 85,223, 0,108, 49, 0, 33,172,181, 70, 68,181, 15,147,117,110, 97,229,255,242,219, 88, 8,
- 25, 22, 22, 34,132,136, 90,111, 40, 2,176, 2,212, 6,190,129, 97,174, 72,125,246, 13, 2, 0,139, 95,158, 67, 69, 66,187,181,
-111,101,237, 46,243,138,106, 10,155, 21, 16, 8, 89,124,246, 41, 63,165,231,137,100,123,106,228, 85, 95,156,162,224,114,194, 51,
- 0, 75,236,238,254,249, 11, 30,240,233, 34, 43,107, 42, 53, 17,109, 35, 26,219,191, 24,192,190,138,194,104, 52,194,102,179,161,
-170,170, 10, 2,129, 0, 54,155, 13,237,218,181,131,197, 98,129, 82,169, 84,215,243, 4,168,189,213, 12, 24,212,191,127, 54, 0,
- 52, 69,198, 63, 0,136, 36, 68, 3, 0,145, 3, 6,220, 18, 51,175,111,207,158, 25,141, 17,240,194,226,197,117, 86, 73, 44,120,
-227,141, 58,158, 1, 95,230,254,221,144,185,222,211,106, 0, 31,210, 1,159,124,112,246,172,126, 0, 4, 39,115,114, 44,181, 6,
- 35, 88,155, 13,189, 99, 99,101,237, 99,250,160,235,128, 62,252,222, 57, 74,166,238,252, 97,155,115,115,120,159,104,231,231,157,
- 63,108,187,105,219, 83,104,252,233,203, 17,132,105, 17,143,177,227,137,236,196,201,179,184, 92,124, 84, 13, 0,123,119,126,175,
-110,219,249,172,172,255,176,127,248,172, 4, 76,153, 50, 5,190,166,247,181, 17,207,121,183, 75, 38,181,195, 15,151,106,111,249,
-128, 63,115,230,204, 31, 0, 48, 5, 5, 5,236,158,188, 28,180,108,213, 18,141,169,207,145,152,152,248, 69, 98, 98,226, 87,240,
-158,222,185, 14,154, 55,111,174,126,244,209, 71, 73,110,110, 46, 61,123,246, 44,242,243,243, 81, 93, 93, 29,211, 20,181, 0, 28,
-100,251,127, 10,133, 66,148,155,155,219,223,108, 54,191,234, 58,151,239,167,188, 69, 10,197, 63, 68, 97,221,191,154, 95,121,118,
-215,140, 70,200,179,174, 63,116,232, 1, 0, 9, 0,126, 6,203, 86, 3,184, 58,109,225, 55, 72, 13,123, 4,153,149,127,140, 18,
-192,173, 2,112,183,223, 47, 5,192,215,169,132, 6, 93, 85,143, 60,161,217,182,243, 12,121,120, 66, 8,109, 19,213, 9,218,106,
- 43, 70, 79,120,220,239,142, 16,127, 79, 47, 18,127,207, 43, 80, 40, 94,167,192, 85, 68, 52, 23,162,115, 36,235,211, 75, 63,228,
-159, 11,110, 89,150,176, 55,223, 91, 73, 0, 96,238,188,103,168,217,104, 1, 11,251,178,185,229,159, 46,247,235, 55, 83,102,217,
-107, 6,172,250,207, 73,202, 82, 1, 94,126,233,161,219,153,225, 76,236,234,198, 54,153, 76, 48,155,205, 78, 34,227, 8, 44, 80,
- 37,208,139, 11,210,135,244,195,126,194,188,112, 97, 82,144,195,131,210,216, 20,100, 20,128,181,215,232,209,117,174,185,107,251,
-118,188, 5, 4,177, 38,205, 19, 19,125, 54,252, 80,191, 20,112, 29,251,187, 69,156,166,239,208, 56,244, 29,138, 70,183,165,183,
-194, 62,245,117, 96, 43, 9,130,145,241,188, 34,245,108,181, 21, 49,205,249, 12,145, 77,210, 21,232,144, 33, 67,154,178, 79, 89,
-252,253, 98,124,124, 60,241,150,136,173, 17,164,253,174, 66,161,248,206, 53, 54,160,145,242,254,165, 80, 40,214,185,198, 6,248,
- 33,195, 2,160, 2, 64,189,184,129,107,127, 24,249,123, 34,123,183, 61,110,224,192,129,119,106,249,200, 0,254, 68,232,209,163,
- 7, 10, 11, 11, 3, 13, 17, 64, 0, 1, 4,240, 39, 1, 19,104,130, 0,154, 2, 1,242, 15, 32,128, 0, 2, 8, 40, 0, 1, 4,
- 16, 64, 0, 1, 4, 16, 64, 64, 1, 8, 32,128, 0, 2, 8, 32,128, 0, 2, 10, 64, 0, 1, 4, 16, 64, 0, 1, 4,112,219, 81,
- 39, 52,117,206,156, 57,126, 71,143,186,203,100, 23,144, 23,144, 23,144,119,103,200, 83, 40, 20, 84,169,108,120,217,105,160,253,
- 2,242, 2,242,254, 90,242,124, 86, 0,184,129,194, 87, 33,158, 6,150,166,150, 23,192,157, 9,111, 4, 19,192,157,249, 28,124,
- 60, 63, 20,192, 61,251,247,239, 95, 34, 16, 8,134, 7, 5, 5,193, 96, 48, 28,188,247,222,123, 23, 1,200, 7, 96,184, 19,218,
- 64,165, 82, 73,179,178,178,212,127,197,113,229,216,177, 99,200,207,207,247,122, 94, 94, 94, 30, 61,118,236, 24, 50, 51, 51, 73,
-191,126,253, 26, 45,143,195,208,161, 67,225, 73, 94, 0,127, 98, 15, 0, 7, 95,210,147,242, 73,148,227, 78, 94, 67,229, 97,253,
- 73,188,243, 87, 31,208,249,158, 59,126,252,120,217, 35,143, 60,162,225, 43, 51, 42,234,230,210,203,165,165,165,117,182,147,146,
-146, 32,151,203, 9, 31,121,183, 82, 9, 24, 63,126, 60, 5,128,157, 59,119,146, 59, 65,158, 94,175, 31,187,105,211, 38,213,233,
-211,167, 1, 0,209,209,209, 15,166,164,164,108,241,247,249,186,246,123, 74,169,243,253,224,246,115,239, 10, 33, 4, 25, 25, 25,
-196,147,242,204,247, 57,248,248,188,250, 28, 59,118,108, 83, 85, 85, 85,175, 46, 93,186,224,250,245,235,168,173,173, 5,128,225,
-155, 54,109, 82,135,134,134,158, 76, 76, 76,124, 24,128,199, 82,146, 35, 70,140,240,201, 32, 56,112,224,128, 12, 60, 83, 61,115,
-200,202,202, 82, 39, 37, 37,201,228,114,185,198,215,231,145,154,154,234,211,245, 77,153, 50,133,247,251,193,161, 75, 23,123, 5,
-220,234,234,106,152, 76, 38,174, 63,241,122,223,242,243,243,241,223,255,122,206, 80,107, 50,153,232,240,225,195,209,187,119,111,
-172, 93,187,182,204,100, 50,117,110,104, 93,120,126,126, 62,102,204,152,193,235, 94,175, 94,189,138, 37, 75,150,224, 78,206,109,
- 31,192, 13,212, 79, 6,116, 43, 19, 1, 5,172,216, 91,136,239, 51,188,167, 52,126,120,206, 14,159,100,170,213, 55, 12,164,211,
-167, 79, 35, 52, 52,212, 57, 8,185,180, 7, 31,107,139,214,223,174, 63,128,169, 84, 42,154,149,149,229,183, 5,182,110,221, 58,
-233,248,241,227, 27,148,223, 24,164,165,165,209, 81,163, 70,201,166, 79,159,238, 19, 89,108,218,180, 73,213,166, 77, 27,204,156,
- 57, 19, 58,157,142, 77, 79, 79,223,172,211,233,166, 69, 68, 68,248,148, 69,140, 16,130, 31,126,248,193,185,157,152,152,136, 29,
- 59,118,120,220,246,134,250, 74,128, 66,161,160,177,177,177,200,204,204,164, 92, 98, 38, 95,201,191,178,178, 50,183,123,247,238,
- 45, 0, 64, 34,145, 32, 56, 56, 24,101,101,101,168,168,168, 64, 88, 88, 24,202,202,202,122,237,216,177, 35, 63, 49, 49,177, 39,
-128, 43,158,132,245,235,215, 15, 73, 73, 73,136,142,190,145,245,111,233,210,165,117,206, 89,184,112, 33,103,201,170,167, 79,159,
-238,243,243,246,135,252, 57,172, 88,177,162,161, 67,206, 90, 5,254, 34, 52, 52, 20, 39, 78,156,128, 72, 36,130,217,108,198,142,
- 29, 59, 80, 88, 88,136,151, 95,126,217, 39, 57, 87,235, 21,201,122,240,193, 7, 5, 0,228, 63,254,248,227,142,209,163, 71, 95,
-125,248,225,135,219,170, 84, 42, 8, 4,130,214,225,225,225, 2, 95,100, 53,132,243,231,207, 7, 72,226, 79, 74,254,220, 62,175,
-181, 0,254,172, 88,181,106,149, 52, 37, 37, 69,211, 88, 57,127, 22, 87,118,212,144,119,110, 88,237, 5,175,250, 37, 67,167,211,
-193, 96, 48, 56, 45,144,204,204, 76, 87, 75,136,175,181,117,211,182, 92, 46,199,238,221,187, 41, 33,228,166,227,254,224,199, 31,
-127, 84,191,248,226,139,200,206,206,198,228,201,147,155,164,253,118,238,220, 73,246,236,217, 67, 41,165,200,201,201, 81,231,228,
-228,248,164,160,156, 62,125, 26, 51,103,206,100, 1, 48, 98,177,152,137,137,137, 65,122,122,250,122, 0,235,163,163,163, 39,164,
-164,164,108,231, 35,231, 86, 20, 3,226,148,128,204,204, 76,202,165, 1,230,254, 87, 40, 20, 52, 41, 41,201,151,123, 13,213,233,
-116,155, 36, 18, 73, 11, 0,120,250,233,167, 81, 91, 91,139,140,140, 12, 4, 7, 7, 59,203,102, 11, 4, 2, 84, 86, 86,182, 0,
-144, 14,224, 31,158, 4,114,228, 94, 84, 84,116,211,190,166, 64, 82, 82,146,204,113,159, 50,127, 21,129,231,159,127,222,249,121,
-249,242,229,220, 71,166,222,126,222, 10, 1,231, 53,121,245,213, 87, 17, 26, 26,138,236,236,108,140, 30, 61,218, 47,242,175,143,
-145, 35, 71, 2,246, 44,141,255,124,252,241,199,209,163, 71,143,182, 59,118,236, 64,121,121, 57, 87,114,215,236,229, 93,104,234,
-238, 39,157, 48, 97,130,122,219,182,109,238,188, 55,210, 49, 99,198,168, 9, 33,216,179,103, 79,192,221,123,139,201, 63,117,225,
-251, 0,128,204,165, 47,185, 85, 2,254, 16, 5, 32, 51, 51,211,221,131,166, 13,237,247,231, 55, 14, 29, 58,164, 6, 32,107,172,
- 18, 48, 99,198,140,191,205,124,182,193, 96,184,201,234,247,135,104, 56, 98,153, 60,121, 50, 18, 18, 18, 8, 0,100,103,103, 55,
-201, 53,174, 91,183, 78,234,176,232, 72, 89, 89,153, 52, 43, 43, 75, 93, 86, 86, 38,245,213, 98,119,135,177, 99,199,146,177, 99,
-199, 98,221,186,117,210,156,156, 28,245,186,117,235,124,146,171,211,233,172, 17, 17, 17,226, 77,155, 54,193,225, 13,168,213,233,
-116, 76,122,122,250, 54,157, 78, 55, 46, 34, 34, 98,247,237,124,190, 28,233,187,246,101,133, 66, 65, 57, 37,141, 39,238, 41, 44,
- 44,236,213,191,127,127,204,154, 53, 11,149,149,149, 40, 47, 47,135, 72, 36,130, 80, 40,132, 80, 40,132, 72, 36, 66,112,112, 48,
-180, 90, 45, 84, 42,213,116,185, 92,254,172, 55,161, 69, 69, 69,117,148, 67, 78, 1,224, 60, 1,177,177,177,190, 92,163, 59,235,
- 95,150,149,149,165,110,140,231,201, 5,214, 6,198, 74,222,222,128,243,231,207, 35, 39, 39, 7, 19, 38, 76, 64,151, 46, 93,208,
-170, 85, 43,228,228,228,224,229,151, 95,118,122,223, 4, 2,129,207, 23, 54,114,228, 72, 44, 90,180, 8, 75,150, 44,105,159,146,
-146, 50,245,177,199, 30, 67, 66, 66, 2, 0, 64, 32, 16,204,108,217,178,229, 22,165, 82,105,241, 84, 12,104,221,186,117,188,188,
- 0,165,165,165,152, 54,109, 26, 63, 3, 37, 42, 10,169,169,169,234,162,162, 34,168, 84, 42,174,253,165,169,169,169,106, 78,129,
- 14,224,214,130, 35,127,238, 51,167, 4,252,225, 30,128,134,230,177,253, 9, 16,188,213, 74,192,253,247,223,223,104, 79,128, 47,
-247,229,203,111, 60,250,204, 78,108,250,100,124,147,180, 21,247, 2, 54, 84,169,234,224,193,131,141, 86, 12,154,226,249,254,248,
-227,143,106,206,234,159, 62,125,186,230,199, 31,127, 68,155, 54,109,212,104,162,196,233,156,220,156,156, 28,228,228,228,120,117,
- 55,235,245,250,251, 55,109,218,180, 13, 0,210,211,211,197,209,209,209, 72, 73, 73,225, 14, 75,126,251,205, 94, 47, 43, 61, 61,
-125, 87,116,116,244,195, 41, 41, 41, 94,235,147, 39, 38, 38,214,137,137,185,239,190,251,234,120, 6,248,184,253,221, 40,221,212,
- 93,255,226,158,139,235,116,128, 39,236,216,177, 99, 73, 76, 76, 12, 0,224,204,153, 51,160,148,226,212,169, 83,206,186, 15, 66,
-161, 16,132, 16,216,108, 54, 24, 12, 6,124,251,237,183,144,203,229, 94,171, 46,185,146,127, 82, 82,146, 91,229,197,117,138,192,
- 31, 37, 64, 46,151, 19,133, 66, 65, 27,235, 13,104,138,113,210, 98,177, 96,240,224,193,208,104, 52, 24, 50,100, 8,244,122,189,
-115,106, 71,163,209, 96,252,248,241,176,114, 37,200,125,179,252,177,100,201,146, 14, 41, 41, 41, 23,191,248,226, 11,231,177, 14,
- 29, 58, 96,217,178,101,255,229, 75,216, 77, 12,205,225,195,135, 17, 27, 27,139,232,232,104, 12, 30, 60,152, 30, 57,114, 68,198,
-145,127, 81, 81, 17, 52, 26, 13,159, 24,149,161, 0,158, 1,240, 79,165, 82,105,243,112,222, 4, 0, 81, 0,190, 85, 42,149,215,
- 2,212,255, 7,118,108, 62,248, 35,131, 0,155, 66, 9,232,218,181,107,163, 60, 1,220, 32,187,118,237, 90,183,199,183,111,223,
-142,181,107,215,250,101,153,228,157,235,131,184,110, 39,252,118,251,115,112,157,243, 87,169, 84,144,203,229, 78,183,255,193,131,
- 7,209,169, 83,167, 38, 81,250, 26, 99,125,113,214,255,245,235,215,157,117,230,165, 82,169,172, 41,189, 0, 28, 70,143, 30, 45,
-203,201,201, 81,123, 59,111,211,166, 77,219,184,185,127,189, 94,143,165, 75,151,162,166,166, 6, 34,145, 8, 65, 65, 65, 56,119,
-238, 28,222,121,231, 29,232,116, 58,164,167,167,127,167,211,233,198, 68, 68, 68,168,189,144,108, 29,178,247, 22, 19,208, 20,138,
-231,225,195,135,235,156,223, 80,144, 88,100,100,228,112,147,201, 4,171,213,138,131, 7, 15, 66, 32, 16,192,108, 54,195,104, 52,
-130,101, 89,231,123,108,177, 88, 96, 50,153,184,119,218,107,152,120, 67, 46,255,133, 11, 23, 58,189, 0,209,209,209, 40, 43, 43,
-107,180, 34,202,173, 10,240, 33,118, 68, 11, 32,210,221, 1,151,233, 0,159,144,158,158,142, 23, 95,124, 17,131, 6, 13,114,122,
- 64,184,244,217,131, 6, 13,194,169, 83,167,208,166, 77, 27,159,100,238,219,183, 15, 35, 71,142,236,146,146,146,114,158, 35,127,
-199,248, 25,181, 97,195,134, 75,245, 3,122,249, 42, 20, 13,253,150,143,222, 39,114,248,240, 97,105,106,106,170,122,200,144, 33,
- 24, 50,100,136, 26, 0, 78,157, 58,133,156,156, 28,190,207,225, 23, 0,193, 0,214, 43, 20,138,105,238,148, 0,133, 66,241, 12,
-128,143, 29,155,139, 20, 10, 69, 47,165,210,123,137,250,191, 50,184,106,128,153, 75, 95,186,105, 10,224, 47, 27, 3,112, 39, 42,
- 1, 51,102,204,160,139, 22, 45,186,201, 21,232, 15,249, 63,250, 76,211,206,211,233,245,250,155,130,252, 56,171, 95, 36, 18,225,
-202,149, 43,183,149,252, 93,173,127, 87,203,109,218,180,105, 26,141, 70,211,228, 94, 0, 95, 60, 39, 51,103,206, 52, 0, 8, 9,
- 13, 13,197,107,175,189, 6,145, 72,228, 60,158,156,156, 12, 0,136,136,136,192,196,137, 19,177,127,255,254,189, 19, 39, 78,252,
- 67,174,211,181,189, 93,231,255,221, 33, 54, 54,182, 78,165,198,134,214, 17,155,205,102,104,181, 90,212,214,214, 34, 44, 44, 12,
- 65, 65, 65,176, 90,173,160,148,194,102,179,193,108, 54,195, 98,177,192,102,179,185, 42,244,215, 61, 93,103, 81, 81, 81, 29,235,
-190,254,116, 64,253, 0,193,198, 66, 46,151,107,124,140, 69,145, 52,116,160,129,216, 0,175,120,231,157,119, 48, 97,194, 4,116,
-237,218, 21, 33, 33, 33,144, 74,165,208,106,181, 8, 13, 13,133, 78,167,195,234,213,171,193, 48,190,197, 23,142, 28, 57,178, 99,
- 74, 74,202,249,121,243,230, 97,243,230,205,120,232,161,135, 0,160,221,190,125,251,174,250,211, 78, 14,133, 2,220,152,197,141,
- 85,190,146,191,171, 39, 96,195,134, 13,178,169, 83,167,170, 1, 96,195,134, 13,178,202,202, 74,141, 15,253,217,172, 80, 40,102,
- 0, 88,235, 65, 9, 72,112,249,220, 25, 64,127,216,151,164, 6,224, 66,252, 13,225, 47,153, 9,112,216,176, 97,178,166, 8, 8,
-244,215, 74,119, 29,144,151, 44, 89,210,104,242,231, 48,120,208, 64,236,217,171,198,186,189, 33, 78,165, 32,239, 92,159, 70,221,
- 99,108,108, 44,138,138,138,144,157,157,141, 78,157, 58, 97,205,154, 53,126, 88, 93, 84,202,125, 74, 75, 75,107, 18,242,231,172,
-255,178,178, 50, 89,253, 99,163, 70, 43, 88,140, 99, 0, 0, 32, 0, 73, 68, 65, 84,141,146,101,103,103, 59,207,105, 10,228,228,
-228,168,249,122,159,116, 58,221,239,176,207, 11,179, 27, 54,108,192,234,213,171, 1, 0,235,215,175,135, 78,167,227, 78,179,158,
- 58,117, 10,173, 91,183,190, 45,239,128,107,180,191, 59,229,140,111,153,230,162,162,162,131, 54,155, 13, 58,157, 14,215,175, 95,
-119, 6,142, 26, 12, 6,212,212,212,160,170,170, 10,149,149,149, 48, 26,141, 48,153, 76,176,217,108, 0,144,235, 73,102,125,114,
-119, 23, 72, 90,127, 85, 0, 95,168, 84, 42,105,253,123, 86,169, 84,190,246,147,144,166,126, 30,107,214,172,129, 84, 42, 69, 72,
- 72, 8, 78,156, 56, 1,141, 70,131,208,208, 80,188,254,250,235,216,191,127, 63, 94,126,249,101,159, 20,128,145, 35, 71,182, 75,
- 73, 73,185, 48,109,218, 52,124,243,205, 55, 28,249,119, 0,112,213,147, 37,207, 71, 9, 88,178,100, 73, 83,144, 63, 0, 72, 57,
-242, 7,128,169, 83,167,170, 71,143, 30, 77,125, 28, 67,205, 0,184,117,138,235, 21, 10, 69,253, 64,137, 51, 46,159, 75, 0, 28,
- 13,208,190,203, 56,176,240,253, 58,177, 0,245,241,151, 9, 2,108,106,242,119,172,119,109,180,229,198, 77, 7,204,152, 49,195,
-111,242,127,244,153,157, 24, 60,232,134,235,102,211, 55,223, 98,211, 55,246,207,123,246,170,129, 49, 50, 0,190, 45, 3, 84, 40,
- 20,136,141,141, 5, 96, 15, 6, 60,124,248, 48,118,239,182,199,172, 29, 61,122, 20,163, 71,143,246, 65, 26,209, 0, 55, 2,255,
- 26, 27,169,191,110,221, 58,169, 59,235,191, 62,154,202, 11,192, 41, 18, 82,169, 84,230,237,220,232,232,232,113,233,233,233,187,
- 38, 78,156,136, 83,167, 78,225,244,233,211,120,231,157,119,172, 0,132, 6,131, 1,233,233,233,112, 28, 19, 22, 23, 23,227,241,
-199, 31,247, 42,243, 86,196, 0,112,150,116, 86, 86,150,211,139,197, 17, 35,247,220,249, 32, 38, 38,166,192, 96, 48, 12, 55,155,
-205,184,118,237, 26,130,130,130, 32, 20, 10,157, 30, 0,189, 94, 15,131,193, 0,147,201,132,202,202, 74,110, 62,255,162, 39,153,
- 28,185,115,211, 0,177,177,177,168,239,173,112, 23, 23,192,135,252,185, 28, 0,245,247, 53,166,127,112, 86,191, 27,139,223,202,
-119, 12, 45, 44, 44,196,169, 83,167, 96, 48, 24, 16, 31, 31, 15,131,193,128,172,172, 44, 76,157, 58, 21,155, 55,111,134, 64, 32,
-224,173, 0,196,196,196,116,228,200, 63, 63, 63, 31,111,188,241, 6, 0,116,158, 49, 99,198,229,181,107,215,146,125,251,246, 53,
-106, 12,229, 60, 1,141, 33,255,216,216, 88,202,245,179, 35, 71,142,160,160,160, 64,150,154,154,170,238,217,179, 39, 68, 34, 17,
-117, 9, 12,244,219, 19,160, 80, 40,230, 2,152, 0, 96, 50,128, 54,176,199, 0,252,173,221,255,192,141, 85, 0,238,130, 0,111,
-203, 42,128, 63, 42, 8,240, 78, 35,255,250, 74, 64, 99, 44,127, 79,219,123,246,170,253,121, 65,111,152, 59, 33, 33,232,221,187,
-119,157,227,135, 14, 29,242, 73,222,228,201,147,157, 10, 64,118,118, 54,178,179,179,235,172, 10,240,229,254,215,172, 89,163, 6,
-128, 29, 59,118,184, 37,207,233,211,167,107,214,172, 89, 3,128,223, 18,166,134,146,254,112,138, 6,165, 20,163, 71,143,150, 77,
-155, 54,205,107,223, 73, 73, 73,217,173,213,106,199, 30, 56,112, 96, 79, 76, 76, 12, 78,159, 62, 13,157, 78, 39,140,136,136, 64,
- 74, 74, 10,180, 90,109,241,129, 3, 7,186,196,196,196, 96,230,204,153, 94,239,215, 93, 30, 0,127, 99, 0,234,191, 91, 74,165,
-146,200,229,114,168, 84, 42, 90,127, 90,134,239,243,136,139,139,123, 69,163,209, 60,103,179,217, 80, 85, 85, 5,139,197,226, 84,
- 86,106,107,107, 65, 41,173, 19, 24, 40,151,203, 31,115, 16, 35,111,200,229,114,200,229,242, 58,203, 2,125,157, 2,112, 37,122,
-185, 92,174,169, 63,182,184, 42, 5, 77, 8,222,227, 39,183,212,239,133, 23, 94,128, 70,163,129, 76, 38, 67, 97, 97, 33,154, 53,
-107,134,146,146, 18,222, 10,192,161, 67,135, 72, 74, 74,202,133,199, 31,127, 28,251,246,237,195,235,175,191, 14, 0, 81, 51,102,
-204,184,212, 20,228,239,170, 4, 52,198,242,231,198,151,162,162, 34, 20, 20, 20, 16,135, 33, 40, 75, 77, 77, 85, 71, 71, 71, 67,
- 42,149, 82, 62,129,128,245,148,128,105, 0,214, 59,148,128,131, 0, 20, 0,164, 74,165,242, 10, 2,104,186, 14,220,212,217,248,
-220, 5,252, 44, 93,186,180,193,253,183,147,252,103,204,152,113, 75, 82,134, 54, 70,230,133,139,222,251,119,112,176,111, 94, 75,
- 79,243,195,254, 64, 46,151,203, 18, 18, 18, 52,123,246,236,161, 27, 55,110,172,163, 8,212, 39, 37,190, 50,211,210,210, 26,212,
-108,184,164, 36,190, 36, 6,106, 72,225,148,201,100,188,200,159, 67,100,100,164,115, 94,255,196,137, 19,255, 72, 79, 79,255, 47,
-231, 17, 40, 46, 46,238,242,234,171,175,202, 8, 33,188,228,221,138, 60, 0,245,219,217,221,252,183, 15, 74,169,126,244,232,209,
-139,183,111,223,254,166,213,106, 69, 69, 69,133, 51, 6, 0, 0,174, 93,187,134,138,138, 10, 80, 74, 57,171,221,167,201,118,110,
-254,191,254,178,191,250,113, 2,124,201,223,245, 57,223,105, 75,121, 57, 37,224,165,151, 94, 66, 78, 78, 14, 38, 78,156,136,247,
-222,123, 15, 11, 22, 44,128, 80, 40,132, 68, 34,241,246, 92, 9,165,148,157, 53,107, 22,254,251,223,255, 98,213,170, 85, 0,208,
-105,223,190,125,151, 28, 22,187, 95,157,201,101,218,170,201, 80, 90, 90, 10, 55,121, 0, 52,153,153,153,178, 49, 99,198,168,253,
- 89,242,232,176,250,167, 1,216, 10, 96, 46,128,184, 0,249, 55, 12,119, 65,128,188, 20, 0, 95,146,114,248, 75,216, 77,141,166,
- 32,255, 59,113,208,152, 59,119,174,236,228,201,147, 77, 42,211, 97, 13,169,155, 82, 38, 71,120,220,218,122, 0,206,100, 64, 44,
-203, 98,211,166, 77,188,149,128, 23, 95,124,145,187,206,155, 98, 0, 24,134, 1,203,178,248,215,191,254,165,230, 75,158,158,228,
- 53,118, 37, 65, 74, 74,202,255,180, 90,237,181, 3, 7, 14,236,224,107,245,223,106,111, 91,253,246,117,231, 98,247, 69, 9, 32,
-132,188, 53, 97,194,132,236,181,107,215, 30, 23,139,197,224, 86, 5,176, 44,139,240,240,112,232,116, 58, 46,133,109, 8, 0, 27,
- 95,131,192, 53,248,239,240,225,195,144,203,229,117,198, 19,111,227, 80, 81, 81, 17, 45, 42, 42,146,213,119,241, 55,114,201, 31,
-128, 6,221,253,214,229,203,151, 75, 0,152, 97,143,159,226,254,124, 82, 2, 92, 19,255, 60,245,212, 83,206,207, 85, 85, 85, 94,
- 95,179,184,184, 56,210,183,111, 95,250,213, 87, 95, 61,188,126,253,250,239, 57,178, 93,191,126, 61,124,141,250,231,112,233,210,
- 37,103, 74,226, 38,130,102,219,182,109, 13,245, 41,205,222,189,123,125,170, 85,225,225,240,101,119,217, 74,255,238, 53, 73,184,
- 85, 0,238,136,159,215, 42,128,166, 38,245,134,228,221, 41,202,195,157,220,113,250,244,233,163,233,211,167, 79,147,202,116, 12,
-142,183,252, 94, 93,221,255,245, 95,234,134,150,157, 57,174,143,207,181, 17, 31,238,247,150,222,107,100,100,228,206,198, 68,250,
- 55,101, 12,128,187, 62,236,201,219,227, 67,159, 63, 49, 99,198,140,102,187,118,237,122,183,164,164,228, 57,163,209, 8,155,205,
-134,129, 3, 7, 98,200,144, 33,233,114,185,124, 33, 31,242, 7,128,188,188, 60,231,103,215, 88,147,188,188,188,155,182, 61, 33,
- 58, 58,154, 56,188, 4, 50, 0,106, 78,153,112,153, 10,240,249,153, 76,153, 50,165,161, 67, 66,151,241, 82,124, 59,198, 21,165,
- 82,201, 30, 59,118, 12, 31,127,252, 49, 1,192, 43, 41,207,179,207,122,206,201, 52,116,232, 80, 76,154, 52,137,247, 53,120,147,
- 23,192,157,167, 4, 52, 68,254,110, 21,128,166, 38,193, 64,133,184, 0,220,245, 1,127,203, 87,254, 29,218,230, 14,254, 13,253,
-184,113,227,230,194,238,126,245, 11, 7, 14, 28, 32,211,167, 79,191, 37, 10,173,191,153, 3,255, 72,101,177,177,232,215,175, 95,
-147, 22,227,105,106,121,127, 7,163,236,207,164, 4,120,181,162, 6, 14, 28, 24, 24,136, 3, 8, 32,128, 0, 2, 8,224,111, 6,
- 38,208, 4, 1, 4, 16, 64, 0, 1, 4, 16, 80, 0, 2, 8, 32,128, 0, 2, 8, 32,128,128, 2, 16, 64, 0, 1, 4, 16,192,159,
- 16, 86, 0,108,160, 25, 2,240, 4, 97,160, 9, 2, 8, 32,128, 0, 2, 99,123, 0,127,243, 78, 50,103,206, 28,191, 35, 46,221,
- 69,117,123,146,231,109,253,177,175,242,154,250,250, 2,242, 2,242,254,238,242,126,126,165,216,239,129,101,208,187, 93,112,171,
-229, 29,126,217,127,121,177,239,221, 44, 47, 45, 45,141, 0, 0, 33, 68,106,177, 88,112,238,220, 57,181,217,108,134, 80, 40,196,
-197,139, 23,241, 88, 88, 87,236, 44, 40,128,241,238, 78,136,139,139,147, 9, 4, 2, 80, 74, 53, 0,144,145,145,113,203,159, 7,
-119,125,174, 32,132,244, 1,208,230,248,241,227,219, 58,116,232,192,104,181, 90, 73,135, 14, 29,222, 9, 14, 14, 94, 9,224,146,
- 99, 57, 41,147,145,145, 97,243, 32,175,185,195, 91, 96, 32,132, 80, 0,184,112,236,127,159, 43, 70,150,164,172, 43,136, 57, 39,
-108, 51, 46,174, 89,243, 22, 53, 0, 40,165, 84, 8, 32, 34, 35, 35,227, 66,224,125,187,179,229,221, 82, 45,145,111,182, 45, 95,
-179,191,249,147, 50,183, 98,245, 55, 82, 97,100,152,250,236,233, 51,178,187,130,154, 33,244,217, 25,154, 59, 73,203,106, 40, 31,
-121, 96,137,203,237,199,230,205,155,165,219,183,111, 87,167,191, 98,223,254,110,223, 72,204,152, 49,131,215,115,217,151,123, 80,
-202, 16,162, 62,117,242, 36,116, 58, 29,186,116,233,130,102,205,155, 35, 49, 97, 28,239,231,186,123,247,238, 58, 47,110,118,118,
-182,199, 90, 10,217,217,217,126,247, 27,174, 80, 83, 70, 70, 70,227,250, 93,146,214,241,129, 2, 32, 64, 86,164,255,178, 98,151,
- 3,209, 79,216, 63, 23,173, 6, 14,207,111,252, 67,157,124,189,238,245,101,183,226,245, 53, 66, 8,213,235,245,178, 93,187,118,
-169,139,138,138,144, 36,106,137,118,157, 90,163, 86,111, 68,176,193,138, 17, 11,158,196,168,137, 83,177,245,139, 12,108,217,179,
- 71, 61,110,220, 56,217, 29,208,133, 79,219,108,182,246, 69, 69, 69,236,128, 1, 3,196, 49, 49, 49, 56,114,228,200, 43,181,181,
-181, 19,122,244,232, 33, 39,132,104, 41,165,222,166, 2,170, 93, 55,172, 86, 43,243,107,193,207, 61, 58,206, 26,132,127, 13,237,
-219, 58,111,215, 7, 27, 55, 29,149,254,210,163,223,152,247, 28,242, 46, 58, 20, 6, 54,224,105,248,155,185,137,124,205,223,239,
- 75, 30,124, 95,201,223,182,110,155, 52,190,117, 71, 53,137,138, 70, 97, 77, 5,218,119,232,170,182,176, 54,156,252,100, 13,202,
-186,180,150, 13,157,120, 63, 47, 69,224,176, 90, 65,123,117,231,182, 4,248,118, 23,139,125, 63, 81,164, 78, 3,122,117, 7,230,
- 47,105, 28,113,115, 5, 74, 26,155,157,204,157, 50,209, 84,114, 27,131,212,212, 84,138,197, 4,228,173,134,207,161,148, 2,139,
- 9,166,252,158,116,199,172,181,190, 65,254,212, 65,254,163,176,127,255,126,204,152, 49,195,235,119,239, 30,176,139,246,233, 51,
- 4, 89, 89,151,113, 40,215,158,176,230,244,201, 83, 0,128,217,255,252,134,158, 58, 51, 89, 22, 42,225,247, 92, 18, 18, 18,216,
-221,187,119, 51,217,217,217,216,187,119,175,199, 66, 76,254,164, 80,245,244,222,166, 41, 20, 52,195, 15,133,130, 75, 23,222,232,
- 84,198,209, 79,212, 45,182,211, 20, 10,128, 75, 59, 57,170, 19,242,194,217,179,103,161,217,184, 81,253,150,124, 10, 6,206,120,
- 10,226,182, 17,128,208,145,236,143,165, 0, 43, 2,107,162,184,255,137, 84,148,124,244, 62, 14, 30, 60,168, 30, 62,124,184,140,
-243, 2,220, 38,216, 24,134,105,211,170, 85, 43,104, 52, 26,225,128, 1, 3, 48,116,232, 80,230,202,149, 43,131,126,253,245,215,
- 99,119,223,125,247, 96, 66,200, 21, 7, 89, 51, 60,219,174,217,216, 49, 9,209,239, 45,219,204, 44, 76, 62,218, 34, 46,113,142,
- 44,110,152,106,228,130,143, 47, 62, 16,115,207,204, 88, 66, 72, 53,236, 49, 6, 76, 67,253,204, 53,177,149,183,126,212,104,133,
- 52,128, 58,168,159, 0,168, 62,252, 42, 6,228, 58,128, 12,156,217, 31,115, 70, 60,195,128,103,229,190,250, 74,128, 66,161,160,
-177,177,177,200,204,204,164,174,101, 75,125, 34,214,156,195,210,233,131,226,213, 98, 27, 11, 27, 40,130, 43, 66,112,229,218, 53,
- 92,169,174, 68,183,160,102, 48, 21, 94, 82, 31,218,178, 93, 54,140,135, 18,208,171, 59,112,242, 44, 3, 74, 37,176,145, 32, 60,
-156, 96,193,164,113, 70,220,136,161,105,124,170,132,198,146, 52, 71,252, 11, 23, 46, 68, 65, 65, 1, 0, 96,219, 73, 17,106, 45,
- 22,181,226,159, 67,124, 82, 4,124, 81,226, 28, 41, 94, 61, 63,151,197,246,195,177,177,177, 13,231,111, 95,236,223, 59,190,245,
-179,203,210, 45,191,190,225, 84,120, 38,244, 95, 44,123,240,153, 14,141, 30,112, 55,111,222, 44,221,182,109,155,154, 97, 24,188,
-240, 46,156,213,207,248,212,193,136,136,248, 81, 26, 55, 44, 13,192, 22,140, 28,249, 81,157, 99,211,167, 3,247,223, 15,220,143,
-108,245,242,143,192, 75, 9,224,200, 95,163,177,159, 58,117,234, 84,103, 97, 37, 95, 8,204,147,229,207,165,100,118,189,191,180,
- 52,255,200,191,201, 16,187, 12, 0,176, 98,197,138, 27, 10,192,224,116,224,200, 11,183,229,114,246,238,221,139,149,147, 82,209,
-109, 76, 2, 32, 48,129,136, 24, 16, 33, 3, 34, 16,129, 82, 2, 86,111, 5,181,217, 64,205, 54, 60,249,196, 83,120,234,245,185,
- 56,219,182,173,186,123,247,238,183,211, 19, 64, 10, 10, 10,226, 59,117,234, 36, 46, 42, 42, 66, 78, 78, 14, 78,158, 60,137,132,
-132, 4,196,199,199,183, 95,181,106,213,219, 83,166, 76,121,210, 7, 5, 64,176,127,207,215, 95, 62, 50,208,208,246,112,181, 0,
-211, 23,215,224,222, 65, 31,226,153,121, 83,133, 31, 44,172,232,182,240,131,181,211,163, 7, 77, 87,162,129, 52,200,174,132,238,
- 58,166,167,165,165, 81,119,251,155,186, 32, 92, 0,183,192, 3,224,250,144,214,237, 88, 91,209,253,174,238,225,138,183,158,100,
-231,140,120,198,151,106, 78, 36, 51, 51,147,114,105, 73,185,255, 21, 10, 5, 77, 74, 74,242,205,170,222,113, 80, 58, 62,166,175,
- 90, 92,107, 69,240, 7, 47,194,106, 48, 67,242,194, 18,132,137, 37,168, 21, 25,161,175, 53, 34, 24, 4,166, 11,101,234,202,202,
- 74, 89, 88, 88,152,199, 65,248,228, 89, 32,115, 61, 11,192,224,248, 3, 70,222,195, 96,210, 56, 2,215, 64,218,212,105, 64,230,
-122, 63, 60,166, 73, 73, 50,199,125,250,101,173,115,228,207, 17, 63, 0, 40,247, 91, 96, 52,235, 1, 0, 99, 23,238, 70,214,210,
- 4, 53, 0,222,242,207,190,127, 22, 34, 82,120,163, 35,144, 82,144, 86,189, 92,182,203,208,250,159,252, 82,132,146,183,236,228,
-239,169,198, 60, 81,100, 81,251, 57,252,172,255, 35,219, 44,210,204,205,207,170, 41, 40,222,155,247, 29,134, 73, 99,176,238,179,
-125,248,207,174, 52,245, 54, 5,197,156,127,188, 33, 27, 56,178,189, 95,138, 64, 77,177,130,142, 25, 0,100,125,117, 28,148, 82,
- 52,111,115,183,147,252, 87,174, 92,233,241,250,244,181, 42,105,106, 82,123, 53,240, 41,128,239,112,232, 16, 48,108,216,141,227,
-111,191,125,227,243,243,207,101,171, 51,254,211, 83,198,176,157, 60, 94, 39, 71,254,163, 71,143, 6,203,178,248,228,147, 79,154,
-236, 5, 87, 40, 20, 78,242,175,171, 20, 40,104, 70,134,231,119,142,153,162,171,163,254, 18,199, 63,108,146,155,243,136,227, 68,
- 98,255, 48, 96,192,205,115,236,204, 84,157,211, 43, 15, 0, 44,155,140,121,243,230, 57,143,207,155, 55, 15, 43, 86,172, 0,211,
- 99,214,141, 95,117,156,239, 78,158,112,170,251,235,179, 90,221,156,199,227,250,106,107,107,209,174, 75, 87,128, 53,131, 9, 2,
-136, 80, 0,107,117, 37,106,139,206,225,218,197, 82,116, 28, 46, 5, 17,135,131, 88,204,128,128,193,210, 57, 11,144,144,249, 6,
-230,207,159,223,164,131,178,183, 84,217, 46,100, 75, 40,165,225, 70,163,113,120,100,100, 36, 78,157, 58, 5,150,101,113,238,220,
- 57,172, 94,189, 26,189,123,247, 70, 84, 84,212, 76, 0, 79,214, 35,107,182, 33,242,166,148,182,234,194, 28,146,182,239,156, 40,
-174,200, 57,138, 74, 93, 16,254,187,213,138,237,121,255,195,115, 73,193, 66,161,129,141, 5,166, 55, 88, 7,225, 86, 20,183, 10,
-192, 55, 52,212,119,220,121, 6,132,124,137,159, 82, 10,217, 43,163,145,153,163, 12, 79,133, 2,191,124,117, 20, 24,225,124,173,
-120,129, 35,125,131, 97, 45, 0,130,218,218, 85,136,140, 84, 33, 43, 43, 11,190,164,241, 28, 26,212, 66,221,166,214, 6,201,226,
-167, 96,187,174,133,245,210,117, 8,197, 34,132, 16, 1, 66,137, 0,161, 2, 33, 34, 69, 18,232,170, 43,112,121,239, 65,117,216,
-164,251, 60, 14,116,238, 72,125,223, 79,172, 67, 1, 0,150, 45, 34,160, 4,176,135,199,248,222,193, 29,164, 44,203,202,202, 82,
-103,101,101,249, 53,133,224, 74,254, 16, 10, 80,116,217, 62,248,149, 92,173, 69,231,182, 18,244, 72,222,130,172,213, 19,213,124,
-221,235, 34, 82, 8, 33, 41,133,128, 92,135,141,182, 66, 80, 27,130,208,105,151,192,178, 90,212,214,102,193, 86,240, 47,223, 60,
-185, 60, 42,183,249, 82,226, 85,185,249, 25,117,124,228,171,248,228,187, 89,104,198,116, 6, 0, 60,245,108, 79, 12, 24, 26,141,
-181,159,230, 96,229,255,222, 84, 43, 71,250,231, 58, 36, 4, 80, 60,127,204, 57,232,221,123,239,189,216,183,111,159, 87,242, 7,
-128, 25,211, 68,106, 96, 47,128, 99,168,184,218, 12, 61, 58, 3,159,127, 94, 3,181, 26,232,209, 3,136,142,182,139,168,184,218,
-204,254, 50,246,255, 93,253,219,175,157,136, 39,242,223,187,119, 47, 88,150,117,146,244,134, 13, 27, 26, 77, 32,174,219,245,201,
- 31, 0,188,145, 63, 0,100, 40,149,132, 2, 82, 2,104, 82, 83, 83, 27,236,248,172,203,160,175,204,204,148, 17, 2,172,252,108,
-229, 77, 49, 47, 43, 51,148,174,254, 21, 41,165, 84,253,225,135, 31, 58,119,124,248,225,135, 88,177, 98, 5, 50, 50, 50,234, 86,
-145, 35,144,186,147,151, 97, 79, 97, 43,163,148,106,158,124,242,201, 6,175,207,234,226, 69,201,252,252,115, 25, 33, 64,198,202,
- 12,181, 59,242, 18, 54,111, 14,136, 4,176, 25, 42,240,251,246, 61, 88,187, 49, 27,159, 93, 58, 7, 0,200,127,179, 5,122,140,
-186, 31,166,146, 11, 56,254,235, 97, 28, 61,119, 26,149, 87,174,224,216,177, 99, 77, 86, 88,107,245,234,213, 82,126,125,152,132,
- 81, 74,123, 21, 20, 20,124,240,218,107,175,245,253,224,131, 15,196,102,179, 25, 2,129, 0,205,155, 55,135, 94,175, 71,126,126,
- 62,162,163,163,185,186, 5,158,172,255, 80, 66, 8, 75, 41,141,172,184,120,224,167, 55,191, 44,137,252, 98, 94, 7,104,245, 98,
-136,133, 12, 58, 70, 72,112,229,186, 25,138,127, 91, 49, 96, 72,108,104,103, 47,158,132,180,180, 52,202, 41, 2,174,125,177,161,
-207, 1,220,122,112,228, 95, 95, 57, 96,188, 13, 34, 92,189,239, 58,110,206,196, 25, 62, 95, 64,102,102, 38,181,147,255, 58, 39,
-249, 75,126, 58, 15,195,206,187,234, 28,247,106,185, 42,215, 73,195,180,213, 96,197, 66,152, 15, 31,135,233,247, 34,212,238,218,
- 7, 24, 77, 16, 83,138, 16, 8, 32, 4,129,137,181, 66,107,170,197,103,187,183,122,149,185,108,145,221,186,119,133,125,155, 51,
- 87, 40, 78,157,161,152,191,196,255, 62, 43,151,203, 53,174,110, 47,149, 74,197,235, 69, 87,169, 84,206,218,218, 28, 30, 91,113,
- 17,123, 14,235, 80,114,181,214,169, 4, 20, 94, 52, 2,242,141, 80,169, 84,188,220,145, 66, 98,175, 28, 38,170, 62,138,208,208,
- 51, 8,146, 84,131,101,181,176, 88, 14, 67, 32,136,134, 89, 95,126,219, 58,235,158,111,143, 73, 1, 82,135,252, 47,159,162, 24,
- 60, 81,128,103,223, 73,192,189, 9,125, 1, 80,199,121,190, 97,221,186,117,244,133,119, 9,154,181,238, 15, 10, 32,113,210, 28,
-236,223,191,159,215,119, 89,230, 2,109,211,230, 55, 39,249, 87,151,219, 75, 48, 15, 24, 96, 39,127,174, 16,160,253, 88, 48,170,
-203,131, 17, 25,114,217,163,204,201,147, 39, 67, 38,147, 97,204,152, 49,152, 58,117, 42, 4, 2,193, 77,127,174,251,249,194,221,
-123,235,151,178,228, 66,196,132, 16,231, 95, 67,251, 8,160, 1,133,166, 1, 89, 55,222,175,212, 84,181, 59,203,121,222,188,121,
- 72, 77, 77,173, 75,168, 13,200,251, 78,169,196,177, 99,199,212,132, 16, 41,128, 58,109,230,244,103,215,219,231,233,250,196,148,
-130, 9, 9,130,229, 74, 49,148,175,190,138,213,250, 10,232, 70,199, 57,143,127,241,191,213,120, 99,193,108,196,204,127, 12,111,
- 29,221,139,141,186,115, 72,120,240, 65, 68, 71, 71,251, 60, 5,176,122,245,106,169, 66,161,160,171, 86,173,170,211,135,243,242,
-242,212,158,166,161, 8, 33, 34, 66,200,144,163, 71,143,150,228,228,228,104, 94,120,225,133,184, 79, 62,249, 68, 82, 83, 83,227,
- 44,211, 92, 91, 91,139,102,205,154, 21, 78,153, 50,165,231,136, 17, 35, 58,123, 81, 36, 24, 66, 72,151,163,185,155,202, 78,239,
-156,127,126,254,203,233,237,183, 44,238,128,223, 75,133,168,172, 17,128, 37, 64,121,141, 25,180,101,247,218,231, 95, 89,210,247,
-129,135,255,225,117, 58, 33, 35, 35,131,112, 99,157, 82,169,244,250, 57,128,219, 67,254,110, 61, 0,174,196,207,103,156,241,197,
- 18,185,225,106, 91,229,214, 59, 80, 39,206,160, 1, 55, 70,223, 86,109,213, 90,106,129,184, 92, 11,201,119,123, 65,132, 12, 80,
-107, 6,173,214,131, 88,173, 16, 1,176, 81, 22,181, 54, 43,170,173,102,128,245, 62,135,202, 5,249, 45, 91,212,240, 48,104, 15,
- 18,108,252,128,170, 84, 42, 9,231,210,231, 99,173,223,100,253, 3,248,250,153,246,117,182,135,188, 84, 4, 17,189, 14, 11,105,
-133,172,172,172,189,124,189, 0,146, 26, 53, 34,223,250, 31,174,189,144,134,235,218, 96,116,176, 28,135,205, 86, 4, 0, 40,254,
-165,221,109,235,176, 27,119,124,172,158, 61, 78, 89,135,252, 57,196, 69,188,138,225,125, 39, 35, 62,242, 56, 54,238,120, 71, 61,
-118, 18,255, 65,100,237,218,181,244,199, 31,127, 68,121,249, 88,180,108,185, 7,205, 90,245, 3,165, 20, 12,195,240, 10, 68, 42,
- 41, 1,138,138,142,113, 19, 9,128,164, 6, 90, 61, 48,116,168,125, 79, 97, 33,240,233,167, 64,117, 21,160,175, 1,106,244, 64,
-104, 68, 21,175,107,107,104,174,255,236,217,179, 0,128,119,223,125, 23, 0, 16, 19, 19,211,100,110,102,215, 62,201,231, 59,115,
-231,206,133,171,197, 94,159,184,125,128, 20,184, 49,247,239, 10,206, 11,224, 56, 71,227, 73,200,172,168, 24,156, 62,126, 2,165,
- 17, 17,106,134, 97,240,220,115,207,225,163,143, 62,242,251,250, 70,154,194, 65,217, 26,204,126,119, 17,250, 79,158, 12,229,187,
-239,130, 97,110,240,156,178,240,216, 13, 15,225,190,125,216,189,123, 55,206,157, 59,231,115, 16,224,234,213,171,165,185,185,185,
-106, 0,200,207,207, 87, 51, 12, 35, 75, 78, 78,214,172, 90,181, 74, 74, 41, 69,124,124,188,204,104, 52,170, 27, 80,236, 44,121,
-121,121,253,103,204,152,209,162, 91,183,110,216,190,125,187,161,178,178, 82,104, 52, 26,237,222, 14,199,252,199,248,241,227, 99,
- 8, 33,193,148, 82,163, 27, 49,140,139, 60,166,232,212, 47, 43,222,248, 87, 74,179,150, 61,178,240,115,214, 19,248,237, 2, 65,
-201, 85, 33, 64, 25,152,204, 22,104,105,203,210,167,103, 61, 21, 71, 8, 41,165, 77,160, 85,242,137,179, 9,224,143, 65,131, 83,
- 0, 57, 57, 57, 55,237,171, 40,213,249, 76,118,174, 30, 0,251, 20,128,189,255, 72,126, 58,143,160, 99,165,176,133,219,173,168,
-250,115,200, 13,173,107, 60,113,177, 4,134,160, 96, 68, 91,173,232, 24,220, 12, 33, 34, 49,136,197, 2,176, 20, 86,155, 13,213,
- 54, 51, 12, 54, 43, 76,212, 6, 27, 40,168, 15,157,109,254,146, 27, 74,128, 61, 46,224, 6,233, 47, 91, 36, 64,250, 34,130, 23,
-150, 88, 27,221,232,114,185, 92,195,149, 46,229,131,133, 89,246,118, 95,154, 20,225, 36,124,167, 43,159, 94,135, 8,128,144,234,
-240,213,236, 8,235, 99, 42,126,113, 29,162,171, 63,193, 6,187,155,250, 3, 97, 24, 30,187, 90,140,130,127,119, 68,104,187,222,
-168, 44, 45,197,149,243,151,110,107,199, 28, 48, 52, 26,122, 71,119, 51, 4,159, 64,136,177, 15,190,121,211,226, 60, 62, 66,222,
- 23,185, 27,125,179,252, 39,141,250, 17,223,125, 39, 71,120,174, 10,203, 23, 1,207, 47,161, 24, 53,106, 20,239,101,127, 93, 59,
-118, 34,221,187,215,213, 2,183,110,181, 7,254,173, 91, 7,244,232, 65,177, 98, 5,193, 91,111,213,216, 21, 4, 0, 61,122, 70,
-224,133,231,249, 93, 35,103,165, 78,158, 60, 25, 27, 54,108,168, 99,201, 38, 38, 38, 54, 72,110,254, 42,162, 62,122,240,100, 43,
- 86,172, 80, 55,164, 0, 44, 91,182, 12,153,153,153,188, 44,225, 39,159,124, 82,205, 69,254,187,195,243,207, 63,143,229,203,151,
-171, 51, 51, 51, 61, 94,227,143, 39, 74,240,202, 91, 11, 48,107,241,191,240,178,217,140, 15, 63,252,176,193, 54, 90,182,108, 25,
- 84, 42, 21, 8, 33,210,134, 8,123, 84,159,206, 88,245,197,167,136,157, 62, 29,111,190,249,166, 71,165, 97,222,188,121, 88,182,
-108, 25, 62,255,252,115,141,175,109,159,155,155,171,230,130,229, 20, 10, 5,205,203,203, 83, 39, 39, 39,147, 67,135, 14,169, 9,
- 33, 72, 78, 78,214,172, 92,185,178,193,239, 27, 12,134,240,173, 91,183, 98,236,216,177, 40, 44, 44, 12,209,235,245,176, 88, 44,
- 96, 24, 6,102,179, 25, 73, 73, 73,196, 65,238, 70, 62,142, 45,147,201, 36, 62,188,105, 58, 70, 61,242, 22,118,230,156,197,185,
-203, 2, 84,233, 25, 8,132, 64,169, 62, 24,207,189,180, 40, 30,192, 69,190,220,207,197,157, 0,252,166, 3, 2,184, 61,214, 63,
-220,185,113, 56,215,140, 84, 42,133, 84, 42,197,175,191,254,234,252, 43,250,169, 24,149,198, 74,180, 28,234,251,186, 95,142,220,
- 67, 66,102, 64,242,211,121,136,138,203, 65, 9,129,120, 86,121,157,227, 94,137, 75, 44,128,141, 2, 23,245, 21, 40,169,212,226,
- 90,149, 14,149,181,181,208,153,141,184,102, 50,226,114,173, 1,165,181, 53,208, 90, 76,208,177, 22,152, 89,239,217, 48, 71,222,
-227,102,192,115,137, 11,152, 61,181, 25, 40,196,160,190,149, 1,119,186,240,235,119,118,190,238,127,167,229,121,181, 22,123, 14,
-235,234, 16, 63, 71,254, 65,108, 49,130,216, 98,188, 49, 94,136,146,146, 18, 51, 95,153,155,206,177,104,157,158,225,220, 62,167,
-183,225,226,217, 82,156, 58,112, 28, 87,206, 87,220,246,142,187,238, 51,187, 2, 90, 85, 70, 17, 98,236, 3,233, 44, 33, 30, 89,
- 44,114,254,165,111,156, 14, 2,194,123, 64,122,232,222, 28, 60, 49, 95,142,136,188, 61, 32,132,224,251, 3,246, 71,192,151,252,
- 57,196,244,234, 89, 79,177, 0, 62,249, 4, 56,115,198,238, 9,120,243, 77,234,116,191, 83, 74, 17, 17, 17,225,125, 4,118,244,
- 81,155,205, 6,155,205,134,119,223,125, 23,103,207,158,197,233,211,167,113,250,244,105,168, 84, 42, 44, 88,176, 0, 37, 37, 37,
-183,243,145,104, 26,178,164,231,206,157,203, 89,117,188,200,144, 16,226,214,250,231,224,233,152, 43,246, 5, 85,128, 48,205,240,
-159, 87,150,160,217, 86, 21, 82, 83, 83,225, 90,106, 88,209,163, 31,230,198, 14, 71, 72, 72, 8, 70,141, 26,133,215, 94,123, 13,
- 42,149, 74,173,211,233,220,190,127, 95,148,158,198,229,190,125, 16, 21, 21, 37, 99, 89,182, 65,111, 7,231,169,240,215,243,226,
- 26, 41, 31, 31, 31, 47,227,136, 18, 0,226,226,226,100, 94,218,110,204,168, 81,163, 90,148,148,148, 96,223,190,125,184,235,174,
-187, 32, 20, 10,157,202, 98, 84, 84, 20,223,233, 8,214, 33,143,116,239, 53,104, 97,230,174,112,252,182,125, 49, 70,198,247, 70,
-168,132, 65,104,136, 13,193, 65, 38,220,247,208, 20, 22,128,182,190,174,234, 77,185,228,238,143,207,116, 64, 0,183, 15,140,167,
-135,168, 84, 42,155,207,157, 59, 23,115,231,206, 5, 0,243,219,105,111,195, 82,102, 69,112,176,196,175,100, 36, 73, 73,246,240,
-225,144,241,103, 64, 5, 12, 94,251,198,224,180,254,249, 34, 36, 42, 74,102,109, 22, 2, 29,181,225,132, 94,135, 99,149,229, 56,
- 94,117, 29,199,171,180, 56,161,215,226,140, 65,135,114, 83, 45,106,172, 86, 92, 50,232,157,191,233, 9,147,198, 17, 44, 91, 36,
-192,178, 69, 2, 80, 8, 64, 9,131,212,105, 4, 79, 78, 19, 99,214,212,214,232,222,189, 45, 88,136, 0,248,118,203,156,171, 63,
- 41, 41, 73, 86,127,159, 15,109, 38, 43,188,104, 87,228, 11,222,183, 7,209,237,124, 49,204,238,190,161, 58, 8,168, 30, 38,198,
- 30,209,172,213,106, 67,146,146,146,124, 42,138, 30, 27, 27, 11,149, 74,133,117, 53,122, 24,205, 12,158, 88,255, 31,148, 73,130,
- 97, 52,223,190, 50, 17, 19, 7,188, 33,203,213, 46,193,186,255,222, 48,241,191,121,211,130,184,136, 87,111, 40,148, 15,124, 42,
-203, 80,102,240,202, 45,177,252, 85, 32,121,254, 88,132,231,169, 32,251,247,104, 48, 19, 0,141, 70,227, 87, 31,238,210,165,110,
-244,248,152, 49, 64,120, 56, 16, 29, 13, 12, 27,208, 28, 18,177, 0, 2,230,134, 88, 73,112,176,215, 1,153, 97, 24,231, 92,255,
-217,179,103, 17, 19, 19, 83,231,239,173,183,222,194, 91,111,189,133, 75,151,248,123,101,220,205,215,187, 34, 45,205,119, 11, 44,
- 51, 51, 83,182,124,249,114,183,132,205,215,250,119,113, 61,223, 20,167,192,109,179, 44,191, 20,246,102, 66,192, 26, 76, 16,181,
-235, 2,197, 59,239, 32, 57, 52, 28,225,154, 92,231,241, 89,255, 72,198, 27, 31,252, 7,133,203,190,198,235,253,199, 96, 74, 68,
- 55,236,222,188, 25, 69, 69, 69,110,223,191,135,211, 20,232,219,175,159,140, 11,106,228, 20, 50,215,233, 25,119,251, 60, 88, 95,
- 52, 45, 45,141,114,129,125,220,124,191, 43,201, 39, 39, 39,107,226,226,226,100,156,235, 63, 57, 57, 89,227,165,221,114, 68, 34,
-209, 93, 15, 63,252,240,217,202,202, 74,232,116, 58, 4, 7, 7,163,117,235,214, 8, 15, 15, 71,120,120,184,183,198, 99,235,201,
-179, 5, 5, 5, 25, 30, 77,251, 72,182,250,167, 33, 56,127,161, 10,109,195, 4,136,239, 73,112,119, 55,138,208, 22, 45, 42, 0,
-216, 60,240, 70,160,222,192,159,212,250, 7,188, 47, 3,172, 81, 42,149, 65, 0, 66, 21, 10,133, 83, 11,236, 56,186,131, 95,154,
-175, 82,169, 36,114,185, 28, 42,149,138,138,103,101,213,113, 69,242,205, 3,208,242,193,177,154,242,172,237, 48, 88, 77,168,210,
- 27,112,214, 98,129,136,181, 59,234, 43, 45,181, 96, 41, 5, 5,176,253,234, 57,232,173, 22, 0,224, 49, 48, 17,204, 95, 82,183,
-143,219,167, 2, 88,216, 96,194,239,103,170,177,106, 67,149, 79,247,235, 74,244,114,185, 92, 83,223, 11,224,170, 20,120,130, 92,
- 46,215,100, 41,166, 64, 52,246, 51, 0,209, 40, 47,191, 17,156, 39,102, 47,195,204,180,199,211,253, 79,227,242,101,251, 64,172,
- 84, 42,247,240,145,155,246, 77,102, 29,197, 43, 43, 43, 11,220,164,196,250,163, 7,125, 90,149,209,212,120,224,169,246,154, 45,
- 10,138, 3,170,227, 0,128,225,125,237,153,241,254, 53,111, 49, 14, 30,239,139, 15, 54, 78,135,114,235, 83,106,229, 68,126, 4,
-254,196,124, 57, 34, 35, 85,174,134, 44,180, 90, 57, 40,205,114,184, 42, 41,178,178,146,120,201,154,252,200,163,100,247,206, 93,
- 20,176,187,254,101, 50,130,235, 23,194,160,215, 73, 96,172, 18, 99,253, 26,130,185,115, 41,138,203,170, 49, 44, 62, 14,211,167,
- 78,227,101, 21,219,108, 54,231,124,191, 74,101,191, 86, 87,194, 47, 43, 43, 67, 89, 89,153,207,238,125,133, 66, 65, 25,134,185,
-137, 84, 51, 50,148,196,143, 36, 64, 26, 74,105,157, 88, 0, 23,143, 0,111, 87,184,171,107,191,126,244,190, 55,183,127,125, 37,
-199, 90, 93, 13, 81,171, 72, 8, 66,154,161,239,163,147,241,214,184, 4,188,194, 45,219, 27, 52, 24, 54, 99, 45, 68, 45,219,162,
-127,156, 20, 93, 59,118,195, 71,191,231,162, 95,191,126,178,159,126,250,233, 38, 37, 32, 77,161, 0, 64,212, 0,240, 84, 90,154,
-115,233,160,181, 30,217, 11,133, 2,128,222, 88,168, 72, 0, 12,112, 51,200, 14, 28, 56,144, 80, 74,157, 46,254,252,252,124,167,
-139,223,245, 60,199,182, 87,242,119, 24,236,175,134,135,135,247,141,139,139,235,126,242,228, 73, 28, 57,114, 4, 54,155, 13,161,
-161,161, 48, 24, 12,101,145,145,145,231,125, 49,250, 8, 33, 76,219,182,109,119, 63,244,208, 67,109,243,246,231, 99, 69,214,110,
-180, 32, 98,244,108,107,194,153,235,161,184,183,167,229, 28, 0, 11,167,160, 57, 20, 74,155,167,103,226, 58,214, 5,166, 0,238,
-108,240,153, 47, 54, 3, 48,187, 18,245,197,156, 75,192,116,223,201,223,149,108,220, 13, 90,124,149,128, 42,173, 78,102, 9,145,
-168, 43, 25, 22, 87,106,107, 0,139, 5, 54, 74, 65, 0,252, 94, 83,129, 82, 67, 21, 40,165, 92, 18, 27, 30, 3, 19, 69,234, 52,
-130,204,245, 55,250,228,201,179, 64,175,238, 86, 8,160,111, 20,249,187,118,118,127, 93, 94, 73, 73, 73,178,172,172,167,212, 64,
- 1,180, 90,173,185,164,164, 68,184, 52, 1,204,194,221,163, 48,175,223, 65,167, 21,198, 87,169,112,231,117,169,191,205,145, 16,
- 95,107, 14,139, 9,134,100, 22, 81,192,253,114, 63,103, 38, 64, 21, 40,159, 32,197,180,137,159,201,148, 91,158, 86,231,110,164,
-136,143, 60,142, 17,242,190,216,191,251, 56,242,116,239,128,128, 64, 49,241, 83,222,247, 26, 25,169, 2, 33, 4,147, 38, 77,194,
-231,159, 87,129, 51,138,237,255, 83, 71, 27,103,213, 25,144, 60, 76,193, 98,244, 24,153, 44,103,175, 90, 61,102, 12, 96,190,210,
- 9, 23, 42,130,192, 58,102, 91,219,235,219,226,197,212,106,236,206,235,137,230, 29,123,242,186, 70,142,248, 47, 94,188, 8, 0,
-184,114,229,138,211, 51,112,245,234, 85,231,192,234, 15,148, 74, 37,225, 18, 1,213,159,195,205, 80, 42, 9,159,124, 0,174,248,
-252,243,207,235,196, 2, 44, 95,190,220,103,235,191, 62, 97,248, 11,137, 68,130, 43,197,231,209,173,123, 15,176, 86, 19,136,213,
- 6, 97,243, 22,104, 62,120, 8,154, 13,186, 7,172,222, 10,155,193, 4,106,181, 1, 54, 22, 11, 87,126,128,169,211,167, 66, 34,
-145,184,149,103, 93, 31,193,235,119,221,157, 23,251,158,251,115,227,227,227,101,121,121,121,106,110, 12, 24, 49, 98,132,219,182,
-226, 65,254, 32,132,176, 0,118,244,236,217,115,208,199, 31,127,108,190,118,237, 90,109, 66, 66,194, 67, 5, 5, 5,175, 27, 12,
-134,242, 86,173, 90, 41,250,244,233,163,245,161,237, 69, 0, 58,199, 13, 27,214, 58,109, 86, 26,206, 93, 60,167,125,124, 86,218,
-200, 67,187,215,164, 95,174,214, 14, 31, 50, 58,129,109,219, 49,230, 17, 55, 94, 3,214,211, 88,224,202, 21, 13, 37,255, 9, 36,
- 2,250,243, 40, 0, 13, 90, 23,254,144, 63, 71, 54, 92, 78, 0,127,148,128,110,138, 25, 26, 0,164, 84,185,154, 34, 88, 2, 29,
-181,194,108,181,130,165, 44, 90,134,133,225,162,190,146, 95, 6, 59, 7,220, 45,239,187, 17, 3,224, 91, 38, 54,119, 46,254,198,
-166,235,117,124,119,226,144, 33, 67,182, 44, 92,184, 80, 28, 25, 25,201, 94,190,124, 25,243,250, 93,174, 67,254,190,252,134,187,
-246,247, 27,142, 44,127,245,147, 60,185, 59,135, 47, 6, 61, 32,208,100, 60,144, 65, 54,127,114, 73,186,237,232,155,234,220,141,
- 0, 1,193,196, 1,111,200, 30,120,138,127, 2, 32,174, 47,217, 9,190,202, 49, 72, 1,238,120,103,117,186,221,121, 18,218, 57,
-131, 0, 13, 23,215,152, 62,117,154,102,250,212,105,164, 92,247,177,212, 86, 93,173, 38, 2,192, 80, 27, 12, 82,109,133,144, 17,
-194,192, 72,100,227,166,204,134,144, 18,175,215,153,144,144, 64,238,186,235, 46,122,171,222, 63,187,181,159, 65,210,210,210,168,
-107, 68,187,171, 39,192, 71,113, 26,206,242,119, 81, 40, 52,183, 99,240, 26, 51,102, 12,158,222,152,137,183,170, 43, 48,112,244,
-189, 96,218, 70,216,175,201, 66,237,169,123, 33, 2, 17, 8, 65,196, 2,124,158,177, 12, 45,198, 14, 65,247,238,221,255,208,212,
-189,156,117,159,155,155,171, 30, 54,108,152,108,230,204,153,141,250,237,179,103,207,202,247,236,217, 83, 44, 16, 8, 54,143, 28,
- 57,242,109,134, 97,174,197,197,197,229, 56, 45, 25, 23,143, 18, 33, 4,238,158,185,139, 39, 64,117,228,200,145,161, 95,173, 94,
-195,136, 5, 65, 23, 38, 63, 54,121, 0,195, 48,186,123,239,159, 61, 1, 64,152,131,248,171, 1, 80,171,213,234,148, 87, 79,105,
- 11,148,148,191, 3,193,199,253,239,151, 2,208, 20, 10,131, 39,242,241,101,128,147, 10,122,251,182, 0, 0, 32, 0, 73, 68, 65,
- 84, 41,146,137,106,183, 74,202,158, 42, 84,235, 77,102, 88,109, 54,116, 31, 58, 24, 49,214, 97, 62,145, 97, 83, 6,163,112, 73,
-127, 0,168, 57, 79,135,203, 84, 0,105,132,220,173,114,185, 92,168, 82,169,230, 47, 93,186,244,223, 46,202,197, 24,165, 82,233,
- 83, 34, 18,135,167,160,201,146,151, 76,249, 61,201,209,142, 13,223,223, 20,149,202, 47, 77,255,193,103, 58,104, 30, 68,227,159,
-143,157,220, 9,158,152, 63,198,153,167,156, 27,199, 86,167,239, 65,104,231, 12, 18,218, 57,201, 39,153,225, 45,158,213, 28, 40,
- 6, 97,153, 11, 82,163,193, 94, 7, 32, 84, 34,215,132, 69,193,167, 21,163, 46,253, 79,228,208, 56,155,124, 94,149, 83, 2,154,
- 66,150, 35, 22, 64,205,125,110,172, 60,127, 87,150,117,239,222, 29,237,158,123, 78,182, 98,215, 46,117,209,219,223, 33, 73,212,
- 18,225,142,226, 61, 70,131, 21,115, 23,188, 12, 65, 72, 36,182,175, 81,226,215, 86, 4,227, 26,145,183,223,102,179,194,215, 24,
-160,250, 74, 0, 31, 43,223, 75, 59,145,211,167, 79, 95,163,148,166,247,234,213,235,203,242,242,114,189, 80, 40,132,213,106,165,
- 45, 91,182,116,122, 84,244,122, 61,196, 98,177,211,139,228, 65,222,168,252,252,124,176, 86,130,225, 35, 6,188,113,241,226, 69,
-157, 86,171, 69,100,100, 36,219,177, 99, 71, 29,247,108, 42, 43, 43, 33,145, 72, 64, 8, 65, 80, 80, 16, 47,163,143, 83, 18,234,
-127,174,239, 21, 13,224, 79,230, 1,184, 85, 74,129,223,196,152, 32,215, 32, 65,126, 71, 69,147, 58,148, 0,114, 11,230,209,109,
-114,185,252,255,228,114,249,255, 53,197,245, 53,225,253,146,166, 56,231, 86,194,110,213, 3,142, 20,251,245,142, 37, 53, 74, 54,
-195,118,210,132, 74, 58, 53,197,101, 90,110,101, 27, 52, 97,209, 21,141, 47,115,245, 94,148, 9,191,229, 80, 74, 73, 72, 72, 8,
- 38, 77,154, 4, 71,249, 94,148,184,148,239, 61,176,103,183,179,124,239,216,184,177,112, 40,189, 13,254,222,231,186,247,200,147,
- 17, 47,223, 76, 76, 60,171, 9,242, 80, 2, 26,141,123,238,185,199,100,181, 90,115, 0,232, 89,150,165,102,179,125,225,207,181,
-107,215, 0, 0,205,154,217,151,246,114,251, 69, 34,145,199,246,123,224,129, 7, 56, 25,187, 88,150, 69,120,120, 56, 88,150,117,
-174, 56,113,172, 98, 33,181,181,181, 20, 0,196, 98, 49, 8, 33,204, 31, 49,182, 7,224, 63,248,164,146, 6, 0, 50,112,224,192,
-128, 38, 22, 64, 0, 1, 4,240,231,129, 21, 64, 45, 0, 73, 19, 27,113,222, 10, 6,241,174, 40, 24,192,159, 3,129,135, 25, 64,
- 0, 1, 4,240,231,130, 16, 64, 51, 30,228,111,128, 61,136,187,169,248,128, 69, 96,217,223, 95,174, 35, 5, 16, 64, 0, 1, 4,
-240,215, 67, 72,128, 47, 2, 8,120, 0, 2, 8, 32,128, 0, 2, 8, 32,128,128, 2, 16, 64, 0, 1, 4, 16, 64, 0,127,119,212,
-113,233,204,153, 51,199,239, 8, 78,119,197,123,238,116,121,209,131,131, 16, 28,116, 5, 34,113, 5, 88,214,190, 44, 76, 32, 96,
-192, 16,129,253,127,134,128, 16, 6,148, 8,237,107, 96, 97,197,150,109, 34, 80, 74, 17,201,180,132,143,215, 23, 4,160, 21,236,
- 1, 60,213,176, 47,247,178,192, 49,167,246,103,108,191,128,188,128,188,128,188,128,188,128,188, 59, 83,158,207, 10,192,223, 13,
- 63,238, 63,131,161, 67, 44,136, 8, 7,180, 58,130,159,127,149, 64,200, 8,113,255,120, 27,118,171, 91,131, 16, 6,132, 97, 32,
-105, 14,140, 25, 90, 1, 64,136,123,227, 41,242, 11,132,118, 26,231, 1,245,193,253, 20, 0, 68,212,130, 97, 35,199, 20,159,254,
-237, 39, 83, 89, 85,109,140,205, 80, 11,185, 92, 30, 14,160, 50,160,135,254,185,145,253,205,127,165, 61,186,119, 83, 95,187, 86,
-219,168,132, 79,127, 34, 72, 83, 83, 83, 93,243, 0, 52,234,158, 83, 83, 83,253, 78, 7, 28, 64, 0, 1, 52,145, 7,128,195,154,
-175,190,224,173, 77, 60, 49,115,150,215,151,181,169,229, 53, 37,242, 11, 68, 72, 76,176,225,215,223,130, 33, 22, 9, 33, 20, 8,
- 33, 18, 81, 4, 9, 44,128,176, 57,132, 48, 98,104, 95, 43, 36,226, 32, 80, 0,237,219, 2, 15,222,207, 98,207,102,126,228,127,
-230,247,211,184,171, 79,119,116,136, 10,199,197,226,147, 93,194,218,117, 67,171, 14, 54,252,240,253,247, 80,169, 84, 21,183,123,
-125,188, 74,165,186, 63, 43, 43,107, 27,183,157,148,148,244,128, 92, 46,223, 22,120, 53,188,227,183, 95, 85,212, 90,123, 92, 54,
-237,193,238,106,150, 45, 71,101, 7,163,250,228,177,141,168, 49,181,199,144,216,145,127, 89, 18, 75, 77, 77, 85,207,155, 55, 15,
-132, 16, 94,101,123,249,128, 75, 22,211, 4,229,230, 3,104,164, 2,230, 17,148, 34,243,243,207, 27,124,222, 92,130, 31,215,108,
-129, 92, 13, 1,151, 90, 2,206,231,236, 90, 25, 49,128,166, 5,151, 13,144,131,187,220, 0,119,148, 7,128,193, 31,219, 15,238,
- 31,103, 1,133, 0, 66,129, 8,195,135, 17,180,105,205, 64, 40,100, 16, 36, 18,160, 87, 12,131,226, 11, 86, 12,141,101,208, 50,
- 82,130, 31,246,182, 0, 0, 8,168, 17,246, 84,216, 54,175,228,255, 91, 65, 1,186,118,232,136,223,114,243,112,200,108,129,238,
-186, 14,226,160,230,232, 61,104, 4, 6,140, 24, 7,245,150, 44, 0,252,114,227,223, 2,226, 31,147,149,149,181,103,225,194,133,
- 40, 40, 40,224, 58, 76, 5,128,231,102,207,158,189, 53, 41, 41, 73, 46,151,203,247,252,229, 94,138,159, 85, 52, 72,168,133,144,
- 49,163,182,214,134, 74,125, 48,238, 29, 53,197,167,246,223,152,253,149,180, 69,176, 22,255,152, 58, 24, 93,187, 60,168,110,209,
- 34, 12, 22,171, 21,215,174, 93, 71,219,146, 11, 40, 60, 91,132,131, 7,180,116,248,136,135,252,122,174,153,153,153,212,101,112,
-190,211, 6, 71, 41,112,163, 28,174,163, 58,160, 20,183, 41, 29,240, 31,248,190,208, 77,155, 54,221, 92, 79,225,182,145, 23,149,
- 18, 16,208, 38,104,119, 90,242, 13,200,161,217,174, 28,239,200,146,233,168,134,228,130,217, 25,122, 12,157,250,177, 71, 69,238,
-135, 31,126,112,110, 39, 38, 38, 98,199,142, 29, 30,183, 3,184,245,228,239,186,207, 85, 17,240,168, 0, 28,216,127, 8, 35,238,
- 29,246,135, 93, 52,235, 67,254, 84,215, 84,146,254,102,159, 98,132, 2,232,180, 66,180,107, 35, 66,187, 54, 98,212,212,136, 32,
- 17, 9, 97, 19, 6, 97,112,127,130,129,119, 11,192, 16,145, 61, 5,166, 72, 12, 17, 99, 2,145,136, 97, 53, 0, 86,232, 61,146,
-255,254,189,123,208,173,125,107, 28,251,245, 24, 22,189,253, 70,157,235, 91,242,230,187,148, 17, 16, 12,142, 29,140, 31,118,236,
-241,169,242, 30,203,178,210,130,130, 2,245,153, 51,103, 16, 28, 28,140,224,224, 96, 89, 98, 98,162,198,199,193, 76,150,149,149,
-181,135, 35,126,151,206, 17, 14, 96,220,127,254,243,159,235,179,103,207, 86, 1, 72,144,203,229,170, 59,177,131,175, 90,181, 74,
-154,146,146,194,251,190,191,222,176, 70,218, 47,166,185,186, 75,251, 90,132,181, 8, 2,195,132,192,104,180,162, 92,107, 68,142,
-106, 5,149,180, 24,140, 97, 67, 71,241,234, 71, 34, 92,193,164, 7,238, 86,247,237,219, 27,151,175,232,112,248,231, 35,168,169,
-209, 35, 44,172, 57,162,163,187,128, 17,136, 96,179,149,224,231, 95,246,211, 65, 3,239,253, 75, 89, 55,169,169,169,234,231,159,
-127,222,185, 61,111,222, 60, 44, 95,190, 92,253,185, 7,171,208, 39, 50,186, 67, 61, 0, 14, 37,157,102,103,103,195, 93, 97,165,
- 63, 18,174, 86,182, 82,153, 33,163,180,113, 74, 0,211,229, 81, 39,121,231,191,215,204,173, 25,214, 46,156, 65, 84, 36,243,167,
-125,126,127, 87,184,146,189, 59,165,192,171, 7,224,192,254, 67, 0,208,104, 69, 96,255,115,133, 30,143,223,251, 81, 15,191, 7,
- 11, 66,136, 95,213,246, 84,154, 54, 16, 9, 69,232,212,161, 6,213,213, 34, 28, 62,214, 9, 2,129, 0, 2, 34,128, 88,100, 69,
-223, 30, 6,244,236, 33, 0, 1, 3,177, 40, 8, 98, 1, 65,236,221,102, 68, 70,176, 88,247,165,103,217,189,187,181, 69,241,217,
-178,155,200, 31, 0, 22, 45,126,133,188,251,246,191,105,251,248,187, 17, 17,222,156,247,245, 26,141, 70,233,242,229,203,213,197,
-197,197,117,244, 13,147,201,132,135, 30,226,111,109,102,101,101,237,117, 37,127, 55,104,149,158,158, 94,241,194, 11, 47,236,190,
-221, 83, 20, 13,145,255,161, 67,135,212, 41, 41, 41,188,175, 45, 38, 58, 82, 29,213,182, 10,173, 90,134,162, 99, 84, 59,132,132,
-134,160,184,184, 20, 54, 27,139,168, 14,205,113,252,247, 92,172, 62, 85, 40, 77,126,124,150,199,193,244,232,209,253,244,145,137,
-189,209,185,115, 71,156,248,189, 24,135, 15,255,142,107,215,171, 65, 41, 16, 17, 17, 12,131,161, 6,131, 6,245, 69, 69, 69, 37,
- 74, 15,255,140,175,254,119, 90, 58,243, 31,252, 21,149, 59, 28, 82,192, 94,124,138,195,135, 31,126,200,109,251,228, 5, 72, 77,
- 77,165,174, 46, 97, 87, 11,210,213, 37,221, 20,211, 11,111,191,253, 54,237,212,169, 83,163,115,241,203,229,114, 66, 8,161, 27,
- 55,110,244,152, 99,159, 67, 90, 90, 26,117,231, 33, 88,189,122,181,148, 43, 14,228, 78,137, 85, 40, 20,180,161, 84,174,174,245,
- 28, 40,165, 80, 40,210,212,141,241, 66,212,151, 55,244,229, 26,252,244, 94,179, 58,196, 31,192,159,211,250,175,223,135, 26, 53,
- 5,208, 88, 69,224,222,143,122, 52,168, 4,248, 67,254, 28,114,114,114, 80, 90, 90, 10, 0,136,138,138,162,190, 40, 1, 2,106,
-132,144,216, 32, 22,137,240,243,177,214, 16, 8,133,104, 46,210,219,227, 0,154, 49, 40, 45,109,142,187,251,178, 32,132, 32,233,
- 65, 43, 40,203, 0, 36,200,238,120, 67,117,131,114, 13, 21, 23,112, 69, 91,131, 23, 94,127,189,193,107,169,168,212, 66,119,237,
-138, 67, 22,111,226,174, 79,254, 0,128,237,219,183,195,102,179, 73, 31,121,228, 17,175, 3,156, 74,165, 26, 83,191,244, 47,215,
- 97, 42, 43,235,196, 35,134, 47, 94,188, 24, 42,149,106,236,157, 52, 21,192,145,191, 47,223,249,122,195, 26,233,221, 49, 38, 4,
- 7,135, 67, 18, 36, 70,183,110, 93,209,169,107, 87, 84, 85,105,160,213,214, 64, 44, 22, 32, 50, 66, 2, 97,112,184,199, 92,241,
- 0, 32,164,165,104,222,172, 37, 12, 70, 43,142, 29, 43,196,165, 43,149,184,124,165, 6, 70,147, 4,157,163,172,144, 4, 9, 80,
-120,186, 8,119,117,239,142, 75,151,171, 96,180,182,240, 42,211, 65,116,212,219,126, 95,167, 3, 26,146,233,143, 44,206,250,159,
- 55,111,222, 77,251,159,127,254,121,191, 98, 1,220,145,104,253,185,227,166,242, 42,228,230,230,170,209,200,130, 60,123,246,236,
-161, 89, 89, 89, 72, 74, 74,130,187,233, 0, 62,158, 42,142,252, 1, 32, 63, 63, 95,205, 48, 76,157,107, 90,189,122,181,148,143,
-209, 19, 31, 31, 47,227,228, 52,133,199,101,227,243,161,152,178, 92,239,150,248,163, 34, 25,199, 40,197,239,241, 38, 38, 38,214,
-241,146,220,119,223,125,117,218, 42,224,246,191,115,224,115, 12, 64, 83,121, 4,154, 18,133,133,118,197,162,180,180,212, 39, 37,
- 64, 40, 20, 66, 36, 16, 65, 36, 34, 24, 53, 2, 48,232, 77, 56,119, 86, 12,145, 80, 4,161, 77,136,184, 97, 20, 98,145, 8, 2,
- 1, 3, 80, 2,173, 14,248,233,136, 16, 44,203, 2,184,214,160,220, 35, 63,159, 69, 77, 77,195, 25, 56,223, 95,188,152, 6, 5,
- 73, 96, 52, 86,194,198, 90,121,223,231,145, 35, 71, 26, 86, 58, 12, 6, 94, 68, 83,223,245,239, 78, 51,220,178,101,139,235,249,
-170,219,225, 5,112,231,226,119, 37,255,248,248,120,222, 85,232, 58, 70,181, 85, 51,204, 5, 88,109, 44,204, 22, 43,174, 93,215,
- 66, 36,150,192,100,178,192, 98,181,193,106,101, 97,181, 81, 84,232,174,123,149, 37, 22,233, 33, 9,238,136,242,242, 74, 84, 85,
- 27,160,213, 25,209,162,229, 0, 12,191,251,110,228, 31,216,129, 14,102, 43, 42,171, 42,209,179,103,119, 4,137,133,208, 87,107,
-255, 42, 99,133,148, 82,234,156,251,119,197,138, 21, 43,252,138, 5,152, 55,111, 94, 29,111, 66,253, 99,124, 21, 0,123,169,103,
-206,162,141,196,216,177, 99,235,244, 87,206, 64, 40, 41, 41, 81,171, 84, 42,191, 10, 83,169, 84, 42, 39,249,115,211, 1,155, 54,
-109,242, 74,174,245, 61, 85,185,185,185,106, 46,240, 77,161, 80,208,188,188, 60,117,114,114,178,243,120, 94, 94,158,154, 16,207,
-151, 23, 31, 31, 47,115, 45, 51,156,150,150, 70, 61,181,149,183,241, 48, 41, 41, 9,147,227, 85,216, 0, 96,234,114, 61,238,121,
-185,198, 99,219, 15,157,234,185,173,234,207,241,123,139, 9, 8,224,214,123, 3, 26,242, 0,252,161,254, 29,119,150,126, 99,172,
-255,122, 22, 43, 10, 11, 11,177, 98,197, 10,222,165, 38, 5, 2, 33,226,134,178, 16, 48, 66,252, 84, 32,193,169, 66, 9, 38,140,
- 7, 30,184, 15,152,152, 72,208,190,173, 24, 18,113, 16, 36,226, 32, 4, 75,130, 16,213, 62, 8, 18,177, 4, 18,177,231,146,152,
-175, 45,122,149, 44,125,239, 45,210,208, 64,210,189, 91, 23,132,133,135, 66,194,154, 81, 99,176,252,225,157, 98,255,254,253,123,
-246,239,223, 95,135,240, 93,255, 0,160,188,188, 28, 19, 39, 78,188,109, 86,126,126,126,190,218,213, 26,226,246, 1,192,176, 97,
-195,124,178,228,108, 54, 64,111,176, 64,175, 55,163,170,202,132,171, 87,117,184,116,233, 58,170,171, 77,168,169,177,160,166,198,
- 12,189,222,130,202, 10,239, 43, 50, 77, 38, 43,106,107,109,176, 88,204,104,222, 92,140, 78, 81, 45, 16, 18, 26, 10, 0,136,238,
-222, 21, 29, 59,180, 64, 88, 11, 9, 40,181,193, 98,101, 97, 50,233,255, 18, 3, 73,106,106,170,122,254,252,249, 30,201,156, 91,
- 26,200,211, 59, 33,115, 40, 13,110,177,124,249,114,124,254,249,231, 62,151, 26,182,187,197, 21,212,245,143, 35,212,210,210, 82,
-100,101,101,249, 92,138,118,207,158, 61, 52, 59, 59,219,149,252, 33,151,203,201,228,201,147, 61,126,111,206,156, 57, 32,132, 56,
-173,250, 85,171, 86, 73, 1, 32, 46, 46, 78,230,170,196,186, 30,167,148, 58,143,243,184,219, 58, 86,188, 59,197,193,155, 50, 1,
- 0,173, 90,181, 2,113,177, 30, 26, 43, 47,128, 59,143,252,221,109,251,229, 1,184,147, 44,255, 27, 3,188, 13, 2,129,192,231,
-239,141, 24,202,162, 77,235, 32, 84, 85, 9, 17, 36,180, 34, 72, 44,128,230,144, 24, 19,100, 34,136, 69, 34, 84, 85,137,112,160,
- 32, 20, 45, 36, 4, 12,195, 32, 81,110,198, 67, 19, 40, 24,134,226,157, 95,124,191, 78,149, 74, 69, 5, 33, 18,104, 69,173, 16,
- 98,185,136, 51,165, 20, 99,164,163,120,127,127,208,160, 65, 56,120,240,160,219, 99, 33, 33, 33,188, 7, 75,157, 78, 55,214, 49,
-240, 32, 57, 57,217,185,191,188,188,220,249, 57, 57, 57, 25,101,101,101,183,229,121,166,164,164,104,242,243,243,145,155,155,171,
-102, 89, 86,198, 48, 12, 56,203,191,161,121, 83, 79, 40,185,112, 73,214,186,133, 65, 29, 36, 22,192,108, 97, 81,107,186,136, 11,
- 23,203,161,213, 85, 65,171, 53,160, 92,107, 68,185,214,136,240,200,174, 94,101, 93,189, 78,113,229,234,117,244,238,221, 29, 21,
- 58, 29, 68, 66, 6, 85,213, 23,161,175, 96,209,231, 46, 61,218,182,110,141,144,144, 16, 4, 5, 5,227,242,149,106, 16, 65, 4,
- 95,130, 37, 46,228,216, 36,171, 0,154,122, 5, 65, 67,214, 58, 80, 39, 22,128, 47, 52, 0, 48,119,238,220,155,188, 10, 46,211,
- 12, 26,127,174,115,202,148, 41,117, 44,216,172,172, 44, 39,121, 61,250,232,163, 72, 72, 72, 32,124, 19,167,184,177,252,157,168,
-239,105,168,143,129, 3, 7, 18, 74,169,211,202,207,207,207, 87, 19, 66,156,165,129,147,147,147, 53,185,185,185,200,205,205, 85,
- 39, 39, 39,147, 67,135, 14, 57,143,175, 92,185,178, 65,185,185,185,185,106,134, 33,178,188, 60,251, 59, 49,103,206, 28,252,242,
-203,207, 50,142,194,243,242,242,212,220,253,243, 81, 38, 86,174, 92,137, 79,101, 17,152,186,194, 0,192, 62, 29,224,138,169, 43,
- 12,206,246, 76,145,137, 2,204,250,103, 81,218, 23,190, 95, 87,233, 94,250, 18,126,249,229, 23,254,171, 0,110, 5,241,187,198,
- 2, 52,198,250,175,107,201,215, 37,255,196,196, 68, 40, 20, 10,175, 83, 1,173, 90, 9,192, 16, 1, 90,183, 18,160, 71,119,138,
- 75,151,132, 96, 4, 4, 34,161, 16, 34,161, 8,191, 29, 13, 69,100,168, 8, 2,129, 0, 35,134,217, 16, 28, 28, 4,150,165, 0,
-181,249, 69,254,205,218,118,194,213, 26, 10,253, 25, 13,132, 68,128, 23, 23, 47, 34, 62, 14,108,178, 11, 23, 46,168, 47, 92,184,
-112,211,253, 78,154, 52,137,215, 96,153,148,148,148, 80, 94, 94,190,155, 35,121, 0,152, 56,113, 34, 86,175, 94,237, 60,167,170,
-170, 10,101,101,101,216,186,117, 43,146,146,146,198,220,142,206, 27, 23, 23, 39,203,205,205, 85,231,231,231,171,185, 96,177,184,
-184, 56,191,230,112,103,254, 35,229,255,217,251,242,240,166,170,252,253,247,220,236, 93,105, 75, 41, 75,217,165,130,108, 5, 42,
- 32,107, 2, 5, 20,176, 34,180,200, 38, 95,100,102, 26, 24, 87, 96, 20, 69,231,231,204,168, 40, 46,128, 35, 35,180,140,138, 11,
- 21,105, 21, 44, 88, 4, 10, 9,139,136,149,138,128, 44,178,148,181,133,174,105,211, 52,123,238,249,253,145,222,152,134,180,185,
- 73,195, 58,247,125,158, 60, 77,238,189,249, 52,247,220,115,206,251,217,206,231,104, 55,124,153, 9, 90,172,135,209,100,131, 78,
-102, 6,133, 14,102,179, 29,122,189, 5,101, 21, 70,148, 92, 53, 96,184,170,163, 79, 89, 38,107, 75, 20,157, 47, 71,151,206, 29,
-208,185,115, 60, 42, 43, 43, 16,213,194,129,110,221, 34,209, 42,182, 11,228, 10, 5,170,171, 13, 40,252,229, 20,174, 20,235,209,
- 58,190,231, 29, 59,129, 80,128, 18, 2, 21,199,165,238,164,218,212,186,125, 90,159, 44,120,189,249,136, 6,171,202, 50, 51, 51,
- 85, 43, 87,174,212,120, 42, 0,203,151, 47,231, 10, 12, 53, 41,143, 82, 74, 9, 33, 68,173,142,114,251, 77,244, 58, 98,206,206,
-118,134, 8, 82, 83, 83,121,185,255, 27,134, 20,118,121, 37,127,190,120,224,129, 7, 84, 7, 15, 30,212,112, 94,135,161, 67,135,
-170,188,157,231,146,241,124, 17, 54, 23, 91,255,225,135, 3, 26, 66, 8, 8, 33, 72, 76,236,171, 74, 76, 76,212,186, 41, 8,245,
-215, 2,190,198, 11, 39,143,153,170, 3, 39, 47,109, 84,167, 6, 15,106,234,138, 19, 46,121,124, 32,228, 0,220, 57,240,169, 0,
-220,142, 22, 63,135,105,211,166, 53,235,251, 12,195, 64, 36,114,190,122, 36, 48,232,215,219, 1,153, 84,238, 84, 0, 36, 18, 12,
- 25, 4,200,100,128, 68, 36, 67,203,150,114,136, 68,117,112, 56, 88,176,172,255,110,123, 99,213, 53,200,227,187,227,124,254, 23,
-136, 21, 51,120,252,229, 37,126, 79, 40, 10,133, 66,187,100,201, 18, 85,115,150, 1, 38, 39, 39,231,171,213,106, 60,245,212, 83,
-174, 99,156,165,175,215,235, 97, 52, 26, 49,119,238, 92, 0,192,135, 31,126,136,140,140, 12,205,173,120,182,115,230,204,209,178,
- 44,171,226, 44,255,129, 3, 7, 54, 43,129, 43,190,227,189, 56,116,112, 59, 90,181, 12, 65, 72,136,179,219, 91, 44, 14,232,107,
-173,168,210,153,208,190,115, 79, 12, 27, 50,210,231, 51, 25, 63,126, 10,217,177,237, 19,122,176,224, 56,134, 15,237,139,142, 29,
- 59,194,102, 53,163, 95, 98, 31,132, 70, 70,226, 98,209, 37, 20,151, 84,227,135, 31, 79, 66, 87, 27,137, 71, 31, 24,121,199,250,
- 76,231,207, 83, 3,128, 6, 32,152,175, 86,187, 8,156,245, 32,125,134, 33, 78,109,161,158,151, 9,128,190, 94,226,141,243,212,
-106, 10, 10,183, 76, 21,130,244,244,244, 6, 94,128,103,159,125, 22,132, 16,204,155,167,214,112,236, 15, 2,244,237,155,232,141,
-188, 92,238,120, 95, 36,199,151,252, 61,145,154,154,138,209,163, 71,171,154,211,143, 81, 31,171, 31, 52,104,144,106,246,236,217,
-218,198,206,187,197,246, 27, 5,151, 59,192, 41, 95,206, 48, 2,209,122, 42, 21,124,127,159,167,188,141, 11,194,156,141, 46,143,
-115, 93,179,113,193, 37,151, 66,176,253, 72,211,115,159,183, 58, 0, 66, 14,192, 29,170, 0, 12, 25, 58,240,134,196,124,130,101,
-249,187,119,164, 64, 80,165, 35,104, 19,199,184, 74,254,238,216,229,140,239,203,100,114,200,164, 50, 60,252, 16,129, 92, 38,133,
- 66, 78, 80, 85, 41, 66, 65, 97, 56, 28,172, 3,237,227,253,139,235,230,231,231,211,106,163, 9,186, 67,121,232,214, 94,130,223,
-138, 3,143, 11, 51, 12,163, 29, 56,112, 32, 25, 56,112, 96,192, 50,210,210,210, 84,171, 86,173,210,112,110,254,202,202,202,199,
- 6, 13, 26,100,216,185,115,231,119,143, 60,242,200,216,202,202, 74,242,248,227,143,111, 79, 75, 75, 83,221,202,206, 89,239,234,
- 87,185,189, 15,188,207, 57,201,157,158, 62,117, 2, 37, 69, 23,193, 48, 4, 14, 7,133, 92, 17,141,132, 30,189,240,232,164, 52,
-222, 29,189,164,156, 85, 85, 85,150,104,204,102, 59,122,247,234,130,118,109, 91,226,210,229, 82,232,142,157,195,239,167, 47, 97,
-215,238,163,184, 88, 76,241,231,191, 60, 29,208,224,185, 93,138,255,176, 95, 69, 5,124, 93,191,165, 60,229,157,251, 4, 43, 87,
-174,116, 41, 0, 43, 87,174, 4,138,214, 93,119,173, 55,121,141,120, 5,174,155,179,154, 91,172,135, 16,210,172,190,199,145,124,
- 99,228,238,235,188, 55,175,130,199,119,189,201,227,255,156, 47,126,141,156,149,179,157,115,195,168, 14, 13,200, 31, 0,210,198,
-223,239,124,163,251,213,167, 2, 32,212, 1,184,125,144,185,236,197,235,194, 0,126, 41, 0,183,115,194, 71,160,197,127,220,113,
-232, 23, 25,228, 82, 41, 30, 30, 79,192, 16,130,129, 73,118, 28,251, 77, 1,134, 56, 99,254,213,213, 12,218,182, 22,129, 33, 82,
- 28, 57, 38,133, 92, 6, 88,109, 86, 92,188,164,240,139,252,207,157, 62,140, 65,163, 39, 66,220,114, 16,206,157, 46,128,248, 90,
- 14, 94,120,254, 37,250,246, 59,111,222,146, 6,174,175, 87,175, 74, 74, 74,210, 44, 94,188, 24,189,122,245, 42,211,233,116, 72,
- 74, 74, 82,233,116, 58, 60,243,204, 51,154,180,180,180,219,162,174,125,115,137,223, 83, 9, 24, 54,100, 36,214,125,254,145,178,
- 77,235, 54,154,208,208, 80, 94, 86,255,117, 19,236,236, 63,105, 1,144,245, 95,100,208, 19,191,255,132, 54,113, 97,144,203, 37,
- 48, 24,172, 40,190,170, 7, 17,183,199,159,255, 50, 91,200,150,226,131, 95, 22, 1, 93,159, 64,131,229,133,133, 11,155, 67,214,
-205,254, 73,243,230, 69,187, 41, 18,193, 33, 52, 95,164,236, 15,105, 55,183,158,129,183, 54, 75,123, 64,230,188, 87,211, 85,231,
- 75,192, 29,139,196,196, 68, 87,194, 95,230,178, 23,175, 59,231, 83, 1, 8,118, 61,254,155, 93,223,223,175,206, 15, 2,157,142,
- 32,164, 53, 65, 76, 52, 65, 82,127, 27,228, 82, 17,100, 82, 27, 98,162,229,245,147, 0,193,224, 36, 7, 10,126,145, 56,189, 5,
- 60, 39,153,252,252,124,218,243,222, 8, 44,122,246, 95, 48, 73,227,241, 77,126, 49,186, 38, 56, 45,247,176,159,183, 98,209,223,
- 94,162,239,189,123,235,148,128,228,228,100,146,159,159,175, 92,182,108,153,198,221, 59, 16, 12,229,234,118, 70,125,177,159,102,
-223,227,204, 89,106,178,255,192, 30, 90, 94, 89, 14,211, 53, 35,228,242, 24,196,119,238, 19,144, 82,113,167,193, 89, 14, 59, 72,
-183, 89,180, 14,174, 21, 1, 69,159,222,242,123,243,149,220,119,183, 97,236,196,199,252,178,220,125,249, 30,133, 28,128,219, 75,
- 9,104,140,252,125,122, 0,254, 23, 64,225,204,234, 39, 12, 5, 5, 69,116, 11,138, 61,251,197,144, 75, 37,144, 73,197, 72, 25,
- 79, 65, 41,139,168, 24, 59,236, 14, 2,150,117,212, 79,126,190,209,167,147, 1, 19,166,164,193, 32,238,134, 86, 97,161,152,241,
-104, 52,178, 54, 29,115, 41, 1, 54,199, 55,183,252,254, 57, 69, 64, 24, 50,129,123, 21,238,214,123,203,212,189, 69,210,163, 94,
-188,158, 25,178,163, 3,149,135,244,168, 23,175, 63, 81,184,176, 89, 86,191,128,230, 33,245,201, 85, 65,235,195,119,187,241,112,
-167, 41, 1, 62, 13,224,196,196, 68, 33,104, 35, 64,128, 0, 1, 2, 4,252,143, 65, 40,244, 44, 64,128, 0, 1, 2, 4, 8, 10,
-128, 0, 1, 2, 4, 8, 16, 32, 64, 80, 0, 4, 8, 16, 32, 64,128, 0, 1,130, 2, 32, 64,128, 0, 1, 2, 4, 8,184, 59,208,
- 96, 21,192,252,249,243, 3,206,224,244, 86, 91, 59,216,242,102,206,157,231,243,123,117, 85,215, 92,239, 67,163, 91,187,222,175,
-255,120,205,117,215,198,170,254,236, 83,222,206, 21,127, 84,204, 27,179, 96,149,235,125,185,230,191, 8,228,247, 53,134, 64,127,
- 95, 99,240,246,251, 38, 61,174,246,249,189, 67,154,239,208,169, 83, 39, 92,184,112, 1, 73,170, 9,174,227,155, 63,207,184,225,
-237,247,231,171, 87,155,236, 47, 22,177, 88,185,168,184,216,181,100,113, 85, 92,156,235,250,255,182,105,115,195,251,159,167,188,
-220,220, 92,101, 94, 94, 94,131, 74,137,227,199,143, 87,165,164,164,104,111,197,248, 56,124,248,112,192,242,250,245,235,119,163,
-127, 31,153, 63,127, 62,110,231,249,229, 86,200,203,202,202,154,222,187,119,239,172, 99,199,142, 77,153, 49, 99,198, 55,205,149,
-231,190,209,145,123, 70,254,221,218,126,130,188,198,229,249,173, 0,120,194,110,183, 43,205,102, 51,136, 72, 2, 66, 8, 28,118,
- 27,164, 18, 49,100, 50,153,182,185,154,135,221,110, 87, 2,128, 88, 44,110,150,172,186,170,107, 8,141,110,237, 34,254,214,237,
- 59, 1, 0,174, 93,190, 16,144,188,157, 43,158,194,152, 5,171, 92,196,245,159,220, 2, 0,192,147, 41, 3,113, 55,226,144,230,
- 59, 36,169, 38,224,144,230, 59, 0,192,132,212,153, 0,128, 11, 23,110,125,251,253,187,180, 84,121, 26,208, 36, 0,170,211,128,
-115, 15,245,197, 47, 0, 0, 6, 46,123,251,150,182,155, 86,171,165,121,121,121, 48,155,205, 13,142,203,229,114, 77, 68, 68, 4,
-148, 74,229,109,185, 28,138, 16, 50,236,222,206,237, 62,165, 14,135,241,244,165,107, 47, 81, 74,183, 10,118, 80, 19, 74,167,197,
- 50,234,240,225,195, 17, 37, 37, 37,173,163,163,163, 91, 12, 24, 48,160, 56, 60, 60,252,243, 64,229,101,101,101,141,158, 49, 99,
-198,158,172,172,172, 63, 3,136,156,246,196,188,185, 0,216, 99,199,142,205, 6,176, 25, 0,235,143, 60,110,207, 19,142,248,155,
- 51,222, 60,119, 73, 12,214,146,190,198,148, 18, 1,183,153, 7,192, 29,250, 90,131,178, 77,194,253,154,145,189,187, 35, 68, 38,
- 1,165, 20, 14, 7,197,111,103, 46,226,252,209,125, 42,133, 76, 2,145, 72, 20, 16,121,135,201, 47, 40,123,118, 43,210,252,118,
-186,139,170,206,210, 41, 96,226, 7, 0, 69,100, 12,234,170,174,185,136,191, 41,143, 0, 31, 75,117,224,204, 23,177,115,197, 83,
-174,129,212,216,117, 77,173,177,244,252,159, 82,169, 20,128,179, 76, 38,203, 58,199,183,195,225,112,253,126, 70, 36,225,109, 69,
- 3, 64,155, 86,206, 82,157, 86,125, 53, 44,118, 59, 0,192, 96,119,202,235, 60,246, 79,184,167,103, 63, 94,196, 15, 0,125,135,
-140,198, 33,205,119, 46,226,111,236,186,155,217,126, 0,240, 84,105, 41, 5,128,113,161,161,216, 94, 87,167,225,136, 31, 0,126,
-223,177,243,186,235, 18,219,180,225,245, 59,107, 66, 43,148,133, 21, 63,163,248,210, 17,116,235, 56, 24,131,229, 74,191,251,112,
-110,110,238, 35,219,182,109,227,200,223, 14,192, 12, 32, 4, 0,107, 54,155,197, 10,133, 2,122,189, 94,233,205, 19,112,139,201,
- 63,238,254,196,222,219,182,127,185, 38,172,174,248, 36,134,165,205,207, 34,132,204,166,148,110,190,221, 38,166,252,252,124,218,
-156,250, 20,124, 54, 3,107, 10, 54,155, 77, 89, 80, 80,160, 57,126,252,184,235, 88, 69, 69, 5, 78,159, 62,141, 54,109,218,124,
-166, 84, 42, 85,225,225,225,124,159, 47,147,149,149,245, 79, 0, 15, 12, 27, 55, 73,145,149,149, 21, 55,237,137,121,225, 0, 28,
- 0,184,142,123,111,253,117, 35,248,222, 31, 55,222,212,106, 53,109,108,188,113,215,249, 26,111,106,181,154,238,253,177, 0, 34,
-145, 24, 14,135, 29, 53,181, 6,204,152,242, 8,125,247,221,119,155, 69,216,158, 74, 69,115,159,139, 0,223,240,182,237, 47, 7,
- 94,149, 0,235, 76, 86,229,232,148, 25,154,246,173, 34, 17, 34, 23,131,101, 89, 56, 88, 64, 44, 34,136,142,236,142,158,221, 58,
-104,242,183,127,167,114,216,234,148,254, 42, 1, 86,171, 85,217,163,231,121, 77,223,238,231, 33, 98, 28, 26,237,161,118, 42,169,
- 68,226,151,140,186,170,107, 80, 68,198, 32, 50, 34, 28, 0, 92,127,189, 93,215,186,125, 39,159,222,128,157, 43,158,194,192,153,
- 47,226,255, 30,155, 12, 0,174,191,222,174,251, 79,110,129, 95,218,181, 72, 36, 66,124,124, 60, 68, 34, 17,172, 86, 43,234,234,
-234,224,112, 56,160,211,233, 2,122,184, 97, 98, 17, 62, 94,185, 9,178, 72,160,244, 2,240,179,161, 24,229,215,206,226,243, 21,
- 47,249,101,245,247, 29, 50, 26,241,109,157, 33,146,120, 47,228,223,169, 83, 39, 87, 56, 0, 0,174, 92,185, 18,148,246,227, 83,
- 92,245,169,210, 82, 58, 46, 52, 20,175, 61,245, 36, 0,224, 53, 55,226,255,226,244,233,134,228,239, 71,181,214, 61, 23,190, 80,
-118,124, 66,172,121,177,195, 44, 88,216,100,200, 88,138,147, 21,187,240,201, 59, 27, 85,169,125, 50,248,246, 65,113, 94, 94,222,
-102,147,201,132,117,235,214,153,231,204,153, 35, 7, 16, 6,128, 93,183,110,157,117,206,156, 57, 98,147,201, 4,185, 92,174, 73,
- 73, 73,105,214, 68,247,205, 55,223, 40,119,236,216,161,105,110, 45,123, 87,223,145, 50,255,239,131,215, 94, 80,180, 56,241, 37,
- 20,191,239,198, 63, 70, 69,133, 63,179,165,252, 95,245,150,231,109, 69,254, 27, 55,110,132, 78, 55,134,102,103,167,249,125,239,
- 31,127,252,177,178, 57,100, 83, 87, 87,167,204,205,205,213,212,214,214,122, 61,127,245,234, 85,228,228,228,104,122,244,232,161,
- 26, 60,120,176,175,126, 67,178,178,178, 62, 31, 54,110,210,212,211,135, 15,136,227,219,182,182, 79,123, 98, 94,131,121,119,247,
-119,223,160,119,239,222,221,179,178,178, 30,234,221,187,119, 46, 0,236,223,191,191, 73, 82,229, 51,222,212,106, 53, 5, 33,128,
-143, 42,127,107,214,172,161,215,202, 42,112,248,183, 19,174, 99,102,179, 5,111,127,144,105, 80,207,153, 46, 16,246, 93,140,235,
-146, 0,107,107,107,149,195,198, 62,170,233,222, 33, 6, 50, 9, 3,150,101,113,237,218, 53, 28, 59,114, 24, 86, 59, 11,150,165,
-136,137, 12,193,216,135, 38,106, 76, 22,187,223,255, 80, 38, 41, 67,215, 14,215, 0, 17,193,125,221, 46, 67, 38, 46,245,219,242,
-119, 39,255,235, 44, 60,125, 45,174, 93,190, 0, 69,100, 76,163, 94,129,166,200,203, 19,159,126,245, 13,158, 76, 25,136,129, 51,
- 95,108,212,170,245, 6,169, 84, 10,145, 72,132,136,136, 8, 20, 21, 21, 65,167,211, 57, 21,169, 0,201,191, 77,171, 56,132,137,
- 69,120,244,233,215,241,208,140, 33,216,250, 91, 49,174,153,208,108,242,247,196,149,146,107, 56,126,232, 7,196, 70, 69, 56,201,
- 95, 44, 10, 74,251, 61, 56,229,255, 0, 0, 81, 98,137, 95,228, 15, 0,127, 95,245, 31,252,125,213,127, 92,228,191,189,174, 14,
-207,143,157,232, 60, 25, 43,229,117,223,159, 94,124, 75,249,151, 69, 15,104,158,232,248, 87, 72,152, 48,132, 34, 4, 12, 68,104,
- 23, 55, 20, 79,189,182, 80, 83,212,118, 5, 47, 53, 66,171,213,218, 0,224,211, 79, 63, 53, 2,144,115,219, 40,175, 91,183,142,
- 5, 16,226,190,173,178, 86,171, 13, 40, 46,103, 52, 26,149,254, 28,231, 97,249, 15,187,191,127,162, 49,251,155, 77,234,126,189,
- 18, 68,117, 39,118,225, 66, 89, 45,174, 86, 27,193, 82, 26, 80, 34,112,122,122, 58, 77, 75,203,166,235,215,175, 15,106, 33, 49,
- 55,242, 71,116,116,126, 64, 50, 10, 10, 10, 52, 25, 25, 25,132, 16,226, 82, 6,252,252, 13,215,145,255,161, 67,135, 48, 99,198,
- 12,119, 15, 1, 78,157, 58,165, 49, 26,141, 77,110,152,149,149,149,245,212,176,113,147, 38,190,177,100,129, 56, 59, 59, 27,255,
-253,224, 93,113,189,199,200, 69,254,217,217,217, 88,181,106, 21,122,247,238,157,235,107,188,121,146,127, 99,227,237,161,161,245,
- 94,192,240, 80,159,242,222,251, 96,181,139,252,203, 42, 42, 81, 86, 81,137,154, 90, 3, 36, 18,113,216,234,117, 95,154, 61,173,
-120, 1,119, 6, 18, 19, 19,175,123, 53,169, 0, 56, 28, 14, 26,211,169, 15, 58,181,110, 1,179,205, 1, 66,128,237,219,191,199,
-103,159,174,195,209, 35, 71,240,252,194,231, 32, 18, 49, 96, 29, 44, 34, 66,100,232,212,103,152,198,100, 50,241, 30, 96, 54,155,
- 77,217,179,219, 69, 77, 68,152, 17, 31,127, 90, 6,134, 80, 12,236,253,187,198,102,179,249, 53, 72,189,145, 63, 71,252,166,154,
-202, 6, 10, 66,141,190,214,167, 60,111,131,137, 27, 72, 5,235,223,106, 64,112,159,126,197,175,124,111,215,174, 93, 17, 19, 19,
- 3,189, 94, 15,169, 84, 10,134, 97, 96, 50,153,160,211,233, 32, 18,137,184,137,153,247, 61,127,189,121, 19,158, 91,185, 3,155,
- 62,120, 5,109, 90,197, 33, 36, 52, 26,151, 29,197,248,124,197, 75, 8,171,159, 52, 68, 60,229,121, 35,127,142,248,107, 74,206,
-161,123,124, 43,212, 26,205,144,133,200, 0,135,195,103, 62,128,175,246,123,105,237, 86, 28,255,229, 71,244,234,114, 31,106, 28,
-190,149, 70,142,252,127,223,177, 19,127, 95,245, 31,215,241,237,117,117,216, 94, 87,135, 34,245, 63,177,227,196, 81,244, 28,216,
- 5,168,244,189, 53,115,214,153,101,202,249,207,140,214,196,134,246,128,137,214, 2,150, 50, 72, 45, 85,176, 56,106, 97,102, 77,
- 96,165, 97,104, 55, 60, 9, 57,191, 46,245, 53,209,145, 13, 27, 54,192,108, 54, 67,173, 86,135,168,213,106,192, 25, 2,128, 90,
-173, 70,253,231,122, 11,202,140, 13, 27, 54,248, 61,104, 79,157, 58,165, 92,184,112,161,230,253,247,223,167,132, 16, 13, 0,236,
-219,183,143, 46, 93,186,148,190,242,202, 43, 1,109,205, 28, 46, 99,214,253,231,197, 39, 20,227,218, 89, 68, 7, 78, 93,195,214,
- 11, 12, 94,220, 86,106,249,167,214, 80, 83,103,195,255, 5, 34, 83,167, 27,115, 35, 45,127, 68, 71,231, 99,230,204,153,126,239,
- 70,233, 78,248,107,214,172, 33,220,118,210,124,113,224,192, 1,101,105, 41, 63,163,196,106,181,226,216,177, 99,187,155,234, 47,
- 0,148,241,109, 91, 75,211,210,210, 0, 0,133,133,133,216,253,221, 55,242, 43, 37,215, 88,142,252, 1, 32, 45, 45,205, 53,222,
-142, 29, 59,182,162, 57,227,237,237, 57, 19,241,219,185,203,104,221,165, 13, 80,103,228,125,239,101, 21,149,176,217,236,245,115,
-181, 29, 54,155, 29,151, 47, 94,144, 55,231,153,122,122, 15, 4,111,194,237,133, 6,174, 40,139,197,130,126,221,187,107, 66, 20,
- 18,176, 44,133,131, 5,126,216,183, 31,255,124,237,117,176, 20, 56,115,246, 44,142, 30,249, 21,189,122,245,133, 72, 68,112,111,
-151,120, 20,253, 98,135,130,231,230,120, 82,113, 25, 18, 58,149, 0, 98,130,203, 87,109,128,152,160, 79,247,139, 40, 56, 86, 6,
-138,118, 1,221,128,187,123,223,155,103,192, 84, 83,217, 96, 53,128, 47,184,187,247,189,105,218, 5,235,223,194,152, 5,171,188,
-102,177,187,195,110,183, 35, 36, 36, 4, 12,195, 32, 42, 42, 10, 70,163, 17,117,117,206,109,128, 99, 99, 99, 81, 89, 89,233,215,
- 6, 28,102, 29, 48, 80,161,192,243, 31,236,195,152,190,192,197,195,192,207,245,231,158,255, 96, 31,254,189, 64, 5, 7,235,240,
-187,253,142, 31,250,193,245,126,244,128,238, 16,135, 51,216,174, 61,129,126,221,219, 35, 34, 76,134, 79,115,242,145,164,154,128,
- 43, 94, 86, 1,248,106,191,220, 19, 20,184, 10,164,140, 38, 88,187,181, 8, 49, 81,157, 49,121, 40,225,213,126,156,187,127,123,
-221, 31, 91, 39,211,127,172, 0,218,213,128,252,229, 85,208,127,190, 6, 48, 38,144,130,165, 88, 21, 23, 71,254,219, 68, 32,160,
-235,148, 48, 77,199, 22, 3,160,119, 24, 96,209,157,197,231,151,178,176, 63, 69,135,251,254,172,194,216,167,195,160,136,186, 23,
-114,113, 20,196, 41, 53,248,249,155,159,233,253, 73,247, 55, 54, 73,185,254, 7,195, 48,160,148, 90,235,149,104, 51,195, 48, 70,
- 74,105, 52,156, 73, 92, 1, 47,175,237,222,189,187,118,236,216,177,170,202,202, 74,205,246,237,219,157,138,207,246,237,232,209,
-163, 7,186,119,239, 30,208,246,204,181, 22,246,153,185,127,255,247,150,119, 38,180,102,168,185, 6,127, 89,127,218,102,183,217,
- 86, 89, 28, 88, 74, 41,173, 10, 68,230,164, 73,214, 27, 78,254, 35, 70,140,208,250, 43,167,160,160,160, 65,200,132,243, 2,240,
-221, 85,210,225,112,248,165, 48,156, 63,127, 30,131, 6, 13,106,172,191,200, 1,220, 7, 64, 60,106,194,228,234,162,162,162, 22,
-133,102, 28,210,109, 0, 0, 32, 0, 73, 68, 65, 84,133,133,200,206,206,198,128,162, 34,166,176,176, 16, 0, 48, 96,192, 0, 60,
- 56, 50, 9, 17, 97, 50,172,250,100, 83,217,140, 25, 51,150,172, 94,189,122,129,191,227,237,234,230,183, 16,222, 83,142,176,110,
-207, 97,227, 91,127, 70,223, 94,173,113,239,196,215,145,145,145, 65,154,202, 18,175,209,215, 66, 46,151, 1, 0, 36, 18, 49,140,
- 70,115, 80,159,173, 64,250,183, 6,126,111, 6,196,178, 44, 66,100, 82, 88,237, 20, 12, 1, 24, 2,188,250,175,215,225, 96,129,
-186, 58, 3,174, 93,187,138,184,184,214,160,148,133,221, 14,200, 37, 98,136, 36,252, 92,176,118,187, 93,121, 95,215, 43,154,150,
- 81,122,128, 16,167,110, 76, 0, 66, 40,250,247, 60,163,249,233,104,156,202,223, 21, 1,156,117,223, 88, 72,128,143,245,239,169,
- 69, 55, 70,252,254, 88,255,128, 51, 97,168, 85,171, 86,144,201,100, 46,151, 33,151,248, 23, 25, 25, 9,137, 68,130,203,151, 47,
- 67,194, 83,222, 39,249,123,240,231,137, 35,193,153, 55,167,237, 78,247, 63, 0, 40, 19,128,136,215, 53, 88,240,183, 33,136,242,
-227,126,175,148, 56,147, 21, 59,180,138,134,206, 98,129, 56, 66, 4,115,185, 17, 96, 24,180,233, 24,143, 29,187,127, 14,168,253,
-254,111,209, 27, 56,255,195, 46,136,175, 1,213,113, 64, 8,195, 96,112,167,206, 24, 53, 50,142,151, 28,207, 88,255, 23,143,253,
- 25, 95, 91,126, 7,238, 49, 3, 63,137,129, 48, 49,240,240, 0,196, 63,204,207,120,237,218, 46, 26, 86,107, 21, 36,118, 27, 62,
-191,148,133, 31,231, 68, 98,196,163,143,160,123,171, 30,170,223,118,104, 53,253,210,234, 32,177,214,193,222,157, 69,121, 41,191,
-164,209,122,229,205, 60,103,206,156, 48, 0, 58, 74,169, 4, 0,230,204,153,211,236,218, 26,147, 39, 79,214,238,223,191, 95,117,
-242,228, 73, 77, 72, 72, 8, 66, 66, 66, 48,115,230,204,128, 38, 81, 66, 72,235,137, 19, 39,174,253,219,223,254,198, 60,191,224,
- 25,182, 23,123,150,177, 88,109,117, 86, 7,253,155, 63,114,210,211,211,169, 78, 55, 6,147, 38, 89, 49,115,230, 76, 18,232,239,
-185,145,228,239,205,221,191,102,205, 26,162, 86,171,233,220,185,115,121,253, 94,131,193,208,192,237,239,142,133, 11, 23, 98,225,
- 66,231,166, 69, 73, 73, 73,238,215,203, 26, 17,215, 22, 64,167,122,165, 48,228,193, 41,179,204, 93,186,116,145,103,103,103,131,
- 35,255,180,180, 52,196,181,105,227, 62,222,182,194, 45, 68,192,103,188,165, 63, 60, 2, 7, 75,202, 16,222, 55, 28,197,219,207,
- 1,114, 25,166, 60, 61, 27,209,241, 19,121,206,205, 14, 20, 95, 45,181, 75, 36, 98, 49,231, 1, 0,128,203, 23, 47, 52,235,185,
- 54, 22, 58, 16, 20,130, 91,167, 16,120, 42, 1,140, 55, 19,135, 82, 10,150, 2, 14,214,169, 4, 16, 2,124,243,117, 14, 30,157,
-156,138,150,177,173, 92, 19, 32,245, 99,175,108, 17, 83,134,158,247, 92,118,125,238,211, 43,196,229, 36,235,127, 95, 17, 68, 76,
-153,223, 55,228,233,238,247,118,222, 31,235,223,211,221,239,237,188,251, 90,246,166,160,215,235, 81, 91, 91, 11,139,197, 2,150,
-101, 81, 94, 94,238,114,255, 27,141, 70, 24, 12, 6,191, 66, 0,155, 62,120, 5,218,223,128,154, 11,128,205, 4,252,123,177,202,
-229,254,255,229, 48,240,235,213, 31, 32,242,179,253,106, 74,206, 33, 58, 50, 20, 49,209,161,184, 55,161, 7,138,206,151,227,116,
-113, 37, 58,196, 68,194, 82, 90,134,179,103,206, 54,168, 5,192,167,253,134, 40, 31,193, 48,213,116,108,218,178, 17,154,189, 27,
-145,181,124, 17,166, 44, 90,138,163, 54,160,188,178,140, 87,251,185,199,250,159, 24, 50, 8, 51,239,235,136,141,155,118,227,232,
-209, 11, 88,126,172, 16, 27,198,204, 6, 62, 58,128,226,226,242, 6,181, 0, 26, 67,188, 89, 6,135,181, 2, 86,107, 13, 0, 32,
-174, 93,123,116,239,209, 67,165, 87, 56,115, 49, 76,172, 17,140,165, 14,138, 58, 17, 74,175, 94,243, 69,168, 78,143,140,217, 12,
-179,217, 44, 7, 96, 5, 16,110, 54,155, 35, 60,151, 4, 6, 10,163,209,168,220,187,119,175,166, 71,143, 30,152, 53,107,150,170,
-162,162, 2,219,183,111,231, 61,216, 8, 33,195,100, 50,153, 33, 60, 60,220, 62,102,204,152,171,139, 23, 47,110,187,100,201,146,
-162,159, 15, 31, 29,191,225,184,229,148,141,133,223,251,177,222, 8,151,127, 48,201,223,211,250,231,114, 20,220,189, 0,124,100,
- 72, 36,127,168,228,203,151, 47,119,189,188,125, 6, 92, 43,124, 26,123, 54,210,250, 23, 3, 64, 92, 83,114,206,171, 59,157, 27,
-111,135,127, 57,124,126,198,140, 25,233,254,140,183,225,247,223,139,228,161, 9,120,227, 95,239,226,189,149,121,248,127, 95,236,
-198,188, 81, 73,184,246,109, 30,106,116,122,159,100,155,145,145, 65,210, 82, 30,132,205,102, 63,108,179,217,237,238, 10, 0, 0,
- 44,125,245,165,128, 9, 91, 32,250, 91, 11,111,177,127, 79,175, 64, 3, 5,128, 97, 24,212, 24,140, 16, 49, 4,118,187, 3, 44,
-165,176,179,206, 36,210, 35,191, 30,198,168,209,227,156,110, 50, 74, 33, 98, 68,168, 53, 90, 97,183, 90,124,107,152, 14,135,178,
-115,187,171,154,216,232, 26,151,150, 49,100, 96,152,115,216, 16, 2, 66, 40,250,245, 56,171,177, 59, 28, 74,190, 55,199, 89,247,
- 77, 37, 3, 6,100,189, 54,145, 92,227, 15,162,162,162, 80, 94, 94, 14,153, 76,134,218,218, 90,196,198,198,186,146, 2,205,102,
- 51,170,171,171,253, 82, 0,210,223,216,128,127, 47, 86, 33,178, 19,160,253, 13,120,102,153, 6, 97, 98, 17, 38, 63,251, 38,174,
-176,215,176,126,249, 11, 16, 49,252,229,113,214,255,128, 1, 9,136,237,210, 9,173, 98, 91, 66,202, 16,216, 9, 69,121,157, 9,
-186, 90,115, 64,237,247,222, 91,155, 49,169, 71,103, 68, 68,196, 32, 36,182, 45,108, 85, 58, 28,222,250, 37,170,171, 46, 5,212,
-137, 63,126,235, 41, 96, 65, 50,196,118, 43, 58,213, 1,101, 34, 61,254,125,245,103, 64, 26,193, 91,198, 47, 91, 14,170, 42, 24,
- 19, 46, 73,141, 72,186, 71,133,251,102,135,161, 40, 74,171,137,141, 61,172,105, 63,184, 8, 53, 76, 45, 44,212, 4,227, 23, 44,
-228, 97,225,124, 44,127,247, 9,158, 91, 5, 32, 13,214,192,253,254,251,239, 1, 0, 51,103,206, 84,117,239,222, 93,251,232,163,
-143,186, 44, 70, 62,228, 31, 27, 27,187,109,237,218,181,161, 25, 25, 25,162, 5, 11, 22,224,185,231,158,163, 7, 14, 28, 24, 76,
- 41,221,110,180,209, 30,148,210,159,252,183,230,162, 26,117,251, 7,154, 16, 24, 76,242,247, 36,120,119,133,101,205,154, 53,164,
-160,160,128,151,107,255,202,149, 43, 7,184,247, 89, 89, 89,174,151,231, 49, 14,209,209,209, 0,208,216, 36,120, 5, 64, 53, 0,
-230, 74,201, 53,252,248,227,143,174,152,255,128, 1, 3, 0, 0,217,217,217,248, 42, 55, 15,186, 90,179, 17,192, 82, 56,151, 6,
-242, 30,111,223,110,250, 7,198, 45,126, 26,227,199,143, 70, 75,153, 8,181,132, 98,251,233,203,248,241,183, 98,191,136,122,254,
-156,233,247, 23,157, 61, 43,190,124,241, 2,184,215,210, 87, 95,106,210,146, 23,112,123, 19,191,231, 49,111,104, 16, 2,144,201,
-100, 56,115,226,168,170, 83,219,104,141, 66, 34,134,195,193,130, 16, 2, 66,128,116,245,147,160,148,133,163,190, 30,128,209,108,
-198,201,211, 69,144, 74,125, 59,177,237,182, 42,244,187,239,188,251, 44,138,191, 46, 56,143,175,191,232,230,210,157,147,122,157,
-195,193, 35, 61, 32, 22,197,250,101,253,123, 35,126, 83, 77, 37, 0, 4,100,253,123, 27,104, 5,235,223, 2, 0,222,214, 63,224,
- 92,231,223,186,117,107, 88, 44, 22,148,150,150,194,225,112,160,101,203,150,168,172,172, 68,203,150, 45,235,219,149, 63, 97,151,
- 95, 59,139, 87, 94,215,160,230, 2,240,206,162,225, 48,216, 29, 88,184, 44, 27,239, 47, 78,195,162,229, 91, 33, 38, 4,126,240,
- 63,106, 74,206,161, 77,203, 22,144, 64, 2, 7, 8,174,158, 63,142,139,101, 53,232, 26, 27,141,111,127, 57,128,147, 39,224,183,
-245, 63,101,238, 66, 72,162, 1, 70, 4,172,203, 59,143,175, 63,124, 30,115,223,202,192,194,135,251,226,201,209, 29,253,106,191,
-237,117,117,120, 47,101, 42, 80, 45, 7,136, 4,120,239, 93,164,254,188, 15, 59, 70,207, 7,121,243,105,144,131, 47,240,178,254,
- 1,224,215,171, 49, 24,100,170,129, 65, 33,130, 81, 46, 71,215, 41, 18, 88,168, 9, 53,140, 4,118, 36,128, 58,140,176, 85, 92,
-197, 15, 31,212, 96,230,140,174,183,100,208, 22, 22, 22,210,122, 98, 32,147, 39, 79,214, 58,125, 99, 78, 12, 31, 62,156, 12, 31,
- 62,156, 15,249, 15,109,219,182,237,247,111,190,249,102,232,153, 51,103, 32,145, 72, 16, 17, 17,129,163, 71,143,218, 40,165,229,
-205,249,125, 77,173,201, 15,196, 59, 16, 76,242,247,180,254,157,196,122,253,242, 65, 62,185, 0,105,105,105,103,190,250,234,171,
- 33,118, 59,191, 21, 78,114,185,124,110, 19,167,107, 1,156, 7, 48,224,244,225, 3,112,143,249,255,117,238, 84,124,223,165, 11,
-184,112,192,182, 46, 93, 66,102,204,152,241,137, 63,227,237,177,228, 65,136,100,163, 96,132, 4, 95,175,120, 26, 31,110,253, 21,
-207, 63, 56, 12,115,150,103, 33,117,233,231,126, 89,224,238,197,132,188, 29, 19,214,239,223,157,104,224, 1, 16,137, 68,164,250,
-234, 89,156,187, 92, 9,177, 68, 4,187,131,133,205,238,192, 47,191, 20,226,179,207, 62,129,213, 65, 97,115,176,144,138, 25,148,
-233, 12, 40, 62,249,163, 74,161, 80,104,125, 16,161,178, 71,215,139,127, 88,255,206,169, 10, 95,127,145,224,156,227, 24, 10, 48,
- 20, 12,195, 98,112,223,147, 26, 7, 15, 47,128, 55,235,223,125, 21, 64,104,116,107,191,200,223,155,245,239,158, 85, 59,102,193,
- 42,191,200,203, 57, 41,234, 96, 48, 24, 32,145, 72, 92,214, 63,203,178,174,191,254, 42, 0,159,175,120, 9,191, 20,239, 65, 88,
-107,103,210, 95,184, 88,132,242,107,103, 17, 33,147,160,186,234, 10, 68, 12,129,152,225, 23,126,230,172,255,246,209,225, 56, 81,
-116, 30,118,171, 21, 50,177, 20, 6,131, 25,223,106, 14, 32, 73, 53,193, 47,242,231,218,239,145,167, 94,195,250,127,191, 15, 35,
- 11,180,239, 26,143,223,142, 31,196,194,135,251, 6,212,126, 0,176,176,107, 18,182,156,217, 13,212,216, 1,121, 75,236, 44, 56,
- 1,242,230,211, 88, 21, 23, 71,248,146, 63, 0,204,232,182, 88,251,195,206, 2,192, 90, 11, 3,169,133,142, 49,160, 70,108,131,
-205,161,135,204,108,132,188,228, 60, 54, 44, 57,131, 78,137, 9,104, 34, 1,176, 1, 20,110,153,175,114,185, 28,114,185,220,235,
- 57,190, 88,187,118, 45,214,174, 93,219,172,193, 28, 30, 30,254,204,217,179,103, 67, 35, 34, 34,160, 80, 40, 16, 29, 29,141,242,
-242,114, 16, 66,140,193,156, 52, 56,139, 63, 63, 63,159, 2,206,132, 64,127,146, 2,131, 77,254, 31,127,252,177,146,250, 94,235,
-206,107, 69, 64,104,104,104,186, 88, 44, 62,231,121,124,249,242,229, 13, 44,127, 0,232,216,177, 35,146,147,147,215,249,178,127,
-174,148, 92,107,144,237,255,202,223, 23, 64, 38,150, 34, 46, 46, 14,220,234,128,250,243,161,254,140,183, 63, 43,251,224,185,119,
-223, 71,109,105, 25, 98, 35, 90,225,248,137, 75,152,179, 60, 11, 25, 25, 25, 36, 16,178,230,190,231,254,125,119, 57,130, 39,224,
-206,192,175,191,254,218,100, 49,160, 70, 61, 0,245,147,136,182, 80,187, 89, 69,105,138,166, 83,219, 24,132,135,200,112, 95,175,
- 68,220,215,179, 47,196, 12, 96, 48, 57,112,233,106, 21, 10,180,223,169,194, 66, 67,124,254,131, 58,163, 17, 9, 29,175,194,108,
-145,131,114, 70, 13, 5, 20,114, 51, 40, 5,170,170,101, 0, 1,194, 67,237,232,157,112, 1,251, 14,245, 67,120,120, 56,111,235,
-223,221,226, 87, 68,198, 64, 66,109,128,253,143,249,206, 33,246,253, 27,221,173,127,119,139,159, 59,118,246,248, 97,215,181,124,
-170,236,185, 43, 1, 0,208,186,181, 83, 25,169,170,170, 66, 68, 68,132,203,253,239,143, 2,192, 41, 1,192,155,152,159, 54, 18,
-248,247, 62,124,248,242, 4,164, 46,122, 31, 89,111, 61, 9, 49, 33,144,202,248,173,216,225,172,255, 19,151,202,112, 79,251,150,
-248,232,191, 27,208,169, 83, 39, 68,182,237,138,190,109,187,194,102,249,195,253, 47,225, 33,147,179,254, 95,159, 59, 26,207,188,
-186, 14,237,187,144,102,181, 31,103,253,143,221,244, 49,118,204,156, 14, 18, 63, 24,128,179, 42, 32,224, 44, 17,204, 93,251, 76,
- 92, 28, 47,226,232, 99,121,129,100,189,187, 76,217,117,114,173,166, 83,183, 94,208, 43,128,243,184,136,218, 11,229, 40, 95,234,
-128, 65, 23,143, 5,179, 23,241,126, 32,171, 87,175, 38, 10,133,130,154, 76, 38,184, 89,158, 84,161, 80, 96,245,234,213,126,148,
- 39, 10, 30,106,107,107,223,121,242,201, 39, 83,214,174, 93, 43,143,140,140,132, 70,163,193,202,149, 43,245, 86,171,245,193, 96,
-254, 31,206,226,231,150,203,249,155, 16,152,156,156, 76,116,186, 49, 52, 24,228, 15, 0, 28,177,243, 33, 40, 30, 21, 6,173,179,
-103,207, 30,188,113,227,198,163,117,117,117,109,108, 54,231, 50, 83, 79,242,191,239,190,251, 48,120,240,224,137, 60,158,179,184,
-166,228, 28,222,248,199, 43,248,102,203, 54,140, 27,214, 31,187,242, 15, 58, 13,152,182, 93, 17,217,182, 43, 6, 20, 21,225,193,
- 41,179, 42, 46, 85, 26,199,118,136, 9,201,225,107,253, 63,151,185, 5, 75,254, 52, 22,109, 91, 43, 93,202, 5,119,143,124, 60,
- 55,129,120, 7, 4, 79,192,157,171, 20,240, 82, 0, 0, 32, 34, 60, 76,251,139,118,179,234,124,252,189,232,210,173,135, 38, 34,
- 84, 1,150, 2, 38,139, 21, 69, 69, 69, 40, 47,250, 85, 21, 30, 22, 10,134, 97,124, 14, 92,133, 92,142,141,223,143, 84,113, 25,
-240, 77,186, 35, 24, 6,161,161,252,173, 39,110, 9, 96,104,116,107,176, 14,155,147,252,235, 97, 35, 18,159, 37,118, 61,193, 45,
-169, 25,179, 96, 85, 3,210, 10,132,252,221,149, 0,247,194, 63, 85, 85, 85,190, 31,128, 15, 37,224,115,183, 85,194,107,151,254,
-245,143, 15, 54, 3,194,120,202,105, 31, 29,142,141,135,126,197,111,167,126, 71,146,106, 66, 3,210,247,135,252, 57, 60,242,212,
-107,248,186,127, 40,158,122,180,123, 80,218,111, 97,215, 36, 44,202,221, 8,242,198,171,216, 22, 55, 8, 43, 13,191, 53, 56, 63,
- 57,178, 5,226,229,254,237, 73, 49,163,219, 98,237,182,220, 28, 92,209,157, 67,121,229, 85,148,158, 14,131,200, 17,129,161,125,
-134, 67, 53, 91,117, 75, 39,181, 96, 84,251,163,148, 30, 34,132,140, 33,132,236,124,255,253,247,229,147, 38, 77,210, 27,141,198,
-177,129,196,252,155, 66, 48,150, 0,170,213, 81, 65, 33,127, 79, 43, 53, 72,168,152, 58,117,106,215,218,218,218, 55, 10, 11, 11,
- 23, 20, 23, 23,163,174,174, 14, 82,169, 20,109,218,180, 65,108,108,236,164,254,253,251,127,203, 83,214, 73, 0, 3,218, 71,135,
-227,129, 7, 30,192,175,103,138,209,178,115,207, 6,227,237,193, 41,179,140, 0, 62,224, 67,254, 28,254,172,236,131, 49,249, 63,
- 97,230,171,159, 97,196,136, 17,136,139,139,243,170,104, 5,171, 65, 56, 37,192,159,182,110, 76, 33, 19,148,136, 91, 71,250,188,
- 74, 1, 3, 64, 68, 68,132,214, 82,117, 89,249,139,246,180, 10,112,102,210, 82, 74, 33,147,201, 16, 25,193,187, 6, 54, 36, 18,
-137, 54, 82, 34, 9,250,205,113,174,126,145,221, 8,216,141,174, 12,120,142,248,253, 93,139,197,185,250,207, 30, 63,140,179,199,
- 15, 35, 54, 54, 22,229,229,229, 1, 17,127,100,108, 91, 88,121, 36, 71,242,197,204,215, 62,199,129,125,218,160,201,187,112,225,
-130,107,183, 63,155,197,124, 29,249,251, 67,252, 28,102,247, 15, 13, 90,251, 1, 0, 89,241,130,139,248, 57,242, 63, 95, 87,167,
-154, 28,217, 2, 15,243,180,250,189,225,161,206,169, 4,157,235, 63, 4,144,216,190,102,205, 26,194, 85,251, 91,189,122, 53,113,
-175,252,183,110,221, 58,178,122,245,106,215,251, 53,107,214,220,244, 65, 79, 41,221, 79, 8, 25,145,147,147,179, 80,175,215,175,
-160,148, 22, 4,251,127, 4, 99, 9, 96, 48,201,233, 6,193, 20, 30, 30,190, 80,169, 84, 46,108,166,156,253,199,142, 29, 27, 10,
-160,115,203,206, 61,141, 54,139, 57,164,126,188,233, 1,212, 0, 56,217, 33, 38,228, 49, 56,147, 5,121, 99,204, 43,107,111, 10,
-241, 55, 71,209, 18, 72,254,214, 32, 49, 49,145, 23,249,251, 52, 64,197, 98,177,214,151, 59,254,102,131,139,237,115,196,143,102,
- 18, 63, 23,155,174, 41,187,130,154,178, 43,136,141,141,109,150,197, 15, 0,118, 7,235,183,247,161, 41,148, 85,213, 4,252, 91,
- 60,193,197,246,131, 69,252,193,110, 63, 46,182,191,197, 96,160,238, 86,127, 63,177,164, 89,196,255,191, 4, 74,233,207, 0,166,
- 11, 45,113,235, 49, 99,198,140, 12, 0,159, 93,170, 52, 26,109, 22,179,123, 60, 50,162, 67, 76, 72, 20,252,220,253,143, 35, 85,
-119, 55,255, 29,164, 84, 9,184,137, 74, 0, 47, 67, 43, 49, 49, 81, 72,236, 16, 32, 64,128, 0, 1, 2,254,199,192, 8, 77, 32,
- 64,128, 0, 1, 2, 4, 8, 10,128, 0, 1, 2, 4, 8, 16, 32, 64, 80, 0, 4, 8, 16, 32, 64,128, 0, 1,130, 2, 32, 64,128,
- 0, 1, 2, 4, 8,184, 43,208, 96, 21,192,252,249,243, 3,206, 34,245,182,221,228,237, 46,239,240,225,195, 1,203,235,215,175,
-223, 13,151, 23,236,251,109,217, 50, 49, 96,121, 21, 21,191,222,234,231, 75,234, 21, 86, 22, 94,138,175,220,137,253,239,102,201,
-171, 47, 76,196,212,183, 33, 5, 64,231,207,159,207, 10,237, 39,200,187,147,228,101,102,102,138,211,211,211,237, 0,240,209, 71,
- 31,209,110,221,186, 97,196,136, 17, 68,104, 63,239,242,252, 86, 0,238, 6, 52,183,200,196,212,169, 83,149, 0,220, 75,134,170,
- 54,110,220,168, 21,116,197, 91,131,154,154,154,199,143, 29, 59,214, 87, 36, 18, 45,146,201,100, 48, 26,141, 47, 12, 27, 54,236,
- 93, 4,161,210, 30,165,212,239,106,140,119, 34,230,207,159, 79,193,115,147, 25, 1,183, 14,185,185,185,202,148,148, 20,109,128,
-223, 85,229,229,229,237, 14, 70, 65,169,122,121,143,229,229,229,109, 88,179,102, 77, 52,156,123, 26, 56,112, 11,170, 91,186,131,
- 35,255,189,123,247,210,159,126,250, 9, 73, 73, 73, 24, 49, 98,132,208,113,130,229, 1,184,211,145,159,159,175,108,206,247,167,
- 78,157,170,220,184,113,163,102,234,212,169,238,135, 53, 83,167, 78, 13, 88, 9,224, 20,138,236,236,108,174, 84,167, 95,178,210,
-211,211,169,159,255,175,201,245,192, 59,119,126,226,175, 60,149, 78, 23,122, 43, 20, 32,242,219,111,191,189,163,215,235,255,212,
-177, 99,199, 22, 21, 21, 21,168,223,110,247,237,175,191,254,250,237,208,208,208, 81, 15, 62,248,160,166, 89,255, 32, 0,242, 87,
-171,231,251, 61, 9,102,100,172, 38, 55, 79, 94,211,229,112, 27,219,244,133,239,248,218,184,113,163, 6,175, 18,144,127,121, 87,
-168,240, 42,193,212,147,105,126,183,235,184,113,227, 40, 0,108,223,190, 61, 40, 4,198,109, 5,172, 86, 71, 5,125,125,124,110,
-110,174, 50, 47, 47, 79,227, 15,217,254,229, 47,233,148, 82,231,214,234,222,240,240,195, 19, 85,121,121,121,154,148,148, 20, 18,
- 64, 63, 30,181,109,219,182, 93, 35, 71,142,196,188,121,243,104, 86, 86,214, 24,189, 94,159,239,207,111,243,162, 52, 98,218, 16,
- 41,212,243,212, 85, 47,124,177,248,219,183,166,191,245, 8,119,110,237,218,204, 38,127,227,172, 89,179, 40, 0,132,134, 54,190,
-181, 65, 93, 93, 29, 0, 96,206,156, 57, 1, 61,159, 83,135, 84,200,207, 60,130,228,244, 76,154,158,158, 46,212, 63,224, 1,174,
- 56,144,123,141, 0,177,143, 1,239,181,110, 54,143,122,218,183, 10,205, 34, 4,119,242,223,184,113, 35,153, 58,117, 42,117,147,
-235,247,253,114, 10, 5, 71, 52,245, 27,126,248,175, 80,100, 71,251,241, 95,147,125, 94, 81,247,240, 95,249,139,243,115, 95,155,
-198, 8,200, 79,175, 12,169,169,169,249,170, 87,175, 94, 83, 0, 48,148, 82, 40, 20, 10,148,149,149,161,186,186, 26,145,145,145,
- 40, 43, 43,219,253,253,247,223,171, 30,124,240, 65,191,148,147,252,252,124,202,109,204, 66, 8,193,148, 41, 83,144,156,156,172,
- 34,132,240,150,147,155,187,217,245, 62, 37,101,146,207,207,190, 96, 58,240,212, 31,205, 61,100, 85,131,207,158,199, 20, 67,124,
-111,170,196,109, 39,236,142,189,123,247, 98,233,210,165,215, 61,139, 47,190,248,130,242,108, 55,101,118,118,182, 6,175,146,122,
-130, 77,187,126,226,126,149, 52,219, 66,188,141,231,150, 6,150,118, 70, 70,134,138, 82,138,245,235,215,211,253,251,247,163, 79,
-159, 62, 62,191,123,160,145,154,140,155,178, 23, 33, 47, 47, 79,195,178, 44, 50, 51, 51,225,107, 91,101, 66,136,146, 82,234,234,
-175,223,126,251,109, 8, 33, 4,211,167, 79, 47, 5, 16, 55, 99,198,140,157,107,214,172, 97,252,177,216,223,221,249,174,235,253,
-181,237, 87, 65, 8, 65,214,179, 33, 0, 8,222,153,245,246, 35, 45, 91,182, 4, 0,124,249,105, 22,230,141,156,199, 75,230,128,
- 1, 3,208,165, 75,151,160,180,123,102,102, 38,147,158,158,206,126,244,209, 71,244,167,159,126, 66,233,233, 78, 64, 69,148,192,
-234,126,146,191, 39,152,166, 38,242,236,236,108,100,102,102, 82,111, 19,104, 32, 59, 67, 53,215, 66,247, 37,207,205,202, 14,216,
- 40,220,184,113, 35,217,184,113, 35,225,148, 0, 0,170,230, 40, 20,132, 16,164,165,165,129, 82, 74,220,126,155,223,138, 10,153,
-170,115,189,248, 28,247,133,176,173,171, 93, 47, 62,199,253, 33,127, 74, 41,184,221,217,124,237,210,230,173, 79,234,116,186,207,
- 34, 35, 35,167, 0, 96,230,206,157,139,153, 51,103, 66, 42,149, 66,161, 80, 64, 46,151,131, 16, 2,145, 72,132,154,154, 26,222,
-237,152,147,147,163, 84,171,213, 52, 39, 39, 7,110,207, 4, 95,127,253, 53,230,205,155,167,201,201,201, 81,222,142, 3,215,155,
- 66,112, 43, 60,107,217,217,217,154,140,140, 12,242,216,169,169, 94, 45,124,181, 90, 77,167,158, 76, 83,121,243, 12,248,194,188,
-121,243,232,243,207, 63,143,206,157, 59, 7,229,247,206,155, 55,143,170,213, 81,136,137,217, 21,212,118,216,188,121,243,232,252,
-252,252,221,125,251,246, 37, 31,126,248,161,150, 35,255,230, 96, 83,246, 34,172, 88,177, 2, 44,203, 98,209,162, 69,224, 35,211,
-157,252, 1, 96,219,182,109, 91,234, 93,225, 81,211,167, 79,183,143, 28, 57, 18,106,181,154,229,107,180,120,142,209,149, 43, 87,
-226,177, 7,156,182, 97,214,179, 10, 76, 27, 34,197, 11,227,158,231,125, 79,161,161,161, 24, 49, 98, 4,210,211,211, 73,114,114,
-178,215, 23,119, 13, 95,101, 47, 61, 61,157, 5,156,219,172, 3, 64, 68, 72,133,192,234,205, 36,255, 38, 21, 0,142,172, 10, 11,
- 11, 93,101, 39,221,173, 39,127,137,214,101, 65, 4,121, 82,242,162, 12,168,130,217,120, 27, 55,110,212, 4, 65,134, 75,161, 72,
- 75, 75, 83,113,109,120, 55,193,157,252, 1,160,184,184,216,117,238,202,149, 43,188, 21,198,154,154,154, 55,141, 70,227, 44,134,
- 97,152, 25, 51,102,160,166,166, 6, 37, 37, 37,144, 72, 36, 16,139,197, 16,139,197,144, 72, 36, 80, 40, 20, 48,153, 76, 94, 75,
-162,122,153,224,148, 59,119,238,212, 16, 66,144,154,154,138, 53,107,214,144,228,228,100,146,145,145, 65, 82, 83, 83,185,254,163,
- 17,166,138,166,201,191,190, 45, 85,220, 36,238,254,236,211,210,210, 84,201,201,201, 90, 32,176,146,180,201,201,201,100,205,154,
- 53, 36, 59, 59, 27,148,210,160, 40, 99, 47,189,244, 18,178,179,179,121,245, 17, 95,248,230,155,111,198, 28, 58,116, 40,191, 83,
-167, 78, 48, 24, 12, 52, 52, 52,148,238,219,183, 15,128, 43,201, 50, 32,242, 95,190,124, 57, 8, 33, 96, 24, 6,135, 14, 29, 2,
- 39,211, 15,143,196, 35,132, 16, 76,155, 54,205, 94,127,200, 58,125,250,116,189, 82,169,196,188,121,243,216,111,191,253,214,231,
-189,187,135,194,174,109,191, 10, 16, 96,253, 51,127, 84, 45,206,122, 54, 4,211,135,202,176,248,193, 23,120,255, 46, 62,150, 63,
-159,107,246,238,221, 75, 51, 51, 51, 93,175, 67,135, 14,193,112,105, 0, 96, 53,129,132,217,145,255,250, 73,184,159,231, 94,194,
-200,109, 72,254,233,139,223,242,122, 94,220,212,128, 44, 42, 42,162,133,133,133,200,206,206, 6,247,158,115,237,248, 51,200,111,
- 52,249,187, 91,213,220, 36,116,187,194, 61, 36,112,183,129, 82,138,226,226, 98, 92,187,118,205,117,204,243,179, 15,136,126,252,
-241,199,241, 9, 9, 9, 16,137, 68, 56,123,246, 44, 40,165,248,253,247,223, 97,181, 90, 65, 8,129, 88, 44, 6, 33, 4, 14,135,
- 3, 70,163, 17,155, 54,109, 66,114,114,211, 97,143, 93,187,118,105, 0, 32, 53, 53,245,186,126, 91,255,153,114, 68,193,167, 95,
-123,186,245,125,125,230, 99,229,115,104, 44, 28,192,199,245,239,101,242,108,118,146,148, 43,230,239,166,192,113, 10, 44, 23,243,
-207,119, 35,255, 64,172,117, 78, 9,227,200,104,215,174, 93,154, 64,195, 0,156,188,110,221,186, 93, 71,110,129, 96,245,234,213,
- 56,121,242, 36,141,141,141, 69,187,118,237, 92,219, 62, 95,184,112, 1, 34,145, 8,255,249,207,127, 2,250, 7, 35,135, 58,183,
- 47, 99, 89, 22,127,251,219,223,176,114,229, 74,236,219,183, 15,132, 16, 60,156,242, 23, 92,188,192,111, 3,199,109,219,182,109,
-174,127,198,102, 56, 87,200,176, 0, 48,125,250,244,106, 0, 45,242,242,242, 64, 8,225,173, 80, 57,173,255,235,247, 49,113,134,
- 3,128, 47,179, 14, 35,183, 38,247,166,121,203, 78,157, 58,133, 67,135, 14, 53, 56,230,168, 62, 15,187,141, 5, 72, 45, 90, 60,
-104,195, 33,143,205,174,147,146,146, 4,230,231, 65,254, 77, 42, 0,245,110, 23,194, 89,253, 28,249,123,141,253,249, 65,214, 77,
- 89,130,124,226,196,190,228,121,158,191, 85, 59, 82, 77,157, 58,213, 61,214, 76,189,157,231, 60, 3,205, 34,221,141,193,141,131,
- 25, 38,206, 15,200,242,111,108,178,141,143,143,191,238,218, 38,158, 73,139,232,232,232, 94, 22,139, 5, 85, 85, 85, 56,112,224,
- 0, 68, 34, 17,172, 86, 43, 76, 38, 19, 88,150,117,237, 74,105,179,217, 96,177, 88,120,133, 24,184,231,208, 88,191, 77, 78, 78,
- 38, 57, 57, 57, 52, 59, 59,219,167, 50,225,180,186,110, 76, 14,128, 98,200,170,235,136,158,251, 28,136, 34, 48, 98,196,136,230,
- 43, 1, 30, 49,255,252,252,124,165,139,236,255,136,249, 7,148, 35,227,161,132, 1,112,238,182,168, 86,171, 41,159,231,192,215,
- 11, 80,159,251,224,119,110, 1,183,179, 99,187,118,237, 16, 17, 17, 65, 60,149,221, 94,189,122, 5,108,249, 83, 74, 97,183,219,
- 93,199,134, 13, 27,134,125,251,246, 97,207, 15, 14,188,187,140, 95,140, 61, 55, 55,119, 92,125,236,255, 4,128,150, 0,220, 55,
- 27, 42, 1,208, 2, 0,242,242,242, 52,125,251,246,245, 41,175, 97,236,223,139,167,160,254, 47, 95,121,193, 64,122,122, 58, 73,
- 74, 74,162,154,207, 98, 97,175,254, 21,132,173, 6, 28,206,157, 86, 25,145, 29,250,125, 12, 36, 82, 49, 44,142, 22, 56,120,161,
- 47, 94, 89,174,195,161, 67,135,136,183,101,213, 2,252, 84, 0, 60, 61, 1,254, 90,254, 69, 69, 69, 52,152,238,110, 95,242,234,
-195, 18, 65,243, 52,100,102,102,146,244,244,244,128,190,235,249, 59, 51, 50, 50, 12,106,181, 58,172,177,243,129,194, 61,246, 31,
- 12,101,192, 61,246,207, 87, 25,152, 57,115, 38, 66, 67, 67, 17, 22, 22,134,240,240,112, 68, 70, 70,178, 81, 81, 81, 76, 94, 94,
- 30, 30,127,252,113,215,117,114,185, 28, 99,199,142,133, 90,173,166,141,236, 86, 21, 99,181, 90, 81, 85, 85, 5,179,217,140,200,
-200, 72,200,100, 50,216,237,118, 80, 74,225,112, 56, 96,181, 90, 97,179,217,224,112, 56,252,202, 47,240, 21,178, 74, 77, 77,197,
-237, 16,154,241,149, 16,232, 47, 56, 37, 32,224,254,245,175,198,219,110,234,201,180,250,188,155,192,100,123, 90,255,238,138,100,
- 32,201,128,158,214,127, 83,138, 41, 95,242, 23,137, 68, 52, 34, 34, 2,112, 38,212, 17, 0,212,102,179,161,166,166, 6,173, 90,
-181, 10,232,190, 57, 99, 74, 44, 22, 99,193,130, 5, 56,116,232, 16,254,136,251,243,239,211,223,127,255,253,247,195,135, 15, 7,
-128,112, 56,195,185, 70, 0,216,176, 97, 67,171, 61,123,246, 68, 80, 74, 93,202, 54,159,117,226, 43,223, 95,137,105,131,175,183,
-254,103,254,219,136, 13, 7,108,160,148,162,223,140,126,152, 55,114, 30, 9,116,221,121,160, 74,128,106,118, 38,253,126,101, 71,
-136, 13,122,192,238,252,215, 44, 0,169, 24, 40,190,214, 2,187, 47, 13,112,100,126, 89, 46, 58,116,232, 16, 73, 74, 74,146,227,
-127, 28,124,172,127,128, 71, 37,192,252,252,124,151,235,223, 61, 31,128, 15,186,116,233, 66,210,210,210,130, 22,147,231, 33, 47,
-224,248,250,212,169, 83,169,231, 43, 63, 63,159,229, 86, 5,184,173, 8, 8,180, 19,135,221,205, 29, 46, 51, 51, 19,203,151, 47,
-111,208,175, 56,242, 79, 73, 73, 65, 74, 74, 10, 0, 96,207,158, 61, 77,137,137, 46, 42, 42, 50, 59, 28, 14,232,116, 58, 84, 84,
- 84, 64,167,211,193,104, 52,194,104, 52,194, 96, 48, 64,175,215,163,166,166, 6, 38,147, 9, 22,139,197,149, 20,212, 36,137, 17,
-130,156,156, 28,191, 20,182, 59, 25,123,247,238,109,240,114,199,169, 83,167,148,238,159,249,196,156, 61, 99,254,158,150,123,115,
-178,246,189,125,119,205,154, 53, 36, 39, 39, 39,168,185, 0, 57, 57, 57,188,231, 46,142,252, 25,134,161,245,253,203,229,250,103,
- 89, 22,165,165,165,232,214,173, 27,153, 63,127,190,223,191,229,229,197, 35,177,103,207, 30,176, 95,181, 0,165, 20, 43, 86,172,
-112, 61,163,189, 7,120,231,237, 33, 55, 55,119, 18, 0, 76,159, 62,189,184, 94, 1,176,124,249,229,250, 86,243,231,207,111,181,
-103,207, 30, 60,244,208, 67, 99,252, 89,166,120,109,251, 85, 16, 16,172,119,179,254,103,188,111,132,104, 90, 13,190, 60, 96,197,
-115,207, 61,135,101,223,191,125, 43,230, 21, 17,167, 4, 60,248,156, 29,212, 20, 9,232, 1,232, 1, 81, 45,160, 47, 5,182, 29,
-110,131,204, 47,203, 69,245,222, 2,113,122,122,186, 89, 32,127,223,228,239,211, 3,144,153,153,217, 32,238,239,158, 15,192,119,
-237,101,189,187, 80,197,185,229,155,235,146,247, 38,143,115,251, 39, 39, 39,107,131,181,132, 40, 57, 57,249,183,252,252,252, 94,
-183,227, 3,230,172,254, 96,185,255, 57,171,223, 95,247, 63,135,245,235,215,187,222,255,243,159,255,196, 39,159,124, 2, 0, 86,
- 0, 82,142,248, 1, 96,236,216,177,190, 20, 0, 83, 66, 66, 2,140, 70, 35,172, 86, 43,202,203,203, 33,147,201, 32, 22,139, 93,
- 30,128,186,186, 58, 24,141, 70, 88, 44, 22,212,212,212, 96,202,148, 41, 62, 21, 76,206,186,111,106, 89, 43,119, 29, 31,220,200,
- 28,128, 64,206,123,130, 91,238,231, 13, 43, 86,172,208, 44, 88,176, 64,213,189,123,119,237,173,236,195,141, 89,255,238,240, 39,
- 23,160, 49,235, 63, 80,203,159, 97, 24,202,178, 44, 1,240, 15,174,107, 59, 28,142, 87, 67, 67, 67, 17, 31, 31, 31,208, 28,243,
-202,139, 35,161,213,106, 65,114, 98, 0, 0, 59, 94, 9,199,216,215,107, 49, 98,196, 8,188,177,108,143, 95,133,169,182,109,219,
-182,105,228,200,145, 0, 80,190, 97, 67, 86,187, 61,123,246,181,160,132, 98,252, 67,227, 83, 82, 82, 82,182,248, 51,157, 0,206,
-216,255,180, 33,146,134, 22, 63, 40, 22, 60,183, 0,113, 99, 91,223,178,130, 89,233,233,233, 13, 52,124, 90, 11,200,172, 0, 75,
- 9,236, 14, 10, 25, 5,226, 20,140,251,245,118, 8,112,242,247,178, 23, 27, 85, 16, 56, 15,172,152,143,229, 63, 96,192,128,235,
-242, 1,252,113,209,121,146,118, 16,200,217, 83,158,230, 6,116,188, 94,249,249,249, 65,147,119,183, 38,254,113,133,101, 56, 55,
-113,118,118, 54,158,120,226, 9, 0,144,114,215,184,159,171,159,180, 26,195,241,193,131, 7, 63,174,213,106,179, 29, 14, 7,244,
-122, 61,108, 54,155, 43,238,111, 54,155, 93, 75, 12,185,196,192,177, 99,199,106,121,244, 23,146,157,157, 77,235,189, 0, 13,250,
-109,126,126, 62,119, 28,201,201,201,188,188, 85, 55, 59, 7,192, 51, 44,224,235,121, 52,117, 94,173, 86,211, 21, 43, 86,104, 30,
-123,236, 49,124,245,213, 87, 1, 61,115,207,229,183,220,231,141, 27, 55,106,210,139,213,152,234,195,210, 30, 55,110, 28, 61,127,
-254, 60,190,255,254,251, 70,219,251,252,249,243, 0,128,237,219,183,251,252, 61,105,105,217, 52, 45,109, 52,198,140, 41, 66, 81,
- 81,145,215,236,242,202,202,209, 0,116, 80,171, 27,159,183, 56,242,183, 90,173, 84, 42,149,114,215,252,163, 94, 33,120,245,226,
-197,139,232,216,177, 99, 64,150, 63,195, 16,167,194,206,145,255, 81, 59, 62,209, 88, 1, 0,111, 44,219,227,247, 28,193,141,137,
-249,243,231, 39, 82, 74, 49, 97,226,132, 41, 15, 79,124,248,155, 64,166,166, 73,143, 62,114,130, 16,114, 31,165,128,104, 90, 13,
- 40,165, 88,176,112, 1, 90,143,109,243, 71,224, 35,112,112,236, 76,209,140, 74,130,153,153,153,116,227,139,109, 17, 86,121, 30,
-231,244,241,232, 44, 43, 7, 66,227, 32,174, 43, 69, 68, 93, 37,128, 86, 46,143,129,167,210, 32, 32, 0, 15,128,251,114, 63, 15,
- 87, 31,205,206,206, 6,223,132, 41, 79,210, 14,214, 15,119,151, 23,132,245,255, 2,154, 9,119, 23,186, 59, 9,113,245, 36, 60,
-207, 53, 18, 67,180, 3,248,122,228,200,145, 79,231,229,229,125, 96,183,219, 81, 93, 93,237,202, 1, 0,128,242,242,114, 84, 87,
- 87,131, 82, 10,127,194, 75, 99,198,140, 81,237,220,185, 83,147,157,157,141,156,156, 28,234, 25,243, 31, 51,102,140, 95,197,128,
-110, 4, 76, 7,158,242,155,240,189, 17,124, 83, 74, 64, 70, 70, 6,153, 55,111, 30, 13,132,252, 27, 36, 0,186, 61,119,183,164,
- 64,127,189, 0,141, 42,238, 23, 46, 92,112, 41,104,124, 13, 13,247, 80,229,245,247,205,111,174,170,169,169,161,145,145,145,238,
-228,255,170,197, 98, 65, 73, 73, 9, 58,119,238, 28, 16,249,171,213,106,202,126, 21,133, 29, 71,157,198,233, 58,141, 21, 27, 14,
- 88, 65, 41,197,190, 31, 3,143, 44,238,221,187, 23, 15, 61,244,144, 42,208,242,193, 28, 65,179, 44, 43, 1,128,175,126,180,225,
-185,231,158, 67,235,113,109, 60,252, 3,254,129,171,242, 55, 98,196, 8, 10,120, 95,238,231, 86, 9,144,247,243,237,200,212, 1,
-177,137,120,124,109, 13,128, 56,103, 27, 60,217, 18, 29,196,151,241,122,114, 25, 62,213,104,132,170,128,104, 88,233,207,211,242,
-247, 60, 47,110,106,162,200,204,204,164,222,150, 77,249, 19, 2,240, 66,218, 65,131,135,188,160,174,255,247, 40, 7,236, 55,210,
-210,210,192, 35, 97,145, 55, 26,115,247, 7, 26, 6,104,204,221, 31, 72, 24,192,189,188,172, 39,249, 52,117,174,177, 91, 37,132,
-172,154, 48, 97,194,154,245,235,215,219,164, 82, 41, 44, 22, 11,236,118, 59, 88,150, 69,139, 22, 45,160,211,233,144,230,231,210,
-179,212,212, 84,109,106,106, 42,217,185,115, 39,205,201,201, 65,118,118, 54,184,186, 0,183,115,229,185, 96, 99,247,238,221,116,
-194,132, 9,216,186,117,107,179,201,223,147,228,242,157, 10,153, 79,111,220,243,207, 63,127,157,113,225,137, 23, 94,120,129,242,
- 77,242, 84,171,163,124,202, 83,171,249,197,255, 21, 10, 87,233, 75, 74, 41,133,209,104, 68, 73, 73, 73,192, 49,255, 6,158,143,
-215,107, 27,124,110, 14,249,127,248,225,135,193,234,179,108,238,183, 91,186,185, 87, 2, 12, 22,154, 82,200,214,173, 91,231,151,
-245,175, 78,237, 90,242,241,105,180,205,200, 57, 7,119,238, 25,241,159, 76,186,123,222,189, 56, 83,170,192,153, 51,103,160, 82,
-169, 32, 32, 8, 30, 0, 0,104,140,228,111, 71, 45,235,118, 91,255, 31,140, 37,126,127, 40, 34,201, 65,251, 93, 83,167, 78, 85,
-249, 91,222,215, 7, 49, 80,119,133,198, 91,162,149,231, 57,158,132,107,159, 57,115, 38,217,177, 99,135,242,210,165, 75, 26,147,
-201, 4,135,195,129,251,238,187, 79,149,148,148, 20,240,243, 30, 51,102, 12, 25, 51,102, 12, 55,195, 7, 20,154,185,209, 57, 0,
-190, 62,243,177, 56,235,179,195, 27, 18,142,159, 69,102,184, 54,194,171,132,230, 35,237, 58,123, 48, 61, 61,157,166, 23,171, 65,
- 26, 22, 2, 34, 0,112,230,204, 25,218,196, 88,245,217,232,163, 71,143, 38,126,140,125, 18,140,107, 0,160,170,170, 10, 10,133,
-130, 18, 66,208,177, 99, 71, 16, 66, 72,183,110,221,208, 92,242,103, 30,211,129, 16,130,148, 71,156,171,138, 8, 33,174,229,126,
-156, 59,255, 22,129, 29, 48,171,127, 80, 5,206,153, 51,135, 83,254,195,234,189,122,118, 56,221,255,172,219, 53,126,221,112, 70,
-206,185,182,238,220,195,185,250,211,211,211,137,122,195, 61,135,103, 0, 0, 32, 0, 73, 68, 65, 84,151,134,158, 57,115, 70, 96,
-243, 96, 43, 0,119, 10,130,177,214, 63, 88,132,125, 3, 20,155,160,254,174, 96,111,236,115,163,173,231,250, 24,191,215,255, 97,
-181, 90, 33, 18,137, 32, 18,137,110, 98, 95, 91, 77,110,111,121,141,143,133, 89,179,102,249, 47,240,213, 63,246,177,200,206,206,
-110, 48,105,167, 23,171,221, 45,111,237,221, 48,151,180,110,221,154,252, 49, 86,156,201,182,205, 37,127,231, 51,105,106, 43,160,
-235,177,122,245, 79, 55, 77, 35,152, 55,114, 30,185,217,115,130,159,243, 70, 40,156, 57, 69, 54, 55,229,211, 21,231, 87,169, 84,
- 68,176,252,125,195, 91,104,128, 36, 38, 38, 10, 5, 19, 4, 8, 16, 32, 64,128,128,255, 49, 48, 66, 19, 8, 16, 32, 64,128, 0,
- 1,130, 2, 32, 64,128, 0, 1, 2, 4, 8, 16, 20, 0, 1, 2, 4, 8, 16, 32, 64,128,160, 0, 8, 16, 32, 64,128, 0, 1, 2,
-238, 10, 52, 88, 5, 48,127,254,252,128,179, 65,189, 21,118, 17,228, 9,242, 4,121, 55, 79,222,146, 37, 75, 26,106,247, 12,227,
- 90,230,232,190,212,140,171,166,232,190,244,204, 91,249,224,176,176, 48,200,229,114,215,247, 25,134,113,173,184,112,151,199,109,
-204,196,178,206, 85, 94,220,102, 57,194,243,245, 71, 30, 81,138,196, 50, 80,214, 14,150,181,107, 3,145, 71, 41, 85, 29, 57,114,
- 68,156,152,152,152, 15,143,170,123, 1,202, 83, 30, 57,114, 4,137,137,137, 90, 97,188,221,121,242,252, 86, 0,254, 23,241,242,
-203, 5, 13, 26,238,141, 55, 6,146,219, 74, 94,193,203, 20, 0,222, 24,248, 6,113,127, 31,168, 60,174, 82,156, 90,173, 70, 70,
- 70, 70, 83,215, 53,121,222, 93, 30,220,150,233,113,223,113,255,190, 90,173,118,157,227, 43,247,127, 17,140,181, 78, 89,254,219,
- 1,140,136, 42,215,180,179, 95,198,105,218, 25,135,234,162, 85, 17, 9,131, 32, 13, 13,215,250,250,254,254,253,251, 49,108,216,
- 48, 23,241,115,132, 77, 8,185,142,176, 89,150,117,189, 46, 94,188,232, 85,222, 47,191,252,130, 1, 3, 6, 64,161, 80, 64, 44,
- 22, 67, 36, 18, 53,144,201,145,190,195,225,112,189, 44, 22, 11, 10, 11, 11,113,207, 61,247,220,141,143,136, 56,121,145, 42,127,
-255,253,119,156, 57,115, 70,211,162, 69, 11, 12, 31, 62,188, 89, 99,156, 16, 70, 41,147, 71,163, 69,212,189,154, 58, 67,177,202,
- 80,123, 89,233,175, 12,150,101,149, 57, 57, 57,187, 79,159, 62,141,173, 91,183, 66,161, 80, 96,209,162, 69, 34,184,173,189, 15,
- 64,158,166,232,220, 89,236,220,177, 29, 82,153, 12,207, 61,183, 96, 20,165, 84, 35,140,212,187,212, 3,112, 39, 33, 39, 39,199,
-167,198,147,154,154,234,115, 96,114, 4,237, 73,220,129, 34,216,242,130, 13,183,202,124,188, 38, 45, 62,165,101,249,202,171, 87,
- 4,154, 85, 93,156,171, 42,232,254,255,239,248, 81, 72,169,242,196,254, 29,136, 56,255,163,198,104,180,192, 54,136,129, 34,158,
-160,219,165,163,184, 63,156,106,116,229, 63,227,215,144,217,170, 10,210,174, 73, 37,224,196,137, 19, 16,137, 68, 24, 62,124, 56,
-196, 98,177,235,197, 41, 4,156,213,111,183,219,225,112, 56, 96,179,217,112,241,226, 69,236,222,189,219,171, 60,163,209,136,195,
-135, 15, 99,240,224,193,144, 74,165,144, 72, 36, 13,100,178, 44, 11,187,221, 14,187,221, 14,155,205, 6,147,201,132,195,135, 15,
-195, 96, 48,220, 22,250, 84,125, 63, 99,240, 71, 33,154,128, 57,122,201,146, 37,172,199,220,130,218,218, 90,196,196,196, 4,180,
- 0,125,201,146, 37, 13,126,207,231, 89,133, 80, 40, 90, 65, 36,146,106, 12,181,151,253,150, 89, 80, 80, 0,131,193,128,193,131,
- 7, 95, 76, 78, 78,110, 83, 89, 89,137, 29, 59,118, 56,162,163,163,145,148,148,212,228, 24,153, 51,110,244,117,109,115,236,212,
- 41,104,195, 67,176,112,197,191, 46,247,235,223,171,253,213, 43,101,216,145,167,221,221,169, 87,191,100,189,190,102,151, 64,157,
-183, 63,184,210,191,238,240,172, 5, 32,110,106,146,229, 38, 87, 95,159,111, 5,249,255,245,175,127,109,242, 26,157, 78,135, 47,
-191,252,146,242, 81, 2, 56,178,110,174,181,126, 35,228,185, 91,254,205,181,254,221, 72,152, 0,160,106,181,218,231,198, 49, 60,
-201,154,112,196,206, 89,251,238,150,191, 59,213,241,237, 51,110,158, 10,234, 94, 78, 24, 0,170,170,156,149, 17,163,163,243,239,
-138,129,122,225,167,124,220,115, 89,163,185,108,100, 49,249, 30, 17,238,141,181,131,141,166,144, 68,139, 80, 91, 41,133,162,214,
-132, 30, 71, 86,105, 10, 19,230,169,140, 33, 29,181,141, 91,146, 4, 39, 79,158,132, 84, 42,197,168, 81,163, 92,164, 45,145, 72,
-192, 48, 12, 40,165,176,217,108,176,219,237,176, 88, 44,184,124,249, 50, 52, 26, 77,163, 91, 42, 51, 12, 3,155,205,134, 35, 71,
-142, 96,248,240,225, 80, 40, 20,144,201,100, 46,121,156, 2, 96,177, 88, 96, 48, 24,112,236,216, 49,152,205,102,191, 10, 51,105,
-181, 90,165, 72, 36,210,212,214,214, 66, 42,149,162,172,172,236,169,201,147, 39,215,202,229,242,207, 3, 33,109,173, 86, 59, 85,
- 36, 18,125,229, 38,239,244,228,201,147,127,151,203,229,169,112,238, 80,233,183, 37,252,202, 43,175,104,150, 46, 93, 90,134,250,
- 29,103,150, 44, 89,130, 19, 39, 78,160, 85,171, 86,141,214, 93,247, 69,254, 31,207,157,139,241,253,250, 1, 0, 90, 63,253, 52,
- 20, 33,113, 48,232, 47, 65, 95,115, 78, 69,169, 67,235,175,204, 62,125,250,160,172,172, 12,251,247,239,239,200, 48, 12,142, 29,
- 59,134,232,232,104,236,221,187, 23, 86,171,213,103, 59, 86,190,185,176,193,231, 48,171, 13,109,237,102, 60,247,252,171,237, 87,
-188,251, 79,188,243,238,135,104,199, 56,240,225,187,203,243, 71, 77,155, 33,176,235, 29, 72,254,220,113, 94,123, 1, 0,215,215,
-255,246,245,249,102, 34,152, 59,245,221, 9,112, 87, 2,154,233, 1,224, 8,150, 0,160,159, 60,250,153, 87, 66,126, 98,211,108,
-222,100, 93,239,218, 39, 94, 38,108,247,239,187, 20, 4, 62, 33, 0,238,127,123,254,245,244, 0,220,233, 48, 87, 87, 40, 71, 88,
- 14,107,202, 68, 14,220, 19, 9,116,236, 64, 33,234, 35,133,184, 75, 23, 72, 45,102, 88,126,184, 12, 75,141, 24, 34, 86, 2,115,
-254,231, 26,102,252,179, 42, 86,236, 61, 28,192,185,231,207,158, 61,139,168,168, 40,168, 84, 42,200,229,114, 72,165, 82,136,197,
- 98,151,213,111, 54,155, 81, 82, 82,130, 61,123,246,128, 97, 24, 48, 12,131,166,228, 57, 28, 14, 28, 63,126, 28,195,134, 13, 67,
- 68, 68, 4,228,114, 57, 68, 34, 17,236,118, 59,172, 86, 43,244,122, 61,126,254,249,103, 88, 44, 22,136,197, 98, 87, 46,128, 47,
-124,241,197, 23, 74,131,193,160, 57,127,254, 60,244,122, 61,164, 82, 41, 90,183,110,189,106,223,190,125, 24, 50,100,136, 56, 52,
- 52,244, 19,127,148,128, 47,190,248,226, 81,131,193,240,149,135,188,132,125,251,246, 37, 12, 25, 50,228,203,208,208,208, 84,190,
-242, 88,150, 85, 90,173, 86, 84, 85, 85,105,220, 60, 10, 0,128,165, 75,151, 22, 47, 89,178,164, 93,106,106,234, 40,185, 92,238,
-215,252,199,136,164, 74,207, 99,215, 62,248, 0,173, 39,197,227,157,119,222, 87,217,108,117, 1,205,167,251,247,239,215,252,244,
-211, 79,120,241,197, 23,245, 34,145, 40, 66, 46,151, 99,200,144, 33,208,104, 52,200,203,203, 67,187,118,237,252,240,119, 16,124,
-113,246, 42,190, 62, 83,140,220,111, 63,133, 72, 68,176,240,233,199,217,190,173, 91, 50,153,207,189,138,181,254,202, 19,112, 75,
-200,223, 83, 57,245,166, 20, 4,188, 10,224, 86,111,111,219,165, 75, 23,149,175,215,205,182,214,111,132,188, 96, 88,253,141,225,
-147, 71, 63, 35, 79,108,154, 77,189,145, 63,248,135, 8, 26, 88,250, 85, 85,201, 46, 11, 29,127,108, 1,234,183,219,191, 41,162,
-143,142,206, 15,200,250,183,219,237,202,159,127,254,153, 54,118,204,243, 92, 99,112,191,222,110,183, 43, 61,207,121, 30,107, 10,
- 85,199,127,209,148, 20,235,209, 42, 92,140, 46,225, 20,226,150, 44,196, 15, 60,136,208,190,159, 67,209,255, 61,200, 34, 21,144,
- 26, 76, 48, 26, 29,232, 32, 50, 98,239,250,198,149, 39,134, 97, 32, 22,139, 33,145, 72,112,230,204, 25, 28, 59,118, 12, 17, 17,
- 17,136,137,137, 65, 76, 76, 12, 90,182,108,137, 22, 45, 90,160,166,166, 6,123,247,238,133, 72, 36,114,197,246,189,129, 59, 47,
-149, 74,225,112, 56,112,250,244,105,132,132,132,160,101,203,150,104,213,170, 21, 98, 99, 99, 17, 22, 22,134,211,167, 79,195,102,
-179,185, 66, 4,141, 41, 20,158,150,127,105,105,169,230,220,185,115,232,220,185, 51,198,141, 27,135,129, 3, 7,194,104, 52, 98,
-247,238,221, 56,114,228,200, 71,102,179,153,119,237, 98,173, 86,171, 42, 45, 43,255,166,232,106, 13,194,239, 25,140,132,113,127,
- 66,187,129, 41,208, 89, 24,236,204,223,133, 35, 71,142, 76, 54,155,205,127,225, 75,254,122,189, 30, 71,143, 30,213,236,223,191,
- 31,125,250,244,193,146, 37, 75, 90,162, 62,158,190,100,201,146,118, 0,224, 15,249, 51, 34,169, 50, 52,172,173, 50, 58,166,151,
-102,253,134,163,152,251,241,199,200, 59,124, 24,121,135, 15,163,245,211, 79, 3, 0,108,182,186, 61,129,140,227,188,188, 60,154,
-155,155,139, 41, 83,166, 92, 12, 15, 15,103, 66, 66, 66, 10, 11, 10, 10,176,127,255,126, 84, 84, 84, 32, 33, 33,193, 47,121,239,
- 31, 62,131,119, 15,254,134,181,239,190,116, 84, 44, 50,129,113,212,226,237,149, 31, 51, 95,237, 45, 68, 9, 35,198,189,247,222,
- 43,176,236, 93, 2, 38, 80,130,191,133,155, 87,220, 24, 11,251,229, 2, 26,204,184,125,176,229,221, 72, 69,224,137, 77,179,169,
-251,171, 49,175,128, 47,175,194,117,228,214, 80, 25,240,215, 83, 65, 26, 59,238,233, 21,224,131,218,218, 90,229,174, 93,187, 52,
- 5, 5, 5,141, 30,115, 63,215, 20,220,175,223,181,107,151,166,182,182, 86,233,126,206,243, 88, 83,136, 48, 87, 34,239,146, 25,
-219,206,179,184,172, 35, 40, 45, 7, 24,113, 36, 24, 18, 3, 98,150,161,174,148,224,232, 37, 22,199, 46,153, 81, 89,107, 67,239,
-104,153,134,143, 2, 32,147,201,112,238,220, 57,156, 58,117, 10,209,209,209,136,138,138, 66, 84, 84, 20,140, 70, 35,246,239,223,
- 15,137, 68, 2,169, 84,218,228, 94, 10,156,119,128, 83, 2, 40,165, 40, 42, 42, 66,116,116, 52,226,227,227, 17, 27, 27,139,162,
-162, 34, 56, 28, 14,200,100, 50, 72,165,210, 6, 43, 15,188, 77, 43,220,155,242,242,114,205,149, 43, 87,208,179,103, 79, 60,248,
-224,131,152, 56,113,162,106,226,196,137,170,225,195,135,195,225,112,224,199, 31,127, 68, 81, 81,209, 96, 0,188,226, 9,229,229,
-229,187, 75,171,106, 16,221,181, 47, 18,146,231,160,231,132,249,232, 49, 97, 30, 58, 62,240, 40,172, 84,196,201,227,245,124,235,
-115, 31, 52,103,206,156,225,238, 85, 85, 79,252,204,146, 37, 75,176,116,233, 82, 44, 93,186,244,148,103, 94, 64, 99, 16,137,229,
-202,168,232, 30,154,214,237,134,105,162, 98,122,128, 48, 98,124,244,137, 6,115, 63,254, 24,115, 63,254, 24, 75,151, 46, 69,121,
-121, 57,248,202,243,176,252,233,150, 45, 91, 48,100,200, 16,244,239,223,191, 35, 0,249,174, 93,187, 6, 92,184,112, 1,199,143,
- 31,135,201,100,194,132, 9, 19, 70,241,149,151,245,251,101,188,247,243, 41,172,121,227,249,170,248,123, 59,246, 49, 26,116,200,
-250,102, 23,142, 30,251, 29,123,191,219,137,154,107,165,152, 48, 97,124, 50, 4,220,182, 72, 76, 76,108,212,250,231,149, 3,144,
-145,145, 65,242,243,243,149,124, 63,223,201, 8,166,165,126, 35,228, 1,193,115,255, 55,106,133,186,197,212,253, 37,127,206, 11,
-224,110,157, 7, 3,190,146, 15,253,129, 86,171, 85,150,148,148,104,184,205, 93, 26, 59, 22, 8,206,158, 61,139,202,202, 74, 77,
-219,182,109, 85, 74,165, 82,219,216,177, 70,137,171,226, 50, 14, 92, 53, 97, 66, 72, 8,246, 93,102,209,182,191, 12,157, 45,133,
-208,157,248, 43, 54,189,125, 20,236,133, 26, 24,172, 20,197,181, 14, 40,196, 12,236, 53,215, 16,217,132,210,238,174, 4,200,229,
-114, 92,188,120, 17,167, 78,157, 66,207,158, 61,161,211,233,112,240,224, 65, 87, 44,223, 87,188,158, 16,226,242, 2,112,242, 40,
-165,184,124,249, 50,122,247,238,141,252,252,124,176, 44, 11,185, 92, 14,137, 68,226, 90, 37,192,199, 3,112,233,210, 37,152,205,
-102, 12, 24, 48, 0,241,241,241, 42,145, 72,132,136,136, 8, 12, 26, 52, 72,117,240,224, 65,205,165, 75,151,160,215,235,143,129,
-167,203,254,210,165, 75, 96, 25, 41,218, 37, 38,163, 69,124, 2, 24,145, 4,138,136, 88,116, 24, 52, 1, 23, 15,230,162, 94,222,
- 5, 95,114, 40,165,202,234,234,106, 77,113,113, 49, 58,116,232,128,161, 67,135,170, 68, 34,145,118,216,176, 97,100,201,146, 37,
-116,240,224,193,246,250,121, 51, 33, 50, 50, 18,245, 10,138,163, 41,153,114,121, 12, 98, 98,251,194,106,169, 65, 69,229, 97, 88,
- 44,186,209, 54,155, 97, 32,128, 55, 7, 15, 30, 12, 0, 40,189,118, 13,245,242, 36,112,219,244,166, 41,252,242,203, 47,169,235,
-215,175,199,204,153, 51, 49,108,216, 48, 0, 96,119,236,216, 33,206,203,203,195,220,185,115,199,246,233,211,103,167, 63,125,249,
-180,222,136,197,123,126,197, 91,127, 83, 99,248,196,228,232, 58, 67, 5, 54,126,179, 7, 25, 31,125,141,109, 11,231,160, 75,217,
- 21, 44,211, 95, 67,116,116,140,144, 4,120,135,192,221,237,239, 45, 95,165,209, 28, 0,207,216,190,175,207,119, 35,130,189, 4,
- 47, 80,188,126,255,235, 42, 66,200,109,217,222, 30, 75,253, 26,228, 1,120, 42, 3,193, 92,254,199, 87, 57,200,205,205, 85,150,
-150,150,106,172, 86,107,147,199,154, 3,157, 78,135,186,186, 58,141, 94,175, 87,121, 59,150,146,146,210,232,179, 59, 82,101, 66,
-141,149,197,145,114, 59, 74,170,237,136, 59, 40, 70,159,141,103,113,241,194,113,252,254,147, 21,118,177, 8, 86, 22, 48, 91, 41,
-116,148, 69,108, 20,109,146,176,221,151,255,113, 25,251,165,165,165,232,216,177, 35, 46, 92,184,224,114,249,139,197, 98,215,245,
-254,134,243,220,107, 8,112,127,111, 80, 72,176, 26,205,203,222,191,206, 24,247,117, 1,203,178,168,171,171,115, 78,142, 98,177,
- 74, 36, 18,105, 61, 60, 73,226,220,220, 92,164,164,164, 48,139, 23, 47, 46, 93,182,108,153,125,241,226,197, 77,222, 60, 33, 78,
-133,200,100, 44,133,161,246,178,202,225, 48,107, 1,236, 5,240,102,109,109, 45,114,115,115, 93,202,228, 61,247,220, 99,245, 37,
-175,190,127,165,228,228,228,100, 79,152, 48,193, 69,254, 63,252,240, 3,179,121,243,102, 40,149,202,137,254,146,255, 85,163, 5,
-143,231, 29,196,115, 83, 39, 32,245,241, 41, 48,154,245,216,148,171,197,202, 15,179,240,217,216,251,209,165,236,138,192,166,119,
-129, 50,224,169, 4,220,148, 74,128,106,181,154,186,199,116,125,125, 22,112,221,196,126, 67,201, 63,208,152, 58, 71,252,158,217,
-254, 30,174,127, 82,255,242,122,109, 99,253,197, 87,191,224,219, 95, 82, 82, 82,180,221,186,117, 83, 69, 69, 69, 53,121,172, 57,
-136,138,138, 66,183,110,221, 26, 16,189,183, 99,222, 96,114, 68,192, 70,128, 67, 21, 22,148, 57, 28,216, 85,100,198,198,108, 51,
-118, 95,137,197, 89,105, 36,174,212,216,112,185,150, 69,157, 29, 48,218, 41,100, 49,173,125, 18, 51,183,190,223,225,112,192,110,
-183, 35, 38, 38, 6, 97, 97, 97,232,216,177, 35,108, 54,155,235,184,183,130, 64,158,242,184,245,253,118,187, 29, 38,147, 9,148,
- 82,180,111,223, 30,197,197,197,104,211,166, 13,196, 98, 49, 44, 22, 11,172, 86,171,235,255,242, 9, 15,118,232,208, 1,114,185,
- 28,133,133,133,184,114,229,138,198,225,112, 64,175,215,147,159,126,250, 73, 99, 48, 24,208,161, 67, 7, 68, 68, 68, 60,200,119,
-142,234,208,161, 3, 24,214,138,226,195,249,168,190,114, 26,172,195, 6,147,190, 28,151,126,250, 14,214, 58, 29, 39,175, 19, 31,
-229,134, 67, 76, 76,140,134,101, 89,151,167,115,233,210,165,228,248,241,227,168, 39,109, 22, 64,156,183,130, 71,158,176,219, 77,
-176,219, 12, 80,132,182,134, 92, 17, 13,128, 40, 1,216,151, 46, 93, 26,227, 38, 15,107,215,174,229, 10, 40,121,189,231,202,202,
- 74,250,217,103,159,209,140,140, 12,250,175,127,253,235,219,148,148, 20, 76,156, 56,145,243, 6,232,183,108,217,130,212,212,212,
-148,169, 83,167,126,199,167,205, 42, 43, 43,233,231,159,127, 78,167,253,245, 41,140,202,217,131,191,205,158,140,103, 94,152, 15,
-179,213,128,243,231, 46, 35, 35, 99, 35, 54, 63, 60, 4,202,246,173, 2, 30, 27,155, 55,111, 22,230,245, 91, 8,207,112,128,103,
- 34,224, 77, 45, 5,236, 25, 54,240,245,249,166, 89,250,141,196,234, 61,173,125,190,214,127, 99,242, 10, 94,126,153, 22,188,252,
-135, 59,223,243,179, 47, 79, 68,176,228,185,131,115,249,127,242,232,103, 36, 16,247,127, 70, 70,134,203,178,111, 44,222,207, 29,
-119,191,214, 23,124,229, 15,248, 19, 30, 80, 42,149,218,135, 31,126, 88,229, 94,156,198,219,177, 64,112,207, 61,247,224,225,135,
- 31,110,224,234,247,118,172,209,239,119,187, 7,221, 66, 69, 8, 39,128,141, 82,156,212, 89,177,254,172, 5, 95, 30, 40,193,207,
-231,170, 80, 98, 2, 42,205, 14,156, 51, 80, 92,181, 80, 24,172, 54, 85, 83,228,197, 45,205,179, 90,173, 48,153, 76,104,211,166,
- 13,122,245,234, 85,175,232, 69, 99,224,192,129, 46,194,230, 72,187, 49,194,230, 8,221,102,179,193,106,181,130, 16,130,174, 93,
-187,162,186,186, 26,151, 47, 95, 70, 85, 85, 21, 58,117,234, 4,134, 97, 96,181, 90, 97,177, 88, 92,223,241,133,216,216, 88, 85,
-124,124, 60,142, 31, 63,142,239,191,255, 30, 91,183,110,213,108,221,186,117,247,190,125,251, 32, 18,137,240,192, 3, 15,160, 75,
-151, 46, 38,240, 44,100, 19, 27, 27,155, 18, 23, 29,137,202,162, 95,241,251,206, 79,112,252,187,213, 56,249, 93, 6, 46,254,184,
- 25, 50,134,229,228, 21,251,146, 35, 22,139,181,113,113,113,170,136,136, 8, 28, 57,114, 4, 87,174, 92,209, 24,141, 70,165,187,
- 34, 80,239, 9, 96,214,175, 95,143,158, 61,123,250,252,109, 86, 75, 13,106,170,207, 66, 34, 9, 69,139,232,238,154,208,176,118,
-144, 72, 66,149,132, 48,131,185,107,194,171,243,161,249,236, 25,140,233,110,224,148,230,235,240,221,119,223, 65,161, 80,160,103,
-207,158,232,212,169, 19,234,195, 7,118,157, 78,103,200,201,201,105,145,152,152,152, 50,106,212,168, 45,124,251,110, 94,222,119,
-136,136, 8,195,136,145,131,140,137,253,251,224,209,191,206,133,145,216, 81, 94, 86,133,121, 79,191,134,101, 73,247,160,127,171,
-192,149,228,205,155, 55,211,183,223,126, 91, 80, 2,110, 19, 69,192, 27,110,155,189, 0,110,245,170,130, 64, 8,216, 95, 12,124,
-195,169, 64,184, 19, 53,119,236,102,201,115,183,194,159,216, 52, 27, 79,108,154,221,224,189,251, 49,190, 22,187,187, 39,193,155,
- 71,161,185,121, 1,238,158, 0,207,191,124, 17, 30, 30,174, 29, 61,122,180,106,224,192,129,141, 30,115, 63,215,100,187,187, 93,
- 63,122,244,104, 85,120,248, 31,203,242,188, 29,107,210, 58,148,133,170,122,183,105,137,161, 49, 50,220, 31, 37, 69, 91, 57, 3,
- 25,165,144, 91,236,232, 16, 38,134,142, 82,252,102,176,227,116,157, 29,237, 90,197,160,211,253, 35, 27,149,197, 89,253,220, 82,
-191, 14, 29, 58,160,111,223,190,208,233,116,168,174,174, 70,117,117, 53,194,195,195, 49,120,240, 96, 88,173, 86, 87, 77,128,198,
- 8,155, 83, 38,108, 54, 27, 8, 33, 72, 72, 72,128,201,100, 66,121,121, 57,202,202,202, 80, 94, 94,142,186,186, 58, 36, 36, 36,
- 64, 44, 22,187,228, 53, 86, 87,192, 83, 41,139,139,139, 83,117,237,218, 21,231,207,159,199,246,237,219, 81, 80, 80,128,144,144,
- 16,140, 26, 53, 10,125,251,246,253, 78, 46,151, 47, 4,207, 16,128, 82,169,220, 18,215, 42,118, 86,215, 54, 45, 96, 56,247, 19,
- 78,111,255, 8,197, 5,223, 34, 74,230, 64,242,232, 81,232,219,183,239, 28,185, 92,158,203, 71, 86, 68, 68, 4,250,247,239, 15,
- 74, 41, 14, 28, 56,128,194,194, 66, 77,113,113,177,166,170,170, 74,185,100,201, 18, 21, 87, 57, 49, 41, 41, 9,123,247,238,245,
- 41,143,101,109,218, 26,221, 89, 85, 85,249, 49,200,228,209,104,221,246, 1, 77,108,235,129,154,240,136, 78,223,189,243,238,191,
- 31,230,228,125,249,108, 8, 54,252, 96, 65, 99, 74,207,233,211,167,209,178,101, 75, 12, 27, 54,140,189,255,254,251, 97, 52, 26,
- 81, 87, 87,135, 85,171, 86,133,117,239,222,125,210,180,105,211,182,248, 51, 38,126,255,253, 52, 58,118,136,199,180,105, 41, 33,
-175,188,252, 28, 42,107,107, 80, 81, 89,129,244,103, 94,195,107,143,142,198,232, 14,113,205, 34,255,149, 43, 87,162, 87,175, 94,
-248,224,131, 15, 4, 37,224, 38,226,215, 95,127,109,180, 14,192,117, 10,239,237, 66,240,254,172, 42, 72, 77, 77, 37,193,170, 4,
-232, 11,158,133,120,130,161, 4, 4,131,252, 3,149,215, 88,169, 94, 79,203,220,159,146,189, 30, 74,130,171, 40, 80,115,238,203,
- 93,105,112,183,246, 3, 89, 1,224,110,221,221,127,255,253,164,177, 99,158,231, 26, 67, 83,215,243,149,193,225, 1,229, 40,109,
-145,152,194, 94,144,135, 11, 53, 64, 24,145,160, 99, 24,131, 98, 7,129, 72, 38,198,222, 50, 7,204, 44, 16, 43, 19,161,107,210,
- 8,200,187, 37,105,155, 82, 0,108, 54, 27, 68, 34, 17, 58,119,238,140,254,253,251, 67,175,215,195,108, 54,187,214,231, 91,173,
- 86, 68, 71, 71, 99,216,176, 97,216,178,101,139, 43, 36,224, 13, 14,135,195,149,213,223,163, 71, 15,212,187,233, 97, 54,155, 93,
-227,153,243, 36,244,232,209, 3, 85, 85, 85, 48, 24, 12, 77,141,229, 6, 39,102,205,154,165,213,106,181,163,122,246,236,185,219,
-173,112, 79,245,240,225,195,119,203,229,242,153, 0,204,254,180,229,172, 89,179,214,107,181, 90,125,207,158, 61,115,221,228, 85,
- 12, 31, 62,124,149, 92, 46,255,148,175, 28,134, 97,180,109,219,182, 85,141, 27, 55, 14,231,207,159,215,156, 58,117, 10,151, 46,
- 93, 66,120,120,184,166, 69,139, 22, 24, 51,102, 12,254,251,223,255, 34, 41, 41,137,247,111,179,219,141,218,106,221,239, 42,179,
-185, 10, 45,162, 18, 52, 97,225,237, 17, 30,209, 1,117,181,197, 91,222, 90,246, 17,166, 79, 75,198,151,207,134,120,109, 39, 14,
-227,199,143, 71, 94, 94, 30,174, 92,185,194, 84, 85, 85,193,108, 54, 99,239,222,189,226,122,165, 83,239,239,120,152, 48, 97, 60,
- 54,109,218, 2,125,117, 37,174,148, 92,197,179, 79,206,182, 62,255,226, 82,233,163,163,134, 96,152, 69, 15, 72, 2,163,135,205,
-155, 55,211,127,252,227, 31,174,114,208, 93,187,118,197,219,111,191,141, 23, 94,120,129, 78,154, 52,233,206,175,220,121,135, 42,
- 5,183, 76, 1,184, 17,171, 10,130, 65,238, 28, 42, 42, 62,194,203, 5,223, 54, 89,109,207,159,228,191,138,138,143, 80,240,242,
- 31,242,220,137,217,211,101,207,135,180, 43, 62,170, 64,193,183, 47, 7, 77, 94, 48,193,199, 67,192,237, 1,224, 79,127,249, 95,
- 26,156,157,134,168, 84, 71, 45,118, 77,249,238, 93,144,216, 77, 56, 90, 75,145, 95,107,135,148, 16,196, 80, 10, 85,155, 22,136,
-106, 29,171,138, 31,164,244, 97,105, 58, 61, 0,157, 58,117,194,192,129, 3, 97, 50,153, 96,179,217, 32,149, 74, 93,132,205, 89,
-233,177,177,177, 24, 58,116, 40,182,111,223,222,164, 7, 64, 44, 22,163,111,223,190, 32,132,192,104, 52,186,188, 11,156,210,206,
- 85, 23,100, 89, 22,189,123,247,198,193,131, 7,225, 79,114,165, 82,169,212,224,143, 60,145, 48, 56,171,237, 93, 2,207, 76,120,
-111,158, 0, 55, 89,209, 0,170, 0,248, 93,155,152, 97, 24,109,139, 22, 45,208,187,119,111,149, 68, 34,225,150, 63,106, 0,160,
-184,184, 24, 15, 61,244, 16,150, 47, 95,238,151, 76,135,195,162,173, 51, 20, 43,173,214, 26,149, 66,127, 65, 19,209,162, 43, 66,
-194,218, 34, 36,172, 45,118,236, 42, 5, 25,221,180,197, 61,100,200, 16, 34,149, 74,105, 85, 85, 21,198,143, 31,111,141,137,137,
-145,178, 44,139, 75,151, 46, 1, 1, 36, 75, 62,240,192, 16, 34,147,201,104,196,137, 66, 60,249,228,159, 16,159,208, 77,250,246,
-115,127, 98,215,125,248, 41,179, 74,100, 14,168, 47,111,222,188,153, 46, 94,188, 24, 45, 90,180, 64, 73, 73, 9, 20, 10, 5, 88,
-150, 69,104,104, 40,222,120,227, 13,188,252,242,203,130, 18,112,131,145,152,152,216,168, 23,128,215, 50,192, 27,129,219,121, 85,
- 65, 83,132, 19,136,245,223,152, 60, 79, 75,157,115,221,251, 34,237, 96,203,115,247, 4, 4,122,190, 41,175,130,231,230, 63,254,
-202,251, 95, 3,195, 48,218,196,209,227, 72, 85,157, 73, 25,105,183,104, 68, 23,139,112,143,237, 42,194, 99,226, 48,164,119,119,
-196,180,107,169,138, 76, 28,233,115,124, 80, 74,209,185,115,103, 12, 27, 54,204, 21,143, 23,137, 68,176, 88, 44,174,210,189,238,
- 97,130,246,237,219, 99,232,208,161,208,106,189,139, 86, 40, 20, 72, 76, 76,132, 88, 44,134,213,106,117,125,207,125,233,160,251,
- 70, 64, 12,195,160, 95,191,126, 40, 44, 44, 12,164, 25, 40,128,218,250, 87, 48, 96, 8,132,248,189,121,141,122,245,234,197,229,
- 81, 16,150,101,149, 70,163, 17, 22,139, 5,221,187,119,199,138, 21, 43,252,220, 28,135,106,109,214, 90,216,172, 6,149,201, 84,
- 14,153, 44, 10, 18,105,184,134, 97,196,248, 98,253,119,170, 89, 51, 39, 52, 41,175,190,174, 63,121,239,189,247, 88,147,201, 4,
- 0, 72, 72, 72,240,171,252,178, 59,250,247, 31, 64, 68,247,223,255,208,220,127,188,151,231,148, 71,153,132,132,123,145, 48,105,
-210, 44,177, 88,188, 62, 16,153,203,150, 45, 19, 6,245,109,162, 4, 52, 69,254, 55, 85, 1,184, 83, 17,204,101,127,158,196,220,
- 92,107, 61, 88,242,154, 99,113,187, 19, 59,247,222,195,101, 47,116, 34,158, 24,149, 50, 73, 91,111,189, 98, 68, 0,223, 79, 75,
- 75, 67, 84, 84,148, 43,195,159,101, 89,151, 11,159,243, 0,112, 73,127,220,142,128, 93,187,118, 5, 33, 4, 27, 54,108,184, 78,
-222,202,149, 43,145,157,157,237,186,214,225,112,248,220, 14, 88, 42,149, 34, 41, 41, 9,124,178,227,239, 84,101, 45, 44, 44, 12,
- 97, 97, 97,136,137,137,105,198,216,225, 20,129, 90, 48,140, 24,206,116, 44, 86,195, 83, 30, 93,180,104, 17,169,127,158,148, 97,
-152,102,205, 35, 14, 7,187,109,193,130, 5, 4, 0,195,178,172,131, 97, 24, 5,252, 12,191,112, 16,172,251,219, 75, 9,240, 5,
-146,152,152, 40, 36,103, 8, 16, 32, 64,128, 0, 1,255, 99, 96,132, 38, 16, 32, 64,128, 0, 1, 2, 4, 5, 64,128, 0, 1, 2,
- 4, 8, 16, 32, 40, 0, 2, 4, 8, 16, 32, 64,128, 0, 65, 1, 16, 32, 64,128, 0, 1, 2, 4,220, 21,104,176, 10, 96,254,252,
-249, 1,103,112,174, 94,189,250,186,100, 66, 65,158, 32, 79,144,119,247,201, 83,171,213,244,145, 73,106,124,187, 57, 3, 25, 25,
- 25, 12,188,172, 65, 23,218, 79,144,247,198, 27,111,184,174,121,249,229,151,137,208,126, 55, 87,158,223, 10, 0, 55,184, 27,187,
- 56,144, 37, 47,119,178,188, 64,100,222,238,247,235, 5, 82, 0, 17, 0, 66,234,251, 3, 11,160, 2, 65, 88, 67, 29, 76,112,237,
- 16,140,123,246,214,166,183,170,248, 80,109,237,255,111,239,202,195,154,184,214,247, 59, 73, 8, 1, 65, 22, 17, 17,149, 42, 32,
-138,184, 32,238, 90,149, 88,144,130,128, 91,209,254,106,123,107, 55,162,183,215,122, 91, 84,172,116,177, 11,173,120,181,155,183,
-173,161,183, 85,219,122,111, 43,181,130, 59,149, 26, 92,170, 86,197, 21,180, 42,224, 86, 65,169,202, 78, 66,150, 57,191, 63,194,
- 96, 8, 89,102,146, 32,216,206,251, 60, 60, 9, 39,147, 47, 51,231,204,156,247,253,190,115,206,119,106, 35, 15, 29, 58,164,216,
-183,111, 31, 0, 96,226,196,137, 24, 59,118, 44,235, 84,194,237,209, 14, 83,167,201, 16, 23, 27,161, 5,100, 34,153, 76, 70,255,
-213, 18, 55,241,176,142,244,244,116,146,144, 16,212,226,127,107, 34,128, 71, 59, 71, 0, 24,144, 77,173, 55,128,160,102,217,190,
-111,186,169, 14,194,158,221,255, 28,109,207,212,245,218,115,205, 29,253,122, 25,226, 47, 58,115, 96, 93, 81,209,233, 71,252,122,
- 4,117,171,174,214,192,195,195, 9, 55,111,148,208, 97, 97, 67,238,134, 13, 30, 63, 18,192,101, 46, 6, 79, 28,254,140,148,150,
- 92, 68,201, 21, 21,174,151, 19,244,234, 78, 33,168,183, 4,129, 65, 33,136, 24,243,247, 14,241,240,155, 18, 18,204, 94, 3,237,
- 65,100,103,207,158, 85,132,135,239,198,218,181, 13,200,207, 7,222,124,243, 39, 92,191,126, 93,225,231,231, 7,137, 68,130,178,
-178, 50,233,244,233,211,225, 8, 65,112,224,192, 1, 82, 93, 93, 45,141,142,142,134,179,179,179, 45,246, 4, 0, 16, 23, 27, 65,
- 39, 39, 39,139,128, 76,228,100,235, 31, 21, 56,118,219, 94, 30,127, 2,168,213,169,200,205, 77, 70, 76, 76, 38, 18, 18, 50,154,
- 35, 2,188, 16,184, 63,224, 19, 1,113,128, 33,217, 83, 20, 64,127,239,245,167,189, 86,141,186,254,169,220,221,223, 47, 11, 14,
-238,219,127,198,180,137,232,213,163, 51, 60, 61,156, 81, 89,165,194,141,242, 94,130, 75,165,149, 62,219,183,126,165,136,121,116,
-246,106, 39,113,167, 53,214,236,157, 59,187, 47,242,242,197,237, 10, 33,106, 48,123, 10, 48,110, 24, 16,244, 16, 80,124,133,224,
-224,113, 37,118, 42, 78, 99,199,230,197,164, 79, 72,188,116,192, 32,235, 25,237,218, 42,218, 97, 46,138, 32,151,203,169,246, 18,
- 1,119,239,222,197, 75, 47, 53,160,107, 87, 32, 41, 9, 88,177,162, 14, 39, 79,158,132, 86,171,133, 68, 34,129,175,175,175, 98,
-251,246,237,232,219,183,175,116,248,240,225,249, 28, 59,128,200,194,194, 66,116,235,214, 77, 17, 29, 29, 77,125,251,237,183, 0,
-160,200,203,203,195, 19, 79, 60,129,145, 35, 71,114,189, 86, 49, 0,236,220,117, 66, 0,100,210,250, 87,189,134,230,123, 16, 30,
-134,222, 62, 0,204,156,185, 25,185,185,250,215,228,228, 18, 48, 17, 1, 62, 26,112,127,137,223,176,188,221, 82, 1,119,116,144,
- 77, 94,205, 34,224,207, 76,254, 0, 68,123,114, 55,189, 38,157, 16, 17, 50, 98,104,119, 80,148, 62,171, 27, 77, 19,116,118,115,
- 70,167, 32, 49,122,247,242, 64, 15, 63,183,135,246,228,110,122, 45, 46,225,153, 44, 0, 55, 45, 25,188,124,113,187, 98,252,176,
- 26,252,243, 25, 64, 40,212, 11, 40,141, 22,232,228, 10,132, 6, 3,163,195,129,237,138, 26, 28, 57,189, 93, 49, 96,208, 68,155,
- 30,124, 71, 13, 1,152,251, 62, 35, 2,238,119, 99,120,123,123, 99,251,118, 23,244,234,165, 68,126, 62, 80, 89, 41, 66,112,112,
- 48,130,131,131, 81, 87, 87,135,210,210, 82,228,231,231,163,166,166, 70,209,175, 95, 63,214, 67, 3, 63,254,248, 99,164, 82,169,
- 84,136,197, 98, 84, 86,182,140,100, 41,149, 74,124,249,229,151, 40, 45, 45, 37,143, 63,254, 56,151,250,164, 1, 32, 39, 91, 14,
- 64, 38,208,191,218,142, 99,199,142, 53,215, 55,179,137,146,169, 50, 54,247,133, 97,219,178, 45,179,234, 20, 16, 18,137, 11, 23,
- 48,178,174, 78,209,229,198, 13,252,238,235,139, 19,157, 59, 75,157, 6, 12, 0,161,168,124, 91,175,153,235,134, 81,108,108,176,
- 45,107,107,123,134,161,255,228,228, 92, 36, 36, 4, 53,191, 50, 72, 72, 8,226, 69,192,125,128, 49,217, 51,251, 3, 24,150,243,
-171, 0,140, 31,250, 63,249,245, 21,157, 57,176, 34, 56, 56, 56,100,100, 68,247, 22,229, 2, 1, 5,177, 88, 8, 23,137, 8, 78,
- 78, 2, 4,245,241, 66, 80, 80,176,111,209,153, 3,219, 45, 9,197, 19,135, 63, 35, 66,212,224,229,103, 1, 85, 35,112,249, 58,
- 80, 89, 13, 84,213, 0,255,221, 10, 44, 88, 14, 44, 91, 5,140,141, 0, 4,164, 6, 39, 14,127,198,123,139, 6, 24, 52,104,144,
- 52, 39, 39, 20,190,190,192, 19, 79,136,224,231, 55, 2, 19, 39, 78,148, 38, 36, 36, 80,241,241,241,210,152,152, 24,116,235,214,
- 13, 39, 78,156,192,247,223,127,175,248,233,167,159, 34, 27, 27, 27, 35, 45,217,252,246,219,111, 35, 27, 27, 27, 21, 78, 78, 78,
- 22,127, 91,161, 80, 96,211,166, 77,145,108, 72,118,255,254,253, 4,128, 90, 46,151,139,239,137,128,123,100,186,127,255,126,194,
- 85, 64, 29, 61,122,180,249,207, 82,153, 45,162,142,109,153, 37,242, 15,252,237, 55,197,244, 83,167, 20,189, 46, 22, 67, 92, 83,
-131,238, 23,127, 67,228,145,195,138,174,167, 79, 43, 64, 72,164, 45,237,125,244,232, 81, 28, 59,118,140, 20, 22, 22, 70,218,122,
-207, 48, 54,216,148,177,181,103, 76,244,108,202,172,129, 33,125,230, 85,157, 16,204, 63,240,247,137,248,217,164, 1,126, 96, 35,
- 0,109,233,169,145, 54, 60, 63, 71,133,152, 25,251,230,126,199,210,111, 20,157, 59, 29, 59,107,134,180,153,244, 77, 65,226, 44,
- 66, 85,117, 35, 66,130,188,145,181, 69, 17, 20, 54,120,188,135, 57,123,165, 37, 23, 49,123,138,254,253,238,253,192,167,223, 0,
-147,199, 3,113,145,192,111,197,192,201, 34, 2, 23, 9,133,161, 97, 64,204, 68,224,199,220,139,136, 24,227, 56,207,221,150,186,
-107,163, 57, 21, 54,193,221,221, 61,191,174, 78, 63,223,242,137, 39,158,192,184,113,227, 40,195,207,238,222,189, 43, 13, 13, 21,
- 41, 18, 19, 1,138, 58,142,138,138, 6,197,239,191, 7, 89, 10,255, 69, 82, 20,165, 96,187, 57, 76, 69, 69,133,194,154,238,157,
- 51,103, 14, 54,110,220,136,141, 27, 55,146, 57,115,230,180,104,139,253,251,247,147,141, 27, 55, 54, 31,215, 81,250, 3,182,101,
-230,208, 88, 88,136, 62, 5, 5, 80, 11, 4,112,162, 0, 45, 77, 64,107,116,160,181, 90,116, 61,176, 31,197,132,160,243,208,161,
- 54, 19,184,171,171,171,226,248,241,227,210,185,115,231,230,219,106, 3, 64, 11,143,220, 84,153, 45,209, 5,123,201,223, 28,209,
-231, 26, 69, 2,120,180, 63, 76, 10, 0,115,147,223,108, 33, 28,107,132,200,213,222,253, 30,163,181,101,198,184,165, 73,133,182,
-216, 51,245, 29, 27, 39, 46,138,252,252,131, 6,248,251,185,129, 16,224,192,225,235,104, 80,234,119, 93,141, 24,226,135,174, 93,
- 92,112,253, 70, 45, 93,124,185, 82, 32, 18, 9,208, 55,208, 11,254,254,193,158,208,111,209,106, 18, 37, 87, 84, 24, 55, 12,104,
-212, 0,187,246, 1,138,195, 4,254,221, 40, 4, 6, 0,143, 60, 12,244, 15,162, 32, 18,234,183, 22, 31, 29, 14,252, 75,174, 98,
- 85,223,134, 33,121, 54,239,217, 40, 94,195,177,126,195,122,119,228, 10, 3, 91,208,180,157, 43, 6, 15, 30, 44, 53,254, 76, 40,
- 20, 42, 6, 12,168,192,178,101,122,121,250,222,123, 23,113,229, 74,152, 89, 91, 42,149,202,170,231,111,136, 43, 87,174, 88, 61,
-102,194,132, 9,212,132, 9, 19,154,201,126,227,198,141,196, 88, 32, 76,152, 48,161, 93,234,174, 45,188,127, 0,232,123,251,142,
- 66,173,209, 64, 32, 16,128, 8,133,160,105, 26, 26,154, 6,173,211, 65,167,163,209,179,188, 92, 81, 51,116,168,205,215,220,208,
-208, 0, 0,138, 99,199,142,129,162, 40,206,243, 59,218, 66, 4, 56,202,243,207, 77,206, 69, 76,102, 12,102,110, 6,146,115,245,
-239,115,147,115,155,197,129,120, 91, 49,207,188,247, 17,134,115, 2, 88,205, 1, 48,183, 10,192,214,213, 1,230, 60, 46, 91, 60,
- 49, 75,162,193, 86,129, 98,233,186,141,191,203,214,139, 48, 55,169,208, 22,123,150,190,195,252, 14, 5,128,222,100,117,238, 2,
-173,159,237,239, 12, 0,184, 94, 86, 3,165, 82, 11, 0, 8, 14,244, 66,215, 46, 46, 56, 93, 84, 33,184,112,233, 46, 36, 18, 33,
-130,250,120,162,178, 90, 13, 0,102, 13, 95, 47, 39, 8,122, 72,255,251,143, 78, 0,194, 7, 80,112, 22, 3, 90,173, 62, 18,224,
-233, 14,148, 94, 3, 98, 38, 0, 15,245,212, 31,223,158, 48, 36,125, 91,198,133, 59, 58, 42, 42, 42,218, 44,138,210, 68,242,205,
- 30,127,123,147,191, 33, 50, 50, 50, 72,106,106, 42,101,235,231,198,112, 42, 41, 70,163, 70, 13, 74, 40,130,142, 16, 80, 0,180,
- 58, 26, 26, 45, 13,162,211,129,186,116, 1, 64,156,221,231, 93, 88, 88, 8, 31, 31, 31, 69,117,117,181,212,195,195,195,102, 17,
- 96,173,236,126,145,127, 90, 90, 26,149,158,158, 78,102,110,110, 41, 8, 0, 32, 38, 51, 6,226,109,197,216,182,173,164,121, 37,
- 0, 51, 97,208,219,219,155,103,234,251, 76,254,102, 5, 64, 71,135, 37, 66,180,133, 96,237, 89,226,104,209,110, 27,175, 38,160,
-102, 85,114,253, 13,202,195,195, 9,149, 85, 42,248,120,187, 34, 41,177, 63,180, 58, 26,206,206, 66, 8, 5, 2, 16, 66, 16, 63,
- 57, 8, 83,162,131, 64, 81,192,157, 74, 37, 60, 60,156, 0,224,174, 57,131,189,186, 83, 40,185, 74,189,136,105, 47, 0, 0, 32,
- 0, 73, 68, 65, 84,208, 63, 8,152, 52, 70,223,235,252, 86, 12, 12,238, 15,120,117, 6, 98, 35, 1,154, 6, 68, 66,224,226,101,
-253,241,108,219,150,203,123, 91, 19, 97, 88, 19,164,109, 13,154,166, 35,123,244,232,129,146,146, 18,236,223,191, 95, 49,126,252,
-120,169,155,155, 27, 4, 2, 65, 62, 0,232,116, 58,233,185,115,190,138,183,222,186, 1,138,162, 80, 81, 17,130,144,144,222,184,
-120,241,162, 57,123, 38,203, 55,109,218,212, 58,138, 68, 8,102,207,158,205,233,154, 13, 69, 64, 71, 34,127, 71,136, 4, 67,220,
-237,217, 3,226,223, 46,128, 56, 1, 98,154,232, 39,182,234,180, 80, 19, 29, 26,180, 90, 40,131,251, 59,228,220, 7, 14, 28, 8,
-138,162,108, 34,127, 0, 24, 57,114, 36, 70,140, 24, 65, 29, 61,122,148, 88, 42,179,134,166,136, 65, 11,194, 55, 85,198, 5,201,
-185,247,136, 31, 64, 43,207,159,153, 48,184,109, 91, 9,207,212,237, 64,254, 15,172, 0,104,107, 65,225, 40, 66, 32, 4, 16,204,
-174,108, 51, 17,192,172, 92, 16,204,170,100,227,253, 3,128,232,230,141,146,219,215,111,244,244,241,241,118,197, 7,159, 31,195,
-132,177,189, 16, 49,184, 27, 40, 39,170,121, 69, 64,211,214,241,184,126,163, 22, 55,111,148, 92, 6, 96,214,173, 12,234, 45,193,
- 47, 5, 74,244, 15, 2,124,134, 1, 75,231, 3, 11,231, 2, 30,238,250,176,255, 91,159, 0,203, 23,234,143,253,165, 64,127,188,
-173, 4,237, 40, 79,189, 35,229, 2, 56,119,238, 28, 36, 18,125,157,236,216,177, 3,215,174, 93, 83,244,235,215, 79, 58,105,210,
- 36,212,214,214, 70,122,123,123, 43, 14, 30,212, 34, 63, 31, 24, 49, 98, 56, 2, 2, 2,164, 61,123,246, 4, 0,133, 41,123,157,
- 58,117,130, 90,173,102,245,219, 90,173,246,129,127,118, 13,201,159,141, 16, 96, 43, 2, 74,186,250, 74,157,207,156, 81,208,132,
-160,147, 64, 4,161,144,130,150,232,208,160,209,160, 86,173, 70,153,191,191,212,199,142,243,118,117,117, 5, 69, 81,210, 17, 35,
- 70,228,219,106,131, 33,122,107,101,247, 91, 4,164,165,165, 81,201, 77,158,189, 49,249, 27,122,255, 60,218,151,252,121, 1,112,
- 63, 60,188, 54, 94, 82,216, 44, 2,216, 9, 13,109, 88,216,144,178,226,203,149, 62, 67,194,124,177,116,225,104,172,255,223, 89,
-184, 72, 68, 8, 31,232, 11,138,162, 12, 60, 73,130,226,203,149, 8, 11, 27, 82, 8,160,214,156,193,192,160, 16,236,216,123, 26,
-115,103, 2,164, 20, 24, 61, 3, 8,236, 5,108,204, 49, 56,104, 33,160,211, 1, 59,246,234,143,111, 47, 88,138, 20,181,215, 50,
-192,187,119,239, 42, 66, 67, 47, 99,221, 58, 0,208,225,237,183,207,224,228,201, 6, 69, 67, 67, 3,106,107,107, 81, 90, 90,138,
- 91,183,110, 33, 34, 34, 2,179,103,207,182,186, 12,144, 16, 34,165,105, 90, 33, 16, 88, 95,224,195, 8, 15,174, 96,134, 0, 54,
-110,220,136, 9, 19, 38,180,235,243,149,154,154, 74, 49,196,111,109, 8,192,218, 49,134,240, 26, 58, 20,119,212,106,232, 20,249,
- 80,139,157,224, 70, 68, 80,209, 52,170,213,106,212, 78,122, 4, 62,195,134,217, 24, 21,164, 48, 98,196, 8,155,199,253, 13,109,
- 24, 18,189,169, 50,123, 68,192,177, 99,199, 44,150,177,129, 41,242,103, 60,127, 0,252,132,192,118, 38,127, 94, 0, 60,224,104,
- 30,255,103, 63, 12,160, 11, 27, 60,126,210,246,173, 95, 29,252,181,192,189,255,168, 97,254,136,141, 10,196,238,159, 75,177,227,
- 39,253,195,249, 90,202, 88,208, 52,193,175, 5,101, 40, 41, 41,190, 26,159,248,236, 63, 0,104,204, 25,140, 24,243,119,106,199,
-230,197,228,195,175,244, 75, 1,215,190,171, 95,250, 23, 53, 78,191, 20,240,195,215,245,228,255,225, 87,128, 14,157,109,206, 8,
-104,175,103,110, 45,130,208, 94,171, 0,234,235,235, 49,116,168, 10, 35, 70,232,255, 31, 62,156, 96,247,238, 82, 92,188,120,145,
- 73, 4,132,200,200, 72,244,237,219,151, 85, 14,128,201,147, 39,231,103,103,103, 91,141, 2,104,181, 90,120,122,122, 74,185,158,
-111,211,114,192,230,149, 1,251,247,239, 39,182, 14, 3,140, 28, 57,146, 85, 25, 23, 17, 96,237, 56,214, 70, 5,130,124,245,168,
- 81,210,243, 78, 78,232, 85, 94,174,112,187,118, 13,170, 62,125,112,197,215, 87,234, 29, 17, 1, 52, 13,209,216, 64,176,142, 32,
-233, 86, 54, 76,149,177,173, 75,227,227, 24,194,183, 86,102, 11,140, 73,159,137, 8,216, 59,132,199,163, 53,216, 76,140,230, 5,
- 64, 27,122,230, 29,244, 55,238,196, 60, 58,251,163,220,221,223, 47,254,189,188, 54, 40,184,143, 23,166, 76, 14,130,151,167, 4,
-149, 85, 42,156, 60,123, 11,197,151, 43, 81, 82, 82,124, 40,230,209,217, 63, 2,184,110,205, 96,159,144,120,233,129,130,237,138,
- 67, 5, 53,152, 50, 9,248,226,125,125, 38,192,146,171,192,151,155,244,158,191, 14,157,209, 39, 36, 94,106,235,181,218, 51, 4,
-192,150,252,219, 99, 14, 64,121,121,185,212,203,203, 71,113,252,248, 31, 0,128,139, 23, 59, 99,196,136, 1,232,210,165, 11, 36,
- 18, 9,202,203,203,165,241,241,241,156, 82, 1,247,238,221, 91,122,225,194, 5,133, 97, 68,199,152,252,131,131,131, 49,114,228,
- 72, 78, 36,198,172, 2, 48, 24,251,103, 38, 4,218, 36, 2, 76, 17,161,173,228,104,141,220, 57,145,191,129, 8,232, 50,124, 56,
- 26, 0,170,161,169,200,222,169,106,246,146, 63,151,122, 99,251, 91,142,182,199,150,252,213, 9,193, 0, 63,254,127, 95, 34, 1,
-230,132, 1,167,101,128,182, 78,150,227,186, 12,208, 86,123,182,218,116,244,249, 89,170, 39, 71,157,159, 61, 19, 23,157,196,157,
-228,241,137,207,126, 87,116,230,192,103, 91,114,246, 5,250,245, 8, 26,109,176, 23,192,145,176,176, 33, 71,227, 19,159, 93, 6,
-160,158,141,189, 1,131, 38,230, 15, 24, 52,145, 58,113,248, 51,242,253,142,139,120,239,211,142,183, 23, 64, 71, 36,127, 0,120,
-252,241,199,113,250,244,105, 60,243,204,241,166, 8,192,112,204,154, 53, 68,234,234,234,154,111,171,205,240,240,240,252,240,240,
-112,106,235,214,173,145,181,181,181, 10,161, 80, 8,129, 64, 0,173, 86, 11,177, 88, 12, 55, 55, 55,169, 3,200,223, 33, 34,128,
-199,159, 19,105,105,105, 84,122,114, 58,241, 95,224, 47, 69,111,211,199,148, 37,231, 42,248,249, 0,237, 11, 17,219,142,210,209,
- 29,111, 91,216,179,229,183, 30,228,235,181, 19,213, 97,131,199, 63, 25, 54,120, 60,147, 49,198, 13,128, 15,128,114, 0, 74, 52,
-165,125,229,130,136, 49,127,167,108, 73,242,211,214,245,208,145,242, 74, 24,195,213,213, 53,127,204,152, 49,212,152, 49,142,175,
-184,196,196,196,124, 56, 40,185, 37, 51,238,111, 76,242, 19, 38, 76,160, 54,110,220, 72, 58,194,124, 0, 30, 29, 79, 4, 88, 62,
- 0, 60,249,183, 1,216,102, 1, 4, 0, 42, 60, 60,156, 31,123,225,193,131, 7, 15, 30, 60,254, 98,224,247, 2,224,193,131, 7,
- 15, 30, 60,120, 1,192,131, 7, 15, 30, 60,120,240,224, 5, 0, 15, 30, 60,120,240,224,193,131, 23, 0, 60,120,240,224,193,131,
- 7,143, 63, 7, 90,172, 2,152, 63,127,190,205,179, 50, 77, 37,114,224,237,181,141, 61, 54,155,216,180,167,189,188,188,188, 72,
- 0,138,172,172, 44,135,216,219,187,119,111, 36, 77,211, 14,179,199,223,127,237,102,111, 54,128, 77,109,124,126, 78, 0, 36,208,
- 39,173, 81, 65,191,154,133,192, 40,137, 13,223, 30,188,189, 63,187, 61,206, 2,192, 26, 57,152, 3,151,165, 84,142,182,119, 63,
-145,156, 84, 77, 32, 22, 35,115,163, 11,171,243,203,203,203,139,204,202,202, 82, 56,234,122, 13,237,173, 94,189, 90,154,146,146,
-162,176,101,123, 97, 83,246, 10, 63,237,140,129, 47,214,192, 30,123, 12,166,141,216,169, 56,125, 65, 7, 0,200,204,204, 36,201,
-201,201,118,181,103, 72,183,239,161,212,122,195,197,197, 5, 89, 89, 89, 36, 41, 41,169,163,220, 31, 93,231,189,146,242,205,218,
- 15, 86, 63, 5,224, 15, 7,216, 11,152,255,210,203, 95,124,254,201,135, 79,154,177,231, 4, 64, 11,203, 25,217,156,160,207,220,
-216,117,225,194,151,191,249,248,227, 15,159,130,126, 51, 39, 26, 14,200,228,102,252, 28,115,188, 55, 14,183, 85, 67, 80, 20, 21,
- 39, 16, 8, 6, 8, 4,130, 72,138,162, 66, 0,184,170,213,234, 92,161, 80,232, 73,211,116, 5, 33,228,117, 0,119, 28, 89, 7,
- 60,120,152,194, 83, 37, 37,228,155,160, 32,135,245, 81,201, 50, 25,201,108, 35, 78, 20, 89,123,200, 9, 33,150, 30, 58,206, 29,
-134,163,236,113,245, 96, 29,137, 61,123,246, 88,237, 68, 24,114, 77, 77, 77,133,175,175,175,201, 12,120, 41, 41, 41, 10,182,191,
-201,216, 99,136,255,200,145, 35,205, 66,192, 30,123,244,185, 55, 32, 24,240, 54,190,222,171, 79, 29, 75,159,123,163,249, 24,193,
-128,183, 57,213, 75,231,154, 87, 8, 77,128,239,118,235,109,197, 78,116, 66, 88,112, 17, 50, 51, 51, 9, 0,112, 21, 2,213,218,
-239, 34,171,174,220,129,146,154,168,168,111,236,132,216,152, 42,244,240,163,112,252,248, 33, 82, 83,163,194,164, 73,147,218, 85,
- 8,204, 95,184,240, 37,208,244,228,249, 11, 23,190,244,249,199, 31,191,110,183,189, 5, 11, 95, 32, 52, 29, 61,127,193,194,151,
- 62, 95, 99,210,158,134,133, 25, 13, 0,106,193,130,133, 47,209,180,110,242,130, 5, 11, 95, 90, 99,218,150, 0, 54,228,122,176,
- 19,106,195,251,239,135, 31,126, 80,204,152, 49, 67, 58,121,242,228,124,123,140, 10,133,194, 88,145, 72, 52, 65, 36, 18, 61, 46,
- 20, 10,189, 4, 2,129, 91, 70, 70,134, 96,241,226,197,207,234,116, 58,104,245,120, 92,167,211, 37, 0,248,165, 73, 4,168,155,
-250,191, 54, 31, 6,221,177, 99, 7, 97,219,223,197,197,197,113,186,167,119,238,220, 73,236,249, 62, 15,199,195,101,229, 74, 64,
- 46,119,152, 61,229,146, 37,118,125,159,201, 8,200,105, 59, 96, 54,228, 63,108,216, 48, 20, 20, 20,112,242,248, 45,145, 60, 27,
-123,166,236,167,166,166,162,180,180, 20, 89, 89, 89, 14,221,214, 53, 57, 33,147,192, 37, 4,153,155, 34, 41, 0,200,204,242,160,
-184,144,255,234,213,171,165, 21, 21, 21, 10,115,228,159,154,154,138,140,140, 12, 78,228, 15, 0, 73, 73, 73, 24, 61,122,180,116,
-244,232,209,118,217, 99,200,158,121, 93,241, 14, 90,144,255,146,153, 18,172,220,172, 98, 85, 87, 30,202, 20, 50, 48, 68,136,122,
- 37,193, 43, 79, 73,112,164, 72, 11,101, 61, 65,131, 26,144,134, 23,161,232,162,142, 83, 52,160,244,250,135,164,234,102, 39,184,
-119, 22,195,175,187, 27,186,118, 11,198,213, 18, 53,122, 15,208,192, 73, 82,129,188, 45,183,177,101,203, 22, 50,125,250,244,118,
-233,240,100, 50,153,179, 79,143, 30, 11,191, 61,114,148,138,237,215,247, 37,153, 76,246,174, 92, 46,111,180,199, 94, 87,191, 30,
- 11,191,219,123,132,138, 14,239,103,151, 61,153, 76, 38,246,243,235,190,240, 39,197, 1,106,248,144, 48,115,182,232,118,168,182,
-230,237, 7,179,178,178, 20, 9, 9, 9,216,188,121,179, 98,242,228,201,173,218, 48, 34, 34,130,188,245,214, 91, 72, 72, 72,176,
-216,190, 34,145,104,146, 88, 44, 30, 40, 22,139, 23,136,197, 98,215,235,215,175,163,111,223,190, 16, 10,133,112,119,119, 71,113,
-113, 49,220,220,220, 68,199,142, 29,243, 60,124,248,240,129, 23, 95,124,177, 55,128,171, 0,196,230,234, 32, 57, 57,185,149,179,
- 98,216,111, 49,229, 20, 69, 33, 51, 51,211,234,253,183,117,235, 86,179, 54, 12,203, 9, 33,136,139,139,227, 84,161, 57, 57, 57,
-118,125,191, 45,113,234,212,169,200,240,240,240,124, 71,216,186,117,235, 22,161,105, 26, 16, 84, 65,221,168,130,216, 89, 2,208,
-158, 16, 8, 4,232,214,173, 27, 53,216, 56,114,105, 33, 25,206,195, 15, 63, 76, 54,111,222, 12,115,246,102,206,156,137,131, 7,
- 15, 82,182,158, 31, 0,148,223, 58, 79, 12,207,207,158,107,183, 37,154, 96, 46, 13, 48, 43, 1,192,150,252,217, 34, 53, 53,213,
-234, 49,108,136,203, 28,249,175, 88,177, 2, 75,151, 46,109, 81,110,171, 8, 72, 30,150, 73,208, 37, 4,153, 63, 69, 82,134, 30,
-127,116,116, 52, 5, 0,204,107,113,113, 49, 97, 67,214,150,200,191, 41, 50, 96,213,107,103,194,244,134, 30,190,241,208,130, 45,
-246, 44,121,248, 75,102,178,223, 41,206, 71,249, 10,233,251,144, 16, 46,206, 20, 30,242, 23,226,118, 37, 13,141, 86,136, 59, 85,
- 4,213,117, 4,197,191,211,128, 0,240,113, 61,131,188,188,188,200,168,168, 40,139,157,194,213,107, 31, 68,134, 6, 7,225,240,
-205, 91,232, 19,208, 21, 3, 7, 7, 66,232,236,141,135,250, 84,162, 82,169, 66,197, 77, 29,126,191,165,130,171,168, 20,121,121,
-238, 86,237,181, 17,230, 60,181,120,177,184,180,187, 63,156,135, 13, 23,168, 14,236,159, 3,224, 43, 27,236, 48,158,248,156,167,
- 95, 90, 36,254, 93,236, 7,183,144, 8, 65, 77,225, 65, 91,237, 1,192,156, 23, 23,190, 44,134,179, 59,250,244, 11, 19, 92, 56,
-123,194, 30, 91,142, 4,205, 60, 35, 20, 69, 65, 34,145, 72, 1, 40,140,239,137, 97,195,134,177, 34,127, 0,112,114,114,242,148,
- 72, 36,115,111,223,190,237, 26, 18, 18,130,161, 67,135, 66, 36, 18,225,147, 79, 62,129, 78,167,195,160, 65,131,240,227,143, 63,
-226,216,177, 99, 56,115,230, 12,132, 66,225,103, 58,157,110,170, 37,155, 83,167, 78,109,238,231,172,245,131,108, 8, 87, 46,151,
- 75,253,252,252, 20,132, 16,139, 14,208,205,155, 55, 57,239,149,193,216,182,245,251, 12, 81,159, 63,127,222, 98,191, 17, 26, 26,
- 42,229, 74,230,231,207,159, 87, 84, 87, 87,195,195,195, 67,106,143, 16, 56,113,242, 16,121,235,157,249,232,212,201,165,213,103,
-245,245, 74,228,252,120, 26,103,228,114,106, 74,247,238,228,122, 98,162,249,190,253,192,106,125, 99, 30, 88,141,238,147,226, 33,
-137, 24, 14, 93, 72, 88,203,240,217,119, 27,224,245,254,116, 12, 48, 24, 42, 82, 62,250, 60, 62,183,114,126,203,210,230,193,187,
-139,171,190,224,141,143,144,178,232, 25, 0,192,221, 59, 13,120, 47,125, 45,137, 24, 58,214,102, 17,224,232, 33, 5,139, 2,128,
-241,216,173,121,234, 29, 5,165,165,165, 88,186,116,169, 77, 2,194, 18,244,158,126, 50,181,103,207, 30,146,149, 57, 18, 16, 43,
- 9,155,177,127, 83,100,109, 76,202,150,134, 5,204,193, 80, 80, 28, 57,114, 68, 49,122,244,232, 22,161,127,174,246,254,187,216,
-205,108,231, 54,103, 85, 61,107, 59, 52, 77, 71, 58,187, 82, 16, 8, 0, 87, 23,160,170,134, 70, 35, 33,232,228, 66, 65, 69, 3,
-202, 70,130,158, 93, 5,160,181,192,165,235, 58,148,150,150, 42, 96, 33, 61,237,185,162, 31, 34, 7, 14,236,175, 16,139, 9, 94,
-152, 59, 10, 58, 29,193,205, 10, 53,174,221,168, 2,156,174,195,197,171, 17,229, 21, 87, 32, 16, 87,227,220,185, 42,120,120, 89,
-182,215, 86,112,246,246,126,227,241,191,253,205,249, 53, 26,240, 90,154,230,118,235,244,169,215,109, 36, 89, 2, 0, 18, 15,239,
- 55,254,239,201,191, 57,175,186,172, 67,207,217,169,110, 23, 74,207,152,178,103,117, 71, 54,153, 76,134,206, 30,158,111,204,121,
-242, 41,231, 51,215, 42,145,248, 68,178,219,191,223, 73,177,245,220,204, 70,242,204,149, 91, 17,222, 58,230, 25,137,143,143, 71,
- 84, 84, 84,126, 86, 86, 22,148, 74,101,115, 27, 50,158,127,124,124, 60,171, 54,117,118,118, 30, 91, 95, 95,223, 63, 52, 52, 20,
- 82,169, 20, 41, 41, 41,120,238,185,231,244,157,185, 70,131,245,235,215,163,160,160, 0, 39, 78,156,192,247,223,127, 15,165, 82,
- 25, 76,211,116,172, 37,155, 83,166, 76,113,232,253,180, 99,199, 14, 86, 67,115, 20, 69, 41,184,134,240, 13,109,219,242,253,166,
-208,112,126,117,117, 53,202,202,202, 76,126,238,239,239, 15, 91, 9,188,172,172, 12,101,101,101,118, 9,129, 51,167, 47,226,155,
- 13,219, 49,126,252, 88,132, 13,234,209, 92, 94,116,246, 6, 14, 28, 56,132, 31, 55,255, 76,178, 94,125, 21,215, 19, 19,225, 50,
-110, 28,148,191,252, 98,210, 78,230,248, 20, 10, 0, 46,109, 88, 67, 6, 87,236,198, 83,123,183, 67, 23, 18, 6,229,162,229, 0,
- 0,151, 85,203,225,118,177, 8,139, 75,197,232,251,244,130,123,245, 88,127,239, 57,181,116,126, 81,209,227, 90,157, 95,222,158,
- 95,112,230,244, 69, 68, 12, 29,107,243,253, 99,203,144,130, 97,184,223, 82, 52, 64,196,213, 99,119, 52,209,218,139,172,172, 44,
-187,190,159,156, 41, 35,232, 14,100, 38,232, 59,174,204,130,228, 22, 97,126,189,199, 95, 77,140, 35, 1,108,201,186,162,162,162,
- 5, 57,219, 66,214,108,193,136, 14,153, 76, 70,172,229,131,182,228,217, 48, 96,194,255,230,236, 17, 66,200,237,115,175,160,123,
- 83,232,191, 89, 49,235, 8, 84,106, 64,211, 84,166,209, 18, 16,129,254,253,217, 51, 5,204, 42, 1,147,112,119,175, 86,212, 43,
- 5,240,241,246, 68,213,221, 6, 84, 85, 87,225,200,241,155,184,113,139, 64,220,169, 1, 61,130,235,160,108,184,141,190,131, 53,
-232, 29,218,136,239,191, 40,192,238,221,187, 35,239,227, 45, 39,144,201,100, 81, 51, 95, 72,238, 86,230,225,133, 18, 45,224, 18,
- 53, 25, 2,175, 46, 62, 50,153,108,178, 92, 46,255,201,128,172,157, 96, 48,238,109,174,223,151,201,100,209, 73,115, 95,232,246,
-135,192, 3, 87,235, 52,240,140,136,130,200,221,203,216, 30,192,110, 2, 91,204,180,233, 51,186, 17,161, 51,170,235, 27, 49,112,
-216, 24,184,117,246, 48,101,171, 93,192,120,255, 20, 69, 97,219,182,109, 36, 62, 62, 30,219,183,111,135,139,139, 75,100,106,106,
-170,130, 11,249, 3,112,174,170,170,122, 90,163,209, 8, 92, 93, 93, 49, 97,194, 4,172, 90,181, 10, 78, 78, 78,144,201,100,216,
-176, 97, 3, 10, 10, 10,112,228,200, 17,252,252,243,207, 56,123,246, 44,124,124,124,124,180, 90,237, 67,176, 50, 4,146,156,156,
- 76,172, 13, 1,124,241,197, 23,172,206,179, 45,135, 0,182,110,221,234,144, 33, 0, 15, 15, 15,105, 89, 89,153,194,220,103,246,
-182,187, 45, 66, 64, 90, 82, 66,238,172, 92,137, 15, 0,224,240, 97,220,157, 25,135,213, 67, 66,154, 67,246, 97, 3, 6, 96,214,
-236, 41,232, 93,121, 27,215, 19, 19,209,101,201, 18, 40,130,130,168,193,191,252, 98,241, 57, 17, 75, 31, 70, 72,108, 36, 22, 47,
-121, 23,255, 66, 17, 86,143,158,132,129, 35, 70, 33,248,110, 41,214,123, 14, 69,169,199, 45, 12,146, 72,136, 74,165, 98,213,190,
-210, 73, 67,240,212,211,241, 56,250,235, 89,236,206,253, 9,111, 2, 88,189,106, 29,194, 6, 12,192, 83, 79,199,163, 65,121, 7,
- 18, 14,246,140, 97,239, 28, 0, 78, 17,128, 7, 9,114,185,156,114,196,172,117,134,220,179,150, 94, 6,132, 98, 36, 79,238, 13,
-120,246, 70,102,211,130, 37,182, 99,255,142,134,225,181, 49,147,254, 12, 61,127, 99, 48,115, 3,204, 77, 6,180,101, 39,194,141,
-139, 58,153,141, 8,184,215,164,224,138,154,224,230,109, 26,128, 0,110,174,250, 16,167, 70, 75,160,106, 4, 84,106, 64,213, 8,
-168, 53,128, 74, 9,168, 27,239, 69, 73, 76, 9, 10, 55,237, 43,228,198,181, 0,244,234,227, 6,226, 36,194,109,165, 18,138,125,
-215,113,174,248, 6,238,222,173, 67,216, 48, 29,234, 85, 90,168, 26,117, 80, 54,208,184,121, 13, 80,214, 3, 91,182,108, 81,112,
-217, 0,195,206, 54,161,133,158,158,111, 60,243,234,171,146,239, 13, 40,196,235,213, 52,183,187, 75, 23,189, 14,224, 39, 3,178,
- 86,179, 48, 73, 68,110,158,111, 60,247,242, 82,201,174, 27,186,230,194,158,143, 47,117,187,250,229,171,134,246, 88, 69, 1, 92,
-221,220, 95,127,233,149, 69,146,146,178,123,187, 69, 38, 60,145,236,246, 93,230,106, 83,182, 56, 61,107,166,238, 37,142,207, 26,
- 97,188,127,137, 68, 34,141,138,138,202,103,150,140, 42,149, 74, 69, 65, 65, 1, 21, 31, 31,207,214,150, 22, 64, 48, 0, 58, 60,
- 60,156,150, 72, 36,130, 13, 27, 54,224,217,103,159,197,251,239,191, 15, 66, 8,126,253,245, 87,236,219,183, 15,103,206,156, 65,
-117,117, 53,250,246,237,139,154,154, 26, 87,129, 64,224,107,205,248,180,105,211,204,138,100,102,104, 96,202,148, 41,156,194,244,
- 29,117, 8,192, 82, 20,192, 30,239,223, 94, 33, 80, 89, 85,213,252,222, 55,109, 30, 6,166,205,199,120,163, 99, 46, 63,250, 28,
-122,238, 63,142,146, 69, 47,224, 87,127,127,184, 0, 56, 35,151, 83, 48,177, 44, 78,169, 84,146,158, 61, 59,227,234, 53, 32, 44,
- 34, 20, 88,249, 26, 94,254,114, 11,230, 6,157,198,144,198, 98, 44,190, 37,198, 59, 27,151,225,253,244,207,113,230,236, 65,244,
-234, 25, 70, 92, 92,204, 71,125, 13,237,121,119,113,197,163,113,163,240,104,220, 40,188, 69,127, 4,117,227, 82,156, 60, 9,156,
- 60, 9, 28, 56, 16,143,127,175,185,136,184,184, 88, 18, 16,240, 16,130,130,190,225,196, 79,121, 15,191,134,146,131, 34, 43,125,
-247,231,127, 13, 1, 32,147,201, 72, 82, 82,146,148, 25, 51, 52, 22, 1,134, 29, 18, 51, 30,111,235,124, 0,134,244,163,163,163,
- 41,253, 48,128, 24,153, 27,239,239,245, 50,179,254,163,162,162,168,188,188, 60, 98, 45, 26, 98,109,217,161, 37, 66,231, 58, 28,
-240,244,171,245,240,239, 38,192, 19, 9, 98,168, 26, 1, 15,119, 10, 2,170,201,235, 7,129,170, 1,168, 87, 19,212, 43, 9,234,
- 85, 4, 52, 1, 4, 22,230, 92, 63,189,176, 30,131,134,148,194,175,255, 93,236,217, 85,129,187,119, 85, 8, 31, 83,131,193,222,
-117,128, 83, 35, 84, 13, 52, 42,110, 16,212,215, 83,208,106, 41,120,251, 80, 0,117,223,231,178,133, 13, 29, 50,100,184, 87, 64,
- 0, 14,233, 12,196,203, 19, 79,226,110,106,202, 48,153, 76, 54, 64, 46,151,159,227,112, 63,135,142, 24, 55,113,120, 23,255, 0,
- 28, 63,218, 60, 71, 14, 93,165,255,135,171, 95, 44, 53,101,207,210, 86,216, 3,198,141, 27, 63,220,223,191, 39,206,157,184,220,
- 92, 62,238,145, 41,248,159,124, 21,231,115,107, 3, 52,159, 59,243,252, 50,195, 0, 12,182,111,223,222,106,254,145,137,185, 0,
- 76,163, 7, 3, 56,181,100,201,146,177, 34,145,200,237,235,175,191,198,186,117,235,240,204, 51,207, 96,197,138, 21,160, 40, 10,
- 87,174, 92,129, 82,169, 68,106,106, 42,180, 90, 45,230,205,155, 71, 83, 20,101,245, 1,112,228,108,250,142, 62, 4, 96, 41, 10,
-224, 8,239,223, 86,108,216,176, 1,127, 75,158,133,234,170, 70, 32,125, 45,234, 15, 28, 71,167,241,195,155, 63,175, 72, 95,139,
- 34,103,103, 80,255,120, 30, 3,103, 63,138,195,235,119, 97,240,224, 17,102,237, 93,186, 84,136, 49,227, 98, 81, 88,228,133,181,
-159,101, 97,252,248,177,120,231,211,101,120, 43,106, 14,190, 5,208,255,169,103,177,246,179, 44,136,197, 94,152, 58,109, 56,190,
-230, 96,239,227, 15, 54, 97, 68,252, 32,188, 59,104, 21, 10,167,184,193, 43,225,199, 22,199,250,184, 74,112, 52, 95,129,128,191,
-205,229, 92, 15, 7, 15,138,176,114,165,139, 21, 1,247, 23,138, 0, 24,143, 35,155, 35,248,166,227, 88, 35,179, 64, 63, 67, 93,
- 79,252,151,144,245,201,101,232, 87, 1,180, 20, 5,108,134, 1, 28, 29,214,207,203,203, 35,134,222, 63, 19, 17, 48,252, 63, 41,
- 41, 9, 76,178, 28,115,137, 33,184,144, 63,179, 10,192,156, 61,173, 14,168,111, 32,104, 84,235, 39,251, 53,170, 9, 68,206,247,
- 62, 83, 53, 0, 74, 13,193,157,187, 4,127, 84, 18,156, 56,167, 5, 77, 3, 73, 73, 73,210, 75,151, 46,181,106, 27,173, 22, 40,
-187,174,198,245,146, 74, 28, 60, 92, 9, 66, 40,156,251,141, 70,252, 19, 90,136, 69, 4,127,220, 2, 14,254, 4,212,212, 16, 16,
- 26,120,120, 18, 5,137, 4,136,141,157,138,171, 87,175,178,186,166,236,245, 50, 50,109,174,237,171, 68, 4,110,157, 95,125, 97,
- 69,134, 83, 14, 17,180, 96, 98, 31,103,103, 56,253, 99,161,211,149, 53, 31, 45, 3,240, 36, 91,123, 66, 23,183,101,243, 95, 95,
-225,244, 83, 25,105, 97,175, 75, 39,103, 12,156,253,162,211,185, 77,159, 24,219, 51, 27, 1,144,184,116, 90,182,244,141,229, 78,
-151,111, 86,183, 56,160,179,123, 39, 76,127,226, 25,167,156,255,126,197,233,220,218, 42,106,103,170, 44, 34, 34,130,156, 56,113,
- 2,219,182,109,107,245,157,132,132, 4,147, 77, 1,160, 16,192,169,213,171, 87, 15,241,244,244,116, 99,194,224, 95,125,245, 21,
-158,125,246, 89,172, 91,183,174,217,139, 95,189,122, 53,170,170,170, 80, 83, 83, 83,215,208,208, 80,218, 20, 65, 16, 91, 58,215,
- 23, 94,120,129, 24,135,232, 25,239,159,109,248,255, 65, 25, 2, 48, 21, 5,112,180,247,207,216,100, 59, 4,112,110,204, 24, 80,
- 47,204,134, 39, 0, 50,105, 24, 26, 78, 20,162, 62,125,237,189,122, 75,158,133,190, 79,205,130, 68,162,191,254,162,162, 98,139,
-132, 93, 84, 84, 12, 0,136,141,211,139,136,130,227,103,240,237, 55,223,193,117,212, 72, 52,104,180, 80, 67,141, 9, 19,135,182,
- 56,158,173,189,235, 58, 53,158,232,246, 34,232, 19,141, 72,250,215, 36,136, 31, 59,130, 1, 97, 3, 16, 54, 48,184,249,252, 82,
- 23,175, 65, 80,144,144,245,125,243,200,255, 61, 18,117, 14,231,246,224,127,223, 80,214,166, 0,124,254, 57,218, 38, 17, 80, 71,
- 68, 65, 65,129,213,217,228,121,121,121,145,172,151, 20, 58,119, 66, 86,239,253,128,182,128,160, 79, 39, 36,167,247, 65,102,126,
- 60, 5,100,146,123,130, 32,218,230, 97, 0,227,165,128,230,150, 6,154,235, 44,101, 50, 89, 51,249, 27, 79, 0,100, 66,234, 76,
-153,165, 8,128,161, 61, 71,117,230, 59,119,238,140,188, 81,190, 75, 65,119,165, 33, 16, 1, 78, 2,253,253,173,161, 9,180, 90,
-160,182,150, 64,173, 1,180, 26,189, 40,152, 58, 77, 31,189,185,116,233,146, 89,123,141,183,119, 42,194,194,104, 28,216,167, 3,
- 37, 0,254,184, 73, 65,226, 2,236,219, 13,168,149, 20, 40, 2, 12,142,112, 66,217, 53, 26, 19, 39, 78, 65, 92, 92, 28,197, 38,
- 19, 86,246,122, 25, 89,249, 34,176,228, 83,219, 69, 0,161,117, 49,186, 46, 62,130, 93,244, 61, 22,234, 6,192,143, 2,148,195,
-134,137, 46,107,117, 49,156,236, 17, 58, 6,238,222, 2,197, 77, 93,179,189,174, 18,192, 71, 66,193,117,208, 48, 81,209,119,116,
-140, 57, 47,218,148,173, 78,238,158,130,171,183,170,154,136, 5,112,119,113,134,187,171, 24, 17,225, 67, 69, 91,190, 37, 49,237,
-252,232,154,172,115,102,214,127,124,124,124,243, 61,202, 68,239,102,206,156,105,201, 3,173, 3,112,249,228,201,147,117,227,199,
-143,239, 10,131, 53,253, 95,125,245, 85, 51,201,106, 52, 26,232,116, 58, 92,186,116, 9, 93,187,118,189, 77,211, 52, 43,181, 56,
-109,218, 52,179, 67, 0, 92,136,246, 65, 24, 2, 48, 21, 5,112,164,247,207,133,248, 25,116,247,247,196, 23, 95,236, 69, 98,194,
- 24,116, 27, 22, 6, 12, 11, 3,245,194,236,150,162, 23,192,173,155, 74,108,221,118, 24,221,253, 61,217,219,243,115,193,176,225,
-125, 49,108,120,223, 86,199,113,181, 55, 97, 70, 40,210, 38,126, 2,186, 80, 79,254,207, 45,126,218, 38,123,198,120,213,253,213,
- 61,239,215,190, 31, 93,142,242, 54,123, 32,237, 18, 0, 5, 5, 5,247, 61,107, 31,227,229, 50, 68, 23, 21, 21, 69,153, 32,127,
-194,132, 21,147,146,146,108,250, 29,195, 85, 0, 76, 25, 87,207,223,120, 2, 96, 19,154,203, 82, 82, 82, 20, 73, 73, 73,172, 31,
- 50, 67,242, 55, 53, 39,128,171, 61,107, 88,185, 89, 5,107,246,226,226,226,242,151,165,110,197, 35,163,157, 64, 3,208,168,105,
- 56,139,245,213, 84, 91, 79,208,168, 33,208,234,128,130, 66, 29,116, 52,129,181, 37,123,113,113,113,249,111,188,182, 21, 19, 35,
-133,152, 62, 71,136,186, 90,130,218,106,160,190,150, 66,159,190, 4, 58, 13, 5,145, 64,130,170,187, 52,202,126, 87, 99,209,203,
-236, 38,140,101,175,151,145,143, 22, 2, 33, 1,192,154, 87,128, 5, 31,216, 38, 2, 72, 67,253,140,127, 12, 27,186,211, 47,103,
-167,155,215,184,135,209, 13, 64, 55, 10,208, 29, 58,136,188,167,159,172,211, 52,212, 79,231, 98,143, 86, 53, 76,127, 33,106,248,
-174,208,183,178,221,124, 7,143,133,143, 51,133,174, 18, 10,202,243,191, 96,235,107,115,235, 52,202, 6,214,246, 26, 85,202,233,
-113,143,140,223,149,146,254,153,219,128, 33,195,224,238, 42,134,187,139, 51, 74,206,157,194, 27,169, 47,213, 41, 57,216,178,197,
-147,103,115,185,166,200,127,249,242,229,173,194,252, 63,252,240,131, 34, 33, 33, 1,102,146, 4, 49, 68,175, 6,112,170, 95,191,
-126, 37, 42,149,170,135, 80, 40,148,184,186,234,151, 98,109,222,188, 25, 51,103,206,132, 82,169,132, 74,165, 66, 99, 99, 35,220,
-220,220, 84, 58,157, 46,135, 16,114,147,205,201, 58,106, 53,192,131, 50, 4, 96, 24, 5, 96,222,183, 7,241, 51,232,211,199, 15,
-175,166, 37, 99,247,174, 95,145,189,229, 4,156,197,157,241,123,217,189, 17,172,158,254, 3,208,168,174, 65,196,176,254,248,240,
-163,100,188,159,254, 57, 39,123,190,190, 30, 40, 58, 87,212,252,121,216,128, 48, 84, 84, 84,115,178, 55,101,225,116,204, 20, 60,
-137,198,194, 58,140, 94, 48, 16,244, 96, 9,190,248,226,251,230,243,171,174,174,198,216,135, 67, 89,217, 51, 70, 84,102, 20,245,
- 51,126,110, 83, 62,181, 89, 0,180, 5,249,179,177, 25, 21, 21, 69,101,101,101,145, 38,111, 23, 89, 89, 89,196,112, 89,162,177,
-215,111, 74, 32,180,142,195, 82,128, 88, 0,184, 8, 1, 55, 17,208, 88,139,172,247,157, 0,151,163, 36,249,177, 62,128,139, 55,
- 50,191,225,238,245, 91,154,237,207,144, 53,219, 53,236,198,228,111, 60, 39,128,171, 61,182,228,207,198,222,123, 25,107,169, 87,
- 22,206, 35, 18, 9, 64,211,192,160,126,194,123,237,113, 86, 7,141,142, 64, 71, 11, 49, 99,198, 12, 86,226,228,237,119,215, 82,
-139, 22,205, 35, 90, 45,160,214, 16,232,180,128,128, 2, 34,167, 0,181, 85, 20,126, 59,173,132, 82, 37, 64, 98,194, 12,214, 97,
-255,229,207, 1,193, 61,245,255, 7,245, 0,108,141, 4,200,229,242, 35, 50,153, 44,246,230,212,184, 93, 1, 91,119,186, 5,140,
-123, 24,154, 67, 7,241, 99, 66, 92,157,186,182, 54, 86, 46,151, 31,228,104,239,160, 76, 38,139, 61,255,230,180, 93,254,255,202,
-113,235, 49, 98, 28,234,207, 31,194,198,127, 76,173,107,108,224,102,143,177,181, 58,237,239,187,222,249,248, 75,183,209, 99,198,
-162,184,232, 20, 94, 74,126,178,174,161,174,142,243,185,181, 53,204, 37,251,145,201,100, 36, 62, 62,158,205,106, 0,161,167,167,
-231, 41,165, 82,249,109,105,105,105,239, 33, 67,134, 4,106,181, 90,145,147,147, 19,114,114,114, 16, 29, 29, 13,149, 74,133,134,
-134, 6, 92,186,116,169,198,203,203,107,175, 82,169,252,154,166,233,122,176,204, 0,200, 36, 5, 98, 66,236, 92, 66,255, 15,218,
- 16,128, 97, 20,192, 17,237,107, 75,238, 0, 83,120, 52,118, 20, 30,141, 29,213,244,159,253, 26,182,165,189,105,246,137, 59,207,
- 31,208,120,186, 14, 79,127, 54, 5,239,236, 93,102,247,185, 41,159, 81, 18, 47,173, 23, 84,223,168,238,139, 99,109,147, 0,104,
- 15,207,223,216,251, 48, 12, 99,155, 11,245, 59,242, 28,185,140,253, 59,154,252, 13,196,142, 97, 34, 32, 70, 4, 41,154, 34, 29,
-156,236, 89,155, 11,192,213,222, 7, 31,175,165,100, 50, 25, 17, 8,128,131, 5,250,177,126,102,194,159,126,220,127, 6, 39,123,
-171, 86,173,165,230,205,111,202, 73, 33,208,219, 56,186, 31,168,175,163, 65,104, 32, 49,113, 10, 98, 98, 98,172,182, 71,246,122,
- 25, 73,125, 18,240,116, 3,202,110, 3, 46,206, 0, 77,128, 78, 18, 32, 93, 6,164,201,109, 18, 1, 7,101, 50, 89,108, 65, 98,
-220, 46,143,229,111,187,229, 47,127,163,174,209, 6,242, 55,182,151,191,100,234, 46,151,127,188,233,150,251,239,183, 56,147,191,
-161,173, 23, 95,124, 49,238,141,127,190,176,115, 65, 74,170,219,103, 31,102, 48,228,127,218,196,179,175,229, 98,219,218,208, 17,
-215,231,205, 20,249,207,155, 55,143, 48, 43, 1,182,109,219, 70, 40,138,178, 36, 4,220,212,106,117,157, 64, 32,200,243,247,247,
-239, 89, 91, 91,251,226,241,227,199,187, 15, 29, 58,148,214,106,181, 13,213,213,213,183, 78,159, 62,125,165, 79,159, 62, 37, 93,
-186,116, 41, 85, 42,149,155,181, 90,237, 45, 66, 8,107, 1,192, 36, 5, 50,136, 10,216,210,190,210, 54,236, 11, 29,110,219, 81,
-227,254,246,218, 81, 41,133, 14, 61,222,209,246,170, 42, 5,200,208,202, 16,120,216, 15,179, 63,181, 46, 76,170, 42, 5,120, 40,
-192,242, 49,247,147,252,205, 10, 0,107,107,253,185, 62,232,108,115, 7,112,177, 43,151,203, 41,115,155,237,112, 33,175,204,100,
-185, 62,204,127, 17,192, 69,227, 79,171,155,254, 46,195,134,235, 85, 56,138, 92, 13,235, 69, 38,147, 17, 38,207, 64, 74, 74,138,
- 77, 43, 28,140,237,109, 92,212,169, 89, 20,216, 35,154,140,219,132,153,240,103,107, 84, 98,237,231, 45,237,213,213,232, 59,224,
-196,196, 68,110,247,223,183, 14,125,102, 52,134,164,189,111,249,155, 27, 26,107,107,159,182,215,187,102,236,253,244,217, 91, 27,
- 84, 13,181,115,229,114,249, 33, 91,109,125,250,233,167, 7,100, 50, 89,236,103, 31,173,220, 80, 87, 87,103,238,220,180,184,255,
-104,209,163, 26,147,127, 94, 94, 94, 36, 33, 4,219,183,111, 55, 60,198,146,189,107,106,181,218,153, 16, 82, 75,211,180, 92,173,
- 86,255, 26, 16, 16,224, 83, 85, 85, 69,189,254,250,235, 53,213,213,213,119,122,244,232, 81, 91, 87, 87, 87,175, 86,171,107, 52,
- 26, 77,163, 78,167, 83,114, 57, 97, 7, 13, 3,228,183, 97,157,230,227, 79,138,126,253, 6, 83,111,190,150, 73,102, 61, 30,141,
-176,129,125,204, 30, 87, 84,120, 25,155,190,219,131,126,253, 6, 83,247,211,222,144, 33, 67,168,212, 69,114, 50,235,241,104,203,
- 14,243,241, 82,108,250,110, 15,134, 12, 25, 98,245, 94,186,159,228,111, 82, 0, 56,218,179,111,203, 72, 65, 84, 84, 84, 62,171,
- 16,191, 21, 56,114, 86,255,253,136,140,112,217,244,199, 17,209, 0,174,109, 98,184,172,203,222, 33, 9, 99,123, 92,201,223,158,
- 25,255,108, 72, 27, 64, 80, 71,180,231,232,115,115,208,189, 77, 1, 0, 69, 81, 68, 32, 16,128,249, 99, 66,216, 83,166, 76, 65,
-108,108, 44,104,154, 6, 77,211, 32,132, 88,251, 61, 74,171,213,186, 18, 66,116, 52, 77, 55,106, 52,154,253, 66,161,144, 18, 8,
- 4,206, 0,156,105,154,134, 78,167, 19,106,181, 90,177, 86,171,237,174,211,233,206, 27,124,183,205, 55, 1,226,225, 24, 17,112,
-165, 84, 69,118,239,220,130,107, 21, 53,240,243,106,104,254,236,102,165, 43, 2,124, 59,163,127,255,254, 86,201,186,173,236, 13,
- 25, 50,132,186, 89,214, 72,214,124,180, 3,197,191,223,110,101, 47,184,167, 15, 2, 3, 3, 89,145,127, 91,193, 82,142, 20, 42,
- 60, 60,156,223, 30,147, 7, 15, 30, 15, 42, 26, 12, 8,157, 54,112,108, 68, 6,229,229, 0, 60,160,159, 52,206, 19, 63, 15, 30,
-230, 34, 0, 60,120,240,224,241, 0, 65,210, 36, 2,104, 3,226, 23,224,222, 16,135, 8, 64,247,166,247, 52, 95, 93, 60,120,240,
- 2,128, 7, 15, 30,127, 14, 8, 0,184, 25,252,207, 16,191,216,128,244,233,166,227,120,239,159, 7, 15, 94, 0,240,224,193,227,
- 47,210,167,241,164,207,131,135, 5,245,204,131, 7, 15, 30, 60,120,240,248, 43,171,229,249,243,231, 27,110,164, 67, 12,103,216,
-203,100, 50, 98,180,209,206,181,168,168,168,230, 85,141,166, 82,177, 26,218,227,138, 63,163, 61,227,101,139,134,245,201,215, 31,
-223, 30, 29,221, 94,122,122,122,243, 49,105,105,105,148, 13,246, 0, 51,233,128,249,251,217,186, 77,254,249,229,237,113,177,199,
- 89, 0,112, 68, 87, 54, 7, 49,187,247, 57, 74,177, 24, 39, 35, 49,181, 27,160,169, 99,218, 67, 93, 49, 4,147,148,148, 36,101,
-136,134,201, 0,102, 41, 39,248,253,196,246,237,219, 35,183,109,219,214, 76,130, 83,166, 76,145, 38, 38, 38,230,255, 25,213,174,
-169,246, 56,127, 94,191, 50, 44, 52, 52,180, 93,207, 77, 38,147,145,169,211,100,200,201,150,155,188,103,119,238, 58, 65,114,178,
-229, 22,239,229,157,187, 78, 88,236, 4,226, 98, 35,108,190,233,210,211,211, 73, 66, 66, 80,139,255,173,137, 0,107,168,173,171,
-141,220,250,211, 86, 4,134, 5, 42, 64, 1,231, 79,158,147,142, 9, 31,139,208,126,161,156,238,191, 67,135, 14,181,186,238,177,
- 99,199, 82,224,193,131, 71,155, 9, 0, 49,219, 3, 71,143, 30,205,217,184,169,205, 98, 24,152, 34, 81,227,141, 54,216, 18,173,
- 45, 27,227,176, 17, 20,140,221,212,212, 84,100,100,100, 40,204,237, 45,206, 28,103,105,173,166,241, 57,246,232,211, 11, 0,112,
- 75,165,130, 86,217,168, 47,172,170, 1,160,223,251,128, 75,110, 4, 67,242, 7,244,185,197,185,172,181,151,201,100, 68, 64,233,
-179,235, 49,175,128,136, 87,212,158, 0, 0, 14,255, 73, 68, 65, 84,229,247,159,175,189,255,130,204,184, 61, 24,226,183,181, 61,
- 28, 41, 42, 25,242,143,139,141, 80, 1, 50, 73, 78,182,220,230,223, 96, 4,132,105, 1, 32,183,235, 60,213,234, 84,228,230, 38,
- 35, 38, 38, 19, 9, 9, 25,205, 17, 1, 91,132,192,193,162,131,228,161,161,189,240,161,124, 21,188, 92,189, 64,107,117, 80,145,
- 70,197,238, 95,127,138,217,187,239,103, 50, 54,112,156, 84, 34,145, 88, 21, 2,135, 14, 29, 34, 77,145,133, 86, 30, 17, 47, 2,
-120,252,149,113,234,212,169, 22,255,155,234,211,236, 17, 0,156,230, 15,152,218,197,206, 17, 32, 64,164,221, 54, 8,123, 13,192,
-198,115,151,201,100, 36, 53, 53, 21, 43, 86,172, 0,128,230, 87, 83,199, 89,219, 33,172, 21, 60, 59,227, 76,233,119,112, 65, 79,
-232,240, 11, 42,254,115, 2,167, 75,238, 96,198,138,117,237,118,163,157, 57, 91,136,193,131, 6,130, 38, 64, 97,161,254, 61,112,
-239,189, 97, 57,205,178,170, 13,115,176, 91, 66,102,102, 38,197,182, 61,230,206,157, 11, 0,205,175, 38,201,159,162, 0, 11,247,
-131, 76, 38, 35,143, 60,178, 11, 50, 89,172, 67, 69, 64, 92,108, 68, 67,114,114,178, 43,144,137,156,108,110,196,110,232,225,219,
- 75,242,230,188,127, 0,152, 57,115, 51,114,115,245,175,201,201, 37, 96, 34, 2, 92,162, 1,132,144, 72,197,133,189,138, 23,255,
- 49, 31,195,187, 14,133,139,135, 7,136, 90, 11,154,232, 32, 20,137, 17, 28, 21,156,251,219,176, 11, 88,145,153,161, 24,229, 51,
- 90,234,234,234,106, 85, 4,220,190,125,187,197,255, 83,198,119,194,168,133,191,224,241, 12, 85,139,134,156, 52,105,146,205,237,
-149,157,157, 77,166, 77,155,230,176,246,118,180,189, 54, 38,146, 72,123,211,250,158, 58,117, 42,178,137,132,108,181, 51,248,149,
- 87, 94, 41,175,175,175, 15, 0, 48, 25,250, 77, 56, 67, 1,156,130,126, 83, 40, 0,216, 40,151,203,127,227,169,191, 53,249, 51,
-101,198, 34,160,133, 0, 40, 45, 45, 37,165,165,165, 0,128,192,192, 64, 24,110, 54, 3,160,197,255,166, 62, 55,135,138,138, 10,
- 69, 86, 86, 22,235, 72,128,241, 94,247,150, 72,152,106, 74,133,105, 76,162, 92, 67,236,153,153,153, 86,143,201,203,203, 99, 69,
-254, 73, 73, 73,102, 73,127,233,210,165,200,200,200,128,161, 64, 96,131, 30,125,122,225, 70,101, 53,126,156, 55, 19, 93,168,113,
- 40,249, 98, 17, 2,167, 7, 98, 79, 59,147, 63,128,102,194, 7,128,129, 3, 7,182, 40,103, 34, 3,134,229,142,246,236, 45, 17,
- 49,211, 30,230, 72,127,253,250,245,200,200,200, 64,236,184,161,216,245,203, 73,192,189, 19, 80, 83,119,223,235,112,231,174, 19,
-174, 64, 38,118,238, 58,225, 16,123,211,106,150, 89,124, 54,179, 59,191,199,234, 1, 49, 12,253, 39, 39,231, 34, 33, 33,168,249,
-149, 65, 66, 66, 16,107, 17,240,197,255,190,192,251,159,190,139,241,125, 35,161,107,108,132, 86,167, 5, 37,162, 0, 8, 65, 64,
-227,214, 31,101, 8,237,218, 31,203,230, 45,195,187, 43,223, 85, 60, 50,208,122, 52,203,184,179,155,226,191,222, 36,225,239,221,
-187,151,216, 34, 2,178,179,179,201,206,215,119, 33,238, 29, 56,132,180,179,179,179,201,202,149, 43,177,100,201,146, 14, 45, 2,
- 78,157, 58, 21, 89, 93, 93,173, 40, 43, 43, 67,120,120,184, 93,231, 89, 93, 93,173,184,215,101,219,244,156,151, 2,152, 11,224,
- 36,128,175, 1, 68, 3,120, 20,192,223, 13, 4,192,237, 63, 41,159, 83,176,176, 13,184, 69, 71, 42, 85,207, 49,153, 25, 75, 77,
-126,222, 66, 0, 4, 6, 6, 82,129,129,129,205,100,111, 24, 74,206,202,202,106,241,191,241,231,151, 46, 93, 50,123,130,140,168,
- 72, 73, 73, 81,164,166,166,194,120,163, 28,227,205,115,178,178,178,204,134, 96, 77,117,246,198,101,237,185, 81, 17, 0,108,218,
-180,201, 44,241, 3,104, 65,254, 75,151, 46,101,101,243,247,210,107,168,223,242, 6,220,158,253, 24, 61,250,244, 66,183, 46, 46,
- 40,221, 82,170, 39,127,207,206,250, 33, 0, 39, 33,231,115, 77, 72, 72,144, 26, 14, 3, 36, 36, 36,112,142,210,208, 4, 8,232,
- 4,252,251, 73,224,249,245, 64, 87, 87,224,124,149,233,242,162, 74,142,119,190, 25, 33,199, 37,106,243,246,219,111,155, 37,126,
- 0, 88, 57, 55, 30,107,118, 31,129, 95, 96,119,220,188,122,203,170,247, 15, 0,108,162, 0, 92,194,248,122, 15, 95,102,210,211,
-103,198,246,185,222,215, 43,255,107,190,142, 66,230,193,134,123, 37,168,197,171, 58, 33, 24,226,109,197,172,191,223,160,108,192,
-184,217, 99, 21,163,187,143, 66, 99,125, 61, 68,206,206, 16,137,238,117, 65,165,197,197,216,154,147,115,227,217,103,230,246,232,
-237, 28,128,161, 19,195,163,126,205,253, 53,114,212,240, 81,156,188,198,244,157,115,177,111,223, 62, 60,246, 88,203,242, 73,147,
- 38, 81, 92, 69, 0, 67,254,232,253, 33,118,190,254,178,221, 34, 32, 59, 59,155,124,244,209, 71, 8, 9, 9,193,154, 53,107,176,
- 96,193,130, 14, 39, 2, 12,137,223, 81,246, 24, 91,118, 68, 19,164, 0, 38, 2, 88, 79, 8,169,163, 40,202, 15,192, 5, 0, 87,
-229,114,185, 22,127,110, 16,142,245,221,130,252,153,247,153, 25, 75, 91, 69, 1,238, 75, 30,128,172,172, 44,102,236, 21,165,165,
-165,240,245,245,109, 37, 16,152,178,138,138, 10, 86,121,238,173, 77, 6,228,210, 97,206,154, 53,171,237,164,155, 1,129,153,242,
-250, 51, 50, 50, 32,151,203, 41,107,179, 56,149,184,134,186,233,163, 64,220, 23, 1, 81,175,163, 14,255, 3,254,163,247, 22, 73,
-214, 34, 56,253,109, 13,180, 90,238,137,206,226,227,227,243, 89,108,187,106, 57,194,243, 21,240,214, 90,160, 87, 79,224,214,118,
- 49, 54,124,169,198,220,239,204,151,115,186,243,137, 99, 51, 85, 27, 78,246, 43,207, 94, 1,247, 48, 9,220,250,254, 19,155, 86,
- 60,143, 33, 3,253,208, 47,254, 93, 86,237,193,230,254,100, 59, 84,192,220,187,134,228, 47,151,203, 41,102,226,159, 77, 68,211,
-249, 61,202, 22,146, 55, 5,117, 66,176,201,242, 92,163, 72,128, 53,148, 87,148, 99,114,210,100,184,119,246,130,142,210,226,192,
-190,253,168,173,171, 67, 66, 98, 34,254,168,168,192, 15,155,127,196,115,207,204,237,225, 44,113,134,128, 56, 33, 38, 34, 38,239,
-130, 98,141, 77, 94, 99,101,101,165,221,215,109, 72,254, 0,236, 22, 1,217,217,217,100,249,242,229, 8, 14,214,215,103, 80, 80,
- 16, 58, 82, 36,192,209,196,111,194,251,103,222,219,114,173, 3,154,136,208,137,162, 40, 87, 0, 97, 0,206, 1,232, 33,147,201,
-106, 0, 84,201,229,114, 62,173, 61, 71,220,183, 68, 64,190,190,190,210,164,164,164, 86, 67, 1, 71,142, 28, 81, 52,109,246,194,
-121,142,128,185,201,128,150, 60, 71,115, 2,165, 45,192,120,247,230,194,253,108,189,127, 0,216,253,234,114, 36,188,255, 1,180,
- 81,227, 32, 2,224,118,184, 24,123, 74,238, 0, 0,180, 81, 11,160, 57,235, 3,170,235,223, 57,147, 20,219, 40,139, 37,220,153,
-246, 63, 44,120,230, 58, 46,206, 91,130,250,159,213,240,243,177, 92,238,136, 8,128, 45,226, 96,253,250,245,122, 53,156, 48, 1,
- 71,202, 42,224, 62,196, 29, 55,114, 75, 0,137, 51,102, 46,248, 27,188,123,198,183,219,131,104,110,214,191,163,162, 90,150, 86,
- 8, 88, 91, 29,144,155,156,139,152,204, 24,204,220, 12, 36,231,234,223,231, 38,231,114,142, 2,212,169,106,225,227,210, 5, 90,
- 85, 3,136,128, 96,196,200,145,216,178,101,139,234,163, 15, 62,144,208,132, 96,206,147,115,224,221,197, 27, 13,117,117,208,234,
-180,112,119,234, 12,141, 64, 99,211,245, 86, 85, 85,181, 88, 29,192,117, 66, 96, 43,242,103, 96,163, 8,200,206,206, 38,169,169,
-169, 24, 57,114,100,139,242,129, 3, 7, 34, 61, 61, 29,105,105,105,237, 38, 2,218,138,248,141,189,127, 0, 40, 43, 43,179, 53,
- 10,240, 43,244,227,253, 53,208,135,254, 39, 3,184, 4, 96, 48,128, 28, 0,235,208,180, 83,167,165,238, 4, 54,134,210,255, 18,
- 2,192,152, 16,152, 61,231,217,124,110,105,214, 52, 3,102,120,129,153, 16,200,204, 13, 96,162, 3,129,129,129, 10,102,184,160,
-189, 58, 94, 71,194,218, 88, 63,227,253,179,177, 53, 99,237,102,144,196, 62,184, 53, 38, 2, 93, 48, 14, 46, 51,215, 64, 91,254,
- 7,224,217, 25,162, 59,255,195,246,143, 10, 0,161,144,243,181,219,178, 10,194, 24,167, 95,249, 63, 12, 15, 7, 2, 23, 20, 34,
-204,237, 25, 92,120, 40, 9,248,247, 18,179,229,237, 21, 1,200,200,200,192,248, 17,253, 16, 53, 46, 4, 9,131,150, 96,245, 71,
-159,227, 92,193, 13,204,155, 52, 28, 55,115,118,162,186,178,198, 33,247,131,169,161, 2,107,207,135, 37,111,223, 81,247,168, 57,
-251,150, 38, 14,166,165,165, 81,233,233,233,100,230,230,150,130, 0, 0, 98, 50, 99, 32,222, 86,140,109,219, 74,154, 87, 2, 48,
- 19, 6,189,189,189, 77,246,191, 52, 77, 67, 71, 3,132,214,194,217, 69,130, 39,159,122, 74,242,214,155,111,162, 91,183,110,116,
- 15, 63, 63,129,170,190, 14, 58, 2, 16, 90, 7,154,182, 30,209, 26, 59,118, 44,245,195, 15, 63,144, 59,119,238,160,166,166,166,
-133,112, 52, 92, 29,192,101, 85, 64,118,118, 54, 89,253,124, 17, 32, 9, 6,110,126,218,250, 0, 73, 48, 86, 63, 95,132,148,255,
-176, 19, 1,217,217,217,100,234,212,169,210,129, 3, 7, 42,238,220,185,211,234,243,128,128, 0, 76,157, 58, 85,250, 32, 77, 12,
-180,197,251,183, 39, 10, 32,151,203,243, 13,158,175,238, 0, 78, 3,152, 46,151,203,185,108,101,202,147,191, 37, 1, 96,148,232,
-199, 90, 34,160, 22,159, 91, 10,153, 38, 37, 37,153,140, 2, 48,100,239,235,235, 43, 77, 77, 77, 85, 48, 99,178, 73, 73, 73, 22,
-151, 1, 90,242, 14,185, 78,254,107,171,101,128,140,119,111,105, 50, 32, 23,148,252, 43, 25, 78, 51,215, 64, 89,118, 17,162,195,
-107,160,217,188, 0, 84,220, 42,108,253,251, 99,184,186,245, 50, 18, 86,126, 13,136,218, 39,179,243,146, 44, 32,119,229, 22,132,
- 93,141, 1,110,215, 99,113,244, 18,139,229,142,136, 0,216,234,253,231,108, 89, 14, 97,143, 1,112, 67, 8,174,237,203, 68, 45,
- 69,112,244,226,117, 68, 21,222, 96,217,238,215,154,255,159, 53, 75,222,130,236, 1,224,231,159, 99, 77, 30,103,233,249,176, 22,
-234,119,196,178, 67, 71,172, 16, 72,206,189, 71,252, 0, 90,121,254,204,132,193,109,219, 74, 76,126,223,221,197, 29,101,213,101,
- 24,217,123, 20,148,141, 42, 64,169,130, 86,173,193,178,212, 84, 80, 2, 8, 26,234,235, 64,211, 58,104,117, 4,206, 34, 39,252,
- 81,247, 7,156,116,214, 87, 27, 63,246,216, 99,205,117,115,232,208, 33,194,244, 55,134,171, 3,202,203,203, 89, 95,231,180,105,
-211,168,148,255,128,172,126,190, 8,161,125, 90,255,254,249,203,106,164,252, 39, 12,108,201,122,218,180,105, 84,118,118, 54, 25,
- 57,114, 36, 2, 2, 2, 90,125, 94, 88, 88,136,156,156, 28, 69,123,145,127,147, 55, 78,181,229,216,191, 33,236,136, 2, 48,152,
- 12,253,228,239, 70,158,194, 29, 40, 0,218, 10,140,231, 15, 0,163, 71,143,150,102,101,101, 41,152,208,191, 25,113, 32,189,116,
-233,146,130, 43, 9,219,218, 73, 58,122, 25,160,161,247,111,138,248, 25,161,195,229,124, 79,151,220,129,230,236, 91,184,133, 95,
-224, 23,183, 10,168,174, 65, 73,230, 34, 4,205,255, 16, 55,215, 45, 2,156, 68,128,160,125, 50, 59, 95,171, 7, 66,125,167,179,
- 46,111,143, 8, 64, 70, 70, 70,221,236,168, 81,229, 30,180, 87,175, 6, 56, 73, 54,127,184, 0,159,109, 63,133,197,143, 62,140,
-185, 31,252, 23,143,189,247, 77,187, 76, 30,101, 4,104, 83, 30, 0,202, 94,113,106, 79,168,223, 82, 20, 32,185,201,179, 55, 38,
-127, 67,239,223, 26,252,125,253,177,251, 64, 46,198,246, 26, 11,215, 78,110,160,105, 2, 1,209,130,166, 40, 16, 66,160, 35,128,
-150, 38,208,106,181, 80, 86,215, 99,199,177, 29, 16,235,196,156, 39,165, 26,175, 10, 72, 91, 48, 14, 83,252, 75,145,121,140,189,
- 13,115, 34,128, 43,249, 27,218, 75, 75, 75, 35, 43, 87,174, 68,247,238,221,239, 9,251,146, 18,100,100,100,160, 35,120,254,142,
- 22, 2,166,188,127,123,162, 0, 77,207, 68, 36,128,135, 0,188,246, 23,152,252, 7, 0, 66, 0,186, 7, 90, 0, 24,207,250, 79,
- 74, 74,106, 30,119, 55, 20, 7,134,239,237,241,224,109,233,200, 29,181, 12,208,156,247,111, 43,241, 51,152,177, 98, 29,126, 4,
-240,232,251, 83, 64,178, 22,129,154,181, 26,167, 75,238,128,242,246, 66,241,239, 53,122,239, 95, 40,108,151, 59,212,220,122,127,
-123,242, 0,176, 17, 92,108,197,193,250,245,235,213, 0,106,159,143, 28, 92,243,207, 85, 31,171, 95, 93,150,170,234,218,217,247,
- 78,209,185,107,221,230,158,251,175, 91,123,175, 26, 49, 71,206,134, 67, 52,220, 87, 20,152,250, 13,251, 34, 0,166,200,159,241,
-252, 1, 88,157, 16, 40,145, 72,168,115, 91,207, 39, 42,198,229,231, 36, 13,122, 12, 53,170, 26, 80, 2, 64,159, 82,132,134, 78,
- 71, 64,107,181,232,228,236,142, 67,213, 39,113,233,112, 49,162, 35,162,243,237,174,220,146, 23, 0,112, 95, 6,216, 66, 4,116,
-191,134,243,229, 1, 54,145,191,161,189, 37, 75,150,144, 53,107,214,192,211,211, 19,119,238,220,193,242,229,203,209,209,194,254,
-142, 16, 2,230,188,127, 91,162, 0, 50,153,172, 27, 0,191,166, 27,101, 40,128, 20, 0, 37,127, 17, 39, 93,215,150,198,239, 75,
- 30, 0,115, 17,129,213,171, 87, 75,141,133, 66, 82, 82,146,130,171, 61, 67, 34,232, 8, 41,118, 13,189,127,227,229,127,165,165,
-165, 45,234,141, 75,214, 62, 70, 4, 76,127,255, 43,144,205,128,207, 92, 57,242,255,249, 24, 30,206,216, 8, 56, 57,161,147, 68,
-220, 46,215,107,184,198,223,212,123, 27,243, 0,104, 1, 8,154,218, 86, 96,103,123,220,154, 29, 53,170,236,159,153,219,250, 44,
-123,110,114,103,127,191, 72, 53,128, 51, 73, 73, 73, 30, 0,220,108,109,143,123, 36, 29, 75, 30,121,100,151, 65,248,159,219,247,
- 45,121,240,134,233,129,217, 10,137,182, 72, 6,100, 14,198,164,207, 68, 4,204, 13,121, 60, 61,235,233,173,219,254,187, 13,186,
-217,218, 51, 19,123, 77, 28,220,197,189, 11, 84, 26, 21, 8, 33, 16,139,196,168, 82, 54,224,200,239, 63, 99,253,183, 27, 32, 29,
- 32,117, 72,226,176,244,157,115,177, 97,195, 6, 44, 90,196, 61, 7,192, 61, 17, 0,187,200,223,208,222,130, 5, 11,152, 60, 0,
-232,200, 99,254,134, 66,192,150,239,218,155, 59,192,240, 49,128,126,189,191, 10,192, 43, 0,142,201,229,114, 29,120,152,171,123,
-156, 58,117, 10,153, 25, 75, 91,229, 1,176,152, 8,168,173,242, 0,152,138, 8,152, 35,122, 91,162, 0,246,162,173,150, 1, 50,
- 98, 68, 46,151, 35, 47, 47,143, 46, 45, 45, 53, 36, 50,105, 84, 84, 20,103,239,102,198,138,117,128, 65,226,159,137,203,214, 54,
-191,175,111,135,155,173,173,188,103,138,162, 62, 2,112, 23,250,229, 63, 79,218,105,238,230,243,145,131, 27,163,243,126,237, 60,
-231,205,175, 33,151,203,197,121,121,121,221,209, 50,157,181, 77,237,209,214,145, 0,107,249,253,173,161, 45,134, 4,204,145,191,
- 58, 33, 24,216,102,221, 49,147, 14,158, 68,237,251,225, 0, 57, 28,112, 4,227, 70,141, 67, 15,247, 30, 0, 77,240,135,234, 14,
- 14,157, 56,132,155, 69, 55, 49, 41,116,146,212,217,217,185,221,219,195, 80, 4, 56,138,172,153, 72,192,131, 50,225,207,222, 44,
-128, 14,232, 99, 50, 1,100,130, 7,103,152, 75, 0,100, 82, 0,180, 21, 82, 82, 82, 76,146,189,225, 78,108, 70, 80,176, 89, 85,
-224, 40,175,191, 45,150, 1, 54,205,240,215,230,229,229,137,154,134, 14, 24,242,159, 20, 21, 21,197, 41,202,209,180,153,146,194,
-209,231,104,110,140,217,209,185,238, 57,194, 25,128, 72, 46,151,191,110, 16, 2,123,202, 94,155,209,175,125, 81, 32,151,203, 39,
-228,229,229, 33, 47, 47, 79, 5, 64,210,244,103, 55,241, 51, 81, 0, 91,235,204, 26,201, 79,157, 38,107,113, 28, 87,226,118,196,
-144, 64, 90, 90, 26,149,158,156, 78,252, 23,248, 75,209,219,244, 49,101,201,185, 10,182,243, 1, 70,134,141,164, 26, 26, 26, 34,
-215,189,191, 14, 1,193, 15, 41, 0,224, 66,225,111,210,248,232, 4,132,134,135,218,220, 30, 99,199,142,165, 54,111,222,220,106,
- 85,128, 70,163,177,235, 6,114, 52, 89,255,217,102,251,119, 0,240, 75,252, 76, 68, 1,140,203, 88, 11, 0,107,158, 56, 91, 79,
-221,214, 78,145,109, 34, 22,123,137,202,209, 68,199,216,203,203,203, 35,121,121,121, 34,195,250, 10, 12, 12,180,233,183,154, 8,
-202,225, 29, 70, 71, 24,251, 54, 1,119, 0,117,250,132,252, 20, 5,192, 5,214,215,247,178,105,143, 43,121,121,121,204,186,178,
-154,192,192,192,174,129,129,129,206, 29,161, 46,237,245,196,173,217,118,212,144,128, 85,114, 79,227,118,143,186,186,186,230,207,
-154, 58,155,233,188, 49, 58,108,180, 67,206,115,230,204,153, 60,185,254,249,201,222,144,195, 52, 14, 38,127, 9,244,195, 13, 15,
-188, 8,176, 90,145,225,225,225,188,106,226,193,131, 7, 15, 30, 60,254, 98, 16,240, 85,192,131, 7, 15, 30, 60,120,240, 2,128,
- 7, 15, 30, 60,120,240,224,241, 23,192,255, 3,211,238,250, 72,118, 88, 93,170, 0, 0, 0, 0, 73, 69, 78, 68,174, 66, 96,130,
+137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0,
+ 2, 0, 0, 0, 1, 0, 8, 6, 0, 0, 0,197,144,206,103, 0, 0, 0, 1,115, 82, 71, 66, 0,174,206, 28,233, 0, 0, 0, 6,
+ 98, 75, 71, 68, 0,255, 0,255, 0,255,160,189,167,147, 0, 0, 0, 9,112, 72, 89,115, 0, 0, 11, 19, 0, 0, 11, 19, 1, 0,
+154,156, 24, 0, 0, 0, 7,116, 73, 77, 69, 7,216, 9, 7, 16, 32, 48, 13, 5,217, 84, 0, 0, 32, 0, 73, 68, 65, 84,120,218,
+236,125,121, 92, 84, 85,255,255,251,220,217,217, 23, 1, 21,133,193,125, 95,201, 37, 55, 40, 49, 51,205, 52,192,212, 36,219,196,
+210,180,178,180,111,249, 60,233, 79,159, 12,148,202,212,132,158, 74,179,210, 18,151,180, 92, 18,116, 80, 83, 82,209, 92,202, 5,
+ 69, 1, 65,145,101, 86,102,187,115,231,222,223, 31, 51,131, 3, 2,179,128, 73, 61,243,126,113, 95,195, 93,230, 51,231,158,237,
+253,249,124,206,231,156, 67,250,245,235,199,193, 3, 15, 60,240,192, 3, 15, 60,248,159, 2,229,201, 2, 15, 60,240,192, 3, 15,
+ 60,248,223,193,153,223,179, 1, 0,196,227, 1,240,192, 3, 15, 60,240,192, 3,143, 7,192, 3, 15, 60,240,192, 3, 15, 60,240,
+ 40, 0, 30,120,224,129, 7, 30,120,224,129, 71, 1,240,192, 3, 15, 60,240,192, 3, 15,254, 17,224,219,159,156, 61,123,150,184,
+ 43,168,190, 88, 2,143, 60,143,188,134,144,145,145,193,173, 95,191,254,129,165,111,234,212,169,220,150, 45, 91,136,167, 60,254,
+214,242,208, 4,121,240,228,159, 71,222, 63, 89,158,203, 10,192,255, 56,234,102, 32,105,201,233, 76, 79, 79,199,236,217,179,137,
+167,216,220, 47,227,184,184,184,154,243,172,172,172,127, 68, 94, 78,124, 42,185,209,142, 96,215,143, 25,255,232, 58, 35, 9,220,
+ 9,177,161, 19,162, 64,163, 26,251,144,175, 95,220,146,235,162,167,253,122,208,114, 60, 0,127, 69,101,157, 56,113, 98,204,174,
+ 93,187,100,118,231,177,187,118,237,202,105, 17, 45,146,179,244,157,132,180,216,118,201, 21, 22, 22, 2, 0,164, 82,233,223,169,
+ 19,113, 90, 59,157, 58,117,170,211,207,110,217,178,197, 21, 69,141,219,186,117,107,205,201,206,157, 59, 17, 23, 23, 87,235,254,
+131, 82, 2,242,242,242, 56, 0,136,142,142, 38,205,241,220,174, 31, 51,238,107,249,133, 71,181, 7, 0,220, 49, 24,192,232,141,
+150,139, 74, 53, 0, 32, 33, 33, 1,153,153,153, 13,166,111, 96,193, 64,174,243,237,206, 46,253,248,247,195,191,119,162, 92, 36,
+ 8,124,245, 2, 12,187,118, 66,161,152, 4, 5,128, 1,146,149, 88, 44, 57,141,246, 98,160,194, 80,128,197,250, 68,151,126, 55,
+ 33, 33, 33, 38, 51, 51, 83, 86,231, 90,108,102,102,102, 78, 11,107, 91,205, 82,111,255, 38,239,219,236,104, 19, 44, 34, 62, 2,
+127, 98, 20, 11, 57,163, 82, 79, 85,235,213,172,214,104,250,159,152, 29,231, 80, 1,176, 18,182,237,179,169, 21,129,219,181,107,
+ 23,150,110, 93, 14,159,246,254,168,190,169,194,251,137,139,101, 45,220,226,110, 73, 32, 82,169,148, 43, 44, 44, 68, 97, 97, 33,
+246,239,223,143,217,179,103,183, 84, 37,192,214,128, 72, 70, 70,134, 32, 57, 57,217,148,154,154,122, 10, 0, 22, 46, 92,248, 80,
+ 99, 95,156, 52,105, 82,205,255, 12, 99, 6,109, 50,130, 54,210,160,105,203,193, 48, 12, 22, 46, 92,232, 82, 90,236,201,191, 62,
+ 88,149, 1,238, 65,122, 2, 92, 81,126, 30,152,133, 31,224,135,243,215,191,135, 4,237, 96,198, 49,148,127,113, 6,231, 10,170,
+ 48,249,195, 13, 78,125,189,243,237,206, 78, 18,186, 5,207,252,250,140,195, 60,145,140, 91,140,160,137, 47,162,244,245, 1,128,
+ 94, 81,115,253,140,254,109,156, 1, 0, 61, 48, 82,146,128,131,129,167, 17, 0, 96,160, 98,160, 83,117, 38, 51, 51,243,158,139,
+118, 4, 73, 90, 80, 27,107,142, 62,224,239,240,190,205,138, 97,125,250,145,103,195,163,248,202,136, 86,188,208,238,225, 20,159,
+132, 18,157, 74,197,138, 17,102,166,250,183, 51, 63, 55, 97,140,217, 73, 81,183, 92,248,217,182, 78, 60,179,192, 5,121,105,247,
+ 85, 1,216,181,107,151,108,235,191,222, 69,226,178, 15,100, 77,172, 4,156,141,248, 1,160, 82, 87, 5, 4, 3,255,119,112, 9,
+212,215, 21, 88,247,242,234,150, 70,100, 13,117, 60, 15, 58,141, 53, 74,192,216,177, 99, 81, 88, 88, 8,169, 84,218,226,242, 78,
+ 38,179,244, 27,177,177,177, 28, 0, 42, 35, 35, 35, 60, 57, 57,185, 52, 53, 53,245,180,179, 66, 24,134, 1, 77,155,106,136,223,
+158,252,243,242,242, 16, 29, 29,237, 82,162, 18, 19, 19,237,201, 22, 89, 89, 89,117, 21,128,230,168, 43, 46,151, 67,116,116, 52,
+153, 58,117, 42, 55,102,204,152,123,238, 29, 56,112,192,230,233,176,121, 61,156,150,223,156,195, 1,225, 81,237, 81,170, 80, 97,
+199,236,167, 17, 76,134,161,224,191,111,161,195,164, 14,200,114,129,252,107, 50,203,234,106, 35,205,224,106, 11,223,122, 12,186,
+162,106,148, 38, 71, 53,250,220, 5,113, 54,150,246,190,131, 21, 23,222,107,106,121, 54, 7,233, 54,167, 12, 52,179,172,251,241,
+190,205,130,164,164, 36, 47, 0, 15, 3,240,177,187,172, 4,112,126,211,166, 77,114,103,229,124,178,254, 19,138,174, 52, 10,104,
+163, 65,172,128, 73, 44, 16,240,249,106,131,152, 18, 10,245, 44,207,207,155,161, 37, 38, 19,191,236,150,241,235, 47, 54, 26,158,
+123,105,166,217,153,247, 86, 42,149,255,177,253,159,159,159, 95,233,237,237, 77,105,181, 90,214,254,153, 65,131, 6,125,220,204,
+196,190,160,169,121,202,119,100,253, 95,186,116, 9,157,125,252,236,189, 1,238,120, 1,106,200,191, 82, 87,133, 21,143, 46,169,
+185,241,252,174, 87,129, 80, 96, 82,106, 34,118, 46,220,234, 74, 37,107,172,115,107,114, 69,189,121,243, 38, 0,160,125,251,246,
+181,254,135, 11,238,236,102, 84, 68, 72, 67, 74,128,201,196,216,226, 1,154,197, 10,104,134,188,180, 39,127, 0, 32,201,201,201,
+ 0,112, 43, 35, 35, 35, 48, 57, 57, 89,225, 52,249,155, 76,160,105, 35,140, 52, 13, 83, 29,242,231, 88,215,138, 33, 49, 49, 17,
+121,121,121,119, 91, 87, 90, 26,226,227,227,107,206,183,109,219,214,100,101,199, 78,225,105,114,253,179, 39,254,169, 83,167,162,
+127,255,254, 54, 5,192, 85,143, 64,179, 84,194,146,235,197,208,238,252, 55,124, 94, 88,141,240,168,246, 8, 11,150,224,250,206,
+235, 22,242, 15,240,179, 12, 1, 8,120,206,105,176,205, 52,198,214,229,226, 53,220,124,127, 57,244,153, 27, 27,247, 16, 72, 36,
+ 48, 24, 12, 40, 40, 40, 64,185,225, 10,186, 32,188,193,103,173,110,240,198,234, 62,177,181, 19,235,179, 57,110,180, 47, 98,215,
+174, 57, 55,219, 25,105,132,184,157,174,131,245,189,111,124,124, 60, 71, 8,177, 13,229, 52,229,125,109,109,153,227,243,249, 77,
+ 42,243,164,164, 36,127, 0,147, 14, 30, 60,248,111,150,101,141,118,117,137,207,227,241,188,147,146,146, 94,218,180,105,211, 94,
+135,140,185,104, 1,191,242, 86,133, 88, 32, 16,121, 83,124,226,199,241, 68, 94, 44,143,199,103, 9, 5,150,240,205, 28,143,103,
+228,177,196,160,229,153,117,222, 66, 1,249,226,216, 94,195,220,148,153, 44,138, 29,167, 81,161, 80,168,117, 58, 29, 3, 0, 90,
+173,150,125,247,221,119,107, 8,255,131, 15, 62,120,163,169,245,125,244,232,209,179,109,255,103,103,103,167, 55, 71, 27,162, 28,
+ 89,255,203,167,196,195, 80, 81,129,183,122,118,131,253,216,189,211, 86,200,196,137, 49, 0,106,145,255,196,137, 19, 99, 1,144,
+137, 19, 39,198,110,152,248,153,197,179,216,181, 85,173,231,157,193,194,117,249, 88,184, 46, 31,115, 86, 93,194,115,203,254,192,
+228,255, 59,219,244,142,174,164,196, 41,197,224,175, 34,127,235,152, 63,215,128, 39, 0, 38,154,198,224, 65,131,154, 67,201,224,
+182,110,221,138,173, 91,183, 66, 38,147,213, 28, 46, 42, 60,156, 76, 38, 67,108,108,108, 13,249,219,223, 76, 78, 78, 86, 58,211,
+ 49, 49,140,217, 98,249, 27, 45,174,255,186,228,111, 54,155,161,213,107, 93,122, 65,155,199,160,174,215, 96,219,182,109,216,182,
+109, 91, 45,101,192,165,247,205,169,221, 31, 90,207,155,164, 36,218,200,127,234,212,169, 72, 77, 77,173, 33,127, 1, 95,224, 42,
+249,219, 58,240,134, 14,167,161, 71, 49,170, 39, 13, 6,151,249, 22, 74,174, 23,131,155,212,253,110, 38,100,190, 5,126,155, 16,
+ 32, 32,224, 47,213,140,181,149, 5,208,103,110, 4,199,113,184,112,225, 2, 70,142, 28, 9,137, 68, 82,139,248, 3, 3, 3,161,
+215,235,161,215,235, 81, 90, 90,138,105,250,121,248, 34,240,245, 6,101, 58,233,242, 38,117,158,117,149,184,155,203, 88, 33, 13,
+144,191,211,117,176,238,251,198,199,199,115,219,182,109, 67,102,102, 38, 18, 18, 18,184,166,190,175,149,252,193, 48,140,219,109,
+ 34, 41, 41, 73, 12,224,229,236,236,236,119,151, 45, 91,118,130, 16, 34,181, 29, 0,218, 5, 7, 7,123, 29, 58,116,104,125, 82,
+ 82,210,200,198,228,124,150,190,158,199, 35, 2, 17,205,112,126, 70,163, 41,212,204,178,237,204, 44, 27,101, 38, 36, 2, 60, 94,
+ 48, 33, 36, 0,132,231,199,114, 8,226,104, 54, 64,173, 55,121,135,250, 49, 60,106,144,198,169, 50,210,233,116, 76, 93,171,191,
+165,131,106,140,184,187,116,233,130,206, 62,126,208,149,221,198,227,253, 7,184, 76,208, 54, 37, 98,233,214,229, 0, 80, 67,254,
+ 54, 47,194,174, 93,187,114,108, 74, 64,137,250, 22, 6, 44, 28,226,146,146,161,213,155,161,213,155,113,187,202,136,210, 10, 3,
+110,222, 49,184, 69,124,182,198,226,136,252, 31, 20, 26, 81, 2, 96,160,141, 48, 24, 12, 77, 17,207,201,100, 50,216,198,200, 67,
+ 66, 66,236,173, 89,184,208,153,212,178,132, 27,113, 37, 58,236,244,104,147,209, 98,249, 27,105,208,166,218,228,111, 50,153,160,
+213,106,161, 81,107, 30,116,177,112, 91,183,102,214,126, 37,203, 31,172,215,221,234,240,236,201,223, 70,252, 20, 69, 65, 44, 22,
+195,219,199,171, 73, 9,158,248, 84, 50,215,208,225,232,187,251,255,111, 9,130, 49, 12,204,232,215, 0, 0, 62,185,215,112,174,
+160,202,210,201,143,126, 13,166, 11, 75,129,202, 42,215, 50,208, 10,119,223,199, 27,149, 0,128,141, 27, 55, 98,215,174, 93, 88,
+185,114, 37, 78,158, 60, 9,163,209,136,242,242,114,155, 85, 86,243,124,120,120, 56,244, 0,120,184,241, 64,234, 75, 35,245,158,
+ 52, 65,105, 36,141,120,240, 92,150,105,239, 9,171, 47, 38,192, 29,242, 7, 0,119,149,128,164,164,164,214, 86,242,159,245,245,
+215, 95, 95, 92,188,120,241, 83,155, 55,111, 70,151, 46, 93, 0, 0,145,145,145, 80,169, 84,162,165, 75,151,158, 62,116,232,208,
+183, 73, 73, 73,210, 6,115,137,229, 8, 88, 70,108, 54, 51, 65,102,198,220,206,100, 54,117,226, 81,164,173,144, 79, 9,196, 2,
+158,158,239, 37, 84,122,251,242,212, 60, 49,199,136,121, 60,111, 62, 67,251,221, 56,243,187,104, 70,200, 39, 14,211,157,159,159,
+ 95,169,213,106,217,250,220,252,125,251,246,189, 66,211,116,179, 85,164,190,125,251, 54,155, 44,126, 99,196,253,223, 89, 47,222,
+ 37,219,146,155,120,171,103, 55,172,178, 16,180, 75, 90,171,205,250,183,145,126,157,223,169, 57, 15,238,221,218,165,196, 87,235,
+205,208,232, 24,168,181, 12, 84,213, 12,148, 26,198,245, 86, 89, 79,228,191,189,149,111,255,255,245,235,215,161, 84, 42,255,178,
+ 30, 35, 61, 61, 29, 82,169, 20,182,160,191, 58, 99,253, 92,122,122, 58, 12,122,125, 83, 20, 0,110,195,134, 13, 40, 41, 45,133,
+128,199, 67, 88,235,214,181,200,255,209, 71, 31,197,193,131, 7,157,237,156, 72,108,108,108, 93, 37,160,150, 39,195,217, 88, 5,
+218, 72,131, 54, 26, 97, 50,209, 96, 24,115, 13,249, 27,141, 70,232,116, 58, 84, 87, 87, 67,163,113, 93, 1,176, 31, 2,176,193,
+ 93,203,127,107,230, 86,128, 3, 42,173, 68, 99, 29,212, 6,225, 56,139, 18,144,153,137, 68,139, 5,229, 82, 91,169, 75,254, 2,
+129, 0, 34,145, 8, 98,177, 24, 98,177,184,201,117,170,161, 33,129,250,230,197,219, 99,114,250,118,112, 79, 70,225,206,208, 1,
+ 8,198, 48, 72,158, 94, 3,230,118, 5, 16,224, 7,126,213, 22,252,252,201,105,128,199,115, 41, 45, 77, 29, 10,208,242, 44,125,
+202,138, 21, 43, 80, 81, 81,129,245,235,215,163,111,223,190, 88,182,108, 25, 6, 12, 24, 0,189, 94, 95,215, 66,179,169,212,127,
+ 53,241, 59, 75,208,238, 14, 7, 52,164, 72,184, 44,199, 58,139,163,166,109,184, 59, 52,102, 79,254, 53,100, 99, 85, 2, 92, 28,
+ 14,240, 61,127,254,252,167,175,188,242,202,145,222,189,123,251, 1,192,146, 37, 75,144,159,159, 15, 0, 24, 50,100, 8,118,236,
+216,129,225,195,135,123, 79,155, 54,173, 32, 39, 39, 39,251,249,231,159,159,246,251,239,191,223,147,179, 65,193, 65,236,245,235,
+ 5, 76,142,236,224,190, 78,157, 58,231, 68, 69, 74, 47,242,124, 37,229, 60, 34,212, 82, 34,129,142, 18,123,105,104, 62,143, 6,
+103,226,177, 98,147,175,166,180,202,231,228,161,179,131, 90, 5,134,237,112,168,140,218,141,249,239,220,185,243,185, 73,147, 38,
+125,109,115,251,171,213,106, 74, 40, 20, 54,185, 34,217,220,254,217,217,217,247,215, 3, 96,179,242,163, 59,118,134,161,162, 2,
+218, 18, 11, 9,142,180, 90,135,174,122, 1,174,255,113,237, 30,217,245,157, 87, 93, 40,115, 41,241, 77, 37,127,123,226,231, 56,
+206, 54,198, 95, 3,147,201, 84,115, 40,149, 74,104,181, 90,200,229,242,191,172,231,176,205,243,223,191,127,127, 93, 79, 0,151,
+158,158,142, 62,125,250,192, 96,208,215,116,116,233,233,233, 46,185,235,215,125,182, 14, 38,147, 9,237,194,195, 97, 50,155, 27,
+ 34,127, 87, 58, 18, 82,143,235,191,102,234, 98, 99,158,140,123, 20, 0,218, 84, 67,254,167, 78,158,130, 78,175,135, 70,163,129,
+ 74,165,130, 82,169,172,101,217,185, 10,219, 48, 64, 19,198,253, 81, 85, 89,133,170,170, 74, 84, 86,201, 81, 89, 85,133,170,170,
+ 42, 84, 85, 90, 44,210,110,221,187, 67,110,253,223, 85,235, 31, 0,250,247,239,127,215,234,247,246,134,143,143, 47,124,125,124,
+161,209,104, 98,155, 72,254,110, 15, 7, 20,172,156, 5,193,211,107, 16,140, 97,224,231,174,129,105,251,107, 64,128, 31,118,191,
+ 26,143,162,221, 55, 48, 33,117, 19,192,255,139,151, 21, 49, 20, 65, 18, 46,129, 86,171,133,193, 96,128, 78,167, 67,110,110, 46,
+ 62,252,240,195,122, 31,247,242,178,121, 80,174,185, 67,222,238, 90,213,246,249, 75,156, 60,111,138,146,225,106,155,173, 37, 39,
+ 51, 51,147, 36, 36, 36,216,200,223,109,207, 4,159,207, 39, 12,195,212, 85, 10,224,106, 44,192,166, 77,155,174, 38, 36, 36,244,
+221,188,121,243,200,163, 71,143,250,142, 30, 61,250,164,141,252,173, 6, 36, 68, 34, 17, 87, 84, 84, 36,216,183,111, 95,215,192,
+192,192, 83,195,134, 13, 43,168, 79,214, 51, 83,158, 97, 59, 71,117,209, 12, 25, 50, 36,254,226,197, 63, 31, 81,107, 53,173, 57,
+198,196,128,130,137, 49, 82, 70,163,209,168, 87,163, 76,205, 26, 13,154,210,226, 50,230,231, 61,123, 83, 90, 5,135,148,211,180,
+206,161,249, 94,159,245,175, 80, 40,248, 0,224,231,231,215, 98,135, 5,168,134,172,255,173,255,122,215,162, 53,151,221,174,117,
+207,213, 88,128,137, 19, 39,198,174,123,121, 53, 0, 75,192,223,174, 93,187,100, 54,210,183,173, 9, 16,247,205, 83, 0,128, 51,
+169,191,217,226, 3,254, 42,212, 84,198,146,146,146, 26,107,223, 70,250,118,133, 11,141, 70, 3,131,193, 96,215,137,252,117,105,
+156, 61,219, 18,251, 97, 98, 24, 92,188,120, 17,191,159, 57,131,190,125,250,194, 96, 48, 64,175, 55,192,160,215,227,219,111,190,
+129,237, 57,103, 26,122, 90, 90, 26,122,116,239, 1,147,201,132,171, 87,175,130, 49,209, 40, 45, 41,109,214, 60,181,157, 91,215,
+ 44,176,173, 93,224,216, 3, 96, 50,130, 49, 91,220,254, 39, 78,252, 6,173, 94,139,106,141, 26, 42,149, 10, 10,165, 18, 10,133,
+188, 73,138,152,205, 19,224,166,245, 15, 0, 56,114,228, 8, 52, 26, 13, 52, 26,181,245, 83,131, 86,193,193,232,214,189, 59, 46,
+ 95,186,132,195, 71,142,184, 44,211,102,253,243,249, 2,120,121,121,193,199,199, 7,190, 62, 62,240,241,241,130, 92, 33,143, 77,
+ 78, 78,206,113,170,205, 53,193,213,223, 16,206, 21, 84,193,116, 97, 41,170,112, 12,100,220, 42,144, 97,255, 70,193,202, 89,120,
+ 50,245,107,136, 5, 20, 32,224, 91, 14,119, 88,199,205,161,128,210,241,159, 33,104,203,120,232,116, 58, 4, 5, 5, 65,161, 80,
+ 64,161, 80,224,248,241,227,184,125,251,118,141,155,184,230,249,210, 82,188, 26, 40, 65, 43,175,138,198, 44,224, 88,123, 82, 77,
+ 72, 72,136,177,187, 23, 83,231, 94,172,139,237,130,107,132,192,155, 99, 70,129,203,150,127,125,239,155,153,153, 73,182,109,219,
+ 70,154,248,190,181,148, 0,119,200,223,134,247,222,123,239,252, 83, 79, 61, 53,109,197,138, 21, 93,207,157, 59, 55, 76, 34,145,
+240,158,124,242, 73, 34, 18,137,192,178, 44, 25, 55,110,220,249,249,243,231,247,233,213,171,215,238,151, 94,122,233,185,151, 94,
+122,169,193,177,168,228, 57,201,236,159,151,174,158,234,213,187,207,179,167, 78,158,156,188,123,207, 79, 31,228,157, 60,217,250,
+ 98,254,101,241,213,210, 2,238,219,213, 63, 72, 86,164,173,236,145,189,103, 79, 90,167,142,157,126,246, 9,243, 62,178,105,211,
+ 38,179,179, 57, 58,122,244,104,156, 58,117,170, 95,122,122,250, 82,131,193, 32, 88,182,108,217, 71,187,119,239,158, 90, 90, 90,
+250,151, 19,135, 83,101,212,208,141,224, 27,133,144, 3, 53,214,191, 13, 35, 67, 66,176, 10,151,157,183, 58,172, 46,254,203,167,
+ 47, 34,160,107, 43,196,125,243, 20,118,205,248, 81,102,211,222,108,228,111,179,254, 93,153,101,176, 99, 69,191,230, 97, 88, 66,
+112,233,210, 37,216, 42,107, 93,247,178, 64, 32,128, 64, 32, 64, 69, 69, 5,198,141, 27,247, 32,202,137, 72,165, 82, 46, 61, 61,
+ 29,131, 6, 13,130,193,104,132,222,160,135,193, 26,220,164, 55, 88,134, 1,214,174, 93,139,185,115,231, 58,234, 76,184,212,212,
+ 84,152,205,102,156, 62,125, 6, 2,190,197,109,219,185,115,103,220, 40, 44, 68,105,105, 41,182,108,249, 30, 83,167, 62, 3, 0,
+ 92, 29, 79, 64,131, 29, 80, 70, 70,134, 16, 0,147,156,156,204,214,103, 1,185, 50, 85,209,102,249,231,230,230, 66, 91,173,171,
+ 81,192,212, 26, 53,212,106, 21,212,106,247,134, 0,236,173,255,169, 83,167,214,120, 0, 92, 85, 4,166, 78,157, 90,235, 60, 74,
+ 42, 69,183,238,150,160,184,203,151, 46,225,134,213,227, 49,117,234, 84,151,163,246,135, 62, 60, 20, 34,161, 8, 18,137, 4, 98,
+177, 24, 34,145, 8,101,101,101, 78,147,191,157,181,223,172, 21,112,242,135, 27,176, 3,192,216, 21, 79,128,203,124, 11, 36, 49,
+ 13,231, 10,170, 64,130, 2,113,173, 68,109,177,254, 93, 28, 2,176,107,127,196,166, 8,216,159, 59,132, 94, 15,240, 44,198,222,
+ 93,247,190,133,232, 77, 38, 19,190,248,226, 11,140, 28,121, 55, 46,236,224,204,112,160, 92,135,174,123, 21,232, 23, 18, 89,175,
+200,122,162,220,237,135, 60,101, 14,158,117,150,176, 73, 19, 60, 10,141,121, 35, 92, 86, 36,238,247,251, 90,149,128, 38,207, 2,
+ 88,177, 98,197,150,121,243,230,133,156, 61,127, 62, 81,175,215,247,145,201, 14, 73, 68, 98, 17,159, 34, 20, 14, 29, 58,228,219,
+163, 71,143, 77, 9, 9, 9,255,158, 60,121,178, 67,107, 61,231,208, 1,118,194, 83, 19, 14,247,237,219,127, 33,205, 24,199, 94,
+203,191,250, 1, 91, 88,192, 0,224,196,160, 76,189, 59,117,205, 12, 13, 13,217,203,227, 11,191,253,207,226, 20,250,147,101, 31,
+ 59, 44,165, 65,131, 6,125, 60,122,244,104, 0, 64, 69, 69, 5,178,179,179,253,190,250,234,171, 15, 0,224,212,169, 83,131,122,
+246,236,185,255,111,161, 0,216, 22,254,121,244,219,205,142, 44,123, 87,166, 4,146,157, 11,183,114, 3, 22, 14, 65,112,239,214,
+ 53,164, 95,227, 78,189, 80,134, 51,169,191,185,234,182,106,174, 57,169, 4, 0,215,189,123,119, 92,184,112,161, 22,177, 40,149,
+202, 2, 0, 29, 93,212,230,239,167, 39,224,158,223,252,246,155,111, 97, 48, 24, 96,164,141,160,105, 26,169,169,169,141, 45,146,
+195,165,166,166,214,156,176,172, 25, 98,137, 15,244,122, 3, 46, 93,188, 8,190, 64, 0, 19, 77,195,203,219, 11, 91,182,108, 1,
+143,199, 67, 98, 98, 34, 30,125,244, 81,174,170,170,225, 0,175,212,212,212,253,201,201,201,116, 70, 70, 70,168, 45,111,234,172,
+ 3,224,146,107,115,225,194,133, 56,118,236, 24,170,171,171, 81,173,213, 66,163, 86, 91,201, 95, 13,141, 90,131,106, 77, 53,180,
+118, 29,190, 51,121, 23, 29, 29,205,229,229,229,213, 88,255,245, 77, 3,116,118, 17, 32,235, 92,252, 90,101, 97, 35,125,219,216,
+163, 43,171, 20,218, 86,248, 3, 0, 31, 47, 31,136, 37, 98,104, 52,154, 88,219,208,142, 27,228,127, 95,230,107,219,148,128, 73,
+ 43,190, 2,183, 29,104, 53, 51, 3, 57,175,199, 99,120,202,119,128, 64, 0,111,113,211,198, 57,235, 42, 2, 0, 48,245,216, 84,
+ 7,223,186,131,222,251,189, 80,246,147, 14,138,229,119,175,154, 76, 38,140, 24, 49, 2, 0, 16, 30, 40,193,175, 25,237,177,242,
+195,155,248,236,140,222,145, 69,108, 63, 45, 14, 13,253,111,247,108,142, 27,125, 86,115,205,173,111,142, 49,255,251,249,190, 53,
+ 74, 64,115,212,191, 79, 63,253,244,211,231,103, 62,191,239,161,129,209,131, 52,106,117, 16, 99,102,140, 97, 97, 97, 21,225,225,
+225,101,106,181,250,220,228,201,147,157,238, 20,126,250,241, 39, 22,192,150,103,167,191,152, 59,108,248,240, 31, 37, 18,137, 63,
+ 1,199, 18, 66,192,178,156, 74,175, 85,200,174,156, 47,214,120,139,132, 78,245,243, 54,242, 7, 44,129,212,117, 3,245, 62,252,
+240,195,127,255, 45, 20, 0, 43,169, 59, 44,176, 93,187,118,185, 92, 89,207,164,254,198, 1,128, 77, 17,176, 35,254,230, 36,116,
+183, 27, 82,239,222,189,113,234,212, 41, 84, 84,212,184, 8, 59, 2,128,141,252,102,204,152,241,160,203,171, 86, 30,165,167,167,
+115,207,206,120, 22,107,215,174,179,142,153, 51, 88,184,112, 97,163,211,151, 92, 92, 65,207, 98, 57, 29, 60,232,104,179,137,238,
+169,169,169, 87,147,147,147,203, 51, 50, 50,120,201,201,201, 53, 1,129,214,105,129, 78,119,116, 54,139,121,216,176, 97,205,158,
+119,209,209,209,156,189, 21,111, 31, 3,224,198, 10,128, 4, 0,183,101,203,150,123,172,124,171,135,192,229,250,188,101,203, 22,
+226,170,199,192, 25, 52,230,250,119, 85, 89,152,252,225, 6,192,110,225,159, 81,239,222,157,142,172,109,174,130,178,243, 0, 56,
+ 90, 9,176,116, 88, 41, 74, 1, 12, 88, 25,136,229,167,187, 32, 4, 64, 69,129, 22,157, 58,117,178,144,198,242, 64, 60,246, 80,
+ 8,162, 30,203,119,214, 34,118,122,120,211,250, 44,113,183,191,105,166, 62,175, 73,178,254,162,247,109, 54,108,216,184,225, 42,
+128,171,205, 37,239,219,239,190, 44, 68, 51, 68,133, 54,103, 96,158, 21, 11,254,138,252,252,171, 55, 3, 34, 19, 39, 78,140,217,
+149,218, 34,247, 2, 32, 0,184,135, 30,122, 8,123,247,238, 53, 88, 73,159, 5,224,117,159, 60, 15, 77,134, 45, 72,112,238,220,
+ 57,156,213,242,127, 32,105, 91,184,112, 97,100,125,110, 73,187,105,132,174, 88, 59,228, 62,151,113, 77,122,154,186,236,111, 67,
+171,242,185, 74,226,142,214,246,111, 14, 52,101, 72, 96,209,162, 69,184,126,253,122,179,165,197,153,229,125, 93,197,153,183, 21,
+ 56, 3, 75, 96,232,200, 4, 9,126, 57,209, 5, 97, 94, 62,248, 51,239, 14,186, 58, 73,254, 78,212,191,150,186, 28, 46,185, 79,
+223,245, 44,207,238, 28,218, 54,179,188,180,191, 42,225,127,249,110,128,117, 61, 12,110,120, 18,238,187, 18, 48,110,220, 56,241,
+223,172, 2,186,101,217, 55,215,111,103,100,100,216, 86,168, 97,146,147,147,155, 58,149,201,131,230, 39,255, 38,149, 69, 74, 74,
+ 74,179,148,101, 70, 70, 6, 63,121,120,242,125,175, 23, 71, 50,245, 56,146,153,223,226,219,172,167,102,122,240,192, 43,161,187,
+251, 8,123,224,129, 7, 30,120,224,129, 7,127, 95, 80,158, 44,240,192, 3, 15, 60,240,192, 3,143, 2,224,129, 7, 30,120,224,
+129, 7, 30,120, 20, 0, 15, 60,240,192, 3, 15, 60,240,192,163, 0,120,224,129, 7, 30,120,224,129, 7,255, 8,212,154, 5,112,
+246,236, 89,183, 35, 83,235, 11, 38,244,200,243,200,243,200,243,200,115, 82, 94,163,211, 68, 91,128, 60, 79,249,122,228,213,194,
+ 43,175,188,210, 14,128, 2,128,208,186,213,121,139, 74,159,199, 3,224,129, 7, 30,192,223,223,159,242,247,247, 39,254,254,254,
+ 2, 0,188,150,150, 62,219,190,243,118,251,207, 55, 21,245,173,143,239, 65, 11,194, 19, 79, 60, 17,243, 15,120, 13,219,218, 87,
+146,191,235, 11,120, 20,128,127, 56,154,176,221,186,203,136,139,139,139,177,118,186, 53,135,245,218, 63, 82, 94, 11, 7,137, 12,
+ 11, 35, 0,160, 82,169, 88,149, 74,197,169, 84, 42, 19, 0,179, 59,194, 94,126,172,119,201,172,177,189, 39, 2,192,172,177,189,
+191,121,249,177,222,235, 0, 96,225,164,135,200,194,167,163, 5, 47,143,233,229,214,154, 34,246, 75,209,102,102,102,214,218,124,
+167, 41,228,111, 87,239,155,115,173,253,166,202,108, 14,121,220,125, 80,108,254, 82, 69,233,137, 39,158,136,217,187,119,175,236,
+ 31,208,198, 12,176, 44, 22,119, 95,121,180, 77,176,136,234,220, 58,148, 31, 33,109, 71,133, 5, 4, 11,189, 69,130,102,251, 61,
+ 62,254, 25,160,172, 90,152,222, 90, 32, 30,216, 41, 0, 78,236,173, 98, 4, 32,106,234, 79,101,101,101, 33, 45, 45,173,214,242,
+127, 11, 22, 44,176, 53,116,226,142, 60,246,135,192,218, 5, 61, 37,171,165,200,107,241, 69, 31,229, 45,225,162, 58, 72, 1, 0,
+101, 52, 51,189,181,144,255,157,237,230,101,117,181,168,172,178,146,118, 70,208, 75, 99,122,229,155,205, 92,248,195, 67, 91,249,
+117,237, 58,236,128, 72, 68, 21,205, 73, 25,244,159,255,146, 11,184,163,210, 61, 33,224,147,159, 0,114, 17, 64, 79, 87, 19, 89,
+119, 41,218, 38, 46, 55, 91,139,252,237,234,190,187, 75,229, 18, 23,175,223,119,121, 9, 9, 9,182, 53,250, 29,190, 83, 66, 66,
+ 2,151,153,153, 73, 92,200, 59,210, 12,114,156, 34,127,150,101, 65, 8,193,200,145, 35,185, 35, 71,142, 16, 23,203, 88, 8,192,
+212, 28,233, 9, 10, 10,154, 37,151,203, 63,119,243,235,126, 0,148,104,190, 85,176,107, 97, 88,159,126,212,179,225, 81, 98,101,
+ 68, 43, 97,104,247,112, 62,159,132, 82, 58,149,138, 17, 35,140,166,250,183,163,159,155, 48,134,110,234,111, 56,171, 73,132, 0,
+120,220,250,217,210,224, 7,224, 41, 0,233,214, 79,191,102,146,251,125, 75,179,176,221, 42, 96,202, 97, 17, 15,178, 54,168,208,
+166,144,205,252,249,243,239, 33,127, 0, 72, 75, 75,139,157, 63,127,190,203, 86,206,198,215,188,239, 33,107, 0, 96,127, 8,196,
+198,215,188, 31,168,188,212,212,212, 24,138,162,184,103,158,185,187,164,237, 43,175,188, 18, 3,128,139,136,136,224,218,181,107,
+199, 5, 7, 7,115, 79, 63,253,180, 83, 50, 55,164,126, 20,115,156, 26,194, 45,141,142,175,177,126,215, 45, 93, 23, 51, 15,171,
+185, 57, 17, 27,184, 25,237,182,114,227,131,247,115,131, 58, 44,115,202, 58,238,208, 46,172,117, 76, 7, 41,247,218,156, 25,198,
+229,111,189,200, 45,124, 97, 26, 90, 11,249,223,189, 59,251, 89,172,124,227,101,110,217,220, 23,216,110,126, 62, 70, 0,104,221,
+ 58,152,111, 45,255,122,113,102,231,211,157,195,195,189, 2,158,153, 18,153, 54,113, 82,123, 1,203,177,210,144, 86, 34,239,143,
+ 95, 63,145, 54,239,169,126,223, 62,254, 88,155,200,136, 8,239,226,127, 47,238,237,238, 54,153,246, 27, 69,185,180,105,148, 3,
+203, 31,205,224, 9,104,113, 30,128,204,204, 76,146,144,144, 80,243,189,132,132, 4,174,190,161, 19, 43,105, 59,173, 84, 52,148,
+ 14, 59, 57, 77,238,232,236,201,127,193,130, 5, 24, 57,114, 36,247,235,175,191,186, 35,138,110, 70,227,181, 44, 40, 40,104,146,
+155,223, 13,183, 26,156, 82, 0, 72, 74, 74,138, 76, 74, 74,218,147,148,148,148,107,119,236, 76, 74, 74,114,105, 27,229, 79,214,
+127,194, 79, 93,150,226,247,248,147,147,194, 21, 3,123,118,224,183, 13,239,168, 54,136, 59, 86,155,245,237,137,159,119, 91, 58,
+204, 20,198,148,221, 10,248,250,139,141, 66, 23,121,220, 45, 5,160, 61,128,111, 0,196, 91, 63,219,183, 32,126, 11, 6,176,197,
+170,156, 28, 7, 48,214,122, 30,220, 12,178,167,192,137,241,210,150,174, 0, 56,129, 33, 0,174, 0,136,114,199,186,177,185,208,
+ 35, 34, 34, 98,237,173,126, 59,203,191,230,158, 51,238,118,219, 51, 73,195,133,118, 86,186, 2,212, 20, 69,205,185,237,222,131,
+144, 7, 0, 39, 78,156,144,137,197, 98,228,230,230,222,163,108, 21, 23, 23,147,146,146, 18, 50,100,200,144,216, 61,123,246, 56,
+149,135,173, 79, 92,148,113, 98, 1,250, 84, 8,107, 89,195,132,226,176,174,248,121,242, 77, 73, 34,145,142,189, 16,203,220, 26,
+239,208,109, 26,211, 65,202, 69, 8, 37,183,223,124,117,186,177,157,143, 80,168,186,120,140,120,149,159,199,188, 17,157,209, 54,
+ 64,130,242, 51, 71,201,157,211,199,168, 5,179,102,208, 49, 29,164, 92, 55, 47, 95,147,181, 67,173, 23,173, 90, 9, 71, 9,133,
+148,248,248,241,219,243, 79,157,188,213, 61,172, 93, 7, 83, 64,171,118,196,215, 23, 94, 29,162,188,162,130,130, 68,157, 88,142,
+ 51,254,124,178, 92,251, 0,235, 48,103,111,241,219, 14, 55,149, 0,174,158,207,186, 71,125,207,253, 85,242,106,148, 0,185,124,
+ 52, 50, 50, 20,104, 10,249, 55,166, 84,212,145,211, 36, 15,192, 19, 79, 60, 17,179,103,207, 30, 25, 33, 4, 20, 69, 33, 47, 47,
+ 15, 71,143, 30,117, 75,150,217,108, 62,111,245, 0, 52, 71, 60,139, 68, 46,151,239, 12, 10, 10,122,218,141,239,218, 60,206,154,
+164,164,164, 94, 0, 14, 28, 60,120,112, 92, 86, 86,214, 16,219,145,157,157,253,148, 76, 38, 59,148,148,148,228,212,144,199,130,
+ 69, 11,196,149,183, 42,130,245,156, 49,130,227,147,110,156, 72,212,157, 21, 8,187,179,132,234,204, 18,126, 39,134,199,139,100,
+ 89, 18,174, 37,230, 80, 70, 72, 5,126,113,108,175, 88,252,100,232,125, 85, 0, 62, 1,112, 16,192, 60,235,231, 39, 77,200,236,
+ 64, 0, 75, 0,236,177, 86,244, 61,214,243, 64, 55,229, 29, 1,176, 23, 64, 50,128,245, 0,222,176,202, 60,210,196, 74,225,111,
+253,244,110, 6, 11, 27, 86, 11,107, 73, 99,150,214, 3,196, 67, 0,142, 1,104,109, 85,158,158,117,229,203, 89, 89, 89, 50,123,
+203,127,193,130, 5,178,180,180,180,216,180,180,180, 88,123, 37, 32, 45, 45, 45, 54, 43, 43, 75,230,140, 60,123, 75,157,154,162,
+192,213,189, 51,112,117,239,140, 90,164,205,254, 16, 8,119,229,217, 44, 77,119,228,165,167,167,199, 28, 63,126, 28,211,167, 79,
+ 71,113,113, 49,146,147,147, 99,234,123, 70, 44, 22,203,218,180,105,227, 48,255, 50,210,211, 99,218, 28,255, 3, 37,211,135, 65,
+ 88,172,194,231, 75, 62,142,169,109, 28, 3,233,233, 25, 49, 2, 67,132, 44,168,141,222, 33,249,207,122,105, 10,253,175,249, 51,
+ 56, 97,209, 25, 97,224,157, 11,228,194,109, 53,194, 67,188,241,112,143, 48,180, 85, 94,193,117,141, 30,124,150, 67, 0,225, 9,
+254,239,197,233,220,107,175,188,112, 37,166,131,180, 65,210, 81, 40, 53, 65,131, 6,249,164,245, 30,242,184,201, 55,168,163,200,
+ 39, 32,148,149,248,120, 27,131, 90, 5, 27, 66,194,219,243, 21,114,141, 72,173, 98,160, 80, 25, 93,113, 99,199, 56, 67,156, 78,
+198, 3,220, 99,249,215,167,148,187,160, 4,144,122, 62,235, 30,245, 61,231,148, 60,110,107,224, 61,135,139,242, 26,202,211, 38,
+145,118, 93,165, 34, 35, 67,129,230, 34,127,138,162,184,125,251,246,201, 88,150,197,235,175,191, 14, 66, 8,142, 30, 61, 10,203,
+214,187, 44,113, 67, 30,104,154,254, 29, 0,211, 12,158, 0, 57, 0,200,229,242,237, 65, 65, 65,177, 46,126,151, 15, 0, 51,103,
+206, 20, 1,200,202,206,206,238,178,108,217, 50,166,174, 18, 26, 28, 28,140, 67,135, 14,197, 36, 37, 37, 57,212,202,120, 68,224,
+ 71, 51, 92, 91,163,209,212,197,204,178,189,204, 44, 59,192, 76, 72, 47,240,120,237, 9, 33,109, 64,120, 97, 44,135, 8,142,102,
+219,169,245,166,144, 80, 63, 70, 72, 13,210,220, 55, 5, 32,220,106,241,175,132,101,156, 99,165,245, 60,220,141,223,154, 1,160,
+216, 90,153, 22, 1, 8,178,126, 18,235,117, 87,247,218,253, 55,128,107, 0,214, 1, 16,192, 50,134,205, 0,248,204,122,189, 41,
+251, 47,143, 4, 80, 1, 96, 84, 51,145,236, 11, 0,222,183,126,182, 52,244, 4,240, 35,128, 71,173,158,148,158,238, 10,178,145,
+191, 61,233,219, 43, 1, 46, 87, 78, 43,249,219, 80, 87, 9,112, 71, 94,157,206,140,184, 42,239,240,225,195,160,105, 26, 3, 7,
+ 14,140,237,214,173, 27, 10, 11, 11,107,222,143,101, 89, 72,165, 82,110,241,226,197,178,227,199,143, 99,220,184,113, 14, 59, 20,
+ 67,238, 41, 80, 52, 3,229, 64,105,172,177, 91, 48,174,109, 56,124,151,180, 88, 14,115,164, 27,184,195,139,131,101, 55,142,251,
+ 35,238,249,171,142, 59, 40,138, 87, 93,113, 33,151, 45, 83, 26, 80, 85, 77,115,241,253, 34, 56,127,137, 16,183,148, 90, 84,168,
+244, 72,236, 31,193, 81,132,112,191,253,180, 31,170, 35, 39,184, 51, 59,127, 46,106, 76, 92,238,239,109,231,132,132,250,117,108,
+ 27, 17,197,120, 73,216,142, 35, 31, 79,244,233, 48, 48,121,124,235, 46, 79,198, 5,181,141,238, 43,175,110, 29,111,162, 77,166,
+235, 5, 90,167,134,222,172, 4,229, 84,157,200,204,204,148, 57,152, 25, 80,239, 61, 39, 98, 94,254, 17,179, 3,146,147, 3,145,
+156,124, 87,185,181, 17,119,115,144,118, 61, 10,140,219,150, 63,199,113, 48,153,238, 14,217, 15, 31, 62,220,214, 94,220,149,109,
+ 18, 8, 4, 38,150,101,143, 91, 61, 1, 77, 81, 2,106,134, 62,229,114,185, 44, 40, 40, 40,217,133,239, 22, 38, 38, 38,250, 29,
+ 62,124,120, 69,118,118,118,235,175,191,254,154, 93,188,120, 49,127,243,230,205,232,210,165, 11, 0, 32, 50, 50, 18, 42,149, 10,
+ 75,151, 46, 53, 31, 58,116, 40, 62, 41, 41,233,213, 70, 37,178,140,191,217,204, 68,154, 25,115, 79,147,217,212,159, 71,145, 40,
+ 33,159, 18,137, 5, 60, 53,223, 75,120,219,219,151,119,135, 39,230,140, 98, 30, 47,136,207,208,109,110,156,249,221,119, 70,200,
+ 39,110,199,189, 57, 82, 0, 30,179, 90,135,246, 56,102,189,238, 10,166, 1,120, 29,150,177,146,247, 1,252, 1,203,252,201, 63,
+172,231, 82,235,253,105, 78,202,243, 2, 48, 11, 64,146,245,220,104,119,192,122,125, 22,238,221,202,215, 89, 76, 1,240,149,245,
+179,169,120, 30,192, 28,107,158,205,177,158,183, 20,116,178,186,176,126, 6, 48, 23,192,108, 0, 49,240,160, 65,148,150,150,202,
+ 6, 15, 30,140,217,179,103,231, 12, 30, 60, 24, 39, 78,156,192,250,245,235, 99, 90,183,110, 45,163, 40, 10,133,133,133,164,178,
+178,146,188,246,218,107,177, 71,142, 28,145,189,244,210, 75,141,146,205,208, 27,183,100,101,131,187, 35,121,246,236,156, 63,195,
+204,177, 61, 85, 65,178,140,245, 25, 49, 22,237, 4, 88, 87,248, 60,217, 82, 25, 79, 70,190, 86, 26,123, 52, 83, 42,139,125,120,
+101,131,229, 83, 66, 51,171, 62,255,124,115,208,246,243,165, 55, 55,159, 41, 86,110, 56,126, 93,123,163,204,192, 81, 28, 5,131,
+206,140,138, 10, 26,121,197, 10,243,174,194, 82,205,158, 91,101,202, 29, 69, 37,151,143,149,149,143,185,105, 52,125,212,144, 76,
+191,192,240,118,250,106, 69,219, 30,209,143, 80, 52,137, 28, 89,122,249, 71,125, 96,144,183,164, 67,247,126, 21, 28, 83,113,158,
+240,252, 66, 88,150,229,221,185,163,119,198,139, 87,215, 53, 93,159, 27,188, 86,148,187, 19,227,207,164,174,165,111, 59,238, 7,
+161,181, 20, 52, 22,148,103,231,206,111, 18,154, 67, 78,117,117,181, 12, 0,248,124, 62,222,122,235, 45,228,229,229,193,205,113,
+127,123, 24, 1, 24,141, 70,163,177,180,180, 52, 11, 77, 11, 8,212,212,114, 7,200,229, 25, 65, 65, 65, 19,156,245, 20, 27, 12,
+134,254, 11, 23, 46,124,242,149, 87, 94,225,122,247,238, 77, 0, 96,201,146, 37,200,207,183,236, 70, 57,100,200, 16,176, 44,139,
+225,195,135, 83,211,166, 77,227, 46, 95,190,188,238,249,231,159,127,222,203,171,126,106, 98, 89,206,144,115,240,224,182,194,194,
+235,207,155, 77,230, 48,158, 64, 98,224, 17,177,138, 18, 9, 85,148,216,171,156, 22,120, 85,130, 18,221,102,197,102,131, 70, 85,
+213, 74,182,251,236,123,230, 83,191,187, 29,247,230, 72, 1, 24, 3,224, 80,157,107,135,172,215,157, 5, 15,192,187, 0, 18, 1,
+ 84, 53,240, 76,149,245,254,187,112,110, 92,103, 26,128, 3, 0, 84, 13,220, 87, 89,239, 79,115, 35, 79, 30,129, 37,134,224, 67,
+235,231, 35, 77,168, 92,241, 86,175,201, 16,107,122,134, 88,207,227, 93,148, 19, 8, 32,192,137,195,213,161,148,161, 0,157, 16,
+ 39,240, 0, 0, 32, 0, 73, 68, 65, 84, 78,226,110, 4,112,145,213,211,227, 86,156, 71, 93,139,191,174, 71,192, 85,176, 63, 4,
+162,243,184,111,106,206, 59,143,251,166,222, 64, 62, 87,228,213, 33, 19,206, 21,121,107,215,174,229,242,242,242,112,250,244,105,
+180,107,215,142,251,229,151, 95,160, 86,171,113,233,210,165,123, 44,218,119,223,125, 55,167, 71,143, 30,177, 91,183,110,109, 80,
+222, 23,107,215,114,237,243, 46, 32,244,116, 62,100,237,198,113,189,175, 48, 50, 74,109,130,249, 82,245, 61,207,190,249,238,139,
+ 57, 17,209,167, 99,139,254,152,210,160,245,124,173,164,228,237, 18,154, 89, 85, 81,169,151,210,122,115, 96,254, 45,181,207,158,
+203,165, 85,198,200,190,232, 17, 26, 4, 0,216,115,246, 14,191,160,172,218, 15, 64, 96, 25,109,232,113,211,104, 74, 40, 40, 45,
+125,187, 33,153,163,198, 39, 82,221, 70,126,208,155,209,254, 81, 28,209,125,180, 68, 32, 48,211,215,254,200, 82,150, 22, 95,186,
+ 83, 94,252, 91,177, 90, 94, 10, 80, 20,145,107,104,255, 89,137,253, 29,213, 27, 82,135, 84,234,115,171,215, 10, 4,180, 62,255,
+ 87, 69,227,255,237, 96,111,245,215,245, 8,184,235, 85, 8, 10,202,110,178, 28, 0, 24, 57,114, 36,119,248,240, 97,176, 63, 4,
+128,227, 56,124,252,241,199, 56,114,228,136, 77, 81,115,187, 12, 20, 10,133,145, 16, 50,226,212,169, 83,134,240,240,240,184, 38,
+122,117, 2, 0,203,108, 0,235,231, 12, 0,108, 80, 80,144, 51,134,154,106,247,238,221,165,251,247,239,255,106,243,230,205,228,
+232,209,163,100,244,232,209,156,141,252, 1,203,118,247, 34,145, 8, 69, 69, 69,216,183,111, 31, 9, 12, 12,100,134, 13, 27,246,
+ 43,203,214,111,180,119,142,234,114,123,200,144, 33,179, 46, 94,252, 51, 66,173,213,132,113,140,201, 4, 10, 70,198, 72, 85, 27,
+141, 70,165, 26,101,183, 88,163,225, 78,105,113,153,241,231, 61,123,215,180, 10, 14, 41,162,105, 93,181,187,121,201,175,167, 97,
+216, 10,166,181,245, 56, 92, 71, 81, 56, 12, 96, 1,128,182, 0,202, 28,100, 62,129, 37,118,224, 56,128, 27, 14, 20,142, 27,214,
+231,230,161,225, 56, 3, 91,250, 38, 3, 72,113, 32,239,107, 88,134, 24,190,114,144, 62,251,138, 40,133, 37,206, 97, 32, 0, 53,
+128,247, 0,156, 6,208, 17, 64,161, 19, 46, 68,123,121,207, 0,120,209, 74,178,122,107, 90,245,214,243,116, 88,226, 1,190,119,
+ 66,222, 12, 0,175, 56, 89,193, 9, 44,177, 16,223, 56, 72,223, 42, 0,190,176,196, 58,236,182,166, 77,108,213,164,255, 0, 48,
+216,234, 17,248, 21,119,227, 53,234, 69, 92, 92, 92,172, 61,209,219, 43, 1,117, 99, 3,226,226,226, 98,179,178,178, 26,125,129,
+184,184,184, 88,106,202,221,113,123,246,135, 64, 80, 86, 37,160,238, 88,190,219,242,166, 40, 56,119,228,157, 61,123, 22, 17, 17,
+ 17,184,124,249,114, 77,157, 25, 54,108, 24,151,155,155,139,241,227,199,223,235,166,242,242,146,137,197, 98,168,213,234,122,229,
+ 73,207,158,133, 50,162, 13,250, 93, 62, 81, 35,239, 77,191,199, 98,162,114, 85, 50,106,188,248, 30,197,169, 56,159,134, 72,108,
+178,212,204,134,149,128,133,104,215,238, 55, 0, 67, 56,112, 60,220,168,120, 67,199, 48, 96, 12, 22,231,216,197,138, 10,220, 48,
+208,155,248,132,104, 64,136,169,160,180,116, 91, 99,249,215, 86,218,109, 33,128,212,252,163,243, 11,197, 97,147, 21,165,101,226,
+118,101, 37,167,196, 16, 4,117, 42, 44, 50,135, 87,149,221,132, 80, 40, 8,237, 25,230, 61, 77,169, 49,125, 11,224,166, 35,203,
+213, 58,247,223,225, 48, 64, 66, 66, 66,108,102,102,102,142,203,236, 94,103, 8,224, 31, 16,168,219,100,175,128,139,223,231,154,
+ 42,111,212,168,145,156, 76,150, 3,178,205, 18,143,125, 96,177, 47,198, 44,215, 96,228,200,145,112,113,218,223, 61,176,141,213,
+ 63,252,240,195,186,102, 80,232, 20, 65, 65, 65,211,237,140, 83,163, 92, 46,223,227,228,119, 25, 0,229,187,118,237,146, 61,245,
+212, 83,209, 43, 86,172,232, 99, 54,155,137, 68, 34, 65, 92, 92, 28,126,249,229, 23,176, 44,139,113,227,198,113,243,231,207, 39,
+253,250,245, 51, 78,158, 60, 57, 50, 33, 33,225, 78,191,126,253,234, 87,192,230, 36, 51, 49,143,140,217,212,171,119, 31,255, 83,
+ 39, 79,174,252,157,207,239,213, 33,178,195,151,126,193, 33, 37,130, 16, 49,119,120,223,161, 64,185,162,106, 68,120, 80,200,251,
+ 93,186,116, 57,236, 19,230,189,254,147,101,159,211, 13,201,115, 85, 1,224, 1,136, 6, 48, 12,192, 50, 0,175, 89, 43,131,119,
+ 29,242,251, 6,150,113,246,127,193, 50, 36,144,215,136,135,225, 33,171,245,235,140, 59,254,184,213,187, 64, 53, 34, 47, 4, 64,
+164,149,152, 27,147,121,218,250, 92, 40, 44,227,249, 13,201, 19, 90, 45,231, 36, 88,166, 17, 62, 3, 32,223, 42, 59,223,122,190,
+ 25,150,113,242, 77,176, 12, 93,208, 14,228, 77, 1,240, 5,128,110, 86, 37,201, 62,157,183, 97, 9, 90,188,108,125,246, 7, 7,
+242, 94,135,101,118,131,206,137,252,243, 2,176, 31,192,119, 14,202,227,105, 0,255,177,126,254,110,151, 62,129,181, 44, 51, 1,
+172, 1,176,220,122,255,118, 67, 63,152,149,149,149, 3, 0,197,197,197, 50, 91,180,127, 93,171,191,184,184, 88,102,255,108, 99,
+176, 61,179,233, 87,186, 38, 58,191,174,149,190,233, 87, 26, 15, 66, 94,110,110, 46, 70,140, 24,129,203,151, 47,223, 37,113,169,
+ 52,118,235,214,173,178, 14, 29, 58,196,178, 44, 43,139,140,140,228, 88,150,133, 94,175,199,207, 63,255,140,232,232,232,216,125,
+251,246,213, 43,175,107,110, 46,190, 15, 14,173,149, 87,221,231,142,129,118,229, 77,224,209, 80,112, 44, 48, 39,242, 43,174,154,
+245,129, 92,239, 7,121,126, 16,250,142,216, 29,123,105, 71,227,110,246,107, 37, 37,219, 1,108,239, 24,209,182, 43,128, 55,140,
+102, 22,219,206, 23, 98, 68,152,101,184,147,112,156, 70,195, 48,203,202,203,203,239, 56, 65,166, 43, 57,142,243,206,191, 44,127,
+ 86,121,122,107,171,242,219,114,148,223,209,128,207,175,242,174, 86,112, 80,170,205, 92,104,136, 48,128,207, 98,146,222,104,254,
+126,217,235, 15, 7,252,235,147,227, 74, 7, 68,147,227, 68,167, 77, 92,137,100,191, 7,163,173,158,151,236, 68, 87,191,105,243,
+134, 57,138,202,183,127,142, 56, 43,143, 36, 42,208, 68,121,247, 88,236,153,153,153, 24, 56,112, 96, 75,210, 69,184,156, 57, 23,
+ 0, 27,249,159,103,176, 65,102,105, 99, 77, 37,127, 91,221,224,241,120, 33,124, 62,191,252,248,241,227, 95, 62,252,240,195,238,
+174,243, 0, 0, 17,114,185,124,157, 85,177,152, 34,151,203,127,176,125, 58,227, 84, 4, 80, 13,160,114,197,138, 21,125,231,205,
+155, 87,122,246,252,249, 54,122,189,158,200,100,135, 32, 18,139, 64, 17, 10,135, 14, 29, 34, 61,122,244,208, 37, 36, 36, 12,158,
+ 60,121,178,195, 54,151,115,232, 0, 51,225,169, 9,107,250,246,237,223,129,102,140,143, 95,203,191,250, 34, 91, 88,240, 2, 0,
+136, 65,113,189, 59,117, 61, 21, 26, 26,146,195,227, 11,223,254,207,226,148,234, 79,150,125,236,118, 70,214,167, 0,188, 97,213,
+134,198, 3,184, 4,192,167,158,239,237,181, 90,236,241,176,204, 35, 79,106,196,253,223, 25,150,232,114,103, 20,128, 42,235,243,
+188, 70,228,197, 0,184,234,164,188,171,214,231,119, 52, 34,111, 22,128,153, 0, 46, 0,152,111,125, 47,123,217, 50,171,245, 63,
+199,106, 13,111,180, 90,217, 13,201,155, 97,205,143,126, 86, 47, 66,125,233, 84, 91,239,219, 60, 1, 27, 27,145,247,181,181, 83,
+240,114,178,243,250,218, 65,254,125,100,245,108, 28,176, 42, 53,168, 35,251, 23, 0, 61,172,101,145,111, 85,164, 28,186,118, 87,
+175, 94,205, 1,144, 53,211, 66, 64,100,230, 26, 45, 55,115,141,182,158,133,123,220, 10,114,106, 22,121,127,254,249, 39,249,243,
+207, 63,107, 93,251,238,187,239,114, 0,144, 31,126,248, 1, 0, 72, 81, 81,237,152,186,134,200, 31, 0,218,255,249, 39, 1,106,
+203,123,249,131, 5, 22,114,252,208,154,166,186, 33,122, 59, 92,232,133,205, 92, 33,248, 0,175, 26, 53,228,111,101,245, 59, 98,
+177,216,169, 69, 68, 56,142, 35,132,144, 37, 11, 19,123,122,133,181,139,156,192,194,171,115, 73,113, 25,207,100, 80,114,173, 67,
+125,136,143,183,128, 48, 38, 22, 10, 37,205, 16, 9,145,168, 52, 76,167, 70, 12,130,134,234,108,221,255, 31,164,139,222,126, 56,
+162, 33, 98,225,224,222, 44,128,230,144, 87,175,197,222,161, 67, 7,156, 62,125,186, 69,144, 63,251, 67, 32, 14,156,103, 0, 0,
+ 27,101, 52,190, 63, 78,219,188, 48,164,185,202,199,108, 54, 87, 1,192,128, 1, 3,154,180, 32,144,141,252,173,168,180,126, 58,
+187,192,142,208,106,152,157, 1,128, 79, 63,253, 52,252,249,153,207, 47,122,104, 96,244, 12,141, 90,237,207,152, 25, 83, 88, 88,
+216,157,240,240,240,171,106,181,122,249,228,201,147,243,157, 77,215, 79, 63,254,196, 0,120,237,217,233, 47, 14, 31, 54,124,248,
+120,137, 68,210,138,128, 51, 91,102, 78,112, 85,122,173, 98,221,149,243,197,183,189, 69,194, 38, 45,124, 87, 87, 1, 48,195, 18,
+164,230,204, 56,252, 41,235, 97, 70,195,203,139,154, 97,137,168,119,118,190,166, 12, 64,182, 3,121,187, 96, 9, 90,115, 6,207,
+ 58,145,190,207, 1,124,233,168,239, 7,240,170,221,119, 26,147,247,141,213, 99,224, 8,133, 86,203,222,153,244,185, 50,223,245,
+115, 7,242, 30,117, 66,158,205,219,176,209,154, 55,206, 44, 31, 75,226,226,226, 98,234, 70,253, 91,221,234, 57,238, 52,244,184,
+184,184, 24,187,149,250, 90,154,188, 22,143,235,165,183,141, 84,187,118, 27, 95, 89,153, 62,211,118,141, 22, 80,223, 25,116,236,
+254,178,226, 98,141, 83,153, 70, 8,247,159, 89, 67,200,123,159,255,182,240,231, 53,161, 59, 79,156,188, 61, 59,196,159,125,146,
+ 10,242, 11,224, 56,128, 16,206,104,100,216, 50, 22,168,164,141,108, 64,233,109,189, 75,171,147, 89,221,252,178, 58,231, 45, 37,
+ 11, 91,220, 74,128,127, 23, 60,182, 92,115,191,223,145, 5,208, 70, 44, 22,223, 30, 48, 96,192,163,103,206,156,105,178, 64,185,
+ 92,126, 48, 40, 40,104,166, 92, 46,223,232,130, 2,192, 88, 61,167, 0,128, 13, 27, 55,164,192, 50, 60,221, 44,248,246,187, 47,
+127,133,101, 40,246,190,160, 62, 5,192,224,142,214,215, 72, 33, 25, 61,242,254,177,242,106,193, 74,164,164,206, 53,183, 43,103,
+ 75,151,247,119,128, 92,167,123, 1,240, 50, 1, 8, 97,193,149, 26, 12,244,230,178,178,138,115,214,142,203, 41,188,247,249,111,
+220,143, 31,141, 37,227, 95,219,159, 11, 32, 55, 97,112,215, 55,130,130, 68,139,248, 60,194,221,174, 50, 92,185, 77, 51,155, 36,
+ 2, 74, 44,225,243,120, 38,134, 21,187,146,190,204,204,204, 28,219,242,182,214, 79,183,148,177,123,166,254,217,185,254,157,152,
+ 22,216, 88,189, 39, 46, 92,255,171,229,221, 55,197,167, 41, 74, 24, 53, 69, 1, 66, 8,158,156, 56,171,222, 62,100,215,143, 25,
+205,245,174,101, 0, 72,115,144,191,157, 18,176,209,133,199, 3,173,237, 72,251,119,237, 31,248,245, 84,196,230,140,152,241,200,
+251,103,203,243,160,165, 43, 0,114, 57, 39,151,203,103, 53, 85,206, 83,111,238,231, 0,224,217,145, 61,200,183, 71, 46,126,172,
+231,230,172,121,109,234,241, 30,180,150, 68, 5, 9,248,173, 64,136,206, 71,194,175,232,213,205, 47,127,219, 1,215,100, 91, 93,
+217, 77, 89,111,254,126,145,231,223,197, 3, 64, 90,146,215, 36, 35, 35,157, 75, 78,158, 77,118,253,152,241, 79,111, 94,225, 86,
+131,217, 23,150, 61, 1,254,118, 32,238,238, 35,236,129, 7, 30,252, 13, 53,126, 30,224, 37, 34, 96, 89, 14, 32, 4,213,122, 79,
+243,247,192,131,255,217,254,192,147, 5, 30,120,240,191, 3,198, 12,168,117, 78, 47, 59,239,129, 7, 30,252,131, 65,121,178,192,
+ 3, 15, 60,240,192, 3, 15, 60, 10,128, 7, 30,120,224,129, 7, 30,120,224, 81, 0, 60,240,192, 3, 15, 60,240,192,131,127, 34,
+106,197, 0,156, 61,123,214,237,104,212,250,130, 9,235,147, 55,254,145,232,152, 94,125, 58,201,218,180, 11,143,213,232,181,178,
+195,178,220,216,172, 67,231,114,220,149,215,123,240,152,152,126,125, 6,203,238,148,150,194, 91,226,141,155, 37, 5,177,121, 39,
+246,186, 45,175,185,223,119,238, 52, 42,102,200,224, 14, 50,137, 55, 15,124, 30, 5, 34, 38,120,114,234, 69,226,174,188,228,255,
+151, 27,243,208,224,135,100,254, 62, 60,128, 15, 36, 12,174,127,142,211,131,122, 95,143,188, 22, 43,175,209,169,102, 45,253,125,
+ 59, 12,120,154,243, 99, 11,238,107,250,126,127,183,200,237,142,180,255, 7,145,247, 92,251,184, 85,169,219,242,222,168,188,119,
+195, 85, 79,125,254, 75,228,241, 81,207, 20, 89, 87,228,197,198,198, 70, 25, 12, 6, 69,110,110,174,242, 65,190,175,203, 10, 64,
+ 67, 88, 29,131,206, 0, 58,192,178, 78, 64,193,252, 28,220,112,246, 7,198, 12,239, 16, 67,192, 34, 36, 32, 8,185,135,207,200,
+222,153, 59, 3,195, 70, 15, 3,163,213,201,122,116, 27, 9,150,133,108,222,139, 15,199,246,239,223, 7,215,174, 21, 65,165,212,
+ 98,237,198, 35, 57, 13,201, 27, 56,226,153, 24, 14, 4,145,157, 58,200,146,223, 92,142, 23,158,121, 12,223,252,247, 51, 0, 98,
+236, 61, 87, 2,138,130,108,245,146,197,200,207,191, 2,169, 52, 18, 34, 9, 31,183, 74,242, 99,161,171, 63,201,139, 30,235,203,
+ 9,133, 66, 72, 36, 18, 20, 20, 20,160,109,168, 31, 90,241,125,208, 54, 34, 0,129, 18,127,120, 19, 51, 40,138, 2,199,154,161,
+ 19,241,161,186,163,194,164,255,102, 57, 44,168,212,133,125, 56, 95,137, 10,126, 1, 66,248,120,243, 33,148, 80,224,243, 0, 74,
+200, 71,206,207,209,156,137,227, 33,110,194, 9,167, 11,188,247, 83,171, 99,194,195,195,209,174, 99, 59,153,222, 96, 4, 37,146,
+ 0, 38, 96, 78,218,169, 24,189, 78,139,175,254, 21,147,243, 0, 21,201,150, 54,143,249,127, 25,174,150,133,211,207, 39,188,179,
+200, 27,192, 67,173, 37, 94,255, 41, 45, 45,237, 38, 16,139,192,122,121,125, 8, 96,125,230,135, 41,213, 45, 37, 3,162,122,140,
+138,185,113,241,112,125,123, 13,252, 35,234,104, 70, 70, 6,249,102,211,166,203, 34,161, 80,194,178,172,191,183,143,143,207,132,
+ 39,159,244, 2, 64, 39, 39, 39,115, 45, 52,205, 20, 0, 36, 39, 39,179,205, 32,206,207,223,223,127, 65,215,174, 93, 39,139, 68,
+162,118, 37, 37, 37, 37,165,165,165, 39,105,154,254, 0, 64,129, 27,242, 2, 2, 3, 3,151, 63,242,200, 35,143,135,133,133, 73,
+ 79,157, 58,117,231,194,133, 11,199, 13, 6,195, 82, 88, 86,136,117, 26,163, 70,141, 74,141,136,136,120,219,219,219, 27,190,190,
+190,167, 15, 28, 56, 16,253,183,241, 0, 52, 64,254, 60,111, 17,255,161, 25,195, 59,174, 98, 57,206,112,244,202,157, 79, 87,199,
+168, 14,204,207,193, 69, 71,223,149,223, 62,200, 25,171,229, 48, 85, 43,193, 55, 83,248,227,226, 21, 60,247,220,252,154,251, 20,
+ 5,252,150,187, 17,173, 34,194,101,108,181, 26, 52, 75,112,232, 80,110,236,218,141, 71, 26,144, 24,201,157, 62,113, 17,196,203,
+ 15,103, 46, 22,227,220,197,231,241,213,247,191,212,220,101, 89, 96,236,208,161, 64,117, 25, 0, 95, 20, 92,184, 4, 65,171, 0,
+ 12, 27,210, 75,166,212, 53,162,179, 16, 10, 32, 20,250,245, 25,128,214,222, 66,180,109, 37,134, 95,112, 16, 2, 69,190, 8, 20,
+243, 32,224,241, 96, 50,155,161,100, 88,156,170,116,188,220,230,210, 87,219,115, 18,158, 2,126, 94, 94, 8,105, 21, 12, 63, 63,
+ 47,112,148, 25, 12, 91, 13, 51,204,240,241,241, 66,171,214,237, 80,112,185, 11,215,177,219, 55,141,118, 74,253,227,215,112,254,
+190,222,240, 15, 8, 68, 72,171, 96,104,181, 90, 8, 69, 98, 8, 12,150,197,249,162,164,145, 50,185, 66,137, 71, 94,220, 24, 91,
+ 92,114, 11,138,178, 34, 84,157,203,112,164, 12, 56,221, 73,140,158, 57, 58, 54,123, 99,118,142, 19,178,238,171, 18, 80, 88, 88,
+200, 1,128, 84, 42, 37, 45, 69, 94,120,120,248,115, 52, 77,111, 4,128,201,177,177, 84,198,214,173,238,116,190,150, 53, 82,237,
+ 28, 57, 28,199,129, 16, 82,243,105,187,102,123,206,193, 78,106,174,172, 39,239, 10,249,247,240, 54, 49,219,125, 3,252,187, 1,
+128, 80, 34, 6,173, 55,128,213,234, 82,143, 31, 57,188, 36,225,157, 69,221, 51, 63, 76, 41,118, 36,231,211,119,231,114, 86, 11,
+139,129,101, 8,146,181,246, 67,245,246, 69,125, 71, 61,142, 81,143, 61,225, 82, 25,221,184,120, 88,214,169, 87, 76,236,181, 63,
+114, 92, 87,138, 19,228, 46, 61,158,152,152,136,173, 9,217,141, 62, 19,155, 93,123, 43,146, 30, 1,150, 87, 45, 55,176,208, 51,
+150,114,213, 90, 63, 51, 6, 7,160,139,175,160, 81,121,171, 86,173,202,121,247,245,183, 66, 39, 78,158,228, 99, 48,232,177,250,
+227,143,168,181,107,215, 26,230,206,157, 27, 14,224, 86,115,183,189, 73,147, 38,141,222,185,115,103,150,171, 74,212,204,153, 51,
+185,194,194, 66, 84, 85, 85, 97,197,138, 21,240,245,245, 69, 76, 76, 12,164, 82, 41, 54,110,220,232,110,187, 27, 57, 96,192,128,
+ 77,111,190,249,230,181,174, 93,187,110,236,223,191,255,165, 59,119,238,180,203,205,205, 29,240,194, 11, 47,236, 81,171,213,169,
+176,108, 0,231, 44, 98, 39, 79,158,156,153,146,146, 18,108, 50,153, 32,145, 72,224,237,237,221, 70,171,213, 62, 61,113,226,196,
+ 9,231,207,159,159, 11,224,191,206, 10,139,136,136,104,187,104,209, 34,228,229,229,113, 26,141, 38,160,206,109, 30,156, 91, 85,
+181, 89,112,246,236,217,186, 94, 2,231, 20,128,213, 49,104, 15,203, 14,120, 60, 0,102,173,145,185,153,123,181,252,147,161,157,
+ 67,231, 63,210,163,205,146,214,254,146,182,171, 81,182, 5,192,149,249, 57, 13,111, 82, 99,172,150,163,117,167, 71,177,252,237,
+201,216,104,199, 73,135,143,167, 67,171, 51, 98,220,232,249,120,120,216, 76, 60,147,248, 8, 36, 18, 17,104, 51, 3,141,142,150,
+ 53, 92,201,138, 0, 26,152, 60,125, 61, 94,126,115,118,205,213,177, 15,199, 64, 44, 22,225,199, 67,191, 96,239,177, 92,108,218,
+240, 25, 12,122, 35,132, 60, 62,124,188,132,208, 86,149,196, 42, 75, 80,239,238, 99, 28,199, 1, 28,107, 57, 40, 22, 28,199,193,
+ 72,139, 44,221,147, 8,224,104, 51,204, 60,192, 12, 51,204, 52, 11,198,220,184, 2,187,240, 69, 41, 23,232,199,192,207,215, 27,
+225,237,162,208,173,119, 39,248,250, 72,160,170,174, 64, 89, 69, 25, 20,170, 59, 48, 25, 8,188,188,188, 16, 18, 50, 12,149,229,
+ 33, 92,171,208,143,234,119,227,143, 92,204, 49,122, 29,244,124, 64, 40, 22, 66,175, 19,130,214, 9, 97, 16,139,192, 39, 12, 56,
+240, 96,208, 87, 67,175,211,160, 93,187,182, 50, 33,143, 15, 57,212, 8,165,167,163,238, 26,243,117,177,114,211, 74,135, 21,232,
+237,164,183, 27,239, 43, 19, 18,106,237,239,158,144,144, 48, 48, 40, 40, 40,159, 16, 98,224, 56,142, 31, 24, 24,232, 85, 80, 80,
+ 16,108, 93,221,173,173,187, 21,121,238,220,185, 83,237,126, 35,198,221,213,226,234,101, 75, 66,184, 57,115,230,196,174, 93,187,
+214, 37,153,225,225,225,201,131, 6, 13,250, 96,120,191,126, 48,137, 68, 72, 75, 75, 99,103, 79,153, 18,151,254,195, 15,217, 46,
+254, 62, 86, 45, 89, 82,115,190,224,253,247,145,182,116,105,163,231,206,136,173, 67,238,156,117,179, 24,110,244,232, 14, 61, 1,
+ 92, 79, 73,201,212,187, 72,254,185,189,123,246,244,179,181, 25,111,177, 4,183, 43,202,161, 86, 40, 49, 96,208, 96,175,159,191,
+218,144,157,240,206,162,158,153, 31,166, 56, 90,155,157,153,247,193, 90,254,179, 79, 79,224,119,150, 74, 89,171, 18,128,247,211,
+214,212, 86,162, 23,188, 6, 0,120,247,245,185,110,109, 39,237, 22,249,219,144, 25,228,194,195,163, 93, 18,237,205, 39, 56,183,
+244, 69, 16,191, 86, 48, 95, 63, 7,227,245, 63,145, 47,215, 34,122, 95,185, 83,223,239, 63, 96,192,209, 89,211,146, 34,147, 94,
+122, 33, 32,243,187,239, 89,169, 84, 74, 45, 79, 73,133,239,146,229,248,241,199, 31, 75, 51, 50, 50,168,230,242, 2, 76,154, 52,
+ 41,110,231,206,157, 7,118,238,220,105, 59, 31, 99,251,223,129,130, 18,115,224,192, 1, 89, 81, 81, 17, 58,118,236,136, 17, 35,
+ 70,192,223,223, 31, 74,165, 18,183,110,221,194,141, 27, 55, 48,102,204, 24,110,204,152, 49,177,111,189,245,150, 43,229, 52,233,
+145, 71, 30, 89,189,106,213,170, 45,253,251,247, 95, 77, 8,185,101,215,143,147,248,248,120, 31, 0,185,214,195, 41,121,115,231,
+206,221, 54,103,206, 28,234,244,233,211, 32,132, 32, 56, 56,184,230,216,183,111,159,112,200,144, 33,159,221,188,121,243,132, 35,
+ 65,147, 39, 79, 38, 59,118,236,224,138,138,138, 34,242,243,243,113,253,250,117,162, 82,169, 58, 2,224, 79,156, 56,209,188,107,
+215, 46,238, 65,146,191,237, 90, 93, 37,128, 95, 15,249, 7, 71, 71, 5, 39,245,139, 12,154, 78, 8, 17,112, 28,103, 98, 45, 7,
+109, 54, 25,244, 66,138,109,219,187,181,248,237, 86,126, 29, 59,237, 60,117,227,251,213, 49,236,209,249, 57, 13,239, 22, 7, 8,
+209,163,123, 87, 80, 84, 14,242,149, 85, 0, 46, 65, 85,122, 21, 2,177, 8,187,246,124, 10, 93,165, 25,211,159,127, 3, 44, 11,
+ 60, 57, 97, 40,204,124, 31,135, 47,151,159,127, 9, 44, 11,140,235, 75,172,188, 18, 9,131,145, 70,252,216, 49, 16, 7, 80,216,
+180,121, 63, 40, 10,216,246,253, 70,148, 94,255, 51,118,223,150, 85, 57, 13,109,151,200,114, 0,203,178, 96, 89, 22,102,179, 25,
+ 70, 1, 7, 19, 49,129,166,105,232,188, 12, 0, 43, 6,197,153, 97, 22,114,168,166, 13,208,170, 85,141,166, 45,196,199, 8, 62,
+ 95,130,224,224, 96,116,234,212, 9, 97,173, 7, 3, 60, 10,102,243,105, 80,156, 18, 6, 45, 3, 51,171, 69,217, 45, 57, 66,130,
+ 43, 17, 28, 48, 12, 31,174,250, 57,230,251,111,239,149, 37, 49, 48,224,140,149,128, 65, 4,154, 50, 65, 43,228,163, 90, 34, 0,
+ 95, 32, 4, 88,111, 16, 30, 65,181, 86, 7, 69, 89, 17, 10, 78, 31,131,188,184, 24, 44,203,130,226,120,110, 85,154,175,214,223,
+ 85,156, 95,120,229, 5,199,253,100,237,213,199, 12,153,153,153,139,222,124,243,205,217,197,197,197, 20, 33, 36, 36, 35, 35,227,
+123, 88, 54,119,242,114,183, 34,207, 74, 72, 16,172, 91,183,110,243,157, 59,119,176,109,219, 54, 68,119,237,202,107,142, 6, 34,
+149, 74, 73, 98, 98, 98, 12,199,113,178,181,107,215,186,188, 97, 17, 77,211,233,195,173,117, 74, 40, 20,162, 75,151, 46,216,126,
+232, 80, 86, 72, 72, 8, 42, 42, 42,156,150,115, 31,183,170, 37, 3, 7, 14,228,108, 27,196,216,125,254, 57,106,212,168,210, 69,
+139, 18,252, 83, 82, 28,175, 30,151,240,206, 34,111,111, 19,179,189,119,207,158,126, 60,138,194,171,207, 78,135,222, 96, 68,218,
+151, 95,194, 75, 34,129,193, 96,128, 65,175, 71,223,254,253, 58,255,242,221,119,115,208,240, 86,222, 53,125,206,210, 5,175,177,
+ 0,168,171,133,133, 84, 93,194,175,219, 60,221,121,241,246,221, 70,198,222,188,124,132,139,123,242,197,216,172,221, 95,186,165,
+ 8,216,239,218,199,109, 13,116,120,221, 17,122, 4,240, 81, 84,109,198,225,184, 16, 8,230,103, 64, 61, 61, 10,252,192, 80,151,
+200, 63, 49, 49,177,204,164,213,221,122,233,213,217,237,223,121, 99, 33,214,110, 72,191, 56,104,192,128, 14,233,107,210,189, 94,
+ 95,248, 22,190, 27, 58, 24,155, 55,111,158, 1,203,174,165, 77, 33,254,152,157, 59,119,202,108,100,159,145,145, 81, 0,203, 54,
+237, 7,157, 81, 0, 14, 28, 56, 32, 11, 9, 9, 65,255,254,253, 25,138,162,248, 22,239, 44, 11,129, 64,128,160,160, 32,180,110,
+221, 26, 55,110,220,192,129, 3, 7,100, 46,180,185,132,241,227,199,127,180,106,213,170, 53, 93,187,118, 93, 79, 8, 97, 1,124,
+ 6,224, 49, 0, 71, 8, 33, 75, 97,217, 95,229, 45, 0, 75,157,145,183,106,238,220, 31,134, 39, 36,144,221,187,119,131,207,231,
+ 67, 38,147,225,220,185,115,232,212,169, 19,150, 45, 91,134, 94,189,122, 97,246,236,217,252,247,222,123,111,149, 35, 97, 59,118,
+236,224, 0,192,203,203,235,118, 64, 64, 0,196, 98, 49,132, 66, 97, 53, 0,198,129,199,238,190,145,255,172, 69, 31,214, 92,251,
+ 60,229,157,122,149,128,250,102, 1, 80,124, 30,197,103, 88, 78,163, 55, 49,183, 8, 33, 34, 31, 17,175,143,159, 16,209,146,158,
+163, 58, 34,246,101,160,219, 8,180,241,230, 38,205, 24, 22,245, 78,144,159, 87,220,234, 24,248, 55,156, 28, 22, 60,158,173,207,
+246, 3,208, 14,254,225,227,161, 55, 27,176, 62, 99, 3,190,217,188, 13, 99, 98,135, 1, 0,116, 58,128,199,111, 88,148,196,171,
+ 43, 0,192,108,182, 87,164,202, 0,228,130,226,137,144,244,220,139,136, 79, 76,196,207,123, 44, 68,230,229, 13,104,171,111, 55,
+154, 89, 38,240,106,200,223,196,152, 97, 84,155,160, 83,234,160, 52,209,144,235,104, 40,140, 26, 40, 53,213, 80,148,107, 32, 87,
+ 26, 32,175,110,120, 9,245, 87,159,233,192, 17, 66,192,227, 17, 16, 74, 4,179,153, 3,163, 43,134, 86,121, 21,165,101, 42,200,
+ 21,213, 80,105,204,144, 43, 12, 40, 41, 41,195,197,203,103,161, 84,157,197,224, 1, 3, 27,220, 27,157, 7,128,210, 24,160,191,
+118, 11, 85,127, 92, 66, 85,113, 17,212, 42, 57,212, 42, 57,138, 46,158,198,241,204,175,144,187,117, 19, 42,174, 93,131,153,102,
+ 45,173,137,247,151, 13, 3, 18,235, 65,199,199,199,119, 95,190,124,249,155,109,218,180,209,110,219,182,173, 79,102,102,230, 79,
+ 0,250, 91, 11,221,237, 5,167,132, 97, 97, 11, 0, 96, 72,175, 94,152, 51,103, 78,249,169,203,151,179, 31,234,214, 45,166, 57,
+ 18,191,117,235,214, 28, 0,100,238, 92,139,149, 57,119,238, 92,151,228,154, 68, 34, 0,192,246,237,219, 17, 26, 26,138,119,230,
+206,197,130, 5, 11, 16, 18, 18,210, 34,198, 97,109,164,159,145,145, 81,115, 0,192,225,195,135,195, 1, 76,112, 82,204, 67, 1,
+129,129,221,120, 20,133,231,227,227,161, 84,169, 81,114,251, 22, 4, 2, 62,248,124,203, 33, 16, 8, 32,146,120,161,163, 84,250,
+113,255,209,163,157,178,216,175, 22, 22,226,219,237, 63,213, 28, 54,188,159,182, 6,239,167,173,193, 94,217, 97,151,223,119,116,
+194,123, 49, 0,112,243,242,145,156,209, 22,242,151,161,133,172,118,116,254,235, 79, 80,254,242, 0,140,202,170, 64,143, 0, 62,
+120,126, 65, 96, 20,229,136,222, 87, 14,111,190,133, 31,120, 14,230,100,221,184,118,173,234,243,140,255,118,253,250,191, 95,227,
+211, 47, 63, 43,250,108,213, 71,239,191,249,218,188, 9,203, 63, 88, 14,137,175, 55, 70, 12, 25,134, 83, 39, 79,125,253,108,210,
+179,110,191,179,141,252,109,231,187,119,239,198, 67, 15, 61,212, 17,192,116,103,221,254, 38,147, 9, 3, 6, 12, 96,205,102, 51,
+ 95,165, 82,193,104, 52,194,104, 52,226,242,229,203,144,201,100, 56,118,236, 24,218,180,105, 3,147,201,132,153, 51,103, 58,147,
+214,169,137,137,137,159, 76,158, 60,217,111,253,250,245,126,132, 16, 33,128,195, 0, 84, 0, 6, 0,248,201, 78,241, 60, 8,160,
+151, 35,121, 59,223,124,243,135, 9,125,251,146,239,226,227, 81,250,251,239,248,232,163,143,216,159,127,254,249,255,221,188,121,
+ 51, 84, 38,147,189,188,104,209, 34,152, 76, 38, 12, 27, 54, 12,222,222,222, 67,157,205,191,128,128,128,202,214,173, 91,195,199,
+199,135,243,246,246,190,105,205,195, 7, 94, 7,237,149,129, 70, 61, 0,243,115, 80,177, 26, 21,233,191, 93,171,200,138,142, 10,
+142, 29, 40, 13,178,172, 35, 62,126, 25,126,243, 25,131,131,127,148, 99,104,207, 64, 60, 34,253, 25,190,191,124,208,127,108, 63,
+233,244,205, 71, 46,254, 81,159,240, 54,157, 19, 8,199,149,112, 19,159,155,143, 5,175,125, 6, 64, 14,203,178,201, 70, 68,118,
+ 29, 0,177,136, 15,189,214, 8,208, 22, 5,193,215,215, 23,229,242, 6,247,203,134, 94,119,133, 0,224, 46,254,246, 37, 40,106,
+109, 45, 35,129,213,255, 9,131,209, 4,137,143, 24, 16, 90, 20, 4,141, 90,141,161, 67,135,226,200, 79,223, 53,108,142,176, 52,
+ 88,150, 15,134, 97, 96, 52, 26, 81,205,231,129, 79, 83,192,109, 53, 24, 47, 6,102, 33, 11, 78,192,131,142,199, 7,163,213, 65,
+105,108, 56,214,201,215, 71, 11,134, 33, 48,210,102, 40, 85,106,228, 95, 43, 70,201,237, 74,232,105, 19,212,213,114, 84,107,148,
+ 48,152,105, 16, 62,129, 86,167,130, 90,119, 3, 69,165, 42, 84,105, 26,222, 75,194,108,167,165, 49, 42, 45, 74,206, 94,194,157,
+ 75, 55,160,214, 92,131, 70,169, 4, 7, 62, 4, 60, 2,142, 8, 64, 81, 22,175,175, 43,234,230,219, 73,111, 59, 53, 28,224, 0,
+119, 0,220, 89,188,120,177, 30, 0, 22, 45, 90,116, 42, 37, 37,197,219,154,116, 3,128, 98,119, 5,175, 91,183,110, 69,124,124,
+ 60, 0, 32, 42, 36, 36,212, 58, 38,206,107,206,198, 97,115,255, 91, 61, 1, 14,179, 47, 60, 60,124, 52, 77,211, 72, 75, 75,195,
+211, 79, 63,141,201, 99,198,220,237,232,207,159,183,120,130, 66, 66, 56,103,227, 2, 22,188,255,126,205,152, 63, 0,188,181,100,
+ 73, 45,207,128,147,110,255, 90,176, 89,255, 54,210,183, 33, 35, 35, 3,201,201,201,200,206,190,254, 45,128,239, 28,118,104,124,
+254,127, 12,180, 17, 60, 30, 15,151,175, 23,128,227, 56, 92,204,191, 10,154, 54,129, 2, 1,159,207, 7, 33, 4,172,217, 12,189,
+ 86,135,171,191,253,118,200,137, 60,164,236, 73,255,217,167, 39,216, 91,252, 20, 0,156, 56,115, 30,157,163, 34, 93,154,166,156,
+157,249,159, 26,107, 63,219, 98,249,219,134, 66,184,199, 39,189, 24,187,111,167,123,222,128,102,129,252, 54,132, 17, 93, 80, 62,
+ 71, 12,209, 35, 83, 97,206,219, 15,179,218, 18,111, 80, 62,231, 97, 68,102,228,194,204, 54, 94, 85,186,118,238,218,214,203,203,
+219,235,211, 47,214, 25, 98, 71,141, 18, 14, 30, 58,228,187, 3,123,127,121,252,242,181,124,128,229, 32, 22,137, 48,108,224, 48,
+236,217,189, 7, 99,199,142,229,246,239,223,239,116, 87, 80,215,234, 63,112,224, 0,174, 95,191, 78, 3, 16,158, 60,121,146,158,
+ 61,123,246,180,140,140,140,103, 29,201, 41, 44, 44, 68,199,142, 29, 1,128, 42, 44, 44,196,185,115,231, 16, 25, 25,137,168,168,
+ 40, 40, 20, 10,228,229,229,161, 67,135, 14, 8, 13, 13, 69,100,100, 36, 10, 11, 11, 27,175, 40, 20,149,148,152,152,248,193,200,
+145, 35,125, 78,157, 58,229,199, 48,204, 75, 18,137,100,162, 94,175, 95, 5,203,214,231,176, 42, 0,107, 96,217,157,143, 70, 35,
+211,219, 5, 2, 65, 82,230,188,121, 27, 31, 14, 9, 33, 21, 11, 23, 98, 40,203, 98,205,238,221, 92,169, 78,247, 34,238,110,203,
+190,241,226,197,139,235, 25,134,225,251,248,248, 32, 60, 60,220,199,100, 50, 65, 32, 16, 56,122,125,175,210,210,210,174, 55,111,
+222,132, 86,171, 37, 10,133,162, 59,159,207,143, 99, 24,166,197,238, 56, 86,223, 16, 64, 24,128,142,147,162, 35, 94,109, 31,236,
+ 61, 29, 38, 61,208, 53, 14,103, 66, 38,225,145,185, 95, 65, 95,169, 4,207,207, 23,178,213, 73, 24,209,227, 55, 4,157,207, 26,
+ 9, 32,162,161, 31,232,228,215, 14,127,156,223, 97,231,112,208, 2, 48, 89, 14,147, 17,124,150, 7,202, 74,226, 59,127,116,188,
+139,200,254, 11, 28,198,246,239, 85,199, 8,229, 3, 16, 0, 2, 49, 24, 98,134,213, 14,198,148,233,243, 0, 64,150,242,238,220,
+ 6, 27,130,153,229,192,176, 20, 40,134, 1, 69, 27,161,163, 44,117, 71,207,227,193,155,209, 67,173,231, 64, 4, 4,102,179, 25,
+ 58, 51, 80,174,109,120,183, 83,134,102, 97, 16,240,192,234, 24, 48,172, 10,154,106, 19,120, 68, 0, 35, 99, 2,205,209, 96, 76,
+ 52, 32,100, 65, 17,128,136, 88,168,244,102,148, 85,232,160, 53, 50,245, 26,201, 20, 49,215, 12, 26, 17,114,119, 72,215,100,208,
+ 67, 37,151,131, 34, 60,240,249, 28,192,241,193, 35,238,155, 58, 87,138,174,208, 93, 35,187, 10,157,113,251, 55,164,155,193,110,
+ 15,237,148,148,148, 9, 0,110, 46, 90,180,168,191,191,191,127,128, 74,165, 42, 74, 73,113,125,135,204,185,115,231,190,176,110,
+221, 58,180,110,221,218,254,154,114,205,154, 53,217, 15,117,235, 54,250,212,229,203, 7,155,171, 33,204,157, 59, 55,214,110, 40,
+160, 49,242,143, 25, 52,104, 80,248,240,126,253, 64,124,125,145,146,146,130,133, 11, 23, 66, 32, 16,192,164, 80,192,223,223, 31,
+239,204,157, 91, 19, 23,144,156,152,232, 80, 9,168, 59,198,239, 40, 38,160,177, 17,133,186,214,191, 3,239,128,195, 42,163,144,
+203,187,249,248,250,162, 82,161,128,236,196, 9,240, 41, 30,140, 38, 19,116,122, 61, 88,150,173, 81, 92, 24, 19, 13,218,104,116,
+102, 72,131, 5, 64, 89,135, 1, 88,187,138,111,176, 94,199,251,105,107,132, 0,208, 89, 42, 45,191, 81,191,109,225,146,151,170,
+ 93,199,232,152,125, 59,191,116,197,221,220,112, 6,187,224,246,175,229,150,221,250, 95,244,123,238, 13,136,162,250, 88,250,138,
+202,219,200,151, 91, 20,127,209,208,241, 40, 54, 51,240, 90,219,248, 80,179, 90,173, 14, 16, 73,196,232, 20, 21, 37,190, 81,114,
+179, 77, 85, 69, 21,166, 60, 59, 93,182,247, 96, 22, 86,127,152,182,109,231,222,221,241,157,163, 58, 35,233,233, 25,200, 61,115,
+ 12, 99,199,140,225,246, 31, 56,224,240,157,237,173,254, 3, 7, 14, 32, 46, 46,206,166, 44, 10,111,221,186,133,217,179,103, 11,
+ 1,192,153,216,130,170,170, 42,140, 24, 49, 2,102,179, 25,133,133,133, 56,118,236, 24,122,244,232, 1,127,127,127,180,111,223,
+ 30,253,250,245, 3, 69, 81,160, 40, 10,109,218,180,113, 84, 79,123,244,234,213,235,147,161, 67,135,242,206,159, 63,239,103, 54,
+155,203,182,111,223,174,214,235,245, 41, 0,236, 7, 77, 95,125,252,241,199,139,247,238,221, 27, 69, 8,185,141,134,119,180,237,
+159, 60,124,248,198,193,124, 62,169,248,224, 3,112, 38, 19,100, 60, 30,155,171,211,205,132,101, 27,119, 27, 94, 89,188,120, 49,
+159,162, 40,200,229,114, 92,191,126,189,188, 87,175, 94,161,206,148,115,120,120,120,144,153,227,160,215,233,112,241,226, 69, 48,
+ 12,211,162,103,158,240,235,144,127,231, 48,127,201,240,199,251,134,207,246,147, 8, 6, 49,102, 86,193,231,204,126, 8,104,195,
+187,173, 52, 64, 95,169, 2,132,124,152,149, 26,148, 40,104, 32, 56, 2, 20, 75,139, 27,115,241, 94, 83,171,209, 37,192, 15,140,
+ 17,184,150,243, 45, 58,197, 60, 86, 99,192,153,104, 19, 4,160, 80,109,176,236, 80, 59, 54,102, 0, 36,193,225, 88,181,241,167,
+ 6, 19, 60,182, 55,193,222,115, 28, 4, 98, 64, 24,241, 24,232,226,163, 53, 94, 0,129, 80, 4, 19, 12,240,145, 88,118, 36,221,
+189,119, 11,254, 56,153,211,168, 75,146,101, 89, 8,105, 61, 76, 16,130,162, 24,192, 96,233,216, 76, 38, 19,140, 6, 1,120,124,
+ 1, 96, 0, 56,214, 50, 68, 16, 41,141, 2,114,235,159, 81,160, 51,176,224,241, 8, 76,140, 9, 6, 35, 11,181,198, 82, 15, 77,
+ 44, 7,218,200, 2,124,128, 39,224,129, 47, 6,136,222, 12,150, 48, 96,161,135, 70, 15, 88,118,150,108, 28,102, 0, 20, 11,112,
+ 4,160, 40, 22,132,240,192,114, 4, 20,101, 53,156, 88, 10, 44, 69,129,176,206, 25,200,118, 65,126,194, 38,214, 35,111, 0, 33,
+139, 22, 45, 42, 79, 73, 73,137, 5,240,212,162, 69,139,198,164,164,164,104, 1, 84,185,229,178, 74, 72, 16,174, 91,183,238,203,
+248,248,120, 72, 91,181,170,185, 46,109,213, 42,192,234, 5, 8,121, 16, 13,134,166,105,153,109,236,159,211,104,240,175,127,253,
+ 11,198,170, 42,216, 34,223, 58, 89,149, 21,129,209,136, 9, 19, 38,148,151,150,151, 79,115,198,210,110,198, 33,153, 90, 30,128,
+ 70, 60, 4, 56,125,250, 52,169, 79,121,168,165,212, 26,105, 40,105, 57, 12, 6, 3, 2,252,253, 33, 22,138, 96, 50, 51,224, 56,
+ 14,102,179, 25, 52, 77,195,100, 50,129,101,204,206,198, 51,176, 87, 11, 11,169,206, 82,169,205, 34, 96,175, 22, 22, 82,223,110,
+255, 73,108,239, 17,232, 44,149, 42,155,203,125, 95, 82,144,215,108,150,191,187, 49, 0,163,178, 42, 80, 46,221, 6, 97, 68, 23,
+144,168, 62,136,220,240, 59, 42, 13, 44,188,249, 4,244,175, 63,226,202,245, 27,112,180,107,177,158,161,113, 58,247, 36, 62, 89,
+245, 49, 30,142, 25,142,197,255,111, 9,126,217,247, 11,190,219,244, 13,134,142, 28, 30,223, 94, 26, 1,190,151, 0, 7,143, 30,
+196,230,175,191,193,142, 31,183, 67, 40, 22,115,187,119,239,110,116,125,136,157, 59,119,214, 34,126, 27,148, 74,215, 55,184,211,
+104, 52,240,247,247, 63, 1, 96,176, 84,103, 60,227,177, 0, 0, 32, 0, 73, 68, 65, 84, 42,197,192,129, 3,193,227, 89,134, 89,
+ 35, 35, 35, 33, 18,137,160, 82,169, 32,149, 74,225,235,235, 91,164,209,104, 34, 27, 17,119,241,252,249,243, 43,118,236,216, 49,
+174,115,231,206,221,182,111,223, 94,173, 80, 40,150, 2,216,108,175,191,140, 26, 53,234,205, 13, 27, 54,108, 5, 80, 14, 32, 1,
+192,111, 0,250,214, 35,239,247,181, 50,217,138,128,188,188,119,159, 97, 24,124, 12,176, 95, 86, 87,207,168, 35,239,169,121,243,
+230,125, 60,107,214, 44,220,184,113, 3,123,246,236, 1,195, 48,135, 0, 60,227,196,235, 83, 1, 60, 94,149, 15, 77, 67,251,251,
+239, 92, 8,203,106,174, 1,154,191,186,143,234,215,175, 31,206,158, 61, 91, 51,238,223,104,130,235,156,119,152, 20, 29,177,220,
+ 79, 34, 24, 84,161, 54,252,114,252,106, 69, 10,120, 34,224,202, 81, 60, 42,229,240,127,175, 77,192,192,158, 82,204, 75,126, 28,
+ 79,118,164,129, 11, 7,192, 9, 36, 12, 26, 13,214, 81, 34, 95, 89, 12,190, 8, 24,251,228, 27,216,252,233,135, 22, 99, 81,103,
+132, 89, 15,252, 40, 59,139,236, 83,150, 25,133,237, 34,162, 64,241, 29,147,215,184,190, 4, 38, 3,176,123,207,126, 68,143,121,
+205, 98,253, 67, 0,158, 4, 72, 28,159,128,113, 35, 39, 90, 26,126, 81, 1, 24, 3,221,184, 70,207,113, 96,136,133,224,141,180,
+ 37,248,207,104,208, 67,167,211,161,186,186, 26, 26,181, 10, 26,141, 6,106, 77, 53, 12,213,213,208,235,245, 13, 87,254,106, 2,
+189,193, 12,189,193, 12,173,206, 4, 77,181, 17, 10,141, 17, 74, 53, 13,149,198, 4,165,210,242, 41,175, 98, 32, 87, 48,144,171,
+ 24, 84,202,105,220,169,108, 56,141, 20,199,193, 12,128,152, 9, 8,197,130, 35, 28,192,113,224, 56, 30,204,236,221,226, 99,173,
+189,135,171,190,241,238, 67,187,227,216,222, 99,248,229,208, 47, 53, 74,193,149,162, 43,174,214,185,112, 0, 29, 83, 83, 83,207,
+ 1, 88,251,206, 59,239,188,222,161, 67, 7, 38, 35, 35,131,164,165,165,185,172, 1,207, 74, 72, 32,194,176,176,157, 0, 16, 22,
+ 22,118,207,253, 57,115,230, 48,121, 87,174,108,105,174, 88, 0,155,251,223,217,125,227,109, 99,255, 0,240,195, 15, 63,224, 90,
+ 89, 25, 0,224,231,156,156, 90,247,174, 92,185, 18, 26, 18, 18,162,120, 16,138,202,232,209, 29,108,243,174,107, 93,183,157,219,
+238, 59,244,105,250,249, 94,102,205,102,168,229, 10, 84, 86, 86,162, 74,169,128, 86,167,131, 86,167,131,166,186, 26, 90,149, 26,
+ 26,165, 18, 6,189, 14,180,193, 0,150,113, 24,232, 76,117,150, 74,109,125, 6, 11,128,182, 31, 14, 0,128,111,183,255,132,247,
+211,214, 4, 0, 8,115,185, 34,118,140,142,169,171, 56, 68,245, 24, 21,131, 7,140,219, 83,164,136,220,240, 59, 72, 84, 31, 24,
+ 15,111, 67,209,243,253,225,205, 39, 56, 26, 23, 2, 70, 85,129,232,253,229,224, 59,168,126, 89, 89, 89,228,229,249,175,224,218,
+149, 43,200,205, 57, 10,127, 95,127, 76,157, 50, 21, 1,193, 65, 56,115, 50, 15, 62, 66, 49,188,189,189,209, 70,218, 22, 91,190,
+223,130,119,222,123, 23,213, 74,247,119,169, 29, 48, 96,128,203,223,241,245,245,133, 74,165, 26, 76, 81, 20,221,190,125,123, 12,
+ 26, 52, 8, 61,123,246, 68,171, 86,173, 32, 22,139, 33,149, 74,209,183,111, 95, 4, 4, 4, 64,163,209, 68,250,250,250, 58, 18,
+185,242,240,225,195, 89,155, 54,109, 18, 40, 20,138,197,117,200, 58, 97,196,136, 17,159,108,216,176,225,171,176,176,176, 15, 8,
+ 33, 62, 0,222, 1,208,152,155,236,189,229, 26,205,202, 23, 25,198,252,165, 94, 63,173,142,188,248,103,146,255,189,227,181,215,
+ 23,240,174, 92,185,130, 19, 39, 78, 96,195,134, 13,213, 0,254,207,201,215,167,188,140, 70, 49,119,233, 18,218,103,103,147,240,
+210, 82, 30, 30, 80, 12, 74,221,160,247,134,130,224,235,118, 2, 34, 30, 69,124,139,171,180,223,109,201,189,241,127,103,139,228,
+ 39,245,102,114, 13,149, 55, 32,222,241, 42, 62, 24,166, 65,222,210, 65, 88, 29, 91, 13,239, 31,231, 0,242, 18, 84,115,226, 11,
+ 86,205,171, 1,220,141,234, 63,119,254, 39,252,251,223,155,208,201,175, 55,254, 60,126, 14, 7,100,151, 16, 59,180, 39,226, 70,
+ 88, 42, 26,199,227,131,118, 97,162,196,216,254,221,176,124,229,135,216,127, 65, 13, 31,105, 15,140, 31, 63, 1,191, 28,218,137,
+ 61,191,108,177,188,156,217, 4,145,160,241,126,142, 99,205, 48,179, 22,107, 6, 86,107,134,166,105, 24, 12, 6,232,245,122,104,
+117,122,232,117, 90,232,117, 90,232,140, 6,208, 70, 67,195,238, 47,189, 47, 84,213,102,168,245, 44,212,122,214,242,191,134, 69,
+181,150, 65,181,142,129, 66,110, 70,149,220,132, 42,133, 9, 85, 85, 38, 84, 86,210,184, 83,105,106, 84, 1,184,235,254,191,215,
+ 84,227,243, 56,240, 8, 1, 87, 39,234,159, 35,142,235,220,219, 73,111,163,251,208,238, 53,231,217, 27,179,107, 60, 2,199,246,
+ 30,195,149,162, 43, 55, 92,169,112,219,182,109,251,149,227,184, 94,241,241,241, 73, 81, 81, 81, 33, 0, 40,150,101, 69, 38,147,
+ 41,112,254,252,249,126, 13,184,130,235,133, 48, 44,236,253,117,235,214,141,139,143,143, 71, 84, 72,136, 83, 67, 87, 77,116,255,
+199, 0, 64,116,183,110, 14, 3,216, 58,183,110, 29,155,150,150,134, 63,139,138,212, 59, 14, 28,192,229,203,151,107,172,254,174,
+ 93,187,194,122,143,222,113,224, 0,138,138,138,112, 37, 47, 79,239, 72,230,130,247,223,199, 91, 75,150,212,184,247,109,255,219,
+206,109,255,187, 18, 11,144,146,146,201,141, 26, 53,234, 85,123,210,183,125, 14, 28, 56, 16, 41, 41,153, 78,117, 76, 87, 47, 23,
+228, 49, 12, 3,154, 54, 66,126,167, 28, 21,183,203, 80, 89,118, 7,149,101,119, 32, 47,175,128,178,170, 10, 70,173,214, 18, 63,
+163, 84,194,137, 32, 64,230,253,180, 53,252,247,211,214,240, 1,168, 1,176,131, 7,244,185,231, 33,187,184, 0,167,209,182, 99,
+116, 76,105, 65,158,172,239,160,187,105,232,216,255,201, 24,101,197,117, 89, 83,234, 7, 73, 84,212,178,252,221, 65,190, 92,139,
+226,151, 30, 2,119,227, 60, 66,255,123, 6,222,235, 79,227,246, 20, 41, 6,238, 47, 7, 17,136,192, 39, 0,159,114,172,128,158,
+191,112,129,252,235,195,229,152,247,214,155, 48,177,102, 92, 46,188,138,233, 83,167, 65, 40, 22, 99,215,143,187, 1,147, 25, 70,
+131, 17, 71,243,142, 67,175,175,198,172,153, 51, 15,191,252,242,203,141,149, 53,153, 52,105, 82,236,152, 49, 99, 64, 8, 65, 86,
+ 86,214, 61, 46,253,183,223,126,219,233,247, 12, 14, 14,198,173, 91,183, 0,128,159,158,158,142,138,138, 10,244,238,221, 27, 1,
+ 1, 1,160, 40, 10, 39, 79,158, 4, 69, 81, 32,132,224,214,173, 91, 8, 14, 14,118, 70,236, 7, 52, 77,143, 4,240,131,221,181,
+169, 35, 70,140, 72,123,233,165,151, 2,211,211,211,197,132, 16, 10,192, 78, 88,102, 1,220,113, 32,111,225, 9,147, 41,186,174,
+188,103, 22,237,216,250,244,180, 57,100,220, 43,233,200, 57,113, 17,105,105,105,172, 90,173,126, 1,150,217, 5, 78,121,183, 58,
+249,250, 6,180, 47, 43,195,112,157, 14,109, 4, 2,111,111, 30,239,129, 45,183,223,175, 95,191,154,195,169, 33, 0, 0, 5, 91,
+142,223,152, 43,215, 26, 79, 3,200, 7,208, 38,247,106,197,231, 35,187,133,189,199,191,113, 34, 8, 27,102, 0, 34,111,192,168,
+ 5, 56, 14, 38,158,248,206,209, 63,111,127,137, 70, 86, 95,218,252,221,103,177,211,166, 39,201, 0, 64,203,154,112, 77, 89, 12,
+192,140, 78,126, 81,136,141,237,131,176, 86,255,159,189, 43, 13,107,234,218,218,239, 62, 25, 8,160, 34, 56,139, 86,197,138, 90,
+181, 14, 88, 17,181,146, 40, 90,171,181,195, 87,163,182, 94, 91, 63,109, 9,106,175, 83, 7,180,181,215,222, 94, 91,245,222,139,
+218, 81, 98,135, 79,219, 91,111, 53, 88, 91,167, 58,160, 9, 42, 34,136, 86,235, 12,130,138,160,136,146, 48, 37, 64,166,253,253,
+ 72, 78, 12, 33,144,147,128,162,237,121,159, 39, 15, 57, 67, 22,251,236,189,207, 94,239, 90,123,237,181,219,163,184,180,204,230,
+ 43, 48,154,113,179, 68, 95,239, 67,117,122, 36, 10,249,121,246,101,158, 68,136,113,253,109, 49, 0,123,206,152,176,119,103, 18,
+110,221,185,129, 86, 45,109, 43, 9, 90,138, 69,120,124,240, 0,168,127,174,199,165, 11, 33,196, 86, 51, 44, 16,192, 74, 8, 24,
+139, 21, 48,153, 97, 17, 9, 1,194,128,125, 39,173, 20,182, 92, 1,245,224, 87,245, 21,242,244,136,230, 52, 64, 76, 33, 20, 57,
+121, 24, 76,128,153, 2, 85, 70,192, 82,109, 1, 33, 4, 68, 76, 96,182, 0,250,106, 32, 35,173,148, 12, 24,208,153,186,117,249,
+179, 61,139,177,130,216,221,255, 54, 82, 64, 96,177, 50, 96, 4,246,149, 2, 0,168,128, 2,148,155, 23,192, 89,249,187, 59, 78,
+221,157,218,141,107, 71,155, 52,105, 82,159,164,164,164, 53, 0, 6, 36, 37, 37,237, 73, 74, 74, 58, 60,105,210,164, 55,186,119,
+239,110, 34,132,180,250,228,147, 79,246, 45, 94,188,120,218,202,149, 43, 83,234, 33,159,172,245, 47,124,235,173,183,150,189,245,
+214, 91,216,179,103, 15,244,183,106,191,203,221,218,180,193,149, 43, 87, 0, 64,205, 37,145, 79, 93, 73,127,222,120,227, 13,233,
+ 23, 95,124,161,254,252,243,207, 49,184,103, 79,217,241, 11, 23, 60,186,138,143,158, 57,163, 25,222,191,255, 83, 23,143, 31,239,
+ 10,192, 15,192,167, 38, 63, 63,136,170,171,209,163, 67, 7, 44, 90,180, 8,169,169,169,171,194,195,195, 83, 82, 83, 83, 15,228,
+231,231,123, 32,119,181,243, 0, 52, 32, 6,160, 6, 15, 76, 73, 73, 33,241,241,242,227,199,142, 21,165, 42, 20, 10, 49, 0,196,
+199,203,135,173, 90,165, 74, 3,199, 36, 64, 93,251, 63,246,110,229,205,194,177, 86,179,165,151,190,180, 20,165,119,110,131, 16,
+ 6,148, 90, 81, 85, 85, 5, 74, 41, 40,165,184,114,254, 2, 76,198,106,252,150,156,236,169, 14,157,199,156,150, 0,152,241,178,
+104,235,120, 89, 52,156,151, 5,218,167, 8, 56,163, 83,143, 33,210,252,236, 12, 53, 0,116,237,210, 5,167, 51,108, 60, 57,231,
+183,237, 0,128, 54,143, 12,146,221,206, 59,217,100, 30,128,193,191, 22, 33,243,105, 96, 64, 68, 12,138,230, 14, 67,251, 47,143,
+ 34, 75,171, 71,176,152,160, 88,171,131,144, 16,143, 30, 0,199,187,153,154, 90,227,206,238,221,187,211,241, 19,158,198,206,237,
+ 59,177,101,203, 22,124,240,222,251,216,167, 57, 0,129, 80,128,208, 78,161,209,165,165,245, 47, 93,222,182,109,155,198, 78, 4,
+164, 99,199,142,173, 17, 11,176,127,255,126, 92,190,124,185, 74,169, 84,118,112,245, 38,185,237, 47, 93,187, 34, 55, 55, 23,143,
+ 61,246,152,121,193,130, 5,226, 31,127,252, 17, 65, 65, 65,184,120,241, 98, 45,207,107,110,110, 46,186,114,111,103,231,196,115,
+211,159,120,226,137, 15, 95,122,233,165,160,204,204,204,230, 85, 85, 85,255,235,239,239,255,140, 61, 48,240, 23,142,242,156, 23,
+202, 79,127,230,175, 63,110, 28, 49,250, 5,242,207,100,128,116,124, 22, 31,175,125,151,106,179, 47,206, 4,160,242,162,153, 73,
+185,201, 84, 34,246,243, 67, 11,177, 24,254, 22, 75,181,190,230,146,181, 7, 14, 53, 8,192,124, 13,206,125, 34,173,206,154,175,
+113, 76,105,230,125, 34, 45,249,181,188,202,172,143,124,180,245,248,144, 0,193, 19,130,234,170, 64, 51,101,202,139,203,141,199,
+210, 46, 23,238, 45,208, 26, 82,230,107,112,179, 46,146, 49,237, 47, 75, 53,135,142,166,201, 0,168,173, 2,118,154, 79,128,203,
+101, 55,241,183, 55,102,194, 96,168, 70, 89,165, 45, 6,192,200,248, 97,243,182,250,211,236,230,231,165,145, 23,158,253,171, 77,
+ 89, 90, 88,203,217,140,113,253, 8,166,206, 89,141,128, 0, 63,180,240,151,200, 0,168,179,207,158,148,109,248,108, 91,189, 3,
+146,144,154, 97, 36, 54, 18, 0, 66, 96,161,212, 70, 4,204,246,229,126,132,129,208,106,133,217, 30, 28,232,137, 4,148, 84,182,
+ 68,101,117, 49,196, 66,198,145,230,204,108, 5, 76, 38, 10,147,153,162,162,210, 10, 34, 32,176,128,192,100,189,235,186,119, 7,
+139,149, 1, 67, 44, 32, 22, 2,202, 80,135,251,159,212, 97, 60,179,146,206, 93,252,145,120,202, 13,125, 33,237, 66, 67,251,142,
+195,109,209,175, 95,191,155, 97, 97, 97, 47, 92,189,122,181,199,150, 45, 91, 50, 0, 60,151,148,148,244,156,243,205, 43, 87,174,
+212, 44, 94,188, 88,182,114,229, 74, 79, 10,194, 81, 33,113,113,113,117,222,244,226,171,175,218,124,128,222, 37, 6,162, 46,110,
+127, 0,192,144,222,189,101, 25, 28,148,191, 99, 0, 62,125,218, 17,173, 58,172, 95, 63,107, 66, 66,194,231, 19, 39, 78, 52, 95,
+186,116, 73,120,237,218, 53,116,109,213, 42,109,231,206,157,156, 2, 20,239, 81, 30, 0,103,229,126, 43, 37, 37,197, 57,198,227,
+140, 83, 61,123, 36, 1,170,149,171,244,242,197,241, 47, 94, 60,112, 48,173,101, 96, 96,139, 50, 93, 9,204,102, 51,168,253, 61,
+208,221, 42, 66,153, 78, 7, 74, 41, 6,198,196,200,126, 75,246,152, 7,201,140,187, 49, 39,140,125, 57, 32, 19, 57,232,113,140,
+151, 69, 59, 86, 1,100, 95,189,202,153, 4,196, 76,120, 73,154,188,235,191, 14, 43,255, 23,213, 55,106, 0,104, 19, 54, 92,118,
+ 59, 55, 85, 3, 0, 77,163,252,105,109, 18,128,175, 48, 32,238,111, 40,180, 90,209,127, 67, 6, 50,198,181, 67,159,157,183, 32,
+ 36, 64,115,145,111,198,226,206,157, 59,201,148,151,166,208, 81, 99, 70, 99,251,214,159,241,143, 85, 43, 17, 95, 90, 10,106,181,
+ 98,243,230,173, 40, 40, 40,120, 6,192, 78, 79,114,220, 17, 1, 0,120,225,133, 23, 78,129,227, 92,246,134, 13, 27,200,216,177,
+ 99,233,201,147, 39,197,131, 6, 13,194,232,209,163,161, 86,171,241,200, 35,143,160,186,186, 26,209,209,209,160,148, 90, 79,158,
+ 60,201,136, 68, 34, 95, 50, 2, 62, 22, 20, 20,180,102,202,148, 41,162,243,231,207,183,168,174,174,174, 43, 48,144, 43, 6,134,
+ 14,152,188,113,192,200, 41,228,155, 20,160,172, 18, 48, 94,217, 99,213,102,171,103,160,102, 96, 32, 39,125,170, 45, 45, 53,139,
+ 77, 38, 24,196, 98, 8,205,102, 15,211,227,247, 6,108, 30, 0,103,203,223,221, 57,183,174, 84, 39,229,207, 30, 95,248, 68, 90,
+145,119,237, 78, 69, 26,128, 14,246,151,183, 26, 64, 1,128,220,249, 26,120,116,113, 42,191,220,165, 25, 49,162,159,204, 66,155,
+169,157, 95,142, 10,125,153,109,221, 63, 19,128,156,114,144,181, 95,110,226,244,128,219,182,127, 70,110,107,115,165, 96, 12,106,
+231,234,109,214, 44, 8, 22,147, 14,160,122,140,235,199,109, 66,215, 4, 1, 64,169, 77, 81, 67, 0, 49,181, 19, 1,187,242,183,
+229, 0, 4,192,145,200,165,157,184, 78, 34,250,118,160,102,147, 22, 66,187,247,135, 82, 10,139,153,162,202, 4,148,149,155, 97,
+ 2,133,153, 50, 16,138, 8,238,220, 50,213, 89,206,227,199, 87, 17, 0, 24, 22,245, 54, 37, 38,155,245, 79, 1, 80, 74, 0,106,
+183, 24,168, 0, 68, 96,133,213, 42, 68, 86,246, 86, 78,207,252,218, 63, 94,147, 93,205,185, 90,159, 2, 22,193,182, 84,163, 62,
+237,228,168,249,101,203,150,177,254,209,211,118,171,248,174,162,126,241, 69,233,214,173, 91,213,118, 18,160,246, 68, 2,214,171,
+ 84,166,223,206,156,145,119,237,215,207,242, 68,175, 94,122,123, 31,173,134, 75, 22, 45,249,184,113, 54,139,163, 95, 63,207,211,
+ 29,111,191, 45, 3,128,193, 61,123,214,186,150,121,233,146, 38,227,130,239,100,168, 95,239,222, 95, 50, 12, 99,185,120,252,120,
+ 96,187,118,237,238,164,230,231,111,244,100,245,223, 7,173,227,220, 15,244,246,128, 63,118,106,160,194,165,173,185,144,128,243,
+242,197,241,145,219,191,254,102,107, 88,183,174,143, 85, 87, 87,193, 98, 50,195,106,181,162,121,112, 48, 74,181, 90, 86,249,115,
+ 33, 81, 37,127,127,243,175,109, 1, 24,179,175, 94, 21,179,243,255,233, 39,127,199,120, 89,180,117, 89,194,103,158,146, 3, 57,
+ 48,103, 94, 60,189,120,233,162,204, 89,249, 3,192,168,167,158,147, 29,220,251,139,230,118,110,170,239,149, 88, 71,128,159,251,
+243,220,117,216,224, 95,139,128, 95,223,112, 28, 63,250, 75,161,227,123,169,201,119, 99,113,243,127, 55,147,225,195,135, 63, 61,
+118,194,184,221,175, 79,159,117,228,241,254,253, 70,108,255,101, 7,210, 78,157,192,137, 19, 39,118,213,231, 6,174,135, 8,204,
+218,182,109,219,215,219,182,109, 27,186,109,219, 54,206,133, 27, 59,118,236,168,125,251,246, 29,220,185,115, 39,194,194,194, 48,
+102,204, 24, 4, 5, 5,101,149,150,150,134,159, 59,119, 14,185,185,185,140, 72, 36,194,216,177, 99, 99,246,237,219,231,237,163,
+158, 47, 45, 45, 93,181, 99,199,142,250, 2, 3,189,193,111, 5,167,182,172,248, 57,233,217,119, 43, 67,167,161,242,248, 82,235,
+141,195, 31, 77,247, 81, 94,213,181,162, 34,209,155, 89, 89,249, 22,131,129, 57,205, 48,162,246, 2, 65, 97, 97, 19, 57, 1,220,
+101, 3,244, 52, 5,224, 22,243, 53,208, 3,248,221,254,241, 9, 71,142,156,209,196,197, 45,150, 37, 42,255,161, 14,237,210, 3,
+ 64, 53, 68,126, 18,228,223, 44,195,166,157,169,196,123,121,187, 52, 51, 94, 91,136, 13,223,254, 4, 88,175, 1, 16,194, 92, 85,
+137,208, 14, 65,178,143,222,158,197,217,154,131,197, 10, 33, 99,133,137, 8, 33,162,230,187, 68, 0,102,128, 90,192, 53, 48,204,
+ 25, 39,206,222, 36, 0,208, 62,132,161, 34,161,205,218, 55, 91,109, 9,140, 74,202, 41, 44,102, 64, 32,180,194, 98,230, 54,114,
+ 28, 77,251, 23, 1,128,200, 33,139, 40,216,156,240, 12, 96, 37, 54,119,255,165,236, 29, 94, 21,242,235,247,191,214, 52, 66,255,
+226,100,174,176,202,223,201, 19,224,113, 57,214,241,139, 23,147,142,187,184, 12,235,185,215,227, 61,141,153, 58,184, 22,185,181,
+ 45,241, 75,180,217,214,103,124,146,209,200,121, 0, 92,235, 86,239, 97,169, 21,167,190,163, 90,185,234,162,124,113,124, 95, 0,
+130,139, 41, 41,166, 42, 67, 37,172, 22, 11,122, 71, 68,200, 58,132, 63,134,227,191,238,224, 86,199,148, 76,217,251,235, 46,199,
+225,176,199,194, 28,223,247,254,186,171,214,113,125,161,241, 95,126,106, 35,200,163,159,122, 94,118,254, 98, 14,110, 94, 59,163,
+ 6,128,131,123,127, 81,183,123,164,175,236, 86,222, 89,175,219,125,242,228,201,240, 54,189,175,133,248,213,123, 61,239,133,246,
+248,245, 70,213, 61, 31,240, 83, 83, 83,127, 85, 42,149, 76,102,102,166,245,192,177, 20,180,106,221,202,117,165,135, 87,216,182,
+109,219, 55, 74,165,242, 59,133, 66, 97,242,230,119,111,189,245,150, 26, 0,153, 49, 99, 6,205,201,201, 65, 70, 70, 6,202,203,
+203,195,155, 55,111,142, 86,173, 90, 57,246, 2,240, 65,249,179,248, 87, 74, 74,138, 40, 45, 45,173,159,209,104, 92,138,154,115,
+249,190,224,189,179,155,255, 34, 10,234,254,221,162,210,156,125,211, 26, 32,207,252, 99,122,250, 51, 0,198, 0,248, 13, 86,107,
+ 57, 60,199, 35, 52, 58,216, 85, 0,238,206,251, 68, 0, 60, 14,130, 74,165,112,221,186,117,158, 93, 85,123,143,106, 58,117, 29,
+ 77,110,229,167,209,182,161,157,161, 45, 55, 99,211,246, 35, 62,119,208, 13, 95,175,177,255,182, 29, 5,110, 33,184,185, 16, 31,
+ 45,121,221,171,151,254,171, 99,217,247,108,157,102,161,214, 74, 0, 64,226, 47,162,198, 74, 19,172, 0, 2, 2, 2, 96, 48, 27,
+136,197,236,189,188,244, 12,219,158, 1,145, 79, 44,164, 86, 42,192,213, 43,187,155,114,141, 41,215,165,131,252, 46,129, 28,234,
+199, 89,225, 55,242,180,128, 49, 62, 94,238, 7,192,178,106,149,170, 65,166,136,106,229, 42,118, 35, 31, 71,155,230,156,245,110,
+157,254,188, 21,159,249, 68,198, 92,183, 2,118,198,129,189, 63,107, 92,251,218,173, 60,223,242, 7,120,218,216,199,149, 3,155,
+137, 31, 42,153,250, 87,164,230,148,155, 17,222, 92,120, 95, 94, 21,251, 90,253, 70,123,231,188, 85,254, 53,198,103,223, 55,252,
+225,130,143,141, 70,227,207,128,231, 77,233, 56,226,157,210,156,125,155, 80, 51, 54,192, 91,152, 0,148,192,187,184,129,123, 70,
+ 2, 56, 13, 62,190,238, 35,204,131,135, 51,122,244,232,129,236,236,108,190, 34,120,240,224,193,227, 33, 1,195, 87, 1,143,198,
+ 0,175,252,121,240,224,193,131, 39, 0, 60,120,240,224,193,131, 7, 15,158, 0,240,224,193,131, 7, 15, 30, 60,120, 2,192,131,
+ 7, 15, 30, 60,120,240,104,114,212, 8, 77, 61,117,234,148,207, 81,155,238,130, 9,121,121,188, 60, 94,222, 3, 35,175,222,232,
+112,190,254,120,121,188,188, 63,150, 60,175, 9,128,211, 64,225, 45, 60, 13, 60,141, 41,143,199,131, 9,202,183,219, 67,217, 14,
+156,239, 87, 42,149,129, 0,158, 56,114,228,200, 71, 2,129, 96,152,159,159, 31, 12, 6,195,209, 17, 35, 70,188, 7, 32, 67,161,
+ 80, 24, 30,132, 10,176,103,135, 84,255,153,199, 21, 74, 41, 61,123,246, 44,250,245,235,199,191,147, 60,188, 34, 0, 94,173, 67,
+230,146, 40,199,157, 60,231,196, 39,222,202,251, 19, 14,232,156,240,212, 83, 79,201,246,238,221,171,225, 42, 51, 52, 52,180,214,
+133,130,130, 2,215,193, 20, 42,149,138,112, 44,227, 61, 35, 1,117,229,243,111, 42,121,171, 87,175, 30,189,117,235,214,228,172,
+172, 44, 0, 64, 88, 88,216,179,233,233,233, 59,124,109, 95,231,126, 79, 41,117,188, 31,236,121,246, 93,177,159, 39, 30,200, 51,
+215,118,240, 70,249, 63,118,246,236,217,173,101,101,101,189,186,116,233,130, 59,119,238,160,170,170, 10, 0,134,109,221,186, 85,
+ 29, 24, 24,120, 81,169, 84, 62,175, 80, 40,234,221, 74,242,236,217,179, 94, 25, 4,169,169,169, 50,133, 66,161,241,230, 55, 42,
+149, 74, 45,151,203,101,190, 36,128,162, 94, 38, 97,152, 60,121,178, 55,239, 7, 0,160, 75, 23,219, 14,184,229,229,229,168,174,
+182,165, 65,215,235,245,222,188,111,245,226,204,153, 51,116,216,176, 97,232,221,187, 55,252,252,252,138,170,171,171, 31,225,135,
+209, 63, 31, 92,147, 1,221,179, 68, 64,188, 21,123,111,241, 75,226, 56,143,247, 60, 63,123,143, 87, 50,213,234,187, 6, 82, 86,
+ 86, 22, 2, 3, 3, 29,131, 16, 11, 46,155,127,200,229,114,170, 82,169, 92,143, 73, 29,247,248, 84,183,209,209,119,183,115,117,
+ 39,191, 33, 32,132,208,145, 35, 71,202, 82, 82, 82,188, 82, 22, 91,183,110, 77,110,219,182, 45, 94,121,229, 21,232,116, 58,107,
+ 66, 66,194,246,149, 43, 87, 78, 93,188,120,241,102, 47,255, 63,126,253,245, 87,199,241,184,113,227,176,103,207,158,122,143,185,
+136,117,233,203, 52, 34, 34, 2, 0,168, 83,102, 56,175,148,127,105,105,105, 90,247,238,221, 91, 0,128, 68, 34,129,191,191, 63,
+138,138,138, 80, 82, 82,130,160,160, 32, 20, 21, 21,245,218,179,103, 79,134, 82,169,236,169, 80, 40, 10,235,147,215,183,111, 95,
+200,229,114,132,133,221,205,250,183,106,213,170, 26,247,196,199,199, 3, 0,142, 29, 59,166,246,165,223, 52, 36,251,227,218,181,
+107,235,186,228,216,171,192, 87, 4, 6, 6,226,252,249,243, 16,137, 68, 48, 26,141,216,179,103, 15,178,179,179,177,100,201,146,
+ 6,245,227,224,224, 96, 1,128,152, 67,135, 14,237,137,142,142,190,245,252,243,207,183, 75, 78, 78,134, 64, 32,104,211,178,101,
+ 75, 1,120,252,169,149, 63,123,206,149, 4,252, 97,130, 0, 35, 35, 35,165,247,219,226,110, 74,132, 14, 94,238,248,248, 10,157,
+ 78,231,176,248,245,122, 61,214,175, 95,239,248,120, 49,208,186, 61,158, 52,105, 18,149,203,229, 20, 0,117,189,199, 91, 28, 58,
+116, 72,253,246,219,111,163, 91,183,110,141, 86,127, 93,187,118, 37,239,188,243, 14, 40,165, 72, 73, 73, 81,123,219,238, 89, 89,
+ 89, 24, 55,110,156, 21, 0,196, 98, 49, 19, 30, 30,142,132,132,132, 31,219,180,105, 67, 35, 35, 35,199,123, 97,113,222,171, 46,
+ 66, 34, 34, 34, 40,251, 92, 39, 78,156, 96,247, 3, 96,219,133,179,219, 95,167,211,109, 21,139,197, 45, 0, 96,238,220,185,152,
+ 54,109, 26,196, 98, 49,252,253,253, 33,145, 72, 64, 8,129, 64, 32, 64,105,105,105, 11, 0, 9, 74,165,178, 94,217,241,241,241,
+ 8, 11, 11, 67,110,110,174,227, 19, 31, 31, 95,227,211, 16,200,229,114,153,253, 57,125, 30, 19, 22, 46, 92,232,248, 56,143,151,
+ 46,231, 57,111,244,210,165, 75, 23, 4, 6, 6, 98,233,210,165, 8, 12, 12,196,246,237,219, 81, 89, 89,217, 40,202,223,254, 46,
+ 83,157, 78,247,191,211,167, 79, 71,143, 30, 61,218,237,217,179, 7,183,110,221,194,245,235,215, 81, 82, 82, 98,188,159, 99,147,
+ 82,169,148,230,231,231, 83,165, 82, 41,117,119, 45, 59, 59,155, 94,190,124,249, 79,145,128,142, 82,218,171, 41,149,127,108,252,
+ 74,196,198,175,172,147, 24,220, 23, 2, 64,220,160,190,243,190, 32, 61, 61, 93,221, 24, 36, 96,218,180,105, 15, 13, 9,104, 40,
+ 12, 6, 67, 45,171,223,151,230,101,149,201,164, 73,147, 28, 86,126, 82, 82, 18, 26,170,248,157,173,127,149, 74, 69, 70,142, 28,
+ 41, 83,169, 84, 53, 60, 2, 13,193,150, 45, 91, 8, 0, 18, 29, 29, 45,115,245, 52,112, 28,116,205,118,111, 0,218,182,109,139,
+229,203,151, 87,189,249,230,155,198,220,220,220, 93, 43, 87,174, 28,211,212,237,235,180, 7, 0,113,110, 39, 47,219,229,137,236,
+236,236, 94, 0, 48,107,214, 44,148,150,150,226,198,141, 27, 16,137, 68, 16, 10,133, 16, 10,133, 16,137, 68,240,247,247, 71,101,
+101, 37,146,147,147, 95, 6, 16,236, 73,104,110,110, 46, 84, 42,149,227,227,236, 9, 88,181,106, 21,146,147,147,125,126,110,149,
+ 74,165,177, 79, 1,168, 27,233, 93,174, 43,113, 55,231,241,243,234,213,171,216,181,107, 23,150, 47, 95,142, 46, 93,186,160,117,
+235,214, 72, 73, 73,193,146, 37, 75, 16, 24, 24, 8, 0, 16, 8, 26,100,168,119,152, 57,115,230,148,127,253,235, 95, 72, 79, 79,
+199,141, 27, 55, 96, 54,155, 95,105,213,170, 85, 48, 0,211,253,238,123,161,161,161,136,141,141, 85,231,228,228, 80,103,229, 31,
+ 27, 27,171,126,244,209, 71,241,128,239,146,219,187,129,191,247, 3,208,117,213,170, 85,207,164,167,167, 71, 3,232,223, 20, 15,
+225,172,248,157,191, 55,133, 7,128,186,249,212,119,190,201, 72,192,248,241,227, 27,131, 4, 80, 47, 62,156,241,226, 27,123, 27,
+173, 65,178,178,178,160,215,235,235,116,243, 31, 61,122,180, 49,136, 65,131,113,232,208, 33,181,157, 88, 32, 37, 37, 69, 67, 8,
+ 65,219,182,109,213,141,217, 57, 89,247,191,221, 19, 80, 47, 86,175, 94, 61,126,248,240,225, 20, 0, 18, 18, 18,196,223,126,251,
+ 45, 94,121,229, 21,214, 53, 47,249,253,247,223,197,246,107,251, 34, 35, 35,159,227,242,255,199,141, 27,135,167,159,126,218,225,
+222,103,191,179,199,236,119,142,238,127, 0,128,221,250,119,215, 14,196,229,122,189,216,179,103,207, 71,173, 91,183, 6, 0, 92,
+190,124, 25,121,121,121, 56,121,242, 36,140, 70, 35, 8, 33, 16, 10,133, 32,132,192, 98,177,192, 96, 48, 96,219,182,109,224, 50,
+224,185, 76, 27,185, 37, 47,185,185,185, 13, 34, 1, 78,207,222, 32,111, 0, 26, 97,170,212,100, 50, 97,208,160, 65,208,104, 52,
+184,122,245, 42, 6, 15, 30,236,184,166,209,104, 16, 18, 18,226, 32, 2, 62,160,227,204,153, 51,243,191,249,230, 27,196,196,216,
+ 54, 50,234,216,177, 35, 44, 22,203,247,176,229,166,191,175, 80, 40, 20, 26,150,124,134,133,133,225,248,241,227,148, 85,254, 44,
+249,235,217,179, 39,151,241, 97, 8,128,239, 96,219,243,172, 62, 76, 0, 16, 11,160, 77, 35, 41,255,134, 18,128, 14,115,231,206,
+149,189,243,206, 59,162,182,109,219,202, 1, 68, 61,168, 76,231,190,196, 0,220,207, 32, 64, 59, 9,144,165,167,167,107,124,149,
+209,181,107, 87, 76,155, 54, 13, 63,252,240,131,175, 49, 1, 4, 0,253,225,135, 31,220, 94,220,189,123, 55,236,215,188,150,125,
+236,202, 99, 24,218,237, 60, 10, 50,151, 54,168,158,156,231,252,147,147,147, 17, 19, 19,131,216,216, 88,135,242,239,220,185,115,
+ 99,144,190, 6, 17,129,232,232,104,233,161, 67,135,112,231,206, 29, 25,123, 78, 42,149,202, 84, 42,149, 58, 58, 58, 90,234,237,
+188,189,135,255, 37,227, 66, 0,182,110,221,186,139,157,251,215,235,245, 88,181,106, 21, 42, 42, 42, 32, 18,137,224,231,231,135,
+ 43, 87,174, 96,249,242,229,208,233,116, 72, 72, 72,248,121,229,202,149,163, 22, 47, 94,172,246,160,100,107,144, 1, 79, 49, 1,
+ 28,234, 28, 30,118, 0,116, 76, 7,120,122,222,144,144,144, 97,213,213,213, 48,155,205, 56,122,244, 40, 4, 2, 1,140, 70, 35,
+ 42, 43, 43, 97,181, 90, 29,239,177,201,100, 66,117,117, 53,251, 78,247,245, 36,183, 46, 55,127,124,124,188, 35, 30, 32, 44, 44,
+ 12, 69, 69, 69, 13, 38,162, 78,171, 2,184,246, 69, 45,128, 16,119, 23,214,172, 89,227, 83, 33, 18, 18, 18,240,246,219,111, 99,
+224,192,129, 14, 15, 8,155, 62,123,224,192,129,184,116,233, 18,218,182,109,235,139,232, 46, 51,103,206,188,250,205, 55,223, 56,
+143,159,161, 55,110,220,184,209,148,138,101,240,224,193,132, 85,250,131, 7, 15,198,224,193,131,213, 0,112,233,210, 37,244,234,
+213,139,107, 59,156, 2,224, 15,224, 71, 0, 83,225,178, 37,184, 29,111, 0,248,204,254,253, 61, 0,189, 0,207, 91,212,123, 80,
+254,255, 3,224, 39, 95,159,125,213,170, 85,125,223,121,231,157, 82, 0, 47,118,235,214,173,208, 78, 80, 18,239, 87,221,179,187,
+ 1,174, 95,181,216, 97,249,175, 95,181,216,113,237,190, 19,128,251,141, 7,133, 4, 76,155, 54,141,190,247,222,123,181, 92,129,
+190, 40,255,198,180,254, 1,184,181,254, 89,171, 95, 36, 18,161,176,176,176, 73,149,191,179,245,239, 28,208,165, 86,171,157,189,
+ 0,247, 61, 96, 51, 43, 43, 11,175,188,242,138, 1, 64, 64, 96, 96, 32,222,127,255,125,136, 68, 34,199,245, 25, 51,102, 0, 0,
+130,131,131, 49,113,226, 68, 28, 57,114,228,224,125, 44, 39,113,246, 0,212, 71, 2, 34, 34, 34, 92,183,138,117, 75, 6,140, 70,
+ 35,180, 90, 45,170,170,170, 16, 20, 20, 4, 63, 63, 63,152,205,102, 80, 74, 97,177, 88, 96, 52, 26, 97, 50,153, 96,177, 88,156,
+ 9,253,157,250, 10,153,155,155, 91, 35, 0,144,157, 14,112,246, 8, 56, 95,111, 40,124, 8, 8,148,212,117,193, 57, 38,192, 27,
+ 50,176,124,249,114, 76,152, 48, 1, 93,187,118, 69, 64, 64, 0,164, 82, 41,180, 90, 45, 2, 3, 3,161,211,233,176, 97,195, 6,
+ 48,140,215, 14,217, 78, 51,103,206,188,186, 96,193, 2,108,223,190, 29,207, 61,247, 28, 0,180, 71, 19,108, 65, 91,151, 39, 32,
+ 40, 40, 72, 54,101,202, 20, 53, 0,108,222,188, 89, 54,117,234, 84,111,218,194, 8, 96, 26,128, 31,234, 33, 1,206, 83,109,143,
+ 0,232, 7, 32,195, 71,229,255, 24,128, 23, 26,104,236,246,202,200,200,232,116,229,202, 21,185, 93,249,179, 59,104, 54, 9, 88,
+197, 95, 23,254,144,153, 0, 27,170,252, 89,248,106,165, 59, 15,200, 31,125,244, 81,131,149, 63,139, 65, 3, 7,224,192, 65, 53,
+ 54, 29, 12,112,144,130, 99, 87, 30,107,208, 51, 70, 68, 68, 32, 55, 55, 23, 73, 73, 73,232,220,185, 51, 54,110,220,232,181,213,
+165, 84, 38, 74,157, 60, 56,141,162,252,217,249,248,162,162, 34,153,235,181,145, 35, 71,202,146,146,146, 26, 45, 22, 0,176,185,
+255,185,122,159,116, 58,221, 5,251, 75,109,221,188,121, 51, 54,108,216, 0, 0,248,241,199, 31,161,211,233,216,219,204,151, 46,
+ 93, 66,155, 54,109,154,228, 29,112,137,246,175, 69,206,184,238, 19,159,155,155,123,212, 98,177, 64,167,211,225,206,157, 59,208,
+233,116, 48, 24, 12, 48, 24, 12,168,168,168, 64, 89, 89, 25, 74, 75, 75, 81, 89, 89,137,234,234,106,118,110, 55,173, 62,153,174,
+202,221, 93, 32,169,235,170, 0,174,176,187,250,169,155,115,222, 32,160,177,219, 99,227,198,141,144, 74,165, 8, 8, 8,192,249,
+243,231,161,209,104, 16, 24, 24,136,191,253,237,111, 56,114,228, 8,150, 44, 89,226, 45, 1,104, 63,115,230,204,235, 83,167, 78,
+197, 79, 63,253,196, 42,255,142, 15,138,242,183,141, 11, 74, 41,171,252, 1, 96,202,148, 41,234,139, 23, 47,122, 59,181,202,146,
+ 0,216, 73,128,235,116,192,101,167,239,121, 0,206, 52, 64,249,255,143,125,220,242,217,250, 39,132, 92,140,140,140, 76, 11, 11,
+ 11, 75, 34,132, 4, 17, 66,154,217,203,221, 36,112, 13, 2,108, 18, 2,112, 63,130, 0, 27, 91,249,219, 21,119, 99, 88,110,228,
+163,143, 62,106,144,242,127,241,141,189, 24, 52,240,174,235,102,235, 79,219, 28, 30,129, 3, 7,213, 62,145, 0,133, 66, 1,251,
+210, 48, 24, 12, 6,236,223,191, 31,203,151,219, 86, 20,156, 57,115, 6,102,179,217, 11, 89,113, 26,192, 22,248, 71, 41,101,131,
+ 1, 27,164,252, 89,235,191, 62, 55,127, 99,197, 2,176, 68, 66, 42,149,202, 60,221, 27, 22, 22, 54, 54, 33, 33, 33, 34, 61, 61,
+ 93,248,221,119,223, 49, 23, 47, 94,196,140, 25, 51,204,108, 61, 38, 36, 36, 32, 61, 61, 29,223,125,247,157,240,218,181,107,136,
+140,140,244, 40,243, 94,196, 0,176,150,180, 11, 9,160, 44,233,227,138,240,240,240, 76,179,217, 12,163,209,136,219,183,111,163,
+176,176, 16,183,110,221,194,173, 91,183,112,251,246,109,104,181, 90, 24, 12, 6, 84, 87, 87,163,180,180,148,253,159,249,245,201,
+100, 3,253,156, 73,104, 61,101,247, 74,249,179, 57, 0, 92,207, 53,164,127,184, 89, 13,224, 32,121, 92,101,100,103,103,227,210,
+165, 75, 48, 24, 12,136,138,138, 66,255,254,253,177,113,227, 70,188,251,238,187, 16,139,197, 16, 8, 4, 16, 10, 57, 59,100, 59,
+205,156, 57,243,230,212,169, 83,145,145,145,129, 15, 62,248,128,181,126,111,226, 1, 89,198,156,153,153, 73,217, 57,255,147, 39,
+ 79, 98,253,250,245, 50, 0,232,217,179, 39,156, 3, 3, 27, 72, 2,230,195,230, 94,159, 4, 96, 14,128, 72,248,230,254,191, 0,
+ 96,171,253,127, 76,107, 8, 1,176,227, 52,128,117, 0,158, 1,240, 60,128,205,247,179,238,217, 72,127,119, 65,128,174,171, 0,
+238,215, 20, 0,245,242,252, 31, 69,249, 59, 72, 64, 3,166, 18,106, 40,127,119,199, 7, 14,122, 63,190, 57, 15,186, 1, 1, 1,
+232,221,187,102,220, 75,122,122,186, 87,242, 38, 77,154,132,164,164, 36,176, 68, 0, 0,181,159,243,122,221,249,198,141, 27,213,
+ 0,176,103,207, 30,153,187,136,245,148,148, 20,205,213,171, 87,221, 90,143,238, 80, 87,210, 31,150,104,164,164,164, 32, 58, 58,
+ 90,166, 86,171, 61,246,157,244,244,244,253, 43, 86,172, 24,157,154,154,122, 32, 60, 60, 28, 89, 89, 89,208,233,116,194,224,224,
+ 96,204,156, 57, 19, 90,173,246, 90,106,106,106,151,240,240,112,164,166,166,146,184,184, 56, 79,228,184,214,156,127, 3, 98, 0,
+106,188, 91,108,190, 4,123,238, 4,135,103,198,105,254,223, 99,123, 12, 29, 58,244, 93,141, 70, 51,207, 98,177,160,172,172, 12,
+ 38,147,201, 49,239, 95, 85, 85, 5, 74, 41, 40,165,184,116,233, 18,140, 70, 35, 98, 98, 98, 94, 82, 40, 20,102,119, 73, 71,234,
+ 66, 76, 76, 12, 98, 98, 98,106, 4,253,121, 59, 5,224,172,232,237, 46,127,234,220, 63,236,171, 2, 26,123, 92,227, 60,126,178,
+ 75,253,222,124,243, 77,104, 52, 26,200,100, 50,100,103,103,163, 89,179,102,200,203,203,131, 64, 32,224,234, 1, 32, 51,103,206,
+188, 62,125,250,116, 28, 62,124, 24,127,251,219,223, 0, 32, 20,192, 13,220,205,255,208,228,150, 63, 59,190,228,230,230, 34, 34,
+ 34,130,237,103,178,216,216, 88,117, 88, 88, 24, 46, 93,186, 68, 57, 6, 2, 58,147,128,169,118, 2,240, 35,128,163, 0, 20, 0,
+164, 0, 10,193,163,241, 58,112, 99,103,227,115, 23,240,179,106,213,170, 58,207, 55,165,242,183,175, 0,184, 23, 44,218,103,153,
+215,243, 61,247,111,127,127,239,188,150,158,130,196,188, 69, 76, 76,140, 44, 41, 41, 73, 51,121,242,100,186,101,203,150, 26, 68,
+192,133,240,113,174,135,184,184, 56,143,204,198,203,196, 64,212,133, 72,216, 70, 37,153,140,147,242,119, 26,204, 29,243,250,145,
+145,145,127, 73, 72, 72,248,126,226,196,137,184,116,233, 18,174, 93,187,214,101,233,210,165,178,184,184, 56, 78,242,238, 81, 30,
+128, 26,245, 92,135,226,227,148, 49, 80,161, 80,232, 19, 19, 19,151,237,222,189,251,239,102,179, 25, 37, 37, 37,142, 24, 0, 0,
+184,125,251, 54, 74, 74, 74, 64, 41,101,173,118,175,180, 44, 59,255, 31, 17, 17,225,136, 96,103,207,115, 37, 1,110,172,252, 90,
+211, 80,247, 64,249,123, 13,150, 4, 44, 94,188, 24, 41, 41, 41,152, 56,113, 34, 86,172, 88,129,183,222,122, 11, 66,161, 16, 18,
+137,196,227, 24, 66, 41,181,206,154, 53, 11,223,127,255, 61,190,253,246, 91, 0,232,108,202,132,133,197, 0, 0, 32, 0, 73, 68,
+ 65, 84, 87,254,141,110, 80, 53, 4, 5, 5, 5,216,181,107, 87,141, 44,142,246,239,178, 81,163, 70,169,125, 92,242,104,177,147,
+128,157,118,235,127, 40,175,252,235,134,187, 32, 64, 78, 4,192,155, 68, 28,190, 42,236,198, 70, 99, 40,255,134, 42,234,123,129,
+249,243,231,203, 46, 94,188,216,168, 50,237, 46,210, 70, 93, 74,199, 42, 60,251,218,122,214, 43, 64, 9, 33,176, 90,173,216,186,
+117, 43,103, 18,240,246,219,111,179,229,172, 21, 3,192, 48, 12,172, 86, 43,222,121,231, 29, 53, 87,229, 89,159,188,148,148, 20,
+141,115, 86, 68, 31,250,221,127, 86,172, 88,113, 59, 53, 53,117, 15, 87,171,255, 62,120,219,136,171,183,167, 14,194,199,137, 4,
+196,197,197,125,168, 84, 42,147,126,248,225,135,115, 98,177, 24,236,170, 0,171,213,138,150, 45, 91, 66,167,211, 65, 46,151, 35,
+ 38, 38, 38, 64,161, 80,120, 92,224,205,142, 47,206,193,127, 39, 78,156, 64, 76, 76, 76,141,241,196,211, 56, 20, 31, 31, 79,115,
+115,115,101,174, 46,126, 95,211, 0, 59,195, 77,128,159, 25,128,121,205,154, 53, 18,187, 53,202, 56,125,188, 34, 1,206,137,127,
+230,204,153,227,248, 94, 86, 86,230,113,108, 34,132,144,153, 51,103,210,239,190,251,238,121, 0,191, 60,136,138,199,174,232,137,
+183,215,184,144,118, 23,220,124, 24,198,240,251, 13,118, 21,128, 59,197,207,105, 21, 64, 99, 43,245,186,228, 61, 40,228,225, 65,
+238, 56,159,124,242,137,166,177,101,186,172,145,190,103,112,113,255,115,125,169,185,230, 66, 39, 94, 60,239, 61,125,214, 37, 75,
+150,236,109, 72,125,142, 27, 55,174,198,178,216,167,159,126,186,134,103,192,203,185,127,226,165,183,135, 83,185, 21, 10,197,121,
+165, 82,217,108,223,190,125, 31,231,229,229,205,171,172,172,132,197, 98,193,128, 1, 3, 48,120,240,224,132,152,152,152,120, 46,
+202, 31, 0,142, 29, 59,230,248, 30, 29, 29, 93,227,188,235,177,135,113,133, 56, 19, 90,150, 76,216,227, 0,124,106,247,201,147,
+ 39,215,117, 73,232, 52, 94,138,239,213,184,226,193, 83, 97, 5,128,111,191,253,150,223, 48,133, 7,103, 18, 80,151,242,175,139,
+ 0, 52,118,231,226, 59, 43, 15,226, 37,179,255,211,213,141,179,194,191, 7,211, 2,141,242, 14, 42, 20, 10, 61,108,174,215,249,
+236,185, 11, 23, 46,112, 81, 92, 14,244,237,219,183,209,199, 3,119,132,214, 87,151,255,189, 38,139, 60,120,253,113, 63, 73,128,
+199,202,245,117, 31, 97, 30, 60,120,240,224,193,131,199,195, 11,134,175, 2, 30, 60,120,240,224,193,131, 39, 0, 60,120,240,224,
+193,131, 7, 15,158, 0,240,224,193,131, 7,143,135, 16,102,120,177, 93, 49,143, 63, 39,132,124, 21,240,224,193,131, 7, 63,182,
+243,248,147,119,146, 83,167, 78,249, 28,113,233, 46,152,208,131,188,122,215, 31,251, 32,175,177,203,199,203,227,229,253,169,229,
+253,246,238, 53,159, 7,150,129, 31,119,193,189,150,119, 98,137,239,242, 34, 86,212,150,199,214,159, 82,169,148,154, 76, 38, 92,
+185,114, 69,109, 52, 26, 33, 20, 10,145,159,159,143,151,130,186, 98,111,102, 38, 42, 31,239,140,161, 67,135,202, 4, 2, 1,187,
+174,189,201,218, 87,169, 84, 62, 6,160,237,185,115,231,118,117,236,216,145,209,106,181,146,142, 29, 59, 46,247,247,247, 95,167,
+ 80, 40,110, 0, 64, 98, 98, 34,147,152,152,104,169, 75, 94, 98, 98, 98,115,187,183,192, 16, 23, 23, 71, 1, 96,233, 95,159,252,
+ 74,241,100,222,204, 77,153,225, 87,132,109,199, 14,109,214,188, 69, 5, 0, 74, 41, 21, 2, 8, 78, 76, 76,188,206,191,111, 15,
+182,188,123,205, 18,185,110,250,226,109, 10, 92,175, 83,230,174,138,122, 74, 42, 12, 9, 82,231,100, 93,150, 61,234,215, 12,139,
+206, 30,210, 60, 72, 44,171,158,124,228,252, 18,151, 38,198,132, 9, 19,164,187,119,239, 86, 39,188,107, 59,254,249,240,147, 56,
+116,232, 16,167,118,249,203,140, 87,165, 12, 33,234, 75, 23, 47, 66,167,211,161, 75,151, 46,104,214,188, 57,182, 37,109,229,220,
+174,147, 38, 77,170,241,226, 38, 37, 37,213,187,151,130, 61,187,162, 79,253,134,221,168,137, 82,218,176,126, 39,215,214,124, 85,
+ 85, 33,190,203,138, 88, 3,132,189,106,251,158,187, 1, 56,177,168,225,141, 58,233, 78,205,242, 37,181,230,244, 51,165, 82, 73,
+245,122,189,108,219,182,109,234,220,220, 92,200, 69,173,208,190,115, 27, 84,233, 43,225,111, 48, 99,248, 91,175, 99,228,196, 41,
+216,249, 77, 34,118, 28, 56,160, 30, 59,118,172,236, 1,232,194, 89, 22,139,165, 67,110,110,174,181,127,255,254,226,240,240,112,
+156, 60,121,242,221,170,170,170, 9, 74,165, 50, 70,161, 80,104,227,226,226,172,245, 45, 9,139,139,139, 43,119, 62,254,226,139,
+ 47,152, 61,255,137,239,209,105,214, 64,188, 51,164, 79,155, 99,251,254,189,101,235, 25,233,169, 30,125, 71,173, 32,132,104, 21,
+ 10, 69,254,128, 1, 3,172,118,210,192,123, 26,254,100,110, 34,111,153, 6,167,108, 99,190, 40,255, 47,163,159,149, 70,181,233,
+164, 38,160,200,174, 40, 65,135,142, 93,213, 38,171, 5, 75,250, 13, 67, 81,151, 54,178,111,118,254,194,137, 8,196, 78, 5,237,
+213,157, 61, 18, 96,219, 62, 43, 14, 31,167,136,157, 10,244,234, 14, 44,250,168, 97,138,155,221,160,164,161,217,201,220,145,137,
+198,146,219, 16, 80, 74, 41,150, 17,144, 15,235,189, 7, 88, 70, 48,249,130,252,129, 89,107,125, 87,249, 83,187,242, 31,137, 35,
+ 71,142,112,250,109,218,177, 23,169,217,212, 11, 42,213, 77,164,167,217, 18,214,100, 93,188, 4, 0,216,181,139,208, 75,151, 39,
+201, 22,205,231,214, 46, 99,198,140,177,238,223,191,159, 73, 74, 74,194,193,131, 7,107, 36,195,113,133,143, 41, 84, 29,205,228,
+166, 35, 83,234, 3,161, 96,211,133, 55, 56,103, 65,216,171,142,141,118,214,172, 89,211, 56, 4,192,169,158,236,187, 19,114, 66,
+ 78, 78, 14, 52, 91,182,168, 63,140,153,140, 1,211,230, 64,220, 46, 24, 16,218,147,253, 89, 41, 96, 21,193, 90, 77, 49,254,213,
+ 88,228,125,186, 18, 71,143, 30, 85, 43,149,202, 26,233,110,155, 0, 22,134, 97,218,182,110,221, 26, 26,141, 70,216,191,127,127,
+ 12, 25, 50,132, 41, 44, 44, 28,120,250,244,233,179, 74,165,114,144, 66,161, 40,180, 43,107,134, 99,221, 53, 27, 61,106, 76,216,
+138,213,219,153,248, 25,103, 90, 12, 29, 55, 91, 54, 52, 50,249,201,183, 62,203,127, 38,252,137, 87, 34, 0,148,195, 22, 99,192,
+212,165, 31,156, 19, 91,121,234, 71, 13, 38,164, 60, 92, 61, 9,158,188, 5,142,239,222, 4, 1, 82,182,113, 7,188,210, 15, 74,
+165,146,241, 66, 17,186,110, 82, 65, 35, 34, 34, 16, 17, 17,225,115,158,120,229,203,177,210,151, 7, 70,169,123,118, 8, 69,247,
+ 14,161,120,188, 77, 71,132,250, 55,131,196, 10,116,243,107,134,160,236, 27,234,153,207, 60, 39,229, 34,171, 87,119,224, 98, 14,
+131, 11,151, 3,112, 54,167, 5,158, 31, 19,136,213,239, 9,208,171, 59,105, 52, 35,189,161, 74,154,221,230, 52, 44, 44, 76,157,
+153,153,137,204,204, 76,252,253, 63,167,241,232,248,120, 53, 0,234,229,150,167,148,235, 71, 46,151,123,126,139,151,217,234, 40,
+ 34, 34, 2,114,185,220,237,135,189,199, 91, 76,236,255,129,212,185, 60, 19,250, 45,147, 54, 70,123, 76,152, 48, 65,186,107,215,
+ 46, 53, 33, 4,111,126, 76,240,243,225,145, 56,124,248, 48,167,223,110,217, 50, 77, 58, 52, 50, 14, 35, 70,220,196,167,159,126,
+ 90,227,218,203, 47, 3,227,199, 3, 11,231, 37,169, 87,127,194,173, 77, 88,229,175,209,104,192, 48, 12,166, 76,153, 2,129, 64,
+208, 16,101, 95,203,242,119, 55, 32, 19,226,155,242,111, 52, 68,172, 6, 0,172, 93,187, 22,107,215,174,181,157, 27,148,208,100,
+197, 57,120,240, 32,190,120, 33, 22,131,159,147, 67,216, 42, 4, 68, 36, 0, 35, 18, 64, 32, 17,131,241,151, 0,160,160, 22, 51,
+168,209,136,215, 95,157,131,178, 3,153,200,201,201, 81, 43,149, 74, 41,154, 14, 36, 51, 51, 51,170,115,231,206, 98,171,213,138,
+148,148, 20,108,223,190, 29, 65, 65, 65,136,138,138,234,176,121,243,230,127,216,239,227, 20, 16,168, 84, 42, 5, 71, 14,252,247,
+255, 30, 9,200,111,167, 47, 23,224,229,101, 21,248,252,223,159, 0,205,251, 10,255, 29,223,182, 91,206,201, 31, 94,118,210, 29,
+ 76, 29,196,144, 56, 41,117, 98, 59, 77, 28,223,157,207,223,163,189, 48,120, 52,178, 7,192,209, 74,155,246,252, 80,210,253,209,
+238, 45, 21, 31,190,110,245, 82, 59,146,136,136, 8,202,166, 37,117, 74, 79, 74,189, 77,219,169,124,225, 85,233, 83,157, 31, 85,
+139,171,204,240,255,247,219, 48, 27,140,144,188,249, 17,130,196, 18, 84,137, 42,161,175,170,132, 63, 8,170,175, 23,169,255,249,
+207,127,202,222,121,231,157,122,149,239,197, 28, 96,253,143, 86, 0, 6,251, 7,120,242, 9, 6, 47,140, 37, 53,222,155,216,169,
+192,122, 31,118,118,182, 91,233,212, 87,107,157,181,250, 51, 51, 51,239,214,193, 17, 19, 42,141,122, 0,192,232,248,253, 80,173,
+ 26,227,149,151, 33,103,101, 14, 68, 36,251,110, 71, 32, 5, 32,173,123, 57, 29, 23,161,205,255,190,192,173, 97, 63,116,228,155,
+ 39,117,165,157, 37,118,210,119,226, 4,183,118, 86, 60,251,185,116,253,246,191,170,119,156,254, 0, 43, 22,252,140, 72,105, 56,
+ 54,125,121, 24, 95,239,179,109, 16, 52,251, 47, 31,200,214,253,231, 3,159, 72, 85,194,187,160,192, 46,168,190, 59, 7, 74, 41,
+154,183,125, 28,135, 15, 31,134,125,223,130,122,203,183,250, 19,185, 84, 46,111,165, 6,190, 0,240, 51,210,211,129,200,200,187,
+215,255,241,143,187,223, 23,206, 75, 82,251, 7, 44,149,205,126,125,121,189,229,100,149,127,116,116, 52,172, 86, 43, 62,255,252,
+243, 70,117,208, 0,128,213,106,173,173,252,105,253,239, 47, 51, 89, 87,227,229,103,135,112,171,220,205,125, 14, 63,159,237, 75,
+255,254,181,231,216,153, 41,186, 26, 52,223,106,157,129, 5, 11, 22, 56,174, 47, 88,176, 0,107,215,174, 5,211, 99,214,221,255,
+106,191,223,157, 60,225, 20,247,229,115,221,201, 90, 56,133, 91,249,170,170,170,208,190, 75, 87,192,106, 4,227, 7, 16,161, 0,
+230,242, 82, 84,229, 94,193,237,252, 2,116, 26, 38, 5, 17,183, 4, 49, 25, 1, 1,131, 85,179,223,194,152,245, 31, 96,209,162,
+ 69,141, 61, 46,115,210,138, 74,165,146, 80, 74, 91, 86, 86, 86, 14, 11, 9, 9,193,165, 75,151, 96,181, 90,113,229,202, 21,108,
+216,176, 1,189,123,247, 70,104,104,232, 43, 0, 94,119, 81,214,117,122, 3, 40,165,173,187, 48,233,210, 14,143,140, 19,151,164,
+156, 65,169,206, 15,223,239, 52, 99,247,177,255, 96,158,220, 95, 40, 52, 88, 35,236, 49, 5,110, 9, 0,175,208,155, 30,117, 77,
+247,184,243, 12, 48, 28, 58, 34, 59,111, 8,233,146,145, 88,159,162,108,153,115, 57, 7,167,190, 59, 3,165, 82,233,149,245,192,
+ 42, 7,131,225, 7, 24, 12,155,160,213,198,176,214,177, 87, 15, 56,196,175,133,186,109,149, 5,146,101,115, 96,185,163,133,249,
+242, 85, 8,197, 34, 4, 16, 1, 2,137, 0,129, 2, 33, 66, 68, 18,208,114, 61,110, 30, 60,234,113,167, 23,119, 74,253,240,113,
+171,227, 61, 92,253, 30, 65,194, 82, 98,247, 8,248,102,253,219,149,179, 26, 62,164,192,117, 85,254, 16, 10,144,123,179, 2, 55,
+139,141, 72, 63,111,219, 64,164,199,140, 29,240,102,223,115, 17,201,134,144, 20,192,143, 57,109,251,219,150, 32,248,229, 27, 8,
+154,122, 22,126,207, 47, 3, 66, 3,189,243,228,114,216,185,205,155, 45, 94,149,219,223, 80, 15, 13,121, 15, 39, 14, 93,193,255,
+ 76,154,136,208,214, 61, 49,231,175,175,225,179,165,251, 48, 52,120, 41,214,253,231,239, 62,239,224, 67, 8, 16,183,232,172,195,
+ 98, 25, 49, 98,132, 93, 33, 89, 61, 54,240,180,169, 34, 53,112, 16,192,207, 40,185,213, 12, 61, 30,105,134,175,190,178, 89,254,
+203,150, 1, 97, 97, 54, 17, 37,183,154,161,228, 86, 51, 12,232,119, 65,237, 73,249, 31, 60,120, 16, 86,171,213,161,164, 55,111,
+222, 12,139,197,226,149,251,186, 30, 15, 79, 45,229,111,123,159, 61,147,119, 10,144,117, 74,165,140,181,212,172,148,194,106,173,
+221,125,217,243, 86, 74,177, 46, 49, 81,150,104,251,141,219,255, 73, 1, 66, 41, 72, 98,162, 82, 70, 41,197, 39,159,124,226,184,
+206,126, 79, 76, 76,148, 81,106,187,143, 2,164, 46,121,137, 74, 37,236,215,136,197, 98,129,217, 98,129,217, 92,187,206,216,243,
+102,139, 5, 95,174, 91, 39, 91,151,152, 88, 71,249, 40,132,205,155, 3, 34, 1, 44,134, 10,156,219,154,132,191,189,166, 64,167,
+ 55, 20, 24,184,242, 67, 92,249,237, 36, 4,254, 18,152,138,111,225,204, 49, 13,118, 28,222,139,210,194, 66,156, 61,123,182,209,
+ 54,214,138,138,138,226,228, 77, 80, 42,149, 65,148,210, 33,153,153,153,191,188,255,254,251,125,206,157, 59, 39, 54, 26,141, 16,
+ 8, 4,104,222,188, 57,204,102, 51, 50, 50, 50, 64, 8, 17,123, 26,235, 19, 19, 19, 3,149, 74,165,127, 98, 98, 98,104, 73,126,
+234,111,127,255,191,188,144,223, 15,239,132, 86,207, 64, 44,100,208, 41, 88,130,210, 59, 98, 40,254,105,198,153, 59, 3, 3, 61,
+233, 13,123,172, 9,117,238,139,118, 98, 80,235, 60,175,174,239, 15, 88,229,239, 74, 14, 24, 79, 44,148,221,239,187,134,155,115,
+220, 52,239,189,125,118,119,191,193,176, 9, 0, 65, 85,213,183,144, 28,191, 10,195,222, 71,107, 92,247,132,119, 6, 69, 75,131,
+180,229,176,138,133, 48,158, 56,135,234, 11,185,168,218,119, 24,168,172,134,152, 82, 4, 64, 0, 33, 8,170,173,102,104,171,171,
+240,229,254,157, 30,101,174,126,207,102,221, 59,195,118,204,154, 43, 20,151, 46, 83, 44,250,200,247,254,234,146,175,156,179,203,
+ 94, 46,151, 59,246,214,102,241,210,218,124, 28, 56,161, 67,222,173, 42, 0, 64,222,173, 42,100,231, 87, 2, 49, 91,216,141, 81,
+ 60,187,126, 72,129,141, 8,148,159, 65, 96,224,101,248, 73,202, 97,181,106, 97, 50,157,128, 64, 16, 6,163,190,184,201, 58,235,
+228,113,127,149, 2, 4,159,255, 60, 11,205,152, 71, 0, 0, 55, 47, 81, 12,154, 40,192, 95,151,143,193,136, 49,125, 0, 80,251,
+125,222, 33, 58, 58,154,190,249, 49, 65,179, 54,253, 64, 1,140,123, 97, 54,231,121,255,117, 95, 45,165,109,219,254, 14,224, 44,
+ 74,110, 53, 67,121,177,109, 11,230,254,253,129, 30, 61,128, 87, 94,185,171,252,203,139,253, 81, 94,236,143,144,128,155,245,202,
+156, 52,105, 18,100, 50, 25, 70,141, 26, 85,195,245,239,252,241,101, 74,192,221,123,235, 11,226,156,230,183, 9, 33,142, 79, 93,
+231,226, 20, 10,141, 34,214,243,156,120,108,108,172,218,157,229,188, 96,193, 2,196,198,198,214, 80,168,117,201,251, 89,169,196,
+217,179,103, 29, 46,120,231, 58, 99,225,122,110,118, 92,156, 38, 78,225,126,171,102, 49,165, 96, 2,252, 96, 42,188, 6,229,210,
+165,216,160, 47,129, 46,122,168,227,250, 55,255,217,128, 15,222,122, 13,225,139, 94,194,135,103, 14, 98,139,238, 10,198, 60,251,
+ 44,194,194,194,188, 14, 6,180, 43,122, 26, 25, 25, 89,163, 15, 31, 59,118, 76, 93,223,118,236, 74,165, 82,164, 84, 42, 7,159,
+ 57,115, 38, 47, 37, 37, 69,243,230,155,111, 14,253,252,243,207, 37, 21, 21, 21,142,109,154,171,170,170,208,172, 89,179,236,201,
+147, 39,247, 28, 62,124,248, 35, 30,136, 4, 67, 8,233,114, 38,109,107, 81,214,222, 69, 87, 23, 45, 73,232,176, 99, 89, 71, 92,
+ 40, 16,162,180, 66, 0, 43, 1,138, 43,140,160,173,186, 87, 45,124,247,163, 62,207, 60,255,151,215,225, 33,158,192,238,254,175,
+225,234,247,240,157, 71, 19, 40,255,186,166, 0, 40, 87, 87,142, 66,161,240,116, 19,117,181,254,109,174,182,111,235,242, 14,120,
+252,167,125, 90,183, 83,107,169, 9,226, 98, 45, 36, 63, 31, 4, 17, 50, 64,149, 17,180, 92, 15, 98, 54, 67, 4,192, 66,173,168,
+178,152, 81,110, 54, 2, 86,207, 86, 20, 27,228,183,250,189, 58, 57, 45,108, 65,130,141, 66, 88,137, 83, 32,159,199, 23,160,150,
+245, 15,224,191,111,116,168,113, 60,120,113, 46, 68,244, 14, 76,164, 53, 84, 42,213, 65,174, 47,150,164, 66,141,144, 15,255,131,
+219,111,198,225,142,214, 31, 29, 77,231, 96,177,228, 2, 0,174,157,106,223,100, 29,118,203,158,207,212,175,141, 85,214, 80,254,
+ 44,134, 6, 47,197,176, 62,147, 16, 21,114, 14, 91,246, 44, 87,123, 51,136,140, 28, 57,146,166,164,164,160,184,120, 52, 90,181,
+ 58,128,102,173,251,130, 82, 10,134, 97, 56, 5, 34,229,229, 1,185,185,103,237, 71, 21,128,164, 2, 90, 61, 48,100,136,237, 76,
+118, 54,240,197, 23, 64,121, 25,160,175, 0, 42,244, 64, 96,112, 25,167,178,213,101,237,231,228,228, 0, 0, 62,254,248, 99, 0,
+ 64,120,120,248,189,112, 51,115,170,195,249,243,231,215,176,216, 93, 21, 55,103,239,142, 93, 97, 59,230,253,157,240,201, 39,159,
+ 96,237,218,181, 80, 42,149, 82, 79,193,117,179, 66,195,145,117,238, 60, 10,130,131,213, 12,195, 96,222,188,121,181, 98, 50,188,
+ 41,223,147,213, 45, 65,173, 21,120,237,227,247,208,111,210, 36, 40, 63,254, 24, 12,115, 87,207, 41,179,207,222,245, 16, 30, 62,
+140,253,251,247,227,202,149, 43, 50,133, 66,161,225,178,241,138,179,242, 79, 75, 75, 83, 3, 64, 70, 70,134, 58, 42, 42, 74,150,
+150,150,166,137,140,140,148,166,167,167, 35, 42, 42, 74, 86, 89, 89,169,174, 99,204, 53,205,152, 49,163,223,180,105,211, 90,116,
+235,214, 13,187,119,239, 54,148,150,150, 10, 43, 43, 43,109,222, 14,251,252,199,182,109,219,194,199,141, 27,231,175, 80, 40, 42,
+221,136, 97,156,148, 53,147,123,233,212,218, 15,222,153,217,172, 85, 15, 21,126, 83,189,138,223,175, 19,228,221, 18, 2,148, 65,
+181,209, 4, 45,109, 85, 48,119,214,156,161,132,144, 2,118,204,247,230,121,221,120, 8,248,169,130, 7, 4,117,178,184,148,148,
+148, 90,159,146, 2, 29, 74, 10,116, 94,181, 53,251,185,107,197,218, 26, 94,114,252, 42,252,206, 22, 64,152,175, 99, 61, 0, 53,
+238,175, 75,224,249,252, 60, 28,191,115, 3,231,174,228,226,214,149,171, 40,187,154,143,242,235, 5, 48, 27, 42, 97, 50,153, 81,
+110, 49,194, 96, 49,163,154, 90, 96, 1, 5, 37,220, 73,166,115,180,255,197, 28,219,241,162,143, 88,203,159, 65,194,123,141,179,
+226,197,219, 56,128,120,149, 14,241, 42, 93, 13,133,207,126,162,226, 51, 32,162,119, 32,164, 58,252,119,150,197,204,121, 10,224,
+214,113, 88,244,205, 0, 0,255, 22, 6,161,250,214, 53,100,254,179, 3,178,126,152,128,227,255, 28,128,236, 75, 55,154,180, 99,
+246, 31, 18, 6,189, 14,208,235, 0,131,255,121, 0,192, 79,127, 55,225,157, 5,203, 0, 0,195, 99,250,120,109,249,191, 48,242,
+ 16,180,218, 24, 4, 31, 59,128, 53,239,217, 72,238,200,145, 35, 57,185,254, 1, 96,197, 63,150,147,238,221, 1,231,207,197,139,
+ 54,247, 63, 0,244,232, 65,177,118, 45,208,165,103, 5, 30, 27,122, 27, 67, 70,223,198,243, 47,153, 56,151,209,217,226,103,143,
+195,195,195, 17, 30, 30,142,121,243,230, 53,118, 21,123,124,215,156,177,126,253,122,153, 59,133,237,240,162,173, 94,141,245,235,
+215,115,178,132, 95,127,253,117, 53, 27,249,239, 14, 11, 23, 46,172,229, 5,112,135, 67,231,243, 48,115,214, 92,156,216,180, 9,
+ 75,150, 44,169,147,156,176,229, 59,112,224, 0,234, 11,216, 27,249,216, 35,248,246,155, 47, 16,241,242,203, 88,177, 98, 5,234,
+ 43,227,130, 5, 11, 48,122,244,104,248,178, 2, 32, 45, 45, 77,237, 20, 44,135, 99,199,142,169, 1, 32, 61, 61, 93, 77, 8, 65,
+ 90, 90, 90,189, 50, 13, 6, 67,203,157, 59,119,226,252,249,243,200,206,206, 14,208,235,245, 48,153,108,253,204,104, 52, 98,207,
+158, 61,196, 78, 22, 42, 57, 20,199, 90, 93, 93, 45, 62,177,245,101, 84,101,125,134,189, 41, 57,184,114, 83,128, 50, 61, 3, 11,
+ 5, 10,244,254,152,187,232,189,168,184,184,184,124, 14, 6,159,131, 87,176, 75, 78, 57, 78, 7,240,104, 2,235,191, 46, 2, 64,
+ 0, 16,169, 84, 10,169, 84,138,211,167, 79, 59, 62,185,199,175,161,180,178, 20,173,134,120,191,238,247,196,137, 19, 4, 0, 2,
+ 2,166, 65,114,252, 42, 68,215,138, 65, 9,129,120, 86,113,141,235, 30, 21,151, 88, 0, 11, 5,242,245, 37,200, 43,213,226,118,
+153, 14,165, 85, 85,208, 25, 43,113,187,186, 18, 55,171, 12, 40,168,170,128,214, 84, 13,157,213, 4,163,213,115,240,235,147, 79,
+184, 25,240,156,226, 2, 94,155,210, 12, 20, 98, 80,175,183, 1,191, 27,189,239,230, 28,103,228,221,170,194,129, 19, 58, 12, 94,
+156, 91,179, 46,232, 29,248, 89,175,193,207,122, 13, 31, 60, 37, 68, 94, 94,158,145,171,204,173, 87,172,104,147,144,232, 56,190,
+162,183, 32, 63,167, 0,151, 82,207,161,240,106, 73,147,119,220, 77, 95,166, 0, 0,202,138, 40, 2, 42, 31,131,116,150, 16,255,
+179, 76,228,248, 36,108,121, 25,132,187,241, 79,159, 27,145,130, 87, 23,217,148, 63, 33, 4,191,164,218,154,128,235,154,127, 22,
+225,189,122,214, 44,231, 38,224,243,207,129,203,151,109,158,128,191,255,157, 58,220,239,148, 82, 4, 7, 7,123, 30,129,237,125,
+148,157,247,255,248,227,143,145,147,147,131,172,172, 44,100,101,101, 33, 57, 57, 25,111,189,245, 22,242,242,242,154,172, 61, 88,
+ 69,231,206,146,158, 63,127, 62, 8, 33,156,149, 33, 33, 4,245,145,137,250,174, 57,227,176, 95, 9, 8,211, 12, 95,191,251, 17,
+154,237, 76, 70,108,108, 44, 94,102,217, 24, 0, 69,143,190,152, 31, 49, 12, 1, 1, 1, 24, 57,114, 36,222,127,255,125, 36, 39,
+ 39,171, 87,172, 88,225,246,253,251,166, 32, 11, 55,251, 60,134,208,208, 80,153,213,106,173,151, 80,212,119,141,131,114,116,120,
+156,162,162,162,100, 78,138, 18, 67,135, 14,149,121,240,158,140, 26, 57,114,100,139,188,188, 60, 28, 62,124, 24,143, 62,250, 40,
+132, 66,161, 99,138, 35, 52, 52,148,235,116,132,213,254,127, 73,247, 94, 3,227,215,239,107,137,223,119, 47,195,147, 81,189, 17,
+ 40, 97, 16, 24, 96,129,191, 95, 53,158,126,110,178, 21,128,214,249,135,137,137,137,158,230,162, 28,171, 0, 56, 78, 7,240,120,
+208, 60, 0, 0,136, 82,169,108, 62,127,254,124,204,159, 63, 31, 0,140,255,136,251, 7, 76, 69,102,248,251, 75,224, 75,227,201,
+229,182,240,225,128,167, 46,131, 10, 24,188,255,147,193,217,250,231,132,128,208, 80,153,185, 89, 0,116,212,130,243,122, 29,206,
+150, 22,227, 92,217, 29,156, 43,211,226,188, 94,139,203, 6, 29,138,171,171, 80, 97, 54,227,134, 65,239,248,159,245,225,133,177,
+ 4,171,223, 19, 96,245,123, 2, 80, 8, 64, 9,131,216,169, 4,175, 79, 21, 99,214,148, 54,232,222,189, 29,172, 16,121,253,200,
+172,171,223,121, 94,190,158,164, 64,117,201,144,101,231,219,136,124,230, 74, 91, 16,221,222,183,131, 0, 0, 66,170,131,128,234,
+ 81,205,216, 34,154,181, 90,109,128, 92, 46,143,241,166,140, 17, 17, 17, 72, 78, 78,198,166, 10, 61, 42,141, 12, 94,253,241,107,
+ 20, 73,252, 81,105,108,186,109, 34, 38,246,255, 64,150,166,253, 8,155,190,223,226, 56,247,211,223, 77, 24, 26,188,212,113, 28,
+251,204, 23, 50, 10, 78,235,135,233,154,165,192,140, 69,163,209,242, 88, 50,100,255,140, 6, 51, 1,208,104, 52, 62,245,225, 46,
+ 93,106, 70,143,143, 26, 5,180,108, 9,132,133, 1,145,253,155, 67, 34, 22, 64,192,220, 21, 43,241,247,247, 56, 32, 51, 12,227,
+176,252,115,114,114, 28, 86, 63,251,249,240,195, 15,241,225,135, 31,226,198, 13,238, 94, 25,119,243,245, 53,175,123,111,125,173,
+ 95,191, 94,182,102,205, 26,183, 10,155,171,245,239,228,122,174, 21,167,192, 30, 91,173,220, 82,216, 27, 9,129,213, 80, 13, 81,
+251, 46, 80, 44, 95,142, 25,129, 45,209, 82,147,230,184, 62,235, 47, 51,240,193,191,191, 70,246,234,255,226,111,253, 70, 97,114,
+112, 55,236,223,190, 29,185,185,185,110,223,191,231,227, 20,232,211,183,175,204,106, 47, 19, 75,200,156,167,103,220,157,171, 11,
+179,103,207,166,132, 16,202, 6,246,177,243,253,206, 74, 62, 45, 45, 77, 51,116,232, 80, 25,165, 20,236, 84,128,135,122, 75, 17,
+137, 68,143, 62,255,252,243, 57,165,165,165,208,233,116,240,247,247, 71,155, 54,109,208,178,101, 75,180,108,217,210, 83,229, 89,
+ 93,136,157,197,207,207,207,240, 98,220,167,178, 13,199, 7,227,234,245, 50,180, 11, 18, 32,170, 39,193,227,221, 40, 2, 91,180,
+ 40, 1, 96,169, 71,111,240,251, 13, 60,164,214, 63,224, 97, 25,160, 66,161,168, 80, 42,149,126, 0, 2, 21, 10,133,131, 5,118,
+138,238,232, 19,243,101,151,250,201,229,114, 42,158,229,136,252, 39, 78,243,255, 30, 7,228,119,119,109,209,124, 28,243, 28, 12,
+230,106,148,233, 13,200, 49,153, 32,178,218,126, 92,106,170,130,149, 82, 80, 0,187,111, 93,129,222,108, 2, 0, 14, 3, 19,193,
+162,143,106,246,113, 91, 60,128, 21, 22, 84,227,194,229,114,124,187,185,204,171,135,117, 86,244,118,151, 63,181,127,119, 40,118,
+ 46,171, 31,108,191, 85, 65, 52,250, 75, 0, 97, 40, 46,190, 27,156, 39,182,222,132,145,233,128,185,253,178,112,243,166,195,114,
+ 58,192,165,124,113, 63,173,175, 65,188, 84, 42, 21,216,210,252,120,230, 40, 98, 98, 98,154,172,227,238, 56,109, 91,222,151,154,
+124, 14, 0, 48,172,143, 45, 51,222, 59, 11,150,225,232,185, 62,248,247,150,151,161,220, 57,135,243,252,255,171,139, 98, 16, 18,
+146,108, 63,210,216,201, 82, 12, 40,181, 89, 99, 0, 69, 72, 72, 50, 39, 89,251,247,238,115,228,180,120,249,101, 64, 38, 35,184,
+115, 61, 8,122,157, 4,149,101, 98,252,184,145, 96,254,124,138,107, 69,229,136,140, 26,138,148,131,106, 78, 86,177,197, 98,113,
+204,247, 39, 39,219,202,234,172,240,139,138,138, 80, 84, 84,196, 89,255, 59, 41, 12,202, 48, 76, 45,165, 74, 41,136,183, 73,128,
+ 20, 10,133,230,245,215, 95,175, 17, 11,192,122, 4,188,113,133, 19, 39, 86, 98,117, 89, 86, 64, 8,247, 57, 59, 66, 8,204,229,
+229, 16,181, 14,129, 32,160, 25,250,188, 56, 9, 31,142, 29,131,119,217,101,123, 3, 7,193, 82, 89, 5, 81,171,118,232, 55, 84,
+138,174,157,186,225,211, 11,105,232,219,183,175,236,248,241,227,181, 72, 64,156, 66, 1,128,168, 1, 96, 78, 92,156, 99,233,160,
+217, 69,217, 11,133, 2,128,222, 93,168, 88, 87,129,215,173, 91, 71, 0, 80,187,139,159,100,100,100,184,117,241,167,165,165,105,
+184, 40,255,196,196, 68, 66, 8, 89,218,178,101,203, 62, 67,135, 14,237,126,241,226, 69,156, 60,121, 18, 22,139, 5,129,129,129,
+ 48, 24, 12, 69, 33, 33, 33, 87,189, 49,250,148, 74, 37,211,174, 93,187,253,207, 61,247, 92,187, 99, 71, 50,176, 86,181, 31, 45,
+136, 24, 61,219, 85,227,242,157, 64,140,232,105,186, 2,192,117, 30,203, 82, 95,155, 56,103,156, 34,132, 56, 31,186,230,125,225,
+209,196, 16,114,120,233,141, 0,140, 78,131, 10,205, 79,241,122,126,184,134,114,175, 67,241,113,206, 24, 88,166,213,201, 76, 1,
+ 18,117, 41, 99, 69, 97, 85, 5, 96, 50,193, 98, 95,215,116,161,162, 4, 5,134, 50, 80, 74, 97,207, 47,160,225, 82,188,216,169,
+ 4,235,127,188,219, 39, 47,230, 0,189,186,155, 33,128,190, 65,202,223,165,179,123,170,131, 58,189, 0, 42,213, 28, 53,144, 9,
+173, 86,107,204,203,203, 19,174, 26, 3, 38,126,255, 72, 44,232,123,212, 97,133,113, 37, 21,238,188, 46,174,199,172, 18,226,106,
+205, 97, 25,193, 96,251, 74, 14,119,203,253,182,108,217, 98,203, 4, 40,151, 83, 46, 57, 31,226, 38,126, 41, 83,238,152,171, 78,
+219, 66, 17, 21,114, 14,195, 99,250,224,200,254,115, 56,166, 91, 14, 2, 2,197,196, 47,100,137, 59,230,114, 42, 95, 72, 72, 50,
+ 8, 33,120,225,133, 23,240,213, 87,101, 96, 85,140,237, 47,101, 9, 1,173,105,217,223,169, 83, 94,244, 40,153, 44,229,160, 90,
+ 61,106, 20, 96, 44,236,140,235, 37,126,176,218,103, 91, 59,232,219,225,237,216,114,236, 63,214, 19,205, 59,245,148,177, 89, 2,
+235, 3,171,248,243,243,243, 1, 0,133,133,133, 14,207,192,173, 91,183, 28, 3,171,143, 32, 78,110,103,215,151,146,112,201, 7,
+224,140,175,190,250, 74,182,118,237, 90, 53, 75, 0,214,172, 89,227,181,245,239,170, 48,124,133, 68, 34, 65,225,181,171,232,214,
+189, 7,172,230,106, 16,179, 5,194,230, 45,208,124,208, 96, 52, 27,248, 4,172,122, 51, 44,134,106, 80,179, 5,176, 88, 17,191,
+238,223,152,242,242, 20, 72, 36, 18,183,242,204, 63, 6,115,250,191,238,238,139, 88,225,254,222,168,168, 40,153,157, 0, 80, 74,
+ 41,134, 15, 31, 46, 75, 77, 77,173,117,159, 39,229,111,175, 43, 43,128, 61, 61,123,246, 28,248,217,103,159, 25,111,223,190, 93,
+ 53,102,204,152,231, 50, 51, 51,255,102, 48, 24,138, 91,183,110,173,248,244,211, 79,181, 92,235, 79,169, 84,138, 0, 60, 50, 52,
+ 50,178, 77,220,172, 56, 92,201,191,162,157, 62, 43,238,201,244,253, 27, 19,110,150,107,135, 13,142, 30, 99,109,215, 41,252,127,
+ 92,173,252,250, 82, 11,219,251, 24,113,226,159,196,141, 14,112,253,206,227, 65, 37, 0,245, 89, 23,190, 40,127, 86,217,212,145,
+ 48,134, 19, 9, 88,121,242,144, 6, 0,153, 58, 40,138,194, 95, 2, 29, 53,195,104, 54,195, 74,173,104, 21, 20,132,124,125, 41,
+188, 73, 46,228,110,121,223,221, 24, 0,239,214, 98,187,115,241, 55, 52, 93,175, 61,143,192,196,193,131, 7,239,136,143,143, 23,
+135,132,132, 88,111,222,188,137, 5,125,111,186, 42,127,206,255,163,174,132, 61, 62,193,158,229,207, 77,146,167, 90,247,112, 69,
+226,142, 57, 26, 0,100, 66,191,101,210, 93,103,254,174, 78,219, 2, 16, 16, 76,236,255,129,108,199,233, 15, 52, 92,149, 63,219,
+151,138,139, 71, 83,160,140,181,126,225, 78,239,108, 72, 56,192,246, 7, 82,223,230, 26,118,171,158, 20,235,250, 74, 45,229,229,
+106, 34, 0, 12, 85,254, 32,229,102, 8, 25, 33, 12,140, 68, 54,118,242,107,152, 27, 27,231,177, 61,146,146,146, 72, 82, 82, 18,
+189,135,239, 31, 40,165,132, 16, 66,157, 35,218,157, 61, 1,222,200, 82, 40, 20,154,216,216, 88, 44, 88,176,192, 65, 40,154, 42,
+ 21,238,168, 81,163, 48,119,203,122,124, 88, 94,130, 1,209, 35,192,180, 11,182,149,201, 68,109,169,123, 33, 2, 17, 8, 65,196,
+ 2,124,149,184, 26, 45, 70, 15, 70,247,238,221,189,142,218,111, 8,156,172,123,117,100,100,164, 44, 53, 53,181, 65,117,149,147,
+147, 19,115,224,192,129,107, 2,129, 96,251,147, 79, 62,249,143, 57,115,230,220, 94,183,110, 93, 10, 96,155,114,240, 66, 20, 3,
+ 32,249,228,201,147, 67,190,219,176,145, 17, 11,252,174, 79,122,105, 82,255,185,115,231,234,190,252,242,203, 9, 0,130,236,138,
+191,156,221, 32,136,139, 71,129,199,131, 1, 46,238,127, 95, 9, 64,131, 9,131, 7,229,195,121, 64,250,241,100, 26,145, 79,146,
+ 75,173,151,178,213,250,106, 35,204, 22, 11,186, 15, 25,132,112,115,164,183, 10,183,209,130, 81,216,164, 63, 0,212,172, 53,110,
+143, 3,104, 80, 14,124,149, 74,181, 83,169, 84, 10,147,147,147, 23,173, 90,181,234,159, 78,228, 98,148,243,255,226,234, 81, 0,
+208,104,201, 75, 38, 95, 96,227, 44,234,126,190,201, 23,228, 62, 49,253, 93,103,254,174, 97,219,135,130, 98,199,233, 15,124, 42,
+163, 77,185, 19,188,186,104,212, 93,179,151,220,189,182,232, 35,239,243,145,199,191,125, 86, 19, 15,144,117, 95, 45,149, 86, 26,
+108,251, 0,220,205,255, 31,231,245, 59, 98,183,200, 44, 10,133,162,209,231, 85, 89, 18,208, 24,178,236,177, 0,106,246,123, 35,
+148,205,167,223,117,239,222, 29,237,231,205,147,173,221,183, 79,157,251,143,159, 33, 23,181, 66, 75,251,230, 61,149, 6, 51,230,
+191,181, 4,130,128, 16,236,222,168,196,233,214, 4, 99,135, 13,243, 57,111,191,197, 98,246,121,152,224,234,226,231, 64,190,200,
+243,207, 63,127,155, 82,154,208,171, 87,175,255, 43, 46, 46,214,251,160,248,157,235,125,100, 70, 70, 6,172,102,130, 97,195,251,
+127, 48,119,238, 92, 29, 0,204,153, 51,199, 10, 64,215,144, 38,117,242, 56,213,248,238,198, 43,202,227, 33,243, 0,220, 19, 82,
+224,179, 98, 76,170,145, 96, 7, 25, 57,151,154,188, 82, 93,146,254,176,231, 26, 44, 87,161, 80, 88, 0,252,203,254,241, 89,174,
+187,242, 53,240,121, 73, 99,220,115, 47, 97, 83,240, 20,139, 62, 74,110,116,217,158, 82,253,122,209,190,166,123, 89, 7,141,181,
+233,138, 66,161,208, 40, 20,138, 70,145, 69, 26, 48, 7,192,150, 65,169, 84,194,190,125, 47,242,156,182,239, 77, 61,176,223,177,
+125,239,232,161,163, 97, 39,189,117,254, 63,193, 20, 29,177,108, 14,174,173,152, 56,238, 38,232,137, 4, 52, 70,125, 61,241,196,
+ 19,213,102,179, 57, 5,128,254,253,247,223,111,144, 18,141,139,139, 35,239,191,255, 62, 53, 26,141, 0,176,175,174,251, 86,174,
+ 92, 73, 22, 47, 94,236,248, 95,246, 84,192,245,142,237,174,193,157, 60,238, 47,184,122,184,136,175,251, 8,243,224,193,131, 7,
+143, 38,129, 25, 64, 21, 0, 73, 35, 27,113,158,118, 12,228,188,163, 32,143,135, 3,124, 99,242,224,193,131,199,195, 5, 33,128,
+102, 28,148,191, 1,182, 0,238,198,210, 7, 86,240,203,254,254,112, 29,137, 7, 15, 30, 60,120,252,241, 16,192,235, 11, 30,188,
+ 7,128, 7, 15, 30, 60,120,240,224,193, 19, 0, 30, 60,120,240,224,193,227,207,142, 26, 46,157, 83,167, 78,249, 28,145,235, 46,
+152,240, 65,151, 23, 54,200, 15,254,126,133, 16,137, 75, 96,181,218,150,133, 9, 4, 12, 24, 34,176,253,101, 8, 8, 97, 64,137,
+ 16,132, 16, 48, 48, 99,199, 46, 17, 40,165, 8, 97, 90,193,155,242,217, 51, 42,182,134, 45,128,167, 28,182, 4, 3, 38,118,201,
+215,195, 88,127,188, 60, 94, 30, 47,143,151,199,203,123, 48,229,241, 30, 0, 15, 56,116,228, 50,116,165, 58,152, 76, 20,183,239,
+ 16,236, 77,246,199,190,253,129, 96,136, 8,251,213,237,177,239, 96, 7,236, 83,119,192,225,227,109, 32,132, 16, 12, 36, 24, 17,
+197,192, 79,236,199,249,127, 76,125,117, 58,157,250,234,116,122, 36, 85, 93,101, 98, 72,234,185,179,153,135,212, 71,143,232,147,
+147,147,171, 0, 52,231, 57,232,195,143, 49, 79,141,144,206,153, 51,157,122,187,201,211,195, 10,165, 82, 41,165,118,212,183,187,
+ 30, 87, 80, 23,240, 61,138, 7,143, 38,240, 0,176, 24, 54,124, 8,231,151,240,104,106,134, 71,214,210,216,242, 26, 19, 25,153,
+ 34,140, 27, 99,193,233,223,253, 33, 22, 9, 33, 20, 8, 33, 18, 81,248, 9, 76,128,176, 57,132,168,196,144, 62,102, 72,196,126,
+160, 0, 58,180, 3,158, 29,111,197,129,237,220,148,255,229, 11, 89,120,244,177,238,232, 24,218, 18,249,215, 46,118, 9,106,223,
+ 13,173, 59, 90,240,235, 47,191, 32, 57, 57,185, 4, 77,188, 35,150, 92, 46, 31,175, 82,169,118, 57, 29, 63,227,124,204,163,110,
+204,157, 35,167,230,170,115,178, 33, 17,193,106,171,181, 24,165, 29, 43,213,157,218,143, 70, 69,117, 7,124,181,254, 63,127,216,
+157,206, 98, 99, 99,213, 11, 22, 44, 0, 33, 4,107,214,172, 81, 55, 70, 78, 0, 54, 29, 0,175,255,239, 63,188, 34, 93,148,130,
+ 48, 76,125,237, 77,157,219,147,109,211,187,201,183,106,182,179,243,206,136, 60, 26, 23,108, 54, 64, 39, 47, 1, 55, 2,208, 84,
+ 96,238,179, 46, 28, 63,214, 4, 10, 1,132, 2, 17,134, 69, 18,180,109,195, 64, 40,100,224, 39, 18,160, 87, 56,131,107,215,205,
+ 24, 18,193,160, 85,136, 4,191, 30,108, 1, 0, 16,208, 74, 80,106,133,167, 20,193, 83, 95,157, 78,127,207,204, 68,215,142,157,
+240,123,218, 49,164, 27, 77,208,221,209, 65,236,215, 28,189, 7, 14, 71,255,225, 99,161,222,161,130,156, 99,110,252,123,160,248,
+ 71,169, 84,170, 3, 97, 97, 97,200,204,204,100, 59, 76, 9,128,121, 42,149,106,167, 92, 46,143, 81,169, 84, 7,254,104, 47,197,
+236, 56, 57,245, 19,106, 33,100,140,168,170,178,160, 84,239,143,239,127, 56,224, 85,253,143, 30, 51, 92,218,194, 95,139, 81,195,
+197,232,218,229, 89,117,139, 22, 65, 48,153,205,184,125,251, 14,218,229, 93, 71,118, 78, 46, 94,125,101, 60,221,248,221,110,159,
+218, 53,194,190,167, 2,192,125,155,236,251,105,253, 3,119,183,195, 93,179,102, 13,148, 74,165,180,169,210, 1,223,199,247,133,
+110,221,186,181,246,126, 10, 77,164,188,148,202, 68, 41, 1, 65,108, 35,212, 59,205,251, 9, 36,253, 53,103, 29,111,207,146,233,
+216,247,202,129,215, 18,245, 30,137,220,175,191,254,234, 56, 30, 55,110, 28,246,236,217, 83,239, 49,143,123,175,252,157,207, 57,
+ 19,129,112,212,249,165, 0, 0, 32, 0, 73, 68, 65, 84,122, 9, 64,234,145,116, 12, 31, 17,121,223, 10,109,245, 46, 59,164,243,
+205, 62,189,132,140, 80, 0,157, 86,136,246,109, 69,104,223, 86,140,138, 10, 17, 36, 34, 33, 44, 66, 63, 12,234, 71, 48,224,113,
+ 1, 24, 34, 2, 33, 4,126, 34, 49, 68, 76, 53,136, 68, 12,179, 1, 48, 67, 95,175,242, 63,114,240, 0,186,117,104,131,179,167,
+207, 34,175,232,230,221,242,149, 87, 64,114,238, 56,101, 4, 4,131, 34, 6,225,215, 61,222,233,216,117,235,214, 73, 51, 51, 51,
+213,151, 47, 95,134,191,191, 63,252,253,253,101,219,182,109,211,120, 57,152,201, 84, 42,213, 1, 86,241, 59,117,142,150, 0,198,
+126,253,245,215,119, 94,123,237,181,100,185, 92, 62, 70,165, 82, 37, 63,136, 29, 60, 50, 50, 82,154,158,158,206,249,185,165,163,
+134, 73,251,134, 55, 87,119,234, 80,132,160, 22,126, 96,152, 0, 84, 86,154, 81,172,173,196,203,242,222, 84,210, 98, 16,190,253,
+230, 7, 78,253, 72,132, 66,188,240,204,227,234, 62,125,122,227,102,161, 14, 39,126, 59,137,138, 10, 61,130,130,154, 35, 44,172,
+ 11, 24,129, 8, 22, 75, 30,226,102, 79,167,137,235,190,255, 67, 89, 55,177,177,177,234,133, 11, 23, 58,142, 23, 44, 88,208,104,
+ 94,128, 7,217, 3,160, 82,169,136, 92, 46,167, 73, 73, 73,112,183,177,210,253, 54,218, 21,138, 56, 16, 66,176,126,189, 82, 22,
+ 27,219, 48, 18,192,116,121,209,161,188, 51, 86, 52,115, 59,152,182,111,201, 32, 52,132,121,104,219,239,207, 10,103,101,239,142,
+ 20,120,244, 0,164, 30, 73, 7,128, 6, 19,129, 35,243,178,235,189, 62,226,211, 30, 62, 15, 22, 78, 57,206,189, 26,132,146, 53,
+109, 33, 18,138,208,185, 99, 5,202,203, 69, 56,113,182, 51, 4, 2, 1, 4, 68, 0,177,200,140, 62, 61, 12,232,217, 67, 0, 2,
+ 6, 98,145, 31,196, 2,130,136,199,141, 8, 9,182, 98,211,255,213, 47,187,119,183,118,184,150, 83, 84, 83,249,219,145,119,227,
+ 26, 33,140,144,118,136,122, 28,193, 45,155,163, 68,119,135, 83,121,215,174, 93, 43, 93,185,114,165,250,218,181,107,206,167,213,
+227,199,143,199,238,221,220,173, 77,149, 74,117,208, 89,249,187, 65,235,132,132,132,146, 55,223,124,115, 63,154,120,138,162, 30,
+229,175,246,166,108,225, 97, 33,234,208,118,101,104,221, 42, 16,157, 66,219, 35, 32, 48, 0,215,174, 21,192, 98,177, 34,180, 99,
+115,156,187,144,134,168, 17, 67,164,105, 71, 50,234, 29, 76,223,120, 99, 58,125, 60, 92,135, 71, 30,233,132,243, 23,174,225,196,
+137, 11,184,125,167, 28,148, 2,193,193,254, 48, 24, 42, 48,112, 96, 31,148,148,148,162,224,196,111, 24,254,100,164, 52,245, 48,
+119,162,242, 32,131,181,254,237,219, 78,131,245, 4,172, 93,187,214,107, 47, 0, 59,221,239,154, 9,216,205,118,178, 13,238,127,
+157, 58,117,162,157, 59,119,110,112, 46,126,149, 74, 69, 38, 79,158, 76,183,108,217, 2,118, 99,165,250, 20,158,125, 43,220, 90,
+229,143,138,138,146,178,155, 3,213, 65, 98,169, 7,153,142,255,173, 80,196,169, 27,242,142,186,202, 27,178,164, 2,199, 87, 52,
+171,161,248,121, 60,156,214,191,171,203,191, 65, 83, 0, 13, 37, 2, 35, 62,237, 81, 39, 9,240, 69,249,179, 72, 73, 73, 65, 65,
+ 65, 1, 0, 32, 52, 52,148,122,243, 50, 8,104, 37,132,196, 2,177, 72,132,223,206,182,129, 64, 40, 68,115,145,222, 22, 7,208,
+140, 65, 65, 65,115, 60,222,199, 10, 66, 8,228,207,154, 65,173, 12, 64,252, 64, 64, 97, 11,228,119, 15, 67,201,117, 20,106, 43,
+144, 85, 80, 80,103, 89, 74, 74,181,208,221, 46,180,203,226, 60, 0,185, 42,127, 0,192,238,221,187,241,212, 83, 79, 73,247,238,
+221,235,113,128,147,203,229,163,114,115,115,221,118,152,210,210, 82,231,211, 45,151, 45, 91,134,243,231,207,143,126,144,166, 2,
+156,148, 63,103, 72, 71, 13,147, 74,132, 55,225,239,223, 18, 18, 63, 49,186,117,235,138,206, 93,187,162,172, 76, 3,173,182, 2,
+ 98,177, 0, 33,193, 18, 8,253, 91,122, 28, 76,133,180, 0,205,155,181,130,161,210,140,179,103,179,113,163,176, 20, 55, 11, 43,
+ 80, 89, 45,193, 35,161,102, 72,252, 4,200,206,202,197,163,221,187,227,198,205, 50, 84,154, 91,112, 26,160,157,221,254,117,157,
+247,118, 58,160, 46,153,190,200, 98,173,255, 5, 11, 22,212, 58,191,112,225, 66,159,188, 0,238,118, 39,116,157, 59,110, 44,175,
+ 66, 90, 90,154,186,161, 27,242, 76,158, 60,153,170, 84, 42,200,229,114,184,155, 14,224,226,169, 98,149, 63, 0,100,100,100,212,
+ 42,147,253,186, 71,163,135,221, 97,176,177, 60, 46, 91, 22, 6, 98,242, 26,189, 91,197, 31, 26,194,216, 71, 41,110,205, 59,110,
+220,184, 26, 94,146,167,159,126,186, 70, 93,241,110,255, 7, 7, 94,199, 0, 52,150, 71,160, 49,145,157,109, 35, 22, 5, 5, 5,
+ 94,145, 0,161, 80, 8,145, 64, 4,145,136, 96,228,112,192,160,175,198,149, 28, 49, 68, 66, 17,132, 22, 33,134, 70, 82,136, 69,
+ 34, 8, 4, 12, 64, 9,180, 58,224,248, 73, 33,172, 86, 43,128,219,117,202, 61,249, 91, 14, 42, 42,234,206,192,217,173,125,123,
+170, 55, 19, 84, 86,150,194, 98, 53,115,126,206,147, 39, 79,214, 77, 58, 12, 6, 78,138,198,213,245,239,142, 25,238,216,177,195,
+249,254,228,166,240, 2,184,115,241, 59, 43,127,251, 0,200,205, 2, 12,109,167,102,152,235, 48, 91,172, 48,154,204,184,125, 71,
+ 11,145, 88,130,234,106, 19, 76,102, 11,204,102, 43,204, 22,202,201, 19, 35, 22,233, 33,241,239,132,226,226, 82,148,149, 27,160,
+213, 85,162, 69,171,254, 24,246,248,227,200, 72,221,131,142, 70, 51, 74,203, 74,209,179,103,119,248,137,133,208,151,107,255, 16,
+ 3,133, 61,242,223, 49,247,239,226,153,242, 41, 22, 96,193,130, 5, 53,188, 9,174,215,184, 18, 0,173, 54,198,113, 99, 92, 92,
+ 8,182,108,217, 82,163,191,178, 6, 66, 94, 94,158,207,187,114,202,229,114,186,101,203, 22,199, 54,227,117,197, 4,184, 42, 87,
+ 87, 79, 85, 90, 90,154,154, 13,124,163,148,210, 99,199,142,213,184,126,236,216, 49,181, 39,167, 7, 75, 26, 88, 18,224,108,197,
+215,101,232,123,120, 54, 76,138, 74,198,102, 0, 83,214,232,241,196,146,138, 6,145, 47,215, 57,126, 79, 49, 1, 60,238,189, 55,
+160, 46, 15,192,125,245,239,184,179,244, 27, 98,253,187, 88,172,200,206,206,102, 7, 20, 78,189, 87, 32, 16, 98,232, 16, 43, 4,
+140, 16,199, 51, 37,184,148, 45,193,132,167,128,103,158, 6, 38,142, 35,232,208, 78, 12,137,216, 15, 18,177, 31,252, 37,126, 8,
+237,224, 7,137, 88, 2,137,135,101,128,249,121,215, 73,137,246, 22,169,107, 32,233,222,173, 11,130, 90, 6, 66, 98, 53,162,194,
+ 96,186,239,157,226,200,145, 35, 7,142, 28, 57, 82, 67,225, 59,127, 0,160,184,184, 24, 19, 39, 78,108, 50, 43,223,110, 29, 73,
+ 93,207,217,191,123,101,201, 89, 44,128,222, 96,130, 94,111, 68, 89, 89, 53,110,221,210,225,198,141, 59, 40, 47,175, 70, 69,133,
+ 9, 21, 21, 70,232,245, 38,148,150,148,122,148, 85, 93,109, 70, 85,149, 5, 38,147, 17,205,155,139,209, 57,180, 5, 2, 2, 3,
+ 1, 0, 97,221,187,162, 83,199, 22, 8,106, 33, 1,165, 22,152,204, 86, 84, 87,235,255, 16, 3, 73,108,108,172,122,209,162, 69,
+245, 42,243,216,216, 88,206, 22,169,125, 75,225, 58,175,175, 89,179, 6, 95,125,245,149,215, 91, 13, 59,109, 59,235,248,176, 10,
+181,160,160,128,221, 61,211, 43,237, 54,121,242,100,154,148,148, 4,103,242,160, 82,169,200,164, 73,147,234,253,221,236,217,179,
+ 65, 8, 1,219,143, 35, 35, 35,165, 0, 48,116,232, 80, 25,171,200, 89,171,159,189, 78, 41,117, 92,231,240,180, 53,172,120,119,
+196,129,203, 12, 74,235,214,173, 65,156, 88, 66, 67,229,241,120,240,148,191,187, 99,159, 60, 0, 15,146,229,127,119,128,183, 64,
+ 32, 16,120,253,187,225, 67,172,104,219,198, 15,101,101, 66,248, 9,205,240, 19, 11,160, 73, 23, 99,130, 76, 4,177, 72,132,178,
+ 50, 17, 82, 51, 3,209, 66, 66,192, 48, 12,198,197, 24,241,220, 4, 10,134,161, 88,126,202,251,114,202,229,114, 42, 8,144, 64,
+ 43,106,141, 0, 83, 62, 46, 23, 80,140,146,142,228,188,165,239,192,129, 3,113,244,232, 81,183,215, 2, 2, 2, 56, 15,150, 58,
+157,110, 52, 0,108,216,176, 1, 51,102,204,112,156, 47, 46, 46,118,124,159, 49, 99, 6,138,138,138,154,164, 61,211,211,211, 53,
+132, 16,176,243,164, 12,195,128,117,119,214, 51,111, 90, 39,242,174,223,144,181,105, 97, 80,251,137, 5, 48,154,172,168,170,206,
+199,245,252, 98,104,117,101,208,106, 13, 40,214, 86,162, 88, 91,137,150, 33, 93, 1,228,212, 43,235,214, 29,138,194, 91,119,208,
+187,119,119,148,232,116, 16, 9, 25,148,149,231, 67, 95, 98,197, 99,143,234,209,174, 77, 27, 4, 4, 4,192,207,207, 31, 55, 11,
+203, 65, 4,193,156,202,232,236,146,111,172, 85, 0,141,189,130,160, 46,107, 29,184, 27, 11,192, 21, 10,133, 66, 19, 27, 27,139,
+249,243,231,215,242, 42,176,211, 12,190,174, 44,152, 60,121,114, 13, 11,150,125,191, 8, 33,120,241,197, 23,145,148,148, 68,184,
+146, 0, 87,203,223,249,154,171,167,193, 21,235,214,173, 35, 0, 28, 86,126, 70, 70,134,218,222,175, 53,118,111, 0,251, 87, 13,
+128,164,167,167, 59,174,215,183,157,107, 90, 90,154,122,248,240, 97,178,163, 71,109,239,196,236,217,179,113,234,212,111, 50, 86,
+133, 31, 59,118, 76,205, 62,255,208,161, 67, 61,122,202,214,173, 91,135, 47,100,193,152,178,214, 96,123,174,133,129, 53,174, 79,
+ 89,107,112,212,231, 76,153, 8,223, 28, 52,130,199, 67, 64,218,227, 87,214, 36,221,171, 22,227,212,169, 83,220, 87, 1,220, 11,
+197,239, 28, 11,208, 16,235,191,166, 37, 95, 83,249,219,221, 76, 30,167, 2, 90,183, 22,128, 33, 2,180,105, 45, 64,143,238, 20,
+ 55,110, 8,193, 8, 8, 68, 66, 33, 68, 66, 17,126, 63, 19,136,144, 64, 17, 4, 2, 1,134, 71, 90,224,239,239, 7,171,149, 2,
+212,226,147,242,111,214,174, 51,110, 85, 80,232, 47,107, 32, 36, 2, 92,190,145, 71, 46,115, 84,254,246,129, 77,118,253,250,117,
+245,245,235,215,221, 61,175,134, 99, 57,198, 20, 23, 23,239,103,149, 60, 0, 76,156, 56, 17, 27, 54,108,112,220, 83, 86, 86,134,
+162,162, 34,236,220,185,147, 93, 46,120,223, 59,175,125,224, 82,103,100,100,168,217, 96, 49,251, 57,175,149, 66,234,225,116,141,
+ 76, 26, 1, 90, 80, 6, 67,165, 9, 58,191, 42, 80,232, 80, 85,101, 70, 89, 89, 53,138,238, 24,112,227,102, 5,158,148,117, 1,
+144, 90,175,172, 74, 99,107,228, 94,185,141,176,110,143,160, 91,183, 78, 40, 46,190,131,224,150, 22,244,232, 17,132,182,109,194,
+ 32,241,247, 71, 73, 73, 5, 78,156,188,136,252,130, 50,180,239,212,231,161, 29, 64, 18,149, 74, 74, 8,100,172, 46,117, 86,170,
+245,173,219, 79, 84, 42,165,137,235,214,113,242, 2,172, 93,187, 86,237, 74, 0, 86,175, 94,141,245,235,215,203, 60,201, 75, 76,
+ 76,164,113,113,113, 68,161, 8,118, 42, 19,117,167,152, 41, 0, 76,154, 52,137,147,251,223,121, 74,161, 85,171, 36,248, 58,109,
+192, 90,249,118, 2, 64, 41,165, 24, 62,124,184, 44, 53, 53,181,206,235,158, 20, 54, 59,183,158,154,122, 84, 77, 8, 1, 33, 4,
+ 3, 6,244,151,173, 91,183, 78, 83,251,222,187, 36,195,147, 60,102,178, 14,172, 60,249,168,174, 53,248,209,228, 53,231, 29,242,
+184,128,143, 1,120,120,224,145, 0, 60,136, 22, 63,139,169, 83,167, 54,232,247, 12,195, 64, 32,176,125,122,135, 51, 24,216,207,
+ 2, 63,177,196, 70, 0, 68, 34, 12,139, 4,252,252, 0,145,192, 15,173, 91, 75, 32, 16,232, 97,177, 88, 97,181,122,239,182, 55,
+104, 11, 33,233,212, 11, 87,146,255,131, 54, 66, 6, 71,242,174,121, 61,160, 44, 88,176, 64,179,110,221, 58, 89, 67,150, 1,178,
+203,250,222,120,227, 13,199, 57,214,210, 47, 43, 43,131,193, 96,192,204,153, 51, 1, 0, 95,126,249, 37, 0,168,155,162,109,211,
+210,210, 52,118,107, 95, 13, 0, 67,134, 12,105, 80, 0, 87,167, 46, 61,145,121,108, 47,218,182, 14, 64, 64,128,173,219, 87, 87,
+ 91, 80, 86,110,132, 86, 87,137,206,221,250,224,251,141,155, 60,182,201, 47,191,236, 35, 47, 62, 63,148, 30,203, 56,135, 39,135,
+247, 71,151, 46, 93, 96, 50, 86, 97,224,128,199, 17, 24, 20,132,107,185,121, 40,184, 81,130,212,180, 11,208,149, 7, 97,207,134,
+ 77, 15,173,207,116,118,156,194,222,254, 4,179, 21, 10,199,178,112,171,139,210,103, 24, 2, 80,135,202,160,179, 21, 10,244,119,
+ 99,193, 18, 2, 10, 39, 90, 30, 23, 23, 7, 87, 47,192,252,249,243, 65, 8, 65, 92,156, 66,109,215,231,152, 29,167, 64,255,254,
+181,229,197,197,197, 57,220,241,158,148, 28, 87,229,239,138, 73,147, 38, 97,244,232,209, 50, 95, 73,176,243, 92,125,100,100,164,
+ 44, 53, 53, 85, 83,215,117, 46, 65,138,246, 85, 5,148, 37, 95, 81, 81, 81, 50,133, 34, 78,227, 74, 58,156,228,195, 27,121, 91,
+ 22, 54,179, 29, 74,218,221,245,116, 44,204,115, 16,130,189,167,235, 31,251,220,229, 1,224, 99, 0, 30, 82, 2, 48,108,248,144,
+123, 50,231,211, 88,150,191,115, 71,242, 5, 90, 29, 65,135,118, 12, 8, 97, 64, 24, 6,251, 14,216,230,247,253,252, 36,240, 19,
+251, 97,226,211, 4, 18, 63, 49,252, 37, 4,218, 98, 1, 50, 78, 52,135,197,106, 65,231, 78,222,205,235,202,229,114,122, 35,255,
+ 10,116,153,187,209,163,179, 8,103, 11,124,159, 23,158, 61,123,182, 6, 13, 12,202,147,203,229,178,207, 63,255, 92,205,186,249,
+139,139,139,167, 68, 70, 70, 86,236,223,191,127,215,115,207, 61, 55,182,184,184,152, 76,159, 62,125,175, 61, 95, 64,147,117,206,
+244,244,116, 77,100,100,164,140,253,222, 16, 89,223,111,220, 68,166,191,250, 50,205,186,120, 30, 55,114,175,129, 97, 8, 44, 22,
+ 10,137,127, 8,194,123,247,197,158, 95,147, 57,215,233,141,219, 86,153,182,248,134,186,170,202,140,126,125,195, 16,218,177, 53,
+242,174,223,130,238, 76, 14, 46,101,229,225,192,193,223,113,173,128,226,120,230, 89,159,218,233, 65, 73,254, 99,221, 28,236,243,
+125, 3, 63,230, 40, 47,231,255,176,118,237, 90, 7, 1, 88,187,118, 45,144,187,161,214,189,238,228,113, 5,165,148, 52,164, 31,
+199,197,197, 53,168,239, 57, 41,121,141, 47,215,221,121, 21,156,127,235, 78,158, 87,237,124,109, 43,146,214,190, 98, 27, 27, 70,
+ 61, 82, 67,249, 3,128,124,252, 19,182, 47,186, 83, 30, 9, 0,159, 7,224,193,193,250, 85,139,107, 77, 3,120, 69, 0, 30,240,
+128,143, 6, 23, 46,243,164, 31, 36, 98, 49, 38,142, 39, 96, 8,193,144,193,102,156, 57,235, 15,134,216,230,252, 75, 74, 24,116,
+108, 47, 0, 67,196, 56,125, 70, 12,137, 31, 96, 52, 25,113, 45,207,223, 43,229,159,147,245, 27, 34, 71, 63, 3, 97,235, 72,228,
+100,101, 64, 88,152,132,160, 22, 33,180,180, 76,219, 36, 21,172, 82,169, 52,114,185, 92, 54,120,240, 96,117,124,124, 60,250,246,
+237, 91,164,211,233, 48,120,240, 96,153, 78,167,195,188,121,243,212,118,229,175,105,234, 70,110,168,226,119, 37, 1, 0, 16, 53,
+ 98,136,180, 67,251, 14,234,192,192, 64,124,191,113, 19, 57,123, 46,199,187, 1, 61, 53, 67, 3,128, 88,208,154,158,191,148,142,
+ 14,237,154, 65, 34, 17,161,162,194,136,130,155,101, 32,194,206, 56,158,153,202, 71, 75,113,193,201, 55,129,238,255,139, 26,203,
+ 11, 79, 44,106,210, 34,197,197,133, 56,165,173,109, 28,133,230, 73, 41,123,163,180, 27,154,207,192,221, 56, 47,143,242,179, 61,
+107,229, 77,219,135,199, 67,139, 1, 3, 6, 56, 2,254,214,175, 90, 92,235,154, 71, 2,208,216,249,248,239,119,126,127,239, 88,
+ 4,129, 78, 71, 16,208,158,160, 85, 8,193,224, 65, 38, 72,196, 2,248,137, 77,104, 21, 34,177, 15, 2, 4, 67, 7, 91,144,113,
+ 82,100,243, 22,112, 36, 70,114,185,156,246,233,217, 2,111,206,255, 16,149,226, 78,248, 41,185, 0,221,195,135, 0, 0,154, 29,
+223,137,172, 60,208,138,242,166, 35, 1, 0, 72,110,110,174,116,213,170, 85,106,103,239, 0, 0,210,148,150,255,189,134, 61,217,
+ 79,131,235,253,208,225,147,100,250,171, 47,211,219,197,183, 81, 89,104,128, 68,210, 10,157,186, 61,206,105, 42,225, 97,135, 45,
+ 29,118, 35, 61,102,238, 6, 56, 86, 4,228,110,108,242,103,243, 20,220,247, 71,195,216,103,166, 52,170,229,206,199, 0, 60, 88,
+ 36,160, 46,229,239,209, 3,240,103, 0,133, 45,170,159, 48, 20, 20, 20, 33, 45, 41, 82,142, 8, 33, 17,139,224, 39, 22,226,217,
+241, 20,148, 90, 17,220,202, 12,179,133,192,106,181,216, 7, 63,207,120,188,107, 5, 38,188, 40, 71,133,176, 7,218, 54, 11,196,
+203, 47,132, 96,211,182, 51, 14, 18, 96,178,252,132, 51, 23,155,118,157, 56, 75, 4,156,142,249,183,199, 7,175,194, 31, 17,100,
+178,142,208, 45,193,181, 53,131, 42,196, 39,121,235,117, 43, 17, 27,188,184,246,133, 19,139,154,220,234,255, 51, 99,255,239,166,
+198,236,195,196, 70, 16,169, 19, 89,228,167, 5,154,138, 4,120,108, 44, 95,247, 17,230,193,131, 7, 15, 30, 60,120, 60,188,224,
+ 19, 61,243,224,193,131, 7, 15, 30, 60, 1,224,193,131, 7, 15, 30, 60,120,240, 4,128, 7, 15, 30, 60,120,240,224,193, 19, 0,
+ 30, 60,120,240,224,193,131,199, 31, 3, 53, 86, 1,156, 58,117,202,231,104, 80,119,193,132,141, 45,111,218,204, 56,143,191,211,
+107, 11, 29,223, 3, 67,218, 59,190,255,240,109, 98,173,123,219,200, 94,243, 40,111,255,154,187, 25,243,198, 44,252,220,241,253,
+182,250,107,248, 82,190,186,224,107,249,234,130,187,242, 61, 63, 93,225,241,119,153,234, 93,232,218,181, 43,174, 94,189,138,193,
+178, 9,142,243, 63,127,175,188,231,245,231,169,191, 36,132,134, 74,223, 44, 40,112,206, 76, 72,238,103,255,115,149, 55, 97,194,
+ 4,233,238,221,187,107,100, 74, 28, 63,126,188,108,215,174, 93,154,166,120, 63, 30,100,121, 13,145,245, 71,174,191,232,232,232,
+151,250,245,235,183,233,204,153, 51, 47,166,164,164,252,212, 8,229,163, 15,202,251,193,203,107, 90,121, 94, 19, 0, 87,124,241,
+197, 23,210,170,170, 42, 16,129, 8,132, 16, 88,204, 38,136, 69, 66,204,155, 55, 79,211, 80,230,241,197, 23, 95, 72, 1, 96,238,
+220,185, 13,146,165,215, 22, 34, 48,164,189, 67,241,183,239,220, 21, 0, 80,120,253,170, 79,242,246,175,121, 3, 99, 22,126,238,
+ 80, 92, 95,108,207,248,127,246,174, 60,188,137,170,123,191,147,164, 89,186,175,148,125, 43, 84, 86, 41, 20, 17, 89, 19,217,132,
+ 2,202, 82,180, 84, 63, 17,161, 1, 17,101, 83,164,159,191, 15, 63, 23, 4, 69,138,178, 6, 68,224,131,178, 21, 68, 89, 10,133,
+ 66, 74,217,180, 82,160,236,148, 82, 74, 55,160,123,218,102, 79,102,126,127, 52, 19,211,144, 54,147, 52,172,206,251, 60,243, 36,
+179,228,100,230,206,189,247, 61,231,220,115,207, 5, 0,204, 24,221,235,185,212, 0,207,201, 15,162,167, 36, 2,231,228, 7,107,
+ 72,109,124, 52, 0, 32, 39,231,201,151, 95, 40, 32,206, 4,228,161,128, 36, 19,144,207, 45, 40, 64,218,252, 79, 1, 0,189,150,
+124,247, 68,203, 45, 42, 42,138,218,177, 99, 7, 52, 26, 77,173,227, 66,161, 80, 30, 21, 21,133,237,219,183, 63,173,211, 3,251,
+189,208,166,217,102,202,104, 84,101,230,222, 95, 0,224, 0,107, 7,213,141,159,126,250,233,213, 11, 23, 46,120, 23, 22, 22, 54,
+246,247,247,247, 13, 15, 15, 47,152, 55,111,222, 22,103,229, 13, 28, 56,112,208,196,137, 19, 79,108,219,182,109, 10, 0,159,183,
+222,155, 54, 25, 0,121,249,242,229,127,201,100,178,223,164, 82, 41,233,160, 72, 58,185, 50,229,130,254,202,154, 68, 92, 85,135,
+169, 71, 32,147,133,171, 61, 0,150,248,126,233, 15, 98,159, 22, 93,229, 3,187,118,128,187,192, 13, 20, 69,193,104,164,112,229,
+214, 93,252, 16,247,163, 68, 36,112,195, 7, 31,124,224, 20,121,199,111, 94, 32,238,220, 62, 85,126, 37,179,173,196,217, 27,167,
+ 9, 95,228, 19, 0,101,217,125, 51,241,215,231, 17, 96, 98,169,246,138,254, 12, 71,227, 62, 52, 55,164,186,174,171,111,142,165,
+245,127,242,249,252,154, 86, 64, 81, 32,201,154,246,109, 52, 26,205,247,207,225,186, 49,182,162, 1,160, 73,163,154, 84,157,186,
+202, 10,104, 13, 6, 0, 64,181,161, 70, 94,155,161,239,163, 93,231,238,140,136, 31, 0,186,245, 25,132,115,242,131,102,226,175,
+235,186,199, 89,126,116,167,145, 9, 96,152,135, 7,146,148, 74, 57, 77,252, 0,112,243,200,209,250, 58,173,122,241,221,214,111,
+196,233, 37,127,161, 32, 55, 3,237, 91,245,198,198,143,183, 59, 92,135, 35, 34, 34, 94,223,185,115, 39, 77,254, 6, 0, 26, 0,
+238, 0, 72,141, 70,195, 19,137, 68,136,136,136, 16,219,242, 4, 60, 97, 4,191, 20,214,245, 80,210,246,181,158,202,130,235,232,
+ 23, 57,125,219,221,114,253,191, 0,252,246,180,117, 76,145,145,145,148,179, 11,240, 88, 17,163, 83, 88,185,114,165, 56, 45, 45,
+ 77,190,121,243,223,137,137, 74, 74, 74,144,153,153,137,145, 35, 71,254, 79, 44, 22, 75,230,205,155,199,232,253,202,100, 50,206,
+182,109,219,254, 11,224,149,126,195,222, 16,109,219,182, 45,248,173,247,166,121, 1, 48, 2,104, 98,186,236, 5, 0,156,129, 3,
+ 7, 14, 0, 30, 94,234,188, 46, 82,237, 21,253, 25,210,226, 23, 83,117,181, 55, 7,218, 7,149,122, 54, 13, 92, 46, 15, 70,163,
+ 1,138,170,106, 76, 28,247, 58, 85, 85, 85,213, 80,194,166, 92,249, 94, 88,216,135,173,101,127, 45, 60, 5,246, 21,128,101,203,
+ 87,136,197, 35,198,203, 91, 52,242,129,187,144, 7,146, 36, 97, 36, 1, 30,151,128,191, 79, 7,116,110,223, 82,158,156,116, 80,
+178,122,245,106,177,163, 74,192,138, 21, 43,196, 29, 67, 78,203,187,117,184, 3, 46,199, 40, 95,177,114,165,100,230,135, 31, 58,
+ 36, 67, 89,118, 31, 34,159, 0,248,120,123, 1,128,249,211,214,117,141, 91,180,182,235, 13, 56, 26,247, 33,122, 69,127,134,119,
+223, 28, 11, 0,230, 79, 91,215,173,218,151,230,144,118,205,229,114,209,188,121,115,112,185, 92,232,116, 58, 40,149, 74, 24,141,
+ 70,148,151,151, 59,245,114, 61,121, 92,252,178,124, 47, 4, 62,192,131, 28,224,175,234, 2, 20,223,207,194,150,184, 5, 14, 89,
+253,221,250, 12, 66,243,166, 53, 67, 36,205,109,144,127,235,214,173,205,195, 1, 0,144,159,159,239,146,242, 99,152, 92,149, 26,
+230,225,129,175, 62,156, 1, 0,248,202,130,248,183,102,102,214,238, 76, 28,200,214, 58,113, 65,127,113,121,175,100,249,103, 45,
+223,134,150, 28, 12, 1, 73, 97,200,235, 70,108,252,126,151,228,232, 42, 48,237,204,121,211,166, 77,251, 77,173, 86, 99,211,166,
+ 77,154, 73,147, 38, 9, 1,120, 2, 32, 55,109,218,164,155, 52,105, 18, 79,173, 86, 67, 40, 20,202, 27,218,209, 13, 27, 54, 76,
+124,228,200, 17,185,105,193,150, 6,195,147,207,249,207,138,175, 62, 21,249, 94,219, 14,209,205,227,248,226, 85, 63,175,143,246,
+ 23,127, 89,165,163,158, 42, 5,128, 94,130,183,188,124, 8,229,239,159,236,240,179,191,252,242,203,226, 63,255,252,211,105,178,
+ 89,182,108,153,120,247,238,221,242,170,170, 42,155,231,239,221,187,135,221,187,119,203,223,123,239, 61,201,198,141, 27, 83,236,
+212, 23, 98,219,182,109, 91,250, 13,123, 99, 66,230,133, 51,188,230, 77, 27, 27,222,122,111, 90,173,126,247,248,193, 95,209,181,
+107,215, 14,219,182,109, 27,222,181,107,215,125, 0,112,234,212,169,122,219, 7,147,246, 86,211, 62, 8,192, 78, 34,158,238,221,
+187, 83,135,146,142,226,194,149,107,230, 99, 26,141, 22,223,173, 88, 87, 61,125, 82, 20, 75,216,207, 49, 30, 10, 2, 92,186,116,
+169,184,223,208, 49,242, 14, 45, 3, 32,112,227,128, 36, 73,220,191,127, 31,151, 51, 46, 64,103, 32, 65,146, 20, 2,124,220, 49,
+116,248, 72,185, 90,107,112,248, 15, 5,110, 69, 8,105,121, 31,224, 18,232,212, 62, 15, 2,222, 3,135, 45,127, 75,242,183,134,
+162,178, 10,247,243,114, 32,242, 9,168,211, 43, 80, 31,121, 89, 99,243,206, 95, 49, 99,116, 47,244,138,254, 12,245,104,217, 15,
+129,207,231,131,203,229,194,219,219, 27,217,217,217, 40, 47, 47,175, 81,164,156, 36,255, 38,141,130,225,201,227, 98,204,204,175,
+ 49,124, 98, 31, 28,184, 82,128,251,106, 52,152,252,173,145, 95,120, 31, 87,207,157, 70,144,159,119, 13,249,243,184, 46, 41,191,
+215,198,189, 11, 0,240,227,185, 57, 68,254, 0,240,127, 43, 87,225,255, 86,174, 50,147,127,146, 82,137, 79,134,142,172, 57, 25,
+196,103,244,220,125, 98,219,136,167,206,125, 69,254, 94,171, 15,224,198,241,132, 7,220,193, 1, 23,205,130,251,226,195,175,230,
+200,231,239,239,192, 72,141, 72, 73, 73,209, 3,192,230,205,155, 85, 0,132,244, 50,202,155, 54,109, 34, 1,184, 91, 46,171, 28,
+ 21, 21,229,212,184, 92, 92, 92,156,216,145,227, 12,208,175,103,247,110,170,132, 95,247, 74,187,119, 9,229, 42,175, 29, 67, 78,
+ 81, 21,238, 85,168, 64, 82,148, 83,129,192, 20, 69, 81,101,101,131,169, 1, 3, 6,184, 52,145,152, 5,249,195,223, 63,217, 41,
+ 25,105,105,105,114, 0, 4, 65, 16,120,249,229,151, 29, 46,179,228,228,228,135,200,255,220,185,115,152, 56,113,162,121, 95,175,
+215,227,198,141, 27,242,184,184,184,122,189,152,219,182,109,251,176,223,176, 55, 70,126, 19, 59,155,151,144,144,128,159, 87, 44,
+229,153, 60, 70,102,242, 79, 72, 72,192,202,149, 43,209,181,107,215,125,246,218,155, 53,249,215,213,222,134,247, 53,121, 1,189,
+ 60,236,202,251, 97,197, 26, 51,249, 23,149,148,162,168,164, 20,138,170,106,184,185,241, 60,215,108,218,174,129,171, 22, 68, 96,
+241, 88, 17, 22, 22,246,208, 86,175, 2,176,122,245,106, 42,160,245,139,104,221,216, 23, 26,189, 17, 4, 1, 36, 37, 29,198,255,
+ 54,111,194,165,140, 12,124, 50,103, 22,184, 92, 14, 72, 35, 9,111,119, 1, 90,191,216, 79,190,124,249,114,198, 13,108,229,202,
+149,226,206,237,239,202,189, 61, 85,248,101,115, 17, 56, 4,133, 94, 93,111,202, 87,174, 92,233, 80, 35,181, 69,254, 52,241,171,
+ 21,165,181, 20, 4, 69,101,149, 93,121,182, 26, 19,221,144,210,226, 23,215, 34,184,205, 59,127,101,116,143, 33, 33, 33, 8, 8,
+ 8, 64,101,101, 37,248,124, 62, 56, 28, 14,212,106, 53,202,203,203,193,229,214, 52,114, 71, 22, 91,218,243,219, 94,204, 90,126,
+ 4,123, 87,124,142, 38,141,130,225,238,225,143, 60, 99, 1,182,196, 45,128,167,169,211,224, 50,148,103,139,252,105,226, 87, 20,
+222, 70,135,230,141, 80,165,210, 64,224, 46, 0,140, 70,187,241, 0,246,202,111,193,250, 3,184,122,254, 44,186,180,237, 4,133,
+209,190,210, 72,147,255,205, 35, 71,241,127, 43, 87,153,143, 39, 41,149, 72, 82, 42,145, 45,253, 47,142, 92,187,132,206,189,218,
+ 2,165,246,151,102, 30, 56,175,173,120,250, 71,131,228, 65, 30, 29,161,166,170, 0,109, 17,248,218, 50,104,141, 85,208,144,106,
+144,124, 79, 52,235,223, 19, 67,166,183,162,236, 89,115,244,184,191, 84, 42,117,151, 74,165, 64,205, 16, 0,164, 82, 41, 76,251,
+ 38, 11, 74,131, 29, 59,118, 56,220,104,103,207,158, 45,158, 51,103,142,188, 83,167, 78, 20, 65, 16,114, 0,120,251,237,183,169,
+ 86,173, 90, 81,159,127,254,185, 83, 75, 51,123, 9, 56,155, 86,125,246,158,104, 88, 51, 45,247,204,141,251, 56,144,195,193,103,
+135, 30,104,255,155, 82,173, 80,234,241,174, 51, 50,203,203,135, 60, 74,203, 31,254,254,201,136,142,142,118,120,136,208,146,240,
+ 41,138, 34,232,229,164,153,226,221,119,223, 21, 63,120,192,204, 40,209,233,116,184,124,249,242,241,250,234, 11, 0,113,243,166,
+141,249,145,145,145, 0,128,244,244,116, 28, 63,248,171, 48,191,240, 62, 73,147,191,233,217,205,237,237,242,229,203,113, 13,105,
+111,223, 77, 26,137, 43,183,243,208,184,109, 19, 64,169, 98,252,236, 69, 37,165,208,235, 13, 38, 5,199, 0,189,222,128,188,187,
+ 57,194, 6,190, 86,194,206, 62,139, 39,136, 90,174, 40,173, 86,139,238, 29, 58,200,221, 69,110, 32, 73, 10, 70, 18, 56,125,242,
+ 20,254,251,213,215, 32, 41,224, 86, 86, 22, 46,101, 92, 68,151, 46,221,192,229, 18,120,161,109,115,100,159,103,238, 5,224,243,
+138, 16,218,186, 16,224, 17,200,187,167, 7,120, 4, 94,236,112, 23,105,151,139,156,126, 0, 75,247,190, 45,207,128, 90, 81, 90,
+107, 54,128, 61, 88,186,247,109,105,218,105,241,139, 49,100,246, 74,155, 81,236,150, 48, 24, 12,112,119,119, 7,135,195,129,159,
+159, 31, 84, 42, 21,148,202,154,101,128,131,130,130, 80, 90, 90,234, 80,142,108, 77, 57,208, 75, 36,194, 39, 43, 78, 98, 72, 55,
+224,238, 5,224, 47,211,185, 79, 86,156,196, 79,179, 37, 48,146, 70,135,203,239,234,185,211,230,239,131,194, 59,128,231,197, 65,
+ 82,202, 53,116,239,208, 2,222,158, 2,108,222,157,140,158,146, 8,228,219,152, 5, 96,175,252,246, 93,163,128,123,192,232, 65,
+ 4,214, 31,200, 70,128, 95, 27,140,237, 75, 48, 42, 63,218,221,159,164,252,123,233,100,234,139, 56,160,153, 2,196,212,133,160,
+254,251, 21,192, 81,131, 72, 91, 68,119, 42,117, 22,102,200, 56, 79,121, 43,223,112, 84, 26,171,161, 45,207,194,150,220,109, 56,
+ 53,186, 28,157,166, 72, 48,116,166, 39, 68,126, 47, 64,200,243, 3,111,180, 2, 83, 12, 83,168,159,215,255,108,179,147,146, 74,
+165, 20,173,180,113, 56, 28, 80, 20,165, 51, 41,209, 26, 14,135,163,162, 40,202, 31, 0,137, 6, 76,175,141,139,139, 75, 25, 54,
+108,152,164,180,180, 84,158,148,148, 84,163,248, 36, 37,161, 99,199,142,232,208,161,131,132, 62,230, 8,170,180,228, 71,147,255,
+239,167,253,223, 71, 52,230, 80, 26, 5,166,198,103,234, 13,122,253, 74,173, 17,139, 0, 56,181, 24,197, 27,111,232, 30, 57,249,
+199,199,199,167, 56, 99,253, 91, 14,153, 16, 4,129, 94,189,122,137,153,174, 42,105, 52, 26, 29, 82, 24,238,220,185, 3,153, 76,
+ 70,172, 89,179,198,214,105, 33,128, 78, 0,120,175, 70,140,173,200,206,206,246, 77, 79, 79, 71, 66, 66, 2,194,179,179, 57,233,
+233,233, 0,128,240,240,112,188, 54,176, 39,188, 61, 5, 88,185,113,111,209,196,137, 19, 99,215,172, 89, 51,219,209,246,118,239,
+183,197,240,234, 44,132,103,251, 89,216,181,120, 10,186,117,105,140, 23, 70,126,109,183,125, 40, 42,171, 32, 20, 10, 0, 0,110,
+110, 60,168, 84, 26, 87,243, 12, 75,250, 79, 0, 76, 22, 3,170,213, 81,145, 36, 9,119, 1, 31, 58, 3, 5,146, 2, 56, 4,176,
+240,203,175, 97, 36,129,234,234,106,220,191,127, 15,193,193,141, 65, 81, 36, 12, 6, 35,132,110, 60,112,221,152,185, 96, 87,173,
+ 90, 37,110,223, 58, 95, 30,232, 87, 89, 83, 29, 76, 27, 65, 80,232,209,249,150,156,158, 21,224, 8,104,235,158,118,247, 91,147,
+ 63, 19,235,223, 90,139,166,137,127,213,190,180,135,200,159,169,245, 15,212, 4, 12, 9, 4, 2,248,248,248,152, 93,134,116,224,
+159,143,143, 15, 26, 55,110, 12,131,129,185,242,180, 49,249, 4,124, 90, 3,226,208,154,253, 76, 67,141,251, 31,168, 57,246,249,
+215,114, 84,232, 28, 27,146,201, 47,172, 9, 86,108,217,200, 31, 94, 62, 30,224,121,115,161, 41, 81, 3, 28, 14,154,180,106,142,
+211, 25, 57, 78,149,223,187,115,191,193,128,222,175,130,119, 31,168, 14, 6,220, 57, 28,244,110,221, 6,210,209,193,140,228, 88,
+143,245,111,125,115, 10,198,188,209, 31,104,167, 1, 46,241, 0, 79, 30, 48, 42, 28,205,215,174,103,230,141,105,230, 15,157,174,
+ 12,132,182, 20, 91,114,183,225,236, 36, 31, 12, 24, 51, 9,253, 26,189, 38,185,114,196, 0, 3,169,132,155, 78, 9, 67, 7, 18,
+197, 15,152, 5,141,154,148, 55,205,164, 73,147, 56, 0,202, 41,211, 10, 81,166,253, 6, 33, 41, 41, 41,165, 99,199,142, 18,119,
+119,119, 4, 6, 6,194,221,221, 29,169,169,169, 68, 82, 82, 82,138, 19,226, 26,143, 28, 57,114,253,170,117,191,112, 22,166, 84,
+147,187,207,100, 65,171,211, 43, 53, 70,204,115,132,252,173, 93,254,169,169,169, 4,189, 61, 45,228,111,203,221,239,168, 23,160,
+186,186,218,252,253,220,185,115,230, 13, 0,230,204,153, 83,107,223,226,122, 65, 29,226,154, 2,104,109, 82, 10,221, 95, 27,247,
+182,198,210, 19, 64, 91,254,175,244,237,107,217,222, 14, 72,165, 82,141, 35,237, 45,102,212, 0,188, 24,222, 1, 94,221,188, 80,
+112, 44, 23, 16, 10, 48,110,230,191,208,235,157,159, 24, 61,179,193, 96, 68,193,189, 7, 6,218,242,167,145,119, 55,167,161,175,
+150,170, 99, 99,241, 20, 40, 4,176,101,169, 80,166,206,141,164, 0, 35, 89,163, 4, 16, 4,240,235,158,221, 24, 51,118, 60, 2,
+131, 26,153, 59, 64,202,129,119,201,229, 20,161,115,187, 60,243,254,139, 93,220,205,186, 97,143, 78,217,224,114, 28,247, 2, 88,
+187,251,109,157,119,196,250,183,118,247,219, 58,111, 57,151,189, 62, 84, 86, 86,162,170,170, 10, 90,173, 22, 36, 73,162,184,184,
+216,236,254, 87,169, 84,168,174,174,118,104, 8, 96,239,138,207,145,114, 5, 80,228, 0,122, 53,240,211,124,137,217,253,127,254,
+ 2,112,241,222,105,112, 29, 44, 63, 69,225,109,248,251,120, 32,192,223, 3, 47,132,118, 68,246,157, 98,100, 22,148,162,101,128,
+ 15,180, 15,138,144,117, 43,171, 86, 46, 0, 38,229,215, 71,252, 58,250, 73,162,176,119,255, 46,200, 83,119, 97,219,178,185, 24,
+ 55,119, 17, 46,233,129,226,210, 34, 70,229,103, 57,214,255, 94,159,151, 17,221,169, 21,118,237, 61,142, 75,151,114,176,236,114,
+ 58,118, 12,249, 23,176,225, 12, 10, 10,138, 25, 89, 23,205, 53, 2, 24,117, 37,208,233,106, 34,171,131,155,181, 64,135,142, 29,
+ 37,149,162,154, 88, 12, 53,169, 2, 71,171,132, 72,201,197,131,123,245, 43, 0,244, 59,211,104, 52,208,104, 52, 66, 0, 58, 0,
+ 94, 26,141,198,219,122, 74, 96, 3,188, 0,226,212,212, 84,121,199,142, 29,241,246,219,111, 75, 74, 74, 74, 48,118,236, 88, 71,
+ 58,206,126,124, 62,191,218,211,211,211, 48,100,200,144,123,243,231,207,111, 26, 27, 27,155,253,215,133, 75, 35,118, 92,213,222,
+208,147,112,120, 61,214, 71,225,242,119, 37,249, 91, 91,255,180,194, 66,191, 51,166,177, 0,110,110,127,199,168, 44, 91,182,204,
+188,217,218, 7,204, 51,124,234,122, 55,124,211,198, 1,192, 83, 20,222,182,233, 78,167,219,219,133,243, 23,238, 76,156, 56, 49,
+198,145,246,214,255,165, 23, 48,184,111, 40,190,249,114, 41,126, 88,158,136,255,108, 61,142,105,175,246,196,253,223, 19,161, 40,
+175,100,210, 62,136,200,209,175, 65,175, 55, 92,208,235, 13, 6, 75, 5, 0, 0, 22, 45, 92,208, 16, 11,158,181,252,159, 32,108,
+141,253, 91, 43, 1,181, 20, 0, 14,135, 3, 69,181, 10, 92, 14, 1,131,193, 8,146,162, 96, 32,107,130, 72, 51, 46, 94,192,171,
+131,134,213,184,201, 40, 10, 92, 14, 23, 85, 42, 29, 12, 58,173,125,235,127,245,106,113,155,102,247,228, 65,254, 10,179,150,209,
+167,151,167, 41, 70,151, 0, 65, 80,232,222, 49, 75,190,106,245,106,198, 94, 0,218,186,175, 47, 24,208, 41,235,181,158,224, 26,
+ 71,224,231,231,135,226,226, 98, 8, 4, 2, 84, 85, 85, 33, 40, 40,200, 28, 20,168,209,104, 80, 81, 81,225,144, 2, 16,243,205,
+ 14,252, 52, 95, 2,159,214, 64,202, 21,224,163, 37,114,120,242,184, 24,251,241,183,200, 39,239, 35,126,217,167,224,114,152,203,
+163,173,255,240,240, 80, 4,181,109,141, 70, 65,129,224,115, 8, 24, 8, 10,197, 74, 53,202,171, 52, 78,149,223, 15,139,127,195,
+ 27, 29,219,192,219, 59, 0,238, 65, 77,161, 47, 43,199,133, 3,219, 81, 81,150,235, 84, 37,254,101,241,135,192,236,193,224, 25,
+116,104,173, 4,138,184,149,248,233,222, 95, 0,223,155,177,140,243,251,255,144,148,112,212,200,229,171,208,179,157, 4,157,254,
+229,137,108,191, 20,121, 80,208, 5,121,139,222,217, 80,112,170,160,165,212, 80,109, 37, 33,244,244, 98, 98,249, 91,118,240,244,
+ 44, 0,190,171, 26,238,225,195,135, 1, 0,209,209,209,146,184,184,184,148, 49, 99,198,152, 45, 70, 38,228, 31, 20, 20,116,104,
+253,250,245, 30, 50,153,140, 59,123,246,108,204,154, 53,139, 58,115,230, 76,111, 0, 73,106, 3, 58, 2,248,211,209,123,146, 74,
+253,234,116,251, 59, 27, 16,232, 74,242,183, 38,120, 75,133,133,162, 40,194, 20, 24,104,191, 93,228,231,159,161,191,111,219,182,
+205,188, 89, 31,163,225,239,239, 15,169, 84, 90, 87, 39,152, 15,160, 2, 0, 39,191,240, 62,206,158, 61,107, 30,243, 15, 15, 15,
+ 7, 80,179,252,246,206,125,137, 40,175,210,168, 0, 44,156, 15, 74, 29, 0, 0, 32, 0, 73, 68, 65, 84,146, 74,165, 70, 71,218,
+219,239,123,191,192,176,249, 51, 49, 98,196, 32, 4, 10,184,168, 34, 40, 36,101,230,225,236,149, 2,135,136,122,250,164,168,151,
+178,179,178,120,121,119,115, 64,111, 38,242, 7,107,181, 63,155,196,111,125,204, 22,106,197, 0, 8, 4, 2,220,186,118, 73,210,
+186,169,191, 92,228,198,131,209, 72,130, 32, 8, 16, 4, 16, 35,157, 1,138, 34, 97, 52,229, 3, 80,105, 52,184,158,153, 13, 62,
+223,110, 84, 55, 12,250, 50,116,239,116,199,178,199,192, 7,179,239, 96,207,214,246,230,170,213,179,203,109,252,145,209,209, 97,
+235,223, 22,241,171, 21,165, 0,224,148,245,111,171,161,165,197, 47, 6, 0,198,214, 63, 80, 51,207,191,113,227,198,208,106,181,
+120,240,224, 1,140, 70, 35, 2, 3, 3, 81, 90, 90,138,192,192, 64, 83,185, 50, 39,236,226,251, 89,248,252,107, 57, 20, 57,192,
+247,115,251,163,218, 96,196,156, 37, 9,248,113,126, 36,230, 46, 59, 0, 30, 65,192, 1,254,135,162,240, 54,154, 4,250,194, 13,
+110, 48,130,192,189, 59, 87,113,183, 72,129,144, 32,127,252,126,254, 12,174, 95,131,195,214,255,184,201,115,224,230, 15,112,184,
+192,166,196, 59,216,179,250, 19, 76, 94, 44,195,156, 81,221, 48, 99, 80, 43,135,202, 47, 73,169,196, 15,163, 39, 0, 21, 66,128,
+112, 3,126, 88,138,241,127,157,196,145, 65,211, 65,124, 59, 19,196, 31,159, 50,182, 48, 46,222, 11,192,203,106, 5,170, 69, 92,
+168,132, 66,132,140,115,131,150, 82, 67,193,113,131, 1,161,160,140, 42,232, 75,238,225,244, 10, 5,162, 39,134, 32, 69, 46,127,
+236,141, 54, 38, 38,134, 2,128,117,235,214,209,174,126, 98,246,236,154, 97,224,173, 91,183, 50,125,179,125,155, 54,109,122,248,
+219,111,191,245,184,117,235, 22,220,220,220,224,237,237,141, 75,151, 46,233, 1, 20, 55,228,254,234,155,147,239,140,119,192,149,
+228,111,109,253,215, 16,243,195,211, 7, 77,211, 3, 83,236,220,215,173,157, 59,119,246, 97, 58, 60, 39, 20, 10, 39,215,173, 52,
+ 73,171, 6, 14, 28,120, 7, 64,120,230,133, 51,176, 28,243,255, 96,242, 4, 28,110,219, 22, 9, 9, 9, 72, 79, 79,199,161,182,
+109,221, 39, 78,156,184,241,196,137, 19,140,219,219,155,131, 95,134, 15,233, 7, 21,220,176, 39,110, 38, 86, 31,184,136, 79, 94,
+235,135, 73,203,182, 97,252,162, 45,142, 90,224,196,162,133, 11,108, 37, 2,162, 44,148, 0,214,162,127,206, 80,203, 3,240,193,
+ 7, 31, 16, 21,247,178,112, 59,175, 20, 60, 55, 46, 12, 70, 18,122,131, 17,231,207,167,227,127,255,219, 8,157,145,130,222, 72,
+130,207,227,160,168,188, 26, 5,215,207, 74,102,205,154, 85,111,131, 90,189,122,181,184, 99,200,221,191,173,127, 83,189,218,179,
+ 53,180,166, 62,113, 40,128, 67,129,195, 33,209,187,219,117,249,106, 6, 94, 0, 91,214,191,229, 44, 0, 15,255,198, 14,145,191,
+ 45,235,223, 50,170,118,200,236,149, 14,145, 87, 77,167, 88,142,234,234,106,184,185,185,153,173,127,146, 36,205,159,142, 42, 0,
+ 91,226, 22,224,124,193, 9,120, 54,174, 9,250,243,226,113, 81,124, 63, 11,222, 2, 55, 84,148,229,131,203, 33,192,227, 48, 27,
+126,166,173,255, 22,254, 94,184,150,125, 7, 6,157, 14, 2, 30, 31,213,213, 26,252, 46, 63,131,158,146, 8,135,200,159, 46,191,
+215, 63,252, 10,241, 63,253, 8, 21, 9,180, 8,105,142, 43, 87,255,192,156, 81,221,156, 42, 63, 0,152, 19,210, 19,251,111, 29,
+ 7, 20, 6, 64, 24,136,163,105,215, 64,124, 59,147,238,152, 24, 23,222,137,165,217, 41,167,143,166, 1,186, 42, 84, 19, 85, 40,
+231, 84, 67,193,211, 67,111,172,132, 64,163,130,176,240, 14,118,196,222, 66,235,176, 80,212, 21, 0,104, 13,145, 72,100, 73, 2,
+ 16, 10,133, 54,207, 49,197,250,245,235,177,126,253,250, 6, 53,102, 47, 47,175,143,178,178,178, 60,188,189,189, 33, 18,137,224,
+239,239,143,226,226, 98, 16, 4,161,114,101,167, 65, 91,252,145,145,145, 20, 80, 19, 16,232, 72, 80,160,171,201,255,229,151, 95,
+ 22,219, 11,168,101, 26, 11,224,225,225, 17,195,227,241,110, 91, 31, 95,182,108, 89, 45,203, 31, 0, 90,181,106,133,193,131, 7,
+111,178,103,255,228, 23,222,175, 21,237,255,249,255,205,134,128,199, 71,112,112, 48,232,152, 0,211,121, 15, 71,218,219, 20,241,
+139,152,181,244, 71, 84, 61, 40, 66,144,119, 35, 92,189,150,139, 73,203,182, 57,220, 62,172, 8,159,176,250,189,165, 28,214, 19,
+240, 12,224,226,197,139,245, 38, 3,170,211, 3, 0, 0,243,230,205, 75,249,126, 41, 33,161,168,209,242,214, 77, 3,224,229, 46,
+ 64,167, 46, 97,232,212,185, 27,120, 28,160, 90,109, 68,238,189, 50,164,165, 28,148,120,122,184,219,253, 3,165, 74,133,208, 86,
+247,160,209, 10, 77, 89, 91,106,170,145, 72,168, 1, 69, 1,101, 21, 2,128, 0,188, 60, 12,232, 26,154,131,147,231,236,103,177,
+179,180,254, 45, 45,126,145, 79, 0,220, 40, 61, 96,248,187,191, 51,242,236,223,163,165,245,111,105,241,211,199,178,174, 94, 48,
+ 95,203, 36,203,158,165, 18, 0, 0,141, 27,215, 40, 35,101,101,101,240,246,246, 54,187,255, 29, 81, 0,104, 37, 0,248, 22,211,
+ 35, 7, 2, 63,157,196,234,127, 71, 96,252,220, 31,177,109,241, 12,240, 8, 2,124, 1,179, 25, 59,180,245,127, 45,183, 8,237,
+ 90, 4, 98,195,207, 59,208,186,117,107,248, 52, 13, 65,183,166, 33,208,107,255,118,255,187, 49,144, 73, 91,255, 95, 79, 30,132,
+143, 22,110, 66,139,182, 68,131,202,143,182,254,135,238,253, 5, 71,162,163, 64, 52,239, 13,160, 38, 43, 32, 0,220, 81, 42,205,
+ 74, 98, 38,152, 37,240, 89, 53,233, 54, 49,112, 30, 37, 14, 25, 91, 37,111,221,190, 11, 42, 69,192, 29,220, 69, 85, 78, 49,138,
+ 23, 25, 81, 93,222, 28, 55, 78,103, 50,126, 33, 36, 73, 18, 34,145,136, 82,171,213,176,176, 60, 41,145, 72, 4,146, 36,137, 39,
+209, 89, 86, 85, 85,125, 63, 99,198,140,209,235,215,175, 23,250,248,248, 64, 46,151, 99,249,242,229,149, 58,157,238, 53, 87,254,
+ 15,109,241,211,211,229, 28, 13, 4, 76, 72, 72, 32, 76, 73,126, 26, 76,254, 0, 96, 65,236,118,203,220, 94,134, 65,169, 84,170,
+147,201,100,189,119,237,218,117, 73,169, 84, 54,209,235,107,166,153, 90,147,127,167, 78,157,208,187,119,239,145, 82,169,212,222,
+127,242, 20,133,183,241,205, 23,159,227,215,253,135, 48,172, 95, 15, 28, 75,254,163,198,128,105, 26, 2,159,166, 33, 8,207,206,
+198,107,227,222, 46,201, 45, 85, 13, 5,176,155,169,245, 63,107,221,126,196,190, 63, 20, 77, 27,139,205,202,133,117, 57, 52, 48,
+155, 34,235, 9,120,142,148, 2, 70, 10, 0, 0,124, 50,111,110,202,247,223,147,146, 59,205, 95, 64,219,246, 29,229,222, 30, 34,
+144, 20,160,214,234,144,157,157,141,226,236,139, 18, 47, 79, 15, 76,159, 62,221,110,195, 21, 9,133,216,117,120,160,132,142,128,
+175,215, 29,193,225,192,195,131,185,245, 68, 79, 1,244,240,111, 12,210,168,175, 33,127, 19,244,132,155,221, 20,187,214,160,167,
+212, 12,153,189,178, 22,105, 57, 67,254,150, 74,128,101,226,159,178,178, 50,251, 47,192,142, 18,176,197, 98,150,240,250, 69, 31,
+252,189,163,175,134, 39, 67, 57, 45,252,189,176,235,220, 69, 92,185,113, 19, 61, 37, 17,181, 72,223, 17,242,167,241,250,135, 95,
+ 97, 79, 15, 15,124, 56,166,131, 75,202,111, 78, 72, 79,204,221,183, 11,196, 55, 11,113, 40,248,101, 44,175,190, 82,235,252, 88,
+ 31, 95, 44, 86, 84, 56, 68, 28, 39,150,102,167,248,241,134, 32,191,252, 54,138, 75,239,225, 65,166, 39,184, 70,111,244,125,177,
+ 63,118,156,222,241, 68, 59, 53, 23,101,251, 59,183,113,227,198, 33, 4, 65, 28,253,241,199, 31,133,111,188,241, 70,165, 74,165,
+ 26, 10, 39,198,252,235,131, 43,166, 0, 74,165,126, 46, 33,127, 27, 86,170, 61,229,131,193,189, 73, 75,100, 50, 89, 72, 85, 85,
+213, 55,233,233,233,179, 11, 10, 10,160, 84, 42,193,231,243,209,164, 73, 19, 4, 5, 5,189, 33,147,201,126,223,178,133,209,146,
+ 0,215, 1,132,183,240,247,194, 43,175,188,130,139,183, 10, 16,216,166,115,173,246,246,218,184,183, 85, 0, 86,124, 19, 59,123,
+ 55,211,231,152, 34,126, 17, 67,146,255, 68,244,194,255, 97,192,128, 1, 8, 14, 14,182,169,104,185,240,181, 19, 78,144, 63, 85,
+207,113, 86,137,120, 2,164,207, 40, 21, 48, 0,124,242,201, 39, 41,171, 86,173, 18,159, 79,201,148, 0, 53,145,180, 20, 69, 65,
+ 32, 16,224,211, 79,230, 49,110,180, 31, 58,152,230,151, 41,104, 87, 63,215,160, 2, 12, 42,115, 4, 60, 77,252,142,206,197,162,
+ 93,253, 89, 87, 47, 32,235,234, 5, 4, 5, 5,161,184,184,216, 41,226,247, 9,106, 10, 29,131,224, 72,166,136,254,106, 11,206,
+156,116, 93, 49,230,228,228,152, 87,251,211,107, 53, 15,145,191, 35,196, 79,227, 95, 61, 60, 92, 86,126, 0, 64,196,125,106, 38,
+126,154,252,239, 40,149,146,177, 62,190, 72, 2, 82, 22, 43, 42,156,122,246,223, 22, 31,181,232,120,212, 0,128, 29, 87,153, 39,
+236,161, 40,138, 16, 8, 4,102, 47, 0,253, 29, 0, 4, 2, 1, 97,235,251, 99,198,169, 95,126,249,101,192,238,221,187,231, 84,
+ 86, 86,198, 1, 72,115,245, 31,184, 98,234,159,139,201,201,229,144, 74,165,106, 0,115, 76, 91,131,222,199,229,203,151,251, 2,
+104, 19,216,166,179, 74,175,213,184,155,218, 91, 37, 0, 5,128,235, 45, 3,220,223,148, 74,165, 14, 85,232, 33,159,175,127, 92,
+196,239,148,162,229,228,245, 44, 92,128,176,176, 48, 70,228,111,215, 0,109,232, 74,125,143, 2,244,216, 62, 77,252,104, 32,241,
+211, 99,211,138,162,124, 40,138,242, 17, 20, 20,212, 32,139, 31, 0, 12, 70,210, 97,239, 67,125, 40, 42, 83, 56,125, 47,214,160,
+199,246, 93, 69,252,143,160,252, 8, 0, 24,230,225, 65, 89, 90,253,221,121,110, 13, 34,254,127, 24,254,170,172,172,140, 98,139,
+225,201,227,196,137, 19, 50,153, 76,246,191,220, 82,149, 74,175,213, 88,142, 71,122,183, 12,112,247,115, 98,245, 63, 2,168, 25,
+202,120,214,148, 42, 22,143, 87, 9, 96, 84,153,156, 93, 71,152, 5, 11, 22, 44, 88,176, 96,241,236,130,195, 22, 1, 11, 22, 44,
+ 88,176, 96,193, 42, 0, 44, 88,176, 96,193,130, 5, 11, 86, 1, 96,193,130, 5, 11, 22, 44, 88,176, 10, 0, 11, 22, 44, 88,176,
+ 96,193,226,185, 64,173, 89, 0, 23, 47, 94,116, 58,138,212, 86, 48, 33, 43,143,149,231, 42,121,166,181,213, 57, 0, 72, 91,201,
+ 87,216,242,171, 91, 94, 88, 88, 24, 93,118,244, 92,110,234,226,197,139, 36, 91,126,172,188,103, 73, 94,120,120, 56, 47, 61, 61,
+221, 0, 0,189,122,245,162,218,183,111,143,248,248,120,130, 45, 63,219,242, 28, 86, 0,158, 19, 52, 40,201, 68,100,100,164, 24,
+128,101,202, 80, 73, 66, 66, 66, 10,171, 43, 62, 25,124,247,221,119,239, 92,190,124,185,219,217,179,103,231, 10, 4, 2,168, 84,
+170, 79,101, 50,217, 82, 6, 25,216, 88,252,221,177, 80, 0,140,108, 73, 60,221,136,136,136, 16, 31, 60,120, 48,197,201,223, 74,
+ 18, 19, 19,143,187, 40,161, 20, 34, 34, 34,222, 76, 76, 76,220,177,118,237, 90,127, 0, 85, 0,140, 79,186,205,209,228, 31, 29,
+ 29, 77,109,221,186, 21, 61,123,246,100, 43, 77, 3,241, 92, 13, 1,152,200,187, 65,191,223,181,107,151,117,190,112,121, 67,228,
+ 70, 70, 70,138, 77,115,118,169,200,200, 72,202, 81, 89,148,131,176, 53, 63,184,129,242,196, 79,226, 93,202,100, 50, 98,230,204,
+153, 75,175, 94,189,250, 83,171, 86,173,230, 10,133, 66,104,181, 90, 0,248,110,207,158, 61,228,152, 49, 99, 36, 79,168,201, 80,
+142,111,143, 83, 94,157,107,176, 91,174,197,238,212,250,236,145,145,145, 98,138,162, 40,234, 63,182,101,211,231,236,213, 65, 91,
+200,201,201,161,114,114,114, 92, 70, 48,101,101,131,107,173, 87,224,106,162, 38, 8,194, 33,185, 36, 73, 81, 70, 35, 69,145,164,
+237, 45, 34, 34, 66,156,152,152,232,212, 42, 84,235,214,173,123,245,208,161, 67,199, 7, 14, 28, 8,130, 32,168,237,219,183, 15,
+118,244,222,172,183, 67,135, 14,237,120,171, 15, 31,210,105,210,178,219,158,217,187,167, 78,141, 33,233,115,246,228, 41,149, 74,
+ 74,169, 84,214, 91, 15,233,107,156,125, 63, 55,206, 73,144,188, 46, 3,225,225,225,172, 33,192,220, 16,120, 40, 65, 16,207, 78,
+131,183,153, 55,219, 94, 62,237, 39,136, 6, 45,227,182,107,215, 46,249,132, 9, 19, 0,212, 36,213,176,168,156,114,103,188, 10,
+180, 66, 65,231,252, 55,165, 33,149, 71, 70, 70, 58,230, 85, 72,240,119,224, 95,237,183,125,229,168, 15,152,139,115,124, 93,155,
+186, 26, 36,227,242,147,201,100,132, 66,161,216,217,165, 75,151,113, 0, 56, 20, 69, 65, 36, 18,161,168,168, 8, 21, 21, 21,240,
+241,241, 65, 81, 81,209,241, 49, 99,198, 72,246,238,221,155,226,224, 59,161,232,116,176, 4, 65, 96,220,184,113, 24, 60,120,176,
+100,218,180,105,140,229,236,219,247,155,249,251,232,209,111,216,221,183, 7,245,153, 15,255, 46,238, 62, 43,107,237, 91, 31, 19,
+245,177,191,168, 18,189,156,176, 37, 82, 83, 83,177,104,209,162,135,222, 69,255,254,253,169,147, 39, 79, 50,170,203, 9, 9, 9,
+114, 44, 36,232,253,135, 19,207, 44, 36, 26,220, 25, 63,197,125, 75, 45, 75, 91, 38,147, 73, 98, 98, 98, 48, 96,192, 0,234,212,
+169, 83,140,126,123,166,142,156,140,123, 19,230, 34, 49, 49, 81, 78, 47, 18, 54, 96,192, 0,170,178,178,178, 62,194, 23,199,196,
+196,152,235,235,239,191,255,238, 78, 16, 4,162,162,162, 30, 0, 8,158, 56,113,226, 81,153, 76,198,113,196, 98, 95,122,116,169,
+249,251,253,164,123, 32, 8, 2,219, 62,118, 7, 64,224,251,183,191,123, 61, 48, 48, 16, 0,176,125,243, 54,198,101, 21, 30, 30,
+142,182,109,219,186,164,220,195,195,195, 57,233,233,233,100,175, 94,189,168,173, 91,183,226, 65,102,107,160,196,143,101,117, 7,
+200,223, 81, 15, 0,149,144,144,240,144,134,101,209,129, 82, 78, 52,110,151, 90,147,214,242, 18, 18, 18, 44, 23,196,112, 24, 4,
+ 65, 16, 9, 9, 9, 4,221, 1,153, 62,157,182, 52,105,242, 55,221, 19, 97,113,111, 14, 43, 42,196,132,114,243,198,228,184, 61,
+120, 30, 88, 99,222,152, 28,119,132,252, 41,138, 2,189, 58, 27, 69, 57, 86, 77,100, 50, 25,167,188,188,252,127, 62, 62, 62,227,
+ 0,112, 38, 79,158,140,232,232,104,240,249,124,136, 68, 34, 8,133, 66, 16, 4, 1, 46,151, 11,133, 66,193,184, 28,135, 12, 25,
+ 34, 6, 64,237,222,189, 27,244, 59,161, 40, 10,123,246,236,193,180,105,211,228,166,243, 79, 29,108, 41, 4, 79,194,179,150,144,
+144, 32, 7, 64,188,121, 99, 2, 38, 92,183,217,198,168, 9,215, 35, 37,196,151, 78,181, 59,234,147, 79, 62, 65,155, 54,109, 92,
+114,191, 4, 65, 80, 82,169, 31, 2, 2,142,185,180, 28,134, 15, 31, 62, 40, 57, 57,249, 56, 69, 81, 68, 76, 76, 76,138, 35,228,
+ 95, 23,246, 38,204, 69, 92, 92, 28, 72,146,196,220,185,115, 25, 41, 20,150,228, 15, 0,135, 14, 29,218, 63, 96,192, 0, 0,240,
+139,138,138, 50, 12, 28, 56, 16, 82,169,148, 52,197,205, 48,241, 50,214,218, 95,190,124, 57,222,124,165,198, 54,220,246,177, 8,
+111,245,225,227,211, 97,159, 48,126, 38, 15, 15, 15, 12, 24, 48, 0,233,233,233,230,254,212,122,163,175, 97,170,236,165,167,167,
+147, 64,205, 50,235, 0,224,237, 94,194,178,122, 3,201,191, 94, 5,128, 38,171,244,244,116,115,218, 73, 75,235,201, 81,162,181,
+232, 68, 92,221, 41, 89, 43, 3, 46,117, 13,219, 24, 18,112, 24,150, 10,133,201,250,127, 30,235, 25,101,217,153, 20, 20, 20,152,
+ 79,228,231,231, 51, 86, 24, 21, 10,197,183, 42,149,234,109, 14,135,195,153, 56,113, 34, 20, 10, 5, 10, 11, 11,225,230,230, 6,
+ 30,143, 7, 30,143, 7, 55, 55, 55,136, 68, 34,168,213,106, 48,113, 33,174, 93,187, 86,124,244,232, 81, 57, 65, 16, 24, 63,126,
+ 60, 40,138,162,149, 60, 98,252,248,241, 0,128,228,228,100, 57,219, 85,212, 79,254,166,247, 43,177, 84,146,233,119,111,233,213,
+114,198,130, 79, 72, 72, 32, 76,239, 5,107,215,174,117,137, 50,182, 96,193, 2,218, 40,104,176,103, 98,216,176, 97, 67,206,157,
+ 59,151,220,186,117,107,180,107,215,142,234,219,183,175,217,115, 98, 90,253,209, 41,242, 95,182,108, 25, 8,130, 0,135,195,193,
+185,115,231,192,196, 27, 99,229,145,120,157, 32, 8,188,245,214, 91, 6,211, 33, 93, 84, 84, 84,165, 88, 44,198,180,105,211,200,
+ 17, 35, 70,216,125,118,203, 85, 73,239, 39,221, 3, 8, 32,254,163,191,179, 22,111,251,216, 29, 81,125, 5,152,255,218,167,140,
+239,139,137,229,207,228,154,232,232,104, 42, 60, 60,220,188,157, 59,119, 14,213,185,225,128, 78, 13,194,211,128,228,175,175,195,
+242, 60,189,177, 45,183, 54,249,199,204, 95,108,243, 60,175,190, 6, 25, 30, 30, 78,165,167,167,131,246, 4,208,196, 21, 30, 30,
+238, 80, 35,127,212,228,111,105, 85, 63,237, 1,123,150, 67, 2,207,157, 6, 64, 81, 40, 40, 40,192,253,251,247,205,199,172,247,
+237, 88,255,220,195,135, 15,143, 8, 13, 13, 5,151,203, 69, 86, 86, 22, 40,138,194,205,155, 55,161,211,233, 64, 16, 4,120, 60,
+ 30, 8,130,128,209,104,132, 74,165,194,222,189,123,237,202, 61,118,236,152, 28, 0,198,143, 31,255, 80,189,165,135,122,104,162,
+ 96, 82,175,173,221,250,246,246,153, 88,249, 52,234, 26, 14, 96,226,250,183, 70,106,106, 42, 76,150, 97,195, 20,224,133, 4,136,
+ 47,107, 20, 56, 75,229,149,162, 40, 96, 33,129, 9,215, 35,157, 14,148, 37, 8,130, 50,189, 23, 51, 25,153,222, 23,209, 16,121,
+237,219,183,127,136,220,156,133, 64, 32,160,174, 94,189,138,226,226, 98,162,184,184, 24, 97, 97, 97, 84, 78, 78, 14,184, 92, 46,
+ 12, 6,131, 83,127, 48,176, 47,151, 86, 30, 48,111,222, 60, 44, 95,190, 28, 39, 79,158, 4, 65, 16, 24, 53,122, 42,238,230, 48,
+ 91,192,241,208,161, 67,191,153,222,177, 6, 0,105,218, 16, 21, 21, 85, 1,192, 55, 49, 49, 17, 17, 17, 17, 98, 75,133,188, 62,
+212, 88,255, 15,175, 99, 82, 51, 28, 0,108,223,118,193, 33,121, 13,197,141, 27, 55,112,238,220,185, 90,199,140, 21,119, 96,208,
+147, 0, 81, 5,223,215,244, 56,103,181,216, 53, 27, 28,200,140,252,235,245, 0,152,172,127,194,210, 19, 64, 91,254,233,233,233,
+ 13, 33,127,123, 1, 74, 78,201,179,240, 76,136,225, 68,128,211, 35,176,156, 40,139,206,199,124, 63,244, 49, 87, 5, 39, 81,187,
+252,204,155, 43, 80, 61,114,186,121,115,192,242,167,232,206,182,121,243,230,232,217,179,167,185, 17,210,251,214,215,214, 1, 95,
+127,127,255, 46, 90,173, 22,101,101,101, 56,115,230, 12,210,210,210, 80, 92, 92, 12,181, 90, 13,122,140,148,162, 40,232,245,122,
+104,181, 90, 70, 67, 12,116,221,168,139,220, 19, 18, 18, 8,130, 32,192,212, 51,179,111,223,111,230,141,201,190, 61,168,207,124,
+ 88,139,232,233,205,114,223,242, 26,166, 24, 48, 96, 0, 82, 83, 83, 27, 86, 33, 44,198,252, 81, 51,140, 37, 49,145, 51, 65,159,
+ 67, 3, 99,111, 44,223, 11,237, 5,112, 21, 92,225, 5,104,214,172, 25,242,243,243, 9,107,101,215, 89,242,223,155, 48,215, 92,
+135,105,244,235,215, 15, 0,112,226, 52,243,201, 26, 17, 17, 17,195, 76, 99,255,215, 0,168, 76,253, 57,189,153,181,110,166,193,
+133,181,199,254,109, 40, 87, 14,202,115, 5,210,211,211,137,158, 61,123,162,234,218,112,148,159,105,130,138, 83, 34, 80,229, 21,
+ 64, 53,192, 81, 25, 80,121,146, 3,245,159,124, 84,156,105,132,195,219,134,160,103,207,158, 14,241,211, 63, 29, 60, 38,141,147,
+246, 4, 56,106,249,207,159, 63,159, 90,178,100,137,203,110,214,158, 60, 83, 39,229,178,202,201,116, 12,173, 62,210,177,144, 85,
+ 45,149, 74, 61,235, 58,239, 44, 44,199,254, 93,161, 4, 88,142,253, 51, 85, 2,162,163,163,225,225,225, 1, 79, 79, 79,120,121,
+121,193,199,199,135,244,243,243,227, 36, 38, 38,226,157,119,222, 49, 95, 39, 20, 10, 49,116,232, 80,212,163, 4, 4,232,116, 58,
+148,149,149, 65,163,209,192,199,199, 7, 2,129, 0, 6,131, 1, 20, 69,193,104, 52, 66,167,211, 65,175,215,195,104, 52, 58, 20,
+ 95, 96, 10, 90,171,243,188,165, 21,250, 36, 97, 47, 32,208, 81, 52, 84, 9, 32,190,172,123,184,111,194,245, 72, 19,185, 58, 41,
+219,202,250,183, 56,142,241,227,199, 59, 28, 12,104,109,253, 91,202,115, 22,225,225,225,148,209,104, 68, 88, 88, 24,117,241,226,
+ 69, 34, 44, 44,140,210,235,245, 80, 40, 20, 13, 33,181,154,206,151,199,195,236,217,179,113,238,220, 57,252, 61,238,207,188, 78,
+ 31, 62,124,248,112,255,254,253, 1,192,203, 68,250, 42, 0,216,177, 99, 71,163, 19, 39, 78,120,155,218, 7, 97,250,180, 43,120,
+249,143,203,241, 86,239,135,173,255,232,159, 84,216,113, 70, 15,138,162,208,125, 98,119, 92,216,118,129,120,156,198, 85,122,122,
+ 58, 33,249, 87, 56,117,120,121, 43,240,170, 43, 1, 67,205, 95,147, 0,248, 60,160,224,190, 47,142,231,134, 27,215,109, 47,230,
+166,167,167, 19,225,225,225, 66, 58, 86,128,181,254, 23,215,123,157,221,105,128,145,145,145, 20, 93, 97, 45,227, 1,152, 96,201,
+146, 37,180,197,224, 18, 48,144,231,244,248,186,105,138, 94,173, 45, 57, 57,153,164,103, 5, 52,212, 98,143,137,137,241,124,158,
+ 43,220,186,117,235,176,108,217,178, 90,245,138, 38,255,209,163, 71, 99,244,232,209, 53, 22,206,137, 19,245,137,241,207,206,206,
+214, 24,141, 70,148,151,151,163,164,164, 4,229,229,229, 80,169, 84, 80,169, 84,168,174,174, 70,101,101, 37, 20, 10, 5,212,106,
+ 53,180, 90, 45,152, 52,116,130, 32,176,123,247,110,135, 20,182,103, 25,169,169,169,181, 54, 75,204,158, 61, 91,108,185,207,100,
+204,217,198,152,127, 45,203,189, 33, 81,251,182,126, 75, 81, 20,177,123,247,110,151,198, 2,236,222,189,219,225, 54,220,163, 71,
+ 15,202,104, 52,154, 19,180,132,133,133, 81, 36, 73,226,193,131, 7, 80, 42,149, 78, 61,243,191,231, 15,196,137, 19, 39, 64,238,
+244, 5, 69, 81,136,139,139, 51,191,163,212, 51, 36,152,142,124, 68, 68, 68,188, 1, 0, 81, 81, 81, 5, 38, 5, 64,187,125,123,
+124,163,233,211,167, 55, 58,113,226, 4,134, 15, 31, 62,196,145,156, 0,247,147,238,129, 0,129,120, 11,235,127,226,143, 42,112,
+223, 82, 96,251, 25, 29,102,205,154,133, 37,135,191,123,236,117, 57, 60, 60,156, 75, 43, 1,175,205, 50,128, 82,251, 0,149, 0,
+ 42, 1,110, 21, 80,249, 0, 56,116,161, 9, 44,200,159,151,158,158,174, 97,201,223, 62,249,219,245, 0, 88,143,251, 91,198, 3,
+ 48,117,179, 36, 36, 36,164,152, 2,132,228, 86,158, 36,103, 59,140,135,228,209,195, 2,166,113, 72,151,184,127, 6, 15, 30,124,
+ 37, 57, 57,185,203,211,248,130,105,171,223, 85,110,127,218,234,119,192,237, 95, 11,241,241,241,230,239,255,253,239,127,177,113,
+227, 70, 0,208, 1,224,211,196, 15, 0, 67,135, 14,181,167, 0,168, 67, 67, 67,161, 82,169,160,211,233, 80, 92, 92, 12,129, 64,
+ 0, 30,143,103,246, 0, 40,149, 74,168, 84, 42,104,181, 90, 40, 20, 10,140, 27, 55, 78,178,103,207,158,122,239,143,182, 50,237,
+ 76,107,197,248,241,227,237, 42, 10, 53, 10,205,163,139, 1,112,230,188, 53, 44,166,251, 61,132,184,184, 56,249,236,217,179, 37,
+113,113,113, 41, 79,180, 14,215, 97,253, 91,194,145, 88,128,186,172,127,103,209,163, 71, 15,234,252,249,243, 68, 88, 88,216, 23,
+116,213, 54, 26,141, 11, 61, 60, 60, 80, 82, 82,226, 84, 31,243,249,103, 3,145,146,146, 2, 98,119, 0, 0,224,200,231, 94, 24,
+250,117, 21, 6, 12, 24,128,111,150,156, 0, 69, 81,140,189, 21,135, 14, 29,218, 59,112,224, 64, 0, 40,222,177, 99, 91,179, 19,
+ 39, 78,250, 82, 4,133, 17,195, 71,140, 62,120,240,224,254,131, 7, 15, 58,228,229, 92,190,124, 57,222,234,227, 86,219,226, 7,
+133,217,179,102, 35,120,104, 99, 60,169,184,165,244,244,244, 90, 26, 62, 85, 5, 8,116, 0, 73, 17, 48, 24, 41, 8, 40, 32, 88,
+196,177,188,222, 0, 22, 53, 70,217,146,207,234, 84, 16,194,194,194,234, 87, 0, 44, 35,254, 77,228,111, 14,150,162, 61, 1, 76,
+ 53,127, 27,164,221, 32,216,144,231,242, 49,169,152,152,152, 46,201,201,201,174,236,240,158,215,122, 70,160, 38, 10,220,108, 73,
+191,247,222,123, 0,192,183,168, 75,230,115,166, 78,171, 46, 92,237,221,187,247, 59, 41, 41, 41, 9, 70,163, 17,149,149,149,208,
+235,245,230,113,127,141, 70, 99,158, 98, 72, 7, 6,238,217,179, 39,133, 65,125, 33, 96,154, 2,104, 93,111, 35, 35, 35, 41,154,
+244, 7, 15, 30, 44, 97,162, 0, 60,170, 60, 0,150, 99,255,150,228,111, 61, 44,192,224,125,212, 7, 42, 46, 46, 78,254,230,155,
+111, 98,231,206,157,206,122,203,196,150,158, 19,122,159, 14, 24,156,112, 61,146,186,117,235, 86,157,191,167, 19,254, 28, 62,124,
+184, 78,143,221,157, 59,119, 24,123,102,202,202, 6, 83, 0, 48,100, 72, 54,178,179,179,109, 70,151,151,150, 14, 2, 80, 14,192,
+126,191,213,169, 83, 39,234,252,249,243,132,169,179,252, 2, 0, 56, 28,206,194,187,119,239,162,188,188,220,169,134,204,225, 16,
+ 53, 10, 59, 77,254,151, 12,216, 40,215, 1, 0,190, 89,114,194,225, 62,130,110, 19,211,167, 79, 15,163, 40, 10, 17, 35, 35,198,
+ 29,216,127,224, 87,166,196,111, 41,234,141, 49,175, 95, 35, 8,162, 19, 69, 1,220,183, 20,160, 40, 10,179,231,204, 70,227,161,
+ 77, 26,152, 87,181,102, 90, 47, 93,239, 26,146, 73, 48, 60, 60,156,218,245, 89, 83,120,150,222,193,237,202,230,104, 35, 40, 6,
+ 60,130,193, 83, 62,128,183,178, 20, 64, 35,179,199,192, 90,105, 96,225,132, 7,192,114,186,159,213, 52, 54, 42, 33, 33,193, 97,
+151,169, 5,105,187,228,198, 45,229,209,243,255,159,211,233,117,207, 4,172,202,190,214, 20,177, 58,206, 61,212, 25, 72,165, 82,
+131, 76, 38,219, 51,112,224,192,153,137,137,137, 43, 12, 6, 3, 42, 42, 42,204, 49, 0, 0, 80, 92, 92,140,138,138, 10, 80, 20,
+ 5, 71,234,211,144, 33, 67, 36, 71,143, 30,149, 39, 36, 36,212,178, 62,233,223, 15, 25, 50,196,161,100, 64,143, 2,234, 51, 31,
+ 58, 67,248, 15, 17,188,157, 46,155, 32, 8,130,114,134,252, 77,158,182, 20, 91,109, 17, 0, 44,130, 2, 25, 97,218,180,105,114,
+ 6,255, 73, 57, 48, 87,188,214,103,109, 34, 98,150, 28,175, 77,155, 54,212,181,107,215,104,151,255, 23, 0, 22,106,181, 90,220,
+190,125, 27, 10,133,194, 89, 42,164,200,157,126, 56,114,169,198, 56,221, 36,215, 97,199, 25, 29, 40,138,194,201,179,206,143, 44,
+166,166,166, 98,248,240,225,146,131, 7, 15,166, 28,216,127,192, 89, 49, 28,146, 36,221, 0, 96,231, 89, 61,102,205,154,133,198,
+195,154, 48, 87, 39,109, 64,169, 84, 2, 0,178,179,179,169,117,235,214,153, 21, 50,203, 88,146, 77,155, 54, 89,246, 15,140,254,
+165, 21, 71, 9, 4,133,225,157,245, 10, 0,193, 53,101, 48, 35, 16, 45,121,121,248,122,112, 17, 54,183,127,139,218,177, 99,199,
+ 63, 62, 0,144,182,238,109, 89,254,214,231,235, 27, 2, 32, 76, 67, 0, 15, 77,155,114,100, 8,192,102, 71,225, 58,210,177,148,
+231,210,249,255,244,216,191,179,176,167,144, 56,170,176,212,229,238,119,118, 24,160, 46,119,191,147,195, 0,150, 65, 65,132, 3,
+231, 96, 67, 9,160, 0,172,148,201,100,107,227,227,227,245,124, 62, 31, 90,173, 22, 6,131, 1, 36, 73,194,215,215, 23,229,229,
+229,112, 52,155,226,209,163, 71, 83, 80, 51,239,159,218,189,123, 55, 76,138,128,121,106,224,209,163, 71,255, 17,157,195,155,111,
+190, 73, 41,149, 74, 28, 56,112,192,209,250, 44,182, 83,222,212,132,235,145, 18, 38,222,184, 79, 62,249,228, 33,227,194, 26,159,
+126,250, 41,197, 52,200, 83, 42,245,179, 43, 79, 42,245, 99, 36, 76, 36, 18,209,157, 36, 69, 81, 20, 84, 42, 21, 10, 11, 11,157,
+ 30,243,183,196,176,175,171,106,237, 55,132,252,141, 70, 35, 1, 0, 78, 88,252,214, 32,247,253,190,191,189,101, 38, 64, 87,161,
+ 62,133,204, 66, 1, 96,100,253, 75,199,135, 20,254,146,137,166,178,221,183,107, 69,249, 15, 88, 21, 78, 29,159,246, 2,110, 61,
+ 16,161, 62,175, 19, 11, 7, 61, 0,166, 23, 71, 56,114,252, 9, 91,160, 41, 79,217,253, 16, 14, 88,204,118, 20,145,193, 46,187,
+175, 9, 19, 38, 72,156, 72,239, 91,175,133,102,195, 2,173,207, 58,101, 20, 52, 38,149, 74, 13, 0,136,113,227,198,137,115,115,
+115,229,106,181, 26, 70,163, 17,157, 58,117,146,244,236,217,211,233,247,189,123,247,110,203, 41,103, 78,121,141, 30,117, 12,128,
+189,125, 38,250,162, 41, 58,188, 54,225,156, 60,233,176,219,223, 52,215,159,154,112,253, 97, 5,142,162, 40,138,206, 17, 96,161,
+144,153, 3,230,156,109, 27, 0,176,107,215, 46,194, 85,109,141,233, 53, 0, 80, 86, 86,134, 54,109,218, 80,149,149,149,104,213,
+170, 21, 50, 50, 50, 92,210,215,113,222, 44, 7, 65, 16, 24,253,122, 12,237,134,193,210, 37,211,204,223, 29,205,152,233, 42, 72,
+165, 82,114,237,137,181, 46,149, 57,105,210, 36,147,215, 69,230, 9,192, 96,218, 40,169, 84, 74, 90, 92,227,208, 3,203,118,223,
+110,106,201, 61,180,171, 63, 61, 61,157,144, 30,123,139, 98,201,255, 17, 40, 0,207, 16, 26,220, 72,159,214,252,227,174,190,175,
+ 71,224,133,121,164,229,102, 26,227, 55,255,199,245,235,215,159,240, 27, 33,137,167, 91, 94, 77, 89, 57,154, 81,174, 78, 44,172,
+181,142, 5,101,235,156,201,242, 78,121, 30, 58,146,251,247,239,155,223, 71,118,118,182,203,222,137, 76,182,150,146, 74,167, 17,
+191,255, 38, 99,244, 3,103,151,119,117, 6,166,105,125, 46,239, 19,234, 83,174, 29,236, 55, 60, 80, 19, 83,164,183, 48, 66,205,
+227,252,172,219, 31, 76,235,212,195, 21,243,113, 86, 52, 22, 44, 88,176, 96,193,130,197,211, 1, 14, 91, 4, 44, 88,176, 96,193,
+130, 5,171, 0,176, 96,193,130, 5, 11, 22, 44, 88, 5,128, 5, 11, 22, 44, 88,176, 96,193, 42, 0, 44, 88,176, 96,193,130, 5,
+139,231, 2,181,102, 1,208, 57,175,157,129,173, 96, 66, 86, 30, 43,143,149,247,248,228,197,198,198,214,214,238, 57, 28,115,118,
+ 57,203,169,102,116, 54, 69,203,169,103,182,210, 7,123,122,122, 66, 40, 20,154,127,207,225,112,192,229,114, 31,146, 71, 47,204,
+ 68,146, 53,179,188,234, 90, 44,135,125,191,117, 67, 38, 91, 39,230,242, 4,160, 72, 3,166, 78,125, 63,197, 25,121,107,215,174,
+149,100,100,100,240,194,194,194,146,173,179,238, 57, 41, 79,156,145,145,129, 53,107,214,164,176,237,237,217,147,231,176, 2,240,
+ 79, 68, 96,224,251,181, 10,174,164,100, 3,241, 84,201,123, 63,144, 2,128,146, 13, 37,132,229,247, 6,136,108, 96,114,207, 71,
+ 46,239, 31,139,245, 43,150,137,139,175,156,193, 0,191, 98,121, 51, 67, 30, 50,169, 54, 56,167,244,151,120,135,190,140,153,115,
+230,165,216,251,253,169, 83,167,208,175, 95, 63, 51,241,211,132, 77, 16,196, 67,132, 77,146,164,121,187,123,247,174, 77,121,231,
+207,159, 71,120,120, 56, 68, 34, 17,120, 60, 30,184, 92,110, 45,153, 52,233, 27,141, 70,243,166,213,106,145,158,158,142,118,237,
+218, 61,119,239, 71, 38,147, 17, 82,169,148, 90,187,118,173,248,230,205,155,184,117,235,150,220,215,215, 23, 91,183,110,109, 80,
+253, 95,183,110,189, 88, 32,244,135,175,223, 11,114,101,117,129,100,221,186,159,197,171, 87, 59,150,251, 97,205,154, 53,226,132,
+132,132,227,153,153,153, 56,112,224, 0, 66, 67, 67, 49,119,238, 92,174,229,220,123, 39,228,201,179,111,103,161, 93, 72, 91,240,
+ 5, 2,204,154, 53,251,213,152,152, 24, 57,219, 82,159, 83, 15,192,179,132, 33, 67,134,216,213,120,142, 30, 61,106,183, 97,210,
+ 4,109, 77,220,206,194,213,242, 30, 1, 8, 7, 73,219,110,106, 89, 23,203, 99,242,123,235,255,127,182,137,101,237, 90,241,181,
+ 83, 71,144,187,227,123,185, 74,165,133,254,101, 14, 68,205, 9,180,207,189,132,151,188, 40,121,121,241, 95,104,186,246, 63,146,
+113,211,190,172, 87, 9,184,118,237, 26,184, 92, 46,250,247,239, 15, 30,143,103,222,104,133,128,182,250, 13, 6, 3,140, 70, 35,
+244,122, 61,238,222,189,139,227,199,143,219,148,167, 82,169,112,225,194, 5,244,238,221, 27,124, 62, 31,110,110,110,181,100,146,
+ 36, 9,131,193, 0,131,193, 0,189, 94, 15,181, 90,141, 11, 23, 46,160,186,186,250,105, 32,107,142,169,110,112, 0, 24, 26,146,
+135, 94, 38,147, 17,177,177,177,100,108,108, 44, 2, 2, 2,240,239,127,255, 27,227,199,143, 71, 85, 85, 21, 2, 2, 2,156,202,
+ 64, 26, 16, 16, 96,190,159, 5, 11, 62,195,150,109,233, 16,137, 26,129,203,229,203,171,171,242, 28,150,153,150,150,134,234,234,
+106,244,238,221,251,238,224,193,131,155,148,150,150,226,200,145, 35,198,169, 83,167, 98,253,250,245,245,182, 17,109, 78,214, 67,
+101,115,249,198, 13,164,120,185, 99, 78,220,151,121,221,123,116,105,113, 47,191, 8, 71, 18, 83,142,111,223,190, 99,112, 84,212,
+ 91,199, 88,234,124,250, 65,167,254,181,242, 20, 48, 82, 0,172, 83,183,218,219,127,236,228,255,193, 7, 31,212,123, 77,121,121,
+ 57, 0, 80, 76,148, 0,154,172, 27,106,173, 63, 10,121,150,150,191, 11,172,127, 71, 73,155, 41, 89,187, 90,158,229,181,150,159,
+ 0,128,178,178,154,204,136,254,254,201,207, 69, 67,205,249, 51, 25,237,242,228,242, 60, 21,137,177,237,184,120, 33,200, 0,210,
+159,130,155, 63, 23, 85,165,124,136,170,212,232,152,177, 82,190, 37, 46, 86,242,206,236, 69,117, 42, 1, 4, 65,224,250,245,235,
+224,243,249,120,245,213, 87,205,164,237,230,230, 6, 14,135, 3,138,162,160,215,235, 97, 48, 24,160,213,106,145,151,151, 7,185,
+ 92, 94,231,146,202, 28, 14, 7,122,189, 30, 25, 25, 25,232,223,191, 63, 68, 34, 17, 4, 2,129, 89, 30,173, 0,104,181, 90, 84,
+ 87, 87,227,242,229,203,208,104, 52,230, 97, 2, 38,136,138,138, 18,115,185, 92,121, 85, 85, 21,248,124, 62,138,138,138, 62, 28,
+ 59,118,108,149, 80, 40,220,226, 12,105, 71, 69, 69, 77,224,114,185, 59, 19, 19, 19,105,121,153, 99,199,142,189, 41,147,201,198,
+ 75,165, 82,157, 51,150,112,108,108,172,124,209,162, 69, 69, 48,173, 56, 19, 27, 27,139,107,215,174,161, 81,163, 70, 8, 11, 11,
+195,230,205,155, 29, 38,255, 95, 38, 79,198,136,238,221, 1, 0,141,103,206,132,200, 61, 24,213,149,185,168, 84,220,150,196,196,
+ 76, 73,169, 43,159,123, 93,120,241,197, 23, 81, 84, 84,132, 83,167, 78,181,226,112, 56,184,124,249, 50,252,253,253,145,154,154,
+138,119,223,125,151,202,200,200,168,247,247,165,223,206,169,181,239,169,211,163,169, 65,131, 89,159, 44,108, 17,183,244,191,248,
+126,233,106, 52,227, 24,177,122,233,178,228,119,223,125, 23,246,228,177,120,250,200,159, 62,206,116, 45,128,135,242,127,219,219,
+127,156,112,229, 74,125,207, 2, 44,149,128,199,228, 9,112,212, 82, 39,236, 88,231,206,200,179,245,249, 92, 37,174,250,113,201,
+ 55,226,208,140, 95,228, 69, 92, 35,218,249, 0,173, 90, 82,224,190,200, 7,175,109, 91,240,181, 26,104, 79,231, 65,171,224,129,
+ 75,186, 65,147,188, 69,190,126,213, 82,201,212, 25,182,135, 3,104,247,124, 86, 86, 22,252,252,252, 32,145, 72, 32, 20, 10,193,
+231,243,193,227,241,204, 86,191, 70,163, 65, 97, 97, 33, 78,156, 56, 1, 14,135, 3, 14,135,131,250,228, 25,141, 70, 92,189,122,
+ 21,253,250,245,131,183,183, 55,132, 66, 33,184, 92, 46, 12, 6, 3,116, 58, 29, 42, 43, 43,241,215, 95,127, 65,171,213,130,199,
+227,153, 99, 1,236,161,127,255,254,226, 27, 55,110,200,239,220,185,131,202,202, 74,240,249,124, 52,110,220,120,229,201,147, 39,
+209,167, 79, 31,158, 76, 38,219,232,136, 18,208,191,127,255, 49, 55,110,220,216,105, 37, 47,244,228,201,147,161,125,250,244,217,
+110, 82, 2, 24,201, 91,179,102,141, 88,167,211,225,254,253,251,180,203,219, 92, 72,139, 22, 45, 42,136,141,141,109, 54,126,252,
+248, 87, 63,254,248, 99,135,250,191,245, 63,111, 20,127, 54,127, 94,173, 99,247, 87,172, 64,227, 55,154,227,251,239,127,148, 76,
+158,252,182, 83,253,233,169, 83,167,228,127,254,249, 39, 62,251,236,179, 74, 46,151,235, 45, 20, 10,209,167, 79, 31,200,229,114,
+ 36, 38, 38,162, 89,179,102, 14,180, 60, 2, 91,179,238, 97,207,173, 2,236,251,125, 51,184, 92, 2,115,102,190, 67,118,107, 28,
+200, 89, 55,107, 33,214, 59, 42,143,197, 19, 33,127,107, 37,210,150, 82,224,244, 44,128, 39,189,188,109,126,185,231,118, 0, 0,
+ 32, 0, 73, 68, 65, 84,219,182,109, 37,246,182,199,109,173, 63, 10,121, 46,180,250,153,146,182, 51,100, 13, 75,235,156,182,208,
+ 77,114, 40, 39,229,213,217, 81,251,251, 39, 59,101,253,175, 90,181, 74, 60,101,202, 20,170,174, 99,214,231,234,130,229,245,171,
+ 86,173, 18, 91,159,179, 62, 86,111,121, 93, 61, 47, 47, 44,168, 68, 35, 47, 30,218,122, 81,224, 5,146,224,189,242, 26, 60,186,
+109,129,168,199, 15, 16,248,136,192,175, 86, 67,165, 50,162, 37, 87,133,212,248,186, 83,201,114, 56, 28,240,120, 60,184,185,185,
+225,214,173, 91,184,124,249, 50,188,189,189, 17, 16, 16,128,128,128, 0, 4, 6, 6,194,215,215, 23, 10,133, 2,169,169,169,224,
+114,185,230,177,125, 91,160,207,243,249,124, 24,141, 70,100,102,102,194,221,221, 29,129,129,129,104,212,168, 17,130,130,130,224,
+233,233,137,204,204, 76,232,245,122,243, 16, 65, 93, 10,133,181,229,255,224,193, 3,249,237,219,183,209,166, 77, 27, 12, 27, 54,
+ 12,189,122,245,130, 74,165,194,241,227,199,145,145,145,177, 65,163,209,188,237,128,229, 47,121, 80, 84,252,107,246, 61, 5,188,
+218,245, 70,232,176,247,209,172,215,104,148,107, 57, 56,154,124, 12, 25, 25, 25, 99, 53, 26,205, 84,166,228, 95, 89, 89,137, 75,
+151, 46,201, 79,157, 58,133, 23, 95,124, 17,177,177,177,129, 0, 72,147, 7,160, 25, 0, 8,133, 66,198,100,189,254,231,141,226,
+173,241,251,197,254, 1, 93,228,241, 59, 46, 97,242, 47,191, 32,241,194, 5, 36, 94,184,128,198, 51,103, 2, 0,244,122,229, 9,
+103,218,220,235,175,191, 78,237,219,183, 15,227,198,141,187,235,229,229,197,113,119,119, 79, 79, 75, 75,195,169, 83,167, 80, 82,
+ 82,130,208,208, 80,199,148,210, 11,183,176,244,143, 43, 88,191,116,193, 37, 30, 87, 13,142,177, 10,223, 45,255,133,179, 51, 53,
+ 29,133, 28, 30, 94,120,225, 5,150,101,159, 19,240,156, 37,248, 39,181,120,197, 35,179,176,255,217,138,192, 35, 25, 87,111,160,
+171,158,176,115,220, 33,165, 98,233,210,165,226, 99,199,142,201,179,178,178,234, 60,150,150,150,198, 72, 22,125, 93, 90, 90, 26,
+202,202,202,228, 75,151, 46,149,204,155, 87, 99,149,219, 58, 86, 31,188, 53,165, 72,204,213,160, 89, 57, 23,221,189, 9, 4, 21,
+ 3,237,120, 62,224, 16, 1,160, 52, 15,160,124, 64,224,106, 46,137,251, 74, 13,120, 28, 14,186,250, 11,228,117, 61,183,165, 2,
+ 32, 16, 8,112,251,246,109, 52,107,214, 12, 67,134, 12, 1,151,203, 5, 73,146, 40, 45, 45,197,169, 83,167,224,230,230, 6, 62,
+159, 15,157, 78, 87,167, 2, 64,123, 7,104, 37,128,162, 40,100,103,103,163, 93,187,118,240,241,241, 65,117,117, 53, 46, 92,184,
+ 0,163,209, 8,129, 64, 0,173, 86, 11,173, 86, 91,103,223, 65, 7,209, 1, 64,113,113,177, 60, 63, 63, 31,221,186,117,131, 88,
+ 44, 70,243,230,205, 37, 74,165, 18, 65, 65, 65,242,228,228,100,156, 61,123, 22,190,190,190,189,101, 50,217, 54,169, 84,106,119,
+125,247,226,226,226,227, 15,202, 20,240, 15,237,141,182,253,223,132,111,243, 80,104,149, 21,200,253,243, 32,110, 29,219, 76,203,
+ 99,244,126, 77,177, 15,242,194,194, 66, 4, 7, 7, 67, 40, 20, 74, 46, 93,186, 36,143,141,141,229,152, 60, 0, 0,112, 35, 54,
+ 54,150,100, 82, 7,127,222,176, 89,236,235,247,130,220,215,255, 5,112, 56,110,208,235,149,216,176, 81,142,201,239, 73,104,143,
+ 2,166, 78,157,138,160,160, 32,210,209,182,247,206, 59,239, 80,241,241,241,232,223,191, 63,122,244,232,209, 10,128,225,216,177,
+ 99,225, 57, 57, 57, 16,137, 68, 16,137, 68,136,136,136,120,117,215,174, 93,199,153,200,219,118, 51, 15, 63,252,117, 3, 63, 47,
+158, 95,214,252,133, 86, 47, 42,171,203,241,251,161,191,112,233,242, 77,248, 82, 36,248,247, 31, 32,226,195,232,193, 59,119,238,
+250,103,185, 96,159, 33,216, 26, 62,170,203, 43, 80,151,170, 78,140, 31, 63,222,210,130, 38, 34, 35, 35,235,219,127,102, 81, 82,
+178,129,176,220,158, 54,121,192, 35,113,255,215,103,181, 55,232,158,157,181,206, 29,241, 0, 56,138,168,168, 40,241,254,253,251,
+107,145,191,173, 99,206, 32, 43, 43, 11,251,247,239,151, 71, 69, 69,137,235, 59, 86, 39,113,149,228,225,204, 61, 53, 84, 70, 18,
+ 39,243, 72,220, 55,240, 96,212,166,163,252,218, 7,216, 60, 51, 6, 7,142, 40,112,185,148,194,197, 98, 3,174,150, 26, 80, 90,
+120,191, 94,175,156,165, 18, 32, 20, 10,113,247,238, 93,220,184,113, 3, 64, 77, 92,204, 31,127,252, 81,107, 44,191,190,241,122,
+130, 32,204, 94, 0, 90, 30, 69, 81,200,203,203, 67,203,150, 45, 81, 88, 88, 8,146, 36, 33, 20, 10,205,178,234, 27, 82,176, 68,
+110,110, 46, 52, 26, 13,194,195,195,209,188,121,115, 9,151,203,133,183,183, 55, 94,126,249,101,137,167,167, 39,114,115,115, 81,
+ 89, 89,121,153,105, 61,200,205,205, 5,201,225,163, 89,216, 96,248, 54, 15, 5,135,235, 6,145,119, 16, 90,190, 28, 1,190,135,
+ 31, 45, 47,199,158,156,181,107,215,138, 43, 42, 42,228, 5, 5, 5,104,209,162, 5, 36, 18,137,100,203,150, 45, 41,165,165,165,
+ 4, 0,244,238,221,219, 96,186, 52,212,199,199, 7, 50,153,204,110,192,131, 80, 24,128,128,160,110, 48, 26,180, 40,186,151,134,
+251, 5,167, 6,149, 20, 95, 88, 96,146, 7, 0,120,112,255, 62, 76,242,220,152,214, 61,169, 84, 58, 62, 62, 62, 30,209,209,209,
+152, 56,113, 34, 0,144, 71,142, 28,225,237,223,191, 31,147, 39, 79, 30,122,254,252,121,226,244,233,211, 68,108,108, 44,163,200,
+253,204, 74, 21,230,159,184,136,111,231,198,160,255,200,193,254, 70,202,128, 93,191,158,192, 79, 43,183,224,208,236,119,177,190,
+ 91, 75,180,244,225, 97,193,130, 88, 54, 8,240, 25,193,197,139, 23,235, 36,255,122, 61, 0,214, 99,251,246,246,159, 71, 60,130,
+ 41,120, 78,225,235,151,190,150, 76,155, 54,237, 89, 40,239, 90, 67, 10,143, 56, 72,143,209,123,136,136,136, 16,223,186,117, 75,
+174,211,233,234, 61,214, 16,148,151,151, 67,169, 84,202, 35, 34, 34, 36,121,121,121, 15, 29, 59,120,240, 96,157,239, 46,163, 76,
+ 13,133,142, 68, 70,177, 1,133, 21, 6, 4,255,193,195,139,187,178,112, 55,231, 42,110,254,169,131,129,199,133,142, 4, 52, 58,
+ 10,229, 20,137,160,122,150,181,167,167,251,209, 99,247,116,196,254,131, 7, 15,208,170, 85, 43,228,228,228,152, 93,254, 60, 30,
+207,124,189,163,195,121,150, 57, 4,232,207, 71, 52, 36, 88, 1,215,198,124,216, 37,107,146, 36,161, 84, 42,107, 58, 71, 30, 79,
+242,193, 7, 31,212,122,119, 85, 85, 85,188,125,251,246, 97,244,232,209,156,249,243,231, 63, 88,178,100,137,193, 94, 93, 36,136,
+ 26,133, 72,173,122,128,234,170, 60,201,148, 41,239,166,200,100,178, 84, 0,223, 86, 85, 85, 97,223,190,125,102,197,177, 93,187,
+118, 58, 38,117,123,241,226,197,163,191,255,254,251,132,136,136, 8,244,235,215, 15, 0,200,211,167, 79,115,126,251,237, 55,136,
+197,226,145,171, 86,173, 58,234, 72,193,220, 83,105,241, 78,226, 31,152, 53, 33, 2,227,223, 25, 7,149,166, 18,123,247,165, 96,
+249,234,109,248,223,208,151,208,182, 40,159,101,211,231, 64, 25, 96,234, 1,112, 53, 40,171,134,108,111,159,133, 5, 30, 53,249,
+187,208,106,175,203,163,224,236,248,127,125,245,130, 81,125, 57,120,240, 96, 74,251,246,237, 37,126,126,126,245, 30,107, 8,252,
+252,252,208,190,125,251, 90, 68,111,235,152, 45,168,141,222,208, 19,192,185, 18, 45,138,140, 70, 28,203,214, 96, 87,130, 6,199,
+243,131,144,197,247, 65,190, 66,143,188, 42, 18, 74, 3,160, 50, 80, 16, 4, 52,182, 75,204,244,252,126,163,209, 8,131,193,128,
+128,128, 0,120,122,122,162, 85,171, 86,208,235,245,230,227,182, 18, 2, 89,203,163,231,247, 27, 12, 6,168,213,106, 80, 20,133,
+ 22, 45, 90,160,160,160, 0, 77,154, 52, 1,143,199,131, 86,171,133, 78,167, 51,255, 47,147,225,193,150, 45, 91, 66, 40, 20, 34,
+ 61, 61, 29,249,249,249,114,163,209,136,202,202, 74,226,207, 63,255,148, 87, 87, 87,163,101,203,150,240,246,246,126,141,105, 31,
+213,178,101, 75,112, 72, 29, 10, 46, 36,163, 34, 63, 19,164, 81, 15,117,101, 49,114,255, 60, 8,157,178,156,150,215,154,137,114,
+ 67, 35, 32, 32, 64,190,102,205, 26,179, 23,167,180,180,148,184,122,245, 42, 76,164, 77, 2, 8,182,149,240,200, 26, 6,131, 26,
+ 6,125, 53, 68, 30,141, 33, 20,249, 67, 38, 91, 39,150, 74,165,134, 69,139, 22, 5, 88,200,195,250,245,235,161, 80, 40,232, 41,
+140, 15, 97,209,162, 69, 84,223,190,125,169, 30, 61,122, 80, 95,126,249,229,239,163, 71,143,198,200,145, 35, 1, 0,231,207,159,
+175,220,191,127, 63,198,143, 31, 63,250,216,177, 99, 7,153,148,217,162, 69,139,168,126,253,250, 81,111,125,240, 33, 94,221,125,
+ 2,243,254, 53, 22, 31,125, 58, 29, 26, 93, 53,238,220,206,131, 76,182, 11,191,141,234, 3,113,139, 70, 78,183,141,225,195,135,
+179,253,250, 19, 68, 88, 88, 88, 45,210,183, 14, 4,124,172,169,128, 35, 35, 35,197,142,236, 63, 54, 75,191,142, 57,251,214,214,
+ 62, 83,235,191, 46,121,239, 7, 6, 82,239, 7,254,237,206,183,222,183,231,137,112,149,188, 58, 44,105,103,136,250,145,193, 74,
+137,112,218, 3, 0, 0,219,183,111, 79, 25, 53,106,148,196, 50, 57,141,173, 99,206,160, 93,187,118, 24, 53,106,148,100,251,246,
+237, 41,245, 29,171,243,247,237,219,161,189, 7, 23, 94, 4,160,167, 40, 92, 47,215, 33, 62, 75,139,237,103, 10,241,215,237, 50,
+ 20,170,129, 82,141, 17,183,171, 41,220,211, 82,168,214,233, 37,245,145, 23, 61, 53, 79,167,211, 65,173, 86,163, 73,147, 38,232,
+210,165,139, 73,209,243, 71,175, 94,189,204,132, 77,147,118, 93,132, 77, 19,186, 94,175,135, 78,167, 3, 65, 16, 8, 9, 9, 65,
+ 69, 69, 5,242,242,242, 80, 86, 86,134,214,173, 91,131,195,225, 64,167,211, 65,171,213,154,127, 99, 15, 65, 65, 65,146,230,205,
+155,227,234,213,171, 56,124,248, 48, 14, 28, 56, 32, 63,112,224,192,241,147, 39, 79,130,203,229,226,149, 87, 94, 65,219,182,109,
+213, 48, 5,222, 49,144, 55, 58,216,223, 7,165,217, 23,113,243,232, 70, 92, 61,184, 6,215, 15,202,112,247,236,111, 16,112, 72,
+ 90, 94,129, 61, 57, 51,102,204, 72, 9, 14, 14,150,120,123,123, 35, 35, 35, 3,249,249,249,242,184,184, 56,177,165, 34, 96,242,
+ 4,112,226,227,227,209,185,115,103,187,247,166,211, 42,160,168,200,130,155,155, 7,124,253, 59,200, 61, 60,155,225,151, 95,182,
+138, 9,130,211,155,190,198,171, 34, 25,242,255,125,132, 33, 29,170,235,172,219, 7, 15, 30,132, 72, 36, 66,231,206,157,209,186,
+117,107,122,248,192, 80, 94, 94, 94,189,123,247,110,223,176,176,176,209, 59,119,238,220,207,180,238, 38, 38, 30,132,183,183, 39,
+ 6, 12,124, 89, 21,214,227, 69,140,249, 96, 50, 84,132, 1,197, 69,101,152, 54,243, 43, 44,233,217, 14, 61, 26, 57,175, 36, 15,
+ 31, 62,156,250,238,187,239, 88, 37,224, 41, 81, 4,108,225,169, 89, 11,224, 73,207, 42,112,134,128, 29,197,134,146, 26, 5,194,
+146,168,233, 99, 79,131,188,167,213,163, 96,229, 9,160, 28,241, 0,208,152, 55,111, 94,202,160, 65,131, 36,189,122,245,170,243,
+152,229,185,250, 96,121,253,160, 65,131,106, 5,251,217, 58, 86,175,117, 40,240,144,116,109, 18,136,190, 1, 2,188,228,199, 71,
+ 83, 33, 7, 2,138,130, 80,107, 64, 75, 79, 30,202, 41, 10, 87,170, 13,200, 84, 26,208,172, 81, 0, 90,191, 52,176, 78, 89,180,
+213, 79, 79,245,107,217,178, 37,186,117,235,134,242,242,114, 84, 84, 84,160,162,162, 2, 94, 94, 94,232,221,187, 55,116, 58,157,
+ 57, 39, 64, 93,132, 77, 43, 19,122,189, 30, 4, 65, 32, 52, 52, 20,106,181, 26,197,197,197, 40, 42, 42, 66,113,113, 49,148, 74,
+ 37, 66, 67, 67,193,227,241,204,242,234,202, 43, 96,173,148, 5, 7, 7, 75, 66, 66, 66,112,231,206, 29, 36, 37, 37, 33, 45, 45,
+ 13,238,238,238,120,245,213, 87,209,173, 91,183,131, 66,161,112, 14,211,105,123,219,183,111,223, 31,220, 40,232,237,144, 38,190,
+168,190,253, 39, 50,147, 54,160, 32,237,119,248, 9,140, 24, 60,232, 85,116,235,214,109,210,199, 31,127,188,143,137, 44,111,111,
+111,244,232,209, 3, 20, 69,225,204,153, 51, 72, 79, 79,151, 23, 20, 20,200,191,253,246, 91,113,108,108,172,132,206,156,216,179,
+103, 79,164,166,166,218,149, 55,117,234,228, 20, 69,121,150,164,172,248, 50, 4, 66,127, 52,110,250,138, 60,168,113, 47,185,151,
+119,235,131,223, 47,253,105, 20, 45,111,251,199,238,216,113, 90,139,186,148,158,204,204, 76, 4, 6, 6,162, 95,191,126,228, 75,
+ 47,189, 4,149, 74, 5,165, 82,137,149, 43, 87,122,118,232,208,225, 13,185, 92,190,223,145, 54,113,243,102, 38, 90,181,108,142,
+183,222, 26,237,254,249,191,103,161,180, 74,129,146,210, 18,196,124,244, 21,190, 26, 51, 8,131, 90, 6, 55,136,252,151, 47, 95,
+142, 46, 93,186, 96,197,138, 21,172, 18,240, 24, 97, 57,238,111, 15,143, 45, 19,160, 43,103, 21,152,146,251,184, 36, 19,160, 61,
+ 88, 39,226,113,133, 18,224, 74,178,118,181, 60, 87,188,106,184, 32, 61,176,149, 2, 65,212,225,177,112, 8, 51,102,204, 72,177,
+254,157,229,177,159,127,254,153,145, 76,250, 58, 91,215, 51,149, 65, 99,211,246,157, 41,243,223,153, 0, 67, 90, 34,114, 20,128,
+ 39,225,134, 86,158, 28, 20, 24, 9,112, 5, 60,164, 22, 25,161, 33,129, 32, 1, 23, 33, 61, 7,224,227,165,235, 83,234, 83, 0,
+244,122, 61,184, 92, 46,218,180,105,131, 30, 61,122,160,178,178, 18, 26,141,198, 60, 63, 95,167,211,193,223,223, 31,253,250,245,
+195,254,253,251,205, 67, 2,182, 96, 52, 26,205, 89, 4, 59,118,236, 8,147,155, 30, 26,141,198,220,158,105, 79, 66,199,142, 29,
+ 81, 86, 86,134,234,234,234, 58,219,178, 53,153,159, 60,121, 50, 37, 42, 42,234,213,206,157, 59, 31,183, 72, 4, 84,209,191,127,
+255,227, 66,161, 48, 90, 42,149,106, 28, 41,203,147, 39, 79,198, 71, 69, 69, 85,118,238,220,121,159,133,188,146,254,253,251,175,
+252,248,227,143, 25,103,235,153, 62,125,122,202,154, 53,107, 36,195,134, 13,195,157, 59,119,228, 55,110,220, 64,110,110, 46,188,
+188,188,228,190,190,190, 24, 50,100, 8,126,254,249,103,244,236,217,147,241,189,189,255,254, 59, 41, 63,255,188, 73,162,209,148,
+193,215, 47, 84,238,233,213, 2, 94,222, 45,161,172, 42,216,191,120,201, 6, 68,189, 53, 24,219, 63,118, 55,151,147, 45,139,109,
+196,136, 17, 72, 76, 76, 68,126,126, 62,167,172,172, 12, 26,141, 6,169,169,169, 60,147,210, 89,121,250,244,105,135,218, 67, 68,
+196, 8,236,221,187, 31,149, 21,165,200, 47,188,135,143,103,252, 75,247,201,103,139,248, 99, 94,237,131,126,218, 74,192,205, 57,
+122, 24, 62,124, 56,245,197, 23, 95,152,211, 65,135,132,132,224,187,239,190, 3, 0,234,208,161, 67,108,218,240, 39,164, 20, 60,
+ 73, 5,128, 24, 63,126,188,165, 11,141,176,114,247, 19,142,186,255, 93, 65,238,102,146, 47,217, 0,123,217,246, 28, 9,254, 43,
+ 41,217, 0, 75, 87,188, 37, 49, 91,187,236,153,144,118,201,134, 18,151,202,123, 6,240,143,234, 36, 90,247,145, 72, 46,105, 13,
+242,226,227,199,224,102, 80,227, 82, 21,133,228, 42, 3,248, 4,129, 0,138,130,164,137, 47,252, 26, 7, 73,154,191, 44, 6, 54,
+237,180,235, 1,104,221,186, 53,122,245,234, 5,181, 90, 13,189, 94, 15, 62,159,111, 38,108,218, 74, 15, 10, 10, 66,223,190,125,
+145,148,148, 84,175, 7,128,199,227,161, 91,183,110, 32, 8, 2, 42,149,202,236, 93,160,149,118, 58,187, 32, 73,146,232,218,181,
+ 43,254,248,227, 15, 56, 18, 92,185,125,251,118, 57, 0, 66, 38,147, 17, 0, 60, 81,147,109, 47, 87, 42,149,234,157, 41,203,237,
+219,183,239, 55,201,243, 4,224, 15,160, 76, 42,149, 58,156,155,120,250,244,233, 41, 0,176,106,213, 42,137,155,155, 27,178,179,
+179,225,239,239, 47, 7,128,130,130, 2, 12, 31, 62, 28,203,150, 45,115, 72,230,148, 41,147, 82,100,178,117, 98,157, 78, 33, 17,
+ 85,230,200,189,125, 67,224,238,217, 20,238,158, 77,113,228,216, 3, 16,131,234,183,184, 55,111,222, 76, 76,157, 58,149, 42, 43,
+ 43,195,136, 17, 35,116, 1, 1, 1,124,146, 36,145,155,155,235,176, 71, 12, 0, 54,109,218, 76, 72,165, 49,148,247,181,116,204,
+152,241, 62,154,135,182,231,127, 55,235,125,114,211,234,205,156,149, 92,141, 83,117,121,248,240,225,212,252,249,243,225,235,235,
+139,194,194, 66,136, 68, 34,144, 36, 9, 15, 15, 15,124,243,205, 55,172, 18,240, 24, 16, 22, 22, 86,167, 23,128,105, 42, 96,151,
+227, 41,159, 85, 64,148,108, 40,177,121,194, 73,235,159,216, 80,242,176, 60,107, 75,157,118,221, 51, 32,109, 87,203, 99,241, 20,
+193, 68, 54,196,155, 17,195,197, 62, 6,173,156,123, 55, 27,237,244,247,224, 21, 16,140, 62, 93, 59, 32,160, 89,160,228,211, 53,
+219, 82,118,164, 77,183,235, 69,107,211,166, 13,250,245,235,103, 30,143,231,114,185,208,106,181,230,212,189,150,195, 4, 45, 90,
+180, 64,223,190,125,145,146, 98,187,233,137, 68, 34,132,133,133,129,199,227, 65,167,211,153,127,103, 57,117,208,114, 33, 32, 14,
+135,131,238,221,187, 35, 61, 61,221,225, 50, 48,121, 7,170, 76, 91,131, 97, 34,253, 6, 47, 74, 96,242, 16,153,219,225,154, 53,
+107,196, 42,149, 10, 90,173, 22, 29, 58,116, 64, 92, 92,156,220,177,251,138, 73, 1, 0,153,108,157, 68,173, 46,134, 64,224, 7,
+ 55,190,151,156,195,225, 97,107,252, 65,201,219,209, 17,245,202, 91,191,126, 61, 33,147,201,136, 31,126,248,129, 84,171,213, 0,
+128,208,208, 80,135,210, 47, 91, 66, 38, 91, 71,252,252,243,250,225,147,191,248, 33,177, 70, 30,197, 9, 13,125, 1,161,111,188,
+241,246,140, 25, 51,226,157,145,185,100,201, 18,182, 81, 63, 37, 74, 64,125,228,255, 88, 21,128,103, 21,174,156,246,103, 77,204,
+ 13, 37,106, 23,202,115,181,194,192, 42, 32, 78, 96,231,193, 67, 41,181,202,174, 50, 23, 39,239,228, 50,254,125,100,100, 36,252,
+252,252,204, 17,254, 36, 73,154, 93,248,180, 7,128, 14,250,163, 87, 4, 12, 9, 9, 1, 65, 16,216,177, 99,199, 67,242,150, 47,
+ 95,142,132,132, 4,243,181, 70,163,209,238,114,192,124, 62, 31, 61,123,246, 4,147,232,248,103, 88, 89,107,112, 93,167, 21,129,
+ 26, 82,223,128,154,112, 44, 82,206, 68,158, 73, 89, 34, 0, 96,205,154, 53,212,244,233,211,137, 99,199,156,159,154, 63,101,202,
+212, 67, 38,175, 9,135, 36, 73, 35,135,195, 17, 57, 58,252, 66,131,181,238,159, 46, 37,192,110, 71,237,236, 58,194, 44, 88,176,
+ 96,193,130, 5,139,103, 23, 28,182, 8, 88,176, 96,193,130, 5, 11, 86, 1, 96,193,130, 5, 11, 22, 44, 88,176, 10, 0, 11, 22,
+ 44, 88,176, 96,193,130, 85, 0, 88,176, 96,193,130, 5, 11, 22,207, 5,106,205, 2,184,120,241,162,211, 17,156,182,130, 9, 89,
+121,172, 60, 86,222,115, 41,143,122,253, 13, 41,126,255, 77, 6,153, 76,198,177,149,173,143, 45, 63, 86, 94,203,150, 45,205,215,
+228,230,230, 18, 79,155,188,231,253,125, 56,172, 0,208,141,187,158,235,157,185,193,103, 89,158, 51, 50,159,246,231,173, 5,153,
+ 76,198, 7,224, 13,192,221, 84, 31, 72, 0, 37,206, 36, 79,121,196,160, 92,245,204,117,148,233, 19,153,190,180,116,233, 82,241,
+153, 51,103,228, 39, 78,156, 0, 0, 12, 28, 56, 16,125,250,244, 97,156, 74,248, 73,188,135,215,223,144, 98,196,240, 30, 6, 64,
+202,147, 74,165, 36,216,105,159, 44,172,208,178,101, 75,106,212,168, 16,243,254,254,253,160,236,145,182, 61,121, 11, 22,244, 55,
+239,127,251,237,201, 6,201, 99, 81,183, 2, 0,106,215,195, 11, 64, 16, 19,202, 27,242, 63,132, 19,196,251,216,228,217,122,222,
+ 6, 62,243, 83,253,188, 52,241, 95,189,116,114,227,174,237, 43, 7, 53,110, 22, 18,172, 80,232,225,227,227,134,251, 5,183,201,
+206,157,187,149,201,100,178, 94, 82,169,244,142, 35, 50,165,147,186, 81,217,183, 51,113, 59, 71,131,188,123, 20, 90, 52, 33, 16,
+210, 90,136,182, 33,161,144,109,202,120, 90, 26,171, 45, 69,130, 94,107,224,177,223,227,229,203,151,229, 97, 97,135,177,118,173,
+ 10, 41, 41,192,194,133, 71,144,151,151, 39, 31, 53,106, 20,132, 66, 33, 10, 11, 11, 37, 99,198,140,129, 43, 20,130,183,223,126,
+155, 82, 40, 20,146, 33, 67,134,224,163,143, 62, 74,113,162,206,112,164, 82, 41, 70, 12,239, 65,198,196,196,240,128,117,248,253,
+ 55, 64, 38,147, 17, 76,115,246,179,248,231, 64,167,155,143,164,164, 24, 12, 27,182, 14,163, 70, 45,193,254,253, 53,109,207, 89,
+226,190,121,115, 14,126,253,117, 12,198,142,221,139, 5, 11,106,148,128,134,200,123,222,193, 38, 2,114,132, 97, 45,200,158, 32,
+ 0,114,167,223,115,251,172, 43, 87, 44,123,231,192,190, 95, 98,219,181,107,223, 97,236, 27, 3,209,162,153, 55,124,125, 4, 40,
+175,208,160,224, 94, 11,206,173,236,242,192, 3,251,126,145,175, 92,177,236,135, 15,103,206, 89, 97, 79,222,199, 31, 78, 20,223,
+201, 60, 32, 47, 42,204,192,155, 17, 64,223,112, 32,164, 21,144,149, 67,225,212, 57, 53, 18,229, 25, 24, 61,212,155,106, 19, 58,
+ 82,242,227,202,109,206, 18,153, 43, 45,127,194,134,236, 39,162, 4,148,149,149,225,163,143, 84, 8, 10, 2, 34, 35,129,197,139,
+171,113,225,194, 5, 24, 12, 6, 8,133, 66, 52,106,212, 72,126,224,192, 1, 76,157, 58, 85,178,126,253,122,135,202,110,250,244,
+233,226, 43, 87,174, 32, 56, 56, 88,190,123,247,110, 98,235,214,173, 0, 32, 79, 78, 78,198,251,239,191,143, 13, 27, 54, 56,250,
+172,124, 0, 72, 60,116,158, 3,172, 35,107, 62, 31,206,241,207,130,181,254, 1, 96,220,184, 61, 72, 74,170,249,140,137,185, 13,
+218, 35,224,168, 55,128,150,247,206, 59, 91,240,235,175, 53,159, 99,198,156, 4,237, 17, 96,189, 1,245, 19,191,229,113,107, 37,
+128, 13, 2,180,225, 5,120,158,201, 95, 38,147,241,142, 38,237,250, 92, 50,160, 71,135,177, 17,161,232,214,185, 17, 2,252, 68,
+ 32, 64,192,219, 83,128,208, 16,127, 12, 25,216, 26, 3,251,117,111,117, 52,105,215,231, 50,153,172,177, 61,153,119, 50, 15,200,
+251,135, 87, 98,215, 74, 96,114, 36,208,193,228,249,243,112, 7, 58,182, 3,190,156, 13,244,238, 86,137, 59,153, 7,228, 13,121,
+ 69, 13,245,122,216, 81, 36,158, 72, 7,226,239,239,143, 3, 7, 68, 40, 46, 6, 18, 18,128,242,114, 30,218,181,107,135,145, 35,
+ 71,210,203,189, 34, 37, 37, 5,233,233,233,242,165, 75,151,138,153,202, 29, 54,108,152,248,234,213,171,114, 62,159, 47, 47, 47,
+175,237,201, 82,171,213,216,176, 97, 3, 36, 18,137,163,229, 73, 2,192,239,191,201,144,120,232, 60,231,247,223,100, 13,122,246,
+ 41, 83,166, 80,244, 86,223, 49,134,245,130,114,226, 88,189, 88,183,118,173,120,221,236,217,226,139, 83,167, 82,121, 35, 70, 80,
+103, 39, 77,162, 86,125,244,145,120,221,218,181,226,134, 60,115, 67,235,140, 45, 25, 76,143, 61,106,121,180,235,127,212,168, 16,
+196,196, 36,213,250,164, 49,106, 84, 72,173,241,124,123,242, 22, 44,232,143, 5, 11,250, 99,204,152, 95,107,125,210, 88,176,160,
+ 63, 99,121,255, 36,132,133,133,213,218,108, 41, 7,172, 2,240, 52,176,192, 99,196,213, 75, 39, 23,183,107,215, 46,180, 87,143,
+ 38,181, 43, 2,135, 0,159,207,133, 72,200,131,155, 27, 7, 33,109,252, 16, 18,210,174,209,213, 75, 39, 15,200,100,178, 58, 61,
+ 69,210, 73,221, 40, 46, 42, 49,123, 50,160,209, 2,119,242,128,114, 5, 80, 81, 9,108,219, 7,204,252, 2,136, 93, 10,244,233,
+ 1,112,168, 74, 72, 39,117, 99, 27,170, 5,186,118,237, 42,249,253,247,142,104,212, 8,152, 56,145,135,198,141, 95,194,192,129,
+ 3, 37, 7, 14, 28, 32, 70,142, 28, 41, 25, 54,108, 24,130,131,131,113,254,252,121,236,220,185, 83, 62,110,220, 56,241, 79, 63,
+253, 84, 47, 1,245,239,223, 95,172,213,106,229,110,110,110,245,254,183, 92, 46,199,160, 65,131,152,144, 25, 21, 29, 29, 77, 73,
+165, 82,157, 41,102, 4, 22,228, 79, 0, 64,116,116,180,195, 10, 90, 90, 90,154,121,171,239,152,147,205,150,104, 72,243, 94,183,
+118,173,184,237,141, 27,242, 49, 23, 47,202, 91,100,102,129, 95, 89,137, 38,153, 55, 32,254,227,172, 60, 40, 35, 67, 46,115, 82,
+ 9, 72, 75, 75,195,148, 41, 83,168,153, 51,103, 58,173, 68,208, 50,152, 28, 99, 42,207,154,232,153, 28,179, 7,154,244,233, 79,
+221,168,118, 13,106, 43, 52,233,211,159, 55,123, 5,177, 29, 72, 61,196,207, 4,207,170, 2, 64,217,216, 92, 38,248, 17,222, 31,
+229,226,219,164, 28, 45,139,171,215, 50,134,135,134,248,155, 73,223,214, 50,205, 66, 1, 15, 6, 3,137,208, 16,127, 92,189,150,
+ 17, 2,192,167, 46,121,217,183, 51, 17,241,106,205,247,195,169,192,251,159, 1,107,183, 1,133, 15,128, 27, 89,192,133,171, 20,
+146, 79, 3,199,206, 0,195, 6,214, 92,223, 0,221,140,120,132,175,248,137, 40, 38,243,230,205, 75,169,174,174,137,183,156, 56,
+113, 34,206,158, 61, 75,200,100,178, 20,250, 92, 89, 89,153,164, 99, 71, 30,166, 78, 5,186,119, 63, 7,163,241,134, 60, 63, 63,
+191, 78, 79,202,244,233,211,197, 4, 65,200,153, 46, 14, 83, 84, 84,100,215, 43, 19, 29, 29,141,248,248,120, 0,160, 82, 83, 83,
+117, 22,239,130,160,137, 63, 62, 62, 30,209,209,209, 79,178, 63,112,246,152, 77,104,175, 92, 65,155, 63,255, 52, 45,130,164,131,
+129, 36, 65,234,141, 32,245, 6, 4,157, 76, 69, 37,195,245,214,235, 34,220,191,254,250, 75,254,202, 43,175, 60,114, 37,192, 25,
+239, 66, 67,201, 95, 55,170,157,205, 45, 41, 38,201,169,123,186,217, 43,200,230,246,235,152, 95, 89,182,111, 32,108, 42, 0,196,
+132,242,135, 54,103, 9,135, 1, 33, 58, 42,143,168,103,123, 42,148, 13,106,151,159,205,173, 1,202,203, 67,215,219,249, 15,155,
+144,201,100,188,198, 77, 67, 58, 53,109,236, 9,138, 2, 82,207,228,225,240,177,108, 28, 62,150,141,162, 18, 21, 40,138, 66,110,
+126, 37,153,114, 58, 23, 89,119,202, 17, 24, 32, 66,211,166,237,124, 81,179, 68,171, 77,220,206,209,160,111, 56,160,213, 3,135,
+ 78, 0,242,179, 20, 86,108, 6,110,100, 3,131,250, 1, 29, 66, 8,240,184, 53, 75,139,247, 14,171,185,158,225,179, 58,243,157,
+169,165,104,203, 61,252,196, 28, 64,166,229, 92,241,226,139, 47, 74,172,207,113,185, 92,121,167, 78, 69, 88,184, 16,248,207,127,
+ 40, 52,109,154,137,156,156,156, 58,101,105, 52, 26,187,150,191, 37,234,147, 69, 35, 62, 62,158, 38,123,179, 34, 64,111, 22,196,
+ 79,152,174,123, 18, 78, 59,235,246,207,244, 88,157,104, 95, 82, 42,215,233,245,208,233,245,208, 25, 77, 43, 40,146, 36, 72,163,
+ 17, 70, 35,137,230,247,238, 53,100, 56, 11, 42,149, 10, 74,165, 82, 62,101,202, 20,106,234,212,169, 13,242, 38,184, 74, 9,112,
+149,229, 79, 19,253,184, 61,127,127,167, 63,157,241, 2,208, 68,255,206,150,191,191,211,159,172, 23,192, 62, 44,151, 6,102,180,
+ 28,112, 93,179, 0, 26, 48, 59,160,174, 40,118,103,162,219,169,122,254,131,114,224,255, 25, 61,183,141,223, 50,106, 92,245, 4,
+ 21, 58, 35,175,206,223,208,255, 67, 0, 32,119,217,141, 93, 32,107,162,253, 5, 0,128,188,194, 74,168,213, 6, 0, 64,187,182,
+126, 8, 10, 16, 33,227,106, 17,231,230,173, 50, 8,133, 92,132,180,241, 69,185, 66, 7, 0,117, 10,206,187, 71, 33,164, 85,205,
+255,191, 54, 0, 8,235, 68, 64,192, 7, 12, 6, 96,104,127,192,215, 11,200,206, 5,134, 13, 0, 90, 53,175,185,254, 9,163, 46,
+ 37,224,185, 24,253, 41, 42, 42,114,168, 29, 86, 85, 49, 95,125, 55, 62, 62,158,136,142,142,166, 76, 74,128,165,119,224,137,151,
+ 93,219,182,109,169,236,236,108,194,217,243,214,112,187,157, 5,173, 94, 7,130,203,131,145,162, 64, 0, 48, 24, 73,232, 13, 36,
+ 40,163, 17,196,173,155, 46,185,239, 43, 87,174, 32, 48, 48, 80,254,221,119,223, 73, 62,253,244,211, 20,103,149, 0,235, 97, 20,
+ 71,137,219, 85,228,159,155,155, 75,180,108,217,146, 26,183,231, 97,133, 96,216,186, 97,224,239,207,194,254,253,183,205,145,251,
+246,198,238,105,121,239,108,121, 88, 33, 24,187,119, 44, 94, 72, 43,198,183,223,158,100, 44,239,159, 72,254, 52,158,167, 89, 0,
+245,145,168,195, 4,219,192, 41,142,117,203,125,196,179, 9,136, 9,229,142,254, 7,225,227,227,134,242, 10, 13, 2,253,221, 17,
+249,255,237,125,121, 92, 84,213,251,255,251, 14, 48, 12, 48, 40,184, 34, 26, 9,238,226, 26, 46,168, 89,140,185,141, 8,184,145,
+125,202,210,180,152,248,148, 89,185,160,150,102,125,234,167,144, 38,159, 44,117, 76, 83,250,182,104, 35, 26,226,134, 81, 67,105,
+106, 37,110,185,148, 2, 38, 38, 34,137,178, 13, 51,204,114,207,239,143,153,139,151, 97,150,123,103, 6,177, 62,247,253,122,241,
+ 98,230,204,153,103,206, 61,231,222,243,126,158,231, 60,231, 57,241, 61, 97, 52,209,240,245,245,130,151, 72, 4, 66, 8, 38,142,
+237,130,216, 49, 93, 64, 81, 64,249, 29, 45, 90,182,244, 1,128,219,246, 4, 62,208,129, 66,225, 85,130,158, 93,128, 81,195,204,
+157,253, 91, 1,208,175, 39, 16,220, 2,144,199, 0, 52, 13,120,123, 1,151,174,152,235, 23, 93, 35, 92,199,150,207,107,119, 31,
+252,102,217, 6,184, 97,195,134,152,213,171, 87,163,176,176, 16, 63,252,240,131,250,189,247,222,147, 73,165,210,250, 99,103, 77,
+ 38,147,236,194,133,118,234,183,222,186, 14,138,162, 80, 86,214, 29,221,187,119,198,165, 75,182,151, 82,104,154,182, 89,254,216,
+ 99,143, 53,234, 31, 66, 8,190,251,238, 59, 94,215,204, 86, 2,238, 39,242,247,132,146,192,198,237, 78, 29, 33,254,237,119, 16,
+ 31, 64, 76, 19, 80, 20, 96, 48, 25,161, 39, 38,212, 26,141,208,118,237, 9, 92,248,205,237,182,247,233,211, 7, 20, 69,185, 68,
+254, 0, 48,100,200, 16,108,222,188,153,234,215,175, 31,113, 84,230, 12,155, 55,111,166,172, 9,223, 86, 25, 31, 36,229,220, 37,
+126, 0, 16,103, 23, 52,248,156, 9, 24,204,206, 46,228, 36,111,242,174,187,196, 15, 0, 61,126,254,171,145,188, 37, 75, 70, 98,
+229,202,195, 2,243,115, 32,127, 64, 8, 2,180,229, 30,100,187, 9,221,154,220, 8, 1, 68,211,239, 52, 89,163,201, 87,193,230,
+223,224,174,192,120,151, 94, 47,188,117,237,186,217,234,123,127,195, 47, 56,125,174, 12, 6, 3, 13,154, 38, 22,165,133,170,143,
+ 13,184,118,189, 26,165,215, 11,175, 0,176,107, 86,118,233, 44,193,143,249,230,215,109,162,128, 83,231,129,164,127, 1, 93, 31,
+ 52,187,253,223,249, 16, 16,251, 0, 34, 17,240, 99,190,185,190, 27, 4,237,233, 24, 10,235,241,190,231,214,195,133, 11, 23, 32,
+145,152,251,100,223,190,125,248,252,243,207,213,121,121,102, 46, 88,189,122,117, 76,171, 86,173,212, 23, 47, 26,241,241,199,192,
+169, 83,131,224,229,213, 83,214,169, 83, 39,153, 61,121, 1, 1, 1,156,127,219,104, 52,254,237, 31, 92, 54,249, 71, 68, 68, 16,
+123,127,124,149,133,194,182,237,100,119,244,117,168,210,235,161,213, 27, 80,103, 52,194, 64, 76,168, 53, 24, 80,173,215,163, 36,
+ 52, 84,230, 78,187,253,253,253, 17, 16, 16, 32,219,188,121, 51,197,119,123,167, 53,209, 59, 43,227,163, 4, 12, 25, 50,196,105,
+ 25, 23, 47,128, 61,242,103, 91,255,124,228,217, 35,127,182,245, 47,128, 31,249, 11, 10,192, 61, 64, 83,111, 41, 36, 95, 5,131,
+128,179,162, 97,140,140,236, 95, 82,112,229, 14,104,154, 96,241,188,104, 92, 42,184,141,139,151,202, 65, 81,104, 16, 16, 72,211,
+ 4, 5, 87,238, 32, 50,178,255, 57, 0,118,253,196, 17, 93,186, 99,223,119,128,201, 4,144, 34, 64,125, 12,200,254, 22,144, 63,
+ 11,200,158, 4,242,142,155,235,153, 76,192,190,239,204,245,155, 17, 4,142,115, 1,220,115,220,190,125, 91,221,171,215, 21,252,
+252, 51,112,236,152, 9,157, 58,157,197,169, 83,167,212,113,113,113,100,239,222,189,234,156,156, 28,220,188,121, 19, 15, 61,244,
+ 16,166, 79,159, 46,203,204,204,204,115,148,196,135, 16, 34,179,231, 5,176, 6,163,120,240, 5,179, 4,192, 94, 10,104, 46,176,
+ 45,250,162,162, 34,202,222,159,173,250,142, 16, 60,112, 32,202, 71, 62,130,219, 90, 29,238, 24,234,160, 51, 26, 81, 99, 48,161,
+ 82,175, 71,245,168,199,208, 38, 42,202, 69,175, 32,133, 33, 67,134,160,111,223,190,178, 99,199,142,229,185, 35,131, 77,244,182,
+202,220, 81, 2,216,115,129,173, 50, 46,176, 69,254,140,165,110,157, 41,144, 11,108,145, 63, 91, 30,123,107,160, 64,254,206,201,
+ 95, 80, 0,254,238,110, 11, 38, 72,147,227, 50,128, 66,161, 48, 69,246, 27, 57,170,176,176,224,183,159,242, 75, 64,211, 4,242,
+209, 17, 56,123,190, 12,239,190,127, 12,239,172, 57, 90, 79,254, 63,229,151,160,176,176,224,106,100,191,145, 47, 41, 20, 10,131,
+ 61,153,202,109,103, 40, 19, 90, 96,237, 39,102,146,223,248, 14,240,233, 46, 64, 22, 13, 12,236, 13,228,125,105, 46, 95,251, 9,
+ 96, 66, 11,119, 50, 2,186, 27,232, 73,156,200,105,150,181, 67,141, 70,131,190,125,117, 24, 60, 24, 24, 60, 24, 24, 52,136,160,
+168,168, 8,217,217,217, 56,126,220,172, 61,197,196,196, 32, 42, 42,138, 83,122,224,204,204,204, 60, 46,196,110, 52, 26, 17, 24,
+ 24,200,219,138,181, 68,253,215, 71,252, 51,239, 93,181, 96,153, 63, 71,101,124,148, 0, 79,212, 3, 0, 69,114,114,158,126,232,
+ 80,217,197,177, 99,100,165, 61,122,160,212,199, 7,165, 61,123,226,210,184,113, 50,211,176,104,153,194,178, 68,195, 23,131, 7,
+ 15,134, 59, 86, 63, 91,134,179, 50,174,125,104,203,234, 31, 60,120,176,211, 50, 87,192,228, 8,184,155, 20,168,208, 45, 11,158,
+201, 17,192, 74, 10, 36,120, 4, 56,146, 63, 32,100, 2,108, 82,203,252,126,252, 13,133, 66, 81,254,225,186,247,211,115, 14,238,
+ 88,248,231,141,234, 46, 93,195,131, 17, 59,182, 11,130,131, 36,184, 83,161,195,169, 95,111,162,224,202, 29, 20, 22, 22, 28, 29,
+ 55,126,250, 46, 0,215,156,201, 12,239, 62, 81,118, 56,127,175,250,104,126, 21, 98, 71, 1, 31,175, 52,103, 2, 44,188, 10,108,
+249,202,108,249,155,208, 2,225,221, 39,202,112,232, 11, 79, 16,184,167,191,219,108,187, 0,110,220,184, 33, 11, 14,110,163, 62,
+113,194,108,213, 92,186,212, 2,131, 7,247, 70,235,214,173, 33,145, 72,112,227,198, 13,217,196,137, 19,121,165, 2,238,220,185,
+179,236,247,223,127, 87,219,179,216,140, 70, 35,186,118,237,138, 45, 91,182,240, 34, 33,235,181,127,214,123,226, 74, 44,128, 45,
+107,213, 85, 11,214, 25,185,243, 33,127,182, 18,208,224,190, 56,123,214,237,241,118,215, 66,231,211,111, 92,127,203,211,242, 28,
+145, 63, 27,250,184,174, 0,199,245,127,123,228,207,134,176, 35,192,190, 39,192,158, 98,224,109,207,178,228, 83,206, 99, 2,246,
+148,213, 69, 92,252,236,158,180,207, 73, 63,121,164,125,238, 4, 46,190, 52,247, 53,165, 82,169,220,126,254,236,225,245,187,179,
+190,143, 8,233,216, 37,154,117, 22,192,241,200,200,254, 63, 79,140,159,189, 84,161, 80,104,184,200,179,164,247,165, 20,179,250,
+147, 29,251, 46,225,255,125,100,231, 44, 0,215,201,223, 35, 14,147,251,141,252, 1,224,137, 39,158,192,153, 51,103,240,236,179,
+ 39, 0, 0,131, 6, 13,194,227,143,247,151,189,250,234,171,245,228,252,227,143, 63,242,146,185, 97,195,134, 60, 0, 84,108,108,
+108, 76,117,117,181,218,203,203, 11, 34,145, 8, 70,163, 17, 98,177, 24, 82,169, 84,230, 46,249, 3,240,136, 18, 32,224,159,137,
+226,226, 98, 42, 39, 41,135,132,206, 13,149,161,179,237, 58, 37, 73, 57,106,174,214,122,113,113, 49,181,107,242, 46,210, 45,181,
+155,236,215, 32,219,117, 46, 79, 62,172, 22,172,127,126,240,230, 49, 81,122,122,226,109, 10,121,212,125,222,190,251, 65, 30,227,
+ 9,168, 84, 42,149, 51, 34,251,141,100, 50,198, 72, 1,180, 1,112, 3,128,214,114,202, 27, 47, 88,187,247,139,174, 17, 20, 93,
+211, 2,135,207, 52,119, 63, 80,247,186,127,185,194, 66,244,245,109, 56,119,238,156,199,100,239,219,183, 47,207, 83,215,199, 90,
+247,167,172,202, 41, 88,242, 1, 8, 16, 96, 77,218,197, 11,139, 61,246, 76, 23, 23, 23, 83,197,255, 42,198,253,250, 44,223, 47,
+224,154, 5, 16, 0, 40, 87,207, 17, 22, 32, 64,128, 0, 1, 2, 4,252,125, 33, 4, 1, 10, 16, 32, 64,128, 0, 1,130, 2, 32,
+ 64,128, 0, 1, 2, 4,131, 1, 0,215, 0, 0, 32, 0, 73, 68, 65, 84, 8, 16, 20, 0, 1, 2, 4, 8, 16, 32, 64,128,160, 0,
+ 8, 16, 32, 64,128, 0, 1, 2,254, 25,104,176, 11,224,244,233,211, 46, 71, 81,218, 10, 38, 20,228, 53,153, 60,167,135,216, 52,
+167,188,196,196,196, 24, 0,106,149, 74,229, 17,121,211,167, 79,143,161,105,218, 99,242,132,251,175,121,228, 37, 39, 39, 79, 87,
+ 40, 20, 95, 53,101,251,148, 74,165, 15, 0,137,229,158,214, 1,160, 1, 16,133, 66, 65,132,241, 16,228,253, 47,201,243,148, 7,
+128,112,248,227, 3, 79,203,187,103, 32,183,211, 8,169, 73,231,220, 62, 11, 17,122,236,122, 89,242,176,102,205, 26,153,131,254,
+228, 45,239,220, 71, 45,224,174, 60, 6,147, 6,239, 87,135,183,200, 6, 0, 68, 69, 69,185, 61,158,221,219,239,192,131,109,191,
+133,159,159, 31, 70,143, 30,125,223,220, 31, 74,165,178, 45, 21, 32, 61,168, 84, 42,219,122, 72, 94,152,200,215, 63,199,158, 60,
+165, 82,233,163, 84, 42, 41, 39, 50,124,152,182, 73, 36,254, 7,149, 74,101, 91,165, 82,233,229,236,123,174, 60, 14, 46,220, 27,
+199,154,106, 44, 54,109,218, 52, 97,243,230,205, 11,124,124,124,118,139,197,226,124,177, 88,252, 27, 0,165,151,151,151,138,162,
+168,245, 74,165,178, 77, 19,244,129, 0, 1,141, 80,187,104, 17,241,240,131,214,100,115,158,179, 76,128,132, 16,251,191,205, 51,
+ 55, 52,177, 8,244,148, 60, 94, 22,172, 39, 49,109,218, 52, 82, 80, 80,224,148, 92, 85, 42,149, 58, 37, 37, 5,237,218,181,179,
+153,114,117,254,252,249,156,207, 20,103,228,173, 89,179, 70, 54,127,254,124,245,241,227,199,213, 86,138,128, 75,242,232, 11,203,
+ 33,234,253, 54, 62,253, 78, 15, 0,160, 47, 44,191,171, 29,246,126,155, 87,191,124,249, 94, 0,161, 9,176,253,160, 89,150,252,
+ 81, 31, 68,118, 61, 15,192,172, 4,228,231,231,243, 26,155,180,143,100, 49, 21,127,148,163, 70, 31,172,214,212, 5, 64, 62,174,
+ 2, 29, 67, 40,132,135,207, 36, 85, 85, 58,236,216,177,163, 89, 39,244,228,121,243, 94, 6, 77,143, 77,158, 55,239,101, 0,203,
+220,150, 55,119,222,243,132,166,199, 36,207,181, 45,207, 81, 74,102,118, 29,165, 82, 73,205,157, 59,239,101,154, 54,141,157, 59,
+119,222,203,122,189,110,153, 13, 69, 65,228, 74,174, 7, 55,161,103,223,127, 59,119,238, 84, 79,153, 50, 69,150,153,153,153,231,
+142,208,205,155, 55,203,189,189,189, 31,241,246,246,126,194,203,203, 43, 88, 36, 18, 73, 83, 83, 83, 69, 11, 23, 46,156,109, 50,
+153, 96, 52,227, 9,147,201, 20,167, 84, 42,127,180,120, 3,244,150,249,175,201,151, 65,227,227,227, 9,215,249, 46, 43, 43,139,
+215, 61,157,144,144, 64,220,249,190, 0,207,195, 47, 45,205,163,242,180,139, 22, 1,110,200,100, 50, 2,242, 61, 14,216, 41,249,
+ 71, 69, 69, 33, 63, 63,159, 15, 57, 59, 36,121,142,242, 26,201, 79, 73, 73, 65, 81, 81, 17, 44, 46, 98,143, 29,235, 74, 74,162,
+ 8,252,186,131, 10,254,146, 2, 0,170,213, 34,106,218,180,105, 78,181, 49, 54, 89,151,149,149,169,237,145,127, 74, 74, 10, 82,
+ 83, 83,121,145,191,229, 61,162,163,163,101,209,209,209,110,201, 99,200,158,249,191,234, 63,104, 64,254,139,166, 74,144,150,169,
+227,212, 87,219,211,165,164, 79,184, 8, 26, 45,193,107, 79, 75,112,252,188, 17, 90, 13, 65,173, 30,144, 13, 56,143,243,151, 76,
+136,138,138, 34, 92,149,128,148, 55,122,146,194, 83, 85, 8,108, 33, 70, 72, 7, 41,218,182,239,138,171,133,122,116,238,109,128,
+143,164, 12,185,187,111, 97,252,248,241,228,224,193,131,205, 53,225,249,182,106,221,122,222,103,199,127,166,228, 61,186,189, 12,
+224, 29, 0,117,238,200,107,221,170,245,188,237,223, 29,167,198, 12,232,225,150, 60,133, 66, 33, 14, 9,233, 48,239,144,250, 48,
+ 53,168,127,164, 77, 89,205, 64,254, 0, 80,127,252,160, 74,165, 82,199,197,197, 33, 51, 51, 83,109,235,121,253,229,151, 95,200,
+ 91,111,189,133,189,123,247, 58, 28,223, 45, 91,182,140, 18,139,197,125,196, 98,241, 92,177, 88,236,127,237,218, 53,116,235,214,
+ 13, 94, 94, 94, 8, 12, 12, 68, 65, 65, 1,164, 82,169,247, 47,191,252, 18,116,236,216,177,195, 47,190,248, 98,103, 0, 87, 1,
+136, 97, 94, 30,176, 59,241,177,231, 63,246,188,197,148, 83, 20, 5,138,131,213,178,103,207, 30,187, 50,216,229,142,230, 91,123,
+200,202,202,114,235,251, 77,170, 32, 39, 39,199, 88,178, 82,186,141,183,223,126,155,208, 52, 13,136, 42,160,175,211, 65,236, 43,
+ 1,232, 32,136, 68, 34, 44, 95,190,156, 58,102,197, 51,201, 14,100,157, 63,127,158,100,102,102,194,158,188,169, 83,167, 34, 50,
+ 50,146,114,181,125, 88,158,142, 21,111,191, 66,216,237,115,231,218,253,211,210,120,127,223, 94, 26, 96,174, 10, 0, 39,242,231,
+138,148,148, 20,167,117,184, 16,151, 61,242, 95,181,106, 21, 22, 47, 94,108,173,116,184,212,233,228, 68, 20, 65,235,238,160,194,
+191,164,216, 22,255,206,157, 59, 41, 0, 96,254,219, 91,115,177, 38,107, 71,228,111,241, 12, 56,181,218, 85, 42,149,218,218,194,
+103,202,216,125,204, 87,158, 35, 11,127,209, 84,238, 39,197,101,166, 7,144,110, 15,138,224,231, 75,225,193, 80, 47,220,186, 67,
+195, 96,244, 66,121, 5, 65,101, 13, 65,193,159, 52, 32, 2,218,248,159,101,250,199,225,164,176,244,245, 30, 49,221,187, 68,224,
+ 88,233, 77,132,135,181, 69,159,126, 17,240,242,109,133, 7,195,239,224,142, 86,135,178, 82, 19,254,188,169,131,191,119, 17, 39,
+121, 77,132,167,158, 94,184, 80, 92,212, 33, 20,190, 81,131, 68,186,195, 63, 60, 5,224, 19,190, 66, 88,150,248, 83, 51, 95, 94,
+ 32,254, 83, 28, 2,105,247,135, 68, 85,231,142,184, 36,143,105,219,139,243, 94, 21,195, 55, 16,225, 61, 34, 69,191,255,122,210,
+ 29, 89,158, 4,205,178,254, 33,145, 72,100, 0,212,214, 99,120,226,196, 9, 78,228, 15, 0, 62, 62, 62, 65, 18,137,100,214,173,
+ 91,183,252,187,119,239,142,129, 3, 7,194,219,219, 27, 31,124,240, 1, 76, 38, 19,250,246,237,139, 93,187,118,225,151, 95,126,
+193,217,179,103,225,229,229,181, 94,169, 84, 38,108,216,176,193,145, 85, 93, 63,207,121,194, 99,169, 84, 42,101, 33, 33, 33,106,
+ 66,136,195,239,148,150,150,202, 20, 10, 5,223,251, 71, 22, 18, 18,162,118,245,251, 12, 81, 95,188,120,209,225,188,209,171, 87,
+ 47, 25, 95, 50,191,120,241,162,250,201, 39,159, 68,203,150, 45,101,238, 40, 2,138, 23,102,146,164,228,177, 8, 8,240,107,244,
+153, 70,163,197,242,229,203, 49, 12,160,254,220,179,135, 92,139,143,183, 63,183,207,232,110, 30,204,149,147,209, 97,212, 68, 72,
+ 30, 26, 4, 83,247,200, 6,117, 12,219, 51, 16,188,114,242,221,186, 0,180,227,159,195,240,213, 95, 56,108,223,204,103,199,160,
+ 85,107,127,115,193,242,116,204, 95,240, 44, 0,224,118,121, 45,174,151, 20, 18,229,198, 12,151,149,128,218, 69,139,136, 43, 74,
+128,171, 10, 0,225, 98,169,223, 47, 40, 42, 42,194,226,197,139, 93, 85, 32,236, 98,218,180,105,132, 10,221, 73, 77,155, 22, 78,
+ 84,155,134, 0,219, 30, 38,148,244, 21,167,131, 96,139,172,173, 73,217,209,178,128, 61,176, 21,138,227,199,143,171,163,163,163,
+ 27,184,254,249,202,251, 98,161,212,238,228,246,212,106, 13,103, 57, 27, 54,108,136,241,245, 90, 8,145, 8,240,247, 3, 42,170,
+104,212, 17,130, 0, 63, 10, 58, 26,208,214, 17,116,106, 43, 2,109, 4, 46, 95, 51,161,168,168, 72,237, 72, 57,155,247,242,152,
+152,240, 7,253,213, 98, 49,193,243,179,134,194,100, 34, 40, 45,211,163,248,122, 5,224,115, 13,126,193,117,184, 81,246, 7, 68,
+226, 74, 92,184, 80,129,150,193,142,229, 53,157,249,223,106,249, 19,207, 60,227,251, 6, 13, 4, 47,126, 93,122,243,204,233,101,
+116, 85,149, 43, 36, 75, 0, 64,210,178,213,242,127,205,120,198,119,245, 21, 19, 58, 77, 79,145,254, 94,116,118,153,169,182,161,
+ 60,165, 82, 73, 89, 7,179,217, 66,139,150, 65,203,159,154,241,180,239,217,226, 59,136,127, 50, 73,250,225,127,230, 47,211,214,
+106,220, 85, 0,184,158,151,225,104, 44, 76,204, 51, 50,113,226, 68, 48,164,175,213,106,235,199,144,177,252,179,179,179, 57,141,
+169,175,175,239,112,141, 70,211,179, 87,175, 94,144,201,100,152, 63,127, 62,230,204,153, 99,158,204, 13, 6,108,219,182, 13,249,
+249,249, 56,121,242, 36,118,236,216, 1,173, 86,219,149,166,105,185, 19,139,221,163,247,211,190,125,251, 56, 45,205, 81, 20,197,
+251, 94,102,203,118,229,251,150,103, 56,239,201, 39,159, 68, 73, 73,137,205,207, 67, 67, 67,225, 42,129,151,148,148,160,164,164,
+196, 45, 69,224,236,153, 75,248,191,140,189, 24, 57,114, 56, 34,251,118,188,107,201,255,122, 29,135, 15, 31,197,176, 97,195,136,
+106,201, 18, 92,139,143,135,223,136, 17,208,218, 57, 59,131,250,236, 18, 5, 0, 11,134,247, 33,253,202, 14,226,233,239,246,194,
+212, 61, 18,218, 5, 43, 0, 0,126,171, 87, 64,122,233, 60, 22, 22,137,177,250,232,185,187,253,248,217, 34,135, 65,118, 76,251,
+ 70,143, 25,209,168,125,185,223,252,136,179,103, 46,185,117,255,184,178,164,192,118,247, 59,242, 6,120,243,181,216, 61, 77,180,
+238,194,226,246,119,125, 86,139, 2, 65, 7,128,218,107,126,112,168, 65,249,212,180,105,225,245,131,189,115,231, 78, 10,155,134,
+ 16,107, 79, 0, 87,178, 46, 43, 43,107, 64,206,174,144, 53, 87,176,148, 14,167, 36,193,197, 93,200,114,255,219,172,188,113,227,
+ 70,242,215,249, 87,209,161,187, 23, 52,218,187, 85,180, 38, 2,157, 30, 48, 88,202, 12, 70, 2, 34, 50,191,254,245,108, 62, 18,
+ 19, 19, 99, 46, 95,190,108,243, 55, 3, 3, 43,213, 26,173, 8,109, 90, 5,161,226,118, 45, 42, 42, 43,112,252, 68, 41,174,223,
+ 36, 16, 7,212,162, 99,215, 26,104,107,111,161, 91, 63, 3, 58,247,170,195,142,143,243, 49,121,242,228,152, 43, 87,174,220,147,
+251,205, 98,177,143,158, 56,117, 90,251,146,150,193, 40, 52, 2,126,163,199, 66, 20,220,186, 13, 93, 85, 53, 22,192, 33,134,172,
+ 1,248, 40, 20, 10,189,179,121, 31,192,152,184,201, 83,219,255, 37,106,137,171, 53, 6, 4, 61, 52, 26,222,129,193,109, 76,181,
+119,229, 1, 0, 23,242, 7, 48,110,210,228, 41,237,137,151, 47, 42, 53,117,232, 19, 53, 12,210, 22, 45,219,104,107, 53, 13,100,
+ 53, 23, 24,235,159,162, 40, 76,156, 56,145, 0,192,222,189,123,145,152,152, 24,147,146,146,162,230, 67,254, 74,165,210,183,162,
+162, 98,166,193, 96, 16,249,251,251,227,145, 71, 30,193,234,213,171,225,227,227, 3,133, 66,129,140,140, 12,228,231,231,227,248,
+241,227,248,246,219,111,241,235,175,191,162, 77,155, 54,109,140, 70,227,131,176,227,254,103,187, 64,157, 45, 1,136, 68, 34, 78,
+237,108,202, 37,128, 61,123,246,120,100, 9,160,101,203,150,178,146,146, 18,181,189,207,220, 29,119, 87, 20,129, 75,139, 22,145,
+242,180, 52,224,216, 49,224,216, 49,220,158, 58, 1,107,250,119,175,119,217, 71,246,238,141,199,167,199,162,243,157, 91,184, 22,
+ 31,143,214,139, 22,161,123, 90, 90,163,229, 0,107,136,101, 15,163,187, 60, 6, 11, 23,189,131,247,112, 30,107,162, 71,161,207,
+224,161,232,122,187, 8,219,130, 6,162,168,229, 77,100,100,100,144,153, 51,103,114, 26, 95,217,168,254,120,122,230, 68,252,252,
+211,175, 56,152,115, 8,111, 2, 88,179,122, 43, 34,123,247,198,211, 51, 39,162, 86, 91,142, 23, 94,120,129,179, 60,107,184, 27,
+ 3,192,215, 3,240,119, 2,101,135,156,120,119,244,180,105,211,136,106,241, 21,192, 75, 12, 4,249, 0, 65,157, 65,237,180, 8,
+227,184,246,223, 4, 32,108,171, 31, 0,216,150,191,141,201, 21,209,209,209, 50, 7,193,128,188,175,225,243, 5, 1,118, 61, 2,
+129, 85,243,241,135,158,160,244, 22, 13, 64, 4,169,191,217,197,105, 48, 18,232,234, 0,157, 30,208,213, 1,122, 3,160,211, 2,
+250,186,187, 94, 18, 91, 1, 41,159,127, 20, 64,114,143, 87,227,129,112, 41,136,143, 55,110,105,181, 80,127,127, 13, 23, 10,174,
+227,246,237, 26, 68, 70,153,160,209, 25,161,171, 51, 65, 91, 75,163,180, 24,208,106,128,221,187,119,171,249, 28,128,225, 14, 20,
+ 10, 5,237, 21, 20,180,252,217, 37, 75, 36, 59, 88, 20, 18,188,228,117,233,237,197, 11,150,153, 42, 42, 14,177,200, 90,207,101,
+140,189,165, 65,203,231,188,186, 88,114,224,186,169,190,176,211, 19,139,165, 87,183, 44, 89,102,172,169, 56,196,199, 11,224, 47,
+ 13, 92,246,242,107, 11, 36,133, 37,119, 79,139,140,123, 50, 73,186,125,211,154,101,181, 53,213,135,220,124,214,108,221, 75,124,
+158, 53,194, 88,255, 18,137, 68,166, 82,169,242,152, 45,163, 90,173, 86, 61,104,208, 32, 62,178,140, 0,186, 2,160, 7, 12, 24,
+ 64, 75, 36, 18, 81, 70, 70, 6,102,207,158,141,149, 43, 87,130, 16,130,159,126,250, 9,223,127,255, 61,206,158, 61,139,202,202,
+ 74,116,235,214, 13, 85, 85, 85,254, 34,145,168,157, 51,225,147, 38, 77,178, 75,168,206,150, 6,236,185,233,239,215, 37, 0, 71,
+ 94, 0,119,172,127,119, 21,129, 59, 21, 21,245,175,219,189,254, 2,250,188,158,140,145, 86,117,174,140,159,131, 78, 63,156, 64,
+225,130,231,241, 83,104, 40, 0, 96, 24, 64, 13,176, 49,215,165,167,167,147, 78,157, 90,224,228,169,159, 17,249, 80, 47, 32,237,
+ 13,188,186,101, 55,102,117, 57,131,254,117, 5, 88,120, 83,140,255,124,190, 20, 43,223,221,128,179,191, 30, 65,122,122, 58,121,
+229, 21,251, 94, 95,182,188, 86,173,253, 49,126,194, 80,140,159, 48, 20,111,209,233,208,215, 45,198,169, 83,192,169, 83,192,225,
+195, 19,241,225,186, 75,120,226,137,139, 36, 44,236, 65,164,165,249,243,226,167,220,135,223,192, 34,172,112,120,195, 29, 58, 52,
+252,127, 70, 1, 32,137,137,137, 50,214,154,161,181, 18, 64,177,173, 13,139, 75,222, 37,205,139, 33,253,157, 59,119, 82,170, 77,
+ 67, 0,177, 24,212,206,157,247,244, 98,153,168,127,149, 74, 69, 37, 38, 38, 18,103,222, 16,235,216, 0, 62,132,110, 11,142,234,
+206, 92,162, 65,104,123, 17,158,140, 19, 67, 87, 7,180, 12,164, 32,162, 44, 86, 63, 8,116,181,128, 70, 79,160,209, 18,104,116,
+ 4, 52, 1, 68, 14, 98,174,103,206,211,160,111,255, 34,132,244,188,141,111, 14,148,225,246,109, 29, 6, 12,171, 66,191, 86, 53,
+128, 79, 29,116,181, 52,202,174, 19,104, 52, 20,140, 70, 10,173,218, 80, 0,117,207, 99,217, 34, 7,246,239, 63, 40, 56, 44, 12,
+ 71,239,242, 53,164, 79,206,192,237,148,249, 81, 0,122, 3,184,192, 67,161,232, 53,120,196,163,131, 90,135,134,225,196,207,245,
+ 49,114,104, 43,251, 23,174,126,188,184,145, 60, 39, 94,128,222, 3,251, 15, 24, 20, 26,218, 9, 23, 78,222,245,136,140,120, 44,
+ 22, 95, 42, 87,243,110, 91, 83, 42,180,204,243,107, 29,191, 17, 23, 23,215, 40,254,200, 70, 44, 0, 51,232, 93, 1,156, 94,180,
+104,209,112,111,111,111,233,167,159,126,138,173, 91,183,226,217,103,159,197,170, 85,171, 64, 81, 20,254,248,227, 15,104,181, 90,
+164,164,164,192,104, 52,226,133, 23, 94,160, 41,138,114,250, 0,120, 50,154,254,126, 95, 2,112,228, 5,240,132,245,239, 42, 50,
+ 50, 50,240, 76,210,227,168,172,168, 3,222,221, 8,205,225, 19, 8, 24, 57,168,254,243,178,119, 55,226,188,175, 47,168,151,158,
+ 67,159,233,227,113,108,219, 1,135,242, 46, 95, 62,135, 97, 35,228, 56,119, 62, 24, 27,215,171, 48,114,228,112,252,231,163,165,
+120,107,244, 83,248, 12, 64,207,167,103, 99,227,122, 21,196,226, 96, 36, 76, 26,132, 79,121,200,251,239,251, 95, 97,240,196,190,
+120,167,239,106,156,139,149, 34, 56,110, 87,131,186,109,252, 37,248, 57, 79,141,176,103,102,241,238,135, 35, 71,188,145,150,230,
+231,176,142,171,246,207,223,210, 3, 96, 99, 29,153,114, 80,143,187,137, 51,200, 28,161, 62,109, 90, 71, 2, 92,134,234,131, 43,
+128, 95,247,122, 79, 0,163, 20,112, 89, 6,240, 20, 24,107, 62, 49, 49,145,176,173,127,198, 35,192,126,159,152,152, 8, 86,178,
+ 28,194,151,208,173,193,218, 5, 96, 83,158,209, 4,104,106, 9,234,244,230, 96,191, 58, 61,129,183,239,221,207,116,181,128,214,
+ 64, 80,126,155,224,175, 59, 4, 39, 47, 24, 65,211, 64, 98, 98,162,236,242,229,203,141,198,198,104, 4, 74,174,233,113,173,240,
+ 14,142, 28,187, 3, 66, 40, 92,248,141,198,196, 39,141, 16,123, 19,252,117, 19, 56,114, 8,168,170, 34, 32, 52,240,240, 40, 10,
+ 18, 9, 32,151, 39,224,234,213,171,156,174, 73, 62, 12,228,192, 49,215, 39, 73,145,180,197,146,231, 87,165,250,100, 17, 81,131,
+ 14,105,227,235, 11,159,151,230,249,252,177, 46,125,169,190,170,106, 6, 87,121, 94,126,210,165,201,203, 86,249, 28, 42, 33, 13,
+228,181, 14,240, 69,159,233, 47,250, 92,248,234,131,165,122, 77,205, 12, 46, 30, 0,137, 95,192,210,197,203, 87,248, 92, 41,173,
+108, 32,171, 69, 96, 0, 38, 63,249,172, 79,214, 23,159, 44,213,104, 52, 51,154,249,241,165,246,238,221,219,168,236,205, 55,223,
+ 36,123,247,238, 69,118,118, 54,231,161, 0,112, 14,192,233, 53,107,214,244, 15, 10, 10,146, 50,110,240, 79, 62,249, 4,179,103,
+207,198,214,173, 91,235, 45,245, 53,107,214,160,162,162, 2, 85, 85, 85, 53,181,181,181, 69, 22, 15,130,216,209, 15,208, 52, 77,
+172, 93,244,140,245,207,213,253,207,184,233,217,114,172,221,245,247,195, 18,128, 45, 47,128,167,173,127, 70, 38,215, 37,128, 11,
+195,134,129,122,126, 58,130, 0,144, 81, 81,168, 61,121, 14,154,119, 55,222,237,183,164,199,209,237,233,199, 33,145,152,175,255,
+252,121,199, 91,179,153,207,229, 19,204, 74, 68,254,137,179,248,236,255,182,195,127,232, 16,212, 26,140,208, 67,143, 71, 30, 29,
+216,168, 62, 23,121,215, 76,122, 60,217,254, 69,208, 39,235,144,248,222, 40,136,167, 29, 71,239,200,222,136,236,211,181,190,125,
+ 41, 11,215, 33, 45,237,223,156,239,155,130,170,130,209, 23,112,225,155,248, 22, 92, 60, 6,174, 37, 2,250, 91, 42, 0,249,249,
+249, 78,163,191, 45,159,115, 19,232, 27, 0, 85,231, 31,128,143,194, 9,194, 3,128, 46,117,160,122,100, 83,248, 32,170,126,237,
+223,157,101, 0,235,173,128,246,182, 6, 58,112,187,214,147,191,117, 0, 32,227, 82,103,202,156,120, 0, 40,107, 75,204,221,201,
+252,225, 71,227, 99,174,223, 56,160,166,219,210, 16,121, 3, 62,150,121,209, 64, 19, 24,141, 64,117, 53,129,222, 0, 24, 13,102,
+165, 32, 97,146,217,123, 99,199,101, 79, 69, 15,139,143,169,187,181, 95, 29, 25, 73,227,240,247, 38, 80, 34,224,175, 82, 10, 18,
+ 63,224,251,131,128, 94, 75,129, 34, 64,191,135,124, 80, 82, 76,227,209, 71, 99,145,149,149,197,233, 88,107,249, 48,144,180, 23,
+205,215,239,170, 18, 64,104,211, 56, 83,235, 54,162, 3,244, 93, 22,106, 15, 32,132, 2,180, 81, 81,222, 87,140,166,113,188,228,
+ 17,122, 28, 2, 91,137,212,165,166,122,121,109, 37, 64, 27, 9, 5,255,190, 81,222,231,183,211,227,172, 60, 6,196,145,172,128,
+192, 32,209,213,155, 21, 22, 98, 1, 2,253,124, 17,232, 47,198, 67, 3, 6,122,239,254,140,140,107,230, 71,215,102,159, 51, 81,
+255,236, 58,140,247,110,234,212,169,178,204,204, 76,123,242,106, 0, 92, 57,117,234, 84,205,200,145, 35,219,130,181,167,255,147,
+ 79, 62,169, 39, 68,131,193, 0,147,201,132,203,151, 47,163,109,219,182,183,104,154,230,164, 45, 78,154, 52,201,158,165,238,146,
+155,254,126, 94, 2,176,229, 5,240,164,245,207,135,248, 25,116, 8, 13,194,199, 31,127,135,248,184, 97,104, 31, 21, 9, 68, 69,
+130,122,126,122, 67,165, 23,192,205, 82, 45,246,100, 31, 67,135,208, 32,238,242, 66,252, 16, 53,168, 27,162, 6,117,107, 84,143,
+175,188, 71,166,244,194,235,143,126, 0,250,156,153,252,231, 44,156,233,146, 60,107, 44, 9, 92,242,205,202,234,149, 99,154,242,
+129,116, 75, 1,176,236,217,191,167, 17,216,140,149,171, 82,169, 24,139,151,178, 81,135, 48,228,207,178,138,121,129,189, 11,128,
+ 41,227,107,249, 91, 7, 0, 90, 80, 95, 54,127,254,124,181,101, 57,131,147, 60, 54,249,219,138, 9,224, 43,207, 25,210, 50,117,
+112, 38, 47, 43, 43, 43,175,117, 16,133,199,162,125, 64, 3, 48,232,105,248,138,205,221, 84,173, 33,168, 51, 16, 24, 77, 64,254,
+ 57, 19, 76, 52,129,179, 45,123, 89, 89, 89,121,237,219, 82,120, 52,198, 11,147,159,242, 66, 77, 53, 65,117, 37,160,169,166, 16,
+222,141,192,100,160,224, 45,146,160,226, 54,141,146, 63,245,184,252, 27,183,128, 49,249, 48,144,244,121, 64,247, 48, 96,221,107,
+192,220,247, 93, 83, 2, 72,173,102,202, 75, 81, 3,247,135,100,237,151, 6,143,120, 24,237, 1,180,167, 0,211,209, 35,200,157,
+ 57,163,198, 80,171,153,204, 71, 30,173,171,157,252,252,232, 65, 7,122,189,245,181,180, 93,191,225,104,227, 75,161,173,132,130,
+246,226,143,216,243,198,172, 26,131,182,150,179,188, 58,157,118,242,132,199, 70, 30,152,255,238,122,105,239,254, 81, 8,244, 23,
+ 35,208,207, 23,133, 23, 78, 99,121,202,203, 53, 90, 30,178, 92, 37,115,103,151,107,139,252, 87,172, 88,209,200,205,191,115,231,
+ 78, 38, 79, 64,158, 29,235, 31, 48,199, 88,156,238,209,163, 71,161, 78,167,235,232,229,229, 37,241,247, 55,111,197,202,204,204,
+196,212,169, 83,161,213,106,161,211,233, 80, 87, 87, 7,169, 84,170, 51,153, 76, 89,132,144, 82,142,214,181, 71,230,182,191,203,
+ 18, 0,219, 11,192,188,110, 14,226,103, 16, 30, 30,130, 37,175, 39,225,224,129,159,240,245,238,147,240, 21,183,192,159, 37,119,
+ 87,176, 58,133,246, 70,157,190, 10, 15, 69,245,196,218,244, 36,172,124,119, 3, 47,121,237,218,181,196,249, 11,231,235, 63,143,
+236, 29,137,178,178, 74, 94,242, 98,231, 77,198, 84,209, 12,212,157,171, 65,244,220, 62,160,251, 73,240,241,199, 59,234,219, 87,
+ 89, 89,137,225, 15,247,226, 36,207, 26, 42, 74, 69,169,160, 66, 83,194,101, 5,160, 41,200,159,139, 76, 11,225, 19,203,107, 0,
+ 32,236,109,137,249,249,249, 13, 8,223,150,130,208,216, 15, 75, 1, 98, 17,224,231, 5, 72,189,129,186,106,168, 86,250, 0,233,
+115, 8,252, 90, 1,126,173,120,175,253,219, 33,127,216, 32,107, 78, 15,134, 53,249, 91,199, 4,240,149,199,131,252,157,202, 43,
+175, 32,212,190, 60, 3,145, 72, 0,154, 6,250,246,240,186, 59, 30,191,154, 96, 48, 17,152,104, 47, 76,153, 50,133,147,114,114,
+243, 47, 66, 29, 56,104, 34, 70, 35,160, 55, 16,152,140,128,136, 2, 98, 98,129,234, 10, 10,191,157,209, 66,171, 19, 33, 62,110,
+ 10,118,237,218,197,137,252, 87,204, 1,186,118, 50,191,239,210, 17,112,213, 19,160, 84, 42,143, 43, 20, 10,121,105,194,132, 3,
+ 97,123,246, 75,195, 70, 60, 12,195,209, 35,216, 21, 55,161, 70, 95, 93, 45, 7,112,132,103, 87, 31, 49,105,171,229, 23,223,156,
+116, 32,244,189, 44,105,199,193, 35,160,185,120, 20,159,191,148, 80, 83, 87,203, 91,222, 17,157,182, 86,190,230,245,127, 31,248,
+207,127,183, 72,163,135, 13, 71,193,249,211,120, 57,105, 70, 77,109, 77,141, 43,109,107, 82, 56, 72,246, 67, 98, 99, 99,185,236,
+ 6,240, 10, 10, 10, 58,173,213,106, 63, 43, 42, 42,234,220,191,127,255, 8,163,209,232,237,227,227,131,172,172, 44,140, 25, 51,
+ 6, 58,157, 14,181,181,181,184,124,249,114, 85,112,112,240,119, 90,173,246, 83,154,166, 53,224,152, 1,144, 29,144,192,215,245,
+255,119, 91, 2, 96,123, 1, 60, 33,199,149,220, 1,182, 48, 94, 62, 20,227,229, 67, 45,239,220,215, 97, 27,202,155,228,158,114,
+ 23,180, 19,117,103,106, 48,115,125, 44,254,243,221, 82,183,219,150,174, 79, 39,193,198, 96,204,244,159,121, 79, 12,107,151, 20,
+128,230,176,252,109, 88, 31,196,170, 61,158,178, 82,236,122, 4,184,122, 0, 60, 77,254,140,178, 99,229,222, 39,236, 50,190,242,
+156,197, 2,240,149,167,209, 17, 74,163, 3, 17,137,128, 35,249,230,181,126, 38,224,207,188,238, 63,133,151,188,234,106, 66, 81,
+150,101,118, 74,100,150,241,243, 15,128,166,134, 6,161,129,248,248, 88,236,218,181,203,233,120,200,135,129,164,204, 0,130,164,
+ 64,201, 45,192,207, 23,160, 9, 16, 32, 1,222, 85,184,166, 4, 0, 56, 66, 87, 87,203,243,227, 39, 28,104,185,226,109,105,222,
+138,229, 53,117,174,145,127, 3, 37, 32,111, 81,194, 1,191,151,222,148,230,124,248,150, 43,228, 95, 47,203,104,208, 79, 88,254,
+202,243,251,231,206, 79,145,174, 95,155, 90, 83, 91, 83, 35, 87, 42,149,103,216,238, 97,165, 82,233,173, 80, 40,140,124, 29, 32,
+158,244, 10,216, 34,127,138,162, 72,108,108, 44, 0, 96,226,196,137,132,162, 40, 71,138,128, 84,175,215,215,136, 68,162,220,208,
+208,208, 78,213,213,213, 47,158, 56,113,162,195,192,129, 3,105,163,209, 88, 91, 89, 89,121,243,204,153, 51,127,132,135,135, 23,
+182,110,221,186, 72,171,213,102, 26,141,198,155, 73, 73, 73,154, 1, 3, 6,112, 82, 0,152,164, 64,238, 64,169, 84,114, 38, 84,
+ 87,150, 0,220,249,190, 61, 47,128, 39,230, 76,119,229,232,180, 94, 30,173,239,105,121, 21,119, 68, 72, 53, 42, 16,113, 44, 4,
+211, 63,114,174,152, 84,220,113,126,203,221, 75,242,183,171, 0,112,216,235,207,171,129, 60,114, 7,240,145, 75,177,162,252, 93,
+ 38, 47, 42, 31,212,180,240,241, 4,151, 0, 52,202,215, 80,105,249,227,183,199,220,114,189,106, 79,145,171, 85,191, 16, 38,207,
+128, 37, 64,144, 98,121, 67, 92,146,247,249,130, 0,182, 82,224,138,188,122,185, 83,167,222, 29, 19, 38,224, 79,165, 82,229,185,
+ 34,143,208, 13,199,184,166, 10,136,141,141,197,190,125,251, 40,198,170,226, 52, 30,159,121,238,129, 97,229,227, 63, 98,168,174,
+150,127,191,226,205,140,186,234,234,153, 30,176,174,143,232,107,171,229,135,214,191,149,161,171,173,158,165, 84, 42,143,186, 58,
+153, 27,141,198,195, 70, 99,141,124,125,122, 90, 70, 77, 77,205, 76, 0, 71,172,101,185, 64,254,158, 64,131, 25,213,154,252,153,
+184, 29,118,144, 96, 92, 92,156, 35,121,197,122,189,222,151, 16, 82, 77,211,180, 82,175,215,255, 20, 22, 22,214,166,162,162,130,
+ 90,182,108, 89, 85,101,101,101,121,199,142, 29,171,107,106,106, 52,122,189,190,202, 96, 48,212, 61,247,220,115, 90,158, 22, 54,
+229,129,123, 38,175,169, 58,180, 41,101, 55, 55,222,127,255, 35, 10, 0,121,252,137, 49,136,236, 19,110,183,222,249,115, 87,240,
+213,246,111,152,250,247, 76,222,250,245,235,235,229, 57, 52,152, 79, 20,225,171,237,223, 48,245, 29,226, 94,146,191, 61, 5,192,
+211, 13,104,178, 11,178,144, 40,101,203, 90,230, 3, 15, 71,245,115,201, 22,232,214, 15,240, 57,244,199, 19,222, 0, 23,198,196,
+238,123,119,229,237,219,183,143,215, 88,185, 19,241,207,133,180,117,213, 85, 93, 60, 41, 79, 91, 83,221,197, 67,150,220,145,154,
+234,234, 46,247,217,179, 76, 1,192,166, 77,155,136, 72, 36, 2,243,199,118, 97,203,229,114,208, 52, 13,154,166,145,148,148, 68,
+ 57,217, 21, 64, 25,141, 70,127, 66,136,137,166,233, 58,131,193,240,131,151,151, 23, 37, 18,137,124, 1,248,210, 52, 13,147,201,
+228,101, 52, 26,197, 70,163,177,195,115,207, 61,119,145,245,221, 38, 63, 4, 72,128,103,148,128, 33, 67, 70,146,131,251,119,163,
+184,172, 10, 33,193,181,245,159,149,222,241, 71, 88,187, 22,232,217,179,167, 83,178,110, 42,121,235,215,175,167, 30,121,228, 17,
+178, 46,125, 31, 10,254,188,213, 72, 94,215, 78,109, 16, 17, 17,193,137,252,155, 10,142,114,164, 80,174,158, 35, 44, 64,128, 0,
+ 1,247, 1,106, 89,132, 78,179, 12, 27,111, 86,249, 13, 0, 45, 97, 14, 26, 23,136, 95,128, 0, 7, 30, 0, 1, 2, 4, 8,248,
+187, 64, 98, 81, 2,104, 22,241,139,112,247,228, 65,111, 0, 29, 44,175,105,161,187, 4, 8, 16, 20, 0, 1, 2, 4,252, 51, 32,
+ 2, 32,101,189,103,136, 95,204, 34,125,218, 82, 79,176,254, 5, 8, 16, 20, 0, 1, 2, 4,252,143,204,105, 2,233, 11, 16,224,
+ 64,123, 22, 32, 64,128, 0, 1, 2, 4,252, 47,107,203,167, 79,159,102, 31,164, 67,172,146,232, 16, 52, 60,104,167, 88,165, 82,
+133, 49,239,109, 5, 19,178,229,241,197, 63, 81,158,141,109,139,148,208,127,194,120,252, 93,228,133,133,133,213,215, 41, 46, 46,
+166,248,202, 75, 78, 78,134, 66,161,160,132,251,207, 53,153,194,243, 43,200,227, 35,143,183, 2,192, 19,109, 57,214, 35,137,137,
+137,188, 51, 75,217, 59, 47, 30,141,147,145,216, 58, 13,208, 86,157,123, 14,134, 96, 44,123,225,213, 42,149,170, 62, 91, 23,223,
+124,226, 77,133,184,184,184,152,236,236,236,122, 18,140,141,141,149,237,219,183, 47,239,159,168,237,218, 26,143,139, 23,205, 59,
+195,122,245,234,213,220,205, 35, 9,147, 20,200,250, 90,105,243,158, 77,152,164, 32,150,207,236,222, 56, 9,147, 28,158, 20,136,
+172,175,149, 46,223,116, 97, 97, 97, 36, 46,238,238,174,194,236,108, 16,103, 74,128, 51,172, 94,179, 58,102,207,161, 61,136,136,
+140, 80,131, 2, 46,158,186, 32, 27, 54, 96, 56,210,223, 79,231,117,255,205,156, 57,179,209,117,103,100,100, 80, 16, 32, 64, 64,
+147, 41, 0, 98,174, 21,163,163,163,121, 11,119,160, 0,216, 36, 81,235,131, 54,120, 16,173, 43,154, 19,151,201,133,168, 84, 42,
+164,164,164, 32, 53, 53, 85,237, 32, 77, 39,151,223,111, 80,167, 99,248, 3, 0,128,155, 58, 29,140,218, 58,115, 97, 69, 21, 67,
+114,220,210, 31,215, 79,228,217, 13,114, 10, 88,114,139,243, 58,227, 93, 68,153,179,235, 49,255, 1,167,175,155, 99,114,110, 48,
+ 30, 12,241,187, 49, 30,158,188, 6,146, 48, 73,129, 9,242,135,116,128, 66, 98, 33,122,151,126,131,165, 64,120, 28,122,125, 10,
+114,114,146, 48,110,220, 38,196,197,165, 34, 59,219,220, 87,174, 40, 2, 79,191,252, 52,169,104,117, 27,107,149,171, 17,236, 31,
+ 12,218,104,130,142,212,169, 15,254,116,104,220,116,211,227,100,120,196, 8,217,188,121,243,156, 42, 2, 51,103,206, 36,201,201,
+201, 54,251, 84, 80, 2, 4,220, 11,196,199,199,215,207, 25,115,230,204,193,150, 45, 91, 26,112,207,236,217,179, 27, 28, 78,229,
+ 44,185,148, 51,121, 92,143,170, 62,125,250,180,181,151,192,163, 10, 0,175,248, 1, 91,167,216,121, 2, 27,149,202,152, 23,220,
+ 76,154,194, 39,135, 54, 71,203,157,164,164,164, 96,213,170, 85, 0, 80,255,223,246, 79, 19,126,222,128,160, 22, 56, 91,180, 29,
+126,232, 4, 19,126, 68,217,230,147, 56, 83, 88,142, 41,171,182, 54,219, 3,112,246,215,115,232,215,183, 15,104, 2,156, 59,103,
+126, 13,220,125,205, 46,167, 9,231, 49, 33, 28,199,131,226, 58, 30,179,102,205, 2,128,250,255, 54,137,157,162, 0,199, 63, 77,
+ 30,123,236, 0,190,253, 86,238, 81, 37, 96,130,252,161,218,164,164, 36,127, 96, 19,178,190,118,141,216,221,177,240,157, 89,255,
+ 0, 48,117,106, 38,114,114,204,255,147,146, 10,193,120, 4,248,120, 3, 54,110,220, 24,163,254,253, 59,245,243,201,179, 49,168,
+237, 64,248,181,108, 9,162, 55,130, 38, 38,120,121,139,209,117,116,215,156,223,162,126,199,170, 77,169,234,181,107,215,202, 94,
+125,245, 85,167, 74,192,173, 91,183, 26,188,143, 29, 25,128,161,243,126,132, 78, 55,189,193, 64,238,216,177,195,229,254,145,203,
+229,228,192,129, 3, 30,235, 95, 79,203,107, 74, 36, 39, 39,199,184,155,214, 55, 57, 57, 57, 6,112, 61, 61,176, 82,169,236,247,
+218,107,175,221,208,104, 52, 97, 0,198,194,124, 8,103, 47, 0,167, 97, 62, 20, 10, 0, 62, 7,240,219,189,238, 31,246, 89, 15,
+115,230,204, 65,118,118,118, 3, 78,153, 61,123, 54,248,100, 46,117, 38,175,254,121,207,202, 34, 9, 9, 9, 20, 23,242,103,202,
+172,149,128, 6, 10, 64, 74, 74, 10, 41, 42, 42, 2, 0, 68, 68, 68,128,125,216,140, 74,165,106,240,222,250,115, 71, 22,123, 89,
+ 89,153, 90,165, 82,113,246, 4, 88,159,117,239,136,132, 95,176,164,194,180,230, 1,190, 46,246, 77,155, 54, 57,173,147,155,155,
+203,137,187, 18, 19, 19,237,146,254,226,197,139,145,154,154, 10,182,130,192, 5, 29,195, 31,192,245, 59,149,216,245,194, 84,180,
+166, 70,160,240,227, 5,136,152, 28,129,111,154,153,252, 1,212, 19, 62, 0,244,233,211,167, 65, 57,227, 25, 96,151,123,218,178,
+119, 66,196, 36, 49, 49,209, 46,233,111,219,182, 13,169,169,169,144,143, 24,136, 3, 63,158, 2, 2, 3,128,170,154,123,222,135,
+251, 15,156,244, 7, 54, 97,255,129,147, 30,145,119,243,189,214, 14,181,152,246, 11,203, 57, 61, 32,108,215,127, 82, 82, 14,226,
+226,186,212,255,103, 16, 23,215,133,179, 18,240,241,151, 31, 99,229, 71,239, 96,100,183, 24,152,234,234, 96, 52, 25, 65,121, 83,
+ 0,188, 64, 64,227,230, 95, 37,232,213,182, 39,150,190,176, 20,239,164,189,195,201, 27,101, 61,217,197,134,110,179, 73,248,211,
+167, 79, 39,174, 40, 1,114,185,156,236, 95,118, 0, 19,224, 25,210,150,203,229, 36, 45, 45, 13, 0,238,107, 37, 32, 57, 57, 57,
+166,178,178,146,241,150,185,213,206,202,202, 74,102, 78,119, 73,142, 66,161, 40, 2, 48, 11,192, 41, 0,159, 2, 24, 3, 96, 60,
+128,127,179, 20,128, 91,205,209, 79,236,227,158, 1,224,235,175, 27,107,240, 95,127,253, 53, 8, 33,152, 52,105, 18,197, 87,222,
+198,141, 27, 71, 89,230, 57, 2,128, 10, 9, 9,177, 75,252,214, 72, 74, 49,115,204,166,212,197, 54, 63,111,160, 0,164,166,166,
+ 58, 12, 2,100,191,183,254,220, 81, 16, 2,163, 84,204,159, 63, 95,157,146,146, 2,235,131,114,172, 15,207, 81,169, 84,142,210,
+ 23, 82, 28,202,154,245,161,250,234,171,175,236, 18,191, 69,209,170, 39,255,197,139, 23,115,146,249,103, 81, 49, 52,187,151, 67,
+ 58,251,191,232, 24,254, 0,218,183,246, 67,209,238, 34, 51,249, 7,181, 48, 47, 1,248,120,241,110,107, 92, 92,156,140,189, 12,
+ 96,121,207, 75, 6, 77,128,176, 0,224,195, 25,192,115,219,128,182,254,192,197, 10,219,229,231,239,240,107,159, 61, 69,142,143,
+215,230,237,183,223,182, 75,252, 0,144, 54,107, 34,214, 29, 60,142,144,136, 14, 40,189,122,211,169,245, 15, 0, 28,189, 0,156,
+189, 4,102, 11, 95, 97,211,210,231,178,254,111, 11,105, 95,120, 54,201, 39, 67,250,204,127,125, 92, 87,136,179, 11, 56,127,191,
+ 86, 91,139, 17,211,135,171,163, 59, 12, 69,157, 70, 3,111, 95, 95,120,123,223,157,130,138, 10, 10,176, 39, 43,235,250,236,103,
+103,117,236,236, 27,134,129,143, 14, 24, 45,213, 5,198,124,242,241, 39,188,172,198,119,247,207,194,247,223,127, 15,160, 97,219,
+118,236,216, 65,241, 85, 2, 24,242, 71,231,181,216,191,236, 85,183,149, 0,185, 92, 78,210,211,211,209,189,123,119,172, 91,183,
+ 14,115,231,206,189,239,148, 0, 43,226,247,136, 60, 70,150, 27,222, 4, 25,128, 71, 1,108, 3, 80, 3, 32, 4,192,239, 0,174,
+226,110,238,135,102,129,245,113,207,108,183,189,181, 11, 63, 33, 33,129, 56,115,225,239,223,191,191,193,146,241,158, 61,123,212,
+108,171,159,171, 66,204,144, 63,243,122, 83,234,226, 70, 94,128,123,146, 7,128,181,246,138,162,162, 34,180,107,215,174,145,130,
+192,148,149,149,149,113,205,115,239, 44, 24,144,243,132,249,248,227,143, 55,217,181,179, 9,204,150,213,111, 33, 33, 91,109,111,
+ 0, 45,138, 81, 51,121, 40, 72,224, 2, 96,244, 50,212,224, 75, 96,243, 73,139,102,182, 0, 62,207,172,131,209,200, 63,209, 89,
+118,118,118, 30,187,159,248,146, 63, 0,148,125, 2,188,181, 17,120,160, 19,112,115,175, 24, 25, 91,244,152,181,221,126, 57, 47,
+243,158,120,150,196,216,193,126, 55,190, 94,133,192, 72, 9,164,221, 94,193, 87,171,158, 67,255, 62, 33,232, 49,241, 29, 78,227,
+193,165,233, 60,150, 10, 40, 0,196,138,252, 41,134,248, 93, 89,215,231,106,225,115,129, 62,174,171,205,242, 28, 43, 79,128, 51,
+220, 40,187,129,177,137, 99, 17,216, 34, 24, 38,202,136,195,223,255,128,234,154, 26,196,197,199,227,175,178, 50,236,204,220,133,
+ 57,207,206,234,232, 43,241,133,136,248, 96,220, 67,227,114,127, 87,175,115, 73,161,191,115,231,142,219,215,205, 38,127, 0,110,
+ 43, 1,114,185,156,172, 88,177, 2, 93,187,154,251,179, 75,151, 46,184,159, 60, 1,158, 38,126, 27,214, 63,243,218,149,107,237,
+109,121, 38,125, 0,248, 3,136, 4,112, 1, 64, 71, 0, 85, 0, 42, 60,240,204,186, 4,235,227,158,231,204,153, 83, 95,198,184,
+240,153,185,140,139,103,218,222,114, 1,155,252,185, 40, 2, 92,112,207, 87,242, 20, 7, 0, 0, 9,178, 73, 68, 65, 84, 18, 1,
+181,107,215, 78,150,152,152,216,104, 41,192,114,182, 61, 0,240,142, 17,176, 23, 12,232,200,114,180,167,160, 52, 5, 24,235,222,
+158,187,159,171,245, 15, 0, 7,151,172, 64,220,202,247, 97, 28, 61, 2,222, 0,164,199, 10,240, 77, 97, 57, 0,192, 56,122, 46,
+ 12,191,182, 1,213,246,223,188, 73,138,135,151,197, 46,202, 39,125,137,185,207, 94,195,165, 23, 22, 65,243,173, 30, 33,109, 28,
+151,123,194, 3,224,138,114,176,109,219, 54,179, 54, 28,247, 8,142,151,148, 33,176,127, 32,174,231, 20, 2, 18, 95, 76,157,251,
+ 12, 90,117,154,216,156,243,175,189,168,127,143,120,181, 28,237, 16,112, 22, 59,144,147,148,131,113,155,198, 97,106, 38,144,148,
+ 99,126,157,147,148,195,219, 11, 80,163,171, 70, 27,191,214, 48,234,106, 65, 68, 4,131,135, 12,193,238,221,187,117,233,239,191,
+ 47,161, 9,193, 83, 51,158, 66,171,214,173, 80, 91, 83, 3,163,201,136, 64,159, 22, 48,136, 12, 46, 93,111, 69, 69, 69,131,221,
+ 1,124, 3, 2, 27,145, 63, 3, 23,149, 0,185, 92, 78, 82, 82, 82, 48,100,200,144, 6,229,125,250,244,193,187,239,190,219,172,
+ 74, 64, 83, 17,191,181,245, 15, 0, 37, 37, 37,174,122, 1,126,130,121,189,191, 10,102,215,255, 88, 0,151, 1,244, 3,144, 5,
+ 96, 43, 0,135, 55,139, 82,169, 20, 41, 20, 10,143,167,131,102,187,236, 89,129,122,245,159,179,151, 4, 74, 75, 75, 99,156, 29,
+244, 69, 8,161, 24,130,103,187,250, 19, 18, 18,108,150,123, 82, 1, 32, 86,164, 72,120,126,238, 16, 17, 17, 17,245,164, 31, 29,
+ 29, 45, 99, 98, 3, 24,239, 64, 68, 68,132,154, 89, 46,104,174,137,215,147,112,182,214,207,178,254,157, 98,202,198, 76,144,248,
+112,220, 28,246, 16, 90, 99, 4,252,166,174,131,241,198, 95, 64, 80, 11,120,151,127,137,189,233,249,128,151,151, 43,215,238,182,
+ 38,121,230,181,127, 97,208, 0, 32, 98,238, 57, 68, 74,159,197,239, 15, 38, 2, 31, 46,178, 91,222, 92, 30,128,212,212, 84,140,
+ 28,220, 3,163, 71,116, 71, 92,223, 69, 88,147,190, 1, 23,242,175,227,133, 81,131, 80,154,181, 31,149,119,170, 60,117, 63,216,
+ 90, 42,112, 74,208,108,194,247, 36,249,219,145,201, 9,197,197,197, 84, 88, 88, 24,153,154,217, 80, 33, 0,128,113,155,198, 65,
+156, 93,128,236,236,194,250,157, 0,236, 92, 1,182,110, 55,154,166, 97,162, 1, 66, 27,225,235, 39,193,140,167,159,150,188,245,
+230,155,104,223,190, 61,221, 49, 36, 68,164,211,212,192, 68, 0, 66,155, 64,211,206,231,234,140,140, 12,106,204,152, 49,164,188,
+188, 28, 85, 85, 85, 13, 20, 71,171,221, 1,156,119, 5,200,229,114,178,230,185,243,128,164, 43, 80,250, 81,227, 10,146,174, 88,
+243,220,121,128,163, 18, 32,151,203, 73, 66, 66,130,172, 79,159, 62,234,242,242,242, 70,159,135,133,133, 33, 33, 33, 65,134,251,
+ 60, 38,192, 93,235,223, 77, 47, 0, 91, 97,232, 0,224, 12,128,201, 0, 56, 31,101,218, 20,228, 15, 56, 94, 2,176, 97,204,228,
+ 57,187,246,248,248,120,194,124, 63, 62, 62,158, 88,203,219,178,101, 11,226,227,227, 9,223, 93, 1, 92, 20, 0, 62,137,128,108,
+125,110, 19,137,137,137, 54,189, 0, 12,217,183,107,215, 78,150,146,146,162,102,214,100, 19, 19, 19, 29, 6, 21, 58,178, 14, 93,
+216, 95,223, 36,219, 0, 25,235,222, 81, 48, 32, 31, 20,190,151, 4,159,169,235,160, 45,185, 4,239, 99,235, 96,200,156, 11,106,
+194,106,236,249,247, 52, 92,221,115, 5,113,105,159, 2,222,205,147,217,121,145, 10,200, 73,219,141,200,171,227,128, 91, 26, 44,
+ 28,179,200, 97,185, 39, 60, 0,174, 90,255, 89,187, 87,192,171, 99,111, 72,209, 29,197,223,111, 66, 53, 69,240,243,165,107, 24,
+125,238, 58,167,230,124,251,173,220, 46,217, 3,128,229,115,155,245,184,146,191,157,123,212, 45, 98,240,196, 14,129,164,156,187,
+196, 15,160,145,229,207, 4, 12,102,103, 23,218,252,126,160, 95, 32, 74, 42, 75, 48,164,243, 80,104,235,116,128, 86, 7,163,222,
+128,165, 41, 41,160, 68, 16,213,106,106, 64,211, 38, 24, 77, 4,190,222, 62,248,171,230, 47,248,152,156,239, 54,254,230,155,111,
+234,175,109,230,204,153,132,153,111,216,187, 3,110,220,184,193,249, 58,205, 36,108, 86, 2,122,133, 55,254,253,139, 87,244,152,
+191, 57, 18, 92,201,218, 82,143, 12, 25, 50, 4, 97, 97, 97,141, 62, 63,119,238, 28,178,178,178,212,205, 69,254, 22,107,156, 98,
+ 60, 1, 37, 37, 37, 77, 98,253,123,192, 11,192, 96,172,133, 72,235,238, 7, 37,199,209, 18, 0,187,156,239, 18,128,167,150, 20,
+248, 40, 0, 77, 2,198,242, 7,128,232,232,104,153, 74,165, 82, 51,174,127, 59,202,129,236,242,229,203,206, 98, 1, 40,142,101,
+ 30,181, 50,185,118, 56, 99,253,219, 34,126, 70,209,225,211,222, 51,133,229, 48,252,250, 22,110,226, 71,132, 76, 88, 13, 84, 86,
+161,112,211, 2,116, 73, 94,139,210,173, 11, 0, 31,111, 64,212, 60,153,157,139, 53, 64,175,118,147, 57,151, 55,135, 7, 32, 53,
+ 53,181,102,250,232,161, 55, 90,210,193, 15,212,194, 71,146,185,118, 46,214,239, 61,141,133,227, 31,198,172,247,191,192,180,255,
+247,127, 77,234, 13,114,116,137, 89, 95, 43, 97, 73, 2, 68,185,171,156,186,227,234,119,228, 5, 72,202,201, 33,182,200,159,109,
+253, 59, 67,104,187, 80, 28, 60,156,131,225, 15, 12,135,127,128, 20, 52, 77, 32, 34, 70,208, 20, 5, 66, 8, 76, 4, 48,210, 4,
+ 70,163, 17,218, 74, 13,246,253,178, 15, 98,147,152,247,214, 97,235, 93, 1,175,207, 29,129,216,208, 34, 80,135,184,203,176,167,
+ 4,240, 37,127,107, 37, 32, 45, 45, 13, 29, 58,116,184,171,216, 23, 22, 34, 53, 53, 21,247,131,229,239,105, 69,192,150,245,239,
+166, 23, 0, 0, 98, 0, 60, 8,224, 13, 52,115,240, 31, 3,165, 82,217,224, 30, 45, 45, 45,133, 82,169,116,228,137,112, 42,143,
+189,164, 80, 90, 90, 26,163, 84, 42, 41, 0,164,180,180,148,218,184,113, 35, 97,121,111, 41,133, 27,219,224,239,137, 2, 96, 29,
+245,111, 73, 86,211, 72, 57, 96,191,118,211,130,231,125, 99,121,112, 27,160, 77,235,223, 85,226,103, 48,101,213, 86,236, 2, 48,
+126,101, 44,136,106, 1,168,199,215,224, 76, 97, 57,168, 86,193, 40,248,179,202,108,253,243, 95, 2,240, 8,236,237,247,119, 39,
+ 15, 0, 23,133,139,171,114,176,109,219, 54, 61,128,234,231, 98,250, 85,189,178,250,191,250, 37, 75, 83,116,109, 91,180, 43, 63,
+127,161,184,253,172, 11, 95, 72,209,204,187, 70, 28,144, 51,123,137,134,231,142, 2,207,195, 22,249, 51,150, 63, 0,167, 1,129,
+243,230,205,163,134, 63, 54, 60, 94, 61, 34, 47, 43,177,239, 52, 84,233,170, 64,137, 0,115, 74, 17, 26, 38, 19, 1,109, 52, 34,
+192, 55, 16, 71, 43, 79,225,242,177, 2,236, 84,238,204,115,187,225,133,207, 3,224,191, 13,176,129, 18,208,161, 24, 23,111,132,
+185, 68,254,214, 74,192,186,117,235, 16, 20, 20,132,242,242,114,172, 88,177, 2,247,155,219,223, 19,138,128, 61,235,223, 69, 47,
+ 64,123,152,163,254, 69, 0, 6, 2,152, 15,160,240,126,233, 47,133,101, 43,186,167, 96,189,164,176,103,207,158,239,155,170,237,
+247, 36, 15,128, 61,143,192,154, 53,107,100,214,138, 66, 98, 98,162,154,239, 69,176,137,224,126, 72,177,203,182,254,173,183,255,
+ 89,250,151,221,175,156, 27,204, 40, 1,147, 87,126, 2,146, 9,180,153,165, 68,222, 43,211,240,112,234,231,128,143, 15, 2, 36,
+226,102,185, 94,246, 30,127, 91,175, 93,204, 3, 96, 4, 32,178,140,173,200,205,241,184, 57,125,244,208,146, 87, 54,101,135, 47,
+157, 51,182, 69,104, 72,140, 30,192,217,196,196,196,150, 48, 31, 37,235,210,120, 48,183,220,183,223,202,153,136,127, 87,148, 59,
+202,153, 5,207,135,208,155, 42, 25,144, 61, 88,147, 62,227, 17,104,213,170,149, 77,237,236,232,183, 71,247,132,245,124, 0,166,
+233,198,179,143, 62,240,104,191,214,129,173,161, 51,232, 64, 8,129,216, 91,140, 10,109, 45,142,255,249, 45,182,125,150, 1, 89,
+111,153,108, 39,118,186,221,198,119,247,207, 66, 70, 70, 6, 46, 95,230,159, 3,224,174, 18, 0,183,200,159, 45,111,238,220,185,
+ 36, 45, 45, 13,139, 22, 45,194,253,188,230,207, 86, 4,242,242,242, 92,250,174,163, 58, 60,100, 38,192,188,223, 95, 7,224, 53,
+ 0,191, 0, 48,225, 31, 10,235, 37, 0,190, 24, 48, 96, 0, 78,159, 62,141, 77,169,139, 27,229, 1,112,152, 8,168,169,242, 0,
+216,242, 8,216, 35,122, 23,189, 0,110,161,169,182, 1, 50, 3,168, 84, 42,145,155,155, 75, 23, 21, 21,177,137, 76,166, 82,169,
+120,107,142, 83, 86,109, 5, 88,137,127, 30, 93,186,177,254,181,166,121,238, 87,167,119, 41, 77, 92,234,187,116, 0,183, 97,222,
+254, 51,195,205, 54,150, 62, 23,211,175,110, 76,238, 79, 45,158,122,243, 83, 40,149, 74,113,110,110,110, 7, 52, 76,103,237,210,
+120, 52,181, 39,192, 89,126,127,167, 51,103, 19, 44, 9,216, 35,127,125, 92, 87, 32,219,185, 97,182,253,163, 29, 84,128,151,148,
+ 28, 11, 59,142, 17, 67, 71,160, 99, 96, 71,128, 38,248, 75, 87,142,163, 39,143,162,244,124, 41, 70,245, 26, 37,123,249,229,151,
+155,125, 60,216, 74,128,167,200,154,241, 4,252, 93, 2,254,220,205, 2,232, 1,108,178,252,253, 79,192,122, 73,193, 29, 23,191,
+189, 4, 64, 54, 21,128,166,194,252,249,243,109,146,189,213, 73,108,108,168, 29, 36, 2,178, 75,180,174,162, 41,182, 1,166,166,
+166, 66,169, 84, 26,115,115,115,189, 45, 75, 7, 12,249,143,114,112,221, 54, 97, 57, 76, 73,221, 4, 67, 67, 28,148, 83,205,116,
+243,251, 90,238,203,101,150, 34,147, 66,161,120,218, 77,177,190, 99,222,248, 56, 95,169, 84, 62,146,155,155,139,220,220, 92, 29,
+ 0,137,229,207, 19,196, 79,185,147, 26,216, 25,201, 39, 76, 82, 52, 24, 47,190,196,237,137, 37,129,226,226, 98, 42, 39, 41,135,
+132,206, 13,149,161,179,237, 58, 37, 73, 57,106,174,241, 0, 91, 62,216, 66,173, 93,187, 54,102,235,202,173, 8,235,250,160, 26,
+ 0,126, 63,247,155,108,226,152, 56,164,111, 72,207,219,142,237, 46,181, 51, 35, 35,131, 26, 59,118,108,163, 93, 1, 6,131,193,
+173,235,247, 52, 89,255,211,162,253,239, 3,210,164, 20, 10, 5,249, 39, 92,139, 39,150, 20, 24, 47,128,117, 25,103, 5,192,153,
+ 37,206,195, 82,119,245, 70, 39, 77, 44,223, 83,223,183, 41, 47, 49, 49,145,228,230,230,122,179,251,139,237, 97,225,169,160,228,
+ 53, 17, 33,223,143,147, 80, 32,128, 26,115, 66,126,138, 2,224, 7, 39,251,123, 57,142,199, 31,185,185,185,204, 54,160,170,136,
+136,136,182,169,169,169,190,247, 67, 95, 54,165,219,222,147,178,139,139,139,169,226,133,197, 30,235, 3, 86,158,255,250,239, 29,
+253,238,152,219,237, 60,116,232,144, 64,174,255,112,178,103,115,152, 66,161, 48,120,146,252,149, 74,101,144, 66,161,168,248,187,
+247, 19, 23, 35,154,114,245, 28, 97, 1, 2, 4, 8, 16, 32, 64,192,223, 23, 34,161, 11, 4, 8, 16, 32, 64,128, 0, 65, 1, 16,
+ 32, 64,128, 0, 1, 2, 4,252, 15,224,255, 3, 40, 50, 24,122,163,191,209,130, 0, 0, 0, 0, 73, 69, 78, 68,174, 66, 96,130,
0};
diff --git a/source/blender/src/buttons_editing.c b/source/blender/src/buttons_editing.c
index 28449a3fcd7..59652b6e68c 100644
--- a/source/blender/src/buttons_editing.c
+++ b/source/blender/src/buttons_editing.c
@@ -987,7 +987,7 @@ static uiBlock *modifiers_add_menu(void *ob_v)
/* Only allow adding through appropriate other interfaces */
if(ELEM3(i, eModifierType_Softbody, eModifierType_Hook, eModifierType_ParticleSystem)) continue;
- if(ELEM(i, eModifierType_Cloth, eModifierType_Collision)) continue;
+ if(ELEM3(i, eModifierType_Cloth, eModifierType_Collision, eModifierType_Fluidsim)) continue;
if((mti->flags&eModifierTypeFlag_AcceptsCVs) ||
(ob->type==OB_MESH && (mti->flags&eModifierTypeFlag_AcceptsMesh))) {
@@ -1575,6 +1575,18 @@ static void build_uvlayer_menu_vars(CustomData *data, char **menu_string,
}
}
+void set_wave_uvlayer(void *arg1, void *arg2)
+{
+ WaveModifierData *wmd=arg1;
+ CustomDataLayer *layer = arg2;
+
+ /*check we have UV layers*/
+ if (wmd->uvlayer_tmp < 1) return;
+ layer = layer + (wmd->uvlayer_tmp-1);
+
+ strcpy(wmd->uvlayer_name, layer->name);
+}
+
void set_displace_uvlayer(void *arg1, void *arg2)
{
DisplaceModifierData *dmd=arg1;
@@ -1744,7 +1756,7 @@ static void draw_modifier(uiBlock *block, Object *ob, ModifierData *md, int *xco
// deletion over the deflection panel
// fluid particle modifier can't be deleted here
- if(md->type!=eModifierType_Collision && !modifier_is_fluid_particles(md))
+ if(md->type!=eModifierType_Fluidsim && md->type!=eModifierType_Collision && !modifier_is_fluid_particles(md))
{
but = uiDefIconBut(block, BUT, B_MODIFIER_RECALC, VICON_X, x+width-70+40, y, 16, 16, NULL, 0.0, 0.0, 0.0, 0.0, "Delete modifier");
uiButSetFunc(but, modifiers_del, ob, md);
@@ -1815,6 +1827,8 @@ static void draw_modifier(uiBlock *block, Object *ob, ModifierData *md, int *xco
height = 31;
} else if (md->type==eModifierType_Collision) {
height = 31;
+ } else if (md->type==eModifierType_Fluidsim) {
+ height = 31;
} else if (md->type==eModifierType_Boolean) {
height = 48;
} else if (md->type==eModifierType_Array) {
@@ -1828,6 +1842,25 @@ static void draw_modifier(uiBlock *block, Object *ob, ModifierData *md, int *xco
height = 94;
} else if (md->type==eModifierType_Explode) {
height = 94;
+ } else if (md->type==eModifierType_Shrinkwrap) {
+ ShrinkwrapModifierData *smd = (ShrinkwrapModifierData*) md;
+ height = 86 + 3;
+ if (smd->shrinkType == MOD_SHRINKWRAP_PROJECT)
+ {
+ height += 19*5;
+ if(smd->projAxis == 0) height += 19;
+ }
+ else if (smd->shrinkType == MOD_SHRINKWRAP_NEAREST_SURFACE)
+ height += 19;
+ } else if (md->type == eModifierType_Mask) {
+ height = 66;
+ } else if (md->type==eModifierType_SimpleDeform) {
+ SimpleDeformModifierData *smd = (SimpleDeformModifierData*) md;
+ height += 19*5;
+ if(smd->origin != NULL) height += 19;
+ if(smd->mode == MOD_SIMPLEDEFORM_MODE_STRETCH
+ || smd->mode == MOD_SIMPLEDEFORM_MODE_TAPER )
+ height += 19;
}
/* roundbox 4 free variables: corner-rounding, nop, roundbox type, shade */
uiDefBut(block, ROUNDBOX, 0, "", x-10, y-height-2, width, height-2, NULL, 5.0, 0.0, 12, 40, "");
@@ -1835,6 +1868,8 @@ static void draw_modifier(uiBlock *block, Object *ob, ModifierData *md, int *xco
y -= 18;
if (!isVirtual && (md->type!=eModifierType_Collision)) {
+ uiSetButLock(object_data_is_libdata(ob), ERROR_LIBDATA_MESSAGE); /* only here obdata, the rest of modifiers is ob level */
+
uiBlockBeginAlign(block);
if (md->type==eModifierType_ParticleSystem) {
but = uiDefBut(block, BUT, B_MODIFIER_RECALC, "Convert", lx,(cy-=19),60,19, 0, 0, 0, 0, 0, "Convert the current particles to a mesh object");
@@ -1845,11 +1880,13 @@ static void draw_modifier(uiBlock *block, Object *ob, ModifierData *md, int *xco
uiButSetFunc(but, modifiers_applyModifier, ob, md);
}
- if (md->type!=eModifierType_Softbody && md->type!=eModifierType_ParticleSystem && (md->type!=eModifierType_Cloth)) {
+ if (md->type!=eModifierType_Fluidsim && md->type!=eModifierType_Softbody && md->type!=eModifierType_ParticleSystem && (md->type!=eModifierType_Cloth)) {
but = uiDefBut(block, BUT, B_MODIFIER_RECALC, "Copy", lx,(cy-=19),60,19, 0, 0, 0, 0, 0, "Duplicate the current modifier at the same position in the stack");
uiButSetFunc(but, modifiers_copyModifier, ob, md);
}
uiBlockEndAlign(block);
+
+ uiSetButLock(ob && ob->id.lib, ERROR_LIBDATA_MESSAGE);
}
lx = x + 10;
@@ -2102,6 +2139,30 @@ static void draw_modifier(uiBlock *block, Object *ob, ModifierData *md, int *xco
uiDefButF(block, NUM, B_MODIFIER_RECALC, "Ratio:", lx,(cy-=19),buttonWidth,19, &dmd->percent, 0.0, 1.0, 10, 0, "Defines the percentage of triangles to reduce to");
sprintf(str, "Face Count: %d", dmd->faceCount);
uiDefBut(block, LABEL, 1, str, lx, (cy-=19), 160,19, NULL, 0.0, 0.0, 0, 0, "Displays the current number of faces in the decimated mesh");
+ } else if (md->type==eModifierType_Mask) {
+ MaskModifierData *mmd = (MaskModifierData *)md;
+
+ sprintf(str, "Mask Mode%%t|Vertex Group%%x%d|Selected Bones%%x%d|",
+ MOD_MASK_MODE_VGROUP,MOD_MASK_MODE_ARM);
+ uiDefButI(block, MENU, B_MODIFIER_RECALC, str,
+ lx, (cy -= 19), buttonWidth, 19, &mmd->mode,
+ 0.0, 1.0, 0, 0, "How masking region is defined");
+
+ if (mmd->mode == MOD_MASK_MODE_ARM) {
+ uiDefIDPoinBut(block, modifier_testArmatureObj, ID_OB, B_CHANGEDEP,
+ "Ob: ", lx, (cy -= 19), buttonWidth, 19, &mmd->ob_arm,
+ "Armature to use as source of bones to mask");
+ }
+ else {
+ but=uiDefBut(block, TEX, B_MODIFIER_RECALC, "VGroup: ",
+ lx, (cy-=19), buttonWidth, 19, &mmd->vgroup,
+ 0.0, 31.0, 0, 0, "Vertex Group name");
+ uiButSetCompleteFunc(but, autocomplete_vgroup, (void *)ob);
+ }
+
+ uiDefButBitI(block, TOG, MOD_MASK_INV, B_MODIFIER_RECALC, "Inverse",
+ lx, (cy-=19), buttonWidth, 19, &mmd->flag,
+ 0, 0, 0, 0, "Use vertices that are not part of region defined");
} else if (md->type==eModifierType_Smooth) {
SmoothModifierData *smd = (SmoothModifierData*) md;
@@ -2185,7 +2246,7 @@ static void draw_modifier(uiBlock *block, Object *ob, ModifierData *md, int *xco
0.0, 1.0, 0, 0, "Set the UV layer to use");
MEM_freeN(strtmp);
i = CustomData_get_layer_index(fdata, CD_MTFACE);
- uiButSetFunc(but, set_displace_uvlayer, wmd,
+ uiButSetFunc(but, set_wave_uvlayer, wmd,
&fdata->layers[i]);
}
if(wmd->texmapping == MOD_DISP_MAP_OBJECT) {
@@ -2240,8 +2301,11 @@ static void draw_modifier(uiBlock *block, Object *ob, ModifierData *md, int *xco
uiDefBut(block, LABEL, 1, "See Soft Body panel.", lx, (cy-=19), buttonWidth,19, NULL, 0.0, 0.0, 0, 0, "");
} else if (md->type==eModifierType_Cloth) {
uiDefBut(block, LABEL, 1, "See Cloth panel.", lx, (cy-=19), buttonWidth,19, NULL, 0.0, 0.0, 0, 0, "");
+
} else if (md->type==eModifierType_Collision) {
uiDefBut(block, LABEL, 1, "See Collision panel.", lx, (cy-=19), buttonWidth,19, NULL, 0.0, 0.0, 0, 0, "");
+ } else if (md->type==eModifierType_Fluidsim) {
+ uiDefBut(block, LABEL, 1, "See Fluidsim panel.", lx, (cy-=19), buttonWidth,19, NULL, 0.0, 0.0, 0, 0, "");
} else if (md->type==eModifierType_Boolean) {
BooleanModifierData *bmd = (BooleanModifierData*) md;
uiDefButI(block, MENU, B_MODIFIER_RECALC, "Operation%t|Intersect%x0|Union%x1|Difference%x2", lx,(cy-=19),buttonWidth,19, &bmd->operation, 0.0, 1.0, 0, 0, "Boolean operation to perform");
@@ -2448,6 +2512,75 @@ static void draw_modifier(uiBlock *block, Object *ob, ModifierData *md, int *xco
uiDefButBitS(block, TOG, eExplodeFlag_Alive, B_MODIFIER_RECALC, "Alive", lx+buttonWidth/3, cy, buttonWidth/3,19, &emd->flag, 0, 0, 0, 0, "Show mesh when particles are alive");
uiDefButBitS(block, TOG, eExplodeFlag_Dead, B_MODIFIER_RECALC, "Dead", lx+buttonWidth*2/3, cy, buttonWidth/3,19, &emd->flag, 0, 0, 0, 0, "Show mesh when particles are dead");
uiBlockEndAlign(block);
+ } else if (md->type==eModifierType_Shrinkwrap) {
+ ShrinkwrapModifierData *smd = (ShrinkwrapModifierData*) md;
+
+ char shrinktypemenu[]="Shrinkwrap type%t|nearest surface point %x0|projection %x1|nearest vertex %x2";
+
+ uiDefIDPoinBut(block, modifier_testMeshObj, ID_OB, B_CHANGEDEP, "Ob: ", lx, (cy-=19), buttonWidth,19, &smd->target, "Target to shrink to");
+
+ but=uiDefBut(block, TEX, B_MODIFIER_RECALC, "VGroup: ", lx, (cy-=19), buttonWidth,19, &smd->vgroup_name, 0, 31, 0, 0, "Vertex Group name");
+ uiButSetCompleteFunc(but, autocomplete_vgroup, (void *)ob);
+
+ uiDefButF(block, NUM, B_MODIFIER_RECALC, "Offset:", lx,(cy-=19),buttonWidth,19, &smd->keepDist, 0.0f, 100.0f, 1.0f, 0, "Specify distance to keep from the target");
+
+ cy -= 3;
+ uiDefButS(block, MENU, B_MODIFIER_RECALC, shrinktypemenu, lx,(cy-=19),buttonWidth,19, &smd->shrinkType, 0, 0, 0, 0, "Selects type of shrinkwrap algorithm for target position.");
+
+ if (smd->shrinkType == MOD_SHRINKWRAP_PROJECT){
+
+
+ /* UI for projection axis */
+ uiBlockBeginAlign(block);
+ uiDefButC(block, ROW, B_MODIFIER_RECALC, "Normal" , lx,(cy-=19),buttonWidth,19, &smd->projAxis, 18.0, MOD_SHRINKWRAP_PROJECT_OVER_NORMAL, 0, 0, "Projection over X axis");
+ if(smd->projAxis == 0)
+ {
+ uiDefButC(block, NUM, B_MODIFIER_RECALC, "SS Levels:", lx, (cy-=19), buttonWidth,19, &smd->subsurfLevels, 0, 6, 0, 0, "This indicates the number of CCSubdivisions that must be performed before extracting vertexs positions and normals");
+ }
+
+ uiDefButBitC(block, TOG, MOD_SHRINKWRAP_PROJECT_OVER_X_AXIS, B_MODIFIER_RECALC, "X", lx+buttonWidth/3*0,(cy-=19),buttonWidth/3,19, &smd->projAxis, 0, 0, 0, 0, "Projection over X axis");
+ uiDefButBitC(block, TOG, MOD_SHRINKWRAP_PROJECT_OVER_Y_AXIS, B_MODIFIER_RECALC, "Y", lx+buttonWidth/3*1,cy,buttonWidth/3,19, &smd->projAxis, 0, 0, 0, 0, "Projection over Y axis");
+ uiDefButBitC(block, TOG, MOD_SHRINKWRAP_PROJECT_OVER_Z_AXIS, B_MODIFIER_RECALC, "Z", lx+buttonWidth/3*2,cy,buttonWidth/3,19, &smd->projAxis, 0, 0, 0, 0, "Projection over Z axis");
+
+
+ /* allowed directions of projection axis */
+ uiDefButBitS(block, TOG, MOD_SHRINKWRAP_PROJECT_ALLOW_NEG_DIR, B_MODIFIER_RECALC, "Negative", lx,(cy-=19),buttonWidth/2,19, &smd->shrinkOpts, 0, 0, 0, 0, "Allows to move the vertex in the negative direction of axis");
+ uiDefButBitS(block, TOG, MOD_SHRINKWRAP_PROJECT_ALLOW_POS_DIR, B_MODIFIER_RECALC, "Positive", lx + buttonWidth/2,cy,buttonWidth/2,19, &smd->shrinkOpts, 0, 0, 0, 0, "Allows to move the vertex in the positive direction of axis");
+
+ uiDefButBitS(block, TOG, MOD_SHRINKWRAP_CULL_TARGET_FRONTFACE, B_MODIFIER_RECALC, "Cull frontfaces",lx,(cy-=19),buttonWidth/2,19, &smd->shrinkOpts, 0, 0, 0, 0, "Controls whether a vertex can be projected to a front face on target");
+ uiDefButBitS(block, TOG, MOD_SHRINKWRAP_CULL_TARGET_BACKFACE, B_MODIFIER_RECALC, "Cull backfaces", lx+buttonWidth/2,cy,buttonWidth/2,19, &smd->shrinkOpts, 0, 0, 0, 0, "Controls whether a vertex can be projected to a back face on target");
+ uiDefIDPoinBut(block, modifier_testMeshObj, ID_OB, B_CHANGEDEP, "Ob2: ", lx, (cy-=19), buttonWidth,19, &smd->auxTarget, "Aditional mesh to project over");
+ }
+ else if (smd->shrinkType == MOD_SHRINKWRAP_NEAREST_SURFACE){
+ uiDefButBitS(block, TOG, MOD_SHRINKWRAP_KEEP_ABOVE_SURFACE, B_MODIFIER_RECALC, "Above surface", lx,(cy-=19),buttonWidth,19, &smd->shrinkOpts, 0, 0, 0, 0, "Vertices are kept on the front side of faces");
+ }
+
+ uiBlockEndAlign(block);
+
+ } else if (md->type==eModifierType_SimpleDeform) {
+ SimpleDeformModifierData *smd = (SimpleDeformModifierData*) md;
+ char simpledeform_modemenu[] = "Deform type%t|Twist %x1|Bend %x2|Taper %x3|Strech %x4";
+
+ uiDefButC(block, MENU, B_MODIFIER_RECALC, simpledeform_modemenu, lx,(cy-=19),buttonWidth,19, &smd->mode, 0, 0, 0, 0, "Selects type of deform to apply to object.");
+
+ but=uiDefBut(block, TEX, B_MODIFIER_RECALC, "VGroup: ", lx, (cy-=19), buttonWidth,19, &smd->vgroup_name, 0, 31, 0, 0, "Vertex Group name");
+ uiButSetCompleteFunc(but, autocomplete_vgroup, (void *)ob);
+
+ uiDefIDPoinBut(block, test_obpoin_but, ID_OB, B_CHANGEDEP, "Ob: ", lx, (cy-=19), buttonWidth,19, &smd->origin, "Origin of modifier space coordinates");
+ if(smd->origin != NULL)
+ uiDefButBitC(block, TOG, MOD_SIMPLEDEFORM_ORIGIN_LOCAL, B_MODIFIER_RECALC, "Relative",lx,(cy-=19),buttonWidth,19, &smd->originOpts, 0, 0, 0, 0, "Sets the origin of deform space to be relative to the object");
+
+ uiDefButF(block, NUM, B_MODIFIER_RECALC, "Factor:", lx,(cy-=19),buttonWidth,19, &smd->factor, -10.0f, 10.0f, 0.5f, 0, "Deform Factor");
+
+ uiDefButF(block, NUM, B_MODIFIER_RECALC, "Upper Limit:", lx,(cy-=19),buttonWidth,19, &smd->limit[1], 0.0f, 1.0f, 5.0f, 0, "Upper Limit for deform");
+ uiDefButF(block, NUM, B_MODIFIER_RECALC, "Lower Limit:", lx,(cy-=19),buttonWidth,19, &smd->limit[0], 0.0f, 1.0f, 5.0f, 0, "Lower Limit for deform");
+
+ if(smd->mode == MOD_SIMPLEDEFORM_MODE_STRETCH
+ || smd->mode == MOD_SIMPLEDEFORM_MODE_TAPER )
+ {
+ uiDefButBitC(block, TOG, MOD_SIMPLEDEFORM_LOCK_AXIS_X, B_MODIFIER_RECALC, "Loc X", lx, (cy-=19),buttonWidth/2,19, &smd->axis, 0, 0, 0, 0, "Disallow changes on the X coordinate");
+ uiDefButBitC(block, TOG, MOD_SIMPLEDEFORM_LOCK_AXIS_Y, B_MODIFIER_RECALC, "Loc Y", lx+(buttonWidth/2), (cy),buttonWidth/2,19, &smd->axis, 0, 0, 0, 0, "Disallow changes on the Y coordinate");
+ }
}
uiBlockEndAlign(block);
@@ -2487,7 +2620,7 @@ static void editing_panel_modifiers(Object *ob)
block= uiNewBlock(&curarea->uiblocks, "editing_panel_modifiers", UI_EMBOSS, UI_HELV, curarea->win);
if( uiNewPanel(curarea, block, "Modifiers", "Editing", 640, 0, 318, 204)==0) return;
- uiSetButLock(object_data_is_libdata(ob), ERROR_LIBDATA_MESSAGE);
+ uiSetButLock((ob && ob->id.lib), ERROR_LIBDATA_MESSAGE);
uiNewPanelHeight(block, 204);
uiDefBlockBut(block, modifiers_add_menu, ob, "Add Modifier", 0, 190, 130, 20, "Add a new modifier");
@@ -3288,9 +3421,9 @@ static void editing_panel_curve_tools(Object *ob, Curve *cu)
if(ob->type==OB_CURVE) {
uiDefBut(block, LABEL, 0, "Convert", 463,173,72, 18, 0, 0, 0, 0, 0, "");
uiBlockBeginAlign(block);
- uiDefBut(block, BUT,B_CONVERTPOLY,"Poly", 467,152,72, 18, 0, 0, 0, 0, 0, "Converts selected into regular Polygon vertices");
- uiDefBut(block, BUT,B_CONVERTBEZ,"Bezier", 467,132,72, 18, 0, 0, 0, 0, 0, "Converts selected to Bezier triples");
- uiDefBut(block, BUT,B_CONVERTNURB,"Nurb", 467,112,72, 18, 0, 0, 0, 0, 0, "Converts selected to Nurbs Points");
+ uiDefBut(block, BUT,B_CONVERTPOLY,"Poly", 450,152,110, 18, 0, 0, 0, 0, 0, "Converts selected into regular Polygon vertices");
+ uiDefBut(block, BUT,B_CONVERTBEZ,"Bezier", 450,132,110, 18, 0, 0, 0, 0, 0, "Converts selected to Bezier triples");
+ uiDefBut(block, BUT,B_CONVERTNURB,"Nurb", 450,112,110, 18, 0, 0, 0, 0, 0, "Converts selected to Nurbs Points");
}
uiBlockBeginAlign(block);
uiDefBut(block, BUT,B_UNIFU,"Uniform U", 565,152,102, 18, 0, 0, 0, 0, 0, "Nurbs only; interpolated result doesn't go to end points in U");
@@ -3301,7 +3434,7 @@ static void editing_panel_curve_tools(Object *ob, Curve *cu)
uiDefBut(block, BUT,B_BEZV,"V", 670,112,50, 18, 0, 0, 0, 0, 0, "Nurbs only; make knots array mimic a Bezier in V");
uiBlockEndAlign(block);
- uiDefBut(block, BUT,B_SETWEIGHT,"Set Weight", 465,11,95,49, 0, 0, 0, 0, 0, "Nurbs only; set weight for select points");
+ uiDefBut(block, BUT,B_SETWEIGHT,"Set Weight", 450,11,110,49, 0, 0, 0, 0, 0, "Nurbs only; set weight for select points");
uiBlockBeginAlign(block);
uiDefButF(block, NUM,0,"Weight:", 565,36,102,22, &editbutweight, 0.01, 100.0, 10, 0, "The weight you can assign");
@@ -3320,10 +3453,15 @@ static void editing_panel_curve_tools(Object *ob, Curve *cu)
if(nu) {
if (ob->type==OB_CURVE) {
uiDefBut(block, LABEL, 0, "Tilt",
- 467,87,72, 18, 0, 0, 0, 0, 0, "");
+ 450,90,72, 18, 0, 0, 0, 0, 0, "");
/* KEY_LINEAR, KEY_CARDINAL, KEY_BSPLINE */
- uiDefButS(block, MENU, B_TILTINTERP, "Tilt Interpolation %t|Linear %x0|Cardinal %x1|BSpline %x2",
- 467,67,72, 18, &(nu->tilt_interp), 0, 0, 0, 0, "Tilt interpolation");
+ uiDefButS(block, MENU, B_TILTINTERP, "Tilt Interpolation %t|Linear%x0|Cardinal%x1|BSpline %x2|Ease%x3",
+ 495,90,66, 18, &(nu->tilt_interp), 0, 0, 0, 0, "Tadius interpolation for 3D curves");
+
+ uiDefBut(block, LABEL, 0, "Radius",
+ 450,70,72, 18, 0, 0, 0, 0, 0, "");
+ uiDefButS(block, MENU, B_TILTINTERP, "Radius Interpolation %t|Linear%x0|Cardinal%x1|BSpline %x2|Ease%x3",
+ 495,70,66, 18, &(nu->radius_interp), 0, 0, 0, 0, "Radius interpolation");
}
uiBlockBeginAlign(block);
@@ -3617,11 +3755,9 @@ static void editing_panel_camera_yafraydof(Object *ob, Camera *cam)
void do_cambuts(unsigned short event)
{
Object *ob;
- Camera *cam;
ob= OBACT;
if (ob==0) return;
- cam= ob->data;
switch(event) {
case 0:
@@ -4147,7 +4283,7 @@ static void validate_posebonebutton_cb(void *bonev, void *namev)
static void armature_layer_cb(void *lay_v, void *value_v)
{
short *layer= lay_v;
- int value= (long)value_v;
+ int value= (intptr_t)value_v;
if(*layer==0 || G.qual==0) *layer= value;
allqueue(REDRAWBUTSEDIT, 0);
@@ -6314,6 +6450,11 @@ static void editing_panel_mesh_uvautocalculation(void)
row= 180;
uiDefButBitS(block, TOGN, UVCALC_NO_ASPECT_CORRECT, B_NOP, "Image Aspect",100,row,200,butH,&G.scene->toolsettings->uvcalc_flag, 0, 0, 0, 0, "Scale the UV Unwrapping to correct for the current images aspect ratio");
+
+ row-= butHB+butS;
+ uiDefButBitS(block, TOG, UVCALC_TRANSFORM_CORRECT, B_NOP, "Transform Correction",100,row,200,butH,&G.scene->toolsettings->uvcalc_flag, 0, 0, 0, 0, "Correct for UV distortion while transforming, (only works with edge slide now)");
+
+ row= 180;
uiBlockBeginAlign(block);
uiDefButF(block, NUM,B_UVAUTO_CUBESIZE ,"Cube Size:",315,row,200,butH, &G.scene->toolsettings->uvcalc_cubesize, 0.0001, 100.0, 10, 3, "Defines the cubemap size for cube mapping");
diff --git a/source/blender/src/buttons_logic.c b/source/blender/src/buttons_logic.c
index 5cf1958678e..a54f20b85c2 100644
--- a/source/blender/src/buttons_logic.c
+++ b/source/blender/src/buttons_logic.c
@@ -49,6 +49,7 @@
#include "DNA_controller_types.h"
#include "DNA_property_types.h"
#include "DNA_object_types.h"
+#include "DNA_object_force.h"
#include "DNA_screen_types.h"
#include "DNA_space_types.h"
#include "DNA_scene_types.h"
@@ -66,6 +67,7 @@
#include "BKE_property.h"
#include "BKE_property.h"
#include "BKE_utildefines.h"
+#include "BKE_bullet.h"
#include "BIF_gl.h"
#include "BIF_resources.h"
@@ -91,9 +93,9 @@
#include "interface.h"
/* internals */
-void buttons_enji(uiBlock *, Object *);
-void buttons_ketsji(uiBlock *, Object *);
-void buttons_bullet(uiBlock *, Object *);
+static void buttons_enji(uiBlock *, Object *);
+static void buttons_ketsji(uiBlock *, Object *);
+static void buttons_bullet(uiBlock *, Object *);
/****/
@@ -683,6 +685,8 @@ static char *sensor_name(int type)
return "Property";
case SENS_ACTUATOR:
return "Actuator";
+ case SENS_DELAY:
+ return "Delay";
case SENS_MOUSE:
return "Mouse";
case SENS_COLLISION:
@@ -704,7 +708,7 @@ static char *sensor_name(int type)
static char *sensor_pup(void)
{
/* the number needs to match defines in game.h */
- return "Sensors %t|Always %x0|Keyboard %x3|Mouse %x5|"
+ return "Sensors %t|Always %x0|Delay %x13|Keyboard %x3|Mouse %x5|"
"Touch %x1|Collision %x6|Near %x2|Radar %x7|"
"Property %x4|Random %x8|Ray %x9|Message %x10|Joystick %x11|Actuator %x12";
}
@@ -1000,6 +1004,7 @@ static int get_col_sensor(int type)
{
switch(type) {
case SENS_ALWAYS: return TH_BUT_ACTION;
+ case SENS_DELAY: return TH_BUT_ACTION;
case SENS_TOUCH: return TH_BUT_NEUTRAL;
case SENS_COLLISION: return TH_BUT_SETTING;
case SENS_NEAR: return TH_BUT_SETTING1;
@@ -1033,28 +1038,28 @@ static void draw_default_sensor_header(bSensor *sens,
{
/* Pulsing and frequency */
uiDefIconButBitS(block, TOG, SENS_PULSE_REPEAT, 1, ICON_DOTSUP,
- (short)(x + 10 + 0. * (w-20)), (short)(y - 19), (short)(0.15 * (w-20)), 19,
+ (short)(x + 10 + 0. * (w-20)), (short)(y - 21), (short)(0.15 * (w-20)), 19,
&sens->pulse, 0.0, 0.0, 0, 0,
"Activate TRUE level triggering (pulse mode)");
uiDefIconButBitS(block, TOG, SENS_NEG_PULSE_MODE, 1, ICON_DOTSDOWN,
- (short)(x + 10 + 0.15 * (w-20)), (short)(y - 19), (short)(0.15 * (w-20)), 19,
+ (short)(x + 10 + 0.15 * (w-20)), (short)(y - 21), (short)(0.15 * (w-20)), 19,
&sens->pulse, 0.0, 0.0, 0, 0,
"Activate FALSE level triggering (pulse mode)");
uiDefButS(block, NUM, 1, "f:",
- (short)(x + 10 + 0.3 * (w-20)), (short)(y - 19), (short)(0.275 * (w-20)), 19,
+ (short)(x + 10 + 0.3 * (w-20)), (short)(y - 21), (short)(0.275 * (w-20)), 19,
&sens->freq, 0.0, 10000.0, 0, 0,
"Delay between repeated pulses (in logic tics, 0 = no delay)");
/* value or shift? */
uiDefButS(block, TOG, 1, "Inv",
- (short)(x + 10 + 0.85 * (w-20)), (short)(y - 19), (short)(0.15 * (w-20)), 19,
+ (short)(x + 10 + 0.85 * (w-20)), (short)(y - 21), (short)(0.15 * (w-20)), 19,
&sens->invert, 0.0, 0.0, 0, 0,
"Invert the level (output) of this sensor");
- uiDefButS(block, TOG, 1, "Lvl",
- (short)(x + 10 + 0.70 * (w-20)), (short)(y - 19), (short)(0.15 * (w-20)), 19,
+ uiDefButS(block, TOG, 1, "Level",
+ (short)(x + 10 + 0.65 * (w-20)), (short)(y - 21), (short)(0.20 * (w-20)), 19,
&sens->level, 0.0, 0.0, 0, 0,
- "Level detector versus edge detector (only applicable in case of logic state transition)");
+ "Level detector, trigger controllers of new states (only applicable upon logic state transition)");
}
static short draw_sensorbuttons(bSensor *sens, uiBlock *block, short xco, short yco, short width,char* objectname)
@@ -1070,8 +1075,8 @@ static short draw_sensorbuttons(bSensor *sens, uiBlock *block, short xco, short
bRaySensor *raySens = NULL;
bMessageSensor *mes = NULL;
bJoystickSensor *joy = NULL;
- bActuatorSensor *as = NULL;
-
+ bActuatorSensor *as = NULL;
+ bDelaySensor *ds = NULL;
short ysize;
char *str;
@@ -1267,15 +1272,15 @@ static short draw_sensorbuttons(bSensor *sens, uiBlock *block, short xco, short
if(ps->type == SENS_PROP_INTERVAL)
{
uiDefBut(block, TEX, 1, "Min: ", xco,yco-92,width/2, 19,
- ps->value, 0, 31, 0, 0, "test for min value");
+ ps->value, 0, 31, 0, 0, "check for min value");
uiDefBut(block, TEX, 1, "Max: ", xco+width/2,yco-92,width/2, 19,
- ps->maxvalue, 0, 31, 0, 0, "test for max value");
+ ps->maxvalue, 0, 31, 0, 0, "check for max value");
}
else if(ps->type == SENS_PROP_CHANGED);
else
{
uiDefBut(block, TEX, 1, "Value: ", xco+30,yco-92,width-60, 19,
- ps->value, 0, 31, 0, 0, "test for value");
+ ps->value, 0, 31, 0, 0, "check for value");
}
yco-= ysize;
@@ -1297,6 +1302,27 @@ static short draw_sensorbuttons(bSensor *sens, uiBlock *block, short xco, short
yco-= ysize;
break;
}
+ case SENS_DELAY:
+ {
+ ysize= 48;
+
+ glRects(xco, yco-ysize, xco+width, yco);
+ uiEmboss((float)xco, (float)yco-ysize,
+ (float)xco+width, (float)yco, 1);
+
+ draw_default_sensor_header(sens, block, xco, yco, width);
+ ds = sens->data;
+
+ uiDefButS(block, NUM, 0, "Delay",(short)(10+xco),(short)(yco-44),(short)((width-22)*0.4+10), 19,
+ &ds->delay, 0.0, 5000.0, 0, 0, "Delay in number of frames before the positive trigger");
+ uiDefButS(block, NUM, 0, "Dur",(short)(10+xco+(width-22)*0.4+10),(short)(yco-44),(short)((width-22)*0.4-10), 19,
+ &ds->duration, 0.0, 5000.0, 0, 0, "If >0, delay in number of frames before the negative trigger following the positive trigger");
+ uiDefButBitS(block, TOG, SENS_DELAY_REPEAT, 0, "REP",(short)(xco + 10 + (width-22)*0.8),(short)(yco - 44),
+ (short)(0.20 * (width-22)), 19, &ds->flag, 0.0, 0.0, 0, 0,
+ "Toggle repeat option. If selected, the sensor restarts after Delay+Dur frames");
+ yco-= ysize;
+ break;
+ }
case SENS_MOUSE:
{
ms= sens->data;
@@ -1366,9 +1392,14 @@ static short draw_sensorbuttons(bSensor *sens, uiBlock *block, short xco, short
&raySens->propname, 0, 31, 0, 0,
"Only look for Objects with this property");
}
-
+
+ /* X-Ray option */
+ uiDefButBitS(block, TOG, SENS_RAY_XRAY, 1, "X",
+ xco + 10,yco - 68, 0.10 * (width-20), 19,
+ &raySens->mode, 0.0, 0.0, 0, 0,
+ "Toggle X-Ray option (see through objects that don't have the property)");
/* 2. sensing range */
- uiDefButF(block, NUM, 1, "Range", xco+10, yco-68, 0.6 * (width-20), 19,
+ uiDefButF(block, NUM, 1, "Range", xco+10 + 0.10 * (width-20), yco-68, 0.5 * (width-20), 19,
&raySens->range, 0.01, 10000.0, 100, 0,
"Sense objects no farther than this distance");
@@ -1415,10 +1446,13 @@ static short draw_sensorbuttons(bSensor *sens, uiBlock *block, short xco, short
draw_default_sensor_header(sens, block, xco, yco, width);
joy= sens->data;
-
+
+ uiDefButS(block, NUM, 1, "Index:", xco+10, yco-44, 0.6 * (width-120), 19,
+ &joy->joyindex, 0, SENS_JOY_MAXINDEX-1, 100, 0,
+ "Specify which joystick to use");
str= "Type %t|Button %x0|Axis %x1|Hat%x2";
- uiDefButS(block, MENU, B_REDR, str, xco+10, yco-44, 0.6 * (width-20), 19,
+ uiDefButS(block, MENU, B_REDR, str, xco+87, yco-44, 0.6 * (width-150), 19,
&joy->type, 0, 31, 0, 0,
"The type of event this joystick sensor is triggered on.");
@@ -1615,6 +1649,16 @@ char *get_state_name(Object *ob, short bit)
return (char*)"";
}
+static void check_state_mask(void *arg1_but, void *arg2_mask)
+{
+ unsigned int *cont_mask = arg2_mask;
+ uiBut *but = arg1_but;
+
+ if (*cont_mask == 0 || !(G.qual & LR_SHIFTKEY))
+ *cont_mask = (1<<but->retval);
+ but->retval = B_REDR;
+}
+
static short draw_actuatorbuttons(Object *ob, bActuator *act, uiBlock *block, short xco, short yco, short width)
{
bSoundActuator *sa = NULL;
@@ -1642,6 +1686,7 @@ static short draw_actuatorbuttons(Object *ob, bActuator *act, uiBlock *block, sh
int myline, stbit;
uiBut *but;
+
/* yco is at the top of the rect, draw downwards */
uiBlockSetEmboss(block, UI_EMBOSSM);
set_col_actuator(act->type, 0);
@@ -1689,7 +1734,7 @@ static short draw_actuatorbuttons(Object *ob, bActuator *act, uiBlock *block, sh
uiDefBut(block, LABEL, 0, "Torque", xco, yco-106, 55, 19, NULL, 0, 0, 0, 0, "Sets the torque");
uiDefButF(block, NUM, 0, "", xco+45, yco-106, wval, 19, oa->forcerot, -10000.0, 10000.0, 10, 0, "");
uiDefButF(block, NUM, 0, "", xco+45+wval, yco-106, wval, 19, oa->forcerot+1, -10000.0, 10000.0, 10, 0, "");
- uiDefButF(block, NUM, 0, "", xco+45+2*wval, yco-6106, wval, 19, oa->forcerot+2, -10000.0, 10000.0, 10, 0, "");
+ uiDefButF(block, NUM, 0, "", xco+45+2*wval, yco-106, wval, 19, oa->forcerot+2, -10000.0, 10000.0, 10, 0, "");
}
if ( ob->gameflag & OB_DYNAMIC )
@@ -1821,7 +1866,7 @@ static short draw_actuatorbuttons(Object *ob, bActuator *act, uiBlock *block, sh
{
ia= act->data;
- ysize= 52;
+ ysize= 72;
glRects(xco, yco-ysize, xco+width, yco);
uiEmboss((float)xco, (float)yco-ysize, (float)xco+width, (float)yco, 1);
@@ -1833,7 +1878,7 @@ static short draw_actuatorbuttons(Object *ob, bActuator *act, uiBlock *block, sh
but = uiDefButBitS(block, TOG, ACT_IPOFORCE, ACT_IPOFORCE,
"Force", xco+10+(width-20)/2, yco-24, (width-20)/4-10, 19,
&ia->flag, 0, 0, 0, 0,
- "Convert Ipo to force. Force is applied in global or local coordinate according to Local flag");
+ "Apply Ipo as a global or local force depending on the local option (dynamic objects only)");
uiButSetFunc(but, change_ipo_actuator, but, ia);
but = uiDefButBitS(block, TOG, ACT_IPOADD, ACT_IPOADD,
@@ -1859,17 +1904,21 @@ static short draw_actuatorbuttons(Object *ob, bActuator *act, uiBlock *block, sh
else {
uiDefButI(block, NUM, 0,
"Sta", xco+10, yco-44, (width-80)/2, 19,
- &ia->sta, 0.0, MAXFRAMEF, 0, 0,
- "Start frame, (subtract 1 to match blenders frame numbers)");
+ &ia->sta, 1.0, MAXFRAMEF, 0, 0,
+ "Start frame");
uiDefButI(block, NUM, 0,
"End", xco+10+(width-80)/2, yco-44, (width-80)/2, 19,
- &ia->end, 0.0, MAXFRAMEF, 0, 0,
- "End frame, (subtract 1 to match blenders frame numbers)");
+ &ia->end, 1.0, MAXFRAMEF, 0, 0,
+ "End frame");
}
uiDefButBitS(block, TOG, ACT_IPOCHILD, B_REDR,
"Child", xco+10+(width-80), yco-44, 60, 19,
&ia->flag, 0, 0, 0, 0,
"Update IPO on all children Objects as well");
+ uiDefBut(block, TEX, 0,
+ "FrameProp: ", xco+10, yco-64, width-20, 19,
+ ia->frameProp, 0.0, 31.0, 0, 0,
+ "Assign this property this action current frame number");
yco-= ysize;
break;
@@ -1893,7 +1942,7 @@ static short draw_actuatorbuttons(Object *ob, bActuator *act, uiBlock *block, sh
uiDefBut(block, TEX, 1, "Prop: ", xco+10+(width-20)/2, yco-64, (width-20)/2, 19, pa->value, 0, 31, 0, 0, "Copy this property");
}
else {
- uiDefBut(block, TEX, 1, "Value: ", xco+30,yco-64,width-60, 19, pa->value, 0, 31, 0, 0, "change with this value");
+ uiDefBut(block, TEX, 1, "Value: ", xco+30,yco-64,width-60, 19, pa->value, 0, 31, 0, 0, "change with this value, use \"\" around strings");
}
yco-= ysize;
@@ -1998,7 +2047,7 @@ static short draw_actuatorbuttons(Object *ob, bActuator *act, uiBlock *block, sh
if(eoa->type==ACT_EDOB_ADD_OBJECT) {
int wval; /* just a temp width */
- ysize = 72;
+ ysize = 92;
glRects(xco, yco-ysize, xco+width, yco);
uiEmboss((float)xco, (float)yco-ysize, (float)xco+width, (float)yco, 1);
@@ -2018,9 +2067,27 @@ static short draw_actuatorbuttons(Object *ob, bActuator *act, uiBlock *block, sh
uiDefButF(block, NUM, 0, "", xco+45+2*wval, yco-68, wval, 19,
eoa->linVelocity+2, -100.0, 100.0, 10, 0,
"Velocity upon creation, z component.");
- uiDefButBitS(block, TOG, 2, 0, "L", xco+45+3*wval, yco-68, 15, 19,
+ uiDefButBitS(block, TOG, ACT_EDOB_LOCAL_LINV, 0, "L", xco+45+3*wval, yco-68, 15, 19,
&eoa->localflag, 0.0, 0.0, 0, 0,
"Apply the transformation locally");
+
+
+ uiDefBut(block, LABEL, 0, "AngV", xco, yco-90, 45, 19,
+ NULL, 0, 0, 0, 0,
+ "Angular velocity upon creation.");
+ uiDefButF(block, NUM, 0, "", xco+45, yco-90, wval, 19,
+ eoa->angVelocity, -10000.0, 10000.0, 10, 0,
+ "Angular velocity upon creation, x component.");
+ uiDefButF(block, NUM, 0, "", xco+45+wval, yco-90, wval, 19,
+ eoa->angVelocity+1, -10000.0, 10000.0, 10, 0,
+ "Angular velocity upon creation, y component.");
+ uiDefButF(block, NUM, 0, "", xco+45+2*wval, yco-90, wval, 19,
+ eoa->angVelocity+2, -10000.0, 10000.0, 10, 0,
+ "Angular velocity upon creation, z component.");
+ uiDefButBitS(block, TOG, ACT_EDOB_LOCAL_ANGV, 0, "L", xco+45+3*wval, yco-90, 15, 19,
+ &eoa->localflag, 0.0, 0.0, 0, 0,
+ "Apply the rotation locally");
+
}
else if(eoa->type==ACT_EDOB_END_OBJECT) {
@@ -2071,7 +2138,7 @@ static short draw_actuatorbuttons(Object *ob, bActuator *act, uiBlock *block, sh
/* str= "Limit %t|None %x0|Loc X %x1|Loc Y %x2|Loc Z %x4|Rot X %x8|Rot Y %x16|Rot Z %x32"; */
/* coa->flag &= ~(63); */
str= "Limit %t|None %x0|Loc X %x1|Loc Y %x2|Loc Z %x4";
- coa->flag &= ~(7);
+ coa->flag &= 7;
coa->time = 0;
uiDefButS(block, MENU, 1, str, xco+10, yco-65, 70, 19, &coa->flag, 0.0, 0.0, 0, 0, "");
@@ -2100,6 +2167,8 @@ static short draw_actuatorbuttons(Object *ob, bActuator *act, uiBlock *block, sh
uiDefButS(block, NUM, 0, "damp", xco+10, yco-45, 70, 19, &coa->damp, 0.0, 100.0, 0, 0, "Damping factor: time constant (in frame) of low pass filter");
uiDefBut(block, LABEL, 0, "Range", xco+80, yco-45, (width-115)/2, 19, NULL, 0.0, 0.0, 0, 0, "Set the maximum length of ray");
uiDefButBitS(block, TOG, ACT_CONST_DISTANCE, B_REDR, "Dist", xco+80+(width-115)/2, yco-45, (width-115)/2, 19, &coa->flag, 0.0, 0.0, 0, 0, "Force distance of object to point of impact of ray");
+ uiDefButBitS(block, TOG, ACT_CONST_LOCAL, 0, "L", xco+80+(width-115), yco-45, 25, 19,
+ &coa->flag, 0.0, 0.0, 0, 0, "Set ray along object's axis or global axis");
if(coa->mode & (ACT_CONST_DIRPX|ACT_CONST_DIRNX)) fp= coa->minloc;
else if(coa->mode & (ACT_CONST_DIRPY|ACT_CONST_DIRNY)) fp= coa->minloc+1;
@@ -2109,7 +2178,7 @@ static short draw_actuatorbuttons(Object *ob, bActuator *act, uiBlock *block, sh
if (coa->flag & ACT_CONST_DISTANCE)
uiDefButF(block, NUM, 0, "", xco+80+(width-115)/2, yco-65, (width-115)/2, 19, fp, -2000.0, 2000.0, 10, 0, "Keep this distance to target");
uiDefButBitS(block, TOG, ACT_CONST_NORMAL, 0, "N", xco+80+(width-115), yco-65, 25, 19,
- &coa->flag, 0.0, 0.0, 0, 0, "Set object axis along the normal at hit position");
+ &coa->flag, 0.0, 0.0, 0, 0, "Set object axis along (local axis) or parallel (global axis) to the normal at hit position");
uiDefButBitS(block, TOG, ACT_CONST_MATERIAL, B_REDR, "M/P", xco+10, yco-84, 40, 19,
&coa->flag, 0.0, 0.0, 0, 0, "Detect material instead of property");
if (coa->flag & ACT_CONST_MATERIAL)
@@ -2149,8 +2218,46 @@ static short draw_actuatorbuttons(Object *ob, bActuator *act, uiBlock *block, sh
uiDefButS(block, NUM, 0, "time", xco+10, yco-84, 70, 19, &(coa->time), 0.0, 1000.0, 0, 0, "Maximum activation time in frame, 0 for unlimited");
uiDefButF(block, NUM, 0, "min", xco+80, yco-84, (width-115)/2, 19, &(coa->minloc[0]), 0.0, 180.0, 10, 1, "Minimum angle (in degree) to maintain with target direction. No correction is done if angle with target direction is between min and max");
uiDefButF(block, NUM, 0, "max", xco+80+(width-115)/2, yco-84, (width-115)/2, 19, &(coa->maxloc[0]), 0.0, 180.0, 10, 1, "Maximum angle (in degree) allowed with target direction. No correction is done if angle with target direction is between min and max");
+ } else if (coa->type == ACT_CONST_TYPE_FH) {
+ ysize= 106;
+
+ glRects(xco, yco-ysize, xco+width, yco);
+ uiEmboss((float)xco, (float)yco-ysize, (float)xco+width, (float)yco, 1);
+
+ str= "Direction %t|None %x0|X axis %x1|Y axis %x2|Z axis %x4|-X axis %x8|-Y axis %x16|-Z axis %x32";
+ uiDefButS(block, MENU, B_REDR, str, xco+10, yco-65, 70, 19, &coa->mode, 0.0, 0.0, 0, 0, "Set the direction of the ray (in world coordinate)");
+
+ if(coa->mode & (ACT_CONST_DIRPX|ACT_CONST_DIRNX)) fp= coa->minloc;
+ else if(coa->mode & (ACT_CONST_DIRPY|ACT_CONST_DIRNY)) fp= coa->minloc+1;
+ else fp= coa->minloc+2;
+
+ uiDefButF(block, NUM, 0, "damp", xco+10, yco-45, (width-70)/2, 19, &coa->maxrot[0], 0.0, 1.0, 1, 0, "Damping factor of the Fh spring force");
+ uiDefButF(block, NUM, 0, "dist", xco+10+(width-70)/2, yco-45, (width-70)/2, 19, fp, 0.010, 2000.0, 10, 0, "Height of the Fh area");
+ uiDefButBitS(block, TOG, ACT_CONST_DOROTFH, 0, "Rot Fh", xco+10+(width-70), yco-45, 50, 19, &coa->flag, 0.0, 0.0, 0, 0, "Keep object axis parallel to normal");
+
+ uiDefButF(block, NUMSLI, 0, "Fh ", xco+80, yco-65, (width-115), 19, fp+3, 0.0, 1.0, 0, 0, "Spring force within the Fh area");
+ uiDefButBitS(block, TOG, ACT_CONST_NORMAL, 0, "N", xco+80+(width-115), yco-65, 25, 19,
+ &coa->flag, 0.0, 0.0, 0, 0, "Add a horizontal spring force on slopes");
+ uiDefButBitS(block, TOG, ACT_CONST_MATERIAL, B_REDR, "M/P", xco+10, yco-84, 40, 19,
+ &coa->flag, 0.0, 0.0, 0, 0, "Detect material instead of property");
+ if (coa->flag & ACT_CONST_MATERIAL)
+ {
+ uiDefBut(block, TEX, 1, "Material:", xco + 50, yco-84, (width-60), 19,
+ coa->matprop, 0, 31, 0, 0,
+ "Ray detects only Objects with this material");
+ }
+ else
+ {
+ uiDefBut(block, TEX, 1, "Property:", xco + 50, yco-84, (width-60), 19,
+ coa->matprop, 0, 31, 0, 0,
+ "Ray detect only Objects with this property");
+ }
+ uiDefButBitS(block, TOG, ACT_CONST_PERMANENT, 0, "PER", xco+10, yco-103, 40, 19,
+ &coa->flag, 0.0, 0.0, 0, 0, "Persistent actuator: stays active even if ray does not reach target");
+ uiDefButS(block, NUM, 0, "time", xco+50, yco-103, 90, 19, &(coa->time), 0.0, 1000.0, 0, 0, "Maximum activation time in frame, 0 for unlimited");
+ uiDefButF(block, NUM, 0, "rotDamp", xco+140, yco-103, (width-150), 19, &coa->maxrot[1], 0.0, 1.0, 1, 0, "Use a different damping for rotation");
}
- str= "Constraint Type %t|Location %x0|Distance %x1|Orientation %x2";
+ str= "Constraint Type %t|Location %x0|Distance %x1|Orientation %x2|Force field %x3";
but = uiDefButS(block, MENU, B_REDR, str, xco+40, yco-23, (width-80), 19, &coa->type, 0.0, 0.0, 0, 0, "");
yco-= ysize;
break;
@@ -2246,13 +2353,7 @@ static short draw_actuatorbuttons(Object *ob, bActuator *act, uiBlock *block, sh
uiDefBut(block, TEX, 1, "File: ", xco+10, yco-44,width-20,19, &(gma->filename), 0, 63, 0, 0, "Load this file");
uiDefBut(block, TEX, 1, "Anim: ", xco+10, yco-64,width-20,19, &(gma->loadaniname), 0, 63, 0, 0, "Use this loadinganimation");
}
-*/ else if (gma->type == ACT_GAME_RESTART)
- {
- ysize = 28;
- glRects(xco, yco-ysize, xco+width, yco);
- uiEmboss((float)xco, (float)yco-ysize, (float)xco+width, (float)yco, 1);
- }
- else if (gma->type == ACT_GAME_QUIT)
+*/ else if (ELEM4(gma->type, ACT_GAME_RESTART, ACT_GAME_QUIT, ACT_GAME_SAVECFG, ACT_GAME_LOADCFG))
{
ysize = 28;
glRects(xco, yco-ysize, xco+width, yco);
@@ -2260,7 +2361,7 @@ static short draw_actuatorbuttons(Object *ob, bActuator *act, uiBlock *block, sh
}
//str = "Scene %t|Load game%x0|Start loaded game%x1|Restart this game%x2|Quit this game %x3";
- str = "Scene %t|Start new game%x0|Restart this game%x2|Quit this game %x3";
+ str = "Scene %t|Start new game%x0|Restart this game%x2|Quit this game %x3|Save GameLogic.globalDict %x4|Load GameLogic.globalDict %x5";
uiDefButS(block, MENU, B_REDR, str, xco+40, yco-24, (width-80), 19, &gma->type, 0.0, 0.0, 0, 0, "");
yco -= ysize;
@@ -2300,19 +2401,25 @@ static short draw_actuatorbuttons(Object *ob, bActuator *act, uiBlock *block, sh
visAct = act->data;
- str= "Visibility %t|Visible %x0|Invisible %x1";
-
- uiDefButI(block, MENU, B_REDR, str,
- xco + 10, yco - 24, width - 20, 19, &visAct->flag,
+ uiBlockBeginAlign(block);
+ uiDefButBitI(block, TOGN, ACT_VISIBILITY_INVISIBLE, B_REDR,
+ "Visible",
+ xco + 10, yco - 20, (width - 20)/3, 19, &visAct->flag,
0.0, 0.0, 0, 0,
- "Make the object invisible or visible.");
-/*
- uiDefButBitI(block, TOG, ACT_VISIBILITY_INVISIBLE, 0,
+ "Set the objects visible. Initialized from the objects render restriction toggle (access in the outliner)");
+ uiDefButBitI(block, TOG, ACT_VISIBILITY_INVISIBLE, B_REDR,
"Invisible",
- xco + 10, yco - 24, width - 20, 19, &visAct->flag,
+ xco + 10 + ((width - 20)/3), yco - 20, (width - 20)/3, 19, &visAct->flag,
0.0, 0.0, 0, 0,
- "Make the object invisible or visible.");
-*/
+ "Set the object invisible. Initialized from the objects render restriction toggle (access in the outliner)");
+ uiBlockEndAlign(block);
+
+ uiDefButBitI(block, TOG, ACT_VISIBILITY_RECURSIVE, B_NOP,
+ "Children",
+ xco + 10 + (((width - 20)/3)*2)+10, yco - 20, ((width - 20)/3)-10, 19, &visAct->flag,
+ 0.0, 0.0, 0, 0,
+ "Sets all the children of this object to the same visibility recursively");
+
yco-= ysize;
break;
@@ -2336,10 +2443,12 @@ static short draw_actuatorbuttons(Object *ob, bActuator *act, uiBlock *block, sh
for (wval=0; wval<15; wval+=5) {
uiBlockBeginAlign(block);
for (stbit=0; stbit<5; stbit++) {
- uiDefButBitI(block, TOG, (1<<(stbit+wval)), 0, "", (short)(xco+85+12*stbit+13*wval), yco-17, 12, 12, (int *)&(staAct->mask), 0, 0, 0, 0, get_state_name(ob, (short)(wval+stbit)));
+ but = uiDefButBitI(block, TOG, 1<<(stbit+wval), stbit+wval, "", (short)(xco+85+12*stbit+13*wval), yco-17, 12, 12, (int *)&(staAct->mask), 0, 0, 0, 0, get_state_name(ob, (short)(stbit+wval)));
+ uiButSetFunc(but, check_state_mask, but, &(staAct->mask));
}
for (stbit=0; stbit<5; stbit++) {
- uiDefButBitI(block, TOG, (1<<(stbit+wval+15)), 0, "", (short)(xco+85+12*stbit+13*wval), yco-29, 12, 12, (int *)&(staAct->mask), 0, 0, 0, 0, get_state_name(ob, (short)(wval+stbit+15)));
+ but = uiDefButBitI(block, TOG, 1<<(stbit+wval+15), stbit+wval+15, "", (short)(xco+85+12*stbit+13*wval), yco-29, 12, 12, (int *)&(staAct->mask), 0, 0, 0, 0, get_state_name(ob, (short)(stbit+wval+15)));
+ uiButSetFunc(but, check_state_mask, but, &(staAct->mask));
}
}
uiBlockEndAlign(block);
@@ -2745,7 +2854,7 @@ static uiBlock *actuator_menu(void *arg_unused)
}
-void buttons_enji(uiBlock *block, Object *ob)
+static void buttons_enji(uiBlock *block, Object *ob)
{
uiDefButBitI(block, TOG, OB_SECTOR, B_SETSECTOR, "Sector",
10,205,65,19, &ob->gameflag, 0, 0, 0, 0,
@@ -2790,146 +2899,387 @@ void buttons_enji(uiBlock *block, Object *ob)
}
-void buttons_ketsji(uiBlock *block, Object *ob)
+static void buttons_ketsji(uiBlock *block, Object *ob)
{
- uiDefButBitI(block, TOG, OB_ACTOR, B_REDR, "Actor",
- 10,205,55,19, &ob->gameflag, 0, 0, 0, 0,
- "Objects that are evaluated by the engine ");
- if(ob->gameflag & OB_ACTOR) {
- uiDefButBitI(block, TOG, OB_GHOST, B_REDR, "Ghost", 65,205,55,19,
- &ob->gameflag, 0, 0, 0, 0,
- "Objects that don't restitute collisions (like a ghost)");
- uiDefButBitI(block, TOG, OB_DYNAMIC, B_REDR, "Dynamic", 120,205,70,19,
- &ob->gameflag, 0, 0, 0, 0,
- "Motion defined by laws of physics");
-
- if(ob->gameflag & OB_DYNAMIC) {
- uiDefButBitI(block, TOG, OB_RIGID_BODY, B_REDR, "Rigid Body", 190,205,80,19,
- &ob->gameflag, 0, 0, 0, 0,
- "Enable rolling physics");
- uiDefButBitI(block, TOG, OB_COLLISION_RESPONSE, B_REDR, "No sleeping", 270,205,80,19,
- &ob->gameflag, 0, 0, 0, 0,
- "Disable auto (de)activation");
-
- uiDefButBitI(block, TOG, OB_DO_FH, B_DIFF, "Do Fh", 10,185,50,19,
- &ob->gameflag, 0, 0, 0, 0,
- "Use Fh settings in Materials");
- uiDefButBitI(block, TOG, OB_ROT_FH, B_DIFF, "Rot Fh", 60,185,50,19,
- &ob->gameflag, 0, 0, 0, 0,
- "Use face normal to rotate Object");
- uiDefButF(block, NUM, B_DIFF, "Mass:", 110, 185, 80, 19,
- &ob->mass, 0.01, 10000.0, 10, 0,
- "The mass of the Object");
- uiDefButF(block, NUM, REDRAWVIEW3D, "Radius:", 190, 185, 80, 19,
- &ob->inertia, 0.01, 10.0, 10, 0,
- "Bounding sphere radius");
- uiDefButF(block, NUM, B_DIFF, "Form:", 270, 185, 80, 19,
- &ob->formfactor, 0.01, 100.0, 10, 0,
- "Form factor");
-
- uiDefButF(block, NUM, B_DIFF, "Damp:", 10, 165, 100, 19,
- &ob->damping, 0.0, 1.0, 10, 0,
- "General movement damping");
- uiDefButF(block, NUM, B_DIFF, "RotDamp:", 110, 165, 120, 19,
- &ob->rdamping, 0.0, 1.0, 10, 0,
- "General rotation damping");
- uiDefButBitI(block, TOG, OB_ANISOTROPIC_FRICTION, B_REDR, "Anisotropic",
- 230, 165, 120, 19,
- &ob->gameflag, 0.0, 1.0, 10, 0,
- "Enable anisotropic friction");
- }
-
- if (ob->gameflag & OB_ANISOTROPIC_FRICTION) {
- uiDefButF(block, NUM, B_DIFF, "x friction:", 10, 145, 114, 19,
- &ob->anisotropicFriction[0], 0.0, 1.0, 10, 0,
- "Relative friction coefficient in the x-direction.");
- uiDefButF(block, NUM, B_DIFF, "y friction:", 124, 145, 113, 19,
- &ob->anisotropicFriction[1], 0.0, 1.0, 10, 0,
- "Relative friction coefficient in the y-direction.");
- uiDefButF(block, NUM, B_DIFF, "z friction:", 237, 145, 113, 19,
- &ob->anisotropicFriction[2], 0.0, 1.0, 10, 0,
- "Relative friction coefficient in the z-direction.");
+ uiDefButBitI(block, TOG, OB_COLLISION, B_REDR, "Physics",
+ 10,205,70,19, &ob->gameflag, 0, 0, 0, 0,
+ "Objects that have a physics representation");
+ if (ob->gameflag & OB_COLLISION) {
+ uiBlockBeginAlign(block);
+ uiDefButBitI(block, TOG, OB_ACTOR, B_REDR, "Actor",
+ 80,205,55,19, &ob->gameflag, 0, 0, 0, 0,
+ "Objects that are evaluated by the engine ");
+ if(ob->gameflag & OB_ACTOR) {
+ uiDefButBitI(block, TOG, OB_GHOST, B_REDR, "Ghost", 135,205,55,19,
+ &ob->gameflag, 0, 0, 0, 0,
+ "Objects that don't restitute collisions (like a ghost)");
+ uiDefButBitI(block, TOG, OB_DYNAMIC, B_REDR, "Dynamic", 190,205,75,19,
+ &ob->gameflag, 0, 0, 0, 0,
+ "Motion defined by laws of physics");
+
+ if(ob->gameflag & OB_DYNAMIC) {
+ uiDefButBitI(block, TOG, OB_RIGID_BODY, B_REDR, "Rigid Body", 265,205,85,19,
+ &ob->gameflag, 0, 0, 0, 0,
+ "Enable rolling physics");
+
+ uiDefButF(block, NUM, B_DIFF, "Mass:", 10, 185, 130, 19,
+ &ob->mass, 0.01, 10000.0, 10, 2,
+ "The mass of the Object");
+ uiDefButF(block, NUM, REDRAWVIEW3D, "Radius:", 140, 185, 130, 19,
+ &ob->inertia, 0.01, 10.0, 10, 2,
+ "Bounding sphere radius");
+ uiDefButBitI(block, TOG, OB_COLLISION_RESPONSE, B_REDR, "No sleeping", 270,185,80,19,
+ &ob->gameflag, 0, 0, 0, 0,
+ "Disable auto (de)activation");
+
+ uiDefButF(block, NUMSLI, B_DIFF, "Damp ", 10, 165, 150, 19,
+ &ob->damping, 0.0, 1.0, 10, 0,
+ "General movement damping");
+ uiDefButF(block, NUMSLI, B_DIFF, "RotDamp ", 160, 165, 190, 19,
+ &ob->rdamping, 0.0, 1.0, 10, 0,
+ "General rotation damping");
+
+ uiDefButBitI(block, TOG, OB_DO_FH, B_DIFF, "Do Fh", 10,145,50,19,
+ &ob->gameflag, 0, 0, 0, 0,
+ "Use Fh settings in Materials");
+ uiDefButBitI(block, TOG, OB_ROT_FH, B_DIFF, "Rot Fh", 60,145,50,19,
+ &ob->gameflag, 0, 0, 0, 0,
+ "Use face normal to rotate Object");
+ uiDefButF(block, NUM, B_DIFF, "Form:", 110, 145, 120, 19,
+ &ob->formfactor, 0.01, 100.0, 10, 0,
+ "Form factor");
+
+ uiDefButBitI(block, TOG, OB_ANISOTROPIC_FRICTION, B_REDR, "Anisotropic",
+ 230, 145, 120, 19,
+ &ob->gameflag, 0.0, 1.0, 10, 0,
+ "Enable anisotropic friction");
+ }
+
+ if (ob->gameflag & OB_ANISOTROPIC_FRICTION) {
+ uiDefButF(block, NUM, B_DIFF, "x friction:", 10, 125, 114, 19,
+ &ob->anisotropicFriction[0], 0.0, 1.0, 10, 0,
+ "Relative friction coefficient in the x-direction.");
+ uiDefButF(block, NUM, B_DIFF, "y friction:", 124, 125, 113, 19,
+ &ob->anisotropicFriction[1], 0.0, 1.0, 10, 0,
+ "Relative friction coefficient in the y-direction.");
+ uiDefButF(block, NUM, B_DIFF, "z friction:", 237, 125, 113, 19,
+ &ob->anisotropicFriction[2], 0.0, 1.0, 10, 0,
+ "Relative friction coefficient in the z-direction.");
+ }
}
- }
- if (!(ob->gameflag & OB_GHOST)) {
- uiBlockBeginAlign(block);
- uiDefButBitI(block, TOG, OB_BOUNDS, B_REDR, "Bounds", 10, 125, 75, 19,
- &ob->gameflag, 0, 0,0, 0,
- "Specify a bounds object for physics");
- if (ob->gameflag & OB_BOUNDS) {
- uiDefButS(block, MENU, REDRAWVIEW3D, "Boundary Display%t|Box%x0|Sphere%x1|Cylinder%x2|Cone%x3|Convex Hull Polytope%x5|Static TriangleMesh %x4",
- 85, 125, 160, 19, &ob->boundtype, 0, 0, 0, 0, "Selects the collision type");
- uiDefButBitI(block, TOG, OB_CHILD, B_REDR, "Compound", 250,125,100,19,
- &ob->gameflag, 0, 0, 0, 0,
- "Add Children");
+ if (!(ob->gameflag & OB_GHOST)) {
+ uiBlockBeginAlign(block);
+ uiDefButBitI(block, TOG, OB_BOUNDS, B_REDR, "Bounds", 10, 105, 75, 19,
+ &ob->gameflag, 0, 0,0, 0,
+ "Specify a collision shape bounds type");
+ if (ob->gameflag & OB_BOUNDS) {
+ /* assume triangle mesh, if no bounds chosen for soft body */
+
+
+
+ uiDefButS(block, MENU, REDRAWVIEW3D, "Collision Type%t|Box%x0|Sphere%x1|Cylinder%x2|Cone%x3|Convex Hull%x5|Concave TriangleMesh %x4",
+ 85, 105, 160, 19, &ob->boundtype, 0, 0, 0, 0, "Selects the collision type");
+ uiDefButBitI(block, TOG, OB_CHILD, B_REDR, "Compound", 250,105,100,19,
+ &ob->gameflag, 0, 0, 0, 0,
+ "Add Children");
+ }
+ uiBlockEndAlign(block);
}
uiBlockEndAlign(block);
}
}
-void buttons_bullet(uiBlock *block, Object *ob)
+static void check_body_type(void *arg1_but, void *arg2_object)
{
- uiBlockBeginAlign(block);
- uiDefButBitI(block, TOG, OB_ACTOR, B_REDR, "Actor",
- 10,205,55,19, &ob->gameflag, 0, 0, 0, 0,
- "Objects that are evaluated by the engine ");
- if(ob->gameflag & OB_ACTOR) {
- uiDefButBitI(block, TOG, OB_GHOST, B_REDR, "Ghost", 65,205,55,19,
- &ob->gameflag, 0, 0, 0, 0,
- "Objects that don't restitute collisions (like a ghost)");
- uiDefButBitI(block, TOG, OB_DYNAMIC, B_REDR, "Dynamic", 120,205,70,19,
- &ob->gameflag, 0, 0, 0, 0,
- "Motion defined by laws of physics");
-
- if(ob->gameflag & OB_DYNAMIC) {
- uiDefButBitI(block, TOG, OB_RIGID_BODY, B_REDR, "Rigid Body", 190,205,80,19,
- &ob->gameflag, 0, 0, 0, 0,
- "Enable rolling physics");
- uiDefButBitI(block, TOG, OB_COLLISION_RESPONSE, B_REDR, "No sleeping", 270,205,80,19,
- &ob->gameflag, 0, 0, 0, 0,
- "Disable auto (de)activation");
-
- uiDefButF(block, NUM, B_DIFF, "Mass:", 10, 185, 170, 19,
- &ob->mass, 0.01, 10000.0, 10, 2,
- "The mass of the Object");
- uiDefButF(block, NUM, REDRAWVIEW3D, "Radius:", 180, 185, 170, 19,
- &ob->inertia, 0.01, 10.0, 10, 2,
- "Bounding sphere radius");
-
- uiDefButF(block, NUMSLI, B_DIFF, "Damp ", 10, 165, 150, 19,
- &ob->damping, 0.0, 1.0, 10, 0,
- "General movement damping");
- uiDefButF(block, NUMSLI, B_DIFF, "RotDamp ", 160, 165, 190, 19,
- &ob->rdamping, 0.0, 1.0, 10, 0,
- "General rotation damping");
+ Object *ob = arg2_object;
+
+ switch (ob->body_type) {
+ case OB_BODY_TYPE_NO_COLLISION:
+ ob->gameflag &= ~OB_COLLISION;
+ break;
+ case OB_BODY_TYPE_STATIC:
+ ob->gameflag |= OB_COLLISION;
+ ob->gameflag &= ~(OB_DYNAMIC|OB_RIGID_BODY|OB_SOFT_BODY);
+ break;
+ case OB_BODY_TYPE_DYNAMIC:
+ ob->gameflag |= OB_COLLISION|OB_DYNAMIC|OB_ACTOR;
+ ob->gameflag &= ~(OB_RIGID_BODY|OB_SOFT_BODY);
+ break;
+ case OB_BODY_TYPE_RIGID:
+ ob->gameflag |= OB_COLLISION|OB_DYNAMIC|OB_RIGID_BODY|OB_ACTOR;
+ ob->gameflag &= ~(OB_SOFT_BODY);
+ break;
+ default:
+ case OB_BODY_TYPE_SOFT:
+ ob->gameflag |= OB_COLLISION|OB_DYNAMIC|OB_SOFT_BODY|OB_ACTOR;
+ ob->gameflag &= ~(OB_RIGID_BODY);
+
+ /* assume triangle mesh, if no bounds chosen for soft body */
+ if ((ob->gameflag & OB_BOUNDS) && (ob->boundtype<OB_BOUND_POLYH))
+ {
+ ob->boundtype=OB_BOUND_POLYH;
}
+ /* create a BulletSoftBody structure if not already existing */
+ if (!ob->bsoft)
+ ob->bsoft = bsbNew();
+ break;
}
- uiBlockEndAlign(block);
+}
- uiBlockBeginAlign(block);
- uiDefButBitI(block, TOG, OB_BOUNDS, B_REDR, "Bounds", 10, 125, 75, 19,
- &ob->gameflag, 0, 0,0, 0,
- "Specify a bounds object for physics");
- if (ob->gameflag & OB_BOUNDS) {
- uiDefButS(block, MENU, REDRAWVIEW3D, "Boundary Display%t|Box%x0|Sphere%x1|Cylinder%x2|Cone%x3|Convex Hull Polytope%x5|Static TriangleMesh %x4",
- //almost ready to enable this one: uiDefButS(block, MENU, REDRAWVIEW3D, "Boundary Display%t|Box%x0|Sphere%x1|Cylinder%x2|Cone%x3|Convex Hull Polytope%x5|Static TriangleMesh %x4|Dynamic Mesh %x5|",
- 85, 125, 160, 19, &ob->boundtype, 0, 0, 0, 0, "Selects the collision type");
- uiDefButBitI(block, TOG, OB_CHILD, B_REDR, "Compound", 250,125,100,19,
- &ob->gameflag, 0, 0, 0, 0,
- "Add Children");
+static uiBlock *advanced_bullet_menu(void *arg_ob)
+{
+ uiBlock *block;
+ Object *ob = arg_ob;
+ short yco = 105, xco = 0;
+
+ /* create a BulletSoftBody structure if not already existing */
+ if ((ob->body_type & OB_BODY_TYPE_SOFT) && !ob->bsoft)
+ ob->bsoft = bsbNew();
+
+ block= uiNewBlock(&curarea->uiblocks, "advanced_bullet_options", UI_EMBOSS, UI_HELV, curarea->win);
+ /* use this for a fake extra empy space around the buttons */
+ uiDefBut(block, LABEL, 0, "", -5, -10, 255, 140, NULL, 0, 0, 0, 0, "");
+
+ if (ob->gameflag & OB_SOFT_BODY) {
+
+ if (ob->bsoft)
+ {
+ xco = 0;
+ uiDefButF(block, NUMSLI, 0, "LinStiff", xco, yco, 238, 19,
+ &ob->bsoft->linStiff, 0.0, 1.0, 1, 0,
+ "Linear stiffness of the soft body links");
+ yco -= 25;
+ xco = 0;
+
+ uiDefButBitI(block, TOG, OB_BSB_SHAPE_MATCHING, 0, "Shape matching",
+ xco, yco, 118, 19, &ob->bsoft->flag, 0, 0, 0, 0,
+ "Enable soft body shape matching goal");
+
+ uiDefButBitI(block, TOG, OB_BSB_BENDING_CONSTRAINTS, 0, "Bending Constraints",
+ xco+=120, yco, 118, 19, &ob->bsoft->flag, 0, 0, 0, 0,
+ "Enable bending constraints");
+
+ yco -= 25;
+ xco = 0;
+ uiDefButBitI(block, TOG, OB_BSB_COL_CL_RS, 0, "Cluster Col. RS",
+ xco, yco, 118, 19, &ob->bsoft->collisionflags, 0, 0, 0, 0,
+ "Enable cluster collision between soft and rigid body");
+ uiDefButBitI(block, TOG, OB_BSB_COL_CL_SS, 0, "Cluster Col. SS",
+ xco+=120, yco, 118, 19, &ob->bsoft->collisionflags, 0, 0, 0, 0,
+ "Enable cluster collision between soft and soft body");
+ yco -= 25;
+ xco = 0;
+ uiDefButI(block, NUM, REDRAWVIEW3D, "Clus.It.",
+ xco, yco, 118, 19, &ob->bsoft->numclusteriterations, 1.0, 128.,
+ 0, 0, "Specify the number of cluster iterations");
+
+ uiDefButI(block, NUM, REDRAWVIEW3D, "piterations",
+ xco+=120, yco, 118, 19, &ob->bsoft->piterations, 0, 10,
+ 0, 0, "Position solver iterations");
+
+ yco -= 25;
+ xco = 0;
+ uiDefButF(block, NUMSLI, REDRAWVIEW3D, "Friction",
+ xco, yco, 118, 19, &ob->bsoft->kDF, 0.0, 1.,
+ 0, 0, "Dynamic Friction");
+
+ uiDefButF(block, NUMSLI, REDRAWVIEW3D, "kMT",
+ xco+=120, yco, 118, 19, &ob->bsoft->kMT, 0, 1,
+ 0, 0, "Pose matching coefficient");
+
+ /*
+ //too complex tweaking, disable for now
+ uiDefButF(block, NUMSLI, REDRAWVIEW3D, "kVC",
+ xco+=80, yco, 80, 19, &ob->bsoft->kVC, 0, 100,
+ 0, 0, "Volume coefficient");
+ */
+
+ xco = 0;
+/*
+//would be a cool option, like leaves in the wind, need complex tweaking
+ uiDefButBitI(block, TOG, OB_BSB_AERO_VTWOSIDE, 0, "Aero model",
+ xco, yco, 118, 19, &ob->bsoft->flag, 0, 0, 0, 0,
+ "Enable aero model, vertex normals are flipped to match velocity");
+
+ yco -= 25;
+*/
+
+ }
+
+ } else
+ {
+
+
+ xco = 0;
+
+ uiDefButBitI(block, TOG, OB_ACTOR, 0, "Sensor actor",
+ xco, yco, 118, 19, &ob->gameflag, 0, 0, 0, 0,
+ "Objects that are detected by the Near and Radar sensor");
+
+ if (ob->gameflag & OB_DYNAMIC) {
+ if (ob->margin < 0.001f)
+ ob->margin = 0.06f;
+ uiDefButF(block, NUM, 0, "Margin",
+ xco+120, yco, 118, 19, &ob->margin, 0.001, 1.0, 1, 0,
+ "Collision margin");
+ } else {
+ uiDefButF(block, NUM, 0, "Margin",
+ xco+120, yco, 118, 19, &ob->margin, 0.0, 1.0, 1, 0,
+ "Collision margin");
+ }
+ yco -= 25;
+ xco = 0;
+
+
}
- uiBlockEndAlign(block);
+
+ uiBlockSetDirection(block, UI_TOP);
+
+ return block;
}
-static void check_object_state(void *arg1_but, void *arg2_mask)
+static void buttons_bullet(uiBlock *block, Object *ob)
{
- unsigned int *cont_mask = arg2_mask;
- uiBut *but = arg1_but;
+ uiBut *but;
- if (*cont_mask == 0 || !(G.qual & LR_SHIFTKEY))
- *cont_mask = (1<<but->retval);
- but->retval = B_REDR;
+ /* determine the body_type setting based on flags */
+ if (!(ob->gameflag & OB_COLLISION))
+ ob->body_type = OB_BODY_TYPE_NO_COLLISION;
+ else if (!(ob->gameflag & OB_DYNAMIC))
+ ob->body_type = OB_BODY_TYPE_STATIC;
+ else if (!(ob->gameflag & (OB_RIGID_BODY|OB_SOFT_BODY)))
+ ob->body_type = OB_BODY_TYPE_DYNAMIC;
+ else if (ob->gameflag & OB_RIGID_BODY)
+ ob->body_type = OB_BODY_TYPE_RIGID;
+ else
+ ob->body_type = OB_BODY_TYPE_SOFT;
+
+ uiBlockBeginAlign(block);
+
+ //only enable game soft body if Blender Soft Body exists
+ but = uiDefButS(block, MENU, REDRAWVIEW3D,
+ "Object type%t|No collision%x0|Static%x1|Dynamic%x2|Rigid body%x3|Soft body%x4",
+ 10, 205, 120, 19, &ob->body_type, 0, 0, 0, 0, "Selects the type of physical representation");
+ uiButSetFunc(but, check_body_type, but, ob);
+
+ if (ob->gameflag & OB_COLLISION) {
+
+
+
+ uiDefButBitI(block, TOG, OB_GHOST, B_REDR, "Ghost",
+ 135,205,55,19,
+ &ob->gameflag, 0, 0, 0, 0,
+ "Objects that don't restitute collisions (like a ghost)");
+
+ //uiBlockSetCol(block, TH_BUT_SETTING1);
+ uiDefBlockBut(block, advanced_bullet_menu, ob,
+ "Advanced Settings",
+ 200, 205, 150, 19, "Display collision advanced settings");
+ //uiBlockSetCol(block, TH_BUT_SETTING2);
+
+
+ if(ob->gameflag & OB_DYNAMIC) {
+
+ uiDefButF(block, NUM, B_DIFF, "Mass:", 10, 185, 130, 19,
+ &ob->mass, 0.01, 10000.0, 10, 2,
+ "The mass of the Object");
+
+ if (!(ob->gameflag & OB_SOFT_BODY))
+ {
+
+
+ uiDefButF(block, NUM, REDRAWVIEW3D, "Radius:", 140, 185, 130, 19,
+ &ob->inertia, 0.01, 10.0, 10, 2,
+ "Radius for Bounding sphere and Fh/Fh Rot");
+
+ uiDefButBitI(block, TOG, OB_COLLISION_RESPONSE, B_REDR, "No sleeping", 270,185,80,19,
+ &ob->gameflag, 0, 0, 0, 0,
+ "Disable auto (de)activation");
+
+ uiDefButF(block, NUMSLI, B_DIFF, "Damp ", 10, 165, 150, 19,
+ &ob->damping, 0.0, 1.0, 10, 0,
+ "General movement damping");
+ uiDefButF(block, NUMSLI, B_DIFF, "RotDamp ", 160, 165, 190, 19,
+ &ob->rdamping, 0.0, 1.0, 10, 0,
+ "General rotation damping");
+
+ uiDefButBitI(block, TOG, OB_DO_FH, B_DIFF, "Do Fh", 10,145,50,19,
+ &ob->gameflag, 0, 0, 0, 0,
+ "Use Fh settings in Materials");
+ uiDefButBitI(block, TOG, OB_ROT_FH, B_DIFF, "Rot Fh", 60,145,50,19,
+ &ob->gameflag, 0, 0, 0, 0,
+ "Use face normal to rotate Object");
+ /* Form factor is hooked up in Bullet, to scale inertia tensor */
+
+ uiDefButF(block, NUM, B_DIFF, "Form:", 110, 145, 120, 19,
+ &ob->formfactor, 0.01, 100.0, 10, 0,
+ "Form factor scales the inertia tensor");
+ }
+
+
+ }
+
+ uiBlockEndAlign(block);
+
+ /* In Bullet, anisotripic friction can be applied to static objects as well, just not soft bodies */
+
+ if (!(ob->gameflag & OB_SOFT_BODY))
+ {
+ uiDefButBitI(block, TOG, OB_ANISOTROPIC_FRICTION, B_REDR, "Anisotropic",
+ 230, 145, 120, 19,
+ &ob->gameflag, 0.0, 1.0, 10, 0,
+ "Enable anisotropic friction");
+
+ if (ob->gameflag & OB_ANISOTROPIC_FRICTION) {
+ uiDefButF(block, NUM, B_DIFF, "x friction:", 10, 125, 114, 19,
+ &ob->anisotropicFriction[0], 0.0, 1.0, 10, 0,
+ "Relative friction coefficient in the x-direction.");
+ uiDefButF(block, NUM, B_DIFF, "y friction:", 124, 125, 113, 19,
+ &ob->anisotropicFriction[1], 0.0, 1.0, 10, 0,
+ "Relative friction coefficient in the y-direction.");
+ uiDefButF(block, NUM, B_DIFF, "z friction:", 237, 125, 113, 19,
+ &ob->anisotropicFriction[2], 0.0, 1.0, 10, 0,
+ "Relative friction coefficient in the z-direction.");
+ }
+
+
+ }
+
+ uiBlockBeginAlign(block);
+ uiDefButBitI(block, TOG, OB_BOUNDS, B_REDR, "Bounds", 10, 105, 80, 19,
+ &ob->gameflag, 0, 0, 0, 0,
+ "Specify a collision bounds type");
+ if (ob->gameflag & OB_BOUNDS) {
+ //only allow convex hull/triangle mesh for soft bodies
+
+ if ((ob->body_type==OB_BODY_TYPE_SOFT) && (ob->gameflag & OB_BOUNDS) && (ob->boundtype<OB_BOUND_POLYH))
+ {
+ ob->boundtype=OB_BOUND_POLYH;
+ }
+
+ if (ob->body_type==OB_BODY_TYPE_SOFT)
+ {
+ uiDefButS(block, MENU, REDRAWVIEW3D, "Collision Bounds%t|Convex Hull%x5|Triangle Mesh%x4",
+ 90, 105, 150, 19, &ob->boundtype, 0, 0, 0, 0, "Selects the collision type");
+ } else
+ {
+ uiDefButS(block, MENU, REDRAWVIEW3D, "Collision Bounds%t|Box%x0|Sphere%x1|Cylinder%x2|Cone%x3|Convex Hull%x5|Triangle Mesh%x4",
+ 90, 105, 150, 19, &ob->boundtype, 0, 0, 0, 0, "Selects the collision type");
+ }
+ if (ob->body_type!=OB_BODY_TYPE_SOFT)
+ {
+ uiDefButBitI(block, TOG, OB_CHILD, B_REDR, "Compound", 240,105,110,19,
+ &ob->gameflag, 0, 0, 0, 0,
+ "Add Children");
+ }
+ }
+ uiBlockEndAlign(block);
+ }
+
+ uiBlockEndAlign(block);
+
+
}
static void check_controller_state_mask(void *arg1_but, void *arg2_mask)
@@ -3055,6 +3405,9 @@ void logic_buts(void)
int a, iact, stbit, offset;
short xco, yco, count, width, ycoo;
char *pupstr, name[32];
+ /* pin is a bool used for actuator and sensor drawing with states
+ * pin so changing states dosnt hide the logic brick */
+ char pin;
wrld= G.scene->world;
@@ -3085,7 +3438,7 @@ void logic_buts(void)
uiBlockSetCol(block, TH_AUTO);
uiBlockBeginAlign(block);
- uiDefBut(block, BUT, B_ADD_PROP, "Add Property", 10, 90, 340, 24,
+ uiDefBut(block, BUT, B_ADD_PROP, "Add Property", 10, 70, 340, 24,
NULL, 0.0, 100.0, 100, 0,
"");
@@ -3094,26 +3447,26 @@ void logic_buts(void)
a= 0;
prop= ob->prop.first;
while(prop) {
- but= uiDefBut(block, BUT, 1, "Del", 10, (short)(70-20*a), 40, 20, NULL, 0.0, 0.0, 1, (float)a, "");
+ but= uiDefBut(block, BUT, 1, "Del", 10, (short)(50-20*a), 40, 20, NULL, 0.0, 0.0, 1, (float)a, "");
uiButSetFunc(but, del_property, prop, NULL);
- uiDefButS(block, MENU, B_CHANGE_PROP, pupstr, 50, (short)(70-20*a), 60, 20, &prop->type, 0, 0, 0, 0, "");
- but= uiDefBut(block, TEX, 1, "Name:", 110, (short)(70-20*a), 110, 20, prop->name, 0, 31, 0, 0, "");
+ uiDefButS(block, MENU, B_CHANGE_PROP, pupstr, 50, (short)(50-20*a), 60, 20, &prop->type, 0, 0, 0, 0, "");
+ but= uiDefBut(block, TEX, 1, "Name:", 110, (short)(50-20*a), 110, 20, prop->name, 0, 31, 0, 0, "Available as GameObject attributes in the game engines python api");
uiButSetFunc(but, make_unique_prop_names_cb, prop->name, (void*) 1);
if(prop->type==PROP_BOOL) {
- uiDefButBitI(block, TOG, 1, B_REDR, "True", 220, (short)(70-20*a), 55, 20, &prop->data, 0, 0, 0, 0, "");
- uiDefButBitI(block, TOGN, 1, B_REDR, "False", 270, (short)(70-20*a), 55, 20, &prop->data, 0, 0, 0, 0, "");
+ uiDefButBitI(block, TOG, 1, B_REDR, "True", 220, (short)(50-20*a), 55, 20, &prop->data, 0, 0, 0, 0, "");
+ uiDefButBitI(block, TOGN, 1, B_REDR, "False", 270, (short)(50-20*a), 55, 20, &prop->data, 0, 0, 0, 0, "");
}
else if(prop->type==PROP_INT)
- uiDefButI(block, NUM, B_REDR, "", 220, (short)(70-20*a), 110, 20, &prop->data, -10000, 10000, 0, 0, "");
+ uiDefButI(block, NUM, B_REDR, "", 220, (short)(50-20*a), 110, 20, &prop->data, -10000, 10000, 0, 0, "");
else if(prop->type==PROP_FLOAT)
- uiDefButF(block, NUM, B_REDR, "", 220, (short)(70-20*a), 110, 20, (float*) &prop->data, -10000, 10000, 100, 3, "");
+ uiDefButF(block, NUM, B_REDR, "", 220, (short)(50-20*a), 110, 20, (float*) &prop->data, -10000, 10000, 100, 3, "");
else if(prop->type==PROP_STRING)
- uiDefBut(block, TEX, B_REDR, "", 220, (short)(70-20*a), 110, 20, prop->poin, 0, 127, 0, 0, "");
+ uiDefBut(block, TEX, B_REDR, "", 220, (short)(50-20*a), 110, 20, prop->poin, 0, 127, 0, 0, "");
else if(prop->type==PROP_TIME)
- uiDefButF(block, NUM, B_REDR, "", 220, (short)(70-20*a), 110, 20, (float*) &prop->data, -10000, 10000, 100, 3, "");
+ uiDefButF(block, NUM, B_REDR, "", 220, (short)(50-20*a), 110, 20, (float*) &prop->data, -10000, 10000, 100, 3, "");
- uiDefButBitS(block, TOG, PROP_DEBUG, B_REDR, "D", 330, (short)(70-20*a), 20, 20, &prop->flag, 0, 0, 0, 0, "Print Debug info");
+ uiDefButBitS(block, TOG, PROP_DEBUG, B_REDR, "D", 330, (short)(50-20*a), 20, 20, &prop->flag, 0, 0, 0, 0, "Print Debug info");
a++;
prop= prop->next;
@@ -3183,7 +3536,8 @@ void logic_buts(void)
while(cont) {
for (iact=0; iact<cont->totlinks; iact++) {
act = cont->links[iact];
- act->flag |= ACT_LINKED;
+ if (act)
+ act->flag |= ACT_LINKED;
}
controller_state_mask |= cont->state_mask;
cont = cont->next;
@@ -3193,24 +3547,25 @@ void logic_buts(void)
/* first show the state */
uiBlockSetEmboss(block, UI_EMBOSSP);
- uiDefBlockBut(block, object_state_mask_menu, ob, "State", (short)(xco-10), (short)(yco-10), 40, 19, "Object state menu: store and retrieve initial state");
+ uiDefBlockBut(block, object_state_mask_menu, ob, "State", (short)(xco-10), (short)(yco-10), 36, 19, "Object state menu: store and retrieve initial state");
uiBlockSetEmboss(block, UI_EMBOSS);
if (!ob->state)
ob->state = 1;
for (offset=0; offset<15; offset+=5) {
uiBlockBeginAlign(block);
for (stbit=0; stbit<5; stbit++) {
- but = uiDefButBitI(block, controller_state_mask&(1<<(stbit+offset)) ? BUT_TOGDUAL:TOG, 1<<(stbit+offset), stbit+offset, "", (short)(xco+35+12*stbit+13*offset), yco, 12, 12, (int *)&(ob->state), 0, 0, 0, 0, get_state_name(ob, (short)(stbit+offset)));
- uiButSetFunc(but, check_object_state, but, &(ob->state));
+ but = uiDefButBitI(block, controller_state_mask&(1<<(stbit+offset)) ? BUT_TOGDUAL:TOG, 1<<(stbit+offset), stbit+offset, "", (short)(xco+31+12*stbit+13*offset), yco, 12, 12, (int *)&(ob->state), 0, 0, 0, 0, get_state_name(ob, (short)(stbit+offset)));
+ uiButSetFunc(but, check_state_mask, but, &(ob->state));
}
for (stbit=0; stbit<5; stbit++) {
- but = uiDefButBitI(block, controller_state_mask&(1<<(stbit+offset+15)) ? BUT_TOGDUAL:TOG, 1<<(stbit+offset+15), stbit+offset+15, "", (short)(xco+35+12*stbit+13*offset), yco-12, 12, 12, (int *)&(ob->state), 0, 0, 0, 0, get_state_name(ob, (short)(stbit+offset+15)));
- uiButSetFunc(but, check_object_state, but, &(ob->state));
+ but = uiDefButBitI(block, controller_state_mask&(1<<(stbit+offset+15)) ? BUT_TOGDUAL:TOG, 1<<(stbit+offset+15), stbit+offset+15, "", (short)(xco+31+12*stbit+13*offset), yco-12, 12, 12, (int *)&(ob->state), 0, 0, 0, 0, get_state_name(ob, (short)(stbit+offset+15)));
+ uiButSetFunc(but, check_state_mask, but, &(ob->state));
}
}
uiBlockBeginAlign(block);
- uiDefButBitS(block, TOG, OB_SETSTBIT, B_SET_STATE_BIT, "All",(short)(xco+235), yco-10, 25, 19, &ob->scaflag, 0, 0, 0, 0, "Set all state bits");
- uiDefButBitS(block, TOG, OB_INITSTBIT, B_INIT_STATE_BIT, "Ini",(short)(xco+260), yco-10, 25, 19, &ob->scaflag, 0, 0, 0, 0, "Set the initial state");
+ uiDefButBitS(block, TOG, OB_SETSTBIT, B_SET_STATE_BIT, "All",(short)(xco+226), yco-10, 22, 19, &ob->scaflag, 0, 0, 0, 0, "Set all state bits");
+ uiDefButBitS(block, TOG, OB_INITSTBIT, B_INIT_STATE_BIT, "Ini",(short)(xco+248), yco-10, 22, 19, &ob->scaflag, 0, 0, 0, 0, "Set the initial state");
+ uiDefButBitS(block, TOG, OB_DEBUGSTATE, 0, "D",(short)(xco+270), yco-10, 15, 19, &ob->scaflag, 0, 0, 0, 0, "Print state debug info");
uiBlockEndAlign(block);
yco-=35;
@@ -3231,20 +3586,21 @@ void logic_buts(void)
/* this controller is visible, mark all its actuator */
for (iact=0; iact<cont->totlinks; iact++) {
act = cont->links[iact];
- act->flag |= ACT_VISIBLE;
+ if (act)
+ act->flag |= ACT_VISIBLE;
}
uiBlockSetEmboss(block, UI_EMBOSSM);
uiDefIconButBitS(block, TOG, CONT_DEL, B_DEL_CONT, ICON_X, xco, yco, 22, 19, &cont->flag, 0, 0, 0, 0, "Delete Controller");
uiDefIconButBitS(block, ICONTOG, CONT_SHOW, B_REDR, ICON_RIGHTARROW, (short)(xco+width-22), yco, 22, 19, &cont->flag, 0, 0, 0, 0, "Controller settings");
uiBlockSetEmboss(block, UI_EMBOSSP);
sprintf(name, "%d", first_bit(cont->state_mask)+1);
- uiDefBlockBut(block, controller_state_mask_menu, cont, name, (short)(xco+width-44), yco, 22, 19, "Set controller state mask");
+ uiDefBlockBut(block, controller_state_mask_menu, cont, name, (short)(xco+width-44), yco, 22, 19, "Set controller state index (from 1 to 30)");
uiBlockSetEmboss(block, UI_EMBOSSM);
if(cont->flag & CONT_SHOW) {
cont->otype= cont->type;
- uiDefButS(block, MENU, B_CHANGE_CONT, controller_pup(),(short)(xco+22), yco, 100, 19, &cont->type, 0, 0, 0, 0, "Controller type");
- but= uiDefBut(block, TEX, 1, "", (short)(xco+122), yco, (short)(width-166), 19, cont->name, 0, 31, 0, 0, "Controller name");
+ uiDefButS(block, MENU, B_CHANGE_CONT, controller_pup(),(short)(xco+22), yco, 70, 19, &cont->type, 0, 0, 0, 0, "Controller type");
+ but= uiDefBut(block, TEX, 1, "", (short)(xco+92), yco, (short)(width-136), 19, cont->name, 0, 31, 0, 0, "Controller name");
uiButSetFunc(but, make_unique_prop_names_cb, cont->name, (void*) 0);
ycoo= yco;
@@ -3254,9 +3610,9 @@ void logic_buts(void)
else {
cpack(0x999999);
glRecti(xco+22, yco, xco+width-22,yco+19);
- but= uiDefBut(block, LABEL, 0, controller_name(cont->type), (short)(xco+22), yco, 100, 19, cont, 0, 0, 0, 0, "Controller type");
+ but= uiDefBut(block, LABEL, 0, controller_name(cont->type), (short)(xco+22), yco, 70, 19, cont, 0, 0, 0, 0, "Controller type");
uiButSetFunc(but, sca_move_controller, cont, NULL);
- but= uiDefBut(block, LABEL, 0, cont->name,(short)(xco+122), yco,(short)(width-166), 19, cont, 0, 0, 0, 0, "Controller name");
+ but= uiDefBut(block, LABEL, 0, cont->name,(short)(xco+92), yco,(short)(width-136), 19, cont, 0, 0, 0, 0, "Controller name");
uiButSetFunc(but, sca_move_controller, cont, NULL);
ycoo= yco;
}
@@ -3313,18 +3669,26 @@ void logic_buts(void)
sens= ob->sensors.first;
while(sens) {
if (!(G.buts->scaflag & BUTS_SENS_STATE) ||
- sens->totlinks == 0 || /* always display sensor without links so that is can be edited */
- is_sensor_linked(block, sens)) {
+ (sens->totlinks == 0) || /* always display sensor without links so that is can be edited */
+ (sens->flag & SENS_PIN && G.buts->scaflag & BUTS_SENS_STATE) || /* states can hide some sensors, pinned sensors ignore the visible state */
+ (is_sensor_linked(block, sens))
+ ) {
+ /* should we draw the pin? - for now always draw when there is a state */
+ pin = (G.buts->scaflag & BUTS_SENS_STATE && (sens->flag & SENS_SHOW || sens->flag & SENS_PIN)) ? 1:0 ;
+
sens->flag |= SENS_VISIBLE;
uiBlockSetEmboss(block, UI_EMBOSSM);
uiDefIconButBitS(block, TOG, SENS_DEL, B_DEL_SENS, ICON_X, xco, yco, 22, 19, &sens->flag, 0, 0, 0, 0, "Delete Sensor");
+ if (pin)
+ uiDefIconButBitS(block, ICONTOG, SENS_PIN, B_REDR, ICON_PIN_DEHLT, (short)(xco+width-44), yco, 22, 19, &sens->flag, 0, 0, 0, 0, "Display when not linked to a visible states controller");
+
uiDefIconButBitS(block, ICONTOG, SENS_SHOW, B_REDR, ICON_RIGHTARROW, (short)(xco+width-22), yco, 22, 19, &sens->flag, 0, 0, 0, 0, "Sensor settings");
ycoo= yco;
if(sens->flag & SENS_SHOW)
{
- uiDefButS(block, MENU, B_CHANGE_SENS, sensor_pup(), (short)(xco+22), yco, 100, 19, &sens->type, 0, 0, 0, 0, "Sensor type");
- but= uiDefBut(block, TEX, 1, "", (short)(xco+122), yco, (short)(width-144), 19, sens->name, 0, 31, 0, 0, "Sensor name");
+ uiDefButS(block, MENU, B_CHANGE_SENS, sensor_pup(), (short)(xco+22), yco, 80, 19, &sens->type, 0, 0, 0, 0, "Sensor type");
+ but= uiDefBut(block, TEX, 1, "", (short)(xco+102), yco, (short)(width-(pin?146:124)), 19, sens->name, 0, 31, 0, 0, "Sensor name");
uiButSetFunc(but, make_unique_prop_names_cb, sens->name, (void*) 0);
sens->otype= sens->type;
@@ -3334,9 +3698,9 @@ void logic_buts(void)
else {
set_col_sensor(sens->type, 1);
glRecti(xco+22, yco, xco+width-22,yco+19);
- but= uiDefBut(block, LABEL, 0, sensor_name(sens->type), (short)(xco+22), yco, 100, 19, sens, 0, 0, 0, 0, "");
+ but= uiDefBut(block, LABEL, 0, sensor_name(sens->type), (short)(xco+22), yco, 80, 19, sens, 0, 0, 0, 0, "");
uiButSetFunc(but, sca_move_sensor, sens, NULL);
- but= uiDefBut(block, LABEL, 0, sens->name, (short)(xco+122), yco, (short)(width-144), 19, sens, 0, 31, 0, 0, "");
+ but= uiDefBut(block, LABEL, 0, sens->name, (short)(xco+102), yco, (short)(width-(pin?146:124)), 19, sens, 0, 31, 0, 0, "");
uiButSetFunc(but, sca_move_sensor, sens, NULL);
}
@@ -3385,16 +3749,22 @@ void logic_buts(void)
while(act) {
if (!(G.buts->scaflag & BUTS_ACT_STATE) ||
!(act->flag & ACT_LINKED) || /* always display actuators without links so that is can be edited */
- (act->flag & ACT_VISIBLE)) { /* this actuator has visible connection, display it */
+ (act->flag & ACT_VISIBLE) || /* this actuator has visible connection, display it */
+ (act->flag & ACT_PIN && G.buts->scaflag & BUTS_ACT_STATE)) {
+
+ pin = (G.buts->scaflag & BUTS_ACT_STATE && (act->flag & SENS_SHOW || act->flag & SENS_PIN)) ? 1:0 ;
+
act->flag |= ACT_VISIBLE; /* mark the actuator as visible to help implementing the up/down action */
uiBlockSetEmboss(block, UI_EMBOSSM);
uiDefIconButBitS(block, TOG, ACT_DEL, B_DEL_ACT, ICON_X, xco, yco, 22, 19, &act->flag, 0, 0, 0, 0, "Delete Actuator");
- uiDefIconButBitS(block, ICONTOG, ACT_SHOW, B_REDR, ICON_RIGHTARROW, (short)(xco+width-22), yco, 22, 19, &act->flag, 0, 0, 0, 0, "Actuator settings");
-
+ if (pin)
+ uiDefIconButBitS(block, ICONTOG, ACT_PIN, B_REDR, ICON_PIN_DEHLT, (short)(xco+width-44), yco, 22, 19, &act->flag, 0, 0, 0, 0, "Display when not linked to a visible states controller");
+ uiDefIconButBitS(block, ICONTOG, ACT_SHOW, B_REDR, ICON_RIGHTARROW, (short)(xco+width-22), yco, 22, 19, &act->flag, 0, 0, 0, 0, "Display the actuator");
+
if(act->flag & ACT_SHOW) {
act->otype= act->type;
- uiDefButS(block, MENU, B_CHANGE_ACT, actuator_pup(ob), (short)(xco+22), yco, 100, 19, &act->type, 0, 0, 0, 0, "Actuator type");
- but= uiDefBut(block, TEX, 1, "", (short)(xco+122), yco, (short)(width-144), 19, act->name, 0, 31, 0, 0, "Actuator name");
+ uiDefButS(block, MENU, B_CHANGE_ACT, actuator_pup(ob), (short)(xco+22), yco, 90, 19, &act->type, 0, 0, 0, 0, "Actuator type");
+ but= uiDefBut(block, TEX, 1, "", (short)(xco+112), yco, (short)(width-(pin?156:134)), 19, act->name, 0, 31, 0, 0, "Actuator name");
uiButSetFunc(but, make_unique_prop_names_cb, act->name, (void*) 0);
ycoo= yco;
@@ -3404,9 +3774,9 @@ void logic_buts(void)
else {
set_col_actuator(act->type, 1);
glRecti((short)(xco+22), yco, (short)(xco+width-22),(short)(yco+19));
- but= uiDefBut(block, LABEL, 0, actuator_name(act->type), (short)(xco+22), yco, 100, 19, act, 0, 0, 0, 0, "Actuator type");
+ but= uiDefBut(block, LABEL, 0, actuator_name(act->type), (short)(xco+22), yco, 90, 19, act, 0, 0, 0, 0, "Actuator type");
uiButSetFunc(but, sca_move_actuator, act, NULL);
- but= uiDefBut(block, LABEL, 0, act->name, (short)(xco+122), yco, (short)(width-144), 19, act, 0, 0, 0, 0, "Actuator name");
+ but= uiDefBut(block, LABEL, 0, act->name, (short)(xco+112), yco, (short)(width-(pin?156:134)), 19, act, 0, 0, 0, 0, "Actuator name");
uiButSetFunc(but, sca_move_actuator, act, NULL);
ycoo= yco;
}
diff --git a/source/blender/src/buttons_object.c b/source/blender/src/buttons_object.c
index 58f3bff09c8..8ba56b84305 100644
--- a/source/blender/src/buttons_object.c
+++ b/source/blender/src/buttons_object.c
@@ -45,6 +45,7 @@
#include "BKE_action.h"
#include "BKE_cloth.h"
+#include "BKE_fluidsim.h"
#include "BKE_global.h"
#include "BKE_main.h"
#include "BKE_library.h"
@@ -66,6 +67,7 @@
#include "BIF_glutil.h"
#include "BIF_graphics.h"
#include "BIF_interface.h"
+#include "BIF_keyframing.h"
#include "BIF_keyval.h"
#include "BIF_mainqueue.h"
#include "BIF_mywindow.h"
@@ -241,9 +243,9 @@ static void enable_constraint_ipo_func (void *ob_v, void *con_v)
/* adds ipo & channels & curve if needed */
if(con->flag & CONSTRAINT_OWN_IPO)
- verify_ipo((ID *)ob, ID_CO, NULL, con->name, actname);
+ verify_ipo((ID *)ob, ID_CO, NULL, con->name, actname, 1);
else
- verify_ipo((ID *)ob, ID_CO, actname, con->name, NULL);
+ verify_ipo((ID *)ob, ID_CO, actname, con->name, NULL, 1);
/* make sure ipowin shows it */
ob->ipowin= ID_CO;
@@ -268,9 +270,9 @@ static void add_influence_key_to_constraint_func (void *ob_v, void *con_v)
/* adds ipo & channels & curve if needed */
if(con->flag & CONSTRAINT_OWN_IPO)
- icu= verify_ipocurve((ID *)ob, ID_CO, NULL, con->name, actname, CO_ENFORCE);
+ icu= verify_ipocurve((ID *)ob, ID_CO, NULL, con->name, actname, CO_ENFORCE, 1);
else
- icu= verify_ipocurve((ID *)ob, ID_CO, actname, con->name, NULL, CO_ENFORCE);
+ icu= verify_ipocurve((ID *)ob, ID_CO, actname, con->name, NULL, CO_ENFORCE, 1);
if (!icu) {
error("Cannot get a curve from this IPO, may be dealing with linked data");
@@ -2241,6 +2243,7 @@ void fluidsimFilesel(char *selection)
char prefix[FILE_MAXFILE];
char *srch, *srchSub, *srchExt, *lastFound;
int isElbeemSurf = 0;
+ FluidsimModifierData *fluidmd = (FluidsimModifierData *)modifiers_findByType(ob, eModifierType_Fluidsim);
// make prefix
strcpy(srcDir, selection);
@@ -2275,10 +2278,10 @@ void fluidsimFilesel(char *selection)
}
}
- if(ob->fluidsimSettings) {
- strcpy(ob->fluidsimSettings->surfdataPath, srcDir);
+ if(fluidmd && fluidmd->fss) {
+ strcpy(fluidmd->fss->surfdataPath, srcDir);
//not necessary? strcat(ob->fluidsimSettings->surfdataPath, "/");
- strcat(ob->fluidsimSettings->surfdataPath, prefix);
+ strcat(fluidmd->fss->surfdataPath, prefix);
// redraw view & buttons...
allqueue(REDRAWBUTSOBJECT, 0);
@@ -2382,13 +2385,14 @@ void do_object_panels(unsigned short event)
ParticleSystem *psys = MEM_callocN(sizeof(ParticleSystem), "particle_system");
ModifierData *md;
ParticleSystemModifierData *psmd;
+ FluidsimModifierData *fluidmd = (FluidsimModifierData *)modifiers_findByType(ob, eModifierType_Fluidsim);
part->type = PART_FLUID;
psys->part = part;
psys->pointcache = BKE_ptcache_add();
psys->flag |= PSYS_ENABLED;
- ob->fluidsimSettings->type = OB_FLUIDSIM_PARTICLE;
+ fluidmd->fss->type = OB_FLUIDSIM_PARTICLE;
BLI_addtail(&ob->particlesystem,psys);
@@ -2402,7 +2406,10 @@ void do_object_panels(unsigned short event)
allqueue(REDRAWBUTSOBJECT, 0);
break;
case B_FLUIDSIM_CHANGETYPE:
- if(ob && ob->particlesystem.first && ob->fluidsimSettings->type!=OB_FLUIDSIM_PARTICLE){
+ {
+ FluidsimModifierData *fluidmd = (FluidsimModifierData *)modifiers_findByType(ob, eModifierType_Fluidsim);
+ fluidmd->fss->flag &= ~OB_FLUIDSIM_REVERSE; // clear flag
+ if(ob && ob->particlesystem.first && fluidmd->fss->type!=OB_FLUIDSIM_PARTICLE){
ParticleSystem *psys;
for(psys=ob->particlesystem.first; psys; psys=psys->next) {
if(psys->part->type==PART_FLUID) {
@@ -2427,20 +2434,16 @@ void do_object_panels(unsigned short event)
}
allqueue(REDRAWBUTSOBJECT, 0);
break;
+ }
case B_FLUIDSIM_SELDIR:
{
ScrArea *sa = closest_bigger_area();
+ FluidsimModifierData *fluidmd = (FluidsimModifierData *)modifiers_findByType(ob, eModifierType_Fluidsim);
/* choose dir for surface files */
areawinset(sa->win);
- activate_fileselect(FILE_SPECIAL, "Select Directory", ob->fluidsimSettings->surfdataPath, fluidsimFilesel);
+ activate_fileselect(FILE_SPECIAL, "Select Directory", fluidmd->fss->surfdataPath, fluidsimFilesel);
}
break;
- case B_FLUIDSIM_FORCEREDRAW:
- /* force redraw */
- allqueue(REDRAWBUTSOBJECT, 0);
- allqueue(REDRAWVIEW3D, 0);
- DAG_object_flush_update(G.scene, ob, OB_RECALC_DATA);
- break;
case B_GROUP_RELINK:
group_relink_nla_objects(ob);
allqueue(REDRAWVIEW3D, 0);
@@ -2590,19 +2593,32 @@ static void object_panel_object(Object *ob)
/* all groups */
for(group= G.main->group.first; group; group= group->id.next) {
if(object_in_group(ob, group)) {
- xco= 160;
+ xco= 130;
+ if(group->id.lib) {
+ uiBlockBeginAlign(block);
+ uiSetButLock(GET_INT_FROM_POINTER(group->id.lib), ERROR_LIBDATA_MESSAGE); /* We cant actually use this button */
+ uiDefBut(block, TEX, B_IDNAME, "GR:", 10, 120-yco, 100, 20, group->id.name+2, 0.0, 21.0, 0, 0, "Displays Group name. Click to change.");
+ uiClearButLock();
+
+ but= uiDefIconBut(block, BUT, B_NOP, ICON_PARLIB, 110, 120-yco, 20, 20, NULL, 0.0, 0.0, 0.0, 0.0, "Make Group local");
+ uiButSetFunc(but, group_local, group, NULL);
+ uiBlockEndAlign(block);
+ } else {
+ but = uiDefBut(block, TEX, B_IDNAME, "GR:", 10, 120-yco, 120, 20, group->id.name+2, 0.0, 21.0, 0, 0, "Displays Group name. Click to change.");
+ uiButSetFunc(but, test_idbutton_cb, group->id.name, NULL);
+ }
+
+ uiSetButLock(GET_INT_FROM_POINTER(group->id.lib), ERROR_LIBDATA_MESSAGE);
uiBlockBeginAlign(block);
- uiSetButLock(GET_INT_FROM_POINTER(group->id.lib), ERROR_LIBDATA_MESSAGE); /* We cant actually use this button */
- but = uiDefBut(block, TEX, B_IDNAME, "GR:", 10, 120-yco, 150, 20, group->id.name+2, 0.0, 21.0, 0, 0, "Displays Group name. Click to change.");
- uiButSetFunc(but, test_idbutton_cb, group->id.name, NULL);
+ uiDefButF(block, NUM, REDRAWALL, "X:", xco+5, 120-yco, 50, 20, &group->dupli_ofs[0], -100000, 100000, 100, 0, "Offset to use when instacing the group");
+ uiDefButF(block, NUM, REDRAWALL, "Y:", xco+55, 120-yco, 50, 20, &group->dupli_ofs[1], -100000, 100000, 100, 0, "Offset to use when instacing the group");
+ uiDefButF(block, NUM, REDRAWALL, "Z:", xco+105, 120-yco, 50, 20, &group->dupli_ofs[2], -100000, 100000, 100, 0, "Offset to use when instacing the group");
+ uiBlockEndAlign(block);
uiClearButLock();
- if(group->id.lib) {
- but= uiDefIconBut(block, BUT, B_NOP, ICON_PARLIB, 160, 120-yco, 20, 20, NULL, 0.0, 0.0, 0.0, 0.0, "Make Group local");
- uiButSetFunc(but, group_local, group, NULL);
- xco= 180;
- } else { /* cant remove objects from linked groups */
+ xco = 290;
+ if(group->id.lib==0) { /* cant remove objects from linked groups */
but = uiDefIconBut(block, BUT, B_NOP, VICON_X, xco, 120-yco, 20, 20, NULL, 0.0, 0.0, 0.0, 0.0, "Remove Group membership");
uiButSetFunc(but, group_ob_rem, group, ob);
}
@@ -2930,7 +2946,8 @@ void do_effects_panels(unsigned short event)
psmd= (ParticleSystemModifierData*) md;
psmd->psys=psys;
BLI_addtail(&ob->modifiers, md);
- }
+ } else
+ id->us--;
idtest->us++;
psys->part=(ParticleSettings*)idtest;
@@ -2988,7 +3005,7 @@ void do_effects_panels(unsigned short event)
if(ob && (psys=psys_get_current(ob))){
if(psys->part) {
if(psys->part->id.us>1){
- if(okee("Make local")){
+ if(okee("Make Single User")){
part=psys_copy_settings(psys->part);
part->id.us=1;
psys->part->id.us--;
@@ -3279,6 +3296,8 @@ static void object_panel_collision(Object *ob)
uiDefBut(block, LABEL, 0, "",160,160,150,2, NULL, 0.0, 0, 0, 0, "");
if(pd->deflect) {
+ CollisionModifierData *collmd = (CollisionModifierData *)modifiers_findByType ( ob, eModifierType_Collision );
+
uiDefBut(block, LABEL, 0, "Particle Interaction", 10,135,310,20, NULL, 0.0, 0, 0, 0, "");
uiBlockBeginAlign(block);
@@ -3294,12 +3313,18 @@ static void object_panel_collision(Object *ob)
uiDefBut(block, LABEL, 0, "Soft Body and Cloth Interaction", 10,65,310,20, NULL, 0.0, 0, 0, 0, "");
uiBlockBeginAlign(block);
- uiDefButF(block, NUM, B_FIELD_CHANGE, "Damping:", 10,45,150,20, &pd->pdef_sbdamp, 0.0, 1.0, 10, 0, "Amount of damping during collision");
- uiDefButF(block, NUM, B_FIELD_CHANGE, "Inner:", 10,25,150,20, &pd->pdef_sbift, 0.001, 1.0, 10, 0, "Inner face thickness");
- uiDefButF(block, NUM, B_FIELD_CHANGE, "Outer:", 10, 5,150,20, &pd->pdef_sboft, 0.001, 1.0, 10, 0, "Outer face thickness");
+ uiDefButF(block, NUM, B_FIELD_CHANGE, "Inner:", 10,45,150,20, &pd->pdef_sbift, 0.001, 1.0, 10, 0, "Inner face thickness");
+ uiDefButF(block, NUM, B_FIELD_CHANGE, "Outer:", 160, 45,150,20, &pd->pdef_sboft, 0.001, 1.0, 10, 0, "Outer face thickness");
uiBlockEndAlign(block);
+ uiDefButF(block, NUM, B_FIELD_CHANGE, "Damping:", 10,25,150,20, &pd->pdef_sbdamp, 0.0, 1.0, 10, 0, "Amount of damping during collision");
- uiDefButBitS(block, TOG, OB_SB_COLLFINAL, B_FIELD_CHANGE, "Ev.M.Stack", 170,45,150,20, &ob->softflag, 0, 0, 0, 0, "Pick collision object from modifier stack (softbody only)");
+ uiDefButBitS(block, TOG, OB_SB_COLLFINAL, B_FIELD_CHANGE, "Ev.M.Stack", 160,25,150,20, &ob->softflag, 0, 0, 0, 0, "Pick collision object from modifier stack (softbody only)");
+
+ // collision options
+ if(collmd)
+ {
+ uiDefButS(block, NUM, B_FIELD_CHANGE, "Absorption: ", 10,0,150,20, &collmd->absorption, 0.0, 100, 1, 2, "How much of effector force gets lost during collision with this object (in percent).");
+ }
}
}
}
@@ -3309,6 +3334,7 @@ static void object_panel_fields(Object *ob)
uiBut *but;
int particles=0;
static short actpsys=-1;
+ static char slot=0;
block= uiNewBlock(&curarea->uiblocks, "object_panel_fields", UI_EMBOSS, UI_HELV, curarea->win);
if(uiNewPanel(curarea, block, "Fields", "Physics", 0, 0, 318, 204)==0) return;
@@ -3330,7 +3356,7 @@ static void object_panel_fields(Object *ob)
char *tipstr="Choose field type";
uiBlockBeginAlign(block);
-
+
if(ob->particlesystem.first) {
ParticleSystem *psys;
char *menustr2= psys_menu_string(ob,1);
@@ -3342,8 +3368,16 @@ static void object_panel_fields(Object *ob)
if(psys->part->pd==NULL)
psys->part->pd= MEM_callocN(sizeof(PartDeflect), "PartDeflect");
- pd= psys->part->pd;
+ if(psys->part->pd2==NULL)
+ psys->part->pd2= MEM_callocN(sizeof(PartDeflect), "PartDeflect");
+
+ pd= ((slot==1) ? psys->part->pd2 : psys->part->pd);
particles=1;
+
+ uiDefButC(block, ROW, B_REDR, "", 10, 163, 14, 14, &slot, 3.0, 0, 0, 0, "Edit first particle effector slot");
+ uiDefButC(block, ROW, B_REDR, "", 24, 163, 14, 14, &slot, 3.0, 1, 0, 0, "Edit second particle effector slot");
+ uiBlockEndAlign(block);
+ uiBlockBeginAlign(block);
}
else
actpsys= -1; /* -1 = object */
@@ -3356,8 +3390,8 @@ static void object_panel_fields(Object *ob)
/* setup menu button */
if(particles){
- sprintf(menustr, "Field Type%%t|None%%x0|Spherical%%x%d|Wind%%x%d|Vortex%%x%d|Magnetic%%x%d|Harmonic%%x%d",
- PFIELD_FORCE, PFIELD_WIND, PFIELD_VORTEX, PFIELD_MAGNET, PFIELD_HARMONIC);
+ sprintf(menustr, "Field Type%%t|None%%x0|Spherical%%x%d|Wind%%x%d|Vortex%%x%d|Magnetic%%x%d|Harmonic%%x%d|Charge%%x%d|Lennard-Jones%%x%d",
+ PFIELD_FORCE, PFIELD_WIND, PFIELD_VORTEX, PFIELD_MAGNET, PFIELD_HARMONIC, PFIELD_CHARGE, PFIELD_LENNARDJ);
if(pd->forcefield==PFIELD_FORCE) tipstr= "Particle attracts or repels particles (On shared object layers)";
else if(pd->forcefield==PFIELD_WIND) tipstr= "Constant force applied in direction of particle Z axis (On shared object layers)";
@@ -3365,11 +3399,11 @@ static void object_panel_fields(Object *ob)
}
else{
if(ob->type==OB_CURVE)
- sprintf(menustr, "Field Type%%t|None%%x0|Spherical%%x%d|Wind%%x%d|Vortex%%x%d|Curve Guide%%x%d|Magnetic%%x%d|Harmonic%%x%d|Texture%%x%d",
- PFIELD_FORCE, PFIELD_WIND, PFIELD_VORTEX, PFIELD_GUIDE, PFIELD_MAGNET, PFIELD_HARMONIC, PFIELD_TEXTURE);
+ sprintf(menustr, "Field Type%%t|None%%x0|Spherical%%x%d|Wind%%x%d|Vortex%%x%d|Curve Guide%%x%d|Magnetic%%x%d|Harmonic%%x%d|Texture%%x%d|Charge%%x%d|Lennard-Jones%%x%d",
+ PFIELD_FORCE, PFIELD_WIND, PFIELD_VORTEX, PFIELD_GUIDE, PFIELD_MAGNET, PFIELD_HARMONIC, PFIELD_TEXTURE, PFIELD_CHARGE, PFIELD_LENNARDJ);
else
- sprintf(menustr, "Field Type%%t|None%%x0|Spherical%%x%d|Wind%%x%d|Vortex%%x%d|Magnetic%%x%d|Harmonic%%x%d|Texture%%x%d",
- PFIELD_FORCE, PFIELD_WIND, PFIELD_VORTEX, PFIELD_MAGNET, PFIELD_HARMONIC, PFIELD_TEXTURE);
+ sprintf(menustr, "Field Type%%t|None%%x0|Spherical%%x%d|Wind%%x%d|Vortex%%x%d|Magnetic%%x%d|Harmonic%%x%d|Texture%%x%d|Charge%%x%d|Lennard-Jones%%x%d",
+ PFIELD_FORCE, PFIELD_WIND, PFIELD_VORTEX, PFIELD_MAGNET, PFIELD_HARMONIC, PFIELD_TEXTURE, PFIELD_CHARGE, PFIELD_LENNARDJ);
if(pd->forcefield==PFIELD_FORCE) tipstr= "Object center attracts or repels particles (On shared object layers)";
else if(pd->forcefield==PFIELD_WIND) tipstr= "Constant force applied in direction of Object Z axis (On shared object layers)";
@@ -3384,8 +3418,6 @@ static void object_panel_fields(Object *ob)
uiBlockEndAlign(block);
uiDefBut(block, LABEL, 0, "",160,180,150,2, NULL, 0.0, 0, 0, 0, "");
-
- MEM_freeN(menustr);
if(pd->forcefield) {
uiBlockBeginAlign(block);
@@ -3411,6 +3443,8 @@ static void object_panel_fields(Object *ob)
}
else if(pd->forcefield == PFIELD_HARMONIC)
uiDefButF(block, NUM, B_FIELD_CHANGE, "Damp: ", 10,120,140,20, &pd->f_damp, 0, 10, 10, 0, "Damping of the harmonic force");
+ else if(pd->forcefield == PFIELD_WIND)
+ uiDefButF(block, NUM, B_FIELD_CHANGE, "Noise: ",10,120,140,20, &pd->f_noise, 0, 10, 100, 0, "Noise of the wind force");
}
uiBlockEndAlign(block);
@@ -3449,40 +3483,49 @@ static void object_panel_fields(Object *ob)
uiBlockEndAlign(block);
}
else{
- uiDefButS(block, MENU, B_FIELD_DEP, "Fall-off%t|Cone%x2|Tube%x1|Sphere%x0", 160,180,140,20, &pd->falloff, 0.0, 0.0, 0, 0, "Fall-off shape");
- if(pd->falloff==PFIELD_FALL_TUBE)
- uiDefBut(block, LABEL, 0, "Longitudinal", 160,160,140,20, NULL, 0.0, 0, 0, 0, "");
- uiBlockBeginAlign(block);
- uiDefButBitS(block, TOG, PFIELD_POSZ, B_FIELD_CHANGE, "Pos", 160,140,40,20, &pd->flag, 0.0, 0, 0, 0, "Effect only in direction of positive Z axis");
- uiDefButF(block, NUM, B_FIELD_CHANGE, "Fall-off: ", 200,140,100,20, &pd->f_power, 0, 10, 10, 0, "Falloff power (real gravitational falloff = 2)");
- uiDefButBitS(block, TOG, PFIELD_USEMAX, B_FIELD_CHANGE, "Use", 160,120,40,20, &pd->flag, 0.0, 0, 0, 0, "Use a maximum distance for the field to work");
- uiDefButF(block, NUM, B_FIELD_CHANGE, "MaxDist: ", 200,120,100,20, &pd->maxdist, 0, 1000.0, 10, 0, "Maximum distance for the field to work");
- uiDefButBitS(block, TOG, PFIELD_USEMIN, B_FIELD_CHANGE, "Use", 160,100,40,20, &pd->flag, 0.0, 0, 0, 0, "Use a minimum distance for the field's fall-off");
- uiDefButF(block, NUM, B_FIELD_CHANGE, "MinDist: ", 200,100,100,20, &pd->mindist, 0, 1000.0, 10, 0, "Minimum distance for the field's fall-off");
- uiBlockEndAlign(block);
-
- if(pd->falloff==PFIELD_FALL_TUBE){
- uiDefBut(block, LABEL, 0, "Radial", 160,80,70,20, NULL, 0.0, 0, 0, 0, "");
- uiBlockBeginAlign(block);
- uiDefButF(block, NUM, B_FIELD_CHANGE, "Fall-off: ", 160,60,140,20, &pd->f_power_r, 0, 10, 10, 0, "Radial falloff power (real gravitational falloff = 2)");
- uiDefButBitS(block, TOG, PFIELD_USEMAXR, B_FIELD_CHANGE, "Use", 160,40,40,20, &pd->flag, 0.0, 0, 0, 0, "Use a maximum radial distance for the field to work");
- uiDefButF(block, NUM, B_FIELD_CHANGE, "MaxDist: ", 200,40,100,20, &pd->maxrad, 0, 1000.0, 10, 0, "Maximum radial distance for the field to work");
- uiDefButBitS(block, TOG, PFIELD_USEMINR, B_FIELD_CHANGE, "Use", 160,20,40,20, &pd->flag, 0.0, 0, 0, 0, "Use a minimum radial distance for the field's fall-off");
- uiDefButF(block, NUM, B_FIELD_CHANGE, "MinDist: ", 200,20,100,20, &pd->minrad, 0, 1000.0, 10, 0, "Minimum radial distance for the field's fall-off");
- uiBlockEndAlign(block);
+ if(pd->forcefield==PFIELD_LENNARDJ) {
+ uiDefBut(block, LABEL, 0, "Fall-off determined", 160,140,140,20, NULL, 0.0, 0, 0, 0, "");
+ uiDefBut(block, LABEL, 0, "by particle sizes", 160,120,140,20, NULL, 0.0, 0, 0, 0, "");
}
- else if(pd->falloff==PFIELD_FALL_CONE){
- uiDefBut(block, LABEL, 0, "Angular", 160,80,70,20, NULL, 0.0, 0, 0, 0, "");
+ else {
+ uiDefButS(block, MENU, B_FIELD_DEP, "Fall-off%t|Cone%x2|Tube%x1|Sphere%x0", 160,180,140,20, &pd->falloff, 0.0, 0.0, 0, 0, "Fall-off shape");
+ if(pd->falloff==PFIELD_FALL_TUBE)
+ uiDefBut(block, LABEL, 0, "Longitudinal", 160,160,140,20, NULL, 0.0, 0, 0, 0, "");
uiBlockBeginAlign(block);
- uiDefButF(block, NUM, B_FIELD_CHANGE, "Fall-off: ", 160,60,140,20, &pd->f_power_r, 0, 10, 10, 0, "Radial falloff power (real gravitational falloff = 2)");
- uiDefButBitS(block, TOG, PFIELD_USEMAXR, B_FIELD_CHANGE, "Use", 160,40,40,20, &pd->flag, 0.0, 0, 0, 0, "Use a maximum angle for the field to work");
- uiDefButF(block, NUM, B_FIELD_CHANGE, "MaxAngle: ", 200,40,100,20, &pd->maxrad, 0, 89.0, 10, 0, "Maximum angle for the field to work (in radians)");
- uiDefButBitS(block, TOG, PFIELD_USEMINR, B_FIELD_CHANGE, "Use", 160,20,40,20, &pd->flag, 0.0, 0, 0, 0, "Use a minimum angle for the field's fall-off");
- uiDefButF(block, NUM, B_FIELD_CHANGE, "MinAngle: ", 200,20,100,20, &pd->minrad, 0, 89.0, 10, 0, "Minimum angle for the field's fall-off (in radians)");
+ uiDefButBitS(block, TOG, PFIELD_POSZ, B_FIELD_CHANGE, "Pos", 160,140,40,20, &pd->flag, 0.0, 0, 0, 0, "Effect only in direction of positive Z axis");
+ uiDefButF(block, NUM, B_FIELD_CHANGE, "Fall-off: ", 200,140,100,20, &pd->f_power, 0, 10, 10, 0, "Falloff power (real gravitational falloff = 2)");
+ uiDefButBitS(block, TOG, PFIELD_USEMAX, B_FIELD_CHANGE, "Use", 160,120,40,20, &pd->flag, 0.0, 0, 0, 0, "Use a maximum distance for the field to work");
+ uiDefButF(block, NUM, B_FIELD_CHANGE, "MaxDist: ", 200,120,100,20, &pd->maxdist, 0, 1000.0, 10, 0, "Maximum distance for the field to work");
+ uiDefButBitS(block, TOG, PFIELD_USEMIN, B_FIELD_CHANGE, "Use", 160,100,40,20, &pd->flag, 0.0, 0, 0, 0, "Use a minimum distance for the field's fall-off");
+ uiDefButF(block, NUM, B_FIELD_CHANGE, "MinDist: ", 200,100,100,20, &pd->mindist, 0, 1000.0, 10, 0, "Minimum distance for the field's fall-off");
uiBlockEndAlign(block);
+
+ if(pd->falloff==PFIELD_FALL_TUBE){
+ uiDefBut(block, LABEL, 0, "Radial", 160,80,70,20, NULL, 0.0, 0, 0, 0, "");
+ uiBlockBeginAlign(block);
+ uiDefButF(block, NUM, B_FIELD_CHANGE, "Fall-off: ", 160,60,140,20, &pd->f_power_r, 0, 10, 10, 0, "Radial falloff power (real gravitational falloff = 2)");
+ uiDefButBitS(block, TOG, PFIELD_USEMAXR, B_FIELD_CHANGE, "Use", 160,40,40,20, &pd->flag, 0.0, 0, 0, 0, "Use a maximum radial distance for the field to work");
+ uiDefButF(block, NUM, B_FIELD_CHANGE, "MaxDist: ", 200,40,100,20, &pd->maxrad, 0, 1000.0, 10, 0, "Maximum radial distance for the field to work");
+ uiDefButBitS(block, TOG, PFIELD_USEMINR, B_FIELD_CHANGE, "Use", 160,20,40,20, &pd->flag, 0.0, 0, 0, 0, "Use a minimum radial distance for the field's fall-off");
+ uiDefButF(block, NUM, B_FIELD_CHANGE, "MinDist: ", 200,20,100,20, &pd->minrad, 0, 1000.0, 10, 0, "Minimum radial distance for the field's fall-off");
+ uiBlockEndAlign(block);
+ }
+ else if(pd->falloff==PFIELD_FALL_CONE){
+ uiDefBut(block, LABEL, 0, "Angular", 160,80,70,20, NULL, 0.0, 0, 0, 0, "");
+ uiBlockBeginAlign(block);
+ uiDefButF(block, NUM, B_FIELD_CHANGE, "Fall-off: ", 160,60,140,20, &pd->f_power_r, 0, 10, 10, 0, "Radial falloff power (real gravitational falloff = 2)");
+ uiDefButBitS(block, TOG, PFIELD_USEMAXR, B_FIELD_CHANGE, "Use", 160,40,40,20, &pd->flag, 0.0, 0, 0, 0, "Use a maximum angle for the field to work");
+ uiDefButF(block, NUM, B_FIELD_CHANGE, "MaxAngle: ", 200,40,100,20, &pd->maxrad, 0, 89.0, 10, 0, "Maximum angle for the field to work (in radians)");
+ uiDefButBitS(block, TOG, PFIELD_USEMINR, B_FIELD_CHANGE, "Use", 160,20,40,20, &pd->flag, 0.0, 0, 0, 0, "Use a minimum angle for the field's fall-off");
+ uiDefButF(block, NUM, B_FIELD_CHANGE, "MinAngle: ", 200,20,100,20, &pd->minrad, 0, 89.0, 10, 0, "Minimum angle for the field's fall-off (in radians)");
+ uiBlockEndAlign(block);
+ }
}
}
+
}
+
+ MEM_freeN(menustr);
}
}
@@ -4329,12 +4372,14 @@ static void object_panel_particle_extra(Object *ob)
uiDefButBitI(block, TOG, PART_CHILD_EFFECT, B_PART_RECALC, "Children", butx+(butw*3)/5,buty,(butw*2)/5,buth, &part->flag, 0, 0, 0, 0, "Apply effectors to children");
uiBlockEndAlign(block);
}
+ else if(part->phystype == PART_PHYS_NEWTON)
+ uiDefButBitI(block, TOG, PART_SELF_EFFECT, B_PART_RECALC, "Self Effect", butx,(buty-=buth),butw,buth, &part->flag, 0, 0, 0, 0, "Particle effectors effect themselves");
else
buty-=buth;
/* size changes must create a recalc event always so that sizes are updated properly */
uiDefButF(block, NUM, B_PART_RECALC, "Size:", butx,(buty-=buth),butw,buth, &part->size, 0.01, 100, 10, 1, "The size of the particles");
- uiDefButF(block, NUM, B_PART_RECALC, "Rand:", butx,(buty-=buth),butw,buth, &part->randsize, 0.0, 2.0, 10, 1, "Give the particle size a random variation");
+ uiDefButF(block, NUM, B_PART_RECALC, "Rand:", butx,(buty-=buth),butw,buth, &part->randsize, 0.0, 1.0, 10, 1, "Give the particle size a random variation");
uiDefButBitI(block, TOG, PART_SIZEMASS, B_PART_RECALC, "Mass from size", butx,(buty-=buth),butw,buth, &part->flag, 0, 0, 0, 0, "Multiply mass with particle size");
uiDefButF(block, NUM, B_PART_RECALC, "Mass:", butx,(buty-=buth),butw,buth, &part->mass, 0.01, 100, 10, 1, "Specify the mass of the particles");
@@ -4915,322 +4960,499 @@ static void object_panel_particle_system(Object *ob)
}
/* NT - Panel for fluidsim settings */
+#ifndef DISABLE_ELBEEM
+static int _can_fluidsim_at_all(Object *ob)
+{
+ // list of Yes
+ if ((ob->type==OB_MESH)) return 1;
+ // else deny
+ return 0;
+}
+
+/* Panel for fluidsim */
+static void object_fluidsim__enabletoggle(void *ob_v, void *arg2)
+{
+ Object *ob = ob_v;
+ ModifierData *md = modifiers_findByType(ob, eModifierType_Fluidsim);
+
+ if (!md) {
+ md = modifier_new(eModifierType_Fluidsim);
+ BLI_addhead(&ob->modifiers, md);
+
+ DAG_object_flush_update(G.scene, ob, OB_RECALC_DATA|OB_RECALC_OB);
+ allqueue(REDRAWBUTSEDIT, 0);
+ allqueue(REDRAWVIEW3D, 0);
+ }
+ else {
+ Object *ob = ob_v;
+ ModifierData *md = modifiers_findByType(ob, eModifierType_Fluidsim);
+
+ if (!md)
+ return;
+
+ BLI_remlink(&ob->modifiers, md);
+
+ modifier_free(md);
+
+ BIF_undo_push("Del modifier");
+
+ //ob->softflag |= OB_SB_RESET;
+ allqueue(REDRAWBUTSEDIT, 0);
+ allqueue(REDRAWVIEW3D, 0);
+ allqueue(REDRAWIMAGE, 0);
+ allqueue(REDRAWOOPS, 0);
+ DAG_object_flush_update(G.scene, ob, OB_RECALC_DATA|OB_RECALC_OB);
+ object_handle_update(ob);
+ countall();
+ }
+}
+#endif
+
static void object_panel_fluidsim(Object *ob)
{
#ifndef DISABLE_ELBEEM
uiBlock *block;
- int yline = 160;
+ int yline = 174;
const int lineHeight = 20;
- const int separateHeight = 3;
+ const int separateHeight = 2;
const int objHeight = 20;
- char *msg = NULL;
+ FluidsimModifierData *fluidmd = (FluidsimModifierData *)modifiers_findByType(ob, eModifierType_Fluidsim);
+ int libdata = 0;
+ static int val = 0;
+ uiBut *but=NULL;
block= uiNewBlock(&curarea->uiblocks, "object_fluidsim", UI_EMBOSS, UI_HELV, curarea->win);
if(uiNewPanel(curarea, block, "Fluid", "Physics", 1060, 0, 318, 204)==0) return;
- uiSetButLock(object_is_libdata(ob), ERROR_LIBDATA_MESSAGE);
+ libdata= object_is_libdata(ob);
+ uiSetButLock(libdata, ERROR_LIBDATA_MESSAGE);
- if(ob->type==OB_MESH) {
- if(((Mesh *)ob->data)->totvert == 0) {
- msg = "Mesh has no vertices.";
- goto errMessage;
- }
- uiDefButBitS(block, TOG, OB_FLUIDSIM_ENABLE, REDRAWBUTSOBJECT, "Enable", 0,yline, 75,objHeight,
- &ob->fluidsimFlag, 0, 0, 0, 0, "Sets object to participate in fluid simulation");
-
- if(ob->fluidsimFlag & OB_FLUIDSIM_ENABLE) {
- FluidsimSettings *fss= ob->fluidsimSettings;
+ val = (fluidmd ? 1:0);
- if(fss==NULL) {
- fss = ob->fluidsimSettings = fluidsimSettingsNew(ob);
- }
-
- uiBlockBeginAlign(block);
- uiDefButS(block, ROW, B_FLUIDSIM_CHANGETYPE ,"Domain", 90, yline, 70,objHeight, &fss->type, 15.0, OB_FLUIDSIM_DOMAIN, 20.0, 1.0, "Bounding box of this object represents the computational domain of the fluid simulation.");
- uiDefButS(block, ROW, B_FLUIDSIM_CHANGETYPE ,"Fluid", 160, yline, 70,objHeight, &fss->type, 15.0, OB_FLUIDSIM_FLUID, 20.0, 2.0, "Object represents a volume of fluid in the simulation.");
- uiDefButS(block, ROW, B_FLUIDSIM_CHANGETYPE ,"Obstacle", 230, yline, 70,objHeight, &fss->type, 15.0, OB_FLUIDSIM_OBSTACLE,20.0, 3.0, "Object is a fixed obstacle.");
- yline -= lineHeight;
+ if(!_can_fluidsim_at_all(ob))
+ {
+ uiDefBut(block, LABEL, 0, "Fluidsim can be activated on mesh only.", 10,200,300,20, NULL, 0.0, 0, 0, 0, "");
+ }
+ else
+ {
+ but = uiDefButI(block, TOG, REDRAWBUTSOBJECT, "Fluid", 0,200,130,20, &val, 0, 0, 0, 0, "Sets object to participate in fluid simulation");
+ uiButSetFunc(but, object_fluidsim__enabletoggle, ob, NULL);
- uiDefButS(block, ROW, B_FLUIDSIM_CHANGETYPE ,"Inflow", 90, yline, 70,objHeight, &fss->type, 15.0, OB_FLUIDSIM_INFLOW, 20.0, 4.0, "Object adds fluid to the simulation.");
- uiDefButS(block, ROW, B_FLUIDSIM_CHANGETYPE ,"Outflow", 160, yline, 70,objHeight, &fss->type, 15.0, OB_FLUIDSIM_OUTFLOW, 20.0, 5.0, "Object removes fluid from the simulation.");
- uiDefButS(block, ROW, B_FLUIDSIM_MAKEPART ,"Particle", 230, yline, 70,objHeight, &fss->type, 15.0, OB_FLUIDSIM_PARTICLE,20.0, 3.0, "Object is made a particle system to display particles generated by a fluidsim domain object.");
+ /*
+ // no pointcache used in fluidsim *YET*
+ md = (ModifierData*)clmd;
+ if(md) {
+ uiBlockBeginAlign(block);
+ uiDefIconButBitI(block, TOG, eModifierMode_Render, B_BAKE_CACHE_CHANGE, ICON_SCENE, 145, 200, 20, 20,&md->mode, 0, 0, 1, 0, "Enable fluidsim during rendering");
+ but= uiDefIconButBitI(block, TOG, eModifierMode_Realtime, B_BAKE_CACHE_CHANGE, VICON_VIEW3D, 165, 200, 20, 20,&md->mode, 0, 0, 1, 0, "Enable fluidsim during interactive display");
uiBlockEndAlign(block);
- yline -= lineHeight;
- yline -= 2*separateHeight;
-
- /* display specific settings for each type */
- if(fss->type == OB_FLUIDSIM_DOMAIN) {
- const int maxRes = 512;
- char memString[32];
-
- // use mesh bounding box and object scaling
- // TODO fix redraw issue
- elbeemEstimateMemreq(fss->resolutionxyz,
- ob->fluidsimSettings->bbSize[0],ob->fluidsimSettings->bbSize[1],ob->fluidsimSettings->bbSize[2], fss->maxRefine, memString);
-
- uiBlockBeginAlign(block);
- uiDefButS(block, ROW, REDRAWBUTSOBJECT, "Std", 0,yline, 25,objHeight, &fss->show_advancedoptions, 16.0, 0, 20.0, 0, "Show standard domain options.");
- uiDefButS(block, ROW, REDRAWBUTSOBJECT, "Adv", 25,yline, 25,objHeight, &fss->show_advancedoptions, 16.0, 1, 20.0, 1, "Show advanced domain options.");
- uiDefButS(block, ROW, REDRAWBUTSOBJECT, "Bnd", 50,yline, 25,objHeight, &fss->show_advancedoptions, 16.0, 2, 20.0, 2, "Show domain boundary options.");
- uiBlockEndAlign(block);
-
- uiDefBut(block, BUT, B_FLUIDSIM_BAKE, "BAKE",90, yline,210,objHeight, NULL, 0.0, 0.0, 10, 0, "Perform simulation and output and surface&preview meshes for each frame.");
- yline -= lineHeight;
- yline -= 2*separateHeight;
-
- if(fss->show_advancedoptions == 0) {
- uiDefBut(block, LABEL, 0, "Req. BAKE Memory:", 0,yline,150,objHeight, NULL, 0.0, 0, 0, 0, "");
- uiDefBut(block, LABEL, 0, memString, 200,yline,100,objHeight, NULL, 0.0, 0, 0, 0, "");
- yline -= lineHeight;
-
- uiBlockBeginAlign(block);
- uiDefButS(block, NUM, REDRAWBUTSOBJECT, "Resolution:", 0, yline,150,objHeight, &fss->resolutionxyz, 1, maxRes, 10, 0, "Domain resolution in X, Y and Z direction");
- uiDefButS(block, NUM, B_DIFF, "Preview-Res.:", 150, yline,150,objHeight, &fss->previewresxyz, 1, 100, 10, 0, "Resolution of the preview meshes to generate, also in X, Y and Z direction");
- uiBlockEndAlign(block);
- yline -= lineHeight;
- yline -= 1*separateHeight;
+ }
+ */
+ }
- uiBlockBeginAlign(block);
- uiDefButF(block, NUM, B_DIFF, "Start time:", 0, yline,150,objHeight, &fss->animStart, 0.0, 100.0, 10, 0, "Simulation time of the first blender frame.");
- uiDefButF(block, NUM, B_DIFF, "End time:", 150, yline,150,objHeight, &fss->animEnd , 0.0, 100.0, 10, 0, "Simulation time of the last blender frame.");
- uiBlockEndAlign(block);
- yline -= lineHeight;
- yline -= 2*separateHeight;
+ uiDefBut(block, LABEL, 0, "",0,0,300,0, NULL, 0.0, 0, 0, 0, ""); /* tell UI we go to 10,10*/
- if((fss->guiDisplayMode<1) || (fss->guiDisplayMode>3)){ fss->guiDisplayMode=2; } // can be changed by particle setting
- uiDefBut(block, LABEL, 0, "Disp.-Qual.:", 0,yline, 90,objHeight, NULL, 0.0, 0, 0, 0, "");
- uiBlockBeginAlign(block);
- uiDefButS(block, MENU, B_FLUIDSIM_FORCEREDRAW, "GuiDisplayMode%t|Geometry %x1|Preview %x2|Final %x3",
- 90,yline,105,objHeight, &fss->guiDisplayMode, 0, 0, 0, 0, "How to display the fluid mesh in the Blender GUI.");
- uiDefButS(block, MENU, B_DIFF, "RenderDisplayMode%t|Geometry %x1|Preview %x2|Final %x3",
- 195,yline,105,objHeight, &fss->renderDisplayMode, 0, 0, 0, 0, "How to display the fluid mesh for rendering.");
- uiBlockEndAlign(block);
- yline -= lineHeight;
- yline -= 1*separateHeight;
+ if(fluidmd)
+ {
+ FluidsimSettings *fss = fluidmd->fss;
+
+ if(!fss)
+ return;
+
+ /* GENERAL STUFF */
+ /*
+ if(!libdata) {
+ uiClearButLock();
+ if(cache->flag & PTCACHE_BAKE_EDIT_ACTIVE)
+ uiSetButLock(1, "Please leave editmode.");
+ else if(cache->flag & PTCACHE_BAKED)
+ uiSetButLock(1, "Simulation frames are baked");
+ }
+ */
+ uiBlockBeginAlign ( block );
+ uiDefButS ( block, ROW, B_FLUIDSIM_CHANGETYPE ,"Domain", 90, yline, 70,objHeight, &fss->type, 15.0, OB_FLUIDSIM_DOMAIN, 20.0, 1.0, "Bounding box of this object represents the computational domain of the fluid simulation." );
+ uiDefButS ( block, ROW, B_FLUIDSIM_CHANGETYPE ,"Fluid", 160, yline, 70,objHeight, &fss->type, 15.0, OB_FLUIDSIM_FLUID, 20.0, 2.0, "Object represents a volume of fluid in the simulation." );
+ uiDefButS ( block, ROW, B_FLUIDSIM_CHANGETYPE ,"Obstacle", 230, yline, 70,objHeight, &fss->type, 15.0, OB_FLUIDSIM_OBSTACLE, 20.0, 3.0, "Object is a fixed obstacle." );
+ yline -= lineHeight;
+
+ uiDefButS ( block, ROW, B_FLUIDSIM_CHANGETYPE ,"Inflow", 90, yline, 52,objHeight, &fss->type, 15.0, OB_FLUIDSIM_INFLOW, 20.0, 4.0, "Object adds fluid to the simulation." );
+ uiDefButS ( block, ROW, B_FLUIDSIM_CHANGETYPE ,"Outflow", 142, yline, 52,objHeight, &fss->type, 15.0, OB_FLUIDSIM_OUTFLOW, 20.0, 5.0, "Object removes fluid from the simulation." );
+ uiDefButS ( block, ROW, B_FLUIDSIM_MAKEPART ,"Particle", 194, yline, 52,objHeight, &fss->type, 15.0, OB_FLUIDSIM_PARTICLE,20.0, 3.0, "Object is made a particle system to display particles generated by a fluidsim domain object." );
+ uiDefButS ( block, ROW, B_FLUIDSIM_CHANGETYPE ,"Control", 246, yline, 54,objHeight, &fss->type, 15.0, OB_FLUIDSIM_CONTROL,20.0, 3.0, "Object is made a fluid control mesh, which influences the fluid." );
+ uiBlockEndAlign ( block );
+ yline -= lineHeight;
+ yline -= separateHeight;
- uiBlockBeginAlign(block);
- uiDefIconBut(block, BUT, B_FLUIDSIM_SELDIR, ICON_FILESEL, 0, yline, 20, objHeight, 0, 0, 0, 0, 0, "Select Directory (and/or filename prefix) to store baked fluid simulation files in");
- uiDefBut(block, TEX, B_FLUIDSIM_FORCEREDRAW,"", 20, yline, 280, objHeight, fss->surfdataPath, 0.0,79.0, 0, 0, "Enter Directory (and/or filename prefix) to store baked fluid simulation files in");
- uiBlockEndAlign(block);
- // FIXME what is the 79.0 above?
- } else if(fss->show_advancedoptions == 1) {
- // advanced options
- uiDefBut(block, LABEL, 0, "Gravity:", 0, yline, 90,objHeight, NULL, 0.0, 0, 0, 0, "");
- uiBlockBeginAlign(block);
- uiDefButF(block, NUM, B_DIFF, "X:", 90, yline, 70,objHeight, &fss->gravx, -1000.1, 1000.1, 10, 0, "Gravity in X direction");
- uiDefButF(block, NUM, B_DIFF, "Y:", 160, yline, 70,objHeight, &fss->gravy, -1000.1, 1000.1, 10, 0, "Gravity in Y direction");
- uiDefButF(block, NUM, B_DIFF, "Z:", 230, yline, 70,objHeight, &fss->gravz, -1000.1, 1000.1, 10, 0, "Gravity in Z direction");
- uiBlockEndAlign(block);
- yline -= lineHeight;
- yline -= 1*separateHeight;
- /* viscosity */
- if (fss->viscosityMode==1) /*manual*/
- uiBlockBeginAlign(block);
- uiDefButS(block, MENU, REDRAWVIEW3D, "Viscosity%t|Manual %x1|Water %x2|Oil %x3|Honey %x4",
- 0,yline, 90,objHeight, &fss->viscosityMode, 0, 0, 0, 0, "Set viscosity of the fluid to a preset value, or use manual input.");
- if(fss->viscosityMode==1) {
- uiDefButF(block, NUM, B_DIFF, "Value:", 90, yline, 105,objHeight, &fss->viscosityValue, 0.0, 10.0, 10, 0, "Viscosity setting: value that is multiplied by 10 to the power of (exponent*-1).");
- uiDefButS(block, NUM, B_DIFF, "Neg-Exp.:", 195, yline, 105,objHeight, &fss->viscosityExponent, 0, 10, 10, 0, "Negative exponent for the viscosity value (to simplify entering small values e.g. 5*10^-6.");
- uiBlockEndAlign(block);
- } else {
- // display preset values
- uiDefBut(block, LABEL, 0, fluidsimViscosityPresetString[fss->viscosityMode], 90,yline,200,objHeight, NULL, 0.0, 0, 0, 0, "");
- }
- yline -= lineHeight;
- yline -= 1*separateHeight;
-
- uiDefBut(block, LABEL, 0, "Realworld-size:", 0,yline,150,objHeight, NULL, 0.0, 0, 0, 0, "");
- uiDefButF(block, NUM, B_DIFF, "", 150, yline,150,objHeight, &fss->realsize, 0.001, 10.0, 10, 0, "Size of the simulation domain in meters.");
- yline -= lineHeight;
- yline -= 2*separateHeight;
-
- uiDefBut(block, LABEL, 0, "Gridlevels:", 0,yline,150,objHeight, NULL, 0.0, 0, 0, 0, "");
- uiDefButI(block, NUM, B_DIFF, "", 150, yline,150,objHeight, &fss->maxRefine, -1, 4, 10, 0, "Number of coarsened Grids to use (set to -1 for automatic selection).");
- yline -= lineHeight;
-
- uiDefBut(block, LABEL, 0, "Compressibility:", 0,yline,150,objHeight, NULL, 0.0, 0, 0, 0, "");
- uiDefButF(block, NUM, B_DIFF, "", 150, yline,150,objHeight, &fss->gstar, 0.001, 0.10, 10,0, "Allowed compressibility due to gravitational force for standing fluid (directly affects simulation step size).");
- yline -= lineHeight;
-
- } else if(fss->show_advancedoptions == 2) {
- // copied from obstacle...
- //yline -= lineHeight + 5;
- //uiDefBut(block, LABEL, 0, "Domain boundary type settings:", 0,yline,300,objHeight, NULL, 0.0, 0, 0, 0, "");
- //yline -= lineHeight;
-
- uiBlockBeginAlign(block); // domain
- uiDefButS(block, ROW, REDRAWBUTSOBJECT ,"Noslip", 0, yline,100,objHeight, &fss->typeFlags, 15.0, OB_FSBND_NOSLIP, 20.0, 1.0, "Obstacle causes zero normal and tangential velocity (=sticky). Default for all. Only option for moving objects.");
- uiDefButS(block, ROW, REDRAWBUTSOBJECT ,"Part", 100, yline,100,objHeight, &fss->typeFlags, 15.0, OB_FSBND_PARTSLIP, 20.0, 2.0, "Mix between no-slip and free-slip. Non moving objects only!");
- uiDefButS(block, ROW, REDRAWBUTSOBJECT ,"Free", 200, yline,100,objHeight, &fss->typeFlags, 15.0, OB_FSBND_FREESLIP, 20.0, 3.0, "Obstacle only causes zero normal velocity (=not sticky). Non moving objects only!");
- uiBlockEndAlign(block);
- yline -= lineHeight;
-
- if(fss->typeFlags&OB_FSBND_PARTSLIP) {
- uiDefBut(block, LABEL, 0, "PartSlipValue:", 0,yline,200,objHeight, NULL, 0.0, 0, 0, 0, "");
- uiDefButF(block, NUM, B_DIFF, "", 200, yline,100,objHeight, &fss->partSlipValue, 0.0, 1.0, 10,0, ".");
- yline -= lineHeight;
- } else {
- //uiDefBut(block, LABEL, 0, "-", 200,yline,100,objHeight, NULL, 0.0, 0, 0, 0, "");
- }
- // copied from obstacle...
-
- uiDefBut(block, LABEL, 0, "Tracer Particles:", 0,yline,200,objHeight, NULL, 0.0, 0, 0, 0, "");
- uiDefButI(block, NUM, B_DIFF, "", 200, yline,100,objHeight, &fss->generateTracers, 0.0, 10000.0, 10,0, "Number of tracer particles to generate.");
- yline -= lineHeight;
- uiDefBut(block, LABEL, 0, "Generate Particles:", 0,yline,200,objHeight, NULL, 0.0, 0, 0, 0, "");
- uiDefButF(block, NUM, B_DIFF, "", 200, yline,100,objHeight, &fss->generateParticles, 0.0, 10.0, 10,0, "Amount of particles to generate (0=off, 1=normal, >1=more).");
- yline -= lineHeight;
- uiDefBut(block, LABEL, 0, "Surface Subdiv:", 0,yline,200,objHeight, NULL, 0.0, 0, 0, 0, "");
- uiDefButI(block, NUM, B_DIFF, "", 200, yline,100,objHeight, &fss->surfaceSubdivs, 0.0, 5.0, 10,0, "Number of isosurface subdivisions. This is necessary for the inclusion of particles into the surface generation. Warning - can lead to longer computation times!");
- yline -= lineHeight;
-
- uiDefBut(block, LABEL, 0, "Surface Smoothing:", 0,yline,200,objHeight, NULL, 0.0, 0, 0, 0, "");
- uiDefButF(block, NUM, B_DIFF, "", 200, yline,100,objHeight, &fss->surfaceSmoothing, 0.0, 5.0, 10,0, "Amount of surface smoothing (0=off, 1=normal, >1=stronger smoothing).");
- yline -= lineHeight;
-
- // use new variable...
- uiDefBut(block, LABEL, 0, "Generate&Use SpeedVecs:", 0,yline,200,objHeight, NULL, 0.0, 0, 0, 0, "");
- uiDefButBitC(block, TOG, 1, REDRAWBUTSOBJECT, "Disable", 200, yline,100,objHeight, &fss->domainNovecgen, 0, 0, 0, 0, "Default is to generate and use fluidsim vertex speed vectors, this option switches calculation off during bake, and disables loading.");
- yline -= lineHeight;
- } // domain 3
- }
- else if(
- (fss->type == OB_FLUIDSIM_FLUID)
- || (fss->type == OB_FLUIDSIM_INFLOW)
- ) {
- uiBlockBeginAlign(block); // fluid
- uiDefButC(block, ROW, REDRAWBUTSOBJECT ,"Init Volume", 0, yline,100,objHeight, &fss->volumeInitType, 15.0, 1, 20.0, 1.0, "Type of volume init: use only inner region of mesh.");
- uiDefButC(block, ROW, REDRAWBUTSOBJECT ,"Init Shell", 100, yline,100,objHeight, &fss->volumeInitType, 15.0, 2, 20.0, 2.0, "Type of volume init: use only the hollow shell defined by the faces of the mesh.");
- uiDefButC(block, ROW, REDRAWBUTSOBJECT ,"Init Both", 200, yline,100,objHeight, &fss->volumeInitType, 15.0, 3, 20.0, 3.0, "Type of volume init: use both the inner volume and the outer shell.");
- uiBlockEndAlign(block);
+ /* display specific settings for each type */
+ if ( fss->type == OB_FLUIDSIM_DOMAIN )
+ {
+ const int maxRes = 1024;
+ char memString[32];
+ Mesh *mesh = ob->data;
+
+ // use mesh bounding box and object scaling
+ // TODO fix redraw issue
+ fluid_get_bb(mesh->mvert, mesh->totvert, ob->obmat, fss->bbStart, fss->bbSize);
+ elbeemEstimateMemreq ( fss->resolutionxyz,
+ fss->bbSize[0],fss->bbSize[1],fss->bbSize[2], fss->maxRefine, memString );
+
+ uiBlockBeginAlign ( block );
+ uiDefButS ( block, ROW, REDRAWBUTSOBJECT, "Std", 0,yline, 25,objHeight, &fss->show_advancedoptions, 16.0, 0, 20.0, 0, "Show standard domain options." );
+ uiDefButS ( block, ROW, REDRAWBUTSOBJECT, "Adv", 20,yline, 25,objHeight, &fss->show_advancedoptions, 16.0, 1, 20.0, 1, "Show advanced domain options." );
+ uiDefButS ( block, ROW, REDRAWBUTSOBJECT, "Bnd", 40,yline, 25,objHeight, &fss->show_advancedoptions, 16.0, 2, 20.0, 2, "Show domain boundary options." );
+ uiDefButS ( block, ROW, REDRAWBUTSOBJECT, "Par", 60,yline, 25,objHeight, &fss->show_advancedoptions, 16.0, 3, 20.0, 3, "Show particle options." );
+ uiBlockEndAlign ( block );
+
+ uiDefBut ( block, BUT, B_FLUIDSIM_BAKE, "BAKE",90, yline,210,objHeight, NULL, 0.0, 0.0, 10, 0, "Perform simulation and output and surface&preview meshes for each frame." );
+
+ yline -= lineHeight;
+ yline -= separateHeight;
+
+ if ( fss->show_advancedoptions == 1 )
+ {
+ // advanced options
+ uiDefBut ( block, LABEL, 0, "Gravity:", 0, yline, 120,objHeight, NULL, 0.0, 0, 0, 0, "" );
+ uiBlockBeginAlign ( block );
+ uiDefButF ( block, NUM, B_DIFF, "X:", 120, yline, 60,objHeight, &fss->gravx, -1000.1, 1000.1, 10, 0, "Gravity in X direction" );
+ uiDefButF ( block, NUM, B_DIFF, "Y:", 180, yline, 60,objHeight, &fss->gravy, -1000.1, 1000.1, 10, 0, "Gravity in Y direction" );
+ uiDefButF ( block, NUM, B_DIFF, "Z:", 240, yline, 60,objHeight, &fss->gravz, -1000.1, 1000.1, 10, 0, "Gravity in Z direction" );
+ uiBlockEndAlign ( block );
yline -= lineHeight;
+ yline -= separateHeight;
+
+ /* viscosity */
+ if ( fss->viscosityMode==1 ) /*manual*/
+ uiBlockBeginAlign ( block );
+ uiDefButS ( block, MENU, REDRAWVIEW3D, "Viscosity%t|Manual %x1|Water %x2|Oil %x3|Honey %x4",
+ 0,yline, 90,objHeight, &fss->viscosityMode, 0, 0, 0, 0, "Set viscosity of the fluid to a preset value, or use manual input." );
+ if ( fss->viscosityMode==1 )
+ {
+ uiBlockBeginAlign ( block );
+ uiDefButF ( block, NUM, B_DIFF, "Value:", 120, yline, 90,objHeight, &fss->viscosityValue, 0.0, 10.0, 10, 0, "Viscosity setting: value that is multiplied by 10 to the power of (exponent*-1)." );
+ uiDefButS ( block, NUM, B_DIFF, "Neg-Exp.:", 210, yline, 90,objHeight, &fss->viscosityExponent, 0, 10, 10, 0, "Negative exponent for the viscosity value (to simplify entering small values e.g. 5*10^-6." );
+ uiBlockEndAlign ( block );
+ }
+ else
+ {
+ // display preset values
+ uiDefBut ( block, LABEL, 0, fluidsimViscosityPresetString[fss->viscosityMode], 120,yline,180,objHeight, NULL, 0.0, 0, 0, 0, "" );
+ }
- yline -= lineHeight + 5; // fluid + inflow
- if(fss->type == OB_FLUIDSIM_FLUID) uiDefBut(block, LABEL, 0, "Initial velocity:", 0,yline,200,objHeight, NULL, 0.0, 0, 0, 0, "");
- if(fss->type == OB_FLUIDSIM_INFLOW) uiDefBut(block, LABEL, 0, "Inflow velocity:", 0,yline,200,objHeight, NULL, 0.0, 0, 0, 0, "");
yline -= lineHeight;
- uiBlockBeginAlign(block);
- uiDefButF(block, NUM, B_DIFF, "X:", 0, yline, 100,objHeight, &fss->iniVelx, -1000.1, 1000.1, 10, 0, "Fluid velocity in X direction");
- uiDefButF(block, NUM, B_DIFF, "Y:", 100, yline, 100,objHeight, &fss->iniVely, -1000.1, 1000.1, 10, 0, "Fluid velocity in Y direction");
- uiDefButF(block, NUM, B_DIFF, "Z:", 200, yline, 100,objHeight, &fss->iniVelz, -1000.1, 1000.1, 10, 0, "Fluid velocity in Z direction");
- uiBlockEndAlign(block);
+ yline -= separateHeight;
+
+ uiDefBut ( block, LABEL, 0, "Realworld-size:", 0,yline,120,objHeight, NULL, 0.0, 0, 0, 0, "" );
+ uiDefButF ( block, NUM, B_DIFF, "", 120, yline,180,objHeight, &fss->realsize, 0.001, 10.0, 10, 0, "Size of the simulation domain in meters." );
yline -= lineHeight;
+ yline -= separateHeight;
+
+ uiDefBut ( block, LABEL, 0, "Gridlevels:", 0,yline,120,objHeight, NULL, 0.0, 0, 0, 0, "" );
+ uiDefButI ( block, NUM, B_DIFF, "", 120, yline,180,objHeight, &fss->maxRefine, -1, 4, 10, 0, "Number of coarsened Grids to use (set to -1 for automatic selection)." );
+ yline -= lineHeight;
+ yline -= separateHeight;
+
+ uiDefBut ( block, LABEL, 0, "Compressibility:", 0,yline,120,objHeight, NULL, 0.0, 0, 0, 0, "" );
+ uiDefButF ( block, NUM, B_DIFF, "", 120, yline,180,objHeight, &fss->gstar, 0.001, 0.10, 10,0, "Allowed compressibility due to gravitational force for standing fluid (directly affects simulation step size)." );
+ yline -= lineHeight;
+
+ }
+ else if ( fss->show_advancedoptions == 2 )
+ {
+ // copied from obstacle...
+ //yline -= lineHeight + 5;
+ //uiDefBut(block, LABEL, 0, "Domain boundary type settings:", 0,yline,300,objHeight, NULL, 0.0, 0, 0, 0, "");
+ //yline -= lineHeight;
+
+ uiDefBut ( block, LABEL, 0, "Boundary type:", 0,yline,120,objHeight, NULL, 0.0, 0, 0, 0, "" );
+ uiBlockBeginAlign ( block ); // domain
+ uiDefButS ( block, ROW, REDRAWBUTSOBJECT ,"Noslip", 120, yline,60,objHeight, &fss->typeFlags, 15.0, OB_FSBND_NOSLIP, 20.0, 1.0, "Obstacle causes zero normal and tangential velocity (=sticky). Default for all. Only option for moving objects." );
+ uiDefButS ( block, ROW, REDRAWBUTSOBJECT ,"Part", 180, yline,60,objHeight, &fss->typeFlags, 15.0, OB_FSBND_PARTSLIP, 20.0, 2.0, "Mix between no-slip and free-slip. Non moving objects only!" );
+ uiDefButS ( block, ROW, REDRAWBUTSOBJECT ,"Free", 240, yline,60,objHeight, &fss->typeFlags, 15.0, OB_FSBND_FREESLIP, 20.0, 3.0, "Obstacle only causes zero normal velocity (=not sticky). Non moving objects only!" );
+ uiBlockEndAlign ( block );
+ yline -= lineHeight;
+ yline -= separateHeight;
- if(fss->type == OB_FLUIDSIM_INFLOW) { // inflow
- uiDefBut(block, LABEL, 0, "Local Inflow Coords", 0,yline,200,objHeight, NULL, 0.0, 0, 0, 0, "");
- uiDefButBitS(block, TOG, OB_FSINFLOW_LOCALCOORD, REDRAWBUTSOBJECT, "Enable", 200, yline,100,objHeight, &fss->typeFlags, 0, 0, 0, 0, "Use local coordinates for inflow (e.g. for rotating objects).");
- yline -= lineHeight;
- } else {
+ uiDefBut ( block, LABEL, 0, "PartSlip Amount:", 0,yline,120,objHeight, NULL, 0.0, 0, 0, 0, "" );
+ if ( fss->typeFlags&OB_FSBND_PARTSLIP )
+ {
+ uiDefButF ( block, NUM, B_DIFF, "", 120, yline,180,objHeight, &fss->partSlipValue, 0.0, 1.0, 10,0, "Amount of mixing between no- and free-slip, 0=stickier, 1=same as free slip." );
+ }
+ else
+ {
+ uiDefBut ( block, LABEL, 0, "-", 120,yline,180,objHeight, NULL, 0.0, 0, 0, 0, "" );
}
- // domainNovecgen "misused" here
- uiDefBut(block, LABEL, 0, "Animated Mesh:", 0,yline,200,objHeight, NULL, 0.0, 0, 0, 0, "");
- uiDefButBitC(block, TOG, 1, REDRAWBUTSOBJECT, "Export", 200, yline,100,objHeight, &fss->domainNovecgen, 0, 0, 0, 0, "Export this mesh as an animated one. Slower, only use if really necessary (e.g. armatures or parented objects), animated pos/rot/scale IPOs do not require it.");
yline -= lineHeight;
+ yline -= separateHeight;
- } // fluid inflow
- else if( (fss->type == OB_FLUIDSIM_OUTFLOW) ) {
- yline -= lineHeight + 5;
+ // copied from obstacle...
- uiBlockBeginAlign(block); // outflow
- uiDefButC(block, ROW, REDRAWBUTSOBJECT ,"Init Volume", 0, yline,100,objHeight, &fss->volumeInitType, 15.0, 1, 20.0, 1.0, "Type of volume init: use only inner region of mesh.");
- uiDefButC(block, ROW, REDRAWBUTSOBJECT ,"Init Shell", 100, yline,100,objHeight, &fss->volumeInitType, 15.0, 2, 20.0, 2.0, "Type of volume init: use only the hollow shell defined by the faces of the mesh.");
- uiDefButC(block, ROW, REDRAWBUTSOBJECT ,"Init Both", 200, yline,100,objHeight, &fss->volumeInitType, 15.0, 3, 20.0, 3.0, "Type of volume init: use both the inner volume and the outer shell.");
- uiBlockEndAlign(block);
+ uiDefBut ( block, LABEL, 0, "Surface Subdiv:", 0,yline,120,objHeight, NULL, 0.0, 0, 0, 0, "" );
+ uiDefButI ( block, NUM, B_DIFF, "", 120, yline,180,objHeight, &fss->surfaceSubdivs, 0.0, 5.0, 10,0, "Number of isosurface subdivisions. This is necessary for the inclusion of particles into the surface generation. Warning - can lead to longer computation times!" );
yline -= lineHeight;
-
- // domainNovecgen "misused" here
- uiDefBut(block, LABEL, 0, "Animated Mesh:", 0,yline,200,objHeight, NULL, 0.0, 0, 0, 0, "");
- uiDefButBitC(block, TOG, 1, REDRAWBUTSOBJECT, "Export", 200, yline,100,objHeight, &fss->domainNovecgen, 0, 0, 0, 0, "Export this mesh as an animated one. Slower, only use if really necessary (e.g. armatures or parented objects), animated pos/rot/scale IPOs do not require it.");
+ yline -= separateHeight;
+
+ uiDefBut ( block, LABEL, 0, "Surface Smoothing:", 0,yline,120,objHeight, NULL, 0.0, 0, 0, 0, "" );
+ uiDefButF ( block, NUM, B_DIFF, "", 120, yline,180,objHeight, &fss->surfaceSmoothing, 0.0, 5.0, 10,0, "Amount of surface smoothing (0=off, 1=normal, >1=stronger smoothing)." );
+ yline -= lineHeight;
+ yline -= separateHeight;
+
+ // use new variable...
+ uiDefBut ( block, LABEL, 0, "Generate SpeedVecs:", 0,yline,120,objHeight, NULL, 0.0, 0, 0, 0, "" );
+ uiDefButBitC ( block, TOG, 1, REDRAWBUTSOBJECT, "Disable", 120, yline,180,objHeight, &fss->domainNovecgen, 0, 0, 0, 0, "Default is to generate and use fluidsim vertex speed vectors, this option switches calculation off during bake, and disables loading." );
yline -= lineHeight;
-
- //uiDefBut(block, LABEL, 0, "No additional settings as of now...", 0,yline,300,objHeight, NULL, 0.0, 0, 0, 0, "");
}
- else if( (fss->type == OB_FLUIDSIM_OBSTACLE) ) {
- yline -= lineHeight + 5; // obstacle
-
- uiBlockBeginAlign(block); // obstacle
- uiDefButC(block, ROW, REDRAWBUTSOBJECT ,"Init Volume", 0, yline,100,objHeight, &fss->volumeInitType, 15.0, 1, 20.0, 1.0, "Type of volume init: use only inner region of mesh.");
- uiDefButC(block, ROW, REDRAWBUTSOBJECT ,"Init Shell", 100, yline,100,objHeight, &fss->volumeInitType, 15.0, 2, 20.0, 2.0, "Type of volume init: use only the hollow shell defined by the faces of the mesh.");
- uiDefButC(block, ROW, REDRAWBUTSOBJECT ,"Init Both", 200, yline,100,objHeight, &fss->volumeInitType, 15.0, 3, 20.0, 3.0, "Type of volume init: use both the inner volume and the outer shell.");
- uiBlockEndAlign(block);
+ else if ( fss->show_advancedoptions == 3 )
+ {
+ uiDefBut ( block, LABEL, 0, "Tracer Particles:", 0,yline,120,objHeight, NULL, 0.0, 0, 0, 0, "" );
+ uiDefButI ( block, NUM, B_DIFF, "", 120, yline,180,objHeight, &fss->generateTracers, 0.0, 10000.0, 10,0, "Number of tracer particles to generate." );
yline -= lineHeight;
+ yline -= separateHeight;
- uiBlockBeginAlign(block); // obstacle
- uiDefButS(block, ROW, REDRAWBUTSOBJECT ,"Noslip", 0, yline,100,objHeight, &fss->typeFlags, 15.0, OB_FSBND_NOSLIP, 20.0, 1.0, "Obstacle causes zero normal and tangential velocity (=sticky). Default for all. Only option for moving objects.");
- uiDefButS(block, ROW, REDRAWBUTSOBJECT ,"Part", 100, yline,100,objHeight, &fss->typeFlags, 15.0, OB_FSBND_PARTSLIP, 20.0, 2.0, "Mix between no-slip and free-slip. Non moving objects only!");
- uiDefButS(block, ROW, REDRAWBUTSOBJECT ,"Free", 200, yline,100,objHeight, &fss->typeFlags, 15.0, OB_FSBND_FREESLIP, 20.0, 3.0, "Obstacle only causes zero normal velocity (=not sticky). Non moving objects only!");
- uiBlockEndAlign(block);
+ uiDefBut ( block, LABEL, 0, "Generate Particles:", 0,yline,120,objHeight, NULL, 0.0, 0, 0, 0, "" );
+ uiDefButF ( block, NUM, B_DIFF, "", 120, yline,180,objHeight, &fss->generateParticles, 0.0, 10.0, 10,0, "Amount of particles to generate (0=off, 1=normal, >1=more)." );
+ yline -= lineHeight;
+ }
+ else
+ {
+ uiDefBut ( block, LABEL, 0, "Req. BAKE Mem.:", 0,yline,120,objHeight, NULL, 0.0, 0, 0, 0, "" );
+ uiDefBut ( block, LABEL, 0, memString, 120,yline,180,objHeight, NULL, 0.0, 0, 0, 0, "" );
yline -= lineHeight;
+ yline -= separateHeight;
- // domainNovecgen "misused" here
- uiDefBut(block, LABEL, 0, "Animated Mesh:", 0,yline,200,objHeight, NULL, 0.0, 0, 0, 0, "");
- uiDefButBitC(block, TOG, 1, REDRAWBUTSOBJECT, "Export", 200, yline,100,objHeight, &fss->domainNovecgen, 0, 0, 0, 0, "Export this mesh as an animated one. Slower, only use if really necessary (e.g. armatures or parented objects), animated loc/rot/scale IPOs do not require it.");
+ uiDefBut ( block, LABEL, 0, "Resolution:", 0,yline,90,objHeight, NULL, 0.0, 0, 0, 0, "" );
+ uiBlockBeginAlign ( block );
+ uiDefButS ( block, NUM, REDRAWBUTSOBJECT, "Res.:", 90, yline,105,objHeight, &fss->resolutionxyz, 1, maxRes, 10, 0, "Domain resolution in X, Y and Z direction" );
+ uiDefButS ( block, NUM, B_DIFF, "Prev-Res.:", 195, yline,105,objHeight, &fss->previewresxyz, 1, 100, 10, 0, "Resolution of the preview meshes to generate, also in X, Y and Z direction" );
+ uiBlockEndAlign ( block );
yline -= lineHeight;
+ yline -= separateHeight;
- uiDefBut(block, LABEL, 0, "PartSlip Amount:", 0,yline,200,objHeight, NULL, 0.0, 0, 0, 0, "");
- if(fss->typeFlags&OB_FSBND_PARTSLIP) {
- uiDefButF(block, NUM, B_DIFF, "", 200, yline,100,objHeight, &fss->partSlipValue, 0.0, 1.0, 10,0, "Amount of mixing between no- and free-slip, 0=stickier, 1=same as free slip.");
- } else { uiDefBut(block, LABEL, 0, "-", 200,yline,100,objHeight, NULL, 0.0, 0, 0, 0, ""); }
+ uiDefBut ( block, LABEL, 0, "Time:", 0,yline,90,objHeight, NULL, 0.0, 0, 0, 0, "" );
+ uiBlockBeginAlign ( block );
+ uiDefButF ( block, NUM, B_DIFF, "Start:", 90, yline,105,objHeight, &fss->animStart, 0.0, 100.0, 10, 0, "Simulation time of the first blender frame." );
+ uiDefButF ( block, NUM, B_DIFF, "End:", 195, yline,105,objHeight, &fss->animEnd, 0.0, 100.0, 10, 0, "Simulation time of the last blender frame." );
+ uiBlockEndAlign ( block );
+ yline -= lineHeight;
+ yline -= separateHeight;
+
+ if ( ( fss->guiDisplayMode<1 ) || ( fss->guiDisplayMode>3 ) ) { fss->guiDisplayMode=2; } // can be changed by particle setting
+ uiDefBut ( block, LABEL, 0, "Disp.-Qual.:", 0,yline, 90,objHeight, NULL, 0.0, 0, 0, 0, "" );
+ uiBlockBeginAlign ( block );
+ uiDefButS ( block, MENU, B_BAKE_CACHE_CHANGE, "GuiDisplayMode%t|Geometry %x1|Preview %x2|Final %x3",
+ 90,yline,105,objHeight, &fss->guiDisplayMode, 0, 0, 0, 0, "How to display the fluid mesh in the Blender GUI." );
+ uiDefButS ( block, MENU, B_DIFF, "RenderDisplayMode%t|Geometry %x1|Preview %x2|Final %x3",
+ 195,yline,105,objHeight, &fss->renderDisplayMode, 0, 0, 0, 0, "How to display the fluid mesh for rendering." );
+ uiBlockEndAlign ( block );
yline -= lineHeight;
+ yline -= separateHeight;
- // generateParticles "misused" here
- uiDefBut(block, LABEL, 0, "Impact Factor:", 0,yline,200,objHeight, NULL, 0.0, 0, 0, 0, "");
- uiDefButF(block, NUM, B_DIFF, "", 200, yline,100,objHeight, &fss->surfaceSmoothing, -2.0, 10.0, 10,0, "This is an unphysical value for moving objects - it controls the impact an obstacle has on the fluid, =0 behaves a bit like outflow (deleting fluid), =1 is default, while >1 results in high forces. Can be used to tweak total mass.");
+ uiDefBut ( block, LABEL, 0, "Reverse:", 0,yline,90,objHeight, NULL, 0.0, 0, 0, 0, "" );
+ uiDefButBitI ( block, TOG, OB_FLUIDSIM_REVERSE, REDRAWBUTSOBJECT, "Enable", 90, yline,210,objHeight, &fss->flag, 0, 0, 0, 0, "Reverse fluid frames." );
yline -= lineHeight;
+ yline -= separateHeight;
- yline -= lineHeight; // obstacle
+ uiDefBut ( block, LABEL, 0, "Path:", 0,yline,90,objHeight, NULL, 0.0, 0, 0, 0, "" );
+ uiDefIconBut ( block, BUT, B_FLUIDSIM_SELDIR, ICON_FILESEL, 90, yline, 20, objHeight, 0, 0, 0, 0, 0, "Select Directory (and/or filename prefix) to store baked fluid simulation files in" );
+ uiDefBut ( block, TEX, B_BAKE_CACHE_CHANGE,"", 110, yline, 190, objHeight, fss->surfdataPath, 0.0,79.0, 0, 0, "Enter Directory (and/or filename prefix) to store baked fluid simulation files in" );
+ yline -= lineHeight + 2;
+ // FIXME what is the 79.0 above?
}
- else if(fss->type == OB_FLUIDSIM_PARTICLE) {
-
- //fss->type == 0; // off, broken...
- if(1) {
- // limited selection, old fixed: fss->typeFlags = (1<<5)|(1<<1);
-# define PARTBUT_WIDTH (300/3)
- uiDefButBitS(block, TOG, (1<<2) , REDRAWBUTSOBJECT, "Drops", 0*PARTBUT_WIDTH, yline, PARTBUT_WIDTH,objHeight, &fss->typeFlags, 0, 0, 0, 0, "Show drop particles.");
- uiDefButBitS(block, TOG, (1<<4) , REDRAWBUTSOBJECT, "Floats", 1*PARTBUT_WIDTH, yline, PARTBUT_WIDTH,objHeight, &fss->typeFlags, 0, 0, 0, 0, "Show floating foam particles.");
- uiDefButBitS(block, TOG, (1<<5) , REDRAWBUTSOBJECT, "Tracer", 2*PARTBUT_WIDTH, yline, PARTBUT_WIDTH,objHeight, &fss->typeFlags, 0, 0, 0, 0, "Show tracer particles.");
+ }
+ else if (
+ ( fss->type == OB_FLUIDSIM_FLUID )
+ || ( fss->type == OB_FLUIDSIM_INFLOW )
+ )
+ {
+ yline -=lineHeight - 10;
+ uiDefBut ( block, LABEL, 0, "Volume init:", 0,yline,120,objHeight, NULL, 0.0, 0, 0, 0, "" );
+ uiBlockBeginAlign ( block ); // fluid
+ uiDefButC ( block, ROW, REDRAWBUTSOBJECT ,"Volume", 120, yline,60,objHeight, &fss->volumeInitType, 15.0, 1, 20.0, 1.0, "Type of volume init: use only inner region of mesh." );
+ uiDefButC ( block, ROW, REDRAWBUTSOBJECT ,"Shell", 180, yline,60,objHeight, &fss->volumeInitType, 15.0, 2, 20.0, 2.0, "Type of volume init: use only the hollow shell defined by the faces of the mesh." );
+ uiDefButC ( block, ROW, REDRAWBUTSOBJECT ,"Both", 240, yline,60,objHeight, &fss->volumeInitType, 15.0, 3, 20.0, 3.0, "Type of volume init: use both the inner volume and the outer shell." );
+ uiBlockEndAlign ( block );
+ yline -= lineHeight;
+ yline -= separateHeight;
+
+ if ( fss->type == OB_FLUIDSIM_FLUID ) uiDefBut ( block, LABEL, 0, "Initial velocity:", 0,yline,120,objHeight, NULL, 0.0, 0, 0, 0, "" );
+ if ( fss->type == OB_FLUIDSIM_INFLOW ) uiDefBut ( block, LABEL, 0, "Inflow velocity:", 0,yline,120,objHeight, NULL, 0.0, 0, 0, 0, "" );
+ //yline -= lineHeight;
+
+ uiBlockBeginAlign ( block );
+ uiDefButF ( block, NUM, B_DIFF, "X:", 120, yline, 60,objHeight, &fss->iniVelx, -1000.1, 1000.1, 10, 0, "Fluid velocity in X direction" );
+ uiDefButF ( block, NUM, B_DIFF, "Y:", 180, yline, 60,objHeight, &fss->iniVely, -1000.1, 1000.1, 10, 0, "Fluid velocity in Y direction" );
+ uiDefButF ( block, NUM, B_DIFF, "Z:", 240, yline, 60,objHeight, &fss->iniVelz, -1000.1, 1000.1, 10, 0, "Fluid velocity in Z direction" );
+ uiBlockEndAlign ( block );
+ yline -= lineHeight;
+ yline -= separateHeight;
+
+ if ( fss->type == OB_FLUIDSIM_INFLOW ) // inflow
+ {
+ uiDefBut ( block, LABEL, 0, "Local Coords:", 0,yline,120,objHeight, NULL, 0.0, 0, 0, 0, "" );
+ uiDefButBitS ( block, TOG, OB_FSINFLOW_LOCALCOORD, REDRAWBUTSOBJECT, "Enable", 120, yline,180,objHeight, &fss->typeFlags, 0, 0, 0, 0, "Use local coordinates for inflow (e.g. for rotating objects)." );
yline -= lineHeight;
-# undef PARTBUT_WIDTH
-
+ yline -= separateHeight;
+ }
+ else
+ {
+ }
+
+ // domainNovecgen "misused" here
+ uiDefBut ( block, LABEL, 0, "Animated Mesh:", 0,yline,120,objHeight, NULL, 0.0, 0, 0, 0, "" );
+ uiDefButBitC ( block, TOG, 1, REDRAWBUTSOBJECT, "Export", 120, yline,180,objHeight, &fss->domainNovecgen, 0, 0, 0, 0, "Export this mesh as an animated one. Slower, only use if really necessary (e.g. armatures or parented objects), animated pos/rot/scale IPOs do not require it." );
+ yline -= lineHeight;
+
+ } // fluid inflow
+ else if ( ( fss->type == OB_FLUIDSIM_OUTFLOW ) )
+ {
+ yline -= lineHeight - 10;
+ uiDefBut ( block, LABEL, 0, "Volumen init:", 0,yline,120,objHeight, NULL, 0.0, 0, 0, 0, "" );
+ uiBlockBeginAlign ( block ); // outflow
+ uiDefButC ( block, ROW, REDRAWBUTSOBJECT ,"Volume", 120, yline,60,objHeight, &fss->volumeInitType, 15.0, 1, 20.0, 1.0, "Type of volume init: use only inner region of mesh." );
+ uiDefButC ( block, ROW, REDRAWBUTSOBJECT ,"Shell", 180, yline,60,objHeight, &fss->volumeInitType, 15.0, 2, 20.0, 2.0, "Type of volume init: use only the hollow shell defined by the faces of the mesh." );
+ uiDefButC ( block, ROW, REDRAWBUTSOBJECT ,"Both", 240, yline,60,objHeight, &fss->volumeInitType, 15.0, 3, 20.0, 3.0, "Type of volume init: use both the inner volume and the outer shell." );
+ uiBlockEndAlign ( block );
+ yline -= lineHeight;
+ yline -= separateHeight;
+
+ // domainNovecgen "misused" here
+ uiDefBut ( block, LABEL, 0, "Animated Mesh:", 0,yline,120,objHeight, NULL, 0.0, 0, 0, 0, "" );
+ uiDefButBitC ( block, TOG, 1, REDRAWBUTSOBJECT, "Export", 120, yline,180,objHeight, &fss->domainNovecgen, 0, 0, 0, 0, "Export this mesh as an animated one. Slower, only use if really necessary (e.g. armatures or parented objects), animated pos/rot/scale IPOs do not require it." );
+ yline -= lineHeight;
+
+ //uiDefBut(block, LABEL, 0, "No additional settings as of now...", 0,yline,300,objHeight, NULL, 0.0, 0, 0, 0, "");
+ }
+ else if ( ( fss->type == OB_FLUIDSIM_OBSTACLE ) )
+ {
+
+ yline -= lineHeight - 10; // obstacle
+ uiDefBut ( block, LABEL, 0, "Volume init:", 0,yline,120,objHeight, NULL, 0.0, 0, 0, 0, "" );
+ uiBlockBeginAlign ( block ); // obstacle
+ uiDefButC ( block, ROW, REDRAWBUTSOBJECT ,"Volume", 120, yline,60,objHeight, &fss->volumeInitType, 15.0, 1, 20.0, 1.0, "Type of volume init: use only inner region of mesh." );
+ uiDefButC ( block, ROW, REDRAWBUTSOBJECT ,"Shell", 180, yline,60,objHeight, &fss->volumeInitType, 15.0, 2, 20.0, 2.0, "Type of volume init: use only the hollow shell defined by the faces of the mesh." );
+ uiDefButC ( block, ROW, REDRAWBUTSOBJECT ,"Both", 240, yline,60,objHeight, &fss->volumeInitType, 15.0, 3, 20.0, 3.0, "Type of volume init: use both the inner volume and the outer shell." );
+ uiBlockEndAlign ( block );
+ yline -= lineHeight;
+ yline -= separateHeight;
+
+ uiDefBut ( block, LABEL, 0, "Boundary type:", 0,yline,120,objHeight, NULL, 0.0, 0, 0, 0, "" );
+ uiBlockBeginAlign ( block ); // obstacle
+ uiDefButS ( block, ROW, REDRAWBUTSOBJECT ,"Noslip", 120, yline,60,objHeight, &fss->typeFlags, 15.0, OB_FSBND_NOSLIP, 20.0, 1.0, "Obstacle causes zero normal and tangential velocity (=sticky). Default for all. Only option for moving objects." );
+ uiDefButS ( block, ROW, REDRAWBUTSOBJECT ,"Part", 180, yline,60,objHeight, &fss->typeFlags, 15.0, OB_FSBND_PARTSLIP, 20.0, 2.0, "Mix between no-slip and free-slip. Non moving objects only!" );
+ uiDefButS ( block, ROW, REDRAWBUTSOBJECT ,"Free", 240, yline,60,objHeight, &fss->typeFlags, 15.0, OB_FSBND_FREESLIP, 20.0, 3.0, "Obstacle only causes zero normal velocity (=not sticky). Non moving objects only!" );
+ uiBlockEndAlign ( block );
+ yline -= lineHeight;
+ yline -= separateHeight;
+
+ // domainNovecgen "misused" here
+ uiDefBut ( block, LABEL, 0, "Animated Mesh:", 0,yline,120,objHeight, NULL, 0.0, 0, 0, 0, "" );
+ uiDefButBitC ( block, TOG, 1, REDRAWBUTSOBJECT, "Export", 120, yline,180,objHeight, &fss->domainNovecgen, 0, 0, 0, 0, "Export this mesh as an animated one. Slower, only use if really necessary (e.g. armatures or parented objects), animated loc/rot/scale IPOs do not require it." );
+ yline -= lineHeight;
+ yline -= separateHeight;
+
+ uiDefBut ( block, LABEL, 0, "PartSlip Amount:", 0,yline,120,objHeight, NULL, 0.0, 0, 0, 0, "" );
+ if ( fss->typeFlags&OB_FSBND_PARTSLIP )
+ {
+ uiDefButF ( block, NUM, B_DIFF, "", 120, yline,180,objHeight, &fss->partSlipValue, 0.0, 1.0, 10,0, "Amount of mixing between no- and free-slip, 0=stickier, 1=same as free slip." );
+ }
+ else { uiDefBut ( block, LABEL, 0, "-", 120,yline,180,objHeight, NULL, 0.0, 0, 0, 0, "" ); }
+ yline -= lineHeight;
+ yline -= separateHeight;
+
+ // generateParticles "misused" here
+ uiDefBut ( block, LABEL, 0, "Impact Factor:", 0,yline,120,objHeight, NULL, 0.0, 0, 0, 0, "" );
+ uiDefButF ( block, NUM, B_DIFF, "", 120, yline,180,objHeight, &fss->surfaceSmoothing, -2.0, 10.0, 10,0, "This is an unphysical value for moving objects - it controls the impact an obstacle has on the fluid, =0 behaves a bit like outflow (deleting fluid), =1 is default, while >1 results in high forces. Can be used to tweak total mass." );
+ yline -= lineHeight;
- uiDefBut(block, LABEL, 0, "Size Influence:", 0,yline,150,objHeight, NULL, 0.0, 0, 0, 0, "");
- uiDefButF(block, NUM, B_DIFF, "", 150, yline,150,objHeight, &fss->particleInfSize, 0.0, 2.0, 10,0, "Amount of particle size scaling: 0=off (all same size), 1=full (range 0.2-2.0), >1=stronger.");
+ }
+ else if ( fss->type == OB_FLUIDSIM_PARTICLE )
+ {
+
+ //fss->type == 0; // off, broken...
+ if ( 1 )
+ {
+ // limited selection, old fixed: fss->typeFlags = (1<<5)|(1<<1);
+ # define PARTBUT_WIDTH (180/3)
+ yline -=lineHeight - 10;
+ uiDefBut ( block, LABEL, 0, "Particle type:", 0,yline,120,objHeight, NULL, 0.0, 0, 0, 0, "" );
+ uiBlockBeginAlign ( block );
+ uiDefButBitS ( block, TOG, ( 1<<2 ) , REDRAWBUTSOBJECT, "Drops", 120 + 0*PARTBUT_WIDTH, yline, PARTBUT_WIDTH,objHeight, &fss->typeFlags, 0, 0, 0, 0, "Show drop particles." );
+ uiDefButBitS ( block, TOG, ( 1<<4 ) , REDRAWBUTSOBJECT, "Floats", 120 + 1*PARTBUT_WIDTH, yline, PARTBUT_WIDTH,objHeight, &fss->typeFlags, 0, 0, 0, 0, "Show floating foam particles." );
+ uiDefButBitS ( block, TOG, ( 1<<5 ) , REDRAWBUTSOBJECT, "Tracer", 120 + 2*PARTBUT_WIDTH, yline, PARTBUT_WIDTH,objHeight, &fss->typeFlags, 0, 0, 0, 0, "Show tracer particles." );
+ uiBlockEndAlign ( block );
yline -= lineHeight;
- uiDefBut(block, LABEL, 0, "Alpha Influence:", 0,yline,150,objHeight, NULL, 0.0, 0, 0, 0, "");
- uiDefButF(block, NUM, B_DIFF, "", 150, yline,150,objHeight, &fss->particleInfAlpha, 0.0, 2.0, 10,0, "Amount of particle alpha change, inverse of size influence: 0=off (all same alpha), 1=full (large particles get lower alphas, smaller ones higher values).");
+ yline -= separateHeight;
+ # undef PARTBUT_WIDTH
+
+
+ uiDefBut ( block, LABEL, 0, "Size Influence:", 0,yline,120,objHeight, NULL, 0.0, 0, 0, 0, "" );
+ uiDefButF ( block, NUM, B_DIFF, "", 120, yline,180,objHeight, &fss->particleInfSize, 0.0, 2.0, 10,0, "Amount of particle size scaling: 0=off (all same size), 1=full (range 0.2-2.0), >1=stronger." );
yline -= lineHeight;
+ yline -= separateHeight;
- yline -= 1*separateHeight;
-
+ uiDefBut ( block, LABEL, 0, "Alpha Influence:", 0,yline,120,objHeight, NULL, 0.0, 0, 0, 0, "" );
+ uiDefButF ( block, NUM, B_DIFF, "", 120, yline,180,objHeight, &fss->particleInfAlpha, 0.0, 2.0, 10,0, "Amount of particle alpha change, inverse of size influence: 0=off (all same alpha), 1=full (large particles get lower alphas, smaller ones higher values)." );
+ yline -= lineHeight;
+ yline -= separateHeight;
+
// FSPARTICLE also select input files
- uiBlockBeginAlign(block);
- uiDefIconBut(block, BUT, B_FLUIDSIM_SELDIR, ICON_FILESEL, 0, yline, 20, objHeight, 0, 0, 0, 0, 0, "Select fluid simulation bake directory/prefix to load particles from, same as for domain object.");
- uiDefBut(block, TEX, B_FLUIDSIM_FORCEREDRAW,"", 20, yline, 280, objHeight, fss->surfdataPath, 0.0,79.0, 0, 0, "Enter fluid simulation bake directory/prefix to load particles from, same as for domain object.");
- uiBlockEndAlign(block);
+ uiDefBut ( block, LABEL, 0, "Path:", 0,yline,120,objHeight, NULL, 0.0, 0, 0, 0, "" );
+ uiBlockBeginAlign ( block );
+ uiDefIconBut ( block, BUT, B_FLUIDSIM_SELDIR, ICON_FILESEL, 120, yline, 20, objHeight, 0, 0, 0, 0, 0, "Select fluid simulation bake directory/prefix to load particles from, same as for domain object." );
+ uiDefBut ( block, TEX, B_BAKE_CACHE_CHANGE,"", 140, yline, 160, objHeight, fss->surfdataPath, 0.0,79.0, 0, 0, "Enter fluid simulation bake directory/prefix to load particles from, same as for domain object." );
+ uiBlockEndAlign ( block );
yline -= lineHeight;
} // disabled for now...
+
+ }
+ else if ( fss->type == OB_FLUIDSIM_CONTROL )
+ {
+ yline -=lineHeight - 10;
+ uiDefBut ( block, LABEL, 0, "Time:", 0,yline,100,objHeight, NULL, 0.0, 0, 0, 0, "" );
+ uiBlockBeginAlign ( block );
+ uiDefButF ( block, NUM, B_DIFF, "Start:", 120, yline,90,objHeight, &fss->cpsTimeStart, 0.0, 100.0, 10, 0, "Specifies time when the control particles are activated." );
+ uiDefButF ( block, NUM, B_DIFF, "End:", 210, yline,90,objHeight, &fss->cpsTimeEnd , 0.0, 100.0, 10, 0, "Specifies time when the control particles are deactivated." );
+ uiBlockEndAlign ( block );
+ yline -= lineHeight;
+ yline -= separateHeight;
+
+ uiDefBut ( block, LABEL, 0, "Attraction force:", 0,yline,100,objHeight, NULL, 0.0, 0, 0, 0, "" );
+ uiBlockBeginAlign ( block );
+ uiDefButF ( block, NUM, B_DIFF, "Strength:", 120, yline,90,objHeight, &fss->attractforceStrength, -10.0, 10.0, 10, 0, "Force strength for directional attraction towards the control object." );
+ uiDefButF ( block, NUM, B_DIFF, "Radius:", 210, yline,90,objHeight, &fss->attractforceRadius, 0.0, 10.0, 10, 0, "Specifies the force field radius around the control object." );
+ uiBlockEndAlign ( block );
+ yline -= lineHeight;
+ yline -= separateHeight;
+
+ uiDefBut ( block, LABEL, 0, "Velocity force:", 0,yline,100,objHeight, NULL, 0.0, 0, 0, 0, "" );
+ uiBlockBeginAlign ( block );
+ uiDefButF ( block, NUM, B_DIFF, "Strength:", 120, yline,90,objHeight, &fss->velocityforceStrength, 0.0, 10.0, 10, 0, "Force strength of how much of the control object's velocity is influencing the fluid velocity." );
+ uiDefButF ( block, NUM, B_DIFF, "Radius:", 210, yline,90,objHeight, &fss->velocityforceRadius, 0.0, 10.0, 10, 0, "Specifies the force field radius around the control object." );
+ uiBlockEndAlign ( block );
+ yline -= lineHeight;
+ yline -= separateHeight;
+
+ uiDefBut ( block, LABEL, 0, "Quality:", 0,yline,100,objHeight, NULL, 0.0, 0, 0, 0, "" );
+ uiDefButF ( block, NUM, B_DIFF, "", 120, yline,180,objHeight, &fss->cpsQuality, 5.0, 100.0, 10, 0, "Specifies the quality which is used for object sampling (higher = better but slower)." );
+ yline -= lineHeight;
+ yline -= separateHeight;
+
+ uiDefBut ( block, LABEL, 0, "Reverse:", 0,yline,100,objHeight, NULL, 0.0, 0, 0, 0, "" );
+ uiDefButBitI ( block, TOG, OB_FLUIDSIM_REVERSE, REDRAWBUTSOBJECT, "Enable", 120, yline,180,objHeight, &fss->flag, 0, 0, 0, 0, "Reverse control object movement." );
+ yline -= lineHeight;
- }
- else {
- yline -= lineHeight + 5;
- /* not yet set */
- uiDefBut(block, LABEL, 0, "Select object type for simulation", 0,yline,300,objHeight, NULL, 0.0, 0, 0, 0, "");
- yline -= lineHeight;
- }
- return;
- } else {
- msg = "Object not enabled for fluid simulation.";
}
- } else {
- msg = "Only mesh objects can do fluid simulation.";
- }
-errMessage:
- yline -= lineHeight + 5;
- uiDefBut(block, LABEL, 0, msg, 0,yline,300,objHeight, NULL, 0.0, 0, 0, 0, "");
- yline -= lineHeight;
+ else
+ {
+ yline -= lineHeight + 5;
+ /* not yet set */
+ uiDefBut ( block, LABEL, 0, "Select object type for simulation", 0,yline,300,objHeight, NULL, 0.0, 0, 0, 0, "" );
+ yline -= lineHeight;
+ }
+ return;
+ }
#endif // DISABLE_ELBEEM
}
diff --git a/source/blender/src/buttons_scene.c b/source/blender/src/buttons_scene.c
index fb6a7636e16..8ea71ce38dc 100644
--- a/source/blender/src/buttons_scene.c
+++ b/source/blender/src/buttons_scene.c
@@ -33,6 +33,7 @@
#include <string.h>
#include "MEM_guardedalloc.h"
+#include "BLO_sys_types.h" // for intptr_t support
#include "DNA_node_types.h"
#include "DNA_screen_types.h"
#include "DNA_space_types.h"
@@ -210,9 +211,15 @@ void do_soundbuts(unsigned short event)
case B_SOUND_MENU_SAMPLE:
if (G.buts->menunr > 0) {
sample = BLI_findlink(samples, G.buts->menunr - 1);
- if (sample && sound) {
+ if (sample && sound && sound->sample != sample) {
+ int wasrelative = (strncmp(sound->name, "//", 2)==0);
+
BLI_strncpy(sound->name, sample->name, sizeof(sound->name));
sound_set_sample(sound, sample);
+
+ if (wasrelative)
+ BLI_makestringcode(G.sce, sound->name);
+
do_soundbuts(B_SOUND_REDRAW);
}
}
@@ -2308,12 +2315,13 @@ static void render_panel_anim(void)
uiBlockEndAlign(block);
uiBlockSetCol(block, TH_AUTO);
- uiDefBut(block, BUT,B_PLAYANIM, "PLAY",692,40,94,33, 0, 0, 0, 0, 0, "Play rendered images/avi animation (Ctrl+F11), (Play Hotkeys: A-Noskip, P-PingPong)");
- uiDefButS(block, NUM, B_RTCHANGED, "rt:",789,40,95,33, &G.rt, -1000.0, 1000.0, 0, 0, "General testing/debug button");
+ uiDefBut(block, BUT,B_PLAYANIM, "PLAY",692,50,94,33, 0, 0, 0, 0, 0, "Play rendered images/avi animation (Ctrl+F11), (Play Hotkeys: A-Noskip, P-PingPong)");
+ uiDefButS(block, NUM, B_RTCHANGED, "rt:",789,50,95,33, &G.rt, -1000.0, 1000.0, 0, 0, "General testing/debug button");
uiBlockBeginAlign(block);
- uiDefButI(block, NUM,REDRAWSEQ,"Sta:",692,10,94,24, &G.scene->r.sfra,1.0,MAXFRAMEF, 0, 0, "The start frame of the animation (inclusive)");
- uiDefButI(block, NUM,REDRAWSEQ,"End:",789,10,95,24, &G.scene->r.efra,SFRA,MAXFRAMEF, 0, 0, "The end frame of the animation (inclusive)");
+ uiDefButI(block, NUM,REDRAWSEQ,"Sta:",692,20,94,24, &G.scene->r.sfra,1.0,MAXFRAMEF, 0, 0, "The start frame of the animation (inclusive)");
+ uiDefButI(block, NUM,REDRAWSEQ,"End:",789,20,95,24, &G.scene->r.efra,SFRA,MAXFRAMEF, 0, 0, "The end frame of the animation (inclusive)");
+ uiDefButI(block, NUM,REDRAWSEQ,"Step:",692,0,192,18, &G.scene->frame_step, 1.0, MAXFRAMEF, 0, 0, "Frame Step");
uiBlockEndAlign(block);
}
@@ -3261,7 +3269,7 @@ static void layer_copy_func(void *lay_v, void *lay_p)
static void delete_scene_layer_func(void *srl_v, void *act_i)
{
if(BLI_countlist(&G.scene->r.layers)>1) {
- long act= (long)act_i;
+ intptr_t act= (intptr_t)act_i;
BLI_remlink(&G.scene->r.layers, srl_v);
MEM_freeN(srl_v);
@@ -3322,7 +3330,7 @@ static char *scene_layer_menu(void)
static void draw_3d_layer_buttons(uiBlock *block, int type, unsigned int *poin, short xco, short yco, short dx, short dy, char *tip)
{
uiBut *bt;
- long a;
+ intptr_t a;
uiBlockBeginAlign(block);
for(a=0; a<5; a++) {
@@ -3381,7 +3389,7 @@ static void render_panel_layers(void)
uiDefButBitI(block, TOG, R_SINGLE_LAYER, B_NOP, "Single", 230,145,60,20, &G.scene->r.scemode, 0, 0, 0, 0, "Only render this layer");
bt=uiDefIconBut(block, BUT, B_NOP, ICON_X, 285, 145, 25, 20, 0, 0, 0, 0, 0, "Deletes current Render Layer");
- uiButSetFunc(bt, delete_scene_layer_func, srl, (void *)(long)G.scene->r.actlay);
+ uiButSetFunc(bt, delete_scene_layer_func, srl, (void *)(intptr_t)G.scene->r.actlay);
uiBlockEndAlign(block);
/* RenderLayer visible-layers */
diff --git a/source/blender/src/buttons_shading.c b/source/blender/src/buttons_shading.c
index 1b580381ca5..c377168bdb8 100644
--- a/source/blender/src/buttons_shading.c
+++ b/source/blender/src/buttons_shading.c
@@ -113,6 +113,8 @@
#include "RE_pipeline.h"
+#include "GPU_material.h"
+
/* -----includes for this file specific----- */
#include "butspace.h" // own module
@@ -209,6 +211,7 @@ static void load_image_cb(char *str, void *ima_pp_v, void *iuser_v) /* called fr
if(GS(tex->id.name)==ID_TE) {
BIF_preview_changed(ID_TE);
allqueue(REDRAWBUTSSHADING, 0);
+ allqueue(REDRAWVIEW3D, 0);
allqueue(REDRAWOOPS, 0);
}
}
@@ -1542,10 +1545,35 @@ static void texture_panel_colors(Tex *tex)
uiDefButF(block, NUMSLI, B_TEXPRV, "Contr", 160,10,150,20, &tex->contrast, 0.01, 5.0, 0, 0, "Changes the contrast of the color or intensity of a texture");
}
+static int texture_channels_num_display(MTex **mtex)
+{
+ int a, num_mtex;
+
+ if(!mtex)
+ return 0;
+
+ /* compute number of texture channels to draw, 1 more
+ * than the last, used texture channel, and at least 10 */
+ num_mtex = 0;
+
+ for(a=MAX_MTEX-1; a>=0; a--) {
+ if (mtex[a]) {
+ num_mtex = a+1;
+ break;
+ }
+ }
+
+ if (num_mtex < 10)
+ return 10;
+ else if(num_mtex < MAX_MTEX)
+ return num_mtex + 1;
+ else
+ return MAX_MTEX;
+}
-static void texture_panel_texture(MTex *mtex, Material *ma, World *wrld, Lamp *la, bNode *node, Brush *br, SculptData *sd)
+static void texture_panel_texture(MTex *actmtex, Material *ma, World *wrld, Lamp *la, bNode *node, Brush *br, SculptData *sd)
{
- MTex *mt=NULL;
+ MTex **mtex, *mt;
uiBlock *block;
ID *id=NULL, *idfrom;
int a, yco, loos;
@@ -1556,17 +1584,35 @@ static void texture_panel_texture(MTex *mtex, Material *ma, World *wrld, Lamp *l
if(uiNewPanel(curarea, block, "Texture", "Texture", 320, 0, 318, 204)==0) return;
/* first do the browse but */
- if(mtex)
- id= (ID *)mtex->tex;
+ if(actmtex)
+ id= (ID *)actmtex->tex;
else if(node)
id= node->id;
- if(ma) idfrom= &ma->id;
- else if(wrld) idfrom= &wrld->id;
- else if(la) idfrom= &la->id;
- else if(br) idfrom= &br->id;
- else if(sd) idfrom= NULL; /* Not sure what this does */
- else idfrom= NULL;
+ if(ma) {
+ idfrom= &ma->id;
+ mtex= ma->mtex;
+ }
+ else if(wrld) {
+ idfrom= &wrld->id;
+ mtex= wrld->mtex;
+ }
+ else if(la) {
+ idfrom= &la->id;
+ mtex= la->mtex;
+ }
+ else if(br) {
+ idfrom= &br->id;
+ mtex= br->mtex;
+ }
+ else if(sd) {
+ idfrom= NULL; /* Not sure what this does */
+ mtex= sd->mtex;
+ }
+ else {
+ idfrom= NULL;
+ mtex= NULL;
+ }
uiBlockSetCol(block, TH_BUT_SETTING2);
if(ma) {
@@ -1595,15 +1641,13 @@ static void texture_panel_texture(MTex *mtex, Material *ma, World *wrld, Lamp *l
/* CHANNELS */
if(node==NULL) {
+ int num_mtex;
uiBlockBeginAlign(block);
yco= 150;
- for(a= 0; a<MAX_MTEX; a++) {
-
- if(ma) mt= ma->mtex[a];
- else if(wrld) mt= wrld->mtex[a];
- else if(la) mt= la->mtex[a];
- else if(br) mt= br->mtex[a];
- else if(sd) mt= sd->mtex[a];
+
+ num_mtex= texture_channels_num_display(mtex);
+ for(a=0; a<num_mtex; a++) {
+ mt= mtex[a];
if(mt && mt->tex) splitIDname(mt->tex->id.name+2, str, &loos);
else strcpy(str, "");
@@ -2030,7 +2074,7 @@ static void world_panel_texture(World *wrld)
uiBlock *block;
MTex *mtex;
ID *id;
- int a, loos;
+ int a, loos, num_mtex;
char str[64], *strp;
block= uiNewBlock(&curarea->uiblocks, "world_panel_texture", UI_EMBOSS, UI_HELV, curarea->win);
@@ -2041,7 +2085,8 @@ static void world_panel_texture(World *wrld)
/* TEX CHANNELS */
uiBlockSetCol(block, TH_BUT_NEUTRAL);
uiBlockBeginAlign(block);
- for(a= 0; a<MAX_MTEX; a++) {
+ num_mtex= texture_channels_num_display(wrld->mtex);
+ for(a= 0; a<num_mtex; a++) {
mtex= wrld->mtex[a];
if(mtex && mtex->tex) splitIDname(mtex->tex->id.name+2, str, &loos);
else strcpy(str, "");
@@ -2490,7 +2535,10 @@ static void lamp_panel_mapto(Object *ob, Lamp *la)
uiDefButF(block, NUMSLI, B_LAMPPRV, "DVar ", 10,10,135,19, &(mtex->def_var), 0.0, 1.0, 0, 0, "Value to use for Ref, Spec, Amb, Emit, Alpha, RayMir, TransLu and Hard");
/* MAP TO */
- uiDefButBitS(block, TOG, MAP_COL, B_LAMPPRV, "Col", 10,180,135,19, &(mtex->mapto), 0, 0, 0, 0, "Lets the texture affect the basic color of the lamp");
+ uiBlockBeginAlign(block);
+ uiDefButBitS(block, TOG, LAMAP_COL, B_LAMPPRV, "Col", 10,180,135,19, &(mtex->mapto), 0, 0, 0, 0, "Lets the texture affect the basic color of the lamp");
+ uiDefButBitS(block, TOG, LAMAP_SHAD, B_LAMPPRV, "Shadow", 146,180,135,19, &(mtex->mapto), 0, 0, 0, 0, "Lets the texture affect the shadow color of the lamp");
+ uiBlockEndAlign(block);
uiBlockBeginAlign(block);
uiDefButS(block, MENU, B_LAMPPRV, mapto_blendtype_pup(),155,125,155,19, &(mtex->blendtype), 0, 0, 0, 0, "Texture blending mode");
@@ -2506,7 +2554,7 @@ static void lamp_panel_texture(Object *ob, Lamp *la)
uiBlock *block;
MTex *mtex;
ID *id;
- int a, loos;
+ int a, loos, num_mtex;
char *strp, str[64];
block= uiNewBlock(&curarea->uiblocks, "lamp_panel_texture", UI_EMBOSS, UI_HELV, curarea->win);
@@ -2517,7 +2565,8 @@ static void lamp_panel_texture(Object *ob, Lamp *la)
/* TEX CHANNELS */
uiBlockSetCol(block, TH_BUT_NEUTRAL);
uiBlockBeginAlign(block);
- for(a= 0; a<MAX_MTEX; a++) {
+ num_mtex= texture_channels_num_display(la->mtex);
+ for(a= 0; a<num_mtex; a++) {
mtex= la->mtex[a];
if(mtex && mtex->tex) splitIDname(mtex->tex->id.name+2, str, &loos);
else strcpy(str, "");
@@ -2603,9 +2652,9 @@ static void lamp_panel_spot(Object *ob, Lamp *la)
uiBlockSetCol(block, TH_BUT_SETTING1);
uiBlockBeginAlign(block);
- uiDefButBitS(block, TOG, LA_SHAD_RAY, B_SHADRAY,"Ray Shadow",10,180,80,19,&la->mode, 0, 0, 0, 0, "Use ray tracing for shadow");
+ uiDefButBitI(block, TOG, LA_SHAD_RAY, B_SHADRAY,"Ray Shadow",10,180,80,19,&la->mode, 0, 0, 0, 0, "Use ray tracing for shadow");
if(la->type==LA_SPOT) {
- uiDefButBitS(block, TOG, LA_SHAD_BUF, B_SHADBUF, "Buf.Shadow",10,160,80,19,&la->mode, 0, 0, 0, 0, "Lets spotlight produce shadows using shadow buffer");
+ uiDefButBitI(block, TOG, LA_SHAD_BUF, B_SHADBUF, "Buf.Shadow",10,160,80,19,&la->mode, 0, 0, 0, 0, "Lets spotlight produce shadows using shadow buffer");
if(la->mode & LA_SHAD_BUF) {
char *tip= "Regular buffer type";
if(la->buftype==LA_SHADBUF_IRREGULAR)
@@ -2618,12 +2667,15 @@ static void lamp_panel_spot(Object *ob, Lamp *la)
}
uiBlockEndAlign(block);
- uiDefButBitS(block, TOG, LA_ONLYSHADOW, B_LAMPPRV,"OnlyShadow", 10,110,80,19,&la->mode, 0, 0, 0, 0, "Causes light to cast shadows only without illuminating objects");
+ uiBlockBeginAlign(block);
+ uiDefButBitI(block, TOG, LA_ONLYSHADOW, B_LAMPPRV,"OnlyShadow", 10,110,80,19,&la->mode, 0, 0, 0, 0, "Causes light to cast shadows only without illuminating objects");
+ uiDefButBitI(block, TOG, LA_LAYER_SHADOW, B_LAMPPRV,"Layer", 10,90,80,19,&la->mode, 0, 0, 0, 0, "Causes only objects on the same layer to cast shadows");
+ uiBlockEndAlign(block);
if(la->type==LA_SPOT) {
uiBlockBeginAlign(block);
- uiDefButBitS(block, TOG, LA_SQUARE, B_LAMPREDRAW,"Square", 10,60,80,19,&la->mode, 0, 0, 0, 0, "Sets square spotbundles");
- uiDefButBitS(block, TOG, LA_HALO, B_LAMPREDRAW,"Halo", 10,40,80,19,&la->mode, 0, 0, 0, 0, "Renders spotlight with a volumetric halo");
+ uiDefButBitI(block, TOG, LA_SQUARE, B_LAMPREDRAW,"Square", 10,60,80,19,&la->mode, 0, 0, 0, 0, "Sets square spotbundles");
+ uiDefButBitI(block, TOG, LA_HALO, B_LAMPREDRAW,"Halo", 10,40,80,19,&la->mode, 0, 0, 0, 0, "Renders spotlight with a volumetric halo");
uiBlockBeginAlign(block);
uiDefButF(block, NUMSLI,B_LAMPREDRAW,"SpotSi ", 100,180,200,19,&la->spotsize, 1.0, 180.0, 0, 0, "Sets the angle of the spotlight beam in degrees");
@@ -2670,50 +2722,63 @@ static void lamp_panel_spot(Object *ob, Lamp *la)
}
}
- if(ELEM4(la->type, LA_AREA, LA_SPOT, LA_SUN, LA_LOCAL) && (la->mode & LA_SHAD_RAY)) {
-
- if (ELEM3(la->type, LA_SPOT, LA_SUN, LA_LOCAL)) {
- if (la->ray_samp_method == LA_SAMP_CONSTANT) la->ray_samp_method = LA_SAMP_HALTON;
-
- uiDefButS(block, MENU, B_REDR, "Adaptive QMC %x1|Constant QMC %x2",
- 100,110,200,19, &la->ray_samp_method, 0, 0, 0, 0, "Method for generating shadow samples: Adaptive QMC is fastest, Constant QMC is less noisy but slower");
+ if(ELEM4(la->type, LA_AREA, LA_SPOT, LA_SUN, LA_LOCAL)) {
- uiDefButF(block, NUM,B_LAMPREDRAW,"Soft Size", 100,80,200,19, &la->area_size, 0.01, 100.0, 10, 0, "Area light size, doesn't affect energy amount");
+ if(la->mode & LA_SHAD_RAY) {
+ if (ELEM3(la->type, LA_SPOT, LA_SUN, LA_LOCAL)) {
+ if (la->ray_samp_method == LA_SAMP_CONSTANT) la->ray_samp_method = LA_SAMP_HALTON;
- uiDefButS(block, NUM,0,"Samples:", 100,60,200,19, &la->ray_samp, 1.0, 16.0, 100, 0, "Sets the amount of samples taken extra (samp x samp)");
- if (la->ray_samp_method == LA_SAMP_HALTON)
- uiDefButF(block, NUM,0,"Threshold:", 100,40,200,19, &la->adapt_thresh, 0.0, 1.0, 100, 0, "Threshold for adaptive sampling, to control what level is considered already in shadow");
+ uiDefButS(block, MENU, B_REDR, "Adaptive QMC %x1|Constant QMC %x2",
+ 100,110,200,19, &la->ray_samp_method, 0, 0, 0, 0, "Method for generating shadow samples: Adaptive QMC is fastest, Constant QMC is less noisy but slower");
+
+ uiDefButF(block, NUM,B_LAMPREDRAW,"Soft Size", 100,80,200,19, &la->area_size, 0.01, 100.0, 10, 0, "Area light size, doesn't affect energy amount");
+
+ uiDefButS(block, NUM,0,"Samples:", 100,60,200,19, &la->ray_samp, 1.0, 16.0, 100, 0, "Sets the amount of samples taken extra (samp x samp)");
+ if (la->ray_samp_method == LA_SAMP_HALTON)
+ uiDefButF(block, NUM,0,"Threshold:", 100,40,200,19, &la->adapt_thresh, 0.0, 1.0, 100, 0, "Threshold for adaptive sampling, to control what level is considered already in shadow");
+ }
+ else if (la->type == LA_AREA) {
+ uiDefButS(block, MENU, B_REDR, "Adaptive QMC %x1|Constant QMC %x2|Constant Jittered %x0",
+ 100,180,200,19, &la->ray_samp_method, 0, 0, 0, 0, "Method for generating shadow samples: Adaptive QMC is fastest");
+
+ if (la->ray_samp_method == LA_SAMP_CONSTANT) {
+ uiBlockBeginAlign(block);
+ uiDefButBitS(block, TOG, LA_SAMP_UMBRA, 0,"Umbra", 100,90,200,19,&la->ray_samp_type, 0, 0, 0, 0, "Emphasis parts that are fully shadowed");
+ uiDefButBitS(block, TOG, LA_SAMP_DITHER, 0,"Dither", 100,70,100,19,&la->ray_samp_type, 0, 0, 0, 0, "Use 2x2 dithering for sampling");
+ uiDefButBitS(block, TOG, LA_SAMP_JITTER, 0,"Noise", 200,70,100,19,&la->ray_samp_type, 0, 0, 0, 0, "Use noise for sampling");
+ } else if (la->ray_samp_method == LA_SAMP_HALTON) {
+ uiDefButF(block, NUM,0,"Threshold:", 100,90,200,19, &la->adapt_thresh, 0.0, 1.0, 100, 0, "Threshold for adaptive sampling, to control what level is considered already in shadow");
+ }
+ }
}
- else if (la->type == LA_AREA) {
- uiDefButS(block, MENU, B_REDR, "Adaptive QMC %x1|Constant QMC %x2|Constant Jittered %x0",
- 100,180,200,19, &la->ray_samp_method, 0, 0, 0, 0, "Method for generating shadow samples: Adaptive QMC is fastest");
-
+ /* also for non-shadow case, it's using light samples */
+ if(la->type == LA_AREA) {
if(la->area_shape==LA_AREA_SQUARE)
uiDefButS(block, NUM,0,"Samples:", 100,150,200,19, &la->ray_samp, 1.0, 16.0, 100, 0, "Sets the amount of samples taken extra (samp x samp)");
else if(la->area_shape==LA_AREA_CUBE)
uiDefButS(block, NUM,0,"Samples:", 100,130,200,19, &la->ray_samp, 1.0, 16.0, 100, 0, "Sets the amount of samples taken extra (samp x samp x samp)");
-
+
if (ELEM(la->area_shape, LA_AREA_RECT, LA_AREA_BOX)) {
uiDefButS(block, NUM,0,"SamplesX:", 100,150,200,19, &la->ray_samp, 1.0, 16.0, 100, 0, "Sets the amount of X samples taken extra");
uiDefButS(block, NUM,0,"SamplesY:", 100,130,200,19, &la->ray_sampy, 1.0, 16.0, 100, 0, "Sets the amount of Y samples taken extra");
if(la->area_shape==LA_AREA_BOX)
uiDefButS(block, NUM,0,"SamplesZ:", 100,110,200,19, &la->ray_sampz, 1.0, 8.0, 100, 0, "Sets the amount of Z samples taken extra");
}
-
- if (la->ray_samp_method == LA_SAMP_CONSTANT) {
- uiBlockBeginAlign(block);
- uiDefButBitS(block, TOG, LA_SAMP_UMBRA, 0,"Umbra", 100,90,200,19,&la->ray_samp_type, 0, 0, 0, 0, "Emphasis parts that are fully shadowed");
- uiDefButBitS(block, TOG, LA_SAMP_DITHER, 0,"Dither", 100,70,100,19,&la->ray_samp_type, 0, 0, 0, 0, "Use 2x2 dithering for sampling");
- uiDefButBitS(block, TOG, LA_SAMP_JITTER, 0,"Noise", 200,70,100,19,&la->ray_samp_type, 0, 0, 0, 0, "Use noise for sampling");
- } else if (la->ray_samp_method == LA_SAMP_HALTON) {
- uiDefButF(block, NUM,0,"Threshold:", 100,90,200,19, &la->adapt_thresh, 0.0, 1.0, 100, 0, "Threshold for adaptive sampling, to control what level is considered already in shadow");
- }
- }
-
-
+ }
}
else uiDefBut(block, LABEL,0," ", 100,180,200,19,NULL, 0, 0, 0, 0, "");
+ if(ELEM4(la->type, LA_AREA, LA_SPOT, LA_SUN, LA_LOCAL) && ((la->mode & LA_SHAD_RAY)||(la->mode & LA_SHAD_BUF))) {
+ short yval= 10;
+ if(la->type == LA_SPOT && (la->mode & LA_SHAD_BUF))
+ yval= -15;
+ if(la->type != LA_SPOT)
+ uiDefBut(block, LABEL, 0, "Shadow", 10,30,90,19,NULL, 0, 0, 0, 0, "");
+
+ uiBlockBeginAlign(block);
+ uiDefButF(block, COL, 0, "", 10,yval,90,19,&la->shdwr, 0, 0, 0, B_COLLAMP, "Sets the shadow color; default is black (RGB 0,0,0)");
+ }
+
}
/* yafray: adaptation of lamp_panel_spot above with yafray specific parameters */
@@ -2747,12 +2812,12 @@ static void lamp_panel_yafray(Object *ob, Lamp *la)
/* in yafray arealights always cast shadows, so ray shadow flag not needed */
/* ray shadow also not used when halo for spot enabled */
if ((la->type!=LA_AREA) && (!((la->type==LA_SPOT) && (la->mode & LA_HALO))))
- uiDefButBitS(block, TOG, LA_SHAD_RAY, B_SHADRAY,"Ray Shadow",10,180,80,19,&la->mode, 0, 0, 0, 0, "Use ray tracing for shadow");
+ uiDefButBitI(block, TOG, LA_SHAD_RAY, B_SHADRAY,"Ray Shadow",10,180,80,19,&la->mode, 0, 0, 0, 0, "Use ray tracing for shadow");
/* in yafray the regular lamp can use shadowbuffers (softlight), used by spot with halo as well */
/* to prevent clash with blender shadowbuf flag, a special flag is used for yafray */
if (la->type==LA_LOCAL) {
- uiDefButBitS(block, TOG, LA_YF_SOFT, B_SHADBUF, "Buf.Shadow",10,160,80,19,&la->mode, 0, 0, 0, 0, "Lets light produce shadows using shadow buffer");
+ uiDefButBitI(block, TOG, LA_YF_SOFT, B_SHADBUF, "Buf.Shadow",10,160,80,19,&la->mode, 0, 0, 0, 0, "Lets light produce shadows using shadow buffer");
uiDefButF(block, NUM, B_DIFF, "GloInt:", 100,155,200,19, &la->YF_glowint, 0.0, 1.0, 1, 0, "Sets light glow intensity, 0 is off");
uiDefButF(block, NUM, B_DIFF, "GloOfs:", 100,135,100,19, &la->YF_glowofs, 0.0, 2.0, 1, 0, "Sets light glow offset, the higher, the less 'peaked' the glow");
uiDefButS(block, NUM, B_DIFF, "GlowType:", 200,135,100,19, &la->YF_glowtype, 0, 1, 1, 0, "Sets light glow type");
@@ -2780,7 +2845,7 @@ static void lamp_panel_yafray(Object *ob, Lamp *la)
if (la->type==LA_SPOT) {
- uiDefButBitS(block, TOG, LA_HALO, B_LAMPREDRAW,"Halo", 10,50,80,19,&la->mode, 0, 0, 0, 0, "Renders spotlight with a volumetric halo");
+ uiDefButBitI(block, TOG, LA_HALO, B_LAMPREDRAW,"Halo", 10,50,80,19,&la->mode, 0, 0, 0, 0, "Renders spotlight with a volumetric halo");
uiBlockSetCol(block, TH_AUTO);
uiBlockBeginAlign(block);
@@ -2813,7 +2878,7 @@ static void lamp_panel_atmosphere(Object *ob, Lamp *la)
uiSetButLock(la->id.lib!=0, ERROR_LIBDATA_MESSAGE);
- uiDefButBitS(block, TOG, LA_SUN_EFFECT_SKY, REDRAWVIEW3D, "Sky", 10,205,BUTW2,20,&(la->sun_effect_type), 0, 0, 0, 0, "Apply sun light effect on sky.");
+ uiDefButBitS(block, TOG, LA_SUN_EFFECT_SKY, B_LAMPPRV, "Sky", 10,205,BUTW2,20,&(la->sun_effect_type), 0, 0, 0, 0, "Apply sun light effect on sky.");
uiDefButBitS(block, TOG, LA_SUN_EFFECT_AP, REDRAWVIEW3D, "Atmosphere", 20+BUTW2,205,BUTW2,20,&(la->sun_effect_type), 0, 0, 0, 0, "Apply sun light effect on atmosphere.");
if(la->sun_effect_type & (LA_SUN_EFFECT_SKY|LA_SUN_EFFECT_AP)){
@@ -2823,19 +2888,33 @@ static void lamp_panel_atmosphere(Object *ob, Lamp *la)
y = 180;
if(la->sun_effect_type & LA_SUN_EFFECT_SKY)
{
- uiDefButF(block, NUM, B_LAMPREDRAW, "Hor.Bright:",10,y-25,BUTW2,19, &(la->horizon_brightness), 0.00f, 20.00f, 10, 0, "Sets horizon brightness.");
- uiDefButF(block, NUM, B_LAMPREDRAW, "Hor.Spread:",10,y-50,BUTW2,19, &(la->spread), 0.00f, 10.00f, 10, 0, "Sets horizon spread.");
- uiDefButF(block, NUM, B_LAMPREDRAW, "Sun Bright:",10,y-75,BUTW2,19, &(la->sun_brightness), 0.00f, 10.0f, 10, 0, "Sets sun brightness.");
- uiDefButF(block, NUM, B_LAMPREDRAW, "Sun Size:",10,y-100,BUTW2,19, &(la->sun_size), 0.00f, 10.00f, 10, 0, "Sets sun size.");
- uiDefButF(block, NUM, B_LAMPREDRAW, "Back Light:",10,y-125,BUTW2,19, &(la->backscattered_light), -1.00f, 1.00f, 10, 0, "Sets backscatter light.");
+ uiBlockBeginAlign(block);
+ uiDefButS(block, MENU, B_LAMPPRV, "Mix %x0|Add %x1|Subtract %x3|Multiply %x2|Screen %x4|Overlay %x9|Divide %x5|Difference %x6|Darken %x7|Lighten %x8|Dodge %x10|Burn %x11|Color %x15|Value %x14|Saturation %x13|Hue %x12",
+ 10,y-25,BUTW2/2,19,
+ &la->skyblendtype, 0.0f, 0.0f, 0, 0, "Blend type for how it gets combined with sky");
+ uiDefButF(block, NUM, B_LAMPPRV, "",10+BUTW2/2,y-25,BUTW2/2,19, &(la->skyblendfac), 0.0f, 2.0f, 10, 0, "Sets blending factor with sky color");
+
+ uiBlockBeginAlign(block);
+ uiDefButS(block, MENU, B_LAMPPRV, "SMPTE %x0|REC709 %x1|CIE %x2",
+ 10,126,60,22, &la->sky_colorspace, 0.0f, 0.0f, 0, 0, "Color space");
+
+ uiDefButF(block, NUM, B_LAMPPRV, "Exp:",70,126,BUTW2-60,22, &(la->sky_exposure), 0.00f, 20.00f, 10, 0, "Exposure correction, zero is no correction.");
+
+ uiBlockBeginAlign(block);
+ uiDefButF(block, NUM, B_LAMPPRV, "Hor.Bright:",10,98,BUTW2,22, &(la->horizon_brightness), 0.00f, 20.00f, 10, 0, "Sets horizon brightness.");
+ uiDefButF(block, NUM, B_LAMPPRV, "Hor.Spread:",10,76,BUTW2,22, &(la->spread), 0.00f, 10.00f, 10, 0, "Sets horizon spread.");
+ uiDefButF(block, NUM, B_LAMPPRV, "Sun Bright:",10,54,BUTW2,22, &(la->sun_brightness), 0.00f, 10.0f, 10, 0, "Sets sun brightness.");
+ uiDefButF(block, NUM, B_LAMPPRV, "Sun Size:",10,32,BUTW2,22, &(la->sun_size), 0.00f, 10.00f, 10, 0, "Sets sun size.");
+ uiDefButF(block, NUM, B_LAMPPRV, "Back Light:",10,10,BUTW2,22, &(la->backscattered_light), -1.00f, 1.00f, 10, 0, "Sets backscatter light.");
}
if(la->sun_effect_type & LA_SUN_EFFECT_AP)
{
- uiDefButF(block, NUM, B_LAMPREDRAW, "Sun Intens.:",20+BUTW2,y-25,BUTW2,19, &(la->sun_intensity), 0.00f, 10.00f, 10, 0, "Sets sun intensity.");
- uiDefButF(block, NUM, B_LAMPREDRAW, "Inscattering:",20+BUTW2,y-50,BUTW2,19, &(la->atm_inscattering_factor), 0.00f, 1.00f, 10, 0, "In Scattering Contribution Factor.");
- uiDefButF(block, NUM, B_LAMPREDRAW, "Extinction:",20+BUTW2,y-75,BUTW2,19, &(la->atm_extinction_factor), 0.00f, 1.00f, 10, 0, "Extinction Scattering Contribution Factor.");
- uiDefButF(block, NUM, B_LAMPREDRAW, "Distance:",20+BUTW2,y-100,BUTW2,19, &(la->atm_distance_factor), 0.000f, 500.0f, 10, 0, "Scale blender distance to real distance.");
+ uiBlockBeginAlign(block);
+ uiDefButF(block, NUM, B_LAMPREDRAW, "Sun Intens.:",20+BUTW2,76,BUTW2,22, &(la->sun_intensity), 0.00f, 10.00f, 10, 0, "Sets sun intensity.");
+ uiDefButF(block, NUM, B_LAMPREDRAW, "Inscattering:",20+BUTW2,54,BUTW2,22, &(la->atm_inscattering_factor), 0.00f, 1.00f, 10, 0, "In Scattering Contribution Factor.");
+ uiDefButF(block, NUM, B_LAMPREDRAW, "Extinction:",20+BUTW2,32,BUTW2,22, &(la->atm_extinction_factor), 0.00f, 1.00f, 10, 0, "Extinction Scattering Contribution Factor.");
+ uiDefButF(block, NUM, B_LAMPREDRAW, "Distance:",20+BUTW2,10,BUTW2,22, &(la->atm_distance_factor), 0.000f, 500.0f, 10, 0, "Scale blender distance to real distance.");
}
}
@@ -2900,15 +2979,15 @@ static void lamp_panel_lamp(Object *ob, Lamp *la)
uiBlockSetCol(block, TH_BUT_SETTING1);
uiDefButS(block, MENU, B_LAMPREDRAW, "Falloff %t|Constant %x0|Inverse Linear %x1|Inverse Square %x2|Custom Curve %x3|Lin/Quad Weighted %x4|",
10,150,100,19, &la->falloff_type, 0,0,0,0, "Lamp falloff - intensity decay with distance");
- uiDefButBitS(block, TOG, LA_SPHERE, B_LAMPPRV,"Sphere", 10,130,100,19,&la->mode, 0, 0, 0, 0, "Sets light intensity to zero for objects beyond the distance value");
+ uiDefButBitI(block, TOG, LA_SPHERE, B_LAMPPRV,"Sphere", 10,130,100,19,&la->mode, 0, 0, 0, 0, "Sets light intensity to zero for objects beyond the distance value");
}
uiBlockBeginAlign(block);
uiBlockSetCol(block, TH_BUT_SETTING1);
- uiDefButBitS(block, TOG, LA_LAYER, 0,"Layer", 10,70,100,19,&la->mode, 0, 0, 0, 0, "Illuminates objects in the same layer as the lamp only");
- uiDefButBitS(block, TOG, LA_NEG, B_LAMPPRV,"Negative", 10,50,100,19,&la->mode, 0, 0, 0, 0, "Sets lamp to cast negative light");
- uiDefButBitS(block, TOG, LA_NO_DIFF, B_LAMPPRV,"No Diffuse", 10,30,100,19,&la->mode, 0, 0, 0, 0, "Disables diffuse shading of material illuminated by this lamp");
- uiDefButBitS(block, TOG, LA_NO_SPEC, B_LAMPPRV,"No Specular", 10,10,100,19,&la->mode, 0, 0, 0, 0, "Disables specular shading of material illuminated by this lamp");
+ uiDefButBitI(block, TOG, LA_LAYER, 0,"Layer", 10,70,100,19,&la->mode, 0, 0, 0, 0, "Illuminates objects in the same layer as the lamp only");
+ uiDefButBitI(block, TOG, LA_NEG, B_LAMPPRV,"Negative", 10,50,100,19,&la->mode, 0, 0, 0, 0, "Sets lamp to cast negative light");
+ uiDefButBitI(block, TOG, LA_NO_DIFF, B_LAMPPRV,"No Diffuse", 10,30,100,19,&la->mode, 0, 0, 0, 0, "Disables diffuse shading of material illuminated by this lamp");
+ uiDefButBitI(block, TOG, LA_NO_SPEC, B_LAMPPRV,"No Specular", 10,10,100,19,&la->mode, 0, 0, 0, 0, "Disables specular shading of material illuminated by this lamp");
uiBlockEndAlign(block);
uiBlockSetCol(block, TH_AUTO);
@@ -2921,16 +3000,18 @@ static void lamp_panel_lamp(Object *ob, Lamp *la)
uiBlockEndAlign(block);
uiDefButF(block, COL, B_LAMPPRV, "", 120,52,180,24, &la->r, 0, 0, 0, B_COLLAMP, "");
+ uiBlockEndAlign(block);
- uiBlockBeginAlign(block);
if (ELEM(la->type, LA_LOCAL, LA_SPOT) && (la->falloff_type == LA_FALLOFF_SLIDERS)) {
+ uiBlockBeginAlign(block);
uiDefButF(block, NUMSLI,B_LAMPPRV,"Linear ", 120,30,180,19,&la->att1, 0.0, 1.0, 0, 0, "Set the linear distance attenuation for a Lin/Quad Weighted lamp");
uiDefButF(block, NUMSLI,B_LAMPPRV,"Quad ", 120,10,180,19,&la->att2, 0.0, 1.0, 0, 0, "Set the quadratic distance attenuation for a Lin/Quad Weighted lamp");
}
else if(la->type==LA_AREA) {
if(la->k==0.0) la->k= 1.0;
- uiDefButF(block, NUMSLI,0,"Gamma ", 120,10,180,19,&la->k, 0.001, 2.0, 100, 0, "Set the light gamma correction value");
+ uiDefButF(block, NUMSLI,B_LAMPPRV,"Gamma ", 120,10,180,19,&la->k, 0.001, 2.0, 100, 0, "Set the light gamma correction value");
}
+
}
@@ -3523,7 +3604,7 @@ static void material_panel_texture(Object *ob, Material *ma)
ID *id;
ParticleSystem *psys;
int loos, psys_mapto=0;
- int a;
+ int a, num_mtex;
char str[64], *strp;
block= uiNewBlock(&curarea->uiblocks, "material_panel_texture", UI_EMBOSS, UI_HELV, curarea->win);
@@ -3539,7 +3620,8 @@ static void material_panel_texture(Object *ob, Material *ma)
uiBlockSetCol(block, TH_BUT_NEUTRAL);
uiBlockBeginAlign(block);
- for(a= 0; a<MAX_MTEX; a++) {
+ num_mtex= texture_channels_num_display(ma->mtex);
+ for(a= 0; a<num_mtex; a++) {
mtex= ma->mtex[a];
if(mtex && mtex->tex) splitIDname(mtex->tex->id.name+2, str, &loos);
else strcpy(str, "");
@@ -3553,10 +3635,10 @@ static void material_panel_texture(Object *ob, Material *ma)
/* SEPTEX */
uiBlockSetCol(block, TH_AUTO);
- for(a= 0; a<MAX_MTEX; a++) {
+ for(a= 0; a<num_mtex; a++) {
mtex= ma->mtex[a];
if(mtex && mtex->tex) {
- but=uiDefIconButBitS(block, ICONTOGN, 1<<a, B_MATPRV, ICON_CHECKBOX_HLT-1, -20, 180-18*a, 28, 20, &ma->septex, 0.0, 0.0, 0, 0, "Click to disable or enable this texture channel");
+ but=uiDefIconButBitI(block, ICONTOGN, 1<<a, B_MATPRV, ICON_CHECKBOX_HLT-1, -20, 180-18*a, 28, 20, &ma->septex, 0.0, 0.0, 0, 0, "Click to disable or enable this texture channel");
if(psys_mapto && ma->mtex[a]->mapto & MAP_PA_IVEL)
uiButSetFunc(but, particle_recalc_material, ma, NULL);
@@ -4091,13 +4173,14 @@ static void material_panel_material(Material *ma)
uiBlockSetCol(block, TH_BUT_SETTING1);
uiDefButBitI(block, TOG, MA_VERTEXCOL, B_MAT_VCOL_LIGHT, "VCol Light", 8,166,74,20, &(ma->mode), 0, 0, 0, 0, "Adds vertex colors as extra light");
uiDefButBitI(block, TOG, MA_VERTEXCOLP, B_MAT_VCOL_PAINT, "VCol Paint", 82,166,74,20, &(ma->mode), 0, 0, 0, 0, "Replaces material's colors with vertex colors");
- uiDefButBitI(block, TOG, MA_FACETEXTURE, B_REDR, "TexFace", 156,166,64,20, &(ma->mode), 0, 0, 0, 0, "Sets UV-Editor assigned texture as color and texture info for faces");
- if (ma->mode & MA_FACETEXTURE) uiDefButBitI(block, TOG, MA_FACETEXTURE_ALPHA, B_REDR, "A", 220,166,20,20, &(ma->mode), 0, 0, 0, 0, "Use alpha channel in 'TexFace' assigned images");
- uiDefButBitI(block, TOG, MA_SHLESS, B_MATPRV, "Shadeless", 240,166,63,20, &(ma->mode), 0, 0, 0, 0, "Makes material insensitive to light or shadow");
+ uiDefButBitI(block, TOG, MA_FACETEXTURE, B_MATPRV, "TexFace", 156,166,60,20, &(ma->mode), 0, 0, 0, 0, "Sets UV-Editor assigned texture as color and texture info for faces");
+ uiDefButBitI(block, TOG, MA_FACETEXTURE_ALPHA, B_MATPRV, "A", 216,166,20,20, &(ma->mode), 0, 0, 0, 0, "Use alpha channel in 'TexFace' assigned images");
+ uiDefButBitI(block, TOG, MA_SHLESS, B_MATPRV, "Shadeless", 236,166,67,20, &(ma->mode), 0, 0, 0, 0, "Makes material insensitive to light or shadow");
- uiDefButBitI(block, TOG, MA_NOMIST, B_NOP, "No Mist", 8,146,74,20, &(ma->mode), 0, 0, 0, 0, "Sets the material to ignore mist values");
+ uiDefButBitI(block, TOG, MA_NOMIST, B_MATPRV, "No Mist", 8,146,74,20, &(ma->mode), 0, 0, 0, 0, "Sets the material to ignore mist values");
uiDefButBitI(block, TOG, MA_ENV, B_MATPRV, "Env", 82,146,74,20, &(ma->mode), 0, 0, 0, 0, "Causes faces to render with alpha zero: allows sky/backdrop to show through (only for solid faces)");
- uiDefButF(block, NUM, B_NOP, "Shad A ", 156,146,147,19, &ma->shad_alpha, 0.001, 1.0f, 100, 0, "Shadow casting alpha, only in use for Irregular Shadowbuffer");
+ uiDefButBitS(block, TOG, MA_OBCOLOR, B_MATPRV, "ObColor", 156,146,60,20, &(ma->shade_flag), 0, 0, 0, 0, "Modulate the result with a per object color");
+ uiDefButF(block, NUM, B_NOP, "Shad A ", 216,146,87,20, &ma->shad_alpha, 0.001, 1.0f, 10, 2, "Shadow casting alpha, only in use for Irregular Shadowbuffer");
}
uiBlockSetCol(block, TH_AUTO);
uiBlockBeginAlign(block);
diff --git a/source/blender/src/cre/license_key.c b/source/blender/src/cre/license_key.c
deleted file mode 100644
index 37b67d44bb6..00000000000
--- a/source/blender/src/cre/license_key.c
+++ /dev/null
@@ -1,194 +0,0 @@
-/**
- * $Id$
- *
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
- * All rights reserved.
- *
- * The Original Code is: all of this file.
- *
- * Contributor(s): none yet.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-#include "license_key.h"
-#include "keyed_functions.h"
-#include "BKE_utildefines.h"
-#include "BIF_screen.h" // splash
-#include "BIF_toolbox.h"
-#include <stdio.h>
-#include <string.h>
-#include "BLO_readfile.h"
-//#include "BLO_keyStore.h"
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-int LICENSE_KEY_VALID = TRUE;
-int I_AM_PUBLISHER = TRUE;
-
-// Python stuff
-
-#include "Python.h"
-#include "marshal.h"
-#include "compile.h" /* to give us PyCodeObject */
-#include "eval.h" /* prototype for PyEval_EvalCode */
-
-#include "BPY_extern.h"
-#include "IMB_imbuf.h"
-
-Fptr g_functab[PYKEY_TABLEN];
-Fptr g_ptrtab[PYKEY_TABLEN];
-
-static int g_seed[3] = PYKEY_SEED;
-static PyObject *g_module_self;
-static PyObject *g_main;
-
-
-// end Python stuff
-
-// **************** PYTHON STUFF **************************
-/* ----------------------------------------------------- */
-/* this is the dummy functions to demonstrate */
-
-int sticky_shoes(void *vp)
-{
-#ifndef NDEBUG
- printf("feature not enabled: Buy our Key NOW!\n");
-#endif
- return 0;
-}
-
-/*
-int key_func1(void *vp) {
- printf("function 1 called\n");
-}
-
-*/
-int key_return_true(void *vp) {
-#ifndef NDEBUG
- printf("function 2 called (return true)\n");
-#endif
- return 1;
-}
-
-/* ----------------------------------------------------- */
-
-/* Declarations for objects of type Fplist */
-
-
-#ifndef NDEBUG
-void feature1(void)
-{
- Fptr f;
-
- printf("feature 2 called\n");
- f = g_ptrtab[KEY_FUNC2];
- if (f) f(0);
-}
-
-void feature2(void)
-{
- Fptr f;
-
- printf("feature 3 called\n");
- f = g_ptrtab[KEY_FUNC3];
- if (f) f(0);
-}
-
-#endif
-
-
-/* Initialization function for the module (*must* be called initprot) */
-
-static void init_ftable(void) // initializes functiontable
-{
- int i;
-
- g_functab[0] = &key_func1;
-
- for (i = 1; i < PYKEY_TABLEN; i++)
- {
- g_functab[i] = &sticky_shoes;
- }
-
- // for debugging perposes
- /*
- for (i = 0; i < PYKEY_TABLEN; i++)
- {
- g_functab[i] = (Fptr *) (i + 100);
- }
- */
-}
-
-
-static void init_ptable(void) // initializes functiontable
-{
- int i;
-
- for (i = 0; i < PYKEY_TABLEN; i++)
- {
- g_ptrtab[i] = &sticky_shoes;
- }
-}
-
-
-#ifdef NDEBUG
-static void print_ptable(void)
-{
- int i;
-
- for (i = 0; i < PYKEY_TABLEN; i++)
- {
- printf ("index[%02d] = %08x\n", i, g_ptrtab[i]);
- }
-}
-#endif
-
-static void insertname(PyObject *m,PyObject *p, char *name)
-{
-}
-
-/* initialisation */
-static void initprot()
-{
- init_ftable(); // malloc
- init_ptable(); // malloc
-}
-
-// ******************************* KEY STUFF *********************
-
-void create_key_name(char * keyname)
-{
-}
-
-void checkhome()
-{
- initprot(); // initialize module and function tables
-
-}
-
-void SHOW_LICENSE_KEY(void)
-{
-}
-
-void loadKeyboard(char * name)
-{
-}
diff --git a/source/blender/src/drawaction.c b/source/blender/src/drawaction.c
index 0782ccfc7ee..0d2c8dce43d 100644
--- a/source/blender/src/drawaction.c
+++ b/source/blender/src/drawaction.c
@@ -78,6 +78,7 @@
#include "BIF_drawgpencil.h"
#include "BIF_gl.h"
#include "BIF_glutil.h"
+#include "BIF_keyframing.h"
#include "BIF_resources.h"
#include "BIF_screen.h"
#include "BIF_mywindow.h"
@@ -646,7 +647,7 @@ static void draw_channel_names(void)
case SPACE_VIEW3D:
{
/* this shouldn't cause any overflow... */
- sprintf(name, "3DView: %s", view3d_get_name(sa->spacedata.first));
+ sprintf(name, "3DView[%02d]:%s", sa->win, view3d_get_name(sa->spacedata.first));
special= ICON_VIEW3D;
}
break;
@@ -659,7 +660,7 @@ static void draw_channel_names(void)
sprintf(treetype, "Composite");
else
sprintf(treetype, "Material");
- sprintf(name, "Nodes: %s", treetype);
+ sprintf(name, "Nodes[%02d]:%s", sa->win, treetype);
special= ICON_NODE;
}
@@ -677,15 +678,27 @@ static void draw_channel_names(void)
default: sprintf(imgpreview, "Sequence"); break;
}
- sprintf(name, "Sequencer: %s", imgpreview);
+ sprintf(name, "Sequencer[%02d]:%s", sa->win, imgpreview);
special= ICON_SEQUENCE;
}
break;
+ case SPACE_IMAGE:
+ {
+ SpaceImage *sima= sa->spacedata.first;
+
+ if (sima->image)
+ sprintf(name, "Image[%02d]:%s", sa->win, sima->image->id.name+2);
+ else
+ sprintf(name, "Image[%02d]:<None>", sa->win);
+
+ special= ICON_IMAGE_COL;
+ }
+ break;
default:
{
- sprintf(name, "<Unknown GP-Data Source>");
+ sprintf(name, "[%02d]<Unknown GP-Data Source>", sa->win);
special= -1;
}
break;
@@ -1442,8 +1455,15 @@ static void add_bezt_to_keyblockslist(ListBase *blocks, IpoCurve *icu, int index
if (IS_EQ(beztn->vec[1][1], beztn->vec[0][1])==0) return;
if (IS_EQ(prev->vec[1][1], prev->vec[2][1])==0) return;
- /* try to find a keyblock that starts on the previous beztriple */
- for (ab= blocks->last; ab; ab= ab->prev) {
+ /* try to find a keyblock that starts on the previous beztriple
+ * Note: we can't search from end to try to optimise this as it causes errors there's
+ * an A ___ B |---| B situation
+ */
+ // FIXME: here there is a bug where we are trying to get the summary for the following channels
+ // A|--------------|A ______________ B|--------------|B
+ // A|------------------------------------------------|A
+ // A|----|A|---|A|-----------------------------------|A
+ for (ab= blocks->first; ab; ab= ab->next) {
/* check if alter existing block or add new block */
if (ab->start == prev->vec[1][0]) {
/* set selection status and 'touched' status */
@@ -1457,7 +1477,7 @@ static void add_bezt_to_keyblockslist(ListBase *blocks, IpoCurve *icu, int index
/* add new block */
abn= MEM_callocN(sizeof(ActKeyBlock), "ActKeyBlock");
- if (ab) BLI_insertlinkafter(blocks, ab, abn);
+ if (ab) BLI_insertlinkbefore(blocks, ab, abn);
else BLI_addtail(blocks, abn);
abn->start= prev->vec[1][0];
@@ -1755,13 +1775,14 @@ void icu_to_keylist(IpoCurve *icu, ListBase *keys, ListBase *blocks, ActKeysInc
ak->modified = 0;
ak->totcurve += 1;
}
+
+ if (ak == ak2)
+ break;
+
if (ak2->modified) {
ak2->modified = 0;
ak2->totcurve += 1;
}
-
- if (ak == ak2)
- break;
}
}
if (blocks) {
@@ -1770,13 +1791,14 @@ void icu_to_keylist(IpoCurve *icu, ListBase *keys, ListBase *blocks, ActKeysInc
ab->modified = 0;
ab->totcurve += 1;
}
+
+ if (ab == ab2)
+ break;
+
if (ab2->modified) {
ab2->modified = 0;
ab2->totcurve += 1;
}
-
- if (ab == ab2)
- break;
}
}
}
diff --git a/source/blender/src/drawarmature.c b/source/blender/src/drawarmature.c
index 6d78b21dfbb..f050a730380 100644
--- a/source/blender/src/drawarmature.c
+++ b/source/blender/src/drawarmature.c
@@ -1301,7 +1301,7 @@ static void pchan_draw_IK_root_lines(bPoseChannel *pchan, short only_temp)
bPoseChannel *parchan;
for (con= pchan->constraints.first; con; con= con->next) {
- if (con->type == CONSTRAINT_TYPE_KINEMATIC) {
+ if (con->type == CONSTRAINT_TYPE_KINEMATIC && (con->enforce!=0.0)) {
bKinematicConstraint *data = (bKinematicConstraint*)con->data;
int segcount= 0;
@@ -2505,6 +2505,9 @@ int draw_armature(Base *base, int dt, int flag)
Object *ob= base->object;
bArmature *arm= ob->data;
int retval= 0;
+
+ if(G.f & G_SIMULATION)
+ return 1;
if(dt>OB_WIRE && arm->drawtype!=ARM_LINE) {
/* we use color for solid lighting */
@@ -2570,3 +2573,4 @@ int draw_armature(Base *base, int dt, int flag)
/* *************** END Armature drawing ******************* */
+
diff --git a/source/blender/src/drawgpencil.c b/source/blender/src/drawgpencil.c
index ee28049e2c0..b38bd6b2b63 100644
--- a/source/blender/src/drawgpencil.c
+++ b/source/blender/src/drawgpencil.c
@@ -37,6 +37,9 @@
#include "MEM_guardedalloc.h"
+#include "IMB_imbuf.h"
+#include "IMB_imbuf_types.h"
+
#include "BMF_Api.h"
#include "BLI_arithb.h"
@@ -57,6 +60,7 @@
#include "BIF_gl.h"
#include "BIF_glutil.h"
#include "BIF_butspace.h"
+#include "BIF_drawseq.h"
#include "BIF_graphics.h"
#include "BIF_interface.h"
#include "BIF_mywindow.h"
@@ -76,7 +80,7 @@
#include "blendef.h"
#include "butspace.h"
-#include "PIL_time.h" /* sleep */
+#include "PIL_time.h"
#include "mydevice.h"
/* ************************************************** */
@@ -94,6 +98,8 @@
void gp_ui_activelayer_cb (void *gpd, void *gpl)
{
gpencil_layer_setactive(gpd, gpl);
+
+ scrarea_queue_winredraw(curarea);
allqueue(REDRAWACTION, 0);
}
@@ -105,6 +111,8 @@ void gp_ui_renamelayer_cb (void *gpd_arg, void *gpl_arg)
BLI_uniquename(&gpd->layers, gpl, "GP_Layer", offsetof(bGPDlayer, info[0]), 128);
gpencil_layer_setactive(gpd, gpl);
+
+ scrarea_queue_winredraw(curarea);
allqueue(REDRAWACTION, 0);
}
@@ -112,6 +120,8 @@ void gp_ui_renamelayer_cb (void *gpd_arg, void *gpl_arg)
void gp_ui_addlayer_cb (void *gpd, void *dummy)
{
gpencil_layer_addnew(gpd);
+
+ scrarea_queue_winredraw(curarea);
allqueue(REDRAWACTION, 0);
}
@@ -119,6 +129,8 @@ void gp_ui_addlayer_cb (void *gpd, void *dummy)
void gp_ui_dellayer_cb (void *gpd, void *dummy)
{
gpencil_layer_delactive(gpd);
+
+ scrarea_queue_winredraw(curarea);
allqueue(REDRAWACTION, 0);
}
@@ -129,6 +141,8 @@ void gp_ui_delstroke_cb (void *gpd, void *gpl)
gpencil_layer_setactive(gpd, gpl);
gpencil_frame_delete_laststroke(gpf);
+
+ scrarea_queue_winredraw(curarea);
}
/* delete active frame of active layer */
@@ -139,9 +153,19 @@ void gp_ui_delframe_cb (void *gpd, void *gpl)
gpencil_layer_setactive(gpd, gpl);
gpencil_layer_delframe(gpl, gpf);
+ scrarea_queue_winredraw(curarea);
allqueue(REDRAWACTION, 0);
}
+/* convert the active layer to geometry */
+void gp_ui_convertlayer_cb (void *gpd, void *gpl)
+{
+ gpencil_layer_setactive(gpd, gpl);
+ gpencil_convert_menu();
+
+ scrarea_queue_winredraw(curarea);
+}
+
/* ------- Drawing Code ------- */
/* draw the controls for a given layer */
@@ -163,7 +187,7 @@ static void gp_drawui_layer (uiBlock *block, bGPdata *gpd, bGPDlayer *gpl, short
/* rounded header */
if (active) uiBlockSetCol(block, TH_BUT_ACTION);
rb_col= (active)?-20:20;
- uiDefBut(block, ROUNDBOX, B_DIFF, "", *xco-8, *yco-2, width, 24, NULL, 5.0, 0.0, 15 , rb_col-20, "");
+ uiDefBut(block, ROUNDBOX, B_REDR, "", *xco-8, *yco-2, width, 24, NULL, 5.0, 0.0, 15 , rb_col-20, "");
if (active) uiBlockSetCol(block, TH_AUTO);
/* lock toggle */
@@ -174,7 +198,7 @@ static void gp_drawui_layer (uiBlock *block, bGPdata *gpd, bGPDlayer *gpl, short
if (gpl->flag & (GP_LAYER_LOCKED|GP_LAYER_HIDE)) {
char name[256]; /* gpl->info is 128, but we need space for 'locked/hidden' as well */
- height= 26;
+ height= 0;
/* visibility button (only if hidden but not locked!) */
if ((gpl->flag & GP_LAYER_HIDE) && !(gpl->flag & GP_LAYER_LOCKED))
@@ -246,8 +270,14 @@ static void gp_drawui_layer (uiBlock *block, bGPdata *gpd, bGPDlayer *gpl, short
/* options */
uiBlockBeginAlign(block);
- but= uiDefBut(block, BUT, B_REDR, "Del Active Frame", *xco+160, *yco-75, 140, 20, NULL, 0, 0, 0, 0, "Erases the the active frame for this layer (Hotkey = Alt-XKEY/DEL)");
- uiButSetFunc(but, gp_ui_delframe_cb, gpd, gpl);
+ if (curarea->spacetype == SPACE_VIEW3D) {
+ but= uiDefBut(block, BUT, B_REDR, "Convert to...", *xco+160, *yco-75, 140, 20, NULL, 0, 0, 0, 0, "Converts this layer's strokes to geometry (Hotkey = Alt-Shift-C)");
+ uiButSetFunc(but, gp_ui_convertlayer_cb, gpd, gpl);
+ }
+ else {
+ but= uiDefBut(block, BUT, B_REDR, "Del Active Frame", *xco+160, *yco-75, 140, 20, NULL, 0, 0, 0, 0, "Erases the the active frame for this layer (Hotkey = Alt-XKEY/DEL)");
+ uiButSetFunc(but, gp_ui_delframe_cb, gpd, gpl);
+ }
but= uiDefBut(block, BUT, B_REDR, "Del Last Stroke", *xco+160, *yco-95, 140, 20, NULL, 0, 0, 0, 0, "Erases the last stroke from the active frame (Hotkey = Alt-XKEY/DEL)");
uiButSetFunc(but, gp_ui_delstroke_cb, gpd, gpl);
@@ -294,7 +324,7 @@ short draw_gpencil_panel (uiBlock *block, bGPdata *gpd, ScrArea *sa)
/* 'view align' button (naming depends on context) */
if (sa->spacetype == SPACE_VIEW3D)
uiDefButBitI(block, TOG, GP_DATA_VIEWALIGN, B_REDR, "Sketch in 3D", 170, 205, 150, 20, &gpd->flag, 0, 0, 0, 0, "New strokes are added in 3D-space");
- else if (sa->spacetype != SPACE_SEQ) /* not available for sequencer yet */
+ else
uiDefButBitI(block, TOG, GP_DATA_VIEWALIGN, B_REDR, "Stick to View", 170, 205, 150, 20, &gpd->flag, 0, 0, 0, 0, "New strokes are added on 2d-canvas");
}
@@ -317,8 +347,12 @@ enum {
GP_DRAWDATA_NOSTATUS = (1<<0), /* don't draw status info */
GP_DRAWDATA_ONLY3D = (1<<1), /* only draw 3d-strokes */
GP_DRAWDATA_ONLYV2D = (1<<2), /* only draw 'canvas' strokes */
+ GP_DRAWDATA_ONLYI2D = (1<<3), /* only draw 'image' strokes */
};
+/* thickness above which we should use special drawing */
+#define GP_DRAWTHICKNESS_SPECIAL 3
+
/* ----- Tool Buffer Drawing ------ */
/* draw stroke defined in buffer (simple ogl lines/points for now, as dotted lines) */
@@ -343,23 +377,13 @@ static void gp_draw_stroke_buffer (tGPspoint *points, int totpoints, short thick
glEnd();
}
else if (sflag & GP_STROKE_ERASER) {
- /* draw stroke curve - just standard thickness */
- setlinestyle(4);
- glLineWidth(1.0f);
-
- glBegin(GL_LINE_STRIP);
- for (i=0, pt=points; i < totpoints && pt; i++, pt++) {
- glVertex2f(pt->x, pt->y);
- }
- glEnd();
-
- setlinestyle(0);
+ /* don't draw stroke at all! */
}
else {
float oldpressure = 0.0f;
/* draw stroke curve */
- setlinestyle(2);
+ if (G.f & G_DEBUG) setlinestyle(2);
glBegin(GL_LINE_STRIP);
for (i=0, pt=points; i < totpoints && pt; i++, pt++) {
@@ -377,14 +401,14 @@ static void gp_draw_stroke_buffer (tGPspoint *points, int totpoints, short thick
}
glEnd();
- setlinestyle(0);
+ if (G.f & G_DEBUG) setlinestyle(0);
}
}
/* ----- Existing Strokes Drawing (3D and Point) ------ */
/* draw a given stroke - just a single dot (only one point) */
-static void gp_draw_stroke_point (bGPDspoint *points, short sflag, int winx, int winy)
+static void gp_draw_stroke_point (bGPDspoint *points, short thickness, short sflag, int offsx, int offsy, int winx, int winy)
{
/* draw point */
if (sflag & GP_STROKE_3DSPACE) {
@@ -392,18 +416,42 @@ static void gp_draw_stroke_point (bGPDspoint *points, short sflag, int winx, int
glVertex3f(points->x, points->y, points->z);
glEnd();
}
- else if (sflag & GP_STROKE_2DSPACE) {
- glBegin(GL_POINTS);
- glVertex2f(points->x, points->y);
- glEnd();
- }
else {
- const float x= (points->x / 1000 * winx);
- const float y= (points->y / 1000 * winy);
+ float co[2];
- glBegin(GL_POINTS);
- glVertex2f(x, y);
- glEnd();
+ /* get coordinates of point */
+ if (sflag & GP_STROKE_2DSPACE) {
+ co[0]= points->x;
+ co[1]= points->y;
+ }
+ else if (sflag & GP_STROKE_2DIMAGE) {
+ co[0]= (points->x * winx) + offsx;
+ co[1]= (points->y * winy) + offsy;
+ }
+ else {
+ co[0]= (points->x / 1000 * winx);
+ co[1]= (points->y / 1000 * winy);
+ }
+
+ /* if thickness is less than GP_DRAWTHICKNESS_SPECIAL, simple opengl point will do */
+ if (thickness < GP_DRAWTHICKNESS_SPECIAL) {
+ glBegin(GL_POINTS);
+ glVertex2fv(co);
+ glEnd();
+ }
+ else {
+ /* draw filled circle as is done in circf (but without the matrix push/pops which screwed things up) */
+ GLUquadricObj *qobj = gluNewQuadric();
+
+ gluQuadricDrawStyle(qobj, GLU_FILL);
+
+ /* need to translate drawing position, but must reset after too! */
+ glTranslatef(co[0], co[1], 0.);
+ gluDisk(qobj, 0.0, thickness, 32, 1);
+ glTranslatef(-co[0], -co[1], 0.);
+
+ gluDeleteQuadric(qobj);
+ }
}
}
@@ -443,10 +491,15 @@ static void gp_draw_stroke_3d (bGPDspoint *points, int totpoints, short thicknes
/* ----- Fancy 2D-Stroke Drawing ------ */
/* draw a given stroke in 2d */
-static void gp_draw_stroke (bGPDspoint *points, int totpoints, short thickness, short dflag, short sflag, short debug, int winx, int winy)
+static void gp_draw_stroke (bGPDspoint *points, int totpoints, short thickness, short dflag, short sflag,
+ short debug, int offsx, int offsy, int winx, int winy)
{
- /* if thickness is less than 3, 'smooth' opengl lines look better */
- if ((thickness < 3) || (G.rt==0)) {
+ /* if thickness is less than GP_DRAWTHICKNESS_SPECIAL, 'smooth' opengl lines look better
+ * - but NOT if Image Editor 'image-based' stroke
+ */
+ if ( (thickness < GP_DRAWTHICKNESS_SPECIAL) ||
+ ((curarea->spacetype==SPACE_IMAGE) && (dflag & GP_DRAWDATA_ONLYV2D)) )
+ {
bGPDspoint *pt;
int i;
@@ -455,6 +508,12 @@ static void gp_draw_stroke (bGPDspoint *points, int totpoints, short thickness,
if (sflag & GP_STROKE_2DSPACE) {
glVertex2f(pt->x, pt->y);
}
+ else if (sflag & GP_STROKE_2DIMAGE) {
+ const float x= (pt->x * winx) + offsx;
+ const float y= (pt->y * winy) + offsy;
+
+ glVertex2f(x, y);
+ }
else {
const float x= (pt->x / 1000 * winx);
const float y= (pt->y / 1000 * winy);
@@ -464,26 +523,37 @@ static void gp_draw_stroke (bGPDspoint *points, int totpoints, short thickness,
}
glEnd();
}
- else { /* tesselation code: currently only enabled with rt != 0 */
+
+ /* tesselation code - draw stroke as series of connected quads with connection
+ * edges rotated to minimise shrinking artifacts, and rounded endcaps
+ */
+ else
+ {
bGPDspoint *pt1, *pt2;
- float p0[2], p1[2], pm[2];
+ float pm[2];
int i;
glShadeModel(GL_FLAT);
- glBegin(GL_QUAD_STRIP);
+ glBegin(GL_QUADS);
for (i=0, pt1=points, pt2=points+1; i < (totpoints-1); i++, pt1++, pt2++) {
float s0[2], s1[2]; /* segment 'center' points */
float t0[2], t1[2]; /* tesselated coordinates */
float m1[2], m2[2]; /* gradient and normal */
- float pthick, dist; /* thickness at segment point, and length of segment */
- float sminorang; /* minor angle between strokes */
+ float mt[2], sc[2]; /* gradient for thickness, point for end-cap */
+ float pthick; /* thickness at segment point */
/* get x and y coordinates from points */
if (sflag & GP_STROKE_2DSPACE) {
s0[0]= pt1->x; s0[1]= pt1->y;
s1[0]= pt2->x; s1[1]= pt2->y;
}
+ else if (sflag & GP_STROKE_2DIMAGE) {
+ s0[0]= (pt1->x * winx) + offsx;
+ s0[1]= (pt1->y * winy) + offsy;
+ s1[0]= (pt2->x * winx) + offsx;
+ s1[1]= (pt2->y * winy) + offsy;
+ }
else {
s0[0]= (pt1->x / 1000 * winx);
s0[1]= (pt1->y / 1000 * winy);
@@ -494,91 +564,123 @@ static void gp_draw_stroke (bGPDspoint *points, int totpoints, short thickness,
/* calculate gradient and normal - 'angle'=(ny/nx) */
m1[1]= s1[1] - s0[1];
m1[0]= s1[0] - s0[0];
- dist = Vec2Lenf(s0, s1);
- m2[1]= -(m1[0]) / dist;
- m2[0]= m1[1] / dist;
+ Normalize2(m1);
+ m2[1]= -m1[0];
+ m2[0]= m1[1];
+
+ /* always use pressure from first point here */
+ pthick= (pt1->pressure * thickness);
- /* if the first segment, initialise the first segment using segment's normal */
- if (i == 0) {
- pthick= (pt1->pressure * thickness);
+ /* if the first segment, start of segment is segment's normal */
+ if (i == 0) {
+ /* draw start cap first
+ * - make points slightly closer to center (about halfway across)
+ */
+ mt[0]= m2[0] * pthick * 0.5;
+ mt[1]= m2[1] * pthick * 0.5;
+ sc[0]= s0[0] - (m1[0] * pthick * 0.75);
+ sc[1]= s0[1] - (m1[1] * pthick * 0.75);
+
+ t0[0]= sc[0] - mt[0];
+ t0[1]= sc[1] - mt[1];
+ t1[0]= sc[0] + mt[0];
+ t1[1]= sc[1] + mt[1];
- // TODO: also draw/do a round end-cap first
+ glVertex2fv(t0);
+ glVertex2fv(t1);
- p0[0]= s0[0] - (pthick * m2[0]);
- p0[1]= s0[1] - (pthick * m2[1]);
- p1[0]= s1[0] + (pthick * m2[0]);
- p1[1]= s1[1] + (pthick * m2[1]);
+ /* calculate points for start of segment */
+ mt[0]= m2[0] * pthick;
+ mt[1]= m2[1] * pthick;
- Vec2Copyf(pm, m1);
+ t0[0]= s0[0] - mt[0];
+ t0[1]= s0[1] - mt[1];
+ t1[0]= s0[0] + mt[0];
+ t1[1]= s0[1] + mt[1];
+
+ /* draw this line twice (first to finish off start cap, then for stroke) */
+ glVertex2fv(t1);
+ glVertex2fv(t0);
+ glVertex2fv(t0);
+ glVertex2fv(t1);
}
-
- /* if the minor angle between the current segment and the previous one is less than 90 degrees */
- if (i)
- sminorang= NormalizedVecAngle2_2D(pm, m1);
- else
- sminorang= 0.0f;
-
- if ((IS_EQ(sminorang, 0)==0) && (abs(sminorang) < M_PI_2) )
- {
- float closep[2];
+ /* if not the first segment, use bisector of angle between segments */
+ else {
+ float mb[2]; /* bisector normal */
+ float athick, dfac; /* actual thickness, difference between thicknesses */
- /* recalculate startpoint of segment, where the new start-line:
- * - starts a new gl-quad-strip
- * - uses the vert of old startpoint closer to our endpoint
- * - distance between new startpoints = distance between old startpoints
- * - new startpoints occur on same gradient as old segment does (has potential for some 'minor' overlap, but ok)
+ /* calculate gradient of bisector (as average of normals) */
+ mb[0]= (pm[0] + m2[0]) / 2;
+ mb[1]= (pm[1] + m2[1]) / 2;
+ Normalize2(mb);
+
+ /* calculate gradient to apply
+ * - as basis, use just pthick * bisector gradient
+ * - if cross-section not as thick as it should be, add extra padding to fix it
*/
+ mt[0]= mb[0] * pthick;
+ mt[1]= mb[1] * pthick;
+ athick= Vec2Length(mt);
+ dfac= pthick - (athick * 2);
+ if ( ((athick * 2) < pthick) && (IS_EQ(athick, pthick)==0) )
+ {
+ mt[0] += (mb[0] * dfac);
+ mt[1] += (mb[1] * dfac);
+ }
- /* find the closer vertex, and distance between startpoints */
- if (Vec2Lenf(p0, s1) > Vec2Lenf(p1, s1))
- Vec2Copyf(closep, p1);
- else
- Vec2Copyf(closep, p0);
-
- /* determine which side this closer vertex should be on */
- pthick= (pt1->pressure * thickness * 2);
- if ( ((closep[0] - s0[0]) > 0) || ((closep[1] - s0[1]) > 0) ) {
- /* assumes this is the 'second' point, (i.e. the 'plus' one), so the other is subtracting */
- p0[0]= closep[0] - (pthick * pm[0]);
- p0[1]= closep[1] - (pthick * pm[1]);
- p1[0]= closep[0];
- p1[1]= closep[1];
- }
- else if ( ((closep[0] - s0[0]) < 0) || ((closep[1] - s0[1]) < 0) ) {
- /* assumes this is the 'first' point, (i.e. the 'minus' one), so the other is adding */
- p0[0]= closep[0];
- p0[1]= closep[1];
- p1[0]= closep[0] + (pthick * pm[0]);
- p1[1]= closep[1] + (pthick * pm[1]);
- }
+ /* calculate points for start of segment */
+ t0[0]= s0[0] - mt[0];
+ t0[1]= s0[1] - mt[1];
+ t1[0]= s0[0] + mt[0];
+ t1[1]= s0[1] + mt[1];
- /* reset gl-states! */
- glEnd();
- glBegin(GL_QUAD_STRIP);
+ /* draw this line twice (once for end of current segment, and once for start of next) */
+ glVertex2fv(t1);
+ glVertex2fv(t0);
+ glVertex2fv(t0);
+ glVertex2fv(t1);
}
- /* do the end of this segment */
- pthick= (pt2->pressure * thickness);
- t0[0] = s1[0] - (pthick * m2[0]);
- t0[1] = s1[1] - (pthick * m2[1]);
- t1[0] = s1[0] + (pthick * m2[0]);
- t1[1] = s1[1] + (pthick * m2[1]);
-
- /* draw this segment */
- glVertex2f(p0[0], p0[1]);
- glVertex2f(p1[0], p1[1]);
- glVertex2f(t0[0], t0[1]);
- glVertex2f(t1[0], t1[1]);
-
- // TODO: draw end cap if last segment
+ /* if last segment, also draw end of segment (defined as segment's normal) */
if (i == totpoints-2) {
-
+ /* for once, we use second point's pressure (otherwise it won't be drawn) */
+ pthick= (pt2->pressure * thickness);
+
+ /* calculate points for end of segment */
+ mt[0]= m2[0] * pthick;
+ mt[1]= m2[1] * pthick;
+
+ t0[0]= s1[0] - mt[0];
+ t0[1]= s1[1] - mt[1];
+ t1[0]= s1[0] + mt[0];
+ t1[1]= s1[1] + mt[1];
+
+ /* draw this line twice (once for end of stroke, and once for endcap)*/
+ glVertex2fv(t1);
+ glVertex2fv(t0);
+ glVertex2fv(t0);
+ glVertex2fv(t1);
+
+
+ /* draw end cap as last step
+ * - make points slightly closer to center (about halfway across)
+ */
+ mt[0]= m2[0] * pthick * 0.5;
+ mt[1]= m2[1] * pthick * 0.5;
+ sc[0]= s1[0] + (m1[0] * pthick * 0.75);
+ sc[1]= s1[1] + (m1[1] * pthick * 0.75);
+
+ t0[0]= sc[0] - mt[0];
+ t0[1]= sc[1] - mt[1];
+ t1[0]= sc[0] + mt[0];
+ t1[1]= sc[1] + mt[1];
+
+ glVertex2fv(t1);
+ glVertex2fv(t0);
}
- /* store current points for next segment to use */
- Vec2Copyf(p0, t0);
- Vec2Copyf(p1, t1);
- Vec2Copyf(pm, m1);
+ /* store stroke's 'natural' normal for next stroke to use */
+ Vec2Copyf(pm, m2);
}
glEnd();
@@ -594,6 +696,12 @@ static void gp_draw_stroke (bGPDspoint *points, int totpoints, short thickness,
if (sflag & GP_STROKE_2DSPACE) {
glVertex2f(pt->x, pt->y);
}
+ else if (sflag & GP_STROKE_2DIMAGE) {
+ const float x= (pt->x * winx) + offsx;
+ const float y= (pt->y * winy) + offsy;
+
+ glVertex2f(x, y);
+ }
else {
const float x= (pt->x / 1000 * winx);
const float y= (pt->y / 1000 * winy);
@@ -608,8 +716,8 @@ static void gp_draw_stroke (bGPDspoint *points, int totpoints, short thickness,
/* ----- General Drawing ------ */
/* draw a set of strokes */
-static void gp_draw_strokes (bGPDframe *gpf, int winx, int winy, int dflag, short debug,
- short lthick, float color[4])
+static void gp_draw_strokes (bGPDframe *gpf, int offsx, int offsy, int winx, int winy, int dflag,
+ short debug, short lthick, float color[4])
{
bGPDstroke *gps;
@@ -617,7 +725,7 @@ static void gp_draw_strokes (bGPDframe *gpf, int winx, int winy, int dflag, shor
glColor4f(color[0], color[1], color[2], color[3]);
for (gps= gpf->strokes.first; gps; gps= gps->next) {
- /* check if stroke can be drawn */
+ /* check if stroke can be drawn - checks here generally fall into pairs */
if ((dflag & GP_DRAWDATA_ONLY3D) && !(gps->flag & GP_STROKE_3DSPACE))
continue;
if (!(dflag & GP_DRAWDATA_ONLY3D) && (gps->flag & GP_STROKE_3DSPACE))
@@ -626,21 +734,25 @@ static void gp_draw_strokes (bGPDframe *gpf, int winx, int winy, int dflag, shor
continue;
if (!(dflag & GP_DRAWDATA_ONLYV2D) && (gps->flag & GP_STROKE_2DSPACE))
continue;
+ if ((dflag & GP_DRAWDATA_ONLYI2D) && !(gps->flag & GP_STROKE_2DIMAGE))
+ continue;
+ if (!(dflag & GP_DRAWDATA_ONLYI2D) && (gps->flag & GP_STROKE_2DIMAGE))
+ continue;
if ((gps->points == 0) || (gps->totpoints < 1))
continue;
/* check which stroke-drawer to use */
if (gps->totpoints == 1)
- gp_draw_stroke_point(gps->points, gps->flag, winx, winy);
+ gp_draw_stroke_point(gps->points, lthick, gps->flag, offsx, offsy, winx, winy);
else if (dflag & GP_DRAWDATA_ONLY3D)
gp_draw_stroke_3d(gps->points, gps->totpoints, lthick, dflag, gps->flag, debug, winx, winy);
else if (gps->totpoints > 1)
- gp_draw_stroke(gps->points, gps->totpoints, lthick, dflag, gps->flag, debug, winx, winy);
+ gp_draw_stroke(gps->points, gps->totpoints, lthick, dflag, gps->flag, debug, offsx, offsy, winx, winy);
}
}
/* draw grease-pencil datablock */
-static void gp_draw_data (bGPdata *gpd, int winx, int winy, int dflag)
+static void gp_draw_data (bGPdata *gpd, int offsx, int offsy, int winx, int winy, int dflag)
{
bGPDlayer *gpl, *actlay=NULL;
@@ -692,7 +804,7 @@ static void gp_draw_data (bGPdata *gpd, int winx, int winy, int dflag)
if ((gpf->framenum - gf->framenum) <= gpl->gstep) {
/* alpha decreases with distance from curframe index */
tcolor[3] = color[3] - (i/gpl->gstep);
- gp_draw_strokes(gf, winx, winy, dflag, debug, lthick, tcolor);
+ gp_draw_strokes(gf, offsx, offsy, winx, winy, dflag, debug, lthick, tcolor);
}
else
break;
@@ -704,7 +816,7 @@ static void gp_draw_data (bGPdata *gpd, int winx, int winy, int dflag)
if ((gf->framenum - gpf->framenum) <= gpl->gstep) {
/* alpha decreases with distance from curframe index */
tcolor[3] = color[3] - (i/gpl->gstep);
- gp_draw_strokes(gf, winx, winy, dflag, debug, lthick, tcolor);
+ gp_draw_strokes(gf, offsx, offsy, winx, winy, dflag, debug, lthick, tcolor);
}
else
break;
@@ -717,12 +829,12 @@ static void gp_draw_data (bGPdata *gpd, int winx, int winy, int dflag)
/* draw the strokes for the ghost frames (at half of the alpha set by user) */
if (gpf->prev) {
tcolor[3] = (color[3] / 7);
- gp_draw_strokes(gpf->prev, winx, winy, dflag, debug, lthick, tcolor);
+ gp_draw_strokes(gpf->prev, offsx, offsy, winx, winy, dflag, debug, lthick, tcolor);
}
if (gpf->next) {
tcolor[3] = (color[3] / 4);
- gp_draw_strokes(gpf->next, winx, winy, dflag, debug, lthick, tcolor);
+ gp_draw_strokes(gpf->next, offsx, offsy, winx, winy, dflag, debug, lthick, tcolor);
}
/* restore alpha */
@@ -732,7 +844,7 @@ static void gp_draw_data (bGPdata *gpd, int winx, int winy, int dflag)
/* draw the strokes already in active frame */
tcolor[3]= color[3];
- gp_draw_strokes(gpf, winx, winy, dflag, debug, lthick, tcolor);
+ gp_draw_strokes(gpf, offsx, offsy, winx, winy, dflag, debug, lthick, tcolor);
/* Check if may need to draw the active stroke cache, only if this layer is the active layer
* that is being edited. (Stroke buffer is currently stored in gp-data)
@@ -766,13 +878,13 @@ static void gp_draw_data (bGPdata *gpd, int winx, int winy, int dflag)
BIF_ThemeColor(TH_TEXT_HI);
if (actlay->actframe) {
- sprintf(printable, "GPencil: Layer ('%s'), Frame (%d) %s",
+ sprintf(printable, "GPencil: Layer ('%s'), Frame (%d)%s",
actlay->info, actlay->actframe->framenum,
- ((gpd->flag & GP_DATA_EDITPAINT)?", Draw Mode On":"") );
+ ((gpd->flag & GP_DATA_EDITPAINT)?" , Draw Mode On":"") );
}
else {
- sprintf(printable, "GPencil: Layer ('%s'), Frame <None> %s",
- actlay->info, ((gpd->flag & GP_DATA_EDITPAINT)?", Draw Mode On":"") );
+ sprintf(printable, "GPencil: Layer ('%s'), Frame <None>%s",
+ actlay->info, ((gpd->flag & GP_DATA_EDITPAINT)?" , Draw Mode On":"") );
}
}
else {
@@ -796,6 +908,75 @@ static void gp_draw_data (bGPdata *gpd, int winx, int winy, int dflag)
/* ----- Grease Pencil Sketches Drawing API ------ */
+/* draw grease-pencil sketches to specified 2d-view that uses ibuf corrections */
+void draw_gpencil_2dimage (ScrArea *sa, ImBuf *ibuf)
+{
+ bGPdata *gpd;
+ int offsx, offsy, sizex, sizey;
+ int dflag = GP_DRAWDATA_NOSTATUS;
+
+ /* check that we have grease-pencil stuff to draw */
+ if (ELEM(NULL, sa, ibuf)) return;
+ gpd= gpencil_data_getactive(sa);
+ if (gpd == NULL) return;
+
+ /* calculate rect */
+ switch (sa->spacetype) {
+ case SPACE_IMAGE: /* image */
+ {
+ SpaceImage *sima= (SpaceImage *)sa->spacedata.first;
+
+ /* just draw using standard scaling (settings here are currently ignored anyways) */
+ // FIXME: the opengl poly-strokes don't draw at right thickness when done this way, so disabled
+ offsx= 0;
+ offsy= 0;
+ sizex= sa->winx;
+ sizey= sa->winy;
+
+ myortho2(sima->v2d.cur.xmin, sima->v2d.cur.xmax, sima->v2d.cur.ymin, sima->v2d.cur.ymax);
+
+ dflag |= GP_DRAWDATA_ONLYV2D;
+ }
+ break;
+
+ case SPACE_SEQ: /* sequence */
+ {
+ SpaceSeq *sseq= (SpaceSeq *)sa->spacedata.first;
+ float zoom, zoomx, zoomy;
+
+ /* calculate accessory values */
+ zoom= SEQ_ZOOM_FAC(sseq->zoom);
+ if (sseq->mainb == SEQ_DRAW_IMG_IMBUF) {
+ zoomx = zoom * ((float)G.scene->r.xasp / (float)G.scene->r.yasp);
+ zoomy = zoom;
+ }
+ else
+ zoomx = zoomy = zoom;
+
+ sizex= zoomx * ibuf->x;
+ sizey= zoomy * ibuf->y;
+ offsx= (sa->winx-sizex)/2 + sseq->xof;
+ offsy= (sa->winy-sizey)/2 + sseq->yof;
+
+ dflag |= GP_DRAWDATA_ONLYI2D;
+ }
+ break;
+
+ default: /* for spacetype not yet handled */
+ offsx= 0;
+ offsy= 0;
+ sizex= sa->winx;
+ sizey= sa->winy;
+
+ dflag |= GP_DRAWDATA_ONLYI2D;
+ break;
+ }
+
+
+ /* draw it! */
+ gp_draw_data(gpd, offsx, offsy, sizex, sizey, dflag);
+}
+
/* draw grease-pencil sketches to specified 2d-view assuming that matrices are already set correctly
* Note: this gets called twice - first time with onlyv2d=1 to draw 'canvas' strokes, second time with onlyv2d=0 for screen-aligned strokes
*/
@@ -811,7 +992,7 @@ void draw_gpencil_2dview (ScrArea *sa, short onlyv2d)
/* draw it! */
if (onlyv2d) dflag |= (GP_DRAWDATA_ONLYV2D|GP_DRAWDATA_NOSTATUS);
- gp_draw_data(gpd, sa->winx, sa->winy, dflag);
+ gp_draw_data(gpd, 0, 0, sa->winx, sa->winy, dflag);
}
/* draw grease-pencil sketches to specified 3d-view assuming that matrices are already set correctly
@@ -828,7 +1009,7 @@ void draw_gpencil_3dview (ScrArea *sa, short only3d)
/* draw it! */
if (only3d) dflag |= (GP_DRAWDATA_ONLY3D|GP_DRAWDATA_NOSTATUS);
- gp_draw_data(gpd, sa->winx, sa->winy, dflag);
+ gp_draw_data(gpd, 0, 0, sa->winx, sa->winy, dflag);
}
/* draw grease-pencil sketches to opengl render window assuming that matrices are already set correctly */
@@ -842,7 +1023,7 @@ void draw_gpencil_oglrender (View3D *v3d, int winx, int winy)
if (gpd == NULL) return;
/* pass 1: draw 3d-strokes ------------ > */
- gp_draw_data(gpd, winx, winy, (GP_DRAWDATA_NOSTATUS|GP_DRAWDATA_ONLY3D));
+ gp_draw_data(gpd, 0, 0, winx, winy, (GP_DRAWDATA_NOSTATUS|GP_DRAWDATA_ONLY3D));
/* pass 2: draw 2d-strokes ------------ > */
/* adjust view matrices */
@@ -850,7 +1031,7 @@ void draw_gpencil_oglrender (View3D *v3d, int winx, int winy)
glLoadIdentity();
/* draw it! */
- gp_draw_data(gpd, winx, winy, GP_DRAWDATA_NOSTATUS);
+ gp_draw_data(gpd, 0, 0, winx, winy, GP_DRAWDATA_NOSTATUS);
}
/* ************************************************** */
diff --git a/source/blender/src/drawimage.c b/source/blender/src/drawimage.c
index 14849cdd450..6db33a89adb 100644
--- a/source/blender/src/drawimage.c
+++ b/source/blender/src/drawimage.c
@@ -52,6 +52,7 @@
#include "DNA_camera_types.h"
#include "DNA_color_types.h"
#include "DNA_image_types.h"
+#include "DNA_gpencil_types.h"
#include "DNA_mesh_types.h"
#include "DNA_meshdata_types.h"
#include "DNA_node_types.h"
@@ -79,6 +80,7 @@
#include "BDR_editface.h"
#include "BDR_drawobject.h"
#include "BDR_drawmesh.h"
+#include "BDR_gpencil.h"
#include "BDR_imagepaint.h"
#include "BIF_cursors.h"
@@ -86,6 +88,7 @@
#include "BIF_graphics.h"
#include "BIF_mywindow.h"
#include "BIF_drawimage.h"
+#include "BIF_drawgpencil.h"
#include "BIF_resources.h"
#include "BIF_interface.h"
#include "BIF_interface_icons.h"
@@ -1778,6 +1781,45 @@ static void image_panel_preview(ScrArea *sa, short cntrl) // IMAGE_HANDLER_PREVI
}
+static void image_panel_gpencil(short cntrl) // IMAGE_HANDLER_GREASEPENCIL
+{
+ uiBlock *block;
+ SpaceImage *sima;
+
+ sima= curarea->spacedata.first;
+
+ block= uiNewBlock(&curarea->uiblocks, "image_panel_gpencil", UI_EMBOSS, UI_HELV, curarea->win);
+ uiPanelControl(UI_PNL_SOLID | UI_PNL_CLOSE | cntrl);
+ uiSetPanelHandler(IMAGE_HANDLER_GREASEPENCIL); // for close and esc
+ if (uiNewPanel(curarea, block, "Grease Pencil", "SpaceImage", 100, 30, 318, 204)==0) return;
+
+ /* allocate memory for gpd if drawing enabled (this must be done first or else we crash) */
+ if (sima->flag & SI_DISPGP) {
+ if (sima->gpd == NULL)
+ gpencil_data_setactive(curarea, gpencil_data_addnew());
+ }
+
+ if (sima->flag & SI_DISPGP) {
+ bGPdata *gpd= sima->gpd;
+ short newheight;
+
+ /* this is a variable height panel, newpanel doesnt force new size on existing panels */
+ /* so first we make it default height */
+ uiNewPanelHeight(block, 204);
+
+ /* draw button for showing gpencil settings and drawings */
+ uiDefButBitI(block, TOG, SI_DISPGP, B_REDR, "Use Grease Pencil", 10, 225, 150, 20, &sima->flag, 0, 0, 0, 0, "Display freehand annotations overlay over this Image/UV Editor (draw using Shift-LMB)");
+
+ /* extend the panel if the contents won't fit */
+ newheight= draw_gpencil_panel(block, gpd, curarea);
+ uiNewPanelHeight(block, newheight);
+ }
+ else {
+ uiDefButBitI(block, TOG, SI_DISPGP, B_REDR, "Use Grease Pencil", 10, 225, 150, 20, &sima->flag, 0, 0, 0, 0, "Display freehand annotations overlay over this Image/UV Editor");
+ uiDefBut(block, LABEL, 1, " ", 160, 180, 150, 20, NULL, 0.0, 0.0, 0, 0, "");
+ }
+}
+
static void image_blockhandlers(ScrArea *sa)
{
SpaceImage *sima= sa->spacedata.first;
@@ -1788,7 +1830,6 @@ static void image_blockhandlers(ScrArea *sa)
for(a=0; a<SPACE_MAXHANDLER; a+=2) {
switch(sima->blockhandler[a]) {
-
case IMAGE_HANDLER_PROPERTIES:
image_panel_properties(sima->blockhandler[a+1]);
break;
@@ -1806,7 +1847,10 @@ static void image_blockhandlers(ScrArea *sa)
break;
case IMAGE_HANDLER_PREVIEW:
image_panel_preview(sa, sima->blockhandler[a+1]);
- break;
+ break;
+ case IMAGE_HANDLER_GREASEPENCIL:
+ image_panel_gpencil(sima->blockhandler[a+1]);
+ break;
}
/* clear action value for event */
sima->blockhandler[a+1]= 0;
@@ -2339,9 +2383,17 @@ void drawimagespace(ScrArea *sa, void *spacedata)
}
draw_image_transform(ibuf, xuser_asp, yuser_asp);
+
+ /* draw grease-pencil ('image' strokes) */
+ if (sima->flag & SI_DISPGP)
+ draw_gpencil_2dimage(sa, ibuf);
mywinset(sa->win); /* restore scissor after gla call... */
myortho2(-0.375, sa->winx-0.375, -0.375, sa->winy-0.375);
+
+ /* draw grease-pencil (screen strokes) */
+ if (sima->flag & SI_DISPGP)
+ draw_gpencil_2dview(sa, 0);
if(G.rendering==0) {
draw_image_view_tool();
@@ -2403,12 +2455,12 @@ static void image_zoom_set_factor(float zoomfac)
void image_viewmove(int mode)
{
- short mval[2], mvalo[2], zoom0;
+ short mval[2], mvalo[2];
int oldcursor;
Window *win;
getmouseco_sc(mvalo);
- zoom0= G.sima->zoom;
+
oldcursor=get_cursor();
win=winlay_get_active_window();
diff --git a/source/blender/src/drawipo.c b/source/blender/src/drawipo.c
index 0e7476bbe82..aee00baef8e 100644
--- a/source/blender/src/drawipo.c
+++ b/source/blender/src/drawipo.c
@@ -442,7 +442,7 @@ int in_ipo_buttons(void)
else return 1;
}
-static View2D *spacelink_get_view2d(SpaceLink *sl)
+View2D *spacelink_get_view2d(SpaceLink *sl)
{
if(sl->spacetype==SPACE_IPO)
return &((SpaceIpo *)sl)->v2d;
@@ -921,6 +921,13 @@ void drawscroll(int disptype)
BIF_ThemeColor(TH_TEXT);
val= ipogrid_startx;
+
+ if (ELEM3(curarea->spacetype, SPACE_SEQ, SPACE_SOUND, SPACE_TIME)) { /* prevents printing twice same frame */
+ while(ipogrid_dx < 0.9999f) {
+ ipogrid_dx *= 2.0f;
+ dfac*= 2.0f;
+ }
+ }
while(fac < hor.xmax) {
if(curarea->spacetype==SPACE_OOPS) {
@@ -1212,16 +1219,9 @@ static void draw_ipovertices(int sel)
/*}*/
} else { /* normal non bit curves */
if(ei->flag & IPO_EDIT) {
- if(ei->icu->ipo==IPO_BEZ) {
- /* Draw the editmode hendels for a bezier curve */
- if( (bezt->f1 & SELECT) == sel)/* && G.v2d->cur.xmin < bezt->vec[0][0] < G.v2d->cur.xmax)*/
- bglVertex3fv(bezt->vec[0]);
-
- if( (bezt->f3 & SELECT) == sel)/* && G.v2d->cur.xmin < bezt->vec[2][0] < G.v2d->cur.xmax)*/
- bglVertex3fv(bezt->vec[2]);
-
- }
-
+ /* Only the vertex of the line, the
+ * handler are draw below.
+ */
if( (bezt->f2 & SELECT) == sel) /* && G.v2d->cur.xmin < bezt->vec[1][0] < G.v2d->cur.xmax)*/
bglVertex3fv(bezt->vec[1]);
@@ -1237,6 +1237,45 @@ static void draw_ipovertices(int sel)
bezt++;
}
bglEnd();
+
+ if (ei->flag & IPO_EDIT) {
+ /* Now draw the two vertex of the handler,
+ * need split it because we can't call glPointSize
+ * in the middle of a glBegin/glEnd also the
+ * bug comment before.
+ */
+ a= ei->icu->totvert;
+ bezt= ei->icu->bezt;
+
+ glPointSize(BIF_GetThemeValuef(TH_HANDLE_VERTEX_SIZE));
+
+ if(sel) BIF_ThemeColor(TH_HANDLE_VERTEX_SELECT);
+ else BIF_ThemeColor(TH_HANDLE_VERTEX);
+
+ bglBegin(GL_POINTS);
+
+ while(a--) {
+ if (ei->disptype!=IPO_DISPBITS) {
+ if(ei->flag & IPO_EDIT) {
+ if(ei->icu->ipo==IPO_BEZ) {
+ /* Draw the editmode hendels for a bezier curve */
+ if( (bezt->f1 & SELECT) == sel)/* && G.v2d->cur.xmin < bezt->vec[0][0] < G.v2d->cur.xmax)*/
+ bglVertex3fv(bezt->vec[0]);
+
+ if( (bezt->f3 & SELECT) == sel)/* && G.v2d->cur.xmin < bezt->vec[2][0] < G.v2d->cur.xmax)*/
+ bglVertex3fv(bezt->vec[2]);
+ }
+ }
+ }
+ bezt++;
+ }
+ bglEnd();
+
+ /* The color are always reset (see the while)
+ * but the point size not so we reset now.
+ */
+ glPointSize(BIF_GetThemeValuef(TH_VERTEX_SIZE));
+ }
}
}
@@ -1276,7 +1315,7 @@ static void draw_ipohandles(int sel)
glVertex2fv(fp+3); glVertex2fv(fp+6);
glEnd();
}
- else if( (bezt->f1 & 1)==sel) {
+ else if( (bezt->f1 & SELECT)==sel) {
fp= bezt->vec[0];
cpack(col[bezt->h1]);
@@ -1412,8 +1451,14 @@ static void draw_ipocurves(int sel)
if( (icu->extrap & IPO_CYCL)==0) {
if(prevbezt->vec[1][0] > G.v2d->cur.xmin) {
v1[0]= G.v2d->cur.xmin;
- if(icu->extrap==IPO_HORIZ || icu->ipo==IPO_CONST) v1[1]= prevbezt->vec[1][1];
- else {
+ if(icu->extrap==IPO_HORIZ || icu->ipo==IPO_CONST || icu->totvert==1) {
+ v1[1]= prevbezt->vec[1][1];
+ } else if (icu->ipo==IPO_LIN) {
+ /* extrapolate linear dosnt use the handle, use the next points center instead */
+ fac= (prevbezt->vec[1][0]-bezt->vec[1][0])/(prevbezt->vec[1][0]-v1[0]);
+ if(fac!=0.0) fac= 1.0/fac;
+ v1[1]= prevbezt->vec[1][1]-fac*(prevbezt->vec[1][1]-bezt->vec[1][1]);
+ } else {
fac= (prevbezt->vec[0][0]-prevbezt->vec[1][0])/(prevbezt->vec[1][0]-v1[0]);
if(fac!=0.0) fac= 1.0/fac;
v1[1]= prevbezt->vec[1][1]-fac*(prevbezt->vec[0][1]-prevbezt->vec[1][1]);
@@ -1492,8 +1537,15 @@ static void draw_ipocurves(int sel)
if( (icu->extrap & IPO_CYCL)==0) {
if(prevbezt->vec[1][0] < G.v2d->cur.xmax) {
v1[0]= G.v2d->cur.xmax;
- if(icu->extrap==IPO_HORIZ || icu->ipo==IPO_CONST) v1[1]= prevbezt->vec[1][1];
- else {
+ if(icu->extrap==IPO_HORIZ || icu->ipo==IPO_CONST ||icu->totvert==1) {
+ v1[1]= prevbezt->vec[1][1];
+ } else if (icu->ipo==IPO_LIN) {
+ /* extrapolate linear dosnt use the handle, use the previous points center instead */
+ bezt = prevbezt-1;
+ fac= (prevbezt->vec[1][0]-bezt->vec[1][0])/(prevbezt->vec[1][0]-v1[0]);
+ if(fac!=0.0) fac= 1.0/fac;
+ v1[1]= prevbezt->vec[1][1]-fac*(prevbezt->vec[1][1]-bezt->vec[1][1]);
+ } else {
fac= (prevbezt->vec[2][0]-prevbezt->vec[1][0])/(prevbezt->vec[1][0]-v1[0]);
if(fac!=0.0) fac= 1.0/fac;
v1[1]= prevbezt->vec[1][1]-fac*(prevbezt->vec[2][1]-prevbezt->vec[1][1]);
@@ -1913,7 +1965,7 @@ void do_ipobuts(unsigned short event)
ei= get_active_editipo();
if(ei) {
if(ei->icu==NULL) {
- ei->icu= verify_ipocurve(G.sipo->from, G.sipo->blocktype, G.sipo->actname, G.sipo->constname, G.sipo->bonename, ei->adrcode);
+ ei->icu= verify_ipocurve(G.sipo->from, G.sipo->blocktype, G.sipo->actname, G.sipo->constname, G.sipo->bonename, ei->adrcode, 1);
if (!ei->icu) {
error("Could not add a driver to this curve, may be linked data!");
break;
diff --git a/source/blender/src/drawmesh.c b/source/blender/src/drawmesh.c
index dd512595ebc..ba266fa8c29 100644
--- a/source/blender/src/drawmesh.c
+++ b/source/blender/src/drawmesh.c
@@ -76,534 +76,12 @@
#include "BSE_drawview.h"
+#include "GPU_extensions.h"
+#include "GPU_draw.h"
+
#include "blendef.h"
#include "nla.h"
-#ifndef GL_CLAMP_TO_EDGE
-#define GL_CLAMP_TO_EDGE 0x812F
-#endif
-
-//#include "glext.h"
-/* some local functions */
-#if defined(GL_EXT_texture_object) && (!defined(__sun__) || (!defined(__sun))) && !defined(__APPLE__) && !defined(__linux__) && !defined(WIN32)
- #define glBindTexture(A,B) glBindTextureEXT(A,B)
- #define glGenTextures(A,B) glGenTexturesEXT(A,B)
- #define glDeleteTextures(A,B) glDeleteTexturesEXT(A,B)
- #define glPolygonOffset(A,B) glPolygonOffsetEXT(A,B)
-
-#else
-
-/* #define GL_FUNC_ADD_EXT GL_FUNC_ADD */
-/* #define GL_FUNC_REVERSE_SUBTRACT_EXT GL_FUNC_REVERSE_SUBTRACT */
-/* #define GL_POLYGON_OFFSET_EXT GL_POLYGON_OFFSET */
-
-#endif
-
- /* (n&(n-1)) zeros the least significant bit of n */
-static int is_pow2(int num) {
- return ((num)&(num-1))==0;
-}
-static int smaller_pow2(int num) {
- while (!is_pow2(num))
- num= num&(num-1);
- return num;
-}
-
-/* These are used to enable texture clamping */
-static int is_pow2_limit(int num) {
- if (U.glreslimit != 0 && num > U.glreslimit) return 0;
- return ((num)&(num-1))==0;
-}
-
-static int smaller_pow2_limit(int num) {
- if (U.glreslimit != 0 && num > U.glreslimit)
- return U.glreslimit;
- return smaller_pow2(num);
-}
-
-static int fCurtile=0, fCurmode=0,fCurtileXRep=0,fCurtileYRep=0;
-static Image *fCurpage=0;
-static short fTexwindx, fTexwindy, fTexwinsx, fTexwinsy;
-static int fDoMipMap = 1;
-static int fLinearMipMap = 0;
-
-/* local prototypes --------------- */
-void update_realtime_textures(void);
-
-
-/* static int source, dest; also not used */
-
-/**
- * Enables or disable mipmapping for realtime images.
- * @param mipmap Turn mipmapping on (mipmap!=0) or off (mipmap==0).
- */
-void set_mipmap(int mipmap)
-{
- if (fDoMipMap != (mipmap != 0)) {
- free_all_realtime_images();
- fDoMipMap = mipmap != 0;
- }
-}
-
-/**
- * Returns the current setting for mipmapping.
- */
-static int get_mipmap(void)
-{
- return fDoMipMap && (!(G.f & G_TEXTUREPAINT));
-}
-
-/**
- * Enables or disable linear mipmap setting for realtime images (textures).
- * Note that this will will destroy all texture bindings in OpenGL.
- * @see free_realtime_image()
- * @param mipmap Turn linear mipmapping on (linear!=0) or off (linear==0).
- */
-void set_linear_mipmap(int linear)
-{
- if (fLinearMipMap != (linear != 0)) {
- free_all_realtime_images();
- fLinearMipMap = linear != 0;
- }
-}
-
-/**
- * Returns the current setting for linear mipmapping.
- */
-int get_linear_mipmap(void)
-{
- return fLinearMipMap;
-}
-
-
-/**
- * Resets the realtime image cache variables.
- */
-void clear_realtime_image_cache()
-{
- fCurpage = NULL;
- fCurtile = 0;
- fCurmode = 0;
- fCurtileXRep = 0;
- fCurtileYRep = 0;
-}
-
-/* REMEMBER! Changes here must go into my_set_tpage() as well */
-int set_tpage(MTFace *tface)
-{
- static int alphamode= -1;
- static MTFace *lasttface= 0;
- Image *ima;
- ImBuf *ibuf;
- unsigned int *rect=NULL, *bind;
- int tpx=0, tpy=0, tilemode, tileXRep,tileYRep;
-
- /* disable */
- if(tface==0) {
- if(lasttface==0) return 0;
-
- lasttface= 0;
- fCurtile= 0;
- fCurpage= 0;
- if(fCurmode!=0) {
- glMatrixMode(GL_TEXTURE);
- glLoadIdentity();
- glMatrixMode(GL_MODELVIEW);
- }
- fCurmode= 0;
- fCurtileXRep=0;
- fCurtileYRep=0;
- alphamode= -1;
-
- glDisable(GL_BLEND);
- glDisable(GL_TEXTURE_2D);
- glDisable(GL_TEXTURE_GEN_S);
- glDisable(GL_TEXTURE_GEN_T);
- glDisable ( GL_ALPHA_TEST );
- return 0;
- }
- lasttface= tface;
-
- if( alphamode != tface->transp) {
- alphamode= tface->transp;
-
- if(alphamode) {
- if(alphamode==TF_ADD) {
- glEnable(GL_BLEND);
- glBlendFunc(GL_ONE, GL_ONE);
- glDisable ( GL_ALPHA_TEST );
- /* glBlendEquationEXT(GL_FUNC_ADD_EXT); */
- }
- else if(alphamode==TF_ALPHA) {
- glEnable(GL_BLEND);
- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
-
- /* added after 2.45 to clip alpha */
-
- /*if U.glalphaclip == 1.0, some cards go bonkers... turn off alpha test in this case*/
- if(U.glalphaclip == 1.0) glDisable(GL_ALPHA_TEST);
- else{
- glEnable ( GL_ALPHA_TEST );
- glAlphaFunc ( GL_GREATER, U.glalphaclip );
- }
- } else if (alphamode==TF_CLIP){
- glDisable(GL_BLEND);
- glEnable ( GL_ALPHA_TEST );
- glAlphaFunc(GL_GREATER, 0.5f);
- }
- /* glBlendEquationEXT(GL_FUNC_ADD_EXT); */
- /* else { */
- /* glBlendFunc(GL_ONE, GL_ONE); */
- /* glBlendEquationEXT(GL_FUNC_REVERSE_SUBTRACT_EXT); */
- /* } */
- } else {
- glDisable(GL_BLEND);
- glDisable ( GL_ALPHA_TEST );
- }
- }
-
- ima= tface->tpage;
-
- /* Enable or disable reflection mapping */
- if (ima && (ima->flag & IMA_REFLECT)){
-
-// glActiveTextureARB(GL_TEXTURE0_ARB);
- glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP);
- glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP);
-
- glEnable(GL_TEXTURE_GEN_S);
- glEnable(GL_TEXTURE_GEN_T);
-
- /* Handle multitexturing here */
- }
- else{
- glDisable(GL_TEXTURE_GEN_S);
- glDisable(GL_TEXTURE_GEN_T);
- }
-
- tilemode= tface->mode & TF_TILES;
- tileXRep = 0;
- tileYRep = 0;
- if (ima) {
- tileXRep = ima->xrep;
- tileYRep = ima->yrep;
- }
-
-
- if(ima==fCurpage && fCurtile==tface->tile && tilemode==fCurmode && fCurtileXRep==tileXRep && fCurtileYRep == tileYRep) return ima!=0;
-
- if(tilemode!=fCurmode || fCurtileXRep!=tileXRep || fCurtileYRep != tileYRep) {
- glMatrixMode(GL_TEXTURE);
- glLoadIdentity();
-
- if(tilemode && ima!=NULL)
- glScalef(ima->xrep, ima->yrep, 1.0);
-
- glMatrixMode(GL_MODELVIEW);
- }
-
- if(ima==NULL || ima->ok==0) {
- glDisable(GL_TEXTURE_2D);
-
- fCurtile= tface->tile;
- fCurpage= 0;
- fCurmode= tilemode;
- fCurtileXRep = tileXRep;
- fCurtileYRep = tileYRep;
-
- return 0;
- }
-
- ibuf= BKE_image_get_ibuf(ima, NULL);
- if(ibuf==NULL) {
-
- fCurtile= tface->tile;
- fCurpage= 0;
- fCurmode= tilemode;
- fCurtileXRep = tileXRep;
- fCurtileYRep = tileYRep;
-
- glDisable(GL_TEXTURE_2D);
- return 0;
- }
-
- if ((ibuf->rect==NULL) && ibuf->rect_float)
- IMB_rect_from_float(ibuf);
-
- if(ima->tpageflag & IMA_TWINANIM) fCurtile= ima->lastframe;
- else fCurtile= tface->tile;
-
- if(tilemode) {
- if(ima->repbind==0) make_repbind(ima);
-
- if(fCurtile>=ima->totbind) fCurtile= 0;
-
- /* this happens when you change repeat buttons */
- if(ima->repbind) bind= ima->repbind+fCurtile;
- else bind= &ima->bindcode;
-
- if(*bind==0) {
-
- fTexwindx= ibuf->x/ima->xrep;
- fTexwindy= ibuf->y/ima->yrep;
-
- if(fCurtile>=ima->xrep*ima->yrep) fCurtile= ima->xrep*ima->yrep-1;
-
- fTexwinsy= fCurtile / ima->xrep;
- fTexwinsx= fCurtile - fTexwinsy*ima->xrep;
-
- fTexwinsx*= fTexwindx;
- fTexwinsy*= fTexwindy;
-
- tpx= fTexwindx;
- tpy= fTexwindy;
-
- rect= ibuf->rect + fTexwinsy*ibuf->x + fTexwinsx;
- }
- }
- else {
- bind= &ima->bindcode;
-
- if(*bind==0) {
- tpx= ibuf->x;
- tpy= ibuf->y;
- rect= ibuf->rect;
- }
- }
-
- if(*bind==0) {
- int rectw= tpx, recth= tpy;
- unsigned int *tilerect= NULL, *scalerect= NULL;
-
- /*
- * Maarten:
- * According to Ton this code is not needed anymore. It was used only
- * in really old Blenders.
- * Reevan:
- * Actually it is needed for backwards compatibility. Simpledemo 6 does not display correctly without it.
- */
-#if 1
- if (tilemode) {
- int y;
-
- tilerect= MEM_mallocN(rectw*recth*sizeof(*tilerect), "tilerect");
- for (y=0; y<recth; y++) {
- unsigned int *rectrow= &rect[y*ibuf->x];
- unsigned int *tilerectrow= &tilerect[y*rectw];
-
- memcpy(tilerectrow, rectrow, tpx*sizeof(*rectrow));
- }
-
- rect= tilerect;
- }
-#endif
- if (!is_pow2_limit(rectw) || !is_pow2_limit(recth)) {
- rectw= smaller_pow2_limit(rectw);
- recth= smaller_pow2_limit(recth);
-
- scalerect= MEM_mallocN(rectw*recth*sizeof(*scalerect), "scalerect");
- gluScaleImage(GL_RGBA, tpx, tpy, GL_UNSIGNED_BYTE, rect, rectw, recth, GL_UNSIGNED_BYTE, scalerect);
- rect= scalerect;
- }
-
- glGenTextures(1, (GLuint *)bind);
-
- if((G.f & G_DEBUG) || !*bind) {
- GLenum error = glGetError();
- printf("Texture: %s\n", ima->id.name+2);
- printf("name: %d, tpx: %d\n", *bind, tpx);
- printf("tile: %d, mode: %d\n", fCurtile, tilemode);
- if (error)
- printf("error: %s\n", gluErrorString(error));
- }
- glBindTexture( GL_TEXTURE_2D, *bind);
-
- if (!get_mipmap())
- {
- glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, rectw, recth, 0, GL_RGBA, GL_UNSIGNED_BYTE, rect);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
- } else
- {
- int minfilter= fLinearMipMap?GL_LINEAR_MIPMAP_LINEAR:GL_LINEAR_MIPMAP_NEAREST;
-
- gluBuild2DMipmaps(GL_TEXTURE_2D, GL_RGBA, rectw, recth, GL_RGBA, GL_UNSIGNED_BYTE, rect);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, minfilter);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
-
- ima->tpageflag |= IMA_MIPMAP_COMPLETE;
- }
-
- glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
-
- if (tilerect)
- MEM_freeN(tilerect);
- if (scalerect)
- MEM_freeN(scalerect);
- }
- else glBindTexture( GL_TEXTURE_2D, *bind);
-
- /* dont tile x/y as set the the game properties */
- if (ima->tpageflag & IMA_CLAMP_U)
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
- else
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
- if (ima->tpageflag & IMA_CLAMP_V)
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
- else
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
-
- /* tag_image_time(ima);*/ /* Did this get lost in the image recode? */
-
- glEnable(GL_TEXTURE_2D);
-
- fCurpage= ima;
- fCurmode= tilemode;
- fCurtileXRep = tileXRep;
- fCurtileYRep = tileYRep;
-
- return 1;
-}
-
-void update_realtime_image(Image *ima, int x, int y, int w, int h)
-{
- ImBuf *ibuf= BKE_image_get_ibuf(ima, NULL);
-
- if (ima->repbind || get_mipmap() || !ima->bindcode || !ibuf ||
- (!is_pow2(ibuf->x) || !is_pow2(ibuf->y)) ||
- (w == 0) || (h == 0)) {
- /* these special cases require full reload still */
- free_realtime_image(ima);
- }
- else {
- int row_length = glaGetOneInteger(GL_UNPACK_ROW_LENGTH);
- int skip_pixels = glaGetOneInteger(GL_UNPACK_SKIP_PIXELS);
- int skip_rows = glaGetOneInteger(GL_UNPACK_SKIP_ROWS);
-
- if ((ibuf->rect==NULL) && ibuf->rect_float)
- IMB_rect_from_float(ibuf);
-
- glBindTexture(GL_TEXTURE_2D, ima->bindcode);
-
- glPixelStorei(GL_UNPACK_ROW_LENGTH, ibuf->x);
- glPixelStorei(GL_UNPACK_SKIP_PIXELS, x);
- glPixelStorei(GL_UNPACK_SKIP_ROWS, y);
-
- glTexSubImage2D(GL_TEXTURE_2D, 0, x, y, w, h, GL_RGBA,
- GL_UNSIGNED_BYTE, ibuf->rect);
-
- glPixelStorei(GL_UNPACK_ROW_LENGTH, row_length);
- glPixelStorei(GL_UNPACK_SKIP_PIXELS, skip_pixels);
- glPixelStorei(GL_UNPACK_SKIP_ROWS, skip_rows);
-
- if(ima->tpageflag & IMA_MIPMAP_COMPLETE)
- ima->tpageflag &= ~IMA_MIPMAP_COMPLETE;
- }
-}
-
-void free_realtime_image(Image *ima)
-{
- if(ima->bindcode) {
- glDeleteTextures(1, (GLuint *)&ima->bindcode);
- ima->bindcode= 0;
- ima->tpageflag &= ~IMA_MIPMAP_COMPLETE;
- }
- if(ima->repbind) {
- glDeleteTextures(ima->totbind, (GLuint *)ima->repbind);
-
- MEM_freeN(ima->repbind);
- ima->repbind= NULL;
- ima->tpageflag &= ~IMA_MIPMAP_COMPLETE;
- }
-}
-
-void free_all_realtime_images(void)
-{
- Image* ima;
-
- for(ima=G.main->image.first; ima; ima=ima->id.next)
- free_realtime_image(ima);
-}
-
-/* these two functions are called on entering and exiting texture paint mode,
- temporary disabling/enabling mipmapping on all images for quick texture
- updates with glTexSubImage2D. images that didn't change don't have to be
- re-uploaded to OpenGL */
-void texpaint_disable_mipmap(void)
-{
- Image* ima;
-
- if(!fDoMipMap)
- return;
-
- for(ima=G.main->image.first; ima; ima=ima->id.next) {
- if(ima->bindcode) {
- glBindTexture(GL_TEXTURE_2D, ima->bindcode);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
- }
- }
-}
-
-void texpaint_enable_mipmap(void)
-{
- Image* ima;
-
- if(!fDoMipMap)
- return;
-
- for(ima=G.main->image.first; ima; ima=ima->id.next) {
- if(ima->bindcode) {
- if(ima->tpageflag & IMA_MIPMAP_COMPLETE) {
- int minfilter= fLinearMipMap?GL_LINEAR_MIPMAP_LINEAR:GL_LINEAR_MIPMAP_NEAREST;
-
- glBindTexture(GL_TEXTURE_2D, ima->bindcode);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, minfilter);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
- }
- else
- free_realtime_image(ima);
- }
- }
-}
-
-void make_repbind(Image *ima)
-{
- ImBuf *ibuf= BKE_image_get_ibuf(ima, NULL);
-
- if(ibuf==NULL) return;
-
- if(ima->repbind) {
- glDeleteTextures(ima->totbind, (GLuint *)ima->repbind);
- MEM_freeN(ima->repbind);
- ima->repbind= 0;
- ima->tpageflag &= ~IMA_MIPMAP_COMPLETE;
- }
- ima->totbind= ima->xrep*ima->yrep;
- if(ima->totbind>1) {
- ima->repbind= MEM_callocN(sizeof(int)*ima->totbind, "repbind");
- }
-}
-
-void update_realtime_textures()
-{
- Image *ima;
-
- ima= G.main->image.first;
- while(ima) {
- if(ima->tpageflag & IMA_TWINANIM) {
- if(ima->twend >= ima->xrep*ima->yrep) ima->twend= ima->xrep*ima->yrep-1;
-
- /* check: is bindcode not in the array? Free. (to do) */
-
- ima->lastframe++;
- if(ima->lastframe > ima->twend) ima->lastframe= ima->twsta;
-
- }
- ima= ima->id.next;
- }
-}
-
/***/
/* Flags for marked edges */
@@ -627,7 +105,7 @@ static void get_marked_edge_info__orFlags(EdgeHash *eh, int v0, int v1, int flag
*flags_p |= flags;
}
-EdgeHash *get_tface_mesh_marked_edge_info(Mesh *me)
+static EdgeHash *get_tface_mesh_marked_edge_info(Mesh *me)
{
EdgeHash *eh = BLI_edgehash_new();
int i;
@@ -664,7 +142,7 @@ static int draw_tfaces3D__setHiddenOpts(void *userData, int index)
{
struct { Mesh *me; EdgeHash *eh; } *data = userData;
MEdge *med = &data->me->medge[index];
- unsigned long flags = (long) BLI_edgehash_lookup(data->eh, med->v1, med->v2);
+ uintptr_t flags = (intptr_t) BLI_edgehash_lookup(data->eh, med->v1, med->v2);
if((G.f & G_DRAWSEAMS) && (med->flag&ME_SEAM)) {
return 0;
@@ -682,7 +160,7 @@ static int draw_tfaces3D__setSeamOpts(void *userData, int index)
{
struct { Mesh *me; EdgeHash *eh; } *data = userData;
MEdge *med = &data->me->medge[index];
- unsigned long flags = (long) BLI_edgehash_lookup(data->eh, med->v1, med->v2);
+ uintptr_t flags = (intptr_t) BLI_edgehash_lookup(data->eh, med->v1, med->v2);
if (med->flag&ME_SEAM) {
if (G.f&G_HIDDENEDGES) {
@@ -698,7 +176,7 @@ static int draw_tfaces3D__setSelectOpts(void *userData, int index)
{
struct { Mesh *me; EdgeHash *eh; } *data = userData;
MEdge *med = &data->me->medge[index];
- unsigned long flags = (long) BLI_edgehash_lookup(data->eh, med->v1, med->v2);
+ uintptr_t flags = (intptr_t) BLI_edgehash_lookup(data->eh, med->v1, med->v2);
return flags & eEdge_Select;
}
@@ -706,7 +184,7 @@ static int draw_tfaces3D__setActiveOpts(void *userData, int index)
{
struct { Mesh *me; EdgeHash *eh; } *data = userData;
MEdge *med = &data->me->medge[index];
- unsigned long flags = (long) BLI_edgehash_lookup(data->eh, med->v1, med->v2);
+ uintptr_t flags = (intptr_t) BLI_edgehash_lookup(data->eh, med->v1, med->v2);
if (flags & eEdge_Select) {
return 1;
@@ -775,81 +253,6 @@ static void draw_tfaces3D(Object *ob, Mesh *me, DerivedMesh *dm)
BLI_edgehash_free(data.eh, NULL);
}
-static int set_gl_light(Object *ob)
-{
- Base *base;
- Lamp *la;
- int count;
- /* float zero[4]= {0.0, 0.0, 0.0, 0.0}; */
- float vec[4];
-
- vec[3]= 1.0;
-
- for(count=0; count<8; count++) glDisable(GL_LIGHT0+count);
-
- count= 0;
-
- base= FIRSTBASE;
- while(base) {
- if(base->object->type==OB_LAMP ) {
- if(base->lay & G.vd->lay) {
- if(base->lay & ob->lay)
- {
- la= base->object->data;
-
- glPushMatrix();
- glLoadMatrixf((float *)G.vd->viewmat);
-
- where_is_object_simul(base->object);
- VECCOPY(vec, base->object->obmat[3]);
-
- if(la->type==LA_SUN) {
- vec[0]= base->object->obmat[2][0];
- vec[1]= base->object->obmat[2][1];
- vec[2]= base->object->obmat[2][2];
- vec[3]= 0.0;
- glLightfv(GL_LIGHT0+count, GL_POSITION, vec);
- }
- else {
- vec[3]= 1.0;
- glLightfv(GL_LIGHT0+count, GL_POSITION, vec);
- glLightf(GL_LIGHT0+count, GL_CONSTANT_ATTENUATION, 1.0);
- glLightf(GL_LIGHT0+count, GL_LINEAR_ATTENUATION, la->att1/la->dist);
- /* post 2.25 engine supports quad lights */
- glLightf(GL_LIGHT0+count, GL_QUADRATIC_ATTENUATION, la->att2/(la->dist*la->dist));
-
- if(la->type==LA_SPOT) {
- vec[0]= -base->object->obmat[2][0];
- vec[1]= -base->object->obmat[2][1];
- vec[2]= -base->object->obmat[2][2];
- glLightfv(GL_LIGHT0+count, GL_SPOT_DIRECTION, vec);
- glLightf(GL_LIGHT0+count, GL_SPOT_CUTOFF, la->spotsize/2.0);
- glLightf(GL_LIGHT0+count, GL_SPOT_EXPONENT, 128.0*la->spotblend);
- }
- else glLightf(GL_LIGHT0+count, GL_SPOT_CUTOFF, 180.0);
- }
-
- vec[0]= la->energy*la->r;
- vec[1]= la->energy*la->g;
- vec[2]= la->energy*la->b;
- vec[3]= 1.0;
- glLightfv(GL_LIGHT0+count, GL_DIFFUSE, vec);
- glLightfv(GL_LIGHT0+count, GL_SPECULAR, vec);//zero);
- glEnable(GL_LIGHT0+count);
-
- glPopMatrix();
-
- count++;
- if(count>7) break;
- }
- }
- }
- base= base->next;
- }
-
- return count;
-}
-
static Material *give_current_material_or_def(Object *ob, int matnr)
{
extern Material defmaterial; // render module abuse...
@@ -893,9 +296,9 @@ static int set_draw_settings_cached(int clearcache, int textured, MTFace *texfac
if (textured!=c_textured || texface!=c_texface) {
if (textured ) {
- c_badtex= !set_tpage(texface);
+ c_badtex= !GPU_set_tpage(texface);
} else {
- set_tpage(0);
+ GPU_set_tpage(0);
c_badtex= 0;
}
c_textured= textured;
@@ -950,7 +353,7 @@ static void draw_textured_begin(Object *ob)
}
else
/* draw with lights in the scene otherwise */
- Gtexdraw.islit= set_gl_light(ob);
+ Gtexdraw.islit= GPU_scene_object_lights(G.scene, ob, G.vd->lay, G.vd->viewmat);
obcol[0]= CLAMPIS(ob->col[0]*255, 0, 255);
obcol[1]= CLAMPIS(ob->col[1]*255, 0, 255);
@@ -971,12 +374,12 @@ static void draw_textured_begin(Object *ob)
static void draw_textured_end()
{
/* switch off textures */
- set_tpage(0);
+ GPU_set_tpage(0);
glShadeModel(GL_FLAT);
glDisable(GL_CULL_FACE);
- /* XXX, bad patch - default_gl_light() calls
+ /* XXX, bad patch - GPU_default_lights() calls
* glLightfv(GL_LIGHT_POSITION, ...) which
* is transformed by the current matrix... we
* need to make sure that matrix is identity.
@@ -987,7 +390,7 @@ static void draw_textured_end()
*/
glPushMatrix();
glLoadIdentity();
- default_gl_light();
+ GPU_default_lights();
glPopMatrix();
}
@@ -1057,50 +460,71 @@ static int wpaint__setSolidDrawOptions(void *userData, int index, int *drawSmoot
return 1;
}
-static void draw_game_text_mesh(Object *ob, Mesh *me)
+void draw_mesh_text(Object *ob, int glsl)
{
- DerivedMesh *ddm = mesh_get_derived_deform(ob, CD_MASK_BAREMESH);
- MFace *mface= me->mface;
+ Mesh *me = ob->data;
+ DerivedMesh *ddm;
+ MFace *mf, *mface= me->mface;
MTFace *tface= me->mtface;
MCol *mcol= me->mcol; /* why does mcol exist? */
- bProperty *prop = get_property(ob, "Text");
- int a, start= 0, totface= me->totface;
+ bProperty *prop = get_ob_property(ob, "Text");
+ GPUVertexAttribs gattribs;
+ int a, totface= me->totface;
+
+ /* don't draw without tfaces */
+ if(!tface)
+ return;
+
+ /* don't draw when editing */
+ if(ob==G.obedit)
+ return;
+ else if(ob==OBACT)
+ if(FACESEL_PAINT_TEST)
+ return;
+
+ ddm = mesh_get_derived_deform(ob, CD_MASK_BAREMESH);
- tface+= start;
- mcol+= start*4;
- for (a=start; a<totface; a++, tface++, mcol+=4) {
- MFace *mf= &mface[a];
+ for(a=0, mf=mface; a<totface; a++, tface++, mf++) {
int mode= tface->mode;
int matnr= mf->mat_nr;
int mf_smooth= mf->flag & ME_SMOOTH;
if (!(mf->flag&ME_HIDE) && !(mode&TF_INVISIBLE) && (mode&TF_BMFONT)) {
- int badtex= set_draw_settings_cached(0, Gtexdraw.istex, tface, Gtexdraw.islit, Gtexdraw.ob, matnr, TF_TWOSIDE);
float v1[3], v2[3], v3[3], v4[3];
char string[MAX_PROPSTRING];
- int characters, index;
- ImBuf *ibuf;
- float curpos;
+ int characters, i, glattrib= -1, badtex= 0;
- if (badtex)
- continue;
+ if(glsl) {
+ GPU_enable_material(matnr+1, &gattribs);
+
+ for(i=0; i<gattribs.totlayer; i++) {
+ if(gattribs.layer[i].type == CD_MTFACE) {
+ glattrib = gattribs.layer[i].glindex;
+ break;
+ }
+ }
+ }
+ else {
+ badtex = set_draw_settings_cached(0, Gtexdraw.istex, tface, Gtexdraw.islit, Gtexdraw.ob, matnr, TF_TWOSIDE);
+ if (badtex) {
+ if (mcol) mcol+=4;
+ continue;
+ }
+ }
ddm->getVertCo(ddm, mf->v1, v1);
ddm->getVertCo(ddm, mf->v2, v2);
ddm->getVertCo(ddm, mf->v3, v3);
if (mf->v4) ddm->getVertCo(ddm, mf->v4, v4);
- // The BM_FONT handling code is duplicated in the gameengine
- // Search for 'Frank van Beek' ;-)
- // string = "Frank van Beek";
+ // The BM_FONT handling is in the gpu module, shared with the
+ // game engine, was duplicated previously
set_property_valstr(prop, string);
characters = strlen(string);
- ibuf= BKE_image_get_ibuf(tface->tpage, NULL);
- if (ibuf == NULL) {
+ if(!BKE_image_get_ibuf(tface->tpage, NULL))
characters = 0;
- }
if (!mf_smooth) {
float nor[3];
@@ -1110,46 +534,11 @@ static void draw_game_text_mesh(Object *ob, Mesh *me)
glNormal3fv(nor);
}
- curpos= 0.0;
- glBegin(mf->v4?GL_QUADS:GL_TRIANGLES);
- for (index = 0; index < characters; index++) {
- float centerx, centery, sizex, sizey, transx, transy, movex, movey, advance;
- int character = string[index];
- char *cp= NULL;
-
- // lets calculate offset stuff
- // space starts at offset 1
- // character = character - ' ' + 1;
-
- matrixGlyph(ibuf, character, & centerx, &centery, &sizex, &sizey, &transx, &transy, &movex, &movey, &advance);
- movex+= curpos;
-
- if (tface->mode & TF_OBCOL)
- glColor3ubv(Gtexdraw.obcol);
- else if (me->mcol) cp= (char *)mcol;
- else glColor3ub(255, 255, 255);
-
- glTexCoord2f((tface->uv[0][0] - centerx) * sizex + transx, (tface->uv[0][1] - centery) * sizey + transy);
- if (cp) glColor3ub(cp[3], cp[2], cp[1]);
- glVertex3f(sizex * v1[0] + movex, sizey * v1[1] + movey, v1[2]);
-
- glTexCoord2f((tface->uv[1][0] - centerx) * sizex + transx, (tface->uv[1][1] - centery) * sizey + transy);
- if (cp) glColor3ub(cp[7], cp[6], cp[5]);
- glVertex3f(sizex * v2[0] + movex, sizey * v2[1] + movey, v2[2]);
-
- glTexCoord2f((tface->uv[2][0] - centerx) * sizex + transx, (tface->uv[2][1] - centery) * sizey + transy);
- if (cp) glColor3ub(cp[11], cp[10], cp[9]);
- glVertex3f(sizex * v3[0] + movex, sizey * v3[1] + movey, v3[2]);
-
- if(mf->v4) {
- glTexCoord2f((tface->uv[3][0] - centerx) * sizex + transx, (tface->uv[3][1] - centery) * sizey + transy);
- if (cp) glColor3ub(cp[15], cp[14], cp[13]);
- glVertex3f(sizex * v4[0] + movex, sizey * v4[1] + movey, v4[2]);
- }
-
- curpos+= advance;
- }
- glEnd();
+ GPU_render_text(tface, tface->mode, string, characters,
+ (unsigned int*)mcol, v1, v2, v3, (mf->v4? v4: NULL), glattrib);
+ }
+ if (mcol) {
+ mcol+=4;
}
}
@@ -1159,7 +548,6 @@ static void draw_game_text_mesh(Object *ob, Mesh *me)
void draw_mesh_textured(Object *ob, DerivedMesh *dm, int faceselect)
{
Mesh *me= ob->data;
- int editing= 0;
/* correct for negative scale */
if(ob->transflag & OB_NEG_SCALE) glFrontFace(GL_CW);
@@ -1168,38 +556,20 @@ void draw_mesh_textured(Object *ob, DerivedMesh *dm, int faceselect)
/* draw the textured mesh */
draw_textured_begin(ob);
-#ifdef WITH_VERSE
- if(me->vnode) {
- /* verse-blender doesn't support uv mapping of textures yet */
- dm->drawFacesTex(dm, NULL);
- }
- else {
-#endif
- if(ob==G.obedit) {
- dm->drawMappedFacesTex(dm, draw_em_tf_mapped__set_draw, G.editMesh);
- } else if(faceselect) {
- if(G.f & G_WEIGHTPAINT)
- dm->drawMappedFaces(dm, wpaint__setSolidDrawOptions, me, 1);
- else
- dm->drawMappedFacesTex(dm, draw_tface_mapped__set_draw, me);
- }
+ if(ob==G.obedit) {
+ dm->drawMappedFacesTex(dm, draw_em_tf_mapped__set_draw, G.editMesh);
+ } else if(faceselect) {
+ if(G.f & G_WEIGHTPAINT)
+ dm->drawMappedFaces(dm, wpaint__setSolidDrawOptions, me, 1);
else
- dm->drawFacesTex(dm, draw_tface__set_draw);
-#ifdef WITH_VERSE
- }
-#endif
-
- /* draw game engine text hack - but not if we are editing the mesh */
- if (me->mtface && get_property(ob, "Text")) {
- if(ob==G.obedit)
- editing= 1;
- else if(ob==OBACT)
- if(FACESEL_PAINT_TEST)
- editing= 1;
-
- if(!editing)
- draw_game_text_mesh(ob, me);
+ dm->drawMappedFacesTex(dm, draw_tface_mapped__set_draw, me);
}
+ else
+ dm->drawFacesTex(dm, draw_tface__set_draw);
+
+ /* draw game engine text hack */
+ if(get_ob_property(ob, "Text"))
+ draw_mesh_text(ob, 0);
draw_textured_end();
@@ -1214,10 +584,3 @@ void draw_mesh_textured(Object *ob, DerivedMesh *dm, int faceselect)
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
}
-void init_realtime_GL(void)
-{
- glMatrixMode(GL_TEXTURE);
- glLoadIdentity();
- glMatrixMode(GL_MODELVIEW);
-}
-
diff --git a/source/blender/src/drawnode.c b/source/blender/src/drawnode.c
index 853df3bedfc..d2586c9b781 100644
--- a/source/blender/src/drawnode.c
+++ b/source/blender/src/drawnode.c
@@ -2468,7 +2468,16 @@ static void node_draw_preview(bNodePreview *preview, rctf *prv)
}
}
- glPixelZoom(xscale, yscale);
+#ifdef __APPLE__
+ if(is_a_really_crappy_nvidia_card()) {
+ float zoomx= curarea->winx/(float)(G.v2d->cur.xmax-G.v2d->cur.xmin);
+ float zoomy= curarea->winy/(float)(G.v2d->cur.ymax-G.v2d->cur.ymin);
+ glPixelZoom(zoomx*xscale, zoomy*yscale);
+ }
+ else
+#endif
+ glPixelZoom(xscale, yscale);
+
glEnable(GL_BLEND);
glBlendFunc( GL_ONE, GL_ONE_MINUS_SRC_ALPHA ); /* premul graphics */
diff --git a/source/blender/src/drawobject.c b/source/blender/src/drawobject.c
index 1a469e8b366..b7aa29e2482 100644
--- a/source/blender/src/drawobject.c
+++ b/source/blender/src/drawobject.c
@@ -93,6 +93,7 @@
#include "BKE_object.h"
#include "BKE_anim.h" //for the where_on_path function
#include "BKE_particle.h"
+#include "BKE_property.h"
#include "BKE_utildefines.h"
#ifdef WITH_VERSE
#include "BKE_verse.h"
@@ -129,6 +130,10 @@
#include "BKE_deform.h"
+#include "GPU_draw.h"
+#include "GPU_material.h"
+#include "GPU_extensions.h"
+
/* pretty stupid */
/* extern Lattice *editLatt; already in BKE_lattice.h */
/* editcurve.c */
@@ -143,114 +148,37 @@ static void drawcircle_size(float size);
static void draw_empty_sphere(float size);
static void draw_empty_cone(float size);
-/* ************* Setting OpenGL Material ************ */
-
-// Materials start counting at # one....
-#define MAXMATBUF (MAXMAT + 1)
-static float matbuf[MAXMATBUF][2][4];
-static int totmat_gl= 0;
+/* check for glsl drawing */
-int set_gl_material(int nr)
+int draw_glsl_material(Object *ob, int dt)
{
- static int last_gl_matnr= -1;
- static int last_ret_val= 1;
-
- /* prevent index to use un-initialized array items */
- if(nr>totmat_gl) nr= totmat_gl;
-
- if(nr<0) {
- last_gl_matnr= -1;
- last_ret_val= 1;
- }
- else if(nr<MAXMATBUF && nr!=last_gl_matnr) {
- glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, matbuf[nr][0]);
- glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, matbuf[nr][1]);
- last_gl_matnr = nr;
- last_ret_val= matbuf[nr][0][3]!=0.0;
-
- /* matbuf alpha: 0.0 = skip draw, 1.0 = no blending, else blend */
- if(matbuf[nr][0][3]!= 0.0 && matbuf[nr][0][3]!= 1.0) {
- glEnable(GL_BLEND);
- }
- else
- glDisable(GL_BLEND);
-
- }
+ if(!GPU_extensions_minimum_support())
+ return 0;
+ if(G.f & G_PICKSEL)
+ return 0;
+ if(!CHECK_OB_DRAWTEXTURE(G.vd, dt))
+ return 0;
+ if(ob==OBACT && (G.f & G_WEIGHTPAINT))
+ return 0;
- return last_ret_val;
+ return ((G.fileflags & G_FILE_GAME_MAT) &&
+ (G.fileflags & G_FILE_GAME_MAT_GLSL) && (dt >= OB_SHADED));
}
-/* returns 1: when there's alpha needed to be drawn in a 2nd pass */
-int init_gl_materials(Object *ob, int check_alpha)
+static int check_material_alpha(Base *base, Object *ob, int glsl)
{
- extern Material defmaterial; // render module abuse...
- Material *ma;
- int a, has_alpha= 0;
-
- if(ob->totcol==0) {
- matbuf[0][0][0]= defmaterial.r;
- matbuf[0][0][1]= defmaterial.g;
- matbuf[0][0][2]= defmaterial.b;
- matbuf[0][0][3]= 1.0;
-
- matbuf[0][1][0]= defmaterial.specr;
- matbuf[0][1][1]= defmaterial.specg;
- matbuf[0][1][2]= defmaterial.specb;
- matbuf[0][1][3]= 1.0;
-
- /* do material 1 too, for displists! */
- QUATCOPY(matbuf[1][0], matbuf[0][0]);
- QUATCOPY(matbuf[1][1], matbuf[0][1]);
- }
-
- for(a=1; a<=ob->totcol; a++) {
- ma= give_current_material(ob, a);
- ma= editnode_get_active_material(ma);
- if(ma==NULL) ma= &defmaterial;
-
- if(a<MAXMATBUF) {
- if (ma->mode & MA_SHLESS) {
- matbuf[a][0][0]= ma->r;
- matbuf[a][0][1]= ma->g;
- matbuf[a][0][2]= ma->b;
- } else {
- matbuf[a][0][0]= (ma->ref+ma->emit)*ma->r;
- matbuf[a][0][1]= (ma->ref+ma->emit)*ma->g;
- matbuf[a][0][2]= (ma->ref+ma->emit)*ma->b;
- }
+ if(base->flag & OB_FROMDUPLI)
+ return 0;
- /* draw transparent, not in pick-select, nor editmode */
- if(check_alpha && !(G.f & G_PICKSEL) && (ob->dtx & OB_DRAWTRANSP) && !(G.obedit && G.obedit->data==ob->data)) {
- if(G.vd->transp) { // drawing the transparent pass
- if(ma->alpha==1.0) matbuf[a][0][3]= 0.0; // means skip solid
- else matbuf[a][0][3]= ma->alpha;
- }
- else { // normal pass
- if(ma->alpha==1.0) matbuf[a][0][3]= 1.0;
- else {
- matbuf[a][0][3]= 0.0; // means skip transparent
- has_alpha= 1; // return value, to indicate adding to after-draw queue
- }
- }
- }
- else
- matbuf[a][0][3]= 1.0;
+ if(G.f & G_PICKSEL)
+ return 0;
- if (!(ma->mode & MA_SHLESS)) {
- matbuf[a][1][0]= ma->spec*ma->specr;
- matbuf[a][1][1]= ma->spec*ma->specg;
- matbuf[a][1][2]= ma->spec*ma->specb;
- matbuf[a][1][3]= 1.0;
- }
- }
- }
-
- totmat_gl= ob->totcol;
- set_gl_material(-1); // signal for static variable
- return has_alpha;
+ if(G.obedit && G.obedit->data==ob->data)
+ return 0;
+
+ return (glsl || (ob->dtx & OB_DRAWTRANSP));
}
-
/***/
static unsigned int colortab[24]=
{0x0, 0xFF88FF, 0xFFBBFF,
@@ -352,6 +280,9 @@ void drawaxes(float size, int flag, char drawtype)
float v1[3]= {0.0, 0.0, 0.0};
float v2[3]= {0.0, 0.0, 0.0};
float v3[3]= {0.0, 0.0, 0.0};
+
+ if(G.f & G_SIMULATION)
+ return;
switch(drawtype) {
@@ -734,6 +665,9 @@ static void drawlamp(Object *ob)
float pixsize, lampsize;
float imat[4][4], curcol[4];
char col[4];
+
+ if(G.f & G_SIMULATION)
+ return;
la= ob->data;
@@ -1024,6 +958,9 @@ static void drawcamera(Object *ob, int flag)
float vec[8][4], tmat[4][4], fac, facx, facy, depth;
int i;
+ if(G.f & G_SIMULATION)
+ return;
+
cam= ob->data;
glDisable(GL_LIGHTING);
@@ -1830,6 +1767,9 @@ static void draw_verse_debug(Object *ob, EditMesh *em)
struct EditFace *efa=NULL;
float v1[3], v2[3], v3[3], v4[3], fvec[3], col[3];
char val[32];
+
+ if(G.f & G_SIMULATION)
+ return;
if(G.vd->zbuf && (G.vd->flag & V3D_ZBUF_SELECT)==0)
glDisable(GL_DEPTH_TEST);
@@ -1894,6 +1834,9 @@ static void draw_em_measure_stats(Object *ob, EditMesh *em)
char conv_float[5]; /* Use a float conversion matching the grid size */
float area, col[3]; /* area of the face, color of the text to draw */
+ if(G.f & G_SIMULATION)
+ return;
+
/* make the precission of the pronted value proportionate to the gridsize */
if ((G.vd->grid) < 0.01)
strcpy(conv_float, "%.6f");
@@ -2054,12 +1997,20 @@ static int draw_em_fancy__setFaceOpts(void *userData, int index, int *drawSmooth
EditFace *efa = EM_get_face_for_index(index);
if (efa->h==0) {
- set_gl_material(efa->mat_nr+1);
+ GPU_enable_material(efa->mat_nr+1, NULL);
return 1;
- } else {
- return 0;
}
+ else
+ return 0;
+}
+
+static int draw_em_fancy__setGLSLFaceOpts(void *userData, int index)
+{
+ EditFace *efa = EM_get_face_for_index(index);
+
+ return (efa->h==0);
}
+
static void draw_em_fancy(Object *ob, EditMesh *em, DerivedMesh *cageDM, DerivedMesh *finalDM, int dt)
{
Mesh *me = ob->data;
@@ -2082,9 +2033,21 @@ static void draw_em_fancy(Object *ob, EditMesh *em, DerivedMesh *cageDM, Derived
EM_init_index_arrays(1, 1, 1);
if(dt>OB_WIRE) {
- if( CHECK_OB_DRAWTEXTURE(G.vd, dt) ) {
- draw_mesh_textured(ob, finalDM, 0);
- } else {
+ if(CHECK_OB_DRAWTEXTURE(G.vd, dt)) {
+ if(draw_glsl_material(ob, dt)) {
+ glFrontFace((ob->transflag&OB_NEG_SCALE)?GL_CW:GL_CCW);
+
+ finalDM->drawMappedFacesGLSL(finalDM, GPU_enable_material,
+ draw_em_fancy__setGLSLFaceOpts, NULL);
+ GPU_disable_material();
+
+ glFrontFace(GL_CCW);
+ }
+ else {
+ draw_mesh_textured(ob, finalDM, 0);
+ }
+ }
+ else {
glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, me->flag & ME_TWOSIDED);
glEnable(GL_LIGHTING);
@@ -2208,6 +2171,7 @@ static void draw_em_fancy(Object *ob, EditMesh *em, DerivedMesh *cageDM, Derived
if(dt>OB_WIRE) {
glDepthMask(1);
bglPolygonOffset(0.0);
+ GPU_disable_material();
}
EM_free_index_arrays();
@@ -2226,8 +2190,9 @@ static void draw_mesh_object_outline(Object *ob, DerivedMesh *dm)
drawFacesSolid() doesn't draw the transparent faces */
if(ob->dtx & OB_DRAWTRANSP) {
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
- dm->drawFacesSolid(dm, set_gl_material);
+ dm->drawFacesSolid(dm, GPU_enable_material);
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
+ GPU_disable_material();
}
else {
dm->drawEdges(dm, 0);
@@ -2312,7 +2277,19 @@ static void draw_mesh_fancy(Base *base, int dt, int flag)
draw_mesh_object_outline(ob, dm);
}
- draw_mesh_textured(ob, dm, faceselect);
+ if(draw_glsl_material(ob, dt)) {
+ glFrontFace((ob->transflag&OB_NEG_SCALE)?GL_CW:GL_CCW);
+
+ dm->drawFacesGLSL(dm, GPU_enable_material);
+ if(get_ob_property(ob, "Text"))
+ draw_mesh_text(ob, 1);
+ GPU_disable_material();
+
+ glFrontFace(GL_CCW);
+ }
+ else {
+ draw_mesh_textured(ob, dm, faceselect);
+ }
if(!faceselect) {
if(base->flag & SELECT)
@@ -2323,18 +2300,17 @@ static void draw_mesh_fancy(Base *base, int dt, int flag)
dm->drawLooseEdges(dm);
}
}
- else if(dt==OB_SOLID ) {
-
- if ((G.vd->flag&V3D_SELECT_OUTLINE) && (base->flag&SELECT) && !draw_wire) {
+ else if(dt==OB_SOLID) {
+ if((G.vd->flag&V3D_SELECT_OUTLINE) && (base->flag&SELECT) && !draw_wire)
draw_mesh_object_outline(ob, dm);
- }
glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, me->flag & ME_TWOSIDED );
glEnable(GL_LIGHTING);
glFrontFace((ob->transflag&OB_NEG_SCALE)?GL_CW:GL_CCW);
- dm->drawFacesSolid(dm, set_gl_material);
+ dm->drawFacesSolid(dm, GPU_enable_material);
+ GPU_disable_material();
glFrontFace(GL_CCW);
glDisable(GL_LIGHTING);
@@ -2352,7 +2328,8 @@ static void draw_mesh_fancy(Base *base, int dt, int flag)
if(ob==OBACT) {
do_draw= 0;
if( (G.f & G_WEIGHTPAINT)) {
- set_gl_material(0); /* enforce defmaterial settings */
+ /* enforce default material settings */
+ GPU_enable_material(0, NULL);
/* but set default spec */
glColorMaterial(GL_FRONT_AND_BACK, GL_SPECULAR);
@@ -2367,6 +2344,8 @@ static void draw_mesh_fancy(Base *base, int dt, int flag)
dm->drawMappedFaces(dm, wpaint__setSolidDrawOptions, me->mface, 1);
glDisable(GL_COLOR_MATERIAL);
glDisable(GL_LIGHTING);
+
+ GPU_disable_material();
}
else if((G.f & (G_VERTEXPAINT+G_TEXTUREPAINT)) && me->mcol) {
dm->drawMappedFaces(dm, wpaint__setSolidDrawOptions, NULL, 1);
@@ -2385,7 +2364,7 @@ static void draw_mesh_fancy(Base *base, int dt, int flag)
dm->release(dm);
shadeDispList(base);
dl = find_displist(&ob->disp, DL_VERTCOL);
- dm= mesh_get_derived_final(ob, get_viewedit_datamask());
+ dm= mesh_get_derived_final(ob, get_viewedit_datamask());
}
if ((G.vd->flag&V3D_SELECT_OUTLINE) && (base->flag&SELECT) && !draw_wire) {
@@ -2462,7 +2441,7 @@ static int draw_mesh_object(Base *base, int dt, int flag)
{
Object *ob= base->object;
Mesh *me= ob->data;
- int has_alpha= 0, drawlinked= 0, retval= 0;
+ int do_alpha_pass= 0, drawlinked= 0, retval= 0, glsl, check_alpha;
if(G.obedit && ob!=G.obedit && ob->data==G.obedit->data) {
if(ob_get_key(ob));
@@ -2478,7 +2457,12 @@ static int draw_mesh_object(Base *base, int dt, int flag)
cageDM = editmesh_get_derived_cage_and_final(&finalDM,
get_viewedit_datamask());
- if(dt>OB_WIRE) init_gl_materials(ob, 0); // no transp in editmode, the fancy draw over goes bad then
+ if(dt>OB_WIRE) {
+ // no transp in editmode, the fancy draw over goes bad then
+ glsl = draw_glsl_material(ob, dt);
+ GPU_set_object_materials(G.scene, ob, glsl, NULL);
+ }
+
draw_em_fancy(ob, G.editMesh, cageDM, finalDM, dt);
if (G.obedit!=ob && finalDM)
@@ -2491,15 +2475,22 @@ static int draw_mesh_object(Base *base, int dt, int flag)
else {
/* don't create boundbox here with mesh_get_bb(), the derived system will make it, puts deformed bb's OK */
if(me->totface<=4 || boundbox_clip(ob->obmat, (ob->bb)? ob->bb: me->bb)) {
- if(dt==OB_SOLID) has_alpha= init_gl_materials(ob, (base->flag & OB_FROMDUPLI)==0);
+ glsl = draw_glsl_material(ob, dt);
+ check_alpha = check_material_alpha(base, ob, glsl);
+
+ if(dt==OB_SOLID || glsl) {
+ GPU_set_object_materials(G.scene, ob, glsl,
+ (check_alpha)? &do_alpha_pass: NULL);
+ }
+
draw_mesh_fancy(base, dt, flag);
if(me->totvert==0) retval= 1;
}
}
- /* init_gl_materials did the proper checking if this is needed */
- if(has_alpha) add_view3d_after(G.vd, base, V3D_TRANSP, flag);
+ /* GPU_set_object_materials checked if this is needed */
+ if(do_alpha_pass) add_view3d_after(G.vd, base, V3D_TRANSP, flag);
return retval;
}
@@ -2601,9 +2592,10 @@ static int drawDispListwire(ListBase *dlbase)
return 0;
}
-static void drawDispListsolid(ListBase *lb, Object *ob)
+static void drawDispListsolid(ListBase *lb, Object *ob, int glsl)
{
DispList *dl;
+ GPUVertexAttribs gattribs;
float *data, curcol[4];
float *ndata;
@@ -2667,7 +2659,7 @@ static void drawDispListsolid(ListBase *lb, Object *ob)
case DL_SURF:
if(dl->index) {
- set_gl_material(dl->col+1);
+ GPU_enable_material(dl->col+1, (glsl)? &gattribs: NULL);
if(dl->rt & CU_SMOOTH) glShadeModel(GL_SMOOTH);
else glShadeModel(GL_FLAT);
@@ -2675,12 +2667,12 @@ static void drawDispListsolid(ListBase *lb, Object *ob)
glVertexPointer(3, GL_FLOAT, 0, dl->verts);
glNormalPointer(GL_FLOAT, 0, dl->nors);
glDrawElements(GL_QUADS, 4*dl->totindex, GL_UNSIGNED_INT, dl->index);
+ GPU_disable_material();
}
break;
case DL_INDEX3:
-
- set_gl_material(dl->col+1);
+ GPU_enable_material(dl->col+1, (glsl)? &gattribs: NULL);
glVertexPointer(3, GL_FLOAT, 0, dl->verts);
@@ -2693,6 +2685,7 @@ static void drawDispListsolid(ListBase *lb, Object *ob)
glNormalPointer(GL_FLOAT, 0, dl->nors);
glDrawElements(GL_TRIANGLES, 3*dl->parts, GL_UNSIGNED_INT, dl->index);
+ GPU_disable_material();
if(index3_nors_incr==0)
glEnableClientState(GL_NORMAL_ARRAY);
@@ -2700,12 +2693,13 @@ static void drawDispListsolid(ListBase *lb, Object *ob)
break;
case DL_INDEX4:
-
- set_gl_material(dl->col+1);
+ GPU_enable_material(dl->col+1, (glsl)? &gattribs: NULL);
glVertexPointer(3, GL_FLOAT, 0, dl->verts);
glNormalPointer(GL_FLOAT, 0, dl->nors);
glDrawElements(GL_QUADS, 4*dl->parts, GL_UNSIGNED_INT, dl->index);
+
+ GPU_disable_material();
break;
}
@@ -2799,14 +2793,18 @@ static int drawDispList(Base *base, int dt)
draw_index_wire= 1;
}
else {
- if(dt==OB_SHADED) {
+ if(draw_glsl_material(ob, dt)) {
+ GPU_set_object_materials(G.scene, ob, 1, NULL);
+ drawDispListsolid(lb, ob, 1);
+ }
+ else if(dt == OB_SHADED) {
if(ob->disp.first==0) shadeDispList(base);
drawDispListshaded(lb, ob);
}
else {
- init_gl_materials(ob, 0);
+ GPU_set_object_materials(G.scene, ob, 0, NULL);
glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, 0);
- drawDispListsolid(lb, ob);
+ drawDispListsolid(lb, ob, 0);
}
if(ob==G.obedit && cu->bevobj==NULL && cu->taperobj==NULL && cu->ext1 == 0.0 && cu->ext2 == 0.0) {
cpack(0);
@@ -2833,15 +2831,19 @@ static int drawDispList(Base *base, int dt)
if(dl->nors==NULL) addnormalsDispList(ob, lb);
- if(dt==OB_SHADED) {
+ if(draw_glsl_material(ob, dt)) {
+ GPU_set_object_materials(G.scene, ob, 1, NULL);
+ drawDispListsolid(lb, ob, 1);
+ }
+ else if(dt==OB_SHADED) {
if(ob->disp.first==NULL) shadeDispList(base);
drawDispListshaded(lb, ob);
}
else {
- init_gl_materials(ob, 0);
+ GPU_set_object_materials(G.scene, ob, 0, NULL);
glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, 0);
- drawDispListsolid(lb, ob);
+ drawDispListsolid(lb, ob, 0);
}
}
else {
@@ -2857,16 +2859,20 @@ static int drawDispList(Base *base, int dt)
if(solid) {
- if(dt==OB_SHADED) {
+ if(draw_glsl_material(ob, dt)) {
+ GPU_set_object_materials(G.scene, ob, 1, NULL);
+ drawDispListsolid(lb, ob, 1);
+ }
+ else if(dt == OB_SHADED) {
dl= lb->first;
if(dl && dl->col1==0) shadeDispList(base);
drawDispListshaded(lb, ob);
}
else {
- init_gl_materials(ob, 0);
+ GPU_set_object_materials(G.scene, ob, 0, NULL);
glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, 0);
- drawDispListsolid(lb, ob);
+ drawDispListsolid(lb, ob, 0);
}
}
else{
@@ -2905,6 +2911,7 @@ static void draw_new_particle_system(Base *base, ParticleSystem *psys, int dt)
float timestep, pixsize=1.0, pa_size, pa_time, r_tilt;
float cfra=bsystem_time(ob,(float)CFRA,0.0);
float *vdata=0, *vedata=0, *cdata=0, *ndata=0, *vd=0, *ved=0, *cd=0, *nd=0, xvec[3], yvec[3], zvec[3];
+ float ma_r=0.0f, ma_g=0.0f, ma_b=0.0f;
int a, k, k_max=0, totpart, totpoint=0, draw_as, path_nbr=0;
int path_possible=0, keys_possible=0, draw_keys=0, totchild=0;
int select=ob->flag&SELECT, create_cdata=0;
@@ -2957,6 +2964,12 @@ static void draw_new_particle_system(Base *base, ParticleSystem *psys, int dt)
ma= give_current_material(ob,part->omat);
+ if(ma) {
+ ma_r = ma->r;
+ ma_g = ma->g;
+ ma_b = ma->b;
+ }
+
if(G.vd->zbuf) glDepthMask(1);
if(select)
@@ -2983,11 +2996,6 @@ static void draw_new_particle_system(Base *base, ParticleSystem *psys, int dt)
totpart=psys->totpart;
draw_as=part->draw_as;
- if(part->flag&PART_ABS_TIME && part->ipo){
- calc_ipo(part->ipo, cfra);
- execute_ipo((ID *)part, part->ipo);
- }
-
if(part->flag&PART_GLOB_TIME)
cfra=bsystem_time(0,(float)CFRA,0.0);
@@ -3114,22 +3122,37 @@ static void draw_new_particle_system(Base *base, ParticleSystem *psys, int dt)
if(pa->flag & PARS_NO_DISP || pa->flag & PARS_UNEXIST) continue;
pa_time=(cfra-pa->time)/pa->lifetime;
+ pa_size=pa->size;
if((part->flag&PART_ABS_TIME)==0){
if(ma && ma->ipo){
+ IpoCurve *icu;
+
/* correction for lifetime */
calc_ipo(ma->ipo, 100.0f*pa_time);
- execute_ipo((ID *)ma, ma->ipo);
+
+ for(icu = ma->ipo->curve.first; icu; icu=icu->next) {
+ if(icu->adrcode == MA_COL_R)
+ ma_r = icu->curval;
+ else if(icu->adrcode == MA_COL_G)
+ ma_g = icu->curval;
+ else if(icu->adrcode == MA_COL_B)
+ ma_b = icu->curval;
+ }
}
if(part->ipo) {
+ IpoCurve *icu;
+
/* correction for lifetime */
calc_ipo(part->ipo, 100*pa_time);
- execute_ipo((ID *)part, part->ipo);
+
+ for(icu = part->ipo->curve.first; icu; icu=icu->next) {
+ if(icu->adrcode == PART_SIZE)
+ pa_size = icu->curval;
+ }
}
}
- pa_size=pa->size;
-
r_tilt=1.0f+pa->r_ave[0];
if(path_nbr){
@@ -3144,14 +3167,19 @@ static void draw_new_particle_system(Base *base, ParticleSystem *psys, int dt)
if((part->flag&PART_ABS_TIME)==0) {
if(ma && ma->ipo){
+ IpoCurve *icu;
+
/* correction for lifetime */
calc_ipo(ma->ipo, 100.0f*pa_time);
- execute_ipo((ID *)ma, ma->ipo);
- }
- if(part->ipo) {
- /* correction for lifetime */
- calc_ipo(part->ipo, 100*pa_time);
- execute_ipo((ID *)part, part->ipo);
+
+ for(icu = ma->ipo->curve.first; icu; icu=icu->next) {
+ if(icu->adrcode == MA_COL_R)
+ ma_r = icu->curval;
+ else if(icu->adrcode == MA_COL_G)
+ ma_g = icu->curval;
+ else if(icu->adrcode == MA_COL_B)
+ ma_b = icu->curval;
+ }
}
}
@@ -3191,9 +3219,9 @@ static void draw_new_particle_system(Base *base, ParticleSystem *psys, int dt)
switch(draw_as){
case PART_DRAW_DOT:
if(cd) {
- cd[0]=ma->r;
- cd[1]=ma->g;
- cd[2]=ma->b;
+ cd[0]=ma_r;
+ cd[1]=ma_g;
+ cd[2]=ma_b;
cd+=3;
}
if(vd){
@@ -3218,9 +3246,9 @@ static void draw_new_particle_system(Base *base, ParticleSystem *psys, int dt)
}
else {
if(cd) {
- cd[0]=cd[3]=cd[6]=cd[9]=cd[12]=cd[15]=ma->r;
- cd[1]=cd[4]=cd[7]=cd[10]=cd[13]=cd[16]=ma->g;
- cd[2]=cd[5]=cd[8]=cd[11]=cd[14]=cd[17]=ma->b;
+ cd[0]=cd[3]=cd[6]=cd[9]=cd[12]=cd[15]=ma_r;
+ cd[1]=cd[4]=cd[7]=cd[10]=cd[13]=cd[16]=ma_g;
+ cd[2]=cd[5]=cd[8]=cd[11]=cd[14]=cd[17]=ma_b;
cd+=18;
}
VECSUB(vec2,state.co,vec);
@@ -3263,22 +3291,22 @@ static void draw_new_particle_system(Base *base, ParticleSystem *psys, int dt)
VECADDFAC(vd,state.co,vec,-part->draw_line[0]); vd+=3;
VECADDFAC(vd,state.co,vec,part->draw_line[1]); vd+=3;
if(cd) {
- cd[0]=cd[3]=ma->r;
- cd[1]=cd[4]=ma->g;
- cd[2]=cd[5]=ma->b;
+ cd[0]=cd[3]=ma_r;
+ cd[1]=cd[4]=ma_g;
+ cd[2]=cd[5]=ma_b;
cd+=3;
}
break;
case PART_DRAW_CIRC:
if(create_cdata)
- glColor3f(ma->r,ma->g,ma->b);
+ glColor3f(ma_r,ma_g,ma_b);
drawcircball(GL_LINE_LOOP, state.co, pixsize, imat);
break;
case PART_DRAW_BB:
if(cd) {
- cd[0]=cd[3]=cd[6]=cd[9]=ma->r;
- cd[1]=cd[4]=cd[7]=cd[10]=ma->g;
- cd[2]=cd[5]=cd[8]=cd[11]=ma->b;
+ cd[0]=cd[3]=cd[6]=cd[9]=ma_r;
+ cd[1]=cd[4]=cd[7]=cd[10]=ma_g;
+ cd[2]=cd[5]=cd[8]=cd[11]=ma_b;
cd+=12;
}
if(part->draw&PART_DRAW_BB_LOCK && part->bb_align==PART_BB_VIEW){
@@ -3971,21 +3999,18 @@ static void drawnurb(Base *base, Nurb *nurb, int dt)
BevPoint *bevp= (BevPoint *)(bl+1);
int nr= bl->nr;
int skip= nu->resolu/16;
- float fac;
while (nr-->0) { /* accounts for empty bevel lists */
float ox,oy,oz; // Offset perpendicular to the curve
float dx,dy,dz; // Delta along the curve
-
- fac = calc_curve_subdiv_radius(cu, nu, (bl->nr - nr)) * G.scene->editbutsize;
- ox = fac*bevp->mat[0][0];
- oy = fac*bevp->mat[0][1];
- oz = fac*bevp->mat[0][2];
+ ox = bevp->radius*bevp->mat[0][0];
+ oy = bevp->radius*bevp->mat[0][1];
+ oz = bevp->radius*bevp->mat[0][2];
- dx = fac*bevp->mat[2][0];
- dy = fac*bevp->mat[2][1];
- dz = fac*bevp->mat[2][2];
+ dx = bevp->radius*bevp->mat[2][0];
+ dy = bevp->radius*bevp->mat[2][1];
+ dz = bevp->radius*bevp->mat[2][2];
glBegin(GL_LINE_STRIP);
glVertex3f(bevp->x - ox - dx, bevp->y - oy - dy, bevp->z - oz - dz);
@@ -4624,9 +4649,8 @@ static void drawSolidSelect(Base *base)
drawDispListwire(&ob->disp);
}
else if(ob->type==OB_ARMATURE) {
- if(!(ob->flag & OB_POSEMODE)) {
+ if(!(ob->flag & OB_POSEMODE))
draw_armature(base, OB_WIRE, 0);
- }
}
glLineWidth(1.0);
@@ -4792,7 +4816,8 @@ void draw_object(Base *base, int flag)
warning_recursive= 1;
elems.first= elems.last= 0;
- make_cfra_list(ob->ipo, &elems);
+ // warning: no longer checks for certain ob-keys only... (so does this need to use the proper ipokeys then?)
+ make_cfra_list(ob->ipo, &elems);
cfraont= (G.scene->r.cfra);
drawtype= G.vd->drawtype;
@@ -5094,8 +5119,9 @@ void draw_object(Base *base, int flag)
drawlattice(ob);
break;
case OB_ARMATURE:
- if(dt>OB_WIRE) set_gl_material(0); // we use defmaterial
+ if(dt>OB_WIRE) GPU_enable_material(0, NULL); // we use default material
empty_object= draw_armature(base, dt, flag);
+ if(dt>OB_WIRE) GPU_disable_material();
break;
default:
drawaxes(1.0, flag, OB_ARROWS);
@@ -5138,9 +5164,8 @@ void draw_object(Base *base, int flag)
}
/* draw extra: after normal draw because of makeDispList */
- if(dtx) {
- if(G.f & G_SIMULATION);
- else if(dtx & OB_AXIS) {
+ if(dtx && !(G.f & G_SIMULATION)) {
+ if(dtx & OB_AXIS) {
drawaxes(1.0f, flag, OB_ARROWS);
}
if(dtx & OB_BOUNDBOX) draw_bounding_volume(ob);
@@ -5160,7 +5185,7 @@ void draw_object(Base *base, int flag)
}
if(dt<OB_SHADED) {
- if((ob->gameflag & OB_ACTOR) && (ob->gameflag & OB_DYNAMIC)) {
+ if(/*(ob->gameflag & OB_ACTOR) &&*/ (ob->gameflag & OB_DYNAMIC)) {
float tmat[4][4], imat[4][4], vec[3];
vec[0]= vec[1]= vec[2]= 0.0;
@@ -5315,7 +5340,7 @@ void draw_object_ext(Base *base)
static void bbs_mesh_verts__mapFunc(void *userData, int index, float *co, float *no_f, short *no_s)
{
- int offset = (long) userData;
+ int offset = (intptr_t) userData;
EditVert *eve = EM_get_vert_for_index(index);
if (eve->h==0) {
@@ -5327,7 +5352,7 @@ static int bbs_mesh_verts(DerivedMesh *dm, int offset)
{
glPointSize( BIF_GetThemeValuef(TH_VERTEX_SIZE) );
bglBegin(GL_POINTS);
- dm->foreachMappedVert(dm, bbs_mesh_verts__mapFunc, (void*)(long) offset);
+ dm->foreachMappedVert(dm, bbs_mesh_verts__mapFunc, (void*)(intptr_t) offset);
bglEnd();
glPointSize(1.0);
@@ -5336,7 +5361,7 @@ static int bbs_mesh_verts(DerivedMesh *dm, int offset)
static int bbs_mesh_wire__setDrawOptions(void *userData, int index)
{
- int offset = (long) userData;
+ int offset = (intptr_t) userData;
EditEdge *eed = EM_get_edge_for_index(index);
if (eed->h==0) {
@@ -5348,7 +5373,7 @@ static int bbs_mesh_wire__setDrawOptions(void *userData, int index)
}
static int bbs_mesh_wire(DerivedMesh *dm, int offset)
{
- dm->drawMappedEdges(dm, bbs_mesh_wire__setDrawOptions, (void*)(long) offset);
+ dm->drawMappedEdges(dm, bbs_mesh_wire__setDrawOptions, (void*)(intptr_t) offset);
return offset + G.totedge;
}
@@ -5382,7 +5407,7 @@ static int bbs_mesh_solid_EM(DerivedMesh *dm, int facecol)
cpack(0);
if (facecol) {
- dm->drawMappedFaces(dm, bbs_mesh_solid__setSolidDrawOptions, (void*)(long) 1, 0);
+ dm->drawMappedFaces(dm, bbs_mesh_solid__setSolidDrawOptions, (void*)(intptr_t) 1, 0);
if( CHECK_OB_DRAWFACEDOT(G.scene, G.vd, G.obedit->dt) ) {
glPointSize(BIF_GetThemeValuef(TH_FACEDOT_SIZE));
@@ -5411,19 +5436,6 @@ static int bbs_mesh_solid__setDrawOpts(void *userData, int index, int *drawSmoot
}
}
-static int bbs_mesh_wire__setDrawOpts(void *userData, int index)
-{
- struct { Mesh *me; EdgeHash *eh; int offset; } *data = userData;
- MEdge *med = data->me->medge + index;
- unsigned long flags = (long)BLI_edgehash_lookup(data->eh, med->v1, med->v2);
-
- if (flags & 1) {
- set_framebuffer_index_color(data->offset+index);
- return 1;
- } else
- return 0;
-}
-
/* TODO remove this - since face select mode now only works with painting */
static void bbs_mesh_solid(Object *ob)
{
@@ -5433,22 +5445,6 @@ static void bbs_mesh_solid(Object *ob)
glColor3ub(0, 0, 0);
dm->drawMappedFaces(dm, bbs_mesh_solid__setDrawOpts, me, 0);
- /* draw edges for seam marking in faceselect mode, but not when painting,
- so that painting doesn't get interrupted on an edge */
- if ((G.f & G_FACESELECT) && !(G.f & (G_VERTEXPAINT|G_TEXTUREPAINT|G_WEIGHTPAINT))) {
- struct { Mesh *me; EdgeHash *eh; int offset; } userData;
-
- userData.me = me;
- userData.eh = get_tface_mesh_marked_edge_info(me);
- userData.offset = userData.me->totface+1;
-
- bglPolygonOffset(1.0);
- dm->drawMappedEdges(dm, bbs_mesh_wire__setDrawOpts, (void*)&userData);
- bglPolygonOffset(0.0);
-
- BLI_edgehash_free(userData.eh, NULL);
- }
-
dm->release(dm);
}
@@ -5504,6 +5500,7 @@ void draw_object_backbufsel(Object *ob)
static void draw_object_mesh_instance(Object *ob, int dt, int outline)
{
DerivedMesh *dm=NULL, *edm=NULL;
+ int glsl;
if(G.obedit && ob->data==G.obedit->data)
edm= editmesh_get_derived_base();
@@ -5520,8 +5517,10 @@ static void draw_object_mesh_instance(Object *ob, int dt, int outline)
if(outline)
draw_mesh_object_outline(ob, dm?dm:edm);
- if(dm)
- init_gl_materials(ob, 0);
+ if(dm) {
+ glsl = draw_glsl_material(ob, dt);
+ GPU_set_object_materials(G.scene, ob, glsl, NULL);
+ }
else {
glEnable(GL_COLOR_MATERIAL);
BIF_ThemeColor(TH_BONE_SOLID);
@@ -5532,8 +5531,10 @@ static void draw_object_mesh_instance(Object *ob, int dt, int outline)
glFrontFace((ob->transflag&OB_NEG_SCALE)?GL_CW:GL_CCW);
glEnable(GL_LIGHTING);
- if(dm)
- dm->drawFacesSolid(dm, set_gl_material);
+ if(dm) {
+ dm->drawFacesSolid(dm, GPU_enable_material);
+ GPU_disable_material();
+ }
else if(edm)
edm->drawMappedFaces(edm, NULL, NULL, 0);
diff --git a/source/blender/src/drawseq.c b/source/blender/src/drawseq.c
index 71a777c9056..d7346a1ed21 100644
--- a/source/blender/src/drawseq.c
+++ b/source/blender/src/drawseq.c
@@ -922,17 +922,11 @@ static void draw_image_seq(ScrArea *sa)
if(ibuf->rect_float && ibuf->rect==NULL)
IMB_rect_from_float(ibuf);
-
- if (sseq->zoom > 0) {
- zoom = sseq->zoom;
- } else if (sseq->zoom == 0) {
- zoom = 1.0;
- } else {
- zoom = -1.0/sseq->zoom;
- }
-
+
/* needed for gla draw */
glaDefine2DArea(&curarea->winrct);
+
+ zoom= SEQ_ZOOM_FAC(sseq->zoom);
if (sseq->mainb == SEQ_DRAW_IMG_IMBUF) {
zoomx = zoom * ((float)G.scene->r.xasp / (float)G.scene->r.yasp);
zoomy = zoom;
@@ -976,7 +970,10 @@ static void draw_image_seq(ScrArea *sa)
setlinestyle(0);
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
}
-
+
+ /* draw grease-pencil (image aligned) */
+ if (sseq->flag & SEQ_DRAW_GPENCIL)
+ draw_gpencil_2dimage(sa, ibuf);
if (free_ibuf) {
IMB_freeImBuf(ibuf);
diff --git a/source/blender/src/drawtext.c b/source/blender/src/drawtext.c
index 71f0bbef7ca..dbb3aaf7672 100644
--- a/source/blender/src/drawtext.c
+++ b/source/blender/src/drawtext.c
@@ -30,20 +30,12 @@
#include <stdlib.h>
#include <math.h>
#include <string.h>
-#include <ctype.h>
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
-#ifndef _WIN32
-#include <unistd.h>
-#else
-#include <io.h>
-#include "BLI_winstuff.h"
-#endif
#include "MEM_guardedalloc.h"
-#include "PIL_time.h"
#include "BMF_Api.h"
@@ -60,6 +52,7 @@
#include "BKE_global.h"
#include "BKE_main.h"
#include "BKE_node.h"
+#include "BKE_suggestions.h"
#include "BIF_gl.h"
#include "BIF_glutil.h"
@@ -74,32 +67,87 @@
#include "BIF_space.h"
#include "BIF_mywindow.h"
#include "BIF_resources.h"
+#include "BIF_mainqueue.h"
#include "BSE_filesel.h"
#include "BPY_extern.h"
+#include "BPY_menus.h"
#include "mydevice.h"
#include "blendef.h"
#include "winlay.h"
-
-#define TEXTXLOC 38
+#include "PIL_time.h"
+#include <ctype.h> /* ispunct */
+#include <sys/stat.h>
+
+/***********************/ /*
+
+Notes on word-wrap
+--
+All word-wrap functions follow the algorithm below to maintain consistency.
+ line The line to wrap (tabs converted to spaces)
+ view_width The maximum number of characters displayable in the region
+ This equals region_width/font_width for the region
+ wrap_chars Characters that allow wrapping. This equals [' ', '\t', '-']
+
+def wrap(line, view_width, wrap_chars):
+ draw_start = 0
+ draw_end = view_width
+ pos = 0
+ for c in line:
+ if pos-draw_start >= view_width:
+ print line[draw_start:draw_end]
+ draw_start = draw_end
+ draw_end += view_width
+ elif c in wrap_chars:
+ draw_end = pos+1
+ pos += 1
+ print line[draw_start:]
+
+*/ /***********************/
+
+#define TEXTXLOC 38
+
+#define SUGG_LIST_SIZE 7
+#define SUGG_LIST_WIDTH 20
+#define DOC_WIDTH 40
+#define DOC_HEIGHT 10
+
+#define TOOL_SUGG_LIST 0x01
+#define TOOL_DOCUMENT 0x02
+
+#define TMARK_GRP_CUSTOM 0x00010000 /* Lower 2 bytes used for Python groups */
+#define TMARK_GRP_FINDALL 0x00020000
/* forward declarations */
void drawtextspace(ScrArea *sa, void *spacedata);
void winqreadtextspace(struct ScrArea *sa, void *spacedata, struct BWinEvent *evt);
-void txt_copy_selectbuffer (Text *text);
-void do_brackets();
-
-void get_selection_buffer(Text *text);
-int check_bracket(char *string);
-static int check_delim(char *string);
-static int check_numbers(char *string);
-static int check_builtinfuncs(char *string);
-static int check_specialvars(char *string);
-
-static void *last_txt_find_string= NULL;
+void redraw_alltext(void);
+
+static void txt_copy_selectbuffer(Text *text);
+static void draw_brackets(SpaceText *st);
+static void get_selection_buffer(Text *text);
+static int check_bracket(char ch);
+static int check_delim(char ch);
+static int check_digit(char ch);
+static int check_identifier(char ch);
+static int check_whitespace(char ch);
+
+static int get_wrap_width(SpaceText *st);
+//static int get_wrap_points(SpaceText *st, char *line);
+static void get_suggest_prefix(Text *text, int offset);
+static void confirm_suggestion(Text *text, int skipleft);
+
+#define TXT_MAXFINDSTR 255
+static int g_find_flags= TXT_FIND_WRAP;
+static char *g_find_str= NULL;
+static char *g_replace_str= NULL;
+
+static int doc_scroll= 0;
+static int jump_to= 0;
+static double last_jump= 0;
static BMF_Font *spacetext_get_font(SpaceText *st) {
static BMF_Font *scr12= NULL;
@@ -160,7 +208,8 @@ static void temp_char_write(char c, int accum) {
void free_txt_data(void) {
txt_free_cut_buffer();
- if (last_txt_find_string) MEM_freeN(last_txt_find_string);
+ if (g_find_str) MEM_freeN(g_find_str);
+ if (g_replace_str) MEM_freeN(g_replace_str);
if (temp_char_buf) MEM_freeN(temp_char_buf);
if (temp_char_accum) MEM_freeN(temp_char_accum);
}
@@ -184,352 +233,281 @@ static int render_string (SpaceText *st, char *in) {
return r;
}
-void get_format_string(SpaceText *st)
+static int find_builtinfunc(char *string)
{
- Text *text = st->text;
- TextLine *tmp;
- char *in_line;
- char format[2000], check[200], other[2];
- unsigned char c;
- int spot, letter, tabs, mem_amount;
- size_t a, b, len;
-
- if(!text) return;
- tmp = text->lines.first;
-
- while(tmp) {
- in_line = tmp->line;
-
- len = strlen(in_line);
- /* weak code... but we dont want crashes (ton) */
- if(len>2000-1) {
- if (tmp->format) MEM_freeN(tmp->format);
- tmp->format= NULL;
+ int a, i;
+ char builtinfuncs[][11] = {"and", "as", "assert", "break", "class", "continue", "def",
+ "del", "elif", "else", "except", "exec", "finally",
+ "for", "from", "global", "if", "import", "in",
+ "is", "lambda", "not", "or", "pass", "print",
+ "raise", "return", "try", "while", "yield"};
+ for (a=0; a<30; a++) {
+ i = 0;
+ while (1) {
+ if (builtinfuncs[a][i]=='\0') {
+ if (check_identifier(string[i]))
+ i = -1;
+ break;
+ } else if (string[i]!=builtinfuncs[a][i]) {
+ i = -1;
+ break;
+ }
+ i++;
}
+ if (i>0) break;
+ }
+ return i;
+}
+
+static int find_specialvar(char *string)
+{
+ int i = 0;
+ if (string[0]=='d' && string[1]=='e' && string[2]=='f')
+ i = 3;
+ else if (string[0]=='c' && string[1]=='l' && string[2]=='a' && string[3]=='s' && string[4]=='s')
+ i = 5;
+ if (i==0 || check_identifier(string[i]))
+ return -1;
+ return i;
+}
+
+#if 0 // not used
+static void print_format(SpaceText *st, TextLine *line) {
+ int i, a;
+ char *s, *f;
+ s = line->line;
+ f = line->format;
+ for (a=0; *s; s++) {
+ if (*s == '\t') {
+ for (i=st->tabnumber-(a%st->tabnumber); i>0; i--)
+ printf(" "), f++, a++;
+ } else
+ printf("%c", *s), f++, a++;
+ }
+ printf("\n%s [%#x]\n", line->format, (int) (f[strlen(f)+1]));
+}
+#endif // not used
+
+/* Ensures the format string for the given line is long enough, reallocating as needed */
+static int check_format_len(TextLine *line, unsigned int len) {
+ if (line->format) {
+ if (strlen(line->format) < len) {
+ MEM_freeN(line->format);
+ line->format = MEM_mallocN(len+2, "SyntaxFormat");
+ if (!line->format) return 0;
+ }
+ } else {
+ line->format = MEM_mallocN(len+2, "SyntaxFormat");
+ if (!line->format) return 0;
+ }
+ return 1;
+}
+
+/* Formats the specified line and if allowed and needed will move on to the
+ * next line. The format string contains the following characters:
+ * '_' Whitespace
+ * '#' Comment text
+ * '!' Punctuation and other symbols
+ * 'n' Numerals
+ * 'l' String letters
+ * 'v' Special variables (class, def)
+ * 'b' Built-in names (print, for, etc.)
+ * 'q' Other text (identifiers, etc.)
+ * It is terminated with a null-terminator '\0' followed by a continuation
+ * flag indicating whether the line is part of a multi-line string.
+ */
+void txt_format_line(SpaceText *st, TextLine *line, int do_next) {
+ char *str, *fmt, orig, cont, find, prev = ' ';
+ int len, i;
+
+ /* Get continuation from previous line */
+ if (line->prev && line->prev->format != NULL) {
+ fmt= line->prev->format;
+ cont = fmt[strlen(fmt)+1]; /* Just after the null-terminator */
+ } else cont = 0;
+
+ /* Get original continuation from this line */
+ if (line->format != NULL) {
+ fmt= line->format;
+ orig = fmt[strlen(fmt)+1]; /* Just after the null-terminator */
+ } else orig = 0xFF;
+
+ render_string(st, line->line);
+ str = temp_char_buf;
+ len = strlen(str);
+ if (!check_format_len(line, len)) return;
+ fmt = line->format;
+
+ while (*str) {
+ /* Handle escape sequences by skipping both \ and next char */
+ if (*str == '\\') {
+ *fmt = prev; fmt++; str++;
+ if (*str == '\0') break;
+ *fmt = prev; fmt++; str++;
+ continue;
+ }
+ /* Handle continuations */
+ else if (cont) {
+ /* Triple strings ("""...""" or '''...''') */
+ if (cont & TXT_TRISTR) {
+ find = (cont & TXT_DBLQUOTSTR) ? '"' : '\'';
+ if (*str==find && *(str+1)==find && *(str+2)==find) {
+ *fmt = 'l'; fmt++; str++;
+ *fmt = 'l'; fmt++; str++;
+ cont = 0;
+ }
+ /* Handle other strings */
+ } else {
+ find = (cont & TXT_DBLQUOTSTR) ? '"' : '\'';
+ if (*str == find) cont = 0;
+ }
+ *fmt = 'l';
+ }
+ /* Not in a string... */
else {
-
- spot = 0;
- tabs = 0;
- //see how many tabs we have
- for(a = 0; a <len; a++) {
- c = (unsigned char) in_line[a];
- if(c == '\t') {
- tabs++;
+ /* Deal with comments first */
+ if (prev == '#' || *str == '#')
+ *fmt = '#';
+ /* Strings */
+ else if (*str == '"' || *str == '\'') {
+ find = *str;
+ cont = (*str== '"') ? TXT_DBLQUOTSTR : TXT_SNGQUOTSTR;
+ if (*(str+1) == find && *(str+2) == find) {
+ *fmt = 'l'; fmt++; str++;
+ *fmt = 'l'; fmt++; str++;
+ cont |= TXT_TRISTR;
}
+ *fmt = 'l';
}
- //calculate the amount of MEM_mallocN we neen
- mem_amount = (((tabs*st->tabnumber)-tabs)+2)+len; // +2 for good measure
- if (tmp->format) MEM_freeN(tmp->format);
- tmp->format = MEM_mallocN(mem_amount, "Syntax_format");
-
- for (a = 0; a < len; a++) {
- c = (unsigned char) in_line[a];
+ /* Whitespace (all ws. has been converted to spaces) */
+ else if (*str == ' ')
+ *fmt = '_';
+ /* Numbers (digits not part of an identifier and periods followed by digits) */
+ else if ((prev != 'q' && check_digit(*str)) || (*str == '.' && check_digit(*(str+1))))
+ *fmt = 'n';
+ /* Punctuation */
+ else if (check_delim(*str))
+ *fmt = '!';
+ /* Identifiers and other text (no previous ws. or delims. so text continues) */
+ else if (prev == 'q')
+ *fmt = 'q';
+ /* Not ws, a digit, punct, or continuing text. Must be new, check for special words */
+ else {
+ /* Special vars(v) or built-in keywords(b) */
+ if ((i=find_specialvar(str)) != -1)
+ prev = 'v';
+ else if ((i=find_builtinfunc(str)) != -1)
+ prev = 'b';
+ if (i>0) {
+ while (i>1) {
+ *fmt = prev; fmt++; str++;
+ i--;
+ }
+ *fmt = prev;
+ } else
+ *fmt = 'q';
+ }
+ }
+ prev = *fmt;
+ fmt++;
+ str++;
+ }
- check[0] = c;
- check[1] = '\0';
+ /* Terminate and add continuation char */
+ *fmt = '\0'; fmt++;
+ *fmt = cont;
- if (check_delim(check))
- {
- switch (c) {
- case '\"':
- if(in_line[a] == '\"' && in_line[a+1] == '\"' && in_line[a+2] == '\"') {
- format[spot] = format[spot+1] = format[spot+2] = 'l';
- spot +=3;
- a += 3;
- while(in_line[a] != '\"' || in_line[a-1] != '\"' || in_line[a-2] != '\"') {
- c = (unsigned char) in_line[a];
- if(a >= len) {
- format[spot] = '\0';
- memcpy(tmp->format, format, strlen(format));
- if(!(tmp= tmp->next)) {
- return;
- } else {
- in_line = tmp->line;
- len = strlen(in_line);
- tabs = 0;
- for(b = 0; b <len; b++) {
- c = (unsigned char) in_line[b];
- if(c == '\t') {
- tabs++;
- }
- }
- mem_amount = (((tabs*st->tabnumber)-tabs)+2)+len;
- if (tmp->format) MEM_freeN(tmp->format);
- tmp->format = MEM_mallocN(mem_amount, "Syntax_format");
- a = 0; spot = 0;
- }
- } else {
- if(c == '\t' || c == ' ') {
- if(c == '\t') {
- for(b = st->tabnumber-(spot%st->tabnumber); b > 0; b--) {
- format[spot] = ' ';
- spot++;
- }
- a++;
- } else {
- format[spot] = ' ';
- a++; spot++;
- }
- } else {
- format[spot] = 'l';
- a++; spot++;
- }
- }
- }
- format[spot] = 'l';
- spot++;
- } else {
- format[spot] = 'l';
- a++; spot++;
- while(in_line[a] != '\"') {
- c = (unsigned char) in_line[a];
- if(a >= len) {
- format[spot] = '\0';
- memcpy(tmp->format, format, strlen(format));
- if(!(tmp= tmp->next)) {
- return;
- } else {
- in_line = tmp->line;
- len = strlen(in_line);
- for(b = 0; b <len; b++) {
- c = (unsigned char) in_line[b];
- if(c == '\t') {
- tabs++;
- }
- }
- //calculate the amount of MEM_mallocN we neen
- mem_amount = (((tabs*st->tabnumber)-tabs)+2)+len;
- if (tmp->format) MEM_freeN(tmp->format);
- tmp->format = MEM_mallocN(mem_amount, "Syntax_format");
- a = 0; spot = 0;
- }
- }
- if(c == '\t' || c == ' ') {
- if(c == '\t') {
- for(b = st->tabnumber-(spot%st->tabnumber); b > 0; b--) {
- format[spot] = ' ';
- spot++;
- }
- a++;
- } else {
- format[spot] = ' ';
- a++; spot++;
- }
- } else {
- format[spot] = 'l';
- a++; spot++;
- }
- }
- format[spot] = 'l';
- spot++;
- }
- break;
- case '\'':
- if(in_line[a] == '\'' && in_line[a+1] == '\'' && in_line[a+2] == '\'') {
- format[spot] = format[spot+1] = format[spot+2] = 'l';
- spot +=3;
- a += 3;
- while(in_line[a] != '\'' || in_line[a-1] != '\'' || in_line[a-2] != '\'') {
- c = (unsigned char) in_line[a];
- if(a >= len) {
- format[spot] = '\0';
- memcpy(tmp->format, format, strlen(format));
- if(!(tmp= tmp->next)) {
- return;
- } else {
- in_line = tmp->line;
- len = strlen(in_line);
- tabs = 0;
- for(b = 0; b <len; b++) {
- c = (unsigned char) in_line[b];
- if(c == '\t') {
- tabs++;
- }
- }
- mem_amount = (((tabs*st->tabnumber)-tabs)+2)+len;
- if (tmp->format) MEM_freeN(tmp->format);
- tmp->format = MEM_mallocN(mem_amount, "Syntax_format");
- a = 0; spot = 0;
- }
- } else {
- if(c == '\t' || c == ' ') {
- if(c == '\t') {
- for(b = st->tabnumber-(spot%st->tabnumber); b > 0; b--) {
- format[spot] = ' ';
- spot++;
- }
- a++;
- } else {
- format[spot] = ' ';
- a++; spot++;
- }
- } else {
- format[spot] = 'l';
- a++; spot++;
- }
- }
- }
- format[spot] = 'l';
- spot++;
- } else {
- format[spot] = 'l';
- a++; spot++;
- while(in_line[a] != '\'') {
- c = (unsigned char) in_line[a];
- if(a >= len) {
- format[spot] = '\0';
- memcpy(tmp->format, format, strlen(format));
- if(!(tmp= tmp->next)) {
- return;
- } else {
- in_line = tmp->line;
- len = strlen(in_line);
- for(b = 0; b <len; b++) {
- c = (unsigned char) in_line[b];
- if(c == '\t') {
- tabs++;
- }
- }
- //calculate the amount of MEM_mallocN we neen
- mem_amount = (((tabs*st->tabnumber)-tabs)+2)+len;
- if (tmp->format) MEM_freeN(tmp->format);
- tmp->format = MEM_mallocN(mem_amount, "Syntax_format");
- a = 0; spot = 0;
- }
- }
- if(c == '\t' || c == ' ') {
- if(c == '\t') {
- for(b = st->tabnumber-(spot%st->tabnumber); b > 0; b--) {
- format[spot] = ' ';
- spot++;
- }
- a++;
- } else {
- format[spot] = ' ';
- a++; spot++;
- }
- } else {
- format[spot] = 'l';
- a++; spot++;
- }
- }
- format[spot] = 'l';
- spot++;
- }
- break;
- case '#':
- while(a<len) {
- c = (unsigned char) in_line[a];
- if(c == '\t' || c == ' ') {
- if(c == '\t') {
- for(b = st->tabnumber-(spot%st->tabnumber); b > 0; b--) {
- format[spot] = '#';
- spot++;
- }
- a++;
- } else {
- format[spot] = '#';
- a++; spot++;
- }
- } else {
- format[spot] = '#';
- a++; spot++;
- }
- }
- break;
- case ' ':
- format[spot] = ' ';
- spot++;
- break;
- case '\t':
- for(b = st->tabnumber-(spot%st->tabnumber); b > 0; b--) {
- format[spot] = ' ';
- spot++;
- }
- break;
- default:
- format[spot] = 'q';
- spot++;
-
- break;
- }
- } else if (check_numbers(check)) {
- while (a < len) {
- c = (unsigned char) in_line[a];
- other[0] = c;
- other[1] = '\0';
- if (check_delim(other) && c != '.') {
- a--; break;
- } else {
- format[spot] = 'n';
- a++; spot++;
- }
- }
- } else {
- letter = 0;
- while (a < len) {
- c = (unsigned char) in_line[a];
- other[0] = c;
- other[1] = '\0';
- if (check_delim(other)) {
- a--;
- break;
- } else {
- check[letter] = (unsigned char) in_line[a];
- letter++;
- a++;
- }
- }
- check[letter] = '\0';
- if (check_builtinfuncs(check)) {
- for (b = 0; b < strlen(check); b++) {
- format[spot] = 'b';
- spot++;
- }
- } else if (check_specialvars(check)) { /*If TRUE then color and color next word*/
- for (b = 0; b < strlen(check); b++) {
- format[spot] = 'b';
- spot++;
- }
- a++;
- format[spot] = 'q';
- spot++; a++;
- letter = 0;
- while (a < len) {
- c = (unsigned char) in_line[a];
- other[0] = c;
- other[1] = '\0';
- if (check_delim(other)) {
- a--;
- break;
- } else {
- check[letter] = (unsigned char) in_line[a];
- letter++;
- a++;
- }
- }
- check[letter] = '\0';
- for (b = 0; b < strlen(check); b++) {
- format[spot] = 'v';
- spot++;
- }
- }else {
- for (b = 0; b < strlen(check); b++) {
- format[spot] = 'q';
- spot++;
- }
- }
- }
+ /* Debugging */
+ //print_format(st, line);
+
+ /* If continuation has changed and we're allowed, process the next line */
+ if (cont!=orig && do_next && line->next) {
+ txt_format_line(st, line->next, do_next);
+ }
+}
+
+void txt_format_text(SpaceText *st)
+{
+ TextLine *linep;
+
+ if (!st->text) return;
+
+ for (linep=st->text->lines.first; linep; linep=linep->next)
+ txt_format_line(st, linep, 0);
+}
+
+static void format_draw_color(char formatchar) {
+ switch (formatchar) {
+ case '_': /* Whitespace */
+ break;
+ case '!': /* Symbols */
+ BIF_ThemeColorBlend(TH_TEXT, TH_BACK, 0.5f);
+ break;
+ case '#': /* Comments */
+ BIF_ThemeColor(TH_SYNTAX_C);
+ break;
+ case 'n': /* Numerals */
+ BIF_ThemeColor(TH_SYNTAX_N);
+ break;
+ case 'l': /* Strings */
+ BIF_ThemeColor(TH_SYNTAX_L);
+ break;
+ case 'v': /* Specials: class, def */
+ BIF_ThemeColor(TH_SYNTAX_V);
+ break;
+ case 'b': /* Keywords: for, print, etc. */
+ BIF_ThemeColor(TH_SYNTAX_B);
+ break;
+ case 'q': /* Other text (identifiers) */
+ default:
+ BIF_ThemeColor(TH_TEXT);
+ break;
+ }
+}
+
+static int text_draw_wrapped(SpaceText *st, char *str, int x, int y, int w, char *format)
+{
+ int basex, i, a, len, start, end, max, lines;
+
+ len= render_string(st, str);
+ str= temp_char_buf;
+ max= w/spacetext_get_fontwidth(st);
+ if (max<8) max= 8;
+ basex= x;
+
+ lines= 1;
+ start= 0;
+ end= max;
+ for (i=0; i<len; i++) {
+ if (i-start >= max) {
+ /* Draw the visible portion of text on the overshot line */
+ for (a=start; a<end; a++) {
+ if (st->showsyntax && format) format_draw_color(format[a]);
+ glRasterPos2i(x, y);
+ BMF_DrawCharacter(spacetext_get_font(st), str[a]);
+ x += BMF_GetCharacterWidth(spacetext_get_font(st), str[a]);
}
- format[spot] = '\0';
- memcpy(tmp->format, format, strlen(format));
+ y -= st->lheight;
+ x= basex;
+ lines++;
+ start= end;
+ end += max;
+ } else if (str[i]==' ' || str[i]=='-') {
+ end = i+1;
}
-
- tmp = tmp->next;
}
+ /* Draw the remaining text */
+ for (a=start; a<len; a++) {
+ if (st->showsyntax && format) format_draw_color(format[a]);
+ glRasterPos2i(x, y);
+ BMF_DrawCharacter(spacetext_get_font(st), str[a]);
+ x += BMF_GetCharacterWidth(spacetext_get_font(st), str[a]);
+ }
+ return lines;
}
-static int text_draw(SpaceText *st, char *str, int cshift, int maxwidth, int draw, int x, int y, char *format) {
+static int text_draw(SpaceText *st, char *str, int cshift, int maxwidth, int draw, int x, int y, char *format)
+{
int r=0, w= 0;
char *in;
int *acc;
@@ -544,40 +522,15 @@ static int text_draw(SpaceText *st, char *str, int cshift, int maxwidth, int dra
if (draw) {
if(st->showsyntax && format) {
int amount, a;
- char out[2];
format = format+cshift;
amount = strlen(in);
for(a = 0; a < amount; a++) {
- out[0] = (unsigned char) in[a];
- out[1] = '\0';
- switch (format[a]) {
- case 'l':
- BIF_ThemeColor(TH_SYNTAX_L);
- break;
- case 'b':
- BIF_ThemeColor(TH_SYNTAX_B);
- break;
- case '#':
- BIF_ThemeColor(TH_SYNTAX_C);
- break;
- case 'v':
- BIF_ThemeColor(TH_SYNTAX_V);
- break;
- case 'n':
- BIF_ThemeColor(TH_SYNTAX_N);
- break;
- case 'q':
- BIF_ThemeColor(TH_TEXT);
- break;
- default:
- BIF_ThemeColor(TH_TEXT);
- break;
- }
+ format_draw_color(format[a]);
glRasterPos2i(x, y);
- BMF_DrawString(spacetext_get_font(st), out);
- x = x+BMF_GetStringWidth(spacetext_get_font(st), out);
+ BMF_DrawCharacter(spacetext_get_font(st), in[a]);
+ x = x+BMF_GetCharacterWidth(spacetext_get_font(st), in[a]);
}
} else {
glRasterPos2i(x, y);
@@ -609,14 +562,6 @@ static void set_cursor_to_pos (SpaceText *st, int x, int y, int sel)
else { linep= &text->curl; charp= &text->curc; }
y= (curarea->winy - y)/st->lheight;
-
- y-= txt_get_span(text->lines.first, *linep) - st->top;
-
- if (y>0) {
- while (y-- != 0) if((*linep)->next) *linep= (*linep)->next;
- } else if (y<0) {
- while (y++ != 0) if((*linep)->prev) *linep= (*linep)->prev;
- }
if(st->showlinenrs)
x-= TXT_OFFSET+TEXTXLOC;
@@ -626,97 +571,355 @@ static void set_cursor_to_pos (SpaceText *st, int x, int y, int sel)
if (x<0) x= 0;
x = (x/spacetext_get_fontwidth(st)) + st->left;
- w= render_string(st, (*linep)->line);
- if(x<w) *charp= temp_char_accum[x];
- else *charp= (*linep)->len;
-
- if(!sel) txt_pop_sel(text);
-}
-
-static void draw_cursor(SpaceText *st) {
- int h, x, i;
- Text *text= st->text;
- TextLine *linef, *linel;
- int charf, charl;
-
- if (text->curl==text->sell && text->curc==text->selc) {
- x= text_draw(st, text->curl->line, st->left, text->curc, 0, 0, 0, NULL);
-
- if (x) {
- h= txt_get_span(text->lines.first, text->curl) - st->top;
+ if (st->wordwrap) {
+ int i, j, endj, curs, max, chop, start, end, chars, loop;
+ char ch;
+
+ /* Point to first visible line */
+ *linep= text->lines.first;
+ for (i=0; i<st->top && (*linep)->next; i++) *linep= (*linep)->next;
+
+ max= get_wrap_width(st);
+
+ loop= 1;
+ while (loop && *linep) {
+ start= 0;
+ end= max;
+ chop= 1;
+ chars= 0;
+ curs= 0;
+ endj= 0;
+ for (i=0, j=0; loop; j++) {
+
+ /* Mimic replacement of tabs */
+ ch= (*linep)->line[j];
+ if (ch=='\t') {
+ chars= st->tabnumber-i%st->tabnumber;
+ ch= ' ';
+ } else
+ chars= 1;
+
+ while (chars--) {
+ /* Gone too far, go back to last wrap point */
+ if (y<0) {
+ *charp= endj;
+ loop= 0;
+ break;
+ /* Exactly at the cursor, done */
+ } else if (y==0 && i-start==x) {
+ *charp= curs= j;
+ loop= 0;
+ break;
+ /* Prepare curs for next wrap */
+ } else if (i-end==x) {
+ curs= j;
+ }
+ if (i-start>=max) {
+ if (chop) endj= j;
+ y--;
+ start= end;
+ end += max;
+ chop= 1;
+ if (y==0 && i-start>=x) {
+ *charp= curs;
+ loop= 0;
+ break;
+ }
+ } else if (ch==' ' || ch=='-' || ch=='\0') {
+ if (y==0 && i-start>=x) {
+ *charp= curs;
+ loop= 0;
+ break;
+ }
+ end = i+1;
+ endj = j;
+ chop= 0;
+ }
+ i++;
+ }
+ if (ch=='\0') break;
+ }
+ if (!loop || y<0) break;
- BIF_ThemeColor(TH_HILITE);
+ if (!(*linep)->next) {
+ *charp= (*linep)->len;
+ break;
+ }
- glRecti(x-1, curarea->winy-st->lheight*(h)-2, x+1, curarea->winy-st->lheight*(h+1)-2);
+ /* On correct line but didn't meet cursor, must be at end */
+ if (y==0) {
+ *charp= (*linep)->len;
+ break;
+ }
+ *linep= (*linep)->next;
+ y--;
}
+
} else {
- int span= txt_get_span(text->curl, text->sell);
+ y-= txt_get_span(text->lines.first, *linep) - st->top;
- if (span<0) {
- linef= text->sell;
- charf= text->selc;
-
- linel= text->curl;
- charl= text->curc;
- } else if (span>0) {
- linef= text->curl;
- charf= text->curc;
-
- linel= text->sell;
- charl= text->selc;
- } else {
- linef= linel= text->curl;
-
- if (text->curc<text->selc) {
- charf= text->curc;
- charl= text->selc;
- } else {
- charf= text->selc;
- charl= text->curc;
+ if (y>0) {
+ while (y-- != 0) if((*linep)->next) *linep= (*linep)->next;
+ } else if (y<0) {
+ while (y++ != 0) if((*linep)->prev) *linep= (*linep)->prev;
+ }
+
+
+ w= render_string(st, (*linep)->line);
+ if(x<w) *charp= temp_char_accum[x];
+ else *charp= (*linep)->len;
+ }
+ if(!sel) txt_pop_sel(text);
+}
+
+static int get_wrap_width(SpaceText *st) {
+ int x, max;
+ x= st->showlinenrs ? TXT_OFFSET + TEXTXLOC : TXT_OFFSET;
+ max= (curarea->winx-x)/spacetext_get_fontwidth(st);
+ return max>8 ? max : 8;
+}
+
+#if 0 // not used
+/* Returns the number of wrap points (or additional lines) in the given string */
+static int get_wrap_points(SpaceText *st, char *line) {
+ int start, end, taboffs, i, max, count;
+
+ if (!st->wordwrap) return 0;
+
+ end= max= get_wrap_width(st);
+ count= taboffs= start= 0;
+
+ for (i=0; line[i]!='\0'; i++) {
+ if (i-start+taboffs>=max) {
+ count++;
+ start= end;
+ end += max;
+ taboffs= 0;
+ } else if (line[i]==' ' || line[i]=='\t' || line[i]=='-') {
+ end = i+1;
+ if (line[i]=='\t')
+ taboffs += st->tabnumber-(i-start)%st->tabnumber;
+ }
+ }
+ return count;
+}
+#endif // not used
+
+/* Sets (offl, offc) for transforming (line, curs) to its wrapped position */
+static void wrap_offset(SpaceText *st, TextLine *linein, int cursin, int *offl, int *offc) {
+ Text *text;
+ TextLine *linep;
+ int i, j, start, end, chars, max, chop;
+ char ch;
+
+ *offl= *offc= 0;
+
+ if (!st->text) return;
+ if (!st->wordwrap) return;
+
+ text= st->text;
+
+ /* Move pointer to first visible line (top) */
+ linep= text->lines.first;
+ i= st->top;
+ while (i>0 && linep) {
+ if (linep == linein) return; /* Line before top */
+ linep= linep->next;
+ i--;
+ }
+
+ max= get_wrap_width(st);
+
+ while (linep) {
+ start= 0;
+ end= max;
+ chop= 1;
+ chars= 0;
+ *offc= 0;
+ for (i=0, j=0; linep->line[j]!='\0'; j++) {
+
+ /* Mimic replacement of tabs */
+ ch= linep->line[j];
+ if (ch=='\t') {
+ chars= st->tabnumber-i%st->tabnumber;
+ if (linep==linein && i<cursin) cursin += chars-1;
+ ch= ' ';
+ } else
+ chars= 1;
+
+ while (chars--) {
+ if (i-start>=max) {
+ if (chop && linep==linein && i >= cursin)
+ return;
+ (*offl)++;
+ *offc -= end-start;
+ start= end;
+ end += max;
+ chop= 1;
+ } else if (ch==' ' || ch=='-') {
+ end = i+1;
+ chop= 0;
+ if (linep==linein && i >= cursin)
+ return;
+ }
+ i++;
}
}
-
- /* Walk to the beginning of visible text */
- h= txt_get_span(text->lines.first, linef) - st->top;
- while (h++<-1 && linef!=linel) linef= linef->next;
-
- x= text_draw(st, linef->line, st->left, charf, 0, 0, 0, NULL);
+ if (linep==linein) break;
+ linep= linep->next;
+ }
+}
- BIF_ThemeColor(TH_SHADE2);
+static int get_char_pos(SpaceText *st, char *line, int cur) {
+ int a=0, i;
+ for (i=0; i<cur && line[i]; i++) {
+ if (line[i]=='\t')
+ a += st->tabnumber-a%st->tabnumber;
+ else
+ a++;
+ }
+ return a;
+}
- if(st->showlinenrs) {
- if (!x) x= TXT_OFFSET + TEXTXLOC -4;
- } else {
- if (!x) x= TXT_OFFSET - 4;
+static void draw_markers(SpaceText *st) {
+ Text *text= st->text;
+ TextMarker *marker, *next;
+ TextLine *top, *bottom, *line;
+ int offl, offc, i, cy, x1, x2, y1, y2, x, y;
+
+ for (i=st->top, top= text->lines.first; top->next && i>0; i--) top= top->next;
+ for (i=st->viewlines-1, bottom=top; bottom->next && i>0; i--) bottom= bottom->next;
+
+ for (marker= text->markers.first; marker; marker= next) {
+ next= marker->next;
+ for (cy= 0, line= top; line; cy++, line= line->next) {
+ if (cy+st->top==marker->lineno) {
+ /* Remove broken markers */
+ if (marker->end>line->len || marker->start>marker->end) {
+ BLI_freelinkN(&text->markers, marker);
+ break;
+ }
+
+ wrap_offset(st, line, marker->start, &offl, &offc);
+ x1= get_char_pos(st, line->line, marker->start) - st->left + offc;
+ y1= cy + offl;
+ wrap_offset(st, line, marker->end, &offl, &offc);
+ x2= get_char_pos(st, line->line, marker->end) - st->left + offc;
+ y2= cy + offl;
+
+ glColor3ub(marker->color[0], marker->color[1], marker->color[2]);
+ x= st->showlinenrs ? TXT_OFFSET + TEXTXLOC : TXT_OFFSET;
+ y= curarea->winy-3;
+
+ if (y1==y2) {
+ y -= y1*st->lheight;
+ glBegin(GL_LINE_LOOP);
+ glVertex2i(x+x2*spacetext_get_fontwidth(st)+1, y);
+ glVertex2i(x+x1*spacetext_get_fontwidth(st)-2, y);
+ glVertex2i(x+x1*spacetext_get_fontwidth(st)-2, y-st->lheight);
+ glVertex2i(x+x2*spacetext_get_fontwidth(st)+1, y-st->lheight);
+ glEnd();
+ } else {
+ y -= y1*st->lheight;
+ glBegin(GL_LINE_STRIP);
+ glVertex2i(curarea->winx, y);
+ glVertex2i(x+x1*spacetext_get_fontwidth(st)-2, y);
+ glVertex2i(x+x1*spacetext_get_fontwidth(st)-2, y-st->lheight);
+ glVertex2i(curarea->winx, y-st->lheight);
+ glEnd();
+ y-=st->lheight;
+ for (i=y1+1; i<y2; i++) {
+ glBegin(GL_LINES);
+ glVertex2i(x, y);
+ glVertex2i(curarea->winx, y);
+ glVertex2i(x, y-st->lheight);
+ glVertex2i(curarea->winx, y-st->lheight);
+ glEnd();
+ y-=st->lheight;
+ }
+ glBegin(GL_LINE_STRIP);
+ glVertex2i(x, y);
+ glVertex2i(x+x2*spacetext_get_fontwidth(st)+1, y);
+ glVertex2i(x+x2*spacetext_get_fontwidth(st)+1, y-st->lheight);
+ glVertex2i(x, y-st->lheight);
+ glEnd();
+ }
+
+ break;
+ }
+ if (line==bottom) break;
}
+ }
+}
+
+static void draw_cursor(SpaceText *st) {
+ Text *text= st->text;
+ int vcurl, vcurc, vsell, vselc, hidden=0;
+ int offl, offc, x, y, w, i;
+
+ /* Draw the selection */
+ if (text->curl!=text->sell || text->curc!=text->selc) {
+
+ /* Convert all to view space character coordinates */
+ wrap_offset(st, text->curl, text->curc, &offl, &offc);
+ vcurl = txt_get_span(text->lines.first, text->curl) - st->top + offl;
+ vcurc = get_char_pos(st, text->curl->line, text->curc) - st->left + offc;
+ wrap_offset(st, text->sell, text->selc, &offl, &offc);
+ vsell = txt_get_span(text->lines.first, text->sell) - st->top + offl;
+ vselc = get_char_pos(st, text->sell->line, text->selc) - st->left + offc;
+
+ if (vcurc<0) vcurc=0;
+ if (vselc<0) vselc=0, hidden=1;
- while (linef && linef != linel) {
- h= txt_get_span(text->lines.first, linef) - st->top;
- if (h>st->viewlines) break;
-
- glRecti(x, curarea->winy-st->lheight*(h)-2, curarea->winx, curarea->winy-st->lheight*(h+1)-2);
- if(st->showlinenrs)
- glRecti(TXT_OFFSET+TEXTXLOC-4, curarea->winy-st->lheight*(h+1)-2, TXT_OFFSET+TEXTXLOC, curarea->winy-st->lheight*(h+2)-2);
- else
- glRecti(TXT_OFFSET-4, curarea->winy-st->lheight*(h+1)-2, TXT_OFFSET, curarea->winy-st->lheight*(h+2)-2);
+ BIF_ThemeColor(TH_SHADE2);
+ x= st->showlinenrs ? TXT_OFFSET + TEXTXLOC : TXT_OFFSET;
+ y= curarea->winy-2;
- if(st->showlinenrs)
- x= TXT_OFFSET + TEXTXLOC;
+ if (vcurl==vsell) {
+ y -= vcurl*st->lheight;
+ if (vcurc < vselc)
+ glRecti(x+vcurc*spacetext_get_fontwidth(st)-1, y, x+vselc*spacetext_get_fontwidth(st), y-st->lheight);
else
- x= TXT_OFFSET;
-
- linef= linef->next;
+ glRecti(x+vselc*spacetext_get_fontwidth(st)-1, y, x+vcurc*spacetext_get_fontwidth(st), y-st->lheight);
+ } else {
+ int froml, fromc, tol, toc;
+ if (vcurl < vsell) {
+ froml= vcurl; tol= vsell;
+ fromc= vcurc; toc= vselc;
+ } else {
+ froml= vsell; tol= vcurl;
+ fromc= vselc; toc= vcurc;
+ }
+ y -= froml*st->lheight;
+ glRecti(x+fromc*spacetext_get_fontwidth(st)-1, y, curarea->winx, y-st->lheight); y-=st->lheight;
+ for (i=froml+1; i<tol; i++)
+ glRecti(x-4, y, curarea->winx, y-st->lheight), y-=st->lheight;
+ glRecti(x-4, y, x+toc*spacetext_get_fontwidth(st), y-st->lheight); y-=st->lheight;
}
-
- h= txt_get_span(text->lines.first, linef) - st->top;
-
- i= text_draw(st, linel->line, st->left, charl, 0, 0, 0, NULL);
- if(i) glRecti(x, curarea->winy-st->lheight*(h)-2, i, curarea->winy-st->lheight*(h+1)-2);
-
+ } else {
+ wrap_offset(st, text->sell, text->selc, &offl, &offc);
+ vsell = txt_get_span(text->lines.first, text->sell) - st->top + offl;
+ vselc = get_char_pos(st, text->sell->line, text->selc) - st->left + offc;
+ if (vselc<0) vselc=0, hidden=1;
}
- do_brackets();
- BIF_ThemeColor(TH_TEXT);
+ if (!hidden) {
+ /* Draw the cursor itself (we draw the sel. cursor as this is the leading edge) */
+ x= st->showlinenrs ? TXT_OFFSET + TEXTXLOC : TXT_OFFSET;
+ x += vselc*spacetext_get_fontwidth(st);
+ y= curarea->winy-2 - vsell*st->lheight;
+
+ if (st->overwrite) {
+ char ch= text->sell->line[text->selc];
+ if (!ch) ch= ' ';
+ w= BMF_GetCharacterWidth(spacetext_get_font(st), ch);
+ BIF_ThemeColor(TH_HILITE);
+ glRecti(x, y-st->lheight-1, x+w, y-st->lheight+1);
+ } else {
+ BIF_ThemeColor(TH_HILITE);
+ glRecti(x-1, y, x+1, y-st->lheight);
+ }
+ }
}
static void calc_text_rcts(SpaceText *st)
@@ -859,6 +1062,38 @@ static void screen_skip(SpaceText *st, int lines)
if (st->top<0) st->top= 0;
}
+static void cursor_skip(SpaceText *st, int lines, int sel)
+{
+ Text *text;
+ TextLine **linep;
+ int oldl, oldc, *charp;
+
+ if (!st) return;
+ if (st->spacetype != SPACE_TEXT) return;
+ if (!st->text) return;
+
+ text= st->text;
+
+ if (sel) linep= &text->sell, charp= &text->selc;
+ else linep= &text->curl, charp= &text->curc;
+ oldl= txt_get_span(text->lines.first, *linep);
+ oldc= *charp;
+
+ while (lines>0 && (*linep)->next) {
+ *linep= (*linep)->next;
+ lines--;
+ }
+ while (lines<0 && (*linep)->prev) {
+ *linep= (*linep)->prev;
+ lines++;
+ }
+
+ if (*charp > (*linep)->len) *charp= (*linep)->len;
+
+ if (!sel) txt_pop_sel(st->text);
+ txt_undo_add_toop(st->text, sel?UNDO_STO:UNDO_CTO, oldl, oldc, txt_get_span(text->lines.first, *linep), *charp);
+}
+
/*
* mode 1 == view scroll
* mode 2 == scrollbar
@@ -874,10 +1109,8 @@ static void do_textscroll(SpaceText *st, int mode)
st->flags|= ST_SCROLL_SELECT;
- glDrawBuffer(GL_FRONT);
- uiEmboss(st->txtbar.xmin, st->txtbar.ymin, st->txtbar.xmax, st->txtbar.ymax, st->flags & ST_SCROLL_SELECT);
- bglFlush();
- glDrawBuffer(GL_BACK);
+ scrarea_do_windraw(curarea);
+ screen_swapbuffers();
getmouseco_areawin(mval);
old[0]= hold[0]= mval[0];
@@ -895,9 +1128,12 @@ static void do_textscroll(SpaceText *st, int mode)
if (delta[0] || delta[1]) {
screen_skip(st, delta[1]);
- st->left+= delta[0];
- if (st->left<0) st->left= 0;
-
+ if (st->wordwrap) {
+ st->left= 0;
+ } else {
+ st->left+= delta[0];
+ if (st->left<0) st->left= 0;
+ }
scrarea_do_windraw(curarea);
screen_swapbuffers();
@@ -912,10 +1148,8 @@ static void do_textscroll(SpaceText *st, int mode)
}
st->flags^= ST_SCROLL_SELECT;
- glDrawBuffer(GL_FRONT);
- uiEmboss(st->txtbar.xmin, st->txtbar.ymin, st->txtbar.xmax, st->txtbar.ymax, st->flags & ST_SCROLL_SELECT);
- bglFlush();
- glDrawBuffer(GL_BACK);
+ scrarea_do_windraw(curarea);
+ screen_swapbuffers();
}
static void do_selection(SpaceText *st, int selecting)
@@ -957,7 +1191,7 @@ static void do_selection(SpaceText *st, int selecting)
scrarea_do_windraw(curarea);
screen_swapbuffers();
- } else if (mval[0]<0 || mval[0]>curarea->winx) {
+ } else if (!st->wordwrap && (mval[0]<0 || mval[0]>curarea->winx)) {
if (mval[0]>curarea->winx) st->left++;
else if (mval[0]<0 && st->left>0) st->left--;
@@ -986,19 +1220,403 @@ static void do_selection(SpaceText *st, int selecting)
if (sell!=linep2 || selc!=charp2)
txt_undo_add_toop(st->text, UNDO_STO, sell, selc, linep2, charp2);
+
+ pop_space_text(st);
+}
+
+static int do_suggest_select(SpaceText *st)
+{
+ SuggItem *item, *first, *last, *sel;
+ short mval[2];
+ TextLine *tmp;
+ int l, x, y, w, h, i;
+ int tgti, *top;
+
+ if (!st || !st->text) return 0;
+ if (!texttool_text_is_active(st->text)) return 0;
+
+ first = texttool_suggest_first();
+ last = texttool_suggest_last();
+ sel = texttool_suggest_selected();
+ top = texttool_suggest_top();
+
+ if (!last || !first)
+ return 0;
+
+ /* Count the visible lines to the cursor */
+ for (tmp=st->text->curl, l=-st->top; tmp; tmp=tmp->prev, l++);
+ if (l<0) return 0;
+
+ if(st->showlinenrs) {
+ x = spacetext_get_fontwidth(st)*(st->text->curc-st->left) + TXT_OFFSET + TEXTXLOC - 4;
+ } else {
+ x = spacetext_get_fontwidth(st)*(st->text->curc-st->left) + TXT_OFFSET - 4;
+ }
+ y = curarea->winy - st->lheight*l - 2;
+
+ w = SUGG_LIST_WIDTH*spacetext_get_fontwidth(st) + 20;
+ h = SUGG_LIST_SIZE*st->lheight + 8;
+
+ getmouseco_areawin(mval);
+
+ if (mval[0]<x || x+w<mval[0] || mval[1]<y-h || y<mval[1])
+ return 0;
+
+ /* Work out which of the items is at the top of the visible list */
+ for (i=0, item=first; i<*top && item->next; i++, item=item->next);
+
+ /* Work out the target item index in the visible list */
+ tgti = (y-mval[1]-4) / st->lheight;
+ if (tgti<0 || tgti>SUGG_LIST_SIZE)
+ return 1;
+
+ for (i=tgti; i>0 && item->next; i--, item=item->next);
+ if (item)
+ texttool_suggest_select(item);
+ return 1;
+}
+
+static void pop_suggest_list() {
+ SuggItem *item, *sel;
+ int *top, i;
+
+ item= texttool_suggest_first();
+ sel= texttool_suggest_selected();
+ top= texttool_suggest_top();
+
+ i= 0;
+ while (item && item != sel) {
+ item= item->next;
+ i++;
+ }
+ if (i > *top+SUGG_LIST_SIZE-1)
+ *top= i-SUGG_LIST_SIZE+1;
+ else if (i < *top)
+ *top= i;
+}
+
+void draw_documentation(SpaceText *st)
+{
+ TextLine *tmp;
+ char *docs, buf[DOC_WIDTH+1], *p;
+ int len, i, br, lines;
+ int boxw, boxh, l, x, y, top;
+
+ if (!st || !st->text) return;
+ if (!texttool_text_is_active(st->text)) return;
+
+ docs = texttool_docs_get();
+
+ if (!docs) return;
+
+ /* Count the visible lines to the cursor */
+ for (tmp=st->text->curl, l=-st->top; tmp; tmp=tmp->prev, l++);
+ if (l<0) return;
+
+ if(st->showlinenrs) {
+ x= spacetext_get_fontwidth(st)*(st->text->curc-st->left) + TXT_OFFSET + TEXTXLOC - 4;
+ } else {
+ x= spacetext_get_fontwidth(st)*(st->text->curc-st->left) + TXT_OFFSET - 4;
+ }
+ if (texttool_suggest_first()) {
+ x += SUGG_LIST_WIDTH*spacetext_get_fontwidth(st) + 50;
+ }
+
+ top= y= curarea->winy - st->lheight*l - 2;
+ len= strlen(docs);
+ boxw= DOC_WIDTH*spacetext_get_fontwidth(st) + 20;
+ boxh= (DOC_HEIGHT+1)*st->lheight;
+
+ /* Draw panel */
+ BIF_ThemeColor(TH_BACK);
+ glRecti(x, y, x+boxw, y-boxh);
+ BIF_ThemeColor(TH_SHADE1);
+ glBegin(GL_LINE_LOOP);
+ glVertex2i(x, y);
+ glVertex2i(x+boxw, y);
+ glVertex2i(x+boxw, y-boxh);
+ glVertex2i(x, y-boxh);
+ glEnd();
+ glBegin(GL_LINE_LOOP);
+ glVertex2i(x+boxw-10, y-7);
+ glVertex2i(x+boxw-4, y-7);
+ glVertex2i(x+boxw-7, y-2);
+ glEnd();
+ glBegin(GL_LINE_LOOP);
+ glVertex2i(x+boxw-10, y-boxh+7);
+ glVertex2i(x+boxw-4, y-boxh+7);
+ glVertex2i(x+boxw-7, y-boxh+2);
+ glEnd();
+ BIF_ThemeColor(TH_TEXT);
+
+ i= 0; br= DOC_WIDTH; lines= -doc_scroll;
+ for (p=docs; *p; p++) {
+ if (*p == '\r' && *(++p) != '\n') *(--p)= '\n'; /* Fix line endings */
+ if (*p == ' ' || *p == '\t')
+ br= i;
+ else if (*p == '\n') {
+ buf[i]= '\0';
+ if (lines>=0) {
+ y -= st->lheight;
+ text_draw(st, buf, 0, 0, 1, x+4, y-3, NULL);
+ }
+ i= 0; br= DOC_WIDTH; lines++;
+ }
+ buf[i++]= *p;
+ if (i == DOC_WIDTH) { /* Reached the width, go to last break and wrap there */
+ buf[br]= '\0';
+ if (lines>=0) {
+ y -= st->lheight;
+ text_draw(st, buf, 0, 0, 1, x+4, y-3, NULL);
+ }
+ p -= i-br-1; /* Rewind pointer to last break */
+ i= 0; br= DOC_WIDTH; lines++;
+ }
+ if (lines >= DOC_HEIGHT) break;
+ }
+ if (doc_scroll > 0 && lines < DOC_HEIGHT) {
+ doc_scroll--;
+ draw_documentation(st);
+ }
+}
+
+void draw_suggestion_list(SpaceText *st)
+{
+ SuggItem *item, *first, *last, *sel;
+ TextLine *tmp;
+ char str[SUGG_LIST_WIDTH+1];
+ int w, boxw=0, boxh, i, l, x, y, b, *top;
+
+ if (!st || !st->text) return;
+ if (!texttool_text_is_active(st->text)) return;
+
+ first = texttool_suggest_first();
+ last = texttool_suggest_last();
+
+ if (!first || !last) return;
+
+ pop_suggest_list();
+ sel = texttool_suggest_selected();
+ top = texttool_suggest_top();
+
+ /* Count the visible lines to the cursor */
+ for (tmp=st->text->curl, l=-st->top; tmp; tmp=tmp->prev, l++);
+ if (l<0) return;
+
+ if(st->showlinenrs) {
+ x = spacetext_get_fontwidth(st)*(st->text->curc-st->left) + TXT_OFFSET + TEXTXLOC - 4;
+ } else {
+ x = spacetext_get_fontwidth(st)*(st->text->curc-st->left) + TXT_OFFSET - 4;
+ }
+ y = curarea->winy - st->lheight*l - 2;
+
+ boxw = SUGG_LIST_WIDTH*spacetext_get_fontwidth(st) + 20;
+ boxh = SUGG_LIST_SIZE*st->lheight + 8;
+
+ BIF_ThemeColor(TH_SHADE1);
+ glRecti(x-1, y+1, x+boxw+1, y-boxh-1);
+ BIF_ThemeColor(TH_BACK);
+ glRecti(x, y, x+boxw, y-boxh);
+
+ /* Set the top 'item' of the visible list */
+ for (i=0, item=first; i<*top && item->next; i++, item=item->next);
+
+ for (i=0; i<SUGG_LIST_SIZE && item; i++, item=item->next) {
+
+ y -= st->lheight;
+
+ strncpy(str, item->name, SUGG_LIST_WIDTH);
+ str[SUGG_LIST_WIDTH] = '\0';
+
+ w = BMF_GetStringWidth(spacetext_get_font(st), str);
+
+ if (item == sel) {
+ BIF_ThemeColor(TH_SHADE2);
+ glRecti(x+16, y-3, x+16+w, y+st->lheight-3);
+ }
+ b=1; /* b=1 colour block, text is default. b=0 no block, colour text */
+ switch (item->type) {
+ case 'k': BIF_ThemeColor(TH_SYNTAX_B); b=0; break;
+ case 'm': BIF_ThemeColor(TH_TEXT); break;
+ case 'f': BIF_ThemeColor(TH_SYNTAX_L); break;
+ case 'v': BIF_ThemeColor(TH_SYNTAX_N); break;
+ case '?': BIF_ThemeColor(TH_TEXT); b=0; break;
+ }
+ if (b) {
+ glRecti(x+8, y+2, x+11, y+5);
+ BIF_ThemeColor(TH_TEXT);
+ }
+ text_draw(st, str, 0, 0, 1, x+16, y-1, NULL);
+
+ if (item == last) break;
+ }
+}
+
+static short check_blockhandler(SpaceText *st, short handler) {
+ short a;
+ for(a=0; a<SPACE_MAXHANDLER; a+=2)
+ if (st->blockhandler[a]==handler) return 1;
+ return 0;
+}
+
+static void text_panel_find(short cntrl) // TEXT_HANDLER_FIND
+{
+ uiBlock *block;
+
+ if (!g_find_str || !g_replace_str) {
+ g_find_str= MEM_mallocN(TXT_MAXFINDSTR+1, "find_string");
+ g_replace_str= MEM_mallocN(TXT_MAXFINDSTR+1, "replace_string");
+ g_find_str[0]= g_replace_str[0]= '\0';
+ }
+
+ block= uiNewBlock(&curarea->uiblocks, "text_panel_find", UI_EMBOSS, UI_HELV, curarea->win);
+ uiPanelControl(UI_PNL_SOLID | UI_PNL_CLOSE | cntrl);
+ uiSetPanelHandler(TEXT_HANDLER_FIND); // for close and esc
+ if(uiNewPanel(curarea, block, "Find & Replace", "Text", curarea->winx-230, curarea->winy-130, 260, 120)==0) return;
+
+ uiBlockBeginAlign(block);
+ uiDefButC(block, TEX, 0, "Find: ", 0,80,220,20, g_find_str, 0,(float)TXT_MAXFINDSTR, 0,0, "");
+ uiDefIconBut(block, BUT, B_PASTEFIND, ICON_TEXT, 220,80,20,20, NULL, 0,0,0,0, "Copy from selection");
+ uiDefButC(block, TEX, 0, "Replace: ", 0,60,220,20, g_replace_str, 0,(float)TXT_MAXFINDSTR, 0,0, "");
+ uiDefIconBut(block, BUT, B_PASTEREPLACE, ICON_TEXT, 220,60,20,20, NULL, 0,0,0,0, "Copy from selection");
+ uiBlockEndAlign(block);
+ uiDefButBitI(block, TOG, TXT_FIND_WRAP, 0,"Wrap Around", 0,30,110,20,&g_find_flags,0,0,0,0,"Wrap search around current text");
+ uiDefButBitI(block, TOG, TXT_FIND_ALLTEXTS,0,"Search All Texts", 110,30,130,20,&g_find_flags,0,0,0,0,"Search in each text");
+ uiDefBut(block, BUT, B_TEXTFIND, "Find", 0,0,50,20, NULL, 0,0,0,0, "Find next");
+ uiDefBut(block, BUT, B_TEXTREPLACE, "Replace/Find", 50,0,110,20, NULL, 0,0,0,0, "Replace then find next");
+ uiDefBut(block, BUT, B_TEXTMARKALL, "Mark All", 160,0,80,20, NULL, 0,0,0,0, "Mark each occurrence to edit all from one");
+}
+
+/* mode: 0 find only, 1 replace/find, 2 mark all occurrences */
+void find_and_replace(SpaceText *st, short mode) {
+ char *tmp;
+ Text *start= NULL, *text= st->text;
+ int flags, first= 1;
+
+ if (!check_blockhandler(st, TEXT_HANDLER_FIND)) {
+ toggle_blockhandler(st->area, TEXT_HANDLER_FIND, UI_PNL_TO_MOUSE);
+ return;
+ }
+
+ if (!g_find_str || !g_replace_str) return;
+ if (g_find_str[0] == '\0') return;
+ flags= g_find_flags;
+ if (flags & TXT_FIND_ALLTEXTS) flags ^= TXT_FIND_WRAP;
+
+ do {
+ if (first)
+ txt_clear_markers(text, TMARK_GRP_FINDALL, 0);
+ first= 0;
+
+ /* Replace current */
+ if (mode && txt_has_sel(text)) {
+ tmp= txt_sel_to_buf(text);
+ if (strcmp(g_find_str, tmp)==0) {
+ if (mode==1) {
+ txt_insert_buf(text, g_replace_str);
+ if (st->showsyntax) txt_format_line(st, text->curl, 1);
+ } else if (mode==2) {
+ char color[4];
+ BIF_GetThemeColor4ubv(TH_SHADE2, color);
+ if (txt_find_marker(text, text->curl, text->selc, TMARK_GRP_FINDALL, 0)) {
+ if (tmp) MEM_freeN(tmp), tmp=NULL;
+ break;
+ }
+ txt_add_marker(text, text->curl, text->curc, text->selc, color, TMARK_GRP_FINDALL, TMARK_EDITALL);
+ }
+ }
+ MEM_freeN(tmp);
+ tmp= NULL;
+ }
+
+ /* Find next */
+ if (txt_find_string(text, g_find_str, flags & TXT_FIND_WRAP)) {
+ pop_space_text(st);
+ } else if (flags & TXT_FIND_ALLTEXTS) {
+ if (text==start) break;
+ if (!start) start= text;
+ if (text->id.next)
+ text= st->text= text->id.next;
+ else
+ text= st->text= G.main->text.first;
+ txt_move_toline(text, 0, 0);
+ pop_space_text(st);
+ first= 1;
+ } else {
+ okee("Text not found: %s", g_find_str);
+ break;
+ }
+ } while (mode==2);
+}
+
+static void do_find_buttons(val) {
+ Text *text;
+ SpaceText *st;
+ char *tmp;
+
+ st= curarea->spacedata.first;
+ if (!st || st->spacetype != SPACE_TEXT) return;
+ text= st->text;
+ if (!text) return;
+
+ switch (val) {
+ case B_PASTEFIND:
+ if (!g_find_str) break;
+ tmp= txt_sel_to_buf(text);
+ strncpy(g_find_str, tmp, TXT_MAXFINDSTR);
+ MEM_freeN(tmp);
+ break;
+ case B_PASTEREPLACE:
+ if (!g_replace_str) break;
+ tmp= txt_sel_to_buf(text);
+ strncpy(g_replace_str, tmp, TXT_MAXFINDSTR);
+ MEM_freeN(tmp);
+ break;
+ case B_TEXTFIND:
+ find_and_replace(st, 0);
+ break;
+ case B_TEXTREPLACE:
+ find_and_replace(st, 1);
+ break;
+ case B_TEXTMARKALL:
+ find_and_replace(st, 2);
+ break;
+ }
+}
+
+static void text_blockhandlers(ScrArea *sa)
+{
+ SpaceText *st= sa->spacedata.first;
+ short a;
+
+ /* warning; blocks need to be freed each time, handlers dont remove */
+ uiFreeBlocksWin(&sa->uiblocks, sa->win);
+
+ for(a=0; a<SPACE_MAXHANDLER; a+=2) {
+ /* clear action value for event */
+ switch(st->blockhandler[a]) {
+ case TEXT_HANDLER_FIND:
+ text_panel_find(st->blockhandler[a+1]);
+ break;
+ }
+ }
+ uiDrawBlocksPanels(sa, 0);
}
void drawtextspace(ScrArea *sa, void *spacedata)
{
SpaceText *st= curarea->spacedata.first;
Text *text;
- int i;
+ int i, x, y;
TextLine *tmp;
char linenr[12];
float col[3];
int linecount = 0;
if (st==NULL || st->spacetype != SPACE_TEXT) return;
+
+ bwin_clear_viewmat(sa->win); /* clear buttons view */
+ glLoadIdentity();
BIF_GetThemeColor3fv(TH_BACK, col);
glClearColor(col[0], col[1], col[2], 0.0);
@@ -1018,27 +1636,27 @@ void drawtextspace(ScrArea *sa, void *spacedata)
else st->viewlines= 0;
if(st->showlinenrs) {
- cpack(0x8c787c);
+ BIF_ThemeColor(TH_GRID);
glRecti(23, 0, (st->lheight==15)?63:59, curarea->winy - 2);
}
- BIF_ThemeColor(TH_TEXT);
-
draw_cursor(st);
tmp= text->lines.first;
for (i= 0; i<st->top && tmp; i++) {
+ if (st->showsyntax && !tmp->format) txt_format_line(st, tmp, 0);
tmp= tmp->next;
linecount++;
}
-
- if(st->showsyntax) {
- if (tmp && !tmp->format) {
- get_format_string(st);
+
+ y= curarea->winy-st->lheight;
+ x= st->showlinenrs ? TXT_OFFSET + TEXTXLOC : TXT_OFFSET;
+
+ BIF_ThemeColor(TH_TEXT);
+ for (i=0; y>0 && i<st->viewlines && tmp; i++, tmp= tmp->next) {
+ if (st->showsyntax && !tmp->format) {
+ txt_format_line(st, tmp, 0);
}
- }
-
- for (i=0; i<st->viewlines && tmp; i++, tmp= tmp->next) {
if(st->showlinenrs) {
/*Change the color of the current line the cursor is on*/
if(tmp == text->curl) {
@@ -1048,20 +1666,33 @@ void drawtextspace(ScrArea *sa, void *spacedata)
}
if(((float)(i + linecount + 1)/10000.0) < 1.0) {
sprintf(linenr, "%4d", i + linecount + 1);
- glRasterPos2i(TXT_OFFSET - 7, curarea->winy-st->lheight*(i+1));
+ glRasterPos2i(TXT_OFFSET - 7, y);
} else {
sprintf(linenr, "%5d", i + linecount + 1);
- glRasterPos2i(TXT_OFFSET - 11, curarea->winy-st->lheight*(i+1));
+ glRasterPos2i(TXT_OFFSET - 11, y);
}
BIF_ThemeColor(TH_TEXT);
BMF_DrawString(spacetext_get_font(st), linenr);
- text_draw(st, tmp->line, st->left, 0, 1, TXT_OFFSET + TEXTXLOC, curarea->winy-st->lheight*(i+1), tmp->format);
- } else
- text_draw(st, tmp->line, st->left, 0, 1, TXT_OFFSET, curarea->winy-st->lheight*(i+1), tmp->format);
+ }
+ if (st->wordwrap) {
+ int lines = text_draw_wrapped(st, tmp->line, x, y, curarea->winx-x, tmp->format);
+ y -= lines*st->lheight;
+ } else {
+ text_draw(st, tmp->line, st->left, 0, 1, x, y, tmp->format);
+ y -= st->lheight;
+ }
}
+
+ draw_brackets(st);
+ draw_markers(st);
draw_textscroll(st);
-
+ draw_documentation(st);
+ draw_suggestion_list(st);
+
+ bwin_scalematrix(sa->win, st->blockscale, st->blockscale, st->blockscale);
+ text_blockhandlers(sa);
+
curarea->win_swap= WIN_BACK_OK;
}
@@ -1075,15 +1706,19 @@ void pop_space_text (SpaceText *st)
if(!st->text) return;
if(!st->text->curl) return;
- i= txt_get_span(st->text->lines.first, st->text->curl);
+ i= txt_get_span(st->text->lines.first, st->text->sell);
if (st->top+st->viewlines <= i || st->top > i) {
st->top= i - st->viewlines/2;
}
- x= text_draw(st, st->text->curl->line, st->left, st->text->curc, 0, 0, 0, NULL);
+ if (st->wordwrap) {
+ st->left= 0;
+ } else {
+ x= text_draw(st, st->text->sell->line, st->left, st->text->selc, 0, 0, 0, NULL);
- if (x==0 || x>curarea->winx) {
- st->left= st->text->curc-0.5*(curarea->winx)/spacetext_get_fontwidth(st);
+ if (x==0 || x>curarea->winx) {
+ st->left= st->text->curc-0.5*(curarea->winx)/spacetext_get_fontwidth(st);
+ }
}
if (st->top < 0) st->top= 0;
@@ -1103,7 +1738,7 @@ void add_text_fs(char *file) /* bad but cant pass an as arg here */
st->top= 0;
- if (st->showsyntax) get_format_string(st);
+ if (st->showsyntax) txt_format_text(st);
allqueue(REDRAWTEXT, 0);
allqueue(REDRAWHEADERS, 0);
}
@@ -1141,6 +1776,9 @@ void txt_write_file(Text *text)
{
FILE *fp;
TextLine *tmp;
+ int res;
+ struct stat st;
+ char file[FILE_MAXDIR+FILE_MAXFILE];
/* Do we need to get a filename? */
if (text->flags & TXT_ISMEM) {
@@ -1148,19 +1786,22 @@ void txt_write_file(Text *text)
activate_fileselect(FILE_SPECIAL, "SAVE TEXT FILE", text->name, save_mem_text);
else
activate_fileselect(FILE_SPECIAL, "SAVE TEXT FILE", text->id.name+2, save_mem_text);
- return;
+ return;
}
+
+ BLI_strncpy(file, text->name, FILE_MAXDIR+FILE_MAXFILE);
+ BLI_convertstringcode(file, G.sce);
/* Should we ask to save over? */
if (text->flags & TXT_ISTMP) {
- if (BLI_exists(text->name)) {
+ if (BLI_exists(file)) {
if (!okee("Save over")) return;
} else if (!okee("Create new file")) return;
text->flags ^= TXT_ISTMP;
}
- fp= fopen(text->name, "w");
+ fp= fopen(file, "w");
if (fp==NULL) {
error("Unable to save file");
return;
@@ -1175,6 +1816,9 @@ void txt_write_file(Text *text)
}
fclose (fp);
+
+ res= stat(file, &st);
+ text->mtime= st.st_mtime;
if (text->flags & TXT_ISDIRTY) text->flags ^= TXT_ISDIRTY;
}
@@ -1233,7 +1877,7 @@ int jumptoline_interactive(SpaceText *st) {
int bufferlength;
static char *copybuffer = NULL;
-void txt_copy_selectbuffer (Text *text)
+static void txt_copy_selectbuffer (Text *text)
{
int length=0;
TextLine *tmp, *linef, *linel;
@@ -1386,44 +2030,6 @@ void txt_copy_clipboard(Text *text) {
}
}
-/*
- * again==0 show find panel or find
- * again==1 find text again */
-void txt_find_panel(SpaceText *st, int again)
-{
- Text *text=st->text;
- char *findstr= last_txt_find_string;
-
- if (again==0) {
- findstr= txt_sel_to_buf(text);
- } else if (again==1) {
- char buf[256];
-
- if (findstr && strlen(findstr)<(sizeof(buf)-1))
- strcpy(buf, findstr);
- else
- buf[0]= 0;
-
- if (sbutton(buf, 0, sizeof(buf)-1, "Find: ") && buf[0])
- findstr= BLI_strdup(buf);
- else
- findstr= NULL;
- }
-
- if (findstr!=last_txt_find_string) {
- if (last_txt_find_string)
- MEM_freeN(last_txt_find_string);
- last_txt_find_string= findstr;
- }
-
- if (findstr) {
- if (txt_find_string(text, findstr))
- pop_space_text(st);
- else
- error("Not found: %s", findstr);
- }
-}
-
void run_python_script(SpaceText *st)
{
char *py_filename;
@@ -1458,6 +2064,505 @@ static void set_tabs(Text *text)
st->currtab_set = setcurr_tab(text);
}
+static void wrap_move_bol(SpaceText *st, short sel) {
+ int offl, offc, lin;
+ Text *text= st->text;
+
+ lin= txt_get_span(text->lines.first, text->sell);
+ wrap_offset(st, text->sell, text->selc, &offl, &offc);
+
+ if (sel) {
+ txt_undo_add_toop(text, UNDO_STO, lin, text->selc, lin, -offc);
+ text->selc= -offc;
+ } else {
+ txt_undo_add_toop(text, UNDO_CTO, lin, text->curc, lin, -offc);
+ text->curc= -offc;
+ txt_pop_sel(text);
+ }
+}
+
+static void wrap_move_eol(SpaceText *st, short sel) {
+ int offl, offc, lin, startl, c;
+ Text *text= st->text;
+
+ lin= txt_get_span(text->lines.first, text->sell);
+ wrap_offset(st, text->sell, text->selc, &offl, &offc);
+ startl= offl;
+ c= text->selc;
+ while (offl==startl && text->sell->line[c]!='\0') {
+ c++;
+ wrap_offset(st, text->sell, c, &offl, &offc);
+ } if (offl!=startl) c--;
+
+ if (sel) {
+ txt_undo_add_toop(text, UNDO_STO, lin, text->selc, lin, c);
+ text->selc= c;
+ } else {
+ txt_undo_add_toop(text, UNDO_CTO, lin, text->curc, lin, c);
+ text->curc= c;
+ txt_pop_sel(text);
+ }
+}
+
+static void wrap_move_up(SpaceText *st, short sel) {
+ int offl, offl_1, offc, fromline, toline, c, target;
+ Text *text= st->text;
+
+ wrap_offset(st, text->sell, 0, &offl_1, &offc);
+ wrap_offset(st, text->sell, text->selc, &offl, &offc);
+ fromline= toline= txt_get_span(text->lines.first, text->sell);
+ target= text->selc + offc;
+
+ if (offl==offl_1) {
+ if (!text->sell->prev) {
+ txt_move_bol(text, sel);
+ return;
+ }
+ toline--;
+ c= text->sell->prev->len; /* End of prev. line */
+ wrap_offset(st, text->sell->prev, c, &offl, &offc);
+ c= -offc+target;
+ } else {
+ c= -offc-1; /* End of prev. line */
+ wrap_offset(st, text->sell, c, &offl, &offc);
+ c= -offc+target;
+ }
+ if (c<0) c=0;
+
+ if (sel) {
+ txt_undo_add_toop(text, UNDO_STO, fromline, text->selc, toline, c);
+ if (toline<fromline) text->sell= text->sell->prev;
+ if (c>text->sell->len) c= text->sell->len;
+ text->selc= c;
+ } else {
+ txt_undo_add_toop(text, UNDO_CTO, fromline, text->curc, toline, c);
+ if (toline<fromline) text->curl= text->curl->prev;
+ if (c>text->curl->len) c= text->curl->len;
+ text->curc= c;
+ txt_pop_sel(text);
+ }
+}
+
+static void wrap_move_down(SpaceText *st, short sel) {
+ int offl, startoff, offc, fromline, toline, c, target;
+ Text *text= st->text;
+
+ wrap_offset(st, text->sell, text->selc, &offl, &offc);
+ fromline= toline= txt_get_span(text->lines.first, text->sell);
+ target= text->selc + offc;
+ startoff= offl;
+ c= text->selc;
+ while (offl==startoff && text->sell->line[c]!='\0') {
+ c++;
+ wrap_offset(st, text->sell, c, &offl, &offc);
+ }
+
+ if (text->sell->line[c]=='\0') {
+ if (!text->sell->next) {
+ txt_move_eol(text, sel);
+ return;
+ }
+ toline++;
+ c= target;
+ } else {
+ c += target;
+ if (c > text->sell->len) c= text->sell->len;
+ }
+ if (c<0) c=0;
+
+ if (sel) {
+ txt_undo_add_toop(text, UNDO_STO, fromline, text->selc, toline, c);
+ if (toline>fromline) text->sell= text->sell->next;
+ if (c>text->sell->len) c= text->sell->len;
+ text->selc= c;
+ } else {
+ txt_undo_add_toop(text, UNDO_CTO, fromline, text->curc, toline, c);
+ if (toline>fromline) text->curl= text->curl->next;
+ if (c>text->curl->len) c= text->curl->len;
+ text->curc= c;
+ txt_pop_sel(text);
+ }
+}
+
+static void get_suggest_prefix(Text *text, int offset) {
+ int i, len;
+ char *line, tmp[256];
+
+ if (!text) return;
+ if (!texttool_text_is_active(text)) return;
+
+ line= text->curl->line;
+ for (i=text->curc-1+offset; i>=0; i--)
+ if (!check_identifier(line[i]))
+ break;
+ i++;
+ len= text->curc-i+offset;
+ if (len > 255) {
+ printf("Suggestion prefix too long\n");
+ len = 255;
+ }
+ strncpy(tmp, line+i, len);
+ tmp[len]= '\0';
+ texttool_suggest_prefix(tmp);
+}
+
+static void confirm_suggestion(Text *text, int skipleft) {
+ int i, over=0;
+ char *line;
+ SuggItem *sel;
+
+ if (!text) return;
+ if (!texttool_text_is_active(text)) return;
+
+ sel = texttool_suggest_selected();
+ if (!sel) return;
+
+ line= text->curl->line;
+ i=text->curc-skipleft-1;
+ while (i>=0) {
+ if (!check_identifier(line[i]))
+ break;
+ over++;
+ i--;
+ }
+
+ for (i=0; i<skipleft; i++)
+ txt_move_left(text, 0);
+ for (i=0; i<over; i++)
+ txt_move_left(text, 1);
+
+ txt_insert_buf(text, sel->name);
+
+ for (i=0; i<skipleft; i++)
+ txt_move_right(text, 0);
+
+ texttool_text_clear();
+}
+
+static short do_texttools(SpaceText *st, char ascii, unsigned short evnt, short val) {
+ int draw=0, tools=0, swallow=0, scroll=1;
+ if (!texttool_text_is_active(st->text)) return 0;
+ if (!st->text || st->text->id.lib) return 0;
+
+ if (st->doplugins && texttool_text_is_active(st->text)) {
+ if (texttool_suggest_first()) tools |= TOOL_SUGG_LIST;
+ if (texttool_docs_get()) tools |= TOOL_DOCUMENT;
+ }
+
+ if (ascii) {
+ if (tools & TOOL_SUGG_LIST) {
+ if ((ascii != '_' && ascii != '*' && ispunct(ascii)) || check_whitespace(ascii)) {
+ confirm_suggestion(st->text, 0);
+ if (st->showsyntax) txt_format_line(st, st->text->curl, 1);
+ } else if ((st->overwrite && txt_replace_char(st->text, ascii)) || txt_add_char(st->text, ascii)) {
+ get_suggest_prefix(st->text, 0);
+ pop_suggest_list();
+ swallow= 1;
+ draw= 1;
+ }
+ }
+ if (tools & TOOL_DOCUMENT) texttool_docs_clear(), doc_scroll= 0, draw= 1;
+
+ } else if (val==1 && evnt) {
+ switch (evnt) {
+ case LEFTMOUSE:
+ if (do_suggest_select(st))
+ swallow= 1;
+ else {
+ if (tools & TOOL_SUGG_LIST) texttool_suggest_clear();
+ if (tools & TOOL_DOCUMENT) texttool_docs_clear(), doc_scroll= 0;
+ }
+ draw= 1;
+ break;
+ case MIDDLEMOUSE:
+ if (do_suggest_select(st)) {
+ confirm_suggestion(st->text, 0);
+ if (st->showsyntax) txt_format_line(st, st->text->curl, 1);
+ swallow= 1;
+ } else {
+ if (tools & TOOL_SUGG_LIST) texttool_suggest_clear();
+ if (tools & TOOL_DOCUMENT) texttool_docs_clear(), doc_scroll= 0;
+ }
+ draw= 1;
+ break;
+ case ESCKEY:
+ draw= swallow= 1;
+ if (tools & TOOL_SUGG_LIST) texttool_suggest_clear();
+ else if (tools & TOOL_DOCUMENT) texttool_docs_clear(), doc_scroll= 0;
+ else draw= swallow= 0;
+ break;
+ case RETKEY:
+ if (tools & TOOL_SUGG_LIST) {
+ confirm_suggestion(st->text, 0);
+ if (st->showsyntax) txt_format_line(st, st->text->curl, 1);
+ swallow= 1;
+ draw= 1;
+ }
+ if (tools & TOOL_DOCUMENT) texttool_docs_clear(), doc_scroll= 0, draw= 1;
+ break;
+ case LEFTARROWKEY:
+ case BACKSPACEKEY:
+ if (tools & TOOL_SUGG_LIST) {
+ if (G.qual)
+ texttool_suggest_clear();
+ else {
+ /* Work out which char we are about to delete/pass */
+ if (st->text->curl && st->text->curc > 0) {
+ char ch= st->text->curl->line[st->text->curc-1];
+ if ((ch=='_' || !ispunct(ch)) && !check_whitespace(ch)) {
+ get_suggest_prefix(st->text, -1);
+ pop_suggest_list();
+ }
+ else
+ texttool_suggest_clear();
+ } else
+ texttool_suggest_clear();
+ }
+ }
+ if (tools & TOOL_DOCUMENT) texttool_docs_clear(), doc_scroll= 0;
+ break;
+ case RIGHTARROWKEY:
+ if (tools & TOOL_SUGG_LIST) {
+ if (G.qual)
+ texttool_suggest_clear();
+ else {
+ /* Work out which char we are about to pass */
+ if (st->text->curl && st->text->curc < st->text->curl->len) {
+ char ch= st->text->curl->line[st->text->curc+1];
+ if ((ch=='_' || !ispunct(ch)) && !check_whitespace(ch)) {
+ get_suggest_prefix(st->text, 1);
+ pop_suggest_list();
+ }
+ else
+ texttool_suggest_clear();
+ } else
+ texttool_suggest_clear();
+ }
+ }
+ if (tools & TOOL_DOCUMENT) texttool_docs_clear(), doc_scroll= 0;
+ break;
+ case PAGEDOWNKEY:
+ scroll= SUGG_LIST_SIZE-1;
+ case WHEELDOWNMOUSE:
+ case DOWNARROWKEY:
+ if (tools & TOOL_DOCUMENT) {
+ doc_scroll++;
+ swallow= 1;
+ draw= 1;
+ break;
+ } else if (tools & TOOL_SUGG_LIST) {
+ SuggItem *sel = texttool_suggest_selected();
+ if (!sel) {
+ texttool_suggest_select(texttool_suggest_first());
+ } else while (sel && sel!=texttool_suggest_last() && sel->next && scroll--) {
+ texttool_suggest_select(sel->next);
+ sel= sel->next;
+ }
+ pop_suggest_list();
+ swallow= 1;
+ draw= 1;
+ break;
+ }
+ case PAGEUPKEY:
+ scroll= SUGG_LIST_SIZE-1;
+ case WHEELUPMOUSE:
+ case UPARROWKEY:
+ if (tools & TOOL_DOCUMENT) {
+ if (doc_scroll>0) doc_scroll--;
+ swallow= 1;
+ draw= 1;
+ break;
+ } else if (tools & TOOL_SUGG_LIST) {
+ SuggItem *sel = texttool_suggest_selected();
+ while (sel && sel!=texttool_suggest_first() && sel->prev && scroll--) {
+ texttool_suggest_select(sel->prev);
+ sel= sel->prev;
+ }
+ pop_suggest_list();
+ swallow= 1;
+ draw= 1;
+ break;
+ }
+ case RIGHTSHIFTKEY:
+ case LEFTSHIFTKEY:
+ break;
+ default:
+ if (tools & TOOL_SUGG_LIST) texttool_suggest_clear(), draw= 1;
+ if (tools & TOOL_DOCUMENT) texttool_docs_clear(), doc_scroll= 0, draw= 1;
+ }
+ }
+
+ if (draw)
+ redraw_alltext();
+
+ return swallow;
+}
+
+static short do_markers(SpaceText *st, char ascii, unsigned short evnt, short val) {
+ Text *text;
+ TextMarker *marker, *mrk, *nxt;
+ int c, s, draw=0, swallow=0;
+
+ text= st->text;
+ if (!text || text->id.lib || text->curl != text->sell) return 0;
+
+ marker= txt_find_marker(text, text->sell, text->selc, 0, 0);
+ if (marker && (marker->start > text->curc || marker->end < text->curc))
+ marker= NULL;
+
+ if (!marker) {
+ /* Find the next temporary marker */
+ if (evnt==TABKEY) {
+ int lineno= txt_get_span(text->lines.first, text->curl);
+ TextMarker *mrk= text->markers.first;
+ while (mrk) {
+ if (!marker && (mrk->flags & TMARK_TEMP)) marker= mrk;
+ if ((mrk->flags & TMARK_TEMP) && (mrk->lineno > lineno || (mrk->lineno==lineno && mrk->end > text->curc))) {
+ marker= mrk;
+ break;
+ }
+ mrk= mrk->next;
+ }
+ if (marker) {
+ txt_move_to(text, marker->lineno, marker->start, 0);
+ txt_move_to(text, marker->lineno, marker->end, 1);
+ pop_space_text(st);
+ evnt= ascii= val= 0;
+ draw= 1;
+ swallow= 1;
+ }
+ } else if (evnt==ESCKEY) {
+ if (txt_clear_markers(text, 0, TMARK_TEMP)) swallow= 1;
+ else if (txt_clear_markers(text, 0, 0)) swallow= 1;
+ else return 0;
+ evnt= ascii= val= 0;
+ draw= 1;
+ }
+ if (!swallow) return 0;
+ }
+
+ if (ascii) {
+ if (marker->flags & TMARK_EDITALL) {
+ c= text->curc-marker->start;
+ s= text->selc-marker->start;
+ if (s<0 || s>marker->end-marker->start) return 0;
+
+ mrk= txt_next_marker(text, marker);
+ while (mrk) {
+ nxt=txt_next_marker(text, mrk); /* mrk may become invalid */
+ txt_move_to(text, mrk->lineno, mrk->start+c, 0);
+ if (s!=c) txt_move_to(text, mrk->lineno, mrk->start+s, 1);
+ if (st->overwrite) {
+ if (txt_replace_char(text, ascii))
+ if (st->showsyntax) txt_format_line(st, text->curl, 1);
+ } else {
+ if (txt_add_char(text, ascii)) {
+ if (st->showsyntax) txt_format_line(st, text->curl, 1);
+ }
+ }
+
+ if (mrk==marker || mrk==nxt) break;
+ mrk=nxt;
+ }
+ swallow= 1;
+ draw= 1;
+ }
+ } else if (val) {
+ switch(evnt) {
+ case BACKSPACEKEY:
+ if (marker->flags & TMARK_EDITALL) {
+ c= text->curc-marker->start;
+ s= text->selc-marker->start;
+ if (s<0 || s>marker->end-marker->start) return 0;
+
+ mrk= txt_next_marker(text, marker);
+ while (mrk) {
+ nxt= txt_next_marker(text, mrk); /* mrk may become invalid */
+ txt_move_to(text, mrk->lineno, mrk->start+c, 0);
+ if (s!=c) txt_move_to(text, mrk->lineno, mrk->start+s, 1);
+ txt_backspace_char(text);
+ if (st->showsyntax) txt_format_line(st, text->curl, 1);
+ if (mrk==marker || mrk==nxt) break;
+ mrk= nxt;
+ }
+ swallow= 1;
+ draw= 1;
+ }
+ break;
+ case DELKEY:
+ if (marker->flags & TMARK_EDITALL) {
+ c= text->curc-marker->start;
+ s= text->selc-marker->start;
+ if (s<0 || s>marker->end-marker->start) return 0;
+
+ mrk= txt_next_marker(text, marker);
+ while (mrk) {
+ nxt= txt_next_marker(text, mrk); /* mrk may become invalid */
+ txt_move_to(text, mrk->lineno, mrk->start+c, 0);
+ if (s!=c) txt_move_to(text, mrk->lineno, mrk->start+s, 1);
+ txt_delete_char(text);
+ if (st->showsyntax) txt_format_line(st, text->curl, 1);
+ if (mrk==marker || mrk==nxt) break;
+ mrk= nxt;
+ }
+ swallow= 1;
+ draw= 1;
+ }
+ break;
+ case TABKEY:
+ if (G.qual & LR_SHIFTKEY) {
+ nxt= marker->prev;
+ if (!nxt) nxt= text->markers.last;
+ } else {
+ nxt= marker->next;
+ if (!nxt) nxt= text->markers.first;
+ }
+ if (marker->flags & TMARK_TEMP) {
+ if (nxt==marker) nxt= NULL;
+ BLI_freelinkN(&text->markers, marker);
+ }
+ mrk= nxt;
+ if (mrk) {
+ txt_move_to(text, mrk->lineno, mrk->start, 0);
+ txt_move_to(text, mrk->lineno, mrk->end, 1);
+ pop_space_text(st);
+ }
+ swallow= 1;
+ draw= 1;
+ break;
+
+ /* Events that should clear markers */
+ case UKEY: if (!(G.qual & LR_ALTKEY)) break;
+ case ZKEY: if (evnt==ZKEY && !(G.qual & LR_CTRLKEY)) break;
+ case RETKEY:
+ case ESCKEY:
+ if (marker->flags & (TMARK_EDITALL | TMARK_TEMP))
+ txt_clear_markers(text, marker->group, 0);
+ else
+ BLI_freelinkN(&text->markers, marker);
+ swallow= 1;
+ draw= 1;
+ break;
+ case RIGHTMOUSE: /* Marker context menu? */
+ case LEFTMOUSE:
+ break;
+ case FKEY: /* Allow find */
+ if (G.qual & LR_SHIFTKEY) swallow= 1;
+ break;
+
+ default:
+ if (G.qual!=0 && G.qual!=LR_SHIFTKEY)
+ swallow= 1; /* Swallow all other shortcut events */
+ }
+ }
+
+ if (draw)
+ redraw_alltext();
+
+ return swallow;
+}
+
+
void winqreadtextspace(ScrArea *sa, void *spacedata, BWinEvent *evt)
{
unsigned short event= evt->event;
@@ -1528,8 +2633,16 @@ void winqreadtextspace(ScrArea *sa, void *spacedata, BWinEvent *evt)
}
return;
}
+
+ if (val && uiDoBlocks(&curarea->uiblocks, event, 1)!=UI_NOTHING) event= 0;
+
+ if (st->doplugins && do_texttools(st, ascii, event, val)) return;
+ if (do_markers(st, ascii, event, val)) return;
- if (event==LEFTMOUSE) {
+ if (event==UI_BUT_EVENT) {
+ do_find_buttons(val);
+ do_draw= 1;
+ } else if (event==LEFTMOUSE) {
if (val) {
short mval[2];
char *buffer;
@@ -1550,20 +2663,20 @@ void winqreadtextspace(ScrArea *sa, void *spacedata, BWinEvent *evt)
}
} else if (event==MIDDLEMOUSE) {
if (val) {
- if (U.uiflag & USER_MMB_PASTE)
- {
+ if (U.uiflag & USER_MMB_PASTE) {
do_selection(st, G.qual&LR_SHIFTKEY);
get_selection_buffer(text);
do_draw= 1;
- }
- else
- {
+ } else {
do_textscroll(st, 1);
}
}
} else if (event==RIGHTMOUSE) {
if (val) {
- p= pupmenu("File %t|New %x0|Open... %x1|Save %x2|Save As...%x3|Execute Script%x4");
+ if (txt_has_sel(text))
+ p= pupmenu("Text %t|Cut%x10|Copy%x11|Paste%x12|New %x0|Open... %x1|Save %x2|Save As...%x3|Execute Script%x4");
+ else
+ p= pupmenu("Text %t|Paste%x12|New %x0|Open... %x1|Save %x2|Save As...%x3|Execute Script%x4");
switch(p) {
case 0:
@@ -1589,13 +2702,48 @@ void winqreadtextspace(ScrArea *sa, void *spacedata, BWinEvent *evt)
run_python_script(st);
do_draw= 1;
break;
- default:
+ case 10:
+ if (text && text->id.lib) {
+ error_libdata();
+ break;
+ }
+ txt_copy_clipboard(text);
+ txt_cut_sel(text);
+ pop_space_text(st);
+ do_draw= 1;
+ break;
+ case 11:
+ //txt_copy_sel(text);
+ txt_copy_clipboard(text);
+ break;
+ case 12:
+ if (text && text->id.lib) {
+ error_libdata();
+ break;
+ }
+ txt_paste_clipboard(text);
+ if (st->showsyntax) txt_format_text(st);
+ do_draw= 1;
break;
}
}
} else if (ascii) {
- if (txt_add_char(text, ascii)) {
- if (st->showsyntax) get_format_string(st);
+ if (text && text->id.lib) {
+ error_libdata();
+ } else {
+ short mval[2];
+ getmouseco_areawin(mval);
+ if (st->showlinenrs && mval[0]>2 && mval[0]<60 && mval[1]>2 && mval[1]<curarea->winy-2) {
+ if (ascii>='0' && ascii<='9') {
+ double time = PIL_check_seconds_timer();
+ if (last_jump < time-1) jump_to= 0;
+ jump_to *= 10; jump_to += (int)(ascii-'0');
+ txt_move_toline(text, jump_to-1, 0);
+ last_jump= time;
+ }
+ } else if ((st->overwrite && txt_replace_char(text, ascii)) || txt_add_char(text, ascii)) {
+ if (st->showsyntax) txt_format_line(st, text->curl, 1);
+ }
pop_space_text(st);
do_draw= 1;
}
@@ -1622,16 +2770,20 @@ void winqreadtextspace(ScrArea *sa, void *spacedata, BWinEvent *evt)
}
break; /* BREAK C */
case DKEY:
+ if (text && text->id.lib) {
+ error_libdata();
+ break;
+ }
if (G.qual == (LR_CTRLKEY|LR_SHIFTKEY)) {
//uncommenting
txt_order_cursors(text);
uncomment(text);
do_draw = 1;
- if (st->showsyntax) get_format_string(st);
+ if (st->showsyntax) txt_format_text(st);
break;
} else if (G.qual == LR_CTRLKEY) {
txt_delete_char(text);
- if (st->showsyntax) get_format_string(st);
+ if (st->showsyntax) txt_format_line(st, text->curl, 1);
do_draw= 1;
pop_space_text(st);
}
@@ -1640,6 +2792,10 @@ void winqreadtextspace(ScrArea *sa, void *spacedata, BWinEvent *evt)
if (G.qual == (LR_ALTKEY|LR_SHIFTKEY)) {
switch(pupmenu("Edit %t|Cut %x0|Copy %x1|Paste %x2|Print Cut Buffer %x3")) {
case 0:
+ if (text && text->id.lib) {
+ error_libdata();
+ break;
+ }
txt_copy_clipboard(text); //First copy to clipboard
txt_cut_sel(text);
do_draw= 1;
@@ -1650,9 +2806,13 @@ void winqreadtextspace(ScrArea *sa, void *spacedata, BWinEvent *evt)
do_draw= 1;
break;
case 2:
+ if (text && text->id.lib) {
+ error_libdata();
+ break;
+ }
//txt_paste(text);
txt_paste_clipboard(text);
- if (st->showsyntax) get_format_string(st);
+ if (st->showsyntax) txt_format_text(st);
do_draw= 1;
break;
case 3:
@@ -1687,17 +2847,17 @@ void winqreadtextspace(ScrArea *sa, void *spacedata, BWinEvent *evt)
break;
}
}
- else if (G.qual == LR_ALTKEY) {
- if (txt_has_sel(text)) {
- txt_find_panel(st,0);
- do_draw= 1;
- }
- }
- else if (G.qual == (LR_ALTKEY|LR_CTRLKEY)) { /* always search button */
- txt_find_panel(st,1);
+ else if (G.qual & (LR_ALTKEY|LR_CTRLKEY)) {
+ find_and_replace(st, 0);
do_draw= 1;
}
break; /* BREAK F */
+ case HKEY:
+ if (G.qual & (LR_ALTKEY|LR_CTRLKEY)) {
+ find_and_replace(st, 1);
+ do_draw= 1;
+ }
+ break; /* BREAK H */
case JKEY:
if (G.qual == LR_ALTKEY) {
do_draw= jumptoline_interactive(st);
@@ -1706,7 +2866,7 @@ void winqreadtextspace(ScrArea *sa, void *spacedata, BWinEvent *evt)
case MKEY:
if (G.qual == LR_ALTKEY) {
txt_export_to_object(text);
- do_draw= 1;
+ do_draw= 1;
}
break; /* BREAK M */
case NKEY:
@@ -1716,7 +2876,6 @@ void winqreadtextspace(ScrArea *sa, void *spacedata, BWinEvent *evt)
allqueue(REDRAWTEXT, 0);
allqueue(REDRAWHEADERS, 0);
-
}
break; /* BREAK N */
case OKEY:
@@ -1740,7 +2899,7 @@ void winqreadtextspace(ScrArea *sa, void *spacedata, BWinEvent *evt)
if (okee("Reopen text")) {
if (!reopen_text(text))
error("Could not reopen file");
- if (st->showsyntax) get_format_string(st);
+ if (st->showsyntax) txt_format_text(st);
}
do_draw= 1;
}
@@ -1780,11 +2939,13 @@ void winqreadtextspace(ScrArea *sa, void *spacedata, BWinEvent *evt)
//txt_print_undo(text); //debug buffer in console
if (G.qual == (LR_ALTKEY|LR_SHIFTKEY)) {
txt_do_redo(text);
+ pop_space_text(st);
do_draw= 1;
}
if (G.qual == LR_ALTKEY) {
txt_do_undo(text);
- if (st->showsyntax) get_format_string(st);
+ if (st->showsyntax) txt_format_text(st);
+ pop_space_text(st);
do_draw= 1;
}
break; /* BREAK U */
@@ -1813,20 +2974,28 @@ void winqreadtextspace(ScrArea *sa, void *spacedata, BWinEvent *evt)
}
/* Support for both Alt-V and Ctrl-V for Paste, for backward compatibility reasons */
else if (G.qual & LR_ALTKEY || G.qual & LR_CTRLKEY) {
+ if (text && text->id.lib) {
+ error_libdata();
+ break;
+ }
/* Throwing in the Shift modifier Paste from the OS clipboard */
if (G.qual & LR_SHIFTKEY)
txt_paste_clipboard(text);
else
txt_paste_clipboard(text);
- if (st->showsyntax) get_format_string(st);
+ if (st->showsyntax) txt_format_text(st);
do_draw= 1;
pop_space_text(st);
}
break; /* BREAK V */
case XKEY:
if (G.qual == LR_ALTKEY || G.qual == LR_CTRLKEY) {
+ if (text && text->id.lib) {
+ error_libdata();
+ break;
+ }
txt_cut_sel(text);
- if (st->showsyntax) get_format_string(st);
+ if (st->showsyntax) txt_format_text(st);
do_draw= 1;
pop_space_text(st);
}
@@ -1838,31 +3007,40 @@ void winqreadtextspace(ScrArea *sa, void *spacedata, BWinEvent *evt)
} else {
txt_do_undo(text);
}
- if (st->showsyntax) get_format_string(st);
+ if (st->showsyntax) txt_format_text(st);
+ pop_space_text(st);
do_draw= 1;
}
break;
case TABKEY:
- if (G.qual & LR_SHIFTKEY) {
- if (txt_has_sel(text)) {
- txt_order_cursors(text);
- unindent(text);
-
- }
+ if (text && text->id.lib) {
+ error_libdata();
+ break;
} else {
- if ( txt_has_sel(text)) {
- txt_order_cursors(text);
- indent(text);
+ if (txt_has_sel(text)) {
+ if (G.qual & LR_SHIFTKEY) {
+ txt_order_cursors(text);
+ unindent(text);
+ if (st->showsyntax) txt_format_text(st);
+ } else {
+ txt_order_cursors(text);
+ indent(text);
+ if (st->showsyntax) txt_format_text(st);
+ }
} else {
txt_add_char(text, '\t');
+ if (st->showsyntax) txt_format_line(st, text->curl, 1);
}
}
- if (st->showsyntax) get_format_string(st);
pop_space_text(st);
do_draw= 1;
st->currtab_set = setcurr_tab(text);
break;
case RETKEY:
+ if (text && text->id.lib) {
+ error_libdata();
+ break;
+ }
//double check tabs before splitting the line
st->currtab_set = setcurr_tab(text);
txt_split_curline(text);
@@ -1876,33 +3054,52 @@ void winqreadtextspace(ScrArea *sa, void *spacedata, BWinEvent *evt)
}
}
}
- if (st->showsyntax) get_format_string(st);
+ if (st->showsyntax) {
+ if (text->curl->prev) txt_format_line(st, text->curl->prev, 0);
+ txt_format_line(st, text->curl, 1);
+ }
do_draw= 1;
pop_space_text(st);
break;
case BACKSPACEKEY:
- txt_backspace_char(text);
+ if (text && text->id.lib) {
+ error_libdata();
+ break;
+ }
+ if (G.qual & (LR_ALTKEY | LR_CTRLKEY)) {
+ txt_backspace_word(text);
+ } else {
+ txt_backspace_char(text);
+ }
set_tabs(text);
- if (st->showsyntax) get_format_string(st);
+ if (st->showsyntax) txt_format_line(st, text->curl, 1);
do_draw= 1;
pop_space_text(st);
break;
case DELKEY:
- txt_delete_char(text);
- if (st->showsyntax) get_format_string(st);
+ if (text && text->id.lib) {
+ error_libdata();
+ break;
+ }
+ if (G.qual & (LR_ALTKEY | LR_CTRLKEY)) {
+ txt_delete_word(text);
+ } else {
+ txt_delete_char(text);
+ }
+ if (st->showsyntax) txt_format_line(st, text->curl, 1);
do_draw= 1;
pop_space_text(st);
st->currtab_set = setcurr_tab(text);
break;
- case DOWNARROWKEY:
- txt_move_down(text, G.qual & LR_SHIFTKEY);
- set_tabs(text);
+ case INSERTKEY:
+ st->overwrite= !st->overwrite;
do_draw= 1;
- pop_space_text(st);
break;
case LEFTARROWKEY:
if (G.qual & LR_COMMANDKEY)
txt_move_bol(text, G.qual & LR_SHIFTKEY);
+ else if (G.qual & LR_ALTKEY)
+ txt_jump_left(text, G.qual & LR_SHIFTKEY);
else
txt_move_left(text, G.qual & LR_SHIFTKEY);
set_tabs(text);
@@ -1912,6 +3109,8 @@ void winqreadtextspace(ScrArea *sa, void *spacedata, BWinEvent *evt)
case RIGHTARROWKEY:
if (G.qual & LR_COMMANDKEY)
txt_move_eol(text, G.qual & LR_SHIFTKEY);
+ else if (G.qual & LR_ALTKEY)
+ txt_jump_right(text, G.qual & LR_SHIFTKEY);
else
txt_move_right(text, G.qual & LR_SHIFTKEY);
set_tabs(text);
@@ -1919,26 +3118,38 @@ void winqreadtextspace(ScrArea *sa, void *spacedata, BWinEvent *evt)
pop_space_text(st);
break;
case UPARROWKEY:
- txt_move_up(text, G.qual & LR_SHIFTKEY);
+ if (st->wordwrap) wrap_move_up(st, G.qual & LR_SHIFTKEY);
+ else txt_move_up(text, G.qual & LR_SHIFTKEY);
+ set_tabs(text);
+ do_draw= 1;
+ pop_space_text(st);
+ break;
+ case DOWNARROWKEY:
+ if (st->wordwrap) wrap_move_down(st, G.qual & LR_SHIFTKEY);
+ else txt_move_down(text, G.qual & LR_SHIFTKEY);
set_tabs(text);
do_draw= 1;
pop_space_text(st);
break;
case PAGEDOWNKEY:
- screen_skip(st, st->viewlines);
+ cursor_skip(st, st->viewlines, G.qual & LR_SHIFTKEY);
+ pop_space_text(st);
do_draw= 1;
break;
case PAGEUPKEY:
- screen_skip(st, -st->viewlines);
+ cursor_skip(st, -st->viewlines, G.qual & LR_SHIFTKEY);
+ pop_space_text(st);
do_draw= 1;
break;
case HOMEKEY:
- txt_move_bol(text, G.qual & LR_SHIFTKEY);
+ if (st->wordwrap) wrap_move_bol(st, G.qual & LR_SHIFTKEY);
+ else txt_move_bol(text, G.qual & LR_SHIFTKEY);
do_draw= 1;
pop_space_text(st);
break;
case ENDKEY:
- txt_move_eol(text, G.qual & LR_SHIFTKEY);
+ if (st->wordwrap) wrap_move_eol(st, G.qual & LR_SHIFTKEY);
+ else txt_move_eol(text, G.qual & LR_SHIFTKEY);
do_draw= 1;
pop_space_text(st);
break;
@@ -1953,192 +3164,161 @@ void winqreadtextspace(ScrArea *sa, void *spacedata, BWinEvent *evt)
}
}
- if (do_draw) {
- ScrArea *sa;
-
- for (sa= G.curscreen->areabase.first; sa; sa= sa->next) {
- SpaceText *st= sa->spacedata.first;
-
- if (st && st->spacetype==SPACE_TEXT) {
- scrarea_queue_redraw(sa);
- }
+ /* Run text plugin scripts if enabled */
+ if (st->doplugins && event && val) {
+ if (BPY_menu_do_shortcut(PYMENU_TEXTPLUGIN, event, G.qual)) {
+ do_draw= 1;
}
}
+
+ if (do_draw)
+ redraw_alltext();
}
-void do_brackets(void)
+static void draw_brackets(SpaceText *st)
{
- SpaceText *st = curarea->spacedata.first;
+ char ch;
+ int b, c, startc, endc, find, stack;
+ int viewc, viewl, offl, offc, x, y;
+ TextLine *startl, *endl, *linep;
Text *text = st->text;
- TextLine *tmp, *start;
- char test[2];
- int d, pos, open, x, y, x2, y2, h=0;
-
- if(!text) return;
-
- tmp = text->curl;
- start = text->curl;
-
- test[0] = (unsigned char) tmp->line[text->curc];
- test[1] = '\0';
-
- d = check_bracket(test);
- if (!d) /* If not pri char */
- {
- test[0] = (unsigned char) tmp->line[text->curc-1];
- test[1] = '\0';
- d = check_bracket(test);
- if(!d) {
- return; /*If the current char or prev is not a bracket then return*/
- } else { /* current char */
- h= txt_get_span(text->lines.first, start) - st->top;
- x = text_draw(st, start->line, st->left, text->curc-1, 0, 0, 0, NULL);
- y = text_draw(st, start->line, st->left, text->curc, 0, 0, 0, NULL);
- if (d < 4) {
- pos = text->curc;
- } else {
- pos = text->curc-2;
- }
- }
- } else { /* is pri char */
- h= txt_get_span(text->lines.first, start) - st->top;
- x = text_draw(st, start->line, st->left, text->curc, 0, 0, 0, NULL);
- y = text_draw(st, start->line, st->left, text->curc+1, 0, 0, 0, NULL);
- if (d < 4) {
- pos = text->curc+1;
- } else {
- pos = text->curc-1;
- }
- }
-
- if (d < 4) /*reading forward*/
- {
- open = 1;
- while ( tmp ) {
- while (pos <= tmp->len) {
- test[0] = (unsigned char) tmp->line[pos];
- test[1] = '\0';
- if(check_bracket(test) == d) {
- open++;
- } else if (check_bracket(test) == d+3) {
- open--;
- if (open == 0) {
- BIF_ThemeColorBlend(TH_BACK, TH_SHADE2, 0.5);
- glRecti(x, curarea->winy-st->lheight*(h)-2, y, curarea->winy-st->lheight*(h+1)-2);
-
- h= txt_get_span(text->lines.first, tmp) - st->top;
- x2= text_draw(st, tmp->line, st->left, pos, 0, 0, 0, NULL);
- y2= text_draw(st, tmp->line, st->left, pos+1, 0, 0, 0, NULL);
- glRecti(x2, curarea->winy-st->lheight*(h)-2, y2, curarea->winy-st->lheight*(h+1)-2);
- BIF_ThemeColor(TH_TEXT);
- return;
+
+ if (!text || !text->curl) return;
+
+ startl= text->curl;
+ startc= text->curc;
+ b= check_bracket(startl->line[startc]);
+ if (b==0 && startc>0) b = check_bracket(startl->line[--startc]);
+ if (b==0) return;
+
+ linep= startl;
+ c= startc;
+ endl= NULL;
+ endc= -1;
+ find= -b;
+ stack= 0;
+
+ /* Opening bracket, search forward for close */
+ if (b>0) {
+ c++;
+ while (linep) {
+ while (c<linep->len) {
+ b= check_bracket(linep->line[c]);
+ if (b==find) {
+ if (stack==0) {
+ endl= linep;
+ endc= c;
+ break;
}
+ stack--;
+ } else if (b==-find) {
+ stack++;
}
- pos++;
+ c++;
}
- tmp = tmp->next;
- pos = 0;
+ if (endl) break;
+ linep= linep->next;
+ c= 0;
}
- } else { /* reading back */
- open = 1;
- while ( tmp ) {
- while (pos >= 0) {
- test[0] = (unsigned char) tmp->line[pos];
- test[1] = '\0';
- if(check_bracket(test) == d) {
- open++;
- } else if (check_bracket(test) == d-3) {
- open--;
- if (open == 0) {
- BIF_ThemeColorBlend(TH_BACK, TH_SHADE2, 0.5);
- glRecti(x, curarea->winy-st->lheight*(h)-2, y, curarea->winy-st->lheight*(h+1)-2);
-
- h= txt_get_span(text->lines.first, tmp) - st->top;
- x2= text_draw(st, tmp->line, st->left, pos, 0, 0, 0, NULL);
- y2= text_draw(st, tmp->line, st->left, pos+1, 0, 0, 0, NULL);
- glRecti(x2, curarea->winy-st->lheight*(h)-2, y2, curarea->winy-st->lheight*(h+1)-2);
- BIF_ThemeColor(TH_TEXT);
- return;
+ }
+ /* Closing bracket, search backward for open */
+ else {
+ c--;
+ while (linep) {
+ while (c>=0) {
+ b= check_bracket(linep->line[c]);
+ if (b==find) {
+ if (stack==0) {
+ endl= linep;
+ endc= c;
+ break;
}
+ stack--;
+ } else if (b==-find) {
+ stack++;
}
- pos--;
- }
- tmp = tmp->prev;
- if (tmp) {
- pos = tmp->len;
+ c--;
}
+ if (endl) break;
+ linep= linep->prev;
+ if (linep) c= linep->len-1;
}
}
-
+
+ if (!endl || endc==-1) return;
+
+ BIF_ThemeColor(TH_HILITE);
+ x= st->showlinenrs ? TXT_OFFSET + TEXTXLOC : TXT_OFFSET;
+ y= curarea->winy - st->lheight;
+
+ ch= startl->line[startc];
+ wrap_offset(st, startl, startc, &offl, &offc);
+ viewc= get_char_pos(st, startl->line, startc) - st->left + offc;
+ if (viewc >= 0){
+ viewl= txt_get_span(text->lines.first, startl) - st->top + offl;
+ glRasterPos2i(x+viewc*spacetext_get_fontwidth(st), y-viewl*st->lheight);
+ BMF_DrawCharacter(spacetext_get_font(st), ch);
+ glRasterPos2i(x+viewc*spacetext_get_fontwidth(st)+1, y-viewl*st->lheight);
+ BMF_DrawCharacter(spacetext_get_font(st), ch);
+ }
+ ch= endl->line[endc];
+ wrap_offset(st, endl, endc, &offl, &offc);
+ viewc= get_char_pos(st, endl->line, endc) - st->left + offc;
+ if (viewc >= 0) {
+ viewl= txt_get_span(text->lines.first, endl) - st->top + offl;
+ glRasterPos2i(x+viewc*spacetext_get_fontwidth(st), y-viewl*st->lheight);
+ BMF_DrawCharacter(spacetext_get_font(st), ch);
+ glRasterPos2i(x+viewc*spacetext_get_fontwidth(st)+1, y-viewl*st->lheight);
+ BMF_DrawCharacter(spacetext_get_font(st), ch);
+ }
}
-int check_bracket(char *string)
+static int check_bracket(char ch)
{
- int number, a = 0;
- char other[][3] = {"(", "[", "{", ")", "]", "}"};
+ int a;
+ char opens[] = "([{";
+ char close[] = ")]}";
- number = 6;
-
- while(a < number) {
- if(strcmp(other[a], string) == 0)
- {
+ for (a=0; a<3; a++) {
+ if(ch==opens[a])
return a+1;
- }
- a++;
+ else if (ch==close[a])
+ return -(a+1);
}
return 0;
}
-static int check_builtinfuncs(char *string)
+static int check_delim(char ch)
{
- int number = 30, a = 0;
+ int a;
+ char delims[] = "():\"\' ~!%^&*-+=[]{};/<>|.#\t,";
- char builtinfuncs[][11] = {"and", "as", "assert", "break", "class", "continue", "def",
- "del", "elif", "else", "except", "exec", "finally",
- "for", "from", "global", "if", "import", "in",
- "is", "lambda", "not", "or", "pass", "print",
- "raise", "return", "try", "while", "yield"};
-
- for( a = 0; a < number; a++) {
- if(!strcmp(builtinfuncs[a], string))
+ for (a=0; a<28; a++) {
+ if (ch==delims[a])
return 1;
}
return 0;
}
-static int check_specialvars(char *string)
-{
- int number = 2, a = 0;
- char specialvars[][7] = {"def", "class"};
-
- for( a = 0; a < number; a++) {
- if(!strcmp(specialvars[a], string))
- return a+1;
- }
+static int check_digit(char ch) {
+ if (ch < '0') return 0;
+ if (ch <= '9') return 1;
return 0;
}
-static int check_delim(char *string)
-{
- int number = 28, a = 0;
- char other[][3] = {"(", ")", ":", "\"", "\'", " ", "~", "!", "%", "^", "&", "*", "-", "+", "=", "[", "]", "{", "}", ";", "/", "<", ">", "|", ".", "#", "\t", ","};
-
- for( a = 0; a < number; a++) {
- if(!strcmp(other[a], string))
- return 1;
- }
+static int check_identifier(char ch) {
+ if (ch < '0') return 0;
+ if (ch <= '9') return 1;
+ if (ch < 'A') return 0;
+ if (ch <= 'Z' || ch == '_') return 1;
+ if (ch < 'a') return 0;
+ if (ch <= 'z') return 1;
return 0;
}
-static int check_numbers(char *string)
-{
- int number = 10, a = 0;
- char other[][2] = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9"};
-
- for( a = 0; a < number; a++) {
- if(!strcmp(other[a], string))
- return 1;
- }
+static int check_whitespace(char ch) {
+ if (ch == ' ' || ch == '\t' || ch == '\r' || ch == '\n')
+ return 1;
return 0;
}
@@ -2146,7 +3326,7 @@ void convert_tabs (struct SpaceText *st, int tab)
{
Text *text = st->text;
TextLine *tmp;
- char *check_line, *new_line, *format;
+ char *check_line, *new_line;
int extra, number; //unknown for now
size_t a, j;
@@ -2158,7 +3338,6 @@ void convert_tabs (struct SpaceText *st, int tab)
while(tmp) {
check_line = tmp->line;
new_line = MEM_mallocN(render_string(st, check_line)+1, "Converted_Line");
- format = MEM_mallocN(render_string(st, check_line)+1, "Converted_Syntax_format");
j = 0;
for (a=0; a < strlen(check_line); a++) { //foreach char in line
if(check_line[a] == '\t') { //checking for tabs
@@ -2185,7 +3364,7 @@ void convert_tabs (struct SpaceText *st, int tab)
tmp->line = new_line;
tmp->len = strlen(new_line);
- tmp->format = format;
+ tmp->format = NULL;
tmp = tmp->next;
}
@@ -2213,7 +3392,6 @@ void convert_tabs (struct SpaceText *st, int tab)
if ( extra > 0 ) { //got tabs make malloc and do what you have to do
new_line = MEM_mallocN(strlen(check_line)-(((st->tabnumber*extra)-extra)-1), "Converted_Line");
- format = MEM_mallocN(strlen(check_line)-(((st->tabnumber*extra)-extra)-1), "Converted_Syntax_format");
extra = 0; //reuse vars
for (a = 0; a < strlen(check_line); a++) {
number = 0;
@@ -2241,9 +3419,27 @@ void convert_tabs (struct SpaceText *st, int tab)
tmp->line = new_line;
tmp->len = strlen(new_line);
- tmp->format = format;
+ tmp->format = NULL;
}
tmp = tmp->next;
}
}
+
+ if (st->showsyntax) txt_format_text(st);
+}
+
+void redraw_alltext(void)
+{
+ ScrArea *sa;
+
+ if(!G.curscreen)
+ return;
+
+ for (sa= G.curscreen->areabase.first; sa; sa= sa->next) {
+ SpaceText *st= sa->spacedata.first;
+
+ if (st && st->spacetype==SPACE_TEXT) {
+ scrarea_queue_redraw(sa);
+ }
+ }
}
diff --git a/source/blender/src/drawtime.c b/source/blender/src/drawtime.c
index 039184a0e43..14e6336c6a9 100644
--- a/source/blender/src/drawtime.c
+++ b/source/blender/src/drawtime.c
@@ -437,21 +437,27 @@ static void draw_ob_keys()
}
/* Materials (only relevant for geometry objects) - some filtering might occur */
+ // err... is this ok?
filter= (stime->flag & TIME_ONLYACTSEL);
- for (a=0; a<ob->totcol; a++) {
- Material *ma= give_current_material(ob, a+1);
+ if (filter) {
+ Material *ma= give_current_material(ob, (ob->actcol + 1));
- /* the only filter we apply right now is only showing the active material */
- if (filter) {
- ok= (ob->actcol==a)? 1 : 0;
- }
- else ok= 1;
-
- if (ma && ma->ipo && ok) {
+ /* we only retrieve the active material... */
+ if (ma && ma->ipo) {
col[0] = 0xDD; col[1] = 0xA7; col[2] = 0x00;
draw_ipo_keys(ma->ipo, col);
}
}
+ else {
+ for (a=0; a<ob->totcol; a++) {
+ Material *ma= give_current_material(ob, a+1);
+
+ if (ma && ma->ipo) {
+ col[0] = 0xDD; col[1] = 0xA7; col[2] = 0x00;
+ draw_ipo_keys(ma->ipo, col);
+ }
+ }
+ }
}
}
diff --git a/source/blender/src/drawview.c b/source/blender/src/drawview.c
index 65111bccfa9..1f2d501f09f 100644
--- a/source/blender/src/drawview.c
+++ b/source/blender/src/drawview.c
@@ -64,6 +64,7 @@
#include "DNA_gpencil_types.h"
#include "DNA_image_types.h"
#include "DNA_key_types.h"
+#include "DNA_lamp_types.h"
#include "DNA_lattice_types.h"
#include "DNA_mesh_types.h"
#include "DNA_meshdata_types.h"
@@ -121,6 +122,7 @@
#include "BIF_glutil.h"
#include "BIF_interface.h"
#include "BIF_interface_icons.h"
+#include "BIF_keyframing.h"
#include "BIF_mywindow.h"
#include "BIF_poseobject.h"
#include "BIF_previewrender.h"
@@ -134,6 +136,7 @@
#include "BIF_verse.h"
#endif
+#include "BDR_drawaction.h"
#include "BDR_drawmesh.h"
#include "BDR_drawobject.h"
#include "BDR_editobject.h"
@@ -164,6 +167,9 @@
#include "reeb.h"
+#include "GPU_draw.h"
+#include "GPU_material.h"
+
#include "multires.h"
/* For MULTISAMPLE_ARB #define.
@@ -178,7 +184,7 @@
#include "radio.h"
/* locals */
-void drawname(Object *ob);
+//static void drawname(Object *ob);
static void star_stuff_init_func(void)
{
@@ -195,132 +201,6 @@ static void star_stuff_term_func(void)
glEnd();
}
-void default_gl_light(void)
-{
- int a;
-
- /* initialize */
- if(U.light[0].flag==0 && U.light[1].flag==0 && U.light[2].flag==0) {
- U.light[0].flag= 1;
- U.light[0].vec[0]= -0.3; U.light[0].vec[1]= 0.3; U.light[0].vec[2]= 0.9;
- U.light[0].col[0]= 0.8; U.light[0].col[1]= 0.8; U.light[0].col[2]= 0.8;
- U.light[0].spec[0]= 0.5; U.light[0].spec[1]= 0.5; U.light[0].spec[2]= 0.5;
- U.light[0].spec[3]= 1.0;
-
- U.light[1].flag= 0;
- U.light[1].vec[0]= 0.5; U.light[1].vec[1]= 0.5; U.light[1].vec[2]= 0.1;
- U.light[1].col[0]= 0.4; U.light[1].col[1]= 0.4; U.light[1].col[2]= 0.8;
- U.light[1].spec[0]= 0.3; U.light[1].spec[1]= 0.3; U.light[1].spec[2]= 0.5;
- U.light[1].spec[3]= 1.0;
-
- U.light[2].flag= 0;
- U.light[2].vec[0]= 0.3; U.light[2].vec[1]= -0.3; U.light[2].vec[2]= -0.2;
- U.light[2].col[0]= 0.8; U.light[2].col[1]= 0.5; U.light[2].col[2]= 0.4;
- U.light[2].spec[0]= 0.5; U.light[2].spec[1]= 0.4; U.light[2].spec[2]= 0.3;
- U.light[2].spec[3]= 1.0;
- }
-
-
- glLightfv(GL_LIGHT0, GL_POSITION, U.light[0].vec);
- glLightfv(GL_LIGHT0, GL_DIFFUSE, U.light[0].col);
- glLightfv(GL_LIGHT0, GL_SPECULAR, U.light[0].spec);
-
- glLightfv(GL_LIGHT1, GL_POSITION, U.light[1].vec);
- glLightfv(GL_LIGHT1, GL_DIFFUSE, U.light[1].col);
- glLightfv(GL_LIGHT1, GL_SPECULAR, U.light[1].spec);
-
- glLightfv(GL_LIGHT2, GL_POSITION, U.light[2].vec);
- glLightfv(GL_LIGHT2, GL_DIFFUSE, U.light[2].col);
- glLightfv(GL_LIGHT2, GL_SPECULAR, U.light[2].spec);
-
- for(a=0; a<8; a++) {
- if(a<3) {
- if(U.light[a].flag) glEnable(GL_LIGHT0+a);
- else glDisable(GL_LIGHT0+a);
-
- // clear stuff from other opengl lamp usage
- glLightf(GL_LIGHT0+a, GL_SPOT_CUTOFF, 180.0);
- glLightf(GL_LIGHT0+a, GL_CONSTANT_ATTENUATION, 1.0);
- glLightf(GL_LIGHT0+a, GL_LINEAR_ATTENUATION, 0.0);
- }
- else glDisable(GL_LIGHT0+a);
- }
-
- glDisable(GL_LIGHTING);
-
- glDisable(GL_COLOR_MATERIAL);
-}
-
-/* also called when render 'ogl'
- keep synced with Myinit_gl_stuff in the game engine! */
-void init_gl_stuff(void)
-{
- float mat_ambient[] = { 0.0, 0.0, 0.0, 0.0 };
- float mat_specular[] = { 0.5, 0.5, 0.5, 1.0 };
- float mat_shininess[] = { 35.0 };
- int a, x, y;
- GLubyte pat[32*32];
- const GLubyte *patc= pat;
-
-
- glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, mat_ambient);
- glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mat_specular);
- glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, mat_specular);
- glMaterialfv(GL_FRONT_AND_BACK, GL_SHININESS, mat_shininess);
-
- default_gl_light();
-
- /* no local viewer, looks ugly in ortho mode */
- /* glLightModelfv(GL_LIGHT_MODEL_LOCAL_VIEWER, &one); */
-
- glDepthFunc(GL_LEQUAL);
- /* scaling matrices */
- glEnable(GL_NORMALIZE);
-
- glShadeModel(GL_FLAT);
-
- glDisable(GL_ALPHA_TEST);
- glDisable(GL_BLEND);
- glDisable(GL_DEPTH_TEST);
- glDisable(GL_FOG);
- glDisable(GL_LIGHTING);
- glDisable(GL_LOGIC_OP);
- glDisable(GL_STENCIL_TEST);
- glDisable(GL_TEXTURE_1D);
- glDisable(GL_TEXTURE_2D);
-
- /* default on, disable/enable should be local per function */
- glEnableClientState(GL_VERTEX_ARRAY);
- glEnableClientState(GL_NORMAL_ARRAY);
-
- glPixelTransferi(GL_MAP_COLOR, GL_FALSE);
- glPixelTransferi(GL_RED_SCALE, 1);
- glPixelTransferi(GL_RED_BIAS, 0);
- glPixelTransferi(GL_GREEN_SCALE, 1);
- glPixelTransferi(GL_GREEN_BIAS, 0);
- glPixelTransferi(GL_BLUE_SCALE, 1);
- glPixelTransferi(GL_BLUE_BIAS, 0);
- glPixelTransferi(GL_ALPHA_SCALE, 1);
- glPixelTransferi(GL_ALPHA_BIAS, 0);
-
- glPixelTransferi(GL_DEPTH_BIAS, 0);
- glPixelTransferi(GL_DEPTH_SCALE, 1);
- glDepthRange(0.0, 1.0);
-
- a= 0;
- for(x=0; x<32; x++) {
- for(y=0; y<4; y++) {
- if( (x) & 1) pat[a++]= 0x88;
- else pat[a++]= 0x22;
- }
- }
-
- glPolygonStipple(patc);
-
-
- init_realtime_GL();
-}
-
void circf(float x, float y, float rad)
{
GLUquadricObj *qobj = gluNewQuadric();
@@ -1322,7 +1202,8 @@ exit:
return index;
}
-void drawname(Object *ob)
+#if 0
+static void drawname(Object *ob)
{
cpack(0x404040);
glRasterPos3f(0.0, 0.0, 0.0);
@@ -1330,61 +1211,120 @@ void drawname(Object *ob)
BMF_DrawString(G.font, " ");
BMF_DrawString(G.font, ob->id.name+2);
}
+#endif
+static char *get_cfra_marker_name()
+{
+ ListBase *markers= &G.scene->markers;
+ TimeMarker *m1, *m2;
+
+ /* search through markers for match */
+ for (m1=markers->first, m2=markers->last; m1 && m2; m1=m1->next, m2=m2->prev) {
+ if (m1->frame==CFRA)
+ return m1->name;
+
+ if (m1 == m2)
+ break;
+
+ if (m2->frame==CFRA)
+ return m2->name;
+ }
+
+ return NULL;
+}
+/* draw info beside axes in bottom left-corner:
+ * framenum, object name, bone name (if available), marker name (if available)
+ */
static void draw_selected_name(Object *ob)
{
- char info[128];
+ char info[256], *markern;
short offset=30;
-
- if(ob->type==OB_ARMATURE) {
- bArmature *arm= ob->data;
- char *name= NULL;
-
- if(ob==G.obedit) {
- EditBone *ebo;
- for (ebo=G.edbo.first; ebo; ebo=ebo->next){
- if ((ebo->flag & BONE_ACTIVE) && (ebo->layer & arm->layer)) {
- name= ebo->name;
- break;
+
+ /* get name of marker on current frame (if available) */
+ markern= get_cfra_marker_name();
+
+ /* check if there is an object */
+ if(ob) {
+ /* name(s) to display depends on type of object */
+ if(ob->type==OB_ARMATURE) {
+ bArmature *arm= ob->data;
+ char *name= NULL;
+
+ /* show name of active bone too (if possible) */
+ if(ob==G.obedit) {
+ EditBone *ebo;
+ for (ebo=G.edbo.first; ebo; ebo=ebo->next){
+ if ((ebo->flag & BONE_ACTIVE) && (ebo->layer & arm->layer)) {
+ name= ebo->name;
+ break;
+ }
}
}
- }
- else if(ob->pose && (ob->flag & OB_POSEMODE)) {
- bPoseChannel *pchan;
- for(pchan= ob->pose->chanbase.first; pchan; pchan= pchan->next) {
- if((pchan->bone->flag & BONE_ACTIVE) && (pchan->bone->layer & arm->layer)) {
- name= pchan->name;
- break;
+ else if(ob->pose && (ob->flag & OB_POSEMODE)) {
+ bPoseChannel *pchan;
+ for(pchan= ob->pose->chanbase.first; pchan; pchan= pchan->next) {
+ if((pchan->bone->flag & BONE_ACTIVE) && (pchan->bone->layer & arm->layer)) {
+ name= pchan->name;
+ break;
+ }
}
}
+ if(name && markern)
+ sprintf(info, "(%d) %s %s <%s>", CFRA, ob->id.name+2, name, markern);
+ else if(name)
+ sprintf(info, "(%d) %s %s", CFRA, ob->id.name+2, name);
+ else
+ sprintf(info, "(%d) %s", CFRA, ob->id.name+2);
}
- if(name)
- sprintf(info, "(%d) %s %s", CFRA, ob->id.name+2, name);
- else
- sprintf(info, "(%d) %s", CFRA, ob->id.name+2);
- }
- else if(ob->type==OB_MESH) {
- Key *key= NULL;
- KeyBlock *kb = NULL;
- char shapes[75];
-
- shapes[0] = 0;
- key = ob_get_key(ob);
- if(key){
- kb = BLI_findlink(&key->block, ob->shapenr-1);
- if(kb){
- sprintf(shapes, ": %s ", kb->name);
- if(ob->shapeflag == OB_SHAPE_LOCK){
- sprintf(shapes, "%s (Pinned)",shapes);
+ else if(ELEM3(ob->type, OB_MESH, OB_LATTICE, OB_CURVE)) {
+ Key *key= NULL;
+ KeyBlock *kb = NULL;
+ char shapes[75];
+
+ /* try to display active shapekey too */
+ shapes[0] = 0;
+ key = ob_get_key(ob);
+ if(key){
+ kb = BLI_findlink(&key->block, ob->shapenr-1);
+ if(kb){
+ sprintf(shapes, ": %s ", kb->name);
+ if(ob->shapeflag == OB_SHAPE_LOCK){
+ sprintf(shapes, "%s (Pinned)",shapes);
+ }
}
}
+
+ if(markern)
+ sprintf(info, "(%d) %s %s <%s>", CFRA, ob->id.name+2, shapes, markern);
+ else
+ sprintf(info, "(%d) %s %s", CFRA, ob->id.name+2, shapes);
}
- sprintf(info, "(%d) %s %s", CFRA, ob->id.name+2, shapes);
+ else {
+ /* standard object */
+ if (markern)
+ sprintf(info, "(%d) %s <%s>", CFRA, ob->id.name+2, markern);
+ else
+ sprintf(info, "(%d) %s", CFRA, ob->id.name+2);
+ }
+
+ /* colour depends on whether there is a keyframe */
+ if (id_frame_has_keyframe((ID *)ob, frame_to_float(CFRA), G.vd->keyflags))
+ BIF_ThemeColor(TH_VERTEX_SELECT);
+ else
+ BIF_ThemeColor(TH_TEXT_HI);
}
- else sprintf(info, "(%d) %s", CFRA, ob->id.name+2);
-
- BIF_ThemeColor(TH_TEXT_HI);
+ else {
+ /* no object */
+ if (markern)
+ sprintf(info, "(%d) <%s>", CFRA, markern);
+ else
+ sprintf(info, "(%d)", CFRA);
+
+ /* colour is always white */
+ BIF_ThemeColor(TH_TEXT_HI);
+ }
+
if (U.uiflag & USER_SHOW_ROTVIEWICON)
offset = 14 + (U.rvisize * 2);
@@ -2596,7 +2536,6 @@ static void view3d_panel_properties(short cntrl) // VIEW3D_HANDLER_SETTINGS
uiBlockEndAlign(block);
uiDefBut(block, LABEL, 1, "Display:", 10, 50, 150, 19, NULL, 0.0, 0.0, 0, 0, "");
-
uiBlockBeginAlign(block);
uiDefButBitS(block, TOG, V3D_SELECT_OUTLINE, REDRAWVIEW3D, "Outline Selected", 10, 30, 140, 19, &vd->flag, 0, 0, 0, 0, "Highlight selected objects with an outline, in Solid, Shaded or Textured viewport shading modes");
uiDefButBitS(block, TOG, V3D_DRAW_CENTERS, REDRAWVIEW3D, "All Object Centers", 10, 10, 140, 19, &vd->flag, 0, 0, 0, 0, "Draw the center points on all objects");
@@ -2604,11 +2543,21 @@ static void view3d_panel_properties(short cntrl) // VIEW3D_HANDLER_SETTINGS
uiDefButBitS(block, TOG, V3D_SOLID_TEX, REDRAWVIEW3D, "Solid Tex", 10, -30, 140, 19, &vd->flag2, 0, 0, 0, 0, "Display textures in Solid draw type (Shift T)");
uiBlockEndAlign(block);
- uiDefBut(block, LABEL, 1, "View Locking:", 160, 50, 150, 19, NULL, 0.0, 0.0, 0, 0, "");
+ uiDefBut(block, LABEL, 1, "View Locking:", 160, 60, 150, 19, NULL, 0.0, 0.0, 0, 0, "");
uiBlockBeginAlign(block);
- uiDefIDPoinBut(block, test_obpoin_but, ID_OB, REDRAWVIEW3D, "Object:", 160, 30, 140, 19, &vd->ob_centre, "Lock view to center to this Object");
- uiDefBut(block, TEX, REDRAWVIEW3D, "Bone:", 160, 10, 140, 19, vd->ob_centre_bone, 1, 31, 0, 0, "If view locked to Object, use this Bone to lock to view to");
+ uiDefIDPoinBut(block, test_obpoin_but, ID_OB, REDRAWVIEW3D, "Object:", 160, 40, 140, 19, &vd->ob_centre, "Lock view to center to this Object");
+ uiDefBut(block, TEX, REDRAWVIEW3D, "Bone:", 160, 20, 140, 19, vd->ob_centre_bone, 1, 31, 0, 0, "If view locked to Object, use this Bone to lock to view to");
+ uiDefBut(block, LABEL, 1, "Keyframe Display:", 160, -2, 150, 19, NULL, 0.0, 0.0, 0, 0, "");
+ uiBlockBeginAlign(block);
+ uiDefButBitS(block, TOG, ANIMFILTER_ACTIVE, REDRAWVIEW3D, "Active",160, -22, 50, 19, &vd->keyflags, 0, 0, 0, 0, "Show keyframes for active element only (i.e. active bone or active material)");
+ uiDefButBitS(block, TOG, ANIMFILTER_MUTED, REDRAWVIEW3D, "Muted",210, -22, 50, 19, &vd->keyflags, 0, 0, 0, 0, "Show keyframes in muted channels");
+ uiDefButBitS(block, TOG, ANIMFILTER_LOCAL, REDRAWVIEW3D, "Local",260, -22, 50, 19, &vd->keyflags, 0, 0, 0, 0, "Show keyframes directly connected to datablock");
+ if ((vd->keyflags & ANIMFILTER_LOCAL)==0) {
+ uiDefButBitS(block, TOGN, ANIMFILTER_NOMAT, REDRAWVIEW3D, "Material",160, -42, 75, 19, &vd->keyflags, 0, 0, 0, 0, "Show keyframes for any available Materials");
+ uiDefButBitS(block, TOGN, ANIMFILTER_NOSKEY, REDRAWVIEW3D, "ShapeKey",235, -42, 75, 19, &vd->keyflags, 0, 0, 0, 0, "Show keyframes for any available Shape Keys");
+ }
+ uiBlockEndAlign(block);
}
static void view3d_panel_preview(ScrArea *sa, short cntrl) // VIEW3D_HANDLER_PREVIEW
@@ -2739,7 +2688,7 @@ void add_view3d_after(View3D *v3d, Base *base, int type, int flag)
}
/* clears zbuffer and draws it over */
-static void view3d_draw_xray(View3D *v3d)
+static void view3d_draw_xray(View3D *v3d, int clear)
{
View3DAfter *v3da, *next;
int doit= 0;
@@ -2748,7 +2697,7 @@ static void view3d_draw_xray(View3D *v3d)
if(v3da->type==V3D_XRAY) doit= 1;
if(doit) {
- if(v3d->zbuf) glClear(GL_DEPTH_BUFFER_BIT);
+ if(clear && v3d->zbuf) glClear(GL_DEPTH_BUFFER_BIT);
v3d->xray= TRUE;
for(v3da= v3d->afterdraw.first; v3da; v3da= next) {
@@ -2770,7 +2719,7 @@ static void view3d_draw_transp(View3D *v3d)
glDepthMask(0);
v3d->transp= TRUE;
-
+
for(v3da= v3d->afterdraw.first; v3da; v3da= next) {
next= v3da->next;
if(v3da->type==V3D_TRANSP) {
@@ -2813,7 +2762,8 @@ static void draw_dupli_objects_color(View3D *v3d, Base *base, int color)
tbase.object= dob->ob;
/* extra service: draw the duplicator in drawtype of parent */
- dt= tbase.object->dt; tbase.object->dt= base->object->dt;
+ /* MIN2 for the drawtype to allow bounding box objects in groups for lods */
+ dt= tbase.object->dt; tbase.object->dt= MIN2(tbase.object->dt, base->object->dt);
dtx= tbase.object->dtx; tbase.object->dtx= base->object->dtx;
/* negative scale flag has to propagate */
@@ -2948,7 +2898,7 @@ static void draw_sculpt_depths(View3D *v3d)
}
}
-void draw_depth(ScrArea *sa, void *spacedata)
+void draw_depth(ScrArea *sa, void *spacedata, int (* func)(void *))
{
View3D *v3d= spacedata;
Base *base;
@@ -2988,9 +2938,11 @@ void draw_depth(ScrArea *sa, void *spacedata)
if(G.scene->set) {
for(SETLOOPER(G.scene->set, base)) {
if(v3d->lay & base->lay) {
- draw_object(base, 0);
- if(base->object->transflag & OB_DUPLI) {
- draw_dupli_objects_color(v3d, base, TH_WIRE);
+ if (func == NULL || func(base)) {
+ draw_object(base, 0);
+ if(base->object->transflag & OB_DUPLI) {
+ draw_dupli_objects_color(v3d, base, TH_WIRE);
+ }
}
}
}
@@ -2998,12 +2950,13 @@ void draw_depth(ScrArea *sa, void *spacedata)
for(base= G.scene->base.first; base; base= base->next) {
if(v3d->lay & base->lay) {
-
- /* dupli drawing */
- if(base->object->transflag & OB_DUPLI) {
- draw_dupli_objects(v3d, base);
+ if (func == NULL || func(base)) {
+ /* dupli drawing */
+ if(base->object->transflag & OB_DUPLI) {
+ draw_dupli_objects(v3d, base);
+ }
+ draw_object(base, 0);
}
- draw_object(base, 0);
}
}
@@ -3048,6 +3001,84 @@ void draw_depth(ScrArea *sa, void *spacedata)
static void draw_viewport_fps(ScrArea *sa);
+typedef struct View3DShadow{
+ struct View3DShadow*next, *prev;
+ GPULamp *lamp;
+} View3DShadow;
+
+static void gpu_render_lamp_update(View3D *v3d, Object *ob, Object *par, float obmat[][4], ListBase *shadows)
+{
+ GPULamp *lamp;
+ View3DShadow *shadow;
+
+ lamp = GPU_lamp_from_blender(G.scene, ob, par);
+
+ if(lamp) {
+ GPU_lamp_update(lamp, ob->lay, obmat);
+
+ if((ob->lay & v3d->lay) && GPU_lamp_has_shadow_buffer(lamp)) {
+ shadow= MEM_callocN(sizeof(View3DShadow), "View3DShadow");
+ shadow->lamp = lamp;
+ BLI_addtail(shadows, shadow);
+ }
+ }
+}
+
+static void gpu_update_lamps_shadows(Scene *scene, View3D *v3d)
+{
+ ListBase shadows;
+ View3DShadow *shadow;
+ Scene *sce;
+ Base *base;
+ Object *ob;
+
+ shadows.first= shadows.last= NULL;
+
+ /* update lamp transform and gather shadow lamps */
+ for(SETLOOPER(G.scene, base)) {
+ ob= base->object;
+
+ if(ob->type == OB_LAMP)
+ gpu_render_lamp_update(v3d, ob, NULL, ob->obmat, &shadows);
+
+ if (ob->transflag & OB_DUPLI) {
+ DupliObject *dob;
+ ListBase *lb = object_duplilist(G.scene, ob);
+
+ for(dob=lb->first; dob; dob=dob->next)
+ if(dob->ob->type==OB_LAMP)
+ gpu_render_lamp_update(v3d, dob->ob, ob, dob->mat, &shadows);
+
+ free_object_duplilist(lb);
+ }
+ }
+
+ /* render shadows after updating all lamps, nested object_duplilist
+ * don't work correct since it's replacing object matrices */
+ for(shadow=shadows.first; shadow; shadow=shadow->next) {
+ /* this needs to be done better .. */
+ float viewmat[4][4], winmat[4][4];
+ int drawtype, lay, winsize, flag2;
+
+ drawtype= v3d->drawtype;
+ lay= v3d->lay;
+ flag2= v3d->flag2 & V3D_SOLID_TEX;
+
+ v3d->drawtype = OB_SOLID;
+ v3d->lay &= GPU_lamp_shadow_layer(shadow->lamp);
+ v3d->flag2 &= ~V3D_SOLID_TEX;
+
+ GPU_lamp_shadow_buffer_bind(shadow->lamp, viewmat, &winsize, winmat);
+ drawview3d_render(v3d, viewmat, winsize, winsize, winmat, 1);
+ GPU_lamp_shadow_buffer_unbind(shadow->lamp);
+
+ v3d->drawtype= drawtype;
+ v3d->lay= lay;
+ v3d->flag2 |= flag2;
+ }
+
+ BLI_freelistN(&shadows);
+}
void drawview3dspace(ScrArea *sa, void *spacedata)
{
@@ -3065,9 +3096,16 @@ void drawview3dspace(ScrArea *sa, void *spacedata)
for(SETLOOPER(G.scene->set, base))
object_handle_update(base->object); // bke_object.h
}
-
- for(base= G.scene->base.first; base; base= base->next)
+
+ v3d->lay_used = 0;
+ for(base= G.scene->base.first; base; base= base->next) {
object_handle_update(base->object); // bke_object.h
+ v3d->lay_used |= base->lay;
+ }
+
+ /* shadow buffers, before we setup matrices */
+ if(draw_glsl_material(NULL, v3d->drawtype))
+ gpu_update_lamps_shadows(G.scene, v3d);
setwinmatrixview3d(sa->winx, sa->winy, NULL); /* 0= no pick rect */
setviewmatrixview3d(); /* note: calls where_is_object for camera... */
@@ -3212,8 +3250,8 @@ void drawview3dspace(ScrArea *sa, void *spacedata)
if(G.scene->radio) RAD_drawall(v3d->drawtype>=OB_SOLID);
/* Transp and X-ray afterdraw stuff */
- view3d_draw_xray(v3d); // clears zbuffer if it is used!
view3d_draw_transp(v3d);
+ view3d_draw_xray(v3d, 1); // clears zbuffer if it is used!
if(!retopo && sculptparticle && (obact && (OBACT->dtx & OB_DRAWXRAY))) {
if(G.f & G_SCULPTMODE)
@@ -3294,7 +3332,7 @@ void drawview3dspace(ScrArea *sa, void *spacedata)
}
ob= OBACT;
- if(ob && (U.uiflag & USER_DRAWVIEWINFO))
+ if(U.uiflag & USER_DRAWVIEWINFO)
draw_selected_name(ob);
draw_area_emboss(sa);
@@ -3322,7 +3360,7 @@ void drawview3dspace(ScrArea *sa, void *spacedata)
/* run any view3d draw handler script links */
if (sa->scriptlink.totscript)
- BPY_do_spacehandlers(sa, 0, SPACEHANDLER_VIEW3D_DRAW);
+ BPY_do_spacehandlers(sa, 0, 0, SPACEHANDLER_VIEW3D_DRAW);
/* run scene redraw script links */
if((G.f & G_DOSCRIPTLINKS) && G.scene->scriptlink.totscript &&
@@ -3332,18 +3370,29 @@ void drawview3dspace(ScrArea *sa, void *spacedata)
}
-
-void drawview3d_render(struct View3D *v3d, int winx, int winy, float winmat[][4])
+void drawview3d_render(struct View3D *v3d, float viewmat[][4], int winx, int winy, float winmat[][4], int shadow)
{
Base *base;
Scene *sce;
- float v3dwinmat[4][4];
+ float v3dviewmat[4][4], v3dwinmat[4][4];
+
+ /* shadow buffers, before we setup matrices */
+ if(!shadow && draw_glsl_material(NULL, v3d->drawtype))
+ gpu_update_lamps_shadows(G.scene, v3d);
if(!winmat)
setwinmatrixview3d(winx, winy, NULL);
- setviewmatrixview3d();
- myloadmatrix(v3d->viewmat);
+ if(viewmat) {
+ Mat4CpyMat4(v3dviewmat, viewmat);
+ Mat4CpyMat4(v3d->viewmat, viewmat);
+ }
+ else {
+ setviewmatrixview3d();
+ Mat4CpyMat4(v3dviewmat, v3d->viewmat);
+ }
+
+ myloadmatrix(v3dviewmat);
/* when winmat is not NULL, it overrides the regular window matrix */
glMatrixMode(GL_PROJECTION);
@@ -3352,12 +3401,14 @@ void drawview3d_render(struct View3D *v3d, int winx, int winy, float winmat[][4]
mygetmatrix(v3dwinmat);
glMatrixMode(GL_MODELVIEW);
- Mat4MulMat4(v3d->persmat, v3d->viewmat, v3dwinmat);
+ Mat4MulMat4(v3d->persmat, v3dviewmat, v3dwinmat);
Mat4Invert(v3d->persinv, v3d->persmat);
Mat4Invert(v3d->viewinv, v3d->viewmat);
- free_all_realtime_images();
- reshadeall_displist();
+ if(!shadow) {
+ GPU_free_images();
+ reshadeall_displist();
+ }
if(v3d->drawtype > OB_WIRE) {
v3d->zbuf= TRUE;
@@ -3435,8 +3486,8 @@ void drawview3d_render(struct View3D *v3d, int winx, int winy, float winmat[][4]
if(G.scene->radio) RAD_drawall(v3d->drawtype>=OB_SOLID);
/* Transp and X-ray afterdraw stuff */
- view3d_draw_xray(v3d); // clears zbuffer if it is used!
view3d_draw_transp(v3d);
+ view3d_draw_xray(v3d, !shadow); // clears zbuffer if it is used!
if(v3d->flag & V3D_CLIPPING)
view3d_clr_clipping();
@@ -3455,11 +3506,12 @@ void drawview3d_render(struct View3D *v3d, int winx, int winy, float winmat[][4]
G.f &= ~G_SIMULATION;
- glFlush();
+ if(!shadow) {
+ glFlush();
+ GPU_free_images();
+ }
glLoadIdentity();
-
- free_all_realtime_images();
}
diff --git a/source/blender/src/edit.c b/source/blender/src/edit.c
index a44bbc3af0f..87bb6f9e94e 100644
--- a/source/blender/src/edit.c
+++ b/source/blender/src/edit.c
@@ -136,10 +136,10 @@ extern void obedit_selectionCB(short selecting, Object *editobj,
extern void uvedit_selectionCB(short selecting, Object *editobj,
short *mval, float rad);
-void circle_selectCB(select_CBfunc func);
+static void circle_selectCB(select_CBfunc func);
/* local protos ---------------*/
-void snap_curs_to_firstsel(void);
+static void snap_curs_to_firstsel(void);
/* flag==2 only border, flag==3 cross+border
flag==5 cross + border + start&end frame
@@ -478,7 +478,7 @@ void draw_sel_circle(short *mval, short *mvalo, float rad, float rado, int selec
* it (hopefully) reusable for other windows than the 3D view.
*/
-void circle_selectCB(select_CBfunc callback)
+static void circle_selectCB(select_CBfunc callback)
{
static float rad= 40.0;
float rado= rad;
@@ -1548,7 +1548,7 @@ void snap_curs_to_active()
allqueue(REDRAWVIEW3D, 0);
}
-void snap_curs_to_firstsel()
+static void snap_curs_to_firstsel()
{
TransVert *tv;
Base *base;
diff --git a/source/blender/src/editaction.c b/source/blender/src/editaction.c
index c454715b1df..d10f354ed7a 100644
--- a/source/blender/src/editaction.c
+++ b/source/blender/src/editaction.c
@@ -74,6 +74,7 @@
#include "BIF_editview.h"
#include "BIF_gl.h"
#include "BIF_interface.h"
+#include "BIF_keyframing.h"
#include "BIF_mywindow.h"
#include "BIF_poseobject.h"
#include "BIF_screen.h"
@@ -435,7 +436,7 @@ static void actdata_filter_action (ListBase *act_data, bAction *act, int filter_
*/
if ( (!(filter_mode & ACTFILTER_VISIBLE) || EXPANDED_AGRP(agrp)) ||
( ((filter_mode & ACTFILTER_IPOKEYS) || (filter_mode & ACTFILTER_ONLYICU)) &&
- !(filter_mode & ACTFILTER_SEL) ) )
+ (!(filter_mode & ACTFILTER_SEL) || (SEL_AGRP(agrp))) ) )
{
if (!(filter_mode & ACTFILTER_FOREDIT) || EDITABLE_AGRP(agrp)) {
for (achan= agrp->channels.first; achan && achan->grp==agrp; achan= achan->next) {
@@ -2101,7 +2102,7 @@ void paste_actdata ()
/* from selected channels */
for (ale= act_data.first; ale; ale= ale->next) {
- Ipo *ipo_src=NULL, *ipo_dst=ale->key_data;
+ Ipo *ipo_src=NULL;
bActionChannel *achan;
IpoCurve *ico, *icu;
BezTriple *bezt;
@@ -2115,7 +2116,7 @@ void paste_actdata ()
/* check if we have a corresponding action channel */
if ((no_name) || (strcmp(achan->name, achant->name)==0)) {
- actname= achan->name;
+ actname= achant->name;
/* check if this is a constraint channel */
if (ale->type == ACTTYPE_CONCHAN) {
@@ -2124,7 +2125,7 @@ void paste_actdata ()
for (conchan=achan->constraintChannels.first; conchan; conchan=conchan->next) {
if (strcmp(conchan->name, conchant->name)==0) {
- conname= conchan->name;
+ conname= conchant->name;
ipo_src= conchan->ipo;
break;
}
@@ -2140,7 +2141,7 @@ void paste_actdata ()
else if (ale->ownertype == ACTTYPE_SHAPEKEY) {
/* check if this action channel is "#ACP_ShapeKey" */
if ((no_name) || (strcmp(achan->name, "#ACP_ShapeKey")==0)) {
- actname= achan->name;
+ actname= NULL;
ipo_src= achan->ipo;
break;
}
@@ -2148,12 +2149,12 @@ void paste_actdata ()
}
/* this shouldn't happen, but it might */
- if (ELEM(NULL, ipo_src, ipo_dst))
+ if (ipo_src == NULL)
continue;
/* loop over curves, pasting keyframes */
for (ico= ipo_src->curve.first; ico; ico= ico->next) {
- icu= verify_ipocurve((ID*)ob, ico->blocktype, actname, conname, "", ico->adrcode);
+ icu= verify_ipocurve((ID*)ob, ico->blocktype, actname, conname, NULL, ico->adrcode, 1);
if (icu) {
/* just start pasting, with the the first keyframe on the current frame, and so on */
@@ -5154,21 +5155,28 @@ void winqreadactionspace(ScrArea *sa, void *spacedata, BWinEvent *evt)
case DELKEY:
case XKEY:
- if (okee("Erase selected")) {
- if (mval[0] < NAMEWIDTH) {
- if (datatype == ACTCONT_ACTION)
- delete_action_channels();
- else if (datatype == ACTCONT_GPENCIL)
- delete_gpencil_layers();
+ /* markers are incorported under shift-modifier (it does go against conventions, but oh well :/) */
+ if (G.qual == LR_SHIFTKEY) {
+ if (okee("Erase selected marker(s)?")) {
+ if (mval[0] >= NAMEWIDTH)
+ remove_marker();
+ }
+ }
+ else {
+ if (okee("Erase selected?")) {
+ if (mval[0] < NAMEWIDTH) {
+ if (datatype == ACTCONT_ACTION)
+ delete_action_channels();
+ else if (datatype == ACTCONT_GPENCIL)
+ delete_gpencil_layers();
+ }
+ else
+ delete_action_keys();
}
- else
- delete_action_keys();
-
- if (mval[0] >= NAMEWIDTH)
- remove_marker();
-
- allqueue(REDRAWMARKER, 0);
}
+
+ allqueue(REDRAWMARKER, 0);
+
break;
case ACCENTGRAVEKEY:
diff --git a/source/blender/src/editarmature.c b/source/blender/src/editarmature.c
index 92c2db0eb57..d94d7795224 100644
--- a/source/blender/src/editarmature.c
+++ b/source/blender/src/editarmature.c
@@ -439,6 +439,109 @@ void docenter_armature (Object *ob, int centermode)
}
}
+/* helper for apply_armature_pose2bones - fixes parenting of objects that are bone-parented to armature */
+static void applyarmature_fix_boneparents (Object *armob)
+{
+ Object *ob;
+
+ /* go through all objects in database */
+ for (ob= G.main->object.first; ob; ob= ob->id.next) {
+ /* if parent is bone in this armature, apply corrections */
+ if ((ob->parent == armob) && (ob->partype == PARBONE)) {
+ /* apply current transform from parent (not yet destroyed),
+ * then calculate new parent inverse matrix
+ */
+ apply_obmat(ob);
+
+ what_does_parent(ob);
+ Mat4Invert(ob->parentinv, workob.obmat);
+ }
+ }
+}
+
+/* set the current pose as the restpose */
+void apply_armature_pose2bones(void)
+{
+ Object *ob;
+ bArmature *arm;
+ bPose *pose;
+ bPoseChannel *pchan;
+ EditBone *curbone;
+
+ /* don't check if editmode (should be done by caller) */
+ ob= OBACT;
+ if (ob->type!=OB_ARMATURE) return;
+ if (object_data_is_libdata(ob)) {
+ error_libdata();
+ return;
+ }
+ arm= get_armature(ob);
+
+ /* helpful warnings... */
+ // TODO: add warnings to be careful about actions, applying deforms first, etc.
+
+ /* Get editbones of active armature to alter */
+ if (G.edbo.first) BLI_freelistN(&G.edbo);
+ make_boneList(&G.edbo, &arm->bonebase, NULL);
+
+ /* get pose of active object and move it out of posemode */
+ pose= ob->pose;
+
+ for (pchan=pose->chanbase.first; pchan; pchan=pchan->next) {
+ curbone= editbone_name_exists(&G.edbo, pchan->name);
+
+ /* simply copy the head/tail values from pchan over to curbone */
+ VECCOPY(curbone->head, pchan->pose_head);
+ VECCOPY(curbone->tail, pchan->pose_tail);
+
+ /* fix roll:
+ * 1. find auto-calculated roll value for this bone now
+ * 2. remove this from the 'visual' y-rotation
+ */
+ {
+ float premat[3][3], imat[3][3],pmat[3][3], tmat[3][3];
+ float delta[3], eul[3];
+
+ /* obtain new auto y-rotation */
+ VecSubf(delta, curbone->tail, curbone->head);
+ vec_roll_to_mat3(delta, 0.0, premat);
+ Mat3Inv(imat, premat);
+
+ /* get pchan 'visual' matrix */
+ Mat3CpyMat4(pmat, pchan->pose_mat);
+
+ /* remove auto from visual and get euler rotation */
+ Mat3MulMat3(tmat, imat, pmat);
+ Mat3ToEul(tmat, eul);
+
+ /* just use this euler-y as new roll value */
+ curbone->roll= eul[1];
+ }
+
+ /* clear transform values for pchan */
+ pchan->loc[0]= pchan->loc[1]= pchan->loc[2]= 0;
+ pchan->quat[1]= pchan->quat[2]= pchan->quat[3]= 0;
+ pchan->quat[0]= pchan->size[0]= pchan->size[1]= pchan->size[2]= 1;
+
+ /* set anim lock */
+ curbone->flag |= BONE_UNKEYED;
+ }
+
+ /* convert editbones back to bones */
+ editbones_to_armature(&G.edbo, ob);
+ if (G.edbo.first) BLI_freelistN(&G.edbo);
+
+ /* flush positions of posebones */
+ where_is_pose(ob);
+
+ /* fix parenting of objects which are bone-parented */
+ applyarmature_fix_boneparents(ob);
+
+ BIF_undo_push("Apply new restpose");
+ allqueue(REDRAWVIEW3D, 0);
+}
+
+
/* Helper function for armature joining - link fixing */
static void joined_armature_fix_links(Object *tarArm, Object *srcArm, bPoseChannel *pchan, EditBone *curbone)
{
@@ -3207,6 +3310,143 @@ void switch_direction_armature (void)
BIF_undo_push("Switch Direction");
}
+/* editbone alignment */
+
+/* helper to fix a ebone position if its parent has moved due to alignment*/
+static void fix_connected_bone(EditBone *ebone)
+{
+ float diff[3];
+
+ if (!(ebone->parent) || !(ebone->flag & BONE_CONNECTED) || VecEqual(ebone->parent->tail, ebone->head))
+ return;
+
+ /* if the parent has moved we translate child's head and tail accordingly*/
+ VecSubf(diff, ebone->parent->tail, ebone->head);
+ VecAddf(ebone->head, ebone->head, diff);
+ VecAddf(ebone->tail, ebone->tail, diff);
+ return;
+}
+
+/* helper to recursively find chains of connected bones starting at ebone and fix their position */
+static void fix_editbone_connected_children(EditBone *ebone)
+{
+ EditBone *selbone;
+
+ for (selbone = G.edbo.first; selbone; selbone=selbone->next) {
+ if ((selbone->parent) && (selbone->parent == ebone) && (selbone->flag & BONE_CONNECTED)) {
+ fix_connected_bone(selbone);
+ fix_editbone_connected_children(selbone);
+ }
+ }
+ return;
+}
+
+static void bone_align_to_bone(EditBone *selbone, EditBone *actbone)
+{
+ float selboneaxis[3], actboneaxis[3], length;
+
+ VecSubf(actboneaxis, actbone->tail, actbone->head);
+ Normalize(actboneaxis);
+
+ VecSubf(selboneaxis, selbone->tail, selbone->head);
+ length = VecLength(selboneaxis);
+
+ VecMulf(actboneaxis, length);
+ VecAddf(selbone->tail, selbone->head, actboneaxis);
+ selbone->roll = actbone->roll;
+
+ /* if the bone being aligned has connected descendants they must be moved
+ according to their parent new position, otherwise they would be left
+ in an unconsistent state: connected but away from the parent*/
+ fix_editbone_connected_children(selbone);
+ return;
+}
+
+void align_selected_bones(void)
+{
+ bArmature *arm= G.obedit->data;
+ EditBone *actbone, *ebone, *selbone;
+ EditBone *flipbone, *flippar;
+ short allchildbones= 0, foundselbone= 0;
+
+ /* find active bone to align to */
+ for (actbone = G.edbo.first; actbone; actbone=actbone->next) {
+ if (arm->layer & actbone->layer) {
+ if (actbone->flag & BONE_ACTIVE)
+ break;
+ }
+ }
+ if (actbone == NULL) {
+ error("Needs an active bone");
+ return;
+ }
+
+ /* find selected bones */
+ for (ebone = G.edbo.first; ebone; ebone=ebone->next) {
+ if (arm->layer & ebone->layer) {
+ if ((ebone->flag & BONE_SELECTED) && (ebone != actbone)) {
+ foundselbone++;
+ if (ebone->parent != actbone) allchildbones= 1;
+ }
+ }
+ }
+ /* abort if no selected bones, and active bone doesn't have a parent to work with instead */
+ if (foundselbone==0 && actbone->parent==NULL) {
+ error("Need selected bone(s)");
+ return;
+ }
+
+ if (foundselbone==0 && actbone->parent) {
+ /* When only the active bone is selected, and it has a parent,
+ * align it to the parent, as that is the only possible outcome.
+ */
+ bone_align_to_bone(actbone, actbone->parent);
+
+ if (arm->flag & ARM_MIRROR_EDIT) {
+ flipbone = armature_bone_get_mirrored(actbone);
+ if (flipbone)
+ bone_align_to_bone(flipbone, flipbone->parent);
+ }
+ }
+ else {
+ /* loop through all editbones, aligning all selected bones to the active bone */
+ for (selbone = G.edbo.first; selbone; selbone=selbone->next) {
+ if (arm->layer & selbone->layer) {
+ if ((selbone->flag & BONE_SELECTED) && (selbone!=actbone)) {
+ /* align selbone to actbone */
+ bone_align_to_bone(selbone, actbone);
+
+ if (arm->flag & ARM_MIRROR_EDIT) {
+ /* - if there's a mirrored copy of selbone, try to find a mirrored copy of actbone
+ * (i.e. selbone="child.L" and actbone="parent.L", find "child.R" and "parent.R").
+ * This is useful for arm-chains, for example parenting lower arm to upper arm
+ * - if there's no mirrored copy of actbone (i.e. actbone = "parent.C" or "parent")
+ * then just use actbone. Useful when doing upper arm to spine.
+ */
+ flipbone = armature_bone_get_mirrored(selbone);
+ flippar = armature_bone_get_mirrored(actbone);
+
+ if (flipbone) {
+ if (flippar)
+ bone_align_to_bone(flipbone, flippar);
+ else
+ bone_align_to_bone(flipbone, actbone);
+ }
+ }
+ }
+ }
+ }
+ }
+
+ countall(); /* checks selection */
+ allqueue(REDRAWVIEW3D, 0);
+ allqueue(REDRAWBUTSEDIT, 0);
+ allqueue(REDRAWOOPS, 0);
+ BIF_undo_push("Align bones");
+
+ return;
+}
+
/* ***************** Pose tools ********************* */
void clear_armature(Object *ob, char mode)
diff --git a/source/blender/src/editcurve.c b/source/blender/src/editcurve.c
index 261bb26b0c4..c26c44103c0 100644
--- a/source/blender/src/editcurve.c
+++ b/source/blender/src/editcurve.c
@@ -262,7 +262,7 @@ static void printweightsNurb__doPrint(void *userData, Nurb *nurb, BPoint *bp, Be
{
char str[30];
- if (bp && (bp->f1&1)) {
+ if (bp && (bp->f1 & SELECT)) {
sprintf(str,"%2.2f", bp->vec[3]);
cpack(0x737373);
@@ -828,7 +828,6 @@ short extrudeflagNurb(int flag)
MEM_freeN(nu->bp);
nu->bp= newbp;
nu->pntsv++;
- if(nu->resolv<3) nu->resolv++;
makeknots(nu, 2, nu->flagv>>1);
}
else if(v==0 || v== nu->pntsu-1) { /* collumn in v-direction selected */
@@ -856,7 +855,6 @@ short extrudeflagNurb(int flag)
MEM_freeN(nu->bp);
nu->bp= newbp;
nu->pntsu++;
- if(nu->resolu<3) nu->resolu++;
makeknots(nu, 1, nu->flagu>>1);
}
}
@@ -1727,7 +1725,7 @@ void subdivideNurb()
*/
/* count */
if(nu->flagu & CU_CYCLIC) {
- a= nu->pntsu*nu->pntsv;
+ a= nu->pntsu;
bp= nu->bp;
prevbp= bp+(a-1);
}
@@ -2145,7 +2143,7 @@ int convertspline(short type, Nurb *nu)
nu->type |= 1;
calchandlesNurb(nu);
}
- else if(type==4) { /* to Nurb */
+ else if(type==CU_NURBS) {
nu->type &= ~7;
nu->type+= 4;
nu->orderu= 4;
@@ -2470,8 +2468,6 @@ void merge_2_nurb(Nurb *nu1, Nurb *nu2)
/* merge */
origu= nu1->pntsu;
nu1->pntsu+= nu2->pntsu;
- nu1->resolu+= nu2->pntsu;
- if(nu1->resolv < nu2->resolv) nu1->resolv= nu2->resolv;
if(nu1->orderu<3) nu1->orderu++;
if(nu1->orderv<3) nu1->orderv++;
temp= nu1->bp;
@@ -2916,12 +2912,12 @@ void addvert_Nurb(int mode)
if((nu->type & 7)==CU_BEZIER) {
/* which bezpoint? */
if(bezt== nu->bezt) { /* first */
- bezt->f1= bezt->f2= bezt->f3= 0;
+ BEZ_DESEL(bezt);
newbezt =
(BezTriple*)MEM_callocN((nu->pntsu+1) * sizeof(BezTriple), "addvert_Nurb");
memcpy(newbezt+1, bezt, nu->pntsu*sizeof(BezTriple));
*newbezt= *bezt;
- newbezt->f1= newbezt->f2= newbezt->f3= SELECT;
+ BEZ_SEL(newbezt);
if(newbezt->h1 >= 0) newbezt->h2= newbezt->h1;
else newbezt->h2= newbezt->h1= HD_ALIGN; /* does this ever happen? */
VECCOPY(temp, bezt->vec[1]);
@@ -2930,7 +2926,7 @@ void addvert_Nurb(int mode)
bezt= newbezt+1;
}
else if(bezt== (nu->bezt+nu->pntsu-1)) { /* last */
- bezt->f1= bezt->f2= bezt->f3= 0;
+ BEZ_DESEL(bezt);
newbezt =
(BezTriple*)MEM_callocN((nu->pntsu+1) * sizeof(BezTriple), "addvert_Nurb");
memcpy(newbezt, nu->bezt, nu->pntsu*sizeof(BezTriple));
@@ -2939,7 +2935,7 @@ void addvert_Nurb(int mode)
MEM_freeN(nu->bezt);
nu->bezt= newbezt;
newbezt+= nu->pntsu;
- newbezt->f1= newbezt->f2= newbezt->f3= SELECT;
+ BEZ_SEL(newbezt);
if(newbezt->h1 >= 0) newbezt->h2= newbezt->h1;
else newbezt->h2= newbezt->h1= HD_ALIGN; /* does this ever happen? */
bezt= nu->bezt+nu->pntsu-1;
@@ -2997,7 +2993,6 @@ void addvert_Nurb(int mode)
if(bp) {
nu->pntsu++;
- if(nu->resolu<3) nu->resolu++;
makeknots(nu, 1, nu->flagu>>1);
if(mode=='e') {
@@ -4116,16 +4111,17 @@ Nurb *addNurbprim(int type, int stype, int newname)
Mat3One(imat);
cent[0]= cent[1]= cent[2]= 0.0;
}
-
+
if ELEM5(stype, 0, 1, 2, 4, 6) {
nu = (Nurb*)MEM_callocN(sizeof(Nurb), "addNurbprim");
nu->type= type;
- nu->resolu= 12;
- nu->resolv= 12;
+ nu->resolu= 4;
+ nu->resolv= 4;
}
switch(stype) {
case 0: /* curve */
+ nu->resolu= 12; /* set as 4 above */
if(newname) {
rename_id((ID *)G.obedit, "Curve");
rename_id((ID *)G.obedit->data, "Curve");
@@ -4203,7 +4199,7 @@ Nurb *addNurbprim(int type, int stype, int newname)
nu->pntsv= 1;
nu->orderu= 5;
nu->flagu= 2; /* endpoint */
- nu->resolu= 32;
+ nu->resolu= 8;
nu->bp= callocstructN(BPoint, 5, "addNurbprim3");
bp= nu->bp;
@@ -4233,6 +4229,7 @@ Nurb *addNurbprim(int type, int stype, int newname)
break;
case 1: /* circle */
+ nu->resolu= 12; /* set as 4 above */
if(newname) {
rename_id((ID *)G.obedit, "CurveCircle");
rename_id((ID *)G.obedit->data, "CurveCircle");
@@ -4361,7 +4358,7 @@ Nurb *addNurbprim(int type, int stype, int newname)
}
nu= addNurbprim(4, 1, newname); /* circle */
- nu->resolu= 32;
+ nu->resolu= 4;
nu->flag= CU_SMOOTH;
BLI_addtail(&editNurb, nu); /* temporal for extrude and translate */
vec[0]=vec[1]= 0.0;
@@ -4394,8 +4391,8 @@ Nurb *addNurbprim(int type, int stype, int newname)
nu->pntsu= 5;
nu->pntsv= 1;
nu->orderu= 3;
- nu->resolu= 24;
- nu->resolv= 32;
+ nu->resolu= 4;
+ nu->resolv= 4;
nu->flag= CU_SMOOTH;
nu->bp= callocstructN(BPoint, 5, "addNurbprim6");
nu->flagu= 0;
@@ -4441,8 +4438,8 @@ Nurb *addNurbprim(int type, int stype, int newname)
xzproj= 1;
nu= addNurbprim(4, 1, newname); /* circle */
xzproj= 0;
- nu->resolu= 24;
- nu->resolv= 32;
+ nu->resolu= 4;
+ nu->resolv= 4;
nu->flag= CU_SMOOTH;
BLI_addtail(&editNurb, nu); /* temporal for extrude and translate */
if(newname && (U.flag & USER_ADD_VIEWALIGNED) == 0)
diff --git a/source/blender/src/editdeform.c b/source/blender/src/editdeform.c
index 5de4c6ed23c..3f178e1ea2b 100644
--- a/source/blender/src/editdeform.c
+++ b/source/blender/src/editdeform.c
@@ -270,7 +270,7 @@ static void del_defgroup_update_users(Object *ob, int id)
int a;
/* these cases don't use names to refer to vertex groups, so when
- * they get deleted the numbers get out of synce, this corrects that */
+ * they get deleted the numbers get out of sync, this corrects that */
if(ob->soft) {
if(ob->soft->vertgroup == id)
diff --git a/source/blender/src/editface.c b/source/blender/src/editface.c
index 781210cd373..77c27dfa3db 100644
--- a/source/blender/src/editface.c
+++ b/source/blender/src/editface.c
@@ -82,13 +82,14 @@
#include "BIF_space.h" /* for allqueue */
#include "BIF_drawimage.h" /* for allqueue */
-#include "BDR_drawmesh.h"
#include "BDR_editface.h"
#include "BDR_vpaint.h"
#include "BDR_editface.h"
#include "BDR_vpaint.h"
+#include "GPU_draw.h"
+
#include "mydevice.h"
#include "blendef.h"
#include "butspace.h"
@@ -311,7 +312,7 @@ static void uv_calc_shift_project(float *target, float *shift, float rotmat[][4]
}
}
-void correct_uv_aspect( void )
+static void correct_uv_aspect( void )
{
float aspx=1, aspy=1;
EditMesh *em = G.editMesh;
@@ -1049,7 +1050,7 @@ int edgetag_shortest_path(EditEdge *source, EditEdge *target)
return 1;
}
-void seam_edgehash_insert_face(EdgeHash *ehash, MFace *mf)
+static void seam_edgehash_insert_face(EdgeHash *ehash, MFace *mf)
{
BLI_edgehash_insert(ehash, mf->v1, mf->v2, NULL);
BLI_edgehash_insert(ehash, mf->v2, mf->v3, NULL);
@@ -1315,7 +1316,7 @@ void set_texturepaint() /* toggle */
if(G.f & G_TEXTUREPAINT) {
G.f &= ~G_TEXTUREPAINT;
- texpaint_enable_mipmap();
+ GPU_paint_set_mipmap(1);
}
else if (me) {
G.f |= G_TEXTUREPAINT;
@@ -1324,7 +1325,7 @@ void set_texturepaint() /* toggle */
make_tfaces(me);
brush_check_exists(&G.scene->toolsettings->imapaint.brush);
- texpaint_disable_mipmap();
+ GPU_paint_set_mipmap(0);
}
allqueue(REDRAWVIEW3D, 0);
diff --git a/source/blender/src/editimasel.c b/source/blender/src/editimasel.c
index 97ddc2e0f1d..8335af21247 100644
--- a/source/blender/src/editimasel.c
+++ b/source/blender/src/editimasel.c
@@ -959,10 +959,15 @@ void winqreadimaselspace(ScrArea *sa, void *spacedata, BWinEvent *evt)
{
error("Path too long, cannot enter this directory");
} else {
- strcat(simasel->dir, file->relname);
- strcat(simasel->dir,"/");
- simasel->file[0] = '\0';
- BLI_cleanup_dir(G.sce, simasel->dir);
+ if (strcmp(file->relname, "..")==0) {
+ /* avoids /../../ */
+ BLI_parent_dir(simasel->dir);
+ } else {
+ strcat(simasel->dir, file->relname);
+ strcat(simasel->dir,"/");
+ simasel->file[0] = '\0';
+ BLI_cleanup_dir(G.sce, simasel->dir);
+ }
BIF_filelist_setdir(simasel->files, simasel->dir);
BIF_filelist_free(simasel->files);
simasel->active_file = -1;
diff --git a/source/blender/src/editipo.c b/source/blender/src/editipo.c
index 63c301658f2..617683a6ab4 100644
--- a/source/blender/src/editipo.c
+++ b/source/blender/src/editipo.c
@@ -60,6 +60,7 @@
#include "DNA_key_types.h"
#include "DNA_lamp_types.h"
#include "DNA_material_types.h"
+#include "DNA_modifier_types.h"
#include "DNA_object_types.h"
#include "DNA_object_fluidsim.h"
#include "DNA_particle_types.h"
@@ -84,6 +85,7 @@
#include "BKE_key.h"
#include "BKE_main.h"
#include "BKE_material.h"
+#include "BKE_modifier.h"
#include "BKE_particle.h"
#include "BKE_texture.h"
#include "BKE_utildefines.h"
@@ -97,6 +99,7 @@
#include "BIF_editseq.h"
#include "BIF_editview.h"
#include "BIF_interface.h"
+#include "BIF_keyframing.h"
#include "BIF_mywindow.h"
#include "BIF_poseobject.h"
#include "BIF_screen.h"
@@ -462,24 +465,7 @@ static void make_part_editipo(SpaceIpo *si)
name = getname_part_ei(part_ar[a]);
strcpy(ei->name, name);
ei->adrcode= part_ar[a];
-
- //if(ei->adrcode & MA_MAP1) {
- // ei->adrcode-= MA_MAP1;
- // ei->adrcode |= texchannel_to_adrcode(si->channel);
- //}
- //else {
- // if(ei->adrcode==MA_MODE) ei->disptype= IPO_DISPBITS;
- //}
-
ei->col= ipo_rainbow(a, PART_TOTIPO);
-
- //len= strlen(ei->name);
- //if(len) {
- // if( ei->name[ len-1 ]=='R') ei->col= 0x5050FF;
- // else if( ei->name[ len-1 ]=='G') ei->col= 0x50FF50;
- // else if( ei->name[ len-1 ]=='B') ei->col= 0xFF7050;
- //}
-
ei->icu= find_ipocurve(si->ipo, ei->adrcode);
if(ei->icu) {
ei->flag= ei->icu->flag;
@@ -490,19 +476,41 @@ static void make_part_editipo(SpaceIpo *si)
}
// copied from make_seq_editipo
-static void make_fluidsim_editipo(SpaceIpo *si) // NT
+static void make_fluidsim_editipo(SpaceIpo *si, Object *ob) // NT
{
EditIpo *ei;
int a;
char *name;
- ei= si->editipo= MEM_callocN(FLUIDSIM_TOTIPO*sizeof(EditIpo), "fluidsim_editipo");
- si->totipo = FLUIDSIM_TOTIPO;
- for(a=0; a<FLUIDSIM_TOTIPO; a++) {
+ int numipos = FLUIDSIM_TOTIPO;
+ int ipo_start_index = 0;
+ FluidsimModifierData *fluidmd = (FluidsimModifierData *)modifiers_findByType(ob, eModifierType_Fluidsim);
+ FluidsimSettings *fss= fluidmd->fss;
+
+ // we don't need all fluid ipos for all types! - dg
+ if(fss->type == OB_FLUIDSIM_CONTROL)
+ {
+ numipos = 4; // there are 4 fluid control ipos
+ ipo_start_index = 9;
+
+ }
+ else if(fss->type == OB_FLUIDSIM_DOMAIN)
+ {
+ numipos = 5; // there are 5 ipos for fluid domains
+ }
+ else
+ {
+ numipos = 4; // there are 4 for the rest
+ ipo_start_index = 5;
+ }
+
+ ei= si->editipo= MEM_callocN(numipos*sizeof(EditIpo), "fluidsim_editipo");
+ si->totipo = numipos;
+ for(a=ipo_start_index; a<ipo_start_index+numipos; a++) {
//fprintf(stderr,"FSINAME %d %d \n",a,fluidsim_ar[a], (int)(getname_fluidsim_ei(fluidsim_ar[a])) );
name = getname_fluidsim_ei(fluidsim_ar[a]);
strcpy(ei->name, name);
ei->adrcode= fluidsim_ar[a];
- ei->col= ipo_rainbow(a, FLUIDSIM_TOTIPO);
+ ei->col= ipo_rainbow(a, numipos);
ei->icu= find_ipocurve(si->ipo, ei->adrcode);
if(ei->icu) {
ei->flag = ei->icu->flag;
@@ -966,7 +974,7 @@ static void make_editipo(void)
else if(G.sipo->blocktype==ID_FLUIDSIM) {
if (ob) { // NT
ob->ipowin= ID_FLUIDSIM;
- make_fluidsim_editipo(G.sipo);
+ make_fluidsim_editipo(G.sipo, ob);
}
}
else if(G.sipo->blocktype==ID_PA) {
@@ -1186,10 +1194,14 @@ static void get_ipo_context(short blocktype, ID **from, Ipo **ipo, char *actname
// }
}
else if(blocktype==ID_FLUIDSIM) {
- if(ob && ( ob->fluidsimFlag & OB_FLUIDSIM_ENABLE)) {
- FluidsimSettings *fss= ob->fluidsimSettings;
- *from= (ID *)ob;
- if(fss) *ipo= fss->ipo;
+ if(ob)
+ {
+ FluidsimModifierData *fluidmd = (FluidsimModifierData *)modifiers_findByType(ob, eModifierType_Fluidsim);
+ if(fluidmd) {
+ FluidsimSettings *fss= fluidmd->fss;
+ *from= (ID *)ob;
+ if(fss) *ipo= fss->ipo;
+ }
}
}
else if(blocktype==ID_PA) {
@@ -1334,14 +1346,10 @@ void update_editipo_flags(void)
for(a=0; a<G.sipo->totipo; a++) {
if(ik->data[a]) {
if(ik->flag & 1) {
- ik->data[a]->f1 |= SELECT;
- ik->data[a]->f2 |= SELECT;
- ik->data[a]->f3 |= SELECT;
+ BEZ_SEL(ik->data[a]);
}
else {
- ik->data[a]->f1 &= ~SELECT;
- ik->data[a]->f2 &= ~SELECT;
- ik->data[a]->f3 &= ~SELECT;
+ BEZ_DESEL(ik->data[a]);
}
}
}
@@ -1439,7 +1447,7 @@ static short findnearest_ipovert(IpoCurve **icu, BezTriple **bezt)
if(ei->disptype!=IPO_DISPBITS && ei->icu->ipo==IPO_BEZ) {
/* middle points get an advantage */
temp= -3+abs(mval[0]- sco[0][0])+ abs(mval[1]- sco[0][1]);
- if( bezt1->f1 & 1) temp+=5;
+ if( bezt1->f1 & SELECT) temp+=5;
if(temp<dist) {
hpoint= 0;
*bezt= bezt1;
@@ -1530,18 +1538,18 @@ void mouse_select_ipo(void)
if(bezt) {
if(hand==1) {
if(BEZSELECTED(bezt)) {
- bezt->f1= bezt->f2= bezt->f3= 0;
+ BEZ_DESEL(bezt);
}
else {
- bezt->f1= bezt->f2= bezt->f3= SELECT;
+ BEZ_SEL(bezt);
}
}
else if(hand==0) {
- if(bezt->f1 & SELECT) bezt->f1= 0;
+ if(bezt->f1 & SELECT) bezt->f1 &= ~SELECT;
else bezt->f1= SELECT;
}
else {
- if(bezt->f3 & SELECT) bezt->f3= 0;
+ if(bezt->f3 & SELECT) bezt->f3 &= ~SELECT;
else bezt->f3= SELECT;
}
}
@@ -1551,7 +1559,7 @@ void mouse_select_ipo(void)
if(bezt) {
if(hand==1) {
- bezt->f1|= SELECT; bezt->f2|= SELECT; bezt->f3|= SELECT;
+ BEZ_SEL(bezt);
}
else if(hand==0) bezt->f1 |= SELECT;
else bezt->f3 |= SELECT;
@@ -1793,113 +1801,130 @@ void do_ipo_selectbuttons(void)
- if bonename, the constname is the ipo to the constraint
*/
-/* note; check header_ipo.c, spaceipo_assign_ipo() too */
-Ipo *verify_ipo(ID *from, short blocktype, char *actname, char *constname, char *bonename)
+/* note: check header_ipo.c, spaceipo_assign_ipo() too */
+Ipo *verify_ipo(ID *from, short blocktype, char *actname, char *constname, char *bonename, short add)
{
-
- if(from==NULL || from->lib) return NULL;
+ /* lib-linked data is not appropriate here */
+ if ((from==NULL) || (from->lib))
+ return NULL;
/* first check action ipos */
- if(actname && actname[0]) {
+ if (actname && actname[0]) {
Object *ob= (Object *)from;
bActionChannel *achan;
- if(GS(from->name)!=ID_OB) {
+ if (GS(from->name)!=ID_OB) {
printf("called ipo system for action with wrong base pointer\n");
return NULL;
}
- if(ob->action==NULL)
+ if ((ob->action==NULL) && (add))
ob->action= add_empty_action("Action");
- achan= verify_action_channel(ob->action, actname);
+ if (add)
+ achan= verify_action_channel(ob->action, actname);
+ else
+ achan= get_action_channel(ob->action, actname);
- if(achan) {
+ if (achan) {
/* automatically assign achan to act-group based on pchan's grouping */
- if (blocktype == ID_PO)
+ if ((blocktype == ID_PO) && (add))
verify_pchan2achan_grouping(ob->action, ob->pose, actname);
/* constraint exception */
- if(blocktype==ID_CO) {
- bConstraintChannel *conchan= verify_constraint_channel(&achan->constraintChannels, constname);
- if(conchan->ipo==NULL) {
- conchan->ipo= add_ipo("CoIpo", ID_CO);
+ if (blocktype==ID_CO) {
+ bConstraintChannel *conchan;
+
+ if (add)
+ conchan= verify_constraint_channel(&achan->constraintChannels, constname);
+ else
+ conchan= get_constraint_channel(&achan->constraintChannels, constname);
+
+ if (conchan) {
+ if ((conchan->ipo==NULL) && (add))
+ conchan->ipo= add_ipo("CoIpo", ID_CO);
+ return conchan->ipo;
}
- return conchan->ipo;
}
else {
- if(achan->ipo==NULL) {
+ if ((achan->ipo==NULL) && (add))
achan->ipo= add_ipo("ActIpo", blocktype);
- }
-
return achan->ipo;
}
}
}
else {
-
- switch(GS(from->name)) {
+ switch (GS(from->name)) {
case ID_OB:
{
Object *ob= (Object *)from;
/* constraint exception */
- if(blocktype==ID_CO) {
+ if (blocktype==ID_CO) {
/* check the local constraint ipo */
- if(bonename && bonename[0] && ob->pose) {
+ if (bonename && bonename[0] && ob->pose) {
bPoseChannel *pchan= get_pose_channel(ob->pose, bonename);
bConstraint *con;
- for(con= pchan->constraints.first; con; con= con->next)
- if(strcmp(con->name, constname)==0)
+
+ for (con= pchan->constraints.first; con; con= con->next) {
+ if (strcmp(con->name, constname)==0)
break;
- if(con) {
- if(con->ipo==NULL) {
+ }
+
+ if (con) {
+ if ((con->ipo==NULL) && (add))
con->ipo= add_ipo("CoIpo", ID_CO);
- }
return con->ipo;
}
}
else { /* the actionchannel */
- bConstraintChannel *conchan= verify_constraint_channel(&ob->constraintChannels, constname);
- if(conchan->ipo==NULL) {
- conchan->ipo= add_ipo("CoIpo", ID_CO);
+ bConstraintChannel *conchan;
+
+ if (add)
+ conchan= verify_constraint_channel(&ob->constraintChannels, constname);
+ else
+ conchan= get_constraint_channel(&ob->constraintChannels, constname);
+
+ if (conchan) {
+ if ((conchan->ipo==NULL) && (add))
+ conchan->ipo= add_ipo("CoIpo", ID_CO);
+ return conchan->ipo;
}
- return conchan->ipo;
}
}
- else if(blocktype==ID_OB) {
- if(ob->ipo==NULL) {
+ else if (blocktype==ID_OB) {
+ if ((ob->ipo==NULL) && (add))
ob->ipo= add_ipo("ObIpo", ID_OB);
- }
return ob->ipo;
}
- else if(blocktype==ID_KE) {
+ else if (blocktype==ID_KE) {
Key *key= ob_get_key((Object *)from);
- if(key) {
- if(key->ipo==NULL) {
+ if (key) {
+ if ((key->ipo==NULL) && (add))
key->ipo= add_ipo("KeyIpo", ID_KE);
- }
return key->ipo;
}
return NULL;
}
- else if(blocktype== ID_FLUIDSIM) {
+ else if (blocktype== ID_FLUIDSIM) {
Object *ob= (Object *)from;
- if(ob->fluidsimFlag & OB_FLUIDSIM_ENABLE) {
- FluidsimSettings *fss= ob->fluidsimSettings;
- if(fss->ipo==NULL) {
+
+ FluidsimModifierData *fluidmd = (FluidsimModifierData *)modifiers_findByType(ob, eModifierType_Fluidsim);
+ if(fluidmd) {
+ FluidsimSettings *fss= fluidmd->fss;
+
+ if ((fss->ipo==NULL) && (add))
fss->ipo= add_ipo("FluidsimIpo", ID_FLUIDSIM);
- //fprintf(stderr,"FSIPO NEW!\n");
- }
return fss->ipo;
}
}
- else if(blocktype== ID_PA){
+ else if(blocktype== ID_PA) {
Object *ob= (Object *)from;
ParticleSystem *psys= psys_get_current(ob);
- if(psys){
- if(psys->part->ipo==0)
+
+ if (psys) {
+ if ((psys->part->ipo==NULL) && (add))
psys->part->ipo= add_ipo("ParticleIpo", ID_PA);
return psys->part->ipo;
}
@@ -1910,30 +1935,27 @@ Ipo *verify_ipo(ID *from, short blocktype, char *actname, char *constname, char
case ID_MA:
{
Material *ma= (Material *)from;
-
- if(ma->ipo==NULL) {
+
+ if ((ma->ipo==NULL) && (add))
ma->ipo= add_ipo("MatIpo", ID_MA);
- }
return ma->ipo;
}
break;
case ID_TE:
{
Tex *tex= (Tex *)from;
-
- if(tex->ipo==NULL) {
+
+ if ((tex->ipo==NULL) && (add))
tex->ipo= add_ipo("TexIpo", ID_TE);
- }
return tex->ipo;
}
break;
case ID_SEQ:
{
Sequence *seq= (Sequence *)from; /* note, sequence is mimicing Id */
-
- if(seq->ipo==NULL) {
+
+ if ((seq->ipo==NULL) && (add))
seq->ipo= add_ipo("SeqIpo", ID_SEQ);
- }
update_seq_ipo_rect(seq);
return seq->ipo;
}
@@ -1942,19 +1964,17 @@ Ipo *verify_ipo(ID *from, short blocktype, char *actname, char *constname, char
{
Curve *cu= (Curve *)from;
- if(cu->ipo==NULL) {
+ if ((cu->ipo==NULL) && (add))
cu->ipo= add_ipo("CuIpo", ID_CU);
- }
return cu->ipo;
}
break;
case ID_WO:
{
World *wo= (World *)from;
-
- if(wo->ipo==NULL) {
+
+ if ((wo->ipo==NULL) && (add))
wo->ipo= add_ipo("WoIpo", ID_WO);
- }
return wo->ipo;
}
break;
@@ -1962,29 +1982,26 @@ Ipo *verify_ipo(ID *from, short blocktype, char *actname, char *constname, char
{
Lamp *la= (Lamp *)from;
- if(la->ipo==NULL) {
+ if ((la->ipo==NULL) && (add))
la->ipo= add_ipo("LaIpo", ID_LA);
- }
return la->ipo;
}
break;
case ID_CA:
{
Camera *ca= (Camera *)from;
-
- if(ca->ipo==NULL) {
+
+ if ((ca->ipo==NULL) && (add))
ca->ipo= add_ipo("CaIpo", ID_CA);
- }
return ca->ipo;
}
break;
case ID_SO:
{
bSound *snd= (bSound *)from;
-
- if(snd->ipo==NULL) {
+
+ if ((snd->ipo==NULL) && (add))
snd->ipo= add_ipo("SndIpo", ID_SO);
- }
return snd->ipo;
}
}
@@ -1996,32 +2013,33 @@ Ipo *verify_ipo(ID *from, short blocktype, char *actname, char *constname, char
/* returns and creates
* Make sure functions check for NULL or they will crash!
* */
-IpoCurve *verify_ipocurve(ID *from, short blocktype, char *actname, char *constname, char *bonename, int adrcode)
+IpoCurve *verify_ipocurve(ID *from, short blocktype, char *actname, char *constname, char *bonename, int adrcode, short add)
{
Ipo *ipo;
IpoCurve *icu= NULL;
/* return 0 if lib */
- /* creates ipo too */
- ipo= verify_ipo(from, blocktype, actname, constname, bonename);
+ /* creates ipo too (if add) */
+ ipo= verify_ipo(from, blocktype, actname, constname, bonename, add);
- if(ipo && ipo->id.lib==NULL && from->lib==NULL) {
+ if ((ipo) && (ipo->id.lib==NULL) && (from->lib==NULL)) {
+ /* try to find matching curve */
+ icu= find_ipocurve(ipo, adrcode);
- for(icu= ipo->curve.first; icu; icu= icu->next) {
- if(icu->adrcode==adrcode) break;
- }
- if(icu==NULL) {
+ /* make a new one if none found (and can add) */
+ if ((icu==NULL) && (add)) {
icu= MEM_callocN(sizeof(IpoCurve), "ipocurve");
- icu->flag |= IPO_VISIBLE|IPO_AUTO_HORIZ;
- if(ipo->curve.first==NULL) icu->flag |= IPO_ACTIVE; /* first one added active */
+ icu->flag |= (IPO_VISIBLE|IPO_AUTO_HORIZ);
+ if (ipo->curve.first==NULL)
+ icu->flag |= IPO_ACTIVE; /* first one added active */
icu->blocktype= blocktype;
icu->adrcode= adrcode;
set_icu_vars(icu);
- BLI_addtail( &(ipo->curve), icu);
+ BLI_addtail(&ipo->curve, icu);
switch (GS(from->name)) {
case ID_SEQ: {
@@ -2033,189 +2051,11 @@ IpoCurve *verify_ipocurve(ID *from, short blocktype, char *actname, char *constn
}
}
}
-
- return icu;
-}
-
-
-/* threshold for inserting keyframes - threshold here should be good enough for now, but should become userpref */
-#define BEZT_INSERT_THRESH 0.00001
-
-/* Binary search algorithm for finding where to insert BezTriple. (for use by insert_bezt_icu)
- * Returns the index to insert at (data already at that index will be offset if replace is 0)
- */
-static int binarysearch_bezt_index (BezTriple array[], BezTriple *item, int arraylen, short *replace)
-{
- int start=0, end=arraylen;
- int loopbreaker= 0, maxloop= arraylen * 2;
- const float frame= (item)? item->vec[1][0] : 0.0f;
-
- /* initialise replace-flag first */
- *replace= 0;
-
- /* sneaky optimisations (don't go through searching process if...):
- * - keyframe to be added is to be added out of current bounds
- * - keyframe to be added would replace one of the existing ones on bounds
- */
- if ((arraylen <= 0) || ELEM(NULL, array, item)) {
- printf("Warning: binarysearch_bezt_index encountered invalid array \n");
- return 0;
- }
- else {
- /* check whether to add before/after/on */
- float framenum;
-
- /* 'First' Keyframe (when only one keyframe, this case is used) */
- framenum= array[0].vec[1][0];
- if (IS_EQT(frame, framenum, BEZT_INSERT_THRESH)) {
- *replace = 1;
- return 0;
- }
- else if (frame < framenum)
- return 0;
-
- /* 'Last' Keyframe */
- framenum= array[(arraylen-1)].vec[1][0];
- if (IS_EQT(frame, framenum, BEZT_INSERT_THRESH)) {
- *replace= 1;
- return (arraylen - 1);
- }
- else if (frame > framenum)
- return arraylen;
- }
-
-
- /* most of the time, this loop is just to find where to put it
- * 'loopbreaker' is just here to prevent infinite loops
- */
- for (loopbreaker=0; (start <= end) && (loopbreaker < maxloop); loopbreaker++) {
- /* compute and get midpoint */
- int mid = (start + end) / 2;
- float midfra= array[mid].vec[1][0];
-
- /* check if exactly equal to midpoint */
- if (IS_EQT(frame, midfra, BEZT_INSERT_THRESH)) {
- *replace = 1;
- return mid;
- }
-
- /* repeat in upper/lower half */
- if (frame > midfra)
- start= mid + 1;
- else if (frame < midfra)
- end= mid - 1;
- }
-
- /* print error if loop-limit exceeded */
- if (loopbreaker == (maxloop-1)) {
- printf("Error: binarysearch_bezt_index was taking too long \n");
-
- // include debug info
- printf("\tround = %d: start = %d, end = %d, arraylen = %d \n", loopbreaker, start, end, arraylen);
- }
-
- /* not found, so return where to place it */
- return start;
-}
-
-/* This function adds a given BezTriple to an IPO-Curve. It will allocate
- * memory for the array if needed, and will insert the BezTriple into a
- * suitable place in chronological order.
- *
- * NOTE: any recalculate of the IPO-Curve that needs to be done will need to
- * be done by the caller.
- */
-int insert_bezt_icu (IpoCurve *icu, BezTriple *bezt)
-{
- BezTriple *newb;
- int i= 0;
-
- if (icu->bezt == NULL) {
- icu->bezt= MEM_callocN(sizeof(BezTriple), "beztriple");
- *(icu->bezt)= *bezt;
- icu->totvert= 1;
- }
- else {
- short replace = -1;
- i = binarysearch_bezt_index(icu->bezt, bezt, icu->totvert, &replace);
-
- if (replace) {
- /* sanity check: 'i' may in rare cases exceed arraylen */
- if ((i >= 0) && (i < icu->totvert))
- *(icu->bezt + i) = *bezt;
- }
- else {
- /* add new */
- newb= MEM_callocN((icu->totvert+1)*sizeof(BezTriple), "beztriple");
-
- /* add the beztriples that should occur before the beztriple to be pasted (originally in ei->icu) */
- if (i > 0)
- memcpy(newb, icu->bezt, i*sizeof(BezTriple));
-
- /* add beztriple to paste at index i */
- *(newb + i)= *bezt;
-
- /* add the beztriples that occur after the beztriple to be pasted (originally in icu) */
- if (i < icu->totvert)
- memcpy(newb+i+1, icu->bezt+i, (icu->totvert-i)*sizeof(BezTriple));
-
- /* replace (+ free) old with new */
- MEM_freeN(icu->bezt);
- icu->bezt= newb;
-
- icu->totvert++;
- }
- }
- /* we need to return the index, so that some tools which do post-processing can
- * detect where we added the BezTriple in the array
- */
- return i;
+ /* return ipo-curve */
+ return icu;
}
-/* This function is a wrapper for insert_bezt_icu, and should be used when
- * adding a new keyframe to a curve, when the keyframe doesn't exist anywhere
- * else yet.
- *
- * 'fast' - is only for the python API where importing BVH's would take an extreamly long time.
- */
-void insert_vert_icu (IpoCurve *icu, float x, float y, short fast)
-{
- BezTriple beztr;
- int a, h1, h2;
-
- /* set all three points, for nicer start position */
- memset(&beztr, 0, sizeof(BezTriple));
- beztr.vec[0][0]= x;
- beztr.vec[0][1]= y;
- beztr.vec[1][0]= x;
- beztr.vec[1][1]= y;
- beztr.vec[2][0]= x;
- beztr.vec[2][1]= y;
- beztr.hide= IPO_BEZ;
- beztr.f1= beztr.f2= beztr.f3= SELECT;
- beztr.h1= beztr.h2= HD_AUTO;
-
- /* add temp beztriple to keyframes */
- a= insert_bezt_icu(icu, &beztr);
- if (!fast) calchandles_ipocurve(icu);
-
- /* set handletype */
- if (icu->totvert > 2) {
- BezTriple *bezt;
-
- h1= h2= HD_AUTO;
- bezt= (icu->bezt + a);
-
- if (a > 0) h1= (bezt-1)->h2;
- if (a < icu->totvert-1) h2= (bezt+1)->h1;
-
- bezt->h1= h1;
- bezt->h2= h2;
-
- if (!fast) calchandles_ipocurve(icu);
- }
-}
void add_vert_ipo(void)
{
@@ -2250,7 +2090,7 @@ void add_vert_ipo(void)
if(ei->icu==NULL) {
if(G.sipo->from) {
- ei->icu= verify_ipocurve(G.sipo->from, G.sipo->blocktype, G.sipo->actname, G.sipo->constname, G.sipo->bonename, ei->adrcode);
+ ei->icu= verify_ipocurve(G.sipo->from, G.sipo->blocktype, G.sipo->actname, G.sipo->constname, G.sipo->bonename, ei->adrcode, 1);
if (ei->icu)
ei->flag |= ei->icu->flag & IPO_AUTO_HORIZ; /* new curve could have been added, weak... */
else
@@ -2276,525 +2116,6 @@ void add_vert_ipo(void)
BIF_undo_push("Add Ipo vertex");
}
-static void *get_context_ipo_poin(ID *id, int blocktype, char *actname, char *constname, IpoCurve *icu, int *vartype)
-{
- if (blocktype==ID_PO) {
- if (GS(id->name)==ID_OB) {
- Object *ob= (Object *)id;
- bPoseChannel *pchan= get_pose_channel(ob->pose, actname);
-
- if (pchan) {
- *vartype= IPO_FLOAT;
- return get_pchan_ipo_poin(pchan, icu->adrcode);
- }
- else
- return NULL;
- }
- return NULL;
- }
- else if (blocktype==ID_CO) {
- if ((GS(id->name)==ID_OB) && (constname && constname[0])) {
- Object *ob= (Object *)id;
- bConstraint *con;
-
- /* assume that we only want the influence (as only used for Constraint Channels) */
- if ((ob->ipoflag & OB_ACTION_OB) && !strcmp(actname, "Object")) {
- for (con= ob->constraints.first; con; con= con->next) {
- if (strcmp(constname, con->name)==0) {
- *vartype= IPO_FLOAT;
- return &con->enforce;
- }
- }
- }
- else if (ob->pose) {
- bPoseChannel *pchan= get_pose_channel(ob->pose, actname);
-
- if (pchan) {
- for (con= pchan->constraints.first; con; con= con->next) {
- if (strcmp(constname, con->name)==0) {
- *vartype= IPO_FLOAT;
- return &con->enforce;
- }
- }
- }
- }
- }
- return NULL;
- }
- else
- return get_ipo_poin(id, icu, vartype);
-
-}
-
-#define KEYNEEDED_DONTADD 0
-#define KEYNEEDED_JUSTADD 1
-#define KEYNEEDED_DELPREV 2
-#define KEYNEEDED_DELNEXT 3
-
-static int new_key_needed(IpoCurve *icu, float cFrame, float nValue)
-{
- /* This function determines whether a new keyframe is needed */
- /* Cases where keyframes should not be added:
- * 1. Keyframe to be added bewteen two keyframes with similar values
- * 2. Keyframe to be added on frame where two keyframes are already situated
- * 3. Keyframe lies at point that intersects the linear line between two keyframes
- */
-
- BezTriple *bezt=NULL, *prev=NULL;
- int totCount, i;
- float valA = 0.0f, valB = 0.0f;
-
- /* safety checking */
- if (!icu) return KEYNEEDED_JUSTADD;
- totCount= icu->totvert;
- if (totCount==0) return KEYNEEDED_JUSTADD;
-
- /* loop through checking if any are the same */
- bezt= icu->bezt;
- for (i=0; i<totCount; i++) {
- float prevPosi=0.0f, prevVal=0.0f;
- float beztPosi=0.0f, beztVal=0.0f;
-
- /* get current time+value */
- beztPosi= bezt->vec[1][0];
- beztVal= bezt->vec[1][1];
-
- if (prev) {
- /* there is a keyframe before the one currently being examined */
-
- /* get previous time+value */
- prevPosi= prev->vec[1][0];
- prevVal= prev->vec[1][1];
-
- /* keyframe to be added at point where there are already two similar points? */
- if (IS_EQ(prevPosi, cFrame) && IS_EQ(beztPosi, cFrame) && IS_EQ(beztPosi, prevPosi)) {
- return KEYNEEDED_DONTADD;
- }
-
- /* keyframe between prev+current points ? */
- if ((prevPosi <= cFrame) && (cFrame <= beztPosi)) {
- /* is the value of keyframe to be added the same as keyframes on either side ? */
- if (IS_EQ(prevVal, nValue) && IS_EQ(beztVal, nValue) && IS_EQ(prevVal, beztVal)) {
- return KEYNEEDED_DONTADD;
- }
- else {
- float realVal;
-
- /* get real value of curve at that point */
- realVal= eval_icu(icu, cFrame);
-
- /* compare whether it's the same as proposed */
- if (IS_EQ(realVal, nValue))
- return KEYNEEDED_DONTADD;
- else
- return KEYNEEDED_JUSTADD;
- }
- }
-
- /* new keyframe before prev beztriple? */
- if (cFrame < prevPosi) {
- /* A new keyframe will be added. However, whether the previous beztriple
- * stays around or not depends on whether the values of previous/current
- * beztriples and new keyframe are the same.
- */
- if (IS_EQ(prevVal, nValue) && IS_EQ(beztVal, nValue) && IS_EQ(prevVal, beztVal))
- return KEYNEEDED_DELNEXT;
- else
- return KEYNEEDED_JUSTADD;
- }
- }
- else {
- /* just add a keyframe if there's only one keyframe
- * and the new one occurs before the exisiting one does.
- */
- if ((cFrame < beztPosi) && (totCount==1))
- return KEYNEEDED_JUSTADD;
- }
-
- /* continue. frame to do not yet passed (or other conditions not met) */
- if (i < (totCount-1)) {
- prev= bezt;
- bezt++;
- }
- else
- break;
- }
-
- /* Frame in which to add a new-keyframe occurs after all other keys
- * -> If there are at least two existing keyframes, then if the values of the
- * last two keyframes and the new-keyframe match, the last existing keyframe
- * gets deleted as it is no longer required.
- * -> Otherwise, a keyframe is just added. 1.0 is added so that fake-2nd-to-last
- * keyframe is not equal to last keyframe.
- */
- bezt= (icu->bezt + (icu->totvert - 1));
- valA= bezt->vec[1][1];
-
- if (prev)
- valB= prev->vec[1][1];
- else
- valB= bezt->vec[1][1] + 1.0f;
-
- if (IS_EQ(valA, nValue) && IS_EQ(valA, valB))
- return KEYNEEDED_DELPREV;
- else
- return KEYNEEDED_JUSTADD;
-}
-
-/* a duplicate of insertkey that does not check for routing to insertmatrixkey
- to avoid recursion problems */
-static void insertkey_nonrecurs(ID *id, int blocktype, char *actname, char *constname, int adrcode)
-{
- IpoCurve *icu;
- Object *ob;
- void *poin= NULL;
- float curval, cfra;
- int vartype;
- int matset=0;
-
- if (matset==0) {
- icu= verify_ipocurve(id, blocktype, actname, constname, NULL, adrcode);
-
- if(icu) {
-
- poin= get_context_ipo_poin(id, blocktype, actname, constname, icu, &vartype);
-
- if(poin) {
- curval= read_ipo_poin(poin, vartype);
-
- cfra= frame_to_float(CFRA);
-
- /* if action is mapped in NLA, it returns a correction */
- if(actname && actname[0] && GS(id->name)==ID_OB)
- cfra= get_action_frame((Object *)id, cfra);
-
- if( GS(id->name)==ID_OB ) {
- ob= (Object *)id;
- if((ob->ipoflag & OB_OFFS_OB) && (give_timeoffset(ob)!=0.0) ) {
- /* actually frametofloat calc again! */
- cfra-= give_timeoffset(ob)*G.scene->r.framelen;
- }
- }
-
- insert_vert_icu(icu, cfra, curval, 0);
- }
- }
- }
-}
-
-int insertmatrixkey(ID *id, int blocktype, char *actname, char *constname, int adrcode)
-{
- int matindex=0;
- /* branch on adrcode and blocktype, generating the proper matrix-based
- values to send to insertfloatkey */
- if (GS(id->name)==ID_OB) {
- Object *ob= (Object *)id;
-
- if ( blocktype==ID_OB ){ //working with an object
- if ((ob)&&!(ob->parent)) {
- if ((adrcode==OB_ROT_X)||(adrcode==OB_ROT_Y)||(adrcode==OB_ROT_Z)) { //get a rotation
- float eul[3];
- switch (adrcode) {
- case OB_ROT_X:
- matindex=0;
- break;
- case OB_ROT_Y:
- matindex=1;
- break;
- case OB_ROT_Z:
- matindex=2;
- break;
- }
- Mat4ToEul(ob->obmat, eul);
- insertfloatkey(id, ID_OB, actname, NULL, adrcode, eul[matindex]*(5.72958));
- return 1;
- } else if ((adrcode==OB_LOC_X)||(adrcode==OB_LOC_Y)||(adrcode==OB_LOC_Z)) {//get a translation
- switch (adrcode) {
- case OB_LOC_X:
- matindex=0;
- break;
- case OB_LOC_Y:
- matindex=1;
- break;
- case OB_LOC_Z:
- matindex=2;
- break;
- }
- insertfloatkey(id, ID_OB, actname, NULL, adrcode, ob->obmat[3][matindex]);
- return 1;
- }
- }
- } else if ( blocktype==ID_PO) { //working with a pose channel
- bPoseChannel *pchan= get_pose_channel(ob->pose, actname);
- if (pchan) {
- if ((adrcode==AC_LOC_X)||(adrcode==AC_LOC_Y)||(adrcode==AC_LOC_Z)) {
- switch (adrcode) {
- case AC_LOC_X:
- matindex=0;
- break;
- case AC_LOC_Y:
- matindex=1;
- break;
- case AC_LOC_Z:
- matindex=2;
- break;
- }
- if (!(pchan->bone->parent)||((pchan->bone->parent)&&!(pchan->bone->flag&BONE_CONNECTED))) { /* don't use for non-connected child bones */
- float delta_mat[4][4];
- armature_mat_pose_to_delta(delta_mat, pchan->pose_mat, pchan->bone->arm_mat);
- insertfloatkey(id, ID_PO, pchan->name, NULL, adrcode, delta_mat[3][matindex]);
- return 1;
- }
- } else if ((adrcode==AC_QUAT_W)||(adrcode==AC_QUAT_X)||(adrcode==AC_QUAT_Y)||(adrcode==AC_QUAT_Z)) {
- float tmat[4][4], trimat[3][3], localQuat[4];
-
- switch (adrcode) {
- case AC_QUAT_W:
- matindex=0;
- break;
- case AC_QUAT_X:
- matindex=1;
- break;
- case AC_QUAT_Y:
- matindex=2;
- break;
- case AC_QUAT_Z:
- matindex=3;
- break;
- }
-
- /* it should be reasonable to assume that we are keyframing on the active object, although it is not
- * strictly required for this particular space conversion, arg1 must not be null for this to work
- */
- Mat4CpyMat4(tmat, pchan->pose_mat);
- constraint_mat_convertspace(OBACT, pchan, tmat, CONSTRAINT_SPACE_POSE, CONSTRAINT_SPACE_LOCAL);
-
- Mat3CpyMat4(trimat, tmat);
- Mat3ToQuat_is_ok(trimat, localQuat);
- insertfloatkey(id, ID_PO, pchan->name, NULL, adrcode, localQuat[matindex]);
-
- return 1;
- }
- }
- }
- }
- /* failed to set a matrix key -- use traditional, but the non-recursing version */
- insertkey_nonrecurs(id,blocktype,actname,constname,adrcode);
- return 0;
-}
-
-static int match_adr_constraint(ID * id, int blocktype, char *actname, int adrcode)
-{ /* This function matches constraint blocks with adrcodes to see if the
- visual keying method should be used. For example, an object looking to key
- location and having a CopyLoc constraint would return true. */
-
- Object *ob=NULL;
- int foundmatch=0;
- int searchtype=0;
- bConstraint *conref=NULL, *con=NULL;
-
- /*Retrieve constraint list*/
- if( GS(id->name)==ID_OB )
- ob= (Object *)id;
- if (ob) {
- if (blocktype==ID_PO) {
- bPoseChannel *pchan= get_pose_channel(ob->pose, actname);
- conref=pchan->constraints.first;
- } else if (blocktype==ID_OB) {
- conref=ob->constraints.first;
- }
-
- if (conref) {
- /*Set search type: 1 is for translation contraints, 2 is for rotation*/
- if ((adrcode==OB_LOC_X)||(adrcode==OB_LOC_Y)||(adrcode==OB_LOC_Z)||(adrcode==AC_LOC_X)||(adrcode==AC_LOC_Y)||(adrcode==AC_LOC_Z)) {
- searchtype=1;
- } else if ((adrcode==OB_ROT_X)||(adrcode==OB_ROT_Y)||(adrcode==OB_ROT_Z)||(adrcode==AC_QUAT_W)||(adrcode==AC_QUAT_X)||(adrcode==AC_QUAT_Y)||(adrcode==AC_QUAT_Z)) {
- searchtype=2;
- }
-
- if (searchtype>0) {
- for (con=conref; (con)&&(foundmatch==0); con=con->next) {
- switch (con->type) {
- /* match constraint types to which kinds of keying they would affect */
- case CONSTRAINT_TYPE_CHILDOF:
- foundmatch=1;
- break;
- case CONSTRAINT_TYPE_TRACKTO:
- if (searchtype==2) foundmatch=1;
- break;
- case CONSTRAINT_TYPE_FOLLOWPATH:
- foundmatch=1;
- break;
- case CONSTRAINT_TYPE_ROTLIMIT:
- if (searchtype==2) foundmatch=1;
- break;
- case CONSTRAINT_TYPE_LOCLIMIT:
- if (searchtype==1) foundmatch=1;
- break;
- case CONSTRAINT_TYPE_ROTLIKE:
- if (searchtype==2) foundmatch=1;
- break;
- case CONSTRAINT_TYPE_LOCLIKE:
- if (searchtype==1) foundmatch=1;
- break;
- case CONSTRAINT_TYPE_LOCKTRACK:
- if (searchtype==2) foundmatch=1;
- break;
- case CONSTRAINT_TYPE_DISTLIMIT:
- if (searchtype==1) foundmatch=1;
- break;
- case CONSTRAINT_TYPE_MINMAX:
- if (searchtype==1) foundmatch=1;
- break;
- case CONSTRAINT_TYPE_TRANSFORM:
- foundmatch=1;
- break;
- default:
- break;
- }
- }
- }
- }
- }
-
- return foundmatch;
-
-}
-
-void insertkey(ID *id, int blocktype, char *actname, char *constname, int adrcode, short fast)
-{
- IpoCurve *icu;
- Object *ob;
- void *poin= NULL;
- float curval, cfra;
- int vartype;
- int matset=0;
-
- if ((IS_AUTOKEY_FLAG(AUTOMATKEY))&&(match_adr_constraint(id, blocktype, actname, adrcode))) {
- matset=insertmatrixkey(id, blocktype, actname, constname, adrcode);
- }
- if (matset==0) {
- icu= verify_ipocurve(id, blocktype, actname, constname, NULL, adrcode);
-
- if(icu) {
-
- poin= get_context_ipo_poin(id, blocktype, actname, constname, icu, &vartype);
-
- if(poin) {
- curval= read_ipo_poin(poin, vartype);
-
- cfra= frame_to_float(CFRA);
-
- /* if action is mapped in NLA, it returns a correction */
- if(actname && actname[0] && GS(id->name)==ID_OB)
- cfra= get_action_frame((Object *)id, cfra);
-
- if( GS(id->name)==ID_OB ) {
- ob= (Object *)id;
- if((ob->ipoflag & OB_OFFS_OB) && (give_timeoffset(ob)!=0.0) ) {
- /* actually frametofloat calc again! */
- cfra-= give_timeoffset(ob)*G.scene->r.framelen;
- }
- }
-
- insert_vert_icu(icu, cfra, curval, fast);
- }
- }
- }
-}
-
-
-
-/* This function is a 'smarter' version of the insert key code.
- * It uses an auxilliary function to check whether a keyframe is really needed */
-void insertkey_smarter(ID *id, int blocktype, char *actname, char *constname, int adrcode)
-{
- IpoCurve *icu;
- Object *ob;
- void *poin= NULL;
- float curval, cfra;
- int vartype;
- int insert_mode;
-
- icu= verify_ipocurve(id, blocktype, actname, constname, NULL, adrcode);
-
- if(icu) {
-
- poin= get_context_ipo_poin(id, blocktype, actname, constname, icu, &vartype);
-
- if(poin) {
- curval= read_ipo_poin(poin, vartype);
-
- cfra= frame_to_float(CFRA);
-
- /* if action is mapped in NLA, it returns a correction */
- if(actname && actname[0] && GS(id->name)==ID_OB)
- cfra= get_action_frame((Object *)id, cfra);
-
- if( GS(id->name)==ID_OB ) {
- ob= (Object *)id;
- if((ob->ipoflag & OB_OFFS_OB) && (give_timeoffset(ob)!=0.0) ) {
- /* actually frametofloat calc again! */
- cfra-= give_timeoffset(ob)*G.scene->r.framelen;
- }
- }
-
- /* check whether this curve really needs a new keyframe */
- insert_mode= new_key_needed(icu, cfra, curval);
-
- /* insert new keyframe at current frame */
- if (insert_mode)
- insert_vert_icu(icu, cfra, curval, 0);
-
- /* delete keyframe immediately before/after newly added */
- switch (insert_mode) {
- case KEYNEEDED_DELPREV:
- delete_icu_key(icu, icu->totvert-2, 1);
- break;
- case KEYNEEDED_DELNEXT:
- delete_icu_key(icu, 1, 1);
- break;
- }
- }
- }
-}
-
-/* For inserting keys based on an arbitrary float value */
-void insertfloatkey(ID *id, int blocktype, char *actname, char *constname, int adrcode, float floatkey)
-{
- IpoCurve *icu;
- Object *ob;
- void *poin= NULL;
- float cfra;
- int vartype;
-
- icu= verify_ipocurve(id, blocktype, actname, constname, NULL, adrcode);
-
- if(icu) {
-
- poin= get_context_ipo_poin(id, blocktype, actname, constname, icu, &vartype);
-
- if(poin) {
-
- cfra= frame_to_float(CFRA);
-
- /* if action is mapped in NLA, it returns a correction */
- if(actname && actname[0] && GS(id->name)==ID_OB)
- cfra= get_action_frame((Object *)id, cfra);
-
- if( GS(id->name)==ID_OB ) {
- ob= (Object *)id;
- if((ob->ipoflag & OB_OFFS_OB) && (give_timeoffset(ob)!=0.0) ) {
- /* actually frametofloat calc again! */
- cfra-= give_timeoffset(ob)*G.scene->r.framelen;
- }
- }
-
- /* insert new keyframe at current frame */
- insert_vert_icu(icu, cfra, floatkey, 0);
- }
- }
-}
void insertkey_editipo(void)
{
@@ -2926,598 +2247,6 @@ void insertkey_editipo(void)
}
-void common_insertkey(void)
-{
- Base *base;
- Object *ob;
- Material *ma;
- ID *id;
- IpoCurve *icu;
- World *wo;
- Lamp *la;
- Tex *te;
- int tlay, map, event;
- char menustr[256];
-
- if(curarea->spacetype==SPACE_IPO) {
- insertkey_editipo();
- }
- else if(curarea->spacetype==SPACE_ACTION) {
- insertkey_action();
- }
- else if(curarea->spacetype==SPACE_BUTS) {
- if(G.buts->mainb==CONTEXT_SHADING) {
- int tab= G.buts->tab[CONTEXT_SHADING];
-
- if(tab==TAB_SHADING_MAT) {
- ma = G.buts->lockpoin;
- ma = editnode_get_active_material(ma);
- id = (ID *)ma;
-
- if(id) {
- event= pupmenu("Insert Key %t|RGB%x0|Alpha%x1|Halo Size%x2|Mode %x3|All Color%x10|All Mirror%x14|Ofs%x12|Size%x13|All Mapping%x11");
- if(event== -1) return;
-
- map= texchannel_to_adrcode(ma->texact);
-
- if(event==0 || event==10) {
- insertkey(id, ID_MA, NULL, NULL, MA_COL_R, 0);
- insertkey(id, ID_MA, NULL, NULL, MA_COL_G, 0);
- insertkey(id, ID_MA, NULL, NULL, MA_COL_B, 0);
- }
- if(event==1 || event==10) {
- insertkey(id, ID_MA, NULL, NULL, MA_ALPHA, 0);
- }
- if(event==2 || event==10) {
- insertkey(id, ID_MA, NULL, NULL, MA_HASIZE, 0);
- }
- if(event==3 || event==10) {
- insertkey(id, ID_MA, NULL, NULL, MA_MODE, 0);
- }
- if(event==10) {
- insertkey(id, ID_MA, NULL, NULL, MA_SPEC_R, 0);
- insertkey(id, ID_MA, NULL, NULL, MA_SPEC_G, 0);
- insertkey(id, ID_MA, NULL, NULL, MA_SPEC_B, 0);
- insertkey(id, ID_MA, NULL, NULL, MA_REF, 0);
- insertkey(id, ID_MA, NULL, NULL, MA_EMIT, 0);
- insertkey(id, ID_MA, NULL, NULL, MA_AMB, 0);
- insertkey(id, ID_MA, NULL, NULL, MA_SPEC, 0);
- insertkey(id, ID_MA, NULL, NULL, MA_HARD, 0);
- insertkey(id, ID_MA, NULL, NULL, MA_MODE, 0);
- insertkey(id, ID_MA, NULL, NULL, MA_TRANSLU, 0);
- insertkey(id, ID_MA, NULL, NULL, MA_ADD, 0);
- }
- if(event==14) {
- insertkey(id, ID_MA, NULL, NULL, MA_RAYM, 0);
- insertkey(id, ID_MA, NULL, NULL, MA_FRESMIR, 0);
- insertkey(id, ID_MA, NULL, NULL, MA_FRESMIRI, 0);
- insertkey(id, ID_MA, NULL, NULL, MA_FRESTRA, 0);
- insertkey(id, ID_MA, NULL, NULL, MA_FRESTRAI, 0);
- }
- if(event==12 || event==11) {
- insertkey(id, ID_MA, NULL, NULL, map+MAP_OFS_X, 0);
- insertkey(id, ID_MA, NULL, NULL, map+MAP_OFS_Y, 0);
- insertkey(id, ID_MA, NULL, NULL, map+MAP_OFS_Z, 0);
- }
- if(event==13 || event==11) {
- insertkey(id, ID_MA, NULL, NULL, map+MAP_SIZE_X, 0);
- insertkey(id, ID_MA, NULL, NULL, map+MAP_SIZE_Y, 0);
- insertkey(id, ID_MA, NULL, NULL, map+MAP_SIZE_Z, 0);
- }
- if(event==11) {
- insertkey(id, ID_MA, NULL, NULL, map+MAP_R, 0);
- insertkey(id, ID_MA, NULL, NULL, map+MAP_G, 0);
- insertkey(id, ID_MA, NULL, NULL, map+MAP_B, 0);
- insertkey(id, ID_MA, NULL, NULL, map+MAP_DVAR, 0);
- insertkey(id, ID_MA, NULL, NULL, map+MAP_COLF, 0);
- insertkey(id, ID_MA, NULL, NULL, map+MAP_NORF, 0);
- insertkey(id, ID_MA, NULL, NULL, map+MAP_VARF, 0);
- insertkey(id, ID_MA, NULL, NULL, map+MAP_DISP, 0);
- }
- }
- }
- else if(tab==TAB_SHADING_WORLD) {
- id= G.buts->lockpoin;
- wo= G.buts->lockpoin;
- if(id) {
- event= pupmenu("Insert Key %t|Zenith RGB%x0|Horizon RGB%x1|Mist%x2|Stars %x3|Offset%x12|Size%x13");
- if(event== -1) return;
-
- map= texchannel_to_adrcode(wo->texact);
-
- if(event==0) {
- insertkey(id, ID_WO, NULL, NULL, WO_ZEN_R, 0);
- insertkey(id, ID_WO, NULL, NULL, WO_ZEN_G, 0);
- insertkey(id, ID_WO, NULL, NULL, WO_ZEN_B, 0);
- }
- if(event==1) {
- insertkey(id, ID_WO, NULL, NULL, WO_HOR_R, 0);
- insertkey(id, ID_WO, NULL, NULL, WO_HOR_G, 0);
- insertkey(id, ID_WO, NULL, NULL, WO_HOR_B, 0);
- }
- if(event==2) {
- insertkey(id, ID_WO, NULL, NULL, WO_MISI, 0);
- insertkey(id, ID_WO, NULL, NULL, WO_MISTDI, 0);
- insertkey(id, ID_WO, NULL, NULL, WO_MISTSTA, 0);
- insertkey(id, ID_WO, NULL, NULL, WO_MISTHI, 0);
- }
- if(event==3) {
- insertkey(id, ID_WO, NULL, NULL, WO_STAR_R, 0);
- insertkey(id, ID_WO, NULL, NULL, WO_STAR_G, 0);
- insertkey(id, ID_WO, NULL, NULL, WO_STAR_B, 0);
- insertkey(id, ID_WO, NULL, NULL, WO_STARDIST, 0);
- insertkey(id, ID_WO, NULL, NULL, WO_STARSIZE, 0);
- }
- if(event==12) {
- insertkey(id, ID_WO, NULL, NULL, map+MAP_OFS_X, 0);
- insertkey(id, ID_WO, NULL, NULL, map+MAP_OFS_Y, 0);
- insertkey(id, ID_WO, NULL, NULL, map+MAP_OFS_Z, 0);
- }
- if(event==13) {
- insertkey(id, ID_WO, NULL, NULL, map+MAP_SIZE_X, 0);
- insertkey(id, ID_WO, NULL, NULL, map+MAP_SIZE_Y, 0);
- insertkey(id, ID_WO, NULL, NULL, map+MAP_SIZE_Z, 0);
- }
- }
- }
- else if(tab==TAB_SHADING_LAMP) {
- id= G.buts->lockpoin;
- la= G.buts->lockpoin;
- if(id) {
- event= pupmenu("Insert Key %t|RGB%x0|Energy%x1|Spot Size%x2|Offset%x12|Size%x13");
- if(event== -1) return;
-
- map= texchannel_to_adrcode(la->texact);
-
- if(event==0) {
- insertkey(id, ID_LA, NULL, NULL, LA_COL_R, 0);
- insertkey(id, ID_LA, NULL, NULL, LA_COL_G, 0);
- insertkey(id, ID_LA, NULL, NULL, LA_COL_B, 0);
- }
- if(event==1) {
- insertkey(id, ID_LA, NULL, NULL, LA_ENERGY, 0);
- }
- if(event==2) {
- insertkey(id, ID_LA, NULL, NULL, LA_SPOTSI, 0);
- }
- if(event==12) {
- insertkey(id, ID_LA, NULL, NULL, map+MAP_OFS_X, 0);
- insertkey(id, ID_LA, NULL, NULL, map+MAP_OFS_Y, 0);
- insertkey(id, ID_LA, NULL, NULL, map+MAP_OFS_Z, 0);
- }
- if(event==13) {
- insertkey(id, ID_LA, NULL, NULL, map+MAP_SIZE_X, 0);
- insertkey(id, ID_LA, NULL, NULL, map+MAP_SIZE_Y, 0);
- insertkey(id, ID_LA, NULL, NULL, map+MAP_SIZE_Z, 0);
- }
-
- }
- }
- else if(tab==TAB_SHADING_TEX) {
- id= G.buts->lockpoin;
- te= G.buts->lockpoin;
- if(id) {
- event= pupmenu("Insert Key %t|Clouds%x0|Marble%x1|Stucci%x2|Wood%x3|Magic%x4|Blend%x5|Musgrave%x6|Voronoi%x7|DistortedNoise%x8|ColorFilter%x9");
- if(event== -1) return;
-
- if(event==0) {
- insertkey(id, ID_TE, NULL, NULL, TE_NSIZE, 0);
- insertkey(id, ID_TE, NULL, NULL, TE_NDEPTH, 0);
- insertkey(id, ID_TE, NULL, NULL, TE_NTYPE, 0);
- insertkey(id, ID_TE, NULL, NULL, TE_MG_TYP, 0);
- insertkey(id, ID_TE, NULL, NULL, TE_N_BAS1, 0);
- }
- if(event==1) {
- insertkey(id, ID_TE, NULL, NULL, TE_NSIZE, 0);
- insertkey(id, ID_TE, NULL, NULL, TE_NDEPTH, 0);
- insertkey(id, ID_TE, NULL, NULL, TE_NTYPE, 0);
- insertkey(id, ID_TE, NULL, NULL, TE_TURB, 0);
- insertkey(id, ID_TE, NULL, NULL, TE_MG_TYP, 0);
- insertkey(id, ID_TE, NULL, NULL, TE_N_BAS1, 0);
- insertkey(id, ID_TE, NULL, NULL, TE_N_BAS2, 0);
- }
- if(event==2) {
- insertkey(id, ID_TE, NULL, NULL, TE_NSIZE, 0);
- insertkey(id, ID_TE, NULL, NULL, TE_NTYPE, 0);
- insertkey(id, ID_TE, NULL, NULL, TE_TURB, 0);
- insertkey(id, ID_TE, NULL, NULL, TE_MG_TYP, 0);
- insertkey(id, ID_TE, NULL, NULL, TE_N_BAS1, 0);
- }
- if(event==3) {
- insertkey(id, ID_TE, NULL, NULL, TE_NSIZE, 0);
- insertkey(id, ID_TE, NULL, NULL, TE_NTYPE, 0);
- insertkey(id, ID_TE, NULL, NULL, TE_TURB, 0);
- insertkey(id, ID_TE, NULL, NULL, TE_MG_TYP, 0);
- insertkey(id, ID_TE, NULL, NULL, TE_N_BAS1, 0);
- insertkey(id, ID_TE, NULL, NULL, TE_N_BAS2, 0);
- }
- if(event==4) {
- insertkey(id, ID_TE, NULL, NULL, TE_NDEPTH, 0);
- insertkey(id, ID_TE, NULL, NULL, TE_TURB, 0);
- }
- if(event==5) {
- insertkey(id, ID_TE, NULL, NULL, TE_MG_TYP, 0);
- }
- if(event==6) {
- insertkey(id, ID_TE, NULL, NULL, TE_MG_TYP, 0);
- insertkey(id, ID_TE, NULL, NULL, TE_MGH, 0);
- insertkey(id, ID_TE, NULL, NULL, TE_MG_LAC, 0);
- insertkey(id, ID_TE, NULL, NULL, TE_MG_OCT, 0);
- insertkey(id, ID_TE, NULL, NULL, TE_MG_OFF, 0);
- insertkey(id, ID_TE, NULL, NULL, TE_MG_GAIN, 0);
- }
- if(event==7) {
- insertkey(id, ID_TE, NULL, NULL, TE_VNW1, 0);
- insertkey(id, ID_TE, NULL, NULL, TE_VNW2, 0);
- insertkey(id, ID_TE, NULL, NULL, TE_VNW3, 0);
- insertkey(id, ID_TE, NULL, NULL, TE_VNW4, 0);
- insertkey(id, ID_TE, NULL, NULL, TE_VNMEXP, 0);
- insertkey(id, ID_TE, NULL, NULL, TE_VN_DISTM, 0);
- insertkey(id, ID_TE, NULL, NULL, TE_VN_COLT, 0);
- insertkey(id, ID_TE, NULL, NULL, TE_ISCA, 0);
- insertkey(id, ID_TE, NULL, NULL, TE_NSIZE, 0);
- }
- if(event==8) {
- insertkey(id, ID_TE, NULL, NULL, TE_MG_OCT, 0);
- insertkey(id, ID_TE, NULL, NULL, TE_MG_OFF, 0);
- insertkey(id, ID_TE, NULL, NULL, TE_MG_GAIN, 0);
- insertkey(id, ID_TE, NULL, NULL, TE_DISTA, 0);
- }
- if(event==9) {
- insertkey(id, ID_TE, NULL, NULL, TE_COL_R, 0);
- insertkey(id, ID_TE, NULL, NULL, TE_COL_G, 0);
- insertkey(id, ID_TE, NULL, NULL, TE_COL_B, 0);
- insertkey(id, ID_TE, NULL, NULL, TE_BRIGHT, 0);
- insertkey(id, ID_TE, NULL, NULL, TE_CONTRA, 0);
- }
- }
- }
- }
- else if(G.buts->mainb==CONTEXT_OBJECT) {
- ob= OBACT;
- if(ob) {
- id= (ID *) (ob);
- if(id) {
- if(ob->type==OB_MESH)
- event= pupmenu("Insert Key %t|Surface Damping%x0|Random Damping%x1|Permeability%x2|Force Strength%x3|Force Falloff%x4");
- else
- event= pupmenu("Insert Key %t|Force Strength%x3|Force Falloff%x4");
- if(event == -1) return;
-
- if(event==0) {
- insertkey(id, ID_OB, NULL, NULL, OB_PD_SDAMP, 0);
- }
- if(event==1) {
- insertkey(id, ID_OB, NULL, NULL, OB_PD_RDAMP, 0);
- }
- if(event==2) {
- insertkey(id, ID_OB, NULL, NULL, OB_PD_PERM, 0);
- }
- if(event==3) {
- insertkey(id, ID_OB, NULL, NULL, OB_PD_FSTR, 0);
- }
- if(event==4) {
- insertkey(id, ID_OB, NULL, NULL, OB_PD_FFALL, 0);
- }
- if(event==5) {
- insertkey(id, ID_OB, NULL, NULL, OB_PD_FMAXD, 0);
- }
- }
- }
- }
- else if(G.buts->mainb==CONTEXT_EDITING) {
- ob= OBACT;
- if(ob && ob->type==OB_CAMERA) {
- id= G.buts->lockpoin;
- if(id) {
- /* yafray: insert key extended with aperture and focal distance */
- /* qdn: FocalDistance now enabled for Blender as wel, for use with defocus node */
- if (G.scene->r.renderer==R_INTERN)
- event= pupmenu("Insert Key %t|Lens%x0|Clipping%x1|FocalDistance%x3|Viewplane Shift%x4");
- else
- event= pupmenu("Insert Key %t|Lens%x0|Clipping%x1|Aperture%x2|FocalDistance%x3");
- if(event== -1) return;
-
- if(event==0) {
- insertkey(id, ID_CA, NULL, NULL, CAM_LENS, 0);
- }
- else if(event==1) {
- insertkey(id, ID_CA, NULL, NULL, CAM_STA, 0);
- insertkey(id, ID_CA, NULL, NULL, CAM_END, 0);
- }
- else if(event==2) {
- insertkey(id, ID_CA, NULL, NULL, CAM_YF_APERT, 0);
- }
- else if(event==3) {
- insertkey(id, ID_CA, NULL, NULL, CAM_YF_FDIST, 0);
- }
- else if(event==4) {
- insertkey(id, ID_CA, NULL, NULL, CAM_SHIFT_X, 0);
- insertkey(id, ID_CA, NULL, NULL, CAM_SHIFT_Y, 0);
- }
- }
- }
- }
- else if(FALSE /* && G.buts->mainb==BUTS_SOUND */) {
- if(G.ssound) {
- id= G.buts->lockpoin;
- if(id) {
- event= pupmenu("Insert Key %t|Volume%x0|Pitch%x1|Panning%x2|Attennuation%x3");
- if(event== -1) return;
-
- if(event==0) {
- insertkey(id, ID_SO, NULL, NULL, SND_VOLUME, 0);
- }
- if(event==1) {
- insertkey(id, ID_SO, NULL, NULL, SND_PITCH, 0);
- }
- if(event==2) {
- insertkey(id, ID_SO, NULL, NULL, SND_PANNING, 0);
- }
- if(event==3) {
- insertkey(id, ID_SO, NULL, NULL, SND_ATTEN, 0);
- }
- }
- }
- }
-
- BIF_undo_push("Insert Key Buttons");
-
- allqueue(REDRAWACTION, 0);
- allqueue(REDRAWNLA, 0);
- allqueue(REDRAWIPO, 0);
- allspace(REMAKEIPO, 0);
-
- }
- else if(curarea->spacetype==SPACE_VIEW3D) {
- ob= OBACT;
-
- if (ob && (ob->flag & OB_POSEMODE)) {
- bPoseChannel *pchan;
-
- set_pose_keys(ob); /* sets pchan->flag to POSE_KEY if bone selected, and clears if not */
- for (pchan=ob->pose->chanbase.first; pchan; pchan=pchan->next)
- if (pchan->flag & POSE_KEY)
- break;
- if(pchan==NULL) return;
- strcpy(menustr, "Insert Key%t|Loc%x0|Rot%x1|Scale%x2|LocRot%x3|LocRotScale%x4|Avail%x9|Needed%x15|VisualLoc%x11|VisualRot%x12|VisualLocRot%x13");
- }
- else {
- base= FIRSTBASE;
- while(base) {
- if (TESTBASELIB(base)) break;
- base= base->next;
- }
- if(base==NULL) return;
- strcpy(menustr, "Insert Key%t|Loc%x0|Rot%x1|Scale%x2|LocRot%x3|LocRotScale%x4|Layer%x5|Avail%x9|Needed%x15|VisualLoc%x11|VisualRot%x12|VisualLocRot%x13");
- }
-
- if(ob) {
- if(ob->type==OB_MESH) strcat(menustr, "| %x6|Mesh%x7");
- else if(ob->type==OB_LATTICE) strcat(menustr, "| %x6|Lattice%x7");
- else if(ob->type==OB_CURVE) strcat(menustr, "| %x6|Curve%x7");
- else if(ob->type==OB_SURF) strcat(menustr, "| %x6|Surface%x7");
- }
-
- event= pupmenu(menustr);
- if(event== -1) return;
-
- if(event==7) { // ob != NULL
- insert_shapekey(ob);
- return;
- }
-
- if (ob && (ob->flag & OB_POSEMODE)){
- bPoseChannel *pchan;
- short recalc_bonepaths= 0;
-
- if (ob->action && ob->action->id.lib) {
- error ("Can't key libactions");
- return;
- }
-
- id= &ob->id;
- for (pchan=ob->pose->chanbase.first; pchan; pchan=pchan->next) {
- if (pchan->flag & POSE_KEY) {
- /* insert relevant keyframes */
- if(event==0 || event==3 ||event==4) {
- insertkey(id, ID_PO, pchan->name, NULL, AC_LOC_X, 0);
- insertkey(id, ID_PO, pchan->name, NULL, AC_LOC_Y, 0);
- insertkey(id, ID_PO, pchan->name, NULL, AC_LOC_Z, 0);
- }
- if(event==1 || event==3 || event==4) {
- insertkey(id, ID_PO, pchan->name, NULL, AC_QUAT_X, 0);
- insertkey(id, ID_PO, pchan->name, NULL, AC_QUAT_Y, 0);
- insertkey(id, ID_PO, pchan->name, NULL, AC_QUAT_Z, 0);
- insertkey(id, ID_PO, pchan->name, NULL, AC_QUAT_W, 0);
- }
- if(event==2 || event==4) {
- insertkey(id, ID_PO, pchan->name, NULL, AC_SIZE_X, 0);
- insertkey(id, ID_PO, pchan->name, NULL, AC_SIZE_Y, 0);
- insertkey(id, ID_PO, pchan->name, NULL, AC_SIZE_Z, 0);
- }
- if (event==9 && ob->action) {
- bActionChannel *achan;
-
- for (achan = ob->action->chanbase.first; achan; achan=achan->next){
- if (achan->ipo && !strcmp (achan->name, pchan->name)){
- for (icu = achan->ipo->curve.first; icu; icu=icu->next){
- insertkey(id, ID_PO, achan->name, NULL, icu->adrcode, 0);
- }
- break;
- }
- }
- }
- if(event==11 || event==13) {
- int matok=0;
- /* check one to make sure we're not trying to set visual loc keys on
- bones inside of a chain, which only leads to tears. */
- matok= insertmatrixkey(id, ID_PO, pchan->name, NULL, AC_LOC_X);
- insertmatrixkey(id, ID_PO, pchan->name, NULL, AC_LOC_Y);
- insertmatrixkey(id, ID_PO, pchan->name, NULL, AC_LOC_Z);
-
- if (matok == 0) {
- insertkey(id, ID_PO, pchan->name, NULL, AC_LOC_X, 0);
- insertkey(id, ID_PO, pchan->name, NULL, AC_LOC_Y, 0);
- insertkey(id, ID_PO, pchan->name, NULL, AC_LOC_Z, 0);
- }
- }
- if(event==12 || event==13) {
- int matok=0;
- /* check one to make sure we're not trying to set visual rot keys on
- bones inside of a chain, which only leads to tears. */
- matok= insertmatrixkey(id, ID_PO, pchan->name, NULL, AC_QUAT_W);
- insertmatrixkey(id, ID_PO, pchan->name, NULL, AC_QUAT_X);
- insertmatrixkey(id, ID_PO, pchan->name, NULL, AC_QUAT_Y);
- insertmatrixkey(id, ID_PO, pchan->name, NULL, AC_QUAT_Z);
-
- if (matok == 0) {
- insertkey(id, ID_PO, pchan->name, NULL, AC_QUAT_W, 0);
- insertkey(id, ID_PO, pchan->name, NULL, AC_QUAT_X, 0);
- insertkey(id, ID_PO, pchan->name, NULL, AC_QUAT_Y, 0);
- insertkey(id, ID_PO, pchan->name, NULL, AC_QUAT_Z, 0);
- }
- }
- if (event==15 && ob->action) {
- bActionChannel *achan;
-
- for (achan = ob->action->chanbase.first; achan; achan=achan->next){
- if (achan->ipo && !strcmp (achan->name, pchan->name)){
- for (icu = achan->ipo->curve.first; icu; icu=icu->next){
- insertkey_smarter(id, ID_PO, achan->name, NULL, icu->adrcode);
- }
- break;
- }
- }
- }
-
- /* clear unkeyed flag (it doesn't matter if it's set or not) */
- if (pchan->bone)
- pchan->bone->flag &= ~BONE_UNKEYED;
-
- /* check if bone has a path */
- if (pchan->path)
- recalc_bonepaths = 1;
- }
- }
-
- /* recalculate ipo handles, etc. */
- if(ob->action)
- remake_action_ipos(ob->action);
-
- /* recalculate bone-paths on adding new keyframe? */
- // TODO: currently, there is no setting to turn this on/off globally
- if (recalc_bonepaths)
- pose_recalculate_paths(ob);
-
-
- allqueue(REDRAWIPO, 0);
- allqueue(REDRAWACTION, 0);
- allqueue(REDRAWNLA, 0);
- }
- else {
- base= FIRSTBASE;
- while(base) {
- if (TESTBASELIB(base)) {
- char *actname= NULL;
-
- id= (ID *)(base->object);
-
- if(base->object->ipoflag & OB_ACTION_OB)
- actname= "Object";
-
- /* all curves in ipo deselect */
- if(base->object->ipo || base->object->action) {
- if (base->object->ipo) {
- icu= base->object->ipo->curve.first;
- }
- else {
- bActionChannel *achan;
- achan= get_action_channel(base->object->action, actname);
-
- if (achan && achan->ipo)
- icu= achan->ipo->curve.first;
- else
- icu= NULL;
- }
-
- while(icu) {
- icu->flag &= ~IPO_SELECT;
-
- switch (event) {
- case 9:
- insertkey(id, ID_OB, actname, NULL, icu->adrcode, 0);
- break;
- case 15:
- insertkey_smarter(id, ID_OB, actname, NULL, icu->adrcode);
- break;
- }
- icu= icu->next;
- }
- }
-
- if(event==0 || event==3 ||event==4) {
- insertkey(id, ID_OB, actname, NULL, OB_LOC_X, 0);
- insertkey(id, ID_OB, actname, NULL, OB_LOC_Y, 0);
- insertkey(id, ID_OB, actname, NULL, OB_LOC_Z, 0);
- }
- if(event==1 || event==3 ||event==4) {
- insertkey(id, ID_OB, actname, NULL, OB_ROT_X, 0);
- insertkey(id, ID_OB, actname, NULL, OB_ROT_Y, 0);
- insertkey(id, ID_OB, actname, NULL, OB_ROT_Z, 0);
- }
- if(event==2 || event==4) {
- insertkey(id, ID_OB, actname, NULL, OB_SIZE_X, 0);
- insertkey(id, ID_OB, actname, NULL, OB_SIZE_Y, 0);
- insertkey(id, ID_OB, actname, NULL, OB_SIZE_Z, 0);
- }
- if(event==5) {
- /* remove localview */
- tlay= base->object->lay;
- base->object->lay &= 0xFFFFFF;
- insertkey(id, ID_OB, actname, NULL, OB_LAY, 0);
- base->object->lay= tlay;
- }
- if(event==11 || event==13) {
- insertmatrixkey(id, ID_OB, actname, NULL, OB_LOC_X);
- insertmatrixkey(id, ID_OB, actname, NULL, OB_LOC_Y);
- insertmatrixkey(id, ID_OB, actname, NULL, OB_LOC_Z);
- }
- if(event==12 || event==13) {
- insertmatrixkey(id, ID_OB, actname, NULL, OB_ROT_X);
- insertmatrixkey(id, ID_OB, actname, NULL, OB_ROT_Y);
- insertmatrixkey(id, ID_OB, actname, NULL, OB_ROT_Z);
- }
- base->object->recalc |= OB_RECALC_OB;
- }
- base= base->next;
- }
- }
-
- if(event==0) BIF_undo_push("Insert Loc Key");
- else if(event==1) BIF_undo_push("Insert Rot Key");
- else if(event==2) BIF_undo_push("Insert Scale Key");
- else if(event==3) BIF_undo_push("Insert LocRot Key");
- else if(event==4) BIF_undo_push("Insert LocRotScale Key");
- else if(event==5) BIF_undo_push("Insert Layer Key");
- else if(event==7) BIF_undo_push("Insert Vertex Key");
- else if(event==9) BIF_undo_push("Insert Avail Key");
- else if(event==11) BIF_undo_push("Insert VisualLoc Key");
- else if(event==12) BIF_undo_push("Insert VisualRot Key");
- else if(event==13) BIF_undo_push("Insert VisualLocRot Key");
- else if(event==15) BIF_undo_push("Insert Needed Key");
-
- DAG_scene_flush_update(G.scene, screen_view3d_layers(), 0);
-
- allspace(REMAKEIPO, 0);
- allqueue(REDRAWIPO, 0);
- allqueue(REDRAWVIEW3D, 0);
- allqueue(REDRAWACTION, 0);
- allqueue(REDRAWNLA, 0);
- }
-
-}
-
/* ****************************************************************************** */
void add_duplicate_editipo(void)
@@ -3554,7 +2283,7 @@ void add_duplicate_editipo(void)
while(b--) {
*beztn= *bezt;
if(bezt->f2 & SELECT) {
- beztn->f1= beztn->f2= beztn->f3= 0;
+ BEZ_DESEL(beztn);
beztn++;
*beztn= *bezt;
}
@@ -3668,6 +2397,7 @@ void remove_doubles_ipo(void)
}
deselectall_editipo();
+ BIF_undo_push("Remove Doubles (IPO)");
}
@@ -4490,7 +3220,7 @@ void paste_editipo(void)
int i;
/* make sure an ipo-curve exists (it may not, as this is an editipo) */
- ei->icu= verify_ipocurve(G.sipo->from, G.sipo->blocktype, G.sipo->actname, G.sipo->constname, G.sipo->bonename, ei->adrcode);
+ ei->icu= verify_ipocurve(G.sipo->from, G.sipo->blocktype, G.sipo->actname, G.sipo->constname, G.sipo->bonename, ei->adrcode, 1);
if (ei->icu == NULL) return;
/* Copy selected beztriples from source icu onto this edit-icu,
@@ -4531,7 +3261,7 @@ void paste_editipo(void)
else {
/* make sure an ipo-curve exists (it may not, as this is an editipo) */
- ei->icu= verify_ipocurve(G.sipo->from, G.sipo->blocktype, G.sipo->actname, G.sipo->constname, G.sipo->bonename, ei->adrcode);
+ ei->icu= verify_ipocurve(G.sipo->from, G.sipo->blocktype, G.sipo->actname, G.sipo->constname, G.sipo->bonename, ei->adrcode, 1);
if (ei->icu==NULL) return;
/* clear exisiting dynamic memory (keyframes, driver) */
@@ -4766,14 +3496,10 @@ void make_ipokey(void)
if(ik->data[a]) {
bezt= ik->data[a];
if(sel) {
- bezt->f1 |= SELECT;
- bezt->f2 |= SELECT;
- bezt->f3 |= SELECT;
+ BEZ_SEL(bezt);
}
else {
- bezt->f1 &= ~SELECT;
- bezt->f2 &= ~SELECT;
- bezt->f3 &= ~SELECT;
+ BEZ_DESEL(bezt);
}
}
}
@@ -4881,15 +3607,11 @@ void make_ipokey_transform(Object *ob, ListBase *lb, int sel)
icu= icu->next;
}
-
- ik= lb->first;
- while(ik) {
- /* map ipo-keys for drawing/editing if scaled ipo */
- if (NLA_IPO_SCALED) {
+ if (NLA_IPO_SCALED) {
+ for (ik= lb->first; ik; ik= ik->next) {
+ /* map ipo-keys for drawing/editing if scaled ipo */
ik->val= get_action_frame_inv(OBACT, ik->val);
}
-
- ik= ik->next;
}
}
@@ -5646,7 +4368,7 @@ void ipo_record(void)
/* make curves ready, start values */
if(ei1->icu==NULL)
- ei1->icu= verify_ipocurve(G.sipo->from, G.sipo->blocktype, G.sipo->actname, G.sipo->constname, G.sipo->bonename, ei1->adrcode);
+ ei1->icu= verify_ipocurve(G.sipo->from, G.sipo->blocktype, G.sipo->actname, G.sipo->constname, G.sipo->bonename, ei1->adrcode, 1);
if(ei1->icu==NULL) return;
poin= get_ipo_poin(G.sipo->from, ei1->icu, &type);
@@ -5656,7 +4378,7 @@ void ipo_record(void)
if(ei2) {
if(ei2->icu==NULL)
- ei2->icu= verify_ipocurve(G.sipo->from, G.sipo->blocktype, G.sipo->actname, G.sipo->constname, G.sipo->bonename, ei2->adrcode);
+ ei2->icu= verify_ipocurve(G.sipo->from, G.sipo->blocktype, G.sipo->actname, G.sipo->constname, G.sipo->bonename, ei2->adrcode, 1);
if(ei2->icu==NULL) return;
poin= get_ipo_poin(G.sipo->from, ei2->icu, &type);
@@ -5941,7 +4663,7 @@ void duplicate_ipo_keys(Ipo *ipo)
for (icu=ipo->curve.first; icu; icu=icu->next){
for (i=0; i<icu->totvert; i++){
/* If a key is selected */
- if (icu->bezt[i].f2 & 1){
+ if (icu->bezt[i].f2 & SELECT){
/* Expand the list */
newbezt = MEM_callocN(sizeof(BezTriple) * (icu->totvert+1), "beztriple");
memcpy (newbezt, icu->bezt, sizeof(BezTriple) * (i+1));
@@ -5951,15 +4673,10 @@ void duplicate_ipo_keys(Ipo *ipo)
MEM_freeN (icu->bezt);
icu->bezt=newbezt;
/* Unselect the current key*/
- icu->bezt[i].f1 &= ~ 1;
- icu->bezt[i].f2 &= ~ 1;
- icu->bezt[i].f3 &= ~ 1;
+ BEZ_DESEL(&icu->bezt[i]);
i++;
/* Select the copied key */
- icu->bezt[i].f1 |= 1;
- icu->bezt[i].f2 |= 1;
- icu->bezt[i].f3 |= 1;
-
+ BEZ_SEL(&icu->bezt[i]);
}
}
}
@@ -6011,4 +4728,4 @@ void move_to_frame(void)
}
}
BIF_undo_push("Set frame to selected Ipo vertex");
-} \ No newline at end of file
+}
diff --git a/source/blender/src/editipo_lib.c b/source/blender/src/editipo_lib.c
index 41044ad13d7..18faf7ea9e6 100644
--- a/source/blender/src/editipo_lib.c
+++ b/source/blender/src/editipo_lib.c
@@ -100,10 +100,11 @@ char *snd_ic_names[SND_TOTNAM] = { "Vol", "Pitch", "Pan", "Atten" };
char *ac_ic_names[AC_TOTNAM] = {"LocX", "LocY", "LocZ", "ScaleX", "ScaleY",
"ScaleZ", "QuatW", "QuatX", "QuatY", "QuatZ"};
char *ic_name_empty[1] ={ "" };
-char *fluidsim_ic_names[FLUIDSIM_TOTNAM] = { "Fac-Visc", "Fac-Time", "GravX","GravY","GravZ", "VelX","VelY","VelZ", "Active" };
+char *fluidsim_ic_names[FLUIDSIM_TOTNAM] = { "Fac-Visc", "Fac-Time", "GravX","GravY","GravZ", "VelX","VelY","VelZ", "Active", "AttrForceStr", "AttrForceRad", "VelForceStr", "VelForceRad" };
char *part_ic_names[PART_TOTNAM] = { "E_Freq", "E_Life", "E_Speed", "E_Angular", "E_Size",
"Angular", "Size", "Drag", "Brown", "Damp", "Length", "Clump",
-"GravX", "GravY", "GravZ", "KinkAmp", "KinkFreq", "KinkShape", "BBTilt"};
+"GravX", "GravY", "GravZ", "KinkAmp", "KinkFreq", "KinkShape", "BBTilt",
+"FStreng", "FFall", "FMaxD", "F2Streng", "F2Fall", "F2MaxD"};
/* gets the appropriate icon for the given blocktype */
int geticon_ipo_blocktype(short blocktype)
@@ -391,7 +392,15 @@ int texchannel_to_adrcode(int channel)
case 6: return MA_MAP7;
case 7: return MA_MAP8;
case 8: return MA_MAP9;
- case 9: return MA_MAP10;
+ case 9: return MA_MAP10;
+ case 10: return MA_MAP11;
+ case 11: return MA_MAP12;
+ case 12: return MA_MAP13;
+ case 13: return MA_MAP14;
+ case 14: return MA_MAP15;
+ case 15: return MA_MAP16;
+ case 16: return MA_MAP17;
+ case 17: return MA_MAP18;
default: return 0;
}
}
diff --git a/source/blender/src/editipo_mods.c b/source/blender/src/editipo_mods.c
index f03de1ff383..7e57d48b7fb 100644
--- a/source/blender/src/editipo_mods.c
+++ b/source/blender/src/editipo_mods.c
@@ -136,10 +136,10 @@ void swap_selectall_editipo(void)
b= ei->icu->totvert;
while(b--) {
if(totipo_vertsel) {
- bezt->f1= bezt->f2= bezt->f3= 0;
+ BEZ_DESEL(bezt);
}
else {
- bezt->f1= bezt->f2= bezt->f3= SELECT;
+ BEZ_SEL(bezt);
}
bezt++;
}
@@ -228,7 +228,7 @@ void deselectall_editipo(void)
bezt= ei->icu->bezt;
b= ei->icu->totvert;
while(b--) {
- bezt->f1= bezt->f2= bezt->f3= 0;
+ BEZ_DESEL(bezt);
bezt++;
}
}
@@ -237,7 +237,6 @@ void deselectall_editipo(void)
}
}
- BIF_undo_push("(De)select all Ipo");
scrarea_queue_winredraw(curarea);
}
@@ -375,18 +374,14 @@ static int selected_bezier_loop(int (*looptest)(EditIpo *),
int select_bezier_add(BezTriple *bezt)
{
/* Select the bezier triple */
- bezt->f1 |= SELECT;
- bezt->f2 |= SELECT;
- bezt->f3 |= SELECT;
+ BEZ_SEL(bezt);
return 0;
}
int select_bezier_subtract(BezTriple *bezt)
{
/* Deselect the bezier triple */
- bezt->f1 &= ~SELECT;
- bezt->f2 &= ~SELECT;
- bezt->f3 &= ~SELECT;
+ BEZ_DESEL(bezt);
return 0;
}
@@ -413,9 +408,9 @@ static int set_bezier_auto(BezTriple *bezt)
/* is a handle selected? If so
* set it to type auto
*/
- if(bezt->f1 || bezt->f3) {
- if(bezt->f1) bezt->h1= 1; /* the secret code for auto */
- if(bezt->f3) bezt->h2= 1;
+ if((bezt->f1 & SELECT) || (bezt->f3 & SELECT)) {
+ if(bezt->f1 & SELECT) bezt->h1= 1; /* the secret code for auto */
+ if(bezt->f3 & SELECT) bezt->h2= 1;
/* if the handles are not of the same type, set them
* to type free
@@ -436,9 +431,9 @@ static int set_bezier_vector(BezTriple *bezt)
/* is a handle selected? If so
* set it to type vector
*/
- if(bezt->f1 || bezt->f3) {
- if(bezt->f1) bezt->h1= 2; /* the code for vector */
- if(bezt->f3) bezt->h2= 2;
+ if((bezt->f1 & SELECT) || (bezt->f3 & SELECT)) {
+ if(bezt->f1 & SELECT) bezt->h1= 2; /* the code for vector */
+ if(bezt->f3 & SELECT) bezt->h2= 2;
/* if the handles are not of the same type, set them
* to type free
@@ -456,8 +451,8 @@ static int bezier_isfree(BezTriple *bezt)
/* queries whether the handle should be set
* to type 'free' (I think)
*/
- if(bezt->f1 && bezt->h1) return 1;
- if(bezt->f3 && bezt->h2) return 1;
+ if((bezt->f1 & SELECT) && bezt->h1) return 1;
+ if((bezt->f3 & SELECT) && bezt->h2) return 1;
return 0;
}
@@ -465,8 +460,8 @@ static int set_bezier_free(BezTriple *bezt)
{
/* Sets selected bezier handles to type 'free'
*/
- if(bezt->f1) bezt->h1= HD_FREE;
- if(bezt->f3) bezt->h2= HD_FREE;
+ if(bezt->f1 & SELECT) bezt->h1= HD_FREE;
+ if(bezt->f3 & SELECT) bezt->h2= HD_FREE;
return 0;
}
@@ -474,8 +469,8 @@ static int set_bezier_align(BezTriple *bezt)
{
/* Sets selected bezier handles to type 'align'
*/
- if(bezt->f1) bezt->h1= HD_ALIGN;
- if(bezt->f3) bezt->h2= HD_ALIGN;
+ if(bezt->f1 & SELECT) bezt->h1= HD_ALIGN;
+ if(bezt->f3 & SELECT) bezt->h2= HD_ALIGN;
return 0;
}
@@ -1033,6 +1028,7 @@ void borderselect_ipo(void)
select_proj_ipo(&rectf, val);
}
else {
+ int selflag= (val==LEFTMOUSE) ? SELECT : 0;
ei= G.sipo->editipo;
for(a=0; a<G.sipo->totipo; a++, ei++) {
@@ -1041,14 +1037,12 @@ void borderselect_ipo(void)
b= ei->icu->totvert;
bezt= ei->icu->bezt;
while(b--) {
- int bit= (val==LEFTMOUSE);
-
if(BLI_in_rctf(&rectf, bezt->vec[0][0], bezt->vec[0][1]))
- bezt->f1 = (bezt->f1&~SELECT) | bit;
+ bezt->f1 = selflag ? (bezt->f1 | SELECT) : (bezt->f1 & ~SELECT);
if(BLI_in_rctf(&rectf, bezt->vec[1][0], bezt->vec[1][1]))
- bezt->f2 = (bezt->f2&~SELECT) | bit;
+ bezt->f2 = selflag ? (bezt->f2 | SELECT) : (bezt->f2 & ~SELECT);
if(BLI_in_rctf(&rectf, bezt->vec[2][0], bezt->vec[2][1]))
- bezt->f3 = (bezt->f3&~SELECT) | bit;
+ bezt->f3 = selflag ? (bezt->f3 | SELECT) : (bezt->f3 & ~SELECT);
bezt++;
}
@@ -1212,19 +1206,13 @@ void set_ipo_key_selection(Ipo *ipo, int sel)
for (icu=ipo->curve.first; icu; icu=icu->next){
for (i=0; i<icu->totvert; i++){
if (sel == 2) {
- icu->bezt[i].f1^=1;
- icu->bezt[i].f2^=1;
- icu->bezt[i].f3^=1;
+ BEZ_INVSEL(&icu->bezt[i]);
}
else if (sel == 1){
- icu->bezt[i].f1|=1;
- icu->bezt[i].f2|=1;
- icu->bezt[i].f3|=1;
+ BEZ_SEL(&icu->bezt[i]);
}
else{
- icu->bezt[i].f1&=~1;
- icu->bezt[i].f2&=~1;
- icu->bezt[i].f3&=~1;
+ BEZ_DESEL(&icu->bezt[i]);
}
}
}
@@ -1241,10 +1229,10 @@ int fullselect_ipo_keys(Ipo *ipo)
for (icu=ipo->curve.first; icu; icu=icu->next) {
for (i=0; i<icu->totvert; i++){
- if (icu->bezt[i].f2 & 1){
+ if (icu->bezt[i].f2 & SELECT){
tvtot+=3;
- icu->bezt[i].f1 |= 1;
- icu->bezt[i].f3 |= 1;
+ icu->bezt[i].f1 |= SELECT;
+ icu->bezt[i].f3 |= SELECT;
}
}
}
diff --git a/source/blender/src/editkey.c b/source/blender/src/editkey.c
index 1f24fb07667..dbabf9d19fb 100644
--- a/source/blender/src/editkey.c
+++ b/source/blender/src/editkey.c
@@ -70,6 +70,7 @@
#include "BIF_editkey.h"
#include "BIF_editview.h"
+#include "BIF_keyframing.h"
#include "BIF_mywindow.h"
#include "BIF_screen.h"
#include "BIF_space.h"
@@ -84,6 +85,8 @@
#include "blendef.h"
#include "mydevice.h"
+#include "BLO_sys_types.h" // for intptr_t support
+
extern ListBase editNurb; /* in editcurve.c */
/* temporary storage for slider values */
@@ -162,15 +165,15 @@ static void rvk_slider_func(void *voidob, void *voidkeynum)
IpoCurve *icu=NULL;
BezTriple *bezt=NULL;
float cfra, rvkval;
- int keynum = (long) voidkeynum;
+ int keynum = (intptr_t) voidkeynum;
cfra = frame_to_float(CFRA);
/* ipo on action or ob? */
if(ob->ipoflag & OB_ACTION_KEY)
- icu = verify_ipocurve(&ob->id, ID_KE, "Shape", NULL, NULL, keynum);
+ icu = verify_ipocurve(&ob->id, ID_KE, "Shape", NULL, NULL, keynum, 1);
else
- icu = verify_ipocurve(&ob->id, ID_KE, NULL, NULL, NULL, keynum);
+ icu = verify_ipocurve(&ob->id, ID_KE, NULL, NULL, NULL, keynum, 1);
if (icu) {
/* if the ipocurve exists, try to get a bezier
@@ -275,7 +278,7 @@ void make_rvk_slider(uiBlock *block, Object *ob, int keynum,
x, y , w, h,
meshslidervals+keynum, min, max, 10, 2, tip);
- uiButSetFunc(but, rvk_slider_func, ob, (void *)(long)keynum);
+ uiButSetFunc(but, rvk_slider_func, ob, (void *)(intptr_t)keynum);
// no hilite, the winmatrix is not correct later on...
uiButSetFlag(but, UI_NO_HILITE);
diff --git a/source/blender/src/editlattice.c b/source/blender/src/editlattice.c
index 0782e012f68..06b092a30ac 100644
--- a/source/blender/src/editlattice.c
+++ b/source/blender/src/editlattice.c
@@ -131,7 +131,7 @@ void make_editLatt(void)
copy_dverts(editLatt->dvert, lt->dvert, tot);
}
- BIF_undo_push("original");
+ BIF_undo_push("Original");
}
diff --git a/source/blender/src/editmesh.c b/source/blender/src/editmesh.c
index 188f7476728..25e7c50b07e 100644
--- a/source/blender/src/editmesh.c
+++ b/source/blender/src/editmesh.c
@@ -1342,7 +1342,7 @@ void load_editMesh(void)
{
Object *ob;
ModifierData *md;
- EditVert *eve, **vertMap = NULL;
+ EditVert **vertMap = NULL;
int i,j;
for (ob=G.main->object.first; ob; ob=ob->id.next) {
@@ -1601,15 +1601,6 @@ void separate_mesh(void)
return;
}
- /* blender crashes in derivedmesh drawing if I don't do this... but why?
- Anyhoo, this function is horrible anyway (ton)
- the fluidsimFlag also has to be reset btw. (n_t) */
- if(G.obedit->fluidsimSettings) {
- fluidsimSettingsFree(G.obedit->fluidsimSettings);
- G.obedit->fluidsimSettings = NULL;
- G.obedit->fluidsimFlag = 0;
- }
-
if(em->selected.first) BLI_freelistN(&(em->selected)); /* clear the selection order */
EM_selectmode_set(); // enforce full consistant selection flags
@@ -1683,6 +1674,10 @@ void separate_mesh(void)
efa= em->faces.first;
while(efa) {
vl1= efa->next;
+ if (efa == G.editMesh->act_face && (efa->f & SELECT)) {
+ EM_set_actFace(NULL);
+ }
+
if((efa->f & SELECT)==0) {
BLI_remlink(&em->faces, efa);
BLI_addtail(&edvl, efa);
@@ -1782,13 +1777,6 @@ void separate_mesh_loose(void)
error("Can't separate a mesh with vertex keys");
return;
}
-
- /* same problem as in separate_mesh above (n_t) */
- if(G.obedit->fluidsimSettings) {
- fluidsimSettingsFree(G.obedit->fluidsimSettings);
- G.obedit->fluidsimSettings = NULL;
- G.obedit->fluidsimFlag = 0;
- }
TEST_EDITMESH
if(multires_test()) return;
diff --git a/source/blender/src/editmesh_add.c b/source/blender/src/editmesh_add.c
index 9516f39b05c..4dc64b0f933 100644
--- a/source/blender/src/editmesh_add.c
+++ b/source/blender/src/editmesh_add.c
@@ -598,7 +598,7 @@ static void fix_new_face(EditFace *eface)
}
}
-void addfaces_from_edgenet()
+void addfaces_from_edgenet(void)
{
EditVert *eve1, *eve2, *eve3, *eve4;
EditMesh *em= G.editMesh;
@@ -869,6 +869,152 @@ int confirm_objectExists( Mesh **me, float mat[][3] )
return newob;
}
+// HACK: these can also be found in cmoview.tga.c, but are here so that they can be found by linker
+// this hack is only used so that scons+mingw + split-sources hack works
+ // ------------------------------- start copied code
+/* these are not the monkeys you are looking for */
+int monkeyo= 4;
+int monkeynv= 271;
+int monkeynf= 250;
+signed char monkeyv[271][3]= {
+{-71,21,98},{-63,12,88},{-57,7,74},{-82,-3,79},{-82,4,92},
+{-82,17,100},{-92,21,102},{-101,12,95},{-107,7,83},
+{-117,31,84},{-109,31,95},{-96,31,102},{-92,42,102},
+{-101,50,95},{-107,56,83},{-82,66,79},{-82,58,92},
+{-82,46,100},{-71,42,98},{-63,50,88},{-57,56,74},
+{-47,31,72},{-55,31,86},{-67,31,97},{-66,31,99},
+{-70,43,100},{-82,48,103},{-93,43,105},{-98,31,105},
+{-93,20,105},{-82,31,106},{-82,15,103},{-70,20,100},
+{-127,55,95},{-127,45,105},{-127,-87,94},{-127,-41,100},
+{-127,-24,102},{-127,-99,92},{-127,52,77},{-127,73,73},
+{-127,115,-70},{-127,72,-109},{-127,9,-106},{-127,-49,-45},
+{-101,-24,72},{-87,-56,73},{-82,-89,73},{-80,-114,68},
+{-85,-121,67},{-104,-124,71},{-127,-126,74},{-71,-18,68},
+{-46,-5,69},{-21,19,57},{-17,55,76},{-36,62,80},
+{-64,77,88},{-86,97,94},{-107,92,97},{-119,63,96},
+{-106,53,99},{-111,39,98},{-101,12,95},{-79,2,90},
+{-64,8,86},{-47,24,83},{-45,38,83},{-50,48,85},
+{-72,56,92},{-95,60,97},{-127,-98,94},{-113,-92,94},
+{-112,-107,91},{-119,-113,89},{-127,-114,88},{-127,-25,96},
+{-127,-18,95},{-114,-19,95},{-111,-29,96},{-116,-37,95},
+{-76,-6,86},{-48,7,80},{-34,26,77},{-32,48,84},
+{-39,53,93},{-71,70,102},{-87,82,107},{-101,79,109},
+{-114,55,108},{-111,-13,104},{-100,-57,91},{-95,-90,88},
+{-93,-105,85},{-97,-117,81},{-106,-119,81},{-127,-121,82},
+{-127,6,93},{-127,27,98},{-85,61,95},{-106,18,96},
+{-110,27,97},{-112,-88,94},{-117,-57,96},{-127,-57,96},
+{-127,-42,95},{-115,-35,100},{-110,-29,102},{-113,-17,100},
+{-122,-16,100},{-127,-26,106},{-121,-19,104},{-115,-20,104},
+{-113,-29,106},{-117,-32,103},{-127,-37,103},{-94,-40,71},
+{-106,-31,91},{-104,-40,91},{-97,-32,71},{-127,-112,88},
+{-121,-111,88},{-115,-105,91},{-115,-95,93},{-127,-100,84},
+{-115,-96,85},{-115,-104,82},{-121,-109,81},{-127,-110,81},
+{-105,28,100},{-103,20,99},{-84,55,97},{-92,54,99},
+{-73,51,99},{-55,45,89},{-52,37,88},{-53,25,87},
+{-66,13,92},{-79,8,95},{-98,14,100},{-104,38,100},
+{-100,48,100},{-97,46,97},{-102,38,97},{-96,16,97},
+{-79,11,93},{-68,15,90},{-57,27,86},{-56,36,86},
+{-59,43,87},{-74,50,96},{-91,51,98},{-84,52,96},
+{-101,22,96},{-102,29,96},{-113,59,78},{-102,85,79},
+{-84,88,76},{-65,71,71},{-40,58,63},{-25,52,59},
+{-28,21,48},{-50,0,53},{-71,-12,60},{-127,115,37},
+{-127,126,-10},{-127,-25,-86},{-127,-59,24},{-127,-125,59},
+{-127,-103,44},{-127,-73,41},{-127,-62,36},{-18,30,7},
+{-17,41,-6},{-28,34,-56},{-68,56,-90},{-33,-6,9},
+{-51,-16,-21},{-45,-1,-55},{-84,7,-85},{-97,-45,52},
+{-104,-53,33},{-90,-91,49},{-95,-64,50},{-85,-117,51},
+{-109,-97,47},{-111,-69,46},{-106,-121,56},{-99,-36,55},
+{-100,-29,60},{-101,-22,64},{-100,-50,21},{-89,-40,-34},
+{-83,-19,-69},{-69,111,-49},{-69,119,-9},{-69,109,30},
+{-68,67,55},{-34,52,43},{-46,58,36},{-45,90,7},
+{-25,72,16},{-25,79,-15},{-45,96,-25},{-45,87,-57},
+{-25,69,-46},{-48,42,-75},{-65,3,-70},{-22,42,-26},
+{-75,-22,19},{-72,-25,-27},{-13,52,-30},{-28,-18,-16},
+{6,-13,-42},{37,7,-55},{46,41,-54},{31,65,-54},
+{4,61,-40},{3,53,-37},{25,56,-50},{35,37,-52},
+{28,10,-52},{5,-5,-39},{-21,-9,-17},{-9,46,-28},
+{-6,39,-37},{-14,-3,-27},{6,0,-47},{25,12,-57},
+{31,32,-57},{23,46,-56},{4,44,-46},{-19,37,-27},
+{-20,22,-35},{-30,12,-35},{-22,11,-35},{-19,2,-35},
+{-23,-2,-35},{-34,0,-9},{-35,-3,-22},{-35,5,-24},
+{-25,26,-27},{-13,31,-34},{-13,30,-41},{-23,-2,-41},
+{-18,2,-41},{-21,10,-41},{-29,12,-41},{-19,22,-41},
+{6,42,-53},{25,44,-62},{34,31,-63},{28,11,-62},
+{7,0,-54},{-14,-2,-34},{-5,37,-44},{-13,14,-42},
+{-7,8,-43},{1,16,-47},{-4,22,-45},{3,30,-48},
+{8,24,-49},{15,27,-50},{12,35,-50},{4,56,-62},
+{33,60,-70},{48,38,-64},{41,7,-68},{6,-11,-63},
+{-26,-16,-42},{-17,49,-49},
+};
+
+signed char monkeyf[250][4]= {
+{27,4,5,26}, {25,4,5,24}, {3,6,5,4}, {1,6,5,2}, {5,6,7,4},
+{3,6,7,2}, {5,8,7,6}, {3,8,7,4}, {7,8,9,6},
+{5,8,9,4}, {7,10,9,8}, {5,10,9,6}, {9,10,11,8},
+{7,10,11,6}, {9,12,11,10}, {7,12,11,8}, {11,6,13,12},
+{5,4,13,12}, {3,-2,13,12}, {-3,-4,13,12}, {-5,-10,13,12},
+{-11,-12,14,12}, {-13,-18,14,13}, {-19,4,5,13}, {10,12,4,4},
+{10,11,9,9}, {8,7,9,9}, {7,5,6,6}, {6,3,4,4},
+{5,1,2,2}, {4,-1,0,0}, {3,-3,-2,-2}, {22,67,68,23},
+{20,65,66,21}, {18,63,64,19}, {16,61,62,17}, {14,59,60,15},
+{12,19,48,57}, {18,19,48,47}, {18,19,48,47}, {18,19,48,47},
+{18,19,48,47}, {18,19,48,47}, {18,19,48,47}, {18,19,48,47},
+{18,19,48,47}, {18,-9,-8,47}, {18,27,45,46}, {26,55,43,44},
+{24,41,42,54}, {22,39,40,23}, {20,37,38,21}, {18,35,36,19},
+{16,33,34,17}, {14,31,32,15}, {12,39,30,13}, {11,48,45,38},
+{8,36,-19,9}, {8,-20,44,47}, {42,45,46,43}, {18,19,40,39},
+{16,17,38,37}, {14,15,36,35}, {32,44,43,33}, {12,33,32,42},
+{19,44,43,42}, {40,41,42,-27}, {8,9,39,-28}, {15,43,42,16},
+{13,43,42,14}, {11,43,42,12}, {9,-30,42,10}, {37,12,38,-32},
+{-33,37,45,46}, {-33,40,41,39}, {38,40,41,37}, {36,40,41,35},
+{34,40,41,33}, {36,39,38,37}, {35,40,39,38}, {1,2,14,21},
+{1,2,40,13}, {1,2,40,39}, {1,24,12,39}, {-34,36,38,11},
+{35,38,36,37}, {-37,8,35,37}, {-11,-12,-45,40}, {-11,-12,39,38},
+{-11,-12,37,36}, {-11,-12,35,34}, {33,34,40,41}, {33,34,38,39},
+{33,34,36,37}, {33,-52,34,35}, {33,37,36,34}, {33,35,34,34},
+{8,7,37,36}, {-32,7,35,46}, {-34,-33,45,46}, {4,-33,43,34},
+{-34,-33,41,42}, {-34,-33,39,40}, {-34,-33,37,38}, {-34,-33,35,36},
+{-34,-33,33,34}, {-34,-33,31,32}, {-34,-4,28,30}, {-5,-34,28,27},
+{-35,-44,36,27}, {26,35,36,45}, {24,25,44,45}, {25,23,44,42},
+{25,24,41,40}, {25,24,39,38}, {25,24,37,36}, {25,24,35,34},
+{25,24,33,32}, {25,24,31,30}, {15,24,29,38}, {25,24,27,26},
+{23,12,37,26}, {11,12,35,36}, {-86,-59,36,-80}, {-60,-61,36,35},
+{-62,-63,36,35}, {-64,-65,36,35}, {-66,-67,36,35}, {-68,-69,36,35},
+{-70,-71,36,35}, {-72,-73,36,35}, {-74,-75,36,35}, {42,43,53,58},
+{40,41,57,56}, {38,39,55,57}, {-81,-80,37,56}, {-83,-82,55,52},
+{-85,-84,51,49}, {-87,-86,48,49}, {47,50,51,48}, {46,48,51,49},
+{43,46,49,44}, {-92,-91,45,42}, {-23,49,50,-20}, {-94,40,48,-24},
+{-96,-22,48,49}, {-97,48,21,-90}, {-100,36,50,23}, {22,49,48,-100},
+{-101,47,46,22}, {21,45,35,25}, {33,34,44,41}, {13,14,28,24},
+{-107,26,30,-106}, {14,46,45,15}, {14,44,43,-110}, {-111,42,23,-110},
+{6,7,45,46}, {45,44,47,46}, {45,46,47,48}, {47,46,49,48},
+{17,49,47,48}, {17,36,46,48}, {35,36,44,45}, {35,36,40,43},
+{35,36,38,39}, {-4,-3,37,35}, {-123,34,33,1}, {-9,-8,-7,-6},
+{-10,-7,32,-125}, {-127,-11,-126,-126}, {-7,-6,5,31}, {4,5,33,30},
+{4,39,33,32}, {4,35,32,38}, {20,21,39,38}, {4,37,38,5},
+{-11,-10,36,3}, {-11,15,14,35}, {13,16,34,34}, {-13,14,13,13},
+{-3,1,30,29}, {-3,28,29,1}, {-2,31,28,-1}, {12,13,27,30},
+{-2,26,12,12}, {35,29,42,36}, {34,35,36,33}, {32,35,36,31},
+{30,35,36,29}, {28,35,36,27}, {26,35,36,25}, {34,39,38,35},
+{32,39,38,33}, {30,39,38,31}, {28,39,38,29}, {26,39,38,27},
+{25,31,32,38}, {-18,-17,45,44}, {-18,17,28,44}, {-24,-20,42,-23},
+{11,35,27,14}, {25,28,39,41}, {37,41,40,38}, {34,40,36,35},
+{32,40,39,33}, {30,39,31,40}, {21,29,39,22}, {-31,37,28,4},
+{-32,33,35,36}, {32,33,34,34}, {18,35,36,48}, {34,25,40,35},
+{24,25,38,39}, {24,25,36,37}, {24,25,34,35}, {24,25,32,33},
+{24,13,41,31}, {17,11,41,35}, {15,16,34,35}, {13,14,34,35},
+{11,12,34,35}, {9,10,34,35}, {7,8,34,35}, {26,25,37,36},
+{35,36,37,38}, {37,36,39,38}, {37,38,39,40}, {25,31,36,39},
+{18,34,35,30}, {17,22,30,33}, {19,29,21,20}, {16,26,29,17},
+{24,29,28,25}, {22,31,28,23}, {20,31,30,21}, {18,31,30,19},
+{16,30,17,17}, {-21,-22,35,34}, {-21,-22,33,32}, {-21,-22,31,30},
+{-21,-22,29,28}, {-21,-22,27,26}, {-28,-22,25,31}, {24,28,29,30},
+{23,24,26,27}, {23,24,25,25}, {-69,-35,-32,27}, {-70,26,25,-66},
+{-68,-67,24,-33},
+};
+ // ------------------------------- end copied code
+
+
void make_prim(int type, float imat[3][3], int tot, int seg,
int subdiv, float dia, float d, int ext, int fill,
float cent[3])
@@ -1022,11 +1168,10 @@ void make_prim(int type, float imat[3][3], int tot, int seg,
break;
case 13: /* Monkey */
{
- extern int monkeyo, monkeynv, monkeynf;
- extern signed char monkeyf[][4];
- extern signed char monkeyv[][3];
+ //extern int monkeyo, monkeynv, monkeynf;
+ //extern signed char monkeyf[][4];
+ //extern signed char monkeyv[][3];
EditVert **tv= MEM_mallocN(sizeof(*tv)*monkeynv*2, "tv");
- EditFace *efa;
int i;
for (i=0; i<monkeynv; i++) {
@@ -1038,8 +1183,8 @@ void make_prim(int type, float imat[3][3], int tot, int seg,
tv[monkeynv+i]->f |= SELECT;
}
for (i=0; i<monkeynf; i++) {
- efa= addfacelist(tv[monkeyf[i][0]+i-monkeyo], tv[monkeyf[i][1]+i-monkeyo], tv[monkeyf[i][2]+i-monkeyo], (monkeyf[i][3]!=monkeyf[i][2])?tv[monkeyf[i][3]+i-monkeyo]:NULL, NULL, NULL);
- efa= addfacelist(tv[monkeynv+monkeyf[i][2]+i-monkeyo], tv[monkeynv+monkeyf[i][1]+i-monkeyo], tv[monkeynv+monkeyf[i][0]+i-monkeyo], (monkeyf[i][3]!=monkeyf[i][2])?tv[monkeynv+monkeyf[i][3]+i-monkeyo]:NULL, NULL, NULL);
+ addfacelist(tv[monkeyf[i][0]+i-monkeyo], tv[monkeyf[i][1]+i-monkeyo], tv[monkeyf[i][2]+i-monkeyo], (monkeyf[i][3]!=monkeyf[i][2])?tv[monkeyf[i][3]+i-monkeyo]:NULL, NULL, NULL);
+ addfacelist(tv[monkeynv+monkeyf[i][2]+i-monkeyo], tv[monkeynv+monkeyf[i][1]+i-monkeyo], tv[monkeynv+monkeyf[i][0]+i-monkeyo], (monkeyf[i][3]!=monkeyf[i][2])?tv[monkeynv+monkeyf[i][3]+i-monkeyo]:NULL, NULL, NULL);
}
MEM_freeN(tv);
diff --git a/source/blender/src/editmesh_lib.c b/source/blender/src/editmesh_lib.c
index 4d9679b6b8a..bafc9dda7d6 100644
--- a/source/blender/src/editmesh_lib.c
+++ b/source/blender/src/editmesh_lib.c
@@ -1914,6 +1914,10 @@ void flip_editnormals(void)
}
efa= efa->next;
}
+
+ /* update vertex normals too */
+ recalc_editnormals();
+
#ifdef WITH_VERSE
if(G.editMesh->vnode)
sync_all_versefaces_with_editfaces((VNode*)G.editMesh->vnode);
diff --git a/source/blender/src/editmesh_loop.c b/source/blender/src/editmesh_loop.c
index 4ac5072b212..dfd18e208fb 100644
--- a/source/blender/src/editmesh_loop.c
+++ b/source/blender/src/editmesh_loop.c
@@ -519,6 +519,7 @@ static CutCurve *get_mouse_trail(int *len, char mode, char cutmode, struct GHash
glDrawBuffer(GL_FRONT);
headerprint("(LMB) draw, (MMB) constrain to x/y screen axis, (Enter) cut (with Ctrl to select cut line), (Esc) cancel");
}
+ bglFlush();
persp(PERSP_WIN);
@@ -537,7 +538,6 @@ static CutCurve *get_mouse_trail(int *len, char mode, char cutmode, struct GHash
bglFlush();
glDrawBuffer(GL_BACK);
return(NULL);
- break;
}
if (rubberband) { /* rubberband mode, undraw last rubberband */
@@ -620,14 +620,14 @@ static CutCurve *get_mouse_trail(int *len, char mode, char cutmode, struct GHash
if ((i>1)&&(i!=lasti)) { /*Draw recorded part of curve */
sdrawline((int)curve[i-2].x, (int)curve[i-2].y, (int)curve[i-1].x, (int)curve[i-1].y);
- glFlush();
+ bglFlush();
}
if ((i==lasti)&&(i>0)) { /*Draw rubberband */
glLineWidth(2.0);
sdrawXORline((int)curve[i-1].x, (int)curve[i-1].y,(int)mval[0], (int)mval[1]);
glLineWidth(1.0);
- glFlush();
+ bglFlush();
rubberband=1;
}
lasti=i;
@@ -745,9 +745,9 @@ void KnifeSubdivide(char mode)
eed= eed->next;
}
- if (mode==KNIFE_EXACT) esubdivideflag(1, 0, B_KNIFE|B_PERCENTSUBD,1,SUBDIV_SELECT_ORIG);
- else if (mode==KNIFE_MIDPOINT) esubdivideflag(1, 0, B_KNIFE,1,SUBDIV_SELECT_ORIG);
- else if (mode==KNIFE_MULTICUT) esubdivideflag(1, 0, B_KNIFE,numcuts,SUBDIV_SELECT_ORIG);
+ if(mode==KNIFE_EXACT) esubdivideflag(SELECT, 0, B_KNIFE|B_PERCENTSUBD,1,SUBDIV_SELECT_ORIG);
+ else if (mode==KNIFE_MIDPOINT) esubdivideflag(SELECT, 0, B_KNIFE,1,SUBDIV_SELECT_ORIG);
+ else if (mode==KNIFE_MULTICUT) esubdivideflag(SELECT, 0, B_KNIFE,numcuts,SUBDIV_SELECT_ORIG);
eed=em->edges.first;
while(eed){
diff --git a/source/blender/src/editmesh_mods.c b/source/blender/src/editmesh_mods.c
index 6dfbd67720b..81d0ffeeb3b 100644
--- a/source/blender/src/editmesh_mods.c
+++ b/source/blender/src/editmesh_mods.c
@@ -109,6 +109,7 @@ editmesh_mods.c, UI level access, no geometry changes
#include "editmesh.h"
+#include "BLO_sys_types.h" // for intptr_t support
/* ****************************** MIRROR **************** */
@@ -2937,7 +2938,7 @@ void select_sharp_edges(void)
EditFace *efa;
EditFace **efa1;
EditFace **efa2;
- long edgecount = 0, i;
+ intptr_t edgecount = 0, i;
static short sharpness = 135;
float fsharpness;
@@ -3041,7 +3042,7 @@ void select_linked_flat_faces(void)
EditFace *efa;
EditFace **efa1;
EditFace **efa2;
- long edgecount = 0, i, faceselcount=0, faceselcountold=0;
+ intptr_t edgecount = 0, i, faceselcount=0, faceselcountold=0;
static short sharpness = 135;
float fsharpness;
@@ -4201,7 +4202,7 @@ void editmesh_align_view_to_selected(View3D *v3d, int axis)
void vertexsmooth(void)
{
EditMesh *em = G.editMesh;
- EditVert *eve;
+ EditVert *eve, *eve_mir = NULL;
EditEdge *eed;
float *adror, *adr, fac;
float fvec[3];
@@ -4284,13 +4285,19 @@ void vertexsmooth(void)
while(eve) {
if(eve->f & SELECT) {
if(eve->f1) {
+
+ if (G.scene->toolsettings->editbutflag & B_MESH_X_MIRROR) {
+ eve_mir= editmesh_get_x_mirror_vert(G.obedit, eve->co);
+ }
+
adr = eve->tmp.p;
fac= 0.5/(float)eve->f1;
eve->co[0]= 0.5*eve->co[0]+fac*adr[0];
eve->co[1]= 0.5*eve->co[1]+fac*adr[1];
eve->co[2]= 0.5*eve->co[2]+fac*adr[2];
-
+
+
/* clip if needed by mirror modifier */
if (eve->f2) {
if (eve->f2 & 1) {
@@ -4303,6 +4310,13 @@ void vertexsmooth(void)
eve->co[2]= 0.0f;
}
}
+
+ if (eve_mir) {
+ eve_mir->co[0]=-eve->co[0];
+ eve_mir->co[1]= eve->co[1];
+ eve_mir->co[2]= eve->co[2];
+ }
+
}
eve->tmp.p= NULL;
}
diff --git a/source/blender/src/editmesh_tools.c b/source/blender/src/editmesh_tools.c
index f9bb14a08c6..76f1443616f 100644
--- a/source/blender/src/editmesh_tools.c
+++ b/source/blender/src/editmesh_tools.c
@@ -110,6 +110,8 @@ editmesh_tool.c: UI called tools for editmesh, geometry changes here, otherwise
#include "PIL_time.h"
+#include "BLO_sys_types.h" // for intptr_t support
+
/* local prototypes ---------------*/
void bevel_menu(void);
static void free_tagged_edges_faces(EditEdge *eed, EditFace *efa);
@@ -132,7 +134,7 @@ static int vergxco(const void *v1, const void *v2)
}
struct facesort {
- unsigned long x;
+ uintptr_t x;
struct EditFace *efa;
};
@@ -433,8 +435,8 @@ int removedoublesflag(short flag, short automerge, float limit) /* return amoun
efa= em->faces.first;
while(efa) {
if(efa->f1 & 1) {
- if(efa->v4) vsb->x= (unsigned long) MIN4( (unsigned long)efa->v1, (unsigned long)efa->v2, (unsigned long)efa->v3, (unsigned long)efa->v4);
- else vsb->x= (unsigned long) MIN3( (unsigned long)efa->v1, (unsigned long)efa->v2, (unsigned long)efa->v3);
+ if(efa->v4) vsb->x= (uintptr_t) MIN4( (uintptr_t)efa->v1, (uintptr_t)efa->v2, (uintptr_t)efa->v3, (uintptr_t)efa->v4);
+ else vsb->x= (uintptr_t) MIN3( (uintptr_t)efa->v1, (uintptr_t)efa->v2, (uintptr_t)efa->v3);
vsb->efa= efa;
vsb++;
@@ -2431,7 +2433,11 @@ void esubdivideflag(int flag, float rad, int beauty, int numcuts, int seltype)
//Set faces f1 to 0 cause we need it later
for(ef=em->faces.first;ef;ef = ef->next) ef->f1 = 0;
- for(eve=em->verts.first; eve; eve=eve->next) eve->f1 = eve->f2 = 0;
+ for(eve=em->verts.first; eve; eve=eve->next) {
+ if(!(beauty & B_KNIFE)) /* knife sets this flag for vertex cuts */
+ eve->f1 = 0;
+ eve->f2 = 0;
+ }
for (; md; md=md->next) {
if (md->type==eModifierType_Mirror) {
@@ -2696,16 +2702,21 @@ void esubdivideflag(int flag, float rad, int beauty, int numcuts, int seltype)
free_tagged_edges_faces(em->edges.first, em->faces.first);
if(seltype == SUBDIV_SELECT_ORIG && G.qual != LR_CTRLKEY) {
+ /* bugfix: vertex could get flagged as "not-selected"
+ // solution: clear flags before, not at the same time as setting SELECT flag -dg
+ */
for(eed = em->edges.first;eed;eed = eed->next) {
- if(eed->f2 & EDGENEW || eed->f2 & EDGEOLD) {
- eed->f |= flag;
- EM_select_edge(eed,1);
-
- }else{
+ if(!(eed->f2 & EDGENEW || eed->f2 & EDGEOLD)) {
eed->f &= !flag;
EM_select_edge(eed,0);
}
- }
+ }
+ for(eed = em->edges.first;eed;eed = eed->next) {
+ if(eed->f2 & EDGENEW || eed->f2 & EDGEOLD) {
+ eed->f |= flag;
+ EM_select_edge(eed,1);
+ }
+ }
} else if ((seltype == SUBDIV_SELECT_INNER || seltype == SUBDIV_SELECT_INNER_SEL)|| G.qual == LR_CTRLKEY) {
for(eed = em->edges.first;eed;eed = eed->next) {
if(eed->f2 & EDGEINNER) {
@@ -4479,7 +4490,7 @@ static void bevel_mesh_recurs(float bsize, short recurs, int allfaces)
}
}
-void bevel_menu() {
+void bevel_menu(void) {
BME_Mesh *bm;
BME_TransData_Head *td;
TransInfo *t;
@@ -4646,6 +4657,12 @@ void bevel_menu_old()
}
/* *********** END BEVEL *********/
+typedef struct SlideUv {
+ float origuv[2];
+ float *uv_up, *uv_down;
+ //float *fuv[4];
+ LinkNode *fuv_list;
+} SlideUv;
typedef struct SlideVert {
EditEdge *up,*down;
@@ -4653,9 +4670,19 @@ typedef struct SlideVert {
} SlideVert;
int EdgeLoopDelete(void) {
+
+ /* temporal flag setting so we keep UVs when deleting edge loops,
+ * this is a bit of a hack but it works how you would want in almost all cases */
+ short uvcalc_flag_orig = G.scene->toolsettings->uvcalc_flag;
+ G.scene->toolsettings->uvcalc_flag |= UVCALC_TRANSFORM_CORRECT;
+
if(!EdgeSlide(1, 1)) {
return 0;
}
+
+ /* restore uvcalc flag */
+ G.scene->toolsettings->uvcalc_flag = uvcalc_flag_orig;
+
EM_select_more();
removedoublesflag(1,0, 0.001);
EM_select_flush();
@@ -4665,22 +4692,35 @@ int EdgeLoopDelete(void) {
int EdgeSlide(short immediate, float imperc)
{
+ NumInput num;
EditMesh *em = G.editMesh;
EditFace *efa;
EditEdge *eed,*first=NULL,*last=NULL, *temp = NULL;
EditVert *ev, *nearest;
LinkNode *edgelist = NULL, *vertlist=NULL, *look;
GHash *vertgh;
+
SlideVert *tempsv;
float perc = 0, percp = 0,vertdist, projectMat[4][4], viewMat[4][4];
float shiftlabda= 0.0f,len = 0.0f;
int i = 0,j, numsel, numadded=0, timesthrough = 0, vertsel=0, prop=1, cancel = 0,flip=0;
int wasshift = 0;
+
+ /* UV correction vars */
+ GHash **uvarray= NULL;
+ int uvlay_tot= CustomData_number_of_layers(&G.editMesh->fdata, CD_MTFACE);
+ int uvlay_idx;
+ SlideUv *slideuvs=NULL, *suv=NULL, *suv_last=NULL;
+ float uv_tmp[2];
+ LinkNode *fuv_link;
+
short event, draw=1;
short mval[2], mvalo[2];
char str[128];
float labda = 0.0f;
+ initNumInput(&num);
+
view3d_get_object_project_mat(curarea, G.obedit, projectMat, viewMat);
mvalo[0] = -1; mvalo[1] = -1;
@@ -4980,6 +5020,99 @@ int EdgeSlide(short immediate, float imperc)
look = look->next;
}
+
+
+ if (uvlay_tot && (G.scene->toolsettings->uvcalc_flag & UVCALC_TRANSFORM_CORRECT)) {
+ int maxnum = 0;
+ uvarray = MEM_callocN( uvlay_tot * sizeof(GHash *), "SlideUVs Array");
+ suv_last = slideuvs = MEM_callocN( uvlay_tot * (numadded+1) * sizeof(SlideUv), "SlideUVs"); /* uvLayers * verts */
+ suv = NULL;
+
+ for (uvlay_idx=0; uvlay_idx<uvlay_tot; uvlay_idx++) {
+
+ uvarray[uvlay_idx] = BLI_ghash_new(BLI_ghashutil_ptrhash, BLI_ghashutil_ptrcmp);
+
+ for(ev=em->verts.first;ev;ev=ev->next) {
+ ev->tmp.l = 0;
+ }
+ look = vertlist;
+ while(look) {
+ float *uv_new;
+ tempsv = BLI_ghash_lookup(vertgh,(EditVert*)look->link);
+
+ ev = look->link;
+ suv = NULL;
+ for(efa = em->faces.first;efa;efa=efa->next) {
+ if (ev->tmp.l != -1) { /* test for self, in this case its invalid */
+ int k=-1; /* face corner */
+
+ /* Is this vert in the faces corner? */
+ if (efa->v1==ev) k=0;
+ else if (efa->v2==ev) k=1;
+ else if (efa->v3==ev) k=2;
+ else if (efa->v4 && efa->v4==ev) k=3;
+
+ if (k != -1) {
+ MTFace *tf = CustomData_em_get_n(&em->fdata, efa->data, CD_MTFACE, uvlay_idx);
+ EditVert *ev_up, *ev_down;
+
+ uv_new = tf->uv[k];
+
+ if (ev->tmp.l) {
+ if (fabs(suv->origuv[0]-uv_new[0]) > 0.0001 || fabs(suv->origuv[1]-uv_new[1])) {
+ ev->tmp.l = -1; /* Tag as invalid */
+ BLI_linklist_free(suv->fuv_list,NULL);
+ suv->fuv_list = NULL;
+ BLI_ghash_remove(uvarray[uvlay_idx],ev, NULL, NULL);
+ suv = NULL;
+ break;
+ }
+ } else {
+ ev->tmp.l = 1;
+ suv = suv_last;
+
+ suv->fuv_list = NULL;
+ suv->uv_up = suv->uv_down = NULL;
+ suv->origuv[0] = uv_new[0];
+ suv->origuv[1] = uv_new[1];
+
+ BLI_linklist_prepend(&suv->fuv_list, uv_new);
+ BLI_ghash_insert(uvarray[uvlay_idx],ev,suv);
+
+ suv_last++; /* advance to next slide UV */
+ maxnum++;
+ }
+
+ /* Now get the uvs along the up or down edge if we can */
+ if (suv) {
+ if (!suv->uv_up) {
+ ev_up = editedge_getOtherVert(tempsv->up,ev);
+ if (efa->v1==ev_up) suv->uv_up = tf->uv[0];
+ else if (efa->v2==ev_up) suv->uv_up = tf->uv[1];
+ else if (efa->v3==ev_up) suv->uv_up = tf->uv[2];
+ else if (efa->v4 && efa->v4==ev_up) suv->uv_up = tf->uv[3];
+ }
+ if (!suv->uv_down) { /* if the first face was apart of the up edge, it cant be apart of the down edge */
+ ev_down = editedge_getOtherVert(tempsv->down,ev);
+ if (efa->v1==ev_down) suv->uv_down = tf->uv[0];
+ else if (efa->v2==ev_down) suv->uv_down = tf->uv[1];
+ else if (efa->v3==ev_down) suv->uv_down = tf->uv[2];
+ else if (efa->v4 && efa->v4==ev_down) suv->uv_down = tf->uv[3];
+ }
+
+ /* Copy the pointers to the face UV's */
+ BLI_linklist_prepend(&suv->fuv_list, uv_new);
+ }
+ }
+ }
+ }
+ look = look->next;
+ }
+ } /* end uv layer loop */
+ } /* end uvlay_tot */
+
+
+
// we should have enough info now to slide
len = 0.0f;
@@ -4992,17 +5125,84 @@ int EdgeSlide(short immediate, float imperc)
float v2[2], v3[2];
EditVert *centerVert, *upVert, *downVert;
-
-
getmouseco_areawin(mval);
if (!immediate && (mval[0] == mvalo[0] && mval[1] == mvalo[1])) {
PIL_sleep_ms(10);
} else {
+ char *p = str;;
mvalo[0] = mval[0];
mvalo[1] = mval[1];
+
+ tempsv = BLI_ghash_lookup(vertgh,nearest);
+
+ centerVert = editedge_getSharedVert(tempsv->up, tempsv->down);
+ upVert = editedge_getOtherVert(tempsv->up, centerVert);
+ downVert = editedge_getOtherVert(tempsv->down, centerVert);
+
+ view3d_project_float(curarea, upVert->co, v2, projectMat);
+ view3d_project_float(curarea, downVert->co, v3, projectMat);
+
+ /* Determine the % on which the loop should be cut */
+
+ rc[0]= v3[0]-v2[0];
+ rc[1]= v3[1]-v2[1];
+ len= rc[0]*rc[0]+ rc[1]*rc[1];
+ if (len==0) {len = 0.0001;}
+
+ if ((G.qual & LR_SHIFTKEY)==0) {
+ wasshift = 0;
+ labda= ( rc[0]*((mval[0]-v2[0])) + rc[1]*((mval[1]-v2[1])) )/len;
+ }
+ else {
+ if (wasshift==0) {
+ wasshift = 1;
+ shiftlabda = labda;
+ }
+ labda= ( rc[0]*((mval[0]-v2[0])) + rc[1]*((mval[1]-v2[1])) )/len / 10.0 + shiftlabda;
+ }
+
+
+ if(labda<=0.0) labda=0.0;
+ else if(labda>=1.0)labda=1.0;
+
+ perc=((1-labda)*2)-1;
+
+ if(G.qual == 0) {
+ perc *= 100;
+ perc = floor(perc);
+ perc /= 100;
+ } else if (G.qual == LR_CTRLKEY) {
+ perc *= 10;
+ perc = floor(perc);
+ perc /= 10;
+ }
+
+ if(prop == 0) {
+ len = VecLenf(upVert->co,downVert->co)*((perc+1)/2);
+ if(flip == 1) {
+ len = VecLenf(upVert->co,downVert->co) - len;
+ }
+ }
+
+ if (hasNumInput(&num))
+ {
+ applyNumInput(&num, &perc);
+
+ if (prop)
+ {
+ perc = MIN2(perc, 1);
+ perc = MAX2(perc, -1);
+ }
+ else
+ {
+ len = MIN2(perc, VecLenf(upVert->co,downVert->co));
+ len = MAX2(len, 0);
+ }
+ }
+
//Adjust Edgeloop
if(immediate) {
perc = imperc;
@@ -5017,7 +5217,21 @@ int EdgeSlide(short immediate, float imperc)
tempev = editedge_getOtherVert((perc>=0)?tempsv->up:tempsv->down, ev);
VecLerpf(ev->co, tempsv->origvert.co, tempev->co, fabs(perc));
-
+
+ if (G.scene->toolsettings->uvcalc_flag & UVCALC_TRANSFORM_CORRECT) {
+ for (uvlay_idx=0; uvlay_idx<uvlay_tot; uvlay_idx++) {
+ suv = BLI_ghash_lookup( uvarray[uvlay_idx], ev );
+ if (suv && suv->fuv_list && suv->uv_up && suv->uv_down) {
+ Vec2Lerpf(uv_tmp, suv->origuv, (perc>=0)?suv->uv_up:suv->uv_down, fabs(perc));
+ fuv_link = suv->fuv_list;
+ while (fuv_link) {
+ VECCOPY2D(((float *)fuv_link->link), uv_tmp);
+ fuv_link = fuv_link->next;
+ }
+ }
+ }
+ }
+
look = look->next;
}
}
@@ -5033,21 +5247,44 @@ int EdgeSlide(short immediate, float imperc)
if(newlen < 0.0) {newlen = 0.0;}
if(flip == 0) {
VecLerpf(ev->co, editedge_getOtherVert(tempsv->down,ev)->co, editedge_getOtherVert(tempsv->up,ev)->co, fabs(newlen));
+ if (G.scene->toolsettings->uvcalc_flag & UVCALC_TRANSFORM_CORRECT) {
+ /* dont do anything if no UVs */
+ for (uvlay_idx=0; uvlay_idx<uvlay_tot; uvlay_idx++) {
+ suv = BLI_ghash_lookup( uvarray[uvlay_idx], ev );
+ if (suv && suv->fuv_list && suv->uv_up && suv->uv_down) {
+ Vec2Lerpf(uv_tmp, suv->uv_down, suv->uv_up, fabs(newlen));
+ fuv_link = suv->fuv_list;
+ while (fuv_link) {
+ VECCOPY2D(((float *)fuv_link->link), uv_tmp);
+ fuv_link = fuv_link->next;
+ }
+ }
+ }
+ }
} else{
VecLerpf(ev->co, editedge_getOtherVert(tempsv->up,ev)->co, editedge_getOtherVert(tempsv->down,ev)->co, fabs(newlen));
+
+ if (G.scene->toolsettings->uvcalc_flag & UVCALC_TRANSFORM_CORRECT) {
+ /* dont do anything if no UVs */
+ for (uvlay_idx=0; uvlay_idx<uvlay_tot; uvlay_idx++) {
+ suv = BLI_ghash_lookup( uvarray[uvlay_idx], ev );
+ if (suv && suv->fuv_list && suv->uv_up && suv->uv_down) {
+ Vec2Lerpf(uv_tmp, suv->uv_up, suv->uv_down, fabs(newlen));
+ fuv_link = suv->fuv_list;
+ while (fuv_link) {
+ VECCOPY2D(((float *)fuv_link->link), uv_tmp);
+ fuv_link = fuv_link->next;
+ }
+ }
+ }
+ }
}
look = look->next;
}
}
- tempsv = BLI_ghash_lookup(vertgh,nearest);
-
- centerVert = editedge_getSharedVert(tempsv->up, tempsv->down);
- upVert = editedge_getOtherVert(tempsv->up, centerVert);
- downVert = editedge_getOtherVert(tempsv->down, centerVert);
// Highlight the Control Edges
-
scrarea_do_windraw(curarea);
persp(PERSP_VIEW);
glPushMatrix();
@@ -5075,55 +5312,36 @@ int EdgeSlide(short immediate, float imperc)
glPopMatrix();
- view3d_project_float(curarea, upVert->co, v2, projectMat);
- view3d_project_float(curarea, downVert->co, v3, projectMat);
-
- /* Determine the % on which the loop should be cut */
-
- rc[0]= v3[0]-v2[0];
- rc[1]= v3[1]-v2[1];
- len= rc[0]*rc[0]+ rc[1]*rc[1];
- if (len==0) {len = 0.0001;}
-
- if ((G.qual & LR_SHIFTKEY)==0) {
- wasshift = 0;
- labda= ( rc[0]*((mval[0]-v2[0])) + rc[1]*((mval[1]-v2[1])) )/len;
+ if(prop) {
+ p += sprintf(str, "(P)ercentage: ");
+ } else {
+ p += sprintf(str, "Non (P)rop Length: ");
}
- else {
- if (wasshift==0) {
- wasshift = 1;
- shiftlabda = labda;
- }
- labda= ( rc[0]*((mval[0]-v2[0])) + rc[1]*((mval[1]-v2[1])) )/len / 10.0 + shiftlabda;
+
+ if (hasNumInput(&num))
+ {
+ char num_str[20];
+
+ outputNumInput(&num, num_str);
+ p += sprintf(p, "%s", num_str);
+ }
+ else
+ {
+ if (prop)
+ {
+ p += sprintf(p, "%f", perc);
+ }
+ else
+ {
+ p += sprintf(p, "%f", len);
+ }
}
-
- if(labda<=0.0) labda=0.0;
- else if(labda>=1.0)labda=1.0;
-
- perc=((1-labda)*2)-1;
- if(G.qual == 0) {
- perc *= 100;
- perc = floor(perc);
- perc /= 100;
- } else if (G.qual == LR_CTRLKEY) {
- perc *= 10;
- perc = floor(perc);
- perc /= 10;
- }
- if(prop) {
- sprintf(str, "(P)ercentage: %f", perc);
- } else {
- len = VecLenf(upVert->co,downVert->co)*((perc+1)/2);
- if(flip == 1) {
- len = VecLenf(upVert->co,downVert->co) - len;
- }
- sprintf(str, "Non (P)rop Length: %f, Press (F) to flip control side", len);
+ if (prop == 0) {
+ p += sprintf(p, ", Press (F) to flip control side");
}
-
-
headerprint(str);
screen_swapbuffers();
}
@@ -5146,7 +5364,14 @@ int EdgeSlide(short immediate, float imperc)
perc = 0;
immediate = 1;
} else if(event==PKEY) {
- (prop == 1) ? (prop = 0):(prop = 1);
+ initNumInput(&num); /* reset num input */
+ if (prop) {
+ prop = 0;
+ num.flag |= NUM_NO_NEGATIVE;
+ }
+ else {
+ prop = 1;
+ }
mvalo[0] = -1;
} else if(event==FKEY) {
(flip == 1) ? (flip = 0):(flip = 1);
@@ -5184,7 +5409,13 @@ int EdgeSlide(short immediate, float imperc)
look = look->next;
}
}
+
+ if (handleNumInput(&num, event))
+ {
+ mvalo[0] = -1; /* NEED A BETTER WAY TO TRIGGER REDRAW */
+ }
}
+
}
} else {
draw = 0;
@@ -5216,6 +5447,24 @@ int EdgeSlide(short immediate, float imperc)
BLI_ghash_free(vertgh, NULL, (GHashValFreeFP)MEM_freeN);
BLI_linklist_free(vertlist,NULL);
BLI_linklist_free(edgelist,NULL);
+
+ if (uvlay_tot && (G.scene->toolsettings->uvcalc_flag & UVCALC_TRANSFORM_CORRECT)) {
+ for (uvlay_idx=0; uvlay_idx<uvlay_tot; uvlay_idx++) {
+ BLI_ghash_free(uvarray[uvlay_idx], NULL, NULL);
+ }
+ MEM_freeN(uvarray);
+ MEM_freeN(slideuvs);
+
+ suv = suv_last-1;
+ while (suv >= slideuvs) {
+ if (suv->fuv_list) {
+ BLI_linklist_free(suv->fuv_list,NULL);
+ }
+ suv--;
+ }
+
+ allqueue(REDRAWIMAGE, 0);
+ }
if(cancel == 1) {
return -1;
@@ -5238,7 +5487,11 @@ void mesh_set_face_flags(short mode)
EditMesh *em = G.editMesh;
EditFace *efa;
MTFace *tface;
- short m_tex=0, m_tiles=0, m_shared=0, m_light=0, m_invis=0, m_collision=0, m_twoside=0, m_obcolor=0;
+ short m_tex=0, m_tiles=0, m_shared=0,
+ m_light=0, m_invis=0, m_collision=0,
+ m_twoside=0, m_obcolor=0, m_halo=0,
+ m_billboard=0, m_shadow=0, m_text=0,
+ m_sort=0;
short flag = 0, change = 0;
if (!EM_texFaceCheck()) {
@@ -5248,16 +5501,26 @@ void mesh_set_face_flags(short mode)
add_numbut(0, TOG|SHO, "Texture", 0, 0, &m_tex, NULL);
add_numbut(1, TOG|SHO, "Tiles", 0, 0, &m_tiles, NULL);
- add_numbut(2, TOG|SHO, "Shared", 0, 0, &m_shared, NULL);
- add_numbut(3, TOG|SHO, "Light", 0, 0, &m_light, NULL);
- add_numbut(4, TOG|SHO, "Invisible", 0, 0, &m_invis, NULL);
- add_numbut(5, TOG|SHO, "Collision", 0, 0, &m_collision, NULL);
+ add_numbut(2, TOG|SHO, "Light", 0, 0, &m_light, NULL);
+ add_numbut(3, TOG|SHO, "Invisible", 0, 0, &m_invis, NULL);
+ add_numbut(4, TOG|SHO, "Collision", 0, 0, &m_collision, NULL);
+ add_numbut(5, TOG|SHO, "Shared", 0, 0, &m_shared, NULL);
add_numbut(6, TOG|SHO, "Twoside", 0, 0, &m_twoside, NULL);
add_numbut(7, TOG|SHO, "ObColor", 0, 0, &m_obcolor, NULL);
+ add_numbut(8, TOG|SHO, "Halo", 0, 0, &m_halo, NULL);
+ add_numbut(9, TOG|SHO, "Billboard", 0, 0, &m_billboard, NULL);
+ add_numbut(10, TOG|SHO, "Shadow", 0, 0, &m_shadow, NULL);
+ add_numbut(11, TOG|SHO, "Text", 0, 0, &m_text, NULL);
+ add_numbut(12, TOG|SHO, "Sort", 0, 0, &m_sort, NULL);
- if (!do_clever_numbuts((mode ? "Set Flags" : "Clear Flags"), 8, REDRAW))
+ if (!do_clever_numbuts((mode ? "Set Flags" : "Clear Flags"), 13, REDRAW))
return;
+ /* these 2 cant both be on */
+ if (mode) /* are we seeting*/
+ if (m_halo)
+ m_billboard = 0;
+
if (m_tex) flag |= TF_TEX;
if (m_tiles) flag |= TF_TILES;
if (m_shared) flag |= TF_SHAREDCOL;
@@ -5266,6 +5529,14 @@ void mesh_set_face_flags(short mode)
if (m_collision) flag |= TF_DYNAMIC;
if (m_twoside) flag |= TF_TWOSIDE;
if (m_obcolor) flag |= TF_OBCOL;
+ if (m_halo) flag |= TF_BILLBOARD;
+ if (m_billboard) flag |= TF_BILLBOARD2;
+ if (m_shadow) flag |= TF_SHADOW;
+ if (m_text) flag |= TF_BMFONT;
+ if (m_sort) flag |= TF_ALPHASORT;
+
+ if (flag==0)
+ return;
efa= em->faces.first;
while(efa) {
@@ -5273,6 +5544,7 @@ void mesh_set_face_flags(short mode)
tface= CustomData_em_get(&em->fdata, efa->data, CD_MTFACE);
if (mode) tface->mode |= flag;
else tface->mode &= ~flag;
+ change = 1;
}
efa= efa->next;
}
diff --git a/source/blender/src/editmode_undo.c b/source/blender/src/editmode_undo.c
index d0a44360ad5..7893dac2408 100644
--- a/source/blender/src/editmode_undo.c
+++ b/source/blender/src/editmode_undo.c
@@ -107,6 +107,7 @@ typedef struct UndoElem {
Object *ob; // pointer to edited object
int type; // type of edited object
void *undodata;
+ uintptr_t undosize;
char name[MAXUNDONAME];
void (*freedata)(void *);
void (*to_editmode)(void *);
@@ -138,6 +139,7 @@ void undo_editmode_push(char *name, void (*freedata)(void *),
{
UndoElem *uel;
int nr;
+ uintptr_t memused, totmem, maxmem;
/* at first here was code to prevent an "original" key to be insterted twice
this was giving conflicts for example when mesh changed due to keys or apply */
@@ -145,9 +147,8 @@ void undo_editmode_push(char *name, void (*freedata)(void *),
/* remove all undos after (also when curundo==NULL) */
while(undobase.last != curundo) {
uel= undobase.last;
- BLI_remlink(&undobase, uel);
uel->freedata(uel->undodata);
- MEM_freeN(uel);
+ BLI_freelinkN(&undobase, uel);
}
/* make new */
@@ -160,7 +161,7 @@ void undo_editmode_push(char *name, void (*freedata)(void *),
uel->from_editmode= from_editmode;
uel->validate_undo= validate_undo;
- /* and limit amount to the maximum */
+ /* limit amount to the maximum amount*/
nr= 0;
uel= undobase.last;
while(uel) {
@@ -171,19 +172,43 @@ void undo_editmode_push(char *name, void (*freedata)(void *),
if(uel) {
while(undobase.first!=uel) {
UndoElem *first= undobase.first;
- BLI_remlink(&undobase, first);
first->freedata(first->undodata);
- MEM_freeN(first);
+ BLI_freelinkN(&undobase, first);
}
}
/* copy */
+ memused= MEM_get_memory_in_use();
curundo->undodata= curundo->from_editmode();
+ curundo->undosize= MEM_get_memory_in_use() - memused;
curundo->ob= G.obedit;
curundo->id= G.obedit->id;
curundo->type= G.obedit->type;
-}
+ if(U.undomemory != 0) {
+ /* limit to maximum memory (afterwards, we can't know in advance) */
+ totmem= 0;
+ maxmem= ((uintptr_t)U.undomemory)*1024*1024;
+
+ uel= undobase.last;
+ while(uel && uel->prev) {
+ totmem+= uel->undosize;
+ if(totmem>maxmem) break;
+ uel= uel->prev;
+ }
+
+ if(uel) {
+ if(uel->prev && uel->prev->prev)
+ uel= uel->prev;
+
+ while(undobase.first!=uel) {
+ UndoElem *first= undobase.first;
+ first->freedata(first->undodata);
+ BLI_freelinkN(&undobase, first);
+ }
+ }
+ }
+}
/* helper to remove clean other objects from undo stack */
static void undo_clean_stack(void)
@@ -205,9 +230,8 @@ static void undo_clean_stack(void)
}
else {
mixed= 1;
- BLI_remlink(&undobase, uel);
uel->freedata(uel->undodata);
- MEM_freeN(uel);
+ BLI_freelinkN(&undobase, uel);
}
uel= next;
diff --git a/source/blender/src/editnla.c b/source/blender/src/editnla.c
index dbc0deecb2c..2c17b20735b 100644
--- a/source/blender/src/editnla.c
+++ b/source/blender/src/editnla.c
@@ -1940,15 +1940,20 @@ void winqreadnlaspace(ScrArea *sa, void *spacedata, BWinEvent *evt)
case DELKEY:
case XKEY:
- if (mval[0]>=NLAWIDTH) {
- if (okee("Erase selected?")) {
- delete_nlachannel_keys();
- update_for_newframe_muted();
-
- remove_marker();
-
- allqueue(REDRAWMARKER, 0);
+ if (mval[0] >= NLAWIDTH) {
+ /* markers are incorported under shift-modifier (it does go against conventions, but oh well :/) */
+ if (G.qual == LR_SHIFTKEY) {
+ if (okee("Erase selected marker(s)?"))
+ remove_marker();
}
+ else {
+ if (okee("Erase selected?")) {
+ delete_nlachannel_keys();
+ update_for_newframe_muted();
+ }
+ }
+
+ allqueue(REDRAWMARKER, 0);
}
break;
diff --git a/source/blender/src/editnode.c b/source/blender/src/editnode.c
index 98f4f1bb46f..d3ba153e600 100644
--- a/source/blender/src/editnode.c
+++ b/source/blender/src/editnode.c
@@ -2001,7 +2001,10 @@ void node_hide(SpaceNode *snode)
void node_insert_key(SpaceNode *snode)
{
bNode *node= editnode_get_active(snode->edittree);
-
+
+ if(node == NULL)
+ return;
+
if(node->type==CMP_NODE_TIME) {
if(node->custom1<node->custom2) {
@@ -2110,6 +2113,7 @@ static void node_border_link_delete(SpaceNode *snode)
mval[1]= rect.ymax;
areamouseco_to_ipoco(&snode->v2d, mval, &rectf.xmax, &rectf.ymax);
+ glLoadIdentity();
myortho2(rectf.xmin, rectf.xmax, rectf.ymin, rectf.ymax);
glSelectBuffer(256, buffer);
diff --git a/source/blender/src/editobject.c b/source/blender/src/editobject.c
index fee967bcd9a..250332c4afa 100644
--- a/source/blender/src/editobject.c
+++ b/source/blender/src/editobject.c
@@ -172,6 +172,7 @@
#include "BDR_drawobject.h"
#include "BDR_editcurve.h"
#include "BDR_unwrapper.h"
+#include "BDR_gpencil.h"
#include <time.h>
#include "mydevice.h"
@@ -2827,7 +2828,7 @@ void convertmenu(void)
if(G.scene->id.lib) return;
obact= OBACT;
- if(obact==0) return;
+ if (obact == NULL) return;
if(!obact->flag & SELECT) return;
if(G.obedit) return;
@@ -3022,6 +3023,10 @@ void convertmenu(void)
basedel = NULL;
}
+ /* delete object should renew depsgraph */
+ if(nr==2)
+ DAG_scene_sort(G.scene);
+
/* texspace and normals */
if(!basen) BASACT= base;
@@ -3187,7 +3192,7 @@ void flip_subdivison(int level)
static void copymenu_properties(Object *ob)
{
- bProperty *prop, *propn, *propc;
+ bProperty *prop;
Base *base;
int nr, tot=0;
char *str;
@@ -3203,45 +3208,43 @@ static void copymenu_properties(Object *ob)
return;
}
- str= MEM_callocN(24+32*tot, "copymenu prop");
+ str= MEM_callocN(50 + 33*tot, "copymenu prop");
- strcpy(str, "Copy Property %t");
+ strcpy(str, "Copy Property %t|Replace All|Merge All|%l");
tot= 0;
prop= ob->prop.first;
while(prop) {
tot++;
- strcat(str, " |");
+ strcat(str, "|");
strcat(str, prop->name);
prop= prop->next;
}
nr= pupmenu(str);
- if(nr>0) {
- tot= 0;
- prop= ob->prop.first;
- while(prop) {
- tot++;
- if(tot==nr) break;
- prop= prop->next;
+
+ if ( nr==1 || nr==2 ) {
+ base= FIRSTBASE;
+ while(base) {
+ if((base != BASACT) && TESTBASELIB(base)) {
+ if (nr==1) { /* replace */
+ copy_properties( &base->object->prop, &ob->prop );
+ } else {
+ for(prop = ob->prop.first; prop; prop= prop->next ) {
+ set_ob_property(base->object, prop);
+ }
+ }
+ }
+ base= base->next;
}
+ } else if(nr>0) {
+ prop = BLI_findlink(&ob->prop, nr-4); /* account for first 3 menu items & menu index starting at 1*/
+
if(prop) {
- propc= prop;
-
- base= FIRSTBASE;
- while(base) {
- if(base != BASACT) {
- if(TESTBASELIB(base)) {
- prop= get_property(base->object, propc->name);
- if(prop) {
- free_property(prop);
- BLI_remlink(&base->object->prop, prop);
- }
- propn= copy_property(propc);
- BLI_addtail(&base->object->prop, propn);
- }
+ for(base= FIRSTBASE; base; base= base->next) {
+ if((base != BASACT) && TESTBASELIB(base)) {
+ set_ob_property(base->object, prop);
}
- base= base->next;
}
}
}
@@ -3278,6 +3281,9 @@ static void copymenu_logicbricks(Object *ob)
base->object->scavisflag= ob->scavisflag;
base->object->scaflag= ob->scaflag;
+ /* set the initial state */
+ base->object->state= ob->state;
+ base->object->init_state= ob->init_state;
}
}
base= base->next;
@@ -3300,6 +3306,9 @@ static void copymenu_modifiers(Object *ob)
ModifierTypeInfo *mti = modifierType_getInfo(i);
if(ELEM3(i, eModifierType_Hook, eModifierType_Softbody, eModifierType_ParticleInstance)) continue;
+
+ if(i == eModifierType_Collision)
+ continue;
if ( (mti->flags&eModifierTypeFlag_AcceptsCVs) ||
(ob->type==OB_MESH && (mti->flags&eModifierTypeFlag_AcceptsMesh))) {
@@ -3323,11 +3332,16 @@ static void copymenu_modifiers(Object *ob)
object_free_modifiers(base->object);
for (md=ob->modifiers.first; md; md=md->next) {
- if (md->type!=eModifierType_Hook) {
- ModifierData *nmd = modifier_new(md->type);
- modifier_copyData(md, nmd);
- BLI_addtail(&base->object->modifiers, nmd);
- }
+ ModifierData *nmd = NULL;
+
+ if(ELEM3(md->type, eModifierType_Hook, eModifierType_Softbody, eModifierType_ParticleInstance)) continue;
+
+ if(md->type == eModifierType_Collision)
+ continue;
+
+ nmd = modifier_new(md->type);
+ modifier_copyData(md, nmd);
+ BLI_addtail(&base->object->modifiers, nmd);
}
copy_object_particlesystems(base->object, ob);
@@ -3514,6 +3528,9 @@ void copy_attr(short event)
if (ob->gameflag & OB_BOUNDS) {
base->object->boundtype = ob->boundtype;
}
+ base->object->margin= ob->margin;
+ base->object->bsoft= copy_bulletsoftbody(ob->bsoft);
+
}
else if(event==17) { /* tex space */
copy_texture_space(base->object, ob);
@@ -3609,10 +3626,6 @@ void copy_attr(short event)
}
}
else if(event==22) {
- /* Clear the constraints on the target */
- free_constraints(&base->object->constraints);
- free_constraint_channels(&base->object->constraintChannels);
-
/* Copy the constraint channels over */
copy_constraints(&base->object->constraints, &ob->constraints);
if (U.dupflag& USER_DUP_IPO)
@@ -3663,6 +3676,9 @@ void copy_attr(short event)
else if(event==30) { /* index object */
base->object->index= ob->index;
}
+ else if(event==31) { /* object color */
+ QUATCOPY(base->object->col, ob->col);
+ }
}
}
base= base->next;
@@ -3701,7 +3717,7 @@ void copy_attr_menu()
* view3d_edit_object_copyattrmenu() and in toolbox.c
*/
- strcpy(str, "Copy Attributes %t|Location%x1|Rotation%x2|Size%x3|Draw Options%x4|Time Offset%x5|Dupli%x6|%l|Mass%x7|Damping%x8|All Physical Attributes%x11|Properties%x9|Logic Bricks%x10|Protected Transform%x29|%l");
+ strcpy(str, "Copy Attributes %t|Location%x1|Rotation%x2|Size%x3|Draw Options%x4|Time Offset%x5|Dupli%x6|Object Color%x31|%l|Mass%x7|Damping%x8|All Physical Attributes%x11|Properties%x9|Logic Bricks%x10|Protected Transform%x29|%l");
strcat (str, "|Object Constraints%x22");
strcat (str, "|NLA Strips%x26");
@@ -3922,7 +3938,7 @@ void make_links(short event)
BIF_undo_push("Create links");
}
-void apply_objects_locrot( void )
+static void apply_objects_internal( int apply_scale, int apply_rot )
{
Base *base, *basact;
Object *ob;
@@ -3936,7 +3952,11 @@ void apply_objects_locrot( void )
float mat[3][3];
int a, change = 0;
-
+ if (!apply_scale && !apply_rot) {
+ /* do nothing? */
+ error("Nothing to do!");
+ return;
+ }
/* first check if we can execute */
for (base= FIRSTBASE; base; base= base->next) {
if TESTBASELIB(base) {
@@ -3984,7 +4004,13 @@ void apply_objects_locrot( void )
ob= base->object;
if(ob->type==OB_MESH) {
- object_to_mat3(ob, mat);
+ if (apply_scale && apply_rot)
+ object_to_mat3(ob, mat);
+ else if (apply_scale)
+ object_scale_to_mat3(ob, mat);
+ else
+ object_rot_to_mat3(ob, mat);
+
me= ob->data;
/* see checks above */
@@ -3993,8 +4019,10 @@ void apply_objects_locrot( void )
for(a=0; a<me->totvert; a++, mvert++) {
Mat3MulVecfl(mat, mvert->co);
}
- ob->size[0]= ob->size[1]= ob->size[2]= 1.0;
- ob->rot[0]= ob->rot[1]= ob->rot[2]= 0.0;
+ if (apply_scale)
+ ob->size[0]= ob->size[1]= ob->size[2]= 1.0;
+ if (apply_rot)
+ ob->rot[0]= ob->rot[1]= ob->rot[2]= 0.0;
/*QuatOne(ob->quat);*/ /* Quats arnt used yet */
where_is_object(ob);
@@ -4009,15 +4037,22 @@ void apply_objects_locrot( void )
change = 1;
}
else if (ob->type==OB_ARMATURE) {
- object_to_mat3(ob, mat);
+ if (apply_scale && apply_rot)
+ object_to_mat3(ob, mat);
+ else if (apply_scale)
+ object_scale_to_mat3(ob, mat);
+ else
+ object_rot_to_mat3(ob, mat);
arm= ob->data;
/* see checks above */
apply_rot_armature(ob, mat);
/* Reset the object's transforms */
- ob->size[0]= ob->size[1]= ob->size[2]= 1.0;
- ob->rot[0]= ob->rot[1]= ob->rot[2]= 0.0;
+ if (apply_scale)
+ ob->size[0]= ob->size[1]= ob->size[2]= 1.0;
+ if (apply_rot)
+ ob->rot[0]= ob->rot[1]= ob->rot[2]= 0.0;
/*QuatOne(ob->quat); (not used anymore)*/
where_is_object(ob);
@@ -4026,7 +4061,12 @@ void apply_objects_locrot( void )
}
else if ELEM(ob->type, OB_CURVE, OB_SURF) {
float scale;
- object_to_mat3(ob, mat);
+ if (apply_scale && apply_rot)
+ object_to_mat3(ob, mat);
+ else if (apply_scale)
+ object_scale_to_mat3(ob, mat);
+ else
+ object_rot_to_mat3(ob, mat);
scale = Mat3ToScalef(mat);
cu= ob->data;
@@ -4055,9 +4095,10 @@ void apply_objects_locrot( void )
}
nu= nu->next;
}
-
- ob->size[0]= ob->size[1]= ob->size[2]= 1.0;
- ob->rot[0]= ob->rot[1]= ob->rot[2]= 0.0;
+ if (apply_scale)
+ ob->size[0]= ob->size[1]= ob->size[2]= 1.0;
+ if (apply_rot)
+ ob->rot[0]= ob->rot[1]= ob->rot[2]= 0.0;
/*QuatOne(ob->quat); (quats arnt used anymore)*/
where_is_object(ob);
@@ -4079,10 +4120,30 @@ void apply_objects_locrot( void )
}
if (change) {
allqueue(REDRAWVIEW3D, 0);
- BIF_undo_push("Apply Objects Scale & Rotation");
+ if (apply_scale && apply_rot)
+ BIF_undo_push("Apply Objects Scale & Rotation");
+ else if (apply_scale)
+ BIF_undo_push("Apply Objects Scale");
+ else
+ BIF_undo_push("Apply Objects Rotation");
}
}
+void apply_objects_locrot(void)
+{
+ apply_objects_internal(1, 1);
+}
+
+void apply_objects_scale(void)
+{
+ apply_objects_internal(1, 0);
+}
+
+void apply_objects_rot(void)
+{
+ apply_objects_internal(0, 1);
+}
+
void apply_objects_visual_tx( void )
{
Base *base;
@@ -4130,15 +4191,33 @@ void apply_object( void )
}
allqueue(REDRAWVIEW3D, 0);
- } else {
+ }
+ else {
+ ob= OBACT;
+ if(ob==0) return;
- evt = pupmenu("Apply Object%t|Scale and Rotation to ObData|Visual Transform to Objects Loc/Scale/Rot");
+ if ((ob->pose) && (ob->flag & OB_POSEMODE))
+ evt = pupmenu("Apply Object%t|Current Pose as RestPose%x3");
+ else
+ evt = pupmenu("Apply Object%t|Scale and Rotation to ObData%x1|Visual Transform to Objects Loc/Scale/Rot%x2|Scale to ObData%x4|Rotation to ObData%x5");
if (evt==-1) return;
- if (evt==1) {
- apply_objects_locrot();
- } else if (evt==2) {
- apply_objects_visual_tx();
+ switch (evt) {
+ case 1:
+ apply_objects_locrot();
+ break;
+ case 2:
+ apply_objects_visual_tx();
+ break;
+ case 3:
+ apply_armature_pose2bones();
+ break;
+ case 4:
+ apply_objects_scale();
+ break;
+ case 5:
+ apply_objects_rot();
+ break;
}
}
}
@@ -4351,18 +4430,17 @@ void single_object_users(int flag)
clear_sca_new_poins(); /* sensor/contr/act */
- /* duplicate */
+ /* duplicate (must set newid) */
base= FIRSTBASE;
while(base) {
ob= base->object;
- if( (base->flag & flag)==flag) {
-
+ if( (base->flag & flag)==flag ) {
if(ob->id.lib==NULL && ob->id.us>1) {
-
+ /* base gets copy of object */
obn= copy_object(ob);
- ob->id.us--;
base->object= obn;
+ ob->id.us--;
}
}
base= base->next;
@@ -4376,20 +4454,17 @@ void single_object_users(int flag)
while(base) {
ob= base->object;
if(ob->id.lib==NULL) {
- if( (base->flag & flag)==flag) {
-
- relink_constraints(&base->object->constraints);
- if (base->object->pose){
- bPoseChannel *chan;
- for (chan = base->object->pose->chanbase.first; chan; chan=chan->next){
- relink_constraints(&chan->constraints);
- }
+ relink_constraints(&base->object->constraints);
+ if (base->object->pose){
+ bPoseChannel *chan;
+ for (chan = base->object->pose->chanbase.first; chan; chan=chan->next){
+ relink_constraints(&chan->constraints);
}
- modifiers_foreachObjectLink(base->object, single_object_users__forwardModifierLinks, NULL);
-
- ID_NEW(ob->parent);
- ID_NEW(ob->track);
}
+ modifiers_foreachObjectLink(base->object, single_object_users__forwardModifierLinks, NULL);
+
+ ID_NEW(ob->parent);
+ ID_NEW(ob->track);
}
base= base->next;
}
diff --git a/source/blender/src/editparticle.c b/source/blender/src/editparticle.c
index f420d46c827..21192d50333 100644
--- a/source/blender/src/editparticle.c
+++ b/source/blender/src/editparticle.c
@@ -2022,7 +2022,7 @@ static void PE_radialcontrol_callback(const int mode, const int val)
(*PE_radialcontrol()) = NULL;
}
-RadialControl **PE_radialcontrol()
+RadialControl **PE_radialcontrol(void)
{
static RadialControl *rc = NULL;
return &rc;
@@ -2408,7 +2408,7 @@ static void brush_add(Object *ob, ParticleSystem *psys, short *mval, short numbe
tree=BLI_kdtree_new(psys->totpart);
for(i=0, pa=psys->particles; i<totpart; i++, pa++) {
- psys_particle_on_dm(ob,psmd->dm,psys->part->from,pa->num,pa->num_dmcache,pa->fuv,pa->foffset,cur_co,0,0,0,0,0);
+ psys_particle_on_dm(psmd->dm,psys->part->from,pa->num,pa->num_dmcache,pa->fuv,pa->foffset,cur_co,0,0,0,0,0);
BLI_kdtree_insert(tree, i, cur_co, NULL);
}
@@ -2448,7 +2448,7 @@ static void brush_add(Object *ob, ParticleSystem *psys, short *mval, short numbe
int w, maxw;
float maxd, mind, dd, totw=0.0, weight[3];
- psys_particle_on_dm(ob,psmd->dm,psys->part->from,pa->num,pa->num_dmcache,pa->fuv,pa->foffset,co1,0,0,0,0,0);
+ psys_particle_on_dm(psmd->dm,psys->part->from,pa->num,pa->num_dmcache,pa->fuv,pa->foffset,co1,0,0,0,0,0);
maxw = BLI_kdtree_find_n_nearest(tree,3,co1,NULL,ptn);
maxd = ptn[maxw-1].dist;
diff --git a/source/blender/src/editscreen.c b/source/blender/src/editscreen.c
index 1cd8733a7ea..2557894d0e0 100644
--- a/source/blender/src/editscreen.c
+++ b/source/blender/src/editscreen.c
@@ -1023,8 +1023,11 @@ int blender_test_break(void)
return (G.afbreek==1);
}
-void reset_autosave(void) {
- window_set_timer(mainwin, U.savetime*60*1000, AUTOSAVE_FILE);
+void reset_autosave(void)
+{
+ if(U.flag & USER_AUTOSAVE) {
+ window_set_timer(mainwin, U.savetime*60*1000, AUTOSAVE_FILE);
+ }
}
/* ************ handlers ************** */
@@ -1977,7 +1980,7 @@ static void testareas(void)
/* test for header, if removed, or moved */
/* test for window, if removed, or moved */
- for(sa= G.curscreen->areabase.first; sa; sa= sa->next) {
+ for(sa= G.curscreen->areabase.first; sa; sa= next) {
rcti oldhr= sa->headrct;
rcti oldwr= sa->winrct;
diff --git a/source/blender/src/editseq.c b/source/blender/src/editseq.c
index e9d0b57a166..d16e3f28671 100644
--- a/source/blender/src/editseq.c
+++ b/source/blender/src/editseq.c
@@ -687,6 +687,24 @@ static void recurs_sel_seq(Sequence *seqm)
}
}
+void select_single_seq(Sequence *seq, int deselect_all)
+{
+ if(deselect_all)
+ deselect_all_seq();
+ set_last_seq(seq);
+
+ if((seq->type==SEQ_IMAGE) || (seq->type==SEQ_MOVIE)) {
+ if(seq->strip)
+ strncpy(last_imagename, seq->strip->dir, FILE_MAXDIR-1);
+ }
+ else if((seq->type==SEQ_HD_SOUND) || (seq->type==SEQ_RAM_SOUND)) {
+ if(seq->strip)
+ strncpy(last_sounddir, seq->strip->dir, FILE_MAXDIR-1);
+ }
+ seq->flag|= SELECT;
+ recurs_sel_seq(seq);
+}
+
void swap_select_seq(void)
{
Sequence *seq;
@@ -932,7 +950,11 @@ void mouse_select_seq(void)
}
force_draw_plus(SPACE_BUTS, 0);
- if(get_last_seq()) allqueue(REDRAWIPO, 0);
+ if(get_last_seq()) {
+ allqueue(REDRAWIPO, 0);
+ allqueue(REDRAWOOPS, 0);
+ }
+
BIF_undo_push("Select Strips, Sequencer");
std_rmouse_transform(transform_seq_nomarker);
@@ -2211,6 +2233,7 @@ void del_seq(void)
BIF_undo_push("Delete Strip(s), Sequencer");
allqueue(REDRAWSEQ, 0);
+ allqueue(REDRAWOOPS, 0);
}
static Sequence *dupli_seq(Sequence *seq)
@@ -2897,7 +2920,7 @@ void un_meta(void)
BIF_undo_push("Un-Make Meta Strip, Sequencer");
allqueue(REDRAWSEQ, 0);
-
+ allqueue(REDRAWOOPS, 0);
}
void exit_meta(void)
@@ -2930,6 +2953,7 @@ void exit_meta(void)
MEM_freeN(ms);
allqueue(REDRAWSEQ, 0);
+ allqueue(REDRAWOOPS, 0);
BIF_undo_push("Exit Meta Strip, Sequence");
}
@@ -2958,6 +2982,7 @@ void enter_meta(void)
set_last_seq(NULL);
allqueue(REDRAWSEQ, 0);
+ allqueue(REDRAWOOPS, 0);
BIF_undo_push("Enter Meta Strip, Sequence");
}
diff --git a/source/blender/src/editsima.c b/source/blender/src/editsima.c
index 69070d61bf0..7fc76dd5202 100644
--- a/source/blender/src/editsima.c
+++ b/source/blender/src/editsima.c
@@ -110,7 +110,7 @@
#include "editmesh.h"
/* local prototypes */
-void sel_uvco_inside_radius(short , EditFace *efa, MTFace *, int , float *, float *, short);
+static void sel_uvco_inside_radius(short , EditFace *efa, MTFace *, int , float *, float *, short);
void uvedit_selectionCB(short , Object *, short *, float ); /* used in edit.c*/
void object_uvs_changed(Object *ob)
@@ -1264,7 +1264,7 @@ void snap_menu_sima(void)
* Just for readability...
*/
-void sel_uvco_inside_radius(short sel, EditFace *efa, MTFace *tface, int index, float *offset, float *ell, short select_index)
+static void sel_uvco_inside_radius(short sel, EditFace *efa, MTFace *tface, int index, float *offset, float *ell, short select_index)
{
// normalized ellipse: ell[0] = scaleX,
// [1] = scaleY
@@ -1730,7 +1730,7 @@ void uvface_setsel__internal(short select)
} else if ((G.sima->flag & SI_SYNC_UVSEL)==0 && G.sima->sticky == SI_STICKY_LOC) {
EditFace *efa_vlist;
MTFace *tf_vlist;
- UvMapVert *vlist, *start_vlist=NULL, *vlist_iter;
+ UvMapVert *start_vlist=NULL, *vlist_iter;
struct UvVertMap *vmap;
float limit[2];
int efa_index;
@@ -1760,7 +1760,7 @@ void uvface_setsel__internal(short select)
simaUVSel_UnSet(efa, tf, i);
}
- vlist= vlist_iter= get_uv_map_vert_EM(vmap, (*(&efa->v1 + i))->tmp.l);
+ vlist_iter= get_uv_map_vert_EM(vmap, (*(&efa->v1 + i))->tmp.l);
while (vlist_iter) {
if (vlist_iter->separate)
@@ -2654,15 +2654,9 @@ void image_changed(SpaceImage *sima, Image *image)
MTFace *tface;
EditMesh *em = G.editMesh;
EditFace *efa;
- ImBuf *ibuf = NULL;
+ /*ImBuf *ibuf = NULL;*/
short change = 0;
- if(image==NULL) {
- sima->flag &= ~SI_DRAWTOOL;
- } else {
- ibuf = BKE_image_get_ibuf(image, NULL);
- }
-
if(sima->mode!=SI_TEXTURE)
return;
@@ -2675,6 +2669,9 @@ void image_changed(SpaceImage *sima, Image *image)
(G.editMesh->faces.first)
) {
+ if(!is_uv_tface_editing_allowed())
+ return;
+
/* Add a UV layer if there is none, editmode only */
if ( !CustomData_has_layer(&G.editMesh->fdata, CD_MTFACE) ) {
EM_add_data_layer(&em->fdata, CD_MTFACE);
@@ -2685,6 +2682,11 @@ void image_changed(SpaceImage *sima, Image *image)
allqueue(REDRAWVIEW3D, 0);
allqueue(REDRAWBUTSEDIT, 0);
}
+
+#if 0
+ if(image)
+ ibuf = BKE_image_get_ibuf(image, NULL);
+#endif
for (efa= em->faces.first; efa; efa= efa->next) {
tface = CustomData_em_get(&em->fdata, efa->data, CD_MTFACE);
@@ -2714,9 +2716,13 @@ void image_changed(SpaceImage *sima, Image *image)
}
}
}
+
/* change the space image after because simaFaceDraw_Check uses the space image
* to check if the face is displayed in UV-localview */
sima->image = image;
+
+ if(sima->image==NULL)
+ sima->flag &= ~SI_DRAWTOOL;
if (change)
object_uvs_changed(OBACT);
diff --git a/source/blender/src/editsound.c b/source/blender/src/editsound.c
index 05eb094a7c2..c6ecc8d5865 100644
--- a/source/blender/src/editsound.c
+++ b/source/blender/src/editsound.c
@@ -91,15 +91,12 @@
/* this might move to the external header */
-void* sound_get_libraryinterface(void);
-
static SND_SceneHandle ghSoundScene=NULL;
static SND_AudioDeviceInterfaceHandle ghAudioDeviceInterface=NULL;
/* que? why only here? because of the type define? */
-bSound *sound_find_sound(char *id_name);
-void sound_read_wav_data(bSound * sound, PackedFile * pf);
-void sound_stop_sound(void *object, bSound *sound);
+static bSound *sound_find_sound(char *id_name);
+static void sound_read_wav_data(bSound * sound, PackedFile * pf);
void winqreadsoundspace(struct ScrArea *sa, void *spacedata, struct BWinEvent *evt);
/* void sound_stop_all_sounds(void); already in BIF_editsound.h */
@@ -275,6 +272,12 @@ void sound_initialize_sounds(void)
bSound *sound;
if(ghSoundScene) {
+ for(sound=G.main->sound.first; sound; sound=sound->id.next) {
+ if(sound->snd_sound) {
+ SND_RemoveSound(ghSoundScene, sound->snd_sound);
+ sound->snd_sound = NULL;
+ }
+ }
/* clear the soundscene */
SND_RemoveAllSounds(ghSoundScene);
@@ -352,7 +355,7 @@ void sound_initialize_sample(bSound *sound)
}
-void sound_read_wav_data(bSound *sound, PackedFile *pf)
+static void sound_read_wav_data(bSound *sound, PackedFile *pf)
{
int i, temp;
short shortbuf, *temps;
@@ -908,7 +911,16 @@ void sound_stop_all_sounds(void)
void sound_end_all_sounds(void)
{
#if GAMEBLENDER == 1
+ bSound *sound;
+
if(ghSoundScene) {
+ for(sound=G.main->sound.first; sound; sound=sound->id.next) {
+ if(sound->snd_sound) {
+ SND_RemoveSound(ghSoundScene, sound->snd_sound);
+ sound->snd_sound = NULL;
+ }
+ }
+
sound_stop_all_sounds();
SND_RemoveAllSounds(ghSoundScene);
}
@@ -1011,7 +1023,7 @@ void sound_play_sound(bSound *sound)
-bSound *sound_find_sound(char *id_name)
+static bSound *sound_find_sound(char *id_name)
{
bSound *sound;
diff --git a/source/blender/src/editview.c b/source/blender/src/editview.c
index a3fcad7885c..f95b56fe5b0 100644
--- a/source/blender/src/editview.c
+++ b/source/blender/src/editview.c
@@ -89,6 +89,7 @@
#include "BIF_gl.h"
#include "BIF_glutil.h"
#include "BIF_interface.h"
+#include "BIF_keyframing.h"
#include "BIF_mywindow.h"
#include "BIF_previewrender.h" /* use only so fly mode can preview when its done */
#include "BIF_space.h"
@@ -1631,7 +1632,7 @@ void mouse_select(void)
/* ------------------------------------------------------------------------- */
-static int edge_inside_circle(short centx, short centy, short rad, short x1, short y1, short x2, short y2)
+int edge_inside_circle(short centx, short centy, short rad, short x1, short y1, short x2, short y2)
{
int radsq= rad*rad;
float v1[2], v2[2], v3[2];
@@ -2247,7 +2248,7 @@ void view3d_border_zoom(void)
/* Get Z Depths, needed for perspective, nice for ortho */
bgl_get_mats(&mats);
- draw_depth(curarea, (void *)v3d);
+ draw_depth(curarea, (void *)v3d, NULL);
/* force updating */
if (v3d->depths) {
diff --git a/source/blender/src/filelist.c b/source/blender/src/filelist.c
index 589afb7f75f..c2c0f00885f 100644
--- a/source/blender/src/filelist.c
+++ b/source/blender/src/filelist.c
@@ -629,35 +629,7 @@ int BIF_filelist_empty(struct FileList* filelist)
void BIF_filelist_parent(struct FileList* filelist)
{
-#ifdef WIN32
- char c = '\\';
-#else
- char c = '/';
-#endif
- char *dir = filelist->dir;
- size_t len = strlen(dir);
-
- while( (len > 0) && (dir[len-1] == c) )
- {
- --len;
- dir[len] = '\0';
- }
- while ( (len > 0) && (dir[len-1] != c) )
- {
- --len;
- dir[len] = '\0';
- }
- if (len == 0)
- {
- dir[0] = c; dir[1] = '\0';
- }
-#ifdef WIN32
- strcat(filelist->dir, "\\");
-#else
- strcat(filelist->dir, "/");
-#endif
-
- BLI_cleanup_dir(G.sce, filelist->dir);
+ BLI_parent_dir(filelist->dir);
BLI_make_exist(filelist->dir);
BIF_filelist_readdir(filelist);
}
diff --git a/source/blender/src/filesel.c b/source/blender/src/filesel.c
index 2ba5745b19b..ee1fc523395 100644
--- a/source/blender/src/filesel.c
+++ b/source/blender/src/filesel.c
@@ -554,55 +554,17 @@ static void split_sfile(SpaceFile *sfile, char *s1)
void parent(SpaceFile *sfile)
-{
- short a;
- char *dir;
-
+{
/* if databrowse: no parent */
if(sfile->type==FILE_MAIN && filesel_has_func(sfile)) return;
-
- dir= sfile->dir;
+ BLI_parent_dir(sfile->dir);
+
+ if (sfile->type!=FILE_MAIN && (sfile->dir[0]=='\0'))
#ifdef WIN32
- if( (a = strlen(dir)) ) { /* remove all '/' at the end */
- while(dir[a-1] == '\\') {
- a--;
- dir[a] = 0;
- if (a<=0) break;
- }
- }
- if( (a = strlen(dir)) ) { /* then remove all until '/' */
- while(dir[a-1] != '\\') {
- a--;
- dir[a] = 0;
- if (a<=0) break;
- }
- }
- if( (a = strlen(dir)) ) {
- if (dir[a-1] != '\\') strcat(dir,"\\");
- }
- else if(sfile->type!=FILE_MAIN) {
- get_default_root(dir);
- }
+ get_default_root(sfile->dir);
#else
- if( (a = strlen(dir)) ) { /* remove all '/' at the end */
- while(dir[a-1] == '/') {
- a--;
- dir[a] = 0;
- if (a<=0) break;
- }
- }
- if( (a = strlen(dir)) ) { /* then remove until '/' */
- while(dir[a-1] != '/') {
- a--;
- dir[a] = 0;
- if (a<=0) break;
- }
- }
- if ( (a = strlen(dir)) ) {
- if (dir[a-1] != '/') strcat(dir,"/");
- }
- else if(sfile->type!=FILE_MAIN) strcpy(dir,"/");
+ strcpy(sfile->dir,"/");
#endif
/* to be sure */
@@ -1914,9 +1876,14 @@ void winqreadfilespace(ScrArea *sa, void *spacedata, BWinEvent *evt)
{
error("Path too long, cannot enter this directory");
} else {
- strcat(sfile->dir, sfile->filelist[act].relname);
- strcat(sfile->dir,"/");
- BLI_cleanup_dir(G.sce, sfile->dir);
+ if (strcmp(sfile->filelist[act].relname, "..")==0) {
+ /* avoids /../../ */
+ BLI_parent_dir(sfile->dir);
+ } else {
+ strcat(sfile->dir, sfile->filelist[act].relname);
+ strcat(sfile->dir,"/");
+ BLI_cleanup_dir(G.sce, sfile->dir);
+ }
freefilelist(sfile);
sfile->ofs= 0;
do_draw= 1;
@@ -2062,18 +2029,20 @@ void winqreadfilespace(ScrArea *sa, void *spacedata, BWinEvent *evt)
break;
case XKEY:
- test = get_hilited_entry(sfile);
+ if(sfile->type==FILE_BLENDER) {
+ test = get_hilited_entry(sfile);
- if (test != -1 && !(S_ISDIR(sfile->filelist[test].type))){
- BLI_make_file_string(G.sce, str, sfile->dir, sfile->filelist[test].relname);
+ if (test != -1 && !(S_ISDIR(sfile->filelist[test].type))){
+ BLI_make_file_string(G.sce, str, sfile->dir, sfile->filelist[test].relname);
- if( okee("Remove %s", str) ) {
- ret = BLI_delete(str, 0, 0);
- if (ret) {
- error("Command failed, see console");
- } else {
- freefilelist(sfile);
- do_draw= 1;
+ if( okee("Remove %s", str) ) {
+ ret = BLI_delete(str, 0, 0);
+ if (ret) {
+ error("Command failed, see console");
+ } else {
+ freefilelist(sfile);
+ do_draw= 1;
+ }
}
}
}
diff --git a/source/blender/src/fluidsim.c b/source/blender/src/fluidsim.c
index 8b9c89656fb..31cc4b81d7a 100644
--- a/source/blender/src/fluidsim.c
+++ b/source/blender/src/fluidsim.c
@@ -55,13 +55,16 @@
#include "DNA_key_types.h"
#include "BLI_blenlib.h"
+#include "BLI_threads.h"
#include "BLI_arithb.h"
#include "MTC_matrixops.h"
#include "BKE_customdata.h"
#include "BKE_displist.h"
#include "BKE_effect.h"
+#include "BKE_fluidsim.h"
#include "BKE_global.h"
+#include "BKE_modifier.h"
#include "BKE_main.h"
#include "BKE_key.h"
#include "BKE_scene.h"
@@ -84,9 +87,6 @@
#include "mydevice.h"
#include "blendef.h"
-#include "SDL.h"
-#include "SDL_thread.h"
-#include "SDL_mutex.h"
#include <sys/stat.h>
#ifdef WIN32 /* Windos */
@@ -95,15 +95,6 @@
#define snprintf _snprintf
#endif
#endif
-// SDL redefines main for SDL_main, not needed here...
-#undef main
-
-#ifdef __APPLE__ /* MacOS X */
-#undef main
-#endif
-
-// from DerivedMesh.c
-void initElbeemMesh(struct Object *ob, int *numVertices, float **vertices, int *numTriangles, int **triangles, int useGlobalCoords);
/* from header info.c */
extern int start_progress_bar(void);
@@ -128,151 +119,12 @@ char* fluidsimViscosityPresetString[6] = {
"INVALID" /* end */
};
-typedef struct {
- DerivedMesh dm;
-
- // similar to MeshDerivedMesh
- struct Object *ob; // pointer to parent object
- float *extverts, *nors; // face normals, colors?
- Mesh *fsmesh; // mesh struct to display (either surface, or original one)
- char meshFree; // free the mesh afterwards? (boolean)
-} fluidsimDerivedMesh;
-
-
-
/* enable/disable overall compilation */
#ifndef DISABLE_ELBEEM
/* ********************** fluid sim settings struct functions ********************** */
-/* allocates and initializes general main data */
-
-FluidsimSettings *fluidsimSettingsNew(struct Object *srcob)
-{
- //char blendDir[FILE_MAXDIR], blendFile[FILE_MAXFILE];
- FluidsimSettings *fss;
-
- /* this call uses derivedMesh methods... */
- if(srcob->type!=OB_MESH) return NULL;
-
- fss= MEM_callocN( sizeof(FluidsimSettings), "fluidsimsettings memory");
-
- fss->type = 0;
- fss->show_advancedoptions = 0;
-
- fss->resolutionxyz = 50;
- fss->previewresxyz = 25;
- fss->realsize = 0.03;
- fss->guiDisplayMode = 2; // preview
- fss->renderDisplayMode = 3; // render
-
- fss->viscosityMode = 2; // default to water
- fss->viscosityValue = 1.0;
- fss->viscosityExponent = 6;
- fss->gravx = 0.0;
- fss->gravy = 0.0;
- fss->gravz = -9.81;
- fss->animStart = 0.0;
- fss->animEnd = 0.30;
- fss->gstar = 0.005; // used as normgstar
- fss->maxRefine = -1;
- // maxRefine is set according to resolutionxyz during bake
-
- // fluid/inflow settings
- fss->iniVelx =
- fss->iniVely =
- fss->iniVelz = 0.0;
-
- /* elubie: changed this to default to the same dir as the render output
- to prevent saving to C:\ on Windows */
- BLI_strncpy(fss->surfdataPath, btempdir, FILE_MAX);
- fss->orgMesh = (Mesh *)srcob->data;
- fss->meshSurface = NULL;
- fss->meshBB = NULL;
- fss->meshSurfNormals = NULL;
-
- // first init of bounding box
- fss->bbStart[0] = 0.0;
- fss->bbStart[1] = 0.0;
- fss->bbStart[2] = 0.0;
- fss->bbSize[0] = 1.0;
- fss->bbSize[1] = 1.0;
- fss->bbSize[2] = 1.0;
- fluidsimGetAxisAlignedBB(srcob->data, srcob->obmat, fss->bbStart, fss->bbSize, &fss->meshBB);
-
- // todo - reuse default init from elbeem!
- fss->typeFlags = 0;
- fss->domainNovecgen = 0;
- fss->volumeInitType = 1; // volume
- fss->partSlipValue = 0.0;
-
- fss->generateTracers = 0;
- fss->generateParticles = 0.0;
- fss->surfaceSmoothing = 1.0;
- fss->surfaceSubdivs = 1.0;
- fss->particleInfSize = 0.0;
- fss->particleInfAlpha = 0.0;
-
- return fss;
-}
-
-/* duplicate struct, analogous to free */
-static Mesh *fluidsimCopyMesh(Mesh *me)
-{
- Mesh *dup = MEM_dupallocN(me);
-
- CustomData_copy(&me->vdata, &dup->vdata, CD_MASK_MESH, CD_DUPLICATE, me->totvert);
- CustomData_copy(&me->edata, &dup->edata, CD_MASK_MESH, CD_DUPLICATE, me->totedge);
- CustomData_copy(&me->fdata, &dup->fdata, CD_MASK_MESH, CD_DUPLICATE, me->totface);
-
- return dup;
-}
-
-FluidsimSettings* fluidsimSettingsCopy(FluidsimSettings *fss)
-{
- FluidsimSettings *dupfss;
-
- if(!fss) return NULL;
- dupfss = MEM_dupallocN(fss);
-
- if(fss->meshSurface)
- dupfss->meshSurface = fluidsimCopyMesh(fss->meshSurface);
- if(fss->meshBB)
- dupfss->meshBB = fluidsimCopyMesh(fss->meshBB);
-
- if(fss->meshSurfNormals) dupfss->meshSurfNormals = MEM_dupallocN(fss->meshSurfNormals);
-
- return dupfss;
-}
-
-/* free struct */
-static void fluidsimFreeMesh(Mesh *me)
-{
- CustomData_free(&me->vdata, me->totvert);
- CustomData_free(&me->edata, me->totedge);
- CustomData_free(&me->fdata, me->totface);
-
- MEM_freeN(me);
-}
-
-void fluidsimSettingsFree(FluidsimSettings *fss)
-{
- if(fss->meshSurface) {
- fluidsimFreeMesh(fss->meshSurface);
- fss->meshSurface = NULL;
- }
- if(fss->meshBB) {
- fluidsimFreeMesh(fss->meshBB);
- fss->meshBB = NULL;
- }
-
- if(fss->meshSurfNormals){ MEM_freeN(fss->meshSurfNormals); fss->meshSurfNormals=NULL; }
-
- MEM_freeN(fss);
-}
-
-
/* helper function */
void fluidsimGetGeometryObjFilename(struct Object *ob, char *dst) { //, char *srcname) {
//snprintf(dst,FILE_MAXFILE, "%s_cfgdata_%s.bobj.gz", srcname, ob->id.name);
@@ -306,6 +158,10 @@ void fluidsimGetGeometryObjFilename(struct Object *ob, char *dst) { //, char *sr
FS_FREE_ONECHANNEL(channelObjMove[i][2],"channelObjMove2"); \
FS_FREE_ONECHANNEL(channelObjInivel[i],"channelObjInivel"); \
FS_FREE_ONECHANNEL(channelObjActive[i],"channelObjActive"); \
+ FS_FREE_ONECHANNEL(channelAttractforceStrength[i],"channelAttractforceStrength"); \
+ FS_FREE_ONECHANNEL(channelAttractforceRadius[i],"channelAttractforceRadius"); \
+ FS_FREE_ONECHANNEL(channelVelocityforceStrength[i],"channelVelocityforceStrength"); \
+ FS_FREE_ONECHANNEL(channelVelocityforceRadius[i],"channelVelocityforceRadius"); \
} \
} // end FS FREE CHANNELS
@@ -387,7 +243,7 @@ static void fluidsimInitChannel(float **setchannel, int size, float *time,
*setchannel = channel;
}
-static void fluidsimInitMeshChannel(float **setchannel, int size, Object *obm, int vertices, float *time) {
+static void fluidsimInitMeshChannel(float **setchannel, int size, Object *obm, int vertices, float *time, int modifierIndex) {
float *channel = NULL;
int mallsize = size* (3*vertices+1);
int frame,i;
@@ -403,7 +259,7 @@ static void fluidsimInitMeshChannel(float **setchannel, int size, Object *obm, i
G.scene->r.cfra = frame;
scene_update_for_newframe(G.scene, G.scene->lay);
- initElbeemMesh(obm, &numVerts, &verts, &numTris, &tris, 1);
+ initElbeemMesh(obm, &numVerts, &verts, &numTris, &tris, 1, modifierIndex);
//fprintf(stderr,"\nfluidsimInitMeshChannel frame%d verts%d/%d \n\n",frame,vertices,numVerts);
for(i=0; i<3*vertices;i++) {
channel[(frame-1)*setsize + i] = verts[i];
@@ -423,9 +279,9 @@ static void fluidsimInitMeshChannel(float **setchannel, int size, Object *obm, i
/* ********************** simulation thread ************************* */
/* ******************************************************************************** */
-SDL_mutex *globalBakeLock=NULL;
-int globalBakeState = 0; // 0 everything ok, -1 abort simulation, -2 sim error, 1 sim done
-int globalBakeFrame = 0;
+static volatile int globalBakeState = 0; // 0 everything ok, -1 abort simulation, -2 sim error, 1 sim done
+static volatile int globalBakeFrame = 0;
+static volatile int g_break= 0;
// run simulation in seperate thread
static int fluidsimSimulateThread(void *unused) { // *ptr) {
@@ -433,7 +289,7 @@ static int fluidsimSimulateThread(void *unused) { // *ptr) {
int ret=0;
ret = elbeemSimulate();
- SDL_mutexP(globalBakeLock);
+ BLI_lock_thread(LOCK_CUSTOM1);
if(globalBakeState==0) {
if(ret==0) {
// if no error, set to normal exit
@@ -443,29 +299,31 @@ static int fluidsimSimulateThread(void *unused) { // *ptr) {
globalBakeState = -2;
}
}
- SDL_mutexV(globalBakeLock);
- return ret;
+ BLI_unlock_thread(LOCK_CUSTOM1);
+ return NULL;
}
int runSimulationCallback(void *data, int status, int frame) {
//elbeemSimulationSettings *settings = (elbeemSimulationSettings*)data;
//printf("elbeem blender cb s%d, f%d, domainid:%d \n", status,frame, settings->domainId ); // DEBUG
-
- if(!globalBakeLock) return FLUIDSIM_CBRET_ABORT;
+ int state = 0;
if(status==FLUIDSIM_CBSTATUS_NEWFRAME) {
- SDL_mutexP(globalBakeLock);
+ BLI_lock_thread(LOCK_CUSTOM1);
globalBakeFrame = frame-1;
- SDL_mutexV(globalBakeLock);
+ BLI_unlock_thread(LOCK_CUSTOM1);
}
//if((frameCounter==3) && (!frameStop)) { frameStop=1; return 1; }
- SDL_mutexP(globalBakeLock);
- if(globalBakeState!=0) {
+ BLI_lock_thread(LOCK_CUSTOM1);
+ state = globalBakeState;
+ BLI_unlock_thread(LOCK_CUSTOM1);
+
+ if(state!=0) {
return FLUIDSIM_CBRET_ABORT;
}
- SDL_mutexV(globalBakeLock);
+
return FLUIDSIM_CBRET_CONTINUE;
}
@@ -524,6 +382,14 @@ void fluidsimBake(struct Object *ob)
float *channelObjInivel[256]; // initial velocities
float *channelObjActive[256]; // obj active channel
+ /* fluid control channels */
+ float *channelAttractforceStrength[256];
+ float *channelAttractforceRadius[256];
+ float *channelVelocityforceStrength[256];
+ float *channelVelocityforceRadius[256];
+ FluidsimModifierData *fluidmd = NULL;
+ Mesh *mesh = NULL;
+
if(getenv(strEnvName)) {
int dlevel = atoi(getenv(strEnvName));
elbeemSetDebugLevel(dlevel);
@@ -547,12 +413,16 @@ void fluidsimBake(struct Object *ob)
/* no object pointer, find in selected ones.. */
if(!ob) {
for(base=G.scene->base.first; base; base= base->next) {
- if ( ((base)->flag & SELECT)
- // ignore layer setting for now? && ((base)->lay & G.vd->lay)
- ) {
- if((!ob)&&(base->object->fluidsimFlag & OB_FLUIDSIM_ENABLE)&&(base->object->type==OB_MESH)) {
- if(base->object->fluidsimSettings->type == OB_FLUIDSIM_DOMAIN) {
+ if ((base)->flag & SELECT)
+ {
+ FluidsimModifierData *fluidmdtmp = (FluidsimModifierData *)modifiers_findByType(base->object, eModifierType_Fluidsim);
+
+ if(fluidmdtmp && (base->object->type==OB_MESH))
+ {
+ if(fluidmdtmp->fss->type == OB_FLUIDSIM_DOMAIN)
+ {
ob = base->object;
+ break;
}
}
}
@@ -560,15 +430,17 @@ void fluidsimBake(struct Object *ob)
// no domains found?
if(!ob) return;
}
-
+
channelObjCount = 0;
- for(base=G.scene->base.first; base; base= base->next) {
+ for(base=G.scene->base.first; base; base= base->next)
+ {
+ FluidsimModifierData *fluidmdtmp = (FluidsimModifierData *)modifiers_findByType(base->object, eModifierType_Fluidsim);
obit = base->object;
- //{ snprintf(debugStrBuffer,256,"DEBUG object name=%s, type=%d ...\n", obit->id.name, obit->type); elbeemDebugOut(debugStrBuffer); } // DEBUG
- if( (obit->fluidsimFlag & OB_FLUIDSIM_ENABLE) &&
- (obit->type==OB_MESH) &&
- (obit->fluidsimSettings->type != OB_FLUIDSIM_DOMAIN) && // if has to match 3 places! // CHECKMATCH
- (obit->fluidsimSettings->type != OB_FLUIDSIM_PARTICLE) ) {
+ if( fluidmdtmp &&
+ (obit->type==OB_MESH) &&
+ (fluidmdtmp->fss->type != OB_FLUIDSIM_DOMAIN) && // if has to match 3 places! // CHECKMATCH
+ (fluidmdtmp->fss->type != OB_FLUIDSIM_PARTICLE) )
+ {
channelObjCount++;
}
}
@@ -579,23 +451,57 @@ void fluidsimBake(struct Object *ob)
}
/* check if there's another domain... */
- for(base=G.scene->base.first; base; base= base->next) {
+ for(base=G.scene->base.first; base; base= base->next)
+ {
+ FluidsimModifierData *fluidmdtmp = (FluidsimModifierData *)modifiers_findByType(base->object, eModifierType_Fluidsim);
obit = base->object;
- if((obit->fluidsimFlag & OB_FLUIDSIM_ENABLE)&&(obit->type==OB_MESH)) {
- if(obit->fluidsimSettings->type == OB_FLUIDSIM_DOMAIN) {
- if(obit != ob) {
- //snprintf(debugStrBuffer,256,"fluidsimBake::warning - More than one domain!\n"); elbeemDebugOut(debugStrBuffer);
+ if( fluidmdtmp &&(obit->type==OB_MESH))
+ {
+ if(fluidmdtmp->fss->type == OB_FLUIDSIM_DOMAIN)
+ {
+ if(obit != ob)
+ {
pupmenu("Fluidsim Bake Error%t|There should be only one domain object! Aborted%x0");
return;
}
}
}
}
+
+ // check if theres any fluid
+ // abort baking if not...
+ for(base=G.scene->base.first; base; base= base->next)
+ {
+ FluidsimModifierData *fluidmdtmp = (FluidsimModifierData *)modifiers_findByType(base->object, eModifierType_Fluidsim);
+ obit = base->object;
+ if( fluidmdtmp &&
+ (obit->type==OB_MESH) &&
+ ((fluidmdtmp->fss->type == OB_FLUIDSIM_FLUID) ||
+ (fluidmdtmp->fss->type == OB_FLUIDSIM_INFLOW) ))
+ {
+ haveSomeFluid = 1;
+ break;
+ }
+ }
+ if(!haveSomeFluid) {
+ pupmenu("Fluidsim Bake Error%t|No fluid objects in scene... Aborted%x0");
+ return;
+ }
+
/* these both have to be valid, otherwise we wouldnt be here */
/* dont use ob here after...*/
fsDomain = ob;
- domainSettings = ob->fluidsimSettings;
+ fluidmd = (FluidsimModifierData *)modifiers_findByType(ob, eModifierType_Fluidsim);
+ domainSettings = fluidmd->fss;
ob = NULL;
+ mesh = fsDomain->data;
+
+ // calculate bounding box
+ fluid_get_bb(mesh->mvert, mesh->totvert, fsDomain->obmat, domainSettings->bbStart, domainSettings->bbSize);
+
+ // reset last valid frame
+ domainSettings->lastgoodframe = -1;
+
/* rough check of settings... */
if(domainSettings->previewresxyz > domainSettings->resolutionxyz) {
snprintf(debugStrBuffer,256,"fluidsimBake::warning - Preview (%d) >= Resolution (%d)... setting equal.\n", domainSettings->previewresxyz , domainSettings->resolutionxyz);
@@ -620,23 +526,6 @@ void fluidsimBake(struct Object *ob)
}
snprintf(debugStrBuffer,256,"fluidsimBake::msg: Baking %s, refine: %d\n", fsDomain->id.name , gridlevels );
elbeemDebugOut(debugStrBuffer);
-
- // check if theres any fluid
- // abort baking if not...
- for(base=G.scene->base.first; base; base= base->next) {
- obit = base->object;
- if( (obit->fluidsimFlag & OB_FLUIDSIM_ENABLE) &&
- (obit->type==OB_MESH) && (
- (obit->fluidsimSettings->type == OB_FLUIDSIM_FLUID) ||
- (obit->fluidsimSettings->type == OB_FLUIDSIM_INFLOW) )
- ) {
- haveSomeFluid = 1;
- }
- }
- if(!haveSomeFluid) {
- pupmenu("Fluidsim Bake Error%t|No fluid objects in scene... Aborted%x0");
- return;
- }
// prepare names...
strncpy(targetDir, domainSettings->surfdataPath, FILE_MAXDIR);
@@ -700,14 +589,18 @@ void fluidsimBake(struct Object *ob)
// dump data for start frame
// CHECK more reasonable to number frames according to blender?
// dump data for frame 0
- G.scene->r.cfra = startFrame;
- scene_update_for_newframe(G.scene, G.scene->lay);
+ G.scene->r.cfra = startFrame;
+ scene_update_for_newframe(G.scene, G.scene->lay);
// init common export vars for both file export and run
for(i=0; i<256; i++) {
channelObjMove[i][0] = channelObjMove[i][1] = channelObjMove[i][2] = NULL;
channelObjInivel[i] = NULL;
channelObjActive[i] = NULL;
+ channelAttractforceStrength[i] = NULL;
+ channelAttractforceRadius[i] = NULL;
+ channelVelocityforceStrength[i] = NULL;
+ channelVelocityforceRadius[i] = NULL;
}
allchannelSize = G.scene->r.efra; // always use till last frame
aniFrameTime = (domainSettings->animEnd - domainSettings->animStart)/(double)noFrames;
@@ -720,9 +613,8 @@ void fluidsimBake(struct Object *ob)
calcViscosity = fluidsimViscosityPreset[ domainSettings->viscosityMode ];
}
- bbStart = fsDomain->fluidsimSettings->bbStart;
- bbSize = fsDomain->fluidsimSettings->bbSize;
- fluidsimGetAxisAlignedBB(fsDomain->data, fsDomain->obmat, bbStart, bbSize, &domainSettings->meshBB);
+ bbStart = domainSettings->bbStart;
+ bbSize = domainSettings->bbSize;
// always init
{ int timeIcu[1] = { FLUIDSIM_TIME };
@@ -768,13 +660,15 @@ void fluidsimBake(struct Object *ob)
// init obj movement channels
channelObjCount=0;
- for(base=G.scene->base.first; base; base= base->next) {
+ for(base=G.scene->base.first; base; base= base->next)
+ {
+ FluidsimModifierData *fluidmdtmp = (FluidsimModifierData *)modifiers_findByType(base->object, eModifierType_Fluidsim);
obit = base->object;
- //{ snprintf(debugStrBuffer,256,"DEBUG object name=%s, type=%d ...\n", obit->id.name, obit->type); elbeemDebugOut(debugStrBuffer); } // DEBUG
- if( (obit->fluidsimFlag & OB_FLUIDSIM_ENABLE) &&
- (obit->type==OB_MESH) &&
- (obit->fluidsimSettings->type != OB_FLUIDSIM_DOMAIN) && // if has to match 3 places! // CHECKMATCH
- (obit->fluidsimSettings->type != OB_FLUIDSIM_PARTICLE) ) {
+
+ if( fluidmdtmp &&
+ (obit->type==OB_MESH) &&
+ (fluidmdtmp->fss->type != OB_FLUIDSIM_DOMAIN) && // if has to match 3 places! // CHECKMATCH
+ (fluidmdtmp->fss->type != OB_FLUIDSIM_PARTICLE) ) {
// cant use fluidsimInitChannel for obj channels right now, due
// to the special DXXX channels, and the rotation specialities
@@ -801,9 +695,9 @@ void fluidsimBake(struct Object *ob)
int activeIcu[1] = { FLUIDSIM_ACTIVE };
float activeDefs[1] = { 1 }; // default to on
- inivelDefs[0] = obit->fluidsimSettings->iniVelx;
- inivelDefs[1] = obit->fluidsimSettings->iniVely;
- inivelDefs[2] = obit->fluidsimSettings->iniVelz;
+ inivelDefs[0] = fluidmdtmp->fss->iniVelx;
+ inivelDefs[1] = fluidmdtmp->fss->iniVely;
+ inivelDefs[2] = fluidmdtmp->fss->iniVelz;
// check & init loc,rot,size
for(j=0; j<3; j++) {
@@ -872,9 +766,32 @@ void fluidsimBake(struct Object *ob)
channelObjMove[o][j][(i-1)*4 + 3] = timeAtFrame[i];
}
}
-
- fluidsimInitChannel( &channelObjInivel[o], allchannelSize, timeAtFrame, inivelIcu,inivelDefs, obit->fluidsimSettings->ipo, CHANNEL_VEC );
- fluidsimInitChannel( &channelObjActive[o], allchannelSize, timeAtFrame, activeIcu,activeDefs, obit->fluidsimSettings->ipo, CHANNEL_FLOAT );
+
+ {
+ int attrFSIcu[1] = { FLUIDSIM_ATTR_FORCE_STR };
+ int attrFRIcu[1] = { FLUIDSIM_ATTR_FORCE_RADIUS };
+ int velFSIcu[1] = { FLUIDSIM_VEL_FORCE_STR };
+ int velFRIcu[1] = { FLUIDSIM_VEL_FORCE_RADIUS };
+
+ float attrFSDefs[1];
+ float attrFRDefs[1];
+ float velFSDefs[1];
+ float velFRDefs[1];
+
+ attrFSDefs[0] = fluidmdtmp->fss->attractforceStrength;
+ attrFRDefs[0] = fluidmdtmp->fss->attractforceRadius;
+ velFSDefs[0] = fluidmdtmp->fss->velocityforceStrength;
+ velFRDefs[0] = fluidmdtmp->fss->velocityforceRadius;
+
+ fluidsimInitChannel( &channelAttractforceStrength[o], allchannelSize, timeAtFrame, attrFSIcu,attrFSDefs, fluidmdtmp->fss->ipo, CHANNEL_FLOAT );
+ fluidsimInitChannel( &channelAttractforceRadius[o], allchannelSize, timeAtFrame, attrFRIcu,attrFRDefs, fluidmdtmp->fss->ipo, CHANNEL_FLOAT );
+ fluidsimInitChannel( &channelVelocityforceStrength[o], allchannelSize, timeAtFrame, velFSIcu,velFSDefs, fluidmdtmp->fss->ipo, CHANNEL_FLOAT );
+ fluidsimInitChannel( &channelVelocityforceRadius[o], allchannelSize, timeAtFrame, velFRIcu,velFRDefs, fluidmdtmp->fss->ipo, CHANNEL_FLOAT );
+ }
+
+ fluidsimInitChannel( &channelObjInivel[o], allchannelSize, timeAtFrame, inivelIcu,inivelDefs, fluidmdtmp->fss->ipo, CHANNEL_VEC );
+ fluidsimInitChannel( &channelObjActive[o], allchannelSize, timeAtFrame, activeIcu,activeDefs, fluidmdtmp->fss->ipo, CHANNEL_FLOAT );
+
channelObjCount++;
@@ -903,9 +820,9 @@ void fluidsimBake(struct Object *ob)
}
if(!doExportOnly) {
- SDL_Thread *simthr = NULL;
+ ListBase threads;
- // perform simulation with El'Beem api and SDL threads
+ // perform simulation with El'Beem api and threads
elbeemSimulationSettings fsset;
elbeemResetSettings(&fsset);
fsset.version = 1;
@@ -913,6 +830,7 @@ void fluidsimBake(struct Object *ob)
// setup global settings
for(i=0 ; i<3; i++) fsset.geoStart[i] = bbStart[i];
for(i=0 ; i<3; i++) fsset.geoSize[i] = bbSize[i];
+
// simulate with 50^3
fsset.resolutionxyz = (int)domainSettings->resolutionxyz;
fsset.previewresxyz = (int)domainSettings->previewresxyz;
@@ -926,7 +844,7 @@ void fluidsimBake(struct Object *ob)
// simulate 5 frames, each 0.03 seconds, output to ./apitest_XXX.bobj.gz
fsset.animStart = domainSettings->animStart;
fsset.aniFrameTime = aniFrameTime;
- fsset.noOfFrames = noFrames - 1; // is otherwise subtracted in parser
+ fsset.noOfFrames = noFrames; // is otherwise subtracted in parser
strcpy(targetFile, targetDir);
strcat(targetFile, suffixSurface);
// defaults for compressibility and adaptive grids
@@ -973,26 +891,29 @@ void fluidsimBake(struct Object *ob)
// init objects
channelObjCount = 0;
for(base=G.scene->base.first; base; base= base->next) {
+ FluidsimModifierData *fluidmdtmp = (FluidsimModifierData *)modifiers_findByType(base->object, eModifierType_Fluidsim);
obit = base->object;
//{ snprintf(debugStrBuffer,256,"DEBUG object name=%s, type=%d ...\n", obit->id.name, obit->type); elbeemDebugOut(debugStrBuffer); } // DEBUG
- if( (obit->fluidsimFlag & OB_FLUIDSIM_ENABLE) && // if has to match 3 places! // CHECKMATCH
- (obit->type==OB_MESH) &&
- (obit->fluidsimSettings->type != OB_FLUIDSIM_DOMAIN) &&
- (obit->fluidsimSettings->type != OB_FLUIDSIM_PARTICLE)
- ) {
+ if( fluidmdtmp && // if has to match 3 places! // CHECKMATCH
+ (obit->type==OB_MESH) &&
+ (fluidmdtmp->fss->type != OB_FLUIDSIM_DOMAIN) &&
+ (fluidmdtmp->fss->type != OB_FLUIDSIM_PARTICLE))
+ {
float *verts=NULL;
int *tris=NULL;
int numVerts=0, numTris=0;
int o = channelObjCount;
- int deform = (obit->fluidsimSettings->domainNovecgen); // misused value
+ int deform = (fluidmdtmp->fss->domainNovecgen); // misused value
// todo - use blenderInitElbeemMesh
+ int modifierIndex = modifiers_indexInObject(obit, (ModifierData *)fluidmdtmp);
+
elbeemMesh fsmesh;
elbeemResetMesh( &fsmesh );
- fsmesh.type = obit->fluidsimSettings->type;;
+ fsmesh.type = fluidmdtmp->fss->type;
// get name of object for debugging solver
fsmesh.name = obit->id.name;
- initElbeemMesh(obit, &numVerts, &verts, &numTris, &tris, 0);
+ initElbeemMesh(obit, &numVerts, &verts, &numTris, &tris, 0, modifierIndex);
fsmesh.numVertices = numVerts;
fsmesh.numTriangles = numTris;
fsmesh.vertices = verts;
@@ -1009,22 +930,51 @@ void fluidsimBake(struct Object *ob)
fsmesh.channelScale = channelObjMove[o][2];
fsmesh.channelActive = channelObjActive[o];
if( (fsmesh.type == OB_FLUIDSIM_FLUID) ||
- (fsmesh.type == OB_FLUIDSIM_INFLOW) ) {
+ (fsmesh.type == OB_FLUIDSIM_INFLOW)) {
fsmesh.channelInitialVel = channelObjInivel[o];
- fsmesh.localInivelCoords = ((obit->fluidsimSettings->typeFlags&OB_FSINFLOW_LOCALCOORD)?1:0);
+ fsmesh.localInivelCoords = ((fluidmdtmp->fss->typeFlags&OB_FSINFLOW_LOCALCOORD)?1:0);
}
- if( (obit->fluidsimSettings->typeFlags&OB_FSBND_NOSLIP)) fsmesh.obstacleType = FLUIDSIM_OBSTACLE_NOSLIP;
- else if((obit->fluidsimSettings->typeFlags&OB_FSBND_PARTSLIP)) fsmesh.obstacleType = FLUIDSIM_OBSTACLE_PARTSLIP;
- else if((obit->fluidsimSettings->typeFlags&OB_FSBND_FREESLIP)) fsmesh.obstacleType = FLUIDSIM_OBSTACLE_FREESLIP;
- fsmesh.obstaclePartslip = obit->fluidsimSettings->partSlipValue;
- fsmesh.volumeInitType = obit->fluidsimSettings->volumeInitType;
- fsmesh.obstacleImpactFactor = obit->fluidsimSettings->surfaceSmoothing; // misused value
+ if( (fluidmdtmp->fss->typeFlags&OB_FSBND_NOSLIP)) fsmesh.obstacleType = FLUIDSIM_OBSTACLE_NOSLIP;
+ else if((fluidmdtmp->fss->typeFlags&OB_FSBND_PARTSLIP)) fsmesh.obstacleType = FLUIDSIM_OBSTACLE_PARTSLIP;
+ else if((fluidmdtmp->fss->typeFlags&OB_FSBND_FREESLIP)) fsmesh.obstacleType = FLUIDSIM_OBSTACLE_FREESLIP;
+ fsmesh.obstaclePartslip = fluidmdtmp->fss->partSlipValue;
+ fsmesh.volumeInitType = fluidmdtmp->fss->volumeInitType;
+ fsmesh.obstacleImpactFactor = fluidmdtmp->fss->surfaceSmoothing; // misused value
+
+ if(fsmesh.type == OB_FLUIDSIM_CONTROL)
+ {
+ // control fluids will get exported as whole
+ deform = 1;
+
+ fsmesh.cpsTimeStart = fluidmdtmp->fss->cpsTimeStart;
+ fsmesh.cpsTimeEnd = fluidmdtmp->fss->cpsTimeEnd;
+ fsmesh.cpsQuality = fluidmdtmp->fss->cpsQuality;
+ fsmesh.obstacleType = (fluidmdtmp->fss->flag & OB_FLUIDSIM_REVERSE);
+
+ fsmesh.channelSizeAttractforceRadius =
+ fsmesh.channelSizeVelocityforceStrength =
+ fsmesh.channelSizeVelocityforceRadius =
+ fsmesh.channelSizeAttractforceStrength = allchannelSize;
+
+ fsmesh.channelAttractforceStrength = channelAttractforceStrength[o];
+ fsmesh.channelAttractforceRadius = channelAttractforceRadius[o];
+ fsmesh.channelVelocityforceStrength = channelVelocityforceStrength[o];
+ fsmesh.channelVelocityforceRadius = channelVelocityforceRadius[o];
+ }
+ else
+ {
+ // set channels to 0
+ fsmesh.channelAttractforceStrength =
+ fsmesh.channelAttractforceRadius =
+ fsmesh.channelVelocityforceStrength =
+ fsmesh.channelVelocityforceRadius = NULL;
+ }
// animated meshes
if(deform) {
fsmesh.channelSizeVertices = allchannelSize;
- fluidsimInitMeshChannel( &fsmesh.channelVertices, allchannelSize, obit, numVerts, timeAtFrame);
+ fluidsimInitMeshChannel( &fsmesh.channelVertices, allchannelSize, obit, numVerts, timeAtFrame, modifierIndex);
G.scene->r.cfra = startFrame;
scene_update_for_newframe(G.scene, G.scene->lay);
// remove channels
@@ -1044,18 +994,13 @@ void fluidsimBake(struct Object *ob)
//domainSettings->type = OB_FLUIDSIM_DOMAIN; // enable for bake display again
//fsDomain->fluidsimFlag = OB_FLUIDSIM_ENABLE; // disable during bake
- globalBakeLock = SDL_CreateMutex();
// set to neutral, -1 means user abort, -2 means init error
globalBakeState = 0;
globalBakeFrame = 0;
- simthr = SDL_CreateThread(fluidsimSimulateThread, targetFile);
-
- if(!simthr) {
- snprintf(debugStrBuffer,256,"fluidsimBake::error: Unable to create thread... running without one.\n");
- elbeemDebugOut(debugStrBuffer);
- set_timecursor(0);
- elbeemSimulate();
- } else {
+ BLI_init_threads(&threads, fluidsimSimulateThread, 1);
+ BLI_insert_thread(&threads, targetFile);
+
+ {
int done = 0;
unsigned short event=0;
short val;
@@ -1063,9 +1008,12 @@ void fluidsimBake(struct Object *ob)
float percentdone = 0.0;
int lastRedraw = -1;
+ g_break= 0;
+ G.afbreek= 0; /* blender_test_break uses this global */
+
start_progress_bar();
- while(done==0) {
+ while(done==0) {
char busy_mess[80];
waitcursor(1);
@@ -1075,21 +1023,29 @@ void fluidsimBake(struct Object *ob)
sprintf(busy_mess, "baking fluids %d / %d |||", globalBakeFrame, (int) noFramesf);
progress_bar(percentdone, busy_mess );
- SDL_Delay(2000); // longer delay to prevent frequent redrawing
- SDL_mutexP(globalBakeLock);
+ // longer delay to prevent frequent redrawing
+ PIL_sleep_ms(2000);
+
+ BLI_lock_thread(LOCK_CUSTOM1);
if(globalBakeState != 0) done = 1; // 1=ok, <0=error/abort
- SDL_mutexV(globalBakeLock);
+ BLI_unlock_thread(LOCK_CUSTOM1);
- while(qtest()) {
- event = extern_qread(&val);
- if(event == ESCKEY) {
+ if (!G.background) {
+ g_break= blender_test_break();
+
+ if(g_break)
+ {
// abort...
- SDL_mutexP(globalBakeLock);
+ BLI_lock_thread(LOCK_CUSTOM1);
+
+ if(domainSettings)
+ domainSettings->lastgoodframe = startFrame+globalBakeFrame;
+
done = -1;
globalBakeFrame = 0;
globalBakeState = -1;
simAborted = 1;
- SDL_mutexV(globalBakeLock);
+ BLI_unlock_thread(LOCK_CUSTOM1);
break;
}
}
@@ -1108,11 +1064,9 @@ void fluidsimBake(struct Object *ob)
screen_swapbuffers();
} // redraw
}
- SDL_WaitThread(simthr,NULL);
end_progress_bar();
}
- SDL_DestroyMutex(globalBakeLock);
- globalBakeLock = NULL;
+ BLI_end_threads(&threads);
} // El'Beem API init, thread creation
// --------------------------------------------------------------------------------------------
else
@@ -1125,6 +1079,13 @@ void fluidsimBake(struct Object *ob)
// go back to "current" blender time
waitcursor(0);
+
+ if(globalBakeState >= 0)
+ {
+ if(domainSettings)
+ domainSettings->lastgoodframe = startFrame+globalBakeFrame;
+ }
+
G.scene->r.cfra = origFrame;
scene_update_for_newframe(G.scene, G.scene->lay);
allqueue(REDRAWVIEW3D, 0);
@@ -1145,6 +1106,8 @@ void fluidsimBake(struct Object *ob)
pupmenu(fsmessage);
} // init error
}
+
+ // elbeemFree();
}
void fluidsimFreeBake(struct Object *ob)
diff --git a/source/blender/src/glutil.c b/source/blender/src/glutil.c
index c4a7b32bf8c..69a44aff1e4 100644
--- a/source/blender/src/glutil.c
+++ b/source/blender/src/glutil.c
@@ -292,15 +292,63 @@ static int get_cached_work_texture(int *w_r, int *h_r)
void glaDrawPixelsTex(float x, float y, int img_w, int img_h, int format, void *rect)
{
- unsigned char *uc_rect= (unsigned char*) rect;
- float *f_rect= (float *)rect;
- float xzoom= glaGetOneFloat(GL_ZOOM_X), yzoom= glaGetOneFloat(GL_ZOOM_Y);
- int ltexid= glaGetOneInteger(GL_TEXTURE_2D);
- int lrowlength= glaGetOneInteger(GL_UNPACK_ROW_LENGTH);
- int subpart_x, subpart_y, tex_w, tex_h;
- int texid= get_cached_work_texture(&tex_w, &tex_h);
- int nsubparts_x= (img_w+(tex_w-1))/tex_w;
- int nsubparts_y= (img_h+(tex_h-1))/tex_h;
+ float *f_rect;
+ float xzoom, yzoom;
+ unsigned char *uc_rect;
+ int ltexid, lrowlength, texid, tex_w, tex_h;
+ int subpart_x, subpart_y, nsubparts_x, nsubparts_y;
+
+ uc_rect= (unsigned char*) rect;
+ f_rect= (float *)rect;
+
+#ifdef __APPLE__
+ /* On Nvidia, Mac OS X 10.5 this function doesn't work correct and
+ * can crash even, use glDrawPixels instead of textures then */
+ if(is_a_really_crappy_nvidia_card()) {
+ float col[4], modcol[4];
+ unsigned char *srect = rect;
+ int a;
+
+ /* modulate with current color */
+ glGetFloatv(GL_CURRENT_COLOR, col);
+ if(col[0]!=1.0f || col[1]!=1.0f ||col[2]!=1.0f ||col[3]!=1.0f) {
+ srect = MEM_callocN(4*img_w*img_h, "glDrawPixelsTexSafe");
+ for(a=0; a<img_w*img_h*4; a+=4) {
+ if(format == GL_FLOAT) {
+ modcol[0]= col[0]*f_rect[a];
+ modcol[1]= col[1]*f_rect[a+1];
+ modcol[2]= col[2]*f_rect[a+2];
+ modcol[3]= col[3]*f_rect[a+3];
+ }
+ else {
+ modcol[0]= col[0]*uc_rect[a]*(1.0f/255.0f);
+ modcol[1]= col[1]*uc_rect[a+1]*(1.0f/255.0f);
+ modcol[2]= col[2]*uc_rect[a+2]*(1.0f/255.0f);
+ modcol[3]= col[3]*uc_rect[a+3]*(1.0f/255.0f);
+ }
+
+ srect[a]= FTOCHAR(modcol[0]);
+ srect[a+1]= FTOCHAR(modcol[1]);
+ srect[a+2]= FTOCHAR(modcol[2]);
+ srect[a+3]= FTOCHAR(modcol[3]);
+ }
+ }
+
+ glaDrawPixelsSafe(x, y, img_w, img_h, img_w, GL_RGBA, format, srect);
+
+ if(srect != rect)
+ MEM_freeN(srect);
+
+ return;
+ }
+#endif
+
+ xzoom= glaGetOneFloat(GL_ZOOM_X), yzoom= glaGetOneFloat(GL_ZOOM_Y);
+ ltexid= glaGetOneInteger(GL_TEXTURE_2D);
+ lrowlength= glaGetOneInteger(GL_UNPACK_ROW_LENGTH);
+ texid= get_cached_work_texture(&tex_w, &tex_h);
+ nsubparts_x= (img_w+(tex_w-1))/tex_w;
+ nsubparts_y= (img_h+(tex_h-1))/tex_h;
/* Specify the color outside this function, and tex will modulate it.
* This is useful for changing alpha without using glPixelTransferf()
@@ -348,7 +396,6 @@ void glaDrawPixelsTex(float x, float y, int img_w, int img_h, int format, void *
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
}
-#define FTOCHAR(val) val<=0.0f?0: (val>=1.0f?255: (char)(255.0f*val))
void glaDrawPixelsSafe_to32(float fx, float fy, int img_w, int img_h, int row_w, float *rectf)
{
float *rf;
@@ -717,6 +764,17 @@ int is_a_really_crappy_intel_card(void)
return well_is_it;
}
+int is_a_really_crappy_nvidia_card(void)
+{
+ static int well_is_it= -1;
+
+ /* Do you understand the implication? Do you? */
+ if (well_is_it==-1)
+ well_is_it= (strcmp((char*) glGetString(GL_VENDOR), "NVIDIA Corporation") == 0);
+
+ return well_is_it;
+}
+
void bglFlush(void)
{
glFlush();
diff --git a/source/blender/src/gpencil.c b/source/blender/src/gpencil.c
index eef21323a44..b9488d20200 100644
--- a/source/blender/src/gpencil.c
+++ b/source/blender/src/gpencil.c
@@ -39,11 +39,17 @@
#include "BMF_Api.h"
+#include "IMB_imbuf.h"
+#include "IMB_imbuf_types.h"
+
#include "BLI_arithb.h"
#include "BLI_blenlib.h"
#include "DNA_listBase.h"
+#include "DNA_armature_types.h"
+#include "DNA_curve_types.h"
#include "DNA_gpencil_types.h"
+#include "DNA_object_types.h"
#include "DNA_scene_types.h"
#include "DNA_screen_types.h"
#include "DNA_space_types.h"
@@ -54,10 +60,15 @@
#include "BKE_global.h"
#include "BKE_utildefines.h"
#include "BKE_blender.h"
+#include "BKE_armature.h"
+#include "BKE_curve.h"
+#include "BKE_image.h"
#include "BIF_gl.h"
#include "BIF_glutil.h"
#include "BIF_butspace.h"
+#include "BIF_drawseq.h"
+#include "BIF_editarmature.h"
#include "BIF_editview.h"
#include "BIF_graphics.h"
#include "BIF_interface.h"
@@ -71,6 +82,8 @@
#include "BDR_gpencil.h"
#include "BIF_drawgpencil.h"
+#include "BDR_editobject.h"
+
#include "BSE_drawipo.h"
#include "BSE_headerbuttons.h"
#include "BSE_view.h"
@@ -211,8 +224,8 @@ bGPDlayer *gpencil_layer_addnew (bGPdata *gpd)
BLI_addtail(&gpd->layers, gpl);
/* set basic settings */
- gpl->color[3]= 1.0f;
- gpl->thickness = 1;
+ gpl->color[3]= 0.9f;
+ gpl->thickness = 3;
/* auto-name */
sprintf(gpl->info, "GP_Layer");
@@ -234,8 +247,7 @@ bGPdata *gpencil_data_addnew (void)
gpd= MEM_callocN(sizeof(bGPdata), "GreasePencilData");
/* initial settings */
- /* it is quite useful to be able to see this info, so on by default */
- gpd->flag = GP_DATA_DISPINFO;
+ gpd->flag = (GP_DATA_DISPINFO|GP_DATA_EXPAND);
return gpd;
}
@@ -312,11 +324,17 @@ bGPdata *gpencil_data_getactive (ScrArea *sa)
{
SpaceSeq *sseq= sa->spacedata.first;
- /* only applicable for "Image Preview" mode */
+ /* only applicable for image modes */
if (sseq->mainb)
return sseq->gpd;
}
break;
+ case SPACE_IMAGE:
+ {
+ SpaceImage *sima= sa->spacedata.first;
+ return sima->gpd;
+ }
+ break;
}
/* nothing found */
@@ -379,6 +397,17 @@ short gpencil_data_setactive (ScrArea *sa, bGPdata *gpd)
}
}
break;
+ case SPACE_IMAGE:
+ {
+ SpaceImage *sima= sa->spacedata.first;
+
+ if (sima->gpd)
+ free_gpencil_data(sima->gpd);
+ sima->gpd= gpd;
+
+ return 1;
+ }
+ break;
}
/* failed to add */
@@ -585,11 +614,10 @@ void gpencil_layer_delactive (bGPdata *gpd)
/* free layer */
free_gpencil_frames(gpl);
BLI_freelinkN(&gpd->layers, gpl);
-
}
/* ************************************************** */
-/* GREASE-PENCIL EDITING MODE - Tools */
+/* GREASE-PENCIL EDITING - Tools */
/* --------- Data Deletion ---------- */
@@ -658,6 +686,302 @@ void gpencil_delete_menu (void)
gpencil_delete_operation(mode);
}
+/* --------- Data Conversion ---------- */
+
+/* convert the coordinates from the given stroke point into 3d-coordinates */
+static void gp_strokepoint_convertcoords (bGPDstroke *gps, bGPDspoint *pt, float p3d[3])
+{
+ if (gps->flag & GP_STROKE_3DSPACE) {
+ /* directly use 3d-coordinates */
+ VecCopyf(p3d, &pt->x);
+ }
+ else {
+ short mval[2], mx, my;
+ float *fp= give_cursor();
+ float dvec[3];
+
+ /* get screen coordinate */
+ if (gps->flag & GP_STROKE_2DSPACE) {
+ View2D *v2d= spacelink_get_view2d(curarea->spacedata.first);
+ ipoco_to_areaco_noclip(v2d, &pt->x, mval);
+ }
+ else {
+ mval[0]= (pt->x / 1000 * curarea->winx);
+ mval[1]= (pt->y / 1000 * curarea->winy);
+ }
+ mx= mval[0];
+ my= mval[1];
+
+ /* convert screen coordinate to 3d coordinates
+ * - method taken from editview.c - mouse_cursor()
+ */
+ project_short_noclip(fp, mval);
+ window_to_3d(dvec, mval[0]-mx, mval[1]-my);
+ VecSubf(p3d, fp, dvec);
+ }
+}
+
+/* --- */
+
+/* convert stroke to 3d path */
+static void gp_stroke_to_path (bGPDlayer *gpl, bGPDstroke *gps, Curve *cu)
+{
+ bGPDspoint *pt;
+ Nurb *nu;
+ BPoint *bp;
+ int i;
+
+ /* create new 'nurb' within the curve */
+ nu = (Nurb *)MEM_callocN(sizeof(Nurb), "gpstroke_to_path(nurb)");
+
+ nu->pntsu= gps->totpoints;
+ nu->pntsv= 1;
+ nu->orderu= gps->totpoints;
+ nu->flagu= 2; /* endpoint */
+ nu->resolu= 32;
+
+ nu->bp= (BPoint *)MEM_callocN(sizeof(BPoint)*gps->totpoints, "bpoints");
+
+ /* add points */
+ for (i=0, pt=gps->points, bp=nu->bp; i < gps->totpoints; i++, pt++, bp++) {
+ float p3d[3];
+
+ /* get coordinates to add at */
+ gp_strokepoint_convertcoords(gps, pt, p3d);
+ VecCopyf(bp->vec, p3d);
+
+ /* set settings */
+ bp->f1= SELECT;
+ bp->radius = bp->weight = pt->pressure * gpl->thickness;
+ }
+
+ /* add nurb to curve */
+ BLI_addtail(&cu->nurb, nu);
+}
+
+/* convert stroke to 3d bezier */
+static void gp_stroke_to_bezier (bGPDlayer *gpl, bGPDstroke *gps, Curve *cu)
+{
+ bGPDspoint *pt;
+ Nurb *nu;
+ BezTriple *bezt;
+ int i;
+
+ /* create new 'nurb' within the curve */
+ nu = (Nurb *)MEM_callocN(sizeof(Nurb), "gpstroke_to_bezier(nurb)");
+
+ nu->pntsu= gps->totpoints;
+ nu->resolu= 12;
+ nu->resolv= 12;
+ nu->type= CU_BEZIER;
+ nu->bezt = (BezTriple *)MEM_callocN(gps->totpoints*sizeof(BezTriple), "bezts");
+
+ /* add points */
+ for (i=0, pt=gps->points, bezt=nu->bezt; i < gps->totpoints; i++, pt++, bezt++) {
+ float p3d[3];
+
+ /* get coordinates to add at */
+ gp_strokepoint_convertcoords(gps, pt, p3d);
+
+ /* TODO: maybe in future the handles shouldn't be in same place */
+ VecCopyf(bezt->vec[0], p3d);
+ VecCopyf(bezt->vec[1], p3d);
+ VecCopyf(bezt->vec[2], p3d);
+
+ /* set settings */
+ bezt->h1= bezt->h2= HD_FREE;
+ bezt->f1= bezt->f2= bezt->f3= SELECT;
+ bezt->radius = bezt->weight = pt->pressure * gpl->thickness;
+ }
+
+ /* must calculate handles or else we crash */
+ calchandlesNurb(nu);
+
+ /* add nurb to curve */
+ BLI_addtail(&cu->nurb, nu);
+}
+
+/* convert a given grease-pencil layer to a 3d-curve representation (using current view if appropriate) */
+static void gp_layer_to_curve (bGPdata *gpd, bGPDlayer *gpl, short mode)
+{
+ bGPDframe *gpf= gpencil_layer_getframe(gpl, CFRA, 0);
+ bGPDstroke *gps;
+ Object *ob;
+ Curve *cu;
+
+ /* error checking */
+ if (ELEM3(NULL, gpd, gpl, gpf))
+ return;
+
+ /* only convert if there are any strokes on this layer's frame to convert */
+ if (gpf->strokes.first == NULL)
+ return;
+
+ /* initialise the curve */
+ cu= add_curve(gpl->info, 1);
+ cu->flag |= CU_3D;
+
+ /* init the curve object (remove rotation and assign curve data to it) */
+ add_object_draw(OB_CURVE);
+ ob= OBACT;
+ ob->loc[0]= ob->loc[1]= ob->loc[2]= 0;
+ ob->rot[0]= ob->rot[1]= ob->rot[2]= 0;
+ ob->data= cu;
+
+ /* add points to curve */
+ for (gps= gpf->strokes.first; gps; gps= gps->next) {
+ switch (mode) {
+ case 1:
+ gp_stroke_to_path(gpl, gps, cu);
+ break;
+ case 2:
+ gp_stroke_to_bezier(gpl, gps, cu);
+ break;
+ }
+ }
+}
+
+/* --- */
+
+/* convert a stroke to a bone chain */
+static void gp_stroke_to_bonechain (bGPDlayer *gpl, bGPDstroke *gps, bArmature *arm, ListBase *bones)
+{
+ EditBone *ebo, *prev=NULL;
+ bGPDspoint *pt, *ptn;
+ int i;
+
+ /* add each segment separately */
+ for (i=0, pt=gps->points, ptn=gps->points+1; i < (gps->totpoints-1); prev=ebo, i++, pt++, ptn++) {
+ float p3da[3], p3db[3];
+
+ /* get coordinates to add at */
+ gp_strokepoint_convertcoords(gps, pt, p3da);
+ gp_strokepoint_convertcoords(gps, ptn, p3db);
+
+ /* allocate new bone */
+ ebo= MEM_callocN(sizeof(EditBone), "eBone");
+
+ VecCopyf(ebo->head, p3da);
+ VecCopyf(ebo->tail, p3db);
+
+ /* add new bone - note: sync with editarmature.c::add_editbone() */
+ BLI_strncpy(ebo->name, "Stroke", 32);
+ unique_editbone_name(bones, ebo->name);
+
+ BLI_addtail(bones, ebo);
+
+ ebo->flag |= BONE_CONNECTED;
+ ebo->weight= 1.0F;
+ ebo->dist= 0.25F;
+ ebo->xwidth= 0.1;
+ ebo->zwidth= 0.1;
+ ebo->ease1= 1.0;
+ ebo->ease2= 1.0;
+ ebo->rad_head= pt->pressure * gpl->thickness * 0.1;
+ ebo->rad_tail= ptn->pressure * gpl->thickness * 0.1;
+ ebo->segments= 1;
+ ebo->layer= arm->layer;
+
+ /* set parenting */
+ // TODO: also adjust roll....
+ ebo->parent= prev;
+ }
+}
+
+/* convert a given grease-pencil layer to a 3d-curve representation (using current view if appropriate) */
+static void gp_layer_to_armature (bGPdata *gpd, bGPDlayer *gpl, short mode)
+{
+ bGPDframe *gpf= gpencil_layer_getframe(gpl, CFRA, 0);
+ bGPDstroke *gps;
+ Object *ob;
+ bArmature *arm;
+ ListBase bones = {0,0};
+
+ /* error checking */
+ if (ELEM3(NULL, gpd, gpl, gpf))
+ return;
+
+ /* only convert if there are any strokes on this layer's frame to convert */
+ if (gpf->strokes.first == NULL)
+ return;
+
+ /* initialise the armature */
+ arm= add_armature(gpl->info);
+
+ /* init the armature object (remove rotation and assign armature data to it) */
+ add_object_draw(OB_ARMATURE);
+ ob= OBACT;
+ ob->loc[0]= ob->loc[1]= ob->loc[2]= 0;
+ ob->rot[0]= ob->rot[1]= ob->rot[2]= 0;
+ ob->data= arm;
+
+ /* convert segments to bones, strokes to bone chains */
+ for (gps= gpf->strokes.first; gps; gps= gps->next) {
+ gp_stroke_to_bonechain(gpl, gps, arm, &bones);
+ }
+
+ /* flush editbones to armature */
+ editbones_to_armature(&bones, ob);
+ if (bones.first) BLI_freelistN(&bones);
+}
+
+/* --- */
+
+/* convert grease-pencil strokes to another representation
+ * mode: 1 - Active layer to path
+ * 2 - Active layer to bezier
+ * 3 - Active layer to armature
+ */
+void gpencil_convert_operation (short mode)
+{
+ bGPdata *gpd;
+ float *fp= give_cursor();
+
+ /* get datablock to work on */
+ gpd= gpencil_data_getactive(NULL);
+ if (gpd == NULL) return;
+
+ /* initialise 3d-cursor correction globals */
+ initgrabz(fp[0], fp[1], fp[2]);
+
+ /* handle selection modes */
+ switch (mode) {
+ case 1: /* active layer only (to path) */
+ case 2: /* active layer only (to bezier) */
+ {
+ bGPDlayer *gpl= gpencil_layer_getactive(gpd);
+ gp_layer_to_curve(gpd, gpl, mode);
+ }
+ break;
+ case 3: /* active layer only (to armature) */
+ {
+ bGPDlayer *gpl= gpencil_layer_getactive(gpd);
+ gp_layer_to_armature(gpd, gpl, mode);
+ }
+ break;
+ }
+
+ /* redraw and undo-push */
+ BIF_undo_push("GPencil Convert");
+ allqueue(REDRAWVIEW3D, 0);
+ allqueue(REDRAWOOPS, 0);
+}
+
+/* display a menu for converting grease-pencil strokes */
+void gpencil_convert_menu (void)
+{
+ bGPdata *gpd= gpencil_data_getactive(NULL);
+ short mode;
+
+ /* only show menu if it will be relevant */
+ if (gpd == NULL) return;
+
+ mode= pupmenu("Grease Pencil Convert %t|Active Layer To Path%x1|Active Layer to Bezier%x2|Active Layer to Armature%x3");
+ if (mode <= 0) return;
+
+ gpencil_convert_operation(mode);
+}
+
/* ************************************************** */
/* GREASE-PENCIL EDITING MODE - Painting */
@@ -667,11 +991,10 @@ void gpencil_delete_menu (void)
#define GP_STROKE_BUFFER_MAX 5000
/* Hardcoded sensitivity thresholds... */
-// TODO: one day, these might be added to the UI if it is necessary
/* minimum number of pixels mouse should move before new point created */
-#define MIN_MANHATTEN_PX 3
+#define MIN_MANHATTEN_PX U.gp_manhattendist
/* minimum length of new segment before new point can be added */
-#define MIN_EUCLIDEAN_PX 20
+#define MIN_EUCLIDEAN_PX U.gp_euclideandist
/* ------ */
@@ -679,6 +1002,7 @@ void gpencil_delete_menu (void)
typedef struct tGPsdata {
ScrArea *sa; /* area where painting originated */
View2D *v2d; /* needed for GP_STROKE_2DSPACE */
+ ImBuf *ibuf; /* needed for GP_STROKE_2DIMAGE */
bGPdata *gpd; /* gp-datablock layer comes from */
bGPDlayer *gpl; /* layer we're working on */
@@ -686,6 +1010,10 @@ typedef struct tGPsdata {
short status; /* current status of painting */
short paintmode; /* mode for painting */
+
+ short mval[2]; /* current mouse-position */
+ short mvalo[2]; /* previous recorded mouse-position */
+ short radius; /* radius of influence for eraser */
} tGPsdata;
/* values for tGPsdata->status */
@@ -729,135 +1057,6 @@ static void gp_session_validatebuffer (tGPsdata *p)
gpd->sbuffer_sflag= 0;
}
-/* init new painting session */
-static void gp_session_initpaint (tGPsdata *p)
-{
- /* clear previous data (note: is on stack) */
- memset(p, 0, sizeof(tGPsdata));
-
- /* make sure the active view (at the starting time) is a 3d-view */
- if (curarea == NULL) {
- p->status= GP_STATUS_ERROR;
- if (G.f & G_DEBUG)
- printf("Error: No active view for painting \n");
- return;
- }
- switch (curarea->spacetype) {
- /* supported views first */
- case SPACE_VIEW3D:
- {
- View3D *v3d= curarea->spacedata.first;
-
- /* set current area */
- p->sa= curarea;
-
- /* check that gpencil data is allowed to be drawn */
- if ((v3d->flag2 & V3D_DISPGP)==0) {
- p->status= GP_STATUS_ERROR;
- if (G.f & G_DEBUG)
- printf("Error: In active view, Grease Pencil not shown \n");
- return;
- }
- }
- break;
- case SPACE_NODE:
- {
- SpaceNode *snode= curarea->spacedata.first;
-
- /* set current area */
- p->sa= curarea;
- p->v2d= &snode->v2d;
-
- /* check that gpencil data is allowed to be drawn */
- if ((snode->flag & SNODE_DISPGP)==0) {
- p->status= GP_STATUS_ERROR;
- if (G.f & G_DEBUG)
- printf("Error: In active view, Grease Pencil not shown \n");
- return;
- }
- }
- break;
- case SPACE_SEQ:
- {
- SpaceSeq *sseq= curarea->spacedata.first;
-
- /* set current area */
- p->sa= curarea;
- p->v2d= &sseq->v2d;
-
- /* check that gpencil data is allowed to be drawn */
- if (sseq->mainb == 0) {
- p->status= GP_STATUS_ERROR;
- if (G.f & G_DEBUG)
- printf("Error: In active view (sequencer), active mode doesn't support Grease Pencil \n");
- return;
- }
- if ((sseq->flag & SEQ_DRAW_GPENCIL)==0) {
- p->status= GP_STATUS_ERROR;
- if (G.f & G_DEBUG)
- printf("Error: In active view, Grease Pencil not shown \n");
- return;
- }
- }
- break;
- /* unsupported views */
- default:
- {
- p->status= GP_STATUS_ERROR;
- if (G.f & G_DEBUG)
- printf("Error: Active view not appropriate for Grease Pencil drawing \n");
- return;
- }
- break;
- }
-
- /* get gp-data */
- p->gpd= gpencil_data_getactive(p->sa);
- if (p->gpd == NULL) {
- short ok;
-
- p->gpd= gpencil_data_addnew();
- ok= gpencil_data_setactive(p->sa, p->gpd);
-
- /* most of the time, the following check isn't needed */
- if (ok == 0) {
- /* free gpencil data as it can't be used */
- free_gpencil_data(p->gpd);
- p->gpd= NULL;
- p->status= GP_STATUS_ERROR;
- if (G.f & G_DEBUG)
- printf("Error: Could not assign newly created Grease Pencil data to active area \n");
- return;
- }
- }
-
- /* set edit flags */
- G.f |= G_GREASEPENCIL;
-
- /* clear out buffer (stored in gp-data) in case something contaminated it */
- gp_session_validatebuffer(p);
-}
-
-/* cleanup after a painting session */
-static void gp_session_cleanup (tGPsdata *p)
-{
- bGPdata *gpd= p->gpd;
-
- /* error checking */
- if (gpd == NULL)
- return;
-
- /* free stroke buffer */
- if (gpd->sbuffer) {
- MEM_freeN(gpd->sbuffer);
- gpd->sbuffer= NULL;
- }
-
- /* clear flags */
- gpd->sbuffer_size= 0;
- gpd->sbuffer_sflag= 0;
-}
-
/* check if the current mouse position is suitable for adding a new point */
static short gp_stroke_filtermval (tGPsdata *p, short mval[2], short pmval[2])
{
@@ -869,6 +1068,7 @@ static short gp_stroke_filtermval (tGPsdata *p, short mval[2], short pmval[2])
return 1;
/* check if the distance since the last point is significant enough */
+ // future optimisation: sqrt here may be too slow?
else if (sqrt(dx*dx + dy*dy) > MIN_EUCLIDEAN_PX)
return 1;
@@ -884,7 +1084,7 @@ static void gp_stroke_convertcoords (tGPsdata *p, short mval[], float out[])
/* in 3d-space - pt->x/y/z are 3 side-by-side floats */
if (gpd->sbuffer_sflag & GP_STROKE_3DSPACE) {
- short mx=mval[0], my=mval[1];
+ const short mx=mval[0], my=mval[1];
float *fp= give_cursor();
float dvec[3];
@@ -904,6 +1104,47 @@ static void gp_stroke_convertcoords (tGPsdata *p, short mval[], float out[])
out[1]= y;
}
+ /* 2d - on image 'canvas' (assume that p->v2d is set) */
+ else if ( (gpd->sbuffer_sflag & GP_STROKE_2DIMAGE) && (p->v2d) )
+ {
+ /* for now - space specific */
+ switch (p->sa->spacetype) {
+ case SPACE_SEQ: /* sequencer */
+ {
+ SpaceSeq *sseq= (SpaceSeq *)p->sa->spacedata.first;
+ int sizex, sizey, offsx, offsy, rectx, recty;
+ float zoom, zoomx, zoomy;
+
+ /* calculate zoom factor */
+ zoom= SEQ_ZOOM_FAC(sseq->zoom);
+ if (sseq->mainb == SEQ_DRAW_IMG_IMBUF) {
+ zoomx = zoom * ((float)G.scene->r.xasp / (float)G.scene->r.yasp);
+ zoomy = zoom;
+ }
+ else
+ zoomx = zoomy = zoom;
+
+ /* calculate rect size */
+ rectx= (G.scene->r.size*G.scene->r.xsch)/100;
+ recty= (G.scene->r.size*G.scene->r.ysch)/100;
+ sizex= zoomx * rectx;
+ sizey= zoomy * recty;
+ offsx= (p->sa->winx-sizex)/2 + sseq->xof;
+ offsy= (p->sa->winy-sizey)/2 + sseq->yof;
+
+ /* calculate new points */
+ out[0]= (float)(mval[0] - offsx) / (float)sizex;
+ out[1]= (float)(mval[1] - offsy) / (float)sizey;
+ }
+ break;
+
+ default: /* just use raw mouse coordinates - BAD! */
+ out[0]= mval[0];
+ out[1]= mval[1];
+ break;
+ }
+ }
+
/* 2d - relative to screen (viewport area) */
else {
out[0] = (float)(mval[0]) / (float)(p->sa->winx) * 1000;
@@ -927,8 +1168,6 @@ static short gp_stroke_addpoint (tGPsdata *p, short mval[2], float pressure)
/* store settings */
pt->x= mval[0];
pt->y= mval[1];
- pt->xf= (float)mval[0];
- pt->yf= (float)mval[0];
pt->pressure= pressure;
/* increment counters */
@@ -949,9 +1188,18 @@ static void gp_stroke_newfrombuffer (tGPsdata *p)
bGPDspoint *pt;
tGPspoint *ptc;
int i, totelem;
+
+ /* macro to test if only converting endpoints */
+ #define GP_BUFFER2STROKE_ENDPOINTS ((gpd->flag & GP_DATA_EDITPAINT) && (G.qual & LR_CTRLKEY))
- /* get total number of points to allocate space for */
- totelem = gpd->sbuffer_size;
+ /* get total number of points to allocate space for:
+ * - in 'Draw Mode', holding the Ctrl-Modifier will only take endpoints
+ * - otherwise, do whole stroke
+ */
+ if (GP_BUFFER2STROKE_ENDPOINTS)
+ totelem = (gpd->sbuffer_size >= 2) ? 2: gpd->sbuffer_size;
+ else
+ totelem = gpd->sbuffer_size;
/* exit with error if no valid points from this stroke */
if (totelem == 0) {
@@ -972,45 +1220,53 @@ static void gp_stroke_newfrombuffer (tGPsdata *p)
gps->flag= gpd->sbuffer_sflag;
/* copy points from the buffer to the stroke */
- for (i=0, ptc=gpd->sbuffer; i < gpd->sbuffer_size && ptc; i++, ptc++) {
- /* convert screen-coordinates to appropriate coordinates (and store them) */
- gp_stroke_convertcoords(p, &ptc->x, &pt->x);
-
- /* copy pressure */
- pt->pressure= ptc->pressure;
-
- pt++;
+ if (GP_BUFFER2STROKE_ENDPOINTS) {
+ /* 'Draw Mode' + Ctrl-Modifier - only endpoints */
+ {
+ /* first point */
+ ptc= gpd->sbuffer;
+
+ /* convert screen-coordinates to appropriate coordinates (and store them) */
+ gp_stroke_convertcoords(p, &ptc->x, &pt->x);
+
+ /* copy pressure */
+ pt->pressure= ptc->pressure;
+
+ pt++;
+ }
+
+ if (totelem == 2) {
+ /* last point if applicable */
+ ptc= ((tGPspoint *)gpd->sbuffer) + (gpd->sbuffer_size - 1);
+
+ /* convert screen-coordinates to appropriate coordinates (and store them) */
+ gp_stroke_convertcoords(p, &ptc->x, &pt->x);
+
+ /* copy pressure */
+ pt->pressure= ptc->pressure;
+ }
+ }
+ else {
+ /* convert all points (normal behaviour) */
+ for (i=0, ptc=gpd->sbuffer; i < gpd->sbuffer_size && ptc; i++, ptc++) {
+ /* convert screen-coordinates to appropriate coordinates (and store them) */
+ gp_stroke_convertcoords(p, &ptc->x, &pt->x);
+
+ /* copy pressure */
+ pt->pressure= ptc->pressure;
+
+ pt++;
+ }
}
/* add stroke to frame */
BLI_addtail(&p->gpf->strokes, gps);
+
+ /* undefine macro to test if only converting endpoints */
+ #undef GP_BUFFER2STROKE_ENDPOINTS
}
/* --- 'Eraser' for 'Paint' Tool ------ */
-/* User should draw 'circles' around the parts of the sketches they wish to
- * delete instead of drawing squiggles over existing lines. This should be
- * easier to manage than if it was done otherwise.
- */
-
-/* convert gp-buffer stroke into mouse-coordinates array */
-static short (*gp_stroke_eraser_2mco (bGPdata *gpd))[2]
-{
- tGPspoint *pt;
- short (*mcoords)[2];
- int i;
-
- /* allocate memory for coordinates array */
- mcoords= MEM_mallocN(sizeof(*mcoords)*gpd->sbuffer_size,"gp_buf_mcords");
-
- /* copy coordinates */
- for (pt=gpd->sbuffer, i=0; i < gpd->sbuffer_size; i++, pt++) {
- mcoords[i][0]= pt->x;
- mcoords[i][1]= pt->y;
- }
-
- /* return */
- return mcoords;
-}
/* eraser tool - remove segment from stroke/split stroke (after lasso inside) */
static short gp_stroke_eraser_splitdel (bGPDframe *gpf, bGPDstroke *gps, int i)
@@ -1080,8 +1336,19 @@ static short gp_stroke_eraser_splitdel (bGPDframe *gpf, bGPDstroke *gps, int i)
}
}
+/* eraser tool - check if part of stroke occurs within last segment drawn by eraser */
+static short gp_stroke_eraser_strokeinside (short mval[], short mvalo[], short rad, short x0, short y0, short x1, short y1)
+{
+ /* simple within-radius check for now */
+ if (edge_inside_circle(mval[0], mval[1], rad, x0, y0, x1, y1))
+ return 1;
+
+ /* not inside */
+ return 0;
+}
+
/* eraser tool - evaluation per stroke */
-static void gp_stroke_eraser_dostroke (tGPsdata *p, short mcoords[][2], short moves, rcti *rect, bGPDframe *gpf, bGPDstroke *gps)
+static void gp_stroke_eraser_dostroke (tGPsdata *p, short mval[], short mvalo[], short rad, rcti *rect, bGPDframe *gpf, bGPDstroke *gps)
{
bGPDspoint *pt1, *pt2;
short x0=0, y0=0, x1=0, y1=0;
@@ -1097,16 +1364,20 @@ static void gp_stroke_eraser_dostroke (tGPsdata *p, short mcoords[][2], short mo
else if (gps->totpoints == 1) {
/* get coordinates */
if (gps->flag & GP_STROKE_3DSPACE) {
- // FIXME: this may not be the correct correction
project_short(&gps->points->x, xyval);
x0= xyval[0];
- x1= xyval[1];
+ y0= xyval[1];
}
else if (gps->flag & GP_STROKE_2DSPACE) {
ipoco_to_areaco_noclip(p->v2d, &gps->points->x, xyval);
x0= xyval[0];
y0= xyval[1];
}
+ else if (gps->flag & GP_STROKE_2DIMAGE) {
+ ipoco_to_areaco_noclip(p->v2d, &gps->points->x, xyval);
+ x0= xyval[0];
+ y0= xyval[1];
+ }
else {
x0= (gps->points->x / 1000 * p->sa->winx);
y0= (gps->points->y / 1000 * p->sa->winy);
@@ -1115,7 +1386,7 @@ static void gp_stroke_eraser_dostroke (tGPsdata *p, short mcoords[][2], short mo
/* do boundbox check first */
if (BLI_in_rcti(rect, x0, y0)) {
/* only check if point is inside */
- if (lasso_inside(mcoords, moves, x0, y0)) {
+ if ( ((x0-mval[0])*(x0-mval[0]) + (y0-mval[1])*(y0-mval[1])) <= rad*rad ) {
/* free stroke */
MEM_freeN(gps->points);
BLI_freelinkN(&gpf->strokes, gps);
@@ -1133,10 +1404,13 @@ static void gp_stroke_eraser_dostroke (tGPsdata *p, short mcoords[][2], short mo
/* get coordinates */
if (gps->flag & GP_STROKE_3DSPACE) {
- // FIXME: may not be correct correction
- project_short(&gps->points->x, xyval);
+ project_short(&pt1->x, xyval);
x0= xyval[0];
- x1= xyval[1];
+ y0= xyval[1];
+
+ project_short(&pt2->x, xyval);
+ x1= xyval[0];
+ y1= xyval[1];
}
else if (gps->flag & GP_STROKE_2DSPACE) {
ipoco_to_areaco_noclip(p->v2d, &pt1->x, xyval);
@@ -1147,6 +1421,15 @@ static void gp_stroke_eraser_dostroke (tGPsdata *p, short mcoords[][2], short mo
x1= xyval[0];
y1= xyval[1];
}
+ else if (gps->flag & GP_STROKE_2DIMAGE) {
+ ipoco_to_areaco_noclip(p->v2d, &pt1->x, xyval);
+ x0= xyval[0];
+ y0= xyval[1];
+
+ ipoco_to_areaco_noclip(p->v2d, &pt2->x, xyval);
+ x1= xyval[0];
+ y1= xyval[1];
+ }
else {
x0= (pt1->x / 1000 * p->sa->winx);
y0= (pt1->y / 1000 * p->sa->winy);
@@ -1159,9 +1442,8 @@ static void gp_stroke_eraser_dostroke (tGPsdata *p, short mcoords[][2], short mo
/* check if point segment of stroke had anything to do with
* eraser region (either within stroke painted, or on its lines)
* - this assumes that linewidth is irrelevant
- * - handled using the lasso-select checking code
*/
- if (lasso_inside_edge(mcoords, moves, x0, y0, x1, x1)) {
+ if (gp_stroke_eraser_strokeinside(mval, mvalo, rad, x0, y0, x1, y1)) {
/* if function returns true, break this loop (as no more point to check) */
if (gp_stroke_eraser_splitdel(gpf, gps, i))
break;
@@ -1171,33 +1453,167 @@ static void gp_stroke_eraser_dostroke (tGPsdata *p, short mcoords[][2], short mo
}
}
-/* -------- */
-
/* erase strokes which fall under the eraser strokes */
static void gp_stroke_doeraser (tGPsdata *p)
{
- bGPdata *gpd= p->gpd;
bGPDframe *gpf= p->gpf;
bGPDstroke *gps, *gpn;
- short (*mcoords)[2];
rcti rect;
- /* get buffer-stroke coordinates as shorts array, and then get bounding box */
- mcoords= gp_stroke_eraser_2mco(gpd);
- lasso_select_boundbox(&rect, mcoords, gpd->sbuffer_size);
+ /* rect is rectangle of eraser */
+ rect.xmin= p->mval[0] - p->radius;
+ rect.ymin= p->mval[1] - p->radius;
+ rect.xmax= p->mval[0] + p->radius;
+ rect.ymax= p->mval[1] + p->radius;
/* loop over strokes, checking segments for intersections */
for (gps= gpf->strokes.first; gps; gps= gpn) {
gpn= gps->next;
- gp_stroke_eraser_dostroke(p, mcoords, gpd->sbuffer_size, &rect, gpf, gps);
+ gp_stroke_eraser_dostroke(p, p->mval, p->mvalo, p->radius, &rect, gpf, gps);
}
-
- /* free mcoords array */
- MEM_freeN(mcoords);
}
/* ---------- 'Paint' Tool ------------ */
+/* init new painting session */
+static void gp_session_initpaint (tGPsdata *p)
+{
+ /* clear previous data (note: is on stack) */
+ memset(p, 0, sizeof(tGPsdata));
+
+ /* make sure the active view (at the starting time) is a 3d-view */
+ if (curarea == NULL) {
+ p->status= GP_STATUS_ERROR;
+ if (G.f & G_DEBUG)
+ printf("Error: No active view for painting \n");
+ return;
+ }
+ switch (curarea->spacetype) {
+ /* supported views first */
+ case SPACE_VIEW3D:
+ {
+ View3D *v3d= curarea->spacedata.first;
+
+ /* set current area */
+ p->sa= curarea;
+
+ /* check that gpencil data is allowed to be drawn */
+ if ((v3d->flag2 & V3D_DISPGP)==0) {
+ p->status= GP_STATUS_ERROR;
+ if (G.f & G_DEBUG)
+ printf("Error: In active view, Grease Pencil not shown \n");
+ return;
+ }
+ }
+ break;
+ case SPACE_NODE:
+ {
+ SpaceNode *snode= curarea->spacedata.first;
+
+ /* set current area */
+ p->sa= curarea;
+ p->v2d= &snode->v2d;
+
+ /* check that gpencil data is allowed to be drawn */
+ if ((snode->flag & SNODE_DISPGP)==0) {
+ p->status= GP_STATUS_ERROR;
+ if (G.f & G_DEBUG)
+ printf("Error: In active view, Grease Pencil not shown \n");
+ return;
+ }
+ }
+ break;
+ case SPACE_SEQ:
+ {
+ SpaceSeq *sseq= curarea->spacedata.first;
+
+ /* set current area */
+ p->sa= curarea;
+ p->v2d= &sseq->v2d;
+
+ /* check that gpencil data is allowed to be drawn */
+ if (sseq->mainb == 0) {
+ p->status= GP_STATUS_ERROR;
+ if (G.f & G_DEBUG)
+ printf("Error: In active view (sequencer), active mode doesn't support Grease Pencil \n");
+ return;
+ }
+ if ((sseq->flag & SEQ_DRAW_GPENCIL)==0) {
+ p->status= GP_STATUS_ERROR;
+ if (G.f & G_DEBUG)
+ printf("Error: In active view, Grease Pencil not shown \n");
+ return;
+ }
+ }
+ break;
+ case SPACE_IMAGE:
+ {
+ SpaceImage *sima= curarea->spacedata.first;
+
+ /* set the current area */
+ p->sa= curarea;
+ p->v2d= &sima->v2d;
+ p->ibuf= BKE_image_get_ibuf(sima->image, &sima->iuser);
+ }
+ break;
+ /* unsupported views */
+ default:
+ {
+ p->status= GP_STATUS_ERROR;
+ if (G.f & G_DEBUG)
+ printf("Error: Active view not appropriate for Grease Pencil drawing \n");
+ return;
+ }
+ break;
+ }
+
+ /* get gp-data */
+ p->gpd= gpencil_data_getactive(p->sa);
+ if (p->gpd == NULL) {
+ short ok;
+
+ p->gpd= gpencil_data_addnew();
+ ok= gpencil_data_setactive(p->sa, p->gpd);
+
+ /* most of the time, the following check isn't needed */
+ if (ok == 0) {
+ /* free gpencil data as it can't be used */
+ free_gpencil_data(p->gpd);
+ p->gpd= NULL;
+ p->status= GP_STATUS_ERROR;
+ if (G.f & G_DEBUG)
+ printf("Error: Could not assign newly created Grease Pencil data to active area \n");
+ return;
+ }
+ }
+
+ /* set edit flags */
+ G.f |= G_GREASEPENCIL;
+
+ /* clear out buffer (stored in gp-data) in case something contaminated it */
+ gp_session_validatebuffer(p);
+}
+
+/* cleanup after a painting session */
+static void gp_session_cleanup (tGPsdata *p)
+{
+ bGPdata *gpd= p->gpd;
+
+ /* error checking */
+ if (gpd == NULL)
+ return;
+
+ /* free stroke buffer */
+ if (gpd->sbuffer) {
+ MEM_freeN(gpd->sbuffer);
+ gpd->sbuffer= NULL;
+ }
+
+ /* clear flags */
+ gpd->sbuffer_size= 0;
+ gpd->sbuffer_sflag= 0;
+}
+
/* init new stroke */
static void gp_paint_initstroke (tGPsdata *p, short paintmode)
{
@@ -1247,6 +1663,14 @@ static void gp_paint_initstroke (tGPsdata *p, short paintmode)
case SPACE_SEQ:
{
/* for now, this is not applicable here... */
+ p->gpd->sbuffer_sflag |= GP_STROKE_2DIMAGE;
+ }
+ break;
+ case SPACE_IMAGE:
+ {
+ /* check if any ibuf available */
+ if (p->ibuf)
+ p->gpd->sbuffer_sflag |= GP_STROKE_2DSPACE;
}
break;
}
@@ -1257,11 +1681,7 @@ static void gp_paint_initstroke (tGPsdata *p, short paintmode)
static void gp_paint_strokeend (tGPsdata *p)
{
/* check if doing eraser or not */
- if (p->gpd->sbuffer_sflag & GP_STROKE_ERASER) {
- /* get rid of relevant sections of strokes */
- gp_stroke_doeraser(p);
- }
- else {
+ if ((p->gpd->sbuffer_sflag & GP_STROKE_ERASER) == 0) {
/* transfer stroke to frame */
gp_stroke_newfrombuffer(p);
}
@@ -1295,7 +1715,6 @@ static void gp_paint_cleanup (tGPsdata *p)
short gpencil_paint (short mousebutton, short paintmode)
{
tGPsdata p;
- short prevmval[2], mval[2];
float opressure, pressure;
short ok = GP_STROKEADD_NORMAL;
@@ -1315,31 +1734,51 @@ short gpencil_paint (short mousebutton, short paintmode)
setcursor_space(p.sa->spacetype, CURSOR_VPAINT);
/* init drawing-device settings */
- getmouseco_areawin(mval);
+ getmouseco_areawin(p.mval);
pressure = get_pressure();
- prevmval[0]= mval[0];
- prevmval[1]= mval[1];
+ p.mvalo[0]= p.mval[0];
+ p.mvalo[1]= p.mval[1];
opressure= pressure;
+ /* radius for eraser circle is thickness^2 */
+ p.radius= p.gpl->thickness * p.gpl->thickness;
+
+ /* start drawing eraser-circle (if applicable) */
+ if (paintmode == GP_PAINTMODE_ERASER)
+ draw_sel_circle(p.mval, NULL, p.radius, p.radius, 0); // draws frontbuffer, but sets backbuf again
+
/* only allow painting of single 'dots' if:
* - pressure is not excessive (as it can be on some windows tablets)
* - draw-mode for active datablock is turned on
+ * - not erasing
*/
- if (!(pressure >= 0.99f) || (p.gpd->flag & GP_DATA_EDITPAINT)) {
- gp_stroke_addpoint(&p, mval, pressure);
+ if (paintmode != GP_PAINTMODE_ERASER) {
+ if (!(pressure >= 0.99f) || (p.gpd->flag & GP_DATA_EDITPAINT)) {
+ gp_stroke_addpoint(&p, p.mval, pressure);
+ }
}
/* paint loop */
do {
/* get current user input */
- getmouseco_areawin(mval);
+ getmouseco_areawin(p.mval);
pressure = get_pressure();
/* only add current point to buffer if mouse moved (otherwise wait until it does) */
- if (gp_stroke_filtermval(&p, mval, prevmval)) {
+ if (paintmode == GP_PAINTMODE_ERASER) {
+ /* do 'live' erasing now */
+ gp_stroke_doeraser(&p);
+
+ draw_sel_circle(p.mval, p.mvalo, p.radius, p.radius, 0);
+ force_draw(0);
+
+ p.mvalo[0]= p.mval[0];
+ p.mvalo[1]= p.mval[1];
+ }
+ else if (gp_stroke_filtermval(&p, p.mval, p.mvalo)) {
/* try to add point */
- ok= gp_stroke_addpoint(&p, mval, pressure);
+ ok= gp_stroke_addpoint(&p, p.mval, pressure);
/* handle errors while adding point */
if ((ok == GP_STROKEADD_FULL) || (ok == GP_STROKEADD_OVERFLOW)) {
@@ -1347,8 +1786,8 @@ short gpencil_paint (short mousebutton, short paintmode)
gp_paint_strokeend(&p);
/* start a new stroke, starting from previous point */
- gp_stroke_addpoint(&p, prevmval, opressure);
- ok= gp_stroke_addpoint(&p, mval, pressure);
+ gp_stroke_addpoint(&p, p.mvalo, opressure);
+ ok= gp_stroke_addpoint(&p, p.mval, pressure);
}
else if (ok == GP_STROKEADD_INVALID) {
/* the painting operation cannot continue... */
@@ -1361,8 +1800,8 @@ short gpencil_paint (short mousebutton, short paintmode)
}
force_draw(0);
- prevmval[0]= mval[0];
- prevmval[1]= mval[1];
+ p.mvalo[0]= p.mval[0];
+ p.mvalo[1]= p.mval[1];
opressure= pressure;
}
else
@@ -1380,8 +1819,10 @@ short gpencil_paint (short mousebutton, short paintmode)
setcursor_space(p.sa->spacetype, CURSOR_STD);
/* check size of buffer before cleanup, to determine if anything happened here */
- if (paintmode == GP_PAINTMODE_ERASER)
- ok= (p.gpd->sbuffer_size > 1);
+ if (paintmode == GP_PAINTMODE_ERASER) {
+ ok= 1; // fixme
+ draw_sel_circle(NULL, p.mvalo, 0, p.radius, 0);
+ }
else
ok= p.gpd->sbuffer_size;
@@ -1408,7 +1849,8 @@ short gpencil_do_paint (ScrArea *sa, short mbut)
/* currently, we will only 'paint' if:
* 1. draw-mode on gpd is set (for accessibility reasons)
- * (single 'dots' are only available via this method)
+ * a) single dots are only available by this method if a single click is made
+ * b) a straight line is drawn if ctrl-modifier is held (check is done when stroke is converted!)
* 2. if shift-modifier is held + lmb -> 'quick paint'
*
* OR
diff --git a/source/blender/src/header_action.c b/source/blender/src/header_action.c
index 4bb7bb9677e..2834a41e9ec 100644
--- a/source/blender/src/header_action.c
+++ b/source/blender/src/header_action.c
@@ -1568,7 +1568,7 @@ static uiBlock *action_markermenu(void *arg_unused)
menuwidth, 19, NULL, 0.0, 0.0, 1, ACTMENU_MARKERS_ADD, "");
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Duplicate Marker|Ctrl Shift D", 0, yco-=20,
menuwidth, 19, NULL, 0.0, 0.0, 1, ACTMENU_MARKERS_DUPLICATE, "");
- uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Delete Marker|X", 0, yco-=20,
+ uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Delete Marker|Shift X", 0, yco-=20,
menuwidth, 19, NULL, 0.0, 0.0, 1, ACTMENU_MARKERS_DELETE, "");
uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
diff --git a/source/blender/src/header_buttonswin.c b/source/blender/src/header_buttonswin.c
index 22471fda1ea..1e2890f4f2b 100644
--- a/source/blender/src/header_buttonswin.c
+++ b/source/blender/src/header_buttonswin.c
@@ -211,10 +211,6 @@ void do_buts_buttons(short event)
scrarea_queue_winredraw(curarea);
}
break;
- case B_MESHTYPE:
- allqueue(REDRAWBUTSEDIT, 0);
- allqueue(REDRAWVIEW3D, 0);
- break;
}
}
diff --git a/source/blender/src/header_image.c b/source/blender/src/header_image.c
index fac9e3af1af..4ca287d81c5 100644
--- a/source/blender/src/header_image.c
+++ b/source/blender/src/header_image.c
@@ -239,8 +239,10 @@ void do_image_buttons(unsigned short event)
if(ima->twsta>=nr) ima->twsta= 1;
if(ima->twend>=nr) ima->twend= nr-1;
if(ima->twsta>ima->twend) ima->twsta= 1;
- allqueue(REDRAWIMAGE, 0);
}
+
+ allqueue(REDRAWIMAGE, 0);
+ allqueue(REDRAWVIEW3D, 0);
}
break;
}
@@ -475,6 +477,9 @@ static void do_image_viewmenu(void *arg, int event)
G.sima->flag ^= SI_LOCAL_UV;
allqueue(REDRAWIMAGE, 0);
break;
+ case 15: /* Grease Pencil... */
+ add_blockhandler(curarea, IMAGE_HANDLER_GREASEPENCIL, UI_PNL_UNSTOW);
+ break;
}
allqueue(REDRAWVIEW3D, 0);
}
@@ -497,6 +502,8 @@ static uiBlock *image_viewmenu(void *arg_unused)
uiDefIconTextBut(block, BUTM, 1, ICON_MENU_PANEL, "Curves Tool...", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 11, "");
uiDefIconTextBut(block, BUTM, 1, ICON_MENU_PANEL, "Composite Preview...|Shift P", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 12, "");
+ uiDefIconTextBut(block, BUTM, 1, ICON_MENU_PANEL, "Grease Pencil...", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 15, "");
+
if(G.sima->flag & SI_LOCAL_UV) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "UV Local View|NumPad /", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 14, "");
else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "UV Local View|NumPad /", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 14, "");
if(!(G.sima->flag & SI_LOCAL_UV)) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "UV Global View|NumPad /", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 14, "");
@@ -1293,7 +1300,7 @@ void image_buttons(void)
uiBlockEndAlign(block);
xco+= 166;
}
- uiDefIconButBitI(block, TOG, SI_DRAWTOOL, B_SIMAGEPAINTTOOL, ICON_TPAINT_HLT, xco,0,XIC,YIC, &G.sima->flag, 0, 0, 0, 0, "Enables painting textures on the image with left mouse button");
+ uiDefIconButBitI(block, TOG, SI_DRAWTOOL, B_SIMAGEPAINTTOOL, ICON_TPAINT_HLT, xco,0,XIC,YIC, &G.sima->flag, 0, 0, 0, 0, "Enable image painting");
xco+= XIC+8;
diff --git a/source/blender/src/header_info.c b/source/blender/src/header_info.c
index a9280d9dd19..9bacc2b6351 100644
--- a/source/blender/src/header_info.c
+++ b/source/blender/src/header_info.c
@@ -118,6 +118,9 @@
#include "BPY_extern.h"
#include "BPY_menus.h"
+#include "GPU_extensions.h"
+#include "GPU_material.h"
+
#include "blendef.h"
#include "interface.h"
#include "mydevice.h"
@@ -924,7 +927,7 @@ static void do_info_filemenu(void *arg, int event)
winqueue_break= 1; /* leave queues everywhere */
BKE_reset_undo();
- BKE_write_undo("original"); /* save current state */
+ BKE_write_undo("Original"); /* save current state */
refresh_interface_font();
}
break;
@@ -1589,20 +1592,83 @@ static uiBlock *info_addmenu(void *arg_unused)
/************************** GAME *****************************/
-
+void do_info_game_glslmenu(void *arg, int event)
+{
+ switch (event) {
+ case G_FILE_GLSL_NO_LIGHTS:
+ case G_FILE_GLSL_NO_SHADERS:
+ case G_FILE_GLSL_NO_SHADOWS:
+ case G_FILE_GLSL_NO_RAMPS:
+ case G_FILE_GLSL_NO_NODES:
+ case G_FILE_GLSL_NO_EXTRA_TEX:
+ G.fileflags ^= event;
+ GPU_materials_free();
+ allqueue(REDRAWINFO, 0);
+ allqueue(REDRAWVIEW3D, 0);
+ break;
+ default:
+ break;
+ }
+}
+
+static uiBlock *info_game_glslmenu(void *arg_unused)
+{
+ uiBlock *block;
+ short yco= 0, menuwidth=160;
+ int check;
+
+ block= uiNewBlock(&curarea->uiblocks, "game_glslmenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
+ uiBlockSetButmFunc(block, do_info_game_glslmenu, NULL);
+
+ check = (G.fileflags & G_FILE_GLSL_NO_LIGHTS)? ICON_CHECKBOX_DEHLT: ICON_CHECKBOX_HLT;
+ uiDefIconTextBut(block, BUTM, 1, check, "Enable Lights", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, G_FILE_GLSL_NO_LIGHTS,
+ "Enable using lights in GLSL materials.");
+ check = (G.fileflags & G_FILE_GLSL_NO_SHADERS)? ICON_CHECKBOX_DEHLT: ICON_CHECKBOX_HLT;
+ uiDefIconTextBut(block, BUTM, 1, check, "Enable Shaders", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, G_FILE_GLSL_NO_SHADERS,
+ "Enable using shaders other than Lambert in GLSL materials");
+ check = (G.fileflags & G_FILE_GLSL_NO_SHADOWS)? ICON_CHECKBOX_DEHLT: ICON_CHECKBOX_HLT;
+ uiDefIconTextBut(block, BUTM, 1, check, "Enable Shadows", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, G_FILE_GLSL_NO_SHADOWS,
+ "Enable using shadows in GLSL materials");
+ check = (G.fileflags & G_FILE_GLSL_NO_RAMPS)? ICON_CHECKBOX_DEHLT: ICON_CHECKBOX_HLT;
+ uiDefIconTextBut(block, BUTM, 1, check, "Enable Ramps", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, G_FILE_GLSL_NO_RAMPS,
+ "Enable using ramps in GLSL materials");
+ check = (G.fileflags & G_FILE_GLSL_NO_NODES)? ICON_CHECKBOX_DEHLT: ICON_CHECKBOX_HLT;
+ uiDefIconTextBut(block, BUTM, 1, check, "Enable Nodes", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, G_FILE_GLSL_NO_NODES,
+ "Enable using nodes in GLSL materials.");
+ check = (G.fileflags & G_FILE_GLSL_NO_EXTRA_TEX)? ICON_CHECKBOX_DEHLT: ICON_CHECKBOX_HLT;
+ uiDefIconTextBut(block, BUTM, 1, check, "Enable Extra Textures", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, G_FILE_GLSL_NO_EXTRA_TEX,
+ "Enable using texture channels other than Col and Alpha in GLSL materials.");
+
+ uiBlockSetDirection(block, UI_RIGHT);
+ uiTextBoundsBlock(block, 50);
+
+ return block;
+}
+
static void do_info_gamemenu(void *arg, int event)
{
switch (event) {
case G_FILE_ENABLE_ALL_FRAMES:
- case G_FILE_DIAPLAY_LISTS:
+ case G_FILE_DISPLAY_LISTS:
case G_FILE_SHOW_FRAMERATE:
case G_FILE_SHOW_DEBUG_PROPS:
case G_FILE_AUTOPLAY:
case G_FILE_GAME_TO_IPO:
- case G_FILE_GAME_MAT:
case G_FILE_SHOW_PHYSICS:
G.fileflags ^= event;
break;
+ case G_FILE_GAME_MAT|G_FILE_GAME_MAT_GLSL:
+ G.fileflags &= ~(G_FILE_GAME_MAT|G_FILE_GAME_MAT_GLSL);
+ break;
+ case G_FILE_GAME_MAT:
+ G.fileflags |= G_FILE_GAME_MAT;
+ G.fileflags &= ~G_FILE_GAME_MAT_GLSL;
+ break;
+ case G_FILE_GAME_MAT_GLSL:
+ if(!GPU_extensions_minimum_support())
+ error("GLSL not supported with this graphics card or driver.");
+ G.fileflags |= (G_FILE_GAME_MAT|G_FILE_GAME_MAT_GLSL);
+ break;
default:
; /* ignore the rest */
}
@@ -1633,22 +1699,14 @@ static uiBlock *info_gamemenu(void *arg_unused)
uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Record Game Physics to IPO", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, G_FILE_GAME_TO_IPO, "");
} else {
- if(G.fileflags & G_FILE_DIAPLAY_LISTS) {
- uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Generate Display Lists", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, G_FILE_DIAPLAY_LISTS, "");
+ if(G.fileflags & G_FILE_DISPLAY_LISTS) {
+ uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Generate Display Lists", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, G_FILE_DISPLAY_LISTS, "");
} else {
- uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Generate Display Lists", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, G_FILE_DIAPLAY_LISTS, "");
+ uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Generate Display Lists", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, G_FILE_DISPLAY_LISTS, "");
}
uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Record Game Physics to IPO", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, G_FILE_GAME_TO_IPO, "");
}
- if(G.fileflags & G_FILE_GAME_MAT) {
- uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Use Blender Materials", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, G_FILE_GAME_MAT, "");
- } else {
- uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Use Blender Materials", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, G_FILE_GAME_MAT, "");
- }
-
-
-
if(G.fileflags & G_FILE_SHOW_FRAMERATE) {
uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Show Framerate and Profile", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, G_FILE_SHOW_FRAMERATE, "");
} else {
@@ -1667,6 +1725,28 @@ static uiBlock *info_gamemenu(void *arg_unused)
} else {
uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Show Debug Properties", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, G_FILE_SHOW_DEBUG_PROPS, "");
}
+
+ uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 1, 0, "");
+
+ if(!(G.fileflags & G_FILE_GAME_MAT)) {
+ uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Texture Face Materials", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
+ } else {
+ uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Texture Face Materials", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, G_FILE_GAME_MAT|G_FILE_GAME_MAT_GLSL, "");
+ }
+
+ if((G.fileflags & G_FILE_GAME_MAT) && !(G.fileflags & G_FILE_GAME_MAT_GLSL)) {
+ uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Blender Multitexture Materials", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
+ } else {
+ uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Blender Multitexture Materials", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, G_FILE_GAME_MAT, "");
+ }
+
+ if((G.fileflags & G_FILE_GAME_MAT) && (G.fileflags & G_FILE_GAME_MAT_GLSL)) {
+ uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Blender GLSL Materials", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
+ } else {
+ uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Blender GLSL Materials", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, G_FILE_GAME_MAT_GLSL, "");
+ }
+
+ uiDefIconTextBlockBut(block, info_game_glslmenu, NULL, ICON_RIGHTARROW_THIN, "GLSL Material Settings", 0, yco-=20, menuwidth, 19, "");
uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 1, 0, "");
@@ -2106,13 +2186,16 @@ static void info_text(int x, int y)
{
Object *ob= OBACT;
extern float hashvectf[];
- extern unsigned long mem_in_use, mmap_in_use;
+ uintptr_t mem_in_use, mmap_in_use;
unsigned int swatch_color;
float fac1, fac2, fac3;
char infostr[300], memstr[64];
char *headerstr, *s;
int hsize;
+ mem_in_use= MEM_get_memory_in_use();
+ mmap_in_use= MEM_get_mapped_memory_in_use();
+
s= memstr + sprintf(memstr," | Mem:%.2fM ", ((mem_in_use-mmap_in_use)>>10)/1024.0);
if(mmap_in_use)
sprintf(s,"(%.2fM) ", ((mmap_in_use)>>10)/1024.0);
diff --git a/source/blender/src/header_ipo.c b/source/blender/src/header_ipo.c
index 59d542e72ec..27549a5b502 100644
--- a/source/blender/src/header_ipo.c
+++ b/source/blender/src/header_ipo.c
@@ -49,6 +49,7 @@
#include "DNA_key_types.h"
#include "DNA_lamp_types.h"
#include "DNA_material_types.h"
+#include "DNA_modifier_types.h"
#include "DNA_object_types.h"
#include "DNA_object_fluidsim.h"
#include "DNA_particle_types.h"
@@ -68,6 +69,7 @@
#include "BKE_key.h"
#include "BKE_main.h"
#include "BKE_material.h"
+#include "BKE_modifier.h"
#include "BKE_particle.h"
#include "BKE_texture.h"
#include "BKE_utildefines.h"
@@ -162,12 +164,13 @@ void spaceipo_assign_ipo(SpaceIpo *si, Ipo *ipo)
}
}
else if(si->blocktype==ID_FLUIDSIM) { // NT
- if( (ob->fluidsimSettings) &&
- (ob->fluidsimSettings->ipo) ) {
+ FluidsimModifierData *fluidmd = (FluidsimModifierData *)modifiers_findByType(ob, eModifierType_Fluidsim);
+ if( fluidmd && fluidmd->fss &&
+ (fluidmd->fss->ipo) ) {
// decrement users counter
- ob->fluidsimSettings->ipo->id.us--;
+ fluidmd->fss->ipo->id.us--;
}
- ob->fluidsimSettings->ipo = ipo;
+ fluidmd->fss->ipo = ipo;
}
else if(si->blocktype==ID_PA) {
ParticleSystem *psys=psys_get_current(ob);
@@ -920,7 +923,7 @@ static uiBlock *ipo_markermenu(void *arg_unused)
menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Duplicate Marker|Ctrl Shift D", 0, yco-=20,
menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
- uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Delete Marker|X", 0, yco-=20,
+ uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Delete Marker|Shift X", 0, yco-=20,
menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
@@ -974,6 +977,8 @@ static char *ipo_modeselect_pup(void)
str += sprintf(str,formatstring, "Texture",ID_TE, ICON_TEXTURE);
if(ob){
+ FluidsimModifierData *fluidmd = (FluidsimModifierData *)modifiers_findByType(ob, eModifierType_Fluidsim);
+
if ELEM4(ob->type, OB_MESH, OB_CURVE, OB_SURF, OB_LATTICE)
str += sprintf(str,formatstring, "Shape",ID_KE, ICON_EDIT);
if (ob->type==OB_ARMATURE)
@@ -981,7 +986,7 @@ static char *ipo_modeselect_pup(void)
#ifdef __CON_IPO
str += sprintf(str,formatstring, "Constraint",ID_CO, ICON_CONSTRAINT);
#endif
- if(ob->fluidsimFlag & OB_FLUIDSIM_ENABLE) {
+ if(fluidmd) {
str += sprintf(str,formatstring,"Fluidsim",ID_FLUIDSIM, ICON_WORLD);
}
@@ -1414,7 +1419,7 @@ void ipo_buttons(void)
uiClearButLock();
/* ZOOMBORDER */
- uiDefIconBut(block, BUT, B_IPOBORDER, ICON_BORDERMOVE, xco+=XIC,0,XIC,YIC, 0, 0, 0, 0, 0, "Zooms view to area");
+ uiDefIconBut(block, BUT, B_IPOBORDER, ICON_BORDERMOVE, xco+=XIC,0,XIC,YIC, 0, 0, 0, 0, 0, "Zooms view to area (Shift B)");
xco+=XIC/2;
diff --git a/source/blender/src/header_nla.c b/source/blender/src/header_nla.c
index 13bbf0a3999..d0031b2db7c 100644
--- a/source/blender/src/header_nla.c
+++ b/source/blender/src/header_nla.c
@@ -441,7 +441,7 @@ static uiBlock *nla_markermenu(void *arg_unused)
menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Duplicate Marker|Ctrl Shift D", 0, yco-=20,
menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
- uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Delete Marker|X", 0, yco-=20,
+ uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Delete Marker|Shift X", 0, yco-=20,
menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
diff --git a/source/blender/src/header_node.c b/source/blender/src/header_node.c
index 4c7b4aa80bc..d27a41c59f5 100644
--- a/source/blender/src/header_node.c
+++ b/source/blender/src/header_node.c
@@ -112,7 +112,7 @@ static void do_node_viewmenu(void *arg, int event)
break;
case 4: /* Grease Pencil */
add_blockhandler(curarea, NODES_HANDLER_GREASEPENCIL, UI_PNL_UNSTOW);
- break;
+ break;
}
allqueue(REDRAWNODE, 0);
}
@@ -602,11 +602,11 @@ static uiBlock *node_nodemenu(void *arg_unused)
if(snode->treetype==NTREE_COMPOSIT) {
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Execute Composite|E", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 10, "");
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Read Saved Render Results|R", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 8, "");
- uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Read Saved Full Sample Results|R", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 13, "");
+ uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Read Saved Full Sample Results|Shift R", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 13, "");
uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
- uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Connect Node to Viewer|Ctrl LMB", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 14, "");
+ uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Connect Node to Viewer|Ctrl RMB", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 14, "");
uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
}
diff --git a/source/blender/src/header_oops.c b/source/blender/src/header_oops.c
index ad65705b79d..68326c330ad 100644
--- a/source/blender/src/header_oops.c
+++ b/source/blender/src/header_oops.c
@@ -559,15 +559,15 @@ void oops_buttons(void)
else {
if(G.main->library.first)
#ifdef WITH_VERSE
- uiDefButS(block, MENU, B_REDR, "Outliner Display%t|Verse Servers %x9|Verse Sessions %x8|Libraries %x7|All Scenes %x0|Current Scene %x1|Visible Layers %x2|Groups %x6|Same Types %x5|Selected %x3|Active %x4", xco, 0, 100, 20, &soops->outlinevis, 0, 0, 0, 0, "");
+ uiDefButS(block, MENU, B_REDR, "Outliner Display%t|Verse Servers %x9|Verse Sessions %x8|Libraries %x7|All Scenes %x0|Current Scene %x1|Visible Layers %x2|Groups %x6|Same Types %x5|Selected %x3|Active %x4|Sequence %x10", xco, 0, 100, 20, &soops->outlinevis, 0, 0, 0, 0, "");
#else
- uiDefButS(block, MENU, B_REDR, "Outliner Display%t|Libraries %x7|All Scenes %x0|Current Scene %x1|Visible Layers %x2|Groups %x6|Same Types %x5|Selected %x3|Active %x4", xco, 0, 100, 20, &soops->outlinevis, 0, 0, 0, 0, "");
+ uiDefButS(block, MENU, B_REDR, "Outliner Display%t|Libraries %x7|All Scenes %x0|Current Scene %x1|Visible Layers %x2|Groups %x6|Same Types %x5|Selected %x3|Active %x4|Sequence %x10", xco, 0, 100, 20, &soops->outlinevis, 0, 0, 0, 0, "");
#endif /* WITH_VERSE */
else
#ifdef WITH_VERSE
- uiDefButS(block, MENU, B_REDR, "Outliner Display%t|Verse Servers %x9|Verse Sessions %x8|All Scenes %x0|Current Scene %x1|Visible Layers %x2|Groups %x6|Same Types %x5|Selected %x3|Active %x4", xco, 0, 100, 20, &soops->outlinevis, 0, 0, 0, 0, "");
+ uiDefButS(block, MENU, B_REDR, "Outliner Display%t|Verse Servers %x9|Verse Sessions %x8|All Scenes %x0|Current Scene %x1|Visible Layers %x2|Groups %x6|Same Types %x5|Selected %x3|Active %x4|Sequence %x10", xco, 0, 100, 20, &soops->outlinevis, 0, 0, 0, 0, "");
#else
- uiDefButS(block, MENU, B_REDR, "Outliner Display%t|All Scenes %x0|Current Scene %x1|Visible Layers %x2|Groups %x6|Same Types %x5|Selected %x3|Active %x4", xco, 0, 100, 20, &soops->outlinevis, 0, 0, 0, 0, "");
+ uiDefButS(block, MENU, B_REDR, "Outliner Display%t|All Scenes %x0|Current Scene %x1|Visible Layers %x2|Groups %x6|Same Types %x5|Selected %x3|Active %x4|Sequence %x10", xco, 0, 100, 20, &soops->outlinevis, 0, 0, 0, 0, "");
#endif /* WITH_VERSE */
}
diff --git a/source/blender/src/header_script.c b/source/blender/src/header_script.c
index 3c96e1692bf..53c4b9b5953 100644
--- a/source/blender/src/header_script.c
+++ b/source/blender/src/header_script.c
@@ -63,12 +63,14 @@
#include "blendef.h"
#include "mydevice.h"
+#include "BLO_sys_types.h" // for intptr_t support
+
/* ********************** SCRIPT ****************************** */
/* action executed after clicking in Scripts menu */
static void do_scripts_submenus(void *int_arg, int event)
{
- int menutype = (long)int_arg;
+ int menutype = (intptr_t)int_arg;
BPY_menu_do_python (menutype, event);
@@ -80,7 +82,7 @@ static uiBlock *script_scripts_submenus(void *int_menutype)
uiBlock *block;
short yco = 20, menuwidth = 120;
BPyMenu *pym;
- int i = 0, menutype = (long)int_menutype;
+ int i = 0, menutype = (intptr_t)int_menutype;
if ((menutype < 0) || (menutype > PYMENU_SCRIPTS_MENU_TOTAL))
return NULL;
@@ -132,7 +134,7 @@ static uiBlock *script_scriptsmenu(void *arg_unused)
uiBlockSetButmFunc(block, do_script_scriptsmenu, NULL);
for (i = 0; i < PYMENU_SCRIPTS_MENU_TOTAL; i++) {
- uiDefIconTextBlockBut(block, script_scripts_submenus, (void *)(long)i, ICON_RIGHTARROW_THIN, BPyMenu_group_itoa(i), 0, yco-=20, menuwidth, 19, "");
+ uiDefIconTextBlockBut(block, script_scripts_submenus, (void *)(intptr_t)i, ICON_RIGHTARROW_THIN, BPyMenu_group_itoa(i), 0, yco-=20, menuwidth, 19, "");
}
uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
diff --git a/source/blender/src/header_seq.c b/source/blender/src/header_seq.c
index e5a63b9fe45..8138918877f 100644
--- a/source/blender/src/header_seq.c
+++ b/source/blender/src/header_seq.c
@@ -600,7 +600,7 @@ static uiBlock *seq_markermenu(void *arg_unused)
menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Duplicate Marker|Ctrl Shift D", 0, yco-=20,
menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
- uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Delete Marker", 0, yco-=20,
+ uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Delete Marker|Shift X", 0, yco-=20,
menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
diff --git a/source/blender/src/header_text.c b/source/blender/src/header_text.c
index cf6d21ff264..9bb59a81192 100644
--- a/source/blender/src/header_text.c
+++ b/source/blender/src/header_text.c
@@ -36,12 +36,25 @@
#include <string.h>
#include <stdio.h>
+/* file time checking */
+#include <ctype.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+
+#ifndef _WIN32
+#include <unistd.h>
+#else
+#include <io.h>
+#include "BLI_winstuff.h"
+#endif
+
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
#include "BMF_Api.h"
#include "BIF_language.h"
+#include "MEM_guardedalloc.h"
#include "BSE_headerbuttons.h"
@@ -52,6 +65,7 @@
#include "DNA_constraint_types.h"
#include "DNA_action_types.h"
+#include "BIF_gl.h" /* for glRasterPos2i */
#include "BIF_drawtext.h"
#include "BIF_interface.h"
#include "BIF_resources.h"
@@ -68,12 +82,16 @@
#include "BSE_filesel.h"
+#include "BLI_blenlib.h"
+
#include "BPY_extern.h"
#include "BPY_menus.h"
#include "blendef.h"
#include "mydevice.h"
+extern void redraw_alltext(void); /* defined in drawtext.c */
+
void do_text_buttons(unsigned short event)
{
SpaceText *st= curarea->spacedata.first; /* bad but cant pass as an arg here */
@@ -128,7 +146,7 @@ void do_text_buttons(unsigned short event)
st->top= 0;
pop_space_text(st);
- if (st->showsyntax) get_format_string(st);
+ if (st->showsyntax) txt_format_text(st);
allqueue(REDRAWTEXT, 0);
allqueue(REDRAWHEADERS, 0);
}
@@ -194,14 +212,20 @@ void do_text_buttons(unsigned short event)
break;
case B_TAB_NUMBERS:
- if (st->showsyntax) get_format_string(st);
+ if (st->showsyntax) txt_format_text(st);
allqueue(REDRAWTEXT, 0);
allqueue(REDRAWHEADERS, 0);
break;
case B_SYNTAX:
- if (st->showsyntax) {
- get_format_string(st);
- }
+ if (st->showsyntax) txt_format_text(st);
+ allqueue(REDRAWTEXT, 0);
+ allqueue(REDRAWHEADERS, 0);
+ break;
+ case B_TEXTPLUGINS:
+ allqueue(REDRAWHEADERS, 0);
+ break;
+ case B_WORDWRAP:
+ st->left= 0;
allqueue(REDRAWTEXT, 0);
allqueue(REDRAWHEADERS, 0);
break;
@@ -239,12 +263,42 @@ static uiBlock *text_template_scriptsmenu (void *args_unused)
return block;
}
+static void do_text_plugin_scriptsmenu(void *arg, int event)
+{
+ BPY_menu_do_python(PYMENU_TEXTPLUGIN, event);
+
+ allqueue(REDRAWIMAGE, 0);
+}
+
+static uiBlock *text_plugin_scriptsmenu (void *args_unused)
+{
+ uiBlock *block;
+ BPyMenu *pym;
+ int i= 0;
+ short yco = 20, menuwidth = 120;
+
+ block= uiNewBlock(&curarea->uiblocks, "text_plugin_scriptsmenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
+ uiBlockSetButmFunc(block, do_text_plugin_scriptsmenu, NULL);
+
+ /* note that we acount for the N previous entries with i+20: */
+ for (pym = BPyMenuTable[PYMENU_TEXTPLUGIN]; pym; pym = pym->next, i++) {
+
+ uiDefIconTextBut(block, BUTM, 1, ICON_PYTHON, pym->name, 0, yco-=20, menuwidth, 19,
+ NULL, 0.0, 0.0, 1, i,
+ pym->tooltip?pym->tooltip:pym->filename);
+ }
+
+ uiBlockSetDirection(block, UI_RIGHT);
+ uiTextBoundsBlock(block, 60);
+
+ return block;
+}
+
/* action executed after clicking in File menu */
static void do_text_filemenu(void *arg, int event)
{
SpaceText *st= curarea->spacedata.first; /* bad but cant pass as an arg here */
Text *text;
- ScrArea *sa;
if (st==NULL || st->spacetype != SPACE_TEXT) return;
@@ -268,7 +322,7 @@ static void do_text_filemenu(void *arg, int event)
if (!reopen_text(text)) {
error("Could not reopen file");
}
- if (st->showsyntax) get_format_string(st);
+ if (st->showsyntax) txt_format_text(st);
}
break;
case 5:
@@ -277,9 +331,14 @@ static void do_text_filemenu(void *arg, int event)
txt_write_file(text);
break;
case 6:
- run_python_script(st);
+ text->flags |= TXT_ISMEM | TXT_ISDIRTY | TXT_ISTMP;
+ MEM_freeN(text->name);
+ text->name= NULL;
break;
case 7:
+ run_python_script(st);
+ break;
+ case 8:
{
Object *ob;
bConstraint *con;
@@ -318,12 +377,8 @@ static void do_text_filemenu(void *arg, int event)
default:
break;
}
- for (sa= G.curscreen->areabase.first; sa; sa= sa->next) {
- SpaceText *st= sa->spacedata.first;
- if (st && st->spacetype==SPACE_TEXT) {
- scrarea_queue_redraw(sa);
- }
- }
+
+ redraw_alltext();
}
/* action executed after clicking in Edit menu */
@@ -331,7 +386,6 @@ static void do_text_editmenu(void *arg, int event)
{
SpaceText *st= curarea->spacedata.first; /* bad but cant pass as an arg here */
Text *text;
- ScrArea *sa;
if (st==NULL || st->spacetype != SPACE_TEXT) return;
@@ -340,11 +394,17 @@ static void do_text_editmenu(void *arg, int event)
switch(event) {
case 1:
txt_do_undo(text);
+ pop_space_text(st);
break;
case 2:
txt_do_redo(text);
+ pop_space_text(st);
break;
case 3:
+ if (text && text->id.lib) {
+ error_libdata();
+ break;
+ }
txt_copy_clipboard(text);
txt_cut_sel(text);
pop_space_text(st);
@@ -354,8 +414,12 @@ static void do_text_editmenu(void *arg, int event)
txt_copy_clipboard(text);
break;
case 5:
+ if (text && text->id.lib) {
+ error_libdata();
+ break;
+ }
txt_paste_clipboard(text);
- if (st->showsyntax) get_format_string(st);
+ if (st->showsyntax) txt_format_text(st);
break;
case 6:
txt_print_cutbuffer();
@@ -364,21 +428,17 @@ static void do_text_editmenu(void *arg, int event)
jumptoline_interactive(st);
break;
case 8:
- txt_find_panel(st,1);
- break;
case 9:
- txt_find_panel(st,0);
+ find_and_replace(st, 0);
+ break;
+ case 10:
+ find_and_replace(st, 1);
break;
default:
break;
}
- for (sa= G.curscreen->areabase.first; sa; sa= sa->next) {
- SpaceText *st= sa->spacedata.first;
- if (st && st->spacetype==SPACE_TEXT) {
- scrarea_queue_redraw(sa);
- }
- }
+ redraw_alltext();
}
/* action executed after clicking in View menu */
@@ -386,7 +446,6 @@ static void do_text_editmenu_viewmenu(void *arg, int event)
{
SpaceText *st= curarea->spacedata.first; /* bad but cant pass as an arg here */
Text *text;
- ScrArea *sa;
if (st==NULL || st->spacetype != SPACE_TEXT) return;
@@ -404,13 +463,8 @@ static void do_text_editmenu_viewmenu(void *arg, int event)
default:
break;
}
-
- for (sa= G.curscreen->areabase.first; sa; sa= sa->next) {
- SpaceText *st= sa->spacedata.first;
- if (st && st->spacetype==SPACE_TEXT) {
- scrarea_queue_redraw(sa);
- }
- }
+
+ redraw_alltext();
}
/* action executed after clicking in Select menu */
@@ -418,7 +472,6 @@ static void do_text_editmenu_selectmenu(void *arg, int event)
{
SpaceText *st= curarea->spacedata.first; /* bad but cant pass as an arg here */
Text *text;
- ScrArea *sa;
if (st==NULL || st->spacetype != SPACE_TEXT) return;
@@ -435,12 +488,52 @@ static void do_text_editmenu_selectmenu(void *arg, int event)
break;
}
- for (sa= G.curscreen->areabase.first; sa; sa= sa->next) {
- SpaceText *st= sa->spacedata.first;
- if (st && st->spacetype==SPACE_TEXT) {
- scrarea_queue_redraw(sa);
+ redraw_alltext();
+}
+
+/* action executed after clicking in Markers menu */
+static void do_text_editmenu_markermenu(void *arg, int event)
+{
+ SpaceText *st= curarea->spacedata.first; /* bad but cant pass as an arg here */
+ Text *text;
+ TextMarker *mrk;
+ int lineno;
+
+ if (st==NULL || st->spacetype != SPACE_TEXT) return;
+
+ text = st->text;
+
+ switch(event) {
+ case 1:
+ txt_clear_markers(text, 0, 0);
+ break;
+ case 2:
+ lineno= txt_get_span(text->lines.first, text->curl);
+ mrk= text->markers.first;
+ while (mrk && (mrk->lineno<lineno || (mrk->lineno==lineno && mrk->start <= text->curc)))
+ mrk= mrk->next;
+ if (!mrk) mrk= text->markers.first;
+ if (mrk) {
+ txt_move_to(text, mrk->lineno, mrk->start, 0);
+ txt_move_to(text, mrk->lineno, mrk->end, 1);
}
+ break;
+ case 3:
+ lineno= txt_get_span(text->lines.first, text->curl);
+ mrk= text->markers.last;
+ while (mrk && (mrk->lineno>lineno || (mrk->lineno==lineno && mrk->end > text->curc)))
+ mrk= mrk->prev;
+ if (!mrk) mrk= text->markers.last;
+ if (mrk) {
+ txt_move_to(text, mrk->lineno, mrk->start, 0);
+ txt_move_to(text, mrk->lineno, mrk->end, 1);
+ }
+ break;
+ default:
+ break;
}
+
+ redraw_alltext();
}
/* action executed after clicking in Format menu */
@@ -448,7 +541,6 @@ static void do_text_formatmenu(void *arg, int event)
{
SpaceText *st= curarea->spacedata.first; /* bad but cant pass as an arg here */
Text *text;
- ScrArea *sa;
if (st==NULL || st->spacetype != SPACE_TEXT) return;
@@ -456,6 +548,10 @@ static void do_text_formatmenu(void *arg, int event)
switch(event) {
case 3:
+ if (text && text->id.lib) {
+ error_libdata();
+ break;
+ }
if (txt_has_sel(text)) {
txt_order_cursors(text);
indent(text);
@@ -466,6 +562,10 @@ static void do_text_formatmenu(void *arg, int event)
break;
}
case 4:
+ if (text && text->id.lib) {
+ error_libdata();
+ break;
+ }
if ( txt_has_sel(text)) {
txt_order_cursors(text);
unindent(text);
@@ -473,18 +573,26 @@ static void do_text_formatmenu(void *arg, int event)
}
break;
case 5:
+ if (text && text->id.lib) {
+ error_libdata();
+ break;
+ }
if ( txt_has_sel(text)) {
txt_order_cursors(text);
comment(text);
- if (st->showsyntax) get_format_string(st);
+ if (st->showsyntax) txt_format_text(st);
break;
}
break;
case 6:
+ if (text && text->id.lib) {
+ error_libdata();
+ break;
+ }
if ( txt_has_sel(text)) {
txt_order_cursors(text);
uncomment(text);
- if (st->showsyntax) get_format_string(st);
+ if (st->showsyntax) txt_format_text(st);
break;
}
break;
@@ -492,12 +600,7 @@ static void do_text_formatmenu(void *arg, int event)
break;
}
- for (sa= G.curscreen->areabase.first; sa; sa= sa->next) {
- SpaceText *st= sa->spacedata.first;
- if (st && st->spacetype==SPACE_TEXT) {
- scrarea_queue_redraw(sa);
- }
- }
+ redraw_alltext();
}
/* View menu */
@@ -536,6 +639,25 @@ static uiBlock *text_editmenu_selectmenu(void *arg_unused)
return block;
}
+/* Select menu */
+static uiBlock *text_editmenu_markermenu(void *arg_unused)
+{
+ uiBlock *block;
+ short yco = 20, menuwidth = 120;
+
+ block= uiNewBlock(&curarea->uiblocks, "text_editmenu_markermenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
+ uiBlockSetButmFunc(block, do_text_editmenu_markermenu, NULL);
+
+ uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear All", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 1, "");
+ uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Next Marker", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 2, "");
+ uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Previous Marker", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 3, "");
+
+ uiBlockSetDirection(block, UI_RIGHT);
+ uiTextBoundsBlock(block, 60);
+
+ return block;
+}
+
void do_text_formatmenu_convert(void *arg, int event)
{
SpaceText *st= curarea->spacedata.first; /* bad but cant pass as an arg here */
@@ -649,10 +771,12 @@ static uiBlock *text_editmenu(void *arg_unused)
uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
uiDefIconTextBlockBut(block, text_editmenu_viewmenu, NULL, ICON_RIGHTARROW_THIN, "View|Alt Shift V ", 0, yco-=20, 120, 19, "");
uiDefIconTextBlockBut(block, text_editmenu_selectmenu, NULL, ICON_RIGHTARROW_THIN, "Select|Alt Shift S ", 0, yco-=20, 120, 19, "");
+ uiDefIconTextBlockBut(block, text_editmenu_markermenu, NULL, ICON_RIGHTARROW_THIN, "Markers", 0, yco-=20, 120, 19, "");
uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Jump...|Alt J", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 7, "");
- uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Find...|Alt Ctrl F", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 8, "");
- uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Find Again|Alt F", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 9, "");
+ uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Find And Replace...|Alt F", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 8, "");
+ uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Find Next|Alt F", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 9, "");
+ uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Replace|Alt H", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 10, "");
uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
uiDefIconTextBlockBut(block, text_editmenu_to3dmenu, NULL, ICON_RIGHTARROW_THIN, "Text to 3d Object", 0, yco-=20, 120, 19, "");
@@ -690,17 +814,21 @@ static uiBlock *text_filemenu(void *arg_unused)
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Save|Alt S", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 4, "");
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Save As...", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 5, "");
+ if (text->name)
+ uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Make Internal", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 6, "");
+
uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
- uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Run Python Script|Alt P", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 6, "");
+ uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Run Python Script|Alt P", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 7, "");
if (BPY_is_pyconstraint(text))
- uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Refresh All PyConstraints", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 7, "");
+ uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Refresh All PyConstraints", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 8, "");
uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
}
uiDefIconTextBlockBut(block, text_template_scriptsmenu, NULL, ICON_RIGHTARROW_THIN, "Script Templates", 0, yco-=20, 120, 19, "");
+ uiDefIconTextBlockBut(block, text_plugin_scriptsmenu, NULL, ICON_RIGHTARROW_THIN, "Text Plugins", 0, yco-=20, 120, 19, "");
if(curarea->headertype==HEADERTOP) {
uiBlockSetDirection(block, UI_DOWN);
@@ -714,14 +842,138 @@ static uiBlock *text_filemenu(void *arg_unused)
return block;
}
+
+/* text sync functions */
+
+/* returns 0 if file on disk is the same or Text is in memory only
+ returns 1 if file has been modified on disk since last local edit
+ returns 2 if file on disk has been deleted
+ -1 is returned if an error occurs
+*/
+static int txt_file_modified(Text *text)
+{
+ struct stat st;
+ int result;
+ char file[FILE_MAXDIR+FILE_MAXFILE];
+
+ if (!text || !text->name)
+ return 0;
+
+ BLI_strncpy(file, text->name, FILE_MAXDIR+FILE_MAXFILE);
+ BLI_convertstringcode(file, G.sce);
+
+ if (!BLI_exists(file))
+ return 2;
+
+ result = stat(file, &st);
+
+ if(result == -1)
+ return -1;
+
+ if((st.st_mode & S_IFMT) != S_IFREG)
+ return -1;
+
+ if (st.st_mtime > text->mtime)
+ return 1;
+
+ return 0;
+}
+
+static void txt_ignore_modified(Text *text) {
+ struct stat st;
+ int result;
+ char file[FILE_MAXDIR+FILE_MAXFILE];
+
+ if (!text || !text->name) return;
+
+ BLI_strncpy(file, text->name, FILE_MAXDIR+FILE_MAXFILE);
+ BLI_convertstringcode(file, G.sce);
+
+ if (!BLI_exists(file)) return;
+
+ result = stat(file, &st);
+
+ if(result == -1 || (st.st_mode & S_IFMT) != S_IFREG)
+ return;
+
+ text->mtime= st.st_mtime;
+}
+
+static short do_modification_check(SpaceText *st_v) {
+ SpaceText *st = (SpaceText *)st_v;
+ Text *text= st->text;
+
+ switch (txt_file_modified(text)) {
+ case 1:
+ /* Modified locally and externally, ahhh. Offer more possibilites. */
+ if (text->flags & TXT_ISDIRTY) {
+ switch (pupmenu("File Modified Outside and Inside Blender %t|Load outside changes (ignore local changes) %x0|Save local changes (ignore outside changes) %x1|Make text internal (separate copy) %x2")) {
+ case 0:
+ reopen_text(text);
+ if (st->showsyntax) txt_format_text(st);
+ return 1;
+ case 1:
+ txt_write_file(text);
+ return 1;
+ case 2:
+ text->flags |= TXT_ISMEM | TXT_ISDIRTY | TXT_ISTMP;
+ MEM_freeN(text->name);
+ text->name= NULL;
+ return 1;
+ }
+ } else {
+ switch (pupmenu("File Modified Outside Blender %t|Reload from disk %x0|Make text internal (separate copy) %x1|Ignore %x2")) {
+ case 0:
+ if (text->compiled) BPY_free_compiled_text(text);
+ text->compiled = NULL;
+ reopen_text(text);
+ if (st->showsyntax) txt_format_text(st);
+ return 1;
+ case 1:
+ text->flags |= TXT_ISMEM | TXT_ISDIRTY | TXT_ISTMP;
+ MEM_freeN(text->name);
+ text->name= NULL;
+ return 1;
+ case 2:
+ txt_ignore_modified(text);
+ return 1;
+ }
+ }
+ break;
+ case 2:
+ switch (pupmenu("File Deleted Outside Blender %t|Make text internal %x0|Recreate file %x1")) {
+ case 0:
+ text->flags |= TXT_ISMEM | TXT_ISDIRTY | TXT_ISTMP;
+ MEM_freeN(text->name);
+ text->name= NULL;
+ return 1;
+ case 1:
+ txt_write_file(text);
+ return 1;
+ }
+ break;
+ default:
+ break;
+ }
+ return 0;
+}
+
+static void do_modification_func(void *st_v, void *dummy)
+{
+ if (do_modification_check((SpaceText *)st_v))
+ redraw_alltext();
+}
+
/* header */
+#define HEADER_PATH_MAX 260
void text_buttons(void)
{
uiBlock *block;
SpaceText *st= curarea->spacedata.first;
Text *text;
short xco, xmax;
- char naam[256];
+ char naam[256], fname[HEADER_PATH_MAX], headtxt[HEADER_PATH_MAX+17];
+ int len;
if (st==NULL || st->spacetype != SPACE_TEXT) return;
@@ -756,8 +1008,8 @@ void text_buttons(void)
if((curarea->flag & HEADER_NO_PULLDOWN)==0) {
uiBlockSetEmboss(block, UI_EMBOSSP);
- xmax= GetButStringLength("File");
- uiDefPulldownBut(block,text_filemenu, NULL, "File", xco, 0, xmax, 20, "");
+ xmax= GetButStringLength("Text");
+ uiDefPulldownBut(block,text_filemenu, NULL, "Text", xco, 0, xmax, 20, "");
xco+=xmax;
if(text) {
@@ -779,14 +1031,26 @@ void text_buttons(void)
else uiDefIconBut(block, BUT,B_FULL, ICON_FULLSCREEN, xco,0,XIC,YIC, 0, 0, 0, 0, 0, "Makes current window full screen (CTRL+Down arrow)");
uiDefIconButI(block, ICONTOG, B_TEXTLINENUM, ICON_LONGDISPLAY, xco+=XIC,0,XIC,YIC, &st->showlinenrs, 0, 0, 0, 0, "Displays line numbers");
-
- uiDefIconButI(block, ICONTOG, B_SYNTAX, ICON_SYNTAX, xco+=XIC,0,XIC,YIC, &st->showsyntax, 0, 0, 0, 0, "Enables Syntax Highlighting");
+ uiDefIconButI(block, ICONTOG, B_WORDWRAP, ICON_WORDWRAP, xco+=XIC,0,XIC,YIC, &st->wordwrap, 0, 0, 0, 0, "Enables word wrap");
+ uiDefIconButI(block, ICONTOG, B_SYNTAX, ICON_SYNTAX, xco+=XIC,0,XIC,YIC, &st->showsyntax, 0, 0, 0, 0, "Enables syntax highlighting");
+ uiDefIconButI(block, ICONTOG, B_TEXTPLUGINS, ICON_PYTHON, xco+=XIC,0,XIC,YIC, &st->doplugins, 0, 0, 0, 0, "Enables Python text plugins");
uiBlockEndAlign(block);
+ /* Warning button if text is out of date*/
+ if (text && txt_file_modified(text)) {
+ uiBut *bt;
+ xco+= XIC;
+ uiBlockSetCol(block, TH_REDALERT);
+ bt= uiDefIconBut(block, BUT, B_NOP, ICON_HELP, xco+=XIC,0,XIC,YIC, 0, 0, 0, 0, 0, "External text is out of sync, click for options to resolve the conflict");
+ uiButSetFunc(bt, do_modification_func, (void *)st, NULL);
+ uiBlockSetCol(block, TH_AUTO);
+ }
+
/* STD TEXT BUTTONS */
xco+= 2*XIC;
xco= std_libbuttons(block, xco, 0, 0, NULL, B_TEXTBROWSE, ID_TXT, 0, (ID*)st->text, 0, &(st->menunr), 0, 0, B_TEXTDELETE, 0, 0);
-
+ xco+=XIC;
+
/*
if (st->text) {
if (st->text->flags & TXT_ISDIRTY && (st->text->flags & TXT_ISEXT || !(st->text->flags & TXT_ISMEM)))
@@ -799,14 +1063,35 @@ void text_buttons(void)
}
*/
- xco+=XIC;
+
if(st->font_id>1) st->font_id= 0;
uiDefButI(block, MENU, B_TEXTFONT, "Screen 12 %x0|Screen 15%x1", xco,0,100,YIC, &st->font_id, 0, 0, 0, 0, "Displays available fonts");
xco+=110;
- uiDefButI(block, NUM, B_TAB_NUMBERS, "Tab:", xco, 0, XIC+50, YIC, &st->tabnumber, 2, 8, 0, 0, "Set spacing of Tab");
+ uiDefButI(block, NUM, B_TAB_NUMBERS, "Tab:", xco, 0, XIC+50, YIC, &st->tabnumber, 2, 8, 0, 0, "Set spacing of Tab");
xco+= XIC+50;
-
+
+ /* File info */
+ if (text) {
+ if (text->name) {
+ len = strlen(text->name);
+ if (len > HEADER_PATH_MAX-1)
+ len = HEADER_PATH_MAX-1;
+ strncpy(fname, text->name, len);
+ fname[len]='\0';
+ if (text->flags & TXT_ISDIRTY)
+ sprintf(headtxt, "File: *%s (unsaved)", fname);
+ else
+ sprintf(headtxt, "File: %s", fname);
+ } else {
+ sprintf(headtxt, text->id.lib?"Text: External":"Text: Internal");
+ }
+ BIF_ThemeColor(TH_MENU_TEXT);
+ glRasterPos2i(xco+=XIC, 5);
+ BMF_DrawString(G.font, headtxt);
+ xco += BMF_GetStringWidth(G.font, headtxt);
+ }
+
/* always as last */
curarea->headbutlen= xco+2*XIC;
diff --git a/source/blender/src/header_time.c b/source/blender/src/header_time.c
index 9a77a4c44eb..51f71e5bdab 100644
--- a/source/blender/src/header_time.c
+++ b/source/blender/src/header_time.c
@@ -45,6 +45,7 @@
#include "BIF_gl.h"
#include "BIF_interface.h"
+#include "BIF_keyframing.h"
#include "BIF_resources.h"
#include "BIF_screen.h"
#include "BIF_space.h"
@@ -130,6 +131,17 @@ void do_time_buttons(ScrArea *sa, unsigned short event)
BIF_undo_push("Set anim-preview range");
allqueue(REDRAWALL, 0);
break;
+
+ case B_TL_INSERTKEY:
+ /* insert keyframe */
+ common_insertkey();
+ allqueue(REDRAWTIME, 1);
+ break;
+ case B_TL_DELETEKEY:
+ /* delete keyframe */
+ common_deletekey();
+ allqueue(REDRAWTIME, 1);
+ break;
}
}
@@ -542,21 +554,31 @@ void time_buttons(ScrArea *sa)
xco+= XIC+8;
uiDefIconButBitS(block, TOG, AUTOKEY_ON, REDRAWINFO, ICON_REC,
- xco, 0, XIC, YIC, &(U.autokey_mode), 0, 0, 0, 0, "Automatic keyframe insertion for Objects and Bones");
+ xco, 0, XIC, YIC, &(G.scene->autokey_mode), 0, 0, 0, 0, "Automatic keyframe insertion for Objects and Bones");
xco+= XIC;
if (IS_AUTOKEY_ON) {
uiDefButS(block, MENU, REDRAWINFO,
"Auto-Keying Mode %t|Add/Replace Keys%x3|Replace Keys %x5",
- xco, 0, 3*XIC, YIC, &(U.autokey_mode), 0, 1, 0, 0,
+ xco, 0, 3.5*XIC, YIC, &(G.scene->autokey_mode), 0, 1, 0, 0,
"Mode of automatic keyframe insertion for Objects and Bones");
xco+= (4*XIC);
}
xco+= 16;
-
+
+ uiDefIconBut(block, BUT, B_TL_INSERTKEY, ICON_KEY_HLT,
+ xco, 0, XIC, YIC, 0, 0, 0, 0, 0, "Insert Keyframe for the context of the largest area (IKEY)");
+ xco+= XIC+4;
+ uiDefIconBut(block, BUT, B_TL_DELETEKEY, ICON_KEY_DEHLT,
+ xco, 0, XIC, YIC, 0, 0, 0, 0, 0, "Delete Keyframe for the context of the largest area (ALTKEY-IKEY)");
+ xco+= XIC+4;
+
+ xco+= 16;
+
uiDefIconButBitI(block, TOG, TIME_WITH_SEQ_AUDIO, B_DIFF, ICON_SPEAKER,
xco, 0, XIC, YIC, &(stime->redraws), 0, 0, 0, 0, "Play back and sync with audio from Sequence Editor");
+
/* always as last */
sa->headbutlen= xco+XIC+80; // +80 because the last button is not an icon
diff --git a/source/blender/src/header_view3d.c b/source/blender/src/header_view3d.c
index fcf4caf4522..9a2f907fa12 100644
--- a/source/blender/src/header_view3d.c
+++ b/source/blender/src/header_view3d.c
@@ -106,6 +106,7 @@
#include "BIF_editview.h"
#include "BIF_gl.h"
#include "BIF_interface.h"
+#include "BIF_keyframing.h"
#include "BIF_mainqueue.h"
#include "BIF_meshtools.h"
#include "BIF_poselib.h"
@@ -884,6 +885,8 @@ void do_view3d_select_object_groupedmenu(void *arg, int event)
case 7: /* Objects in Same Group */
case 8: /* Object Hooks*/
case 9: /* Object PassIndex*/
+ case 10: /* Object Color*/
+ case 11: /* Game Properties*/
select_object_grouped((short)event);
break;
}
@@ -906,7 +909,9 @@ static uiBlock *view3d_select_object_groupedmenu(void *arg_unused)
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Objects on Shared Layers|Shift G, 6", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Objects in Same Group|Shift G, 7", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Object Hooks|Shift G, 8", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 8, "");
- uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Object PassIndex|Shift G, 9", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, "");
+ uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Object PassIndex|Shift G, 9", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, "");
+ uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Object Color|Shift G, 0", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 10, "");
+ uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Game Properties|Shift G, Alt+1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 11, "");
uiBlockSetDirection(block, UI_RIGHT);
uiTextBoundsBlock(block, 60);
@@ -2522,6 +2527,9 @@ static void do_view3d_edit_objectmenu(void *arg, int event)
if(session) b_verse_push_object(session, ob);
break;
#endif
+ case 18: /* delete keyframe */
+ common_deletekey();
+ break;
}
allqueue(REDRAWVIEW3D, 0);
}
@@ -2558,6 +2566,7 @@ static uiBlock *view3d_edit_objectmenu(void *arg_unused)
uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Insert Keyframe|I", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 11, "");
+ uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Delete Keyframe|Alt I", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 18, "");
uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
@@ -3150,6 +3159,9 @@ static void do_view3d_edit_meshmenu(void *arg, int event)
case 15:
uv_autocalc_tface();
break;
+ case 16: /* delete keyframe */
+ common_deletekey();
+ break;
}
allqueue(REDRAWVIEW3D, 0);
}
@@ -3185,6 +3197,7 @@ static uiBlock *view3d_edit_meshmenu(void *arg_unused)
uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Insert Keyframe|I", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
+ uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Delete Keyframe|Alt I", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 16, "");
uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
@@ -3416,6 +3429,9 @@ static void do_view3d_edit_curvemenu(void *arg, int event)
case 15:
uv_autocalc_tface();
break;
+ case 16: /* delete keyframe */
+ common_deletekey();
+ break;
}
allqueue(REDRAWVIEW3D, 0);
}
@@ -3440,6 +3456,7 @@ static uiBlock *view3d_edit_curvemenu(void *arg_unused)
uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Insert Keyframe|I", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
+ uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Delete Keyframe|Alt I", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 16, "");
uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
@@ -3760,6 +3777,9 @@ static void do_view3d_edit_latticemenu(void *arg, int event)
case 6:
uv_autocalc_tface();
break;
+ case 7: /* delete keyframe */
+ common_deletekey();
+ break;
}
allqueue(REDRAWVIEW3D, 0);
}
@@ -3783,6 +3803,7 @@ static uiBlock *view3d_edit_latticemenu(void *arg_unused)
uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Insert Keyframe|I", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
+ uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Delete Keyframe|Alt I", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
@@ -4170,7 +4191,7 @@ static uiBlock *view3d_pose_armature_ikmenu(void *arg_unused)
uiBlockSetButmFunc(block, do_view3d_pose_armature_ikmenu, NULL);
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Add IK to Bone...|Shift I", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
- uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear IK...|Alt I", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
+ uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear IK...|Ctrl Alt I", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
uiBlockSetDirection(block, UI_RIGHT);
uiTextBoundsBlock(block, 60);
@@ -4370,6 +4391,12 @@ static void do_view3d_pose_armaturemenu(void *arg, int event)
case 18:
pose_autoside_names(event-16);
break;
+ case 19: /* assign pose as restpose */
+ apply_armature_pose2bones();
+ break;
+ case 20: /* delete keyframe */
+ common_deletekey();
+ break;
}
allqueue(REDRAWVIEW3D, 0);
@@ -4391,10 +4418,12 @@ static uiBlock *view3d_pose_armaturemenu(void *arg_unused)
uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Insert Keyframe|I", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
+ uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Delete Keyframe|Alt I", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 20, "");
uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Relax Pose|W", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 15, "");
+ uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Apply Pose as Restpose|Ctrl A", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 19, "");
uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
@@ -4508,7 +4537,7 @@ static void do_view3d_tpaintmenu(void *arg, int event)
{
switch(event) {
case 0: /* undo image painting */
- imagepaint_undo();
+ undo_imagepaint_step(1);
break;
}
@@ -5192,16 +5221,6 @@ void do_view3d_buttons(short event)
}
break;
- case B_LOCALVIEW:
- if(G.vd->localview) initlocalview();
- else {
- endlocalview(curarea);
- /* new layers might need unflushed events events */
- DAG_scene_update_flags(G.scene, G.vd->lay); /* tags all that moves and flushes*/
- }
- scrarea_queue_headredraw(curarea);
- break;
-
case B_VIEWBUT:
if(G.vd->viewbut==1) persptoetsen(PAD7);
@@ -5219,9 +5238,6 @@ void do_view3d_buttons(short event)
}
break;
- case B_PROPTOOL:
- allqueue(REDRAWHEADERS, 0);
- break;
case B_VIEWRENDER:
if (curarea->spacetype==SPACE_VIEW3D) {
BIF_do_ogl_render(curarea->spacedata.first, G.qual!=0 );
@@ -5383,7 +5399,11 @@ void do_view3d_buttons(short event)
case B_MAN_MODE:
allqueue(REDRAWVIEW3D, 1);
break;
-
+ case B_VIEW_BUTSEDIT:
+ allqueue(REDRAWVIEW3D, 1);
+ allqueue(REDRAWBUTSEDIT, 1);
+ break;
+
default:
if(event>=B_LAY && event<B_LAY+31) {
@@ -5563,6 +5583,16 @@ static void view3d_header_pulldowns(uiBlock *block, short *xcoord)
*xcoord= xco;
}
+static int view3d_layer_icon(int but_lay, int ob_lay, int used_lay)
+{
+ if (but_lay & ob_lay)
+ return ICON_LAYER_ACTIVE;
+ else if (but_lay & used_lay)
+ return ICON_LAYER_USED;
+ else
+ return ICON_BLANK1;
+}
+
void view3d_buttons(void)
{
uiBlock *block;
@@ -5666,7 +5696,7 @@ void view3d_buttons(void)
}
} else {
if (G.obedit==NULL && (G.f & (G_VERTEXPAINT|G_WEIGHTPAINT|G_TEXTUREPAINT))) {
- uiDefIconButBitI(block, TOG, G_FACESELECT, B_REDR, ICON_FACESEL_HLT,xco,0,XIC,YIC, &G.f, 0, 0, 0, 0, "Painting Mask (FKey)");
+ uiDefIconButBitI(block, TOG, G_FACESELECT, B_VIEW_BUTSEDIT, ICON_FACESEL_HLT,xco,0,XIC,YIC, &G.f, 0, 0, 0, 0, "Painting Mask (FKey)");
xco+= XIC+10;
} else {
/* Manipulators arnt used in weight paint mode */
@@ -5729,19 +5759,22 @@ void view3d_buttons(void)
/* LAYERS */
if(G.obedit==NULL && G.vd->localview==0) {
+ int ob_lay = ob ? ob->lay : 0;
uiBlockBeginAlign(block);
- for(a=0; a<5; a++)
- uiDefButBitI(block, TOG, 1<<a, B_LAY+a, "", (short)(xco+a*(XIC/2)), (short)(YIC/2),(short)(XIC/2),(short)(YIC/2), &(G.vd->lay), 0, 0, 0, 0, "Toggles Layer visibility (Num, Shift Num)");
- for(a=0; a<5; a++)
- uiDefButBitI(block, TOG, 1<<(a+10), B_LAY+10+a, "",(short)(xco+a*(XIC/2)), 0, XIC/2, (YIC)/2, &(G.vd->lay), 0, 0, 0, 0, "Toggles Layer visibility (Alt Num, Alt Shift Num)");
-
+ for(a=0; a<5; a++) {
+ uiDefIconButBitI(block, TOG, 1<<a, B_LAY+a, view3d_layer_icon(1<<a, ob_lay, G.vd->lay_used), (short)(xco+a*(XIC/2)), (short)(YIC/2),(short)(XIC/2),(short)(YIC/2), &(G.vd->lay), 0, 0, 0, 0, "Toggles Layer visibility (Alt Num, Alt Shift Num)");
+ }
+ for(a=0; a<5; a++) {
+ uiDefIconButBitI(block, TOG, 1<<(a+10), B_LAY+10+a, view3d_layer_icon(1<<(a+10), ob_lay, G.vd->lay_used), (short)(xco+a*(XIC/2)), 0, XIC/2, (YIC)/2, &(G.vd->lay), 0, 0, 0, 0, "Toggles Layer visibility (Alt Num, Alt Shift Num)");
+ }
xco+= 5;
uiBlockBeginAlign(block);
- for(a=5; a<10; a++)
- uiDefButBitI(block, TOG, 1<<a, B_LAY+a, "", (short)(xco+a*(XIC/2)), (short)(YIC/2),(short)(XIC/2),(short)(YIC/2), &(G.vd->lay), 0, 0, 0, 0, "Toggles Layer visibility (Num, Shift Num)");
- for(a=5; a<10; a++)
- uiDefButBitI(block, TOG, 1<<(a+10), B_LAY+10+a, "",(short)(xco+a*(XIC/2)), 0, XIC/2, (YIC)/2, &(G.vd->lay), 0, 0, 0, 0, "Toggles Layer visibility (Alt Num, Alt Shift Num)");
-
+ for(a=5; a<10; a++) {
+ uiDefIconButBitI(block, TOG, 1<<a, B_LAY+a, view3d_layer_icon(1<<a, ob_lay, G.vd->lay_used), (short)(xco+a*(XIC/2)), (short)(YIC/2),(short)(XIC/2),(short)(YIC/2), &(G.vd->lay), 0, 0, 0, 0, "Toggles Layer visibility (Alt Num, Alt Shift Num)");
+ }
+ for(a=5; a<10; a++) {
+ uiDefIconButBitI(block, TOG, 1<<(a+10), B_LAY+10+a, view3d_layer_icon(1<<(a+10), ob_lay, G.vd->lay_used), (short)(xco+a*(XIC/2)), 0, XIC/2, (YIC)/2, &(G.vd->lay), 0, 0, 0, 0, "Toggles Layer visibility (Alt Num, Alt Shift Num)");
+ }
uiBlockEndAlign(block);
xco+= (a-2)*(XIC/2)+3;
diff --git a/source/blender/src/headerbuttons.c b/source/blender/src/headerbuttons.c
index 1a91ada1562..44044841a99 100644
--- a/source/blender/src/headerbuttons.c
+++ b/source/blender/src/headerbuttons.c
@@ -154,7 +154,6 @@
#include "BSE_editipo.h"
#include "BSE_drawipo.h"
-#include "BDR_drawmesh.h"
#include "BDR_vpaint.h"
#include "BDR_editface.h"
#include "BDR_editobject.h"
@@ -165,6 +164,8 @@
#include "BPY_extern.h"
#include "BPY_menus.h"
+#include "GPU_draw.h"
+
#include "mydevice.h"
#include "blendef.h"
#include "interface.h"
@@ -1425,11 +1426,11 @@ void do_global_buttons(unsigned short event)
show_splash();
break;
case B_MIPMAPCHANGED:
- set_mipmap(!(U.gameflags & USER_DISABLE_MIPMAP));
+ GPU_set_mipmap(!(U.gameflags & USER_DISABLE_MIPMAP));
allqueue(REDRAWVIEW3D, 0);
break;
case B_GLRESLIMITCHANGED:
- free_all_realtime_images(); /* force reloading with new res limit */
+ GPU_free_images(); /* force reloading with new res limit */
allqueue(REDRAWVIEW3D, 0);
break;
case B_NEWSPACE:
diff --git a/source/blender/src/imagepaint.c b/source/blender/src/imagepaint.c
index 15c289cc21c..cc3951f4e90 100644
--- a/source/blender/src/imagepaint.c
+++ b/source/blender/src/imagepaint.c
@@ -44,6 +44,8 @@
#include "BLI_winstuff.h"
#endif
#include "BLI_arithb.h"
+#include "BLI_blenlib.h"
+#include "BLI_dynstr.h"
#include "PIL_time.h"
#include "IMB_imbuf.h"
@@ -64,10 +66,12 @@
#include "BKE_brush.h"
#include "BKE_global.h"
#include "BKE_image.h"
+#include "BKE_main.h"
#include "BKE_mesh.h"
#include "BKE_node.h"
#include "BKE_utildefines.h"
+#include "BIF_interface.h"
#include "BIF_mywindow.h"
#include "BIF_screen.h"
#include "BIF_space.h"
@@ -78,10 +82,11 @@
#include "BSE_trans_types.h"
#include "BSE_view.h"
-#include "BDR_drawmesh.h"
#include "BDR_imagepaint.h"
#include "BDR_vpaint.h"
+#include "GPU_draw.h"
+
#include "GHOST_Types.h"
#include "blendef.h"
@@ -103,6 +108,8 @@
#define IMAPAINT_TILE_SIZE (1 << IMAPAINT_TILE_BITS)
#define IMAPAINT_TILE_NUMBER(size) (((size)+IMAPAINT_TILE_SIZE-1) >> IMAPAINT_TILE_BITS)
+#define MAXUNDONAME 64
+
typedef struct ImagePaintState {
Brush *brush;
short tool, blend;
@@ -120,48 +127,206 @@ typedef struct ImagePaintState {
float uv[2];
} ImagePaintState;
-typedef struct ImagePaintUndo {
- Image *image;
- ImBuf *tilebuf;
- void **tiles;
- int xtiles, ytiles;
-} ImagePaintUndo;
+typedef struct UndoTile {
+ struct UndoTile *next, *prev;
+ ID id;
+ void *rect;
+ int x, y;
+} UndoTile;
+
+typedef struct UndoElem {
+ struct UndoElem *next, *prev;
+ char name[MAXUNDONAME];
+ unsigned long undosize;
+
+ ImBuf *ibuf;
+ ListBase tiles;
+} UndoElem;
typedef struct ImagePaintPartialRedraw {
int x1, y1, x2, y2;
int enabled;
} ImagePaintPartialRedraw;
-static ImagePaintUndo imapaintundo = {NULL, NULL, NULL, 0, 0};
+static ListBase undobase = {NULL, NULL};
+static UndoElem *curundo = NULL;
static ImagePaintPartialRedraw imapaintpartial = {0, 0, 0, 0, 0};
-static void init_imagapaint_undo(Image *ima, ImBuf *ibuf)
+/* UNDO */
+
+/* internal functions */
+
+static void undo_copy_tile(UndoTile *tile, ImBuf *tmpibuf, ImBuf *ibuf, int restore)
{
- int xt, yt;
-
- imapaintundo.image = ima;
- imapaintundo.xtiles = xt = IMAPAINT_TILE_NUMBER(ibuf->x);
- imapaintundo.ytiles = yt = IMAPAINT_TILE_NUMBER(ibuf->y);
- imapaintundo.tiles = MEM_callocN(sizeof(void*)*xt*yt, "ImagePaintUndoTiles");
- imapaintundo.tilebuf = IMB_allocImBuf(IMAPAINT_TILE_SIZE, IMAPAINT_TILE_SIZE,
- ibuf->depth, (ibuf->rect_float)? IB_rectfloat: IB_rect, 0);
+ /* copy or swap contents of tile->rect and region in ibuf->rect */
+ IMB_rectcpy(tmpibuf, ibuf, 0, 0, tile->x*IMAPAINT_TILE_SIZE,
+ tile->y*IMAPAINT_TILE_SIZE, IMAPAINT_TILE_SIZE, IMAPAINT_TILE_SIZE);
+
+ if(ibuf->rect_float) SWAP(void*, tmpibuf->rect_float, tile->rect)
+ else SWAP(void*, tmpibuf->rect, tile->rect)
+
+ if(restore)
+ IMB_rectcpy(ibuf, tmpibuf, tile->x*IMAPAINT_TILE_SIZE,
+ tile->y*IMAPAINT_TILE_SIZE, 0, 0, IMAPAINT_TILE_SIZE, IMAPAINT_TILE_SIZE);
}
-static void imapaint_copy_tile(ImBuf *ibuf, int tile, int x, int y, int swapundo)
+static void undo_restore(UndoElem *undo)
{
- IMB_rectcpy(imapaintundo.tilebuf, ibuf, 0, 0, x*IMAPAINT_TILE_SIZE,
- y*IMAPAINT_TILE_SIZE, IMAPAINT_TILE_SIZE, IMAPAINT_TILE_SIZE);
+ Image *ima = NULL;
+ ImBuf *ibuf, *tmpibuf;
+ UndoTile *tile;
- if (imapaintundo.tilebuf->rect_float)
- SWAP(void*, imapaintundo.tilebuf->rect_float, imapaintundo.tiles[tile])
- else
- SWAP(void*, imapaintundo.tilebuf->rect, imapaintundo.tiles[tile])
+ if(!undo)
+ return;
+
+ tmpibuf= IMB_allocImBuf(IMAPAINT_TILE_SIZE, IMAPAINT_TILE_SIZE, 32,
+ IB_rectfloat|IB_rect, 0);
+
+ for(tile=undo->tiles.first; tile; tile=tile->next) {
+ /* find image based on name, pointer becomes invalid with global undo */
+ if(ima && strcmp(tile->id.name, ima->id.name)==0);
+ else {
+ for(ima=G.main->image.first; ima; ima=ima->id.next)
+ if(strcmp(tile->id.name, ima->id.name)==0)
+ break;
+ }
+
+ ibuf= BKE_image_get_ibuf(ima, NULL);
+
+ if (!ima || !ibuf || !(ibuf->rect || ibuf->rect_float))
+ continue;
+
+ undo_copy_tile(tile, tmpibuf, ibuf, 1);
+
+ GPU_free_image(ima); /* force OpenGL reload */
+ if(ibuf->rect_float)
+ imb_freerectImBuf(ibuf); /* force recreate of char rect */
+ }
+
+ IMB_freeImBuf(tmpibuf);
+}
+
+static void undo_free(UndoElem *undo)
+{
+ UndoTile *tile;
+
+ for(tile=undo->tiles.first; tile; tile=tile->next)
+ MEM_freeN(tile->rect);
+ BLI_freelistN(&undo->tiles);
+}
+
+static void undo_imagepaint_push_begin(char *name)
+{
+ UndoElem *uel;
+ int nr;
+
+ /* Undo push is split up in begin and end, the reason is that as painting
+ * happens more tiles are added to the list, and at the very end we know
+ * how much memory the undo used to remove old undo elements */
+
+ /* remove all undos after (also when curundo==NULL) */
+ while(undobase.last != curundo) {
+ uel= undobase.last;
+ undo_free(uel);
+ BLI_freelinkN(&undobase, uel);
+ }
+
+ /* make new */
+ curundo= uel= MEM_callocN(sizeof(UndoElem), "undo file");
+ BLI_addtail(&undobase, uel);
+
+ /* name can be a dynamic string */
+ strncpy(uel->name, name, MAXUNDONAME-1);
+
+ /* limit amount to the maximum amount*/
+ nr= 0;
+ uel= undobase.last;
+ while(uel) {
+ nr++;
+ if(nr==U.undosteps) break;
+ uel= uel->prev;
+ }
+ if(uel) {
+ while(undobase.first!=uel) {
+ UndoElem *first= undobase.first;
+ undo_free(first);
+ BLI_freelinkN(&undobase, first);
+ }
+ }
+}
+
+static void undo_imagepaint_push_end()
+{
+ UndoElem *uel;
+ unsigned long totmem, maxmem;
+
+ if(U.undomemory != 0) {
+ /* limit to maximum memory (afterwards, we can't know in advance) */
+ totmem= 0;
+ maxmem= ((unsigned long)U.undomemory)*1024*1024;
+
+ uel= undobase.last;
+ while(uel) {
+ totmem+= uel->undosize;
+ if(totmem>maxmem) break;
+ uel= uel->prev;
+ }
+
+ if(uel) {
+ while(undobase.first!=uel) {
+ UndoElem *first= undobase.first;
+ undo_free(first);
+ BLI_freelinkN(&undobase, first);
+ }
+ }
+ }
+}
+
+/* external functions */
+
+/* 1= an undo, -1 is a redo. */
+void undo_imagepaint_step(int step)
+{
+ UndoElem *undo;
+
+ if(step==1) {
+ if(curundo==NULL) error("No more steps to undo");
+ else {
+ if(G.f & G_DEBUG) printf("undo %s\n", curundo->name);
+ undo_restore(curundo);
+ curundo= curundo->prev;
+ }
+ }
+ else if(step==-1) {
+ if((curundo!=NULL && curundo->next==NULL) || undobase.first==NULL) error("No more steps to redo");
+ else {
+ undo= (curundo && curundo->next)? curundo->next: undobase.first;
+ undo_restore(undo);
+ curundo= undo;
+ if(G.f & G_DEBUG) printf("redo %s\n", undo->name);
+ }
+ }
+
+ allqueue(REDRAWVIEW3D, 0);
+ allqueue(REDRAWIMAGE, 0);
+}
+
+void undo_imagepaint_clear(void)
+{
+ UndoElem *uel;
- if (swapundo)
- IMB_rectcpy(ibuf, imapaintundo.tilebuf, x*IMAPAINT_TILE_SIZE,
- y*IMAPAINT_TILE_SIZE, 0, 0, IMAPAINT_TILE_SIZE, IMAPAINT_TILE_SIZE);
+ uel= undobase.first;
+ while(uel) {
+ undo_free(uel);
+ uel= uel->next;
+ }
+
+ BLI_freelistN(&undobase);
+ curundo= NULL;
}
+/* Imagepaint Partial Redraw & Dirty Region */
+
static void imapaint_clear_partial_redraw()
{
memset(&imapaintpartial, 0, sizeof(imapaintpartial));
@@ -169,7 +334,9 @@ static void imapaint_clear_partial_redraw()
static void imapaint_dirty_region(Image *ima, ImBuf *ibuf, int x, int y, int w, int h)
{
- int srcx= 0, srcy= 0, origx, tile, allocsize;
+ ImBuf *tmpibuf;
+ UndoTile *tile;
+ int srcx= 0, srcy= 0, origx, allocsize;
IMB_rectclip(ibuf, NULL, &x, &y, &srcx, &srcy, &w, &h);
@@ -195,24 +362,36 @@ static void imapaint_dirty_region(Image *ima, ImBuf *ibuf, int x, int y, int w,
origx = (x >> IMAPAINT_TILE_BITS);
y = (y >> IMAPAINT_TILE_BITS);
+ tmpibuf= IMB_allocImBuf(IMAPAINT_TILE_SIZE, IMAPAINT_TILE_SIZE, 32,
+ IB_rectfloat|IB_rect, 0);
+
for (; y <= h; y++) {
for (x=origx; x <= w; x++) {
- if (ima != imapaintundo.image) {
- free_imagepaint();
- init_imagapaint_undo(ima, ibuf);
- }
+ for(tile=curundo->tiles.first; tile; tile=tile->next)
+ if(tile->x == x && tile->y == y && strcmp(tile->id.name, ima->id.name)==0)
+ break;
+
+ if(!tile) {
+ tile= MEM_callocN(sizeof(UndoTile), "ImaUndoTile");
+ tile->id= ima->id;
+ tile->x= x;
+ tile->y= y;
+
+ allocsize= IMAPAINT_TILE_SIZE*IMAPAINT_TILE_SIZE*4;
+ allocsize *= (ibuf->rect_float)? sizeof(float): sizeof(char);
+ tile->rect= MEM_mapallocN(allocsize, "ImaUndoRect");
+
+ undo_copy_tile(tile, tmpibuf, ibuf, 0);
+ curundo->undosize += allocsize;
- tile = y*imapaintundo.xtiles + x;
- if (!imapaintundo.tiles[tile]) {
- allocsize= (ibuf->rect_float)? sizeof(float): sizeof(char);
- imapaintundo.tiles[tile]= MEM_mapallocN(allocsize*4*
- IMAPAINT_TILE_SIZE*IMAPAINT_TILE_SIZE, "ImagePaintUndoTile");
- imapaint_copy_tile(ibuf, tile, x, y, 0);
+ BLI_addtail(&curundo->tiles, tile);
}
}
}
ibuf->userflags |= IB_BITMAPDIRTY;
+
+ IMB_freeImBuf(tmpibuf);
}
static void imapaint_image_update(Image *image, ImBuf *ibuf, short texpaint)
@@ -226,7 +405,7 @@ static void imapaint_image_update(Image *image, ImBuf *ibuf, short texpaint)
if(texpaint || G.sima->lock) {
int w = imapaintpartial.x2 - imapaintpartial.x1;
int h = imapaintpartial.y2 - imapaintpartial.y1;
- update_realtime_image(image, imapaintpartial.x1, imapaintpartial.y1, w, h);
+ GPU_paint_update_image(image, imapaintpartial.x1, imapaintpartial.y1, w, h);
}
}
@@ -239,7 +418,7 @@ static void imapaint_redraw(int final, int texpaint, Image *image)
allqueue(REDRAWIMAGE, 0);
else if(!G.sima->lock) {
if(image)
- free_realtime_image(image); /* force OpenGL reload */
+ GPU_free_image(image); /* force OpenGL reload */
allqueue(REDRAWVIEW3D, 0);
}
allqueue(REDRAWHEADERS, 0);
@@ -269,46 +448,6 @@ static void imapaint_redraw(int final, int texpaint, Image *image)
force_draw(0);
}
-void imagepaint_undo()
-{
- Image *ima= imapaintundo.image;
- ImBuf *ibuf= BKE_image_get_ibuf(ima, G.sima?&G.sima->iuser:NULL);
- int x, y, tile;
-
- if (!ima || !ibuf || !(ibuf->rect || ibuf->rect_float))
- return;
-
- for (tile = 0, y = 0; y < imapaintundo.ytiles; y++)
- for (x = 0; x < imapaintundo.xtiles; x++, tile++)
- if (imapaintundo.tiles[tile])
- imapaint_copy_tile(ibuf, tile, x, y, 1);
-
- free_realtime_image(ima); /* force OpenGL reload */
- if(ibuf->rect_float)
- imb_freerectImBuf(ibuf); /* force recreate of char rect */
-
- allqueue(REDRAWIMAGE, 0);
- allqueue(REDRAWVIEW3D, 0);
-}
-
-void free_imagepaint()
-{
- /* todo: does this need to be in the same places as editmode_undo_clear,
- vertex paint isn't? */
- int i, size = imapaintundo.xtiles*imapaintundo.ytiles;
-
- if (imapaintundo.tiles) {
- for (i = 0; i < size; i++)
- if (imapaintundo.tiles[i])
- MEM_freeN(imapaintundo.tiles[i]);
- MEM_freeN(imapaintundo.tiles);
- }
- if (imapaintundo.tilebuf)
- IMB_freeImBuf(imapaintundo.tilebuf);
-
- memset(&imapaintundo, 0, sizeof(imapaintundo));
-}
-
/* Image Paint Operations */
static void imapaint_ibuf_get_set_rgb(ImBuf *ibuf, int x, int y, short torus, short set, float *rgb)
@@ -580,9 +719,10 @@ static void imapaint_paint_stroke(ImagePaintState *s, BrushPainter *painter, sho
int breakstroke = 0, redraw = 0;
if (texpaint) {
-
/* pick new face and image */
- if (facesel_face_pick(s->me, mval, &newfaceindex, 0)) {
+ if ( facesel_face_pick(s->me, mval, &newfaceindex, 0) &&
+ ((G.f & G_FACESELECT)==0 || (s->me->mface+newfaceindex)->flag & ME_FACE_SEL)
+ ) {
ImBuf *ibuf;
newimage = (Image*)((s->me->mtface+newfaceindex)->tpage);
@@ -692,7 +832,7 @@ void imagepaint_paint(short mousebutton, short texpaint)
}
settings->imapaint.flag |= IMAGEPAINT_DRAWING;
- free_imagepaint();
+ undo_imagepaint_push_begin("Image Paint");
/* create painter and paint once */
painter= brush_painter_new(s.brush);
@@ -741,6 +881,7 @@ void imagepaint_paint(short mousebutton, short texpaint)
brush_painter_free(painter);
imapaint_redraw(1, texpaint, s.image);
+ undo_imagepaint_push_end();
if (texpaint) {
if (s.warnmultifile)
diff --git a/source/blender/src/interface.c b/source/blender/src/interface.c
index e7b5b176979..a8c23864afd 100644
--- a/source/blender/src/interface.c
+++ b/source/blender/src/interface.c
@@ -105,6 +105,8 @@
#include "blendef.h"
#include "winlay.h"
+#include "BLO_sys_types.h" // for intptr_t support
+
#define INSIDE_BLOCK 1
#define INSIDE_PANEL_HEADER 2
#define INSIDE_PANEL_SCALE 3
@@ -129,9 +131,6 @@ static void *UIafterfunc_arg1, *UIafterfunc_arg2;
static uiFont UIfont[UI_ARRAY]; // no init needed
uiBut *UIbuttip;
-static char but_copypaste_str[256]="";
-static double but_copypaste_val=0.0;
-static float but_copypaste_rgb[3];
static ColorBand but_copypaste_coba;
/* ************* PROTOTYPES ***************** */
@@ -468,64 +467,94 @@ void ui_block_set_flush(uiBlock *block, uiBut *but)
static int ui_but_copy_paste(uiBut *but, char mode)
{
void *poin;
+ char buf[UI_MAX_DRAW_STR+1]= {0};
+ double val;
+ float f[3];
if(mode=='v' && but->lock) return 0;
poin= but->poin;
-
+
+ if(mode=='v') {
+ /* extract first line from clipboard in case of multi-line copies */
+ char *p = getClipboard(0);
+ if(p) {
+ int i = 0;
+ while (*p && *p!='\r' && *p!='\n' && i<UI_MAX_DRAW_STR) {
+ buf[i++]=*p;
+ p++;
+ }
+ buf[i]= 0;
+ }
+ }
+
+ /* numeric value */
if ELEM4(but->type, NUM, NUMABS, NUMSLI, HSVSLI) {
if(poin==NULL);
else if(mode=='c') {
- but_copypaste_val= ui_get_but_val(but);
+ sprintf(buf, "%f", ui_get_but_val(but));
+ putClipboard(buf, 0);
}
else {
- ui_set_but_val(but, but_copypaste_val);
- uibut_do_func(but);
- ui_check_but(but);
- return 1;
+ if (sscanf(buf, " %lf ", &val) == 1) {
+ ui_set_but_val(but, val);
+ uibut_do_func(but);
+ ui_check_but(but);
+ return 1;
+ }
}
}
+
+ /* RGB triple */
else if(but->type==COL) {
if(poin==NULL);
else if(mode=='c') {
if(but->pointype==FLO) {
float *fp= (float *) poin;
- but_copypaste_rgb[0]= fp[0];
- but_copypaste_rgb[1]= fp[1];
- but_copypaste_rgb[2]= fp[2];
+ sprintf(buf, "[%f, %f, %f]", fp[0], fp[1], fp[2]);
+ putClipboard(buf, 0);
}
else if (but->pointype==CHA) {
char *cp= (char *) poin;
- but_copypaste_rgb[0]= (float)(cp[0]/255.0);
- but_copypaste_rgb[1]= (float)(cp[1]/255.0);
- but_copypaste_rgb[2]= (float)(cp[2]/255.0);
+ f[0]= (float)(cp[0]/255.0);
+ f[1]= (float)(cp[1]/255.0);
+ f[2]= (float)(cp[2]/255.0);
+ sprintf(buf, "[%f, %f, %f]", f[0], f[1], f[2]);
+ putClipboard(buf, 0);
}
}
else {
if(but->pointype==FLO) {
float *fp= (float *) poin;
- fp[0] = but_copypaste_rgb[0];
- fp[1] = but_copypaste_rgb[1];
- fp[2] = but_copypaste_rgb[2];
- return 1;
+ if (sscanf(buf, "[%f, %f, %f]", &f[0], &f[1], &f[2]) == 3) {
+ fp[0]= f[0];
+ fp[1]= f[1];
+ fp[2]= f[2];
+ return 1;
+ }
}
else if (but->pointype==CHA) {
char *cp= (char *) poin;
- cp[0] = (char)(but_copypaste_rgb[0]*255.0);
- cp[1] = (char)(but_copypaste_rgb[1]*255.0);
- cp[2] = (char)(but_copypaste_rgb[2]*255.0);
-
- return 1;
+ if (sscanf(buf, "[%f, %f, %f]", &f[0], &f[1], &f[2]) == 3) {
+ cp[0]= (char)(f[0]*255.0);
+ cp[1]= (char)(f[1]*255.0);
+ cp[2]= (char)(f[2]*255.0);
+ return 1;
+ }
}
}
}
+
+ /* text/string data */
else if(but->type==TEX) {
if(poin==NULL);
else if(mode=='c') {
- strncpy(but_copypaste_str, but->poin, but->max);
+ strncpy(buf, but->poin, but->max);
+ buf[(int)but->max]= 0;
+ putClipboard(buf, 0);
}
else {
char backstr[UI_MAX_DRAW_STR];
@@ -535,23 +564,31 @@ static int ui_but_copy_paste(uiBut *but, char mode)
strncpy(backstr, but->poin, UI_MAX_DRAW_STR);
but->func_arg2= backstr;
}
- strncpy(but->poin, but_copypaste_str, but->max);
+ strncpy(but->poin, buf, but->max);
uibut_do_func(but);
ui_check_but(but);
return 1;
}
}
+
+ /* ID name string (eg. OB:Object = "Object") */
else if(but->type==IDPOIN) {
if(mode=='c') {
ID *id= *but->idpoin_idpp;
- if(id) strncpy(but_copypaste_str, id->name+2, 22);
+ if(id) {
+ strncpy(buf, id->name+2, 22);
+ buf[22]= 0;
+ putClipboard(buf, 0);
+ }
}
else {
- but->idpoin_func(but_copypaste_str, but->idpoin_idpp);
+ but->idpoin_func(buf, but->idpoin_idpp);
ui_check_but(but);
return 1;
}
}
+
+ /* colorband (not supported by system clipboard) */
else if(but->type==BUT_COLORBAND) {
if(mode=='c') {
if (!but->poin) {
@@ -1769,36 +1806,49 @@ static int ui_do_but_TEX(uiBut *but)
((G.qual & LR_COMMANDKEY) || (G.qual & LR_CTRLKEY)) &&
((dev==XKEY) || (dev==CKEY) || (dev==VKEY)) ) {
+ char buf[UI_MAX_DRAW_STR]={0};
/* paste */
if (dev==VKEY) {
- /* paste over the current selection */
- if ((but->selend - but->selsta) > 0) {
- len -= ui_delete_selection_edittext(but);
- }
-
- for (y=0; y<strlen(but_copypaste_str); y++)
- {
- /* add contents of buffer */
- if(len < but->max) {
- for(x= but->max; x>but->pos; x--)
- str[x]= str[x-1];
- str[but->pos]= but_copypaste_str[y];
- but->pos++;
- len++;
- str[len]= '\0';
+
+ /* extract the first line from the clipboard */
+ char *p = getClipboard(0);
+ if(p) {
+ int i = 0;
+ while (*p && *p!='\r' && *p!='\n' && i<UI_MAX_DRAW_STR) {
+ buf[i++]=*p;
+ p++;
+ }
+ buf[i]= 0;
+
+ /* paste over the current selection */
+ if ((but->selend - but->selsta) > 0) {
+ len -= ui_delete_selection_edittext(but);
+ }
+
+ for (y=0; y<strlen(buf); y++)
+ {
+ /* add contents of buffer */
+ if(len < but->max) {
+ for(x= but->max; x>but->pos; x--)
+ str[x]= str[x-1];
+ str[but->pos]= buf[y];
+ but->pos++;
+ len++;
+ str[len]= '\0';
+ }
}
+ if (strlen(buf) > 0) dodraw= 1;
}
- if (strlen(but_copypaste_str) > 0) dodraw= 1;
}
/* cut & copy */
else if ( (dev==XKEY) || (dev==CKEY) ) {
/* copy the contents to the copypaste buffer */
for(x= but->selsta; x <= but->selend; x++) {
if (x==but->selend)
- but_copypaste_str[x] = '\0';
+ buf[x] = '\0';
else
- but_copypaste_str[(x - but->selsta)] = str[x];
+ buf[(x - but->selsta)] = str[x];
}
/* for cut only, delete the selection afterwards */
@@ -6039,7 +6089,7 @@ void autocomplete_end(AutoComplete *autocpl, char *autoname)
/* autocomplete callback for ID buttons */
static void autocomplete_id(char *str, void *arg_v)
{
- int blocktype= (long)arg_v;
+ int blocktype= (intptr_t)arg_v;
ListBase *listb= wich_libbase(G.main, blocktype);
if(listb==NULL) return;
@@ -6370,7 +6420,7 @@ uiBut *uiDefIDPoinBut(uiBlock *block, uiIDPoinFuncFP func, short blocktype, int
ui_check_but(but);
if(blocktype)
- uiButSetCompleteFunc(but, autocomplete_id, (void *)(long)blocktype);
+ uiButSetCompleteFunc(but, autocomplete_id, (void *)(intptr_t)blocktype);
return but;
}
diff --git a/source/blender/src/keyframing.c b/source/blender/src/keyframing.c
new file mode 100644
index 00000000000..f0b3b98504c
--- /dev/null
+++ b/source/blender/src/keyframing.c
@@ -0,0 +1,2092 @@
+/**
+ * $Id: keyframing.c 14881 2008-05-18 10:41:42Z aligorith $
+ *
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * The Original Code is Copyright (C) 2008, Blender Foundation
+ * This is a new part of Blender (with some old code)
+ *
+ * Contributor(s): Joshua Leung
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <stddef.h>
+#include <math.h>
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "MEM_guardedalloc.h"
+
+#include "BLI_arithb.h"
+#include "BLI_blenlib.h"
+#include "BLI_dynstr.h"
+
+#include "DNA_listBase.h"
+#include "DNA_ID.h"
+#include "DNA_action_types.h"
+#include "DNA_armature_types.h"
+#include "DNA_camera_types.h"
+#include "DNA_constraint_types.h"
+#include "DNA_curve_types.h"
+#include "DNA_ipo_types.h"
+#include "DNA_key_types.h"
+#include "DNA_lamp_types.h"
+#include "DNA_object_types.h"
+#include "DNA_material_types.h"
+#include "DNA_screen_types.h"
+#include "DNA_scene_types.h"
+#include "DNA_space_types.h"
+#include "DNA_texture_types.h"
+#include "DNA_userdef_types.h"
+#include "DNA_vec_types.h"
+#include "DNA_view3d_types.h"
+#include "DNA_world_types.h"
+
+#include "BKE_global.h"
+#include "BKE_utildefines.h"
+#include "BKE_blender.h"
+#include "BKE_main.h"
+#include "BKE_action.h"
+#include "BKE_armature.h"
+#include "BKE_constraint.h"
+#include "BKE_curve.h"
+#include "BKE_depsgraph.h"
+#include "BKE_ipo.h"
+#include "BKE_key.h"
+#include "BKE_object.h"
+#include "BKE_material.h"
+
+#include "BIF_keyframing.h"
+#include "BIF_butspace.h"
+#include "BIF_editaction.h"
+#include "BIF_editkey.h"
+#include "BIF_interface.h"
+#include "BIF_mywindow.h"
+#include "BIF_poseobject.h"
+#include "BIF_screen.h"
+#include "BIF_space.h"
+#include "BIF_toolbox.h"
+#include "BIF_toets.h"
+
+#include "BSE_editipo.h"
+#include "BSE_node.h"
+#include "BSE_time.h"
+#include "BSE_view.h"
+
+#include "blendef.h"
+
+#include "PIL_time.h" /* sleep */
+#include "mydevice.h"
+
+/* ************************************************** */
+/* LOCAL TYPES AND DEFINES */
+
+/* -------------- Keying Sets ------------------- */
+
+/* keying set - a set of channels that will be keyframed together */
+// TODO: move this to a header to allow custom sets someday?
+typedef struct bKeyingSet {
+ /* callback func to consider if keyingset should be included
+ * (by default, if this is undefined, item will be shown)
+ */
+ short (*include_cb)(struct bKeyingSet *, const char *);
+
+ char name[48]; /* name of keyingset */
+ int blocktype; /* blocktype that all channels belong to */ // in future, this may be eliminated
+ short flag; /* flags to use when setting keyframes */
+
+ short chan_num; /* number of channels to insert keyframe in */
+ short adrcodes[32]; /* adrcodes for channels to insert keys for (ideally would be variable-len, but limit of 32 will suffice) */
+} bKeyingSet;
+
+/* keying set context - an array of keying sets and the number of them */
+typedef struct bKeyingContext {
+ bKeyingSet *keyingsets; /* array containing the keyingsets of interest */
+ bKeyingSet *lastused; /* item that was chosen last time*/
+ int tot; /* number of keyingsets in */
+} bKeyingContext;
+
+
+/* ----------- Common KeyData Sources ------------ */
+
+/* temporary struct to gather data combos to keyframe */
+typedef struct bCommonKeySrc {
+ struct bCommonKeySrc *next, *prev;
+
+ /* general data/destination-source settings */
+ ID *id; /* id-block this comes from */
+ char *actname; /* name of action channel */
+ char *constname; /* name of constraint channel */
+
+ /* general destination source settings */
+ Ipo *ipo; /* ipo-block that id-block has (optional) */
+ bAction *act; /* action-block that id-block has (optional) */
+
+ /* pose-level settings */
+ bPoseChannel *pchan; /* pose channel */
+
+ /* buttons-window settings */
+ int map; /* offset to apply to certain adrcodes */
+} bCommonKeySrc;
+
+/* ************************************************** */
+/* KEYFRAME INSERTION */
+
+/* -------------- BezTriple Insertion -------------------- */
+
+/* threshold for inserting keyframes - threshold here should be good enough for now, but should become userpref */
+#define BEZT_INSERT_THRESH 0.00001
+
+/* Binary search algorithm for finding where to insert BezTriple. (for use by insert_bezt_icu)
+ * Returns the index to insert at (data already at that index will be offset if replace is 0)
+ */
+static int binarysearch_bezt_index (BezTriple array[], float frame, int arraylen, short *replace)
+{
+ int start=0, end=arraylen;
+ int loopbreaker= 0, maxloop= arraylen * 2;
+
+ /* initialise replace-flag first */
+ *replace= 0;
+
+ /* sneaky optimisations (don't go through searching process if...):
+ * - keyframe to be added is to be added out of current bounds
+ * - keyframe to be added would replace one of the existing ones on bounds
+ */
+ if ((arraylen <= 0) || (array == NULL)) {
+ printf("Warning: binarysearch_bezt_index encountered invalid array \n");
+ return 0;
+ }
+ else {
+ /* check whether to add before/after/on */
+ float framenum;
+
+ /* 'First' Keyframe (when only one keyframe, this case is used) */
+ framenum= array[0].vec[1][0];
+ if (IS_EQT(frame, framenum, BEZT_INSERT_THRESH)) {
+ *replace = 1;
+ return 0;
+ }
+ else if (frame < framenum)
+ return 0;
+
+ /* 'Last' Keyframe */
+ framenum= array[(arraylen-1)].vec[1][0];
+ if (IS_EQT(frame, framenum, BEZT_INSERT_THRESH)) {
+ *replace= 1;
+ return (arraylen - 1);
+ }
+ else if (frame > framenum)
+ return arraylen;
+ }
+
+
+ /* most of the time, this loop is just to find where to put it
+ * 'loopbreaker' is just here to prevent infinite loops
+ */
+ for (loopbreaker=0; (start <= end) && (loopbreaker < maxloop); loopbreaker++) {
+ /* compute and get midpoint */
+ int mid = (start + end) / 2;
+ float midfra= array[mid].vec[1][0];
+
+ /* check if exactly equal to midpoint */
+ if (IS_EQT(frame, midfra, BEZT_INSERT_THRESH)) {
+ *replace = 1;
+ return mid;
+ }
+
+ /* repeat in upper/lower half */
+ if (frame > midfra)
+ start= mid + 1;
+ else if (frame < midfra)
+ end= mid - 1;
+ }
+
+ /* print error if loop-limit exceeded */
+ if (loopbreaker == (maxloop-1)) {
+ printf("Error: binarysearch_bezt_index was taking too long \n");
+
+ // include debug info
+ printf("\tround = %d: start = %d, end = %d, arraylen = %d \n", loopbreaker, start, end, arraylen);
+ }
+
+ /* not found, so return where to place it */
+ return start;
+}
+
+/* This function adds a given BezTriple to an IPO-Curve. It will allocate
+ * memory for the array if needed, and will insert the BezTriple into a
+ * suitable place in chronological order.
+ *
+ * NOTE: any recalculate of the IPO-Curve that needs to be done will need to
+ * be done by the caller.
+ */
+int insert_bezt_icu (IpoCurve *icu, BezTriple *bezt)
+{
+ BezTriple *newb;
+ int i= 0;
+
+ if (icu->bezt == NULL) {
+ icu->bezt= MEM_callocN(sizeof(BezTriple), "beztriple");
+ *(icu->bezt)= *bezt;
+ icu->totvert= 1;
+ }
+ else {
+ short replace = -1;
+ i = binarysearch_bezt_index(icu->bezt, bezt->vec[1][0], icu->totvert, &replace);
+
+ if (replace) {
+ /* sanity check: 'i' may in rare cases exceed arraylen */
+ if ((i >= 0) && (i < icu->totvert))
+ *(icu->bezt + i) = *bezt;
+ }
+ else {
+ /* add new */
+ newb= MEM_callocN((icu->totvert+1)*sizeof(BezTriple), "beztriple");
+
+ /* add the beztriples that should occur before the beztriple to be pasted (originally in ei->icu) */
+ if (i > 0)
+ memcpy(newb, icu->bezt, i*sizeof(BezTriple));
+
+ /* add beztriple to paste at index i */
+ *(newb + i)= *bezt;
+
+ /* add the beztriples that occur after the beztriple to be pasted (originally in icu) */
+ if (i < icu->totvert)
+ memcpy(newb+i+1, icu->bezt+i, (icu->totvert-i)*sizeof(BezTriple));
+
+ /* replace (+ free) old with new */
+ MEM_freeN(icu->bezt);
+ icu->bezt= newb;
+
+ icu->totvert++;
+ }
+ }
+
+ /* we need to return the index, so that some tools which do post-processing can
+ * detect where we added the BezTriple in the array
+ */
+ return i;
+}
+
+/* This function is a wrapper for insert_bezt_icu, and should be used when
+ * adding a new keyframe to a curve, when the keyframe doesn't exist anywhere
+ * else yet.
+ *
+ * 'fast' - is only for the python API where importing BVH's would take an extreamly long time.
+ */
+void insert_vert_icu (IpoCurve *icu, float x, float y, short fast)
+{
+ BezTriple beztr;
+ int a, h1, h2;
+
+ /* set all three points, for nicer start position */
+ memset(&beztr, 0, sizeof(BezTriple));
+ beztr.vec[0][0]= x;
+ beztr.vec[0][1]= y;
+ beztr.vec[1][0]= x;
+ beztr.vec[1][1]= y;
+ beztr.vec[2][0]= x;
+ beztr.vec[2][1]= y;
+ beztr.hide= IPO_BEZ;
+ beztr.f1= beztr.f2= beztr.f3= SELECT;
+ beztr.h1= beztr.h2= HD_AUTO;
+
+ /* add temp beztriple to keyframes */
+ a= insert_bezt_icu(icu, &beztr);
+ if (!fast) calchandles_ipocurve(icu);
+
+ /* set handletype */
+ if (icu->totvert > 2) {
+ BezTriple *bezt;
+
+ h1= h2= HD_AUTO;
+ bezt= (icu->bezt + a);
+
+ if (a > 0) h1= (bezt-1)->h2;
+ if (a < icu->totvert-1) h2= (bezt+1)->h1;
+
+ bezt->h1= h1;
+ bezt->h2= h2;
+
+ if (!fast) calchandles_ipocurve(icu);
+ }
+}
+
+/* ------------------- Get Data ------------------------ */
+
+/* Get pointer to use to get values from */
+// FIXME: this should not be possible with Data-API
+static void *get_context_ipo_poin (ID *id, int blocktype, char *actname, char *constname, IpoCurve *icu, int *vartype)
+{
+ switch (blocktype) {
+ case ID_PO: /* posechannel */
+ if (GS(id->name)==ID_OB) {
+ Object *ob= (Object *)id;
+ bPoseChannel *pchan= get_pose_channel(ob->pose, actname);
+
+ if (pchan) {
+ *vartype= IPO_FLOAT;
+ return get_pchan_ipo_poin(pchan, icu->adrcode);
+ }
+ }
+ break;
+
+ case ID_CO: /* constraint */
+ if ((GS(id->name)==ID_OB) && (constname && constname[0])) {
+ Object *ob= (Object *)id;
+ bConstraint *con;
+
+ /* assume that we only want the influence (as only used for Constraint Channels) */
+ if ((ob->ipoflag & OB_ACTION_OB) && !strcmp(actname, "Object")) {
+ for (con= ob->constraints.first; con; con= con->next) {
+ if (strcmp(constname, con->name)==0) {
+ *vartype= IPO_FLOAT;
+ return &con->enforce;
+ }
+ }
+ }
+ else if (ob->pose) {
+ bPoseChannel *pchan= get_pose_channel(ob->pose, actname);
+
+ if (pchan) {
+ for (con= pchan->constraints.first; con; con= con->next) {
+ if (strcmp(constname, con->name)==0) {
+ *vartype= IPO_FLOAT;
+ return &con->enforce;
+ }
+ }
+ }
+ }
+ }
+ break;
+
+ case ID_OB: /* object */
+ /* hack: layer channels for object need to be keyed WITHOUT localview flag...
+ * tsk... tsk... why must we just dump bitflags upon users :/
+ */
+ if ((GS(id->name)==ID_OB) && (icu->adrcode==OB_LAY)) {
+ Object *ob= (Object *)id;
+ static int layer = 0;
+
+ /* init layer to be the object's layer var, then remove local view from it */
+ layer = ob->lay;
+ layer &= 0xFFFFFF;
+ *vartype= IPO_INT_BIT;
+
+ /* return pointer to this static var
+ * - assumes that this pointer won't be stored for use later, so may not be threadsafe
+ * if multiple keyframe calls are made, but that is unlikely to happen in the near future
+ */
+ return (void *)(&layer);
+ }
+ /* no break here for other ob channel-types - as they can be done normally */
+
+ default: /* normal data-source */
+ return get_ipo_poin(id, icu, vartype);
+ }
+
+ /* not valid... */
+ return NULL;
+}
+
+
+/* -------------- 'Smarter' Keyframing Functions -------------------- */
+/* return codes for new_key_needed */
+enum {
+ KEYNEEDED_DONTADD = 0,
+ KEYNEEDED_JUSTADD,
+ KEYNEEDED_DELPREV,
+ KEYNEEDED_DELNEXT
+} eKeyNeededStatus;
+
+/* This helper function determines whether a new keyframe is needed */
+/* Cases where keyframes should not be added:
+ * 1. Keyframe to be added bewteen two keyframes with similar values
+ * 2. Keyframe to be added on frame where two keyframes are already situated
+ * 3. Keyframe lies at point that intersects the linear line between two keyframes
+ */
+static short new_key_needed (IpoCurve *icu, float cFrame, float nValue)
+{
+ BezTriple *bezt=NULL, *prev=NULL;
+ int totCount, i;
+ float valA = 0.0f, valB = 0.0f;
+
+ /* safety checking */
+ if (icu == NULL) return KEYNEEDED_JUSTADD;
+ totCount= icu->totvert;
+ if (totCount == 0) return KEYNEEDED_JUSTADD;
+
+ /* loop through checking if any are the same */
+ bezt= icu->bezt;
+ for (i=0; i<totCount; i++) {
+ float prevPosi=0.0f, prevVal=0.0f;
+ float beztPosi=0.0f, beztVal=0.0f;
+
+ /* get current time+value */
+ beztPosi= bezt->vec[1][0];
+ beztVal= bezt->vec[1][1];
+
+ if (prev) {
+ /* there is a keyframe before the one currently being examined */
+
+ /* get previous time+value */
+ prevPosi= prev->vec[1][0];
+ prevVal= prev->vec[1][1];
+
+ /* keyframe to be added at point where there are already two similar points? */
+ if (IS_EQ(prevPosi, cFrame) && IS_EQ(beztPosi, cFrame) && IS_EQ(beztPosi, prevPosi)) {
+ return KEYNEEDED_DONTADD;
+ }
+
+ /* keyframe between prev+current points ? */
+ if ((prevPosi <= cFrame) && (cFrame <= beztPosi)) {
+ /* is the value of keyframe to be added the same as keyframes on either side ? */
+ if (IS_EQ(prevVal, nValue) && IS_EQ(beztVal, nValue) && IS_EQ(prevVal, beztVal)) {
+ return KEYNEEDED_DONTADD;
+ }
+ else {
+ float realVal;
+
+ /* get real value of curve at that point */
+ realVal= eval_icu(icu, cFrame);
+
+ /* compare whether it's the same as proposed */
+ if (IS_EQ(realVal, nValue))
+ return KEYNEEDED_DONTADD;
+ else
+ return KEYNEEDED_JUSTADD;
+ }
+ }
+
+ /* new keyframe before prev beztriple? */
+ if (cFrame < prevPosi) {
+ /* A new keyframe will be added. However, whether the previous beztriple
+ * stays around or not depends on whether the values of previous/current
+ * beztriples and new keyframe are the same.
+ */
+ if (IS_EQ(prevVal, nValue) && IS_EQ(beztVal, nValue) && IS_EQ(prevVal, beztVal))
+ return KEYNEEDED_DELNEXT;
+ else
+ return KEYNEEDED_JUSTADD;
+ }
+ }
+ else {
+ /* just add a keyframe if there's only one keyframe
+ * and the new one occurs before the exisiting one does.
+ */
+ if ((cFrame < beztPosi) && (totCount==1))
+ return KEYNEEDED_JUSTADD;
+ }
+
+ /* continue. frame to do not yet passed (or other conditions not met) */
+ if (i < (totCount-1)) {
+ prev= bezt;
+ bezt++;
+ }
+ else
+ break;
+ }
+
+ /* Frame in which to add a new-keyframe occurs after all other keys
+ * -> If there are at least two existing keyframes, then if the values of the
+ * last two keyframes and the new-keyframe match, the last existing keyframe
+ * gets deleted as it is no longer required.
+ * -> Otherwise, a keyframe is just added. 1.0 is added so that fake-2nd-to-last
+ * keyframe is not equal to last keyframe.
+ */
+ bezt= (icu->bezt + (icu->totvert - 1));
+ valA= bezt->vec[1][1];
+
+ if (prev)
+ valB= prev->vec[1][1];
+ else
+ valB= bezt->vec[1][1] + 1.0f;
+
+ if (IS_EQ(valA, nValue) && IS_EQ(valA, valB))
+ return KEYNEEDED_DELPREV;
+ else
+ return KEYNEEDED_JUSTADD;
+}
+
+/* ------------------ 'Visual' Keyframing Functions ------------------ */
+
+/* internal status codes for visualkey_can_use */
+enum {
+ VISUALKEY_NONE = 0,
+ VISUALKEY_LOC,
+ VISUALKEY_ROT
+};
+
+/* This helper function determines if visual-keyframing should be used when
+ * inserting keyframes for the given channel. As visual-keyframing only works
+ * on Object and Pose-Channel blocks, this should only get called for those
+ * blocktypes, when using "standard" keying but 'Visual Keying' option in Auto-Keying
+ * settings is on.
+ */
+static short visualkey_can_use (ID *id, int blocktype, char *actname, char *constname, int adrcode)
+{
+ Object *ob= NULL;
+ bConstraint *con= NULL;
+ short searchtype= VISUALKEY_NONE;
+
+ /* validate data */
+ if ((id == NULL) || (GS(id->name)!=ID_OB) || !(ELEM(blocktype, ID_OB, ID_PO)))
+ return 0;
+
+ /* get first constraint and determine type of keyframe constraints to check for*/
+ ob= (Object *)id;
+
+ if (blocktype == ID_OB) {
+ con= ob->constraints.first;
+
+ if (ELEM3(adrcode, OB_LOC_X, OB_LOC_Y, OB_LOC_Z))
+ searchtype= VISUALKEY_LOC;
+ else if (ELEM3(adrcode, OB_ROT_X, OB_ROT_Y, OB_ROT_Z))
+ searchtype= VISUALKEY_ROT;
+ }
+ else if (blocktype == ID_PO) {
+ bPoseChannel *pchan= get_pose_channel(ob->pose, actname);
+ con= pchan->constraints.first;
+
+ if (ELEM3(adrcode, AC_LOC_X, AC_LOC_Y, AC_LOC_Z))
+ searchtype= VISUALKEY_LOC;
+ else if (ELEM4(adrcode, AC_QUAT_W, AC_QUAT_X, AC_QUAT_Y, AC_QUAT_Z))
+ searchtype= VISUALKEY_ROT;
+ }
+
+ /* only search if a searchtype and initial constraint are available */
+ if (searchtype && con) {
+ for (; con; con= con->next) {
+ /* only consider constraint if it is not disabled, and has influence */
+ if (con->flag & CONSTRAINT_DISABLE) continue;
+ if (con->enforce == 0.0f) continue;
+
+ /* some constraints may alter these transforms */
+ switch (con->type) {
+ /* multi-transform constraints */
+ case CONSTRAINT_TYPE_CHILDOF:
+ return 1;
+ case CONSTRAINT_TYPE_TRANSFORM:
+ return 1;
+ case CONSTRAINT_TYPE_FOLLOWPATH:
+ return 1;
+
+ /* single-transform constraits */
+ case CONSTRAINT_TYPE_TRACKTO:
+ if (searchtype==VISUALKEY_ROT) return 1;
+ break;
+ case CONSTRAINT_TYPE_ROTLIMIT:
+ if (searchtype==VISUALKEY_ROT) return 1;
+ break;
+ case CONSTRAINT_TYPE_LOCLIMIT:
+ if (searchtype==VISUALKEY_LOC) return 1;
+ break;
+ case CONSTRAINT_TYPE_ROTLIKE:
+ if (searchtype==VISUALKEY_ROT) return 1;
+ break;
+ case CONSTRAINT_TYPE_DISTLIMIT:
+ if (searchtype==VISUALKEY_LOC) return 1;
+ break;
+ case CONSTRAINT_TYPE_LOCLIKE:
+ if (searchtype==VISUALKEY_LOC) return 1;
+ break;
+ case CONSTRAINT_TYPE_LOCKTRACK:
+ if (searchtype==VISUALKEY_ROT) return 1;
+ break;
+ case CONSTRAINT_TYPE_MINMAX:
+ if (searchtype==VISUALKEY_LOC) return 1;
+ break;
+
+ default:
+ break;
+ }
+ }
+ }
+
+ /* when some condition is met, this function returns, so here it can be 0 */
+ return 0;
+}
+
+/* This helper function extracts the value to use for visual-keyframing
+ * In the event that it is not possible to perform visual keying, try to fall-back
+ * to using the poin method. Assumes that all data it has been passed is valid.
+ */
+static float visualkey_get_value (ID *id, int blocktype, char *actname, char *constname, int adrcode, IpoCurve *icu)
+{
+ Object *ob;
+ void *poin = NULL;
+ int index, vartype;
+
+ /* validate situtation */
+ if ((id==NULL) || (GS(id->name)!=ID_OB) || (ELEM(blocktype, ID_OB, ID_PO)==0))
+ return 0.0f;
+
+ /* get object */
+ ob= (Object *)id;
+
+ /* only valid for objects or posechannels */
+ if (blocktype == ID_OB) {
+ /* parented objects are not supported, as the effects of the parent
+ * are included in the matrix, which kindof beats the point
+ */
+ if (ob->parent == NULL) {
+ /* only Location or Rotation keyframes are supported now */
+ if (ELEM3(adrcode, OB_LOC_X, OB_LOC_Y, OB_LOC_Z)) {
+ /* assumes that OB_LOC_Z > OB_LOC_Y > OB_LOC_X */
+ index= adrcode - OB_LOC_X;
+
+ return ob->obmat[3][index];
+ }
+ else if (ELEM3(adrcode, OB_ROT_X, OB_ROT_Y, OB_ROT_Z)) {
+ float eul[3];
+
+ /* assumes that OB_ROT_Z > OB_ROT_Y > OB_ROT_X */
+ index= adrcode - OB_ROT_X;
+
+ Mat4ToEul(ob->obmat, eul);
+ return eul[index]*(5.72958);
+ }
+ }
+ }
+ else if (blocktype == ID_PO) {
+ bPoseChannel *pchan;
+ float tmat[4][4];
+
+ /* get data to use */
+ pchan= get_pose_channel(ob->pose, actname);
+
+ /* Although it is not strictly required for this particular space conversion,
+ * arg1 must not be null, as there is a null check for the other conversions to
+ * be safe. Therefore, the active object is passed here, and in many cases, this
+ * will be what owns the pose-channel that is getting this anyway.
+ */
+ Mat4CpyMat4(tmat, pchan->pose_mat);
+ constraint_mat_convertspace(ob, pchan, tmat, CONSTRAINT_SPACE_POSE, CONSTRAINT_SPACE_LOCAL);
+
+ /* Loc, Rot/Quat keyframes are supported... */
+ if (ELEM3(adrcode, AC_LOC_X, AC_LOC_Y, AC_LOC_Z)) {
+ /* assumes that AC_LOC_Z > AC_LOC_Y > AC_LOC_X */
+ index= adrcode - AC_LOC_X;
+
+ /* only use for non-connected bones */
+ if ((pchan->bone->parent) && !(pchan->bone->flag & BONE_CONNECTED))
+ return tmat[3][index];
+ else if (pchan->bone->parent == NULL)
+ return tmat[3][index];
+ }
+ else if (ELEM4(adrcode, AC_QUAT_W, AC_QUAT_X, AC_QUAT_Y, AC_QUAT_Z)) {
+ float trimat[3][3], quat[4];
+
+ /* assumes that AC_QUAT_Z > AC_QUAT_Y > AC_QUAT_X > AC_QUAT_W */
+ index= adrcode - AC_QUAT_W;
+
+ Mat3CpyMat4(trimat, tmat);
+ Mat3ToQuat_is_ok(trimat, quat);
+
+ return quat[index];
+ }
+ }
+
+ /* as the function hasn't returned yet, try reading from poin */
+ poin= get_context_ipo_poin(id, blocktype, actname, constname, icu, &vartype);
+ if (poin)
+ return read_ipo_poin(poin, vartype);
+ else
+ return 0.0;
+}
+
+
+/* ------------------------- Insert Key API ------------------------- */
+
+/* Main Keyframing API call:
+ * Use this when validation of necessary animation data isn't necessary as it
+ * already exists. It will insert a keyframe using the current value being keyframed.
+ *
+ * The flag argument is used for special settings that alter the behaviour of
+ * the keyframe insertion. These include the 'visual' keyframing modes, quick refresh,
+ * and extra keyframe filtering.
+ */
+short insertkey (ID *id, int blocktype, char *actname, char *constname, int adrcode, short flag)
+{
+ IpoCurve *icu;
+
+ /* get ipo-curve */
+ icu= verify_ipocurve(id, blocktype, actname, constname, NULL, adrcode, 1);
+
+ /* only continue if we have an ipo-curve to add keyframe to */
+ if (icu) {
+ float cfra = frame_to_float(CFRA);
+ float curval= 0.0f;
+
+ /* apply special time tweaking */
+ if (GS(id->name) == ID_OB) {
+ Object *ob= (Object *)id;
+
+ /* apply NLA-scaling (if applicable) */
+ if (actname && actname[0])
+ cfra= get_action_frame(ob, cfra);
+
+ /* ancient time-offset cruft */
+ if ( (ob->ipoflag & OB_OFFS_OB) && (give_timeoffset(ob)) ) {
+ /* actually frametofloat calc again! */
+ cfra-= give_timeoffset(ob)*G.scene->r.framelen;
+ }
+ }
+
+ /* obtain value to give keyframe */
+ if ( (flag & INSERTKEY_MATRIX) &&
+ (visualkey_can_use(id, blocktype, actname, constname, adrcode)) )
+ {
+ /* visual-keying is only available for object and pchan datablocks, as
+ * it works by keyframing using a value extracted from the final matrix
+ * instead of using the kt system to extract a value.
+ */
+ curval= visualkey_get_value(id, blocktype, actname, constname, adrcode, icu);
+ }
+ else {
+ void *poin;
+ int vartype;
+
+ /* get pointer to data to read from */
+ poin = get_context_ipo_poin(id, blocktype, actname, constname, icu, &vartype);
+ if (poin == NULL) {
+ printf("Insert Key: No pointer to variable obtained \n");
+ return 0;
+ }
+
+ /* use kt's read_poin function to extract value (kt->read_poin should
+ * exist in all cases, but it never hurts to check)
+ */
+ curval= read_ipo_poin(poin, vartype);
+ }
+
+ /* only insert keyframes where they are needed */
+ if (flag & INSERTKEY_NEEDED) {
+ short insert_mode;
+
+ /* check whether this curve really needs a new keyframe */
+ insert_mode= new_key_needed(icu, cfra, curval);
+
+ /* insert new keyframe at current frame */
+ if (insert_mode)
+ insert_vert_icu(icu, cfra, curval, (flag & INSERTKEY_FAST));
+
+ /* delete keyframe immediately before/after newly added */
+ switch (insert_mode) {
+ case KEYNEEDED_DELPREV:
+ delete_icu_key(icu, icu->totvert-2, 1);
+ break;
+ case KEYNEEDED_DELNEXT:
+ delete_icu_key(icu, 1, 1);
+ break;
+ }
+
+ /* only return success if keyframe added */
+ if (insert_mode)
+ return 1;
+ }
+ else {
+ /* just insert keyframe */
+ insert_vert_icu(icu, cfra, curval, (flag & INSERTKEY_FAST));
+
+ /* return success */
+ return 1;
+ }
+ }
+
+ /* return failure */
+ return 0;
+}
+
+
+/* ************************************************** */
+/* KEYFRAME DELETION */
+
+/* Main Keyframing API call:
+ * Use this when validation of necessary animation data isn't necessary as it
+ * already exists. It will delete a keyframe at the current frame.
+ *
+ * The flag argument is used for special settings that alter the behaviour of
+ * the keyframe deletion. These include the quick refresh options.
+ */
+short deletekey (ID *id, int blocktype, char *actname, char *constname, int adrcode, short flag)
+{
+ Ipo *ipo;
+ IpoCurve *icu;
+
+ /* get ipo-curve
+ * Note: here is one of the places where we don't want new ipo + ipo-curve added!
+ * so 'add' var must be 0
+ */
+ ipo= verify_ipo(id, blocktype, actname, constname, NULL, 0);
+ icu= verify_ipocurve(id, blocktype, actname, constname, NULL, adrcode, 0);
+
+ /* only continue if we have an ipo-curve to remove keyframes from */
+ if (icu) {
+ float cfra = frame_to_float(CFRA);
+ short found = -1;
+ int i;
+
+ /* apply special time tweaking */
+ if (GS(id->name) == ID_OB) {
+ Object *ob= (Object *)id;
+
+ /* apply NLA-scaling (if applicable) */
+ if (actname && actname[0])
+ cfra= get_action_frame(ob, cfra);
+
+ /* ancient time-offset cruft */
+ if ( (ob->ipoflag & OB_OFFS_OB) && (give_timeoffset(ob)) ) {
+ /* actually frametofloat calc again! */
+ cfra-= give_timeoffset(ob)*G.scene->r.framelen;
+ }
+ }
+
+ /* try to find index of beztriple to get rid of */
+ i = binarysearch_bezt_index(icu->bezt, cfra, icu->totvert, &found);
+ if (found) {
+ /* delete the key at the index (will sanity check + do recalc afterwards ) */
+ delete_icu_key(icu, i, 1);
+
+ /* Only delete curve too if there isn't an ipo-driver still hanging around on an empty curve */
+ if (icu->totvert==0 && icu->driver==NULL) {
+ BLI_remlink(&ipo->curve, icu);
+ free_ipo_curve(icu);
+ }
+
+ /* return success */
+ return 1;
+ }
+ }
+
+ /* return failure */
+ return 0;
+}
+
+/* ************************************************** */
+/* COMMON KEYFRAME MANAGEMENT (common_insertkey/deletekey) */
+
+/* mode for common_modifykey */
+enum {
+ COMMONKEY_MODE_INSERT = 0,
+ COMMONKEY_MODE_DELETE,
+} eCommonModifyKey_Modes;
+
+/* ------------- KeyingSet Defines ------------ */
+/* Note: these must all be named with the defks_* prefix, otherwise the template macro will not work! */
+
+/* macro for defining keyingset contexts */
+#define KSC_TEMPLATE(ctx_name) {&defks_##ctx_name[0], NULL, sizeof(defks_##ctx_name)/sizeof(bKeyingSet)}
+
+/* --- */
+
+/* check if option not available for deleting keys */
+static short incl_non_del_keys (bKeyingSet *ks, const char mode[])
+{
+ /* as optimisation, assume that it is sufficient to check only first letter
+ * of mode (int comparison should be faster than string!)
+ */
+ //if (strcmp(mode, "Delete")==0)
+ if (mode && mode[0]=='D')
+ return 0;
+
+ return 1;
+}
+
+/* Object KeyingSets ------ */
+
+/* check if include shapekey entry */
+static short incl_v3d_ob_shapekey (bKeyingSet *ks, const char mode[])
+{
+ Object *ob= (G.obedit)? (G.obedit) : (OBACT);
+ char *newname= NULL;
+
+ /* not available for delete mode */
+ if (strcmp(mode, "Delete")==0)
+ return 0;
+
+ /* check if is geom object that can get shapekeys */
+ switch (ob->type) {
+ /* geometry? */
+ case OB_MESH: newname= "Mesh"; break;
+ case OB_CURVE: newname= "Curve"; break;
+ case OB_SURF: newname= "Surface"; break;
+ case OB_LATTICE: newname= "Lattice"; break;
+
+ /* not geometry! */
+ default:
+ return 0;
+ }
+
+ /* if ks is shapekey entry (this could be callled for separator before too!) */
+ if (ks->flag == -3)
+ sprintf(ks->name, newname);
+
+ /* if it gets here, it's ok */
+ return 1;
+}
+
+/* array for object keyingset defines */
+bKeyingSet defks_v3d_object[] =
+{
+ /* include_cb, name, blocktype, flag, chan_num, adrcodes */
+ {NULL, "Loc", ID_OB, 0, 3, {OB_LOC_X,OB_LOC_Y,OB_LOC_Z}},
+ {NULL, "Rot", ID_OB, 0, 3, {OB_ROT_X,OB_ROT_Y,OB_ROT_Z}},
+ {NULL, "Scale", ID_OB, 0, 3, {OB_SIZE_X,OB_SIZE_Y,OB_SIZE_Z}},
+
+ {NULL, "%l", 0, -1, 0, {0}}, // separator
+
+ {NULL, "LocRot", ID_OB, 0, 6,
+ {OB_LOC_X,OB_LOC_Y,OB_LOC_Z,
+ OB_ROT_X,OB_ROT_Y,OB_ROT_Z}},
+
+ {NULL, "LocScale", ID_OB, 0, 6,
+ {OB_LOC_X,OB_LOC_Y,OB_LOC_Z,
+ OB_SIZE_X,OB_SIZE_Y,OB_SIZE_Z}},
+
+ {NULL, "LocRotScale", ID_OB, 0, 9,
+ {OB_LOC_X,OB_LOC_Y,OB_LOC_Z,
+ OB_ROT_X,OB_ROT_Y,OB_ROT_Z,
+ OB_SIZE_X,OB_SIZE_Y,OB_SIZE_Z}},
+
+ {NULL, "RotScale", ID_OB, 0, 6,
+ {OB_ROT_X,OB_ROT_Y,OB_ROT_Z,
+ OB_SIZE_X,OB_SIZE_Y,OB_SIZE_Z}},
+
+ {incl_non_del_keys, "%l", 0, -1, 0, {0}}, // separator
+
+ {incl_non_del_keys, "VisualLoc", ID_OB, INSERTKEY_MATRIX, 3, {OB_LOC_X,OB_LOC_Y,OB_LOC_Z}},
+ {incl_non_del_keys, "VisualRot", ID_OB, INSERTKEY_MATRIX, 3, {OB_ROT_X,OB_ROT_Y,OB_ROT_Z}},
+
+ {incl_non_del_keys, "VisualLocRot", ID_OB, INSERTKEY_MATRIX, 6,
+ {OB_LOC_X,OB_LOC_Y,OB_LOC_Z,
+ OB_ROT_X,OB_ROT_Y,OB_ROT_Z}},
+
+ {NULL, "%l", 0, -1, 0, {0}}, // separator
+
+ {NULL, "Layer", ID_OB, 0, 1, {OB_LAY}}, // icky option...
+ {NULL, "Available", ID_OB, -2, 0, {0}},
+
+ {incl_v3d_ob_shapekey, "%l%l", 0, -1, 0, {0}}, // separator (linked to shapekey entry)
+ {incl_v3d_ob_shapekey, "<ShapeKey>", ID_OB, -3, 0, {0}}
+};
+
+/* PoseChannel KeyingSets ------ */
+
+/* array for posechannel keyingset defines */
+bKeyingSet defks_v3d_pchan[] =
+{
+ /* include_cb, name, blocktype, flag, chan_num, adrcodes */
+ {NULL, "Loc", ID_PO, 0, 3, {AC_LOC_X,AC_LOC_Y,AC_LOC_Z}},
+ {NULL, "Rot", ID_PO, 0, 4, {AC_QUAT_W,AC_QUAT_X,AC_QUAT_Y,AC_QUAT_Z}},
+ {NULL, "Scale", ID_PO, 0, 3, {AC_SIZE_X,AC_SIZE_Y,AC_SIZE_Z}},
+
+ {NULL, "%l", 0, -1, 0, {0}}, // separator
+
+ {NULL, "LocRot", ID_PO, 0, 7,
+ {AC_LOC_X,AC_LOC_Y,AC_LOC_Z,AC_QUAT_W,
+ AC_QUAT_X,AC_QUAT_Y,AC_QUAT_Z}},
+
+ {NULL, "LocScale", ID_PO, 0, 6,
+ {AC_LOC_X,AC_LOC_Y,AC_LOC_Z,
+ AC_SIZE_X,AC_SIZE_Y,AC_SIZE_Z}},
+
+ {NULL, "LocRotScale", ID_PO, 0, 10,
+ {AC_LOC_X,AC_LOC_Y,AC_LOC_Z,AC_QUAT_W,AC_QUAT_X,
+ AC_QUAT_Y,AC_QUAT_Z,AC_SIZE_X,AC_SIZE_Y,AC_SIZE_Z}},
+
+ {NULL, "RotScale", ID_PO, 0, 7,
+ {AC_QUAT_W,AC_QUAT_X,AC_QUAT_Y,AC_QUAT_Z,
+ AC_SIZE_X,AC_SIZE_Y,AC_SIZE_Z}},
+
+ {incl_non_del_keys, "%l", 0, -1, 0, {0}}, // separator
+
+ {incl_non_del_keys, "VisualLoc", ID_PO, INSERTKEY_MATRIX, 3, {AC_LOC_X,AC_LOC_Y,AC_LOC_Z}},
+ {incl_non_del_keys, "VisualRot", ID_PO, INSERTKEY_MATRIX, 4, {AC_QUAT_W,AC_QUAT_X,AC_QUAT_Y,AC_QUAT_Z}},
+
+ {incl_non_del_keys, "VisualLocRot", ID_PO, INSERTKEY_MATRIX, 7,
+ {AC_LOC_X,AC_LOC_Y,AC_LOC_Z,AC_QUAT_W,
+ AC_QUAT_X,AC_QUAT_Y,AC_QUAT_Z}},
+
+ {NULL, "%l", 0, -1, 0, {0}}, // separator
+
+ {NULL, "Available", ID_PO, -2, 0, {0}}
+};
+
+/* Material KeyingSets ------ */
+
+/* array for material keyingset defines */
+bKeyingSet defks_buts_shading_mat[] =
+{
+ /* include_cb, name, blocktype, flag, chan_num, adrcodes */
+ {NULL, "RGB", ID_MA, 0, 3, {MA_COL_R,MA_COL_G,MA_COL_B}},
+ {NULL, "Alpha", ID_MA, 0, 1, {MA_ALPHA}},
+ {NULL, "Halo Size", ID_MA, 0, 1, {MA_HASIZE}},
+ {NULL, "Mode", ID_MA, 0, 1, {MA_MODE}}, // evil bitflags
+
+ {NULL, "%l", 0, -1, 0, {0}}, // separator
+
+ {NULL, "All Color", ID_MA, 0, 18,
+ {MA_COL_R,MA_COL_G,MA_COL_B,
+ MA_ALPHA,MA_HASIZE, MA_MODE,
+ MA_SPEC_R,MA_SPEC_G,MA_SPEC_B,
+ MA_REF,MA_EMIT,MA_AMB,MA_SPEC,MA_HARD,
+ MA_MODE,MA_TRANSLU,MA_ADD}},
+
+ {NULL, "All Mirror", ID_MA, 0, 5,
+ {MA_RAYM,MA_FRESMIR,MA_FRESMIRI,
+ MA_FRESTRA,MA_FRESTRAI}},
+
+ {NULL, "%l", 0, -1, 0, {0}}, // separator
+
+ {NULL, "Ofs", ID_MA, COMMONKEY_ADDMAP, 3, {MAP_OFS_X,MAP_OFS_Y,MAP_OFS_Z}},
+ {NULL, "Size", ID_MA, COMMONKEY_ADDMAP, 3, {MAP_SIZE_X,MAP_SIZE_Y,MAP_SIZE_Z}},
+
+ {NULL, "All Mapping", ID_MA, COMMONKEY_ADDMAP, 14,
+ {MAP_OFS_X,MAP_OFS_Y,MAP_OFS_Z,
+ MAP_SIZE_X,MAP_SIZE_Y,MAP_SIZE_Z,
+ MAP_R,MAP_G,MAP_B,MAP_DVAR,
+ MAP_COLF,MAP_NORF,MAP_VARF,MAP_DISP}},
+
+ {NULL, "%l", 0, -1, 0, {0}}, // separator
+
+ {NULL, "Available", ID_MA, -2, 0, {0}}
+};
+
+/* World KeyingSets ------ */
+
+/* array for world keyingset defines */
+bKeyingSet defks_buts_shading_wo[] =
+{
+ /* include_cb, name, blocktype, flag, chan_num, adrcodes */
+ {NULL, "Zenith RGB", ID_WO, 0, 3, {WO_ZEN_R,WO_ZEN_G,WO_ZEN_B}},
+ {NULL, "Horizon RGB", ID_WO, 0, 3, {WO_HOR_R,WO_HOR_G,WO_HOR_B}},
+
+ {NULL, "%l", 0, -1, 0, {0}}, // separator
+
+ {NULL, "Mist", ID_WO, 0, 4, {WO_MISI,WO_MISTDI,WO_MISTSTA,WO_MISTHI}},
+ {NULL, "Stars", ID_WO, 0, 5, {WO_STAR_R,WO_STAR_G,WO_STAR_B,WO_STARDIST,WO_STARSIZE}},
+
+
+ {NULL, "%l", 0, -1, 0, {0}}, // separator
+
+ {NULL, "Ofs", ID_WO, COMMONKEY_ADDMAP, 3, {MAP_OFS_X,MAP_OFS_Y,MAP_OFS_Z}},
+ {NULL, "Size", ID_WO, COMMONKEY_ADDMAP, 3, {MAP_SIZE_X,MAP_SIZE_Y,MAP_SIZE_Z}},
+
+ {NULL, "All Mapping", ID_WO, COMMONKEY_ADDMAP, 14,
+ {MAP_OFS_X,MAP_OFS_Y,MAP_OFS_Z,
+ MAP_SIZE_X,MAP_SIZE_Y,MAP_SIZE_Z,
+ MAP_R,MAP_G,MAP_B,MAP_DVAR,
+ MAP_COLF,MAP_NORF,MAP_VARF,MAP_DISP}},
+
+ {NULL, "%l", 0, -1, 0, {0}}, // separator
+
+ {NULL, "Available", ID_WO, -2, 0, {0}}
+};
+
+/* Lamp KeyingSets ------ */
+
+/* array for lamp keyingset defines */
+bKeyingSet defks_buts_shading_la[] =
+{
+ /* include_cb, name, blocktype, flag, chan_num, adrcodes */
+ {NULL, "RGB", ID_LA, 0, 3, {LA_COL_R,LA_COL_G,LA_COL_B}},
+ {NULL, "Energy", ID_LA, 0, 1, {LA_ENERGY}},
+ {NULL, "Spot Size", ID_LA, 0, 1, {LA_SPOTSI}},
+
+ {NULL, "%l", 0, -1, 0, {0}}, // separator
+
+ {NULL, "Ofs", ID_LA, COMMONKEY_ADDMAP, 3, {MAP_OFS_X,MAP_OFS_Y,MAP_OFS_Z}},
+ {NULL, "Size", ID_LA, COMMONKEY_ADDMAP, 3, {MAP_SIZE_X,MAP_SIZE_Y,MAP_SIZE_Z}},
+
+ {NULL, "All Mapping", ID_LA, COMMONKEY_ADDMAP, 14,
+ {MAP_OFS_X,MAP_OFS_Y,MAP_OFS_Z,
+ MAP_SIZE_X,MAP_SIZE_Y,MAP_SIZE_Z,
+ MAP_R,MAP_G,MAP_B,MAP_DVAR,
+ MAP_COLF,MAP_NORF,MAP_VARF,MAP_DISP}},
+
+ {NULL, "%l", 0, -1, 0, {0}}, // separator
+
+ {NULL, "Available", ID_LA, -2, 0, {0}}
+};
+
+/* Texture KeyingSets ------ */
+
+/* array for texture keyingset defines */
+bKeyingSet defks_buts_shading_tex[] =
+{
+ /* include_cb, name, blocktype, flag, chan_num, adrcodes */
+ {NULL, "Clouds", ID_TE, 0, 5,
+ {TE_NSIZE,TE_NDEPTH,TE_NTYPE,
+ TE_MG_TYP,TE_N_BAS1}},
+
+ {NULL, "Marble", ID_TE, 0, 7,
+ {TE_NSIZE,TE_NDEPTH,TE_NTYPE,
+ TE_TURB,TE_MG_TYP,TE_N_BAS1,TE_N_BAS2}},
+
+ {NULL, "Stucci", ID_TE, 0, 5,
+ {TE_NSIZE,TE_NTYPE,TE_TURB,
+ TE_MG_TYP,TE_N_BAS1}},
+
+ {NULL, "Wood", ID_TE, 0, 6,
+ {TE_NSIZE,TE_NTYPE,TE_TURB,
+ TE_MG_TYP,TE_N_BAS1,TE_N_BAS2}},
+
+ {NULL, "Magic", ID_TE, 0, 2, {TE_NDEPTH,TE_TURB}},
+
+ {NULL, "Blend", ID_TE, 0, 1, {TE_MG_TYP}},
+
+ {NULL, "Musgrave", ID_TE, 0, 6,
+ {TE_MG_TYP,TE_MGH,TE_MG_LAC,
+ TE_MG_OCT,TE_MG_OFF,TE_MG_GAIN}},
+
+ {NULL, "Voronoi", ID_TE, 0, 9,
+ {TE_VNW1,TE_VNW2,TE_VNW3,TE_VNW4,
+ TE_VNMEXP,TE_VN_DISTM,TE_VN_COLT,
+ TE_ISCA,TE_NSIZE}},
+
+ {NULL, "Distorted Noise", ID_TE, 0, 4,
+ {TE_MG_OCT,TE_MG_OFF,TE_MG_GAIN,TE_DISTA}},
+
+ {NULL, "Color Filter", ID_TE, 0, 5,
+ {TE_COL_R,TE_COL_G,TE_COL_B,TE_BRIGHT,TE_CONTRA}},
+
+ {NULL, "%l", 0, -1, 0, {0}}, // separator
+
+ {NULL, "Available", ID_TE, -2, 0, {0}}
+};
+
+/* Object Buttons KeyingSets ------ */
+
+/* check if include particles entry */
+static short incl_buts_ob (bKeyingSet *ks, const char mode[])
+{
+ Object *ob= OBACT;
+ /* only if object is mesh type */
+ return (ob->type == OB_MESH);
+}
+
+/* array for texture keyingset defines */
+bKeyingSet defks_buts_object[] =
+{
+ /* include_cb, name, blocktype, flag, chan_num, adrcodes */
+ {incl_buts_ob, "Surface Damping", ID_OB, 0, 1, {OB_PD_SDAMP}},
+ {incl_buts_ob, "Random Damping", ID_OB, 0, 1, {OB_PD_RDAMP}},
+ {incl_buts_ob, "Permeability", ID_OB, 0, 1, {OB_PD_PERM}},
+
+ {NULL, "%l", 0, -1, 0, {0}}, // separator
+
+ {NULL, "Force Strength", ID_OB, 0, 1, {OB_PD_FSTR}},
+ {NULL, "Force Falloff", ID_OB, 0, 1, {OB_PD_FFALL}},
+
+ {NULL, "%l", 0, -1, 0, {0}}, // separator
+
+ {NULL, "Available", ID_OB, -2, 0, {0}} // this will include ob-transforms too!
+};
+
+/* Camera Buttons KeyingSets ------ */
+
+/* check if include internal-renderer entry */
+static short incl_buts_cam1 (bKeyingSet *ks, const char mode[])
+{
+ /* only if renderer is internal renderer */
+ return (G.scene->r.renderer==R_INTERN);
+}
+
+/* check if include external-renderer entry */
+static short incl_buts_cam2 (bKeyingSet *ks, const char mode[])
+{
+ /* only if renderer is internal renderer */
+ return (G.scene->r.renderer!=R_INTERN);
+}
+
+/* array for camera keyingset defines */
+bKeyingSet defks_buts_cam[] =
+{
+ /* include_cb, name, blocktype, flag, chan_num, adrcodes */
+ {NULL, "Lens", ID_CA, 0, 1, {CAM_LENS}},
+ {NULL, "Clipping", ID_CA, 0, 2, {CAM_STA,CAM_END}},
+ {NULL, "Focal Distance", ID_CA, 0, 1, {CAM_YF_FDIST}},
+
+ {NULL, "%l", 0, -1, 0, {0}}, // separator
+
+
+ {incl_buts_cam2, "Aperture", ID_CA, 0, 1, {CAM_YF_APERT}},
+ {incl_buts_cam1, "Viewplane Shift", ID_CA, 0, 2, {CAM_SHIFT_X,CAM_SHIFT_Y}},
+
+ {NULL, "%l", 0, -1, 0, {0}}, // separator
+
+ {NULL, "Available", ID_CA, -2, 0, {0}}
+};
+
+/* --- */
+
+/* Keying Context Defines - Must keep in sync with enumeration (eKS_Contexts) */
+bKeyingContext ks_contexts[] =
+{
+ KSC_TEMPLATE(v3d_object),
+ KSC_TEMPLATE(v3d_pchan),
+
+ KSC_TEMPLATE(buts_shading_mat),
+ KSC_TEMPLATE(buts_shading_wo),
+ KSC_TEMPLATE(buts_shading_la),
+ KSC_TEMPLATE(buts_shading_tex),
+
+ KSC_TEMPLATE(buts_object),
+ KSC_TEMPLATE(buts_cam)
+};
+
+/* Keying Context Enumeration - Must keep in sync with definitions*/
+typedef enum eKS_Contexts {
+ KSC_V3D_OBJECT = 0,
+ KSC_V3D_PCHAN,
+
+ KSC_BUTS_MAT,
+ KSC_BUTS_WO,
+ KSC_BUTS_LA,
+ KSC_BUTS_TEX,
+
+ KSC_BUTS_OB,
+ KSC_BUTS_CAM,
+
+ /* make sure this last one remains untouched! */
+ KSC_TOT_TYPES
+} eKS_Contexts;
+
+
+/* ---------------- KeyingSet Tools ------------------- */
+
+/* helper for commonkey_context_get() - get keyingsets for 3d-view */
+static void commonkey_context_getv3d (ListBase *sources, bKeyingContext **ksc)
+{
+ Object *ob;
+ IpoCurve *icu;
+
+ if ((OBACT) && (OBACT->flag & OB_POSEMODE)) {
+ bPoseChannel *pchan;
+
+ /* pose-level */
+ ob= OBACT;
+ *ksc= &ks_contexts[KSC_V3D_PCHAN];
+ set_pose_keys(ob); /* sets pchan->flag to POSE_KEY if bone selected, and clears if not */
+
+ /* loop through posechannels */
+ for (pchan=ob->pose->chanbase.first; pchan; pchan=pchan->next) {
+ if (pchan->flag & POSE_KEY) {
+ bCommonKeySrc *cks;
+
+ /* add new keyframing destination */
+ cks= MEM_callocN(sizeof(bCommonKeySrc), "bCommonKeySrc");
+ BLI_addtail(sources, cks);
+
+ /* set id-block to key to, and action */
+ cks->id= (ID *)ob;
+ cks->act= ob->action;
+
+ /* set pchan */
+ cks->pchan= pchan;
+ cks->actname= pchan->name;
+ }
+ }
+ }
+ else {
+ Base *base;
+
+ /* object-level */
+ *ksc= &ks_contexts[KSC_V3D_OBJECT];
+
+ /* loop through bases */
+ for (base= FIRSTBASE; base; base= base->next) {
+ if (TESTBASELIB(base)) {
+ bCommonKeySrc *cks;
+
+ /* add new keyframing destination */
+ cks= MEM_callocN(sizeof(bCommonKeySrc), "bCommonKeySrc");
+ BLI_addtail(sources, cks);
+
+ /* set id-block to key to */
+ ob= base->object;
+ cks->id= (ID *)ob;
+
+ /* when ob's keyframes are in an action, default to using 'Object' as achan name */
+ if (ob->ipoflag & OB_ACTION_OB)
+ cks->actname= "Object";
+
+ /* set ipo-flags */
+ // TODO: add checks for lib-linked data
+ if ((ob->ipo) || (ob->action)) {
+ if (ob->ipo) {
+ cks->ipo= ob->ipo;
+ }
+ else {
+ bActionChannel *achan;
+
+ cks->act= ob->action;
+ achan= get_action_channel(ob->action, cks->actname);
+
+ if (achan && achan->ipo)
+ cks->ipo= achan->ipo;
+ }
+
+ /* deselect all ipo-curves */
+ for (icu= cks->ipo->curve.first; icu; icu= icu->next) {
+ icu->flag &= ~IPO_SELECT;
+ }
+ }
+ }
+ }
+ }
+}
+
+/* helper for commonkey_context_get() - get keyingsets for buttons window */
+static void commonkey_context_getsbuts (ListBase *sources, bKeyingContext **ksc)
+{
+ bCommonKeySrc *cks;
+
+ /* check on tab-type */
+ switch (G.buts->mainb) {
+ case CONTEXT_SHADING: /* ------------- Shading buttons ---------------- */
+ /* subtabs include "Material", "Texture", "Lamp", "World"*/
+ switch (G.buts->tab[CONTEXT_SHADING]) {
+ case TAB_SHADING_MAT: /* >------------- Material Tab -------------< */
+ {
+ Material *ma= editnode_get_active_material(G.buts->lockpoin);
+
+ if (ma) {
+ /* add new keyframing destination */
+ cks= MEM_callocN(sizeof(bCommonKeySrc), "bCommonKeySrc");
+ BLI_addtail(sources, cks);
+
+ /* set data */
+ cks->id= (ID *)ma;
+ cks->ipo= ma->ipo;
+ cks->map= texchannel_to_adrcode(ma->texact);
+
+ /* set keyingsets */
+ *ksc= &ks_contexts[KSC_BUTS_MAT];
+ return;
+ }
+ }
+ break;
+ case TAB_SHADING_WORLD: /* >------------- World Tab -------------< */
+ {
+ World *wo= G.buts->lockpoin;
+
+ if (wo) {
+ /* add new keyframing destination */
+ cks= MEM_callocN(sizeof(bCommonKeySrc), "bCommonKeySrc");
+ BLI_addtail(sources, cks);
+
+ /* set data */
+ cks->id= (ID *)wo;
+ cks->ipo= wo->ipo;
+ cks->map= texchannel_to_adrcode(wo->texact);
+
+ /* set keyingsets */
+ *ksc= &ks_contexts[KSC_BUTS_WO];
+ return;
+ }
+ }
+ break;
+ case TAB_SHADING_LAMP: /* >------------- Lamp Tab -------------< */
+ {
+ Lamp *la= G.buts->lockpoin;
+
+ if (la) {
+ /* add new keyframing destination */
+ cks= MEM_callocN(sizeof(bCommonKeySrc), "bCommonKeySrc");
+ BLI_addtail(sources, cks);
+
+ /* set data */
+ cks->id= (ID *)la;
+ cks->ipo= la->ipo;
+ cks->map= texchannel_to_adrcode(la->texact);
+
+ /* set keyingsets */
+ *ksc= &ks_contexts[KSC_BUTS_LA];
+ return;
+ }
+ }
+ break;
+ case TAB_SHADING_TEX: /* >------------- Texture Tab -------------< */
+ {
+ Tex *tex= G.buts->lockpoin;
+
+ if (tex) {
+ /* add new keyframing destination */
+ cks= MEM_callocN(sizeof(bCommonKeySrc), "bCommonKeySrc");
+ BLI_addtail(sources, cks);
+
+ /* set data */
+ cks->id= (ID *)tex;
+ cks->ipo= tex->ipo;
+
+ /* set keyingsets */
+ *ksc= &ks_contexts[KSC_BUTS_TEX];
+ return;
+ }
+ }
+ break;
+ }
+ break;
+
+ case CONTEXT_OBJECT: /* ------------- Object buttons ---------------- */
+ {
+ Object *ob= OBACT;
+
+ if (ob) {
+ /* add new keyframing destination */
+ cks= MEM_callocN(sizeof(bCommonKeySrc), "bCommonKeySrc");
+ BLI_addtail(sources, cks);
+
+ /* set id-block to key to */
+ cks->id= (ID *)ob;
+ cks->ipo= ob->ipo;
+
+ /* set keyingsets */
+ *ksc= &ks_contexts[KSC_BUTS_OB];
+ return;
+ }
+ }
+ break;
+
+ case CONTEXT_EDITING: /* ------------- Editing buttons ---------------- */
+ {
+ Object *ob= OBACT;
+
+ if ((ob) && (ob->type==OB_CAMERA) && (G.buts->lockpoin)) { /* >---------------- camera buttons ---------------< */
+ Camera *ca= G.buts->lockpoin;
+
+ /* add new keyframing destination */
+ cks= MEM_callocN(sizeof(bCommonKeySrc), "bCommonKeySrc");
+ BLI_addtail(sources, cks);
+
+ /* set id-block to key to */
+ cks->id= (ID *)ca;
+ cks->ipo= ca->ipo;
+
+ /* set keyingsets */
+ *ksc= &ks_contexts[KSC_BUTS_CAM];
+ return;
+ }
+ }
+ break;
+ }
+
+ /* if nothing happened... */
+ *ksc= NULL;
+}
+
+
+/* get keyingsets for appropriate context */
+static void commonkey_context_get (ScrArea *sa, short mode, ListBase *sources, bKeyingContext **ksc)
+{
+ /* check view type */
+ switch (sa->spacetype) {
+ /* 3d view - first one tested as most often used */
+ case SPACE_VIEW3D:
+ {
+ commonkey_context_getv3d(sources, ksc);
+ }
+ break;
+
+ /* buttons view */
+ case SPACE_BUTS:
+ {
+ commonkey_context_getsbuts(sources, ksc);
+ }
+ break;
+
+ /* spaces with their own methods */
+ case SPACE_IPO:
+ if (mode == COMMONKEY_MODE_INSERT)
+ insertkey_editipo();
+ return;
+ case SPACE_ACTION:
+ if (mode == COMMONKEY_MODE_INSERT)
+ insertkey_action();
+ return;
+
+ /* timeline view - keyframe buttons */
+ case SPACE_TIME:
+ {
+ ScrArea *sab;
+ int bigarea= 0;
+
+ /* try to find largest 3d-view available
+ * (mostly of the time, this is what when user will want this,
+ * as it's a standard feature in all other apps)
+ */
+ sab= find_biggest_area_of_type(SPACE_VIEW3D);
+ if (sab) {
+ commonkey_context_getv3d(sources, ksc);
+ return;
+ }
+
+ /* if not found, sab is now NULL, so perform own biggest area test */
+ for (sa= G.curscreen->areabase.first; sa; sa= sa->next) {
+ int area= sa->winx * sa->winy;
+
+ if (sa->spacetype != SPACE_TIME) {
+ if ( (!sab) || (area > bigarea) ) {
+ sab= sa;
+ bigarea= area;
+ }
+ }
+ }
+
+ /* use whichever largest area was found (it shouldn't be a time window) */
+ if (sab)
+ commonkey_context_get(sab, mode, sources, ksc);
+ }
+ break;
+ }
+}
+
+/* flush updates after all operations */
+static void commonkey_context_finish (ListBase *sources)
+{
+ /* check view type */
+ switch (curarea->spacetype) {
+ /* 3d view - first one tested as most often used */
+ case SPACE_VIEW3D:
+ {
+ /* either pose or object level */
+ if (OBACT && (OBACT->pose)) {
+ Object *ob= OBACT;
+
+ /* recalculate ipo handles, etc. */
+ if (ob->action)
+ remake_action_ipos(ob->action);
+
+ /* recalculate bone-paths on adding new keyframe? */
+ // TODO: currently, there is no setting to turn this on/off globally
+ if (ob->pose->flag & POSE_RECALCPATHS)
+ pose_recalculate_paths(ob);
+ }
+ else {
+ bCommonKeySrc *cks;
+
+ /* loop over bases (as seen in sources) */
+ for (cks= sources->first; cks; cks= cks->next) {
+ Object *ob= (Object *)cks->id;
+
+ /* simply set recalc flag */
+ ob->recalc |= OB_RECALC_OB;
+ }
+ }
+ }
+ break;
+ }
+}
+
+/* flush refreshes after undo */
+static void commonkey_context_refresh (void)
+{
+ /* check view type */
+ switch (curarea->spacetype) {
+ /* 3d view - first one tested as most often used */
+ case SPACE_VIEW3D:
+ {
+ /* do refreshes */
+ DAG_scene_flush_update(G.scene, screen_view3d_layers(), 0);
+
+ allspace(REMAKEIPO, 0);
+ allqueue(REDRAWVIEW3D, 0);
+ allqueue(REDRAWMARKER, 0);
+ }
+ break;
+
+ /* buttons window */
+ case SPACE_BUTS:
+ {
+ allspace(REMAKEIPO, 0);
+ allqueue(REDRAWVIEW3D, 0);
+ allqueue(REDRAWMARKER, 0);
+ }
+ break;
+ }
+}
+
+/* --- */
+
+/* Build menu-string of available keying-sets (allocates memory for string)
+ * NOTE: mode must not be longer than 64 chars
+ */
+static char *build_keyingsets_menu (bKeyingContext *ksc, const char mode[48])
+{
+ DynStr *pupds= BLI_dynstr_new();
+ bKeyingSet *ks;
+ char buf[64];
+ char *str;
+ int i, n;
+
+ /* add title first */
+ BLI_snprintf(buf, 64, "%s Key %%t|", mode);
+ BLI_dynstr_append(pupds, buf);
+
+ /* loop through keyingsets, adding them */
+ for (ks=ksc->keyingsets, i=0, n=1; i < ksc->tot; ks++, i++, n++) {
+ /* check if keyingset can be used */
+ if (ks->flag == -1) {
+ /* optional separator? */
+ if (ks->include_cb) {
+ if (ks->include_cb(ks, mode)) {
+ BLI_snprintf( buf, 64, "%s%s", ks->name, ((n < ksc->tot)?"|":"") );
+ BLI_dynstr_append(pupds, buf);
+ }
+ }
+ else {
+ BLI_snprintf( buf, 64, "%%l%s", ((n < ksc->tot)?"|":"") );
+ BLI_dynstr_append(pupds, buf);
+ }
+ }
+ else if ( (ks->include_cb==NULL) || (ks->include_cb(ks, mode)) ) {
+ /* entry can be included */
+ BLI_dynstr_append(pupds, ks->name);
+
+ /* check if special "shapekey" entry */
+ if (ks->flag == -3)
+ BLI_snprintf( buf, 64, "%%x0%s", ((n < ksc->tot)?"|":"") );
+ else
+ BLI_snprintf( buf, 64, "%%x%d%s", n, ((n < ksc->tot)?"|":"") );
+ BLI_dynstr_append(pupds, buf);
+ }
+ }
+
+ /* convert to normal MEM_malloc'd string */
+ str= BLI_dynstr_get_cstring(pupds);
+ BLI_dynstr_free(pupds);
+
+ return str;
+}
+
+/* Get the keying set that was chosen by the user from the menu */
+static bKeyingSet *get_keyingset_fromcontext (bKeyingContext *ksc, short index)
+{
+ /* check if index is valid */
+ if (ELEM(NULL, ksc, ksc->keyingsets))
+ return NULL;
+ if ((index < 1) || (index > ksc->tot))
+ return NULL;
+
+ /* index starts from 1, and should directly correspond to keyingset in array */
+ return (bKeyingSet *)(ksc->keyingsets + (index - 1));
+}
+
+/* ---------------- Keyframe Management API -------------------- */
+
+/* Display a menu for handling the insertion of keyframes based on the active view */
+// TODO: add back an option for repeating last keytype
+void common_modifykey (short mode)
+{
+ ListBase dsources = {NULL, NULL};
+ bKeyingContext *ksc= NULL;
+ bCommonKeySrc *cks;
+ bKeyingSet *ks = NULL;
+ char *menustr, buf[64];
+ short menu_nr;
+
+ /* check if mode is valid */
+ if (ELEM(mode, COMMONKEY_MODE_INSERT, COMMONKEY_MODE_DELETE)==0)
+ return;
+
+ /* delegate to other functions or get keyingsets to use
+ * - if the current area doesn't have its own handling, there will be data returned...
+ */
+ commonkey_context_get(curarea, mode, &dsources, &ksc);
+
+ /* check that there is data to operate on */
+ if (ELEM(NULL, dsources.first, ksc)) {
+ BLI_freelistN(&dsources);
+ return;
+ }
+
+ /* get menu and process it */
+ if (mode == COMMONKEY_MODE_DELETE)
+ menustr= build_keyingsets_menu(ksc, "Delete");
+ else
+ menustr= build_keyingsets_menu(ksc, "Insert");
+ menu_nr= pupmenu(menustr);
+ if (menustr) MEM_freeN(menustr);
+
+ /* no item selected or shapekey entry? */
+ if (menu_nr < 1) {
+ /* free temp sources */
+ BLI_freelistN(&dsources);
+
+ /* check if insert new shapekey */
+ if ((menu_nr == 0) && (mode == COMMONKEY_MODE_INSERT))
+ insert_shapekey(OBACT);
+ else
+ ksc->lastused= NULL;
+
+ return;
+ }
+ else {
+ /* try to get keyingset */
+ ks= get_keyingset_fromcontext(ksc, menu_nr);
+
+ if (ks == NULL) {
+ BLI_freelistN(&dsources);
+ return;
+ }
+ }
+
+ /* loop over each destination, applying the keying set */
+ for (cks= dsources.first; cks; cks= cks->next) {
+ short success= 0;
+
+ /* special hacks for 'available' option */
+ if (ks->flag == -2) {
+ IpoCurve *icu= NULL, *icn= NULL;
+
+ /* get first IPO-curve */
+ if (cks->act && cks->actname) {
+ bActionChannel *achan= get_action_channel(cks->act, cks->actname);
+
+ // FIXME: what about constraint channels?
+ if (achan && achan->ipo)
+ icu= achan->ipo->curve.first;
+ }
+ else if(cks->ipo)
+ icu= cks->ipo->curve.first;
+
+ /* we get adrcodes directly from IPO curves (see method below...) */
+ for (; icu; icu= icn) {
+ short flag;
+
+ /* get next ipo-curve in case current is deleted */
+ icn= icu->next;
+
+ /* insert mode or delete mode */
+ if (mode == COMMONKEY_MODE_DELETE) {
+ /* local flags only add on to global flags */
+ flag = 0;
+
+ /* delete keyframe */
+ success += deletekey(cks->id, ks->blocktype, cks->actname, cks->constname, icu->adrcode, flag);
+ }
+ else {
+ /* local flags only add on to global flags */
+ flag = ks->flag;
+ if (IS_AUTOKEY_FLAG(AUTOMATKEY)) flag |= INSERTKEY_MATRIX;
+ if (IS_AUTOKEY_FLAG(INSERTNEEDED)) flag |= INSERTKEY_NEEDED;
+ // if (IS_AUTOKEY_MODE(EDITKEYS)) flag |= INSERTKEY_REPLACE;
+
+ /* insert keyframe */
+ success += insertkey(cks->id, ks->blocktype, cks->actname, cks->constname, icu->adrcode, flag);
+ }
+ }
+ }
+ else {
+ int i;
+
+ /* loop over channels available in keyingset */
+ for (i=0; i < ks->chan_num; i++) {
+ short flag, adrcode;
+
+ /* get adrcode
+ * - certain adrcodes (for MTEX channels need special offsets) // BAD CRUFT!!!
+ */
+ adrcode= ks->adrcodes[i];
+ if (ELEM3(ks->blocktype, ID_MA, ID_LA, ID_WO) && (ks->flag & COMMONKEY_ADDMAP)) {
+ switch (adrcode) {
+ case MAP_OFS_X: case MAP_OFS_Y: case MAP_OFS_Z:
+ case MAP_SIZE_X: case MAP_SIZE_Y: case MAP_SIZE_Z:
+ case MAP_R: case MAP_G: case MAP_B: case MAP_DVAR:
+ case MAP_COLF: case MAP_NORF: case MAP_VARF: case MAP_DISP:
+ adrcode += cks->map;
+ break;
+ }
+ }
+
+ /* insert mode or delete mode */
+ if (mode == COMMONKEY_MODE_DELETE) {
+ /* local flags only add on to global flags */
+ flag = 0;
+ //flag &= ~COMMONKEY_ADDMAP;
+
+ /* delete keyframe */
+ success += deletekey(cks->id, ks->blocktype, cks->actname, cks->constname, adrcode, flag);
+ }
+ else {
+ /* local flags only add on to global flags */
+ flag = ks->flag;
+ if (IS_AUTOKEY_FLAG(AUTOMATKEY)) flag |= INSERTKEY_MATRIX;
+ if (IS_AUTOKEY_FLAG(INSERTNEEDED)) flag |= INSERTKEY_NEEDED;
+ // if (IS_AUTOKEY_MODE(EDITKEYS)) flag |= INSERTKEY_REPLACE;
+ flag &= ~COMMONKEY_ADDMAP;
+
+ /* insert keyframe */
+ success += insertkey(cks->id, ks->blocktype, cks->actname, cks->constname, adrcode, flag);
+ }
+ }
+ }
+
+ /* special handling for some key-sources */
+ if (success) {
+ /* set pose recalc-paths flag */
+ if (cks->pchan) {
+ Object *ob= (Object *)cks->id;
+ bPoseChannel *pchan= cks->pchan;
+
+ /* set flag to trigger path recalc */
+ if (pchan->path)
+ ob->pose->flag |= POSE_RECALCPATHS;
+
+ /* clear unkeyed flag (it doesn't matter if it's set or not) */
+ if (pchan->bone)
+ pchan->bone->flag &= ~BONE_UNKEYED;
+ }
+ }
+ }
+
+ /* apply post-keying flushes for this data sources */
+ commonkey_context_finish(&dsources);
+ ksc->lastused= ks;
+
+ /* free temp data */
+ BLI_freelistN(&dsources);
+
+ /* undo pushes */
+ if (mode == COMMONKEY_MODE_DELETE)
+ BLI_snprintf(buf, 64, "Delete %s Key", ks->name);
+ else
+ BLI_snprintf(buf, 64, "Insert %s Key", ks->name);
+ BIF_undo_push(buf);
+
+ /* queue updates for contexts */
+ commonkey_context_refresh();
+}
+
+/* ---- */
+
+/* used to insert keyframes from any view */
+void common_insertkey (void)
+{
+ common_modifykey(COMMONKEY_MODE_INSERT);
+}
+
+/* used to insert keyframes from any view */
+void common_deletekey (void)
+{
+ common_modifykey(COMMONKEY_MODE_DELETE);
+}
+
+/* ************************************************** */
+/* KEYFRAME DETECTION */
+
+/* --------------- API/Per-Datablock Handling ------------------- */
+
+/* Checks whether an IPO-block has a keyframe for a given frame
+ * Since we're only concerned whether a keyframe exists, we can simply loop until a match is found...
+ */
+short ipo_frame_has_keyframe (Ipo *ipo, float frame, short filter)
+{
+ IpoCurve *icu;
+
+ /* can only find if there is data */
+ if (ipo == NULL)
+ return 0;
+
+ /* if only check non-muted, check if muted */
+ if ((filter & ANIMFILTER_MUTED) || (ipo->muteipo))
+ return 0;
+
+ /* loop over IPO-curves, using binary-search to try to find matches
+ * - this assumes that keyframes are only beztriples
+ */
+ for (icu= ipo->curve.first; icu; icu= icu->next) {
+ /* we either include all regardless of muting, or only non-muted */
+ if ((filter & ANIMFILTER_MUTED) || (icu->flag & IPO_MUTE)==0) {
+ short replace = -1;
+ int i = binarysearch_bezt_index(icu->bezt, frame, icu->totvert, &replace);
+
+ /* binarysearch_bezt_index will set replace to be 0 or 1
+ * - obviously, 1 represents a match
+ */
+ if (replace) {
+ /* sanity check: 'i' may in rare cases exceed arraylen */
+ if ((i >= 0) && (i < icu->totvert))
+ return 1;
+ }
+ }
+ }
+
+ /* nothing found */
+ return 0;
+}
+
+/* Checks whether an action-block has a keyframe for a given frame
+ * Since we're only concerned whether a keyframe exists, we can simply loop until a match is found...
+ */
+short action_frame_has_keyframe (bAction *act, float frame, short filter)
+{
+ bActionChannel *achan;
+
+ /* error checking */
+ if (act == NULL)
+ return 0;
+
+ /* check thorugh action-channels for match */
+ for (achan= act->chanbase.first; achan; achan= achan->next) {
+ /* we either include all regardless of muting, or only non-muted
+ * - here we include 'hidden' channels in the muted definition
+ */
+ if ((filter & ANIMFILTER_MUTED) || (achan->flag & ACHAN_HIDDEN)==0) {
+ if (ipo_frame_has_keyframe(achan->ipo, frame, filter))
+ return 1;
+ }
+ }
+
+ /* nothing found */
+ return 0;
+}
+
+/* Checks whether an Object has a keyframe for a given frame */
+short object_frame_has_keyframe (Object *ob, float frame, short filter)
+{
+ /* error checking */
+ if (ob == NULL)
+ return 0;
+
+ /* check for an action - actions take priority over normal IPO's */
+ if (ob->action) {
+ float aframe;
+
+ /* apply nla-action scaling if needed */
+ if ((ob->nlaflag & OB_NLA_OVERRIDE) && (ob->nlastrips.first))
+ aframe= get_action_frame(ob, frame);
+ else
+ aframe= frame;
+
+ /* priority check here goes to pose-channel checks (for armatures) */
+ if ((ob->pose) && (ob->flag & OB_POSEMODE)) {
+ /* only relevant check here is to only show active... */
+ if (filter & ANIMFILTER_ACTIVE) {
+ bPoseChannel *pchan= get_active_posechannel(ob);
+ bActionChannel *achan= (pchan) ? get_action_channel(ob->action, pchan->name) : NULL;
+
+ /* since we're only interested in whether the selected one has any keyframes... */
+ return (achan && ipo_frame_has_keyframe(achan->ipo, aframe, filter));
+ }
+ }
+
+ /* for everything else, just use the standard test (only return if success) */
+ if (action_frame_has_keyframe(ob->action, aframe, filter))
+ return 1;
+ }
+ else if (ob->ipo) {
+ /* only return if success */
+ if (ipo_frame_has_keyframe(ob->ipo, frame, filter))
+ return 1;
+ }
+
+ /* try shapekey keyframes (if available, and allowed by filter) */
+ if ( !(filter & ANIMFILTER_LOCAL) && !(filter & ANIMFILTER_NOSKEY) ) {
+ Key *key= ob_get_key(ob);
+
+ /* shapekeys can have keyframes ('Relative Shape Keys')
+ * or depend on time (old 'Absolute Shape Keys')
+ */
+
+ /* 1. test for relative (with keyframes) */
+ if (id_frame_has_keyframe((ID *)key, frame, filter))
+ return 1;
+
+ /* 2. test for time */
+ // TODO... yet to be implemented (this feature may evolve before then anyway)
+ }
+
+ /* try materials */
+ if ( !(filter & ANIMFILTER_LOCAL) && !(filter & ANIMFILTER_NOMAT) ) {
+ /* if only active, then we can skip a lot of looping */
+ if (filter & ANIMFILTER_ACTIVE) {
+ Material *ma= give_current_material(ob, (ob->actcol + 1));
+
+ /* we only retrieve the active material... */
+ if (id_frame_has_keyframe((ID *)ma, frame, filter))
+ return 1;
+ }
+ else {
+ int a;
+
+ /* loop over materials */
+ for (a=0; a<ob->totcol; a++) {
+ Material *ma= give_current_material(ob, a+1);
+
+ if (id_frame_has_keyframe((ID *)ma, frame, filter))
+ return 1;
+ }
+ }
+ }
+
+ /* nothing found */
+ return 0;
+}
+
+/* --------------- API ------------------- */
+
+/* Checks whether a keyframe exists for the given ID-block one the given frame */
+short id_frame_has_keyframe (ID *id, float frame, short filter)
+{
+ /* error checking */
+ if (id == NULL)
+ return 0;
+
+ /* check for a valid id-type */
+ switch (GS(id->name)) {
+ /* animation data-types */
+ case ID_IP: /* ipo */
+ return ipo_frame_has_keyframe((Ipo *)id, frame, filter);
+ case ID_AC: /* action */
+ return action_frame_has_keyframe((bAction *)id, frame, filter);
+
+ case ID_OB: /* object */
+ return object_frame_has_keyframe((Object *)id, frame, filter);
+
+ case ID_MA: /* material */
+ {
+ Material *ma= (Material *)id;
+
+ /* currently, material's only have an ipo-block */
+ return ipo_frame_has_keyframe(ma->ipo, frame, filter);
+ }
+ break;
+
+ case ID_KE: /* shapekey */
+ {
+ Key *key= (Key *)id;
+
+ /* currently, shapekey's only have an ipo-block */
+ return ipo_frame_has_keyframe(key->ipo, frame, filter);
+ }
+ break;
+ }
+
+ /* no keyframe found */
+ return 0;
+}
+
+/* ************************************************** */
diff --git a/source/blender/src/keyval.c b/source/blender/src/keyval.c
index dab4b4ae839..5a2ba531821 100644
--- a/source/blender/src/keyval.c
+++ b/source/blender/src/keyval.c
@@ -27,6 +27,11 @@
* ***** END GPL LICENSE BLOCK *****
*/
+#include "stdio.h"
+#include "ctype.h"
+#include "string.h"
+
+#include "BKE_global.h"
#include "BLI_blenlib.h"
#include "BLI_arithb.h"
#include "BIF_keyval.h"
@@ -349,3 +354,193 @@ char *key_event_to_string(unsigned short event)
return "";
}
+
+/*
+ * Decodes key combination strings [qual1+[qual2+[...]]]keyname
+ * The '+'s may be replaced by '-' or ' ' characters to support different
+ * formats. No additional whitespace is allowed. The keyname may be an internal
+ * name, like "RETKEY", or a more common name, like "Return". Decoding is case-
+ * insensitive.
+ *
+ * Example strings: "Ctrl+L", "ALT-ESC", "Shift A"
+ *
+ * Returns 1 if successful.
+ */
+int decode_key_string(char *str, unsigned short *key, unsigned short *qual)
+{
+ int i, prev, len, invalid=0;
+
+ len= strlen(str);
+ *key= *qual= 0;
+
+ /* Convert to upper case */
+ for (i=0; i<len; i++) {
+ str[i]= toupper(str[i]);
+ }
+
+ /* Handle modifiers */
+ for (prev=i=0; i<len; i++) {
+ if (str[i]==' ' || str[i]=='+' || str[i]=='-') {
+ if (!strncmp(str+prev, "CTRL", i-prev)) *qual |= LR_CTRLKEY;
+ else if (!strncmp(str+prev, "ALT", i-prev)) *qual |= LR_ALTKEY;
+ else if (!strncmp(str+prev, "SHIFT", i-prev)) *qual |= LR_SHIFTKEY;
+ else if (!strncmp(str+prev, "COMMAND", i-prev)) *qual |= LR_COMMANDKEY;
+ prev=i+1;
+ }
+ }
+
+ /* Compare last part against key names */
+ if ((len-prev==1) || ((len-prev==4) && !strncmp(str+prev, "KEY", 3))) {
+
+ if (str[prev]>='A' && str[prev]<='Z') {
+ *key= str[prev]-'A'+AKEY;
+ } else if (str[prev]>='0' && str[prev]<='9') {
+ *key= str[prev]-'0'+ZEROKEY;
+ } else {
+ invalid= 1;
+ }
+
+ } else if (!strncmp(str+prev, "ZEROKEY", len-prev) || !strncmp(str+prev, "ZERO", len-prev)) {
+ *key= ZEROKEY;
+ } else if (!strncmp(str+prev, "ONEKEY", len-prev) || !strncmp(str+prev, "ONE", len-prev)) {
+ *key= ONEKEY;
+ } else if (!strncmp(str+prev, "TWOKEY", len-prev) || !strncmp(str+prev, "TWO", len-prev)) {
+ *key= TWOKEY;
+ } else if (!strncmp(str+prev, "THREEKEY", len-prev) || !strncmp(str+prev, "THREE", len-prev)) {
+ *key= THREEKEY;
+ } else if (!strncmp(str+prev, "FOURKEY", len-prev) || !strncmp(str+prev, "FOUR", len-prev)) {
+ *key= FOURKEY;
+ } else if (!strncmp(str+prev, "FIVEKEY", len-prev) || !strncmp(str+prev, "FIVE", len-prev)) {
+ *key= FIVEKEY;
+ } else if (!strncmp(str+prev, "SIZEKEY", len-prev) || !strncmp(str+prev, "SIX", len-prev)) {
+ *key= SIXKEY;
+ } else if (!strncmp(str+prev, "SEVENKEY", len-prev) || !strncmp(str+prev, "SEVEN", len-prev)) {
+ *key= SEVENKEY;
+ } else if (!strncmp(str+prev, "EIGHTKEY", len-prev) || !strncmp(str+prev, "EIGHT", len-prev)) {
+ *key= EIGHTKEY;
+ } else if (!strncmp(str+prev, "NINEKEY", len-prev) || !strncmp(str+prev, "NINE", len-prev)) {
+ *key= NINEKEY;
+
+ } else if (!strncmp(str+prev, "ESCKEY", len-prev) || !strncmp(str+prev, "ESC", len-prev)) {
+ *key= ESCKEY;
+ } else if (!strncmp(str+prev, "TABKEY", len-prev) || !strncmp(str+prev, "TAB", len-prev)) {
+ *key= TABKEY;
+ } else if (!strncmp(str+prev, "RETKEY", len-prev) || !strncmp(str+prev, "RETURN", len-prev) || !strncmp(str+prev, "ENTER", len-prev)) {
+ *key= RETKEY;
+ } else if (!strncmp(str+prev, "SPACEKEY", len-prev) || !strncmp(str+prev, "SPACE", len-prev)) {
+ *key= SPACEKEY;
+ } else if (!strncmp(str+prev, "LINEFEEDKEY", len-prev) || !strncmp(str+prev, "LINEFEED", len-prev)) {
+ *key= LINEFEEDKEY;
+ } else if (!strncmp(str+prev, "BACKSPACEKEY", len-prev) || !strncmp(str+prev, "BACKSPACE", len-prev)) {
+ *key= BACKSPACEKEY;
+ } else if (!strncmp(str+prev, "DELKEY", len-prev) || !strncmp(str+prev, "DELETE", len-prev)) {
+ *key= DELKEY;
+
+ } else if (!strncmp(str+prev, "SEMICOLONKEY", len-prev) || !strncmp(str+prev, "SEMICOLON", len-prev)) {
+ *key= SEMICOLONKEY;
+ } else if (!strncmp(str+prev, "PERIODKEY", len-prev) || !strncmp(str+prev, "PERIOD", len-prev)) {
+ *key= PERIODKEY;
+ } else if (!strncmp(str+prev, "COMMAKEY", len-prev) || !strncmp(str+prev, "COMMA", len-prev)) {
+ *key= COMMAKEY;
+ } else if (!strncmp(str+prev, "QUOTEKEY", len-prev) || !strncmp(str+prev, "QUOTE", len-prev)) {
+ *key= QUOTEKEY;
+ } else if (!strncmp(str+prev, "ACCENTGRAVEKEY", len-prev) || !strncmp(str+prev, "ACCENTGRAVE", len-prev)) {
+ *key= ACCENTGRAVEKEY;
+ } else if (!strncmp(str+prev, "MINUSKEY", len-prev) || !strncmp(str+prev, "MINUS", len-prev)) {
+ *key= MINUSKEY;
+ } else if (!strncmp(str+prev, "SLASHKEY", len-prev) || !strncmp(str+prev, "SLASH", len-prev)) {
+ *key= SLASHKEY;
+ } else if (!strncmp(str+prev, "BACKSLASHKEY", len-prev) || !strncmp(str+prev, "BACKSLASH", len-prev)) {
+ *key= BACKSLASHKEY;
+ } else if (!strncmp(str+prev, "EQUALKEY", len-prev) || !strncmp(str+prev, "EQUAL", len-prev)) {
+ *key= EQUALKEY;
+ } else if (!strncmp(str+prev, "LEFTBRACKETKEY", len-prev) || !strncmp(str+prev, "LEFTBRACKET", len-prev)) {
+ *key= LEFTBRACKETKEY;
+ } else if (!strncmp(str+prev, "RIGHTBRACKETKEY", len-prev) || !strncmp(str+prev, "RIGHTBRACKET", len-prev)) {
+ *key= RIGHTBRACKETKEY;
+ } else if (!strncmp(str+prev, "DELKEY", len-prev) || !strncmp(str+prev, "DELETE", len-prev)) {
+ *key= DELKEY;
+
+ } else if (!strncmp(str+prev, "LEFTARROWKEY", len-prev) || !strncmp(str+prev, "LEFTARROW", len-prev)) {
+ *key= LEFTARROWKEY;
+ } else if (!strncmp(str+prev, "DOWNARROWKEY", len-prev) || !strncmp(str+prev, "DOWNARROW", len-prev)) {
+ *key= DOWNARROWKEY;
+ } else if (!strncmp(str+prev, "RIGHTARROWKEY", len-prev) || !strncmp(str+prev, "RIGHTARROW", len-prev)) {
+ *key= RIGHTARROWKEY;
+ } else if (!strncmp(str+prev, "UPARROWKEY", len-prev) || !strncmp(str+prev, "UPARROW", len-prev)) {
+ *key= UPARROWKEY;
+
+ } else if (!strncmp(str+prev, "PAD", 3)) {
+
+ if (len-prev<=4) {
+
+ if (str[prev]>='0' && str[prev]<='9') {
+ *key= str[prev]-'0'+ZEROKEY;
+ } else {
+ invalid= 1;
+ }
+
+ } else if (!strncmp(str+prev+3, "PERIODKEY", len-prev-3) || !strncmp(str+prev+3, "PERIOD", len-prev-3)) {
+ *key= PADPERIOD;
+ } else if (!strncmp(str+prev+3, "SLASHKEY", len-prev-3) || !strncmp(str+prev+3, "SLASH", len-prev-3)) {
+ *key= PADSLASHKEY;
+ } else if (!strncmp(str+prev+3, "ASTERKEY", len-prev-3) || !strncmp(str+prev+3, "ASTERISK", len-prev-3)) {
+ *key= PADASTERKEY;
+ } else if (!strncmp(str+prev+3, "MINUSKEY", len-prev-3) || !strncmp(str+prev+3, "MINUS", len-prev-3)) {
+ *key= PADMINUS;
+ } else if (!strncmp(str+prev+3, "ENTERKEY", len-prev-3) || !strncmp(str+prev+3, "ENTER", len-prev-3)) {
+ *key= PADENTER;
+ } else if (!strncmp(str+prev+3, "PLUSKEY", len-prev-3) || !strncmp(str+prev+3, "PLUS", len-prev-3)) {
+ *key= PADPLUSKEY;
+ } else {
+ invalid= 1;
+ }
+
+ } else if (!strncmp(str+prev, "F1KEY", len-prev) || !strncmp(str+prev, "F1", len-prev)) {
+ *key= F1KEY;
+ } else if (!strncmp(str+prev, "F2KEY", len-prev) || !strncmp(str+prev, "F2", len-prev)) {
+ *key= F2KEY;
+ } else if (!strncmp(str+prev, "F3KEY", len-prev) || !strncmp(str+prev, "F3", len-prev)) {
+ *key= F3KEY;
+ } else if (!strncmp(str+prev, "F4KEY", len-prev) || !strncmp(str+prev, "F4", len-prev)) {
+ *key= F4KEY;
+ } else if (!strncmp(str+prev, "F5KEY", len-prev) || !strncmp(str+prev, "F5", len-prev)) {
+ *key= F5KEY;
+ } else if (!strncmp(str+prev, "F6KEY", len-prev) || !strncmp(str+prev, "F6", len-prev)) {
+ *key= F6KEY;
+ } else if (!strncmp(str+prev, "F7KEY", len-prev) || !strncmp(str+prev, "F7", len-prev)) {
+ *key= F7KEY;
+ } else if (!strncmp(str+prev, "F8KEY", len-prev) || !strncmp(str+prev, "F8", len-prev)) {
+ *key= F8KEY;
+ } else if (!strncmp(str+prev, "F9KEY", len-prev) || !strncmp(str+prev, "F9", len-prev)) {
+ *key= F9KEY;
+ } else if (!strncmp(str+prev, "F10KEY", len-prev) || !strncmp(str+prev, "F10", len-prev)) {
+ *key= F10KEY;
+ } else if (!strncmp(str+prev, "F11KEY", len-prev) || !strncmp(str+prev, "F11", len-prev)) {
+ *key= F11KEY;
+ } else if (!strncmp(str+prev, "F12KEY", len-prev) || !strncmp(str+prev, "F12", len-prev)) {
+ *key= F12KEY;
+
+ } else if (!strncmp(str+prev, "PAUSEKEY", len-prev) || !strncmp(str+prev, "PAUSE", len-prev)) {
+ *key= PAUSEKEY;
+ } else if (!strncmp(str+prev, "INSERTKEY", len-prev) || !strncmp(str+prev, "INSERT", len-prev)) {
+ *key= INSERTKEY;
+ } else if (!strncmp(str+prev, "HOMEKEY", len-prev) || !strncmp(str+prev, "HOME", len-prev)) {
+ *key= HOMEKEY;
+ } else if (!strncmp(str+prev, "PAGEUPKEY", len-prev) || !strncmp(str+prev, "PAGEUP", len-prev)) {
+ *key= PAGEUPKEY;
+ } else if (!strncmp(str+prev, "PAGEDOWNKEY", len-prev) || !strncmp(str+prev, "PAGEDOWN", len-prev)) {
+ *key= PAGEDOWNKEY;
+ } else if (!strncmp(str+prev, "ENDKEY", len-prev) || !strncmp(str+prev, "END", len-prev)) {
+ *key= ENDKEY;
+
+ } else {
+ invalid= 1;
+ }
+
+ if (!invalid && *key) {
+ return 1;
+ }
+
+ return 0;
+}
diff --git a/source/blender/src/meshlaplacian.c b/source/blender/src/meshlaplacian.c
index 60f569ecf0e..96349e8fb98 100644
--- a/source/blender/src/meshlaplacian.c
+++ b/source/blender/src/meshlaplacian.c
@@ -63,6 +63,8 @@
#include "ONL_opennl.h"
+#include "BLO_sys_types.h" // for intptr_t support
+
/************************** Laplacian System *****************************/
struct LaplacianSystem {
@@ -126,14 +128,14 @@ static void laplacian_increase_edge_count(EdgeHash *edgehash, int v1, int v2)
void **p = BLI_edgehash_lookup_p(edgehash, v1, v2);
if(p)
- *p = (void*)((long)*p + (long)1);
+ *p = (void*)((intptr_t)*p + (intptr_t)1);
else
- BLI_edgehash_insert(edgehash, v1, v2, (void*)(long)1);
+ BLI_edgehash_insert(edgehash, v1, v2, (void*)(intptr_t)1);
}
static int laplacian_edge_count(EdgeHash *edgehash, int v1, int v2)
{
- return (int)(long)BLI_edgehash_lookup(edgehash, v1, v2);
+ return (int)(intptr_t)BLI_edgehash_lookup(edgehash, v1, v2);
}
static float cotan_weight(float *v1, float *v2, float *v3)
@@ -202,7 +204,7 @@ static void laplacian_triangle_weights(LaplacianSystem *sys, int f, int i1, int
v3= sys->verts[i3];
/* instead of *0.5 we divided by the number of faces of the edge, it still
- needs to be varified that this is indeed the correct thing to do! */
+ needs to be verified that this is indeed the correct thing to do! */
t1= cotan_weight(v1, v2, v3)/laplacian_edge_count(sys->edgehash, i2, i3);
t2= cotan_weight(v2, v3, v1)/laplacian_edge_count(sys->edgehash, i3, i1);
t3= cotan_weight(v3, v1, v2)/laplacian_edge_count(sys->edgehash, i1, i2);
@@ -227,7 +229,7 @@ static void laplacian_triangle_weights(LaplacianSystem *sys, int f, int i1, int
}
}
-LaplacianSystem *laplacian_system_construct_begin(int totvert, int totface)
+LaplacianSystem *laplacian_system_construct_begin(int totvert, int totface, int lsq)
{
LaplacianSystem *sys;
@@ -246,6 +248,8 @@ LaplacianSystem *laplacian_system_construct_begin(int totvert, int totface)
/* create opennl context */
nlNewContext();
nlSolverParameteri(NL_NB_VARIABLES, totvert);
+ if(lsq)
+ nlSolverParameteri(NL_LEAST_SQUARES, NL_TRUE);
sys->context= nlGetCurrent();
@@ -629,7 +633,7 @@ void heat_bone_weighting(Object *ob, Mesh *me, float (*verts)[3], int numbones,
}
/* create laplacian */
- sys = laplacian_system_construct_begin(me->totvert, totface);
+ sys = laplacian_system_construct_begin(me->totvert, totface, 1);
sys->heat.mesh= me;
sys->heat.verts= verts;
@@ -931,7 +935,7 @@ void rigid_deform_begin(EditMesh *em)
}
/* create laplacian */
- sys = laplacian_system_construct_begin(totvert, totface);
+ sys = laplacian_system_construct_begin(totvert, totface, 0);
sys->rigid.mesh= em;
sys->rigid.R = MEM_callocN(sizeof(float)*3*3*totvert, "RigidDeformR");
diff --git a/source/blender/src/meshtools.c b/source/blender/src/meshtools.c
index 0f30aef04df..66a484eb903 100644
--- a/source/blender/src/meshtools.c
+++ b/source/blender/src/meshtools.c
@@ -84,7 +84,6 @@ void sort_faces(void);
#include "BIF_toolbox.h"
#include "BIF_editconstraint.h"
-#include "BDR_drawmesh.h"
#include "BDR_editobject.h"
#include "BDR_editface.h"
#include "BDR_sculptmode.h"
@@ -107,6 +106,10 @@ void sort_faces(void);
#include "IMB_imbuf_types.h"
#include "IMB_imbuf.h"
+#include "GPU_draw.h"
+
+#include "BLO_sys_types.h" // for intptr_t support
+
/* from rendercode.c */
#define VECMUL(dest, f) dest[0]*= f; dest[1]*= f; dest[2]*= f
@@ -592,7 +595,7 @@ void sort_faces(void)
typedef struct MocNode {
struct MocNode *next;
- long index[MOC_NODE_RES];
+ intptr_t index[MOC_NODE_RES];
} MocNode;
static int mesh_octree_get_base_offs(float *co, float *offs, float *div)
@@ -610,7 +613,7 @@ static int mesh_octree_get_base_offs(float *co, float *offs, float *div)
return (vx*MOC_RES*MOC_RES) + vy*MOC_RES + vz;
}
-static void mesh_octree_add_node(MocNode **bt, long index)
+static void mesh_octree_add_node(MocNode **bt, intptr_t index)
{
if(*bt==NULL) {
*bt= MEM_callocN(sizeof(MocNode), "MocNode");
@@ -642,7 +645,7 @@ static void mesh_octree_free_node(MocNode **bt)
/* temporal define, just to make nicer code below */
#define MOC_ADDNODE(vx, vy, vz) mesh_octree_add_node(basetable + ((vx)*MOC_RES*MOC_RES) + (vy)*MOC_RES + (vz), index)
-static void mesh_octree_add_nodes(MocNode **basetable, float *co, float *offs, float *div, long index)
+static void mesh_octree_add_nodes(MocNode **basetable, float *co, float *offs, float *div, intptr_t index)
{
float fx, fy, fz;
int vx, vy, vz;
@@ -690,7 +693,7 @@ static void mesh_octree_add_nodes(MocNode **basetable, float *co, float *offs, f
}
-static long mesh_octree_find_index(MocNode **bt, float (*orco)[3], MVert *mvert, float *co)
+static intptr_t mesh_octree_find_index(MocNode **bt, float (*orco)[3], MVert *mvert, float *co)
{
float *vec;
int a;
@@ -734,7 +737,7 @@ static struct {
/* mode is 's' start, or 'e' end, or 'u' use */
/* if end, ob can be NULL */
-long mesh_octree_table(Object *ob, float *co, char mode)
+intptr_t mesh_octree_table(Object *ob, float *co, char mode)
{
MocNode **bt;
@@ -768,15 +771,15 @@ long mesh_octree_table(Object *ob, float *co, char mode)
}
else {
MVert *mvert;
- float *co;
+ float *vco;
int a, totvert;
MeshOctree.orco= mesh_getRefKeyCos(me, &totvert);
mesh_get_texspace(me, MeshOctree.orcoloc, NULL, NULL);
for(a=0, mvert= me->mvert; a<me->totvert; a++, mvert++) {
- co= (MeshOctree.orco)? MeshOctree.orco[a]: mvert->co;
- DO_MINMAX(co, min, max);
+ vco= (MeshOctree.orco)? MeshOctree.orco[a]: mvert->co;
+ DO_MINMAX(vco, min, max);
}
}
@@ -805,17 +808,17 @@ long mesh_octree_table(Object *ob, float *co, char mode)
EditVert *eve;
for(eve= G.editMesh->verts.first; eve; eve= eve->next) {
- mesh_octree_add_nodes(MeshOctree.table, eve->co, MeshOctree.offs, MeshOctree.div, (long)(eve));
+ mesh_octree_add_nodes(MeshOctree.table, eve->co, MeshOctree.offs, MeshOctree.div, (intptr_t)(eve));
}
}
else {
MVert *mvert;
- float *co;
+ float *vco;
int a;
for(a=0, mvert= me->mvert; a<me->totvert; a++, mvert++) {
- co= (MeshOctree.orco)? MeshOctree.orco[a]: mvert->co;
- mesh_octree_add_nodes(MeshOctree.table, co, MeshOctree.offs, MeshOctree.div, a+1);
+ vco= (MeshOctree.orco)? MeshOctree.orco[a]: mvert->co;
+ mesh_octree_add_nodes(MeshOctree.table, vco, MeshOctree.offs, MeshOctree.div, a+1);
}
}
}
@@ -863,7 +866,7 @@ int mesh_get_x_mirror_vert(Object *ob, int index)
EditVert *editmesh_get_x_mirror_vert(Object *ob, float *co)
{
float vec[3];
- long poinval;
+ intptr_t poinval;
/* ignore nan verts */
if (isnan(co[0]) || !finite(co[0]) ||
@@ -1128,7 +1131,7 @@ void objects_bake_render(short event, char **error_msg)
if(ima->ok==IMA_OK_LOADED) {
ImBuf *ibuf= BKE_image_get_ibuf(ima, NULL);
if(ibuf && (ibuf->userflags & IB_BITMAPDIRTY)) {
- free_realtime_image(ima);
+ GPU_free_image(ima);
imb_freemipmapImBuf(ibuf);
}
}
diff --git a/source/blender/src/mywindow.c b/source/blender/src/mywindow.c
index cb8d233c341..6166ab18766 100644
--- a/source/blender/src/mywindow.c
+++ b/source/blender/src/mywindow.c
@@ -604,18 +604,6 @@ int framebuffer_to_index(unsigned int col)
/* ********** END MY WINDOW ************** */
-#ifdef WIN32
-static int is_a_really_crappy_nvidia_card(void) {
- static int well_is_it= -1;
-
- /* Do you understand the implication? Do you? */
- if (well_is_it==-1)
- well_is_it= (strcmp((char*) glGetString(GL_VENDOR), "NVIDIA Corporation") == 0);
-
- return well_is_it;
-}
-#endif
-
void myswapbuffers(void)
{
ScrArea *sa;
diff --git a/source/blender/src/outliner.c b/source/blender/src/outliner.c
index 3f328a0cfb2..8d33496f068 100644
--- a/source/blender/src/outliner.c
+++ b/source/blender/src/outliner.c
@@ -56,9 +56,12 @@
#include "DNA_texture_types.h"
#include "DNA_text_types.h"
#include "DNA_world_types.h"
+#include "DNA_sequence_types.h"
#include "BLI_blenlib.h"
+#include "IMB_imbuf_types.h"
+
#include "BKE_constraint.h"
#include "BKE_deform.h"
#include "BKE_depsgraph.h"
@@ -100,6 +103,7 @@
#include "BIF_screen.h"
#include "BIF_space.h"
#include "BIF_toolbox.h"
+#include "BIF_editseq.h"
#ifdef WITH_VERSE
#include "BIF_verse.h"
@@ -301,7 +305,7 @@ static ID *outliner_search_back(SpaceOops *soops, TreeElement *te, short idcode)
while(te) {
tselem= TREESTORE(te);
- if(te->idcode==idcode && tselem->type==0) return tselem->id;
+ if(tselem->type==0 && te->idcode==idcode) return tselem->id;
te= te->parent;
}
return NULL;
@@ -558,8 +562,10 @@ static TreeElement *outliner_add_element(SpaceOops *soops, ListBase *lb, void *i
te->parent= parent;
te->index= index; // for data arays
- te->name= id->name+2; // default, can be overridden by Library or non-ID data
- te->idcode= GS(id->name);
+ if((type!=TSE_SEQUENCE) && (type != TSE_SEQ_STRIP) && (type != TSE_SEQUENCE_DUP)) {
+ te->name= id->name+2; // default, can be overridden by Library or non-ID data
+ te->idcode= GS(id->name);
+ }
if(type==0) {
@@ -898,6 +904,65 @@ static TreeElement *outliner_add_element(SpaceOops *soops, ListBase *lb, void *i
break;
}
}
+ else if(type==TSE_SEQUENCE) {
+ Sequence *seq= (Sequence*) idv;
+ Sequence *p;
+
+ /*
+ * The idcode is a little hack, but the outliner
+ * only check te->idcode if te->type is equal to zero,
+ * so this is "safe".
+ */
+ te->idcode= seq->type;
+ te->directdata= seq;
+
+ if(seq->type<7) {
+ /*
+ * This work like the sequence.
+ * If the sequence have a name (not default name)
+ * show it, in other case put the filename.
+ */
+ if(strcmp(seq->name, "SQ"))
+ te->name= seq->name;
+ else {
+ if((seq->strip) && (seq->strip->stripdata))
+ te->name= seq->strip->stripdata->name;
+ else if((seq->strip) && (seq->strip->tstripdata) && (seq->strip->tstripdata->ibuf))
+ te->name= seq->strip->tstripdata->ibuf->name;
+ else
+ te->name= "SQ None";
+ }
+
+ if(seq->type==SEQ_META) {
+ te->name= "Meta Strip";
+ p= seq->seqbase.first;
+ while(p) {
+ outliner_add_element(soops, &te->subtree, (void*)p, te, TSE_SEQUENCE, index);
+ p= p->next;
+ }
+ }
+ else
+ outliner_add_element(soops, &te->subtree, (void*)seq->strip, te, TSE_SEQ_STRIP, index);
+ }
+ else
+ te->name= "Effect";
+ }
+ else if(type==TSE_SEQ_STRIP) {
+ Strip *strip= (Strip *)idv;
+
+ if(strip->dir)
+ te->name= strip->dir;
+ else
+ te->name= "Strip None";
+ te->directdata= strip;
+ }
+ else if(type==TSE_SEQUENCE_DUP) {
+ Sequence *seq= (Sequence*)idv;
+
+ te->idcode= seq->type;
+ te->directdata= seq;
+ te->name= seq->strip->stripdata->name;
+ }
#ifdef WITH_VERSE
else if(type==ID_VS) {
struct VerseSession *session = (VerseSession*)idv;
@@ -964,6 +1029,62 @@ static void outliner_make_hierarchy(SpaceOops *soops, ListBase *lb)
}
}
+/* Helped function to put duplicate sequence in the same tree. */
+int need_add_seq_dup(Sequence *seq)
+{
+ Sequence *p;
+
+ if((!seq->strip) || (!seq->strip->stripdata) || (!seq->strip->stripdata->name))
+ return(1);
+
+ /*
+ * First check backward, if we found a duplicate
+ * sequence before this, don't need it, just return.
+ */
+ p= seq->prev;
+ while(p) {
+ if((!p->strip) || (!p->strip->stripdata) || (!p->strip->stripdata->name)) {
+ p= p->prev;
+ continue;
+ }
+
+ if(!strcmp(p->strip->stripdata->name, seq->strip->stripdata->name))
+ return(2);
+ p= p->prev;
+ }
+
+ p= seq->next;
+ while(p) {
+ if((!p->strip) || (!p->strip->stripdata) || (!p->strip->stripdata->name)) {
+ p= p->next;
+ continue;
+ }
+
+ if(!strcmp(p->strip->stripdata->name, seq->strip->stripdata->name))
+ return(0);
+ p= p->next;
+ }
+ return(1);
+}
+
+void add_seq_dup(SpaceOops *soops, Sequence *seq, TreeElement *te, short index)
+{
+ TreeElement *ch;
+ Sequence *p;
+
+ p= seq;
+ while(p) {
+ if((!p->strip) || (!p->strip->stripdata) || (!p->strip->stripdata->name)) {
+ p= p->next;
+ continue;
+ }
+
+ if(!strcmp(p->strip->stripdata->name, seq->strip->stripdata->name))
+ ch= outliner_add_element(soops, &te->subtree, (void*)p, te, TSE_SEQUENCE, index);
+ p= p->next;
+ }
+}
+
static void outliner_build_tree(SpaceOops *soops)
{
Base *base;
@@ -1120,6 +1241,30 @@ static void outliner_build_tree(SpaceOops *soops)
}
}
#endif
+ else if(soops->outlinevis==SO_SEQUENCE) {
+ Sequence *seq;
+ Editing *ed;
+ int op;
+
+ ed= G.scene->ed;
+ if(!ed)
+ return;
+
+ seq= ed->seqbasep->first;
+ if(!seq)
+ return;
+
+ while(seq) {
+ op= need_add_seq_dup(seq);
+ if(op==1)
+ ten= outliner_add_element(soops, &soops->tree, (void*)seq, NULL, TSE_SEQUENCE, 0);
+ else if(op==0) {
+ ten= outliner_add_element(soops, &soops->tree, (void*)seq, NULL, TSE_SEQUENCE_DUP, 0);
+ add_seq_dup(soops, seq, ten, 0);
+ }
+ seq= seq->next;
+ }
+ }
else {
ten= outliner_add_element(soops, &soops->tree, OBACT, NULL, 0, 0);
if(ten) ten->directdata= BASACT;
@@ -1640,7 +1785,8 @@ static int tree_element_active_ipo(SpaceOops *soops, TreeElement *te, int set)
if(chan->ipo) a++;
}
deselect_actionchannels(ob->action, 0);
- select_channel(ob->action, chan, SELECT_ADD);
+ if (chan)
+ select_channel(ob->action, chan, SELECT_ADD);
allqueue(REDRAWACTION, ob->ipowin);
allqueue(REDRAWVIEW3D, ob->ipowin);
}
@@ -1883,6 +2029,50 @@ static int tree_element_active_pose(TreeElement *te, TreeStoreElem *tselem, int
return 0;
}
+static int tree_element_active_sequence(TreeElement *te, TreeStoreElem *tselem, int set)
+{
+ Sequence *seq= (Sequence*) te->directdata;
+
+ if(set) {
+ select_single_seq(seq, 1);
+ allqueue(REDRAWSEQ, 0);
+ }
+ else {
+ if(seq->flag & SELECT)
+ return(1);
+ }
+ return(0);
+}
+
+static int tree_element_active_sequence_dup(TreeElement *te, TreeStoreElem *tselem, int set)
+{
+ Sequence *seq, *p;
+ Editing *ed;
+
+ seq= (Sequence*)te->directdata;
+ if(set==0) {
+ if(seq->flag & SELECT)
+ return(1);
+ return(0);
+ }
+
+ select_single_seq(seq, 1);
+ ed= G.scene->ed;
+ p= ed->seqbasep->first;
+ while(p) {
+ if((!p->strip) || (!p->strip->stripdata) || (!p->strip->stripdata->name)) {
+ p= p->next;
+ continue;
+ }
+
+ if(!strcmp(p->strip->stripdata->name, seq->strip->stripdata->name))
+ select_single_seq(p, 0);
+ p= p->next;
+ }
+ allqueue(REDRAWSEQ, 0);
+ return(0);
+}
+
/* generic call for non-id data to make/check active in UI */
static int tree_element_type_active(SpaceOops *soops, TreeElement *te, TreeStoreElem *tselem, int set)
{
@@ -1913,6 +2103,12 @@ static int tree_element_type_active(SpaceOops *soops, TreeElement *te, TreeStore
return tree_element_active_renderlayer(te, tselem, set);
case TSE_POSEGRP:
return tree_element_active_posegroup(te, tselem, set);
+ case TSE_SEQUENCE:
+ return tree_element_active_sequence(te, tselem, set);
+ break;
+ case TSE_SEQUENCE_DUP:
+ return tree_element_active_sequence_dup(te, tselem, set);
+ break;
}
return 0;
}
@@ -2034,6 +2230,8 @@ static int do_outliner_mouse_event(SpaceOops *soops, TreeElement *te, short even
if (G.qual == LR_CTRLKEY) {
if(ELEM9(tselem->type, TSE_NLA, TSE_DEFGROUP_BASE, TSE_CONSTRAINT_BASE, TSE_MODIFIER_BASE, TSE_SCRIPT_BASE, TSE_POSE_BASE, TSE_POSEGRP_BASE, TSE_R_LAYER_BASE, TSE_R_PASS))
error("Cannot edit builtin name");
+ else if(ELEM3(tselem->type, TSE_SEQUENCE, TSE_SEQ_STRIP, TSE_SEQUENCE_DUP))
+ error("Cannot edit sequence name");
else if(tselem->id->lib) {
error_libdata();
} else if(te->idcode == ID_LI && te->parent) {
@@ -2043,7 +2241,8 @@ static int do_outliner_mouse_event(SpaceOops *soops, TreeElement *te, short even
}
} else {
/* always makes active object */
- tree_element_active_object(soops, te);
+ if(tselem->type!=TSE_SEQUENCE && tselem->type!=TSE_SEQ_STRIP && tselem->type!=TSE_SEQUENCE_DUP)
+ tree_element_active_object(soops, te);
if(tselem->type==0) { // the lib blocks
/* editmode? */
@@ -2069,7 +2268,7 @@ static int do_outliner_mouse_event(SpaceOops *soops, TreeElement *te, short even
}
else if(event==RIGHTMOUSE) {
#ifdef WITH_VERSE
- if(ELEM4(te->idcode, ID_VS, ID_VN, ID_MS, ID_SS))
+ if((tselem->type!=TSE_SEQUENCE && tselem->type!=TSE_SEQ_STRIP && tselem->type!=TSE_SEQUENCE_DUP) && ELEM4(te->idcode, ID_VS, ID_VN, ID_MS, ID_SS))
verse_operation_menu(te);
else
#endif
@@ -2273,8 +2472,8 @@ static TreeElement *outliner_find_tse(SpaceOops *soops, TreeStoreElem *tse)
/* check if 'tse' is in treestore */
tselem= ts->data;
for(a=0; a<ts->usedelem; a++, tselem++) {
- if(tselem->id==tse->id) {
- if((tse->type==0 && tselem->type==0) || (tselem->type==tse->type && tselem->nr==tse->nr)) {
+ if((tse->type==0 && tselem->type==0) || (tselem->type==tse->type && tselem->nr==tse->nr)) {
+ if(tselem->id==tse->id) {
break;
}
}
@@ -2487,12 +2686,18 @@ static void set_operation_types(SpaceOops *soops, ListBase *lb,
tselem= TREESTORE(te);
if(tselem->flag & TSE_SELECTED) {
if(tselem->type) {
+ if(tselem->type==TSE_SEQUENCE)
+ *datalevel= TSE_SEQUENCE;
+ else if(tselem->type==TSE_SEQ_STRIP)
+ *datalevel= TSE_SEQ_STRIP;
+ else if(tselem->type==TSE_SEQUENCE_DUP)
+ *datalevel= TSE_SEQUENCE_DUP;
#ifdef WITH_VERSE
- if(te->idcode==ID_VS) *datalevel= TSE_VERSE_SESSION;
+ else if(te->idcode==ID_VS) *datalevel= TSE_VERSE_SESSION;
else if(te->idcode==ID_VN) *datalevel= TSE_VERSE_OBJ_NODE;
else if(*datalevel==0) *datalevel= tselem->type;
#else
- if(*datalevel==0) *datalevel= tselem->type;
+ else if(*datalevel==0) *datalevel= tselem->type;
#endif
else if(*datalevel!=tselem->type) *datalevel= -1;
}
@@ -2782,6 +2987,15 @@ static void vsession_cb(int event, TreeElement *te, TreeStoreElem *tselem)
}
#endif
+static void sequence_cb(int event, TreeElement *te, TreeStoreElem *tselem)
+{
+ Sequence *seq= (Sequence*) te->directdata;
+ if(event==1) {
+ select_single_seq(seq, 1);
+ allqueue(REDRAWSEQ, 0);
+ }
+}
+
static void outliner_do_data_operation(SpaceOops *soops, int type, int event, ListBase *lb,
void (*operation_cb)(int, TreeElement *, TreeStoreElem *))
{
@@ -2804,10 +3018,14 @@ static void outliner_do_data_operation(SpaceOops *soops, int type, int event, Li
void outliner_del(ScrArea *sa)
{
SpaceOops *soops= sa->spacedata.first;
- outliner_do_object_operation(soops, &soops->tree, object_delete_cb);
- DAG_scene_sort(G.scene);
- countall();
- BIF_undo_push("Delete Objects");
+ if(soops->outlinevis==SO_SEQUENCE)
+ del_seq();
+ else {
+ outliner_do_object_operation(soops, &soops->tree, object_delete_cb);
+ DAG_scene_sort(G.scene);
+ countall();
+ BIF_undo_push("Delete Objects");
+ }
allqueue(REDRAWALL, 0);
}
@@ -2940,7 +3158,13 @@ void outliner_operation_menu(ScrArea *sa)
}
}
#endif
-
+ else if(datalevel==TSE_SEQUENCE) {
+ short event= pupmenu("Sequence Operations %t|Select %x1");
+ if(event>0) {
+ outliner_do_data_operation(soops, datalevel, event, &soops->tree, sequence_cb);
+ }
+ }
+
allqueue(REDRAWOOPS, 0);
allqueue(REDRAWBUTSALL, 0);
allqueue(REDRAWVIEW3D, 0);
@@ -3020,7 +3244,26 @@ static void tselem_draw_icon(float x, float y, TreeStoreElem *tselem, TreeElemen
BIF_icon_draw(x, y, ICON_MATERIAL_DEHLT); break;
case TSE_POSEGRP_BASE:
BIF_icon_draw(x, y, ICON_VERTEXSEL); break;
-
+ case TSE_SEQUENCE:
+ if((te->idcode==SEQ_MOVIE) || (te->idcode==SEQ_MOVIE_AND_HD_SOUND))
+ BIF_icon_draw(x, y, ICON_SEQUENCE);
+ else if(te->idcode==SEQ_META)
+ BIF_icon_draw(x, y, ICON_DOT);
+ else if(te->idcode==SEQ_SCENE)
+ BIF_icon_draw(x, y, ICON_SCENE);
+ else if((te->idcode==SEQ_RAM_SOUND) || (te->idcode==SEQ_HD_SOUND))
+ BIF_icon_draw(x, y, ICON_SOUND);
+ else if(te->idcode==SEQ_IMAGE)
+ BIF_icon_draw(x, y, ICON_IMAGE_COL);
+ else
+ BIF_icon_draw(x, y, ICON_PARTICLES);
+ break;
+ case TSE_SEQ_STRIP:
+ BIF_icon_draw(x, y, ICON_LIBRARY_DEHLT);
+ break;
+ case TSE_SEQUENCE_DUP:
+ BIF_icon_draw(x, y, ICON_OBJECT);
+ break;
#ifdef WITH_VERSE
case ID_VS:
case ID_MS:
@@ -3233,7 +3476,7 @@ static void outliner_draw_tree_element(SpaceOops *soops, TreeElement *te, int st
}
/* open/close icon, only when sublevels, except for scene */
- if(te->subtree.first || (te->idcode==ID_SCE && tselem->type==0)) {
+ if(te->subtree.first || (tselem->type==0 && te->idcode==ID_SCE)) {
int icon_x;
if((tselem->type==0 && ELEM(te->idcode, ID_OB, ID_SCE)) || ELEM4(te->idcode,ID_VN,ID_VS, ID_MS, ID_SS))
icon_x = startx;
@@ -3254,7 +3497,7 @@ static void outliner_draw_tree_element(SpaceOops *soops, TreeElement *te, int st
tselem_draw_icon(startx+offsx, *starty+2, tselem, te);
offsx+= OL_X;
- if(tselem->id->lib && tselem->type==0) {
+ if(tselem->type==0 && tselem->id->lib) {
glPixelTransferf(GL_ALPHA_SCALE, 0.5);
if(tselem->id->flag & LIB_INDIRECT)
BIF_icon_draw(startx+offsx, *starty+2, ICON_DATALIB);
@@ -3760,6 +4003,9 @@ static void outliner_buttons(uiBlock *block, SpaceOops *soops, ListBase *lb)
if(te->ys >= soops->v2d.cur.ymin && te->ys <= soops->v2d.cur.ymax) {
if(tselem->flag & TSE_TEXTBUT) {
+ /* If we add support to rename Sequence.
+ * need change this.
+ */
if(tselem->type == TSE_POSE_BASE) continue; // prevent crash when trying to rename 'pose' entry of armature
if(tselem->type==TSE_EBONE) len = sizeof(((EditBone*) 0)->name);
diff --git a/source/blender/src/parametrizer.c b/source/blender/src/parametrizer.c
index 096629b01ec..1cf796d86bc 100644
--- a/source/blender/src/parametrizer.c
+++ b/source/blender/src/parametrizer.c
@@ -22,6 +22,8 @@
#include <stdio.h>
#include <string.h>
+#include "BLO_sys_types.h" // for intptr_t support
+
#if defined(_WIN32)
#define M_PI 3.14159265358979323846
#endif
@@ -38,7 +40,7 @@ static int PHashSizes[] = {
4194319, 8388617, 16777259, 33554467, 67108879, 134217757, 268435459
};
-#define PHASH_hash(ph, item) (((unsigned long) (item))%((unsigned int) (ph)->cursize))
+#define PHASH_hash(ph, item) (((uintptr_t) (item))%((unsigned int) (ph)->cursize))
#define PHASH_edge(v1, v2) ((v1)^(v2))
static PHash *phash_new(PHashLink **list, int sizehint)
@@ -996,7 +998,7 @@ static float p_edge_boundary_angle(PEdge *e)
static void p_chart_fill_boundary(PChart *chart, PEdge *be, int nedges)
{
PEdge *e, *e1, *e2;
- PHashKey vkeys[3];
+
PFace *f;
struct Heap *heap = BLI_heap_new();
float angle;
@@ -1034,9 +1036,9 @@ static void p_chart_fill_boundary(PChart *chart, PEdge *be, int nedges)
e->flag |= PEDGE_FILLED;
e1->flag |= PEDGE_FILLED;
- vkeys[0] = e->vert->u.key;
- vkeys[1] = e1->vert->u.key;
- vkeys[2] = e2->vert->u.key;
+
+
+
f = p_face_add_fill(chart, e->vert, e1->vert, e2->vert);
f->flag |= PFACE_FILLED;
@@ -1076,11 +1078,11 @@ static void p_chart_fill_boundary(PChart *chart, PEdge *be, int nedges)
static void p_chart_fill_boundaries(PChart *chart, PEdge *outer)
{
- PEdge *e, *enext, *be;
+ PEdge *e, *be; /* *enext - as yet unused */
int nedges;
for (e=chart->edges; e; e=e->nextlink) {
- enext = e->nextlink;
+ /* enext = e->nextlink; - as yet unused */
if (e->pair || (e->flag & PEDGE_FILLED))
continue;
@@ -3197,7 +3199,7 @@ static PBool p_chart_convex_hull(PChart *chart, PVert ***verts, int *nverts, int
return P_TRUE;
}
-float p_rectangle_area(float *p1, float *dir, float *p2, float *p3, float *p4)
+static float p_rectangle_area(float *p1, float *dir, float *p2, float *p3, float *p4)
{
/* given 4 points on the rectangle edges and the direction of on edge,
compute the area of the rectangle */
@@ -3340,7 +3342,7 @@ static float p_chart_minimum_area_angle(PChart *chart)
return minangle;
}
-void p_chart_rotate_minimum_area(PChart *chart)
+static void p_chart_rotate_minimum_area(PChart *chart)
{
float angle = p_chart_minimum_area_angle(chart);
float sine = sin(angle);
@@ -3539,7 +3541,7 @@ static float p_smooth_distortion(PEdge *e, float avg2d, float avg3d)
return (len3d == 0.0f)? 0.0f: len2d/len3d;
}
-void p_smooth(PChart *chart)
+static void p_smooth(PChart *chart)
{
PEdge *e;
PVert *v;
@@ -3962,7 +3964,7 @@ void param_construct_end(ParamHandle *handle, ParamBool fill, ParamBool impl)
for (i = j = 0; i < phandle->ncharts; i++) {
PVert *v;
- PChart *chart = phandle->charts[i];
+ chart = phandle->charts[i];
p_chart_boundaries(chart, &nboundaries, &outer);
diff --git a/source/blender/src/parametrizer.h b/source/blender/src/parametrizer.h
index 80fab110d5f..c468b8d62c5 100644
--- a/source/blender/src/parametrizer.h
+++ b/source/blender/src/parametrizer.h
@@ -5,9 +5,11 @@
#ifdef __cplusplus
extern "C" {
#endif
+
+#include "BLO_sys_types.h" // for intptr_t support
typedef void ParamHandle; /* handle to a set of charts */
-typedef long ParamKey; /* (hash) key for identifying verts and faces */
+typedef intptr_t ParamKey; /* (hash) key for identifying verts and faces */
typedef enum ParamBool {
PARAM_TRUE = 1,
PARAM_FALSE = 0
diff --git a/source/blender/src/parametrizer_intern.h b/source/blender/src/parametrizer_intern.h
index f7a32816b33..bc38cb4bc0f 100644
--- a/source/blender/src/parametrizer_intern.h
+++ b/source/blender/src/parametrizer_intern.h
@@ -30,7 +30,7 @@ typedef enum PBool {
/* Special Purpose Hash */
-typedef long PHashKey;
+typedef intptr_t PHashKey;
typedef struct PHashLink {
struct PHashLink *next;
diff --git a/source/blender/src/playanim.c b/source/blender/src/playanim.c
index 7a61368b4cd..8421101f66c 100644
--- a/source/blender/src/playanim.c
+++ b/source/blender/src/playanim.c
@@ -45,15 +45,6 @@
#endif
#include "MEM_guardedalloc.h"
-#ifdef WITH_QUICKTIME
-#ifdef _WIN32
-#include <QTML.h>
-#include <Movies.h>
-#elif defined(__APPLE__)
-#include <QuickTime/Movies.h>
-#endif /* __APPLE__ */
-#endif /* WITH_QUICKTIME */
-
#include "PIL_time.h"
#include <math.h>
@@ -77,6 +68,15 @@
#include "BMF_Api.h"
+#ifdef WITH_QUICKTIME
+#ifdef _WIN32
+#include <QTML.h>
+#include <Movies.h>
+#elif defined(__APPLE__)
+#include <QuickTime/Movies.h>
+#endif /* __APPLE__ */
+#endif /* WITH_QUICKTIME */
+
#include "playanim_ext.h"
#include "mydevice.h"
#include "blendef.h"
@@ -346,6 +346,7 @@ void playanim(int argc, char **argv)
int start_x= 0, start_y= 0;
int sfra= -1;
int efra= -1;
+ int totblock;
while (argc > 1) {
if (argv[1][0] == '-'){
@@ -823,6 +824,7 @@ void playanim(int argc, char **argv)
free_blender();
window_destroy(g_window);
+ totblock= MEM_get_memory_blocks_in_use();
if(totblock!=0) {
printf("Error Totblock: %d\n",totblock);
MEM_printmemlist();
diff --git a/source/blender/src/poselib.c b/source/blender/src/poselib.c
index 6aeef7c75c2..ff54ad31e22 100644
--- a/source/blender/src/poselib.c
+++ b/source/blender/src/poselib.c
@@ -61,7 +61,7 @@
#include "BKE_global.h"
#include "BKE_utildefines.h"
-//#include "BIF_keyframing.h"
+#include "BIF_keyframing.h"
#include "BSE_editipo.h"
#include "BDR_drawaction.h"
diff --git a/source/blender/src/poseobject.c b/source/blender/src/poseobject.c
index 28b8729a247..0f624d979d5 100644
--- a/source/blender/src/poseobject.c
+++ b/source/blender/src/poseobject.c
@@ -69,6 +69,7 @@
#include "BIF_gl.h"
#include "BIF_graphics.h"
#include "BIF_interface.h"
+#include "BIF_keyframing.h"
#include "BIF_poseobject.h"
#include "BIF_space.h"
#include "BIF_toolbox.h"
@@ -212,6 +213,8 @@ int pose_channel_in_IK_chain(Object *ob, bPoseChannel *pchan)
bConstraint *con;
Bone *bone;
+ /* No need to check if constraint is active (has influence),
+ * since all constraints with CONSTRAINT_IK_AUTO are active */
for(con= pchan->constraints.first; con; con= con->next) {
if(con->type==CONSTRAINT_TYPE_KINEMATIC) {
bKinematicConstraint *data= con->data;
@@ -406,6 +409,7 @@ void pose_recalculate_paths(Object *ob)
waitcursor(0);
CFRA= cfra;
+ ob->pose->flag &= ~POSE_RECALCPATHS;
allqueue(REDRAWVIEW3D, 0); /* recalc tags are still there */
allqueue(REDRAWBUTSEDIT, 0);
}
@@ -1731,3 +1735,4 @@ void pose_flipquats(void)
autokeyframe_pose_cb_func(ob, TFM_ROTATION, 0);
}
+
diff --git a/source/blender/src/preview.blend.c b/source/blender/src/preview.blend.c
index 1ea7d7531ec..63731e97342 100644
--- a/source/blender/src/preview.blend.c
+++ b/source/blender/src/preview.blend.c
@@ -1,4442 +1,4613 @@
/* DataToC output of file <preview_blend> */
-int datatoc_preview_blend_size= 433792;
+int datatoc_preview_blend_size= 446288;
char datatoc_preview_blend[]= {
-
- 66, 76, 69, 78, 68, 69, 82, 95,118, 50, 52, 53, 82, 69, 78, 68, 32, 0, 0, 0,160,242, 34, 0, 0, 0, 0, 0, 1, 0, 0, 0,
- 1, 0, 0, 0, 20, 0, 0, 0,112,114,101,118,105,101,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 71, 76, 79, 66, 32, 0, 0, 0,192,241, 34, 0,155, 0, 0, 0, 1, 0, 0, 0, 32, 32, 49, 52, 14, 0, 34, 0,240, 0, 0, 0,
- 1, 0, 0, 1, 56,106,163, 2,240, 36,130, 2, 0, 0, 0, 0, 64, 0, 0, 0, 83, 82, 0, 0,120, 0, 0, 0, 56,106,163, 2,
-150, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 82,115, 99,114,101,101,110,
- 0, 45, 83, 99,114,105,112,116,105,110,103, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,224,106,163, 2,
-104, 48,127, 2, 32,109,163, 2,216, 47,127, 2,248, 3,130, 2,160, 78,130, 2,240, 36,130, 2, 0, 0,127, 7, 18, 0,174, 4,
-128, 7,157, 4, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 20, 0, 0, 0,224,106,163, 2,151, 0, 0, 0, 1, 0, 0, 0, 40,107,163, 2, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 20, 0, 0, 0, 40,107,163, 2,151, 0, 0, 0, 1, 0, 0, 0,112,107,163, 2,
-224,106,163, 2, 0, 0, 0, 0, 0, 0,157, 4, 0, 0, 0, 0, 68, 65, 84, 65, 20, 0, 0, 0,112,107,163, 2,151, 0, 0, 0,
- 1, 0, 0, 0,184,107,163, 2, 40,107,163, 2, 0, 0, 0, 0,128, 7,157, 4, 0, 0, 0, 0, 68, 65, 84, 65, 20, 0, 0, 0,
-184,107,163, 2,151, 0, 0, 0, 1, 0, 0, 0, 0,108,163, 2,112,107,163, 2, 0, 0, 0, 0,128, 7, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 20, 0, 0, 0, 0,108,163, 2,151, 0, 0, 0, 1, 0, 0, 0, 72,108,163, 2,184,107,163, 2, 0, 0, 0, 0,
- 0, 0,124, 4, 0, 0, 0, 0, 68, 65, 84, 65, 20, 0, 0, 0, 72,108,163, 2,151, 0, 0, 0, 1, 0, 0, 0,144,108,163, 2,
- 0,108,163, 2, 0, 0, 0, 0,128, 7,124, 4, 0, 0, 0, 0, 68, 65, 84, 65, 20, 0, 0, 0,144,108,163, 2,151, 0, 0, 0,
- 1, 0, 0, 0,216,108,163, 2, 72,108,163, 2, 0, 0, 0, 0,252, 5, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 20, 0, 0, 0,
-216,108,163, 2,151, 0, 0, 0, 1, 0, 0, 0, 32, 48,127, 2,144,108,163, 2, 0, 0, 0, 0,252, 5,124, 4, 0, 0, 0, 0,
- 68, 65, 84, 65, 20, 0, 0, 0, 32, 48,127, 2,151, 0, 0, 0, 1, 0, 0, 0,104, 48,127, 2,216,108,163, 2, 0, 0, 0, 0,
-104, 3, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 20, 0, 0, 0,104, 48,127, 2,151, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 32, 48,127, 2, 0, 0, 0, 0,104, 3,124, 4, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0, 32,109,163, 2,152, 0, 0, 0,
- 1, 0, 0, 0,104,109,163, 2, 0, 0, 0, 0, 40,107,163, 2,112,107,163, 2, 1, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 24, 0, 0, 0,104,109,163, 2,152, 0, 0, 0, 1, 0, 0, 0,176,109,163, 2, 32,109,163, 2, 40,107,163, 2, 0,108,163, 2,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0,176,109,163, 2,152, 0, 0, 0, 1, 0, 0, 0,248,109,163, 2,
-104,109,163, 2,112,107,163, 2, 72,108,163, 2, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0,248,109,163, 2,
-152, 0, 0, 0, 1, 0, 0, 0, 64,110,163, 2,176,109,163, 2, 0,108,163, 2, 72,108,163, 2, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 24, 0, 0, 0, 64,110,163, 2,152, 0, 0, 0, 1, 0, 0, 0,136,110,163, 2,248,109,163, 2,184,107,163, 2,
-144,108,163, 2, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0,136,110,163, 2,152, 0, 0, 0, 1, 0, 0, 0,
-208,110,163, 2, 64,110,163, 2, 72,108,163, 2,216,108,163, 2, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0,
-208,110,163, 2,152, 0, 0, 0, 1, 0, 0, 0, 24,111,163, 2,136,110,163, 2,144,108,163, 2,216,108,163, 2, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0, 24,111,163, 2,152, 0, 0, 0, 1, 0, 0, 0, 96,111,163, 2,208,110,163, 2,
-184,107,163, 2, 72,108,163, 2, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0, 96,111,163, 2,152, 0, 0, 0,
- 1, 0, 0, 0,184, 46,127, 2, 24,111,163, 2,224,106,163, 2, 0,108,163, 2, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 24, 0, 0, 0,184, 46,127, 2,152, 0, 0, 0, 1, 0, 0, 0, 0, 47,127, 2, 96,111,163, 2, 32, 48,127, 2,224,106,163, 2,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0, 0, 47,127, 2,152, 0, 0, 0, 1, 0, 0, 0, 72, 47,127, 2,
-184, 46,127, 2, 32, 48,127, 2,144,108,163, 2, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0, 72, 47,127, 2,
-152, 0, 0, 0, 1, 0, 0, 0,144, 47,127, 2, 0, 47,127, 2,104, 48,127, 2, 0,108,163, 2, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 24, 0, 0, 0,144, 47,127, 2,152, 0, 0, 0, 1, 0, 0, 0,216, 47,127, 2, 72, 47,127, 2,104, 48,127, 2,
-216,108,163, 2, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0,216, 47,127, 2,152, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0,144, 47,127, 2, 32, 48,127, 2,104, 48,127, 2, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,204, 0, 0, 0,
-248, 3,130, 2,154, 0, 0, 0, 1, 0, 0, 0,104,250,126, 2, 0, 0, 0, 0, 0,108,163, 2, 40,107,163, 2,112,107,163, 2,
- 72,108,163, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0,125, 4, 0, 0,157, 4, 0, 0, 0, 0, 0, 0,128, 7, 0, 0,
-125, 4, 0, 0,151, 4, 0, 0, 0, 0, 0, 0,128, 7, 0, 0,152, 4, 0, 0,157, 4, 0, 0, 5, 0, 4, 0, 1, 0, 7, 7,
-129, 7, 6, 0, 1, 0, 1, 0,171, 2, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,120, 94,127, 2, 32,204,128, 2, 40, 17,146, 2,152,151,163, 2, 68, 65, 84, 65,228, 0, 0, 0,
- 40, 17,146, 2,153, 0, 0, 0, 1, 0, 0, 0,192,206,149, 2, 0, 0, 0, 0, 79,117,116,112,117,116, 0, 0, 0, 0, 0, 0,
+ 66, 76, 69, 78, 68, 69, 82, 95, 86, 50, 52, 55, 82, 69, 78, 68,
+ 0, 0, 0, 32,191,255,241,160, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 20,112,114,101,118,105,101,119, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 76, 79, 66, 0, 0, 0, 32,191,255,241,144, 0, 0, 0,165,
+ 0, 0, 0, 1, 32, 32, 32, 53, 0, 5, 0, 0, 0,245, 0, 15, 0, 1, 1, 0, 7, 31,229,144, 7,159,144, 32, 0, 0, 0, 0,
+ 0, 0, 0, 64, 0, 0, 83, 82, 0, 0, 0,120, 7, 31,229,144, 0, 0, 0,160, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 83, 82,115, 99,114,101,101,110, 0, 45, 83, 99,114,105,112,116,105,110,103, 0, 0, 0, 0, 0,
+ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 29,221,112, 7, 31,232, 48, 7, 31,232,112, 7, 31,235,176, 7, 31,235,240,
+ 13, 64,121,112, 7,159,144, 32, 0, 0, 3,231, 1,143, 4,174, 3,232, 3, 32, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 10,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 20, 7, 29,221,112, 0, 0, 0,161,
+ 0, 0, 0, 1, 7, 31,230, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 20,
+ 7, 31,230, 48, 0, 0, 0,161, 0, 0, 0, 1, 7, 31,230,112, 7, 29,221,112, 0, 0, 0, 0, 0, 0, 3, 32, 0, 0, 0, 0,
+ 68, 65, 84, 65, 0, 0, 0, 20, 7, 31,230,112, 0, 0, 0,161, 0, 0, 0, 1, 7, 31,230,176, 7, 31,230, 48, 0, 0, 0, 0,
+ 3,232, 3, 32, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 20, 7, 31,230,176, 0, 0, 0,161, 0, 0, 0, 1, 7, 31,230,240,
+ 7, 31,230,112, 0, 0, 0, 0, 3,232, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 20, 7, 31,230,240, 0, 0, 0,161,
+ 0, 0, 0, 1, 7, 31,231, 48, 7, 31,230,176, 0, 0, 0, 0, 0, 0, 3, 6, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 20,
+ 7, 31,231, 48, 0, 0, 0,161, 0, 0, 0, 1, 7, 31,231,112, 7, 31,230,240, 0, 0, 0, 0, 3,232, 3, 6, 0, 0, 0, 0,
+ 68, 65, 84, 65, 0, 0, 0, 20, 7, 31,231,112, 0, 0, 0,161, 0, 0, 0, 1, 7, 31,231,176, 7, 31,231, 48, 0, 0, 0, 0,
+ 3, 32, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 20, 7, 31,231,176, 0, 0, 0,161, 0, 0, 0, 1, 7, 31,231,240,
+ 7, 31,231,112, 0, 0, 0, 0, 3, 32, 3, 6, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 20, 7, 31,231,240, 0, 0, 0,161,
+ 0, 0, 0, 1, 7, 31,232, 48, 7, 31,231,176, 0, 0, 0, 0, 1,236, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 20,
+ 7, 31,232, 48, 0, 0, 0,161, 0, 0, 0, 1, 0, 0, 0, 0, 7, 31,231,240, 0, 0, 0, 0, 1,236, 3, 6, 0, 0, 0, 0,
+ 68, 65, 84, 65, 0, 0, 0, 24, 7, 31,232,112, 0, 0, 0,162, 0, 0, 0, 1, 7, 31,232,176, 0, 0, 0, 0, 7, 31,230, 48,
+ 7, 31,230,112, 0, 1, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 24, 7, 31,232,176, 0, 0, 0,162, 0, 0, 0, 1,
+ 7, 31,232,240, 7, 31,232,112, 7, 31,230, 48, 7, 31,230,240, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 24,
+ 7, 31,232,240, 0, 0, 0,162, 0, 0, 0, 1, 7, 31,233, 48, 7, 31,232,176, 7, 31,230,112, 7, 31,231, 48, 0, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 24, 7, 31,233, 48, 0, 0, 0,162, 0, 0, 0, 1, 7, 31,233,112, 7, 31,232,240,
+ 7, 31,230,240, 7, 31,231, 48, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 24, 7, 31,233,112, 0, 0, 0,162,
+ 0, 0, 0, 1, 7, 31,233,176, 7, 31,233, 48, 7, 31,230,176, 7, 31,231,112, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+ 0, 0, 0, 24, 7, 31,233,176, 0, 0, 0,162, 0, 0, 0, 1, 7, 31,233,240, 7, 31,233,112, 7, 31,231, 48, 7, 31,231,176,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 24, 7, 31,233,240, 0, 0, 0,162, 0, 0, 0, 1, 7, 31,234, 48,
+ 7, 31,233,176, 7, 31,231,112, 7, 31,231,176, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 24, 7, 31,234, 48,
+ 0, 0, 0,162, 0, 0, 0, 1, 7, 31,234,112, 7, 31,233,240, 7, 31,230,176, 7, 31,231, 48, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 0, 0, 0, 24, 7, 31,234,112, 0, 0, 0,162, 0, 0, 0, 1, 7, 31,234,176, 7, 31,234, 48, 7, 29,221,112,
+ 7, 31,230,240, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 24, 7, 31,234,176, 0, 0, 0,162, 0, 0, 0, 1,
+ 7, 31,234,240, 7, 31,234,112, 7, 29,221,112, 7, 31,231,240, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 24,
+ 7, 31,234,240, 0, 0, 0,162, 0, 0, 0, 1, 7, 31,235, 48, 7, 31,234,176, 7, 31,231,112, 7, 31,231,240, 0, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 24, 7, 31,235, 48, 0, 0, 0,162, 0, 0, 0, 1, 7, 31,235,112, 7, 31,234,240,
+ 7, 31,230,240, 7, 31,232, 48, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 24, 7, 31,235,112, 0, 0, 0,162,
+ 0, 0, 0, 1, 7, 31,235,176, 7, 31,235, 48, 7, 31,231,176, 7, 31,232, 48, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+ 0, 0, 0, 24, 7, 31,235,176, 0, 0, 0,162, 0, 0, 0, 1, 0, 0, 0, 0, 7, 31,235,112, 7, 31,231,240, 7, 31,232, 48,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,204, 7, 31,235,240, 0, 0, 0,164, 0, 0, 0, 1, 13, 64, 24,144,
+ 0, 0, 0, 0, 7, 31,230,240, 7, 31,230, 48, 7, 31,230,112, 7, 31,231, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,232,
+ 0, 0, 3, 7, 0, 0, 3, 32, 0, 0, 0, 0, 0, 0, 3,232, 0, 0, 3, 7, 0, 0, 3, 33, 0, 0, 0, 0, 0, 0, 3,232,
+ 0, 0, 3, 32, 0, 0, 3, 32, 0, 5, 0, 4, 0, 1, 7, 7, 3,233, 0, 1, 1, 0, 1, 0, 2,189, 0, 0, 0, 7, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 22,196, 96, 7, 22,196, 96,
+ 7, 31,236,240, 13, 64, 23,128, 68, 65, 84, 65, 0, 0, 0,228, 7, 31,236,240, 0, 0, 0,163, 0, 0, 0, 1, 7, 31,238, 0,
+ 0, 0, 0, 0, 79,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 82,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 0, 0, 0,228, 7, 31,238, 0, 0, 0, 0,163, 0, 0, 0, 1, 7, 31,239, 16, 7, 31,236,240, 82,101,110,100,
+101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82,101,110,100,
+101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 70, 0, 0,
+ 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228,
+ 7, 31,239, 16, 0, 0, 0,163, 0, 0, 0, 1, 7, 31,240, 32, 7, 31,238, 0, 65,110,105,109, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82,101,110,100,101,114, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 1,204, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,228, 0, 0, 0,192,206,149, 2,153, 0, 0, 0,
- 1, 0, 0, 0,120,203,149, 2, 40, 17,146, 2, 82,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,140, 0, 0, 1, 62, 0,204, 0, 0, 0, 0,
+ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228, 7, 31,240, 32, 0, 0, 0,163,
+ 0, 0, 0, 1, 7, 31,241, 48, 7, 31,239, 16, 70,111,114,109, 97,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 1, 0, 0, 62, 1,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,228, 0, 0, 0,120,203,149, 2,153, 0, 0, 0, 1, 0, 0, 0,144,204,149, 2,
-192,206,149, 2, 65,110,105,109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,210, 0, 0, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228, 7, 31,241, 48, 0, 0, 0,163, 0, 0, 0, 1, 7, 31,242, 64,
+ 7, 31,240, 32, 80,114,101,118,105,101,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 82,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 76, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,140, 2, 0, 0, 62, 1,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65,228, 0, 0, 0,144,204,149, 2,153, 0, 0, 0, 1, 0, 0, 0, 56,112,163, 2,120,203,149, 2, 70,111,114,109,
- 97,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82,101,110,100,
-101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 0, 0, 0,228, 7, 31,242, 64, 0, 0, 0,163, 0, 0, 0, 1, 7, 31,243, 80, 7, 31,241, 48, 76, 97,109,112,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 97,109,112,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,210, 3, 0, 0,
- 62, 1,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,228, 0, 0, 0,
- 56,112,163, 2,153, 0, 0, 0, 1, 0, 0, 0, 80,113,163, 2,144,204,149, 2, 80,114,101,118,105,101,119, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 70, 0, 0,
+ 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228,
+ 7, 31,243, 80, 0, 0, 0,163, 0, 0, 0, 1, 7, 31,244, 96, 7, 31,242, 64, 83,104, 97,100,111,119, 32, 97,110,100, 32, 83,
+112,111,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 1,204, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,228, 0, 0, 0, 80,113,163, 2,153, 0, 0, 0,
- 1, 0, 0, 0,104,114,163, 2, 56,112,163, 2, 76, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,140, 0, 0, 1, 62, 0,204, 0, 0, 0, 0,
+ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228, 7, 31,244, 96, 0, 0, 0,163,
+ 0, 0, 0, 1, 7, 31,245,112, 7, 31,243, 80, 84,101,120,116,117,114,101, 32, 97,110,100, 32, 73,110,112,117,116, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 1, 0, 0, 62, 1,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,228, 0, 0, 0,104,114,163, 2,153, 0, 0, 0, 1, 0, 0, 0,128,115,163, 2,
- 80,113,163, 2, 83,104, 97,100,111,119, 32, 97,110,100, 32, 83,112,111,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,210, 0, 0, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228, 7, 31,245,112, 0, 0, 0,163, 0, 0, 0, 1, 7, 31,246,128,
+ 7, 31,244, 96, 77, 97,112, 32, 84,111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 76, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,140, 2, 0, 0, 62, 1,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65,228, 0, 0, 0,128,115,163, 2,153, 0, 0, 0, 1, 0, 0, 0,152,116,163, 2,104,114,163, 2, 84,101,120,116,
-117,114,101, 32, 97,110,100, 32, 73,110,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 97,109,112,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 3,210, 0, 0, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 31,244, 96,
+ 68, 65, 84, 65, 0, 0, 0,228, 7, 31,246,128, 0, 0, 0,163, 0, 0, 0, 1, 7, 31,247,144, 7, 31,245,112, 80,114,101,118,
+105,101,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 97,116,101,
+114,105, 97,108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,210, 3, 0, 0,
- 62, 1,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,228, 0, 0, 0,
-152,116,163, 2,153, 0, 0, 0, 1, 0, 0, 0,176,117,163, 2,128,115,163, 2, 77, 97,112, 32, 84,111, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228,
+ 7, 31,247,144, 0, 0, 0,163, 0, 0, 0, 1, 7, 31,248,160, 7, 31,246,128, 76,105,110,107,115, 32, 97,110,100, 32, 80,105,
+112,101,108,105,110,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 97,116,101,114,105, 97,108, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,210, 3, 0, 0, 62, 1,204, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,115,163, 2, 68, 65, 84, 65,228, 0, 0, 0,176,117,163, 2,153, 0, 0, 0,
- 1, 0, 0, 0,200,118,163, 2,152,116,163, 2, 80,114,101,118,105,101,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 70, 0, 0, 1, 62, 0,204, 0, 0, 0, 0,
+ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228, 7, 31,248,160, 0, 0, 0,163,
+ 0, 0, 0, 1, 7, 31,249,176, 7, 31,247,144, 77, 97,116,101,114,105, 97,108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 97,116,101,114,105, 97,108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 1,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,228, 0, 0, 0,200,118,163, 2,153, 0, 0, 0, 1, 0, 0, 0,224,119,163, 2,
-176,117,163, 2, 76,105,110,107,115, 32, 97,110,100, 32, 80,105,112,101,108,105,110,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,140, 0, 0, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228, 7, 31,249,176, 0, 0, 0,163, 0, 0, 0, 1, 7, 31,250,192,
+ 7, 31,248,160, 82, 97,109,112,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 77, 97,116,101,114,105, 97,108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 70, 1, 0, 0, 62, 1,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65,228, 0, 0, 0,224,119,163, 2,153, 0, 0, 0, 1, 0, 0, 0,248,120,163, 2,200,118,163, 2, 77, 97,116,101,
-114,105, 97,108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 2,140, 0, 0, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 31,248,160,
+ 68, 65, 84, 65, 0, 0, 0,228, 7, 31,250,192, 0, 0, 0,163, 0, 0, 0, 1, 7, 31,251,208, 7, 31,249,176, 83,104, 97,100,
+101,114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 97,116,101,
114,105, 97,108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,140, 2, 0, 0,
- 62, 1,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,228, 0, 0, 0,
-248,120,163, 2,153, 0, 0, 0, 1, 0, 0, 0, 16,122,163, 2,224,119,163, 2, 82, 97,109,112,115, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,210, 0, 0,
+ 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 31,251,208, 68, 65, 84, 65, 0, 0, 0,228,
+ 7, 31,251,208, 0, 0, 0,163, 0, 0, 0, 1, 7, 31,252,224, 7, 31,250,192, 77,105,114,114,111,114, 32, 84,114, 97,110,115,
+112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 97,116,101,114,105, 97,108, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,140, 2, 0, 0, 62, 1,204, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,224,119,163, 2, 68, 65, 84, 65,228, 0, 0, 0, 16,122,163, 2,153, 0, 0, 0,
- 1, 0, 0, 0, 40,123,163, 2,248,120,163, 2, 83,104, 97,100,101,114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,210, 0, 0, 1, 62, 0,204, 0, 0, 0, 0,
+ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228, 7, 31,252,224, 0, 0, 0,163,
+ 0, 0, 0, 1, 7, 31,253,240, 7, 31,251,208, 84,101,120,116,117,114,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 97,116,101,114,105, 97,108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,210, 3, 0, 0, 62, 1,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 40,123,163, 2, 68, 65, 84, 65,228, 0, 0, 0, 40,123,163, 2,153, 0, 0, 0, 1, 0, 0, 0, 64,124,163, 2,
- 16,122,163, 2, 77,105,114,114,111,114, 32, 84,114, 97,110,115,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 24, 0, 0, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228, 7, 31,253,240, 0, 0, 0,163, 0, 0, 0, 1, 7, 31,255, 0,
+ 7, 31,252,224, 77, 97,112, 32, 73,110,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 77, 97,116,101,114,105, 97,108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,210, 3, 0, 0, 62, 1,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65,228, 0, 0, 0, 64,124,163, 2,153, 0, 0, 0, 1, 0, 0, 0, 88,125,163, 2, 40,123,163, 2, 84,101,120,116,
-117,114,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 5, 24, 0, 0, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 31,252,224,
+ 68, 65, 84, 65, 0, 0, 0,228, 7, 31,255, 0, 0, 0, 0,163, 0, 0, 0, 1, 13, 64, 0, 32, 7, 31,253,240, 77, 97,112, 32,
+ 84,111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 97,116,101,
114,105, 97,108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 5, 0, 0,
- 62, 1,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,228, 0, 0, 0,
- 88,125,163, 2,153, 0, 0, 0, 1, 0, 0, 0,112,126,163, 2, 64,124,163, 2, 77, 97,112, 32, 73,110,112,117,116, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 97,116,101,114,105, 97,108, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 24, 0, 0,
+ 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 31,252,224, 68, 65, 84, 65, 0, 0, 0,228,
+ 13, 64, 0, 32, 0, 0, 0,163, 0, 0, 0, 1, 13, 64, 1, 48, 7, 31,255, 0, 76,105,110,107, 32, 97,110,100, 32, 77, 97,116,
+101,114,105, 97,108,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69,100,105,116,105,110,103, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 5, 0, 0, 62, 1,204, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,124,163, 2, 68, 65, 84, 65,228, 0, 0, 0,112,126,163, 2,153, 0, 0, 0,
- 1, 0, 0, 0,136,127,163, 2, 88,125,163, 2, 77, 97,112, 32, 84,111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 62, 0,204, 0, 0, 0, 0,
+ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228, 13, 64, 1, 48, 0, 0, 0,163,
+ 0, 0, 0, 1, 13, 64, 2, 64, 13, 64, 0, 32, 77,101,115,104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 97,116,101,114,105, 97,108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69,100,105,116,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 5, 0, 0, 62, 1,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 64,124,163, 2, 68, 65, 84, 65,228, 0, 0, 0,136,127,163, 2,153, 0, 0, 0, 1, 0, 0, 0,160,128,163, 2,
-112,126,163, 2, 76,105,110,107, 32, 97,110,100, 32, 77, 97,116,101,114,105, 97,108,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 70, 0, 0, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228, 13, 64, 2, 64, 0, 0, 0,163, 0, 0, 0, 1, 13, 64, 3, 80,
+ 13, 64, 1, 48, 77,111,100,105,102,105,101,114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 69,100,105,116,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 62, 1,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65,228, 0, 0, 0,160,128,163, 2,153, 0, 0, 0, 1, 0, 0, 0,184,129,163, 2,136,127,163, 2, 77,101,115,104,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 2,140, 0, 0, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 0, 0, 0,228, 13, 64, 3, 80, 0, 0, 0,163, 0, 0, 0, 1, 13, 64, 4, 96, 13, 64, 2, 64, 83,104, 97,112,
+101,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69,100,105,116,
105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 1, 0, 0,
- 62, 1,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,228, 0, 0, 0,
-184,129,163, 2,153, 0, 0, 0, 1, 0, 0, 0,208,130,163, 2,160,128,163, 2, 77,111,100,105,102,105,101,114,115, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,140, 0, 0,
+ 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 64, 2, 64, 68, 65, 84, 65, 0, 0, 0,228,
+ 13, 64, 4, 96, 0, 0, 0,163, 0, 0, 0, 1, 13, 64, 5,112, 13, 64, 3, 80, 77,101,115,104, 32, 84,111,111,108,115, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69,100,105,116,105,110,103, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,140, 2, 0, 0, 62, 1,204, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,228, 0, 0, 0,208,130,163, 2,153, 0, 0, 0,
- 1, 0, 0, 0,232,131,163, 2,184,129,163, 2, 83,104, 97,112,101,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,210, 0, 0, 1, 62, 0,204, 0, 0, 0, 0,
+ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228, 13, 64, 5,112, 0, 0, 0,163,
+ 0, 0, 0, 1, 13, 64, 6,128, 13, 64, 4, 96, 77,101,115,104, 32, 84,111,111,108,115, 32, 49, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69,100,105,116,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,140, 2, 0, 0, 62, 1,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,184,129,163, 2, 68, 65, 84, 65,228, 0, 0, 0,232,131,163, 2,153, 0, 0, 0, 1, 0, 0, 0, 0,133,163, 2,
-208,130,163, 2, 77,101,115,104, 32, 84,111,111,108,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 69,100,105,116,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 24, 0, 0, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228, 13, 64, 6,128, 0, 0, 0,163, 0, 0, 0, 1, 13, 64, 7,144,
+ 13, 64, 5,112, 80,114,101,118,105,101,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 87,111,114,108,100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,210, 3, 0, 0, 62, 1,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65,228, 0, 0, 0, 0,133,163, 2,153, 0, 0, 0, 1, 0, 0, 0, 24,134,163, 2,232,131,163, 2, 77,101,115,104,
- 32, 84,111,111,108,115, 32, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69,100,105,116,
-105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 0, 0, 0,228, 13, 64, 7,144, 0, 0, 0,163, 0, 0, 0, 1, 13, 64, 8,160, 13, 64, 6,128, 87,111,114,108,
+100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87,111,114,108,
+100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 5, 0, 0,
- 62, 1,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,228, 0, 0, 0,
- 24,134,163, 2,153, 0, 0, 0, 1, 0, 0, 0, 48,135,163, 2, 0,133,163, 2, 80,114,101,118,105,101,119, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 70, 0, 0,
+ 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228,
+ 13, 64, 8,160, 0, 0, 0,163, 0, 0, 0, 1, 13, 64, 9,176, 13, 64, 7,144, 77,105,115,116, 32, 47, 32, 83,116, 97,114,115,
+ 32, 47, 32, 80,104,121,115,105, 99,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87,111,114,108,100, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 1,204, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,228, 0, 0, 0, 48,135,163, 2,153, 0, 0, 0,
- 1, 0, 0, 0, 72,136,163, 2, 24,134,163, 2, 87,111,114,108,100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,140, 0, 0, 1, 62, 0,204, 0, 0, 0, 0,
+ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228, 13, 64, 9,176, 0, 0, 0,163,
+ 0, 0, 0, 1, 13, 64, 10,192, 13, 64, 8,160, 65,109, 98, 32, 79, 99, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87,111,114,108,100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 1, 0, 0, 62, 1,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,228, 0, 0, 0, 72,136,163, 2,153, 0, 0, 0, 1, 0, 0, 0, 96,137,163, 2,
- 48,135,163, 2, 77,105,115,116, 32, 47, 32, 83,116, 97,114,115, 32, 47, 32, 80,104,121,115,105, 99,115, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,140, 0, 0, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 13, 64, 8,160, 68, 65, 84, 65, 0, 0, 0,228, 13, 64, 10,192, 0, 0, 0,163, 0, 0, 0, 1, 13, 64, 11,208,
+ 13, 64, 9,176, 84,101,120,116,117,114,101, 32, 97,110,100, 32, 73,110,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 87,111,114,108,100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,140, 2, 0, 0, 62, 1,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65,228, 0, 0, 0, 96,137,163, 2,153, 0, 0, 0, 1, 0, 0, 0,120,138,163, 2, 72,136,163, 2, 65,109, 98, 32,
- 79, 99, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 3,210, 0, 0, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 0, 0, 0,228, 13, 64, 11,208, 0, 0, 0,163, 0, 0, 0, 1, 13, 64, 12,224, 13, 64, 10,192, 77, 97,112, 32,
+ 84,111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87,111,114,108,
100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,140, 2, 0, 0,
- 62, 1,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72,136,163, 2, 68, 65, 84, 65,228, 0, 0, 0,
-120,138,163, 2,153, 0, 0, 0, 1, 0, 0, 0,144,139,163, 2, 96,137,163, 2, 84,101,120,116,117,114,101, 32, 97,110,100, 32,
- 73,110,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87,111,114,108,100, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,210, 0, 0,
+ 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 64, 10,192, 68, 65, 84, 65, 0, 0, 0,228,
+ 13, 64, 12,224, 0, 0, 0,163, 0, 0, 0, 1, 13, 64, 13,240, 13, 64, 11,208, 80,114,101,118,105,101,119, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84,101,120,116,117,114,101, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,210, 3, 0, 0, 62, 1,204, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,228, 0, 0, 0,144,139,163, 2,153, 0, 0, 0,
- 1, 0, 0, 0,168,140,163, 2,120,138,163, 2, 77, 97,112, 32, 84,111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 62, 0,204, 0, 0, 0, 0,
+ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228, 13, 64, 13,240, 0, 0, 0,163,
+ 0, 0, 0, 1, 13, 64, 15, 0, 13, 64, 12,224, 84,101,120,116,117,114,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87,111,114,108,100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84,101,120,116,117,114,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,210, 3, 0, 0, 62, 1,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,120,138,163, 2, 68, 65, 84, 65,228, 0, 0, 0,168,140,163, 2,153, 0, 0, 0, 1, 0, 0, 0,192,141,163, 2,
-144,139,163, 2, 80,114,101,118,105,101,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 70, 0, 0, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228, 13, 64, 15, 0, 0, 0, 0,163, 0, 0, 0, 1, 13, 64, 16, 16,
+ 13, 64, 13,240, 67,111,108,111,114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 84,101,120,116,117,114,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 62, 1,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65,228, 0, 0, 0,192,141,163, 2,153, 0, 0, 0, 1, 0, 0, 0,216,142,163, 2,168,140,163, 2, 84,101,120,116,
-117,114,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84,101,120,116,
-117,114,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1, 70, 0, 0, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 64, 13,240,
+ 68, 65, 84, 65, 0, 0, 0,228, 13, 64, 16, 16, 0, 0, 0,163, 0, 0, 0, 1, 13, 64, 17, 32, 13, 64, 15, 0, 79, 98,106,101,
+ 99,116, 32, 97,110,100, 32, 76,105,110,107,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 98,106,101,
+ 99,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 1, 0, 0,
- 62, 1,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,228, 0, 0, 0,
-216,142,163, 2,153, 0, 0, 0, 1, 0, 0, 0,240,143,163, 2,192,141,163, 2, 67,111,108,111,114,115, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84,101,120,116,117,114,101, 0, 0, 0, 0, 0,
+ 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228,
+ 13, 64, 17, 32, 0, 0, 0,163, 0, 0, 0, 1, 13, 64, 18, 48, 13, 64, 16, 16, 65,110,105,109, 32,115,101,116,116,105,110,103,
+115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 98,106,101, 99,116, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 1, 0, 0, 62, 1,204, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192,141,163, 2, 68, 65, 84, 65,228, 0, 0, 0,240,143,163, 2,153, 0, 0, 0,
- 1, 0, 0, 0, 8,145,163, 2,216,142,163, 2, 79, 98,106,101, 99,116, 32, 97,110,100, 32, 76,105,110,107,115, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 70, 0, 0, 1, 62, 0,204, 0, 0, 0, 0,
+ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228, 13, 64, 18, 48, 0, 0, 0,163,
+ 0, 0, 0, 1, 13, 64, 19, 64, 13, 64, 17, 32, 68,114, 97,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 98,106,101, 99,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 1,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,228, 0, 0, 0, 8,145,163, 2,153, 0, 0, 0, 1, 0, 0, 0, 32,146,163, 2,
-240,143,163, 2, 65,110,105,109, 32,115,101,116,116,105,110,103,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,140, 0, 0, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228, 13, 64, 19, 64, 0, 0, 0,163, 0, 0, 0, 1, 13, 64, 20, 80,
+ 13, 64, 18, 48, 67,111,110,115,116,114, 97,105,110,116,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 79, 98,106,101, 99,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 70, 1, 0, 0, 62, 1,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65,228, 0, 0, 0, 32,146,163, 2,153, 0, 0, 0, 1, 0, 0, 0, 56,147,163, 2, 8,145,163, 2, 68,114, 97,119,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 98,106,101,
- 99,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 3,210, 0, 0, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 0, 0, 0,228, 13, 64, 20, 80, 0, 0, 0,163, 0, 0, 0, 1, 13, 64, 21, 96, 13, 64, 19, 64, 67,108,111,117,
+100,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84,101,120,116,
+117,114,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,140, 2, 0, 0,
- 62, 1,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,228, 0, 0, 0,
- 56,147,163, 2,153, 0, 0, 0, 1, 0, 0, 0, 80,148,163, 2, 32,146,163, 2, 67,111,110,115,116,114, 97,105,110,116,115, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,140, 0, 0,
+ 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228,
+ 13, 64, 21, 96, 0, 0, 0,163, 0, 0, 0, 1, 13, 64, 22,112, 13, 64, 20, 80, 83,116,117, 99, 99,105, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 98,106,101, 99,116, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84,101,120,116,117,114,101, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,210, 3, 0, 0, 62, 1,204, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,228, 0, 0, 0, 80,148,163, 2,153, 0, 0, 0,
- 1, 0, 0, 0,104,149,163, 2, 56,147,163, 2, 67,108,111,117,100,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,140, 0, 0, 1, 62, 0,204, 0, 0, 0, 0,
+ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228, 13, 64, 22,112, 0, 0, 0,163,
+ 0, 0, 0, 1, 13, 64, 23,128, 13, 64, 21, 96, 87,111,111,100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84,101,120,116,117,114,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,140, 2, 0, 0, 62, 1,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,228, 0, 0, 0,104,149,163, 2,153, 0, 0, 0, 1, 0, 0, 0,128,150,163, 2,
- 80,148,163, 2, 83,116,117, 99, 99,105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,140, 0, 0, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228, 13, 64, 23,128, 0, 0, 0,163, 0, 0, 0, 1, 0, 0, 0, 0,
+ 13, 64, 22,112, 82,101,110,100,101,114, 32, 76, 97,121,101,114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 84,101,120,116,117,114,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 82,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,140, 2, 0, 0, 62, 1,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65,228, 0, 0, 0,128,150,163, 2,153, 0, 0, 0, 1, 0, 0, 0,152,151,163, 2,104,149,163, 2, 87,111,111,100,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 31,236,240,
+ 68, 65, 84, 65, 0, 0, 0,204, 13, 64, 24,144, 0, 0, 0,164, 0, 0, 0, 1, 13, 64, 96, 96, 7, 31,235,240, 7, 31,231,112,
+ 7, 31,231,176, 7, 31,231, 48, 7, 31,230,176, 0, 0, 0, 0, 63,140, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 65, 45, 68,171, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,191,128, 1, 80,191,128, 0, 0,
+128, 0, 0, 0,128, 0, 0, 0,188,163,215,226,128, 0, 0, 0, 0, 0, 3, 33, 0, 0, 3,232, 0, 0, 0, 0, 0, 0, 3, 5,
+ 0, 0, 3, 33, 0, 0, 3,232, 0, 0, 2,235, 0, 0, 3, 5, 0, 0, 3, 33, 0, 0, 3,232, 0, 0, 0, 0, 0, 0, 2,234,
+ 0, 7, 0, 6, 0, 2, 4, 4, 0,200, 2,235, 1, 0, 1, 0, 1, 76, 0, 4, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 13, 64, 86, 32, 13, 64, 94,112, 7, 27,181,240, 7, 27,222,144, 13, 64, 25,144, 13, 64, 85, 16,
+ 68, 65, 84, 65, 0, 0, 0,228, 13, 64, 25,144, 0, 0, 0,163, 0, 0, 0, 1, 13, 64, 26,160, 0, 0, 0, 0, 84,114, 97,110,
+115,102,111,114,109, 32, 80,114,111,112,101,114,116,105,101,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73,112,111, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84,101,120,116,
-117,114,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,140, 2, 0, 0,
- 62, 1,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,228, 0, 0, 0,
-152,151,163, 2,153, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,128,150,163, 2, 82,101,110,100,101,114, 32, 76, 97,121,101,114,
-115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 0,167,
+ 1, 62, 0,204, 0, 0, 0, 0, 0,162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228,
+ 13, 64, 26,160, 0, 0, 0,163, 0, 0, 0, 1, 13, 64, 27,176, 13, 64, 25,144, 79,117,116,112,117,116, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82,101,110,100,101,114, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 1,204, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 17,146, 2, 68, 65, 84, 65,204, 0, 0, 0,104,250,126, 2,154, 0, 0, 0,
- 1, 0, 0, 0, 24,120,126, 2,248, 3,130, 2,144,108,163, 2,216,108,163, 2, 72,108,163, 2,184,107,163, 2, 0, 0, 0, 0,
- 0, 0,140, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,171, 68, 45, 65, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 80, 1,128,191, 0, 0,128,191, 0, 0, 0,128, 0, 0, 0,128,226,215,163,188, 0, 0, 0,128,
-253, 5, 0, 0,128, 7, 0, 0, 0, 0, 0, 0,123, 4, 0, 0,253, 5, 0, 0,128, 7, 0, 0, 97, 4, 0, 0,123, 4, 0, 0,
-253, 5, 0, 0,128, 7, 0, 0, 0, 0, 0, 0, 96, 4, 0, 0, 7, 0, 6, 0, 2, 0, 4, 4,132, 1, 97, 4, 1, 0, 1, 0,
-173, 1, 4, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,120,208,163, 2,192,158,126, 2,
- 24,124,127, 2, 64,245,126, 2,176,152,163, 2,112, 59, 8, 3, 68, 65, 84, 65,228, 0, 0, 0,176,152,163, 2,153, 0, 0, 0,
- 1, 0, 0, 0,200,153,163, 2, 0, 0, 0, 0, 84,114, 97,110,115,102,111,114,109, 32, 80,114,111,112,101,114,116,105,101,115,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 62, 0,204, 0, 0, 0, 0,
+ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 64, 59,144, 68, 65, 84, 65, 0, 0, 0,228, 13, 64, 27,176, 0, 0, 0,163,
+ 0, 0, 0, 1, 13, 64, 28,192, 13, 64, 26,160, 82,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73,112,111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 0,167, 0, 62, 1,204, 0, 0, 0, 0, 0,162, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,228, 0, 0, 0,200,153,163, 2,153, 0, 0, 0, 1, 0, 0, 0,224,154,163, 2,
-176,152,163, 2, 79,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 24, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228, 13, 64, 28,192, 0, 0, 0,163, 0, 0, 0, 1, 13, 64, 29,208,
+ 13, 64, 27,176, 65,110,105,109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 82,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 62, 1,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0,176,187,163, 2,
- 68, 65, 84, 65,228, 0, 0, 0,224,154,163, 2,153, 0, 0, 0, 1, 0, 0, 0,248,155,163, 2,200,153,163, 2, 82,101,110,100,
-101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,254, 48, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 0, 0, 0,228, 13, 64, 29,208, 0, 0, 0,163, 0, 0, 0, 1, 13, 64, 30,224, 13, 64, 28,192, 70,111,114,109,
+ 97,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82,101,110,100,
101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24,255,
- 62, 1,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,228, 0, 0, 0,
-248,155,163, 2,153, 0, 0, 0, 1, 0, 0, 0, 16,157,163, 2,224,154,163, 2, 65,110,105,109, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82,101,110,100,101,114, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,253, 72,
+ 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228,
+ 13, 64, 30,224, 0, 0, 0,163, 0, 0, 0, 1, 13, 64, 31,240, 13, 64, 29,208, 76,105,110,107, 32, 97,110,100, 32, 77, 97,116,
+101,114,105, 97,108,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69,100,105,116,105,110,103, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48,254, 62, 1,204, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,228, 0, 0, 0, 16,157,163, 2,153, 0, 0, 0,
- 1, 0, 0, 0, 40,158,163, 2,248,155,163, 2, 70,111,114,109, 97,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 62, 0,204, 0, 0, 0, 1,
+ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228, 13, 64, 31,240, 0, 0, 0,163,
+ 0, 0, 0, 1, 13, 64, 33, 0, 13, 64, 30,224, 67, 97,109,101,114, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69,100,105,116,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72,253, 62, 1,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 8, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,228, 0, 0, 0, 40,158,163, 2,153, 0, 0, 0, 1, 0, 0, 0, 64,159,163, 2,
- 16,157,163, 2, 76,105,110,107, 32, 97,110,100, 32, 77, 97,116,101,114,105, 97,108,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 24, 1, 62, 0,204, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 4, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228, 13, 64, 33, 0, 0, 0, 0,163, 0, 0, 0, 1, 13, 64, 34, 16,
+ 13, 64, 31,240, 80,114,101,118,105,101,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 69,100,105,116,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 76, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 62, 1,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65,228, 0, 0, 0, 64,159,163, 2,153, 0, 0, 0, 1, 0, 0, 0, 88,160,163, 2, 40,158,163, 2, 67, 97,109,101,
-114, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69,100,105,116,
-105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 0, 0, 0,228, 13, 64, 34, 16, 0, 0, 0,163, 0, 0, 0, 1, 13, 64, 35, 32, 13, 64, 33, 0, 76, 97,109,112,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 97,109,112,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 62, 1,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,228, 0, 0, 0,
- 88,160,163, 2,153, 0, 0, 0, 1, 0, 0, 0,112,161,163, 2, 64,159,163, 2, 80,114,101,118,105,101,119, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 24,
+ 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228,
+ 13, 64, 35, 32, 0, 0, 0,163, 0, 0, 0, 1, 13, 64, 36, 48, 13, 64, 34, 16, 83,104, 97,100,111,119, 32, 97,110,100, 32, 83,
+112,111,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 1,204, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,228, 0, 0, 0,112,161,163, 2,153, 0, 0, 0,
- 1, 0, 0, 0,136,162,163, 2, 88,160,163, 2, 76, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,254, 28, 1, 62, 0,224, 0, 0, 0, 0,
+ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 64, 85, 16, 68, 65, 84, 65, 0, 0, 0,228, 13, 64, 36, 48, 0, 0, 0,163,
+ 0, 0, 0, 1, 13, 64, 37, 64, 13, 64, 35, 32, 84,101,120,116,117,114,101, 32, 97,110,100, 32, 73,110,112,117,116, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24,255, 62, 1,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,228, 0, 0, 0,136,162,163, 2,153, 0, 0, 0, 1, 0, 0, 0,160,163,163, 2,
-112,161,163, 2, 83,104, 97,100,111,119, 32, 97,110,100, 32, 83,112,111,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,253, 72, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228, 13, 64, 37, 64, 0, 0, 0,163, 0, 0, 0, 1, 13, 64, 38, 80,
+ 13, 64, 36, 48, 77, 97,112, 32, 84,111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 76, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 48,254, 62, 1,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65,228, 0, 0, 0,160,163,163, 2,153, 0, 0, 0, 1, 0, 0, 0,184,164,163, 2,136,162,163, 2, 84,101,120,116,
-117,114,101, 32, 97,110,100, 32, 73,110,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 97,109,112,
+ 0, 0, 0, 0, 0, 0,253, 72, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 64, 36, 48,
+ 68, 65, 84, 65, 0, 0, 0,228, 13, 64, 38, 80, 0, 0, 0,163, 0, 0, 0, 1, 13, 64, 39, 96, 13, 64, 37, 64, 77,101,115,104,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69,100,105,116,
+105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72,253,
- 62, 1,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,228, 0, 0, 0,
-184,164,163, 2,153, 0, 0, 0, 1, 0, 0, 0,208,165,163, 2,160,163,163, 2, 77, 97,112, 32, 84,111, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 24,
+ 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228,
+ 13, 64, 39, 96, 0, 0, 0,163, 0, 0, 0, 1, 13, 64, 40,112, 13, 64, 38, 80, 77,111,100,105,102,105,101,114,115, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69,100,105,116,105,110,103, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72,253, 62, 1,204, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160,163,163, 2, 68, 65, 84, 65,228, 0, 0, 0,208,165,163, 2,153, 0, 0, 0,
- 1, 0, 0, 0,232,166,163, 2,184,164,163, 2, 77,101,115,104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,253, 72, 1, 62, 0,204, 0, 0, 0, 0,
+ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228, 13, 64, 40,112, 0, 0, 0,163,
+ 0, 0, 0, 1, 13, 64, 41,128, 13, 64, 39, 96, 83,104, 97,112,101,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69,100,105,116,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24,255, 62, 1,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,228, 0, 0, 0,232,166,163, 2,153, 0, 0, 0, 1, 0, 0, 0, 0,168,163, 2,
-208,165,163, 2, 77,111,100,105,102,105,101,114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,253, 72, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 13, 64, 39, 96, 68, 65, 84, 65, 0, 0, 0,228, 13, 64, 41,128, 0, 0, 0,163, 0, 0, 0, 1, 13, 64, 42,144,
+ 13, 64, 40,112, 77,101,115,104, 32, 84,111,111,108,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 69,100,105,116,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 72,253, 62, 1,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65,228, 0, 0, 0, 0,168,163, 2,153, 0, 0, 0, 1, 0, 0, 0, 24,169,163, 2,232,166,163, 2, 83,104, 97,112,
-101,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,253, 72, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 0, 0, 0,228, 13, 64, 42,144, 0, 0, 0,163, 0, 0, 0, 1, 13, 64, 43,160, 13, 64, 41,128, 77,101,115,104,
+ 32, 84,111,111,108,115, 32, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69,100,105,116,
105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72,253,
- 62, 1,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232,166,163, 2, 68, 65, 84, 65,228, 0, 0, 0,
- 24,169,163, 2,153, 0, 0, 0, 1, 0, 0, 0, 48,170,163, 2, 0,168,163, 2, 77,101,115,104, 32, 84,111,111,108,115, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,252, 96,
+ 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228,
+ 13, 64, 43,160, 0, 0, 0,163, 0, 0, 0, 1, 13, 64, 44,176, 13, 64, 42,144, 84,101,120,116,117,114,101, 32,102, 97, 99,101,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69,100,105,116,105,110,103, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72,253, 62, 1,204, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,228, 0, 0, 0, 48,170,163, 2,153, 0, 0, 0,
- 1, 0, 0, 0, 72,171,163, 2, 24,169,163, 2, 77,101,115,104, 32, 84,111,111,108,115, 32, 49, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 62, 0,204, 0, 0, 0, 0,
+ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 64, 44,176, 68, 65, 84, 65, 0, 0, 0,228, 13, 64, 44,176, 0, 0, 0,163,
+ 0, 0, 0, 1, 13, 64, 45,192, 13, 64, 43,160, 85, 86, 32, 67, 97,108, 99,117,108, 97,116,105,111,110, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69,100,105,116,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96,252, 62, 1,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,228, 0, 0, 0, 72,171,163, 2,153, 0, 0, 0, 1, 0, 0, 0, 96,172,163, 2,
- 48,170,163, 2, 84,101,120,116,117,114,101, 32,102, 97, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228, 13, 64, 45,192, 0, 0, 0,163, 0, 0, 0, 1, 13, 64, 46,208,
+ 13, 64, 44,176, 80, 97,105,110,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 69,100,105,116,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 62, 1,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96,172,163, 2,
- 68, 65, 84, 65,228, 0, 0, 0, 96,172,163, 2,153, 0, 0, 0, 1, 0, 0, 0,120,173,163, 2, 72,171,163, 2, 85, 86, 32, 67,
- 97,108, 99,117,108, 97,116,105,111,110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,254, 48, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 0, 0, 0,228, 13, 64, 46,208, 0, 0, 0,163, 0, 0, 0, 1, 13, 64, 47,224, 13, 64, 45,192, 67,117,114,118,
+101, 32, 97,110,100, 32, 83,117,114,102, 97, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69,100,105,116,
105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 62, 1,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,228, 0, 0, 0,
-120,173,163, 2,153, 0, 0, 0, 1, 0, 0, 0,144,174,163, 2, 96,172,163, 2, 80, 97,105,110,116, 0, 0, 0, 0, 0, 0, 0,
+ 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228,
+ 13, 64, 47,224, 0, 0, 0,163, 0, 0, 0, 1, 13, 64, 48,240, 13, 64, 46,208, 67,117,114,118,101, 32, 84,111,111,108,115, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69,100,105,116,105,110,103, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48,254, 62, 1,204, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,228, 0, 0, 0,144,174,163, 2,153, 0, 0, 0,
- 1, 0, 0, 0,168,175,163, 2,120,173,163, 2, 67,117,114,118,101, 32, 97,110,100, 32, 83,117,114,102, 97, 99,101, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 24, 1, 62, 0,204, 0, 0, 0, 0,
+ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228, 13, 64, 48,240, 0, 0, 0,163,
+ 0, 0, 0, 1, 13, 64, 50, 0, 13, 64, 47,224, 67,117,114,118,101, 32, 84,111,111,108,115, 49, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69,100,105,116,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 1,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,228, 0, 0, 0,168,175,163, 2,153, 0, 0, 0, 1, 0, 0, 0,192,176,163, 2,
-144,174,163, 2, 67,117,114,118,101, 32, 84,111,111,108,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,253, 72, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228, 13, 64, 50, 0, 0, 0, 0,163, 0, 0, 0, 1, 13, 64, 51, 16,
+ 13, 64, 48,240, 80,114,101,118,105,101,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 69,100,105,116,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 77, 97,116,101,114,105, 97,108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 24,255, 62, 1,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65,228, 0, 0, 0,192,176,163, 2,153, 0, 0, 0, 1, 0, 0, 0,216,177,163, 2,168,175,163, 2, 67,117,114,118,
-101, 32, 84,111,111,108,115, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69,100,105,116,
-105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 0, 0, 0,228, 13, 64, 51, 16, 0, 0, 0,163, 0, 0, 0, 1, 13, 64, 52, 32, 13, 64, 50, 0, 76,105,110,107,
+115, 32, 97,110,100, 32, 80,105,112,101,108,105,110,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 97,116,101,
+114,105, 97,108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72,253,
- 62, 1,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,228, 0, 0, 0,
-216,177,163, 2,153, 0, 0, 0, 1, 0, 0, 0,240,178,163, 2,192,176,163, 2, 80,114,101,118,105,101,119, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 24,
+ 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228,
+ 13, 64, 52, 32, 0, 0, 0,163, 0, 0, 0, 1, 13, 64, 53, 48, 13, 64, 51, 16, 77, 97,116,101,114,105, 97,108, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 97,116,101,114,105, 97,108, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 1,204, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,228, 0, 0, 0,240,178,163, 2,153, 0, 0, 0,
- 1, 0, 0, 0, 8,180,163, 2,216,177,163, 2, 76,105,110,107,115, 32, 97,110,100, 32, 80,105,112,101,108,105,110,101, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,254, 48, 1, 62, 0,204, 0, 0, 0, 0,
+ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228, 13, 64, 53, 48, 0, 0, 0,163,
+ 0, 0, 0, 1, 13, 64, 54, 64, 13, 64, 52, 32, 82, 97,109,112,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 97,116,101,114,105, 97,108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24,255, 62, 1,204, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 21, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,228, 0, 0, 0, 8,180,163, 2,153, 0, 0, 0, 1, 0, 0, 0, 32,181,163, 2,
-240,178,163, 2, 77, 97,116,101,114,105, 97,108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,254, 48, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 13, 64, 52, 32, 68, 65, 84, 65, 0, 0, 0,228, 13, 64, 54, 64, 0, 0, 0,163, 0, 0, 0, 1, 13, 64, 55, 80,
+ 13, 64, 53, 48, 83,104, 97,100,101,114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 77, 97,116,101,114,105, 97,108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 48,254, 62, 1,204, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65,228, 0, 0, 0, 32,181,163, 2,153, 0, 0, 0, 1, 0, 0, 0, 56,182,163, 2, 8,180,163, 2, 82, 97,109,112,
-115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,253, 52, 1, 62, 0,224, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 64, 55, 80,
+ 68, 65, 84, 65, 0, 0, 0,228, 13, 64, 55, 80, 0, 0, 0,163, 0, 0, 0, 1, 13, 64, 56, 96, 13, 64, 54, 64, 77,105,114,114,
+111,114, 32, 84,114, 97,110,115,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 97,116,101,
114,105, 97,108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48,254,
- 62, 1,204, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, 8,180,163, 2, 68, 65, 84, 65,228, 0, 0, 0,
- 56,182,163, 2,153, 0, 0, 0, 1, 0, 0, 0, 80,183,163, 2, 32,181,163, 2, 83,104, 97,100,101,114,115, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,252,248,
+ 1, 62, 1, 28, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228,
+ 13, 64, 56, 96, 0, 0, 0,163, 0, 0, 0, 1, 13, 64, 57,112, 13, 64, 55, 80, 84,101,120,116,117,114,101, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 97,116,101,114,105, 97,108, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52,253, 62, 1,224, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, 80,183,163, 2, 68, 65, 84, 65,228, 0, 0, 0, 80,183,163, 2,153, 0, 0, 0,
- 1, 0, 0, 0,104,184,163, 2, 56,182,163, 2, 77,105,114,114,111,114, 32, 84,114, 97,110,115,112, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,252, 16, 1, 62, 0,204, 0, 0, 0, 0,
+ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 64, 57,112, 68, 65, 84, 65, 0, 0, 0,228, 13, 64, 57,112, 0, 0, 0,163,
+ 0, 0, 0, 1, 13, 64, 58,128, 13, 64, 56, 96, 77, 97,112, 32, 73,110,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 97,116,101,114,105, 97,108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248,252, 62, 1, 28, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 21, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,228, 0, 0, 0,104,184,163, 2,153, 0, 0, 0, 1, 0, 0, 0,128,185,163, 2,
- 80,183,163, 2, 84,101,120,116,117,114,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,252, 16, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228, 13, 64, 58,128, 0, 0, 0,163, 0, 0, 0, 1, 13, 64, 59,144,
+ 13, 64, 57,112, 77, 97,112, 32, 84,111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 77, 97,116,101,114,105, 97,108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 16,252, 62, 1,204, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0,128,185,163, 2,
- 68, 65, 84, 65,228, 0, 0, 0,128,185,163, 2,153, 0, 0, 0, 1, 0, 0, 0,152,186,163, 2,104,184,163, 2, 77, 97,112, 32,
- 73,110,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 97,116,101,
-114,105, 97,108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,252, 16, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 64, 57,112,
+ 68, 65, 84, 65, 0, 0, 0,228, 13, 64, 59,144, 0, 0, 0,163, 0, 0, 0, 1, 13, 64, 60,160, 13, 64, 58,128, 82,101,110,100,
+101,114, 32, 76, 97,121,101,114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82,101,110,100,
+101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16,252,
- 62, 1,204, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,228, 0, 0, 0,
-152,186,163, 2,153, 0, 0, 0, 1, 0, 0, 0,176,187,163, 2,128,185,163, 2, 77, 97,112, 32, 84,111, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 97,116,101,114,105, 97,108, 0, 0, 0, 0,
+ 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228,
+ 13, 64, 60,160, 0, 0, 0,163, 0, 0, 0, 1, 13, 64, 61,176, 13, 64, 59,144, 80,114,101,118,105,101,119, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87,111,114,108,100, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16,252, 62, 1,204, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0,128,185,163, 2, 68, 65, 84, 65,228, 0, 0, 0,176,187,163, 2,153, 0, 0, 0,
- 1, 0, 0, 0,200,188,163, 2,152,186,163, 2, 82,101,110,100,101,114, 32, 76, 97,121,101,114,115, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,254, 48, 1, 62, 0,204, 0, 0, 0, 0,
+ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228, 13, 64, 61,176, 0, 0, 0,163,
+ 0, 0, 0, 1, 13, 64, 62,192, 13, 64, 60,160, 87,111,114,108,100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87,111,114,108,100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 1,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 8, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,228, 0, 0, 0,200,188,163, 2,153, 0, 0, 0, 1, 0, 0, 0,224,189,163, 2,
-176,187,163, 2, 80,114,101,118,105,101,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,253, 72, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228, 13, 64, 62,192, 0, 0, 0,163, 0, 0, 0, 1, 13, 64, 63,208,
+ 13, 64, 61,176, 77,105,115,116, 32, 47, 32, 83,116, 97,114,115, 32, 47, 32, 80,104,121,115,105, 99,115, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 87,111,114,108,100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 48,254, 62, 1,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65,228, 0, 0, 0,224,189,163, 2,153, 0, 0, 0, 1, 0, 0, 0,248,190,163, 2,200,188,163, 2, 87,111,114,108,
-100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 0, 0, 0,228, 13, 64, 63,208, 0, 0, 0,163, 0, 0, 0, 1, 13, 64, 64,224, 13, 64, 62,192, 65,109, 98, 32,
+ 79, 99, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87,111,114,108,
100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72,253,
- 62, 1,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,228, 0, 0, 0,
-248,190,163, 2,153, 0, 0, 0, 1, 0, 0, 0, 16,192,163, 2,224,189,163, 2, 77,105,115,116, 32, 47, 32, 83,116, 97,114,115,
- 32, 47, 32, 80,104,121,115,105, 99,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 64, 62,192, 68, 65, 84, 65, 0, 0, 0,228,
+ 13, 64, 64,224, 0, 0, 0,163, 0, 0, 0, 1, 13, 64, 65,240, 13, 64, 63,208, 84,101,120,116,117,114,101, 32, 97,110,100, 32,
+ 73,110,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87,111,114,108,100, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 1,204, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,228, 0, 0, 0, 16,192,163, 2,153, 0, 0, 0,
- 1, 0, 0, 0, 40,193,163, 2,248,190,163, 2, 65,109, 98, 32, 79, 99, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 24, 1, 62, 0,204, 0, 0, 0, 0,
+ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228, 13, 64, 65,240, 0, 0, 0,163,
+ 0, 0, 0, 1, 13, 64, 67, 0, 13, 64, 64,224, 77, 97,112, 32, 84,111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87,111,114,108,100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 1,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,248,190,163, 2, 68, 65, 84, 65,228, 0, 0, 0, 40,193,163, 2,153, 0, 0, 0, 1, 0, 0, 0, 64,194,163, 2,
- 16,192,163, 2, 84,101,120,116,117,114,101, 32, 97,110,100, 32, 73,110,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 24, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 13, 64, 64,224, 68, 65, 84, 65, 0, 0, 0,228, 13, 64, 67, 0, 0, 0, 0,163, 0, 0, 0, 1, 13, 64, 68, 16,
+ 13, 64, 65,240, 77,117,108,116,105,114,101,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 87,111,114,108,100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 69,100,105,116,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 24,255, 62, 1,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65,228, 0, 0, 0, 64,194,163, 2,153, 0, 0, 0, 1, 0, 0, 0, 88,195,163, 2, 40,193,163, 2, 77, 97,112, 32,
- 84,111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87,111,114,108,
-100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,254, 48, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 0, 0, 0,228, 13, 64, 68, 16, 0, 0, 0,163, 0, 0, 0, 1, 13, 64, 69, 32, 13, 64, 67, 0, 79, 98,106,101,
+ 99,116, 32, 97,110,100, 32, 76,105,110,107,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 98,106,101,
+ 99,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24,255,
- 62, 1,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40,193,163, 2, 68, 65, 84, 65,228, 0, 0, 0,
- 88,195,163, 2,153, 0, 0, 0, 1, 0, 0, 0,112,196,163, 2, 64,194,163, 2, 77,117,108,116,105,114,101,115, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69,100,105,116,105,110,103, 0, 0, 0, 0, 0,
+ 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228,
+ 13, 64, 69, 32, 0, 0, 0,163, 0, 0, 0, 1, 13, 64, 70, 48, 13, 64, 68, 16, 65,110,105,109, 32,115,101,116,116,105,110,103,
+115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 98,106,101, 99,116, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48,254, 62, 1,204, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,228, 0, 0, 0,112,196,163, 2,153, 0, 0, 0,
- 1, 0, 0, 0,136,197,163, 2, 88,195,163, 2, 79, 98,106,101, 99,116, 32, 97,110,100, 32, 76,105,110,107,115, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 24, 1, 62, 0,204, 0, 0, 0, 0,
+ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228, 13, 64, 70, 48, 0, 0, 0,163,
+ 0, 0, 0, 1, 13, 64, 71, 64, 13, 64, 69, 32, 68,114, 97,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 98,106,101, 99,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 1,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,228, 0, 0, 0,136,197,163, 2,153, 0, 0, 0, 1, 0, 0, 0,160,198,163, 2,
-112,196,163, 2, 65,110,105,109, 32,115,101,116,116,105,110,103,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,254, 48, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228, 13, 64, 71, 64, 0, 0, 0,163, 0, 0, 0, 1, 13, 64, 72, 80,
+ 13, 64, 70, 48, 67,111,110,115,116,114, 97,105,110,116,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 79, 98,106,101, 99,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 24,255, 62, 1,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65,228, 0, 0, 0,160,198,163, 2,153, 0, 0, 0, 1, 0, 0, 0,184,199,163, 2,136,197,163, 2, 68,114, 97,119,
+ 0, 0, 0, 0, 0, 0,253, 72, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 0, 0, 0,228, 13, 64, 72, 80, 0, 0, 0,163, 0, 0, 0, 1, 13, 64, 73, 96, 13, 64, 71, 64, 66, 97,107,101,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 98,106,101,
- 99,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82,101,110,100,
+101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48,254,
- 62, 1,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,228, 0, 0, 0,
-184,199,163, 2,153, 0, 0, 0, 1, 0, 0, 0,208,200,163, 2,160,198,163, 2, 67,111,110,115,116,114, 97,105,110,116,115, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,254, 48,
+ 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 64, 28,192, 68, 65, 84, 65, 0, 0, 0,228,
+ 13, 64, 73, 96, 0, 0, 0,163, 0, 0, 0, 1, 13, 64, 74,112, 13, 64, 72, 80, 83,116, 97,109,112, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 98,106,101, 99,116, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82,101,110,100,101,114, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72,253, 62, 1,204, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,228, 0, 0, 0,208,200,163, 2,153, 0, 0, 0,
- 1, 0, 0, 0,232,201,163, 2,184,199,163, 2, 66, 97,107,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,253, 72, 1, 62, 0,204, 0, 0, 0, 0,
+ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 64, 29,208, 68, 65, 84, 65, 0, 0, 0,228, 13, 64, 74,112, 0, 0, 0,163,
+ 0, 0, 0, 1, 13, 64, 75,128, 13, 64, 73, 96, 80, 97,114,116,105, 99,108,101, 32, 83,121,115,116,101,109, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 97,114,116,105, 99,108,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48,254, 62, 1,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 8, 0, 0, 0,248,155,163, 2, 68, 65, 84, 65,228, 0, 0, 0,232,201,163, 2,153, 0, 0, 0, 1, 0, 0, 0, 0,203,163, 2,
-208,200,163, 2, 83,116, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228, 13, 64, 75,128, 0, 0, 0,163, 0, 0, 0, 1, 13, 64, 76,144,
+ 13, 64, 74,112, 80,104,121,115,105, 99,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 82,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 80, 97,114,116,105, 99,108,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 72,253, 62, 1,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 16,157,163, 2,
- 68, 65, 84, 65,228, 0, 0, 0, 0,203,163, 2,153, 0, 0, 0, 1, 0, 0, 0, 24,204,163, 2,232,201,163, 2, 80, 97,114,116,
-105, 99,108,101, 32, 83,121,115,116,101,109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,255, 24, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 0, 0, 0,228, 13, 64, 76,144, 0, 0, 0,163, 0, 0, 0, 1, 13, 64, 77,160, 13, 64, 75,128, 86,105,115,117,
+ 97,108,105,122, 97,116,105,111,110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 97,114,116,
105, 99,108,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 62, 1,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,228, 0, 0, 0,
- 24,204,163, 2,153, 0, 0, 0, 1, 0, 0, 0, 48,205,163, 2, 0,203,163, 2, 80,104,121,115,105, 99,115, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,254, 48,
+ 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228,
+ 13, 64, 77,160, 0, 0, 0,163, 0, 0, 0, 1, 13, 64, 78,176, 13, 64, 76,144, 69,120,116,114, 97,115, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 97,114,116,105, 99,108,101, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24,255, 62, 1,204, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,228, 0, 0, 0, 48,205,163, 2,153, 0, 0, 0,
- 1, 0, 0, 0, 72,206,163, 2, 24,204,163, 2, 86,105,115,117, 97,108,105,122, 97,116,105,111,110, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,253, 72, 1, 62, 0,204, 0, 0, 0, 0,
+ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228, 13, 64, 78,176, 0, 0, 0,163,
+ 0, 0, 0, 1, 13, 64, 79,192, 13, 64, 77,160, 67,104,105,108,100,114,101,110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 97,114,116,105, 99,108,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48,254, 62, 1,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,228, 0, 0, 0, 72,206,163, 2,153, 0, 0, 0, 1, 0, 0, 0, 96,207,163, 2,
- 48,205,163, 2, 69,120,116,114, 97,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,253, 72, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 13, 64, 77,160, 68, 65, 84, 65, 0, 0, 0,228, 13, 64, 79,192, 0, 0, 0,163, 0, 0, 0, 1, 13, 64, 80,208,
+ 13, 64, 78,176, 80,114,101,118,105,101,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 80, 97,114,116,105, 99,108,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 84,101,120,116,117,114,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 72,253, 62, 1,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65,228, 0, 0, 0, 96,207,163, 2,153, 0, 0, 0, 1, 0, 0, 0,208,244,161, 2, 72,206,163, 2, 67,104,105,108,
-100,114,101,110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 97,114,116,
-105, 99,108,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,254, 48, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 0, 0, 0,228, 13, 64, 80,208, 0, 0, 0,163, 0, 0, 0, 1, 13, 64, 81,224, 13, 64, 79,192, 84,101,120,116,
+117,114,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84,101,120,116,
+117,114,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72,253,
- 62, 1,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72,206,163, 2, 68, 65, 84, 65,228, 0, 0, 0,
-208,244,161, 2,153, 0, 0, 0, 1, 0, 0, 0,136,110,155, 2, 96,207,163, 2, 80,114,101,118,105,101,119, 0, 0, 0, 0, 0,
+ 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228,
+ 13, 64, 81,224, 0, 0, 0,163, 0, 0, 0, 1, 13, 64, 82,240, 13, 64, 80,208, 67,111,108,111,114,115, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84,101,120,116,117,114,101, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48,254, 62, 1,204, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,228, 0, 0, 0,136,110,155, 2,153, 0, 0, 0,
- 1, 0, 0, 0,112,109,155, 2,208,244,161, 2, 84,101,120,116,117,114,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 62, 0,204, 0, 0, 0, 0,
+ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 64, 80,208, 68, 65, 84, 65, 0, 0, 0,228, 13, 64, 82,240, 0, 0, 0,163,
+ 0, 0, 0, 1, 13, 64, 84, 0, 13, 64, 81,224, 87,111,111,100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84,101,120,116,117,114,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 1,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 13, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,228, 0, 0, 0,112,109,155, 2,153, 0, 0, 0, 1, 0, 0, 0,232,245,161, 2,
-136,110,155, 2, 67,111,108,111,114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 24, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228, 13, 64, 84, 0, 0, 0, 0,163, 0, 0, 0, 1, 13, 64, 85, 16,
+ 13, 64, 82,240, 83, 83, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 84,101,120,116,117,114,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 77, 97,116,101,114,105, 97,108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 62, 1,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0,136,110,155, 2,
- 68, 65, 84, 65,228, 0, 0, 0,232,245,161, 2,153, 0, 0, 0, 1, 0, 0, 0,112, 59, 8, 3,112,109,155, 2, 87,111,111,100,
+ 0, 0, 0, 0, 0, 0,253, 72, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 64, 55, 80,
+ 68, 65, 84, 65, 0, 0, 0,228, 13, 64, 85, 16, 0, 0, 0,163, 0, 0, 0, 1, 0, 0, 0, 0, 13, 64, 84, 0, 83,107,121, 47,
+ 65,116,109,111,115,112,104,101,114,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 97,109,112,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84,101,120,116,
-117,114,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24,255,
- 62, 1,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,228, 0, 0, 0,
-112, 59, 8, 3,153, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,232,245,161, 2, 83, 83, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,254, 48,
+ 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,220,
+ 13, 64, 86, 32, 0, 0, 0,142, 0, 0, 0, 1, 7,159,132, 32, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 13, 64, 24,144,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0,193, 0, 0, 0,
+ 67,163, 0, 0,196, 48, 0, 0, 67,104, 0, 0,193, 0, 0, 0, 67,163, 0, 0,196,125,223, 92, 67,104, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67,128, 0, 0, 66, 40, 0, 0, 69, 0, 0, 0, 67,225, 0, 0, 63, 0, 0, 0,
+ 63,154,225, 72, 0, 0, 0, 1, 0, 1, 0, 1, 0,200, 2,235, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 4, 0, 1, 0, 0, 0, 4, 13, 64,160, 96,255,255, 0, 0, 0, 0, 0, 0, 1,150, 0, 0, 0, 0, 0, 0,
+ 0, 0, 2, 0, 3, 0, 0, 0, 68, 65, 84, 65, 0, 0, 3, 4, 7,159,132, 32, 0, 0, 0,137, 0, 0, 0, 1, 13, 64, 87, 48,
+ 13, 64, 86, 32, 0, 0, 0, 1, 63, 51, 51, 51, 13, 64, 24,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 63,127,198, 52,188,166, 29,146, 61, 22,153, 97, 0, 0, 0, 0, 61, 43,252, 13, 62,247, 11, 89,191, 95,248, 90, 0, 0, 0, 0,
+ 52, 67,176,196, 63, 96, 42,246, 62,247, 67, 44, 0, 0, 0, 0, 64, 78, 45, 74, 62,172, 87,201,194, 41,171, 79, 63,128, 0, 0,
+ 63,127,198, 53, 61, 43,251,248, 52, 80, 0, 0, 0, 0, 0, 0,188,166, 29,186, 62,247, 11,119, 63, 96, 43, 16, 0, 0, 0, 0,
+ 61, 22,153, 99,191, 95,248,117, 62,247, 67, 75, 0, 0, 0, 0,191,211,125,192,194, 21,161,185, 65,161,133, 59, 63,128, 0, 0,
+ 63,139,224,100,190, 96,221, 21,189, 22,154,236,189, 22,153, 97, 61, 60, 27,174, 64,167, 52,239, 63, 95,250,166, 63, 95,248, 90,
+ 52, 86, 9, 86, 65, 23,185, 41,190,247, 69,181,190,247, 67, 44, 64, 97,129,137, 64,105, 75, 27, 66, 41,152,145, 66, 41,171, 79,
+ 63,105,225, 95, 61, 39,247, 84,186,185, 46,176,184,146,196,144,186,245,126,178, 61, 54,117, 48, 61,165,157, 23, 52,153,160, 0,
+ 66,165, 56,225, 68,233,202,192,196,124, 94, 18,194, 71,254, 87,194,165, 77,102,196,233,177, 39, 68,124, 65,193, 66, 72, 0,101,
+ 63,140, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 45, 68,171, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,191,128, 1, 80,191,128, 0, 0,128, 0, 0, 0,128, 0, 0, 0,188,163,215,226,128, 0, 0, 0,
+ 63,127,198, 52,188,166, 29,146, 61, 22,153, 97, 0, 0, 0, 0, 61, 43,252, 13, 62,247, 11, 89,191, 95,248, 90, 0, 0, 0, 0,
+ 52, 67,176,196, 63, 96, 42,246, 62,247, 67, 44, 0, 0, 0, 0, 64, 78, 45, 74, 62,172, 87,201,194, 41,171, 79, 63,128, 0, 0,
+ 63, 92, 99,141,191, 2, 35, 43,188, 46,238,188,188,148, 32, 94, 66, 25,240, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
+ 7,159,156, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0,
+ 0, 0, 0, 2, 0, 0, 0, 2, 0, 1, 0, 0,255,226, 0, 0, 66, 12, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 58,124, 56, 68,
+ 60, 35,215, 10, 67,250, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 68, 77,201, 64,111, 66,228,191,205, 97,230, 60,149,191,128,
+191, 77,109,116, 63,230,165,248, 0, 20, 0, 0, 0, 7, 0, 99, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,255,255, 63,128, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 24, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 0, 0, 1, 88, 13, 64, 87, 48, 0, 0, 0,141, 0, 0, 0, 1, 13, 64, 88,176, 7,159,132, 32, 0, 0, 0, 2,
+ 63, 51, 51, 51, 13, 64, 24,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 67,122, 0, 0,189,204,204,205, 63,140,204,205, 63,128, 0, 0, 67,122, 0, 0,192,160, 0, 0, 64,160, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 2,235, 0, 0, 0, 16, 0, 0, 3,168, 0, 0, 0, 0, 0, 0, 0, 16,
+ 0, 0, 0, 16, 0, 0, 3,168, 0, 0, 0, 16, 0, 0, 2,235, 60, 35,215, 10, 60, 35,215, 10, 70,106, 96, 0, 68,122, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,159,184, 32, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0,
+ 0, 0, 0, 0, 0, 0, 79, 66, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 67,122, 0, 0,189,204,204,205, 63,140,204,205, 68, 65, 84, 65, 0, 0, 0,128, 13, 64, 88,176, 0, 0, 0,148, 0, 0, 0, 1,
+ 13, 64, 89, 96, 13, 64, 87, 48, 0, 0, 0, 9, 63, 51, 51, 51, 13, 64, 24,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 13, 64,194,224, 0, 0, 0, 0, 0, 0, 0, 62, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61,204,204,205, 0, 0, 0, 5, 0, 0, 0, 17,
+ 0, 0, 2,225, 0, 0, 2,227, 0, 0, 0, 5, 0, 0, 0, 17, 0, 0, 2,207, 0, 0, 2,227, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 0, 0, 1, 8, 13, 64, 89, 96, 0, 0, 0,146, 0, 0, 0, 1, 13, 64, 90,144, 13, 64, 88,176, 0, 0, 0, 6,
+ 63, 51, 51, 51, 13, 64, 24,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67,128, 0, 0,
+ 0, 0, 0, 0, 67,128, 0, 0,190,120, 0, 0, 63,159, 0, 0,190,242, 0, 0, 63,188,128, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,124,
+ 0, 0, 0, 0, 0, 0, 1,242, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+ 0, 0, 1, 8, 13, 64, 90,144, 0, 0, 0,145, 0, 0, 0, 1, 13, 64, 91,192, 13, 64, 89, 96, 0, 0, 0, 3, 63, 51, 51, 51,
+ 13, 64, 24,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67,182, 0, 0,195,209, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 67,182, 0, 0,195,190, 0, 0,181, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0,
+ 0, 0, 1,124, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 1,124, 0, 0, 0, 0,
+ 0, 0, 1,124,195,190, 0, 0,195,190, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 1, 0, 1,
+ 0, 1, 0, 1, 1,108, 1,124, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 3,142, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,176,
+ 13, 64, 91,192, 0, 0, 0,230, 0, 0, 0, 1, 13, 64, 92,160, 13, 64, 90,144, 0, 0, 0, 11, 63, 51, 51, 51, 13, 64, 24,144,
+192,128, 0, 0, 67,122, 0, 0,192,128, 0, 0, 67,127, 0, 0,192,128, 0, 0, 66, 72, 0, 0,192,128, 0, 0, 67,127, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,124, 0, 0, 0, 0, 0, 0, 0, 16,
+ 0, 0, 0, 0, 0, 0, 1,124, 0, 0, 0, 16, 0, 0, 1,124, 63,128, 0, 0, 67,129,128, 0, 70,250, 0, 0, 67,129,128, 0,
+ 61,204,204,205, 65, 32, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+ 0, 0, 0,180, 13, 64, 92,160, 0, 0, 0,147, 0, 0, 0, 1, 13, 64, 93,128, 13, 64, 91,192, 0, 0, 0, 13, 63, 51, 51, 51,
+ 13, 64, 24,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0,
+ 68,122, 0, 0, 0, 0, 0, 0, 68,122, 0, 0,192,160, 0, 0, 66,130, 0, 0, 0, 0, 0, 0, 67,182, 0, 0, 0, 0, 1,108,
+ 0, 0, 1,124, 0, 0, 0, 0, 0, 0, 1,124, 0, 0, 0,196, 0, 0, 1,108, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0,196,
+ 0, 0, 1,108, 0, 0, 0, 16, 0, 0, 1,124, 0, 0, 0, 0, 0, 0, 0, 0, 68,122, 0, 0, 68,122, 0, 0, 61,204,204,205,
+ 66, 72, 0, 0, 0, 10, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,192, 13, 64, 93,128, 0, 0, 0,240, 0, 0, 0, 1, 13, 64, 94,112, 13, 64, 92,160,
+ 0, 0, 0, 12, 63, 51, 51, 51, 13, 64, 24,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,191, 0, 0, 0,
+ 66, 2, 0, 0,196,122, 0, 0, 0, 0, 0, 0,191, 0, 0, 0, 66, 2, 0, 0,194,150, 0, 0, 64,160, 0, 0, 0, 0, 1,108,
+ 0, 0, 1,124, 0, 0, 0, 0, 0, 0, 2, 14, 0, 0, 0,128, 0, 0, 1,108, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0,128,
+ 0, 0, 1,108, 0, 0, 0, 16, 0, 0, 2, 14, 0, 0, 0, 0, 0, 0, 0, 0, 70,250, 0, 0, 68,122, 0, 0, 60, 35,215, 10,
+ 66, 72, 0, 0, 0, 10, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 1,200,
+ 13, 64, 94,112, 0, 0, 0,144, 0, 0, 0, 1, 0, 0, 0, 0, 13, 64, 93,128, 0, 0, 0, 5, 63, 51, 51, 51, 13, 64, 24,144,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,150, 83, 97,118,101, 32, 70,105,108,
+101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 85,115,101,114,115, 47,116,111,110, 47, 68,101,115,107,116,
+111,112, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 97,116,101,114,105, 97,108, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72,253, 62, 1,204, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, 80,183,163, 2, 68, 65, 84, 65,220, 0, 0, 0,120,208,163, 2,133, 0, 0, 0,
- 1, 0, 0, 0,240,182, 63, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0,104,250,126, 2, 40,252,163, 2, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0,193, 0, 0,163, 67, 0, 0,124,196,
- 0, 0,104, 67,108, 94,173,194,155, 87,202, 67,101,243,143,196,181, 5,134, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,128, 67, 0, 0, 40, 66, 0, 0, 0, 69, 0, 0,225, 67, 0, 0, 0, 63, 72,225,154, 63, 0, 0, 1, 0,
- 1, 0, 1, 0,132, 1, 97, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 3, 0,
- 0, 0, 3, 0,152,140,165, 2, 1, 0, 0, 0, 0, 0, 0, 0,150, 1, 0, 0, 48, 1, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 0, 3, 0, 0,240,182, 63, 0,128, 0, 0, 0, 1, 0, 0, 0,208,189,147, 2,120,208,163, 2, 1, 0, 0, 0,
- 51, 51, 51, 63,104,250,126, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52,198,127, 63,146, 29,166,188,
- 97,153, 22, 61, 0, 0, 0, 0, 13,252, 43, 61, 89, 11,247, 62, 90,248, 95,191, 0, 0, 0, 0,196,176, 67, 52,246, 42, 96, 63,
- 44, 67,247, 62, 0, 0, 0, 0, 74, 45, 78, 64,201, 87,172, 62, 79,171, 41,194, 0, 0,128, 63, 53,198,127, 63,248,251, 43, 61,
- 0, 0, 80, 52, 0, 0, 0, 0,186, 29,166,188,119, 11,247, 62, 16, 43, 96, 63, 0, 0, 0, 0, 99,153, 22, 61,117,248, 95,191,
- 75, 67,247, 62, 0, 0, 0, 0,192,125,211,191,185,161, 21,194, 59,133,161, 65, 0, 0,128, 63,100,224,139, 63, 21,221, 96,190,
-236,154, 22,189, 97,153, 22,189,174, 27, 60, 61,239, 52,167, 64,166,250, 95, 63, 90,248, 95, 63, 86, 9, 86, 52, 41,185, 23, 65,
-181, 69,247,190, 44, 67,247,190,137,129, 97, 64, 27, 75,105, 64,145,152, 41, 66, 79,171, 41, 66, 95,225,105, 63, 84,247, 39, 61,
-176, 46,185,186,144,196,146,184,178,126,245,186, 48,117, 54, 61, 23,157,165, 61, 0,160,153, 52,225, 56,165, 66,192,202,233, 68,
- 18, 94,124,196, 87,254, 71,194,102, 77,165,194, 39,177,233,196,193, 65,124, 68,101, 0, 72, 66, 0, 0,140, 63, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,171, 68, 45, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 80, 1,128,191, 0, 0,128,191, 0, 0, 0,128, 0, 0, 0,128,226,215,163,188, 0, 0, 0,128, 52,198,127, 63,146, 29,166,188,
- 97,153, 22, 61, 0, 0, 0, 0, 13,252, 43, 61, 89, 11,247, 62, 90,248, 95,191, 0, 0, 0, 0,196,176, 67, 52,246, 42, 96, 63,
- 44, 67,247, 62, 0, 0, 0, 0, 74, 45, 78, 64,201, 87,172, 62, 79,171, 41,194, 0, 0,128, 63,141, 99, 92, 63, 43, 35, 2,191,
-188,238, 46,188, 94, 32,148,188, 23,240, 25, 66, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,160, 26,156, 2, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 4, 0, 0, 0, 4, 0, 0,
- 1, 0, 0, 0,226,255, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, 68, 56,124, 58, 10,215, 35, 60, 0, 0,250, 67,
- 0, 0, 0, 0, 0, 0, 0, 0,201, 77, 68, 64,228, 66,111, 64,230, 97,205,191,128,191,149, 60,116,109, 77,191,248,165,230, 63,
- 20, 0, 0, 0, 7, 0, 99, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,255,255, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 24, 24, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,208,189,147, 2,
-132, 0, 0, 0, 1, 0, 0, 0,136,209,163, 2,240,182, 63, 0, 2, 0, 0, 0, 51, 51, 51, 63,104,250,126, 2, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,122, 67,205,204,204,189,
-205,204,140, 63, 0, 0,128, 63, 0, 0,122, 67, 0, 0,160,192, 0, 0,160, 64, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0,
-235, 2, 0, 0, 16, 0, 0, 0,168, 3, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 16, 0, 0, 0,168, 3, 0, 0, 16, 0, 0, 0,
-235, 2, 0, 0, 10,215, 35, 60, 10,215, 35, 60, 0, 96,106, 70, 0, 0,122, 68, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 43,153, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,122, 67,205,204,204,189,205,204,140, 63,
- 68, 65, 84, 65,120, 0, 0, 0,136,209,163, 2,139, 0, 0, 0, 1, 0, 0, 0, 48,210,163, 2,208,189,147, 2, 9, 0, 0, 0,
- 51, 51, 51, 63,104,250,126, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192,199,156, 2, 0, 0, 0, 0,
- 62, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,205,204,204, 61, 5, 0, 0, 0, 17, 0, 0, 0,225, 2, 0, 0,227, 2, 0, 0, 5, 0, 0, 0,
- 17, 0, 0, 0,207, 2, 0, 0,227, 2, 0, 0, 68, 65, 84, 65, 16, 1, 0, 0, 48,210,163, 2,137, 0, 0, 0, 1, 0, 0, 0,
-112,211,163, 2,136,209,163, 2, 6, 0, 0, 0, 51, 51, 51, 63,104,250,126, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 67, 0, 0,120,190, 0, 0,159, 63, 0, 0,242,190,
- 0,128,188, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,124, 1, 0, 0, 0, 0, 0, 0,242, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,208, 1, 0, 0,112,211,163, 2,136, 0, 0, 0,
- 1, 0, 0, 0,112,213,163, 2, 48,210,163, 2, 3, 0, 0, 0, 51, 51, 51, 63,104,250,126, 2, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,182, 67, 0, 0,209,195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,182, 67,
- 0, 0,190,195, 0, 0, 0,181, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0,124, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0,124, 1, 0, 0, 0, 0, 0, 0,124, 1, 0, 0, 0, 0,190,195, 0, 0,190,195,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 1, 0, 1, 0, 1, 0, 1, 0,108, 1,124, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,142, 3, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,176, 0, 0, 0,112,213,163, 2,
-216, 0, 0, 0, 1, 0, 0, 0, 80,214,163, 2,112,211,163, 2, 11, 0, 0, 0, 51, 51, 51, 63,104,250,126, 2, 0, 0,128,192,
- 0, 0,122, 67, 0, 0,128,192, 0, 0,127, 67, 0, 0,128,192, 0, 0, 72, 66, 0, 0,128,192, 0, 0,127, 67, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,124, 1, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0,
-124, 1, 0, 0, 16, 0, 0, 0,124, 1, 0, 0, 0, 0,128, 63, 0,128,129, 67, 0, 0,250, 70, 0,128,129, 67,205,204,204, 61,
- 0, 0, 32, 65, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,180, 0, 0, 0,
- 80,214,163, 2,138, 0, 0, 0, 1, 0, 0, 0,176,186,132, 2,112,213,163, 2, 13, 0, 0, 0, 51, 51, 51, 63,104,250,126, 2,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,122, 68,
- 0, 0, 0, 0, 0, 0,122, 68, 0, 0,160,192, 0, 0,130, 66, 0, 0, 0, 0, 0, 0,182, 67,108, 1, 0, 0,124, 1, 0, 0,
- 0, 0, 0, 0,124, 1, 0, 0,196, 0, 0, 0,108, 1, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0,196, 0, 0, 0,108, 1, 0, 0,
- 16, 0, 0, 0,124, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,122, 68, 0, 0,122, 68,205,204,204, 61, 0, 0, 72, 66,
- 10, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65,192, 0, 0, 0,176,186,132, 2,226, 0, 0, 0, 1, 0, 0, 0,192,158,126, 2, 80,214,163, 2, 12, 0, 0, 0,
- 51, 51, 51, 63,104,250,126, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,191, 0, 0, 2, 66,
- 0, 0,122,196, 0, 0, 0, 0, 0, 0, 0,191, 0, 0, 2, 66, 0, 0,150,194, 0, 0,160, 64,108, 1, 0, 0,124, 1, 0, 0,
- 0, 0, 0, 0, 14, 2, 0, 0,128, 0, 0, 0,108, 1, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0,128, 0, 0, 0,108, 1, 0, 0,
- 16, 0, 0, 0, 14, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,250, 70, 0, 0,122, 68, 10,215, 35, 60, 0, 0, 72, 66,
- 10, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,120, 1, 0, 0,192,158,126, 2,
-135, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,176,186,132, 2, 5, 0, 0, 0, 51, 51, 51, 63,104,250,126, 2, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,150, 0, 0, 0, 83, 97,118,101, 32, 70,105,108,101, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 85,115,101,114,115, 47,116,111,110, 47, 68,101,115,107,116,111,112, 47, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,112,114,101,118,105,101,119, 46, 98,108,101,110,100, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 82, 0,
- 0, 0, 0, 0, 76, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-255,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65,204, 0, 0, 0, 24,120,126, 2,154, 0, 0, 0, 1, 0, 0, 0,160, 78,130, 2,104,250,126, 2, 32, 48,127, 2,
-104, 48,127, 2,216,108,163, 2,144,108,163, 2, 0, 0, 0, 0, 17, 38,238, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,140, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 1,128,191, 0, 0,128,191,
- 0, 0, 0, 0, 0, 0, 0, 0,225,215,163,188, 0, 0, 0, 0,105, 3, 0, 0,251, 5, 0, 0, 0, 0, 0, 0,123, 4, 0, 0,
-105, 3, 0, 0,251, 5, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0,105, 3, 0, 0,251, 5, 0, 0, 27, 0, 0, 0,123, 4, 0, 0,
- 10, 0, 11, 0, 1, 0, 6, 6,147, 2, 97, 4, 1, 0, 1, 0,214, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 80,171,154, 2,120,126,126, 2, 72, 36,155, 2, 72, 36,155, 2, 56,104,163, 2, 88,133,152, 2,
- 68, 65, 84, 65,228, 0, 0, 0, 56,104,163, 2,153, 0, 0, 0, 1, 0, 0, 0,192,168,154, 2, 0, 0, 0, 0, 84,114, 97,110,
-115,102,111,114,109, 32, 80,114,111,112,101,114,116,105,101,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73,112,111, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+112,114,101,118,105,101,119, 46, 98,108,101,110,100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 0,167, 0,
- 62, 1,204, 0, 0, 0, 0, 0,162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,228, 0, 0, 0,
-192,168,154, 2,153, 0, 0, 0, 1, 0, 0, 0, 0,165,127, 2, 56,104,163, 2, 79,117,116,112,117,116, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 82, 0, 0, 0, 0, 1, 76, 0, 1, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,204, 13, 64, 96, 96,
+ 0, 0, 0,164, 0, 0, 0, 1, 13, 64,121,112, 13, 64, 24,144, 7, 31,231,240, 7, 31,232, 48, 7, 31,231,176, 7, 31,231,112,
+ 0, 0, 0, 0, 63,238, 38, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,140, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,191,128, 1, 80,191,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,188,163,215,225,
+ 0, 0, 0, 0, 0, 0, 1,237, 0, 0, 3, 31, 0, 0, 0, 0, 0, 0, 3, 5, 0, 0, 1,237, 0, 0, 3, 31, 0, 0, 0, 0,
+ 0, 0, 0, 26, 0, 0, 1,237, 0, 0, 3, 31, 0, 0, 0, 27, 0, 0, 3, 5, 0, 9, 0, 8, 0, 1, 6, 6, 1, 51, 2,235,
+ 1, 0, 1, 0, 0,220, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 64,111, 48,
+ 13, 64,119,128, 7, 23, 59,224, 7, 23, 59,224, 13, 64, 97, 96, 13, 64,110, 32, 68, 65, 84, 65, 0, 0, 0,228, 13, 64, 97, 96,
+ 0, 0, 0,163, 0, 0, 0, 1, 13, 64, 98,112, 0, 0, 0, 0, 84,114, 97,110,115,102,111,114,109, 32, 80,114,111,112,101,114,
+116,105,101,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73,112,111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82,101,110,100,101,114, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 0,167, 1, 62, 0,204, 0, 0, 0, 0, 0,162, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228, 13, 64, 98,112, 0, 0, 0,163, 0, 0, 0, 1,
+ 13, 64, 99,128, 13, 64, 97, 96, 79,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 1,204, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,228, 0, 0, 0, 0,165,127, 2,153, 0, 0, 0,
- 1, 0, 0, 0, 56, 24,156, 2,192,168,154, 2, 82,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 82,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228, 13, 64, 99,128, 0, 0, 0,163, 0, 0, 0, 1, 13, 64,100,144, 13, 64, 98,112,
+ 82,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 1, 0, 0, 62, 1,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,228, 0, 0, 0, 56, 24,156, 2,153, 0, 0, 0, 1, 0, 0, 0,224, 93,163, 2,
- 0,165,127, 2, 65,110,105,109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 82,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 82,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 64, 0, 0, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+ 0, 0, 0,228, 13, 64,100,144, 0, 0, 0,163, 0, 0, 0, 1, 13, 64,101,160, 13, 64, 99,128, 65,110,105,109, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,128, 2, 0, 0, 62, 1,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65,228, 0, 0, 0,224, 93,163, 2,153, 0, 0, 0, 1, 0, 0, 0,248, 94,163, 2, 56, 24,156, 2, 70,111,114,109,
- 97,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82,101,110,100,
-101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82,101,110,100,101,114, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192, 3, 0, 0,
- 62, 1,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,228, 0, 0, 0,
-248, 94,163, 2,153, 0, 0, 0, 1, 0, 0, 0,120,125,165, 2,224, 93,163, 2, 76,105,110,107, 32, 97,110,100, 32, 77, 97,116,
-101,114,105, 97,108,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69,100,105,116,105,110,103, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,128, 0, 0, 1, 62, 0,204,
+ 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228, 13, 64,101,160,
+ 0, 0, 0,163, 0, 0, 0, 1, 13, 64,102,176, 13, 64,100,144, 70,111,114,109, 97,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 1,204, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,228, 0, 0, 0,120,125,165, 2,153, 0, 0, 0,
- 1, 0, 0, 0,144,126,165, 2,248, 94,163, 2, 67, 97,109,101,114, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69,100,105,116,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,192, 0, 0, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228, 13, 64,102,176, 0, 0, 0,163, 0, 0, 0, 1,
+ 13, 64,103,192, 13, 64,101,160, 76,105,110,107, 32, 97,110,100, 32, 77, 97,116,101,114,105, 97,108,115, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 69,100,105,116,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 1, 0, 0, 62, 1,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,228, 0, 0, 0,144,126,165, 2,153, 0, 0, 0, 1, 0, 0, 0,168,127,165, 2,
-120,125,165, 2, 80,114,101,118,105,101,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 76, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228, 13, 64,103,192, 0, 0, 0,163, 0, 0, 0, 1, 13, 64,104,208, 13, 64,102,176,
+ 67, 97,109,101,114, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 69,100,105,116,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 62, 1,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65,228, 0, 0, 0,168,127,165, 2,153, 0, 0, 0, 1, 0, 0, 0,192,128,165, 2,144,126,165, 2, 76, 97,109,112,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 97,109,112,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 64, 0, 0, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+ 0, 0, 0,228, 13, 64,104,208, 0, 0, 0,163, 0, 0, 0, 1, 13, 64,105,224, 13, 64,103,192, 80,114,101,118,105,101,119, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 97,109,112, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24,255,
- 62, 1,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,228, 0, 0, 0,
-192,128,165, 2,153, 0, 0, 0, 1, 0, 0, 0, 40,131,152, 2,168,127,165, 2, 83,104, 97,100,111,119, 32, 97,110,100, 32, 83,
-112,111,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 62, 0,204,
+ 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228, 13, 64,105,224,
+ 0, 0, 0,163, 0, 0, 0, 1, 13, 64,106,240, 13, 64,104,208, 76, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48,254, 62, 1,204, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,228, 0, 0, 0, 40,131,152, 2,153, 0, 0, 0,
- 1, 0, 0, 0, 64,132,152, 2,192,128,165, 2, 84,101,120,116,117,114,101, 32, 97,110,100, 32, 73,110,112,117,116, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 24, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228, 13, 64,106,240, 0, 0, 0,163, 0, 0, 0, 1,
+ 13, 64,108, 0, 13, 64,105,224, 83,104, 97,100,111,119, 32, 97,110,100, 32, 83,112,111,116, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72,253, 62, 1,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,228, 0, 0, 0, 64,132,152, 2,153, 0, 0, 0, 1, 0, 0, 0, 88,133,152, 2,
- 40,131,152, 2, 77, 97,112, 32, 84,111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 76, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 76, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,254, 48, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228, 13, 64,108, 0, 0, 0, 0,163, 0, 0, 0, 1, 13, 64,109, 16, 13, 64,106,240,
+ 84,101,120,116,117,114,101, 32, 97,110,100, 32, 73,110,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 72,253, 62, 1,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40,131,152, 2,
- 68, 65, 84, 65,228, 0, 0, 0, 88,133,152, 2,153, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 64,132,152, 2, 84,114, 97,110,
-115,102,111,114,109, 32, 80,114,111,112,101,114,116,105,101,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86,105,101,119,
- 51,100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 76, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,228, 0,
- 62, 1,204, 0, 0, 0, 0, 0,162, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 16, 1, 0, 0,
- 80,171,154, 2,137, 0, 0, 0, 1, 0, 0, 0,184,208,127, 2, 0, 0, 0, 0, 6, 0, 0, 0, 51, 51, 51, 63, 24,120,126, 2,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 67,
- 0,128, 73,191, 0,192,228, 63, 0, 64,216,191, 0, 32, 44, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,147, 2, 0, 0, 0, 0, 0, 0, 97, 4, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,253, 72, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+ 0, 0, 0,228, 13, 64,109, 16, 0, 0, 0,163, 0, 0, 0, 1, 13, 64,110, 32, 13, 64,108, 0, 77, 97,112, 32, 84,111, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,255,255, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 0, 3, 0, 0,184,208,127, 2,128, 0, 0, 0, 1, 0, 0, 0,144,197,126, 2, 80,171,154, 2, 1, 0, 0, 0, 51, 51, 51, 63,
- 24,120,126, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 75, 64, 63,119,102,191, 62, 11, 73, 11,191,
- 0, 0, 0, 0,108,254, 40,191, 94,202,217, 62,246,124, 30,191, 0, 0, 0, 0,218, 33,186,180,184,254, 82, 63,193,248, 16, 63,
- 0, 0, 0, 0, 73,228, 8, 62, 72,158, 33,192,125,148,210,193, 0, 0,128, 63, 68, 75, 64, 63,161,254, 40,191,101,221, 58, 54,
- 0, 0, 0, 0, 10,103,191, 62,178,202,217, 62, 4,255, 82, 63, 0, 0, 0, 0, 20, 73, 11,191, 78,125, 30,191,219,248, 16, 63,
- 0, 0, 0, 0, 3,166, 87,193, 19, 36,114,193,213,230,135, 65, 0, 0,128, 63,132,226,178, 63, 18, 88,209, 62,121, 74, 11, 63,
- 11, 73, 11, 63,169, 53,157,191, 87, 53,238, 62,150,126, 30, 63,246,124, 30, 63, 38, 39, 45,181,153,198,102, 63, 62,250, 16,191,
-193,248, 16,191, 46,177,126, 62, 31,197, 48,192,176,109,210, 65,125,148,210, 65,119,202,206, 62,194,145,181,190, 62, 1, 84,185,
-188, 79, 73,183, 32,236,174, 62,100, 10,199, 62, 33,245, 64, 63, 0,160, 52, 55, 84, 79, 40, 68,158,252, 60, 68, 68, 35, 84,196,
-165,205, 71,194, 68, 46, 40,196,248,214, 60,196, 62, 1, 84, 68,188,207, 71, 66, 17, 38,238, 63, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,140, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 1,128,191,
- 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0,225,215,163,188, 0, 0, 0, 0, 54, 75, 64, 63,119,102,191, 62, 11, 73, 11,191,
- 0, 0, 0, 0,108,254, 40,191, 94,202,217, 62,246,124, 30,191, 0, 0, 0, 0,218, 33,186,180,184,254, 82, 63,193,248, 16, 63,
- 0, 0, 0, 0, 73,228, 8, 62, 72,158, 33,192,125,148,210,193, 0, 0,128, 63, 84,252, 83, 63,104, 25,223,190,115, 52, 40, 62,
-119,211,159, 62, 96,183,198, 65, 96,183,198, 65, 0, 0, 0, 0, 1, 0, 0, 0,160, 26,156, 2, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 4, 0, 0, 0, 4, 0, 0, 1, 0, 0, 0,
-251,255, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63,174,207,213, 58, 10,215, 35, 60, 0, 0,250, 67,228, 18,218,188,
- 37,180, 23,188,163,146, 22,189,174, 51,122,190, 29,244, 58,192, 0, 0,224, 54, 56,146, 88, 63,198, 37, 71, 64, 20, 0, 0, 0,
- 7, 0,115, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,255,255, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 24, 24, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,220, 0, 0, 0,144,197,126, 2,133, 0, 0, 0,
- 1, 0, 0, 0, 96,221,128, 2,184,208,127, 2, 4, 0, 0, 0, 0, 0, 0, 0, 24,120,126, 2, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 4, 0, 0, 0, 0, 0, 0, 0,160, 68, 0, 0, 46,196,
- 0, 0,100, 67,197,197,136, 55,118,209, 78, 68, 40,222,231,195,172,158, 25, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,128, 67, 0, 0, 40, 66, 0, 0, 0, 69, 0, 0,225, 67, 0, 0, 0, 63, 72,225,154, 63, 0, 0, 1, 0,
- 1, 0, 1, 0,233, 3,235, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 2, 0,
- 0, 0, 3, 0, 0, 0, 0, 0,255,255, 0, 0, 0, 0, 0, 0,150, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0,
- 68, 65, 84, 65, 88, 1, 0, 0, 96,221,128, 2,132, 0, 0, 0, 1, 0, 0, 0, 24, 1,132, 2,144,197,126, 2, 2, 0, 0, 0,
- 51, 51, 51, 63, 24,120,126, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,122, 67,205,204,204,189,205,204,140, 63, 0, 0,128, 63, 0, 0,122, 67, 0, 0,160,192, 0, 0,160, 64,
- 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0,235, 2, 0, 0, 16, 0, 0, 0,168, 3, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0,
- 16, 0, 0, 0,168, 3, 0, 0, 16, 0, 0, 0,235, 2, 0, 0, 10,215, 35, 60, 10,215, 35, 60, 0, 96,106, 70, 0, 0,122, 68,
- 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 43,153, 2, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 79, 66, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,122, 67,205,204,204,189,205,204,140, 63, 68, 65, 84, 65,120, 0, 0, 0, 24, 1,132, 2,139, 0, 0, 0, 1, 0, 0, 0,
-240,220,126, 2, 96,221,128, 2, 9, 0, 0, 0, 51, 51, 51, 63, 24,120,126, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,192,199,156, 2, 0, 0, 0, 0, 62, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,205,204,204, 61, 5, 0, 0, 0, 17, 0, 0, 0,
-225, 2, 0, 0,227, 2, 0, 0, 5, 0, 0, 0, 17, 0, 0, 0,207, 2, 0, 0,227, 2, 0, 0, 68, 65, 84, 65,208, 1, 0, 0,
-240,220,126, 2,136, 0, 0, 0, 1, 0, 0, 0, 24,208,129, 2, 24, 1,132, 2, 3, 0, 0, 0, 51, 51, 51, 63, 24,120,126, 2,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,182, 67, 0, 0,209,195, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,182, 67, 0, 0,190,195, 0, 0, 0,181, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0,124, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0,124, 1, 0, 0, 0, 0, 0, 0,124, 1, 0, 0,
- 0, 0,190,195, 0, 0,190,195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 1, 0, 1, 0, 1, 0, 1, 0,
-108, 1,124, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,142, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 97,109,112, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,253, 72, 1, 62, 0,204,
+ 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 64,108, 0, 68, 65, 84, 65, 0, 0, 0,228, 13, 64,110, 32,
+ 0, 0, 0,163, 0, 0, 0, 1, 0, 0, 0, 0, 13, 64,109, 16, 84,114, 97,110,115,102,111,114,109, 32, 80,114,111,112,101,114,
+116,105,101,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86,105,101,119, 51,100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,228, 1, 62, 0,204, 0, 0, 0, 0, 0,162, 0, 8,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 1, 8, 13, 64,111, 48, 0, 0, 0,146, 0, 0, 0, 1,
+ 7,159,136, 32, 0, 0, 0, 0, 0, 0, 0, 6, 63, 51, 51, 51, 13, 64, 96, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 67,128, 0, 0, 0, 0, 0, 0, 67,128, 0, 0,189,204, 0, 0, 63,140,192, 0,191,117,128, 0,
+ 63,250,192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 51, 0, 0, 0, 0, 0, 0, 2,235, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255, 0, 0, 0, 0, 1, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 3, 4, 7,159,136, 32, 0, 0, 0,137, 0, 0, 0, 1, 13, 64,112, 96,
+ 13, 64,111, 48, 0, 0, 0, 1, 63, 51, 51, 51, 13, 64, 96, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 63, 64, 75, 54, 62,191,102,119,191, 11, 73, 11, 0, 0, 0, 0,191, 40,254,108, 62,217,202, 94,191, 30,124,246, 0, 0, 0, 0,
+180,186, 33,218, 63, 82,254,184, 63, 16,248,193, 0, 0, 0, 0, 62, 8,228, 73,192, 33,158, 72,193,210,148,125, 63,128, 0, 0,
+ 63, 64, 75, 68,191, 40,254,161, 54, 58,221,101, 0, 0, 0, 0, 62,191,103, 10, 62,217,202,178, 63, 82,255, 4, 0, 0, 0, 0,
+191, 11, 73, 20,191, 30,125, 78, 63, 16,248,219, 0, 0, 0, 0,193, 87,166, 3,193,114, 36, 19, 65,135,230,213, 63,128, 0, 0,
+ 63,178,226,132, 62,209, 88, 18, 63, 11, 74,121, 63, 11, 73, 11,191,157, 53,169, 62,238, 53, 87, 63, 30,126,150, 63, 30,124,246,
+181, 45, 39, 38, 63,102,198,153,191, 16,250, 62,191, 16,248,193, 62,126,177, 46,192, 48,197, 31, 65,210,109,176, 65,210,148,125,
+ 62,206,202,119,190,181,145,194,185, 84, 1, 62,183, 73, 79,188, 62,174,236, 32, 62,199, 10,100, 63, 64,245, 33, 55, 52,160, 0,
+ 68, 40, 79, 84, 68, 60,252,158,196, 84, 35, 68,194, 71,205,165,196, 40, 46, 68,196, 60,214,248, 68, 84, 1, 62, 66, 71,207,188,
+ 63,238, 38, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,140, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,191,128, 1, 80,191,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,188,163,215,225, 0, 0, 0, 0,
+ 63, 64, 75, 54, 62,191,102,119,191, 11, 73, 11, 0, 0, 0, 0,191, 40,254,108, 62,217,202, 94,191, 30,124,246, 0, 0, 0, 0,
+180,186, 33,218, 63, 82,254,184, 63, 16,248,193, 0, 0, 0, 0, 62, 8,228, 73,192, 33,158, 72,193,210,148,125, 63,128, 0, 0,
+ 63, 83,252, 84,190,223, 25,104, 62, 40, 52,115, 62,159,211,119, 65,198,183, 96, 65,198,183, 96, 0, 0, 0, 0, 0, 1, 0, 0,
+ 7,159,156, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0,
+ 0, 0, 0, 2, 0, 0, 0, 2, 0, 1, 0, 0,255,251, 0, 0, 66, 12, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 58,213,207,174,
+ 60, 35,215, 10, 67,250, 0, 0,188,218, 18,228,188, 23,180, 37,189, 22,146,163,190,122, 51,174,192, 58,244, 29, 54,224, 0, 0,
+ 63, 88,146, 56, 64, 71, 37,198, 0, 20, 0, 0, 0, 7, 0,115, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,255,255, 63,128, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 24, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 0, 0, 0,220, 13, 64,112, 96, 0, 0, 0,142, 0, 0, 0, 1, 13, 64,113,112, 7,159,136, 32, 0, 0, 0, 4,
+ 0, 0, 0, 0, 13, 64, 96, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 2, 0, 4, 0, 0, 0, 0, 68,160, 0, 0,196, 46, 0, 0, 67,100, 0, 0, 55,136,197,197, 68, 78,209,118,195,231,222, 40,
+ 67, 25,158,172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67,128, 0, 0, 66, 40, 0, 0, 69, 0, 0, 0,
+ 67,225, 0, 0, 63, 0, 0, 0, 63,154,225, 72, 0, 0, 0, 1, 0, 1, 0, 1, 3,233, 2,235, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 2, 0, 0, 0, 3, 0, 0, 0, 0,255,255, 0, 0, 0, 0, 0, 0,
+ 1,150, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 68, 65, 84, 65, 0, 0, 1, 88, 13, 64,113,112, 0, 0, 0,141,
+ 0, 0, 0, 1, 13, 64,114,240, 13, 64,112, 96, 0, 0, 0, 2, 63, 51, 51, 51, 13, 64, 96, 96, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67,122, 0, 0,189,204,204,205, 63,140,204,205,
+ 63,128, 0, 0, 67,122, 0, 0,192,160, 0, 0, 64,160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 2,235,
+ 0, 0, 0, 16, 0, 0, 3,168, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 16, 0, 0, 3,168, 0, 0, 0, 16, 0, 0, 2,235,
+ 60, 35,215, 10, 60, 35,215, 10, 70,106, 96, 0, 68,122, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 7,159,184, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67,122, 0, 0,189,204,204,205, 63,140,204,205, 68, 65, 84, 65,
+ 0, 0, 0,128, 13, 64,114,240, 0, 0, 0,148, 0, 0, 0, 1, 13, 64,115,160, 13, 64,113,112, 0, 0, 0, 9, 63, 51, 51, 51,
+ 13, 64, 96, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 64,194,224, 0, 0, 0, 0, 0, 0, 0, 62,
+ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 61,204,204,205, 0, 0, 0, 5, 0, 0, 0, 17, 0, 0, 2,225, 0, 0, 2,227, 0, 0, 0, 5, 0, 0, 0, 17,
+ 0, 0, 2,207, 0, 0, 2,227, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 1, 8, 13, 64,115,160, 0, 0, 0,145,
+ 0, 0, 0, 1, 13, 64,116,208, 13, 64,114,240, 0, 0, 0, 3, 63, 51, 51, 51, 13, 64, 96, 96, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67,182, 0, 0,195,209, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67,182, 0, 0,
+195,190, 0, 0,181, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 1,124, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 1,124, 0, 0, 0, 0, 0, 0, 1,124,195,190, 0, 0,195,190, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1,108, 1,124, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,142, 0, 1, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,176, 13, 64,116,208, 0, 0, 0,230, 0, 0, 0, 1,
+ 13, 64,117,176, 13, 64,115,160, 0, 0, 0, 11, 63, 51, 51, 51, 13, 64, 96, 96,192,128, 0, 0, 67,122, 0, 0,192,128, 0, 0,
+ 67,127, 0, 0,192,128, 0, 0, 66, 72, 0, 0,192,128, 0, 0, 67,127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,124, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 1,124, 0, 0, 0, 16,
+ 0, 0, 1,124, 63,128, 0, 0, 67,129,128, 0, 70,250, 0, 0, 67,129,128, 0, 61,204,204,205, 65, 32, 0, 0, 0, 8, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,180, 13, 64,117,176, 0, 0, 0,147,
+ 0, 0, 0, 1, 13, 64,118,144, 13, 64,116,208, 0, 0, 0, 13, 63, 51, 51, 51, 13, 64, 96, 96, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 68,122, 0, 0, 0, 0, 0, 0, 68,122, 0, 0,
+192,160, 0, 0, 66,130, 0, 0, 0, 0, 0, 0, 67,182, 0, 0, 0, 0, 1,108, 0, 0, 1,124, 0, 0, 0, 0, 0, 0, 1,124,
+ 0, 0, 0,196, 0, 0, 1,108, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0,196, 0, 0, 1,108, 0, 0, 0, 16, 0, 0, 1,124,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68,122, 0, 0, 68,122, 0, 0, 61,204,204,205, 66, 72, 0, 0, 0, 10, 0, 0, 0, 0, 2, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,192,
+ 13, 64,118,144, 0, 0, 0,240, 0, 0, 0, 1, 13, 64,119,128, 13, 64,117,176, 0, 0, 0, 12, 63, 51, 51, 51, 13, 64, 96, 96,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,191, 0, 0, 0, 66, 2, 0, 0,196,122, 0, 0, 0, 0, 0, 0,
+191, 0, 0, 0, 66, 2, 0, 0,194,150, 0, 0, 64,160, 0, 0, 0, 0, 1,108, 0, 0, 1,124, 0, 0, 0, 0, 0, 0, 2, 14,
+ 0, 0, 0,128, 0, 0, 1,108, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0,128, 0, 0, 1,108, 0, 0, 0, 16, 0, 0, 2, 14,
+ 0, 0, 0, 0, 0, 0, 0, 0, 70,250, 0, 0, 68,122, 0, 0, 60, 35,215, 10, 66, 72, 0, 0, 0, 10, 0, 0, 0, 0, 2, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 1,200, 13, 64,119,128, 0, 0, 0,144, 0, 0, 0, 1,
+ 0, 0, 0, 0, 13, 64,118,144, 0, 0, 0, 5, 63, 51, 51, 51, 13, 64, 96, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 83, 97,118,101, 32, 70,105,108,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 47, 85,115,101,114,115, 47,116,111,110, 47, 68,101,115,107,116,111,112, 47, 0,114, 47,114,101,108,101, 97,115,
+101, 47,100, 97,116, 97,102,105,108,101,115, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
-176, 0, 0, 0, 24,208,129, 2,216, 0, 0, 0, 1, 0, 0, 0,104,219,126, 2,240,220,126, 2, 11, 0, 0, 0, 51, 51, 51, 63,
- 24,120,126, 2, 0, 0,128,192, 0, 0,122, 67, 0, 0,128,192, 0, 0,127, 67, 0, 0,128,192, 0, 0, 72, 66, 0, 0,128,192,
- 0, 0,127, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,124, 1, 0, 0, 0, 0, 0, 0,
- 16, 0, 0, 0, 0, 0, 0, 0,124, 1, 0, 0, 16, 0, 0, 0,124, 1, 0, 0, 0, 0,128, 63, 0,128,129, 67, 0, 0,250, 70,
- 0,128,129, 67,205,204,204, 61, 0, 0, 32, 65, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65,180, 0, 0, 0,104,219,126, 2,138, 0, 0, 0, 1, 0, 0, 0,176, 72,130, 2, 24,208,129, 2, 13, 0, 0, 0,
- 51, 51, 51, 63, 24,120,126, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0,122, 68, 0, 0, 0, 0, 0, 0,122, 68, 0, 0,160,192, 0, 0,130, 66, 0, 0, 0, 0, 0, 0,182, 67,
-108, 1, 0, 0,124, 1, 0, 0, 0, 0, 0, 0,124, 1, 0, 0,196, 0, 0, 0,108, 1, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0,
-196, 0, 0, 0,108, 1, 0, 0, 16, 0, 0, 0,124, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,122, 68, 0, 0,122, 68,
-205,204,204, 61, 0, 0, 72, 66, 10, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,192, 0, 0, 0,176, 72,130, 2,226, 0, 0, 0, 1, 0, 0, 0,120,126,126, 2,
-104,219,126, 2, 12, 0, 0, 0, 51, 51, 51, 63, 24,120,126, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0,191, 0, 0, 2, 66, 0, 0,122,196, 0, 0, 0, 0, 0, 0, 0,191, 0, 0, 2, 66, 0, 0,150,194, 0, 0,160, 64,
-108, 1, 0, 0,124, 1, 0, 0, 0, 0, 0, 0, 14, 2, 0, 0,128, 0, 0, 0,108, 1, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0,
-128, 0, 0, 0,108, 1, 0, 0, 16, 0, 0, 0, 14, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,250, 70, 0, 0,122, 68,
- 10,215, 35, 60, 0, 0, 72, 66, 10, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
-120, 1, 0, 0,120,126,126, 2,135, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,176, 72,130, 2, 5, 0, 0, 0, 51, 51, 51, 63,
- 24,120,126, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 0, 0, 0, 83, 97,118,101,
- 32, 70,105,108,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 85,115,101,114,115, 47,116,111,110, 47, 68,
-101,115,107,116,111,112, 47, 0,114, 47,114,101,108,101, 97,115,101, 47,100, 97,116, 97,102,105,108,101,115, 47, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,112,114,101,118,105,101,119, 46, 98,108,101,110,
100, 0, 0, 0, 98,108,101,110,100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 8, 0, 46, 0, 0, 0, 0, 0, 85, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,204, 0, 0, 0,160, 78,130, 2,154, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 24,120,126, 2,224,106,163, 2, 0,108,163, 2,104, 48,127, 2, 32, 48,127, 2, 0, 0, 0, 0, 33,250,179, 63, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,140, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 80, 1,128,191, 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0,225,215,163,188, 0, 0, 0, 0, 0, 0, 0, 0,103, 3, 0, 0,
- 0, 0, 0, 0,123, 4, 0, 0, 0, 0, 0, 0,103, 3, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0,103, 3, 0, 0,
- 27, 0, 0, 0,123, 4, 0, 0, 8, 0, 9, 0, 1, 0, 1, 1,104, 3, 97, 4, 1, 0, 1, 0,216, 2, 0, 0, 7, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,112,229,163, 2, 0,191,126, 2,152,251,149, 2,152,251,149, 2,
-120,248,164, 2,192, 25, 16, 3, 68, 65, 84, 65,228, 0, 0, 0,120,248,164, 2,153, 0, 0, 0, 1, 0, 0, 0, 40,144, 16, 3,
+ 0, 0, 0, 0, 0, 8, 0, 46, 0, 0, 0, 0, 1, 85, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,204, 13, 64,121,112, 0, 0, 0,164, 0, 0, 0, 1, 0, 0, 0, 0,
+ 13, 64, 96, 96, 7, 29,221,112, 7, 31,230,240, 7, 31,232, 48, 7, 31,231,240, 0, 0, 0, 0, 63,157, 86,198, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 79, 65,252, 0, 0, 0, 0, 0, 0, 0, 0,189, 60, 82,166,188,131, 1,237,
+191,153,213,185,191,128, 0, 0,128, 0, 0, 0,128, 0, 0, 0,193, 65,194,239,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,235,
+ 0, 0, 0, 0, 0, 0, 3, 5, 0, 0, 0, 0, 0, 0, 1,235, 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 1,235,
+ 0, 0, 0, 27, 0, 0, 3, 5, 0, 11, 0, 10, 0, 1, 1, 1, 1,236, 2,235, 1, 0, 1, 0, 2, 86, 0, 0, 0, 7, 0, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,159,140, 32, 13, 64,145,160, 7, 27,196,112, 7, 27,196,112,
+ 13, 64,122,112, 13, 64,136, 64, 68, 65, 84, 65, 0, 0, 0,228, 13, 64,122,112, 0, 0, 0,163, 0, 0, 0, 1, 13, 64,123,128,
0, 0, 0, 0, 84,114, 97,110,115,102,111,114,109, 32, 80,114,111,112,101,114,116,105,101,115, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 73,112,111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 33, 0,167, 0, 62, 1,204, 0, 0, 0, 0, 0,162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65,228, 0, 0, 0, 40,144, 16, 3,153, 0, 0, 0, 1, 0, 0, 0,152,189,177, 2,120,248,164, 2, 79,117,116,112,
+ 0, 0, 0, 0, 0, 33, 0,167, 1, 62, 0,204, 0, 0, 0, 0, 0,162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 0, 0, 0,228, 13, 64,123,128, 0, 0, 0,163, 0, 0, 0, 1, 13, 64,124,144, 13, 64,122,112, 79,117,116,112,
117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82,101,110,100,
101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 62, 1,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,228, 0, 0, 0,
-152,189,177, 2,153, 0, 0, 0, 1, 0, 0, 0,152, 15,132, 2, 40,144, 16, 3, 82,101,110,100,101,114, 0, 0, 0, 0, 0, 0,
+ 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228,
+ 13, 64,124,144, 0, 0, 0,163, 0, 0, 0, 1, 13, 64,125,160, 13, 64,123,128, 82,101,110,100,101,114, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82,101,110,100,101,114, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 1, 0, 0, 62, 1,204, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,228, 0, 0, 0,152, 15,132, 2,153, 0, 0, 0,
- 1, 0, 0, 0,120,113,126, 2,152,189,177, 2, 65,110,105,109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 64, 0, 0, 1, 62, 0,204, 0, 0, 0, 0,
+ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228, 13, 64,125,160, 0, 0, 0,163,
+ 0, 0, 0, 1, 13, 64,126,176, 13, 64,124,144, 65,110,105,109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 2, 0, 0, 62, 1,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,228, 0, 0, 0,120,113,126, 2,153, 0, 0, 0, 1, 0, 0, 0, 40,142, 8, 3,
-152, 15,132, 2, 70,111,114,109, 97,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,128, 0, 0, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228, 13, 64,126,176, 0, 0, 0,163, 0, 0, 0, 1, 13, 64,127,192,
+ 13, 64,125,160, 70,111,114,109, 97,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 82,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,192, 3, 0, 0, 62, 1,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65,228, 0, 0, 0, 40,142, 8, 3,153, 0, 0, 0, 1, 0, 0, 0, 88,234,163, 2,120,113,126, 2, 76,105,110,107,
+ 0, 0, 0, 0, 3,192, 0, 0, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 0, 0, 0,228, 13, 64,127,192, 0, 0, 0,163, 0, 0, 0, 1, 13, 64,128,208, 13, 64,126,176, 76,105,110,107,
32, 97,110,100, 32, 77, 97,116,101,114,105, 97,108,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69,100,105,116,
105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 62, 1,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,228, 0, 0, 0,
- 88,234,163, 2,153, 0, 0, 0, 1, 0, 0, 0, 24, 6, 16, 3, 40,142, 8, 3, 67, 97,109,101,114, 97, 0, 0, 0, 0, 0, 0,
+ 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228,
+ 13, 64,128,208, 0, 0, 0,163, 0, 0, 0, 1, 13, 64,129,224, 13, 64,127,192, 67, 97,109,101,114, 97, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69,100,105,116,105,110,103, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 1, 0, 0, 62, 1,204, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,228, 0, 0, 0, 24, 6, 16, 3,153, 0, 0, 0,
- 1, 0, 0, 0,120,128,150, 2, 88,234,163, 2, 80,114,101,118,105,101,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 64, 0, 0, 1, 62, 0,204, 0, 0, 0, 0,
+ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228, 13, 64,129,224, 0, 0, 0,163,
+ 0, 0, 0, 1, 13, 64,130,240, 13, 64,128,208, 80,114,101,118,105,101,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 1,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,228, 0, 0, 0,120,128,150, 2,153, 0, 0, 0, 1, 0, 0, 0,216, 86,155, 2,
- 24, 6, 16, 3, 76, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228, 13, 64,130,240, 0, 0, 0,163, 0, 0, 0, 1, 13, 64,132, 0,
+ 13, 64,129,224, 76, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 76, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 24,255, 62, 1,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65,228, 0, 0, 0,216, 86,155, 2,153, 0, 0, 0, 1, 0, 0, 0,240, 87,155, 2,120,128,150, 2, 83,104, 97,100,
+ 0, 0, 0, 0, 0, 0,255, 24, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 0, 0, 0,228, 13, 64,132, 0, 0, 0, 0,163, 0, 0, 0, 1, 13, 64,133, 16, 13, 64,130,240, 83,104, 97,100,
111,119, 32, 97,110,100, 32, 83,112,111,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 97,109,112,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48,254,
- 62, 1,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,228, 0, 0, 0,
-240, 87,155, 2,153, 0, 0, 0, 1, 0, 0, 0,168, 24, 16, 3,216, 86,155, 2, 84,101,120,116,117,114,101, 32, 97,110,100, 32,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,254, 48,
+ 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228,
+ 13, 64,133, 16, 0, 0, 0,163, 0, 0, 0, 1, 13, 64,134, 32, 13, 64,132, 0, 84,101,120,116,117,114,101, 32, 97,110,100, 32,
73,110,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72,253, 62, 1,204, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,228, 0, 0, 0,168, 24, 16, 3,153, 0, 0, 0,
- 1, 0, 0, 0,192, 25, 16, 3,240, 87,155, 2, 77, 97,112, 32, 84,111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,253, 72, 1, 62, 0,204, 0, 0, 0, 0,
+ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,228, 13, 64,134, 32, 0, 0, 0,163,
+ 0, 0, 0, 1, 13, 64,135, 48, 13, 64,133, 16, 77, 97,112, 32, 84,111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72,253, 62, 1,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,240, 87,155, 2, 68, 65, 84, 65,228, 0, 0, 0,192, 25, 16, 3,153, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
-168, 24, 16, 3, 84,114, 97,110,115,102,111,114,109, 32, 80,114,111,112,101,114,116,105,101,115, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,253, 72, 1, 62, 0,204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 13, 64,133, 16, 68, 65, 84, 65, 0, 0, 0,228, 13, 64,135, 48, 0, 0, 0,163, 0, 0, 0, 1, 13, 64,136, 64,
+ 13, 64,134, 32, 84,114, 97,110,115,102,111,114,109, 32, 80,114,111,112,101,114,116,105,101,115, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 86,105,101,119, 51,100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,228, 0, 62, 1,204, 0, 0, 0, 0, 0,162, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 0, 3, 0, 0,112,229,163, 2,128, 0, 0, 0, 1, 0, 0, 0, 24, 79,161, 2, 0, 0, 0, 0, 1, 0, 0, 0,
- 51, 51, 51, 63,160, 78,130, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 75, 64, 63,119,102,191, 62,
- 11, 73, 11,191, 0, 0, 0, 0,108,254, 40,191, 94,202,217, 62,246,124, 30,191, 0, 0, 0, 0,218, 33,186,180,184,254, 82, 63,
-193,248, 16, 63, 0, 0, 0, 0, 73,228, 8, 62, 72,158, 33,192,125,148,210,193, 0, 0,128, 63, 68, 75, 64, 63,161,254, 40,191,
-101,221, 58, 54, 0, 0, 0, 0, 10,103,191, 62,178,202,217, 62, 4,255, 82, 63, 0, 0, 0, 0, 20, 73, 11,191, 78,125, 30,191,
-219,248, 16, 63, 0, 0, 0, 0, 3,166, 87,193, 19, 36,114,193,213,230,135, 65, 0, 0,128, 63,121, 48,135, 63, 18, 88,209, 62,
-121, 74, 11, 63, 11, 73, 11, 63, 8,158,109,191, 87, 53,238, 62,150,126, 30, 63,246,124, 30, 63,136,219, 2,181,153,198,102, 63,
- 62,250, 16,191,193,248, 16,191,191,122, 64, 62, 31,197, 48,192,176,109,210, 65,125,148,210, 65,160,194, 8, 63,174, 96,240,190,
- 0, 0, 0, 0, 0, 0, 16,180,218, 0,175, 62,170, 33,199, 62, 18,232, 64, 63, 0, 0,130,181, 53,114, 40, 68,198, 35, 61, 68,
- 59, 79, 84,196, 14,247, 71,194, 30, 81, 40,196, 25,254, 60,196, 44, 45, 84, 68, 28,249, 71, 66, 33,250,179, 63, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,140, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 80, 1,128,191, 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0,225,215,163,188, 0, 0, 0, 0, 54, 75, 64, 63,119,102,191, 62,
- 11, 73, 11,191, 0, 0, 0, 0,108,254, 40,191, 94,202,217, 62,246,124, 30,191, 0, 0, 0, 0,218, 33,186,180,184,254, 82, 63,
-193,248, 16, 63, 0, 0, 0, 0, 73,228, 8, 62, 72,158, 33,192,125,148,210,193, 0, 0,128, 63, 84,252, 83, 63,104, 25,223,190,
-115, 52, 40, 62,119,211,159, 62, 96,183,198, 65, 96,183,198, 65, 0, 0, 0, 0, 1, 0, 0, 0,160, 26,156, 2, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 4, 0, 0, 0, 4, 0, 0,
- 1, 0, 0, 0,251,255, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63,232,205,213, 58, 10,215, 35, 60, 0, 0,250, 67,
-228, 18,218,188, 37,180, 23,188,163,146, 22,189,174, 51,122,190, 29,244, 58,192, 0, 0,224, 54, 56,146, 88, 63,198, 37, 71, 64,
- 20, 0, 0, 0, 7, 0,207, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,255,255, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 8, 24, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,220, 0, 0, 0, 24, 79,161, 2,
-133, 0, 0, 0, 1, 0, 0, 0, 72,188,147, 2,112,229,163, 2, 4, 0, 0, 0, 0, 0, 0, 0,160, 78,130, 2, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 4, 0, 0, 0, 0, 0, 0, 0,160, 68,
- 0, 0, 46,196, 0, 0,100, 67,197,197,136, 55,118,209, 78, 68, 40,222,231,195,172,158, 25, 67, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 67, 0, 0, 40, 66, 0, 0, 0, 69, 0, 0,225, 67, 0, 0, 0, 63, 72,225,154, 63,
- 0, 0, 1, 0, 1, 0, 1, 0,233, 3,235, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 3, 0, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0,255,255, 0, 0, 0, 0, 0, 0,150, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 4, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 72,188,147, 2,132, 0, 0, 0, 1, 0, 0, 0,176,233,163, 2, 24, 79,161, 2,
- 2, 0, 0, 0, 51, 51, 51, 63,160, 78,130, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,122, 67,205,204,204,189,205,204,140, 63, 0, 0,128, 63, 0, 0,122, 67, 0, 0,160,192,
- 0, 0,160, 64, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0,235, 2, 0, 0, 16, 0, 0, 0,168, 3, 0, 0, 0, 0, 0, 0,
- 16, 0, 0, 0, 16, 0, 0, 0,168, 3, 0, 0, 16, 0, 0, 0,235, 2, 0, 0, 10,215, 35, 60, 10,215, 35, 60, 0, 96,106, 70,
- 0, 0,122, 68, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 43,153, 2,
+ 0, 0, 0, 0, 0, 0, 0,228, 1, 62, 0,204, 0, 0, 0, 0, 0, 34, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 0, 0, 0,228, 13, 64,136, 64, 0, 0, 0,163, 0, 0, 0, 1, 0, 0, 0, 0, 13, 64,135, 48, 80,114,101,118,
+105,101,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86,105,101,119,
+ 51,100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 1,116,
+ 1,152, 1, 76, 0, 4, 0, 0, 2, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 3, 4,
+ 7,159,140, 32, 0, 0, 0,137, 0, 0, 0, 1, 13, 64,137, 80, 0, 0, 0, 0, 0, 0, 0, 1, 63, 51, 51, 51, 13, 64,121,112,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 51,160, 0, 0,191,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 51,162, 33,104, 0, 0, 0, 0,
+ 60, 41,199, 78,191,230,129,210,193, 30,230,225, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 63,127,255,255, 0, 0, 0, 0, 0, 0, 0, 0,191,128, 0, 1, 51,160, 0, 0, 0, 0, 0, 0,
+188, 41,199, 79,193, 30,230,226, 63,230,129,216, 63,128, 0, 0, 63,157, 86,198, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 61, 60, 82,166, 60,131, 2, 13, 63,153,213,185, 63,128, 0, 0,177,110,137,192, 63, 79, 65,252,179,194,218,164,179,162, 33,104,
+ 62,240, 79, 64,191,166, 74, 13,190, 50,105, 0, 65, 30,230,225, 63, 80, 67,132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 51,208, 0, 0, 63,158, 26, 71,179,128, 0, 0, 58, 96, 80, 64, 63, 81,241,110,190, 24, 70, 67,189,169, 29,122,
+189, 29,107, 44, 60,107,183,198, 62, 34,200, 16, 61,203, 63,156, 63,157, 86,198, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 63, 79, 65,252, 0, 0, 0, 0, 0, 0, 0, 0,189, 60, 82,166,188,131, 1,237,191,153,213,185,191,128, 0, 0,
+128, 0, 0, 0,128, 0, 0, 0,193, 65,194,239,128, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 51,160, 0, 0,191,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 51,162, 33,104, 0, 0, 0, 0,
+ 60, 41,199, 78,191,230,129,210,193, 30,230,225, 63,128, 0, 0, 63, 53, 4,244,191, 53, 4,243, 0, 0, 0, 0, 0, 0, 0, 0,
+ 65, 21,104,229, 63,128, 0, 0, 0, 0, 13,255, 0, 2, 0, 0, 7,159,156, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 1, 0, 0,255,251, 0, 0,
+ 66, 12, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 59, 88,186,208, 60, 35,215, 10, 67,250, 0, 0,188,218, 18,228,188, 23,180, 37,
+189, 22,146,163, 64,198, 40, 85,192,173,239,178, 54,224, 0, 0, 63, 88,146, 56, 64, 71, 37,198, 0, 20, 0, 0, 0, 7, 0,207,
+ 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,255,255, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 8,
+ 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,220, 13, 64,137, 80, 0, 0, 0,142,
+ 0, 0, 0, 1, 13, 64,138, 96, 7,159,140, 32, 0, 0, 0, 4, 0, 0, 0, 0, 13, 64,121,112, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 4, 0, 0, 0, 0, 68,160, 0, 0,196, 46, 0, 0,
+ 67,100, 0, 0, 55,136,197,197, 68, 78,209,118,195,231,222, 40, 67, 25,158,172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 67,128, 0, 0, 66, 40, 0, 0, 69, 0, 0, 0, 67,225, 0, 0, 63, 0, 0, 0, 63,154,225, 72, 0, 0, 0, 1,
+ 0, 1, 0, 1, 3,233, 2,235, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 2,
+ 0, 0, 0, 3, 0, 0, 0, 0,255,255, 0, 0, 0, 0, 0, 0, 1,150, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0,
+ 68, 65, 84, 65, 0, 0, 1, 88, 13, 64,138, 96, 0, 0, 0,141, 0, 0, 0, 1, 13, 64,139,224, 13, 64,137, 80, 0, 0, 0, 2,
+ 63, 51, 51, 51, 13, 64,121,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 67,122, 0, 0,189,204,204,205, 63,140,204,205, 63,128, 0, 0, 67,122, 0, 0,192,160, 0, 0, 64,160, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 2,235, 0, 0, 0, 16, 0, 0, 3,168, 0, 0, 0, 0, 0, 0, 0, 16,
+ 0, 0, 0, 16, 0, 0, 3,168, 0, 0, 0, 16, 0, 0, 2,235, 60, 35,215, 10, 60, 35,215, 10, 70,106, 96, 0, 68,122, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,159,184, 32, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0,
+ 0, 0, 0, 0, 0, 0, 79, 66, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 67,122, 0, 0,189,204,204,205, 63,140,204,205, 68, 65, 84, 65, 0, 0, 0,128, 13, 64,139,224, 0, 0, 0,148, 0, 0, 0, 1,
+ 13, 64,140,144, 13, 64,138, 96, 0, 0, 0, 9, 63, 51, 51, 51, 13, 64,121,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 13, 64,194,224, 0, 0, 0, 0, 0, 0, 0, 62, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61,204,204,205, 0, 0, 0, 5, 0, 0, 0, 17,
+ 0, 0, 2,225, 0, 0, 2,227, 0, 0, 0, 5, 0, 0, 0, 17, 0, 0, 2,207, 0, 0, 2,227, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 0, 0, 1, 8, 13, 64,140,144, 0, 0, 0,146, 0, 0, 0, 1, 13, 64,141,192, 13, 64,139,224, 0, 0, 0, 6,
+ 63, 51, 51, 51, 13, 64,121,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67,128, 0, 0,
+ 0, 0, 0, 0, 67,128, 0, 0,190,120, 0, 0, 63,159, 0, 0,190,242, 0, 0, 63,188,128, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,124,
+ 0, 0, 0, 0, 0, 0, 1,242, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+ 0, 0, 1, 8, 13, 64,141,192, 0, 0, 0,145, 0, 0, 0, 1, 13, 64,142,240, 13, 64,140,144, 0, 0, 0, 3, 63, 51, 51, 51,
+ 13, 64,121,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67,182, 0, 0,195,209, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 67,182, 0, 0,195,190, 0, 0,181, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0,
+ 0, 0, 1,124, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 1,124, 0, 0, 0, 0,
+ 0, 0, 1,124,195,190, 0, 0,195,190, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 1, 0, 1,
+ 0, 1, 0, 1, 1,108, 1,124, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 3,142, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,176,
+ 13, 64,142,240, 0, 0, 0,230, 0, 0, 0, 1, 13, 64,143,208, 13, 64,141,192, 0, 0, 0, 11, 63, 51, 51, 51, 13, 64,121,112,
+192,128, 0, 0, 67,122, 0, 0,192,128, 0, 0, 67,127, 0, 0,192,128, 0, 0, 66, 72, 0, 0,192,128, 0, 0, 67,127, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,124, 0, 0, 0, 0, 0, 0, 0, 16,
+ 0, 0, 0, 0, 0, 0, 1,124, 0, 0, 0, 16, 0, 0, 1,124, 63,128, 0, 0, 67,129,128, 0, 70,250, 0, 0, 67,129,128, 0,
+ 61,204,204,205, 65, 32, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+ 0, 0, 0,180, 13, 64,143,208, 0, 0, 0,147, 0, 0, 0, 1, 13, 64,144,176, 13, 64,142,240, 0, 0, 0, 13, 63, 51, 51, 51,
+ 13, 64,121,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0,
+ 68,122, 0, 0, 0, 0, 0, 0, 68,122, 0, 0,192,160, 0, 0, 66,130, 0, 0, 0, 0, 0, 0, 67,182, 0, 0, 0, 0, 1,108,
+ 0, 0, 1,124, 0, 0, 0, 0, 0, 0, 1,124, 0, 0, 0,196, 0, 0, 1,108, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0,196,
+ 0, 0, 1,108, 0, 0, 0, 16, 0, 0, 1,124, 0, 0, 0, 0, 0, 0, 0, 0, 68,122, 0, 0, 68,122, 0, 0, 61,204,204,205,
+ 66, 72, 0, 0, 0, 10, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,192, 13, 64,144,176, 0, 0, 0,240, 0, 0, 0, 1, 13, 64,145,160, 13, 64,143,208,
+ 0, 0, 0, 12, 63, 51, 51, 51, 13, 64,121,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,191, 0, 0, 0,
+ 66, 2, 0, 0,196,122, 0, 0, 0, 0, 0, 0,191, 0, 0, 0, 66, 2, 0, 0,194,150, 0, 0, 64,160, 0, 0, 0, 0, 1,108,
+ 0, 0, 1,124, 0, 0, 0, 0, 0, 0, 2, 14, 0, 0, 0,128, 0, 0, 1,108, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0,128,
+ 0, 0, 1,108, 0, 0, 0, 16, 0, 0, 2, 14, 0, 0, 0, 0, 0, 0, 0, 0, 70,250, 0, 0, 68,122, 0, 0, 60, 35,215, 10,
+ 66, 72, 0, 0, 0, 10, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 1,200,
+ 13, 64,145,160, 0, 0, 0,144, 0, 0, 0, 1, 0, 0, 0, 0, 13, 64,144,176, 0, 0, 0, 5, 63, 51, 51, 51, 13, 64,121,112,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 83, 97,118,101, 32, 70,105,108,
+101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 85,115,101,114,115, 47,116,111,110, 47, 68,101,115,107,116,
+111,112, 47, 0,114, 47,114,101,108,101, 97,115,101, 47,100, 97,116, 97,102,105,108,101,115, 47, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+112,114,101,118,105,101,119, 46, 98,108,101,110,100, 0, 0, 0, 98,108,101,110,100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 46, 0, 0, 0, 0, 1, 85, 0, 1, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 0, 0, 5, 96, 7,159,144, 32,
+ 0, 0, 0,135, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67,112,114,101,118,105,101,
+119, 0, 0, 99,101,110,101, 46, 48, 48, 49, 0, 0, 0, 0, 0, 0, 1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,159,156, 32,
+ 13, 64,193, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 64,147,144, 13, 64,155, 16, 13, 64,147,144, 62, 18, 2, 17, 62,117,122,104,
+191,188,208, 62,188,211,197,192, 65, 59,229, 76, 64,184,106,208,188,211,197,192, 65, 59,229, 76, 64,184,106,208,188,211,197,192,
+ 65, 59,229, 76, 64,184,106,208, 0, 0, 0, 2, 62,214,245, 65, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 13, 64,155, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 64,155,176,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
+ 0, 0, 0, 1, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,100, 0, 0, 0,100, 0, 0, 0, 1, 0, 0, 0, 0,
+ 63,128, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,128, 1,224, 0, 60, 0, 32, 0, 0,
+ 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 25, 0,141, 2, 88, 2, 88, 0, 2, 0, 2, 0, 0, 0, 24, 0, 4, 0, 0, 0, 0,
+ 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 32, 0, 0, 0, 0, 0, 64, 0, 0, 0, 5, 0, 25, 0, 10, 0, 0, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 64,158, 64, 13, 64,158, 64, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 2,
+ 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,122, 67,205,204,204,189,205,204,140, 63, 68, 65, 84, 65,120, 0, 0, 0,176,233,163, 2,139, 0, 0, 0,
- 1, 0, 0, 0,144,212,166, 2, 72,188,147, 2, 9, 0, 0, 0, 51, 51, 51, 63,160, 78,130, 2, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,192,199,156, 2, 0, 0, 0, 0, 62, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 12, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,205,204,204, 61, 5, 0, 0, 0,
- 17, 0, 0, 0,225, 2, 0, 0,227, 2, 0, 0, 5, 0, 0, 0, 17, 0, 0, 0,207, 2, 0, 0,227, 2, 0, 0, 68, 65, 84, 65,
- 16, 1, 0, 0,144,212,166, 2,137, 0, 0, 0, 1, 0, 0, 0,152,235,163, 2,176,233,163, 2, 6, 0, 0, 0, 51, 51, 51, 63,
-160, 78,130, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0,
- 0, 0,128, 67, 0, 0,120,190, 0, 0,159, 63, 0, 0,242,190, 0,128,188, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,124, 1, 0, 0, 0, 0, 0, 0,
-242, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 47, 98, 97, 99,107, 98,117,102, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65,208, 1, 0, 0,152,235,163, 2,136, 0, 0, 0, 1, 0, 0, 0,152,237,163, 2,144,212,166, 2, 3, 0, 0, 0,
- 51, 51, 51, 63,160, 78,130, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,182, 67,
- 0, 0,209,195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,182, 67, 0, 0,190,195, 0, 0, 0,181, 0, 0, 0, 0, 16, 0, 0, 0,
- 0, 0, 0, 0,124, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0,124, 1, 0, 0,
- 0, 0, 0, 0,124, 1, 0, 0, 0, 0,190,195, 0, 0,190,195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
- 1, 0, 1, 0, 1, 0, 1, 0,108, 1,124, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,142, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47,116,109,112, 47, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65,176, 0, 0, 0,152,237,163, 2,216, 0, 0, 0, 1, 0, 0, 0,120,238,163, 2,152,235,163, 2,
- 11, 0, 0, 0, 51, 51, 51, 63,160, 78,130, 2, 0, 0,128,192, 0, 0,122, 67, 0, 0,128,192, 0, 0,127, 67, 0, 0,128,192,
- 0, 0, 72, 66, 0, 0,128,192, 0, 0,127, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-124, 1, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0,124, 1, 0, 0, 16, 0, 0, 0,124, 1, 0, 0, 0, 0,128, 63,
- 0,128,129, 67, 0, 0,250, 70, 0,128,129, 67,205,204,204, 61, 0, 0, 32, 65, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,180, 0, 0, 0,120,238,163, 2,138, 0, 0, 0, 1, 0, 0, 0, 96,239,163, 2,
-152,237,163, 2, 13, 0, 0, 0, 51, 51, 51, 63,160, 78,130, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,122, 68, 0, 0, 0, 0, 0, 0,122, 68, 0, 0,160,192, 0, 0,130, 66,
- 0, 0, 0, 0, 0, 0,182, 67,108, 1, 0, 0,124, 1, 0, 0, 0, 0, 0, 0,124, 1, 0, 0,196, 0, 0, 0,108, 1, 0, 0,
- 0, 0, 0, 0, 16, 0, 0, 0,196, 0, 0, 0,108, 1, 0, 0, 16, 0, 0, 0,124, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,122, 68, 0, 0,122, 68,205,204,204, 61, 0, 0, 72, 66, 10, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,192, 0, 0, 0, 96,239,163, 2,226, 0, 0, 0,
- 1, 0, 0, 0, 0,191,126, 2,120,238,163, 2, 12, 0, 0, 0, 51, 51, 51, 63,160, 78,130, 2, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,191, 0, 0, 2, 66, 0, 0,122,196, 0, 0, 0, 0, 0, 0, 0,191, 0, 0, 2, 66,
- 0, 0,150,194, 0, 0,160, 64,108, 1, 0, 0,124, 1, 0, 0, 0, 0, 0, 0, 14, 2, 0, 0,128, 0, 0, 0,108, 1, 0, 0,
- 0, 0, 0, 0, 16, 0, 0, 0,128, 0, 0, 0,108, 1, 0, 0, 16, 0, 0, 0, 14, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,250, 70, 0, 0,122, 68, 10,215, 35, 60, 0, 0, 72, 66, 10, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65,120, 1, 0, 0, 0,191,126, 2,135, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 96,239,163, 2,
- 5, 0, 0, 0, 51, 51, 51, 63,160, 78,130, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 86, 0, 0, 0, 83, 97,118,101, 32, 70,105,108,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 85,115,101,
-114,115, 47,116,111,110, 47, 68,101,115,107,116,111,112, 47, 0,114, 47,114,101,108,101, 97,115,101, 47,100, 97,116, 97,102,105,
-108,101,115, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,112,114,101,118,
-105,101,119, 46, 98,108,101,110,100, 0, 0, 0, 98,108,101,110,100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 46, 0, 0, 0, 0, 0, 85, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 0, 0, 20, 5, 0, 0,240, 36,130, 2,126, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67,112,114,101,118,105,101,119, 0, 0, 99,
-101,110,101, 46, 48, 48, 49, 0, 0, 0, 0, 0, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0,160, 26,156, 2,104, 7, 16, 3,
- 0, 0, 0, 0, 0, 0, 0, 0, 64,116, 8, 3,104,109, 8, 3,224,116, 8, 3, 84,213,149, 63,126,238, 7,193, 36,109,142, 63,
- 52, 84,142, 55,194, 12,188,192, 28, 38, 71, 64, 52, 84,142, 55,194, 12,188,192, 28, 38, 71, 64, 52, 84,142, 55,194, 12,188,192,
- 28, 38, 71, 64, 0, 4, 0, 0, 65,245,214, 62, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 96,251,152, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,136, 22,162, 2, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 20, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,100, 0, 0, 0,100, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 63,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 2,224, 1, 60, 0, 32, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 25, 0,141, 0, 88, 2, 88, 2,100, 0,100, 0, 2, 0, 2, 0, 0, 0, 24, 0, 4, 0, 0, 0, 0, 0, 90, 0, 16, 0,
- 0, 0, 32, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 5, 0, 25, 0, 10, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 40,172,132, 2, 40,172,132, 2, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 2, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 47, 98, 97,
- 99,107, 98,117,102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47,116,109,112,
- 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 76,204,205,
+ 63, 76,204,205, 63, 76,204,205, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62,128, 0, 0, 0, 0, 0, 6,
+ 0, 0, 0, 16, 63,128, 0, 0, 63,128, 0, 0, 2,173, 0, 95, 63,217,153,154, 0, 0,172, 68, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 7, 26, 32,144, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 13, 64,156,160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 1, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 28, 13, 64,147,144, 0, 0, 0,118, 0, 0, 0, 1, 13, 64,147,224,
+ 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 96, 0,227, 7,159,156, 32, 68, 65, 84, 65, 0, 0, 0, 28,
+ 13, 64,147,224, 0, 0, 0,118, 0, 0, 0, 1, 13, 64,148, 48, 13, 64,147,144, 0, 0, 8, 0, 0, 0, 0, 2, 0, 0, 0, 0,
+ 46,224, 1,169, 7,159,248, 32, 68, 65, 84, 65, 0, 0, 0, 28, 13, 64,148, 48, 0, 0, 0,118, 0, 0, 0, 1, 13, 64,148,128,
+ 13, 64,147,224, 0, 0, 0, 33, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1,122, 7,159,172, 32, 68, 65, 84, 65, 0, 0, 0, 28,
+ 13, 64,148,128, 0, 0, 0,118, 0, 0, 0, 1, 13, 64,148,208, 13, 64,148, 48, 0, 0, 4, 14, 0, 0, 0, 1, 0, 0, 0, 0,
+ 1, 2, 1,220, 7,159,168, 32, 68, 65, 84, 65, 0, 0, 0, 28, 13, 64,148,208, 0, 0, 0,118, 0, 0, 0, 1, 13, 64,149, 32,
+ 13, 64,148,128, 0, 0, 4, 0, 0, 0, 0, 2, 0, 0, 0, 0, 1, 48, 1, 67, 7,159,244, 32, 68, 65, 84, 65, 0, 0, 0, 28,
+ 13, 64,149, 32, 0, 0, 0,118, 0, 0, 0, 1, 13, 64,149,112, 13, 64,148,208, 0, 0, 0, 32, 0, 0, 0, 4, 0, 0, 16, 0,
+ 46,224, 1, 49, 7,159,208, 32, 68, 65, 84, 65, 0, 0, 0, 28, 13, 64,149,112, 0, 0, 0,118, 0, 0, 0, 1, 13, 64,149,192,
+ 13, 64,149, 32, 0, 0, 0, 33, 0, 0, 0, 2, 0, 0, 0, 0, 1, 1, 1,122, 7,159,212, 32, 68, 65, 84, 65, 0, 0, 0, 28,
+ 13, 64,149,192, 0, 0, 0,118, 0, 0, 0, 1, 13, 64,150, 16, 13, 64,149,112, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 20, 0,
+ 46,224, 0, 52, 7,159,204, 32, 68, 65, 84, 65, 0, 0, 0, 28, 13, 64,150, 16, 0, 0, 0,118, 0, 0, 0, 1, 13, 64,150, 96,
+ 13, 64,149,192, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 20, 0, 46,224, 0, 47, 7,159,200, 32, 68, 65, 84, 65, 0, 0, 0, 28,
+ 13, 64,150, 96, 0, 0, 0,118, 0, 0, 0, 1, 13, 64,150,176, 13, 64,150, 16, 0, 0, 0, 2, 0, 0, 0, 4, 0, 0, 20, 0,
+ 46,224, 1, 85, 7,159,196, 32, 68, 65, 84, 65, 0, 0, 0, 28, 13, 64,150,176, 0, 0, 0,118, 0, 0, 0, 1, 13, 64,151, 0,
+ 13, 64,150, 96, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 20, 0, 46,224, 0, 10, 7,159,192, 32, 68, 65, 84, 65, 0, 0, 0, 28,
+ 13, 64,151, 0, 0, 0, 0,118, 0, 0, 0, 1, 13, 64,151, 80, 13, 64,150,176, 0, 0, 0, 1, 0, 0, 0, 4, 0, 0, 20, 0,
+ 46,224, 1,113, 7,159,188, 32, 68, 65, 84, 65, 0, 0, 0, 28, 13, 64,151, 80, 0, 0, 0,118, 0, 0, 0, 1, 13, 64,151,160,
+ 13, 64,151, 0, 0, 0, 0, 4, 0, 0, 0, 11, 0, 0, 0, 0, 1, 1, 1,147, 7,159,240, 32, 68, 65, 84, 65, 0, 0, 0, 28,
+ 13, 64,151,160, 0, 0, 0,118, 0, 0, 0, 1, 13, 64,151,240, 13, 64,151, 80, 0, 0, 4, 14, 0, 0, 0, 3, 0, 0, 0, 0,
+ 1, 2, 1,220, 7,159,164, 32, 68, 65, 84, 65, 0, 0, 0, 28, 13, 64,151,240, 0, 0, 0,118, 0, 0, 0, 1, 13, 64,152, 64,
+ 13, 64,151,160, 0, 0, 0, 64, 0, 0, 0, 1, 0, 0, 16, 0, 0,255, 2, 91, 7,159,232, 32, 68, 65, 84, 65, 0, 0, 0, 28,
+ 13, 64,152, 64, 0, 0, 0,118, 0, 0, 0, 1, 13, 64,152,144, 13, 64,151,240, 0, 0, 0, 64, 0, 0, 0, 2, 0, 0, 0, 0,
+ 0,253, 1,180, 7,159,236, 32, 68, 65, 84, 65, 0, 0, 0, 28, 13, 64,152,144, 0, 0, 0,118, 0, 0, 0, 1, 13, 64,152,224,
+ 13, 64,152, 64, 0, 0, 0, 32, 0, 0, 0, 15, 0, 0, 0, 0, 1, 0, 1,122, 7,159,252, 32, 68, 65, 84, 65, 0, 0, 0, 28,
+ 13, 64,152,224, 0, 0, 0,118, 0, 0, 0, 1, 13, 64,153, 48, 13, 64,152,144, 0, 0, 0, 16, 0, 0, 0, 1, 0, 0, 0, 0,
+ 1, 1, 1,123, 7,159,228, 32, 68, 65, 84, 65, 0, 0, 0, 28, 13, 64,153, 48, 0, 0, 0,118, 0, 0, 0, 1, 13, 64,153,128,
+ 13, 64,152,224, 0, 0, 0, 1, 0, 0, 0, 5, 0, 0, 0, 0, 1, 0, 1,123, 7,159,216, 32, 68, 65, 84, 65, 0, 0, 0, 28,
+ 13, 64,153,128, 0, 0, 0,118, 0, 0, 0, 1, 13, 64,153,208, 13, 64,153, 48, 0, 0, 4, 28, 0, 0, 0, 4, 0, 0, 20, 0,
+ 46,224, 1,204, 7,159,176, 32, 68, 65, 84, 65, 0, 0, 0, 28, 13, 64,153,208, 0, 0, 0,118, 0, 0, 0, 1, 13, 64,154, 32,
+ 13, 64,153,128, 0, 0, 0, 2, 0, 0, 0, 6, 0, 0, 0, 0, 1, 1, 1,122, 7,159,224, 32, 68, 65, 84, 65, 0, 0, 0, 28,
+ 13, 64,154, 32, 0, 0, 0,118, 0, 0, 0, 1, 13, 64,154,112, 13, 64,153,208, 0, 0, 4, 28, 0, 0, 0, 5, 0, 0, 20, 0,
+ 46,224, 2,229, 7,159,184, 32, 68, 65, 84, 65, 0, 0, 0, 28, 13, 64,154,112, 0, 0, 0,118, 0, 0, 0, 1, 13, 64,154,192,
+ 13, 64,154, 32, 0, 0, 0, 8, 0, 0, 0, 21, 0, 0, 0, 0, 0,204, 1,147, 7,159,220, 32, 68, 65, 84, 65, 0, 0, 0, 28,
+ 13, 64,154,192, 0, 0, 0,118, 0, 0, 0, 1, 13, 64,155, 16, 13, 64,154,112, 0, 0, 4, 28, 0, 0, 0, 6, 0, 0, 20, 0,
+ 46,224, 1, 9, 7,159,180, 32, 68, 65, 84, 65, 0, 0, 0, 28, 13, 64,155, 16, 0, 0, 0,118, 0, 0, 0, 1, 0, 0, 0, 0,
+ 13, 64,154,192, 0, 0, 13,223, 0, 0, 0, 3, 0, 0, 4, 0, 46,224, 0,227, 7,159,160, 32, 68, 65, 84, 65, 0, 0, 0, 40,
+ 13, 64,155, 96, 0, 0, 0,117, 0, 0, 0, 1, 1, 44, 0, 0, 0, 1, 0, 2, 0, 1, 0, 2, 0, 0, 0, 1, 1,244, 0,200,
+ 0,100, 0, 20, 0, 0, 39, 16, 61,204,204,205, 65,240, 0, 0, 64, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,188, 13, 64,155,176,
+ 0, 0, 0,132, 0, 0, 0, 1, 0, 1, 0, 1, 63, 76,204,205, 66,180, 0, 0, 0, 9, 0, 1, 63,128, 0, 0, 58,131, 18,111,
+ 0, 32, 0, 32, 0, 32, 0, 1, 63,128, 0, 0, 63,128, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 7, 0, 5, 0, 5,255,255, 0, 50, 0, 50, 0, 10, 0, 0, 0, 50, 0,100, 0, 10, 0, 0, 0, 50, 0, 50,
+ 0, 10, 0, 0, 0, 50, 0, 50, 0, 10, 0, 0, 0, 50, 0, 50, 0, 10, 0, 0, 0, 50, 0, 50, 0, 10, 0, 0, 0, 50, 0, 50,
+ 0, 10, 0, 0, 62,128, 0, 0, 0, 0, 0, 0, 56,209,183, 23, 61,204,204,205, 0, 0, 0, 0, 0, 0, 0, 50, 60, 35,215, 10,
+ 60, 35,215, 10, 63,166,102,102, 63,192, 0, 0, 66, 52, 0, 0, 63,122,225, 72, 61,204,204,205, 0, 3, 0, 1, 2, 0, 1, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 1, 8, 13, 64,156,160, 0, 0, 1, 32, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0,
+ 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0,
+ 0, 6, 0, 0, 67,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0,191,127, 10, 78, 61,177, 44, 36,191,127, 10, 78, 61,177, 43,213,
+ 13, 64,157,208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,205,204, 76, 63,205,204, 76, 63,205,204, 76, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,128, 62, 6, 0, 0, 0, 16, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 68,172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0,200, 25,130, 2, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 96,152, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0,
+ 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 0, 0, 0, 72, 13, 64,157,208, 0, 0, 1, 30, 0, 0, 0, 6, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 61,204,204,205, 63,121,188, 86, 0, 0, 0, 0, 62,153,153,154, 63, 75, 60, 96, 0, 0, 0, 0, 63, 51, 51, 51, 62, 83, 14,128,
+ 0, 0, 0, 0, 63,102,102,102, 60,200,117, 79, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+ 0, 0, 0, 72, 13, 64,158, 64, 0, 0, 0,123, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 49, 32, 82,101,110,100,101,114,
+ 76, 97,121,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 64,195,240,
+ 0, 15,255,255, 0, 0, 0, 0, 0, 0,127,255, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 73, 77, 0, 0, 1,128,
+ 13, 64,158,176, 0, 0, 0, 32, 0, 0, 0, 1, 7, 30,176,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, 77, 73,109,
+ 97,103,101, 46, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 53, 0, 0, 0, 0,
+ 85,110,116,105,116,108,101,100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 28, 0, 0, 0,
- 64,116, 8, 3,110, 0, 0, 0, 1, 0, 0, 0,144,116, 8, 3, 0, 0, 0, 0, 33, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 88, 1, 72, 2,224, 49,164, 2, 68, 65, 84, 65, 28, 0, 0, 0,144,116, 8, 3,110, 0, 0, 0, 1, 0, 0, 0,224,116, 8, 3,
- 64,116, 8, 3, 14, 4, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 41, 2,231, 1, 96, 46,164, 2, 68, 65, 84, 65, 28, 0, 0, 0,
-224,116, 8, 3,110, 0, 0, 0, 1, 0, 0, 0, 48,117, 8, 3,144,116, 8, 3, 0, 4, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0,
-182, 1, 21, 2, 32,170,161, 2, 68, 65, 84, 65, 28, 0, 0, 0, 48,117, 8, 3,110, 0, 0, 0, 1, 0, 0, 0,128,117, 8, 3,
-224,116, 8, 3, 32, 0, 0, 0, 4, 0, 0, 0, 0, 16, 0, 0,224, 46, 49, 1,168,186, 32, 3, 68, 65, 84, 65, 28, 0, 0, 0,
-128,117, 8, 3,110, 0, 0, 0, 1, 0, 0, 0,208,117, 8, 3, 48,117, 8, 3, 33, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0,
- 88, 1, 72, 2, 40,190, 32, 3, 68, 65, 84, 65, 28, 0, 0, 0,208,117, 8, 3,110, 0, 0, 0, 1, 0, 0, 0, 32,118, 8, 3,
-128,117, 8, 3, 2, 0, 0, 0, 2, 0, 0, 0, 0, 20, 0, 0,224, 46, 52, 0, 40,183, 32, 3, 68, 65, 84, 65, 28, 0, 0, 0,
- 32,118, 8, 3,110, 0, 0, 0, 1, 0, 0, 0,112,118, 8, 3,208,117, 8, 3, 2, 0, 0, 0, 3, 0, 0, 0, 0, 20, 0, 0,
-224, 46, 47, 0,168,179, 32, 3, 68, 65, 84, 65, 28, 0, 0, 0,112,118, 8, 3,110, 0, 0, 0, 1, 0, 0, 0,192,118, 8, 3,
- 32,118, 8, 3, 2, 0, 0, 0, 4, 0, 0, 0, 0, 20, 0, 0,224, 46, 85, 1, 40,176, 32, 3, 68, 65, 84, 65, 28, 0, 0, 0,
-192,118, 8, 3,110, 0, 0, 0, 1, 0, 0, 0, 16,119, 8, 3,112,118, 8, 3, 1, 0, 0, 0, 3, 0, 0, 0, 0, 20, 0, 0,
-174, 1,139, 0, 88, 50,153, 2, 68, 65, 84, 65, 28, 0, 0, 0, 16,119, 8, 3,110, 0, 0, 0, 1, 0, 0, 0, 96,119, 8, 3,
-192,118, 8, 3, 1, 0, 0, 0, 4, 0, 0, 0, 0, 20, 0, 0,189, 2, 23, 2,216, 46,153, 2, 68, 65, 84, 65, 28, 0, 0, 0,
- 96,119, 8, 3,110, 0, 0, 0, 1, 0, 0, 0,176,119, 8, 3, 16,119, 8, 3, 4, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0,
-254, 1,152, 1,160,166,161, 2, 68, 65, 84, 65, 28, 0, 0, 0,176,119, 8, 3,110, 0, 0, 0, 1, 0, 0, 0, 0,120, 8, 3,
- 96,119, 8, 3, 14, 4, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 41, 2,231, 1,224, 42,164, 2, 68, 65, 84, 65, 28, 0, 0, 0,
- 0,120, 8, 3,110, 0, 0, 0, 1, 0, 0, 0, 80,120, 8, 3,176,119, 8, 3, 64, 0, 0, 0, 13, 0, 0, 0, 0, 16, 0, 0,
-252, 1,162, 2,160,159,161, 2, 68, 65, 84, 65, 28, 0, 0, 0, 80,120, 8, 3,110, 0, 0, 0, 1, 0, 0, 0,160,120, 8, 3,
- 0,120, 8, 3, 64, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0,249, 1,199, 1, 32,163,161, 2, 68, 65, 84, 65, 28, 0, 0, 0,
-160,120, 8, 3,110, 0, 0, 0, 1, 0, 0, 0,240,120, 8, 3, 80,120, 8, 3, 32, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0,
-253, 1,124, 1,120, 3,131, 2, 68, 65, 84, 65, 28, 0, 0, 0,240,120, 8, 3,110, 0, 0, 0, 1, 0, 0, 0, 64,121, 8, 3,
-160,120, 8, 3, 16, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,254, 1,125, 1, 32,156,161, 2, 68, 65, 84, 65, 28, 0, 0, 0,
- 64,121, 8, 3,110, 0, 0, 0, 1, 0, 0, 0,144,121, 8, 3,240,120, 8, 3, 1, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0,
-175, 1, 12, 2,168,193, 32, 3, 68, 65, 84, 65, 28, 0, 0, 0,144,121, 8, 3,110, 0, 0, 0, 1, 0, 0, 0,224,121, 8, 3,
- 64,121, 8, 3, 28, 4, 0, 0, 4, 0, 0, 0, 0, 20, 0, 0,104, 2,179, 2,224, 8, 16, 3, 68, 65, 84, 65, 28, 0, 0, 0,
-224,121, 8, 3,110, 0, 0, 0, 1, 0, 0, 0, 56,246,163, 2,144,121, 8, 3, 2, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0,
-254, 1,125, 1,160,152,161, 2, 68, 65, 84, 65, 28, 0, 0, 0, 56,246,163, 2,110, 0, 0, 0, 1, 0, 0, 0,160,126,152, 2,
-224,121, 8, 3, 28, 4, 0, 0, 5, 0, 0, 0, 0, 20, 0, 0, 69, 2, 88, 4, 88, 43,153, 2, 68, 65, 84, 65, 28, 0, 0, 0,
-160,126,152, 2,110, 0, 0, 0, 1, 0, 0, 0,192,125,152, 2, 56,246,163, 2, 8, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0,
-194, 1,152, 1, 32,149,161, 2, 68, 65, 84, 65, 28, 0, 0, 0,192,125,152, 2,110, 0, 0, 0, 1, 0, 0, 0,104,109, 8, 3,
-160,126,152, 2, 28, 4, 0, 0, 6, 0, 0, 0, 0, 20, 0, 0,224, 2,142, 1,216, 39,153, 2, 68, 65, 84, 65, 28, 0, 0, 0,
-104,109, 8, 3,110, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,192,125,152, 2,223, 5, 0, 0, 7, 0, 0, 0, 0, 4, 0, 0,
-137, 2,135, 1,160, 26,156, 2, 68, 65, 84, 65, 40, 0, 0, 0, 96,251,152, 2,109, 0, 0, 0, 1, 0, 0, 0, 44, 1, 0, 0,
- 1, 0, 2, 0, 1, 0, 2, 0, 0, 0, 1, 0,244, 1,200, 0,100, 0, 20, 0, 16, 39, 0, 0,205,204,204, 61, 0, 0,240, 65,
- 0, 0, 0, 64, 68, 65, 84, 65,244, 0, 0, 0,136, 22,162, 2,123, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0,205,204, 76, 63,
- 0, 0,180, 66, 9, 0, 1, 0, 0, 0,128, 63,111, 18,131, 58, 32, 0, 32, 0, 32, 0, 1, 0, 0, 0,128, 63, 0, 0,128, 63,
- 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 5, 0, 5, 0,255,255, 50, 0, 50, 0,
- 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 0,100, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 0, 50, 0,
- 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 0, 50, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 0, 50, 0,
- 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 0, 50, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 0, 50, 0,
- 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 62, 0, 0, 0, 0, 23,183,209, 56,205,204,204, 61, 0, 0, 0, 0,
- 0, 0, 50, 0, 10,215, 35, 60, 10,215, 35, 60,102,102,166, 63, 0, 0,192, 63, 0, 0, 52, 66, 72,225,122, 63,205,204,204, 61,
- 3, 0, 0, 1, 2, 0, 1, 0, 0, 0, 0, 0, 68, 65, 84, 65, 8, 1, 0, 0, 0, 96,152, 2, 18, 1, 0, 0, 1, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0, 0, 0, 0, 0,128, 63, 6, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63, 78, 10,127,191, 36, 44,177, 61,
- 78, 10,127,191,213, 43,177, 61,144,156,148, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 72, 0, 0, 0,144,156,148, 2, 16, 1, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0,205,204,204, 61, 86,188,121, 63, 0, 0, 0, 0,154,153,153, 62, 96, 60, 75, 63, 0, 0, 0, 0,
- 51, 51, 51, 63,128, 14, 83, 62, 0, 0, 0, 0,102,102,102, 63, 79,117,200, 60, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 72, 0, 0, 0, 40,172,132, 2,115, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 49, 32, 82,101,110,100,101,114, 76, 97,121,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,240,108,155, 2,255,255, 15, 0, 0, 0, 0, 0,255,127, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 73, 77, 0, 0,124, 1, 0, 0,184, 62, 18, 3, 29, 0, 0, 0, 1, 0, 0, 0,120, 70, 18, 3, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 73, 77, 73,109, 97,103,101, 46, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
- 62, 1, 0, 0, 0, 0, 0, 0, 85,110,116,105,116,108,101,100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68,134,110,108, 0, 0, 1, 0, 1, 0, 0, 1,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 73, 77, 0, 0, 1,128, 7, 30,176,144, 0, 0, 0, 32, 0, 0, 0, 1,
+ 0, 0, 0, 0, 13, 64,158,176, 0, 0, 0, 0, 0, 0, 0, 0, 73, 77, 82,101,110,100,101,114, 32, 82,101,115,117,108,116, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,108,110,134, 68, 0, 0, 0, 1,
- 0, 1, 1, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 73, 77, 0, 0,124, 1, 0, 0,120, 70, 18, 3, 29, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0,184, 62, 18, 3, 0, 0, 0, 0, 0, 0, 0, 0, 73, 77, 82,101,110,100,101,114, 32, 82,101,115,
-117,108,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 63, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 5, 0, 4,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 0, 0, 67, 65, 0, 0, 0,132, 13, 64,160, 96, 0, 0, 0, 30, 0, 0, 0, 1, 13, 64,161, 16, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 67, 65, 67, 97,109,101,114, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 62, 76,204,205, 66, 96,148,117, 64,176, 0, 0, 66,112, 0, 0, 65,240, 0, 0,
+ 64,192, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 65, 0, 0, 0,132,
+ 13, 64,161, 16, 0, 0, 0, 30, 0, 0, 0, 1, 0, 0, 0, 0, 13, 64,160, 96, 0, 0, 0, 0, 0, 0, 0, 0, 67, 65, 67, 97,
+109,101,114, 97, 65,116,109,111, 0, 0, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 12, 62, 76,204,205, 66, 68,137,145, 64,176, 39, 76, 66,112, 69,210, 66, 12, 0, 0, 64,234, 14,161, 63, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 65, 0, 0, 1,120, 13, 64,161,192, 0, 0, 0, 40,
+ 0, 0, 0, 1, 13, 64,165, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 65, 76, 97,109,112, 46, 48, 48, 49, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1,
+ 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 63,128, 0, 0, 65,160, 0, 0, 66, 52, 0, 0, 62, 25,153,154, 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0,
+ 13, 64,163, 96, 0, 1, 0, 0, 63, 0, 0, 0, 66, 32, 0, 0, 66, 52, 0, 0, 63,128, 0, 0, 64, 64, 0, 0, 2, 0, 0, 3,
+ 0, 1, 0, 0, 0, 2, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 58,131, 18,111,
+ 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 65, 32, 0, 0, 63,128, 0, 0,
+ 63,128, 0, 0, 64, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 13, 64,164,208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+ 0, 0, 1, 8, 13, 64,163, 96, 0, 0, 1, 32, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 2, 0, 1, 67,128, 0, 0,
+ 0, 0, 0, 0, 63,128, 0, 0,191, 53, 4,243, 63, 53, 4,242,191, 53, 4,242, 63, 53, 4,243, 13, 64,164,144, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 5, 0, 4, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 67, 65, 0, 0,132, 0, 0, 0, 16, 2,164, 2, 27, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 67, 65, 67, 97,109,101,114, 97, 46, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0,205,204, 76, 62,117,148, 96, 66, 76, 39,176, 64,210, 69,112, 66, 0, 0,240, 65,
-161, 14,234, 64, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 65, 0, 0, 24, 1, 0, 0,
-208, 63,148, 2, 37, 0, 0, 0, 1, 0, 0, 0,136, 62,148, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 65, 76, 97,
-109,112, 46, 48, 48, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 2, 0, 1, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,160, 65,
-182,152,143, 66,154,153, 25, 62, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,128,238,126, 2, 1, 0, 0, 0,
- 0, 0, 0, 63, 0, 0, 32, 66, 0, 0, 52, 66, 0, 0,128, 63, 0, 0, 64, 64, 0, 2, 3, 0, 1, 0, 0, 0, 0, 0, 1, 0,
- 1, 0, 1, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,111, 18,131, 58, 1, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0,
+ 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 24,
+ 13, 64,164,144, 0, 0, 1, 30, 0, 0, 0, 2, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 32, 13, 64,164,208, 0, 0, 0, 19, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 65, 0, 0, 1,120,
+ 13, 64,165, 32, 0, 0, 0, 40, 0, 0, 0, 1, 13, 64,168,128, 13, 64,161,192, 0, 0, 0, 0, 0, 0, 0, 0, 76, 65, 76, 97,
+109,112, 46, 48, 48, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 65,160, 0, 0, 66,143,152,182, 62, 25,153,154, 63,128, 0, 0,
+ 0, 0, 0, 0, 63,128, 0, 0, 13, 64,166,192, 0, 1, 0, 0, 63, 0, 0, 0, 66, 32, 0, 0, 66, 52, 0, 0, 63,128, 0, 0,
+ 64, 64, 0, 0, 2, 0, 0, 3, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0,
+ 63,128, 0, 0, 58,131, 18,111, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0,
+ 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 64, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 8, 1, 0, 0,128,238,126, 2, 18, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
- 2, 0, 1, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63,243, 4, 53,191,242, 4, 53, 63,242, 4, 53,191,243, 4, 53, 63,
- 80,175,131, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 64,168, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 1, 8, 13, 64,166,192, 0, 0, 1, 32, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0,
+ 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0,
+ 0, 2, 0, 1, 67,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0,191, 53, 4,243, 63, 53, 4,242,191, 53, 4,242, 63, 53, 4,243,
+ 13, 64,167,240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 24, 0, 0, 0, 80,175,131, 2, 16, 1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 76, 65, 0, 0, 24, 1, 0, 0,136, 62,148, 2, 37, 0, 0, 0, 1, 0, 0, 0,
- 24, 65,148, 2,208, 63,148, 2, 0, 0, 0, 0, 0, 0, 0, 0, 76, 65, 83,112,111,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 16, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 12, 64,247,255,239, 65, 0, 0,150, 66,154,153, 25, 62, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,176,101,152, 2, 4, 0, 0, 0, 46, 26,128, 63, 25, 4,240, 65, 0, 0, 52, 66,
- 0, 0,128, 63, 0, 0, 64, 64, 64, 11, 3, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63,111, 18,131, 58, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 8, 1, 0, 0,
-176,101,152, 2, 18, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 2, 0, 1, 0, 0, 0,128, 67, 0, 0, 0, 0,
- 0, 0,128, 63,243, 4, 53,191,242, 4, 53, 63,242, 4, 53,191,243, 4, 53, 63, 80,110,126, 2, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0,
+ 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 0, 0, 0, 24, 13, 64,167,240, 0, 0, 1, 30, 0, 0, 0, 2, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 32, 13, 64,168, 48, 0, 0, 0, 19, 0, 0, 0, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 76, 65, 0, 0, 1,120, 13, 64,168,128, 0, 0, 0, 40, 0, 0, 0, 1, 13, 64,171,144, 13, 64,165, 32, 0, 0, 0, 0,
+ 0, 0, 0, 0, 76, 65, 83,112,111,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 8, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 12,204,205, 65,239,255,247, 66,150, 0, 0,
+ 62, 25,153,154, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 13, 64,170, 32, 0, 4, 0, 0, 63,128, 26, 46, 65,240, 4, 25,
+ 66, 52, 0, 0, 63,128, 0, 0, 64, 64, 0, 0, 11, 64, 0, 3, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0,
+ 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 58,131, 18,111, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 63,128, 0, 0,
+ 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 64, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 1, 8, 13, 64,170, 32, 0, 0, 1, 32, 0, 0, 0, 1,
+ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 63,128, 0, 0, 0, 2, 0, 1, 67,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0,191, 53, 4,243, 63, 53, 4,242,
+191, 53, 4,242, 63, 53, 4,243, 13, 64,171, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0, 80,110,126, 2,
- 16, 1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,
- 76, 65, 0, 0, 24, 1, 0, 0, 24, 65,148, 2, 37, 0, 0, 0, 1, 0, 0, 0,208, 17,164, 2,136, 62,148, 2, 0, 0, 0, 0,
- 0, 0, 0, 0, 76, 65, 83,112,111,116, 46, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
-102,102,102, 63,247,255,239, 65, 0, 0,150, 66,154,153, 25, 62, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 16, 3,164, 2, 1, 0, 0, 0, 46, 26,128, 63, 25, 4,240, 65, 0, 0, 52, 66, 0, 0,128, 63, 0, 0, 64, 64, 64, 11, 3, 0,
- 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,111, 18,131, 58,
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 8, 1, 0, 0, 16, 3,164, 2, 18, 1, 0, 0, 1, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0, 0, 0, 0, 0,128, 63, 2, 0, 1, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63,243, 4, 53,191,242, 4, 53, 63,
-242, 4, 53,191,243, 4, 53, 63,192,109,126, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 24, 13, 64,171, 80, 0, 0, 1, 30, 0, 0, 0, 2, 0, 0, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 65, 0, 0, 1,120, 13, 64,171,144,
+ 0, 0, 0, 40, 0, 0, 0, 1, 13, 64,174,160, 13, 64,168,128, 0, 0, 0, 0, 0, 0, 0, 0, 76, 65, 83,112,111,116, 46, 48,
+ 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 16, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 63,102,102,102, 65,239,255,247, 66,150, 0, 0, 62, 25,153,154, 63,128, 0, 0, 0, 0, 0, 0,
+ 63,128, 0, 0, 13, 64,173, 48, 0, 1, 0, 0, 63,128, 26, 46, 65,240, 4, 25, 66, 52, 0, 0, 63,128, 0, 0, 64, 64, 0, 0,
+ 11, 64, 0, 3, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0,
+ 58,131, 18,111, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0,
+ 63,128, 0, 0, 63,128, 0, 0, 64, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0,192,109,126, 2, 16, 1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 76, 65, 0, 0, 24, 1, 0, 0,208, 17,164, 2,
- 37, 0, 0, 0, 1, 0, 0, 0, 80, 20,164, 2, 24, 65,148, 2, 0, 0, 0, 0, 0, 0, 0, 0, 76, 65, 83,112,111,116, 46, 48,
- 48, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,247,255,239, 65, 0, 0,150, 66,
-154,153, 25, 62, 0, 0,128, 63,200,182, 27, 63, 0, 0,128, 63, 0, 0, 0, 0,136,156,154, 2, 1, 0, 0, 0, 46, 26,128, 63,
- 25, 4,240, 65, 0, 0, 52, 66, 0, 0,128, 63, 0, 0, 64, 64, 64, 11, 3, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,111, 18,131, 58, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 0, 0, 1, 8, 13, 64,173, 48, 0, 0, 1, 32, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 2, 0, 1,
+ 67,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0,191, 53, 4,243, 63, 53, 4,242,191, 53, 4,242, 63, 53, 4,243, 13, 64,174, 96,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 8, 1, 0, 0,136,156,154, 2, 18, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 2, 0, 1, 0,
- 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63,243, 4, 53,191,242, 4, 53, 63,242, 4, 53,191,243, 4, 53, 63,224,175,131, 2,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0,
+ 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+ 0, 0, 0, 24, 13, 64,174, 96, 0, 0, 1, 30, 0, 0, 0, 2, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 65, 0, 0, 1,120, 13, 64,174,160, 0, 0, 0, 40, 0, 0, 0, 1, 13, 64,177,176,
+ 13, 64,171,144, 0, 0, 0, 0, 0, 0, 0, 0, 76, 65, 83,112,111,116, 46, 48, 48, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0,
+ 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0,
+ 65,239,255,247, 66,150, 0, 0, 62, 25,153,154, 63,128, 0, 0, 63, 27,182,200, 63,128, 0, 0, 13, 64,176, 64, 0, 1, 0, 0,
+ 63,128, 26, 46, 65,240, 4, 25, 66, 52, 0, 0, 63,128, 0, 0, 64, 64, 0, 0, 11, 64, 0, 3, 0, 1, 0, 0, 0, 0, 0, 1,
+ 0, 1, 0, 1, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 58,131, 18,111, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 1, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 64, 0, 0, 0,
+ 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 24, 0, 0, 0,224,175,131, 2, 16, 1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0, 0, 0, 0, 0, 0, 0, 76, 65, 0, 0, 24, 1, 0, 0, 80, 20,164, 2, 37, 0, 0, 0, 1, 0, 0, 0,208, 22,164, 2,
-208, 17,164, 2, 0, 0, 0, 0, 0, 0, 0, 0, 76, 65, 83,112,111,116, 46, 48, 48, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63,205,204,204, 62,247,255,239, 65, 0, 0,150, 66,154,153, 25, 62, 0, 0,128, 63,200,182, 27, 63,
- 0, 0,128, 63, 0, 0, 0, 0,192,157,154, 2, 1, 0, 0, 0, 46, 26,128, 63, 25, 4,240, 65, 0, 0, 52, 66, 0, 0,128, 63,
- 0, 0, 64, 64, 64, 11, 3, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63,111, 18,131, 58, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 1, 8, 13, 64,176, 64,
+ 0, 0, 1, 32, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 2, 0, 1, 67,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0,
+191, 53, 4,243, 63, 53, 4,242,191, 53, 4,242, 63, 53, 4,243, 13, 64,177,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 8, 1, 0, 0,192,157,154, 2,
- 18, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 2, 0, 1, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63,
-243, 4, 53,191,242, 4, 53, 63,242, 4, 53,191,243, 4, 53, 63,112, 2,129, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 24, 13, 64,177,112, 0, 0, 1, 30,
+ 0, 0, 0, 2, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 65,
+ 0, 0, 1,120, 13, 64,177,176, 0, 0, 0, 40, 0, 0, 0, 1, 13, 64,180,192, 13, 64,174,160, 0, 0, 0, 0, 0, 0, 0, 0,
+ 76, 65, 83,112,111,116, 46, 48, 48, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62,204,204,205, 65,239,255,247, 66,150, 0, 0, 62, 25,153,154,
+ 63,128, 0, 0, 63, 27,182,200, 63,128, 0, 0, 13, 64,179, 80, 0, 1, 0, 0, 63,128, 26, 46, 65,240, 4, 25, 66, 52, 0, 0,
+ 63,128, 0, 0, 64, 64, 0, 0, 11, 64, 0, 3, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 63,128, 0, 0,
+ 63,128, 0, 0, 63,128, 0, 0, 58,131, 18,111, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 63,128, 0, 0, 63,128, 0, 0,
+ 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 64, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0,112, 2,129, 2, 16, 1, 0, 0,
- 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 76, 65, 0, 0,
- 24, 1, 0, 0,208, 22,164, 2, 37, 0, 0, 0, 1, 0, 0, 0, 80, 25,164, 2, 80, 20,164, 2, 0, 0, 0, 0, 0, 0, 0, 0,
- 76, 65, 83,112,111,116, 46, 48, 48, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 8, 16, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 80, 78, 83, 63,
-247,255,239, 65, 0, 0,150, 66,154,153, 25, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 56, 42,130, 2,
- 4, 0, 0, 0, 46, 26,128, 63, 25, 4,240, 65, 0, 0, 52, 66, 0, 0,128, 63, 0, 0, 64, 64, 64, 11, 3, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,111, 18,131, 58, 1, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 1, 8, 13, 64,179, 80, 0, 0, 1, 32, 0, 0, 0, 1, 0, 0, 0, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 63,128, 0, 0, 0, 2, 0, 1, 67,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0,191, 53, 4,243, 63, 53, 4,242,191, 53, 4,242,
+ 63, 53, 4,243, 13, 64,180,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 8, 1, 0, 0, 56, 42,130, 2, 18, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0,128, 63, 2, 0, 1, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63,243, 4, 53,191,242, 4, 53, 63,242, 4, 53,191,
-243, 4, 53, 63, 8,110,126, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 24, 13, 64,180,128, 0, 0, 1, 30, 0, 0, 0, 2, 0, 0, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 65, 0, 0, 1,120, 13, 64,180,192, 0, 0, 0, 40,
+ 0, 0, 0, 1, 13, 64,183,208, 13, 64,177,176, 0, 0, 0, 0, 0, 0, 0, 0, 76, 65, 83,112,111,116, 46, 48, 48, 53, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 8,
+ 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 63, 83, 78, 80, 65,239,255,247, 66,150, 0, 0, 62, 25,153,154, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0,
+ 13, 64,182, 96, 0, 4, 0, 0, 63,128, 26, 46, 65,240, 4, 25, 66, 52, 0, 0, 63,128, 0, 0, 64, 64, 0, 0, 11, 64, 0, 3,
+ 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 58,131, 18,111,
+ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0,
+ 63,128, 0, 0, 64, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0, 8,110,126, 2, 16, 1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 76, 65, 0, 0, 24, 1, 0, 0, 80, 25,164, 2, 37, 0, 0, 0,
- 1, 0, 0, 0, 24, 28,164, 2,208, 22,164, 2, 0, 0, 0, 0, 0, 0, 0, 0, 76, 65, 83,112,111,116, 46, 48, 48, 54, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 8, 0, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 51, 51,179, 63,247,255,239, 65, 0, 0, 72, 66,171,156, 8, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,112, 43,130, 2, 4, 0, 0, 0, 78,207, 68, 65, 25, 4,240, 65,
- 0, 0, 52, 66, 0, 0,128, 63, 0, 0, 64, 64, 0, 2, 3, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,111, 18,131, 58, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 8, 1, 0, 0,112, 43,130, 2, 18, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 2, 0, 1, 0, 0, 0,128, 67,
- 0, 0, 0, 0, 0, 0,128, 63,243, 4, 53,191,242, 4, 53, 63,242, 4, 53,191,243, 4, 53, 63, 80,207, 63, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0,
- 80,207, 63, 0, 16, 1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0, 0, 0, 76, 65, 0, 0, 24, 1, 0, 0, 24, 28,164, 2, 37, 0, 0, 0, 1, 0, 0, 0,224, 30,164, 2, 80, 25,164, 2,
- 0, 0, 0, 0, 0, 0, 0, 0, 76, 65, 83,112,111,116, 46, 48, 48, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63,247,255,239, 65, 0, 0,150, 66,154,153, 25, 62, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0, 0, 0,168, 44,130, 2, 1, 0, 0, 0, 46, 26,128, 63, 25, 4,240, 65, 0, 0, 52, 66, 0, 0,128, 63, 0, 0, 64, 64,
- 64, 11, 3, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
-111, 18,131, 58, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 8, 1, 0, 0,168, 44,130, 2, 18, 1, 0, 0,
- 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 2, 0, 1, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63,243, 4, 53,191,
-242, 4, 53, 63,242, 4, 53,191,243, 4, 53, 63,224,239,128, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0,224,239,128, 2, 16, 1, 0, 0, 2, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 76, 65, 0, 0, 24, 1, 0, 0,
-224, 30,164, 2, 37, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 24, 28,164, 2, 0, 0, 0, 0, 0, 0, 0, 0, 76, 65, 76, 97,
-109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,192, 63, 0, 0,160, 65,
- 0, 0, 52, 66,154,153, 25, 62, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,224, 45,130, 2, 1, 0, 0, 0,
- 0, 0, 0, 63, 0, 0, 32, 66, 0, 0, 52, 66, 0, 0,128, 63, 0, 0, 64, 64, 0, 2, 3, 0, 1, 0, 0, 0, 0, 0, 1, 0,
- 1, 0, 1, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,111, 18,131, 58, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 8, 1, 0, 0,224, 45,130, 2, 18, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
- 2, 0, 1, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63,243, 4, 53,191,242, 4, 53, 63,242, 4, 53,191,243, 4, 53, 63,
- 56,196,126, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 24, 0, 0, 0, 56,196,126, 2, 16, 1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 87, 79, 0, 0, 68, 1, 0, 0,104, 7, 16, 3,108, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 79, 87,111,114,108,100, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,141, 47, 79, 62,
- 64, 19,209, 62, 73, 23, 14, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0, 0, 0,205,204, 28, 65, 0, 0, 0, 0, 1, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0,112, 65,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0, 0, 0, 0, 0,128, 63,205,204, 76, 61, 0, 0, 5, 0,
- 0, 0, 0, 0, 10,215,163, 59, 0, 0, 0, 0, 0, 0,128, 62, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 84, 88, 0, 0,104, 0, 0, 0,192,199,156, 2, 25, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 84, 88, 84,101,120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 1, 0, 0, 0,216,228,126, 2,216,228,126, 2,
-216,228,126, 2,216,228,126, 2, 0, 0, 0, 0, 0, 0, 0, 0,168, 35,153, 2,255,255,255,255, 0, 4, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 24, 0, 0, 0,216,228,126, 2, 24, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 38,167, 2,
- 0, 0, 0, 0, 0, 0, 0, 0, 69, 69, 82, 70, 68, 65, 84, 65, 4, 0, 0, 0, 56, 38,167, 2, 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 71, 82, 0, 0, 68, 0, 0, 0,240,108,155, 2,218, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 71, 82, 79,118,101,114,114,105,100,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,120,232,126, 2,184, 28,153, 2,255,255, 15, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 24, 0, 0, 0,120,232,126, 2,217, 0, 0, 0, 1, 0, 0, 0, 24,236,126, 2, 0, 0, 0, 0,168,186, 32, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0, 24,236,126, 2,217, 0, 0, 0, 1, 0, 0, 0,184,239,126, 2,
-120,232,126, 2, 40,183, 32, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0,184,239,126, 2,
-217, 0, 0, 0, 1, 0, 0, 0, 72,191,132, 2, 24,236,126, 2,168,179, 32, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 24, 0, 0, 0, 72,191,132, 2,217, 0, 0, 0, 1, 0, 0, 0,184,143,125, 2,184,239,126, 2, 40,176, 32, 3,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0,184,143,125, 2,217, 0, 0, 0, 1, 0, 0, 0,
- 48, 88,126, 2, 72,191,132, 2, 88, 50,153, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0,
- 48, 88,126, 2,217, 0, 0, 0, 1, 0, 0, 0,120, 88,126, 2,184,143,125, 2,216, 46,153, 2, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0,120, 88,126, 2,217, 0, 0, 0, 1, 0, 0, 0,120,100,169, 2, 48, 88,126, 2,
-160,159,161, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0,120,100,169, 2,217, 0, 0, 0,
- 1, 0, 0, 0, 88, 93,169, 2,120, 88,126, 2,224, 8, 16, 3,144, 93,152, 2, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 24, 0, 0, 0, 88, 93,169, 2,217, 0, 0, 0, 1, 0, 0, 0,184, 28,153, 2,120,100,169, 2, 88, 43,153, 2,168,232,150, 2,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0,184, 28,153, 2,217, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 88, 93,169, 2,216, 39,153, 2, 24,235,150, 2, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 0, 0, 80, 3, 0, 0,160, 26,156, 2,
-102, 0, 0, 0, 1, 0, 0, 0,224, 42,164, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 67, 97,109,101,114, 97,
- 46, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 2,164, 2, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 78,199, 41,188,225,230, 30,193,216,129,230, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,218, 15,201, 63, 0, 0,128, 37,255,255,127, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
-255,255,127, 37, 0, 0,128,165, 0, 0, 0, 0,255,255,127, 37,105, 33,162, 51, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 37,
- 0, 0,128,191,105, 33,162, 51, 0, 0, 0, 0, 78,199, 41,188,225,230, 30,193,216,129,230, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
-162,133,136,152,164,133,136,152, 0, 0, 0, 0,255,255,127, 37, 0, 0,128, 63, 64, 90,136, 48, 0, 0, 0, 0,164,133,136,152,
- 0, 0, 0,168, 0, 0,128, 63, 0, 0, 0, 0, 0,192, 59, 39, 60,252, 17, 52,234, 90, 20, 51, 0, 0,128, 63, 0, 0,128, 63,
-251,255,127,152,160,133,136, 24, 0, 0, 0, 0,254,255,127, 25, 0, 0,128, 63, 0, 0, 0, 40, 0, 0, 0, 0,255,255,127,165,
- 64, 90,136,176, 0, 0,128, 63, 0, 0, 0, 0, 1, 0,231, 37, 40, 19,212, 50, 63,252, 17,180, 0, 0,128, 63,223, 5, 0, 0,
- 0, 4, 0, 0, 0, 0, 0, 0, 5, 0, 1, 0, 0, 0, 0, 0, 79, 66, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0,100, 0, 0, 0, 0, 0, 0, 0, 56,180,150,201, 0, 0,128, 63, 6, 41,100, 63, 0, 0,128, 63,205,204,204, 62,
- 6, 41,100, 63, 0, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 0, 0, 80, 3, 0, 0,
-224, 42,164, 2,102, 0, 0, 0, 1, 0, 0, 0, 96, 46,164, 2,160, 26,156, 2, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 99,104,
-101, 99,107,101,114,115, 46, 48, 48, 49, 0, 46, 48, 48, 49, 0, 0, 0, 0, 0, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 14,132, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 0, 18, 3,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,112, 41,150, 2, 52, 84,142, 55,194, 12,188,192, 28, 38, 71, 64, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 36,190, 64, 69, 36,190, 64, 68, 36,190, 64, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,218, 15, 73, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,
- 83,115,134, 64, 82,115,134, 64, 0, 0, 0, 0, 0, 0, 0, 0, 82,115,134,192, 83,115,134, 64, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 36,190, 64, 0, 0, 0, 0, 52, 84,142, 55,194, 12,188,192, 28, 38, 71, 64, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63,184,118,201,177, 0, 0, 0, 0, 0, 0, 0, 0,184,118,201, 49, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,220,232,118, 52,208,124, 46,180, 16,213,141, 51, 0, 0,128, 63,
-207,183,243, 61,205,183,243,189,156, 83,162, 37, 0, 0, 0, 0, 29, 90, 26, 50, 31, 90, 26, 50,173, 85, 44, 62, 0, 0, 0, 0,
-205,183,243,189,207,183,243,189, 25,107, 87, 50, 0, 0, 0, 0,158,176,247,190,212,108,246,190, 64,232, 97,190, 0, 0,128, 63,
- 14, 4, 0, 0, 0, 4, 1, 0, 0, 0, 68, 0, 1, 0, 2, 0, 0, 0, 0, 0, 79, 66, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,100, 0, 0, 0, 0, 0, 0, 0, 56,180,150,201, 0, 0,128, 63, 10,215, 35, 61, 0, 0,128, 63,
-205,204,204, 62,205,204,204, 61, 0, 0, 0, 0, 4, 0, 1, 1, 1, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,184,225,152, 2, 48,100,163, 2, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 4, 0, 0, 0,112, 41,150, 2, 0, 0, 0, 0, 1, 0, 0, 0,104,137,165, 2, 79, 66, 0, 0, 80, 3, 0, 0, 96, 46,164, 2,
-102, 0, 0, 0, 1, 0, 0, 0,224, 49,164, 2,224, 42,164, 2, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 99,104,101, 99,107,101,
-114,115, 46, 48, 48, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 48,250,152, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,153,166, 2, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,186,126, 2, 52, 84,142, 55,194, 12,188,192, 28, 38, 71, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 36,190, 64, 69, 36,190, 64, 68, 36,190, 64, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,218, 15, 73, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 83,115,134, 64,
- 82,115,134, 64, 0, 0, 0, 0, 0, 0, 0, 0, 82,115,134,192, 83,115,134, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 36,190, 64, 0, 0, 0, 0, 52, 84,142, 55,194, 12,188,192, 28, 38, 71, 64, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
-184,118,201,177, 0, 0, 0, 0, 0, 0, 0, 0,184,118,201, 49, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,220,232,118, 52,208,124, 46,180, 16,213,141, 51, 0, 0,128, 63,207,183,243, 61,
-205,183,243,189,156, 83,162, 37, 0, 0, 0, 0, 29, 90, 26, 50, 31, 90, 26, 50,173, 85, 44, 62, 0, 0, 0, 0,205,183,243,189,
-207,183,243,189, 25,107, 87, 50, 0, 0, 0, 0,158,176,247,190,212,108,246,190, 64,232, 97,190, 0, 0,128, 63, 14, 4, 0, 0,
- 0, 4, 1, 0, 0, 0, 68, 0, 1, 0, 2, 0, 0, 0, 0, 0, 79, 66, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0,100, 0, 0, 0, 0, 0, 0, 0, 56,180,150,201, 0, 0,128, 63, 10,215, 35, 61, 0, 0,128, 63,205,204,204, 62,
-205,204,204, 61, 0, 0, 0, 0, 4, 0, 1, 1, 1, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,122,152, 2, 40, 15,161, 2, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 4, 0, 0, 0,
- 0,186,126, 2, 0, 0, 0, 0, 1, 0, 0, 0, 56,134,165, 2, 79, 66, 0, 0, 80, 3, 0, 0,224, 49,164, 2,102, 0, 0, 0,
- 1, 0, 0, 0,224, 8, 16, 3, 96, 46,164, 2, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 99,104,101, 99,107,101,114,115, 46, 48,
- 48, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 16, 2,150, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,208, 84,164, 2, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-208,249,134, 2, 0,131,102, 60, 14,112,164, 64, 24,211,229, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,178,159, 34, 65,178,159, 34, 65,177,159, 34, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,128,166,250, 89,178, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,178,159, 34, 65,151,120, 10,180,
- 0, 0, 0, 0, 0, 0, 0, 0,151,120, 10, 52,178,159, 34, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-177,159, 34, 65, 0, 0, 0, 0, 0,131,102, 60, 14,112,164, 64, 24,211,229, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,160, 85, 74, 36,
- 0, 0, 0, 0, 0, 0, 0, 0,160, 85, 74,164, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0,126, 46,151,175, 19,238,187, 52, 64, 17,113,178, 0, 0,128, 63,231,126,201, 61,219,145,171, 48,
-207,121,201,163, 0, 0, 0, 0, 65,209,167,164, 51, 57,255, 49,232,126,201, 61, 0, 0, 0, 0,235, 66,172, 48,231,126,201,189,
- 79,216,251, 49, 0, 0, 0, 0, 18,136, 29,187,203,200,189,191,139,139, 9, 58, 0, 0,128, 63, 33, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 68, 0, 1, 0, 2, 0, 0, 0, 0, 0, 79, 66, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
-100, 0, 0, 0, 0, 0, 0, 0, 56,180,150,201, 0, 0,128, 63, 10,215, 35, 61, 0, 0,128, 63,205,204,204, 62,205,204,204, 61,
- 0, 0, 0, 0, 4, 0, 1, 1, 1, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 40, 87,163, 2,248,158,154, 2, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 4, 0, 0, 0,208,249,134, 2,
- 0, 0, 0, 0, 1, 0, 0, 0,104,137,165, 2, 79, 66, 0, 0, 80, 3, 0, 0,224, 8, 16, 3,102, 0, 0, 0, 1, 0, 0, 0,
-216, 39,153, 2,224, 49,164, 2, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 76, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,136, 62,148, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 42, 57,110, 65,237,114, 11, 64,120, 99,121, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 90,103, 63,
-254, 45,186,190,115,209,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,136,247,255, 62, 37, 39, 74, 63,138, 26,182, 62,
- 0, 0, 0, 0,164, 21, 44,191, 28, 67,194, 61,176,248, 59, 63, 0, 0, 0, 0,251,203, 11, 63,217, 45, 27,191, 47, 7, 20, 63,
- 0, 0, 0, 0, 42, 57,110, 65,237,114, 11, 64,120, 99,121, 64, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,254,255,127, 63, 96,139,222,178,240,132, 96, 51,
- 0, 0, 0, 0,161, 43,128, 51, 0, 0,128, 63, 62, 70,101, 49, 0, 0, 0, 0,179,106, 15, 51, 67, 91, 19,178, 0, 0,128, 63,
- 0, 0, 0, 0,219, 81, 21, 53,237,171,186,179,163,166,113,181, 0, 0,128, 63,138,247,255, 62,164, 21, 44,191,251,203, 11, 63,
- 0, 0, 0, 0,141, 26,182, 62,176,248, 59, 63, 45, 7, 20, 63, 0, 0, 0, 0, 37, 39, 74,191, 9, 67,194,189,217, 45, 27, 63,
- 0, 0, 0, 0,147, 14,142,193, 35,125,234, 64, 85,119, 0,192, 0, 0,128, 63, 28, 4, 0, 0, 0, 20, 0, 0, 0, 0, 68, 0,
- 5, 0, 1, 0, 0, 0, 0, 0, 79, 66, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,100, 0, 0, 0,
- 0, 0, 0, 0, 56,180,150,201, 0, 0,128, 63, 10,215, 35, 61, 0, 0,128, 63,205,204,204, 62,205,204,204, 61, 0, 0, 0, 0,
- 4, 0, 0, 0, 1, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 0, 0, 80, 3, 0, 0,216, 39,153, 2,102, 0, 0, 0,
- 1, 0, 0, 0, 88, 43,153, 2,224, 8, 16, 3, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 76, 97,109,112, 46, 48, 48, 49, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 65,148, 2, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 84, 76,210,191,178,162, 71,193,210,186,178, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 85, 90,103, 63,254, 45,186,190,115,209,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,136,247,255, 62, 37, 39, 74, 63,
-138, 26,182, 62, 0, 0, 0, 0,164, 21, 44,191, 28, 67,194, 61,176,248, 59, 63, 0, 0, 0, 0,251,203, 11, 63,217, 45, 27,191,
- 47, 7, 20, 63, 0, 0, 0, 0, 84, 76,210,191,178,162, 71,193,210,186,178, 64, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 1, 0,128, 63,131,235,180, 52,
-190, 31,238,179, 0, 0, 0, 0,196,103,141,178,248,255,127, 63,214, 14,245, 51, 0, 0, 0, 0,167,140, 60, 50,232,103,134,179,
- 1, 0,128, 63, 0, 0, 0, 0, 55, 83,232,180,137,218,173,182, 76, 55,130, 53, 0, 0,128, 63,134,247,255, 62,164, 21, 44,191,
-251,203, 11, 63, 0, 0, 0, 0,138, 26,182, 62,173,248, 59, 63, 45, 7, 20, 63, 0, 0, 0, 0, 36, 39, 74,191, 19, 67,194,189,
-218, 45, 27, 63, 0, 0, 0, 0,197,129,189, 63,176,159,104,192,135,194, 53,192, 0, 0,128, 63, 28, 4, 0, 0, 0, 20, 0, 0,
- 0, 0, 68, 0, 5, 0, 1, 0, 0, 0, 0, 0, 79, 66, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
-100, 0, 0, 0, 0, 0, 0, 0, 56,180,150,201, 0, 0,128, 63, 10,215, 35, 61, 0, 0,128, 63,205,204,204, 62,205,204,204, 61,
- 0, 0, 0, 0, 4, 0, 0, 0, 1, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 0, 0, 80, 3, 0, 0, 88, 43,153, 2,
-102, 0, 0, 0, 1, 0, 0, 0,216, 46,153, 2,216, 39,153, 2, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 76, 97,109,112, 46, 48,
- 48, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 25,164, 2, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,238,188, 16,193,229,119, 57,193, 17,218,141, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,202, 79, 15,191,179,100, 12,191,112, 92,234, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,171,197, 96,190,
-149, 27, 83, 63, 10,118, 5, 63, 0, 0, 0, 0,142,218, 99,191,109, 4, 75, 61,179, 3,232,190, 0, 0, 0, 0,233,142,204,190,
-104, 64, 16,191,174, 28, 57, 63, 0, 0, 0, 0,238,188, 16,193,229,119, 57,193, 17,218,141, 65, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,254,255,127, 63,
-154,215,220,178,103, 99, 11, 52, 0, 0, 0, 0,233,200,198,178, 0, 0,128, 63,163, 97,236, 51, 0, 0, 0, 0,174,189,205,178,
-205,147,215, 49, 1, 0,128, 63, 0, 0, 0, 0,142,106,113,181,207, 60,210,181,255,141,244, 53, 0, 0,128, 63,174,197, 96,190,
-143,218, 99,191,233,142,204,190, 0, 0, 0, 0, 12,118, 5, 63,180, 3,232,190,172, 28, 57, 63, 0, 0, 0, 0,150, 27, 83,191,
-119, 4, 75,189,104, 64, 16, 63, 0, 0, 0, 0,128,181, 14,193,224,177, 61,191, 28,133,128,193, 0, 0,128, 63, 28, 4, 0, 0,
- 0, 20, 0, 0, 0, 0, 68, 0, 5, 0, 1, 0, 0, 0, 0, 0, 79, 66, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0,100, 0, 0, 0, 0, 0, 0, 0, 56,180,150,201, 0, 0,128, 63, 10,215, 35, 61, 0, 0,128, 63,205,204,204, 62,
-205,204,204, 61, 0, 0, 0, 0, 4, 0, 0, 0, 1, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 0, 0, 80, 3, 0, 0,
-216, 46,153, 2,102, 0, 0, 0, 1, 0, 0, 0, 88, 50,153, 2, 88, 43,153, 2, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 76, 97,
-109,112, 46, 48, 48, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0,
- 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,208, 17,164, 2,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,176,147,104, 64, 42, 84, 23,193,116, 77,171, 64, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 85, 90,103, 63,254, 45,186,190,115,209,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,
-136,247,255, 62, 37, 39, 74, 63,138, 26,182, 62, 0, 0, 0, 0,164, 21, 44,191, 28, 67,194, 61,176,248, 59, 63, 0, 0, 0, 0,
-251,203, 11, 63,217, 45, 27,191, 47, 7, 20, 63, 0, 0, 0, 0,176,147,104, 64, 42, 84, 23,193,116, 77,171, 64, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63,168,125, 20,180, 35,254, 63, 50, 0, 0, 0, 0,142,131, 88, 50,254,255,127, 63,191,122,148, 50, 0, 0, 0, 0,
-164,124,113,178,179, 27,138, 49, 0, 0,128, 63, 0, 0, 0, 0,198,133, 72, 52,154, 21,207,180, 39,159, 41, 53, 0, 0,128, 63,
-136,247,255, 62,164, 21, 44,191,251,203, 11, 63, 0, 0, 0, 0,138, 26,182, 62,175,248, 59, 63, 45, 7, 20, 63, 0, 0, 0, 0,
- 37, 39, 74,191, 18, 67,194,189,217, 45, 27, 63, 0, 0, 0, 0, 88, 99, 93,192,122, 98, 80,190,223,119,112,192, 0, 0,128, 63,
- 1, 0, 0, 0, 0, 16, 0, 0, 0, 0, 68, 0, 5, 0, 1, 0, 0, 0, 0, 0, 79, 66, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,100, 0, 0, 0, 0, 0, 0, 0, 56,180,150,201, 0, 0,128, 63, 10,215, 35, 61, 0, 0,128, 63,
-205,204,204, 62,205,204,204, 61, 0, 0, 0, 0, 4, 0, 0, 0, 1, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 0, 0,
- 80, 3, 0, 0, 88, 50,153, 2,102, 0, 0, 0, 1, 0, 0, 0, 40,176, 32, 3,216, 46,153, 2, 0, 0, 0, 0, 0, 0, 0, 0,
- 79, 66, 76, 97,109,112, 46, 48, 48, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 4, 0, 0, 0, 0,
- 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 80, 20,164, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,249,147,251,192,206, 0, 24,193, 67,131,104,192, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 90,103, 63,254, 45,186,190,115,209,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0, 0, 0,136,247,255, 62, 37, 39, 74, 63,138, 26,182, 62, 0, 0, 0, 0,164, 21, 44,191, 28, 67,194, 61,176,248, 59, 63,
- 0, 0, 0, 0,251,203, 11, 63,217, 45, 27,191, 47, 7, 20, 63, 0, 0, 0, 0,249,147,251,192,206, 0, 24,193, 67,131,104,192,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,128, 63,254,255,127, 63,184,251, 16, 51,201, 8,244, 50, 0, 0, 0, 0, 44, 86,171,178,254,255,127, 63,157,147,147,178,
- 0, 0, 0, 0, 52,174,103, 48, 15,174,236, 50, 0, 0,128, 63, 0, 0, 0, 0, 93,121,121,181,103,135,116,181, 92,181, 25,180,
- 0, 0,128, 63,139,247,255, 62,165, 21, 44,191,252,203, 11, 63, 0, 0, 0, 0,140, 26,182, 62,175,248, 59, 63, 45, 7, 20, 63,
- 0, 0, 0, 0, 36, 39, 74,191, 20, 67,194,189,217, 45, 27, 63, 0, 0, 0, 0,147,142,176, 64,101, 22,170,191, 27, 28,246, 64,
- 0, 0,128, 63, 1, 0, 0, 0, 0, 16, 0, 0, 0, 0, 68, 0, 5, 0, 1, 0, 0, 0, 0, 0, 79, 66, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,100, 0, 0, 0, 0, 0, 0, 0, 56,180,150,201, 0, 0,128, 63, 10,215, 35, 61,
- 0, 0,128, 63,205,204,204, 62,205,204,204, 61, 0, 0, 0, 0, 4, 0, 0, 0, 1, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 79, 66, 0, 0, 80, 3, 0, 0, 40,176, 32, 3,102, 0, 0, 0, 1, 0, 0, 0,168,179, 32, 3, 88, 50,153, 2, 0, 0, 0, 0,
- 0, 0, 0, 0, 79, 66, 76, 97,109,112, 46, 48, 48, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 4,
- 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,208, 22,164, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,142, 41, 54, 65, 24,124,115,191,162,215, 58,192,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 90,103, 63,254, 45,186,190,115,209,128, 63, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0, 0, 0, 0, 0, 0, 0,136,247,255, 62, 37, 39, 74, 63,138, 26,182, 62, 0, 0, 0, 0,164, 21, 44,191, 28, 67,194, 61,
-176,248, 59, 63, 0, 0, 0, 0,251,203, 11, 63,217, 45, 27,191, 47, 7, 20, 63, 0, 0, 0, 0,142, 41, 54, 65, 24,124,115,191,
-162,215, 58,192, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,128, 63,136,247,255, 62,164, 21, 44,191,251,203, 11, 63, 0, 0, 0, 0,139, 26,182, 62,175,248, 59, 63,
- 46, 7, 20, 63, 0, 0, 0, 0, 36, 39, 74,191, 25, 67,194,189,217, 45, 27, 63, 0, 0, 0, 0,139,192, 49,193, 40, 99, 36, 65,
- 89,156,249, 63, 0, 0,128, 63, 2, 0, 0, 0, 0, 16, 0, 0, 0, 0, 68, 0, 5, 0, 1, 0, 0, 0, 0, 0, 79, 66, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,100, 0, 0, 0, 0, 0, 0, 0, 56,180,150,201, 0, 0,128, 63,
- 10,215, 35, 61, 0, 0,128, 63,205,204,204, 62,205,204,204, 61, 0, 0, 0, 0, 4, 0, 0, 0, 1, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 79, 66, 0, 0, 80, 3, 0, 0,168,179, 32, 3,102, 0, 0, 0, 1, 0, 0, 0, 40,183, 32, 3, 40,176, 32, 3,
+ 0, 0, 1, 8, 13, 64,182, 96, 0, 0, 1, 32, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 2, 0, 1, 67,128, 0, 0,
+ 0, 0, 0, 0, 63,128, 0, 0,191, 53, 4,243, 63, 53, 4,242,191, 53, 4,242, 63, 53, 4,243, 13, 64,183,144, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0,
+ 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 24,
+ 13, 64,183,144, 0, 0, 1, 30, 0, 0, 0, 2, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 76, 65, 0, 0, 1,120, 13, 64,183,208, 0, 0, 0, 40, 0, 0, 0, 1, 13, 64,186,224, 13, 64,180,192,
+ 0, 0, 0, 0, 0, 0, 0, 0, 76, 65, 83,112,111,116, 46, 48, 48, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,179, 51, 51, 65,239,255,247,
+ 66, 72, 0, 0, 63, 8,156,171, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 13, 64,185,112, 0, 4, 0, 0, 65, 68,207, 78,
+ 65,240, 4, 25, 66, 52, 0, 0, 63,128, 0, 0, 64, 64, 0, 0, 2, 0, 0, 3, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1,
+ 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 58,131, 18,111, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
+ 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 64, 0, 0, 0, 63,128, 0, 0,
+ 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 1, 8, 13, 64,185,112, 0, 0, 1, 32,
+ 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 2, 0, 1, 67,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0,191, 53, 4,243,
+ 63, 53, 4,242,191, 53, 4,242, 63, 53, 4,243, 13, 64,186,160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 24, 13, 64,186,160, 0, 0, 1, 30, 0, 0, 0, 2,
+ 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 65, 0, 0, 1,120,
+ 13, 64,186,224, 0, 0, 0, 40, 0, 0, 0, 1, 13, 64,189,240, 13, 64,183,208, 0, 0, 0, 0, 0, 0, 0, 0, 76, 65, 83,112,
+111,116, 46, 48, 48, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 65,239,255,247, 66,150, 0, 0, 62, 25,153,154, 63,128, 0, 0,
+ 0, 0, 0, 0, 63,128, 0, 0, 13, 64,188,128, 0, 1, 0, 0, 63,128, 26, 46, 65,240, 4, 25, 66, 52, 0, 0, 63,128, 0, 0,
+ 64, 64, 0, 0, 11, 64, 0, 3, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0,
+ 63,128, 0, 0, 58,131, 18,111, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0,
+ 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 64, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 1, 8, 13, 64,188,128, 0, 0, 1, 32, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0,
+ 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0,
+ 0, 2, 0, 1, 67,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0,191, 53, 4,243, 63, 53, 4,242,191, 53, 4,242, 63, 53, 4,243,
+ 13, 64,189,176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0,
+ 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 0, 0, 0, 24, 13, 64,189,176, 0, 0, 1, 30, 0, 0, 0, 2, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 65, 0, 0, 1,120, 13, 64,189,240, 0, 0, 0, 40, 0, 0, 0, 1,
+ 0, 0, 0, 0, 13, 64,186,224, 0, 0, 0, 0, 0, 0, 0, 0, 76, 65, 76, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
+ 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 63,192, 0, 0, 65,160, 0, 0, 66, 52, 0, 0, 62, 25,153,154, 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 13, 64,191,144,
+ 0, 1, 0, 0, 63, 0, 0, 0, 66, 32, 0, 0, 66, 52, 0, 0, 63,128, 0, 0, 64, 64, 0, 0, 2, 0, 0, 3, 0, 1, 0, 0,
+ 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 58,131, 18,111, 0, 1, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0,
+ 64, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 1, 8,
+ 13, 64,191,144, 0, 0, 1, 32, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 2, 0, 1, 67,128, 0, 0, 0, 0, 0, 0,
+ 63,128, 0, 0,191, 53, 4,243, 63, 53, 4,242,191, 53, 4,242, 63, 53, 4,243, 13, 64,192,192, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 24, 13, 64,192,192,
+ 0, 0, 1, 30, 0, 0, 0, 2, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 87, 79, 0, 0, 1,100, 13, 64,193, 0, 0, 0, 0,116, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 87, 79, 87,111,114,108,100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 79, 47,141, 62,209, 19, 64, 63, 14, 23, 73, 0, 0, 0, 0,
+ 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 28,204,205, 0, 0, 0, 0,
+ 0, 1, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 65,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 65, 32, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 61, 76,204,205, 0, 0, 0, 5, 0, 0, 0, 0, 59,163,215, 10, 0, 0, 0, 0,
+ 62,128, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 13, 64,194,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 32,
+ 13, 64,194,144, 0, 0, 0, 19, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 88, 0, 0, 0,120, 13, 64,194,224, 0, 0, 0, 28, 0, 0, 0, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 88, 84,101,120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 1,
+ 13, 64,195,128, 13, 64,195,128, 13, 64,195,128, 13, 64,195,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 7,159,150, 32,255,255,255,255, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 24,
+ 13, 64,195,128, 0, 0, 0, 26, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 13, 64,195,192, 0, 0, 0, 0, 0, 0, 0, 0,
+ 70, 82, 69, 69, 68, 65, 84, 65, 0, 0, 0, 4, 13, 64,195,192, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 71, 82,
+ 0, 0, 0, 76, 13, 64,195,240, 0, 0, 0,232, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 71, 82, 79,118,101,114,114,105,100,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 13, 64,196,112, 13, 64,198,176, 0, 15,255,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+ 0, 0, 0, 24, 13, 64,196,112, 0, 0, 0,231, 0, 0, 0, 1, 13, 64,196,176, 0, 0, 0, 0, 7,159,208, 32, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 24, 13, 64,196,176, 0, 0, 0,231, 0, 0, 0, 1, 13, 64,196,240,
+ 13, 64,196,112, 7,159,204, 32, 7,162,150, 32, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 24, 13, 64,196,240,
+ 0, 0, 0,231, 0, 0, 0, 1, 13, 64,197, 48, 13, 64,196,176, 7,159,200, 32, 7,157,170, 32, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 0, 0, 0, 24, 13, 64,197, 48, 0, 0, 0,231, 0, 0, 0, 1, 13, 64,197,112, 13, 64,196,240, 7,159,196, 32,
+ 7,157,174, 32, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 24, 13, 64,197,112, 0, 0, 0,231, 0, 0, 0, 1,
+ 13, 64,197,176, 13, 64,197, 48, 7,159,192, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 24,
+ 13, 64,197,176, 0, 0, 0,231, 0, 0, 0, 1, 13, 64,197,240, 13, 64,197,112, 7,159,188, 32, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 24, 13, 64,197,240, 0, 0, 0,231, 0, 0, 0, 1, 13, 64,198, 48, 13, 64,197,176,
+ 7,159,232, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 24, 13, 64,198, 48, 0, 0, 0,231,
+ 0, 0, 0, 1, 13, 64,198,112, 13, 64,197,240, 7,159,176, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+ 0, 0, 0, 24, 13, 64,198,112, 0, 0, 0,231, 0, 0, 0, 1, 13, 64,198,176, 13, 64,198, 48, 7,159,184, 32, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 24, 13, 64,198,176, 0, 0, 0,231, 0, 0, 0, 1, 0, 0, 0, 0,
+ 13, 64,198,112, 7,159,180, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 0, 0, 3, 68, 7,159,156, 32,
+ 0, 0, 0,109, 0, 0, 0, 1, 7,159,160, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 67, 97,109,101,114, 97,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 64,160, 96, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,188, 41,199, 78,193, 30,230,225, 63,230,129,216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 63,201, 15,218,128, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51,162, 33,105, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+191,128, 0, 0, 51,162, 33,105, 0, 0, 0, 0,188, 41,199, 78,193, 30,230,225, 63,230,129,216, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 48,136, 90, 64, 0, 0, 0, 0, 0, 0, 0, 0,
+168, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+176,136, 90, 64, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 8, 0,
+ 0, 1, 0, 0, 0, 0, 0, 68, 0, 5, 0, 1, 0, 0, 0, 0, 79, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
+ 0, 0, 0, 1, 0, 0, 0,100, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 61, 35,215, 10, 63,128, 0, 0, 62,204,204,205,
+ 61,204,204,205, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 1, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 1, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 0, 0, 3, 68, 7,159,160, 32, 0, 0, 0,109, 0, 0, 0, 1,
+ 7,159,164, 32, 7,159,156, 32, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 67, 97,109,101,114, 97, 65,116,109,111, 0, 97,109,101,
+114, 97, 46, 48, 48, 49, 0, 0, 0, 1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 64,161, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+188, 41,199, 78,193, 30,230,225, 63,230,129,216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,244, 47,173,
+ 37,113,155,162, 37,170, 80, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 37,170, 80, 40,165,113,155,162,
+ 0, 0, 0, 0, 37,170, 80, 39,190,169, 64,157, 63,113,155,163, 0, 0, 0, 0, 37,113,155,165,191,113,155,163,190,169, 64,157,
+ 0, 0, 0, 0,188, 41,199, 78,193, 30,230,225, 63,230,129,216, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0,154, 0, 0, 1, 25,127,255,254,
+ 0, 0, 0, 0, 37,171, 80, 41, 63,128, 0, 1, 51,128, 0, 1, 0, 0, 0, 0, 45,255,255,135,136,127,255,137, 63,128, 0, 0,
+ 0, 0, 0, 0, 48,128, 0, 0, 53,128, 0, 1, 52,128, 0, 2, 63,128, 0, 0, 63,128, 0, 0, 37,170, 80, 39, 37,113,155,166,
+ 0, 0, 0, 0,165,113,155,162, 63,113,155,164,190,169, 64,158, 0, 0, 0, 0,165,170, 80, 40, 62,169, 64,159, 63,113,155,162,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 13,223, 4, 0, 0, 0, 0, 0, 0, 0,
+ 0, 5, 0, 1, 0, 0, 0, 0, 79, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,100,
+ 0, 0, 0, 0,201,150,180, 56, 63,128, 0, 0, 63,100, 41, 6, 63,128, 0, 0, 62,204,204,205, 63,100, 41, 6, 0, 0, 0, 0,
+ 61,117,194,143, 0, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 79, 66, 0, 0, 3, 68, 7,159,164, 32, 0, 0, 0,109, 0, 0, 0, 1, 7,159,168, 32, 7,159,160, 32,
+ 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 99,104,101, 99,107,101,114,115, 46, 48, 48, 49, 0, 46, 48, 48, 49, 0, 0, 0, 0, 0,
+ 0, 1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 23, 97,112, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 13, 65,115, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 64,198,240, 55,142, 84, 52,192,188, 12,194,
+ 64, 71, 38, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,190, 36, 69,
+ 64,190, 36, 69, 64,190, 36, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0, 63, 73, 15,218,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,134,115, 83, 64,134,115, 82, 0, 0, 0, 0, 0, 0, 0, 0,192,134,115, 82,
+ 64,134,115, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,190, 36, 68, 0, 0, 0, 0, 55,142, 84, 52,
+192,188, 12,194, 64, 71, 38, 28, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 52, 85,230, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 61,243,183,207,189,243,183,205, 37,162, 83,160, 0, 0, 0, 0, 50, 26, 90, 29,
+ 50, 26, 90, 31, 62, 44, 85,173, 0, 0, 0, 0,189,243,183,205,189,243,183,207, 50, 87,107, 24, 0, 0, 0, 0,190,247,176,158,
+190,246,108,212,190, 97,232, 64, 63,128, 0, 0, 0, 0, 4, 14, 4, 0, 0, 1, 0, 0, 0, 68, 0, 1, 0, 2, 0, 0, 0, 0,
+ 79, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,100, 0, 0, 0, 0,201,150,180, 56,
+ 63,128, 0, 0, 61, 35,215, 10, 63,128, 0, 0, 62,204,204,205, 61,204,204,205, 0, 0, 0, 0, 61,117,194,143, 0, 0, 0, 0,
+ 4, 0, 1, 1, 1, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0,
+ 0, 1, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 29,237,208, 7, 29,244,128,
+ 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+ 0, 0, 0, 4, 13, 64,198,240, 0, 0, 0, 0, 0, 0, 0, 1, 7,160, 4, 32, 0, 0, 79, 66, 0, 0, 3, 68, 7,159,168, 32,
+ 0, 0, 0,109, 0, 0, 0, 1, 7,159,172, 32, 7,159,164, 32, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 99,104,101, 99,107,101,
+114,115, 46, 48, 48, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 7, 22,250,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 65,109,208, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 13, 64,199, 32, 55,142, 84, 52,192,188, 12,194, 64, 71, 38, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,190, 36, 69, 64,190, 36, 69, 64,190, 36, 68, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0, 63, 73, 15,218, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,134,115, 83,
+ 64,134,115, 82, 0, 0, 0, 0, 0, 0, 0, 0,192,134,115, 82, 64,134,115, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 64,190, 36, 68, 0, 0, 0, 0, 55,142, 84, 52,192,188, 12,194, 64, 71, 38, 28, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 52, 85,230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 61,243,183,207,
+189,243,183,205, 37,162, 83,160, 0, 0, 0, 0, 50, 26, 90, 29, 50, 26, 90, 31, 62, 44, 85,173, 0, 0, 0, 0,189,243,183,205,
+189,243,183,207, 50, 87,107, 24, 0, 0, 0, 0,190,247,176,158,190,246,108,212,190, 97,232, 64, 63,128, 0, 0, 0, 0, 4, 14,
+ 4, 0, 0, 1, 0, 0, 0, 68, 0, 1, 0, 2, 0, 0, 0, 0, 79, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
+ 0, 0, 0, 1, 0, 0, 0,100, 0, 0, 0, 0,201,150,180, 56, 63,128, 0, 0, 61, 35,215, 10, 63,128, 0, 0, 62,204,204,205,
+ 61,204,204,205, 0, 0, 0, 0, 61,117,194,143, 0, 0, 0, 0, 4, 0, 1, 1, 1, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 1, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 7, 23, 89,240, 7, 22,192,224, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 4, 13, 64,199, 32, 0, 0, 0, 0, 0, 0, 0, 1,
+ 7,160, 0, 32, 0, 0, 79, 66, 0, 0, 3, 68, 7,159,172, 32, 0, 0, 0,109, 0, 0, 0, 1, 7,159,176, 32, 7,159,168, 32,
+ 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 99,104,101, 99,107,101,114,115, 46, 48, 48, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 28,254,192, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 13, 65,120,240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 64,199, 80, 60,102,131, 0, 64,164,112, 14,
+ 63,229,211, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 34,159,178,
+ 65, 34,159,178, 65, 34,159,177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0,178, 89,250,166,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 34,159,178,180, 10,120,151, 0, 0, 0, 0, 0, 0, 0, 0, 52, 10,120,151,
+ 65, 34,159,178, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 34,159,177, 0, 0, 0, 0, 60,102,131, 0,
+ 64,164,112, 14, 63,229,211, 24, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 53, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 61,201,126,231, 48,171,145,219, 30,247,120,240, 0, 0, 0, 0,164,217,209, 65,
+ 49,255, 57, 51, 61,201,126,232, 0, 0, 0, 0, 48,172, 66,235,189,201,126,231, 49,251,201, 70, 0, 0, 0, 0,187, 29,136, 18,
+191,189,200,203, 58, 9,139,180, 63,128, 0, 0, 0, 0, 0, 33, 0, 0, 0, 1, 0, 0, 0, 68, 0, 1, 0, 2, 0, 0, 0, 0,
+ 79, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,100, 0, 0, 0, 0,201,150,180, 56,
+ 63,128, 0, 0, 61, 35,215, 10, 63,128, 0, 0, 62,204,204,205, 61,204,204,205, 0, 0, 0, 0, 61,117,194,143, 0, 0, 0, 0,
+ 4, 0, 1, 1, 1, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0,
+ 0, 1, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 27,180,176, 7, 22, 19,240,
+ 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+ 0, 0, 0, 4, 13, 64,199, 80, 0, 0, 0, 0, 0, 0, 0, 1, 7,160, 4, 32, 0, 0, 79, 66, 0, 0, 3, 68, 7,159,176, 32,
+ 0, 0, 0,109, 0, 0, 0, 1, 7,159,180, 32, 7,159,172, 32, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 76, 97,109,112, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 64,168,128, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 65,110, 57, 42, 64, 11,114,237, 64,121, 99,120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 63,103, 90, 85,190,186, 45,254, 63,128,209,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62,255,247,136,
+ 63, 74, 39, 37, 62,182, 26,138, 0, 0, 0, 0,191, 44, 21,164, 61,194, 67, 28, 63, 59,248,176, 0, 0, 0, 0, 63, 11,203,251,
+191, 27, 45,217, 63, 20, 7, 47, 0, 0, 0, 0, 65,110, 57, 42, 64, 11,114,237, 64,121, 99,120, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0,
+179, 0, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 51,128, 0, 0, 63,128, 0, 0,178,255,255,255, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 41, 64, 0, 0, 53, 64, 0, 0,181, 64, 0, 0, 63,128, 0, 0, 62,255,247,138,
+191, 44, 21,164, 63, 11,203,251, 0, 0, 0, 0, 62,182, 26,141, 63, 59,248,176, 63, 20, 7, 45, 0, 0, 0, 0,191, 74, 39, 37,
+189,194, 67, 9, 63, 27, 45,217, 0, 0, 0, 0,193,142, 14,147, 64,234,125, 35,192, 0,119, 85, 63,128, 0, 0, 0, 0, 4, 28,
+ 16, 0, 0, 0, 0, 0, 0, 68, 0, 5, 0, 1, 0, 0, 0, 0, 79, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
+ 0, 0, 0, 1, 0, 0, 0,100, 0, 0, 0, 0,201,150,180, 56, 63,128, 0, 0, 61, 35,215, 10, 63,128, 0, 0, 62,204,204,205,
+ 61,204,204,205, 0, 0, 0, 0, 61,117,194,143, 0, 0, 0, 0, 4, 0, 0, 0, 1, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 0, 0, 3, 68, 7,159,180, 32, 0, 0, 0,109, 0, 0, 0, 1,
+ 7,159,184, 32, 7,159,176, 32, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 76, 97,109,112, 46, 48, 48, 49, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 64,171,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+191,210, 76, 84,193, 71,162,178, 64,178,186,210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,103, 90, 85,
+190,186, 45,254, 63,128,209,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62,255,247,136, 63, 74, 39, 37, 62,182, 26,138,
+ 0, 0, 0, 0,191, 44, 21,164, 61,194, 67, 28, 63, 59,248,176, 0, 0, 0, 0, 63, 11,203,251,191, 27, 45,217, 63, 20, 7, 47,
+ 0, 0, 0, 0,191,210, 76, 84,193, 71,162,178, 64,178,186,210, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 52,191,255,250,179,191,255,250,
+ 0, 0, 0, 0,178,255,255,248, 63,127,255,248, 51,255,255,248, 0, 0, 0, 0, 38,255,255,248,179,127,255,248, 63,128, 0, 0,
+ 0, 0, 0, 0,180,255,255,250,182,191,255,250, 53,127,255,244, 63,128, 0, 0, 62,255,247,136,191, 44, 21,164, 63, 11,203,251,
+ 0, 0, 0, 0, 62,182, 26,139, 63, 59,248,173, 63, 20, 7, 44, 0, 0, 0, 0,191, 74, 39, 36,189,194, 67, 17, 63, 27, 45,217,
+ 0, 0, 0, 0, 63,189,129,191,192,104,159,176,192, 53,194,132, 63,128, 0, 0, 0, 0, 4, 28, 16, 0, 0, 0, 0, 0, 0, 68,
+ 0, 5, 0, 1, 0, 0, 0, 0, 79, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,100,
+ 0, 0, 0, 0,201,150,180, 56, 63,128, 0, 0, 61, 35,215, 10, 63,128, 0, 0, 62,204,204,205, 61,204,204,205, 0, 0, 0, 0,
+ 61,117,194,143, 0, 0, 0, 0, 4, 0, 0, 0, 1, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 79, 66, 0, 0, 3, 68, 7,159,184, 32, 0, 0, 0,109, 0, 0, 0, 1, 7,159,188, 32, 7,159,180, 32,
+ 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 76, 97,109,112, 46, 48, 48, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 13, 64,183,208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,193, 16,188,238,193, 57,119,229,
+ 65,141,218, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,191, 15, 79,202,191, 12,100,179, 63,234, 92,112,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,190, 96,197,171, 63, 83, 27,149, 63, 5,118, 10, 0, 0, 0, 0,191, 99,218,142,
+ 61, 75, 4,109,190,232, 3,179, 0, 0, 0, 0,190,204,142,233,191, 16, 64,104, 63, 57, 28,174, 0, 0, 0, 0,193, 16,188,238,
+193, 57,119,229, 65,141,218, 17, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,127,255,254,178,127,255,254, 52, 32, 0, 0, 0, 0, 0, 0,178,128, 0, 0,
+ 63,128, 0, 0, 51,192, 0, 2, 0, 0, 0, 0,179, 0, 0, 0, 38, 0, 0, 0, 63,128, 0, 1, 0, 0, 0, 0,181,127,255,255,
+182, 0, 0, 0, 54, 0, 0, 0, 63,128, 0, 0,190, 96,197,175,191, 99,218,143,190,204,142,235, 0, 0, 0, 0, 63, 5,118, 11,
+190,232, 3,179, 63, 57, 28,172, 0, 0, 0, 0,191, 83, 27,150,189, 75, 4,119, 63, 16, 64,105, 0, 0, 0, 0,193, 14,181,128,
+191, 61,177,214,193,128,133, 29, 63,128, 0, 0, 0, 0, 4, 28, 16, 0, 0, 0, 0, 0, 0, 68, 0, 5, 0, 1, 0, 0, 0, 0,
+ 79, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,100, 0, 0, 0, 0,201,150,180, 56,
+ 63,128, 0, 0, 61, 35,215, 10, 63,128, 0, 0, 62,204,204,205, 61,204,204,205, 0, 0, 0, 0, 61,117,194,143, 0, 0, 0, 0,
+ 4, 0, 0, 0, 1, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 1, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66,
+ 0, 0, 3, 68, 7,159,188, 32, 0, 0, 0,109, 0, 0, 0, 1, 7,159,192, 32, 7,159,184, 32, 0, 0, 0, 0, 0, 0, 0, 0,
+ 79, 66, 76, 97,109,112, 46, 48, 48, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 64,174,160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,104,147,176,193, 23, 84, 42, 64,171, 77,116, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,103, 90, 85,190,186, 45,254, 63,128,209,115, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 62,255,247,136, 63, 74, 39, 37, 62,182, 26,138, 0, 0, 0, 0,191, 44, 21,164, 61,194, 67, 28, 63, 59,248,176,
+ 0, 0, 0, 0, 63, 11,203,251,191, 27, 45,217, 63, 20, 7, 47, 0, 0, 0, 0, 64,104,147,176,193, 23, 84, 42, 64,171, 77,116,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 63,128, 0, 0, 63,128, 0, 0,180, 31,255,255,167,159,255,254, 0, 0, 0, 0, 50,255,255,254, 63,127,255,254, 50,255,255,252,
+ 0, 0, 0, 0,178,255,255,254, 39,159,255,254, 63,127,255,254, 0, 0, 0, 0, 52,127,255,253,181,127,255,254, 52,255,255,253,
+ 63,128, 0, 0, 62,255,247,137,191, 44, 21,165, 63, 11,203,251, 0, 0, 0, 0, 62,182, 26,141, 63, 59,248,176, 63, 20, 7, 46,
+ 0, 0, 0, 0,191, 74, 39, 37,189,194, 67, 20, 63, 27, 45,217, 0, 0, 0, 0,192, 93, 99, 91,190, 80, 98,136,192,112,119,223,
+ 63,128, 0, 0, 0, 0, 0, 1, 16, 0, 0, 0, 0, 0, 0, 68, 0, 5, 0, 1, 0, 0, 0, 0, 79, 66, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,100, 0, 0, 0, 0,201,150,180, 56, 63,128, 0, 0, 61, 35,215, 10,
+ 63,128, 0, 0, 62,204,204,205, 61,204,204,205, 0, 0, 0, 0, 61,117,194,143, 0, 0, 0, 0, 4, 0, 0, 0, 1, 0, 0, 0,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 64, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 0, 0, 3, 68, 7,159,192, 32,
+ 0, 0, 0,109, 0, 0, 0, 1, 7,159,196, 32, 7,159,188, 32, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 76, 97,109,112, 46, 48,
+ 48, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 64,177,176, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,192,251,147,249,193, 24, 0,206,192,104,131, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 63,103, 90, 85,190,186, 45,254, 63,128,209,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62,255,247,136,
+ 63, 74, 39, 37, 62,182, 26,138, 0, 0, 0, 0,191, 44, 21,164, 61,194, 67, 28, 63, 59,248,176, 0, 0, 0, 0, 63, 11,203,251,
+191, 27, 45,217, 63, 20, 7, 47, 0, 0, 0, 0,192,251,147,249,193, 24, 0,206,192,104,131, 67, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,127,255,254,
+ 50,255,255,254,166,127,255,254, 0, 0, 0, 0, 38,127,255,254, 63,128, 0, 0,179, 0, 0, 0, 0, 0, 0, 0,178,255,255,254,
+ 51, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,181,127,255,254,181,128, 0, 0, 41, 0, 0, 0, 63,128, 0, 0, 62,255,247,137,
+191, 44, 21,165, 63, 11,203,251, 0, 0, 0, 0, 62,182, 26,139, 63, 59,248,176, 63, 20, 7, 45, 0, 0, 0, 0,191, 74, 39, 36,
+189,194, 67, 19, 63, 27, 45,217, 0, 0, 0, 0, 64,176,142,147,191,170, 22, 97, 64,246, 28, 27, 63,128, 0, 0, 0, 0, 0, 1,
+ 16, 0, 0, 0, 0, 0, 0, 68, 0, 5, 0, 1, 0, 0, 0, 0, 79, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
+ 0, 0, 0, 1, 0, 0, 0,100, 0, 0, 0, 0,201,150,180, 56, 63,128, 0, 0, 61, 35,215, 10, 63,128, 0, 0, 62,204,204,205,
+ 61,204,204,205, 0, 0, 0, 0, 61,117,194,143, 0, 0, 0, 0, 4, 0, 0, 0, 1, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 0, 0, 3, 68, 7,159,196, 32, 0, 0, 0,109, 0, 0, 0, 1,
+ 7,159,200, 32, 7,159,192, 32, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 76, 97,109,112, 46, 48, 48, 53, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 64,180,192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 65, 54, 41,142,191,115,124, 24,192, 58,215,162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,103, 90, 85,
+190,186, 45,254, 63,128,209,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62,255,247,136, 63, 74, 39, 37, 62,182, 26,138,
+ 0, 0, 0, 0,191, 44, 21,164, 61,194, 67, 28, 63, 59,248,176, 0, 0, 0, 0, 63, 11,203,251,191, 27, 45,217, 63, 20, 7, 47,
+ 0, 0, 0, 0, 65, 54, 41,142,191,115,124, 24,192, 58,215,162, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 51, 0, 0, 0,
+ 0, 0, 0, 0, 51,128, 0, 0, 63,128, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 53,128, 0, 0, 0, 0, 0, 0,181, 64, 0, 0, 63,128, 0, 0, 62,255,247,136,191, 44, 21,164, 63, 11,203,251,
+ 0, 0, 0, 0, 62,182, 26,139, 63, 59,248,175, 63, 20, 7, 46, 0, 0, 0, 0,191, 74, 39, 36,189,194, 67, 25, 63, 27, 45,217,
+ 0, 0, 0, 0,193, 49,192,139, 65, 36, 99, 40, 63,249,156, 89, 63,128, 0, 0, 0, 0, 0, 2, 20, 0, 0, 0, 0, 0, 0, 68,
+ 0, 5, 0, 1, 0, 0, 0, 0, 79, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,100,
+ 0, 0, 0, 0,201,150,180, 56, 63,128, 0, 0, 61, 35,215, 10, 63,128, 0, 0, 62,204,204,205, 61,204,204,205, 0, 0, 0, 0,
+ 61,117,194,143, 0, 0, 0, 0, 4, 0, 0, 0, 1, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 79, 66, 0, 0, 3, 68, 7,159,200, 32, 0, 0, 0,109, 0, 0, 0, 1, 7,159,204, 32, 7,159,196, 32,
0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 76, 97,109,112, 46, 48, 48, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 80, 25,164, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,220,239, 19,193,215,239, 54,193,
- 42, 9, 60, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67,251,103,191,164, 27, 24,191, 37,136, 3, 64,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 31,143,197,190,209,184, 59, 63,138, 80, 15, 63, 0, 0, 0, 0, 57, 66, 64,191,
-132,119,210, 61,118,249, 38,191, 0, 0, 0, 0, 37, 43, 9,191, 35, 15, 44,191,114,212, 2, 63, 0, 0, 0, 0,220,239, 19,193,
-215,239, 54,193, 42, 9, 60, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 31,143,197,190, 56, 66, 64,191, 35, 43, 9,191, 0, 0, 0, 0,139, 80, 15, 63,
-117,249, 38,191,112,212, 2, 63, 0, 0, 0, 0,208,184, 59,191,142,119,210,189, 35, 15, 44, 63, 0, 0, 0, 0,195,135, 0,193,
-127,252,148,190, 8,180, 48,193, 0, 0,128, 63, 2, 0, 0, 0, 0, 16, 0, 0, 0, 0, 68, 0, 5, 0, 1, 0, 0, 0, 0, 0,
- 79, 66, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,100, 0, 0, 0, 0, 0, 0, 0, 56,180,150,201,
- 0, 0,128, 63, 10,215, 35, 61, 0, 0,128, 63,205,204,204, 62,205,204,204, 61, 0, 0, 0, 0, 4, 0, 0, 0, 1, 0, 0, 0,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 0, 0, 80, 3, 0, 0, 40,183, 32, 3,102, 0, 0, 0, 1, 0, 0, 0,168,186, 32, 3,
-168,179, 32, 3, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 76, 97,109,112, 46, 48, 48, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 28,164, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,104, 99,164,192,
-239,244, 51,193,188,110, 19, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 90,103, 63,254, 45,186,190,
-115,209,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,136,247,255, 62, 37, 39, 74, 63,138, 26,182, 62, 0, 0, 0, 0,
-164, 21, 44,191, 28, 67,194, 61,176,248, 59, 63, 0, 0, 0, 0,251,203, 11, 63,217, 45, 27,191, 47, 7, 20, 63, 0, 0, 0, 0,
-104, 99,164,192,239,244, 51,193,188,110, 19, 64, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,137,247,255, 62,164, 21, 44,191,251,203, 11, 63, 0, 0, 0, 0,
-138, 26,182, 62,177,248, 59, 63, 46, 7, 20, 63, 0, 0, 0, 0, 36, 39, 74,191, 18, 67,194,189,218, 45, 27, 63, 0, 0, 0, 0,
- 96, 24, 91, 64,226, 50,108,192,100, 9,219, 63, 0, 0,128, 63, 2, 0, 0, 0, 0, 16, 0, 0, 0, 0, 68, 0, 5, 0, 1, 0,
- 0, 0, 0, 0, 79, 66, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,100, 0, 0, 0, 0, 0, 0, 0,
- 56,180,150,201, 0, 0,128, 63, 10,215, 35, 61, 0, 0,128, 63,205,204,204, 62,205,204,204, 61, 0, 0, 0, 0, 4, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 0, 0, 80, 3, 0, 0,168,186, 32, 3,102, 0, 0, 0, 1, 0, 0, 0,
- 40,190, 32, 3, 40,183, 32, 3, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 76, 97,109,112, 46, 48, 48, 56, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,224, 30,164, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-145, 75,188, 63, 44,197,107,193, 5,147, 81, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,218, 15,201, 63,
- 0, 0,128, 37,255,255,127, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,255,255,127, 37, 0, 0,128,165,
- 0, 0, 0, 0,255,255,127, 37,105, 33,162, 51, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 37, 0, 0,128,191,105, 33,162, 51,
- 0, 0, 0, 0,145, 75,188, 63, 44,197,107,193, 5,147, 81, 64, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 25, 58,194,178, 67,191,128,179,
- 0, 0, 0, 0,156, 90,113, 26, 0, 0,128, 63,255,255,255, 39, 0, 0, 0, 0,156, 90,241, 49,220, 13,171,177,255,255,127, 63,
- 0, 0, 0, 0, 33,159,189,191, 47,164,188,191,151,188,153,192, 0, 0,128, 63, 32, 0, 0, 0, 0, 16, 0, 0, 0, 0, 68, 0,
- 5, 0, 1, 0, 0, 0, 0, 0, 79, 66, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,100, 0, 0, 0,
- 0, 0, 0, 0, 56,180,150,201, 0, 0,128, 63, 10,215, 35, 61, 0, 0,128, 63,205,204,204, 62,205,204,204, 61, 0, 0, 0, 0,
- 4, 0, 0, 0, 1, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 0, 0, 80, 3, 0, 0, 40,190, 32, 3,102, 0, 0, 0,
- 1, 0, 0, 0,168,193, 32, 3,168,186, 32, 3, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 99,104,101, 99,107,101,114,115, 0, 0,
-108, 97,110,101, 46, 48, 48, 51, 0, 0, 0, 0, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,128, 26,153, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192, 26,131, 2, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 24, 29,153, 2, 0,131,102, 60, 14,112,164, 64, 24,211,229, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,178,159, 34, 65,178,159, 34, 65,177,159, 34, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,128,166,250, 89,178, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,178,159, 34, 65,151,120, 10,180,
- 0, 0, 0, 0, 0, 0, 0, 0,151,120, 10, 52,178,159, 34, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-177,159, 34, 65, 0, 0, 0, 0, 0,131,102, 60, 14,112,164, 64, 24,211,229, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,160, 85, 74, 36,
- 0, 0, 0, 0, 0, 0, 0, 0,160, 85, 74,164, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0,126, 46,151,175, 19,238,187, 52, 64, 17,113,178, 0, 0,128, 63,231,126,201, 61,219,145,171, 48,
-207,121,201,163, 0, 0, 0, 0, 65,209,167,164, 51, 57,255, 49,232,126,201, 61, 0, 0, 0, 0,235, 66,172, 48,231,126,201,189,
- 79,216,251, 49, 0, 0, 0, 0, 18,136, 29,187,203,200,189,191,139,139, 9, 58, 0, 0,128, 63, 33, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 68, 0, 1, 0, 2, 0, 0, 0, 0, 0, 79, 66, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
-100, 0, 0, 0, 0, 0, 0, 0, 56,180,150,201, 0, 0,128, 63, 10,215, 35, 61, 0, 0,128, 63,205,204,204, 62,205,204,204, 61,
- 0, 0, 0, 0, 4, 0, 1, 1, 1, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-224, 80,150, 2,152, 3,153, 2, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 4, 0, 0, 0, 24, 29,153, 2,
- 0, 0, 0, 0, 1, 0, 0, 0, 56,134,165, 2, 79, 66, 0, 0, 80, 3, 0, 0,168,193, 32, 3,102, 0, 0, 0, 1, 0, 0, 0,
- 32,149,161, 2, 40,190, 32, 3, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66,112,114,101,118,105,101,119, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-200,250,152, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8,197,152, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,168, 41,150, 2,
-100, 82, 7,189, 21,204,103,191,241,165,230, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,153, 39,155, 64,153, 39,155, 64,153, 39,155, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,218, 15,201, 63,
- 0, 0,192, 37,255,255,255, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,153, 39,155, 64,152, 39, 27, 38,102,187,232,166,
- 0, 0, 0, 0,102,187,232, 38,157,134,196, 52,153, 39,155, 64, 0, 0, 0, 0,154, 39, 27, 38,153, 39,155,192,157,134,196, 52,
- 0, 0, 0, 0,100, 82, 7,189, 21,204,103,191,241,165,230, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 19, 21,240,152,211, 45,212,152,
- 0, 0, 0, 0, 21, 21,240,152, 0, 0,128, 63,204,175,227,166, 0, 0, 0, 0,234, 43, 90,153,204,175,227, 38, 0, 0,128, 63,
- 0, 0, 0, 0, 40,196,146, 48,240,160,185,178, 35, 61,138,178, 0, 0,128, 63, 25, 50, 83, 62, 27, 50,211, 35, 23, 50,211,163,
- 0, 0, 0, 0, 27, 50,211,163, 25, 50, 83, 62, 59,119,189, 38, 0, 0, 0, 0, 0, 94,204,173, 16, 58, 97,175, 25, 50, 83, 62,
- 0, 0, 0, 0,135, 62,153, 59,184, 97,110,185,118, 71,238, 63, 0, 0,128, 63, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 0,
- 1, 0, 2, 0, 0, 0, 0, 0, 79, 66, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,100, 0, 0, 0,
- 0, 0, 0, 0, 56,180,150,201, 0, 0,128, 63, 10,215, 35, 61, 0, 0,128, 63,205,204,204, 62,205,204,204, 61, 0, 0, 0, 0,
- 4, 0, 1, 1, 1, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240,212,127, 2,
-136,218,131, 2, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 4, 0, 0, 0,168, 41,150, 2, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 79, 66, 0, 0, 80, 3, 0, 0, 32,149,161, 2,102, 0, 0, 0, 1, 0, 0, 0,160,152,161, 2,
-168,193, 32, 3, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66,112,114,101,118,105,101,119, 46, 48, 48, 50, 0, 46, 48, 48, 49, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,136,161,165, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40,141, 20, 3, 40,141, 20, 3,216, 31,156, 2,242,187,213,191,
-194,145,134, 63,254,100, 35, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-243, 0, 28, 65,246, 0, 28, 65,243, 0, 28, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48,110,135, 63,180,169, 59, 62,
-138,115, 1,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,198, 49, 6, 65,115,154,148,192, 3,113,227,191, 0, 0, 0, 0,
-159,250,106, 64,189,207, 91, 64, 80,170, 5, 65, 0, 0, 0, 0, 46,151, 86,192,125, 94,251,192,188,127,150, 64, 0, 0, 0, 0,
-242,187,213,191,194,145,134, 63,254,100, 35, 64, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,143,174,180, 61,160, 48, 30, 61,223,118, 16,189, 0, 0, 0, 0,
-162, 29,153,188, 38,248,179, 61,115,162, 74, 61, 0, 0, 0, 0, 15, 21, 72, 61,160,250, 19,189, 88, 57,169, 61, 0, 0, 0, 0,
- 4,107, 50, 63, 88, 46,204,190,177,206, 79, 63, 0, 0,128, 63, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 0, 1, 0, 2, 0,
- 0, 0, 0, 0, 79, 66, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,100, 0, 0, 0, 0, 0, 0, 0,
- 56,180,150,201, 0, 0,128, 63, 10,215, 35, 61, 0, 0,128, 63,205,204,204, 62,205,204,204, 61, 0, 0, 0, 0, 4, 0, 1, 1,
- 1, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 64, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 4, 0, 0, 0,216, 31,156, 2, 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 68, 0, 0, 0, 40,141, 20, 3, 74, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 31, 0, 0, 0, 83,117, 98,115,117,114,102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 0, 0,
- 80, 3, 0, 0,160,152,161, 2,102, 0, 0, 0, 1, 0, 0, 0, 32,156,161, 2, 32,149,161, 2, 0, 0, 0, 0, 0, 0, 0, 0,
- 79, 66,112,114,101,118,105,101,119, 46, 48, 48, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 4, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-152, 43,161, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152,194,149, 2, 16,194,203,187,155, 89, 45, 63,244,153,230, 63, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56,135, 72, 63, 56,135, 72, 63, 56,135, 72, 63,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0, 0, 0, 56,135, 72, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56,135, 72, 63, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56,135, 72, 63, 0, 0, 0, 0, 16,194,203,187,155, 89, 45, 63,244,153,230, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,128, 63,144,104,163, 63,143,104,163, 37,144,104,163,165, 0, 0, 0, 0, 66,104,165, 37,252,250,206, 51,144,104,163, 63,
- 0, 0, 0, 0, 60,240,202,173,144,104,163,191,130, 64,204, 51, 0, 0, 0, 0,105, 93,173,187,172,176, 88,193,178, 56,118,186,
- 0, 0,128, 63, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 0, 1, 0, 2, 0, 0, 0, 0, 0, 79, 66, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,100, 0, 0, 0, 0, 0, 0, 0, 56,180,150,201, 0, 0,128, 63, 10,215, 35, 61,
- 0, 0,128, 63,205,204,204, 62,205,204,204, 61, 0, 0, 0, 0, 4, 0, 1, 1, 1, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 64, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 4, 0, 0, 0,152,194,149, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 79, 66, 0, 0, 80, 3, 0, 0,
- 32,156,161, 2,102, 0, 0, 0, 1, 0, 0, 0,160,159,161, 2,160,152,161, 2, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66,112,114,
-101,118,105,101,119, 46, 48, 48, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152, 43,161, 2,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 64,100,152, 2, 0, 31, 10, 58, 59, 94,236, 63,236, 84,231, 63, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 91,188,110, 63, 91,188,110, 63, 91,188,110, 63, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,218, 15,201, 63, 0, 0, 0,128, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,
- 91,188,110, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 50,151, 51, 91,188,110, 63, 0, 0, 0, 0,
- 0, 0, 0, 0, 91,188,110,191, 90, 50,151, 51, 0, 0, 0, 0, 0, 31, 10, 58, 59, 94,236, 63,236, 84,231, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
-160, 65,137, 63,159, 65,137,165,161, 65,137,165, 0, 0, 0, 0,160, 65,137, 37,160, 65,137, 63,194,226, 40, 40, 0, 0, 0, 0,
-248,127, 14, 45,115,141,149,176,161, 65,137, 63, 0, 0, 0, 0, 29, 80, 63,188,103, 95,226,187, 87, 19, 74, 65, 0, 0,128, 63,
- 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 0, 1, 0, 2, 0, 0, 0, 0, 0, 79, 66, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,100, 0, 0, 0, 0, 0, 0, 0, 56,180,150,201, 0, 0,128, 63, 10,215, 35, 61, 0, 0,128, 63,
-205,204,204, 62,205,204,204, 61, 0, 0, 0, 0, 4, 0, 1, 1, 1, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 64, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 4, 0, 0, 0, 64,100,152, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 79, 66, 0, 0, 80, 3, 0, 0,160,159,161, 2,
-102, 0, 0, 0, 1, 0, 0, 0, 32,163,161, 2, 32,156,161, 2, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66,112,114,101,118,105,101,
-119, 46, 48, 48, 53, 0, 48, 48, 51, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,208, 63,148, 2, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,128,155,195,189, 20,145,188, 64, 94,220, 88, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,221,180,134, 63, 48,190,141, 37,253, 55, 57, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
-253, 55, 57, 35, 48,190,141,165, 0, 0, 0, 0,219,128,112, 37, 52,177,253, 62, 94, 93, 94, 63, 0, 0, 0, 0, 52,133, 22, 37,
- 94, 93, 94,191, 52,177,253, 62, 0, 0, 0, 0,128,155,195,189, 20,145,188, 64, 94,220, 88, 65, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
- 23,252, 16, 37,196,176, 70,165, 0, 0, 0, 0, 80, 90,231,174, 94, 93, 94, 63, 52,177,253, 62, 0, 0, 0, 0, 0, 68,239,172,
- 50,177,253,190, 95, 93, 94, 63, 0, 0, 0, 0,150, 98,174, 61, 85,101,144,193,196,124,253, 64, 0, 0,128, 63, 64, 0, 0, 0,
- 0, 16, 0, 0, 0, 0, 68, 0, 5, 0, 1, 0, 0, 0, 0, 0, 79, 66, 0, 0, 7, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0,100, 0, 0, 0, 0, 0, 0, 0, 56,180,150,201, 0, 0,128, 63, 10,215, 35, 61, 0, 0,128, 63,205,204,204, 62,
-205,204,204, 61, 0, 0, 0, 0, 4, 0, 0, 0, 1, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 0, 0, 80, 3, 0, 0,
- 32,163,161, 2,102, 0, 0, 0, 1, 0, 0, 0,160,166,161, 2,160,159,161, 2, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66,112,114,
-101,118,105,101,119, 46, 48, 48, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152, 47,161, 2,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,120,100,152, 2, 94, 52,252,190,174,101,228, 65,141,116, 17, 65, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,235,239, 30, 66,236,239, 30, 66,235,239, 30, 66, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,138,174, 95, 63, 98,132,123, 37, 61, 56, 87,165, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,
-235,239, 30, 66,105,158, 5,168,108, 39, 28,168, 0, 0, 0, 0,212,129, 77, 40, 66, 15,204, 65,158,186,243, 65, 0, 0, 0, 0,
- 55, 89, 13,165,156,186,243,193, 65, 15,204, 65, 0, 0, 0, 0, 94, 52,252,190,174,101,228, 65,141,116, 17, 65, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
-101, 43,206, 60,142,217,240, 34,201,165, 18,163, 0, 0, 0, 0,226, 14,231, 31,101, 20,158, 60,193, 89,132, 60, 0, 0, 0, 0,
-190, 83,173, 34,192, 89,132,188,103, 20,158, 60, 0, 0, 0, 0, 11,215, 70, 60, 61, 43, 67,191,185,241, 31, 63, 0, 0,128, 63,
- 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 0, 1, 0, 2, 0, 0, 0, 0, 0, 79, 66, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,100, 0, 0, 0, 0, 0, 0, 0, 56,180,150,201, 0, 0,128, 63, 10,215, 35, 61, 0, 0,128, 63,
-205,204,204, 62,205,204,204, 61, 0, 0, 0, 0, 4, 0, 1, 1, 1, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 4, 0, 0, 0,120,100,152, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 79, 66, 0, 0, 80, 3, 0, 0,160,166,161, 2,
-102, 0, 0, 0, 1, 0, 0, 0, 32,170,161, 2, 32,163,161, 2, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66,112,114,101,118,105,101,
-119, 99,117, 98,101, 0,117, 98,101, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248, 52,161, 2, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,248,252,149, 2,128,253, 88, 59,220,118,160, 63, 0, 15, 37, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 88, 68, 64, 84, 88, 68, 64, 83, 88, 68, 64, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1,190,237, 62,108,230,217,190, 20,151, 52, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 67, 38, 8, 64,
-191,228,231, 63,186, 31,162, 63, 0, 0, 0, 0, 35,118, 13,192, 2, 61,220, 63, 31, 44,160, 63, 0, 0, 0, 0,166, 52,234, 60,
-102,223,227,191, 55,229, 31, 64, 0, 0, 0, 0,128,253, 88, 59,220,118,160, 63, 0, 15, 37, 64, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 10,115,103, 62,
-201,122,112,190,191, 17, 71, 59, 0, 0, 0, 0,116,205, 9, 62,205, 36, 8, 62,136,232,135, 62, 0, 0, 0, 0, 1, 27, 69,190,
-224, 50, 59,190, 25,176, 65, 62, 0, 0, 0, 0,110,176, 16,192,158, 71, 9,192,115, 90,244, 63, 0, 0,128, 63, 4, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 68, 0, 1, 0, 2, 0, 0, 0, 0, 0, 79, 66, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0,100, 0, 0, 0, 0, 0, 0, 0, 56,180,150,201, 0, 0,128, 63, 10,215, 35, 61, 0, 0,128, 63,205,204,204, 62,
-205,204,204, 61, 0, 0, 0, 0, 4, 0, 1, 1, 1, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 4, 0, 0, 0,
-248,252,149, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 79, 66, 0, 0, 80, 3, 0, 0, 32,170,161, 2,102, 0, 0, 0,
- 1, 0, 0, 0,120, 3,131, 2,160,166,161, 2, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66,112,114,101,118,105,101,119,104, 97,105,
-114, 0,108, 97,110,101, 0, 0, 0, 0, 0, 0, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,104, 1,150, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 25,155, 2, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,116,164, 2, 80,116,164, 2,
- 80,110,149, 2, 86, 92,200, 63, 7,205,227, 63,149,199, 9,189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,234,126, 47, 64,234,126, 47, 64,236,126, 47, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-225, 80, 2, 63, 5,211, 15,191, 92,219, 18, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,224,254, 18, 64, 23,209,169, 62,
- 27,251,186, 63, 0, 0, 0, 0, 71,254,133,191,207, 40, 17, 64,229,194,144, 63, 0, 0, 0, 0, 78, 38,137,191, 48,162,192,191,
-125,176, 1, 64, 0, 0, 0, 0, 86, 92,200, 63, 7,205,227, 63,149,199, 9,189, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 4, 42,199,178,
-231, 81, 69,179, 0, 0, 0, 0,195, 12,143, 50, 1, 0,128, 63, 87, 5,139, 51, 0, 0, 0, 0,155,189, 80,179,143,215, 79,178,
-254,255,127, 63, 0, 0, 0, 0,157,196,173, 51,119,194, 5,180,210,243,132,180, 0, 0,128, 63,244,100,156, 62,135,143, 14,190,
- 52,235, 17,190, 0, 0, 0, 0,175,239, 70, 62,102, 4, 26, 62, 72,251,137, 62, 0, 0, 0, 0,174,172, 52,189,211,112,154,190,
- 67,243, 76, 62, 0, 0, 0, 0,149, 56, 36,191,139, 98, 66,192,168, 5, 68, 64, 0, 0,128, 63, 0, 4, 0, 0, 1, 4, 0, 0,
- 0, 0, 68, 0, 1, 0, 2, 0, 0, 0, 0, 0, 79, 66, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
-100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0,128, 63, 10,215, 35, 61, 0, 0,128, 63,205,204,204, 62,205,204,204, 61,
- 0, 0, 0, 0, 4, 0, 1, 1, 1, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8,127,152, 2, 8,127,152, 2,
-216,116,164, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 24,220, 16, 3,104,243,163, 2, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 4, 0, 0, 0, 80,110,149, 2,
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,116, 0, 0, 0,216,116,164, 2,104, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-205,204,204, 61,205,204, 76, 62, 10,215,163, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 44, 1, 0, 0, 8,127,152, 2,
- 28, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232,102,152, 2,136,174, 7, 3, 0, 0, 0, 0, 0, 0, 0, 0,
- 40,213,148, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,244,100,156, 62,134,143, 14,190, 52,235, 17,190, 0, 0, 0, 0,172,172, 52, 61,211,112,154, 62,
- 69,243, 76,190, 0, 0, 0, 0,176,239, 70, 62,102, 4, 26, 62, 73,251,137, 62, 0, 0, 0, 0,188,211, 12,191,198,176,160,190,
- 56,156, 22, 63, 0, 0,128, 63, 0, 0, 0, 64, 0, 0, 0, 0, 17, 2, 0, 0,150, 0, 0, 0, 0, 0, 0, 0,150, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216,114, 0, 0,136,174, 7, 3,
- 26, 1, 0, 0,150, 0, 0, 0, 0, 0, 0, 0, 20,135, 17,192, 36,121, 97,192,112, 32,141, 63,190, 81, 55,191,109,243, 71,191,
-100,237, 42, 63,234,163,214, 62,200,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,200, 66,144,233,164, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 96, 32, 63,
-185,201,160, 62,160, 3, 6, 63, 11, 34,248,190,206, 53,185, 60,192,197,178, 61,174,184, 53, 63,223,172,162,190,109,136,224, 62,
-142,173, 61,191,180, 96, 10, 60,200,196,163, 61, 78,182, 99, 63,165,242,180, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66,
- 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63,248,112,150, 62, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,111, 46, 7,192,143, 26, 60,192, 28,147,207, 63,190, 81, 55,191,
-109,243, 71,191,100,237, 42, 63,234,163,214, 62,200,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,200, 66,232,211,127, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 6,121,229,190,108, 50, 41,191,136,152, 7,191,156,100,146,190,146,141, 25,191, 39, 92,142, 62,212,104, 18, 63,227,105,105,190,
-113,156, 96, 62,137,226, 69,191,147,247, 17, 61, 51,172, 44, 62, 17,125, 54, 63, 69,195,169, 61, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63,144, 63,245, 62, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0,
- 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,224,103,174,189, 60, 88, 17,192,230, 35, 76, 64,
-190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62,201,206,183,190,200,137, 61,190,158, 38, 80,191, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66,232,146, 16, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,101,160,155, 62, 59, 87,152, 62,118,199, 84,191, 86, 89,183, 62,118,103,231, 62,110, 47,177,189,155, 8, 4,191,
-100, 60,199, 62,197, 40,177,189, 2, 14, 46, 62,102, 96, 39, 62,101,119,242, 61,189,168,146, 62, 55, 9,221, 62, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63,135, 36, 87, 61, 0, 0, 0, 0,255,255,255,255,
- 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75,102,131,192,196,241, 26, 63,
-140,198, 76, 64,190, 81, 55,191,107,243, 71,191, 98,237, 42, 63,235,163,214, 62,198,206,183,190,206,137, 61,190,157, 38, 80,191,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66,240,147, 16, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 49, 80, 39, 63,171, 26,218,190, 89,118, 16, 63,130, 72,138,190,169,255,122,190,185,111, 14,191,
- 21,207, 38, 63, 73,252,211, 61,198,177, 80,191, 43,154,203,189,227,146, 53, 61, 63,180,115, 63,216,113, 42, 59,125, 63,144, 58,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63,175, 95,142, 62, 0, 0, 0, 0,
-255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 43,226,189,
-253, 85,220,191,225,104,101, 64,190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62,201,206,183,190,200,137, 61,190,
-158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66,248,148, 16, 3, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,119, 97, 45, 63,119, 47,205,190, 35,117, 19, 63,166,125, 98, 62,242,195, 73, 62,
-124,228,243, 62,119, 86, 11, 63, 70,156, 89, 62,230,232, 88, 63,130, 53,204,190,250,120,128, 62, 19,194, 20, 62, 61, 15, 90, 62,
- 92, 30,200, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63, 53,129,253, 62,
- 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-108,159,129,191, 8,210, 6, 63, 35,221,152, 64,190, 81, 55,191,107,243, 71,191,102,237, 42, 63,235,163,214, 62,200,206,183,190,
-205,137, 61,190,157, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0,150, 16, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41,167,210,190,194,172,139, 62,250,220, 35, 63, 30,182, 22,191,
-122, 3,136, 61,109,164,176,190, 30,153,147,190,255,248, 10,188,234, 90,160,190, 89,241,205,190,148,235, 25, 63,206,172,146, 62,
-137,195, 52, 61, 99,142,139, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63,
- 37,227, 77, 62, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,114,167,189,191,217, 59,104,192,184,179,184, 63,190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62,
-200,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 8,151, 16, 3,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 45,121, 62,120,126, 98, 63, 60,171,135,189,
-139,174,200,190,220,142, 21, 63, 77, 70, 40,191,118, 70,150, 62, 4,245, 92, 61,159,118,174,190,176,217, 49, 63,120,167,104, 60,
-166,104,235, 60,218,251, 73, 63, 13, 25, 44, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0,
- 0, 0,128, 63,217, 2,247, 62, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 86,112, 30, 63,111, 69, 82,192, 59,191, 51, 64,190, 81, 55,191,109,243, 71,191,100,237, 42, 63,
-234,163,214, 62,200,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66,
- 16,152, 16, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49,227,137,190,206,195, 71,191,
- 70, 31, 96,190,127, 46, 5, 63, 99, 51,214,189,228, 61, 67,191,134, 90, 2, 62,120,214,146,190, 34,111, 33, 62,136,229,187,190,
- 27,112,241, 60, 0,187,177, 60, 4,134,171, 62,164, 35, 29, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66,
- 0, 0, 0, 0, 0, 0,128, 63,130,192, 56, 63, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,118,148,176,191, 88,200, 1, 63, 89, 48,146, 64,190, 81, 55,191,109,243, 71,191,
-100,237, 42, 63,234,163,214, 62,200,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,200, 66, 24,153, 16, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42,169, 82,190,
-102,214, 57, 63, 55,112, 36,191, 59,205, 9, 62,184,139, 5, 63,105, 32, 43,190,120, 62, 37,191,220,215, 15, 63,180, 2, 8, 63,
-198,170,163, 62,160,178, 8, 63,185,164,184, 62, 68, 72, 63, 61, 16,104,112, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66,
- 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63, 97,249,192, 62, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 80,168,191, 8,154,165,191,229,248, 80, 64,190, 81, 55,191,
-109,243, 71,191,100,237, 42, 63,234,163,214, 62,200,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,200, 66, 32,154, 16, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 56,145, 5,191, 83, 77,126, 62, 14,133, 63,191,190, 5,167, 62,123,212, 96,190,233,136,176, 62, 25,193, 80,189,147, 49, 18, 62,
-222, 40, 25, 62, 59,204, 10,191,177, 46,104, 62, 36,106,150, 62, 2, 61,138, 62, 4,131, 86, 62, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63, 39, 27, 19, 63, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0,
- 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,190,246,189,233,129, 90,192,224,155, 20, 64,
-190, 81, 55,191,107,243, 71,191, 98,237, 42, 63,235,163,214, 62,198,206,183,190,206,137, 61,190,157, 38, 80,191, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 40,155, 16, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 30, 77, 14,191,231, 81,154, 62, 41,220, 22,191,104,189, 0,191,214,167,160,190,140, 60, 22,190, 37, 85, 74, 63,
- 32,253, 8,191, 96,146, 23, 61,196, 30,177,190, 79, 25,187, 60,207,244,194, 60, 53,234,253, 62,233, 52,234, 62, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63,218, 21, 79, 63, 0, 0, 0, 0,255,255,255,255,
- 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,176,231, 67,190,144,105, 11,189,
-210,111,153, 64,190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62,201,206,183,190,200,137, 61,190,158, 38, 80,191,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 48,156, 16, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 74,110,205, 62,146,226, 27,191, 73, 95,219, 61, 75, 3, 45, 63,222,109,147,190,152,196, 40, 63,
- 36,136,116,190,181, 21,190,190,211, 38,213,190,114,230,183, 62,206,217, 24, 63, 59,222, 25, 62, 0, 50,134, 61,139,161, 63, 62,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63,180, 67,127, 62, 0, 0, 0, 0,
-255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58,217,158, 63,
-122,225, 17,192,213,158,120, 64,190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62,200,206,183,190,199,137, 61,190,
-158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 56,157, 16, 3, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,176, 95, 22, 63,172, 95,210,190,114, 70, 46,191, 67, 71, 26, 62,188,164,234, 61,
-121,120, 78,191,186,229,108,188,144,225, 72,190,197,218, 42,190, 83,104,114,191, 34,213, 73, 62,217,230, 49, 61,217,117,187, 61,
-143,253, 42, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63,226,144, 95, 62,
- 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 29,205,127,191,231,116,142,191,116, 64,100, 64,190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62,200,206,183,190,
-199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 64,158, 16, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,196, 25,132,189, 67,167, 41,191,249,145,174,190,171,227, 41, 63,
- 84,208, 94, 62, 98, 21, 50, 63,138,162, 46,191,136, 53, 56,191, 9, 44,160, 62, 15, 42,188,190,109,124,145, 62, 47, 84,135, 62,
- 95, 56, 95, 62,104, 38,111, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63,
-183,116, 87, 62, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,143,106, 67,192,239, 1,236, 62,230,139,105, 64,190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62,
-200,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 80, 12, 33, 3,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 62, 72, 62,147,226,176, 62, 67,185, 48,191,
-255,215, 26,191,242,158,254,187, 89,238,201,190, 99,166, 39, 63,102,238, 3,191,206,229, 10, 62,165, 53,230, 62, 37,227,100, 62,
-230, 38, 54, 63, 87, 4, 43, 61,166, 1,190, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0,
- 0, 0,128, 63,213, 26,126, 61, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,114, 63, 58,191,242, 44,102,191,239,155,119, 64,190, 81, 55,191,109,243, 71,191,100,237, 42, 63,
-234,163,214, 62,200,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66,
- 88, 13, 33, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,198,238,131, 61, 49, 99, 58,191,
- 63,180, 26, 63,201, 92,162,190,113,254,209, 62,151, 67, 12, 63, 80,138,197, 62,197,116, 72,191,117,129,182,190,180,137, 76, 62,
-232,134,178, 62, 23,134,113, 62,235,242, 46, 62, 45,121,122, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66,
- 0, 0, 0, 0, 0, 0,128, 63,248, 12,169, 62, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,244,173,175, 62,136,194,141, 61, 0,239,164, 64,190, 81, 55,191,109,243, 71,191,
-100,237, 42, 63,234,163,214, 62,201,206,183,190,200,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,200, 66, 96, 14, 33, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,213, 38, 28, 63,
- 66,248,166, 60,227,199, 67,191,127,123, 83,190,122,119,224,190, 73, 46,149, 62,135, 43, 62, 62, 30,175,199, 62, 97,224, 2, 63,
-180,198,250, 62,211, 97, 48, 63, 38,134,130, 61,167, 53, 8, 61, 56, 40, 91, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66,
- 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63, 93,115,157, 62, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,127,188, 36,192, 83,192, 42,192, 20, 24,202, 63,190, 81, 55,191,
-109,243, 71,191,100,237, 42, 63,234,163,214, 62,200,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,200, 66,104, 15, 33, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 10,121, 82,190,233,142,216,190, 94,156, 83,191,222, 73,158, 62,170,207, 3, 63, 63, 41, 39,191, 2,164,147, 62, 36,187, 38,191,
- 0, 1,218, 62,145,119, 32,191,191,242,154, 60, 14,165,130, 62,127,236, 49, 63,163, 44,253, 60, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63, 13,194,130, 62, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0,
- 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,191,117, 51, 63, 40,247, 44,192, 84, 59, 82, 64,
-190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62,200,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66,112, 16, 33, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 89,176, 71, 59,214, 55, 18,191, 67, 82,223,190,142, 2, 50, 63,235, 17,202, 61, 51,118,199, 62,129,125, 72, 63,
- 86,250, 36,191, 70, 99, 90, 61,125, 38, 25, 63,218, 50,227, 61, 48,152,110, 61,166, 58,104, 62,121,161, 26, 63, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63, 21, 69, 35, 62, 0, 0, 0, 0,255,255,255,255,
- 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23,218, 44,192,131,112,159,190,
- 68,196, 80, 64,190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62,200,206,183,190,199,137, 61,190,158, 38, 80,191,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66,120, 17, 33, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 62, 65, 39,191,175,203,203,190, 24, 58, 8,191,132,178,185,190, 48,133, 27, 63,166,150, 35, 63,
-195,164,174,189,146, 20,209,189,124, 43, 3,191,219,188, 54, 63, 23,126, 53, 62, 93,113, 22, 63, 29,104, 42, 62,166,168,140, 61,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63, 90,122,222, 62, 0, 0, 0, 0,
-255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,222,253, 61,191,
-212,216, 43,190,219,239,140, 64,190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62,200,206,183,190,199,137, 61,190,
-158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66,128, 18, 33, 3, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 62,251,190,154,207,132, 62,191,198, 19,191,122, 82, 25,191,179,114,169,190,
-242, 80, 46,191,161, 92,100,189,125,103,188, 62, 0,234, 23,191, 12,140, 22, 63, 24, 36,252, 62,191,130,121, 62, 96,245,198, 61,
- 98,186, 42, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63, 62,205, 89, 62,
- 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-192,168,212,191, 47,175, 30,192, 94,228, 12, 64,190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62,200,206,183,190,
-199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66,136, 19, 33, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,242,136, 6, 62,240,135, 58,191, 89,198,233, 61, 57,148, 41, 63,
-151,188,189,190,156, 72,189,190,184, 14, 86, 63,185, 54,165,190,131,220, 49, 62, 60, 87,189,189,118,198,167, 61, 92,200, 80, 62,
-157,210, 10, 63,240, 9, 48, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63,
-186,132,181, 61, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,114,184,238,190,237,206,230,191,208,122, 85, 64,190, 81, 55,191,107,243, 71,191, 98,237, 42, 63,235,163,214, 62,
-198,206,183,190,206,137, 61,190,157, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66,144, 20, 33, 3,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,165, 30, 63,161, 50,249,190,180,213, 86,189,
-178, 10, 29,191,227,247, 49,191,215,139, 7,189,222,249,154,189,153, 77, 23,191,160, 58, 14, 63, 72, 47, 15, 61,138,132, 94, 62,
-167,190, 48, 62,203, 41,136, 62,157, 52,176, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0,
- 0, 0,128, 63, 38,177,233, 62, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 67, 19,104, 63,179,122,254,191,115, 37,123, 64,190, 81, 55,191,109,243, 71,191,100,237, 42, 63,
-234,163,214, 62,200,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66,
-152, 21, 33, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69,231,181, 62, 36, 19, 51, 63,
-126, 5, 6,191,231, 27,170,190,128,253, 35,189,182, 11,151,189, 74,171,178, 62,127,231, 49, 63,204,146,128, 62, 88,100, 17, 62,
-197,245,124, 62, 30,108,130, 61,201,152,229, 61,242,193, 19, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66,
- 0, 0, 0, 0, 0, 0,128, 63, 56,156, 79, 63, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,172,106,191, 63,110,225, 42,192, 2,170,110, 64,190, 81, 55,191,109,243, 71,191,
- 98,237, 42, 63,236,163,214, 62,197,206,183,190,201,137, 61,190,157, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,200, 66,160, 22, 33, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49,227, 27,191,
- 17, 83, 26, 63, 27,229, 2,191, 83, 48,135, 61,199,244,134, 62, 55, 37,151,190,210,195,237,189,249, 39, 17, 63,154, 1, 76, 61,
- 75,194, 79,191,240, 99,249, 61,190, 88,249, 60,174, 20,183, 61, 39, 38, 66, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66,
- 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63,150, 40,178, 62, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,121, 3, 12,192, 63, 11,252,190,146,136, 89, 64,190, 81, 55,191,
-109,243, 71,191,100,237, 42, 63,234,163,214, 62,200,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,200, 66,168, 23, 33, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-104, 59, 20,191, 30, 36, 17, 63,112, 57,252,190, 32,101,162, 62,139, 6,160, 62, 57,160, 80, 61,109,243,245, 61, 41, 18,224,190,
-182,154,227,188,238,196,139,190,173, 28,108, 62,191,152,246, 62,199, 50, 61, 62, 31,254,210, 61, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63, 20,166, 56, 63, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0,
- 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,250,104,187,191, 56, 86,139,189,145, 23,131, 64,
-190, 81, 55,191,107,243, 71,191,100,237, 42, 63,235,163,214, 62,198,206,183,190,203,137, 61,190,157, 38, 80,191, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66,176, 24, 33, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,228, 80, 19,191,118,138, 16,191,122,210, 6,191,139, 14,138, 62, 73, 65,189, 62, 19, 89,244,189,205, 5, 83, 62,
- 94,159,107,190, 19,199,255, 62, 14,124, 48,190, 15, 67,208, 62,184, 57,190, 62,119,154,219, 61,111,114,234, 61, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63,203, 51,223, 62, 0, 0, 0, 0,255,255,255,255,
- 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 56,161, 62,255,221,207,191,
-202,110,120, 64,190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62,201,206,183,190,200,137, 61,190,158, 38, 80,191,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66,184, 25, 33, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,138,124, 47, 63, 12,193, 0, 63,124, 39,176, 62, 68, 3,204,190,132,180, 43, 61, 66,184,104,189,
- 69,173, 54,191, 24,239,116,189,191,183, 53,190,120, 91,198,190,123, 33,150, 62, 68, 30,226, 61,224,121, 27, 62, 4,154,227, 62,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63,117, 22, 35, 63, 0, 0, 0, 0,
-255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 89, 41,192,
-117,107, 25,192,174,245,222, 63,190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62,200,206,183,190,199,137, 61,190,
-158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66,192, 26, 33, 3, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,202,207, 62,211, 32, 47, 63,139,219, 0,191,197,212,172,190,195, 68, 65, 63,
-105,152,217,190,159,218,214,190, 85,113, 84,190,194,108,158,190,229,217,235, 61, 82,179,202, 60,197,106,157, 62,211,197, 33, 63,
- 9,243, 18, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63, 1,162,102, 63,
- 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 94,238,220,191, 91, 70,150,191,203,192, 72, 64,190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62,200,206,183,190,
-199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66,200, 27, 33, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,176, 95, 22, 63,172, 95,210,190,114, 70, 46,191, 67, 71, 26, 62,
-188,164,234, 61,121,120, 78,191,186,229,108,188,144,225, 72,190,197,218, 42,190, 83,104,114,191, 13,183, 77, 62,158,153,182, 62,
- 65, 59,143, 62, 52,159, 38, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63,
-226,144, 95, 62, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 61,234,116,192,224,101,238,188,165, 20, 56, 64,190, 81, 55,191,107,243, 71,191,100,237, 42, 63,235,163,214, 62,
-198,206,183,190,203,137, 61,190,157, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66,208, 28, 33, 3,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,242,136, 6, 62,240,135, 58,191, 89,198,233, 61,
- 57,148, 41, 63,151,188,189,190,156, 72,189,190,184, 14, 86, 63,185, 54,165,190,131,220, 49, 62, 60, 87,189,189, 31,255,242, 60,
-231,194, 83, 63,189, 56, 5, 62, 68,188, 85, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0,
- 0, 0,128, 63,186,132,181, 61, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,128,209,240,189,178,183, 95, 63, 5, 67,176, 64,190, 81, 55,191,109,243, 71,191,100,237, 42, 63,
-234,163,214, 62,201,206,183,190,200,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66,
-216, 29, 33, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,107,114, 86,191,137,141, 2,191,
-227,140,105, 61, 70,121, 63,190,130,242,218, 62,237,163,132,190,219,235, 16, 60, 85,203,248, 62, 79,244, 80,191,103, 0,148, 62,
-153,189, 85, 63,151,104,200, 61,246, 55,142, 60, 74, 57, 76, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66,
- 0, 0, 0, 0, 0, 0,128, 63, 31,252, 33, 63, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,206, 54, 25,192,171,197,162, 62, 6, 16,121, 64,190, 81, 55,191,109,243, 71,191,
- 98,237, 42, 63,236,163,214, 62,197,206,183,190,201,137, 61,190,157, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,200, 66,224, 30, 33, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,219,100,244,190,
-182, 69, 91,191, 60,137,144,189,161,126, 59, 62, 28,228,200,190, 60, 49,170, 62,225,139,250,189,244,143,111, 62,252,103,100,191,
-148, 32, 79, 62,104,246,163, 62, 91,201, 16, 63, 24,104,136, 61,227,230, 66, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66,
- 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63,182, 88, 41, 63, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 57, 61,192,236, 53, 39,191,173,221, 55, 64,190, 81, 55,191,
-107,243, 71,191,100,237, 42, 63,235,163,214, 62,198,206,183,190,203,137, 61,190,157, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,200, 66,232, 31, 33, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-167, 43, 35,190,242,210,225, 61,197, 58, 30, 63,229, 8, 67, 63,215,176,222, 61, 70, 15, 12, 63, 80,195,165, 62,218, 72,227, 61,
-188, 66, 87,191,145,213,195, 62, 39,218,212, 61,242, 20, 25, 63,122, 70,118, 62,159,226,107, 61, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63,173, 74, 64, 63, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0,
- 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,249, 62, 40,191, 16,113, 26, 63, 50,179,160, 64,
-190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62,200,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66,240, 32, 33, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,190, 29,224,190,239, 44, 4, 63,125,217, 49, 63,107, 25,121,190,117,172,217, 62,242, 98,116,190,148,162, 42, 63,
-142,178,199,190, 54,105, 13,191, 83,107,163,190, 64,186, 45, 63,109,122, 91, 62, 32,134, 21, 61, 21,118,144, 61, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63,113,107, 73, 63, 0, 0, 0, 0,255,255,255,255,
- 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 51,138,191,199, 14,110,192,
- 18, 66,203, 63,190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62,200,206,183,190,199,137, 61,190,158, 38, 80,191,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66,248, 33, 33, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 36, 78, 39, 63,128, 50,251,190,139,185,189,190,175, 4,226, 62,118, 23,153,190, 67,228,120,190,
- 50,226, 42,191,239,243, 86,191, 37, 42,189,190, 66, 1,190,190,235,223,153, 59, 21,174,243, 59,231,160, 60, 63,251,135,128, 62,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63,167,245,105, 62, 0, 0, 0, 0,
-255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 75,186,191,
-170,205,204,191,132,169, 61, 64,190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62,200,206,183,190,199,137, 61,190,
-158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 35, 33, 3, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,118,223,155, 62,249,196, 3,191,115, 12,163,190,212, 73, 60,191, 59,208, 85, 62,
- 65, 11,155, 62, 28, 17,173,189, 20, 16,254,190,213,229, 32, 63,216,221, 28,189, 79, 19, 52, 62,229, 52,146, 62,191,228,171, 62,
-106,185, 79, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63, 45,184, 37, 63,
- 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 4,119,219, 63,231, 73, 28,192, 83,117,128, 64,188, 81, 55,191,109,243, 71,191,100,237, 42, 63,233,163,214, 62,202,206,183,190,
-201,137, 61,190,157, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 8, 36, 33, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,168,109,254, 62,210,146, 4, 63,232,131, 23, 63, 66,212,187, 62,
- 9,109,158,190, 71, 12,216, 62, 64, 20,153, 59, 11, 2, 7, 62, 92,134, 91, 62, 43,128, 33,191,186, 75, 51, 62,206,251,144, 60,
-198, 49, 19, 61, 22,114, 69, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63,
-221,100,115, 63, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,172, 59,194,191, 35, 29, 13,192, 13,208, 30, 64,190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62,
-200,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 16, 37, 33, 3,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,118,223,155, 62,249,196, 3,191,115, 12,163,190,
-212, 73, 60,191, 59,208, 85, 62, 65, 11,155, 62, 28, 17,173,189, 20, 16,254,190,213,229, 32, 63,216,221, 28,189, 97, 31,227, 61,
-168,207,104, 62, 38, 89,237, 62, 93,238, 74, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0,
- 0, 0,128, 63, 45,184, 37, 63, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,197,190, 82,192,251,148,174, 62, 29,189, 91, 64,190, 81, 55,191,109,243, 71,191,100,237, 42, 63,
-234,163,214, 62,200,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66,
- 24, 38, 33, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,170,132, 10,191, 82, 61,237, 62,
-127,191,223,190, 11,148, 12, 63,236,142, 92, 62, 17,199, 32, 63,157,206,242,189,199,114, 15, 63, 91, 82, 33,191, 3,247,167,190,
-210, 10, 37, 62,124,152, 65, 63, 28,110,106, 61,179,189,207, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66,
- 0, 0, 0, 0, 0, 0,128, 63, 40, 23,140, 62, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,120,157,163,190, 44,219, 33, 63,250, 25,167, 64,190, 81, 55,191,107,243, 71,191,
-102,237, 42, 63,237,163,214, 62,199,206,183,190,206,137, 61,190,157, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,200, 66, 32, 39, 33, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,102,175, 4,191,
-160,200, 50,190,248,214, 77, 63,226,194,110,190,138, 10,198, 61,210,213, 62, 62,141,163,253, 61,106,130,160, 61,201,229,101,191,
-103,145, 50, 62, 52,192, 61, 63, 16, 50, 23, 62, 40, 56, 1, 61, 43,254,162, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66,
- 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63, 89, 81,220, 60, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,131, 63, 79, 63, 22,225,203,191,183, 83,133, 64,190, 81, 55,191,
-109,243, 71,191,100,237, 42, 63,234,163,214, 62,200,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,200, 66, 40, 40, 33, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 70,155,194,190, 82, 93, 3,191, 23,133, 19,191,179,146, 2,191,131,198,104, 62, 15,189, 93, 63, 77,226,209,190,159,122, 21,191,
-169,192,234,190, 16,128, 35, 63, 9,188,167, 62,141,167,138, 61,186,163,185, 61,147,152, 3, 63, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63, 25,249,236, 59, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0,
- 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20,218, 89, 62,169, 21, 81,192, 50,226, 38, 64,
-190, 81, 55,191,107,243, 71,191, 98,237, 42, 63,235,163,214, 62,198,206,183,190,206,137, 61,190,157, 38, 80,191, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 48, 41, 33, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,139,169, 52, 63, 97,163,156, 62, 26,132,184,190, 82, 25, 7, 63,127,117,151, 62,254,206,247, 62, 27,144, 76, 63,
-150, 57,204, 62,184,181,246,188,196,222, 19, 63,175,237, 18, 61, 50, 0, 0, 61,180, 45,208, 62, 72,186, 6, 63, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63, 61,195,186, 62, 0, 0, 0, 0,255,255,255,255,
- 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,192, 91,166,190,203,138,151, 62,
-232, 4,159, 64,190, 81, 55,191,109,243, 71,191, 98,237, 42, 63,236,163,214, 62,197,206,183,190,201,137, 61,190,157, 38, 80,191,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 56, 42, 33, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,212,240, 7, 63,213, 2, 18,191,228, 90, 5,191,221, 92,178, 62, 8,236, 16, 63, 90,216,151, 62,
-155,193,128, 62, 56, 60,245,188,118,129,160,190, 47,157,113,191,114,117, 40, 63,164, 92, 37, 62, 72,198, 78, 61, 6, 28, 5, 62,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63,137, 96,226, 62, 0, 0, 0, 0,
-255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,104,137,191,191,
-143,156,208,190,234,245,116, 64,190, 81, 55,191,109,243, 71,191, 98,237, 42, 63,236,163,214, 62,197,206,183,190,202,137, 61,190,
-157, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 64, 43, 33, 3, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,173,218, 49,191,113,109, 23,191, 32, 16, 55, 62, 54,117,188,190, 25, 20,208, 62,
-118,245, 46,191, 72,158,236,186, 55, 10, 97,191,140,128,183, 62,177,230,146,190,121,217,174, 62, 45, 55,188, 62, 41, 76, 25, 62,
-138,146, 16, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63, 96, 85, 48, 63,
- 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-218, 6, 78,191,240,247, 2,191, 2,181,131, 64,190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62,200,206,183,190,
-199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 72, 44, 33, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,179, 25,236,189,127,158, 27, 63,123,235,239, 62, 59,108, 33, 63,
-244,198,103,190,251,192,187, 62,179, 39,101,190,110,210,138, 62,145,168, 54,191,208, 20, 63,190,237,209,211, 62, 1,168,129, 62,
-108,237, 7, 62,188, 30, 77, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63,
- 2,210,109, 63, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,100,181,251,191,160, 67, 79, 63, 83,115,143, 64,190, 81, 55,191,109,243, 71,191, 98,237, 42, 63,236,163,214, 62,
-197,206,183,190,201,137, 61,190,157, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 80, 45, 33, 3,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,122,243,237, 61, 11,234,169,190,211,226, 55,191,
-184,175, 25,191, 24,201, 39, 63,204, 23, 71,190, 87, 61,218, 62, 31,211, 39, 63,108,101,215,190, 35,125,244,189, 31, 56,250, 62,
-174,208,248, 62, 50, 43, 79, 60,252,186, 79, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0,
- 0, 0,128, 63, 83,130,186, 61, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,166,143, 16,192,219, 40, 31,192,188,165,240, 63,190, 81, 55,191,109,243, 71,191,100,237, 42, 63,
-234,163,214, 62,200,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66,
- 88, 46, 33, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192,157, 15,191, 47, 51,205,190,
-152, 40,136,190,128,122, 44, 63,194,144, 92, 63,235, 36, 99,190,244, 22,206,190,143, 32,220, 62,169,244, 19, 63,160,205,238,189,
- 93,255, 69, 61,131,237,129, 62,199,113, 29, 63, 16,188,169, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66,
- 0, 0, 0, 0, 0, 0,128, 63,249,139,151, 61, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 16, 46,192,234,135, 17, 62,196,174,101, 64,190, 81, 55,191,107,243, 71,191,
-100,237, 42, 63,235,163,214, 62,198,206,183,190,203,137, 61,190,157, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,200, 66, 96, 47, 33, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,186,110,162,190,
-145,104,105,190,247,168,239, 62, 3,235, 74, 63,140, 77,178,190, 80, 49, 72, 63,164, 45,112, 62, 43,101, 44, 63, 95,162,173, 62,
-180,215,104,190,132,185,112, 62, 76,198, 31, 63, 82,148,186, 61,149,140, 75, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66,
- 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63,161,174,120, 61, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,221, 76, 34,192,195, 63,220,191,101, 92, 19, 64,190, 81, 55,191,
-109,243, 71,191,100,237, 42, 63,234,163,214, 62,200,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,200, 66,104, 48, 33, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-101, 89, 32, 62,234, 91, 82, 63,243, 78, 86, 60, 22, 61, 12, 63,249,120,178,190,203, 19, 37,191,128, 65, 24, 63,196,226, 52, 63,
-219,214, 0,191,203,228,210,190,191, 5,144, 61, 27,251,203, 62, 8,217,232, 62,185,169,156, 61, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63, 7,165,113, 62, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0,
- 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,209,208,191,175, 98, 57,192,214, 39,244, 63,
-190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62,200,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66,112, 49, 33, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,242,136, 6, 62,240,135, 58,191, 89,198,233, 61, 57,148, 41, 63,151,188,189,190,156, 72,189,190,184, 14, 86, 63,
-185, 54,165,190,131,220, 49, 62, 60, 87,189,189, 40,142,100, 61,206, 81, 18, 62, 52,238, 34, 63,214,209, 40, 62, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63,186,132,181, 61, 0, 0, 0, 0,255,255,255,255,
- 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,156,146, 19,192,132,169, 38, 63,
-119,240,133, 64,190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62,200,206,183,190,199,137, 61,190,158, 38, 80,191,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66,120, 50, 33, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,123,191,104,191, 91, 12,172,190,100, 97,112, 62,240, 67,150, 61,237,234,241, 61,121, 15, 65,190,
-224, 2, 61, 62,159, 38,233,190,118, 62,191,187,107,119, 29, 63,177, 98,202, 62,157,134, 14, 63,246,140,213, 60, 97,116,179, 60,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63,159,173, 69, 63, 0, 0, 0, 0,
-255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,100,209,211, 63,
- 80, 57, 64,192,239, 52,100, 64,190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62,200,206,183,190,199,137, 61,190,
-158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66,128, 51, 33, 3, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,129, 46,157,190,239,142, 47,191, 7,129,219, 60,124,203, 40, 63, 5,175,122,189,
-180, 33,139, 62,162, 8, 63, 61, 75,191, 26,191, 52,191,189, 61,125,188,100,190,131,222,112, 61,150,149,161, 60,127,188,202, 61,
-219,141, 82, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63, 34, 78, 58, 63,
- 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-204, 40,195, 62,169, 66, 22,192, 56, 69, 88, 64,190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62,200,206,183,190,
-199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66,136, 52, 33, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,168, 69, 25, 63, 76,123,124, 62,100,238, 32,191,234,140,220, 62,
- 84,159,120, 61,187,254,244, 61,103,215, 59, 63,244,235, 71,190, 9,172, 73,191, 94,228,165,190,237,198, 39, 62,232,166,180, 61,
- 33, 45,106, 62, 32,238, 4, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63,
-128,255,104, 63, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,179, 41,124, 63,215, 52, 92,192, 1,194, 56, 64,190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62,
-200,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66,144, 53, 33, 3,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,249,191,175, 62, 72,210, 67, 63, 91, 44,255,190,
- 36,232, 97, 62,183, 89, 70,191, 58, 37,246,190,112,174,211, 61,231,174,119,189,237, 2,119,191,180,205, 35, 62,225,119,158, 59,
- 62,185, 89, 59, 58, 41,150, 62,186,212, 50, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0,
- 0, 0,128, 63, 78,102, 32, 63, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 78,215, 66,192, 16,102, 17,189,251, 64, 82, 64,190, 81, 55,191,109,243, 71,191,100,237, 42, 63,
-234,163,214, 62,200,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66,
-152, 54, 33, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 15,158,190, 97, 48, 27,191,
- 48,181, 41,191, 31, 19,160,190, 91, 23,153,189,100,243,110,190,182,169,164,190, 97,129,120,191,145,101, 90, 60,193, 53,186, 61,
- 94, 65, 31, 62,152, 57, 45, 63,117,240,248, 61, 59,128, 61, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66,
- 0, 0, 0, 0, 0, 0,128, 63,196, 79,137, 61, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,243,234,243, 63, 12,199, 50,192,246,173,118, 64,192, 81, 55,191,107,243, 71,191,
- 98,237, 42, 63,235,163,214, 62,197,206,183,190,205,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,200, 66,160, 55, 33, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,130,137,136, 62,
-101, 7,106,191,249,249,155,190,146,218,155, 60,179,212,184,188, 68,215,201,189, 40,244, 61,191,114,234, 70, 61,154,226, 1,191,
-119,139, 91, 63,202, 64,207, 61, 46,106, 89, 60, 30, 53, 13, 61,236,222, 89, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66,
- 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63, 6, 40, 87, 63, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,174,176, 54,191, 99,173,187,191,209, 31, 93, 64,190, 81, 55,191,
-109,243, 71,191,100,237, 42, 63,234,163,214, 62,200,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,200, 66,168, 56, 33, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 89,176, 71, 59,214, 55, 18,191, 67, 82,223,190,142, 2, 50, 63,235, 17,202, 61, 51,118,199, 62,129,125, 72, 63, 86,250, 36,191,
- 70, 99, 90, 61,125, 38, 25, 63,101,144,129, 62,185, 1, 91, 62, 60, 67,121, 62, 32, 77,148, 62, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63, 21, 69, 35, 62, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0,
- 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,238,131,100,192,222,185, 81,191, 40, 50, 27, 64,
-190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62,200,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66,176, 57, 33, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,167, 43, 35,190,242,210,225, 61,197, 58, 30, 63,229, 8, 67, 63,215,176,222, 61, 70, 15, 12, 63, 80,195,165, 62,
-218, 72,227, 61,188, 66, 87,191,145,213,195, 62,197,146, 70, 60, 83,125, 44, 63, 64,124,156, 62,125,144, 10, 60, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63,173, 74, 64, 63, 0, 0, 0, 0,255,255,255,255,
- 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,226, 77,248,190, 12,109,103,190,
-230,231,143, 64,190, 81, 55,191,107,243, 71,191,100,237, 42, 63,235,163,214, 62,199,206,183,190,204,137, 61,190,157, 38, 80,191,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66,184, 58, 33, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 59, 62,251,190,154,207,132, 62,191,198, 19,191,122, 82, 25,191,179,114,169,190,242, 80, 46,191,
-161, 92,100,189,125,103,188, 62, 0,234, 23,191, 12,140, 22, 63, 53,173, 3, 63,187,233, 78, 62, 77,225,187, 61,203,112, 68, 62,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63, 62,205, 89, 62, 0, 0, 0, 0,
-255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,129, 80, 10, 64,
-253,130, 74,192,124,179,109, 64,190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62,200,206,183,190,199,137, 61,190,
-158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66,192, 59, 33, 3, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89,176, 71, 59,214, 55, 18,191, 67, 82,223,190,142, 2, 50, 63,235, 17,202, 61,
- 51,118,199, 62,129,125, 72, 63, 86,250, 36,191, 70, 99, 90, 61,125, 38, 25, 63,215, 2,202, 60, 38,116,181, 59,240,167,204, 60,
-193,223,113, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63, 21, 69, 35, 62,
- 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 73, 37, 55,192, 92, 44,210,191,134, 20, 12, 64,190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62,200,206,183,190,
-199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66,200, 60, 33, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 7, 15, 63,135,194, 46,190, 36, 82,148, 62,185, 22, 66,191,
-211,135, 53, 63,111, 29,172,190,200, 68,229, 62,253,167,140, 62,181,223, 99,190, 35,226,176,190,144,158, 50, 61, 53,247,230, 62,
-253, 25,236, 62,226,215, 52, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63,
-202,199,214, 62, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 4,163,152,191,233,189, 16,192,148, 29, 39, 64,190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62,
-200,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66,208, 61, 33, 3,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,179, 25,236,189,127,158, 27, 63,123,235,239, 62,
- 59,108, 33, 63,244,198,103,190,251,192,187, 62,179, 39,101,190,110,210,138, 62,145,168, 54,191,208, 20, 63,190,113,136,250, 61,
-109, 45, 71, 62,248,240,222, 62,108,172,125, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0,
- 0, 0,128, 63, 2,210,109, 63, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 83,219,213, 63,119,221, 77,192, 98,157, 90, 64,192, 81, 55,191,107,243, 71,191, 98,237, 42, 63,
-235,163,214, 62,197,206,183,190,205,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66,
-216, 62, 33, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56,225, 4,191,239,172, 35, 63,
- 92, 44, 4,191, 88,166,112,190,229,149,176,190,233,184, 6, 63, 91,120, 44,191,208, 36, 20, 63,165, 84, 79, 63,190,145, 89, 61,
-154,154,192, 60,206,233, 43, 60, 68, 13, 0, 62, 51, 72, 87, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66,
- 0, 0, 0, 0, 0, 0,128, 63, 34,131, 32, 63, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,118, 39,106,191,130, 29,114, 63,156,123,164, 64,190, 81, 55,191,107,243, 71,191,
-102,237, 42, 63,235,163,214, 62,200,206,183,190,205,137, 61,190,157, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,200, 66, 40,160,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,119, 97, 45, 63,
-119, 47,205,190, 35,117, 19, 63,166,125, 98, 62,242,195, 73, 62,124,228,243, 62,119, 86, 11, 63, 70,156, 89, 62,230,232, 88, 63,
-130, 53,204,190,149, 27, 54, 63,243, 38,133, 62,232, 55, 53, 60, 91,130,143, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66,
- 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63, 53,129,253, 62, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 71,102,192,241,109,194,190,108, 39, 47, 64,192, 81, 55,191,
-107,243, 71,191,100,237, 42, 63,233,163,214, 62,198,206,183,190,204,137, 61,190,157, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,200, 66, 48,161,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-127,157,105,188,148, 8,184, 62,181,109, 7,191,177,194, 68,191,163, 77,220,190, 58,120,101, 63,241,105, 25, 61, 69,197, 86, 62,
-214, 78,236,190,126,136, 46, 63,152,203, 22, 61,132,161, 61, 63, 67,196, 79, 62, 79, 22,160, 60, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63,112,148, 93, 63, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0,
- 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12,224,214, 63,225,182, 5,192,246, 59,136, 64,
-190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62,200,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 56,162,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,192, 46, 24,191, 41, 20, 43,191,186,184,183, 62, 42,173,136, 62, 75, 75, 50, 63, 40, 83,126, 62,188,195, 8, 63,
-234,211,238, 62, 69, 36,152, 61,235,106,145, 62,211, 28,131, 62, 24,255, 46, 60, 11,165,139, 60,113, 88, 55, 63, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63, 93,122, 57, 63, 0, 0, 0, 0,255,255,255,255,
- 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 95,158, 92, 63,117,243, 67,192,
- 16,154, 70, 64,190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62,200,206,183,190,199,137, 61,190,158, 38, 80,191,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 64,163,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,102,175, 4,191,160,200, 50,190,248,214, 77, 63,226,194,110,190,138, 10,198, 61,210,213, 62, 62,
-141,163,253, 61,106,130,160, 61,201,229,101,191,103,145, 50, 62,112, 55,104, 61, 14, 23, 9, 61,208, 82,129, 62,176, 65, 40, 63,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63, 89, 81,220, 60, 0, 0, 0, 0,
-255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87,234, 31,192,
-204,234, 65,192,110,200,172, 63,190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62,200,206,183,190,199,137, 61,190,
-158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 72,164,160, 2, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,162,180, 99, 63,127,169,145, 62,114, 95,174, 62,169,121,223,189,173,190, 73, 63,
-118, 72, 51,190,116, 48,162,190, 59, 98,139,189, 77,245,191, 62, 75,124,253, 61,197,252, 48, 60,163,176, 62, 62,216, 93, 72, 63,
- 94, 65,166, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63, 81, 69, 12, 63,
- 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 76,122,189,191,238,243,102,191,158,253, 93, 64,190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62,200,206,183,190,
-199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 80,165,160, 2, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33,139,218,189,160, 81,222,190, 75, 71,151,190, 47, 33, 88,191,
-152,174,128,190, 43,218,107,190, 40, 96, 66,190,219, 29,113,190, 89,240,184,190,153, 92,204, 62,101,159,135, 62,253,216,174, 62,
-217, 99, 96, 62,104,171, 50, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63,
- 5, 27,207, 61, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,227, 75, 67, 63, 48,124, 78, 61,200,150,171, 64,190, 81, 55,191,107,243, 71,191,100,237, 42, 63,235,163,214, 62,
-198,206,183,190,203,137, 61,190,157, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 88,166,160, 2,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 19,190,190,188,203,147, 62, 19,242, 2, 62,
-223,138, 95, 63,144, 50, 24, 60,148,174, 64, 63,196,158, 11,191,220, 22, 64, 63, 98, 35, 19,190,217, 93, 44, 62,191,115, 58, 63,
-121,198, 2, 60,254,102,167, 59,178,100,132, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0,
- 0, 0,128, 63,189,176, 27, 62, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 24, 37,139, 62, 4,231, 62, 63,174,205,179, 64,188, 81, 55,191,107,243, 71,191,102,237, 42, 63,
-235,163,214, 62,200,206,183,190,206,137, 61,190,156, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66,
- 96,167,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87,220,239, 60,168,204, 46,191,
- 78, 95, 84, 61, 8,105, 58,191,231,245, 43, 63, 91,254,151, 62, 77,143,206, 61,177,139, 42, 63, 26,107,196,190,150,211,139,190,
- 50, 23, 92, 63,169, 27, 15, 61, 8, 43, 83, 60, 59, 83,189, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66,
- 0, 0, 0, 0, 0, 0,128, 63,121,221, 49, 63, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,247,225,191, 37,175, 81,192,248,254,198, 63,190, 81, 55,191,109,243, 71,191,
-100,237, 42, 63,234,163,214, 62,200,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,200, 66,104,168,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59,132,130, 62,
-131,166,120,190, 15,191,109,191,170,164,238, 61, 20, 93, 78,190,245,164,231,189,254,254, 16, 62, 61,189,234,190,116,167,116,189,
- 67,175, 16, 63, 66,132, 2, 61,191, 37,189, 61,173, 5, 64, 63, 91,181, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66,
- 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63,129, 93, 2, 63, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,200,110,165, 61,183, 43,239, 62,129,243,169, 64,190, 81, 55,191,
-109,243, 71,191,100,237, 42, 63,234,163,214, 62,200,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,200, 66,112,169,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-173,218, 49,191,113,109, 23,191, 32, 16, 55, 62, 54,117,188,190, 25, 20,208, 62,118,245, 46,191, 72,158,236,186, 55, 10, 97,191,
-140,128,183, 62,177,230,146,190, 62,109, 66, 63,244,159,170, 61, 79,150,243, 60, 69,136, 2, 62, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63, 96, 85, 48, 63, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0,
- 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12,158,243,191,244,237,104,192,138, 34,155, 63,
-190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62,200,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66,120,170,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,155, 22, 49,191,223,232,165, 62,133,208, 6,191, 93,253,190,190,190,234,194,190,239, 89, 29,191,134,110, 23,191,
- 8,217, 30,191,107,159,205,190, 18, 94,185,190,228,106, 92, 60, 23, 25, 35, 61,136,111, 93, 63,211,105,167, 61, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63,252,153,132, 62, 0, 0, 0, 0,255,255,255,255,
- 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,118, 74, 8, 63, 0,240, 1,192,
- 28,123,108, 64,190, 81, 55,191,107,243, 71,191,102,237, 42, 63,235,163,214, 62,200,206,183,190,205,137, 61,190,157, 38, 80,191,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66,128,171,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,217,155,104, 63,215,164, 29,190,175, 60,179,190,201,201, 43, 62,100, 60, 67, 61,171, 42, 90,189,
- 68, 85, 4,191, 67,249,130, 62,230,199,133,190,149, 14,107, 63,233,242,101, 62,181,120,181, 61,231,136, 43, 62,245,241, 4, 63,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63,252,179,108, 63, 0, 0, 0, 0,
-255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 24,231,191,
- 44,105, 21,191,186, 32, 98, 64,190, 81, 55,191,107,243, 71,191,100,237, 42, 63,235,163,214, 62,198,206,183,190,203,137, 61,190,
-157, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66,136,172,160, 2, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 52, 49,191,201, 9, 43, 63,166,234, 96,190,182,210, 37,190,206, 58, 54, 61,
-231, 1, 63, 63,133,173, 34,191, 5,154,170,190, 93,112, 51, 63, 18, 61, 23,191, 66,189,138, 62,114,103,210, 62,117,128, 62, 62,
- 35, 54, 7, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63, 33,132,126, 63,
- 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-141, 52, 5,191, 10,103, 49,192,230,154, 37, 64,190, 81, 55,191,107,243, 71,191, 98,237, 42, 63,235,163,214, 62,198,206,183,190,
-206,137, 61,190,157, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66,144,173,160, 2, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 96, 32, 63,185,201,160, 62,160, 3, 6, 63, 11, 34,248,190,
-206, 53,185, 60,192,197,178, 61,174,184, 53, 63,223,172,162,190,109,136,224, 62,142,173, 61,191,132, 47,184, 61,244,157,207, 61,
-168, 0,225, 62,249, 11,189, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63,
-248,112,150, 62, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,136, 45,177,191, 22,253, 99, 63, 8, 58,155, 64,190, 81, 55,191,109,243, 71,191, 98,237, 42, 63,236,163,214, 62,
-197,206,183,190,202,137, 61,190,157, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66,152,174,160, 2,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47,202, 55, 63,249,235, 89,190,127, 18, 92,190,
-146,129, 32,191, 7,212, 8,190,167, 50,171,190, 97,120,123, 62,232,152,249,189,140, 18,149, 62, 37,111, 13, 61,147,253, 28, 63,
-231,184,184, 62, 48, 48, 58, 60, 59, 78,111, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0,
- 0, 0,128, 63,115, 61, 18, 63, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 42,255, 57,191,235, 4, 65,192, 77, 7, 19, 64,190, 81, 55,191,109,243, 71,191,100,237, 42, 63,
-234,163,214, 62,200,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66,
-160,175,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,208,218,133,189,116, 10,176,189,
-186,237, 10, 63, 14, 61, 85, 63,182,219, 38,190,174,175,206, 62, 47,240, 10, 63, 31,232,114,190, 91,162,207,190,173, 85,193,190,
-228,255,128, 61, 76, 32,172, 61,147,152, 5, 63,205,134,169, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66,
- 0, 0, 0, 0, 0, 0,128, 63, 62, 38,212, 60, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,184, 68,137,191,204,177,226, 61,196,247,141, 64,190, 81, 55,191,109,243, 71,191,
-100,237, 42, 63,234,163,214, 62,200,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,200, 66,168,176,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,133,138,146, 61,
-133, 75, 8,187, 28,235, 68, 62,122,141,122, 63,116,117, 92, 63, 7,147,125,190, 87, 49,147,190, 9, 88, 41, 63, 63,255, 2, 63,
- 71, 44,126, 61,107,166, 0, 63, 23, 29,154, 62, 34,214,165, 61, 42,130,236, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66,
- 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63,241,170,103, 63, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22,103, 82,192, 73, 75,201,191, 1,247, 0, 64,190, 81, 55,191,
-109,243, 71,191,100,237, 42, 63,234,163,214, 62,200,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,200, 66,176,177,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-231,120,168, 62,179,154, 7,191, 41,180, 48, 63,239,232,187,190, 9, 35,104,191,222, 8,114, 62, 76,143,177,190,107, 29, 28,191,
-210,112,234, 62, 9,249, 92,190, 73,109,118, 59,168,155, 4, 63, 73, 2,243, 62,186,198,108, 59, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63, 74, 4,184, 62, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0,
- 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,194,241,246,191, 87,130,236, 62, 50,209,135, 64,
-190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62,200,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66,184,178,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,124,197,223, 62, 32,243,189,190,199,213,140,190, 13,149, 69,191,221,235,199,190,159, 79,240, 62,113,202, 14,190,
-186,168, 60,190, 5,145,220,190, 42, 8,148, 62, 49, 99,219, 62, 85, 73,242, 62,127, 14, 79, 61, 68,141, 67, 61, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63,157,236,192, 62, 0, 0, 0, 0,255,255,255,255,
- 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,224,228,149,189,233, 13,221,190,
-210,251,145, 64,190, 81, 55,191,107,243, 71,191,100,237, 42, 63,235,163,214, 62,199,206,183,190,204,137, 61,190,157, 38, 80,191,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66,192,179,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 92, 19,190,190,188,203,147, 62, 19,242, 2, 62,223,138, 95, 63,144, 50, 24, 60,148,174, 64, 63,
-196,158, 11,191,220, 22, 64, 63, 98, 35, 19,190,217, 93, 44, 62,198,141, 4, 63, 3, 71, 19, 62, 60,186,174, 61, 99,146,129, 62,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63,189,176, 27, 62, 0, 0, 0, 0,
-255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,120, 89, 62,
-164,169,120,190, 26, 78,155, 64,192, 81, 55,191,109,243, 71,191, 98,237, 42, 63,234,163,214, 62,197,206,183,190,202,137, 61,190,
-157, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66,200,180,160, 2, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,118,201, 94, 63,192,189,213, 62,142, 27, 67, 62,214, 93, 55,190, 6,154,131,190,
-133, 48,178,190,139, 11,192,190, 39,123,147,189, 29,130, 57,191, 46,253, 33,190,224, 89, 24, 63,189,174,198, 61, 2,152,101, 61,
-143,237,128, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63, 59,122,117, 63,
- 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 92, 80, 26,192,232, 3,239,189,182,210, 99, 64,190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62,200,206,183,190,
-199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66,208,181,160, 2, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,148, 16,153,190,224, 1, 33,191, 43,253,168, 62,254, 36, 35, 63,
-124,255, 19,191, 70, 97,138,190,188,109, 6, 62, 64, 58,223,190,154,121,189,189, 9,126,170, 62,115,248,126, 62, 84, 41, 12, 63,
-153, 55, 4, 62, 62, 85,152, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63,
- 74,244,106, 61, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 80,245, 70,190,136,148, 37,192, 41,107, 57, 64,190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62,
-200,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66,216,182,160, 2,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44,246,249, 62,200,102,140, 62,154,199, 10, 63,
- 40,102, 32, 63, 78, 10, 19,191,224,238,250,190, 0, 13,111,190,243,232,187, 61,106, 10, 99, 62,163, 96,221, 62,208,237,239, 61,
- 10, 34,210, 61, 62,101,181, 62,205, 22,218, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0,
- 0, 0,128, 63, 35,143, 25, 63, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,253,172, 25,191, 68,234,249,191, 59,217, 73, 64,190, 81, 55,191,109,243, 71,191,100,237, 42, 63,
-234,163,214, 62,200,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66,
- 32, 31,127, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,205,109,230, 62, 67, 47,189,190,
-205,119,155,189,238, 53, 79,191,223,144, 88,191, 88,163,146, 62, 63, 99,208,190,236,235,130, 62, 72, 10, 17,190,124,223, 15, 63,
- 12,172, 64, 62,160, 24, 51, 62,145, 49,156, 62, 26,236,169, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66,
- 0, 0, 0, 0, 0, 0,128, 63,254,237, 72, 63, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 63, 60,192,192, 70,245,191,246,177,248, 63,190, 81, 55,191,109,243, 71,191,
-100,237, 42, 63,234,163,214, 62,200,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,200, 66,240, 34,167, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50,162, 16, 63,
- 33,180,219,190, 24,166,177,190,234, 8, 29,191, 24, 26, 48,190,240, 70,115,190, 0,197, 54, 63, 69,201, 75, 62, 28,174, 10,189,
- 81,128, 78, 63,172,109,175, 60, 7,135,214, 62, 59, 12, 9, 63,150,154,198, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66,
- 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63, 34, 50,138, 62, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,125,162, 63, 63,233, 64,192,147,167, 86, 64,190, 81, 55,191,
-109,243, 71,191,100,237, 42, 63,234,163,214, 62,200,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,200, 66,192, 46,159, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-234,120, 11, 63,200, 35,253,190, 2,152,233,190, 0, 38, 0,191,214, 3, 36,191, 3,239, 45,190,135,175, 9,191, 18,130, 42,190,
-156,197, 38, 63,181, 37,238,190, 4, 49,119, 61,119,251,224, 60, 94, 5, 47, 62,188,195, 61, 63, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63, 89,162,191, 62, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0,
- 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,184, 96, 27,192,251, 23,179,191,193, 77, 38, 64,
-190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62,200,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66,128, 56,155, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,177,231, 32,191,150, 89,239, 62,128,156,188,190,225, 45, 0,191,247,133,210, 62, 51,169, 40, 63,146,184, 26, 63,
-209, 39,223,190,182,238, 15,191, 75, 63,146,190,166,161,213, 61,217,242,218, 62, 39, 18,191, 62, 89, 74,194, 61, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63, 81,236,129, 61, 0, 0, 0, 0,255,255,255,255,
- 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,185, 0, 21,191,137,241, 14,192,
-206, 27, 61, 64,190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62,200,206,183,190,199,137, 61,190,158, 38, 80,191,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 72, 93,155, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,214, 79,213,190, 95, 19, 10, 63, 60, 25, 56,191,193,193, 10, 62,127,232, 10,190,162,126, 93,190,
- 25,169, 7, 63, 38,209,221,190, 52,214,186, 62, 21, 63, 41,191, 58, 36, 27, 62,245,151, 28, 62, 82, 23,179, 62,148, 10,177, 62,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63, 98,241, 41, 63, 0, 0, 0, 0,
-255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 80, 57,189,
-193, 80,166,191,242,172,123, 64,190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62,201,206,183,190,200,137, 61,190,
-158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66,160, 13,165, 2, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160,174,232, 62, 64, 99,164, 61, 41,108, 12, 63,106,126, 50,191, 66,117,124, 62,
-134, 54, 82, 63, 38, 55,191, 62,121,232,197,190,188,203, 70,189, 26, 88, 51,191,199,225,170, 62,114, 67, 23, 62,202, 56, 33, 62,
- 26,224,184, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63,216,213,138, 61,
- 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-202,106,219,190, 17,216,127, 63,140,251,173, 64,190, 81, 55,191,110,243, 71,191, 98,237, 42, 63,235,163,214, 62,198,206,183,190,
-199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66,168,139, 8, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,214, 79,213,190, 95, 19, 10, 63, 60, 25, 56,191,193,193, 10, 62,
-127,232, 10,190,162,126, 93,190, 25,169, 7, 63, 38,209,221,190, 52,214,186, 62, 21, 63, 41,191, 10,203, 79, 63,104, 14, 32, 62,
-252,238, 44, 60, 55,180,175, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63,
- 98,241, 41, 63, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,111, 39, 91,192, 64, 81,150,191, 89, 68, 15, 64,190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62,
-200,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 40,137, 8, 3,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,130,212, 0,191, 15,161, 38,191,131,203,123,190,
-207, 48, 3,191,112, 6, 64, 63,137, 53, 34,190,175,202, 6,191, 66,241, 19, 62,119,105, 85,190,149,246,146, 61, 25, 88, 25, 60,
- 85, 74, 25, 63,199,185,196, 62,210,179,249, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0,
- 0, 0,128, 63,198,223, 90, 63, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,231, 17, 40, 63,141, 44,153,190, 68,123,161, 64,190, 81, 55,191,107,243, 71,191,102,237, 42, 63,
-235,163,214, 62,200,206,183,190,205,137, 61,190,157, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66,
-168,134, 8, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69,219, 68, 63,190, 75, 74, 62,
-250,129,229, 62,198, 78,210,190, 65, 63, 59,188,173,173,214, 62, 18,159, 85, 62, 25,160,185,189,169,193, 46,191,177, 21, 77,190,
-202,133, 32, 63, 25,163, 36, 61, 45,136,225, 60,133, 71,156, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66,
- 0, 0, 0, 0, 0, 0,128, 63, 22,208,141, 61, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 95,160, 63, 34,101,249,191,176, 96,132, 64,190, 81, 55,191,109,243, 71,191,
-100,237, 42, 63,234,163,214, 62,200,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,200, 66, 40,132, 8, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,179, 25,236,189,
-127,158, 27, 63,123,235,239, 62, 59,108, 33, 63,244,198,103,190,251,192,187, 62,179, 39,101,190,110,210,138, 62,145,168, 54,191,
-208, 20, 63,190, 62, 45,138, 62, 35,142, 30, 61,173, 78,128, 61,170,246, 32, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66,
- 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63, 2,210,109, 63, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,111,133, 6,192,167,152,225,191, 84, 16, 32, 64,190, 81, 55,191,
-109,243, 71,191,100,237, 42, 63,234,163,214, 62,200,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,200, 66, 24,254, 17, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-184, 57,241, 62,209,244,173, 62,202,195,188, 61,229, 10, 79, 63, 15,223, 34,191,171, 65, 40,190,158,228, 38, 61,187,225, 12, 63,
-198,196, 13,189,185,253, 14,191,245,107,217, 61,253,147,174, 62,227,232,218, 62, 70, 80, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63, 8,168,183, 62, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0,
- 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 99,228,190, 44, 59, 51,191,221, 75,133, 64,
-192, 81, 55,191,109,243, 71,191, 98,237, 42, 63,234,163,214, 62,197,206,183,190,202,137, 61,190,157, 38, 80,191, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66,232,132,165, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 52,191, 23, 63,247,209, 82, 62, 34, 21,204, 62, 21, 58, 43, 63, 1, 3,139, 61, 52,159,135, 61, 30,117, 36,189,
-230,123,244, 62, 79,104,185, 62, 17, 73, 33, 63,117,208,213, 62,118,118, 76, 62, 32,254, 5, 62, 65,245,128, 62, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63,179,246, 4, 63, 0, 0, 0, 0,255,255,255,255,
- 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85,101, 74,192,166,185,105,191,
- 18,141, 36, 64,190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62,200,206,183,190,199,137, 61,190,158, 38, 80,191,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 40, 69, 18, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,221,157, 3, 63, 67, 81,215, 62,135, 46, 5, 63,121,108, 9,191, 37, 83, 16,190, 37,244,130,190,
-191, 18,216, 62,221, 44, 53, 63,153,136,162,189, 80,138,252,190,221,214,102, 61, 50, 22, 25, 63,139, 42,157, 62,164,113, 30, 61,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63,145,208, 26, 63, 0, 0, 0, 0,
-255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,122,234,218,191,
- 50,177,232,191,108,174, 42, 64,190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62,200,206,183,190,199,137, 61,190,
-158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66,216, 29, 16, 3, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 98, 41, 59,191,236, 70,252, 61, 77, 96, 25,191, 33,195,154,190, 31,119,242,190,
-125, 79,204,190, 23, 53, 18,190,102, 31,214,190,165,174,199,190, 48,105,169,188,229, 50, 8, 62,227,251,148, 62,133, 65,206, 62,
- 75, 82, 49, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63, 44,230, 5, 63,
- 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-254,106,206,191,205, 36,150, 62, 96, 42,137, 64,190, 81, 55,191,107,243, 71,191,100,237, 42, 63,235,163,214, 62,198,206,183,190,
-203,137, 61,190,157, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 56,146,150, 2, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52,191, 23, 63,247,209, 82, 62, 34, 21,204, 62, 21, 58, 43, 63,
- 1, 3,139, 61, 52,159,135, 61, 30,117, 36,189,230,123,244, 62, 79,104,185, 62, 17, 73, 33, 63, 87, 15,231, 62, 49,237,207, 62,
-254, 43,141, 61,226,225,150, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63,
-179,246, 4, 63, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,200, 61,167, 63,119, 5,171,191, 86,214,147, 64,190, 81, 55,191,109,243, 71,191, 98,237, 42, 63,236,163,214, 62,
-197,206,183,190,201,137, 61,190,157, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66,224,233, 63, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,111, 39, 70, 63, 91,103,218,188, 44, 24, 30, 63,
- 28, 81, 12, 62, 26,129, 16, 63,215,153,162, 61, 11,203, 31,191,222,132, 2, 63, 26, 4,154,190,202,112,100, 62,216, 36,214, 62,
-172, 85,122, 60, 44,247,142, 60,132,140, 12, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0,
- 0, 0,128, 63, 48, 61,115, 63, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,194, 14,251,191, 44,213,105,190,165,188,109, 64,190, 81, 55,191,107,243, 71,191,100,237, 42, 63,
-235,163,214, 62,198,206,183,190,203,137, 61,190,157, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66,
-160,168,126, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,173, 49, 3,191,178,133, 9, 63,
-104, 18, 16, 63,159, 16,186, 62,183,147,245, 62,220, 88,111, 62,220, 25, 2, 63, 80, 44, 77,191, 76,136,152, 62,126,242,176, 61,
-239, 13,155, 62, 40, 17,234, 62, 92,128, 13, 62,226,130,208, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66,
- 0, 0, 0, 0, 0, 0,128, 63, 65,147,208, 62, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,102, 47, 46,192, 64,212, 45, 63, 61, 35,127, 64,190, 81, 55,191,109,243, 71,191,
-100,237, 42, 63,234,163,214, 62,200,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,200, 66,240, 12,167, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8,164, 48, 63,
- 32,100, 38,191,163,157,157,190, 10, 78,167, 61, 4, 8, 54, 59,139,155,147,190, 11, 41, 50, 63, 27,101,140, 62,241,237,110, 63,
- 18,188,179, 59, 74, 31,165, 62,207,208, 37, 63, 74,227,141, 60, 8, 28, 76, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66,
- 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63,129, 24, 80, 62, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10,203, 83,191,133, 15, 29,192,237, 82, 42, 64,190, 81, 55,191,
-109,243, 71,191,100,237, 42, 63,234,163,214, 62,200,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,200, 66, 24, 38,164, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 41,194,232,190,156,110, 35, 63,233,200, 75,190,170,158, 22,191, 83,122,193,189,217, 58,149,189, 80, 15, 18,191, 66, 37,145,189,
- 98,184,219,189, 70,185, 86,191, 21,150,239, 61,130,193, 24, 62, 46, 71,217, 62,141,114,158, 62, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63,122,231, 75, 63, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0,
- 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 71,102, 63, 16, 13, 44,191, 24,187,156, 64,
-190, 81, 55,191,109,243, 71,191, 98,237, 42, 63,236,163,214, 62,197,206,183,190,201,137, 61,190,157, 38, 80,191, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66,144,156,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,120, 40, 61,190,150,196, 15,191,159,219, 54,191,234,195,191, 62,104, 96,122,190,193, 71, 74,191, 15,230, 56,190,
- 61,156,203, 61,227, 39,177, 61, 25,222,193,190,178,206, 13, 63,144,101,237, 60, 16,227,198, 60, 16, 30,201, 62, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63, 74,137,189, 61, 0, 0, 0, 0,255,255,255,255,
- 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,140,210,252, 62,216, 58, 44,191,
- 98,217,149, 64,192, 81, 55,191,109,243, 71,191, 98,237, 42, 63,234,163,214, 62,197,206,183,190,202,137, 61,190,157, 38, 80,191,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 64, 16, 16, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 86,152, 38, 63,169,225, 17,191, 57,217,140,189, 67,124,254,190, 13, 65, 17, 62,229,204, 15, 63,
-180,148,241, 62,175,210, 73,191,182,161, 21, 63,186,222,169,188,235,174, 4, 63,125,216,156, 61,114,228,115, 61,124,239,176, 62,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63, 86,104,165, 61, 0, 0, 0, 0,
-255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,181,210, 46,192,
- 59, 4,135,191,164, 99, 44, 64,190, 81, 55,191,109,243, 71,191, 98,237, 42, 63,236,163,214, 62,197,206,183,190,202,137, 61,190,
-157, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66,168, 33,164, 2, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,119, 97, 45, 63,119, 47,205,190, 35,117, 19, 63,166,125, 98, 62,242,195, 73, 62,
-124,228,243, 62,119, 86, 11, 63, 70,156, 89, 62,230,232, 88, 63,130, 53,204,190,154, 69,201, 61, 74,143, 3, 63,155, 10,162, 62,
-186, 21,146, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63, 53,129,253, 62,
- 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 64,235, 64, 60,203,210,147, 63,205, 32,185, 64,190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62,201,206,183,190,
-200,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66,104,249,161, 2, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,130,137,136, 62,101, 7,106,191,249,249,155,190,146,218,155, 60,
-179,212,184,188, 68,215,201,189, 40,244, 61,191,114,234, 70, 61,154,226, 1,191,119,139, 91, 63,135,168,109, 63, 87, 44,112, 61,
-106, 72,115, 59,214, 90, 24, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63,
- 6, 40, 87, 63, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,160,185, 0,192,197,235, 38,192,182,221,245, 63,190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62,
-200,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66,184, 34,155, 2,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,241, 54,241, 62, 25, 75, 60,190,137, 31,166,190,
- 26,162, 76, 63,214, 23,180, 62,134, 28, 22,191,189,125,184, 62,170,143, 49, 63, 42,100,208, 62,201,182, 12, 63, 85,123,103, 61,
-230, 65, 90, 62, 33,215, 29, 63,124, 5,233, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0,
- 0, 0,128, 63,233, 6, 78, 63, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,132,118,247,191, 87, 66, 8,192, 93, 88, 20, 64,190, 81, 55,191,109,243, 71,191,100,237, 42, 63,
-234,163,214, 62,200,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66,
-168,154,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,183,149,157, 62,169,241,150, 62,
-210, 72, 5, 63,196, 98, 61,191, 94, 43,103,191,141,249, 13, 62,108, 40, 28,190,180,143, 89,189,159,169,180, 62, 50,210,102, 63,
- 15,245,186, 61,252,211,140, 62,237,184,252, 62,164,107, 15, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66,
- 0, 0, 0, 0, 0, 0,128, 63,234, 53,126, 63, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96,252, 2,190,189, 32, 63,192,249,176, 40, 64,190, 81, 55,191,107,243, 71,191,
- 98,237, 42, 63,235,163,214, 62,198,206,183,190,206,137, 61,190,157, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,200, 66, 48, 13,132, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,227,185,185, 62,
- 69, 55,133,190, 76,101,246, 62,146, 32, 65,191, 11,142, 47,190,207,240, 16,191,178, 47,250, 60,147, 12,135, 62,250,130,192,190,
-182,224, 63, 63,109,251,141, 61,209, 15,135, 61,152,122,212, 62,150, 66,230, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66,
- 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63,194, 22,201, 62, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,186, 37, 60,192,209, 36, 19,192,200,102,212, 63,190, 81, 55,191,
-109,243, 71,191,100,237, 42, 63,234,163,214, 62,200,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,200, 66, 88, 27, 16, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-133,116,253,190,160,178, 23, 63,114, 78, 32,191, 57, 97,221, 61,191,244,236,189,206, 56,214, 62, 77,142, 40,191, 31, 48,161, 61,
- 82, 95, 7, 63,244, 70, 62,190,144,146,141, 59, 24,189,182, 62, 12, 24, 34, 63,242, 33,183, 59, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63, 51, 4, 90, 63, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0,
- 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62,165,155, 63, 35,188,200,191,156,201,140, 64,
-190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62,200,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66,104,124, 20, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68,198,205, 62, 50, 21, 99, 63, 18,246, 86,190,237, 24,178,189,229,177, 74, 62,233, 94,174,190, 14,113, 17,189,
-144,148,211, 62,157,182, 80,190, 18,214, 66,191, 54,112,182, 62,156,202, 2, 61, 65,146, 40, 61, 24, 18, 18, 63, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63,229, 84,124, 62, 0, 0, 0, 0,255,255,255,255,
- 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,150, 48, 1, 63,133, 14,211, 62,
-120,209,175, 64,190, 81, 55,191,107,243, 71,191,102,237, 42, 63,235,163,214, 62,200,206,183,190,205,137, 61,190,157, 38, 80,191,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 32, 41,167, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 30, 0,181, 60,183, 21, 39, 63,174, 28, 42,191,206,254,185, 62, 60,101,180, 61,224,164,162, 62,
-169, 22, 78,191, 15,164,146,190, 66, 47,188, 62,233,255, 63,191, 26, 61, 76, 63,214,234,171, 60,230,187, 47, 60,126,146, 46, 62,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63,113,195, 41, 63, 0, 0, 0, 0,
-255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,196,144, 98, 62,
- 62,190,112,191,153,224,138, 64,190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62,200,206,183,190,199,137, 61,190,
-158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66,200, 89,169, 2, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 80,148,190, 17,138, 5, 63,171, 16, 38, 62,107, 50, 73,191,214,126, 32, 63,
-143, 14,148, 62,183, 31, 4,191, 70,152,145, 62, 21, 32, 89,189, 63,239,100, 62, 51,212,220, 62, 49, 96,238, 61, 1,246,205, 61,
- 64, 22,180, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63,247, 33, 76, 63,
- 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 80,243, 2,192, 18, 84, 91,191,110, 0, 77, 64,190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62,200,206,183,190,
-199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66,232, 96,169, 2, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49,146, 69,191,236,123, 69,190,179,188, 26,191,207,182, 47,189,
- 96, 14,105,191, 55,120, 31,190,138, 41, 18, 62,210, 73,183,189,105, 99, 57,189, 32,155,137,190,112,143, 79, 62, 13, 36,220, 62,
-207,171,119, 62,168,124, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63,
-184,151,199, 62, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,228, 81, 34, 62,178, 55, 39,192, 87, 36, 68, 64,190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62,
-200,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66,144, 82,169, 2,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,230,148, 3, 63,224, 68,239, 62, 72, 64,241, 62,
- 71, 35, 11,191,248,202, 31,191, 68, 98,182, 62, 18,127, 48,191,158,108, 26,189,145, 93,173,190,161,155, 16,191,144, 72,244, 61,
-152, 98,173, 61, 16,243,154, 62, 38,162,252, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0,
- 0, 0,128, 63, 69,111,245, 62, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,226,206,132,191,153,157,254,191, 61, 78, 57, 64,190, 81, 55,191,109,243, 71,191,100,237, 42, 63,
-234,163,214, 62,200,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66,
-224, 31,167, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 64,217, 62,151, 24,213,190,
- 94,174,187, 61,102,136, 76, 63, 27, 1, 32, 63,236, 95,162,189,124, 18, 29,191, 75, 78,155,190,124,134, 43,191,174,202,184,190,
- 49,138, 35, 62,237,209, 85, 62,126, 75,186, 62,113, 6,137, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66,
- 0, 0, 0, 0, 0, 0,128, 63,111,100, 76, 61, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,228,163,237, 62, 55, 20, 58,192, 9,122, 64, 64,190, 81, 55,191,109,243, 71,191,
-100,237, 42, 63,234,163,214, 62,200,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,200, 66, 88, 20,167, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 95, 55,189,
- 43, 21,181,190,230, 3,101,191, 87,248,137, 62, 4,208, 75, 62, 0,115,115, 59,100,196, 95,190,191, 15, 83, 62, 84,222, 81,191,
- 36, 58,169, 62,187,215,163, 61, 90,207, 92, 61,188,248,152, 62,182, 59, 17, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66,
- 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63,230,119,112, 63, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,202, 59,148,191,188,242, 56,191,189,111,113, 64,190, 81, 55,191,
-109,243, 71,191,100,237, 42, 63,234,163,214, 62,200,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,200, 66,176, 23,162, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-202, 21,192, 61,216, 22, 8, 63,188, 84, 66, 63,158, 70,186, 62,240,211, 98, 62,124, 7,155, 62, 10,134,246, 62,110, 16, 79,190,
-248,197,252,189, 81,188, 39, 63, 42,204,169, 62,204,195,154, 62,146,225, 51, 62,125,254, 66, 62, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63,123, 26, 81, 63, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0,
- 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34,179,252,191, 86,102,184,191,169,174, 51, 64,
-190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62,200,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 32,160,148, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,232, 50,144,190,207, 31, 50,191,179,203, 40,191,214, 99, 45,189,109,153, 34,190,239, 94, 10,191,115,186,212,190,
- 42,234, 19,190, 72, 26, 97,191,122,105, 99, 61, 46,210, 21, 62,250, 32,186, 62,195,126,178, 62, 85,238, 16, 62, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63,131,240,124, 60, 0, 0, 0, 0,255,255,255,255,
- 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,244, 77,192, 51, 52,163,190,
- 30,234, 62, 64,190, 81, 55,191,109,243, 71,191, 98,237, 42, 63,236,163,214, 62,197,206,183,190,202,137, 61,190,157, 38, 80,191,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66,168, 37,155, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,126, 41,112, 63, 56,166,164, 61, 91, 4,240, 61, 15,172,161, 62,106,126,191,190,117, 33, 64, 63,
-130,227,184, 62, 92, 20,244,190,210,168,180,189, 60, 25, 43,191, 89,246,198, 61, 30,130, 46, 63,223,241, 54, 62,221, 41, 46, 61,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63,190,196,107, 62, 0, 0, 0, 0,
-255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 27,122, 63,
-179,229,133,191, 66, 39,149, 64,190, 81, 55,191,107,243, 71,191,102,237, 42, 63,235,163,214, 62,200,206,183,190,205,137, 61,190,
-157, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66,176, 38,155, 2, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192, 46, 24,191, 41, 20, 43,191,186,184,183, 62, 42,173,136, 62, 75, 75, 50, 63,
- 40, 83,126, 62,188,195, 8, 63,234,211,238, 62, 69, 36,152, 61,235,106,145, 62,216, 4,239, 62,235,100, 21, 61,174, 73, 20, 61,
- 83,197,235, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63, 93,122, 57, 63,
- 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 20, 66,151,191,208,139, 62,192, 98,118, 5, 64,190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62,200,206,183,190,
-199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66,224,124, 8, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,159,160, 32,190,190, 39, 52,191,142,138, 9,191,138, 13,224, 62,
-166,218,242, 62, 93, 71, 26, 63, 36, 22, 52, 62,231, 52,124, 62,165, 91,192,190,148,111, 86,191,212,101,120, 61, 72, 26,221, 61,
-158, 82, 22, 63,241, 14,122, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63,
-195, 96, 22, 63, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,224, 63, 46,190,222,105,107,191,198,191,132, 64,190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62,
-201,206,183,190,200,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66,232,125, 8, 3,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47,202, 55, 63,249,235, 89,190,127, 18, 92,190,
-146,129, 32,191, 7,212, 8,190,167, 50,171,190, 97,120,123, 62,232,152,249,189,140, 18,149, 62, 37,111, 13, 61, 89,238,204, 62,
- 10, 90, 39, 62,123,156, 6, 62, 98, 22,156, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0,
- 0, 0,128, 63,115, 61, 18, 63, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,250,148,234,190, 11,179, 97,192, 16,215, 3, 64,190, 81, 55,191,109,243, 71,191,100,237, 42, 63,
-234,163,214, 62,200,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66,
-200,205, 16, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,177,227,248,190,160,134,192,190,
-155,159,184, 62,105,157, 51, 63, 2, 56, 54, 63, 88,126,182, 62,108,207, 4,187, 38,216,198, 62,140, 66, 73,191,139,126,248, 61,
-251, 26,119, 60, 34,207,150, 60,170,176, 20, 63,225,120,197, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66,
- 0, 0, 0, 0, 0, 0,128, 63,208,234,216, 62, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,202,177,135,191,150,220, 86,192,144, 9,239, 63,190, 81, 55,191,109,243, 71,191,
-100,237, 42, 63,234,163,214, 62,200,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,200, 66,208,206, 16, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,201,122, 18,191,
-155, 68,163,190,236, 36, 39,191,221,182,194,190,217, 47, 98,190, 97, 46,230,190,197,236,134, 62,216, 40,187, 60,111, 92,179,189,
- 71, 17, 54, 63, 87,169, 5, 61,120,116, 92, 61,179,253, 38, 63,225,192,133, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66,
- 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63,100, 58,154, 60, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,213,105,108,192,125,145,223, 62,192,182, 82, 64,190, 81, 55,191,
-107,243, 71,191, 98,237, 42, 63,235,163,214, 62,198,206,183,190,206,137, 61,190,157, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,200, 66,160,173,161, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-195,244, 32,190,174,189,218,190,163, 11, 55, 62,157, 75, 95,191, 33,155,243,190,180, 86, 90,191, 57,237, 86, 62,226,198,126,190,
- 30, 34,101, 61, 93,239,180,190,206, 82,204, 61, 44,113, 89, 63, 63, 63, 23, 61,220, 33,100, 60, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63, 6, 63, 50, 63, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0,
- 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 23,243, 62, 46,133,166,191, 78,153,134, 64,
-192, 81, 55,191,109,243, 71,191, 98,237, 42, 63,234,163,214, 62,197,206,183,190,202,137, 61,190,157, 38, 80,191, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66,168,174,161, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,173,218, 49,191,113,109, 23,191, 32, 16, 55, 62, 54,117,188,190, 25, 20,208, 62,118,245, 46,191, 72,158,236,186,
- 55, 10, 97,191,140,128,183, 62,177,230,146,190,159, 2,190, 62, 29,141,193, 61,214, 93,214, 61,164, 2,220, 62, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63, 96, 85, 48, 63, 0, 0, 0, 0,255,255,255,255,
- 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,130,192,214,190,182, 57, 73,192,
-175, 83, 23, 64,190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62,200,206,183,190,199,137, 61,190,158, 38, 80,191,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66,216, 53,153, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,206,172, 34,191, 64, 79,187, 62,140,197, 11, 62,199,135, 42, 63,100, 91,148, 61,123, 75, 25, 60,
- 54,126,232,189,210,190,220,189, 9,158,186, 62,182, 62,225,190,211,103, 84, 61, 92,194,115, 61,148,216,253, 62, 41, 34,201, 62,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63, 38,103,162, 62, 0, 0, 0, 0,
-255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,122, 4,133,192,
-109,136,128, 62,136, 58, 58, 64,190, 81, 55,191,107,243, 71,191, 98,237, 42, 63,235,163,214, 62,198,206,183,190,206,137, 61,190,
-157, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66,224, 54,153, 2, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,147,206,137, 62,234,207, 11, 63,195,144,225, 62,162,225, 40, 63, 24, 69,148,190,
- 50,238,190, 61, 13, 31, 86,191,217,106, 71, 63,247, 60, 1, 62,162,250,136, 62, 70, 80,156, 58,142,100,108, 63, 15, 72,153, 61,
-116, 35, 17, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63,174,199, 41, 60,
- 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-132, 40, 12, 62,102, 32, 1,192,222,178, 95, 64,190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62,200,206,183,190,
-199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66,232, 55,153, 2, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,157, 57, 95, 63,238,148,214, 62, 87,249,109, 62,227,220,204,189,
-238,118,221,189,121,162, 19,191,203, 50, 48,191, 58,232, 80,190,141,100, 8,191,229,142, 19, 63,223,196, 88, 62,134, 94,237, 61,
-141, 5, 97, 62, 43,195,231, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63,
- 75, 11, 15, 63, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,211,109, 80, 63, 96,210, 20,192,246,253,103, 64,190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62,
-200,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 72,253,149, 2,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 32,133, 62, 13,201,189,190, 55, 43, 66, 63,
- 76,254,239, 62,254,163,179, 62, 15,181,171,188,130, 8,196, 60,214, 27, 14,191, 86, 32,128,190,190, 27,208,190, 69,196, 53, 62,
-136,184,135, 61,240,250, 35, 62, 34,153, 24, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0,
- 0, 0,128, 63,224, 93,234, 62, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,240,142,147,191, 43, 7,166,190, 61, 69,130, 64,190, 81, 55,191,109,243, 71,191,100,237, 42, 63,
-234,163,214, 62,200,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66,
- 80,254,149, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44,246,249, 62,200,102,140, 62,
-154,199, 10, 63, 40,102, 32, 63, 78, 10, 19,191,224,238,250,190, 0, 13,111,190,243,232,187, 61,106, 10, 99, 62,163, 96,221, 62,
- 56,243,206, 62,109,170,159, 62,224,145, 2, 62,211, 50, 32, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66,
- 0, 0, 0, 0, 0, 0,128, 63, 35,143, 25, 63, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,254, 89,191,195,197, 85,192,176,197,254, 63,190, 81, 55,191,109,243, 71,191,
-100,237, 42, 63,234,163,214, 62,200,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,200, 66, 88,255,149, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,122,125,204, 62,
- 37, 10, 46, 63, 69, 71, 26,190,130,168, 24, 63,117,105, 36,190,144,220, 32, 63, 11,167,231, 62,151,145,179, 62, 33, 72, 36,190,
- 42, 67, 50,191,111, 3, 11, 61,241, 2, 76, 61,231,181, 28, 63,103,179,155, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66,
- 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63,244,186,188, 62, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 46,253,191,200,126,214, 61,248, 1,125, 64,190, 81, 55,191,
-109,243, 71,191, 98,237, 42, 63,236,163,214, 62,197,206,183,190,202,137, 61,190,157, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,200, 66, 96, 0,150, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-171,218,181,190,162,100, 80, 63, 86, 18,175,190,142, 51,157,190, 18, 35, 4,191,207,113,210, 62, 0,170, 11, 63,134,126,165,190,
-141, 47, 59, 62,104,163, 62,191, 18,251,181, 62,225,163,242, 62, 90, 98,191, 61,220, 33,158, 61, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63, 83, 76,104, 63, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0,
- 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,115, 18, 94,192,112, 61, 49, 61, 90,153, 71, 64,
-190, 81, 55,191,109,243, 71,191, 98,237, 42, 63,236,163,214, 62,197,206,183,190,202,137, 61,190,157, 38, 80,191, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66,144, 17,162, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,126, 41,112, 63, 56,166,164, 61, 91, 4,240, 61, 15,172,161, 62,106,126,191,190,117, 33, 64, 63,130,227,184, 62,
- 92, 20,244,190,210,168,180,189, 60, 25, 43,191,141,188,190, 61,118,157, 68, 63,105,119,224, 61,112,129,239, 60, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63,190,196,107, 62, 0, 0, 0, 0,255,255,255,255,
- 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, 34,141,191,222,140, 39,192,
-182, 55, 25, 64,190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62,200,206,183,190,199,137, 61,190,158, 38, 80,191,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66,152, 18,162, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,193, 40, 85, 63,120, 79,146,190, 68,249,203,190,207,217,131, 62,229, 65, 22, 63,120,104, 63, 63,
-173,135,124,189,131,179,190,190,208, 81,171, 62,211,132, 69, 63,122, 6,189, 61, 58,195, 23, 62, 6,114,254, 62,189,106,134, 62,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63,179,102, 20, 63, 0, 0, 0, 0,
-255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,149, 14, 63,192,
- 64,204,165,191, 12, 96, 24, 64,190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62,200,206,183,190,199,137, 61,190,
-158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66,160, 19,162, 2, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 81, 30,191,157, 39,223, 62,214, 30, 11, 63, 76, 51,186, 62,206,228, 83, 62,
-209,146, 0, 61, 22,106,121, 63, 44,124, 6,187,128,233, 71,187,218,190,173, 62, 14, 67, 83, 61,192,186, 4, 63, 39,206,197, 62,
-178,159, 50, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63,208, 19, 52, 60,
- 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-183,180, 22,192,126,173, 4,192,240,189, 8, 64,190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62,200,206,183,190,
-199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66,168, 20,162, 2, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,104, 59, 20,191, 30, 36, 17, 63,112, 57,252,190, 32,101,162, 62,
-139, 6,160, 62, 57,160, 80, 61,109,243,245, 61, 41, 18,224,190,182,154,227,188,238,196,139,190,133, 49,131, 61,130, 33,167, 62,
-160,225, 5, 63,124, 59,177, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63,
- 20,166, 56, 63, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 35,160, 97, 63,129,220,163,191,194,248,141, 64,190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62,
-200,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66,184,109, 8, 3,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,183,149,157, 62,169,241,150, 62,210, 72, 5, 63,
-196, 98, 61,191, 94, 43,103,191,141,249, 13, 62,108, 40, 28,190,180,143, 89,189,159,169,180, 62, 50,210,102, 63, 78,174,206, 62,
- 68,159, 93, 61,160, 84,118, 61, 54,211,246, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0,
- 0, 0,128, 63,234, 53,126, 63, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 4,223, 18,192,155,169,140,191,151, 18, 57, 64,190, 81, 55,191,109,243, 71,191,100,237, 42, 63,
-234,163,214, 62,200,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66,
-192,110, 8, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,186, 63, 44, 63,134,104,136, 62,
- 44,117, 32, 63,178,227,147,190,254, 77, 90, 63, 0,117,175,190,119, 69,167, 62,238, 73,138, 61, 58,211,189, 62,210, 28, 37,191,
-245, 96, 21, 62, 35,104,227, 62, 83, 62,154, 62, 64,164,222, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66,
- 0, 0, 0, 0, 0, 0,128, 63,130, 27,151, 62, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,100,193,179,191,251,111, 78,192,166, 64,228, 63,190, 81, 55,191,109,243, 71,191,
-100,237, 42, 63,234,163,214, 62,200,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,200, 66,200,111, 8, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,129,101, 4,191,
-237, 90, 0, 63,104,125,239,190,131, 31, 3, 63,200,160,212,190,115,217, 27, 63, 55,189, 6,190,131,223, 22,190, 4,241,223,190,
- 4, 70, 0,190, 37,242, 35, 61,204,214,171, 61,175, 25, 46, 63, 82,177, 72, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66,
- 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63,184,249,202, 62, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 93, 90,124,191,113, 48,212,191, 56,208, 74, 64,190, 81, 55,191,
-109,243, 71,191,100,237, 42, 63,234,163,214, 62,200,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,200, 66,208,112, 8, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-179, 25,236,189,127,158, 27, 63,123,235,239, 62, 59,108, 33, 63,244,198,103,190,251,192,187, 62,179, 39,101,190,110,210,138, 62,
-145,168, 54,191,208, 20, 63,190,187,178, 81, 62,176, 57,108, 62, 93,177,153, 62,108, 88,135, 62, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63, 2,210,109, 63, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0,
- 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,251,231, 33,192,132, 2, 59,191, 78,162, 66, 64,
-190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62,200,206,183,190,199,137, 61,190,158, 38, 80,191, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66,216,113, 8, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,192, 46, 24,191, 41, 20, 43,191,186,184,183, 62, 42,173,136, 62, 75, 75, 50, 63, 40, 83,126, 62,188,195, 8, 63,
-234,211,238, 62, 69, 36,152, 61,235,106,145, 62,217, 15, 30, 62,227,209, 4, 63,178,148,117, 62,218, 39,178, 61, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63, 93,122, 57, 63, 0, 0, 0, 0,255,255,255,255,
- 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,185,138, 63,191,128, 41,192,
-139,193, 97, 64,190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62,200,206,183,190,199,137, 61,190,158, 38, 80,191,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 80,240,163, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,231,120,168, 62,179,154, 7,191, 41,180, 48, 63,239,232,187,190, 9, 35,104,191,222, 8,114, 62,
- 76,143,177,190,107, 29, 28,191,210,112,234, 62, 9,249, 92,190, 0,196,250, 61, 79,120, 62, 61,195, 12, 31, 62,202,252, 44, 63,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63, 74, 4,184, 62, 0, 0, 0, 0,
-255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,242, 63,243,190,
- 86,176,159,191,245,150,111, 64,190, 81, 55,191,109,243, 71,191,100,237, 42, 63,234,163,214, 62,200,206,183,190,199,137, 61,190,
-158, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 88,241,163, 2, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,166, 26, 58,191, 1, 70,159, 62,113,111, 2, 63,235,187,173,190,116, 51,237, 62,
-130, 53,247, 62,243,199, 26,190,235, 88,172,189,118,115,244, 62, 34,147, 5,191,217, 77,158, 62, 43,131, 72, 62,119,208, 68, 62,
- 86, 8,155, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63,253,152,110, 63,
- 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-198,178, 48,191,138, 39, 52, 62, 39,252,149, 64,190, 81, 55,191,107,243, 71,191,100,237, 42, 63,235,163,214, 62,198,206,183,190,
-203,137, 61,190,157, 38, 80,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 96,242,163, 2, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41,167,210,190,194,172,139, 62,250,220, 35, 63, 30,182, 22,191,
-122, 3,136, 61,109,164,176,190, 30,153,147,190,255,248, 10,188,234, 90,160,190, 89,241,205,190, 62, 71, 19, 63,111,215,107, 62,
- 63, 71,138, 61,243,231, 1, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 0, 0,200, 66, 0, 0, 0, 0, 0, 0,128, 63,
- 37,227, 77, 62, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
- 68, 65, 84, 65,216, 0, 0, 0,144,233,164, 2, 23, 1, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 7, 84,145,186,255,223,124, 59, 58,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63,
- 0, 0, 0, 0,135, 84,145,187,255,223,124, 60,187, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,136,127, 35,188,
- 15, 62, 14, 61,219,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0,231, 84,145,188, 31,224,124, 61,126,101,127, 63,
- 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,203, 20,227,188, 15,143,197, 61, 82, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62,
- 0, 0, 0, 0,168,127, 35,189, 15, 62, 14, 62,165,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 59,138, 94,189,
-151,155, 65, 62,185,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 15, 85,145,189, 31,224,124, 62,143, 17,245, 63,
- 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,232,211,127, 2, 23, 1, 0, 0, 9, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 7, 84,145,186,255,223,124, 59,
- 57,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0, 7, 85,145,187,255,223,124, 60,187, 71, 2, 63, 0, 0,200, 65,
- 0, 0, 64, 63, 0, 0, 0, 0,136,127, 35,188,255, 61, 14, 61,219,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0,
- 7, 85,145,188, 15,224,124, 61,126,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,203, 20,227,188, 15,143,197, 61,
- 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,152,127, 35,189, 15, 62, 14, 62,165,172,187, 63, 0, 0,150, 66,
- 0, 0,128, 62, 0, 0, 0, 0, 59,138, 94,189,147,155, 65, 62,185,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0,
- 15, 85,145,189, 27,224,124, 62,142, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,
-232,146, 16, 3, 23, 1, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0, 0, 0, 7, 85,145,186, 63,223,124, 59, 57,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0, 7, 85,145,187,
-191,223,124, 60,187, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,168,127, 35,188,239, 61, 14, 61,219,123, 65, 63,
- 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, 23, 85,145,188,251,223,124, 61,125,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63,
- 0, 0, 0, 0,235, 20,227,188, 3,143,197, 61, 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,184,127, 35,189,
- 7, 62, 14, 62,164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 59,138, 94,189,142,155, 65, 62,184,177,216, 63,
- 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 23, 85,145,189, 23,224,124, 62,142, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,240,147, 16, 3, 23, 1, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 7, 82,145,186,255,223,124, 59, 56,146,131, 62, 0, 0, 72, 65,
- 0, 0, 96, 63, 0, 0, 0, 0, 7, 84,145,187,255,223,124, 60,186, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,
- 8,127, 35,188,255, 61, 14, 61,218,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0,199, 84,145,188, 15,224,124, 61,
-123,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,171, 20,227,188, 15,143,197, 61, 80, 2,158, 63, 0, 0,122, 66,
- 0, 0,192, 62, 0, 0, 0, 0,136,127, 35,189, 15, 62, 14, 62,163,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0,
- 43,138, 94,189,151,155, 65, 62,182,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0,255, 84,145,189, 31,224,124, 62,
-139, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,248,148, 16, 3, 23, 1, 0, 0,
- 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 7, 85,145,186,
-127,223,124, 59, 57,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0, 7, 85,145,187,191,223,124, 60,187, 71, 2, 63,
- 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,168,127, 35,188,243, 61, 14, 61,219,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63,
- 0, 0, 0, 0, 15, 85,145,188,251,223,124, 61,125,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,235, 20,227,188,
- 5,143,197, 61, 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,180,127, 35,189, 8, 62, 14, 62,164,172,187, 63,
- 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 59,138, 94,189,142,155, 65, 62,184,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62,
- 0, 0, 0, 0, 11, 85,145,189, 23,224,124, 62,141, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
-216, 0, 0, 0, 0,150, 16, 3, 23, 1, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0, 7, 82,145,186,255,223,124, 59, 57,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0,
- 7, 84,145,187,223,223,124, 60,187, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,200,126, 35,188,247, 61, 14, 61,
-219,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0,135, 84,145,188, 7,224,124, 61,125,101,127, 63, 0, 0, 72, 66,
- 0, 0, 0, 63, 0, 0, 0, 0,107, 20,227,188, 11,143,197, 61, 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,
-104,127, 35,189, 11, 62, 14, 62,164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0,251,137, 94,189,145,155, 65, 62,
-185,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0,231, 84,145,189, 27,224,124, 62,142, 17,245, 63, 0, 0,200, 66,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0, 8,151, 16, 3, 23, 1, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 7, 84,145,186,255,223,124, 59, 58,146,131, 62,
- 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0, 7, 85,145,187,255,223,124, 60,188, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63,
- 0, 0, 0, 0,136,127, 35,188,255, 61, 14, 61,220,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0,231, 84,145,188,
- 15,224,124, 61,127,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,235, 20,227,188, 15,143,197, 61, 81, 2,158, 63,
- 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,184,127, 35,189, 11, 62, 14, 62,165,172,187, 63, 0, 0,150, 66, 0, 0,128, 62,
- 0, 0, 0, 0, 75,138, 94,189,147,155, 65, 62,185,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 23, 85,145,189,
- 27,224,124, 62,142, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0, 16,152, 16, 3,
- 23, 1, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 7, 84,145,186,127,223,124, 59, 57,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0, 7, 85,145,187,223,223,124, 60,
-186, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,136,127, 35,188,247, 61, 14, 61,219,123, 65, 63, 0, 0, 22, 66,
- 0, 0, 32, 63, 0, 0, 0, 0, 7, 85,145,188,251,223,124, 61,125,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,
-235, 20,227,188, 5,143,197, 61, 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,184,127, 35,189, 8, 62, 14, 62,
-164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 75,138, 94,189,142,155, 65, 62,184,177,216, 63, 0, 0,175, 66,
- 0, 0, 0, 62, 0, 0, 0, 0, 31, 85,145,189, 23,224,124, 62,142, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65,216, 0, 0, 0, 24,153, 16, 3, 23, 1, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 7, 86,145,186,255,223,124, 59, 59,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63,
- 0, 0, 0, 0,135, 85,145,187, 15,224,124, 60,188, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0, 8,128, 35,188,
- 7, 62, 14, 61,221,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, 71, 85,145,188, 23,224,124, 61,127,101,127, 63,
- 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0, 43, 21,227,188, 18,143,197, 61, 82, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62,
- 0, 0, 0, 0,200,127, 35,189, 15, 62, 14, 62,165,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 91,138, 94,189,
-152,155, 65, 62,185,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 31, 85,145,189, 34,224,124, 62,142, 17,245, 63,
- 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0, 32,154, 16, 3, 23, 1, 0, 0, 9, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,135, 84,145,186,255,223,124, 59,
- 57,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0,223, 84,145,187,255,223,124, 60,187, 71, 2, 63, 0, 0,200, 65,
- 0, 0, 64, 63, 0, 0, 0, 0,132,127, 35,188, 3, 62, 14, 61,220,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0,
-252, 84,145,188, 19,224,124, 61,127,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,207, 20,227,188, 15,143,197, 61,
- 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,169,127, 35,189, 13, 62, 14, 62,164,172,187, 63, 0, 0,150, 66,
- 0, 0,128, 62, 0, 0, 0, 0, 50,138, 94,189,147,155, 65, 62,185,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0,
- 7, 85,145,189, 31,224,124, 62,142, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,
- 40,155, 16, 3, 23, 1, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0, 0, 0, 7, 84,145,186,143,223,124, 59, 56,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0, 7, 85,145,187,
-223,223,124, 60,186, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,200,127, 35,188,250, 61, 14, 61,218,123, 65, 63,
- 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, 7, 85,145,188, 4,224,124, 61,124,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63,
- 0, 0, 0, 0,235, 20,227,188, 11,143,197, 61, 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,168,127, 35,189,
- 11, 62, 14, 62,163,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 43,138, 94,189,146,155, 65, 62,183,177,216, 63,
- 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0,255, 84,145,189, 26,224,124, 62,140, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0, 48,156, 16, 3, 23, 1, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 7, 87,145,186,255,223,124, 59, 58,146,131, 62, 0, 0, 72, 65,
- 0, 0, 96, 63, 0, 0, 0, 0,199, 85,145,187,255,223,124, 60,187, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,
- 8,128, 35,188,255, 61, 14, 61,219,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, 71, 85,145,188,255,223,124, 61,
-125,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0, 11, 21,227,188, 11,143,197, 61, 81, 2,158, 63, 0, 0,122, 66,
- 0, 0,192, 62, 0, 0, 0, 0,192,127, 35,189, 11, 62, 14, 62,164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0,
- 75,138, 94,189,145,155, 65, 62,184,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 23, 85,145,189, 25,224,124, 62,
-141, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0, 56,157, 16, 3, 23, 1, 0, 0,
- 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 7, 86,145,186,
-255,222,124, 59, 57,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0, 7, 85,145,187,191,223,124, 60,188, 71, 2, 63,
- 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,200,127, 35,188,239, 61, 14, 61,221,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63,
- 0, 0, 0, 0, 39, 85,145,188,239,223,124, 61,127,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,235, 20,227,188,
-255,142,197, 61, 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,184,127, 35,189, 3, 62, 14, 62,164,172,187, 63,
- 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 75,138, 94,189,135,155, 65, 62,184,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62,
- 0, 0, 0, 0, 23, 85,145,189, 17,224,124, 62,142, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
-216, 0, 0, 0, 64,158, 16, 3, 23, 1, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0, 71, 84,145,186,239,223,124, 59, 58,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0,
-199, 84,145,187,255,223,124, 60,187, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,120,127, 35,188, 2, 62, 14, 61,
-220,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0,247, 84,145,188, 17,224,124, 61,126,101,127, 63, 0, 0, 72, 66,
- 0, 0, 0, 63, 0, 0, 0, 0,203, 20,227,188, 15,143,197, 61, 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,
-165,127, 35,189, 13, 62, 14, 62,164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 48,138, 94,189,147,155, 65, 62,
-185,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 7, 85,145,189, 28,224,124, 62,142, 17,245, 63, 0, 0,200, 66,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0, 80, 12, 33, 3, 23, 1, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 7, 86,145,186,255,223,124, 59, 58,146,131, 62,
- 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0,135, 85,145,187,255,223,124, 60,188, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63,
- 0, 0, 0, 0, 8,128, 35,188,255, 61, 14, 61,221,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, 71, 85,145,188,
- 15,224,124, 61,127,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0, 43, 21,227,188, 7,143,197, 61, 82, 2,158, 63,
- 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,200,127, 35,189, 7, 62, 14, 62,165,172,187, 63, 0, 0,150, 66, 0, 0,128, 62,
- 0, 0, 0, 0, 91,138, 94,189,143,155, 65, 62,186,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 31, 85,145,189,
- 23,224,124, 62,143, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0, 88, 13, 33, 3,
- 23, 1, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
-135, 84,145,186,255,223,124, 59, 58,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0,231, 84,145,187,255,223,124, 60,
-186, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,136,127, 35,188, 3, 62, 14, 61,219,123, 65, 63, 0, 0, 22, 66,
- 0, 0, 32, 63, 0, 0, 0, 0,255, 84,145,188, 17,224,124, 61,125,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,
-211, 20,227,188, 15,143,197, 61, 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,168,127, 35,189, 13, 62, 14, 62,
-164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 53,138, 94,189,148,155, 65, 62,185,177,216, 63, 0, 0,175, 66,
- 0, 0, 0, 62, 0, 0, 0, 0, 10, 85,145,189, 29,224,124, 62,142, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65,216, 0, 0, 0, 96, 14, 33, 3, 23, 1, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 7, 86,145,186,255,223,124, 59, 57,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63,
- 0, 0, 0, 0,135, 85,145,187,255,223,124, 60,187, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0, 8,128, 35,188,
-255, 61, 14, 61,220,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, 71, 85,145,188,255,223,124, 61,126,101,127, 63,
- 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0, 43, 21,227,188, 15,143,197, 61, 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62,
- 0, 0, 0, 0,200,127, 35,189, 7, 62, 14, 62,164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 83,138, 94,189,
-143,155, 65, 62,185,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 27, 85,145,189, 23,224,124, 62,142, 17,245, 63,
- 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,104, 15, 33, 3, 23, 1, 0, 0, 9, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 7, 85,145,186,255,223,124, 59,
- 58,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0, 7, 85,145,187,255,223,124, 60,187, 71, 2, 63, 0, 0,200, 65,
- 0, 0, 64, 63, 0, 0, 0, 0,168,127, 35,188, 15, 62, 14, 61,220,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0,
- 7, 85,145,188, 15,224,124, 61,127,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,219, 20,227,188, 23,143,197, 61,
- 82, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,168,127, 35,189, 11, 62, 14, 62,165,172,187, 63, 0, 0,150, 66,
- 0, 0,128, 62, 0, 0, 0, 0, 67,138, 94,189,147,155, 65, 62,185,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0,
- 19, 85,145,189, 27,224,124, 62,143, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,
-112, 16, 33, 3, 23, 1, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0, 0, 0, 7, 84,145,186,127,223,124, 59, 57,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0, 7, 85,145,187,
-191,223,124, 60,188, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,200,127, 35,188,239, 61, 14, 61,220,123, 65, 63,
- 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, 7, 85,145,188,247,223,124, 61,126,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63,
- 0, 0, 0, 0,235, 20,227,188,255,142,197, 61, 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,184,127, 35,189,
- 5, 62, 14, 62,164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 59,138, 94,189,138,155, 65, 62,184,177,216, 63,
- 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 15, 85,145,189, 19,224,124, 62,141, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,120, 17, 33, 3, 23, 1, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 7, 86,145,186,255,223,124, 59, 59,146,131, 62, 0, 0, 72, 65,
- 0, 0, 96, 63, 0, 0, 0, 0,135, 85,145,187,255,223,124, 60,188, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,
- 8,128, 35,188,255, 61, 14, 61,220,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, 71, 85,145,188, 15,224,124, 61,
-126,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0, 11, 21,227,188, 7,143,197, 61, 81, 2,158, 63, 0, 0,122, 66,
- 0, 0,192, 62, 0, 0, 0, 0,200,127, 35,189, 11, 62, 14, 62,164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0,
- 83,138, 94,189,143,155, 65, 62,184,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 27, 85,145,189, 23,224,124, 62,
-141, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,128, 18, 33, 3, 23, 1, 0, 0,
- 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 7, 85,145,186,
-255,223,124, 59, 58,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0, 71, 85,145,187,223,223,124, 60,189, 71, 2, 63,
- 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,200,127, 35,188,247, 61, 14, 61,221,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63,
- 0, 0, 0, 0, 23, 85,145,188, 7,224,124, 61,127,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,235, 20,227,188,
- 11,143,197, 61, 82, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,176,127, 35,189, 11, 62, 14, 62,165,172,187, 63,
- 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 59,138, 94,189,145,155, 65, 62,185,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62,
- 0, 0, 0, 0, 15, 85,145,189, 27,224,124, 62,142, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
-216, 0, 0, 0,136, 19, 33, 3, 23, 1, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0, 7, 85,145,186,127,223,124, 59, 57,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0,
- 7, 85,145,187,223,223,124, 60,187, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,168,127, 35,188,247, 61, 14, 61,
-220,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, 7, 85,145,188, 7,224,124, 61,126,101,127, 63, 0, 0, 72, 66,
- 0, 0, 0, 63, 0, 0, 0, 0,203, 20,227,188, 11,143,197, 61, 82, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,
-168,127, 35,189, 13, 62, 14, 62,165,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 43,138, 94,189,145,155, 65, 62,
-185,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 11, 85,145,189, 25,224,124, 62,142, 17,245, 63, 0, 0,200, 66,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,144, 20, 33, 3, 23, 1, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,135, 84,145,186, 63,224,124, 59, 57,146,131, 62,
- 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0,231, 84,145,187, 55,224,124, 60,187, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63,
- 0, 0, 0, 0,152,127, 35,188, 17, 62, 14, 61,219,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0,255, 84,145,188,
- 30,224,124, 61,125,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,203, 20,227,188, 24,143,197, 61, 80, 2,158, 63,
- 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,164,127, 35,189, 18, 62, 14, 62,163,172,187, 63, 0, 0,150, 66, 0, 0,128, 62,
- 0, 0, 0, 0, 55,138, 94,189,155,155, 65, 62,183,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 9, 85,145,189,
- 36,224,124, 62,140, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,152, 21, 33, 3,
- 23, 1, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 7, 85,145,186,255,222,124, 59, 57,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0, 7, 85,145,187,191,223,124, 60,
-187, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,168,127, 35,188,239, 61, 14, 61,220,123, 65, 63, 0, 0, 22, 66,
- 0, 0, 32, 63, 0, 0, 0, 0, 23, 85,145,188,255,223,124, 61,126,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,
-235, 20,227,188,255,142,197, 61, 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,184,127, 35,189, 7, 62, 14, 62,
-164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 67,138, 94,189,139,155, 65, 62,184,177,216, 63, 0, 0,175, 66,
- 0, 0, 0, 62, 0, 0, 0, 0, 15, 85,145,189, 19,224,124, 62,141, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65,216, 0, 0, 0,160, 22, 33, 3, 23, 1, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 7, 84,145,186,255,223,124, 59, 57,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63,
- 0, 0, 0, 0, 7, 85,145,187,255,223,124, 60,186, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,200,127, 35,188,
-255, 61, 14, 61,218,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, 39, 85,145,188, 15,224,124, 61,124,101,127, 63,
- 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0, 11, 21,227,188, 15,143,197, 61, 80, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62,
- 0, 0, 0, 0,200,127, 35,189, 15, 62, 14, 62,163,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 91,138, 94,189,
-151,155, 65, 62,182,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 31, 85,145,189, 31,224,124, 62,139, 17,245, 63,
- 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,168, 23, 33, 3, 23, 1, 0, 0, 9, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 7, 86,145,186,255,223,124, 59,
- 58,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0, 71, 85,145,187,255,223,124, 60,188, 71, 2, 63, 0, 0,200, 65,
- 0, 0, 64, 63, 0, 0, 0, 0,200,127, 35,188, 7, 62, 14, 61,220,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0,
- 23, 85,145,188, 23,224,124, 61,126,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,235, 20,227,188, 19,143,197, 61,
- 82, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,176,127, 35,189, 15, 62, 14, 62,165,172,187, 63, 0, 0,150, 66,
- 0, 0,128, 62, 0, 0, 0, 0, 59,138, 94,189,147,155, 65, 62,185,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0,
- 15, 85,145,189, 27,224,124, 62,142, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,
-176, 24, 33, 3, 23, 1, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0, 0, 0, 7, 84,145,186,191,223,124, 59, 57,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0,135, 84,145,187,
-247,223,124, 60,187, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0, 72,127, 35,188, 0, 62, 14, 61,220,123, 65, 63,
- 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0,231, 84,145,188, 14,224,124, 61,126,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63,
- 0, 0, 0, 0,171, 20,227,188, 13,143,197, 61, 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,152,127, 35,189,
- 13, 62, 14, 62,164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 27,138, 94,189,147,155, 65, 62,184,177,216, 63,
- 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0,251, 84,145,189, 27,224,124, 62,141, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,184, 25, 33, 3, 23, 1, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 7, 85,145,186,127,223,124, 59, 57,146,131, 62, 0, 0, 72, 65,
- 0, 0, 96, 63, 0, 0, 0, 0, 39, 85,145,187,223,223,124, 60,186, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,
-184,127, 35,188,247, 61, 14, 61,219,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, 31, 85,145,188,255,223,124, 61,
-125,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,243, 20,227,188, 3,143,197, 61, 81, 2,158, 63, 0, 0,122, 66,
- 0, 0,192, 62, 0, 0, 0, 0,188,127, 35,189, 7, 62, 14, 62,164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0,
- 67,138, 94,189,141,155, 65, 62,184,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 17, 85,145,189, 22,224,124, 62,
-141, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,192, 26, 33, 3, 23, 1, 0, 0,
- 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 7, 85,145,186,
-255,223,124, 59, 57,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0, 7, 85,145,187,255,223,124, 60,187, 71, 2, 63,
- 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,168,127, 35,188,255, 61, 14, 61,219,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63,
- 0, 0, 0, 0, 7, 85,145,188, 15,224,124, 61,126,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,219, 20,227,188,
- 7,143,197, 61, 82, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,176,127, 35,189, 11, 62, 14, 62,165,172,187, 63,
- 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 67,138, 94,189,147,155, 65, 62,185,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62,
- 0, 0, 0, 0, 23, 85,145,189, 27,224,124, 62,142, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
-216, 0, 0, 0,200, 27, 33, 3, 23, 1, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0, 71, 84,145,186,255,223,124, 59, 58,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0,
-199, 84,145,187,255,223,124, 60,188, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,136,127, 35,188, 7, 62, 14, 61,
-220,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0,255, 84,145,188, 23,224,124, 61,126,101,127, 63, 0, 0, 72, 66,
- 0, 0, 0, 63, 0, 0, 0, 0,211, 20,227,188, 19,143,197, 61, 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,
-170,127, 35,189, 15, 62, 14, 62,164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 56,138, 94,189,147,155, 65, 62,
-184,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 13, 85,145,189, 25,224,124, 62,141, 17,245, 63, 0, 0,200, 66,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,208, 28, 33, 3, 23, 1, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 7, 84,145,186,255,223,124, 59, 57,146,131, 62,
- 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0, 7, 84,145,187, 63,224,124, 60,187, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63,
- 0, 0, 0, 0, 72,127, 35,188, 15, 62, 14, 61,219,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0,199, 84,145,188,
- 15,224,124, 61,125,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,171, 20,227,188, 7,143,197, 61, 80, 2,158, 63,
- 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,152,127, 35,189, 11, 62, 14, 62,163,172,187, 63, 0, 0,150, 66, 0, 0,128, 62,
- 0, 0, 0, 0, 27,138, 94,189,147,155, 65, 62,184,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0,255, 84,145,189,
- 19,224,124, 62,140, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,216, 29, 33, 3,
- 23, 1, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 7, 86,145,186,255,223,124, 59, 59,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0,135, 85,145,187,255,223,124, 60,
-187, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0, 8,128, 35,188,255, 61, 14, 61,220,123, 65, 63, 0, 0, 22, 66,
- 0, 0, 32, 63, 0, 0, 0, 0,103, 85,145,188,255,223,124, 61,127,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,
- 75, 21,227,188, 7,143,197, 61, 82, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,216,127, 35,189, 7, 62, 14, 62,
-165,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 91,138, 94,189,143,155, 65, 62,186,177,216, 63, 0, 0,175, 66,
- 0, 0, 0, 62, 0, 0, 0, 0, 31, 85,145,189, 23,224,124, 62,143, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65,216, 0, 0, 0,224, 30, 33, 3, 23, 1, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 7, 86,145,186,255,223,124, 59, 58,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63,
- 0, 0, 0, 0,135, 85,145,187, 31,224,124, 60,187, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0, 8,128, 35,188,
- 15, 62, 14, 61,220,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, 71, 85,145,188, 23,224,124, 61,127,101,127, 63,
- 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0, 43, 21,227,188, 27,143,197, 61, 82, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62,
- 0, 0, 0, 0,200,127, 35,189, 19, 62, 14, 62,165,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 91,138, 94,189,
-155,155, 65, 62,184,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 31, 85,145,189, 35,224,124, 62,141, 17,245, 63,
- 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,232, 31, 33, 3, 23, 1, 0, 0, 9, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 7, 84,145,186,255,222,124, 59,
- 57,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0,135, 84,145,187,191,223,124, 60,187, 71, 2, 63, 0, 0,200, 65,
- 0, 0, 64, 63, 0, 0, 0, 0,104,127, 35,188,255, 61, 14, 61,219,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0,
-231, 84,145,188, 15,224,124, 61,126,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,187, 20,227,188, 7,143,197, 61,
- 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,152,127, 35,189, 11, 62, 14, 62,164,172,187, 63, 0, 0,150, 66,
- 0, 0,128, 62, 0, 0, 0, 0, 35,138, 94,189,143,155, 65, 62,184,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0,
-255, 84,145,189, 23,224,124, 62,141, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,
-240, 32, 33, 3, 23, 1, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0, 0, 0, 7, 84,145,186,255,223,124, 59, 59,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0, 7, 85,145,187,
-255,223,124, 60,188, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,200,127, 35,188,255, 61, 14, 61,221,123, 65, 63,
- 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, 71, 85,145,188, 15,224,124, 61,128,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63,
- 0, 0, 0, 0, 11, 21,227,188, 15,143,197, 61, 82, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,200,127, 35,189,
- 13, 62, 14, 62,165,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 75,138, 94,189,147,155, 65, 62,185,177,216, 63,
- 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 23, 85,145,189, 29,224,124, 62,142, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,248, 33, 33, 3, 23, 1, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 7, 84,145,186,255,223,124, 59, 57,146,131, 62, 0, 0, 72, 65,
- 0, 0, 96, 63, 0, 0, 0, 0, 7, 85,145,187, 31,224,124, 60,187, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,
-136,127, 35,188, 7, 62, 14, 61,219,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0,231, 84,145,188, 23,224,124, 61,
-126,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,203, 20,227,188, 19,143,197, 61, 81, 2,158, 63, 0, 0,122, 66,
- 0, 0,192, 62, 0, 0, 0, 0,168,127, 35,189, 13, 62, 14, 62,164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0,
- 75,138, 94,189,149,155, 65, 62,185,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 23, 85,145,189, 33,224,124, 62,
-142, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0, 0, 35, 33, 3, 23, 1, 0, 0,
- 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,135, 84,145,186,
-255,223,124, 59, 58,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0,215, 84,145,187,255,223,124, 60,187, 71, 2, 63,
- 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,144,127, 35,188, 7, 62, 14, 61,220,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63,
- 0, 0, 0, 0,251, 84,145,188, 15,224,124, 61,127,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,207, 20,227,188,
- 15,143,197, 61, 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,166,127, 35,189, 13, 62, 14, 62,164,172,187, 63,
- 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 45,138, 94,189,147,155, 65, 62,185,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62,
- 0, 0, 0, 0, 8, 85,145,189, 27,224,124, 62,142, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
-216, 0, 0, 0, 8, 36, 33, 3, 23, 1, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0, 7, 86,145,186,255,222,124, 59, 57,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0,
-135, 85,145,187,191,223,124, 60,187, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,200,127, 35,188,239, 61, 14, 61,
-220,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, 39, 85,145,188,255,223,124, 61,126,101,127, 63, 0, 0, 72, 66,
- 0, 0, 0, 63, 0, 0, 0, 0, 11, 21,227,188,255,142,197, 61, 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,
-200,127, 35,189, 7, 62, 14, 62,164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 91,138, 94,189,139,155, 65, 62,
-185,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 31, 85,145,189, 15,224,124, 62,142, 17,245, 63, 0, 0,200, 66,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0, 16, 37, 33, 3, 23, 1, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 7, 85,145,186,255,223,124, 59, 58,146,131, 62,
- 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0, 7, 85,145,187,255,223,124, 60,188, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63,
- 0, 0, 0, 0,168,127, 35,188, 7, 62, 14, 61,220,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, 23, 85,145,188,
- 15,224,124, 61,127,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,219, 20,227,188, 15,143,197, 61, 81, 2,158, 63,
- 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,176,127, 35,189, 13, 62, 14, 62,164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62,
- 0, 0, 0, 0, 51,138, 94,189,145,155, 65, 62,185,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 15, 85,145,189,
- 29,224,124, 62,142, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0, 24, 38, 33, 3,
- 23, 1, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 7, 86,145,186,255,223,124, 59, 58,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0, 7, 85,145,187,255,223,124, 60,
-188, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,200,127, 35,188,255, 61, 14, 61,221,123, 65, 63, 0, 0, 22, 66,
- 0, 0, 32, 63, 0, 0, 0, 0, 39, 85,145,188, 15,224,124, 61,127,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,
- 11, 21,227,188, 7,143,197, 61, 82, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,184,127, 35,189, 11, 62, 14, 62,
-165,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 75,138, 94,189,143,155, 65, 62,185,177,216, 63, 0, 0,175, 66,
- 0, 0, 0, 62, 0, 0, 0, 0, 23, 85,145,189, 23,224,124, 62,142, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65,216, 0, 0, 0, 32, 39, 33, 3, 23, 1, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 7, 82,145,186,255,223,124, 59, 59,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63,
- 0, 0, 0, 0,135, 83,145,187,191,223,124, 60,188, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,200,126, 35,188,
-239, 61, 14, 61,221,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0,135, 84,145,188,255,223,124, 61,126,101,127, 63,
- 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0, 75, 20,227,188,255,142,197, 61, 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62,
- 0, 0, 0, 0, 88,127, 35,189,255, 61, 14, 62,165,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0,219,137, 94,189,
-135,155, 65, 62,185,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0,223, 84,145,189, 15,224,124, 62,142, 17,245, 63,
- 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0, 40, 40, 33, 3, 23, 1, 0, 0, 9, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 7, 85,145,186,255,222,124, 59,
- 57,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0, 7, 85,145,187,191,223,124, 60,187, 71, 2, 63, 0, 0,200, 65,
- 0, 0, 64, 63, 0, 0, 0, 0,168,127, 35,188,239, 61, 14, 61,220,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0,
- 23, 85,145,188,255,223,124, 61,126,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,235, 20,227,188,255,142,197, 61,
- 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,184,127, 35,189, 3, 62, 14, 62,164,172,187, 63, 0, 0,150, 66,
- 0, 0,128, 62, 0, 0, 0, 0, 67,138, 94,189,137,155, 65, 62,184,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0,
- 11, 85,145,189, 15,224,124, 62,142, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,
- 48, 41, 33, 3, 23, 1, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0, 0, 0, 7, 86,145,186,127,223,124, 59, 56,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0, 7, 85,145,187,
-223,223,124, 60,186, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,200,127, 35,188,251, 61, 14, 61,218,123, 65, 63,
- 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, 7, 85,145,188, 3,224,124, 61,124,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63,
- 0, 0, 0, 0,235, 20,227,188, 8,143,197, 61, 80, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,168,127, 35,189,
- 10, 62, 14, 62,163,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 27,138, 94,189,143,155, 65, 62,183,177,216, 63,
- 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0,247, 84,145,189, 24,224,124, 62,140, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0, 56, 42, 33, 3, 23, 1, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 7, 86,145,186,255,224,124, 59, 57,146,131, 62, 0, 0, 72, 65,
- 0, 0, 96, 63, 0, 0, 0, 0,135, 85,145,187, 63,224,124, 60,187, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,
- 8,128, 35,188, 15, 62, 14, 61,221,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, 71, 85,145,188, 31,224,124, 61,
-127,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0, 11, 21,227,188, 27,143,197, 61, 81, 2,158, 63, 0, 0,122, 66,
- 0, 0,192, 62, 0, 0, 0, 0,216,127, 35,189, 23, 62, 14, 62,164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0,
- 91,138, 94,189,157,155, 65, 62,184,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 31, 85,145,189, 37,224,124, 62,
-141, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0, 64, 43, 33, 3, 23, 1, 0, 0,
- 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 7, 87,145,186,
- 15,224,124, 59, 57,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0,135, 85,145,187, 19,224,124, 60,187, 71, 2, 63,
- 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,232,127, 35,188, 12, 62, 14, 61,219,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63,
- 0, 0, 0, 0, 39, 85,145,188, 28,224,124, 61,125,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0, 11, 21,227,188,
- 25,143,197, 61, 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,200,127, 35,189, 19, 62, 14, 62,164,172,187, 63,
- 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 91,138, 94,189,155,155, 65, 62,184,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62,
- 0, 0, 0, 0, 31, 85,145,189, 35,224,124, 62,141, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
-216, 0, 0, 0, 72, 44, 33, 3, 23, 1, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0, 7, 85,145,186, 63,224,124, 59, 58,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0,
- 7, 85,145,187,255,223,124, 60,188, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,168,127, 35,188, 3, 62, 14, 61,
-220,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, 7, 85,145,188, 19,224,124, 61,127,101,127, 63, 0, 0, 72, 66,
- 0, 0, 0, 63, 0, 0, 0, 0,219, 20,227,188, 15,143,197, 61, 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,
-168,127, 35,189, 13, 62, 14, 62,164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 51,138, 94,189,148,155, 65, 62,
-185,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 11, 85,145,189, 29,224,124, 62,142, 17,245, 63, 0, 0,200, 66,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0, 80, 45, 33, 3, 23, 1, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 7, 86,145,186, 33,224,124, 59, 57,146,131, 62,
- 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0,135, 85,145,187, 29,224,124, 60,188, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63,
- 0, 0, 0, 0, 8,128, 35,188, 11, 62, 14, 61,221,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, 71, 85,145,188,
- 24,224,124, 61,127,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0, 43, 21,227,188, 24,143,197, 61, 81, 2,158, 63,
- 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,200,127, 35,189, 18, 62, 14, 62,164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62,
- 0, 0, 0, 0, 91,138, 94,189,157,155, 65, 62,184,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 31, 85,145,189,
- 37,224,124, 62,141, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0, 88, 46, 33, 3,
- 23, 1, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 7, 86,145,186,255,223,124, 59, 57,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0, 71, 85,145,187,255,223,124, 60,
-187, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,200,127, 35,188,255, 61, 14, 61,219,123, 65, 63, 0, 0, 22, 66,
- 0, 0, 32, 63, 0, 0, 0, 0, 23, 85,145,188, 15,224,124, 61,126,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,
-235, 20,227,188, 15,143,197, 61, 82, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,184,127, 35,189, 11, 62, 14, 62,
-165,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 75,138, 94,189,143,155, 65, 62,185,177,216, 63, 0, 0,175, 66,
- 0, 0, 0, 62, 0, 0, 0, 0, 27, 85,145,189, 23,224,124, 62,142, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65,216, 0, 0, 0, 96, 47, 33, 3, 23, 1, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 7, 82,145,186,255,223,124, 59, 57,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63,
- 0, 0, 0, 0, 7, 84,145,187,255,223,124, 60,187, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0, 8,127, 35,188,
- 7, 62, 14, 61,219,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0,167, 84,145,188, 15,224,124, 61,125,101,127, 63,
- 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,139, 20,227,188, 15,143,197, 61, 80, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62,
- 0, 0, 0, 0,136,127, 35,189, 11, 62, 14, 62,163,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 11,138, 94,189,
-143,155, 65, 62,183,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0,247, 84,145,189, 23,224,124, 62,140, 17,245, 63,
- 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,104, 48, 33, 3, 23, 1, 0, 0, 9, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,135, 84,145,186,255,223,124, 59,
- 58,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0,215, 84,145,187,191,223,124, 60,187, 71, 2, 63, 0, 0,200, 65,
- 0, 0, 64, 63, 0, 0, 0, 0,152,127, 35,188,255, 61, 14, 61,219,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0,
-255, 84,145,188, 15,224,124, 61,126,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,223, 20,227,188, 15,143,197, 61,
- 82, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,174,127, 35,189, 11, 62, 14, 62,165,172,187, 63, 0, 0,150, 66,
- 0, 0,128, 62, 0, 0, 0, 0, 57,138, 94,189,147,155, 65, 62,185,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0,
- 12, 85,145,189, 27,224,124, 62,142, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,
-112, 49, 33, 3, 23, 1, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0, 0, 0, 7, 86,145,186,255,223,124, 59, 58,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0, 7, 85,145,187,
-255,223,124, 60,188, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,200,127, 35,188,255, 61, 14, 61,220,123, 65, 63,
- 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, 7, 85,145,188, 15,224,124, 61,127,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63,
- 0, 0, 0, 0,235, 20,227,188, 15,143,197, 61, 82, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,184,127, 35,189,
- 15, 62, 14, 62,165,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 75,138, 94,189,147,155, 65, 62,186,177,216, 63,
- 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 23, 85,145,189, 31,224,124, 62,143, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,120, 50, 33, 3, 23, 1, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 7, 86,145,186,191,223,124, 59, 58,146,131, 62, 0, 0, 72, 65,
- 0, 0, 96, 63, 0, 0, 0, 0,135, 85,145,187, 15,224,124, 60,188, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,
- 8,128, 35,188, 7, 62, 14, 61,221,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, 71, 85,145,188, 23,224,124, 61,
-127,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0, 11, 21,227,188, 17,143,197, 61, 83, 2,158, 63, 0, 0,122, 66,
- 0, 0,192, 62, 0, 0, 0, 0,200,127, 35,189, 14, 62, 14, 62,165,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0,
- 91,138, 94,189,146,155, 65, 62,186,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 23, 85,145,189, 26,224,124, 62,
-143, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,128, 51, 33, 3, 23, 1, 0, 0,
- 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 7, 86,145,186,
-255,223,124, 59, 58,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0,135, 85,145,187,255,223,124, 60,187, 71, 2, 63,
- 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,200,127, 35,188,239, 61, 14, 61,219,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63,
- 0, 0, 0, 0, 39, 85,145,188,255,223,124, 61,125,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0, 11, 21,227,188,
- 7,143,197, 61, 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,184,127, 35,189, 7, 62, 14, 62,164,172,187, 63,
- 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 75,138, 94,189,139,155, 65, 62,184,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62,
- 0, 0, 0, 0, 31, 85,145,189, 19,224,124, 62,141, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
-216, 0, 0, 0,136, 52, 33, 3, 23, 1, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0, 7, 85,145,186,127,223,124, 59, 57,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0,
- 71, 85,145,187,191,223,124, 60,187, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,168,127, 35,188,239, 61, 14, 61,
-220,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, 23, 85,145,188,255,223,124, 61,126,101,127, 63, 0, 0, 72, 66,
- 0, 0, 0, 63, 0, 0, 0, 0,251, 20,227,188, 3,143,197, 61, 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,
-192,127, 35,189, 6, 62, 14, 62,164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 67,138, 94,189,140,155, 65, 62,
-184,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 19, 85,145,189, 21,224,124, 62,141, 17,245, 63, 0, 0,200, 66,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,144, 53, 33, 3, 23, 1, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 7, 84,145,186,127,223,124, 59, 56,146,131, 62,
- 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0, 7, 85,145,187,223,223,124, 60,187, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63,
- 0, 0, 0, 0,136,127, 35,188,247, 61, 14, 61,219,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0,231, 84,145,188,
-255,223,124, 61,126,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,235, 20,227,188, 7,143,197, 61, 81, 2,158, 63,
- 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,184,127, 35,189, 7, 62, 14, 62,164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62,
- 0, 0, 0, 0, 91,138, 94,189,141,155, 65, 62,184,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 31, 85,145,189,
- 23,224,124, 62,141, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,152, 54, 33, 3,
- 23, 1, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 7, 84,145,186,255,223,124, 59, 58,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0, 7, 85,145,187,255,223,124, 60,
-188, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,200,127, 35,188, 15, 62, 14, 61,220,123, 65, 63, 0, 0, 22, 66,
- 0, 0, 32, 63, 0, 0, 0, 0, 39, 85,145,188, 15,224,124, 61,126,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,
-235, 20,227,188, 15,143,197, 61, 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,184,127, 35,189, 11, 62, 14, 62,
-164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 75,138, 94,189,143,155, 65, 62,184,177,216, 63, 0, 0,175, 66,
- 0, 0, 0, 62, 0, 0, 0, 0, 23, 85,145,189, 23,224,124, 62,141, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65,216, 0, 0, 0,160, 55, 33, 3, 23, 1, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 7, 84,145,186,255,224,124, 59, 58,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63,
- 0, 0, 0, 0,135, 84,145,187, 63,224,124, 60,187, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0, 72,127, 35,188,
- 47, 62, 14, 61,219,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0,231, 84,145,188, 63,224,124, 61,125,101,127, 63,
- 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,203, 20,227,188, 47,143,197, 61, 80, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62,
- 0, 0, 0, 0,168,127, 35,189, 27, 62, 14, 62,163,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 43,138, 94,189,
-167,155, 65, 62,183,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0,255, 84,145,189, 51,224,124, 62,139, 17,245, 63,
- 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,168, 56, 33, 3, 23, 1, 0, 0, 9, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,135, 84,145,186, 31,224,124, 59,
- 58,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0,199, 84,145,187, 31,224,124, 60,188, 71, 2, 63, 0, 0,200, 65,
- 0, 0, 64, 63, 0, 0, 0, 0,152,127, 35,188, 16, 62, 14, 61,220,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0,
- 7, 85,145,188, 31,224,124, 61,126,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,215, 20,227,188, 22,143,197, 61,
- 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,172,127, 35,189, 17, 62, 14, 62,164,172,187, 63, 0, 0,150, 66,
- 0, 0,128, 62, 0, 0, 0, 0, 53,138, 94,189,151,155, 65, 62,184,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0,
- 9, 85,145,189, 32,224,124, 62,141, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,
-176, 57, 33, 3, 23, 1, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0, 0, 0, 7, 85,145,186,255,223,124, 59, 58,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0,199, 84,145,187,
-255,223,124, 60,187, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,136,127, 35,188,255, 61, 14, 61,220,123, 65, 63,
- 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0,247, 84,145,188,255,223,124, 61,126,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63,
- 0, 0, 0, 0,219, 20,227,188, 15,143,197, 61, 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,168,127, 35,189,
- 7, 62, 14, 62,164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 59,138, 94,189,143,155, 65, 62,185,177,216, 63,
- 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 15, 85,145,189, 23,224,124, 62,142, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,184, 58, 33, 3, 23, 1, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 7, 84,145,186,255,222,124, 59, 57,146,131, 62, 0, 0, 72, 65,
- 0, 0, 96, 63, 0, 0, 0, 0,135, 84,145,187,191,223,124, 60,186, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,
-104,127, 35,188,239, 61, 14, 61,219,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0,231, 84,145,188,247,223,124, 61,
-125,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,171, 20,227,188, 3,143,197, 61, 81, 2,158, 63, 0, 0,122, 66,
- 0, 0,192, 62, 0, 0, 0, 0,152,127, 35,189, 7, 62, 14, 62,164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0,
- 35,138, 94,189,145,155, 65, 62,183,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0,255, 84,145,189, 26,224,124, 62,
-140, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,192, 59, 33, 3, 23, 1, 0, 0,
- 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 7, 84,145,186,
-255,223,124, 59, 58,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0, 7, 85,145,187,255,223,124, 60,187, 71, 2, 63,
- 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,200,127, 35,188,255, 61, 14, 61,220,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63,
- 0, 0, 0, 0, 7, 85,145,188, 15,224,124, 61,126,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,235, 20,227,188,
- 7,143,197, 61, 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,184,127, 35,189, 7, 62, 14, 62,164,172,187, 63,
- 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 75,138, 94,189,143,155, 65, 62,185,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62,
- 0, 0, 0, 0, 23, 85,145,189, 23,224,124, 62,142, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
-216, 0, 0, 0,200, 60, 33, 3, 23, 1, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0,191, 84,145,186,255,222,124, 59, 57,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0,
-229, 84,145,187,191,223,124, 60,187, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,154,127, 35,188,255, 61, 14, 61,
-220,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, 7, 85,145,188,255,223,124, 61,126,101,127, 63, 0, 0, 72, 66,
- 0, 0, 0, 63, 0, 0, 0, 0,232, 20,227,188, 7,143,197, 61, 82, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,
-182,127, 35,189, 7, 62, 14, 62,165,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 65,138, 94,189,139,155, 65, 62,
-185,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 16, 85,145,189, 19,224,124, 62,142, 17,245, 63, 0, 0,200, 66,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,208, 61, 33, 3, 23, 1, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 7, 84,145,186,255,223,124, 59, 58,146,131, 62,
- 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0,199, 84,145,187, 31,224,124, 60,188, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63,
- 0, 0, 0, 0,168,127, 35,188, 7, 62, 14, 61,220,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0,247, 84,145,188,
- 15,224,124, 61,127,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,219, 20,227,188, 15,143,197, 61, 81, 2,158, 63,
- 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,168,127, 35,189, 13, 62, 14, 62,164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62,
- 0, 0, 0, 0, 51,138, 94,189,147,155, 65, 62,185,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 7, 85,145,189,
- 31,224,124, 62,142, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,216, 62, 33, 3,
- 23, 1, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 7, 84,145,186,255,224,124, 59, 58,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0,135, 84,145,187, 63,224,124, 60,
-187, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0, 72,127, 35,188, 47, 62, 14, 61,219,123, 65, 63, 0, 0, 22, 66,
- 0, 0, 32, 63, 0, 0, 0, 0,231, 84,145,188, 47,224,124, 61,125,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,
-171, 20,227,188, 47,143,197, 61, 80, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,152,127, 35,189, 27, 62, 14, 62,
-163,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 27,138, 94,189,167,155, 65, 62,183,177,216, 63, 0, 0,175, 66,
- 0, 0, 0, 62, 0, 0, 0, 0,247, 84,145,189, 49,224,124, 62,139, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65,216, 0, 0, 0, 40,160,160, 2, 23, 1, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 7, 84,145,186,255,223,124, 59, 56,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63,
- 0, 0, 0, 0, 7, 84,145,187,191,223,124, 60,186, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0, 8,127, 35,188,
-239, 61, 14, 61,219,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0,167, 84,145,188,255,223,124, 61,125,101,127, 63,
- 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,107, 20,227,188, 11,143,197, 61, 80, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62,
- 0, 0, 0, 0,104,127, 35,189, 9, 62, 14, 62,163,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0,251,137, 94,189,
-143,155, 65, 62,184,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0,239, 84,145,189, 23,224,124, 62,141, 17,245, 63,
- 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0, 48,161,160, 2, 23, 1, 0, 0, 9, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 7, 84,145,186,255,223,124, 59,
- 56,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0,135, 84,145,187,255,223,124, 60,187, 71, 2, 63, 0, 0,200, 65,
- 0, 0, 64, 63, 0, 0, 0, 0, 72,127, 35,188, 15, 62, 14, 61,220,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0,
-231, 84,145,188, 15,224,124, 61,126,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,171, 20,227,188, 31,143,197, 61,
- 82, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,152,127, 35,189, 15, 62, 14, 62,165,172,187, 63, 0, 0,150, 66,
- 0, 0,128, 62, 0, 0, 0, 0, 11,138, 94,189,159,155, 65, 62,185,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0,
-247, 84,145,189, 39,224,124, 62,142, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,
- 56,162,160, 2, 23, 1, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0, 0, 0, 7, 85,145,186,255,223,124, 59, 57,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0, 7, 85,145,187,
-255,223,124, 60,186, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,200,127, 35,188,255, 61, 14, 61,219,123, 65, 63,
- 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, 39, 85,145,188,255,223,124, 61,125,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63,
- 0, 0, 0, 0,235, 20,227,188, 7,143,197, 61, 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,192,127, 35,189,
- 7, 62, 14, 62,164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 67,138, 94,189,139,155, 65, 62,184,177,216, 63,
- 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 19, 85,145,189, 19,224,124, 62,141, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0, 64,163,160, 2, 23, 1, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 7, 84,145,186,127,223,124, 59, 57,146,131, 62, 0, 0, 72, 65,
- 0, 0, 96, 63, 0, 0, 0, 0, 7, 85,145,187,191,223,124, 60,187, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,
-136,127, 35,188,239, 61, 14, 61,219,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, 7, 85,145,188,247,223,124, 61,
-125,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,235, 20,227,188,255,142,197, 61, 81, 2,158, 63, 0, 0,122, 66,
- 0, 0,192, 62, 0, 0, 0, 0,168,127, 35,189, 5, 62, 14, 62,164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0,
- 59,138, 94,189,138,155, 65, 62,184,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 23, 85,145,189, 19,224,124, 62,
-142, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0, 72,164,160, 2, 23, 1, 0, 0,
- 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 7, 84,145,186,
-255,223,124, 59, 58,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0,135, 84,145,187,255,223,124, 60,187, 71, 2, 63,
- 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,136,127, 35,188,255, 61, 14, 61,220,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63,
- 0, 0, 0, 0,231, 84,145,188, 15,224,124, 61,126,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,203, 20,227,188,
- 7,143,197, 61, 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,168,127, 35,189, 11, 62, 14, 62,164,172,187, 63,
- 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 59,138, 94,189,147,155, 65, 62,184,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62,
- 0, 0, 0, 0, 23, 85,145,189, 27,224,124, 62,142, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
-216, 0, 0, 0, 80,165,160, 2, 23, 1, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0,135, 84,145,186,255,223,124, 59, 57,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0,
-231, 84,145,187, 15,224,124, 60,187, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,136,127, 35,188, 7, 62, 14, 61,
-220,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0,247, 84,145,188, 19,224,124, 61,126,101,127, 63, 0, 0, 72, 66,
- 0, 0, 0, 63, 0, 0, 0, 0,203, 20,227,188, 17,143,197, 61, 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,
-164,127, 35,189, 14, 62, 14, 62,164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 51,138, 94,189,148,155, 65, 62,
-184,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 7, 85,145,189, 30,224,124, 62,141, 17,245, 63, 0, 0,200, 66,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0, 88,166,160, 2, 23, 1, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 7, 83,145,186,255,222,124, 59, 57,146,131, 62,
- 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0, 71, 84,145,187,191,223,124, 60,186, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63,
- 0, 0, 0, 0, 40,127, 35,188,223, 61, 14, 61,218,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0,199, 84,145,188,
-239,223,124, 61,124,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,155, 20,227,188,255,142,197, 61, 80, 2,158, 63,
- 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,128,127, 35,189,255, 61, 14, 62,164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62,
- 0, 0, 0, 0, 11,138, 94,189,131,155, 65, 62,184,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0,243, 84,145,189,
- 15,224,124, 62,141, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0, 96,167,160, 2,
- 23, 1, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 7, 84,145,186,255,222,124, 59, 57,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0,135, 84,145,187,191,223,124, 60,
-186, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0, 72,127, 35,188,239, 61, 14, 61,218,123, 65, 63, 0, 0, 22, 66,
- 0, 0, 32, 63, 0, 0, 0, 0,199, 84,145,188,255,223,124, 61,124,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,
-139, 20,227,188,247,142,197, 61, 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,120,127, 35,189,255, 61, 14, 62,
-164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0,251,137, 94,189,131,155, 65, 62,185,177,216, 63, 0, 0,175, 66,
- 0, 0, 0, 62, 0, 0, 0, 0,239, 84,145,189, 11,224,124, 62,141, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65,216, 0, 0, 0,104,168,160, 2, 23, 1, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 7, 86,145,186,255,223,124, 59, 57,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63,
- 0, 0, 0, 0,135, 85,145,187,255,223,124, 60,187, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,200,127, 35,188,
- 15, 62, 14, 61,220,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, 39, 85,145,188, 31,224,124, 61,126,101,127, 63,
- 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0, 11, 21,227,188, 23,143,197, 61, 82, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62,
- 0, 0, 0, 0,200,127, 35,189, 15, 62, 14, 62,165,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 91,138, 94,189,
-147,155, 65, 62,185,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 39, 85,145,189, 27,224,124, 62,143, 17,245, 63,
- 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,112,169,160, 2, 23, 1, 0, 0, 9, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 7, 86,145,186,255,222,124, 59,
- 58,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0,135, 85,145,187,191,223,124, 60,188, 71, 2, 63, 0, 0,200, 65,
- 0, 0, 64, 63, 0, 0, 0, 0, 8,128, 35,188,239, 61, 14, 61,221,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0,
-103, 85,145,188,255,223,124, 61,127,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0, 43, 21,227,188,255,142,197, 61,
- 82, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,200,127, 35,189, 3, 62, 14, 62,165,172,187, 63, 0, 0,150, 66,
- 0, 0,128, 62, 0, 0, 0, 0, 75,138, 94,189,135,155, 65, 62,186,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0,
- 23, 85,145,189, 19,224,124, 62,143, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,
-120,170,160, 2, 23, 1, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0, 0, 0, 7, 86,145,186,255,223,124, 59, 59,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0, 7, 85,145,187,
-255,223,124, 60,187, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,200,127, 35,188, 15, 62, 14, 61,220,123, 65, 63,
- 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, 39, 85,145,188, 15,224,124, 61,126,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63,
- 0, 0, 0, 0, 11, 21,227,188, 15,143,197, 61, 82, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,200,127, 35,189,
- 15, 62, 14, 62,165,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 91,138, 94,189,151,155, 65, 62,186,177,216, 63,
- 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 31, 85,145,189, 27,224,124, 62,143, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,128,171,160, 2, 23, 1, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 7, 85,145,186,127,223,124, 59, 57,146,131, 62, 0, 0, 72, 65,
- 0, 0, 96, 63, 0, 0, 0, 0,199, 84,145,187,191,223,124, 60,187, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,
-136,127, 35,188,231, 61, 14, 61,219,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0,215, 84,145,188,231,223,124, 61,
-126,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,171, 20,227,188,247,142,197, 61, 81, 2,158, 63, 0, 0,122, 66,
- 0, 0,192, 62, 0, 0, 0, 0,152,127, 35,189, 1, 62, 14, 62,164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0,
- 27,138, 94,189,135,155, 65, 62,185,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0,251, 84,145,189, 15,224,124, 62,
-141, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,136,172,160, 2, 23, 1, 0, 0,
- 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 7, 83,145,186,
-191,223,124, 59, 57,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0,135, 84,145,187,239,223,124, 60,186, 71, 2, 63,
- 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,104,127, 35,188, 3, 62, 14, 61,219,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63,
- 0, 0, 0, 0,231, 84,145,188, 15,224,124, 61,125,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,187, 20,227,188,
- 15,143,197, 61, 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,152,127, 35,189, 11, 62, 14, 62,164,172,187, 63,
- 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 35,138, 94,189,145,155, 65, 62,184,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62,
- 0, 0, 0, 0,255, 84,145,189, 25,224,124, 62,141, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
-216, 0, 0, 0,144,173,160, 2, 23, 1, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0, 7, 86,145,186, 63,224,124, 59, 56,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0,
- 7, 85,145,187, 47,224,124, 60,186, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,136,127, 35,188, 15, 62, 14, 61,
-218,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, 7, 85,145,188, 29,224,124, 61,125,101,127, 63, 0, 0, 72, 66,
- 0, 0, 0, 63, 0, 0, 0, 0,235, 20,227,188, 24,143,197, 61, 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,
-168,127, 35,189, 17, 62, 14, 62,164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 59,138, 94,189,155,155, 65, 62,
-183,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 7, 85,145,189, 35,224,124, 62,140, 17,245, 63, 0, 0,200, 66,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,152,174,160, 2, 23, 1, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 7, 86,145,186,255,223,124, 59, 57,146,131, 62,
- 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0,135, 85,145,187,255,223,124, 60,188, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63,
- 0, 0, 0, 0, 8,128, 35,188, 7, 62, 14, 61,221,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, 71, 85,145,188,
- 23,224,124, 61,127,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0, 43, 21,227,188, 23,143,197, 61, 82, 2,158, 63,
- 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,216,127, 35,189, 15, 62, 14, 62,166,172,187, 63, 0, 0,150, 66, 0, 0,128, 62,
- 0, 0, 0, 0, 91,138, 94,189,150,155, 65, 62,186,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 31, 85,145,189,
- 30,224,124, 62,143, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,160,175,160, 2,
- 23, 1, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 7, 84,145,186,255,223,124, 59, 57,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0, 7, 85,145,187, 15,224,124, 60,
-188, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,200,127, 35,188, 11, 62, 14, 61,221,123, 65, 63, 0, 0, 22, 66,
- 0, 0, 32, 63, 0, 0, 0, 0, 7, 85,145,188, 23,224,124, 61,127,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,
-235, 20,227,188, 19,143,197, 61, 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,184,127, 35,189, 17, 62, 14, 62,
-164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 75,138, 94,189,151,155, 65, 62,185,177,216, 63, 0, 0,175, 66,
- 0, 0, 0, 62, 0, 0, 0, 0, 23, 85,145,189, 33,224,124, 62,142, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65,216, 0, 0, 0,168,176,160, 2, 23, 1, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 7, 86,145,186,191,223,124, 59, 59,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63,
- 0, 0, 0, 0,135, 85,145,187, 15,224,124, 60,188, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0, 8,128, 35,188,
- 7, 62, 14, 61,221,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, 39, 85,145,188, 19,224,124, 61,127,101,127, 63,
- 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,235, 20,227,188, 17,143,197, 61, 82, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62,
- 0, 0, 0, 0,184,127, 35,189, 14, 62, 14, 62,165,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 75,138, 94,189,
-151,155, 65, 62,185,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 23, 85,145,189, 34,224,124, 62,142, 17,245, 63,
- 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,176,177,160, 2, 23, 1, 0, 0, 9, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,103, 84,145,186,255,223,124, 59,
- 58,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0,191, 84,145,187, 63,224,124, 60,187, 71, 2, 63, 0, 0,200, 65,
- 0, 0, 64, 63, 0, 0, 0, 0,144,127, 35,188, 15, 62, 14, 61,219,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0,
- 3, 85,145,188, 15,224,124, 61,126,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,223, 20,227,188, 7,143,197, 61,
- 82, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,174,127, 35,189, 11, 62, 14, 62,165,172,187, 63, 0, 0,150, 66,
- 0, 0,128, 62, 0, 0, 0, 0, 63,138, 94,189,147,155, 65, 62,185,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0,
- 15, 85,145,189, 27,224,124, 62,142, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,
-184,178,160, 2, 23, 1, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0, 0, 0, 7, 86,145,186,191,223,124, 59, 59,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0,135, 85,145,187,
- 3,224,124, 60,188, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0, 8,128, 35,188, 4, 62, 14, 61,221,123, 65, 63,
- 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, 71, 85,145,188, 18,224,124, 61,128,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63,
- 0, 0, 0, 0, 43, 21,227,188, 15,143,197, 61, 82, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,200,127, 35,189,
- 14, 62, 14, 62,165,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 91,138, 94,189,149,155, 65, 62,185,177,216, 63,
- 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 23, 85,145,189, 26,224,124, 62,143, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,192,179,160, 2, 23, 1, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 7, 84,145,186,255,222,124, 59, 57,146,131, 62, 0, 0, 72, 65,
- 0, 0, 96, 63, 0, 0, 0, 0,199, 84,145,187,191,223,124, 60,187, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,
-136,127, 35,188,239, 61, 14, 61,219,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0,247, 84,145,188,247,223,124, 61,
-125,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,203, 20,227,188, 3,143,197, 61, 81, 2,158, 63, 0, 0,122, 66,
- 0, 0,192, 62, 0, 0, 0, 0,160,127, 35,189, 7, 62, 14, 62,164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0,
- 51,138, 94,189,145,155, 65, 62,184,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 7, 85,145,189, 25,224,124, 62,
-141, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,200,180,160, 2, 23, 1, 0, 0,
- 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 7, 87,145,186,
-255,223,124, 59, 57,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0,199, 85,145,187,255,223,124, 60,187, 71, 2, 63,
- 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0, 40,128, 35,188, 15, 62, 14, 61,219,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63,
- 0, 0, 0, 0, 71, 85,145,188, 31,224,124, 61,126,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0, 27, 21,227,188,
- 31,143,197, 61, 80, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,208,127, 35,189, 27, 62, 14, 62,163,172,187, 63,
- 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 91,138, 94,189,163,155, 65, 62,183,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62,
- 0, 0, 0, 0, 27, 85,145,189, 43,224,124, 62,140, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
-216, 0, 0, 0,208,181,160, 2, 23, 1, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0, 7, 86,145,186,255,223,124, 59, 59,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0,
-135, 85,145,187,255,223,124, 60,188, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0, 8,128, 35,188, 7, 62, 14, 61,
-221,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, 39, 85,145,188, 15,224,124, 61,127,101,127, 63, 0, 0, 72, 66,
- 0, 0, 0, 63, 0, 0, 0, 0,235, 20,227,188, 19,143,197, 61, 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,
-184,127, 35,189, 13, 62, 14, 62,164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 75,138, 94,189,147,155, 65, 62,
-185,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 23, 85,145,189, 27,224,124, 62,142, 17,245, 63, 0, 0,200, 66,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,216,182,160, 2, 23, 1, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 7, 86,145,186,127,223,124, 59, 57,146,131, 62,
- 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0,135, 85,145,187,207,223,124, 60,187, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63,
- 0, 0, 0, 0, 8,128, 35,188,244, 61, 14, 61,219,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, 39, 85,145,188,
-254,223,124, 61,126,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0, 11, 21,227,188, 5,143,197, 61, 82, 2,158, 63,
- 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,184,127, 35,189, 9, 62, 14, 62,165,172,187, 63, 0, 0,150, 66, 0, 0,128, 62,
- 0, 0, 0, 0, 75,138, 94,189,143,155, 65, 62,185,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 23, 85,145,189,
- 25,224,124, 62,142, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0, 32, 31,127, 2,
- 23, 1, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 7, 84,145,186,255,223,124, 59, 57,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0, 7, 85,145,187,241,223,124, 60,
-188, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,168,127, 35,188,253, 61, 14, 61,220,123, 65, 63, 0, 0, 22, 66,
- 0, 0, 32, 63, 0, 0, 0, 0, 23, 85,145,188, 11,224,124, 61,126,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,
-219, 20,227,188, 13,143,197, 61, 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,176,127, 35,189, 12, 62, 14, 62,
-164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 59,138, 94,189,146,155, 65, 62,184,177,216, 63, 0, 0,175, 66,
- 0, 0, 0, 62, 0, 0, 0, 0, 11, 85,145,189, 27,224,124, 62,141, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65,216, 0, 0, 0,240, 34,167, 2, 23, 1, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,199, 84,145,186,255,222,124, 59, 57,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63,
- 0, 0, 0, 0,247, 84,145,187,255,223,124, 60,187, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,160,127, 35,188,
-255, 61, 14, 61,219,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, 11, 85,145,188,255,223,124, 61,126,101,127, 63,
- 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,231, 20,227,188, 15,143,197, 61, 82, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62,
- 0, 0, 0, 0,178,127, 35,189, 7, 62, 14, 62,165,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 61,138, 94,189,
-143,155, 65, 62,185,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 14, 85,145,189, 23,224,124, 62,142, 17,245, 63,
- 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,192, 46,159, 2, 23, 1, 0, 0, 9, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 7, 84,145,186,255,222,124, 59,
- 57,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0, 7, 85,145,187,191,223,124, 60,187, 71, 2, 63, 0, 0,200, 65,
- 0, 0, 64, 63, 0, 0, 0, 0,136,127, 35,188,239, 61, 14, 61,220,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0,
- 7, 85,145,188,239,223,124, 61,126,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,203, 20,227,188,255,142,197, 61,
- 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,184,127, 35,189, 3, 62, 14, 62,164,172,187, 63, 0, 0,150, 66,
- 0, 0,128, 62, 0, 0, 0, 0, 75,138, 94,189,137,155, 65, 62,184,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0,
- 23, 85,145,189, 17,224,124, 62,141, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,
-128, 56,155, 2, 23, 1, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0, 0, 0,135, 84,145,186,255,223,124, 59, 57,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0,215, 84,145,187,
-255,223,124, 60,187, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,140,127, 35,188, 15, 62, 14, 61,219,123, 65, 63,
- 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0,251, 84,145,188, 15,224,124, 61,126,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63,
- 0, 0, 0, 0,219, 20,227,188, 15,143,197, 61, 82, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,178,127, 35,189,
- 15, 62, 14, 62,165,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 61,138, 94,189,147,155, 65, 62,185,177,216, 63,
- 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 15, 85,145,189, 27,224,124, 62,142, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0, 72, 93,155, 2, 23, 1, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 7, 85,145,186, 13,224,124, 59, 58,146,131, 62, 0, 0, 72, 65,
- 0, 0, 96, 63, 0, 0, 0, 0, 7, 85,145,187, 31,224,124, 60,188, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,
-168,127, 35,188, 9, 62, 14, 61,220,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, 23, 85,145,188, 22,224,124, 61,
-127,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,235, 20,227,188, 16,143,197, 61, 81, 2,158, 63, 0, 0,122, 66,
- 0, 0,192, 62, 0, 0, 0, 0,176,127, 35,189, 14, 62, 14, 62,164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0,
- 59,138, 94,189,148,155, 65, 62,185,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 15, 85,145,189, 30,224,124, 62,
-142, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,160, 13,165, 2, 23, 1, 0, 0,
- 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,199, 84,145,186,
-255,222,124, 59, 57,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0,231, 84,145,187,159,223,124, 60,187, 71, 2, 63,
- 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,144,127, 35,188,231, 61, 14, 61,219,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63,
- 0, 0, 0, 0, 7, 85,145,188,239,223,124, 61,126,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,217, 20,227,188,
-255,142,197, 61, 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,175,127, 35,189, 5, 62, 14, 62,164,172,187, 63,
- 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 56,138, 94,189,140,155, 65, 62,185,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62,
- 0, 0, 0, 0, 11, 85,145,189, 21,224,124, 62,142, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
-216, 0, 0, 0,168,139, 8, 3, 23, 1, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0, 7, 86,145,186,255,224,124, 59, 57,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0,
-135, 85,145,187, 63,224,124, 60,188, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0, 72,128, 35,188, 31, 62, 14, 61,
-220,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0,103, 85,145,188, 47,224,124, 61,126,101,127, 63, 0, 0, 72, 66,
- 0, 0, 0, 63, 0, 0, 0, 0, 75, 21,227,188, 39,143,197, 61, 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,
-248,127, 35,189, 27, 62, 14, 62,163,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0,139,138, 94,189,163,155, 65, 62,
-184,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 55, 85,145,189, 43,224,124, 62,141, 17,245, 63, 0, 0,200, 66,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0, 40,137, 8, 3, 23, 1, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 7, 85,145,186,255,222,124, 59, 57,146,131, 62,
- 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0,199, 84,145,187,255,223,124, 60,187, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63,
- 0, 0, 0, 0,152,127, 35,188,239, 61, 14, 61,219,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, 7, 85,145,188,
- 15,224,124, 61,126,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,219, 20,227,188, 7,143,197, 61, 82, 2,158, 63,
- 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,176,127, 35,189, 11, 62, 14, 62,165,172,187, 63, 0, 0,150, 66, 0, 0,128, 62,
- 0, 0, 0, 0, 59,138, 94,189,139,155, 65, 62,185,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 15, 85,145,189,
- 19,224,124, 62,142, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,168,134, 8, 3,
- 23, 1, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 7, 84,145,186,255,223,124, 59, 56,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0, 71, 84,145,187,191,223,124, 60,
-186, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0, 72,127, 35,188,239, 61, 14, 61,219,123, 65, 63, 0, 0, 22, 66,
- 0, 0, 32, 63, 0, 0, 0, 0,231, 84,145,188,255,223,124, 61,125,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,
-187, 20,227,188,255,142,197, 61, 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,152,127, 35,189, 3, 62, 14, 62,
-164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 35,138, 94,189,139,155, 65, 62,184,177,216, 63, 0, 0,175, 66,
- 0, 0, 0, 62, 0, 0, 0, 0,255, 84,145,189, 19,224,124, 62,141, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65,216, 0, 0, 0, 40,132, 8, 3, 23, 1, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 7, 85,145,186,255,223,124, 59, 57,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63,
- 0, 0, 0, 0, 71, 85,145,187,255,223,124, 60,186, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,200,127, 35,188,
-239, 61, 14, 61,219,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, 23, 85,145,188,255,223,124, 61,125,101,127, 63,
- 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,251, 20,227,188, 7,143,197, 61, 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62,
- 0, 0, 0, 0,184,127, 35,189, 7, 62, 14, 62,164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 67,138, 94,189,
-139,155, 65, 62,184,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 19, 85,145,189, 19,224,124, 62,141, 17,245, 63,
- 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0, 24,254, 17, 3, 23, 1, 0, 0, 9, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,199, 84,145,186,255,223,124, 59,
- 58,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0,231, 84,145,187,255,223,124, 60,187, 71, 2, 63, 0, 0,200, 65,
- 0, 0, 64, 63, 0, 0, 0, 0,152,127, 35,188, 15, 62, 14, 61,220,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0,
- 3, 85,145,188, 15,224,124, 61,126,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,235, 20,227,188, 15,143,197, 61,
- 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,180,127, 35,189, 11, 62, 14, 62,164,172,187, 63, 0, 0,150, 66,
- 0, 0,128, 62, 0, 0, 0, 0, 63,138, 94,189,147,155, 65, 62,184,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0,
- 15, 85,145,189, 27,224,124, 62,141, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,
-232,132,165, 2, 23, 1, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0, 0, 0, 7, 86,145,186,255,223,124, 59, 58,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0, 39, 85,145,187,
- 31,224,124, 60,187, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,168,127, 35,188, 15, 62, 14, 61,220,123, 65, 63,
- 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0,255, 84,145,188, 39,224,124, 61,126,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63,
- 0, 0, 0, 0,227, 20,227,188, 33,143,197, 61, 82, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,176,127, 35,189,
- 24, 62, 14, 62,165,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 67,138, 94,189,162,155, 65, 62,185,177,216, 63,
- 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 17, 85,145,189, 45,224,124, 62,142, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0, 40, 69, 18, 3, 23, 1, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 7, 85,145,186,255,223,124, 59, 58,146,131, 62, 0, 0, 72, 65,
- 0, 0, 96, 63, 0, 0, 0, 0,199, 84,145,187,255,223,124, 60,187, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,
-136,127, 35,188,255, 61, 14, 61,219,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, 7, 85,145,188, 15,224,124, 61,
-125,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,219, 20,227,188, 7,143,197, 61, 82, 2,158, 63, 0, 0,122, 66,
- 0, 0,192, 62, 0, 0, 0, 0,176,127, 35,189, 11, 62, 14, 62,165,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0,
- 59,138, 94,189,143,155, 65, 62,185,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 15, 85,145,189, 19,224,124, 62,
-142, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,216, 29, 16, 3, 23, 1, 0, 0,
- 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,135, 84,145,186,
-255,223,124, 59, 57,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0,231, 84,145,187,255,223,124, 60,187, 71, 2, 63,
- 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,152,127, 35,188, 7, 62, 14, 61,220,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63,
- 0, 0, 0, 0,255, 84,145,188, 15,224,124, 61,126,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,219, 20,227,188,
- 15,143,197, 61, 82, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,168,127, 35,189, 15, 62, 14, 62,165,172,187, 63,
- 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 51,138, 94,189,147,155, 65, 62,185,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62,
- 0, 0, 0, 0, 9, 85,145,189, 27,224,124, 62,142, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
-216, 0, 0, 0, 56,146,150, 2, 23, 1, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0, 7, 82,145,186,223,223,124, 59, 57,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0,
- 7, 84,145,187,235,223,124, 60,187, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,200,126, 35,188,251, 61, 14, 61,
-220,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0,167, 84,145,188, 9,224,124, 61,126,101,127, 63, 0, 0, 72, 66,
- 0, 0, 0, 63, 0, 0, 0, 0,107, 20,227,188, 11,143,197, 61, 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,
-120,127, 35,189, 11, 62, 14, 62,164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0,251,137, 94,189,145,155, 65, 62,
-184,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0,239, 84,145,189, 28,224,124, 62,141, 17,245, 63, 0, 0,200, 66,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,224,233, 63, 0, 23, 1, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 7, 85,145,186,255,222,124, 59, 56,146,131, 62,
- 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0, 39, 85,145,187,191,223,124, 60,186, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63,
- 0, 0, 0, 0,168,127, 35,188,239, 61, 14, 61,219,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, 23, 85,145,188,
-255,223,124, 61,125,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0, 3, 21,227,188, 7,143,197, 61, 80, 2,158, 63,
- 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,196,127, 35,189, 7, 62, 14, 62,163,172,187, 63, 0, 0,150, 66, 0, 0,128, 62,
- 0, 0, 0, 0, 87,138, 94,189,143,155, 65, 62,183,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 29, 85,145,189,
- 23,224,124, 62,140, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,160,168,126, 2,
- 23, 1, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 7, 84,145,186,191,223,124, 59, 57,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0, 7, 84,145,187,223,223,124, 60,
-187, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0, 72,127, 35,188,251, 61, 14, 61,220,123, 65, 63, 0, 0, 22, 66,
- 0, 0, 32, 63, 0, 0, 0, 0,199, 84,145,188, 11,224,124, 61,126,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,
-155, 20,227,188, 13,143,197, 61, 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,136,127, 35,189, 12, 62, 14, 62,
-164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 19,138, 94,189,144,155, 65, 62,184,177,216, 63, 0, 0,175, 66,
- 0, 0, 0, 62, 0, 0, 0, 0,247, 84,145,189, 24,224,124, 62,141, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65,216, 0, 0, 0,240, 12,167, 2, 23, 1, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 7, 86,145,186,255,223,124, 59, 58,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63,
- 0, 0, 0, 0,135, 85,145,187, 31,224,124, 60,188, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0, 8,128, 35,188,
- 7, 62, 14, 61,221,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, 71, 85,145,188, 15,224,124, 61,127,101,127, 63,
- 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0, 11, 21,227,188, 11,143,197, 61, 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62,
- 0, 0, 0, 0,200,127, 35,189, 11, 62, 14, 62,164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 91,138, 94,189,
-143,155, 65, 62,185,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 31, 85,145,189, 23,224,124, 62,141, 17,245, 63,
- 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0, 24, 38,164, 2, 23, 1, 0, 0, 9, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 7, 84,145,186,255,223,124, 59,
- 58,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0, 7, 85,145,187,239,223,124, 60,188, 71, 2, 63, 0, 0,200, 65,
- 0, 0, 64, 63, 0, 0, 0, 0,168,127, 35,188, 3, 62, 14, 61,220,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0,
- 7, 85,145,188, 15,224,124, 61,127,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,219, 20,227,188, 17,143,197, 61,
- 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,168,127, 35,189, 13, 62, 14, 62,164,172,187, 63, 0, 0,150, 66,
- 0, 0,128, 62, 0, 0, 0, 0, 59,138, 94,189,149,155, 65, 62,184,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0,
- 23, 85,145,189, 29,224,124, 62,142, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,
-144,156,160, 2, 23, 1, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0, 0, 0,135, 86,145,186,255,223,124, 59, 57,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0,103, 85,145,187,
-255,223,124, 60,187, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,248,127, 35,188,255, 61, 14, 61,219,123, 65, 63,
- 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, 55, 85,145,188, 15,224,124, 61,125,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63,
- 0, 0, 0, 0, 35, 21,227,188, 15,143,197, 61, 80, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,220,127, 35,189,
- 15, 62, 14, 62,162,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0,107,138, 94,189,151,155, 65, 62,182,177,216, 63,
- 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 37, 85,145,189, 31,224,124, 62,139, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0, 64, 16, 16, 3, 23, 1, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,135, 86,145,186,255,223,124, 59, 57,146,131, 62, 0, 0, 72, 65,
- 0, 0, 96, 63, 0, 0, 0, 0,103, 85,145,187,255,223,124, 60,187, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,
-184,127, 35,188, 15, 62, 14, 61,220,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, 7, 85,145,188, 31,224,124, 61,
-126,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,235, 20,227,188, 31,143,197, 61, 81, 2,158, 63, 0, 0,122, 66,
- 0, 0,192, 62, 0, 0, 0, 0,180,127, 35,189, 23, 62, 14, 62,164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0,
- 71,138, 94,189,159,155, 65, 62,184,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 18, 85,145,189, 43,224,124, 62,
-141, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,168, 33,164, 2, 23, 1, 0, 0,
- 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 7, 85,145,186,
-255,222,124, 59, 56,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0, 39, 85,145,187,255,223,124, 60,187, 71, 2, 63,
- 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,168,127, 35,188, 15, 62, 14, 61,219,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63,
- 0, 0, 0, 0, 15, 85,145,188, 15,224,124, 61,125,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,243, 20,227,188,
- 15,143,197, 61, 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,184,127, 35,189, 11, 62, 14, 62,164,172,187, 63,
- 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 83,138, 94,189,151,155, 65, 62,184,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62,
- 0, 0, 0, 0, 25, 85,145,189, 27,224,124, 62,140, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
-216, 0, 0, 0,104,249,161, 2, 23, 1, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0, 7, 86,145,186,255,222,124, 59, 58,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0,
-135, 85,145,187,191,223,124, 60,188, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0, 8,128, 35,188,239, 61, 14, 61,
-221,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, 71, 85,145,188,255,223,124, 61,127,101,127, 63, 0, 0, 72, 66,
- 0, 0, 0, 63, 0, 0, 0, 0, 75, 21,227,188, 7,143,197, 61, 82, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,
-216,127, 35,189, 7, 62, 14, 62,165,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0,107,138, 94,189,143,155, 65, 62,
-185,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 31, 85,145,189, 23,224,124, 62,142, 17,245, 63, 0, 0,200, 66,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,184, 34,155, 2, 23, 1, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 7, 85,145,186,255,223,124, 59, 57,146,131, 62,
- 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0, 7, 85,145,187, 63,224,124, 60,187, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63,
- 0, 0, 0, 0,168,127, 35,188, 15, 62, 14, 61,220,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, 7, 85,145,188,
- 31,224,124, 61,126,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,219, 20,227,188, 23,143,197, 61, 82, 2,158, 63,
- 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,176,127, 35,189, 15, 62, 14, 62,165,172,187, 63, 0, 0,150, 66, 0, 0,128, 62,
- 0, 0, 0, 0, 67,138, 94,189,151,155, 65, 62,185,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 19, 85,145,189,
- 31,224,124, 62,142, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,168,154,160, 2,
- 23, 1, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 7, 85,145,186,255,222,124, 59, 57,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0, 71, 85,145,187,255,223,124, 60,
-187, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,200,127, 35,188,255, 61, 14, 61,220,123, 65, 63, 0, 0, 22, 66,
- 0, 0, 32, 63, 0, 0, 0, 0, 23, 85,145,188, 15,224,124, 61,127,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,
-235, 20,227,188, 15,143,197, 61, 82, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,176,127, 35,189, 15, 62, 14, 62,
-165,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 59,138, 94,189,147,155, 65, 62,185,177,216, 63, 0, 0,175, 66,
- 0, 0, 0, 62, 0, 0, 0, 0, 19, 85,145,189, 31,224,124, 62,142, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65,216, 0, 0, 0, 48, 13,132, 2, 23, 1, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 7, 86,145,186,143,223,124, 59, 56,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63,
- 0, 0, 0, 0, 7, 85,145,187,223,223,124, 60,186, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,200,127, 35,188,
-251, 61, 14, 61,218,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, 39, 85,145,188, 2,224,124, 61,125,101,127, 63,
- 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,235, 20,227,188, 11,143,197, 61, 80, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62,
- 0, 0, 0, 0,168,127, 35,189, 11, 62, 14, 62,163,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 43,138, 94,189,
-145,155, 65, 62,183,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 7, 85,145,189, 27,224,124, 62,139, 17,245, 63,
- 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0, 88, 27, 16, 3, 23, 1, 0, 0, 9, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 7, 85,145,186,255,223,124, 59,
- 57,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0, 7, 85,145,187,255,223,124, 60,187, 71, 2, 63, 0, 0,200, 65,
- 0, 0, 64, 63, 0, 0, 0, 0,168,127, 35,188, 15, 62, 14, 61,219,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0,
- 23, 85,145,188, 15,224,124, 61,126,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,235, 20,227,188, 7,143,197, 61,
- 82, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,176,127, 35,189, 11, 62, 14, 62,165,172,187, 63, 0, 0,150, 66,
- 0, 0,128, 62, 0, 0, 0, 0, 67,138, 94,189,147,155, 65, 62,185,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0,
- 19, 85,145,189, 27,224,124, 62,142, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,
-104,124, 20, 3, 23, 1, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0, 0, 0, 7, 85,145,186,255,223,124, 59, 57,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0,231, 84,145,187,
-191,223,124, 60,188, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,152,127, 35,188,239, 61, 14, 61,220,123, 65, 63,
- 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, 15, 85,145,188,255,223,124, 61,126,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63,
- 0, 0, 0, 0,235, 20,227,188,255,142,197, 61, 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,184,127, 35,189,
- 7, 62, 14, 62,164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 75,138, 94,189,143,155, 65, 62,184,177,216, 63,
- 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 19, 85,145,189, 23,224,124, 62,141, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0, 32, 41,167, 2, 23, 1, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 7, 84,145,186,255,222,124, 59, 57,146,131, 62, 0, 0, 72, 65,
- 0, 0, 96, 63, 0, 0, 0, 0,135, 84,145,187,191,223,124, 60,186, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,
- 8,127, 35,188,239, 61, 14, 61,218,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0,199, 84,145,188,239,223,124, 61,
-124,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,139, 20,227,188,247,142,197, 61, 81, 2,158, 63, 0, 0,122, 66,
- 0, 0,192, 62, 0, 0, 0, 0,120,127, 35,189,251, 61, 14, 62,164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0,
- 11,138, 94,189,131,155, 65, 62,185,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0,239, 84,145,189, 11,224,124, 62,
-142, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,200, 89,169, 2, 23, 1, 0, 0,
- 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 7, 85,145,186,
-255,222,124, 59, 57,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0, 39, 85,145,187,191,223,124, 60,187, 71, 2, 63,
- 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,176,127, 35,188,239, 61, 14, 61,219,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63,
- 0, 0, 0, 0, 19, 85,145,188,239,223,124, 61,125,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,231, 20,227,188,
-255,142,197, 61, 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,179,127, 35,189, 5, 62, 14, 62,164,172,187, 63,
- 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 65,138, 94,189,139,155, 65, 62,184,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62,
- 0, 0, 0, 0, 16, 85,145,189, 21,224,124, 62,141, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
-216, 0, 0, 0,232, 96,169, 2, 23, 1, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0, 7, 84,145,186,255,223,124, 59, 57,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0,
-199, 84,145,187,255,223,124, 60,187, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,104,127, 35,188,255, 61, 14, 61,
-220,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0,239, 84,145,188, 15,224,124, 61,126,101,127, 63, 0, 0, 72, 66,
- 0, 0, 0, 63, 0, 0, 0, 0,203, 20,227,188, 11,143,197, 61, 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,
-164,127, 35,189, 11, 62, 14, 62,164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 51,138, 94,189,145,155, 65, 62,
-184,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 11, 85,145,189, 25,224,124, 62,141, 17,245, 63, 0, 0,200, 66,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,144, 82,169, 2, 23, 1, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 7, 86,145,186,127,223,124, 59, 57,146,131, 62,
- 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0, 7, 85,145,187,207,223,124, 60,187, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63,
- 0, 0, 0, 0,200,127, 35,188,243, 61, 14, 61,220,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, 39, 85,145,188,
-251,223,124, 61,126,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,235, 20,227,188, 3,143,197, 61, 81, 2,158, 63,
- 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,184,127, 35,189, 7, 62, 14, 62,164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62,
- 0, 0, 0, 0, 75,138, 94,189,141,155, 65, 62,184,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 23, 85,145,189,
- 23,224,124, 62,141, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,224, 31,167, 2,
- 23, 1, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 7, 85,145,186,255,223,124, 59, 58,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0, 7, 85,145,187,255,223,124, 60,
-188, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,168,127, 35,188, 7, 62, 14, 61,220,123, 65, 63, 0, 0, 22, 66,
- 0, 0, 32, 63, 0, 0, 0, 0, 7, 85,145,188, 15,224,124, 61,127,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,
-219, 20,227,188, 15,143,197, 61, 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,168,127, 35,189, 13, 62, 14, 62,
-164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 51,138, 94,189,147,155, 65, 62,185,177,216, 63, 0, 0,175, 66,
- 0, 0, 0, 62, 0, 0, 0, 0, 11, 85,145,189, 27,224,124, 62,141, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65,216, 0, 0, 0, 88, 20,167, 2, 23, 1, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 7, 84,145,186,127,223,124, 59, 57,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63,
- 0, 0, 0, 0, 7, 85,145,187,223,223,124, 60,187, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,200,127, 35,188,
-247, 61, 14, 61,220,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, 7, 85,145,188,255,223,124, 61,126,101,127, 63,
- 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,235, 20,227,188, 3,143,197, 61, 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62,
- 0, 0, 0, 0,184,127, 35,189, 6, 62, 14, 62,164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 75,138, 94,189,
-141,155, 65, 62,184,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 23, 85,145,189, 22,224,124, 62,141, 17,245, 63,
- 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,176, 23,162, 2, 23, 1, 0, 0, 9, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 7, 86,145,186,255,223,124, 59,
- 59,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0, 71, 85,145,187, 13,224,124, 60,187, 71, 2, 63, 0, 0,200, 65,
- 0, 0, 64, 63, 0, 0, 0, 0,168,127, 35,188, 5, 62, 14, 61,220,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0,
- 7, 85,145,188, 19,224,124, 61,126,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,227, 20,227,188, 17,143,197, 61,
- 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,176,127, 35,189, 14, 62, 14, 62,164,172,187, 63, 0, 0,150, 66,
- 0, 0,128, 62, 0, 0, 0, 0, 59,138, 94,189,149,155, 65, 62,185,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0,
- 13, 85,145,189, 31,224,124, 62,142, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,
- 32,160,148, 2, 23, 1, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0, 0, 0,151, 84,145,186,255,223,124, 59, 57,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0,219, 84,145,187,
-255,223,124, 60,187, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,140,127, 35,188, 7, 62, 14, 61,220,123, 65, 63,
- 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0,249, 84,145,188, 15,224,124, 61,126,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63,
- 0, 0, 0, 0,205, 20,227,188, 15,143,197, 61, 82, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,168,127, 35,189,
- 15, 62, 14, 62,165,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 51,138, 94,189,147,155, 65, 62,185,177,216, 63,
- 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 10, 85,145,189, 27,224,124, 62,142, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,168, 37,155, 2, 23, 1, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 7, 86,145,186,255,223,124, 59, 58,146,131, 62, 0, 0, 72, 65,
- 0, 0, 96, 63, 0, 0, 0, 0,135, 85,145,187,255,223,124, 60,187, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,
- 8,128, 35,188,255, 61, 14, 61,219,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, 71, 85,145,188, 15,224,124, 61,
-125,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0, 11, 21,227,188, 15,143,197, 61, 81, 2,158, 63, 0, 0,122, 66,
- 0, 0,192, 62, 0, 0, 0, 0,200,127, 35,189, 7, 62, 14, 62,164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0,
- 91,138, 94,189,143,155, 65, 62,185,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 27, 85,145,189, 23,224,124, 62,
-142, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,176, 38,155, 2, 23, 1, 0, 0,
- 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,175, 84,145,186,
-255,222,124, 59, 57,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0,224, 84,145,187,191,223,124, 60,188, 71, 2, 63,
- 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,142,127, 35,188,239, 61, 14, 61,220,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63,
- 0, 0, 0, 0, 1, 85,145,188,239,223,124, 61,126,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,207, 20,227,188,
-255,142,197, 61, 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,164,127, 35,189, 3, 62, 14, 62,164,172,187, 63,
- 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 42,138, 94,189,135,155, 65, 62,184,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62,
- 0, 0, 0, 0, 4, 85,145,189, 15,224,124, 62,141, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
-216, 0, 0, 0,224,124, 8, 3, 23, 1, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0, 7, 86,145,186,255,223,124, 59, 57,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0,
- 7, 85,145,187, 31,224,124, 60,187, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,200,127, 35,188, 7, 62, 14, 61,
-220,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, 39, 85,145,188, 23,224,124, 61,127,101,127, 63, 0, 0, 72, 66,
- 0, 0, 0, 63, 0, 0, 0, 0,235, 20,227,188, 19,143,197, 61, 82, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,
-168,127, 35,189, 15, 62, 14, 62,165,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 59,138, 94,189,147,155, 65, 62,
-186,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 23, 85,145,189, 31,224,124, 62,143, 17,245, 63, 0, 0,200, 66,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,232,125, 8, 3, 23, 1, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 7, 85,145,186,127,223,124, 59, 56,146,131, 62,
- 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0, 39, 85,145,187,223,223,124, 60,187, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63,
- 0, 0, 0, 0,176,127, 35,188,239, 61, 14, 61,219,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, 19, 85,145,188,
-255,223,124, 61,125,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,231, 20,227,188, 3,143,197, 61, 81, 2,158, 63,
- 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,178,127, 35,189, 9, 62, 14, 62,164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62,
- 0, 0, 0, 0, 63,138, 94,189,143,155, 65, 62,184,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 15, 85,145,189,
- 24,224,124, 62,141, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,200,205, 16, 3,
- 23, 1, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 7, 86,145,186,255,223,124, 59, 57,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0, 7, 85,145,187, 31,224,124, 60,
-187, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,136,127, 35,188, 7, 62, 14, 61,220,123, 65, 63, 0, 0, 22, 66,
- 0, 0, 32, 63, 0, 0, 0, 0, 7, 85,145,188, 15,224,124, 61,126,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,
-235, 20,227,188, 19,143,197, 61, 82, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,184,127, 35,189, 15, 62, 14, 62,
-165,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 75,138, 94,189,151,155, 65, 62,186,177,216, 63, 0, 0,175, 66,
- 0, 0, 0, 62, 0, 0, 0, 0, 23, 85,145,189, 31,224,124, 62,143, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65,216, 0, 0, 0,208,206, 16, 3, 23, 1, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 7, 86,145,186,255,223,124, 59, 57,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63,
- 0, 0, 0, 0, 7, 85,145,187,255,223,124, 60,187, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,136,127, 35,188,
- 7, 62, 14, 61,219,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, 7, 85,145,188, 15,224,124, 61,126,101,127, 63,
- 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,203, 20,227,188, 15,143,197, 61, 82, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62,
- 0, 0, 0, 0,184,127, 35,189, 15, 62, 14, 62,165,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 75,138, 94,189,
-151,155, 65, 62,185,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 23, 85,145,189, 31,224,124, 62,143, 17,245, 63,
- 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,160,173,161, 2, 23, 1, 0, 0, 9, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 7, 84,145,186,255,223,124, 59,
- 56,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0,135, 84,145,187,255,223,124, 60,186, 71, 2, 63, 0, 0,200, 65,
- 0, 0, 64, 63, 0, 0, 0, 0, 72,127, 35,188,255, 61, 14, 61,217,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0,
-231, 84,145,188, 15,224,124, 61,123,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,203, 20,227,188, 15,143,197, 61,
- 80, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,168,127, 35,189, 11, 62, 14, 62,163,172,187, 63, 0, 0,150, 66,
- 0, 0,128, 62, 0, 0, 0, 0, 59,138, 94,189,147,155, 65, 62,182,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0,
- 7, 85,145,189, 27,224,124, 62,139, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,
-168,174,161, 2, 23, 1, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0, 0, 0, 71, 85,145,186,255,223,124, 59, 56,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0, 39, 85,145,187,
-255,223,124, 60,186, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,144,127, 35,188, 15, 62, 14, 61,219,123, 65, 63,
- 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0,255, 84,145,188, 31,224,124, 61,125,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63,
- 0, 0, 0, 0,223, 20,227,188, 31,143,197, 61, 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,176,127, 35,189,
- 23, 62, 14, 62,164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 63,138, 94,189,161,155, 65, 62,184,177,216, 63,
- 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 14, 85,145,189, 43,224,124, 62,141, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,216, 53,153, 2, 23, 1, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 7, 84,145,186,255,223,124, 59, 58,146,131, 62, 0, 0, 72, 65,
- 0, 0, 96, 63, 0, 0, 0, 0,135, 84,145,187, 15,224,124, 60,188, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,
-136,127, 35,188, 7, 62, 14, 61,220,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0,231, 84,145,188, 15,224,124, 61,
-127,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,203, 20,227,188, 17,143,197, 61, 81, 2,158, 63, 0, 0,122, 66,
- 0, 0,192, 62, 0, 0, 0, 0,168,127, 35,189, 15, 62, 14, 62,164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0,
- 59,138, 94,189,150,155, 65, 62,185,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 23, 85,145,189, 30,224,124, 62,
-142, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,224, 54,153, 2, 23, 1, 0, 0,
- 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 7, 84,145,186,
-255,223,124, 59, 56,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0,135, 84,145,187,255,223,124, 60,185, 71, 2, 63,
- 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0, 72,127, 35,188,255, 61, 14, 61,217,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63,
- 0, 0, 0, 0,231, 84,145,188,255,223,124, 61,123,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,203, 20,227,188,
- 15,143,197, 61, 80, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,152,127, 35,189, 7, 62, 14, 62,163,172,187, 63,
- 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 43,138, 94,189,143,155, 65, 62,184,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62,
- 0, 0, 0, 0,255, 84,145,189, 23,224,124, 62,141, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
-216, 0, 0, 0,232, 55,153, 2, 23, 1, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0, 7, 85,145,186,127,223,124, 59, 56,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0,
- 7, 85,145,187,223,223,124, 60,187, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,168,127, 35,188,247, 61, 14, 61,
-220,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, 23, 85,145,188,255,223,124, 61,126,101,127, 63, 0, 0, 72, 66,
- 0, 0, 0, 63, 0, 0, 0, 0,235, 20,227,188, 3,143,197, 61, 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,
-176,127, 35,189, 7, 62, 14, 62,164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 59,138, 94,189,141,155, 65, 62,
-184,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 15, 85,145,189, 23,224,124, 62,141, 17,245, 63, 0, 0,200, 66,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0, 72,253,149, 2, 23, 1, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 7, 86,145,186,255,223,124, 59, 57,146,131, 62,
- 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0, 7, 85,145,187,191,223,124, 60,187, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63,
- 0, 0, 0, 0,200,127, 35,188,239, 61, 14, 61,220,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, 39, 85,145,188,
-255,223,124, 61,126,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,235, 20,227,188, 3,143,197, 61, 81, 2,158, 63,
- 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,184,127, 35,189, 5, 62, 14, 62,164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62,
- 0, 0, 0, 0, 75,138, 94,189,139,155, 65, 62,184,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 23, 85,145,189,
- 21,224,124, 62,141, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0, 80,254,149, 2,
- 23, 1, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 7, 86,145,186,255,223,124, 59, 59,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0,135, 85,145,187,255,223,124, 60,
-189, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,200,127, 35,188, 1, 62, 14, 61,221,123, 65, 63, 0, 0, 22, 66,
- 0, 0, 32, 63, 0, 0, 0, 0, 23, 85,145,188, 16,224,124, 61,127,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,
-235, 20,227,188, 15,143,197, 61, 82, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,184,127, 35,189, 13, 62, 14, 62,
-165,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 67,138, 94,189,147,155, 65, 62,185,177,216, 63, 0, 0,175, 66,
- 0, 0, 0, 62, 0, 0, 0, 0, 15, 85,145,189, 30,224,124, 62,142, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65,216, 0, 0, 0, 88,255,149, 2, 23, 1, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 7, 86,145,186,255,223,124, 59, 58,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63,
- 0, 0, 0, 0, 7, 85,145,187,223,223,124, 60,187, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,136,127, 35,188,
-255, 61, 14, 61,219,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, 7, 85,145,188, 7,224,124, 61,126,101,127, 63,
- 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,203, 20,227,188, 11,143,197, 61, 82, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62,
- 0, 0, 0, 0,168,127, 35,189, 11, 62, 14, 62,165,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 59,138, 94,189,
-145,155, 65, 62,185,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 23, 85,145,189, 29,224,124, 62,143, 17,245, 63,
- 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0, 96, 0,150, 2, 23, 1, 0, 0, 9, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 7, 86,145,186,191,223,124, 59,
- 58,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0,135, 85,145,187,255,223,124, 60,187, 71, 2, 63, 0, 0,200, 65,
- 0, 0, 64, 63, 0, 0, 0, 0, 8,128, 35,188, 11, 62, 14, 61,220,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0,
- 39, 85,145,188, 19,224,124, 61,127,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0, 11, 21,227,188, 21,143,197, 61,
- 82, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,200,127, 35,189, 17, 62, 14, 62,165,172,187, 63, 0, 0,150, 66,
- 0, 0,128, 62, 0, 0, 0, 0, 91,138, 94,189,153,155, 65, 62,184,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0,
- 31, 85,145,189, 33,224,124, 62,141, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,
-144, 17,162, 2, 23, 1, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0, 0, 0, 7, 86,145,186,255,223,124, 59, 57,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0, 7, 86,145,187,
-255,223,124, 60,188, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0, 8,128, 35,188,255, 61, 14, 61,220,123, 65, 63,
- 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, 71, 85,145,188, 15,224,124, 61,126,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63,
- 0, 0, 0, 0, 43, 21,227,188, 15,143,197, 61, 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,216,127, 35,189,
- 11, 62, 14, 62,164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0,107,138, 94,189,147,155, 65, 62,183,177,216, 63,
- 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 39, 85,145,189, 27,224,124, 62,140, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,152, 18,162, 2, 23, 1, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 7, 86,145,186,255,223,124, 59, 58,146,131, 62, 0, 0, 72, 65,
- 0, 0, 96, 63, 0, 0, 0, 0, 7, 85,145,187,255,223,124, 60,188, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,
-200,127, 35,188, 7, 62, 14, 61,220,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, 7, 85,145,188, 15,224,124, 61,
-127,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,203, 20,227,188, 15,143,197, 61, 81, 2,158, 63, 0, 0,122, 66,
- 0, 0,192, 62, 0, 0, 0, 0,168,127, 35,189, 13, 62, 14, 62,164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0,
- 43,138, 94,189,147,155, 65, 62,184,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 15, 85,145,189, 31,224,124, 62,
-142, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,160, 19,162, 2, 23, 1, 0, 0,
- 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,135, 84,145,186,
-255,223,124, 59, 57,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0,199, 84,145,187,255,223,124, 60,187, 71, 2, 63,
- 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,136,127, 35,188,255, 61, 14, 61,220,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63,
- 0, 0, 0, 0,255, 84,145,188, 15,224,124, 61,126,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,215, 20,227,188,
- 7,143,197, 61, 82, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,174,127, 35,189, 11, 62, 14, 62,165,172,187, 63,
- 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 57,138, 94,189,143,155, 65, 62,185,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62,
- 0, 0, 0, 0, 13, 85,145,189, 23,224,124, 62,142, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
-216, 0, 0, 0,168, 20,162, 2, 23, 1, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0,135, 84,145,186,255,223,124, 59, 57,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0,
-231, 84,145,187,255,223,124, 60,187, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,168,127, 35,188, 15, 62, 14, 61,
-220,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, 15, 85,145,188, 31,224,124, 61,126,101,127, 63, 0, 0, 72, 66,
- 0, 0, 0, 63, 0, 0, 0, 0,211, 20,227,188, 23,143,197, 61, 82, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,
-168,127, 35,189, 15, 62, 14, 62,165,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 51,138, 94,189,147,155, 65, 62,
-185,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 11, 85,145,189, 27,224,124, 62,142, 17,245, 63, 0, 0,200, 66,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,184,109, 8, 3, 23, 1, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 7, 85,145,186,255,223,124, 59, 57,146,131, 62,
- 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0,247, 84,145,187,191,223,124, 60,187, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63,
- 0, 0, 0, 0,152,127, 35,188,239, 61, 14, 61,219,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, 11, 85,145,188,
-255,223,124, 61,125,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,227, 20,227,188,255,142,197, 61, 81, 2,158, 63,
- 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,180,127, 35,189, 7, 62, 14, 62,164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62,
- 0, 0, 0, 0, 73,138, 94,189,143,155, 65, 62,184,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 20, 85,145,189,
- 23,224,124, 62,141, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,192,110, 8, 3,
- 23, 1, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
-135, 84,145,186,255,223,124, 59, 57,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0,231, 84,145,187,255,223,124, 60,
-188, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,136,127, 35,188,255, 61, 14, 61,220,123, 65, 63, 0, 0, 22, 66,
- 0, 0, 32, 63, 0, 0, 0, 0,255, 84,145,188, 15,224,124, 61,126,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,
-211, 20,227,188, 15,143,197, 61, 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,168,127, 35,189, 15, 62, 14, 62,
-164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 55,138, 94,189,147,155, 65, 62,184,177,216, 63, 0, 0,175, 66,
- 0, 0, 0, 62, 0, 0, 0, 0, 12, 85,145,189, 27,224,124, 62,141, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65,216, 0, 0, 0,200,111, 8, 3, 23, 1, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 7, 86,145,186,255,223,124, 59, 57,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63,
- 0, 0, 0, 0, 7, 85,145,187, 63,224,124, 60,187, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,200,127, 35,188,
- 15, 62, 14, 61,220,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, 7, 85,145,188, 31,224,124, 61,126,101,127, 63,
- 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,235, 20,227,188, 23,143,197, 61, 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62,
- 0, 0, 0, 0,184,127, 35,189, 15, 62, 14, 62,164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 75,138, 94,189,
-151,155, 65, 62,185,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 23, 85,145,189, 35,224,124, 62,142, 17,245, 63,
- 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,208,112, 8, 3, 23, 1, 0, 0, 9, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,135, 84,145,186, 15,224,124, 59,
- 58,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0,199, 84,145,187,251,223,124, 60,188, 71, 2, 63, 0, 0,200, 65,
- 0, 0, 64, 63, 0, 0, 0, 0,152,127, 35,188, 8, 62, 14, 61,220,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0,
- 7, 85,145,188, 22,224,124, 61,126,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,219, 20,227,188, 17,143,197, 61,
- 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,172,127, 35,189, 15, 62, 14, 62,164,172,187, 63, 0, 0,150, 66,
- 0, 0,128, 62, 0, 0, 0, 0, 51,138, 94,189,148,155, 65, 62,184,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0,
- 9, 85,145,189, 30,224,124, 62,141, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,
-216,113, 8, 3, 23, 1, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0, 0, 0, 7, 85,145,186,255,223,124, 59, 58,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0, 7, 85,145,187,
-191,223,124, 60,188, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,168,127, 35,188,255, 61, 14, 61,220,123, 65, 63,
- 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, 23, 85,145,188, 15,224,124, 61,126,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63,
- 0, 0, 0, 0,219, 20,227,188, 15,143,197, 61, 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,176,127, 35,189,
- 11, 62, 14, 62,164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 67,138, 94,189,147,155, 65, 62,184,177,216, 63,
- 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 19, 85,145,189, 27,224,124, 62,141, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0, 80,240,163, 2, 23, 1, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 7, 84,145,186,255,222,124, 59, 57,146,131, 62, 0, 0, 72, 65,
- 0, 0, 96, 63, 0, 0, 0, 0, 7, 85,145,187,191,223,124, 60,187, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,
-136,127, 35,188,239, 61, 14, 61,219,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0, 7, 85,145,188,239,223,124, 61,
-126,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,203, 20,227,188,255,142,197, 61, 81, 2,158, 63, 0, 0,122, 66,
- 0, 0,192, 62, 0, 0, 0, 0,168,127, 35,189, 3, 62, 14, 62,164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0,
- 59,138, 94,189,137,155, 65, 62,184,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0, 23, 85,145,189, 17,224,124, 62,
-142, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0, 88,241,163, 2, 23, 1, 0, 0,
- 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,111, 84,145,186,
-255,223,124, 59, 57,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0,173, 84,145,187,255,223,124, 60,188, 71, 2, 63,
- 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0,116,127, 35,188,255, 61, 14, 61,221,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63,
- 0, 0, 0, 0,245, 84,145,188, 15,224,124, 61,127,101,127, 63, 0, 0, 72, 66, 0, 0, 0, 63, 0, 0, 0, 0,199, 20,227,188,
- 13,143,197, 61, 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,163,127, 35,189, 13, 62, 14, 62,164,172,187, 63,
- 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 47,138, 94,189,147,155, 65, 62,185,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62,
- 0, 0, 0, 0, 6, 85,145,189, 28,224,124, 62,142, 17,245, 63, 0, 0,200, 66, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
-216, 0, 0, 0, 96,242,163, 2, 23, 1, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0, 7, 82,145,186,127,223,124, 59, 57,146,131, 62, 0, 0, 72, 65, 0, 0, 96, 63, 0, 0, 0, 0,
-135, 84,145,187,223,223,124, 60,186, 71, 2, 63, 0, 0,200, 65, 0, 0, 64, 63, 0, 0, 0, 0, 8,127, 35,188,247, 61, 14, 61,
-218,123, 65, 63, 0, 0, 22, 66, 0, 0, 32, 63, 0, 0, 0, 0,199, 84,145,188, 7,224,124, 61,125,101,127, 63, 0, 0, 72, 66,
- 0, 0, 0, 63, 0, 0, 0, 0,139, 20,227,188, 7,143,197, 61, 81, 2,158, 63, 0, 0,122, 66, 0, 0,192, 62, 0, 0, 0, 0,
-136,127, 35,189, 11, 62, 14, 62,164,172,187, 63, 0, 0,150, 66, 0, 0,128, 62, 0, 0, 0, 0, 27,138, 94,189,147,155, 65, 62,
-183,177,216, 63, 0, 0,175, 66, 0, 0, 0, 62, 0, 0, 0, 0,247, 84,145,189, 28,224,124, 62,140, 17,245, 63, 0, 0,200, 66,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 76, 0, 0, 0, 80,116,164, 2, 96, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 19, 0, 0, 0, 23, 0, 0, 0, 80, 97,114,116,105, 99,108,101, 83,121,115,116,101,109, 32, 49, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8,127,152, 2,120, 88,169, 2, 4, 0, 0, 0, 4, 0, 0, 0,
- 1, 0, 0, 0, 2, 0, 0, 0, 79, 66, 0, 0, 80, 3, 0, 0,120, 3,131, 2,102, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 32,170,161, 2, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66,116,101,120,116,117,114,101, 0,114,101,118,105,101,119, 46, 48, 48, 53,
- 0, 0, 0, 0, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,104,202,152, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,144,174, 63, 0, 61, 16,183,188,
- 21,204,103,191, 48,234,228, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-153, 39,155, 64,153, 39,155, 64,153, 39,155, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,218, 15,201, 63, 0, 0,192, 37,
-255,255,255, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,153, 39,155, 64,152, 39, 27, 38,102,187,232,166, 0, 0, 0, 0,
-102,187,232, 38,157,134,196, 52,153, 39,155, 64, 0, 0, 0, 0,154, 39, 27, 38,153, 39,155,192,157,134,196, 52, 0, 0, 0, 0,
- 61, 16,183,188, 21,204,103,191, 48,234,228, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 25, 50, 83, 62, 27, 50,211, 35, 23, 50,211,163, 0, 0, 0, 0,
- 27, 50,211,163, 25, 50, 83, 62, 59,119,189, 38, 0, 0, 0, 0, 0, 24, 44,173, 0,179,115,175, 25, 50, 83, 62, 0, 0, 0, 0,
-236,251, 33, 59, 88, 37, 40, 59,118, 71,238, 63, 0, 0,128, 63, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 0, 1, 0, 2, 0,
- 0, 0, 0, 0, 79, 66, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,100, 0, 0, 0, 0, 0, 0, 0,
- 56,180,150,201, 0, 0,128, 63, 10,215, 35, 61, 0, 0,128, 63,205,204,204, 62,205,204,204, 61, 0, 0, 0, 0, 4, 0, 1, 1,
- 1, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 4, 0, 0, 0,144,174, 63, 0, 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 77, 65, 0, 0, 68, 2, 0, 0, 56,134,165, 2, 39, 0, 0, 0, 1, 0, 0, 0,104,137,165, 2, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 77, 65, 99,104,101, 99,107,101,114,100, 97,114,107, 0, 0, 0, 97,116,101,114,105, 97, 0, 0,
- 2, 0, 0, 0, 66, 1, 0, 0, 0, 0, 0, 0, 3, 0, 1, 0,116, 1,221, 61,200,251,220, 61,200,251,220, 61, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 63,154,153, 89, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,205,204, 76, 63, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 63, 0, 0, 0, 0, 0, 0,160, 63, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,128, 63, 2, 0, 2, 0, 1, 0, 0, 6, 0, 0,128, 63, 0, 0,128, 63, 18, 0, 18, 0, 10,215,163, 59,
- 10,215,163, 59, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 64, 1, 3, 0, 64, 1, 1, 0, 4, 0, 12, 0, 4, 0,
- 0, 0, 0, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0,128, 64, 0, 0, 0, 63,205,204,204, 61, 0, 0, 0, 63,205,204,204, 61,
-205,204,204, 61, 0, 0,128, 63, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63,176,136,165, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
-205,204, 76, 63,205,204, 76, 63,205,204, 76, 63,205,204, 76, 61,205,204,204, 61,102,102,166, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
-136, 0, 0, 0,176,136,165, 2, 30, 0, 0, 0, 1, 0, 0, 0, 16, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,168, 10,131, 2,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,192, 63, 1, 0,192, 63, 1, 0,192, 63, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23,183,209, 56,184,177,209, 56,184,177,209, 56, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 77, 65, 0, 0, 68, 2, 0, 0,
-104,137,165, 2, 39, 0, 0, 0, 1, 0, 0, 0,152,140,165, 2, 56,134,165, 2, 0, 0, 0, 0, 0, 0, 0, 0, 77, 65, 99,104,
-101, 99,107,101,114,108,105,103,104,116, 0, 0, 0, 97,116,101,114,105, 0, 0, 2, 0, 0, 0, 67, 1, 0, 0, 0, 0, 0, 0,
- 3, 0, 1, 0,188, 65,157, 62,178, 61,157, 62,178, 61,157, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,154,153, 89, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,205,204, 76, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,160, 63, 0, 0, 0, 0, 0, 0,160, 63, 0, 0, 0, 0, 0, 0, 0, 0,205,204,204, 61, 2, 0, 2, 0,
- 1, 0, 0, 6, 0, 0,128, 63, 0, 0,128, 63, 18, 0, 18, 0, 10,215,163, 59, 10,215,163, 59, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0, 0, 0, 3, 0, 64, 1, 3, 0, 64, 1, 1, 0, 4, 0, 12, 0, 4, 0, 0, 0, 0, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,
- 0, 0,128, 64, 0, 0, 0, 63,205,204,204, 61, 0, 0, 0, 63,205,204,204, 61,205,204,204, 61, 0, 0,128, 63, 16, 8, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 64,192, 16, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 63,205,204, 76, 63,205,204, 76, 63,
-205,204, 76, 61,205,204,204, 61,102,102,166, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,136, 0, 0, 0, 64,192, 16, 3, 30, 0, 0, 0,
- 1, 0, 0, 0, 16, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,168, 10,131, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 23,183,209, 56,184,177,209, 56,184,177,209, 56, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 63,
- 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 77, 65, 0, 0, 68, 2, 0, 0,152,140,165, 2, 39, 0, 0, 0, 1, 0, 0, 0,
- 0,147,165, 2,104,137,165, 2, 0, 0, 0, 0, 0, 0, 0, 0, 77, 65,112,114,101,118,105,101,119, 0, 0, 97,116,101,114,105,
- 97,108, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 68, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,128, 63, 61,232, 54, 63,
-184,161, 23, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,188,248, 68, 62, 0, 0,128, 63,
-205,204, 76, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,198,121,130, 63, 0, 0,160, 63, 0, 0, 0, 0,
- 0, 0,160, 63, 0, 0, 0, 0, 0, 0, 0, 0,205,204,204, 61, 2, 0, 2, 0, 50, 0, 0, 6, 0, 0,128, 63, 0, 0,128, 63,
- 18, 0, 18, 0, 10,215,163, 59, 10,215,163, 59, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 17, 3, 3, 0, 17, 3,
- 1, 0, 4, 0, 12, 0, 4, 0, 0, 0, 0, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0,128, 64, 0, 0, 0, 63,205,204,204, 61,
- 0, 0, 0, 63,205,204,204, 61,205,204,204, 61, 0, 0,128, 63, 16, 8, 1, 0,200,143,165, 2, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,104,247,161, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-216, 59,153, 2, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 63,205,204, 76, 63,205,204, 76, 63,205,204, 76, 61,205,204,204, 61,102,102,166, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65,136, 0, 0, 0,104,247,161, 2, 30, 0, 0, 0, 1, 0, 0, 0, 16, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,112, 9,131, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0,
- 68, 65, 84, 65, 8, 3, 0, 0,200,143,165, 2, 33, 0, 0, 0, 1, 0, 0, 0, 0, 0, 2, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,245, 40,220, 62, 0, 0, 0, 0,164,112,125, 63, 0, 0,128, 63,106,214, 24, 63,
- 0, 0,128, 63, 0, 0,128, 63, 1, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63,
- 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63,
- 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63,
- 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63,
- 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63,
- 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63,
- 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63,
- 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63,
- 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63,
- 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63,
- 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 13, 64,183,208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,193, 19,239,220,193, 54,239,215,
+ 65, 60, 9, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,191,103,251, 67,191, 24, 27,164, 64, 3,136, 37,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,190,197,143, 31, 63, 59,184,209, 63, 15, 80,138, 0, 0, 0, 0,191, 64, 66, 57,
+ 61,210,119,132,191, 38,249,118, 0, 0, 0, 0,191, 9, 43, 37,191, 44, 15, 35, 63, 2,212,114, 0, 0, 0, 0,193, 19,239,220,
+193, 54,239,215, 65, 60, 9, 42, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0,180, 0, 0, 1, 52, 32, 0, 1, 0, 0, 0, 0, 38,128, 0, 1,
+ 63,128, 0, 0,179, 0, 0, 1, 0, 0, 0, 0,179, 0, 0, 1,179,128, 0, 0, 63,128, 0, 1, 0, 0, 0, 0, 53,128, 0, 0,
+170, 0, 0, 1, 42, 32, 0, 1, 63,128, 0, 0,190,197,143, 31,191, 64, 66, 56,191, 9, 43, 35, 0, 0, 0, 0, 63, 15, 80,139,
+191, 38,249,117, 63, 2,212,112, 0, 0, 0, 0,191, 59,184,208,189,210,119,142, 63, 44, 15, 35, 0, 0, 0, 0,193, 0,135,195,
+190,148,252,127,193, 48,180, 8, 63,128, 0, 0, 0, 0, 0, 2, 20, 0, 0, 0, 0, 0, 0, 68, 0, 5, 0, 1, 0, 0, 0, 0,
+ 79, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,100, 0, 0, 0, 0,201,150,180, 56,
+ 63,128, 0, 0, 61, 35,215, 10, 63,128, 0, 0, 62,204,204,205, 61,204,204,205, 0, 0, 0, 0, 61,117,194,143, 0, 0, 0, 0,
+ 4, 0, 0, 0, 1, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 1, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66,
+ 0, 0, 3, 68, 7,159,204, 32, 0, 0, 0,109, 0, 0, 0, 1, 7,159,208, 32, 7,159,200, 32, 0, 0, 0, 0, 0, 0, 0, 0,
+ 79, 66, 76, 97,109,112, 46, 48, 48, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 64,186,224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192,164, 99,104,193, 51,244,239, 64, 19,110,188, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,103, 90, 85,190,186, 45,254, 63,128,209,115, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 62,255,247,136, 63, 74, 39, 37, 62,182, 26,138, 0, 0, 0, 0,191, 44, 21,164, 61,194, 67, 28, 63, 59,248,176,
+ 0, 0, 0, 0, 63, 11,203,251,191, 27, 45,217, 63, 20, 7, 47, 0, 0, 0, 0,192,164, 99,104,193, 51,244,239, 64, 19,110,188,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 63,128, 0, 0, 63,128, 0, 0,178,255,255,254, 51,128, 0, 1, 0, 0, 0, 0,167, 64, 0, 2, 63,128, 0, 0, 51, 0, 0, 1,
+ 0, 0, 0, 0,179,192, 0, 2, 51,128, 0, 1, 63,128, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 63,128, 0, 0, 62,255,247,137,191, 44, 21,165, 63, 11,203,251, 0, 0, 0, 0, 62,182, 26,139, 63, 59,248,178, 63, 20, 7, 45,
+ 0, 0, 0, 0,191, 74, 39, 36,189,194, 67, 18, 63, 27, 45,217, 0, 0, 0, 0, 64, 91, 24, 96,192,108, 50,226, 63,219, 9,101,
+ 63,128, 0, 0, 0, 0, 0, 2, 20, 0, 0, 0, 0, 0, 0, 68, 0, 5, 0, 1, 0, 0, 0, 0, 79, 66, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,100, 0, 0, 0, 0,201,150,180, 56, 63,128, 0, 0, 61, 35,215, 10,
+ 63,128, 0, 0, 62,204,204,205, 61,204,204,205, 0, 0, 0, 0, 61,117,194,143, 0, 0, 0, 0, 4, 0, 0, 0, 1, 0, 0, 0,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 64, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 0, 0, 3, 68, 7,159,208, 32,
+ 0, 0, 0,109, 0, 0, 0, 1, 7,159,212, 32, 7,159,204, 32, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 76, 97,109,112, 46, 48,
+ 48, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 64,189,240, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 63,188, 75,145,193,107,197, 44, 64, 81,147, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 63,201, 15,218, 37,128, 0, 0, 37,127,255,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0,
+ 37,127,255,255,165,128, 0, 0, 0, 0, 0, 0, 37,127,255,255, 51,162, 33,105, 63,128, 0, 0, 0, 0, 0, 0, 37,128, 0, 0,
+191,128, 0, 0, 51,162, 33,105, 0, 0, 0, 0, 63,188, 75,145,193,107,197, 44, 64, 81,147, 5, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,127,255,254,
+ 53,107,197, 44,180, 81,147, 4, 0, 0, 0, 0, 37,127,255,253, 63,128, 0, 0, 48,136, 90, 64, 0, 0, 0, 0,165,127,255,254,
+155,107,197, 44, 63,128, 0, 0, 0, 0, 0, 0, 51,255,255,254,181,255,255,255, 52,127,255,254, 63,128, 0, 0, 63,128, 0, 0,
+178, 23, 25, 45,179, 75,199,107, 0, 0, 0, 0,165,128, 0, 1, 63,128, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0,177,108,127, 0,
+ 50, 29, 9,206, 63,128, 0, 0, 0, 0, 0, 0,191,189,159, 32,191,188,164, 47,192,153,188,150, 63,128, 0, 0, 0, 0, 0, 32,
+ 16, 0, 0, 0, 0, 0, 0, 68, 0, 5, 0, 1, 0, 0, 0, 0, 79, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
+ 0, 0, 0, 1, 0, 0, 0,100, 0, 0, 0, 0,201,150,180, 56, 63,128, 0, 0, 61, 35,215, 10, 63,128, 0, 0, 62,204,204,205,
+ 61,204,204,205, 0, 0, 0, 0, 61,117,194,143, 0, 0, 0, 0, 4, 0, 0, 0, 1, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 1, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 0, 0, 3, 68, 7,159,212, 32, 0, 0, 0,109, 0, 0, 0, 1,
+ 7,159,216, 32, 7,159,208, 32, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 99,104,101, 99,107,101,114,115, 0, 0,108, 97,110,101,
+ 46, 48, 48, 51, 0, 0, 0, 0, 0, 1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 7, 28,231, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 65,131, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 64,199,128,
+ 60,102,131, 0, 64,164,112, 14, 63,229,211, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 65, 34,159,178, 65, 34,159,178, 65, 34,159,177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+128, 0, 0, 0,178, 89,250,166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 34,159,178,180, 10,120,151, 0, 0, 0, 0,
+ 0, 0, 0, 0, 52, 10,120,151, 65, 34,159,178, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 34,159,177,
+ 0, 0, 0, 0, 60,102,131, 0, 64,164,112, 14, 63,229,211, 24, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 61,201,126,231, 48,171,145,219, 30,247,120,240,
+ 0, 0, 0, 0,164,217,209, 65, 49,255, 57, 51, 61,201,126,232, 0, 0, 0, 0, 48,172, 66,235,189,201,126,231, 49,251,201, 70,
+ 0, 0, 0, 0,187, 29,136, 18,191,189,200,203, 58, 9,139,180, 63,128, 0, 0, 0, 0, 0, 33, 0, 0, 0, 1, 0, 0, 0, 68,
+ 0, 1, 0, 2, 0, 0, 0, 0, 79, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,100,
+ 0, 0, 0, 0,201,150,180, 56, 63,128, 0, 0, 61, 35,215, 10, 63,128, 0, 0, 62,204,204,205, 61,204,204,205, 0, 0, 0, 0,
+ 61,117,194,143, 0, 0, 0, 0, 4, 0, 1, 1, 1, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 63,128, 0, 0, 0, 1, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 7, 26, 8, 80, 7, 26, 13,176, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 4, 13, 64,199,128, 0, 0, 0, 0, 0, 0, 0, 1, 7,160, 0, 32, 0, 0, 79, 66,
+ 0, 0, 3, 68, 7,159,216, 32, 0, 0, 0,109, 0, 0, 0, 1, 7,159,220, 32, 7,159,212, 32, 0, 0, 0, 0, 0, 0, 0, 0,
+ 79, 66,112,114,101,118,105,101,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 26, 31,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 65,154, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 64,199,176,189, 7, 82,100,191,103,204, 21, 63,230,165,241, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,155, 39,153, 64,155, 39,153, 64,155, 39,153,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,201, 15,218, 37,192, 0, 0, 36,255,255,255, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 64,155, 39,153, 38, 27, 39,152,166,232,187,102, 0, 0, 0, 0, 38,232,187,102, 52,196,134,157, 64,155, 39,153,
+ 0, 0, 0, 0, 38, 27, 39,154,192,155, 39,153, 52,196,134,157, 0, 0, 0, 0,189, 7, 82,100,191,103,204, 21, 63,230,165,241,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,153, 34, 33,106, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,153, 34, 33,106, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,179,128, 0, 0, 0, 0, 0, 0,
+ 63,128, 0, 0, 62, 83, 50, 25, 36,158,101,147, 35,211, 50, 27, 0, 0, 0, 0,164,158,101,147, 62, 83, 50, 25, 38,174, 59,158,
+ 0, 0, 0, 0,173,204, 94, 0,175, 96, 79,158, 62, 83, 50, 25, 0, 0, 0, 0, 59,153, 62,135,185,110, 94,217, 63,238, 71,118,
+ 63,128, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 68, 0, 1, 0, 2, 0, 0, 0, 0, 79, 66, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,100, 0, 0, 0, 0,201,150,180, 56, 63,128, 0, 0, 61, 35,215, 10,
+ 63,128, 0, 0, 62,204,204,205, 61,204,204,205, 0, 0, 0, 0, 61,117,194,143, 0, 0, 0, 0, 4, 0, 1, 1, 1, 0, 0, 0,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 1, 64, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 26, 19,192, 7, 26, 25,160, 0, 0, 0, 25, 0, 0, 0, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 4, 13, 64,199,176,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 79, 66, 0, 0, 3, 68, 7,159,220, 32, 0, 0, 0,109, 0, 0, 0, 1,
+ 7,159,224, 32, 7,159,216, 32, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66,112,114,101,118,105,101,119, 46, 48, 48, 50, 0, 46, 48,
+ 48, 49, 0, 0, 0, 0, 0, 0, 0, 1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 65,104, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 64,200, 16, 13, 64,200, 16, 13, 64,199,224,
+191,213,187,242, 63,134,145,194, 64, 35,100,254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 65, 28, 0,243, 65, 28, 0,246, 65, 28, 0,243, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,135,110, 48,
+ 62, 59,169,180,191, 1,115,138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 6, 49,198,192,148,154,115,191,227,113, 3,
+ 0, 0, 0, 0, 64,106,250,159, 64, 91,207,189, 65, 5,170, 80, 0, 0, 0, 0,192, 86,151, 46,192,251, 94,125, 64,150,127,188,
+ 0, 0, 0, 0,191,213,187,242, 63,134,145,194, 64, 35,100,254, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 1,167, 0, 0, 1,179,128, 0, 1,
+ 0, 0, 0, 0,179, 0, 0, 1, 63,128, 0, 0, 51, 0, 0, 1, 0, 0, 0, 0,166,128, 0, 1, 51, 0, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 61,180,174,143, 61, 30, 48,160,189, 16,118,223,
+ 0, 0, 0, 0,188,153, 29,162, 61,179,248, 38, 61, 74,162,115, 0, 0, 0, 0, 61, 72, 21, 15,189, 19,250,160, 61,169, 57, 88,
+ 0, 0, 0, 0, 63, 50,107, 4,190,204, 46, 88, 63, 79,206,177, 63,128, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 68,
+ 0, 1, 0, 2, 0, 0, 0, 0, 79, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,100,
+ 0, 0, 0, 0,201,150,180, 56, 63,128, 0, 0, 61, 35,215, 10, 63,128, 0, 0, 62,204,204,205, 61,204,204,205, 0, 0, 0, 0,
+ 61,117,194,143, 0, 0, 0, 0, 4, 0, 1, 1, 1, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 63,128, 0, 0, 0, 1, 64, 0, 0, 0, 0, 0, 1, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 4, 13, 64,199,224, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 68, 65, 84, 65,
+ 0, 0, 0, 68, 13, 64,200, 16, 0, 0, 0, 78, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 31,
+ 83,117, 98,115,117,114,102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 0, 0, 3, 68, 7,159,224, 32,
+ 0, 0, 0,109, 0, 0, 0, 1, 7,159,228, 32, 7,159,220, 32, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66,112,114,101,118,105,101,
+119, 46, 48, 48, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 7, 22,191, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 65,148,176, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 13, 64,200,128,187,203,194, 16, 63, 45, 89,155, 63,230,153,244, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 72,135, 56, 63, 72,135, 56, 63, 72,135, 56, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 72,135, 56,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 72,135, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 63, 72,135, 56, 0, 0, 0, 0,187,203,194, 16, 63, 45, 89,155, 63,230,153,244, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47,200,135, 57,
+178,200,135, 57, 63,128, 0, 1, 0, 0, 0, 0,176,192, 0, 0, 51,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,163,104,144,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 52, 33, 50, 51,206,250,252, 63,163,104,144, 0, 0, 0, 0,173,202,240, 60,
+191,163,104,144, 51,204, 63,183, 0, 0, 0, 0,187,173, 93,105,193, 88,176,172,186,118, 52, 95, 63,128, 0, 0, 0, 0, 0, 2,
+ 4, 0, 0, 0, 0, 0, 0, 68, 0, 1, 0, 2, 0, 0, 0, 0, 79, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
+ 0, 0, 0, 1, 0, 0, 0,100, 0, 0, 0, 0,201,150,180, 56, 63,128, 0, 0, 61, 35,215, 10, 63,128, 0, 0, 62,204,204,205,
+ 61,204,204,205, 0, 0, 0, 0, 61,117,194,143, 0, 0, 0, 0, 4, 0, 1, 1, 1, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 1, 64, 0, 0, 0, 0, 0, 0, 32, 0, 0, 63,128, 0, 0,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 7, 29,251, 48, 7, 30, 0,144, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 4, 13, 64,200,128, 0, 0, 0, 0, 0, 0, 0, 1,
+ 0, 0, 0, 0, 0, 0, 79, 66, 0, 0, 3, 68, 7,159,228, 32, 0, 0, 0,109, 0, 0, 0, 1, 7,159,232, 32, 7,159,224, 32,
+ 0, 0, 0, 0, 0, 0, 0, 0, 79, 66,112,114,101,118,105,101,119, 46, 48, 48, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 13, 65,148,176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 64,200,176, 58, 10, 31, 0, 63,236, 94, 59,
+ 63,231, 84,236, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,110,188, 91,
+ 63,110,188, 91, 63,110,188, 91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,201, 15,218,128, 0, 0, 0,128, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,110,188, 91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 51,151, 50, 90, 63,110,188, 91, 0, 0, 0, 0, 0, 0, 0, 0,191,110,188, 91, 51,151, 50, 90, 0, 0, 0, 0, 58, 10, 31, 0,
+ 63,236, 94, 59, 63,231, 84,236, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 63,127,255,254,179, 25, 53,226, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 1, 0, 0, 0, 0,174,128, 0, 1,
+179,255,255,254, 39,153, 53,226, 63,128, 0, 0, 63,137, 65,160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22,123, 29,164,
+ 63,137, 65,160, 40, 19, 46,157, 0, 0, 0, 0, 45, 14,127,248,176,150,195,159, 63,137, 65,161, 0, 0, 0, 0,188, 63, 80, 29,
+187,226, 95, 62, 65, 74, 19, 87, 63,128, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 68, 0, 1, 0, 2, 0, 0, 0, 0,
+ 79, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,100, 0, 0, 0, 0,201,150,180, 56,
+ 63,128, 0, 0, 61, 35,215, 10, 63,128, 0, 0, 62,204,204,205, 61,204,204,205, 0, 0, 0, 0, 61,117,194,143, 0, 0, 0, 0,
+ 4, 0, 1, 1, 1, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0,
+ 0, 1, 64, 0, 0, 0, 0, 0, 0, 32, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+ 0, 0, 0, 4, 13, 64,200,176, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 79, 66, 0, 0, 3, 68, 7,159,232, 32,
+ 0, 0, 0,109, 0, 0, 0, 1, 7,159,236, 32, 7,159,228, 32, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66,112,114,101,118,105,101,
+119, 46, 48, 48, 53, 0, 48, 48, 51, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 64,165, 32, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,189,195,155,128, 64,188,145, 20, 65, 88,220, 94, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 63,134,180,221, 37,141,190, 48, 35, 57, 55,253, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0,
+ 35, 57, 55,253,165,141,190, 48, 0, 0, 0, 0, 37,112,128,219, 62,253,177, 52, 63, 94, 93, 94, 0, 0, 0, 0, 37, 22,133, 52,
+191, 94, 93, 94, 62,253,177, 52, 0, 0, 0, 0,189,195,155,128, 64,188,145, 20, 65, 88,220, 94, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0,
+ 25,127,255,255,153,128, 0, 1, 0, 0, 0, 0,176, 0, 0, 0, 63,128, 0, 0, 10, 0, 0, 1, 0, 0, 0, 0,176, 0, 0, 5,
+ 51, 0, 0, 1, 63,128, 0, 1, 0, 0, 0, 0, 50, 0, 0, 0, 12, 0, 0, 0,140, 0, 0, 1, 63,128, 0, 0, 63,128, 0, 0,
+ 37,112,128,219, 37, 22,133, 53, 0, 0, 0, 0,174,231, 90, 80, 63, 94, 93, 94, 62,253,177, 52, 0, 0, 0, 0,172,239, 68, 0,
+190,253,177, 50, 63, 94, 93, 95, 0, 0, 0, 0, 61,174, 98,150,193,144,101, 85, 64,253,124,196, 63,128, 0, 0, 0, 0, 0, 64,
+ 16, 0, 0, 0, 0, 0, 0, 68, 0, 5, 0, 1, 0, 0, 0, 0, 79, 66, 0, 0, 0, 7, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
+ 0, 0, 0, 1, 0, 0, 0,100, 0, 0, 0, 0,201,150,180, 56, 63,128, 0, 0, 61, 35,215, 10, 63,128, 0, 0, 62,204,204,205,
+ 61,204,204,205, 0, 0, 0, 0, 61,117,194,143, 0, 0, 0, 0, 4, 0, 0, 0, 1, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 1, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 0, 0, 3, 68, 7,159,236, 32, 0, 0, 0,109, 0, 0, 0, 1,
+ 7,159,240, 32, 7,159,232, 32, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66,112,114,101,118,105,101,119, 46, 48, 48, 54, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 65,169, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 64,200,224,
+190,252, 52, 94, 65,228,101,174, 65, 17,116,141, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 66, 30,239,235, 66, 30,239,236, 66, 30,239,235, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 95,174,138,
+ 37,123,132, 98,165, 87, 56, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 30,239,235,168, 5,158,105,168, 28, 39,108,
+ 0, 0, 0, 0, 40, 77,129,212, 65,204, 15, 66, 65,243,186,158, 0, 0, 0, 0,165, 13, 89, 55,193,243,186,156, 65,204, 15, 65,
+ 0, 0, 0, 0,190,252, 52, 94, 65,228,101,174, 65, 17,116,141, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 25, 80, 0, 0, 25,120, 0, 2,
+ 0, 0, 0, 0, 24,216, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,153, 12, 0, 1,179, 0, 0, 1, 63,128, 0, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 60,206, 43,101, 35, 5, 74, 25,159,183, 90,141,
+ 0, 0, 0, 0,162,202,143, 41, 60,158, 20,101, 60,132, 89,193, 0, 0, 0, 0, 34,173, 83,188,188,132, 89,192, 60,158, 20,103,
+ 0, 0, 0, 0, 60, 70,215, 11,191, 67, 43, 61, 63, 31,241,185, 63,128, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 68,
+ 0, 1, 0, 2, 0, 0, 0, 0, 79, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,100,
+ 0, 0, 0, 0,201,150,180, 56, 63,128, 0, 0, 61, 35,215, 10, 63,128, 0, 0, 62,204,204,205, 61,204,204,205, 0, 0, 0, 0,
+ 61,117,194,143, 0, 0, 0, 0, 4, 0, 1, 1, 1, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 63,128, 0, 0, 0, 1, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 4, 13, 64,200,224, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 79, 66,
+ 0, 0, 3, 68, 7,159,240, 32, 0, 0, 0,109, 0, 0, 0, 1, 7,159,244, 32, 7,159,236, 32, 0, 0, 0, 0, 0, 0, 0, 0,
+ 79, 66,112,114,101,118,105,101,119, 99,117, 98,101, 0,117, 98,101, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 65,176,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 64,201, 16, 59, 88,253,128, 63,160,118,220, 64, 37, 15, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 68, 88, 84, 64, 68, 88, 84, 64, 68, 88, 83,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62,237,190, 1,190,217,230,108, 63, 52,151, 20, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 64, 8, 38, 67, 63,231,228,191, 63,162, 31,186, 0, 0, 0, 0,192, 13,118, 35, 63,220, 61, 2, 63,160, 44, 31,
+ 0, 0, 0, 0, 60,234, 52,166,191,227,223,102, 64, 31,229, 55, 0, 0, 0, 0, 59, 88,253,128, 63,160,118,220, 64, 37, 15, 0,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 63,128, 0, 0, 63,128, 0, 0,178,155,255,255, 49, 64, 0, 2, 0, 0, 0, 0,178,211,255,254, 63,127,255,254,164,159, 0, 0,
+ 0, 0, 0, 0, 51, 2, 0, 1, 50,255,255,255, 63,128, 0, 1, 0, 0, 0, 0, 51,234, 0, 0,179,255,255,254, 37,175,128, 1,
+ 63,128, 0, 0, 62,103,115, 10,190,112,122,201, 59, 71, 17,255, 0, 0, 0, 0, 62, 9,205,116, 62, 8, 36,205, 62,135,232,136,
+ 0, 0, 0, 0,190, 69, 27, 1,190, 59, 50,224, 62, 65,176, 25, 0, 0, 0, 0,192, 16,176,110,192, 9, 71,158, 63,244, 90,115,
+ 63,128, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 68, 0, 1, 0, 2, 0, 0, 0, 0, 79, 66, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,100, 0, 0, 0, 0,201,150,180, 56, 63,128, 0, 0, 61, 35,215, 10,
+ 63,128, 0, 0, 62,204,204,205, 61,204,204,205, 0, 0, 0, 0, 61,117,194,143, 0, 0, 0, 0, 4, 0, 1, 1, 1, 0, 0, 0,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 1, 64, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 4, 13, 64,201, 16,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 79, 66, 0, 0, 3, 68, 7,159,244, 32, 0, 0, 0,109, 0, 0, 0, 1,
+ 7,159,248, 32, 7,159,240, 32, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66,112,114,101,118,105,101,119,104, 97,105,114, 0,108, 97,
+110,101, 0, 0, 0, 0, 0, 0, 0, 1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 65,141,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 65, 97,208, 13, 65, 97,208, 13, 64,201, 64,
+ 63,200, 92, 86, 63,227,205, 7,189, 9,199,149, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 64, 47,126,234, 64, 47,126,234, 64, 47,126,236, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 2, 80,225,
+191, 15,211, 5, 62, 18,219, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 18,254,224, 62,169,209, 23, 63,186,251, 27,
+ 0, 0, 0, 0,191,133,254, 71, 64, 17, 40,207, 63,144,194,229, 0, 0, 0, 0,191,137, 38, 78,191,192,162, 48, 64, 1,176,125,
+ 0, 0, 0, 0, 63,200, 92, 86, 63,227,205, 7,189, 9,199,149, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 1,179, 0, 0, 1,179,128, 0, 1,
+ 0, 0, 0, 0, 50,128, 0, 0, 63,128, 0, 1, 51,128, 0, 1, 0, 0, 0, 0,179,128, 0, 1,179, 0, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 40, 12, 0, 2,180, 0, 0, 1,180, 44, 0, 1, 63,128, 0, 0, 62,156,100,244,190, 14,143,135,190, 17,235, 52,
+ 0, 0, 0, 0, 62, 70,239,175, 62, 26, 4,102, 62,137,251, 72, 0, 0, 0, 0,189, 52,172,174,190,154,112,211, 62, 76,243, 67,
+ 0, 0, 0, 0,191, 36, 56,149,192, 66, 98,139, 64, 68, 5,168, 63,128, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 68,
+ 0, 1, 0, 2, 0, 0, 0, 0, 79, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,100,
+ 0, 0, 0, 0,201,150,180, 56, 63,128, 0, 0, 61, 35,215, 10, 63,128, 0, 0, 62,204,204,205, 61,204,204,205, 0, 0, 0, 0,
+ 61,117,194,143, 0, 0, 0, 0, 4, 0, 1, 1, 1, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 63,128, 0, 0, 0, 1, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 64,202, 32, 13, 64,202, 32,
+ 13, 64,201,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 4, 13, 64,201, 64, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 68, 65, 84, 65,
+ 0, 0, 0,128, 13, 64,201,112, 0, 0, 0,111, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61,204,204,205, 62, 76,204,205, 60,163,215, 10, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 1, 64, 13, 64,202, 32, 0, 0, 1, 42,
+ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 7,161, 74, 32, 12,117, 80, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62,156,100,244,190, 14,143,134,190, 17,235, 52,
+ 0, 0, 0, 0, 61, 52,172,172, 62,154,112,211,190, 76,243, 69, 0, 0, 0, 0, 62, 70,239,176, 62, 26, 4,102, 62,137,251, 73,
+ 0, 0, 0, 0,191, 12,211,188,190,160,176,198, 63, 22,156, 56, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 2, 17,
+ 0, 0, 0,150, 0, 0, 0, 0, 0, 0, 0,150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 65, 97,144, 68, 65, 84, 65, 0, 0,114,216, 12,117, 80, 32, 0, 0, 1, 40, 0, 0, 0,150, 0, 0, 0, 0,192, 17,135, 20,
+192, 97,121, 36, 63,141, 32,112,191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,200,190, 61,137,199,
+191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 13, 64,203,144, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 32, 96, 77, 62,160,201,185, 63, 6, 3,160,190,248, 34, 11, 60,185, 53,206,
+ 61,178,197,192, 63, 53,184,174,190,162,172,223, 62,224,136,109,191, 61,173,142, 60, 10, 96,180, 61,163,196,200, 63, 99,182, 78,
+ 60,180,242,165, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 62,150,112,248,
+ 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+192, 7, 46,111,192, 60, 26,143, 63,207,147, 28,191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,200,
+190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 13, 64,204,144, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,190,229,121, 6,191, 41, 50,108,191, 7,152,136,190,146,100,156,
+191, 25,141,146, 62,142, 92, 39, 63, 18,104,212,190,105,105,227, 62, 96,156,113,191, 69,226,137, 61, 17,247,147, 62, 44,172, 51,
+ 63, 54,125, 17, 61,169,195, 69, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0,
+ 62,245, 63,144, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
+ 0, 0, 0, 0,189,174,103,224,192, 17, 88, 60, 64, 76, 35,230,191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234,
+190,183,206,201,190, 61,137,200,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 13, 64,205,144,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62,155,160,101, 62,152, 87, 59,191, 84,199,118,
+ 62,183, 89, 86, 62,231,103,118,189,177, 47,110,191, 4, 8,155, 62,199, 60,100,189,177, 40,197, 62, 46, 14, 2, 62, 39, 96,102,
+ 61,242,119,101, 62,146,168,189, 62,221, 9, 55, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0,
+ 63,128, 0, 0, 61, 87, 36,135, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0,192,131,102, 75, 63, 26,241,196, 64, 76,198,140,191, 55, 81,190,191, 71,243,107, 63, 42,237, 98,
+ 62,214,163,235,190,183,206,198,190, 61,137,206,191, 80, 38,157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0,
+ 13, 64,206,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 39, 80, 49,190,218, 26,171,
+ 63, 16,118, 89,190,138, 72,130,190,122,255,169,191, 14,111,185, 63, 38,207, 21, 61,211,252, 73,191, 80,177,198,189,203,154, 43,
+ 61, 53,146,227, 63,115,180, 63, 59, 42,113,216, 58,144, 63,125, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0,
+ 0, 0, 0, 0, 63,128, 0, 0, 62,142, 95,175, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0,
+ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,189,226, 43, 64,191,220, 85,253, 64,101,104,225,191, 55, 81,190,191, 71,243,109,
+ 63, 42,237,100, 62,214,163,234,190,183,206,201,190, 61,137,200,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 66,200, 0, 0, 13, 64,207,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 45, 97,119,
+190,205, 47,119, 63, 19,117, 35, 62, 98,125,166, 62, 73,195,242, 62,243,228,124, 63, 11, 86,119, 62, 89,156, 70, 63, 88,232,230,
+190,204, 53,130, 62,128,120,250, 62, 20,194, 19, 62, 90, 15, 61, 62,200, 30, 92, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0,
+ 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 62,253,129, 53, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,191,129,159,108, 63, 6,210, 8, 64,152,221, 35,191, 55, 81,190,
+191, 71,243,107, 63, 42,237,102, 62,214,163,235,190,183,206,200,190, 61,137,205,191, 80, 38,157, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 66,200, 0, 0, 13, 64,208,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+190,210,167, 41, 62,139,172,194, 63, 35,220,250,191, 22,182, 30, 61,136, 3,122,190,176,164,109,190,147,153, 30,188, 10,248,255,
+190,160, 90,234,190,205,241, 89, 63, 25,235,148, 62,146,172,206, 61, 52,195,137, 61,139,142, 99, 0, 0, 0, 0, 0, 0, 0, 0,
+ 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 62, 77,227, 37, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0,
+ 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,191,189,167,114,192,104, 59,217, 63,184,179,184,
+191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,200,190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 13, 64,209,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 62,121, 45, 57, 63, 98,126,120,189,135,171, 60,190,200,174,139, 63, 21,142,220,191, 40, 70, 77, 62,150, 70,118,
+ 61, 92,245, 4,190,174,118,159, 63, 49,217,176, 60,104,167,120, 60,235,104,166, 63, 73,251,218, 62, 44, 25, 13, 0, 0, 0, 0,
+ 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 62,247, 2,217, 0, 0, 0, 0,255,255,255,255,
+ 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 63, 30,112, 86,192, 82, 69,111,
+ 64, 51,191, 59,191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,200,190, 61,137,199,191, 80, 38,158,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 13, 64,210,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,190,137,227, 49,191, 71,195,206,190, 96, 31, 70, 63, 5, 46,127,189,214, 51, 99,191, 67, 61,228,
+ 62, 2, 90,134,190,146,214,120, 62, 33,111, 34,190,187,229,136, 60,241,112, 27, 60,177,187, 0, 62,171,134, 4, 63, 29, 35,164,
+ 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63, 56,192,130, 0, 0, 0, 0,
+255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,191,176,148,118,
+ 63, 1,200, 88, 64,146, 48, 89,191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,200,190, 61,137,199,
+191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 13, 64,211,144, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,190, 82,169, 42, 63, 57,214,102,191, 36,112, 55, 62, 9,205, 59, 63, 5,139,184,
+190, 43, 32,105,191, 37, 62,120, 63, 15,215,220, 63, 8, 2,180, 62,163,170,198, 63, 8,178,160, 62,184,164,185, 61, 63, 72, 68,
+ 61,112,104, 16, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 62,192,249, 97,
+ 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+191,168, 80,200,191,165,154, 8, 64, 80,248,229,191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,200,
+190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 13, 64,212,144, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,191, 5,145, 56, 62,126, 77, 83,191, 63,133, 14, 62,167, 5,190,
+190, 96,212,123, 62,176,136,233,189, 80,193, 25, 62, 18, 49,147, 62, 25, 40,222,191, 10,204, 59, 62,104, 46,177, 62,150,106, 36,
+ 62,138, 61, 2, 62, 86,131, 4, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0,
+ 63, 19, 27, 39, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
+ 0, 0, 0, 0,189,246,190, 0,192, 90,129,233, 64, 20,155,224,191, 55, 81,190,191, 71,243,107, 63, 42,237, 98, 62,214,163,235,
+190,183,206,198,190, 61,137,206,191, 80, 38,157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 13, 64,213,144,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,191, 14, 77, 30, 62,154, 81,231,191, 22,220, 41,
+191, 0,189,104,190,160,167,214,190, 22, 60,140, 63, 74, 85, 37,191, 8,253, 32, 61, 23,146, 96,190,177, 30,196, 60,187, 25, 79,
+ 60,194,244,207, 62,253,234, 53, 62,234, 52,233, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0,
+ 63,128, 0, 0, 63, 79, 21,218, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0,190, 67,231,176,189, 11,105,144, 64,153,111,210,191, 55, 81,190,191, 71,243,109, 63, 42,237,100,
+ 62,214,163,234,190,183,206,201,190, 61,137,200,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0,
+ 13, 64,214,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62,205,110, 74,191, 27,226,146,
+ 61,219, 95, 73, 63, 45, 3, 75,190,147,109,222, 63, 40,196,152,190,116,136, 36,190,190, 21,181,190,213, 38,211, 62,183,230,114,
+ 63, 24,217,206, 62, 25,222, 59, 61,134, 50, 0, 62, 63,161,139, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0,
+ 0, 0, 0, 0, 63,128, 0, 0, 62,127, 67,180, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0,
+ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 63,158,217, 58,192, 17,225,122, 64,120,158,213,191, 55, 81,190,191, 71,243,109,
+ 63, 42,237,100, 62,214,163,234,190,183,206,200,190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 66,200, 0, 0, 13, 64,215,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 22, 95,176,
+190,210, 95,172,191, 46, 70,114, 62, 26, 71, 67, 61,234,164,188,191, 78,120,121,188,108,229,186,190, 72,225,144,190, 42,218,197,
+191,114,104, 83, 62, 73,213, 34, 61, 49,230,217, 61,187,117,217, 63, 42,253,143, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0,
+ 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 62, 95,144,226, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,191,127,205, 29,191,142,116,231, 64,100, 64,116,191, 55, 81,190,
+191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,200,190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 66,200, 0, 0, 13, 64,216,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+189,132, 25,196,191, 41,167, 67,190,174,145,249, 63, 41,227,171, 62, 94,208, 84, 63, 50, 21, 98,191, 46,162,138,191, 56, 53,136,
+ 62,160, 44, 9,190,188, 42, 15, 62,145,124,109, 62,135, 84, 47, 62, 95, 56, 95, 62,111, 38,104, 0, 0, 0, 0, 0, 0, 0, 0,
+ 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 62, 87,116,183, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0,
+ 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,192, 67,106,143, 62,236, 1,239, 64,105,139,230,
+191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,200,190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 13, 64,217,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 62, 72, 62, 61, 62,176,226,147,191, 48,185, 67,191, 26,215,255,187,254,158,242,190,201,238, 89, 63, 39,166, 99,
+191, 3,238,102, 62, 10,229,206, 62,230, 53,165, 62,100,227, 37, 63, 54, 38,230, 61, 43, 4, 87, 60,190, 1,166, 0, 0, 0, 0,
+ 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 61,126, 26,213, 0, 0, 0, 0,255,255,255,255,
+ 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,191, 58, 63,114,191,102, 44,242,
+ 64,119,155,239,191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,200,190, 61,137,199,191, 80, 38,158,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 13, 64,218,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 61,131,238,198,191, 58, 99, 49, 63, 26,180, 63,190,162, 92,201, 62,209,254,113, 63, 12, 67,151,
+ 62,197,138, 80,191, 72,116,197,190,182,129,117, 62, 76,137,180, 62,178,134,232, 62,113,134, 23, 62, 46,242,235, 62,122,121, 45,
+ 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 62,169, 12,248, 0, 0, 0, 0,
+255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 62,175,173,244,
+ 61,141,194,136, 64,164,239, 0,191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,201,190, 61,137,200,
+191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 13, 64,219,144, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 28, 38,213, 60,166,248, 66,191, 67,199,227,190, 83,123,127,190,224,119,122,
+ 62,149, 46, 73, 62, 62, 43,135, 62,199,175, 30, 63, 2,224, 97, 62,250,198,180, 63, 48, 97,211, 61,130,134, 38, 61, 8, 53,167,
+ 62, 91, 40, 56, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 62,157,115, 93,
+ 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+192, 36,188,127,192, 42,192, 83, 63,202, 24, 20,191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,200,
+190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 13, 64,220,144, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,190, 82,121, 10,190,216,142,233,191, 83,156, 94, 62,158, 73,222,
+ 63, 3,207,170,191, 39, 41, 63, 62,147,164, 2,191, 38,187, 36, 62,218, 1, 0,191, 32,119,145, 60,154,242,191, 62,130,165, 14,
+ 63, 49,236,127, 60,253, 44,163, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0,
+ 62,130,194, 13, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
+ 0, 0, 0, 0, 63, 51,117,191,192, 44,247, 40, 64, 82, 59, 84,191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234,
+190,183,206,200,190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 13, 64,221,144,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 71,176, 89,191, 18, 55,214,190,223, 82, 67,
+ 63, 50, 2,142, 61,202, 17,235, 62,199,118, 51, 63, 72,125,129,191, 36,250, 86, 61, 90, 99, 70, 63, 25, 38,125, 61,227, 50,218,
+ 61,110,152, 48, 62,104, 58,166, 63, 26,161,121, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0,
+ 63,128, 0, 0, 62, 35, 69, 21, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0,192, 44,218, 23,190,159,112,131, 64, 80,196, 68,191, 55, 81,190,191, 71,243,109, 63, 42,237,100,
+ 62,214,163,234,190,183,206,200,190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0,
+ 13, 64,222,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,191, 39, 65, 62,190,203,203,175,
+191, 8, 58, 24,190,185,178,132, 63, 27,133, 48, 63, 35,150,166,189,174,164,195,189,209, 20,146,191, 3, 43,124, 63, 54,188,219,
+ 62, 53,126, 23, 63, 22,113, 93, 62, 42,104, 29, 61,140,168,166, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0,
+ 0, 0, 0, 0, 63,128, 0, 0, 62,222,122, 90, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0,
+ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,191, 61,253,222,190, 43,216,212, 64,140,239,219,191, 55, 81,190,191, 71,243,109,
+ 63, 42,237,100, 62,214,163,234,190,183,206,200,190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 66,200, 0, 0, 13, 64,223,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,190,251, 62, 59,
+ 62,132,207,154,191, 19,198,191,191, 25, 82,122,190,169,114,179,191, 46, 80,242,189,100, 92,161, 62,188,103,125,191, 23,234, 0,
+ 63, 22,140, 12, 62,252, 36, 24, 62,121,130,191, 61,198,245, 96, 62, 42,186, 98, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0,
+ 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 62, 89,205, 62, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,191,212,168,192,192, 30,175, 47, 64, 12,228, 94,191, 55, 81,190,
+191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,200,190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 66,200, 0, 0, 13, 64,224,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 62, 6,136,242,191, 58,135,240, 61,233,198, 89, 63, 41,148, 57,190,189,188,151,190,189, 72,156, 63, 86, 14,184,190,165, 54,185,
+ 62, 49,220,131,189,189, 87, 60, 61,167,198,118, 62, 80,200, 92, 63, 10,210,157, 62, 48, 9,240, 0, 0, 0, 0, 0, 0, 0, 0,
+ 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 61,181,132,186, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0,
+ 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,190,238,184,114,191,230,206,237, 64, 85,122,208,
+191, 55, 81,190,191, 71,243,107, 63, 42,237, 98, 62,214,163,235,190,183,206,198,190, 61,137,206,191, 80, 38,157, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 13, 64,225,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 63, 30,165,128,190,249, 50,161,189, 86,213,180,191, 29, 10,178,191, 49,247,227,189, 7,139,215,189,154,249,222,
+191, 23, 77,153, 63, 14, 58,160, 61, 15, 47, 72, 62, 94,132,138, 62, 48,190,167, 62,136, 41,203, 62,176, 52,157, 0, 0, 0, 0,
+ 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 62,233,177, 38, 0, 0, 0, 0,255,255,255,255,
+ 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 63,104, 19, 67,191,254,122,179,
+ 64,123, 37,115,191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,200,190, 61,137,199,191, 80, 38,158,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 13, 64,226,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 62,181,231, 69, 63, 51, 19, 36,191, 6, 5,126,190,170, 27,231,189, 35,253,128,189,151, 11,182,
+ 62,178,171, 74, 63, 49,231,127, 62,128,146,204, 62, 17,100, 88, 62,124,245,197, 61,130,108, 30, 61,229,152,201, 63, 19,193,242,
+ 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63, 79,156, 56, 0, 0, 0, 0,
+255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 63,191,106,172,
+192, 42,225,110, 64,110,170, 2,191, 55, 81,190,191, 71,243,109, 63, 42,237, 98, 62,214,163,236,190,183,206,197,190, 61,137,201,
+191, 80, 38,157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 13, 64,227,144, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,191, 27,227, 49, 63, 26, 83, 17,191, 2,229, 27, 61,135, 48, 83, 62,134,244,199,
+190,151, 37, 55,189,237,195,210, 63, 17, 39,249, 61, 76, 1,154,191, 79,194, 75, 61,249, 99,240, 60,249, 88,190, 61,183, 20,174,
+ 63, 66, 38, 39, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 62,178, 40,150,
+ 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+192, 12, 3,121,190,252, 11, 63, 64, 89,136,146,191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,200,
+190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 13, 64,228,144, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,191, 20, 59,104, 63, 17, 36, 30,190,252, 57,112, 62,162,101, 32,
+ 62,160, 6,139, 61, 80,160, 57, 61,245,243,109,190,224, 18, 41,188,227,154,182,190,139,196,238, 62,108, 28,173, 62,246,152,191,
+ 62, 61, 50,199, 61,210,254, 31, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0,
+ 63, 56,166, 20, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
+ 0, 0, 0, 0,191,187,104,250,189,139, 86, 56, 64,131, 23,145,191, 55, 81,190,191, 71,243,107, 63, 42,237,100, 62,214,163,235,
+190,183,206,198,190, 61,137,203,191, 80, 38,157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 13, 64,229,144,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,191, 19, 80,228,191, 16,138,118,191, 6,210,122,
+ 62,138, 14,139, 62,189, 65, 73,189,244, 89, 19, 62, 83, 5,205,190,107,159, 94, 62,255,199, 19,190, 48,124, 14, 62,208, 67, 15,
+ 62,190, 57,184, 61,219,154,119, 61,234,114,111, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0,
+ 63,128, 0, 0, 62,223, 51,203, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 62,161, 56, 52,191,207,221,255, 64,120,110,202,191, 55, 81,190,191, 71,243,109, 63, 42,237,100,
+ 62,214,163,234,190,183,206,201,190, 61,137,200,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0,
+ 13, 64,230,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 47,124,138, 63, 0,193, 12,
+ 62,176, 39,124,190,204, 3, 68, 61, 43,180,132,189,104,184, 66,191, 54,173, 69,189,116,239, 24,190, 53,183,191,190,198, 91,120,
+ 62,150, 33,123, 61,226, 30, 68, 62, 27,121,224, 62,227,154, 4, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0,
+ 0, 0, 0, 0, 63,128, 0, 0, 63, 35, 22,117, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0,
+ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,192, 41, 89, 63,192, 25,107,117, 63,222,245,174,191, 55, 81,190,191, 71,243,109,
+ 63, 42,237,100, 62,214,163,234,190,183,206,200,190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 66,200, 0, 0, 13, 64,231,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62,207,202, 66,
+ 63, 47, 32,211,191, 0,219,139,190,172,212,197, 63, 65, 68,195,190,217,152,105,190,214,218,159,190, 84,113, 85,190,158,108,194,
+ 61,235,217,229, 60,202,179, 82, 62,157,106,197, 63, 33,197,211, 61, 18,243, 9, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0,
+ 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,102,162, 1, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,191,220,238, 94,191,150, 70, 91, 64, 72,192,203,191, 55, 81,190,
+191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,200,190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 66,200, 0, 0, 13, 64,232,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 63, 22, 95,176,190,210, 95,172,191, 46, 70,114, 62, 26, 71, 67, 61,234,164,188,191, 78,120,121,188,108,229,186,190, 72,225,144,
+190, 42,218,197,191,114,104, 83, 62, 77,183, 13, 62,182,153,158, 62,143, 59, 65, 62, 38,159, 52, 0, 0, 0, 0, 0, 0, 0, 0,
+ 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 62, 95,144,226, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0,
+ 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,192,116,234, 61,188,238,101,224, 64, 56, 20,165,
+191, 55, 81,190,191, 71,243,107, 63, 42,237,100, 62,214,163,235,190,183,206,198,190, 61,137,203,191, 80, 38,157, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 13, 64,233,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 62, 6,136,242,191, 58,135,240, 61,233,198, 89, 63, 41,148, 57,190,189,188,151,190,189, 72,156, 63, 86, 14,184,
+190,165, 54,185, 62, 49,220,131,189,189, 87, 60, 60,242,255, 31, 63, 83,194,231, 62, 5, 56,189, 60, 85,188, 68, 0, 0, 0, 0,
+ 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 61,181,132,186, 0, 0, 0, 0,255,255,255,255,
+ 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,189,240,209,128, 63, 95,183,178,
+ 64,176, 67, 5,191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,201,190, 61,137,200,191, 80, 38,158,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 13, 64,234,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,191, 86,114,107,191, 2,141,137, 61,105,140,227,190, 63,121, 70, 62,218,242,130,190,132,163,237,
+ 60, 16,235,219, 62,248,203, 85,191, 80,244, 79, 62,148, 0,103, 63, 85,189,153, 61,200,104,151, 60,142, 55,246, 61, 76, 57, 74,
+ 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63, 33,252, 31, 0, 0, 0, 0,
+255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,192, 25, 54,206,
+ 62,162,197,171, 64,121, 16, 6,191, 55, 81,190,191, 71,243,109, 63, 42,237, 98, 62,214,163,236,190,183,206,197,190, 61,137,201,
+191, 80, 38,157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 13, 64,235,144, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,190,244,100,219,191, 91, 69,182,189,144,137, 60, 62, 59,126,161,190,200,228, 28,
+ 62,170, 49, 60,189,250,139,225, 62,111,143,244,191,100,103,252, 62, 79, 32,148, 62,163,246,104, 63, 16,201, 91, 61,136,104, 24,
+ 61, 66,230,227, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63, 41, 88,182,
+ 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+192, 61, 57, 29,191, 39, 53,236, 64, 55,221,173,191, 55, 81,190,191, 71,243,107, 63, 42,237,100, 62,214,163,235,190,183,206,198,
+190, 61,137,203,191, 80, 38,157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 13, 64,236,144, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,190, 35, 43,167, 61,225,210,242, 63, 30, 58,197, 63, 67, 8,229,
+ 61,222,176,215, 63, 12, 15, 70, 62,165,195, 80, 61,227, 72,218,191, 87, 66,188, 62,195,213,145, 61,212,218, 39, 63, 25, 20,242,
+ 62,118, 70,122, 61,107,226,159, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0,
+ 63, 64, 74,173, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
+ 0, 0, 0, 0,191, 40, 62,249, 63, 26,113, 16, 64,160,179, 50,191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234,
+190,183,206,200,190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 13, 64,237,144,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,190,224, 29,190, 63, 4, 44,239, 63, 49,217,125,
+190,121, 25,107, 62,217,172,117,190,116, 98,242, 63, 42,162,148,190,199,178,142,191, 13,105, 54,190,163,107, 83, 63, 45,186, 64,
+ 62, 91,122,109, 61, 21,134, 32, 61,144,118, 21, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0,
+ 63,128, 0, 0, 63, 73,107,113, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0,191,138, 51, 90,192,110, 14,199, 63,203, 66, 18,191, 55, 81,190,191, 71,243,109, 63, 42,237,100,
+ 62,214,163,234,190,183,206,200,190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0,
+ 13, 64,238,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 39, 78, 36,190,251, 50,128,
+190,189,185,139, 62,226, 4,175,190,153, 23,118,190,120,228, 67,191, 42,226, 50,191, 86,243,239,190,189, 42, 37,190,190, 1, 66,
+ 59,153,223,235, 59,243,174, 21, 63, 60,160,231, 62,128,135,251, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0,
+ 0, 0, 0, 0, 63,128, 0, 0, 62,105,245,167, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0,
+ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,191,186, 75, 44,191,204,205,170, 64, 61,169,132,191, 55, 81,190,191, 71,243,109,
+ 63, 42,237,100, 62,214,163,234,190,183,206,200,190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 66,200, 0, 0, 13, 64,239,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62,155,223,118,
+191, 3,196,249,190,163, 12,115,191, 60, 73,212, 62, 85,208, 59, 62,155, 11, 65,189,173, 17, 28,190,254, 16, 20, 63, 32,229,213,
+189, 28,221,216, 62, 52, 19, 79, 62,146, 52,229, 62,171,228,191, 62, 79,185,106, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0,
+ 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63, 37,184, 45, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 63,219,119, 4,192, 28, 73,231, 64,128,117, 83,191, 55, 81,188,
+191, 71,243,109, 63, 42,237,100, 62,214,163,233,190,183,206,202,190, 61,137,201,191, 80, 38,157, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 66,200, 0, 0, 13, 64,240,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 62,254,109,168, 63, 4,146,210, 63, 23,131,232, 62,187,212, 66,190,158,109, 9, 62,216, 12, 71, 59,153, 20, 64, 62, 7, 2, 11,
+ 62, 91,134, 92,191, 33,128, 43, 62, 51, 75,186, 60,144,251,206, 61, 19, 49,198, 63, 69,114, 22, 0, 0, 0, 0, 0, 0, 0, 0,
+ 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,115,100,221, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0,
+ 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,191,194, 59,172,192, 13, 29, 35, 64, 30,208, 13,
+191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,200,190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 13, 64,241,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 62,155,223,118,191, 3,196,249,190,163, 12,115,191, 60, 73,212, 62, 85,208, 59, 62,155, 11, 65,189,173, 17, 28,
+190,254, 16, 20, 63, 32,229,213,189, 28,221,216, 61,227, 31, 97, 62,104,207,168, 62,237, 89, 38, 62, 74,238, 93, 0, 0, 0, 0,
+ 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63, 37,184, 45, 0, 0, 0, 0,255,255,255,255,
+ 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,192, 82,190,197, 62,174,148,251,
+ 64, 91,189, 29,191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,200,190, 61,137,199,191, 80, 38,158,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 13, 64,242,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,191, 10,132,170, 62,237, 61, 82,190,223,191,127, 63, 12,148, 11, 62, 92,142,236, 63, 32,199, 17,
+189,242,206,157, 63, 15,114,199,191, 33, 82, 91,190,167,247, 3, 62, 37, 10,210, 63, 65,152,124, 61,106,110, 28, 60,207,189,179,
+ 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 62,140, 23, 40, 0, 0, 0, 0,
+255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,190,163,157,120,
+ 63, 33,219, 44, 64,167, 25,250,191, 55, 81,190,191, 71,243,107, 63, 42,237,102, 62,214,163,237,190,183,206,199,190, 61,137,206,
+191, 80, 38,157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 13, 64,243,144, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,191, 4,175,102,190, 50,200,160, 63, 77,214,248,190,110,194,226, 61,198, 10,138,
+ 62, 62,213,210, 61,253,163,141, 61,160,130,106,191,101,229,201, 62, 50,145,103, 63, 61,192, 52, 62, 23, 50, 16, 61, 1, 56, 40,
+ 61,162,254, 43, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 60,220, 81, 89,
+ 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 63, 79, 63,131,191,203,225, 22, 64,133, 83,183,191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,200,
+190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 13, 64,244,144, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,190,194,155, 70,191, 3, 93, 82,191, 19,133, 23,191, 2,146,179,
+ 62,104,198,131, 63, 93,189, 15,190,209,226, 77,191, 21,122,159,190,234,192,169, 63, 35,128, 16, 62,167,188, 9, 61,138,167,141,
+ 61,185,163,186, 63, 3,152,147, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0,
+ 59,236,249, 25, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
+ 0, 0, 0, 0, 62, 89,218, 20,192, 81, 21,169, 64, 38,226, 50,191, 55, 81,190,191, 71,243,107, 63, 42,237, 98, 62,214,163,235,
+190,183,206,198,190, 61,137,206,191, 80, 38,157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 13, 64,245,144,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 52,169,139, 62,156,163, 97,190,184,132, 26,
+ 63, 7, 25, 82, 62,151,117,127, 62,247,206,254, 63, 76,144, 27, 62,204, 57,150,188,246,181,184, 63, 19,222,196, 61, 18,237,175,
+ 61, 0, 0, 50, 62,208, 45,180, 63, 6,186, 72, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0,
+ 63,128, 0, 0, 62,186,195, 61, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0,190,166, 91,192, 62,151,138,203, 64,159, 4,232,191, 55, 81,190,191, 71,243,109, 63, 42,237, 98,
+ 62,214,163,236,190,183,206,197,190, 61,137,201,191, 80, 38,157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0,
+ 13, 64,246,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 7,240,212,191, 18, 2,213,
+191, 5, 90,228, 62,178, 92,221, 63, 16,236, 8, 62,151,216, 90, 62,128,193,155,188,245, 60, 56,190,160,129,118,191,113,157, 47,
+ 63, 40,117,114, 62, 37, 92,164, 61, 78,198, 72, 62, 5, 28, 6, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0,
+ 0, 0, 0, 0, 63,128, 0, 0, 62,226, 96,137, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0,
+ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,191,191,137,104,190,208,156,143, 64,116,245,234,191, 55, 81,190,191, 71,243,109,
+ 63, 42,237, 98, 62,214,163,236,190,183,206,197,190, 61,137,202,191, 80, 38,157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 66,200, 0, 0, 13, 64,247,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,191, 49,218,173,
+191, 23,109,113, 62, 55, 16, 32,190,188,117, 54, 62,208, 20, 25,191, 46,245,118,186,236,158, 72,191, 97, 10, 55, 62,183,128,140,
+190,146,230,177, 62,174,217,121, 62,188, 55, 45, 62, 25, 76, 41, 62, 16,146,138, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0,
+ 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63, 48, 85, 96, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,191, 78, 6,218,191, 2,247,240, 64,131,181, 2,191, 55, 81,190,
+191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,200,190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 66,200, 0, 0, 13, 64,248,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+189,236, 25,179, 63, 27,158,127, 62,239,235,123, 63, 33,108, 59,190,103,198,244, 62,187,192,251,190,101, 39,179, 62,138,210,110,
+191, 54,168,145,190, 63, 20,208, 62,211,209,237, 62,129,168, 1, 62, 7,237,108, 62, 77, 30,188, 0, 0, 0, 0, 0, 0, 0, 0,
+ 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,109,210, 2, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0,
+ 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,191,251,181,100, 63, 79, 67,160, 64,143,115, 83,
+191, 55, 81,190,191, 71,243,109, 63, 42,237, 98, 62,214,163,236,190,183,206,197,190, 61,137,201,191, 80, 38,157, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 13, 64,249,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 61,237,243,122,190,169,234, 11,191, 55,226,211,191, 25,175,184, 63, 39,201, 24,190, 71, 23,204, 62,218, 61, 87,
+ 63, 39,211, 31,190,215,101,108,189,244,125, 35, 62,250, 56, 31, 62,248,208,174, 60, 79, 43, 50, 60, 79,186,252, 0, 0, 0, 0,
+ 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 61,186,130, 83, 0, 0, 0, 0,255,255,255,255,
+ 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,192, 16,143,166,192, 31, 40,219,
+ 63,240,165,188,191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,200,190, 61,137,199,191, 80, 38,158,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 13, 64,250,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,191, 15,157,192,190,205, 51, 47,190,136, 40,152, 63, 44,122,128, 63, 92,144,194,190, 99, 36,235,
+190,206, 22,244, 62,220, 32,143, 63, 19,244,169,189,238,205,160, 61, 69,255, 93, 62,129,237,131, 63, 29,113,199, 61,169,188, 16,
+ 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 61,151,139,249, 0, 0, 0, 0,
+255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,192, 46, 16, 47,
+ 62, 17,135,234, 64,101,174,196,191, 55, 81,190,191, 71,243,107, 63, 42,237,100, 62,214,163,235,190,183,206,198,190, 61,137,203,
+191, 80, 38,157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 13, 64,251,144, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,190,162,110,186,190,105,104,145, 62,239,168,247, 63, 74,235, 3,190,178, 77,140,
+ 63, 72, 49, 80, 62,112, 45,164, 63, 44,101, 43, 62,173,162, 95,190,104,215,180, 62,112,185,132, 63, 31,198, 76, 61,186,148, 82,
+ 61, 75,140,149, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 61,120,174,161,
+ 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+192, 34, 76,221,191,220, 63,195, 64, 19, 92,101,191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,200,
+190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 13, 64,252,144, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 32, 89,101, 63, 82, 91,234, 60, 86, 78,243, 63, 12, 61, 22,
+190,178,120,249,191, 37, 19,203, 63, 24, 65,128, 63, 52,226,196,191, 0,214,219,190,210,228,203, 61,144, 5,191, 62,203,251, 27,
+ 62,232,217, 8, 61,156,169,185, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0,
+ 62,113,165, 7, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
+ 0, 0, 0, 0,191,208,209, 0,192, 57, 98,175, 63,244, 39,214,191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234,
+190,183,206,200,190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 13, 64,253,144,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 6,136,242,191, 58,135,240, 61,233,198, 89,
+ 63, 41,148, 57,190,189,188,151,190,189, 72,156, 63, 86, 14,184,190,165, 54,185, 62, 49,220,131,189,189, 87, 60, 61,100,142, 40,
+ 62, 18, 81,206, 63, 34,238, 52, 62, 40,209,214, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0,
+ 63,128, 0, 0, 61,181,132,186, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0,192, 19,146,156, 63, 38,169,132, 64,133,240,119,191, 55, 81,190,191, 71,243,109, 63, 42,237,100,
+ 62,214,163,234,190,183,206,200,190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0,
+ 13, 64,254,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,191,104,191,123,190,172, 12, 91,
+ 62,112, 97,100, 61,150, 67,240, 61,241,234,237,190, 65, 15,121, 62, 61, 2,224,190,233, 38,159,187,191, 62,118, 63, 29,119,107,
+ 62,202, 98,177, 63, 14,134,157, 60,213,140,246, 60,179,116, 97, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0,
+ 0, 0, 0, 0, 63,128, 0, 0, 63, 69,173,159, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0,
+ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 63,211,209,100,192, 64, 57, 80, 64,100, 52,239,191, 55, 81,190,191, 71,243,109,
+ 63, 42,237,100, 62,214,163,234,190,183,206,200,190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 66,200, 0, 0, 13, 64,255,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,190,157, 46,129,
+191, 47,142,239, 60,219,129, 7, 63, 40,203,124,189,122,175, 5, 62,139, 33,180, 61, 63, 8,162,191, 26,191, 75, 61,189,191, 52,
+190,100,188,125, 61,112,222,131, 60,161,149,150, 61,202,188,127, 63, 82,141,219, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0,
+ 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63, 58, 78, 34, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 62,195, 40,204,192, 22, 66,169, 64, 88, 69, 56,191, 55, 81,190,
+191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,200,190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 66,200, 0, 0, 13, 65, 0,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 63, 25, 69,168, 62,124,123, 76,191, 32,238,100, 62,220,140,234, 61,120,159, 84, 61,244,254,187, 63, 59,215,103,190, 71,235,244,
+191, 73,172, 9,190,165,228, 94, 62, 39,198,237, 61,180,166,232, 62,106, 45, 33, 63, 4,238, 32, 0, 0, 0, 0, 0, 0, 0, 0,
+ 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,104,255,128, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0,
+ 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 63,124, 41,179,192, 92, 52,215, 64, 56,194, 1,
+191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,200,190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 13, 65, 1,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 62,175,191,249, 63, 67,210, 72,190,255, 44, 91, 62, 97,232, 36,191, 70, 89,183,190,246, 37, 58, 61,211,174,112,
+189,119,174,231,191,119, 2,237, 62, 35,205,180, 59,158,119,225, 59, 89,185, 62, 62,150, 41, 58, 63, 50,212,186, 0, 0, 0, 0,
+ 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63, 32,102, 78, 0, 0, 0, 0,255,255,255,255,
+ 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,192, 66,215, 78,189, 17,102, 16,
+ 64, 82, 64,251,191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,200,190, 61,137,199,191, 80, 38,158,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 13, 65, 2,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,190,158, 15, 40,191, 27, 48, 97,191, 41,181, 48,190,160, 19, 31,189,153, 23, 91,190,110,243,100,
+190,164,169,182,191,120,129, 97, 60, 90,101,145, 61,186, 53,193, 62, 31, 65, 94, 63, 45, 57,152, 61,248,240,117, 61, 61,128, 59,
+ 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 61,137, 79,196, 0, 0, 0, 0,
+255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 63,243,234,243,
+192, 50,199, 12, 64,118,173,246,191, 55, 81,192,191, 71,243,107, 63, 42,237, 98, 62,214,163,235,190,183,206,197,190, 61,137,205,
+191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 13, 65, 3,144, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62,136,137,130,191,106, 7,101,190,155,249,249, 60,155,218,146,188,184,212,179,
+189,201,215, 68,191, 61,244, 40, 61, 70,234,114,191, 1,226,154, 63, 91,139,119, 61,207, 64,202, 60, 89,106, 46, 61, 13, 53, 30,
+ 63, 89,222,236, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63, 87, 40, 6,
+ 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+191, 54,176,174,191,187,173, 99, 64, 93, 31,209,191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,200,
+190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 13, 65, 4,144, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 71,176, 89,191, 18, 55,214,190,223, 82, 67, 63, 50, 2,142,
+ 61,202, 17,235, 62,199,118, 51, 63, 72,125,129,191, 36,250, 86, 61, 90, 99, 70, 63, 25, 38,125, 62,129,144,101, 62, 91, 1,185,
+ 62,121, 67, 60, 62,148, 77, 32, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0,
+ 62, 35, 69, 21, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
+ 0, 0, 0, 0,192,100,131,238,191, 81,185,222, 64, 27, 50, 40,191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234,
+190,183,206,200,190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 13, 65, 5,144,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,190, 35, 43,167, 61,225,210,242, 63, 30, 58,197,
+ 63, 67, 8,229, 61,222,176,215, 63, 12, 15, 70, 62,165,195, 80, 61,227, 72,218,191, 87, 66,188, 62,195,213,145, 60, 70,146,197,
+ 63, 44,125, 83, 62,156,124, 64, 60, 10,144,125, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0,
+ 63,128, 0, 0, 63, 64, 74,173, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0,190,248, 77,226,190,103,109, 12, 64,143,231,230,191, 55, 81,190,191, 71,243,107, 63, 42,237,100,
+ 62,214,163,235,190,183,206,199,190, 61,137,204,191, 80, 38,157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0,
+ 13, 65, 6,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,190,251, 62, 59, 62,132,207,154,
+191, 19,198,191,191, 25, 82,122,190,169,114,179,191, 46, 80,242,189,100, 92,161, 62,188,103,125,191, 23,234, 0, 63, 22,140, 12,
+ 63, 3,173, 53, 62, 78,233,187, 61,187,225, 77, 62, 68,112,203, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0,
+ 0, 0, 0, 0, 63,128, 0, 0, 62, 89,205, 62, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0,
+ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 64, 10, 80,129,192, 74,130,253, 64,109,179,124,191, 55, 81,190,191, 71,243,109,
+ 63, 42,237,100, 62,214,163,234,190,183,206,200,190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 66,200, 0, 0, 13, 65, 7,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 71,176, 89,
+191, 18, 55,214,190,223, 82, 67, 63, 50, 2,142, 61,202, 17,235, 62,199,118, 51, 63, 72,125,129,191, 36,250, 86, 61, 90, 99, 70,
+ 63, 25, 38,125, 60,202, 2,215, 59,181,116, 38, 60,204,167,240, 63,113,223,193, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0,
+ 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 62, 35, 69, 21, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,192, 55, 37, 73,191,210, 44, 92, 64, 12, 20,134,191, 55, 81,190,
+191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,200,190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 66,200, 0, 0, 13, 65, 8,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 63, 15, 7, 34,190, 46,194,135, 62,148, 82, 36,191, 66, 22,185, 63, 53,135,211,190,172, 29,111, 62,229, 68,200, 62,140,167,253,
+190, 99,223,181,190,176,226, 35, 61, 50,158,144, 62,230,247, 53, 62,236, 25,253, 61, 52,215,226, 0, 0, 0, 0, 0, 0, 0, 0,
+ 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 62,214,199,202, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0,
+ 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,191,152,163, 4,192, 16,189,233, 64, 39, 29,148,
+191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,200,190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 13, 65, 9,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,189,236, 25,179, 63, 27,158,127, 62,239,235,123, 63, 33,108, 59,190,103,198,244, 62,187,192,251,190,101, 39,179,
+ 62,138,210,110,191, 54,168,145,190, 63, 20,208, 61,250,136,113, 62, 71, 45,109, 62,222,240,248, 62,125,172,108, 0, 0, 0, 0,
+ 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,109,210, 2, 0, 0, 0, 0,255,255,255,255,
+ 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 63,213,219, 83,192, 77,221,119,
+ 64, 90,157, 98,191, 55, 81,192,191, 71,243,107, 63, 42,237, 98, 62,214,163,235,190,183,206,197,190, 61,137,205,191, 80, 38,158,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 13, 65, 10,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,191, 4,225, 56, 63, 35,172,239,191, 4, 44, 92,190,112,166, 88,190,176,149,229, 63, 6,184,233,
+191, 44,120, 91, 63, 20, 36,208, 63, 79, 84,165, 61, 89,145,190, 60,192,154,154, 60, 43,233,206, 62, 0, 13, 68, 63, 87, 72, 51,
+ 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63, 32,131, 34, 0, 0, 0, 0,
+255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,191,106, 39,118,
+ 63,114, 29,130, 64,164,123,156,191, 55, 81,190,191, 71,243,107, 63, 42,237,102, 62,214,163,235,190,183,206,200,190, 61,137,205,
+191, 80, 38,157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 13, 65, 11,144, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 45, 97,119,190,205, 47,119, 63, 19,117, 35, 62, 98,125,166, 62, 73,195,242,
+ 62,243,228,124, 63, 11, 86,119, 62, 89,156, 70, 63, 88,232,230,190,204, 53,130, 63, 54, 27,149, 62,133, 38,243, 60, 53, 55,232,
+ 60,143,130, 91, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 62,253,129, 53,
+ 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+192,102, 71, 4,190,194,109,241, 64, 47, 39,108,191, 55, 81,192,191, 71,243,107, 63, 42,237,100, 62,214,163,233,190,183,206,198,
+190, 61,137,204,191, 80, 38,157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 13, 65, 12,144, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,188,105,157,127, 62,184, 8,148,191, 7,109,181,191, 68,194,177,
+190,220, 77,163, 63,101,120, 58, 61, 25,105,241, 62, 86,197, 69,190,236, 78,214, 63, 46,136,126, 61, 22,203,152, 63, 61,161,132,
+ 62, 79,196, 67, 60,160, 22, 79, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0,
+ 63, 93,148,112, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
+ 0, 0, 0, 0, 63,214,224, 12,192, 5,182,225, 64,136, 59,246,191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234,
+190,183,206,200,190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 13, 65, 13,144,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,191, 24, 46,192,191, 43, 20, 41, 62,183,184,186,
+ 62,136,173, 42, 63, 50, 75, 75, 62,126, 83, 40, 63, 8,195,188, 62,238,211,234, 61,152, 36, 69, 62,145,106,235, 62,131, 28,211,
+ 60, 46,255, 24, 60,139,165, 11, 63, 55, 88,113, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0,
+ 63,128, 0, 0, 63, 57,122, 93, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 63, 92,158, 95,192, 67,243,117, 64, 70,154, 16,191, 55, 81,190,191, 71,243,109, 63, 42,237,100,
+ 62,214,163,234,190,183,206,200,190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0,
+ 13, 65, 14,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,191, 4,175,102,190, 50,200,160,
+ 63, 77,214,248,190,110,194,226, 61,198, 10,138, 62, 62,213,210, 61,253,163,141, 61,160,130,106,191,101,229,201, 62, 50,145,103,
+ 61,104, 55,112, 61, 9, 23, 14, 62,129, 82,208, 63, 40, 65,176, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0,
+ 0, 0, 0, 0, 63,128, 0, 0, 60,220, 81, 89, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0,
+ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,192, 31,234, 87,192, 65,234,204, 63,172,200,110,191, 55, 81,190,191, 71,243,109,
+ 63, 42,237,100, 62,214,163,234,190,183,206,200,190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 66,200, 0, 0, 13, 65, 15,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 99,180,162,
+ 62,145,169,127, 62,174, 95,114,189,223,121,169, 63, 73,190,173,190, 51, 72,118,190,162, 48,116,189,139, 98, 59, 62,191,245, 77,
+ 61,253,124, 75, 60, 48,252,197, 62, 62,176,163, 63, 72, 93,216, 60,166, 65, 94, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0,
+ 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63, 12, 69, 81, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,191,189,122, 76,191,102,243,238, 64, 93,253,158,191, 55, 81,190,
+191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,200,190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 66,200, 0, 0, 13, 65, 16,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+189,218,139, 33,190,222, 81,160,190,151, 71, 75,191, 88, 33, 47,190,128,174,152,190,107,218, 43,190, 66, 96, 40,190,113, 29,219,
+190,184,240, 89, 62,204, 92,153, 62,135,159,101, 62,174,216,253, 62, 96, 99,217, 62, 50,171,104, 0, 0, 0, 0, 0, 0, 0, 0,
+ 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 61,207, 27, 5, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0,
+ 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 63, 67, 75,227, 61, 78,124, 48, 64,171,150,200,
+191, 55, 81,190,191, 71,243,107, 63, 42,237,100, 62,214,163,235,190,183,206,198,190, 61,137,203,191, 80, 38,157, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 13, 65, 17,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,190,190, 19, 92, 62,147,203,188, 62, 2,242, 19, 63, 95,138,223, 60, 24, 50,144, 63, 64,174,148,191, 11,158,196,
+ 63, 64, 22,220,190, 19, 35, 98, 62, 44, 93,217, 63, 58,115,191, 60, 2,198,121, 59,167,102,254, 62,132,100,178, 0, 0, 0, 0,
+ 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 62, 27,176,189, 0, 0, 0, 0,255,255,255,255,
+ 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 62,139, 37, 24, 63, 62,231, 4,
+ 64,179,205,174,191, 55, 81,188,191, 71,243,107, 63, 42,237,102, 62,214,163,235,190,183,206,200,190, 61,137,206,191, 80, 38,156,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 13, 65, 18,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 60,239,220, 87,191, 46,204,168, 61, 84, 95, 78,191, 58,105, 8, 63, 43,245,231, 62,151,254, 91,
+ 61,206,143, 77, 63, 42,139,177,190,196,107, 26,190,139,211,150, 63, 92, 23, 50, 61, 15, 27,169, 60, 83, 43, 8, 61,189, 83, 59,
+ 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63, 49,221,121, 0, 0, 0, 0,
+255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,191,225,247, 32,
+192, 81,175, 37, 63,198,254,248,191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,200,190, 61,137,199,
+191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 13, 65, 19,144, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62,130,132, 59,190,120,166,131,191,109,191, 15, 61,238,164,170,190, 78, 93, 20,
+189,231,164,245, 62, 16,254,254,190,234,189, 61,189,116,167,116, 63, 16,175, 67, 61, 2,132, 66, 61,189, 37,191, 63, 64, 5,173,
+ 62, 0,181, 91, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63, 2, 93,129,
+ 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 61,165,110,200, 62,239, 43,183, 64,169,243,129,191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,200,
+190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 13, 65, 20,144, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,191, 49,218,173,191, 23,109,113, 62, 55, 16, 32,190,188,117, 54,
+ 62,208, 20, 25,191, 46,245,118,186,236,158, 72,191, 97, 10, 55, 62,183,128,140,190,146,230,177, 63, 66,109, 62, 61,170,159,244,
+ 60,243,150, 79, 62, 2,136, 69, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0,
+ 63, 48, 85, 96, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
+ 0, 0, 0, 0,191,243,158, 12,192,104,237,244, 63,155, 34,138,191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234,
+190,183,206,200,190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 13, 65, 21,144,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,191, 49, 22,155, 62,165,232,223,191, 6,208,133,
+190,190,253, 93,190,194,234,190,191, 29, 89,239,191, 23,110,134,191, 30,217, 8,190,205,159,107,190,185, 94, 18, 60, 92,106,228,
+ 61, 35, 25, 23, 63, 93,111,136, 61,167,105,211, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0,
+ 63,128, 0, 0, 62,132,153,252, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 63, 8, 74,118,192, 1,240, 0, 64,108,123, 28,191, 55, 81,190,191, 71,243,107, 63, 42,237,102,
+ 62,214,163,235,190,183,206,200,190, 61,137,205,191, 80, 38,157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0,
+ 13, 65, 22,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,104,155,217,190, 29,164,215,
+190,179, 60,175, 62, 43,201,201, 61, 67, 60,100,189, 90, 42,171,191, 4, 85, 68, 62,130,249, 67,190,133,199,230, 63,107, 14,149,
+ 62,101,242,233, 61,181,120,181, 62, 43,136,231, 63, 4,241,245, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0,
+ 0, 0, 0, 0, 63,128, 0, 0, 63,108,179,252, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0,
+ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,191,231, 24, 26,191, 21,105, 44, 64, 98, 32,186,191, 55, 81,190,191, 71,243,107,
+ 63, 42,237,100, 62,214,163,235,190,183,206,198,190, 61,137,203,191, 80, 38,157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 66,200, 0, 0, 13, 65, 23,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,191, 49, 52,126,
+ 63, 43, 9,201,190, 96,234,166,190, 37,210,182, 61, 54, 58,206, 63, 63, 1,231,191, 34,173,133,190,170,154, 5, 63, 51,112, 93,
+191, 23, 61, 18, 62,138,189, 66, 62,210,103,114, 62, 62,128,117, 62, 7, 54, 35, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0,
+ 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,126,132, 33, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,191, 5, 52,141,192, 49,103, 10, 64, 37,154,230,191, 55, 81,190,
+191, 71,243,107, 63, 42,237, 98, 62,214,163,235,190,183,206,198,190, 61,137,206,191, 80, 38,157, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 66,200, 0, 0, 13, 65, 24,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 63, 32, 96, 77, 62,160,201,185, 63, 6, 3,160,190,248, 34, 11, 60,185, 53,206, 61,178,197,192, 63, 53,184,174,190,162,172,223,
+ 62,224,136,109,191, 61,173,142, 61,184, 47,132, 61,207,157,244, 62,225, 0,168, 62,189, 11,249, 0, 0, 0, 0, 0, 0, 0, 0,
+ 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 62,150,112,248, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0,
+ 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,191,177, 45,136, 63, 99,253, 22, 64,155, 58, 8,
+191, 55, 81,190,191, 71,243,109, 63, 42,237, 98, 62,214,163,236,190,183,206,197,190, 61,137,202,191, 80, 38,157, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 13, 65, 25,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 63, 55,202, 47,190, 89,235,249,190, 92, 18,127,191, 32,129,146,190, 8,212, 7,190,171, 50,167, 62,123,120, 97,
+189,249,152,232, 62,149, 18,140, 61, 13,111, 37, 63, 28,253,147, 62,184,184,231, 60, 58, 48, 48, 60,111, 78, 59, 0, 0, 0, 0,
+ 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63, 18, 61,115, 0, 0, 0, 0,255,255,255,255,
+ 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,191, 57,255, 42,192, 65, 4,235,
+ 64, 19, 7, 77,191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,200,190, 61,137,199,191, 80, 38,158,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 13, 65, 26,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,189,133,218,208,189,176, 10,116, 63, 10,237,186, 63, 85, 61, 14,190, 38,219,182, 62,206,175,174,
+ 63, 10,240, 47,190,114,232, 31,190,207,162, 91,190,193, 85,173, 61,128,255,228, 61,172, 32, 76, 63, 5,152,147, 62,169,134,205,
+ 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 60,212, 38, 62, 0, 0, 0, 0,
+255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,191,137, 68,184,
+ 61,226,177,204, 64,141,247,196,191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,200,190, 61,137,199,
+191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 13, 65, 27,144, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61,146,138,133,187, 8, 75,133, 62, 68,235, 28, 63,122,141,122, 63, 92,117,116,
+190,125,147, 7,190,147, 49, 87, 63, 41, 88, 9, 63, 2,255, 63, 61,126, 44, 71, 63, 0,166,107, 62,154, 29, 23, 61,165,214, 34,
+ 61,236,130, 42, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,103,170,241,
+ 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+192, 82,103, 22,191,201, 75, 73, 64, 0,247, 1,191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,200,
+190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 13, 65, 28,144, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62,168,120,231,191, 7,154,179, 63, 48,180, 41,190,187,232,239,
+191,104, 35, 9, 62,114, 8,222,190,177,143, 76,191, 28, 29,107, 62,234,112,210,190, 92,249, 9, 59,118,109, 73, 63, 4,155,168,
+ 62,243, 2, 73, 59,108,198,186, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0,
+ 62,184, 4, 74, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
+ 0, 0, 0, 0,191,246,241,194, 62,236,130, 87, 64,135,209, 50,191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234,
+190,183,206,200,190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 13, 65, 29,144,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62,223,197,124,190,189,243, 32,190,140,213,199,
+191, 69,149, 13,190,199,235,221, 62,240, 79,159,190, 14,202,113,190, 60,168,186,190,220,145, 5, 62,148, 8, 42, 62,219, 99, 49,
+ 62,242, 73, 85, 61, 79, 14,127, 61, 67,141, 68, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0,
+ 63,128, 0, 0, 62,192,236,157, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0,189,149,228,224,190,221, 13,233, 64,145,251,210,191, 55, 81,190,191, 71,243,107, 63, 42,237,100,
+ 62,214,163,235,190,183,206,199,190, 61,137,204,191, 80, 38,157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0,
+ 13, 65, 30,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,190,190, 19, 92, 62,147,203,188,
+ 62, 2,242, 19, 63, 95,138,223, 60, 24, 50,144, 63, 64,174,148,191, 11,158,196, 63, 64, 22,220,190, 19, 35, 98, 62, 44, 93,217,
+ 63, 4,141,198, 62, 19, 71, 3, 61,174,186, 60, 62,129,146, 99, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0,
+ 0, 0, 0, 0, 63,128, 0, 0, 62, 27,176,189, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0,
+ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 62, 89,120, 0,190,120,169,164, 64,155, 78, 26,191, 55, 81,192,191, 71,243,109,
+ 63, 42,237, 98, 62,214,163,234,190,183,206,197,190, 61,137,202,191, 80, 38,157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 66,200, 0, 0, 13, 65, 31,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 94,201,118,
+ 62,213,189,192, 62, 67, 27,142,190, 55, 93,214,190,131,154, 6,190,178, 48,133,190,192, 11,139,189,147,123, 39,191, 57,130, 29,
+190, 33,253, 46, 63, 24, 89,224, 61,198,174,189, 61,101,152, 2, 62,128,237,143, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0,
+ 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,117,122, 59, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,192, 26, 80, 92,189,239, 3,232, 64, 99,210,182,191, 55, 81,190,
+191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,200,190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 66,200, 0, 0, 13, 65, 32,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+190,153, 16,148,191, 33, 1,224, 62,168,253, 43, 63, 35, 36,254,191, 19,255,124,190,138, 97, 70, 62, 6,109,188,190,223, 58, 64,
+189,189,121,154, 62,170,126, 9, 62,126,248,115, 63, 12, 41, 84, 62, 4, 55,153, 61,152, 85, 62, 0, 0, 0, 0, 0, 0, 0, 0,
+ 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 61,106,244, 74, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0,
+ 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,190, 70,245, 80,192, 37,148,136, 64, 57,107, 41,
+191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,200,190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 13, 65, 33,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 62,249,246, 44, 62,140,102,200, 63, 10,199,154, 63, 32,102, 40,191, 19, 10, 78,190,250,238,224,190,111, 13, 0,
+ 61,187,232,243, 62, 99, 10,106, 62,221, 96,163, 61,239,237,208, 61,210, 34, 10, 62,181,101, 62, 62,218, 22,205, 0, 0, 0, 0,
+ 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63, 25,143, 35, 0, 0, 0, 0,255,255,255,255,
+ 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,191, 25,172,253,191,249,234, 68,
+ 64, 73,217, 59,191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,200,190, 61,137,199,191, 80, 38,158,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 13, 65, 34,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 62,230,109,205,190,189, 47, 67,189,155,119,205,191, 79, 53,238,191, 88,144,223, 62,146,163, 88,
+190,208, 99, 63, 62,130,235,236,190, 17, 10, 72, 63, 15,223,124, 62, 64,172, 12, 62, 51, 24,160, 62,156, 49,145, 62,169,236, 26,
+ 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63, 72,237,254, 0, 0, 0, 0,
+255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,192, 60, 63, 77,
+191,245, 70,192, 63,248,177,246,191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,200,190, 61,137,199,
+191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 13, 65, 35,144, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 16,162, 50,190,219,180, 33,190,177,166, 24,191, 29, 8,234,190, 48, 26, 24,
+190,115, 70,240, 63, 54,197, 0, 62, 75,201, 69,189, 10,174, 28, 63, 78,128, 81, 60,175,109,172, 62,214,135, 7, 63, 9, 12, 59,
+ 60,198,154,150, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 62,138, 50, 34,
+ 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 63,162,125, 6,192, 64,233, 63, 64, 86,167,147,191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,200,
+190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 13, 65, 36,144, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 11,120,234,190,253, 35,200,190,233,152, 2,191, 0, 38, 0,
+191, 36, 3,214,190, 45,239, 3,191, 9,175,135,190, 42,130, 18, 63, 38,197,156,190,238, 37,181, 61,119, 49, 4, 60,224,251,119,
+ 62, 47, 5, 94, 63, 61,195,188, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0,
+ 62,191,162, 89, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
+ 0, 0, 0, 0,192, 27, 96,184,191,179, 23,251, 64, 38, 77,193,191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234,
+190,183,206,200,190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 13, 65, 37,144,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,191, 32,231,177, 62,239, 89,150,190,188,156,128,
+191, 0, 45,225, 62,210,133,247, 63, 40,169, 51, 63, 26,184,146,190,223, 39,209,191, 15,238,182,190,146, 63, 75, 61,213,161,166,
+ 62,218,242,217, 62,191, 18, 39, 61,194, 74, 89, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0,
+ 63,128, 0, 0, 61,129,236, 81, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0,191, 21, 0,185,192, 14,241,137, 64, 61, 27,206,191, 55, 81,190,191, 71,243,109, 63, 42,237,100,
+ 62,214,163,234,190,183,206,200,190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0,
+ 13, 65, 38,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,190,213, 79,214, 63, 10, 19, 95,
+191, 56, 25, 60, 62, 10,193,193,190, 10,232,127,190, 93,126,162, 63, 7,169, 25,190,221,209, 38, 62,186,214, 52,191, 41, 63, 21,
+ 62, 27, 36, 58, 62, 28,151,245, 62,179, 23, 82, 62,177, 10,148, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0,
+ 0, 0, 0, 0, 63,128, 0, 0, 63, 41,241, 98, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0,
+ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,189, 57, 80, 64,191,166, 80,193, 64,123,172,242,191, 55, 81,190,191, 71,243,109,
+ 63, 42,237,100, 62,214,163,234,190,183,206,201,190, 61,137,200,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 66,200, 0, 0, 13, 65, 39,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62,232,174,160,
+ 61,164, 99, 64, 63, 12,108, 41,191, 50,126,106, 62,124,117, 66, 63, 82, 54,134, 62,191, 55, 38,190,197,232,121,189, 70,203,188,
+191, 51, 88, 26, 62,170,225,199, 62, 23, 67,114, 62, 33, 56,202, 62,184,224, 26, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0,
+ 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 61,138,213,216, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,190,219,106,202, 63,127,216, 17, 64,173,251,140,191, 55, 81,190,
+191, 71,243,110, 63, 42,237, 98, 62,214,163,235,190,183,206,198,190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 66,200, 0, 0, 13, 65, 40,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+190,213, 79,214, 63, 10, 19, 95,191, 56, 25, 60, 62, 10,193,193,190, 10,232,127,190, 93,126,162, 63, 7,169, 25,190,221,209, 38,
+ 62,186,214, 52,191, 41, 63, 21, 63, 79,203, 10, 62, 32, 14,104, 60, 44,238,252, 60,175,180, 55, 0, 0, 0, 0, 0, 0, 0, 0,
+ 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63, 41,241, 98, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0,
+ 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,192, 91, 39,111,191,150, 81, 64, 64, 15, 68, 89,
+191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,200,190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 13, 65, 41,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,191, 0,212,130,191, 38,161, 15,190,123,203,131,191, 3, 48,207, 63, 64, 6,112,190, 34, 53,137,191, 6,202,175,
+ 62, 19,241, 66,190, 85,105,119, 61,146,246,149, 60, 25, 88, 25, 63, 25, 74, 85, 62,196,185,199, 59,249,179,210, 0, 0, 0, 0,
+ 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63, 90,223,198, 0, 0, 0, 0,255,255,255,255,
+ 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 63, 40, 17,231,190,153, 44,141,
+ 64,161,123, 68,191, 55, 81,190,191, 71,243,107, 63, 42,237,102, 62,214,163,235,190,183,206,200,190, 61,137,205,191, 80, 38,157,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 13, 65, 42,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 63, 68,219, 69, 62, 74, 75,190, 62,229,129,250,190,210, 78,198,188, 59, 63, 65, 62,214,173,173,
+ 62, 85,159, 18,189,185,160, 25,191, 46,193,169,190, 77, 21,177, 63, 32,133,202, 61, 36,163, 25, 60,225,136, 45, 62,156, 71,133,
+ 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 61,141,208, 22, 0, 0, 0, 0,
+255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 63,160, 95, 50,
+191,249,101, 34, 64,132, 96,176,191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,200,190, 61,137,199,
+191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 13, 65, 43,144, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,189,236, 25,179, 63, 27,158,127, 62,239,235,123, 63, 33,108, 59,190,103,198,244,
+ 62,187,192,251,190,101, 39,179, 62,138,210,110,191, 54,168,145,190, 63, 20,208, 62,138, 45, 62, 61, 30,142, 35, 61,128, 78,173,
+ 63, 32,246,170, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,109,210, 2,
+ 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+192, 6,133,111,191,225,152,167, 64, 32, 16, 84,191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,200,
+190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 13, 65, 44,144, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62,241, 57,184, 62,173,244,209, 61,188,195,202, 63, 79, 10,229,
+191, 34,223, 15,190, 40, 65,171, 61, 38,228,158, 63, 12,225,187,189, 13,196,198,191, 14,253,185, 61,217,107,245, 62,174,147,253,
+ 62,218,232,227, 62, 0, 80, 70, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0,
+ 62,183,168, 8, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
+ 0, 0, 0, 0,190,228, 99, 80,191, 51, 59, 44, 64,133, 75,221,191, 55, 81,192,191, 71,243,109, 63, 42,237, 98, 62,214,163,234,
+190,183,206,197,190, 61,137,202,191, 80, 38,157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 13, 65, 45,144,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 23,191, 52, 62, 82,209,247, 62,204, 21, 34,
+ 63, 43, 58, 21, 61,139, 3, 1, 61,135,159, 52,189, 36,117, 30, 62,244,123,230, 62,185,104, 79, 63, 33, 73, 17, 62,213,208,117,
+ 62, 76,118,118, 62, 5,254, 32, 62,128,245, 65, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0,
+ 63,128, 0, 0, 63, 4,246,179, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0,192, 74,101, 85,191,105,185,166, 64, 36,141, 18,191, 55, 81,190,191, 71,243,109, 63, 42,237,100,
+ 62,214,163,234,190,183,206,200,190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0,
+ 13, 65, 46,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 3,157,221, 62,215, 81, 67,
+ 63, 5, 46,135,191, 9,108,121,190, 16, 83, 37,190,130,244, 37, 62,216, 18,191, 63, 53, 44,221,189,162,136,153,190,252,138, 80,
+ 61,102,214,221, 63, 25, 22, 50, 62,157, 42,139, 61, 30,113,164, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0,
+ 0, 0, 0, 0, 63,128, 0, 0, 63, 26,208,145, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0,
+ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,191,218,234,122,191,232,177, 50, 64, 42,174,108,191, 55, 81,190,191, 71,243,109,
+ 63, 42,237,100, 62,214,163,234,190,183,206,200,190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 66,200, 0, 0, 13, 65, 47,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,191, 59, 41, 98,
+ 61,252, 70,236,191, 25, 96, 77,190,154,195, 33,190,242,119, 31,190,204, 79,125,190, 18, 53, 23,190,214, 31,102,190,199,174,165,
+188,169,105, 48, 62, 8, 50,229, 62,148,251,227, 62,206, 65,133, 62, 49, 82, 75, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0,
+ 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63, 5,230, 44, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,191,206,106,254, 62,150, 36,205, 64,137, 42, 96,191, 55, 81,190,
+191, 71,243,107, 63, 42,237,100, 62,214,163,235,190,183,206,198,190, 61,137,203,191, 80, 38,157, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 66,200, 0, 0, 13, 65, 48,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 63, 23,191, 52, 62, 82,209,247, 62,204, 21, 34, 63, 43, 58, 21, 61,139, 3, 1, 61,135,159, 52,189, 36,117, 30, 62,244,123,230,
+ 62,185,104, 79, 63, 33, 73, 17, 62,231, 15, 87, 62,207,237, 49, 61,141, 43,254, 61,150,225,226, 0, 0, 0, 0, 0, 0, 0, 0,
+ 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63, 4,246,179, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0,
+ 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 63,167, 61,200,191,171, 5,119, 64,147,214, 86,
+191, 55, 81,190,191, 71,243,109, 63, 42,237, 98, 62,214,163,236,190,183,206,197,190, 61,137,201,191, 80, 38,157, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 13, 65, 49,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 63, 70, 39,111,188,218,103, 91, 63, 30, 24, 44, 62, 12, 81, 28, 63, 16,129, 26, 61,162,153,215,191, 31,203, 11,
+ 63, 2,132,222,190,154, 4, 26, 62,100,112,202, 62,214, 36,216, 60,122, 85,172, 60,142,247, 44, 63, 12,140,132, 0, 0, 0, 0,
+ 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,115, 61, 48, 0, 0, 0, 0,255,255,255,255,
+ 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,191,251, 14,194,190,105,213, 44,
+ 64,109,188,165,191, 55, 81,190,191, 71,243,107, 63, 42,237,100, 62,214,163,235,190,183,206,198,190, 61,137,203,191, 80, 38,157,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 13, 65, 50,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,191, 3, 49,173, 63, 9,133,178, 63, 16, 18,104, 62,186, 16,159, 62,245,147,183, 62,111, 88,220,
+ 63, 2, 25,220,191, 77, 44, 80, 62,152,136, 76, 61,176,242,126, 62,155, 13,239, 62,234, 17, 40, 62, 13,128, 92, 61,208,130,226,
+ 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 62,208,147, 65, 0, 0, 0, 0,
+255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,192, 46, 47,102,
+ 63, 45,212, 64, 64,127, 35, 61,191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,200,190, 61,137,199,
+191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 13, 65, 51,144, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 48,164, 8,191, 38,100, 32,190,157,157,163, 61,167, 78, 10, 59, 54, 8, 4,
+190,147,155,139, 63, 50, 41, 11, 62,140,101, 27, 63,110,237,241, 59,179,188, 18, 62,165, 31, 74, 63, 37,208,207, 60,141,227, 74,
+ 60, 76, 28, 8, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 62, 80, 24,129,
+ 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+191, 83,203, 10,192, 29, 15,133, 64, 42, 82,237,191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,200,
+190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 13, 65, 52,144, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,190,232,194, 41, 63, 35,110,156,190, 75,200,233,191, 22,158,170,
+189,193,122, 83,189,149, 58,217,191, 18, 15, 80,189,145, 37, 66,189,219,184, 98,191, 86,185, 70, 61,239,150, 21, 62, 24,193,130,
+ 62,217, 71, 46, 62,158,114,141, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0,
+ 63, 75,231,122, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
+ 0, 0, 0, 0, 63,102, 71, 47,191, 44, 13, 16, 64,156,187, 24,191, 55, 81,190,191, 71,243,109, 63, 42,237, 98, 62,214,163,236,
+190,183,206,197,190, 61,137,201,191, 80, 38,157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 13, 65, 53,144,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,190, 61, 40,120,191, 15,196,150,191, 54,219,159,
+ 62,191,195,234,190,122, 96,104,191, 74, 71,193,190, 56,230, 15, 61,203,156, 61, 61,177, 39,227,190,193,222, 25, 63, 13,206,178,
+ 60,237,101,144, 60,198,227, 16, 62,201, 30, 16, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0,
+ 63,128, 0, 0, 61,189,137, 74, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 62,252,210,140,191, 44, 58,216, 64,149,217, 98,191, 55, 81,192,191, 71,243,109, 63, 42,237, 98,
+ 62,214,163,234,190,183,206,197,190, 61,137,202,191, 80, 38,157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0,
+ 13, 65, 54,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 38,152, 86,191, 17,225,169,
+189,140,217, 57,190,254,124, 67, 62, 17, 65, 13, 63, 15,204,229, 62,241,148,180,191, 73,210,175, 63, 21,161,182,188,169,222,186,
+ 63, 4,174,235, 61,156,216,125, 61,115,228,114, 62,176,239,124, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0,
+ 0, 0, 0, 0, 63,128, 0, 0, 61,165,104, 86, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0,
+ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,192, 46,210,181,191,135, 4, 59, 64, 44, 99,164,191, 55, 81,190,191, 71,243,109,
+ 63, 42,237, 98, 62,214,163,236,190,183,206,197,190, 61,137,202,191, 80, 38,157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 66,200, 0, 0, 13, 65, 55,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 45, 97,119,
+190,205, 47,119, 63, 19,117, 35, 62, 98,125,166, 62, 73,195,242, 62,243,228,124, 63, 11, 86,119, 62, 89,156, 70, 63, 88,232,230,
+190,204, 53,130, 61,201, 69,154, 63, 3,143, 74, 62,162, 10,155, 61,146, 21,186, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0,
+ 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 62,253,129, 53, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 60, 64,235, 64, 63,147,210,203, 64,185, 32,205,191, 55, 81,190,
+191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,201,190, 61,137,200,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 66,200, 0, 0, 13, 65, 56,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 62,136,137,130,191,106, 7,101,190,155,249,249, 60,155,218,146,188,184,212,179,189,201,215, 68,191, 61,244, 40, 61, 70,234,114,
+191, 1,226,154, 63, 91,139,119, 63,109,168,135, 61,112, 44, 87, 59,115, 72,106, 60, 24, 90,214, 0, 0, 0, 0, 0, 0, 0, 0,
+ 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63, 87, 40, 6, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0,
+ 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,192, 0,185,160,192, 38,235,197, 63,245,221,182,
+191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,200,190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 13, 65, 57,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 62,241, 54,241,190, 60, 75, 25,190,166, 31,137, 63, 76,162, 26, 62,180, 23,214,191, 22, 28,134, 62,184,125,189,
+ 63, 49,143,170, 62,208,100, 42, 63, 12,182,201, 61,103,123, 85, 62, 90, 65,230, 63, 29,215, 33, 61,233, 5,124, 0, 0, 0, 0,
+ 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63, 78, 6,233, 0, 0, 0, 0,255,255,255,255,
+ 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,191,247,118,132,192, 8, 66, 87,
+ 64, 20, 88, 93,191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,200,190, 61,137,199,191, 80, 38,158,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 13, 65, 58,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 62,157,149,183, 62,150,241,169, 63, 5, 72,210,191, 61, 98,196,191,103, 43, 94, 62, 13,249,141,
+190, 28, 40,108,189, 89,143,180, 62,180,169,159, 63,102,210, 50, 61,186,245, 15, 62,140,211,252, 62,252,184,237, 62, 15,107,164,
+ 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,126, 53,234, 0, 0, 0, 0,
+255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,190, 2,252, 96,
+192, 63, 32,189, 64, 40,176,249,191, 55, 81,190,191, 71,243,107, 63, 42,237, 98, 62,214,163,235,190,183,206,198,190, 61,137,206,
+191, 80, 38,157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 13, 65, 59,144, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62,185,185,227,190,133, 55, 69, 62,246,101, 76,191, 65, 32,146,190, 47,142, 11,
+191, 16,240,207, 60,250, 47,178, 62,135, 12,147,190,192,130,250, 63, 63,224,182, 61,141,251,109, 61,135, 15,209, 62,212,122,152,
+ 62,230, 66,150, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 62,201, 22,194,
+ 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+192, 60, 37,186,192, 19, 36,209, 63,212,102,200,191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,200,
+190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 13, 65, 60,144, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,190,253,116,133, 63, 23,178,160,191, 32, 78,114, 61,221, 97, 57,
+189,236,244,191, 62,214, 56,206,191, 40,142, 77, 61,161, 48, 31, 63, 7, 95, 82,190, 62, 70,244, 59,141,146,144, 62,182,189, 24,
+ 63, 34, 24, 12, 59,183, 33,242, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0,
+ 63, 90, 4, 51, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
+ 0, 0, 0, 0, 63,155,165, 62,191,200,188, 35, 64,140,201,156,191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234,
+190,183,206,200,190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 13, 65, 61,144,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62,205,198, 68, 63, 99, 21, 50,190, 86,246, 18,
+189,178, 24,237, 62, 74,177,229,190,174, 94,233,189, 17,113, 14, 62,211,148,144,190, 80,182,157,191, 66,214, 18, 62,182,112, 54,
+ 61, 2,202,156, 61, 40,146, 65, 63, 18, 18, 24, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0,
+ 63,128, 0, 0, 62,124, 84,229, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 63, 1, 48,150, 62,211, 14,133, 64,175,209,120,191, 55, 81,190,191, 71,243,107, 63, 42,237,102,
+ 62,214,163,235,190,183,206,200,190, 61,137,205,191, 80, 38,157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0,
+ 13, 65, 62,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60,181, 0, 30, 63, 39, 21,183,
+191, 42, 28,174, 62,185,254,206, 61,180,101, 60, 62,162,164,224,191, 78, 22,169,190,146,164, 15, 62,188, 47, 66,191, 63,255,233,
+ 63, 76, 61, 26, 60,171,234,214, 60, 47,187,230, 62, 46,146,126, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0,
+ 0, 0, 0, 0, 63,128, 0, 0, 63, 41,195,113, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0,
+ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 62, 98,144,196,191,112,190, 62, 64,138,224,153,191, 55, 81,190,191, 71,243,109,
+ 63, 42,237,100, 62,214,163,234,190,183,206,200,190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 66,200, 0, 0, 13, 65, 63,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,190,148, 80,255,
+ 63, 5,138, 17, 62, 38, 16,171,191, 73, 50,107, 63, 32,126,214, 62,148, 14,143,191, 4, 31,183, 62,145,152, 70,189, 89, 32, 21,
+ 62,100,239, 63, 62,220,212, 51, 61,238, 96, 49, 61,205,246, 1, 62,180, 22, 64, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0,
+ 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63, 76, 33,247, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,192, 2,243, 80,191, 91, 84, 18, 64, 77, 0,110,191, 55, 81,190,
+191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,200,190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 66,200, 0, 0, 13, 65, 64,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+191, 69,146, 49,190, 69,123,236,191, 26,188,179,189, 47,182,207,191,105, 14, 96,190, 31,120, 55, 62, 18, 41,138,189,183, 73,210,
+189, 57, 99,105,190,137,155, 32, 62, 79,143,112, 62,220, 36, 13, 62,119,171,207, 62, 0,124,168, 0, 0, 0, 0, 0, 0, 0, 0,
+ 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 62,199,151,184, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0,
+ 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 62, 34, 81,228,192, 39, 55,178, 64, 68, 36, 87,
+191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,200,190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 13, 65, 65,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 63, 3,148,230, 62,239, 68,224, 62,241, 64, 72,191, 11, 35, 71,191, 31,202,248, 62,182, 98, 68,191, 48,127, 18,
+189, 26,108,158,190,173, 93,145,191, 16,155,161, 61,244, 72,144, 61,173, 98,152, 62,154,243, 16, 62,252,162, 38, 0, 0, 0, 0,
+ 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 62,245,111, 69, 0, 0, 0, 0,255,255,255,255,
+ 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,191,132,206,226,191,254,157,153,
+ 64, 57, 78, 61,191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,200,190, 61,137,199,191, 80, 38,158,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 13, 65, 66,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 62,217, 64, 45,190,213, 24,151, 61,187,174, 94, 63, 76,136,102, 63, 32, 1, 27,189,162, 95,236,
+191, 29, 18,124,190,155, 78, 75,191, 43,134,124,190,184,202,174, 62, 35,138, 49, 62, 85,209,237, 62,186, 75,126, 62,137, 6,113,
+ 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 61, 76,100,111, 0, 0, 0, 0,
+255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 62,237,163,228,
+192, 58, 20, 55, 64, 64,122, 9,191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,200,190, 61,137,199,
+191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 13, 65, 67,144, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,189, 55, 95, 82,190,181, 21, 43,191,101, 3,230, 62,137,248, 87, 62, 75,208, 4,
+ 59,115,115, 0,190, 95,196,100, 62, 83, 15,191,191, 81,222, 84, 62,169, 58, 36, 61,163,215,187, 61, 92,207, 90, 62,152,248,188,
+ 63, 17, 59,182, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,112,119,230,
+ 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+191,148, 59,202,191, 56,242,188, 64,113,111,189,191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,200,
+190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 13, 65, 68,144, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61,192, 21,202, 63, 8, 22,216, 63, 66, 84,188, 62,186, 70,158,
+ 62, 98,211,240, 62,155, 7,124, 62,246,134, 10,190, 79, 16,110,189,252,197,248, 63, 39,188, 81, 62,169,204, 42, 62,154,195,204,
+ 62, 51,225,146, 62, 66,254,125, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0,
+ 63, 81, 26,123, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
+ 0, 0, 0, 0,191,252,179, 34,191,184,102, 86, 64, 51,174,169,191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234,
+190,183,206,200,190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 13, 65, 69,144,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,190,144, 50,232,191, 50, 31,207,191, 40,203,179,
+189, 45, 99,214,190, 34,153,109,191, 10, 94,239,190,212,186,115,190, 19,234, 42,191, 97, 26, 72, 61, 99,105,122, 62, 21,210, 46,
+ 62,186, 32,250, 62,178,126,195, 62, 16,238, 85, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0,
+ 63,128, 0, 0, 60,124,240,131, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0,192, 77,244, 1,190,163, 52, 51, 64, 62,234, 30,191, 55, 81,190,191, 71,243,109, 63, 42,237, 98,
+ 62,214,163,236,190,183,206,197,190, 61,137,202,191, 80, 38,157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0,
+ 13, 65, 70,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,112, 41,126, 61,164,166, 56,
+ 61,240, 4, 91, 62,161,172, 15,190,191,126,106, 63, 64, 33,117, 62,184,227,130,190,244, 20, 92,189,180,168,210,191, 43, 25, 60,
+ 61,198,246, 89, 63, 46,130, 30, 62, 54,241,223, 61, 46, 41,221, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0,
+ 0, 0, 0, 0, 63,128, 0, 0, 62,107,196,190, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0,
+ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 63,122, 27,255,191,133,229,179, 64,149, 39, 66,191, 55, 81,190,191, 71,243,107,
+ 63, 42,237,102, 62,214,163,235,190,183,206,200,190, 61,137,205,191, 80, 38,157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 66,200, 0, 0, 13, 65, 71,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,191, 24, 46,192,
+191, 43, 20, 41, 62,183,184,186, 62,136,173, 42, 63, 50, 75, 75, 62,126, 83, 40, 63, 8,195,188, 62,238,211,234, 61,152, 36, 69,
+ 62,145,106,235, 62,239, 4,216, 61, 21,100,235, 61, 20, 73,174, 62,235,197, 83, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0,
+ 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63, 57,122, 93, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,191,151, 66, 20,192, 62,139,208, 64, 5,118, 98,191, 55, 81,190,
+191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,200,190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 66,200, 0, 0, 13, 65, 72,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+190, 32,160,159,191, 52, 39,190,191, 9,138,142, 62,224, 13,138, 62,242,218,166, 63, 26, 71, 93, 62, 52, 22, 36, 62,124, 52,231,
+190,192, 91,165,191, 86,111,148, 61,120,101,212, 61,221, 26, 72, 63, 22, 82,158, 62,122, 14,241, 0, 0, 0, 0, 0, 0, 0, 0,
+ 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63, 22, 96,195, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0,
+ 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,190, 46, 63,224,191,107,105,222, 64,132,191,198,
+191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,201,190, 61,137,200,191, 80, 38,158, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 13, 65, 73,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 63, 55,202, 47,190, 89,235,249,190, 92, 18,127,191, 32,129,146,190, 8,212, 7,190,171, 50,167, 62,123,120, 97,
+189,249,152,232, 62,149, 18,140, 61, 13,111, 37, 62,204,238, 89, 62, 39, 90, 10, 62, 6,156,123, 62,156, 22, 98, 0, 0, 0, 0,
+ 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63, 18, 61,115, 0, 0, 0, 0,255,255,255,255,
+ 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,190,234,148,250,192, 97,179, 11,
+ 64, 3,215, 16,191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,200,190, 61,137,199,191, 80, 38,158,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 13, 65, 74,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,190,248,227,177,190,192,134,160, 62,184,159,155, 63, 51,157,105, 63, 54, 56, 2, 62,182,126, 88,
+187, 4,207,108, 62,198,216, 38,191, 73, 66,140, 61,248,126,139, 60,119, 26,251, 60,150,207, 34, 63, 20,176,170, 62,197,120,225,
+ 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 62,216,234,208, 0, 0, 0, 0,
+255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,191,135,177,202,
+192, 86,220,150, 63,239, 9,144,191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,200,190, 61,137,199,
+191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 13, 65, 75,144, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,191, 18,122,201,190,163, 68,155,191, 39, 36,236,190,194,182,221,190, 98, 47,217,
+190,230, 46, 97, 62,134,236,197, 60,187, 40,216,189,179, 92,111, 63, 54, 17, 71, 61, 5,169, 87, 61, 92,116,120, 63, 38,253,179,
+ 62,133,192,225, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 60,154, 58,100,
+ 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+192,108,105,213, 62,223,145,125, 64, 82,182,192,191, 55, 81,190,191, 71,243,107, 63, 42,237, 98, 62,214,163,235,190,183,206,198,
+190, 61,137,206,191, 80, 38,157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 13, 65, 76,144, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,190, 32,244,195,190,218,189,174, 62, 55, 11,163,191, 95, 75,157,
+190,243,155, 33,191, 90, 86,180, 62, 86,237, 57,190,126,198,226, 61,101, 34, 30,190,180,239, 93, 61,204, 82,206, 63, 89,113, 44,
+ 61, 23, 63, 63, 60,100, 33,220, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0,
+ 63, 50, 63, 6, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
+ 0, 0, 0, 0, 62,243, 23, 76,191,166,133, 46, 64,134,153, 78,191, 55, 81,192,191, 71,243,109, 63, 42,237, 98, 62,214,163,234,
+190,183,206,197,190, 61,137,202,191, 80, 38,157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 13, 65, 77,144,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,191, 49,218,173,191, 23,109,113, 62, 55, 16, 32,
+190,188,117, 54, 62,208, 20, 25,191, 46,245,118,186,236,158, 72,191, 97, 10, 55, 62,183,128,140,190,146,230,177, 62,190, 2,159,
+ 61,193,141, 29, 61,214, 93,214, 62,220, 2,164, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0,
+ 63,128, 0, 0, 63, 48, 85, 96, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0,190,214,192,130,192, 73, 57,182, 64, 23, 83,175,191, 55, 81,190,191, 71,243,109, 63, 42,237,100,
+ 62,214,163,234,190,183,206,200,190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0,
+ 13, 65, 78,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,191, 34,172,206, 62,187, 79, 64,
+ 62, 11,197,140, 63, 42,135,199, 61,148, 91,100, 60, 25, 75,123,189,232,126, 54,189,220,190,210, 62,186,158, 9,190,225, 62,182,
+ 61, 84,103,211, 61,115,194, 92, 62,253,216,148, 62,201, 34, 41, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0,
+ 0, 0, 0, 0, 63,128, 0, 0, 62,162,103, 38, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0,
+ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,192,133, 4,122, 62,128,136,109, 64, 58, 58,136,191, 55, 81,190,191, 71,243,107,
+ 63, 42,237, 98, 62,214,163,235,190,183,206,198,190, 61,137,206,191, 80, 38,157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 66,200, 0, 0, 13, 65, 79,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62,137,206,147,
+ 63, 11,207,234, 62,225,144,195, 63, 40,225,162,190,148, 69, 24, 61,190,238, 50,191, 86, 31, 13, 63, 71,106,217, 62, 1, 60,247,
+ 62,136,250,162, 58,156, 80, 70, 63,108,100,142, 61,153, 72, 15, 58, 17, 35,116, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0,
+ 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 60, 41,199,174, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 62, 12, 40,132,192, 1, 32,102, 64, 95,178,222,191, 55, 81,190,
+191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,200,190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 66,200, 0, 0, 13, 65, 80,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 63, 95, 57,157, 62,214,148,238, 62,109,249, 87,189,204,220,227,189,221,118,238,191, 19,162,121,191, 48, 50,203,190, 80,232, 58,
+191, 8,100,141, 63, 19,142,229, 62, 88,196,223, 61,237, 94,134, 62, 97, 5,141, 62,231,195, 43, 0, 0, 0, 0, 0, 0, 0, 0,
+ 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63, 15, 11, 75, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0,
+ 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 63, 80,109,211,192, 20,210, 96, 64,103,253,246,
+191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,200,190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 13, 65, 81,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 62,133, 32, 88,190,189,201, 13, 63, 66, 43, 55, 62,239,254, 76, 62,179,163,254,188,171,181, 15, 60,196, 8,130,
+191, 14, 27,214,190,128, 32, 86,190,208, 27,190, 62, 53,196, 69, 61,135,184,136, 62, 35,250,240, 63, 24,153, 34, 0, 0, 0, 0,
+ 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 62,234, 93,224, 0, 0, 0, 0,255,255,255,255,
+ 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,191,147,142,240,190,166, 7, 43,
+ 64,130, 69, 61,191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,200,190, 61,137,199,191, 80, 38,158,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 13, 65, 82,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 62,249,246, 44, 62,140,102,200, 63, 10,199,154, 63, 32,102, 40,191, 19, 10, 78,190,250,238,224,
+190,111, 13, 0, 61,187,232,243, 62, 99, 10,106, 62,221, 96,163, 62,206,243, 56, 62,159,170,109, 62, 2,145,224, 62, 32, 50,211,
+ 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63, 25,143, 35, 0, 0, 0, 0,
+255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,191, 89,254, 2,
+192, 85,197,195, 63,254,197,176,191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,200,190, 61,137,199,
+191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 13, 65, 83,144, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62,204,125,122, 63, 46, 10, 37,190, 26, 71, 69, 63, 24,168,130,190, 36,105,117,
+ 63, 32,220,144, 62,231,167, 11, 62,179,145,151,190, 36, 72, 33,191, 50, 67, 42, 61, 11, 3,111, 61, 76, 2,241, 63, 28,181,231,
+ 62,155,179,103, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 62,188,186,244,
+ 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+191,253, 46, 24, 61,214,126,200, 64,125, 1,248,191, 55, 81,190,191, 71,243,109, 63, 42,237, 98, 62,214,163,236,190,183,206,197,
+190, 61,137,202,191, 80, 38,157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 13, 65, 84,144, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,190,181,218,171, 63, 80,100,162,190,175, 18, 86,190,157, 51,142,
+191, 4, 35, 18, 62,210,113,207, 63, 11,170, 0,190,165,126,134, 62, 59, 47,141,191, 62,163,104, 62,181,251, 18, 62,242,163,225,
+ 61,191, 98, 90, 61,158, 33,220, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0,
+ 63,104, 76, 83, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
+ 0, 0, 0, 0,192, 94, 18,115, 61, 49, 61,112, 64, 71,153, 90,191, 55, 81,190,191, 71,243,109, 63, 42,237, 98, 62,214,163,236,
+190,183,206,197,190, 61,137,202,191, 80, 38,157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 13, 65, 85,144,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,112, 41,126, 61,164,166, 56, 61,240, 4, 91,
+ 62,161,172, 15,190,191,126,106, 63, 64, 33,117, 62,184,227,130,190,244, 20, 92,189,180,168,210,191, 43, 25, 60, 61,190,188,141,
+ 63, 68,157,118, 61,224,119,105, 60,239,129,112, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0,
+ 63,128, 0, 0, 62,107,196,190, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0,191,141, 34, 38,192, 39,140,222, 64, 25, 55,182,191, 55, 81,190,191, 71,243,109, 63, 42,237,100,
+ 62,214,163,234,190,183,206,200,190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0,
+ 13, 65, 86,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 85, 40,193,190,146, 79,120,
+190,203,249, 68, 62,131,217,207, 63, 22, 65,229, 63, 63,104,120,189,124,135,173,190,190,179,131, 62,171, 81,208, 63, 69,132,211,
+ 61,189, 6,122, 62, 23,195, 58, 62,254,114, 6, 62,134,106,189, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0,
+ 0, 0, 0, 0, 63,128, 0, 0, 63, 20,102,179, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0,
+ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,192, 63, 14,149,191,165,204, 64, 64, 24, 96, 12,191, 55, 81,190,191, 71,243,109,
+ 63, 42,237,100, 62,214,163,234,190,183,206,200,190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 66,200, 0, 0, 13, 65, 87,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,191, 30, 81, 54,
+ 62,223, 39,157, 63, 11, 30,214, 62,186, 51, 76, 62, 83,228,206, 61, 0,146,209, 63,121,106, 22,187, 6,124, 44,187, 71,233,128,
+ 62,173,190,218, 61, 83, 67, 14, 63, 4,186,192, 62,197,206, 39, 61, 50,159,178, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0,
+ 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 60, 52, 19,208, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,192, 22,180,183,192, 4,173,126, 64, 8,189,240,191, 55, 81,190,
+191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,200,190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 66,200, 0, 0, 13, 65, 88,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+191, 20, 59,104, 63, 17, 36, 30,190,252, 57,112, 62,162,101, 32, 62,160, 6,139, 61, 80,160, 57, 61,245,243,109,190,224, 18, 41,
+188,227,154,182,190,139,196,238, 61,131, 49,133, 62,167, 33,130, 63, 5,225,160, 61,177, 59,124, 0, 0, 0, 0, 0, 0, 0, 0,
+ 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63, 56,166, 20, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0,
+ 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 63, 97,160, 35,191,163,220,129, 64,141,248,194,
+191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,200,190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 13, 65, 89,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 62,157,149,183, 62,150,241,169, 63, 5, 72,210,191, 61, 98,196,191,103, 43, 94, 62, 13,249,141,190, 28, 40,108,
+189, 89,143,180, 62,180,169,159, 63,102,210, 50, 62,206,174, 78, 61, 93,159, 68, 61,118, 84,160, 62,246,211, 54, 0, 0, 0, 0,
+ 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,126, 53,234, 0, 0, 0, 0,255,255,255,255,
+ 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,192, 18,223, 4,191,140,169,155,
+ 64, 57, 18,151,191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,200,190, 61,137,199,191, 80, 38,158,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 13, 65, 90,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 63, 44, 63,186, 62,136,104,134, 63, 32,117, 44,190,147,227,178, 63, 90, 77,254,190,175,117, 0,
+ 62,167, 69,119, 61,138, 73,238, 62,189,211, 58,191, 37, 28,210, 62, 21, 96,245, 62,227,104, 35, 62,154, 62, 83, 61,222,164, 64,
+ 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 62,151, 27,130, 0, 0, 0, 0,
+255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,191,179,193,100,
+192, 78,111,251, 63,228, 64,166,191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,200,190, 61,137,199,
+191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 13, 65, 91,144, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,191, 4,101,129, 63, 0, 90,237,190,239,125,104, 63, 3, 31,131,190,212,160,200,
+ 63, 27,217,115,190, 6,189, 55,190, 22,223,131,190,223,241, 4,190, 0, 70, 4, 61, 35,242, 37, 61,171,214,204, 63, 46, 25,175,
+ 62, 72,177, 82, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 62,202,249,184,
+ 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+191,124, 90, 93,191,212, 48,113, 64, 74,208, 56,191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234,190,183,206,200,
+190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 13, 65, 92,144, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,189,236, 25,179, 63, 27,158,127, 62,239,235,123, 63, 33,108, 59,
+190,103,198,244, 62,187,192,251,190,101, 39,179, 62,138,210,110,191, 54,168,145,190, 63, 20,208, 62, 81,178,187, 62,108, 57,176,
+ 62,153,177, 93, 62,135, 88,108, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0,
+ 63,109,210, 2, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
+ 0, 0, 0, 0,192, 33,231,251,191, 59, 2,132, 64, 66,162, 78,191, 55, 81,190,191, 71,243,109, 63, 42,237,100, 62,214,163,234,
+190,183,206,200,190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 13, 65, 93,144,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,191, 24, 46,192,191, 43, 20, 41, 62,183,184,186,
+ 62,136,173, 42, 63, 50, 75, 75, 62,126, 83, 40, 63, 8,195,188, 62,238,211,234, 61,152, 36, 69, 62,145,106,235, 62, 30, 15,217,
+ 63, 4,209,227, 62,117,148,178, 61,178, 39,218, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0,
+ 63,128, 0, 0, 63, 57,122, 93, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 63,138,185, 2,192, 41,128,191, 64, 97,193,139,191, 55, 81,190,191, 71,243,109, 63, 42,237,100,
+ 62,214,163,234,190,183,206,200,190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0,
+ 13, 65, 94,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62,168,120,231,191, 7,154,179,
+ 63, 48,180, 41,190,187,232,239,191,104, 35, 9, 62,114, 8,222,190,177,143, 76,191, 28, 29,107, 62,234,112,210,190, 92,249, 9,
+ 61,250,196, 0, 61, 62,120, 79, 62, 31, 12,195, 63, 44,252,202, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0, 66,200, 0, 0,
+ 0, 0, 0, 0, 63,128, 0, 0, 62,184, 4, 74, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0,
+ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,190,243, 63,242,191,159,176, 86, 64,111,150,245,191, 55, 81,190,191, 71,243,109,
+ 63, 42,237,100, 62,214,163,234,190,183,206,200,190, 61,137,199,191, 80, 38,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 66,200, 0, 0, 13, 65, 95,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,191, 58, 26,166,
+ 62,159, 70, 1, 63, 2,111,113,190,173,187,235, 62,237, 51,116, 62,247, 53,130,190, 26,199,243,189,172, 88,235, 62,244,115,118,
+191, 5,147, 34, 62,158, 77,217, 62, 72,131, 43, 62, 68,208,119, 62,155, 8, 86, 0, 0, 0, 0, 0, 0, 0, 0, 66,200, 0, 0,
+ 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,110,152,253, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 9,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,191, 48,178,198, 62, 52, 39,138, 64,149,252, 39,191, 55, 81,190,
+191, 71,243,107, 63, 42,237,100, 62,214,163,235,190,183,206,198,190, 61,137,203,191, 80, 38,157, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 66,200, 0, 0, 13, 65, 96,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+190,210,167, 41, 62,139,172,194, 63, 35,220,250,191, 22,182, 30, 61,136, 3,122,190,176,164,109,190,147,153, 30,188, 10,248,255,
+190,160, 90,234,190,205,241, 89, 63, 19, 71, 62, 62,107,215,111, 61,138, 71, 63, 62, 1,231,243, 0, 0, 0, 0, 0, 0, 0, 0,
+ 66,200, 0, 0, 66,200, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 62, 77,227, 37, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0,
+ 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 13, 64,203,144, 0, 0, 1, 37,
+ 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 84, 7,
+ 59,124,223,255, 62,131,146, 58, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 84,135, 60,124,223,255, 63, 2, 71,187,
+ 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,136, 61, 14, 62, 15, 63, 65,123,219, 66, 22, 0, 0, 63, 32, 0, 0,
+ 0, 0, 0, 0,188,145, 84,231, 61,124,224, 31, 63,127,101,126, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,203,
+ 61,197,143, 15, 63,158, 2, 82, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,168, 62, 14, 62, 15, 63,187,172,165,
+ 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 59, 62, 65,155,151, 63,216,177,185, 66,175, 0, 0, 62, 0, 0, 0,
+ 0, 0, 0, 0,189,145, 85, 15, 62,124,224, 31, 63,245, 17,143, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+ 0, 0, 0,216, 13, 64,204,144, 0, 0, 1, 37, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0,186,145, 84, 7, 59,124,223,255, 62,131,146, 57, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,
+187,145, 85, 7, 60,124,223,255, 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,136, 61, 14, 61,255,
+ 63, 65,123,219, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 7, 61,124,224, 15, 63,127,101,126, 66, 72, 0, 0,
+ 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,203, 61,197,143, 15, 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,
+189, 35,127,152, 62, 14, 62, 15, 63,187,172,165, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 59, 62, 65,155,147,
+ 63,216,177,185, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 15, 62,124,224, 27, 63,245, 17,142, 66,200, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 13, 64,205,144, 0, 0, 1, 37, 0, 0, 0, 9, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 85, 7, 59,124,223, 63, 62,131,146, 57,
+ 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85, 7, 60,124,223,191, 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0,
+ 0, 0, 0, 0,188, 35,127,168, 61, 14, 61,239, 63, 65,123,219, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 23,
+ 61,124,223,251, 63,127,101,125, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,235, 61,197,143, 3, 63,158, 2, 81,
+ 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,184, 62, 14, 62, 7, 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0,
+ 0, 0, 0, 0,189, 94,138, 59, 62, 65,155,142, 63,216,177,184, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 23,
+ 62,124,224, 23, 63,245, 17,142, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 13, 64,206,144,
+ 0, 0, 1, 37, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+186,145, 82, 7, 59,124,223,255, 62,131,146, 56, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 84, 7, 60,124,223,255,
+ 63, 2, 71,186, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127, 8, 61, 14, 61,255, 63, 65,123,218, 66, 22, 0, 0,
+ 63, 32, 0, 0, 0, 0, 0, 0,188,145, 84,199, 61,124,224, 15, 63,127,101,123, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,
+188,227, 20,171, 61,197,143, 15, 63,158, 2, 80, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,136, 62, 14, 62, 15,
+ 63,187,172,163, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 43, 62, 65,155,151, 63,216,177,182, 66,175, 0, 0,
+ 62, 0, 0, 0, 0, 0, 0, 0,189,145, 84,255, 62,124,224, 31, 63,245, 17,139, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 0, 0, 0,216, 13, 64,207,144, 0, 0, 1, 37, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 85, 7, 59,124,223,127, 62,131,146, 57, 65, 72, 0, 0, 63, 96, 0, 0,
+ 0, 0, 0, 0,187,145, 85, 7, 60,124,223,191, 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,168,
+ 61, 14, 61,243, 63, 65,123,219, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 15, 61,124,223,251, 63,127,101,125,
+ 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,235, 61,197,143, 5, 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0,
+ 0, 0, 0, 0,189, 35,127,180, 62, 14, 62, 8, 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 59,
+ 62, 65,155,142, 63,216,177,184, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 11, 62,124,224, 23, 63,245, 17,141,
+ 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 13, 64,208,144, 0, 0, 1, 37, 0, 0, 0, 9,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 82, 7, 59,124,223,255,
+ 62,131,146, 57, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 84, 7, 60,124,223,223, 63, 2, 71,187, 65,200, 0, 0,
+ 63, 64, 0, 0, 0, 0, 0, 0,188, 35,126,200, 61, 14, 61,247, 63, 65,123,219, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,
+188,145, 84,135, 61,124,224, 7, 63,127,101,125, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,107, 61,197,143, 11,
+ 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,104, 62, 14, 62, 11, 63,187,172,164, 66,150, 0, 0,
+ 62,128, 0, 0, 0, 0, 0, 0,189, 94,137,251, 62, 65,155,145, 63,216,177,185, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,
+189,145, 84,231, 62,124,224, 27, 63,245, 17,142, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216,
+ 13, 64,209,144, 0, 0, 1, 37, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0,186,145, 84, 7, 59,124,223,255, 62,131,146, 58, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85, 7,
+ 60,124,223,255, 63, 2, 71,188, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,136, 61, 14, 61,255, 63, 65,123,220,
+ 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 84,231, 61,124,224, 15, 63,127,101,127, 66, 72, 0, 0, 63, 0, 0, 0,
+ 0, 0, 0, 0,188,227, 20,235, 61,197,143, 15, 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,184,
+ 62, 14, 62, 11, 63,187,172,165, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 75, 62, 65,155,147, 63,216,177,185,
+ 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 23, 62,124,224, 27, 63,245, 17,142, 66,200, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 13, 64,210,144, 0, 0, 1, 37, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 84, 7, 59,124,223,127, 62,131,146, 57, 65, 72, 0, 0,
+ 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85, 7, 60,124,223,223, 63, 2, 71,186, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,
+188, 35,127,136, 61, 14, 61,247, 63, 65,123,219, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 7, 61,124,223,251,
+ 63,127,101,125, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,235, 61,197,143, 5, 63,158, 2, 81, 66,122, 0, 0,
+ 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,184, 62, 14, 62, 8, 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,
+189, 94,138, 75, 62, 65,155,142, 63,216,177,184, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 31, 62,124,224, 23,
+ 63,245, 17,142, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 13, 64,211,144, 0, 0, 1, 37,
+ 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 86, 7,
+ 59,124,223,255, 62,131,146, 59, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85,135, 60,124,224, 15, 63, 2, 71,188,
+ 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,128, 8, 61, 14, 62, 7, 63, 65,123,221, 66, 22, 0, 0, 63, 32, 0, 0,
+ 0, 0, 0, 0,188,145, 85, 71, 61,124,224, 23, 63,127,101,127, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 21, 43,
+ 61,197,143, 18, 63,158, 2, 82, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,200, 62, 14, 62, 15, 63,187,172,165,
+ 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 91, 62, 65,155,152, 63,216,177,185, 66,175, 0, 0, 62, 0, 0, 0,
+ 0, 0, 0, 0,189,145, 85, 31, 62,124,224, 34, 63,245, 17,142, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+ 0, 0, 0,216, 13, 64,212,144, 0, 0, 1, 37, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0,186,145, 84,135, 59,124,223,255, 62,131,146, 57, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,
+187,145, 84,223, 60,124,223,255, 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,132, 61, 14, 62, 3,
+ 63, 65,123,220, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 84,252, 61,124,224, 19, 63,127,101,127, 66, 72, 0, 0,
+ 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,207, 61,197,143, 15, 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,
+189, 35,127,169, 62, 14, 62, 13, 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 50, 62, 65,155,147,
+ 63,216,177,185, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 7, 62,124,224, 31, 63,245, 17,142, 66,200, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 13, 64,213,144, 0, 0, 1, 37, 0, 0, 0, 9, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 84, 7, 59,124,223,143, 62,131,146, 56,
+ 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85, 7, 60,124,223,223, 63, 2, 71,186, 65,200, 0, 0, 63, 64, 0, 0,
+ 0, 0, 0, 0,188, 35,127,200, 61, 14, 61,250, 63, 65,123,218, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 7,
+ 61,124,224, 4, 63,127,101,124, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,235, 61,197,143, 11, 63,158, 2, 81,
+ 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,168, 62, 14, 62, 11, 63,187,172,163, 66,150, 0, 0, 62,128, 0, 0,
+ 0, 0, 0, 0,189, 94,138, 43, 62, 65,155,146, 63,216,177,183, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 84,255,
+ 62,124,224, 26, 63,245, 17,140, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 13, 64,214,144,
+ 0, 0, 1, 37, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+186,145, 87, 7, 59,124,223,255, 62,131,146, 58, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85,199, 60,124,223,255,
+ 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,128, 8, 61, 14, 61,255, 63, 65,123,219, 66, 22, 0, 0,
+ 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 71, 61,124,223,255, 63,127,101,125, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,
+188,227, 21, 11, 61,197,143, 11, 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,192, 62, 14, 62, 11,
+ 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 75, 62, 65,155,145, 63,216,177,184, 66,175, 0, 0,
+ 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 23, 62,124,224, 25, 63,245, 17,141, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 0, 0, 0,216, 13, 64,215,144, 0, 0, 1, 37, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 86, 7, 59,124,222,255, 62,131,146, 57, 65, 72, 0, 0, 63, 96, 0, 0,
+ 0, 0, 0, 0,187,145, 85, 7, 60,124,223,191, 63, 2, 71,188, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,200,
+ 61, 14, 61,239, 63, 65,123,221, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 39, 61,124,223,239, 63,127,101,127,
+ 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,235, 61,197,142,255, 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0,
+ 0, 0, 0, 0,189, 35,127,184, 62, 14, 62, 3, 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 75,
+ 62, 65,155,135, 63,216,177,184, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 23, 62,124,224, 17, 63,245, 17,142,
+ 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 13, 64,216,144, 0, 0, 1, 37, 0, 0, 0, 9,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 84, 71, 59,124,223,239,
+ 62,131,146, 58, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 84,199, 60,124,223,255, 63, 2, 71,187, 65,200, 0, 0,
+ 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,120, 61, 14, 62, 2, 63, 65,123,220, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,
+188,145, 84,247, 61,124,224, 17, 63,127,101,126, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,203, 61,197,143, 15,
+ 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,165, 62, 14, 62, 13, 63,187,172,164, 66,150, 0, 0,
+ 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 48, 62, 65,155,147, 63,216,177,185, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,
+189,145, 85, 7, 62,124,224, 28, 63,245, 17,142, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216,
+ 13, 64,217,144, 0, 0, 1, 37, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0,186,145, 86, 7, 59,124,223,255, 62,131,146, 58, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85,135,
+ 60,124,223,255, 63, 2, 71,188, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,128, 8, 61, 14, 61,255, 63, 65,123,221,
+ 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 71, 61,124,224, 15, 63,127,101,127, 66, 72, 0, 0, 63, 0, 0, 0,
+ 0, 0, 0, 0,188,227, 21, 43, 61,197,143, 7, 63,158, 2, 82, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,200,
+ 62, 14, 62, 7, 63,187,172,165, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 91, 62, 65,155,143, 63,216,177,186,
+ 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 31, 62,124,224, 23, 63,245, 17,143, 66,200, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 13, 64,218,144, 0, 0, 1, 37, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 84,135, 59,124,223,255, 62,131,146, 58, 65, 72, 0, 0,
+ 63, 96, 0, 0, 0, 0, 0, 0,187,145, 84,231, 60,124,223,255, 63, 2, 71,186, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,
+188, 35,127,136, 61, 14, 62, 3, 63, 65,123,219, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 84,255, 61,124,224, 17,
+ 63,127,101,125, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,211, 61,197,143, 15, 63,158, 2, 81, 66,122, 0, 0,
+ 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,168, 62, 14, 62, 13, 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,
+189, 94,138, 53, 62, 65,155,148, 63,216,177,185, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 10, 62,124,224, 29,
+ 63,245, 17,142, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 13, 64,219,144, 0, 0, 1, 37,
+ 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 86, 7,
+ 59,124,223,255, 62,131,146, 57, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85,135, 60,124,223,255, 63, 2, 71,187,
+ 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,128, 8, 61, 14, 61,255, 63, 65,123,220, 66, 22, 0, 0, 63, 32, 0, 0,
+ 0, 0, 0, 0,188,145, 85, 71, 61,124,223,255, 63,127,101,126, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 21, 43,
+ 61,197,143, 15, 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,200, 62, 14, 62, 7, 63,187,172,164,
+ 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 83, 62, 65,155,143, 63,216,177,185, 66,175, 0, 0, 62, 0, 0, 0,
+ 0, 0, 0, 0,189,145, 85, 27, 62,124,224, 23, 63,245, 17,142, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+ 0, 0, 0,216, 13, 64,220,144, 0, 0, 1, 37, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0,186,145, 85, 7, 59,124,223,255, 62,131,146, 58, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,
+187,145, 85, 7, 60,124,223,255, 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,168, 61, 14, 62, 15,
+ 63, 65,123,220, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 7, 61,124,224, 15, 63,127,101,127, 66, 72, 0, 0,
+ 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,219, 61,197,143, 23, 63,158, 2, 82, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,
+189, 35,127,168, 62, 14, 62, 11, 63,187,172,165, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 67, 62, 65,155,147,
+ 63,216,177,185, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 19, 62,124,224, 27, 63,245, 17,143, 66,200, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 13, 64,221,144, 0, 0, 1, 37, 0, 0, 0, 9, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 84, 7, 59,124,223,127, 62,131,146, 57,
+ 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85, 7, 60,124,223,191, 63, 2, 71,188, 65,200, 0, 0, 63, 64, 0, 0,
+ 0, 0, 0, 0,188, 35,127,200, 61, 14, 61,239, 63, 65,123,220, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 7,
+ 61,124,223,247, 63,127,101,126, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,235, 61,197,142,255, 63,158, 2, 81,
+ 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,184, 62, 14, 62, 5, 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0,
+ 0, 0, 0, 0,189, 94,138, 59, 62, 65,155,138, 63,216,177,184, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 15,
+ 62,124,224, 19, 63,245, 17,141, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 13, 64,222,144,
+ 0, 0, 1, 37, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+186,145, 86, 7, 59,124,223,255, 62,131,146, 59, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85,135, 60,124,223,255,
+ 63, 2, 71,188, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,128, 8, 61, 14, 61,255, 63, 65,123,220, 66, 22, 0, 0,
+ 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 71, 61,124,224, 15, 63,127,101,126, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,
+188,227, 21, 11, 61,197,143, 7, 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,200, 62, 14, 62, 11,
+ 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 83, 62, 65,155,143, 63,216,177,184, 66,175, 0, 0,
+ 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 27, 62,124,224, 23, 63,245, 17,141, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 0, 0, 0,216, 13, 64,223,144, 0, 0, 1, 37, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 85, 7, 59,124,223,255, 62,131,146, 58, 65, 72, 0, 0, 63, 96, 0, 0,
+ 0, 0, 0, 0,187,145, 85, 71, 60,124,223,223, 63, 2, 71,189, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,200,
+ 61, 14, 61,247, 63, 65,123,221, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 23, 61,124,224, 7, 63,127,101,127,
+ 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,235, 61,197,143, 11, 63,158, 2, 82, 66,122, 0, 0, 62,192, 0, 0,
+ 0, 0, 0, 0,189, 35,127,176, 62, 14, 62, 11, 63,187,172,165, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 59,
+ 62, 65,155,145, 63,216,177,185, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 15, 62,124,224, 27, 63,245, 17,142,
+ 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 13, 64,224,144, 0, 0, 1, 37, 0, 0, 0, 9,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 85, 7, 59,124,223,127,
+ 62,131,146, 57, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85, 7, 60,124,223,223, 63, 2, 71,187, 65,200, 0, 0,
+ 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,168, 61, 14, 61,247, 63, 65,123,220, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,
+188,145, 85, 7, 61,124,224, 7, 63,127,101,126, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,203, 61,197,143, 11,
+ 63,158, 2, 82, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,168, 62, 14, 62, 13, 63,187,172,165, 66,150, 0, 0,
+ 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 43, 62, 65,155,145, 63,216,177,185, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,
+189,145, 85, 11, 62,124,224, 25, 63,245, 17,142, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216,
+ 13, 64,225,144, 0, 0, 1, 37, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0,186,145, 84,135, 59,124,224, 63, 62,131,146, 57, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 84,231,
+ 60,124,224, 55, 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,152, 61, 14, 62, 17, 63, 65,123,219,
+ 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 84,255, 61,124,224, 30, 63,127,101,125, 66, 72, 0, 0, 63, 0, 0, 0,
+ 0, 0, 0, 0,188,227, 20,203, 61,197,143, 24, 63,158, 2, 80, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,164,
+ 62, 14, 62, 18, 63,187,172,163, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 55, 62, 65,155,155, 63,216,177,183,
+ 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 9, 62,124,224, 36, 63,245, 17,140, 66,200, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 13, 64,226,144, 0, 0, 1, 37, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 85, 7, 59,124,222,255, 62,131,146, 57, 65, 72, 0, 0,
+ 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85, 7, 60,124,223,191, 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,
+188, 35,127,168, 61, 14, 61,239, 63, 65,123,220, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 23, 61,124,223,255,
+ 63,127,101,126, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,235, 61,197,142,255, 63,158, 2, 81, 66,122, 0, 0,
+ 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,184, 62, 14, 62, 7, 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,
+189, 94,138, 67, 62, 65,155,139, 63,216,177,184, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 15, 62,124,224, 19,
+ 63,245, 17,141, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 13, 64,227,144, 0, 0, 1, 37,
+ 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 84, 7,
+ 59,124,223,255, 62,131,146, 57, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85, 7, 60,124,223,255, 63, 2, 71,186,
+ 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,200, 61, 14, 61,255, 63, 65,123,218, 66, 22, 0, 0, 63, 32, 0, 0,
+ 0, 0, 0, 0,188,145, 85, 39, 61,124,224, 15, 63,127,101,124, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 21, 11,
+ 61,197,143, 15, 63,158, 2, 80, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,200, 62, 14, 62, 15, 63,187,172,163,
+ 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 91, 62, 65,155,151, 63,216,177,182, 66,175, 0, 0, 62, 0, 0, 0,
+ 0, 0, 0, 0,189,145, 85, 31, 62,124,224, 31, 63,245, 17,139, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+ 0, 0, 0,216, 13, 64,228,144, 0, 0, 1, 37, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0,186,145, 86, 7, 59,124,223,255, 62,131,146, 58, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,
+187,145, 85, 71, 60,124,223,255, 63, 2, 71,188, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,200, 61, 14, 62, 7,
+ 63, 65,123,220, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 23, 61,124,224, 23, 63,127,101,126, 66, 72, 0, 0,
+ 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,235, 61,197,143, 19, 63,158, 2, 82, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,
+189, 35,127,176, 62, 14, 62, 15, 63,187,172,165, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 59, 62, 65,155,147,
+ 63,216,177,185, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 15, 62,124,224, 27, 63,245, 17,142, 66,200, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 13, 64,229,144, 0, 0, 1, 37, 0, 0, 0, 9, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 84, 7, 59,124,223,191, 62,131,146, 57,
+ 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 84,135, 60,124,223,247, 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0,
+ 0, 0, 0, 0,188, 35,127, 72, 61, 14, 62, 0, 63, 65,123,220, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 84,231,
+ 61,124,224, 14, 63,127,101,126, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,171, 61,197,143, 13, 63,158, 2, 81,
+ 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,152, 62, 14, 62, 13, 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0,
+ 0, 0, 0, 0,189, 94,138, 27, 62, 65,155,147, 63,216,177,184, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 84,251,
+ 62,124,224, 27, 63,245, 17,141, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 13, 64,230,144,
+ 0, 0, 1, 37, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+186,145, 85, 7, 59,124,223,127, 62,131,146, 57, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85, 39, 60,124,223,223,
+ 63, 2, 71,186, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,184, 61, 14, 61,247, 63, 65,123,219, 66, 22, 0, 0,
+ 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 31, 61,124,223,255, 63,127,101,125, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,
+188,227, 20,243, 61,197,143, 3, 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,188, 62, 14, 62, 7,
+ 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 67, 62, 65,155,141, 63,216,177,184, 66,175, 0, 0,
+ 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 17, 62,124,224, 22, 63,245, 17,141, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 0, 0, 0,216, 13, 64,231,144, 0, 0, 1, 37, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 85, 7, 59,124,223,255, 62,131,146, 57, 65, 72, 0, 0, 63, 96, 0, 0,
+ 0, 0, 0, 0,187,145, 85, 7, 60,124,223,255, 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,168,
+ 61, 14, 61,255, 63, 65,123,219, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 7, 61,124,224, 15, 63,127,101,126,
+ 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,219, 61,197,143, 7, 63,158, 2, 82, 66,122, 0, 0, 62,192, 0, 0,
+ 0, 0, 0, 0,189, 35,127,176, 62, 14, 62, 11, 63,187,172,165, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 67,
+ 62, 65,155,147, 63,216,177,185, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 23, 62,124,224, 27, 63,245, 17,142,
+ 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 13, 64,232,144, 0, 0, 1, 37, 0, 0, 0, 9,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 84, 71, 59,124,223,255,
+ 62,131,146, 58, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 84,199, 60,124,223,255, 63, 2, 71,188, 65,200, 0, 0,
+ 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,136, 61, 14, 62, 7, 63, 65,123,220, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,
+188,145, 84,255, 61,124,224, 23, 63,127,101,126, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,211, 61,197,143, 19,
+ 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,170, 62, 14, 62, 15, 63,187,172,164, 66,150, 0, 0,
+ 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 56, 62, 65,155,147, 63,216,177,184, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,
+189,145, 85, 13, 62,124,224, 25, 63,245, 17,141, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216,
+ 13, 64,233,144, 0, 0, 1, 37, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0,186,145, 84, 7, 59,124,223,255, 62,131,146, 57, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 84, 7,
+ 60,124,224, 63, 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127, 72, 61, 14, 62, 15, 63, 65,123,219,
+ 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 84,199, 61,124,224, 15, 63,127,101,125, 66, 72, 0, 0, 63, 0, 0, 0,
+ 0, 0, 0, 0,188,227, 20,171, 61,197,143, 7, 63,158, 2, 80, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,152,
+ 62, 14, 62, 11, 63,187,172,163, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 27, 62, 65,155,147, 63,216,177,184,
+ 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 84,255, 62,124,224, 19, 63,245, 17,140, 66,200, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 13, 64,234,144, 0, 0, 1, 37, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 86, 7, 59,124,223,255, 62,131,146, 59, 65, 72, 0, 0,
+ 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85,135, 60,124,223,255, 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,
+188, 35,128, 8, 61, 14, 61,255, 63, 65,123,220, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85,103, 61,124,223,255,
+ 63,127,101,127, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 21, 75, 61,197,143, 7, 63,158, 2, 82, 66,122, 0, 0,
+ 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,216, 62, 14, 62, 7, 63,187,172,165, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,
+189, 94,138, 91, 62, 65,155,143, 63,216,177,186, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 31, 62,124,224, 23,
+ 63,245, 17,143, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 13, 64,235,144, 0, 0, 1, 37,
+ 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 86, 7,
+ 59,124,223,255, 62,131,146, 58, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85,135, 60,124,224, 31, 63, 2, 71,187,
+ 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,128, 8, 61, 14, 62, 15, 63, 65,123,220, 66, 22, 0, 0, 63, 32, 0, 0,
+ 0, 0, 0, 0,188,145, 85, 71, 61,124,224, 23, 63,127,101,127, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 21, 43,
+ 61,197,143, 27, 63,158, 2, 82, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,200, 62, 14, 62, 19, 63,187,172,165,
+ 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 91, 62, 65,155,155, 63,216,177,184, 66,175, 0, 0, 62, 0, 0, 0,
+ 0, 0, 0, 0,189,145, 85, 31, 62,124,224, 35, 63,245, 17,141, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+ 0, 0, 0,216, 13, 64,236,144, 0, 0, 1, 37, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0,186,145, 84, 7, 59,124,222,255, 62,131,146, 57, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,
+187,145, 84,135, 60,124,223,191, 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,104, 61, 14, 61,255,
+ 63, 65,123,219, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 84,231, 61,124,224, 15, 63,127,101,126, 66, 72, 0, 0,
+ 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,187, 61,197,143, 7, 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,
+189, 35,127,152, 62, 14, 62, 11, 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 35, 62, 65,155,143,
+ 63,216,177,184, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 84,255, 62,124,224, 23, 63,245, 17,141, 66,200, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 13, 64,237,144, 0, 0, 1, 37, 0, 0, 0, 9, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 84, 7, 59,124,223,255, 62,131,146, 59,
+ 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85, 7, 60,124,223,255, 63, 2, 71,188, 65,200, 0, 0, 63, 64, 0, 0,
+ 0, 0, 0, 0,188, 35,127,200, 61, 14, 61,255, 63, 65,123,221, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 71,
+ 61,124,224, 15, 63,127,101,128, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 21, 11, 61,197,143, 15, 63,158, 2, 82,
+ 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,200, 62, 14, 62, 13, 63,187,172,165, 66,150, 0, 0, 62,128, 0, 0,
+ 0, 0, 0, 0,189, 94,138, 75, 62, 65,155,147, 63,216,177,185, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 23,
+ 62,124,224, 29, 63,245, 17,142, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 13, 64,238,144,
+ 0, 0, 1, 37, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+186,145, 84, 7, 59,124,223,255, 62,131,146, 57, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85, 7, 60,124,224, 31,
+ 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,136, 61, 14, 62, 7, 63, 65,123,219, 66, 22, 0, 0,
+ 63, 32, 0, 0, 0, 0, 0, 0,188,145, 84,231, 61,124,224, 23, 63,127,101,126, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,
+188,227, 20,203, 61,197,143, 19, 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,168, 62, 14, 62, 13,
+ 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 75, 62, 65,155,149, 63,216,177,185, 66,175, 0, 0,
+ 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 23, 62,124,224, 33, 63,245, 17,142, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 0, 0, 0,216, 13, 64,239,144, 0, 0, 1, 37, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 84,135, 59,124,223,255, 62,131,146, 58, 65, 72, 0, 0, 63, 96, 0, 0,
+ 0, 0, 0, 0,187,145, 84,215, 60,124,223,255, 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,144,
+ 61, 14, 62, 7, 63, 65,123,220, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 84,251, 61,124,224, 15, 63,127,101,127,
+ 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,207, 61,197,143, 15, 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0,
+ 0, 0, 0, 0,189, 35,127,166, 62, 14, 62, 13, 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 45,
+ 62, 65,155,147, 63,216,177,185, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 8, 62,124,224, 27, 63,245, 17,142,
+ 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 13, 64,240,144, 0, 0, 1, 37, 0, 0, 0, 9,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 86, 7, 59,124,222,255,
+ 62,131,146, 57, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85,135, 60,124,223,191, 63, 2, 71,187, 65,200, 0, 0,
+ 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,200, 61, 14, 61,239, 63, 65,123,220, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,
+188,145, 85, 39, 61,124,223,255, 63,127,101,126, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 21, 11, 61,197,142,255,
+ 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,200, 62, 14, 62, 7, 63,187,172,164, 66,150, 0, 0,
+ 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 91, 62, 65,155,139, 63,216,177,185, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,
+189,145, 85, 31, 62,124,224, 15, 63,245, 17,142, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216,
+ 13, 64,241,144, 0, 0, 1, 37, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0,186,145, 85, 7, 59,124,223,255, 62,131,146, 58, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85, 7,
+ 60,124,223,255, 63, 2, 71,188, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,168, 61, 14, 62, 7, 63, 65,123,220,
+ 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 23, 61,124,224, 15, 63,127,101,127, 66, 72, 0, 0, 63, 0, 0, 0,
+ 0, 0, 0, 0,188,227, 20,219, 61,197,143, 15, 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,176,
+ 62, 14, 62, 13, 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 51, 62, 65,155,145, 63,216,177,185,
+ 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 15, 62,124,224, 29, 63,245, 17,142, 66,200, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 13, 64,242,144, 0, 0, 1, 37, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 86, 7, 59,124,223,255, 62,131,146, 58, 65, 72, 0, 0,
+ 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85, 7, 60,124,223,255, 63, 2, 71,188, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,
+188, 35,127,200, 61, 14, 61,255, 63, 65,123,221, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 39, 61,124,224, 15,
+ 63,127,101,127, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 21, 11, 61,197,143, 7, 63,158, 2, 82, 66,122, 0, 0,
+ 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,184, 62, 14, 62, 11, 63,187,172,165, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,
+189, 94,138, 75, 62, 65,155,143, 63,216,177,185, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 23, 62,124,224, 23,
+ 63,245, 17,142, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 13, 64,243,144, 0, 0, 1, 37,
+ 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 82, 7,
+ 59,124,223,255, 62,131,146, 59, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 83,135, 60,124,223,191, 63, 2, 71,188,
+ 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,126,200, 61, 14, 61,239, 63, 65,123,221, 66, 22, 0, 0, 63, 32, 0, 0,
+ 0, 0, 0, 0,188,145, 84,135, 61,124,223,255, 63,127,101,126, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20, 75,
+ 61,197,142,255, 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127, 88, 62, 14, 61,255, 63,187,172,165,
+ 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,137,219, 62, 65,155,135, 63,216,177,185, 66,175, 0, 0, 62, 0, 0, 0,
+ 0, 0, 0, 0,189,145, 84,223, 62,124,224, 15, 63,245, 17,142, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+ 0, 0, 0,216, 13, 64,244,144, 0, 0, 1, 37, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0,186,145, 85, 7, 59,124,222,255, 62,131,146, 57, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,
+187,145, 85, 7, 60,124,223,191, 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,168, 61, 14, 61,239,
+ 63, 65,123,220, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 23, 61,124,223,255, 63,127,101,126, 66, 72, 0, 0,
+ 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,235, 61,197,142,255, 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,
+189, 35,127,184, 62, 14, 62, 3, 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 67, 62, 65,155,137,
+ 63,216,177,184, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 11, 62,124,224, 15, 63,245, 17,142, 66,200, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 13, 64,245,144, 0, 0, 1, 37, 0, 0, 0, 9, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 86, 7, 59,124,223,127, 62,131,146, 56,
+ 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85, 7, 60,124,223,223, 63, 2, 71,186, 65,200, 0, 0, 63, 64, 0, 0,
+ 0, 0, 0, 0,188, 35,127,200, 61, 14, 61,251, 63, 65,123,218, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 7,
+ 61,124,224, 3, 63,127,101,124, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,235, 61,197,143, 8, 63,158, 2, 80,
+ 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,168, 62, 14, 62, 10, 63,187,172,163, 66,150, 0, 0, 62,128, 0, 0,
+ 0, 0, 0, 0,189, 94,138, 27, 62, 65,155,143, 63,216,177,183, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 84,247,
+ 62,124,224, 24, 63,245, 17,140, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 13, 64,246,144,
+ 0, 0, 1, 37, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+186,145, 86, 7, 59,124,224,255, 62,131,146, 57, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85,135, 60,124,224, 63,
+ 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,128, 8, 61, 14, 62, 15, 63, 65,123,221, 66, 22, 0, 0,
+ 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 71, 61,124,224, 31, 63,127,101,127, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,
+188,227, 21, 11, 61,197,143, 27, 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,216, 62, 14, 62, 23,
+ 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 91, 62, 65,155,157, 63,216,177,184, 66,175, 0, 0,
+ 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 31, 62,124,224, 37, 63,245, 17,141, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 0, 0, 0,216, 13, 64,247,144, 0, 0, 1, 37, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 87, 7, 59,124,224, 15, 62,131,146, 57, 65, 72, 0, 0, 63, 96, 0, 0,
+ 0, 0, 0, 0,187,145, 85,135, 60,124,224, 19, 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,232,
+ 61, 14, 62, 12, 63, 65,123,219, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 39, 61,124,224, 28, 63,127,101,125,
+ 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 21, 11, 61,197,143, 25, 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0,
+ 0, 0, 0, 0,189, 35,127,200, 62, 14, 62, 19, 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 91,
+ 62, 65,155,155, 63,216,177,184, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 31, 62,124,224, 35, 63,245, 17,141,
+ 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 13, 64,248,144, 0, 0, 1, 37, 0, 0, 0, 9,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 85, 7, 59,124,224, 63,
+ 62,131,146, 58, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85, 7, 60,124,223,255, 63, 2, 71,188, 65,200, 0, 0,
+ 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,168, 61, 14, 62, 3, 63, 65,123,220, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,
+188,145, 85, 7, 61,124,224, 19, 63,127,101,127, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,219, 61,197,143, 15,
+ 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,168, 62, 14, 62, 13, 63,187,172,164, 66,150, 0, 0,
+ 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 51, 62, 65,155,148, 63,216,177,185, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,
+189,145, 85, 11, 62,124,224, 29, 63,245, 17,142, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216,
+ 13, 64,249,144, 0, 0, 1, 37, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0,186,145, 86, 7, 59,124,224, 33, 62,131,146, 57, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85,135,
+ 60,124,224, 29, 63, 2, 71,188, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,128, 8, 61, 14, 62, 11, 63, 65,123,221,
+ 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 71, 61,124,224, 24, 63,127,101,127, 66, 72, 0, 0, 63, 0, 0, 0,
+ 0, 0, 0, 0,188,227, 21, 43, 61,197,143, 24, 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,200,
+ 62, 14, 62, 18, 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 91, 62, 65,155,157, 63,216,177,184,
+ 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 31, 62,124,224, 37, 63,245, 17,141, 66,200, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 13, 64,250,144, 0, 0, 1, 37, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 86, 7, 59,124,223,255, 62,131,146, 57, 65, 72, 0, 0,
+ 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85, 71, 60,124,223,255, 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,
+188, 35,127,200, 61, 14, 61,255, 63, 65,123,219, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 23, 61,124,224, 15,
+ 63,127,101,126, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,235, 61,197,143, 15, 63,158, 2, 82, 66,122, 0, 0,
+ 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,184, 62, 14, 62, 11, 63,187,172,165, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,
+189, 94,138, 75, 62, 65,155,143, 63,216,177,185, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 27, 62,124,224, 23,
+ 63,245, 17,142, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 13, 64,251,144, 0, 0, 1, 37,
+ 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 82, 7,
+ 59,124,223,255, 62,131,146, 57, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 84, 7, 60,124,223,255, 63, 2, 71,187,
+ 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127, 8, 61, 14, 62, 7, 63, 65,123,219, 66, 22, 0, 0, 63, 32, 0, 0,
+ 0, 0, 0, 0,188,145, 84,167, 61,124,224, 15, 63,127,101,125, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,139,
+ 61,197,143, 15, 63,158, 2, 80, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,136, 62, 14, 62, 11, 63,187,172,163,
+ 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 11, 62, 65,155,143, 63,216,177,183, 66,175, 0, 0, 62, 0, 0, 0,
+ 0, 0, 0, 0,189,145, 84,247, 62,124,224, 23, 63,245, 17,140, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+ 0, 0, 0,216, 13, 64,252,144, 0, 0, 1, 37, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0,186,145, 84,135, 59,124,223,255, 62,131,146, 58, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,
+187,145, 84,215, 60,124,223,191, 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,152, 61, 14, 61,255,
+ 63, 65,123,219, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 84,255, 61,124,224, 15, 63,127,101,126, 66, 72, 0, 0,
+ 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,223, 61,197,143, 15, 63,158, 2, 82, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,
+189, 35,127,174, 62, 14, 62, 11, 63,187,172,165, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 57, 62, 65,155,147,
+ 63,216,177,185, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 12, 62,124,224, 27, 63,245, 17,142, 66,200, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 13, 64,253,144, 0, 0, 1, 37, 0, 0, 0, 9, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 86, 7, 59,124,223,255, 62,131,146, 58,
+ 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85, 7, 60,124,223,255, 63, 2, 71,188, 65,200, 0, 0, 63, 64, 0, 0,
+ 0, 0, 0, 0,188, 35,127,200, 61, 14, 61,255, 63, 65,123,220, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 7,
+ 61,124,224, 15, 63,127,101,127, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,235, 61,197,143, 15, 63,158, 2, 82,
+ 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,184, 62, 14, 62, 15, 63,187,172,165, 66,150, 0, 0, 62,128, 0, 0,
+ 0, 0, 0, 0,189, 94,138, 75, 62, 65,155,147, 63,216,177,186, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 23,
+ 62,124,224, 31, 63,245, 17,143, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 13, 64,254,144,
+ 0, 0, 1, 37, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+186,145, 86, 7, 59,124,223,191, 62,131,146, 58, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85,135, 60,124,224, 15,
+ 63, 2, 71,188, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,128, 8, 61, 14, 62, 7, 63, 65,123,221, 66, 22, 0, 0,
+ 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 71, 61,124,224, 23, 63,127,101,127, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,
+188,227, 21, 11, 61,197,143, 17, 63,158, 2, 83, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,200, 62, 14, 62, 14,
+ 63,187,172,165, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 91, 62, 65,155,146, 63,216,177,186, 66,175, 0, 0,
+ 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 23, 62,124,224, 26, 63,245, 17,143, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 0, 0, 0,216, 13, 64,255,144, 0, 0, 1, 37, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 86, 7, 59,124,223,255, 62,131,146, 58, 65, 72, 0, 0, 63, 96, 0, 0,
+ 0, 0, 0, 0,187,145, 85,135, 60,124,223,255, 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,200,
+ 61, 14, 61,239, 63, 65,123,219, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 39, 61,124,223,255, 63,127,101,125,
+ 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 21, 11, 61,197,143, 7, 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0,
+ 0, 0, 0, 0,189, 35,127,184, 62, 14, 62, 7, 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 75,
+ 62, 65,155,139, 63,216,177,184, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 31, 62,124,224, 19, 63,245, 17,141,
+ 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 13, 65, 0,144, 0, 0, 1, 37, 0, 0, 0, 9,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 85, 7, 59,124,223,127,
+ 62,131,146, 57, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85, 71, 60,124,223,191, 63, 2, 71,187, 65,200, 0, 0,
+ 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,168, 61, 14, 61,239, 63, 65,123,220, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,
+188,145, 85, 23, 61,124,223,255, 63,127,101,126, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,251, 61,197,143, 3,
+ 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,192, 62, 14, 62, 6, 63,187,172,164, 66,150, 0, 0,
+ 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 67, 62, 65,155,140, 63,216,177,184, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,
+189,145, 85, 19, 62,124,224, 21, 63,245, 17,141, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216,
+ 13, 65, 1,144, 0, 0, 1, 37, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0,186,145, 84, 7, 59,124,223,127, 62,131,146, 56, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85, 7,
+ 60,124,223,223, 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,136, 61, 14, 61,247, 63, 65,123,219,
+ 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 84,231, 61,124,223,255, 63,127,101,126, 66, 72, 0, 0, 63, 0, 0, 0,
+ 0, 0, 0, 0,188,227, 20,235, 61,197,143, 7, 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,184,
+ 62, 14, 62, 7, 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 91, 62, 65,155,141, 63,216,177,184,
+ 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 31, 62,124,224, 23, 63,245, 17,141, 66,200, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 13, 65, 2,144, 0, 0, 1, 37, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 84, 7, 59,124,223,255, 62,131,146, 58, 65, 72, 0, 0,
+ 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85, 7, 60,124,223,255, 63, 2, 71,188, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,
+188, 35,127,200, 61, 14, 62, 15, 63, 65,123,220, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 39, 61,124,224, 15,
+ 63,127,101,126, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,235, 61,197,143, 15, 63,158, 2, 81, 66,122, 0, 0,
+ 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,184, 62, 14, 62, 11, 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,
+189, 94,138, 75, 62, 65,155,143, 63,216,177,184, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 23, 62,124,224, 23,
+ 63,245, 17,141, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 13, 65, 3,144, 0, 0, 1, 37,
+ 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 84, 7,
+ 59,124,224,255, 62,131,146, 58, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 84,135, 60,124,224, 63, 63, 2, 71,187,
+ 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127, 72, 61, 14, 62, 47, 63, 65,123,219, 66, 22, 0, 0, 63, 32, 0, 0,
+ 0, 0, 0, 0,188,145, 84,231, 61,124,224, 63, 63,127,101,125, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,203,
+ 61,197,143, 47, 63,158, 2, 80, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,168, 62, 14, 62, 27, 63,187,172,163,
+ 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 43, 62, 65,155,167, 63,216,177,183, 66,175, 0, 0, 62, 0, 0, 0,
+ 0, 0, 0, 0,189,145, 84,255, 62,124,224, 51, 63,245, 17,139, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+ 0, 0, 0,216, 13, 65, 4,144, 0, 0, 1, 37, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0,186,145, 84,135, 59,124,224, 31, 62,131,146, 58, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,
+187,145, 84,199, 60,124,224, 31, 63, 2, 71,188, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,152, 61, 14, 62, 16,
+ 63, 65,123,220, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 7, 61,124,224, 31, 63,127,101,126, 66, 72, 0, 0,
+ 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,215, 61,197,143, 22, 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,
+189, 35,127,172, 62, 14, 62, 17, 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 53, 62, 65,155,151,
+ 63,216,177,184, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 9, 62,124,224, 32, 63,245, 17,141, 66,200, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 13, 65, 5,144, 0, 0, 1, 37, 0, 0, 0, 9, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 85, 7, 59,124,223,255, 62,131,146, 58,
+ 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 84,199, 60,124,223,255, 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0,
+ 0, 0, 0, 0,188, 35,127,136, 61, 14, 61,255, 63, 65,123,220, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 84,247,
+ 61,124,223,255, 63,127,101,126, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,219, 61,197,143, 15, 63,158, 2, 81,
+ 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,168, 62, 14, 62, 7, 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0,
+ 0, 0, 0, 0,189, 94,138, 59, 62, 65,155,143, 63,216,177,185, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 15,
+ 62,124,224, 23, 63,245, 17,142, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 13, 65, 6,144,
+ 0, 0, 1, 37, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+186,145, 84, 7, 59,124,222,255, 62,131,146, 57, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 84,135, 60,124,223,191,
+ 63, 2, 71,186, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,104, 61, 14, 61,239, 63, 65,123,219, 66, 22, 0, 0,
+ 63, 32, 0, 0, 0, 0, 0, 0,188,145, 84,231, 61,124,223,247, 63,127,101,125, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,
+188,227, 20,171, 61,197,143, 3, 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,152, 62, 14, 62, 7,
+ 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 35, 62, 65,155,145, 63,216,177,183, 66,175, 0, 0,
+ 62, 0, 0, 0, 0, 0, 0, 0,189,145, 84,255, 62,124,224, 26, 63,245, 17,140, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 0, 0, 0,216, 13, 65, 7,144, 0, 0, 1, 37, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 84, 7, 59,124,223,255, 62,131,146, 58, 65, 72, 0, 0, 63, 96, 0, 0,
+ 0, 0, 0, 0,187,145, 85, 7, 60,124,223,255, 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,200,
+ 61, 14, 61,255, 63, 65,123,220, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 7, 61,124,224, 15, 63,127,101,126,
+ 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,235, 61,197,143, 7, 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0,
+ 0, 0, 0, 0,189, 35,127,184, 62, 14, 62, 7, 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 75,
+ 62, 65,155,143, 63,216,177,185, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 23, 62,124,224, 23, 63,245, 17,142,
+ 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 13, 65, 8,144, 0, 0, 1, 37, 0, 0, 0, 9,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 84,191, 59,124,222,255,
+ 62,131,146, 57, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 84,229, 60,124,223,191, 63, 2, 71,187, 65,200, 0, 0,
+ 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,154, 61, 14, 61,255, 63, 65,123,220, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,
+188,145, 85, 7, 61,124,223,255, 63,127,101,126, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,232, 61,197,143, 7,
+ 63,158, 2, 82, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,182, 62, 14, 62, 7, 63,187,172,165, 66,150, 0, 0,
+ 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 65, 62, 65,155,139, 63,216,177,185, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,
+189,145, 85, 16, 62,124,224, 19, 63,245, 17,142, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216,
+ 13, 65, 9,144, 0, 0, 1, 37, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0,186,145, 84, 7, 59,124,223,255, 62,131,146, 58, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 84,199,
+ 60,124,224, 31, 63, 2, 71,188, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,168, 61, 14, 62, 7, 63, 65,123,220,
+ 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 84,247, 61,124,224, 15, 63,127,101,127, 66, 72, 0, 0, 63, 0, 0, 0,
+ 0, 0, 0, 0,188,227, 20,219, 61,197,143, 15, 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,168,
+ 62, 14, 62, 13, 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 51, 62, 65,155,147, 63,216,177,185,
+ 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 7, 62,124,224, 31, 63,245, 17,142, 66,200, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 13, 65, 10,144, 0, 0, 1, 37, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 84, 7, 59,124,224,255, 62,131,146, 58, 65, 72, 0, 0,
+ 63, 96, 0, 0, 0, 0, 0, 0,187,145, 84,135, 60,124,224, 63, 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,
+188, 35,127, 72, 61, 14, 62, 47, 63, 65,123,219, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 84,231, 61,124,224, 47,
+ 63,127,101,125, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,171, 61,197,143, 47, 63,158, 2, 80, 66,122, 0, 0,
+ 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,152, 62, 14, 62, 27, 63,187,172,163, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,
+189, 94,138, 27, 62, 65,155,167, 63,216,177,183, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 84,247, 62,124,224, 49,
+ 63,245, 17,139, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 13, 65, 11,144, 0, 0, 1, 37,
+ 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 84, 7,
+ 59,124,223,255, 62,131,146, 56, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 84, 7, 60,124,223,191, 63, 2, 71,186,
+ 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127, 8, 61, 14, 61,239, 63, 65,123,219, 66, 22, 0, 0, 63, 32, 0, 0,
+ 0, 0, 0, 0,188,145, 84,167, 61,124,223,255, 63,127,101,125, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,107,
+ 61,197,143, 11, 63,158, 2, 80, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,104, 62, 14, 62, 9, 63,187,172,163,
+ 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,137,251, 62, 65,155,143, 63,216,177,184, 66,175, 0, 0, 62, 0, 0, 0,
+ 0, 0, 0, 0,189,145, 84,239, 62,124,224, 23, 63,245, 17,141, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+ 0, 0, 0,216, 13, 65, 12,144, 0, 0, 1, 37, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0,186,145, 84, 7, 59,124,223,255, 62,131,146, 56, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,
+187,145, 84,135, 60,124,223,255, 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127, 72, 61, 14, 62, 15,
+ 63, 65,123,220, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 84,231, 61,124,224, 15, 63,127,101,126, 66, 72, 0, 0,
+ 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,171, 61,197,143, 31, 63,158, 2, 82, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,
+189, 35,127,152, 62, 14, 62, 15, 63,187,172,165, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 11, 62, 65,155,159,
+ 63,216,177,185, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 84,247, 62,124,224, 39, 63,245, 17,142, 66,200, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 13, 65, 13,144, 0, 0, 1, 37, 0, 0, 0, 9, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 85, 7, 59,124,223,255, 62,131,146, 57,
+ 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85, 7, 60,124,223,255, 63, 2, 71,186, 65,200, 0, 0, 63, 64, 0, 0,
+ 0, 0, 0, 0,188, 35,127,200, 61, 14, 61,255, 63, 65,123,219, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 39,
+ 61,124,223,255, 63,127,101,125, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,235, 61,197,143, 7, 63,158, 2, 81,
+ 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,192, 62, 14, 62, 7, 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0,
+ 0, 0, 0, 0,189, 94,138, 67, 62, 65,155,139, 63,216,177,184, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 19,
+ 62,124,224, 19, 63,245, 17,141, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 13, 65, 14,144,
+ 0, 0, 1, 37, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+186,145, 84, 7, 59,124,223,127, 62,131,146, 57, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85, 7, 60,124,223,191,
+ 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,136, 61, 14, 61,239, 63, 65,123,219, 66, 22, 0, 0,
+ 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 7, 61,124,223,247, 63,127,101,125, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,
+188,227, 20,235, 61,197,142,255, 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,168, 62, 14, 62, 5,
+ 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 59, 62, 65,155,138, 63,216,177,184, 66,175, 0, 0,
+ 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 23, 62,124,224, 19, 63,245, 17,142, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 0, 0, 0,216, 13, 65, 15,144, 0, 0, 1, 37, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 84, 7, 59,124,223,255, 62,131,146, 58, 65, 72, 0, 0, 63, 96, 0, 0,
+ 0, 0, 0, 0,187,145, 84,135, 60,124,223,255, 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,136,
+ 61, 14, 61,255, 63, 65,123,220, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 84,231, 61,124,224, 15, 63,127,101,126,
+ 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,203, 61,197,143, 7, 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0,
+ 0, 0, 0, 0,189, 35,127,168, 62, 14, 62, 11, 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 59,
+ 62, 65,155,147, 63,216,177,184, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 23, 62,124,224, 27, 63,245, 17,142,
+ 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 13, 65, 16,144, 0, 0, 1, 37, 0, 0, 0, 9,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 84,135, 59,124,223,255,
+ 62,131,146, 57, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 84,231, 60,124,224, 15, 63, 2, 71,187, 65,200, 0, 0,
+ 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,136, 61, 14, 62, 7, 63, 65,123,220, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,
+188,145, 84,247, 61,124,224, 19, 63,127,101,126, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,203, 61,197,143, 17,
+ 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,164, 62, 14, 62, 14, 63,187,172,164, 66,150, 0, 0,
+ 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 51, 62, 65,155,148, 63,216,177,184, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,
+189,145, 85, 7, 62,124,224, 30, 63,245, 17,141, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216,
+ 13, 65, 17,144, 0, 0, 1, 37, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0,186,145, 83, 7, 59,124,222,255, 62,131,146, 57, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 84, 71,
+ 60,124,223,191, 63, 2, 71,186, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127, 40, 61, 14, 61,223, 63, 65,123,218,
+ 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 84,199, 61,124,223,239, 63,127,101,124, 66, 72, 0, 0, 63, 0, 0, 0,
+ 0, 0, 0, 0,188,227, 20,155, 61,197,142,255, 63,158, 2, 80, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,128,
+ 62, 14, 61,255, 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 11, 62, 65,155,131, 63,216,177,184,
+ 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 84,243, 62,124,224, 15, 63,245, 17,141, 66,200, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 13, 65, 18,144, 0, 0, 1, 37, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 84, 7, 59,124,222,255, 62,131,146, 57, 65, 72, 0, 0,
+ 63, 96, 0, 0, 0, 0, 0, 0,187,145, 84,135, 60,124,223,191, 63, 2, 71,186, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,
+188, 35,127, 72, 61, 14, 61,239, 63, 65,123,218, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 84,199, 61,124,223,255,
+ 63,127,101,124, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,139, 61,197,142,247, 63,158, 2, 81, 66,122, 0, 0,
+ 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,120, 62, 14, 61,255, 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,
+189, 94,137,251, 62, 65,155,131, 63,216,177,185, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 84,239, 62,124,224, 11,
+ 63,245, 17,141, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 13, 65, 19,144, 0, 0, 1, 37,
+ 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 86, 7,
+ 59,124,223,255, 62,131,146, 57, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85,135, 60,124,223,255, 63, 2, 71,187,
+ 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,200, 61, 14, 62, 15, 63, 65,123,220, 66, 22, 0, 0, 63, 32, 0, 0,
+ 0, 0, 0, 0,188,145, 85, 39, 61,124,224, 31, 63,127,101,126, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 21, 11,
+ 61,197,143, 23, 63,158, 2, 82, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,200, 62, 14, 62, 15, 63,187,172,165,
+ 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 91, 62, 65,155,147, 63,216,177,185, 66,175, 0, 0, 62, 0, 0, 0,
+ 0, 0, 0, 0,189,145, 85, 39, 62,124,224, 27, 63,245, 17,143, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+ 0, 0, 0,216, 13, 65, 20,144, 0, 0, 1, 37, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0,186,145, 86, 7, 59,124,222,255, 62,131,146, 58, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,
+187,145, 85,135, 60,124,223,191, 63, 2, 71,188, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,128, 8, 61, 14, 61,239,
+ 63, 65,123,221, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85,103, 61,124,223,255, 63,127,101,127, 66, 72, 0, 0,
+ 63, 0, 0, 0, 0, 0, 0, 0,188,227, 21, 43, 61,197,142,255, 63,158, 2, 82, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,
+189, 35,127,200, 62, 14, 62, 3, 63,187,172,165, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 75, 62, 65,155,135,
+ 63,216,177,186, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 23, 62,124,224, 19, 63,245, 17,143, 66,200, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 13, 65, 21,144, 0, 0, 1, 37, 0, 0, 0, 9, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 86, 7, 59,124,223,255, 62,131,146, 59,
+ 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85, 7, 60,124,223,255, 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0,
+ 0, 0, 0, 0,188, 35,127,200, 61, 14, 62, 15, 63, 65,123,220, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 39,
+ 61,124,224, 15, 63,127,101,126, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 21, 11, 61,197,143, 15, 63,158, 2, 82,
+ 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,200, 62, 14, 62, 15, 63,187,172,165, 66,150, 0, 0, 62,128, 0, 0,
+ 0, 0, 0, 0,189, 94,138, 91, 62, 65,155,151, 63,216,177,186, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 31,
+ 62,124,224, 27, 63,245, 17,143, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 13, 65, 22,144,
+ 0, 0, 1, 37, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+186,145, 85, 7, 59,124,223,127, 62,131,146, 57, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 84,199, 60,124,223,191,
+ 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,136, 61, 14, 61,231, 63, 65,123,219, 66, 22, 0, 0,
+ 63, 32, 0, 0, 0, 0, 0, 0,188,145, 84,215, 61,124,223,231, 63,127,101,126, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,
+188,227, 20,171, 61,197,142,247, 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,152, 62, 14, 62, 1,
+ 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 27, 62, 65,155,135, 63,216,177,185, 66,175, 0, 0,
+ 62, 0, 0, 0, 0, 0, 0, 0,189,145, 84,251, 62,124,224, 15, 63,245, 17,141, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 0, 0, 0,216, 13, 65, 23,144, 0, 0, 1, 37, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 83, 7, 59,124,223,191, 62,131,146, 57, 65, 72, 0, 0, 63, 96, 0, 0,
+ 0, 0, 0, 0,187,145, 84,135, 60,124,223,239, 63, 2, 71,186, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,104,
+ 61, 14, 62, 3, 63, 65,123,219, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 84,231, 61,124,224, 15, 63,127,101,125,
+ 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,187, 61,197,143, 15, 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0,
+ 0, 0, 0, 0,189, 35,127,152, 62, 14, 62, 11, 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 35,
+ 62, 65,155,145, 63,216,177,184, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 84,255, 62,124,224, 25, 63,245, 17,141,
+ 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 13, 65, 24,144, 0, 0, 1, 37, 0, 0, 0, 9,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 86, 7, 59,124,224, 63,
+ 62,131,146, 56, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85, 7, 60,124,224, 47, 63, 2, 71,186, 65,200, 0, 0,
+ 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,136, 61, 14, 62, 15, 63, 65,123,218, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,
+188,145, 85, 7, 61,124,224, 29, 63,127,101,125, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,235, 61,197,143, 24,
+ 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,168, 62, 14, 62, 17, 63,187,172,164, 66,150, 0, 0,
+ 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 59, 62, 65,155,155, 63,216,177,183, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,
+189,145, 85, 7, 62,124,224, 35, 63,245, 17,140, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216,
+ 13, 65, 25,144, 0, 0, 1, 37, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0,186,145, 86, 7, 59,124,223,255, 62,131,146, 57, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85,135,
+ 60,124,223,255, 63, 2, 71,188, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,128, 8, 61, 14, 62, 7, 63, 65,123,221,
+ 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 71, 61,124,224, 23, 63,127,101,127, 66, 72, 0, 0, 63, 0, 0, 0,
+ 0, 0, 0, 0,188,227, 21, 43, 61,197,143, 23, 63,158, 2, 82, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,216,
+ 62, 14, 62, 15, 63,187,172,166, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 91, 62, 65,155,150, 63,216,177,186,
+ 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 31, 62,124,224, 30, 63,245, 17,143, 66,200, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 13, 65, 26,144, 0, 0, 1, 37, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 84, 7, 59,124,223,255, 62,131,146, 57, 65, 72, 0, 0,
+ 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85, 7, 60,124,224, 15, 63, 2, 71,188, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,
+188, 35,127,200, 61, 14, 62, 11, 63, 65,123,221, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 7, 61,124,224, 23,
+ 63,127,101,127, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,235, 61,197,143, 19, 63,158, 2, 81, 66,122, 0, 0,
+ 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,184, 62, 14, 62, 17, 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,
+189, 94,138, 75, 62, 65,155,151, 63,216,177,185, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 23, 62,124,224, 33,
+ 63,245, 17,142, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 13, 65, 27,144, 0, 0, 1, 37,
+ 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 86, 7,
+ 59,124,223,191, 62,131,146, 59, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85,135, 60,124,224, 15, 63, 2, 71,188,
+ 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,128, 8, 61, 14, 62, 7, 63, 65,123,221, 66, 22, 0, 0, 63, 32, 0, 0,
+ 0, 0, 0, 0,188,145, 85, 39, 61,124,224, 19, 63,127,101,127, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,235,
+ 61,197,143, 17, 63,158, 2, 82, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,184, 62, 14, 62, 14, 63,187,172,165,
+ 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 75, 62, 65,155,151, 63,216,177,185, 66,175, 0, 0, 62, 0, 0, 0,
+ 0, 0, 0, 0,189,145, 85, 23, 62,124,224, 34, 63,245, 17,142, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+ 0, 0, 0,216, 13, 65, 28,144, 0, 0, 1, 37, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0,186,145, 84,103, 59,124,223,255, 62,131,146, 58, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,
+187,145, 84,191, 60,124,224, 63, 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,144, 61, 14, 62, 15,
+ 63, 65,123,219, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 3, 61,124,224, 15, 63,127,101,126, 66, 72, 0, 0,
+ 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,223, 61,197,143, 7, 63,158, 2, 82, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,
+189, 35,127,174, 62, 14, 62, 11, 63,187,172,165, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 63, 62, 65,155,147,
+ 63,216,177,185, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 15, 62,124,224, 27, 63,245, 17,142, 66,200, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 13, 65, 29,144, 0, 0, 1, 37, 0, 0, 0, 9, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 86, 7, 59,124,223,191, 62,131,146, 59,
+ 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85,135, 60,124,224, 3, 63, 2, 71,188, 65,200, 0, 0, 63, 64, 0, 0,
+ 0, 0, 0, 0,188, 35,128, 8, 61, 14, 62, 4, 63, 65,123,221, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 71,
+ 61,124,224, 18, 63,127,101,128, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 21, 43, 61,197,143, 15, 63,158, 2, 82,
+ 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,200, 62, 14, 62, 14, 63,187,172,165, 66,150, 0, 0, 62,128, 0, 0,
+ 0, 0, 0, 0,189, 94,138, 91, 62, 65,155,149, 63,216,177,185, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 23,
+ 62,124,224, 26, 63,245, 17,143, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 13, 65, 30,144,
+ 0, 0, 1, 37, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+186,145, 84, 7, 59,124,222,255, 62,131,146, 57, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 84,199, 60,124,223,191,
+ 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,136, 61, 14, 61,239, 63, 65,123,219, 66, 22, 0, 0,
+ 63, 32, 0, 0, 0, 0, 0, 0,188,145, 84,247, 61,124,223,247, 63,127,101,125, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,
+188,227, 20,203, 61,197,143, 3, 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,160, 62, 14, 62, 7,
+ 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 51, 62, 65,155,145, 63,216,177,184, 66,175, 0, 0,
+ 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 7, 62,124,224, 25, 63,245, 17,141, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 0, 0, 0,216, 13, 65, 31,144, 0, 0, 1, 37, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 87, 7, 59,124,223,255, 62,131,146, 57, 65, 72, 0, 0, 63, 96, 0, 0,
+ 0, 0, 0, 0,187,145, 85,199, 60,124,223,255, 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,128, 40,
+ 61, 14, 62, 15, 63, 65,123,219, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 71, 61,124,224, 31, 63,127,101,126,
+ 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 21, 27, 61,197,143, 31, 63,158, 2, 80, 66,122, 0, 0, 62,192, 0, 0,
+ 0, 0, 0, 0,189, 35,127,208, 62, 14, 62, 27, 63,187,172,163, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 91,
+ 62, 65,155,163, 63,216,177,183, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 27, 62,124,224, 43, 63,245, 17,140,
+ 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 13, 65, 32,144, 0, 0, 1, 37, 0, 0, 0, 9,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 86, 7, 59,124,223,255,
+ 62,131,146, 59, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85,135, 60,124,223,255, 63, 2, 71,188, 65,200, 0, 0,
+ 63, 64, 0, 0, 0, 0, 0, 0,188, 35,128, 8, 61, 14, 62, 7, 63, 65,123,221, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,
+188,145, 85, 39, 61,124,224, 15, 63,127,101,127, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,235, 61,197,143, 19,
+ 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,184, 62, 14, 62, 13, 63,187,172,164, 66,150, 0, 0,
+ 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 75, 62, 65,155,147, 63,216,177,185, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,
+189,145, 85, 23, 62,124,224, 27, 63,245, 17,142, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216,
+ 13, 65, 33,144, 0, 0, 1, 37, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0,186,145, 86, 7, 59,124,223,127, 62,131,146, 57, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85,135,
+ 60,124,223,207, 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,128, 8, 61, 14, 61,244, 63, 65,123,219,
+ 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 39, 61,124,223,254, 63,127,101,126, 66, 72, 0, 0, 63, 0, 0, 0,
+ 0, 0, 0, 0,188,227, 21, 11, 61,197,143, 5, 63,158, 2, 82, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,184,
+ 62, 14, 62, 9, 63,187,172,165, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 75, 62, 65,155,143, 63,216,177,185,
+ 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 23, 62,124,224, 25, 63,245, 17,142, 66,200, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 13, 65, 34,144, 0, 0, 1, 37, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 84, 7, 59,124,223,255, 62,131,146, 57, 65, 72, 0, 0,
+ 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85, 7, 60,124,223,241, 63, 2, 71,188, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,
+188, 35,127,168, 61, 14, 61,253, 63, 65,123,220, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 23, 61,124,224, 11,
+ 63,127,101,126, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,219, 61,197,143, 13, 63,158, 2, 81, 66,122, 0, 0,
+ 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,176, 62, 14, 62, 12, 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,
+189, 94,138, 59, 62, 65,155,146, 63,216,177,184, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 11, 62,124,224, 27,
+ 63,245, 17,141, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 13, 65, 35,144, 0, 0, 1, 37,
+ 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 84,199,
+ 59,124,222,255, 62,131,146, 57, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 84,247, 60,124,223,255, 63, 2, 71,187,
+ 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,160, 61, 14, 61,255, 63, 65,123,219, 66, 22, 0, 0, 63, 32, 0, 0,
+ 0, 0, 0, 0,188,145, 85, 11, 61,124,223,255, 63,127,101,126, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,231,
+ 61,197,143, 15, 63,158, 2, 82, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,178, 62, 14, 62, 7, 63,187,172,165,
+ 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 61, 62, 65,155,143, 63,216,177,185, 66,175, 0, 0, 62, 0, 0, 0,
+ 0, 0, 0, 0,189,145, 85, 14, 62,124,224, 23, 63,245, 17,142, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+ 0, 0, 0,216, 13, 65, 36,144, 0, 0, 1, 37, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0,186,145, 84, 7, 59,124,222,255, 62,131,146, 57, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,
+187,145, 85, 7, 60,124,223,191, 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,136, 61, 14, 61,239,
+ 63, 65,123,220, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 7, 61,124,223,239, 63,127,101,126, 66, 72, 0, 0,
+ 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,203, 61,197,142,255, 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,
+189, 35,127,184, 62, 14, 62, 3, 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 75, 62, 65,155,137,
+ 63,216,177,184, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 23, 62,124,224, 17, 63,245, 17,141, 66,200, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 13, 65, 37,144, 0, 0, 1, 37, 0, 0, 0, 9, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 84,135, 59,124,223,255, 62,131,146, 57,
+ 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 84,215, 60,124,223,255, 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0,
+ 0, 0, 0, 0,188, 35,127,140, 61, 14, 62, 15, 63, 65,123,219, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 84,251,
+ 61,124,224, 15, 63,127,101,126, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,219, 61,197,143, 15, 63,158, 2, 82,
+ 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,178, 62, 14, 62, 15, 63,187,172,165, 66,150, 0, 0, 62,128, 0, 0,
+ 0, 0, 0, 0,189, 94,138, 61, 62, 65,155,147, 63,216,177,185, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 15,
+ 62,124,224, 27, 63,245, 17,142, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 13, 65, 38,144,
+ 0, 0, 1, 37, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+186,145, 85, 7, 59,124,224, 13, 62,131,146, 58, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85, 7, 60,124,224, 31,
+ 63, 2, 71,188, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,168, 61, 14, 62, 9, 63, 65,123,220, 66, 22, 0, 0,
+ 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 23, 61,124,224, 22, 63,127,101,127, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,
+188,227, 20,235, 61,197,143, 16, 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,176, 62, 14, 62, 14,
+ 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 59, 62, 65,155,148, 63,216,177,185, 66,175, 0, 0,
+ 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 15, 62,124,224, 30, 63,245, 17,142, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 0, 0, 0,216, 13, 65, 39,144, 0, 0, 1, 37, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 84,199, 59,124,222,255, 62,131,146, 57, 65, 72, 0, 0, 63, 96, 0, 0,
+ 0, 0, 0, 0,187,145, 84,231, 60,124,223,159, 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,144,
+ 61, 14, 61,231, 63, 65,123,219, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 7, 61,124,223,239, 63,127,101,126,
+ 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,217, 61,197,142,255, 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0,
+ 0, 0, 0, 0,189, 35,127,175, 62, 14, 62, 5, 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 56,
+ 62, 65,155,140, 63,216,177,185, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 11, 62,124,224, 21, 63,245, 17,142,
+ 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 13, 65, 40,144, 0, 0, 1, 37, 0, 0, 0, 9,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 86, 7, 59,124,224,255,
+ 62,131,146, 57, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85,135, 60,124,224, 63, 63, 2, 71,188, 65,200, 0, 0,
+ 63, 64, 0, 0, 0, 0, 0, 0,188, 35,128, 72, 61, 14, 62, 31, 63, 65,123,220, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,
+188,145, 85,103, 61,124,224, 47, 63,127,101,126, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 21, 75, 61,197,143, 39,
+ 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,248, 62, 14, 62, 27, 63,187,172,163, 66,150, 0, 0,
+ 62,128, 0, 0, 0, 0, 0, 0,189, 94,138,139, 62, 65,155,163, 63,216,177,184, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,
+189,145, 85, 55, 62,124,224, 43, 63,245, 17,141, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216,
+ 13, 65, 41,144, 0, 0, 1, 37, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0,186,145, 85, 7, 59,124,222,255, 62,131,146, 57, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 84,199,
+ 60,124,223,255, 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,152, 61, 14, 61,239, 63, 65,123,219,
+ 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 7, 61,124,224, 15, 63,127,101,126, 66, 72, 0, 0, 63, 0, 0, 0,
+ 0, 0, 0, 0,188,227, 20,219, 61,197,143, 7, 63,158, 2, 82, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,176,
+ 62, 14, 62, 11, 63,187,172,165, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 59, 62, 65,155,139, 63,216,177,185,
+ 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 15, 62,124,224, 19, 63,245, 17,142, 66,200, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 13, 65, 42,144, 0, 0, 1, 37, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 84, 7, 59,124,223,255, 62,131,146, 56, 65, 72, 0, 0,
+ 63, 96, 0, 0, 0, 0, 0, 0,187,145, 84, 71, 60,124,223,191, 63, 2, 71,186, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,
+188, 35,127, 72, 61, 14, 61,239, 63, 65,123,219, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 84,231, 61,124,223,255,
+ 63,127,101,125, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,187, 61,197,142,255, 63,158, 2, 81, 66,122, 0, 0,
+ 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,152, 62, 14, 62, 3, 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,
+189, 94,138, 35, 62, 65,155,139, 63,216,177,184, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 84,255, 62,124,224, 19,
+ 63,245, 17,141, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 13, 65, 43,144, 0, 0, 1, 37,
+ 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 85, 7,
+ 59,124,223,255, 62,131,146, 57, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85, 71, 60,124,223,255, 63, 2, 71,186,
+ 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,200, 61, 14, 61,239, 63, 65,123,219, 66, 22, 0, 0, 63, 32, 0, 0,
+ 0, 0, 0, 0,188,145, 85, 23, 61,124,223,255, 63,127,101,125, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,251,
+ 61,197,143, 7, 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,184, 62, 14, 62, 7, 63,187,172,164,
+ 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 67, 62, 65,155,139, 63,216,177,184, 66,175, 0, 0, 62, 0, 0, 0,
+ 0, 0, 0, 0,189,145, 85, 19, 62,124,224, 19, 63,245, 17,141, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+ 0, 0, 0,216, 13, 65, 44,144, 0, 0, 1, 37, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0,186,145, 84,199, 59,124,223,255, 62,131,146, 58, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,
+187,145, 84,231, 60,124,223,255, 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,152, 61, 14, 62, 15,
+ 63, 65,123,220, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 3, 61,124,224, 15, 63,127,101,126, 66, 72, 0, 0,
+ 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,235, 61,197,143, 15, 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,
+189, 35,127,180, 62, 14, 62, 11, 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 63, 62, 65,155,147,
+ 63,216,177,184, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 15, 62,124,224, 27, 63,245, 17,141, 66,200, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 13, 65, 45,144, 0, 0, 1, 37, 0, 0, 0, 9, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 86, 7, 59,124,223,255, 62,131,146, 58,
+ 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85, 39, 60,124,224, 31, 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0,
+ 0, 0, 0, 0,188, 35,127,168, 61, 14, 62, 15, 63, 65,123,220, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 84,255,
+ 61,124,224, 39, 63,127,101,126, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,227, 61,197,143, 33, 63,158, 2, 82,
+ 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,176, 62, 14, 62, 24, 63,187,172,165, 66,150, 0, 0, 62,128, 0, 0,
+ 0, 0, 0, 0,189, 94,138, 67, 62, 65,155,162, 63,216,177,185, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 17,
+ 62,124,224, 45, 63,245, 17,142, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 13, 65, 46,144,
+ 0, 0, 1, 37, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+186,145, 85, 7, 59,124,223,255, 62,131,146, 58, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 84,199, 60,124,223,255,
+ 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,136, 61, 14, 61,255, 63, 65,123,219, 66, 22, 0, 0,
+ 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 7, 61,124,224, 15, 63,127,101,125, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,
+188,227, 20,219, 61,197,143, 7, 63,158, 2, 82, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,176, 62, 14, 62, 11,
+ 63,187,172,165, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 59, 62, 65,155,143, 63,216,177,185, 66,175, 0, 0,
+ 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 15, 62,124,224, 19, 63,245, 17,142, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 0, 0, 0,216, 13, 65, 47,144, 0, 0, 1, 37, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 84,135, 59,124,223,255, 62,131,146, 57, 65, 72, 0, 0, 63, 96, 0, 0,
+ 0, 0, 0, 0,187,145, 84,231, 60,124,223,255, 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,152,
+ 61, 14, 62, 7, 63, 65,123,220, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 84,255, 61,124,224, 15, 63,127,101,126,
+ 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,219, 61,197,143, 15, 63,158, 2, 82, 66,122, 0, 0, 62,192, 0, 0,
+ 0, 0, 0, 0,189, 35,127,168, 62, 14, 62, 15, 63,187,172,165, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 51,
+ 62, 65,155,147, 63,216,177,185, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 9, 62,124,224, 27, 63,245, 17,142,
+ 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 13, 65, 48,144, 0, 0, 1, 37, 0, 0, 0, 9,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 82, 7, 59,124,223,223,
+ 62,131,146, 57, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 84, 7, 60,124,223,235, 63, 2, 71,187, 65,200, 0, 0,
+ 63, 64, 0, 0, 0, 0, 0, 0,188, 35,126,200, 61, 14, 61,251, 63, 65,123,220, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,
+188,145, 84,167, 61,124,224, 9, 63,127,101,126, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,107, 61,197,143, 11,
+ 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,120, 62, 14, 62, 11, 63,187,172,164, 66,150, 0, 0,
+ 62,128, 0, 0, 0, 0, 0, 0,189, 94,137,251, 62, 65,155,145, 63,216,177,184, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,
+189,145, 84,239, 62,124,224, 28, 63,245, 17,141, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216,
+ 13, 65, 49,144, 0, 0, 1, 37, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0,186,145, 85, 7, 59,124,222,255, 62,131,146, 56, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85, 39,
+ 60,124,223,191, 63, 2, 71,186, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,168, 61, 14, 61,239, 63, 65,123,219,
+ 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 23, 61,124,223,255, 63,127,101,125, 66, 72, 0, 0, 63, 0, 0, 0,
+ 0, 0, 0, 0,188,227, 21, 3, 61,197,143, 7, 63,158, 2, 80, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,196,
+ 62, 14, 62, 7, 63,187,172,163, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 87, 62, 65,155,143, 63,216,177,183,
+ 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 29, 62,124,224, 23, 63,245, 17,140, 66,200, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 13, 65, 50,144, 0, 0, 1, 37, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 84, 7, 59,124,223,191, 62,131,146, 57, 65, 72, 0, 0,
+ 63, 96, 0, 0, 0, 0, 0, 0,187,145, 84, 7, 60,124,223,223, 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,
+188, 35,127, 72, 61, 14, 61,251, 63, 65,123,220, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 84,199, 61,124,224, 11,
+ 63,127,101,126, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,155, 61,197,143, 13, 63,158, 2, 81, 66,122, 0, 0,
+ 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,136, 62, 14, 62, 12, 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,
+189, 94,138, 19, 62, 65,155,144, 63,216,177,184, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 84,247, 62,124,224, 24,
+ 63,245, 17,141, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 13, 65, 51,144, 0, 0, 1, 37,
+ 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 86, 7,
+ 59,124,223,255, 62,131,146, 58, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85,135, 60,124,224, 31, 63, 2, 71,188,
+ 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,128, 8, 61, 14, 62, 7, 63, 65,123,221, 66, 22, 0, 0, 63, 32, 0, 0,
+ 0, 0, 0, 0,188,145, 85, 71, 61,124,224, 15, 63,127,101,127, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 21, 11,
+ 61,197,143, 11, 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,200, 62, 14, 62, 11, 63,187,172,164,
+ 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 91, 62, 65,155,143, 63,216,177,185, 66,175, 0, 0, 62, 0, 0, 0,
+ 0, 0, 0, 0,189,145, 85, 31, 62,124,224, 23, 63,245, 17,141, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+ 0, 0, 0,216, 13, 65, 52,144, 0, 0, 1, 37, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0,186,145, 84, 7, 59,124,223,255, 62,131,146, 58, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,
+187,145, 85, 7, 60,124,223,239, 63, 2, 71,188, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,168, 61, 14, 62, 3,
+ 63, 65,123,220, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 7, 61,124,224, 15, 63,127,101,127, 66, 72, 0, 0,
+ 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,219, 61,197,143, 17, 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,
+189, 35,127,168, 62, 14, 62, 13, 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 59, 62, 65,155,149,
+ 63,216,177,184, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 23, 62,124,224, 29, 63,245, 17,142, 66,200, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 13, 65, 53,144, 0, 0, 1, 37, 0, 0, 0, 9, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 86,135, 59,124,223,255, 62,131,146, 57,
+ 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85,103, 60,124,223,255, 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0,
+ 0, 0, 0, 0,188, 35,127,248, 61, 14, 61,255, 63, 65,123,219, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 55,
+ 61,124,224, 15, 63,127,101,125, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 21, 35, 61,197,143, 15, 63,158, 2, 80,
+ 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,220, 62, 14, 62, 15, 63,187,172,162, 66,150, 0, 0, 62,128, 0, 0,
+ 0, 0, 0, 0,189, 94,138,107, 62, 65,155,151, 63,216,177,182, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 37,
+ 62,124,224, 31, 63,245, 17,139, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 13, 65, 54,144,
+ 0, 0, 1, 37, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+186,145, 86,135, 59,124,223,255, 62,131,146, 57, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85,103, 60,124,223,255,
+ 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,184, 61, 14, 62, 15, 63, 65,123,220, 66, 22, 0, 0,
+ 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 7, 61,124,224, 31, 63,127,101,126, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,
+188,227, 20,235, 61,197,143, 31, 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,180, 62, 14, 62, 23,
+ 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 71, 62, 65,155,159, 63,216,177,184, 66,175, 0, 0,
+ 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 18, 62,124,224, 43, 63,245, 17,141, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 0, 0, 0,216, 13, 65, 55,144, 0, 0, 1, 37, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 85, 7, 59,124,222,255, 62,131,146, 56, 65, 72, 0, 0, 63, 96, 0, 0,
+ 0, 0, 0, 0,187,145, 85, 39, 60,124,223,255, 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,168,
+ 61, 14, 62, 15, 63, 65,123,219, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 15, 61,124,224, 15, 63,127,101,125,
+ 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,243, 61,197,143, 15, 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0,
+ 0, 0, 0, 0,189, 35,127,184, 62, 14, 62, 11, 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 83,
+ 62, 65,155,151, 63,216,177,184, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 25, 62,124,224, 27, 63,245, 17,140,
+ 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 13, 65, 56,144, 0, 0, 1, 37, 0, 0, 0, 9,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 86, 7, 59,124,222,255,
+ 62,131,146, 58, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85,135, 60,124,223,191, 63, 2, 71,188, 65,200, 0, 0,
+ 63, 64, 0, 0, 0, 0, 0, 0,188, 35,128, 8, 61, 14, 61,239, 63, 65,123,221, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,
+188,145, 85, 71, 61,124,223,255, 63,127,101,127, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 21, 75, 61,197,143, 7,
+ 63,158, 2, 82, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,216, 62, 14, 62, 7, 63,187,172,165, 66,150, 0, 0,
+ 62,128, 0, 0, 0, 0, 0, 0,189, 94,138,107, 62, 65,155,143, 63,216,177,185, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,
+189,145, 85, 31, 62,124,224, 23, 63,245, 17,142, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216,
+ 13, 65, 57,144, 0, 0, 1, 37, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0,186,145, 85, 7, 59,124,223,255, 62,131,146, 57, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85, 7,
+ 60,124,224, 63, 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,168, 61, 14, 62, 15, 63, 65,123,220,
+ 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 7, 61,124,224, 31, 63,127,101,126, 66, 72, 0, 0, 63, 0, 0, 0,
+ 0, 0, 0, 0,188,227, 20,219, 61,197,143, 23, 63,158, 2, 82, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,176,
+ 62, 14, 62, 15, 63,187,172,165, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 67, 62, 65,155,151, 63,216,177,185,
+ 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 19, 62,124,224, 31, 63,245, 17,142, 66,200, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 13, 65, 58,144, 0, 0, 1, 37, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 85, 7, 59,124,222,255, 62,131,146, 57, 65, 72, 0, 0,
+ 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85, 71, 60,124,223,255, 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,
+188, 35,127,200, 61, 14, 61,255, 63, 65,123,220, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 23, 61,124,224, 15,
+ 63,127,101,127, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,235, 61,197,143, 15, 63,158, 2, 82, 66,122, 0, 0,
+ 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,176, 62, 14, 62, 15, 63,187,172,165, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,
+189, 94,138, 59, 62, 65,155,147, 63,216,177,185, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 19, 62,124,224, 31,
+ 63,245, 17,142, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 13, 65, 59,144, 0, 0, 1, 37,
+ 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 86, 7,
+ 59,124,223,143, 62,131,146, 56, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85, 7, 60,124,223,223, 63, 2, 71,186,
+ 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,200, 61, 14, 61,251, 63, 65,123,218, 66, 22, 0, 0, 63, 32, 0, 0,
+ 0, 0, 0, 0,188,145, 85, 39, 61,124,224, 2, 63,127,101,125, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,235,
+ 61,197,143, 11, 63,158, 2, 80, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,168, 62, 14, 62, 11, 63,187,172,163,
+ 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 43, 62, 65,155,145, 63,216,177,183, 66,175, 0, 0, 62, 0, 0, 0,
+ 0, 0, 0, 0,189,145, 85, 7, 62,124,224, 27, 63,245, 17,139, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+ 0, 0, 0,216, 13, 65, 60,144, 0, 0, 1, 37, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0,186,145, 85, 7, 59,124,223,255, 62,131,146, 57, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,
+187,145, 85, 7, 60,124,223,255, 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,168, 61, 14, 62, 15,
+ 63, 65,123,219, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 23, 61,124,224, 15, 63,127,101,126, 66, 72, 0, 0,
+ 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,235, 61,197,143, 7, 63,158, 2, 82, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,
+189, 35,127,176, 62, 14, 62, 11, 63,187,172,165, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 67, 62, 65,155,147,
+ 63,216,177,185, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 19, 62,124,224, 27, 63,245, 17,142, 66,200, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 13, 65, 61,144, 0, 0, 1, 37, 0, 0, 0, 9, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 85, 7, 59,124,223,255, 62,131,146, 57,
+ 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 84,231, 60,124,223,191, 63, 2, 71,188, 65,200, 0, 0, 63, 64, 0, 0,
+ 0, 0, 0, 0,188, 35,127,152, 61, 14, 61,239, 63, 65,123,220, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 15,
+ 61,124,223,255, 63,127,101,126, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,235, 61,197,142,255, 63,158, 2, 81,
+ 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,184, 62, 14, 62, 7, 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0,
+ 0, 0, 0, 0,189, 94,138, 75, 62, 65,155,143, 63,216,177,184, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 19,
+ 62,124,224, 23, 63,245, 17,141, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 13, 65, 62,144,
+ 0, 0, 1, 37, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+186,145, 84, 7, 59,124,222,255, 62,131,146, 57, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 84,135, 60,124,223,191,
+ 63, 2, 71,186, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127, 8, 61, 14, 61,239, 63, 65,123,218, 66, 22, 0, 0,
+ 63, 32, 0, 0, 0, 0, 0, 0,188,145, 84,199, 61,124,223,239, 63,127,101,124, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,
+188,227, 20,139, 61,197,142,247, 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,120, 62, 14, 61,251,
+ 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 11, 62, 65,155,131, 63,216,177,185, 66,175, 0, 0,
+ 62, 0, 0, 0, 0, 0, 0, 0,189,145, 84,239, 62,124,224, 11, 63,245, 17,142, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 0, 0, 0,216, 13, 65, 63,144, 0, 0, 1, 37, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 85, 7, 59,124,222,255, 62,131,146, 57, 65, 72, 0, 0, 63, 96, 0, 0,
+ 0, 0, 0, 0,187,145, 85, 39, 60,124,223,191, 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,176,
+ 61, 14, 61,239, 63, 65,123,219, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 19, 61,124,223,239, 63,127,101,125,
+ 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,231, 61,197,142,255, 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0,
+ 0, 0, 0, 0,189, 35,127,179, 62, 14, 62, 5, 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 65,
+ 62, 65,155,139, 63,216,177,184, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 16, 62,124,224, 21, 63,245, 17,141,
+ 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 13, 65, 64,144, 0, 0, 1, 37, 0, 0, 0, 9,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 84, 7, 59,124,223,255,
+ 62,131,146, 57, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 84,199, 60,124,223,255, 63, 2, 71,187, 65,200, 0, 0,
+ 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,104, 61, 14, 61,255, 63, 65,123,220, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,
+188,145, 84,239, 61,124,224, 15, 63,127,101,126, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,203, 61,197,143, 11,
+ 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,164, 62, 14, 62, 11, 63,187,172,164, 66,150, 0, 0,
+ 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 51, 62, 65,155,145, 63,216,177,184, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,
+189,145, 85, 11, 62,124,224, 25, 63,245, 17,141, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216,
+ 13, 65, 65,144, 0, 0, 1, 37, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0,186,145, 86, 7, 59,124,223,127, 62,131,146, 57, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85, 7,
+ 60,124,223,207, 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,200, 61, 14, 61,243, 63, 65,123,220,
+ 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 39, 61,124,223,251, 63,127,101,126, 66, 72, 0, 0, 63, 0, 0, 0,
+ 0, 0, 0, 0,188,227, 20,235, 61,197,143, 3, 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,184,
+ 62, 14, 62, 7, 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 75, 62, 65,155,141, 63,216,177,184,
+ 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 23, 62,124,224, 23, 63,245, 17,141, 66,200, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 13, 65, 66,144, 0, 0, 1, 37, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 85, 7, 59,124,223,255, 62,131,146, 58, 65, 72, 0, 0,
+ 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85, 7, 60,124,223,255, 63, 2, 71,188, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,
+188, 35,127,168, 61, 14, 62, 7, 63, 65,123,220, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 7, 61,124,224, 15,
+ 63,127,101,127, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,219, 61,197,143, 15, 63,158, 2, 81, 66,122, 0, 0,
+ 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,168, 62, 14, 62, 13, 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,
+189, 94,138, 51, 62, 65,155,147, 63,216,177,185, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 11, 62,124,224, 27,
+ 63,245, 17,141, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 13, 65, 67,144, 0, 0, 1, 37,
+ 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 84, 7,
+ 59,124,223,127, 62,131,146, 57, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85, 7, 60,124,223,223, 63, 2, 71,187,
+ 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,200, 61, 14, 61,247, 63, 65,123,220, 66, 22, 0, 0, 63, 32, 0, 0,
+ 0, 0, 0, 0,188,145, 85, 7, 61,124,223,255, 63,127,101,126, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,235,
+ 61,197,143, 3, 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,184, 62, 14, 62, 6, 63,187,172,164,
+ 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 75, 62, 65,155,141, 63,216,177,184, 66,175, 0, 0, 62, 0, 0, 0,
+ 0, 0, 0, 0,189,145, 85, 23, 62,124,224, 22, 63,245, 17,141, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+ 0, 0, 0,216, 13, 65, 68,144, 0, 0, 1, 37, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0,186,145, 86, 7, 59,124,223,255, 62,131,146, 59, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,
+187,145, 85, 71, 60,124,224, 13, 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,168, 61, 14, 62, 5,
+ 63, 65,123,220, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 7, 61,124,224, 19, 63,127,101,126, 66, 72, 0, 0,
+ 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,227, 61,197,143, 17, 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,
+189, 35,127,176, 62, 14, 62, 14, 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 59, 62, 65,155,149,
+ 63,216,177,185, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 13, 62,124,224, 31, 63,245, 17,142, 66,200, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 13, 65, 69,144, 0, 0, 1, 37, 0, 0, 0, 9, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 84,151, 59,124,223,255, 62,131,146, 57,
+ 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 84,219, 60,124,223,255, 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0,
+ 0, 0, 0, 0,188, 35,127,140, 61, 14, 62, 7, 63, 65,123,220, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 84,249,
+ 61,124,224, 15, 63,127,101,126, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,205, 61,197,143, 15, 63,158, 2, 82,
+ 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,168, 62, 14, 62, 15, 63,187,172,165, 66,150, 0, 0, 62,128, 0, 0,
+ 0, 0, 0, 0,189, 94,138, 51, 62, 65,155,147, 63,216,177,185, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 10,
+ 62,124,224, 27, 63,245, 17,142, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 13, 65, 70,144,
+ 0, 0, 1, 37, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+186,145, 86, 7, 59,124,223,255, 62,131,146, 58, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85,135, 60,124,223,255,
+ 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,128, 8, 61, 14, 61,255, 63, 65,123,219, 66, 22, 0, 0,
+ 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 71, 61,124,224, 15, 63,127,101,125, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,
+188,227, 21, 11, 61,197,143, 15, 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,200, 62, 14, 62, 7,
+ 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 91, 62, 65,155,143, 63,216,177,185, 66,175, 0, 0,
+ 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 27, 62,124,224, 23, 63,245, 17,142, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 0, 0, 0,216, 13, 65, 71,144, 0, 0, 1, 37, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 84,175, 59,124,222,255, 62,131,146, 57, 65, 72, 0, 0, 63, 96, 0, 0,
+ 0, 0, 0, 0,187,145, 84,224, 60,124,223,191, 63, 2, 71,188, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,142,
+ 61, 14, 61,239, 63, 65,123,220, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 1, 61,124,223,239, 63,127,101,126,
+ 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,207, 61,197,142,255, 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0,
+ 0, 0, 0, 0,189, 35,127,164, 62, 14, 62, 3, 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 42,
+ 62, 65,155,135, 63,216,177,184, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 4, 62,124,224, 15, 63,245, 17,141,
+ 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 13, 65, 72,144, 0, 0, 1, 37, 0, 0, 0, 9,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 86, 7, 59,124,223,255,
+ 62,131,146, 57, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85, 7, 60,124,224, 31, 63, 2, 71,187, 65,200, 0, 0,
+ 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,200, 61, 14, 62, 7, 63, 65,123,220, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,
+188,145, 85, 39, 61,124,224, 23, 63,127,101,127, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,235, 61,197,143, 19,
+ 63,158, 2, 82, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,168, 62, 14, 62, 15, 63,187,172,165, 66,150, 0, 0,
+ 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 59, 62, 65,155,147, 63,216,177,186, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,
+189,145, 85, 23, 62,124,224, 31, 63,245, 17,143, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216,
+ 13, 65, 73,144, 0, 0, 1, 37, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0,186,145, 85, 7, 59,124,223,127, 62,131,146, 56, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85, 39,
+ 60,124,223,223, 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,176, 61, 14, 61,239, 63, 65,123,219,
+ 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 19, 61,124,223,255, 63,127,101,125, 66, 72, 0, 0, 63, 0, 0, 0,
+ 0, 0, 0, 0,188,227, 20,231, 61,197,143, 3, 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,178,
+ 62, 14, 62, 9, 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 63, 62, 65,155,143, 63,216,177,184,
+ 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 15, 62,124,224, 24, 63,245, 17,141, 66,200, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 13, 65, 74,144, 0, 0, 1, 37, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 86, 7, 59,124,223,255, 62,131,146, 57, 65, 72, 0, 0,
+ 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85, 7, 60,124,224, 31, 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,
+188, 35,127,136, 61, 14, 62, 7, 63, 65,123,220, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 7, 61,124,224, 15,
+ 63,127,101,126, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,235, 61,197,143, 19, 63,158, 2, 82, 66,122, 0, 0,
+ 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,184, 62, 14, 62, 15, 63,187,172,165, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,
+189, 94,138, 75, 62, 65,155,151, 63,216,177,186, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 23, 62,124,224, 31,
+ 63,245, 17,143, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 13, 65, 75,144, 0, 0, 1, 37,
+ 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 86, 7,
+ 59,124,223,255, 62,131,146, 57, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85, 7, 60,124,223,255, 63, 2, 71,187,
+ 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,136, 61, 14, 62, 7, 63, 65,123,219, 66, 22, 0, 0, 63, 32, 0, 0,
+ 0, 0, 0, 0,188,145, 85, 7, 61,124,224, 15, 63,127,101,126, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,203,
+ 61,197,143, 15, 63,158, 2, 82, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,184, 62, 14, 62, 15, 63,187,172,165,
+ 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 75, 62, 65,155,151, 63,216,177,185, 66,175, 0, 0, 62, 0, 0, 0,
+ 0, 0, 0, 0,189,145, 85, 23, 62,124,224, 31, 63,245, 17,143, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+ 0, 0, 0,216, 13, 65, 76,144, 0, 0, 1, 37, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0,186,145, 84, 7, 59,124,223,255, 62,131,146, 56, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,
+187,145, 84,135, 60,124,223,255, 63, 2, 71,186, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127, 72, 61, 14, 61,255,
+ 63, 65,123,217, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 84,231, 61,124,224, 15, 63,127,101,123, 66, 72, 0, 0,
+ 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,203, 61,197,143, 15, 63,158, 2, 80, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,
+189, 35,127,168, 62, 14, 62, 11, 63,187,172,163, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 59, 62, 65,155,147,
+ 63,216,177,182, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 7, 62,124,224, 27, 63,245, 17,139, 66,200, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 13, 65, 77,144, 0, 0, 1, 37, 0, 0, 0, 9, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 85, 71, 59,124,223,255, 62,131,146, 56,
+ 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85, 39, 60,124,223,255, 63, 2, 71,186, 65,200, 0, 0, 63, 64, 0, 0,
+ 0, 0, 0, 0,188, 35,127,144, 61, 14, 62, 15, 63, 65,123,219, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 84,255,
+ 61,124,224, 31, 63,127,101,125, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,223, 61,197,143, 31, 63,158, 2, 81,
+ 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,176, 62, 14, 62, 23, 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0,
+ 0, 0, 0, 0,189, 94,138, 63, 62, 65,155,161, 63,216,177,184, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 14,
+ 62,124,224, 43, 63,245, 17,141, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 13, 65, 78,144,
+ 0, 0, 1, 37, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+186,145, 84, 7, 59,124,223,255, 62,131,146, 58, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 84,135, 60,124,224, 15,
+ 63, 2, 71,188, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,136, 61, 14, 62, 7, 63, 65,123,220, 66, 22, 0, 0,
+ 63, 32, 0, 0, 0, 0, 0, 0,188,145, 84,231, 61,124,224, 15, 63,127,101,127, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,
+188,227, 20,203, 61,197,143, 17, 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,168, 62, 14, 62, 15,
+ 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 59, 62, 65,155,150, 63,216,177,185, 66,175, 0, 0,
+ 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 23, 62,124,224, 30, 63,245, 17,142, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 0, 0, 0,216, 13, 65, 79,144, 0, 0, 1, 37, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 84, 7, 59,124,223,255, 62,131,146, 56, 65, 72, 0, 0, 63, 96, 0, 0,
+ 0, 0, 0, 0,187,145, 84,135, 60,124,223,255, 63, 2, 71,185, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127, 72,
+ 61, 14, 61,255, 63, 65,123,217, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 84,231, 61,124,223,255, 63,127,101,123,
+ 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,203, 61,197,143, 15, 63,158, 2, 80, 66,122, 0, 0, 62,192, 0, 0,
+ 0, 0, 0, 0,189, 35,127,152, 62, 14, 62, 7, 63,187,172,163, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 43,
+ 62, 65,155,143, 63,216,177,184, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 84,255, 62,124,224, 23, 63,245, 17,141,
+ 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 13, 65, 80,144, 0, 0, 1, 37, 0, 0, 0, 9,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 85, 7, 59,124,223,127,
+ 62,131,146, 56, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85, 7, 60,124,223,223, 63, 2, 71,187, 65,200, 0, 0,
+ 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,168, 61, 14, 61,247, 63, 65,123,220, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,
+188,145, 85, 23, 61,124,223,255, 63,127,101,126, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,235, 61,197,143, 3,
+ 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,176, 62, 14, 62, 7, 63,187,172,164, 66,150, 0, 0,
+ 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 59, 62, 65,155,141, 63,216,177,184, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,
+189,145, 85, 15, 62,124,224, 23, 63,245, 17,141, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216,
+ 13, 65, 81,144, 0, 0, 1, 37, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0,186,145, 86, 7, 59,124,223,255, 62,131,146, 57, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85, 7,
+ 60,124,223,191, 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,200, 61, 14, 61,239, 63, 65,123,220,
+ 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 39, 61,124,223,255, 63,127,101,126, 66, 72, 0, 0, 63, 0, 0, 0,
+ 0, 0, 0, 0,188,227, 20,235, 61,197,143, 3, 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,184,
+ 62, 14, 62, 5, 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 75, 62, 65,155,139, 63,216,177,184,
+ 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 23, 62,124,224, 21, 63,245, 17,141, 66,200, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 13, 65, 82,144, 0, 0, 1, 37, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 86, 7, 59,124,223,255, 62,131,146, 59, 65, 72, 0, 0,
+ 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85,135, 60,124,223,255, 63, 2, 71,189, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,
+188, 35,127,200, 61, 14, 62, 1, 63, 65,123,221, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 23, 61,124,224, 16,
+ 63,127,101,127, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,235, 61,197,143, 15, 63,158, 2, 82, 66,122, 0, 0,
+ 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,184, 62, 14, 62, 13, 63,187,172,165, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,
+189, 94,138, 67, 62, 65,155,147, 63,216,177,185, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 15, 62,124,224, 30,
+ 63,245, 17,142, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 13, 65, 83,144, 0, 0, 1, 37,
+ 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 86, 7,
+ 59,124,223,255, 62,131,146, 58, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85, 7, 60,124,223,223, 63, 2, 71,187,
+ 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,136, 61, 14, 61,255, 63, 65,123,219, 66, 22, 0, 0, 63, 32, 0, 0,
+ 0, 0, 0, 0,188,145, 85, 7, 61,124,224, 7, 63,127,101,126, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,203,
+ 61,197,143, 11, 63,158, 2, 82, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,168, 62, 14, 62, 11, 63,187,172,165,
+ 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 59, 62, 65,155,145, 63,216,177,185, 66,175, 0, 0, 62, 0, 0, 0,
+ 0, 0, 0, 0,189,145, 85, 23, 62,124,224, 29, 63,245, 17,143, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+ 0, 0, 0,216, 13, 65, 84,144, 0, 0, 1, 37, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0,186,145, 86, 7, 59,124,223,191, 62,131,146, 58, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,
+187,145, 85,135, 60,124,223,255, 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,128, 8, 61, 14, 62, 11,
+ 63, 65,123,220, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 39, 61,124,224, 19, 63,127,101,127, 66, 72, 0, 0,
+ 63, 0, 0, 0, 0, 0, 0, 0,188,227, 21, 11, 61,197,143, 21, 63,158, 2, 82, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,
+189, 35,127,200, 62, 14, 62, 17, 63,187,172,165, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 91, 62, 65,155,153,
+ 63,216,177,184, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 31, 62,124,224, 33, 63,245, 17,141, 66,200, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 13, 65, 85,144, 0, 0, 1, 37, 0, 0, 0, 9, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 86, 7, 59,124,223,255, 62,131,146, 57,
+ 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 86, 7, 60,124,223,255, 63, 2, 71,188, 65,200, 0, 0, 63, 64, 0, 0,
+ 0, 0, 0, 0,188, 35,128, 8, 61, 14, 61,255, 63, 65,123,220, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 71,
+ 61,124,224, 15, 63,127,101,126, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 21, 43, 61,197,143, 15, 63,158, 2, 81,
+ 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,216, 62, 14, 62, 11, 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0,
+ 0, 0, 0, 0,189, 94,138,107, 62, 65,155,147, 63,216,177,183, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 39,
+ 62,124,224, 27, 63,245, 17,140, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 13, 65, 86,144,
+ 0, 0, 1, 37, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+186,145, 86, 7, 59,124,223,255, 62,131,146, 58, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85, 7, 60,124,223,255,
+ 63, 2, 71,188, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,200, 61, 14, 62, 7, 63, 65,123,220, 66, 22, 0, 0,
+ 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 7, 61,124,224, 15, 63,127,101,127, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,
+188,227, 20,203, 61,197,143, 15, 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,168, 62, 14, 62, 13,
+ 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 43, 62, 65,155,147, 63,216,177,184, 66,175, 0, 0,
+ 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 15, 62,124,224, 31, 63,245, 17,142, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 0, 0, 0,216, 13, 65, 87,144, 0, 0, 1, 37, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 84,135, 59,124,223,255, 62,131,146, 57, 65, 72, 0, 0, 63, 96, 0, 0,
+ 0, 0, 0, 0,187,145, 84,199, 60,124,223,255, 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,136,
+ 61, 14, 61,255, 63, 65,123,220, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 84,255, 61,124,224, 15, 63,127,101,126,
+ 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,215, 61,197,143, 7, 63,158, 2, 82, 66,122, 0, 0, 62,192, 0, 0,
+ 0, 0, 0, 0,189, 35,127,174, 62, 14, 62, 11, 63,187,172,165, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 57,
+ 62, 65,155,143, 63,216,177,185, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 13, 62,124,224, 23, 63,245, 17,142,
+ 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 13, 65, 88,144, 0, 0, 1, 37, 0, 0, 0, 9,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 84,135, 59,124,223,255,
+ 62,131,146, 57, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 84,231, 60,124,223,255, 63, 2, 71,187, 65,200, 0, 0,
+ 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,168, 61, 14, 62, 15, 63, 65,123,220, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,
+188,145, 85, 15, 61,124,224, 31, 63,127,101,126, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,211, 61,197,143, 23,
+ 63,158, 2, 82, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,168, 62, 14, 62, 15, 63,187,172,165, 66,150, 0, 0,
+ 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 51, 62, 65,155,147, 63,216,177,185, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,
+189,145, 85, 11, 62,124,224, 27, 63,245, 17,142, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216,
+ 13, 65, 89,144, 0, 0, 1, 37, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0,186,145, 85, 7, 59,124,223,255, 62,131,146, 57, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 84,247,
+ 60,124,223,191, 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,152, 61, 14, 61,239, 63, 65,123,219,
+ 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 11, 61,124,223,255, 63,127,101,125, 66, 72, 0, 0, 63, 0, 0, 0,
+ 0, 0, 0, 0,188,227, 20,227, 61,197,142,255, 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,180,
+ 62, 14, 62, 7, 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 73, 62, 65,155,143, 63,216,177,184,
+ 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 20, 62,124,224, 23, 63,245, 17,141, 66,200, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 13, 65, 90,144, 0, 0, 1, 37, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 84,135, 59,124,223,255, 62,131,146, 57, 65, 72, 0, 0,
+ 63, 96, 0, 0, 0, 0, 0, 0,187,145, 84,231, 60,124,223,255, 63, 2, 71,188, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,
+188, 35,127,136, 61, 14, 61,255, 63, 65,123,220, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 84,255, 61,124,224, 15,
+ 63,127,101,126, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,211, 61,197,143, 15, 63,158, 2, 81, 66,122, 0, 0,
+ 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,168, 62, 14, 62, 15, 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,
+189, 94,138, 55, 62, 65,155,147, 63,216,177,184, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 12, 62,124,224, 27,
+ 63,245, 17,141, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 13, 65, 91,144, 0, 0, 1, 37,
+ 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 86, 7,
+ 59,124,223,255, 62,131,146, 57, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85, 7, 60,124,224, 63, 63, 2, 71,187,
+ 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,200, 61, 14, 62, 15, 63, 65,123,220, 66, 22, 0, 0, 63, 32, 0, 0,
+ 0, 0, 0, 0,188,145, 85, 7, 61,124,224, 31, 63,127,101,126, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,235,
+ 61,197,143, 23, 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,184, 62, 14, 62, 15, 63,187,172,164,
+ 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 75, 62, 65,155,151, 63,216,177,185, 66,175, 0, 0, 62, 0, 0, 0,
+ 0, 0, 0, 0,189,145, 85, 23, 62,124,224, 35, 63,245, 17,142, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+ 0, 0, 0,216, 13, 65, 92,144, 0, 0, 1, 37, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0,186,145, 84,135, 59,124,224, 15, 62,131,146, 58, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,
+187,145, 84,199, 60,124,223,251, 63, 2, 71,188, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,152, 61, 14, 62, 8,
+ 63, 65,123,220, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 7, 61,124,224, 22, 63,127,101,126, 66, 72, 0, 0,
+ 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,219, 61,197,143, 17, 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,
+189, 35,127,172, 62, 14, 62, 15, 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 51, 62, 65,155,148,
+ 63,216,177,184, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 9, 62,124,224, 30, 63,245, 17,141, 66,200, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 13, 65, 93,144, 0, 0, 1, 37, 0, 0, 0, 9, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 85, 7, 59,124,223,255, 62,131,146, 58,
+ 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85, 7, 60,124,223,191, 63, 2, 71,188, 65,200, 0, 0, 63, 64, 0, 0,
+ 0, 0, 0, 0,188, 35,127,168, 61, 14, 61,255, 63, 65,123,220, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 23,
+ 61,124,224, 15, 63,127,101,126, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,219, 61,197,143, 15, 63,158, 2, 81,
+ 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,176, 62, 14, 62, 11, 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0,
+ 0, 0, 0, 0,189, 94,138, 67, 62, 65,155,147, 63,216,177,184, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 19,
+ 62,124,224, 27, 63,245, 17,141, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 13, 65, 94,144,
+ 0, 0, 1, 37, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+186,145, 84, 7, 59,124,222,255, 62,131,146, 57, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 85, 7, 60,124,223,191,
+ 63, 2, 71,187, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,136, 61, 14, 61,239, 63, 65,123,219, 66, 22, 0, 0,
+ 63, 32, 0, 0, 0, 0, 0, 0,188,145, 85, 7, 61,124,223,239, 63,127,101,126, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,
+188,227, 20,203, 61,197,142,255, 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,168, 62, 14, 62, 3,
+ 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 59, 62, 65,155,137, 63,216,177,184, 66,175, 0, 0,
+ 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 23, 62,124,224, 17, 63,245, 17,142, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 0, 0, 0,216, 13, 65, 95,144, 0, 0, 1, 37, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 84,111, 59,124,223,255, 62,131,146, 57, 65, 72, 0, 0, 63, 96, 0, 0,
+ 0, 0, 0, 0,187,145, 84,173, 60,124,223,255, 63, 2, 71,188, 65,200, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127,116,
+ 61, 14, 61,255, 63, 65,123,221, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,188,145, 84,245, 61,124,224, 15, 63,127,101,127,
+ 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,199, 61,197,143, 13, 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0,
+ 0, 0, 0, 0,189, 35,127,163, 62, 14, 62, 13, 63,187,172,164, 66,150, 0, 0, 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 47,
+ 62, 65,155,147, 63,216,177,185, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,189,145, 85, 6, 62,124,224, 28, 63,245, 17,142,
+ 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,216, 13, 65, 96,144, 0, 0, 1, 37, 0, 0, 0, 9,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,186,145, 82, 7, 59,124,223,127,
+ 62,131,146, 57, 65, 72, 0, 0, 63, 96, 0, 0, 0, 0, 0, 0,187,145, 84,135, 60,124,223,223, 63, 2, 71,186, 65,200, 0, 0,
+ 63, 64, 0, 0, 0, 0, 0, 0,188, 35,127, 8, 61, 14, 61,247, 63, 65,123,218, 66, 22, 0, 0, 63, 32, 0, 0, 0, 0, 0, 0,
+188,145, 84,199, 61,124,224, 7, 63,127,101,125, 66, 72, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,188,227, 20,139, 61,197,143, 7,
+ 63,158, 2, 81, 66,122, 0, 0, 62,192, 0, 0, 0, 0, 0, 0,189, 35,127,136, 62, 14, 62, 11, 63,187,172,164, 66,150, 0, 0,
+ 62,128, 0, 0, 0, 0, 0, 0,189, 94,138, 27, 62, 65,155,147, 63,216,177,183, 66,175, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,
+189,145, 84,247, 62,124,224, 28, 63,245, 17,140, 66,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 20,
+ 13, 65, 97,144, 0, 0, 0,112, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,250, 0, 0, 0, 0,
+ 68, 65, 84, 65, 0, 0, 0, 76, 13, 65, 97,208, 0, 0, 0,102, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19,
+ 0, 0, 0, 23, 80, 97,114,116,105, 99,108,101, 83,121,115,116,101,109, 32, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 13, 64,202, 32, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 4, 0, 0, 0, 1, 0, 2, 0, 0,
+ 0, 0, 79, 66, 0, 0, 3, 68, 7,159,248, 32, 0, 0, 0,109, 0, 0, 0, 1, 7,159,252, 32, 7,159,244, 32, 0, 0, 0, 0,
+ 0, 0, 0, 0, 79, 66,112,114,101,118,105,101,119,108, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 97,109,112, 0, 1, 4, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 13, 64,161,192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,188,211,197,192, 65, 59,229, 76, 64,184,106,208,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,191, 98,215,247, 63, 72, 11, 71, 63, 6,248,230, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 63, 29, 14,212, 62,182,225,149,191, 52, 76, 84, 0, 0, 0, 0,191, 74, 40, 22, 62,139, 74,201,
+191, 12,198,228, 0, 0, 0, 0,187,157,213, 84, 63,100,190,151, 62,229,223,145, 0, 0, 0, 0,188,211,197,192, 65, 59,229, 76,
+ 64,184,106,208, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 51, 46, 0, 0,179, 63, 0, 0, 0, 0, 0, 0, 51, 2, 0, 0, 63,128, 0, 0,
+179, 0, 0, 0, 0, 0, 0, 0,179, 85, 0, 0,179, 0, 0, 1, 63,128, 0, 0, 0, 0, 0, 0,177,255,255,203, 40,122,144, 2,
+181, 0, 0, 0, 63,128, 0, 0, 63, 29, 14,213,191, 74, 40, 23,187,157,211,254, 0, 0, 0, 0,191, 52, 76, 83,191, 12,198,227,
+ 62,229,223,148, 0, 0, 0, 0,190,182,225,149,190,139, 74,202,191,100,190,152, 0, 0, 0, 0,192,158, 36,208,192,110,186,100,
+193,169, 43, 99, 63,128, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 68, 0, 5, 0, 1, 0, 0, 0, 0, 79, 66, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,100, 0, 0, 0, 0,201,150,180, 56, 63,128, 0, 0,
+ 61, 35,215, 10, 63,128, 0, 0, 62,204,204,205, 61,204,204,205, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0,
+ 1, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 1, 64, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 0, 0, 3, 68,
+ 7,159,252, 32, 0, 0, 0,109, 0, 0, 0, 1, 0, 0, 0, 0, 7,159,248, 32, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66,116,101,
+120,116,117,114,101, 0,114,101,118,105,101,119, 46, 48, 48, 53, 0, 0, 0, 0, 0, 1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 65,161,176,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 13, 65, 98, 80,188,183, 16, 61,191,103,204, 21, 63,228,234, 48, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,155, 39,153, 64,155, 39,153, 64,155, 39,153, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 63,201, 15,218, 37,192, 0, 0, 36,255,255,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 64,155, 39,153, 38, 27, 39,152,166,232,187,102, 0, 0, 0, 0, 38,232,187,102, 52,196,134,157, 64,155, 39,153, 0, 0, 0, 0,
+ 38, 27, 39,154,192,155, 39,153, 52,196,134,157, 0, 0, 0, 0,188,183, 16, 61,191,103,204, 21, 63,228,234, 48, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0,153, 34, 33,106, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+153, 34, 33,106, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,179,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0,
+ 62, 83, 50, 25, 36,158,101,147, 35,211, 50, 27, 0, 0, 0, 0,164,158,101,147, 62, 83, 50, 25, 38,174, 59,158, 0, 0, 0, 0,
+173, 44, 24, 0,175, 94,165,224, 62, 83, 50, 25, 0, 0, 0, 0, 59, 33,251,236, 59, 40, 37,135, 63,238, 71,118, 63,128, 0, 0,
+ 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 68, 0, 1, 0, 2, 0, 0, 0, 0, 79, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,100, 0, 0, 0, 0,201,150,180, 56, 63,128, 0, 0, 61, 35,215, 10, 63,128, 0, 0,
+ 62,204,204,205, 61,204,204,205, 0, 0, 0, 0, 61,117,194,143, 0, 0, 0, 0, 4, 0, 1, 1, 1, 0, 0, 0, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 1, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 4, 13, 65, 98, 80, 0, 0, 0, 0,
+ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 77, 65, 0, 0, 2,108, 7,160, 0, 32, 0, 0, 0, 42, 0, 0, 0, 1, 7,160, 4, 32,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 65, 99,104,101, 99,107,101,114,100, 97,114,107, 0, 0, 0, 97,116,101,114,
+105, 97, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 1, 61,221, 1,116, 61,220,251,200, 61,220,251,200,
+ 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 63, 0, 0, 0, 63, 89,153,154, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63, 76,204,205,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,160, 0, 0, 0, 0, 0, 0, 63,160, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 2, 0, 2, 0, 1, 0, 6, 63,128, 0, 0, 63,128, 0, 0, 0, 18, 0, 18,
+ 59,163,215, 10, 59,163,215, 10, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 64, 0, 3, 1, 64, 0, 3, 0, 1, 0, 4,
+ 0, 12, 0, 4, 63, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64,128, 0, 0, 63, 0, 0, 0, 61,204,204,205, 63, 0, 0, 0,
+ 61,204,204,205, 61,204,204,205, 63,128, 0, 0, 8, 16, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 63,128, 0, 0, 63,128, 0, 0, 13, 65, 98,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0,
+ 63,128, 0, 0, 63, 76,204,205, 63, 76,204,205, 63, 76,204,205, 61, 76,204,205, 61,204,204,205, 63,166,102,102, 63,128, 0, 0,
+ 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,136, 13, 65, 98,128, 0, 0, 0, 33, 0, 0, 0, 1, 0, 16, 0, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 13, 65,103, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,192, 0, 1,
+ 63,192, 0, 1, 63,192, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56,209,183, 23, 56,209,177,184,
+ 56,209,177,184, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63, 0, 0, 0, 63,128, 0, 0, 62, 76,204,205,
+ 0, 0, 0, 0, 0, 0, 77, 65, 0, 0, 2,108, 7,160, 4, 32, 0, 0, 0, 42, 0, 0, 0, 1, 7,160, 8, 32, 7,160, 0, 32,
+ 0, 0, 0, 0, 0, 0, 0, 0, 77, 65, 99,104,101, 99,107,101,114,108,105,103,104,116, 0, 0, 0, 97,116,101,114,105, 0, 0,
+ 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 1, 62,157, 65,188, 62,157, 61,178, 62,157, 61,178, 63,128, 0, 0,
+ 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 63, 0, 0, 0, 63, 89,153,154, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63, 76,204,205, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,160, 0, 0, 0, 0, 0, 0, 63,160, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 61,204,204,205, 0, 2, 0, 2, 0, 1, 0, 6, 63,128, 0, 0, 63,128, 0, 0, 0, 18, 0, 18, 59,163,215, 10,
+ 59,163,215, 10, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 64, 0, 3, 1, 64, 0, 3, 0, 1, 0, 4, 0, 12, 0, 4,
+ 63, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 3,
+ 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64,128, 0, 0, 63, 0, 0, 0, 61,204,204,205, 63, 0, 0, 0, 61,204,204,205,
+ 61,204,204,205, 63,128, 0, 0, 8, 16, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0,
+ 63,128, 0, 0, 13, 65, 99, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0,
+ 63, 76,204,205, 63, 76,204,205, 63, 76,204,205, 61, 76,204,205, 61,204,204,205, 63,166,102,102, 63,128, 0, 0, 0, 0, 0, 0,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,136, 13, 65, 99, 48, 0, 0, 0, 33, 0, 0, 0, 1, 0, 16, 0, 1, 0, 0, 0, 0,
+ 0, 0, 0, 0, 13, 65,103, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56,209,183, 23, 56,209,177,184, 56,209,177,184,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63, 0, 0, 0, 63,128, 0, 0, 62, 76,204,205, 0, 0, 0, 0,
+ 0, 0, 77, 65, 0, 0, 2,108, 7,160, 8, 32, 0, 0, 0, 42, 0, 0, 0, 1, 7,160, 16, 32, 7,160, 4, 32, 0, 0, 0, 0,
+ 0, 0, 0, 0, 77, 65,112,114,101,118,105,101,119, 0, 0, 97,116,101,114,105, 97,108, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 63,128, 0, 0, 63, 54,232, 61, 63, 23,161,184, 63,128, 0, 0, 63,128, 0, 0,
+ 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0,
+ 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 62, 68,248,188, 63,128, 0, 0, 63, 76,204,205, 63, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 63,130,121,198, 63,160, 0, 0, 0, 0, 0, 0, 63,160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 61,204,204,205, 0, 2, 0, 2, 0, 50, 0, 6, 63,128, 0, 0, 63,128, 0, 0, 0, 18, 0, 18, 59,163,215, 10, 59,163,215, 10,
+ 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 17, 0, 3, 3, 17, 0, 3, 0, 1, 0, 4, 0, 12, 0, 4, 63, 0, 0, 0,
+ 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 2,
+ 0, 0, 0, 0, 63, 0, 0, 0, 64,128, 0, 0, 63, 0, 0, 0, 61,204,204,205, 63, 0, 0, 0, 61,204,204,205, 61,204,204,205,
+ 63,128, 0, 0, 8, 16, 0, 1, 7,160, 12, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0,
+ 13, 65, 99,224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 65,100,144, 63, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63, 76,204,205,
+ 63, 76,204,205, 63, 76,204,205, 61, 76,204,205, 61,204,204,205, 63,166,102,102, 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 0, 0, 0,136, 13, 65, 99,224, 0, 0, 0, 33, 0, 0, 0, 1, 0, 16, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 65,101,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63, 0, 0, 0, 63,128, 0, 0, 62, 76,204,205, 0, 0, 0, 0, 68, 65, 84, 65,
+ 0, 0, 3, 8, 7,160, 12, 32, 0, 0, 0, 36, 0, 0, 0, 1, 0, 0, 0, 2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 62,220, 40,245, 0, 0, 0, 0, 63,125,112,164, 63,128, 0, 0, 63, 24,214,106, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 1, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63,128, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,
+ 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63,128, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0,
+ 63, 0, 0, 0, 63,128, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63,128, 0, 0,
+ 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63,128, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,
+ 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63,128, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0,
+ 63, 0, 0, 0, 63,128, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63,128, 0, 0,
+ 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63,128, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,
+ 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63,128, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0,
+ 63, 0, 0, 0, 63,128, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63,128, 0, 0,
+ 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63,128, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,
+ 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63,128, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 32,
+ 13, 65,100,144, 0, 0, 0, 19, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 65, 0, 0, 2,108, 7,160, 16, 32, 0, 0, 0, 42, 0, 0, 0, 1,
+ 7,160, 24, 32, 7,160, 8, 32, 0, 0, 0, 0, 0, 0, 0, 0, 77, 65,116,101,120,116,117,114,101, 0,114,101,118,105,101,119,
+ 46, 48, 48, 49, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 63, 76,204,205, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,160, 0, 0, 0, 0, 0, 0,
+ 63,160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61,204,204,205, 0, 2, 0, 2, 0, 50, 0, 6, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 18, 0, 18, 59,163,215, 10, 59,163,215, 10, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 0, 71, 3, 1, 0, 67,
+ 0, 1, 0, 4, 0, 12, 0, 4, 63, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 2, 0, 0, 0, 0, 63, 0, 0, 0, 64,128, 0, 0, 63, 0, 0, 0, 61,204,204,205,
+ 63, 0, 0, 0, 61,204,204,205, 61,204,204,205, 63,128, 0, 0, 8, 1, 0,129, 7,160, 20, 32, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 13, 65,100,224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0,
+ 63,128, 0, 0, 63,128, 0, 0, 63, 76,204,205, 63, 76,204,205, 63, 76,204,205, 61, 76,204,205, 61,204,204,205, 63,166,102,102,
+ 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,136, 13, 65,100,224, 0, 0, 0, 33, 0, 0, 0, 1,
+ 0, 1, 0,129, 0, 0, 0, 0, 0, 0, 0, 0, 13, 65,101,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0,
+ 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63, 0, 0, 0, 63,128, 0, 0,
+ 62, 76,204,205, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 3, 8, 7,160, 20, 32, 0, 0, 0, 36, 0, 0, 0, 1, 0, 0, 0, 2,
+ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62,220, 40,245, 0, 0, 0, 0, 63,125,112,164,
+ 63,128, 0, 0, 63, 24,214,106, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 1, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0,
+ 63,128, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63,128, 0, 0, 63, 0, 0, 0,
+ 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63,128, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0,
+ 63, 0, 0, 0, 63, 0, 0, 0, 63,128, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0,
+ 63,128, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63,128, 0, 0, 63, 0, 0, 0,
+ 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63,128, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0,
+ 63, 0, 0, 0, 63, 0, 0, 0, 63,128, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0,
+ 63,128, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63,128, 0, 0, 63, 0, 0, 0,
+ 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63,128, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0,
+ 63, 0, 0, 0, 63, 0, 0, 0, 63,128, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0,
+ 63,128, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63,128, 0, 0, 63, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -4448,1856 +4619,1870 @@ char datatoc_preview_blend[]= {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 32, 0, 0, 0,216, 59,153, 2, 19, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 65, 0, 0, 68, 2, 0, 0, 0,147,165, 2, 39, 0, 0, 0,
- 1, 0, 0, 0,248, 6,131, 2,152,140,165, 2, 0, 0, 0, 0, 0, 0, 0, 0, 77, 65,116,101,120,116,117,114,101, 0,114,101,
-118,105,101,119, 46, 48, 48, 49, 0, 0, 0, 0, 1, 0, 0, 0, 69, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0, 0, 0,205,204, 76, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 63,
- 0, 0, 0, 0, 0, 0,160, 63, 0, 0, 0, 0, 0, 0, 0, 0,205,204,204, 61, 2, 0, 2, 0, 50, 0, 0, 6, 0, 0,128, 63,
- 0, 0,128, 63, 18, 0, 18, 0, 10,215,163, 59, 10,215,163, 59, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 71, 0, 1, 3,
- 67, 0, 1, 3, 1, 0, 4, 0, 12, 0, 4, 0, 0, 0, 0, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0,128, 64, 0, 0, 0, 63,
-205,204,204, 61, 0, 0, 0, 63,205,204,204, 61,205,204,204, 61, 0, 0,128, 63, 1, 8,129, 0, 48,150,165, 2, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,248, 16,164, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 63,205,204, 76, 63,205,204, 76, 63,205,204, 76, 61,205,204,204, 61,
-102,102,166, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,136, 0, 0, 0,248, 16,164, 2, 30, 0, 0, 0, 1, 0, 0, 0, 1, 0,129, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,112, 9,131, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 63, 0, 0,128, 63,205,204, 76, 62,
- 0, 0, 0, 0, 68, 65, 84, 65, 8, 3, 0, 0, 48,150,165, 2, 33, 0, 0, 0, 1, 0, 0, 0, 0, 0, 2, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,245, 40,220, 62, 0, 0, 0, 0,164,112,125, 63, 0, 0,128, 63,
-106,214, 24, 63, 0, 0,128, 63, 0, 0,128, 63, 1, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63,
- 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0,
- 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,
- 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63,
- 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0,
- 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,
- 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63,
- 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0,
- 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,
- 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63,
- 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 77, 65, 0, 0, 68, 2, 0, 0,248, 6,131, 2, 39, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,147,165, 2, 0, 0, 0, 0,
- 0, 0, 0, 0, 77, 65,116,101,120,116,117,114,101, 46, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
- 70, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,205,204, 76, 63, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 63, 0, 0, 0, 0, 0, 0,160, 63, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,128, 63, 2, 0, 2, 0, 50, 0, 0, 6, 0, 0,128, 63, 0, 0,128, 63, 18, 0, 18, 0, 10,215,163, 59, 10,215,163, 59,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 1, 3, 3, 0, 1, 3, 1, 0, 4, 0, 12, 0, 4, 0, 0, 0, 0, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 2, 0, 0, 0, 3, 0, 0, 0, 2, 0,
- 0, 0, 0, 0, 0, 0, 0, 63, 0, 0,128, 64, 0, 0, 0, 63,205,204,204, 61, 0, 0, 0, 63,205,204,204, 61,205,204,204, 61,
- 0, 0,128, 63, 0, 0, 0, 0,224,155,165, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 63,
-205,204, 76, 63,205,204, 76, 63,205,204, 76, 61,205,204,204, 61,102,102,166, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 8, 3, 0, 0,
-224,155,165, 2, 33, 0, 0, 0, 1, 0, 0, 0, 0, 0, 2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,245, 40,220, 62, 0, 0, 0, 0,164,112,125, 63, 0, 0,128, 63,106,214, 24, 63, 0, 0,128, 63, 0, 0,128, 63,
- 1, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63,
- 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63,
- 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63,
- 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63,
- 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63,
- 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63,
- 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63,
- 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63,
- 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63,
- 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63,
- 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 69, 0, 0, 4, 1, 0, 0,112, 9,131, 2,
- 35, 0, 0, 0, 1, 0, 0, 0,168, 10,131, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 69,112,114,101,118,105,101,
-119, 0,101,120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 64, 1, 0, 0, 0, 0, 0, 0, 0, 0,128, 62,
- 0, 0,160, 64, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 64, 0, 0, 0, 64, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 64, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 5, 0, 8, 0, 2, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 1, 0, 1, 0, 3, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,205,204,204, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 72, 63,155, 2, 68, 65, 84, 65, 32, 0, 0, 0, 72, 63,155, 2, 19, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 84, 69, 0, 0, 4, 1, 0, 0,168, 10,131, 2, 35, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,112, 9,131, 2, 0, 0, 0, 0,
- 0, 0, 0, 0, 84, 69,102, 97,107,101,115,104, 97,100,111,119, 0, 0, 76,101,110,100, 0,101,120, 0, 0, 0, 2, 0, 0, 0,
- 65, 1, 0, 0, 0, 0, 0, 0, 0, 0,128, 62, 0, 0,160, 64, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 64, 0, 0, 0, 64, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 64, 0, 0, 0, 0, 2, 0, 0, 0,
- 0, 0, 0, 0, 5, 0, 40, 0, 5, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 1, 0, 1, 0,
- 3, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,205,204,204, 60, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 69, 0, 0, 12, 1, 0, 0,
-136,161,165, 2, 51, 0, 0, 0, 1, 0, 0, 0, 80,153,166, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 69, 67,117,
- 98,101, 46, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 0,153, 2, 16, 63, 8, 3, 40,176,154, 2,
- 0, 0, 0, 0,248,208,129, 2,208,213,166, 2, 0, 0, 0, 0, 96, 53,164, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-104,128,152, 2, 1, 0, 0, 0, 5, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0,200,129,152, 2, 1, 0, 0, 0, 5, 0, 0, 0,
- 12, 0, 0, 0, 0, 0, 0, 0,160,120,152, 2, 3, 0, 0, 0, 5, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0,249, 1, 0, 0,
-237, 3, 0, 0,244, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,192,133, 88, 61,184, 45, 85,189,196,181, 24,190,
-185, 71, 35, 63,153, 31,235, 62,130,102,203, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 30, 0, 4, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 4, 0, 0, 0,
- 96, 0,153, 2, 0, 0, 0, 0, 1, 0, 0, 0,152,140,165, 2, 68, 65, 84, 65, 44, 1, 0, 0,104,128,152, 2, 21, 1, 0, 0,
- 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248,208,129, 2,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,116, 39, 0, 0,248,208,129, 2, 57, 0, 0, 0,
-249, 1, 0, 0,140,144,131, 62,119,163,200, 60,156, 9, 85, 62,125, 92, 70,170,228, 21, 0,255, 50,222, 26,190,119,163,200, 60,
-156, 9, 85, 62,131,163, 70,170,228, 21, 0,255, 61,126,146, 62,223, 37, 8,188, 99,183, 47, 62,247, 76,191,194,228, 81, 2,255,
-147,185, 56,190,223, 37, 8,188, 99,183, 47, 62, 9,179,191,194,228, 81, 2,255,129,176,157, 62,211, 91,217,188,244,238,246, 61,
- 31, 84,226,181,191, 61, 2,255, 28, 30, 79,190,211, 91,217,188,244,238,246, 61,225,171,226,181,191, 61, 2,255,115, 19, 94, 62,
-103,251,128,189,150, 32, 14, 62,241, 9,155,144, 64, 62, 2,255, 26,161,227,189,103,251,128,189,150, 32, 14, 62, 15,246,155,144,
- 64, 62, 2,255,115, 19, 94, 62,251,118, 25,189, 20,165, 62, 62,184, 14,144,163, 76, 87, 2,255, 26,161,227,189,251,118, 25,189,
- 20,165, 62, 62, 72,241,144,163, 76, 87, 2,255,115, 19, 94, 62,232,107, 34, 60,116,128, 92, 62, 3, 3,121,131,110, 29, 0,255,
- 26,161,227,189,232,107, 34, 60,116,128, 92, 62,253,252,121,131,110, 29, 0,255, 58,193, 56, 62,119,163,200, 60, 77,247, 99, 62,
- 56,171,117,167,206, 36, 0,255,168,252,152,189,119,163,200, 60, 77,247, 99, 62,200, 84,117,167,206, 36, 0,255,109, 42, 23, 62,
-223, 37, 8,188, 88,215, 73, 62,152,217,122,203, 56,110, 0,255,229,197, 0, 62,211, 91,217,188, 71, 14, 29, 62,179,184, 93,175,
- 66, 69, 2,255,249, 23,164,188,211, 91,217,188, 71, 14, 29, 62, 77, 71, 93,175, 66, 69, 2,255, 88,231,182, 61,159,154,121, 61,
-179,201, 32, 62,181,151,104,255, 51, 74, 2,255,207,121,134, 60,159,154,121, 61,179,201, 32, 62, 75,104,104,255, 51, 74, 2,255,
- 25,158,242, 61,159,154,121, 61, 88,215, 73, 62, 78,171,150,255,246, 95, 2,255,110,194, 80,188,159,154,121, 61, 88,215, 73, 62,
-178, 84,150,255,246, 95, 2,255,138,211, 41, 62,159,154,121, 61, 77,247, 99, 62,152,133,153,254, 98, 37, 0,255,143, 66,118,189,
-159,154,121, 61, 77,247, 99, 62,104,122,153,254, 98, 37, 0,255, 58,193, 56, 62,154,232,206, 61, 77,247, 99, 62, 24,170, 13, 88,
- 89, 35, 0,255,168,252,152,189,154,232,206, 61, 77,247, 99, 62,232, 85, 13, 88, 89, 35, 0,255,109, 42, 23, 62,173, 79, 5, 62,
- 88,215, 73, 62,249,200,221, 65,244, 94, 2,255, 31,158, 43,189,173, 79, 5, 62, 88,215, 73, 62, 7, 55,221, 65,244, 94, 2,255,
-229,197, 0, 62, 54,180, 27, 62, 71, 14, 29, 62, 51,186, 86, 78, 78, 73, 2,255,249, 23,164,188, 54,180, 27, 62, 71, 14, 29, 62,
-205, 69, 86, 78, 78, 73, 2,255,115, 19, 94, 62,111, 6, 65, 62,150, 32, 14, 62, 2, 11,152,107,114, 68, 2,255, 26,161,227,189,
-111, 6, 65, 62,150, 32, 14, 62,254,244,152,107,114, 68, 2,255,115, 19, 94, 62, 14, 43, 35, 62, 20,165, 62, 62,201, 14,180, 91,
- 14, 88, 2,255, 26,161,227,189, 14, 43, 35, 62, 20,165, 62, 62, 55,241,180, 91, 14, 88, 2,255,115, 19, 94, 62,250,195,236, 61,
-116,128, 92, 62,134, 2, 29,125,228, 26, 0,255, 26,161,227,189,250,195,236, 61,116,128, 92, 62,122,253, 29,125,228, 26, 0,255,
-140,144,131, 62,154,232,206, 61,156, 9, 85, 62, 54, 93, 67, 85,154, 20, 0,255, 50,222, 26,190,154,232,206, 61,156, 9, 85, 62,
-202,162, 67, 85,154, 20, 0,255, 61,126,146, 62,173, 79, 5, 62, 99,183, 47, 62,241, 76,161, 60, 97, 82, 2,255,147,185, 56,190,
-173, 79, 5, 62, 99,183, 47, 62, 15,179,161, 60, 97, 82, 2,255,129,176,157, 62, 54,180, 27, 62,244,238,246, 61,179, 83,157, 71,
- 45, 65, 2,255, 28, 30, 79,190, 54,180, 27, 62,244,238,246, 61, 77,172,157, 71, 45, 65, 2,255,157, 89,176, 62,159,154,121, 61,
- 67, 1,232, 61, 40,111,113,255,117, 63, 2,255, 84,112,116,190,159,154,121, 61, 67, 1,232, 61,216,144,113,255,117, 63, 2,255,
-237,107,161, 62,159,154,121, 61,139, 64, 40, 62, 48,100,154,255,167, 79, 2,255,244,148, 86,190,159,154,121, 61,139, 64, 40, 62,
-208,155,154,255,167, 79, 2,255,100, 7,139, 62,159,154,121, 61, 48, 78, 81, 62,117,126,181,254,185, 19, 0,255,227,203, 41,190,
-159,154,121, 61, 48, 78, 81, 62,139,129,181,254,185, 19, 0,255, 26,229,140, 62,159,154,121, 61, 8,197, 88, 62,160,120,106,254,
-198, 42, 2,255, 79,135, 45,190,159,154,121, 61, 8,197, 88, 62, 96,135,106,254,198, 42, 2,255, 66,110,133, 62,114, 95,214, 61,
-116,128, 92, 62,173, 93,126, 74, 93, 45, 2,255,158,153, 30,190,114, 95,214, 61,116,128, 92, 62, 83,162,126, 74, 93, 45, 2,255,
-115, 19, 94, 62,170,177,251, 61,185,178,103, 62, 9, 11, 31,115,216, 54, 2,255, 26,161,227,189,170,177,251, 61,185,178,103, 62,
-247,244, 31,115,216, 54, 2,255,206, 5, 53, 62,114, 95,214, 61,145, 41,111, 62, 9,181,184, 80, 43, 65, 2,255,208,133,145,189,
-114, 95,214, 61,145, 41,111, 62,247, 74,184, 80, 43, 65, 2,255,178, 92, 34, 62,159,154,121, 61,145, 41,111, 62,116,146, 57,254,
- 43, 66, 2,255, 48,103, 88,189,159,154,121, 61,145, 41,111, 62,140,109, 57,254, 43, 66, 2,255,206, 5, 53, 62, 22,200,170, 60,
-145, 41,111, 62, 34,182,181,173,115, 64, 2,255,208,133,145,189, 22,200,170, 60,145, 41,111, 62,222, 73,181,173,115, 64, 2,255,
-115, 19, 94, 62,159,154,121, 61,253,228,114, 62, 74, 24,139,255,171,125, 2,255, 26,161,227,189,159,154,121, 61,253,228,114, 62,
-182,231,139,255,171,125, 2,255,115, 19, 94, 62,149,249, 43, 59,185,178,103, 62,218, 10,140,140, 45, 54, 2,255, 26,161,227,189,
-149,249, 43, 59,185,178,103, 62, 38,245,140,140, 45, 54, 2,255, 66,110,133, 62, 22,200,170, 60,116,128, 92, 62,141, 92,203,179,
-210, 44, 2,255,158,153, 30,190, 22,200,170, 60,116,128, 92, 62,115,163,203,179,210, 44, 2,255,203,133, 88, 61,202,248, 23, 62,
- 88,215, 73, 62, 0, 0, 43,124, 17, 31, 0,255,203,133, 88, 61, 34, 77,229, 61,145, 41,111, 62, 0, 0, 63,249,209,127, 0,255,
-203,133, 88, 61,150,254,188,190,236, 27, 70, 62, 0, 0,204,251,237,127, 0,255,203,133, 88, 61,191, 79, 78,190,116,128, 92, 62,
- 0, 0, 33,150,238, 71, 2,255,203,133, 88, 61,146,221, 14,190, 77,247, 99, 62, 0, 0, 28,100,192, 79, 0,255,203,133, 88, 61,
- 30, 99,211,190, 20,165, 62, 62, 0, 0,184,142,147, 59, 2,255,203,133, 88, 61,133,198, 12, 62,190,169, 6, 62, 0, 0,143,103,
- 57, 75, 0,255,203,133, 88, 61, 99, 38, 91, 62, 28,120,239, 61, 0, 0,115, 78, 34,101, 0,255,203,133, 88, 61, 16,243,187, 62,
-170,250,206,190, 0, 0,190,110,212,191, 2,255,203,133, 88, 61,247,106, 87, 62,178,224, 11,191, 0, 0,144, 35, 12,133, 3,255,
-203,133, 88, 61, 18,165,157,188, 33, 20, 9,191, 0, 0,194,214,213,134, 2,255,203,133, 88, 61, 32, 43,108,190,227, 83,160,190,
- 0, 0,154,134,113,215, 2,255,109, 42, 23, 62,146,221, 14,190, 67, 1,232, 61,144,113,122,198, 79, 13, 0,255, 31,158, 43,189,
-146,221, 14,190, 67, 1,232, 61,112,142,122,198, 79, 13, 0,255, 87,106, 75, 62,138, 37,131,190, 28,120,239, 61,196,122, 19, 31,
-152, 18, 2,255,225, 78,190,189,138, 37,131,190, 28,120,239, 61, 60,133, 19, 31,152, 18, 2,255,115, 19, 94, 62, 2,186,192,190,
- 28,120,239, 61,167,125,146, 12,226, 20, 0,255, 26,161,227,189, 2,186,192,190, 28,120,239, 61, 89,130,146, 12,226, 20, 0,255,
- 75,138,101, 62,200, 96,239,190,227, 37,202, 61,113,124,142,242,196, 26, 2,255,203,142,242,189,200, 96,239,190,227, 37,202, 61,
-143,131,142,242,196, 26, 2,255, 47,225, 82, 62,195,112,252,190, 10,175,194, 61,159, 79, 44,159,210, 25, 2,255,146, 60,205,189,
-195,112,252,190, 10,175,194, 61, 97,176, 44,159,210, 25, 2,255, 41,248, 11, 62,242, 4, 1,191,107,138,224, 61,143, 19, 13,131,
-178, 19, 2,255, 27,170,253,188,242, 4, 1,191,107,138,224, 61,113,236, 13,131,178, 19, 2,255,203,133, 88, 61,168,226, 2,191,
-244,238,246, 61, 0, 0, 75,130, 21, 24, 2,255,140,144,131, 62, 18,242,240,189,227, 37,202, 61,114, 47,117,137,232, 8, 2,255,
- 50,222, 26,190, 18,242,240,189,227, 37,202, 61,142,208,117,137,232, 8, 2,255, 83, 55,178, 62, 23,233,143,189,187,156,209, 61,
- 25, 77,198,154,214, 13, 2,255,193, 43,120,190, 23,233,143,189,187,156,209, 61,231,178,198,154,214, 13, 2,255, 26,222,224, 62,
-182,236,140, 60, 49, 21,112, 61,216,113,247,198,255, 12, 2,255,167,188,170,190,182,236,140, 60, 49, 21,112, 61, 40,142,247,198,
-255, 12, 2,255,243, 84,232, 62,202,248, 23, 62, 82,238, 2, 62,104,113, 31, 51, 32, 30, 2,255,128, 51,178,190,202,248, 23, 62,
- 82,238, 2, 62,152,142, 31, 51, 32, 30, 2,255,112,224,196, 62,190, 24, 50, 62, 2,220, 17, 62,216, 64,225,106,121, 27, 0,255,
-253,190,142,190,190, 24, 50, 62, 2,220, 17, 62, 40,191,225,106,121, 27, 0,255,134,160,144, 62, 20, 20,106, 62, 99,183, 47, 62,
-137, 75, 82,101, 70, 20, 0,255, 39,254, 52,190, 20, 20,106, 62, 99,183, 47, 62,119,180, 82,101, 70, 20, 0,255,195, 37, 79, 62,
- 67, 92,154, 62,236, 27, 70, 62,241, 38, 19,119, 54, 26, 2,255,186,197,197,189, 67, 92,154, 62,236, 27, 70, 62, 15,217, 19,119,
- 54, 26, 2,255,229,197, 0, 62,181, 7,145, 62, 48, 78, 81, 62, 21,175, 54, 96, 12, 24, 2,255,249, 23,164,188,181, 7,145, 62,
- 48, 78, 81, 62,235, 80, 54, 96, 12, 24, 2,255,168,249,167, 61, 42,212, 53, 62,196,146, 77, 62,174,155,128, 76,151, 21, 0,255,
-144, 48,194, 60, 42,212, 53, 62,196,146, 77, 62, 82,100,128, 76,151, 21, 0,255, 81,129, 4, 62,241,129, 16, 62, 8,197, 88, 62,
- 0, 25, 4,237, 22,124, 0,255, 89,243,193,188,241,129, 16, 62, 8,197, 88, 62, 0,231, 4,237, 22,124, 0,255,105,176,227, 61,
- 17,132,184, 61,156, 9, 85, 62,160,255,126,232,209,125, 0,255,214,169,178,187, 17,132,184, 61,156, 9, 85, 62, 96, 0,126,232,
-209,125, 0,255, 31,158, 43,189,223, 37, 8,188, 88,215, 73, 62,104, 38,122,203, 56,110, 0,255,184, 69,105, 62, 92, 82, 55,189,
- 59, 46, 55, 62,106, 34,119,200, 16,110, 0,255,163, 5,250,189, 92, 82, 55,189, 59, 46, 55, 62,150,221,119,200, 16,110, 0,255,
-134,160,144, 62,115,128,187,188,139, 64, 40, 62,161, 55, 60,207,115,104, 0,255, 39,254, 52,190,115,128,187,188,139, 64, 40, 62,
- 95,200, 60,207,115,104, 0,255,157, 89,176, 62,205, 26, 17, 61, 71, 14, 29, 62,181, 58,123,226,214,109, 0,255, 84,112,116,190,
-205, 26, 17, 61, 71, 14, 29, 62, 75,197,123,226,214,109, 0,255, 9, 21,180, 62, 57, 13,177, 61, 71, 14, 29, 62,157, 49, 61,230,
- 36,115, 0,255, 45,231,123,190, 57, 13,177, 61, 71, 14, 29, 62, 99,206, 61,230, 36,115, 0,255,123,192,170, 62,170,177,251, 61,
- 31,133, 36, 62,206, 39,175,234,196,119, 0,255, 16, 62,105,190,170,177,251, 61, 31,133, 36, 62, 50,216,175,234,196,119, 0,255,
-214,178,129, 62, 54,180, 27, 62, 20,165, 62, 62, 62, 24, 85,255,173,125, 0,255,198, 34, 23,190, 54,180, 27, 62, 20,165, 62, 62,
-194,231, 85,255,173,125, 0,255,246,142, 45, 62,230,161, 42, 62, 48, 78, 81, 62,251, 31, 40,247,158,123, 0,255, 32,152,130,189,
-230,161, 42, 62, 48, 78, 81, 62, 5,224, 40,247,158,123, 0,255,203,133, 88, 61,104,133,209,190,236, 27, 70, 62, 0, 0,148,210,
-170,119, 0,255,185,194,212, 61, 36, 83,198,190,236, 27, 70, 62, 39, 19, 65,222,248,121, 0,255,191,196,240, 58, 36, 83,198,190,
-236, 27, 70, 62,217,236, 65,222,248,121, 0,255,145, 57,220, 61,207, 80,226,190,167,233, 58, 62,134, 2,132,217, 12,122, 0,255,
- 77,241,236,186,207, 80,226,190,167,233, 58, 62,122,253,132,217, 12,122, 0,255,168,249,167, 61, 19,131,237,190,207,114, 51, 62,
- 13,252,169,214, 18,121, 0,255,144, 48,194, 60, 19,131,237,190,207,114, 51, 62,243, 3,169,214, 18,121, 0,255,203,133, 88, 61,
-200, 96,239,190, 99,183, 47, 62, 0, 0,150,219,180,122, 0,255,203,133, 88, 61,254,152, 18,190,196,146, 77, 62, 0, 0, 46, 97,
- 76, 83, 0,255,203,133, 88, 61, 18,242,240,189, 88,215, 73, 62, 0, 0,197,104,134, 73, 0,255,225, 75,205, 61,235,104,248,189,
- 88,215, 73, 62, 52, 36, 2, 53,187,110, 0,255,179,158,179, 59,235,104,248,189, 88,215, 73, 62,204,219, 2, 53,187,110, 0,255,
-105,176,227, 61,174,134, 33,190,196,146, 77, 62,187, 95, 14,212,182, 72, 0,255,214,169,178,187,174,134, 33,190,196,146, 77, 62,
- 69,160, 14,212,182, 72, 0,255, 48, 94,190, 61, 15, 98, 63,190, 88,215, 73, 62,117, 64,117,207, 90, 99, 0,255,220, 60, 81, 60,
- 15, 98, 63,190, 88,215, 73, 62,139,191,117,207, 90, 99, 0,255,252,119,116, 62,239, 95,151,189,139, 64, 40, 62,103, 49,157,196,
- 13,102, 0,255, 22, 53, 8,190,239, 95,151,189,139, 64, 40, 62,153,206,157,196, 13,102, 0,255,231,123,174, 62,211, 91,217,188,
- 2,220, 17, 62,142, 59,107,204,223,100, 2,255,232,180,112,190,211, 91,217,188, 2,220, 17, 62,114,196,107,204,223,100, 2,255,
-220,155,200, 62, 45,246, 46, 61,190,169, 6, 62,102, 66, 11,217, 65,102, 0,255,105,122,146,190, 45,246, 46, 61,190,169, 6, 62,
-154,189, 11,217, 65,102, 0,255, 72, 87,204, 62,170,177,251, 61,179,201, 32, 62, 87, 54,142,228,151,112, 0,255,213, 53,150,190,
-170,177,251, 61,179,201, 32, 62,169,201,142,228,151,112, 0,255, 78, 71,191, 62,241,129, 16, 62,128, 96, 66, 62, 82, 42, 97,247,
-125,120, 2,255,219, 37,137,190,241,129, 16, 62,128, 96, 66, 62,174,213, 97,247,125,120, 2,255,140,144,131, 62, 31,244, 79, 62,
- 77,247, 99, 62,192, 41,216,254,253,120, 0,255, 50,222, 26,190, 31,244, 79, 62, 77,247, 99, 62, 64,214,216,254,253,120, 0,255,
- 87,106, 75, 62, 48,189,124, 62,105,160,118, 62,217, 28, 53, 7,126,124, 0,255,225, 78,190,189, 48,189,124, 62,105,160,118, 62,
- 39,227, 53, 7,126,124, 0,255,109, 42, 23, 62,236,138,113, 62, 65, 23,126, 62,125,255, 44, 5,227,127, 0,255, 31,158, 43,189,
-236,138,113, 62, 65, 23,126, 62,131, 0, 44, 5,227,127, 0,255,225, 75,205, 61,202,248, 23, 62,213, 91,122, 62,130,238, 89, 2,
-197,126, 0,255,179,158,179, 59,202,248, 23, 62,213, 91,122, 62,126, 17, 89, 2,197,126, 0,255,105,176,227, 61,217,159,203,189,
- 37,110,107, 62,115, 23, 27,230, 34,123, 0,255,214,169,178,187,217,159,203,189, 37,110,107, 62,141,232, 27,230, 34,123, 0,255,
-218,229, 26, 62, 64, 3,133,190,167,233, 58, 62,212, 74, 28, 14,225,102, 2,255,207,139, 58,189, 64, 3,133,190,167,233, 58, 62,
- 44,181, 28, 14,225,102, 2,255,246,142, 45, 62,184,151,194,190, 99,183, 47, 62,235, 72, 17,252, 31,105, 2,255, 32,152,130,189,
-184,151,194,190, 99,183, 47, 62, 21,183, 17,252, 31,105, 2,255,206, 5, 53, 62, 99,149,222,190, 31,133, 36, 62,179, 66,197,225,
-249,104, 2,255,208,133,145,189, 99,149,222,190, 31,133, 36, 62, 77,189,197,225,249,104, 2,255, 30, 24, 38, 62,234,249,244,190,
-111,151, 21, 62, 62, 44, 4,183, 98, 95, 2,255,224, 84,103,189,234,249,244,190,111,151, 21, 62,194,211, 4,183, 98, 95, 2,255,
- 81,129, 4, 62, 86,181,248,190,111,151, 21, 62,155, 19, 52,158, 54, 80, 2,255, 89,243,193,188, 86,181,248,190,111,151, 21, 62,
-101,236, 52,158, 54, 80, 2,255,203,133, 88, 61,195,112,252,190,219, 82, 25, 62, 0, 0,201,154, 88, 78, 2,255,203,133, 88, 61,
- 52, 55,247,188,128, 96, 66, 62, 0, 0, 2,252,239,127, 0,255,203,133, 88, 61,222,227, 61, 61,156, 9, 85, 62, 0, 0,112,227,
-196,124, 0,255, 47,225, 82, 62, 82, 93, 46, 62, 88,215, 73, 62, 58, 21,234,254, 56,126, 0,255,146, 60,205,189, 82, 93, 46, 62,
- 88,215, 73, 62,198,234,234,254, 56,126, 0,255, 81,129, 4, 62,170, 34, 94, 60,196,146, 77, 62, 37,214,110,232,163,118, 0,255,
- 89,243,193,188,170, 34, 94, 60,196,146, 77, 62,219, 41,110,232,163,118, 0,255, 65, 39,235, 61,222,227, 61, 61, 48, 78, 81, 62,
-150,232,127,230, 57,123, 0,255,173, 11, 21,188,222,227, 61, 61, 48, 78, 81, 62,106, 23,127,230, 57,123, 0,255,145, 57,220, 61,
- 76,220,190,190,236, 27, 70, 62,117, 20,197,248, 36,126, 0,255, 77,241,236,186, 76,220,190,190,236, 27, 70, 62,139,235,197,248,
- 36,126, 0,255, 88,231,182, 61, 64, 3,133,190,196,146, 77, 62, 43, 19,128, 0,141,126, 2,255,207,121,134, 60, 64, 3,133,190,
-196,146, 77, 62,213,236,128, 0,141,126, 2,255,203,133, 88, 61, 64, 3,133,190,196,146, 77, 62, 0, 0,122,255,254,127, 0,255,
-203,133, 88, 61, 43, 11, 82,190, 88,215, 73, 62, 0, 0,121,184, 36,106, 0,255, 8,213,197, 61, 55,235, 55,190,116,128, 92, 62,
-167, 66,139,160, 45, 53, 2,255, 27,134, 21, 60, 55,235, 55,190,116,128, 92, 62, 89,189,139,160, 45, 53, 2,255, 65, 39,235, 61,
-174,134, 33,190, 77,247, 99, 62,133,118,215,224,239, 36, 2,255,173, 11, 21,188,174,134, 33,190, 77,247, 99, 62,123,137,215,224,
-239, 36, 2,255,185,194,212, 61, 57,123,233,189,116,128, 92, 62,167, 81,141, 95, 49, 24, 2,255,191,196,240, 58, 57,123,233,189,
-116,128, 92, 62, 89,174,141, 95, 49, 24, 2,255, 31,149,145, 61, 97, 4,226,189,116,128, 92, 62,189,200,160,108, 26, 39, 2,255,
- 89,225, 13, 61, 97, 4,226,189,116,128, 92, 62, 67, 55,160,108, 26, 39, 2,255,203,133, 88, 61,106, 84, 22,190,253,228,114, 62,
- 0, 0, 42, 23,225,125, 0,255,247, 11,153, 61,235,104,248,189, 37,110,107, 62,186,231, 89, 78, 66, 98, 2,255, 82,231,253, 60,
-235,104,248,189, 37,110,107, 62, 70, 24, 89, 78, 66, 98, 2,255, 8,213,197, 61,195,223,255,189, 37,110,107, 62, 88, 43,134, 62,
-237,102, 2,255, 27,134, 21, 60,195,223,255,189, 37,110,107, 62,168,212,134, 62,237,102, 2,255,185,194,212, 61,174,134, 33,190,
-253,228,114, 62,247, 46, 89,233,228,116, 2,255,191,196,240, 58,174,134, 33,190,253,228,114, 62, 9,209, 89,233,228,116, 2,255,
- 88,231,182, 61,243,184, 44,190,185,178,103, 62, 46, 31,198,181,128, 99, 2,255,207,121,134, 60,243,184, 44,190,185,178,103, 62,
-210,224,198,181,128, 99, 2,255,203,133, 88, 61, 15, 98, 63,190,185,178,103, 62, 0, 0,185,191,175,110, 2,255, 98, 74, 49, 62,
- 83,148, 74,190,107,138,224, 61, 23,120, 34, 41, 99, 16, 0,255,248, 14,138,189, 83,148, 74,190,107,138,224, 61,233,135, 34, 41,
- 99, 16, 0,255, 81,129, 4, 62,134,253, 40,190,167,233, 58, 62,251, 80, 26,250,241, 98, 0,255, 89,243,193,188,134,253, 40,190,
-167,233, 58, 62, 5,175, 26,250,241, 98, 0,255, 41,248, 11, 62, 83,148, 74,190,167,233, 58, 62,215, 83,153, 16, 71, 95, 0,255,
- 27,170,253,188, 83,148, 74,190,167,233, 58, 62, 41,172,153, 16, 71, 95, 0,255, 30, 24, 38, 62,243,184, 44,190,107,138,224, 61,
- 24,122, 67, 35, 64, 15, 0,255,224, 84,103,189,243,184, 44,190,107,138,224, 61,232,133, 67, 35, 64, 15, 0,255,203,133, 88, 61,
- 93,165,235,190, 99,183, 47, 62, 0, 0,139, 86, 77, 94, 0,255,247, 11,153, 61,167,199,233,190, 99,183, 47, 62,144,206,200, 70,
-125, 94, 0,255, 82,231,253, 60,167,199,233,190, 99,183, 47, 62,112, 49,200, 70,125, 94, 0,255, 8,213,197, 61, 99,149,222,190,
-167,233, 58, 62,253,164,109, 17, 75, 88, 0,255, 27,134, 21, 60, 99,149,222,190,167,233, 58, 62, 3, 91,109, 17, 75, 88, 0,255,
- 8,213,197, 61, 70,236,203,190,128, 96, 66, 62,141,225, 87,168, 39, 88, 0,255, 27,134, 21, 60, 70,236,203,190,128, 96, 66, 62,
-115, 30, 87,168, 39, 88, 0,255,203,133, 88, 61,212, 64,213,190,179,201, 32, 62, 0, 0, 20,159,153, 83, 0,255, 8,213,197, 61,
-252,201,205,190, 31,133, 36, 62, 5,230,250,177, 20, 98, 0,255, 27,134, 21, 60,252,201,205,190, 31,133, 36, 62,251, 25,250,177,
- 20, 98, 0,255, 8,213,197, 61,173,183,220,190,219, 82, 25, 62, 18,152, 8, 24,188, 70, 0,255, 27,134, 21, 60,173,183,220,190,
-219, 82, 25, 62,238,103, 8, 24,188, 70, 0,255,247, 11,153, 61, 59, 12,230,190,111,151, 21, 62, 26,222,242, 49,221,112, 0,255,
- 82,231,253, 60, 59, 12,230,190,111,151, 21, 62,230, 33,242, 49,221,112, 0,255,203,133, 88, 61,241,233,231,190,111,151, 21, 62,
- 0, 0, 18, 60, 5,113, 0,255,189, 60, 8, 62,142,209, 76, 61,116,128, 92, 62, 4, 30, 93,244,225,123, 0,255,186,206,223,188,
-142,209, 76, 61,116,128, 92, 62,252,225, 93,244,225,123, 0,255,149,179, 15, 62, 22,200,170, 60, 8,197, 88, 62, 71, 9, 34,251,
-144,127, 0,255,190,194, 13,189, 22,200,170, 60, 8,197, 88, 62,185,246, 34,251,144,127, 0,255,155,156, 86, 62,202,248, 23, 62,
- 48, 78, 81, 62, 81, 17, 74, 2,204,126, 0,255,106,179,212,189,202,248, 23, 62, 48, 78, 81, 62,175,238, 74, 2,204,126, 0,255,
- 58,193, 56, 62, 94, 61, 20, 62, 8,197, 88, 62,218, 25,177,253, 86,125, 2,255,168,252,152,189, 94, 61, 20, 62, 8,197, 88, 62,
- 38,230,177,253, 86,125, 2,255, 64,170,127, 62, 25, 11, 9, 62, 8,197, 88, 62,182, 21,210,240, 57,125, 2,255, 90,103, 19,190,
- 25, 11, 9, 62, 8,197, 88, 62, 74,234,210,240, 57,125, 2,255,237,107,161, 62, 34, 77,229, 61,207,114, 51, 62,143, 28,249,237,
-117,123, 0,255,244,148, 86,190, 34, 77,229, 61,207,114, 51, 62,113,227,249,237,117,123, 0,255, 15, 5,167, 62, 97,150,169, 61,
- 99,183, 47, 62,209, 15,217,246,175,126, 0,255, 56,199, 97,190, 97,150,169, 61, 99,183, 47, 62, 47,240,217,246,175,126, 0,255,
- 89, 39,165, 62,125, 8, 32, 61,247,251, 43, 62,177, 24,190,253,146,125, 0,255,204, 11, 94,190,125, 8, 32, 61,247,251, 43, 62,
- 79,231,190,253,146,125, 0,255, 26,229,140, 62, 60,222,152,187, 20,165, 62, 62, 20, 33, 75, 2,160,123, 0,255, 79,135, 45,190,
- 60,222,152,187, 20,165, 62, 62,236,222, 75, 2,160,123, 0,255,184, 69,105, 62,115,128,187,188, 88,215, 73, 62, 85, 26,238,248,
- 14,125, 0,255,163, 5,250,189,115,128,187,188, 88,215, 73, 62,171,229,238,248, 14,125, 0,255,178, 92, 34, 62,226,194,133,186,
-116,128, 92, 62, 8, 7,142,250,175,127, 0,255, 48,103, 88,189,226,194,133,186,116,128, 92, 62,248,248,142,250,175,127, 0,255,
- 41,248, 11, 62, 57, 13,177, 61,116,128, 92, 62,169, 34, 2,240, 43,122, 0,255, 27,170,253,188, 57, 13,177, 61,116,128, 92, 62,
- 87,221, 2,240, 43,122, 0,255,218,229, 26, 62,170,177,251, 61,116,128, 92, 62,126, 27,108,239,231,123, 0,255,207,139, 58,189,
-170,177,251, 61,116,128, 92, 62,130,228,108,239,231,123, 0,255, 30, 24, 38, 62,250,195,236, 61, 48, 78, 81, 62,226, 64, 13,207,
-224, 98, 0,255,224, 84,103,189,250,195,236, 61, 48, 78, 81, 62, 30,191, 13,207,224, 98, 0,255, 1,111, 19, 62, 57, 13,177, 61,
- 48, 78, 81, 62, 29, 96,169,229, 81, 80, 0,255,110,176, 28,189, 57, 13,177, 61, 48, 78, 81, 62,227,159,169,229, 81, 80, 0,255,
-138,211, 41, 62, 77,106,205, 59, 48, 78, 81, 62, 36, 55,122, 71,188, 90, 0,255,143, 66,118,189, 77,106,205, 59, 48, 78, 81, 62,
-220,200,122, 71,188, 90, 0,255,184, 69,105, 62,161,220, 67,188,128, 96, 66, 62, 76, 21, 90, 78,241, 98, 0,255,163, 5,250,189,
-161,220, 67,188,128, 96, 66, 62,180,234, 90, 78,241, 98, 0,255,174, 41,137, 62,149,249, 43, 59, 59, 46, 55, 62, 85,245, 69, 69,
- 25,107, 0,255,118, 16, 38,190,149,249, 43, 59, 59, 46, 55, 62,171, 10, 69, 69, 25,107, 0,255,129,176,157, 62,222,227, 61, 61,
-139, 64, 40, 62,232,223,211, 29, 67,120, 0,255, 28, 30, 79,190,222,227, 61, 61,139, 64, 40, 62, 24, 32,211, 29, 67,120, 0,255,
- 55,142,159, 62,137, 31,162, 61,139, 64, 40, 62,148,210,123,238, 95,118, 0,255,136,217, 82,190,137, 31,162, 61,139, 64, 40, 62,
-108, 45,123,238, 95,118, 0,255, 21,245,153, 62,114, 95,214, 61,247,251, 43, 62,216,229,108,179, 43, 99, 0,255, 67,167, 71,190,
-114, 95,214, 61,247,251, 43, 62, 40, 26,108,179, 43, 99, 0,255,212,238,123, 62,173, 79, 5, 62,196,146, 77, 62,202,237,179,158,
- 35, 81, 2,255,238,171, 15,190,173, 79, 5, 62,196,146, 77, 62, 54, 18,179,158, 35, 81, 2,255,166,124, 60, 62, 25, 11, 9, 62,
-156, 9, 85, 62, 24, 39,118,212,214,113, 2,255,129,115,160,189, 25, 11, 9, 62,156, 9, 85, 62,232,216,118,212,214,113, 2,255,
-155,156, 86, 62,133,198, 12, 62,196,146, 77, 62,213, 1,189,193,208,111, 0,255,106,179,212,189,133,198, 12, 62,196,146, 77, 62,
- 43,254,189,193,208,111, 0,255,109, 42, 23, 62,216,126,230, 60,196,146, 77, 62,226, 84,192, 42,187, 85, 0,255, 31,158, 43,189,
-216,126,230, 60,196,146, 77, 62, 30,171,192, 42,187, 85, 0,255, 1,111, 19, 62, 63,191, 91, 61,196,146, 77, 62,235,102,196, 2,
- 11, 76, 0,255,110,176, 28,189, 63,191, 91, 61,196,146, 77, 62, 21,153,196, 2, 11, 76, 0,255,185,194,212, 61,122,230, 38, 62,
- 42,101, 10, 62,183,182,118,104, 5,246, 0,255,191,196,240, 58,122,230, 38, 62, 42,101, 10, 62, 73, 73,118,104, 5,246, 0,255,
- 1,111, 19, 62,186,247,131, 62,150, 32, 14, 62,208,192,221, 66, 3,167, 2,255,110,176, 28,189,186,247,131, 62,150, 32, 14, 62,
- 48, 63,221, 66, 3,167, 2,255,155,156, 86, 62,220,144,137, 62, 82,238, 2, 62, 59, 9, 89, 90,208,165, 2,255,106,179,212,189,
-220,144,137, 62, 82,238, 2, 62,197,246, 89, 90,208,165, 2,255,208,194,142, 62,139,175, 83, 62,107,138,224, 61,165, 37,104,114,
-176,212, 0,255,187, 66, 49,190,139,175, 83, 62,107,138,224, 61, 91,218,104,114,176,212, 0,255,152,105,189, 62, 14, 43, 35, 62,
-170,211,164, 61, 67, 45, 40,116, 1,227, 0,255, 37, 72,135,190, 14, 43, 35, 62,170,211,164, 61,189,210, 40,116, 1,227, 0,255,
- 66,103,217, 62,133,198, 12, 62, 73,248,134, 61,100, 94,237, 79, 18,223, 0,255,207, 69,163,190,133,198, 12, 62, 73,248,134, 61,
-156,161,237, 79, 18,223, 0,255, 32,206,211, 62,119,163,200, 60,252,115,211, 60,247,120,255,221,165,231, 0,255,173,172,157,190,
-119,163,200, 60,252,115,211, 60, 9,135,255,221,165,231, 0,255,123,192,170, 62,188, 45, 85,189,112, 94, 52, 61,155, 76,106,154,
- 19,242, 0,255, 16, 62,105,190,188, 45, 85,189,112, 94, 52, 61,101,179,106,154, 19,242, 0,255,140,144,131, 62, 0, 41,196,189,
- 33,111,142, 61,204, 56, 26,142,138, 13, 0,255, 50,222, 26,190, 0, 41,196,189, 33,111,142, 61, 52,199, 26,142,138, 13, 0,255,
-203,133, 88, 61, 16,243,187, 62, 89,242,105,188, 0, 0,155,106,214, 70, 2,255,203,133, 88, 61,226,121,208, 62,254, 7, 62,190,
- 0, 0,243,127, 82, 3, 2,255,203,133, 88, 61,254,152, 18,190, 11,214,236,190, 0, 0, 54,164,204,166, 3,255,203,133, 88, 61,
-173,190,136,190,139,142,124,189, 0, 0,179,129, 65,235, 0,255,203,133, 88, 61,205,243, 1,191, 73,248,134, 61, 0, 0,182,151,
-204,181, 2,255,203,133, 88, 61,247,217,218,190,241, 12, 56, 60, 0, 0,231,221,162,132, 2,255,203,133, 88, 61,161,222,162,190,
-147, 21,157, 57, 0, 0, 16,212,201,135, 0,255,203,133, 88, 61,207, 87,142,190,141,212,146,188, 0, 0,245,147, 97,187, 0,255,
- 61,119,230, 62,239,172,106, 61,161, 43,253,189,164,125,181,235,156, 13, 0,255,202, 85,176,190,239,172,106, 61,161, 43,253,189,
- 92,130,181,235,156, 13, 0,255,243, 84,232, 62,194,113,199, 61, 78, 26, 47,190,174,126, 23,238, 66,252, 0,255,128, 51,178,190,
-194,113,199, 61, 78, 26, 47,190, 82,129, 23,238, 66,252, 0,255, 32,206,211, 62,216, 49,147, 61,181,218,180,190, 70, 81,148, 13,
- 15,158, 1,255,173,172,157,190,216, 49,147, 61,181,218,180,190,186,174,148, 13, 15,158, 1,255,174, 41,137, 62, 54,180, 27, 62,
-226, 76,244,190,123, 58,228, 21, 70,144, 3,255,118, 16, 38,190, 54,180, 27, 62,226, 76,244,190,133,197,228, 21, 70,144, 3,255,
-146,121,202, 62,239, 95,151,189,240, 61,238,189, 76, 89,139,164,161, 6, 2,255, 31, 88,148,190,239, 95,151,189,240, 61,238,189,
-180,166,139,164,161, 6, 2,255,197,226,168, 62, 97, 4,226,189,163, 21,103,190, 93, 38, 34,134,182, 7, 0,255,164,130,101,190,
- 97, 4,226,189,163, 21,103,190,163,217, 34,134,182, 7, 0,255, 9, 21,180, 62,109, 27,100,189,255,252,178,190,106, 43,219,170,
-222,170, 1,255, 45,231,123,190,109, 27,100,189,255,252,178,190,150,212,219,170,222,170, 1,255,155,156, 86, 62,211, 91,217,188,
- 85,248,234,190,168, 55,109,213,229,148, 2,255,106,179,212,189,211, 91,217,188, 85,248,234,190, 88,200,109,213,229,148, 2,255,
- 30, 24, 38, 62,112, 61, 93,190,191,112, 37, 61,197,120, 36,255,158,213, 0,255,224, 84,103,189,112, 61, 93,190,191,112, 37, 61,
- 59,135, 36,255,158,213, 0,255, 41,248, 11, 62,209, 24,123,190,176,102,236,188,188, 84, 20,181, 24,196, 0,255, 27,170,253,188,
-209, 24,123,190,176,102,236,188, 68,171, 20,181, 24,196, 0,255, 19, 56, 64, 62,110,117,196,190, 92, 79,241, 60,131, 79, 86,254,
-183,155, 2,255, 89,234,167,189,110,117,196,190, 92, 79,241, 60,125,176, 86,254,183,155, 2,255,246,142, 45, 62, 59, 19,146,190,
- 95,149, 7, 61, 5, 99, 8, 1,231,174, 0,255, 32,152,130,189, 59, 19,146,190, 95,149, 7, 61,251,156, 8, 1,231,174, 0,255,
- 47,225, 82, 62,234,249,244,190, 15,131, 22, 61, 65, 62,227,185,224,168, 2,255,146, 60,205,189,234,249,244,190, 15,131, 22, 61,
-191,193,227,185,224,168, 2,255, 25,158,242, 61,178,167,207,190,155,152,181, 60,133, 16,208,232, 55,131, 0,255,110,194, 80,188,
-178,167,207,190,155,152,181, 60,123,239,208,232, 55,131, 0,255,105,176,227, 61,201,103,155,190, 58,189,151, 60, 7, 48,163,224,
-149,141, 0,255,214,169,178,187,201,103,155,190, 58,189,151, 60,249,207,163,224,149,141, 0,255, 81,129, 4, 62,195,112,252,190,
-129, 39, 97, 61, 68, 12,218,158,147,173, 0,255, 89,243,193,188,195,112,252,190,129, 39, 97, 61,188,243,218,158,147,173, 0,255,
- 70,161, 30, 62,163,166, 59,190,208, 57, 82, 61,195,124,106,227,203,255, 0,255,127,121, 73,189,163,166, 59,190,208, 57, 82, 61,
- 61,131,106,227,203,255, 0,255,218,229, 26, 62,174,134, 33,190, 33,111,142, 61, 29,120,105,231,193, 36, 0,255,207,139, 58,189,
-174,134, 33,190, 33,111,142, 61,227,135,105,231,193, 36, 0,255,109, 42, 23, 62,186,102, 7,190,130, 74,172, 61,160,101,164,182,
-240, 25, 0,255, 31,158, 43,189,186,102, 7,190,130, 74,172, 61, 96,154,164,182,240, 25, 0,255,218,229, 26, 62,140,230,111,190,
-206,171,148,189,120, 84,221,159,198,253, 0,255,207,139, 58,189,140,230,111,190,206,171,148,189,136,171,221,159,198,253, 0,255,
-127,243, 67, 62, 83,148, 74,190, 16,205,139,190,255, 67, 42,151, 73,228, 2,255, 49, 97,175,189, 83,148, 74,190, 16,205,139,190,
- 1,188, 42,151, 73,228, 2,255, 7, 88, 90, 62,235,104,248,189,244, 28,205,190,201, 63, 25,176, 0,179, 3,255, 66, 42,220,189,
-235,104,248,189,244, 28,205,190, 55,192, 25,176, 0,179, 3,255,248, 75,135, 62, 55,124,180, 62,187,202,167,190, 34, 56,160, 95,
- 17,192, 2,255, 10, 85, 34,190, 55,124,180, 62,187,202,167,190,222,199,160, 95, 17,192, 2,255,248, 75,135, 62,232,105,195, 62,
-146, 76, 58,190, 54, 55,120,115,239, 0, 2,255, 10, 85, 34,190,232,105,195, 62,146, 76, 58,190,202,200,120,115,239, 0, 2,255,
-248, 75,135, 62,203,192,176, 62,105,252, 34,189,239, 63,164, 92,238, 60, 2,255, 10, 85, 34,190,203,192,176, 62,105,252, 34,189,
- 17,192,164, 92,238, 60, 2,255,174, 41,137, 62,219,193, 68, 62,208, 57, 82, 61,123, 49,255,102,170, 57, 0,255,118, 16, 38,190,
-219,193, 68, 62,208, 57, 82, 61,133,206,255,102,170, 57, 0,255,220,155,200, 62,133,198, 12, 62, 95,172,248, 59,142, 98,198, 73,
- 6, 35, 0,255,105,122,146,190,133,198, 12, 62, 95,172,248, 59,114,157,198, 73, 6, 35, 0,255, 83, 55,178, 62, 14, 43, 35, 62,
-141,212,146,188,129, 61,254,106,241, 33, 0,255,193, 43,120,190, 14, 43, 35, 62,141,212,146,188,127,194,254,106,241, 33, 0,255,
- 9, 21,180, 62, 72, 76,141, 62,161, 43,253,189,234, 76,151, 87,221, 52, 0,255, 45,231,123,190, 72, 76,141, 62,161, 43,253,189,
- 22,179,151, 87,221, 52, 0,255, 66,103,217, 62,247,106, 87, 62, 7,254,185,189,187,101, 28, 66,199, 40, 2,255,207, 69,163,190,
-247,106, 87, 62, 7,254,185,189, 69,154, 28, 66,199, 40, 2,255, 66,103,217, 62,236,138,113, 62, 26,177, 80,190,183,113, 68, 58,
-119,248, 2,255,207, 69,163,190,236,138,113, 62, 26,177, 80,190, 73,142, 68, 58,119,248, 2,255, 9, 21,180, 62,141,126,152, 62,
- 83, 3,118,190,235, 86,238, 93,205,253, 0,255, 45,231,123,190,141,126,152, 62, 83, 3,118,190, 21,169,238, 93,205,253, 0,255,
- 9, 21,180, 62, 38,179,135, 62,107,184,182,190,232, 85,154, 70,157,192, 2,255, 45,231,123,190, 38,179,135, 62,107,184,182,190,
- 24,170,154, 70,157,192, 2,255, 66,103,217, 62,179, 56, 76, 62,153, 49,162,190,166,110,177, 42,222,207, 2,255,207, 69,163,190,
-179, 56, 76, 62,153, 49,162,190, 90,145,177, 42,222,207, 2,255,231,123,174, 62,154,232,206, 61, 56, 79,216,190, 58, 75, 57, 1,
-116,152, 3,255,232,180,112,190,154,232,206, 61, 56, 79,216,190,198,180, 57, 1,116,152, 3,255,208,194,142, 62,171,100, 40,189,
-170,250,206,190, 73, 70,147,187,200,173, 1,255,187, 66, 49,190,171,100, 40,189,170,250,206,190,183,185,147,187,200,173, 0,255,
-100, 0,223, 62,154,232,206, 61,191,190,121,190,194,114, 80, 41,207, 38, 0,255,241,222,168,190,154,232,206, 61,191,190,121,190,
- 62,141, 80, 41,207, 38, 0,255,104, 51,120, 62,186,102, 7,190,127,153,163,189,232, 74,153,154, 28, 22, 0,255,130,240, 11,190,
-186,102, 7,190,127,153,163,189, 24,181,153,154, 28, 22, 0,255,214,178,129, 62,254,152, 18,190, 44,122,125,190, 89, 71,115,151,
- 1,237, 0,255,198, 34, 23,190,254,152, 18,190, 44,122,125,190,167,184,115,151, 1,237, 0,255,202,203,239, 62,133,198, 12, 62,
- 56, 86,132,190, 72,220,207, 93,106, 79, 2,255, 88,170,185,190,133,198, 12, 62, 56, 86,132,190,184, 35,207, 93,106, 79, 2,255,
- 32,206,211, 62, 18,242,240,189,135,108, 84,190, 30, 15, 34,150, 84, 70, 2,255,173,172,157,190, 18,242,240,189,135,108, 84,190,
-226,240, 34,150, 84, 70, 2,255, 38,160, 9, 63,217,159,203,189,192,186,154,190,164, 67,138,166,172, 61, 0,255,219, 30,221,190,
-217,159,203,189,192,186,154,190, 92,188,138,166,172, 61, 0,255,172,140, 38, 63,211, 91,217,188,255,252,178,190,179, 83,223,206,
-114, 83, 0,255,244,123, 11,191,211, 91,217,188,255,252,178,190, 77,172,223,206,114, 83, 0,255, 95,242, 46, 63,194,113,199, 61,
- 73, 31,177,190, 54, 92,232, 12,210, 87, 2,255,167,225, 19,191,194,113,199, 61, 73, 31,177,190,202,163,232, 12,210, 87, 2,255,
-138,243, 32, 63, 3, 75, 61, 62, 73, 31,177,190,247, 62,221, 83, 97, 73, 0,255,209,226, 5,191, 3, 75, 61, 62, 73, 31,177,190,
- 9,193,221, 83, 97, 73, 0,255,112,194, 7, 63, 82, 93, 46, 62, 84,255,150,190,181, 5, 80,111,236, 62, 0,255,111, 99,217,190,
- 82, 93, 46, 62, 84,255,150,190, 75,250, 80,111,236, 62, 0,255,149,211, 6, 63,241,129, 16, 62, 50,102,145,190,236, 69,117,239,
-236,105, 0,255,185,133,215,190,241,129, 16, 62, 50,102,145,190, 20,186,117,239,236,105, 0,255,104, 90, 27, 63, 54,180, 27, 62,
-113,168,169,190, 34, 24,205,231, 89,123, 0,255,175, 73, 0,191, 54,180, 27, 62,113,168,169,190,222,231,205,231, 89,123, 0,255,
-246,174, 36, 63, 97,150,169, 61,221, 99,173,190, 69,223, 16,252,173,123, 0,255, 62,158, 9,191, 97,150,169, 61,221, 99,173,190,
-187, 32, 16,252,173,123, 0,255,249, 38, 30, 63, 98,147,127,188,221, 99,173,190,171,239, 0, 39,207,120, 0,255, 64, 22, 3,191,
- 98,147,127,188,221, 99,173,190, 85, 16, 0, 39,207,120, 0,255, 75,177, 8, 63, 23,233,143,189,158, 33,149,190, 9, 51, 56, 45,
- 82,108, 0,255, 37, 65,219,190, 23,233,143,189,158, 33,149,190,247,204, 56, 45, 82,108, 0,255, 26,222,224, 62,120,196,173,189,
-243, 39, 88,190,147, 38,224, 62,153,104, 2,255,167,188,170,190,120,196,173,189,243, 39, 88,190,109,217,224, 62,153,104, 2,255,
-162, 66,247, 62,250,195,236, 61,204,154,128,190,218, 62,152,243,206,110, 2,255, 48, 33,193,190,250,195,236, 61,204,154,128,190,
- 38,193,152,243,206,110, 2,255,196,219,252, 62, 17,132,184, 61, 50,102,145,190, 10, 87, 73,182, 19, 58, 0,255, 82,186,198,190,
- 17,132,184, 61, 50,102,145,190,246,168, 73,182, 19, 58, 0,255, 21,238,237, 62,103,251,128,189, 44,122,125,190,232, 15,106,121,
- 64, 37, 0,255,162,204,183,190,103,251,128,189, 44,122,125,190, 24,240,106,121, 64, 37, 0,255, 38,160, 9, 63,188, 45, 85,189,
- 79, 15,164,190,157,239, 89,122,212, 33, 0,255,219, 30,221,190,188, 45, 85,189, 79, 15,164,190, 99, 16, 89,122,212, 33, 0,255,
-104, 90, 27, 63,223, 37, 8,188,107,184,182,190, 8,158,202, 81,185, 9, 0,255,175, 73, 0,191,223, 37, 8,188,107,184,182,190,
-248, 97,202, 81,185, 9, 0,255,138,243, 32, 63, 40, 68,132, 61,107,184,182,190, 60,131,145,239, 95, 23, 0,255,209,226, 5,191,
- 40, 68,132, 61,107,184,182,190,196,124,145,239, 95, 23, 0,255,178,124, 25, 63,250,195,236, 61,181,218,180,190, 27,228, 22,153,
-206, 70, 0,255,242,215,252,190,250,195,236, 61,181,218,180,190,229, 27, 22,153,206, 70, 0,255,112,194, 7, 63, 74,214,221, 61,
-153, 49,162,190, 65, 68,253,168,113, 64, 0,255,111, 99,217,190, 74,214,221, 61,153, 49,162,190,191,187,253,168,113, 64, 0,255,
-135,153,228, 62, 97,150,169, 61, 44,122,125,190,113, 86,190,222, 87, 88, 0,255, 20,120,174,190, 97,150,169, 61, 44,122,125,190,
-143,169,190,222, 87, 88, 0,255,209,187,226, 62,216,126,230, 60,198,170,141,190,196, 95,107,182,100, 42, 0,255, 93,154,172,190,
-216,126,230, 60,198,170,141,190, 60,160,107,182,100, 42, 0,255,180, 18,208, 62,223, 37, 8,188,198,170,141,190, 42,111, 21, 14,
-220, 61, 0,255, 65,241,153,190,223, 37, 8,188,198,170,141,190,214,144, 21, 14,220, 61, 0,255,100, 0,223, 62,161,220, 67,188,
-198,170,141,190, 3, 79, 4, 91, 19, 43, 2,255,241,222,168,190,161,220, 67,188,198,170,141,190,253,176, 4, 91, 19, 43, 2,255,
-135,153,228, 62, 92, 82, 55,189,198,170,141,190,207,107,198,254,250, 68, 2,255, 20,120,174,190, 92, 82, 55,189,198,170,141,190,
- 49,148,198,254,250, 68, 2,255,174, 34,221, 62, 29, 9,115,189,198,170,141,190, 7, 82,225, 64,200, 73, 0,255, 59, 1,167,190,
- 29, 9,115,189,198,170,141,190,249,173,225, 64,200, 73, 0,255,220,155,200, 62,188, 45, 85,189,146, 76, 58,190, 38,117, 66,207,
- 47,239, 0,255,105,122,146,190,188, 45, 85,189,146, 76, 58,190,218,138, 66,207, 47,239, 0,255, 38,190,198, 62,103,251,128,189,
- 15,209,106,190,150, 97,139, 18,184, 80, 0,255,179,156,144,190,103,251,128,189, 15,209,106,190,106,158,139, 18,184, 80, 0,255,
- 38,190,198, 62, 74,137, 10,189,231, 71,114,190, 17,116, 66,240,154, 51, 0,255,179,156,144,190, 74,137, 10,189,231, 71,114,190,
-239,139, 66,240,154, 51, 0,255, 66,103,217, 62, 45,246, 46, 61, 44,122,125,190,112,113,245,204, 39, 30, 0,255,207, 69,163,190,
- 45,246, 46, 61, 44,122,125,190,144,142,245,204, 39, 30, 0,255,202,203,239, 62,159,154,121, 61, 16,205,139,190,105, 90, 61,185,
-146, 56, 0,255, 88,170,185,190,159,154,121, 61, 16,205,139,190,151,165, 61,185,146, 56, 0,255,202,203,239, 62,239,172,106, 61,
- 10,221,152,190,191, 82,102,204,230, 82, 0,255, 88,170,185,190,239,172,106, 61, 10,221,152,190, 65,173,102,204,230, 82, 0,255,
-174, 34,221, 62, 29, 9,115,189, 10,221,152,190,246, 29, 64, 98, 94, 76, 0,255, 59, 1,167,190, 29, 9,115,189, 10,221,152,190,
- 10,226, 64, 98, 94, 76, 0,255, 61,119,230, 62, 92, 82, 55,189, 10,221,152,190,150, 77,111, 17, 75,100, 0,255,202, 85,176,190,
- 92, 82, 55,189, 10,221,152,190,106,178,111, 17, 75,100, 0,255, 26,222,224, 62, 98,147,127,188, 10,221,152,190,239, 60,190, 60,
-195, 94, 0,255,167,188,170,190, 98,147,127,188, 10,221,152,190, 17,195,190, 60,195, 94, 0,255,106,240,209, 62,223, 37, 8,188,
- 10,221,152,190,199, 83,178, 23,209, 93, 0,255,247,206,155,190,223, 37, 8,188, 10,221,152,190, 57,172,178, 23,209, 93, 0,255,
-135,153,228, 62,216,126,230, 60, 10,221,152,190, 98, 73, 1,200,170, 88, 0,255, 20,120,174,190,216,126,230, 60, 10,221,152,190,
-158,182, 1,200,170, 88, 0,255, 38,160, 9, 63,154,232,206, 61,147, 65,175,190, 23, 68,166,223,112,103, 0,255,219, 30,221,190,
-154,232,206, 61,147, 65,175,190,233,187,166,223,112,103, 0,255,104, 90, 27, 63, 74,214,221, 61,249, 12,192,190,165, 18,156,216,
- 89,120, 0,255,175, 73, 0,191, 74,214,221, 61,249, 12,192,190, 91,237,156,216, 89,120, 0,255, 27,192, 35, 63,159,154,121, 61,
-175,234,193,190, 25,185, 29,231,157,103, 0,255, 98,175, 8,191,159,154,121, 61,175,234,193,190,231, 70, 29,231,157,103, 0,255,
-249, 38, 30, 63,161,220, 67,188,249, 12,192,190, 43,209, 0, 64,119,100, 0,255, 64, 22, 3,191,161,220, 67,188,249, 12,192,190,
-213, 46, 0, 64,119,100, 0,255, 1,143, 10, 63,188, 45, 85,189, 73, 31,177,190, 52, 26,240, 92, 3, 84, 0,255,145,252,222,190,
-188, 45, 85,189, 73, 31,177,190,204,229,240, 92, 3, 84, 0,255, 21,238,237, 62, 29, 9,115,189, 16,205,139,190, 58, 8,116,111,
-101, 62, 0,255,162,204,183,190, 29, 9,115,189, 16,205,139,190,198,247,116,111,101, 62, 0,255,122,185,254, 62, 97,150,169, 61,
- 45,118,158,190,198, 80,102,213,175, 89, 0,255, 8,152,200,190, 97,150,169, 61, 45,118,158,190, 58,175,102,213,175, 89, 0,255,
-202,203,239, 62,226,194,133,186,192,186,154,190,136, 25,130, 0,108,125, 0,255, 88,170,185,190,226,194,133,186,192,186,154,190,
-120,230,130, 0,108,125, 0,255, 14,254,250, 62,115,128,187,188,119,152,156,190, 2, 27, 58, 30,104,121, 0,255,156,220,196,190,
-115,128,187,188,119,152,156,190,254,228, 58, 30,104,121, 0,255,223,245, 4, 63, 77,106,205, 59, 79, 15,164,190,218, 55,126,253,
- 35,115, 0,255, 76,202,211,190, 77,106,205, 59, 79, 15,164,190, 38,200,126,253, 35,115, 0,255,152, 75, 0, 63,216,126,230, 60,
-227, 83,160,190,164, 41,199,255, 8,121, 0,255,190,117,202,190,216,126,230, 60,227, 83,160,190, 92,214,199,255, 8,121, 0,255,
-149,211, 6, 63,239,172,106, 61, 5,237,165,190,237, 39,191, 9, 55,121, 0,255,185,133,215,190,239,172,106, 61, 5,237,165,190,
- 19,216,191, 9, 55,121, 0,255,220,125, 11, 63,205, 26, 17, 61,187,202,167,190,208, 46, 41,244,137,118, 0,255, 71,218,224,190,
-205, 26, 17, 61,187,202,167,190, 48,209, 41,244,137,118, 0,255,218, 5, 18, 63,222,227, 61, 61,113,168,169,190, 70, 53, 84, 3,
- 85,116, 2,255, 65,234,237,190,222,227, 61, 61,113,168,169,190,186,202, 84, 3, 85,116, 2,255, 73, 57, 15, 63,176,168,154, 61,
-113,168,169,190, 99, 44, 36, 38,212,113, 2,255, 31, 81,232,190,176,168,154, 61,113,168,169,190,157,211, 36, 38,212,113, 2,255,
-112,194, 7, 63, 54,180, 27, 62,249, 12,192,190,249,198, 3, 72,222,166, 3,255,111, 99,217,190, 54,180, 27, 62,249, 12,192,190,
- 7, 57, 3, 72,222,166, 3,255, 64,209, 34, 63,230,161, 42, 62,170,250,206,190,198, 37,123, 68,174,154, 3,255,135,192, 7,191,
-230,161, 42, 62,170,250,206,190, 58,218,123, 68,174,154, 3,255, 21,208, 48, 63, 57, 13,177, 61,102,200,195,190, 3,121,201, 17,
- 73,218, 3,255, 93,191, 21,191, 57, 13,177, 61,102,200,195,190,253,134,201, 17, 73,218, 3,255, 24, 72, 42, 63,211, 91,217,188,
- 62, 63,203,190, 59, 82, 75,200, 70,175, 3,255, 96, 55, 15,191,211, 91,217,188, 62, 63,203,190,197,173, 75,200, 70,175, 3,255,
- 38,160, 9, 63, 40,178,188,189,175,234,193,190,134,249,184,165,129,165, 3,255,219, 30,221,190, 40,178,188,189,175,234,193,190,
-122, 6,184,165,129,165, 3,255,140,137,215, 62, 97, 4,226,189,192,186,154,190,126,249,122,163,205,167, 1,255, 25,104,161,190,
- 97, 4,226,189,192,186,154,190,130, 6,122,163,205,167, 1,255,243, 84,232, 62, 65,148, 1, 62,187,202,167,190, 93,193,224, 65,
-229,165, 1,255,128, 51,178,190, 65,148, 1, 62,187,202,167,190,163, 62,224, 65,229,165, 1,255, 68, 65, 84, 65, 44, 1, 0, 0,
-200,129,152, 2, 21, 1, 0, 0, 5, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,208,213,166, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 28, 47, 0, 0,
-208,213,166, 2, 54, 0, 0, 0,237, 3, 0, 0, 0, 0, 0, 0, 45, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 2, 0, 0, 0,
- 0, 0, 34, 0, 2, 0, 0, 0, 43, 0, 0, 0, 0, 0, 34, 0, 43, 0, 0, 0, 45, 0, 0, 0, 0, 0, 34, 0, 1, 0, 0, 0,
- 3, 0, 0, 0, 0, 0, 34, 0, 1, 0, 0, 0, 46, 0, 0, 0, 0, 0, 34, 0, 44, 0, 0, 0, 46, 0, 0, 0, 0, 0, 34, 0,
- 3, 0, 0, 0, 44, 0, 0, 0, 0, 0, 34, 0, 2, 0, 0, 0, 4, 0, 0, 0, 0, 0, 34, 0, 4, 0, 0, 0, 41, 0, 0, 0,
- 0, 0, 34, 0, 41, 0, 0, 0, 43, 0, 0, 0, 0, 0, 34, 0, 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 34, 0, 42, 0, 0, 0,
- 44, 0, 0, 0, 0, 0, 34, 0, 5, 0, 0, 0, 42, 0, 0, 0, 0, 0, 34, 0, 2, 0, 0, 0, 8, 0, 0, 0, 0, 0, 34, 0,
- 6, 0, 0, 0, 8, 0, 0, 0, 0, 0, 34, 0, 4, 0, 0, 0, 6, 0, 0, 0, 0, 0, 34, 0, 7, 0, 0, 0, 9, 0, 0, 0,
- 0, 0, 34, 0, 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 34, 0, 5, 0, 0, 0, 7, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0,
- 10, 0, 0, 0, 0, 0, 34, 0, 8, 0, 0, 0, 10, 0, 0, 0, 0, 0, 34, 0, 9, 0, 0, 0, 11, 0, 0, 0, 0, 0, 34, 0,
- 1, 0, 0, 0, 11, 0, 0, 0, 0, 0, 34, 0, 10, 0, 0, 0, 12, 0, 0, 0, 0, 0, 34, 0, 12, 0, 0, 0, 14, 0, 0, 0,
- 0, 0, 34, 0, 8, 0, 0, 0, 14, 0, 0, 0, 0, 0, 34, 0, 11, 0, 0, 0, 13, 0, 0, 0, 0, 0, 34, 0, 14, 0, 0, 0,
- 15, 0, 0, 0, 0, 0, 34, 0, 6, 0, 0, 0, 15, 0, 0, 0, 0, 0, 34, 0, 7, 0, 0, 0, 16, 0, 0, 0, 0, 0, 34, 0,
- 14, 0, 0, 0, 19, 0, 0, 0, 0, 0, 34, 0, 17, 0, 0, 0, 19, 0, 0, 0, 0, 0, 34, 0, 15, 0, 0, 0, 17, 0, 0, 0,
- 0, 0, 34, 0, 18, 0, 0, 0, 20, 0, 0, 0, 0, 0, 34, 0, 16, 0, 0, 0, 18, 0, 0, 0, 0, 0, 34, 0, 12, 0, 0, 0,
- 21, 0, 0, 0, 0, 0, 34, 0, 19, 0, 0, 0, 21, 0, 0, 0, 0, 0, 34, 0, 20, 0, 0, 0, 22, 0, 0, 0, 0, 0, 34, 0,
- 13, 0, 0, 0, 22, 0, 0, 0, 0, 0, 34, 0, 21, 0, 0, 0, 23, 0, 0, 0, 0, 0, 34, 0, 23, 0, 0, 0, 25, 0, 0, 0,
- 0, 0, 34, 0, 19, 0, 0, 0, 25, 0, 0, 0, 0, 0, 34, 0, 24, 0, 0, 0, 26, 0, 0, 0, 0, 0, 34, 0, 22, 0, 0, 0,
- 24, 0, 0, 0, 0, 0, 34, 0, 20, 0, 0, 0, 26, 0, 0, 0, 0, 0, 34, 0, 25, 0, 0, 0, 27, 0, 0, 0, 0, 0, 34, 0,
- 17, 0, 0, 0, 27, 0, 0, 0, 0, 0, 34, 0, 26, 0, 0, 0, 28, 0, 0, 0, 0, 0, 34, 0, 18, 0, 0, 0, 28, 0, 0, 0,
- 0, 0, 34, 0, 25, 0, 0, 0, 31, 0, 0, 0, 0, 0, 34, 0, 29, 0, 0, 0, 31, 0, 0, 0, 0, 0, 34, 0, 27, 0, 0, 0,
- 29, 0, 0, 0, 0, 0, 34, 0, 30, 0, 0, 0, 32, 0, 0, 0, 0, 0, 34, 0, 26, 0, 0, 0, 32, 0, 0, 0, 0, 0, 34, 0,
- 28, 0, 0, 0, 30, 0, 0, 0, 0, 0, 34, 0, 23, 0, 0, 0, 33, 0, 0, 0, 0, 0, 34, 0, 31, 0, 0, 0, 33, 0, 0, 0,
- 0, 0, 34, 0, 32, 0, 0, 0, 34, 0, 0, 0, 0, 0, 34, 0, 24, 0, 0, 0, 34, 0, 0, 0, 0, 0, 34, 0, 33, 0, 0, 0,
- 35, 0, 0, 0, 0, 0, 34, 0, 35, 0, 0, 0, 37, 0, 0, 0, 0, 0, 34, 0, 31, 0, 0, 0, 37, 0, 0, 0, 0, 0, 34, 0,
- 36, 0, 0, 0, 38, 0, 0, 0, 0, 0, 34, 0, 34, 0, 0, 0, 36, 0, 0, 0, 0, 0, 34, 0, 32, 0, 0, 0, 38, 0, 0, 0,
- 0, 0, 34, 0, 37, 0, 0, 0, 39, 0, 0, 0, 0, 0, 34, 0, 29, 0, 0, 0, 39, 0, 0, 0, 0, 0, 34, 0, 38, 0, 0, 0,
- 40, 0, 0, 0, 0, 0, 34, 0, 30, 0, 0, 0, 40, 0, 0, 0, 0, 0, 34, 0, 37, 0, 0, 0, 43, 0, 0, 0, 0, 0, 34, 0,
- 39, 0, 0, 0, 41, 0, 0, 0, 0, 0, 34, 0, 38, 0, 0, 0, 44, 0, 0, 0, 0, 0, 34, 0, 40, 0, 0, 0, 42, 0, 0, 0,
- 0, 0, 34, 0, 35, 0, 0, 0, 45, 0, 0, 0, 0, 0, 34, 0, 36, 0, 0, 0, 46, 0, 0, 0, 0, 0, 34, 0, 35, 0, 0, 0,
- 49, 0, 0, 0, 0, 0, 34, 0, 47, 0, 0, 0, 49, 0, 0, 0, 0, 0, 34, 0, 45, 0, 0, 0, 47, 0, 0, 0, 0, 0, 34, 0,
- 36, 0, 0, 0, 50, 0, 0, 0, 0, 0, 34, 0, 46, 0, 0, 0, 48, 0, 0, 0, 0, 0, 34, 0, 48, 0, 0, 0, 50, 0, 0, 0,
- 0, 0, 34, 0, 33, 0, 0, 0, 51, 0, 0, 0, 0, 0, 34, 0, 49, 0, 0, 0, 51, 0, 0, 0, 0, 0, 34, 0, 34, 0, 0, 0,
- 52, 0, 0, 0, 0, 0, 34, 0, 50, 0, 0, 0, 52, 0, 0, 0, 0, 0, 34, 0, 23, 0, 0, 0, 53, 0, 0, 0, 0, 0, 34, 0,
- 51, 0, 0, 0, 53, 0, 0, 0, 0, 0, 34, 0, 24, 0, 0, 0, 54, 0, 0, 0, 0, 0, 34, 0, 52, 0, 0, 0, 54, 0, 0, 0,
- 0, 0, 34, 0, 21, 0, 0, 0, 55, 0, 0, 0, 0, 0, 34, 0, 53, 0, 0, 0, 55, 0, 0, 0, 0, 0, 34, 0, 22, 0, 0, 0,
- 56, 0, 0, 0, 0, 0, 34, 0, 54, 0, 0, 0, 56, 0, 0, 0, 0, 0, 34, 0, 12, 0, 0, 0, 57, 0, 0, 0, 0, 0, 34, 0,
- 55, 0, 0, 0, 57, 0, 0, 0, 0, 0, 34, 0, 13, 0, 0, 0, 58, 0, 0, 0, 0, 0, 34, 0, 56, 0, 0, 0, 58, 0, 0, 0,
- 0, 0, 34, 0, 10, 0, 0, 0, 61, 0, 0, 0, 0, 0, 34, 0, 57, 0, 0, 0, 61, 0, 0, 0, 0, 0, 34, 0, 11, 0, 0, 0,
- 62, 0, 0, 0, 0, 0, 34, 0, 58, 0, 0, 0, 62, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 34, 0,
- 61, 0, 0, 0, 63, 0, 0, 0, 0, 0, 34, 0, 1, 0, 0, 0, 64, 0, 0, 0, 0, 0, 34, 0, 62, 0, 0, 0, 64, 0, 0, 0,
- 0, 0, 34, 0, 47, 0, 0, 0, 63, 0, 0, 0, 0, 0, 34, 0, 48, 0, 0, 0, 64, 0, 0, 0, 0, 0, 34, 0, 59, 0, 0, 0,
- 63, 0, 0, 0, 0, 0, 34, 0, 47, 0, 0, 0, 59, 0, 0, 0, 0, 0, 34, 0, 60, 0, 0, 0, 64, 0, 0, 0, 0, 0, 34, 0,
- 48, 0, 0, 0, 60, 0, 0, 0, 0, 0, 34, 0, 59, 0, 0, 0, 61, 0, 0, 0, 0, 0, 34, 0, 60, 0, 0, 0, 62, 0, 0, 0,
- 0, 0, 34, 0, 57, 0, 0, 0, 59, 0, 0, 0, 0, 0, 34, 0, 58, 0, 0, 0, 60, 0, 0, 0, 0, 0, 34, 0, 55, 0, 0, 0,
- 59, 0, 0, 0, 0, 0, 34, 0, 56, 0, 0, 0, 60, 0, 0, 0, 0, 0, 34, 0, 53, 0, 0, 0, 59, 0, 0, 0, 0, 0, 34, 0,
- 54, 0, 0, 0, 60, 0, 0, 0, 0, 0, 34, 0, 51, 0, 0, 0, 59, 0, 0, 0, 0, 0, 34, 0, 52, 0, 0, 0, 60, 0, 0, 0,
- 0, 0, 34, 0, 49, 0, 0, 0, 59, 0, 0, 0, 0, 0, 34, 0, 50, 0, 0, 0, 60, 0, 0, 0, 0, 0, 34, 0, 87, 0, 0, 0,
-171, 0, 0, 0, 0, 0, 34, 0,171, 0, 0, 0,173, 0, 0, 0, 0, 0, 34, 0, 89, 0, 0, 0,173, 0, 0, 0, 0, 0, 34, 0,
- 87, 0, 0, 0, 89, 0, 0, 0, 0, 0, 34, 0,172, 0, 0, 0,173, 0, 0, 0, 0, 0, 34, 0, 88, 0, 0, 0,172, 0, 0, 0,
- 0, 0, 34, 0, 88, 0, 0, 0, 89, 0, 0, 0, 0, 0, 34, 0, 85, 0, 0, 0,169, 0, 0, 0, 0, 0, 34, 0,169, 0, 0, 0,
-171, 0, 0, 0, 0, 0, 34, 0, 85, 0, 0, 0, 87, 0, 0, 0, 0, 0, 34, 0,170, 0, 0, 0,172, 0, 0, 0, 0, 0, 34, 0,
- 86, 0, 0, 0,170, 0, 0, 0, 0, 0, 34, 0, 86, 0, 0, 0, 88, 0, 0, 0, 0, 0, 34, 0, 83, 0, 0, 0,167, 0, 0, 0,
- 0, 0, 34, 0,167, 0, 0, 0,169, 0, 0, 0, 0, 0, 34, 0, 83, 0, 0, 0, 85, 0, 0, 0, 0, 0, 34, 0,168, 0, 0, 0,
-170, 0, 0, 0, 0, 0, 34, 0, 84, 0, 0, 0,168, 0, 0, 0, 0, 0, 34, 0, 84, 0, 0, 0, 86, 0, 0, 0, 0, 0, 34, 0,
- 81, 0, 0, 0,165, 0, 0, 0, 0, 0, 34, 0,165, 0, 0, 0,167, 0, 0, 0, 0, 0, 34, 0, 81, 0, 0, 0, 83, 0, 0, 0,
- 0, 0, 34, 0,166, 0, 0, 0,168, 0, 0, 0, 0, 0, 34, 0, 82, 0, 0, 0,166, 0, 0, 0, 0, 0, 34, 0, 82, 0, 0, 0,
- 84, 0, 0, 0, 0, 0, 34, 0, 79, 0, 0, 0,163, 0, 0, 0, 0, 0, 34, 0,163, 0, 0, 0,165, 0, 0, 0, 0, 0, 34, 0,
- 79, 0, 0, 0, 81, 0, 0, 0, 0, 0, 34, 0,164, 0, 0, 0,166, 0, 0, 0, 0, 0, 34, 0, 80, 0, 0, 0,164, 0, 0, 0,
- 0, 0, 34, 0, 80, 0, 0, 0, 82, 0, 0, 0, 0, 0, 34, 0, 77, 0, 0, 0, 90, 0, 0, 0, 0, 0, 34, 0, 90, 0, 0, 0,
-143, 0, 0, 0, 0, 0, 34, 0,143, 0, 0, 0,161, 0, 0, 0, 0, 0, 34, 0, 77, 0, 0, 0,161, 0, 0, 0, 0, 0, 34, 0,
- 91, 0, 0, 0,144, 0, 0, 0, 0, 0, 34, 0, 78, 0, 0, 0, 91, 0, 0, 0, 0, 0, 34, 0, 78, 0, 0, 0,162, 0, 0, 0,
- 0, 0, 34, 0,144, 0, 0, 0,162, 0, 0, 0, 0, 0, 34, 0, 90, 0, 0, 0, 92, 0, 0, 0, 0, 0, 34, 0, 92, 0, 0, 0,
-145, 0, 0, 0, 0, 0, 34, 0,143, 0, 0, 0,145, 0, 0, 0, 0, 0, 34, 0, 93, 0, 0, 0,146, 0, 0, 0, 0, 0, 34, 0,
- 91, 0, 0, 0, 93, 0, 0, 0, 0, 0, 34, 0,144, 0, 0, 0,146, 0, 0, 0, 0, 0, 34, 0, 92, 0, 0, 0, 94, 0, 0, 0,
- 0, 0, 34, 0, 94, 0, 0, 0,147, 0, 0, 0, 0, 0, 34, 0,145, 0, 0, 0,147, 0, 0, 0, 0, 0, 34, 0, 95, 0, 0, 0,
-148, 0, 0, 0, 0, 0, 34, 0, 93, 0, 0, 0, 95, 0, 0, 0, 0, 0, 34, 0,146, 0, 0, 0,148, 0, 0, 0, 0, 0, 34, 0,
- 94, 0, 0, 0, 96, 0, 0, 0, 0, 0, 34, 0, 96, 0, 0, 0,149, 0, 0, 0, 0, 0, 34, 0,147, 0, 0, 0,149, 0, 0, 0,
- 0, 0, 34, 0, 97, 0, 0, 0,150, 0, 0, 0, 0, 0, 34, 0, 95, 0, 0, 0, 97, 0, 0, 0, 0, 0, 34, 0,148, 0, 0, 0,
-150, 0, 0, 0, 0, 0, 34, 0, 96, 0, 0, 0, 98, 0, 0, 0, 0, 0, 34, 0, 98, 0, 0, 0,151, 0, 0, 0, 0, 0, 34, 0,
-149, 0, 0, 0,151, 0, 0, 0, 0, 0, 34, 0, 99, 0, 0, 0,152, 0, 0, 0, 0, 0, 34, 0, 97, 0, 0, 0, 99, 0, 0, 0,
- 0, 0, 34, 0,150, 0, 0, 0,152, 0, 0, 0, 0, 0, 34, 0, 98, 0, 0, 0,100, 0, 0, 0, 0, 0, 34, 0,100, 0, 0, 0,
-153, 0, 0, 0, 0, 0, 34, 0,151, 0, 0, 0,153, 0, 0, 0, 0, 0, 34, 0,101, 0, 0, 0,154, 0, 0, 0, 0, 0, 34, 0,
- 99, 0, 0, 0,101, 0, 0, 0, 0, 0, 34, 0,152, 0, 0, 0,154, 0, 0, 0, 0, 0, 34, 0,100, 0, 0, 0,102, 0, 0, 0,
- 0, 0, 34, 0,102, 0, 0, 0,155, 0, 0, 0, 0, 0, 34, 0,153, 0, 0, 0,155, 0, 0, 0, 0, 0, 34, 0,103, 0, 0, 0,
-156, 0, 0, 0, 0, 0, 34, 0,101, 0, 0, 0,103, 0, 0, 0, 0, 0, 34, 0,154, 0, 0, 0,156, 0, 0, 0, 0, 0, 34, 0,
-102, 0, 0, 0,104, 0, 0, 0, 0, 0, 34, 0,104, 0, 0, 0,157, 0, 0, 0, 0, 0, 34, 0,155, 0, 0, 0,157, 0, 0, 0,
- 0, 0, 34, 0,105, 0, 0, 0,158, 0, 0, 0, 0, 0, 34, 0,103, 0, 0, 0,105, 0, 0, 0, 0, 0, 34, 0,156, 0, 0, 0,
-158, 0, 0, 0, 0, 0, 34, 0,104, 0, 0, 0,106, 0, 0, 0, 0, 0, 34, 0,106, 0, 0, 0,159, 0, 0, 0, 0, 0, 34, 0,
-157, 0, 0, 0,159, 0, 0, 0, 0, 0, 34, 0,107, 0, 0, 0,160, 0, 0, 0, 0, 0, 34, 0,105, 0, 0, 0,107, 0, 0, 0,
- 0, 0, 34, 0,158, 0, 0, 0,160, 0, 0, 0, 0, 0, 34, 0, 65, 0, 0, 0,106, 0, 0, 0, 0, 0, 34, 0, 65, 0, 0, 0,
- 66, 0, 0, 0, 0, 0, 34, 0, 66, 0, 0, 0,159, 0, 0, 0, 0, 0, 34, 0, 65, 0, 0, 0,107, 0, 0, 0, 0, 0, 34, 0,
- 66, 0, 0, 0,160, 0, 0, 0, 0, 0, 34, 0,108, 0, 0, 0,125, 0, 0, 0, 0, 0, 34, 0,125, 0, 0, 0,157, 0, 0, 0,
- 0, 0, 34, 0,108, 0, 0, 0,159, 0, 0, 0, 0, 0, 34, 0,126, 0, 0, 0,158, 0, 0, 0, 0, 0, 34, 0,109, 0, 0, 0,
-126, 0, 0, 0, 0, 0, 34, 0,109, 0, 0, 0,160, 0, 0, 0, 0, 0, 34, 0,125, 0, 0, 0,176, 0, 0, 0, 0, 0, 34, 0,
-155, 0, 0, 0,176, 0, 0, 0, 0, 0, 34, 0,156, 0, 0, 0,177, 0, 0, 0, 0, 0, 34, 0,126, 0, 0, 0,177, 0, 0, 0,
- 0, 0, 34, 0,123, 0, 0, 0,153, 0, 0, 0, 0, 0, 34, 0,123, 0, 0, 0,176, 0, 0, 0, 0, 0, 34, 0,124, 0, 0, 0,
-154, 0, 0, 0, 0, 0, 34, 0,124, 0, 0, 0,177, 0, 0, 0, 0, 0, 34, 0,121, 0, 0, 0,151, 0, 0, 0, 0, 0, 34, 0,
-121, 0, 0, 0,123, 0, 0, 0, 0, 0, 34, 0,122, 0, 0, 0,152, 0, 0, 0, 0, 0, 34, 0,122, 0, 0, 0,124, 0, 0, 0,
- 0, 0, 34, 0,119, 0, 0, 0,149, 0, 0, 0, 0, 0, 34, 0,119, 0, 0, 0,121, 0, 0, 0, 0, 0, 34, 0,120, 0, 0, 0,
-150, 0, 0, 0, 0, 0, 34, 0,120, 0, 0, 0,122, 0, 0, 0, 0, 0, 34, 0,117, 0, 0, 0,147, 0, 0, 0, 0, 0, 34, 0,
-117, 0, 0, 0,119, 0, 0, 0, 0, 0, 34, 0,118, 0, 0, 0,148, 0, 0, 0, 0, 0, 34, 0,118, 0, 0, 0,120, 0, 0, 0,
- 0, 0, 34, 0,115, 0, 0, 0,145, 0, 0, 0, 0, 0, 34, 0,115, 0, 0, 0,117, 0, 0, 0, 0, 0, 34, 0,116, 0, 0, 0,
-146, 0, 0, 0, 0, 0, 34, 0,116, 0, 0, 0,118, 0, 0, 0, 0, 0, 34, 0,113, 0, 0, 0,143, 0, 0, 0, 0, 0, 34, 0,
-113, 0, 0, 0,115, 0, 0, 0, 0, 0, 34, 0,114, 0, 0, 0,144, 0, 0, 0, 0, 0, 34, 0,114, 0, 0, 0,116, 0, 0, 0,
- 0, 0, 34, 0,112, 0, 0, 0,162, 0, 0, 0, 0, 0, 34, 0,112, 0, 0, 0,114, 0, 0, 0, 0, 0, 34, 0,174, 0, 0, 0,
-178, 0, 0, 0, 0, 0, 34, 0,161, 0, 0, 0,174, 0, 0, 0, 0, 0, 34, 0,174, 0, 0, 0,179, 0, 0, 0, 0, 0, 34, 0,
-112, 0, 0, 0,179, 0, 0, 0, 0, 0, 34, 0,162, 0, 0, 0,174, 0, 0, 0, 0, 0, 34, 0, 66, 0, 0, 0,110, 0, 0, 0,
- 0, 0, 34, 0,108, 0, 0, 0,110, 0, 0, 0, 0, 0, 34, 0,109, 0, 0, 0,111, 0, 0, 0, 0, 0, 34, 0, 66, 0, 0, 0,
-111, 0, 0, 0, 0, 0, 34, 0, 66, 0, 0, 0,175, 0, 0, 0, 0, 0, 34, 0,175, 0, 0, 0,180, 0, 0, 0, 0, 0, 34, 0,
-110, 0, 0, 0,180, 0, 0, 0, 0, 0, 34, 0,111, 0, 0, 0,181, 0, 0, 0, 0, 0, 34, 0,175, 0, 0, 0,181, 0, 0, 0,
- 0, 0, 34, 0,178, 0, 0, 0,180, 0, 0, 0, 0, 0, 34, 0,174, 0, 0, 0,175, 0, 0, 0, 0, 0, 32, 0,179, 0, 0, 0,
-181, 0, 0, 0, 0, 0, 34, 0,132, 0, 0, 0,134, 0, 0, 0, 0, 0, 34, 0,134, 0, 0, 0,173, 0, 0, 0, 0, 0, 34, 0,
-132, 0, 0, 0,171, 0, 0, 0, 0, 0, 34, 0,133, 0, 0, 0,134, 0, 0, 0, 0, 0, 34, 0,133, 0, 0, 0,172, 0, 0, 0,
- 0, 0, 34, 0,130, 0, 0, 0,132, 0, 0, 0, 0, 0, 34, 0,130, 0, 0, 0,169, 0, 0, 0, 0, 0, 34, 0,131, 0, 0, 0,
-133, 0, 0, 0, 0, 0, 34, 0,131, 0, 0, 0,170, 0, 0, 0, 0, 0, 34, 0,128, 0, 0, 0,130, 0, 0, 0, 0, 0, 34, 0,
-128, 0, 0, 0,167, 0, 0, 0, 0, 0, 34, 0,129, 0, 0, 0,131, 0, 0, 0, 0, 0, 34, 0,129, 0, 0, 0,168, 0, 0, 0,
- 0, 0, 34, 0,163, 0, 0, 0,184, 0, 0, 0, 0, 0, 34, 0,182, 0, 0, 0,184, 0, 0, 0, 0, 0, 34, 0,165, 0, 0, 0,
-182, 0, 0, 0, 0, 0, 34, 0,183, 0, 0, 0,185, 0, 0, 0, 0, 0, 34, 0,164, 0, 0, 0,185, 0, 0, 0, 0, 0, 34, 0,
-166, 0, 0, 0,183, 0, 0, 0, 0, 0, 34, 0,128, 0, 0, 0,182, 0, 0, 0, 0, 0, 34, 0,129, 0, 0, 0,183, 0, 0, 0,
- 0, 0, 34, 0,141, 0, 0, 0,187, 0, 0, 0, 0, 0, 34, 0,186, 0, 0, 0,187, 0, 0, 0, 0, 0, 32, 0,184, 0, 0, 0,
-186, 0, 0, 0, 0, 0, 34, 0,141, 0, 0, 0,184, 0, 0, 0, 0, 0, 34, 0,142, 0, 0, 0,187, 0, 0, 0, 0, 0, 34, 0,
-142, 0, 0, 0,185, 0, 0, 0, 0, 0, 34, 0,185, 0, 0, 0,186, 0, 0, 0, 0, 0, 34, 0, 67, 0, 0, 0,186, 0, 0, 0,
- 0, 0, 32, 0, 67, 0, 0, 0,182, 0, 0, 0, 0, 0, 34, 0, 67, 0, 0, 0,183, 0, 0, 0, 0, 0, 34, 0,127, 0, 0, 0,
-128, 0, 0, 0, 0, 0, 34, 0, 67, 0, 0, 0,127, 0, 0, 0, 0, 0, 32, 0,127, 0, 0, 0,129, 0, 0, 0, 0, 0, 34, 0,
-139, 0, 0, 0,190, 0, 0, 0, 0, 0, 34, 0,188, 0, 0, 0,190, 0, 0, 0, 0, 0, 34, 0,141, 0, 0, 0,188, 0, 0, 0,
- 0, 0, 34, 0,139, 0, 0, 0,141, 0, 0, 0, 0, 0, 34, 0,189, 0, 0, 0,191, 0, 0, 0, 0, 0, 34, 0,140, 0, 0, 0,
-191, 0, 0, 0, 0, 0, 34, 0,140, 0, 0, 0,142, 0, 0, 0, 0, 0, 34, 0,142, 0, 0, 0,189, 0, 0, 0, 0, 0, 34, 0,
-137, 0, 0, 0,192, 0, 0, 0, 0, 0, 34, 0,190, 0, 0, 0,192, 0, 0, 0, 0, 0, 34, 0,137, 0, 0, 0,139, 0, 0, 0,
- 0, 0, 34, 0,191, 0, 0, 0,193, 0, 0, 0, 0, 0, 34, 0,138, 0, 0, 0,193, 0, 0, 0, 0, 0, 34, 0,138, 0, 0, 0,
-140, 0, 0, 0, 0, 0, 34, 0,136, 0, 0, 0,194, 0, 0, 0, 0, 0, 34, 0,192, 0, 0, 0,194, 0, 0, 0, 0, 0, 34, 0,
-136, 0, 0, 0,137, 0, 0, 0, 0, 0, 34, 0,193, 0, 0, 0,195, 0, 0, 0, 0, 0, 34, 0,136, 0, 0, 0,195, 0, 0, 0,
- 0, 0, 34, 0,136, 0, 0, 0,138, 0, 0, 0, 0, 0, 34, 0, 69, 0, 0, 0,135, 0, 0, 0, 0, 0, 34, 0, 69, 0, 0, 0,
-194, 0, 0, 0, 0, 0, 34, 0,135, 0, 0, 0,136, 0, 0, 0, 0, 0, 34, 0, 69, 0, 0, 0,195, 0, 0, 0, 0, 0, 34, 0,
- 68, 0, 0, 0,188, 0, 0, 0, 0, 0, 34, 0, 68, 0, 0, 0,187, 0, 0, 0, 0, 0, 34, 0, 68, 0, 0, 0,189, 0, 0, 0,
- 0, 0, 34, 0,188, 0, 0, 0,203, 0, 0, 0, 0, 0, 34, 0,203, 0, 0, 0,205, 0, 0, 0, 0, 0, 34, 0, 68, 0, 0, 0,
-205, 0, 0, 0, 0, 0, 34, 0,189, 0, 0, 0,204, 0, 0, 0, 0, 0, 34, 0,204, 0, 0, 0,205, 0, 0, 0, 0, 0, 34, 0,
- 69, 0, 0, 0,196, 0, 0, 0, 0, 0, 34, 0,196, 0, 0, 0,197, 0, 0, 0, 0, 0, 34, 0,194, 0, 0, 0,197, 0, 0, 0,
- 0, 0, 34, 0,196, 0, 0, 0,198, 0, 0, 0, 0, 0, 34, 0,195, 0, 0, 0,198, 0, 0, 0, 0, 0, 34, 0,197, 0, 0, 0,
-199, 0, 0, 0, 0, 0, 34, 0,192, 0, 0, 0,199, 0, 0, 0, 0, 0, 34, 0,198, 0, 0, 0,200, 0, 0, 0, 0, 0, 34, 0,
-193, 0, 0, 0,200, 0, 0, 0, 0, 0, 34, 0,199, 0, 0, 0,201, 0, 0, 0, 0, 0, 34, 0,190, 0, 0, 0,201, 0, 0, 0,
- 0, 0, 34, 0,200, 0, 0, 0,202, 0, 0, 0, 0, 0, 34, 0,191, 0, 0, 0,202, 0, 0, 0, 0, 0, 34, 0,201, 0, 0, 0,
-203, 0, 0, 0, 0, 0, 34, 0,202, 0, 0, 0,204, 0, 0, 0, 0, 0, 34, 0,196, 0, 0, 0,201, 0, 0, 0, 0, 0, 34, 0,
-196, 0, 0, 0,202, 0, 0, 0, 0, 0, 34, 0,196, 0, 0, 0,205, 0, 0, 0, 0, 0, 34, 0,137, 0, 0, 0,161, 0, 0, 0,
- 0, 0, 34, 0,136, 0, 0, 0,174, 0, 0, 0, 0, 0, 34, 0,138, 0, 0, 0,162, 0, 0, 0, 0, 0, 34, 0,139, 0, 0, 0,
-208, 0, 0, 0, 0, 0, 34, 0,161, 0, 0, 0,208, 0, 0, 0, 0, 0, 34, 0,140, 0, 0, 0,209, 0, 0, 0, 0, 0, 34, 0,
-162, 0, 0, 0,209, 0, 0, 0, 0, 0, 34, 0,141, 0, 0, 0,210, 0, 0, 0, 0, 0, 34, 0,208, 0, 0, 0,210, 0, 0, 0,
- 0, 0, 34, 0,142, 0, 0, 0,211, 0, 0, 0, 0, 0, 34, 0,209, 0, 0, 0,211, 0, 0, 0, 0, 0, 34, 0,163, 0, 0, 0,
-210, 0, 0, 0, 0, 0, 34, 0,164, 0, 0, 0,211, 0, 0, 0, 0, 0, 34, 0, 79, 0, 0, 0,206, 0, 0, 0, 0, 0, 34, 0,
-206, 0, 0, 0,210, 0, 0, 0, 0, 0, 34, 0,207, 0, 0, 0,211, 0, 0, 0, 0, 0, 34, 0, 80, 0, 0, 0,207, 0, 0, 0,
- 0, 0, 34, 0,206, 0, 0, 0,212, 0, 0, 0, 0, 0, 34, 0,208, 0, 0, 0,212, 0, 0, 0, 0, 0, 34, 0,209, 0, 0, 0,
-213, 0, 0, 0, 0, 0, 34, 0,207, 0, 0, 0,213, 0, 0, 0, 0, 0, 34, 0, 77, 0, 0, 0,212, 0, 0, 0, 0, 0, 34, 0,
- 78, 0, 0, 0,213, 0, 0, 0, 0, 0, 34, 0, 70, 0, 0, 0,127, 0, 0, 0, 0, 0, 34, 0, 70, 0, 0, 0,219, 0, 0, 0,
- 0, 0, 34, 0,128, 0, 0, 0,219, 0, 0, 0, 0, 0, 34, 0,129, 0, 0, 0,220, 0, 0, 0, 0, 0, 34, 0, 70, 0, 0, 0,
-220, 0, 0, 0, 0, 0, 34, 0,217, 0, 0, 0,219, 0, 0, 0, 0, 0, 34, 0,130, 0, 0, 0,217, 0, 0, 0, 0, 0, 34, 0,
-131, 0, 0, 0,218, 0, 0, 0, 0, 0, 34, 0,218, 0, 0, 0,220, 0, 0, 0, 0, 0, 34, 0,215, 0, 0, 0,217, 0, 0, 0,
- 0, 0, 34, 0,132, 0, 0, 0,215, 0, 0, 0, 0, 0, 34, 0,133, 0, 0, 0,216, 0, 0, 0, 0, 0, 34, 0,216, 0, 0, 0,
-218, 0, 0, 0, 0, 0, 34, 0,214, 0, 0, 0,215, 0, 0, 0, 0, 0, 34, 0,134, 0, 0, 0,214, 0, 0, 0, 0, 0, 34, 0,
-214, 0, 0, 0,216, 0, 0, 0, 0, 0, 34, 0,215, 0, 0, 0,226, 0, 0, 0, 0, 0, 34, 0,226, 0, 0, 0,228, 0, 0, 0,
- 0, 0, 34, 0,214, 0, 0, 0,228, 0, 0, 0, 0, 0, 34, 0,216, 0, 0, 0,227, 0, 0, 0, 0, 0, 34, 0,227, 0, 0, 0,
-228, 0, 0, 0, 0, 0, 34, 0,217, 0, 0, 0,224, 0, 0, 0, 0, 0, 34, 0,224, 0, 0, 0,226, 0, 0, 0, 0, 0, 34, 0,
-218, 0, 0, 0,225, 0, 0, 0, 0, 0, 34, 0,225, 0, 0, 0,227, 0, 0, 0, 0, 0, 34, 0,219, 0, 0, 0,222, 0, 0, 0,
- 0, 0, 34, 0,222, 0, 0, 0,224, 0, 0, 0, 0, 0, 34, 0,220, 0, 0, 0,223, 0, 0, 0, 0, 0, 34, 0,223, 0, 0, 0,
-225, 0, 0, 0, 0, 0, 34, 0, 70, 0, 0, 0,221, 0, 0, 0, 0, 0, 34, 0,221, 0, 0, 0,222, 0, 0, 0, 0, 0, 34, 0,
-221, 0, 0, 0,223, 0, 0, 0, 0, 0, 34, 0,221, 0, 0, 0,228, 0, 0, 0, 0, 0, 34, 0,222, 0, 0, 0,226, 0, 0, 0,
- 0, 0, 34, 0,223, 0, 0, 0,227, 0, 0, 0, 0, 0, 34, 0,178, 0, 0, 0,231, 0, 0, 0, 0, 0, 34, 0,229, 0, 0, 0,
-231, 0, 0, 0, 0, 0, 34, 0,180, 0, 0, 0,229, 0, 0, 0, 0, 0, 34, 0,179, 0, 0, 0,232, 0, 0, 0, 0, 0, 34, 0,
-181, 0, 0, 0,230, 0, 0, 0, 0, 0, 34, 0,230, 0, 0, 0,232, 0, 0, 0, 0, 0, 34, 0,229, 0, 0, 0,251, 0, 0, 0,
- 0, 0, 34, 0,110, 0, 0, 0,251, 0, 0, 0, 0, 0, 34, 0,111, 0, 0, 0,252, 0, 0, 0, 0, 0, 34, 0,230, 0, 0, 0,
-252, 0, 0, 0, 0, 0, 34, 0,251, 0, 0, 0,253, 0, 0, 0, 0, 0, 34, 0,108, 0, 0, 0,253, 0, 0, 0, 0, 0, 34, 0,
-109, 0, 0, 0,254, 0, 0, 0, 0, 0, 34, 0,252, 0, 0, 0,254, 0, 0, 0, 0, 0, 34, 0,231, 0, 0, 0,249, 0, 0, 0,
- 0, 0, 34, 0,112, 0, 0, 0,250, 0, 0, 0, 0, 0, 34, 0,232, 0, 0, 0,250, 0, 0, 0, 0, 0, 34, 0,113, 0, 0, 0,
-247, 0, 0, 0, 0, 0, 34, 0,247, 0, 0, 0,249, 0, 0, 0, 0, 0, 34, 0,114, 0, 0, 0,248, 0, 0, 0, 0, 0, 34, 0,
-248, 0, 0, 0,250, 0, 0, 0, 0, 0, 34, 0,115, 0, 0, 0,245, 0, 0, 0, 0, 0, 34, 0,245, 0, 0, 0,247, 0, 0, 0,
- 0, 0, 34, 0,116, 0, 0, 0,246, 0, 0, 0, 0, 0, 34, 0,246, 0, 0, 0,248, 0, 0, 0, 0, 0, 34, 0,117, 0, 0, 0,
-243, 0, 0, 0, 0, 0, 34, 0,243, 0, 0, 0,245, 0, 0, 0, 0, 0, 34, 0,118, 0, 0, 0,244, 0, 0, 0, 0, 0, 34, 0,
-244, 0, 0, 0,246, 0, 0, 0, 0, 0, 34, 0,119, 0, 0, 0,241, 0, 0, 0, 0, 0, 34, 0,241, 0, 0, 0,243, 0, 0, 0,
- 0, 0, 34, 0,120, 0, 0, 0,242, 0, 0, 0, 0, 0, 34, 0,242, 0, 0, 0,244, 0, 0, 0, 0, 0, 34, 0,121, 0, 0, 0,
-239, 0, 0, 0, 0, 0, 34, 0,239, 0, 0, 0,241, 0, 0, 0, 0, 0, 34, 0,122, 0, 0, 0,240, 0, 0, 0, 0, 0, 34, 0,
-240, 0, 0, 0,242, 0, 0, 0, 0, 0, 34, 0,123, 0, 0, 0,237, 0, 0, 0, 0, 0, 34, 0,237, 0, 0, 0,239, 0, 0, 0,
- 0, 0, 34, 0,124, 0, 0, 0,238, 0, 0, 0, 0, 0, 34, 0,238, 0, 0, 0,240, 0, 0, 0, 0, 0, 34, 0,176, 0, 0, 0,
-233, 0, 0, 0, 0, 0, 34, 0,233, 0, 0, 0,237, 0, 0, 0, 0, 0, 34, 0,177, 0, 0, 0,234, 0, 0, 0, 0, 0, 34, 0,
-234, 0, 0, 0,238, 0, 0, 0, 0, 0, 34, 0,125, 0, 0, 0,235, 0, 0, 0, 0, 0, 34, 0,233, 0, 0, 0,235, 0, 0, 0,
- 0, 0, 34, 0,126, 0, 0, 0,236, 0, 0, 0, 0, 0, 34, 0,234, 0, 0, 0,236, 0, 0, 0, 0, 0, 34, 0,235, 0, 0, 0,
-253, 0, 0, 0, 0, 0, 34, 0,236, 0, 0, 0,254, 0, 0, 0, 0, 0, 34, 0,253, 0, 0, 0,255, 0, 0, 0, 0, 0, 34, 0,
-255, 0, 0, 0, 17, 1, 0, 0, 0, 0, 34, 0,235, 0, 0, 0, 17, 1, 0, 0, 0, 0, 34, 0,254, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 34, 0,236, 0, 0, 0, 18, 1, 0, 0, 0, 0, 34, 0, 0, 1, 0, 0, 18, 1, 0, 0, 0, 0, 34, 0, 17, 1, 0, 0,
- 19, 1, 0, 0, 0, 0, 34, 0,233, 0, 0, 0, 19, 1, 0, 0, 0, 0, 34, 0,234, 0, 0, 0, 20, 1, 0, 0, 0, 0, 34, 0,
- 18, 1, 0, 0, 20, 1, 0, 0, 0, 0, 34, 0, 15, 1, 0, 0, 19, 1, 0, 0, 0, 0, 34, 0,237, 0, 0, 0, 15, 1, 0, 0,
- 0, 0, 34, 0,238, 0, 0, 0, 16, 1, 0, 0, 0, 0, 34, 0, 16, 1, 0, 0, 20, 1, 0, 0, 0, 0, 34, 0, 13, 1, 0, 0,
- 15, 1, 0, 0, 0, 0, 34, 0,239, 0, 0, 0, 13, 1, 0, 0, 0, 0, 34, 0,240, 0, 0, 0, 14, 1, 0, 0, 0, 0, 34, 0,
- 14, 1, 0, 0, 16, 1, 0, 0, 0, 0, 34, 0, 11, 1, 0, 0, 13, 1, 0, 0, 0, 0, 34, 0,241, 0, 0, 0, 11, 1, 0, 0,
- 0, 0, 34, 0,242, 0, 0, 0, 12, 1, 0, 0, 0, 0, 34, 0, 12, 1, 0, 0, 14, 1, 0, 0, 0, 0, 34, 0, 9, 1, 0, 0,
- 11, 1, 0, 0, 0, 0, 34, 0,243, 0, 0, 0, 9, 1, 0, 0, 0, 0, 34, 0,244, 0, 0, 0, 10, 1, 0, 0, 0, 0, 34, 0,
- 10, 1, 0, 0, 12, 1, 0, 0, 0, 0, 34, 0, 7, 1, 0, 0, 9, 1, 0, 0, 0, 0, 34, 0,245, 0, 0, 0, 7, 1, 0, 0,
- 0, 0, 34, 0,246, 0, 0, 0, 8, 1, 0, 0, 0, 0, 34, 0, 8, 1, 0, 0, 10, 1, 0, 0, 0, 0, 34, 0, 5, 1, 0, 0,
- 7, 1, 0, 0, 0, 0, 34, 0,247, 0, 0, 0, 5, 1, 0, 0, 0, 0, 34, 0,248, 0, 0, 0, 6, 1, 0, 0, 0, 0, 34, 0,
- 6, 1, 0, 0, 8, 1, 0, 0, 0, 0, 34, 0, 3, 1, 0, 0, 5, 1, 0, 0, 0, 0, 34, 0,249, 0, 0, 0, 3, 1, 0, 0,
- 0, 0, 34, 0,250, 0, 0, 0, 4, 1, 0, 0, 0, 0, 34, 0, 4, 1, 0, 0, 6, 1, 0, 0, 0, 0, 34, 0, 3, 1, 0, 0,
- 21, 1, 0, 0, 0, 0, 34, 0,231, 0, 0, 0, 21, 1, 0, 0, 0, 0, 34, 0,232, 0, 0, 0, 22, 1, 0, 0, 0, 0, 34, 0,
- 4, 1, 0, 0, 22, 1, 0, 0, 0, 0, 34, 0,251, 0, 0, 0, 1, 1, 0, 0, 0, 0, 34, 0,255, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 34, 0,252, 0, 0, 0, 2, 1, 0, 0, 0, 0, 34, 0, 0, 1, 0, 0, 2, 1, 0, 0, 0, 0, 34, 0,229, 0, 0, 0,
- 23, 1, 0, 0, 0, 0, 34, 0, 1, 1, 0, 0, 23, 1, 0, 0, 0, 0, 34, 0,230, 0, 0, 0, 24, 1, 0, 0, 0, 0, 34, 0,
- 2, 1, 0, 0, 24, 1, 0, 0, 0, 0, 34, 0, 21, 1, 0, 0, 23, 1, 0, 0, 0, 0, 34, 0, 22, 1, 0, 0, 24, 1, 0, 0,
- 0, 0, 34, 0,106, 0, 0, 0, 25, 1, 0, 0, 0, 0, 34, 0, 71, 0, 0, 0, 25, 1, 0, 0, 0, 0, 38, 0, 65, 0, 0, 0,
- 71, 0, 0, 0, 0, 0, 34, 0,107, 0, 0, 0, 26, 1, 0, 0, 0, 0, 34, 0, 71, 0, 0, 0, 26, 1, 0, 0, 0, 0, 38, 0,
-104, 0, 0, 0, 27, 1, 0, 0, 0, 0, 34, 0, 25, 1, 0, 0, 27, 1, 0, 0, 0, 0, 34, 0,105, 0, 0, 0, 28, 1, 0, 0,
- 0, 0, 34, 0, 26, 1, 0, 0, 28, 1, 0, 0, 0, 0, 34, 0,102, 0, 0, 0, 29, 1, 0, 0, 0, 0, 34, 0, 27, 1, 0, 0,
- 29, 1, 0, 0, 0, 0, 34, 0,103, 0, 0, 0, 30, 1, 0, 0, 0, 0, 34, 0, 28, 1, 0, 0, 30, 1, 0, 0, 0, 0, 34, 0,
-100, 0, 0, 0, 31, 1, 0, 0, 0, 0, 34, 0, 29, 1, 0, 0, 31, 1, 0, 0, 0, 0, 34, 0,101, 0, 0, 0, 32, 1, 0, 0,
- 0, 0, 34, 0, 30, 1, 0, 0, 32, 1, 0, 0, 0, 0, 34, 0, 98, 0, 0, 0, 33, 1, 0, 0, 0, 0, 34, 0, 31, 1, 0, 0,
- 33, 1, 0, 0, 0, 0, 38, 0, 99, 0, 0, 0, 34, 1, 0, 0, 0, 0, 34, 0, 32, 1, 0, 0, 34, 1, 0, 0, 0, 0, 38, 0,
- 96, 0, 0, 0, 35, 1, 0, 0, 0, 0, 34, 0, 33, 1, 0, 0, 35, 1, 0, 0, 0, 0, 34, 0, 97, 0, 0, 0, 36, 1, 0, 0,
- 0, 0, 34, 0, 34, 1, 0, 0, 36, 1, 0, 0, 0, 0, 34, 0, 94, 0, 0, 0, 37, 1, 0, 0, 0, 0, 34, 0, 35, 1, 0, 0,
- 37, 1, 0, 0, 0, 0, 34, 0, 95, 0, 0, 0, 38, 1, 0, 0, 0, 0, 34, 0, 36, 1, 0, 0, 38, 1, 0, 0, 0, 0, 34, 0,
- 92, 0, 0, 0, 39, 1, 0, 0, 0, 0, 34, 0, 37, 1, 0, 0, 39, 1, 0, 0, 0, 0, 34, 0, 93, 0, 0, 0, 40, 1, 0, 0,
- 0, 0, 34, 0, 38, 1, 0, 0, 40, 1, 0, 0, 0, 0, 34, 0, 90, 0, 0, 0, 41, 1, 0, 0, 0, 0, 34, 0, 39, 1, 0, 0,
- 41, 1, 0, 0, 0, 0, 34, 0, 91, 0, 0, 0, 42, 1, 0, 0, 0, 0, 34, 0, 40, 1, 0, 0, 42, 1, 0, 0, 0, 0, 34, 0,
- 49, 1, 0, 0, 50, 1, 0, 0, 0, 0, 38, 0, 50, 1, 0, 0, 69, 1, 0, 0, 0, 0, 34, 0, 69, 1, 0, 0, 79, 1, 0, 0,
- 0, 0, 34, 0, 49, 1, 0, 0, 79, 1, 0, 0, 0, 0, 34, 0, 50, 1, 0, 0, 70, 1, 0, 0, 0, 0, 34, 0, 49, 1, 0, 0,
- 80, 1, 0, 0, 0, 0, 34, 0, 70, 1, 0, 0, 80, 1, 0, 0, 0, 0, 34, 0, 48, 1, 0, 0, 49, 1, 0, 0, 0, 0, 38, 0,
- 77, 1, 0, 0, 79, 1, 0, 0, 0, 0, 34, 0, 48, 1, 0, 0, 77, 1, 0, 0, 0, 0, 34, 0, 48, 1, 0, 0, 78, 1, 0, 0,
- 0, 0, 34, 0, 78, 1, 0, 0, 80, 1, 0, 0, 0, 0, 34, 0, 47, 1, 0, 0, 48, 1, 0, 0, 0, 0, 38, 0, 77, 1, 0, 0,
- 81, 1, 0, 0, 0, 0, 34, 0, 47, 1, 0, 0, 81, 1, 0, 0, 0, 0, 34, 0, 47, 1, 0, 0, 82, 1, 0, 0, 0, 0, 34, 0,
- 78, 1, 0, 0, 82, 1, 0, 0, 0, 0, 34, 0, 89, 0, 0, 0, 47, 1, 0, 0, 0, 0, 38, 0, 87, 0, 0, 0, 81, 1, 0, 0,
- 0, 0, 34, 0, 88, 0, 0, 0, 82, 1, 0, 0, 0, 0, 34, 0, 75, 1, 0, 0, 81, 1, 0, 0, 0, 0, 34, 0, 85, 0, 0, 0,
- 75, 1, 0, 0, 0, 0, 34, 0, 86, 0, 0, 0, 76, 1, 0, 0, 0, 0, 34, 0, 76, 1, 0, 0, 82, 1, 0, 0, 0, 0, 34, 0,
- 71, 1, 0, 0, 75, 1, 0, 0, 0, 0, 34, 0, 83, 0, 0, 0, 71, 1, 0, 0, 0, 0, 34, 0, 84, 0, 0, 0, 72, 1, 0, 0,
- 0, 0, 34, 0, 72, 1, 0, 0, 76, 1, 0, 0, 0, 0, 34, 0, 71, 1, 0, 0, 73, 1, 0, 0, 0, 0, 34, 0, 81, 0, 0, 0,
- 73, 1, 0, 0, 0, 0, 34, 0, 82, 0, 0, 0, 74, 1, 0, 0, 0, 0, 34, 0, 72, 1, 0, 0, 74, 1, 0, 0, 0, 0, 34, 0,
- 71, 1, 0, 0, 77, 1, 0, 0, 0, 0, 34, 0, 73, 1, 0, 0, 79, 1, 0, 0, 0, 0, 34, 0, 72, 1, 0, 0, 78, 1, 0, 0,
- 0, 0, 34, 0, 74, 1, 0, 0, 80, 1, 0, 0, 0, 0, 34, 0, 67, 1, 0, 0, 73, 1, 0, 0, 0, 0, 34, 0, 67, 1, 0, 0,
- 69, 1, 0, 0, 0, 0, 34, 0, 68, 1, 0, 0, 74, 1, 0, 0, 0, 0, 34, 0, 68, 1, 0, 0, 70, 1, 0, 0, 0, 0, 34, 0,
- 79, 0, 0, 0, 67, 1, 0, 0, 0, 0, 34, 0, 80, 0, 0, 0, 68, 1, 0, 0, 0, 0, 34, 0,206, 0, 0, 0, 83, 1, 0, 0,
- 0, 0, 34, 0, 83, 1, 0, 0, 85, 1, 0, 0, 0, 0, 34, 0,212, 0, 0, 0, 85, 1, 0, 0, 0, 0, 34, 0, 84, 1, 0, 0,
- 86, 1, 0, 0, 0, 0, 34, 0,207, 0, 0, 0, 84, 1, 0, 0, 0, 0, 34, 0,213, 0, 0, 0, 86, 1, 0, 0, 0, 0, 34, 0,
- 67, 1, 0, 0, 83, 1, 0, 0, 0, 0, 34, 0, 68, 1, 0, 0, 84, 1, 0, 0, 0, 0, 34, 0, 85, 1, 0, 0, 87, 1, 0, 0,
- 0, 0, 34, 0, 77, 0, 0, 0, 87, 1, 0, 0, 0, 0, 34, 0, 78, 0, 0, 0, 88, 1, 0, 0, 0, 0, 34, 0, 86, 1, 0, 0,
- 88, 1, 0, 0, 0, 0, 34, 0, 41, 1, 0, 0, 87, 1, 0, 0, 0, 0, 34, 0, 42, 1, 0, 0, 88, 1, 0, 0, 0, 0, 34, 0,
- 75, 0, 0, 0, 65, 1, 0, 0, 0, 0, 34, 0, 65, 1, 0, 0, 93, 1, 0, 0, 0, 0, 34, 0, 45, 1, 0, 0, 93, 1, 0, 0,
- 0, 0, 39, 0, 75, 0, 0, 0, 45, 1, 0, 0, 0, 0, 38, 0, 66, 1, 0, 0, 94, 1, 0, 0, 0, 0, 34, 0, 75, 0, 0, 0,
- 66, 1, 0, 0, 0, 0, 34, 0, 45, 1, 0, 0, 94, 1, 0, 0, 0, 0, 39, 0, 91, 1, 0, 0, 93, 1, 0, 0, 0, 0, 34, 0,
- 76, 0, 0, 0, 91, 1, 0, 0, 0, 0, 34, 0, 76, 0, 0, 0, 45, 1, 0, 0, 0, 0, 38, 0, 92, 1, 0, 0, 94, 1, 0, 0,
- 0, 0, 34, 0, 76, 0, 0, 0, 92, 1, 0, 0, 0, 0, 34, 0, 89, 1, 0, 0, 91, 1, 0, 0, 0, 0, 34, 0, 46, 1, 0, 0,
- 89, 1, 0, 0, 0, 0, 34, 0, 76, 0, 0, 0, 46, 1, 0, 0, 0, 0, 38, 0, 90, 1, 0, 0, 92, 1, 0, 0, 0, 0, 34, 0,
- 46, 1, 0, 0, 90, 1, 0, 0, 0, 0, 34, 0, 69, 1, 0, 0, 89, 1, 0, 0, 0, 0, 34, 0, 46, 1, 0, 0, 50, 1, 0, 0,
- 0, 0, 38, 0, 70, 1, 0, 0, 90, 1, 0, 0, 0, 0, 34, 0, 83, 1, 0, 0, 89, 1, 0, 0, 0, 0, 34, 0, 84, 1, 0, 0,
- 90, 1, 0, 0, 0, 0, 34, 0, 39, 1, 0, 0, 59, 1, 0, 0, 0, 0, 34, 0, 51, 1, 0, 0, 59, 1, 0, 0, 0, 0, 34, 0,
- 37, 1, 0, 0, 51, 1, 0, 0, 0, 0, 34, 0, 40, 1, 0, 0, 60, 1, 0, 0, 0, 0, 34, 0, 38, 1, 0, 0, 52, 1, 0, 0,
- 0, 0, 34, 0, 52, 1, 0, 0, 60, 1, 0, 0, 0, 0, 34, 0, 74, 0, 0, 0, 57, 1, 0, 0, 0, 0, 39, 0, 57, 1, 0, 0,
- 65, 1, 0, 0, 0, 0, 34, 0, 74, 0, 0, 0, 75, 0, 0, 0, 0, 0, 38, 0, 58, 1, 0, 0, 66, 1, 0, 0, 0, 0, 34, 0,
- 74, 0, 0, 0, 58, 1, 0, 0, 0, 0, 39, 0, 43, 1, 0, 0, 99, 1, 0, 0, 0, 0, 34, 0, 97, 1, 0, 0, 99, 1, 0, 0,
- 0, 0, 34, 0, 44, 1, 0, 0, 97, 1, 0, 0, 0, 0, 34, 0, 43, 1, 0, 0, 44, 1, 0, 0, 0, 0, 38, 0, 98, 1, 0, 0,
-100, 1, 0, 0, 0, 0, 34, 0, 43, 1, 0, 0,100, 1, 0, 0, 0, 0, 34, 0, 44, 1, 0, 0, 98, 1, 0, 0, 0, 0, 34, 0,
- 95, 1, 0, 0, 97, 1, 0, 0, 0, 0, 34, 0, 73, 0, 0, 0, 95, 1, 0, 0, 0, 0, 34, 0, 73, 0, 0, 0, 44, 1, 0, 0,
- 0, 0, 38, 0, 96, 1, 0, 0, 98, 1, 0, 0, 0, 0, 34, 0, 73, 0, 0, 0, 96, 1, 0, 0, 0, 0, 34, 0, 57, 1, 0, 0,
- 95, 1, 0, 0, 0, 0, 34, 0, 73, 0, 0, 0, 74, 0, 0, 0, 0, 0, 38, 0, 58, 1, 0, 0, 96, 1, 0, 0, 0, 0, 34, 0,
- 35, 1, 0, 0,103, 1, 0, 0, 0, 0, 34, 0,103, 1, 0, 0,105, 1, 0, 0, 0, 0, 34, 0, 33, 1, 0, 0,105, 1, 0, 0,
- 0, 0, 34, 0, 36, 1, 0, 0,104, 1, 0, 0, 0, 0, 34, 0, 34, 1, 0, 0,106, 1, 0, 0, 0, 0, 34, 0,104, 1, 0, 0,
-106, 1, 0, 0, 0, 0, 34, 0,103, 1, 0, 0,109, 1, 0, 0, 0, 0, 34, 0,107, 1, 0, 0,109, 1, 0, 0, 0, 0, 34, 0,
-105, 1, 0, 0,107, 1, 0, 0, 0, 0, 34, 0,104, 1, 0, 0,110, 1, 0, 0, 0, 0, 34, 0,106, 1, 0, 0,108, 1, 0, 0,
- 0, 0, 34, 0,108, 1, 0, 0,110, 1, 0, 0, 0, 0, 34, 0,109, 1, 0, 0,111, 1, 0, 0, 0, 0, 34, 0,111, 1, 0, 0,
-113, 1, 0, 0, 0, 0, 34, 0,107, 1, 0, 0,113, 1, 0, 0, 0, 0, 34, 0,110, 1, 0, 0,112, 1, 0, 0, 0, 0, 34, 0,
-108, 1, 0, 0,114, 1, 0, 0, 0, 0, 34, 0,112, 1, 0, 0,114, 1, 0, 0, 0, 0, 34, 0,111, 1, 0, 0,117, 1, 0, 0,
- 0, 0, 34, 0,115, 1, 0, 0,117, 1, 0, 0, 0, 0, 34, 0,113, 1, 0, 0,115, 1, 0, 0, 0, 0, 34, 0,112, 1, 0, 0,
-118, 1, 0, 0, 0, 0, 34, 0,114, 1, 0, 0,116, 1, 0, 0, 0, 0, 34, 0,116, 1, 0, 0,118, 1, 0, 0, 0, 0, 34, 0,
- 55, 1, 0, 0,119, 1, 0, 0, 0, 0, 39, 0,115, 1, 0, 0,119, 1, 0, 0, 0, 0, 34, 0, 55, 1, 0, 0,117, 1, 0, 0,
- 0, 0, 34, 0,116, 1, 0, 0,120, 1, 0, 0, 0, 0, 34, 0, 56, 1, 0, 0,120, 1, 0, 0, 0, 0, 39, 0, 56, 1, 0, 0,
-118, 1, 0, 0, 0, 0, 34, 0, 95, 1, 0, 0,115, 1, 0, 0, 0, 0, 34, 0, 57, 1, 0, 0,119, 1, 0, 0, 0, 0, 39, 0,
- 96, 1, 0, 0,116, 1, 0, 0, 0, 0, 34, 0, 58, 1, 0, 0,120, 1, 0, 0, 0, 0, 39, 0, 97, 1, 0, 0,113, 1, 0, 0,
- 0, 0, 34, 0, 98, 1, 0, 0,114, 1, 0, 0, 0, 0, 34, 0, 99, 1, 0, 0,107, 1, 0, 0, 0, 0, 34, 0,100, 1, 0, 0,
-108, 1, 0, 0, 0, 0, 34, 0, 99, 1, 0, 0,101, 1, 0, 0, 0, 0, 34, 0,101, 1, 0, 0,105, 1, 0, 0, 0, 0, 34, 0,
-102, 1, 0, 0,106, 1, 0, 0, 0, 0, 34, 0,100, 1, 0, 0,102, 1, 0, 0, 0, 0, 34, 0, 31, 1, 0, 0,101, 1, 0, 0,
- 0, 0, 34, 0, 32, 1, 0, 0,102, 1, 0, 0, 0, 0, 34, 0, 72, 0, 0, 0,101, 1, 0, 0, 0, 0, 34, 0, 72, 0, 0, 0,
- 43, 1, 0, 0, 0, 0, 38, 0, 72, 0, 0, 0,102, 1, 0, 0, 0, 0, 34, 0, 25, 1, 0, 0, 31, 1, 0, 0, 0, 0, 38, 0,
- 26, 1, 0, 0, 32, 1, 0, 0, 0, 0, 38, 0, 72, 0, 0, 0, 25, 1, 0, 0, 0, 0, 34, 0, 72, 0, 0, 0, 26, 1, 0, 0,
- 0, 0, 34, 0, 71, 0, 0, 0, 72, 0, 0, 0, 0, 0, 38, 0, 51, 1, 0, 0,103, 1, 0, 0, 0, 0, 34, 0, 52, 1, 0, 0,
-104, 1, 0, 0, 0, 0, 34, 0, 51, 1, 0, 0, 53, 1, 0, 0, 0, 0, 34, 0, 53, 1, 0, 0,109, 1, 0, 0, 0, 0, 34, 0,
- 54, 1, 0, 0,110, 1, 0, 0, 0, 0, 34, 0, 52, 1, 0, 0, 54, 1, 0, 0, 0, 0, 34, 0, 53, 1, 0, 0,123, 1, 0, 0,
- 0, 0, 34, 0,111, 1, 0, 0,123, 1, 0, 0, 0, 0, 34, 0,112, 1, 0, 0,124, 1, 0, 0, 0, 0, 34, 0, 54, 1, 0, 0,
-124, 1, 0, 0, 0, 0, 34, 0, 55, 1, 0, 0,123, 1, 0, 0, 0, 0, 34, 0, 56, 1, 0, 0,124, 1, 0, 0, 0, 0, 34, 0,
- 91, 1, 0, 0,127, 1, 0, 0, 0, 0, 34, 0,125, 1, 0, 0,127, 1, 0, 0, 0, 0, 34, 0, 89, 1, 0, 0,125, 1, 0, 0,
- 0, 0, 34, 0, 92, 1, 0, 0,128, 1, 0, 0, 0, 0, 34, 0, 90, 1, 0, 0,126, 1, 0, 0, 0, 0, 34, 0,126, 1, 0, 0,
-128, 1, 0, 0, 0, 0, 34, 0, 59, 1, 0, 0,125, 1, 0, 0, 0, 0, 34, 0, 61, 1, 0, 0,127, 1, 0, 0, 0, 0, 34, 0,
- 59, 1, 0, 0, 61, 1, 0, 0, 0, 0, 34, 0, 60, 1, 0, 0,126, 1, 0, 0, 0, 0, 34, 0, 60, 1, 0, 0, 62, 1, 0, 0,
- 0, 0, 34, 0, 62, 1, 0, 0,128, 1, 0, 0, 0, 0, 34, 0, 41, 1, 0, 0,125, 1, 0, 0, 0, 0, 34, 0, 42, 1, 0, 0,
-126, 1, 0, 0, 0, 0, 34, 0, 41, 1, 0, 0, 85, 1, 0, 0, 0, 0, 34, 0, 83, 1, 0, 0,125, 1, 0, 0, 0, 0, 34, 0,
- 42, 1, 0, 0, 86, 1, 0, 0, 0, 0, 34, 0, 84, 1, 0, 0,126, 1, 0, 0, 0, 0, 34, 0, 55, 1, 0, 0, 63, 1, 0, 0,
- 0, 0, 34, 0, 63, 1, 0, 0,121, 1, 0, 0, 0, 0, 39, 0,119, 1, 0, 0,121, 1, 0, 0, 0, 0, 34, 0, 64, 1, 0, 0,
-122, 1, 0, 0, 0, 0, 39, 0, 56, 1, 0, 0, 64, 1, 0, 0, 0, 0, 34, 0,120, 1, 0, 0,122, 1, 0, 0, 0, 0, 34, 0,
- 65, 1, 0, 0,121, 1, 0, 0, 0, 0, 34, 0, 66, 1, 0, 0,122, 1, 0, 0, 0, 0, 34, 0,121, 1, 0, 0,127, 1, 0, 0,
- 0, 0, 34, 0, 61, 1, 0, 0, 63, 1, 0, 0, 0, 0, 34, 0,122, 1, 0, 0,128, 1, 0, 0, 0, 0, 34, 0, 62, 1, 0, 0,
- 64, 1, 0, 0, 0, 0, 34, 0, 93, 1, 0, 0,121, 1, 0, 0, 0, 0, 39, 0, 94, 1, 0, 0,122, 1, 0, 0, 0, 0, 39, 0,
-129, 1, 0, 0,141, 1, 0, 0, 0, 0, 34, 0,129, 1, 0, 0,155, 1, 0, 0, 0, 0, 34, 0,143, 1, 0, 0,155, 1, 0, 0,
- 0, 0, 34, 0,141, 1, 0, 0,143, 1, 0, 0, 0, 0, 34, 0,130, 1, 0, 0,156, 1, 0, 0, 0, 0, 34, 0,130, 1, 0, 0,
-142, 1, 0, 0, 0, 0, 34, 0,142, 1, 0, 0,144, 1, 0, 0, 0, 0, 34, 0,144, 1, 0, 0,156, 1, 0, 0, 0, 0, 34, 0,
-143, 1, 0, 0,145, 1, 0, 0, 0, 0, 34, 0,139, 1, 0, 0,145, 1, 0, 0, 0, 0, 34, 0,139, 1, 0, 0,141, 1, 0, 0,
- 0, 0, 34, 0,144, 1, 0, 0,146, 1, 0, 0, 0, 0, 34, 0,140, 1, 0, 0,142, 1, 0, 0, 0, 0, 34, 0,140, 1, 0, 0,
-146, 1, 0, 0, 0, 0, 34, 0,145, 1, 0, 0,147, 1, 0, 0, 0, 0, 34, 0,137, 1, 0, 0,147, 1, 0, 0, 0, 0, 34, 0,
-137, 1, 0, 0,139, 1, 0, 0, 0, 0, 34, 0,146, 1, 0, 0,148, 1, 0, 0, 0, 0, 34, 0,138, 1, 0, 0,140, 1, 0, 0,
- 0, 0, 34, 0,138, 1, 0, 0,148, 1, 0, 0, 0, 0, 34, 0,147, 1, 0, 0,149, 1, 0, 0, 0, 0, 34, 0,135, 1, 0, 0,
-149, 1, 0, 0, 0, 0, 34, 0,135, 1, 0, 0,137, 1, 0, 0, 0, 0, 34, 0,148, 1, 0, 0,150, 1, 0, 0, 0, 0, 34, 0,
-136, 1, 0, 0,138, 1, 0, 0, 0, 0, 34, 0,136, 1, 0, 0,150, 1, 0, 0, 0, 0, 34, 0,149, 1, 0, 0,151, 1, 0, 0,
- 0, 0, 34, 0,133, 1, 0, 0,151, 1, 0, 0, 0, 0, 34, 0,133, 1, 0, 0,135, 1, 0, 0, 0, 0, 34, 0,150, 1, 0, 0,
-152, 1, 0, 0, 0, 0, 34, 0,134, 1, 0, 0,136, 1, 0, 0, 0, 0, 34, 0,134, 1, 0, 0,152, 1, 0, 0, 0, 0, 34, 0,
-151, 1, 0, 0,153, 1, 0, 0, 0, 0, 34, 0,131, 1, 0, 0,153, 1, 0, 0, 0, 0, 34, 0,131, 1, 0, 0,133, 1, 0, 0,
- 0, 0, 34, 0,152, 1, 0, 0,154, 1, 0, 0, 0, 0, 34, 0,132, 1, 0, 0,134, 1, 0, 0, 0, 0, 34, 0,132, 1, 0, 0,
-154, 1, 0, 0, 0, 0, 34, 0,151, 1, 0, 0,161, 1, 0, 0, 0, 0, 34, 0,159, 1, 0, 0,161, 1, 0, 0, 0, 0, 34, 0,
-153, 1, 0, 0,159, 1, 0, 0, 0, 0, 34, 0,160, 1, 0, 0,162, 1, 0, 0, 0, 0, 34, 0,152, 1, 0, 0,162, 1, 0, 0,
- 0, 0, 34, 0,154, 1, 0, 0,160, 1, 0, 0, 0, 0, 34, 0,149, 1, 0, 0,163, 1, 0, 0, 0, 0, 34, 0,161, 1, 0, 0,
-163, 1, 0, 0, 0, 0, 34, 0,162, 1, 0, 0,164, 1, 0, 0, 0, 0, 34, 0,150, 1, 0, 0,164, 1, 0, 0, 0, 0, 34, 0,
-147, 1, 0, 0,165, 1, 0, 0, 0, 0, 34, 0,163, 1, 0, 0,165, 1, 0, 0, 0, 0, 34, 0,164, 1, 0, 0,166, 1, 0, 0,
- 0, 0, 34, 0,148, 1, 0, 0,166, 1, 0, 0, 0, 0, 34, 0,145, 1, 0, 0,167, 1, 0, 0, 0, 0, 34, 0,165, 1, 0, 0,
-167, 1, 0, 0, 0, 0, 34, 0,166, 1, 0, 0,168, 1, 0, 0, 0, 0, 34, 0,146, 1, 0, 0,168, 1, 0, 0, 0, 0, 34, 0,
-143, 1, 0, 0,169, 1, 0, 0, 0, 0, 34, 0,167, 1, 0, 0,169, 1, 0, 0, 0, 0, 34, 0,168, 1, 0, 0,170, 1, 0, 0,
- 0, 0, 34, 0,144, 1, 0, 0,170, 1, 0, 0, 0, 0, 34, 0,155, 1, 0, 0,157, 1, 0, 0, 0, 0, 34, 0,157, 1, 0, 0,
-169, 1, 0, 0, 0, 0, 34, 0,156, 1, 0, 0,158, 1, 0, 0, 0, 0, 34, 0,158, 1, 0, 0,170, 1, 0, 0, 0, 0, 34, 0,
- 61, 1, 0, 0,185, 1, 0, 0, 0, 0, 34, 0,183, 1, 0, 0,185, 1, 0, 0, 0, 0, 34, 0, 59, 1, 0, 0,183, 1, 0, 0,
- 0, 0, 34, 0, 62, 1, 0, 0,186, 1, 0, 0, 0, 0, 34, 0, 60, 1, 0, 0,184, 1, 0, 0, 0, 0, 34, 0,184, 1, 0, 0,
-186, 1, 0, 0, 0, 0, 34, 0, 61, 1, 0, 0,131, 1, 0, 0, 0, 0, 34, 0,153, 1, 0, 0,185, 1, 0, 0, 0, 0, 34, 0,
- 62, 1, 0, 0,132, 1, 0, 0, 0, 0, 34, 0,154, 1, 0, 0,186, 1, 0, 0, 0, 0, 34, 0, 53, 1, 0, 0,183, 1, 0, 0,
- 0, 0, 34, 0, 54, 1, 0, 0,184, 1, 0, 0, 0, 0, 34, 0,123, 1, 0, 0,171, 1, 0, 0, 0, 0, 34, 0,155, 1, 0, 0,
-171, 1, 0, 0, 0, 0, 34, 0,123, 1, 0, 0,129, 1, 0, 0, 0, 0, 34, 0,156, 1, 0, 0,172, 1, 0, 0, 0, 0, 34, 0,
-124, 1, 0, 0,172, 1, 0, 0, 0, 0, 34, 0,124, 1, 0, 0,130, 1, 0, 0, 0, 0, 34, 0,159, 1, 0, 0,181, 1, 0, 0,
- 0, 0, 34, 0,181, 1, 0, 0,185, 1, 0, 0, 0, 0, 34, 0,160, 1, 0, 0,182, 1, 0, 0, 0, 0, 34, 0,182, 1, 0, 0,
-186, 1, 0, 0, 0, 0, 34, 0,179, 1, 0, 0,187, 1, 0, 0, 0, 0, 34, 0,185, 1, 0, 0,187, 1, 0, 0, 0, 0, 34, 0,
-179, 1, 0, 0,181, 1, 0, 0, 0, 0, 34, 0,186, 1, 0, 0,188, 1, 0, 0, 0, 0, 34, 0,180, 1, 0, 0,188, 1, 0, 0,
- 0, 0, 34, 0,180, 1, 0, 0,182, 1, 0, 0, 0, 0, 34, 0,175, 1, 0, 0,187, 1, 0, 0, 0, 0, 34, 0,177, 1, 0, 0,
-179, 1, 0, 0, 0, 0, 34, 0,175, 1, 0, 0,177, 1, 0, 0, 0, 0, 34, 0,176, 1, 0, 0,188, 1, 0, 0, 0, 0, 34, 0,
-176, 1, 0, 0,178, 1, 0, 0, 0, 0, 34, 0,178, 1, 0, 0,180, 1, 0, 0, 0, 0, 34, 0,173, 1, 0, 0,189, 1, 0, 0,
- 0, 0, 34, 0,187, 1, 0, 0,189, 1, 0, 0, 0, 0, 34, 0,173, 1, 0, 0,175, 1, 0, 0, 0, 0, 34, 0,188, 1, 0, 0,
-190, 1, 0, 0, 0, 0, 34, 0,174, 1, 0, 0,190, 1, 0, 0, 0, 0, 34, 0,174, 1, 0, 0,176, 1, 0, 0, 0, 0, 34, 0,
-171, 1, 0, 0,189, 1, 0, 0, 0, 0, 34, 0,173, 1, 0, 0,191, 1, 0, 0, 0, 0, 34, 0,171, 1, 0, 0,191, 1, 0, 0,
- 0, 0, 32, 0,172, 1, 0, 0,190, 1, 0, 0, 0, 0, 34, 0,172, 1, 0, 0,192, 1, 0, 0, 0, 0, 32, 0,174, 1, 0, 0,
-192, 1, 0, 0, 0, 0, 34, 0,157, 1, 0, 0,191, 1, 0, 0, 0, 0, 34, 0,158, 1, 0, 0,192, 1, 0, 0, 0, 0, 34, 0,
- 53, 1, 0, 0,189, 1, 0, 0, 0, 0, 34, 0, 54, 1, 0, 0,190, 1, 0, 0, 0, 0, 34, 0,183, 1, 0, 0,187, 1, 0, 0,
- 0, 0, 34, 0,184, 1, 0, 0,188, 1, 0, 0, 0, 0, 34, 0,191, 1, 0, 0,193, 1, 0, 0, 0, 0, 34, 0,193, 1, 0, 0,
-217, 1, 0, 0, 0, 0, 34, 0,157, 1, 0, 0,217, 1, 0, 0, 0, 0, 34, 0,192, 1, 0, 0,194, 1, 0, 0, 0, 0, 34, 0,
-158, 1, 0, 0,218, 1, 0, 0, 0, 0, 34, 0,194, 1, 0, 0,218, 1, 0, 0, 0, 0, 34, 0,173, 1, 0, 0,203, 1, 0, 0,
- 0, 0, 34, 0,193, 1, 0, 0,203, 1, 0, 0, 0, 0, 34, 0,174, 1, 0, 0,204, 1, 0, 0, 0, 0, 34, 0,194, 1, 0, 0,
-204, 1, 0, 0, 0, 0, 34, 0,175, 1, 0, 0,201, 1, 0, 0, 0, 0, 34, 0,201, 1, 0, 0,203, 1, 0, 0, 0, 0, 34, 0,
-176, 1, 0, 0,202, 1, 0, 0, 0, 0, 34, 0,202, 1, 0, 0,204, 1, 0, 0, 0, 0, 34, 0,177, 1, 0, 0,199, 1, 0, 0,
- 0, 0, 34, 0,199, 1, 0, 0,201, 1, 0, 0, 0, 0, 34, 0,178, 1, 0, 0,200, 1, 0, 0, 0, 0, 34, 0,200, 1, 0, 0,
-202, 1, 0, 0, 0, 0, 34, 0,179, 1, 0, 0,197, 1, 0, 0, 0, 0, 34, 0,197, 1, 0, 0,199, 1, 0, 0, 0, 0, 34, 0,
-180, 1, 0, 0,198, 1, 0, 0, 0, 0, 34, 0,198, 1, 0, 0,200, 1, 0, 0, 0, 0, 34, 0,181, 1, 0, 0,195, 1, 0, 0,
- 0, 0, 34, 0,195, 1, 0, 0,197, 1, 0, 0, 0, 0, 34, 0,182, 1, 0, 0,196, 1, 0, 0, 0, 0, 34, 0,196, 1, 0, 0,
-198, 1, 0, 0, 0, 0, 34, 0,159, 1, 0, 0,215, 1, 0, 0, 0, 0, 34, 0,195, 1, 0, 0,215, 1, 0, 0, 0, 0, 34, 0,
-160, 1, 0, 0,216, 1, 0, 0, 0, 0, 34, 0,196, 1, 0, 0,216, 1, 0, 0, 0, 0, 34, 0,205, 1, 0, 0,217, 1, 0, 0,
- 0, 0, 34, 0,169, 1, 0, 0,205, 1, 0, 0, 0, 0, 34, 0,170, 1, 0, 0,206, 1, 0, 0, 0, 0, 34, 0,206, 1, 0, 0,
-218, 1, 0, 0, 0, 0, 34, 0,205, 1, 0, 0,207, 1, 0, 0, 0, 0, 34, 0,167, 1, 0, 0,207, 1, 0, 0, 0, 0, 34, 0,
-168, 1, 0, 0,208, 1, 0, 0, 0, 0, 34, 0,206, 1, 0, 0,208, 1, 0, 0, 0, 0, 34, 0,207, 1, 0, 0,209, 1, 0, 0,
- 0, 0, 34, 0,165, 1, 0, 0,209, 1, 0, 0, 0, 0, 34, 0,166, 1, 0, 0,210, 1, 0, 0, 0, 0, 34, 0,208, 1, 0, 0,
-210, 1, 0, 0, 0, 0, 34, 0,209, 1, 0, 0,211, 1, 0, 0, 0, 0, 34, 0,163, 1, 0, 0,211, 1, 0, 0, 0, 0, 34, 0,
-164, 1, 0, 0,212, 1, 0, 0, 0, 0, 34, 0,210, 1, 0, 0,212, 1, 0, 0, 0, 0, 34, 0,211, 1, 0, 0,213, 1, 0, 0,
- 0, 0, 34, 0,161, 1, 0, 0,213, 1, 0, 0, 0, 0, 34, 0,162, 1, 0, 0,214, 1, 0, 0, 0, 0, 34, 0,212, 1, 0, 0,
-214, 1, 0, 0, 0, 0, 34, 0,213, 1, 0, 0,215, 1, 0, 0, 0, 0, 34, 0,214, 1, 0, 0,216, 1, 0, 0, 0, 0, 34, 0,
-197, 1, 0, 0,221, 1, 0, 0, 0, 0, 34, 0,219, 1, 0, 0,221, 1, 0, 0, 0, 0, 34, 0,199, 1, 0, 0,219, 1, 0, 0,
- 0, 0, 34, 0,198, 1, 0, 0,222, 1, 0, 0, 0, 0, 34, 0,200, 1, 0, 0,220, 1, 0, 0, 0, 0, 34, 0,220, 1, 0, 0,
-222, 1, 0, 0, 0, 0, 34, 0,221, 1, 0, 0,223, 1, 0, 0, 0, 0, 34, 0,223, 1, 0, 0,225, 1, 0, 0, 0, 0, 32, 0,
-219, 1, 0, 0,225, 1, 0, 0, 0, 0, 34, 0,222, 1, 0, 0,224, 1, 0, 0, 0, 0, 34, 0,220, 1, 0, 0,226, 1, 0, 0,
- 0, 0, 34, 0,224, 1, 0, 0,226, 1, 0, 0, 0, 0, 32, 0,223, 1, 0, 0,229, 1, 0, 0, 0, 0, 34, 0,227, 1, 0, 0,
-229, 1, 0, 0, 0, 0, 34, 0,225, 1, 0, 0,227, 1, 0, 0, 0, 0, 34, 0,224, 1, 0, 0,230, 1, 0, 0, 0, 0, 34, 0,
-226, 1, 0, 0,228, 1, 0, 0, 0, 0, 34, 0,228, 1, 0, 0,230, 1, 0, 0, 0, 0, 34, 0,229, 1, 0, 0,231, 1, 0, 0,
- 0, 0, 34, 0,231, 1, 0, 0,233, 1, 0, 0, 0, 0, 34, 0,227, 1, 0, 0,233, 1, 0, 0, 0, 0, 34, 0,230, 1, 0, 0,
-232, 1, 0, 0, 0, 0, 34, 0,228, 1, 0, 0,234, 1, 0, 0, 0, 0, 34, 0,232, 1, 0, 0,234, 1, 0, 0, 0, 0, 34, 0,
-217, 1, 0, 0,227, 1, 0, 0, 0, 0, 34, 0,205, 1, 0, 0,233, 1, 0, 0, 0, 0, 34, 0,218, 1, 0, 0,228, 1, 0, 0,
- 0, 0, 34, 0,206, 1, 0, 0,234, 1, 0, 0, 0, 0, 34, 0,193, 1, 0, 0,225, 1, 0, 0, 0, 0, 34, 0,194, 1, 0, 0,
-226, 1, 0, 0, 0, 0, 34, 0,203, 1, 0, 0,219, 1, 0, 0, 0, 0, 34, 0,204, 1, 0, 0,220, 1, 0, 0, 0, 0, 34, 0,
-215, 1, 0, 0,221, 1, 0, 0, 0, 0, 34, 0,216, 1, 0, 0,222, 1, 0, 0, 0, 0, 34, 0,213, 1, 0, 0,223, 1, 0, 0,
- 0, 0, 34, 0,214, 1, 0, 0,224, 1, 0, 0, 0, 0, 34, 0,211, 1, 0, 0,229, 1, 0, 0, 0, 0, 34, 0,212, 1, 0, 0,
-230, 1, 0, 0, 0, 0, 34, 0,209, 1, 0, 0,231, 1, 0, 0, 0, 0, 34, 0,210, 1, 0, 0,232, 1, 0, 0, 0, 0, 34, 0,
-207, 1, 0, 0,233, 1, 0, 0, 0, 0, 34, 0,208, 1, 0, 0,234, 1, 0, 0, 0, 0, 34, 0,131, 1, 0, 0,245, 1, 0, 0,
- 0, 0, 34, 0,243, 1, 0, 0,245, 1, 0, 0, 0, 0, 39, 0,133, 1, 0, 0,243, 1, 0, 0, 0, 0, 34, 0,132, 1, 0, 0,
-246, 1, 0, 0, 0, 0, 34, 0,134, 1, 0, 0,244, 1, 0, 0, 0, 0, 34, 0,244, 1, 0, 0,246, 1, 0, 0, 0, 0, 39, 0,
-241, 1, 0, 0,243, 1, 0, 0, 0, 0, 39, 0,135, 1, 0, 0,241, 1, 0, 0, 0, 0, 34, 0,136, 1, 0, 0,242, 1, 0, 0,
- 0, 0, 34, 0,242, 1, 0, 0,244, 1, 0, 0, 0, 0, 39, 0,239, 1, 0, 0,241, 1, 0, 0, 0, 0, 39, 0,137, 1, 0, 0,
-239, 1, 0, 0, 0, 0, 34, 0,138, 1, 0, 0,240, 1, 0, 0, 0, 0, 34, 0,240, 1, 0, 0,242, 1, 0, 0, 0, 0, 39, 0,
-237, 1, 0, 0,239, 1, 0, 0, 0, 0, 39, 0,139, 1, 0, 0,237, 1, 0, 0, 0, 0, 34, 0,140, 1, 0, 0,238, 1, 0, 0,
- 0, 0, 34, 0,238, 1, 0, 0,240, 1, 0, 0, 0, 0, 39, 0,235, 1, 0, 0,237, 1, 0, 0, 0, 0, 39, 0,141, 1, 0, 0,
-235, 1, 0, 0, 0, 0, 34, 0,142, 1, 0, 0,236, 1, 0, 0, 0, 0, 34, 0,236, 1, 0, 0,238, 1, 0, 0, 0, 0, 39, 0,
-235, 1, 0, 0,247, 1, 0, 0, 0, 0, 39, 0,129, 1, 0, 0,247, 1, 0, 0, 0, 0, 34, 0,130, 1, 0, 0,248, 1, 0, 0,
- 0, 0, 34, 0,236, 1, 0, 0,248, 1, 0, 0, 0, 0, 39, 0,235, 1, 0, 0,243, 1, 0, 0, 0, 0, 34, 0,245, 1, 0, 0,
-247, 1, 0, 0, 0, 0, 34, 0,236, 1, 0, 0,244, 1, 0, 0, 0, 0, 34, 0,246, 1, 0, 0,248, 1, 0, 0, 0, 0, 34, 0,
-237, 1, 0, 0,241, 1, 0, 0, 0, 0, 34, 0,238, 1, 0, 0,242, 1, 0, 0, 0, 0, 34, 0, 55, 1, 0, 0,247, 1, 0, 0,
- 0, 0, 39, 0, 56, 1, 0, 0,248, 1, 0, 0, 0, 0, 39, 0, 63, 1, 0, 0,245, 1, 0, 0, 0, 0, 39, 0, 64, 1, 0, 0,
-246, 1, 0, 0, 0, 0, 39, 0, 14, 0, 0, 0,249, 0, 0, 0, 0, 0, 34, 0, 14, 0, 0, 0,178, 0, 0, 0, 0, 0, 34, 0,
- 14, 0, 0, 0,113, 0, 0, 0, 0, 0, 34, 0, 14, 0, 0, 0,161, 0, 0, 0, 0, 0, 34, 0, 20, 0, 0, 0,112, 0, 0, 0,
- 0, 0, 34, 0, 16, 0, 0, 0,112, 0, 0, 0, 0, 0, 34, 0, 9, 0, 0, 0,112, 0, 0, 0, 0, 0, 34, 0, 13, 0, 0, 0,
-112, 0, 0, 0, 0, 0, 34, 0, 68, 65, 84, 65, 44, 1, 0, 0,160,120,152, 2, 21, 1, 0, 0, 5, 0, 0, 0, 4, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 63, 8, 3, 5, 0, 0, 0, 20, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 86, 84,101,120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40,176,154, 2, 6, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67,111,108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 53,164, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 16, 39, 0, 0, 16, 63, 8, 3, 53, 0, 0, 0,244, 1, 0, 0, 45, 0, 0, 0,
- 0, 0, 0, 0, 2, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 1, 3, 0, 0, 0, 1, 0, 0, 0, 46, 0, 0, 0, 44, 0, 0, 0,
- 0, 0, 0, 1, 43, 0, 0, 0, 2, 0, 0, 0, 4, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 1, 5, 0, 0, 0, 3, 0, 0, 0,
- 44, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, 8, 0, 0, 0, 6, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 1,
- 7, 0, 0, 0, 9, 0, 0, 0, 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 10, 0, 0, 0, 8, 0, 0, 0,
- 2, 0, 0, 0, 0, 0, 0, 1, 9, 0, 0, 0, 11, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 1, 10, 0, 0, 0,
- 12, 0, 0, 0, 14, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 1,112, 0, 0, 0, 13, 0, 0, 0, 11, 0, 0, 0, 9, 0, 0, 0,
- 0, 0, 0, 1, 8, 0, 0, 0, 14, 0, 0, 0, 15, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 1, 16, 0, 0, 0,112, 0, 0, 0,
- 9, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 1, 14, 0, 0, 0, 19, 0, 0, 0, 17, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 1,
- 18, 0, 0, 0, 20, 0, 0, 0,112, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 1, 12, 0, 0, 0, 21, 0, 0, 0, 19, 0, 0, 0,
- 14, 0, 0, 0, 0, 0, 0, 1, 20, 0, 0, 0, 22, 0, 0, 0, 13, 0, 0, 0,112, 0, 0, 0, 0, 0, 0, 1, 21, 0, 0, 0,
- 23, 0, 0, 0, 25, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 1, 26, 0, 0, 0, 24, 0, 0, 0, 22, 0, 0, 0, 20, 0, 0, 0,
- 0, 0, 0, 1, 19, 0, 0, 0, 25, 0, 0, 0, 27, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 1, 28, 0, 0, 0, 26, 0, 0, 0,
- 20, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 1, 25, 0, 0, 0, 31, 0, 0, 0, 29, 0, 0, 0, 27, 0, 0, 0, 0, 0, 0, 1,
- 30, 0, 0, 0, 32, 0, 0, 0, 26, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 1, 23, 0, 0, 0, 33, 0, 0, 0, 31, 0, 0, 0,
- 25, 0, 0, 0, 0, 0, 0, 1, 32, 0, 0, 0, 34, 0, 0, 0, 24, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 1, 33, 0, 0, 0,
- 35, 0, 0, 0, 37, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 1, 38, 0, 0, 0, 36, 0, 0, 0, 34, 0, 0, 0, 32, 0, 0, 0,
- 0, 0, 0, 1, 31, 0, 0, 0, 37, 0, 0, 0, 39, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 1, 40, 0, 0, 0, 38, 0, 0, 0,
- 32, 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 1, 37, 0, 0, 0, 43, 0, 0, 0, 41, 0, 0, 0, 39, 0, 0, 0, 0, 0, 0, 1,
- 42, 0, 0, 0, 44, 0, 0, 0, 38, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 1, 35, 0, 0, 0, 45, 0, 0, 0, 43, 0, 0, 0,
- 37, 0, 0, 0, 0, 0, 0, 1, 44, 0, 0, 0, 46, 0, 0, 0, 36, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 1, 45, 0, 0, 0,
- 35, 0, 0, 0, 49, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 1, 50, 0, 0, 0, 36, 0, 0, 0, 46, 0, 0, 0, 48, 0, 0, 0,
- 0, 0, 0, 1, 35, 0, 0, 0, 33, 0, 0, 0, 51, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 1, 52, 0, 0, 0, 34, 0, 0, 0,
- 36, 0, 0, 0, 50, 0, 0, 0, 0, 0, 0, 1, 33, 0, 0, 0, 23, 0, 0, 0, 53, 0, 0, 0, 51, 0, 0, 0, 0, 0, 0, 1,
- 54, 0, 0, 0, 24, 0, 0, 0, 34, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 1, 23, 0, 0, 0, 21, 0, 0, 0, 55, 0, 0, 0,
- 53, 0, 0, 0, 0, 0, 0, 1, 56, 0, 0, 0, 22, 0, 0, 0, 24, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 1, 21, 0, 0, 0,
- 12, 0, 0, 0, 57, 0, 0, 0, 55, 0, 0, 0, 0, 0, 0, 1, 58, 0, 0, 0, 13, 0, 0, 0, 22, 0, 0, 0, 56, 0, 0, 0,
- 0, 0, 0, 1, 12, 0, 0, 0, 10, 0, 0, 0, 61, 0, 0, 0, 57, 0, 0, 0, 0, 0, 0, 1, 62, 0, 0, 0, 11, 0, 0, 0,
- 13, 0, 0, 0, 58, 0, 0, 0, 0, 0, 0, 1, 10, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 61, 0, 0, 0, 0, 0, 0, 1,
- 64, 0, 0, 0, 1, 0, 0, 0, 11, 0, 0, 0, 62, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 45, 0, 0, 0, 47, 0, 0, 0,
- 63, 0, 0, 0, 0, 0, 0, 1, 48, 0, 0, 0, 46, 0, 0, 0, 1, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 1, 59, 0, 0, 0,
- 63, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 48, 0, 0, 0, 64, 0, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 61, 0, 0, 0, 63, 0, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 60, 0, 0, 0, 64, 0, 0, 0,
- 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 59, 0, 0, 0, 57, 0, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
- 62, 0, 0, 0, 58, 0, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 59, 0, 0, 0, 55, 0, 0, 0, 57, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 1, 58, 0, 0, 0, 56, 0, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 59, 0, 0, 0,
- 53, 0, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 56, 0, 0, 0, 54, 0, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 59, 0, 0, 0, 51, 0, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 54, 0, 0, 0, 52, 0, 0, 0,
- 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 59, 0, 0, 0, 49, 0, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
- 52, 0, 0, 0, 50, 0, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 59, 0, 0, 0, 47, 0, 0, 0, 49, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 1, 50, 0, 0, 0, 48, 0, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 87, 0, 0, 0,
-171, 0, 0, 0,173, 0, 0, 0, 89, 0, 0, 0, 0, 0, 0, 1,173, 0, 0, 0,172, 0, 0, 0, 88, 0, 0, 0, 89, 0, 0, 0,
- 0, 0, 0, 1, 85, 0, 0, 0,169, 0, 0, 0,171, 0, 0, 0, 87, 0, 0, 0, 0, 0, 0, 1,172, 0, 0, 0,170, 0, 0, 0,
- 86, 0, 0, 0, 88, 0, 0, 0, 0, 0, 0, 1, 83, 0, 0, 0,167, 0, 0, 0,169, 0, 0, 0, 85, 0, 0, 0, 0, 0, 0, 1,
-170, 0, 0, 0,168, 0, 0, 0, 84, 0, 0, 0, 86, 0, 0, 0, 0, 0, 0, 1, 81, 0, 0, 0,165, 0, 0, 0,167, 0, 0, 0,
- 83, 0, 0, 0, 0, 0, 0, 1,168, 0, 0, 0,166, 0, 0, 0, 82, 0, 0, 0, 84, 0, 0, 0, 0, 0, 0, 1, 79, 0, 0, 0,
-163, 0, 0, 0,165, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 1,166, 0, 0, 0,164, 0, 0, 0, 80, 0, 0, 0, 82, 0, 0, 0,
- 0, 0, 0, 1, 77, 0, 0, 0, 90, 0, 0, 0,143, 0, 0, 0,161, 0, 0, 0, 0, 0, 0, 1,144, 0, 0, 0, 91, 0, 0, 0,
- 78, 0, 0, 0,162, 0, 0, 0, 0, 0, 0, 1, 90, 0, 0, 0, 92, 0, 0, 0,145, 0, 0, 0,143, 0, 0, 0, 0, 0, 0, 1,
-146, 0, 0, 0, 93, 0, 0, 0, 91, 0, 0, 0,144, 0, 0, 0, 0, 0, 0, 1, 92, 0, 0, 0, 94, 0, 0, 0,147, 0, 0, 0,
-145, 0, 0, 0, 0, 0, 0, 1,148, 0, 0, 0, 95, 0, 0, 0, 93, 0, 0, 0,146, 0, 0, 0, 0, 0, 0, 1, 94, 0, 0, 0,
- 96, 0, 0, 0,149, 0, 0, 0,147, 0, 0, 0, 0, 0, 0, 1,150, 0, 0, 0, 97, 0, 0, 0, 95, 0, 0, 0,148, 0, 0, 0,
- 0, 0, 0, 1, 96, 0, 0, 0, 98, 0, 0, 0,151, 0, 0, 0,149, 0, 0, 0, 0, 0, 0, 1,152, 0, 0, 0, 99, 0, 0, 0,
- 97, 0, 0, 0,150, 0, 0, 0, 0, 0, 0, 1, 98, 0, 0, 0,100, 0, 0, 0,153, 0, 0, 0,151, 0, 0, 0, 0, 0, 0, 1,
-154, 0, 0, 0,101, 0, 0, 0, 99, 0, 0, 0,152, 0, 0, 0, 0, 0, 0, 1,100, 0, 0, 0,102, 0, 0, 0,155, 0, 0, 0,
-153, 0, 0, 0, 0, 0, 0, 1,156, 0, 0, 0,103, 0, 0, 0,101, 0, 0, 0,154, 0, 0, 0, 0, 0, 0, 1,102, 0, 0, 0,
-104, 0, 0, 0,157, 0, 0, 0,155, 0, 0, 0, 0, 0, 0, 1,158, 0, 0, 0,105, 0, 0, 0,103, 0, 0, 0,156, 0, 0, 0,
- 0, 0, 0, 1,104, 0, 0, 0,106, 0, 0, 0,159, 0, 0, 0,157, 0, 0, 0, 0, 0, 0, 1,160, 0, 0, 0,107, 0, 0, 0,
-105, 0, 0, 0,158, 0, 0, 0, 0, 0, 0, 1,106, 0, 0, 0, 65, 0, 0, 0, 66, 0, 0, 0,159, 0, 0, 0, 0, 0, 0, 1,
- 66, 0, 0, 0, 65, 0, 0, 0,107, 0, 0, 0,160, 0, 0, 0, 0, 0, 0, 1,108, 0, 0, 0,125, 0, 0, 0,157, 0, 0, 0,
-159, 0, 0, 0, 0, 0, 0, 1,158, 0, 0, 0,126, 0, 0, 0,109, 0, 0, 0,160, 0, 0, 0, 0, 0, 0, 1,125, 0, 0, 0,
-176, 0, 0, 0,155, 0, 0, 0,157, 0, 0, 0, 0, 0, 0, 1,156, 0, 0, 0,177, 0, 0, 0,126, 0, 0, 0,158, 0, 0, 0,
- 0, 0, 0, 1,123, 0, 0, 0,153, 0, 0, 0,155, 0, 0, 0,176, 0, 0, 0, 0, 0, 0, 1,156, 0, 0, 0,154, 0, 0, 0,
-124, 0, 0, 0,177, 0, 0, 0, 0, 0, 0, 1,121, 0, 0, 0,151, 0, 0, 0,153, 0, 0, 0,123, 0, 0, 0, 0, 0, 0, 1,
-154, 0, 0, 0,152, 0, 0, 0,122, 0, 0, 0,124, 0, 0, 0, 0, 0, 0, 1,119, 0, 0, 0,149, 0, 0, 0,151, 0, 0, 0,
-121, 0, 0, 0, 0, 0, 0, 1,152, 0, 0, 0,150, 0, 0, 0,120, 0, 0, 0,122, 0, 0, 0, 0, 0, 0, 1,117, 0, 0, 0,
-147, 0, 0, 0,149, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 1,150, 0, 0, 0,148, 0, 0, 0,118, 0, 0, 0,120, 0, 0, 0,
- 0, 0, 0, 1,115, 0, 0, 0,145, 0, 0, 0,147, 0, 0, 0,117, 0, 0, 0, 0, 0, 0, 1,148, 0, 0, 0,146, 0, 0, 0,
-116, 0, 0, 0,118, 0, 0, 0, 0, 0, 0, 1,113, 0, 0, 0,143, 0, 0, 0,145, 0, 0, 0,115, 0, 0, 0, 0, 0, 0, 1,
-146, 0, 0, 0,144, 0, 0, 0,114, 0, 0, 0,116, 0, 0, 0, 0, 0, 0, 1, 14, 0, 0, 0,161, 0, 0, 0,143, 0, 0, 0,
-113, 0, 0, 0, 0, 0, 0, 1,144, 0, 0, 0,162, 0, 0, 0,112, 0, 0, 0,114, 0, 0, 0, 0, 0, 0, 1, 14, 0, 0, 0,
-178, 0, 0, 0,174, 0, 0, 0,161, 0, 0, 0, 0, 0, 0, 1,174, 0, 0, 0,179, 0, 0, 0,112, 0, 0, 0,162, 0, 0, 0,
- 0, 0, 0, 1,108, 0, 0, 0,159, 0, 0, 0, 66, 0, 0, 0,110, 0, 0, 0, 0, 0, 0, 1, 66, 0, 0, 0,160, 0, 0, 0,
-109, 0, 0, 0,111, 0, 0, 0, 0, 0, 0, 1,110, 0, 0, 0, 66, 0, 0, 0,175, 0, 0, 0,180, 0, 0, 0, 0, 0, 0, 1,
-175, 0, 0, 0, 66, 0, 0, 0,111, 0, 0, 0,181, 0, 0, 0, 0, 0, 0, 1,174, 0, 0, 0,178, 0, 0, 0,180, 0, 0, 0,
-175, 0, 0, 0, 0, 0, 0, 1,181, 0, 0, 0,179, 0, 0, 0,174, 0, 0, 0,175, 0, 0, 0, 0, 0, 0, 1,132, 0, 0, 0,
-134, 0, 0, 0,173, 0, 0, 0,171, 0, 0, 0, 0, 0, 0, 1,173, 0, 0, 0,134, 0, 0, 0,133, 0, 0, 0,172, 0, 0, 0,
- 0, 0, 0, 1,130, 0, 0, 0,132, 0, 0, 0,171, 0, 0, 0,169, 0, 0, 0, 0, 0, 0, 1,172, 0, 0, 0,133, 0, 0, 0,
-131, 0, 0, 0,170, 0, 0, 0, 0, 0, 0, 1,128, 0, 0, 0,130, 0, 0, 0,169, 0, 0, 0,167, 0, 0, 0, 0, 0, 0, 1,
-170, 0, 0, 0,131, 0, 0, 0,129, 0, 0, 0,168, 0, 0, 0, 0, 0, 0, 1,163, 0, 0, 0,184, 0, 0, 0,182, 0, 0, 0,
-165, 0, 0, 0, 0, 0, 0, 1,183, 0, 0, 0,185, 0, 0, 0,164, 0, 0, 0,166, 0, 0, 0, 0, 0, 0, 1,128, 0, 0, 0,
-167, 0, 0, 0,165, 0, 0, 0,182, 0, 0, 0, 0, 0, 0, 1,166, 0, 0, 0,168, 0, 0, 0,129, 0, 0, 0,183, 0, 0, 0,
- 0, 0, 0, 1,141, 0, 0, 0,187, 0, 0, 0,186, 0, 0, 0,184, 0, 0, 0, 0, 0, 0, 1,186, 0, 0, 0,187, 0, 0, 0,
-142, 0, 0, 0,185, 0, 0, 0, 0, 0, 0, 1,182, 0, 0, 0,184, 0, 0, 0,186, 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, 1,
-186, 0, 0, 0,185, 0, 0, 0,183, 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, 1,127, 0, 0, 0,128, 0, 0, 0,182, 0, 0, 0,
- 67, 0, 0, 0, 0, 0, 0, 1,183, 0, 0, 0,129, 0, 0, 0,127, 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, 1,139, 0, 0, 0,
-190, 0, 0, 0,188, 0, 0, 0,141, 0, 0, 0, 0, 0, 0, 1,189, 0, 0, 0,191, 0, 0, 0,140, 0, 0, 0,142, 0, 0, 0,
- 0, 0, 0, 1,137, 0, 0, 0,192, 0, 0, 0,190, 0, 0, 0,139, 0, 0, 0, 0, 0, 0, 1,191, 0, 0, 0,193, 0, 0, 0,
-138, 0, 0, 0,140, 0, 0, 0, 0, 0, 0, 1,136, 0, 0, 0,194, 0, 0, 0,192, 0, 0, 0,137, 0, 0, 0, 0, 0, 0, 1,
-193, 0, 0, 0,195, 0, 0, 0,136, 0, 0, 0,138, 0, 0, 0, 0, 0, 0, 1,135, 0, 0, 0, 69, 0, 0, 0,194, 0, 0, 0,
-136, 0, 0, 0, 0, 0, 0, 1,195, 0, 0, 0, 69, 0, 0, 0,135, 0, 0, 0,136, 0, 0, 0, 0, 0, 0, 1,187, 0, 0, 0,
-141, 0, 0, 0,188, 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 1,189, 0, 0, 0,142, 0, 0, 0,187, 0, 0, 0, 68, 0, 0, 0,
- 0, 0, 0, 1, 68, 0, 0, 0,188, 0, 0, 0,203, 0, 0, 0,205, 0, 0, 0, 0, 0, 0, 1,204, 0, 0, 0,189, 0, 0, 0,
- 68, 0, 0, 0,205, 0, 0, 0, 0, 0, 0, 1, 69, 0, 0, 0,196, 0, 0, 0,197, 0, 0, 0,194, 0, 0, 0, 0, 0, 0, 1,
-198, 0, 0, 0,196, 0, 0, 0, 69, 0, 0, 0,195, 0, 0, 0, 0, 0, 0, 1,194, 0, 0, 0,197, 0, 0, 0,199, 0, 0, 0,
-192, 0, 0, 0, 0, 0, 0, 1,200, 0, 0, 0,198, 0, 0, 0,195, 0, 0, 0,193, 0, 0, 0, 0, 0, 0, 1,192, 0, 0, 0,
-199, 0, 0, 0,201, 0, 0, 0,190, 0, 0, 0, 0, 0, 0, 1,202, 0, 0, 0,200, 0, 0, 0,193, 0, 0, 0,191, 0, 0, 0,
- 0, 0, 0, 1,190, 0, 0, 0,201, 0, 0, 0,203, 0, 0, 0,188, 0, 0, 0, 0, 0, 0, 1,204, 0, 0, 0,202, 0, 0, 0,
-191, 0, 0, 0,189, 0, 0, 0, 0, 0, 0, 1,196, 0, 0, 0,201, 0, 0, 0,199, 0, 0, 0,197, 0, 0, 0, 0, 0, 0, 1,
-200, 0, 0, 0,202, 0, 0, 0,196, 0, 0, 0,198, 0, 0, 0, 0, 0, 0, 1,196, 0, 0, 0,205, 0, 0, 0,203, 0, 0, 0,
-201, 0, 0, 0, 0, 0, 0, 1,204, 0, 0, 0,205, 0, 0, 0,196, 0, 0, 0,202, 0, 0, 0, 0, 0, 0, 1,136, 0, 0, 0,
-137, 0, 0, 0,161, 0, 0, 0,174, 0, 0, 0, 0, 0, 0, 1,162, 0, 0, 0,138, 0, 0, 0,136, 0, 0, 0,174, 0, 0, 0,
- 0, 0, 0, 1,137, 0, 0, 0,139, 0, 0, 0,208, 0, 0, 0,161, 0, 0, 0, 0, 0, 0, 1,209, 0, 0, 0,140, 0, 0, 0,
-138, 0, 0, 0,162, 0, 0, 0, 0, 0, 0, 1,139, 0, 0, 0,141, 0, 0, 0,210, 0, 0, 0,208, 0, 0, 0, 0, 0, 0, 1,
-211, 0, 0, 0,142, 0, 0, 0,140, 0, 0, 0,209, 0, 0, 0, 0, 0, 0, 1,141, 0, 0, 0,184, 0, 0, 0,163, 0, 0, 0,
-210, 0, 0, 0, 0, 0, 0, 1,164, 0, 0, 0,185, 0, 0, 0,142, 0, 0, 0,211, 0, 0, 0, 0, 0, 0, 1, 79, 0, 0, 0,
-206, 0, 0, 0,210, 0, 0, 0,163, 0, 0, 0, 0, 0, 0, 1,211, 0, 0, 0,207, 0, 0, 0, 80, 0, 0, 0,164, 0, 0, 0,
- 0, 0, 0, 1,206, 0, 0, 0,212, 0, 0, 0,208, 0, 0, 0,210, 0, 0, 0, 0, 0, 0, 1,209, 0, 0, 0,213, 0, 0, 0,
-207, 0, 0, 0,211, 0, 0, 0, 0, 0, 0, 1, 77, 0, 0, 0,161, 0, 0, 0,208, 0, 0, 0,212, 0, 0, 0, 0, 0, 0, 1,
-209, 0, 0, 0,162, 0, 0, 0, 78, 0, 0, 0,213, 0, 0, 0, 0, 0, 0, 1,128, 0, 0, 0,127, 0, 0, 0, 70, 0, 0, 0,
-219, 0, 0, 0, 0, 0, 0, 1, 70, 0, 0, 0,127, 0, 0, 0,129, 0, 0, 0,220, 0, 0, 0, 0, 0, 0, 1,130, 0, 0, 0,
-128, 0, 0, 0,219, 0, 0, 0,217, 0, 0, 0, 0, 0, 0, 1,220, 0, 0, 0,129, 0, 0, 0,131, 0, 0, 0,218, 0, 0, 0,
- 0, 0, 0, 1,132, 0, 0, 0,130, 0, 0, 0,217, 0, 0, 0,215, 0, 0, 0, 0, 0, 0, 1,218, 0, 0, 0,131, 0, 0, 0,
-133, 0, 0, 0,216, 0, 0, 0, 0, 0, 0, 1,134, 0, 0, 0,132, 0, 0, 0,215, 0, 0, 0,214, 0, 0, 0, 0, 0, 0, 1,
-216, 0, 0, 0,133, 0, 0, 0,134, 0, 0, 0,214, 0, 0, 0, 0, 0, 0, 1,214, 0, 0, 0,215, 0, 0, 0,226, 0, 0, 0,
-228, 0, 0, 0, 0, 0, 0, 1,227, 0, 0, 0,216, 0, 0, 0,214, 0, 0, 0,228, 0, 0, 0, 0, 0, 0, 1,215, 0, 0, 0,
-217, 0, 0, 0,224, 0, 0, 0,226, 0, 0, 0, 0, 0, 0, 1,225, 0, 0, 0,218, 0, 0, 0,216, 0, 0, 0,227, 0, 0, 0,
- 0, 0, 0, 1,217, 0, 0, 0,219, 0, 0, 0,222, 0, 0, 0,224, 0, 0, 0, 0, 0, 0, 1,223, 0, 0, 0,220, 0, 0, 0,
-218, 0, 0, 0,225, 0, 0, 0, 0, 0, 0, 1,219, 0, 0, 0, 70, 0, 0, 0,221, 0, 0, 0,222, 0, 0, 0, 0, 0, 0, 1,
-221, 0, 0, 0, 70, 0, 0, 0,220, 0, 0, 0,223, 0, 0, 0, 0, 0, 0, 1,221, 0, 0, 0,228, 0, 0, 0,226, 0, 0, 0,
-222, 0, 0, 0, 0, 0, 0, 1,227, 0, 0, 0,228, 0, 0, 0,221, 0, 0, 0,223, 0, 0, 0, 0, 0, 0, 1,222, 0, 0, 0,
-226, 0, 0, 0,224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,225, 0, 0, 0,227, 0, 0, 0,223, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1,180, 0, 0, 0,178, 0, 0, 0,231, 0, 0, 0,229, 0, 0, 0, 0, 0, 0, 1,232, 0, 0, 0,179, 0, 0, 0,
-181, 0, 0, 0,230, 0, 0, 0, 0, 0, 0, 1,110, 0, 0, 0,180, 0, 0, 0,229, 0, 0, 0,251, 0, 0, 0, 0, 0, 0, 1,
-230, 0, 0, 0,181, 0, 0, 0,111, 0, 0, 0,252, 0, 0, 0, 0, 0, 0, 1,108, 0, 0, 0,110, 0, 0, 0,251, 0, 0, 0,
-253, 0, 0, 0, 0, 0, 0, 1,252, 0, 0, 0,111, 0, 0, 0,109, 0, 0, 0,254, 0, 0, 0, 0, 0, 0, 1,178, 0, 0, 0,
- 14, 0, 0, 0,249, 0, 0, 0,231, 0, 0, 0, 0, 0, 0, 1,250, 0, 0, 0,112, 0, 0, 0,179, 0, 0, 0,232, 0, 0, 0,
- 0, 0, 0, 1, 14, 0, 0, 0,113, 0, 0, 0,247, 0, 0, 0,249, 0, 0, 0, 0, 0, 0, 1,248, 0, 0, 0,114, 0, 0, 0,
-112, 0, 0, 0,250, 0, 0, 0, 0, 0, 0, 1,113, 0, 0, 0,115, 0, 0, 0,245, 0, 0, 0,247, 0, 0, 0, 0, 0, 0, 1,
-246, 0, 0, 0,116, 0, 0, 0,114, 0, 0, 0,248, 0, 0, 0, 0, 0, 0, 1,115, 0, 0, 0,117, 0, 0, 0,243, 0, 0, 0,
-245, 0, 0, 0, 0, 0, 0, 1,244, 0, 0, 0,118, 0, 0, 0,116, 0, 0, 0,246, 0, 0, 0, 0, 0, 0, 1,117, 0, 0, 0,
-119, 0, 0, 0,241, 0, 0, 0,243, 0, 0, 0, 0, 0, 0, 1,242, 0, 0, 0,120, 0, 0, 0,118, 0, 0, 0,244, 0, 0, 0,
- 0, 0, 0, 1,119, 0, 0, 0,121, 0, 0, 0,239, 0, 0, 0,241, 0, 0, 0, 0, 0, 0, 1,240, 0, 0, 0,122, 0, 0, 0,
-120, 0, 0, 0,242, 0, 0, 0, 0, 0, 0, 1,121, 0, 0, 0,123, 0, 0, 0,237, 0, 0, 0,239, 0, 0, 0, 0, 0, 0, 1,
-238, 0, 0, 0,124, 0, 0, 0,122, 0, 0, 0,240, 0, 0, 0, 0, 0, 0, 1,123, 0, 0, 0,176, 0, 0, 0,233, 0, 0, 0,
-237, 0, 0, 0, 0, 0, 0, 1,234, 0, 0, 0,177, 0, 0, 0,124, 0, 0, 0,238, 0, 0, 0, 0, 0, 0, 1,176, 0, 0, 0,
-125, 0, 0, 0,235, 0, 0, 0,233, 0, 0, 0, 0, 0, 0, 1,236, 0, 0, 0,126, 0, 0, 0,177, 0, 0, 0,234, 0, 0, 0,
- 0, 0, 0, 1,125, 0, 0, 0,108, 0, 0, 0,253, 0, 0, 0,235, 0, 0, 0, 0, 0, 0, 1,254, 0, 0, 0,109, 0, 0, 0,
-126, 0, 0, 0,236, 0, 0, 0, 0, 0, 0, 1,235, 0, 0, 0,253, 0, 0, 0,255, 0, 0, 0, 17, 1, 0, 0, 0, 0, 0, 1,
- 0, 1, 0, 0,254, 0, 0, 0,236, 0, 0, 0, 18, 1, 0, 0, 0, 0, 0, 1,233, 0, 0, 0,235, 0, 0, 0, 17, 1, 0, 0,
- 19, 1, 0, 0, 0, 0, 0, 1, 18, 1, 0, 0,236, 0, 0, 0,234, 0, 0, 0, 20, 1, 0, 0, 0, 0, 0, 1,237, 0, 0, 0,
-233, 0, 0, 0, 19, 1, 0, 0, 15, 1, 0, 0, 0, 0, 0, 1, 20, 1, 0, 0,234, 0, 0, 0,238, 0, 0, 0, 16, 1, 0, 0,
- 0, 0, 0, 1,239, 0, 0, 0,237, 0, 0, 0, 15, 1, 0, 0, 13, 1, 0, 0, 0, 0, 0, 1, 16, 1, 0, 0,238, 0, 0, 0,
-240, 0, 0, 0, 14, 1, 0, 0, 0, 0, 0, 1,241, 0, 0, 0,239, 0, 0, 0, 13, 1, 0, 0, 11, 1, 0, 0, 0, 0, 0, 1,
- 14, 1, 0, 0,240, 0, 0, 0,242, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 1,243, 0, 0, 0,241, 0, 0, 0, 11, 1, 0, 0,
- 9, 1, 0, 0, 0, 0, 0, 1, 12, 1, 0, 0,242, 0, 0, 0,244, 0, 0, 0, 10, 1, 0, 0, 0, 0, 0, 1,245, 0, 0, 0,
-243, 0, 0, 0, 9, 1, 0, 0, 7, 1, 0, 0, 0, 0, 0, 1, 10, 1, 0, 0,244, 0, 0, 0,246, 0, 0, 0, 8, 1, 0, 0,
- 0, 0, 0, 1,247, 0, 0, 0,245, 0, 0, 0, 7, 1, 0, 0, 5, 1, 0, 0, 0, 0, 0, 1, 8, 1, 0, 0,246, 0, 0, 0,
-248, 0, 0, 0, 6, 1, 0, 0, 0, 0, 0, 1,249, 0, 0, 0,247, 0, 0, 0, 5, 1, 0, 0, 3, 1, 0, 0, 0, 0, 0, 1,
- 6, 1, 0, 0,248, 0, 0, 0,250, 0, 0, 0, 4, 1, 0, 0, 0, 0, 0, 1,231, 0, 0, 0,249, 0, 0, 0, 3, 1, 0, 0,
- 21, 1, 0, 0, 0, 0, 0, 1, 4, 1, 0, 0,250, 0, 0, 0,232, 0, 0, 0, 22, 1, 0, 0, 0, 0, 0, 1,253, 0, 0, 0,
-251, 0, 0, 0, 1, 1, 0, 0,255, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0,252, 0, 0, 0,254, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 1,251, 0, 0, 0,229, 0, 0, 0, 23, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 24, 1, 0, 0,230, 0, 0, 0,
-252, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 1,229, 0, 0, 0,231, 0, 0, 0, 21, 1, 0, 0, 23, 1, 0, 0, 0, 0, 0, 1,
- 22, 1, 0, 0,232, 0, 0, 0,230, 0, 0, 0, 24, 1, 0, 0, 0, 0, 0, 1, 65, 0, 0, 0,106, 0, 0, 0, 25, 1, 0, 0,
- 71, 0, 0, 0, 0, 0, 0, 1, 26, 1, 0, 0,107, 0, 0, 0, 65, 0, 0, 0, 71, 0, 0, 0, 0, 0, 0, 1,106, 0, 0, 0,
-104, 0, 0, 0, 27, 1, 0, 0, 25, 1, 0, 0, 0, 0, 0, 1, 28, 1, 0, 0,105, 0, 0, 0,107, 0, 0, 0, 26, 1, 0, 0,
- 0, 0, 0, 1,104, 0, 0, 0,102, 0, 0, 0, 29, 1, 0, 0, 27, 1, 0, 0, 0, 0, 0, 1, 30, 1, 0, 0,103, 0, 0, 0,
-105, 0, 0, 0, 28, 1, 0, 0, 0, 0, 0, 1,102, 0, 0, 0,100, 0, 0, 0, 31, 1, 0, 0, 29, 1, 0, 0, 0, 0, 0, 1,
- 32, 1, 0, 0,101, 0, 0, 0,103, 0, 0, 0, 30, 1, 0, 0, 0, 0, 0, 1,100, 0, 0, 0, 98, 0, 0, 0, 33, 1, 0, 0,
- 31, 1, 0, 0, 0, 0, 0, 1, 34, 1, 0, 0, 99, 0, 0, 0,101, 0, 0, 0, 32, 1, 0, 0, 0, 0, 0, 1, 98, 0, 0, 0,
- 96, 0, 0, 0, 35, 1, 0, 0, 33, 1, 0, 0, 0, 0, 0, 1, 36, 1, 0, 0, 97, 0, 0, 0, 99, 0, 0, 0, 34, 1, 0, 0,
- 0, 0, 0, 1, 96, 0, 0, 0, 94, 0, 0, 0, 37, 1, 0, 0, 35, 1, 0, 0, 0, 0, 0, 1, 38, 1, 0, 0, 95, 0, 0, 0,
- 97, 0, 0, 0, 36, 1, 0, 0, 0, 0, 0, 1, 94, 0, 0, 0, 92, 0, 0, 0, 39, 1, 0, 0, 37, 1, 0, 0, 0, 0, 0, 1,
- 40, 1, 0, 0, 93, 0, 0, 0, 95, 0, 0, 0, 38, 1, 0, 0, 0, 0, 0, 1, 92, 0, 0, 0, 90, 0, 0, 0, 41, 1, 0, 0,
- 39, 1, 0, 0, 0, 0, 0, 1, 42, 1, 0, 0, 91, 0, 0, 0, 93, 0, 0, 0, 40, 1, 0, 0, 0, 0, 0, 1, 49, 1, 0, 0,
- 50, 1, 0, 0, 69, 1, 0, 0, 79, 1, 0, 0, 0, 0, 0, 1, 70, 1, 0, 0, 50, 1, 0, 0, 49, 1, 0, 0, 80, 1, 0, 0,
- 0, 0, 0, 1, 48, 1, 0, 0, 49, 1, 0, 0, 79, 1, 0, 0, 77, 1, 0, 0, 0, 0, 0, 1, 80, 1, 0, 0, 49, 1, 0, 0,
- 48, 1, 0, 0, 78, 1, 0, 0, 0, 0, 0, 1, 47, 1, 0, 0, 48, 1, 0, 0, 77, 1, 0, 0, 81, 1, 0, 0, 0, 0, 0, 1,
- 78, 1, 0, 0, 48, 1, 0, 0, 47, 1, 0, 0, 82, 1, 0, 0, 0, 0, 0, 1, 87, 0, 0, 0, 89, 0, 0, 0, 47, 1, 0, 0,
- 81, 1, 0, 0, 0, 0, 0, 1, 47, 1, 0, 0, 89, 0, 0, 0, 88, 0, 0, 0, 82, 1, 0, 0, 0, 0, 0, 1, 85, 0, 0, 0,
- 87, 0, 0, 0, 81, 1, 0, 0, 75, 1, 0, 0, 0, 0, 0, 1, 82, 1, 0, 0, 88, 0, 0, 0, 86, 0, 0, 0, 76, 1, 0, 0,
- 0, 0, 0, 1, 83, 0, 0, 0, 85, 0, 0, 0, 75, 1, 0, 0, 71, 1, 0, 0, 0, 0, 0, 1, 76, 1, 0, 0, 86, 0, 0, 0,
- 84, 0, 0, 0, 72, 1, 0, 0, 0, 0, 0, 1, 81, 0, 0, 0, 83, 0, 0, 0, 71, 1, 0, 0, 73, 1, 0, 0, 0, 0, 0, 1,
- 72, 1, 0, 0, 84, 0, 0, 0, 82, 0, 0, 0, 74, 1, 0, 0, 0, 0, 0, 1, 71, 1, 0, 0, 77, 1, 0, 0, 79, 1, 0, 0,
- 73, 1, 0, 0, 0, 0, 0, 1, 80, 1, 0, 0, 78, 1, 0, 0, 72, 1, 0, 0, 74, 1, 0, 0, 0, 0, 0, 1, 71, 1, 0, 0,
- 75, 1, 0, 0, 81, 1, 0, 0, 77, 1, 0, 0, 0, 0, 0, 1, 82, 1, 0, 0, 76, 1, 0, 0, 72, 1, 0, 0, 78, 1, 0, 0,
- 0, 0, 0, 1, 67, 1, 0, 0, 73, 1, 0, 0, 79, 1, 0, 0, 69, 1, 0, 0, 0, 0, 0, 1, 80, 1, 0, 0, 74, 1, 0, 0,
- 68, 1, 0, 0, 70, 1, 0, 0, 0, 0, 0, 1, 79, 0, 0, 0, 81, 0, 0, 0, 73, 1, 0, 0, 67, 1, 0, 0, 0, 0, 0, 1,
- 74, 1, 0, 0, 82, 0, 0, 0, 80, 0, 0, 0, 68, 1, 0, 0, 0, 0, 0, 1,206, 0, 0, 0, 83, 1, 0, 0, 85, 1, 0, 0,
-212, 0, 0, 0, 0, 0, 0, 1, 86, 1, 0, 0, 84, 1, 0, 0,207, 0, 0, 0,213, 0, 0, 0, 0, 0, 0, 1, 79, 0, 0, 0,
- 67, 1, 0, 0, 83, 1, 0, 0,206, 0, 0, 0, 0, 0, 0, 1, 84, 1, 0, 0, 68, 1, 0, 0, 80, 0, 0, 0,207, 0, 0, 0,
- 0, 0, 0, 1, 77, 0, 0, 0,212, 0, 0, 0, 85, 1, 0, 0, 87, 1, 0, 0, 0, 0, 0, 1, 86, 1, 0, 0,213, 0, 0, 0,
- 78, 0, 0, 0, 88, 1, 0, 0, 0, 0, 0, 1, 77, 0, 0, 0, 87, 1, 0, 0, 41, 1, 0, 0, 90, 0, 0, 0, 0, 0, 0, 1,
- 42, 1, 0, 0, 88, 1, 0, 0, 78, 0, 0, 0, 91, 0, 0, 0, 0, 0, 0, 1, 75, 0, 0, 0, 65, 1, 0, 0, 93, 1, 0, 0,
- 45, 1, 0, 0, 0, 0, 0, 1, 94, 1, 0, 0, 66, 1, 0, 0, 75, 0, 0, 0, 45, 1, 0, 0, 0, 0, 0, 1, 45, 1, 0, 0,
- 93, 1, 0, 0, 91, 1, 0, 0, 76, 0, 0, 0, 0, 0, 0, 1, 92, 1, 0, 0, 94, 1, 0, 0, 45, 1, 0, 0, 76, 0, 0, 0,
- 0, 0, 0, 1, 76, 0, 0, 0, 91, 1, 0, 0, 89, 1, 0, 0, 46, 1, 0, 0, 0, 0, 0, 1, 90, 1, 0, 0, 92, 1, 0, 0,
- 76, 0, 0, 0, 46, 1, 0, 0, 0, 0, 0, 1, 46, 1, 0, 0, 89, 1, 0, 0, 69, 1, 0, 0, 50, 1, 0, 0, 0, 0, 0, 1,
- 70, 1, 0, 0, 90, 1, 0, 0, 46, 1, 0, 0, 50, 1, 0, 0, 0, 0, 0, 1, 67, 1, 0, 0, 69, 1, 0, 0, 89, 1, 0, 0,
- 83, 1, 0, 0, 0, 0, 0, 1, 90, 1, 0, 0, 70, 1, 0, 0, 68, 1, 0, 0, 84, 1, 0, 0, 0, 0, 0, 1, 37, 1, 0, 0,
- 39, 1, 0, 0, 59, 1, 0, 0, 51, 1, 0, 0, 0, 0, 0, 1, 60, 1, 0, 0, 40, 1, 0, 0, 38, 1, 0, 0, 52, 1, 0, 0,
- 0, 0, 0, 1, 74, 0, 0, 0, 57, 1, 0, 0, 65, 1, 0, 0, 75, 0, 0, 0, 0, 0, 0, 1, 66, 1, 0, 0, 58, 1, 0, 0,
- 74, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 1, 43, 1, 0, 0, 99, 1, 0, 0, 97, 1, 0, 0, 44, 1, 0, 0, 0, 0, 0, 1,
- 98, 1, 0, 0,100, 1, 0, 0, 43, 1, 0, 0, 44, 1, 0, 0, 0, 0, 0, 1, 44, 1, 0, 0, 97, 1, 0, 0, 95, 1, 0, 0,
- 73, 0, 0, 0, 0, 0, 0, 1, 96, 1, 0, 0, 98, 1, 0, 0, 44, 1, 0, 0, 73, 0, 0, 0, 0, 0, 0, 1, 73, 0, 0, 0,
- 95, 1, 0, 0, 57, 1, 0, 0, 74, 0, 0, 0, 0, 0, 0, 1, 58, 1, 0, 0, 96, 1, 0, 0, 73, 0, 0, 0, 74, 0, 0, 0,
- 0, 0, 0, 1, 33, 1, 0, 0, 35, 1, 0, 0,103, 1, 0, 0,105, 1, 0, 0, 0, 0, 0, 1,104, 1, 0, 0, 36, 1, 0, 0,
- 34, 1, 0, 0,106, 1, 0, 0, 0, 0, 0, 1,105, 1, 0, 0,103, 1, 0, 0,109, 1, 0, 0,107, 1, 0, 0, 0, 0, 0, 1,
-110, 1, 0, 0,104, 1, 0, 0,106, 1, 0, 0,108, 1, 0, 0, 0, 0, 0, 1,107, 1, 0, 0,109, 1, 0, 0,111, 1, 0, 0,
-113, 1, 0, 0, 0, 0, 0, 1,112, 1, 0, 0,110, 1, 0, 0,108, 1, 0, 0,114, 1, 0, 0, 0, 0, 0, 1,113, 1, 0, 0,
-111, 1, 0, 0,117, 1, 0, 0,115, 1, 0, 0, 0, 0, 0, 1,118, 1, 0, 0,112, 1, 0, 0,114, 1, 0, 0,116, 1, 0, 0,
- 0, 0, 0, 1, 55, 1, 0, 0,119, 1, 0, 0,115, 1, 0, 0,117, 1, 0, 0, 0, 0, 0, 1,116, 1, 0, 0,120, 1, 0, 0,
- 56, 1, 0, 0,118, 1, 0, 0, 0, 0, 0, 1, 57, 1, 0, 0, 95, 1, 0, 0,115, 1, 0, 0,119, 1, 0, 0, 0, 0, 0, 1,
-116, 1, 0, 0, 96, 1, 0, 0, 58, 1, 0, 0,120, 1, 0, 0, 0, 0, 0, 1, 95, 1, 0, 0, 97, 1, 0, 0,113, 1, 0, 0,
-115, 1, 0, 0, 0, 0, 0, 1,114, 1, 0, 0, 98, 1, 0, 0, 96, 1, 0, 0,116, 1, 0, 0, 0, 0, 0, 1, 97, 1, 0, 0,
- 99, 1, 0, 0,107, 1, 0, 0,113, 1, 0, 0, 0, 0, 0, 1,108, 1, 0, 0,100, 1, 0, 0, 98, 1, 0, 0,114, 1, 0, 0,
- 0, 0, 0, 1, 99, 1, 0, 0,101, 1, 0, 0,105, 1, 0, 0,107, 1, 0, 0, 0, 0, 0, 1,106, 1, 0, 0,102, 1, 0, 0,
-100, 1, 0, 0,108, 1, 0, 0, 0, 0, 0, 1, 31, 1, 0, 0, 33, 1, 0, 0,105, 1, 0, 0,101, 1, 0, 0, 0, 0, 0, 1,
-106, 1, 0, 0, 34, 1, 0, 0, 32, 1, 0, 0,102, 1, 0, 0, 0, 0, 0, 1, 72, 0, 0, 0,101, 1, 0, 0, 99, 1, 0, 0,
- 43, 1, 0, 0, 0, 0, 0, 1,100, 1, 0, 0,102, 1, 0, 0, 72, 0, 0, 0, 43, 1, 0, 0, 0, 0, 0, 1, 25, 1, 0, 0,
- 27, 1, 0, 0, 29, 1, 0, 0, 31, 1, 0, 0, 0, 0, 0, 1, 30, 1, 0, 0, 28, 1, 0, 0, 26, 1, 0, 0, 32, 1, 0, 0,
- 0, 0, 0, 1, 25, 1, 0, 0, 31, 1, 0, 0,101, 1, 0, 0, 72, 0, 0, 0, 0, 0, 0, 1,102, 1, 0, 0, 32, 1, 0, 0,
- 26, 1, 0, 0, 72, 0, 0, 0, 0, 0, 0, 1, 71, 0, 0, 0, 25, 1, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
- 72, 0, 0, 0, 26, 1, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 35, 1, 0, 0, 37, 1, 0, 0, 51, 1, 0, 0,
-103, 1, 0, 0, 0, 0, 0, 1, 52, 1, 0, 0, 38, 1, 0, 0, 36, 1, 0, 0,104, 1, 0, 0, 0, 0, 0, 1, 51, 1, 0, 0,
- 53, 1, 0, 0,109, 1, 0, 0,103, 1, 0, 0, 0, 0, 0, 1,110, 1, 0, 0, 54, 1, 0, 0, 52, 1, 0, 0,104, 1, 0, 0,
- 0, 0, 0, 1, 53, 1, 0, 0,123, 1, 0, 0,111, 1, 0, 0,109, 1, 0, 0, 0, 0, 0, 1,112, 1, 0, 0,124, 1, 0, 0,
- 54, 1, 0, 0,110, 1, 0, 0, 0, 0, 0, 1, 55, 1, 0, 0,117, 1, 0, 0,111, 1, 0, 0,123, 1, 0, 0, 0, 0, 0, 1,
-112, 1, 0, 0,118, 1, 0, 0, 56, 1, 0, 0,124, 1, 0, 0, 0, 0, 0, 1, 89, 1, 0, 0, 91, 1, 0, 0,127, 1, 0, 0,
-125, 1, 0, 0, 0, 0, 0, 1,128, 1, 0, 0, 92, 1, 0, 0, 90, 1, 0, 0,126, 1, 0, 0, 0, 0, 0, 1, 59, 1, 0, 0,
-125, 1, 0, 0,127, 1, 0, 0, 61, 1, 0, 0, 0, 0, 0, 1,128, 1, 0, 0,126, 1, 0, 0, 60, 1, 0, 0, 62, 1, 0, 0,
- 0, 0, 0, 1, 39, 1, 0, 0, 41, 1, 0, 0,125, 1, 0, 0, 59, 1, 0, 0, 0, 0, 0, 1,126, 1, 0, 0, 42, 1, 0, 0,
- 40, 1, 0, 0, 60, 1, 0, 0, 0, 0, 0, 1, 41, 1, 0, 0, 85, 1, 0, 0, 83, 1, 0, 0,125, 1, 0, 0, 0, 0, 0, 1,
- 84, 1, 0, 0, 86, 1, 0, 0, 42, 1, 0, 0,126, 1, 0, 0, 0, 0, 0, 1, 83, 1, 0, 0, 89, 1, 0, 0,125, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 1,126, 1, 0, 0, 90, 1, 0, 0, 84, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 41, 1, 0, 0,
- 87, 1, 0, 0, 85, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 86, 1, 0, 0, 88, 1, 0, 0, 42, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 55, 1, 0, 0, 63, 1, 0, 0,121, 1, 0, 0,119, 1, 0, 0, 0, 0, 0, 1,122, 1, 0, 0, 64, 1, 0, 0,
- 56, 1, 0, 0,120, 1, 0, 0, 0, 0, 0, 1, 57, 1, 0, 0,119, 1, 0, 0,121, 1, 0, 0, 65, 1, 0, 0, 0, 0, 0, 1,
-122, 1, 0, 0,120, 1, 0, 0, 58, 1, 0, 0, 66, 1, 0, 0, 0, 0, 0, 1, 61, 1, 0, 0,127, 1, 0, 0,121, 1, 0, 0,
- 63, 1, 0, 0, 0, 0, 0, 1,122, 1, 0, 0,128, 1, 0, 0, 62, 1, 0, 0, 64, 1, 0, 0, 0, 0, 0, 1, 91, 1, 0, 0,
- 93, 1, 0, 0,121, 1, 0, 0,127, 1, 0, 0, 0, 0, 0, 1,122, 1, 0, 0, 94, 1, 0, 0, 92, 1, 0, 0,128, 1, 0, 0,
- 0, 0, 0, 1, 65, 1, 0, 0,121, 1, 0, 0, 93, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 94, 1, 0, 0,122, 1, 0, 0,
- 66, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,141, 1, 0, 0,129, 1, 0, 0,155, 1, 0, 0,143, 1, 0, 0, 0, 0, 0, 1,
-156, 1, 0, 0,130, 1, 0, 0,142, 1, 0, 0,144, 1, 0, 0, 0, 0, 0, 1,141, 1, 0, 0,143, 1, 0, 0,145, 1, 0, 0,
-139, 1, 0, 0, 0, 0, 0, 1,146, 1, 0, 0,144, 1, 0, 0,142, 1, 0, 0,140, 1, 0, 0, 0, 0, 0, 1,139, 1, 0, 0,
-145, 1, 0, 0,147, 1, 0, 0,137, 1, 0, 0, 0, 0, 0, 1,148, 1, 0, 0,146, 1, 0, 0,140, 1, 0, 0,138, 1, 0, 0,
- 0, 0, 0, 1,137, 1, 0, 0,147, 1, 0, 0,149, 1, 0, 0,135, 1, 0, 0, 0, 0, 0, 1,150, 1, 0, 0,148, 1, 0, 0,
-138, 1, 0, 0,136, 1, 0, 0, 0, 0, 0, 1,135, 1, 0, 0,149, 1, 0, 0,151, 1, 0, 0,133, 1, 0, 0, 0, 0, 0, 1,
-152, 1, 0, 0,150, 1, 0, 0,136, 1, 0, 0,134, 1, 0, 0, 0, 0, 0, 1,133, 1, 0, 0,151, 1, 0, 0,153, 1, 0, 0,
-131, 1, 0, 0, 0, 0, 0, 1,154, 1, 0, 0,152, 1, 0, 0,134, 1, 0, 0,132, 1, 0, 0, 0, 0, 0, 1,151, 1, 0, 0,
-161, 1, 0, 0,159, 1, 0, 0,153, 1, 0, 0, 0, 0, 0, 1,160, 1, 0, 0,162, 1, 0, 0,152, 1, 0, 0,154, 1, 0, 0,
- 0, 0, 0, 1,149, 1, 0, 0,163, 1, 0, 0,161, 1, 0, 0,151, 1, 0, 0, 0, 0, 0, 1,162, 1, 0, 0,164, 1, 0, 0,
-150, 1, 0, 0,152, 1, 0, 0, 0, 0, 0, 1,147, 1, 0, 0,165, 1, 0, 0,163, 1, 0, 0,149, 1, 0, 0, 0, 0, 0, 1,
-164, 1, 0, 0,166, 1, 0, 0,148, 1, 0, 0,150, 1, 0, 0, 0, 0, 0, 1,145, 1, 0, 0,167, 1, 0, 0,165, 1, 0, 0,
-147, 1, 0, 0, 0, 0, 0, 1,166, 1, 0, 0,168, 1, 0, 0,146, 1, 0, 0,148, 1, 0, 0, 0, 0, 0, 1,143, 1, 0, 0,
-169, 1, 0, 0,167, 1, 0, 0,145, 1, 0, 0, 0, 0, 0, 1,168, 1, 0, 0,170, 1, 0, 0,144, 1, 0, 0,146, 1, 0, 0,
- 0, 0, 0, 1,143, 1, 0, 0,155, 1, 0, 0,157, 1, 0, 0,169, 1, 0, 0, 0, 0, 0, 1,158, 1, 0, 0,156, 1, 0, 0,
-144, 1, 0, 0,170, 1, 0, 0, 0, 0, 0, 1, 59, 1, 0, 0, 61, 1, 0, 0,185, 1, 0, 0,183, 1, 0, 0, 0, 0, 0, 1,
-186, 1, 0, 0, 62, 1, 0, 0, 60, 1, 0, 0,184, 1, 0, 0, 0, 0, 0, 1, 61, 1, 0, 0,131, 1, 0, 0,153, 1, 0, 0,
-185, 1, 0, 0, 0, 0, 0, 1,154, 1, 0, 0,132, 1, 0, 0, 62, 1, 0, 0,186, 1, 0, 0, 0, 0, 0, 1, 51, 1, 0, 0,
- 59, 1, 0, 0,183, 1, 0, 0, 53, 1, 0, 0, 0, 0, 0, 1,184, 1, 0, 0, 60, 1, 0, 0, 52, 1, 0, 0, 54, 1, 0, 0,
- 0, 0, 0, 1,123, 1, 0, 0,171, 1, 0, 0,155, 1, 0, 0,129, 1, 0, 0, 0, 0, 0, 1,156, 1, 0, 0,172, 1, 0, 0,
-124, 1, 0, 0,130, 1, 0, 0, 0, 0, 0, 1,153, 1, 0, 0,159, 1, 0, 0,181, 1, 0, 0,185, 1, 0, 0, 0, 0, 0, 1,
-182, 1, 0, 0,160, 1, 0, 0,154, 1, 0, 0,186, 1, 0, 0, 0, 0, 0, 1,179, 1, 0, 0,187, 1, 0, 0,185, 1, 0, 0,
-181, 1, 0, 0, 0, 0, 0, 1,186, 1, 0, 0,188, 1, 0, 0,180, 1, 0, 0,182, 1, 0, 0, 0, 0, 0, 1,175, 1, 0, 0,
-187, 1, 0, 0,179, 1, 0, 0,177, 1, 0, 0, 0, 0, 0, 1,180, 1, 0, 0,188, 1, 0, 0,176, 1, 0, 0,178, 1, 0, 0,
- 0, 0, 0, 1,173, 1, 0, 0,189, 1, 0, 0,187, 1, 0, 0,175, 1, 0, 0, 0, 0, 0, 1,188, 1, 0, 0,190, 1, 0, 0,
-174, 1, 0, 0,176, 1, 0, 0, 0, 0, 0, 1,171, 1, 0, 0,189, 1, 0, 0,173, 1, 0, 0,191, 1, 0, 0, 0, 0, 0, 1,
-174, 1, 0, 0,190, 1, 0, 0,172, 1, 0, 0,192, 1, 0, 0, 0, 0, 0, 1,155, 1, 0, 0,171, 1, 0, 0,191, 1, 0, 0,
-157, 1, 0, 0, 0, 0, 0, 1,192, 1, 0, 0,172, 1, 0, 0,156, 1, 0, 0,158, 1, 0, 0, 0, 0, 0, 1, 53, 1, 0, 0,
-189, 1, 0, 0,171, 1, 0, 0,123, 1, 0, 0, 0, 0, 0, 1,172, 1, 0, 0,190, 1, 0, 0, 54, 1, 0, 0,124, 1, 0, 0,
- 0, 0, 0, 1, 53, 1, 0, 0,183, 1, 0, 0,187, 1, 0, 0,189, 1, 0, 0, 0, 0, 0, 1,188, 1, 0, 0,184, 1, 0, 0,
- 54, 1, 0, 0,190, 1, 0, 0, 0, 0, 0, 1,183, 1, 0, 0,185, 1, 0, 0,187, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
-188, 1, 0, 0,186, 1, 0, 0,184, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,157, 1, 0, 0,191, 1, 0, 0,193, 1, 0, 0,
-217, 1, 0, 0, 0, 0, 0, 1,194, 1, 0, 0,192, 1, 0, 0,158, 1, 0, 0,218, 1, 0, 0, 0, 0, 0, 1,191, 1, 0, 0,
-173, 1, 0, 0,203, 1, 0, 0,193, 1, 0, 0, 0, 0, 0, 1,204, 1, 0, 0,174, 1, 0, 0,192, 1, 0, 0,194, 1, 0, 0,
- 0, 0, 0, 1,173, 1, 0, 0,175, 1, 0, 0,201, 1, 0, 0,203, 1, 0, 0, 0, 0, 0, 1,202, 1, 0, 0,176, 1, 0, 0,
-174, 1, 0, 0,204, 1, 0, 0, 0, 0, 0, 1,175, 1, 0, 0,177, 1, 0, 0,199, 1, 0, 0,201, 1, 0, 0, 0, 0, 0, 1,
-200, 1, 0, 0,178, 1, 0, 0,176, 1, 0, 0,202, 1, 0, 0, 0, 0, 0, 1,177, 1, 0, 0,179, 1, 0, 0,197, 1, 0, 0,
-199, 1, 0, 0, 0, 0, 0, 1,198, 1, 0, 0,180, 1, 0, 0,178, 1, 0, 0,200, 1, 0, 0, 0, 0, 0, 1,179, 1, 0, 0,
-181, 1, 0, 0,195, 1, 0, 0,197, 1, 0, 0, 0, 0, 0, 1,196, 1, 0, 0,182, 1, 0, 0,180, 1, 0, 0,198, 1, 0, 0,
- 0, 0, 0, 1,181, 1, 0, 0,159, 1, 0, 0,215, 1, 0, 0,195, 1, 0, 0, 0, 0, 0, 1,216, 1, 0, 0,160, 1, 0, 0,
-182, 1, 0, 0,196, 1, 0, 0, 0, 0, 0, 1,169, 1, 0, 0,157, 1, 0, 0,217, 1, 0, 0,205, 1, 0, 0, 0, 0, 0, 1,
-218, 1, 0, 0,158, 1, 0, 0,170, 1, 0, 0,206, 1, 0, 0, 0, 0, 0, 1,167, 1, 0, 0,169, 1, 0, 0,205, 1, 0, 0,
-207, 1, 0, 0, 0, 0, 0, 1,206, 1, 0, 0,170, 1, 0, 0,168, 1, 0, 0,208, 1, 0, 0, 0, 0, 0, 1,165, 1, 0, 0,
-167, 1, 0, 0,207, 1, 0, 0,209, 1, 0, 0, 0, 0, 0, 1,208, 1, 0, 0,168, 1, 0, 0,166, 1, 0, 0,210, 1, 0, 0,
- 0, 0, 0, 1,163, 1, 0, 0,165, 1, 0, 0,209, 1, 0, 0,211, 1, 0, 0, 0, 0, 0, 1,210, 1, 0, 0,166, 1, 0, 0,
-164, 1, 0, 0,212, 1, 0, 0, 0, 0, 0, 1,161, 1, 0, 0,163, 1, 0, 0,211, 1, 0, 0,213, 1, 0, 0, 0, 0, 0, 1,
-212, 1, 0, 0,164, 1, 0, 0,162, 1, 0, 0,214, 1, 0, 0, 0, 0, 0, 1,159, 1, 0, 0,161, 1, 0, 0,213, 1, 0, 0,
-215, 1, 0, 0, 0, 0, 0, 1,214, 1, 0, 0,162, 1, 0, 0,160, 1, 0, 0,216, 1, 0, 0, 0, 0, 0, 1,199, 1, 0, 0,
-197, 1, 0, 0,221, 1, 0, 0,219, 1, 0, 0, 0, 0, 0, 1,222, 1, 0, 0,198, 1, 0, 0,200, 1, 0, 0,220, 1, 0, 0,
- 0, 0, 0, 1,219, 1, 0, 0,221, 1, 0, 0,223, 1, 0, 0,225, 1, 0, 0, 0, 0, 0, 1,224, 1, 0, 0,222, 1, 0, 0,
-220, 1, 0, 0,226, 1, 0, 0, 0, 0, 0, 1,225, 1, 0, 0,223, 1, 0, 0,229, 1, 0, 0,227, 1, 0, 0, 0, 0, 0, 1,
-230, 1, 0, 0,224, 1, 0, 0,226, 1, 0, 0,228, 1, 0, 0, 0, 0, 0, 1,227, 1, 0, 0,229, 1, 0, 0,231, 1, 0, 0,
-233, 1, 0, 0, 0, 0, 0, 1,232, 1, 0, 0,230, 1, 0, 0,228, 1, 0, 0,234, 1, 0, 0, 0, 0, 0, 1,205, 1, 0, 0,
-217, 1, 0, 0,227, 1, 0, 0,233, 1, 0, 0, 0, 0, 0, 1,228, 1, 0, 0,218, 1, 0, 0,206, 1, 0, 0,234, 1, 0, 0,
- 0, 0, 0, 1,193, 1, 0, 0,225, 1, 0, 0,227, 1, 0, 0,217, 1, 0, 0, 0, 0, 0, 1,228, 1, 0, 0,226, 1, 0, 0,
-194, 1, 0, 0,218, 1, 0, 0, 0, 0, 0, 1,193, 1, 0, 0,203, 1, 0, 0,219, 1, 0, 0,225, 1, 0, 0, 0, 0, 0, 1,
-220, 1, 0, 0,204, 1, 0, 0,194, 1, 0, 0,226, 1, 0, 0, 0, 0, 0, 1,199, 1, 0, 0,219, 1, 0, 0,203, 1, 0, 0,
-201, 1, 0, 0, 0, 0, 0, 1,204, 1, 0, 0,220, 1, 0, 0,200, 1, 0, 0,202, 1, 0, 0, 0, 0, 0, 1,195, 1, 0, 0,
-215, 1, 0, 0,221, 1, 0, 0,197, 1, 0, 0, 0, 0, 0, 1,222, 1, 0, 0,216, 1, 0, 0,196, 1, 0, 0,198, 1, 0, 0,
- 0, 0, 0, 1,213, 1, 0, 0,223, 1, 0, 0,221, 1, 0, 0,215, 1, 0, 0, 0, 0, 0, 1,222, 1, 0, 0,224, 1, 0, 0,
-214, 1, 0, 0,216, 1, 0, 0, 0, 0, 0, 1,211, 1, 0, 0,229, 1, 0, 0,223, 1, 0, 0,213, 1, 0, 0, 0, 0, 0, 1,
-224, 1, 0, 0,230, 1, 0, 0,212, 1, 0, 0,214, 1, 0, 0, 0, 0, 0, 1,209, 1, 0, 0,231, 1, 0, 0,229, 1, 0, 0,
-211, 1, 0, 0, 0, 0, 0, 1,230, 1, 0, 0,232, 1, 0, 0,210, 1, 0, 0,212, 1, 0, 0, 0, 0, 0, 1,207, 1, 0, 0,
-233, 1, 0, 0,231, 1, 0, 0,209, 1, 0, 0, 0, 0, 0, 1,232, 1, 0, 0,234, 1, 0, 0,208, 1, 0, 0,210, 1, 0, 0,
- 0, 0, 0, 1,205, 1, 0, 0,233, 1, 0, 0,207, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,208, 1, 0, 0,234, 1, 0, 0,
-206, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,133, 1, 0, 0,131, 1, 0, 0,245, 1, 0, 0,243, 1, 0, 0, 0, 0, 0, 1,
-246, 1, 0, 0,132, 1, 0, 0,134, 1, 0, 0,244, 1, 0, 0, 0, 0, 0, 1,135, 1, 0, 0,133, 1, 0, 0,243, 1, 0, 0,
-241, 1, 0, 0, 0, 0, 0, 1,244, 1, 0, 0,134, 1, 0, 0,136, 1, 0, 0,242, 1, 0, 0, 0, 0, 0, 1,137, 1, 0, 0,
-135, 1, 0, 0,241, 1, 0, 0,239, 1, 0, 0, 0, 0, 0, 1,242, 1, 0, 0,136, 1, 0, 0,138, 1, 0, 0,240, 1, 0, 0,
- 0, 0, 0, 1,139, 1, 0, 0,137, 1, 0, 0,239, 1, 0, 0,237, 1, 0, 0, 0, 0, 0, 1,240, 1, 0, 0,138, 1, 0, 0,
-140, 1, 0, 0,238, 1, 0, 0, 0, 0, 0, 1,141, 1, 0, 0,139, 1, 0, 0,237, 1, 0, 0,235, 1, 0, 0, 0, 0, 0, 1,
-238, 1, 0, 0,140, 1, 0, 0,142, 1, 0, 0,236, 1, 0, 0, 0, 0, 0, 1,129, 1, 0, 0,141, 1, 0, 0,235, 1, 0, 0,
-247, 1, 0, 0, 0, 0, 0, 1,236, 1, 0, 0,142, 1, 0, 0,130, 1, 0, 0,248, 1, 0, 0, 0, 0, 0, 1,235, 1, 0, 0,
-243, 1, 0, 0,245, 1, 0, 0,247, 1, 0, 0, 0, 0, 0, 1,246, 1, 0, 0,244, 1, 0, 0,236, 1, 0, 0,248, 1, 0, 0,
- 0, 0, 0, 1,235, 1, 0, 0,237, 1, 0, 0,241, 1, 0, 0,243, 1, 0, 0, 0, 0, 0, 1,242, 1, 0, 0,238, 1, 0, 0,
-236, 1, 0, 0,244, 1, 0, 0, 0, 0, 0, 1,237, 1, 0, 0,239, 1, 0, 0,241, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
-242, 1, 0, 0,240, 1, 0, 0,238, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 55, 1, 0, 0,123, 1, 0, 0,129, 1, 0, 0,
-247, 1, 0, 0, 0, 0, 0, 1,130, 1, 0, 0,124, 1, 0, 0, 56, 1, 0, 0,248, 1, 0, 0, 0, 0, 0, 1, 55, 1, 0, 0,
-247, 1, 0, 0,245, 1, 0, 0, 63, 1, 0, 0, 0, 0, 0, 1,246, 1, 0, 0,248, 1, 0, 0, 56, 1, 0, 0, 64, 1, 0, 0,
- 0, 0, 0, 1, 61, 1, 0, 0, 63, 1, 0, 0,245, 1, 0, 0,131, 1, 0, 0, 0, 0, 0, 1,246, 1, 0, 0, 64, 1, 0, 0,
- 62, 1, 0, 0,132, 1, 0, 0, 0, 0, 0, 1, 68, 65, 84, 65,240, 85, 0, 0, 40,176,154, 2, 61, 0, 0, 0,244, 1, 0, 0,
- 3,112, 28, 63,185,178,236, 62,224,124, 27, 63,235, 65,232, 62,144, 63, 30, 63,233,195,226, 62,118,152, 32, 63, 37,167,236, 62,
-184, 62, 18, 3, 1, 0, 5, 0, 0, 0,240, 0, 2,232,209, 62,222, 21,226, 62,102,109,215, 62,222,147,231, 62, 28,135,213, 62,
-172, 4,236, 62, 56, 54,205, 62, 22,249,235, 62,184, 62, 18, 3, 61, 0, 5, 0, 0, 0,240, 0,118,152, 32, 63, 37,167,236, 62,
-144, 63, 30, 63,233,195,226, 62,108,235, 33, 63,197,235,220, 62,209,151, 37, 63, 89,161,236, 62,184, 62, 18, 3, 1, 0, 5, 0,
- 0, 0,240, 0, 76,144,202, 62,186, 61,220, 62, 2,232,209, 62,222, 21,226, 62, 56, 54,205, 62, 22,249,235, 62,128, 55,195, 62,
- 70,243,235, 62,184, 62, 18, 3, 61, 0, 5, 0, 0, 0,240, 0,144, 63, 30, 63,233,195,226, 62, 20, 55, 25, 63, 1, 35,223, 62,
-200,178, 25, 63, 77,233,214, 62,108,235, 33, 63,197,235,220, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0,240, 0,146, 1,219, 62,
- 66, 59,214, 62,248,248,219, 62,246,116,222, 62, 2,232,209, 62,222, 21,226, 62, 76,144,202, 62,186, 61,220, 62,184, 62, 18, 3,
- 61, 0, 5, 0, 0, 0,240, 0,224,124, 27, 63,235, 65,232, 62, 87,252, 24, 63, 93,111,230, 62, 20, 55, 25, 63, 1, 35,223, 62,
-144, 63, 30, 63,233,195,226, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0,240, 0,248,248,219, 62,246,116,222, 62,118,110,220, 62,
- 78,193,229, 62,102,109,215, 62,222,147,231, 62, 2,232,209, 62,222, 21,226, 62,184, 62, 18, 3, 61, 0, 5, 0, 0, 0,240, 0,
- 87,252, 24, 63, 93,111,230, 62, 22,195, 22, 63,195, 90,232, 62,191, 91, 20, 63,193, 18,227, 62, 20, 55, 25, 63, 1, 35,223, 62,
-184, 62, 18, 3, 1, 0, 5, 0, 0, 0,240, 0,162,175,229, 62,178,100,226, 62,248,224,224, 62,182,172,231, 62,118,110,220, 62,
- 78,193,229, 62,248,248,219, 62,246,116,222, 62,184, 62, 18, 3, 61, 0, 5, 0, 0, 0,240, 0, 20, 55, 25, 63, 1, 35,223, 62,
-191, 91, 20, 63,193, 18,227, 62,187,165, 17, 63,225, 6,221, 62,200,178, 25, 63, 77,233,214, 62,184, 62, 18, 3, 1, 0, 5, 0,
- 0, 0,240, 0,170, 27,235, 62,214, 88,220, 62,162,175,229, 62,178,100,226, 62,248,248,219, 62,246,116,222, 62,146, 1,219, 62,
- 66, 59,214, 62,184, 62, 18, 3, 61, 0, 5, 0, 0, 0,240, 0,191, 91, 20, 63,193, 18,227, 62,164, 18, 18, 63,173,201,236, 62,
-157,231, 13, 63, 89,161,236, 62,187,165, 17, 63,225, 6,221, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0,240, 0,232,151,242, 62,
- 70,243,235, 62,216, 65,234, 62,158, 27,236, 62,162,175,229, 62,178,100,226, 62,170, 27,235, 62,214, 88,220, 62,184, 62, 18, 3,
- 61, 0, 5, 0, 0, 0,240, 0, 22,195, 22, 63,195, 90,232, 62, 11,202, 21, 63, 1,189,236, 62,164, 18, 18, 63,173,201,236, 62,
-191, 91, 20, 63,193, 18,227, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0,240, 0,216, 65,234, 62,158, 27,236, 62, 12,211,226, 62,
-246, 14,236, 62,248,224,224, 62,182,172,231, 62,162,175,229, 62,178,100,226, 62,184, 62, 18, 3, 61, 0, 5, 0, 0, 0,240, 0,
- 11,202, 21, 63, 1,189,236, 62,215,202, 22, 63,237,124,241, 62,125,105, 20, 63, 1, 71,246, 62,164, 18, 18, 63,173,201,236, 62,
-184, 62, 18, 3, 1, 0, 5, 0, 0, 0,240, 0, 42,148,229, 62,246,152,245, 62,112,209,224, 62,226,206,240, 62, 12,211,226, 62,
-246, 14,236, 62,216, 65,234, 62,158, 27,236, 62,184, 62, 18, 3, 61, 0, 5, 0, 0, 0,240, 0,164, 18, 18, 63,173,201,236, 62,
-125,105, 20, 63, 1, 71,246, 62, 44,173, 17, 63,231,149,252, 62,157,231, 13, 63, 89,161,236, 62,184, 62, 18, 3, 1, 0, 5, 0,
- 0, 0,240, 0,206, 12,235, 62,218,231,251, 62, 42,148,229, 62,246,152,245, 62,216, 65,234, 62,158, 27,236, 62,232,151,242, 62,
- 70,243,235, 62,184, 62, 18, 3, 61, 0, 5, 0, 0, 0,240, 0,125,105, 20, 63, 1, 71,246, 62, 37, 59, 25, 63, 49, 73,250, 62,
-108,178, 25, 63,218,108, 1, 63, 44,173, 17, 63,231,149,252, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0,240, 0, 76, 2,219, 62,
-213, 21, 1, 63,216,240,219, 62, 38,155,249, 62, 42,148,229, 62,246,152,245, 62,206, 12,235, 62,218,231,251, 62,184, 62, 18, 3,
- 61, 0, 5, 0, 0, 0,240, 0,215,202, 22, 63,237,124,241, 62,195, 1, 25, 63,169,102,243, 62, 37, 59, 25, 63, 49, 73,250, 62,
-125,105, 20, 63, 1, 71,246, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0,240, 0,216,240,219, 62, 38,155,249, 62,156, 99,220, 62,
-154,184,242, 62,112,209,224, 62,226,206,240, 62, 42,148,229, 62,246,152,245, 62,184, 62, 18, 3, 61, 0, 5, 0, 0, 0,240, 0,
-195, 1, 25, 63,169,102,243, 62,176,125, 27, 63,149,145,241, 62,167, 74, 30, 63, 3,153,246, 62, 37, 59, 25, 63, 49, 73,250, 62,
-184, 62, 18, 3, 1, 0, 5, 0, 0, 0,240, 0,212,209,209, 62,246,234,245, 62,192,107,215, 62,138,227,240, 62,156, 99,220, 62,
-154,184,242, 62,216,240,219, 62, 38,155,249, 62,184, 62, 18, 3, 61, 0, 5, 0, 0, 0,240, 0, 37, 59, 25, 63, 49, 73,250, 62,
-167, 74, 30, 63, 3,153,246, 62,204,230, 33, 63,107,232,252, 62,108,178, 25, 63,218,108, 1, 63,184, 62, 18, 3, 1, 0, 5, 0,
- 0, 0,240, 0,132,153,202, 62, 94, 58,252, 62,212,209,209, 62,246,234,245, 62,216,240,219, 62, 38,155,249, 62, 76, 2,219, 62,
-213, 21, 1, 63,184, 62, 18, 3, 61, 0, 5, 0, 0, 0,240, 0,167, 74, 30, 63, 3,153,246, 62,118,152, 32, 63, 37,167,236, 62,
-209,151, 37, 63, 89,161,236, 62,204,230, 33, 63,107,232,252, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0,240, 0,128, 55,195, 62,
- 70,243,235, 62, 56, 54,205, 62, 22,249,235, 62,212,209,209, 62,246,234,245, 62,132,153,202, 62, 94, 58,252, 62,184, 62, 18, 3,
- 61, 0, 5, 0, 0, 0,240, 0,176,125, 27, 63,149,145,241, 62, 3,112, 28, 63,185,178,236, 62,118,152, 32, 63, 37,167,236, 62,
-167, 74, 30, 63, 3,153,246, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0,240, 0, 56, 54,205, 62, 22,249,235, 62, 28,135,213, 62,
-172, 4,236, 62,192,107,215, 62,138,227,240, 62,212,209,209, 62,246,234,245, 62,184, 62, 18, 3, 61, 0, 5, 0, 0, 0,240, 0,
- 3,112, 28, 63,185,178,236, 62,176,125, 27, 63,149,145,241, 62, 42, 39, 27, 63, 57, 1,241, 62,140,249, 27, 63,115,186,236, 62,
-184, 62, 18, 3, 1, 0, 5, 0, 0, 0,240, 0,206, 24,216, 62, 46, 83,240, 62,192,107,215, 62,138,227,240, 62, 28,135,213, 62,
-172, 4,236, 62, 8,116,214, 62,102, 12,236, 62,184, 62, 18, 3, 61, 0, 5, 0, 0, 0,240, 0,176,125, 27, 63,149,145,241, 62,
-195, 1, 25, 63,169,102,243, 62, 6,248, 24, 63,185, 91,242, 62, 42, 39, 27, 63, 57, 1,241, 62,184, 62, 18, 3, 1, 0, 5, 0,
- 0, 0,240, 0, 22,119,220, 62,174,173,241, 62,156, 99,220, 62,154,184,242, 62,192,107,215, 62,138,227,240, 62,206, 24,216, 62,
- 46, 83,240, 62,184, 62, 18, 3, 61, 0, 5, 0, 0, 0,240, 0,195, 1, 25, 63,169,102,243, 62,215,202, 22, 63,237,124,241, 62,
-157, 38, 23, 63,225,173,240, 62, 6,248, 24, 63,185, 91,242, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0,240, 0,234, 25,224, 62,
-214,255,239, 62,112,209,224, 62,226,206,240, 62,156, 99,220, 62,154,184,242, 62, 22,119,220, 62,174,173,241, 62,184, 62, 18, 3,
- 61, 0, 5, 0, 0, 0,240, 0,215,202, 22, 63,237,124,241, 62, 11,202, 21, 63, 1,189,236, 62, 13, 89, 22, 63,247,196,236, 62,
-157, 38, 23, 63,225,173,240, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0,240, 0, 8,181,225, 62,234, 22,236, 62, 12,211,226, 62,
-246, 14,236, 62,112,209,224, 62,226,206,240, 62,234, 25,224, 62,214,255,239, 62,184, 62, 18, 3, 61, 0, 5, 0, 0, 0,240, 0,
- 11,202, 21, 63, 1,189,236, 62, 22,195, 22, 63,195, 90,232, 62, 88, 33, 23, 63, 69, 47,233, 62, 13, 89, 22, 63,247,196,236, 62,
-184, 62, 18, 3, 1, 0, 5, 0, 0, 0,240, 0,112, 36,224, 62, 58,129,232, 62,248,224,224, 62,182,172,231, 62, 12,211,226, 62,
-246, 14,236, 62, 8,181,225, 62,234, 22,236, 62,184, 62, 18, 3, 61, 0, 5, 0, 0, 0,240, 0, 22,195, 22, 63,195, 90,232, 62,
- 87,252, 24, 63, 93,111,230, 62,100,243, 24, 63, 5,123,231, 62, 88, 33, 23, 63, 69, 47,233, 62,184, 62, 18, 3, 1, 0, 5, 0,
- 0, 0,240, 0, 90,128,220, 62,248,204,230, 62,118,110,220, 62, 78,193,229, 62,248,224,224, 62,182,172,231, 62,112, 36,224, 62,
- 58,129,232, 62,184, 62, 18, 3, 61, 0, 5, 0, 0, 0,240, 0, 87,252, 24, 63, 93,111,230, 62,224,124, 27, 63,235, 65,232, 62,
-169, 37, 27, 63, 35,211,232, 62,100,243, 24, 63, 5,123,231, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0,240, 0,206, 27,216, 62,
- 22, 37,232, 62,102,109,215, 62,222,147,231, 62,118,110,220, 62, 78,193,229, 62, 90,128,220, 62,248,204,230, 62,184, 62, 18, 3,
- 61, 0, 5, 0, 0, 0,240, 0,224,124, 27, 63,235, 65,232, 62, 3,112, 28, 63,185,178,236, 62,140,249, 27, 63,115,186,236, 62,
-169, 37, 27, 63, 35,211,232, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0,240, 0, 8,116,214, 62,102, 12,236, 62, 28,135,213, 62,
-172, 4,236, 62,102,109,215, 62,222,147,231, 62,206, 27,216, 62, 22, 37,232, 62,184, 62, 18, 3, 61, 0, 5, 0, 0, 0,240, 0,
-138,242, 24, 63, 21,194,236, 62,169, 37, 27, 63, 35,211,232, 62,140,249, 27, 63,115,186,236, 62, 0, 0,128, 63, 0, 0,128, 63,
-184, 62, 18, 3, 1, 0, 5, 0, 0, 0,112, 0, 8,116,214, 62,102, 12,236, 62,206, 27,216, 62, 22, 37,232, 62, 16,130,220, 62,
- 6, 20,236, 62, 0, 0,128, 63, 0, 0,128, 63,184, 62, 18, 3, 61, 0, 5, 0, 0, 0,112, 0,100,243, 24, 63, 5,123,231, 62,
-169, 37, 27, 63, 35,211,232, 62,138,242, 24, 63, 21,194,236, 62, 0, 0,128, 63, 0, 0,128, 63,184, 62, 18, 3, 1, 0, 5, 0,
- 0, 0,112, 0, 16,130,220, 62, 6, 20,236, 62,206, 27,216, 62, 22, 37,232, 62, 90,128,220, 62,248,204,230, 62, 0, 0,128, 63,
- 0, 0,128, 63,184, 62, 18, 3, 61, 0, 5, 0, 0, 0,112, 0,138,242, 24, 63, 21,194,236, 62, 88, 33, 23, 63, 69, 47,233, 62,
-100,243, 24, 63, 5,123,231, 62, 0, 0,128, 63, 0, 0,128, 63,184, 62, 18, 3, 1, 0, 5, 0, 0, 0,112, 0, 90,128,220, 62,
-248,204,230, 62,112, 36,224, 62, 58,129,232, 62, 16,130,220, 62, 6, 20,236, 62, 0, 0,128, 63, 0, 0,128, 63,184, 62, 18, 3,
- 61, 0, 5, 0, 0, 0,112, 0,138,242, 24, 63, 21,194,236, 62, 13, 89, 22, 63,247,196,236, 62, 88, 33, 23, 63, 69, 47,233, 62,
- 0, 0,128, 63, 0, 0,128, 63,184, 62, 18, 3, 1, 0, 5, 0, 0, 0,112, 0,112, 36,224, 62, 58,129,232, 62, 8,181,225, 62,
-234, 22,236, 62, 16,130,220, 62, 6, 20,236, 62, 0, 0,128, 63, 0, 0,128, 63,184, 62, 18, 3, 61, 0, 5, 0, 0, 0,112, 0,
-138,242, 24, 63, 21,194,236, 62,157, 38, 23, 63,225,173,240, 62, 13, 89, 22, 63,247,196,236, 62, 0, 0,128, 63, 0, 0,128, 63,
-184, 62, 18, 3, 1, 0, 5, 0, 0, 0,112, 0, 8,181,225, 62,234, 22,236, 62,234, 25,224, 62,214,255,239, 62, 16,130,220, 62,
- 6, 20,236, 62, 0, 0,128, 63, 0, 0,128, 63,184, 62, 18, 3, 61, 0, 5, 0, 0, 0,112, 0,138,242, 24, 63, 21,194,236, 62,
- 6,248, 24, 63,185, 91,242, 62,157, 38, 23, 63,225,173,240, 62, 0, 0,128, 63, 0, 0,128, 63,184, 62, 18, 3, 1, 0, 5, 0,
- 0, 0,112, 0,234, 25,224, 62,214,255,239, 62, 22,119,220, 62,174,173,241, 62, 16,130,220, 62, 6, 20,236, 62, 0, 0,128, 63,
- 0, 0,128, 63,184, 62, 18, 3, 61, 0, 5, 0, 0, 0,112, 0,138,242, 24, 63, 21,194,236, 62, 42, 39, 27, 63, 57, 1,241, 62,
- 6,248, 24, 63,185, 91,242, 62, 0, 0,128, 63, 0, 0,128, 63,184, 62, 18, 3, 1, 0, 5, 0, 0, 0,112, 0, 22,119,220, 62,
-174,173,241, 62,206, 24,216, 62, 46, 83,240, 62, 16,130,220, 62, 6, 20,236, 62, 0, 0,128, 63, 0, 0,128, 63,184, 62, 18, 3,
- 61, 0, 5, 0, 0, 0,112, 0,138,242, 24, 63, 21,194,236, 62,140,249, 27, 63,115,186,236, 62, 42, 39, 27, 63, 57, 1,241, 62,
- 0, 0,128, 63, 0, 0,128, 63,184, 62, 18, 3, 1, 0, 5, 0, 0, 0,112, 0,206, 24,216, 62, 46, 83,240, 62, 8,116,214, 62,
-102, 12,236, 62, 16,130,220, 62, 6, 20,236, 62, 0, 0,128, 63, 0, 0,128, 63,184, 62, 18, 3, 61, 0, 5, 0, 0, 0,112, 0,
-174,254, 16, 63, 94, 45, 34, 62, 79,190, 13, 63,160,193, 46, 62,220,199, 3, 63, 89,219, 24, 62,219,199, 3, 63, 18, 28,229, 61,
-184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 16, 0,220,199, 3, 63, 89,219, 24, 62, 14,150,243, 62,204, 79, 47, 62,140,248,236, 62,
-182,202, 34, 62,219,199, 3, 63, 18, 28,229, 61,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 64, 0,184,152, 21, 63,182, 47, 53, 62,
-250,104, 16, 63, 16,113, 55, 62, 79,190, 13, 63,160,193, 46, 62,174,254, 16, 63, 94, 45, 34, 62,184, 62, 18, 3, 1, 0, 5, 0,
- 0, 0,128, 0, 14,150,243, 62,204, 79, 47, 62,200, 68,238, 62, 76, 62, 56, 62,183,207,227, 62,250, 75, 54, 62,140,248,236, 62,
-182,202, 34, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0,128, 0,137, 57, 22, 63, 81, 93, 61, 62,206,186, 16, 63, 85,129, 72, 62,
-250,104, 16, 63, 16,113, 55, 62,184,152, 21, 63,182, 47, 53, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,200, 68,238, 62,
- 76, 62, 56, 62,192,187,237, 62,194,118, 73, 62,122,152,226, 62,190,166, 62, 62,183,207,227, 62,250, 75, 54, 62,184, 62, 18, 3,
- 1, 0, 5, 0, 0, 0, 0, 0,250,249, 22, 63,160,251, 88, 62,222, 32, 16, 63, 34,106, 93, 62,206,186, 16, 63, 85,129, 72, 62,
-137, 57, 22, 63, 81, 93, 61, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,192,187,237, 62,194,118, 73, 62, 21, 19,239, 62,
-121,110, 94, 62, 90, 83,225, 62, 21,153, 90, 62,122,152,226, 62,190,166, 62, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,
- 20, 81, 25, 63, 17, 56,132, 62,206,243, 15, 63,182,207,136, 62,222, 32, 16, 63, 34,106, 93, 62,250,249, 22, 63,160,251, 88, 62,
-184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0, 21, 19,239, 62,121,110, 94, 62, 92,193,239, 62,113, 61,137, 62, 54, 42,221, 62,
-209, 25,133, 62, 90, 83,225, 62, 21,153, 90, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,111,239, 27, 63,159, 77,166, 62,
- 91, 94, 37, 63,107,120,187, 62, 66, 21, 30, 63,178,139,200, 62,158,237, 12, 63, 38,241,187, 62,184, 62, 18, 3, 1, 0, 5, 0,
- 0, 0, 0, 0,139,125,211, 62,170,171,200, 62,156, 28,197, 62,166,130,187, 62,115, 21,216, 62, 14,177,166, 62, 15,175,245, 62,
-188, 14,188, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0, 91, 94, 37, 63,107,120,187, 62, 87, 57, 43, 63,222, 58,206, 62,
- 24,163, 39, 63,174, 95,216, 62, 66, 21, 30, 63,178,139,200, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0, 98,194,191, 62,
- 42, 94,216, 62,130,207,184, 62, 42, 27,206, 62,156, 28,197, 62,166,130,187, 62,139,125,211, 62,170,171,200, 62,184, 62, 18, 3,
- 1, 0, 5, 0, 0, 0, 0, 0, 87, 57, 43, 63,222, 58,206, 62, 38,229, 50, 63,169, 32,226, 62,177, 79, 43, 63,202,194,231, 62,
- 24,163, 39, 63,174, 95,216, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0, 60,201,183, 62, 82,218,231, 62,196, 39,168, 62,
-206, 11,226, 62,130,207,184, 62, 42, 27,206, 62, 98,194,191, 62, 42, 94,216, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,
- 38,229, 50, 63,169, 32,226, 62, 62,134, 48, 63, 37,107,249, 62,154,190, 43, 63,192, 0,249, 62,177, 79, 43, 63,202,194,231, 62,
-184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,138,190,182, 62, 35, 49,249, 62,172,229,172, 62,116,127,249, 62,196, 39,168, 62,
-206, 11,226, 62, 60,201,183, 62, 82,218,231, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0, 62,134, 48, 63, 37,107,249, 62,
-238, 88, 46, 63,146,223, 2, 63,123,207, 40, 63,218,175,254, 62,154,190, 43, 63,192, 0,249, 62,184, 62, 18, 3, 1, 0, 5, 0,
- 0, 0, 0, 0, 2,184,188, 62,140, 0,255, 62,173, 87,177, 62,102, 9, 3, 63,172,229,172, 62,116,127,249, 62,138,190,182, 62,
- 35, 49,249, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,238, 88, 46, 63,146,223, 2, 63,220,158, 34, 63,175, 23, 10, 63,
-126, 77, 30, 63,156, 88, 5, 63,123,207, 40, 63,218,175,254, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0, 89, 65,210, 62,
- 56,158, 5, 63,124,109,201, 62, 72,121, 10, 63,173, 87,177, 62,102, 9, 3, 63, 2,184,188, 62,140, 0,255, 62,184, 62, 18, 3,
- 1, 0, 5, 0, 0, 0, 0, 0,220,158, 34, 63,175, 23, 10, 63, 28,105, 26, 63,242,194, 11, 63,244,120, 25, 63, 78,242, 7, 63,
-126, 77, 30, 63,156, 88, 5, 63,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0, 0, 39,220, 62,252, 58, 8, 63,220, 73,218, 62,
-169, 31, 12, 63,124,109,201, 62, 72,121, 10, 63, 89, 65,210, 62, 56,158, 5, 63,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,
- 28,105, 26, 63,242,194, 11, 63,173,244, 22, 63,236,215, 11, 63,202, 47, 22, 63,156, 60, 8, 63,244,120, 25, 63, 78,242, 7, 63,
-184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0, 11,221,226, 62, 90,125, 8, 63,220, 89,225, 62, 77, 42, 12, 63,220, 73,218, 62,
-169, 31, 12, 63, 0, 39,220, 62,252, 58, 8, 63,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,173,244, 22, 63,236,215, 11, 63,
- 67,169, 11, 63, 18,197, 11, 63,106,252, 12, 63,180,173, 3, 63,202, 47, 22, 63,156, 60, 8, 63,184, 62, 18, 3, 1, 0, 5, 0,
- 0, 0, 0, 0, 35,114,245, 62,233,196, 3, 63, 55, 72,248, 62, 91,232, 11, 63,220, 89,225, 62, 77, 42, 12, 63, 11,221,226, 62,
- 90,125, 8, 63,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0, 67,169, 11, 63, 18,197, 11, 63,148,232, 3, 63,164, 17, 11, 63,
-162,220, 3, 63, 45, 88, 0, 63,106,252, 12, 63,180,173, 3, 63,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,162,220, 3, 63,
- 45, 88, 0, 63,148,232, 3, 63,164, 17, 11, 63, 55, 72,248, 62, 91,232, 11, 63, 35,114,245, 62,233,196, 3, 63,184, 62, 18, 3,
- 1, 0, 5, 0, 0, 0, 0, 0,103, 59, 17, 63,120,195,255, 62,240, 81, 22, 63,114, 70, 1, 63,202, 47, 22, 63,156, 60, 8, 63,
-106,252, 12, 63,180,173, 3, 63,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0, 11,221,226, 62, 90,125, 8, 63,106,128,226, 62,
-198,111, 1, 63,209,213,236, 62, 4,250,255, 62, 35,114,245, 62,233,196, 3, 63,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,
-240, 81, 22, 63,114, 70, 1, 63,151,182, 25, 63,130, 9, 1, 63,244,120, 25, 63, 78,242, 7, 63,202, 47, 22, 63,156, 60, 8, 63,
-184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0, 0, 39,220, 62,252, 58, 8, 63,213,150,219, 62, 50, 55, 1, 63,106,128,226, 62,
-198,111, 1, 63, 11,221,226, 62, 90,125, 8, 63,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0, 96, 49, 30, 63,121,229,254, 62,
-126, 77, 30, 63,156, 88, 5, 63,244,120, 25, 63, 78,242, 7, 63,151,182, 25, 63,130, 9, 1, 63,184, 62, 18, 3, 1, 0, 5, 0,
- 0, 0, 0, 0, 0, 39,220, 62,252, 58, 8, 63, 89, 65,210, 62, 56,158, 5, 63,176,116,210, 62,227, 62,255, 62,213,150,219, 62,
- 50, 55, 1, 63,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0, 25,113, 37, 63, 35,157,247, 62,123,207, 40, 63,218,175,254, 62,
-126, 77, 30, 63,156, 88, 5, 63, 96, 49, 30, 63,121,229,254, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0, 89, 65,210, 62,
- 56,158, 5, 63, 2,184,188, 62,140, 0,255, 62,189,165,195, 62,139,232,247, 62,176,116,210, 62,227, 62,255, 62,184, 62, 18, 3,
- 1, 0, 5, 0, 0, 0, 0, 0, 92, 62, 39, 63,121, 75,240, 62,154,190, 43, 63,192, 0,249, 62,123,207, 40, 63,218,175,254, 62,
- 25,113, 37, 63, 35,157,247, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0, 2,184,188, 62,140, 0,255, 62,138,190,182, 62,
- 35, 49,249, 62,222, 10,192, 62,163,128,240, 62,189,165,195, 62,139,232,247, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,
-140,149, 38, 63, 38, 95,229, 62,177, 79, 43, 63,202,194,231, 62,154,190, 43, 63,192, 0,249, 62, 92, 62, 39, 63,121, 75,240, 62,
-184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,138,190,182, 62, 35, 49,249, 62, 60,201,183, 62, 82,218,231, 62,168,140,193, 62,
- 94,129,229, 62,222, 10,192, 62,163,128,240, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0, 14,120, 33, 63,166,238,214, 62,
- 24,163, 39, 63,174, 95,216, 62,177, 79, 43, 63,202,194,231, 62,140,149, 38, 63, 38, 95,229, 62,184, 62, 18, 3, 1, 0, 5, 0,
- 0, 0, 0, 0, 60,201,183, 62, 82,218,231, 62, 98,194,191, 62, 42, 94,216, 62,168, 75,204, 62, 62, 7,215, 62,168,140,193, 62,
- 94,129,229, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,165,178, 27, 63,128, 17,208, 62, 66, 21, 30, 63,178,139,200, 62,
- 24,163, 39, 63,174, 95,216, 62, 14,120, 33, 63,166,238,214, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0, 98,194,191, 62,
- 42, 94,216, 62,139,125,211, 62,170,171,200, 62, 6, 24,216, 62,128, 57,208, 62,168, 75,204, 62, 62, 7,215, 62,184, 62, 18, 3,
- 1, 0, 5, 0, 0, 0, 0, 0, 15, 97, 17, 63,220, 34,214, 62,158,237, 12, 63, 38,241,187, 62, 66, 21, 30, 63,178,139,200, 62,
-165,178, 27, 63,128, 17,208, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,139,125,211, 62,170,171,200, 62, 15,175,245, 62,
-188, 14,188, 62,217,200,236, 62,134, 49,214, 62, 6, 24,216, 62,128, 57,208, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,
- 15, 97, 17, 63,220, 34,214, 62,149,244, 14, 63, 4, 42,221, 62,147,230, 3, 63, 78, 47,208, 62,158,237, 12, 63, 38,241,187, 62,
-184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,147,230, 3, 63, 78, 47,208, 62,141,144,241, 62,244, 52,221, 62,217,200,236, 62,
-134, 49,214, 62, 15,175,245, 62,188, 14,188, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,103, 59, 17, 63,120,195,255, 62,
-106,252, 12, 63,180,173, 3, 63,162,220, 3, 63, 45, 88, 0, 63, 71, 25, 13, 63,116,163,243, 62,184, 62, 18, 3, 1, 0, 5, 0,
- 0, 0, 0, 0,162,220, 3, 63, 45, 88, 0, 63, 35,114,245, 62,233,196, 3, 63,209,213,236, 62, 4,250,255, 62, 0, 45,245, 62,
-206,185,243, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0, 71, 25, 13, 63,116,163,243, 62,162,220, 3, 63, 45, 88, 0, 63,
-215,220, 3, 63,148,189,231, 62, 64, 2, 13, 63, 52,215,230, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,215,220, 3, 63,
-148,189,231, 62,162,220, 3, 63, 45, 88, 0, 63, 0, 45,245, 62,206,185,243, 62,219,100,245, 62,184,230,230, 62,184, 62, 18, 3,
- 1, 0, 5, 0, 0, 0, 0, 0,147,230, 3, 63, 78, 47,208, 62,149,244, 14, 63, 4, 42,221, 62, 64, 2, 13, 63, 52,215,230, 62,
-215,220, 3, 63,148,189,231, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,219,100,245, 62,184,230,230, 62,141,144,241, 62,
-244, 52,221, 62,147,230, 3, 63, 78, 47,208, 62,215,220, 3, 63,148,189,231, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,
-250, 61, 7, 63,148, 31, 54, 62,193,202, 3, 63,214,174, 49, 62,220,199, 3, 63, 89,219, 24, 62, 79,190, 13, 63,160,193, 46, 62,
-184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,220,199, 3, 63, 89,219, 24, 62,193,202, 3, 63,214,174, 49, 62,175, 87, 0, 63,
-251, 90, 54, 62, 14,150,243, 62,204, 79, 47, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0, 68,214, 9, 63,246,237, 66, 62,
-250, 61, 7, 63,148, 31, 54, 62, 79,190, 13, 63,160,193, 46, 62,250,104, 16, 63, 16,113, 55, 62,184, 62, 18, 3, 1, 0, 5, 0,
- 0, 0, 0, 0, 14,150,243, 62,204, 79, 47, 62,175, 87, 0, 63,251, 90, 54, 62,104,137,251, 62,179, 92, 67, 62,200, 68,238, 62,
- 76, 62, 56, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,237,221, 8, 63,218, 90, 91, 62, 68,214, 9, 63,246,237, 66, 62,
-250,104, 16, 63, 16,113, 55, 62,206,186, 16, 63, 85,129, 72, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,200, 68,238, 62,
- 76, 62, 56, 62,104,137,251, 62,179, 92, 67, 62, 39,153,253, 62, 27,195, 91, 62,192,187,237, 62,194,118, 73, 62,184, 62, 18, 3,
- 1, 0, 5, 0, 0, 0, 0, 0,206,243, 15, 63,182,207,136, 62, 77, 32, 8, 63, 10, 39,139, 62, 22,117, 9, 63,146,203, 97, 62,
-222, 32, 16, 63, 34,106, 93, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,192,110,252, 62, 79, 68, 98, 62,219, 89,255, 62,
-116, 79,139, 62, 92,193,239, 62,113, 61,137, 62, 21, 19,239, 62,121,110, 94, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,
-237,221, 8, 63,218, 90, 91, 62,206,186, 16, 63, 85,129, 72, 62,222, 32, 16, 63, 34,106, 93, 62, 22,117, 9, 63,146,203, 97, 62,
-184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0, 21, 19,239, 62,121,110, 94, 62,192,187,237, 62,194,118, 73, 62, 39,153,253, 62,
- 27,195, 91, 62,192,110,252, 62, 79, 68, 98, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,119,125, 9, 63, 7,112,158, 62,
- 70,233, 3, 63, 88, 27,154, 62,235,229, 3, 63, 97,108,139, 62, 77, 32, 8, 63, 10, 39,139, 62,184, 62, 18, 3, 1, 0, 5, 0,
- 0, 0, 0, 0,235,229, 3, 63, 97,108,139, 62, 70,233, 3, 63, 88, 27,154, 62,165,179,252, 62,163,140,158, 62,219, 89,255, 62,
-116, 79,139, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0, 22,117, 9, 63,146,203, 97, 62, 77, 32, 8, 63, 10, 39,139, 62,
-235,229, 3, 63, 97,108,139, 62,246,215, 3, 63,143, 56,101, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,235,229, 3, 63,
- 97,108,139, 62,219, 89,255, 62,116, 79,139, 62,192,110,252, 62, 79, 68, 98, 62,246,215, 3, 63,143, 56,101, 62,184, 62, 18, 3,
- 1, 0, 5, 0, 0, 0, 0, 0,147,210, 3, 63,221, 95, 86, 62,237,221, 8, 63,218, 90, 91, 62, 22,117, 9, 63,146,203, 97, 62,
-246,215, 3, 63,143, 56,101, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,192,110,252, 62, 79, 68, 98, 62, 39,153,253, 62,
- 27,195, 91, 62,147,210, 3, 63,221, 95, 86, 62,246,215, 3, 63,143, 56,101, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,
- 5, 54, 12, 63,188,183,167, 62,250, 61, 9, 63,252,214,168, 62,152,143, 8, 63, 45,107,163, 62,119,125, 9, 63, 7,112,158, 62,
-184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,100,136,254, 62, 38,123,163, 62,110, 39,253, 62,103,224,168, 62, 98, 68,247, 62,
-146,206,167, 62,165,179,252, 62,163,140,158, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,135,196, 10, 63, 52,208,178, 62,
- 25,233, 8, 63,116,110,175, 62,250, 61, 9, 63,252,214,168, 62, 5, 54, 12, 63,188,183,167, 62,184, 62, 18, 3, 1, 0, 5, 0,
- 0, 0, 0, 0,110, 39,253, 62,103,224,168, 62,102,195,253, 62,184,102,175, 62, 98, 14,250, 62,149,202,178, 62, 98, 68,247, 62,
-146,206,167, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0, 69, 17, 4, 63,105,176,182, 62, 69,138, 6, 63, 80,180,177, 62,
- 25,233, 8, 63,116,110,175, 62,135,196, 10, 63, 52,208,178, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,102,195,253, 62,
-184,102,175, 62, 14, 49, 1, 63, 62,150,177, 62, 69, 17, 4, 63,105,176,182, 62, 98, 14,250, 62,149,202,178, 62,184, 62, 18, 3,
- 1, 0, 5, 0, 0, 0, 0, 0,209,124, 3, 63, 70, 0,177, 62, 11,232, 3, 63,140, 4,174, 62, 69,138, 6, 63, 80,180,177, 62,
- 69, 17, 4, 63,105,176,182, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0, 14, 49, 1, 63, 62,150,177, 62, 11,232, 3, 63,
-140, 4,174, 62,209,124, 3, 63, 70, 0,177, 62, 69, 17, 4, 63,105,176,182, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,
- 70,233, 3, 63, 88, 27,154, 62,119,125, 9, 63, 7,112,158, 62,152,143, 8, 63, 45,107,163, 62,212,232, 3, 63, 58,152,158, 62,
-184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,100,136,254, 62, 38,123,163, 62,165,179,252, 62,163,140,158, 62, 70,233, 3, 63,
- 88, 27,154, 62,212,232, 3, 63, 58,152,158, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,212,232, 3, 63, 58,152,158, 62,
-152,143, 8, 63, 45,107,163, 62,121, 91, 7, 63,134, 51,166, 62,205,231, 3, 63, 58,149,162, 62,184, 62, 18, 3, 1, 0, 5, 0,
- 0, 0, 0, 0, 44,116, 0, 63,255, 56,166, 62,100,136,254, 62, 38,123,163, 62,212,232, 3, 63, 58,152,158, 62,205,231, 3, 63,
- 58,149,162, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0, 11,232, 3, 63,140, 4,174, 62,214,233, 3, 63,198,154,170, 62,
-233,110, 6, 63, 94,152,174, 62, 69,138, 6, 63, 80,180,177, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,228, 82, 1, 63,
- 95,140,174, 62,214,233, 3, 63,198,154,170, 62, 11,232, 3, 63,140, 4,174, 62, 14, 49, 1, 63, 62,150,177, 62,184, 62, 18, 3,
- 1, 0, 5, 0, 0, 0, 0, 0, 69,138, 6, 63, 80,180,177, 62,233,110, 6, 63, 94,152,174, 62, 59,236, 7, 63, 19,123,173, 62,
- 25,233, 8, 63,116,110,175, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,217,185,255, 62, 92,116,173, 62,228, 82, 1, 63,
- 95,140,174, 62, 14, 49, 1, 63, 62,150,177, 62,102,195,253, 62,184,102,175, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,
- 25,233, 8, 63,116,110,175, 62, 59,236, 7, 63, 19,123,173, 62, 85,249, 7, 63, 92, 52,169, 62,250, 61, 9, 63,252,214,168, 62,
-184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,160,169,255, 62, 6, 57,169, 62,217,185,255, 62, 92,116,173, 62,102,195,253, 62,
-184,102,175, 62,110, 39,253, 62,103,224,168, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,250, 61, 9, 63,252,214,168, 62,
- 85,249, 7, 63, 92, 52,169, 62,121, 91, 7, 63,134, 51,166, 62,152,143, 8, 63, 45,107,163, 62,184, 62, 18, 3, 1, 0, 5, 0,
- 0, 0, 0, 0, 44,116, 0, 63,255, 56,166, 62,160,169,255, 62, 6, 57,169, 62,110, 39,253, 62,103,224,168, 62,100,136,254, 62,
- 38,123,163, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,214,233, 3, 63,198,154,170, 62, 85,249, 7, 63, 92, 52,169, 62,
- 59,236, 7, 63, 19,123,173, 62,233,110, 6, 63, 94,152,174, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,217,185,255, 62,
- 92,116,173, 62,160,169,255, 62, 6, 57,169, 62,214,233, 3, 63,198,154,170, 62,228, 82, 1, 63, 95,140,174, 62,184, 62, 18, 3,
- 1, 0, 5, 0, 0, 0, 0, 0,214,233, 3, 63,198,154,170, 62,205,231, 3, 63, 58,149,162, 62,121, 91, 7, 63,134, 51,166, 62,
- 85,249, 7, 63, 92, 52,169, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0, 44,116, 0, 63,255, 56,166, 62,205,231, 3, 63,
- 58,149,162, 62,214,233, 3, 63,198,154,170, 62,160,169,255, 62, 6, 57,169, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,
- 69, 17, 4, 63,105,176,182, 62,135,196, 10, 63, 52,208,178, 62,158,237, 12, 63, 38,241,187, 62,147,230, 3, 63, 78, 47,208, 62,
-184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0, 15,175,245, 62,188, 14,188, 62, 98, 14,250, 62,149,202,178, 62, 69, 17, 4, 63,
-105,176,182, 62,147,230, 3, 63, 78, 47,208, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,135,196, 10, 63, 52,208,178, 62,
- 5, 54, 12, 63,188,183,167, 62,112, 0, 16, 63,254,246,164, 62,158,237, 12, 63, 38,241,187, 62,184, 62, 18, 3, 1, 0, 5, 0,
- 0, 0, 0, 0,207,187,239, 62, 19, 42,165, 62, 98, 68,247, 62,146,206,167, 62, 98, 14,250, 62,149,202,178, 62, 15,175,245, 62,
-188, 14,188, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0, 5, 54, 12, 63,188,183,167, 62,119,125, 9, 63, 7,112,158, 62,
- 44,250, 15, 63,109, 0,154, 62,112, 0, 16, 63,254,246,164, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0, 56,205,239, 62,
- 8, 71,154, 62,165,179,252, 62,163,140,158, 62, 98, 68,247, 62,146,206,167, 62,207,187,239, 62, 19, 42,165, 62,184, 62, 18, 3,
- 1, 0, 5, 0, 0, 0, 0, 0,119,125, 9, 63, 7,112,158, 62, 77, 32, 8, 63, 10, 39,139, 62,206,243, 15, 63,182,207,136, 62,
- 44,250, 15, 63,109, 0,154, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0, 92,193,239, 62,113, 61,137, 62,219, 89,255, 62,
-116, 79,139, 62,165,179,252, 62,163,140,158, 62, 56,205,239, 62, 8, 71,154, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,
- 20, 81, 25, 63, 17, 56,132, 62,208, 46, 27, 63,149, 35,148, 62, 44,250, 15, 63,109, 0,154, 62,206,243, 15, 63,182,207,136, 62,
-184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0, 56,205,239, 62, 8, 71,154, 62,238,166,217, 62,229,221,148, 62, 54, 42,221, 62,
-209, 25,133, 62, 92,193,239, 62,113, 61,137, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,208, 46, 27, 63,149, 35,148, 62,
- 36,177, 27, 63,158,151,156, 62,112, 0, 16, 63,254,246,164, 62, 44,250, 15, 63,109, 0,154, 62,184, 62, 18, 3, 1, 0, 5, 0,
- 0, 0, 0, 0,207,187,239, 62, 19, 42,165, 62, 0,160,216, 62,127, 44,157, 62,238,166,217, 62,229,221,148, 62, 56,205,239, 62,
- 8, 71,154, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,111,239, 27, 63,159, 77,166, 62,158,237, 12, 63, 38,241,187, 62,
-112, 0, 16, 63,254,246,164, 62, 36,177, 27, 63,158,151,156, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,207,187,239, 62,
- 19, 42,165, 62, 15,175,245, 62,188, 14,188, 62,115, 21,216, 62, 14,177,166, 62, 0,160,216, 62,127, 44,157, 62,184, 62, 18, 3,
- 1, 0, 5, 0, 0, 0, 0, 0,237,221, 8, 63,218, 90, 91, 62,147,210, 3, 63,221, 95, 86, 62,129,211, 3, 63,248,168, 83, 62,
-170, 33, 8, 63,254,149, 86, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,129,211, 3, 63,248,168, 83, 62,147,210, 3, 63,
-221, 95, 86, 62, 39,153,253, 62, 27,195, 91, 62, 8, 14,255, 62, 58,232, 86, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,
- 68,214, 9, 63,246,237, 66, 62,237,221, 8, 63,218, 90, 91, 62,170, 33, 8, 63,254,149, 86, 62, 20,180, 8, 63, 94, 29, 69, 62,
-184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0, 8, 14,255, 62, 58,232, 86, 62, 39,153,253, 62, 27,195, 91, 62,104,137,251, 62,
-179, 92, 67, 62, 19,210,253, 62, 55,114, 69, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,250, 61, 7, 63,148, 31, 54, 62,
- 68,214, 9, 63,246,237, 66, 62, 20,180, 8, 63, 94, 29, 69, 62,168, 82, 6, 63, 80, 43, 57, 62,184, 62, 18, 3, 1, 0, 5, 0,
- 0, 0, 0, 0, 19,210,253, 62, 55,114, 69, 62,104,137,251, 62,179, 92, 67, 62,175, 87, 0, 63,251, 90, 54, 62, 48, 68, 1, 63,
-166, 84, 57, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,193,202, 3, 63,214,174, 49, 62,250, 61, 7, 63,148, 31, 54, 62,
-168, 82, 6, 63, 80, 43, 57, 62,205,202, 3, 63, 8, 22, 54, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0, 48, 68, 1, 63,
-166, 84, 57, 62,175, 87, 0, 63,251, 90, 54, 62,193,202, 3, 63,214,174, 49, 62,205,202, 3, 63, 8, 22, 54, 62,184, 62, 18, 3,
- 1, 0, 5, 0, 0, 0, 0, 0,205,202, 3, 63, 8, 22, 54, 62,168, 82, 6, 63, 80, 43, 57, 62,246, 24, 5, 63, 26,150, 66, 62,
-213,205, 3, 63,220,232, 64, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0, 29,131, 2, 63, 22,172, 66, 62, 48, 68, 1, 63,
-166, 84, 57, 62,205,202, 3, 63, 8, 22, 54, 62,213,205, 3, 63,220,232, 64, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,
-168, 82, 6, 63, 80, 43, 57, 62, 20,180, 8, 63, 94, 29, 69, 62, 39, 83, 6, 63,191,114, 70, 62,246, 24, 5, 63, 26,150, 66, 62,
-184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,185, 75, 1, 63,222,160, 70, 62, 19,210,253, 62, 55,114, 69, 62, 48, 68, 1, 63,
-166, 84, 57, 62, 29,131, 2, 63, 22,172, 66, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0, 20,180, 8, 63, 94, 29, 69, 62,
-170, 33, 8, 63,254,149, 86, 62, 4,111, 6, 63, 40,172, 76, 62, 39, 83, 6, 63,191,114, 70, 62,184, 62, 18, 3, 1, 0, 5, 0,
- 0, 0, 0, 0,157, 51, 1, 63,158,218, 76, 62, 8, 14,255, 62, 58,232, 86, 62, 19,210,253, 62, 55,114, 69, 62,185, 75, 1, 63,
-222,160, 70, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,170, 33, 8, 63,254,149, 86, 62,129,211, 3, 63,248,168, 83, 62,
-234,208, 3, 63,146, 43, 75, 62, 4,111, 6, 63, 40,172, 76, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,234,208, 3, 63,
-146, 43, 75, 62,129,211, 3, 63,248,168, 83, 62, 8, 14,255, 62, 58,232, 86, 62,157, 51, 1, 63,158,218, 76, 62,184, 62, 18, 3,
- 1, 0, 5, 0, 0, 0, 0, 0,234,208, 3, 63,146, 43, 75, 62,213,205, 3, 63,220,232, 64, 62,246, 24, 5, 63, 26,150, 66, 62,
- 4,111, 6, 63, 40,172, 76, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0, 29,131, 2, 63, 22,172, 66, 62,213,205, 3, 63,
-220,232, 64, 62,234,208, 3, 63,146, 43, 75, 62,157, 51, 1, 63,158,218, 76, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,
- 4,111, 6, 63, 40,172, 76, 62,246, 24, 5, 63, 26,150, 66, 62, 39, 83, 6, 63,191,114, 70, 62, 0, 0,128, 63, 0, 0,128, 63,
-184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,185, 75, 1, 63,222,160, 70, 62, 29,131, 2, 63, 22,172, 66, 62,157, 51, 1, 63,
-158,218, 76, 62, 0, 0,128, 63, 0, 0,128, 63,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0, 64, 2, 13, 63, 52,215,230, 62,
-149,244, 14, 63, 4, 42,221, 62, 4,216, 16, 63,160, 24,224, 62,120,200, 15, 63, 84,255,231, 62,184, 62, 18, 3, 1, 0, 5, 0,
- 0, 0, 0, 0,119,193,237, 62,190, 38,224, 62,141,144,241, 62,244, 52,221, 62,219,100,245, 62,184,230,230, 62, 21,211,239, 62,
-185, 18,232, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0, 71, 25, 13, 63,116,163,243, 62, 64, 2, 13, 63, 52,215,230, 62,
-120,200, 15, 63, 84,255,231, 62,184,171, 16, 63, 40,133,241, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0, 21,211,239, 62,
-185, 18,232, 62,219,100,245, 62,184,230,230, 62, 0, 45,245, 62,206,185,243, 62,218,252,237, 62, 62,160,241, 62,184, 62, 18, 3,
- 1, 0, 5, 0, 0, 0, 0, 0,103, 59, 17, 63,120,195,255, 62, 71, 25, 13, 63,116,163,243, 62,184,171, 16, 63, 40,133,241, 62,
- 55, 44, 19, 63, 86, 21,250, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,218,252,237, 62, 62,160,241, 62, 0, 45,245, 62,
-206,185,243, 62,209,213,236, 62, 4,250,255, 62,153,228,232, 62,154, 67,250, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,
-149,244, 14, 63, 4, 42,221, 62, 15, 97, 17, 63,220, 34,214, 62,217, 53, 19, 63, 16,211,218, 62, 4,216, 16, 63,160, 24,224, 62,
-184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0, 8, 14,233, 62, 66,226,218, 62,217,200,236, 62,134, 49,214, 62,141,144,241, 62,
-244, 52,221, 62,119,193,237, 62,190, 38,224, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0, 15, 97, 17, 63,220, 34,214, 62,
-165,178, 27, 63,128, 17,208, 62,205,198, 26, 63,124,184,214, 62,217, 53, 19, 63, 16,211,218, 62,184, 62, 18, 3, 1, 0, 5, 0,
- 0, 0, 0, 0,216,214,217, 62,218,224,214, 62, 6, 24,216, 62,128, 57,208, 62,217,200,236, 62,134, 49,214, 62, 8, 14,233, 62,
- 66,226,218, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,165,178, 27, 63,128, 17,208, 62, 14,120, 33, 63,166,238,214, 62,
-156,136, 31, 63,194,138,219, 62,205,198, 26, 63,124,184,214, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,254, 30,208, 62,
-204,177,219, 62,168, 75,204, 62, 62, 7,215, 62, 6, 24,216, 62,128, 57,208, 62,216,214,217, 62,218,224,214, 62,184, 62, 18, 3,
- 1, 0, 5, 0, 0, 0, 0, 0, 14,120, 33, 63,166,238,214, 62,140,149, 38, 63, 38, 95,229, 62, 79, 9, 36, 63, 94,224,229, 62,
-156,136, 31, 63,194,138,219, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,148,192,198, 62,182, 11,230, 62,168,140,193, 62,
- 94,129,229, 62,168, 75,204, 62, 62, 7,215, 62,254, 30,208, 62,204,177,219, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,
-140,149, 38, 63, 38, 95,229, 62, 92, 62, 39, 63,121, 75,240, 62, 14, 49, 36, 63,253, 88,239, 62, 79, 9, 36, 63, 94,224,229, 62,
-184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0, 97, 71,198, 62,192,149,239, 62,222, 10,192, 62,163,128,240, 62,168,140,193, 62,
- 94,129,229, 62,148,192,198, 62,182, 11,230, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0, 92, 62, 39, 63,121, 75,240, 62,
- 25,113, 37, 63, 35,157,247, 62,243, 33, 35, 63, 80,143,245, 62, 14, 49, 36, 63,253, 88,239, 62,184, 62, 18, 3, 1, 0, 5, 0,
- 0, 0, 0, 0, 87, 99,200, 62,172,217,245, 62,189,165,195, 62,139,232,247, 62,222, 10,192, 62,163,128,240, 62, 97, 71,198, 62,
-192,149,239, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0, 25,113, 37, 63, 35,157,247, 62, 96, 49, 30, 63,121,229,254, 62,
-223, 49, 29, 63,199,140,250, 62,243, 33, 35, 63, 80,143,245, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,147,124,212, 62,
-146,215,250, 62,176,116,210, 62,227, 62,255, 62,189,165,195, 62,139,232,247, 62, 87, 99,200, 62,172,217,245, 62,184, 62, 18, 3,
- 1, 0, 5, 0, 0, 0, 0, 0, 96, 49, 30, 63,121,229,254, 62,151,182, 25, 63,130, 9, 1, 63, 50,181, 25, 63,118,111,253, 62,
-223, 49, 29, 63,199,140,250, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0, 52,151,219, 62, 68,186,253, 62,213,150,219, 62,
- 50, 55, 1, 63,176,116,210, 62,227, 62,255, 62,147,124,212, 62,146,215,250, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,
-151,182, 25, 63,130, 9, 1, 63,240, 81, 22, 63,114, 70, 1, 63,241,188, 22, 63, 28,149,253, 62, 50,181, 25, 63,118,111,253, 62,
-184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,212,163,225, 62, 91,215,253, 62,106,128,226, 62,198,111, 1, 63,213,150,219, 62,
- 50, 55, 1, 63, 52,151,219, 62, 68,186,253, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,240, 81, 22, 63,114, 70, 1, 63,
-103, 59, 17, 63,120,195,255, 62, 55, 44, 19, 63, 86, 21,250, 62,241,188, 22, 63, 28,149,253, 62,184, 62, 18, 3, 1, 0, 5, 0,
- 0, 0, 0, 0,153,228,232, 62,154, 67,250, 62,209,213,236, 62, 4,250,255, 62,106,128,226, 62,198,111, 1, 63,212,163,225, 62,
- 91,215,253, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,241,188, 22, 63, 28,149,253, 62, 55, 44, 19, 63, 86, 21,250, 62,
- 9,165, 20, 63,248, 99,247, 62, 20, 0, 23, 63, 6, 57,251, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,232,232,229, 62,
- 74,142,247, 62,153,228,232, 62,154, 67,250, 62,212,163,225, 62, 91,215,253, 62,145, 26,225, 62,114,116,251, 62,184, 62, 18, 3,
- 1, 0, 5, 0, 0, 0, 0, 0, 50,181, 25, 63,118,111,253, 62,241,188, 22, 63, 28,149,253, 62, 20, 0, 23, 63, 6, 57,251, 62,
-130,144, 25, 63,128, 7,251, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,145, 26,225, 62,114,116,251, 62,212,163,225, 62,
- 91,215,253, 62, 52,151,219, 62, 68,186,253, 62,177,225,219, 62, 67, 75,251, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,
-223, 49, 29, 63,199,140,250, 62, 50,181, 25, 63,118,111,253, 62,130,144, 25, 63,128, 7,251, 62, 80,195, 28, 63, 55,166,248, 62,
-184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,177,225,219, 62, 67, 75,251, 62, 52,151,219, 62, 68,186,253, 62,147,124,212, 62,
-146,215,250, 62,233, 95,213, 62, 20,237,248, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,243, 33, 35, 63, 80,143,245, 62,
-223, 49, 29, 63,199,140,250, 62, 80,195, 28, 63, 55,166,248, 62, 22,164, 33, 63,102, 75,243, 62,184, 62, 18, 3, 1, 0, 5, 0,
- 0, 0, 0, 0,233, 95,213, 62, 20,237,248, 62,147,124,212, 62,146,215,250, 62, 87, 99,200, 62,172,217,245, 62, 65,114,203, 62,
-159,143,243, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0, 14, 49, 36, 63,253, 88,239, 62,243, 33, 35, 63, 80,143,245, 62,
- 22,164, 33, 63,102, 75,243, 62, 30,160, 34, 63,169, 47,238, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0, 65,114,203, 62,
-159,143,243, 62, 87, 99,200, 62,172,217,245, 62, 97, 71,198, 62,192,149,239, 62,188,128,201, 62,126,110,238, 62,184, 62, 18, 3,
- 1, 0, 5, 0, 0, 0, 0, 0, 79, 9, 36, 63, 94,224,229, 62, 14, 49, 36, 63,253, 88,239, 62, 30,160, 34, 63,169, 47,238, 62,
-131,144, 34, 63,253, 87,231, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,188,128,201, 62,126,110,238, 62, 97, 71,198, 62,
-192,149,239, 62,148,192,198, 62,182, 11,230, 62,141,190,201, 62,124,140,231, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,
-156,136, 31, 63,194,138,219, 62, 79, 9, 36, 63, 94,224,229, 62,131,144, 34, 63,253, 87,231, 62, 21,208, 30, 63,174,182,221, 62,
-184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,141,190,201, 62,124,140,231, 62,148,192,198, 62,182, 11,230, 62,254, 30,208, 62,
-204,177,219, 62,168,133,209, 62, 51,221,221, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,205,198, 26, 63,124,184,214, 62,
-156,136, 31, 63,194,138,219, 62, 21,208, 30, 63,174,182,221, 62,128,218, 26, 63, 68,206,217, 62,184, 62, 18, 3, 1, 0, 5, 0,
- 0, 0, 0, 0,168,133,209, 62, 51,221,221, 62,254, 30,208, 62,204,177,219, 62,216,214,217, 62,218,224,214, 62, 11,157,217, 62,
- 64,243,217, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,217, 53, 19, 63, 16,211,218, 62,205,198, 26, 63,124,184,214, 62,
-128,218, 26, 63, 68,206,217, 62,103, 53, 20, 63,236, 84,221, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0, 11,157,217, 62,
- 64,243,217, 62,216,214,217, 62,218,224,214, 62, 8, 14,233, 62, 66,226,218, 62, 68, 5,231, 62,234,101,221, 62,184, 62, 18, 3,
- 1, 0, 5, 0, 0, 0, 0, 0, 4,216, 16, 63,160, 24,224, 62,217, 53, 19, 63, 16,211,218, 62,103, 53, 20, 63,236, 84,221, 62,
- 81, 87, 18, 63, 33,175,226, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0, 68, 5,231, 62,234,101,221, 62, 8, 14,233, 62,
- 66,226,218, 62,119,193,237, 62,190, 38,224, 62,180,187,234, 62,249,190,226, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,
- 55, 44, 19, 63, 86, 21,250, 62,184,171, 16, 63, 40,133,241, 62, 98, 68, 18, 63,150,197,240, 62, 9,165, 20, 63,248, 99,247, 62,
-184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0, 35,197,234, 62,215,226,240, 62,218,252,237, 62, 62,160,241, 62,153,228,232, 62,
-154, 67,250, 62,232,232,229, 62, 74,142,247, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,184,171, 16, 63, 40,133,241, 62,
-120,200, 15, 63, 84,255,231, 62,161, 4, 18, 63,138,184,232, 62, 98, 68, 18, 63,150,197,240, 62,184, 62, 18, 3, 1, 0, 5, 0,
- 0, 0, 0, 0,154, 85,235, 62, 92,206,232, 62, 21,211,239, 62,185, 18,232, 62,218,252,237, 62, 62,160,241, 62, 35,197,234, 62,
-215,226,240, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,120,200, 15, 63, 84,255,231, 62, 4,216, 16, 63,160, 24,224, 62,
- 81, 87, 18, 63, 33,175,226, 62,161, 4, 18, 63,138,184,232, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,180,187,234, 62,
-249,190,226, 62,119,193,237, 62,190, 38,224, 62, 21,211,239, 62,185, 18,232, 62,154, 85,235, 62, 92,206,232, 62,184, 62, 18, 3,
- 1, 0, 5, 0, 0, 0, 0, 0,148,232, 3, 63,164, 17, 11, 63, 67,169, 11, 63, 18,197, 11, 63,216,120, 13, 63,160, 81, 23, 63,
-147, 15, 4, 63,227,248, 23, 63,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0, 64, 27,245, 62,100,166, 23, 63, 55, 72,248, 62,
- 91,232, 11, 63,148,232, 3, 63,164, 17, 11, 63,147, 15, 4, 63,227,248, 23, 63,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,
- 67,169, 11, 63, 18,197, 11, 63,173,244, 22, 63,236,215, 11, 63, 94,233, 23, 63,186, 60, 16, 63,216,120, 13, 63,160, 81, 23, 63,
-184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,109,130,223, 62,118,165, 16, 63,220, 89,225, 62, 77, 42, 12, 63, 55, 72,248, 62,
- 91,232, 11, 63, 64, 27,245, 62,100,166, 23, 63,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,173,244, 22, 63,236,215, 11, 63,
- 28,105, 26, 63,242,194, 11, 63,220, 56, 28, 63, 66,250, 14, 63, 94,233, 23, 63,186, 60, 16, 63,184, 62, 18, 3, 1, 0, 5, 0,
- 0, 0, 0, 0,157,161,214, 62,219,110, 15, 63,220, 73,218, 62,169, 31, 12, 63,220, 89,225, 62, 77, 42, 12, 63,109,130,223, 62,
-118,165, 16, 63,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0, 28,105, 26, 63,242,194, 11, 63,220,158, 34, 63,175, 23, 10, 63,
-109, 44, 39, 63,107,221, 19, 63,220, 56, 28, 63, 66,250, 14, 63,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,156, 26,192, 62,
- 31,139, 20, 63,124,109,201, 62, 72,121, 10, 63,220, 73,218, 62,169, 31, 12, 63,157,161,214, 62,219,110, 15, 63,184, 62, 18, 3,
- 1, 0, 5, 0, 0, 0, 0, 0,220,158, 34, 63,175, 23, 10, 63,238, 88, 46, 63,146,223, 2, 63,242, 80, 56, 63, 44,244, 6, 63,
-109, 44, 39, 63,107,221, 19, 63,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 64, 0, 61,208,156, 62,204, 16, 7, 63,173, 87,177, 62,
-102, 9, 3, 63,124,109,201, 62, 72,121, 10, 63,156, 26,192, 62, 31,139, 20, 63,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 16, 0,
-238, 88, 46, 63,146,223, 2, 63, 62,134, 48, 63, 37,107,249, 62,195,173, 54, 63,239,106,252, 62,242, 80, 56, 63, 44,244, 6, 63,
-184, 62, 18, 3, 1, 0, 5, 0, 0, 0,128, 0,202, 36,160, 62, 94, 51,252, 62,172,229,172, 62,116,127,249, 62,173, 87,177, 62,
-102, 9, 3, 63, 61,208,156, 62,204, 16, 7, 63,184, 62, 18, 3, 1, 0, 5, 0, 0, 0,128, 0, 62,134, 48, 63, 37,107,249, 62,
- 38,229, 50, 63,169, 32,226, 62,154, 88, 53, 63,240,146,221, 62,195,173, 54, 63,239,106,252, 62,184, 62, 18, 3, 1, 0, 5, 0,
- 0, 0, 64, 0,128,172,162, 62, 17,169,221, 62,196, 39,168, 62,206, 11,226, 62,172,229,172, 62,116,127,249, 62,202, 36,160, 62,
- 94, 51,252, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 16, 0, 38,229, 50, 63,169, 32,226, 62, 87, 57, 43, 63,222, 58,206, 62,
-240,117, 49, 63,164,138,198, 62,154, 88, 53, 63,240,146,221, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0,128, 0,147,137,172, 62,
-148, 19,198, 62,130,207,184, 62, 42, 27,206, 62,196, 39,168, 62,206, 11,226, 62,128,172,162, 62, 17,169,221, 62,184, 62, 18, 3,
- 1, 0, 5, 0, 0, 0,128, 0, 87, 57, 43, 63,222, 58,206, 62, 91, 94, 37, 63,107,120,187, 62,156,160, 41, 63, 56,175,182, 62,
-240,117, 49, 63,164,138,198, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,202,212,188, 62,245,163,182, 62,156, 28,197, 62,
-166,130,187, 62,130,207,184, 62, 42, 27,206, 62,147,137,172, 62,148, 19,198, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,
-165,252, 48, 63,133, 33, 85, 62,112, 54, 48, 63, 20, 19, 96, 62,172, 36, 46, 63,208, 7,129, 62,240, 17, 42, 63,129, 84, 97, 62,
-184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0, 76, 71,181, 62,204,200,131, 62,117,121,175, 62,183,185,106, 62,217, 24,172, 62,
- 21,237, 92, 62,138, 81,187, 62, 59, 40,103, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,204, 89, 48, 63,134,194, 4, 62,
-165,252, 48, 63,133, 33, 85, 62,240, 17, 42, 63,129, 84, 97, 62,160,125, 37, 63, 50,211, 46, 62,184, 62, 18, 3, 1, 0, 5, 0,
- 0, 0, 16, 0,138, 81,187, 62, 59, 40,103, 62,217, 24,172, 62, 21,237, 92, 62, 94,197,172, 62,109,200, 4, 62, 25,121,195, 62,
- 46,253, 48, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 64, 0, 11, 44, 20, 63, 20, 26,163, 61,204, 89, 48, 63,134,194, 4, 62,
-160,125, 37, 63, 50,211, 46, 62, 40, 92, 24, 63,214,184, 21, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 32, 0, 25,121,195, 62,
- 46,253, 48, 62, 94,197,172, 62,109,200, 4, 62,140,122,230, 62,202,248,161, 61,216, 13,222, 62,222,116, 22, 62,184, 62, 18, 3,
- 1, 0, 5, 0, 0, 0, 32, 0,174,254, 16, 63, 94, 45, 34, 62,219,199, 3, 63, 18, 28,229, 61, 11, 44, 20, 63, 20, 26,163, 61,
- 40, 92, 24, 63,214,184, 21, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 16, 0,140,122,230, 62,202,248,161, 61,219,199, 3, 63,
- 18, 28,229, 61,140,248,236, 62,182,202, 34, 62,216, 13,222, 62,222,116, 22, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 64, 0,
-184,152, 21, 63,182, 47, 53, 62,174,254, 16, 63, 94, 45, 34, 62, 40, 92, 24, 63,214,184, 21, 62,209, 52, 25, 63, 76,140, 51, 62,
-184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 32, 0,216, 13,222, 62,222,116, 22, 62,140,248,236, 62,182,202, 34, 62,183,207,227, 62,
-250, 75, 54, 62,229,137,220, 62,185,228, 52, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 32, 0,137, 57, 22, 63, 81, 93, 61, 62,
-184,152, 21, 63,182, 47, 53, 62,209, 52, 25, 63, 76,140, 51, 62,193,166, 30, 63,114,168, 73, 62,184, 62, 18, 3, 1, 0, 5, 0,
- 0, 0, 0, 0,229,137,220, 62,185,228, 52, 62,183,207,227, 62,250, 75, 54, 62,122,152,226, 62,190,166, 62, 62, 54,198,209, 62,
- 18,240, 75, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,250,249, 22, 63,160,251, 88, 62,137, 57, 22, 63, 81, 93, 61, 62,
-193,166, 30, 63,114,168, 73, 62, 75, 0, 36, 63,229, 47,116, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0, 54,198,209, 62,
- 18,240, 75, 62,122,152,226, 62,190,166, 62, 62, 90, 83,225, 62, 21,153, 90, 62,211,231,199, 62,216,237,119, 62,184, 62, 18, 3,
- 1, 0, 5, 0, 0, 0, 0, 0,193,166, 30, 63,114,168, 73, 62,160,125, 37, 63, 50,211, 46, 62,240, 17, 42, 63,129, 84, 97, 62,
- 75, 0, 36, 63,229, 47,116, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,138, 81,187, 62, 59, 40,103, 62, 25,121,195, 62,
- 46,253, 48, 62, 54,198,209, 62, 18,240, 75, 62,211,231,199, 62,216,237,119, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,
-193,166, 30, 63,114,168, 73, 62,209, 52, 25, 63, 76,140, 51, 62, 40, 92, 24, 63,214,184, 21, 62,160,125, 37, 63, 50,211, 46, 62,
-184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,216, 13,222, 62,222,116, 22, 62,229,137,220, 62,185,228, 52, 62, 54,198,209, 62,
- 18,240, 75, 62, 25,121,195, 62, 46,253, 48, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0, 37,163, 36, 63,191,168,140, 62,
- 75, 0, 36, 63,229, 47,116, 62,240, 17, 42, 63,129, 84, 97, 62,172, 36, 46, 63,208, 7,129, 62,184, 62, 18, 3, 1, 0, 5, 0,
- 0, 0, 0, 0,138, 81,187, 62, 59, 40,103, 62,211,231,199, 62,216,237,119, 62, 6, 64,199, 62,105, 6,142, 62, 76, 71,181, 62,
-204,200,131, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0, 20, 81, 25, 63, 17, 56,132, 62,250,249, 22, 63,160,251, 88, 62,
- 75, 0, 36, 63,229, 47,116, 62, 37,163, 36, 63,191,168,140, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,211,231,199, 62,
-216,237,119, 62, 90, 83,225, 62, 21,153, 90, 62, 54, 42,221, 62,209, 25,133, 62, 6, 64,199, 62,105, 6,142, 62,184, 62, 18, 3,
- 1, 0, 5, 0, 0, 0, 0, 0,208, 46, 27, 63,149, 35,148, 62, 91, 60, 36, 63,221,222,150, 62,222,170, 33, 63, 74,126,158, 62,
- 36,177, 27, 63,158,151,156, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0, 72,234,204, 62, 56, 63,159, 62,150,245,199, 62,
- 85, 15,152, 62,238,166,217, 62,229,221,148, 62, 0,160,216, 62,127, 44,157, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,
- 20, 81, 25, 63, 17, 56,132, 62, 37,163, 36, 63,191,168,140, 62, 91, 60, 36, 63,221,222,150, 62,208, 46, 27, 63,149, 35,148, 62,
-184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,150,245,199, 62, 85, 15,152, 62, 6, 64,199, 62,105, 6,142, 62, 54, 42,221, 62,
-209, 25,133, 62,238,166,217, 62,229,221,148, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,111,239, 27, 63,159, 77,166, 62,
- 36,177, 27, 63,158,151,156, 62,222,170, 33, 63, 74,126,158, 62,102,212, 31, 63,144,192,164, 62,184, 62, 18, 3, 1, 0, 5, 0,
- 0, 0, 0, 0, 72,234,204, 62, 56, 63,159, 62, 0,160,216, 62,127, 44,157, 62,115, 21,216, 62, 14,177,166, 62, 17,119,208, 62,
-201, 65,165, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,111,239, 27, 63,159, 77,166, 62,102,212, 31, 63,144,192,164, 62,
-156,160, 41, 63, 56,175,182, 62, 91, 94, 37, 63,107,120,187, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,202,212,188, 62,
-245,163,182, 62, 17,119,208, 62,201, 65,165, 62,115, 21,216, 62, 14,177,166, 62,156, 28,197, 62,166,130,187, 62,184, 62, 18, 3,
- 1, 0, 5, 0, 0, 0, 0, 0,104,119,194, 62,164,189, 82, 63, 23, 73,212, 62,152,239, 90, 63,100,192,205, 62, 46,238, 97, 63,
- 38, 56,185, 62, 72,154, 91, 63,184, 62, 18, 3, 1, 0, 5, 0, 0, 0,240, 0,228, 94,141, 62, 86,234,100, 63, 84, 66,150, 62,
-114,154, 94, 63,230, 86,173, 62, 79, 66, 98, 63, 20,143,162, 62, 44,173,106, 63,184, 62, 18, 3, 1, 0, 5, 0, 0, 0,240, 0,
- 72,122, 87, 63,216, 8, 62, 62,202,106, 84, 63,137,185,113, 62,226, 77, 72, 63,204, 21,121, 62,158,225, 71, 63,113, 34, 68, 62,
-184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 16, 0,132, 32,137, 62,181, 65,121, 62,168,179,107, 62,139,127,103, 62,210,147,114, 62,
-212,116, 61, 62,248,125,142, 62, 30, 4, 80, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 64, 0,158,225, 71, 63,113, 34, 68, 62,
-226, 77, 72, 63,204, 21,121, 62, 8, 7, 51, 63, 5,186,130, 62, 3,166, 49, 63,232, 57, 96, 62,184, 62, 18, 3, 1, 0, 5, 0,
- 0, 0, 0, 0, 18,197,172, 62, 41,112,133, 62,132, 32,137, 62,181, 65,121, 62,248,125,142, 62, 30, 4, 80, 62,121,228,174, 62,
- 52, 79,109, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0, 3,166, 49, 63,232, 57, 96, 62, 8, 7, 51, 63, 5,186,130, 62,
-172, 36, 46, 63,208, 7,129, 62,112, 54, 48, 63, 20, 19, 96, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0, 76, 71,181, 62,
-204,200,131, 62, 18,197,172, 62, 41,112,133, 62,121,228,174, 62, 52, 79,109, 62,117,121,175, 62,183,185,106, 62,184, 62, 18, 3,
- 1, 0, 5, 0, 0, 0, 0, 0, 37,163, 36, 63,191,168,140, 62,172, 36, 46, 63,208, 7,129, 62, 8, 7, 51, 63, 5,186,130, 62,
- 91, 60, 36, 63,221,222,150, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0, 18,197,172, 62, 41,112,133, 62, 76, 71,181, 62,
-204,200,131, 62, 6, 64,199, 62,105, 6,142, 62,150,245,199, 62, 85, 15,152, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,
-154, 88, 53, 63,240,146,221, 62,240,117, 49, 63,164,138,198, 62,224, 19, 69, 63, 24, 68,190, 62, 53, 64, 74, 63,171, 31,224, 62,
-184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 16, 0,250, 78,134, 62,148,213,186, 62,147,137,172, 62,148, 19,198, 62,128,172,162, 62,
- 17,169,221, 62,184,112,114, 62,248,169,220, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 64, 0, 54, 74,214, 62, 20, 55, 70, 63,
- 48,130,233, 62,188, 69, 83, 63, 23, 73,212, 62,152,239, 90, 63,104,119,194, 62,164,189, 82, 63,184, 62, 18, 3, 1, 0, 5, 0,
- 0, 0,240, 0, 84, 66,150, 62,114,154, 94, 63, 66, 1,153, 62,245,149, 81, 63, 38, 56,185, 62,102,110, 83, 63,230, 86,173, 62,
- 79, 66, 98, 63,184, 62, 18, 3, 1, 0, 5, 0, 0, 0,240, 0,106,242, 66, 63,202, 94, 25, 63,190,100, 70, 63,222,234, 15, 63,
- 90,189, 77, 63,233, 88, 17, 63, 8,206, 74, 63, 88,118, 27, 63,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0, 22, 32, 96, 62,
- 66, 60, 16, 63, 86, 87,125, 62,174, 5, 15, 63, 78,187,132, 62,180, 44, 24, 63, 26, 79,108, 62,124, 1, 26, 63,184, 62, 18, 3,
- 1, 0, 5, 0, 0, 0, 0, 0, 8,206, 74, 63, 88,118, 27, 63, 90,189, 77, 63,233, 88, 17, 63, 72,139, 85, 63,103, 51, 19, 63,
-220,119, 85, 63, 77, 71, 31, 63,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0, 64,199, 64, 62, 26, 40, 18, 63, 22, 32, 96, 62,
- 66, 60, 16, 63, 26, 79,108, 62,124, 1, 26, 63, 44,191, 67, 62, 90, 89, 30, 63,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,
-220,119, 85, 63, 77, 71, 31, 63, 72,139, 85, 63,103, 51, 19, 63,228,213,100, 63, 72,156, 20, 63, 18, 82, 96, 63,128,133, 34, 63,
-184, 62, 18, 3, 1, 0, 5, 0, 0, 0,128, 0,226, 50, 1, 62,184, 68, 20, 63, 64,199, 64, 62, 26, 40, 18, 63, 44,191, 67, 62,
- 90, 89, 30, 63,194,204, 24, 62, 32,186, 34, 63,184, 62, 18, 3, 1, 0, 5, 0, 0, 0,128, 0,242, 80, 56, 63, 44,244, 6, 63,
-195,173, 54, 63,239,106,252, 62,115,205, 60, 63,213,150,253, 62,166, 14, 64, 63, 81, 80, 4, 63,184, 62, 18, 3, 1, 0, 5, 0,
- 0, 0, 16, 0,190, 85,147, 62, 91,176,252, 62,202, 36,160, 62, 94, 51,252, 62, 61,208,156, 62,204, 16, 7, 63,160,121,140, 62,
- 74,197, 3, 63,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 64, 0,166, 14, 64, 63, 81, 80, 4, 63,115,205, 60, 63,213,150,253, 62,
- 68,103, 73, 63,233,248, 0, 63,248, 12, 75, 63, 64,206, 8, 63,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,144, 59,115, 62,
-102,143,255, 62,190, 85,147, 62, 91,176,252, 62,160,121,140, 62, 74,197, 3, 63, 78,135,107, 62, 88,182, 7, 63,184, 62, 18, 3,
- 1, 0, 5, 0, 0, 0, 0, 0,248, 12, 75, 63, 64,206, 8, 63, 68,103, 73, 63,233,248, 0, 63,239,151, 82, 63, 86,223, 3, 63,
-181,227, 82, 63,189,102, 11, 63,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0, 82, 17, 77, 62,162, 98, 2, 63,144, 59,115, 62,
-102,143,255, 62, 78,135,107, 62, 88,182, 7, 63,202, 98, 75, 62,108, 43, 10, 63,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,
-181,227, 82, 63,189,102, 11, 63,239,151, 82, 63, 86,223, 3, 63, 92,224, 91, 63,239,144, 5, 63,161,148, 90, 63,146, 95, 13, 63,
-184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,178, 40, 38, 62, 14,230, 3, 63, 82, 17, 77, 62,162, 98, 2, 63,202, 98, 75, 62,
-108, 43, 10, 63, 10,162, 43, 62, 8, 50, 12, 63,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,120, 89,103, 63,105, 76, 2, 63,
-170,179,103, 63,142,105, 12, 63,161,148, 90, 63,146, 95, 13, 63, 92,224, 91, 63,239,144, 5, 63,184, 62, 18, 3, 1, 0, 5, 0,
- 0, 0, 0, 0, 10,162, 43, 62, 8, 50, 12, 63,168, 41,231, 61,158, 83, 11, 63,116,128,234, 61,200, 39, 0, 63,178, 40, 38, 62,
- 14,230, 3, 63,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,228,213,100, 63, 72,156, 20, 63, 72,139, 85, 63,103, 51, 19, 63,
-161,148, 90, 63,146, 95, 13, 63,170,179,103, 63,142,105, 12, 63,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0, 10,162, 43, 62,
- 8, 50, 12, 63, 64,199, 64, 62, 26, 40, 18, 63,226, 50, 1, 62,184, 68, 20, 63,168, 41,231, 61,158, 83, 11, 63,184, 62, 18, 3,
- 1, 0, 5, 0, 0, 0, 0, 0, 72,139, 85, 63,103, 51, 19, 63, 90,189, 77, 63,233, 88, 17, 63,181,227, 82, 63,189,102, 11, 63,
-161,148, 90, 63,146, 95, 13, 63,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,202, 98, 75, 62,108, 43, 10, 63, 22, 32, 96, 62,
- 66, 60, 16, 63, 64,199, 64, 62, 26, 40, 18, 63, 10,162, 43, 62, 8, 50, 12, 63,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,
- 90,189, 77, 63,233, 88, 17, 63,190,100, 70, 63,222,234, 15, 63,248, 12, 75, 63, 64,206, 8, 63,181,227, 82, 63,189,102, 11, 63,
-184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0, 78,135,107, 62, 88,182, 7, 63, 86, 87,125, 62,174, 5, 15, 63, 22, 32, 96, 62,
- 66, 60, 16, 63,202, 98, 75, 62,108, 43, 10, 63,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,190,100, 70, 63,222,234, 15, 63,
- 82,235, 60, 63, 27, 12, 12, 63,166, 14, 64, 63, 81, 80, 4, 63,248, 12, 75, 63, 64,206, 8, 63,184, 62, 18, 3, 1, 0, 5, 0,
- 0, 0, 0, 0,160,121,140, 62, 74,197, 3, 63, 78,230,145, 62,148,225, 11, 63, 86, 87,125, 62,174, 5, 15, 63, 78,135,107, 62,
- 88,182, 7, 63,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0, 31,118, 57, 63,230, 79, 12, 63,242, 80, 56, 63, 44,244, 6, 63,
-166, 14, 64, 63, 81, 80, 4, 63, 82,235, 60, 63, 27, 12, 12, 63,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 32, 0,160,121,140, 62,
- 74,197, 3, 63, 61,208,156, 62,204, 16, 7, 63, 0,199,152, 62, 13,133, 12, 63, 78,230,145, 62,148,225, 11, 63,184, 62, 18, 3,
- 1, 0, 5, 0, 0, 0, 32, 0,195,240, 57, 63, 10,138, 23, 63, 82,235, 60, 63, 27, 12, 12, 63,190,100, 70, 63,222,234, 15, 63,
-106,242, 66, 63,202, 94, 25, 63,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0, 86, 87,125, 62,174, 5, 15, 63, 78,230,145, 62,
-148,225, 11, 63,247, 7,150, 62, 96, 12, 23, 63, 78,187,132, 62,180, 44, 24, 63,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,
-216,120, 13, 63,160, 81, 23, 63, 94,233, 23, 63,186, 60, 16, 63,220, 56, 28, 63, 66,250, 14, 63,109, 44, 39, 63,107,221, 19, 63,
-184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,157,161,214, 62,219,110, 15, 63,109,130,223, 62,118,165, 16, 63, 64, 27,245, 62,
-100,166, 23, 63,156, 26,192, 62, 31,139, 20, 63,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,176, 29, 56, 63, 88,206, 20, 63,
- 31,118, 57, 63,230, 79, 12, 63, 82,235, 60, 63, 27, 12, 12, 63,195,240, 57, 63, 10,138, 23, 63,184, 62, 18, 3, 1, 0, 5, 0,
- 0, 0, 0, 0, 78,230,145, 62,148,225, 11, 63, 0,199,152, 62, 13,133, 12, 63,239,211,153, 62,220,159, 20, 63,247, 7,150, 62,
- 96, 12, 23, 63,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0, 48,148, 54, 63,220,206, 22, 63,176, 29, 56, 63, 88,206, 20, 63,
-195,240, 57, 63, 10,138, 23, 63, 0, 0,128, 63, 0, 0,128, 63,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,247, 7,150, 62,
- 96, 12, 23, 63,239,211,153, 62,220,159, 20, 63,108,106,156, 62,146,154, 22, 63, 0, 0,128, 63, 0, 0,128, 63,184, 62, 18, 3,
- 1, 0, 5, 0, 0, 0, 0, 0,195,173, 54, 63,239,106,252, 62,154, 88, 53, 63,240,146,221, 62, 53, 64, 74, 63,171, 31,224, 62,
-115,205, 60, 63,213,150,253, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 32, 0,184,112,114, 62,248,169,220, 62,128,172,162, 62,
- 17,169,221, 62,202, 36,160, 62, 94, 51,252, 62,190, 85,147, 62, 91,176,252, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 32, 0,
- 53, 64, 74, 63,171, 31,224, 62,217,106, 81, 63, 14,214,232, 62, 68,103, 73, 63,233,248, 0, 63,115,205, 60, 63,213,150,253, 62,
-184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,144, 59,115, 62,102,143,255, 62, 88, 93, 84, 62, 50,105,228, 62,184,112,114, 62,
-248,169,220, 62,190, 85,147, 62, 91,176,252, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,217,106, 81, 63, 14,214,232, 62,
-106,154, 93, 63,226, 26,233, 62,239,151, 82, 63, 86,223, 3, 63, 68,103, 73, 63,233,248, 0, 63,184, 62, 18, 3, 1, 0, 5, 0,
- 0, 0, 0, 0, 82, 17, 77, 62,162, 98, 2, 63,128, 1, 33, 62, 70,210,226, 62, 88, 93, 84, 62, 50,105,228, 62,144, 59,115, 62,
-102,143,255, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,120, 89,103, 63,105, 76, 2, 63, 92,224, 91, 63,239,144, 5, 63,
-239,151, 82, 63, 86,223, 3, 63,106,154, 93, 63,226, 26,233, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0, 82, 17, 77, 62,
-162, 98, 2, 63,178, 40, 38, 62, 14,230, 3, 63,116,128,234, 61,200, 39, 0, 63,128, 1, 33, 62, 70,210,226, 62,184, 62, 18, 3,
- 1, 0, 5, 0, 0, 0, 0, 0, 8, 7, 51, 63, 5,186,130, 62,226, 77, 72, 63,204, 21,121, 62,154,254, 73, 63,178, 82,140, 62,
- 90,188, 56, 63,103,207,159, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,249,249,130, 62,246,175,137, 62,132, 32,137, 62,
-181, 65,121, 62, 18,197,172, 62, 41,112,133, 62,192, 5,161, 62,228, 40,159, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,
-224, 19, 69, 63, 24, 68,190, 62, 90,188, 56, 63,103,207,159, 62,154,254, 73, 63,178, 82,140, 62,216,217, 77, 63, 7,228,157, 62,
-184, 62, 18, 3, 1, 0, 5, 0, 0, 0,128, 0,249,249,130, 62,246,175,137, 62,192, 5,161, 62,228, 40,159, 62,250, 78,134, 62,
-148,213,186, 62,154,118,111, 62,120,108,152, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0,128, 0,240,117, 49, 63,164,138,198, 62,
-156,160, 41, 63, 56,175,182, 62, 90,188, 56, 63,103,207,159, 62,224, 19, 69, 63, 24, 68,190, 62,184, 62, 18, 3, 1, 0, 5, 0,
- 0, 0, 0, 0,192, 5,161, 62,228, 40,159, 62,202,212,188, 62,245,163,182, 62,147,137,172, 62,148, 19,198, 62,250, 78,134, 62,
-148,213,186, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,156,160, 41, 63, 56,175,182, 62,222,170, 33, 63, 74,126,158, 62,
- 91, 60, 36, 63,221,222,150, 62, 90,188, 56, 63,103,207,159, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,150,245,199, 62,
- 85, 15,152, 62, 72,234,204, 62, 56, 63,159, 62,202,212,188, 62,245,163,182, 62,192, 5,161, 62,228, 40,159, 62,184, 62, 18, 3,
- 1, 0, 5, 0, 0, 0, 0, 0, 91, 60, 36, 63,221,222,150, 62, 8, 7, 51, 63, 5,186,130, 62, 90,188, 56, 63,103,207,159, 62,
- 0, 0,128, 63, 0, 0,128, 63,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,192, 5,161, 62,228, 40,159, 62, 18,197,172, 62,
- 41,112,133, 62,150,245,199, 62, 85, 15,152, 62, 0, 0,128, 63, 0, 0,128, 63,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,
-156,160, 41, 63, 56,175,182, 62,102,212, 31, 63,144,192,164, 62,222,170, 33, 63, 74,126,158, 62, 0, 0,128, 63, 0, 0,128, 63,
-184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0, 72,234,204, 62, 56, 63,159, 62, 17,119,208, 62,201, 65,165, 62,202,212,188, 62,
-245,163,182, 62, 0, 0,128, 63, 0, 0,128, 63,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,226, 44,245, 62,129,140, 96, 63,
- 42,135,227, 62, 58, 2,101, 63,136,168,219, 62, 30,236, 95, 63,135, 30,238, 62,200, 41, 90, 63,184, 62, 18, 3, 1, 0, 5, 0,
- 0, 0,240, 0,216,240,137, 62, 90,226, 93, 63,110,103,122, 62,236,255, 92, 63, 74, 84,120, 62,104, 32, 83, 63, 32,193,138, 62,
- 16, 3, 83, 63,184, 62, 18, 3, 1, 0, 5, 0, 0, 0,240, 0, 48,130,233, 62,188, 69, 83, 63,135, 30,238, 62,200, 41, 90, 63,
-136,168,219, 62, 30,236, 95, 63, 23, 73,212, 62,152,239, 90, 63,184, 62, 18, 3, 1, 0, 5, 0, 0, 0,240, 0,216,240,137, 62,
- 90,226, 93, 63, 32,193,138, 62, 16, 3, 83, 63, 66, 1,153, 62,245,149, 81, 63, 84, 66,150, 62,114,154, 94, 63,184, 62, 18, 3,
- 1, 0, 5, 0, 0, 0,240, 0,216,217, 77, 63, 7,228,157, 62,154,254, 73, 63,178, 82,140, 62, 33, 61, 90, 63,195,207,124, 62,
-160,225, 90, 63,110,121,137, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 16, 0, 98,207, 81, 62,109, 1,110, 62,249,249,130, 62,
-246,175,137, 62,154,118,111, 62,120,108,152, 62,166,125, 74, 62,252, 30,130, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 64, 0,
-226, 77, 72, 63,204, 21,121, 62,202,106, 84, 63,137,185,113, 62, 33, 61, 90, 63,195,207,124, 62,154,254, 73, 63,178, 82,140, 62,
-184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0, 98,207, 81, 62,109, 1,110, 62,168,179,107, 62,139,127,103, 62,132, 32,137, 62,
-181, 65,121, 62,249,249,130, 62,246,175,137, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0, 23, 73,212, 62,152,239, 90, 63,
-136,168,219, 62, 30,236, 95, 63,100,192,205, 62, 46,238, 97, 63, 0, 0,128, 63, 0, 0,128, 63,184, 62, 18, 3, 1, 0, 5, 0,
- 0, 0,112, 0,228, 94,141, 62, 86,234,100, 63,216,240,137, 62, 90,226, 93, 63, 84, 66,150, 62,114,154, 94, 63, 0, 0,128, 63,
- 0, 0,128, 63,184, 62, 18, 3, 1, 0, 5, 0, 0, 0,112, 0, 31,178,109, 63,224, 68,228, 62, 46,178,102, 63,100,184,232, 62,
-100,251,101, 63,238,198,227, 62, 94,173,107, 63,168,130,225, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0, 68,209,249, 61,
- 70,134,219, 62,120,216,242, 61,124, 40,225, 62, 28, 27,177, 61, 42,240,219, 62, 76,131,196, 61,196, 97,216, 62,184, 62, 18, 3,
- 1, 0, 5, 0, 0, 0, 0, 0, 31,178,109, 63,224, 68,228, 62, 94,173,107, 63,168,130,225, 62,144,102,114, 63,198, 23,220, 62,
- 41, 76,116, 63,139,153,222, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0, 56,163,120, 61, 58,252,208, 62, 76,131,196, 61,
-196, 97,216, 62, 28, 27,177, 61, 42,240,219, 62,128,183, 73, 61, 84,108,213, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,
- 41, 76,116, 63,139,153,222, 62,144,102,114, 63,198, 23,220, 62, 84, 87,117, 63,221,255,211, 62,183,115,119, 63,140, 49,215, 62,
-184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,144, 29, 55, 61,207,183,194, 62, 56,163,120, 61, 58,252,208, 62,128,183, 73, 61,
- 84,108,213, 62,224,111,231, 60,100,142,198, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,183,115,119, 63,140, 49,215, 62,
- 84, 87,117, 63,221,255,211, 62,150, 20,118, 63, 60,110,196, 62, 49, 12,122, 63,246, 8,197, 62,184, 62, 18, 3, 1, 0, 5, 0,
- 0, 0, 0, 0, 96,197,103, 61, 15,206,170, 62,144, 29, 55, 61,207,183,194, 62,224,111,231, 60,100,142,198, 62,240, 54, 16, 61,
-120, 4,167, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0, 49, 12,122, 63,246, 8,197, 62,150, 20,118, 63, 60,110,196, 62,
- 17,155,108, 63,130,201,178, 62, 84,190,110, 63,223, 77,172, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,148,252,246, 61,
-164,116,160, 62, 96,197,103, 61, 15,206,170, 62,240, 54, 16, 61,120, 4,167, 62, 8, 66,246, 61, 28,161,152, 62,184, 62, 18, 3,
- 1, 0, 5, 0, 0, 0, 0, 0, 84,190,110, 63,223, 77,172, 62, 17,155,108, 63,130,201,178, 62, 21,180, 92, 63,202, 95,173, 62,
-151, 5, 90, 63,138, 61,167, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,144,216, 54, 62, 35, 76,163, 62,148,252,246, 61,
-164,116,160, 62, 8, 66,246, 61, 28,161,152, 62,194,251, 66, 62,163,102,158, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,
- 17,155,108, 63,130,201,178, 62,198,132,109, 63,182,157,186, 62, 68, 32, 97, 63,192, 12,178, 62, 21,180, 92, 63,202, 95,173, 62,
-184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0, 48,185, 36, 62, 16, 7,166, 62, 40, 91,221, 61, 4,194,167, 62,148,252,246, 61,
-164,116,160, 62,144,216, 54, 62, 35, 76,163, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,150, 20,118, 63, 60,110,196, 62,
- 84,225,115, 63,208, 85,198, 62,198,132,109, 63,182,157,186, 62, 17,155,108, 63,130,201,178, 62,184, 62, 18, 3, 1, 0, 5, 0,
- 0, 0, 0, 0, 40, 91,221, 61, 4,194,167, 62,244,221,134, 61,121,164,175, 62, 96,197,103, 61, 15,206,170, 62,148,252,246, 61,
-164,116,160, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0, 84, 87,117, 63,221,255,211, 62,222, 48,116, 63,169, 8,209, 62,
- 84,225,115, 63,208, 85,198, 62,150, 20,118, 63, 60,110,196, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,244,221,134, 61,
-121,164,175, 62,160,108, 93, 61, 17,207,190, 62,144, 29, 55, 61,207,183,194, 62, 96,197,103, 61, 15,206,170, 62,184, 62, 18, 3,
- 1, 0, 5, 0, 0, 0, 0, 0,144,102,114, 63,198, 23,220, 62,174,151,113, 63, 26,229,214, 62,222, 48,116, 63,169, 8,209, 62,
- 84, 87,117, 63,221,255,211, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,160,108, 93, 61, 17,207,190, 62, 12,155,135, 61,
-166, 39,201, 62, 56,163,120, 61, 58,252,208, 62,144, 29, 55, 61,207,183,194, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,
- 94,173,107, 63,168,130,225, 62,228,239,107, 63, 62, 59,218, 62,174,151,113, 63, 26,229,214, 62,144,102,114, 63,198, 23,220, 62,
-184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0, 12,155,135, 61,166, 39,201, 62,128, 47,195, 61, 6, 11,207, 62, 76,131,196, 61,
-196, 97,216, 62, 56,163,120, 61, 58,252,208, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0, 94,173,107, 63,168,130,225, 62,
-100,251,101, 63,238,198,227, 62, 71,205,102, 63,132, 94,219, 62,228,239,107, 63, 62, 59,218, 62,184, 62, 18, 3, 1, 0, 5, 0,
- 0, 0, 0, 0,192,157,244, 61,157,137,209, 62, 68,209,249, 61, 70,134,219, 62, 76,131,196, 61,196, 97,216, 62,128, 47,195, 61,
- 6, 11,207, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,224, 19, 69, 63, 24, 68,190, 62,216,217, 77, 63, 7,228,157, 62,
-236, 35, 85, 63,164,201,181, 62, 56, 92, 78, 63,177,114,188, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 32, 0,122, 91, 80, 62,
- 72, 18,174, 62,154,118,111, 62,120,108,152, 62,250, 78,134, 62,148,213,186, 62,162,163,104, 62,150,180,182, 62,184, 62, 18, 3,
- 1, 0, 5, 0, 0, 0, 32, 0,216,217, 77, 63, 7,228,157, 62,151, 5, 90, 63,138, 61,167, 62, 21,180, 92, 63,202, 95,173, 62,
-236, 35, 85, 63,164,201,181, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 16, 0,144,216, 54, 62, 35, 76,163, 62,194,251, 66, 62,
-163,102,158, 62,154,118,111, 62,120,108,152, 62,122, 91, 80, 62, 72, 18,174, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 64, 0,
- 53, 64, 74, 63,171, 31,224, 62,224, 19, 69, 63, 24, 68,190, 62, 56, 92, 78, 63,177,114,188, 62,217,106, 81, 63, 14,214,232, 62,
-184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,162,163,104, 62,150,180,182, 62,250, 78,134, 62,148,213,186, 62,184,112,114, 62,
-248,169,220, 62, 88, 93, 84, 62, 50,105,228, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,106,154, 93, 63,226, 26,233, 62,
-196,229, 94, 63,128,195,224, 62,100,251,101, 63,238,198,227, 62, 46,178,102, 63,100,184,232, 62,184, 62, 18, 3, 1, 0, 5, 0,
- 0, 0, 0, 0, 68,209,249, 61, 70,134,219, 62,108,187, 28, 62, 48, 86,217, 62,128, 1, 33, 62, 70,210,226, 62,120,216,242, 61,
-124, 40,225, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0, 21,180, 92, 63,202, 95,173, 62, 68, 32, 97, 63,192, 12,178, 62,
- 9,215, 94, 63, 4, 54,186, 62,236, 35, 85, 63,164,201,181, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0, 60,122, 41, 62,
- 16, 58,175, 62, 48,185, 36, 62, 16, 7,166, 62,144,216, 54, 62, 35, 76,163, 62,122, 91, 80, 62, 72, 18,174, 62,184, 62, 18, 3,
- 1, 0, 5, 0, 0, 0, 0, 0,230, 78, 95, 63, 4,233,189, 62, 32,188, 86, 63, 44, 62,190, 62,236, 35, 85, 63,164,201,181, 62,
- 9,215, 94, 63, 4, 54,186, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,122, 91, 80, 62, 72, 18,174, 62, 78,118, 71, 62,
- 27, 49,182, 62, 52,225, 37, 62, 40, 12,179, 62, 60,122, 41, 62, 16, 58,175, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,
- 70,166, 92, 63, 0,166,197, 62, 32,188, 86, 63, 44, 62,190, 62,230, 78, 95, 63, 4,233,189, 62,226, 13, 95, 63, 37,152,194, 62,
-184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0, 52,225, 37, 62, 40, 12,179, 62, 78,118, 71, 62, 27, 49,182, 62,142,143, 45, 62,
-237, 37,188, 62,106,230, 36, 62,222, 27,184, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,248, 90, 95, 63,100,122,207, 62,
-108,249, 90, 63, 58,199,212, 62, 32,188, 86, 63, 44, 62,190, 62, 70,166, 92, 63, 0,166,197, 62,184, 62, 18, 3, 1, 0, 5, 0,
- 0, 0, 0, 0, 78,118, 71, 62, 27, 49,182, 62,110, 56, 48, 62,230, 43,205, 62,174,250, 30, 62, 26, 12,198, 62,142,143, 45, 62,
-237, 37,188, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,196,229, 94, 63,128,195,224, 62,108,249, 90, 63, 58,199,212, 62,
-248, 90, 95, 63,100,122,207, 62, 92,104, 98, 63,197,136,215, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,174,250, 30, 62,
- 26, 12,198, 62,110, 56, 48, 62,230, 43,205, 62,108,187, 28, 62, 48, 86,217, 62,212, 59, 15, 62,224, 50,206, 62,184, 62, 18, 3,
- 1, 0, 5, 0, 0, 0, 0, 0,100,251,101, 63,238,198,227, 62,196,229, 94, 63,128,195,224, 62, 92,104, 98, 63,197,136,215, 62,
- 71,205,102, 63,132, 94,219, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,212, 59, 15, 62,224, 50,206, 62,108,187, 28, 62,
- 48, 86,217, 62, 68,209,249, 61, 70,134,219, 62,192,157,244, 61,157,137,209, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,
-217,106, 81, 63, 14,214,232, 62,108,249, 90, 63, 58,199,212, 62,196,229, 94, 63,128,195,224, 62,106,154, 93, 63,226, 26,233, 62,
-184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,108,187, 28, 62, 48, 86,217, 62,110, 56, 48, 62,230, 43,205, 62, 88, 93, 84, 62,
- 50,105,228, 62,128, 1, 33, 62, 70,210,226, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,217,106, 81, 63, 14,214,232, 62,
- 56, 92, 78, 63,177,114,188, 62, 32,188, 86, 63, 44, 62,190, 62,108,249, 90, 63, 58,199,212, 62,184, 62, 18, 3, 1, 0, 5, 0,
- 0, 0, 0, 0, 78,118, 71, 62, 27, 49,182, 62,162,163,104, 62,150,180,182, 62, 88, 93, 84, 62, 50,105,228, 62,110, 56, 48, 62,
-230, 43,205, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0, 56, 92, 78, 63,177,114,188, 62,236, 35, 85, 63,164,201,181, 62,
- 32,188, 86, 63, 44, 62,190, 62, 0, 0,128, 63, 0, 0,128, 63,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0, 78,118, 71, 62,
- 27, 49,182, 62,122, 91, 80, 62, 72, 18,174, 62,162,163,104, 62,150,180,182, 62, 0, 0,128, 63, 0, 0,128, 63,184, 62, 18, 3,
- 1, 0, 5, 0, 0, 0, 0, 0, 71,205,102, 63,132, 94,219, 62, 92,104, 98, 63,197,136,215, 62,182,109,100, 63,149,255,210, 62,
- 54, 86,104, 63,209,241,214, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,160,107, 7, 62, 34,103,200, 62,212, 59, 15, 62,
-224, 50,206, 62,192,157,244, 61,157,137,209, 62, 8, 2,232, 61, 20,214,203, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,
- 92,104, 98, 63,197,136,215, 62,248, 90, 95, 63,100,122,207, 62,112,206, 97, 63, 10,202,204, 62,182,109,100, 63,149,255,210, 62,
-184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0, 64, 68, 21, 62,107, 55,194, 62,174,250, 30, 62, 26, 12,198, 62,212, 59, 15, 62,
-224, 50,206, 62,160,107, 7, 62, 34,103,200, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,248, 90, 95, 63,100,122,207, 62,
- 70,166, 92, 63, 0,166,197, 62, 82,241, 94, 63, 40,103,198, 62,112,206, 97, 63, 10,202,204, 62,184, 62, 18, 3, 1, 0, 5, 0,
- 0, 0, 0, 0, 20,225, 35, 62, 39, 50,188, 62,142,143, 45, 62,237, 37,188, 62,174,250, 30, 62, 26, 12,198, 62, 64, 68, 21, 62,
-107, 55,194, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0, 70,166, 92, 63, 0,166,197, 62,226, 13, 95, 63, 37,152,194, 62,
-118, 1, 97, 63, 47,226,195, 62, 82,241, 94, 63, 40,103,198, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0, 12, 43, 28, 62,
-186,177,184, 62,106,230, 36, 62,222, 27,184, 62,142,143, 45, 62,237, 37,188, 62, 20,225, 35, 62, 39, 50,188, 62,184, 62, 18, 3,
- 1, 0, 5, 0, 0, 0, 0, 0,226, 13, 95, 63, 37,152,194, 62,230, 78, 95, 63, 4,233,189, 62, 51,113, 97, 63, 92,151,189, 62,
-118, 1, 97, 63, 47,226,195, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,104, 67, 29, 62, 58,199,177, 62, 52,225, 37, 62,
- 40, 12,179, 62,106,230, 36, 62,222, 27,184, 62, 12, 43, 28, 62,186,177,184, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,
-230, 78, 95, 63, 4,233,189, 62, 9,215, 94, 63, 4, 54,186, 62, 96, 69, 96, 63,152,133,187, 62, 51,113, 97, 63, 92,151,189, 62,
-184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,140, 14, 35, 62, 33, 19,176, 62, 60,122, 41, 62, 16, 58,175, 62, 52,225, 37, 62,
- 40, 12,179, 62,104, 67, 29, 62, 58,199,177, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0, 9,215, 94, 63, 4, 54,186, 62,
- 68, 32, 97, 63,192, 12,178, 62,112, 91, 98, 63,149,128,182, 62, 96, 69, 96, 63,152,133,187, 62,184, 62, 18, 3, 1, 0, 5, 0,
- 0, 0, 0, 0,228,107, 29, 62, 95,230,169, 62, 48,185, 36, 62, 16, 7,166, 62, 60,122, 41, 62, 16, 58,175, 62,140, 14, 35, 62,
- 33, 19,176, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,228,239,107, 63, 62, 59,218, 62, 71,205,102, 63,132, 94,219, 62,
- 54, 86,104, 63,209,241,214, 62, 34, 27,109, 63,155,254,214, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0, 8, 2,232, 61,
- 20,214,203, 62,192,157,244, 61,157,137,209, 62,128, 47,195, 61, 6, 11,207, 62, 36,174,184, 61,216,130,202, 62,184, 62, 18, 3,
- 1, 0, 5, 0, 0, 0, 0, 0,174,151,113, 63, 26,229,214, 62,228,239,107, 63, 62, 59,218, 62, 34, 27,109, 63,155,254,214, 62,
- 69,134,113, 63,156, 82,212, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0, 36,174,184, 61,216,130,202, 62,128, 47,195, 61,
- 6, 11,207, 62, 12,155,135, 61,166, 39,201, 62, 60,114,138, 61, 28, 61,197, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,
-222, 48,116, 63,169, 8,209, 62,174,151,113, 63, 26,229,214, 62, 69,134,113, 63,156, 82,212, 62, 42,143,114, 63, 24,168,207, 62,
-184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0, 60,114,138, 61, 28, 61,197, 62, 12,155,135, 61,166, 39,201, 62,160,108, 93, 61,
- 17,207,190, 62,184, 85,132, 61, 22,211,189, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0, 84,225,115, 63,208, 85,198, 62,
-222, 48,116, 63,169, 8,209, 62, 42,143,114, 63, 24,168,207, 62,203,125,114, 63, 96,114,200, 62,184, 62, 18, 3, 1, 0, 5, 0,
- 0, 0, 0, 0,184, 85,132, 61, 22,211,189, 62,160,108, 93, 61, 17,207,190, 62,244,221,134, 61,121,164,175, 62, 16,152,145, 61,
- 84,214,179, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,198,132,109, 63,182,157,186, 62, 84,225,115, 63,208, 85,198, 62,
-203,125,114, 63, 96,114,200, 62,177,192,109, 63,152,240,190, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0, 16,152,145, 61,
- 84,214,179, 62,244,221,134, 61,121,164,175, 62, 40, 91,221, 61, 4,194,167, 62, 64,226,208, 61,232, 58,172, 62,184, 62, 18, 3,
- 1, 0, 5, 0, 0, 0, 0, 0, 68, 32, 97, 63,192, 12,178, 62,198,132,109, 63,182,157,186, 62,177,192,109, 63,152,240,190, 62,
-112, 91, 98, 63,149,128,182, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0, 64,226,208, 61,232, 58,172, 62, 40, 91,221, 61,
- 4,194,167, 62, 48,185, 36, 62, 16, 7,166, 62,228,107, 29, 62, 95,230,169, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,
-118, 1, 97, 63, 47,226,195, 62, 51,113, 97, 63, 92,151,189, 62,215,139,102, 63, 15,109,193, 62, 54, 47,100, 63,186,115,198, 62,
-184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0, 92,169, 5, 62,168,115,179, 62,104, 67, 29, 62, 58,199,177, 62, 12, 43, 28, 62,
-186,177,184, 62, 50, 97, 13, 62, 50, 42,186, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0, 54, 47,100, 63,186,115,198, 62,
-215,139,102, 63, 15,109,193, 62,174,241,105, 63,204, 8,200, 62, 71,233,103, 63,178, 42,204, 62,184, 62, 18, 3, 1, 0, 5, 0,
- 0, 0, 0, 0,228,171,229, 61, 41, 42,185, 62, 92,169, 5, 62,168,115,179, 62, 50, 97, 13, 62, 50, 42,186, 62, 92,248,243, 61,
- 96, 22,191, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0, 71,233,103, 63,178, 42,204, 62,174,241,105, 63,204, 8,200, 62,
- 51, 37,108, 63,249, 3,205, 62, 56,212,106, 63, 96,238,208, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,120, 99,202, 61,
-192, 49,190, 62,228,171,229, 61, 41, 42,185, 62, 92,248,243, 61, 96, 22,191, 62,160,209,211, 61,108,159,195, 62,184, 62, 18, 3,
- 1, 0, 5, 0, 0, 0, 0, 0, 56,212,106, 63, 96,238,208, 62, 51, 37,108, 63,249, 3,205, 62, 56, 73,110, 63,186,119,206, 62,
- 46,191,109, 63, 92, 64,210, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,244,234,179, 61,240,219,190, 62,120, 99,202, 61,
-192, 49,190, 62,160,209,211, 61,108,159,195, 62,196,129,181, 61,204, 14,196, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,
- 34, 27,109, 63,155,254,214, 62, 54, 86,104, 63,209,241,214, 62, 56,212,106, 63, 96,238,208, 62, 46,191,109, 63, 92, 64,210, 62,
-184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,160,209,211, 61,108,159,195, 62, 8, 2,232, 61, 20,214,203, 62, 36,174,184, 61,
-216,130,202, 62,196,129,181, 61,204, 14,196, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,182,109,100, 63,149,255,210, 62,
- 71,233,103, 63,178, 42,204, 62, 56,212,106, 63, 96,238,208, 62, 54, 86,104, 63,209,241,214, 62,184, 62, 18, 3, 1, 0, 5, 0,
- 0, 0, 0, 0,160,209,211, 61,108,159,195, 62, 92,248,243, 61, 96, 22,191, 62,160,107, 7, 62, 34,103,200, 62, 8, 2,232, 61,
- 20,214,203, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,182,109,100, 63,149,255,210, 62,112,206, 97, 63, 10,202,204, 62,
- 54, 47,100, 63,186,115,198, 62, 71,233,103, 63,178, 42,204, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0, 50, 97, 13, 62,
- 50, 42,186, 62, 64, 68, 21, 62,107, 55,194, 62,160,107, 7, 62, 34,103,200, 62, 92,248,243, 61, 96, 22,191, 62,184, 62, 18, 3,
- 1, 0, 5, 0, 0, 0, 0, 0,118, 1, 97, 63, 47,226,195, 62, 54, 47,100, 63,186,115,198, 62,112,206, 97, 63, 10,202,204, 62,
- 82,241, 94, 63, 40,103,198, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0, 64, 68, 21, 62,107, 55,194, 62, 50, 97, 13, 62,
- 50, 42,186, 62, 12, 43, 28, 62,186,177,184, 62, 20,225, 35, 62, 39, 50,188, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,
- 96, 69, 96, 63,152,133,187, 62,112, 91, 98, 63,149,128,182, 62,215,139,102, 63, 15,109,193, 62, 51,113, 97, 63, 92,151,189, 62,
-184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0, 92,169, 5, 62,168,115,179, 62,228,107, 29, 62, 95,230,169, 62,140, 14, 35, 62,
- 33, 19,176, 62,104, 67, 29, 62, 58,199,177, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,177,192,109, 63,152,240,190, 62,
-174,241,105, 63,204, 8,200, 62,215,139,102, 63, 15,109,193, 62,112, 91, 98, 63,149,128,182, 62,184, 62, 18, 3, 1, 0, 5, 0,
- 0, 0, 0, 0, 92,169, 5, 62,168,115,179, 62,228,171,229, 61, 41, 42,185, 62, 64,226,208, 61,232, 58,172, 62,228,107, 29, 62,
- 95,230,169, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,203,125,114, 63, 96,114,200, 62, 51, 37,108, 63,249, 3,205, 62,
-174,241,105, 63,204, 8,200, 62,177,192,109, 63,152,240,190, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,228,171,229, 61,
- 41, 42,185, 62,120, 99,202, 61,192, 49,190, 62, 16,152,145, 61, 84,214,179, 62, 64,226,208, 61,232, 58,172, 62,184, 62, 18, 3,
- 1, 0, 5, 0, 0, 0, 0, 0, 42,143,114, 63, 24,168,207, 62, 56, 73,110, 63,186,119,206, 62, 51, 37,108, 63,249, 3,205, 62,
-203,125,114, 63, 96,114,200, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,120, 99,202, 61,192, 49,190, 62,244,234,179, 61,
-240,219,190, 62,184, 85,132, 61, 22,211,189, 62, 16,152,145, 61, 84,214,179, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,
- 69,134,113, 63,156, 82,212, 62, 46,191,109, 63, 92, 64,210, 62, 56, 73,110, 63,186,119,206, 62, 42,143,114, 63, 24,168,207, 62,
-184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,244,234,179, 61,240,219,190, 62,196,129,181, 61,204, 14,196, 62, 60,114,138, 61,
- 28, 61,197, 62,184, 85,132, 61, 22,211,189, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0, 34, 27,109, 63,155,254,214, 62,
- 46,191,109, 63, 92, 64,210, 62, 69,134,113, 63,156, 82,212, 62, 0, 0,128, 63, 0, 0,128, 63,184, 62, 18, 3, 1, 0, 5, 0,
- 0, 0, 0, 0, 60,114,138, 61, 28, 61,197, 62,196,129,181, 61,204, 14,196, 62, 36,174,184, 61,216,130,202, 62, 0, 0,128, 63,
- 0, 0,128, 63,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0, 84,190,110, 63,223, 77,172, 62,151, 5, 90, 63,138, 61,167, 62,
- 22, 25, 96, 63,246,248,149, 62,162,176,122, 63,145,215,161, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0,128, 0, 64,234, 54, 62,
-146,219,140, 62,194,251, 66, 62,163,102,158, 62, 8, 66,246, 61, 28,161,152, 62,172,241,189, 61, 13,107,132, 62,184, 62, 18, 3,
- 1, 0, 5, 0, 0, 0, 0, 0, 49, 12,122, 63,246, 8,197, 62, 84,190,110, 63,223, 77,172, 62,162,176,122, 63,145,215,161, 62,
-188,255,126, 63,115,248,198, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 64, 0,172,241,189, 61, 13,107,132, 62, 8, 66,246, 61,
- 28,161,152, 62,240, 54, 16, 61,120, 4,167, 62, 0, 8,163, 58, 39, 69,162, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0,128, 0,
-183,115,119, 63,140, 49,215, 62, 49, 12,122, 63,246, 8,197, 62,188,255,126, 63,115,248,198, 62, 47, 6,122, 63,248,157,216, 62,
-184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0, 0, 8,163, 58, 39, 69,162, 62,240, 54, 16, 61,120, 4,167, 62,224,111,231, 60,
-100,142,198, 62,224,248, 14, 60, 70,141,198, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 16, 0, 41, 76,116, 63,139,153,222, 62,
-183,115,119, 63,140, 49,215, 62, 47, 6,122, 63,248,157,216, 62,134, 98,119, 63,204, 37,225, 62,184, 62, 18, 3, 1, 0, 5, 0,
- 0, 0, 0, 0,224,248, 14, 60, 70,141,198, 62,224,111,231, 60,100,142,198, 62,128,183, 73, 61, 84,108,213, 62, 80,210,229, 60,
- 32,239,218, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0, 31,178,109, 63,224, 68,228, 62, 41, 76,116, 63,139,153,222, 62,
-134, 98,119, 63,204, 37,225, 62, 46,185,115, 63, 90,157,234, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0,128, 0, 80,210,229, 60,
- 32,239,218, 62,128,183, 73, 61, 84,108,213, 62, 28, 27,177, 61, 42,240,219, 62, 56,103,122, 61, 30, 10,230, 62,184, 62, 18, 3,
- 1, 0, 5, 0, 0, 0,128, 0, 46,178,102, 63,100,184,232, 62, 31,178,109, 63,224, 68,228, 62, 46,185,115, 63, 90,157,234, 62,
-244,134,106, 63,234, 64,246, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 64, 0, 56,103,122, 61, 30, 10,230, 62, 28, 27,177, 61,
- 42,240,219, 62,120,216,242, 61,124, 40,225, 62,212,222,209, 61,238,123,240, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 16, 0,
-235,188, 5, 63,252, 74, 98, 63,200,111,248, 62,197,105,112, 63, 0, 49,231, 62,118,190,107, 63,150, 57,255, 62, 53, 14, 96, 63,
-184, 62, 18, 3, 1, 0, 5, 0, 0, 0,240, 0, 80, 99, 95, 62,149,194, 94, 63, 58, 8, 62, 62, 10,154, 89, 63, 40, 24, 92, 62,
- 14, 82, 74, 63,112, 11,112, 62,157,133, 78, 63,184, 62, 18, 3, 1, 0, 5, 0, 0, 0,240, 0,235,188, 5, 63,252, 74, 98, 63,
-136,139, 12, 63,138,233,101, 63,116, 45, 6, 63,112,245,113, 63,200,111,248, 62,197,105,112, 63,184, 62, 18, 3, 1, 0, 5, 0,
- 0, 0,240, 0, 68,219, 36, 62,249,186, 81, 63, 28,254, 65, 62, 20, 55, 70, 63, 40, 24, 92, 62, 14, 82, 74, 63, 58, 8, 62, 62,
- 10,154, 89, 63,184, 62, 18, 3, 1, 0, 5, 0, 0, 0,240, 0,136,139, 12, 63,138,233,101, 63, 5,130, 12, 63,149,216,108, 63,
-116, 45, 6, 63,112,245,113, 63, 0, 0,128, 63, 0, 0,128, 63,184, 62, 18, 3, 1, 0, 5, 0, 0, 0,112, 0, 68,219, 36, 62,
-249,186, 81, 63, 76, 1, 42, 62, 39,178, 73, 63, 28,254, 65, 62, 20, 55, 70, 63, 0, 0,128, 63, 0, 0,128, 63,184, 62, 18, 3,
- 1, 0, 5, 0, 0, 0,112, 0,120, 89,103, 63,105, 76, 2, 63,106,154, 93, 63,226, 26,233, 62, 46,178,102, 63,100,184,232, 62,
-244,134,106, 63,234, 64,246, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,120,216,242, 61,124, 40,225, 62,128, 1, 33, 62,
- 70,210,226, 62,116,128,234, 61,200, 39, 0, 63,212,222,209, 61,238,123,240, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 0, 0,
-226, 44,245, 62,129,140, 96, 63,150, 57,255, 62, 53, 14, 96, 63, 0, 49,231, 62,118,190,107, 63, 42,135,227, 62, 58, 2,101, 63,
-184, 62, 18, 3, 1, 0, 5, 0, 0, 0,240, 0, 80, 99, 95, 62,149,194, 94, 63,112, 11,112, 62,157,133, 78, 63, 74, 84,120, 62,
-104, 32, 83, 63,110,103,122, 62,236,255, 92, 63,184, 62, 18, 3, 1, 0, 5, 0, 0, 0,240, 0,216,217, 77, 63, 7,228,157, 62,
-160,225, 90, 63,110,121,137, 62, 22, 25, 96, 63,246,248,149, 62,151, 5, 90, 63,138, 61,167, 62,184, 62, 18, 3, 1, 0, 5, 0,
- 0, 0, 16, 0, 64,234, 54, 62,146,219,140, 62,166,125, 74, 62,252, 30,130, 62,154,118,111, 62,120,108,152, 62,194,251, 66, 62,
-163,102,158, 62,184, 62, 18, 3, 1, 0, 5, 0, 0, 0, 64, 0, 68, 65, 84, 65, 64, 31, 0, 0, 96, 53,164, 2, 58, 0, 0, 0,
-208, 7, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 0, 0, 0, 0, 0, 0, 77, 65, 0, 0, 2,108, 7,160, 24, 32, 0, 0, 0, 42, 0, 0, 0, 1, 0, 0, 0, 0, 7,160, 16, 32,
+ 0, 0, 0, 0, 0, 0, 0, 0, 77, 65,116,101,120,116,117,114,101, 46, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0,
+ 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 63, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63, 76,204,205, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,160, 0, 0, 0, 0, 0, 0, 63,160, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 63,128, 0, 0, 0, 2, 0, 2, 0, 50, 0, 6, 63,128, 0, 0, 63,128, 0, 0, 0, 18, 0, 18, 59,163,215, 10,
+ 59,163,215, 10, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 0, 3, 3, 1, 0, 3, 0, 1, 0, 4, 0, 12, 0, 4,
+ 63, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 3,
+ 0, 0, 0, 2, 0, 0, 0, 0, 63, 0, 0, 0, 64,128, 0, 0, 63, 0, 0, 0, 61,204,204,205, 63, 0, 0, 0, 61,204,204,205,
+ 61,204,204,205, 63,128, 0, 0, 0, 0, 0, 0, 7,160, 28, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0,
+ 63, 76,204,205, 63, 76,204,205, 63, 76,204,205, 61, 76,204,205, 61,204,204,205, 63,166,102,102, 63,128, 0, 0, 0, 0, 0, 0,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 3, 8, 7,160, 28, 32, 0, 0, 0, 36, 0, 0, 0, 1, 0, 0, 0, 2, 0, 1, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62,220, 40,245, 0, 0, 0, 0, 63,125,112,164, 63,128, 0, 0,
+ 63, 24,214,106, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 1, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63,128, 0, 0,
+ 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63,128, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,
+ 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63,128, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0,
+ 63, 0, 0, 0, 63,128, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63,128, 0, 0,
+ 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63,128, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,
+ 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63,128, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0,
+ 63, 0, 0, 0, 63,128, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63,128, 0, 0,
+ 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63,128, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,
+ 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63,128, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0,
+ 63, 0, 0, 0, 63,128, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63,128, 0, 0,
+ 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63,128, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 84, 69, 0, 0, 1, 4, 13, 65,101,144, 0, 0, 0, 38, 0, 0, 0, 1, 13, 65,103, 16, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 84, 69,112,114,101,118,105,101,119, 0,101,120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 62,128, 0, 0, 64,160, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0,
+ 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 64, 0, 0, 0, 64, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 32, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0,
+ 0, 0, 0, 0, 0, 5, 0, 8, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 1, 0, 1,
+ 0, 3, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 60,204,204,205, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 65,102,192, 68, 65, 84, 65, 0, 0, 0, 32,
+ 13, 65,102,192, 0, 0, 0, 19, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 69, 0, 0, 1, 4, 13, 65,103, 16, 0, 0, 0, 38, 0, 0, 0, 1,
+ 0, 0, 0, 0, 13, 65,101,144, 0, 0, 0, 0, 0, 0, 0, 0, 84, 69,102, 97,107,101,115,104, 97,100,111,119, 0, 0, 76,101,
+110,100, 0,101,120, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62,128, 0, 0, 64,160, 0, 0, 63,128, 0, 0,
+ 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 64, 0, 0, 0, 64, 0, 0, 0,
+ 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 64, 32, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 5, 0, 40, 0, 5, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 1, 0, 1, 0, 3, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
+ 0, 0, 0, 0, 60,204,204,205, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, 0, 0,
+ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 77, 69, 0, 0, 1, 24, 13, 65,104, 64, 0, 0, 0, 52, 0, 0, 0, 1, 13, 65,109,208, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 77, 69, 67,117, 98,101, 46, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 65,105,128, 7,160,128, 32, 12,117,208, 32, 0, 0, 0, 0, 7,160, 32, 32, 7,160, 80, 32, 0, 0, 0, 0, 7,160,168, 32,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 65,105,176, 0, 0, 0, 1, 0, 0, 0, 5, 0, 0, 0, 20, 0, 0, 0, 0,
+ 0, 0, 0, 0, 13, 65,107, 16, 0, 0, 0, 1, 0, 0, 0, 5, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 13, 65,108,112,
+ 0, 0, 0, 3, 0, 0, 0, 5, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,249, 0, 0, 3,237, 0, 0, 1,244,
+ 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 1, 61, 88,133,192,189, 85, 45,184,190, 24,181,196, 63, 35, 71,185, 62,235, 31,153,
+ 62,203,102,130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 4, 0, 1, 0, 1,
+ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 4, 13, 65,105,128, 0, 0, 0, 0,
+ 0, 0, 0, 1, 7,160, 8, 32, 68, 65, 84, 65, 0, 0, 1, 44, 13, 65,105,176, 0, 0, 1, 35, 0, 0, 0, 5, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,160, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 47, 88, 7,160, 32, 32, 0, 0, 0, 58, 0, 0, 1,249, 62,131,144,140,
+ 60,200,163,119, 62, 85, 9,156, 92,125,170, 70, 21,228, 0,255, 0, 0, 0, 0,190, 26,222, 50, 60,200,163,119, 62, 85, 9,156,
+163,131,170, 70, 21,228, 0,255, 0, 0, 0, 0, 62,146,126, 61,188, 8, 37,223, 62, 47,183, 99, 76,247,194,191, 81,228, 2,255,
+ 0, 0, 0, 0,190, 56,185,147,188, 8, 37,223, 62, 47,183, 99,179, 9,194,191, 81,228, 2,255, 0, 0, 0, 0, 62,157,176,129,
+188,217, 91,211, 61,246,238,244, 84, 31,181,226, 61,191, 2,255, 0, 0, 0, 0,190, 79, 30, 28,188,217, 91,211, 61,246,238,244,
+171,225,181,226, 61,191, 2,255, 0, 0, 0, 0, 62, 94, 19,115,189,128,251,103, 62, 14, 32,150, 9,241,144,155, 62, 64, 2,255,
+ 0, 0, 0, 0,189,227,161, 26,189,128,251,103, 62, 14, 32,150,246, 15,144,155, 62, 64, 2,255, 0, 0, 0, 0, 62, 94, 19,115,
+189, 25,118,251, 62, 62,165, 20, 14,184,163,144, 87, 76, 2,255, 0, 0, 0, 0,189,227,161, 26,189, 25,118,251, 62, 62,165, 20,
+241, 72,163,144, 87, 76, 2,255, 0, 0, 0, 0, 62, 94, 19,115, 60, 34,107,232, 62, 92,128,116, 3, 3,131,121, 29,110, 0,255,
+ 0, 0, 0, 0,189,227,161, 26, 60, 34,107,232, 62, 92,128,116,252,253,131,121, 29,110, 0,255, 0, 0, 0, 0, 62, 56,193, 58,
+ 60,200,163,119, 62, 99,247, 77,171, 56,167,117, 36,206, 0,255, 0, 0, 0, 0,189,152,252,168, 60,200,163,119, 62, 99,247, 77,
+ 84,200,167,117, 36,206, 0,255, 0, 0, 0, 0, 62, 23, 42,109,188, 8, 37,223, 62, 73,215, 88,217,152,203,122,110, 56, 0,255,
+ 0, 0, 0, 0, 62, 0,197,229,188,217, 91,211, 62, 29, 14, 71,184,179,175, 93, 69, 66, 2,255, 0, 0, 0, 0,188,164, 23,249,
+188,217, 91,211, 62, 29, 14, 71, 71, 77,175, 93, 69, 66, 2,255, 0, 0, 0, 0, 61,182,231, 88, 61,121,154,159, 62, 32,201,179,
+151,181,255,104, 74, 51, 2,255, 0, 0, 0, 0, 60,134,121,207, 61,121,154,159, 62, 32,201,179,104, 75,255,104, 74, 51, 2,255,
+ 0, 0, 0, 0, 61,242,158, 25, 61,121,154,159, 62, 73,215, 88,171, 78,255,150, 95,246, 2,255, 0, 0, 0, 0,188, 80,194,110,
+ 61,121,154,159, 62, 73,215, 88, 84,178,255,150, 95,246, 2,255, 0, 0, 0, 0, 62, 41,211,138, 61,121,154,159, 62, 99,247, 77,
+133,152,254,153, 37, 98, 0,255, 0, 0, 0, 0,189,118, 66,143, 61,121,154,159, 62, 99,247, 77,122,104,254,153, 37, 98, 0,255,
+ 0, 0, 0, 0, 62, 56,193, 58, 61,206,232,154, 62, 99,247, 77,170, 24, 88, 13, 35, 89, 0,255, 0, 0, 0, 0,189,152,252,168,
+ 61,206,232,154, 62, 99,247, 77, 85,232, 88, 13, 35, 89, 0,255, 0, 0, 0, 0, 62, 23, 42,109, 62, 5, 79,173, 62, 73,215, 88,
+200,249, 65,221, 94,244, 2,255, 0, 0, 0, 0,189, 43,158, 31, 62, 5, 79,173, 62, 73,215, 88, 55, 7, 65,221, 94,244, 2,255,
+ 0, 0, 0, 0, 62, 0,197,229, 62, 27,180, 54, 62, 29, 14, 71,186, 51, 78, 86, 73, 78, 2,255, 0, 0, 0, 0,188,164, 23,249,
+ 62, 27,180, 54, 62, 29, 14, 71, 69,205, 78, 86, 73, 78, 2,255, 0, 0, 0, 0, 62, 94, 19,115, 62, 65, 6,111, 62, 14, 32,150,
+ 11, 2,107,152, 68,114, 2,255, 0, 0, 0, 0,189,227,161, 26, 62, 65, 6,111, 62, 14, 32,150,244,254,107,152, 68,114, 2,255,
+ 0, 0, 0, 0, 62, 94, 19,115, 62, 35, 43, 14, 62, 62,165, 20, 14,201, 91,180, 88, 14, 2,255, 0, 0, 0, 0,189,227,161, 26,
+ 62, 35, 43, 14, 62, 62,165, 20,241, 55, 91,180, 88, 14, 2,255, 0, 0, 0, 0, 62, 94, 19,115, 61,236,195,250, 62, 92,128,116,
+ 2,134,125, 29, 26,228, 0,255, 0, 0, 0, 0,189,227,161, 26, 61,236,195,250, 62, 92,128,116,253,122,125, 29, 26,228, 0,255,
+ 0, 0, 0, 0, 62,131,144,140, 61,206,232,154, 62, 85, 9,156, 93, 54, 85, 67, 20,154, 0,255, 0, 0, 0, 0,190, 26,222, 50,
+ 61,206,232,154, 62, 85, 9,156,162,202, 85, 67, 20,154, 0,255, 0, 0, 0, 0, 62,146,126, 61, 62, 5, 79,173, 62, 47,183, 99,
+ 76,241, 60,161, 82, 97, 2,255, 0, 0, 0, 0,190, 56,185,147, 62, 5, 79,173, 62, 47,183, 99,179, 15, 60,161, 82, 97, 2,255,
+ 0, 0, 0, 0, 62,157,176,129, 62, 27,180, 54, 61,246,238,244, 83,179, 71,157, 65, 45, 2,255, 0, 0, 0, 0,190, 79, 30, 28,
+ 62, 27,180, 54, 61,246,238,244,172, 77, 71,157, 65, 45, 2,255, 0, 0, 0, 0, 62,176, 89,157, 61,121,154,159, 61,232, 1, 67,
+111, 40,255,113, 63,117, 2,255, 0, 0, 0, 0,190,116,112, 84, 61,121,154,159, 61,232, 1, 67,144,216,255,113, 63,117, 2,255,
+ 0, 0, 0, 0, 62,161,107,237, 61,121,154,159, 62, 40, 64,139,100, 48,255,154, 79,167, 2,255, 0, 0, 0, 0,190, 86,148,244,
+ 61,121,154,159, 62, 40, 64,139,155,208,255,154, 79,167, 2,255, 0, 0, 0, 0, 62,139, 7,100, 61,121,154,159, 62, 81, 78, 48,
+126,117,254,181, 19,185, 0,255, 0, 0, 0, 0,190, 41,203,227, 61,121,154,159, 62, 81, 78, 48,129,139,254,181, 19,185, 0,255,
+ 0, 0, 0, 0, 62,140,229, 26, 61,121,154,159, 62, 88,197, 8,120,160,254,106, 42,198, 2,255, 0, 0, 0, 0,190, 45,135, 79,
+ 61,121,154,159, 62, 88,197, 8,135, 96,254,106, 42,198, 2,255, 0, 0, 0, 0, 62,133,110, 66, 61,214, 95,114, 62, 92,128,116,
+ 93,173, 74,126, 45, 93, 2,255, 0, 0, 0, 0,190, 30,153,158, 61,214, 95,114, 62, 92,128,116,162, 83, 74,126, 45, 93, 2,255,
+ 0, 0, 0, 0, 62, 94, 19,115, 61,251,177,170, 62,103,178,185, 11, 9,115, 31, 54,216, 2,255, 0, 0, 0, 0,189,227,161, 26,
+ 61,251,177,170, 62,103,178,185,244,247,115, 31, 54,216, 2,255, 0, 0, 0, 0, 62, 53, 5,206, 61,214, 95,114, 62,111, 41,145,
+181, 9, 80,184, 65, 43, 2,255, 0, 0, 0, 0,189,145,133,208, 61,214, 95,114, 62,111, 41,145, 74,247, 80,184, 65, 43, 2,255,
+ 0, 0, 0, 0, 62, 34, 92,178, 61,121,154,159, 62,111, 41,145,146,116,254, 57, 66, 43, 2,255, 0, 0, 0, 0,189, 88,103, 48,
+ 61,121,154,159, 62,111, 41,145,109,140,254, 57, 66, 43, 2,255, 0, 0, 0, 0, 62, 53, 5,206, 60,170,200, 22, 62,111, 41,145,
+182, 34,173,181, 64,115, 2,255, 0, 0, 0, 0,189,145,133,208, 60,170,200, 22, 62,111, 41,145, 73,222,173,181, 64,115, 2,255,
+ 0, 0, 0, 0, 62, 94, 19,115, 61,121,154,159, 62,114,228,253, 24, 74,255,139,125,171, 2,255, 0, 0, 0, 0,189,227,161, 26,
+ 61,121,154,159, 62,114,228,253,231,182,255,139,125,171, 2,255, 0, 0, 0, 0, 62, 94, 19,115, 59, 43,249,149, 62,103,178,185,
+ 10,218,140,140, 54, 45, 2,255, 0, 0, 0, 0,189,227,161, 26, 59, 43,249,149, 62,103,178,185,245, 38,140,140, 54, 45, 2,255,
+ 0, 0, 0, 0, 62,133,110, 66, 60,170,200, 22, 62, 92,128,116, 92,141,179,203, 44,210, 2,255, 0, 0, 0, 0,190, 30,153,158,
+ 60,170,200, 22, 62, 92,128,116,163,115,179,203, 44,210, 2,255, 0, 0, 0, 0, 61, 88,133,203, 62, 23,248,202, 62, 73,215, 88,
+ 0, 0,124, 43, 31, 17, 0,255, 0, 0, 0, 0, 61, 88,133,203, 61,229, 77, 34, 62,111, 41,145, 0, 0,249, 63,127,209, 0,255,
+ 0, 0, 0, 0, 61, 88,133,203,190,188,254,150, 62, 70, 27,236, 0, 0,251,204,127,237, 0,255, 0, 0, 0, 0, 61, 88,133,203,
+190, 78, 79,191, 62, 92,128,116, 0, 0,150, 33, 71,238, 2,255, 0, 0, 0, 0, 61, 88,133,203,190, 14,221,146, 62, 99,247, 77,
+ 0, 0,100, 28, 79,192, 0,255, 0, 0, 0, 0, 61, 88,133,203,190,211, 99, 30, 62, 62,165, 20, 0, 0,142,184, 59,147, 2,255,
+ 0, 0, 0, 0, 61, 88,133,203, 62, 12,198,133, 62, 6,169,190, 0, 0,103,143, 75, 57, 0,255, 0, 0, 0, 0, 61, 88,133,203,
+ 62, 91, 38, 99, 61,239,120, 28, 0, 0, 78,115,101, 34, 0,255, 0, 0, 0, 0, 61, 88,133,203, 62,187,243, 16,190,206,250,170,
+ 0, 0,110,190,191,212, 2,255, 0, 0, 0, 0, 61, 88,133,203, 62, 87,106,247,191, 11,224,178, 0, 0, 35,144,133, 12, 3,255,
+ 0, 0, 0, 0, 61, 88,133,203,188,157,165, 18,191, 9, 20, 33, 0, 0,214,194,134,213, 2,255, 0, 0, 0, 0, 61, 88,133,203,
+190,108, 43, 32,190,160, 83,227, 0, 0,134,154,215,113, 2,255, 0, 0, 0, 0, 62, 23, 42,109,190, 14,221,146, 61,232, 1, 67,
+113,144,198,122, 13, 79, 0,255, 0, 0, 0, 0,189, 43,158, 31,190, 14,221,146, 61,232, 1, 67,142,112,198,122, 13, 79, 0,255,
+ 0, 0, 0, 0, 62, 75,106, 87,190,131, 37,138, 61,239,120, 28,122,196, 31, 19, 18,152, 2,255, 0, 0, 0, 0,189,190, 78,225,
+190,131, 37,138, 61,239,120, 28,133, 60, 31, 19, 18,152, 2,255, 0, 0, 0, 0, 62, 94, 19,115,190,192,186, 2, 61,239,120, 28,
+125,167, 12,146, 20,226, 0,255, 0, 0, 0, 0,189,227,161, 26,190,192,186, 2, 61,239,120, 28,130, 89, 12,146, 20,226, 0,255,
+ 0, 0, 0, 0, 62,101,138, 75,190,239, 96,200, 61,202, 37,227,124,113,242,142, 26,196, 2,255, 0, 0, 0, 0,189,242,142,203,
+190,239, 96,200, 61,202, 37,227,131,143,242,142, 26,196, 2,255, 0, 0, 0, 0, 62, 82,225, 47,190,252,112,195, 61,194,175, 10,
+ 79,159,159, 44, 25,210, 2,255, 0, 0, 0, 0,189,205, 60,146,190,252,112,195, 61,194,175, 10,176, 97,159, 44, 25,210, 2,255,
+ 0, 0, 0, 0, 62, 11,248, 41,191, 1, 4,242, 61,224,138,107, 19,143,131, 13, 19,178, 2,255, 0, 0, 0, 0,188,253,170, 27,
+191, 1, 4,242, 61,224,138,107,236,113,131, 13, 19,178, 2,255, 0, 0, 0, 0, 61, 88,133,203,191, 2,226,168, 61,246,238,244,
+ 0, 0,130, 75, 24, 21, 2,255, 0, 0, 0, 0, 62,131,144,140,189,240,242, 18, 61,202, 37,227, 47,114,137,117, 8,232, 2,255,
+ 0, 0, 0, 0,190, 26,222, 50,189,240,242, 18, 61,202, 37,227,208,142,137,117, 8,232, 2,255, 0, 0, 0, 0, 62,178, 55, 83,
+189,143,233, 23, 61,209,156,187, 77, 25,154,198, 13,214, 2,255, 0, 0, 0, 0,190,120, 43,193,189,143,233, 23, 61,209,156,187,
+178,231,154,198, 13,214, 2,255, 0, 0, 0, 0, 62,224,222, 26, 60,140,236,182, 61,112, 21, 49,113,216,198,247, 12,255, 2,255,
+ 0, 0, 0, 0,190,170,188,167, 60,140,236,182, 61,112, 21, 49,142, 40,198,247, 12,255, 2,255, 0, 0, 0, 0, 62,232, 84,243,
+ 62, 23,248,202, 62, 2,238, 82,113,104, 51, 31, 30, 32, 2,255, 0, 0, 0, 0,190,178, 51,128, 62, 23,248,202, 62, 2,238, 82,
+142,152, 51, 31, 30, 32, 2,255, 0, 0, 0, 0, 62,196,224,112, 62, 50, 24,190, 62, 17,220, 2, 64,216,106,225, 27,121, 0,255,
+ 0, 0, 0, 0,190,142,190,253, 62, 50, 24,190, 62, 17,220, 2,191, 40,106,225, 27,121, 0,255, 0, 0, 0, 0, 62,144,160,134,
+ 62,106, 20, 20, 62, 47,183, 99, 75,137,101, 82, 20, 70, 0,255, 0, 0, 0, 0,190, 52,254, 39, 62,106, 20, 20, 62, 47,183, 99,
+180,119,101, 82, 20, 70, 0,255, 0, 0, 0, 0, 62, 79, 37,195, 62,154, 92, 67, 62, 70, 27,236, 38,241,119, 19, 26, 54, 2,255,
+ 0, 0, 0, 0,189,197,197,186, 62,154, 92, 67, 62, 70, 27,236,217, 15,119, 19, 26, 54, 2,255, 0, 0, 0, 0, 62, 0,197,229,
+ 62,145, 7,181, 62, 81, 78, 48,175, 21, 96, 54, 24, 12, 2,255, 0, 0, 0, 0,188,164, 23,249, 62,145, 7,181, 62, 81, 78, 48,
+ 80,235, 96, 54, 24, 12, 2,255, 0, 0, 0, 0, 61,167,249,168, 62, 53,212, 42, 62, 77,146,196,155,174, 76,128, 21,151, 0,255,
+ 0, 0, 0, 0, 60,194, 48,144, 62, 53,212, 42, 62, 77,146,196,100, 82, 76,128, 21,151, 0,255, 0, 0, 0, 0, 62, 4,129, 81,
+ 62, 16,129,241, 62, 88,197, 8, 25, 0,237, 4,124, 22, 0,255, 0, 0, 0, 0,188,193,243, 89, 62, 16,129,241, 62, 88,197, 8,
+231, 0,237, 4,124, 22, 0,255, 0, 0, 0, 0, 61,227,176,105, 61,184,132, 17, 62, 85, 9,156,255,160,232,126,125,209, 0,255,
+ 0, 0, 0, 0,187,178,169,214, 61,184,132, 17, 62, 85, 9,156, 0, 96,232,126,125,209, 0,255, 0, 0, 0, 0,189, 43,158, 31,
+188, 8, 37,223, 62, 73,215, 88, 38,104,203,122,110, 56, 0,255, 0, 0, 0, 0, 62,105, 69,184,189, 55, 82, 92, 62, 55, 46, 59,
+ 34,106,200,119,110, 16, 0,255, 0, 0, 0, 0,189,250, 5,163,189, 55, 82, 92, 62, 55, 46, 59,221,150,200,119,110, 16, 0,255,
+ 0, 0, 0, 0, 62,144,160,134,188,187,128,115, 62, 40, 64,139, 55,161,207, 60,104,115, 0,255, 0, 0, 0, 0,190, 52,254, 39,
+188,187,128,115, 62, 40, 64,139,200, 95,207, 60,104,115, 0,255, 0, 0, 0, 0, 62,176, 89,157, 61, 17, 26,205, 62, 29, 14, 71,
+ 58,181,226,123,109,214, 0,255, 0, 0, 0, 0,190,116,112, 84, 61, 17, 26,205, 62, 29, 14, 71,197, 75,226,123,109,214, 0,255,
+ 0, 0, 0, 0, 62,180, 21, 9, 61,177, 13, 57, 62, 29, 14, 71, 49,157,230, 61,115, 36, 0,255, 0, 0, 0, 0,190,123,231, 45,
+ 61,177, 13, 57, 62, 29, 14, 71,206, 99,230, 61,115, 36, 0,255, 0, 0, 0, 0, 62,170,192,123, 61,251,177,170, 62, 36,133, 31,
+ 39,206,234,175,119,196, 0,255, 0, 0, 0, 0,190,105, 62, 16, 61,251,177,170, 62, 36,133, 31,216, 50,234,175,119,196, 0,255,
+ 0, 0, 0, 0, 62,129,178,214, 62, 27,180, 54, 62, 62,165, 20, 24, 62,255, 85,125,173, 0,255, 0, 0, 0, 0,190, 23, 34,198,
+ 62, 27,180, 54, 62, 62,165, 20,231,194,255, 85,125,173, 0,255, 0, 0, 0, 0, 62, 45,142,246, 62, 42,161,230, 62, 81, 78, 48,
+ 31,251,247, 40,123,158, 0,255, 0, 0, 0, 0,189,130,152, 32, 62, 42,161,230, 62, 81, 78, 48,224, 5,247, 40,123,158, 0,255,
+ 0, 0, 0, 0, 61, 88,133,203,190,209,133,104, 62, 70, 27,236, 0, 0,210,148,119,170, 0,255, 0, 0, 0, 0, 61,212,194,185,
+190,198, 83, 36, 62, 70, 27,236, 19, 39,222, 65,121,248, 0,255, 0, 0, 0, 0, 58,240,196,191,190,198, 83, 36, 62, 70, 27,236,
+236,217,222, 65,121,248, 0,255, 0, 0, 0, 0, 61,220, 57,145,190,226, 80,207, 62, 58,233,167, 2,134,217,132,122, 12, 0,255,
+ 0, 0, 0, 0,186,236,241, 77,190,226, 80,207, 62, 58,233,167,253,122,217,132,122, 12, 0,255, 0, 0, 0, 0, 61,167,249,168,
+190,237,131, 19, 62, 51,114,207,252, 13,214,169,121, 18, 0,255, 0, 0, 0, 0, 60,194, 48,144,190,237,131, 19, 62, 51,114,207,
+ 3,243,214,169,121, 18, 0,255, 0, 0, 0, 0, 61, 88,133,203,190,239, 96,200, 62, 47,183, 99, 0, 0,219,150,122,180, 0,255,
+ 0, 0, 0, 0, 61, 88,133,203,190, 18,152,254, 62, 77,146,196, 0, 0, 97, 46, 83, 76, 0,255, 0, 0, 0, 0, 61, 88,133,203,
+189,240,242, 18, 62, 73,215, 88, 0, 0,104,197, 73,134, 0,255, 0, 0, 0, 0, 61,205, 75,225,189,248,104,235, 62, 73,215, 88,
+ 36, 52, 53, 2,110,187, 0,255, 0, 0, 0, 0, 59,179,158,179,189,248,104,235, 62, 73,215, 88,219,204, 53, 2,110,187, 0,255,
+ 0, 0, 0, 0, 61,227,176,105,190, 33,134,174, 62, 77,146,196, 95,187,212, 14, 72,182, 0,255, 0, 0, 0, 0,187,178,169,214,
+190, 33,134,174, 62, 77,146,196,160, 69,212, 14, 72,182, 0,255, 0, 0, 0, 0, 61,190, 94, 48,190, 63, 98, 15, 62, 73,215, 88,
+ 64,117,207,117, 99, 90, 0,255, 0, 0, 0, 0, 60, 81, 60,220,190, 63, 98, 15, 62, 73,215, 88,191,139,207,117, 99, 90, 0,255,
+ 0, 0, 0, 0, 62,116,119,252,189,151, 95,239, 62, 40, 64,139, 49,103,196,157,102, 13, 0,255, 0, 0, 0, 0,190, 8, 53, 22,
+189,151, 95,239, 62, 40, 64,139,206,153,196,157,102, 13, 0,255, 0, 0, 0, 0, 62,174,123,231,188,217, 91,211, 62, 17,220, 2,
+ 59,142,204,107,100,223, 2,255, 0, 0, 0, 0,190,112,180,232,188,217, 91,211, 62, 17,220, 2,196,114,204,107,100,223, 2,255,
+ 0, 0, 0, 0, 62,200,155,220, 61, 46,246, 45, 62, 6,169,190, 66,102,217, 11,102, 65, 0,255, 0, 0, 0, 0,190,146,122,105,
+ 61, 46,246, 45, 62, 6,169,190,189,154,217, 11,102, 65, 0,255, 0, 0, 0, 0, 62,204, 87, 72, 61,251,177,170, 62, 32,201,179,
+ 54, 87,228,142,112,151, 0,255, 0, 0, 0, 0,190,150, 53,213, 61,251,177,170, 62, 32,201,179,201,169,228,142,112,151, 0,255,
+ 0, 0, 0, 0, 62,191, 71, 78, 62, 16,129,241, 62, 66, 96,128, 42, 82,247, 97,120,125, 2,255, 0, 0, 0, 0,190,137, 37,219,
+ 62, 16,129,241, 62, 66, 96,128,213,174,247, 97,120,125, 2,255, 0, 0, 0, 0, 62,131,144,140, 62, 79,244, 31, 62, 99,247, 77,
+ 41,192,254,216,120,253, 0,255, 0, 0, 0, 0,190, 26,222, 50, 62, 79,244, 31, 62, 99,247, 77,214, 64,254,216,120,253, 0,255,
+ 0, 0, 0, 0, 62, 75,106, 87, 62,124,189, 48, 62,118,160,105, 28,217, 7, 53,124,126, 0,255, 0, 0, 0, 0,189,190, 78,225,
+ 62,124,189, 48, 62,118,160,105,227, 39, 7, 53,124,126, 0,255, 0, 0, 0, 0, 62, 23, 42,109, 62,113,138,236, 62,126, 23, 65,
+255,125, 5, 44,127,227, 0,255, 0, 0, 0, 0,189, 43,158, 31, 62,113,138,236, 62,126, 23, 65, 0,131, 5, 44,127,227, 0,255,
+ 0, 0, 0, 0, 61,205, 75,225, 62, 23,248,202, 62,122, 91,213,238,130, 2, 89,126,197, 0,255, 0, 0, 0, 0, 59,179,158,179,
+ 62, 23,248,202, 62,122, 91,213, 17,126, 2, 89,126,197, 0,255, 0, 0, 0, 0, 61,227,176,105,189,203,159,217, 62,107,110, 37,
+ 23,115,230, 27,123, 34, 0,255, 0, 0, 0, 0,187,178,169,214,189,203,159,217, 62,107,110, 37,232,141,230, 27,123, 34, 0,255,
+ 0, 0, 0, 0, 62, 26,229,218,190,133, 3, 64, 62, 58,233,167, 74,212, 14, 28,102,225, 2,255, 0, 0, 0, 0,189, 58,139,207,
+190,133, 3, 64, 62, 58,233,167,181, 44, 14, 28,102,225, 2,255, 0, 0, 0, 0, 62, 45,142,246,190,194,151,184, 62, 47,183, 99,
+ 72,235,252, 17,105, 31, 2,255, 0, 0, 0, 0,189,130,152, 32,190,194,151,184, 62, 47,183, 99,183, 21,252, 17,105, 31, 2,255,
+ 0, 0, 0, 0, 62, 53, 5,206,190,222,149, 99, 62, 36,133, 31, 66,179,225,197,104,249, 2,255, 0, 0, 0, 0,189,145,133,208,
+190,222,149, 99, 62, 36,133, 31,189, 77,225,197,104,249, 2,255, 0, 0, 0, 0, 62, 38, 24, 30,190,244,249,234, 62, 21,151,111,
+ 44, 62,183, 4, 95, 98, 2,255, 0, 0, 0, 0,189,103, 84,224,190,244,249,234, 62, 21,151,111,211,194,183, 4, 95, 98, 2,255,
+ 0, 0, 0, 0, 62, 4,129, 81,190,248,181, 86, 62, 21,151,111, 19,155,158, 52, 80, 54, 2,255, 0, 0, 0, 0,188,193,243, 89,
+190,248,181, 86, 62, 21,151,111,236,101,158, 52, 80, 54, 2,255, 0, 0, 0, 0, 61, 88,133,203,190,252,112,195, 62, 25, 82,219,
+ 0, 0,154,201, 78, 88, 2,255, 0, 0, 0, 0, 61, 88,133,203,188,247, 55, 52, 62, 66, 96,128, 0, 0,252, 2,127,239, 0,255,
+ 0, 0, 0, 0, 61, 88,133,203, 61, 61,227,222, 62, 85, 9,156, 0, 0,227,112,124,196, 0,255, 0, 0, 0, 0, 62, 82,225, 47,
+ 62, 46, 93, 82, 62, 73,215, 88, 21, 58,254,234,126, 56, 0,255, 0, 0, 0, 0,189,205, 60,146, 62, 46, 93, 82, 62, 73,215, 88,
+234,198,254,234,126, 56, 0,255, 0, 0, 0, 0, 62, 4,129, 81, 60, 94, 34,170, 62, 77,146,196,214, 37,232,110,118,163, 0,255,
+ 0, 0, 0, 0,188,193,243, 89, 60, 94, 34,170, 62, 77,146,196, 41,219,232,110,118,163, 0,255, 0, 0, 0, 0, 61,235, 39, 65,
+ 61, 61,227,222, 62, 81, 78, 48,232,150,230,127,123, 57, 0,255, 0, 0, 0, 0,188, 21, 11,173, 61, 61,227,222, 62, 81, 78, 48,
+ 23,106,230,127,123, 57, 0,255, 0, 0, 0, 0, 61,220, 57,145,190,190,220, 76, 62, 70, 27,236, 20,117,248,197,126, 36, 0,255,
+ 0, 0, 0, 0,186,236,241, 77,190,190,220, 76, 62, 70, 27,236,235,139,248,197,126, 36, 0,255, 0, 0, 0, 0, 61,182,231, 88,
+190,133, 3, 64, 62, 77,146,196, 19, 43, 0,128,126,141, 2,255, 0, 0, 0, 0, 60,134,121,207,190,133, 3, 64, 62, 77,146,196,
+236,213, 0,128,126,141, 2,255, 0, 0, 0, 0, 61, 88,133,203,190,133, 3, 64, 62, 77,146,196, 0, 0,255,122,127,254, 0,255,
+ 0, 0, 0, 0, 61, 88,133,203,190, 82, 11, 43, 62, 73,215, 88, 0, 0,184,121,106, 36, 0,255, 0, 0, 0, 0, 61,197,213, 8,
+190, 55,235, 55, 62, 92,128,116, 66,167,160,139, 53, 45, 2,255, 0, 0, 0, 0, 60, 21,134, 27,190, 55,235, 55, 62, 92,128,116,
+189, 89,160,139, 53, 45, 2,255, 0, 0, 0, 0, 61,235, 39, 65,190, 33,134,174, 62, 99,247, 77,118,133,224,215, 36,239, 2,255,
+ 0, 0, 0, 0,188, 21, 11,173,190, 33,134,174, 62, 99,247, 77,137,123,224,215, 36,239, 2,255, 0, 0, 0, 0, 61,212,194,185,
+189,233,123, 57, 62, 92,128,116, 81,167, 95,141, 24, 49, 2,255, 0, 0, 0, 0, 58,240,196,191,189,233,123, 57, 62, 92,128,116,
+174, 89, 95,141, 24, 49, 2,255, 0, 0, 0, 0, 61,145,149, 31,189,226, 4, 97, 62, 92,128,116,200,189,108,160, 39, 26, 2,255,
+ 0, 0, 0, 0, 61, 13,225, 89,189,226, 4, 97, 62, 92,128,116, 55, 67,108,160, 39, 26, 2,255, 0, 0, 0, 0, 61, 88,133,203,
+190, 22, 84,106, 62,114,228,253, 0, 0, 23, 42,125,225, 0,255, 0, 0, 0, 0, 61,153, 11,247,189,248,104,235, 62,107,110, 37,
+231,186, 78, 89, 98, 66, 2,255, 0, 0, 0, 0, 60,253,231, 82,189,248,104,235, 62,107,110, 37, 24, 70, 78, 89, 98, 66, 2,255,
+ 0, 0, 0, 0, 61,197,213, 8,189,255,223,195, 62,107,110, 37, 43, 88, 62,134,102,237, 2,255, 0, 0, 0, 0, 60, 21,134, 27,
+189,255,223,195, 62,107,110, 37,212,168, 62,134,102,237, 2,255, 0, 0, 0, 0, 61,212,194,185,190, 33,134,174, 62,114,228,253,
+ 46,247,233, 89,116,228, 2,255, 0, 0, 0, 0, 58,240,196,191,190, 33,134,174, 62,114,228,253,209, 9,233, 89,116,228, 2,255,
+ 0, 0, 0, 0, 61,182,231, 88,190, 44,184,243, 62,103,178,185, 31, 46,181,198, 99,128, 2,255, 0, 0, 0, 0, 60,134,121,207,
+190, 44,184,243, 62,103,178,185,224,210,181,198, 99,128, 2,255, 0, 0, 0, 0, 61, 88,133,203,190, 63, 98, 15, 62,103,178,185,
+ 0, 0,191,185,110,175, 2,255, 0, 0, 0, 0, 62, 49, 74, 98,190, 74,148, 83, 61,224,138,107,120, 23, 41, 34, 16, 99, 0,255,
+ 0, 0, 0, 0,189,138, 14,248,190, 74,148, 83, 61,224,138,107,135,233, 41, 34, 16, 99, 0,255, 0, 0, 0, 0, 62, 4,129, 81,
+190, 40,253,134, 62, 58,233,167, 80,251,250, 26, 98,241, 0,255, 0, 0, 0, 0,188,193,243, 89,190, 40,253,134, 62, 58,233,167,
+175, 5,250, 26, 98,241, 0,255, 0, 0, 0, 0, 62, 11,248, 41,190, 74,148, 83, 62, 58,233,167, 83,215, 16,153, 95, 71, 0,255,
+ 0, 0, 0, 0,188,253,170, 27,190, 74,148, 83, 62, 58,233,167,172, 41, 16,153, 95, 71, 0,255, 0, 0, 0, 0, 62, 38, 24, 30,
+190, 44,184,243, 61,224,138,107,122, 24, 35, 67, 15, 64, 0,255, 0, 0, 0, 0,189,103, 84,224,190, 44,184,243, 61,224,138,107,
+133,232, 35, 67, 15, 64, 0,255, 0, 0, 0, 0, 61, 88,133,203,190,235,165, 93, 62, 47,183, 99, 0, 0, 86,139, 94, 77, 0,255,
+ 0, 0, 0, 0, 61,153, 11,247,190,233,199,167, 62, 47,183, 99,206,144, 70,200, 94,125, 0,255, 0, 0, 0, 0, 60,253,231, 82,
+190,233,199,167, 62, 47,183, 99, 49,112, 70,200, 94,125, 0,255, 0, 0, 0, 0, 61,197,213, 8,190,222,149, 99, 62, 58,233,167,
+164,253, 17,109, 88, 75, 0,255, 0, 0, 0, 0, 60, 21,134, 27,190,222,149, 99, 62, 58,233,167, 91, 3, 17,109, 88, 75, 0,255,
+ 0, 0, 0, 0, 61,197,213, 8,190,203,236, 70, 62, 66, 96,128,225,141,168, 87, 88, 39, 0,255, 0, 0, 0, 0, 60, 21,134, 27,
+190,203,236, 70, 62, 66, 96,128, 30,115,168, 87, 88, 39, 0,255, 0, 0, 0, 0, 61, 88,133,203,190,213, 64,212, 62, 32,201,179,
+ 0, 0,159, 20, 83,153, 0,255, 0, 0, 0, 0, 61,197,213, 8,190,205,201,252, 62, 36,133, 31,230, 5,177,250, 98, 20, 0,255,
+ 0, 0, 0, 0, 60, 21,134, 27,190,205,201,252, 62, 36,133, 31, 25,251,177,250, 98, 20, 0,255, 0, 0, 0, 0, 61,197,213, 8,
+190,220,183,173, 62, 25, 82,219,152, 18, 24, 8, 70,188, 0,255, 0, 0, 0, 0, 60, 21,134, 27,190,220,183,173, 62, 25, 82,219,
+103,238, 24, 8, 70,188, 0,255, 0, 0, 0, 0, 61,153, 11,247,190,230, 12, 59, 62, 21,151,111,222, 26, 49,242,112,221, 0,255,
+ 0, 0, 0, 0, 60,253,231, 82,190,230, 12, 59, 62, 21,151,111, 33,230, 49,242,112,221, 0,255, 0, 0, 0, 0, 61, 88,133,203,
+190,231,233,241, 62, 21,151,111, 0, 0, 60, 18,113, 5, 0,255, 0, 0, 0, 0, 62, 8, 60,189, 61, 76,209,142, 62, 92,128,116,
+ 30, 4,244, 93,123,225, 0,255, 0, 0, 0, 0,188,223,206,186, 61, 76,209,142, 62, 92,128,116,225,252,244, 93,123,225, 0,255,
+ 0, 0, 0, 0, 62, 15,179,149, 60,170,200, 22, 62, 88,197, 8, 9, 71,251, 34,127,144, 0,255, 0, 0, 0, 0,189, 13,194,190,
+ 60,170,200, 22, 62, 88,197, 8,246,185,251, 34,127,144, 0,255, 0, 0, 0, 0, 62, 86,156,155, 62, 23,248,202, 62, 81, 78, 48,
+ 17, 81, 2, 74,126,204, 0,255, 0, 0, 0, 0,189,212,179,106, 62, 23,248,202, 62, 81, 78, 48,238,175, 2, 74,126,204, 0,255,
+ 0, 0, 0, 0, 62, 56,193, 58, 62, 20, 61, 94, 62, 88,197, 8, 25,218,253,177,125, 86, 2,255, 0, 0, 0, 0,189,152,252,168,
+ 62, 20, 61, 94, 62, 88,197, 8,230, 38,253,177,125, 86, 2,255, 0, 0, 0, 0, 62,127,170, 64, 62, 9, 11, 25, 62, 88,197, 8,
+ 21,182,240,210,125, 57, 2,255, 0, 0, 0, 0,190, 19,103, 90, 62, 9, 11, 25, 62, 88,197, 8,234, 74,240,210,125, 57, 2,255,
+ 0, 0, 0, 0, 62,161,107,237, 61,229, 77, 34, 62, 51,114,207, 28,143,237,249,123,117, 0,255, 0, 0, 0, 0,190, 86,148,244,
+ 61,229, 77, 34, 62, 51,114,207,227,113,237,249,123,117, 0,255, 0, 0, 0, 0, 62,167, 5, 15, 61,169,150, 97, 62, 47,183, 99,
+ 15,209,246,217,126,175, 0,255, 0, 0, 0, 0,190, 97,199, 56, 61,169,150, 97, 62, 47,183, 99,240, 47,246,217,126,175, 0,255,
+ 0, 0, 0, 0, 62,165, 39, 89, 61, 32, 8,125, 62, 43,251,247, 24,177,253,190,125,146, 0,255, 0, 0, 0, 0,190, 94, 11,204,
+ 61, 32, 8,125, 62, 43,251,247,231, 79,253,190,125,146, 0,255, 0, 0, 0, 0, 62,140,229, 26,187,152,222, 60, 62, 62,165, 20,
+ 33, 20, 2, 75,123,160, 0,255, 0, 0, 0, 0,190, 45,135, 79,187,152,222, 60, 62, 62,165, 20,222,236, 2, 75,123,160, 0,255,
+ 0, 0, 0, 0, 62,105, 69,184,188,187,128,115, 62, 73,215, 88, 26, 85,248,238,125, 14, 0,255, 0, 0, 0, 0,189,250, 5,163,
+188,187,128,115, 62, 73,215, 88,229,171,248,238,125, 14, 0,255, 0, 0, 0, 0, 62, 34, 92,178,186,133,194,226, 62, 92,128,116,
+ 7, 8,250,142,127,175, 0,255, 0, 0, 0, 0,189, 88,103, 48,186,133,194,226, 62, 92,128,116,248,248,250,142,127,175, 0,255,
+ 0, 0, 0, 0, 62, 11,248, 41, 61,177, 13, 57, 62, 92,128,116, 34,169,240, 2,122, 43, 0,255, 0, 0, 0, 0,188,253,170, 27,
+ 61,177, 13, 57, 62, 92,128,116,221, 87,240, 2,122, 43, 0,255, 0, 0, 0, 0, 62, 26,229,218, 61,251,177,170, 62, 92,128,116,
+ 27,126,239,108,123,231, 0,255, 0, 0, 0, 0,189, 58,139,207, 61,251,177,170, 62, 92,128,116,228,130,239,108,123,231, 0,255,
+ 0, 0, 0, 0, 62, 38, 24, 30, 61,236,195,250, 62, 81, 78, 48, 64,226,207, 13, 98,224, 0,255, 0, 0, 0, 0,189,103, 84,224,
+ 61,236,195,250, 62, 81, 78, 48,191, 30,207, 13, 98,224, 0,255, 0, 0, 0, 0, 62, 19,111, 1, 61,177, 13, 57, 62, 81, 78, 48,
+ 96, 29,229,169, 80, 81, 0,255, 0, 0, 0, 0,189, 28,176,110, 61,177, 13, 57, 62, 81, 78, 48,159,227,229,169, 80, 81, 0,255,
+ 0, 0, 0, 0, 62, 41,211,138, 59,205,106, 77, 62, 81, 78, 48, 55, 36, 71,122, 90,188, 0,255, 0, 0, 0, 0,189,118, 66,143,
+ 59,205,106, 77, 62, 81, 78, 48,200,220, 71,122, 90,188, 0,255, 0, 0, 0, 0, 62,105, 69,184,188, 67,220,161, 62, 66, 96,128,
+ 21, 76, 78, 90, 98,241, 0,255, 0, 0, 0, 0,189,250, 5,163,188, 67,220,161, 62, 66, 96,128,234,180, 78, 90, 98,241, 0,255,
+ 0, 0, 0, 0, 62,137, 41,174, 59, 43,249,149, 62, 55, 46, 59,245, 85, 69, 69,107, 25, 0,255, 0, 0, 0, 0,190, 38, 16,118,
+ 59, 43,249,149, 62, 55, 46, 59, 10,171, 69, 69,107, 25, 0,255, 0, 0, 0, 0, 62,157,176,129, 61, 61,227,222, 62, 40, 64,139,
+223,232, 29,211,120, 67, 0,255, 0, 0, 0, 0,190, 79, 30, 28, 61, 61,227,222, 62, 40, 64,139, 32, 24, 29,211,120, 67, 0,255,
+ 0, 0, 0, 0, 62,159,142, 55, 61,162, 31,137, 62, 40, 64,139,210,148,238,123,118, 95, 0,255, 0, 0, 0, 0,190, 82,217,136,
+ 61,162, 31,137, 62, 40, 64,139, 45,108,238,123,118, 95, 0,255, 0, 0, 0, 0, 62,153,245, 21, 61,214, 95,114, 62, 43,251,247,
+229,216,179,108, 99, 43, 0,255, 0, 0, 0, 0,190, 71,167, 67, 61,214, 95,114, 62, 43,251,247, 26, 40,179,108, 99, 43, 0,255,
+ 0, 0, 0, 0, 62,123,238,212, 62, 5, 79,173, 62, 77,146,196,237,202,158,179, 81, 35, 2,255, 0, 0, 0, 0,190, 15,171,238,
+ 62, 5, 79,173, 62, 77,146,196, 18, 54,158,179, 81, 35, 2,255, 0, 0, 0, 0, 62, 60,124,166, 62, 9, 11, 25, 62, 85, 9,156,
+ 39, 24,212,118,113,214, 2,255, 0, 0, 0, 0,189,160,115,129, 62, 9, 11, 25, 62, 85, 9,156,216,232,212,118,113,214, 2,255,
+ 0, 0, 0, 0, 62, 86,156,155, 62, 12,198,133, 62, 77,146,196, 1,213,193,189,111,208, 0,255, 0, 0, 0, 0,189,212,179,106,
+ 62, 12,198,133, 62, 77,146,196,254, 43,193,189,111,208, 0,255, 0, 0, 0, 0, 62, 23, 42,109, 60,230,126,216, 62, 77,146,196,
+ 84,226, 42,192, 85,187, 0,255, 0, 0, 0, 0,189, 43,158, 31, 60,230,126,216, 62, 77,146,196,171, 30, 42,192, 85,187, 0,255,
+ 0, 0, 0, 0, 62, 19,111, 1, 61, 91,191, 63, 62, 77,146,196,102,235, 2,196, 76, 11, 0,255, 0, 0, 0, 0,189, 28,176,110,
+ 61, 91,191, 63, 62, 77,146,196,153, 21, 2,196, 76, 11, 0,255, 0, 0, 0, 0, 61,212,194,185, 62, 38,230,122, 62, 10,101, 42,
+182,183,104,118,246, 5, 0,255, 0, 0, 0, 0, 58,240,196,191, 62, 38,230,122, 62, 10,101, 42, 73, 73,104,118,246, 5, 0,255,
+ 0, 0, 0, 0, 62, 19,111, 1, 62,131,247,186, 62, 14, 32,150,192,208, 66,221,167, 3, 2,255, 0, 0, 0, 0,189, 28,176,110,
+ 62,131,247,186, 62, 14, 32,150, 63, 48, 66,221,167, 3, 2,255, 0, 0, 0, 0, 62, 86,156,155, 62,137,144,220, 62, 2,238, 82,
+ 9, 59, 90, 89,165,208, 2,255, 0, 0, 0, 0,189,212,179,106, 62,137,144,220, 62, 2,238, 82,246,197, 90, 89,165,208, 2,255,
+ 0, 0, 0, 0, 62,142,194,208, 62, 83,175,139, 61,224,138,107, 37,165,114,104,212,176, 0,255, 0, 0, 0, 0,190, 49, 66,187,
+ 62, 83,175,139, 61,224,138,107,218, 91,114,104,212,176, 0,255, 0, 0, 0, 0, 62,189,105,152, 62, 35, 43, 14, 61,164,211,170,
+ 45, 67,116, 40,227, 1, 0,255, 0, 0, 0, 0,190,135, 72, 37, 62, 35, 43, 14, 61,164,211,170,210,189,116, 40,227, 1, 0,255,
+ 0, 0, 0, 0, 62,217,103, 66, 62, 12,198,133, 61,134,248, 73, 94,100, 79,237,223, 18, 0,255, 0, 0, 0, 0,190,163, 69,207,
+ 62, 12,198,133, 61,134,248, 73,161,156, 79,237,223, 18, 0,255, 0, 0, 0, 0, 62,211,206, 32, 60,200,163,119, 60,211,115,252,
+120,247,221,255,231,165, 0,255, 0, 0, 0, 0,190,157,172,173, 60,200,163,119, 60,211,115,252,135, 9,221,255,231,165, 0,255,
+ 0, 0, 0, 0, 62,170,192,123,189, 85, 45,188, 61, 52, 94,112, 76,155,154,106,242, 19, 0,255, 0, 0, 0, 0,190,105, 62, 16,
+189, 85, 45,188, 61, 52, 94,112,179,101,154,106,242, 19, 0,255, 0, 0, 0, 0, 62,131,144,140,189,196, 41, 0, 61,142,111, 33,
+ 56,204,142, 26, 13,138, 0,255, 0, 0, 0, 0,190, 26,222, 50,189,196, 41, 0, 61,142,111, 33,199, 52,142, 26, 13,138, 0,255,
+ 0, 0, 0, 0, 61, 88,133,203, 62,187,243, 16,188,105,242, 89, 0, 0,106,155, 70,214, 2,255, 0, 0, 0, 0, 61, 88,133,203,
+ 62,208,121,226,190, 62, 7,254, 0, 0,127,243, 3, 82, 2,255, 0, 0, 0, 0, 61, 88,133,203,190, 18,152,254,190,236,214, 11,
+ 0, 0,164, 54,166,204, 3,255, 0, 0, 0, 0, 61, 88,133,203,190,136,190,173,189,124,142,139, 0, 0,129,179,235, 65, 0,255,
+ 0, 0, 0, 0, 61, 88,133,203,191, 1,243,205, 61,134,248, 73, 0, 0,151,182,181,204, 2,255, 0, 0, 0, 0, 61, 88,133,203,
+190,218,217,247, 60, 56, 12,241, 0, 0,221,231,132,162, 2,255, 0, 0, 0, 0, 61, 88,133,203,190,162,222,161, 57,157, 21,147,
+ 0, 0,212, 16,135,201, 0,255, 0, 0, 0, 0, 61, 88,133,203,190,142, 87,207,188,146,212,141, 0, 0,147,245,187, 97, 0,255,
+ 0, 0, 0, 0, 62,230,119, 61, 61,106,172,239,189,253, 43,161,125,164,235,181, 13,156, 0,255, 0, 0, 0, 0,190,176, 85,202,
+ 61,106,172,239,189,253, 43,161,130, 92,235,181, 13,156, 0,255, 0, 0, 0, 0, 62,232, 84,243, 61,199,113,194,190, 47, 26, 78,
+126,174,238, 23,252, 66, 0,255, 0, 0, 0, 0,190,178, 51,128, 61,199,113,194,190, 47, 26, 78,129, 82,238, 23,252, 66, 0,255,
+ 0, 0, 0, 0, 62,211,206, 32, 61,147, 49,216,190,180,218,181, 81, 70, 13,148,158, 15, 1,255, 0, 0, 0, 0,190,157,172,173,
+ 61,147, 49,216,190,180,218,181,174,186, 13,148,158, 15, 1,255, 0, 0, 0, 0, 62,137, 41,174, 62, 27,180, 54,190,244, 76,226,
+ 58,123, 21,228,144, 70, 3,255, 0, 0, 0, 0,190, 38, 16,118, 62, 27,180, 54,190,244, 76,226,197,133, 21,228,144, 70, 3,255,
+ 0, 0, 0, 0, 62,202,121,146,189,151, 95,239,189,238, 61,240, 89, 76,164,139, 6,161, 2,255, 0, 0, 0, 0,190,148, 88, 31,
+189,151, 95,239,189,238, 61,240,166,180,164,139, 6,161, 2,255, 0, 0, 0, 0, 62,168,226,197,189,226, 4, 97,190,103, 21,163,
+ 38, 93,134, 34, 7,182, 0,255, 0, 0, 0, 0,190,101,130,164,189,226, 4, 97,190,103, 21,163,217,163,134, 34, 7,182, 0,255,
+ 0, 0, 0, 0, 62,180, 21, 9,189,100, 27,109,190,178,252,255, 43,106,170,219,170,222, 1,255, 0, 0, 0, 0,190,123,231, 45,
+189,100, 27,109,190,178,252,255,212,150,170,219,170,222, 1,255, 0, 0, 0, 0, 62, 86,156,155,188,217, 91,211,190,234,248, 85,
+ 55,168,213,109,148,229, 2,255, 0, 0, 0, 0,189,212,179,106,188,217, 91,211,190,234,248, 85,200, 88,213,109,148,229, 2,255,
+ 0, 0, 0, 0, 62, 38, 24, 30,190, 93, 61,112, 61, 37,112,191,120,197,255, 36,213,158, 0,255, 0, 0, 0, 0,189,103, 84,224,
+190, 93, 61,112, 61, 37,112,191,135, 59,255, 36,213,158, 0,255, 0, 0, 0, 0, 62, 11,248, 41,190,123, 24,209,188,236,102,176,
+ 84,188,181, 20,196, 24, 0,255, 0, 0, 0, 0,188,253,170, 27,190,123, 24,209,188,236,102,176,171, 68,181, 20,196, 24, 0,255,
+ 0, 0, 0, 0, 62, 64, 56, 19,190,196,117,110, 60,241, 79, 92, 79,131,254, 86,155,183, 2,255, 0, 0, 0, 0,189,167,234, 89,
+190,196,117,110, 60,241, 79, 92,176,125,254, 86,155,183, 2,255, 0, 0, 0, 0, 62, 45,142,246,190,146, 19, 59, 61, 7,149, 95,
+ 99, 5, 1, 8,174,231, 0,255, 0, 0, 0, 0,189,130,152, 32,190,146, 19, 59, 61, 7,149, 95,156,251, 1, 8,174,231, 0,255,
+ 0, 0, 0, 0, 62, 82,225, 47,190,244,249,234, 61, 22,131, 15, 62, 65,185,227,168,224, 2,255, 0, 0, 0, 0,189,205, 60,146,
+190,244,249,234, 61, 22,131, 15,193,191,185,227,168,224, 2,255, 0, 0, 0, 0, 61,242,158, 25,190,207,167,178, 60,181,152,155,
+ 16,133,232,208,131, 55, 0,255, 0, 0, 0, 0,188, 80,194,110,190,207,167,178, 60,181,152,155,239,123,232,208,131, 55, 0,255,
+ 0, 0, 0, 0, 61,227,176,105,190,155,103,201, 60,151,189, 58, 48, 7,224,163,141,149, 0,255, 0, 0, 0, 0,187,178,169,214,
+190,155,103,201, 60,151,189, 58,207,249,224,163,141,149, 0,255, 0, 0, 0, 0, 62, 4,129, 81,190,252,112,195, 61, 97, 39,129,
+ 12, 68,158,218,173,147, 0,255, 0, 0, 0, 0,188,193,243, 89,190,252,112,195, 61, 97, 39,129,243,188,158,218,173,147, 0,255,
+ 0, 0, 0, 0, 62, 30,161, 70,190, 59,166,163, 61, 82, 57,208,124,195,227,106,255,203, 0,255, 0, 0, 0, 0,189, 73,121,127,
+190, 59,166,163, 61, 82, 57,208,131, 61,227,106,255,203, 0,255, 0, 0, 0, 0, 62, 26,229,218,190, 33,134,174, 61,142,111, 33,
+120, 29,231,105, 36,193, 0,255, 0, 0, 0, 0,189, 58,139,207,190, 33,134,174, 61,142,111, 33,135,227,231,105, 36,193, 0,255,
+ 0, 0, 0, 0, 62, 23, 42,109,190, 7,102,186, 61,172, 74,130,101,160,182,164, 25,240, 0,255, 0, 0, 0, 0,189, 43,158, 31,
+190, 7,102,186, 61,172, 74,130,154, 96,182,164, 25,240, 0,255, 0, 0, 0, 0, 62, 26,229,218,190,111,230,140,189,148,171,206,
+ 84,120,159,221,253,198, 0,255, 0, 0, 0, 0,189, 58,139,207,190,111,230,140,189,148,171,206,171,136,159,221,253,198, 0,255,
+ 0, 0, 0, 0, 62, 67,243,127,190, 74,148, 83,190,139,205, 16, 67,255,151, 42,228, 73, 2,255, 0, 0, 0, 0,189,175, 97, 49,
+190, 74,148, 83,190,139,205, 16,188, 1,151, 42,228, 73, 2,255, 0, 0, 0, 0, 62, 90, 88, 7,189,248,104,235,190,205, 28,244,
+ 63,201,176, 25,179, 0, 3,255, 0, 0, 0, 0,189,220, 42, 66,189,248,104,235,190,205, 28,244,192, 55,176, 25,179, 0, 3,255,
+ 0, 0, 0, 0, 62,135, 75,248, 62,180,124, 55,190,167,202,187, 56, 34, 95,160,192, 17, 2,255, 0, 0, 0, 0,190, 34, 85, 10,
+ 62,180,124, 55,190,167,202,187,199,222, 95,160,192, 17, 2,255, 0, 0, 0, 0, 62,135, 75,248, 62,195,105,232,190, 58, 76,146,
+ 55, 54,115,120, 0,239, 2,255, 0, 0, 0, 0,190, 34, 85, 10, 62,195,105,232,190, 58, 76,146,200,202,115,120, 0,239, 2,255,
+ 0, 0, 0, 0, 62,135, 75,248, 62,176,192,203,189, 34,252,105, 63,239, 92,164, 60,238, 2,255, 0, 0, 0, 0,190, 34, 85, 10,
+ 62,176,192,203,189, 34,252,105,192, 17, 92,164, 60,238, 2,255, 0, 0, 0, 0, 62,137, 41,174, 62, 68,193,219, 61, 82, 57,208,
+ 49,123,102,255, 57,170, 0,255, 0, 0, 0, 0,190, 38, 16,118, 62, 68,193,219, 61, 82, 57,208,206,133,102,255, 57,170, 0,255,
+ 0, 0, 0, 0, 62,200,155,220, 62, 12,198,133, 59,248,172, 95, 98,142, 73,198, 35, 6, 0,255, 0, 0, 0, 0,190,146,122,105,
+ 62, 12,198,133, 59,248,172, 95,157,114, 73,198, 35, 6, 0,255, 0, 0, 0, 0, 62,178, 55, 83, 62, 35, 43, 14,188,146,212,141,
+ 61,129,106,254, 33,241, 0,255, 0, 0, 0, 0,190,120, 43,193, 62, 35, 43, 14,188,146,212,141,194,127,106,254, 33,241, 0,255,
+ 0, 0, 0, 0, 62,180, 21, 9, 62,141, 76, 72,189,253, 43,161, 76,234, 87,151, 52,221, 0,255, 0, 0, 0, 0,190,123,231, 45,
+ 62,141, 76, 72,189,253, 43,161,179, 22, 87,151, 52,221, 0,255, 0, 0, 0, 0, 62,217,103, 66, 62, 87,106,247,189,185,254, 7,
+101,187, 66, 28, 40,199, 2,255, 0, 0, 0, 0,190,163, 69,207, 62, 87,106,247,189,185,254, 7,154, 69, 66, 28, 40,199, 2,255,
+ 0, 0, 0, 0, 62,217,103, 66, 62,113,138,236,190, 80,177, 26,113,183, 58, 68,248,119, 2,255, 0, 0, 0, 0,190,163, 69,207,
+ 62,113,138,236,190, 80,177, 26,142, 73, 58, 68,248,119, 2,255, 0, 0, 0, 0, 62,180, 21, 9, 62,152,126,141,190,118, 3, 83,
+ 86,235, 93,238,253,205, 0,255, 0, 0, 0, 0,190,123,231, 45, 62,152,126,141,190,118, 3, 83,169, 21, 93,238,253,205, 0,255,
+ 0, 0, 0, 0, 62,180, 21, 9, 62,135,179, 38,190,182,184,107, 85,232, 70,154,192,157, 2,255, 0, 0, 0, 0,190,123,231, 45,
+ 62,135,179, 38,190,182,184,107,170, 24, 70,154,192,157, 2,255, 0, 0, 0, 0, 62,217,103, 66, 62, 76, 56,179,190,162, 49,153,
+110,166, 42,177,207,222, 2,255, 0, 0, 0, 0,190,163, 69,207, 62, 76, 56,179,190,162, 49,153,145, 90, 42,177,207,222, 2,255,
+ 0, 0, 0, 0, 62,174,123,231, 61,206,232,154,190,216, 79, 56, 75, 58, 1, 57,152,116, 3,255, 0, 0, 0, 0,190,112,180,232,
+ 61,206,232,154,190,216, 79, 56,180,198, 1, 57,152,116, 3,255, 0, 0, 0, 0, 62,142,194,208,189, 40,100,171,190,206,250,170,
+ 70, 73,187,147,173,200, 1,255, 0, 0, 0, 0,190, 49, 66,187,189, 40,100,171,190,206,250,170,185,183,187,147,173,200, 0,255,
+ 0, 0, 0, 0, 62,223, 0,100, 61,206,232,154,190,121,190,191,114,194, 41, 80, 38,207, 0,255, 0, 0, 0, 0,190,168,222,241,
+ 61,206,232,154,190,121,190,191,141, 62, 41, 80, 38,207, 0,255, 0, 0, 0, 0, 62,120, 51,104,190, 7,102,186,189,163,153,127,
+ 74,232,154,153, 22, 28, 0,255, 0, 0, 0, 0,190, 11,240,130,190, 7,102,186,189,163,153,127,181, 24,154,153, 22, 28, 0,255,
+ 0, 0, 0, 0, 62,129,178,214,190, 18,152,254,190,125,122, 44, 71, 89,151,115,237, 1, 0,255, 0, 0, 0, 0,190, 23, 34,198,
+190, 18,152,254,190,125,122, 44,184,167,151,115,237, 1, 0,255, 0, 0, 0, 0, 62,239,203,202, 62, 12,198,133,190,132, 86, 56,
+220, 72, 93,207, 79,106, 2,255, 0, 0, 0, 0,190,185,170, 88, 62, 12,198,133,190,132, 86, 56, 35,184, 93,207, 79,106, 2,255,
+ 0, 0, 0, 0, 62,211,206, 32,189,240,242, 18,190, 84,108,135, 15, 30,150, 34, 70, 84, 2,255, 0, 0, 0, 0,190,157,172,173,
+189,240,242, 18,190, 84,108,135,240,226,150, 34, 70, 84, 2,255, 0, 0, 0, 0, 63, 9,160, 38,189,203,159,217,190,154,186,192,
+ 67,164,166,138, 61,172, 0,255, 0, 0, 0, 0,190,221, 30,219,189,203,159,217,190,154,186,192,188, 92,166,138, 61,172, 0,255,
+ 0, 0, 0, 0, 63, 38,140,172,188,217, 91,211,190,178,252,255, 83,179,206,223, 83,114, 0,255, 0, 0, 0, 0,191, 11,123,244,
+188,217, 91,211,190,178,252,255,172, 77,206,223, 83,114, 0,255, 0, 0, 0, 0, 63, 46,242, 95, 61,199,113,194,190,177, 31, 73,
+ 92, 54, 12,232, 87,210, 2,255, 0, 0, 0, 0,191, 19,225,167, 61,199,113,194,190,177, 31, 73,163,202, 12,232, 87,210, 2,255,
+ 0, 0, 0, 0, 63, 32,243,138, 62, 61, 75, 3,190,177, 31, 73, 62,247, 83,221, 73, 97, 0,255, 0, 0, 0, 0,191, 5,226,209,
+ 62, 61, 75, 3,190,177, 31, 73,193, 9, 83,221, 73, 97, 0,255, 0, 0, 0, 0, 63, 7,194,112, 62, 46, 93, 82,190,150,255, 84,
+ 5,181,111, 80, 62,236, 0,255, 0, 0, 0, 0,190,217, 99,111, 62, 46, 93, 82,190,150,255, 84,250, 75,111, 80, 62,236, 0,255,
+ 0, 0, 0, 0, 63, 6,211,149, 62, 16,129,241,190,145,102, 50, 69,236,239,117,105,236, 0,255, 0, 0, 0, 0,190,215,133,185,
+ 62, 16,129,241,190,145,102, 50,186, 20,239,117,105,236, 0,255, 0, 0, 0, 0, 63, 27, 90,104, 62, 27,180, 54,190,169,168,113,
+ 24, 34,231,205,123, 89, 0,255, 0, 0, 0, 0,191, 0, 73,175, 62, 27,180, 54,190,169,168,113,231,222,231,205,123, 89, 0,255,
+ 0, 0, 0, 0, 63, 36,174,246, 61,169,150, 97,190,173, 99,221,223, 69,252, 16,123,173, 0,255, 0, 0, 0, 0,191, 9,158, 62,
+ 61,169,150, 97,190,173, 99,221, 32,187,252, 16,123,173, 0,255, 0, 0, 0, 0, 63, 30, 38,249,188,127,147, 98,190,173, 99,221,
+239,171, 39, 0,120,207, 0,255, 0, 0, 0, 0,191, 3, 22, 64,188,127,147, 98,190,173, 99,221, 16, 85, 39, 0,120,207, 0,255,
+ 0, 0, 0, 0, 63, 8,177, 75,189,143,233, 23,190,149, 33,158, 51, 9, 45, 56,108, 82, 0,255, 0, 0, 0, 0,190,219, 65, 37,
+189,143,233, 23,190,149, 33,158,204,247, 45, 56,108, 82, 0,255, 0, 0, 0, 0, 62,224,222, 26,189,173,196,120,190, 88, 39,243,
+ 38,147, 62,224,104,153, 2,255, 0, 0, 0, 0,190,170,188,167,189,173,196,120,190, 88, 39,243,217,109, 62,224,104,153, 2,255,
+ 0, 0, 0, 0, 62,247, 66,162, 61,236,195,250,190,128,154,204, 62,218,243,152,110,206, 2,255, 0, 0, 0, 0,190,193, 33, 48,
+ 61,236,195,250,190,128,154,204,193, 38,243,152,110,206, 2,255, 0, 0, 0, 0, 62,252,219,196, 61,184,132, 17,190,145,102, 50,
+ 87, 10,182, 73, 58, 19, 0,255, 0, 0, 0, 0,190,198,186, 82, 61,184,132, 17,190,145,102, 50,168,246,182, 73, 58, 19, 0,255,
+ 0, 0, 0, 0, 62,237,238, 21,189,128,251,103,190,125,122, 44, 15,232,121,106, 37, 64, 0,255, 0, 0, 0, 0,190,183,204,162,
+189,128,251,103,190,125,122, 44,240, 24,121,106, 37, 64, 0,255, 0, 0, 0, 0, 63, 9,160, 38,189, 85, 45,188,190,164, 15, 79,
+239,157,122, 89, 33,212, 0,255, 0, 0, 0, 0,190,221, 30,219,189, 85, 45,188,190,164, 15, 79, 16, 99,122, 89, 33,212, 0,255,
+ 0, 0, 0, 0, 63, 27, 90,104,188, 8, 37,223,190,182,184,107,158, 8, 81,202, 9,185, 0,255, 0, 0, 0, 0,191, 0, 73,175,
+188, 8, 37,223,190,182,184,107, 97,248, 81,202, 9,185, 0,255, 0, 0, 0, 0, 63, 32,243,138, 61,132, 68, 40,190,182,184,107,
+131, 60,239,145, 23, 95, 0,255, 0, 0, 0, 0,191, 5,226,209, 61,132, 68, 40,190,182,184,107,124,196,239,145, 23, 95, 0,255,
+ 0, 0, 0, 0, 63, 25,124,178, 61,236,195,250,190,180,218,181,228, 27,153, 22, 70,206, 0,255, 0, 0, 0, 0,190,252,215,242,
+ 61,236,195,250,190,180,218,181, 27,229,153, 22, 70,206, 0,255, 0, 0, 0, 0, 63, 7,194,112, 61,221,214, 74,190,162, 49,153,
+ 68, 65,168,253, 64,113, 0,255, 0, 0, 0, 0,190,217, 99,111, 61,221,214, 74,190,162, 49,153,187,191,168,253, 64,113, 0,255,
+ 0, 0, 0, 0, 62,228,153,135, 61,169,150, 97,190,125,122, 44, 86,113,222,190, 88, 87, 0,255, 0, 0, 0, 0,190,174,120, 20,
+ 61,169,150, 97,190,125,122, 44,169,143,222,190, 88, 87, 0,255, 0, 0, 0, 0, 62,226,187,209, 60,230,126,216,190,141,170,198,
+ 95,196,182,107, 42,100, 0,255, 0, 0, 0, 0,190,172,154, 93, 60,230,126,216,190,141,170,198,160, 60,182,107, 42,100, 0,255,
+ 0, 0, 0, 0, 62,208, 18,180,188, 8, 37,223,190,141,170,198,111, 42, 14, 21, 61,220, 0,255, 0, 0, 0, 0,190,153,241, 65,
+188, 8, 37,223,190,141,170,198,144,214, 14, 21, 61,220, 0,255, 0, 0, 0, 0, 62,223, 0,100,188, 67,220,161,190,141,170,198,
+ 79, 3, 91, 4, 43, 19, 2,255, 0, 0, 0, 0,190,168,222,241,188, 67,220,161,190,141,170,198,176,253, 91, 4, 43, 19, 2,255,
+ 0, 0, 0, 0, 62,228,153,135,189, 55, 82, 92,190,141,170,198,107,207,254,198, 68,250, 2,255, 0, 0, 0, 0,190,174,120, 20,
+189, 55, 82, 92,190,141,170,198,148, 49,254,198, 68,250, 2,255, 0, 0, 0, 0, 62,221, 34,174,189,115, 9, 29,190,141,170,198,
+ 82, 7, 64,225, 73,200, 0,255, 0, 0, 0, 0,190,167, 1, 59,189,115, 9, 29,190,141,170,198,173,249, 64,225, 73,200, 0,255,
+ 0, 0, 0, 0, 62,200,155,220,189, 85, 45,188,190, 58, 76,146,117, 38,207, 66,239, 47, 0,255, 0, 0, 0, 0,190,146,122,105,
+189, 85, 45,188,190, 58, 76,146,138,218,207, 66,239, 47, 0,255, 0, 0, 0, 0, 62,198,190, 38,189,128,251,103,190,106,209, 15,
+ 97,150, 18,139, 80,184, 0,255, 0, 0, 0, 0,190,144,156,179,189,128,251,103,190,106,209, 15,158,106, 18,139, 80,184, 0,255,
+ 0, 0, 0, 0, 62,198,190, 38,189, 10,137, 74,190,114, 71,231,116, 17,240, 66, 51,154, 0,255, 0, 0, 0, 0,190,144,156,179,
+189, 10,137, 74,190,114, 71,231,139,239,240, 66, 51,154, 0,255, 0, 0, 0, 0, 62,217,103, 66, 61, 46,246, 45,190,125,122, 44,
+113,112,204,245, 30, 39, 0,255, 0, 0, 0, 0,190,163, 69,207, 61, 46,246, 45,190,125,122, 44,142,144,204,245, 30, 39, 0,255,
+ 0, 0, 0, 0, 62,239,203,202, 61,121,154,159,190,139,205, 16, 90,105,185, 61, 56,146, 0,255, 0, 0, 0, 0,190,185,170, 88,
+ 61,121,154,159,190,139,205, 16,165,151,185, 61, 56,146, 0,255, 0, 0, 0, 0, 62,239,203,202, 61,106,172,239,190,152,221, 10,
+ 82,191,204,102, 82,230, 0,255, 0, 0, 0, 0,190,185,170, 88, 61,106,172,239,190,152,221, 10,173, 65,204,102, 82,230, 0,255,
+ 0, 0, 0, 0, 62,221, 34,174,189,115, 9, 29,190,152,221, 10, 29,246, 98, 64, 76, 94, 0,255, 0, 0, 0, 0,190,167, 1, 59,
+189,115, 9, 29,190,152,221, 10,226, 10, 98, 64, 76, 94, 0,255, 0, 0, 0, 0, 62,230,119, 61,189, 55, 82, 92,190,152,221, 10,
+ 77,150, 17,111,100, 75, 0,255, 0, 0, 0, 0,190,176, 85,202,189, 55, 82, 92,190,152,221, 10,178,106, 17,111,100, 75, 0,255,
+ 0, 0, 0, 0, 62,224,222, 26,188,127,147, 98,190,152,221, 10, 60,239, 60,190, 94,195, 0,255, 0, 0, 0, 0,190,170,188,167,
+188,127,147, 98,190,152,221, 10,195, 17, 60,190, 94,195, 0,255, 0, 0, 0, 0, 62,209,240,106,188, 8, 37,223,190,152,221, 10,
+ 83,199, 23,178, 93,209, 0,255, 0, 0, 0, 0,190,155,206,247,188, 8, 37,223,190,152,221, 10,172, 57, 23,178, 93,209, 0,255,
+ 0, 0, 0, 0, 62,228,153,135, 60,230,126,216,190,152,221, 10, 73, 98,200, 1, 88,170, 0,255, 0, 0, 0, 0,190,174,120, 20,
+ 60,230,126,216,190,152,221, 10,182,158,200, 1, 88,170, 0,255, 0, 0, 0, 0, 63, 9,160, 38, 61,206,232,154,190,175, 65,147,
+ 68, 23,223,166,103,112, 0,255, 0, 0, 0, 0,190,221, 30,219, 61,206,232,154,190,175, 65,147,187,233,223,166,103,112, 0,255,
+ 0, 0, 0, 0, 63, 27, 90,104, 61,221,214, 74,190,192, 12,249, 18,165,216,156,120, 89, 0,255, 0, 0, 0, 0,191, 0, 73,175,
+ 61,221,214, 74,190,192, 12,249,237, 91,216,156,120, 89, 0,255, 0, 0, 0, 0, 63, 35,192, 27, 61,121,154,159,190,193,234,175,
+185, 25,231, 29,103,157, 0,255, 0, 0, 0, 0,191, 8,175, 98, 61,121,154,159,190,193,234,175, 70,231,231, 29,103,157, 0,255,
+ 0, 0, 0, 0, 63, 30, 38,249,188, 67,220,161,190,192, 12,249,209, 43, 64, 0,100,119, 0,255, 0, 0, 0, 0,191, 3, 22, 64,
+188, 67,220,161,190,192, 12,249, 46,213, 64, 0,100,119, 0,255, 0, 0, 0, 0, 63, 10,143, 1,189, 85, 45,188,190,177, 31, 73,
+ 26, 52, 92,240, 84, 3, 0,255, 0, 0, 0, 0,190,222,252,145,189, 85, 45,188,190,177, 31, 73,229,204, 92,240, 84, 3, 0,255,
+ 0, 0, 0, 0, 62,237,238, 21,189,115, 9, 29,190,139,205, 16, 8, 58,111,116, 62,101, 0,255, 0, 0, 0, 0,190,183,204,162,
+189,115, 9, 29,190,139,205, 16,247,198,111,116, 62,101, 0,255, 0, 0, 0, 0, 62,254,185,122, 61,169,150, 97,190,158,118, 45,
+ 80,198,213,102, 89,175, 0,255, 0, 0, 0, 0,190,200,152, 8, 61,169,150, 97,190,158,118, 45,175, 58,213,102, 89,175, 0,255,
+ 0, 0, 0, 0, 62,239,203,202,186,133,194,226,190,154,186,192, 25,136, 0,130,125,108, 0,255, 0, 0, 0, 0,190,185,170, 88,
+186,133,194,226,190,154,186,192,230,120, 0,130,125,108, 0,255, 0, 0, 0, 0, 62,250,254, 14,188,187,128,115,190,156,152,119,
+ 27, 2, 30, 58,121,104, 0,255, 0, 0, 0, 0,190,196,220,156,188,187,128,115,190,156,152,119,228,254, 30, 58,121,104, 0,255,
+ 0, 0, 0, 0, 63, 4,245,223, 59,205,106, 77,190,164, 15, 79, 55,218,253,126,115, 35, 0,255, 0, 0, 0, 0,190,211,202, 76,
+ 59,205,106, 77,190,164, 15, 79,200, 38,253,126,115, 35, 0,255, 0, 0, 0, 0, 63, 0, 75,152, 60,230,126,216,190,160, 83,227,
+ 41,164,255,199,121, 8, 0,255, 0, 0, 0, 0,190,202,117,190, 60,230,126,216,190,160, 83,227,214, 92,255,199,121, 8, 0,255,
+ 0, 0, 0, 0, 63, 6,211,149, 61,106,172,239,190,165,237, 5, 39,237, 9,191,121, 55, 0,255, 0, 0, 0, 0,190,215,133,185,
+ 61,106,172,239,190,165,237, 5,216, 19, 9,191,121, 55, 0,255, 0, 0, 0, 0, 63, 11,125,220, 61, 17, 26,205,190,167,202,187,
+ 46,208,244, 41,118,137, 0,255, 0, 0, 0, 0,190,224,218, 71, 61, 17, 26,205,190,167,202,187,209, 48,244, 41,118,137, 0,255,
+ 0, 0, 0, 0, 63, 18, 5,218, 61, 61,227,222,190,169,168,113, 53, 70, 3, 84,116, 85, 2,255, 0, 0, 0, 0,190,237,234, 65,
+ 61, 61,227,222,190,169,168,113,202,186, 3, 84,116, 85, 2,255, 0, 0, 0, 0, 63, 15, 57, 73, 61,154,168,176,190,169,168,113,
+ 44, 99, 38, 36,113,212, 2,255, 0, 0, 0, 0,190,232, 81, 31, 61,154,168,176,190,169,168,113,211,157, 38, 36,113,212, 2,255,
+ 0, 0, 0, 0, 63, 7,194,112, 62, 27,180, 54,190,192, 12,249,198,249, 72, 3,166,222, 3,255, 0, 0, 0, 0,190,217, 99,111,
+ 62, 27,180, 54,190,192, 12,249, 57, 7, 72, 3,166,222, 3,255, 0, 0, 0, 0, 63, 34,209, 64, 62, 42,161,230,190,206,250,170,
+ 37,198, 68,123,154,174, 3,255, 0, 0, 0, 0,191, 7,192,135, 62, 42,161,230,190,206,250,170,218, 58, 68,123,154,174, 3,255,
+ 0, 0, 0, 0, 63, 48,208, 21, 61,177, 13, 57,190,195,200,102,121, 3, 17,201,218, 73, 3,255, 0, 0, 0, 0,191, 21,191, 93,
+ 61,177, 13, 57,190,195,200,102,134,253, 17,201,218, 73, 3,255, 0, 0, 0, 0, 63, 42, 72, 24,188,217, 91,211,190,203, 63, 62,
+ 82, 59,200, 75,175, 70, 3,255, 0, 0, 0, 0,191, 15, 55, 96,188,217, 91,211,190,203, 63, 62,173,197,200, 75,175, 70, 3,255,
+ 0, 0, 0, 0, 63, 9,160, 38,189,188,178, 40,190,193,234,175,249,134,165,184,165,129, 3,255, 0, 0, 0, 0,190,221, 30,219,
+189,188,178, 40,190,193,234,175, 6,122,165,184,165,129, 3,255, 0, 0, 0, 0, 62,215,137,140,189,226, 4, 97,190,154,186,192,
+249,126,163,122,167,205, 1,255, 0, 0, 0, 0,190,161,104, 25,189,226, 4, 97,190,154,186,192, 6,130,163,122,167,205, 1,255,
+ 0, 0, 0, 0, 62,232, 84,243, 62, 1,148, 65,190,167,202,187,193, 93, 65,224,165,229, 1,255, 0, 0, 0, 0,190,178, 51,128,
+ 62, 1,148, 65,190,167,202,187, 62,163, 65,224,165,229, 1,255, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 1, 44, 13, 65,107, 16,
+ 0, 0, 1, 35, 0, 0, 0, 5, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 7,160, 80, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 47, 28, 7,160, 80, 32,
+ 0, 0, 0, 55, 0, 0, 3,237, 0, 0, 0, 0, 0, 0, 0, 45, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 34,
+ 0, 0, 0, 2, 0, 0, 0, 43, 0, 0, 0, 34, 0, 0, 0, 43, 0, 0, 0, 45, 0, 0, 0, 34, 0, 0, 0, 1, 0, 0, 0, 3,
+ 0, 0, 0, 34, 0, 0, 0, 1, 0, 0, 0, 46, 0, 0, 0, 34, 0, 0, 0, 44, 0, 0, 0, 46, 0, 0, 0, 34, 0, 0, 0, 3,
+ 0, 0, 0, 44, 0, 0, 0, 34, 0, 0, 0, 2, 0, 0, 0, 4, 0, 0, 0, 34, 0, 0, 0, 4, 0, 0, 0, 41, 0, 0, 0, 34,
+ 0, 0, 0, 41, 0, 0, 0, 43, 0, 0, 0, 34, 0, 0, 0, 3, 0, 0, 0, 5, 0, 0, 0, 34, 0, 0, 0, 42, 0, 0, 0, 44,
+ 0, 0, 0, 34, 0, 0, 0, 5, 0, 0, 0, 42, 0, 0, 0, 34, 0, 0, 0, 2, 0, 0, 0, 8, 0, 0, 0, 34, 0, 0, 0, 6,
+ 0, 0, 0, 8, 0, 0, 0, 34, 0, 0, 0, 4, 0, 0, 0, 6, 0, 0, 0, 34, 0, 0, 0, 7, 0, 0, 0, 9, 0, 0, 0, 34,
+ 0, 0, 0, 3, 0, 0, 0, 9, 0, 0, 0, 34, 0, 0, 0, 5, 0, 0, 0, 7, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 10,
+ 0, 0, 0, 34, 0, 0, 0, 8, 0, 0, 0, 10, 0, 0, 0, 34, 0, 0, 0, 9, 0, 0, 0, 11, 0, 0, 0, 34, 0, 0, 0, 1,
+ 0, 0, 0, 11, 0, 0, 0, 34, 0, 0, 0, 10, 0, 0, 0, 12, 0, 0, 0, 34, 0, 0, 0, 12, 0, 0, 0, 14, 0, 0, 0, 34,
+ 0, 0, 0, 8, 0, 0, 0, 14, 0, 0, 0, 34, 0, 0, 0, 11, 0, 0, 0, 13, 0, 0, 0, 34, 0, 0, 0, 14, 0, 0, 0, 15,
+ 0, 0, 0, 34, 0, 0, 0, 6, 0, 0, 0, 15, 0, 0, 0, 34, 0, 0, 0, 7, 0, 0, 0, 16, 0, 0, 0, 34, 0, 0, 0, 14,
+ 0, 0, 0, 19, 0, 0, 0, 34, 0, 0, 0, 17, 0, 0, 0, 19, 0, 0, 0, 34, 0, 0, 0, 15, 0, 0, 0, 17, 0, 0, 0, 34,
+ 0, 0, 0, 18, 0, 0, 0, 20, 0, 0, 0, 34, 0, 0, 0, 16, 0, 0, 0, 18, 0, 0, 0, 34, 0, 0, 0, 12, 0, 0, 0, 21,
+ 0, 0, 0, 34, 0, 0, 0, 19, 0, 0, 0, 21, 0, 0, 0, 34, 0, 0, 0, 20, 0, 0, 0, 22, 0, 0, 0, 34, 0, 0, 0, 13,
+ 0, 0, 0, 22, 0, 0, 0, 34, 0, 0, 0, 21, 0, 0, 0, 23, 0, 0, 0, 34, 0, 0, 0, 23, 0, 0, 0, 25, 0, 0, 0, 34,
+ 0, 0, 0, 19, 0, 0, 0, 25, 0, 0, 0, 34, 0, 0, 0, 24, 0, 0, 0, 26, 0, 0, 0, 34, 0, 0, 0, 22, 0, 0, 0, 24,
+ 0, 0, 0, 34, 0, 0, 0, 20, 0, 0, 0, 26, 0, 0, 0, 34, 0, 0, 0, 25, 0, 0, 0, 27, 0, 0, 0, 34, 0, 0, 0, 17,
+ 0, 0, 0, 27, 0, 0, 0, 34, 0, 0, 0, 26, 0, 0, 0, 28, 0, 0, 0, 34, 0, 0, 0, 18, 0, 0, 0, 28, 0, 0, 0, 34,
+ 0, 0, 0, 25, 0, 0, 0, 31, 0, 0, 0, 34, 0, 0, 0, 29, 0, 0, 0, 31, 0, 0, 0, 34, 0, 0, 0, 27, 0, 0, 0, 29,
+ 0, 0, 0, 34, 0, 0, 0, 30, 0, 0, 0, 32, 0, 0, 0, 34, 0, 0, 0, 26, 0, 0, 0, 32, 0, 0, 0, 34, 0, 0, 0, 28,
+ 0, 0, 0, 30, 0, 0, 0, 34, 0, 0, 0, 23, 0, 0, 0, 33, 0, 0, 0, 34, 0, 0, 0, 31, 0, 0, 0, 33, 0, 0, 0, 34,
+ 0, 0, 0, 32, 0, 0, 0, 34, 0, 0, 0, 34, 0, 0, 0, 24, 0, 0, 0, 34, 0, 0, 0, 34, 0, 0, 0, 33, 0, 0, 0, 35,
+ 0, 0, 0, 34, 0, 0, 0, 35, 0, 0, 0, 37, 0, 0, 0, 34, 0, 0, 0, 31, 0, 0, 0, 37, 0, 0, 0, 34, 0, 0, 0, 36,
+ 0, 0, 0, 38, 0, 0, 0, 34, 0, 0, 0, 34, 0, 0, 0, 36, 0, 0, 0, 34, 0, 0, 0, 32, 0, 0, 0, 38, 0, 0, 0, 34,
+ 0, 0, 0, 37, 0, 0, 0, 39, 0, 0, 0, 34, 0, 0, 0, 29, 0, 0, 0, 39, 0, 0, 0, 34, 0, 0, 0, 38, 0, 0, 0, 40,
+ 0, 0, 0, 34, 0, 0, 0, 30, 0, 0, 0, 40, 0, 0, 0, 34, 0, 0, 0, 37, 0, 0, 0, 43, 0, 0, 0, 34, 0, 0, 0, 39,
+ 0, 0, 0, 41, 0, 0, 0, 34, 0, 0, 0, 38, 0, 0, 0, 44, 0, 0, 0, 34, 0, 0, 0, 40, 0, 0, 0, 42, 0, 0, 0, 34,
+ 0, 0, 0, 35, 0, 0, 0, 45, 0, 0, 0, 34, 0, 0, 0, 36, 0, 0, 0, 46, 0, 0, 0, 34, 0, 0, 0, 35, 0, 0, 0, 49,
+ 0, 0, 0, 34, 0, 0, 0, 47, 0, 0, 0, 49, 0, 0, 0, 34, 0, 0, 0, 45, 0, 0, 0, 47, 0, 0, 0, 34, 0, 0, 0, 36,
+ 0, 0, 0, 50, 0, 0, 0, 34, 0, 0, 0, 46, 0, 0, 0, 48, 0, 0, 0, 34, 0, 0, 0, 48, 0, 0, 0, 50, 0, 0, 0, 34,
+ 0, 0, 0, 33, 0, 0, 0, 51, 0, 0, 0, 34, 0, 0, 0, 49, 0, 0, 0, 51, 0, 0, 0, 34, 0, 0, 0, 34, 0, 0, 0, 52,
+ 0, 0, 0, 34, 0, 0, 0, 50, 0, 0, 0, 52, 0, 0, 0, 34, 0, 0, 0, 23, 0, 0, 0, 53, 0, 0, 0, 34, 0, 0, 0, 51,
+ 0, 0, 0, 53, 0, 0, 0, 34, 0, 0, 0, 24, 0, 0, 0, 54, 0, 0, 0, 34, 0, 0, 0, 52, 0, 0, 0, 54, 0, 0, 0, 34,
+ 0, 0, 0, 21, 0, 0, 0, 55, 0, 0, 0, 34, 0, 0, 0, 53, 0, 0, 0, 55, 0, 0, 0, 34, 0, 0, 0, 22, 0, 0, 0, 56,
+ 0, 0, 0, 34, 0, 0, 0, 54, 0, 0, 0, 56, 0, 0, 0, 34, 0, 0, 0, 12, 0, 0, 0, 57, 0, 0, 0, 34, 0, 0, 0, 55,
+ 0, 0, 0, 57, 0, 0, 0, 34, 0, 0, 0, 13, 0, 0, 0, 58, 0, 0, 0, 34, 0, 0, 0, 56, 0, 0, 0, 58, 0, 0, 0, 34,
+ 0, 0, 0, 10, 0, 0, 0, 61, 0, 0, 0, 34, 0, 0, 0, 57, 0, 0, 0, 61, 0, 0, 0, 34, 0, 0, 0, 11, 0, 0, 0, 62,
+ 0, 0, 0, 34, 0, 0, 0, 58, 0, 0, 0, 62, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 34, 0, 0, 0, 61,
+ 0, 0, 0, 63, 0, 0, 0, 34, 0, 0, 0, 1, 0, 0, 0, 64, 0, 0, 0, 34, 0, 0, 0, 62, 0, 0, 0, 64, 0, 0, 0, 34,
+ 0, 0, 0, 47, 0, 0, 0, 63, 0, 0, 0, 34, 0, 0, 0, 48, 0, 0, 0, 64, 0, 0, 0, 34, 0, 0, 0, 59, 0, 0, 0, 63,
+ 0, 0, 0, 34, 0, 0, 0, 47, 0, 0, 0, 59, 0, 0, 0, 34, 0, 0, 0, 60, 0, 0, 0, 64, 0, 0, 0, 34, 0, 0, 0, 48,
+ 0, 0, 0, 60, 0, 0, 0, 34, 0, 0, 0, 59, 0, 0, 0, 61, 0, 0, 0, 34, 0, 0, 0, 60, 0, 0, 0, 62, 0, 0, 0, 34,
+ 0, 0, 0, 57, 0, 0, 0, 59, 0, 0, 0, 34, 0, 0, 0, 58, 0, 0, 0, 60, 0, 0, 0, 34, 0, 0, 0, 55, 0, 0, 0, 59,
+ 0, 0, 0, 34, 0, 0, 0, 56, 0, 0, 0, 60, 0, 0, 0, 34, 0, 0, 0, 53, 0, 0, 0, 59, 0, 0, 0, 34, 0, 0, 0, 54,
+ 0, 0, 0, 60, 0, 0, 0, 34, 0, 0, 0, 51, 0, 0, 0, 59, 0, 0, 0, 34, 0, 0, 0, 52, 0, 0, 0, 60, 0, 0, 0, 34,
+ 0, 0, 0, 49, 0, 0, 0, 59, 0, 0, 0, 34, 0, 0, 0, 50, 0, 0, 0, 60, 0, 0, 0, 34, 0, 0, 0, 87, 0, 0, 0,171,
+ 0, 0, 0, 34, 0, 0, 0,171, 0, 0, 0,173, 0, 0, 0, 34, 0, 0, 0, 89, 0, 0, 0,173, 0, 0, 0, 34, 0, 0, 0, 87,
+ 0, 0, 0, 89, 0, 0, 0, 34, 0, 0, 0,172, 0, 0, 0,173, 0, 0, 0, 34, 0, 0, 0, 88, 0, 0, 0,172, 0, 0, 0, 34,
+ 0, 0, 0, 88, 0, 0, 0, 89, 0, 0, 0, 34, 0, 0, 0, 85, 0, 0, 0,169, 0, 0, 0, 34, 0, 0, 0,169, 0, 0, 0,171,
+ 0, 0, 0, 34, 0, 0, 0, 85, 0, 0, 0, 87, 0, 0, 0, 34, 0, 0, 0,170, 0, 0, 0,172, 0, 0, 0, 34, 0, 0, 0, 86,
+ 0, 0, 0,170, 0, 0, 0, 34, 0, 0, 0, 86, 0, 0, 0, 88, 0, 0, 0, 34, 0, 0, 0, 83, 0, 0, 0,167, 0, 0, 0, 34,
+ 0, 0, 0,167, 0, 0, 0,169, 0, 0, 0, 34, 0, 0, 0, 83, 0, 0, 0, 85, 0, 0, 0, 34, 0, 0, 0,168, 0, 0, 0,170,
+ 0, 0, 0, 34, 0, 0, 0, 84, 0, 0, 0,168, 0, 0, 0, 34, 0, 0, 0, 84, 0, 0, 0, 86, 0, 0, 0, 34, 0, 0, 0, 81,
+ 0, 0, 0,165, 0, 0, 0, 34, 0, 0, 0,165, 0, 0, 0,167, 0, 0, 0, 34, 0, 0, 0, 81, 0, 0, 0, 83, 0, 0, 0, 34,
+ 0, 0, 0,166, 0, 0, 0,168, 0, 0, 0, 34, 0, 0, 0, 82, 0, 0, 0,166, 0, 0, 0, 34, 0, 0, 0, 82, 0, 0, 0, 84,
+ 0, 0, 0, 34, 0, 0, 0, 79, 0, 0, 0,163, 0, 0, 0, 34, 0, 0, 0,163, 0, 0, 0,165, 0, 0, 0, 34, 0, 0, 0, 79,
+ 0, 0, 0, 81, 0, 0, 0, 34, 0, 0, 0,164, 0, 0, 0,166, 0, 0, 0, 34, 0, 0, 0, 80, 0, 0, 0,164, 0, 0, 0, 34,
+ 0, 0, 0, 80, 0, 0, 0, 82, 0, 0, 0, 34, 0, 0, 0, 77, 0, 0, 0, 90, 0, 0, 0, 34, 0, 0, 0, 90, 0, 0, 0,143,
+ 0, 0, 0, 34, 0, 0, 0,143, 0, 0, 0,161, 0, 0, 0, 34, 0, 0, 0, 77, 0, 0, 0,161, 0, 0, 0, 34, 0, 0, 0, 91,
+ 0, 0, 0,144, 0, 0, 0, 34, 0, 0, 0, 78, 0, 0, 0, 91, 0, 0, 0, 34, 0, 0, 0, 78, 0, 0, 0,162, 0, 0, 0, 34,
+ 0, 0, 0,144, 0, 0, 0,162, 0, 0, 0, 34, 0, 0, 0, 90, 0, 0, 0, 92, 0, 0, 0, 34, 0, 0, 0, 92, 0, 0, 0,145,
+ 0, 0, 0, 34, 0, 0, 0,143, 0, 0, 0,145, 0, 0, 0, 34, 0, 0, 0, 93, 0, 0, 0,146, 0, 0, 0, 34, 0, 0, 0, 91,
+ 0, 0, 0, 93, 0, 0, 0, 34, 0, 0, 0,144, 0, 0, 0,146, 0, 0, 0, 34, 0, 0, 0, 92, 0, 0, 0, 94, 0, 0, 0, 34,
+ 0, 0, 0, 94, 0, 0, 0,147, 0, 0, 0, 34, 0, 0, 0,145, 0, 0, 0,147, 0, 0, 0, 34, 0, 0, 0, 95, 0, 0, 0,148,
+ 0, 0, 0, 34, 0, 0, 0, 93, 0, 0, 0, 95, 0, 0, 0, 34, 0, 0, 0,146, 0, 0, 0,148, 0, 0, 0, 34, 0, 0, 0, 94,
+ 0, 0, 0, 96, 0, 0, 0, 34, 0, 0, 0, 96, 0, 0, 0,149, 0, 0, 0, 34, 0, 0, 0,147, 0, 0, 0,149, 0, 0, 0, 34,
+ 0, 0, 0, 97, 0, 0, 0,150, 0, 0, 0, 34, 0, 0, 0, 95, 0, 0, 0, 97, 0, 0, 0, 34, 0, 0, 0,148, 0, 0, 0,150,
+ 0, 0, 0, 34, 0, 0, 0, 96, 0, 0, 0, 98, 0, 0, 0, 34, 0, 0, 0, 98, 0, 0, 0,151, 0, 0, 0, 34, 0, 0, 0,149,
+ 0, 0, 0,151, 0, 0, 0, 34, 0, 0, 0, 99, 0, 0, 0,152, 0, 0, 0, 34, 0, 0, 0, 97, 0, 0, 0, 99, 0, 0, 0, 34,
+ 0, 0, 0,150, 0, 0, 0,152, 0, 0, 0, 34, 0, 0, 0, 98, 0, 0, 0,100, 0, 0, 0, 34, 0, 0, 0,100, 0, 0, 0,153,
+ 0, 0, 0, 34, 0, 0, 0,151, 0, 0, 0,153, 0, 0, 0, 34, 0, 0, 0,101, 0, 0, 0,154, 0, 0, 0, 34, 0, 0, 0, 99,
+ 0, 0, 0,101, 0, 0, 0, 34, 0, 0, 0,152, 0, 0, 0,154, 0, 0, 0, 34, 0, 0, 0,100, 0, 0, 0,102, 0, 0, 0, 34,
+ 0, 0, 0,102, 0, 0, 0,155, 0, 0, 0, 34, 0, 0, 0,153, 0, 0, 0,155, 0, 0, 0, 34, 0, 0, 0,103, 0, 0, 0,156,
+ 0, 0, 0, 34, 0, 0, 0,101, 0, 0, 0,103, 0, 0, 0, 34, 0, 0, 0,154, 0, 0, 0,156, 0, 0, 0, 34, 0, 0, 0,102,
+ 0, 0, 0,104, 0, 0, 0, 34, 0, 0, 0,104, 0, 0, 0,157, 0, 0, 0, 34, 0, 0, 0,155, 0, 0, 0,157, 0, 0, 0, 34,
+ 0, 0, 0,105, 0, 0, 0,158, 0, 0, 0, 34, 0, 0, 0,103, 0, 0, 0,105, 0, 0, 0, 34, 0, 0, 0,156, 0, 0, 0,158,
+ 0, 0, 0, 34, 0, 0, 0,104, 0, 0, 0,106, 0, 0, 0, 34, 0, 0, 0,106, 0, 0, 0,159, 0, 0, 0, 34, 0, 0, 0,157,
+ 0, 0, 0,159, 0, 0, 0, 34, 0, 0, 0,107, 0, 0, 0,160, 0, 0, 0, 34, 0, 0, 0,105, 0, 0, 0,107, 0, 0, 0, 34,
+ 0, 0, 0,158, 0, 0, 0,160, 0, 0, 0, 34, 0, 0, 0, 65, 0, 0, 0,106, 0, 0, 0, 34, 0, 0, 0, 65, 0, 0, 0, 66,
+ 0, 0, 0, 34, 0, 0, 0, 66, 0, 0, 0,159, 0, 0, 0, 34, 0, 0, 0, 65, 0, 0, 0,107, 0, 0, 0, 34, 0, 0, 0, 66,
+ 0, 0, 0,160, 0, 0, 0, 34, 0, 0, 0,108, 0, 0, 0,125, 0, 0, 0, 34, 0, 0, 0,125, 0, 0, 0,157, 0, 0, 0, 34,
+ 0, 0, 0,108, 0, 0, 0,159, 0, 0, 0, 34, 0, 0, 0,126, 0, 0, 0,158, 0, 0, 0, 34, 0, 0, 0,109, 0, 0, 0,126,
+ 0, 0, 0, 34, 0, 0, 0,109, 0, 0, 0,160, 0, 0, 0, 34, 0, 0, 0,125, 0, 0, 0,176, 0, 0, 0, 34, 0, 0, 0,155,
+ 0, 0, 0,176, 0, 0, 0, 34, 0, 0, 0,156, 0, 0, 0,177, 0, 0, 0, 34, 0, 0, 0,126, 0, 0, 0,177, 0, 0, 0, 34,
+ 0, 0, 0,123, 0, 0, 0,153, 0, 0, 0, 34, 0, 0, 0,123, 0, 0, 0,176, 0, 0, 0, 34, 0, 0, 0,124, 0, 0, 0,154,
+ 0, 0, 0, 34, 0, 0, 0,124, 0, 0, 0,177, 0, 0, 0, 34, 0, 0, 0,121, 0, 0, 0,151, 0, 0, 0, 34, 0, 0, 0,121,
+ 0, 0, 0,123, 0, 0, 0, 34, 0, 0, 0,122, 0, 0, 0,152, 0, 0, 0, 34, 0, 0, 0,122, 0, 0, 0,124, 0, 0, 0, 34,
+ 0, 0, 0,119, 0, 0, 0,149, 0, 0, 0, 34, 0, 0, 0,119, 0, 0, 0,121, 0, 0, 0, 34, 0, 0, 0,120, 0, 0, 0,150,
+ 0, 0, 0, 34, 0, 0, 0,120, 0, 0, 0,122, 0, 0, 0, 34, 0, 0, 0,117, 0, 0, 0,147, 0, 0, 0, 34, 0, 0, 0,117,
+ 0, 0, 0,119, 0, 0, 0, 34, 0, 0, 0,118, 0, 0, 0,148, 0, 0, 0, 34, 0, 0, 0,118, 0, 0, 0,120, 0, 0, 0, 34,
+ 0, 0, 0,115, 0, 0, 0,145, 0, 0, 0, 34, 0, 0, 0,115, 0, 0, 0,117, 0, 0, 0, 34, 0, 0, 0,116, 0, 0, 0,146,
+ 0, 0, 0, 34, 0, 0, 0,116, 0, 0, 0,118, 0, 0, 0, 34, 0, 0, 0,113, 0, 0, 0,143, 0, 0, 0, 34, 0, 0, 0,113,
+ 0, 0, 0,115, 0, 0, 0, 34, 0, 0, 0,114, 0, 0, 0,144, 0, 0, 0, 34, 0, 0, 0,114, 0, 0, 0,116, 0, 0, 0, 34,
+ 0, 0, 0,112, 0, 0, 0,162, 0, 0, 0, 34, 0, 0, 0,112, 0, 0, 0,114, 0, 0, 0, 34, 0, 0, 0,174, 0, 0, 0,178,
+ 0, 0, 0, 34, 0, 0, 0,161, 0, 0, 0,174, 0, 0, 0, 34, 0, 0, 0,174, 0, 0, 0,179, 0, 0, 0, 34, 0, 0, 0,112,
+ 0, 0, 0,179, 0, 0, 0, 34, 0, 0, 0,162, 0, 0, 0,174, 0, 0, 0, 34, 0, 0, 0, 66, 0, 0, 0,110, 0, 0, 0, 34,
+ 0, 0, 0,108, 0, 0, 0,110, 0, 0, 0, 34, 0, 0, 0,109, 0, 0, 0,111, 0, 0, 0, 34, 0, 0, 0, 66, 0, 0, 0,111,
+ 0, 0, 0, 34, 0, 0, 0, 66, 0, 0, 0,175, 0, 0, 0, 34, 0, 0, 0,175, 0, 0, 0,180, 0, 0, 0, 34, 0, 0, 0,110,
+ 0, 0, 0,180, 0, 0, 0, 34, 0, 0, 0,111, 0, 0, 0,181, 0, 0, 0, 34, 0, 0, 0,175, 0, 0, 0,181, 0, 0, 0, 34,
+ 0, 0, 0,178, 0, 0, 0,180, 0, 0, 0, 34, 0, 0, 0,174, 0, 0, 0,175, 0, 0, 0, 32, 0, 0, 0,179, 0, 0, 0,181,
+ 0, 0, 0, 34, 0, 0, 0,132, 0, 0, 0,134, 0, 0, 0, 34, 0, 0, 0,134, 0, 0, 0,173, 0, 0, 0, 34, 0, 0, 0,132,
+ 0, 0, 0,171, 0, 0, 0, 34, 0, 0, 0,133, 0, 0, 0,134, 0, 0, 0, 34, 0, 0, 0,133, 0, 0, 0,172, 0, 0, 0, 34,
+ 0, 0, 0,130, 0, 0, 0,132, 0, 0, 0, 34, 0, 0, 0,130, 0, 0, 0,169, 0, 0, 0, 34, 0, 0, 0,131, 0, 0, 0,133,
+ 0, 0, 0, 34, 0, 0, 0,131, 0, 0, 0,170, 0, 0, 0, 34, 0, 0, 0,128, 0, 0, 0,130, 0, 0, 0, 34, 0, 0, 0,128,
+ 0, 0, 0,167, 0, 0, 0, 34, 0, 0, 0,129, 0, 0, 0,131, 0, 0, 0, 34, 0, 0, 0,129, 0, 0, 0,168, 0, 0, 0, 34,
+ 0, 0, 0,163, 0, 0, 0,184, 0, 0, 0, 34, 0, 0, 0,182, 0, 0, 0,184, 0, 0, 0, 34, 0, 0, 0,165, 0, 0, 0,182,
+ 0, 0, 0, 34, 0, 0, 0,183, 0, 0, 0,185, 0, 0, 0, 34, 0, 0, 0,164, 0, 0, 0,185, 0, 0, 0, 34, 0, 0, 0,166,
+ 0, 0, 0,183, 0, 0, 0, 34, 0, 0, 0,128, 0, 0, 0,182, 0, 0, 0, 34, 0, 0, 0,129, 0, 0, 0,183, 0, 0, 0, 34,
+ 0, 0, 0,141, 0, 0, 0,187, 0, 0, 0, 34, 0, 0, 0,186, 0, 0, 0,187, 0, 0, 0, 32, 0, 0, 0,184, 0, 0, 0,186,
+ 0, 0, 0, 34, 0, 0, 0,141, 0, 0, 0,184, 0, 0, 0, 34, 0, 0, 0,142, 0, 0, 0,187, 0, 0, 0, 34, 0, 0, 0,142,
+ 0, 0, 0,185, 0, 0, 0, 34, 0, 0, 0,185, 0, 0, 0,186, 0, 0, 0, 34, 0, 0, 0, 67, 0, 0, 0,186, 0, 0, 0, 32,
+ 0, 0, 0, 67, 0, 0, 0,182, 0, 0, 0, 34, 0, 0, 0, 67, 0, 0, 0,183, 0, 0, 0, 34, 0, 0, 0,127, 0, 0, 0,128,
+ 0, 0, 0, 34, 0, 0, 0, 67, 0, 0, 0,127, 0, 0, 0, 32, 0, 0, 0,127, 0, 0, 0,129, 0, 0, 0, 34, 0, 0, 0,139,
+ 0, 0, 0,190, 0, 0, 0, 34, 0, 0, 0,188, 0, 0, 0,190, 0, 0, 0, 34, 0, 0, 0,141, 0, 0, 0,188, 0, 0, 0, 34,
+ 0, 0, 0,139, 0, 0, 0,141, 0, 0, 0, 34, 0, 0, 0,189, 0, 0, 0,191, 0, 0, 0, 34, 0, 0, 0,140, 0, 0, 0,191,
+ 0, 0, 0, 34, 0, 0, 0,140, 0, 0, 0,142, 0, 0, 0, 34, 0, 0, 0,142, 0, 0, 0,189, 0, 0, 0, 34, 0, 0, 0,137,
+ 0, 0, 0,192, 0, 0, 0, 34, 0, 0, 0,190, 0, 0, 0,192, 0, 0, 0, 34, 0, 0, 0,137, 0, 0, 0,139, 0, 0, 0, 34,
+ 0, 0, 0,191, 0, 0, 0,193, 0, 0, 0, 34, 0, 0, 0,138, 0, 0, 0,193, 0, 0, 0, 34, 0, 0, 0,138, 0, 0, 0,140,
+ 0, 0, 0, 34, 0, 0, 0,136, 0, 0, 0,194, 0, 0, 0, 34, 0, 0, 0,192, 0, 0, 0,194, 0, 0, 0, 34, 0, 0, 0,136,
+ 0, 0, 0,137, 0, 0, 0, 34, 0, 0, 0,193, 0, 0, 0,195, 0, 0, 0, 34, 0, 0, 0,136, 0, 0, 0,195, 0, 0, 0, 34,
+ 0, 0, 0,136, 0, 0, 0,138, 0, 0, 0, 34, 0, 0, 0, 69, 0, 0, 0,135, 0, 0, 0, 34, 0, 0, 0, 69, 0, 0, 0,194,
+ 0, 0, 0, 34, 0, 0, 0,135, 0, 0, 0,136, 0, 0, 0, 34, 0, 0, 0, 69, 0, 0, 0,195, 0, 0, 0, 34, 0, 0, 0, 68,
+ 0, 0, 0,188, 0, 0, 0, 34, 0, 0, 0, 68, 0, 0, 0,187, 0, 0, 0, 34, 0, 0, 0, 68, 0, 0, 0,189, 0, 0, 0, 34,
+ 0, 0, 0,188, 0, 0, 0,203, 0, 0, 0, 34, 0, 0, 0,203, 0, 0, 0,205, 0, 0, 0, 34, 0, 0, 0, 68, 0, 0, 0,205,
+ 0, 0, 0, 34, 0, 0, 0,189, 0, 0, 0,204, 0, 0, 0, 34, 0, 0, 0,204, 0, 0, 0,205, 0, 0, 0, 34, 0, 0, 0, 69,
+ 0, 0, 0,196, 0, 0, 0, 34, 0, 0, 0,196, 0, 0, 0,197, 0, 0, 0, 34, 0, 0, 0,194, 0, 0, 0,197, 0, 0, 0, 34,
+ 0, 0, 0,196, 0, 0, 0,198, 0, 0, 0, 34, 0, 0, 0,195, 0, 0, 0,198, 0, 0, 0, 34, 0, 0, 0,197, 0, 0, 0,199,
+ 0, 0, 0, 34, 0, 0, 0,192, 0, 0, 0,199, 0, 0, 0, 34, 0, 0, 0,198, 0, 0, 0,200, 0, 0, 0, 34, 0, 0, 0,193,
+ 0, 0, 0,200, 0, 0, 0, 34, 0, 0, 0,199, 0, 0, 0,201, 0, 0, 0, 34, 0, 0, 0,190, 0, 0, 0,201, 0, 0, 0, 34,
+ 0, 0, 0,200, 0, 0, 0,202, 0, 0, 0, 34, 0, 0, 0,191, 0, 0, 0,202, 0, 0, 0, 34, 0, 0, 0,201, 0, 0, 0,203,
+ 0, 0, 0, 34, 0, 0, 0,202, 0, 0, 0,204, 0, 0, 0, 34, 0, 0, 0,196, 0, 0, 0,201, 0, 0, 0, 34, 0, 0, 0,196,
+ 0, 0, 0,202, 0, 0, 0, 34, 0, 0, 0,196, 0, 0, 0,205, 0, 0, 0, 34, 0, 0, 0,137, 0, 0, 0,161, 0, 0, 0, 34,
+ 0, 0, 0,136, 0, 0, 0,174, 0, 0, 0, 34, 0, 0, 0,138, 0, 0, 0,162, 0, 0, 0, 34, 0, 0, 0,139, 0, 0, 0,208,
+ 0, 0, 0, 34, 0, 0, 0,161, 0, 0, 0,208, 0, 0, 0, 34, 0, 0, 0,140, 0, 0, 0,209, 0, 0, 0, 34, 0, 0, 0,162,
+ 0, 0, 0,209, 0, 0, 0, 34, 0, 0, 0,141, 0, 0, 0,210, 0, 0, 0, 34, 0, 0, 0,208, 0, 0, 0,210, 0, 0, 0, 34,
+ 0, 0, 0,142, 0, 0, 0,211, 0, 0, 0, 34, 0, 0, 0,209, 0, 0, 0,211, 0, 0, 0, 34, 0, 0, 0,163, 0, 0, 0,210,
+ 0, 0, 0, 34, 0, 0, 0,164, 0, 0, 0,211, 0, 0, 0, 34, 0, 0, 0, 79, 0, 0, 0,206, 0, 0, 0, 34, 0, 0, 0,206,
+ 0, 0, 0,210, 0, 0, 0, 34, 0, 0, 0,207, 0, 0, 0,211, 0, 0, 0, 34, 0, 0, 0, 80, 0, 0, 0,207, 0, 0, 0, 34,
+ 0, 0, 0,206, 0, 0, 0,212, 0, 0, 0, 34, 0, 0, 0,208, 0, 0, 0,212, 0, 0, 0, 34, 0, 0, 0,209, 0, 0, 0,213,
+ 0, 0, 0, 34, 0, 0, 0,207, 0, 0, 0,213, 0, 0, 0, 34, 0, 0, 0, 77, 0, 0, 0,212, 0, 0, 0, 34, 0, 0, 0, 78,
+ 0, 0, 0,213, 0, 0, 0, 34, 0, 0, 0, 70, 0, 0, 0,127, 0, 0, 0, 34, 0, 0, 0, 70, 0, 0, 0,219, 0, 0, 0, 34,
+ 0, 0, 0,128, 0, 0, 0,219, 0, 0, 0, 34, 0, 0, 0,129, 0, 0, 0,220, 0, 0, 0, 34, 0, 0, 0, 70, 0, 0, 0,220,
+ 0, 0, 0, 34, 0, 0, 0,217, 0, 0, 0,219, 0, 0, 0, 34, 0, 0, 0,130, 0, 0, 0,217, 0, 0, 0, 34, 0, 0, 0,131,
+ 0, 0, 0,218, 0, 0, 0, 34, 0, 0, 0,218, 0, 0, 0,220, 0, 0, 0, 34, 0, 0, 0,215, 0, 0, 0,217, 0, 0, 0, 34,
+ 0, 0, 0,132, 0, 0, 0,215, 0, 0, 0, 34, 0, 0, 0,133, 0, 0, 0,216, 0, 0, 0, 34, 0, 0, 0,216, 0, 0, 0,218,
+ 0, 0, 0, 34, 0, 0, 0,214, 0, 0, 0,215, 0, 0, 0, 34, 0, 0, 0,134, 0, 0, 0,214, 0, 0, 0, 34, 0, 0, 0,214,
+ 0, 0, 0,216, 0, 0, 0, 34, 0, 0, 0,215, 0, 0, 0,226, 0, 0, 0, 34, 0, 0, 0,226, 0, 0, 0,228, 0, 0, 0, 34,
+ 0, 0, 0,214, 0, 0, 0,228, 0, 0, 0, 34, 0, 0, 0,216, 0, 0, 0,227, 0, 0, 0, 34, 0, 0, 0,227, 0, 0, 0,228,
+ 0, 0, 0, 34, 0, 0, 0,217, 0, 0, 0,224, 0, 0, 0, 34, 0, 0, 0,224, 0, 0, 0,226, 0, 0, 0, 34, 0, 0, 0,218,
+ 0, 0, 0,225, 0, 0, 0, 34, 0, 0, 0,225, 0, 0, 0,227, 0, 0, 0, 34, 0, 0, 0,219, 0, 0, 0,222, 0, 0, 0, 34,
+ 0, 0, 0,222, 0, 0, 0,224, 0, 0, 0, 34, 0, 0, 0,220, 0, 0, 0,223, 0, 0, 0, 34, 0, 0, 0,223, 0, 0, 0,225,
+ 0, 0, 0, 34, 0, 0, 0, 70, 0, 0, 0,221, 0, 0, 0, 34, 0, 0, 0,221, 0, 0, 0,222, 0, 0, 0, 34, 0, 0, 0,221,
+ 0, 0, 0,223, 0, 0, 0, 34, 0, 0, 0,221, 0, 0, 0,228, 0, 0, 0, 34, 0, 0, 0,222, 0, 0, 0,226, 0, 0, 0, 34,
+ 0, 0, 0,223, 0, 0, 0,227, 0, 0, 0, 34, 0, 0, 0,178, 0, 0, 0,231, 0, 0, 0, 34, 0, 0, 0,229, 0, 0, 0,231,
+ 0, 0, 0, 34, 0, 0, 0,180, 0, 0, 0,229, 0, 0, 0, 34, 0, 0, 0,179, 0, 0, 0,232, 0, 0, 0, 34, 0, 0, 0,181,
+ 0, 0, 0,230, 0, 0, 0, 34, 0, 0, 0,230, 0, 0, 0,232, 0, 0, 0, 34, 0, 0, 0,229, 0, 0, 0,251, 0, 0, 0, 34,
+ 0, 0, 0,110, 0, 0, 0,251, 0, 0, 0, 34, 0, 0, 0,111, 0, 0, 0,252, 0, 0, 0, 34, 0, 0, 0,230, 0, 0, 0,252,
+ 0, 0, 0, 34, 0, 0, 0,251, 0, 0, 0,253, 0, 0, 0, 34, 0, 0, 0,108, 0, 0, 0,253, 0, 0, 0, 34, 0, 0, 0,109,
+ 0, 0, 0,254, 0, 0, 0, 34, 0, 0, 0,252, 0, 0, 0,254, 0, 0, 0, 34, 0, 0, 0,231, 0, 0, 0,249, 0, 0, 0, 34,
+ 0, 0, 0,112, 0, 0, 0,250, 0, 0, 0, 34, 0, 0, 0,232, 0, 0, 0,250, 0, 0, 0, 34, 0, 0, 0,113, 0, 0, 0,247,
+ 0, 0, 0, 34, 0, 0, 0,247, 0, 0, 0,249, 0, 0, 0, 34, 0, 0, 0,114, 0, 0, 0,248, 0, 0, 0, 34, 0, 0, 0,248,
+ 0, 0, 0,250, 0, 0, 0, 34, 0, 0, 0,115, 0, 0, 0,245, 0, 0, 0, 34, 0, 0, 0,245, 0, 0, 0,247, 0, 0, 0, 34,
+ 0, 0, 0,116, 0, 0, 0,246, 0, 0, 0, 34, 0, 0, 0,246, 0, 0, 0,248, 0, 0, 0, 34, 0, 0, 0,117, 0, 0, 0,243,
+ 0, 0, 0, 34, 0, 0, 0,243, 0, 0, 0,245, 0, 0, 0, 34, 0, 0, 0,118, 0, 0, 0,244, 0, 0, 0, 34, 0, 0, 0,244,
+ 0, 0, 0,246, 0, 0, 0, 34, 0, 0, 0,119, 0, 0, 0,241, 0, 0, 0, 34, 0, 0, 0,241, 0, 0, 0,243, 0, 0, 0, 34,
+ 0, 0, 0,120, 0, 0, 0,242, 0, 0, 0, 34, 0, 0, 0,242, 0, 0, 0,244, 0, 0, 0, 34, 0, 0, 0,121, 0, 0, 0,239,
+ 0, 0, 0, 34, 0, 0, 0,239, 0, 0, 0,241, 0, 0, 0, 34, 0, 0, 0,122, 0, 0, 0,240, 0, 0, 0, 34, 0, 0, 0,240,
+ 0, 0, 0,242, 0, 0, 0, 34, 0, 0, 0,123, 0, 0, 0,237, 0, 0, 0, 34, 0, 0, 0,237, 0, 0, 0,239, 0, 0, 0, 34,
+ 0, 0, 0,124, 0, 0, 0,238, 0, 0, 0, 34, 0, 0, 0,238, 0, 0, 0,240, 0, 0, 0, 34, 0, 0, 0,176, 0, 0, 0,233,
+ 0, 0, 0, 34, 0, 0, 0,233, 0, 0, 0,237, 0, 0, 0, 34, 0, 0, 0,177, 0, 0, 0,234, 0, 0, 0, 34, 0, 0, 0,234,
+ 0, 0, 0,238, 0, 0, 0, 34, 0, 0, 0,125, 0, 0, 0,235, 0, 0, 0, 34, 0, 0, 0,233, 0, 0, 0,235, 0, 0, 0, 34,
+ 0, 0, 0,126, 0, 0, 0,236, 0, 0, 0, 34, 0, 0, 0,234, 0, 0, 0,236, 0, 0, 0, 34, 0, 0, 0,235, 0, 0, 0,253,
+ 0, 0, 0, 34, 0, 0, 0,236, 0, 0, 0,254, 0, 0, 0, 34, 0, 0, 0,253, 0, 0, 0,255, 0, 0, 0, 34, 0, 0, 0,255,
+ 0, 0, 1, 17, 0, 0, 0, 34, 0, 0, 0,235, 0, 0, 1, 17, 0, 0, 0, 34, 0, 0, 0,254, 0, 0, 1, 0, 0, 0, 0, 34,
+ 0, 0, 0,236, 0, 0, 1, 18, 0, 0, 0, 34, 0, 0, 1, 0, 0, 0, 1, 18, 0, 0, 0, 34, 0, 0, 1, 17, 0, 0, 1, 19,
+ 0, 0, 0, 34, 0, 0, 0,233, 0, 0, 1, 19, 0, 0, 0, 34, 0, 0, 0,234, 0, 0, 1, 20, 0, 0, 0, 34, 0, 0, 1, 18,
+ 0, 0, 1, 20, 0, 0, 0, 34, 0, 0, 1, 15, 0, 0, 1, 19, 0, 0, 0, 34, 0, 0, 0,237, 0, 0, 1, 15, 0, 0, 0, 34,
+ 0, 0, 0,238, 0, 0, 1, 16, 0, 0, 0, 34, 0, 0, 1, 16, 0, 0, 1, 20, 0, 0, 0, 34, 0, 0, 1, 13, 0, 0, 1, 15,
+ 0, 0, 0, 34, 0, 0, 0,239, 0, 0, 1, 13, 0, 0, 0, 34, 0, 0, 0,240, 0, 0, 1, 14, 0, 0, 0, 34, 0, 0, 1, 14,
+ 0, 0, 1, 16, 0, 0, 0, 34, 0, 0, 1, 11, 0, 0, 1, 13, 0, 0, 0, 34, 0, 0, 0,241, 0, 0, 1, 11, 0, 0, 0, 34,
+ 0, 0, 0,242, 0, 0, 1, 12, 0, 0, 0, 34, 0, 0, 1, 12, 0, 0, 1, 14, 0, 0, 0, 34, 0, 0, 1, 9, 0, 0, 1, 11,
+ 0, 0, 0, 34, 0, 0, 0,243, 0, 0, 1, 9, 0, 0, 0, 34, 0, 0, 0,244, 0, 0, 1, 10, 0, 0, 0, 34, 0, 0, 1, 10,
+ 0, 0, 1, 12, 0, 0, 0, 34, 0, 0, 1, 7, 0, 0, 1, 9, 0, 0, 0, 34, 0, 0, 0,245, 0, 0, 1, 7, 0, 0, 0, 34,
+ 0, 0, 0,246, 0, 0, 1, 8, 0, 0, 0, 34, 0, 0, 1, 8, 0, 0, 1, 10, 0, 0, 0, 34, 0, 0, 1, 5, 0, 0, 1, 7,
+ 0, 0, 0, 34, 0, 0, 0,247, 0, 0, 1, 5, 0, 0, 0, 34, 0, 0, 0,248, 0, 0, 1, 6, 0, 0, 0, 34, 0, 0, 1, 6,
+ 0, 0, 1, 8, 0, 0, 0, 34, 0, 0, 1, 3, 0, 0, 1, 5, 0, 0, 0, 34, 0, 0, 0,249, 0, 0, 1, 3, 0, 0, 0, 34,
+ 0, 0, 0,250, 0, 0, 1, 4, 0, 0, 0, 34, 0, 0, 1, 4, 0, 0, 1, 6, 0, 0, 0, 34, 0, 0, 1, 3, 0, 0, 1, 21,
+ 0, 0, 0, 34, 0, 0, 0,231, 0, 0, 1, 21, 0, 0, 0, 34, 0, 0, 0,232, 0, 0, 1, 22, 0, 0, 0, 34, 0, 0, 1, 4,
+ 0, 0, 1, 22, 0, 0, 0, 34, 0, 0, 0,251, 0, 0, 1, 1, 0, 0, 0, 34, 0, 0, 0,255, 0, 0, 1, 1, 0, 0, 0, 34,
+ 0, 0, 0,252, 0, 0, 1, 2, 0, 0, 0, 34, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, 34, 0, 0, 0,229, 0, 0, 1, 23,
+ 0, 0, 0, 34, 0, 0, 1, 1, 0, 0, 1, 23, 0, 0, 0, 34, 0, 0, 0,230, 0, 0, 1, 24, 0, 0, 0, 34, 0, 0, 1, 2,
+ 0, 0, 1, 24, 0, 0, 0, 34, 0, 0, 1, 21, 0, 0, 1, 23, 0, 0, 0, 34, 0, 0, 1, 22, 0, 0, 1, 24, 0, 0, 0, 34,
+ 0, 0, 0,106, 0, 0, 1, 25, 0, 0, 0, 34, 0, 0, 0, 71, 0, 0, 1, 25, 0, 0, 0, 38, 0, 0, 0, 65, 0, 0, 0, 71,
+ 0, 0, 0, 34, 0, 0, 0,107, 0, 0, 1, 26, 0, 0, 0, 34, 0, 0, 0, 71, 0, 0, 1, 26, 0, 0, 0, 38, 0, 0, 0,104,
+ 0, 0, 1, 27, 0, 0, 0, 34, 0, 0, 1, 25, 0, 0, 1, 27, 0, 0, 0, 34, 0, 0, 0,105, 0, 0, 1, 28, 0, 0, 0, 34,
+ 0, 0, 1, 26, 0, 0, 1, 28, 0, 0, 0, 34, 0, 0, 0,102, 0, 0, 1, 29, 0, 0, 0, 34, 0, 0, 1, 27, 0, 0, 1, 29,
+ 0, 0, 0, 34, 0, 0, 0,103, 0, 0, 1, 30, 0, 0, 0, 34, 0, 0, 1, 28, 0, 0, 1, 30, 0, 0, 0, 34, 0, 0, 0,100,
+ 0, 0, 1, 31, 0, 0, 0, 34, 0, 0, 1, 29, 0, 0, 1, 31, 0, 0, 0, 34, 0, 0, 0,101, 0, 0, 1, 32, 0, 0, 0, 34,
+ 0, 0, 1, 30, 0, 0, 1, 32, 0, 0, 0, 34, 0, 0, 0, 98, 0, 0, 1, 33, 0, 0, 0, 34, 0, 0, 1, 31, 0, 0, 1, 33,
+ 0, 0, 0, 38, 0, 0, 0, 99, 0, 0, 1, 34, 0, 0, 0, 34, 0, 0, 1, 32, 0, 0, 1, 34, 0, 0, 0, 38, 0, 0, 0, 96,
+ 0, 0, 1, 35, 0, 0, 0, 34, 0, 0, 1, 33, 0, 0, 1, 35, 0, 0, 0, 34, 0, 0, 0, 97, 0, 0, 1, 36, 0, 0, 0, 34,
+ 0, 0, 1, 34, 0, 0, 1, 36, 0, 0, 0, 34, 0, 0, 0, 94, 0, 0, 1, 37, 0, 0, 0, 34, 0, 0, 1, 35, 0, 0, 1, 37,
+ 0, 0, 0, 34, 0, 0, 0, 95, 0, 0, 1, 38, 0, 0, 0, 34, 0, 0, 1, 36, 0, 0, 1, 38, 0, 0, 0, 34, 0, 0, 0, 92,
+ 0, 0, 1, 39, 0, 0, 0, 34, 0, 0, 1, 37, 0, 0, 1, 39, 0, 0, 0, 34, 0, 0, 0, 93, 0, 0, 1, 40, 0, 0, 0, 34,
+ 0, 0, 1, 38, 0, 0, 1, 40, 0, 0, 0, 34, 0, 0, 0, 90, 0, 0, 1, 41, 0, 0, 0, 34, 0, 0, 1, 39, 0, 0, 1, 41,
+ 0, 0, 0, 34, 0, 0, 0, 91, 0, 0, 1, 42, 0, 0, 0, 34, 0, 0, 1, 40, 0, 0, 1, 42, 0, 0, 0, 34, 0, 0, 1, 49,
+ 0, 0, 1, 50, 0, 0, 0, 38, 0, 0, 1, 50, 0, 0, 1, 69, 0, 0, 0, 34, 0, 0, 1, 69, 0, 0, 1, 79, 0, 0, 0, 34,
+ 0, 0, 1, 49, 0, 0, 1, 79, 0, 0, 0, 34, 0, 0, 1, 50, 0, 0, 1, 70, 0, 0, 0, 34, 0, 0, 1, 49, 0, 0, 1, 80,
+ 0, 0, 0, 34, 0, 0, 1, 70, 0, 0, 1, 80, 0, 0, 0, 34, 0, 0, 1, 48, 0, 0, 1, 49, 0, 0, 0, 38, 0, 0, 1, 77,
+ 0, 0, 1, 79, 0, 0, 0, 34, 0, 0, 1, 48, 0, 0, 1, 77, 0, 0, 0, 34, 0, 0, 1, 48, 0, 0, 1, 78, 0, 0, 0, 34,
+ 0, 0, 1, 78, 0, 0, 1, 80, 0, 0, 0, 34, 0, 0, 1, 47, 0, 0, 1, 48, 0, 0, 0, 38, 0, 0, 1, 77, 0, 0, 1, 81,
+ 0, 0, 0, 34, 0, 0, 1, 47, 0, 0, 1, 81, 0, 0, 0, 34, 0, 0, 1, 47, 0, 0, 1, 82, 0, 0, 0, 34, 0, 0, 1, 78,
+ 0, 0, 1, 82, 0, 0, 0, 34, 0, 0, 0, 89, 0, 0, 1, 47, 0, 0, 0, 38, 0, 0, 0, 87, 0, 0, 1, 81, 0, 0, 0, 34,
+ 0, 0, 0, 88, 0, 0, 1, 82, 0, 0, 0, 34, 0, 0, 1, 75, 0, 0, 1, 81, 0, 0, 0, 34, 0, 0, 0, 85, 0, 0, 1, 75,
+ 0, 0, 0, 34, 0, 0, 0, 86, 0, 0, 1, 76, 0, 0, 0, 34, 0, 0, 1, 76, 0, 0, 1, 82, 0, 0, 0, 34, 0, 0, 1, 71,
+ 0, 0, 1, 75, 0, 0, 0, 34, 0, 0, 0, 83, 0, 0, 1, 71, 0, 0, 0, 34, 0, 0, 0, 84, 0, 0, 1, 72, 0, 0, 0, 34,
+ 0, 0, 1, 72, 0, 0, 1, 76, 0, 0, 0, 34, 0, 0, 1, 71, 0, 0, 1, 73, 0, 0, 0, 34, 0, 0, 0, 81, 0, 0, 1, 73,
+ 0, 0, 0, 34, 0, 0, 0, 82, 0, 0, 1, 74, 0, 0, 0, 34, 0, 0, 1, 72, 0, 0, 1, 74, 0, 0, 0, 34, 0, 0, 1, 71,
+ 0, 0, 1, 77, 0, 0, 0, 34, 0, 0, 1, 73, 0, 0, 1, 79, 0, 0, 0, 34, 0, 0, 1, 72, 0, 0, 1, 78, 0, 0, 0, 34,
+ 0, 0, 1, 74, 0, 0, 1, 80, 0, 0, 0, 34, 0, 0, 1, 67, 0, 0, 1, 73, 0, 0, 0, 34, 0, 0, 1, 67, 0, 0, 1, 69,
+ 0, 0, 0, 34, 0, 0, 1, 68, 0, 0, 1, 74, 0, 0, 0, 34, 0, 0, 1, 68, 0, 0, 1, 70, 0, 0, 0, 34, 0, 0, 0, 79,
+ 0, 0, 1, 67, 0, 0, 0, 34, 0, 0, 0, 80, 0, 0, 1, 68, 0, 0, 0, 34, 0, 0, 0,206, 0, 0, 1, 83, 0, 0, 0, 34,
+ 0, 0, 1, 83, 0, 0, 1, 85, 0, 0, 0, 34, 0, 0, 0,212, 0, 0, 1, 85, 0, 0, 0, 34, 0, 0, 1, 84, 0, 0, 1, 86,
+ 0, 0, 0, 34, 0, 0, 0,207, 0, 0, 1, 84, 0, 0, 0, 34, 0, 0, 0,213, 0, 0, 1, 86, 0, 0, 0, 34, 0, 0, 1, 67,
+ 0, 0, 1, 83, 0, 0, 0, 34, 0, 0, 1, 68, 0, 0, 1, 84, 0, 0, 0, 34, 0, 0, 1, 85, 0, 0, 1, 87, 0, 0, 0, 34,
+ 0, 0, 0, 77, 0, 0, 1, 87, 0, 0, 0, 34, 0, 0, 0, 78, 0, 0, 1, 88, 0, 0, 0, 34, 0, 0, 1, 86, 0, 0, 1, 88,
+ 0, 0, 0, 34, 0, 0, 1, 41, 0, 0, 1, 87, 0, 0, 0, 34, 0, 0, 1, 42, 0, 0, 1, 88, 0, 0, 0, 34, 0, 0, 0, 75,
+ 0, 0, 1, 65, 0, 0, 0, 34, 0, 0, 1, 65, 0, 0, 1, 93, 0, 0, 0, 34, 0, 0, 1, 45, 0, 0, 1, 93, 0, 0, 0, 39,
+ 0, 0, 0, 75, 0, 0, 1, 45, 0, 0, 0, 38, 0, 0, 1, 66, 0, 0, 1, 94, 0, 0, 0, 34, 0, 0, 0, 75, 0, 0, 1, 66,
+ 0, 0, 0, 34, 0, 0, 1, 45, 0, 0, 1, 94, 0, 0, 0, 39, 0, 0, 1, 91, 0, 0, 1, 93, 0, 0, 0, 34, 0, 0, 0, 76,
+ 0, 0, 1, 91, 0, 0, 0, 34, 0, 0, 0, 76, 0, 0, 1, 45, 0, 0, 0, 38, 0, 0, 1, 92, 0, 0, 1, 94, 0, 0, 0, 34,
+ 0, 0, 0, 76, 0, 0, 1, 92, 0, 0, 0, 34, 0, 0, 1, 89, 0, 0, 1, 91, 0, 0, 0, 34, 0, 0, 1, 46, 0, 0, 1, 89,
+ 0, 0, 0, 34, 0, 0, 0, 76, 0, 0, 1, 46, 0, 0, 0, 38, 0, 0, 1, 90, 0, 0, 1, 92, 0, 0, 0, 34, 0, 0, 1, 46,
+ 0, 0, 1, 90, 0, 0, 0, 34, 0, 0, 1, 69, 0, 0, 1, 89, 0, 0, 0, 34, 0, 0, 1, 46, 0, 0, 1, 50, 0, 0, 0, 38,
+ 0, 0, 1, 70, 0, 0, 1, 90, 0, 0, 0, 34, 0, 0, 1, 83, 0, 0, 1, 89, 0, 0, 0, 34, 0, 0, 1, 84, 0, 0, 1, 90,
+ 0, 0, 0, 34, 0, 0, 1, 39, 0, 0, 1, 59, 0, 0, 0, 34, 0, 0, 1, 51, 0, 0, 1, 59, 0, 0, 0, 34, 0, 0, 1, 37,
+ 0, 0, 1, 51, 0, 0, 0, 34, 0, 0, 1, 40, 0, 0, 1, 60, 0, 0, 0, 34, 0, 0, 1, 38, 0, 0, 1, 52, 0, 0, 0, 34,
+ 0, 0, 1, 52, 0, 0, 1, 60, 0, 0, 0, 34, 0, 0, 0, 74, 0, 0, 1, 57, 0, 0, 0, 39, 0, 0, 1, 57, 0, 0, 1, 65,
+ 0, 0, 0, 34, 0, 0, 0, 74, 0, 0, 0, 75, 0, 0, 0, 38, 0, 0, 1, 58, 0, 0, 1, 66, 0, 0, 0, 34, 0, 0, 0, 74,
+ 0, 0, 1, 58, 0, 0, 0, 39, 0, 0, 1, 43, 0, 0, 1, 99, 0, 0, 0, 34, 0, 0, 1, 97, 0, 0, 1, 99, 0, 0, 0, 34,
+ 0, 0, 1, 44, 0, 0, 1, 97, 0, 0, 0, 34, 0, 0, 1, 43, 0, 0, 1, 44, 0, 0, 0, 38, 0, 0, 1, 98, 0, 0, 1,100,
+ 0, 0, 0, 34, 0, 0, 1, 43, 0, 0, 1,100, 0, 0, 0, 34, 0, 0, 1, 44, 0, 0, 1, 98, 0, 0, 0, 34, 0, 0, 1, 95,
+ 0, 0, 1, 97, 0, 0, 0, 34, 0, 0, 0, 73, 0, 0, 1, 95, 0, 0, 0, 34, 0, 0, 0, 73, 0, 0, 1, 44, 0, 0, 0, 38,
+ 0, 0, 1, 96, 0, 0, 1, 98, 0, 0, 0, 34, 0, 0, 0, 73, 0, 0, 1, 96, 0, 0, 0, 34, 0, 0, 1, 57, 0, 0, 1, 95,
+ 0, 0, 0, 34, 0, 0, 0, 73, 0, 0, 0, 74, 0, 0, 0, 38, 0, 0, 1, 58, 0, 0, 1, 96, 0, 0, 0, 34, 0, 0, 1, 35,
+ 0, 0, 1,103, 0, 0, 0, 34, 0, 0, 1,103, 0, 0, 1,105, 0, 0, 0, 34, 0, 0, 1, 33, 0, 0, 1,105, 0, 0, 0, 34,
+ 0, 0, 1, 36, 0, 0, 1,104, 0, 0, 0, 34, 0, 0, 1, 34, 0, 0, 1,106, 0, 0, 0, 34, 0, 0, 1,104, 0, 0, 1,106,
+ 0, 0, 0, 34, 0, 0, 1,103, 0, 0, 1,109, 0, 0, 0, 34, 0, 0, 1,107, 0, 0, 1,109, 0, 0, 0, 34, 0, 0, 1,105,
+ 0, 0, 1,107, 0, 0, 0, 34, 0, 0, 1,104, 0, 0, 1,110, 0, 0, 0, 34, 0, 0, 1,106, 0, 0, 1,108, 0, 0, 0, 34,
+ 0, 0, 1,108, 0, 0, 1,110, 0, 0, 0, 34, 0, 0, 1,109, 0, 0, 1,111, 0, 0, 0, 34, 0, 0, 1,111, 0, 0, 1,113,
+ 0, 0, 0, 34, 0, 0, 1,107, 0, 0, 1,113, 0, 0, 0, 34, 0, 0, 1,110, 0, 0, 1,112, 0, 0, 0, 34, 0, 0, 1,108,
+ 0, 0, 1,114, 0, 0, 0, 34, 0, 0, 1,112, 0, 0, 1,114, 0, 0, 0, 34, 0, 0, 1,111, 0, 0, 1,117, 0, 0, 0, 34,
+ 0, 0, 1,115, 0, 0, 1,117, 0, 0, 0, 34, 0, 0, 1,113, 0, 0, 1,115, 0, 0, 0, 34, 0, 0, 1,112, 0, 0, 1,118,
+ 0, 0, 0, 34, 0, 0, 1,114, 0, 0, 1,116, 0, 0, 0, 34, 0, 0, 1,116, 0, 0, 1,118, 0, 0, 0, 34, 0, 0, 1, 55,
+ 0, 0, 1,119, 0, 0, 0, 39, 0, 0, 1,115, 0, 0, 1,119, 0, 0, 0, 34, 0, 0, 1, 55, 0, 0, 1,117, 0, 0, 0, 34,
+ 0, 0, 1,116, 0, 0, 1,120, 0, 0, 0, 34, 0, 0, 1, 56, 0, 0, 1,120, 0, 0, 0, 39, 0, 0, 1, 56, 0, 0, 1,118,
+ 0, 0, 0, 34, 0, 0, 1, 95, 0, 0, 1,115, 0, 0, 0, 34, 0, 0, 1, 57, 0, 0, 1,119, 0, 0, 0, 39, 0, 0, 1, 96,
+ 0, 0, 1,116, 0, 0, 0, 34, 0, 0, 1, 58, 0, 0, 1,120, 0, 0, 0, 39, 0, 0, 1, 97, 0, 0, 1,113, 0, 0, 0, 34,
+ 0, 0, 1, 98, 0, 0, 1,114, 0, 0, 0, 34, 0, 0, 1, 99, 0, 0, 1,107, 0, 0, 0, 34, 0, 0, 1,100, 0, 0, 1,108,
+ 0, 0, 0, 34, 0, 0, 1, 99, 0, 0, 1,101, 0, 0, 0, 34, 0, 0, 1,101, 0, 0, 1,105, 0, 0, 0, 34, 0, 0, 1,102,
+ 0, 0, 1,106, 0, 0, 0, 34, 0, 0, 1,100, 0, 0, 1,102, 0, 0, 0, 34, 0, 0, 1, 31, 0, 0, 1,101, 0, 0, 0, 34,
+ 0, 0, 1, 32, 0, 0, 1,102, 0, 0, 0, 34, 0, 0, 0, 72, 0, 0, 1,101, 0, 0, 0, 34, 0, 0, 0, 72, 0, 0, 1, 43,
+ 0, 0, 0, 38, 0, 0, 0, 72, 0, 0, 1,102, 0, 0, 0, 34, 0, 0, 1, 25, 0, 0, 1, 31, 0, 0, 0, 38, 0, 0, 1, 26,
+ 0, 0, 1, 32, 0, 0, 0, 38, 0, 0, 0, 72, 0, 0, 1, 25, 0, 0, 0, 34, 0, 0, 0, 72, 0, 0, 1, 26, 0, 0, 0, 34,
+ 0, 0, 0, 71, 0, 0, 0, 72, 0, 0, 0, 38, 0, 0, 1, 51, 0, 0, 1,103, 0, 0, 0, 34, 0, 0, 1, 52, 0, 0, 1,104,
+ 0, 0, 0, 34, 0, 0, 1, 51, 0, 0, 1, 53, 0, 0, 0, 34, 0, 0, 1, 53, 0, 0, 1,109, 0, 0, 0, 34, 0, 0, 1, 54,
+ 0, 0, 1,110, 0, 0, 0, 34, 0, 0, 1, 52, 0, 0, 1, 54, 0, 0, 0, 34, 0, 0, 1, 53, 0, 0, 1,123, 0, 0, 0, 34,
+ 0, 0, 1,111, 0, 0, 1,123, 0, 0, 0, 34, 0, 0, 1,112, 0, 0, 1,124, 0, 0, 0, 34, 0, 0, 1, 54, 0, 0, 1,124,
+ 0, 0, 0, 34, 0, 0, 1, 55, 0, 0, 1,123, 0, 0, 0, 34, 0, 0, 1, 56, 0, 0, 1,124, 0, 0, 0, 34, 0, 0, 1, 91,
+ 0, 0, 1,127, 0, 0, 0, 34, 0, 0, 1,125, 0, 0, 1,127, 0, 0, 0, 34, 0, 0, 1, 89, 0, 0, 1,125, 0, 0, 0, 34,
+ 0, 0, 1, 92, 0, 0, 1,128, 0, 0, 0, 34, 0, 0, 1, 90, 0, 0, 1,126, 0, 0, 0, 34, 0, 0, 1,126, 0, 0, 1,128,
+ 0, 0, 0, 34, 0, 0, 1, 59, 0, 0, 1,125, 0, 0, 0, 34, 0, 0, 1, 61, 0, 0, 1,127, 0, 0, 0, 34, 0, 0, 1, 59,
+ 0, 0, 1, 61, 0, 0, 0, 34, 0, 0, 1, 60, 0, 0, 1,126, 0, 0, 0, 34, 0, 0, 1, 60, 0, 0, 1, 62, 0, 0, 0, 34,
+ 0, 0, 1, 62, 0, 0, 1,128, 0, 0, 0, 34, 0, 0, 1, 41, 0, 0, 1,125, 0, 0, 0, 34, 0, 0, 1, 42, 0, 0, 1,126,
+ 0, 0, 0, 34, 0, 0, 1, 41, 0, 0, 1, 85, 0, 0, 0, 34, 0, 0, 1, 83, 0, 0, 1,125, 0, 0, 0, 34, 0, 0, 1, 42,
+ 0, 0, 1, 86, 0, 0, 0, 34, 0, 0, 1, 84, 0, 0, 1,126, 0, 0, 0, 34, 0, 0, 1, 55, 0, 0, 1, 63, 0, 0, 0, 34,
+ 0, 0, 1, 63, 0, 0, 1,121, 0, 0, 0, 39, 0, 0, 1,119, 0, 0, 1,121, 0, 0, 0, 34, 0, 0, 1, 64, 0, 0, 1,122,
+ 0, 0, 0, 39, 0, 0, 1, 56, 0, 0, 1, 64, 0, 0, 0, 34, 0, 0, 1,120, 0, 0, 1,122, 0, 0, 0, 34, 0, 0, 1, 65,
+ 0, 0, 1,121, 0, 0, 0, 34, 0, 0, 1, 66, 0, 0, 1,122, 0, 0, 0, 34, 0, 0, 1,121, 0, 0, 1,127, 0, 0, 0, 34,
+ 0, 0, 1, 61, 0, 0, 1, 63, 0, 0, 0, 34, 0, 0, 1,122, 0, 0, 1,128, 0, 0, 0, 34, 0, 0, 1, 62, 0, 0, 1, 64,
+ 0, 0, 0, 34, 0, 0, 1, 93, 0, 0, 1,121, 0, 0, 0, 39, 0, 0, 1, 94, 0, 0, 1,122, 0, 0, 0, 39, 0, 0, 1,129,
+ 0, 0, 1,141, 0, 0, 0, 34, 0, 0, 1,129, 0, 0, 1,155, 0, 0, 0, 34, 0, 0, 1,143, 0, 0, 1,155, 0, 0, 0, 34,
+ 0, 0, 1,141, 0, 0, 1,143, 0, 0, 0, 34, 0, 0, 1,130, 0, 0, 1,156, 0, 0, 0, 34, 0, 0, 1,130, 0, 0, 1,142,
+ 0, 0, 0, 34, 0, 0, 1,142, 0, 0, 1,144, 0, 0, 0, 34, 0, 0, 1,144, 0, 0, 1,156, 0, 0, 0, 34, 0, 0, 1,143,
+ 0, 0, 1,145, 0, 0, 0, 34, 0, 0, 1,139, 0, 0, 1,145, 0, 0, 0, 34, 0, 0, 1,139, 0, 0, 1,141, 0, 0, 0, 34,
+ 0, 0, 1,144, 0, 0, 1,146, 0, 0, 0, 34, 0, 0, 1,140, 0, 0, 1,142, 0, 0, 0, 34, 0, 0, 1,140, 0, 0, 1,146,
+ 0, 0, 0, 34, 0, 0, 1,145, 0, 0, 1,147, 0, 0, 0, 34, 0, 0, 1,137, 0, 0, 1,147, 0, 0, 0, 34, 0, 0, 1,137,
+ 0, 0, 1,139, 0, 0, 0, 34, 0, 0, 1,146, 0, 0, 1,148, 0, 0, 0, 34, 0, 0, 1,138, 0, 0, 1,140, 0, 0, 0, 34,
+ 0, 0, 1,138, 0, 0, 1,148, 0, 0, 0, 34, 0, 0, 1,147, 0, 0, 1,149, 0, 0, 0, 34, 0, 0, 1,135, 0, 0, 1,149,
+ 0, 0, 0, 34, 0, 0, 1,135, 0, 0, 1,137, 0, 0, 0, 34, 0, 0, 1,148, 0, 0, 1,150, 0, 0, 0, 34, 0, 0, 1,136,
+ 0, 0, 1,138, 0, 0, 0, 34, 0, 0, 1,136, 0, 0, 1,150, 0, 0, 0, 34, 0, 0, 1,149, 0, 0, 1,151, 0, 0, 0, 34,
+ 0, 0, 1,133, 0, 0, 1,151, 0, 0, 0, 34, 0, 0, 1,133, 0, 0, 1,135, 0, 0, 0, 34, 0, 0, 1,150, 0, 0, 1,152,
+ 0, 0, 0, 34, 0, 0, 1,134, 0, 0, 1,136, 0, 0, 0, 34, 0, 0, 1,134, 0, 0, 1,152, 0, 0, 0, 34, 0, 0, 1,151,
+ 0, 0, 1,153, 0, 0, 0, 34, 0, 0, 1,131, 0, 0, 1,153, 0, 0, 0, 34, 0, 0, 1,131, 0, 0, 1,133, 0, 0, 0, 34,
+ 0, 0, 1,152, 0, 0, 1,154, 0, 0, 0, 34, 0, 0, 1,132, 0, 0, 1,134, 0, 0, 0, 34, 0, 0, 1,132, 0, 0, 1,154,
+ 0, 0, 0, 34, 0, 0, 1,151, 0, 0, 1,161, 0, 0, 0, 34, 0, 0, 1,159, 0, 0, 1,161, 0, 0, 0, 34, 0, 0, 1,153,
+ 0, 0, 1,159, 0, 0, 0, 34, 0, 0, 1,160, 0, 0, 1,162, 0, 0, 0, 34, 0, 0, 1,152, 0, 0, 1,162, 0, 0, 0, 34,
+ 0, 0, 1,154, 0, 0, 1,160, 0, 0, 0, 34, 0, 0, 1,149, 0, 0, 1,163, 0, 0, 0, 34, 0, 0, 1,161, 0, 0, 1,163,
+ 0, 0, 0, 34, 0, 0, 1,162, 0, 0, 1,164, 0, 0, 0, 34, 0, 0, 1,150, 0, 0, 1,164, 0, 0, 0, 34, 0, 0, 1,147,
+ 0, 0, 1,165, 0, 0, 0, 34, 0, 0, 1,163, 0, 0, 1,165, 0, 0, 0, 34, 0, 0, 1,164, 0, 0, 1,166, 0, 0, 0, 34,
+ 0, 0, 1,148, 0, 0, 1,166, 0, 0, 0, 34, 0, 0, 1,145, 0, 0, 1,167, 0, 0, 0, 34, 0, 0, 1,165, 0, 0, 1,167,
+ 0, 0, 0, 34, 0, 0, 1,166, 0, 0, 1,168, 0, 0, 0, 34, 0, 0, 1,146, 0, 0, 1,168, 0, 0, 0, 34, 0, 0, 1,143,
+ 0, 0, 1,169, 0, 0, 0, 34, 0, 0, 1,167, 0, 0, 1,169, 0, 0, 0, 34, 0, 0, 1,168, 0, 0, 1,170, 0, 0, 0, 34,
+ 0, 0, 1,144, 0, 0, 1,170, 0, 0, 0, 34, 0, 0, 1,155, 0, 0, 1,157, 0, 0, 0, 34, 0, 0, 1,157, 0, 0, 1,169,
+ 0, 0, 0, 34, 0, 0, 1,156, 0, 0, 1,158, 0, 0, 0, 34, 0, 0, 1,158, 0, 0, 1,170, 0, 0, 0, 34, 0, 0, 1, 61,
+ 0, 0, 1,185, 0, 0, 0, 34, 0, 0, 1,183, 0, 0, 1,185, 0, 0, 0, 34, 0, 0, 1, 59, 0, 0, 1,183, 0, 0, 0, 34,
+ 0, 0, 1, 62, 0, 0, 1,186, 0, 0, 0, 34, 0, 0, 1, 60, 0, 0, 1,184, 0, 0, 0, 34, 0, 0, 1,184, 0, 0, 1,186,
+ 0, 0, 0, 34, 0, 0, 1, 61, 0, 0, 1,131, 0, 0, 0, 34, 0, 0, 1,153, 0, 0, 1,185, 0, 0, 0, 34, 0, 0, 1, 62,
+ 0, 0, 1,132, 0, 0, 0, 34, 0, 0, 1,154, 0, 0, 1,186, 0, 0, 0, 34, 0, 0, 1, 53, 0, 0, 1,183, 0, 0, 0, 34,
+ 0, 0, 1, 54, 0, 0, 1,184, 0, 0, 0, 34, 0, 0, 1,123, 0, 0, 1,171, 0, 0, 0, 34, 0, 0, 1,155, 0, 0, 1,171,
+ 0, 0, 0, 34, 0, 0, 1,123, 0, 0, 1,129, 0, 0, 0, 34, 0, 0, 1,156, 0, 0, 1,172, 0, 0, 0, 34, 0, 0, 1,124,
+ 0, 0, 1,172, 0, 0, 0, 34, 0, 0, 1,124, 0, 0, 1,130, 0, 0, 0, 34, 0, 0, 1,159, 0, 0, 1,181, 0, 0, 0, 34,
+ 0, 0, 1,181, 0, 0, 1,185, 0, 0, 0, 34, 0, 0, 1,160, 0, 0, 1,182, 0, 0, 0, 34, 0, 0, 1,182, 0, 0, 1,186,
+ 0, 0, 0, 34, 0, 0, 1,179, 0, 0, 1,187, 0, 0, 0, 34, 0, 0, 1,185, 0, 0, 1,187, 0, 0, 0, 34, 0, 0, 1,179,
+ 0, 0, 1,181, 0, 0, 0, 34, 0, 0, 1,186, 0, 0, 1,188, 0, 0, 0, 34, 0, 0, 1,180, 0, 0, 1,188, 0, 0, 0, 34,
+ 0, 0, 1,180, 0, 0, 1,182, 0, 0, 0, 34, 0, 0, 1,175, 0, 0, 1,187, 0, 0, 0, 34, 0, 0, 1,177, 0, 0, 1,179,
+ 0, 0, 0, 34, 0, 0, 1,175, 0, 0, 1,177, 0, 0, 0, 34, 0, 0, 1,176, 0, 0, 1,188, 0, 0, 0, 34, 0, 0, 1,176,
+ 0, 0, 1,178, 0, 0, 0, 34, 0, 0, 1,178, 0, 0, 1,180, 0, 0, 0, 34, 0, 0, 1,173, 0, 0, 1,189, 0, 0, 0, 34,
+ 0, 0, 1,187, 0, 0, 1,189, 0, 0, 0, 34, 0, 0, 1,173, 0, 0, 1,175, 0, 0, 0, 34, 0, 0, 1,188, 0, 0, 1,190,
+ 0, 0, 0, 34, 0, 0, 1,174, 0, 0, 1,190, 0, 0, 0, 34, 0, 0, 1,174, 0, 0, 1,176, 0, 0, 0, 34, 0, 0, 1,171,
+ 0, 0, 1,189, 0, 0, 0, 34, 0, 0, 1,173, 0, 0, 1,191, 0, 0, 0, 34, 0, 0, 1,171, 0, 0, 1,191, 0, 0, 0, 32,
+ 0, 0, 1,172, 0, 0, 1,190, 0, 0, 0, 34, 0, 0, 1,172, 0, 0, 1,192, 0, 0, 0, 32, 0, 0, 1,174, 0, 0, 1,192,
+ 0, 0, 0, 34, 0, 0, 1,157, 0, 0, 1,191, 0, 0, 0, 34, 0, 0, 1,158, 0, 0, 1,192, 0, 0, 0, 34, 0, 0, 1, 53,
+ 0, 0, 1,189, 0, 0, 0, 34, 0, 0, 1, 54, 0, 0, 1,190, 0, 0, 0, 34, 0, 0, 1,183, 0, 0, 1,187, 0, 0, 0, 34,
+ 0, 0, 1,184, 0, 0, 1,188, 0, 0, 0, 34, 0, 0, 1,191, 0, 0, 1,193, 0, 0, 0, 34, 0, 0, 1,193, 0, 0, 1,217,
+ 0, 0, 0, 34, 0, 0, 1,157, 0, 0, 1,217, 0, 0, 0, 34, 0, 0, 1,192, 0, 0, 1,194, 0, 0, 0, 34, 0, 0, 1,158,
+ 0, 0, 1,218, 0, 0, 0, 34, 0, 0, 1,194, 0, 0, 1,218, 0, 0, 0, 34, 0, 0, 1,173, 0, 0, 1,203, 0, 0, 0, 34,
+ 0, 0, 1,193, 0, 0, 1,203, 0, 0, 0, 34, 0, 0, 1,174, 0, 0, 1,204, 0, 0, 0, 34, 0, 0, 1,194, 0, 0, 1,204,
+ 0, 0, 0, 34, 0, 0, 1,175, 0, 0, 1,201, 0, 0, 0, 34, 0, 0, 1,201, 0, 0, 1,203, 0, 0, 0, 34, 0, 0, 1,176,
+ 0, 0, 1,202, 0, 0, 0, 34, 0, 0, 1,202, 0, 0, 1,204, 0, 0, 0, 34, 0, 0, 1,177, 0, 0, 1,199, 0, 0, 0, 34,
+ 0, 0, 1,199, 0, 0, 1,201, 0, 0, 0, 34, 0, 0, 1,178, 0, 0, 1,200, 0, 0, 0, 34, 0, 0, 1,200, 0, 0, 1,202,
+ 0, 0, 0, 34, 0, 0, 1,179, 0, 0, 1,197, 0, 0, 0, 34, 0, 0, 1,197, 0, 0, 1,199, 0, 0, 0, 34, 0, 0, 1,180,
+ 0, 0, 1,198, 0, 0, 0, 34, 0, 0, 1,198, 0, 0, 1,200, 0, 0, 0, 34, 0, 0, 1,181, 0, 0, 1,195, 0, 0, 0, 34,
+ 0, 0, 1,195, 0, 0, 1,197, 0, 0, 0, 34, 0, 0, 1,182, 0, 0, 1,196, 0, 0, 0, 34, 0, 0, 1,196, 0, 0, 1,198,
+ 0, 0, 0, 34, 0, 0, 1,159, 0, 0, 1,215, 0, 0, 0, 34, 0, 0, 1,195, 0, 0, 1,215, 0, 0, 0, 34, 0, 0, 1,160,
+ 0, 0, 1,216, 0, 0, 0, 34, 0, 0, 1,196, 0, 0, 1,216, 0, 0, 0, 34, 0, 0, 1,205, 0, 0, 1,217, 0, 0, 0, 34,
+ 0, 0, 1,169, 0, 0, 1,205, 0, 0, 0, 34, 0, 0, 1,170, 0, 0, 1,206, 0, 0, 0, 34, 0, 0, 1,206, 0, 0, 1,218,
+ 0, 0, 0, 34, 0, 0, 1,205, 0, 0, 1,207, 0, 0, 0, 34, 0, 0, 1,167, 0, 0, 1,207, 0, 0, 0, 34, 0, 0, 1,168,
+ 0, 0, 1,208, 0, 0, 0, 34, 0, 0, 1,206, 0, 0, 1,208, 0, 0, 0, 34, 0, 0, 1,207, 0, 0, 1,209, 0, 0, 0, 34,
+ 0, 0, 1,165, 0, 0, 1,209, 0, 0, 0, 34, 0, 0, 1,166, 0, 0, 1,210, 0, 0, 0, 34, 0, 0, 1,208, 0, 0, 1,210,
+ 0, 0, 0, 34, 0, 0, 1,209, 0, 0, 1,211, 0, 0, 0, 34, 0, 0, 1,163, 0, 0, 1,211, 0, 0, 0, 34, 0, 0, 1,164,
+ 0, 0, 1,212, 0, 0, 0, 34, 0, 0, 1,210, 0, 0, 1,212, 0, 0, 0, 34, 0, 0, 1,211, 0, 0, 1,213, 0, 0, 0, 34,
+ 0, 0, 1,161, 0, 0, 1,213, 0, 0, 0, 34, 0, 0, 1,162, 0, 0, 1,214, 0, 0, 0, 34, 0, 0, 1,212, 0, 0, 1,214,
+ 0, 0, 0, 34, 0, 0, 1,213, 0, 0, 1,215, 0, 0, 0, 34, 0, 0, 1,214, 0, 0, 1,216, 0, 0, 0, 34, 0, 0, 1,197,
+ 0, 0, 1,221, 0, 0, 0, 34, 0, 0, 1,219, 0, 0, 1,221, 0, 0, 0, 34, 0, 0, 1,199, 0, 0, 1,219, 0, 0, 0, 34,
+ 0, 0, 1,198, 0, 0, 1,222, 0, 0, 0, 34, 0, 0, 1,200, 0, 0, 1,220, 0, 0, 0, 34, 0, 0, 1,220, 0, 0, 1,222,
+ 0, 0, 0, 34, 0, 0, 1,221, 0, 0, 1,223, 0, 0, 0, 34, 0, 0, 1,223, 0, 0, 1,225, 0, 0, 0, 32, 0, 0, 1,219,
+ 0, 0, 1,225, 0, 0, 0, 34, 0, 0, 1,222, 0, 0, 1,224, 0, 0, 0, 34, 0, 0, 1,220, 0, 0, 1,226, 0, 0, 0, 34,
+ 0, 0, 1,224, 0, 0, 1,226, 0, 0, 0, 32, 0, 0, 1,223, 0, 0, 1,229, 0, 0, 0, 34, 0, 0, 1,227, 0, 0, 1,229,
+ 0, 0, 0, 34, 0, 0, 1,225, 0, 0, 1,227, 0, 0, 0, 34, 0, 0, 1,224, 0, 0, 1,230, 0, 0, 0, 34, 0, 0, 1,226,
+ 0, 0, 1,228, 0, 0, 0, 34, 0, 0, 1,228, 0, 0, 1,230, 0, 0, 0, 34, 0, 0, 1,229, 0, 0, 1,231, 0, 0, 0, 34,
+ 0, 0, 1,231, 0, 0, 1,233, 0, 0, 0, 34, 0, 0, 1,227, 0, 0, 1,233, 0, 0, 0, 34, 0, 0, 1,230, 0, 0, 1,232,
+ 0, 0, 0, 34, 0, 0, 1,228, 0, 0, 1,234, 0, 0, 0, 34, 0, 0, 1,232, 0, 0, 1,234, 0, 0, 0, 34, 0, 0, 1,217,
+ 0, 0, 1,227, 0, 0, 0, 34, 0, 0, 1,205, 0, 0, 1,233, 0, 0, 0, 34, 0, 0, 1,218, 0, 0, 1,228, 0, 0, 0, 34,
+ 0, 0, 1,206, 0, 0, 1,234, 0, 0, 0, 34, 0, 0, 1,193, 0, 0, 1,225, 0, 0, 0, 34, 0, 0, 1,194, 0, 0, 1,226,
+ 0, 0, 0, 34, 0, 0, 1,203, 0, 0, 1,219, 0, 0, 0, 34, 0, 0, 1,204, 0, 0, 1,220, 0, 0, 0, 34, 0, 0, 1,215,
+ 0, 0, 1,221, 0, 0, 0, 34, 0, 0, 1,216, 0, 0, 1,222, 0, 0, 0, 34, 0, 0, 1,213, 0, 0, 1,223, 0, 0, 0, 34,
+ 0, 0, 1,214, 0, 0, 1,224, 0, 0, 0, 34, 0, 0, 1,211, 0, 0, 1,229, 0, 0, 0, 34, 0, 0, 1,212, 0, 0, 1,230,
+ 0, 0, 0, 34, 0, 0, 1,209, 0, 0, 1,231, 0, 0, 0, 34, 0, 0, 1,210, 0, 0, 1,232, 0, 0, 0, 34, 0, 0, 1,207,
+ 0, 0, 1,233, 0, 0, 0, 34, 0, 0, 1,208, 0, 0, 1,234, 0, 0, 0, 34, 0, 0, 1,131, 0, 0, 1,245, 0, 0, 0, 34,
+ 0, 0, 1,243, 0, 0, 1,245, 0, 0, 0, 39, 0, 0, 1,133, 0, 0, 1,243, 0, 0, 0, 34, 0, 0, 1,132, 0, 0, 1,246,
+ 0, 0, 0, 34, 0, 0, 1,134, 0, 0, 1,244, 0, 0, 0, 34, 0, 0, 1,244, 0, 0, 1,246, 0, 0, 0, 39, 0, 0, 1,241,
+ 0, 0, 1,243, 0, 0, 0, 39, 0, 0, 1,135, 0, 0, 1,241, 0, 0, 0, 34, 0, 0, 1,136, 0, 0, 1,242, 0, 0, 0, 34,
+ 0, 0, 1,242, 0, 0, 1,244, 0, 0, 0, 39, 0, 0, 1,239, 0, 0, 1,241, 0, 0, 0, 39, 0, 0, 1,137, 0, 0, 1,239,
+ 0, 0, 0, 34, 0, 0, 1,138, 0, 0, 1,240, 0, 0, 0, 34, 0, 0, 1,240, 0, 0, 1,242, 0, 0, 0, 39, 0, 0, 1,237,
+ 0, 0, 1,239, 0, 0, 0, 39, 0, 0, 1,139, 0, 0, 1,237, 0, 0, 0, 34, 0, 0, 1,140, 0, 0, 1,238, 0, 0, 0, 34,
+ 0, 0, 1,238, 0, 0, 1,240, 0, 0, 0, 39, 0, 0, 1,235, 0, 0, 1,237, 0, 0, 0, 39, 0, 0, 1,141, 0, 0, 1,235,
+ 0, 0, 0, 34, 0, 0, 1,142, 0, 0, 1,236, 0, 0, 0, 34, 0, 0, 1,236, 0, 0, 1,238, 0, 0, 0, 39, 0, 0, 1,235,
+ 0, 0, 1,247, 0, 0, 0, 39, 0, 0, 1,129, 0, 0, 1,247, 0, 0, 0, 34, 0, 0, 1,130, 0, 0, 1,248, 0, 0, 0, 34,
+ 0, 0, 1,236, 0, 0, 1,248, 0, 0, 0, 39, 0, 0, 1,235, 0, 0, 1,243, 0, 0, 0, 34, 0, 0, 1,245, 0, 0, 1,247,
+ 0, 0, 0, 34, 0, 0, 1,236, 0, 0, 1,244, 0, 0, 0, 34, 0, 0, 1,246, 0, 0, 1,248, 0, 0, 0, 34, 0, 0, 1,237,
+ 0, 0, 1,241, 0, 0, 0, 34, 0, 0, 1,238, 0, 0, 1,242, 0, 0, 0, 34, 0, 0, 1, 55, 0, 0, 1,247, 0, 0, 0, 39,
+ 0, 0, 1, 56, 0, 0, 1,248, 0, 0, 0, 39, 0, 0, 1, 63, 0, 0, 1,245, 0, 0, 0, 39, 0, 0, 1, 64, 0, 0, 1,246,
+ 0, 0, 0, 39, 0, 0, 0, 14, 0, 0, 0,249, 0, 0, 0, 34, 0, 0, 0, 14, 0, 0, 0,178, 0, 0, 0, 34, 0, 0, 0, 14,
+ 0, 0, 0,113, 0, 0, 0, 34, 0, 0, 0, 14, 0, 0, 0,161, 0, 0, 0, 34, 0, 0, 0, 20, 0, 0, 0,112, 0, 0, 0, 34,
+ 0, 0, 0, 16, 0, 0, 0,112, 0, 0, 0, 34, 0, 0, 0, 9, 0, 0, 0,112, 0, 0, 0, 34, 0, 0, 0, 13, 0, 0, 0,112,
+ 0, 0, 0, 34, 68, 65, 84, 65, 0, 0, 1, 44, 13, 65,108,112, 0, 0, 1, 35, 0, 0, 0, 5, 0, 0, 0, 4, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,160,128, 32, 0, 0, 0, 5, 0, 0, 0, 20, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 86, 84,101,120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12,117,208, 32, 0, 0, 0, 6, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 67,111,108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 7,160,168, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 39, 16, 7,160,128, 32, 0, 0, 0, 54, 0, 0, 1,244, 0, 0, 0, 45, 0, 0, 0, 0,
+ 0, 0, 0, 2, 0, 0, 0, 43, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 46, 0, 0, 0, 44, 0, 0, 0, 1,
+ 0, 0, 0, 43, 0, 0, 0, 2, 0, 0, 0, 4, 0, 0, 0, 41, 0, 0, 0, 1, 0, 0, 0, 5, 0, 0, 0, 3, 0, 0, 0, 44,
+ 0, 0, 0, 42, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 8, 0, 0, 0, 6, 0, 0, 0, 4, 0, 0, 0, 1, 0, 0, 0, 7,
+ 0, 0, 0, 9, 0, 0, 0, 3, 0, 0, 0, 5, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 8, 0, 0, 0, 2,
+ 0, 0, 0, 1, 0, 0, 0, 9, 0, 0, 0, 11, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 10, 0, 0, 0, 12,
+ 0, 0, 0, 14, 0, 0, 0, 8, 0, 0, 0, 1, 0, 0, 0,112, 0, 0, 0, 13, 0, 0, 0, 11, 0, 0, 0, 9, 0, 0, 0, 1,
+ 0, 0, 0, 8, 0, 0, 0, 14, 0, 0, 0, 15, 0, 0, 0, 6, 0, 0, 0, 1, 0, 0, 0, 16, 0, 0, 0,112, 0, 0, 0, 9,
+ 0, 0, 0, 7, 0, 0, 0, 1, 0, 0, 0, 14, 0, 0, 0, 19, 0, 0, 0, 17, 0, 0, 0, 15, 0, 0, 0, 1, 0, 0, 0, 18,
+ 0, 0, 0, 20, 0, 0, 0,112, 0, 0, 0, 16, 0, 0, 0, 1, 0, 0, 0, 12, 0, 0, 0, 21, 0, 0, 0, 19, 0, 0, 0, 14,
+ 0, 0, 0, 1, 0, 0, 0, 20, 0, 0, 0, 22, 0, 0, 0, 13, 0, 0, 0,112, 0, 0, 0, 1, 0, 0, 0, 21, 0, 0, 0, 23,
+ 0, 0, 0, 25, 0, 0, 0, 19, 0, 0, 0, 1, 0, 0, 0, 26, 0, 0, 0, 24, 0, 0, 0, 22, 0, 0, 0, 20, 0, 0, 0, 1,
+ 0, 0, 0, 19, 0, 0, 0, 25, 0, 0, 0, 27, 0, 0, 0, 17, 0, 0, 0, 1, 0, 0, 0, 28, 0, 0, 0, 26, 0, 0, 0, 20,
+ 0, 0, 0, 18, 0, 0, 0, 1, 0, 0, 0, 25, 0, 0, 0, 31, 0, 0, 0, 29, 0, 0, 0, 27, 0, 0, 0, 1, 0, 0, 0, 30,
+ 0, 0, 0, 32, 0, 0, 0, 26, 0, 0, 0, 28, 0, 0, 0, 1, 0, 0, 0, 23, 0, 0, 0, 33, 0, 0, 0, 31, 0, 0, 0, 25,
+ 0, 0, 0, 1, 0, 0, 0, 32, 0, 0, 0, 34, 0, 0, 0, 24, 0, 0, 0, 26, 0, 0, 0, 1, 0, 0, 0, 33, 0, 0, 0, 35,
+ 0, 0, 0, 37, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0, 38, 0, 0, 0, 36, 0, 0, 0, 34, 0, 0, 0, 32, 0, 0, 0, 1,
+ 0, 0, 0, 31, 0, 0, 0, 37, 0, 0, 0, 39, 0, 0, 0, 29, 0, 0, 0, 1, 0, 0, 0, 40, 0, 0, 0, 38, 0, 0, 0, 32,
+ 0, 0, 0, 30, 0, 0, 0, 1, 0, 0, 0, 37, 0, 0, 0, 43, 0, 0, 0, 41, 0, 0, 0, 39, 0, 0, 0, 1, 0, 0, 0, 42,
+ 0, 0, 0, 44, 0, 0, 0, 38, 0, 0, 0, 40, 0, 0, 0, 1, 0, 0, 0, 35, 0, 0, 0, 45, 0, 0, 0, 43, 0, 0, 0, 37,
+ 0, 0, 0, 1, 0, 0, 0, 44, 0, 0, 0, 46, 0, 0, 0, 36, 0, 0, 0, 38, 0, 0, 0, 1, 0, 0, 0, 45, 0, 0, 0, 35,
+ 0, 0, 0, 49, 0, 0, 0, 47, 0, 0, 0, 1, 0, 0, 0, 50, 0, 0, 0, 36, 0, 0, 0, 46, 0, 0, 0, 48, 0, 0, 0, 1,
+ 0, 0, 0, 35, 0, 0, 0, 33, 0, 0, 0, 51, 0, 0, 0, 49, 0, 0, 0, 1, 0, 0, 0, 52, 0, 0, 0, 34, 0, 0, 0, 36,
+ 0, 0, 0, 50, 0, 0, 0, 1, 0, 0, 0, 33, 0, 0, 0, 23, 0, 0, 0, 53, 0, 0, 0, 51, 0, 0, 0, 1, 0, 0, 0, 54,
+ 0, 0, 0, 24, 0, 0, 0, 34, 0, 0, 0, 52, 0, 0, 0, 1, 0, 0, 0, 23, 0, 0, 0, 21, 0, 0, 0, 55, 0, 0, 0, 53,
+ 0, 0, 0, 1, 0, 0, 0, 56, 0, 0, 0, 22, 0, 0, 0, 24, 0, 0, 0, 54, 0, 0, 0, 1, 0, 0, 0, 21, 0, 0, 0, 12,
+ 0, 0, 0, 57, 0, 0, 0, 55, 0, 0, 0, 1, 0, 0, 0, 58, 0, 0, 0, 13, 0, 0, 0, 22, 0, 0, 0, 56, 0, 0, 0, 1,
+ 0, 0, 0, 12, 0, 0, 0, 10, 0, 0, 0, 61, 0, 0, 0, 57, 0, 0, 0, 1, 0, 0, 0, 62, 0, 0, 0, 11, 0, 0, 0, 13,
+ 0, 0, 0, 58, 0, 0, 0, 1, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 61, 0, 0, 0, 1, 0, 0, 0, 64,
+ 0, 0, 0, 1, 0, 0, 0, 11, 0, 0, 0, 62, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 45, 0, 0, 0, 47, 0, 0, 0, 63,
+ 0, 0, 0, 1, 0, 0, 0, 48, 0, 0, 0, 46, 0, 0, 0, 1, 0, 0, 0, 64, 0, 0, 0, 1, 0, 0, 0, 59, 0, 0, 0, 63,
+ 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 48, 0, 0, 0, 64, 0, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 1,
+ 0, 0, 0, 61, 0, 0, 0, 63, 0, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 60, 0, 0, 0, 64, 0, 0, 0, 62,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 59, 0, 0, 0, 57, 0, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 62,
+ 0, 0, 0, 58, 0, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 59, 0, 0, 0, 55, 0, 0, 0, 57, 0, 0, 0, 0,
+ 0, 0, 0, 1, 0, 0, 0, 58, 0, 0, 0, 56, 0, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 59, 0, 0, 0, 53,
+ 0, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 56, 0, 0, 0, 54, 0, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 1,
+ 0, 0, 0, 59, 0, 0, 0, 51, 0, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 54, 0, 0, 0, 52, 0, 0, 0, 60,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 59, 0, 0, 0, 49, 0, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 52,
+ 0, 0, 0, 50, 0, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 59, 0, 0, 0, 47, 0, 0, 0, 49, 0, 0, 0, 0,
+ 0, 0, 0, 1, 0, 0, 0, 50, 0, 0, 0, 48, 0, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 87, 0, 0, 0,171,
+ 0, 0, 0,173, 0, 0, 0, 89, 0, 0, 0, 1, 0, 0, 0,173, 0, 0, 0,172, 0, 0, 0, 88, 0, 0, 0, 89, 0, 0, 0, 1,
+ 0, 0, 0, 85, 0, 0, 0,169, 0, 0, 0,171, 0, 0, 0, 87, 0, 0, 0, 1, 0, 0, 0,172, 0, 0, 0,170, 0, 0, 0, 86,
+ 0, 0, 0, 88, 0, 0, 0, 1, 0, 0, 0, 83, 0, 0, 0,167, 0, 0, 0,169, 0, 0, 0, 85, 0, 0, 0, 1, 0, 0, 0,170,
+ 0, 0, 0,168, 0, 0, 0, 84, 0, 0, 0, 86, 0, 0, 0, 1, 0, 0, 0, 81, 0, 0, 0,165, 0, 0, 0,167, 0, 0, 0, 83,
+ 0, 0, 0, 1, 0, 0, 0,168, 0, 0, 0,166, 0, 0, 0, 82, 0, 0, 0, 84, 0, 0, 0, 1, 0, 0, 0, 79, 0, 0, 0,163,
+ 0, 0, 0,165, 0, 0, 0, 81, 0, 0, 0, 1, 0, 0, 0,166, 0, 0, 0,164, 0, 0, 0, 80, 0, 0, 0, 82, 0, 0, 0, 1,
+ 0, 0, 0, 77, 0, 0, 0, 90, 0, 0, 0,143, 0, 0, 0,161, 0, 0, 0, 1, 0, 0, 0,144, 0, 0, 0, 91, 0, 0, 0, 78,
+ 0, 0, 0,162, 0, 0, 0, 1, 0, 0, 0, 90, 0, 0, 0, 92, 0, 0, 0,145, 0, 0, 0,143, 0, 0, 0, 1, 0, 0, 0,146,
+ 0, 0, 0, 93, 0, 0, 0, 91, 0, 0, 0,144, 0, 0, 0, 1, 0, 0, 0, 92, 0, 0, 0, 94, 0, 0, 0,147, 0, 0, 0,145,
+ 0, 0, 0, 1, 0, 0, 0,148, 0, 0, 0, 95, 0, 0, 0, 93, 0, 0, 0,146, 0, 0, 0, 1, 0, 0, 0, 94, 0, 0, 0, 96,
+ 0, 0, 0,149, 0, 0, 0,147, 0, 0, 0, 1, 0, 0, 0,150, 0, 0, 0, 97, 0, 0, 0, 95, 0, 0, 0,148, 0, 0, 0, 1,
+ 0, 0, 0, 96, 0, 0, 0, 98, 0, 0, 0,151, 0, 0, 0,149, 0, 0, 0, 1, 0, 0, 0,152, 0, 0, 0, 99, 0, 0, 0, 97,
+ 0, 0, 0,150, 0, 0, 0, 1, 0, 0, 0, 98, 0, 0, 0,100, 0, 0, 0,153, 0, 0, 0,151, 0, 0, 0, 1, 0, 0, 0,154,
+ 0, 0, 0,101, 0, 0, 0, 99, 0, 0, 0,152, 0, 0, 0, 1, 0, 0, 0,100, 0, 0, 0,102, 0, 0, 0,155, 0, 0, 0,153,
+ 0, 0, 0, 1, 0, 0, 0,156, 0, 0, 0,103, 0, 0, 0,101, 0, 0, 0,154, 0, 0, 0, 1, 0, 0, 0,102, 0, 0, 0,104,
+ 0, 0, 0,157, 0, 0, 0,155, 0, 0, 0, 1, 0, 0, 0,158, 0, 0, 0,105, 0, 0, 0,103, 0, 0, 0,156, 0, 0, 0, 1,
+ 0, 0, 0,104, 0, 0, 0,106, 0, 0, 0,159, 0, 0, 0,157, 0, 0, 0, 1, 0, 0, 0,160, 0, 0, 0,107, 0, 0, 0,105,
+ 0, 0, 0,158, 0, 0, 0, 1, 0, 0, 0,106, 0, 0, 0, 65, 0, 0, 0, 66, 0, 0, 0,159, 0, 0, 0, 1, 0, 0, 0, 66,
+ 0, 0, 0, 65, 0, 0, 0,107, 0, 0, 0,160, 0, 0, 0, 1, 0, 0, 0,108, 0, 0, 0,125, 0, 0, 0,157, 0, 0, 0,159,
+ 0, 0, 0, 1, 0, 0, 0,158, 0, 0, 0,126, 0, 0, 0,109, 0, 0, 0,160, 0, 0, 0, 1, 0, 0, 0,125, 0, 0, 0,176,
+ 0, 0, 0,155, 0, 0, 0,157, 0, 0, 0, 1, 0, 0, 0,156, 0, 0, 0,177, 0, 0, 0,126, 0, 0, 0,158, 0, 0, 0, 1,
+ 0, 0, 0,123, 0, 0, 0,153, 0, 0, 0,155, 0, 0, 0,176, 0, 0, 0, 1, 0, 0, 0,156, 0, 0, 0,154, 0, 0, 0,124,
+ 0, 0, 0,177, 0, 0, 0, 1, 0, 0, 0,121, 0, 0, 0,151, 0, 0, 0,153, 0, 0, 0,123, 0, 0, 0, 1, 0, 0, 0,154,
+ 0, 0, 0,152, 0, 0, 0,122, 0, 0, 0,124, 0, 0, 0, 1, 0, 0, 0,119, 0, 0, 0,149, 0, 0, 0,151, 0, 0, 0,121,
+ 0, 0, 0, 1, 0, 0, 0,152, 0, 0, 0,150, 0, 0, 0,120, 0, 0, 0,122, 0, 0, 0, 1, 0, 0, 0,117, 0, 0, 0,147,
+ 0, 0, 0,149, 0, 0, 0,119, 0, 0, 0, 1, 0, 0, 0,150, 0, 0, 0,148, 0, 0, 0,118, 0, 0, 0,120, 0, 0, 0, 1,
+ 0, 0, 0,115, 0, 0, 0,145, 0, 0, 0,147, 0, 0, 0,117, 0, 0, 0, 1, 0, 0, 0,148, 0, 0, 0,146, 0, 0, 0,116,
+ 0, 0, 0,118, 0, 0, 0, 1, 0, 0, 0,113, 0, 0, 0,143, 0, 0, 0,145, 0, 0, 0,115, 0, 0, 0, 1, 0, 0, 0,146,
+ 0, 0, 0,144, 0, 0, 0,114, 0, 0, 0,116, 0, 0, 0, 1, 0, 0, 0, 14, 0, 0, 0,161, 0, 0, 0,143, 0, 0, 0,113,
+ 0, 0, 0, 1, 0, 0, 0,144, 0, 0, 0,162, 0, 0, 0,112, 0, 0, 0,114, 0, 0, 0, 1, 0, 0, 0, 14, 0, 0, 0,178,
+ 0, 0, 0,174, 0, 0, 0,161, 0, 0, 0, 1, 0, 0, 0,174, 0, 0, 0,179, 0, 0, 0,112, 0, 0, 0,162, 0, 0, 0, 1,
+ 0, 0, 0,108, 0, 0, 0,159, 0, 0, 0, 66, 0, 0, 0,110, 0, 0, 0, 1, 0, 0, 0, 66, 0, 0, 0,160, 0, 0, 0,109,
+ 0, 0, 0,111, 0, 0, 0, 1, 0, 0, 0,110, 0, 0, 0, 66, 0, 0, 0,175, 0, 0, 0,180, 0, 0, 0, 1, 0, 0, 0,175,
+ 0, 0, 0, 66, 0, 0, 0,111, 0, 0, 0,181, 0, 0, 0, 1, 0, 0, 0,174, 0, 0, 0,178, 0, 0, 0,180, 0, 0, 0,175,
+ 0, 0, 0, 1, 0, 0, 0,181, 0, 0, 0,179, 0, 0, 0,174, 0, 0, 0,175, 0, 0, 0, 1, 0, 0, 0,132, 0, 0, 0,134,
+ 0, 0, 0,173, 0, 0, 0,171, 0, 0, 0, 1, 0, 0, 0,173, 0, 0, 0,134, 0, 0, 0,133, 0, 0, 0,172, 0, 0, 0, 1,
+ 0, 0, 0,130, 0, 0, 0,132, 0, 0, 0,171, 0, 0, 0,169, 0, 0, 0, 1, 0, 0, 0,172, 0, 0, 0,133, 0, 0, 0,131,
+ 0, 0, 0,170, 0, 0, 0, 1, 0, 0, 0,128, 0, 0, 0,130, 0, 0, 0,169, 0, 0, 0,167, 0, 0, 0, 1, 0, 0, 0,170,
+ 0, 0, 0,131, 0, 0, 0,129, 0, 0, 0,168, 0, 0, 0, 1, 0, 0, 0,163, 0, 0, 0,184, 0, 0, 0,182, 0, 0, 0,165,
+ 0, 0, 0, 1, 0, 0, 0,183, 0, 0, 0,185, 0, 0, 0,164, 0, 0, 0,166, 0, 0, 0, 1, 0, 0, 0,128, 0, 0, 0,167,
+ 0, 0, 0,165, 0, 0, 0,182, 0, 0, 0, 1, 0, 0, 0,166, 0, 0, 0,168, 0, 0, 0,129, 0, 0, 0,183, 0, 0, 0, 1,
+ 0, 0, 0,141, 0, 0, 0,187, 0, 0, 0,186, 0, 0, 0,184, 0, 0, 0, 1, 0, 0, 0,186, 0, 0, 0,187, 0, 0, 0,142,
+ 0, 0, 0,185, 0, 0, 0, 1, 0, 0, 0,182, 0, 0, 0,184, 0, 0, 0,186, 0, 0, 0, 67, 0, 0, 0, 1, 0, 0, 0,186,
+ 0, 0, 0,185, 0, 0, 0,183, 0, 0, 0, 67, 0, 0, 0, 1, 0, 0, 0,127, 0, 0, 0,128, 0, 0, 0,182, 0, 0, 0, 67,
+ 0, 0, 0, 1, 0, 0, 0,183, 0, 0, 0,129, 0, 0, 0,127, 0, 0, 0, 67, 0, 0, 0, 1, 0, 0, 0,139, 0, 0, 0,190,
+ 0, 0, 0,188, 0, 0, 0,141, 0, 0, 0, 1, 0, 0, 0,189, 0, 0, 0,191, 0, 0, 0,140, 0, 0, 0,142, 0, 0, 0, 1,
+ 0, 0, 0,137, 0, 0, 0,192, 0, 0, 0,190, 0, 0, 0,139, 0, 0, 0, 1, 0, 0, 0,191, 0, 0, 0,193, 0, 0, 0,138,
+ 0, 0, 0,140, 0, 0, 0, 1, 0, 0, 0,136, 0, 0, 0,194, 0, 0, 0,192, 0, 0, 0,137, 0, 0, 0, 1, 0, 0, 0,193,
+ 0, 0, 0,195, 0, 0, 0,136, 0, 0, 0,138, 0, 0, 0, 1, 0, 0, 0,135, 0, 0, 0, 69, 0, 0, 0,194, 0, 0, 0,136,
+ 0, 0, 0, 1, 0, 0, 0,195, 0, 0, 0, 69, 0, 0, 0,135, 0, 0, 0,136, 0, 0, 0, 1, 0, 0, 0,187, 0, 0, 0,141,
+ 0, 0, 0,188, 0, 0, 0, 68, 0, 0, 0, 1, 0, 0, 0,189, 0, 0, 0,142, 0, 0, 0,187, 0, 0, 0, 68, 0, 0, 0, 1,
+ 0, 0, 0, 68, 0, 0, 0,188, 0, 0, 0,203, 0, 0, 0,205, 0, 0, 0, 1, 0, 0, 0,204, 0, 0, 0,189, 0, 0, 0, 68,
+ 0, 0, 0,205, 0, 0, 0, 1, 0, 0, 0, 69, 0, 0, 0,196, 0, 0, 0,197, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0,198,
+ 0, 0, 0,196, 0, 0, 0, 69, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,194, 0, 0, 0,197, 0, 0, 0,199, 0, 0, 0,192,
+ 0, 0, 0, 1, 0, 0, 0,200, 0, 0, 0,198, 0, 0, 0,195, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0,192, 0, 0, 0,199,
+ 0, 0, 0,201, 0, 0, 0,190, 0, 0, 0, 1, 0, 0, 0,202, 0, 0, 0,200, 0, 0, 0,193, 0, 0, 0,191, 0, 0, 0, 1,
+ 0, 0, 0,190, 0, 0, 0,201, 0, 0, 0,203, 0, 0, 0,188, 0, 0, 0, 1, 0, 0, 0,204, 0, 0, 0,202, 0, 0, 0,191,
+ 0, 0, 0,189, 0, 0, 0, 1, 0, 0, 0,196, 0, 0, 0,201, 0, 0, 0,199, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0,200,
+ 0, 0, 0,202, 0, 0, 0,196, 0, 0, 0,198, 0, 0, 0, 1, 0, 0, 0,196, 0, 0, 0,205, 0, 0, 0,203, 0, 0, 0,201,
+ 0, 0, 0, 1, 0, 0, 0,204, 0, 0, 0,205, 0, 0, 0,196, 0, 0, 0,202, 0, 0, 0, 1, 0, 0, 0,136, 0, 0, 0,137,
+ 0, 0, 0,161, 0, 0, 0,174, 0, 0, 0, 1, 0, 0, 0,162, 0, 0, 0,138, 0, 0, 0,136, 0, 0, 0,174, 0, 0, 0, 1,
+ 0, 0, 0,137, 0, 0, 0,139, 0, 0, 0,208, 0, 0, 0,161, 0, 0, 0, 1, 0, 0, 0,209, 0, 0, 0,140, 0, 0, 0,138,
+ 0, 0, 0,162, 0, 0, 0, 1, 0, 0, 0,139, 0, 0, 0,141, 0, 0, 0,210, 0, 0, 0,208, 0, 0, 0, 1, 0, 0, 0,211,
+ 0, 0, 0,142, 0, 0, 0,140, 0, 0, 0,209, 0, 0, 0, 1, 0, 0, 0,141, 0, 0, 0,184, 0, 0, 0,163, 0, 0, 0,210,
+ 0, 0, 0, 1, 0, 0, 0,164, 0, 0, 0,185, 0, 0, 0,142, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0, 79, 0, 0, 0,206,
+ 0, 0, 0,210, 0, 0, 0,163, 0, 0, 0, 1, 0, 0, 0,211, 0, 0, 0,207, 0, 0, 0, 80, 0, 0, 0,164, 0, 0, 0, 1,
+ 0, 0, 0,206, 0, 0, 0,212, 0, 0, 0,208, 0, 0, 0,210, 0, 0, 0, 1, 0, 0, 0,209, 0, 0, 0,213, 0, 0, 0,207,
+ 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0, 77, 0, 0, 0,161, 0, 0, 0,208, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,209,
+ 0, 0, 0,162, 0, 0, 0, 78, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,128, 0, 0, 0,127, 0, 0, 0, 70, 0, 0, 0,219,
+ 0, 0, 0, 1, 0, 0, 0, 70, 0, 0, 0,127, 0, 0, 0,129, 0, 0, 0,220, 0, 0, 0, 1, 0, 0, 0,130, 0, 0, 0,128,
+ 0, 0, 0,219, 0, 0, 0,217, 0, 0, 0, 1, 0, 0, 0,220, 0, 0, 0,129, 0, 0, 0,131, 0, 0, 0,218, 0, 0, 0, 1,
+ 0, 0, 0,132, 0, 0, 0,130, 0, 0, 0,217, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,218, 0, 0, 0,131, 0, 0, 0,133,
+ 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0,134, 0, 0, 0,132, 0, 0, 0,215, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,216,
+ 0, 0, 0,133, 0, 0, 0,134, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,214, 0, 0, 0,215, 0, 0, 0,226, 0, 0, 0,228,
+ 0, 0, 0, 1, 0, 0, 0,227, 0, 0, 0,216, 0, 0, 0,214, 0, 0, 0,228, 0, 0, 0, 1, 0, 0, 0,215, 0, 0, 0,217,
+ 0, 0, 0,224, 0, 0, 0,226, 0, 0, 0, 1, 0, 0, 0,225, 0, 0, 0,218, 0, 0, 0,216, 0, 0, 0,227, 0, 0, 0, 1,
+ 0, 0, 0,217, 0, 0, 0,219, 0, 0, 0,222, 0, 0, 0,224, 0, 0, 0, 1, 0, 0, 0,223, 0, 0, 0,220, 0, 0, 0,218,
+ 0, 0, 0,225, 0, 0, 0, 1, 0, 0, 0,219, 0, 0, 0, 70, 0, 0, 0,221, 0, 0, 0,222, 0, 0, 0, 1, 0, 0, 0,221,
+ 0, 0, 0, 70, 0, 0, 0,220, 0, 0, 0,223, 0, 0, 0, 1, 0, 0, 0,221, 0, 0, 0,228, 0, 0, 0,226, 0, 0, 0,222,
+ 0, 0, 0, 1, 0, 0, 0,227, 0, 0, 0,228, 0, 0, 0,221, 0, 0, 0,223, 0, 0, 0, 1, 0, 0, 0,222, 0, 0, 0,226,
+ 0, 0, 0,224, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,225, 0, 0, 0,227, 0, 0, 0,223, 0, 0, 0, 0, 0, 0, 0, 1,
+ 0, 0, 0,180, 0, 0, 0,178, 0, 0, 0,231, 0, 0, 0,229, 0, 0, 0, 1, 0, 0, 0,232, 0, 0, 0,179, 0, 0, 0,181,
+ 0, 0, 0,230, 0, 0, 0, 1, 0, 0, 0,110, 0, 0, 0,180, 0, 0, 0,229, 0, 0, 0,251, 0, 0, 0, 1, 0, 0, 0,230,
+ 0, 0, 0,181, 0, 0, 0,111, 0, 0, 0,252, 0, 0, 0, 1, 0, 0, 0,108, 0, 0, 0,110, 0, 0, 0,251, 0, 0, 0,253,
+ 0, 0, 0, 1, 0, 0, 0,252, 0, 0, 0,111, 0, 0, 0,109, 0, 0, 0,254, 0, 0, 0, 1, 0, 0, 0,178, 0, 0, 0, 14,
+ 0, 0, 0,249, 0, 0, 0,231, 0, 0, 0, 1, 0, 0, 0,250, 0, 0, 0,112, 0, 0, 0,179, 0, 0, 0,232, 0, 0, 0, 1,
+ 0, 0, 0, 14, 0, 0, 0,113, 0, 0, 0,247, 0, 0, 0,249, 0, 0, 0, 1, 0, 0, 0,248, 0, 0, 0,114, 0, 0, 0,112,
+ 0, 0, 0,250, 0, 0, 0, 1, 0, 0, 0,113, 0, 0, 0,115, 0, 0, 0,245, 0, 0, 0,247, 0, 0, 0, 1, 0, 0, 0,246,
+ 0, 0, 0,116, 0, 0, 0,114, 0, 0, 0,248, 0, 0, 0, 1, 0, 0, 0,115, 0, 0, 0,117, 0, 0, 0,243, 0, 0, 0,245,
+ 0, 0, 0, 1, 0, 0, 0,244, 0, 0, 0,118, 0, 0, 0,116, 0, 0, 0,246, 0, 0, 0, 1, 0, 0, 0,117, 0, 0, 0,119,
+ 0, 0, 0,241, 0, 0, 0,243, 0, 0, 0, 1, 0, 0, 0,242, 0, 0, 0,120, 0, 0, 0,118, 0, 0, 0,244, 0, 0, 0, 1,
+ 0, 0, 0,119, 0, 0, 0,121, 0, 0, 0,239, 0, 0, 0,241, 0, 0, 0, 1, 0, 0, 0,240, 0, 0, 0,122, 0, 0, 0,120,
+ 0, 0, 0,242, 0, 0, 0, 1, 0, 0, 0,121, 0, 0, 0,123, 0, 0, 0,237, 0, 0, 0,239, 0, 0, 0, 1, 0, 0, 0,238,
+ 0, 0, 0,124, 0, 0, 0,122, 0, 0, 0,240, 0, 0, 0, 1, 0, 0, 0,123, 0, 0, 0,176, 0, 0, 0,233, 0, 0, 0,237,
+ 0, 0, 0, 1, 0, 0, 0,234, 0, 0, 0,177, 0, 0, 0,124, 0, 0, 0,238, 0, 0, 0, 1, 0, 0, 0,176, 0, 0, 0,125,
+ 0, 0, 0,235, 0, 0, 0,233, 0, 0, 0, 1, 0, 0, 0,236, 0, 0, 0,126, 0, 0, 0,177, 0, 0, 0,234, 0, 0, 0, 1,
+ 0, 0, 0,125, 0, 0, 0,108, 0, 0, 0,253, 0, 0, 0,235, 0, 0, 0, 1, 0, 0, 0,254, 0, 0, 0,109, 0, 0, 0,126,
+ 0, 0, 0,236, 0, 0, 0, 1, 0, 0, 0,235, 0, 0, 0,253, 0, 0, 0,255, 0, 0, 1, 17, 0, 0, 0, 1, 0, 0, 1, 0,
+ 0, 0, 0,254, 0, 0, 0,236, 0, 0, 1, 18, 0, 0, 0, 1, 0, 0, 0,233, 0, 0, 0,235, 0, 0, 1, 17, 0, 0, 1, 19,
+ 0, 0, 0, 1, 0, 0, 1, 18, 0, 0, 0,236, 0, 0, 0,234, 0, 0, 1, 20, 0, 0, 0, 1, 0, 0, 0,237, 0, 0, 0,233,
+ 0, 0, 1, 19, 0, 0, 1, 15, 0, 0, 0, 1, 0, 0, 1, 20, 0, 0, 0,234, 0, 0, 0,238, 0, 0, 1, 16, 0, 0, 0, 1,
+ 0, 0, 0,239, 0, 0, 0,237, 0, 0, 1, 15, 0, 0, 1, 13, 0, 0, 0, 1, 0, 0, 1, 16, 0, 0, 0,238, 0, 0, 0,240,
+ 0, 0, 1, 14, 0, 0, 0, 1, 0, 0, 0,241, 0, 0, 0,239, 0, 0, 1, 13, 0, 0, 1, 11, 0, 0, 0, 1, 0, 0, 1, 14,
+ 0, 0, 0,240, 0, 0, 0,242, 0, 0, 1, 12, 0, 0, 0, 1, 0, 0, 0,243, 0, 0, 0,241, 0, 0, 1, 11, 0, 0, 1, 9,
+ 0, 0, 0, 1, 0, 0, 1, 12, 0, 0, 0,242, 0, 0, 0,244, 0, 0, 1, 10, 0, 0, 0, 1, 0, 0, 0,245, 0, 0, 0,243,
+ 0, 0, 1, 9, 0, 0, 1, 7, 0, 0, 0, 1, 0, 0, 1, 10, 0, 0, 0,244, 0, 0, 0,246, 0, 0, 1, 8, 0, 0, 0, 1,
+ 0, 0, 0,247, 0, 0, 0,245, 0, 0, 1, 7, 0, 0, 1, 5, 0, 0, 0, 1, 0, 0, 1, 8, 0, 0, 0,246, 0, 0, 0,248,
+ 0, 0, 1, 6, 0, 0, 0, 1, 0, 0, 0,249, 0, 0, 0,247, 0, 0, 1, 5, 0, 0, 1, 3, 0, 0, 0, 1, 0, 0, 1, 6,
+ 0, 0, 0,248, 0, 0, 0,250, 0, 0, 1, 4, 0, 0, 0, 1, 0, 0, 0,231, 0, 0, 0,249, 0, 0, 1, 3, 0, 0, 1, 21,
+ 0, 0, 0, 1, 0, 0, 1, 4, 0, 0, 0,250, 0, 0, 0,232, 0, 0, 1, 22, 0, 0, 0, 1, 0, 0, 0,253, 0, 0, 0,251,
+ 0, 0, 1, 1, 0, 0, 0,255, 0, 0, 0, 1, 0, 0, 1, 2, 0, 0, 0,252, 0, 0, 0,254, 0, 0, 1, 0, 0, 0, 0, 1,
+ 0, 0, 0,251, 0, 0, 0,229, 0, 0, 1, 23, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 24, 0, 0, 0,230, 0, 0, 0,252,
+ 0, 0, 1, 2, 0, 0, 0, 1, 0, 0, 0,229, 0, 0, 0,231, 0, 0, 1, 21, 0, 0, 1, 23, 0, 0, 0, 1, 0, 0, 1, 22,
+ 0, 0, 0,232, 0, 0, 0,230, 0, 0, 1, 24, 0, 0, 0, 1, 0, 0, 0, 65, 0, 0, 0,106, 0, 0, 1, 25, 0, 0, 0, 71,
+ 0, 0, 0, 1, 0, 0, 1, 26, 0, 0, 0,107, 0, 0, 0, 65, 0, 0, 0, 71, 0, 0, 0, 1, 0, 0, 0,106, 0, 0, 0,104,
+ 0, 0, 1, 27, 0, 0, 1, 25, 0, 0, 0, 1, 0, 0, 1, 28, 0, 0, 0,105, 0, 0, 0,107, 0, 0, 1, 26, 0, 0, 0, 1,
+ 0, 0, 0,104, 0, 0, 0,102, 0, 0, 1, 29, 0, 0, 1, 27, 0, 0, 0, 1, 0, 0, 1, 30, 0, 0, 0,103, 0, 0, 0,105,
+ 0, 0, 1, 28, 0, 0, 0, 1, 0, 0, 0,102, 0, 0, 0,100, 0, 0, 1, 31, 0, 0, 1, 29, 0, 0, 0, 1, 0, 0, 1, 32,
+ 0, 0, 0,101, 0, 0, 0,103, 0, 0, 1, 30, 0, 0, 0, 1, 0, 0, 0,100, 0, 0, 0, 98, 0, 0, 1, 33, 0, 0, 1, 31,
+ 0, 0, 0, 1, 0, 0, 1, 34, 0, 0, 0, 99, 0, 0, 0,101, 0, 0, 1, 32, 0, 0, 0, 1, 0, 0, 0, 98, 0, 0, 0, 96,
+ 0, 0, 1, 35, 0, 0, 1, 33, 0, 0, 0, 1, 0, 0, 1, 36, 0, 0, 0, 97, 0, 0, 0, 99, 0, 0, 1, 34, 0, 0, 0, 1,
+ 0, 0, 0, 96, 0, 0, 0, 94, 0, 0, 1, 37, 0, 0, 1, 35, 0, 0, 0, 1, 0, 0, 1, 38, 0, 0, 0, 95, 0, 0, 0, 97,
+ 0, 0, 1, 36, 0, 0, 0, 1, 0, 0, 0, 94, 0, 0, 0, 92, 0, 0, 1, 39, 0, 0, 1, 37, 0, 0, 0, 1, 0, 0, 1, 40,
+ 0, 0, 0, 93, 0, 0, 0, 95, 0, 0, 1, 38, 0, 0, 0, 1, 0, 0, 0, 92, 0, 0, 0, 90, 0, 0, 1, 41, 0, 0, 1, 39,
+ 0, 0, 0, 1, 0, 0, 1, 42, 0, 0, 0, 91, 0, 0, 0, 93, 0, 0, 1, 40, 0, 0, 0, 1, 0, 0, 1, 49, 0, 0, 1, 50,
+ 0, 0, 1, 69, 0, 0, 1, 79, 0, 0, 0, 1, 0, 0, 1, 70, 0, 0, 1, 50, 0, 0, 1, 49, 0, 0, 1, 80, 0, 0, 0, 1,
+ 0, 0, 1, 48, 0, 0, 1, 49, 0, 0, 1, 79, 0, 0, 1, 77, 0, 0, 0, 1, 0, 0, 1, 80, 0, 0, 1, 49, 0, 0, 1, 48,
+ 0, 0, 1, 78, 0, 0, 0, 1, 0, 0, 1, 47, 0, 0, 1, 48, 0, 0, 1, 77, 0, 0, 1, 81, 0, 0, 0, 1, 0, 0, 1, 78,
+ 0, 0, 1, 48, 0, 0, 1, 47, 0, 0, 1, 82, 0, 0, 0, 1, 0, 0, 0, 87, 0, 0, 0, 89, 0, 0, 1, 47, 0, 0, 1, 81,
+ 0, 0, 0, 1, 0, 0, 1, 47, 0, 0, 0, 89, 0, 0, 0, 88, 0, 0, 1, 82, 0, 0, 0, 1, 0, 0, 0, 85, 0, 0, 0, 87,
+ 0, 0, 1, 81, 0, 0, 1, 75, 0, 0, 0, 1, 0, 0, 1, 82, 0, 0, 0, 88, 0, 0, 0, 86, 0, 0, 1, 76, 0, 0, 0, 1,
+ 0, 0, 0, 83, 0, 0, 0, 85, 0, 0, 1, 75, 0, 0, 1, 71, 0, 0, 0, 1, 0, 0, 1, 76, 0, 0, 0, 86, 0, 0, 0, 84,
+ 0, 0, 1, 72, 0, 0, 0, 1, 0, 0, 0, 81, 0, 0, 0, 83, 0, 0, 1, 71, 0, 0, 1, 73, 0, 0, 0, 1, 0, 0, 1, 72,
+ 0, 0, 0, 84, 0, 0, 0, 82, 0, 0, 1, 74, 0, 0, 0, 1, 0, 0, 1, 71, 0, 0, 1, 77, 0, 0, 1, 79, 0, 0, 1, 73,
+ 0, 0, 0, 1, 0, 0, 1, 80, 0, 0, 1, 78, 0, 0, 1, 72, 0, 0, 1, 74, 0, 0, 0, 1, 0, 0, 1, 71, 0, 0, 1, 75,
+ 0, 0, 1, 81, 0, 0, 1, 77, 0, 0, 0, 1, 0, 0, 1, 82, 0, 0, 1, 76, 0, 0, 1, 72, 0, 0, 1, 78, 0, 0, 0, 1,
+ 0, 0, 1, 67, 0, 0, 1, 73, 0, 0, 1, 79, 0, 0, 1, 69, 0, 0, 0, 1, 0, 0, 1, 80, 0, 0, 1, 74, 0, 0, 1, 68,
+ 0, 0, 1, 70, 0, 0, 0, 1, 0, 0, 0, 79, 0, 0, 0, 81, 0, 0, 1, 73, 0, 0, 1, 67, 0, 0, 0, 1, 0, 0, 1, 74,
+ 0, 0, 0, 82, 0, 0, 0, 80, 0, 0, 1, 68, 0, 0, 0, 1, 0, 0, 0,206, 0, 0, 1, 83, 0, 0, 1, 85, 0, 0, 0,212,
+ 0, 0, 0, 1, 0, 0, 1, 86, 0, 0, 1, 84, 0, 0, 0,207, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 79, 0, 0, 1, 67,
+ 0, 0, 1, 83, 0, 0, 0,206, 0, 0, 0, 1, 0, 0, 1, 84, 0, 0, 1, 68, 0, 0, 0, 80, 0, 0, 0,207, 0, 0, 0, 1,
+ 0, 0, 0, 77, 0, 0, 0,212, 0, 0, 1, 85, 0, 0, 1, 87, 0, 0, 0, 1, 0, 0, 1, 86, 0, 0, 0,213, 0, 0, 0, 78,
+ 0, 0, 1, 88, 0, 0, 0, 1, 0, 0, 0, 77, 0, 0, 1, 87, 0, 0, 1, 41, 0, 0, 0, 90, 0, 0, 0, 1, 0, 0, 1, 42,
+ 0, 0, 1, 88, 0, 0, 0, 78, 0, 0, 0, 91, 0, 0, 0, 1, 0, 0, 0, 75, 0, 0, 1, 65, 0, 0, 1, 93, 0, 0, 1, 45,
+ 0, 0, 0, 1, 0, 0, 1, 94, 0, 0, 1, 66, 0, 0, 0, 75, 0, 0, 1, 45, 0, 0, 0, 1, 0, 0, 1, 45, 0, 0, 1, 93,
+ 0, 0, 1, 91, 0, 0, 0, 76, 0, 0, 0, 1, 0, 0, 1, 92, 0, 0, 1, 94, 0, 0, 1, 45, 0, 0, 0, 76, 0, 0, 0, 1,
+ 0, 0, 0, 76, 0, 0, 1, 91, 0, 0, 1, 89, 0, 0, 1, 46, 0, 0, 0, 1, 0, 0, 1, 90, 0, 0, 1, 92, 0, 0, 0, 76,
+ 0, 0, 1, 46, 0, 0, 0, 1, 0, 0, 1, 46, 0, 0, 1, 89, 0, 0, 1, 69, 0, 0, 1, 50, 0, 0, 0, 1, 0, 0, 1, 70,
+ 0, 0, 1, 90, 0, 0, 1, 46, 0, 0, 1, 50, 0, 0, 0, 1, 0, 0, 1, 67, 0, 0, 1, 69, 0, 0, 1, 89, 0, 0, 1, 83,
+ 0, 0, 0, 1, 0, 0, 1, 90, 0, 0, 1, 70, 0, 0, 1, 68, 0, 0, 1, 84, 0, 0, 0, 1, 0, 0, 1, 37, 0, 0, 1, 39,
+ 0, 0, 1, 59, 0, 0, 1, 51, 0, 0, 0, 1, 0, 0, 1, 60, 0, 0, 1, 40, 0, 0, 1, 38, 0, 0, 1, 52, 0, 0, 0, 1,
+ 0, 0, 0, 74, 0, 0, 1, 57, 0, 0, 1, 65, 0, 0, 0, 75, 0, 0, 0, 1, 0, 0, 1, 66, 0, 0, 1, 58, 0, 0, 0, 74,
+ 0, 0, 0, 75, 0, 0, 0, 1, 0, 0, 1, 43, 0, 0, 1, 99, 0, 0, 1, 97, 0, 0, 1, 44, 0, 0, 0, 1, 0, 0, 1, 98,
+ 0, 0, 1,100, 0, 0, 1, 43, 0, 0, 1, 44, 0, 0, 0, 1, 0, 0, 1, 44, 0, 0, 1, 97, 0, 0, 1, 95, 0, 0, 0, 73,
+ 0, 0, 0, 1, 0, 0, 1, 96, 0, 0, 1, 98, 0, 0, 1, 44, 0, 0, 0, 73, 0, 0, 0, 1, 0, 0, 0, 73, 0, 0, 1, 95,
+ 0, 0, 1, 57, 0, 0, 0, 74, 0, 0, 0, 1, 0, 0, 1, 58, 0, 0, 1, 96, 0, 0, 0, 73, 0, 0, 0, 74, 0, 0, 0, 1,
+ 0, 0, 1, 33, 0, 0, 1, 35, 0, 0, 1,103, 0, 0, 1,105, 0, 0, 0, 1, 0, 0, 1,104, 0, 0, 1, 36, 0, 0, 1, 34,
+ 0, 0, 1,106, 0, 0, 0, 1, 0, 0, 1,105, 0, 0, 1,103, 0, 0, 1,109, 0, 0, 1,107, 0, 0, 0, 1, 0, 0, 1,110,
+ 0, 0, 1,104, 0, 0, 1,106, 0, 0, 1,108, 0, 0, 0, 1, 0, 0, 1,107, 0, 0, 1,109, 0, 0, 1,111, 0, 0, 1,113,
+ 0, 0, 0, 1, 0, 0, 1,112, 0, 0, 1,110, 0, 0, 1,108, 0, 0, 1,114, 0, 0, 0, 1, 0, 0, 1,113, 0, 0, 1,111,
+ 0, 0, 1,117, 0, 0, 1,115, 0, 0, 0, 1, 0, 0, 1,118, 0, 0, 1,112, 0, 0, 1,114, 0, 0, 1,116, 0, 0, 0, 1,
+ 0, 0, 1, 55, 0, 0, 1,119, 0, 0, 1,115, 0, 0, 1,117, 0, 0, 0, 1, 0, 0, 1,116, 0, 0, 1,120, 0, 0, 1, 56,
+ 0, 0, 1,118, 0, 0, 0, 1, 0, 0, 1, 57, 0, 0, 1, 95, 0, 0, 1,115, 0, 0, 1,119, 0, 0, 0, 1, 0, 0, 1,116,
+ 0, 0, 1, 96, 0, 0, 1, 58, 0, 0, 1,120, 0, 0, 0, 1, 0, 0, 1, 95, 0, 0, 1, 97, 0, 0, 1,113, 0, 0, 1,115,
+ 0, 0, 0, 1, 0, 0, 1,114, 0, 0, 1, 98, 0, 0, 1, 96, 0, 0, 1,116, 0, 0, 0, 1, 0, 0, 1, 97, 0, 0, 1, 99,
+ 0, 0, 1,107, 0, 0, 1,113, 0, 0, 0, 1, 0, 0, 1,108, 0, 0, 1,100, 0, 0, 1, 98, 0, 0, 1,114, 0, 0, 0, 1,
+ 0, 0, 1, 99, 0, 0, 1,101, 0, 0, 1,105, 0, 0, 1,107, 0, 0, 0, 1, 0, 0, 1,106, 0, 0, 1,102, 0, 0, 1,100,
+ 0, 0, 1,108, 0, 0, 0, 1, 0, 0, 1, 31, 0, 0, 1, 33, 0, 0, 1,105, 0, 0, 1,101, 0, 0, 0, 1, 0, 0, 1,106,
+ 0, 0, 1, 34, 0, 0, 1, 32, 0, 0, 1,102, 0, 0, 0, 1, 0, 0, 0, 72, 0, 0, 1,101, 0, 0, 1, 99, 0, 0, 1, 43,
+ 0, 0, 0, 1, 0, 0, 1,100, 0, 0, 1,102, 0, 0, 0, 72, 0, 0, 1, 43, 0, 0, 0, 1, 0, 0, 1, 25, 0, 0, 1, 27,
+ 0, 0, 1, 29, 0, 0, 1, 31, 0, 0, 0, 1, 0, 0, 1, 30, 0, 0, 1, 28, 0, 0, 1, 26, 0, 0, 1, 32, 0, 0, 0, 1,
+ 0, 0, 1, 25, 0, 0, 1, 31, 0, 0, 1,101, 0, 0, 0, 72, 0, 0, 0, 1, 0, 0, 1,102, 0, 0, 1, 32, 0, 0, 1, 26,
+ 0, 0, 0, 72, 0, 0, 0, 1, 0, 0, 0, 71, 0, 0, 1, 25, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 72,
+ 0, 0, 1, 26, 0, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 35, 0, 0, 1, 37, 0, 0, 1, 51, 0, 0, 1,103,
+ 0, 0, 0, 1, 0, 0, 1, 52, 0, 0, 1, 38, 0, 0, 1, 36, 0, 0, 1,104, 0, 0, 0, 1, 0, 0, 1, 51, 0, 0, 1, 53,
+ 0, 0, 1,109, 0, 0, 1,103, 0, 0, 0, 1, 0, 0, 1,110, 0, 0, 1, 54, 0, 0, 1, 52, 0, 0, 1,104, 0, 0, 0, 1,
+ 0, 0, 1, 53, 0, 0, 1,123, 0, 0, 1,111, 0, 0, 1,109, 0, 0, 0, 1, 0, 0, 1,112, 0, 0, 1,124, 0, 0, 1, 54,
+ 0, 0, 1,110, 0, 0, 0, 1, 0, 0, 1, 55, 0, 0, 1,117, 0, 0, 1,111, 0, 0, 1,123, 0, 0, 0, 1, 0, 0, 1,112,
+ 0, 0, 1,118, 0, 0, 1, 56, 0, 0, 1,124, 0, 0, 0, 1, 0, 0, 1, 89, 0, 0, 1, 91, 0, 0, 1,127, 0, 0, 1,125,
+ 0, 0, 0, 1, 0, 0, 1,128, 0, 0, 1, 92, 0, 0, 1, 90, 0, 0, 1,126, 0, 0, 0, 1, 0, 0, 1, 59, 0, 0, 1,125,
+ 0, 0, 1,127, 0, 0, 1, 61, 0, 0, 0, 1, 0, 0, 1,128, 0, 0, 1,126, 0, 0, 1, 60, 0, 0, 1, 62, 0, 0, 0, 1,
+ 0, 0, 1, 39, 0, 0, 1, 41, 0, 0, 1,125, 0, 0, 1, 59, 0, 0, 0, 1, 0, 0, 1,126, 0, 0, 1, 42, 0, 0, 1, 40,
+ 0, 0, 1, 60, 0, 0, 0, 1, 0, 0, 1, 41, 0, 0, 1, 85, 0, 0, 1, 83, 0, 0, 1,125, 0, 0, 0, 1, 0, 0, 1, 84,
+ 0, 0, 1, 86, 0, 0, 1, 42, 0, 0, 1,126, 0, 0, 0, 1, 0, 0, 1, 83, 0, 0, 1, 89, 0, 0, 1,125, 0, 0, 0, 0,
+ 0, 0, 0, 1, 0, 0, 1,126, 0, 0, 1, 90, 0, 0, 1, 84, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 41, 0, 0, 1, 87,
+ 0, 0, 1, 85, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 86, 0, 0, 1, 88, 0, 0, 1, 42, 0, 0, 0, 0, 0, 0, 0, 1,
+ 0, 0, 1, 55, 0, 0, 1, 63, 0, 0, 1,121, 0, 0, 1,119, 0, 0, 0, 1, 0, 0, 1,122, 0, 0, 1, 64, 0, 0, 1, 56,
+ 0, 0, 1,120, 0, 0, 0, 1, 0, 0, 1, 57, 0, 0, 1,119, 0, 0, 1,121, 0, 0, 1, 65, 0, 0, 0, 1, 0, 0, 1,122,
+ 0, 0, 1,120, 0, 0, 1, 58, 0, 0, 1, 66, 0, 0, 0, 1, 0, 0, 1, 61, 0, 0, 1,127, 0, 0, 1,121, 0, 0, 1, 63,
+ 0, 0, 0, 1, 0, 0, 1,122, 0, 0, 1,128, 0, 0, 1, 62, 0, 0, 1, 64, 0, 0, 0, 1, 0, 0, 1, 91, 0, 0, 1, 93,
+ 0, 0, 1,121, 0, 0, 1,127, 0, 0, 0, 1, 0, 0, 1,122, 0, 0, 1, 94, 0, 0, 1, 92, 0, 0, 1,128, 0, 0, 0, 1,
+ 0, 0, 1, 65, 0, 0, 1,121, 0, 0, 1, 93, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 94, 0, 0, 1,122, 0, 0, 1, 66,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,141, 0, 0, 1,129, 0, 0, 1,155, 0, 0, 1,143, 0, 0, 0, 1, 0, 0, 1,156,
+ 0, 0, 1,130, 0, 0, 1,142, 0, 0, 1,144, 0, 0, 0, 1, 0, 0, 1,141, 0, 0, 1,143, 0, 0, 1,145, 0, 0, 1,139,
+ 0, 0, 0, 1, 0, 0, 1,146, 0, 0, 1,144, 0, 0, 1,142, 0, 0, 1,140, 0, 0, 0, 1, 0, 0, 1,139, 0, 0, 1,145,
+ 0, 0, 1,147, 0, 0, 1,137, 0, 0, 0, 1, 0, 0, 1,148, 0, 0, 1,146, 0, 0, 1,140, 0, 0, 1,138, 0, 0, 0, 1,
+ 0, 0, 1,137, 0, 0, 1,147, 0, 0, 1,149, 0, 0, 1,135, 0, 0, 0, 1, 0, 0, 1,150, 0, 0, 1,148, 0, 0, 1,138,
+ 0, 0, 1,136, 0, 0, 0, 1, 0, 0, 1,135, 0, 0, 1,149, 0, 0, 1,151, 0, 0, 1,133, 0, 0, 0, 1, 0, 0, 1,152,
+ 0, 0, 1,150, 0, 0, 1,136, 0, 0, 1,134, 0, 0, 0, 1, 0, 0, 1,133, 0, 0, 1,151, 0, 0, 1,153, 0, 0, 1,131,
+ 0, 0, 0, 1, 0, 0, 1,154, 0, 0, 1,152, 0, 0, 1,134, 0, 0, 1,132, 0, 0, 0, 1, 0, 0, 1,151, 0, 0, 1,161,
+ 0, 0, 1,159, 0, 0, 1,153, 0, 0, 0, 1, 0, 0, 1,160, 0, 0, 1,162, 0, 0, 1,152, 0, 0, 1,154, 0, 0, 0, 1,
+ 0, 0, 1,149, 0, 0, 1,163, 0, 0, 1,161, 0, 0, 1,151, 0, 0, 0, 1, 0, 0, 1,162, 0, 0, 1,164, 0, 0, 1,150,
+ 0, 0, 1,152, 0, 0, 0, 1, 0, 0, 1,147, 0, 0, 1,165, 0, 0, 1,163, 0, 0, 1,149, 0, 0, 0, 1, 0, 0, 1,164,
+ 0, 0, 1,166, 0, 0, 1,148, 0, 0, 1,150, 0, 0, 0, 1, 0, 0, 1,145, 0, 0, 1,167, 0, 0, 1,165, 0, 0, 1,147,
+ 0, 0, 0, 1, 0, 0, 1,166, 0, 0, 1,168, 0, 0, 1,146, 0, 0, 1,148, 0, 0, 0, 1, 0, 0, 1,143, 0, 0, 1,169,
+ 0, 0, 1,167, 0, 0, 1,145, 0, 0, 0, 1, 0, 0, 1,168, 0, 0, 1,170, 0, 0, 1,144, 0, 0, 1,146, 0, 0, 0, 1,
+ 0, 0, 1,143, 0, 0, 1,155, 0, 0, 1,157, 0, 0, 1,169, 0, 0, 0, 1, 0, 0, 1,158, 0, 0, 1,156, 0, 0, 1,144,
+ 0, 0, 1,170, 0, 0, 0, 1, 0, 0, 1, 59, 0, 0, 1, 61, 0, 0, 1,185, 0, 0, 1,183, 0, 0, 0, 1, 0, 0, 1,186,
+ 0, 0, 1, 62, 0, 0, 1, 60, 0, 0, 1,184, 0, 0, 0, 1, 0, 0, 1, 61, 0, 0, 1,131, 0, 0, 1,153, 0, 0, 1,185,
+ 0, 0, 0, 1, 0, 0, 1,154, 0, 0, 1,132, 0, 0, 1, 62, 0, 0, 1,186, 0, 0, 0, 1, 0, 0, 1, 51, 0, 0, 1, 59,
+ 0, 0, 1,183, 0, 0, 1, 53, 0, 0, 0, 1, 0, 0, 1,184, 0, 0, 1, 60, 0, 0, 1, 52, 0, 0, 1, 54, 0, 0, 0, 1,
+ 0, 0, 1,123, 0, 0, 1,171, 0, 0, 1,155, 0, 0, 1,129, 0, 0, 0, 1, 0, 0, 1,156, 0, 0, 1,172, 0, 0, 1,124,
+ 0, 0, 1,130, 0, 0, 0, 1, 0, 0, 1,153, 0, 0, 1,159, 0, 0, 1,181, 0, 0, 1,185, 0, 0, 0, 1, 0, 0, 1,182,
+ 0, 0, 1,160, 0, 0, 1,154, 0, 0, 1,186, 0, 0, 0, 1, 0, 0, 1,179, 0, 0, 1,187, 0, 0, 1,185, 0, 0, 1,181,
+ 0, 0, 0, 1, 0, 0, 1,186, 0, 0, 1,188, 0, 0, 1,180, 0, 0, 1,182, 0, 0, 0, 1, 0, 0, 1,175, 0, 0, 1,187,
+ 0, 0, 1,179, 0, 0, 1,177, 0, 0, 0, 1, 0, 0, 1,180, 0, 0, 1,188, 0, 0, 1,176, 0, 0, 1,178, 0, 0, 0, 1,
+ 0, 0, 1,173, 0, 0, 1,189, 0, 0, 1,187, 0, 0, 1,175, 0, 0, 0, 1, 0, 0, 1,188, 0, 0, 1,190, 0, 0, 1,174,
+ 0, 0, 1,176, 0, 0, 0, 1, 0, 0, 1,171, 0, 0, 1,189, 0, 0, 1,173, 0, 0, 1,191, 0, 0, 0, 1, 0, 0, 1,174,
+ 0, 0, 1,190, 0, 0, 1,172, 0, 0, 1,192, 0, 0, 0, 1, 0, 0, 1,155, 0, 0, 1,171, 0, 0, 1,191, 0, 0, 1,157,
+ 0, 0, 0, 1, 0, 0, 1,192, 0, 0, 1,172, 0, 0, 1,156, 0, 0, 1,158, 0, 0, 0, 1, 0, 0, 1, 53, 0, 0, 1,189,
+ 0, 0, 1,171, 0, 0, 1,123, 0, 0, 0, 1, 0, 0, 1,172, 0, 0, 1,190, 0, 0, 1, 54, 0, 0, 1,124, 0, 0, 0, 1,
+ 0, 0, 1, 53, 0, 0, 1,183, 0, 0, 1,187, 0, 0, 1,189, 0, 0, 0, 1, 0, 0, 1,188, 0, 0, 1,184, 0, 0, 1, 54,
+ 0, 0, 1,190, 0, 0, 0, 1, 0, 0, 1,183, 0, 0, 1,185, 0, 0, 1,187, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,188,
+ 0, 0, 1,186, 0, 0, 1,184, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,157, 0, 0, 1,191, 0, 0, 1,193, 0, 0, 1,217,
+ 0, 0, 0, 1, 0, 0, 1,194, 0, 0, 1,192, 0, 0, 1,158, 0, 0, 1,218, 0, 0, 0, 1, 0, 0, 1,191, 0, 0, 1,173,
+ 0, 0, 1,203, 0, 0, 1,193, 0, 0, 0, 1, 0, 0, 1,204, 0, 0, 1,174, 0, 0, 1,192, 0, 0, 1,194, 0, 0, 0, 1,
+ 0, 0, 1,173, 0, 0, 1,175, 0, 0, 1,201, 0, 0, 1,203, 0, 0, 0, 1, 0, 0, 1,202, 0, 0, 1,176, 0, 0, 1,174,
+ 0, 0, 1,204, 0, 0, 0, 1, 0, 0, 1,175, 0, 0, 1,177, 0, 0, 1,199, 0, 0, 1,201, 0, 0, 0, 1, 0, 0, 1,200,
+ 0, 0, 1,178, 0, 0, 1,176, 0, 0, 1,202, 0, 0, 0, 1, 0, 0, 1,177, 0, 0, 1,179, 0, 0, 1,197, 0, 0, 1,199,
+ 0, 0, 0, 1, 0, 0, 1,198, 0, 0, 1,180, 0, 0, 1,178, 0, 0, 1,200, 0, 0, 0, 1, 0, 0, 1,179, 0, 0, 1,181,
+ 0, 0, 1,195, 0, 0, 1,197, 0, 0, 0, 1, 0, 0, 1,196, 0, 0, 1,182, 0, 0, 1,180, 0, 0, 1,198, 0, 0, 0, 1,
+ 0, 0, 1,181, 0, 0, 1,159, 0, 0, 1,215, 0, 0, 1,195, 0, 0, 0, 1, 0, 0, 1,216, 0, 0, 1,160, 0, 0, 1,182,
+ 0, 0, 1,196, 0, 0, 0, 1, 0, 0, 1,169, 0, 0, 1,157, 0, 0, 1,217, 0, 0, 1,205, 0, 0, 0, 1, 0, 0, 1,218,
+ 0, 0, 1,158, 0, 0, 1,170, 0, 0, 1,206, 0, 0, 0, 1, 0, 0, 1,167, 0, 0, 1,169, 0, 0, 1,205, 0, 0, 1,207,
+ 0, 0, 0, 1, 0, 0, 1,206, 0, 0, 1,170, 0, 0, 1,168, 0, 0, 1,208, 0, 0, 0, 1, 0, 0, 1,165, 0, 0, 1,167,
+ 0, 0, 1,207, 0, 0, 1,209, 0, 0, 0, 1, 0, 0, 1,208, 0, 0, 1,168, 0, 0, 1,166, 0, 0, 1,210, 0, 0, 0, 1,
+ 0, 0, 1,163, 0, 0, 1,165, 0, 0, 1,209, 0, 0, 1,211, 0, 0, 0, 1, 0, 0, 1,210, 0, 0, 1,166, 0, 0, 1,164,
+ 0, 0, 1,212, 0, 0, 0, 1, 0, 0, 1,161, 0, 0, 1,163, 0, 0, 1,211, 0, 0, 1,213, 0, 0, 0, 1, 0, 0, 1,212,
+ 0, 0, 1,164, 0, 0, 1,162, 0, 0, 1,214, 0, 0, 0, 1, 0, 0, 1,159, 0, 0, 1,161, 0, 0, 1,213, 0, 0, 1,215,
+ 0, 0, 0, 1, 0, 0, 1,214, 0, 0, 1,162, 0, 0, 1,160, 0, 0, 1,216, 0, 0, 0, 1, 0, 0, 1,199, 0, 0, 1,197,
+ 0, 0, 1,221, 0, 0, 1,219, 0, 0, 0, 1, 0, 0, 1,222, 0, 0, 1,198, 0, 0, 1,200, 0, 0, 1,220, 0, 0, 0, 1,
+ 0, 0, 1,219, 0, 0, 1,221, 0, 0, 1,223, 0, 0, 1,225, 0, 0, 0, 1, 0, 0, 1,224, 0, 0, 1,222, 0, 0, 1,220,
+ 0, 0, 1,226, 0, 0, 0, 1, 0, 0, 1,225, 0, 0, 1,223, 0, 0, 1,229, 0, 0, 1,227, 0, 0, 0, 1, 0, 0, 1,230,
+ 0, 0, 1,224, 0, 0, 1,226, 0, 0, 1,228, 0, 0, 0, 1, 0, 0, 1,227, 0, 0, 1,229, 0, 0, 1,231, 0, 0, 1,233,
+ 0, 0, 0, 1, 0, 0, 1,232, 0, 0, 1,230, 0, 0, 1,228, 0, 0, 1,234, 0, 0, 0, 1, 0, 0, 1,205, 0, 0, 1,217,
+ 0, 0, 1,227, 0, 0, 1,233, 0, 0, 0, 1, 0, 0, 1,228, 0, 0, 1,218, 0, 0, 1,206, 0, 0, 1,234, 0, 0, 0, 1,
+ 0, 0, 1,193, 0, 0, 1,225, 0, 0, 1,227, 0, 0, 1,217, 0, 0, 0, 1, 0, 0, 1,228, 0, 0, 1,226, 0, 0, 1,194,
+ 0, 0, 1,218, 0, 0, 0, 1, 0, 0, 1,193, 0, 0, 1,203, 0, 0, 1,219, 0, 0, 1,225, 0, 0, 0, 1, 0, 0, 1,220,
+ 0, 0, 1,204, 0, 0, 1,194, 0, 0, 1,226, 0, 0, 0, 1, 0, 0, 1,199, 0, 0, 1,219, 0, 0, 1,203, 0, 0, 1,201,
+ 0, 0, 0, 1, 0, 0, 1,204, 0, 0, 1,220, 0, 0, 1,200, 0, 0, 1,202, 0, 0, 0, 1, 0, 0, 1,195, 0, 0, 1,215,
+ 0, 0, 1,221, 0, 0, 1,197, 0, 0, 0, 1, 0, 0, 1,222, 0, 0, 1,216, 0, 0, 1,196, 0, 0, 1,198, 0, 0, 0, 1,
+ 0, 0, 1,213, 0, 0, 1,223, 0, 0, 1,221, 0, 0, 1,215, 0, 0, 0, 1, 0, 0, 1,222, 0, 0, 1,224, 0, 0, 1,214,
+ 0, 0, 1,216, 0, 0, 0, 1, 0, 0, 1,211, 0, 0, 1,229, 0, 0, 1,223, 0, 0, 1,213, 0, 0, 0, 1, 0, 0, 1,224,
+ 0, 0, 1,230, 0, 0, 1,212, 0, 0, 1,214, 0, 0, 0, 1, 0, 0, 1,209, 0, 0, 1,231, 0, 0, 1,229, 0, 0, 1,211,
+ 0, 0, 0, 1, 0, 0, 1,230, 0, 0, 1,232, 0, 0, 1,210, 0, 0, 1,212, 0, 0, 0, 1, 0, 0, 1,207, 0, 0, 1,233,
+ 0, 0, 1,231, 0, 0, 1,209, 0, 0, 0, 1, 0, 0, 1,232, 0, 0, 1,234, 0, 0, 1,208, 0, 0, 1,210, 0, 0, 0, 1,
+ 0, 0, 1,205, 0, 0, 1,233, 0, 0, 1,207, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,208, 0, 0, 1,234, 0, 0, 1,206,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,133, 0, 0, 1,131, 0, 0, 1,245, 0, 0, 1,243, 0, 0, 0, 1, 0, 0, 1,246,
+ 0, 0, 1,132, 0, 0, 1,134, 0, 0, 1,244, 0, 0, 0, 1, 0, 0, 1,135, 0, 0, 1,133, 0, 0, 1,243, 0, 0, 1,241,
+ 0, 0, 0, 1, 0, 0, 1,244, 0, 0, 1,134, 0, 0, 1,136, 0, 0, 1,242, 0, 0, 0, 1, 0, 0, 1,137, 0, 0, 1,135,
+ 0, 0, 1,241, 0, 0, 1,239, 0, 0, 0, 1, 0, 0, 1,242, 0, 0, 1,136, 0, 0, 1,138, 0, 0, 1,240, 0, 0, 0, 1,
+ 0, 0, 1,139, 0, 0, 1,137, 0, 0, 1,239, 0, 0, 1,237, 0, 0, 0, 1, 0, 0, 1,240, 0, 0, 1,138, 0, 0, 1,140,
+ 0, 0, 1,238, 0, 0, 0, 1, 0, 0, 1,141, 0, 0, 1,139, 0, 0, 1,237, 0, 0, 1,235, 0, 0, 0, 1, 0, 0, 1,238,
+ 0, 0, 1,140, 0, 0, 1,142, 0, 0, 1,236, 0, 0, 0, 1, 0, 0, 1,129, 0, 0, 1,141, 0, 0, 1,235, 0, 0, 1,247,
+ 0, 0, 0, 1, 0, 0, 1,236, 0, 0, 1,142, 0, 0, 1,130, 0, 0, 1,248, 0, 0, 0, 1, 0, 0, 1,235, 0, 0, 1,243,
+ 0, 0, 1,245, 0, 0, 1,247, 0, 0, 0, 1, 0, 0, 1,246, 0, 0, 1,244, 0, 0, 1,236, 0, 0, 1,248, 0, 0, 0, 1,
+ 0, 0, 1,235, 0, 0, 1,237, 0, 0, 1,241, 0, 0, 1,243, 0, 0, 0, 1, 0, 0, 1,242, 0, 0, 1,238, 0, 0, 1,236,
+ 0, 0, 1,244, 0, 0, 0, 1, 0, 0, 1,237, 0, 0, 1,239, 0, 0, 1,241, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,242,
+ 0, 0, 1,240, 0, 0, 1,238, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 55, 0, 0, 1,123, 0, 0, 1,129, 0, 0, 1,247,
+ 0, 0, 0, 1, 0, 0, 1,130, 0, 0, 1,124, 0, 0, 1, 56, 0, 0, 1,248, 0, 0, 0, 1, 0, 0, 1, 55, 0, 0, 1,247,
+ 0, 0, 1,245, 0, 0, 1, 63, 0, 0, 0, 1, 0, 0, 1,246, 0, 0, 1,248, 0, 0, 1, 56, 0, 0, 1, 64, 0, 0, 0, 1,
+ 0, 0, 1, 61, 0, 0, 1, 63, 0, 0, 1,245, 0, 0, 1,131, 0, 0, 0, 1, 0, 0, 1,246, 0, 0, 1, 64, 0, 0, 1, 62,
+ 0, 0, 1,132, 0, 0, 0, 1, 68, 65, 84, 65, 0, 0, 85,240, 12,117,208, 32, 0, 0, 0, 65, 0, 0, 1,244, 63, 28,112, 3,
+ 62,236,178,185, 63, 27,124,224, 62,232, 65,235, 63, 30, 63,144, 62,226,195,233, 63, 32,152,118, 62,236,167, 37, 13, 64,158,176,
+ 1, 0, 0, 5, 0, 0, 0,240, 62,209,232, 2, 62,226, 21,222, 62,215,109,102, 62,231,147,222, 62,213,135, 28, 62,236, 4,172,
+ 62,205, 54, 56, 62,235,249, 22, 13, 64,158,176, 61, 0, 0, 5, 0, 0, 0,240, 63, 32,152,118, 62,236,167, 37, 63, 30, 63,144,
+ 62,226,195,233, 63, 33,235,108, 62,220,235,197, 63, 37,151,209, 62,236,161, 89, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0,240,
+ 62,202,144, 76, 62,220, 61,186, 62,209,232, 2, 62,226, 21,222, 62,205, 54, 56, 62,235,249, 22, 62,195, 55,128, 62,235,243, 70,
+ 13, 64,158,176, 61, 0, 0, 5, 0, 0, 0,240, 63, 30, 63,144, 62,226,195,233, 63, 25, 55, 20, 62,223, 35, 1, 63, 25,178,200,
+ 62,214,233, 77, 63, 33,235,108, 62,220,235,197, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0,240, 62,219, 1,146, 62,214, 59, 66,
+ 62,219,248,248, 62,222,116,246, 62,209,232, 2, 62,226, 21,222, 62,202,144, 76, 62,220, 61,186, 13, 64,158,176, 61, 0, 0, 5,
+ 0, 0, 0,240, 63, 27,124,224, 62,232, 65,235, 63, 24,252, 87, 62,230,111, 93, 63, 25, 55, 20, 62,223, 35, 1, 63, 30, 63,144,
+ 62,226,195,233, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0,240, 62,219,248,248, 62,222,116,246, 62,220,110,118, 62,229,193, 78,
+ 62,215,109,102, 62,231,147,222, 62,209,232, 2, 62,226, 21,222, 13, 64,158,176, 61, 0, 0, 5, 0, 0, 0,240, 63, 24,252, 87,
+ 62,230,111, 93, 63, 22,195, 22, 62,232, 90,195, 63, 20, 91,191, 62,227, 18,193, 63, 25, 55, 20, 62,223, 35, 1, 13, 64,158,176,
+ 1, 0, 0, 5, 0, 0, 0,240, 62,229,175,162, 62,226,100,178, 62,224,224,248, 62,231,172,182, 62,220,110,118, 62,229,193, 78,
+ 62,219,248,248, 62,222,116,246, 13, 64,158,176, 61, 0, 0, 5, 0, 0, 0,240, 63, 25, 55, 20, 62,223, 35, 1, 63, 20, 91,191,
+ 62,227, 18,193, 63, 17,165,187, 62,221, 6,225, 63, 25,178,200, 62,214,233, 77, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0,240,
+ 62,235, 27,170, 62,220, 88,214, 62,229,175,162, 62,226,100,178, 62,219,248,248, 62,222,116,246, 62,219, 1,146, 62,214, 59, 66,
+ 13, 64,158,176, 61, 0, 0, 5, 0, 0, 0,240, 63, 20, 91,191, 62,227, 18,193, 63, 18, 18,164, 62,236,201,173, 63, 13,231,157,
+ 62,236,161, 89, 63, 17,165,187, 62,221, 6,225, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0,240, 62,242,151,232, 62,235,243, 70,
+ 62,234, 65,216, 62,236, 27,158, 62,229,175,162, 62,226,100,178, 62,235, 27,170, 62,220, 88,214, 13, 64,158,176, 61, 0, 0, 5,
+ 0, 0, 0,240, 63, 22,195, 22, 62,232, 90,195, 63, 21,202, 11, 62,236,189, 1, 63, 18, 18,164, 62,236,201,173, 63, 20, 91,191,
+ 62,227, 18,193, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0,240, 62,234, 65,216, 62,236, 27,158, 62,226,211, 12, 62,236, 14,246,
+ 62,224,224,248, 62,231,172,182, 62,229,175,162, 62,226,100,178, 13, 64,158,176, 61, 0, 0, 5, 0, 0, 0,240, 63, 21,202, 11,
+ 62,236,189, 1, 63, 22,202,215, 62,241,124,237, 63, 20,105,125, 62,246, 71, 1, 63, 18, 18,164, 62,236,201,173, 13, 64,158,176,
+ 1, 0, 0, 5, 0, 0, 0,240, 62,229,148, 42, 62,245,152,246, 62,224,209,112, 62,240,206,226, 62,226,211, 12, 62,236, 14,246,
+ 62,234, 65,216, 62,236, 27,158, 13, 64,158,176, 61, 0, 0, 5, 0, 0, 0,240, 63, 18, 18,164, 62,236,201,173, 63, 20,105,125,
+ 62,246, 71, 1, 63, 17,173, 44, 62,252,149,231, 63, 13,231,157, 62,236,161, 89, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0,240,
+ 62,235, 12,206, 62,251,231,218, 62,229,148, 42, 62,245,152,246, 62,234, 65,216, 62,236, 27,158, 62,242,151,232, 62,235,243, 70,
+ 13, 64,158,176, 61, 0, 0, 5, 0, 0, 0,240, 63, 20,105,125, 62,246, 71, 1, 63, 25, 59, 37, 62,250, 73, 49, 63, 25,178,108,
+ 63, 1,108,218, 63, 17,173, 44, 62,252,149,231, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0,240, 62,219, 2, 76, 63, 1, 21,213,
+ 62,219,240,216, 62,249,155, 38, 62,229,148, 42, 62,245,152,246, 62,235, 12,206, 62,251,231,218, 13, 64,158,176, 61, 0, 0, 5,
+ 0, 0, 0,240, 63, 22,202,215, 62,241,124,237, 63, 25, 1,195, 62,243,102,169, 63, 25, 59, 37, 62,250, 73, 49, 63, 20,105,125,
+ 62,246, 71, 1, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0,240, 62,219,240,216, 62,249,155, 38, 62,220, 99,156, 62,242,184,154,
+ 62,224,209,112, 62,240,206,226, 62,229,148, 42, 62,245,152,246, 13, 64,158,176, 61, 0, 0, 5, 0, 0, 0,240, 63, 25, 1,195,
+ 62,243,102,169, 63, 27,125,176, 62,241,145,149, 63, 30, 74,167, 62,246,153, 3, 63, 25, 59, 37, 62,250, 73, 49, 13, 64,158,176,
+ 1, 0, 0, 5, 0, 0, 0,240, 62,209,209,212, 62,245,234,246, 62,215,107,192, 62,240,227,138, 62,220, 99,156, 62,242,184,154,
+ 62,219,240,216, 62,249,155, 38, 13, 64,158,176, 61, 0, 0, 5, 0, 0, 0,240, 63, 25, 59, 37, 62,250, 73, 49, 63, 30, 74,167,
+ 62,246,153, 3, 63, 33,230,204, 62,252,232,107, 63, 25,178,108, 63, 1,108,218, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0,240,
+ 62,202,153,132, 62,252, 58, 94, 62,209,209,212, 62,245,234,246, 62,219,240,216, 62,249,155, 38, 62,219, 2, 76, 63, 1, 21,213,
+ 13, 64,158,176, 61, 0, 0, 5, 0, 0, 0,240, 63, 30, 74,167, 62,246,153, 3, 63, 32,152,118, 62,236,167, 37, 63, 37,151,209,
+ 62,236,161, 89, 63, 33,230,204, 62,252,232,107, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0,240, 62,195, 55,128, 62,235,243, 70,
+ 62,205, 54, 56, 62,235,249, 22, 62,209,209,212, 62,245,234,246, 62,202,153,132, 62,252, 58, 94, 13, 64,158,176, 61, 0, 0, 5,
+ 0, 0, 0,240, 63, 27,125,176, 62,241,145,149, 63, 28,112, 3, 62,236,178,185, 63, 32,152,118, 62,236,167, 37, 63, 30, 74,167,
+ 62,246,153, 3, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0,240, 62,205, 54, 56, 62,235,249, 22, 62,213,135, 28, 62,236, 4,172,
+ 62,215,107,192, 62,240,227,138, 62,209,209,212, 62,245,234,246, 13, 64,158,176, 61, 0, 0, 5, 0, 0, 0,240, 63, 28,112, 3,
+ 62,236,178,185, 63, 27,125,176, 62,241,145,149, 63, 27, 39, 42, 62,241, 1, 57, 63, 27,249,140, 62,236,186,115, 13, 64,158,176,
+ 1, 0, 0, 5, 0, 0, 0,240, 62,216, 24,206, 62,240, 83, 46, 62,215,107,192, 62,240,227,138, 62,213,135, 28, 62,236, 4,172,
+ 62,214,116, 8, 62,236, 12,102, 13, 64,158,176, 61, 0, 0, 5, 0, 0, 0,240, 63, 27,125,176, 62,241,145,149, 63, 25, 1,195,
+ 62,243,102,169, 63, 24,248, 6, 62,242, 91,185, 63, 27, 39, 42, 62,241, 1, 57, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0,240,
+ 62,220,119, 22, 62,241,173,174, 62,220, 99,156, 62,242,184,154, 62,215,107,192, 62,240,227,138, 62,216, 24,206, 62,240, 83, 46,
+ 13, 64,158,176, 61, 0, 0, 5, 0, 0, 0,240, 63, 25, 1,195, 62,243,102,169, 63, 22,202,215, 62,241,124,237, 63, 23, 38,157,
+ 62,240,173,225, 63, 24,248, 6, 62,242, 91,185, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0,240, 62,224, 25,234, 62,239,255,214,
+ 62,224,209,112, 62,240,206,226, 62,220, 99,156, 62,242,184,154, 62,220,119, 22, 62,241,173,174, 13, 64,158,176, 61, 0, 0, 5,
+ 0, 0, 0,240, 63, 22,202,215, 62,241,124,237, 63, 21,202, 11, 62,236,189, 1, 63, 22, 89, 13, 62,236,196,247, 63, 23, 38,157,
+ 62,240,173,225, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0,240, 62,225,181, 8, 62,236, 22,234, 62,226,211, 12, 62,236, 14,246,
+ 62,224,209,112, 62,240,206,226, 62,224, 25,234, 62,239,255,214, 13, 64,158,176, 61, 0, 0, 5, 0, 0, 0,240, 63, 21,202, 11,
+ 62,236,189, 1, 63, 22,195, 22, 62,232, 90,195, 63, 23, 33, 88, 62,233, 47, 69, 63, 22, 89, 13, 62,236,196,247, 13, 64,158,176,
+ 1, 0, 0, 5, 0, 0, 0,240, 62,224, 36,112, 62,232,129, 58, 62,224,224,248, 62,231,172,182, 62,226,211, 12, 62,236, 14,246,
+ 62,225,181, 8, 62,236, 22,234, 13, 64,158,176, 61, 0, 0, 5, 0, 0, 0,240, 63, 22,195, 22, 62,232, 90,195, 63, 24,252, 87,
+ 62,230,111, 93, 63, 24,243,100, 62,231,123, 5, 63, 23, 33, 88, 62,233, 47, 69, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0,240,
+ 62,220,128, 90, 62,230,204,248, 62,220,110,118, 62,229,193, 78, 62,224,224,248, 62,231,172,182, 62,224, 36,112, 62,232,129, 58,
+ 13, 64,158,176, 61, 0, 0, 5, 0, 0, 0,240, 63, 24,252, 87, 62,230,111, 93, 63, 27,124,224, 62,232, 65,235, 63, 27, 37,169,
+ 62,232,211, 35, 63, 24,243,100, 62,231,123, 5, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0,240, 62,216, 27,206, 62,232, 37, 22,
+ 62,215,109,102, 62,231,147,222, 62,220,110,118, 62,229,193, 78, 62,220,128, 90, 62,230,204,248, 13, 64,158,176, 61, 0, 0, 5,
+ 0, 0, 0,240, 63, 27,124,224, 62,232, 65,235, 63, 28,112, 3, 62,236,178,185, 63, 27,249,140, 62,236,186,115, 63, 27, 37,169,
+ 62,232,211, 35, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0,240, 62,214,116, 8, 62,236, 12,102, 62,213,135, 28, 62,236, 4,172,
+ 62,215,109,102, 62,231,147,222, 62,216, 27,206, 62,232, 37, 22, 13, 64,158,176, 61, 0, 0, 5, 0, 0, 0,240, 63, 24,242,138,
+ 62,236,194, 21, 63, 27, 37,169, 62,232,211, 35, 63, 27,249,140, 62,236,186,115, 63,128, 0, 0, 63,128, 0, 0, 13, 64,158,176,
+ 1, 0, 0, 5, 0, 0, 0,112, 62,214,116, 8, 62,236, 12,102, 62,216, 27,206, 62,232, 37, 22, 62,220,130, 16, 62,236, 20, 6,
+ 63,128, 0, 0, 63,128, 0, 0, 13, 64,158,176, 61, 0, 0, 5, 0, 0, 0,112, 63, 24,243,100, 62,231,123, 5, 63, 27, 37,169,
+ 62,232,211, 35, 63, 24,242,138, 62,236,194, 21, 63,128, 0, 0, 63,128, 0, 0, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0,112,
+ 62,220,130, 16, 62,236, 20, 6, 62,216, 27,206, 62,232, 37, 22, 62,220,128, 90, 62,230,204,248, 63,128, 0, 0, 63,128, 0, 0,
+ 13, 64,158,176, 61, 0, 0, 5, 0, 0, 0,112, 63, 24,242,138, 62,236,194, 21, 63, 23, 33, 88, 62,233, 47, 69, 63, 24,243,100,
+ 62,231,123, 5, 63,128, 0, 0, 63,128, 0, 0, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0,112, 62,220,128, 90, 62,230,204,248,
+ 62,224, 36,112, 62,232,129, 58, 62,220,130, 16, 62,236, 20, 6, 63,128, 0, 0, 63,128, 0, 0, 13, 64,158,176, 61, 0, 0, 5,
+ 0, 0, 0,112, 63, 24,242,138, 62,236,194, 21, 63, 22, 89, 13, 62,236,196,247, 63, 23, 33, 88, 62,233, 47, 69, 63,128, 0, 0,
+ 63,128, 0, 0, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0,112, 62,224, 36,112, 62,232,129, 58, 62,225,181, 8, 62,236, 22,234,
+ 62,220,130, 16, 62,236, 20, 6, 63,128, 0, 0, 63,128, 0, 0, 13, 64,158,176, 61, 0, 0, 5, 0, 0, 0,112, 63, 24,242,138,
+ 62,236,194, 21, 63, 23, 38,157, 62,240,173,225, 63, 22, 89, 13, 62,236,196,247, 63,128, 0, 0, 63,128, 0, 0, 13, 64,158,176,
+ 1, 0, 0, 5, 0, 0, 0,112, 62,225,181, 8, 62,236, 22,234, 62,224, 25,234, 62,239,255,214, 62,220,130, 16, 62,236, 20, 6,
+ 63,128, 0, 0, 63,128, 0, 0, 13, 64,158,176, 61, 0, 0, 5, 0, 0, 0,112, 63, 24,242,138, 62,236,194, 21, 63, 24,248, 6,
+ 62,242, 91,185, 63, 23, 38,157, 62,240,173,225, 63,128, 0, 0, 63,128, 0, 0, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0,112,
+ 62,224, 25,234, 62,239,255,214, 62,220,119, 22, 62,241,173,174, 62,220,130, 16, 62,236, 20, 6, 63,128, 0, 0, 63,128, 0, 0,
+ 13, 64,158,176, 61, 0, 0, 5, 0, 0, 0,112, 63, 24,242,138, 62,236,194, 21, 63, 27, 39, 42, 62,241, 1, 57, 63, 24,248, 6,
+ 62,242, 91,185, 63,128, 0, 0, 63,128, 0, 0, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0,112, 62,220,119, 22, 62,241,173,174,
+ 62,216, 24,206, 62,240, 83, 46, 62,220,130, 16, 62,236, 20, 6, 63,128, 0, 0, 63,128, 0, 0, 13, 64,158,176, 61, 0, 0, 5,
+ 0, 0, 0,112, 63, 24,242,138, 62,236,194, 21, 63, 27,249,140, 62,236,186,115, 63, 27, 39, 42, 62,241, 1, 57, 63,128, 0, 0,
+ 63,128, 0, 0, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0,112, 62,216, 24,206, 62,240, 83, 46, 62,214,116, 8, 62,236, 12,102,
+ 62,220,130, 16, 62,236, 20, 6, 63,128, 0, 0, 63,128, 0, 0, 13, 64,158,176, 61, 0, 0, 5, 0, 0, 0,112, 63, 16,254,174,
+ 62, 34, 45, 94, 63, 13,190, 79, 62, 46,193,160, 63, 3,199,220, 62, 24,219, 89, 63, 3,199,219, 61,229, 28, 18, 13, 64,158,176,
+ 1, 0, 0, 5, 0, 0, 0, 16, 63, 3,199,220, 62, 24,219, 89, 62,243,150, 14, 62, 47, 79,204, 62,236,248,140, 62, 34,202,182,
+ 63, 3,199,219, 61,229, 28, 18, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 64, 63, 21,152,184, 62, 53, 47,182, 63, 16,104,250,
+ 62, 55,113, 16, 63, 13,190, 79, 62, 46,193,160, 63, 16,254,174, 62, 34, 45, 94, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0,128,
+ 62,243,150, 14, 62, 47, 79,204, 62,238, 68,200, 62, 56, 62, 76, 62,227,207,183, 62, 54, 75,250, 62,236,248,140, 62, 34,202,182,
+ 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0,128, 63, 22, 57,137, 62, 61, 93, 81, 63, 16,186,206, 62, 72,129, 85, 63, 16,104,250,
+ 62, 55,113, 16, 63, 21,152,184, 62, 53, 47,182, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 62,238, 68,200, 62, 56, 62, 76,
+ 62,237,187,192, 62, 73,118,194, 62,226,152,122, 62, 62,166,190, 62,227,207,183, 62, 54, 75,250, 13, 64,158,176, 1, 0, 0, 5,
+ 0, 0, 0, 0, 63, 22,249,250, 62, 88,251,160, 63, 16, 32,222, 62, 93,106, 34, 63, 16,186,206, 62, 72,129, 85, 63, 22, 57,137,
+ 62, 61, 93, 81, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 62,237,187,192, 62, 73,118,194, 62,239, 19, 21, 62, 94,110,121,
+ 62,225, 83, 90, 62, 90,153, 21, 62,226,152,122, 62, 62,166,190, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63, 25, 81, 20,
+ 62,132, 56, 17, 63, 15,243,206, 62,136,207,182, 63, 16, 32,222, 62, 93,106, 34, 63, 22,249,250, 62, 88,251,160, 13, 64,158,176,
+ 1, 0, 0, 5, 0, 0, 0, 0, 62,239, 19, 21, 62, 94,110,121, 62,239,193, 92, 62,137, 61,113, 62,221, 42, 54, 62,133, 25,209,
+ 62,225, 83, 90, 62, 90,153, 21, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63, 27,239,111, 62,166, 77,159, 63, 37, 94, 91,
+ 62,187,120,107, 63, 30, 21, 66, 62,200,139,178, 63, 12,237,158, 62,187,241, 38, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0,
+ 62,211,125,139, 62,200,171,170, 62,197, 28,156, 62,187,130,166, 62,216, 21,115, 62,166,177, 14, 62,245,175, 15, 62,188, 14,188,
+ 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63, 37, 94, 91, 62,187,120,107, 63, 43, 57, 87, 62,206, 58,222, 63, 39,163, 24,
+ 62,216, 95,174, 63, 30, 21, 66, 62,200,139,178, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 62,191,194, 98, 62,216, 94, 42,
+ 62,184,207,130, 62,206, 27, 42, 62,197, 28,156, 62,187,130,166, 62,211,125,139, 62,200,171,170, 13, 64,158,176, 1, 0, 0, 5,
+ 0, 0, 0, 0, 63, 43, 57, 87, 62,206, 58,222, 63, 50,229, 38, 62,226, 32,169, 63, 43, 79,177, 62,231,194,202, 63, 39,163, 24,
+ 62,216, 95,174, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 62,183,201, 60, 62,231,218, 82, 62,168, 39,196, 62,226, 11,206,
+ 62,184,207,130, 62,206, 27, 42, 62,191,194, 98, 62,216, 94, 42, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63, 50,229, 38,
+ 62,226, 32,169, 63, 48,134, 62, 62,249,107, 37, 63, 43,190,154, 62,249, 0,192, 63, 43, 79,177, 62,231,194,202, 13, 64,158,176,
+ 1, 0, 0, 5, 0, 0, 0, 0, 62,182,190,138, 62,249, 49, 35, 62,172,229,172, 62,249,127,116, 62,168, 39,196, 62,226, 11,206,
+ 62,183,201, 60, 62,231,218, 82, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63, 48,134, 62, 62,249,107, 37, 63, 46, 88,238,
+ 63, 2,223,146, 63, 40,207,123, 62,254,175,218, 63, 43,190,154, 62,249, 0,192, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0,
+ 62,188,184, 2, 62,255, 0,140, 62,177, 87,173, 63, 3, 9,102, 62,172,229,172, 62,249,127,116, 62,182,190,138, 62,249, 49, 35,
+ 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63, 46, 88,238, 63, 2,223,146, 63, 34,158,220, 63, 10, 23,175, 63, 30, 77,126,
+ 63, 5, 88,156, 63, 40,207,123, 62,254,175,218, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 62,210, 65, 89, 63, 5,158, 56,
+ 62,201,109,124, 63, 10,121, 72, 62,177, 87,173, 63, 3, 9,102, 62,188,184, 2, 62,255, 0,140, 13, 64,158,176, 1, 0, 0, 5,
+ 0, 0, 0, 0, 63, 34,158,220, 63, 10, 23,175, 63, 26,105, 28, 63, 11,194,242, 63, 25,120,244, 63, 7,242, 78, 63, 30, 77,126,
+ 63, 5, 88,156, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 62,220, 39, 0, 63, 8, 58,252, 62,218, 73,220, 63, 12, 31,169,
+ 62,201,109,124, 63, 10,121, 72, 62,210, 65, 89, 63, 5,158, 56, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63, 26,105, 28,
+ 63, 11,194,242, 63, 22,244,173, 63, 11,215,236, 63, 22, 47,202, 63, 8, 60,156, 63, 25,120,244, 63, 7,242, 78, 13, 64,158,176,
+ 1, 0, 0, 5, 0, 0, 0, 0, 62,226,221, 11, 63, 8,125, 90, 62,225, 89,220, 63, 12, 42, 77, 62,218, 73,220, 63, 12, 31,169,
+ 62,220, 39, 0, 63, 8, 58,252, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63, 22,244,173, 63, 11,215,236, 63, 11,169, 67,
+ 63, 11,197, 18, 63, 12,252,106, 63, 3,173,180, 63, 22, 47,202, 63, 8, 60,156, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0,
+ 62,245,114, 35, 63, 3,196,233, 62,248, 72, 55, 63, 11,232, 91, 62,225, 89,220, 63, 12, 42, 77, 62,226,221, 11, 63, 8,125, 90,
+ 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63, 11,169, 67, 63, 11,197, 18, 63, 3,232,148, 63, 11, 17,164, 63, 3,220,162,
+ 63, 0, 88, 45, 63, 12,252,106, 63, 3,173,180, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63, 3,220,162, 63, 0, 88, 45,
+ 63, 3,232,148, 63, 11, 17,164, 62,248, 72, 55, 63, 11,232, 91, 62,245,114, 35, 63, 3,196,233, 13, 64,158,176, 1, 0, 0, 5,
+ 0, 0, 0, 0, 63, 17, 59,103, 62,255,195,120, 63, 22, 81,240, 63, 1, 70,114, 63, 22, 47,202, 63, 8, 60,156, 63, 12,252,106,
+ 63, 3,173,180, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 62,226,221, 11, 63, 8,125, 90, 62,226,128,106, 63, 1,111,198,
+ 62,236,213,209, 62,255,250, 4, 62,245,114, 35, 63, 3,196,233, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63, 22, 81,240,
+ 63, 1, 70,114, 63, 25,182,151, 63, 1, 9,130, 63, 25,120,244, 63, 7,242, 78, 63, 22, 47,202, 63, 8, 60,156, 13, 64,158,176,
+ 1, 0, 0, 5, 0, 0, 0, 0, 62,220, 39, 0, 63, 8, 58,252, 62,219,150,213, 63, 1, 55, 50, 62,226,128,106, 63, 1,111,198,
+ 62,226,221, 11, 63, 8,125, 90, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63, 30, 49, 96, 62,254,229,121, 63, 30, 77,126,
+ 63, 5, 88,156, 63, 25,120,244, 63, 7,242, 78, 63, 25,182,151, 63, 1, 9,130, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0,
+ 62,220, 39, 0, 63, 8, 58,252, 62,210, 65, 89, 63, 5,158, 56, 62,210,116,176, 62,255, 62,227, 62,219,150,213, 63, 1, 55, 50,
+ 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63, 37,113, 25, 62,247,157, 35, 63, 40,207,123, 62,254,175,218, 63, 30, 77,126,
+ 63, 5, 88,156, 63, 30, 49, 96, 62,254,229,121, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 62,210, 65, 89, 63, 5,158, 56,
+ 62,188,184, 2, 62,255, 0,140, 62,195,165,189, 62,247,232,139, 62,210,116,176, 62,255, 62,227, 13, 64,158,176, 1, 0, 0, 5,
+ 0, 0, 0, 0, 63, 39, 62, 92, 62,240, 75,121, 63, 43,190,154, 62,249, 0,192, 63, 40,207,123, 62,254,175,218, 63, 37,113, 25,
+ 62,247,157, 35, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 62,188,184, 2, 62,255, 0,140, 62,182,190,138, 62,249, 49, 35,
+ 62,192, 10,222, 62,240,128,163, 62,195,165,189, 62,247,232,139, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63, 38,149,140,
+ 62,229, 95, 38, 63, 43, 79,177, 62,231,194,202, 63, 43,190,154, 62,249, 0,192, 63, 39, 62, 92, 62,240, 75,121, 13, 64,158,176,
+ 1, 0, 0, 5, 0, 0, 0, 0, 62,182,190,138, 62,249, 49, 35, 62,183,201, 60, 62,231,218, 82, 62,193,140,168, 62,229,129, 94,
+ 62,192, 10,222, 62,240,128,163, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63, 33,120, 14, 62,214,238,166, 63, 39,163, 24,
+ 62,216, 95,174, 63, 43, 79,177, 62,231,194,202, 63, 38,149,140, 62,229, 95, 38, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0,
+ 62,183,201, 60, 62,231,218, 82, 62,191,194, 98, 62,216, 94, 42, 62,204, 75,168, 62,215, 7, 62, 62,193,140,168, 62,229,129, 94,
+ 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63, 27,178,165, 62,208, 17,128, 63, 30, 21, 66, 62,200,139,178, 63, 39,163, 24,
+ 62,216, 95,174, 63, 33,120, 14, 62,214,238,166, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 62,191,194, 98, 62,216, 94, 42,
+ 62,211,125,139, 62,200,171,170, 62,216, 24, 6, 62,208, 57,128, 62,204, 75,168, 62,215, 7, 62, 13, 64,158,176, 1, 0, 0, 5,
+ 0, 0, 0, 0, 63, 17, 97, 15, 62,214, 34,220, 63, 12,237,158, 62,187,241, 38, 63, 30, 21, 66, 62,200,139,178, 63, 27,178,165,
+ 62,208, 17,128, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 62,211,125,139, 62,200,171,170, 62,245,175, 15, 62,188, 14,188,
+ 62,236,200,217, 62,214, 49,134, 62,216, 24, 6, 62,208, 57,128, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63, 17, 97, 15,
+ 62,214, 34,220, 63, 14,244,149, 62,221, 42, 4, 63, 3,230,147, 62,208, 47, 78, 63, 12,237,158, 62,187,241, 38, 13, 64,158,176,
+ 1, 0, 0, 5, 0, 0, 0, 0, 63, 3,230,147, 62,208, 47, 78, 62,241,144,141, 62,221, 52,244, 62,236,200,217, 62,214, 49,134,
+ 62,245,175, 15, 62,188, 14,188, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63, 17, 59,103, 62,255,195,120, 63, 12,252,106,
+ 63, 3,173,180, 63, 3,220,162, 63, 0, 88, 45, 63, 13, 25, 71, 62,243,163,116, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0,
+ 63, 3,220,162, 63, 0, 88, 45, 62,245,114, 35, 63, 3,196,233, 62,236,213,209, 62,255,250, 4, 62,245, 45, 0, 62,243,185,206,
+ 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63, 13, 25, 71, 62,243,163,116, 63, 3,220,162, 63, 0, 88, 45, 63, 3,220,215,
+ 62,231,189,148, 63, 13, 2, 64, 62,230,215, 52, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63, 3,220,215, 62,231,189,148,
+ 63, 3,220,162, 63, 0, 88, 45, 62,245, 45, 0, 62,243,185,206, 62,245,100,219, 62,230,230,184, 13, 64,158,176, 1, 0, 0, 5,
+ 0, 0, 0, 0, 63, 3,230,147, 62,208, 47, 78, 63, 14,244,149, 62,221, 42, 4, 63, 13, 2, 64, 62,230,215, 52, 63, 3,220,215,
+ 62,231,189,148, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 62,245,100,219, 62,230,230,184, 62,241,144,141, 62,221, 52,244,
+ 63, 3,230,147, 62,208, 47, 78, 63, 3,220,215, 62,231,189,148, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63, 7, 61,250,
+ 62, 54, 31,148, 63, 3,202,193, 62, 49,174,214, 63, 3,199,220, 62, 24,219, 89, 63, 13,190, 79, 62, 46,193,160, 13, 64,158,176,
+ 1, 0, 0, 5, 0, 0, 0, 0, 63, 3,199,220, 62, 24,219, 89, 63, 3,202,193, 62, 49,174,214, 63, 0, 87,175, 62, 54, 90,251,
+ 62,243,150, 14, 62, 47, 79,204, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63, 9,214, 68, 62, 66,237,246, 63, 7, 61,250,
+ 62, 54, 31,148, 63, 13,190, 79, 62, 46,193,160, 63, 16,104,250, 62, 55,113, 16, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0,
+ 62,243,150, 14, 62, 47, 79,204, 63, 0, 87,175, 62, 54, 90,251, 62,251,137,104, 62, 67, 92,179, 62,238, 68,200, 62, 56, 62, 76,
+ 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63, 8,221,237, 62, 91, 90,218, 63, 9,214, 68, 62, 66,237,246, 63, 16,104,250,
+ 62, 55,113, 16, 63, 16,186,206, 62, 72,129, 85, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 62,238, 68,200, 62, 56, 62, 76,
+ 62,251,137,104, 62, 67, 92,179, 62,253,153, 39, 62, 91,195, 27, 62,237,187,192, 62, 73,118,194, 13, 64,158,176, 1, 0, 0, 5,
+ 0, 0, 0, 0, 63, 15,243,206, 62,136,207,182, 63, 8, 32, 77, 62,139, 39, 10, 63, 9,117, 22, 62, 97,203,146, 63, 16, 32,222,
+ 62, 93,106, 34, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 62,252,110,192, 62, 98, 68, 79, 62,255, 89,219, 62,139, 79,116,
+ 62,239,193, 92, 62,137, 61,113, 62,239, 19, 21, 62, 94,110,121, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63, 8,221,237,
+ 62, 91, 90,218, 63, 16,186,206, 62, 72,129, 85, 63, 16, 32,222, 62, 93,106, 34, 63, 9,117, 22, 62, 97,203,146, 13, 64,158,176,
+ 1, 0, 0, 5, 0, 0, 0, 0, 62,239, 19, 21, 62, 94,110,121, 62,237,187,192, 62, 73,118,194, 62,253,153, 39, 62, 91,195, 27,
+ 62,252,110,192, 62, 98, 68, 79, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63, 9,125,119, 62,158,112, 7, 63, 3,233, 70,
+ 62,154, 27, 88, 63, 3,229,235, 62,139,108, 97, 63, 8, 32, 77, 62,139, 39, 10, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0,
+ 63, 3,229,235, 62,139,108, 97, 63, 3,233, 70, 62,154, 27, 88, 62,252,179,165, 62,158,140,163, 62,255, 89,219, 62,139, 79,116,
+ 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63, 9,117, 22, 62, 97,203,146, 63, 8, 32, 77, 62,139, 39, 10, 63, 3,229,235,
+ 62,139,108, 97, 63, 3,215,246, 62,101, 56,143, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63, 3,229,235, 62,139,108, 97,
+ 62,255, 89,219, 62,139, 79,116, 62,252,110,192, 62, 98, 68, 79, 63, 3,215,246, 62,101, 56,143, 13, 64,158,176, 1, 0, 0, 5,
+ 0, 0, 0, 0, 63, 3,210,147, 62, 86, 95,221, 63, 8,221,237, 62, 91, 90,218, 63, 9,117, 22, 62, 97,203,146, 63, 3,215,246,
+ 62,101, 56,143, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 62,252,110,192, 62, 98, 68, 79, 62,253,153, 39, 62, 91,195, 27,
+ 63, 3,210,147, 62, 86, 95,221, 63, 3,215,246, 62,101, 56,143, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63, 12, 54, 5,
+ 62,167,183,188, 63, 9, 61,250, 62,168,214,252, 63, 8,143,152, 62,163,107, 45, 63, 9,125,119, 62,158,112, 7, 13, 64,158,176,
+ 1, 0, 0, 5, 0, 0, 0, 0, 62,254,136,100, 62,163,123, 38, 62,253, 39,110, 62,168,224,103, 62,247, 68, 98, 62,167,206,146,
+ 62,252,179,165, 62,158,140,163, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63, 10,196,135, 62,178,208, 52, 63, 8,233, 25,
+ 62,175,110,116, 63, 9, 61,250, 62,168,214,252, 63, 12, 54, 5, 62,167,183,188, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0,
+ 62,253, 39,110, 62,168,224,103, 62,253,195,102, 62,175,102,184, 62,250, 14, 98, 62,178,202,149, 62,247, 68, 98, 62,167,206,146,
+ 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63, 4, 17, 69, 62,182,176,105, 63, 6,138, 69, 62,177,180, 80, 63, 8,233, 25,
+ 62,175,110,116, 63, 10,196,135, 62,178,208, 52, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 62,253,195,102, 62,175,102,184,
+ 63, 1, 49, 14, 62,177,150, 62, 63, 4, 17, 69, 62,182,176,105, 62,250, 14, 98, 62,178,202,149, 13, 64,158,176, 1, 0, 0, 5,
+ 0, 0, 0, 0, 63, 3,124,209, 62,177, 0, 70, 63, 3,232, 11, 62,174, 4,140, 63, 6,138, 69, 62,177,180, 80, 63, 4, 17, 69,
+ 62,182,176,105, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63, 1, 49, 14, 62,177,150, 62, 63, 3,232, 11, 62,174, 4,140,
+ 63, 3,124,209, 62,177, 0, 70, 63, 4, 17, 69, 62,182,176,105, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63, 3,233, 70,
+ 62,154, 27, 88, 63, 9,125,119, 62,158,112, 7, 63, 8,143,152, 62,163,107, 45, 63, 3,232,212, 62,158,152, 58, 13, 64,158,176,
+ 1, 0, 0, 5, 0, 0, 0, 0, 62,254,136,100, 62,163,123, 38, 62,252,179,165, 62,158,140,163, 63, 3,233, 70, 62,154, 27, 88,
+ 63, 3,232,212, 62,158,152, 58, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63, 3,232,212, 62,158,152, 58, 63, 8,143,152,
+ 62,163,107, 45, 63, 7, 91,121, 62,166, 51,134, 63, 3,231,205, 62,162,149, 58, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0,
+ 63, 0,116, 44, 62,166, 56,255, 62,254,136,100, 62,163,123, 38, 63, 3,232,212, 62,158,152, 58, 63, 3,231,205, 62,162,149, 58,
+ 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63, 3,232, 11, 62,174, 4,140, 63, 3,233,214, 62,170,154,198, 63, 6,110,233,
+ 62,174,152, 94, 63, 6,138, 69, 62,177,180, 80, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63, 1, 82,228, 62,174,140, 95,
+ 63, 3,233,214, 62,170,154,198, 63, 3,232, 11, 62,174, 4,140, 63, 1, 49, 14, 62,177,150, 62, 13, 64,158,176, 1, 0, 0, 5,
+ 0, 0, 0, 0, 63, 6,138, 69, 62,177,180, 80, 63, 6,110,233, 62,174,152, 94, 63, 7,236, 59, 62,173,123, 19, 63, 8,233, 25,
+ 62,175,110,116, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 62,255,185,217, 62,173,116, 92, 63, 1, 82,228, 62,174,140, 95,
+ 63, 1, 49, 14, 62,177,150, 62, 62,253,195,102, 62,175,102,184, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63, 8,233, 25,
+ 62,175,110,116, 63, 7,236, 59, 62,173,123, 19, 63, 7,249, 85, 62,169, 52, 92, 63, 9, 61,250, 62,168,214,252, 13, 64,158,176,
+ 1, 0, 0, 5, 0, 0, 0, 0, 62,255,169,160, 62,169, 57, 6, 62,255,185,217, 62,173,116, 92, 62,253,195,102, 62,175,102,184,
+ 62,253, 39,110, 62,168,224,103, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63, 9, 61,250, 62,168,214,252, 63, 7,249, 85,
+ 62,169, 52, 92, 63, 7, 91,121, 62,166, 51,134, 63, 8,143,152, 62,163,107, 45, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0,
+ 63, 0,116, 44, 62,166, 56,255, 62,255,169,160, 62,169, 57, 6, 62,253, 39,110, 62,168,224,103, 62,254,136,100, 62,163,123, 38,
+ 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63, 3,233,214, 62,170,154,198, 63, 7,249, 85, 62,169, 52, 92, 63, 7,236, 59,
+ 62,173,123, 19, 63, 6,110,233, 62,174,152, 94, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 62,255,185,217, 62,173,116, 92,
+ 62,255,169,160, 62,169, 57, 6, 63, 3,233,214, 62,170,154,198, 63, 1, 82,228, 62,174,140, 95, 13, 64,158,176, 1, 0, 0, 5,
+ 0, 0, 0, 0, 63, 3,233,214, 62,170,154,198, 63, 3,231,205, 62,162,149, 58, 63, 7, 91,121, 62,166, 51,134, 63, 7,249, 85,
+ 62,169, 52, 92, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63, 0,116, 44, 62,166, 56,255, 63, 3,231,205, 62,162,149, 58,
+ 63, 3,233,214, 62,170,154,198, 62,255,169,160, 62,169, 57, 6, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63, 4, 17, 69,
+ 62,182,176,105, 63, 10,196,135, 62,178,208, 52, 63, 12,237,158, 62,187,241, 38, 63, 3,230,147, 62,208, 47, 78, 13, 64,158,176,
+ 1, 0, 0, 5, 0, 0, 0, 0, 62,245,175, 15, 62,188, 14,188, 62,250, 14, 98, 62,178,202,149, 63, 4, 17, 69, 62,182,176,105,
+ 63, 3,230,147, 62,208, 47, 78, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63, 10,196,135, 62,178,208, 52, 63, 12, 54, 5,
+ 62,167,183,188, 63, 16, 0,112, 62,164,246,254, 63, 12,237,158, 62,187,241, 38, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0,
+ 62,239,187,207, 62,165, 42, 19, 62,247, 68, 98, 62,167,206,146, 62,250, 14, 98, 62,178,202,149, 62,245,175, 15, 62,188, 14,188,
+ 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63, 12, 54, 5, 62,167,183,188, 63, 9,125,119, 62,158,112, 7, 63, 15,250, 44,
+ 62,154, 0,109, 63, 16, 0,112, 62,164,246,254, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 62,239,205, 56, 62,154, 71, 8,
+ 62,252,179,165, 62,158,140,163, 62,247, 68, 98, 62,167,206,146, 62,239,187,207, 62,165, 42, 19, 13, 64,158,176, 1, 0, 0, 5,
+ 0, 0, 0, 0, 63, 9,125,119, 62,158,112, 7, 63, 8, 32, 77, 62,139, 39, 10, 63, 15,243,206, 62,136,207,182, 63, 15,250, 44,
+ 62,154, 0,109, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 62,239,193, 92, 62,137, 61,113, 62,255, 89,219, 62,139, 79,116,
+ 62,252,179,165, 62,158,140,163, 62,239,205, 56, 62,154, 71, 8, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63, 25, 81, 20,
+ 62,132, 56, 17, 63, 27, 46,208, 62,148, 35,149, 63, 15,250, 44, 62,154, 0,109, 63, 15,243,206, 62,136,207,182, 13, 64,158,176,
+ 1, 0, 0, 5, 0, 0, 0, 0, 62,239,205, 56, 62,154, 71, 8, 62,217,166,238, 62,148,221,229, 62,221, 42, 54, 62,133, 25,209,
+ 62,239,193, 92, 62,137, 61,113, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63, 27, 46,208, 62,148, 35,149, 63, 27,177, 36,
+ 62,156,151,158, 63, 16, 0,112, 62,164,246,254, 63, 15,250, 44, 62,154, 0,109, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0,
+ 62,239,187,207, 62,165, 42, 19, 62,216,160, 0, 62,157, 44,127, 62,217,166,238, 62,148,221,229, 62,239,205, 56, 62,154, 71, 8,
+ 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63, 27,239,111, 62,166, 77,159, 63, 12,237,158, 62,187,241, 38, 63, 16, 0,112,
+ 62,164,246,254, 63, 27,177, 36, 62,156,151,158, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 62,239,187,207, 62,165, 42, 19,
+ 62,245,175, 15, 62,188, 14,188, 62,216, 21,115, 62,166,177, 14, 62,216,160, 0, 62,157, 44,127, 13, 64,158,176, 1, 0, 0, 5,
+ 0, 0, 0, 0, 63, 8,221,237, 62, 91, 90,218, 63, 3,210,147, 62, 86, 95,221, 63, 3,211,129, 62, 83,168,248, 63, 8, 33,170,
+ 62, 86,149,254, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63, 3,211,129, 62, 83,168,248, 63, 3,210,147, 62, 86, 95,221,
+ 62,253,153, 39, 62, 91,195, 27, 62,255, 14, 8, 62, 86,232, 58, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63, 9,214, 68,
+ 62, 66,237,246, 63, 8,221,237, 62, 91, 90,218, 63, 8, 33,170, 62, 86,149,254, 63, 8,180, 20, 62, 69, 29, 94, 13, 64,158,176,
+ 1, 0, 0, 5, 0, 0, 0, 0, 62,255, 14, 8, 62, 86,232, 58, 62,253,153, 39, 62, 91,195, 27, 62,251,137,104, 62, 67, 92,179,
+ 62,253,210, 19, 62, 69,114, 55, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63, 7, 61,250, 62, 54, 31,148, 63, 9,214, 68,
+ 62, 66,237,246, 63, 8,180, 20, 62, 69, 29, 94, 63, 6, 82,168, 62, 57, 43, 80, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0,
+ 62,253,210, 19, 62, 69,114, 55, 62,251,137,104, 62, 67, 92,179, 63, 0, 87,175, 62, 54, 90,251, 63, 1, 68, 48, 62, 57, 84,166,
+ 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63, 3,202,193, 62, 49,174,214, 63, 7, 61,250, 62, 54, 31,148, 63, 6, 82,168,
+ 62, 57, 43, 80, 63, 3,202,205, 62, 54, 22, 8, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63, 1, 68, 48, 62, 57, 84,166,
+ 63, 0, 87,175, 62, 54, 90,251, 63, 3,202,193, 62, 49,174,214, 63, 3,202,205, 62, 54, 22, 8, 13, 64,158,176, 1, 0, 0, 5,
+ 0, 0, 0, 0, 63, 3,202,205, 62, 54, 22, 8, 63, 6, 82,168, 62, 57, 43, 80, 63, 5, 24,246, 62, 66,150, 26, 63, 3,205,213,
+ 62, 64,232,220, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63, 2,131, 29, 62, 66,172, 22, 63, 1, 68, 48, 62, 57, 84,166,
+ 63, 3,202,205, 62, 54, 22, 8, 63, 3,205,213, 62, 64,232,220, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63, 6, 82,168,
+ 62, 57, 43, 80, 63, 8,180, 20, 62, 69, 29, 94, 63, 6, 83, 39, 62, 70,114,191, 63, 5, 24,246, 62, 66,150, 26, 13, 64,158,176,
+ 1, 0, 0, 5, 0, 0, 0, 0, 63, 1, 75,185, 62, 70,160,222, 62,253,210, 19, 62, 69,114, 55, 63, 1, 68, 48, 62, 57, 84,166,
+ 63, 2,131, 29, 62, 66,172, 22, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63, 8,180, 20, 62, 69, 29, 94, 63, 8, 33,170,
+ 62, 86,149,254, 63, 6,111, 4, 62, 76,172, 40, 63, 6, 83, 39, 62, 70,114,191, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0,
+ 63, 1, 51,157, 62, 76,218,158, 62,255, 14, 8, 62, 86,232, 58, 62,253,210, 19, 62, 69,114, 55, 63, 1, 75,185, 62, 70,160,222,
+ 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63, 8, 33,170, 62, 86,149,254, 63, 3,211,129, 62, 83,168,248, 63, 3,208,234,
+ 62, 75, 43,146, 63, 6,111, 4, 62, 76,172, 40, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63, 3,208,234, 62, 75, 43,146,
+ 63, 3,211,129, 62, 83,168,248, 62,255, 14, 8, 62, 86,232, 58, 63, 1, 51,157, 62, 76,218,158, 13, 64,158,176, 1, 0, 0, 5,
+ 0, 0, 0, 0, 63, 3,208,234, 62, 75, 43,146, 63, 3,205,213, 62, 64,232,220, 63, 5, 24,246, 62, 66,150, 26, 63, 6,111, 4,
+ 62, 76,172, 40, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63, 2,131, 29, 62, 66,172, 22, 63, 3,205,213, 62, 64,232,220,
+ 63, 3,208,234, 62, 75, 43,146, 63, 1, 51,157, 62, 76,218,158, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63, 6,111, 4,
+ 62, 76,172, 40, 63, 5, 24,246, 62, 66,150, 26, 63, 6, 83, 39, 62, 70,114,191, 63,128, 0, 0, 63,128, 0, 0, 13, 64,158,176,
+ 1, 0, 0, 5, 0, 0, 0, 0, 63, 1, 75,185, 62, 70,160,222, 63, 2,131, 29, 62, 66,172, 22, 63, 1, 51,157, 62, 76,218,158,
+ 63,128, 0, 0, 63,128, 0, 0, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63, 13, 2, 64, 62,230,215, 52, 63, 14,244,149,
+ 62,221, 42, 4, 63, 16,216, 4, 62,224, 24,160, 63, 15,200,120, 62,231,255, 84, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0,
+ 62,237,193,119, 62,224, 38,190, 62,241,144,141, 62,221, 52,244, 62,245,100,219, 62,230,230,184, 62,239,211, 21, 62,232, 18,185,
+ 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63, 13, 25, 71, 62,243,163,116, 63, 13, 2, 64, 62,230,215, 52, 63, 15,200,120,
+ 62,231,255, 84, 63, 16,171,184, 62,241,133, 40, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 62,239,211, 21, 62,232, 18,185,
+ 62,245,100,219, 62,230,230,184, 62,245, 45, 0, 62,243,185,206, 62,237,252,218, 62,241,160, 62, 13, 64,158,176, 1, 0, 0, 5,
+ 0, 0, 0, 0, 63, 17, 59,103, 62,255,195,120, 63, 13, 25, 71, 62,243,163,116, 63, 16,171,184, 62,241,133, 40, 63, 19, 44, 55,
+ 62,250, 21, 86, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 62,237,252,218, 62,241,160, 62, 62,245, 45, 0, 62,243,185,206,
+ 62,236,213,209, 62,255,250, 4, 62,232,228,153, 62,250, 67,154, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63, 14,244,149,
+ 62,221, 42, 4, 63, 17, 97, 15, 62,214, 34,220, 63, 19, 53,217, 62,218,211, 16, 63, 16,216, 4, 62,224, 24,160, 13, 64,158,176,
+ 1, 0, 0, 5, 0, 0, 0, 0, 62,233, 14, 8, 62,218,226, 66, 62,236,200,217, 62,214, 49,134, 62,241,144,141, 62,221, 52,244,
+ 62,237,193,119, 62,224, 38,190, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63, 17, 97, 15, 62,214, 34,220, 63, 27,178,165,
+ 62,208, 17,128, 63, 26,198,205, 62,214,184,124, 63, 19, 53,217, 62,218,211, 16, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0,
+ 62,217,214,216, 62,214,224,218, 62,216, 24, 6, 62,208, 57,128, 62,236,200,217, 62,214, 49,134, 62,233, 14, 8, 62,218,226, 66,
+ 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63, 27,178,165, 62,208, 17,128, 63, 33,120, 14, 62,214,238,166, 63, 31,136,156,
+ 62,219,138,194, 63, 26,198,205, 62,214,184,124, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 62,208, 30,254, 62,219,177,204,
+ 62,204, 75,168, 62,215, 7, 62, 62,216, 24, 6, 62,208, 57,128, 62,217,214,216, 62,214,224,218, 13, 64,158,176, 1, 0, 0, 5,
+ 0, 0, 0, 0, 63, 33,120, 14, 62,214,238,166, 63, 38,149,140, 62,229, 95, 38, 63, 36, 9, 79, 62,229,224, 94, 63, 31,136,156,
+ 62,219,138,194, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 62,198,192,148, 62,230, 11,182, 62,193,140,168, 62,229,129, 94,
+ 62,204, 75,168, 62,215, 7, 62, 62,208, 30,254, 62,219,177,204, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63, 38,149,140,
+ 62,229, 95, 38, 63, 39, 62, 92, 62,240, 75,121, 63, 36, 49, 14, 62,239, 88,253, 63, 36, 9, 79, 62,229,224, 94, 13, 64,158,176,
+ 1, 0, 0, 5, 0, 0, 0, 0, 62,198, 71, 97, 62,239,149,192, 62,192, 10,222, 62,240,128,163, 62,193,140,168, 62,229,129, 94,
+ 62,198,192,148, 62,230, 11,182, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63, 39, 62, 92, 62,240, 75,121, 63, 37,113, 25,
+ 62,247,157, 35, 63, 35, 33,243, 62,245,143, 80, 63, 36, 49, 14, 62,239, 88,253, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0,
+ 62,200, 99, 87, 62,245,217,172, 62,195,165,189, 62,247,232,139, 62,192, 10,222, 62,240,128,163, 62,198, 71, 97, 62,239,149,192,
+ 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63, 37,113, 25, 62,247,157, 35, 63, 30, 49, 96, 62,254,229,121, 63, 29, 49,223,
+ 62,250,140,199, 63, 35, 33,243, 62,245,143, 80, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 62,212,124,147, 62,250,215,146,
+ 62,210,116,176, 62,255, 62,227, 62,195,165,189, 62,247,232,139, 62,200, 99, 87, 62,245,217,172, 13, 64,158,176, 1, 0, 0, 5,
+ 0, 0, 0, 0, 63, 30, 49, 96, 62,254,229,121, 63, 25,182,151, 63, 1, 9,130, 63, 25,181, 50, 62,253,111,118, 63, 29, 49,223,
+ 62,250,140,199, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 62,219,151, 52, 62,253,186, 68, 62,219,150,213, 63, 1, 55, 50,
+ 62,210,116,176, 62,255, 62,227, 62,212,124,147, 62,250,215,146, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63, 25,182,151,
+ 63, 1, 9,130, 63, 22, 81,240, 63, 1, 70,114, 63, 22,188,241, 62,253,149, 28, 63, 25,181, 50, 62,253,111,118, 13, 64,158,176,
+ 1, 0, 0, 5, 0, 0, 0, 0, 62,225,163,212, 62,253,215, 91, 62,226,128,106, 63, 1,111,198, 62,219,150,213, 63, 1, 55, 50,
+ 62,219,151, 52, 62,253,186, 68, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63, 22, 81,240, 63, 1, 70,114, 63, 17, 59,103,
+ 62,255,195,120, 63, 19, 44, 55, 62,250, 21, 86, 63, 22,188,241, 62,253,149, 28, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0,
+ 62,232,228,153, 62,250, 67,154, 62,236,213,209, 62,255,250, 4, 62,226,128,106, 63, 1,111,198, 62,225,163,212, 62,253,215, 91,
+ 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63, 22,188,241, 62,253,149, 28, 63, 19, 44, 55, 62,250, 21, 86, 63, 20,165, 9,
+ 62,247, 99,248, 63, 23, 0, 20, 62,251, 57, 6, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 62,229,232,232, 62,247,142, 74,
+ 62,232,228,153, 62,250, 67,154, 62,225,163,212, 62,253,215, 91, 62,225, 26,145, 62,251,116,114, 13, 64,158,176, 1, 0, 0, 5,
+ 0, 0, 0, 0, 63, 25,181, 50, 62,253,111,118, 63, 22,188,241, 62,253,149, 28, 63, 23, 0, 20, 62,251, 57, 6, 63, 25,144,130,
+ 62,251, 7,128, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 62,225, 26,145, 62,251,116,114, 62,225,163,212, 62,253,215, 91,
+ 62,219,151, 52, 62,253,186, 68, 62,219,225,177, 62,251, 75, 67, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63, 29, 49,223,
+ 62,250,140,199, 63, 25,181, 50, 62,253,111,118, 63, 25,144,130, 62,251, 7,128, 63, 28,195, 80, 62,248,166, 55, 13, 64,158,176,
+ 1, 0, 0, 5, 0, 0, 0, 0, 62,219,225,177, 62,251, 75, 67, 62,219,151, 52, 62,253,186, 68, 62,212,124,147, 62,250,215,146,
+ 62,213, 95,233, 62,248,237, 20, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63, 35, 33,243, 62,245,143, 80, 63, 29, 49,223,
+ 62,250,140,199, 63, 28,195, 80, 62,248,166, 55, 63, 33,164, 22, 62,243, 75,102, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0,
+ 62,213, 95,233, 62,248,237, 20, 62,212,124,147, 62,250,215,146, 62,200, 99, 87, 62,245,217,172, 62,203,114, 65, 62,243,143,159,
+ 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63, 36, 49, 14, 62,239, 88,253, 63, 35, 33,243, 62,245,143, 80, 63, 33,164, 22,
+ 62,243, 75,102, 63, 34,160, 30, 62,238, 47,169, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 62,203,114, 65, 62,243,143,159,
+ 62,200, 99, 87, 62,245,217,172, 62,198, 71, 97, 62,239,149,192, 62,201,128,188, 62,238,110,126, 13, 64,158,176, 1, 0, 0, 5,
+ 0, 0, 0, 0, 63, 36, 9, 79, 62,229,224, 94, 63, 36, 49, 14, 62,239, 88,253, 63, 34,160, 30, 62,238, 47,169, 63, 34,144,131,
+ 62,231, 87,253, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 62,201,128,188, 62,238,110,126, 62,198, 71, 97, 62,239,149,192,
+ 62,198,192,148, 62,230, 11,182, 62,201,190,141, 62,231,140,124, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63, 31,136,156,
+ 62,219,138,194, 63, 36, 9, 79, 62,229,224, 94, 63, 34,144,131, 62,231, 87,253, 63, 30,208, 21, 62,221,182,174, 13, 64,158,176,
+ 1, 0, 0, 5, 0, 0, 0, 0, 62,201,190,141, 62,231,140,124, 62,198,192,148, 62,230, 11,182, 62,208, 30,254, 62,219,177,204,
+ 62,209,133,168, 62,221,221, 51, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63, 26,198,205, 62,214,184,124, 63, 31,136,156,
+ 62,219,138,194, 63, 30,208, 21, 62,221,182,174, 63, 26,218,128, 62,217,206, 68, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0,
+ 62,209,133,168, 62,221,221, 51, 62,208, 30,254, 62,219,177,204, 62,217,214,216, 62,214,224,218, 62,217,157, 11, 62,217,243, 64,
+ 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63, 19, 53,217, 62,218,211, 16, 63, 26,198,205, 62,214,184,124, 63, 26,218,128,
+ 62,217,206, 68, 63, 20, 53,103, 62,221, 84,236, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 62,217,157, 11, 62,217,243, 64,
+ 62,217,214,216, 62,214,224,218, 62,233, 14, 8, 62,218,226, 66, 62,231, 5, 68, 62,221,101,234, 13, 64,158,176, 1, 0, 0, 5,
+ 0, 0, 0, 0, 63, 16,216, 4, 62,224, 24,160, 63, 19, 53,217, 62,218,211, 16, 63, 20, 53,103, 62,221, 84,236, 63, 18, 87, 81,
+ 62,226,175, 33, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 62,231, 5, 68, 62,221,101,234, 62,233, 14, 8, 62,218,226, 66,
+ 62,237,193,119, 62,224, 38,190, 62,234,187,180, 62,226,190,249, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63, 19, 44, 55,
+ 62,250, 21, 86, 63, 16,171,184, 62,241,133, 40, 63, 18, 68, 98, 62,240,197,150, 63, 20,165, 9, 62,247, 99,248, 13, 64,158,176,
+ 1, 0, 0, 5, 0, 0, 0, 0, 62,234,197, 35, 62,240,226,215, 62,237,252,218, 62,241,160, 62, 62,232,228,153, 62,250, 67,154,
+ 62,229,232,232, 62,247,142, 74, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63, 16,171,184, 62,241,133, 40, 63, 15,200,120,
+ 62,231,255, 84, 63, 18, 4,161, 62,232,184,138, 63, 18, 68, 98, 62,240,197,150, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0,
+ 62,235, 85,154, 62,232,206, 92, 62,239,211, 21, 62,232, 18,185, 62,237,252,218, 62,241,160, 62, 62,234,197, 35, 62,240,226,215,
+ 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63, 15,200,120, 62,231,255, 84, 63, 16,216, 4, 62,224, 24,160, 63, 18, 87, 81,
+ 62,226,175, 33, 63, 18, 4,161, 62,232,184,138, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 62,234,187,180, 62,226,190,249,
+ 62,237,193,119, 62,224, 38,190, 62,239,211, 21, 62,232, 18,185, 62,235, 85,154, 62,232,206, 92, 13, 64,158,176, 1, 0, 0, 5,
+ 0, 0, 0, 0, 63, 3,232,148, 63, 11, 17,164, 63, 11,169, 67, 63, 11,197, 18, 63, 13,120,216, 63, 23, 81,160, 63, 4, 15,147,
+ 63, 23,248,227, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 62,245, 27, 64, 63, 23,166,100, 62,248, 72, 55, 63, 11,232, 91,
+ 63, 3,232,148, 63, 11, 17,164, 63, 4, 15,147, 63, 23,248,227, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63, 11,169, 67,
+ 63, 11,197, 18, 63, 22,244,173, 63, 11,215,236, 63, 23,233, 94, 63, 16, 60,186, 63, 13,120,216, 63, 23, 81,160, 13, 64,158,176,
+ 1, 0, 0, 5, 0, 0, 0, 0, 62,223,130,109, 63, 16,165,118, 62,225, 89,220, 63, 12, 42, 77, 62,248, 72, 55, 63, 11,232, 91,
+ 62,245, 27, 64, 63, 23,166,100, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63, 22,244,173, 63, 11,215,236, 63, 26,105, 28,
+ 63, 11,194,242, 63, 28, 56,220, 63, 14,250, 66, 63, 23,233, 94, 63, 16, 60,186, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0,
+ 62,214,161,157, 63, 15,110,219, 62,218, 73,220, 63, 12, 31,169, 62,225, 89,220, 63, 12, 42, 77, 62,223,130,109, 63, 16,165,118,
+ 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63, 26,105, 28, 63, 11,194,242, 63, 34,158,220, 63, 10, 23,175, 63, 39, 44,109,
+ 63, 19,221,107, 63, 28, 56,220, 63, 14,250, 66, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 62,192, 26,156, 63, 20,139, 31,
+ 62,201,109,124, 63, 10,121, 72, 62,218, 73,220, 63, 12, 31,169, 62,214,161,157, 63, 15,110,219, 13, 64,158,176, 1, 0, 0, 5,
+ 0, 0, 0, 0, 63, 34,158,220, 63, 10, 23,175, 63, 46, 88,238, 63, 2,223,146, 63, 56, 80,242, 63, 6,244, 44, 63, 39, 44,109,
+ 63, 19,221,107, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 64, 62,156,208, 61, 63, 7, 16,204, 62,177, 87,173, 63, 3, 9,102,
+ 62,201,109,124, 63, 10,121, 72, 62,192, 26,156, 63, 20,139, 31, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 16, 63, 46, 88,238,
+ 63, 2,223,146, 63, 48,134, 62, 62,249,107, 37, 63, 54,173,195, 62,252,106,239, 63, 56, 80,242, 63, 6,244, 44, 13, 64,158,176,
+ 1, 0, 0, 5, 0, 0, 0,128, 62,160, 36,202, 62,252, 51, 94, 62,172,229,172, 62,249,127,116, 62,177, 87,173, 63, 3, 9,102,
+ 62,156,208, 61, 63, 7, 16,204, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0,128, 63, 48,134, 62, 62,249,107, 37, 63, 50,229, 38,
+ 62,226, 32,169, 63, 53, 88,154, 62,221,146,240, 63, 54,173,195, 62,252,106,239, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 64,
+ 62,162,172,128, 62,221,169, 17, 62,168, 39,196, 62,226, 11,206, 62,172,229,172, 62,249,127,116, 62,160, 36,202, 62,252, 51, 94,
+ 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 16, 63, 50,229, 38, 62,226, 32,169, 63, 43, 57, 87, 62,206, 58,222, 63, 49,117,240,
+ 62,198,138,164, 63, 53, 88,154, 62,221,146,240, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0,128, 62,172,137,147, 62,198, 19,148,
+ 62,184,207,130, 62,206, 27, 42, 62,168, 39,196, 62,226, 11,206, 62,162,172,128, 62,221,169, 17, 13, 64,158,176, 1, 0, 0, 5,
+ 0, 0, 0,128, 63, 43, 57, 87, 62,206, 58,222, 63, 37, 94, 91, 62,187,120,107, 63, 41,160,156, 62,182,175, 56, 63, 49,117,240,
+ 62,198,138,164, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 62,188,212,202, 62,182,163,245, 62,197, 28,156, 62,187,130,166,
+ 62,184,207,130, 62,206, 27, 42, 62,172,137,147, 62,198, 19,148, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63, 48,252,165,
+ 62, 85, 33,133, 63, 48, 54,112, 62, 96, 19, 20, 63, 46, 36,172, 62,129, 7,208, 63, 42, 17,240, 62, 97, 84,129, 13, 64,158,176,
+ 1, 0, 0, 5, 0, 0, 0, 0, 62,181, 71, 76, 62,131,200,204, 62,175,121,117, 62,106,185,183, 62,172, 24,217, 62, 92,237, 21,
+ 62,187, 81,138, 62,103, 40, 59, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63, 48, 89,204, 62, 4,194,134, 63, 48,252,165,
+ 62, 85, 33,133, 63, 42, 17,240, 62, 97, 84,129, 63, 37,125,160, 62, 46,211, 50, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 16,
+ 62,187, 81,138, 62,103, 40, 59, 62,172, 24,217, 62, 92,237, 21, 62,172,197, 94, 62, 4,200,109, 62,195,121, 25, 62, 48,253, 46,
+ 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 64, 63, 20, 44, 11, 61,163, 26, 20, 63, 48, 89,204, 62, 4,194,134, 63, 37,125,160,
+ 62, 46,211, 50, 63, 24, 92, 40, 62, 21,184,214, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 32, 62,195,121, 25, 62, 48,253, 46,
+ 62,172,197, 94, 62, 4,200,109, 62,230,122,140, 61,161,248,202, 62,222, 13,216, 62, 22,116,222, 13, 64,158,176, 1, 0, 0, 5,
+ 0, 0, 0, 32, 63, 16,254,174, 62, 34, 45, 94, 63, 3,199,219, 61,229, 28, 18, 63, 20, 44, 11, 61,163, 26, 20, 63, 24, 92, 40,
+ 62, 21,184,214, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 16, 62,230,122,140, 61,161,248,202, 63, 3,199,219, 61,229, 28, 18,
+ 62,236,248,140, 62, 34,202,182, 62,222, 13,216, 62, 22,116,222, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 64, 63, 21,152,184,
+ 62, 53, 47,182, 63, 16,254,174, 62, 34, 45, 94, 63, 24, 92, 40, 62, 21,184,214, 63, 25, 52,209, 62, 51,140, 76, 13, 64,158,176,
+ 1, 0, 0, 5, 0, 0, 0, 32, 62,222, 13,216, 62, 22,116,222, 62,236,248,140, 62, 34,202,182, 62,227,207,183, 62, 54, 75,250,
+ 62,220,137,229, 62, 52,228,185, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 32, 63, 22, 57,137, 62, 61, 93, 81, 63, 21,152,184,
+ 62, 53, 47,182, 63, 25, 52,209, 62, 51,140, 76, 63, 30,166,193, 62, 73,168,114, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0,
+ 62,220,137,229, 62, 52,228,185, 62,227,207,183, 62, 54, 75,250, 62,226,152,122, 62, 62,166,190, 62,209,198, 54, 62, 75,240, 18,
+ 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63, 22,249,250, 62, 88,251,160, 63, 22, 57,137, 62, 61, 93, 81, 63, 30,166,193,
+ 62, 73,168,114, 63, 36, 0, 75, 62,116, 47,229, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 62,209,198, 54, 62, 75,240, 18,
+ 62,226,152,122, 62, 62,166,190, 62,225, 83, 90, 62, 90,153, 21, 62,199,231,211, 62,119,237,216, 13, 64,158,176, 1, 0, 0, 5,
+ 0, 0, 0, 0, 63, 30,166,193, 62, 73,168,114, 63, 37,125,160, 62, 46,211, 50, 63, 42, 17,240, 62, 97, 84,129, 63, 36, 0, 75,
+ 62,116, 47,229, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 62,187, 81,138, 62,103, 40, 59, 62,195,121, 25, 62, 48,253, 46,
+ 62,209,198, 54, 62, 75,240, 18, 62,199,231,211, 62,119,237,216, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63, 30,166,193,
+ 62, 73,168,114, 63, 25, 52,209, 62, 51,140, 76, 63, 24, 92, 40, 62, 21,184,214, 63, 37,125,160, 62, 46,211, 50, 13, 64,158,176,
+ 1, 0, 0, 5, 0, 0, 0, 0, 62,222, 13,216, 62, 22,116,222, 62,220,137,229, 62, 52,228,185, 62,209,198, 54, 62, 75,240, 18,
+ 62,195,121, 25, 62, 48,253, 46, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63, 36,163, 37, 62,140,168,191, 63, 36, 0, 75,
+ 62,116, 47,229, 63, 42, 17,240, 62, 97, 84,129, 63, 46, 36,172, 62,129, 7,208, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0,
+ 62,187, 81,138, 62,103, 40, 59, 62,199,231,211, 62,119,237,216, 62,199, 64, 6, 62,142, 6,105, 62,181, 71, 76, 62,131,200,204,
+ 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63, 25, 81, 20, 62,132, 56, 17, 63, 22,249,250, 62, 88,251,160, 63, 36, 0, 75,
+ 62,116, 47,229, 63, 36,163, 37, 62,140,168,191, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 62,199,231,211, 62,119,237,216,
+ 62,225, 83, 90, 62, 90,153, 21, 62,221, 42, 54, 62,133, 25,209, 62,199, 64, 6, 62,142, 6,105, 13, 64,158,176, 1, 0, 0, 5,
+ 0, 0, 0, 0, 63, 27, 46,208, 62,148, 35,149, 63, 36, 60, 91, 62,150,222,221, 63, 33,170,222, 62,158,126, 74, 63, 27,177, 36,
+ 62,156,151,158, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 62,204,234, 72, 62,159, 63, 56, 62,199,245,150, 62,152, 15, 85,
+ 62,217,166,238, 62,148,221,229, 62,216,160, 0, 62,157, 44,127, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63, 25, 81, 20,
+ 62,132, 56, 17, 63, 36,163, 37, 62,140,168,191, 63, 36, 60, 91, 62,150,222,221, 63, 27, 46,208, 62,148, 35,149, 13, 64,158,176,
+ 1, 0, 0, 5, 0, 0, 0, 0, 62,199,245,150, 62,152, 15, 85, 62,199, 64, 6, 62,142, 6,105, 62,221, 42, 54, 62,133, 25,209,
+ 62,217,166,238, 62,148,221,229, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63, 27,239,111, 62,166, 77,159, 63, 27,177, 36,
+ 62,156,151,158, 63, 33,170,222, 62,158,126, 74, 63, 31,212,102, 62,164,192,144, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0,
+ 62,204,234, 72, 62,159, 63, 56, 62,216,160, 0, 62,157, 44,127, 62,216, 21,115, 62,166,177, 14, 62,208,119, 17, 62,165, 65,201,
+ 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63, 27,239,111, 62,166, 77,159, 63, 31,212,102, 62,164,192,144, 63, 41,160,156,
+ 62,182,175, 56, 63, 37, 94, 91, 62,187,120,107, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 62,188,212,202, 62,182,163,245,
+ 62,208,119, 17, 62,165, 65,201, 62,216, 21,115, 62,166,177, 14, 62,197, 28,156, 62,187,130,166, 13, 64,158,176, 1, 0, 0, 5,
+ 0, 0, 0, 0, 62,194,119,104, 63, 82,189,164, 62,212, 73, 23, 63, 90,239,152, 62,205,192,100, 63, 97,238, 46, 62,185, 56, 38,
+ 63, 91,154, 72, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0,240, 62,141, 94,228, 63,100,234, 86, 62,150, 66, 84, 63, 94,154,114,
+ 62,173, 86,230, 63, 98, 66, 79, 62,162,143, 20, 63,106,173, 44, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0,240, 63, 87,122, 72,
+ 62, 62, 8,216, 63, 84,106,202, 62,113,185,137, 63, 72, 77,226, 62,121, 21,204, 63, 71,225,158, 62, 68, 34,113, 13, 64,158,176,
+ 1, 0, 0, 5, 0, 0, 0, 16, 62,137, 32,132, 62,121, 65,181, 62,107,179,168, 62,103,127,139, 62,114,147,210, 62, 61,116,212,
+ 62,142,125,248, 62, 80, 4, 30, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 64, 63, 71,225,158, 62, 68, 34,113, 63, 72, 77,226,
+ 62,121, 21,204, 63, 51, 7, 8, 62,130,186, 5, 63, 49,166, 3, 62, 96, 57,232, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0,
+ 62,172,197, 18, 62,133,112, 41, 62,137, 32,132, 62,121, 65,181, 62,142,125,248, 62, 80, 4, 30, 62,174,228,121, 62,109, 79, 52,
+ 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63, 49,166, 3, 62, 96, 57,232, 63, 51, 7, 8, 62,130,186, 5, 63, 46, 36,172,
+ 62,129, 7,208, 63, 48, 54,112, 62, 96, 19, 20, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 62,181, 71, 76, 62,131,200,204,
+ 62,172,197, 18, 62,133,112, 41, 62,174,228,121, 62,109, 79, 52, 62,175,121,117, 62,106,185,183, 13, 64,158,176, 1, 0, 0, 5,
+ 0, 0, 0, 0, 63, 36,163, 37, 62,140,168,191, 63, 46, 36,172, 62,129, 7,208, 63, 51, 7, 8, 62,130,186, 5, 63, 36, 60, 91,
+ 62,150,222,221, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 62,172,197, 18, 62,133,112, 41, 62,181, 71, 76, 62,131,200,204,
+ 62,199, 64, 6, 62,142, 6,105, 62,199,245,150, 62,152, 15, 85, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63, 53, 88,154,
+ 62,221,146,240, 63, 49,117,240, 62,198,138,164, 63, 69, 19,224, 62,190, 68, 24, 63, 74, 64, 53, 62,224, 31,171, 13, 64,158,176,
+ 1, 0, 0, 5, 0, 0, 0, 16, 62,134, 78,250, 62,186,213,148, 62,172,137,147, 62,198, 19,148, 62,162,172,128, 62,221,169, 17,
+ 62,114,112,184, 62,220,169,248, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 64, 62,214, 74, 54, 63, 70, 55, 20, 62,233,130, 48,
+ 63, 83, 69,188, 62,212, 73, 23, 63, 90,239,152, 62,194,119,104, 63, 82,189,164, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0,240,
+ 62,150, 66, 84, 63, 94,154,114, 62,153, 1, 66, 63, 81,149,245, 62,185, 56, 38, 63, 83,110,102, 62,173, 86,230, 63, 98, 66, 79,
+ 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0,240, 63, 66,242,106, 63, 25, 94,202, 63, 70,100,190, 63, 15,234,222, 63, 77,189, 90,
+ 63, 17, 88,233, 63, 74,206, 8, 63, 27,118, 88, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 62, 96, 32, 22, 63, 16, 60, 66,
+ 62,125, 87, 86, 63, 15, 5,174, 62,132,187, 78, 63, 24, 44,180, 62,108, 79, 26, 63, 26, 1,124, 13, 64,158,176, 1, 0, 0, 5,
+ 0, 0, 0, 0, 63, 74,206, 8, 63, 27,118, 88, 63, 77,189, 90, 63, 17, 88,233, 63, 85,139, 72, 63, 19, 51,103, 63, 85,119,220,
+ 63, 31, 71, 77, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 62, 64,199, 64, 63, 18, 40, 26, 62, 96, 32, 22, 63, 16, 60, 66,
+ 62,108, 79, 26, 63, 26, 1,124, 62, 67,191, 44, 63, 30, 89, 90, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63, 85,119,220,
+ 63, 31, 71, 77, 63, 85,139, 72, 63, 19, 51,103, 63,100,213,228, 63, 20,156, 72, 63, 96, 82, 18, 63, 34,133,128, 13, 64,158,176,
+ 1, 0, 0, 5, 0, 0, 0,128, 62, 1, 50,226, 63, 20, 68,184, 62, 64,199, 64, 63, 18, 40, 26, 62, 67,191, 44, 63, 30, 89, 90,
+ 62, 24,204,194, 63, 34,186, 32, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0,128, 63, 56, 80,242, 63, 6,244, 44, 63, 54,173,195,
+ 62,252,106,239, 63, 60,205,115, 62,253,150,213, 63, 64, 14,166, 63, 4, 80, 81, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 16,
+ 62,147, 85,190, 62,252,176, 91, 62,160, 36,202, 62,252, 51, 94, 62,156,208, 61, 63, 7, 16,204, 62,140,121,160, 63, 3,197, 74,
+ 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 64, 63, 64, 14,166, 63, 4, 80, 81, 63, 60,205,115, 62,253,150,213, 63, 73,103, 68,
+ 63, 0,248,233, 63, 75, 12,248, 63, 8,206, 64, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 62,115, 59,144, 62,255,143,102,
+ 62,147, 85,190, 62,252,176, 91, 62,140,121,160, 63, 3,197, 74, 62,107,135, 78, 63, 7,182, 88, 13, 64,158,176, 1, 0, 0, 5,
+ 0, 0, 0, 0, 63, 75, 12,248, 63, 8,206, 64, 63, 73,103, 68, 63, 0,248,233, 63, 82,151,239, 63, 3,223, 86, 63, 82,227,181,
+ 63, 11,102,189, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 62, 77, 17, 82, 63, 2, 98,162, 62,115, 59,144, 62,255,143,102,
+ 62,107,135, 78, 63, 7,182, 88, 62, 75, 98,202, 63, 10, 43,108, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63, 82,227,181,
+ 63, 11,102,189, 63, 82,151,239, 63, 3,223, 86, 63, 91,224, 92, 63, 5,144,239, 63, 90,148,161, 63, 13, 95,146, 13, 64,158,176,
+ 1, 0, 0, 5, 0, 0, 0, 0, 62, 38, 40,178, 63, 3,230, 14, 62, 77, 17, 82, 63, 2, 98,162, 62, 75, 98,202, 63, 10, 43,108,
+ 62, 43,162, 10, 63, 12, 50, 8, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63,103, 89,120, 63, 2, 76,105, 63,103,179,170,
+ 63, 12,105,142, 63, 90,148,161, 63, 13, 95,146, 63, 91,224, 92, 63, 5,144,239, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0,
+ 62, 43,162, 10, 63, 12, 50, 8, 61,231, 41,168, 63, 11, 83,158, 61,234,128,116, 63, 0, 39,200, 62, 38, 40,178, 63, 3,230, 14,
+ 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63,100,213,228, 63, 20,156, 72, 63, 85,139, 72, 63, 19, 51,103, 63, 90,148,161,
+ 63, 13, 95,146, 63,103,179,170, 63, 12,105,142, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 62, 43,162, 10, 63, 12, 50, 8,
+ 62, 64,199, 64, 63, 18, 40, 26, 62, 1, 50,226, 63, 20, 68,184, 61,231, 41,168, 63, 11, 83,158, 13, 64,158,176, 1, 0, 0, 5,
+ 0, 0, 0, 0, 63, 85,139, 72, 63, 19, 51,103, 63, 77,189, 90, 63, 17, 88,233, 63, 82,227,181, 63, 11,102,189, 63, 90,148,161,
+ 63, 13, 95,146, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 62, 75, 98,202, 63, 10, 43,108, 62, 96, 32, 22, 63, 16, 60, 66,
+ 62, 64,199, 64, 63, 18, 40, 26, 62, 43,162, 10, 63, 12, 50, 8, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63, 77,189, 90,
+ 63, 17, 88,233, 63, 70,100,190, 63, 15,234,222, 63, 75, 12,248, 63, 8,206, 64, 63, 82,227,181, 63, 11,102,189, 13, 64,158,176,
+ 1, 0, 0, 5, 0, 0, 0, 0, 62,107,135, 78, 63, 7,182, 88, 62,125, 87, 86, 63, 15, 5,174, 62, 96, 32, 22, 63, 16, 60, 66,
+ 62, 75, 98,202, 63, 10, 43,108, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63, 70,100,190, 63, 15,234,222, 63, 60,235, 82,
+ 63, 12, 12, 27, 63, 64, 14,166, 63, 4, 80, 81, 63, 75, 12,248, 63, 8,206, 64, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0,
+ 62,140,121,160, 63, 3,197, 74, 62,145,230, 78, 63, 11,225,148, 62,125, 87, 86, 63, 15, 5,174, 62,107,135, 78, 63, 7,182, 88,
+ 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63, 57,118, 31, 63, 12, 79,230, 63, 56, 80,242, 63, 6,244, 44, 63, 64, 14,166,
+ 63, 4, 80, 81, 63, 60,235, 82, 63, 12, 12, 27, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 32, 62,140,121,160, 63, 3,197, 74,
+ 62,156,208, 61, 63, 7, 16,204, 62,152,199, 0, 63, 12,133, 13, 62,145,230, 78, 63, 11,225,148, 13, 64,158,176, 1, 0, 0, 5,
+ 0, 0, 0, 32, 63, 57,240,195, 63, 23,138, 10, 63, 60,235, 82, 63, 12, 12, 27, 63, 70,100,190, 63, 15,234,222, 63, 66,242,106,
+ 63, 25, 94,202, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 62,125, 87, 86, 63, 15, 5,174, 62,145,230, 78, 63, 11,225,148,
+ 62,150, 7,247, 63, 23, 12, 96, 62,132,187, 78, 63, 24, 44,180, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63, 13,120,216,
+ 63, 23, 81,160, 63, 23,233, 94, 63, 16, 60,186, 63, 28, 56,220, 63, 14,250, 66, 63, 39, 44,109, 63, 19,221,107, 13, 64,158,176,
+ 1, 0, 0, 5, 0, 0, 0, 0, 62,214,161,157, 63, 15,110,219, 62,223,130,109, 63, 16,165,118, 62,245, 27, 64, 63, 23,166,100,
+ 62,192, 26,156, 63, 20,139, 31, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63, 56, 29,176, 63, 20,206, 88, 63, 57,118, 31,
+ 63, 12, 79,230, 63, 60,235, 82, 63, 12, 12, 27, 63, 57,240,195, 63, 23,138, 10, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0,
+ 62,145,230, 78, 63, 11,225,148, 62,152,199, 0, 63, 12,133, 13, 62,153,211,239, 63, 20,159,220, 62,150, 7,247, 63, 23, 12, 96,
+ 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63, 54,148, 48, 63, 22,206,220, 63, 56, 29,176, 63, 20,206, 88, 63, 57,240,195,
+ 63, 23,138, 10, 63,128, 0, 0, 63,128, 0, 0, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 62,150, 7,247, 63, 23, 12, 96,
+ 62,153,211,239, 63, 20,159,220, 62,156,106,108, 63, 22,154,146, 63,128, 0, 0, 63,128, 0, 0, 13, 64,158,176, 1, 0, 0, 5,
+ 0, 0, 0, 0, 63, 54,173,195, 62,252,106,239, 63, 53, 88,154, 62,221,146,240, 63, 74, 64, 53, 62,224, 31,171, 63, 60,205,115,
+ 62,253,150,213, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 32, 62,114,112,184, 62,220,169,248, 62,162,172,128, 62,221,169, 17,
+ 62,160, 36,202, 62,252, 51, 94, 62,147, 85,190, 62,252,176, 91, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 32, 63, 74, 64, 53,
+ 62,224, 31,171, 63, 81,106,217, 62,232,214, 14, 63, 73,103, 68, 63, 0,248,233, 63, 60,205,115, 62,253,150,213, 13, 64,158,176,
+ 1, 0, 0, 5, 0, 0, 0, 0, 62,115, 59,144, 62,255,143,102, 62, 84, 93, 88, 62,228,105, 50, 62,114,112,184, 62,220,169,248,
+ 62,147, 85,190, 62,252,176, 91, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63, 81,106,217, 62,232,214, 14, 63, 93,154,106,
+ 62,233, 26,226, 63, 82,151,239, 63, 3,223, 86, 63, 73,103, 68, 63, 0,248,233, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0,
+ 62, 77, 17, 82, 63, 2, 98,162, 62, 33, 1,128, 62,226,210, 70, 62, 84, 93, 88, 62,228,105, 50, 62,115, 59,144, 62,255,143,102,
+ 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63,103, 89,120, 63, 2, 76,105, 63, 91,224, 92, 63, 5,144,239, 63, 82,151,239,
+ 63, 3,223, 86, 63, 93,154,106, 62,233, 26,226, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 62, 77, 17, 82, 63, 2, 98,162,
+ 62, 38, 40,178, 63, 3,230, 14, 61,234,128,116, 63, 0, 39,200, 62, 33, 1,128, 62,226,210, 70, 13, 64,158,176, 1, 0, 0, 5,
+ 0, 0, 0, 0, 63, 51, 7, 8, 62,130,186, 5, 63, 72, 77,226, 62,121, 21,204, 63, 73,254,154, 62,140, 82,178, 63, 56,188, 90,
+ 62,159,207,103, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 62,130,249,249, 62,137,175,246, 62,137, 32,132, 62,121, 65,181,
+ 62,172,197, 18, 62,133,112, 41, 62,161, 5,192, 62,159, 40,228, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63, 69, 19,224,
+ 62,190, 68, 24, 63, 56,188, 90, 62,159,207,103, 63, 73,254,154, 62,140, 82,178, 63, 77,217,216, 62,157,228, 7, 13, 64,158,176,
+ 1, 0, 0, 5, 0, 0, 0,128, 62,130,249,249, 62,137,175,246, 62,161, 5,192, 62,159, 40,228, 62,134, 78,250, 62,186,213,148,
+ 62,111,118,154, 62,152,108,120, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0,128, 63, 49,117,240, 62,198,138,164, 63, 41,160,156,
+ 62,182,175, 56, 63, 56,188, 90, 62,159,207,103, 63, 69, 19,224, 62,190, 68, 24, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0,
+ 62,161, 5,192, 62,159, 40,228, 62,188,212,202, 62,182,163,245, 62,172,137,147, 62,198, 19,148, 62,134, 78,250, 62,186,213,148,
+ 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63, 41,160,156, 62,182,175, 56, 63, 33,170,222, 62,158,126, 74, 63, 36, 60, 91,
+ 62,150,222,221, 63, 56,188, 90, 62,159,207,103, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 62,199,245,150, 62,152, 15, 85,
+ 62,204,234, 72, 62,159, 63, 56, 62,188,212,202, 62,182,163,245, 62,161, 5,192, 62,159, 40,228, 13, 64,158,176, 1, 0, 0, 5,
+ 0, 0, 0, 0, 63, 36, 60, 91, 62,150,222,221, 63, 51, 7, 8, 62,130,186, 5, 63, 56,188, 90, 62,159,207,103, 63,128, 0, 0,
+ 63,128, 0, 0, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 62,161, 5,192, 62,159, 40,228, 62,172,197, 18, 62,133,112, 41,
+ 62,199,245,150, 62,152, 15, 85, 63,128, 0, 0, 63,128, 0, 0, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63, 41,160,156,
+ 62,182,175, 56, 63, 31,212,102, 62,164,192,144, 63, 33,170,222, 62,158,126, 74, 63,128, 0, 0, 63,128, 0, 0, 13, 64,158,176,
+ 1, 0, 0, 5, 0, 0, 0, 0, 62,204,234, 72, 62,159, 63, 56, 62,208,119, 17, 62,165, 65,201, 62,188,212,202, 62,182,163,245,
+ 63,128, 0, 0, 63,128, 0, 0, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 62,245, 44,226, 63, 96,140,129, 62,227,135, 42,
+ 63,101, 2, 58, 62,219,168,136, 63, 95,236, 30, 62,238, 30,135, 63, 90, 41,200, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0,240,
+ 62,137,240,216, 63, 93,226, 90, 62,122,103,110, 63, 92,255,236, 62,120, 84, 74, 63, 83, 32,104, 62,138,193, 32, 63, 83, 3, 16,
+ 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0,240, 62,233,130, 48, 63, 83, 69,188, 62,238, 30,135, 63, 90, 41,200, 62,219,168,136,
+ 63, 95,236, 30, 62,212, 73, 23, 63, 90,239,152, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0,240, 62,137,240,216, 63, 93,226, 90,
+ 62,138,193, 32, 63, 83, 3, 16, 62,153, 1, 66, 63, 81,149,245, 62,150, 66, 84, 63, 94,154,114, 13, 64,158,176, 1, 0, 0, 5,
+ 0, 0, 0,240, 63, 77,217,216, 62,157,228, 7, 63, 73,254,154, 62,140, 82,178, 63, 90, 61, 33, 62,124,207,195, 63, 90,225,160,
+ 62,137,121,110, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 16, 62, 81,207, 98, 62,110, 1,109, 62,130,249,249, 62,137,175,246,
+ 62,111,118,154, 62,152,108,120, 62, 74,125,166, 62,130, 30,252, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 64, 63, 72, 77,226,
+ 62,121, 21,204, 63, 84,106,202, 62,113,185,137, 63, 90, 61, 33, 62,124,207,195, 63, 73,254,154, 62,140, 82,178, 13, 64,158,176,
+ 1, 0, 0, 5, 0, 0, 0, 0, 62, 81,207, 98, 62,110, 1,109, 62,107,179,168, 62,103,127,139, 62,137, 32,132, 62,121, 65,181,
+ 62,130,249,249, 62,137,175,246, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 62,212, 73, 23, 63, 90,239,152, 62,219,168,136,
+ 63, 95,236, 30, 62,205,192,100, 63, 97,238, 46, 63,128, 0, 0, 63,128, 0, 0, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0,112,
+ 62,141, 94,228, 63,100,234, 86, 62,137,240,216, 63, 93,226, 90, 62,150, 66, 84, 63, 94,154,114, 63,128, 0, 0, 63,128, 0, 0,
+ 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0,112, 63,109,178, 31, 62,228, 68,224, 63,102,178, 46, 62,232,184,100, 63,101,251,100,
+ 62,227,198,238, 63,107,173, 94, 62,225,130,168, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 61,249,209, 68, 62,219,134, 70,
+ 61,242,216,120, 62,225, 40,124, 61,177, 27, 28, 62,219,240, 42, 61,196,131, 76, 62,216, 97,196, 13, 64,158,176, 1, 0, 0, 5,
+ 0, 0, 0, 0, 63,109,178, 31, 62,228, 68,224, 63,107,173, 94, 62,225,130,168, 63,114,102,144, 62,220, 23,198, 63,116, 76, 41,
+ 62,222,153,139, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 61,120,163, 56, 62,208,252, 58, 61,196,131, 76, 62,216, 97,196,
+ 61,177, 27, 28, 62,219,240, 42, 61, 73,183,128, 62,213,108, 84, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63,116, 76, 41,
+ 62,222,153,139, 63,114,102,144, 62,220, 23,198, 63,117, 87, 84, 62,211,255,221, 63,119,115,183, 62,215, 49,140, 13, 64,158,176,
+ 1, 0, 0, 5, 0, 0, 0, 0, 61, 55, 29,144, 62,194,183,207, 61,120,163, 56, 62,208,252, 58, 61, 73,183,128, 62,213,108, 84,
+ 60,231,111,224, 62,198,142,100, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63,119,115,183, 62,215, 49,140, 63,117, 87, 84,
+ 62,211,255,221, 63,118, 20,150, 62,196,110, 60, 63,122, 12, 49, 62,197, 8,246, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0,
+ 61,103,197, 96, 62,170,206, 15, 61, 55, 29,144, 62,194,183,207, 60,231,111,224, 62,198,142,100, 61, 16, 54,240, 62,167, 4,120,
+ 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63,122, 12, 49, 62,197, 8,246, 63,118, 20,150, 62,196,110, 60, 63,108,155, 17,
+ 62,178,201,130, 63,110,190, 84, 62,172, 77,223, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 61,246,252,148, 62,160,116,164,
+ 61,103,197, 96, 62,170,206, 15, 61, 16, 54,240, 62,167, 4,120, 61,246, 66, 8, 62,152,161, 28, 13, 64,158,176, 1, 0, 0, 5,
+ 0, 0, 0, 0, 63,110,190, 84, 62,172, 77,223, 63,108,155, 17, 62,178,201,130, 63, 92,180, 21, 62,173, 95,202, 63, 90, 5,151,
+ 62,167, 61,138, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 62, 54,216,144, 62,163, 76, 35, 61,246,252,148, 62,160,116,164,
+ 61,246, 66, 8, 62,152,161, 28, 62, 66,251,194, 62,158,102,163, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63,108,155, 17,
+ 62,178,201,130, 63,109,132,198, 62,186,157,182, 63, 97, 32, 68, 62,178, 12,192, 63, 92,180, 21, 62,173, 95,202, 13, 64,158,176,
+ 1, 0, 0, 5, 0, 0, 0, 0, 62, 36,185, 48, 62,166, 7, 16, 61,221, 91, 40, 62,167,194, 4, 61,246,252,148, 62,160,116,164,
+ 62, 54,216,144, 62,163, 76, 35, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63,118, 20,150, 62,196,110, 60, 63,115,225, 84,
+ 62,198, 85,208, 63,109,132,198, 62,186,157,182, 63,108,155, 17, 62,178,201,130, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0,
+ 61,221, 91, 40, 62,167,194, 4, 61,134,221,244, 62,175,164,121, 61,103,197, 96, 62,170,206, 15, 61,246,252,148, 62,160,116,164,
+ 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63,117, 87, 84, 62,211,255,221, 63,116, 48,222, 62,209, 8,169, 63,115,225, 84,
+ 62,198, 85,208, 63,118, 20,150, 62,196,110, 60, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 61,134,221,244, 62,175,164,121,
+ 61, 93,108,160, 62,190,207, 17, 61, 55, 29,144, 62,194,183,207, 61,103,197, 96, 62,170,206, 15, 13, 64,158,176, 1, 0, 0, 5,
+ 0, 0, 0, 0, 63,114,102,144, 62,220, 23,198, 63,113,151,174, 62,214,229, 26, 63,116, 48,222, 62,209, 8,169, 63,117, 87, 84,
+ 62,211,255,221, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 61, 93,108,160, 62,190,207, 17, 61,135,155, 12, 62,201, 39,166,
+ 61,120,163, 56, 62,208,252, 58, 61, 55, 29,144, 62,194,183,207, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63,107,173, 94,
+ 62,225,130,168, 63,107,239,228, 62,218, 59, 62, 63,113,151,174, 62,214,229, 26, 63,114,102,144, 62,220, 23,198, 13, 64,158,176,
+ 1, 0, 0, 5, 0, 0, 0, 0, 61,135,155, 12, 62,201, 39,166, 61,195, 47,128, 62,207, 11, 6, 61,196,131, 76, 62,216, 97,196,
+ 61,120,163, 56, 62,208,252, 58, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63,107,173, 94, 62,225,130,168, 63,101,251,100,
+ 62,227,198,238, 63,102,205, 71, 62,219, 94,132, 63,107,239,228, 62,218, 59, 62, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0,
+ 61,244,157,192, 62,209,137,157, 61,249,209, 68, 62,219,134, 70, 61,196,131, 76, 62,216, 97,196, 61,195, 47,128, 62,207, 11, 6,
+ 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63, 69, 19,224, 62,190, 68, 24, 63, 77,217,216, 62,157,228, 7, 63, 85, 35,236,
+ 62,181,201,164, 63, 78, 92, 56, 62,188,114,177, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 32, 62, 80, 91,122, 62,174, 18, 72,
+ 62,111,118,154, 62,152,108,120, 62,134, 78,250, 62,186,213,148, 62,104,163,162, 62,182,180,150, 13, 64,158,176, 1, 0, 0, 5,
+ 0, 0, 0, 32, 63, 77,217,216, 62,157,228, 7, 63, 90, 5,151, 62,167, 61,138, 63, 92,180, 21, 62,173, 95,202, 63, 85, 35,236,
+ 62,181,201,164, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 16, 62, 54,216,144, 62,163, 76, 35, 62, 66,251,194, 62,158,102,163,
+ 62,111,118,154, 62,152,108,120, 62, 80, 91,122, 62,174, 18, 72, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 64, 63, 74, 64, 53,
+ 62,224, 31,171, 63, 69, 19,224, 62,190, 68, 24, 63, 78, 92, 56, 62,188,114,177, 63, 81,106,217, 62,232,214, 14, 13, 64,158,176,
+ 1, 0, 0, 5, 0, 0, 0, 0, 62,104,163,162, 62,182,180,150, 62,134, 78,250, 62,186,213,148, 62,114,112,184, 62,220,169,248,
+ 62, 84, 93, 88, 62,228,105, 50, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63, 93,154,106, 62,233, 26,226, 63, 94,229,196,
+ 62,224,195,128, 63,101,251,100, 62,227,198,238, 63,102,178, 46, 62,232,184,100, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0,
+ 61,249,209, 68, 62,219,134, 70, 62, 28,187,108, 62,217, 86, 48, 62, 33, 1,128, 62,226,210, 70, 61,242,216,120, 62,225, 40,124,
+ 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63, 92,180, 21, 62,173, 95,202, 63, 97, 32, 68, 62,178, 12,192, 63, 94,215, 9,
+ 62,186, 54, 4, 63, 85, 35,236, 62,181,201,164, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 62, 41,122, 60, 62,175, 58, 16,
+ 62, 36,185, 48, 62,166, 7, 16, 62, 54,216,144, 62,163, 76, 35, 62, 80, 91,122, 62,174, 18, 72, 13, 64,158,176, 1, 0, 0, 5,
+ 0, 0, 0, 0, 63, 95, 78,230, 62,189,233, 4, 63, 86,188, 32, 62,190, 62, 44, 63, 85, 35,236, 62,181,201,164, 63, 94,215, 9,
+ 62,186, 54, 4, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 62, 80, 91,122, 62,174, 18, 72, 62, 71,118, 78, 62,182, 49, 27,
+ 62, 37,225, 52, 62,179, 12, 40, 62, 41,122, 60, 62,175, 58, 16, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63, 92,166, 70,
+ 62,197,166, 0, 63, 86,188, 32, 62,190, 62, 44, 63, 95, 78,230, 62,189,233, 4, 63, 95, 13,226, 62,194,152, 37, 13, 64,158,176,
+ 1, 0, 0, 5, 0, 0, 0, 0, 62, 37,225, 52, 62,179, 12, 40, 62, 71,118, 78, 62,182, 49, 27, 62, 45,143,142, 62,188, 37,237,
+ 62, 36,230,106, 62,184, 27,222, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63, 95, 90,248, 62,207,122,100, 63, 90,249,108,
+ 62,212,199, 58, 63, 86,188, 32, 62,190, 62, 44, 63, 92,166, 70, 62,197,166, 0, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0,
+ 62, 71,118, 78, 62,182, 49, 27, 62, 48, 56,110, 62,205, 43,230, 62, 30,250,174, 62,198, 12, 26, 62, 45,143,142, 62,188, 37,237,
+ 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63, 94,229,196, 62,224,195,128, 63, 90,249,108, 62,212,199, 58, 63, 95, 90,248,
+ 62,207,122,100, 63, 98,104, 92, 62,215,136,197, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 62, 30,250,174, 62,198, 12, 26,
+ 62, 48, 56,110, 62,205, 43,230, 62, 28,187,108, 62,217, 86, 48, 62, 15, 59,212, 62,206, 50,224, 13, 64,158,176, 1, 0, 0, 5,
+ 0, 0, 0, 0, 63,101,251,100, 62,227,198,238, 63, 94,229,196, 62,224,195,128, 63, 98,104, 92, 62,215,136,197, 63,102,205, 71,
+ 62,219, 94,132, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 62, 15, 59,212, 62,206, 50,224, 62, 28,187,108, 62,217, 86, 48,
+ 61,249,209, 68, 62,219,134, 70, 61,244,157,192, 62,209,137,157, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63, 81,106,217,
+ 62,232,214, 14, 63, 90,249,108, 62,212,199, 58, 63, 94,229,196, 62,224,195,128, 63, 93,154,106, 62,233, 26,226, 13, 64,158,176,
+ 1, 0, 0, 5, 0, 0, 0, 0, 62, 28,187,108, 62,217, 86, 48, 62, 48, 56,110, 62,205, 43,230, 62, 84, 93, 88, 62,228,105, 50,
+ 62, 33, 1,128, 62,226,210, 70, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63, 81,106,217, 62,232,214, 14, 63, 78, 92, 56,
+ 62,188,114,177, 63, 86,188, 32, 62,190, 62, 44, 63, 90,249,108, 62,212,199, 58, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0,
+ 62, 71,118, 78, 62,182, 49, 27, 62,104,163,162, 62,182,180,150, 62, 84, 93, 88, 62,228,105, 50, 62, 48, 56,110, 62,205, 43,230,
+ 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63, 78, 92, 56, 62,188,114,177, 63, 85, 35,236, 62,181,201,164, 63, 86,188, 32,
+ 62,190, 62, 44, 63,128, 0, 0, 63,128, 0, 0, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 62, 71,118, 78, 62,182, 49, 27,
+ 62, 80, 91,122, 62,174, 18, 72, 62,104,163,162, 62,182,180,150, 63,128, 0, 0, 63,128, 0, 0, 13, 64,158,176, 1, 0, 0, 5,
+ 0, 0, 0, 0, 63,102,205, 71, 62,219, 94,132, 63, 98,104, 92, 62,215,136,197, 63,100,109,182, 62,210,255,149, 63,104, 86, 54,
+ 62,214,241,209, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 62, 7,107,160, 62,200,103, 34, 62, 15, 59,212, 62,206, 50,224,
+ 61,244,157,192, 62,209,137,157, 61,232, 2, 8, 62,203,214, 20, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63, 98,104, 92,
+ 62,215,136,197, 63, 95, 90,248, 62,207,122,100, 63, 97,206,112, 62,204,202, 10, 63,100,109,182, 62,210,255,149, 13, 64,158,176,
+ 1, 0, 0, 5, 0, 0, 0, 0, 62, 21, 68, 64, 62,194, 55,107, 62, 30,250,174, 62,198, 12, 26, 62, 15, 59,212, 62,206, 50,224,
+ 62, 7,107,160, 62,200,103, 34, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63, 95, 90,248, 62,207,122,100, 63, 92,166, 70,
+ 62,197,166, 0, 63, 94,241, 82, 62,198,103, 40, 63, 97,206,112, 62,204,202, 10, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0,
+ 62, 35,225, 20, 62,188, 50, 39, 62, 45,143,142, 62,188, 37,237, 62, 30,250,174, 62,198, 12, 26, 62, 21, 68, 64, 62,194, 55,107,
+ 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63, 92,166, 70, 62,197,166, 0, 63, 95, 13,226, 62,194,152, 37, 63, 97, 1,118,
+ 62,195,226, 47, 63, 94,241, 82, 62,198,103, 40, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 62, 28, 43, 12, 62,184,177,186,
+ 62, 36,230,106, 62,184, 27,222, 62, 45,143,142, 62,188, 37,237, 62, 35,225, 20, 62,188, 50, 39, 13, 64,158,176, 1, 0, 0, 5,
+ 0, 0, 0, 0, 63, 95, 13,226, 62,194,152, 37, 63, 95, 78,230, 62,189,233, 4, 63, 97,113, 51, 62,189,151, 92, 63, 97, 1,118,
+ 62,195,226, 47, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 62, 29, 67,104, 62,177,199, 58, 62, 37,225, 52, 62,179, 12, 40,
+ 62, 36,230,106, 62,184, 27,222, 62, 28, 43, 12, 62,184,177,186, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63, 95, 78,230,
+ 62,189,233, 4, 63, 94,215, 9, 62,186, 54, 4, 63, 96, 69, 96, 62,187,133,152, 63, 97,113, 51, 62,189,151, 92, 13, 64,158,176,
+ 1, 0, 0, 5, 0, 0, 0, 0, 62, 35, 14,140, 62,176, 19, 33, 62, 41,122, 60, 62,175, 58, 16, 62, 37,225, 52, 62,179, 12, 40,
+ 62, 29, 67,104, 62,177,199, 58, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63, 94,215, 9, 62,186, 54, 4, 63, 97, 32, 68,
+ 62,178, 12,192, 63, 98, 91,112, 62,182,128,149, 63, 96, 69, 96, 62,187,133,152, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0,
+ 62, 29,107,228, 62,169,230, 95, 62, 36,185, 48, 62,166, 7, 16, 62, 41,122, 60, 62,175, 58, 16, 62, 35, 14,140, 62,176, 19, 33,
+ 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63,107,239,228, 62,218, 59, 62, 63,102,205, 71, 62,219, 94,132, 63,104, 86, 54,
+ 62,214,241,209, 63,109, 27, 34, 62,214,254,155, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 61,232, 2, 8, 62,203,214, 20,
+ 61,244,157,192, 62,209,137,157, 61,195, 47,128, 62,207, 11, 6, 61,184,174, 36, 62,202,130,216, 13, 64,158,176, 1, 0, 0, 5,
+ 0, 0, 0, 0, 63,113,151,174, 62,214,229, 26, 63,107,239,228, 62,218, 59, 62, 63,109, 27, 34, 62,214,254,155, 63,113,134, 69,
+ 62,212, 82,156, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 61,184,174, 36, 62,202,130,216, 61,195, 47,128, 62,207, 11, 6,
+ 61,135,155, 12, 62,201, 39,166, 61,138,114, 60, 62,197, 61, 28, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63,116, 48,222,
+ 62,209, 8,169, 63,113,151,174, 62,214,229, 26, 63,113,134, 69, 62,212, 82,156, 63,114,143, 42, 62,207,168, 24, 13, 64,158,176,
+ 1, 0, 0, 5, 0, 0, 0, 0, 61,138,114, 60, 62,197, 61, 28, 61,135,155, 12, 62,201, 39,166, 61, 93,108,160, 62,190,207, 17,
+ 61,132, 85,184, 62,189,211, 22, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63,115,225, 84, 62,198, 85,208, 63,116, 48,222,
+ 62,209, 8,169, 63,114,143, 42, 62,207,168, 24, 63,114,125,203, 62,200,114, 96, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0,
+ 61,132, 85,184, 62,189,211, 22, 61, 93,108,160, 62,190,207, 17, 61,134,221,244, 62,175,164,121, 61,145,152, 16, 62,179,214, 84,
+ 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63,109,132,198, 62,186,157,182, 63,115,225, 84, 62,198, 85,208, 63,114,125,203,
+ 62,200,114, 96, 63,109,192,177, 62,190,240,152, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 61,145,152, 16, 62,179,214, 84,
+ 61,134,221,244, 62,175,164,121, 61,221, 91, 40, 62,167,194, 4, 61,208,226, 64, 62,172, 58,232, 13, 64,158,176, 1, 0, 0, 5,
+ 0, 0, 0, 0, 63, 97, 32, 68, 62,178, 12,192, 63,109,132,198, 62,186,157,182, 63,109,192,177, 62,190,240,152, 63, 98, 91,112,
+ 62,182,128,149, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 61,208,226, 64, 62,172, 58,232, 61,221, 91, 40, 62,167,194, 4,
+ 62, 36,185, 48, 62,166, 7, 16, 62, 29,107,228, 62,169,230, 95, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63, 97, 1,118,
+ 62,195,226, 47, 63, 97,113, 51, 62,189,151, 92, 63,102,139,215, 62,193,109, 15, 63,100, 47, 54, 62,198,115,186, 13, 64,158,176,
+ 1, 0, 0, 5, 0, 0, 0, 0, 62, 5,169, 92, 62,179,115,168, 62, 29, 67,104, 62,177,199, 58, 62, 28, 43, 12, 62,184,177,186,
+ 62, 13, 97, 50, 62,186, 42, 50, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63,100, 47, 54, 62,198,115,186, 63,102,139,215,
+ 62,193,109, 15, 63,105,241,174, 62,200, 8,204, 63,103,233, 71, 62,204, 42,178, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0,
+ 61,229,171,228, 62,185, 42, 41, 62, 5,169, 92, 62,179,115,168, 62, 13, 97, 50, 62,186, 42, 50, 61,243,248, 92, 62,191, 22, 96,
+ 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63,103,233, 71, 62,204, 42,178, 63,105,241,174, 62,200, 8,204, 63,108, 37, 51,
+ 62,205, 3,249, 63,106,212, 56, 62,208,238, 96, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 61,202, 99,120, 62,190, 49,192,
+ 61,229,171,228, 62,185, 42, 41, 61,243,248, 92, 62,191, 22, 96, 61,211,209,160, 62,195,159,108, 13, 64,158,176, 1, 0, 0, 5,
+ 0, 0, 0, 0, 63,106,212, 56, 62,208,238, 96, 63,108, 37, 51, 62,205, 3,249, 63,110, 73, 56, 62,206,119,186, 63,109,191, 46,
+ 62,210, 64, 92, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 61,179,234,244, 62,190,219,240, 61,202, 99,120, 62,190, 49,192,
+ 61,211,209,160, 62,195,159,108, 61,181,129,196, 62,196, 14,204, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63,109, 27, 34,
+ 62,214,254,155, 63,104, 86, 54, 62,214,241,209, 63,106,212, 56, 62,208,238, 96, 63,109,191, 46, 62,210, 64, 92, 13, 64,158,176,
+ 1, 0, 0, 5, 0, 0, 0, 0, 61,211,209,160, 62,195,159,108, 61,232, 2, 8, 62,203,214, 20, 61,184,174, 36, 62,202,130,216,
+ 61,181,129,196, 62,196, 14,204, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63,100,109,182, 62,210,255,149, 63,103,233, 71,
+ 62,204, 42,178, 63,106,212, 56, 62,208,238, 96, 63,104, 86, 54, 62,214,241,209, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0,
+ 61,211,209,160, 62,195,159,108, 61,243,248, 92, 62,191, 22, 96, 62, 7,107,160, 62,200,103, 34, 61,232, 2, 8, 62,203,214, 20,
+ 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63,100,109,182, 62,210,255,149, 63, 97,206,112, 62,204,202, 10, 63,100, 47, 54,
+ 62,198,115,186, 63,103,233, 71, 62,204, 42,178, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 62, 13, 97, 50, 62,186, 42, 50,
+ 62, 21, 68, 64, 62,194, 55,107, 62, 7,107,160, 62,200,103, 34, 61,243,248, 92, 62,191, 22, 96, 13, 64,158,176, 1, 0, 0, 5,
+ 0, 0, 0, 0, 63, 97, 1,118, 62,195,226, 47, 63,100, 47, 54, 62,198,115,186, 63, 97,206,112, 62,204,202, 10, 63, 94,241, 82,
+ 62,198,103, 40, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 62, 21, 68, 64, 62,194, 55,107, 62, 13, 97, 50, 62,186, 42, 50,
+ 62, 28, 43, 12, 62,184,177,186, 62, 35,225, 20, 62,188, 50, 39, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63, 96, 69, 96,
+ 62,187,133,152, 63, 98, 91,112, 62,182,128,149, 63,102,139,215, 62,193,109, 15, 63, 97,113, 51, 62,189,151, 92, 13, 64,158,176,
+ 1, 0, 0, 5, 0, 0, 0, 0, 62, 5,169, 92, 62,179,115,168, 62, 29,107,228, 62,169,230, 95, 62, 35, 14,140, 62,176, 19, 33,
+ 62, 29, 67,104, 62,177,199, 58, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63,109,192,177, 62,190,240,152, 63,105,241,174,
+ 62,200, 8,204, 63,102,139,215, 62,193,109, 15, 63, 98, 91,112, 62,182,128,149, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0,
+ 62, 5,169, 92, 62,179,115,168, 61,229,171,228, 62,185, 42, 41, 61,208,226, 64, 62,172, 58,232, 62, 29,107,228, 62,169,230, 95,
+ 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63,114,125,203, 62,200,114, 96, 63,108, 37, 51, 62,205, 3,249, 63,105,241,174,
+ 62,200, 8,204, 63,109,192,177, 62,190,240,152, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 61,229,171,228, 62,185, 42, 41,
+ 61,202, 99,120, 62,190, 49,192, 61,145,152, 16, 62,179,214, 84, 61,208,226, 64, 62,172, 58,232, 13, 64,158,176, 1, 0, 0, 5,
+ 0, 0, 0, 0, 63,114,143, 42, 62,207,168, 24, 63,110, 73, 56, 62,206,119,186, 63,108, 37, 51, 62,205, 3,249, 63,114,125,203,
+ 62,200,114, 96, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 61,202, 99,120, 62,190, 49,192, 61,179,234,244, 62,190,219,240,
+ 61,132, 85,184, 62,189,211, 22, 61,145,152, 16, 62,179,214, 84, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63,113,134, 69,
+ 62,212, 82,156, 63,109,191, 46, 62,210, 64, 92, 63,110, 73, 56, 62,206,119,186, 63,114,143, 42, 62,207,168, 24, 13, 64,158,176,
+ 1, 0, 0, 5, 0, 0, 0, 0, 61,179,234,244, 62,190,219,240, 61,181,129,196, 62,196, 14,204, 61,138,114, 60, 62,197, 61, 28,
+ 61,132, 85,184, 62,189,211, 22, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63,109, 27, 34, 62,214,254,155, 63,109,191, 46,
+ 62,210, 64, 92, 63,113,134, 69, 62,212, 82,156, 63,128, 0, 0, 63,128, 0, 0, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0,
+ 61,138,114, 60, 62,197, 61, 28, 61,181,129,196, 62,196, 14,204, 61,184,174, 36, 62,202,130,216, 63,128, 0, 0, 63,128, 0, 0,
+ 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63,110,190, 84, 62,172, 77,223, 63, 90, 5,151, 62,167, 61,138, 63, 96, 25, 22,
+ 62,149,248,246, 63,122,176,162, 62,161,215,145, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0,128, 62, 54,234, 64, 62,140,219,146,
+ 62, 66,251,194, 62,158,102,163, 61,246, 66, 8, 62,152,161, 28, 61,189,241,172, 62,132,107, 13, 13, 64,158,176, 1, 0, 0, 5,
+ 0, 0, 0, 0, 63,122, 12, 49, 62,197, 8,246, 63,110,190, 84, 62,172, 77,223, 63,122,176,162, 62,161,215,145, 63,126,255,188,
+ 62,198,248,115, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 64, 61,189,241,172, 62,132,107, 13, 61,246, 66, 8, 62,152,161, 28,
+ 61, 16, 54,240, 62,167, 4,120, 58,163, 8, 0, 62,162, 69, 39, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0,128, 63,119,115,183,
+ 62,215, 49,140, 63,122, 12, 49, 62,197, 8,246, 63,126,255,188, 62,198,248,115, 63,122, 6, 47, 62,216,157,248, 13, 64,158,176,
+ 1, 0, 0, 5, 0, 0, 0, 0, 58,163, 8, 0, 62,162, 69, 39, 61, 16, 54,240, 62,167, 4,120, 60,231,111,224, 62,198,142,100,
+ 60, 14,248,224, 62,198,141, 70, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 16, 63,116, 76, 41, 62,222,153,139, 63,119,115,183,
+ 62,215, 49,140, 63,122, 6, 47, 62,216,157,248, 63,119, 98,134, 62,225, 37,204, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0,
+ 60, 14,248,224, 62,198,141, 70, 60,231,111,224, 62,198,142,100, 61, 73,183,128, 62,213,108, 84, 60,229,210, 80, 62,218,239, 32,
+ 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 63,109,178, 31, 62,228, 68,224, 63,116, 76, 41, 62,222,153,139, 63,119, 98,134,
+ 62,225, 37,204, 63,115,185, 46, 62,234,157, 90, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0,128, 60,229,210, 80, 62,218,239, 32,
+ 61, 73,183,128, 62,213,108, 84, 61,177, 27, 28, 62,219,240, 42, 61,122,103, 56, 62,230, 10, 30, 13, 64,158,176, 1, 0, 0, 5,
+ 0, 0, 0,128, 63,102,178, 46, 62,232,184,100, 63,109,178, 31, 62,228, 68,224, 63,115,185, 46, 62,234,157, 90, 63,106,134,244,
+ 62,246, 64,234, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 64, 61,122,103, 56, 62,230, 10, 30, 61,177, 27, 28, 62,219,240, 42,
+ 61,242,216,120, 62,225, 40,124, 61,209,222,212, 62,240,123,238, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 16, 63, 5,188,235,
+ 63, 98, 74,252, 62,248,111,200, 63,112,105,197, 62,231, 49, 0, 63,107,190,118, 62,255, 57,150, 63, 96, 14, 53, 13, 64,158,176,
+ 1, 0, 0, 5, 0, 0, 0,240, 62, 95, 99, 80, 63, 94,194,149, 62, 62, 8, 58, 63, 89,154, 10, 62, 92, 24, 40, 63, 74, 82, 14,
+ 62,112, 11,112, 63, 78,133,157, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0,240, 63, 5,188,235, 63, 98, 74,252, 63, 12,139,136,
+ 63,101,233,138, 63, 6, 45,116, 63,113,245,112, 62,248,111,200, 63,112,105,197, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0,240,
+ 62, 36,219, 68, 63, 81,186,249, 62, 65,254, 28, 63, 70, 55, 20, 62, 92, 24, 40, 63, 74, 82, 14, 62, 62, 8, 58, 63, 89,154, 10,
+ 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0,240, 63, 12,139,136, 63,101,233,138, 63, 12,130, 5, 63,108,216,149, 63, 6, 45,116,
+ 63,113,245,112, 63,128, 0, 0, 63,128, 0, 0, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0,112, 62, 36,219, 68, 63, 81,186,249,
+ 62, 42, 1, 76, 63, 73,178, 39, 62, 65,254, 28, 63, 70, 55, 20, 63,128, 0, 0, 63,128, 0, 0, 13, 64,158,176, 1, 0, 0, 5,
+ 0, 0, 0,112, 63,103, 89,120, 63, 2, 76,105, 63, 93,154,106, 62,233, 26,226, 63,102,178, 46, 62,232,184,100, 63,106,134,244,
+ 62,246, 64,234, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 61,242,216,120, 62,225, 40,124, 62, 33, 1,128, 62,226,210, 70,
+ 61,234,128,116, 63, 0, 39,200, 61,209,222,212, 62,240,123,238, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 0, 62,245, 44,226,
+ 63, 96,140,129, 62,255, 57,150, 63, 96, 14, 53, 62,231, 49, 0, 63,107,190,118, 62,227,135, 42, 63,101, 2, 58, 13, 64,158,176,
+ 1, 0, 0, 5, 0, 0, 0,240, 62, 95, 99, 80, 63, 94,194,149, 62,112, 11,112, 63, 78,133,157, 62,120, 84, 74, 63, 83, 32,104,
+ 62,122,103,110, 63, 92,255,236, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0,240, 63, 77,217,216, 62,157,228, 7, 63, 90,225,160,
+ 62,137,121,110, 63, 96, 25, 22, 62,149,248,246, 63, 90, 5,151, 62,167, 61,138, 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 16,
+ 62, 54,234, 64, 62,140,219,146, 62, 74,125,166, 62,130, 30,252, 62,111,118,154, 62,152,108,120, 62, 66,251,194, 62,158,102,163,
+ 13, 64,158,176, 1, 0, 0, 5, 0, 0, 0, 64, 68, 65, 84, 65, 0, 0, 31, 64, 7,160,168, 32, 0, 0, 0, 59, 0, 0, 7,208,
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
@@ -6547,890 +6732,938 @@ char datatoc_preview_blend[]= {
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-255,255,255,255, 77, 69, 0, 0, 12, 1, 0, 0, 80,153,166, 2, 51, 0, 0, 0, 1, 0, 0, 0,240, 0, 18, 3,136,161,165, 2,
- 0, 0, 0, 0, 0, 0, 0, 0, 77, 69, 80,108, 97,110,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-144,171,128, 2, 32, 5,167, 2, 40,176,131, 2, 0, 0, 0, 0,224, 11,131, 2, 72, 6,155, 2, 0, 0, 0, 0, 80,102, 8, 3,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216,144,150, 2, 1, 0, 0, 0, 5, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0,
- 96, 76,150, 2, 1, 0, 0, 0, 5, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0,192,166,132, 2, 3, 0, 0, 0, 5, 0, 0, 0,
- 80, 0, 0, 0, 0, 0, 0, 0,188, 0, 0, 0, 53, 1, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
-213,204, 76, 63,255,204, 76, 63, 0, 0,104,182, 30, 0,128, 63,140, 0,128, 63,214,255,127, 63, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 4, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 4, 0, 0, 0,144,171,128, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 44, 1, 0, 0,216,144,150, 2, 21, 1, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 0, 0, 77, 69, 0, 0, 1, 24, 13, 65,109,208, 0, 0, 0, 52, 0, 0, 0, 1, 13, 65,115, 96, 13, 65,104, 64, 0, 0, 0, 0,
+ 0, 0, 0, 0, 77, 69, 80,108, 97,110,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 65,111, 16,
+ 7,160,234, 32, 7,160,242, 32, 0, 0, 0, 0, 7,160,200, 32, 7,160,218, 32, 0, 0, 0, 0, 7,161, 0, 32, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 13, 65,111, 64, 0, 0, 0, 1, 0, 0, 0, 5, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 65,112,160, 0, 0, 0, 1, 0, 0, 0, 5, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 13, 65,114, 0, 0, 0, 0, 3,
+ 0, 0, 0, 5, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,188, 0, 0, 1, 53, 0, 0, 0, 76, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 63, 76,204,213, 63, 76,204,255,182,104, 0, 0, 63,128, 0, 30, 63,128, 0,140, 63,127,255,214,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 4, 0, 0, 0, 0, 0, 1, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 4, 13, 65,111, 16, 0, 0, 0, 0, 0, 0, 0, 1,
+ 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 1, 44, 13, 65,111, 64, 0, 0, 1, 35, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,160,200, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,224, 11,131, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 17,160, 7,160,200, 32, 0, 0, 0, 58, 0, 0, 0,188, 63,230,102,133, 63,179, 51,208,
+ 63,127,255,146,165,127, 0, 0, 90,129, 2,255, 0, 0, 0, 0, 63,230,102,133, 63, 25,154,206, 63,127,255,146,165,127, 0, 0,
+ 90,129, 2,255, 0, 0, 0, 0, 63,179, 51, 81, 63,179, 51,210, 63,127,255,148, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,
+ 63,128, 0, 28, 63,179, 51,212, 63,127,255,152, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 63, 25,153,207, 63,179, 51,214,
+ 63,127,255,154, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 62, 76,205,152, 63,179, 51,216, 63,127,255,156, 0, 0, 0, 0,
+127,255, 2,255, 0, 0, 0, 0, 63,179, 51, 80, 63,128, 0,158, 63,127,255,148, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,
+ 63,128, 0, 27, 63,128, 0,160, 63,127,255,150, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 63, 25,153,204, 63,128, 0,162,
+ 63,127,255,154, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 62, 76,205,140, 63,128, 0,163, 63,127,255,156, 0, 0, 0, 0,
+127,255, 2,255, 0, 0, 0, 0, 63,179, 51, 80, 63, 25,154,209, 63,127,255,148, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,
+ 63,128, 0, 27, 63, 25,154,213, 63,127,255,150, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 63, 25,153,204, 63, 25,154,217,
+ 63,127,255,154, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 62, 76,205,140, 63, 25,154,221, 63,127,255,156, 0, 0, 0, 0,
+127,255, 2,255, 0, 0, 0, 0, 63,179, 51, 80, 62, 76,209,160, 63,127,255,148, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,
+ 63,128, 0, 27, 62, 76,209,176, 63,127,255,150, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 63, 25,153,204, 62, 76,209,188,
+ 63,127,255,152, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 62, 76,205,140, 62, 76,209,204, 63,127,255,154, 0, 0, 0, 0,
+127,255, 2,255, 0, 0, 0, 0, 62, 76,205,140, 63,230,103, 8, 63,127,255,148, 0, 0,165,127, 90,129, 0,255, 0, 0, 0, 0,
+ 63, 25,153,204, 63,230,103, 10, 63,127,255,146, 0, 0,165,127, 90,129, 0,255, 0, 0, 0, 0, 63,128, 0, 27, 63,230,103, 10,
+ 63,127,255,142, 0, 0,165,127, 90,129, 0,255, 0, 0, 0, 0, 63,179, 51, 80, 63,230,103, 12, 63,127,255,140, 0, 0,165,127,
+ 90,129, 0,255, 0, 0, 0, 0,190, 76,205,152, 63,230,103, 12, 63,127,255,140, 0, 0,165,127, 90,129, 0,255, 0, 0, 0, 0,
+190, 76,205,152, 62, 76,209,160, 63,127,255,148, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,190, 76,205,152, 63, 25,154,209,
+ 63,127,255,148, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,190, 76,205,152, 63,128, 0,158, 63,127,255,148, 0, 0, 0, 0,
+127,255, 2,255, 0, 0, 0, 0,190, 76,205,144, 63,179, 51,210, 63,127,255,148, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,
+ 63,230,102,131, 63,230,103, 7, 63,127,255,148, 0, 0,165,127, 90,129, 0,255, 0, 0, 0, 0, 63,230,102,131, 63,128, 0,160,
+ 63,127,255,142,165,127, 0, 0, 90,129, 2,255, 0, 0, 0, 0, 63,230,102,127, 62, 76,208, 28, 63,127,255,148,165,127, 0, 0,
+ 90,129, 2,255, 0, 0, 0, 0,190, 76,205,146,190, 76,208, 72, 63,127,255,148, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,
+ 62, 76,205,150,190, 76,208, 24, 63,127,255,156, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 63, 25,153,207,190, 76,208, 40,
+ 63,127,255,154, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 63,128, 0, 28,190, 76,208, 56, 63,127,255,152, 0, 0, 0, 0,
+127,255, 2,255, 0, 0, 0, 0, 63,179, 51, 81,190, 76,208, 72, 63,127,255,148, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,
+ 63,230,102,133,190, 76,208, 88, 63,127,255,146, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 63,230,102,133,190, 76,208, 88,
+191,128, 0, 4, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 63,179, 51, 81,190, 76,208, 72,191,128, 0, 3, 0, 0, 0, 0,
+127,255, 2,255, 0, 0, 0, 0, 63,128, 0, 28,190, 76,208, 56,191,128, 0, 1, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,
+ 63, 25,153,207,190, 76,208, 40,191,128, 0, 0, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 62, 76,205,150,190, 76,208, 24,
+191,127,255,254, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,190, 76,205,146,190, 76,208, 72,191,128, 0, 3, 0, 0, 0, 0,
+127,255, 2,255, 0, 0, 0, 0, 63,230,102,127, 62, 76,208, 28,191, 25,153,155,128, 1, 0, 0, 0, 0, 2,255, 0, 0, 0, 0,
+ 63,230,102,131,190, 76,201,136,191, 25,153,159,128, 1, 0, 0, 0, 0, 2,255, 0, 0, 0, 0, 63,230,102,127, 62, 76,208, 28,
+190, 76,204,193,128, 1, 0, 0, 0, 0, 2,255, 0, 0, 0, 0, 63,230,102,131,190, 76,201,136,190, 76,204,209,128, 1, 0, 0,
+ 0, 0, 2,255, 0, 0, 0, 0, 63,230,102,127, 62, 76,208, 28, 62, 76,204,219,128, 1, 0, 0, 0, 0, 2,255, 0, 0, 0, 0,
+ 63,230,102,131,190, 76,201,136, 62, 76,204,203,128, 1, 0, 0, 0, 0, 2,255, 0, 0, 0, 0, 63,230,102,127, 62, 76,208, 28,
+ 63, 25,153,159,128, 1, 0, 0, 0, 0, 2,255, 0, 0, 0, 0, 63,230,102,131,190, 76,201,136, 63, 25,153,155,128, 1, 0, 0,
+ 0, 0, 2,255, 0, 0, 0, 0, 63,230,102,127, 62, 76,208, 28,191,128, 0, 3,165,127, 0, 0, 90,129, 2,255, 0, 0, 0, 0,
+ 63,230,102,131, 63,128, 0,160,191,128, 0, 6,165,127, 0, 0, 90,129, 2,255, 0, 0, 0, 0, 63,230,102,131, 63,230,103, 7,
+191,128, 0, 3, 0, 0,165,127, 90,129, 0,255, 0, 0, 0, 0, 63,230,102,135, 63, 25,154,207, 63, 25,153,151,128, 1, 0, 0,
+ 0, 0, 2,255, 0, 0, 0, 0, 63,230,102,131, 63,128, 0,156, 63, 25,153,151,128, 1, 0, 0, 0, 0, 2,255, 0, 0, 0, 0,
+ 63,230,102,131, 63,179, 51,212, 63, 25,153,155,128, 1, 0, 0, 0, 0, 2,255, 0, 0, 0, 0, 63,230,102,131, 63,230,103, 7,
+ 63, 25,153,159,165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0, 63,230,102,135, 63, 25,154,207, 62, 76,204,171,128, 1, 0, 0,
+ 0, 0, 2,255, 0, 0, 0, 0, 63,230,102,131, 63,128, 0,160, 62, 76,204,187,128, 1, 0, 0, 0, 0, 2,255, 0, 0, 0, 0,
+ 63,230,102,131, 63,179, 51,212, 62, 76,204,203,128, 1, 0, 0, 0, 0, 2,255, 0, 0, 0, 0, 63,230,102,131, 63,230,103, 7,
+ 62, 76,204,219,165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0, 63,230,102,135, 63, 25,154,207,190, 76,204,241,128, 1, 0, 0,
+ 0, 0, 2,255, 0, 0, 0, 0, 63,230,102,131, 63,128, 0,160,190, 76,204,225,128, 1, 0, 0, 0, 0, 2,255, 0, 0, 0, 0,
+ 63,230,102,131, 63,179, 51,212,190, 76,204,209,128, 1, 0, 0, 0, 0, 2,255, 0, 0, 0, 0, 63,230,102,131, 63,230,103, 7,
+190, 76,204,193,165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0, 63,230,102,135, 63, 25,154,207,191, 25,153,167,128, 1, 0, 0,
+ 0, 0, 2,255, 0, 0, 0, 0, 63,230,102,131, 63,128, 0,160,191, 25,153,163,128, 1, 0, 0, 0, 0, 2,255, 0, 0, 0, 0,
+ 63,230,102,131, 63,179, 51,212,191, 25,153,159,128, 1, 0, 0, 0, 0, 2,255, 0, 0, 0, 0, 63,230,102,131, 63,230,103, 7,
+191, 25,153,155,165,127,165,127, 0, 0, 2,255, 0, 0, 0, 0,190, 76,205,144, 63,179, 51,210,191,128, 0, 3, 0, 0, 0, 0,
+127,255, 2,255, 0, 0, 0, 0,190, 76,205,152, 63,128, 0,158,191,128, 0, 3, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,
+190, 76,205,152, 63, 25,154,209,191,128, 0, 3, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,190, 76,205,152, 62, 76,209,160,
+191,128, 0, 3, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,190, 76,205,152, 63,230,103, 12,191, 25,153,168, 0, 0,128, 1,
+ 0, 0, 2,255, 0, 0, 0, 0,190, 76,205,152, 63,230,103, 12,190, 76,204,244, 0, 0,128, 1, 0, 0, 2,255, 0, 0, 0, 0,
+190, 76,205,152, 63,230,103, 12, 62, 76,204,168, 0, 0,128, 1, 0, 0, 2,255, 0, 0, 0, 0,190, 76,205,144, 63,230,103, 12,
+ 63, 25,153,150, 0, 0,128, 1, 0, 0, 2,255, 0, 0, 0, 0,190, 76,205,152, 63,230,103, 12,191,128, 0, 7, 0, 0,165,127,
+ 90,129, 0,255, 0, 0, 0, 0, 63,179, 51, 80, 63,230,103, 12,191,128, 0, 7, 0, 0,165,127, 90,129, 0,255, 0, 0, 0, 0,
+ 63,128, 0, 27, 63,230,103, 10,191,128, 0, 6, 0, 0,165,127, 90,129, 0,255, 0, 0, 0, 0, 63, 25,153,204, 63,230,103, 10,
+191,128, 0, 4, 0, 0,165,127, 90,129, 0,255, 0, 0, 0, 0, 62, 76,205,140, 63,230,103, 8,191,128, 0, 3, 0, 0,165,127,
+ 90,129, 0,255, 0, 0, 0, 0, 63,179, 51, 81, 63,230,103, 12, 63, 25,153,150, 0, 0,128, 1, 0, 0, 2,255, 0, 0, 0, 0,
+ 63,128, 0, 28, 63,230,103, 10, 63, 25,153,150, 0, 0,128, 1, 0, 0, 2,255, 0, 0, 0, 0, 63, 25,153,207, 63,230,103, 10,
+ 63, 25,153,154, 0, 0,128, 1, 0, 0, 2,255, 0, 0, 0, 0, 62, 76,205,152, 63,230,103, 8, 63, 25,153,158, 0, 0,128, 1,
+ 0, 0, 2,255, 0, 0, 0, 0, 63,179, 51, 80, 63,230,103, 12, 62, 76,204,168, 0, 0,128, 1, 0, 0, 2,255, 0, 0, 0, 0,
+ 63,128, 0, 27, 63,230,103, 10, 62, 76,204,184, 0, 0,128, 1, 0, 0, 2,255, 0, 0, 0, 0, 63, 25,153,204, 63,230,103, 10,
+ 62, 76,204,200, 0, 0,128, 1, 0, 0, 2,255, 0, 0, 0, 0, 62, 76,205,140, 63,230,103, 8, 62, 76,204,216, 0, 0,128, 1,
+ 0, 0, 2,255, 0, 0, 0, 0, 63,179, 51, 80, 63,230,103, 12,190, 76,204,244, 0, 0,128, 1, 0, 0, 2,255, 0, 0, 0, 0,
+ 63,128, 0, 27, 63,230,103, 10,190, 76,204,228, 0, 0,128, 1, 0, 0, 2,255, 0, 0, 0, 0, 63, 25,153,204, 63,230,103, 10,
+190, 76,204,212, 0, 0,128, 1, 0, 0, 2,255, 0, 0, 0, 0, 62, 76,205,140, 63,230,103, 8,190, 76,204,196, 0, 0,128, 1,
+ 0, 0, 2,255, 0, 0, 0, 0, 63,179, 51, 80, 63,230,103, 12,191, 25,153,168, 0, 0,128, 1, 0, 0, 2,255, 0, 0, 0, 0,
+ 63,128, 0, 27, 63,230,103, 10,191, 25,153,164, 0, 0,128, 1, 0, 0, 2,255, 0, 0, 0, 0, 63, 25,153,204, 63,230,103, 10,
+191, 25,153,160, 0, 0,128, 1, 0, 0, 2,255, 0, 0, 0, 0, 62, 76,205,140, 63,230,103, 8,191, 25,153,156, 0, 0,128, 1,
+ 0, 0, 2,255, 0, 0, 0, 0, 62, 76,205,140, 62, 76,209,204,191,127,255,255, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,
+ 63, 25,153,204, 62, 76,209,188,191,128, 0, 1, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 63,128, 0, 27, 62, 76,209,176,
+191,128, 0, 2, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 63,179, 51, 80, 62, 76,209,160,191,128, 0, 3, 0, 0, 0, 0,
+127,255, 2,255, 0, 0, 0, 0, 62, 76,205,140, 63, 25,154,221,191,127,255,254, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,
+ 63, 25,153,204, 63, 25,154,217,191,128, 0, 0, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 63,128, 0, 27, 63, 25,154,213,
+191,128, 0, 2, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 63,179, 51, 80, 63, 25,154,209,191,128, 0, 3, 0, 0, 0, 0,
+127,255, 2,255, 0, 0, 0, 0, 62, 76,205,140, 63,128, 0,163,191,127,255,254, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,
+ 63, 25,153,204, 63,128, 0,162,191,128, 0, 0, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 63,128, 0, 27, 63,128, 0,160,
+191,128, 0, 2, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 63,179, 51, 80, 63,128, 0,158,191,128, 0, 3, 0, 0, 0, 0,
+127,255, 2,255, 0, 0, 0, 0, 62, 76,205,152, 63,179, 51,216,191,127,255,254, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,
+ 63, 25,153,207, 63,179, 51,214,191,128, 0, 0, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 63,128, 0, 28, 63,179, 51,212,
+191,128, 0, 1, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 63,179, 51, 81, 63,179, 51,210,191,128, 0, 3, 0, 0, 0, 0,
+127,255, 2,255, 0, 0, 0, 0, 63,230,102,133, 63, 25,154,206,191,128, 0, 4,165,127, 0, 0, 90,129, 2,255, 0, 0, 0, 0,
+ 63,230,102,133, 63,179, 51,208,191,128, 0, 4,165,127, 0, 0, 90,129, 2,255, 0, 0, 0, 0,190, 76,205,128, 62, 76,201,116,
+191,128, 0, 5,127,255, 0, 0, 0, 0, 16,255, 0, 0, 0, 0,190, 76,205,136, 63,127,255, 48,191,128, 0, 5,127,255, 0, 0,
+ 0, 0, 16,255, 0, 0, 0, 0,190, 76,205,112,190, 76,208, 64,191, 25,153,156,127,255, 0, 0, 0, 0, 16,255, 0, 0, 0, 0,
+190, 76,205,112, 62, 76,201, 84,191, 25,153,160,127,255, 0, 0, 0, 0, 18,255, 0, 0, 0, 0,190, 76,205,120, 63, 25,152,190,
+191, 25,153,164,127,255, 0, 0, 0, 0, 18,255, 0, 0, 0, 0,190, 76,205,152, 63,127,255, 46,191, 25,153,168,127,255, 0, 0,
+ 0, 0, 18,255, 0, 0, 0, 0,190, 76,205,112,190, 76,208, 64,190, 76,204,195,127,255, 0, 0, 0, 0, 16,255, 0, 0, 0, 0,
+190, 76,205,112, 62, 76,201, 84,190, 76,204,211,127,255, 0, 0, 0, 0, 18,255, 0, 0, 0, 0,190, 76,205,120, 63, 25,152,190,
+190, 76,204,227,127,255, 0, 0, 0, 0, 18,255, 0, 0, 0, 0,190, 76,205,152, 63,127,255, 46,190, 76,204,243,127,255, 0, 0,
+ 0, 0, 18,255, 0, 0, 0, 0,190, 76,205,112,190, 76,208, 64, 62, 76,204,221,127,255, 0, 0, 0, 0, 16,255, 0, 0, 0, 0,
+190, 76,205,112, 62, 76,201, 84, 62, 76,204,205,127,255, 0, 0, 0, 0, 18,255, 0, 0, 0, 0,190, 76,205,120, 63, 25,152,190,
+ 62, 76,204,189,127,255, 0, 0, 0, 0, 18,255, 0, 0, 0, 0,190, 76,205,152, 63,127,255, 46, 62, 76,204,173,127,255, 0, 0,
+ 0, 0, 18,255, 0, 0, 0, 0,190, 76,205,112,190, 76,208, 64, 63, 25,153,160,127,255, 0, 0, 0, 0, 16,255, 0, 0, 0, 0,
+190, 76,205,112, 62, 76,201, 84, 63, 25,153,156,127,255, 0, 0, 0, 0, 18,255, 0, 0, 0, 0,190, 76,205,120, 63, 25,152,198,
+ 63, 25,153,152,127,255, 0, 0, 0, 0, 18,255, 0, 0, 0, 0,190, 76,205,152, 63,127,255, 46, 63, 25,153,152,127,255, 0, 0,
+ 0, 0, 18,255, 0, 0, 0, 0,190, 76,205,112,190, 76,208, 64,191,128, 0, 4,231, 94,231, 94,132,215, 16,255, 0, 0, 0, 0,
+190, 76,205,120, 63, 25,152,190,191,128, 0, 7,127,255, 0, 0, 0, 0, 16,255, 0, 0, 0, 0,190, 76,205, 96, 63,179, 50,251,
+191,128, 0, 4,127,255, 0, 0, 0, 0, 16,255, 0, 0, 0, 0,190, 76,205,128, 63,230,102, 48, 63, 25,153,156,127,255, 0, 0,
+ 0, 0, 18,255, 0, 0, 0, 0,190, 76,205, 96, 63,179, 50,251, 63, 25,153,160,127,255, 0, 0, 0, 0, 18,255, 0, 0, 0, 0,
+190, 76,205,128, 63,230,102, 48, 62, 76,204,205,127,255, 0, 0, 0, 0, 18,255, 0, 0, 0, 0,190, 76,205, 96, 63,179, 50,251,
+ 62, 76,204,221,127,255, 0, 0, 0, 0, 18,255, 0, 0, 0, 0,190, 76,205,128, 63,230,102, 48,190, 76,204,211,127,255, 0, 0,
+ 0, 0, 18,255, 0, 0, 0, 0,190, 76,205, 96, 63,179, 50,251,190, 76,204,195,127,255, 0, 0, 0, 0, 18,255, 0, 0, 0, 0,
+190, 76,205,128, 63,230,102, 48,191, 25,153,160,127,255, 0, 0, 0, 0, 18,255, 0, 0, 0, 0,190, 76,205, 96, 63,179, 50,251,
+191, 25,153,156,127,255, 0, 0, 0, 0, 18,255, 0, 0, 0, 0,190, 76,205,144, 63,230,103, 10,191,128, 0, 5,243,161,111, 93,
+194, 34, 16,255, 0, 0, 0, 0,190, 76,205,144, 63,230,103, 10, 63,127,255,148,243,161,111, 93, 61,222, 16,255, 0, 0, 0, 0,
+190, 76,205, 96, 63,179, 50,251, 63,127,255,150,127,255, 0, 0, 0, 0, 16,255, 0, 0, 0, 0,190, 76,205,120, 63, 25,152,190,
+ 63,127,255,144,127,255, 0, 0, 0, 0, 16,255, 0, 0, 0, 0,190, 76,205,112,190, 76,208, 64, 63,127,255,150,231, 94,231, 94,
+123, 41, 16,255, 0, 0, 0, 0,190, 76,205,136, 63,127,255, 48, 63,127,255,148,127,255, 0, 0, 0, 0, 16,255, 0, 0, 0, 0,
+190, 76,205,128, 62, 76,201,116, 63,127,255,148,127,255, 0, 0, 0, 0, 16,255, 0, 0, 0, 0, 63,179, 51, 36,190, 76,208, 56,
+191, 25,153,157, 0, 0,127,255, 0, 0, 3,255, 0, 0, 0, 0, 63,127,255,222,190, 76,208, 80,191, 25,153,161, 0, 0,127,255,
+ 0, 0, 3,255, 0, 0, 0, 0, 63, 25,153,116,190, 76,208, 80,191, 25,153,165, 0, 0,127,255, 0, 0, 3,255, 0, 0, 0, 0,
+ 62, 76,204, 44,190, 76,208,104,191, 25,153,169, 0, 0,127,255, 0, 0, 3,255, 0, 0, 0, 0, 63,179, 51, 36,190, 76,208, 56,
+190, 76,204,198, 0, 0,127,255, 0, 0, 3,255, 0, 0, 0, 0, 63,127,255,222,190, 76,208, 80,190, 76,204,214, 0, 0,127,255,
+ 0, 0, 3,255, 0, 0, 0, 0, 63, 25,153,116,190, 76,208, 80,190, 76,204,230, 0, 0,127,255, 0, 0, 3,255, 0, 0, 0, 0,
+ 62, 76,204, 44,190, 76,208,104,190, 76,204,246, 0, 0,127,255, 0, 0, 3,255, 0, 0, 0, 0, 63,179, 51, 36,190, 76,208, 56,
+ 62, 76,204,218, 0, 0,127,255, 0, 0, 3,255, 0, 0, 0, 0, 63,127,255,222,190, 76,208, 80, 62, 76,204,202, 0, 0,127,255,
+ 0, 0, 3,255, 0, 0, 0, 0, 63, 25,153,116,190, 76,208, 80, 62, 76,204,186, 0, 0,127,255, 0, 0, 3,255, 0, 0, 0, 0,
+ 62, 76,204, 44,190, 76,208,104, 62, 76,204,170, 0, 0,127,255, 0, 0, 3,255, 0, 0, 0, 0, 63,179, 51, 34,190, 76,208, 56,
+ 63, 25,153,159, 0, 0,127,255, 0, 0, 3,255, 0, 0, 0, 0, 63,127,255,220,190, 76,208, 80, 63, 25,153,155, 0, 0,127,255,
+ 0, 0, 3,255, 0, 0, 0, 0, 63, 25,153,114,190, 76,208, 80, 63, 25,153,151, 0, 0,127,255, 0, 0, 3,255, 0, 0, 0, 0,
+ 62, 76,204, 36,190, 76,208,104, 63, 25,153,151, 0, 0,127,255, 0, 0, 3,255, 0, 0, 0, 0, 63,179, 51, 36,190, 76,208, 56,
+191,128, 0, 4, 0, 0,127,255, 0, 0, 3,255, 0, 0, 0, 0, 63,127,255,222,190, 76,208, 80,191,128, 0, 5, 0, 0,127,255,
+ 0, 0, 3,255, 0, 0, 0, 0, 63, 25,153,116,190, 76,208, 80,191,128, 0, 7, 0, 0,127,255, 0, 0, 3,255, 0, 0, 0, 0,
+ 62, 76,204, 44,190, 76,208,104,191,128, 0, 8, 0, 0,127,255, 0, 0, 3,255, 0, 0, 0, 0, 63,230,102,136,190, 76,208, 88,
+191,128, 0, 8, 0, 0,127,255, 0, 0, 3,255, 0, 0, 0, 0, 63,230,102,135,190, 76,208, 88, 63, 25,153,151, 0, 0,127,255,
+ 0, 0, 3,255, 0, 0, 0, 0, 63,230,102,136,190, 76,208, 88, 62, 76,204,170, 0, 0,127,255, 0, 0, 3,255, 0, 0, 0, 0,
+ 63,230,102,136,190, 76,208, 88,190, 76,204,246, 0, 0,127,255, 0, 0, 3,255, 0, 0, 0, 0, 63,230,102,136,190, 76,208, 88,
+191, 25,153,169, 0, 0,127,255, 0, 0, 3,255, 0, 0, 0, 0,190, 76,205,112,190, 76,208, 64,191, 25,153,156, 0, 0,127,255,
+ 0, 0, 1,255, 0, 0, 0, 0,190, 76,205,112,190, 76,208, 64,190, 76,204,195, 0, 0,127,255, 0, 0, 1,255, 0, 0, 0, 0,
+190, 76,205,112,190, 76,208, 64, 62, 76,204,221, 0, 0,127,255, 0, 0, 1,255, 0, 0, 0, 0,190, 76,205,112,190, 76,208, 64,
+ 63, 25,153,160, 0, 0,127,255, 0, 0, 1,255, 0, 0, 0, 0,190, 76,205,112,190, 76,208, 64,191,128, 0, 4, 0, 0,127,255,
+ 0, 0, 3,255, 0, 0, 0, 0,190, 76,205,112,190, 76,208, 64, 63,127,255,150, 0, 0,127,255, 0, 0, 3,255, 0, 0, 0, 0,
+ 63,230,102,136,190, 76,208, 88, 63,127,255,142, 0, 0,127,255, 0, 0, 3,255, 0, 0, 0, 0, 62, 76,204, 44,190, 76,208,104,
+ 63,127,255,142, 0, 0,127,255, 0, 0, 3,255, 0, 0, 0, 0, 63, 25,153,116,190, 76,208, 80, 63,127,255,144, 0, 0,127,255,
+ 0, 0, 3,255, 0, 0, 0, 0, 63,127,255,222,190, 76,208, 80, 63,127,255,148, 0, 0,127,255, 0, 0, 3,255, 0, 0, 0, 0,
+ 63,179, 51, 36,190, 76,208, 56, 63,127,255,150, 0, 0,127,255, 0, 0, 3,255, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 1, 44,
+ 13, 65,112,160, 0, 0, 1, 35, 0, 0, 0, 5, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 7,160,218, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 14,124,
+ 7,160,218, 32, 0, 0, 0, 55, 0, 0, 1, 53, 0, 0, 0, 21, 0, 0, 0, 82, 0, 0, 0, 34, 0, 0, 0, 20, 0, 0, 0, 83,
+ 0, 0, 0, 34, 0, 0, 0, 19, 0, 0, 0, 84, 0, 0, 0, 34, 0, 0, 0, 18, 0, 0, 0, 85, 0, 0, 0, 34, 0, 0, 0, 22,
+ 0, 0, 0, 76, 0, 0, 0, 34, 0, 0, 0, 1, 0, 0, 0, 53, 0, 0, 0, 34, 0, 0, 0, 28, 0, 0, 0, 54, 0, 0, 0, 34,
+ 0, 0, 0, 0, 0, 0, 0, 55, 0, 0, 0, 34, 0, 0, 0, 27, 0, 0, 0, 56, 0, 0, 0, 34, 0, 0, 0, 29, 0, 0, 0, 48,
+ 0, 0, 0, 34, 0, 0, 0, 4, 0, 0, 0, 5, 0, 0, 0, 34, 0, 0, 0, 3, 0, 0, 0, 4, 0, 0, 0, 34, 0, 0, 0, 2,
+ 0, 0, 0, 3, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 34, 0, 0, 0, 5, 0, 0, 0, 9, 0, 0, 0, 34,
+ 0, 0, 0, 8, 0, 0, 0, 9, 0, 0, 0, 34, 0, 0, 0, 4, 0, 0, 0, 8, 0, 0, 0, 34, 0, 0, 0, 7, 0, 0, 0, 8,
+ 0, 0, 0, 34, 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 34, 0, 0, 0, 6, 0, 0, 0, 7, 0, 0, 0, 34, 0, 0, 0, 2,
+ 0, 0, 0, 6, 0, 0, 0, 34, 0, 0, 0, 9, 0, 0, 0, 13, 0, 0, 0, 34, 0, 0, 0, 12, 0, 0, 0, 13, 0, 0, 0, 34,
+ 0, 0, 0, 8, 0, 0, 0, 12, 0, 0, 0, 34, 0, 0, 0, 11, 0, 0, 0, 12, 0, 0, 0, 34, 0, 0, 0, 7, 0, 0, 0, 11,
+ 0, 0, 0, 34, 0, 0, 0, 10, 0, 0, 0, 11, 0, 0, 0, 34, 0, 0, 0, 6, 0, 0, 0, 10, 0, 0, 0, 34, 0, 0, 0, 1,
+ 0, 0, 0, 10, 0, 0, 0, 34, 0, 0, 0, 13, 0, 0, 0, 17, 0, 0, 0, 34, 0, 0, 0, 16, 0, 0, 0, 17, 0, 0, 0, 34,
+ 0, 0, 0, 12, 0, 0, 0, 16, 0, 0, 0, 34, 0, 0, 0, 15, 0, 0, 0, 16, 0, 0, 0, 34, 0, 0, 0, 11, 0, 0, 0, 15,
+ 0, 0, 0, 34, 0, 0, 0, 14, 0, 0, 0, 15, 0, 0, 0, 34, 0, 0, 0, 10, 0, 0, 0, 14, 0, 0, 0, 34, 0, 0, 0, 19,
+ 0, 0, 0, 20, 0, 0, 0, 34, 0, 0, 0, 2, 0, 0, 0, 21, 0, 0, 0, 34, 0, 0, 0, 3, 0, 0, 0, 20, 0, 0, 0, 34,
+ 0, 0, 0, 4, 0, 0, 0, 19, 0, 0, 0, 34, 0, 0, 0, 5, 0, 0, 0, 18, 0, 0, 0, 34, 0, 0, 0, 22, 0, 0, 0, 26,
+ 0, 0, 0, 34, 0, 0, 0, 24, 0, 0, 0, 25, 0, 0, 0, 34, 0, 0, 0, 18, 0, 0, 0, 22, 0, 0, 0, 34, 0, 0, 0, 17,
+ 0, 0, 0, 23, 0, 0, 0, 34, 0, 0, 0, 13, 0, 0, 0, 24, 0, 0, 0, 34, 0, 0, 0, 9, 0, 0, 0, 25, 0, 0, 0, 34,
+ 0, 0, 0, 5, 0, 0, 0, 26, 0, 0, 0, 34, 0, 0, 0, 1, 0, 0, 0, 28, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 28,
+ 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, 34, 0, 0, 0, 1, 0, 0, 0, 29, 0, 0, 0, 34, 0, 0, 0, 21,
+ 0, 0, 0, 27, 0, 0, 0, 34, 0, 0, 0, 14, 0, 0, 0, 29, 0, 0, 0, 34, 0, 0, 0, 6, 0, 0, 0, 28, 0, 0, 0, 34,
+ 0, 0, 0, 30, 0, 0, 0, 31, 0, 0, 0, 34, 0, 0, 0, 34, 0, 0, 0, 35, 0, 0, 0, 34, 0, 0, 0, 32, 0, 0, 0, 33,
+ 0, 0, 0, 34, 0, 0, 0, 29, 0, 0, 0, 35, 0, 0, 0, 34, 0, 0, 0, 23, 0, 0, 0, 30, 0, 0, 0, 34, 0, 0, 0, 14,
+ 0, 0, 0, 34, 0, 0, 0, 34, 0, 0, 0, 15, 0, 0, 0, 33, 0, 0, 0, 34, 0, 0, 0, 16, 0, 0, 0, 32, 0, 0, 0, 34,
+ 0, 0, 0, 17, 0, 0, 0, 31, 0, 0, 0, 34, 0, 0, 0, 40, 0, 0, 0, 98, 0, 0, 0, 34, 0, 0, 0, 39, 0, 0, 0, 99,
+ 0, 0, 0, 34, 0, 0, 0, 38, 0, 0, 0,100, 0, 0, 0, 34, 0, 0, 0, 37, 0, 0, 0,101, 0, 0, 0, 34, 0, 0, 0, 41,
+ 0, 0, 0, 72, 0, 0, 0, 34, 0, 0, 0, 36, 0, 0, 0, 50, 0, 0, 0, 34, 0, 0, 0, 38, 0, 0, 0, 39, 0, 0, 0, 34,
+ 0, 0, 0, 36, 0, 0, 0, 37, 0, 0, 0, 34, 0, 0, 0, 40, 0, 0, 0, 41, 0, 0, 0, 34, 0, 0, 0, 51, 0, 0, 0,109,
+ 0, 0, 0, 34, 0, 0, 0, 50, 0, 0, 0,101, 0, 0, 0, 34, 0, 0, 0, 68, 0, 0, 0, 94, 0, 0, 0, 34, 0, 0, 0, 64,
+ 0, 0, 0, 90, 0, 0, 0, 34, 0, 0, 0, 60, 0, 0, 0, 86, 0, 0, 0, 34, 0, 0, 0, 56, 0, 0, 0, 82, 0, 0, 0, 34,
+ 0, 0, 0, 52, 0, 0, 0, 78, 0, 0, 0, 34, 0, 0, 0, 50, 0, 0, 0,114, 0, 0, 0, 34, 0, 0, 0, 65, 0, 0, 0,114,
+ 0, 0, 0, 34, 0, 0, 0, 67, 0, 0, 0,115, 0, 0, 0, 34, 0, 0, 0, 52, 0, 0, 0,115, 0, 0, 0, 34, 0, 0, 0, 51,
+ 0, 0, 0,115, 0, 0, 0, 34, 0, 0, 0, 51, 0, 0, 0,114, 0, 0, 0, 34, 0, 0, 0, 42, 0, 0, 0, 50, 0, 0, 0, 34,
+ 0, 0, 0, 43, 0, 0, 0, 45, 0, 0, 0, 34, 0, 0, 0, 42, 0, 0, 0, 43, 0, 0, 0, 34, 0, 0, 0, 42, 0, 0, 0, 44,
+ 0, 0, 0, 34, 0, 0, 0, 44, 0, 0, 0, 45, 0, 0, 0, 34, 0, 0, 0, 44, 0, 0, 0, 46, 0, 0, 0, 34, 0, 0, 0, 47,
+ 0, 0, 0, 49, 0, 0, 0, 34, 0, 0, 0, 46, 0, 0, 0, 47, 0, 0, 0, 34, 0, 0, 0, 46, 0, 0, 0, 48, 0, 0, 0, 34,
+ 0, 0, 0, 48, 0, 0, 0, 49, 0, 0, 0, 34, 0, 0, 0, 55, 0, 0, 0, 56, 0, 0, 0, 34, 0, 0, 0, 54, 0, 0, 0, 55,
+ 0, 0, 0, 34, 0, 0, 0, 53, 0, 0, 0, 54, 0, 0, 0, 34, 0, 0, 0, 56, 0, 0, 0, 60, 0, 0, 0, 34, 0, 0, 0, 59,
+ 0, 0, 0, 60, 0, 0, 0, 34, 0, 0, 0, 55, 0, 0, 0, 59, 0, 0, 0, 34, 0, 0, 0, 58, 0, 0, 0, 59, 0, 0, 0, 34,
+ 0, 0, 0, 54, 0, 0, 0, 58, 0, 0, 0, 34, 0, 0, 0, 57, 0, 0, 0, 58, 0, 0, 0, 34, 0, 0, 0, 53, 0, 0, 0, 57,
+ 0, 0, 0, 34, 0, 0, 0, 60, 0, 0, 0, 64, 0, 0, 0, 34, 0, 0, 0, 63, 0, 0, 0, 64, 0, 0, 0, 34, 0, 0, 0, 59,
+ 0, 0, 0, 63, 0, 0, 0, 34, 0, 0, 0, 62, 0, 0, 0, 63, 0, 0, 0, 34, 0, 0, 0, 58, 0, 0, 0, 62, 0, 0, 0, 34,
+ 0, 0, 0, 61, 0, 0, 0, 62, 0, 0, 0, 34, 0, 0, 0, 57, 0, 0, 0, 61, 0, 0, 0, 34, 0, 0, 0, 64, 0, 0, 0, 68,
+ 0, 0, 0, 34, 0, 0, 0, 67, 0, 0, 0, 68, 0, 0, 0, 34, 0, 0, 0, 63, 0, 0, 0, 67, 0, 0, 0, 34, 0, 0, 0, 66,
+ 0, 0, 0, 67, 0, 0, 0, 34, 0, 0, 0, 62, 0, 0, 0, 66, 0, 0, 0, 34, 0, 0, 0, 65, 0, 0, 0, 66, 0, 0, 0, 34,
+ 0, 0, 0, 61, 0, 0, 0, 65, 0, 0, 0, 34, 0, 0, 0, 52, 0, 0, 0, 68, 0, 0, 0, 34, 0, 0, 0, 51, 0, 0, 0, 66,
+ 0, 0, 0, 34, 0, 0, 0, 48, 0, 0, 0, 53, 0, 0, 0, 34, 0, 0, 0, 46, 0, 0, 0, 57, 0, 0, 0, 34, 0, 0, 0, 44,
+ 0, 0, 0, 61, 0, 0, 0, 34, 0, 0, 0, 42, 0, 0, 0, 65, 0, 0, 0, 34, 0, 0, 0, 69, 0, 0, 0,110, 0, 0, 0, 34,
+ 0, 0, 0, 70, 0, 0, 0,106, 0, 0, 0, 34, 0, 0, 0, 71, 0, 0, 0,102, 0, 0, 0, 34, 0, 0, 0, 72, 0, 0, 0, 98,
+ 0, 0, 0, 34, 0, 0, 0, 73, 0, 0, 0, 97, 0, 0, 0, 34, 0, 0, 0, 74, 0, 0, 0, 93, 0, 0, 0, 34, 0, 0, 0, 75,
+ 0, 0, 0, 89, 0, 0, 0, 34, 0, 0, 0, 76, 0, 0, 0, 85, 0, 0, 0, 34, 0, 0, 0, 77, 0, 0, 0, 81, 0, 0, 0, 34,
+ 0, 0, 0, 70, 0, 0, 0, 71, 0, 0, 0, 34, 0, 0, 0, 73, 0, 0, 0, 77, 0, 0, 0, 34, 0, 0, 0, 74, 0, 0, 0, 75,
+ 0, 0, 0, 34, 0, 0, 0, 69, 0, 0, 0, 77, 0, 0, 0, 34, 0, 0, 0, 81, 0, 0, 0,110, 0, 0, 0, 34, 0, 0, 0, 80,
+ 0, 0, 0,111, 0, 0, 0, 34, 0, 0, 0, 79, 0, 0, 0,112, 0, 0, 0, 34, 0, 0, 0, 78, 0, 0, 0,113, 0, 0, 0, 34,
+ 0, 0, 0, 79, 0, 0, 0, 80, 0, 0, 0, 34, 0, 0, 0, 84, 0, 0, 0, 85, 0, 0, 0, 34, 0, 0, 0, 83, 0, 0, 0, 84,
+ 0, 0, 0, 34, 0, 0, 0, 82, 0, 0, 0, 83, 0, 0, 0, 34, 0, 0, 0, 85, 0, 0, 0, 89, 0, 0, 0, 34, 0, 0, 0, 88,
+ 0, 0, 0, 89, 0, 0, 0, 34, 0, 0, 0, 84, 0, 0, 0, 88, 0, 0, 0, 34, 0, 0, 0, 87, 0, 0, 0, 88, 0, 0, 0, 34,
+ 0, 0, 0, 83, 0, 0, 0, 87, 0, 0, 0, 34, 0, 0, 0, 86, 0, 0, 0, 87, 0, 0, 0, 34, 0, 0, 0, 82, 0, 0, 0, 86,
+ 0, 0, 0, 34, 0, 0, 0, 89, 0, 0, 0, 93, 0, 0, 0, 34, 0, 0, 0, 92, 0, 0, 0, 93, 0, 0, 0, 34, 0, 0, 0, 88,
+ 0, 0, 0, 92, 0, 0, 0, 34, 0, 0, 0, 91, 0, 0, 0, 92, 0, 0, 0, 34, 0, 0, 0, 87, 0, 0, 0, 91, 0, 0, 0, 34,
+ 0, 0, 0, 90, 0, 0, 0, 91, 0, 0, 0, 34, 0, 0, 0, 86, 0, 0, 0, 90, 0, 0, 0, 34, 0, 0, 0, 93, 0, 0, 0, 97,
+ 0, 0, 0, 34, 0, 0, 0, 96, 0, 0, 0, 97, 0, 0, 0, 34, 0, 0, 0, 92, 0, 0, 0, 96, 0, 0, 0, 34, 0, 0, 0, 95,
+ 0, 0, 0, 96, 0, 0, 0, 34, 0, 0, 0, 91, 0, 0, 0, 95, 0, 0, 0, 34, 0, 0, 0, 94, 0, 0, 0, 95, 0, 0, 0, 34,
+ 0, 0, 0, 90, 0, 0, 0, 94, 0, 0, 0, 34, 0, 0, 0, 81, 0, 0, 0, 97, 0, 0, 0, 34, 0, 0, 0, 80, 0, 0, 0, 96,
+ 0, 0, 0, 34, 0, 0, 0, 79, 0, 0, 0, 95, 0, 0, 0, 34, 0, 0, 0, 78, 0, 0, 0, 94, 0, 0, 0, 34, 0, 0, 0,101,
+ 0, 0, 0,105, 0, 0, 0, 34, 0, 0, 0,100, 0, 0, 0,101, 0, 0, 0, 34, 0, 0, 0,100, 0, 0, 0,104, 0, 0, 0, 34,
+ 0, 0, 0, 99, 0, 0, 0,100, 0, 0, 0, 34, 0, 0, 0, 99, 0, 0, 0,103, 0, 0, 0, 34, 0, 0, 0, 98, 0, 0, 0, 99,
+ 0, 0, 0, 34, 0, 0, 0, 98, 0, 0, 0,102, 0, 0, 0, 34, 0, 0, 0,105, 0, 0, 0,114, 0, 0, 0, 34, 0, 0, 0,105,
+ 0, 0, 0,109, 0, 0, 0, 34, 0, 0, 0,104, 0, 0, 0,105, 0, 0, 0, 34, 0, 0, 0,104, 0, 0, 0,108, 0, 0, 0, 34,
+ 0, 0, 0,103, 0, 0, 0,104, 0, 0, 0, 34, 0, 0, 0,103, 0, 0, 0,107, 0, 0, 0, 34, 0, 0, 0,102, 0, 0, 0,103,
+ 0, 0, 0, 34, 0, 0, 0,102, 0, 0, 0,106, 0, 0, 0, 34, 0, 0, 0,109, 0, 0, 0,113, 0, 0, 0, 34, 0, 0, 0,108,
+ 0, 0, 0,109, 0, 0, 0, 34, 0, 0, 0,108, 0, 0, 0,112, 0, 0, 0, 34, 0, 0, 0,107, 0, 0, 0,108, 0, 0, 0, 34,
+ 0, 0, 0,107, 0, 0, 0,111, 0, 0, 0, 34, 0, 0, 0,106, 0, 0, 0,107, 0, 0, 0, 34, 0, 0, 0,106, 0, 0, 0,110,
+ 0, 0, 0, 34, 0, 0, 0,113, 0, 0, 0,115, 0, 0, 0, 34, 0, 0, 0,112, 0, 0, 0,113, 0, 0, 0, 34, 0, 0, 0,111,
+ 0, 0, 0,112, 0, 0, 0, 34, 0, 0, 0,110, 0, 0, 0,111, 0, 0, 0, 34, 0, 0, 0,121, 0, 0, 0,144, 0, 0, 0, 50,
+ 0, 0, 0,125, 0, 0, 0,142, 0, 0, 0, 50, 0, 0, 0,129, 0, 0, 0,140, 0, 0, 0, 50, 0, 0, 0,133, 0, 0, 0,138,
+ 0, 0, 0, 50, 0, 0, 0,120, 0, 0, 0,135, 0, 0, 0, 50, 0, 0, 0,118, 0, 0, 0,134, 0, 0, 0,178, 0, 0, 0,121,
+ 0, 0, 0,125, 0, 0, 0, 50, 0, 0, 0,120, 0, 0, 0,121, 0, 0, 0, 50, 0, 0, 0,120, 0, 0, 0,124, 0, 0, 0, 50,
+ 0, 0, 0,120, 0, 0, 0,119, 0, 0, 0, 50, 0, 0, 0,119, 0, 0, 0,123, 0, 0, 0, 50, 0, 0, 0,118, 0, 0, 0,119,
+ 0, 0, 0, 50, 0, 0, 0,118, 0, 0, 0,122, 0, 0, 0, 50, 0, 0, 0,125, 0, 0, 0,129, 0, 0, 0, 50, 0, 0, 0,124,
+ 0, 0, 0,125, 0, 0, 0, 50, 0, 0, 0,124, 0, 0, 0,128, 0, 0, 0, 50, 0, 0, 0,123, 0, 0, 0,124, 0, 0, 0, 50,
+ 0, 0, 0,123, 0, 0, 0,127, 0, 0, 0, 50, 0, 0, 0,122, 0, 0, 0,123, 0, 0, 0, 50, 0, 0, 0,122, 0, 0, 0,126,
+ 0, 0, 0,178, 0, 0, 0,129, 0, 0, 0,133, 0, 0, 0, 50, 0, 0, 0,128, 0, 0, 0,129, 0, 0, 0, 50, 0, 0, 0,128,
+ 0, 0, 0,132, 0, 0, 0, 50, 0, 0, 0,127, 0, 0, 0,128, 0, 0, 0, 50, 0, 0, 0,127, 0, 0, 0,131, 0, 0, 0, 50,
+ 0, 0, 0,126, 0, 0, 0,127, 0, 0, 0, 50, 0, 0, 0,126, 0, 0, 0,130, 0, 0, 0, 50, 0, 0, 0,132, 0, 0, 0,133,
+ 0, 0, 0, 50, 0, 0, 0,131, 0, 0, 0,132, 0, 0, 0, 50, 0, 0, 0,130, 0, 0, 0,131, 0, 0, 0, 50, 0, 0, 0,137,
+ 0, 0, 0,138, 0, 0, 0, 50, 0, 0, 0,138, 0, 0, 0,140, 0, 0, 0, 50, 0, 0, 0,139, 0, 0, 0,140, 0, 0, 0, 50,
+ 0, 0, 0,137, 0, 0, 0,139, 0, 0, 0, 50, 0, 0, 0,140, 0, 0, 0,142, 0, 0, 0, 50, 0, 0, 0,141, 0, 0, 0,142,
+ 0, 0, 0, 50, 0, 0, 0,142, 0, 0, 0,144, 0, 0, 0, 50, 0, 0, 0,143, 0, 0, 0,144, 0, 0, 0, 50, 0, 0, 0,141,
+ 0, 0, 0,143, 0, 0, 0, 50, 0, 0, 0,136, 0, 0, 0,144, 0, 0, 0, 50, 0, 0, 0,117, 0, 0, 0,135, 0, 0, 0,178,
+ 0, 0, 0,116, 0, 0, 0,135, 0, 0, 0, 50, 0, 0, 0,116, 0, 0, 0,134, 0, 0, 0,178, 0, 0, 0,119, 0, 0, 0,116,
+ 0, 0, 0, 50, 0, 0, 0,117, 0, 0, 0,121, 0, 0, 0, 50, 0, 0, 0,117, 0, 0, 0,136, 0, 0, 0, 50, 0, 0, 0,136,
+ 0, 0, 0,145, 0, 0, 0,178, 0, 0, 0,146, 0, 0, 0,147, 0, 0, 0,178, 0, 0, 0,147, 0, 0, 0,150, 0, 0, 0, 50,
+ 0, 0, 0,149, 0, 0, 0,151, 0, 0, 0,178, 0, 0, 0,148, 0, 0, 0,151, 0, 0, 0, 50, 0, 0, 0,148, 0, 0, 0,150,
+ 0, 0, 0,178, 0, 0, 0,138, 0, 0, 0,147, 0, 0, 0, 50, 0, 0, 0,130, 0, 0, 0,149, 0, 0, 0,178, 0, 0, 0,131,
+ 0, 0, 0,151, 0, 0, 0, 50, 0, 0, 0,132, 0, 0, 0,148, 0, 0, 0, 50, 0, 0, 0,133, 0, 0, 0,150, 0, 0, 0, 50,
+ 0, 0, 0,155, 0, 0, 0,171, 0, 0, 0, 35, 0, 0, 0,154, 0, 0, 0,170, 0, 0, 0, 35, 0, 0, 0,153, 0, 0, 0,169,
+ 0, 0, 0, 35, 0, 0, 0,152, 0, 0, 0,168, 0, 0, 0, 35, 0, 0, 0,155, 0, 0, 0,159, 0, 0, 0, 35, 0, 0, 0,154,
+ 0, 0, 0,155, 0, 0, 0, 35, 0, 0, 0,154, 0, 0, 0,158, 0, 0, 0, 35, 0, 0, 0,153, 0, 0, 0,154, 0, 0, 0, 35,
+ 0, 0, 0,153, 0, 0, 0,157, 0, 0, 0, 35, 0, 0, 0,152, 0, 0, 0,153, 0, 0, 0, 35, 0, 0, 0,152, 0, 0, 0,156,
+ 0, 0, 0, 35, 0, 0, 0,159, 0, 0, 0,163, 0, 0, 0, 35, 0, 0, 0,158, 0, 0, 0,159, 0, 0, 0, 35, 0, 0, 0,158,
+ 0, 0, 0,162, 0, 0, 0, 35, 0, 0, 0,157, 0, 0, 0,158, 0, 0, 0, 35, 0, 0, 0,157, 0, 0, 0,161, 0, 0, 0, 35,
+ 0, 0, 0,156, 0, 0, 0,157, 0, 0, 0, 35, 0, 0, 0,156, 0, 0, 0,160, 0, 0, 0, 35, 0, 0, 0,163, 0, 0, 0,167,
+ 0, 0, 0, 35, 0, 0, 0,162, 0, 0, 0,163, 0, 0, 0, 35, 0, 0, 0,162, 0, 0, 0,166, 0, 0, 0, 35, 0, 0, 0,161,
+ 0, 0, 0,162, 0, 0, 0, 35, 0, 0, 0,161, 0, 0, 0,165, 0, 0, 0, 35, 0, 0, 0,160, 0, 0, 0,161, 0, 0, 0, 35,
+ 0, 0, 0,160, 0, 0, 0,164, 0, 0, 0, 35, 0, 0, 0,166, 0, 0, 0,167, 0, 0, 0, 35, 0, 0, 0,165, 0, 0, 0,166,
+ 0, 0, 0, 35, 0, 0, 0,164, 0, 0, 0,165, 0, 0, 0, 35, 0, 0, 0,169, 0, 0, 0,170, 0, 0, 0, 35, 0, 0, 0,174,
+ 0, 0, 0,175, 0, 0, 0, 35, 0, 0, 0,172, 0, 0, 0,176, 0, 0, 0, 35, 0, 0, 0,168, 0, 0, 0,172, 0, 0, 0, 35,
+ 0, 0, 0,164, 0, 0, 0,173, 0, 0, 0, 35, 0, 0, 0,160, 0, 0, 0,174, 0, 0, 0, 35, 0, 0, 0,156, 0, 0, 0,175,
+ 0, 0, 0, 35, 0, 0, 0,152, 0, 0, 0,176, 0, 0, 0, 35, 0, 0, 0,177, 0, 0, 0,181, 0, 0, 0, 35, 0, 0, 0,177,
+ 0, 0, 0,178, 0, 0, 0,163, 0, 0, 0,178, 0, 0, 0,179, 0, 0, 0, 35, 0, 0, 0,179, 0, 0, 0,180, 0, 0, 0,163,
+ 0, 0, 0,171, 0, 0, 0,181, 0, 0, 0, 35, 0, 0, 0,167, 0, 0, 0,180, 0, 0, 0, 35, 0, 0, 0,163, 0, 0, 0,179,
+ 0, 0, 0, 35, 0, 0, 0,159, 0, 0, 0,178, 0, 0, 0, 35, 0, 0, 0,155, 0, 0, 0,177, 0, 0, 0, 35, 0, 0, 0,182,
+ 0, 0, 0,184, 0, 0, 0, 35, 0, 0, 0,183, 0, 0, 0,187, 0, 0, 0, 35, 0, 0, 0,185, 0, 0, 0,186, 0, 0, 0, 35,
+ 0, 0, 0,180, 0, 0, 0,182, 0, 0, 0, 35, 0, 0, 0,173, 0, 0, 0,183, 0, 0, 0, 35, 0, 0, 0,164, 0, 0, 0,187,
+ 0, 0, 0, 35, 0, 0, 0,165, 0, 0, 0,186, 0, 0, 0, 35, 0, 0, 0,166, 0, 0, 0,185, 0, 0, 0, 35, 0, 0, 0,167,
+ 0, 0, 0,184, 0, 0, 0, 35, 68, 65, 84, 65, 0, 0, 1, 44, 13, 65,114, 0, 0, 0, 1, 35, 0, 0, 0, 5, 0, 0, 0, 4,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,160,234, 32, 0, 0, 0, 5, 0, 0, 0, 20,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 86, 84,101,120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,160,242, 32, 0, 0, 0, 6, 0, 0, 0, 64, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67,111,108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,161, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 5,240, 7,160,234, 32, 0, 0, 0, 54, 0, 0, 0, 76, 0, 0, 0, 18,
+ 0, 0, 0, 22, 0, 0, 0, 26, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 19, 0, 0, 0, 4, 0, 0, 0, 3,
+ 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 5,
+ 0, 0, 0, 9, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 6, 0, 0, 0, 0,
+ 0, 0, 0, 9, 0, 0, 0, 25, 0, 0, 0, 24, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 8, 0, 0, 0, 12,
+ 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 6, 0, 0, 0, 10, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 12,
+ 0, 0, 0, 13, 0, 0, 0, 17, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 11, 0, 0, 0, 15, 0, 0, 0, 14,
+ 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 23, 0, 0, 0, 30, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 16,
+ 0, 0, 0, 32, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 35, 0, 0, 0, 29, 0, 0, 0, 14, 0, 0, 0, 0,
+ 0, 0, 0, 42, 0, 0, 0, 65, 0, 0, 0,114, 0, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 45, 0, 0, 0, 44, 0, 0, 0, 42,
+ 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 46, 0, 0, 0, 57, 0, 0, 0, 61, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 49,
+ 0, 0, 0, 48, 0, 0, 0, 46, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 1, 0, 0, 0, 53, 0, 0, 0, 48,
+ 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 55, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 55, 0, 0, 0, 56,
+ 0, 0, 0, 60, 0, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 53, 0, 0, 0, 54, 0, 0, 0, 58, 0, 0, 0, 57, 0, 0, 0, 0,
+ 0, 0, 0, 58, 0, 0, 0, 59, 0, 0, 0, 63, 0, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 0, 0, 0, 68,
+ 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 62, 0, 0, 0, 66, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0,115,
+ 0, 0, 0, 51, 0, 0, 0, 66, 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 22, 0, 0, 0, 76, 0, 0, 0, 85,
+ 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 19, 0, 0, 0, 84, 0, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, 21,
+ 0, 0, 0, 82, 0, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 84, 0, 0, 0, 85, 0, 0, 0, 89, 0, 0, 0, 88, 0, 0, 0, 0,
+ 0, 0, 0, 82, 0, 0, 0, 83, 0, 0, 0, 87, 0, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 89, 0, 0, 0, 75, 0, 0, 0, 74,
+ 0, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 87, 0, 0, 0, 88, 0, 0, 0, 92, 0, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 60,
+ 0, 0, 0, 86, 0, 0, 0, 90, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 92, 0, 0, 0, 93, 0, 0, 0, 97, 0, 0, 0, 96,
+ 0, 0, 0, 0, 0, 0, 0, 90, 0, 0, 0, 91, 0, 0, 0, 95, 0, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 97, 0, 0, 0, 73,
+ 0, 0, 0, 77, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 95, 0, 0, 0, 96, 0, 0, 0, 80, 0, 0, 0, 79, 0, 0, 0, 0,
+ 0, 0, 0, 78, 0, 0, 0, 52, 0, 0, 0, 68, 0, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 36, 0, 0, 0, 50,
+ 0, 0, 0,101, 0, 0, 0, 0, 0, 0, 0,100, 0, 0, 0, 99, 0, 0, 0, 39, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 98,
+ 0, 0, 0, 72, 0, 0, 0, 41, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0,105, 0, 0, 0,104, 0, 0, 0,100, 0, 0, 0,101,
+ 0, 0, 0, 0, 0, 0, 0,103, 0, 0, 0,102, 0, 0, 0, 98, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 51, 0, 0, 0,109,
+ 0, 0, 0,105, 0, 0, 0,114, 0, 0, 0, 0, 0, 0, 0,108, 0, 0, 0,107, 0, 0, 0,103, 0, 0, 0,104, 0, 0, 0, 0,
+ 0, 0, 0,106, 0, 0, 0, 70, 0, 0, 0, 71, 0, 0, 0,102, 0, 0, 0, 0, 0, 0, 0,113, 0, 0, 0,112, 0, 0, 0,108,
+ 0, 0, 0,109, 0, 0, 0, 0, 0, 0, 0,111, 0, 0, 0,110, 0, 0, 0,106, 0, 0, 0,107, 0, 0, 0, 0, 0, 0, 0,113,
+ 0, 0, 0,115, 0, 0, 0, 52, 0, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 79, 0, 0, 0, 80, 0, 0, 0,111, 0, 0, 0,112,
+ 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0, 77, 0, 0, 0, 69, 0, 0, 0,110, 0, 0, 0, 0, 0, 0, 0,116, 0, 0, 0,135,
+ 0, 0, 0,120, 0, 0, 0,119, 0, 0, 0, 16, 0, 0, 0,125, 0, 0, 0,124, 0, 0, 0,120, 0, 0, 0,121, 0, 0, 0, 16,
+ 0, 0, 0,123, 0, 0, 0,122, 0, 0, 0,118, 0, 0, 0,119, 0, 0, 0, 16, 0, 0, 0,128, 0, 0, 0,127, 0, 0, 0,123,
+ 0, 0, 0,124, 0, 0, 0, 16, 0, 0, 0,133, 0, 0, 0,132, 0, 0, 0,128, 0, 0, 0,129, 0, 0, 0, 16, 0, 0, 0,131,
+ 0, 0, 0,130, 0, 0, 0,126, 0, 0, 0,127, 0, 0, 0, 16, 0, 0, 0,148, 0, 0, 0,151, 0, 0, 0,131, 0, 0, 0,132,
+ 0, 0, 0, 16, 0, 0, 0,147, 0, 0, 0,150, 0, 0, 0,133, 0, 0, 0,138, 0, 0, 0, 16, 0, 0, 0,137, 0, 0, 0,138,
+ 0, 0, 0,140, 0, 0, 0,139, 0, 0, 0, 16, 0, 0, 0,140, 0, 0, 0,129, 0, 0, 0,125, 0, 0, 0,142, 0, 0, 0, 16,
+ 0, 0, 0,141, 0, 0, 0,142, 0, 0, 0,144, 0, 0, 0,143, 0, 0, 0, 16, 0, 0, 0,144, 0, 0, 0,121, 0, 0, 0,117,
+ 0, 0, 0,136, 0, 0, 0, 16, 0, 0, 0,171, 0, 0, 0,181, 0, 0, 0,177, 0, 0, 0,155, 0, 0, 0, 2, 0, 0, 0,154,
+ 0, 0, 0,153, 0, 0, 0,169, 0, 0, 0,170, 0, 0, 0, 2, 0, 0, 0,152, 0, 0, 0,176, 0, 0, 0,172, 0, 0, 0,168,
+ 0, 0, 0, 2, 0, 0, 0,159, 0, 0, 0,158, 0, 0, 0,154, 0, 0, 0,155, 0, 0, 0, 2, 0, 0, 0,157, 0, 0, 0,156,
+ 0, 0, 0,152, 0, 0, 0,153, 0, 0, 0, 2, 0, 0, 0,179, 0, 0, 0,163, 0, 0, 0,159, 0, 0, 0,178, 0, 0, 0, 2,
+ 0, 0, 0,162, 0, 0, 0,161, 0, 0, 0,157, 0, 0, 0,158, 0, 0, 0, 2, 0, 0, 0,160, 0, 0, 0,174, 0, 0, 0,175,
+ 0, 0, 0,156, 0, 0, 0, 2, 0, 0, 0,167, 0, 0, 0,166, 0, 0, 0,162, 0, 0, 0,163, 0, 0, 0, 2, 0, 0, 0,165,
+ 0, 0, 0,164, 0, 0, 0,160, 0, 0, 0,161, 0, 0, 0, 2, 0, 0, 0,182, 0, 0, 0,184, 0, 0, 0,167, 0, 0, 0,180,
+ 0, 0, 0, 2, 0, 0, 0,185, 0, 0, 0,186, 0, 0, 0,165, 0, 0, 0,166, 0, 0, 0, 2, 0, 0, 0,187, 0, 0, 0,183,
+ 0, 0, 0,173, 0, 0, 0,164, 0, 0, 0, 2, 68, 65, 84, 65, 0, 0, 13, 16, 7,160,242, 32, 0, 0, 0, 65, 0, 0, 0, 76,
+ 63, 27,168,250, 59, 93,211, 96, 62,203,162, 84, 59, 93,211, 96, 62,203,162, 84, 59, 93,211, 96, 63, 27,168,251, 59, 93,211, 96,
+ 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 63,131,172, 21, 59, 93,211, 96, 63, 81,128,146, 59, 93,211, 96, 63, 81,128,149,
+ 59, 93,211, 96, 63,131,172, 22, 59, 93,211, 96, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 63,158,151,227, 59, 93,211, 96,
+ 63,185,131,174, 59, 93,211, 96, 63,185,131,174, 59, 93,211, 96, 63,158,151,225, 59, 93,211, 96, 0, 0, 0, 0, 61, 0, 0, 1,
+ 0, 0, 0, 0, 63, 81,128,149, 59, 93,211, 96, 63, 27,168,251, 59, 93,211, 96, 63, 27,168,246, 59, 93,211, 96, 63, 81,128,142,
+ 59, 93,211, 96, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 63,158,151,227, 59, 93,211, 96, 63,131,172, 22, 59, 93,211, 96,
+ 63,131,172, 24, 59, 93,211, 96, 63,158,151,226, 59, 93,211, 96, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 63, 27,168,246,
+ 59, 93,211, 96, 62,203,162, 86, 59, 93,211, 96, 62,203,162, 85, 59, 93,211, 96, 63, 27,168,247, 59, 93,211, 96, 0, 0, 0, 0,
+ 61, 0, 0, 1, 0, 0, 0, 0, 63,131,172, 24, 59, 93,211, 96, 63, 81,128,142, 59, 93,211, 96, 63, 81,128,144, 59, 93,211, 96,
+ 63,131,172, 21, 59, 93,211, 96, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 63,185,131,174, 59, 93,211, 96, 63,158,151,226,
+ 59, 93,211, 96, 63,158,151,226, 59, 93,211, 96, 63,185,131,176, 59, 93,211, 96, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0,
+ 63, 81,128,144, 59, 93,211, 96, 63, 27,168,247, 59, 93,211, 96, 63, 27,168,247, 59, 93,211, 96, 63, 81,128,144, 59, 93,211, 96,
+ 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 63,158,151,226, 59, 93,211, 96, 63,131,172, 21, 59, 93,211, 96, 63,131,172, 22,
+ 59, 93,211, 96, 63,158,151,224, 59, 93,211, 96, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 63, 27,168,247, 59, 93,211, 96,
+ 62,203,162, 85, 59, 93,211, 96, 62,203,162, 86, 59, 93,211, 96, 63, 27,168,248, 59, 93,211, 96, 0, 0, 0, 0, 61, 0, 0, 1,
+ 0, 0, 0, 0, 63,131,172, 22, 59, 93,211, 96, 63, 81,128,144, 59, 93,211, 96, 63, 81,128,144, 59, 93,211, 96, 63,131,172, 22,
+ 59, 93,211, 96, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 63,158,151,226, 59, 93,211, 96, 63,185,131,176, 59, 93,211, 96,
+ 63,185,131,174, 59, 93,211, 96, 63,158,151,224, 59, 93,211, 96, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 63,140,131, 99,
+ 63, 41, 47, 76, 63,114,244, 44, 63, 79, 65,236, 63,114,244, 44, 63, 79, 65,236, 63,140,131, 99, 63, 41, 47, 76, 0, 0, 0, 0,
+ 60, 0, 0, 1, 0, 0, 0, 0, 63,159,140,161, 63, 3, 28,210, 63,140,131, 99, 63, 41, 47, 76, 63,140,131, 99, 63, 41, 47, 76,
+ 63,159,140,161, 63, 3, 28,210, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63,140,131, 99, 63, 41, 47, 76, 63,114,244, 44,
+ 63, 79, 65,236, 63,114,244, 44, 63, 79, 65,236, 63,140,131, 99, 63, 41, 47, 76, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0,
+ 63,159,140,161, 63, 3, 28,210, 63,140,131, 99, 63, 41, 47, 76, 63,140,131, 99, 63, 41, 47, 76, 63,159,140,161, 63, 3, 28,210,
+ 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63,140,131, 99, 63, 41, 47, 72, 63,114,244, 44, 63, 79, 65,236, 63,114,244, 44,
+ 63, 79, 65,236, 63,140,131, 99, 63, 41, 47, 76, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63, 76,225,174, 63,117, 84,102,
+ 63, 38,207, 52, 63,141,179,111, 63, 38,207, 52, 63,141,179,111, 63, 76,225,174, 63,117, 84,102, 0, 0, 0, 0, 60, 0, 0, 1,
+ 0, 0, 0, 0, 63, 38,207, 52, 63,141,179,111, 63, 0,188,188, 63,160,188,173, 63, 0,188,188, 63,160,188,173, 63, 38,207, 52,
+ 63,141,179,111, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63,114,244, 44, 63, 79, 65,236, 63, 76,225,174, 63,117, 84,102,
+ 63, 76,225,172, 63,117, 84,102, 63,114,244, 44, 63, 79, 65,236, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63, 76,225,172,
+ 63,117, 84,102, 63, 38,207, 52, 63,141,179,111, 63, 38,207, 52, 63,141,179,111, 63, 76,225,172, 63,117, 84,102, 0, 0, 0, 0,
+ 60, 0, 0, 1, 0, 0, 0, 0, 63, 38,207, 52, 63,141,179,111, 63, 0,188,188, 63,160,188,173, 63, 0,188,188, 63,160,188,173,
+ 63, 38,207, 52, 63,141,179,111, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63,114,244, 44, 63, 79, 65,236, 63, 76,225,172,
+ 63,117, 84,102, 63, 76,225,172, 63,117, 84,102, 63,114,244, 44, 63, 79, 65,236, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0,
+ 63, 38,207, 56, 63,141,179,111, 63, 76,225,172, 63,117, 84,102, 63, 76,225,172, 63,117, 84,102, 63, 38,207, 52, 63,141,179,111,
+ 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0,189,188,105, 96, 63, 41, 47,120,190,118,127, 56, 63, 3, 28,220,190,118,127, 56,
+ 63, 3, 28,220,189,188,105, 96, 63, 41, 47,120, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 62, 82, 95, 26, 63,117, 84,102,
+ 61,104, 84,200, 63, 79, 65,244, 61,104, 84,200, 63, 79, 65,242, 62, 82, 95, 26, 63,117, 84,102, 0, 0, 0, 0, 60, 0, 0, 1,
+ 0, 0, 0, 0, 63, 0,188,190, 63,160,188,171, 62,181, 84,122, 63,141,179,113, 62,181, 84,122, 63,141,179,113, 63, 0,188,188,
+ 63,160,188,173, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 61,104, 84,200, 63, 79, 65,242,189,188,105, 96, 63, 41, 47,120,
+189,188,105,128, 63, 41, 47,120, 61,104, 84,160, 63, 79, 65,242, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 62,181, 84,122,
+ 63,141,179,113, 62, 82, 95, 26, 63,117, 84,102, 62, 82, 95, 26, 63,117, 84,102, 62,181, 84,122, 63,141,179,113, 0, 0, 0, 0,
+ 60, 0, 0, 1, 0, 0, 0, 0,189,188,105,128, 63, 41, 47,120,190,118,127, 64, 63, 3, 28,216,190,118,127, 64, 63, 3, 28,216,
+189,188,105,128, 63, 41, 47,120, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 62, 82, 95, 26, 63,117, 84,102, 61,104, 84,160,
+ 63, 79, 65,242, 61,104, 84,160, 63, 79, 65,242, 62, 82, 95, 26, 63,117, 84,102, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0,
+ 63, 0,188,188, 63,160,188,173, 62,181, 84,122, 63,141,179,113, 62,181, 84,122, 63,141,179,113, 63, 0,188,188, 63,160,188,173,
+ 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 61,104, 84,160, 63, 79, 65,242,189,188,105,128, 63, 41, 47,120,189,188,105,128,
+ 63, 41, 47,120, 61,104, 84,160, 63, 79, 65,242, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 62,181, 84,122, 63,141,179,113,
+ 62, 82, 95, 26, 63,117, 84,102, 62, 82, 95, 26, 63,117, 84,102, 62,181, 84,122, 63,141,179,113, 0, 0, 0, 0, 60, 0, 0, 1,
+ 0, 0, 0, 0,189,188,105,128, 63, 41, 47,120,190,118,127, 64, 63, 3, 28,216,190,118,127, 64, 63, 3, 28,216,189,188,105,128,
+ 63, 41, 47,120, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 62, 82, 95, 26, 63,117, 84,102, 61,104, 84,160, 63, 79, 65,242,
+ 61,104, 84,160, 63, 79, 65,242, 62, 82, 95, 26, 63,117, 84,102, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 62,181, 84,122,
+ 63,141,179,113, 63, 0,188,188, 63,160,188,173, 63, 0,188,188, 63,160,188,173, 62,181, 84,122, 63,141,179,113, 0, 0, 0, 0,
+ 60, 0, 0, 1, 0, 0, 0, 0, 63,140,131,180, 62,186, 19,116, 63,159,140,244, 63, 3, 28, 50, 63,140,131, 99, 63, 41, 47, 76,
+ 63,114,244, 42, 63, 3, 28,244, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63, 76,225,174, 62,186, 21, 0, 63, 38,207, 51,
+ 62, 91,224, 24, 63, 76,226,112, 61,135, 38, 64, 63,114,244,240, 62, 91,221, 4, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0,
+ 63, 0,188,185, 61,135, 44, 96, 62,181, 84, 61,189,169,104,176, 63, 0,189, 93,190,109, 1, 80, 63, 38,207,248,189,169,109,144,
+ 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63, 76,225,174, 63, 41, 47,116, 63, 38,207, 52, 63, 3, 28,248, 63, 76,225,174,
+ 62,186, 21, 0, 63,114,244, 42, 63, 3, 28,244, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63, 0,188,185, 62,186, 21, 0,
+ 62,181, 84,122, 62, 91,224, 32, 63, 0,188,185, 61,135, 44, 96, 63, 38,207, 51, 62, 91,224, 24, 0, 0, 0, 0, 60, 0, 0, 1,
+ 0, 0, 0, 0, 63, 76,225,172, 63,117, 84,102, 63, 38,207, 52, 63, 79, 65,236, 63, 76,225,174, 63, 41, 47,116, 63,114,244, 44,
+ 63, 79, 65,236, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63, 0,188,188, 63, 41, 47,120, 62,181, 84,122, 63, 3, 28,248,
+ 63, 0,188,185, 62,186, 21, 0, 63, 38,207, 52, 63, 3, 28,248, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 62, 82, 95, 14,
+ 62,186, 21, 0, 61,104, 82,144, 62, 91,223,128, 62, 82, 94,138, 61,135, 43, 48, 62,181, 84,122, 62, 91,224, 32, 0, 0, 0, 0,
+ 60, 0, 0, 1, 0, 0, 0, 0, 63, 0,188,190, 63,117, 84,102, 62,181, 84,127, 63, 79, 65,242, 63, 0,188,188, 63, 41, 47,120,
+ 63, 38,207, 52, 63, 79, 65,236, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 62, 82, 95, 26, 63, 41, 47,120, 61,104, 84,160,
+ 63, 3, 29, 0, 62, 82, 95, 14, 62,186, 21, 0, 62,181, 84,122, 63, 3, 28,248, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0,
+ 63, 0,188,190, 63,117, 84,102, 63, 38,207, 56, 63,141,179,111, 63, 0,188,188, 63,160,188,173, 62,181, 84,122, 63,141,179,113,
+ 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 62, 82, 95, 26, 63,117, 84,102, 61,104, 84,160, 63, 79, 65,242, 62, 82, 95, 26,
+ 63, 41, 47,120, 62,181, 84,127, 63, 79, 65,242, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0,189,188,105,128, 63, 41, 47,120,
+190,118,127, 64, 63, 3, 28,216,189,188,106,128, 62,186, 20,176, 61,104, 84,160, 63, 3, 29, 0, 0, 0, 0, 0, 60, 0, 0, 1,
+ 0, 0, 0, 0, 63, 38,207, 56, 63,141,179,111, 63, 76,225,172, 63,117, 84,102, 63, 76,225,172, 63,117, 84,102, 63, 38,207, 52,
+ 63,141,179,111, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63,114,244, 44, 63, 79, 65,236, 63, 76,225,172, 63,117, 84,102,
+ 63, 76,225,172, 63,117, 84,102, 63,114,244, 44, 63, 79, 65,236, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63, 38,207, 52,
+ 63,141,179,111, 63, 0,188,188, 63,160,188,173, 63, 0,188,188, 63,160,188,173, 63, 38,207, 52, 63,141,179,111, 0, 0, 0, 0,
+ 60, 0, 0, 1, 0, 0, 0, 0, 63, 76,225,172, 63,117, 84,102, 63, 38,207, 52, 63,141,179,111, 63, 38,207, 52, 63,141,179,111,
+ 63, 76,225,172, 63,117, 84,102, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63,114,244, 44, 63, 79, 65,236, 63, 76,225,174,
+ 63,117, 84,102, 63, 76,225,172, 63,117, 84,102, 63,114,244, 44, 63, 79, 65,236, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0,
+ 63, 38,207, 52, 63,141,179,111, 63, 0,188,188, 63,160,188,173, 63, 0,188,188, 63,160,188,173, 63, 38,207, 52, 63,141,179,111,
+ 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63, 76,225,174, 63,117, 84,102, 63, 38,207, 52, 63,141,179,111, 63, 38,207, 52,
+ 63,141,179,111, 63, 76,225,174, 63,117, 84,102, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63,140,131, 99, 63, 41, 47, 72,
+ 63,114,244, 44, 63, 79, 65,236, 63,114,244, 44, 63, 79, 65,236, 63,140,131, 99, 63, 41, 47, 76, 0, 0, 0, 0, 60, 0, 0, 1,
+ 0, 0, 0, 0, 63,159,140,161, 63, 3, 28,210, 63,140,131, 99, 63, 41, 47, 76, 63,140,131, 99, 63, 41, 47, 76, 63,159,140,161,
+ 63, 3, 28,210, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63,140,131, 99, 63, 41, 47, 76, 63,114,244, 44, 63, 79, 65,236,
+ 63,114,244, 44, 63, 79, 65,236, 63,140,131, 99, 63, 41, 47, 76, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63,159,140,161,
+ 63, 3, 28,210, 63,140,131, 99, 63, 41, 47, 76, 63,140,131, 99, 63, 41, 47, 76, 63,159,140,161, 63, 3, 28,210, 0, 0, 0, 0,
+ 60, 0, 0, 1, 0, 0, 0, 0, 63,140,131, 99, 63, 41, 47, 76, 63,114,244, 44, 63, 79, 65,236, 63,114,244, 44, 63, 79, 65,236,
+ 63,140,131, 99, 63, 41, 47, 76, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 62,181, 84,122, 63,141,179,113, 63, 0,188,188,
+ 63,160,188,173, 63, 0,188,188, 63,160,188,173, 62,181, 84,122, 63,141,179,113, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0,
+ 62, 82, 95, 26, 63,117, 84,102, 61,104, 84,160, 63, 79, 65,242, 61,104, 84,160, 63, 79, 65,242, 62, 82, 95, 26, 63,117, 84,102,
+ 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0,189,188,105,128, 63, 41, 47,120,190,118,127, 64, 63, 3, 28,216,190,118,127, 64,
+ 63, 3, 28,216,189,188,105,128, 63, 41, 47,120, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 62,181, 84,122, 63,141,179,113,
+ 62, 82, 95, 26, 63,117, 84,102, 62, 82, 95, 26, 63,117, 84,102, 62,181, 84,122, 63,141,179,113, 0, 0, 0, 0, 60, 0, 0, 1,
+ 0, 0, 0, 0, 61,104, 84,160, 63, 79, 65,242,189,188,105,128, 63, 41, 47,120,189,188,105,128, 63, 41, 47,120, 61,104, 84,160,
+ 63, 79, 65,242, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63, 0,188,188, 63,160,188,173, 62,181, 84,122, 63,141,179,113,
+ 62,181, 84,122, 63,141,179,113, 63, 0,188,188, 63,160,188,173, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 62, 82, 95, 26,
+ 63,117, 84,102, 61,104, 84,160, 63, 79, 65,242, 61,104, 84,160, 63, 79, 65,242, 62, 82, 95, 26, 63,117, 84,102, 0, 0, 0, 0,
+ 60, 0, 0, 1, 0, 0, 0, 0,189,188,105,128, 63, 41, 47,120,190,118,127, 64, 63, 3, 28,216,190,118,127, 64, 63, 3, 28,216,
+189,188,105,128, 63, 41, 47,120, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 62,181, 84,122, 63,141,179,113, 62, 82, 95, 26,
+ 63,117, 84,102, 62, 82, 95, 26, 63,117, 84,102, 62,181, 84,122, 63,141,179,113, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0,
+ 61,104, 84,200, 63, 79, 65,242,189,188,105, 96, 63, 41, 47,120,189,188,105,128, 63, 41, 47,120, 61,104, 84,160, 63, 79, 65,242,
+ 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63, 0,188,190, 63,160,188,171, 62,181, 84,122, 63,141,179,113, 62,181, 84,122,
+ 63,141,179,113, 63, 0,188,188, 63,160,188,173, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 62, 82, 95, 26, 63,117, 84,102,
+ 61,104, 84,200, 63, 79, 65,244, 61,104, 84,200, 63, 79, 65,242, 62, 82, 95, 26, 63,117, 84,102, 0, 0, 0, 0, 60, 0, 0, 1,
+ 0, 0, 0, 0,189,188,105, 96, 63, 41, 47,120,190,118,127, 56, 63, 3, 28,220,190,118,127, 56, 63, 3, 28,220,189,188,105, 96,
+ 63, 41, 47,120, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 4,192, 7,161, 0, 32, 0, 0, 0, 59,
+ 0, 0, 1, 48,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+255,255,255,255, 0, 0, 77, 69, 0, 0, 1, 24, 13, 65,115, 96, 0, 0, 0, 52, 0, 0, 0, 1, 13, 65,120,240, 13, 65,109,208,
+ 0, 0, 0, 0, 0, 0, 0, 0, 77, 69, 80,108, 97,110,101, 46, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 65,116,160, 7,161, 40, 32, 7,161, 46, 32, 0, 0, 0, 0, 7,161, 6, 32, 7,161, 24, 32, 0, 0, 0, 0, 7,161, 60, 32,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 65,116,208, 0, 0, 0, 1, 0, 0, 0, 5, 0, 0, 0, 20, 0, 0, 0, 0,
+ 0, 0, 0, 0, 13, 65,118, 48, 0, 0, 0, 1, 0, 0, 0, 5, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 13, 65,119,144,
+ 0, 0, 0, 3, 0, 0, 0, 5, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,182, 0, 0, 1, 45, 0, 0, 0, 74,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 63, 76,204,213, 63, 76,204,255,182,104, 0, 0, 63,128, 0, 30, 63,128, 0,140,
+ 63,127,255,214, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 4, 0, 0, 0, 0,
+ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 4, 13, 65,116,160, 0, 0, 0, 0,
+ 0, 0, 0, 1, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 1, 44, 13, 65,116,208, 0, 0, 1, 35, 0, 0, 0, 5, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,161, 6, 32, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 17, 16, 7,161, 6, 32, 0, 0, 0, 58, 0, 0, 0,182, 63,230,102,133,
+ 63,179, 51,208,191,128, 0, 4,165,127, 0, 0, 90,129, 2,255, 0, 0, 0, 0, 63,230,102,133, 63, 25,154,206,191,128, 0, 4,
+165,127, 0, 0, 90,129, 2,255, 0, 0, 0, 0, 63,179, 51, 81, 63,179, 51,210,191,128, 0, 3, 0, 0, 0, 0,127,255, 2,255,
+ 0, 0, 0, 0, 63,128, 0, 28, 63,179, 51,212,191,128, 0, 1, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 63, 25,153,207,
+ 63,179, 51,214,191,128, 0, 0, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 62, 76,205,152, 63,179, 51,216,191,127,255,254,
+ 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 63,179, 51, 80, 63,128, 0,158,191,128, 0, 3, 0, 0, 0, 0,127,255, 2,255,
+ 0, 0, 0, 0, 63,128, 0, 27, 63,128, 0,160,191,128, 0, 2, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 63, 25,153,204,
+ 63,128, 0,162,191,128, 0, 0, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 62, 76,205,140, 63,128, 0,163,191,127,255,254,
+ 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 63,179, 51, 80, 63, 25,154,209,191,128, 0, 3, 0, 0, 0, 0,127,255, 2,255,
+ 0, 0, 0, 0, 63,128, 0, 27, 63, 25,154,213,191,128, 0, 2, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 63, 25,153,204,
+ 63, 25,154,217,191,128, 0, 0, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 62, 76,205,140, 63, 25,154,221,191,127,255,254,
+ 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 63,179, 51, 80, 62, 76,209,160,191,128, 0, 3, 0, 0, 0, 0,127,255, 2,255,
+ 0, 0, 0, 0, 63,128, 0, 27, 62, 76,209,176,191,128, 0, 2, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 63, 25,153,204,
+ 62, 76,209,188,191,128, 0, 1, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 62, 76,205,140, 62, 76,209,204,191,127,255,255,
+ 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 62, 76,205,140, 63,230,103, 8,191, 25,153,156, 0, 0,128, 1, 0, 0, 2,255,
+ 0, 0, 0, 0, 63, 25,153,204, 63,230,103, 10,191, 25,153,160, 0, 0,128, 1, 0, 0, 2,255, 0, 0, 0, 0, 63,128, 0, 27,
+ 63,230,103, 10,191, 25,153,164, 0, 0,128, 1, 0, 0, 2,255, 0, 0, 0, 0, 63,179, 51, 80, 63,230,103, 12,191, 25,153,168,
+ 0, 0,128, 1, 0, 0, 2,255, 0, 0, 0, 0, 62, 76,205,140, 63,230,103, 8,190, 76,204,196, 0, 0,128, 1, 0, 0, 2,255,
+ 0, 0, 0, 0, 63, 25,153,204, 63,230,103, 10,190, 76,204,212, 0, 0,128, 1, 0, 0, 2,255, 0, 0, 0, 0, 63,128, 0, 27,
+ 63,230,103, 10,190, 76,204,228, 0, 0,128, 1, 0, 0, 2,255, 0, 0, 0, 0, 63,179, 51, 80, 63,230,103, 12,190, 76,204,244,
+ 0, 0,128, 1, 0, 0, 2,255, 0, 0, 0, 0, 62, 76,205,140, 63,230,103, 8, 62, 76,204,216, 0, 0,128, 1, 0, 0, 2,255,
+ 0, 0, 0, 0, 63, 25,153,204, 63,230,103, 10, 62, 76,204,200, 0, 0,128, 1, 0, 0, 2,255, 0, 0, 0, 0, 63,128, 0, 27,
+ 63,230,103, 10, 62, 76,204,184, 0, 0,128, 1, 0, 0, 2,255, 0, 0, 0, 0, 63,179, 51, 80, 63,230,103, 12, 62, 76,204,168,
+ 0, 0,128, 1, 0, 0, 2,255, 0, 0, 0, 0, 62, 76,205,152, 63,230,103, 8, 63, 25,153,158, 0, 0,128, 1, 0, 0, 2,255,
+ 0, 0, 0, 0, 63, 25,153,207, 63,230,103, 10, 63, 25,153,154, 0, 0,128, 1, 0, 0, 2,255, 0, 0, 0, 0, 63,128, 0, 28,
+ 63,230,103, 10, 63, 25,153,150, 0, 0,128, 1, 0, 0, 2,255, 0, 0, 0, 0, 63,179, 51, 81, 63,230,103, 12, 63, 25,153,150,
+ 0, 0,128, 1, 0, 0, 2,255, 0, 0, 0, 0, 62, 76,205,140, 63,230,103, 8,191,128, 0, 3, 0, 0,165,127, 90,129, 0,255,
+ 0, 0, 0, 0, 63, 25,153,204, 63,230,103, 10,191,128, 0, 4, 0, 0,165,127, 90,129, 0,255, 0, 0, 0, 0, 63,128, 0, 27,
+ 63,230,103, 10,191,128, 0, 6, 0, 0,165,127, 90,129, 0,255, 0, 0, 0, 0, 63,179, 51, 80, 63,230,103, 12,191,128, 0, 7,
+ 0, 0,165,127, 90,129, 0,255, 0, 0, 0, 0,190, 76,205,144, 63,230,103, 12, 63, 25,153,150, 0, 0,128, 1, 0, 0, 2,255,
+ 0, 0, 0, 0,190, 76,205,152, 63,230,103, 12, 62, 76,204,168, 0, 0,128, 1, 0, 0, 2,255, 0, 0, 0, 0,190, 76,205,152,
+ 63,230,103, 12,190, 76,204,244, 0, 0,128, 1, 0, 0, 2,255, 0, 0, 0, 0,190, 76,205,152, 63,230,103, 12,191, 25,153,168,
+ 0, 0,128, 1, 0, 0, 2,255, 0, 0, 0, 0,190, 76,205,152, 62, 76,209,160,191,128, 0, 3, 0, 0, 0, 0,127,255, 2,255,
+ 0, 0, 0, 0,190, 76,205,152, 63, 25,154,209,191,128, 0, 3, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,190, 76,205,152,
+ 63,128, 0,158,191,128, 0, 3, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,190, 76,205,144, 63,179, 51,210,191,128, 0, 3,
+ 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 63,230,102,131, 63,230,103, 7,191, 25,153,155,165,127,165,127, 0, 0, 2,255,
+ 0, 0, 0, 0, 63,230,102,131, 63,179, 51,212,191, 25,153,159,128, 1, 0, 0, 0, 0, 2,255, 0, 0, 0, 0, 63,230,102,131,
+ 63,128, 0,160,191, 25,153,163,128, 1, 0, 0, 0, 0, 2,255, 0, 0, 0, 0, 63,230,102,135, 63, 25,154,207,191, 25,153,167,
+128, 1, 0, 0, 0, 0, 2,255, 0, 0, 0, 0, 63,230,102,131, 63,230,103, 7,190, 76,204,193,165,127,165,127, 0, 0, 2,255,
+ 0, 0, 0, 0, 63,230,102,131, 63,179, 51,212,190, 76,204,209,128, 1, 0, 0, 0, 0, 2,255, 0, 0, 0, 0, 63,230,102,131,
+ 63,128, 0,160,190, 76,204,225,128, 1, 0, 0, 0, 0, 2,255, 0, 0, 0, 0, 63,230,102,135, 63, 25,154,207,190, 76,204,241,
+128, 1, 0, 0, 0, 0, 2,255, 0, 0, 0, 0, 63,230,102,131, 63,230,103, 7, 62, 76,204,219,165,127,165,127, 0, 0, 2,255,
+ 0, 0, 0, 0, 63,230,102,131, 63,179, 51,212, 62, 76,204,203,128, 1, 0, 0, 0, 0, 2,255, 0, 0, 0, 0, 63,230,102,131,
+ 63,128, 0,160, 62, 76,204,187,128, 1, 0, 0, 0, 0, 2,255, 0, 0, 0, 0, 63,230,102,135, 63, 25,154,207, 62, 76,204,171,
+128, 1, 0, 0, 0, 0, 2,255, 0, 0, 0, 0, 63,230,102,131, 63,230,103, 7, 63, 25,153,159,165,127,165,127, 0, 0, 2,255,
+ 0, 0, 0, 0, 63,230,102,131, 63,179, 51,212, 63, 25,153,155,128, 1, 0, 0, 0, 0, 2,255, 0, 0, 0, 0, 63,230,102,131,
+ 63,128, 0,156, 63, 25,153,151,128, 1, 0, 0, 0, 0, 2,255, 0, 0, 0, 0, 63,230,102,135, 63, 25,154,207, 63, 25,153,151,
+128, 1, 0, 0, 0, 0, 2,255, 0, 0, 0, 0, 63,230,102,131, 63,230,103, 7,191,128, 0, 3,128, 1, 0, 0, 0, 0, 2,255,
+ 0, 0, 0, 0, 63,230,102,131, 63,128, 0,160,191,128, 0, 6,165,127, 0, 0, 90,129, 2,255, 0, 0, 0, 0, 63,230,102,127,
+ 62, 76,208, 28,191,128, 0, 3,165,127, 0, 0, 90,129, 2,255, 0, 0, 0, 0, 63,230,102,131,190, 76,201,136, 63, 25,153,155,
+128, 1, 0, 0, 0, 0, 2,255, 0, 0, 0, 0, 63,230,102,127, 62, 76,208, 28, 63, 25,153,159,128, 1, 0, 0, 0, 0, 2,255,
+ 0, 0, 0, 0, 63,230,102,131,190, 76,201,136, 62, 76,204,203,128, 1, 0, 0, 0, 0, 2,255, 0, 0, 0, 0, 63,230,102,127,
+ 62, 76,208, 28, 62, 76,204,219,128, 1, 0, 0, 0, 0, 2,255, 0, 0, 0, 0, 63,230,102,131,190, 76,201,136,190, 76,204,209,
+128, 1, 0, 0, 0, 0, 2,255, 0, 0, 0, 0, 63,230,102,127, 62, 76,208, 28,190, 76,204,193,128, 1, 0, 0, 0, 0, 2,255,
+ 0, 0, 0, 0, 63,230,102,131,190, 76,201,136,191, 25,153,159,128, 1, 0, 0, 0, 0, 2,255, 0, 0, 0, 0, 63,230,102,127,
+ 62, 76,208, 28,191, 25,153,155,128, 1, 0, 0, 0, 0, 2,255, 0, 0, 0, 0, 62, 76,205,150,190, 76,208, 24,191,127,255,254,
+ 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 63, 25,153,207,190, 76,208, 40,191,128, 0, 0, 0, 0, 0, 0,127,255, 2,255,
+ 0, 0, 0, 0, 63,128, 0, 28,190, 76,208, 56,191,128, 0, 1, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 63,179, 51, 81,
+190, 76,208, 72,191,128, 0, 3, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 63,230,102,133,190, 76,208, 88,191,128, 0, 4,
+128, 1, 0, 0, 0, 0, 2,255, 0, 0, 0, 0, 63,230,102,133,190, 76,208, 88, 63,127,255,146,128, 1, 0, 0, 0, 0, 2,255,
+ 0, 0, 0, 0, 63,179, 51, 81,190, 76,208, 72, 63,127,255,148, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 63,128, 0, 28,
+190, 76,208, 56, 63,127,255,152, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 63, 25,153,207,190, 76,208, 40, 63,127,255,154,
+ 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 62, 76,205,150,190, 76,208, 24, 63,127,255,156, 0, 0, 0, 0,127,255, 2,255,
+ 0, 0, 0, 0, 63,230,102,127, 62, 76,208, 28, 63,127,255,148,165,127, 0, 0, 90,129, 2,255, 0, 0, 0, 0, 63,230,102,131,
+ 63,128, 0,160, 63,127,255,142,165,127, 0, 0, 90,129, 2,255, 0, 0, 0, 0, 63,230,102,131, 63,230,103, 7, 63,127,255,148,
+128, 1, 0, 0, 0, 0, 2,255, 0, 0, 0, 0,190, 76,205,144, 63,179, 51,210, 63,127,255,148, 0, 0, 0, 0,127,255, 2,255,
+ 0, 0, 0, 0,190, 76,205,152, 63,128, 0,158, 63,127,255,148, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,190, 76,205,152,
+ 63, 25,154,209, 63,127,255,148, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,190, 76,205,152, 62, 76,209,160, 63,127,255,148,
+ 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 63,179, 51, 80, 63,230,103, 12, 63,127,255,140, 0, 0,165,127, 90,129, 2,255,
+ 0, 0, 0, 0, 63,128, 0, 27, 63,230,103, 10, 63,127,255,142, 0, 0,165,127, 90,129, 2,255, 0, 0, 0, 0, 63, 25,153,204,
+ 63,230,103, 10, 63,127,255,146, 0, 0,165,127, 90,129, 2,255, 0, 0, 0, 0, 62, 76,205,140, 63,230,103, 8, 63,127,255,148,
+ 0, 0,165,127, 90,129, 2,255, 0, 0, 0, 0, 62, 76,205,140, 62, 76,209,204, 63,127,255,154, 0, 0, 0, 0,127,255, 2,255,
+ 0, 0, 0, 0, 63, 25,153,204, 62, 76,209,188, 63,127,255,152, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 63,128, 0, 27,
+ 62, 76,209,176, 63,127,255,150, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 63,179, 51, 80, 62, 76,209,160, 63,127,255,148,
+ 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 62, 76,205,140, 63, 25,154,221, 63,127,255,156, 0, 0, 0, 0,127,255, 2,255,
+ 0, 0, 0, 0, 63, 25,153,204, 63, 25,154,217, 63,127,255,154, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 63,128, 0, 27,
+ 63, 25,154,213, 63,127,255,150, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 63,179, 51, 80, 63, 25,154,209, 63,127,255,148,
+ 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 62, 76,205,140, 63,128, 0,163, 63,127,255,156, 0, 0, 0, 0,127,255, 2,255,
+ 0, 0, 0, 0, 63, 25,153,204, 63,128, 0,162, 63,127,255,154, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 63,128, 0, 27,
+ 63,128, 0,160, 63,127,255,150, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 63,179, 51, 80, 63,128, 0,158, 63,127,255,148,
+ 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 62, 76,205,152, 63,179, 51,216, 63,127,255,156, 0, 0, 0, 0,127,255, 2,255,
+ 0, 0, 0, 0, 63, 25,153,207, 63,179, 51,214, 63,127,255,154, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 63,128, 0, 28,
+ 63,179, 51,212, 63,127,255,152, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 63,179, 51, 81, 63,179, 51,210, 63,127,255,148,
+ 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 63,230,102,133, 63, 25,154,206, 63,127,255,146,165,127, 0, 0, 90,129, 2,255,
+ 0, 0, 0, 0, 63,230,102,133, 63,179, 51,208, 63,127,255,146,165,127, 0, 0, 90,129, 2,255, 0, 0, 0, 0,190, 76,205,144,
+ 62, 76,201,140, 63,127,255,148,127,255, 0, 0, 0, 0, 1,255, 0, 0, 0, 0,190, 76,205,136, 63,127,255, 52, 63,127,255,148,
+127,255, 0, 0, 0, 0, 1,255, 0, 0, 0, 0,190, 76,205,128,190, 76,208, 48, 63,127,255,150,127,255, 0, 0, 0, 0, 3,255,
+ 0, 0, 0, 0,190, 76,205,120, 63, 25,152,194, 63,127,255,144,127,255, 0, 0, 0, 0, 1,255, 0, 0, 0, 0,190, 76,205, 80,
+ 63,179, 50,254, 63,127,255,150,127,255, 0, 0, 0, 0, 1,255, 0, 0, 0, 0,190, 76,205,128, 63,230,103, 12, 63,127,255,148,
+127,255, 0, 0, 0, 0, 3,255, 0, 0, 0, 0,190, 76,205,128, 63,230,103, 12,191,128, 0, 5,127,255, 0, 0, 0, 0, 3,255,
+ 0, 0, 0, 0,190, 76,205, 80, 63,179, 50,254,191, 25,153,156,127,255, 0, 0, 0, 0, 3,255, 0, 0, 0, 0,190, 76,205,112,
+ 63,230,102, 50,191, 25,153,160,127,255, 0, 0, 0, 0, 3,255, 0, 0, 0, 0,190, 76,205, 80, 63,179, 50,254,190, 76,204,195,
+127,255, 0, 0, 0, 0, 3,255, 0, 0, 0, 0,190, 76,205,112, 63,230,102, 50,190, 76,204,211,127,255, 0, 0, 0, 0, 3,255,
+ 0, 0, 0, 0,190, 76,205, 80, 63,179, 50,254, 62, 76,204,221,127,255, 0, 0, 0, 0, 3,255, 0, 0, 0, 0,190, 76,205,112,
+ 63,230,102, 50, 62, 76,204,205,127,255, 0, 0, 0, 0, 3,255, 0, 0, 0, 0,190, 76,205, 80, 63,179, 50,254, 63, 25,153,160,
+127,255, 0, 0, 0, 0, 3,255, 0, 0, 0, 0,190, 76,205,112, 63,230,102, 50, 63, 25,153,156,127,255, 0, 0, 0, 0, 3,255,
+ 0, 0, 0, 0,190, 76,205, 80, 63,179, 50,254,191,128, 0, 4,127,255, 0, 0, 0, 0, 1,255, 0, 0, 0, 0,190, 76,205,120,
+ 63, 25,152,194,191,128, 0, 7,127,255, 0, 0, 0, 0, 1,255, 0, 0, 0, 0,190, 76,205,128,190, 76,208, 48,191,128, 0, 4,
+127,255, 0, 0, 0, 0, 3,255, 0, 0, 0, 0,190, 76,205,152, 63,127,255, 52, 63, 25,153,152,127,255, 0, 0, 0, 0, 3,255,
+ 0, 0, 0, 0,190, 76,205,120, 63, 25,152,202, 63, 25,153,152,127,255, 0, 0, 0, 0, 3,255, 0, 0, 0, 0,190, 76,205,128,
+ 62, 76,201,108, 63, 25,153,156,127,255, 0, 0, 0, 0, 3,255, 0, 0, 0, 0,190, 76,205,128,190, 76,208, 48, 63, 25,153,160,
+127,255, 0, 0, 0, 0, 1,255, 0, 0, 0, 0,190, 76,205,152, 63,127,255, 52, 62, 76,204,173,127,255, 0, 0, 0, 0, 3,255,
+ 0, 0, 0, 0,190, 76,205,120, 63, 25,152,194, 62, 76,204,189,127,255, 0, 0, 0, 0, 3,255, 0, 0, 0, 0,190, 76,205,128,
+ 62, 76,201,108, 62, 76,204,205,127,255, 0, 0, 0, 0, 3,255, 0, 0, 0, 0,190, 76,205,128,190, 76,208, 48, 62, 76,204,221,
+127,255, 0, 0, 0, 0, 1,255, 0, 0, 0, 0,190, 76,205,152, 63,127,255, 52,190, 76,204,243,127,255, 0, 0, 0, 0, 3,255,
+ 0, 0, 0, 0,190, 76,205,120, 63, 25,152,194,190, 76,204,227,127,255, 0, 0, 0, 0, 3,255, 0, 0, 0, 0,190, 76,205,128,
+ 62, 76,201,108,190, 76,204,211,127,255, 0, 0, 0, 0, 3,255, 0, 0, 0, 0,190, 76,205,128,190, 76,208, 48,190, 76,204,195,
+127,255, 0, 0, 0, 0, 1,255, 0, 0, 0, 0,190, 76,205,152, 63,127,255, 52,191, 25,153,168,127,255, 0, 0, 0, 0, 3,255,
+ 0, 0, 0, 0,190, 76,205,120, 63, 25,152,194,191, 25,153,164,127,255, 0, 0, 0, 0, 3,255, 0, 0, 0, 0,190, 76,205,128,
+ 62, 76,201,108,191, 25,153,160,127,255, 0, 0, 0, 0, 3,255, 0, 0, 0, 0,190, 76,205,128,190, 76,208, 48,191, 25,153,156,
+127,255, 0, 0, 0, 0, 1,255, 0, 0, 0, 0,190, 76,205,136, 63,127,255, 52,191,128, 0, 5,127,255, 0, 0, 0, 0, 1,255,
+ 0, 0, 0, 0,190, 76,205,144, 62, 76,201,140,191,128, 0, 5,127,255, 0, 0, 0, 0, 1,255, 0, 0, 0, 0, 63,179, 51, 36,
+190, 76,208, 56, 63,127,255,150, 0, 0,127,255, 0, 0, 3,255, 0, 0, 0, 0, 63,127,255,222,190, 76,208, 80, 63,127,255,148,
+ 0, 0,127,255, 0, 0, 3,255, 0, 0, 0, 0, 63, 25,153,116,190, 76,208, 80, 63,127,255,144, 0, 0,127,255, 0, 0, 3,255,
+ 0, 0, 0, 0, 62, 76,204, 44,190, 76,208,104, 63,127,255,142, 0, 0,127,255, 0, 0, 3,255, 0, 0, 0, 0,190, 76,205,112,
+190, 76,208, 64, 63,127,255,150,231, 94,231, 94,123, 41, 1,255, 0, 0, 0, 0,190, 76,205,112,190, 76,208, 64,191,128, 0, 4,
+231, 94,231, 94,132,215, 1,255, 0, 0, 0, 0,190, 76,205,112,190, 76,208, 64, 63, 25,153,160, 0, 0,127,255, 0, 0, 1,255,
+ 0, 0, 0, 0,190, 76,205,112,190, 76,208, 64, 62, 76,204,221, 0, 0,127,255, 0, 0, 1,255, 0, 0, 0, 0,190, 76,205,112,
+190, 76,208, 64,190, 76,204,195, 0, 0,127,255, 0, 0, 1,255, 0, 0, 0, 0,190, 76,205,112,190, 76,208, 64,191, 25,153,156,
+ 0, 0,127,255, 0, 0, 1,255, 0, 0, 0, 0, 63,230,102,136,190, 76,208, 88,191, 25,153,169, 0, 0,127,255, 0, 0, 3,255,
+ 0, 0, 0, 0, 63,230,102,136,190, 76,208, 88,190, 76,204,246, 0, 0,127,255, 0, 0, 3,255, 0, 0, 0, 0, 63,230,102,136,
+190, 76,208, 88, 62, 76,204,170, 0, 0,127,255, 0, 0, 3,255, 0, 0, 0, 0, 63,230,102,135,190, 76,208, 88, 63, 25,153,151,
+ 0, 0,127,255, 0, 0, 3,255, 0, 0, 0, 0, 62, 76,204, 44,190, 76,208,104,191,128, 0, 8, 0, 0,127,255, 0, 0, 3,255,
+ 0, 0, 0, 0, 63, 25,153,116,190, 76,208, 80,191,128, 0, 7, 0, 0,127,255, 0, 0, 3,255, 0, 0, 0, 0, 63,127,255,222,
+190, 76,208, 80,191,128, 0, 5, 0, 0,127,255, 0, 0, 3,255, 0, 0, 0, 0, 63,179, 51, 36,190, 76,208, 56,191,128, 0, 4,
+ 0, 0,127,255, 0, 0, 3,255, 0, 0, 0, 0, 62, 76,204, 36,190, 76,208,104, 63, 25,153,151, 0, 0,127,255, 0, 0, 3,255,
+ 0, 0, 0, 0, 63, 25,153,114,190, 76,208, 80, 63, 25,153,151, 0, 0,127,255, 0, 0, 3,255, 0, 0, 0, 0, 63,127,255,220,
+190, 76,208, 80, 63, 25,153,155, 0, 0,127,255, 0, 0, 3,255, 0, 0, 0, 0, 63,179, 51, 34,190, 76,208, 56, 63, 25,153,159,
+ 0, 0,127,255, 0, 0, 3,255, 0, 0, 0, 0, 62, 76,204, 44,190, 76,208,104, 62, 76,204,170, 0, 0,127,255, 0, 0, 3,255,
+ 0, 0, 0, 0, 63, 25,153,116,190, 76,208, 80, 62, 76,204,186, 0, 0,127,255, 0, 0, 3,255, 0, 0, 0, 0, 63,127,255,222,
+190, 76,208, 80, 62, 76,204,202, 0, 0,127,255, 0, 0, 3,255, 0, 0, 0, 0, 63,179, 51, 36,190, 76,208, 56, 62, 76,204,218,
+ 0, 0,127,255, 0, 0, 3,255, 0, 0, 0, 0, 62, 76,204, 44,190, 76,208,104,190, 76,204,246, 0, 0,127,255, 0, 0, 3,255,
+ 0, 0, 0, 0, 63, 25,153,116,190, 76,208, 80,190, 76,204,230, 0, 0,127,255, 0, 0, 3,255, 0, 0, 0, 0, 63,127,255,222,
+190, 76,208, 80,190, 76,204,214, 0, 0,127,255, 0, 0, 3,255, 0, 0, 0, 0, 63,179, 51, 36,190, 76,208, 56,190, 76,204,198,
+ 0, 0,127,255, 0, 0, 3,255, 0, 0, 0, 0, 62, 76,204, 44,190, 76,208,104,191, 25,153,169, 0, 0,127,255, 0, 0, 3,255,
+ 0, 0, 0, 0, 63, 25,153,116,190, 76,208, 80,191, 25,153,165, 0, 0,127,255, 0, 0, 3,255, 0, 0, 0, 0, 63,127,255,222,
+190, 76,208, 80,191, 25,153,161, 0, 0,127,255, 0, 0, 3,255, 0, 0, 0, 0, 63,179, 51, 36,190, 76,208, 56,191, 25,153,157,
+ 0, 0,127,255, 0, 0, 3,255, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 1, 44, 13, 65,118, 48, 0, 0, 1, 35, 0, 0, 0, 5,
+ 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,161, 24, 32, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 14, 28, 7,161, 24, 32, 0, 0, 0, 55, 0, 0, 1, 45,
+ 0, 0, 0, 4, 0, 0, 0, 5, 0, 0, 0, 34, 0, 0, 0, 3, 0, 0, 0, 4, 0, 0, 0, 34, 0, 0, 0, 2, 0, 0, 0, 3,
+ 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 34, 0, 0, 0, 5, 0, 0, 0, 9, 0, 0, 0, 34, 0, 0, 0, 8,
+ 0, 0, 0, 9, 0, 0, 0, 34, 0, 0, 0, 4, 0, 0, 0, 8, 0, 0, 0, 34, 0, 0, 0, 7, 0, 0, 0, 8, 0, 0, 0, 34,
+ 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 34, 0, 0, 0, 6, 0, 0, 0, 7, 0, 0, 0, 34, 0, 0, 0, 2, 0, 0, 0, 6,
+ 0, 0, 0, 34, 0, 0, 0, 9, 0, 0, 0, 13, 0, 0, 0, 34, 0, 0, 0, 12, 0, 0, 0, 13, 0, 0, 0, 34, 0, 0, 0, 8,
+ 0, 0, 0, 12, 0, 0, 0, 34, 0, 0, 0, 11, 0, 0, 0, 12, 0, 0, 0, 34, 0, 0, 0, 7, 0, 0, 0, 11, 0, 0, 0, 34,
+ 0, 0, 0, 10, 0, 0, 0, 11, 0, 0, 0, 34, 0, 0, 0, 6, 0, 0, 0, 10, 0, 0, 0, 34, 0, 0, 0, 1, 0, 0, 0, 10,
+ 0, 0, 0, 34, 0, 0, 0, 13, 0, 0, 0, 17, 0, 0, 0, 34, 0, 0, 0, 16, 0, 0, 0, 17, 0, 0, 0, 34, 0, 0, 0, 12,
+ 0, 0, 0, 16, 0, 0, 0, 34, 0, 0, 0, 15, 0, 0, 0, 16, 0, 0, 0, 34, 0, 0, 0, 11, 0, 0, 0, 15, 0, 0, 0, 34,
+ 0, 0, 0, 14, 0, 0, 0, 15, 0, 0, 0, 34, 0, 0, 0, 10, 0, 0, 0, 14, 0, 0, 0, 34, 0, 0, 0, 21, 0, 0, 0, 37,
+ 0, 0, 0, 34, 0, 0, 0, 20, 0, 0, 0, 36, 0, 0, 0, 34, 0, 0, 0, 19, 0, 0, 0, 35, 0, 0, 0, 34, 0, 0, 0, 18,
+ 0, 0, 0, 34, 0, 0, 0, 34, 0, 0, 0, 21, 0, 0, 0, 25, 0, 0, 0, 34, 0, 0, 0, 20, 0, 0, 0, 21, 0, 0, 0, 34,
+ 0, 0, 0, 20, 0, 0, 0, 24, 0, 0, 0, 34, 0, 0, 0, 19, 0, 0, 0, 20, 0, 0, 0, 34, 0, 0, 0, 19, 0, 0, 0, 23,
+ 0, 0, 0, 34, 0, 0, 0, 18, 0, 0, 0, 19, 0, 0, 0, 34, 0, 0, 0, 18, 0, 0, 0, 22, 0, 0, 0, 34, 0, 0, 0, 25,
+ 0, 0, 0, 29, 0, 0, 0, 34, 0, 0, 0, 24, 0, 0, 0, 25, 0, 0, 0, 34, 0, 0, 0, 24, 0, 0, 0, 28, 0, 0, 0, 34,
+ 0, 0, 0, 23, 0, 0, 0, 24, 0, 0, 0, 34, 0, 0, 0, 23, 0, 0, 0, 27, 0, 0, 0, 34, 0, 0, 0, 22, 0, 0, 0, 23,
+ 0, 0, 0, 34, 0, 0, 0, 22, 0, 0, 0, 26, 0, 0, 0, 34, 0, 0, 0, 29, 0, 0, 0, 33, 0, 0, 0, 34, 0, 0, 0, 28,
+ 0, 0, 0, 29, 0, 0, 0, 34, 0, 0, 0, 28, 0, 0, 0, 32, 0, 0, 0, 34, 0, 0, 0, 27, 0, 0, 0, 28, 0, 0, 0, 34,
+ 0, 0, 0, 27, 0, 0, 0, 31, 0, 0, 0, 34, 0, 0, 0, 26, 0, 0, 0, 27, 0, 0, 0, 34, 0, 0, 0, 26, 0, 0, 0, 30,
+ 0, 0, 0, 34, 0, 0, 0, 32, 0, 0, 0, 33, 0, 0, 0, 34, 0, 0, 0, 31, 0, 0, 0, 32, 0, 0, 0, 34, 0, 0, 0, 30,
+ 0, 0, 0, 31, 0, 0, 0, 34, 0, 0, 0, 34, 0, 0, 0, 35, 0, 0, 0, 34, 0, 0, 0, 36, 0, 0, 0, 37, 0, 0, 0, 34,
+ 0, 0, 0, 2, 0, 0, 0, 37, 0, 0, 0, 34, 0, 0, 0, 3, 0, 0, 0, 36, 0, 0, 0, 34, 0, 0, 0, 4, 0, 0, 0, 35,
+ 0, 0, 0, 34, 0, 0, 0, 5, 0, 0, 0, 34, 0, 0, 0, 34, 0, 0, 0, 38, 0, 0, 0, 39, 0, 0, 0, 34, 0, 0, 0, 40,
+ 0, 0, 0, 41, 0, 0, 0, 34, 0, 0, 0, 42, 0, 0, 0, 43, 0, 0, 0, 34, 0, 0, 0, 44, 0, 0, 0, 45, 0, 0, 0, 34,
+ 0, 0, 0, 30, 0, 0, 0, 38, 0, 0, 0, 34, 0, 0, 0, 26, 0, 0, 0, 39, 0, 0, 0, 34, 0, 0, 0, 22, 0, 0, 0, 40,
+ 0, 0, 0, 34, 0, 0, 0, 18, 0, 0, 0, 41, 0, 0, 0, 34, 0, 0, 0, 17, 0, 0, 0, 42, 0, 0, 0, 34, 0, 0, 0, 13,
+ 0, 0, 0, 43, 0, 0, 0, 34, 0, 0, 0, 9, 0, 0, 0, 44, 0, 0, 0, 34, 0, 0, 0, 5, 0, 0, 0, 45, 0, 0, 0, 34,
+ 0, 0, 0, 49, 0, 0, 0, 72, 0, 0, 0, 34, 0, 0, 0, 53, 0, 0, 0, 70, 0, 0, 0, 34, 0, 0, 0, 57, 0, 0, 0, 68,
+ 0, 0, 0, 34, 0, 0, 0, 61, 0, 0, 0, 66, 0, 0, 0, 34, 0, 0, 0, 48, 0, 0, 0, 63, 0, 0, 0, 34, 0, 0, 0, 46,
+ 0, 0, 0, 62, 0, 0, 0, 34, 0, 0, 0, 49, 0, 0, 0, 53, 0, 0, 0, 34, 0, 0, 0, 48, 0, 0, 0, 49, 0, 0, 0, 34,
+ 0, 0, 0, 48, 0, 0, 0, 52, 0, 0, 0, 34, 0, 0, 0, 47, 0, 0, 0, 48, 0, 0, 0, 34, 0, 0, 0, 47, 0, 0, 0, 51,
+ 0, 0, 0, 34, 0, 0, 0, 46, 0, 0, 0, 47, 0, 0, 0, 34, 0, 0, 0, 46, 0, 0, 0, 50, 0, 0, 0, 34, 0, 0, 0, 53,
+ 0, 0, 0, 57, 0, 0, 0, 34, 0, 0, 0, 52, 0, 0, 0, 53, 0, 0, 0, 34, 0, 0, 0, 52, 0, 0, 0, 56, 0, 0, 0, 34,
+ 0, 0, 0, 51, 0, 0, 0, 52, 0, 0, 0, 34, 0, 0, 0, 51, 0, 0, 0, 55, 0, 0, 0, 34, 0, 0, 0, 50, 0, 0, 0, 51,
+ 0, 0, 0, 34, 0, 0, 0, 50, 0, 0, 0, 54, 0, 0, 0, 34, 0, 0, 0, 57, 0, 0, 0, 61, 0, 0, 0, 34, 0, 0, 0, 56,
+ 0, 0, 0, 57, 0, 0, 0, 34, 0, 0, 0, 56, 0, 0, 0, 60, 0, 0, 0, 34, 0, 0, 0, 55, 0, 0, 0, 56, 0, 0, 0, 34,
+ 0, 0, 0, 55, 0, 0, 0, 59, 0, 0, 0, 34, 0, 0, 0, 54, 0, 0, 0, 55, 0, 0, 0, 34, 0, 0, 0, 54, 0, 0, 0, 58,
+ 0, 0, 0, 34, 0, 0, 0, 60, 0, 0, 0, 61, 0, 0, 0, 34, 0, 0, 0, 59, 0, 0, 0, 60, 0, 0, 0, 34, 0, 0, 0, 58,
+ 0, 0, 0, 59, 0, 0, 0, 34, 0, 0, 0, 65, 0, 0, 0, 66, 0, 0, 0, 34, 0, 0, 0, 66, 0, 0, 0, 68, 0, 0, 0, 34,
+ 0, 0, 0, 67, 0, 0, 0, 68, 0, 0, 0, 34, 0, 0, 0, 68, 0, 0, 0, 70, 0, 0, 0, 34, 0, 0, 0, 69, 0, 0, 0, 70,
+ 0, 0, 0, 34, 0, 0, 0, 67, 0, 0, 0, 69, 0, 0, 0, 34, 0, 0, 0, 70, 0, 0, 0, 72, 0, 0, 0, 34, 0, 0, 0, 71,
+ 0, 0, 0, 72, 0, 0, 0, 34, 0, 0, 0, 64, 0, 0, 0, 72, 0, 0, 0, 34, 0, 0, 0, 1, 0, 0, 0, 63, 0, 0, 0, 34,
+ 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 62, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 47,
+ 0, 0, 0, 34, 0, 0, 0, 1, 0, 0, 0, 49, 0, 0, 0, 34, 0, 0, 0, 1, 0, 0, 0, 64, 0, 0, 0, 34, 0, 0, 0, 33,
+ 0, 0, 0, 58, 0, 0, 0, 34, 0, 0, 0, 29, 0, 0, 0, 54, 0, 0, 0, 34, 0, 0, 0, 25, 0, 0, 0, 50, 0, 0, 0, 34,
+ 0, 0, 0, 21, 0, 0, 0, 46, 0, 0, 0, 34, 0, 0, 0, 14, 0, 0, 0, 64, 0, 0, 0, 34, 0, 0, 0, 6, 0, 0, 0, 63,
+ 0, 0, 0, 34, 0, 0, 0, 75, 0, 0, 0, 76, 0, 0, 0, 34, 0, 0, 0, 73, 0, 0, 0, 74, 0, 0, 0, 34, 0, 0, 0, 71,
+ 0, 0, 0, 77, 0, 0, 0, 34, 0, 0, 0, 64, 0, 0, 0, 77, 0, 0, 0, 34, 0, 0, 0, 14, 0, 0, 0, 76, 0, 0, 0, 34,
+ 0, 0, 0, 15, 0, 0, 0, 75, 0, 0, 0, 34, 0, 0, 0, 16, 0, 0, 0, 74, 0, 0, 0, 34, 0, 0, 0, 17, 0, 0, 0, 73,
+ 0, 0, 0, 34, 0, 0, 0, 82, 0, 0, 0, 94, 0, 0, 0, 34, 0, 0, 0, 81, 0, 0, 0, 95, 0, 0, 0, 34, 0, 0, 0, 80,
+ 0, 0, 0, 96, 0, 0, 0, 34, 0, 0, 0, 79, 0, 0, 0, 97, 0, 0, 0, 34, 0, 0, 0, 78, 0, 0, 0, 83, 0, 0, 0, 34,
+ 0, 0, 0, 81, 0, 0, 0, 82, 0, 0, 0, 34, 0, 0, 0, 79, 0, 0, 0, 80, 0, 0, 0, 34, 0, 0, 0, 84, 0, 0, 0,105,
+ 0, 0, 0, 34, 0, 0, 0, 83, 0, 0, 0, 97, 0, 0, 0, 34, 0, 0, 0, 83, 0, 0, 0,110, 0, 0, 0, 34, 0, 0, 0, 85,
+ 0, 0, 0,111, 0, 0, 0, 34, 0, 0, 0, 84, 0, 0, 0,111, 0, 0, 0, 34, 0, 0, 0, 84, 0, 0, 0,110, 0, 0, 0, 34,
+ 0, 0, 0, 86, 0, 0, 0,106, 0, 0, 0, 34, 0, 0, 0, 87, 0, 0, 0,102, 0, 0, 0, 34, 0, 0, 0, 88, 0, 0, 0, 98,
+ 0, 0, 0, 34, 0, 0, 0, 89, 0, 0, 0, 94, 0, 0, 0, 34, 0, 0, 0, 86, 0, 0, 0, 87, 0, 0, 0, 34, 0, 0, 0, 88,
+ 0, 0, 0, 89, 0, 0, 0, 34, 0, 0, 0, 93, 0, 0, 0,106, 0, 0, 0, 34, 0, 0, 0, 92, 0, 0, 0,107, 0, 0, 0, 34,
+ 0, 0, 0, 91, 0, 0, 0,108, 0, 0, 0, 34, 0, 0, 0, 90, 0, 0, 0,109, 0, 0, 0, 34, 0, 0, 0, 90, 0, 0, 0, 91,
+ 0, 0, 0, 34, 0, 0, 0, 92, 0, 0, 0, 93, 0, 0, 0, 34, 0, 0, 0, 97, 0, 0, 0,101, 0, 0, 0, 34, 0, 0, 0, 96,
+ 0, 0, 0, 97, 0, 0, 0, 34, 0, 0, 0, 96, 0, 0, 0,100, 0, 0, 0, 34, 0, 0, 0, 95, 0, 0, 0, 96, 0, 0, 0, 34,
+ 0, 0, 0, 95, 0, 0, 0, 99, 0, 0, 0, 34, 0, 0, 0, 94, 0, 0, 0, 95, 0, 0, 0, 34, 0, 0, 0, 94, 0, 0, 0, 98,
+ 0, 0, 0, 34, 0, 0, 0,101, 0, 0, 0,110, 0, 0, 0, 34, 0, 0, 0,101, 0, 0, 0,105, 0, 0, 0, 34, 0, 0, 0,100,
+ 0, 0, 0,101, 0, 0, 0, 34, 0, 0, 0,100, 0, 0, 0,104, 0, 0, 0, 34, 0, 0, 0, 99, 0, 0, 0,100, 0, 0, 0, 34,
+ 0, 0, 0, 99, 0, 0, 0,103, 0, 0, 0, 34, 0, 0, 0, 98, 0, 0, 0, 99, 0, 0, 0, 34, 0, 0, 0, 98, 0, 0, 0,102,
+ 0, 0, 0, 34, 0, 0, 0,105, 0, 0, 0,109, 0, 0, 0, 34, 0, 0, 0,104, 0, 0, 0,105, 0, 0, 0, 34, 0, 0, 0,104,
+ 0, 0, 0,108, 0, 0, 0, 34, 0, 0, 0,103, 0, 0, 0,104, 0, 0, 0, 34, 0, 0, 0,103, 0, 0, 0,107, 0, 0, 0, 34,
+ 0, 0, 0,102, 0, 0, 0,103, 0, 0, 0, 34, 0, 0, 0,102, 0, 0, 0,106, 0, 0, 0, 34, 0, 0, 0,109, 0, 0, 0,111,
+ 0, 0, 0, 34, 0, 0, 0,108, 0, 0, 0,109, 0, 0, 0, 34, 0, 0, 0,107, 0, 0, 0,108, 0, 0, 0, 34, 0, 0, 0,106,
+ 0, 0, 0,107, 0, 0, 0, 34, 0, 0, 0, 65, 0, 0, 0, 78, 0, 0, 0, 34, 0, 0, 0, 66, 0, 0, 0, 83, 0, 0, 0, 34,
+ 0, 0, 0, 58, 0, 0, 0, 85, 0, 0, 0, 34, 0, 0, 0, 59, 0, 0, 0,111, 0, 0, 0, 34, 0, 0, 0, 60, 0, 0, 0, 84,
+ 0, 0, 0, 34, 0, 0, 0, 61, 0, 0, 0,110, 0, 0, 0, 34, 0, 0, 0, 30, 0, 0, 0, 93, 0, 0, 0, 34, 0, 0, 0, 31,
+ 0, 0, 0, 92, 0, 0, 0, 34, 0, 0, 0, 32, 0, 0, 0, 91, 0, 0, 0, 34, 0, 0, 0, 33, 0, 0, 0, 90, 0, 0, 0, 34,
+ 0, 0, 0,113, 0, 0, 0,130, 0, 0, 0, 35, 0, 0, 0,115, 0, 0, 0,131, 0, 0, 0, 35, 0, 0, 0,112, 0, 0, 0,132,
+ 0, 0, 0, 35, 0, 0, 0,114, 0, 0, 0,133, 0, 0, 0, 35, 0, 0, 0,116, 0, 0, 0,125, 0, 0, 0, 35, 0, 0, 0,117,
+ 0, 0, 0,126, 0, 0, 0, 35, 0, 0, 0,113, 0, 0, 0,115, 0, 0, 0, 35, 0, 0, 0,112, 0, 0, 0,115, 0, 0, 0,163,
+ 0, 0, 0,112, 0, 0, 0,114, 0, 0, 0, 35, 0, 0, 0,113, 0, 0, 0,116, 0, 0, 0,163, 0, 0, 0,116, 0, 0, 0,117,
+ 0, 0, 0, 35, 0, 0, 0,118, 0, 0, 0,127, 0, 0, 0, 35, 0, 0, 0,118, 0, 0, 0,120, 0, 0, 0, 35, 0, 0, 0,127,
+ 0, 0, 0,146, 0, 0, 0,163, 0, 0, 0,142, 0, 0, 0,146, 0, 0, 0, 35, 0, 0, 0,144, 0, 0, 0,147, 0, 0, 0, 35,
+ 0, 0, 0,129, 0, 0, 0,147, 0, 0, 0, 35, 0, 0, 0,128, 0, 0, 0,147, 0, 0, 0,163, 0, 0, 0,128, 0, 0, 0,146,
+ 0, 0, 0, 35, 0, 0, 0,119, 0, 0, 0,127, 0, 0, 0, 35, 0, 0, 0,119, 0, 0, 0,120, 0, 0, 0, 35, 0, 0, 0,119,
+ 0, 0, 0,121, 0, 0, 0, 35, 0, 0, 0,122, 0, 0, 0,124, 0, 0, 0, 35, 0, 0, 0,121, 0, 0, 0,122, 0, 0, 0, 35,
+ 0, 0, 0,121, 0, 0, 0,123, 0, 0, 0, 35, 0, 0, 0,123, 0, 0, 0,124, 0, 0, 0, 35, 0, 0, 0,123, 0, 0, 0,125,
+ 0, 0, 0, 35, 0, 0, 0,125, 0, 0, 0,126, 0, 0, 0, 35, 0, 0, 0,132, 0, 0, 0,133, 0, 0, 0, 35, 0, 0, 0,131,
+ 0, 0, 0,132, 0, 0, 0, 35, 0, 0, 0,130, 0, 0, 0,131, 0, 0, 0, 35, 0, 0, 0,133, 0, 0, 0,137, 0, 0, 0,163,
+ 0, 0, 0,136, 0, 0, 0,137, 0, 0, 0, 35, 0, 0, 0,132, 0, 0, 0,136, 0, 0, 0, 35, 0, 0, 0,135, 0, 0, 0,136,
+ 0, 0, 0, 35, 0, 0, 0,131, 0, 0, 0,135, 0, 0, 0, 35, 0, 0, 0,134, 0, 0, 0,135, 0, 0, 0, 35, 0, 0, 0,130,
+ 0, 0, 0,134, 0, 0, 0, 35, 0, 0, 0,137, 0, 0, 0,141, 0, 0, 0, 35, 0, 0, 0,140, 0, 0, 0,141, 0, 0, 0, 35,
+ 0, 0, 0,136, 0, 0, 0,140, 0, 0, 0, 35, 0, 0, 0,139, 0, 0, 0,140, 0, 0, 0, 35, 0, 0, 0,135, 0, 0, 0,139,
+ 0, 0, 0, 35, 0, 0, 0,138, 0, 0, 0,139, 0, 0, 0, 35, 0, 0, 0,134, 0, 0, 0,138, 0, 0, 0, 35, 0, 0, 0,141,
+ 0, 0, 0,145, 0, 0, 0,163, 0, 0, 0,144, 0, 0, 0,145, 0, 0, 0, 35, 0, 0, 0,140, 0, 0, 0,144, 0, 0, 0, 35,
+ 0, 0, 0,143, 0, 0, 0,144, 0, 0, 0, 35, 0, 0, 0,139, 0, 0, 0,143, 0, 0, 0, 35, 0, 0, 0,142, 0, 0, 0,143,
+ 0, 0, 0, 35, 0, 0, 0,138, 0, 0, 0,142, 0, 0, 0, 35, 0, 0, 0,129, 0, 0, 0,145, 0, 0, 0, 35, 0, 0, 0,128,
+ 0, 0, 0,143, 0, 0, 0, 35, 0, 0, 0,125, 0, 0, 0,130, 0, 0, 0, 35, 0, 0, 0,123, 0, 0, 0,134, 0, 0, 0, 35,
+ 0, 0, 0,121, 0, 0, 0,138, 0, 0, 0, 35, 0, 0, 0,119, 0, 0, 0,142, 0, 0, 0, 35, 0, 0, 0,151, 0, 0, 0,166,
+ 0, 0, 0, 35, 0, 0, 0,150, 0, 0, 0,167, 0, 0, 0, 35, 0, 0, 0,149, 0, 0, 0,168, 0, 0, 0, 35, 0, 0, 0,148,
+ 0, 0, 0,169, 0, 0, 0, 35, 0, 0, 0,152, 0, 0, 0,154, 0, 0, 0,163, 0, 0, 0,148, 0, 0, 0,149, 0, 0, 0, 35,
+ 0, 0, 0,150, 0, 0, 0,151, 0, 0, 0, 35, 0, 0, 0,157, 0, 0, 0,178, 0, 0, 0, 35, 0, 0, 0,156, 0, 0, 0,174,
+ 0, 0, 0, 35, 0, 0, 0,155, 0, 0, 0,170, 0, 0, 0, 35, 0, 0, 0,154, 0, 0, 0,166, 0, 0, 0, 35, 0, 0, 0,154,
+ 0, 0, 0,155, 0, 0, 0, 35, 0, 0, 0,155, 0, 0, 0,156, 0, 0, 0,163, 0, 0, 0,156, 0, 0, 0,157, 0, 0, 0, 35,
+ 0, 0, 0,153, 0, 0, 0,157, 0, 0, 0,163, 0, 0, 0,158, 0, 0, 0,181, 0, 0, 0, 35, 0, 0, 0,159, 0, 0, 0,177,
+ 0, 0, 0, 35, 0, 0, 0,160, 0, 0, 0,173, 0, 0, 0, 35, 0, 0, 0,161, 0, 0, 0,169, 0, 0, 0, 35, 0, 0, 0,158,
+ 0, 0, 0,159, 0, 0, 0, 35, 0, 0, 0,160, 0, 0, 0,161, 0, 0, 0, 35, 0, 0, 0,162, 0, 0, 0,163, 0, 0, 0, 35,
+ 0, 0, 0,164, 0, 0, 0,165, 0, 0, 0, 35, 0, 0, 0,168, 0, 0, 0,169, 0, 0, 0, 35, 0, 0, 0,167, 0, 0, 0,168,
+ 0, 0, 0, 35, 0, 0, 0,166, 0, 0, 0,167, 0, 0, 0, 35, 0, 0, 0,169, 0, 0, 0,173, 0, 0, 0, 35, 0, 0, 0,172,
+ 0, 0, 0,173, 0, 0, 0, 35, 0, 0, 0,168, 0, 0, 0,172, 0, 0, 0, 35, 0, 0, 0,171, 0, 0, 0,172, 0, 0, 0, 35,
+ 0, 0, 0,167, 0, 0, 0,171, 0, 0, 0, 35, 0, 0, 0,170, 0, 0, 0,171, 0, 0, 0, 35, 0, 0, 0,166, 0, 0, 0,170,
+ 0, 0, 0, 35, 0, 0, 0,173, 0, 0, 0,177, 0, 0, 0, 35, 0, 0, 0,176, 0, 0, 0,177, 0, 0, 0, 35, 0, 0, 0,172,
+ 0, 0, 0,176, 0, 0, 0, 35, 0, 0, 0,175, 0, 0, 0,176, 0, 0, 0, 35, 0, 0, 0,171, 0, 0, 0,175, 0, 0, 0, 35,
+ 0, 0, 0,174, 0, 0, 0,175, 0, 0, 0, 35, 0, 0, 0,170, 0, 0, 0,174, 0, 0, 0, 35, 0, 0, 0,177, 0, 0, 0,181,
+ 0, 0, 0, 35, 0, 0, 0,180, 0, 0, 0,181, 0, 0, 0, 35, 0, 0, 0,176, 0, 0, 0,180, 0, 0, 0, 35, 0, 0, 0,179,
+ 0, 0, 0,180, 0, 0, 0, 35, 0, 0, 0,175, 0, 0, 0,179, 0, 0, 0, 35, 0, 0, 0,178, 0, 0, 0,179, 0, 0, 0, 35,
+ 0, 0, 0,174, 0, 0, 0,178, 0, 0, 0, 35, 0, 0, 0,165, 0, 0, 0,181, 0, 0, 0, 35, 0, 0, 0,164, 0, 0, 0,180,
+ 0, 0, 0, 35, 0, 0, 0,163, 0, 0, 0,179, 0, 0, 0, 35, 0, 0, 0,162, 0, 0, 0,178, 0, 0, 0, 35, 68, 65, 84, 65,
+ 0, 0, 1, 44, 13, 65,119,144, 0, 0, 1, 35, 0, 0, 0, 5, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 7,161, 40, 32, 0, 0, 0, 5, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 85, 86, 84,101,120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 7,161, 46, 32, 0, 0, 0, 6, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 67,111,108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 7,161, 60, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
-176, 14, 0, 0,224, 11,131, 2, 57, 0, 0, 0,188, 0, 0, 0,133,102,230, 63,208, 51,179, 63,146,255,127, 63,127,165, 0, 0,
-129, 90, 2,255,133,102,230, 63,206,154, 25, 63,146,255,127, 63,127,165, 0, 0,129, 90, 2,255, 81, 51,179, 63,210, 51,179, 63,
-148,255,127, 63, 0, 0, 0, 0,255,127, 2,255, 28, 0,128, 63,212, 51,179, 63,152,255,127, 63, 0, 0, 0, 0,255,127, 2,255,
-207,153, 25, 63,214, 51,179, 63,154,255,127, 63, 0, 0, 0, 0,255,127, 2,255,152,205, 76, 62,216, 51,179, 63,156,255,127, 63,
- 0, 0, 0, 0,255,127, 2,255, 80, 51,179, 63,158, 0,128, 63,148,255,127, 63, 0, 0, 0, 0,255,127, 2,255, 27, 0,128, 63,
-160, 0,128, 63,150,255,127, 63, 0, 0, 0, 0,255,127, 2,255,204,153, 25, 63,162, 0,128, 63,154,255,127, 63, 0, 0, 0, 0,
-255,127, 2,255,140,205, 76, 62,163, 0,128, 63,156,255,127, 63, 0, 0, 0, 0,255,127, 2,255, 80, 51,179, 63,209,154, 25, 63,
-148,255,127, 63, 0, 0, 0, 0,255,127, 2,255, 27, 0,128, 63,213,154, 25, 63,150,255,127, 63, 0, 0, 0, 0,255,127, 2,255,
-204,153, 25, 63,217,154, 25, 63,154,255,127, 63, 0, 0, 0, 0,255,127, 2,255,140,205, 76, 62,221,154, 25, 63,156,255,127, 63,
- 0, 0, 0, 0,255,127, 2,255, 80, 51,179, 63,160,209, 76, 62,148,255,127, 63, 0, 0, 0, 0,255,127, 2,255, 27, 0,128, 63,
-176,209, 76, 62,150,255,127, 63, 0, 0, 0, 0,255,127, 2,255,204,153, 25, 63,188,209, 76, 62,152,255,127, 63, 0, 0, 0, 0,
-255,127, 2,255,140,205, 76, 62,204,209, 76, 62,154,255,127, 63, 0, 0, 0, 0,255,127, 2,255,140,205, 76, 62, 8,103,230, 63,
-148,255,127, 63, 0, 0,127,165,129, 90, 0,255,204,153, 25, 63, 10,103,230, 63,146,255,127, 63, 0, 0,127,165,129, 90, 0,255,
- 27, 0,128, 63, 10,103,230, 63,142,255,127, 63, 0, 0,127,165,129, 90, 0,255, 80, 51,179, 63, 12,103,230, 63,140,255,127, 63,
- 0, 0,127,165,129, 90, 0,255,152,205, 76,190, 12,103,230, 63,140,255,127, 63, 0, 0,127,165,129, 90, 0,255,152,205, 76,190,
-160,209, 76, 62,148,255,127, 63, 0, 0, 0, 0,255,127, 2,255,152,205, 76,190,209,154, 25, 63,148,255,127, 63, 0, 0, 0, 0,
-255,127, 2,255,152,205, 76,190,158, 0,128, 63,148,255,127, 63, 0, 0, 0, 0,255,127, 2,255,144,205, 76,190,210, 51,179, 63,
-148,255,127, 63, 0, 0, 0, 0,255,127, 2,255,131,102,230, 63, 7,103,230, 63,148,255,127, 63, 0, 0,127,165,129, 90, 0,255,
-131,102,230, 63,160, 0,128, 63,142,255,127, 63,127,165, 0, 0,129, 90, 2,255,127,102,230, 63, 28,208, 76, 62,148,255,127, 63,
-127,165, 0, 0,129, 90, 2,255,146,205, 76,190, 72,208, 76,190,148,255,127, 63, 0, 0, 0, 0,255,127, 2,255,150,205, 76, 62,
- 24,208, 76,190,156,255,127, 63, 0, 0, 0, 0,255,127, 2,255,207,153, 25, 63, 40,208, 76,190,154,255,127, 63, 0, 0, 0, 0,
-255,127, 2,255, 28, 0,128, 63, 56,208, 76,190,152,255,127, 63, 0, 0, 0, 0,255,127, 2,255, 81, 51,179, 63, 72,208, 76,190,
-148,255,127, 63, 0, 0, 0, 0,255,127, 2,255,133,102,230, 63, 88,208, 76,190,146,255,127, 63, 0, 0, 0, 0,255,127, 2,255,
-133,102,230, 63, 88,208, 76,190, 4, 0,128,191, 0, 0, 0, 0,255,127, 2,255, 81, 51,179, 63, 72,208, 76,190, 3, 0,128,191,
- 0, 0, 0, 0,255,127, 2,255, 28, 0,128, 63, 56,208, 76,190, 1, 0,128,191, 0, 0, 0, 0,255,127, 2,255,207,153, 25, 63,
- 40,208, 76,190, 0, 0,128,191, 0, 0, 0, 0,255,127, 2,255,150,205, 76, 62, 24,208, 76,190,254,255,127,191, 0, 0, 0, 0,
-255,127, 2,255,146,205, 76,190, 72,208, 76,190, 3, 0,128,191, 0, 0, 0, 0,255,127, 2,255,127,102,230, 63, 28,208, 76, 62,
-155,153, 25,191, 1,128, 0, 0, 0, 0, 2,255,131,102,230, 63,136,201, 76,190,159,153, 25,191, 1,128, 0, 0, 0, 0, 2,255,
-127,102,230, 63, 28,208, 76, 62,193,204, 76,190, 1,128, 0, 0, 0, 0, 2,255,131,102,230, 63,136,201, 76,190,209,204, 76,190,
- 1,128, 0, 0, 0, 0, 2,255,127,102,230, 63, 28,208, 76, 62,219,204, 76, 62, 1,128, 0, 0, 0, 0, 2,255,131,102,230, 63,
-136,201, 76,190,203,204, 76, 62, 1,128, 0, 0, 0, 0, 2,255,127,102,230, 63, 28,208, 76, 62,159,153, 25, 63, 1,128, 0, 0,
- 0, 0, 2,255,131,102,230, 63,136,201, 76,190,155,153, 25, 63, 1,128, 0, 0, 0, 0, 2,255,127,102,230, 63, 28,208, 76, 62,
- 3, 0,128,191,127,165, 0, 0,129, 90, 2,255,131,102,230, 63,160, 0,128, 63, 6, 0,128,191,127,165, 0, 0,129, 90, 2,255,
-131,102,230, 63, 7,103,230, 63, 3, 0,128,191, 0, 0,127,165,129, 90, 0,255,135,102,230, 63,207,154, 25, 63,151,153, 25, 63,
- 1,128, 0, 0, 0, 0, 2,255,131,102,230, 63,156, 0,128, 63,151,153, 25, 63, 1,128, 0, 0, 0, 0, 2,255,131,102,230, 63,
-212, 51,179, 63,155,153, 25, 63, 1,128, 0, 0, 0, 0, 2,255,131,102,230, 63, 7,103,230, 63,159,153, 25, 63,127,165,127,165,
- 0, 0, 2,255,135,102,230, 63,207,154, 25, 63,171,204, 76, 62, 1,128, 0, 0, 0, 0, 2,255,131,102,230, 63,160, 0,128, 63,
-187,204, 76, 62, 1,128, 0, 0, 0, 0, 2,255,131,102,230, 63,212, 51,179, 63,203,204, 76, 62, 1,128, 0, 0, 0, 0, 2,255,
-131,102,230, 63, 7,103,230, 63,219,204, 76, 62,127,165,127,165, 0, 0, 2,255,135,102,230, 63,207,154, 25, 63,241,204, 76,190,
- 1,128, 0, 0, 0, 0, 2,255,131,102,230, 63,160, 0,128, 63,225,204, 76,190, 1,128, 0, 0, 0, 0, 2,255,131,102,230, 63,
-212, 51,179, 63,209,204, 76,190, 1,128, 0, 0, 0, 0, 2,255,131,102,230, 63, 7,103,230, 63,193,204, 76,190,127,165,127,165,
- 0, 0, 2,255,135,102,230, 63,207,154, 25, 63,167,153, 25,191, 1,128, 0, 0, 0, 0, 2,255,131,102,230, 63,160, 0,128, 63,
-163,153, 25,191, 1,128, 0, 0, 0, 0, 2,255,131,102,230, 63,212, 51,179, 63,159,153, 25,191, 1,128, 0, 0, 0, 0, 2,255,
-131,102,230, 63, 7,103,230, 63,155,153, 25,191,127,165,127,165, 0, 0, 2,255,144,205, 76,190,210, 51,179, 63, 3, 0,128,191,
- 0, 0, 0, 0,255,127, 2,255,152,205, 76,190,158, 0,128, 63, 3, 0,128,191, 0, 0, 0, 0,255,127, 2,255,152,205, 76,190,
-209,154, 25, 63, 3, 0,128,191, 0, 0, 0, 0,255,127, 2,255,152,205, 76,190,160,209, 76, 62, 3, 0,128,191, 0, 0, 0, 0,
-255,127, 2,255,152,205, 76,190, 12,103,230, 63,168,153, 25,191, 0, 0, 1,128, 0, 0, 2,255,152,205, 76,190, 12,103,230, 63,
-244,204, 76,190, 0, 0, 1,128, 0, 0, 2,255,152,205, 76,190, 12,103,230, 63,168,204, 76, 62, 0, 0, 1,128, 0, 0, 2,255,
-144,205, 76,190, 12,103,230, 63,150,153, 25, 63, 0, 0, 1,128, 0, 0, 2,255,152,205, 76,190, 12,103,230, 63, 7, 0,128,191,
- 0, 0,127,165,129, 90, 0,255, 80, 51,179, 63, 12,103,230, 63, 7, 0,128,191, 0, 0,127,165,129, 90, 0,255, 27, 0,128, 63,
- 10,103,230, 63, 6, 0,128,191, 0, 0,127,165,129, 90, 0,255,204,153, 25, 63, 10,103,230, 63, 4, 0,128,191, 0, 0,127,165,
-129, 90, 0,255,140,205, 76, 62, 8,103,230, 63, 3, 0,128,191, 0, 0,127,165,129, 90, 0,255, 81, 51,179, 63, 12,103,230, 63,
-150,153, 25, 63, 0, 0, 1,128, 0, 0, 2,255, 28, 0,128, 63, 10,103,230, 63,150,153, 25, 63, 0, 0, 1,128, 0, 0, 2,255,
-207,153, 25, 63, 10,103,230, 63,154,153, 25, 63, 0, 0, 1,128, 0, 0, 2,255,152,205, 76, 62, 8,103,230, 63,158,153, 25, 63,
- 0, 0, 1,128, 0, 0, 2,255, 80, 51,179, 63, 12,103,230, 63,168,204, 76, 62, 0, 0, 1,128, 0, 0, 2,255, 27, 0,128, 63,
- 10,103,230, 63,184,204, 76, 62, 0, 0, 1,128, 0, 0, 2,255,204,153, 25, 63, 10,103,230, 63,200,204, 76, 62, 0, 0, 1,128,
- 0, 0, 2,255,140,205, 76, 62, 8,103,230, 63,216,204, 76, 62, 0, 0, 1,128, 0, 0, 2,255, 80, 51,179, 63, 12,103,230, 63,
-244,204, 76,190, 0, 0, 1,128, 0, 0, 2,255, 27, 0,128, 63, 10,103,230, 63,228,204, 76,190, 0, 0, 1,128, 0, 0, 2,255,
-204,153, 25, 63, 10,103,230, 63,212,204, 76,190, 0, 0, 1,128, 0, 0, 2,255,140,205, 76, 62, 8,103,230, 63,196,204, 76,190,
- 0, 0, 1,128, 0, 0, 2,255, 80, 51,179, 63, 12,103,230, 63,168,153, 25,191, 0, 0, 1,128, 0, 0, 2,255, 27, 0,128, 63,
- 10,103,230, 63,164,153, 25,191, 0, 0, 1,128, 0, 0, 2,255,204,153, 25, 63, 10,103,230, 63,160,153, 25,191, 0, 0, 1,128,
- 0, 0, 2,255,140,205, 76, 62, 8,103,230, 63,156,153, 25,191, 0, 0, 1,128, 0, 0, 2,255,140,205, 76, 62,204,209, 76, 62,
-255,255,127,191, 0, 0, 0, 0,255,127, 2,255,204,153, 25, 63,188,209, 76, 62, 1, 0,128,191, 0, 0, 0, 0,255,127, 2,255,
- 27, 0,128, 63,176,209, 76, 62, 2, 0,128,191, 0, 0, 0, 0,255,127, 2,255, 80, 51,179, 63,160,209, 76, 62, 3, 0,128,191,
- 0, 0, 0, 0,255,127, 2,255,140,205, 76, 62,221,154, 25, 63,254,255,127,191, 0, 0, 0, 0,255,127, 2,255,204,153, 25, 63,
-217,154, 25, 63, 0, 0,128,191, 0, 0, 0, 0,255,127, 2,255, 27, 0,128, 63,213,154, 25, 63, 2, 0,128,191, 0, 0, 0, 0,
-255,127, 2,255, 80, 51,179, 63,209,154, 25, 63, 3, 0,128,191, 0, 0, 0, 0,255,127, 2,255,140,205, 76, 62,163, 0,128, 63,
-254,255,127,191, 0, 0, 0, 0,255,127, 2,255,204,153, 25, 63,162, 0,128, 63, 0, 0,128,191, 0, 0, 0, 0,255,127, 2,255,
- 27, 0,128, 63,160, 0,128, 63, 2, 0,128,191, 0, 0, 0, 0,255,127, 2,255, 80, 51,179, 63,158, 0,128, 63, 3, 0,128,191,
- 0, 0, 0, 0,255,127, 2,255,152,205, 76, 62,216, 51,179, 63,254,255,127,191, 0, 0, 0, 0,255,127, 2,255,207,153, 25, 63,
-214, 51,179, 63, 0, 0,128,191, 0, 0, 0, 0,255,127, 2,255, 28, 0,128, 63,212, 51,179, 63, 1, 0,128,191, 0, 0, 0, 0,
-255,127, 2,255, 81, 51,179, 63,210, 51,179, 63, 3, 0,128,191, 0, 0, 0, 0,255,127, 2,255,133,102,230, 63,206,154, 25, 63,
- 4, 0,128,191,127,165, 0, 0,129, 90, 2,255,133,102,230, 63,208, 51,179, 63, 4, 0,128,191,127,165, 0, 0,129, 90, 2,255,
-128,205, 76,190,116,201, 76, 62, 5, 0,128,191,255,127, 0, 0, 0, 0, 16,255,136,205, 76,190, 48,255,127, 63, 5, 0,128,191,
-255,127, 0, 0, 0, 0, 16,255,112,205, 76,190, 64,208, 76,190,156,153, 25,191,255,127, 0, 0, 0, 0, 16,255,112,205, 76,190,
- 84,201, 76, 62,160,153, 25,191,255,127, 0, 0, 0, 0, 18,255,120,205, 76,190,190,152, 25, 63,164,153, 25,191,255,127, 0, 0,
- 0, 0, 18,255,152,205, 76,190, 46,255,127, 63,168,153, 25,191,255,127, 0, 0, 0, 0, 18,255,112,205, 76,190, 64,208, 76,190,
-195,204, 76,190,255,127, 0, 0, 0, 0, 16,255,112,205, 76,190, 84,201, 76, 62,211,204, 76,190,255,127, 0, 0, 0, 0, 18,255,
-120,205, 76,190,190,152, 25, 63,227,204, 76,190,255,127, 0, 0, 0, 0, 18,255,152,205, 76,190, 46,255,127, 63,243,204, 76,190,
-255,127, 0, 0, 0, 0, 18,255,112,205, 76,190, 64,208, 76,190,221,204, 76, 62,255,127, 0, 0, 0, 0, 16,255,112,205, 76,190,
- 84,201, 76, 62,205,204, 76, 62,255,127, 0, 0, 0, 0, 18,255,120,205, 76,190,190,152, 25, 63,189,204, 76, 62,255,127, 0, 0,
- 0, 0, 18,255,152,205, 76,190, 46,255,127, 63,173,204, 76, 62,255,127, 0, 0, 0, 0, 18,255,112,205, 76,190, 64,208, 76,190,
-160,153, 25, 63,255,127, 0, 0, 0, 0, 16,255,112,205, 76,190, 84,201, 76, 62,156,153, 25, 63,255,127, 0, 0, 0, 0, 18,255,
-120,205, 76,190,198,152, 25, 63,152,153, 25, 63,255,127, 0, 0, 0, 0, 18,255,152,205, 76,190, 46,255,127, 63,152,153, 25, 63,
-255,127, 0, 0, 0, 0, 18,255,112,205, 76,190, 64,208, 76,190, 4, 0,128,191, 94,231, 94,231,215,132, 16,255,120,205, 76,190,
-190,152, 25, 63, 7, 0,128,191,255,127, 0, 0, 0, 0, 16,255, 96,205, 76,190,251, 50,179, 63, 4, 0,128,191,255,127, 0, 0,
- 0, 0, 16,255,128,205, 76,190, 48,102,230, 63,156,153, 25, 63,255,127, 0, 0, 0, 0, 18,255, 96,205, 76,190,251, 50,179, 63,
-160,153, 25, 63,255,127, 0, 0, 0, 0, 18,255,128,205, 76,190, 48,102,230, 63,205,204, 76, 62,255,127, 0, 0, 0, 0, 18,255,
- 96,205, 76,190,251, 50,179, 63,221,204, 76, 62,255,127, 0, 0, 0, 0, 18,255,128,205, 76,190, 48,102,230, 63,211,204, 76,190,
-255,127, 0, 0, 0, 0, 18,255, 96,205, 76,190,251, 50,179, 63,195,204, 76,190,255,127, 0, 0, 0, 0, 18,255,128,205, 76,190,
- 48,102,230, 63,160,153, 25,191,255,127, 0, 0, 0, 0, 18,255, 96,205, 76,190,251, 50,179, 63,156,153, 25,191,255,127, 0, 0,
- 0, 0, 18,255,144,205, 76,190, 10,103,230, 63, 5, 0,128,191,161,243, 93,111, 34,194, 16,255,144,205, 76,190, 10,103,230, 63,
-148,255,127, 63,161,243, 93,111,222, 61, 16,255, 96,205, 76,190,251, 50,179, 63,150,255,127, 63,255,127, 0, 0, 0, 0, 16,255,
-120,205, 76,190,190,152, 25, 63,144,255,127, 63,255,127, 0, 0, 0, 0, 16,255,112,205, 76,190, 64,208, 76,190,150,255,127, 63,
- 94,231, 94,231, 41,123, 16,255,136,205, 76,190, 48,255,127, 63,148,255,127, 63,255,127, 0, 0, 0, 0, 16,255,128,205, 76,190,
-116,201, 76, 62,148,255,127, 63,255,127, 0, 0, 0, 0, 16,255, 36, 51,179, 63, 56,208, 76,190,157,153, 25,191, 0, 0,255,127,
- 0, 0, 3,255,222,255,127, 63, 80,208, 76,190,161,153, 25,191, 0, 0,255,127, 0, 0, 3,255,116,153, 25, 63, 80,208, 76,190,
-165,153, 25,191, 0, 0,255,127, 0, 0, 3,255, 44,204, 76, 62,104,208, 76,190,169,153, 25,191, 0, 0,255,127, 0, 0, 3,255,
- 36, 51,179, 63, 56,208, 76,190,198,204, 76,190, 0, 0,255,127, 0, 0, 3,255,222,255,127, 63, 80,208, 76,190,214,204, 76,190,
- 0, 0,255,127, 0, 0, 3,255,116,153, 25, 63, 80,208, 76,190,230,204, 76,190, 0, 0,255,127, 0, 0, 3,255, 44,204, 76, 62,
-104,208, 76,190,246,204, 76,190, 0, 0,255,127, 0, 0, 3,255, 36, 51,179, 63, 56,208, 76,190,218,204, 76, 62, 0, 0,255,127,
- 0, 0, 3,255,222,255,127, 63, 80,208, 76,190,202,204, 76, 62, 0, 0,255,127, 0, 0, 3,255,116,153, 25, 63, 80,208, 76,190,
-186,204, 76, 62, 0, 0,255,127, 0, 0, 3,255, 44,204, 76, 62,104,208, 76,190,170,204, 76, 62, 0, 0,255,127, 0, 0, 3,255,
- 34, 51,179, 63, 56,208, 76,190,159,153, 25, 63, 0, 0,255,127, 0, 0, 3,255,220,255,127, 63, 80,208, 76,190,155,153, 25, 63,
- 0, 0,255,127, 0, 0, 3,255,114,153, 25, 63, 80,208, 76,190,151,153, 25, 63, 0, 0,255,127, 0, 0, 3,255, 36,204, 76, 62,
-104,208, 76,190,151,153, 25, 63, 0, 0,255,127, 0, 0, 3,255, 36, 51,179, 63, 56,208, 76,190, 4, 0,128,191, 0, 0,255,127,
- 0, 0, 3,255,222,255,127, 63, 80,208, 76,190, 5, 0,128,191, 0, 0,255,127, 0, 0, 3,255,116,153, 25, 63, 80,208, 76,190,
- 7, 0,128,191, 0, 0,255,127, 0, 0, 3,255, 44,204, 76, 62,104,208, 76,190, 8, 0,128,191, 0, 0,255,127, 0, 0, 3,255,
-136,102,230, 63, 88,208, 76,190, 8, 0,128,191, 0, 0,255,127, 0, 0, 3,255,135,102,230, 63, 88,208, 76,190,151,153, 25, 63,
- 0, 0,255,127, 0, 0, 3,255,136,102,230, 63, 88,208, 76,190,170,204, 76, 62, 0, 0,255,127, 0, 0, 3,255,136,102,230, 63,
- 88,208, 76,190,246,204, 76,190, 0, 0,255,127, 0, 0, 3,255,136,102,230, 63, 88,208, 76,190,169,153, 25,191, 0, 0,255,127,
- 0, 0, 3,255,112,205, 76,190, 64,208, 76,190,156,153, 25,191, 0, 0,255,127, 0, 0, 1,255,112,205, 76,190, 64,208, 76,190,
-195,204, 76,190, 0, 0,255,127, 0, 0, 1,255,112,205, 76,190, 64,208, 76,190,221,204, 76, 62, 0, 0,255,127, 0, 0, 1,255,
-112,205, 76,190, 64,208, 76,190,160,153, 25, 63, 0, 0,255,127, 0, 0, 1,255,112,205, 76,190, 64,208, 76,190, 4, 0,128,191,
- 0, 0,255,127, 0, 0, 3,255,112,205, 76,190, 64,208, 76,190,150,255,127, 63, 0, 0,255,127, 0, 0, 3,255,136,102,230, 63,
- 88,208, 76,190,142,255,127, 63, 0, 0,255,127, 0, 0, 3,255, 44,204, 76, 62,104,208, 76,190,142,255,127, 63, 0, 0,255,127,
- 0, 0, 3,255,116,153, 25, 63, 80,208, 76,190,144,255,127, 63, 0, 0,255,127, 0, 0, 3,255,222,255,127, 63, 80,208, 76,190,
-148,255,127, 63, 0, 0,255,127, 0, 0, 3,255, 36, 51,179, 63, 56,208, 76,190,150,255,127, 63, 0, 0,255,127, 0, 0, 3,255,
- 68, 65, 84, 65, 44, 1, 0, 0, 96, 76,150, 2, 21, 1, 0, 0, 5, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 6,155, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65,124, 14, 0, 0, 72, 6,155, 2, 54, 0, 0, 0, 53, 1, 0, 0, 21, 0, 0, 0, 82, 0, 0, 0, 0, 0, 34, 0,
- 20, 0, 0, 0, 83, 0, 0, 0, 0, 0, 34, 0, 19, 0, 0, 0, 84, 0, 0, 0, 0, 0, 34, 0, 18, 0, 0, 0, 85, 0, 0, 0,
- 0, 0, 34, 0, 22, 0, 0, 0, 76, 0, 0, 0, 0, 0, 34, 0, 1, 0, 0, 0, 53, 0, 0, 0, 0, 0, 34, 0, 28, 0, 0, 0,
- 54, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 55, 0, 0, 0, 0, 0, 34, 0, 27, 0, 0, 0, 56, 0, 0, 0, 0, 0, 34, 0,
- 29, 0, 0, 0, 48, 0, 0, 0, 0, 0, 34, 0, 4, 0, 0, 0, 5, 0, 0, 0, 0, 0, 34, 0, 3, 0, 0, 0, 4, 0, 0, 0,
- 0, 0, 34, 0, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 34, 0, 5, 0, 0, 0,
- 9, 0, 0, 0, 0, 0, 34, 0, 8, 0, 0, 0, 9, 0, 0, 0, 0, 0, 34, 0, 4, 0, 0, 0, 8, 0, 0, 0, 0, 0, 34, 0,
- 7, 0, 0, 0, 8, 0, 0, 0, 0, 0, 34, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 34, 0, 6, 0, 0, 0, 7, 0, 0, 0,
- 0, 0, 34, 0, 2, 0, 0, 0, 6, 0, 0, 0, 0, 0, 34, 0, 9, 0, 0, 0, 13, 0, 0, 0, 0, 0, 34, 0, 12, 0, 0, 0,
- 13, 0, 0, 0, 0, 0, 34, 0, 8, 0, 0, 0, 12, 0, 0, 0, 0, 0, 34, 0, 11, 0, 0, 0, 12, 0, 0, 0, 0, 0, 34, 0,
- 7, 0, 0, 0, 11, 0, 0, 0, 0, 0, 34, 0, 10, 0, 0, 0, 11, 0, 0, 0, 0, 0, 34, 0, 6, 0, 0, 0, 10, 0, 0, 0,
- 0, 0, 34, 0, 1, 0, 0, 0, 10, 0, 0, 0, 0, 0, 34, 0, 13, 0, 0, 0, 17, 0, 0, 0, 0, 0, 34, 0, 16, 0, 0, 0,
- 17, 0, 0, 0, 0, 0, 34, 0, 12, 0, 0, 0, 16, 0, 0, 0, 0, 0, 34, 0, 15, 0, 0, 0, 16, 0, 0, 0, 0, 0, 34, 0,
- 11, 0, 0, 0, 15, 0, 0, 0, 0, 0, 34, 0, 14, 0, 0, 0, 15, 0, 0, 0, 0, 0, 34, 0, 10, 0, 0, 0, 14, 0, 0, 0,
- 0, 0, 34, 0, 19, 0, 0, 0, 20, 0, 0, 0, 0, 0, 34, 0, 2, 0, 0, 0, 21, 0, 0, 0, 0, 0, 34, 0, 3, 0, 0, 0,
- 20, 0, 0, 0, 0, 0, 34, 0, 4, 0, 0, 0, 19, 0, 0, 0, 0, 0, 34, 0, 5, 0, 0, 0, 18, 0, 0, 0, 0, 0, 34, 0,
- 22, 0, 0, 0, 26, 0, 0, 0, 0, 0, 34, 0, 24, 0, 0, 0, 25, 0, 0, 0, 0, 0, 34, 0, 18, 0, 0, 0, 22, 0, 0, 0,
- 0, 0, 34, 0, 17, 0, 0, 0, 23, 0, 0, 0, 0, 0, 34, 0, 13, 0, 0, 0, 24, 0, 0, 0, 0, 0, 34, 0, 9, 0, 0, 0,
- 25, 0, 0, 0, 0, 0, 34, 0, 5, 0, 0, 0, 26, 0, 0, 0, 0, 0, 34, 0, 1, 0, 0, 0, 28, 0, 0, 0, 0, 0, 34, 0,
- 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 27, 0, 0, 0, 0, 0, 34, 0, 1, 0, 0, 0, 29, 0, 0, 0,
- 0, 0, 34, 0, 21, 0, 0, 0, 27, 0, 0, 0, 0, 0, 34, 0, 14, 0, 0, 0, 29, 0, 0, 0, 0, 0, 34, 0, 6, 0, 0, 0,
- 28, 0, 0, 0, 0, 0, 34, 0, 30, 0, 0, 0, 31, 0, 0, 0, 0, 0, 34, 0, 34, 0, 0, 0, 35, 0, 0, 0, 0, 0, 34, 0,
- 32, 0, 0, 0, 33, 0, 0, 0, 0, 0, 34, 0, 29, 0, 0, 0, 35, 0, 0, 0, 0, 0, 34, 0, 23, 0, 0, 0, 30, 0, 0, 0,
- 0, 0, 34, 0, 14, 0, 0, 0, 34, 0, 0, 0, 0, 0, 34, 0, 15, 0, 0, 0, 33, 0, 0, 0, 0, 0, 34, 0, 16, 0, 0, 0,
- 32, 0, 0, 0, 0, 0, 34, 0, 17, 0, 0, 0, 31, 0, 0, 0, 0, 0, 34, 0, 40, 0, 0, 0, 98, 0, 0, 0, 0, 0, 34, 0,
- 39, 0, 0, 0, 99, 0, 0, 0, 0, 0, 34, 0, 38, 0, 0, 0,100, 0, 0, 0, 0, 0, 34, 0, 37, 0, 0, 0,101, 0, 0, 0,
- 0, 0, 34, 0, 41, 0, 0, 0, 72, 0, 0, 0, 0, 0, 34, 0, 36, 0, 0, 0, 50, 0, 0, 0, 0, 0, 34, 0, 38, 0, 0, 0,
- 39, 0, 0, 0, 0, 0, 34, 0, 36, 0, 0, 0, 37, 0, 0, 0, 0, 0, 34, 0, 40, 0, 0, 0, 41, 0, 0, 0, 0, 0, 34, 0,
- 51, 0, 0, 0,109, 0, 0, 0, 0, 0, 34, 0, 50, 0, 0, 0,101, 0, 0, 0, 0, 0, 34, 0, 68, 0, 0, 0, 94, 0, 0, 0,
- 0, 0, 34, 0, 64, 0, 0, 0, 90, 0, 0, 0, 0, 0, 34, 0, 60, 0, 0, 0, 86, 0, 0, 0, 0, 0, 34, 0, 56, 0, 0, 0,
- 82, 0, 0, 0, 0, 0, 34, 0, 52, 0, 0, 0, 78, 0, 0, 0, 0, 0, 34, 0, 50, 0, 0, 0,114, 0, 0, 0, 0, 0, 34, 0,
- 65, 0, 0, 0,114, 0, 0, 0, 0, 0, 34, 0, 67, 0, 0, 0,115, 0, 0, 0, 0, 0, 34, 0, 52, 0, 0, 0,115, 0, 0, 0,
- 0, 0, 34, 0, 51, 0, 0, 0,115, 0, 0, 0, 0, 0, 34, 0, 51, 0, 0, 0,114, 0, 0, 0, 0, 0, 34, 0, 42, 0, 0, 0,
- 50, 0, 0, 0, 0, 0, 34, 0, 43, 0, 0, 0, 45, 0, 0, 0, 0, 0, 34, 0, 42, 0, 0, 0, 43, 0, 0, 0, 0, 0, 34, 0,
- 42, 0, 0, 0, 44, 0, 0, 0, 0, 0, 34, 0, 44, 0, 0, 0, 45, 0, 0, 0, 0, 0, 34, 0, 44, 0, 0, 0, 46, 0, 0, 0,
- 0, 0, 34, 0, 47, 0, 0, 0, 49, 0, 0, 0, 0, 0, 34, 0, 46, 0, 0, 0, 47, 0, 0, 0, 0, 0, 34, 0, 46, 0, 0, 0,
- 48, 0, 0, 0, 0, 0, 34, 0, 48, 0, 0, 0, 49, 0, 0, 0, 0, 0, 34, 0, 55, 0, 0, 0, 56, 0, 0, 0, 0, 0, 34, 0,
- 54, 0, 0, 0, 55, 0, 0, 0, 0, 0, 34, 0, 53, 0, 0, 0, 54, 0, 0, 0, 0, 0, 34, 0, 56, 0, 0, 0, 60, 0, 0, 0,
- 0, 0, 34, 0, 59, 0, 0, 0, 60, 0, 0, 0, 0, 0, 34, 0, 55, 0, 0, 0, 59, 0, 0, 0, 0, 0, 34, 0, 58, 0, 0, 0,
- 59, 0, 0, 0, 0, 0, 34, 0, 54, 0, 0, 0, 58, 0, 0, 0, 0, 0, 34, 0, 57, 0, 0, 0, 58, 0, 0, 0, 0, 0, 34, 0,
- 53, 0, 0, 0, 57, 0, 0, 0, 0, 0, 34, 0, 60, 0, 0, 0, 64, 0, 0, 0, 0, 0, 34, 0, 63, 0, 0, 0, 64, 0, 0, 0,
- 0, 0, 34, 0, 59, 0, 0, 0, 63, 0, 0, 0, 0, 0, 34, 0, 62, 0, 0, 0, 63, 0, 0, 0, 0, 0, 34, 0, 58, 0, 0, 0,
- 62, 0, 0, 0, 0, 0, 34, 0, 61, 0, 0, 0, 62, 0, 0, 0, 0, 0, 34, 0, 57, 0, 0, 0, 61, 0, 0, 0, 0, 0, 34, 0,
- 64, 0, 0, 0, 68, 0, 0, 0, 0, 0, 34, 0, 67, 0, 0, 0, 68, 0, 0, 0, 0, 0, 34, 0, 63, 0, 0, 0, 67, 0, 0, 0,
- 0, 0, 34, 0, 66, 0, 0, 0, 67, 0, 0, 0, 0, 0, 34, 0, 62, 0, 0, 0, 66, 0, 0, 0, 0, 0, 34, 0, 65, 0, 0, 0,
- 66, 0, 0, 0, 0, 0, 34, 0, 61, 0, 0, 0, 65, 0, 0, 0, 0, 0, 34, 0, 52, 0, 0, 0, 68, 0, 0, 0, 0, 0, 34, 0,
- 51, 0, 0, 0, 66, 0, 0, 0, 0, 0, 34, 0, 48, 0, 0, 0, 53, 0, 0, 0, 0, 0, 34, 0, 46, 0, 0, 0, 57, 0, 0, 0,
- 0, 0, 34, 0, 44, 0, 0, 0, 61, 0, 0, 0, 0, 0, 34, 0, 42, 0, 0, 0, 65, 0, 0, 0, 0, 0, 34, 0, 69, 0, 0, 0,
-110, 0, 0, 0, 0, 0, 34, 0, 70, 0, 0, 0,106, 0, 0, 0, 0, 0, 34, 0, 71, 0, 0, 0,102, 0, 0, 0, 0, 0, 34, 0,
- 72, 0, 0, 0, 98, 0, 0, 0, 0, 0, 34, 0, 73, 0, 0, 0, 97, 0, 0, 0, 0, 0, 34, 0, 74, 0, 0, 0, 93, 0, 0, 0,
- 0, 0, 34, 0, 75, 0, 0, 0, 89, 0, 0, 0, 0, 0, 34, 0, 76, 0, 0, 0, 85, 0, 0, 0, 0, 0, 34, 0, 77, 0, 0, 0,
- 81, 0, 0, 0, 0, 0, 34, 0, 70, 0, 0, 0, 71, 0, 0, 0, 0, 0, 34, 0, 73, 0, 0, 0, 77, 0, 0, 0, 0, 0, 34, 0,
- 74, 0, 0, 0, 75, 0, 0, 0, 0, 0, 34, 0, 69, 0, 0, 0, 77, 0, 0, 0, 0, 0, 34, 0, 81, 0, 0, 0,110, 0, 0, 0,
- 0, 0, 34, 0, 80, 0, 0, 0,111, 0, 0, 0, 0, 0, 34, 0, 79, 0, 0, 0,112, 0, 0, 0, 0, 0, 34, 0, 78, 0, 0, 0,
-113, 0, 0, 0, 0, 0, 34, 0, 79, 0, 0, 0, 80, 0, 0, 0, 0, 0, 34, 0, 84, 0, 0, 0, 85, 0, 0, 0, 0, 0, 34, 0,
- 83, 0, 0, 0, 84, 0, 0, 0, 0, 0, 34, 0, 82, 0, 0, 0, 83, 0, 0, 0, 0, 0, 34, 0, 85, 0, 0, 0, 89, 0, 0, 0,
- 0, 0, 34, 0, 88, 0, 0, 0, 89, 0, 0, 0, 0, 0, 34, 0, 84, 0, 0, 0, 88, 0, 0, 0, 0, 0, 34, 0, 87, 0, 0, 0,
- 88, 0, 0, 0, 0, 0, 34, 0, 83, 0, 0, 0, 87, 0, 0, 0, 0, 0, 34, 0, 86, 0, 0, 0, 87, 0, 0, 0, 0, 0, 34, 0,
- 82, 0, 0, 0, 86, 0, 0, 0, 0, 0, 34, 0, 89, 0, 0, 0, 93, 0, 0, 0, 0, 0, 34, 0, 92, 0, 0, 0, 93, 0, 0, 0,
- 0, 0, 34, 0, 88, 0, 0, 0, 92, 0, 0, 0, 0, 0, 34, 0, 91, 0, 0, 0, 92, 0, 0, 0, 0, 0, 34, 0, 87, 0, 0, 0,
- 91, 0, 0, 0, 0, 0, 34, 0, 90, 0, 0, 0, 91, 0, 0, 0, 0, 0, 34, 0, 86, 0, 0, 0, 90, 0, 0, 0, 0, 0, 34, 0,
- 93, 0, 0, 0, 97, 0, 0, 0, 0, 0, 34, 0, 96, 0, 0, 0, 97, 0, 0, 0, 0, 0, 34, 0, 92, 0, 0, 0, 96, 0, 0, 0,
- 0, 0, 34, 0, 95, 0, 0, 0, 96, 0, 0, 0, 0, 0, 34, 0, 91, 0, 0, 0, 95, 0, 0, 0, 0, 0, 34, 0, 94, 0, 0, 0,
- 95, 0, 0, 0, 0, 0, 34, 0, 90, 0, 0, 0, 94, 0, 0, 0, 0, 0, 34, 0, 81, 0, 0, 0, 97, 0, 0, 0, 0, 0, 34, 0,
- 80, 0, 0, 0, 96, 0, 0, 0, 0, 0, 34, 0, 79, 0, 0, 0, 95, 0, 0, 0, 0, 0, 34, 0, 78, 0, 0, 0, 94, 0, 0, 0,
- 0, 0, 34, 0,101, 0, 0, 0,105, 0, 0, 0, 0, 0, 34, 0,100, 0, 0, 0,101, 0, 0, 0, 0, 0, 34, 0,100, 0, 0, 0,
-104, 0, 0, 0, 0, 0, 34, 0, 99, 0, 0, 0,100, 0, 0, 0, 0, 0, 34, 0, 99, 0, 0, 0,103, 0, 0, 0, 0, 0, 34, 0,
- 98, 0, 0, 0, 99, 0, 0, 0, 0, 0, 34, 0, 98, 0, 0, 0,102, 0, 0, 0, 0, 0, 34, 0,105, 0, 0, 0,114, 0, 0, 0,
- 0, 0, 34, 0,105, 0, 0, 0,109, 0, 0, 0, 0, 0, 34, 0,104, 0, 0, 0,105, 0, 0, 0, 0, 0, 34, 0,104, 0, 0, 0,
-108, 0, 0, 0, 0, 0, 34, 0,103, 0, 0, 0,104, 0, 0, 0, 0, 0, 34, 0,103, 0, 0, 0,107, 0, 0, 0, 0, 0, 34, 0,
-102, 0, 0, 0,103, 0, 0, 0, 0, 0, 34, 0,102, 0, 0, 0,106, 0, 0, 0, 0, 0, 34, 0,109, 0, 0, 0,113, 0, 0, 0,
- 0, 0, 34, 0,108, 0, 0, 0,109, 0, 0, 0, 0, 0, 34, 0,108, 0, 0, 0,112, 0, 0, 0, 0, 0, 34, 0,107, 0, 0, 0,
-108, 0, 0, 0, 0, 0, 34, 0,107, 0, 0, 0,111, 0, 0, 0, 0, 0, 34, 0,106, 0, 0, 0,107, 0, 0, 0, 0, 0, 34, 0,
-106, 0, 0, 0,110, 0, 0, 0, 0, 0, 34, 0,113, 0, 0, 0,115, 0, 0, 0, 0, 0, 34, 0,112, 0, 0, 0,113, 0, 0, 0,
- 0, 0, 34, 0,111, 0, 0, 0,112, 0, 0, 0, 0, 0, 34, 0,110, 0, 0, 0,111, 0, 0, 0, 0, 0, 34, 0,121, 0, 0, 0,
-144, 0, 0, 0, 0, 0, 50, 0,125, 0, 0, 0,142, 0, 0, 0, 0, 0, 50, 0,129, 0, 0, 0,140, 0, 0, 0, 0, 0, 50, 0,
-133, 0, 0, 0,138, 0, 0, 0, 0, 0, 50, 0,120, 0, 0, 0,135, 0, 0, 0, 0, 0, 50, 0,118, 0, 0, 0,134, 0, 0, 0,
- 0, 0,178, 0,121, 0, 0, 0,125, 0, 0, 0, 0, 0, 50, 0,120, 0, 0, 0,121, 0, 0, 0, 0, 0, 50, 0,120, 0, 0, 0,
-124, 0, 0, 0, 0, 0, 50, 0,120, 0, 0, 0,119, 0, 0, 0, 0, 0, 50, 0,119, 0, 0, 0,123, 0, 0, 0, 0, 0, 50, 0,
-118, 0, 0, 0,119, 0, 0, 0, 0, 0, 50, 0,118, 0, 0, 0,122, 0, 0, 0, 0, 0, 50, 0,125, 0, 0, 0,129, 0, 0, 0,
- 0, 0, 50, 0,124, 0, 0, 0,125, 0, 0, 0, 0, 0, 50, 0,124, 0, 0, 0,128, 0, 0, 0, 0, 0, 50, 0,123, 0, 0, 0,
-124, 0, 0, 0, 0, 0, 50, 0,123, 0, 0, 0,127, 0, 0, 0, 0, 0, 50, 0,122, 0, 0, 0,123, 0, 0, 0, 0, 0, 50, 0,
-122, 0, 0, 0,126, 0, 0, 0, 0, 0,178, 0,129, 0, 0, 0,133, 0, 0, 0, 0, 0, 50, 0,128, 0, 0, 0,129, 0, 0, 0,
- 0, 0, 50, 0,128, 0, 0, 0,132, 0, 0, 0, 0, 0, 50, 0,127, 0, 0, 0,128, 0, 0, 0, 0, 0, 50, 0,127, 0, 0, 0,
-131, 0, 0, 0, 0, 0, 50, 0,126, 0, 0, 0,127, 0, 0, 0, 0, 0, 50, 0,126, 0, 0, 0,130, 0, 0, 0, 0, 0, 50, 0,
-132, 0, 0, 0,133, 0, 0, 0, 0, 0, 50, 0,131, 0, 0, 0,132, 0, 0, 0, 0, 0, 50, 0,130, 0, 0, 0,131, 0, 0, 0,
- 0, 0, 50, 0,137, 0, 0, 0,138, 0, 0, 0, 0, 0, 50, 0,138, 0, 0, 0,140, 0, 0, 0, 0, 0, 50, 0,139, 0, 0, 0,
-140, 0, 0, 0, 0, 0, 50, 0,137, 0, 0, 0,139, 0, 0, 0, 0, 0, 50, 0,140, 0, 0, 0,142, 0, 0, 0, 0, 0, 50, 0,
-141, 0, 0, 0,142, 0, 0, 0, 0, 0, 50, 0,142, 0, 0, 0,144, 0, 0, 0, 0, 0, 50, 0,143, 0, 0, 0,144, 0, 0, 0,
- 0, 0, 50, 0,141, 0, 0, 0,143, 0, 0, 0, 0, 0, 50, 0,136, 0, 0, 0,144, 0, 0, 0, 0, 0, 50, 0,117, 0, 0, 0,
-135, 0, 0, 0, 0, 0,178, 0,116, 0, 0, 0,135, 0, 0, 0, 0, 0, 50, 0,116, 0, 0, 0,134, 0, 0, 0, 0, 0,178, 0,
-119, 0, 0, 0,116, 0, 0, 0, 0, 0, 50, 0,117, 0, 0, 0,121, 0, 0, 0, 0, 0, 50, 0,117, 0, 0, 0,136, 0, 0, 0,
- 0, 0, 50, 0,136, 0, 0, 0,145, 0, 0, 0, 0, 0,178, 0,146, 0, 0, 0,147, 0, 0, 0, 0, 0,178, 0,147, 0, 0, 0,
-150, 0, 0, 0, 0, 0, 50, 0,149, 0, 0, 0,151, 0, 0, 0, 0, 0,178, 0,148, 0, 0, 0,151, 0, 0, 0, 0, 0, 50, 0,
-148, 0, 0, 0,150, 0, 0, 0, 0, 0,178, 0,138, 0, 0, 0,147, 0, 0, 0, 0, 0, 50, 0,130, 0, 0, 0,149, 0, 0, 0,
- 0, 0,178, 0,131, 0, 0, 0,151, 0, 0, 0, 0, 0, 50, 0,132, 0, 0, 0,148, 0, 0, 0, 0, 0, 50, 0,133, 0, 0, 0,
-150, 0, 0, 0, 0, 0, 50, 0,155, 0, 0, 0,171, 0, 0, 0, 0, 0, 35, 0,154, 0, 0, 0,170, 0, 0, 0, 0, 0, 35, 0,
-153, 0, 0, 0,169, 0, 0, 0, 0, 0, 35, 0,152, 0, 0, 0,168, 0, 0, 0, 0, 0, 35, 0,155, 0, 0, 0,159, 0, 0, 0,
- 0, 0, 35, 0,154, 0, 0, 0,155, 0, 0, 0, 0, 0, 35, 0,154, 0, 0, 0,158, 0, 0, 0, 0, 0, 35, 0,153, 0, 0, 0,
-154, 0, 0, 0, 0, 0, 35, 0,153, 0, 0, 0,157, 0, 0, 0, 0, 0, 35, 0,152, 0, 0, 0,153, 0, 0, 0, 0, 0, 35, 0,
-152, 0, 0, 0,156, 0, 0, 0, 0, 0, 35, 0,159, 0, 0, 0,163, 0, 0, 0, 0, 0, 35, 0,158, 0, 0, 0,159, 0, 0, 0,
- 0, 0, 35, 0,158, 0, 0, 0,162, 0, 0, 0, 0, 0, 35, 0,157, 0, 0, 0,158, 0, 0, 0, 0, 0, 35, 0,157, 0, 0, 0,
-161, 0, 0, 0, 0, 0, 35, 0,156, 0, 0, 0,157, 0, 0, 0, 0, 0, 35, 0,156, 0, 0, 0,160, 0, 0, 0, 0, 0, 35, 0,
-163, 0, 0, 0,167, 0, 0, 0, 0, 0, 35, 0,162, 0, 0, 0,163, 0, 0, 0, 0, 0, 35, 0,162, 0, 0, 0,166, 0, 0, 0,
- 0, 0, 35, 0,161, 0, 0, 0,162, 0, 0, 0, 0, 0, 35, 0,161, 0, 0, 0,165, 0, 0, 0, 0, 0, 35, 0,160, 0, 0, 0,
-161, 0, 0, 0, 0, 0, 35, 0,160, 0, 0, 0,164, 0, 0, 0, 0, 0, 35, 0,166, 0, 0, 0,167, 0, 0, 0, 0, 0, 35, 0,
-165, 0, 0, 0,166, 0, 0, 0, 0, 0, 35, 0,164, 0, 0, 0,165, 0, 0, 0, 0, 0, 35, 0,169, 0, 0, 0,170, 0, 0, 0,
- 0, 0, 35, 0,174, 0, 0, 0,175, 0, 0, 0, 0, 0, 35, 0,172, 0, 0, 0,176, 0, 0, 0, 0, 0, 35, 0,168, 0, 0, 0,
-172, 0, 0, 0, 0, 0, 35, 0,164, 0, 0, 0,173, 0, 0, 0, 0, 0, 35, 0,160, 0, 0, 0,174, 0, 0, 0, 0, 0, 35, 0,
-156, 0, 0, 0,175, 0, 0, 0, 0, 0, 35, 0,152, 0, 0, 0,176, 0, 0, 0, 0, 0, 35, 0,177, 0, 0, 0,181, 0, 0, 0,
- 0, 0, 35, 0,177, 0, 0, 0,178, 0, 0, 0, 0, 0,163, 0,178, 0, 0, 0,179, 0, 0, 0, 0, 0, 35, 0,179, 0, 0, 0,
-180, 0, 0, 0, 0, 0,163, 0,171, 0, 0, 0,181, 0, 0, 0, 0, 0, 35, 0,167, 0, 0, 0,180, 0, 0, 0, 0, 0, 35, 0,
-163, 0, 0, 0,179, 0, 0, 0, 0, 0, 35, 0,159, 0, 0, 0,178, 0, 0, 0, 0, 0, 35, 0,155, 0, 0, 0,177, 0, 0, 0,
- 0, 0, 35, 0,182, 0, 0, 0,184, 0, 0, 0, 0, 0, 35, 0,183, 0, 0, 0,187, 0, 0, 0, 0, 0, 35, 0,185, 0, 0, 0,
-186, 0, 0, 0, 0, 0, 35, 0,180, 0, 0, 0,182, 0, 0, 0, 0, 0, 35, 0,173, 0, 0, 0,183, 0, 0, 0, 0, 0, 35, 0,
-164, 0, 0, 0,187, 0, 0, 0, 0, 0, 35, 0,165, 0, 0, 0,186, 0, 0, 0, 0, 0, 35, 0,166, 0, 0, 0,185, 0, 0, 0,
- 0, 0, 35, 0,167, 0, 0, 0,184, 0, 0, 0, 0, 0, 35, 0, 68, 65, 84, 65, 44, 1, 0, 0,192,166,132, 2, 21, 1, 0, 0,
- 5, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 5,167, 2,
- 5, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 86, 84,101,120, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40,176,131, 2, 6, 0, 0, 0,
- 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67,111,108, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,102, 8, 3, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,240, 5, 0, 0, 32, 5,167, 2, 53, 0, 0, 0,
- 76, 0, 0, 0, 18, 0, 0, 0, 22, 0, 0, 0, 26, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 19, 0, 0, 0,
- 4, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0,
- 4, 0, 0, 0, 5, 0, 0, 0, 9, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0,
- 6, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 25, 0, 0, 0, 24, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0,
- 8, 0, 0, 0, 12, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 6, 0, 0, 0, 10, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 12, 0, 0, 0, 13, 0, 0, 0, 17, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 11, 0, 0, 0,
- 15, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 23, 0, 0, 0, 30, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0,
- 15, 0, 0, 0, 16, 0, 0, 0, 32, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 35, 0, 0, 0, 29, 0, 0, 0,
- 14, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 65, 0, 0, 0,114, 0, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 45, 0, 0, 0,
- 44, 0, 0, 0, 42, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 46, 0, 0, 0, 57, 0, 0, 0, 61, 0, 0, 0, 44, 0, 0, 0,
- 0, 0, 0, 0, 49, 0, 0, 0, 48, 0, 0, 0, 46, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 1, 0, 0, 0,
- 53, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 55, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0,
- 55, 0, 0, 0, 56, 0, 0, 0, 60, 0, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 53, 0, 0, 0, 54, 0, 0, 0, 58, 0, 0, 0,
- 57, 0, 0, 0, 0, 0, 0, 0, 58, 0, 0, 0, 59, 0, 0, 0, 63, 0, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0,
- 64, 0, 0, 0, 68, 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 62, 0, 0, 0, 66, 0, 0, 0, 65, 0, 0, 0,
- 0, 0, 0, 0,115, 0, 0, 0, 51, 0, 0, 0, 66, 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 22, 0, 0, 0,
- 76, 0, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 19, 0, 0, 0, 84, 0, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0,
- 27, 0, 0, 0, 21, 0, 0, 0, 82, 0, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 84, 0, 0, 0, 85, 0, 0, 0, 89, 0, 0, 0,
- 88, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0, 83, 0, 0, 0, 87, 0, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 89, 0, 0, 0,
- 75, 0, 0, 0, 74, 0, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 87, 0, 0, 0, 88, 0, 0, 0, 92, 0, 0, 0, 91, 0, 0, 0,
- 0, 0, 0, 0, 60, 0, 0, 0, 86, 0, 0, 0, 90, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 92, 0, 0, 0, 93, 0, 0, 0,
- 97, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 90, 0, 0, 0, 91, 0, 0, 0, 95, 0, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0,
- 97, 0, 0, 0, 73, 0, 0, 0, 77, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 95, 0, 0, 0, 96, 0, 0, 0, 80, 0, 0, 0,
- 79, 0, 0, 0, 0, 0, 0, 0, 78, 0, 0, 0, 52, 0, 0, 0, 68, 0, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0,
- 36, 0, 0, 0, 50, 0, 0, 0,101, 0, 0, 0, 0, 0, 0, 0,100, 0, 0, 0, 99, 0, 0, 0, 39, 0, 0, 0, 38, 0, 0, 0,
- 0, 0, 0, 0, 98, 0, 0, 0, 72, 0, 0, 0, 41, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0,105, 0, 0, 0,104, 0, 0, 0,
-100, 0, 0, 0,101, 0, 0, 0, 0, 0, 0, 0,103, 0, 0, 0,102, 0, 0, 0, 98, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0,
- 51, 0, 0, 0,109, 0, 0, 0,105, 0, 0, 0,114, 0, 0, 0, 0, 0, 0, 0,108, 0, 0, 0,107, 0, 0, 0,103, 0, 0, 0,
-104, 0, 0, 0, 0, 0, 0, 0,106, 0, 0, 0, 70, 0, 0, 0, 71, 0, 0, 0,102, 0, 0, 0, 0, 0, 0, 0,113, 0, 0, 0,
-112, 0, 0, 0,108, 0, 0, 0,109, 0, 0, 0, 0, 0, 0, 0,111, 0, 0, 0,110, 0, 0, 0,106, 0, 0, 0,107, 0, 0, 0,
- 0, 0, 0, 0,113, 0, 0, 0,115, 0, 0, 0, 52, 0, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 79, 0, 0, 0, 80, 0, 0, 0,
-111, 0, 0, 0,112, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0, 77, 0, 0, 0, 69, 0, 0, 0,110, 0, 0, 0, 0, 0, 0, 0,
-116, 0, 0, 0,135, 0, 0, 0,120, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 16,125, 0, 0, 0,124, 0, 0, 0,120, 0, 0, 0,
-121, 0, 0, 0, 0, 0, 0, 16,123, 0, 0, 0,122, 0, 0, 0,118, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 16,128, 0, 0, 0,
-127, 0, 0, 0,123, 0, 0, 0,124, 0, 0, 0, 0, 0, 0, 16,133, 0, 0, 0,132, 0, 0, 0,128, 0, 0, 0,129, 0, 0, 0,
- 0, 0, 0, 16,131, 0, 0, 0,130, 0, 0, 0,126, 0, 0, 0,127, 0, 0, 0, 0, 0, 0, 16,148, 0, 0, 0,151, 0, 0, 0,
-131, 0, 0, 0,132, 0, 0, 0, 0, 0, 0, 16,147, 0, 0, 0,150, 0, 0, 0,133, 0, 0, 0,138, 0, 0, 0, 0, 0, 0, 16,
-137, 0, 0, 0,138, 0, 0, 0,140, 0, 0, 0,139, 0, 0, 0, 0, 0, 0, 16,140, 0, 0, 0,129, 0, 0, 0,125, 0, 0, 0,
-142, 0, 0, 0, 0, 0, 0, 16,141, 0, 0, 0,142, 0, 0, 0,144, 0, 0, 0,143, 0, 0, 0, 0, 0, 0, 16,144, 0, 0, 0,
-121, 0, 0, 0,117, 0, 0, 0,136, 0, 0, 0, 0, 0, 0, 16,171, 0, 0, 0,181, 0, 0, 0,177, 0, 0, 0,155, 0, 0, 0,
- 0, 0, 0, 2,154, 0, 0, 0,153, 0, 0, 0,169, 0, 0, 0,170, 0, 0, 0, 0, 0, 0, 2,152, 0, 0, 0,176, 0, 0, 0,
-172, 0, 0, 0,168, 0, 0, 0, 0, 0, 0, 2,159, 0, 0, 0,158, 0, 0, 0,154, 0, 0, 0,155, 0, 0, 0, 0, 0, 0, 2,
-157, 0, 0, 0,156, 0, 0, 0,152, 0, 0, 0,153, 0, 0, 0, 0, 0, 0, 2,179, 0, 0, 0,163, 0, 0, 0,159, 0, 0, 0,
-178, 0, 0, 0, 0, 0, 0, 2,162, 0, 0, 0,161, 0, 0, 0,157, 0, 0, 0,158, 0, 0, 0, 0, 0, 0, 2,160, 0, 0, 0,
-174, 0, 0, 0,175, 0, 0, 0,156, 0, 0, 0, 0, 0, 0, 2,167, 0, 0, 0,166, 0, 0, 0,162, 0, 0, 0,163, 0, 0, 0,
- 0, 0, 0, 2,165, 0, 0, 0,164, 0, 0, 0,160, 0, 0, 0,161, 0, 0, 0, 0, 0, 0, 2,182, 0, 0, 0,184, 0, 0, 0,
-167, 0, 0, 0,180, 0, 0, 0, 0, 0, 0, 2,185, 0, 0, 0,186, 0, 0, 0,165, 0, 0, 0,166, 0, 0, 0, 0, 0, 0, 2,
-187, 0, 0, 0,183, 0, 0, 0,173, 0, 0, 0,164, 0, 0, 0, 0, 0, 0, 2, 68, 65, 84, 65, 16, 13, 0, 0, 40,176,131, 2,
- 61, 0, 0, 0, 76, 0, 0, 0,250,168, 27, 63, 96,211, 93, 59, 84,162,203, 62, 96,211, 93, 59, 84,162,203, 62, 96,211, 93, 59,
-251,168, 27, 63, 96,211, 93, 59, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0, 21,172,131, 63, 96,211, 93, 59,146,128, 81, 63,
- 96,211, 93, 59,149,128, 81, 63, 96,211, 93, 59, 22,172,131, 63, 96,211, 93, 59, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0,
-227,151,158, 63, 96,211, 93, 59,174,131,185, 63, 96,211, 93, 59,174,131,185, 63, 96,211, 93, 59,225,151,158, 63, 96,211, 93, 59,
- 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0,149,128, 81, 63, 96,211, 93, 59,251,168, 27, 63, 96,211, 93, 59,246,168, 27, 63,
- 96,211, 93, 59,142,128, 81, 63, 96,211, 93, 59, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0,227,151,158, 63, 96,211, 93, 59,
- 22,172,131, 63, 96,211, 93, 59, 24,172,131, 63, 96,211, 93, 59,226,151,158, 63, 96,211, 93, 59, 0, 0, 0, 0, 61, 0, 1, 0,
- 0, 0, 0, 0,246,168, 27, 63, 96,211, 93, 59, 86,162,203, 62, 96,211, 93, 59, 85,162,203, 62, 96,211, 93, 59,247,168, 27, 63,
- 96,211, 93, 59, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0, 24,172,131, 63, 96,211, 93, 59,142,128, 81, 63, 96,211, 93, 59,
-144,128, 81, 63, 96,211, 93, 59, 21,172,131, 63, 96,211, 93, 59, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0,174,131,185, 63,
- 96,211, 93, 59,226,151,158, 63, 96,211, 93, 59,226,151,158, 63, 96,211, 93, 59,176,131,185, 63, 96,211, 93, 59, 0, 0, 0, 0,
- 61, 0, 1, 0, 0, 0, 0, 0,144,128, 81, 63, 96,211, 93, 59,247,168, 27, 63, 96,211, 93, 59,247,168, 27, 63, 96,211, 93, 59,
-144,128, 81, 63, 96,211, 93, 59, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0,226,151,158, 63, 96,211, 93, 59, 21,172,131, 63,
- 96,211, 93, 59, 22,172,131, 63, 96,211, 93, 59,224,151,158, 63, 96,211, 93, 59, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0,
-247,168, 27, 63, 96,211, 93, 59, 85,162,203, 62, 96,211, 93, 59, 86,162,203, 62, 96,211, 93, 59,248,168, 27, 63, 96,211, 93, 59,
- 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0, 22,172,131, 63, 96,211, 93, 59,144,128, 81, 63, 96,211, 93, 59,144,128, 81, 63,
- 96,211, 93, 59, 22,172,131, 63, 96,211, 93, 59, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0,226,151,158, 63, 96,211, 93, 59,
-176,131,185, 63, 96,211, 93, 59,174,131,185, 63, 96,211, 93, 59,224,151,158, 63, 96,211, 93, 59, 0, 0, 0, 0, 61, 0, 1, 0,
- 0, 0, 0, 0, 99,131,140, 63, 76, 47, 41, 63, 44,244,114, 63,236, 65, 79, 63, 44,244,114, 63,236, 65, 79, 63, 99,131,140, 63,
- 76, 47, 41, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,161,140,159, 63,210, 28, 3, 63, 99,131,140, 63, 76, 47, 41, 63,
- 99,131,140, 63, 76, 47, 41, 63,161,140,159, 63,210, 28, 3, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, 99,131,140, 63,
- 76, 47, 41, 63, 44,244,114, 63,236, 65, 79, 63, 44,244,114, 63,236, 65, 79, 63, 99,131,140, 63, 76, 47, 41, 63, 0, 0, 0, 0,
- 60, 0, 1, 0, 0, 0, 0, 0,161,140,159, 63,210, 28, 3, 63, 99,131,140, 63, 76, 47, 41, 63, 99,131,140, 63, 76, 47, 41, 63,
-161,140,159, 63,210, 28, 3, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, 99,131,140, 63, 72, 47, 41, 63, 44,244,114, 63,
-236, 65, 79, 63, 44,244,114, 63,236, 65, 79, 63, 99,131,140, 63, 76, 47, 41, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,
-174,225, 76, 63,102, 84,117, 63, 52,207, 38, 63,111,179,141, 63, 52,207, 38, 63,111,179,141, 63,174,225, 76, 63,102, 84,117, 63,
- 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, 52,207, 38, 63,111,179,141, 63,188,188, 0, 63,173,188,160, 63,188,188, 0, 63,
-173,188,160, 63, 52,207, 38, 63,111,179,141, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, 44,244,114, 63,236, 65, 79, 63,
-174,225, 76, 63,102, 84,117, 63,172,225, 76, 63,102, 84,117, 63, 44,244,114, 63,236, 65, 79, 63, 0, 0, 0, 0, 60, 0, 1, 0,
- 0, 0, 0, 0,172,225, 76, 63,102, 84,117, 63, 52,207, 38, 63,111,179,141, 63, 52,207, 38, 63,111,179,141, 63,172,225, 76, 63,
-102, 84,117, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, 52,207, 38, 63,111,179,141, 63,188,188, 0, 63,173,188,160, 63,
-188,188, 0, 63,173,188,160, 63, 52,207, 38, 63,111,179,141, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, 44,244,114, 63,
-236, 65, 79, 63,172,225, 76, 63,102, 84,117, 63,172,225, 76, 63,102, 84,117, 63, 44,244,114, 63,236, 65, 79, 63, 0, 0, 0, 0,
- 60, 0, 1, 0, 0, 0, 0, 0, 56,207, 38, 63,111,179,141, 63,172,225, 76, 63,102, 84,117, 63,172,225, 76, 63,102, 84,117, 63,
- 52,207, 38, 63,111,179,141, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, 96,105,188,189,120, 47, 41, 63, 56,127,118,190,
-220, 28, 3, 63, 56,127,118,190,220, 28, 3, 63, 96,105,188,189,120, 47, 41, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,
- 26, 95, 82, 62,102, 84,117, 63,200, 84,104, 61,244, 65, 79, 63,200, 84,104, 61,242, 65, 79, 63, 26, 95, 82, 62,102, 84,117, 63,
- 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,190,188, 0, 63,171,188,160, 63,122, 84,181, 62,113,179,141, 63,122, 84,181, 62,
-113,179,141, 63,188,188, 0, 63,173,188,160, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,200, 84,104, 61,242, 65, 79, 63,
- 96,105,188,189,120, 47, 41, 63,128,105,188,189,120, 47, 41, 63,160, 84,104, 61,242, 65, 79, 63, 0, 0, 0, 0, 60, 0, 1, 0,
- 0, 0, 0, 0,122, 84,181, 62,113,179,141, 63, 26, 95, 82, 62,102, 84,117, 63, 26, 95, 82, 62,102, 84,117, 63,122, 84,181, 62,
-113,179,141, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,128,105,188,189,120, 47, 41, 63, 64,127,118,190,216, 28, 3, 63,
- 64,127,118,190,216, 28, 3, 63,128,105,188,189,120, 47, 41, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, 26, 95, 82, 62,
-102, 84,117, 63,160, 84,104, 61,242, 65, 79, 63,160, 84,104, 61,242, 65, 79, 63, 26, 95, 82, 62,102, 84,117, 63, 0, 0, 0, 0,
- 60, 0, 1, 0, 0, 0, 0, 0,188,188, 0, 63,173,188,160, 63,122, 84,181, 62,113,179,141, 63,122, 84,181, 62,113,179,141, 63,
-188,188, 0, 63,173,188,160, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,160, 84,104, 61,242, 65, 79, 63,128,105,188,189,
-120, 47, 41, 63,128,105,188,189,120, 47, 41, 63,160, 84,104, 61,242, 65, 79, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,
-122, 84,181, 62,113,179,141, 63, 26, 95, 82, 62,102, 84,117, 63, 26, 95, 82, 62,102, 84,117, 63,122, 84,181, 62,113,179,141, 63,
- 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,128,105,188,189,120, 47, 41, 63, 64,127,118,190,216, 28, 3, 63, 64,127,118,190,
-216, 28, 3, 63,128,105,188,189,120, 47, 41, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, 26, 95, 82, 62,102, 84,117, 63,
-160, 84,104, 61,242, 65, 79, 63,160, 84,104, 61,242, 65, 79, 63, 26, 95, 82, 62,102, 84,117, 63, 0, 0, 0, 0, 60, 0, 1, 0,
- 0, 0, 0, 0,122, 84,181, 62,113,179,141, 63,188,188, 0, 63,173,188,160, 63,188,188, 0, 63,173,188,160, 63,122, 84,181, 62,
-113,179,141, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,180,131,140, 63,116, 19,186, 62,244,140,159, 63, 50, 28, 3, 63,
- 99,131,140, 63, 76, 47, 41, 63, 42,244,114, 63,244, 28, 3, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,174,225, 76, 63,
- 0, 21,186, 62, 51,207, 38, 63, 24,224, 91, 62,112,226, 76, 63, 64, 38,135, 61,240,244,114, 63, 4,221, 91, 62, 0, 0, 0, 0,
- 60, 0, 1, 0, 0, 0, 0, 0,185,188, 0, 63, 96, 44,135, 61, 61, 84,181, 62,176,104,169,189, 93,189, 0, 63, 80, 1,109,190,
-248,207, 38, 63,144,109,169,189, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,174,225, 76, 63,116, 47, 41, 63, 52,207, 38, 63,
-248, 28, 3, 63,174,225, 76, 63, 0, 21,186, 62, 42,244,114, 63,244, 28, 3, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,
-185,188, 0, 63, 0, 21,186, 62,122, 84,181, 62, 32,224, 91, 62,185,188, 0, 63, 96, 44,135, 61, 51,207, 38, 63, 24,224, 91, 62,
- 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,172,225, 76, 63,102, 84,117, 63, 52,207, 38, 63,236, 65, 79, 63,174,225, 76, 63,
-116, 47, 41, 63, 44,244,114, 63,236, 65, 79, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,188,188, 0, 63,120, 47, 41, 63,
-122, 84,181, 62,248, 28, 3, 63,185,188, 0, 63, 0, 21,186, 62, 52,207, 38, 63,248, 28, 3, 63, 0, 0, 0, 0, 60, 0, 1, 0,
- 0, 0, 0, 0, 14, 95, 82, 62, 0, 21,186, 62,144, 82,104, 61,128,223, 91, 62,138, 94, 82, 62, 48, 43,135, 61,122, 84,181, 62,
- 32,224, 91, 62, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,190,188, 0, 63,102, 84,117, 63,127, 84,181, 62,242, 65, 79, 63,
-188,188, 0, 63,120, 47, 41, 63, 52,207, 38, 63,236, 65, 79, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, 26, 95, 82, 62,
-120, 47, 41, 63,160, 84,104, 61, 0, 29, 3, 63, 14, 95, 82, 62, 0, 21,186, 62,122, 84,181, 62,248, 28, 3, 63, 0, 0, 0, 0,
- 60, 0, 1, 0, 0, 0, 0, 0,190,188, 0, 63,102, 84,117, 63, 56,207, 38, 63,111,179,141, 63,188,188, 0, 63,173,188,160, 63,
-122, 84,181, 62,113,179,141, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, 26, 95, 82, 62,102, 84,117, 63,160, 84,104, 61,
-242, 65, 79, 63, 26, 95, 82, 62,120, 47, 41, 63,127, 84,181, 62,242, 65, 79, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,
-128,105,188,189,120, 47, 41, 63, 64,127,118,190,216, 28, 3, 63,128,106,188,189,176, 20,186, 62,160, 84,104, 61, 0, 29, 3, 63,
- 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, 56,207, 38, 63,111,179,141, 63,172,225, 76, 63,102, 84,117, 63,172,225, 76, 63,
-102, 84,117, 63, 52,207, 38, 63,111,179,141, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, 44,244,114, 63,236, 65, 79, 63,
-172,225, 76, 63,102, 84,117, 63,172,225, 76, 63,102, 84,117, 63, 44,244,114, 63,236, 65, 79, 63, 0, 0, 0, 0, 60, 0, 1, 0,
- 0, 0, 0, 0, 52,207, 38, 63,111,179,141, 63,188,188, 0, 63,173,188,160, 63,188,188, 0, 63,173,188,160, 63, 52,207, 38, 63,
-111,179,141, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,172,225, 76, 63,102, 84,117, 63, 52,207, 38, 63,111,179,141, 63,
- 52,207, 38, 63,111,179,141, 63,172,225, 76, 63,102, 84,117, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, 44,244,114, 63,
-236, 65, 79, 63,174,225, 76, 63,102, 84,117, 63,172,225, 76, 63,102, 84,117, 63, 44,244,114, 63,236, 65, 79, 63, 0, 0, 0, 0,
- 60, 0, 1, 0, 0, 0, 0, 0, 52,207, 38, 63,111,179,141, 63,188,188, 0, 63,173,188,160, 63,188,188, 0, 63,173,188,160, 63,
- 52,207, 38, 63,111,179,141, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,174,225, 76, 63,102, 84,117, 63, 52,207, 38, 63,
-111,179,141, 63, 52,207, 38, 63,111,179,141, 63,174,225, 76, 63,102, 84,117, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,
- 99,131,140, 63, 72, 47, 41, 63, 44,244,114, 63,236, 65, 79, 63, 44,244,114, 63,236, 65, 79, 63, 99,131,140, 63, 76, 47, 41, 63,
- 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,161,140,159, 63,210, 28, 3, 63, 99,131,140, 63, 76, 47, 41, 63, 99,131,140, 63,
- 76, 47, 41, 63,161,140,159, 63,210, 28, 3, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, 99,131,140, 63, 76, 47, 41, 63,
- 44,244,114, 63,236, 65, 79, 63, 44,244,114, 63,236, 65, 79, 63, 99,131,140, 63, 76, 47, 41, 63, 0, 0, 0, 0, 60, 0, 1, 0,
- 0, 0, 0, 0,161,140,159, 63,210, 28, 3, 63, 99,131,140, 63, 76, 47, 41, 63, 99,131,140, 63, 76, 47, 41, 63,161,140,159, 63,
-210, 28, 3, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, 99,131,140, 63, 76, 47, 41, 63, 44,244,114, 63,236, 65, 79, 63,
- 44,244,114, 63,236, 65, 79, 63, 99,131,140, 63, 76, 47, 41, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,122, 84,181, 62,
-113,179,141, 63,188,188, 0, 63,173,188,160, 63,188,188, 0, 63,173,188,160, 63,122, 84,181, 62,113,179,141, 63, 0, 0, 0, 0,
- 60, 0, 1, 0, 0, 0, 0, 0, 26, 95, 82, 62,102, 84,117, 63,160, 84,104, 61,242, 65, 79, 63,160, 84,104, 61,242, 65, 79, 63,
- 26, 95, 82, 62,102, 84,117, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,128,105,188,189,120, 47, 41, 63, 64,127,118,190,
-216, 28, 3, 63, 64,127,118,190,216, 28, 3, 63,128,105,188,189,120, 47, 41, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,
-122, 84,181, 62,113,179,141, 63, 26, 95, 82, 62,102, 84,117, 63, 26, 95, 82, 62,102, 84,117, 63,122, 84,181, 62,113,179,141, 63,
- 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,160, 84,104, 61,242, 65, 79, 63,128,105,188,189,120, 47, 41, 63,128,105,188,189,
-120, 47, 41, 63,160, 84,104, 61,242, 65, 79, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,188,188, 0, 63,173,188,160, 63,
-122, 84,181, 62,113,179,141, 63,122, 84,181, 62,113,179,141, 63,188,188, 0, 63,173,188,160, 63, 0, 0, 0, 0, 60, 0, 1, 0,
- 0, 0, 0, 0, 26, 95, 82, 62,102, 84,117, 63,160, 84,104, 61,242, 65, 79, 63,160, 84,104, 61,242, 65, 79, 63, 26, 95, 82, 62,
-102, 84,117, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,128,105,188,189,120, 47, 41, 63, 64,127,118,190,216, 28, 3, 63,
- 64,127,118,190,216, 28, 3, 63,128,105,188,189,120, 47, 41, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,122, 84,181, 62,
-113,179,141, 63, 26, 95, 82, 62,102, 84,117, 63, 26, 95, 82, 62,102, 84,117, 63,122, 84,181, 62,113,179,141, 63, 0, 0, 0, 0,
- 60, 0, 1, 0, 0, 0, 0, 0,200, 84,104, 61,242, 65, 79, 63, 96,105,188,189,120, 47, 41, 63,128,105,188,189,120, 47, 41, 63,
-160, 84,104, 61,242, 65, 79, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,190,188, 0, 63,171,188,160, 63,122, 84,181, 62,
-113,179,141, 63,122, 84,181, 62,113,179,141, 63,188,188, 0, 63,173,188,160, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,
- 26, 95, 82, 62,102, 84,117, 63,200, 84,104, 61,244, 65, 79, 63,200, 84,104, 61,242, 65, 79, 63, 26, 95, 82, 62,102, 84,117, 63,
- 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, 96,105,188,189,120, 47, 41, 63, 56,127,118,190,220, 28, 3, 63, 56,127,118,190,
-220, 28, 3, 63, 96,105,188,189,120, 47, 41, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, 68, 65, 84, 65,192, 4, 0, 0,
- 80,102, 8, 3, 58, 0, 0, 0, 48, 1, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-255,255,255,255,255,255,255,255,255,255,255,255, 77, 69, 0, 0, 12, 1, 0, 0,240, 0, 18, 3, 51, 0, 0, 0, 1, 0, 0, 0,
-208, 84,164, 2, 80,153,166, 2, 0, 0, 0, 0, 0, 0, 0, 0, 77, 69, 80,108, 97,110,101, 46, 48, 48, 49, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 32,101,169, 2,208,203,131, 2,176, 30,161, 2, 0, 0, 0, 0,104,189,131, 2, 96, 16,161, 2,
- 0, 0, 0, 0,248, 20,155, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232, 96,130, 2, 1, 0, 0, 0, 5, 0, 0, 0,
- 20, 0, 0, 0, 0, 0, 0, 0, 0,193,149, 2, 1, 0, 0, 0, 5, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 88, 7,153, 2,
- 3, 0, 0, 0, 5, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0,182, 0, 0, 0, 45, 1, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,213,204, 76, 63,255,204, 76, 63, 0, 0,104,182, 30, 0,128, 63,140, 0,128, 63,214,255,127, 63,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 4, 0, 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 4, 0, 0, 0, 32,101,169, 2, 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 44, 1, 0, 0,232, 96,130, 2, 21, 1, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,104,189,131, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 56, 14, 0, 0,104,189,131, 2, 57, 0, 0, 0,182, 0, 0, 0,133,102,230, 63,208, 51,179, 63,
- 4, 0,128,191,127,165, 0, 0,129, 90, 2,255,133,102,230, 63,206,154, 25, 63, 4, 0,128,191,127,165, 0, 0,129, 90, 2,255,
- 81, 51,179, 63,210, 51,179, 63, 3, 0,128,191, 0, 0, 0, 0,255,127, 2,255, 28, 0,128, 63,212, 51,179, 63, 1, 0,128,191,
- 0, 0, 0, 0,255,127, 2,255,207,153, 25, 63,214, 51,179, 63, 0, 0,128,191, 0, 0, 0, 0,255,127, 2,255,152,205, 76, 62,
-216, 51,179, 63,254,255,127,191, 0, 0, 0, 0,255,127, 2,255, 80, 51,179, 63,158, 0,128, 63, 3, 0,128,191, 0, 0, 0, 0,
-255,127, 2,255, 27, 0,128, 63,160, 0,128, 63, 2, 0,128,191, 0, 0, 0, 0,255,127, 2,255,204,153, 25, 63,162, 0,128, 63,
- 0, 0,128,191, 0, 0, 0, 0,255,127, 2,255,140,205, 76, 62,163, 0,128, 63,254,255,127,191, 0, 0, 0, 0,255,127, 2,255,
- 80, 51,179, 63,209,154, 25, 63, 3, 0,128,191, 0, 0, 0, 0,255,127, 2,255, 27, 0,128, 63,213,154, 25, 63, 2, 0,128,191,
- 0, 0, 0, 0,255,127, 2,255,204,153, 25, 63,217,154, 25, 63, 0, 0,128,191, 0, 0, 0, 0,255,127, 2,255,140,205, 76, 62,
-221,154, 25, 63,254,255,127,191, 0, 0, 0, 0,255,127, 2,255, 80, 51,179, 63,160,209, 76, 62, 3, 0,128,191, 0, 0, 0, 0,
-255,127, 2,255, 27, 0,128, 63,176,209, 76, 62, 2, 0,128,191, 0, 0, 0, 0,255,127, 2,255,204,153, 25, 63,188,209, 76, 62,
- 1, 0,128,191, 0, 0, 0, 0,255,127, 2,255,140,205, 76, 62,204,209, 76, 62,255,255,127,191, 0, 0, 0, 0,255,127, 2,255,
-140,205, 76, 62, 8,103,230, 63,156,153, 25,191, 0, 0, 1,128, 0, 0, 2,255,204,153, 25, 63, 10,103,230, 63,160,153, 25,191,
- 0, 0, 1,128, 0, 0, 2,255, 27, 0,128, 63, 10,103,230, 63,164,153, 25,191, 0, 0, 1,128, 0, 0, 2,255, 80, 51,179, 63,
- 12,103,230, 63,168,153, 25,191, 0, 0, 1,128, 0, 0, 2,255,140,205, 76, 62, 8,103,230, 63,196,204, 76,190, 0, 0, 1,128,
- 0, 0, 2,255,204,153, 25, 63, 10,103,230, 63,212,204, 76,190, 0, 0, 1,128, 0, 0, 2,255, 27, 0,128, 63, 10,103,230, 63,
-228,204, 76,190, 0, 0, 1,128, 0, 0, 2,255, 80, 51,179, 63, 12,103,230, 63,244,204, 76,190, 0, 0, 1,128, 0, 0, 2,255,
-140,205, 76, 62, 8,103,230, 63,216,204, 76, 62, 0, 0, 1,128, 0, 0, 2,255,204,153, 25, 63, 10,103,230, 63,200,204, 76, 62,
- 0, 0, 1,128, 0, 0, 2,255, 27, 0,128, 63, 10,103,230, 63,184,204, 76, 62, 0, 0, 1,128, 0, 0, 2,255, 80, 51,179, 63,
- 12,103,230, 63,168,204, 76, 62, 0, 0, 1,128, 0, 0, 2,255,152,205, 76, 62, 8,103,230, 63,158,153, 25, 63, 0, 0, 1,128,
- 0, 0, 2,255,207,153, 25, 63, 10,103,230, 63,154,153, 25, 63, 0, 0, 1,128, 0, 0, 2,255, 28, 0,128, 63, 10,103,230, 63,
-150,153, 25, 63, 0, 0, 1,128, 0, 0, 2,255, 81, 51,179, 63, 12,103,230, 63,150,153, 25, 63, 0, 0, 1,128, 0, 0, 2,255,
-140,205, 76, 62, 8,103,230, 63, 3, 0,128,191, 0, 0,127,165,129, 90, 0,255,204,153, 25, 63, 10,103,230, 63, 4, 0,128,191,
- 0, 0,127,165,129, 90, 0,255, 27, 0,128, 63, 10,103,230, 63, 6, 0,128,191, 0, 0,127,165,129, 90, 0,255, 80, 51,179, 63,
- 12,103,230, 63, 7, 0,128,191, 0, 0,127,165,129, 90, 0,255,144,205, 76,190, 12,103,230, 63,150,153, 25, 63, 0, 0, 1,128,
- 0, 0, 2,255,152,205, 76,190, 12,103,230, 63,168,204, 76, 62, 0, 0, 1,128, 0, 0, 2,255,152,205, 76,190, 12,103,230, 63,
-244,204, 76,190, 0, 0, 1,128, 0, 0, 2,255,152,205, 76,190, 12,103,230, 63,168,153, 25,191, 0, 0, 1,128, 0, 0, 2,255,
-152,205, 76,190,160,209, 76, 62, 3, 0,128,191, 0, 0, 0, 0,255,127, 2,255,152,205, 76,190,209,154, 25, 63, 3, 0,128,191,
- 0, 0, 0, 0,255,127, 2,255,152,205, 76,190,158, 0,128, 63, 3, 0,128,191, 0, 0, 0, 0,255,127, 2,255,144,205, 76,190,
-210, 51,179, 63, 3, 0,128,191, 0, 0, 0, 0,255,127, 2,255,131,102,230, 63, 7,103,230, 63,155,153, 25,191,127,165,127,165,
- 0, 0, 2,255,131,102,230, 63,212, 51,179, 63,159,153, 25,191, 1,128, 0, 0, 0, 0, 2,255,131,102,230, 63,160, 0,128, 63,
-163,153, 25,191, 1,128, 0, 0, 0, 0, 2,255,135,102,230, 63,207,154, 25, 63,167,153, 25,191, 1,128, 0, 0, 0, 0, 2,255,
-131,102,230, 63, 7,103,230, 63,193,204, 76,190,127,165,127,165, 0, 0, 2,255,131,102,230, 63,212, 51,179, 63,209,204, 76,190,
- 1,128, 0, 0, 0, 0, 2,255,131,102,230, 63,160, 0,128, 63,225,204, 76,190, 1,128, 0, 0, 0, 0, 2,255,135,102,230, 63,
-207,154, 25, 63,241,204, 76,190, 1,128, 0, 0, 0, 0, 2,255,131,102,230, 63, 7,103,230, 63,219,204, 76, 62,127,165,127,165,
- 0, 0, 2,255,131,102,230, 63,212, 51,179, 63,203,204, 76, 62, 1,128, 0, 0, 0, 0, 2,255,131,102,230, 63,160, 0,128, 63,
-187,204, 76, 62, 1,128, 0, 0, 0, 0, 2,255,135,102,230, 63,207,154, 25, 63,171,204, 76, 62, 1,128, 0, 0, 0, 0, 2,255,
-131,102,230, 63, 7,103,230, 63,159,153, 25, 63,127,165,127,165, 0, 0, 2,255,131,102,230, 63,212, 51,179, 63,155,153, 25, 63,
- 1,128, 0, 0, 0, 0, 2,255,131,102,230, 63,156, 0,128, 63,151,153, 25, 63, 1,128, 0, 0, 0, 0, 2,255,135,102,230, 63,
-207,154, 25, 63,151,153, 25, 63, 1,128, 0, 0, 0, 0, 2,255,131,102,230, 63, 7,103,230, 63, 3, 0,128,191, 1,128, 0, 0,
- 0, 0, 2,255,131,102,230, 63,160, 0,128, 63, 6, 0,128,191,127,165, 0, 0,129, 90, 2,255,127,102,230, 63, 28,208, 76, 62,
- 3, 0,128,191,127,165, 0, 0,129, 90, 2,255,131,102,230, 63,136,201, 76,190,155,153, 25, 63, 1,128, 0, 0, 0, 0, 2,255,
-127,102,230, 63, 28,208, 76, 62,159,153, 25, 63, 1,128, 0, 0, 0, 0, 2,255,131,102,230, 63,136,201, 76,190,203,204, 76, 62,
- 1,128, 0, 0, 0, 0, 2,255,127,102,230, 63, 28,208, 76, 62,219,204, 76, 62, 1,128, 0, 0, 0, 0, 2,255,131,102,230, 63,
-136,201, 76,190,209,204, 76,190, 1,128, 0, 0, 0, 0, 2,255,127,102,230, 63, 28,208, 76, 62,193,204, 76,190, 1,128, 0, 0,
- 0, 0, 2,255,131,102,230, 63,136,201, 76,190,159,153, 25,191, 1,128, 0, 0, 0, 0, 2,255,127,102,230, 63, 28,208, 76, 62,
-155,153, 25,191, 1,128, 0, 0, 0, 0, 2,255,150,205, 76, 62, 24,208, 76,190,254,255,127,191, 0, 0, 0, 0,255,127, 2,255,
-207,153, 25, 63, 40,208, 76,190, 0, 0,128,191, 0, 0, 0, 0,255,127, 2,255, 28, 0,128, 63, 56,208, 76,190, 1, 0,128,191,
- 0, 0, 0, 0,255,127, 2,255, 81, 51,179, 63, 72,208, 76,190, 3, 0,128,191, 0, 0, 0, 0,255,127, 2,255,133,102,230, 63,
- 88,208, 76,190, 4, 0,128,191, 1,128, 0, 0, 0, 0, 2,255,133,102,230, 63, 88,208, 76,190,146,255,127, 63, 1,128, 0, 0,
- 0, 0, 2,255, 81, 51,179, 63, 72,208, 76,190,148,255,127, 63, 0, 0, 0, 0,255,127, 2,255, 28, 0,128, 63, 56,208, 76,190,
-152,255,127, 63, 0, 0, 0, 0,255,127, 2,255,207,153, 25, 63, 40,208, 76,190,154,255,127, 63, 0, 0, 0, 0,255,127, 2,255,
-150,205, 76, 62, 24,208, 76,190,156,255,127, 63, 0, 0, 0, 0,255,127, 2,255,127,102,230, 63, 28,208, 76, 62,148,255,127, 63,
-127,165, 0, 0,129, 90, 2,255,131,102,230, 63,160, 0,128, 63,142,255,127, 63,127,165, 0, 0,129, 90, 2,255,131,102,230, 63,
- 7,103,230, 63,148,255,127, 63, 1,128, 0, 0, 0, 0, 2,255,144,205, 76,190,210, 51,179, 63,148,255,127, 63, 0, 0, 0, 0,
-255,127, 2,255,152,205, 76,190,158, 0,128, 63,148,255,127, 63, 0, 0, 0, 0,255,127, 2,255,152,205, 76,190,209,154, 25, 63,
-148,255,127, 63, 0, 0, 0, 0,255,127, 2,255,152,205, 76,190,160,209, 76, 62,148,255,127, 63, 0, 0, 0, 0,255,127, 2,255,
- 80, 51,179, 63, 12,103,230, 63,140,255,127, 63, 0, 0,127,165,129, 90, 2,255, 27, 0,128, 63, 10,103,230, 63,142,255,127, 63,
- 0, 0,127,165,129, 90, 2,255,204,153, 25, 63, 10,103,230, 63,146,255,127, 63, 0, 0,127,165,129, 90, 2,255,140,205, 76, 62,
- 8,103,230, 63,148,255,127, 63, 0, 0,127,165,129, 90, 2,255,140,205, 76, 62,204,209, 76, 62,154,255,127, 63, 0, 0, 0, 0,
-255,127, 2,255,204,153, 25, 63,188,209, 76, 62,152,255,127, 63, 0, 0, 0, 0,255,127, 2,255, 27, 0,128, 63,176,209, 76, 62,
-150,255,127, 63, 0, 0, 0, 0,255,127, 2,255, 80, 51,179, 63,160,209, 76, 62,148,255,127, 63, 0, 0, 0, 0,255,127, 2,255,
-140,205, 76, 62,221,154, 25, 63,156,255,127, 63, 0, 0, 0, 0,255,127, 2,255,204,153, 25, 63,217,154, 25, 63,154,255,127, 63,
- 0, 0, 0, 0,255,127, 2,255, 27, 0,128, 63,213,154, 25, 63,150,255,127, 63, 0, 0, 0, 0,255,127, 2,255, 80, 51,179, 63,
-209,154, 25, 63,148,255,127, 63, 0, 0, 0, 0,255,127, 2,255,140,205, 76, 62,163, 0,128, 63,156,255,127, 63, 0, 0, 0, 0,
-255,127, 2,255,204,153, 25, 63,162, 0,128, 63,154,255,127, 63, 0, 0, 0, 0,255,127, 2,255, 27, 0,128, 63,160, 0,128, 63,
-150,255,127, 63, 0, 0, 0, 0,255,127, 2,255, 80, 51,179, 63,158, 0,128, 63,148,255,127, 63, 0, 0, 0, 0,255,127, 2,255,
-152,205, 76, 62,216, 51,179, 63,156,255,127, 63, 0, 0, 0, 0,255,127, 2,255,207,153, 25, 63,214, 51,179, 63,154,255,127, 63,
- 0, 0, 0, 0,255,127, 2,255, 28, 0,128, 63,212, 51,179, 63,152,255,127, 63, 0, 0, 0, 0,255,127, 2,255, 81, 51,179, 63,
-210, 51,179, 63,148,255,127, 63, 0, 0, 0, 0,255,127, 2,255,133,102,230, 63,206,154, 25, 63,146,255,127, 63,127,165, 0, 0,
-129, 90, 2,255,133,102,230, 63,208, 51,179, 63,146,255,127, 63,127,165, 0, 0,129, 90, 2,255,144,205, 76,190,140,201, 76, 62,
-148,255,127, 63,255,127, 0, 0, 0, 0, 1,255,136,205, 76,190, 52,255,127, 63,148,255,127, 63,255,127, 0, 0, 0, 0, 1,255,
-128,205, 76,190, 48,208, 76,190,150,255,127, 63,255,127, 0, 0, 0, 0, 3,255,120,205, 76,190,194,152, 25, 63,144,255,127, 63,
-255,127, 0, 0, 0, 0, 1,255, 80,205, 76,190,254, 50,179, 63,150,255,127, 63,255,127, 0, 0, 0, 0, 1,255,128,205, 76,190,
- 12,103,230, 63,148,255,127, 63,255,127, 0, 0, 0, 0, 3,255,128,205, 76,190, 12,103,230, 63, 5, 0,128,191,255,127, 0, 0,
- 0, 0, 3,255, 80,205, 76,190,254, 50,179, 63,156,153, 25,191,255,127, 0, 0, 0, 0, 3,255,112,205, 76,190, 50,102,230, 63,
-160,153, 25,191,255,127, 0, 0, 0, 0, 3,255, 80,205, 76,190,254, 50,179, 63,195,204, 76,190,255,127, 0, 0, 0, 0, 3,255,
-112,205, 76,190, 50,102,230, 63,211,204, 76,190,255,127, 0, 0, 0, 0, 3,255, 80,205, 76,190,254, 50,179, 63,221,204, 76, 62,
-255,127, 0, 0, 0, 0, 3,255,112,205, 76,190, 50,102,230, 63,205,204, 76, 62,255,127, 0, 0, 0, 0, 3,255, 80,205, 76,190,
-254, 50,179, 63,160,153, 25, 63,255,127, 0, 0, 0, 0, 3,255,112,205, 76,190, 50,102,230, 63,156,153, 25, 63,255,127, 0, 0,
- 0, 0, 3,255, 80,205, 76,190,254, 50,179, 63, 4, 0,128,191,255,127, 0, 0, 0, 0, 1,255,120,205, 76,190,194,152, 25, 63,
- 7, 0,128,191,255,127, 0, 0, 0, 0, 1,255,128,205, 76,190, 48,208, 76,190, 4, 0,128,191,255,127, 0, 0, 0, 0, 3,255,
-152,205, 76,190, 52,255,127, 63,152,153, 25, 63,255,127, 0, 0, 0, 0, 3,255,120,205, 76,190,202,152, 25, 63,152,153, 25, 63,
-255,127, 0, 0, 0, 0, 3,255,128,205, 76,190,108,201, 76, 62,156,153, 25, 63,255,127, 0, 0, 0, 0, 3,255,128,205, 76,190,
- 48,208, 76,190,160,153, 25, 63,255,127, 0, 0, 0, 0, 1,255,152,205, 76,190, 52,255,127, 63,173,204, 76, 62,255,127, 0, 0,
- 0, 0, 3,255,120,205, 76,190,194,152, 25, 63,189,204, 76, 62,255,127, 0, 0, 0, 0, 3,255,128,205, 76,190,108,201, 76, 62,
-205,204, 76, 62,255,127, 0, 0, 0, 0, 3,255,128,205, 76,190, 48,208, 76,190,221,204, 76, 62,255,127, 0, 0, 0, 0, 1,255,
-152,205, 76,190, 52,255,127, 63,243,204, 76,190,255,127, 0, 0, 0, 0, 3,255,120,205, 76,190,194,152, 25, 63,227,204, 76,190,
-255,127, 0, 0, 0, 0, 3,255,128,205, 76,190,108,201, 76, 62,211,204, 76,190,255,127, 0, 0, 0, 0, 3,255,128,205, 76,190,
- 48,208, 76,190,195,204, 76,190,255,127, 0, 0, 0, 0, 1,255,152,205, 76,190, 52,255,127, 63,168,153, 25,191,255,127, 0, 0,
- 0, 0, 3,255,120,205, 76,190,194,152, 25, 63,164,153, 25,191,255,127, 0, 0, 0, 0, 3,255,128,205, 76,190,108,201, 76, 62,
-160,153, 25,191,255,127, 0, 0, 0, 0, 3,255,128,205, 76,190, 48,208, 76,190,156,153, 25,191,255,127, 0, 0, 0, 0, 1,255,
-136,205, 76,190, 52,255,127, 63, 5, 0,128,191,255,127, 0, 0, 0, 0, 1,255,144,205, 76,190,140,201, 76, 62, 5, 0,128,191,
-255,127, 0, 0, 0, 0, 1,255, 36, 51,179, 63, 56,208, 76,190,150,255,127, 63, 0, 0,255,127, 0, 0, 3,255,222,255,127, 63,
- 80,208, 76,190,148,255,127, 63, 0, 0,255,127, 0, 0, 3,255,116,153, 25, 63, 80,208, 76,190,144,255,127, 63, 0, 0,255,127,
- 0, 0, 3,255, 44,204, 76, 62,104,208, 76,190,142,255,127, 63, 0, 0,255,127, 0, 0, 3,255,112,205, 76,190, 64,208, 76,190,
-150,255,127, 63, 94,231, 94,231, 41,123, 1,255,112,205, 76,190, 64,208, 76,190, 4, 0,128,191, 94,231, 94,231,215,132, 1,255,
-112,205, 76,190, 64,208, 76,190,160,153, 25, 63, 0, 0,255,127, 0, 0, 1,255,112,205, 76,190, 64,208, 76,190,221,204, 76, 62,
- 0, 0,255,127, 0, 0, 1,255,112,205, 76,190, 64,208, 76,190,195,204, 76,190, 0, 0,255,127, 0, 0, 1,255,112,205, 76,190,
- 64,208, 76,190,156,153, 25,191, 0, 0,255,127, 0, 0, 1,255,136,102,230, 63, 88,208, 76,190,169,153, 25,191, 0, 0,255,127,
- 0, 0, 3,255,136,102,230, 63, 88,208, 76,190,246,204, 76,190, 0, 0,255,127, 0, 0, 3,255,136,102,230, 63, 88,208, 76,190,
-170,204, 76, 62, 0, 0,255,127, 0, 0, 3,255,135,102,230, 63, 88,208, 76,190,151,153, 25, 63, 0, 0,255,127, 0, 0, 3,255,
- 44,204, 76, 62,104,208, 76,190, 8, 0,128,191, 0, 0,255,127, 0, 0, 3,255,116,153, 25, 63, 80,208, 76,190, 7, 0,128,191,
- 0, 0,255,127, 0, 0, 3,255,222,255,127, 63, 80,208, 76,190, 5, 0,128,191, 0, 0,255,127, 0, 0, 3,255, 36, 51,179, 63,
- 56,208, 76,190, 4, 0,128,191, 0, 0,255,127, 0, 0, 3,255, 36,204, 76, 62,104,208, 76,190,151,153, 25, 63, 0, 0,255,127,
- 0, 0, 3,255,114,153, 25, 63, 80,208, 76,190,151,153, 25, 63, 0, 0,255,127, 0, 0, 3,255,220,255,127, 63, 80,208, 76,190,
-155,153, 25, 63, 0, 0,255,127, 0, 0, 3,255, 34, 51,179, 63, 56,208, 76,190,159,153, 25, 63, 0, 0,255,127, 0, 0, 3,255,
- 44,204, 76, 62,104,208, 76,190,170,204, 76, 62, 0, 0,255,127, 0, 0, 3,255,116,153, 25, 63, 80,208, 76,190,186,204, 76, 62,
- 0, 0,255,127, 0, 0, 3,255,222,255,127, 63, 80,208, 76,190,202,204, 76, 62, 0, 0,255,127, 0, 0, 3,255, 36, 51,179, 63,
- 56,208, 76,190,218,204, 76, 62, 0, 0,255,127, 0, 0, 3,255, 44,204, 76, 62,104,208, 76,190,246,204, 76,190, 0, 0,255,127,
- 0, 0, 3,255,116,153, 25, 63, 80,208, 76,190,230,204, 76,190, 0, 0,255,127, 0, 0, 3,255,222,255,127, 63, 80,208, 76,190,
-214,204, 76,190, 0, 0,255,127, 0, 0, 3,255, 36, 51,179, 63, 56,208, 76,190,198,204, 76,190, 0, 0,255,127, 0, 0, 3,255,
- 44,204, 76, 62,104,208, 76,190,169,153, 25,191, 0, 0,255,127, 0, 0, 3,255,116,153, 25, 63, 80,208, 76,190,165,153, 25,191,
- 0, 0,255,127, 0, 0, 3,255,222,255,127, 63, 80,208, 76,190,161,153, 25,191, 0, 0,255,127, 0, 0, 3,255, 36, 51,179, 63,
- 56,208, 76,190,157,153, 25,191, 0, 0,255,127, 0, 0, 3,255, 68, 65, 84, 65, 44, 1, 0, 0, 0,193,149, 2, 21, 1, 0, 0,
- 5, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 16,161, 2,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 28, 14, 0, 0, 96, 16,161, 2, 54, 0, 0, 0,
- 45, 1, 0, 0, 4, 0, 0, 0, 5, 0, 0, 0, 0, 0, 34, 0, 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 34, 0, 2, 0, 0, 0,
- 3, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 34, 0, 5, 0, 0, 0, 9, 0, 0, 0, 0, 0, 34, 0,
- 8, 0, 0, 0, 9, 0, 0, 0, 0, 0, 34, 0, 4, 0, 0, 0, 8, 0, 0, 0, 0, 0, 34, 0, 7, 0, 0, 0, 8, 0, 0, 0,
- 0, 0, 34, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 34, 0, 6, 0, 0, 0, 7, 0, 0, 0, 0, 0, 34, 0, 2, 0, 0, 0,
- 6, 0, 0, 0, 0, 0, 34, 0, 9, 0, 0, 0, 13, 0, 0, 0, 0, 0, 34, 0, 12, 0, 0, 0, 13, 0, 0, 0, 0, 0, 34, 0,
- 8, 0, 0, 0, 12, 0, 0, 0, 0, 0, 34, 0, 11, 0, 0, 0, 12, 0, 0, 0, 0, 0, 34, 0, 7, 0, 0, 0, 11, 0, 0, 0,
- 0, 0, 34, 0, 10, 0, 0, 0, 11, 0, 0, 0, 0, 0, 34, 0, 6, 0, 0, 0, 10, 0, 0, 0, 0, 0, 34, 0, 1, 0, 0, 0,
- 10, 0, 0, 0, 0, 0, 34, 0, 13, 0, 0, 0, 17, 0, 0, 0, 0, 0, 34, 0, 16, 0, 0, 0, 17, 0, 0, 0, 0, 0, 34, 0,
- 12, 0, 0, 0, 16, 0, 0, 0, 0, 0, 34, 0, 15, 0, 0, 0, 16, 0, 0, 0, 0, 0, 34, 0, 11, 0, 0, 0, 15, 0, 0, 0,
- 0, 0, 34, 0, 14, 0, 0, 0, 15, 0, 0, 0, 0, 0, 34, 0, 10, 0, 0, 0, 14, 0, 0, 0, 0, 0, 34, 0, 21, 0, 0, 0,
- 37, 0, 0, 0, 0, 0, 34, 0, 20, 0, 0, 0, 36, 0, 0, 0, 0, 0, 34, 0, 19, 0, 0, 0, 35, 0, 0, 0, 0, 0, 34, 0,
- 18, 0, 0, 0, 34, 0, 0, 0, 0, 0, 34, 0, 21, 0, 0, 0, 25, 0, 0, 0, 0, 0, 34, 0, 20, 0, 0, 0, 21, 0, 0, 0,
- 0, 0, 34, 0, 20, 0, 0, 0, 24, 0, 0, 0, 0, 0, 34, 0, 19, 0, 0, 0, 20, 0, 0, 0, 0, 0, 34, 0, 19, 0, 0, 0,
- 23, 0, 0, 0, 0, 0, 34, 0, 18, 0, 0, 0, 19, 0, 0, 0, 0, 0, 34, 0, 18, 0, 0, 0, 22, 0, 0, 0, 0, 0, 34, 0,
- 25, 0, 0, 0, 29, 0, 0, 0, 0, 0, 34, 0, 24, 0, 0, 0, 25, 0, 0, 0, 0, 0, 34, 0, 24, 0, 0, 0, 28, 0, 0, 0,
- 0, 0, 34, 0, 23, 0, 0, 0, 24, 0, 0, 0, 0, 0, 34, 0, 23, 0, 0, 0, 27, 0, 0, 0, 0, 0, 34, 0, 22, 0, 0, 0,
- 23, 0, 0, 0, 0, 0, 34, 0, 22, 0, 0, 0, 26, 0, 0, 0, 0, 0, 34, 0, 29, 0, 0, 0, 33, 0, 0, 0, 0, 0, 34, 0,
- 28, 0, 0, 0, 29, 0, 0, 0, 0, 0, 34, 0, 28, 0, 0, 0, 32, 0, 0, 0, 0, 0, 34, 0, 27, 0, 0, 0, 28, 0, 0, 0,
- 0, 0, 34, 0, 27, 0, 0, 0, 31, 0, 0, 0, 0, 0, 34, 0, 26, 0, 0, 0, 27, 0, 0, 0, 0, 0, 34, 0, 26, 0, 0, 0,
- 30, 0, 0, 0, 0, 0, 34, 0, 32, 0, 0, 0, 33, 0, 0, 0, 0, 0, 34, 0, 31, 0, 0, 0, 32, 0, 0, 0, 0, 0, 34, 0,
- 30, 0, 0, 0, 31, 0, 0, 0, 0, 0, 34, 0, 34, 0, 0, 0, 35, 0, 0, 0, 0, 0, 34, 0, 36, 0, 0, 0, 37, 0, 0, 0,
- 0, 0, 34, 0, 2, 0, 0, 0, 37, 0, 0, 0, 0, 0, 34, 0, 3, 0, 0, 0, 36, 0, 0, 0, 0, 0, 34, 0, 4, 0, 0, 0,
- 35, 0, 0, 0, 0, 0, 34, 0, 5, 0, 0, 0, 34, 0, 0, 0, 0, 0, 34, 0, 38, 0, 0, 0, 39, 0, 0, 0, 0, 0, 34, 0,
- 40, 0, 0, 0, 41, 0, 0, 0, 0, 0, 34, 0, 42, 0, 0, 0, 43, 0, 0, 0, 0, 0, 34, 0, 44, 0, 0, 0, 45, 0, 0, 0,
- 0, 0, 34, 0, 30, 0, 0, 0, 38, 0, 0, 0, 0, 0, 34, 0, 26, 0, 0, 0, 39, 0, 0, 0, 0, 0, 34, 0, 22, 0, 0, 0,
- 40, 0, 0, 0, 0, 0, 34, 0, 18, 0, 0, 0, 41, 0, 0, 0, 0, 0, 34, 0, 17, 0, 0, 0, 42, 0, 0, 0, 0, 0, 34, 0,
- 13, 0, 0, 0, 43, 0, 0, 0, 0, 0, 34, 0, 9, 0, 0, 0, 44, 0, 0, 0, 0, 0, 34, 0, 5, 0, 0, 0, 45, 0, 0, 0,
- 0, 0, 34, 0, 49, 0, 0, 0, 72, 0, 0, 0, 0, 0, 34, 0, 53, 0, 0, 0, 70, 0, 0, 0, 0, 0, 34, 0, 57, 0, 0, 0,
- 68, 0, 0, 0, 0, 0, 34, 0, 61, 0, 0, 0, 66, 0, 0, 0, 0, 0, 34, 0, 48, 0, 0, 0, 63, 0, 0, 0, 0, 0, 34, 0,
- 46, 0, 0, 0, 62, 0, 0, 0, 0, 0, 34, 0, 49, 0, 0, 0, 53, 0, 0, 0, 0, 0, 34, 0, 48, 0, 0, 0, 49, 0, 0, 0,
- 0, 0, 34, 0, 48, 0, 0, 0, 52, 0, 0, 0, 0, 0, 34, 0, 47, 0, 0, 0, 48, 0, 0, 0, 0, 0, 34, 0, 47, 0, 0, 0,
- 51, 0, 0, 0, 0, 0, 34, 0, 46, 0, 0, 0, 47, 0, 0, 0, 0, 0, 34, 0, 46, 0, 0, 0, 50, 0, 0, 0, 0, 0, 34, 0,
- 53, 0, 0, 0, 57, 0, 0, 0, 0, 0, 34, 0, 52, 0, 0, 0, 53, 0, 0, 0, 0, 0, 34, 0, 52, 0, 0, 0, 56, 0, 0, 0,
- 0, 0, 34, 0, 51, 0, 0, 0, 52, 0, 0, 0, 0, 0, 34, 0, 51, 0, 0, 0, 55, 0, 0, 0, 0, 0, 34, 0, 50, 0, 0, 0,
- 51, 0, 0, 0, 0, 0, 34, 0, 50, 0, 0, 0, 54, 0, 0, 0, 0, 0, 34, 0, 57, 0, 0, 0, 61, 0, 0, 0, 0, 0, 34, 0,
- 56, 0, 0, 0, 57, 0, 0, 0, 0, 0, 34, 0, 56, 0, 0, 0, 60, 0, 0, 0, 0, 0, 34, 0, 55, 0, 0, 0, 56, 0, 0, 0,
- 0, 0, 34, 0, 55, 0, 0, 0, 59, 0, 0, 0, 0, 0, 34, 0, 54, 0, 0, 0, 55, 0, 0, 0, 0, 0, 34, 0, 54, 0, 0, 0,
- 58, 0, 0, 0, 0, 0, 34, 0, 60, 0, 0, 0, 61, 0, 0, 0, 0, 0, 34, 0, 59, 0, 0, 0, 60, 0, 0, 0, 0, 0, 34, 0,
- 58, 0, 0, 0, 59, 0, 0, 0, 0, 0, 34, 0, 65, 0, 0, 0, 66, 0, 0, 0, 0, 0, 34, 0, 66, 0, 0, 0, 68, 0, 0, 0,
- 0, 0, 34, 0, 67, 0, 0, 0, 68, 0, 0, 0, 0, 0, 34, 0, 68, 0, 0, 0, 70, 0, 0, 0, 0, 0, 34, 0, 69, 0, 0, 0,
- 70, 0, 0, 0, 0, 0, 34, 0, 67, 0, 0, 0, 69, 0, 0, 0, 0, 0, 34, 0, 70, 0, 0, 0, 72, 0, 0, 0, 0, 0, 34, 0,
- 71, 0, 0, 0, 72, 0, 0, 0, 0, 0, 34, 0, 64, 0, 0, 0, 72, 0, 0, 0, 0, 0, 34, 0, 1, 0, 0, 0, 63, 0, 0, 0,
- 0, 0, 34, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 62, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0,
- 47, 0, 0, 0, 0, 0, 34, 0, 1, 0, 0, 0, 49, 0, 0, 0, 0, 0, 34, 0, 1, 0, 0, 0, 64, 0, 0, 0, 0, 0, 34, 0,
- 33, 0, 0, 0, 58, 0, 0, 0, 0, 0, 34, 0, 29, 0, 0, 0, 54, 0, 0, 0, 0, 0, 34, 0, 25, 0, 0, 0, 50, 0, 0, 0,
- 0, 0, 34, 0, 21, 0, 0, 0, 46, 0, 0, 0, 0, 0, 34, 0, 14, 0, 0, 0, 64, 0, 0, 0, 0, 0, 34, 0, 6, 0, 0, 0,
- 63, 0, 0, 0, 0, 0, 34, 0, 75, 0, 0, 0, 76, 0, 0, 0, 0, 0, 34, 0, 73, 0, 0, 0, 74, 0, 0, 0, 0, 0, 34, 0,
- 71, 0, 0, 0, 77, 0, 0, 0, 0, 0, 34, 0, 64, 0, 0, 0, 77, 0, 0, 0, 0, 0, 34, 0, 14, 0, 0, 0, 76, 0, 0, 0,
- 0, 0, 34, 0, 15, 0, 0, 0, 75, 0, 0, 0, 0, 0, 34, 0, 16, 0, 0, 0, 74, 0, 0, 0, 0, 0, 34, 0, 17, 0, 0, 0,
- 73, 0, 0, 0, 0, 0, 34, 0, 82, 0, 0, 0, 94, 0, 0, 0, 0, 0, 34, 0, 81, 0, 0, 0, 95, 0, 0, 0, 0, 0, 34, 0,
- 80, 0, 0, 0, 96, 0, 0, 0, 0, 0, 34, 0, 79, 0, 0, 0, 97, 0, 0, 0, 0, 0, 34, 0, 78, 0, 0, 0, 83, 0, 0, 0,
- 0, 0, 34, 0, 81, 0, 0, 0, 82, 0, 0, 0, 0, 0, 34, 0, 79, 0, 0, 0, 80, 0, 0, 0, 0, 0, 34, 0, 84, 0, 0, 0,
-105, 0, 0, 0, 0, 0, 34, 0, 83, 0, 0, 0, 97, 0, 0, 0, 0, 0, 34, 0, 83, 0, 0, 0,110, 0, 0, 0, 0, 0, 34, 0,
- 85, 0, 0, 0,111, 0, 0, 0, 0, 0, 34, 0, 84, 0, 0, 0,111, 0, 0, 0, 0, 0, 34, 0, 84, 0, 0, 0,110, 0, 0, 0,
- 0, 0, 34, 0, 86, 0, 0, 0,106, 0, 0, 0, 0, 0, 34, 0, 87, 0, 0, 0,102, 0, 0, 0, 0, 0, 34, 0, 88, 0, 0, 0,
- 98, 0, 0, 0, 0, 0, 34, 0, 89, 0, 0, 0, 94, 0, 0, 0, 0, 0, 34, 0, 86, 0, 0, 0, 87, 0, 0, 0, 0, 0, 34, 0,
- 88, 0, 0, 0, 89, 0, 0, 0, 0, 0, 34, 0, 93, 0, 0, 0,106, 0, 0, 0, 0, 0, 34, 0, 92, 0, 0, 0,107, 0, 0, 0,
- 0, 0, 34, 0, 91, 0, 0, 0,108, 0, 0, 0, 0, 0, 34, 0, 90, 0, 0, 0,109, 0, 0, 0, 0, 0, 34, 0, 90, 0, 0, 0,
- 91, 0, 0, 0, 0, 0, 34, 0, 92, 0, 0, 0, 93, 0, 0, 0, 0, 0, 34, 0, 97, 0, 0, 0,101, 0, 0, 0, 0, 0, 34, 0,
- 96, 0, 0, 0, 97, 0, 0, 0, 0, 0, 34, 0, 96, 0, 0, 0,100, 0, 0, 0, 0, 0, 34, 0, 95, 0, 0, 0, 96, 0, 0, 0,
- 0, 0, 34, 0, 95, 0, 0, 0, 99, 0, 0, 0, 0, 0, 34, 0, 94, 0, 0, 0, 95, 0, 0, 0, 0, 0, 34, 0, 94, 0, 0, 0,
- 98, 0, 0, 0, 0, 0, 34, 0,101, 0, 0, 0,110, 0, 0, 0, 0, 0, 34, 0,101, 0, 0, 0,105, 0, 0, 0, 0, 0, 34, 0,
-100, 0, 0, 0,101, 0, 0, 0, 0, 0, 34, 0,100, 0, 0, 0,104, 0, 0, 0, 0, 0, 34, 0, 99, 0, 0, 0,100, 0, 0, 0,
- 0, 0, 34, 0, 99, 0, 0, 0,103, 0, 0, 0, 0, 0, 34, 0, 98, 0, 0, 0, 99, 0, 0, 0, 0, 0, 34, 0, 98, 0, 0, 0,
-102, 0, 0, 0, 0, 0, 34, 0,105, 0, 0, 0,109, 0, 0, 0, 0, 0, 34, 0,104, 0, 0, 0,105, 0, 0, 0, 0, 0, 34, 0,
-104, 0, 0, 0,108, 0, 0, 0, 0, 0, 34, 0,103, 0, 0, 0,104, 0, 0, 0, 0, 0, 34, 0,103, 0, 0, 0,107, 0, 0, 0,
- 0, 0, 34, 0,102, 0, 0, 0,103, 0, 0, 0, 0, 0, 34, 0,102, 0, 0, 0,106, 0, 0, 0, 0, 0, 34, 0,109, 0, 0, 0,
-111, 0, 0, 0, 0, 0, 34, 0,108, 0, 0, 0,109, 0, 0, 0, 0, 0, 34, 0,107, 0, 0, 0,108, 0, 0, 0, 0, 0, 34, 0,
-106, 0, 0, 0,107, 0, 0, 0, 0, 0, 34, 0, 65, 0, 0, 0, 78, 0, 0, 0, 0, 0, 34, 0, 66, 0, 0, 0, 83, 0, 0, 0,
- 0, 0, 34, 0, 58, 0, 0, 0, 85, 0, 0, 0, 0, 0, 34, 0, 59, 0, 0, 0,111, 0, 0, 0, 0, 0, 34, 0, 60, 0, 0, 0,
- 84, 0, 0, 0, 0, 0, 34, 0, 61, 0, 0, 0,110, 0, 0, 0, 0, 0, 34, 0, 30, 0, 0, 0, 93, 0, 0, 0, 0, 0, 34, 0,
- 31, 0, 0, 0, 92, 0, 0, 0, 0, 0, 34, 0, 32, 0, 0, 0, 91, 0, 0, 0, 0, 0, 34, 0, 33, 0, 0, 0, 90, 0, 0, 0,
- 0, 0, 34, 0,113, 0, 0, 0,130, 0, 0, 0, 0, 0, 35, 0,115, 0, 0, 0,131, 0, 0, 0, 0, 0, 35, 0,112, 0, 0, 0,
-132, 0, 0, 0, 0, 0, 35, 0,114, 0, 0, 0,133, 0, 0, 0, 0, 0, 35, 0,116, 0, 0, 0,125, 0, 0, 0, 0, 0, 35, 0,
-117, 0, 0, 0,126, 0, 0, 0, 0, 0, 35, 0,113, 0, 0, 0,115, 0, 0, 0, 0, 0, 35, 0,112, 0, 0, 0,115, 0, 0, 0,
- 0, 0,163, 0,112, 0, 0, 0,114, 0, 0, 0, 0, 0, 35, 0,113, 0, 0, 0,116, 0, 0, 0, 0, 0,163, 0,116, 0, 0, 0,
-117, 0, 0, 0, 0, 0, 35, 0,118, 0, 0, 0,127, 0, 0, 0, 0, 0, 35, 0,118, 0, 0, 0,120, 0, 0, 0, 0, 0, 35, 0,
-127, 0, 0, 0,146, 0, 0, 0, 0, 0,163, 0,142, 0, 0, 0,146, 0, 0, 0, 0, 0, 35, 0,144, 0, 0, 0,147, 0, 0, 0,
- 0, 0, 35, 0,129, 0, 0, 0,147, 0, 0, 0, 0, 0, 35, 0,128, 0, 0, 0,147, 0, 0, 0, 0, 0,163, 0,128, 0, 0, 0,
-146, 0, 0, 0, 0, 0, 35, 0,119, 0, 0, 0,127, 0, 0, 0, 0, 0, 35, 0,119, 0, 0, 0,120, 0, 0, 0, 0, 0, 35, 0,
-119, 0, 0, 0,121, 0, 0, 0, 0, 0, 35, 0,122, 0, 0, 0,124, 0, 0, 0, 0, 0, 35, 0,121, 0, 0, 0,122, 0, 0, 0,
- 0, 0, 35, 0,121, 0, 0, 0,123, 0, 0, 0, 0, 0, 35, 0,123, 0, 0, 0,124, 0, 0, 0, 0, 0, 35, 0,123, 0, 0, 0,
-125, 0, 0, 0, 0, 0, 35, 0,125, 0, 0, 0,126, 0, 0, 0, 0, 0, 35, 0,132, 0, 0, 0,133, 0, 0, 0, 0, 0, 35, 0,
-131, 0, 0, 0,132, 0, 0, 0, 0, 0, 35, 0,130, 0, 0, 0,131, 0, 0, 0, 0, 0, 35, 0,133, 0, 0, 0,137, 0, 0, 0,
- 0, 0,163, 0,136, 0, 0, 0,137, 0, 0, 0, 0, 0, 35, 0,132, 0, 0, 0,136, 0, 0, 0, 0, 0, 35, 0,135, 0, 0, 0,
-136, 0, 0, 0, 0, 0, 35, 0,131, 0, 0, 0,135, 0, 0, 0, 0, 0, 35, 0,134, 0, 0, 0,135, 0, 0, 0, 0, 0, 35, 0,
-130, 0, 0, 0,134, 0, 0, 0, 0, 0, 35, 0,137, 0, 0, 0,141, 0, 0, 0, 0, 0, 35, 0,140, 0, 0, 0,141, 0, 0, 0,
- 0, 0, 35, 0,136, 0, 0, 0,140, 0, 0, 0, 0, 0, 35, 0,139, 0, 0, 0,140, 0, 0, 0, 0, 0, 35, 0,135, 0, 0, 0,
-139, 0, 0, 0, 0, 0, 35, 0,138, 0, 0, 0,139, 0, 0, 0, 0, 0, 35, 0,134, 0, 0, 0,138, 0, 0, 0, 0, 0, 35, 0,
-141, 0, 0, 0,145, 0, 0, 0, 0, 0,163, 0,144, 0, 0, 0,145, 0, 0, 0, 0, 0, 35, 0,140, 0, 0, 0,144, 0, 0, 0,
- 0, 0, 35, 0,143, 0, 0, 0,144, 0, 0, 0, 0, 0, 35, 0,139, 0, 0, 0,143, 0, 0, 0, 0, 0, 35, 0,142, 0, 0, 0,
-143, 0, 0, 0, 0, 0, 35, 0,138, 0, 0, 0,142, 0, 0, 0, 0, 0, 35, 0,129, 0, 0, 0,145, 0, 0, 0, 0, 0, 35, 0,
-128, 0, 0, 0,143, 0, 0, 0, 0, 0, 35, 0,125, 0, 0, 0,130, 0, 0, 0, 0, 0, 35, 0,123, 0, 0, 0,134, 0, 0, 0,
- 0, 0, 35, 0,121, 0, 0, 0,138, 0, 0, 0, 0, 0, 35, 0,119, 0, 0, 0,142, 0, 0, 0, 0, 0, 35, 0,151, 0, 0, 0,
-166, 0, 0, 0, 0, 0, 35, 0,150, 0, 0, 0,167, 0, 0, 0, 0, 0, 35, 0,149, 0, 0, 0,168, 0, 0, 0, 0, 0, 35, 0,
-148, 0, 0, 0,169, 0, 0, 0, 0, 0, 35, 0,152, 0, 0, 0,154, 0, 0, 0, 0, 0,163, 0,148, 0, 0, 0,149, 0, 0, 0,
- 0, 0, 35, 0,150, 0, 0, 0,151, 0, 0, 0, 0, 0, 35, 0,157, 0, 0, 0,178, 0, 0, 0, 0, 0, 35, 0,156, 0, 0, 0,
-174, 0, 0, 0, 0, 0, 35, 0,155, 0, 0, 0,170, 0, 0, 0, 0, 0, 35, 0,154, 0, 0, 0,166, 0, 0, 0, 0, 0, 35, 0,
-154, 0, 0, 0,155, 0, 0, 0, 0, 0, 35, 0,155, 0, 0, 0,156, 0, 0, 0, 0, 0,163, 0,156, 0, 0, 0,157, 0, 0, 0,
- 0, 0, 35, 0,153, 0, 0, 0,157, 0, 0, 0, 0, 0,163, 0,158, 0, 0, 0,181, 0, 0, 0, 0, 0, 35, 0,159, 0, 0, 0,
-177, 0, 0, 0, 0, 0, 35, 0,160, 0, 0, 0,173, 0, 0, 0, 0, 0, 35, 0,161, 0, 0, 0,169, 0, 0, 0, 0, 0, 35, 0,
-158, 0, 0, 0,159, 0, 0, 0, 0, 0, 35, 0,160, 0, 0, 0,161, 0, 0, 0, 0, 0, 35, 0,162, 0, 0, 0,163, 0, 0, 0,
- 0, 0, 35, 0,164, 0, 0, 0,165, 0, 0, 0, 0, 0, 35, 0,168, 0, 0, 0,169, 0, 0, 0, 0, 0, 35, 0,167, 0, 0, 0,
-168, 0, 0, 0, 0, 0, 35, 0,166, 0, 0, 0,167, 0, 0, 0, 0, 0, 35, 0,169, 0, 0, 0,173, 0, 0, 0, 0, 0, 35, 0,
-172, 0, 0, 0,173, 0, 0, 0, 0, 0, 35, 0,168, 0, 0, 0,172, 0, 0, 0, 0, 0, 35, 0,171, 0, 0, 0,172, 0, 0, 0,
- 0, 0, 35, 0,167, 0, 0, 0,171, 0, 0, 0, 0, 0, 35, 0,170, 0, 0, 0,171, 0, 0, 0, 0, 0, 35, 0,166, 0, 0, 0,
-170, 0, 0, 0, 0, 0, 35, 0,173, 0, 0, 0,177, 0, 0, 0, 0, 0, 35, 0,176, 0, 0, 0,177, 0, 0, 0, 0, 0, 35, 0,
-172, 0, 0, 0,176, 0, 0, 0, 0, 0, 35, 0,175, 0, 0, 0,176, 0, 0, 0, 0, 0, 35, 0,171, 0, 0, 0,175, 0, 0, 0,
- 0, 0, 35, 0,174, 0, 0, 0,175, 0, 0, 0, 0, 0, 35, 0,170, 0, 0, 0,174, 0, 0, 0, 0, 0, 35, 0,177, 0, 0, 0,
-181, 0, 0, 0, 0, 0, 35, 0,180, 0, 0, 0,181, 0, 0, 0, 0, 0, 35, 0,176, 0, 0, 0,180, 0, 0, 0, 0, 0, 35, 0,
-179, 0, 0, 0,180, 0, 0, 0, 0, 0, 35, 0,175, 0, 0, 0,179, 0, 0, 0, 0, 0, 35, 0,178, 0, 0, 0,179, 0, 0, 0,
- 0, 0, 35, 0,174, 0, 0, 0,178, 0, 0, 0, 0, 0, 35, 0,165, 0, 0, 0,181, 0, 0, 0, 0, 0, 35, 0,164, 0, 0, 0,
-180, 0, 0, 0, 0, 0, 35, 0,163, 0, 0, 0,179, 0, 0, 0, 0, 0, 35, 0,162, 0, 0, 0,178, 0, 0, 0, 0, 0, 35, 0,
- 68, 65, 84, 65, 44, 1, 0, 0, 88, 7,153, 2, 21, 1, 0, 0, 5, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,208,203,131, 2, 5, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 85, 86, 84,101,120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,176, 30,161, 2, 6, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 67,111,108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,248, 20,155, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65,200, 5, 0, 0,208,203,131, 2, 53, 0, 0, 0, 74, 0, 0, 0, 35, 0, 0, 0, 34, 0, 0, 0, 5, 0, 0, 0,
- 4, 0, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 36, 0, 0, 0, 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0,
- 45, 0, 0, 0, 44, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 4, 0, 0, 0, 8, 0, 0, 0, 7, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 6, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 9, 0, 0, 0,
- 13, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 7, 0, 0, 0, 11, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0,
- 13, 0, 0, 0, 43, 0, 0, 0, 42, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 12, 0, 0, 0, 16, 0, 0, 0,
- 15, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 10, 0, 0, 0, 14, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0,
- 17, 0, 0, 0, 73, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 75, 0, 0, 0, 76, 0, 0, 0, 14, 0, 0, 0, 15, 0, 0, 0,
- 0, 0, 0, 0, 21, 0, 0, 0, 20, 0, 0, 0, 36, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 18, 0, 0, 0,
- 34, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 50, 0, 0, 0, 25, 0, 0, 0, 21, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0,
- 24, 0, 0, 0, 23, 0, 0, 0, 19, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 40, 0, 0, 0, 41, 0, 0, 0,
- 18, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 28, 0, 0, 0, 24, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0,
- 26, 0, 0, 0, 22, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 58, 0, 0, 0, 33, 0, 0, 0, 29, 0, 0, 0, 54, 0, 0, 0,
- 0, 0, 0, 0, 32, 0, 0, 0, 31, 0, 0, 0, 27, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 38, 0, 0, 0,
- 39, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 90, 0, 0, 0, 91, 0, 0, 0, 32, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0,
- 92, 0, 0, 0, 93, 0, 0, 0, 30, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, 48, 0, 0, 0, 63, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 47, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0,
- 51, 0, 0, 0, 47, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 57, 0, 0, 0, 56, 0, 0, 0, 52, 0, 0, 0, 53, 0, 0, 0,
- 0, 0, 0, 0, 55, 0, 0, 0, 54, 0, 0, 0, 50, 0, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 60, 0, 0, 0, 59, 0, 0, 0,
- 55, 0, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0,110, 0, 0, 0, 84, 0, 0, 0, 60, 0, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0,
-111, 0, 0, 0, 85, 0, 0, 0, 58, 0, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 78, 0, 0, 0, 83, 0, 0, 0, 66, 0, 0, 0,
- 65, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 61, 0, 0, 0, 57, 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0,
- 68, 0, 0, 0, 70, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 70, 0, 0, 0, 53, 0, 0, 0, 49, 0, 0, 0, 72, 0, 0, 0,
- 0, 0, 0, 0, 71, 0, 0, 0, 72, 0, 0, 0, 64, 0, 0, 0, 77, 0, 0, 0, 0, 0, 0, 0, 80, 0, 0, 0, 79, 0, 0, 0,
- 97, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 95, 0, 0, 0, 94, 0, 0, 0, 82, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0,
-110, 0, 0, 0,101, 0, 0, 0, 97, 0, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0,100, 0, 0, 0, 99, 0, 0, 0, 95, 0, 0, 0,
- 96, 0, 0, 0, 0, 0, 0, 0, 98, 0, 0, 0, 88, 0, 0, 0, 89, 0, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0,105, 0, 0, 0,
-104, 0, 0, 0,100, 0, 0, 0,101, 0, 0, 0, 0, 0, 0, 0,103, 0, 0, 0,102, 0, 0, 0, 98, 0, 0, 0, 99, 0, 0, 0,
- 0, 0, 0, 0,111, 0, 0, 0,109, 0, 0, 0,105, 0, 0, 0, 84, 0, 0, 0, 0, 0, 0, 0,108, 0, 0, 0,107, 0, 0, 0,
-103, 0, 0, 0,104, 0, 0, 0, 0, 0, 0, 0,106, 0, 0, 0, 86, 0, 0, 0, 87, 0, 0, 0,102, 0, 0, 0, 0, 0, 0, 0,
- 90, 0, 0, 0, 91, 0, 0, 0,108, 0, 0, 0,109, 0, 0, 0, 0, 0, 0, 0, 92, 0, 0, 0, 93, 0, 0, 0,106, 0, 0, 0,
-107, 0, 0, 0, 0, 0, 0, 0,120, 0, 0, 0,119, 0, 0, 0,127, 0, 0, 0,118, 0, 0, 0, 0, 0, 0, 2,121, 0, 0, 0,
-138, 0, 0, 0,142, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 2,124, 0, 0, 0,123, 0, 0, 0,121, 0, 0, 0,122, 0, 0, 0,
- 0, 0, 0, 2,125, 0, 0, 0,130, 0, 0, 0,134, 0, 0, 0,123, 0, 0, 0, 0, 0, 0, 2,117, 0, 0, 0,116, 0, 0, 0,
-125, 0, 0, 0,126, 0, 0, 0, 0, 0, 0, 2,112, 0, 0, 0,114, 0, 0, 0,133, 0, 0, 0,132, 0, 0, 0, 0, 0, 0, 2,
-113, 0, 0, 0,115, 0, 0, 0,131, 0, 0, 0,130, 0, 0, 0, 0, 0, 0, 2,131, 0, 0, 0,132, 0, 0, 0,136, 0, 0, 0,
-135, 0, 0, 0, 0, 0, 0, 2,136, 0, 0, 0,137, 0, 0, 0,141, 0, 0, 0,140, 0, 0, 0, 0, 0, 0, 2,134, 0, 0, 0,
-135, 0, 0, 0,139, 0, 0, 0,138, 0, 0, 0, 0, 0, 0, 2,139, 0, 0, 0,140, 0, 0, 0,144, 0, 0, 0,143, 0, 0, 0,
- 0, 0, 0, 2,129, 0, 0, 0,147, 0, 0, 0,144, 0, 0, 0,145, 0, 0, 0, 0, 0, 0, 2,142, 0, 0, 0,143, 0, 0, 0,
-128, 0, 0, 0,146, 0, 0, 0, 0, 0, 0, 2,149, 0, 0, 0,148, 0, 0, 0,169, 0, 0, 0,168, 0, 0, 0, 0, 0, 0, 2,
-151, 0, 0, 0,150, 0, 0, 0,167, 0, 0, 0,166, 0, 0, 0, 0, 0, 0, 2,169, 0, 0, 0,161, 0, 0, 0,160, 0, 0, 0,
-173, 0, 0, 0, 0, 0, 0, 2,167, 0, 0, 0,168, 0, 0, 0,172, 0, 0, 0,171, 0, 0, 0, 0, 0, 0, 2,154, 0, 0, 0,
-166, 0, 0, 0,170, 0, 0, 0,155, 0, 0, 0, 0, 0, 0, 2,172, 0, 0, 0,173, 0, 0, 0,177, 0, 0, 0,176, 0, 0, 0,
- 0, 0, 0, 2,170, 0, 0, 0,171, 0, 0, 0,175, 0, 0, 0,174, 0, 0, 0, 0, 0, 0, 2,177, 0, 0, 0,159, 0, 0, 0,
-158, 0, 0, 0,181, 0, 0, 0, 0, 0, 0, 2,175, 0, 0, 0,176, 0, 0, 0,180, 0, 0, 0,179, 0, 0, 0, 0, 0, 0, 2,
-156, 0, 0, 0,174, 0, 0, 0,178, 0, 0, 0,157, 0, 0, 0, 0, 0, 0, 2,180, 0, 0, 0,181, 0, 0, 0,165, 0, 0, 0,
-164, 0, 0, 0, 0, 0, 0, 2,178, 0, 0, 0,179, 0, 0, 0,163, 0, 0, 0,162, 0, 0, 0, 0, 0, 0, 2, 68, 65, 84, 65,
-184, 12, 0, 0,176, 30,161, 2, 61, 0, 0, 0, 74, 0, 0, 0,160, 84,104, 61,242, 65, 79, 63,128,105,188,189,120, 47, 41, 63,
-160, 84,104, 61, 0, 29, 3, 63, 26, 95, 82, 62,120, 47, 41, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,122, 84,181, 62,
-113,179,141, 63, 26, 95, 82, 62,102, 84,117, 63,127, 84,181, 62,242, 65, 79, 63,190,188, 0, 63,102, 84,117, 63, 0, 0, 0, 0,
- 60, 0, 1, 0, 0, 0, 0, 0,160, 84,104, 61, 0, 29, 3, 63,128,106,188,189,176, 20,186, 62,144, 82,104, 61,128,223, 91, 62,
- 14, 95, 82, 62, 0, 21,186, 62, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,127, 84,181, 62,242, 65, 79, 63, 26, 95, 82, 62,
-120, 47, 41, 63,122, 84,181, 62,248, 28, 3, 63,188,188, 0, 63,120, 47, 41, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,
- 56,207, 38, 63,111,179,141, 63,190,188, 0, 63,102, 84,117, 63, 52,207, 38, 63,236, 65, 79, 63,172,225, 76, 63,102, 84,117, 63,
- 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,122, 84,181, 62,248, 28, 3, 63, 14, 95, 82, 62, 0, 21,186, 62,122, 84,181, 62,
- 32,224, 91, 62,185,188, 0, 63, 0, 21,186, 62, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, 52,207, 38, 63,236, 65, 79, 63,
-188,188, 0, 63,120, 47, 41, 63, 52,207, 38, 63,248, 28, 3, 63,174,225, 76, 63,116, 47, 41, 63, 0, 0, 0, 0, 60, 0, 1, 0,
- 0, 0, 0, 0,122, 84,181, 62, 32,224, 91, 62,138, 94, 82, 62, 48, 43,135, 61, 61, 84,181, 62,176,104,169,189,185,188, 0, 63,
- 96, 44,135, 61, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, 52,207, 38, 63,248, 28, 3, 63,185,188, 0, 63, 0, 21,186, 62,
- 51,207, 38, 63, 24,224, 91, 62,174,225, 76, 63, 0, 21,186, 62, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, 44,244,114, 63,
-236, 65, 79, 63,174,225, 76, 63,116, 47, 41, 63, 42,244,114, 63,244, 28, 3, 63, 99,131,140, 63, 76, 47, 41, 63, 0, 0, 0, 0,
- 60, 0, 1, 0, 0, 0, 0, 0, 51,207, 38, 63, 24,224, 91, 62,185,188, 0, 63, 96, 44,135, 61,248,207, 38, 63,144,109,169,189,
-112,226, 76, 63, 64, 38,135, 61, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,240,244,114, 63, 4,221, 91, 62,180,131,140, 63,
-116, 19,186, 62, 42,244,114, 63,244, 28, 3, 63,174,225, 76, 63, 0, 21,186, 62, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,
-122, 84,181, 62,113,179,141, 63, 26, 95, 82, 62,102, 84,117, 63, 26, 95, 82, 62,102, 84,117, 63,122, 84,181, 62,113,179,141, 63,
- 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,160, 84,104, 61,242, 65, 79, 63,128,105,188,189,120, 47, 41, 63,128,105,188,189,
-120, 47, 41, 63,160, 84,104, 61,242, 65, 79, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,188,188, 0, 63,173,188,160, 63,
-122, 84,181, 62,113,179,141, 63,122, 84,181, 62,113,179,141, 63,188,188, 0, 63,173,188,160, 63, 0, 0, 0, 0, 60, 0, 1, 0,
- 0, 0, 0, 0, 26, 95, 82, 62,102, 84,117, 63,160, 84,104, 61,242, 65, 79, 63,160, 84,104, 61,242, 65, 79, 63, 26, 95, 82, 62,
-102, 84,117, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,128,105,188,189,120, 47, 41, 63, 64,127,118,190,216, 28, 3, 63,
- 64,127,118,190,216, 28, 3, 63,128,105,188,189,120, 47, 41, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,122, 84,181, 62,
-113,179,141, 63, 26, 95, 82, 62,102, 84,117, 63, 26, 95, 82, 62,102, 84,117, 63,122, 84,181, 62,113,179,141, 63, 0, 0, 0, 0,
- 60, 0, 1, 0, 0, 0, 0, 0,160, 84,104, 61,242, 65, 79, 63,128,105,188,189,120, 47, 41, 63,128,105,188,189,120, 47, 41, 63,
-160, 84,104, 61,242, 65, 79, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,188,188, 0, 63,173,188,160, 63,122, 84,181, 62,
-113,179,141, 63,122, 84,181, 62,113,179,141, 63,188,188, 0, 63,173,188,160, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,
- 26, 95, 82, 62,102, 84,117, 63,200, 84,104, 61,242, 65, 79, 63,160, 84,104, 61,242, 65, 79, 63, 26, 95, 82, 62,102, 84,117, 63,
- 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, 96,105,188,189,120, 47, 41, 63, 56,127,118,190,220, 28, 3, 63, 64,127,118,190,
-216, 28, 3, 63,128,105,188,189,120, 47, 41, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,122, 84,181, 62,113,179,141, 63,
- 26, 95, 82, 62,102, 84,117, 63, 26, 95, 82, 62,102, 84,117, 63,122, 84,181, 62,113,179,141, 63, 0, 0, 0, 0, 60, 0, 1, 0,
- 0, 0, 0, 0,200, 84,104, 61,244, 65, 79, 63, 96,105,188,189,120, 47, 41, 63, 96,105,188,189,120, 47, 41, 63,200, 84,104, 61,
-242, 65, 79, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, 44,244,114, 63,236, 65, 79, 63,172,225, 76, 63,102, 84,117, 63,
-172,225, 76, 63,102, 84,117, 63, 44,244,114, 63,236, 65, 79, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,188,188, 0, 63,
-173,188,160, 63, 56,207, 38, 63,111,179,141, 63, 52,207, 38, 63,111,179,141, 63,188,188, 0, 63,173,188,160, 63, 0, 0, 0, 0,
- 60, 0, 1, 0, 0, 0, 0, 0,172,225, 76, 63,102, 84,117, 63, 52,207, 38, 63,111,179,141, 63, 52,207, 38, 63,111,179,141, 63,
-172,225, 76, 63,102, 84,117, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, 44,244,114, 63,236, 65, 79, 63,172,225, 76, 63,
-102, 84,117, 63,172,225, 76, 63,102, 84,117, 63, 44,244,114, 63,236, 65, 79, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,
- 52,207, 38, 63,111,179,141, 63,188,188, 0, 63,173,188,160, 63,188,188, 0, 63,173,188,160, 63, 52,207, 38, 63,111,179,141, 63,
- 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,174,225, 76, 63,102, 84,117, 63, 52,207, 38, 63,111,179,141, 63, 52,207, 38, 63,
-111,179,141, 63,172,225, 76, 63,102, 84,117, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, 44,244,114, 63,236, 65, 79, 63,
-174,225, 76, 63,102, 84,117, 63,174,225, 76, 63,102, 84,117, 63, 44,244,114, 63,236, 65, 79, 63, 0, 0, 0, 0, 60, 0, 1, 0,
- 0, 0, 0, 0, 52,207, 38, 63,111,179,141, 63,190,188, 0, 63,171,188,160, 63,188,188, 0, 63,173,188,160, 63, 52,207, 38, 63,
-111,179,141, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,162,140,159, 63,210, 28, 3, 63, 99,131,140, 63, 72, 47, 41, 63,
- 99,131,140, 63, 76, 47, 41, 63,161,140,159, 63,210, 28, 3, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, 99,131,140, 63,
- 76, 47, 41, 63, 44,244,114, 63,236, 65, 79, 63, 44,244,114, 63,236, 65, 79, 63, 99,131,140, 63, 76, 47, 41, 63, 0, 0, 0, 0,
- 60, 0, 1, 0, 0, 0, 0, 0,161,140,159, 63,210, 28, 3, 63, 99,131,140, 63, 76, 47, 41, 63, 99,131,140, 63, 76, 47, 41, 63,
-161,140,159, 63,210, 28, 3, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, 99,131,140, 63, 76, 47, 41, 63, 44,244,114, 63,
-236, 65, 79, 63, 44,244,114, 63,236, 65, 79, 63, 99,131,140, 63, 76, 47, 41, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,
-161,140,159, 63,210, 28, 3, 63, 99,131,140, 63, 76, 47, 41, 63, 99,131,140, 63, 76, 47, 41, 63,244,140,159, 63, 50, 28, 3, 63,
- 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, 22,172,131, 63, 96,211, 93, 59,226,151,158, 63, 96,211, 93, 59,224,151,158, 63,
- 96,211, 93, 59, 22,172,131, 63, 96,211, 93, 59, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0,144,128, 81, 63, 96,211, 93, 59,
-247,168, 27, 63, 96,211, 93, 59,248,168, 27, 63, 96,211, 93, 59,144,128, 81, 63, 96,211, 93, 59, 0, 0, 0, 0, 61, 0, 1, 0,
- 0, 0, 0, 0,176,131,185, 63, 96,211, 93, 59,226,151,158, 63, 96,211, 93, 59,224,151,158, 63, 96,211, 93, 59,174,131,185, 63,
- 96,211, 93, 59, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0, 21,172,131, 63, 96,211, 93, 59,144,128, 81, 63, 96,211, 93, 59,
-144,128, 81, 63, 96,211, 93, 59, 22,172,131, 63, 96,211, 93, 59, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0,247,168, 27, 63,
- 96,211, 93, 59, 85,162,203, 62, 96,211, 93, 59, 85,162,203, 62, 96,211, 93, 59,247,168, 27, 63, 96,211, 93, 59, 0, 0, 0, 0,
- 61, 0, 1, 0, 0, 0, 0, 0,226,151,158, 63, 96,211, 93, 59, 24,172,131, 63, 96,211, 93, 59, 21,172,131, 63, 96,211, 93, 59,
-226,151,158, 63, 96,211, 93, 59, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0,142,128, 81, 63, 96,211, 93, 59,246,168, 27, 63,
- 96,211, 93, 59,247,168, 27, 63, 96,211, 93, 59,144,128, 81, 63, 96,211, 93, 59, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0,
-174,131,185, 63, 96,211, 93, 59,227,151,158, 63, 96,211, 93, 59,226,151,158, 63, 96,211, 93, 59,174,131,185, 63, 96,211, 93, 59,
- 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0, 22,172,131, 63, 96,211, 93, 59,149,128, 81, 63, 96,211, 93, 59,142,128, 81, 63,
- 96,211, 93, 59, 24,172,131, 63, 96,211, 93, 59, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0,251,168, 27, 63, 96,211, 93, 59,
- 84,162,203, 62, 96,211, 93, 59, 86,162,203, 62, 96,211, 93, 59,246,168, 27, 63, 96,211, 93, 59, 0, 0, 0, 0, 61, 0, 1, 0,
- 0, 0, 0, 0,225,151,158, 63, 96,211, 93, 59, 21,172,131, 63, 96,211, 93, 59, 22,172,131, 63, 96,211, 93, 59,227,151,158, 63,
- 96,211, 93, 59, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0,146,128, 81, 63, 96,211, 93, 59,250,168, 27, 63, 96,211, 93, 59,
-251,168, 27, 63, 96,211, 93, 59,149,128, 81, 63, 96,211, 93, 59, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0,161,140,159, 63,
-210, 28, 3, 63, 99,131,140, 63, 76, 47, 41, 63, 99,131,140, 63, 76, 47, 41, 63,244,140,159, 63, 50, 28, 3, 63, 0, 0, 0, 0,
- 60, 0, 1, 0, 0, 0, 0, 0, 99,131,140, 63, 76, 47, 41, 63, 44,244,114, 63,236, 65, 79, 63, 44,244,114, 63,236, 65, 79, 63,
- 99,131,140, 63, 76, 47, 41, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,161,140,159, 63,210, 28, 3, 63, 99,131,140, 63,
- 76, 47, 41, 63, 99,131,140, 63, 76, 47, 41, 63,161,140,159, 63,210, 28, 3, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,
- 99,131,140, 63, 76, 47, 41, 63, 44,244,114, 63,236, 65, 79, 63, 44,244,114, 63,236, 65, 79, 63, 99,131,140, 63, 76, 47, 41, 63,
- 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,162,140,159, 63,210, 28, 3, 63, 99,131,140, 63, 72, 47, 41, 63, 99,131,140, 63,
- 76, 47, 41, 63,161,140,159, 63,210, 28, 3, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, 52,207, 38, 63,111,179,141, 63,
-190,188, 0, 63,171,188,160, 63,188,188, 0, 63,173,188,160, 63, 52,207, 38, 63,111,179,141, 63, 0, 0, 0, 0, 60, 0, 1, 0,
- 0, 0, 0, 0, 44,244,114, 63,236, 65, 79, 63,174,225, 76, 63,102, 84,117, 63,174,225, 76, 63,102, 84,117, 63, 44,244,114, 63,
-236, 65, 79, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,174,225, 76, 63,102, 84,117, 63, 52,207, 38, 63,111,179,141, 63,
- 52,207, 38, 63,111,179,141, 63,172,225, 76, 63,102, 84,117, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, 52,207, 38, 63,
-111,179,141, 63,188,188, 0, 63,173,188,160, 63,188,188, 0, 63,173,188,160, 63, 52,207, 38, 63,111,179,141, 63, 0, 0, 0, 0,
- 60, 0, 1, 0, 0, 0, 0, 0, 44,244,114, 63,236, 65, 79, 63,172,225, 76, 63,102, 84,117, 63,172,225, 76, 63,102, 84,117, 63,
- 44,244,114, 63,236, 65, 79, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,172,225, 76, 63,102, 84,117, 63, 52,207, 38, 63,
-111,179,141, 63, 52,207, 38, 63,111,179,141, 63,172,225, 76, 63,102, 84,117, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,
-188,188, 0, 63,173,188,160, 63, 56,207, 38, 63,111,179,141, 63, 52,207, 38, 63,111,179,141, 63,188,188, 0, 63,173,188,160, 63,
- 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, 44,244,114, 63,236, 65, 79, 63,172,225, 76, 63,102, 84,117, 63,172,225, 76, 63,
-102, 84,117, 63, 44,244,114, 63,236, 65, 79, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,200, 84,104, 61,244, 65, 79, 63,
- 96,105,188,189,120, 47, 41, 63, 96,105,188,189,120, 47, 41, 63,200, 84,104, 61,242, 65, 79, 63, 0, 0, 0, 0, 60, 0, 1, 0,
- 0, 0, 0, 0,122, 84,181, 62,113,179,141, 63, 26, 95, 82, 62,102, 84,117, 63, 26, 95, 82, 62,102, 84,117, 63,122, 84,181, 62,
-113,179,141, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, 96,105,188,189,120, 47, 41, 63, 56,127,118,190,220, 28, 3, 63,
- 64,127,118,190,216, 28, 3, 63,128,105,188,189,120, 47, 41, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, 26, 95, 82, 62,
-102, 84,117, 63,200, 84,104, 61,242, 65, 79, 63,160, 84,104, 61,242, 65, 79, 63, 26, 95, 82, 62,102, 84,117, 63, 0, 0, 0, 0,
- 60, 0, 1, 0, 0, 0, 0, 0,188,188, 0, 63,173,188,160, 63,122, 84,181, 62,113,179,141, 63,122, 84,181, 62,113,179,141, 63,
-188,188, 0, 63,173,188,160, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,160, 84,104, 61,242, 65, 79, 63,128,105,188,189,
-120, 47, 41, 63,128,105,188,189,120, 47, 41, 63,160, 84,104, 61,242, 65, 79, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,
-122, 84,181, 62,113,179,141, 63, 26, 95, 82, 62,102, 84,117, 63, 26, 95, 82, 62,102, 84,117, 63,122, 84,181, 62,113,179,141, 63,
- 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,128,105,188,189,120, 47, 41, 63, 64,127,118,190,216, 28, 3, 63, 64,127,118,190,
-216, 28, 3, 63,128,105,188,189,120, 47, 41, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, 26, 95, 82, 62,102, 84,117, 63,
-160, 84,104, 61,242, 65, 79, 63,160, 84,104, 61,242, 65, 79, 63, 26, 95, 82, 62,102, 84,117, 63, 0, 0, 0, 0, 60, 0, 1, 0,
- 0, 0, 0, 0,188,188, 0, 63,173,188,160, 63,122, 84,181, 62,113,179,141, 63,122, 84,181, 62,113,179,141, 63,188,188, 0, 63,
-173,188,160, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,160, 84,104, 61,242, 65, 79, 63,128,105,188,189,120, 47, 41, 63,
-128,105,188,189,120, 47, 41, 63,160, 84,104, 61,242, 65, 79, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0,122, 84,181, 62,
-113,179,141, 63, 26, 95, 82, 62,102, 84,117, 63, 26, 95, 82, 62,102, 84,117, 63,122, 84,181, 62,113,179,141, 63, 0, 0, 0, 0,
- 60, 0, 1, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 4, 0, 0,248, 20,155, 2, 58, 0, 0, 0, 40, 1, 0, 0,255,255,255,255,
+ 0, 0, 5,200, 7,161, 40, 32, 0, 0, 0, 54, 0, 0, 0, 74, 0, 0, 0, 35, 0, 0, 0, 34, 0, 0, 0, 5, 0, 0, 0, 4,
+ 0, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 36, 0, 0, 0, 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 45,
+ 0, 0, 0, 44, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 4, 0, 0, 0, 8, 0, 0, 0, 7, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 6, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 9, 0, 0, 0, 13,
+ 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 7, 0, 0, 0, 11, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 13,
+ 0, 0, 0, 43, 0, 0, 0, 42, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 12, 0, 0, 0, 16, 0, 0, 0, 15,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 10, 0, 0, 0, 14, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 17,
+ 0, 0, 0, 73, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 75, 0, 0, 0, 76, 0, 0, 0, 14, 0, 0, 0, 15, 0, 0, 0, 0,
+ 0, 0, 0, 21, 0, 0, 0, 20, 0, 0, 0, 36, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 18, 0, 0, 0, 34,
+ 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 50, 0, 0, 0, 25, 0, 0, 0, 21, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 24,
+ 0, 0, 0, 23, 0, 0, 0, 19, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 40, 0, 0, 0, 41, 0, 0, 0, 18,
+ 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 28, 0, 0, 0, 24, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, 26,
+ 0, 0, 0, 22, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 58, 0, 0, 0, 33, 0, 0, 0, 29, 0, 0, 0, 54, 0, 0, 0, 0,
+ 0, 0, 0, 32, 0, 0, 0, 31, 0, 0, 0, 27, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 38, 0, 0, 0, 39,
+ 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 90, 0, 0, 0, 91, 0, 0, 0, 32, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 92,
+ 0, 0, 0, 93, 0, 0, 0, 30, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, 48, 0, 0, 0, 63, 0, 0, 0, 1,
+ 0, 0, 0, 0, 0, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 47, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 51,
+ 0, 0, 0, 47, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 57, 0, 0, 0, 56, 0, 0, 0, 52, 0, 0, 0, 53, 0, 0, 0, 0,
+ 0, 0, 0, 55, 0, 0, 0, 54, 0, 0, 0, 50, 0, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 60, 0, 0, 0, 59, 0, 0, 0, 55,
+ 0, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0,110, 0, 0, 0, 84, 0, 0, 0, 60, 0, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0,111,
+ 0, 0, 0, 85, 0, 0, 0, 58, 0, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 78, 0, 0, 0, 83, 0, 0, 0, 66, 0, 0, 0, 65,
+ 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 61, 0, 0, 0, 57, 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 68,
+ 0, 0, 0, 70, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 70, 0, 0, 0, 53, 0, 0, 0, 49, 0, 0, 0, 72, 0, 0, 0, 0,
+ 0, 0, 0, 71, 0, 0, 0, 72, 0, 0, 0, 64, 0, 0, 0, 77, 0, 0, 0, 0, 0, 0, 0, 80, 0, 0, 0, 79, 0, 0, 0, 97,
+ 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 95, 0, 0, 0, 94, 0, 0, 0, 82, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0,110,
+ 0, 0, 0,101, 0, 0, 0, 97, 0, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0,100, 0, 0, 0, 99, 0, 0, 0, 95, 0, 0, 0, 96,
+ 0, 0, 0, 0, 0, 0, 0, 98, 0, 0, 0, 88, 0, 0, 0, 89, 0, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0,105, 0, 0, 0,104,
+ 0, 0, 0,100, 0, 0, 0,101, 0, 0, 0, 0, 0, 0, 0,103, 0, 0, 0,102, 0, 0, 0, 98, 0, 0, 0, 99, 0, 0, 0, 0,
+ 0, 0, 0,111, 0, 0, 0,109, 0, 0, 0,105, 0, 0, 0, 84, 0, 0, 0, 0, 0, 0, 0,108, 0, 0, 0,107, 0, 0, 0,103,
+ 0, 0, 0,104, 0, 0, 0, 0, 0, 0, 0,106, 0, 0, 0, 86, 0, 0, 0, 87, 0, 0, 0,102, 0, 0, 0, 0, 0, 0, 0, 90,
+ 0, 0, 0, 91, 0, 0, 0,108, 0, 0, 0,109, 0, 0, 0, 0, 0, 0, 0, 92, 0, 0, 0, 93, 0, 0, 0,106, 0, 0, 0,107,
+ 0, 0, 0, 0, 0, 0, 0,120, 0, 0, 0,119, 0, 0, 0,127, 0, 0, 0,118, 0, 0, 0, 2, 0, 0, 0,121, 0, 0, 0,138,
+ 0, 0, 0,142, 0, 0, 0,119, 0, 0, 0, 2, 0, 0, 0,124, 0, 0, 0,123, 0, 0, 0,121, 0, 0, 0,122, 0, 0, 0, 2,
+ 0, 0, 0,125, 0, 0, 0,130, 0, 0, 0,134, 0, 0, 0,123, 0, 0, 0, 2, 0, 0, 0,117, 0, 0, 0,116, 0, 0, 0,125,
+ 0, 0, 0,126, 0, 0, 0, 2, 0, 0, 0,112, 0, 0, 0,114, 0, 0, 0,133, 0, 0, 0,132, 0, 0, 0, 2, 0, 0, 0,113,
+ 0, 0, 0,115, 0, 0, 0,131, 0, 0, 0,130, 0, 0, 0, 2, 0, 0, 0,131, 0, 0, 0,132, 0, 0, 0,136, 0, 0, 0,135,
+ 0, 0, 0, 2, 0, 0, 0,136, 0, 0, 0,137, 0, 0, 0,141, 0, 0, 0,140, 0, 0, 0, 2, 0, 0, 0,134, 0, 0, 0,135,
+ 0, 0, 0,139, 0, 0, 0,138, 0, 0, 0, 2, 0, 0, 0,139, 0, 0, 0,140, 0, 0, 0,144, 0, 0, 0,143, 0, 0, 0, 2,
+ 0, 0, 0,129, 0, 0, 0,147, 0, 0, 0,144, 0, 0, 0,145, 0, 0, 0, 2, 0, 0, 0,142, 0, 0, 0,143, 0, 0, 0,128,
+ 0, 0, 0,146, 0, 0, 0, 2, 0, 0, 0,149, 0, 0, 0,148, 0, 0, 0,169, 0, 0, 0,168, 0, 0, 0, 2, 0, 0, 0,151,
+ 0, 0, 0,150, 0, 0, 0,167, 0, 0, 0,166, 0, 0, 0, 2, 0, 0, 0,169, 0, 0, 0,161, 0, 0, 0,160, 0, 0, 0,173,
+ 0, 0, 0, 2, 0, 0, 0,167, 0, 0, 0,168, 0, 0, 0,172, 0, 0, 0,171, 0, 0, 0, 2, 0, 0, 0,154, 0, 0, 0,166,
+ 0, 0, 0,170, 0, 0, 0,155, 0, 0, 0, 2, 0, 0, 0,172, 0, 0, 0,173, 0, 0, 0,177, 0, 0, 0,176, 0, 0, 0, 2,
+ 0, 0, 0,170, 0, 0, 0,171, 0, 0, 0,175, 0, 0, 0,174, 0, 0, 0, 2, 0, 0, 0,177, 0, 0, 0,159, 0, 0, 0,158,
+ 0, 0, 0,181, 0, 0, 0, 2, 0, 0, 0,175, 0, 0, 0,176, 0, 0, 0,180, 0, 0, 0,179, 0, 0, 0, 2, 0, 0, 0,156,
+ 0, 0, 0,174, 0, 0, 0,178, 0, 0, 0,157, 0, 0, 0, 2, 0, 0, 0,180, 0, 0, 0,181, 0, 0, 0,165, 0, 0, 0,164,
+ 0, 0, 0, 2, 0, 0, 0,178, 0, 0, 0,179, 0, 0, 0,163, 0, 0, 0,162, 0, 0, 0, 2, 68, 65, 84, 65, 0, 0, 12,184,
+ 7,161, 46, 32, 0, 0, 0, 65, 0, 0, 0, 74, 61,104, 84,160, 63, 79, 65,242,189,188,105,128, 63, 41, 47,120, 61,104, 84,160,
+ 63, 3, 29, 0, 62, 82, 95, 26, 63, 41, 47,120, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 62,181, 84,122, 63,141,179,113,
+ 62, 82, 95, 26, 63,117, 84,102, 62,181, 84,127, 63, 79, 65,242, 63, 0,188,190, 63,117, 84,102, 0, 0, 0, 0, 60, 0, 0, 1,
+ 0, 0, 0, 0, 61,104, 84,160, 63, 3, 29, 0,189,188,106,128, 62,186, 20,176, 61,104, 82,144, 62, 91,223,128, 62, 82, 95, 14,
+ 62,186, 21, 0, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 62,181, 84,127, 63, 79, 65,242, 62, 82, 95, 26, 63, 41, 47,120,
+ 62,181, 84,122, 63, 3, 28,248, 63, 0,188,188, 63, 41, 47,120, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63, 38,207, 56,
+ 63,141,179,111, 63, 0,188,190, 63,117, 84,102, 63, 38,207, 52, 63, 79, 65,236, 63, 76,225,172, 63,117, 84,102, 0, 0, 0, 0,
+ 60, 0, 0, 1, 0, 0, 0, 0, 62,181, 84,122, 63, 3, 28,248, 62, 82, 95, 14, 62,186, 21, 0, 62,181, 84,122, 62, 91,224, 32,
+ 63, 0,188,185, 62,186, 21, 0, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63, 38,207, 52, 63, 79, 65,236, 63, 0,188,188,
+ 63, 41, 47,120, 63, 38,207, 52, 63, 3, 28,248, 63, 76,225,174, 63, 41, 47,116, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0,
+ 62,181, 84,122, 62, 91,224, 32, 62, 82, 94,138, 61,135, 43, 48, 62,181, 84, 61,189,169,104,176, 63, 0,188,185, 61,135, 44, 96,
+ 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63, 38,207, 52, 63, 3, 28,248, 63, 0,188,185, 62,186, 21, 0, 63, 38,207, 51,
+ 62, 91,224, 24, 63, 76,225,174, 62,186, 21, 0, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63,114,244, 44, 63, 79, 65,236,
+ 63, 76,225,174, 63, 41, 47,116, 63,114,244, 42, 63, 3, 28,244, 63,140,131, 99, 63, 41, 47, 76, 0, 0, 0, 0, 60, 0, 0, 1,
+ 0, 0, 0, 0, 63, 38,207, 51, 62, 91,224, 24, 63, 0,188,185, 61,135, 44, 96, 63, 38,207,248,189,169,109,144, 63, 76,226,112,
+ 61,135, 38, 64, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63,114,244,240, 62, 91,221, 4, 63,140,131,180, 62,186, 19,116,
+ 63,114,244, 42, 63, 3, 28,244, 63, 76,225,174, 62,186, 21, 0, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 62,181, 84,122,
+ 63,141,179,113, 62, 82, 95, 26, 63,117, 84,102, 62, 82, 95, 26, 63,117, 84,102, 62,181, 84,122, 63,141,179,113, 0, 0, 0, 0,
+ 60, 0, 0, 1, 0, 0, 0, 0, 61,104, 84,160, 63, 79, 65,242,189,188,105,128, 63, 41, 47,120,189,188,105,128, 63, 41, 47,120,
+ 61,104, 84,160, 63, 79, 65,242, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63, 0,188,188, 63,160,188,173, 62,181, 84,122,
+ 63,141,179,113, 62,181, 84,122, 63,141,179,113, 63, 0,188,188, 63,160,188,173, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0,
+ 62, 82, 95, 26, 63,117, 84,102, 61,104, 84,160, 63, 79, 65,242, 61,104, 84,160, 63, 79, 65,242, 62, 82, 95, 26, 63,117, 84,102,
+ 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0,189,188,105,128, 63, 41, 47,120,190,118,127, 64, 63, 3, 28,216,190,118,127, 64,
+ 63, 3, 28,216,189,188,105,128, 63, 41, 47,120, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 62,181, 84,122, 63,141,179,113,
+ 62, 82, 95, 26, 63,117, 84,102, 62, 82, 95, 26, 63,117, 84,102, 62,181, 84,122, 63,141,179,113, 0, 0, 0, 0, 60, 0, 0, 1,
+ 0, 0, 0, 0, 61,104, 84,160, 63, 79, 65,242,189,188,105,128, 63, 41, 47,120,189,188,105,128, 63, 41, 47,120, 61,104, 84,160,
+ 63, 79, 65,242, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63, 0,188,188, 63,160,188,173, 62,181, 84,122, 63,141,179,113,
+ 62,181, 84,122, 63,141,179,113, 63, 0,188,188, 63,160,188,173, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 62, 82, 95, 26,
+ 63,117, 84,102, 61,104, 84,200, 63, 79, 65,242, 61,104, 84,160, 63, 79, 65,242, 62, 82, 95, 26, 63,117, 84,102, 0, 0, 0, 0,
+ 60, 0, 0, 1, 0, 0, 0, 0,189,188,105, 96, 63, 41, 47,120,190,118,127, 56, 63, 3, 28,220,190,118,127, 64, 63, 3, 28,216,
+189,188,105,128, 63, 41, 47,120, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 62,181, 84,122, 63,141,179,113, 62, 82, 95, 26,
+ 63,117, 84,102, 62, 82, 95, 26, 63,117, 84,102, 62,181, 84,122, 63,141,179,113, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0,
+ 61,104, 84,200, 63, 79, 65,244,189,188,105, 96, 63, 41, 47,120,189,188,105, 96, 63, 41, 47,120, 61,104, 84,200, 63, 79, 65,242,
+ 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63,114,244, 44, 63, 79, 65,236, 63, 76,225,172, 63,117, 84,102, 63, 76,225,172,
+ 63,117, 84,102, 63,114,244, 44, 63, 79, 65,236, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63, 0,188,188, 63,160,188,173,
+ 63, 38,207, 56, 63,141,179,111, 63, 38,207, 52, 63,141,179,111, 63, 0,188,188, 63,160,188,173, 0, 0, 0, 0, 60, 0, 0, 1,
+ 0, 0, 0, 0, 63, 76,225,172, 63,117, 84,102, 63, 38,207, 52, 63,141,179,111, 63, 38,207, 52, 63,141,179,111, 63, 76,225,172,
+ 63,117, 84,102, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63,114,244, 44, 63, 79, 65,236, 63, 76,225,172, 63,117, 84,102,
+ 63, 76,225,172, 63,117, 84,102, 63,114,244, 44, 63, 79, 65,236, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63, 38,207, 52,
+ 63,141,179,111, 63, 0,188,188, 63,160,188,173, 63, 0,188,188, 63,160,188,173, 63, 38,207, 52, 63,141,179,111, 0, 0, 0, 0,
+ 60, 0, 0, 1, 0, 0, 0, 0, 63, 76,225,174, 63,117, 84,102, 63, 38,207, 52, 63,141,179,111, 63, 38,207, 52, 63,141,179,111,
+ 63, 76,225,172, 63,117, 84,102, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63,114,244, 44, 63, 79, 65,236, 63, 76,225,174,
+ 63,117, 84,102, 63, 76,225,174, 63,117, 84,102, 63,114,244, 44, 63, 79, 65,236, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0,
+ 63, 38,207, 52, 63,141,179,111, 63, 0,188,190, 63,160,188,171, 63, 0,188,188, 63,160,188,173, 63, 38,207, 52, 63,141,179,111,
+ 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63,159,140,162, 63, 3, 28,210, 63,140,131, 99, 63, 41, 47, 72, 63,140,131, 99,
+ 63, 41, 47, 76, 63,159,140,161, 63, 3, 28,210, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63,140,131, 99, 63, 41, 47, 76,
+ 63,114,244, 44, 63, 79, 65,236, 63,114,244, 44, 63, 79, 65,236, 63,140,131, 99, 63, 41, 47, 76, 0, 0, 0, 0, 60, 0, 0, 1,
+ 0, 0, 0, 0, 63,159,140,161, 63, 3, 28,210, 63,140,131, 99, 63, 41, 47, 76, 63,140,131, 99, 63, 41, 47, 76, 63,159,140,161,
+ 63, 3, 28,210, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63,140,131, 99, 63, 41, 47, 76, 63,114,244, 44, 63, 79, 65,236,
+ 63,114,244, 44, 63, 79, 65,236, 63,140,131, 99, 63, 41, 47, 76, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63,159,140,161,
+ 63, 3, 28,210, 63,140,131, 99, 63, 41, 47, 76, 63,140,131, 99, 63, 41, 47, 76, 63,159,140,244, 63, 3, 28, 50, 0, 0, 0, 0,
+ 60, 0, 0, 1, 0, 0, 0, 0, 63,131,172, 22, 59, 93,211, 96, 63,158,151,226, 59, 93,211, 96, 63,158,151,224, 59, 93,211, 96,
+ 63,131,172, 22, 59, 93,211, 96, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 63, 81,128,144, 59, 93,211, 96, 63, 27,168,247,
+ 59, 93,211, 96, 63, 27,168,248, 59, 93,211, 96, 63, 81,128,144, 59, 93,211, 96, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0,
+ 63,185,131,176, 59, 93,211, 96, 63,158,151,226, 59, 93,211, 96, 63,158,151,224, 59, 93,211, 96, 63,185,131,174, 59, 93,211, 96,
+ 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 63,131,172, 21, 59, 93,211, 96, 63, 81,128,144, 59, 93,211, 96, 63, 81,128,144,
+ 59, 93,211, 96, 63,131,172, 22, 59, 93,211, 96, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 63, 27,168,247, 59, 93,211, 96,
+ 62,203,162, 85, 59, 93,211, 96, 62,203,162, 85, 59, 93,211, 96, 63, 27,168,247, 59, 93,211, 96, 0, 0, 0, 0, 61, 0, 0, 1,
+ 0, 0, 0, 0, 63,158,151,226, 59, 93,211, 96, 63,131,172, 24, 59, 93,211, 96, 63,131,172, 21, 59, 93,211, 96, 63,158,151,226,
+ 59, 93,211, 96, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 63, 81,128,142, 59, 93,211, 96, 63, 27,168,246, 59, 93,211, 96,
+ 63, 27,168,247, 59, 93,211, 96, 63, 81,128,144, 59, 93,211, 96, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 63,185,131,174,
+ 59, 93,211, 96, 63,158,151,227, 59, 93,211, 96, 63,158,151,226, 59, 93,211, 96, 63,185,131,174, 59, 93,211, 96, 0, 0, 0, 0,
+ 61, 0, 0, 1, 0, 0, 0, 0, 63,131,172, 22, 59, 93,211, 96, 63, 81,128,149, 59, 93,211, 96, 63, 81,128,142, 59, 93,211, 96,
+ 63,131,172, 24, 59, 93,211, 96, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 63, 27,168,251, 59, 93,211, 96, 62,203,162, 84,
+ 59, 93,211, 96, 62,203,162, 86, 59, 93,211, 96, 63, 27,168,246, 59, 93,211, 96, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0,
+ 63,158,151,225, 59, 93,211, 96, 63,131,172, 21, 59, 93,211, 96, 63,131,172, 22, 59, 93,211, 96, 63,158,151,227, 59, 93,211, 96,
+ 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 63, 81,128,146, 59, 93,211, 96, 63, 27,168,250, 59, 93,211, 96, 63, 27,168,251,
+ 59, 93,211, 96, 63, 81,128,149, 59, 93,211, 96, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 63,159,140,161, 63, 3, 28,210,
+ 63,140,131, 99, 63, 41, 47, 76, 63,140,131, 99, 63, 41, 47, 76, 63,159,140,244, 63, 3, 28, 50, 0, 0, 0, 0, 60, 0, 0, 1,
+ 0, 0, 0, 0, 63,140,131, 99, 63, 41, 47, 76, 63,114,244, 44, 63, 79, 65,236, 63,114,244, 44, 63, 79, 65,236, 63,140,131, 99,
+ 63, 41, 47, 76, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63,159,140,161, 63, 3, 28,210, 63,140,131, 99, 63, 41, 47, 76,
+ 63,140,131, 99, 63, 41, 47, 76, 63,159,140,161, 63, 3, 28,210, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63,140,131, 99,
+ 63, 41, 47, 76, 63,114,244, 44, 63, 79, 65,236, 63,114,244, 44, 63, 79, 65,236, 63,140,131, 99, 63, 41, 47, 76, 0, 0, 0, 0,
+ 60, 0, 0, 1, 0, 0, 0, 0, 63,159,140,162, 63, 3, 28,210, 63,140,131, 99, 63, 41, 47, 72, 63,140,131, 99, 63, 41, 47, 76,
+ 63,159,140,161, 63, 3, 28,210, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63, 38,207, 52, 63,141,179,111, 63, 0,188,190,
+ 63,160,188,171, 63, 0,188,188, 63,160,188,173, 63, 38,207, 52, 63,141,179,111, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0,
+ 63,114,244, 44, 63, 79, 65,236, 63, 76,225,174, 63,117, 84,102, 63, 76,225,174, 63,117, 84,102, 63,114,244, 44, 63, 79, 65,236,
+ 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63, 76,225,174, 63,117, 84,102, 63, 38,207, 52, 63,141,179,111, 63, 38,207, 52,
+ 63,141,179,111, 63, 76,225,172, 63,117, 84,102, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63, 38,207, 52, 63,141,179,111,
+ 63, 0,188,188, 63,160,188,173, 63, 0,188,188, 63,160,188,173, 63, 38,207, 52, 63,141,179,111, 0, 0, 0, 0, 60, 0, 0, 1,
+ 0, 0, 0, 0, 63,114,244, 44, 63, 79, 65,236, 63, 76,225,172, 63,117, 84,102, 63, 76,225,172, 63,117, 84,102, 63,114,244, 44,
+ 63, 79, 65,236, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63, 76,225,172, 63,117, 84,102, 63, 38,207, 52, 63,141,179,111,
+ 63, 38,207, 52, 63,141,179,111, 63, 76,225,172, 63,117, 84,102, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 63, 0,188,188,
+ 63,160,188,173, 63, 38,207, 56, 63,141,179,111, 63, 38,207, 52, 63,141,179,111, 63, 0,188,188, 63,160,188,173, 0, 0, 0, 0,
+ 60, 0, 0, 1, 0, 0, 0, 0, 63,114,244, 44, 63, 79, 65,236, 63, 76,225,172, 63,117, 84,102, 63, 76,225,172, 63,117, 84,102,
+ 63,114,244, 44, 63, 79, 65,236, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 61,104, 84,200, 63, 79, 65,244,189,188,105, 96,
+ 63, 41, 47,120,189,188,105, 96, 63, 41, 47,120, 61,104, 84,200, 63, 79, 65,242, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0,
+ 62,181, 84,122, 63,141,179,113, 62, 82, 95, 26, 63,117, 84,102, 62, 82, 95, 26, 63,117, 84,102, 62,181, 84,122, 63,141,179,113,
+ 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0,189,188,105, 96, 63, 41, 47,120,190,118,127, 56, 63, 3, 28,220,190,118,127, 64,
+ 63, 3, 28,216,189,188,105,128, 63, 41, 47,120, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 62, 82, 95, 26, 63,117, 84,102,
+ 61,104, 84,200, 63, 79, 65,242, 61,104, 84,160, 63, 79, 65,242, 62, 82, 95, 26, 63,117, 84,102, 0, 0, 0, 0, 60, 0, 0, 1,
+ 0, 0, 0, 0, 63, 0,188,188, 63,160,188,173, 62,181, 84,122, 63,141,179,113, 62,181, 84,122, 63,141,179,113, 63, 0,188,188,
+ 63,160,188,173, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 61,104, 84,160, 63, 79, 65,242,189,188,105,128, 63, 41, 47,120,
+189,188,105,128, 63, 41, 47,120, 61,104, 84,160, 63, 79, 65,242, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 62,181, 84,122,
+ 63,141,179,113, 62, 82, 95, 26, 63,117, 84,102, 62, 82, 95, 26, 63,117, 84,102, 62,181, 84,122, 63,141,179,113, 0, 0, 0, 0,
+ 60, 0, 0, 1, 0, 0, 0, 0,189,188,105,128, 63, 41, 47,120,190,118,127, 64, 63, 3, 28,216,190,118,127, 64, 63, 3, 28,216,
+189,188,105,128, 63, 41, 47,120, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 62, 82, 95, 26, 63,117, 84,102, 61,104, 84,160,
+ 63, 79, 65,242, 61,104, 84,160, 63, 79, 65,242, 62, 82, 95, 26, 63,117, 84,102, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0,
+ 63, 0,188,188, 63,160,188,173, 62,181, 84,122, 63,141,179,113, 62,181, 84,122, 63,141,179,113, 63, 0,188,188, 63,160,188,173,
+ 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 61,104, 84,160, 63, 79, 65,242,189,188,105,128, 63, 41, 47,120,189,188,105,128,
+ 63, 41, 47,120, 61,104, 84,160, 63, 79, 65,242, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 62,181, 84,122, 63,141,179,113,
+ 62, 82, 95, 26, 63,117, 84,102, 62, 82, 95, 26, 63,117, 84,102, 62,181, 84,122, 63,141,179,113, 0, 0, 0, 0, 60, 0, 0, 1,
+ 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 4,160, 7,161, 60, 32, 0, 0, 0, 59, 0, 0, 1, 40,255,255,255,255,255,255,255,255,
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
@@ -7467,3958 +7700,4046 @@ char datatoc_preview_blend[]= {
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 77, 69, 0, 0,
- 12, 1, 0, 0,208, 84,164, 2, 51, 0, 0, 0, 1, 0, 0, 0,192, 26,131, 2,240, 0, 18, 3, 0, 0, 0, 0, 0, 0, 0, 0,
- 77, 69, 80,108, 97,110,101, 46, 48, 48, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,208,194,149, 2,224,100,152, 2,
-248, 27,129, 2, 0, 0, 0, 0, 48, 17,167, 2, 64, 11,167, 2, 0, 0, 0, 0,200,209,131, 2, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,136,237,150, 2, 1, 0, 0, 0, 5, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0,104, 64, 18, 3, 1, 0, 0, 0,
- 5, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0,152,126, 20, 3, 3, 0, 0, 0, 5, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0,
- 23, 0, 0, 0, 32, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 4,205, 76, 63,172,197, 39, 55,214,204, 76, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 30, 0, 5, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 4, 0, 0, 0,208,194,149, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 44, 1, 0, 0,136,237,150, 2,
- 21, 1, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 77, 69, 0, 0, 1, 24,
+ 13, 65,120,240, 0, 0, 0, 52, 0, 0, 0, 1, 13, 65,131, 64, 13, 65,115, 96, 0, 0, 0, 0, 0, 0, 0, 0, 77, 69, 80,108,
+ 97,110,101, 46, 48, 48, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 65,122, 48, 13, 65,128, 48, 13, 65,129, 0,
+ 0, 0, 0, 0, 7,161, 66, 32, 13, 65,125, 32, 0, 0, 0, 0, 13, 65,130,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 65,122, 96, 0, 0, 0, 1, 0, 0, 0, 5, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 13, 65,123,192, 0, 0, 0, 1,
+ 0, 0, 0, 5, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 13, 65,126,208, 0, 0, 0, 3, 0, 0, 0, 5, 0, 0, 0, 80,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 32, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 76,205, 4, 55, 39,197,172, 63, 76,204,214, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 5, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 4, 13, 65,122, 48, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 68, 65, 84, 65,
+ 0, 0, 1, 44, 13, 65,122, 96, 0, 0, 1, 35, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 48, 17,167, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 7,161, 66, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,204, 1, 0, 0, 48, 17,167, 2,
- 57, 0, 0, 0, 23, 0, 0, 0, 4,205, 76,191, 0, 0, 0, 0,208,204,204,190, 0, 0, 1,128, 0, 0, 3, 1, 55,205,204,190,
- 0, 0, 0, 0,216,204,204,190, 0, 0, 1,128, 0, 0, 3, 1, 0, 0, 70,182, 0, 0,128, 52,224,204,204,190, 0, 0, 1,128,
- 0, 0, 3, 1, 4,205, 76,191, 0, 0, 0, 0, 0, 0, 96, 52, 0, 0, 1,128, 0, 0, 3, 1, 55,205,204,190, 0, 0, 0, 0,
- 0, 0, 0,179, 0, 0, 1,128, 0, 0, 3, 1, 0, 0, 70,182, 0, 0,128, 52, 0, 0,144,180, 0, 0, 1,128, 0, 0, 3, 1,
- 4,205, 76,191, 0, 0, 0, 0,213,204,204, 62, 0, 0, 1,128, 0, 0, 3, 1, 55,205,204,190, 0, 0, 0, 0,205,204,204, 62,
- 0, 0, 1,128, 0, 0, 3, 1, 0, 0, 70,182, 0, 0,128, 52,197,204,204, 62, 0, 0, 1,128, 0, 0, 3, 1, 47,205,204,190,
- 0, 0, 0, 0,206,204, 76, 63, 0, 0, 1,128, 0, 0, 3, 1, 0, 0, 62,182, 0, 0,128, 52,206,204, 76, 63, 0, 0, 1,128,
- 0, 0, 3, 1, 4,205, 76,191, 0, 0, 0, 0,208,204, 76,191, 0, 0, 1,128, 0, 0, 3, 1, 55,205,204,190, 0, 0, 0, 0,
-212,204, 76,191, 0, 0, 1,128, 0, 0, 3, 1, 0, 0, 70,182, 0, 0,128, 52,214,204, 76,191, 0, 0, 1,128, 0, 0, 3, 1,
- 47,205,204, 62, 0, 0,128,180,206,204, 76,191, 0, 0, 1,128, 0, 0, 3, 1, 4,205, 76, 63, 0, 0, 0, 0,210,204, 76, 63,
- 0, 0, 1,128, 0, 0, 3, 1, 53,205,204, 62, 0, 0,128,180,214,204, 76, 63, 0, 0, 1,128, 0, 0, 3, 1, 0,205, 76, 63,
- 0, 0, 0, 0,213,204,204, 62, 0, 0, 1,128, 0, 0, 3, 1, 47,205,204, 62, 0, 0,128,180,221,204,204, 62, 0, 0, 1,128,
- 0, 0, 3, 1, 0,205, 76, 63, 0, 0, 0, 0, 0, 0, 96, 52, 0, 0, 1,128, 0, 0, 3, 1, 47,205,204, 62, 0, 0,128,180,
- 0, 0,240, 52, 0, 0, 1,128, 0, 0, 3, 1, 0,205, 76, 63, 0, 0, 0, 0,208,204,204,190, 0, 0, 1,128, 0, 0, 3, 1,
- 47,205,204, 62, 0, 0,128,180,200,204,204,190, 0, 0, 1,128, 0, 0, 3, 1, 68, 65, 84, 65, 44, 1, 0, 0,104, 64, 18, 3,
- 21, 1, 0, 0, 5, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 64, 11,167, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+ 0, 0, 2, 40, 7,161, 66, 32, 0, 0, 0, 58, 0, 0, 0, 23,191, 76,205, 4, 0, 0, 0, 0,190,204,204,208, 0, 0,128, 1,
+ 0, 0, 3, 1, 0, 0, 0, 0,190,204,205, 55, 0, 0, 0, 0,190,204,204,216, 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0,
+182, 70, 0, 0, 52,128, 0, 0,190,204,204,224, 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0,191, 76,205, 4, 0, 0, 0, 0,
+ 52, 96, 0, 0, 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0,190,204,205, 55, 0, 0, 0, 0,179, 0, 0, 0, 0, 0,128, 1,
+ 0, 0, 3, 1, 0, 0, 0, 0,182, 70, 0, 0, 52,128, 0, 0,180,144, 0, 0, 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0,
+191, 76,205, 4, 0, 0, 0, 0, 62,204,204,213, 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0,190,204,205, 55, 0, 0, 0, 0,
+ 62,204,204,205, 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0,182, 70, 0, 0, 52,128, 0, 0, 62,204,204,197, 0, 0,128, 1,
+ 0, 0, 3, 1, 0, 0, 0, 0,190,204,205, 47, 0, 0, 0, 0, 63, 76,204,206, 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0,
+182, 62, 0, 0, 52,128, 0, 0, 63, 76,204,206, 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0,191, 76,205, 4, 0, 0, 0, 0,
+191, 76,204,208, 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0,190,204,205, 55, 0, 0, 0, 0,191, 76,204,212, 0, 0,128, 1,
+ 0, 0, 3, 1, 0, 0, 0, 0,182, 70, 0, 0, 52,128, 0, 0,191, 76,204,214, 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0,
+ 62,204,205, 47,180,128, 0, 0,191, 76,204,206, 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0, 63, 76,205, 4, 0, 0, 0, 0,
+ 63, 76,204,210, 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0, 62,204,205, 53,180,128, 0, 0, 63, 76,204,214, 0, 0,128, 1,
+ 0, 0, 3, 1, 0, 0, 0, 0, 63, 76,205, 0, 0, 0, 0, 0, 62,204,204,213, 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0,
+ 62,204,205, 47,180,128, 0, 0, 62,204,204,221, 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0, 63, 76,205, 0, 0, 0, 0, 0,
+ 52, 96, 0, 0, 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0, 62,204,205, 47,180,128, 0, 0, 52,240, 0, 0, 0, 0,128, 1,
+ 0, 0, 3, 1, 0, 0, 0, 0, 63, 76,205, 0, 0, 0, 0, 0,190,204,204,208, 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0,
+ 62,204,205, 47,180,128, 0, 0,190,204,204,200, 0, 0,128, 1, 0, 0, 3, 1, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 1, 44,
+ 13, 65,123,192, 0, 0, 1, 35, 0, 0, 0, 5, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 13, 65,125, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 1,128,
+ 13, 65,125, 32, 0, 0, 0, 55, 0, 0, 0, 32, 0, 0, 0, 2, 0, 0, 0, 22, 0, 0, 0, 35, 0, 0, 0, 5, 0, 0, 0, 20,
+ 0, 0, 0, 35, 0, 0, 0, 8, 0, 0, 0, 18, 0, 0, 0, 35, 0, 0, 0, 14, 0, 0, 0, 13, 0, 0, 0, 35, 0, 0, 0, 2,
+ 0, 0, 0, 13, 0, 0, 0, 35, 0, 0, 0, 1, 0, 0, 0, 12, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 35,
+ 0, 0, 0, 5, 0, 0, 0, 2, 0, 0, 0, 35, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 35, 0, 0, 0, 4, 0, 0, 0, 1,
+ 0, 0, 0, 35, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, 5, 0, 0, 0, 8, 0, 0, 0, 35, 0, 0, 0, 5,
+ 0, 0, 0, 4, 0, 0, 0, 35, 0, 0, 0, 4, 0, 0, 0, 7, 0, 0, 0, 35, 0, 0, 0, 4, 0, 0, 0, 3, 0, 0, 0, 35,
+ 0, 0, 0, 6, 0, 0, 0, 3, 0, 0, 0, 35, 0, 0, 0, 8, 0, 0, 0, 10, 0, 0, 0, 35, 0, 0, 0, 8, 0, 0, 0, 7,
+ 0, 0, 0, 35, 0, 0, 0, 7, 0, 0, 0, 9, 0, 0, 0, 35, 0, 0, 0, 6, 0, 0, 0, 7, 0, 0, 0, 35, 0, 0, 0, 9,
+ 0, 0, 0, 10, 0, 0, 0, 35, 0, 0, 0, 11, 0, 0, 0, 12, 0, 0, 0, 35, 0, 0, 0, 15, 0, 0, 0, 16, 0, 0, 0, 35,
+ 0, 0, 0, 16, 0, 0, 0, 18, 0, 0, 0, 35, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0, 35, 0, 0, 0, 15, 0, 0, 0, 17,
+ 0, 0, 0, 35, 0, 0, 0, 18, 0, 0, 0, 20, 0, 0, 0, 35, 0, 0, 0, 19, 0, 0, 0, 20, 0, 0, 0, 35, 0, 0, 0, 20,
+ 0, 0, 0, 22, 0, 0, 0, 35, 0, 0, 0, 21, 0, 0, 0, 22, 0, 0, 0, 35, 0, 0, 0, 19, 0, 0, 0, 21, 0, 0, 0, 35,
+ 0, 0, 0, 14, 0, 0, 0, 22, 0, 0, 0, 35, 68, 65, 84, 65, 0, 0, 1, 44, 13, 65,126,208, 0, 0, 1, 35, 0, 0, 0, 5,
+ 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 65,128, 48, 0, 0, 0, 5,
+ 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 86, 84,101,120, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 65,129, 0, 0, 0, 0, 6, 0, 0, 0, 64,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67,111,108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 65,130,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,160, 13, 65,128, 48, 0, 0, 0, 54, 0, 0, 0, 8,
+ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 12, 0, 0, 0, 2, 0, 0, 0, 5, 0, 0, 0, 4, 0, 0, 0, 1,
+ 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 7, 0, 0, 0, 6, 0, 0, 0, 3, 0, 0, 0, 4, 0, 0, 0, 2, 0, 0, 0, 10,
+ 0, 0, 0, 9, 0, 0, 0, 7, 0, 0, 0, 8, 0, 0, 0, 2, 0, 0, 0, 15, 0, 0, 0, 16, 0, 0, 0, 18, 0, 0, 0, 17,
+ 0, 0, 0, 2, 0, 0, 0, 18, 0, 0, 0, 8, 0, 0, 0, 5, 0, 0, 0, 20, 0, 0, 0, 2, 0, 0, 0, 22, 0, 0, 0, 21,
+ 0, 0, 0, 19, 0, 0, 0, 20, 0, 0, 0, 2, 0, 0, 0, 22, 0, 0, 0, 2, 0, 0, 0, 13, 0, 0, 0, 14, 0, 0, 0, 2,
+ 68, 65, 84, 65, 0, 0, 1, 96, 13, 65,129, 0, 0, 0, 0, 65, 0, 0, 0, 8, 62,137,192, 12, 63,125,226,162, 61,246,108,144,
+ 63,125,226,162, 61,246,108,144, 63,125,226,162, 62,137,192, 12, 63,125,226,162, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0,
+ 62,213,228,252, 63,125,226,162, 62,137,192, 12, 63,125,226,162, 62,137,192, 12, 63,125,226,162, 62,213,228,252, 63,125,226,162,
+ 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 62,137,192, 12, 63,125,226,162, 61,246,108,144, 63,125,226,162, 61,246,108,144,
+ 63,125,226,162, 62,137,192, 12, 63,125,226,162, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 62,213,229, 0, 63,125,226,162,
+ 62,137,192, 18, 63,125,226,162, 62,137,192, 12, 63,125,226,162, 62,213,228,252, 63,125,226,162, 0, 0, 0, 0, 61, 0, 0, 1,
+ 0, 0, 0, 0, 63, 55, 23,154, 63,125,226,162, 63, 17, 5, 34, 63,125,226,162, 63, 17, 5, 30, 63,125,226,162, 63, 55, 23,152,
+ 63,125,226,162, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 63, 17, 5, 30, 63,125,226,162, 62,213,228,252, 63,125,226,162,
+ 62,213,228,252, 63,125,226,162, 63, 17, 5, 30, 63,125,226,162, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 63, 17, 5, 30,
+ 63,125,226,162, 63, 55, 23,152, 63,125,226,162, 63, 55, 23,152, 63,125,226,162, 63, 17, 5, 30, 63,125,226,162, 0, 0, 0, 0,
+ 61, 0, 0, 1, 0, 0, 0, 0, 63, 17, 5, 30, 63,125,226,162, 62,213,228,252, 63,125,226,162, 62,213,228,252, 63,125,226,162,
+ 63, 17, 5, 30, 63,125,226,162, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,128, 13, 65,130,144,
+ 0, 0, 0, 59, 0, 0, 0, 32,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+255,255,255,255,255,255,255,255, 0, 0, 77, 69, 0, 0, 1, 24, 13, 65,131, 64, 0, 0, 0, 52, 0, 0, 0, 1, 13, 65,141,144,
+ 13, 65,120,240,192,139, 5, 8, 0, 0, 0, 0, 77, 69, 80,108, 97,110,101, 46, 48, 48, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 13, 65,132,128, 13, 65,138,128, 13, 65,139, 80, 0, 0, 0, 0, 7,161, 70, 32, 13, 65,135,112, 0, 0, 0, 0,
+ 13, 65,140,224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 65,132,176, 0, 0, 0, 1, 0, 0, 0, 5, 0, 0, 0, 20,
+ 0, 0, 0, 0, 0, 0, 0, 0, 13, 65,134, 16, 0, 0, 0, 1, 0, 0, 0, 5, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 65,137, 32, 0, 0, 0, 3, 0, 0, 0, 5, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 32,
+ 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,180, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 76,205, 2,
+ 55, 39,197,172, 63, 76,204,214, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 5,
+ 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 4, 13, 65,132,128,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 1, 44, 13, 65,132,176, 0, 0, 1, 35, 0, 0, 0, 5,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,161, 70, 32, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,128, 1, 0, 0, 64, 11,167, 2,
- 54, 0, 0, 0, 32, 0, 0, 0, 2, 0, 0, 0, 22, 0, 0, 0, 0, 0, 35, 0, 5, 0, 0, 0, 20, 0, 0, 0, 0, 0, 35, 0,
- 8, 0, 0, 0, 18, 0, 0, 0, 0, 0, 35, 0, 14, 0, 0, 0, 13, 0, 0, 0, 0, 0, 35, 0, 2, 0, 0, 0, 13, 0, 0, 0,
- 0, 0, 35, 0, 1, 0, 0, 0, 12, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 35, 0, 5, 0, 0, 0,
- 2, 0, 0, 0, 0, 0, 35, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 35, 0, 4, 0, 0, 0, 1, 0, 0, 0, 0, 0, 35, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 0, 5, 0, 0, 0, 8, 0, 0, 0, 0, 0, 35, 0, 5, 0, 0, 0, 4, 0, 0, 0,
- 0, 0, 35, 0, 4, 0, 0, 0, 7, 0, 0, 0, 0, 0, 35, 0, 4, 0, 0, 0, 3, 0, 0, 0, 0, 0, 35, 0, 6, 0, 0, 0,
- 3, 0, 0, 0, 0, 0, 35, 0, 8, 0, 0, 0, 10, 0, 0, 0, 0, 0, 35, 0, 8, 0, 0, 0, 7, 0, 0, 0, 0, 0, 35, 0,
- 7, 0, 0, 0, 9, 0, 0, 0, 0, 0, 35, 0, 6, 0, 0, 0, 7, 0, 0, 0, 0, 0, 35, 0, 9, 0, 0, 0, 10, 0, 0, 0,
- 0, 0, 35, 0, 11, 0, 0, 0, 12, 0, 0, 0, 0, 0, 35, 0, 15, 0, 0, 0, 16, 0, 0, 0, 0, 0, 35, 0, 16, 0, 0, 0,
- 18, 0, 0, 0, 0, 0, 35, 0, 17, 0, 0, 0, 18, 0, 0, 0, 0, 0, 35, 0, 15, 0, 0, 0, 17, 0, 0, 0, 0, 0, 35, 0,
- 18, 0, 0, 0, 20, 0, 0, 0, 0, 0, 35, 0, 19, 0, 0, 0, 20, 0, 0, 0, 0, 0, 35, 0, 20, 0, 0, 0, 22, 0, 0, 0,
- 0, 0, 35, 0, 21, 0, 0, 0, 22, 0, 0, 0, 0, 0, 35, 0, 19, 0, 0, 0, 21, 0, 0, 0, 0, 0, 35, 0, 14, 0, 0, 0,
- 22, 0, 0, 0, 0, 0, 35, 0, 68, 65, 84, 65, 44, 1, 0, 0,152,126, 20, 3, 21, 1, 0, 0, 5, 0, 0, 0, 4, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,224,100,152, 2, 5, 0, 0, 0, 20, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 86, 84,101,120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248, 27,129, 2, 6, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67,111,108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200,209,131, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,224,100,152, 2, 53, 0, 0, 0, 8, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 11, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 2, 5, 0, 0, 0, 4, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0,
- 0, 0, 0, 2, 7, 0, 0, 0, 6, 0, 0, 0, 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 2, 10, 0, 0, 0, 9, 0, 0, 0,
- 7, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 2, 15, 0, 0, 0, 16, 0, 0, 0, 18, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 2,
- 18, 0, 0, 0, 8, 0, 0, 0, 5, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 2, 22, 0, 0, 0, 21, 0, 0, 0, 19, 0, 0, 0,
- 20, 0, 0, 0, 0, 0, 0, 2, 22, 0, 0, 0, 2, 0, 0, 0, 13, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 2, 68, 65, 84, 65,
- 96, 1, 0, 0,248, 27,129, 2, 61, 0, 0, 0, 8, 0, 0, 0, 12,192,137, 62,162,226,125, 63,144,108,246, 61,162,226,125, 63,
-144,108,246, 61,162,226,125, 63, 12,192,137, 62,162,226,125, 63, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0,252,228,213, 62,
-162,226,125, 63, 12,192,137, 62,162,226,125, 63, 12,192,137, 62,162,226,125, 63,252,228,213, 62,162,226,125, 63, 0, 0, 0, 0,
- 61, 0, 1, 0, 0, 0, 0, 0, 12,192,137, 62,162,226,125, 63,144,108,246, 61,162,226,125, 63,144,108,246, 61,162,226,125, 63,
- 12,192,137, 62,162,226,125, 63, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0, 0,229,213, 62,162,226,125, 63, 18,192,137, 62,
-162,226,125, 63, 12,192,137, 62,162,226,125, 63,252,228,213, 62,162,226,125, 63, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0,
-154, 23, 55, 63,162,226,125, 63, 34, 5, 17, 63,162,226,125, 63, 30, 5, 17, 63,162,226,125, 63,152, 23, 55, 63,162,226,125, 63,
- 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0, 30, 5, 17, 63,162,226,125, 63,252,228,213, 62,162,226,125, 63,252,228,213, 62,
-162,226,125, 63, 30, 5, 17, 63,162,226,125, 63, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0, 30, 5, 17, 63,162,226,125, 63,
-152, 23, 55, 63,162,226,125, 63,152, 23, 55, 63,162,226,125, 63, 30, 5, 17, 63,162,226,125, 63, 0, 0, 0, 0, 61, 0, 1, 0,
- 0, 0, 0, 0, 30, 5, 17, 63,162,226,125, 63,252,228,213, 62,162,226,125, 63,252,228,213, 62,162,226,125, 63, 30, 5, 17, 63,
-162,226,125, 63, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0, 68, 65, 84, 65,128, 0, 0, 0,200,209,131, 2, 58, 0, 0, 0,
- 32, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-255,255,255,255, 77, 69, 0, 0, 12, 1, 0, 0,192, 26,131, 2, 51, 0, 0, 0, 1, 0, 0, 0,200, 25,155, 2,208, 84,164, 2,
-192,139, 5, 8, 0, 0, 0, 0, 77, 69, 80,108, 97,110,101, 46, 48, 48, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-120, 97,155, 2, 64,107, 8, 3, 0,235,128, 2, 0, 0, 0, 0,184, 28,167, 2,160,248,129, 2, 0, 0, 0, 0, 40,197, 32, 3,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56,133, 20, 3, 1, 0, 0, 0, 5, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0,
- 0, 28,131, 2, 1, 0, 0, 0, 5, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 80,250,129, 2, 3, 0, 0, 0, 5, 0, 0, 0,
- 80, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 32, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0,180, 0, 0, 0, 0, 0, 0, 0, 0, 2,205, 76, 63,172,197, 39, 55,214,204, 76, 63, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 5, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 4, 0, 0, 0,120, 97,155, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 44, 1, 0, 0, 56,133, 20, 3, 21, 1, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,184, 28,167, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 2, 40, 7,161, 70, 32, 0, 0, 0, 58, 0, 0, 0, 23,
+ 62,204,205, 47,180,128, 0, 0,190,204,204,200, 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0, 63, 76,205, 0, 0, 0, 0, 0,
+190,204,204,208, 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0, 62,204,205, 47,180,128, 0, 0, 52,240, 0, 0, 0, 0,128, 1,
+ 0, 0, 2, 0, 0, 0, 0, 0, 63, 76,205, 0, 0, 0, 0, 0, 52, 96, 0, 0, 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0,
+ 62,204,205, 47,180,128, 0, 0, 62,204,204,221, 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0, 63, 76,205, 0, 0, 0, 0, 0,
+ 62,204,204,213, 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0, 62,204,205, 53,180,128, 0, 0, 63, 76,204,214, 0, 0,128, 1,
+ 0, 0, 2, 0, 0, 0, 0, 0, 62,204,205, 47,180,128, 0, 0,191, 76,204,206, 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0,
+ 63, 76,205, 0, 0, 0, 0, 0,191, 76,204,208, 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0,182, 70, 0, 0, 52,128, 0, 0,
+191, 76,204,214, 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0,190,204,205, 55, 0, 0, 0, 0,191, 76,204,212, 0, 0,128, 1,
+ 0, 0, 2, 0, 0, 0, 0, 0,182, 62, 0, 0, 52,128, 0, 0, 63, 76,204,206, 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0,
+190,204,205, 47, 0, 0, 0, 0, 63, 76,204,206, 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0,191, 76,205, 4, 0, 0, 0, 0,
+ 63, 76,204,210, 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0,182, 70, 0, 0, 52,128, 0, 0, 62,204,204,197, 0, 0,128, 1,
+ 0, 0, 2, 0, 0, 0, 0, 0,190,204,205, 55, 0, 0, 0, 0, 62,204,204,205, 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0,
+191, 76,205, 4, 0, 0, 0, 0, 62,204,204,213, 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0,182, 70, 0, 0, 52,128, 0, 0,
+180,144, 0, 0, 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0,190,204,205, 55, 0, 0, 0, 0,179, 0, 0, 0, 0, 0,128, 1,
+ 0, 0, 2, 0, 0, 0, 0, 0,191, 76,205, 4, 0, 0, 0, 0, 52, 96, 0, 0, 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0,
+182, 70, 0, 0, 52,128, 0, 0,190,204,204,224, 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0,190,204,205, 55, 0, 0, 0, 0,
+190,204,204,216, 0, 0,128, 1, 0, 0, 2, 0, 0, 0, 0, 0,191, 76,205, 4, 0, 0, 0, 0,190,204,204,208, 0, 0,128, 1,
+ 0, 0, 2, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 1, 44, 13, 65,134, 16, 0, 0, 1, 35, 0, 0, 0, 5, 0, 0, 0, 3,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 65,135,112, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
-204, 1, 0, 0,184, 28,167, 2, 57, 0, 0, 0, 23, 0, 0, 0, 47,205,204, 62, 0, 0,128,180,200,204,204,190, 0, 0, 1,128,
- 0, 0, 2, 0, 0,205, 76, 63, 0, 0, 0, 0,208,204,204,190, 0, 0, 1,128, 0, 0, 2, 0, 47,205,204, 62, 0, 0,128,180,
- 0, 0,240, 52, 0, 0, 1,128, 0, 0, 2, 0, 0,205, 76, 63, 0, 0, 0, 0, 0, 0, 96, 52, 0, 0, 1,128, 0, 0, 2, 0,
- 47,205,204, 62, 0, 0,128,180,221,204,204, 62, 0, 0, 1,128, 0, 0, 2, 0, 0,205, 76, 63, 0, 0, 0, 0,213,204,204, 62,
- 0, 0, 1,128, 0, 0, 2, 0, 53,205,204, 62, 0, 0,128,180,214,204, 76, 63, 0, 0, 1,128, 0, 0, 2, 0, 47,205,204, 62,
- 0, 0,128,180,206,204, 76,191, 0, 0, 1,128, 0, 0, 2, 0, 0,205, 76, 63, 0, 0, 0, 0,208,204, 76,191, 0, 0, 1,128,
- 0, 0, 2, 0, 0, 0, 70,182, 0, 0,128, 52,214,204, 76,191, 0, 0, 1,128, 0, 0, 2, 0, 55,205,204,190, 0, 0, 0, 0,
-212,204, 76,191, 0, 0, 1,128, 0, 0, 2, 0, 0, 0, 62,182, 0, 0,128, 52,206,204, 76, 63, 0, 0, 1,128, 0, 0, 2, 0,
- 47,205,204,190, 0, 0, 0, 0,206,204, 76, 63, 0, 0, 1,128, 0, 0, 2, 0, 4,205, 76,191, 0, 0, 0, 0,210,204, 76, 63,
- 0, 0, 1,128, 0, 0, 2, 0, 0, 0, 70,182, 0, 0,128, 52,197,204,204, 62, 0, 0, 1,128, 0, 0, 2, 0, 55,205,204,190,
- 0, 0, 0, 0,205,204,204, 62, 0, 0, 1,128, 0, 0, 2, 0, 4,205, 76,191, 0, 0, 0, 0,213,204,204, 62, 0, 0, 1,128,
- 0, 0, 2, 0, 0, 0, 70,182, 0, 0,128, 52, 0, 0,144,180, 0, 0, 1,128, 0, 0, 2, 0, 55,205,204,190, 0, 0, 0, 0,
- 0, 0, 0,179, 0, 0, 1,128, 0, 0, 2, 0, 4,205, 76,191, 0, 0, 0, 0, 0, 0, 96, 52, 0, 0, 1,128, 0, 0, 2, 0,
- 0, 0, 70,182, 0, 0,128, 52,224,204,204,190, 0, 0, 1,128, 0, 0, 2, 0, 55,205,204,190, 0, 0, 0, 0,216,204,204,190,
- 0, 0, 1,128, 0, 0, 2, 0, 4,205, 76,191, 0, 0, 0, 0,208,204,204,190, 0, 0, 1,128, 0, 0, 2, 0, 68, 65, 84, 65,
- 44, 1, 0, 0, 0, 28,131, 2, 21, 1, 0, 0, 5, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,160,248,129, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 1,128, 13, 65,135,112, 0, 0, 0, 55, 0, 0, 0, 32, 0, 0, 0, 1,
+ 0, 0, 0, 8, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 34,
+ 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 34, 0, 0, 0, 3, 0, 0, 0, 5, 0, 0, 0, 34, 0, 0, 0, 2, 0, 0, 0, 3,
+ 0, 0, 0, 34, 0, 0, 0, 2, 0, 0, 0, 4, 0, 0, 0, 34, 0, 0, 0, 4, 0, 0, 0, 5, 0, 0, 0, 34, 0, 0, 0, 4,
+ 0, 0, 0, 6, 0, 0, 0, 34, 0, 0, 0, 7, 0, 0, 0, 8, 0, 0, 0, 34, 0, 0, 0, 9, 0, 0, 0, 10, 0, 0, 0, 34,
+ 0, 0, 0, 12, 0, 0, 0, 13, 0, 0, 0, 34, 0, 0, 0, 13, 0, 0, 0, 16, 0, 0, 0, 34, 0, 0, 0, 15, 0, 0, 0, 16,
+ 0, 0, 0, 34, 0, 0, 0, 12, 0, 0, 0, 15, 0, 0, 0, 34, 0, 0, 0, 14, 0, 0, 0, 15, 0, 0, 0, 34, 0, 0, 0, 11,
+ 0, 0, 0, 14, 0, 0, 0, 34, 0, 0, 0, 18, 0, 0, 0, 19, 0, 0, 0, 34, 0, 0, 0, 15, 0, 0, 0, 18, 0, 0, 0, 34,
+ 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0, 34, 0, 0, 0, 14, 0, 0, 0, 17, 0, 0, 0, 34, 0, 0, 0, 19, 0, 0, 0, 22,
+ 0, 0, 0, 34, 0, 0, 0, 21, 0, 0, 0, 22, 0, 0, 0, 34, 0, 0, 0, 18, 0, 0, 0, 21, 0, 0, 0, 34, 0, 0, 0, 20,
+ 0, 0, 0, 21, 0, 0, 0, 34, 0, 0, 0, 17, 0, 0, 0, 20, 0, 0, 0, 34, 0, 0, 0, 10, 0, 0, 0, 21, 0, 0, 0, 34,
+ 0, 0, 0, 9, 0, 0, 0, 20, 0, 0, 0, 34, 0, 0, 0, 6, 0, 0, 0, 11, 0, 0, 0, 34, 0, 0, 0, 4, 0, 0, 0, 14,
+ 0, 0, 0, 34, 0, 0, 0, 2, 0, 0, 0, 17, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 34, 68, 65, 84, 65,
+ 0, 0, 1, 44, 13, 65,137, 32, 0, 0, 1, 35, 0, 0, 0, 5, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 13, 65,138,128, 0, 0, 0, 5, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 85, 86, 84,101,120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 13, 65,139, 80, 0, 0, 0, 6, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 67,111,108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 65,140,224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+ 0, 0, 0,160, 13, 65,138,128, 0, 0, 0, 54, 0, 0, 0, 8, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 8,
+ 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 4,
+ 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 11, 0, 0, 0, 14, 0, 0, 0, 4, 0, 0, 0, 0,
+ 0, 0, 0, 12, 0, 0, 0, 13, 0, 0, 0, 16, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 15, 0, 0, 0, 18,
+ 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 19, 0, 0, 0, 22, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 20,
+ 0, 0, 0, 21, 0, 0, 0, 10, 0, 0, 0, 9, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 1, 96, 13, 65,139, 80, 0, 0, 0, 65,
+ 0, 0, 0, 8, 63, 55, 23,152, 63,125,226,162, 63, 17, 5, 30, 63,125,226,162, 63, 17, 5, 30, 63,125,226,162, 63, 55, 23,152,
+ 63,125,226,162, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 62,213,228,252, 63,125,226,162, 63, 17, 5, 30, 63,125,226,162,
+ 63, 17, 5, 30, 63,125,226,162, 62,213,228,252, 63,125,226,162, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 63, 55, 23,152,
+ 63,125,226,162, 63, 17, 5, 30, 63,125,226,162, 63, 17, 5, 30, 63,125,226,162, 63, 55, 23,152, 63,125,226,162, 0, 0, 0, 0,
+ 61, 0, 0, 1, 0, 0, 0, 0, 63, 17, 5, 34, 63,125,226,162, 62,213,229, 0, 63,125,226,162, 62,213,228,252, 63,125,226,162,
+ 63, 17, 5, 30, 63,125,226,162, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 62,137,192, 18, 63,125,226,162, 61,246,108,144,
+ 63,125,226,162, 61,246,108,144, 63,125,226,162, 62,137,192, 12, 63,125,226,162, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0,
+ 62,213,228,252, 63,125,226,162, 62,137,192, 12, 63,125,226,162, 62,137,192, 12, 63,125,226,162, 62,213,228,252, 63,125,226,162,
+ 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 62,137,192, 12, 63,125,226,162, 61,246,108,144, 63,125,226,162, 61,246,108,144,
+ 63,125,226,162, 62,137,192, 12, 63,125,226,162, 0, 0, 0, 0, 61, 0, 0, 1, 0, 0, 0, 0, 62,213,228,252, 63,125,226,162,
+ 62,137,192, 12, 63,125,226,162, 62,137,192, 12, 63,125,226,162, 62,213,228,252, 63,125,226,162, 0, 0, 0, 0, 61, 0, 0, 1,
+ 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,128, 13, 65,140,224, 0, 0, 0, 59, 0, 0, 0, 32,255,255,255,255,255,255,255,255,
+255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 77, 69, 0, 0, 1, 24,
+ 13, 65,141,144, 0, 0, 0, 52, 0, 0, 0, 1, 13, 65,148,176, 13, 65,131, 64, 0, 0, 0, 0, 0, 0, 0, 0, 77, 69, 80,108,
+ 97,110,101, 46, 48, 48, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 65,142,208, 13, 65,148, 16, 13, 65,148, 80,
+ 0, 0, 0, 0, 13, 65,144, 96, 13, 65,146, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 65,143, 0, 0, 0, 0, 1, 0, 0, 0, 5, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 13, 65,144,240, 0, 0, 0, 1,
+ 0, 0, 0, 5, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 13, 65,146,176, 0, 0, 0, 2, 0, 0, 0, 5, 0, 0, 0, 64,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 4, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
+179,128, 0, 0, 52, 64, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 2, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 4, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 4, 13, 65,142,208, 0, 0, 0, 0, 0, 0, 0, 1, 7,160, 8, 32, 68, 65, 84, 65,
+ 0, 0, 1, 44, 13, 65,143, 0, 0, 0, 1, 35, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 13, 65,144, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
-128, 1, 0, 0,160,248,129, 2, 54, 0, 0, 0, 32, 0, 0, 0, 1, 0, 0, 0, 8, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0,
- 7, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 34, 0,
- 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 34, 0, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 34, 0, 2, 0, 0, 0, 4, 0, 0, 0,
- 0, 0, 34, 0, 4, 0, 0, 0, 5, 0, 0, 0, 0, 0, 34, 0, 4, 0, 0, 0, 6, 0, 0, 0, 0, 0, 34, 0, 7, 0, 0, 0,
- 8, 0, 0, 0, 0, 0, 34, 0, 9, 0, 0, 0, 10, 0, 0, 0, 0, 0, 34, 0, 12, 0, 0, 0, 13, 0, 0, 0, 0, 0, 34, 0,
- 13, 0, 0, 0, 16, 0, 0, 0, 0, 0, 34, 0, 15, 0, 0, 0, 16, 0, 0, 0, 0, 0, 34, 0, 12, 0, 0, 0, 15, 0, 0, 0,
- 0, 0, 34, 0, 14, 0, 0, 0, 15, 0, 0, 0, 0, 0, 34, 0, 11, 0, 0, 0, 14, 0, 0, 0, 0, 0, 34, 0, 18, 0, 0, 0,
- 19, 0, 0, 0, 0, 0, 34, 0, 15, 0, 0, 0, 18, 0, 0, 0, 0, 0, 34, 0, 17, 0, 0, 0, 18, 0, 0, 0, 0, 0, 34, 0,
- 14, 0, 0, 0, 17, 0, 0, 0, 0, 0, 34, 0, 19, 0, 0, 0, 22, 0, 0, 0, 0, 0, 34, 0, 21, 0, 0, 0, 22, 0, 0, 0,
- 0, 0, 34, 0, 18, 0, 0, 0, 21, 0, 0, 0, 0, 0, 34, 0, 20, 0, 0, 0, 21, 0, 0, 0, 0, 0, 34, 0, 17, 0, 0, 0,
- 20, 0, 0, 0, 0, 0, 34, 0, 10, 0, 0, 0, 21, 0, 0, 0, 0, 0, 34, 0, 9, 0, 0, 0, 20, 0, 0, 0, 0, 0, 34, 0,
- 6, 0, 0, 0, 11, 0, 0, 0, 0, 0, 34, 0, 4, 0, 0, 0, 14, 0, 0, 0, 0, 0, 34, 0, 2, 0, 0, 0, 17, 0, 0, 0,
- 0, 0, 34, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 34, 0, 68, 65, 84, 65, 44, 1, 0, 0, 80,250,129, 2, 21, 1, 0, 0,
- 5, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,107, 8, 3,
- 5, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 86, 84,101,120, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,235,128, 2, 6, 0, 0, 0,
- 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67,111,108, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40,197, 32, 3, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, 64,107, 8, 3, 53, 0, 0, 0,
- 8, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0,
- 2, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 4, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0,
- 6, 0, 0, 0, 11, 0, 0, 0, 14, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 13, 0, 0, 0, 16, 0, 0, 0,
- 15, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 15, 0, 0, 0, 18, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0,
- 19, 0, 0, 0, 22, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 21, 0, 0, 0, 10, 0, 0, 0, 9, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 96, 1, 0, 0, 0,235,128, 2, 61, 0, 0, 0, 8, 0, 0, 0,152, 23, 55, 63,162,226,125, 63,
- 30, 5, 17, 63,162,226,125, 63, 30, 5, 17, 63,162,226,125, 63,152, 23, 55, 63,162,226,125, 63, 0, 0, 0, 0, 61, 0, 1, 0,
- 0, 0, 0, 0,252,228,213, 62,162,226,125, 63, 30, 5, 17, 63,162,226,125, 63, 30, 5, 17, 63,162,226,125, 63,252,228,213, 62,
-162,226,125, 63, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0,152, 23, 55, 63,162,226,125, 63, 30, 5, 17, 63,162,226,125, 63,
- 30, 5, 17, 63,162,226,125, 63,152, 23, 55, 63,162,226,125, 63, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0, 34, 5, 17, 63,
-162,226,125, 63, 0,229,213, 62,162,226,125, 63,252,228,213, 62,162,226,125, 63, 30, 5, 17, 63,162,226,125, 63, 0, 0, 0, 0,
- 61, 0, 1, 0, 0, 0, 0, 0, 18,192,137, 62,162,226,125, 63,144,108,246, 61,162,226,125, 63,144,108,246, 61,162,226,125, 63,
- 12,192,137, 62,162,226,125, 63, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0,252,228,213, 62,162,226,125, 63, 12,192,137, 62,
-162,226,125, 63, 12,192,137, 62,162,226,125, 63,252,228,213, 62,162,226,125, 63, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0,
- 12,192,137, 62,162,226,125, 63,144,108,246, 61,162,226,125, 63,144,108,246, 61,162,226,125, 63, 12,192,137, 62,162,226,125, 63,
- 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0,252,228,213, 62,162,226,125, 63, 12,192,137, 62,162,226,125, 63, 12,192,137, 62,
-162,226,125, 63,252,228,213, 62,162,226,125, 63, 0, 0, 0, 0, 61, 0, 1, 0, 0, 0, 0, 0, 68, 65, 84, 65,128, 0, 0, 0,
- 40,197, 32, 3, 58, 0, 0, 0, 32, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-255,255,255,255,255,255,255,255,255,255,255,255, 77, 69, 0, 0, 12, 1, 0, 0,200, 25,155, 2, 51, 0, 0, 0, 1, 0, 0, 0,
-152, 43,161, 2,192, 26,131, 2, 0, 0, 0, 0, 0, 0, 0, 0, 77, 69, 80,108, 97,110,101, 46, 48, 48, 52, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,160,206,148, 2, 0, 21,130, 2,200, 94,140, 2, 0, 0, 0, 0, 40, 79,169, 2,128, 86,169, 2,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,104, 28,155, 2, 1, 0, 0, 0, 5, 0, 0, 0,
- 20, 0, 0, 0, 0, 0, 0, 0, 8, 27,155, 2, 1, 0, 0, 0, 5, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0,200, 29,155, 2,
- 2, 0, 0, 0, 5, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 4, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,128,179, 0, 0, 64, 52, 0, 0, 0, 0, 0, 0,128, 63, 2, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 4, 0, 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 4, 0, 0, 0,160,206,148, 2, 0, 0, 0, 0, 1, 0, 0, 0,
-152,140,165, 2, 68, 65, 84, 65, 44, 1, 0, 0,104, 28,155, 2, 21, 1, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 79,169, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 80, 0, 0, 0, 40, 79,169, 2, 57, 0, 0, 0, 4, 0, 0, 0, 0, 0,128, 63,255,255,127, 63,
- 0, 0, 0, 0, 0, 0, 0, 0,255,127, 3,255, 0, 0,128, 63, 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0,255,127, 3,255,
- 1, 0,128,191,253,255,127,191, 0, 0, 0, 0, 0, 0, 0, 0,255,127, 3,255,250,255,127,191, 3, 0,128, 63, 0, 0, 0, 0,
- 0, 0, 0, 0,255,127, 3,255, 68, 65, 84, 65, 44, 1, 0, 0, 8, 27,155, 2, 21, 1, 0, 0, 5, 0, 0, 0, 3, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 86,169, 2, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 48, 0, 0, 0,128, 86,169, 2, 54, 0, 0, 0, 4, 0, 0, 0, 1, 0, 0, 0,
- 2, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 35, 0,
- 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 35, 0, 68, 65, 84, 65, 44, 1, 0, 0,200, 29,155, 2, 21, 1, 0, 0, 5, 0, 0, 0,
- 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 84,101,120, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21,130, 2, 5, 0, 0, 0,
- 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 86, 84,101,120, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 94,140, 2, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 20, 0, 0, 0, 0, 21,130, 2, 53, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 3, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 2, 68, 65, 84, 65, 44, 0, 0, 0,200, 94,140, 2,
- 61, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 60, 0, 1, 0, 0, 0, 0, 0, 77, 69, 0, 0, 12, 1, 0, 0,152, 43,161, 2,
- 51, 0, 0, 0, 1, 0, 0, 0, 8,197,152, 2,200, 25,155, 2, 0, 0, 0, 0, 0, 0, 0, 0, 77, 69,112,114,101,118,105,101,
-119, 0, 0, 0, 0,112,104,101,114,101, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 29,153, 2,224, 47,167, 2, 8, 75, 18, 3, 0, 0, 0, 0,
-240,143,152, 2, 40,112,155, 2, 0, 0, 0, 0, 16,148,167, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216, 44,161, 2,
- 1, 0, 0, 0, 5, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 72,194,152, 2, 1, 0, 0, 0, 5, 0, 0, 0, 12, 0, 0, 0,
- 0, 0, 0, 0,168,195,152, 2, 3, 0, 0, 0, 5, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0,130, 2, 0, 0,128, 7, 0, 0,
- 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,117,224,186, 64,
- 91, 13,187, 64,160,240,186, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 4, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 4, 0, 0, 0, 80, 29,153, 2,
- 0, 0, 0, 0, 1, 0, 0, 0,152,140,165, 2, 68, 65, 84, 65, 44, 1, 0, 0,216, 44,161, 2, 21, 1, 0, 0, 5, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240,143,152, 2, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 50, 0, 0,240,143,152, 2, 57, 0, 0, 0,130, 2, 0, 0,
- 28,136,141,191, 12,243,244, 62,198, 86,183,192,212,231,117, 10,191,130, 3,255,240,102,131,192, 30,183,119, 64,109,169,199,191,
- 58,166,158, 84,230,221, 3,255,119,108,239, 63,213, 85,156, 64,188, 58, 40,192,228, 40,207,106,137,198, 3,255, 95,135,146, 64,
- 63, 54, 14,191,241,194,102,192, 27,100,219,243, 45,177, 3,255,239, 84,141, 62, 16,220,157,192, 14, 2, 73,192, 8, 6, 39,148,
- 86,187, 3,255,132,239,162,192,206,165, 12,192,150, 45,240,191,175,144,245,207,251,214, 3,255,239, 84,141,190, 16,220,157, 64,
- 14, 2, 73, 64,248,249,217,107,170, 68, 3,255,132,239,162, 64,206,165, 12, 64,150, 45,240, 63, 81,111, 11, 48, 5, 41, 3,255,
-240,102,131, 64, 30,183,119,192,109,169,199, 63,198, 89, 98,171, 26, 34, 3,255,119,108,239,191,213, 85,156,192,188, 58, 40, 64,
- 28,215, 49,149,119, 57, 3,255, 95,135,146,192, 63, 54, 14, 63,241,194,102, 64,229,155, 37, 12,211, 78, 3,255, 28,136,141, 63,
- 12,243,244,190,198, 86,183, 64, 44, 24,139,245, 65,125, 3,255,114, 17, 68,192,226,153, 35, 64,154, 26,137,192, 6,189,226, 55,
- 85,162, 3,255,155, 40,230, 62,239,199, 73, 64,176, 52,157,192,211, 9,237, 68,153,148, 3,255,124, 55,168,191,224,177,164, 64,
- 58,144, 29,192, 69,227,132,112, 46,202, 3,255, 94, 35,105,192,230, 88,129,191,195, 14,143,192, 93,176,233,233, 68,158, 3,255,
- 37, 2,173,192,137,187,123, 63, 56, 68, 1,192,206,137,127, 21,216,211, 3,255,234,168, 2, 64,231,158, 57,189, 65,149,175,192,
-162, 44, 3,255, 11,136, 3,255, 19,159,114, 64,254,226, 34, 64,196,133,106,192,225, 82,164, 55,228,175, 3,255,105,176,249,190,
- 21,148, 39,192,217,214,166,192, 87,245,194,198, 5,142, 3,255,227,163, 54, 64, 86,121, 78,192, 22,202,125,192, 99, 62,120,185,
- 79,169, 3,255,241, 40, 53,192,200, 31,134,192,229,188, 60,192, 30,194, 94,164,136,191, 3,255, 96,230,181,192, 33, 24,119,191,
-174, 26,130, 63,186,131,231,234, 56, 22, 3,255,103, 93,163,192,136,128, 38, 64, 83,235,153, 63,100,144,224, 56, 74, 26, 3,255,
-238,219, 36,192,132,151,165, 64,165,226,109, 63,176,199, 33,113, 80, 20, 3,255, 24,237,111, 63,118,174,184, 64,212, 34,154, 62,
-125, 20, 44,126,148, 6, 3,255,163,244,130, 64,157, 58,133, 64,125, 95,226,190,119, 89, 5, 91, 86,246, 3,255, 96,230,181, 64,
- 33, 24,119, 63,174, 26,130,191, 70,124, 25, 21,200,233, 3,255,103, 93,163, 64,136,128, 38,192, 83,235,153,191,156,111, 32,199,
-182,229, 3,255,238,219, 36, 64,132,151,165,192,165,226,109,191, 80, 56,223,142,176,235, 3,255, 24,237,111,191,118,174,184,192,
-212, 34,154,190,131,235,212,129,108,249, 3,255,163,244,130,192,157, 58,133,192,125, 95,226, 62,137,166,251,164,170, 9, 3,255,
-227,163, 54,192, 86,121, 78, 64, 22,202,125, 64,157,193,136, 70,177, 86, 3,255,241, 40, 53, 64,200, 31,134, 64,229,188, 60, 64,
-226, 61,162, 91,120, 64, 3,255, 37, 2,173, 64,137,187,123,191, 56, 68, 1, 64, 50,118,129,234, 40, 44, 3,255,124, 55,168, 63,
-224,177,164,192, 58,144, 29, 64,187, 28,124,143,210, 53, 3,255, 19,159,114,192,254,226, 34,192,196,133,106, 64, 31,173, 92,200,
- 28, 80, 3,255,234,168, 2,192,231,158, 57, 61, 65,149,175, 64, 94,211,253, 0,245,119, 3,255,105,176,249, 62, 21,148, 39, 64,
-217,214,166, 64,169, 10, 62, 57,251,113, 3,255, 94, 35,105, 64,230, 88,129, 63,195, 14,143, 64,163, 79, 23, 22,188, 97, 3,255,
-114, 17, 68, 64,226,153, 35,192,154, 26,137, 64,250, 66, 30,200,171, 93, 3,255,155, 40,230,190,239,199, 73,192,176, 52,157, 64,
- 45,246, 19,187,103,107, 3,255, 37,178, 10,192,138,231,201, 63,149,143,166,192,129,209,140, 33,145,141, 3,255, 3,132,110,192,
-243,203, 85, 64,151,107, 66,192, 16,174,158, 73,209,190, 3,255,116,161,174,190, 81,152,241, 63,110, 2,177,192,217,247, 15, 40,
-182,134, 3,255,138, 91,154, 63,218,179,133, 64,209,222,122,192, 0, 27, 30, 92, 86,171, 3,255, 7, 82, 52,192, 82,252,149, 64,
- 64,202, 5,192, 39,193,227,101,181,210, 3,255,179, 12,148, 62,251,221,166, 64,188, 87, 41,192,192, 7,224,113, 21,198, 3,255,
-216,246, 29,192, 17,156,141,190,209,167,169,192, 47,203,160,250,137,139, 3,255, 99, 72,145,192, 79,114,213,191,183, 35, 83,192,
- 26,156, 3,219, 12,185, 3,255,115, 58,158,192,129,120, 33, 64,198, 41,238,191,126,148,116, 56,137,215, 3,255,118,158,174,192,
-103,148, 33,191,140,156, 1,192,218,136,198,240,203,211, 3,255, 55, 14,249, 62, 95,133,102, 62,210,143,186,192, 56, 9, 40, 5,
-113,128, 3,255,220, 61, 92, 64, 56,230,159,190, 6, 61,151,192, 94, 76,242,248,135,153, 3,255, 7, 86, 60, 64, 60, 48,119, 64,
- 93, 88, 81,192,119, 63,124, 85,246,184, 3,255,252, 55,139, 64, 62, 95,132, 63,225,216,113,192,118, 95, 54, 21,107,173, 3,255,
- 18, 6, 84,191,251, 96,142,191, 76, 4,182,192,158,237, 20,233,109,131, 3,255,109, 74,225,189, 51, 54,123,192, 34,246,138,192,
-241,253, 39,169, 1,162, 3,255,153, 66,119, 64,127,154,251,191,161,220,123,192, 59, 85, 59,214, 34,170, 3,255,201, 59,208, 63,
-241,182,135,192,212,101,108,192,103, 34,133,162,160,175, 3,255,161,246,169,191,235,196,151,192,170,149, 74,192, 95,228,253,151,
-184,186, 3,255, 33,198,131,192,218,137, 84,192, 37,134, 32,192,247,164, 77,184,167,201, 3,255,176, 61,179,192,138,110,210,191,
- 24,220,228,190,210,133,130,219,238,244, 3,255, 73,182,170,192,136, 16, 90,190, 90,194, 25, 64,224,139, 8,252,174, 53, 3,255,
- 75, 55,153,192, 4, 78, 87, 64, 12, 54, 62,190,200,151, 29, 74,179,250, 3,255,235, 19,161,192,207, 12,210, 63,210,242, 31, 64,
- 50,146,244, 34,182, 55, 3,255, 60, 75, 94,192,189,115,150, 64,186,211,167,190, 98,179, 49,102,183,247, 3,255,186,191,189,191,
- 63, 32,168, 64,213,100, 7, 64,161,224,191,114, 61, 47, 3,255,242,205,186, 63,141, 65,177, 64,127,219,154,191, 82, 32,177,120,
- 61,228, 3,255, 99,245,175, 62, 97, 12,178, 64,255,253,228, 63,247, 6, 65,121, 98, 40, 3,255,226, 92, 70, 64, 8,131,150, 64,
-182, 77,204,191,193, 66, 37,103, 32,220, 3,255,200,194,152, 64,180,155, 83, 64,154,217, 62, 63,207,104,101, 71, 87, 17, 3,255,
- 73,182,170, 64,136, 16, 90, 62, 90,194, 25,192, 32,116,248, 3, 82,202, 3,255,176, 61,179, 64,138,110,210, 63, 24,220,228, 62,
- 46,122,126, 36, 18, 11, 3,255,235, 19,161, 64,207, 12,210,191,210,242, 31,192,206,109, 12,221, 74,200, 3,255, 75, 55,153, 64,
- 4, 78, 87,192, 12, 54, 62, 62, 56,104,227,181, 77, 5, 3,255,186,191,189, 63, 63, 32,168,192,213,100, 7,192, 95, 31, 65,141,
-195,208, 3,255, 60, 75, 94, 64,189,115,150,192,186,211,167, 62,158, 76,207,153, 73, 8, 3,255, 99,245,175,190, 97, 12,178,192,
-255,253,228,191, 9,249,191,134,158,215, 3,255,242,205,186,191,141, 65,177,192,127,219,154, 63,174,223, 79,135,195, 27, 3,255,
-200,194,152,192,180,155, 83,192,154,217, 62,191, 49,151,155,184,169,238, 3,255,226, 92, 70,192, 8,131,150,192,182, 77,204, 63,
- 63,189,219,152,224, 35, 3,255,201, 59,208,191,241,182,135, 64,212,101,108, 64,153,221,123, 93, 96, 80, 3,255,153, 66,119,192,
-127,154,251, 63,161,220,123, 64,197,170,197, 41,222, 85, 3,255,161,246,169, 63,235,196,151, 64,170,149, 74, 64,161, 27, 3,104,
- 72, 69, 3,255, 33,198,131, 64,218,137, 84, 64, 37,134, 32, 64, 9, 91,179, 71, 89, 54, 3,255,118,158,174, 64,103,148, 33, 63,
-140,156, 1, 64, 38,119, 58, 15, 53, 44, 3,255,115, 58,158, 64,129,120, 33,192,198, 41,238, 63,130,107,140,199,119, 40, 3,255,
- 7, 82, 52, 64, 82,252,149,192, 64,202, 5, 64,217, 62, 29,154, 75, 45, 3,255,179, 12,148,190,251,221,166,192,188, 87, 41, 64,
- 64,248, 32,142,235, 57, 3,255, 7, 86, 60,192, 60, 48,119,192, 93, 88, 81, 64,137,192,132,170, 10, 71, 3,255,252, 55,139,192,
- 62, 95,132,191,225,216,113, 64,138,160,202,234,149, 82, 3,255,220, 61, 92,192, 56,230,159, 62, 6, 61,151, 64,162,179, 14, 7,
-121,102, 3,255, 55, 14,249,190, 95,133,102,190,210,143,186, 64,200,246,216,250,143,127, 3,255,109, 74,225, 61, 51, 54,123, 64,
- 34,246,138, 64, 15, 2,217, 86,255, 93, 3,255, 18, 6, 84, 63,251, 96,142, 63, 76, 4,182, 64, 98, 18,236, 22,147,124, 3,255,
- 99, 72,145, 64, 79,114,213, 63,183, 35, 83, 64,230, 99,253, 36,244, 70, 3,255,216,246, 29, 64, 17,156,141, 62,209,167,169, 64,
-209, 52, 96, 5,119,116, 3,255, 3,132,110, 64,243,203, 85,192,151,107, 66, 64,240, 81, 98,182, 47, 65, 3,255, 37,178, 10, 64,
-138,231,201,191,149,143,166, 64,127, 46,116,222,111,114, 3,255,138, 91,154,191,218,179,133,192,209,222,122, 64, 0,229,226,163,
-170, 84, 3,255,116,161,174, 62, 81,152,241,191,110, 2,177, 64, 39, 8,241,215, 74,121, 3,255, 36, 76, 19,192, 25,151,129, 64,
-212,254, 98,192,231,206, 97, 88,131,177, 3,255, 93,232,175,191,177, 23, 64, 64, 69,186,154,192,227,225,235, 66, 34,151, 3,255,
-208,190,232,190, 93,160,139, 64,191, 33,120,192,183,244,205, 94,192,170, 3,255,210,126,142,192, 43, 49,238, 63,112, 30, 84,192,
-187,158, 95, 39,183,182, 3,255,138,165, 97,192, 92, 9, 80, 63, 20, 74,147,192,183,177,233, 17, 86,156, 3,255, 98, 61,152,192,
- 87, 63,106,188, 6, 97, 90,192,127,152,251, 0,183,180, 3,255,200,173, 14, 64,155,183, 63, 64,192, 75,144,192,206, 48, 45, 64,
-152,156, 3,255, 95,162,167, 63,144, 29,209, 63, 25,245,174,192,250, 29, 75, 36,250,136, 3,255,211, 62, 68, 64, 51, 56,168, 63,
- 13,245,153,192,241, 65,192, 29,106,150, 3,255, 33,182, 36, 64, 34, 38,220,191,150, 5,159,192,233, 54,211,217,223,146, 3,255,
- 16, 34, 81, 63,129, 64,179,191,162, 5,180,192,242, 18, 93,224,111,133, 3,255,212, 56,159, 63,172,166, 68,192,212,108,154,192,
-176, 27, 32,190,208,149, 3,255,204, 76,223,191,170, 32,101,192, 65, 83,137,192,199,216,195,178,198,161, 3,255,249,249, 10,192,
- 62, 52,244,191, 25,236,162,192, 9,208, 0,213,102,145, 3,255, 42,207, 89,192,251, 6, 47,192, 27,165,121,192,209,182, 18,196,
-198,169, 3,255,137,215,176,192, 25, 62,241, 63,179,254,219,190,179,134,232, 39, 78,247, 3,255, 28,150,186,192,150, 16, 28, 60,
-191, 9, 7,191,118,128,131, 1, 77,245, 3,255, 34,132,181,192, 99, 60, 92, 63,217, 81,149, 63,181,131,238, 18,252, 23, 3,255,
-175,242, 74,190,164,173,183, 64,227,105,145,191,117,250,160,125, 31,232, 3,255,219,227, 2,192, 96,164,173, 64,200, 71, 78,191,
-164,212, 52,119,226,238, 3,255,181,140, 92,191, 75, 38,184, 64,176,148, 37, 63,224,236,237,125,159, 12, 3,255, 75,104,159, 64,
-212, 56,236, 63,240,126, 29,192,211,108,166, 41, 9,203, 3,255,215,159,132, 64, 84,184, 97, 64, 30, 44, 10,192,176, 91, 19, 76,
- 56,209, 3,255, 95,122,164, 64,199,143, 44, 64, 53, 78, 68,191, 17,112, 17, 59,185,237, 3,255,255,176, 54, 64,243, 84,141,192,
-237,176, 36,192,192, 63, 9,160, 63,200, 3,255, 93,229,133, 64,217, 21, 68,192,157,226, 45,192,249, 90,187,187, 78,197, 3,255,
-203, 56,129, 64, 21,211,130,192,187,115,143,191,252, 87,194,166,252,229, 3,255,189,239,104,192, 82,142,140,192,178,178,168,191,
-134,177,245,158,155,227, 3,255, 50,141,253,191, 52,155,167,192,170,181,218,191,125,211,166,141,155,219, 3,255,164, 58, 41,192,
-172, 34,167,192,206,232,151, 61,232,197,243,141, 26, 0, 3,255, 93,229,133,192,217, 21, 68, 64,157,226, 45, 64, 7,165, 69, 68,
-178, 58, 3,255,203, 56,129,192, 21,211,130, 64,187,115,143, 63, 4,168, 62, 89, 4, 26, 3,255,255,176, 54,192,243, 84,141, 64,
-237,176, 36, 64, 64,192,247, 95,193, 55, 3,255, 50,141,253, 63, 52,155,167, 64,170,181,218, 63,131, 44, 90,114,101, 36, 3,255,
-164, 58, 41, 64,172, 34,167, 64,206,232,151,189, 24, 58, 13,114,230,255, 3,255,189,239,104, 64, 82,142,140, 64,178,178,168, 63,
-122, 78, 11, 97,101, 28, 3,255, 28,150,186, 64,150, 16, 28,188,191, 9, 7, 63,138,127,125,254,179, 10, 3,255, 34,132,181, 64,
- 99, 60, 92,191,217, 81,149,191, 75,124, 18,237, 4,232, 3,255,137,215,176, 64, 25, 62,241,191,179,254,219, 62, 77,121, 24,216,
-178, 8, 3,255,219,227, 2, 64, 96,164,173,192,200, 71, 78, 63, 92, 43,204,136, 30, 17, 3,255,181,140, 92, 63, 75, 38,184,192,
-176,148, 37,191, 32, 19, 19,130, 97,243, 3,255,175,242, 74, 62,164,173,183,192,227,105,145, 63,139, 5, 96,130,225, 23, 3,255,
-215,159,132,192, 84,184, 97,192, 30, 44, 10, 64, 80,164,237,179,200, 46, 3,255, 95,122,164,192,199,143, 44,192, 53, 78, 68, 63,
-239,143,239,196, 71, 18, 3,255, 75,104,159,192,212, 56,236,191,240,126, 29, 64, 45,147, 90,214,247, 52, 3,255,212, 56,159,191,
-172,166, 68, 64,212,108,154, 64, 80,228,224, 65, 48,106, 3,255, 33,182, 36,192, 34, 38,220, 63,150, 5,159, 64, 23,201, 45, 38,
- 33,109, 3,255, 16, 34, 81,191,129, 64,179, 63,162, 5,180, 64, 14,237,163, 31,145,122, 3,255, 42,207, 89, 64,251, 6, 47, 64,
- 27,165,121, 64, 47, 73,238, 59, 58, 86, 3,255,208, 76,223, 63,170, 32,101, 64, 65, 83,137, 64, 57, 39, 61, 77, 58, 94, 3,255,
-249,249, 10, 64, 62, 52,244, 63, 25,236,162, 64,247, 47, 0, 43,154,110, 3,255,210,126,142, 64, 43, 49,238,191,112, 30, 84, 64,
- 69, 97,161,216, 73, 73, 3,255, 98, 61,152, 64, 87, 63,106, 60, 6, 97, 90, 64,129,103, 5,255, 73, 75, 3,255,138,165, 97, 64,
- 92, 9, 80,191, 20, 74,147, 64, 73, 78, 23,238,170, 99, 3,255,208,190,232, 62, 93,160,139,192,191, 33,120, 64, 73, 11, 51,161,
- 64, 85, 3,255, 36, 76, 19, 64, 25,151,129,192,212,254, 98, 64, 25, 49,159,167,125, 78, 3,255, 93,232,175, 63,177, 23, 64,192,
- 69,186,154, 64, 29, 30, 21,189,222,104, 3,255,211, 62, 68,192, 51, 56,168,191, 13,245,153, 64, 15,190, 64,226,150,105, 3,255,
-200,173, 14,192,155,183, 63,192,192, 75,144, 64, 50,207,211,191,104, 99, 3,255, 95,162,167,191,144, 29,209,191, 25,245,174, 64,
- 6,226,181,219, 6,119, 3,255,158,156,211,191,185,228,132, 63,190,207,176,192,164,220,231, 21,244,134, 3,255, 0, 76, 41,192,
-190,199, 5, 64, 83,157,153,192,146,198, 75, 45,246,150, 3,255,204, 83,125,192,169, 55,105, 64,244,162, 20,192, 72,169,246, 79,
- 82,206, 3,255,178,215, 91,192,222,235, 62, 64,190,254,108,192,215,180, 87, 65,155,175, 3,255,242, 63, 59,191,210,237,152, 63,
-251, 21,182,192,125,239, 26, 25,149,131, 3,255, 86,230, 94, 61,198, 30, 35, 64,233, 15,169,192,238, 0, 52, 55,135,140, 3,255,
-220, 4,199, 63, 7,145,146, 64,104,186, 83,192,109, 34,137,100,168,184, 3,255, 9,120, 86, 63,149, 91,109, 64, 79,242,142,192,
-133, 18, 64, 81,218,158, 3,255,103,243, 95,192,221, 91,138, 64,186, 15,236,191,170,178,219, 93, 25,216, 3,255, 46,206, 5,192,
-121, 41,159, 64,154, 91, 19,192,230,209, 96,108,226,205, 3,255,169,200,139, 63,198, 78,163, 64,201,146, 42,192,247, 24, 59,111,
-206,197, 3,255,187,128, 4,191,206,181,167, 64, 74, 92, 37,192, 57,245, 96,114,145,199, 3,255,151, 16,231,191,160,166,209, 61,
-167, 95,178,192,136,217,196, 2,245,133, 3,255,163,200, 69,192,178,143, 38,191,148, 48,158,192,243,188, 11,242,223,147, 3,255,
- 43,192,155,192,151, 6,250,191,170, 82, 39,192, 79,149,247,212,231,199, 3,255,233,118,132,192,217,111,173,191, 67,122,123,192,
-100,165, 58,226,165,170, 3,255,238, 85,146,192,178,205, 78, 64, 70, 54,221,191,183,156,134, 71,120,218, 3,255, 76,137,167,192,
-111, 31,227, 63,158, 57,251,191,234,141, 54, 39, 59,213, 3,255, 39,143,170,192,167, 15,183,191,251, 85,252,191,217,139,169,223,
- 13,213, 3,255, 8,214,175,192,177,124, 53, 62,206,241, 2,192, 23,136, 89, 3, 92,211, 3,255, 77,160,160,190, 9, 20,182, 62,
-108,232,186,192, 8,248,241, 7,128,128, 3,255, 33,144,163, 63,151,144,186, 61, 50, 47,183,192, 97, 27, 19, 2,252,130, 3,255,
-222,179,129, 64,234,147,224,190, 38,180,134,192, 83, 89, 64,246,218,164, 3,255,114,138, 49, 64,246, 97, 57,190, 57, 76,165,192,
-250, 60,247,251,138,143, 3,255,249,158, 27, 64,197,118,141, 64, 58,196, 62,192, 90, 52, 70, 97, 90,191, 3,255, 98,244, 89, 64,
- 8,120, 79, 64, 65,128, 96,192, 8, 74, 39, 71,151,179, 3,255, 13,100,144, 64,200,214,118, 62, 64,205,110,192,182, 98, 37, 4,
-161,174, 3,255, 42,202,131, 64, 60,161,231, 63,142,245,112,192, 10, 90,255, 38,209,173, 3,255,149, 51,122,191, 52,151,163,190,
- 15,157,184,192,118,234, 36,250,248,129, 3,255, 5,113, 42,191, 31,112,241,191, 15,119,176,192, 93,241, 84,215,135,135, 3,255,
- 60, 55,172, 61, 22, 64,143,192,164,246,113,192, 27, 2,132,157, 71,174, 3,255,167,173,154,190,111,224, 83,192,198,169,154,192,
-136,249, 89,183,211,150, 3,255,151,133,136, 64, 9,249,162,191,106,219,115,192,175, 93, 47,229, 3,173, 3,255,110,124, 89, 64,
-135, 6, 40,192,223,195,127,192,120, 74, 31,199,208,168, 3,255,244,248,117, 63,109, 90,148,192,123, 0, 93,192, 8, 20, 66,154,
-249,180, 3,255,162, 0, 17, 64, 63,196,113,192, 52,239,119,192, 10, 49, 64,173,144,171, 3,255,162,217, 7,191, 21,117,156,192,
-222,238, 75,192,139,245, 20,149,108,186, 3,255,171,144, 6,192,112,158,144,192,198,241, 69,192,156,210, 55,157,115,188, 3,255,
-110,238,148,192,115,109, 50,192,187,197, 13,192,170,153,231,195, 17,208, 3,255, 79,252, 96,192,140, 40,115,192,116,165, 48,192,
-226,178, 98,173,236,195, 3,255,100,228,172,192,217,128,248,191, 8, 93,150,191, 91,138, 53,213, 86,229, 3,255, 82,171,182,192,
-216,250,168,191, 15, 15,147, 62,122,131,250,226,203, 5, 3,255,215, 73,160,192,124,165, 49, 62,232, 85, 66, 64, 33,147, 84, 4,
- 42, 67, 3,255,171, 89,178,192,192,115, 24,191, 78,116,221, 63,129,134, 64,243, 50, 38, 3,255, 51,206,143,192,133,250,105, 64,
-119,251, 97,191, 85,158, 53, 80,193,235, 3,255, 62, 32,160,192,163, 38, 65, 64,164,117, 3, 63,236,146, 24, 66,193, 10, 3,255,
-216,108,155,192, 59,255,141, 63,189,117, 69, 64, 61,150,119, 23, 42, 68, 3,255, 85, 27,164,192,244, 78, 9, 64, 87,193,239, 63,
- 33,144,128, 46, 73, 41, 3,255,134, 35,117,192, 39,152,138, 64, 73, 86,116,191,230,171, 2, 94, 73,234, 3,255, 35,220, 67,192,
- 6,218,159, 64,242,103,155, 62,240,188,215,108, 55, 6, 3,255,130, 79, 99,191,215,182,164, 64, 10, 4, 42, 64,118,237, 50,112,
-190, 58, 3,255,161, 86, 3,192, 14,205,168, 64, 60, 55,197, 63,148,211, 31,115,255, 33, 3,255,229,101,215, 63, 84,141,168, 64,
- 16, 90,248,191, 11, 37,148,114,159,212, 3,255, 99, 52,155, 63,198, 17,183, 64,232,199,235,190,159, 26,192,124,120,245, 3,255,
-105,179, 10, 61, 25,185,169, 64,120,119, 31, 64, 77, 0,101,115, 96, 55, 3,255,143,198, 37, 63,123,120,183, 64,160,108,135, 63,
-240, 13, 8,125,144, 23, 3,255,180,174, 32, 64, 65, 13,155, 64,238,167, 8,192,247, 53,245,105,163,208, 3,255, 69,199,104, 64,
-177,135,143, 64, 41, 12,132,191, 10, 79, 10, 98, 31,233, 3,255,121,134,159, 64, 49,245, 49, 64,210,166,169, 63, 27,109,242, 59,
-190, 29, 3,255, 52,133,143, 64,119,200,113, 64,186,206, 29, 62, 20, 98, 39, 82,190, 3, 3,255,215, 73,160, 64,124,165, 49,190,
-232, 85, 66,192,223,108,172,251,214,188, 3,255,171, 89,178, 64,192,115, 24, 63, 78,116,221,191,127,121,192, 12,206,217, 3,255,
-100,228,172, 64,217,128,248, 63, 8, 93,150, 63,165,117,203, 42,170, 26, 3,255, 82,171,182, 64,216,250,168, 63, 15, 15,147,190,
-134,124, 6, 29, 53,250, 3,255,216,108,155, 64, 59,255,141,191,189,117, 69,192,195,105,137,232,214,187, 3,255, 85, 27,164, 64,
-244, 78, 9,192, 87,193,239,191,223,111,128,209,183,214, 3,255, 51,206,143, 64,133,250,105,192,119,251, 97, 63,171, 97,203,175,
- 63, 20, 3,255, 62, 32,160, 64,163, 38, 65,192,164,117, 3,191, 20,109,232,189, 63,245, 3,255,130, 79, 99, 63,215,182,164,192,
- 10, 4, 42,192,138, 18,206,143, 66,197, 3,255,161, 86, 3, 64, 14,205,168,192, 60, 55,197,191,108, 44,225,140, 1,222, 3,255,
-134, 35,117, 64, 39,152,138,192, 73, 86,116, 63, 26, 84,254,161,183, 21, 3,255, 35,220, 67, 64, 6,218,159,192,242,103,155,190,
- 16, 67, 41,147,201,249, 3,255,105,179, 10,189, 25,185,169,192,120,119, 31,192,179,255,155,140,160,200, 3,255,143,198, 37,191,
-123,120,183,192,160,108,135,191, 16,242,248,130,112,232, 3,255,229,101,215,191, 84,141,168,192, 16, 90,248, 63,245,218,108,141,
- 97, 43, 3,255, 99, 52,155,191,198, 17,183,192,232,199,235, 62, 97,229, 64,131,136, 10, 3,255,121,134,159,192, 49,245, 49,192,
-210,166,169,191,229,146, 14,196, 66,226, 3,255, 52,133,143,192,119,200,113,192,186,206, 29,190,236,157,217,173, 66,252, 3,255,
-180,174, 32,192, 65, 13,155,192,238,167, 8, 64, 9,202, 11,150, 93, 47, 3,255, 69,199,104,192,177,135,143,192, 41, 12,132, 63,
-246,176,246,157,225, 22, 3,255,244,248,117,191,109, 90,148, 64,123, 0, 93, 64,248,235,190,101, 7, 75, 3,255,162, 0, 17,192,
- 63,196,113, 64, 52,239,119, 64,246,206,192, 82,112, 84, 3,255,151,133,136,192, 9,249,162, 63,106,219,115, 64, 81,162,209, 26,
-253, 82, 3,255,110,124, 89,192,135, 6, 40, 64,223,195,127, 64,136,181,225, 56, 48, 87, 3,255,162,217, 7, 63, 21,117,156, 64,
-222,238, 75, 64,117, 10,236,106,148, 69, 3,255,171,144, 6, 64,112,158,144, 64,198,241, 69, 64,100, 45,201, 98,141, 67, 3,255,
-110,238,148, 64,115,109, 50, 64,187,197, 13, 64, 86,102, 25, 60,239, 47, 3,255, 79,252, 96, 64,140, 40,115, 64,116,165, 48, 64,
- 30, 77,158, 82, 20, 60, 3,255, 39,143,170, 64,167, 15,183, 63,251, 85,252, 63, 39,116, 87, 32,243, 42, 3,255, 8,214,175, 64,
-177,124, 53,190,206,241, 2, 64,233,119,167,252,164, 44, 3,255,238, 85,146, 64,178,205, 78,192, 70, 54,221, 63, 73, 99,122,184,
-136, 37, 3,255, 76,137,167, 64,111, 31,227,191,158, 57,251, 63, 22,114,202,216,197, 42, 3,255,103,243, 95, 64,221, 91,138,192,
-186, 15,236, 63, 86, 77, 37,162,231, 39, 3,255, 46,206, 5, 64,121, 41,159,192,154, 91, 19, 64, 26, 46,160,147, 30, 50, 3,255,
-169,200,139,191,198, 78,163,192,201,146, 42, 64, 9,231,197,144, 50, 58, 3,255,187,128, 4, 63,206,181,167,192, 74, 92, 37, 64,
-199, 10,160,141,111, 56, 3,255,249,158, 27,192,197,118,141,192, 58,196, 62, 64,166,203,186,158,166, 64, 3,255, 98,244, 89,192,
- 8,120, 79,192, 65,128, 96, 64,248,181,217,184,105, 76, 3,255, 13,100,144,192,200,214,118,190, 64,205,110, 64, 74,157,219,251,
- 95, 81, 3,255, 42,202,131,192, 60,161,231,191,142,245,112, 64,246,165, 1,217, 47, 82, 3,255,222,179,129,192,234,147,224, 62,
- 38,180,134, 64,173,166,192, 9, 38, 91, 3,255,114,138, 49,192,246, 97, 57, 62, 57, 76,165, 64, 6,195, 9, 4,118,112, 3,255,
- 77,160,160, 62, 9, 20,182,190,108,232,186, 64,248, 7, 15,248,128,127, 3,255, 33,144,163,191,151,144,186,189, 50, 47,183, 64,
-159,228,237,253, 4,125, 3,255, 60, 55,172,189, 22, 64,143, 64,164,246,113, 64,229,253,124, 98,185, 81, 3,255,167,173,154, 62,
-111,224, 83, 64,198,169,154, 64,120, 6,167, 72, 45,105, 3,255,149, 51,122, 63, 52,151,163, 62, 15,157,184, 64,138, 21,220, 5,
- 8,126, 3,255, 5,113, 42, 63, 31,112,241, 63, 15,119,176, 64,163, 14,172, 40,121,120, 3,255, 43,192,155, 64,151, 6,250, 63,
-170, 82, 39, 64,177,106, 9, 43, 25, 56, 3,255,233,118,132, 64,217,111,173, 63, 67,122,123, 64,156, 90,198, 29, 91, 85, 3,255,
-151, 16,231, 63,160,166,209,189,167, 95,178, 64,120, 38, 60,253, 11,122, 3,255,163,200, 69, 64,178,143, 38, 63,148, 48,158, 64,
- 13, 67,245, 13, 33,108, 3,255,204, 83,125, 64,169, 55,105,192,244,162, 20, 64,184, 86, 10,176,174, 49, 3,255,178,215, 91, 64,
-222,235, 62,192,190,254,108, 64, 41, 75,169,190,101, 80, 3,255,158,156,211, 63,185,228,132,191,190,207,176, 64, 92, 35, 25,234,
- 12,121, 3,255, 0, 76, 41, 64,190,199, 5,192, 83,157,153, 64,110, 57,181,210, 10,105, 3,255,220, 4,199,191, 7,145,146,192,
-104,186, 83, 64,147,221,119,155, 88, 71, 3,255, 9,120, 86,191,149, 91,109,192, 79,242,142, 64,123,237,192,174, 38, 97, 3,255,
-242, 63, 59, 63,210,237,152,191,251, 21,182, 64,131, 16,230,230,107,124, 3,255, 86,230, 94,189,198, 30, 35,192,233, 15,169, 64,
- 18,255,204,200,121,115, 3,255,208, 27, 46,192,124,104, 86, 64, 85, 52,126,192,137,197,226, 72,134,168, 3,255, 82,168,234,191,
- 87, 62,149, 64,118, 12, 67,192, 5,217,188,101,210,188, 3,255,186, 10, 16,192,249,106, 52, 64,210,253,147,192,182,206,131, 62,
-198,155, 3,255, 93, 33,240,190,191,199, 71, 64,142, 47,158,192,214,245, 40, 69,199,148, 3,255, 19, 46, 71,187,194,240,115, 64,
-175,166,142,192,240,254,161, 82, 66,158, 3,255,188,194,101,191, 17, 84,154, 64,240,193, 77,192, 76,235,214,104,142,185, 3,255,
-246,246,115,192,183, 86, 15, 64, 51,168,118,192,249,172,229, 47, 45,171, 3,255,101, 1,160,192, 47,146,184, 63,153, 38, 45,192,
-225,146, 96, 30,102,196, 3,255,215,229, 85,192,166,178,218, 63,183, 55,144,192, 38,182,133, 37,110,158, 3,255,151,178,104,192,
-245,107,205,189,175, 60,147,192,178,175,205,253, 91,156, 3,255,192, 81,136,192, 55,239, 4,191, 24,222,127,192,130,163,158,245,
- 35,168, 3,255, 70,241,164,192,102,218,251, 62,143, 82, 48,192,222,143,210, 11,110,195, 3,255,209,230,173, 63,231,135, 71, 64,
- 27,234,152,192,148, 29, 4, 67, 11,151, 3,255,158,103, 67, 64, 82,206, 51, 64, 39,168,132,192,203, 66, 63, 60,242,164, 3,255,
-136,131,100, 63, 16, 95, 27, 64, 4,115,168,192,122, 20,138, 53,143,141, 3,255, 77,154,217, 63,185, 69, 78, 63,221,196,177,192,
- 53, 38,236, 17, 42,135, 3,255,107,195, 37, 64, 4,213, 36, 63, 20, 33,167,192,151, 55,194, 14,168,141, 3,255,103,139, 94, 64,
-153,146,250, 63, 72,141,137,192, 19, 75,156, 43,245,161, 3,255,231,195, 21, 64,236, 58,101,191,218,178,169,192,247, 49, 31,236,
-218,139, 3,255,142, 32, 48, 64,155,140, 32,192,195, 1,145,192, 3, 59,178,200,204,156, 3,255, 70,155,185, 63, 12,202, 59,191,
-163, 86,180,192,149, 32, 73,239, 91,133, 3,255, 29, 97, 43, 62,144,118, 2,192,125,231,175,192,106, 4,160,210,103,136, 3,255,
- 97,116,196, 62, 10,176, 56,192,120,239,162,192,164, 8, 20,194, 81,144, 3,255,185, 2, 5, 64,217,105, 76,192,135,173,142,192,
-218, 45, 79,187, 56,158, 3,255,163,243,144,191,252, 41, 73,192,148, 66,154,192,134,230, 73,188,107,150, 3,255,147,133, 20,192,
-234, 55,124,192,176, 3,107,192,110,204,196,170,164,175, 3,255, 42,186, 60,192,219,128,189,191, 23, 43,155,192, 41,191,189,222,
-199,150, 3,255, 52,164,172,191,106,240, 18,192,141, 58,167,192, 76,226,213,204,128,142, 3,255, 12,171,100,192,249, 33,243,191,
-106,221,135,192,248,178,143,214,143,162, 3,255,195, 78, 74,192,241,206, 96,192, 98, 88, 94,192, 4,188, 34,179,129,179, 3,255,
- 41,110,177,192, 81, 30,186, 63,105,249,158,191,160,134,165, 30, 86,229, 3,255, 45,138,172,192,114,149, 17, 64,127,203,200, 62,
-251,137,171, 48, 56, 9, 3,255, 10, 94,182,192, 48, 5, 1, 63, 86, 81,165,191,156,131, 24, 12, 94,228, 3,255,117,224,186,192,
- 37,234,247,190,147, 56,126, 62,132,128,101,246, 46, 6, 3,255,204, 78,184,192, 19,193, 89,189,187,163,141, 63, 22,130,208,254,
-241, 22, 3,255,105,232,174,192,151,187,224, 63,156,183,153, 63,137,136,137, 38, 3, 25, 3,255, 42,118, 68,191,101,173,176, 64,
-114,132,233,191, 57,238,142,120,217,216, 3,255, 81,172,191, 62, 67,208,186, 64,195,163,216,190, 75, 7,131,127,159,247, 3,255,
-113, 2,218,191,172,151,171, 64,114, 25,212,191,243,219,116,117, 30,220, 3,255,251,244, 21,192, 28, 12,172, 64, 13,151,128, 61,
-229,205,196,117,226, 1, 3,255, 51, 39,223,191,248, 94,177, 64,104,122, 76, 63,155,217, 3,121, 65, 16, 3,255, 72,208, 28, 61,
- 91, 13,187, 64, 64,215,245, 62,187, 0,168,127, 66, 9, 3,255, 45, 93,142, 64, 70,137, 14, 64,147,202, 70,192,241, 96,173, 49,
-202,188, 3,255,106, 23,173, 64,157,131,182, 63,175,176,225,191, 7,118, 20, 32, 72,218, 3,255, 78,203,128, 64,124, 14, 69, 64,
- 55, 0, 61,192,168, 88, 80, 66,199,191, 3,255,133,175,133, 64, 28,149,121, 64, 51,212,168,191, 4, 92, 86, 84,170,227, 3,255,
- 8,211,149, 64, 84,166, 94, 64, 68, 24, 29,191,221,101, 30, 76,113,241, 3,255, 31,169,175, 64,138,176,237, 63, 15,168,103,191,
-152,119,128, 40, 11,235, 3,255,122, 78, 57, 64,224, 12,120,192, 7, 56, 84,192, 62, 64,247,171,239,183, 3,255, 0, 74, 48, 64,
-245,165,155,192,208, 87,227,191, 38, 61, 68,150,192,217, 3,255, 85,108,100, 64,115, 47, 76,192,149,224, 88,192,102, 77, 90,185,
-131,182, 3,255,173,191,150, 64,227,233, 55,192,198,101,254,191,121,102, 79,192, 73,213, 3,255,119, 97,148, 64,200, 33, 89,192,
- 24,225,150,191, 7,101, 44,182, 20,229, 3,255, 75,171, 86, 64, 36, 83,150,192, 22, 36,133,191,220, 72,131,153, 32,232, 3,255,
-116,251, 81,192,115, 80,139,192, 57,124, 10,192, 81,185, 53,160,254,208, 3,255, 70,239,122,192, 53,220,138,192,113, 86,227,190,
- 68,171,132,160,195,246, 3,255, 14, 50, 28,192,245, 4,153,192,141, 39, 23,192,187,201,215,151, 33,205, 3,255, 34,123,189,191,
-203,168,178,192,149,106,130,191,209,222, 63,134,158,234, 3,255,176,127,232,191,177,107,178,192, 47,189,236,189, 65,216,100,134,
- 66,252, 3,255, 53,168, 90,192,169, 83,152,192,227,201,133, 62, 29,181, 77,152,136, 4, 3,255,173,191,150,192,227,233, 55, 64,
-198,101,254, 63,135,153,177, 63,183, 42, 3,255, 85,108,100,192,115, 47, 76, 64,149,224, 88, 64,154,178,166, 70,125, 73, 3,255,
-119, 97,148,192,200, 33, 89, 64, 24,225,150, 63,249,154,212, 73,236, 26, 3,255, 75,171, 86,192, 36, 83,150, 64, 22, 36,133, 63,
- 36,183,125,102,224, 23, 3,255, 0, 74, 48,192,245,165,155, 64,208, 87,227, 63,218,194,188,105, 64, 38, 3,255,122, 78, 57,192,
-224, 12,120, 64, 7, 56, 84, 64,194,191, 9, 84, 17, 72, 3,255, 34,123,189, 63,203,168,178, 64,149,106,130, 63, 47, 33,193,121,
- 98, 21, 3,255, 14, 50, 28, 64,245, 4,153, 64,141, 39, 23, 64, 69, 54, 41,104,223, 50, 3,255,176,127,232, 63,177,107,178, 64,
- 47,189,236, 61,191, 39,156,121,190, 3, 3,255, 53,168, 90, 64,169, 83,152, 64,227,201,133,190,227, 74,179,103,120,251, 3,255,
- 70,239,122, 64, 53,220,138, 64,113, 86,227, 62,188, 84,124, 95, 61, 9, 3,255,116,251, 81, 64,115, 80,139, 64, 57,124, 10, 64,
-175, 70,203, 95, 2, 47, 3,255,117,224,186, 64, 37,234,247, 62,147, 56,126,190,124,127,155, 9,210,249, 3,255, 10, 94,182, 64,
- 48, 5, 1,191, 86, 81,165, 63,100,124,232,243,162, 27, 3,255,204, 78,184, 64, 19,193, 89, 61,187,163,141,191,234,125, 48, 1,
- 15,233, 3,255,105,232,174, 64,151,187,224,191,156,183,153,191,119,119,119,217,253,230, 3,255, 45,138,172, 64,114,149, 17,192,
-127,203,200,190, 5,118, 85,207,200,246, 3,255, 41,110,177, 64, 81, 30,186,191,105,249,158, 63, 96,121, 91,225,170, 26, 3,255,
-251,244, 21, 64, 28, 12,172,192, 13,151,128,189, 27, 50, 60,138, 30,254, 3,255,113, 2,218, 63,172,151,171,192,114, 25,212, 63,
- 13, 36,140,138,226, 35, 3,255, 51, 39,223, 63,248, 94,177,192,104,122, 76,191,101, 38,253,134,191,239, 3,255, 72,208, 28,189,
- 91, 13,187,192, 64,215,245,190, 69,255, 88,128,190,246, 3,255, 81,172,191,190, 67,208,186,192,195,163,216, 62,181,248,125,128,
- 97, 8, 3,255, 42,118, 68, 63,101,173,176,192,114,132,233, 63,199, 17,114,135, 39, 39, 3,255,133,175,133,192, 28,149,121,192,
- 51,212,168, 63,252,163,170,171, 86, 28, 3,255, 78,203,128,192,124, 14, 69,192, 55, 0, 61, 64, 88,167,176,189, 57, 64, 3,255,
- 31,169,175,192,138,176,237,191, 15,168,103, 63,104,136,128,215,245, 20, 3,255, 8,211,149,192, 84,166, 94,192, 68, 24, 29, 63,
- 35,154,226,179,143, 14, 3,255,106, 23,173,192,157,131,182,191,175,176,225, 63,249,137,236,223,184, 37, 3,255, 45, 93,142,192,
- 70,137, 14,192,147,202, 70, 64, 15,159, 83,206, 54, 67, 3,255,185, 2, 5,192,217,105, 76, 64,135,173,142, 64, 38,210,177, 68,
-200, 97, 3,255, 97,116,196,190, 10,176, 56, 64,120,239,162, 64, 92,247,236, 61,175,111, 3,255,142, 32, 48,192,155,140, 32, 64,
-195, 1,145, 64,253,196, 78, 55, 52, 99, 3,255,231,195, 21,192,236, 58,101, 63,218,178,169, 64, 9,206,225, 19, 38,116, 3,255,
- 70,155,185,191, 12,202, 59, 63,163, 86,180, 64,107,223,183, 16,165,122, 3,255, 29, 97, 43,190,144,118, 2, 64,125,231,175, 64,
-150,251, 96, 45,153,119, 3,255,195, 78, 74, 64,241,206, 96, 64, 98, 88, 94, 64,252, 67,222, 76,127, 76, 3,255, 12,171,100, 64,
-249, 33,243, 63,106,221,135, 64, 8, 77,113, 41,113, 93, 3,255,147,133, 20, 64,234, 55,124, 64,176, 3,107, 64,146, 51, 60, 85,
- 92, 80, 3,255,164,243,144, 63,252, 41, 73, 64,148, 66,154, 64,122, 25,183, 67,149,105, 3,255, 52,164,172, 63,106,240, 18, 64,
-141, 58,167, 64,180, 29, 43, 51,128,113, 3,255, 42,186, 60, 64,219,128,189, 63, 23, 43,155, 64,215, 64, 67, 33, 57,105, 3,255,
-101, 1,160, 64, 47,146,184,191,153, 38, 45, 64, 31,109,160,225,154, 59, 3,255,246,246,115, 64,183, 86, 15,192, 51,168,118, 64,
- 7, 83, 27,208,211, 84, 3,255, 70,241,164, 64,102,218,251,190,143, 82, 48, 64, 34,112, 46,244,146, 60, 3,255,192, 81,136, 64,
- 55,239, 4, 63, 24,222,127, 64,126, 92, 98, 10,221, 87, 3,255,151,178,104, 64,245,107,205, 61,175, 60,147, 64, 78, 80, 51, 2,
-165, 99, 3,255,215,229, 85, 64,166,178,218,191,183, 55,144, 64,218, 73,123,218,146, 97, 3,255,188,194,101, 63, 17, 84,154,192,
-240,193, 77, 64,180, 20, 42,151,114, 70, 3,255, 19, 46, 71, 59,194,240,115,192,175,166,142, 64, 16, 1, 95,173,190, 97, 3,255,
- 82,168,234, 63, 87, 62,149,192,118, 12, 67, 64,251, 38, 68,154, 46, 67, 3,255,208, 27, 46, 64,124,104, 86,192, 85, 52,126, 64,
-119, 58, 30,183,122, 87, 3,255,186, 10, 16, 64,249,106, 52,192,210,253,147, 64, 74, 49,125,193, 58,100, 3,255, 93, 33,240, 62,
-191,199, 71,192,142, 47,158, 64, 42, 10,216,186, 57,107, 3,255,103,139, 94,192,153,146,250,191, 72,141,137, 64,237,180,100,212,
- 11, 94, 3,255,107,195, 37,192, 4,213, 36,191, 20, 33,167, 64,105,200, 62,241, 88,114, 3,255,158,103, 67,192, 82,206, 51,192,
- 39,168,132, 64, 53,189,193,195, 14, 91, 3,255,209,230,173,191,231,135, 71,192, 27,234,152, 64,108,226,252,188,245,104, 3,255,
- 77,154,217,191,185, 69, 78,191,221,196,177, 64,203,217, 20,238,214,120, 3,255,136,131,100,191, 16, 95, 27,192, 4,115,168, 64,
-134,235,118,202,113,114, 3,255,139,220, 37,192,245,135,141, 64,114,173, 54,192, 45,199, 95, 96,211,193, 3,255,204,119, 84,192,
- 93, 73,130, 64,212,107, 38,192, 58,183,223, 88,137,199, 3,255,208, 76, 67,192, 62,120,111, 64, 14, 89, 85,192, 80,189,196, 81,
-140,183, 3,255, 68,147,238,191,166,230,100, 64,234, 9,136,192,216,215,130, 78, 59,163, 3,255, 30,149,109,191, 40, 18,111, 64,
-171,100,141,192, 37,235,201, 81,199,159, 3,255,144,237,178,191, 25,136,136, 64,121, 1,113,192,117,225,189, 92, 62,173, 3,255,
-214, 82, 66, 63,128,115,152, 64,164, 25, 85,192,241, 16, 27,104,126,183, 3,255,119,155,171,189,138, 40,155, 64,113, 96, 83,192,
-128,254,196,105,238,183, 3,255, 67,138,194, 62,177, 97,138, 64, 75,158,124,192,112, 8,134, 94, 29,170, 3,255,158,106, 94,191,
-167,106, 30, 64,254,240,167,192,229,236,187, 53,105,141, 3,255, 22,114,229,191,193, 96, 20, 64,253,167,162,192, 22,217, 93, 50,
-244,144, 3,255, 45,210,162,191,233,211,224, 63,184, 67,174,192, 69,228,245, 37,244,136, 3,255, 37, 61,152,192,230, 9, 14, 64,
-137,179, 39,192, 85,152,183, 48,226,198, 3,255,232,187,140,192, 6, 96, 62, 64,107,247, 30,192, 7,160, 68, 65, 11,202, 3,255,
-116,134,132,192, 40,130, 40, 64,237,207, 77,192,139,165,149, 57, 30,186, 3,255, 12,129,129,192,231,129,173, 63,159,125,128,192,
- 62,167, 15, 29,123,168, 3,255,254,112,134,192,126,146,207, 62,159, 19,130,192, 15,164,119, 9,117,167, 3,255,189,121,149,192,
-142,192,111, 63, 76, 95, 90,192, 95,154,107, 20,236,180, 3,255, 12, 65,162,192, 11, 84,149,191,172,202, 44,192, 60,145, 47,230,
- 75,197, 3,255, 74,120,165,192, 95, 78,167,190,139, 51, 48,192, 54,143,140,248,244,195, 3,255, 61,161,150,192,107,221, 89,191,
-118,113, 89,192, 40,153, 79,237, 35,182, 3,255, 52, 56, 66,192,206, 40,139, 62, 21,116,160,192, 13,190, 19, 6,121,146, 3,255,
-245,120, 56,192,118,213,154, 63, 81,227,158,192, 81,193, 47, 26,133,147, 3,255,220,104, 22,192,204,221, 40, 63,115,137,170,192,
- 16,205, 89, 14,117,139, 3,255,145,143, 39, 64,190, 49, 94, 64,165, 27,124,192,238, 56,252, 75, 43,170, 3,255,130,168, 6, 64,
-190,132,130, 64, 12, 96,105,192,226, 45, 91, 89,173,176, 3,255, 76,169,222, 63,205,107,104, 64,150,142,136,192, 23, 38,105, 79,
- 33,163, 3,255,137,207,229, 63, 30, 63, 22, 64,207,235,161,192,198, 39,227, 50,127,145, 3,255,239, 11, 14, 64,175,114,191, 63,
-254,208,166,192,133, 48, 81, 33, 87,142, 3,255,239,222, 43, 64,212,226, 11, 64,227, 71,151,192, 33, 58,140, 47, 91,152, 3,255,
- 0,245,124, 64, 27, 32,187, 62, 57, 6,138,192,138, 86,176, 7, 2,162, 3,255, 42, 75,112, 64,228, 42,152, 63, 25, 44,139,192,
- 0, 82,159, 25, 31,161, 3,255,178,218, 82, 64,178,247, 1, 63,211,129,154,192, 35, 72, 4, 11,217,150, 3,255,208,203,104, 63,
-146, 6,113, 63,108, 5,183,192,132, 19,150, 20, 49,131, 3,255, 26, 68,251, 62,111, 38,228, 63,114, 48,178,192,139, 10,158, 38,
-109,134, 3,255,163, 78,149, 61, 65, 25,137, 63,234,102,184,192, 54, 1, 52, 23, 34,130, 3,255, 98,140, 80, 64,169,205,238,191,
- 83, 69,144,192, 70, 71,145,215,173,157, 3,255,177, 39,109, 64,155,213,147,191,238,143,140,192, 57, 81,247,230, 77,160, 3,255,
-100,225, 66, 64,146,191,131,191,152, 18,157,192,178, 66,128,233, 25,149, 3,255,190, 24,220, 63,163,163,202,191,160,244,171,192,
- 99, 37,199,220,196,138, 3,255,227,219,133, 63,172, 47, 17,192, 93,160,169,192,126, 23,164,206, 68,140, 3,255, 46,202,247, 63,
- 23,140, 27,192,116,252,158,192,217, 41, 77,203, 32,147, 3,255, 36,220, 68, 63, 24,143,132,192, 20,105,130,192,163, 16, 66,165,
- 72,167, 3,255, 60,255,185, 63,215,244,108,192,129, 7,138,192,113, 31, 11,175,251,161, 3,255,220, 18, 19, 63,168,186, 98,192,
- 66,136,148,192,155, 12,121,178,241,154, 3,255,131,119,172,187,182,209,162,191,170, 73,183,192,209,255,144,228,251,130, 3,255,
-165,230, 40, 63,246,111, 24,191, 50,150,185,192, 19, 14, 18,243,113,129, 3,255,123, 45, 50,190,213, 16,230,190,160,240,186,192,
-231,251,124,246,109,128, 3,255,221, 22,199,191, 71,211,134,192, 37,161,113,192, 98,222,255,163,157,173, 3,255,171,131, 58,191,
- 57,178,140,192,214,174,115,192,105,240,201,159, 11,173, 3,255,228,119,112,191, 49, 46,115,192,186,222,139,192,152,235,221,172,
-217,160, 3,255,122, 75,254,191, 18, 36, 50,192, 84, 70,152,192,253,211, 46,195, 87,152, 3,255,190,239, 52,192,193,186, 22,192,
-166,240,145,192,167,194, 3,204,108,156, 3,255, 51, 23, 39,192, 14,245, 76,192,105,248,132,192, 29,199,137,186,200,164, 3,255,
-202,137,140,192, 4,234, 33,192,152,117, 60,192,215,159,216,200, 6,192, 3,255, 68,176,115,192, 85, 49, 68,192, 65,173, 79,192,
-178,172, 81,189, 81,185, 3,255,131,173,128,192, 50,170, 14,192,247, 71,105,192, 30,168, 64,207,189,176, 3,255,230, 80, 22,192,
- 50,155,141,191,108, 95,168,192, 3,205, 6,232, 19,141, 3,255, 96,113,194,191,166,184,195,191, 31,160,174,192,205,222,245,222,
-227,136, 3,255,249,244,213,191, 10, 33, 52,191,248, 94,178,192,172,219, 3,241, 48,134, 3,255, 30, 26,167,192, 62, 11, 42, 64,
-199,163,159,190, 45,142, 26, 58,236,248, 3,255, 15,242,157,192,177, 35, 63, 64,242,230,132,191,115,148,134, 65, 39,233, 3,255,
- 58,163,169,192,184,207, 14, 64, 43, 92,148,191,122,140,250, 48,193,230, 3,255,241, 83,184,192, 33,241,117, 63,204, 69,248,190,
- 32,130,245, 20, 22,246, 3,255, 88,178,186,192,180, 33,226, 62, 69,211,165, 62,153,128, 65, 10,196, 6, 3,255,100,194,181,192,
-227, 37,178, 63, 65, 51,191, 62,199,131,217, 29,201, 7, 3,255,140, 68,168,192,162,100, 57, 63, 90, 41, 31, 64, 91,141,195, 15,
-175, 54, 3,255,185,114,173,192,147, 11,162, 63,136,131,237, 63,204,137,106, 27,187, 40, 3,255, 90, 82,178,192,181, 0,168, 62,
-125, 64,231, 63,136,134, 78, 7,175, 39, 3,255,235, 52,185,192,191,185, 83,191, 39,176,252,190,201,129,211,237,241,244, 3,255,
- 95,222,182,192,178, 32,161,190, 48, 92,165,191, 90,131,208,248,211,227, 3,255, 52,119,179,192,223,204,147,191,116,141,160,191,
-169,133,113,230,103,228, 3,255,109, 88, 35, 63,129,186,182, 64,207, 8,152,191, 5, 14,127,124,202,229, 3,255,226, 54, 99, 63,
-172,134,174, 64, 96, 98,250,191,180, 19,244,118, 14,213, 3,255,150,195, 60, 61, 46,121,177, 64,174, 6,245,191, 84, 1,249,120,
- 55,214, 3,255,228,160,145,191,121, 59,181, 64,246,252,123,191, 63,231,214,123, 42,235, 3,255, 29,166,188,191,167,120,181, 64,
- 4,224,165,189, 81,224,253,123,203,253, 3,255, 26,186, 9,191,104,142,186, 64,128, 74,126,190,158,243, 69,127, 88,250, 3,255,
-179,205, 19,191, 33,145,175, 64,102,151,253, 63,125,243,171,119,167, 43, 3,255,163,114,134,190, 81, 94,183, 64, 73,210,157, 63,
- 40,250,240,124, 49, 27, 3,255,253,217,151,191, 90, 89,178, 64,210,246,178, 63, 89,230,146,121,187, 30, 3,255,107,200, 50,192,
- 4, 21,164, 64,143,252, 18,191,229,194,189,111, 58,243, 3,255,219,140, 29,192,164,216,163, 64,163,160,187,191, 2,202,148,111,
- 27,224, 3,255, 8, 63, 76,192,149, 92,152, 64,201, 6,157,191,254,185,184,103, 25,229, 3,255,102, 31,167, 64, 18,113,133, 63,
-122,150, 29,192,214,113,149, 22, 5,202, 3,255,115, 48,157, 64, 74,183, 33, 63, 21,172, 72,192, 50,107,106, 13, 91,187, 3,255,
-250, 48,151, 64,117,157,186, 63,236, 37, 74,192, 41,103,126, 31, 23,187, 3,255,118, 31,148, 64,144, 99, 46, 64, 95,237, 21,192,
-101,101,141, 59,115,205, 3,255, 40,177,150, 64,101,250, 73, 64,104,252,189,191, 13,103,113, 68, 39,223, 3,255, 59, 67,164, 64,
-106,116, 19, 64, 96,145,209,191,204,111,223, 50,255,219, 3,255, 9, 99,168, 64,184,173, 32, 64,129, 16, 27, 63,228,114,189, 54,
-164, 13, 3,255,225, 1,174, 64, 65,167, 12, 64,199, 1, 38,190,149,118, 17, 48,195,252, 3,255,172,156,160, 64, 23,121, 66, 64,
-220,253, 53,188,155,109, 25, 66, 0, 0, 3,255,230,184,106, 64,117, 83,133, 64, 76, 95,243,191,202, 79,251, 90, 77,214, 3,255,
-116,166,101, 64, 67,107,111, 64, 69,233, 47,192, 23, 78,219, 81, 34,196, 3,255,109, 20, 68, 64,202, 9,139, 64,124,255, 29,192,
-138, 66, 22, 95, 6,202, 3,255, 46,138, 12, 64,195,168,156,192, 99,240, 23,192,172, 47, 54,149,252,203, 3,255,110,189,201, 63,
- 48, 28,154,192,180,148, 60,192, 2, 34,195,150,147,191, 3,255, 21, 55, 17, 64,125, 67,140,192,118, 8, 75,192, 61, 49, 50,160,
-221,186, 3,255, 85,126,100, 64,103,211,114,192,187,176, 43,192, 60, 78,241,172, 2,198, 3,255, 29,112,133, 64,168, 45,104,192,
- 95, 44,249,191,154, 90, 96,176, 48,213, 3,255,192,193, 95, 64,221, 5,138,192, 42,219,239,191,181, 76, 61,162,177,214, 3,255,
- 28, 21,134, 64,185,231,130,192,175,210,133, 62,128, 91,182,166, 33, 6, 3,255,128,101,115, 64,106,100,142,192,214,174,205,190,
- 32, 83, 12,159,127,247, 3,255,187,250,142, 64,178,123,113,192, 90,120,242,190, 99, 97,142,173,244,245, 3,255,115, 83,149, 64,
- 25,118, 24,192, 96, 5, 41,192,195,101, 61,204, 36,198, 3,255,236, 97,130, 64,181,248, 34,192, 49,132, 87,192, 17, 89,184,200,
-144,182, 3,255,186,103,144, 64, 91, 9,234,191,150,226, 80,192,152, 98,121,216,152,184, 3,255,208, 74,136,192,231,117,121,192,
- 32,193,133,191,248,162, 42,171,249,232, 3,255, 31, 84,144,192, 24, 19, 87,192, 53, 65,211,191, 74,157,248,182,224,219, 3,255,
- 7, 90,123,192,107,238,121,192,115,227,247,191, 22,170, 1,171,218,213, 3,255,161,112, 54,192, 94, 77,156,192,207,107,196,191,
-198,193, 23,149, 32,223, 3,255, 24, 41, 22,192, 1,197,169,192,191, 68, 84,191, 45,204,105,140,172,237, 3,255, 73,243, 75,192,
- 86, 16,156,192,180,150, 33,191,216,186, 63,149,194,241, 3,255,140,246, 19,192,148, 60,166,192, 11, 70,182, 63,164,205,159,142,
-127, 31, 3,255, 17, 21, 58,192,224,209,160,192,103,100, 88, 63,202,192, 72,146,171, 18, 3,255,151,252, 4,192, 71, 89,174,192,
-215, 93, 38, 63,148,210, 55,137,122, 14, 3,255, 53,176,150,191,238,252,174,192, 37,172,226,191,114,230,199,136, 20,217, 3,255,
-225,105,214,191,211,177,161,192,160,229, 29,192,197,219,175,145, 38,202, 3,255, 62,213, 88,191,193, 70,167,192,212,217, 32,192,
-221,237,232,141,230,200, 3,255,236, 97,130,192,181,248, 34, 64, 49,132, 87, 64,239,166, 72, 55,112, 73, 3,255,186,103,144,192,
- 91, 9,234, 63,150,226, 80, 64,104,157,135, 39,104, 71, 3,255,115, 83,149,192, 25,118, 24, 64, 96, 5, 41, 64, 61,154,195, 51,
-220, 57, 3,255, 29,112,133,192,168, 45,104, 64, 95, 44,249, 63,102,165,160, 79,208, 42, 3,255,192,193, 95,192,221, 5,138, 64,
- 42,219,239, 63, 75,179,195, 93, 79, 41, 3,255, 85,126,100,192,103,211,114, 64,187,176, 43, 64,196,177, 15, 83,254, 57, 3,255,
-110,189,201,191, 48, 28,154, 64,180,148, 60, 64,254,221, 61,105,109, 64, 3,255, 21, 55, 17,192,125, 67,140, 64,118, 8, 75, 64,
-195,206,206, 95, 35, 69, 3,255, 46,138, 12,192,195,168,156, 64, 99,240, 23, 64, 84,208,202,106, 4, 52, 3,255,128,101,115,192,
-106,100,142, 64,214,174,205, 62,224,172,244, 96,129, 8, 3,255,187,250,142,192,178,123,113, 64, 90,120,242, 62,157,158,114, 82,
- 12, 10, 3,255, 28, 21,134,192,185,231,130, 64,175,210,133,190,128,164, 74, 89,223,249, 3,255,225,105,214, 63,211,177,161, 64,
-160,229, 29, 64, 59, 36, 81,110,218, 53, 3,255, 62,213, 88, 63,193, 70,167, 64,212,217, 32, 64, 35, 18, 24,114, 26, 55, 3,255,
- 53,176,150, 63,238,252,174, 64, 37,172,226, 63,142, 25, 57,119,236, 38, 3,255, 24, 41, 22, 64, 1,197,169, 64,191, 68, 84, 63,
-211, 51,151,115, 84, 18, 3,255, 73,243, 75, 64, 86, 16,156, 64,180,150, 33, 63, 40, 69,193,106, 62, 14, 3,255,161,112, 54, 64,
- 94, 77,156, 64,208,107,196, 63, 58, 62,233,106,224, 32, 3,255, 31, 84,144, 64, 24, 19, 87, 64, 53, 65,211, 63,182, 98, 8, 73,
- 32, 36, 3,255, 7, 90,123, 64,107,238,121, 64,115,227,247, 63,234, 85,255, 84, 38, 42, 3,255,208, 74,136, 64,231,117,121, 64,
- 32,193,133, 63, 8, 93,214, 84, 7, 23, 3,255, 17, 21, 58, 64,224,209,160, 64,103,100, 88,191, 54, 63,184,109, 85,237, 3,255,
-151,252, 4, 64, 71, 89,174, 64,215, 93, 38,191,108, 45,201,118,134,241, 3,255,140,246, 19, 64,148, 60,166, 64, 11, 70,182,191,
- 92, 50, 97,113,129,224, 3,255, 95,222,182, 64,178, 32,161, 62, 48, 92,165, 63,166,124, 48, 7, 45, 28, 3,255, 52,119,179, 64,
-223,204,147, 63,116,141,160, 63, 87,122,143, 25,153, 27, 3,255,235, 52,185, 64,191,185, 83, 63, 39,176,252, 62, 55,126, 45, 18,
- 15, 11, 3,255, 88,178,186, 64,180, 33,226,190, 69,211,165,190,103,127,191,245, 60,249, 3,255,100,194,181, 64,227, 37,178,191,
- 65, 51,191,190, 57,124, 39,226, 55,248, 3,255,241, 83,184, 64, 33,241,117,191,204, 69,248, 62,224,125, 11,235,234, 9, 3,255,
- 15,242,157, 64,177, 35, 63,192,242,230,132, 63,141,107,122,190,217, 22, 3,255, 58,163,169, 64,184,207, 14,192, 43, 92,148, 63,
-134,115, 6,207, 63, 25, 3,255, 30, 26,167, 64, 62, 11, 42,192,199,163,159, 62,211,113,230,197, 20, 7, 3,255,185,114,173, 64,
-147, 11,162,191,136,131,237,191, 52,118,150,228, 69,215, 3,255, 90, 82,178, 64,181, 0,168,190,125, 64,231,191,120,121,178,248,
- 81,216, 3,255,140, 68,168, 64,162,100, 57,191, 90, 41, 31,192,165,114, 61,240, 81,201, 3,255,219,140, 29, 64,164,216,163,192,
-163,160,187, 63,254, 53,108,144,229, 31, 3,255, 8, 63, 76, 64,149, 92,152,192,201, 6,157, 63, 2, 70, 72,152,231, 26, 3,255,
-107,200, 50, 64, 4, 21,164,192,143,252, 18, 63, 27, 61, 67,144,198, 12, 3,255, 29,166,188, 63,167,120,181,192, 4,224,165, 61,
-175, 31, 3,132, 53, 2, 3,255, 26,186, 9, 63,104,142,186,192,128, 74,126, 62, 98, 12,187,128,168, 5, 3,255,228,160,145, 63,
-121, 59,181,192,246,252,123, 63,193, 24, 42,132,214, 20, 3,255,226, 54, 99,191,172,134,174,192, 96, 98,250, 63, 76,236, 12,137,
-242, 42, 3,255,150,195, 60,189, 46,121,177,192,174, 6,245, 63,172,254, 7,135,201, 41, 3,255,109, 88, 35,191,129,186,182,192,
-207, 8,152, 63,251,241,129,131, 54, 26, 3,255,163,114,134, 62, 81, 94,183,192, 73,210,157,191,216, 5, 16,131,207,228, 3,255,
-253,217,151, 63, 90, 89,178,192,210,246,178,191,167, 25,110,134, 69,225, 3,255,179,205, 19, 63, 33,145,175,192,102,151,253,191,
-131, 12, 85,136, 89,212, 3,255,116,166,101,192, 67,107,111,192, 69,233, 47, 64,233,177, 37,174,222, 59, 3,255,109, 20, 68,192,
-202, 9,139,192,124,255, 29, 64,118,189,234,160,250, 53, 3,255,230,184,106,192,117, 83,133,192, 76, 95,243, 63, 54,176, 5,165,
-179, 41, 3,255, 40,177,150,192,101,250, 73,192,104,252,189, 63,243,152,143,187,217, 32, 3,255, 59, 67,164,192,106,116, 19,192,
- 96,145,209, 63, 52,144, 33,205, 1, 36, 3,255,118, 31,148,192,144, 99, 46,192, 95,237, 21, 64,155,154,115,196,141, 50, 3,255,
-115, 48,157,192, 74,183, 33,191, 21,172, 72, 64,206,148,150,242,165, 68, 3,255,250, 48,151,192,117,157,186,191,236, 37, 74, 64,
-215,152,130,224,233, 68, 3,255,102, 31,167,192, 18,113,133,191,122,150, 29, 64, 42,142,107,233,251, 53, 3,255,225, 1,174,192,
- 65,167, 12,192,199, 1, 38, 62,107,137,239,207, 61, 3, 3,255,172,156,160,192, 23,121, 66,192,220,253, 53, 60,101,146,231,189,
- 0, 0, 3,255, 9, 99,168,192,184,173, 32,192,129, 16, 27,191, 28,141, 67,201, 92,242, 3,255,220, 18, 19,191,168,186, 98, 64,
- 66,136,148, 64,101,243,135, 77, 15,101, 3,255, 36,220, 68,191, 24,143,132, 64, 20,105,130, 64, 93,239,190, 90,184, 88, 3,255,
- 60,255,185,191,215,244,108, 64,129, 7,138, 64,143,224,245, 80, 5, 94, 3,255, 46,202,247,191, 23,140, 27, 64,116,252,158, 64,
- 39,214,179, 52,224,108, 3,255,190, 24,220,191,163,163,202, 63,160,244,171, 64,157,218, 57, 35, 60,117, 3,255,227,219,133,191,
-172, 47, 17, 64, 93,160,169, 64,130,232, 92, 49,188,115, 3,255,123, 45, 50, 62,213, 16,230, 62,160,240,186, 64, 25, 4,132, 9,
-147,127, 3,255,131,119,172, 59,182,209,162, 63,170, 73,183, 64, 47, 0,112, 27, 5,125, 3,255,165,230, 40,191,246,111, 24, 63,
- 50,150,185, 64,237,241,238, 12,143,126, 3,255,100,225, 66,192,146,191,131, 63,152, 18,157, 64, 78,189,128, 22,231,106, 3,255,
- 98,140, 80,192,169,205,238, 63, 83, 69,144, 64,186,184,111, 40, 83, 98, 3,255,177, 39,109,192,154,213,147, 63,239,143,140, 64,
-199,174, 9, 25,179, 95, 3,255,131,173,128, 64, 50,170, 14, 64,247, 71,105, 64,226, 87,192, 48, 67, 79, 3,255,202,137,140, 64,
- 4,234, 33, 64,152,117, 60, 64, 41, 96, 40, 55,250, 63, 3,255, 68,176,115, 64, 85, 49, 68, 64, 65,173, 79, 64, 78, 83,175, 66,
-175, 70, 3,255, 51, 23, 39, 64, 14,245, 76, 64,105,248,132, 64,227, 56,119, 69, 56, 91, 3,255,122, 75,254, 63, 17, 36, 50, 64,
- 83, 70,152, 64, 3, 44,210, 60,169,103, 3,255,190,239, 52, 64,193,186, 22, 64,166,240,145, 64, 89, 61,253, 51,148, 99, 3,255,
-249,244,213, 63, 10, 33, 52, 63,248, 94,178, 64, 84, 36,253, 14,208,121, 3,255,230, 80, 22, 64, 50,155,141, 63,108, 95,168, 64,
-253, 50,250, 23,237,114, 3,255, 96,113,194, 63,166,184,195, 63, 31,160,174, 64, 51, 33, 11, 33, 29,119, 3,255,228,119,112, 63,
- 49, 46,115, 64,186,222,139, 64,104, 20, 35, 83, 40, 95, 3,255,221, 22,199, 63, 71,211,134, 64, 37,161,113, 64,158, 33, 1, 92,
- 99, 82, 3,255,170,131, 58, 63, 58,178,140, 64,213,174,115, 64,151, 15, 55, 96,245, 82, 3,255,116,134,132, 64, 40,130, 40,192,
-237,207, 77, 64,117, 90,107,198,226, 69, 3,255,232,187,140, 64, 6, 96, 62,192,107,247, 30, 64,249, 95,188,190,245, 53, 3,255,
- 37, 61,152, 64,230, 9, 14,192,137,179, 39, 64,171,103, 73,207, 30, 57, 3,255,189,121,149, 64,142,192,111,191, 76, 95, 90, 64,
-161,101,149,235, 20, 75, 3,255,254,112,134, 64,126,146,207,190,159, 19,130, 64,241, 91,137,246,139, 88, 3,255, 12,129,129, 64,
-231,129,173,191,159,125,128, 64,194, 88,241,226,133, 87, 3,255,220,104, 22, 64,204,221, 40,191,115,137,170, 64,240, 50,167,241,
-139,116, 3,255,245,120, 56, 64,118,213,154,191, 81,227,158, 64,175, 62,209,229,123,108, 3,255, 52, 56, 66, 64,206, 40,139,190,
- 21,116,160, 64,243, 65,237,249,135,109, 3,255, 61,161,150, 64,107,221, 89, 63,118,113, 89, 64,216,102,177, 18,221, 73, 3,255,
- 74,120,165, 64, 95, 78,167, 62,139, 51, 48, 64,202,112,116, 7, 12, 60, 3,255, 12, 65,162, 64, 11, 84,149, 63,172,202, 44, 64,
-196,110,209, 25,181, 58, 3,255, 67,138,194,190,177, 97,138,192, 75,158,124, 64,144,247,122,161,227, 85, 3,255,214, 82, 66,191,
-128,115,152,192,164, 25, 85, 64, 15,239,229,151,130, 72, 3,255,119,155,171, 61,138, 40,155,192,113, 96, 83, 64,128, 1, 60,150,
- 18, 72, 3,255,144,237,178, 63, 25,136,136,192,121, 1,113, 64,139, 30, 67,163,194, 82, 3,255, 68,147,238, 63,166,230,100,192,
-234, 9,136, 64, 40, 40,126,177,197, 92, 3,255, 30,149,109, 63, 40, 18,111,192,171,100,141, 64,219, 20, 55,174, 57, 96, 3,255,
- 45,210,162, 63,233,211,224,191,184, 67,174, 64,187, 27, 11,218, 12,119, 3,255,158,106, 94, 63,167,106, 30,192,254,240,167, 64,
- 27, 19, 69,202,151,114, 3,255, 22,114,229, 63,193, 96, 20,192,253,167,162, 64,234, 38,163,205, 12,111, 3,255,208, 76, 67, 64,
- 62,120,111,192, 14, 89, 85, 64,176, 66, 60,174,116, 72, 3,255,139,220, 37, 64,245,135,141,192,114,173, 54, 64,211, 56,161,159,
- 45, 62, 3,255,204,119, 84, 64, 93, 73,130,192,212,107, 38, 64,198, 72, 33,167,119, 56, 3,255,178,218, 82,192,178,247, 1,191,
-211,129,154, 64,221,183,252,244, 39,105, 3,255, 0,245,124,192, 27, 32,187,190, 57, 6,138, 64,118,169, 80,248,254, 93, 3,255,
- 42, 75,112,192,228, 42,152,191, 25, 44,139, 64, 0,174, 97,230,225, 94, 3,255,239,222, 43,192,212,226, 11,192,227, 71,151, 64,
-223,197,116,208,165,103, 3,255,137,207,229,191, 30, 63, 22,192,207,235,161, 64, 58,216, 29,205,129,110, 3,255,239, 11, 14,192,
-175,114,191,191,254,208,166, 64,123,207,175,222,169,113, 3,255,163, 78,149,189, 65, 25,137,191,234,102,184, 64,202,254,204,232,
-222,125, 3,255,208,203,104,191,146, 6,113,191,108, 5,183, 64,124,236,106,235,207,124, 3,255, 26, 68,251,190,111, 38,228,191,
-114, 48,178, 64,117,245, 98,217,147,121, 3,255, 76,169,222,191,205,107,104,192,150,142,136, 64,233,217,151,176,223, 92, 3,255,
-145,143, 39,192,190, 49, 94,192,165, 27,124, 64, 18,199, 4,180,213, 85, 3,255,130,168, 6,192,190,132,130,192, 12, 96,105, 64,
- 30,210,165,166, 83, 79, 3,255, 68, 65, 84, 65, 44, 1, 0, 0, 72,194,152, 2, 21, 1, 0, 0, 5, 0, 0, 0, 3, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40,112,155, 2, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 90, 0, 0, 40,112,155, 2, 54, 0, 0, 0,128, 7, 0, 0, 0, 0, 0, 0,
-162, 0, 0, 0, 0, 0, 35, 0, 42, 0, 0, 0,162, 0, 0, 0, 0, 0, 35, 0, 12, 0, 0, 0,163, 0, 0, 0, 0, 0, 35, 0,
- 42, 0, 0, 0,163, 0, 0, 0, 0, 0, 35, 0, 1, 0, 0, 0,164, 0, 0, 0, 0, 0, 35, 0, 43, 0, 0, 0,164, 0, 0, 0,
- 0, 0, 35, 0, 12, 0, 0, 0,165, 0, 0, 0, 0, 0, 35, 0, 43, 0, 0, 0,165, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0,
-166, 0, 0, 0, 0, 0, 35, 0, 44, 0, 0, 0,166, 0, 0, 0, 0, 0, 35, 0, 13, 0, 0, 0,167, 0, 0, 0, 0, 0, 35, 0,
- 44, 0, 0, 0,167, 0, 0, 0, 0, 0, 35, 0, 2, 0, 0, 0,168, 0, 0, 0, 0, 0, 35, 0, 45, 0, 0, 0,168, 0, 0, 0,
- 0, 0, 35, 0, 13, 0, 0, 0,169, 0, 0, 0, 0, 0, 35, 0, 45, 0, 0, 0,169, 0, 0, 0, 0, 0, 35, 0, 1, 0, 0, 0,
-170, 0, 0, 0, 0, 0, 35, 0, 46, 0, 0, 0,170, 0, 0, 0, 0, 0, 35, 0, 14, 0, 0, 0,171, 0, 0, 0, 0, 0, 35, 0,
- 46, 0, 0, 0,171, 0, 0, 0, 0, 0, 35, 0, 2, 0, 0, 0,172, 0, 0, 0, 0, 0, 35, 0, 47, 0, 0, 0,172, 0, 0, 0,
- 0, 0, 35, 0, 14, 0, 0, 0,173, 0, 0, 0, 0, 0, 35, 0, 47, 0, 0, 0,173, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0,
-174, 0, 0, 0, 0, 0, 35, 0, 48, 0, 0, 0,174, 0, 0, 0, 0, 0, 35, 0, 15, 0, 0, 0,175, 0, 0, 0, 0, 0, 35, 0,
- 48, 0, 0, 0,175, 0, 0, 0, 0, 0, 35, 0, 5, 0, 0, 0,176, 0, 0, 0, 0, 0, 35, 0, 49, 0, 0, 0,176, 0, 0, 0,
- 0, 0, 35, 0, 15, 0, 0, 0,177, 0, 0, 0, 0, 0, 35, 0, 49, 0, 0, 0,177, 0, 0, 0, 0, 0, 35, 0, 1, 0, 0, 0,
-178, 0, 0, 0, 0, 0, 35, 0, 50, 0, 0, 0,178, 0, 0, 0, 0, 0, 35, 0, 16, 0, 0, 0,179, 0, 0, 0, 0, 0, 35, 0,
- 50, 0, 0, 0,179, 0, 0, 0, 0, 0, 35, 0, 5, 0, 0, 0,180, 0, 0, 0, 0, 0, 35, 0, 51, 0, 0, 0,180, 0, 0, 0,
- 0, 0, 35, 0, 16, 0, 0, 0,181, 0, 0, 0, 0, 0, 35, 0, 51, 0, 0, 0,181, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0,
-182, 0, 0, 0, 0, 0, 35, 0, 52, 0, 0, 0,182, 0, 0, 0, 0, 0, 35, 0, 17, 0, 0, 0,183, 0, 0, 0, 0, 0, 35, 0,
- 52, 0, 0, 0,183, 0, 0, 0, 0, 0, 35, 0, 3, 0, 0, 0,184, 0, 0, 0, 0, 0, 35, 0, 53, 0, 0, 0,184, 0, 0, 0,
- 0, 0, 35, 0, 17, 0, 0, 0,185, 0, 0, 0, 0, 0, 35, 0, 53, 0, 0, 0,185, 0, 0, 0, 0, 0, 35, 0, 2, 0, 0, 0,
-186, 0, 0, 0, 0, 0, 35, 0, 54, 0, 0, 0,186, 0, 0, 0, 0, 0, 35, 0, 18, 0, 0, 0,187, 0, 0, 0, 0, 0, 35, 0,
- 54, 0, 0, 0,187, 0, 0, 0, 0, 0, 35, 0, 3, 0, 0, 0,188, 0, 0, 0, 0, 0, 35, 0, 55, 0, 0, 0,188, 0, 0, 0,
- 0, 0, 35, 0, 18, 0, 0, 0,189, 0, 0, 0, 0, 0, 35, 0, 55, 0, 0, 0,189, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0,
-190, 0, 0, 0, 0, 0, 35, 0, 56, 0, 0, 0,190, 0, 0, 0, 0, 0, 35, 0, 19, 0, 0, 0,191, 0, 0, 0, 0, 0, 35, 0,
- 56, 0, 0, 0,191, 0, 0, 0, 0, 0, 35, 0, 4, 0, 0, 0,192, 0, 0, 0, 0, 0, 35, 0, 57, 0, 0, 0,192, 0, 0, 0,
- 0, 0, 35, 0, 19, 0, 0, 0,193, 0, 0, 0, 0, 0, 35, 0, 57, 0, 0, 0,193, 0, 0, 0, 0, 0, 35, 0, 3, 0, 0, 0,
-194, 0, 0, 0, 0, 0, 35, 0, 58, 0, 0, 0,194, 0, 0, 0, 0, 0, 35, 0, 20, 0, 0, 0,195, 0, 0, 0, 0, 0, 35, 0,
- 58, 0, 0, 0,195, 0, 0, 0, 0, 0, 35, 0, 4, 0, 0, 0,196, 0, 0, 0, 0, 0, 35, 0, 59, 0, 0, 0,196, 0, 0, 0,
- 0, 0, 35, 0, 20, 0, 0, 0,197, 0, 0, 0, 0, 0, 35, 0, 59, 0, 0, 0,197, 0, 0, 0, 0, 0, 35, 0, 4, 0, 0, 0,
-198, 0, 0, 0, 0, 0, 35, 0, 60, 0, 0, 0,198, 0, 0, 0, 0, 0, 35, 0, 21, 0, 0, 0,199, 0, 0, 0, 0, 0, 35, 0,
- 60, 0, 0, 0,199, 0, 0, 0, 0, 0, 35, 0, 5, 0, 0, 0,200, 0, 0, 0, 0, 0, 35, 0, 61, 0, 0, 0,200, 0, 0, 0,
- 0, 0, 35, 0, 21, 0, 0, 0,201, 0, 0, 0, 0, 0, 35, 0, 61, 0, 0, 0,201, 0, 0, 0, 0, 0, 35, 0, 5, 0, 0, 0,
-202, 0, 0, 0, 0, 0, 35, 0, 62, 0, 0, 0,202, 0, 0, 0, 0, 0, 35, 0, 22, 0, 0, 0,203, 0, 0, 0, 0, 0, 35, 0,
- 62, 0, 0, 0,203, 0, 0, 0, 0, 0, 35, 0, 10, 0, 0, 0,204, 0, 0, 0, 0, 0, 35, 0, 63, 0, 0, 0,204, 0, 0, 0,
- 0, 0, 35, 0, 22, 0, 0, 0,205, 0, 0, 0, 0, 0, 35, 0, 63, 0, 0, 0,205, 0, 0, 0, 0, 0, 35, 0, 1, 0, 0, 0,
-206, 0, 0, 0, 0, 0, 35, 0, 64, 0, 0, 0,206, 0, 0, 0, 0, 0, 35, 0, 23, 0, 0, 0,207, 0, 0, 0, 0, 0, 35, 0,
- 64, 0, 0, 0,207, 0, 0, 0, 0, 0, 35, 0, 10, 0, 0, 0,208, 0, 0, 0, 0, 0, 35, 0, 65, 0, 0, 0,208, 0, 0, 0,
- 0, 0, 35, 0, 23, 0, 0, 0,209, 0, 0, 0, 0, 0, 35, 0, 65, 0, 0, 0,209, 0, 0, 0, 0, 0, 35, 0, 1, 0, 0, 0,
-210, 0, 0, 0, 0, 0, 35, 0, 66, 0, 0, 0,210, 0, 0, 0, 0, 0, 35, 0, 24, 0, 0, 0,211, 0, 0, 0, 0, 0, 35, 0,
- 66, 0, 0, 0,211, 0, 0, 0, 0, 0, 35, 0, 6, 0, 0, 0,212, 0, 0, 0, 0, 0, 35, 0, 67, 0, 0, 0,212, 0, 0, 0,
- 0, 0, 35, 0, 24, 0, 0, 0,213, 0, 0, 0, 0, 0, 35, 0, 67, 0, 0, 0,213, 0, 0, 0, 0, 0, 35, 0, 2, 0, 0, 0,
-214, 0, 0, 0, 0, 0, 35, 0, 68, 0, 0, 0,214, 0, 0, 0, 0, 0, 35, 0, 25, 0, 0, 0,215, 0, 0, 0, 0, 0, 35, 0,
- 68, 0, 0, 0,215, 0, 0, 0, 0, 0, 35, 0, 6, 0, 0, 0,216, 0, 0, 0, 0, 0, 35, 0, 69, 0, 0, 0,216, 0, 0, 0,
- 0, 0, 35, 0, 25, 0, 0, 0,217, 0, 0, 0, 0, 0, 35, 0, 69, 0, 0, 0,217, 0, 0, 0, 0, 0, 35, 0, 2, 0, 0, 0,
-218, 0, 0, 0, 0, 0, 35, 0, 70, 0, 0, 0,218, 0, 0, 0, 0, 0, 35, 0, 26, 0, 0, 0,219, 0, 0, 0, 0, 0, 35, 0,
- 70, 0, 0, 0,219, 0, 0, 0, 0, 0, 35, 0, 7, 0, 0, 0,220, 0, 0, 0, 0, 0, 35, 0, 71, 0, 0, 0,220, 0, 0, 0,
- 0, 0, 35, 0, 26, 0, 0, 0,221, 0, 0, 0, 0, 0, 35, 0, 71, 0, 0, 0,221, 0, 0, 0, 0, 0, 35, 0, 3, 0, 0, 0,
-222, 0, 0, 0, 0, 0, 35, 0, 72, 0, 0, 0,222, 0, 0, 0, 0, 0, 35, 0, 27, 0, 0, 0,223, 0, 0, 0, 0, 0, 35, 0,
- 72, 0, 0, 0,223, 0, 0, 0, 0, 0, 35, 0, 7, 0, 0, 0,224, 0, 0, 0, 0, 0, 35, 0, 73, 0, 0, 0,224, 0, 0, 0,
- 0, 0, 35, 0, 27, 0, 0, 0,225, 0, 0, 0, 0, 0, 35, 0, 73, 0, 0, 0,225, 0, 0, 0, 0, 0, 35, 0, 3, 0, 0, 0,
-226, 0, 0, 0, 0, 0, 35, 0, 74, 0, 0, 0,226, 0, 0, 0, 0, 0, 35, 0, 28, 0, 0, 0,227, 0, 0, 0, 0, 0, 35, 0,
- 74, 0, 0, 0,227, 0, 0, 0, 0, 0, 35, 0, 8, 0, 0, 0,228, 0, 0, 0, 0, 0, 35, 0, 75, 0, 0, 0,228, 0, 0, 0,
- 0, 0, 35, 0, 28, 0, 0, 0,229, 0, 0, 0, 0, 0, 35, 0, 75, 0, 0, 0,229, 0, 0, 0, 0, 0, 35, 0, 4, 0, 0, 0,
-230, 0, 0, 0, 0, 0, 35, 0, 76, 0, 0, 0,230, 0, 0, 0, 0, 0, 35, 0, 29, 0, 0, 0,231, 0, 0, 0, 0, 0, 35, 0,
- 76, 0, 0, 0,231, 0, 0, 0, 0, 0, 35, 0, 8, 0, 0, 0,232, 0, 0, 0, 0, 0, 35, 0, 77, 0, 0, 0,232, 0, 0, 0,
- 0, 0, 35, 0, 29, 0, 0, 0,233, 0, 0, 0, 0, 0, 35, 0, 77, 0, 0, 0,233, 0, 0, 0, 0, 0, 35, 0, 4, 0, 0, 0,
-234, 0, 0, 0, 0, 0, 35, 0, 78, 0, 0, 0,234, 0, 0, 0, 0, 0, 35, 0, 30, 0, 0, 0,235, 0, 0, 0, 0, 0, 35, 0,
- 78, 0, 0, 0,235, 0, 0, 0, 0, 0, 35, 0, 9, 0, 0, 0,236, 0, 0, 0, 0, 0, 35, 0, 79, 0, 0, 0,236, 0, 0, 0,
- 0, 0, 35, 0, 30, 0, 0, 0,237, 0, 0, 0, 0, 0, 35, 0, 79, 0, 0, 0,237, 0, 0, 0, 0, 0, 35, 0, 5, 0, 0, 0,
-238, 0, 0, 0, 0, 0, 35, 0, 80, 0, 0, 0,238, 0, 0, 0, 0, 0, 35, 0, 31, 0, 0, 0,239, 0, 0, 0, 0, 0, 35, 0,
- 80, 0, 0, 0,239, 0, 0, 0, 0, 0, 35, 0, 9, 0, 0, 0,240, 0, 0, 0, 0, 0, 35, 0, 81, 0, 0, 0,240, 0, 0, 0,
- 0, 0, 35, 0, 31, 0, 0, 0,241, 0, 0, 0, 0, 0, 35, 0, 81, 0, 0, 0,241, 0, 0, 0, 0, 0, 35, 0, 6, 0, 0, 0,
-242, 0, 0, 0, 0, 0, 35, 0, 82, 0, 0, 0,242, 0, 0, 0, 0, 0, 35, 0, 32, 0, 0, 0,243, 0, 0, 0, 0, 0, 35, 0,
- 82, 0, 0, 0,243, 0, 0, 0, 0, 0, 35, 0, 10, 0, 0, 0,244, 0, 0, 0, 0, 0, 35, 0, 83, 0, 0, 0,244, 0, 0, 0,
- 0, 0, 35, 0, 32, 0, 0, 0,245, 0, 0, 0, 0, 0, 35, 0, 83, 0, 0, 0,245, 0, 0, 0, 0, 0, 35, 0, 6, 0, 0, 0,
-246, 0, 0, 0, 0, 0, 35, 0, 84, 0, 0, 0,246, 0, 0, 0, 0, 0, 35, 0, 33, 0, 0, 0,247, 0, 0, 0, 0, 0, 35, 0,
- 84, 0, 0, 0,247, 0, 0, 0, 0, 0, 35, 0, 7, 0, 0, 0,248, 0, 0, 0, 0, 0, 35, 0, 85, 0, 0, 0,248, 0, 0, 0,
- 0, 0, 35, 0, 33, 0, 0, 0,249, 0, 0, 0, 0, 0, 35, 0, 85, 0, 0, 0,249, 0, 0, 0, 0, 0, 35, 0, 7, 0, 0, 0,
-250, 0, 0, 0, 0, 0, 35, 0, 86, 0, 0, 0,250, 0, 0, 0, 0, 0, 35, 0, 34, 0, 0, 0,251, 0, 0, 0, 0, 0, 35, 0,
- 86, 0, 0, 0,251, 0, 0, 0, 0, 0, 35, 0, 8, 0, 0, 0,252, 0, 0, 0, 0, 0, 35, 0, 87, 0, 0, 0,252, 0, 0, 0,
- 0, 0, 35, 0, 34, 0, 0, 0,253, 0, 0, 0, 0, 0, 35, 0, 87, 0, 0, 0,253, 0, 0, 0, 0, 0, 35, 0, 8, 0, 0, 0,
-254, 0, 0, 0, 0, 0, 35, 0, 88, 0, 0, 0,254, 0, 0, 0, 0, 0, 35, 0, 35, 0, 0, 0,255, 0, 0, 0, 0, 0, 35, 0,
- 88, 0, 0, 0,255, 0, 0, 0, 0, 0, 35, 0, 9, 0, 0, 0, 0, 1, 0, 0, 0, 0, 35, 0, 89, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 35, 0, 35, 0, 0, 0, 1, 1, 0, 0, 0, 0, 35, 0, 89, 0, 0, 0, 1, 1, 0, 0, 0, 0, 35, 0, 9, 0, 0, 0,
- 2, 1, 0, 0, 0, 0, 35, 0, 90, 0, 0, 0, 2, 1, 0, 0, 0, 0, 35, 0, 36, 0, 0, 0, 3, 1, 0, 0, 0, 0, 35, 0,
- 90, 0, 0, 0, 3, 1, 0, 0, 0, 0, 35, 0, 10, 0, 0, 0, 4, 1, 0, 0, 0, 0, 35, 0, 91, 0, 0, 0, 4, 1, 0, 0,
- 0, 0, 35, 0, 36, 0, 0, 0, 5, 1, 0, 0, 0, 0, 35, 0, 91, 0, 0, 0, 5, 1, 0, 0, 0, 0, 35, 0, 10, 0, 0, 0,
- 6, 1, 0, 0, 0, 0, 35, 0, 92, 0, 0, 0, 6, 1, 0, 0, 0, 0, 35, 0, 37, 0, 0, 0, 7, 1, 0, 0, 0, 0, 35, 0,
- 92, 0, 0, 0, 7, 1, 0, 0, 0, 0, 35, 0, 11, 0, 0, 0, 8, 1, 0, 0, 0, 0, 35, 0, 93, 0, 0, 0, 8, 1, 0, 0,
- 0, 0, 35, 0, 37, 0, 0, 0, 9, 1, 0, 0, 0, 0, 35, 0, 93, 0, 0, 0, 9, 1, 0, 0, 0, 0, 35, 0, 6, 0, 0, 0,
- 10, 1, 0, 0, 0, 0, 35, 0, 94, 0, 0, 0, 10, 1, 0, 0, 0, 0, 35, 0, 38, 0, 0, 0, 11, 1, 0, 0, 0, 0, 35, 0,
- 94, 0, 0, 0, 11, 1, 0, 0, 0, 0, 35, 0, 11, 0, 0, 0, 12, 1, 0, 0, 0, 0, 35, 0, 95, 0, 0, 0, 12, 1, 0, 0,
- 0, 0, 35, 0, 38, 0, 0, 0, 13, 1, 0, 0, 0, 0, 35, 0, 95, 0, 0, 0, 13, 1, 0, 0, 0, 0, 35, 0, 7, 0, 0, 0,
- 14, 1, 0, 0, 0, 0, 35, 0, 96, 0, 0, 0, 14, 1, 0, 0, 0, 0, 35, 0, 39, 0, 0, 0, 15, 1, 0, 0, 0, 0, 35, 0,
- 96, 0, 0, 0, 15, 1, 0, 0, 0, 0, 35, 0, 11, 0, 0, 0, 16, 1, 0, 0, 0, 0, 35, 0, 97, 0, 0, 0, 16, 1, 0, 0,
- 0, 0, 35, 0, 39, 0, 0, 0, 17, 1, 0, 0, 0, 0, 35, 0, 97, 0, 0, 0, 17, 1, 0, 0, 0, 0, 35, 0, 8, 0, 0, 0,
- 18, 1, 0, 0, 0, 0, 35, 0, 98, 0, 0, 0, 18, 1, 0, 0, 0, 0, 35, 0, 40, 0, 0, 0, 19, 1, 0, 0, 0, 0, 35, 0,
- 98, 0, 0, 0, 19, 1, 0, 0, 0, 0, 35, 0, 11, 0, 0, 0, 20, 1, 0, 0, 0, 0, 35, 0, 99, 0, 0, 0, 20, 1, 0, 0,
- 0, 0, 35, 0, 40, 0, 0, 0, 21, 1, 0, 0, 0, 0, 35, 0, 99, 0, 0, 0, 21, 1, 0, 0, 0, 0, 35, 0, 9, 0, 0, 0,
- 22, 1, 0, 0, 0, 0, 35, 0,100, 0, 0, 0, 22, 1, 0, 0, 0, 0, 35, 0, 41, 0, 0, 0, 23, 1, 0, 0, 0, 0, 35, 0,
-100, 0, 0, 0, 23, 1, 0, 0, 0, 0, 35, 0, 11, 0, 0, 0, 24, 1, 0, 0, 0, 0, 35, 0,101, 0, 0, 0, 24, 1, 0, 0,
- 0, 0, 35, 0, 41, 0, 0, 0, 25, 1, 0, 0, 0, 0, 35, 0,101, 0, 0, 0, 25, 1, 0, 0, 0, 0, 35, 0, 12, 0, 0, 0,
- 26, 1, 0, 0, 0, 0, 35, 0,102, 0, 0, 0, 26, 1, 0, 0, 0, 0, 35, 0, 14, 0, 0, 0, 27, 1, 0, 0, 0, 0, 35, 0,
-102, 0, 0, 0, 27, 1, 0, 0, 0, 0, 35, 0, 12, 0, 0, 0, 28, 1, 0, 0, 0, 0, 35, 0,103, 0, 0, 0, 28, 1, 0, 0,
- 0, 0, 35, 0, 13, 0, 0, 0, 29, 1, 0, 0, 0, 0, 35, 0,103, 0, 0, 0, 29, 1, 0, 0, 0, 0, 35, 0, 13, 0, 0, 0,
- 30, 1, 0, 0, 0, 0, 35, 0,104, 0, 0, 0, 30, 1, 0, 0, 0, 0, 35, 0, 14, 0, 0, 0, 31, 1, 0, 0, 0, 0, 35, 0,
-104, 0, 0, 0, 31, 1, 0, 0, 0, 0, 35, 0, 12, 0, 0, 0, 32, 1, 0, 0, 0, 0, 35, 0,105, 0, 0, 0, 32, 1, 0, 0,
- 0, 0, 35, 0, 16, 0, 0, 0, 33, 1, 0, 0, 0, 0, 35, 0,105, 0, 0, 0, 33, 1, 0, 0, 0, 0, 35, 0, 12, 0, 0, 0,
- 34, 1, 0, 0, 0, 0, 35, 0,106, 0, 0, 0, 34, 1, 0, 0, 0, 0, 35, 0, 15, 0, 0, 0, 35, 1, 0, 0, 0, 0, 35, 0,
-106, 0, 0, 0, 35, 1, 0, 0, 0, 0, 35, 0, 15, 0, 0, 0, 36, 1, 0, 0, 0, 0, 35, 0,107, 0, 0, 0, 36, 1, 0, 0,
- 0, 0, 35, 0, 16, 0, 0, 0, 37, 1, 0, 0, 0, 0, 35, 0,107, 0, 0, 0, 37, 1, 0, 0, 0, 0, 35, 0, 13, 0, 0, 0,
- 38, 1, 0, 0, 0, 0, 35, 0,108, 0, 0, 0, 38, 1, 0, 0, 0, 0, 35, 0, 18, 0, 0, 0, 39, 1, 0, 0, 0, 0, 35, 0,
-108, 0, 0, 0, 39, 1, 0, 0, 0, 0, 35, 0, 13, 0, 0, 0, 40, 1, 0, 0, 0, 0, 35, 0,109, 0, 0, 0, 40, 1, 0, 0,
- 0, 0, 35, 0, 17, 0, 0, 0, 41, 1, 0, 0, 0, 0, 35, 0,109, 0, 0, 0, 41, 1, 0, 0, 0, 0, 35, 0, 17, 0, 0, 0,
- 42, 1, 0, 0, 0, 0, 35, 0,110, 0, 0, 0, 42, 1, 0, 0, 0, 0, 35, 0, 18, 0, 0, 0, 43, 1, 0, 0, 0, 0, 35, 0,
-110, 0, 0, 0, 43, 1, 0, 0, 0, 0, 35, 0, 17, 0, 0, 0, 44, 1, 0, 0, 0, 0, 35, 0,111, 0, 0, 0, 44, 1, 0, 0,
- 0, 0, 35, 0, 20, 0, 0, 0, 45, 1, 0, 0, 0, 0, 35, 0,111, 0, 0, 0, 45, 1, 0, 0, 0, 0, 35, 0, 17, 0, 0, 0,
- 46, 1, 0, 0, 0, 0, 35, 0,112, 0, 0, 0, 46, 1, 0, 0, 0, 0, 35, 0, 19, 0, 0, 0, 47, 1, 0, 0, 0, 0, 35, 0,
-112, 0, 0, 0, 47, 1, 0, 0, 0, 0, 35, 0, 19, 0, 0, 0, 48, 1, 0, 0, 0, 0, 35, 0,113, 0, 0, 0, 48, 1, 0, 0,
- 0, 0, 35, 0, 20, 0, 0, 0, 49, 1, 0, 0, 0, 0, 35, 0,113, 0, 0, 0, 49, 1, 0, 0, 0, 0, 35, 0, 19, 0, 0, 0,
- 50, 1, 0, 0, 0, 0, 35, 0,114, 0, 0, 0, 50, 1, 0, 0, 0, 0, 35, 0, 21, 0, 0, 0, 51, 1, 0, 0, 0, 0, 35, 0,
-114, 0, 0, 0, 51, 1, 0, 0, 0, 0, 35, 0, 15, 0, 0, 0, 52, 1, 0, 0, 0, 0, 35, 0,115, 0, 0, 0, 52, 1, 0, 0,
- 0, 0, 35, 0, 19, 0, 0, 0, 53, 1, 0, 0, 0, 0, 35, 0,115, 0, 0, 0, 53, 1, 0, 0, 0, 0, 35, 0, 15, 0, 0, 0,
- 54, 1, 0, 0, 0, 0, 35, 0,116, 0, 0, 0, 54, 1, 0, 0, 0, 0, 35, 0, 21, 0, 0, 0, 55, 1, 0, 0, 0, 0, 35, 0,
-116, 0, 0, 0, 55, 1, 0, 0, 0, 0, 35, 0, 16, 0, 0, 0, 56, 1, 0, 0, 0, 0, 35, 0,117, 0, 0, 0, 56, 1, 0, 0,
- 0, 0, 35, 0, 23, 0, 0, 0, 57, 1, 0, 0, 0, 0, 35, 0,117, 0, 0, 0, 57, 1, 0, 0, 0, 0, 35, 0, 16, 0, 0, 0,
- 58, 1, 0, 0, 0, 0, 35, 0,118, 0, 0, 0, 58, 1, 0, 0, 0, 0, 35, 0, 22, 0, 0, 0, 59, 1, 0, 0, 0, 0, 35, 0,
-118, 0, 0, 0, 59, 1, 0, 0, 0, 0, 35, 0, 22, 0, 0, 0, 60, 1, 0, 0, 0, 0, 35, 0,119, 0, 0, 0, 60, 1, 0, 0,
- 0, 0, 35, 0, 23, 0, 0, 0, 61, 1, 0, 0, 0, 0, 35, 0,119, 0, 0, 0, 61, 1, 0, 0, 0, 0, 35, 0, 14, 0, 0, 0,
- 62, 1, 0, 0, 0, 0, 35, 0,120, 0, 0, 0, 62, 1, 0, 0, 0, 0, 35, 0, 25, 0, 0, 0, 63, 1, 0, 0, 0, 0, 35, 0,
-120, 0, 0, 0, 63, 1, 0, 0, 0, 0, 35, 0, 14, 0, 0, 0, 64, 1, 0, 0, 0, 0, 35, 0,121, 0, 0, 0, 64, 1, 0, 0,
- 0, 0, 35, 0, 24, 0, 0, 0, 65, 1, 0, 0, 0, 0, 35, 0,121, 0, 0, 0, 65, 1, 0, 0, 0, 0, 35, 0, 24, 0, 0, 0,
- 66, 1, 0, 0, 0, 0, 35, 0,122, 0, 0, 0, 66, 1, 0, 0, 0, 0, 35, 0, 25, 0, 0, 0, 67, 1, 0, 0, 0, 0, 35, 0,
-122, 0, 0, 0, 67, 1, 0, 0, 0, 0, 35, 0, 18, 0, 0, 0, 68, 1, 0, 0, 0, 0, 35, 0,123, 0, 0, 0, 68, 1, 0, 0,
- 0, 0, 35, 0, 27, 0, 0, 0, 69, 1, 0, 0, 0, 0, 35, 0,123, 0, 0, 0, 69, 1, 0, 0, 0, 0, 35, 0, 18, 0, 0, 0,
- 70, 1, 0, 0, 0, 0, 35, 0,124, 0, 0, 0, 70, 1, 0, 0, 0, 0, 35, 0, 26, 0, 0, 0, 71, 1, 0, 0, 0, 0, 35, 0,
-124, 0, 0, 0, 71, 1, 0, 0, 0, 0, 35, 0, 26, 0, 0, 0, 72, 1, 0, 0, 0, 0, 35, 0,125, 0, 0, 0, 72, 1, 0, 0,
- 0, 0, 35, 0, 27, 0, 0, 0, 73, 1, 0, 0, 0, 0, 35, 0,125, 0, 0, 0, 73, 1, 0, 0, 0, 0, 35, 0, 20, 0, 0, 0,
- 74, 1, 0, 0, 0, 0, 35, 0,126, 0, 0, 0, 74, 1, 0, 0, 0, 0, 35, 0, 29, 0, 0, 0, 75, 1, 0, 0, 0, 0, 35, 0,
-126, 0, 0, 0, 75, 1, 0, 0, 0, 0, 35, 0, 20, 0, 0, 0, 76, 1, 0, 0, 0, 0, 35, 0,127, 0, 0, 0, 76, 1, 0, 0,
- 0, 0, 35, 0, 28, 0, 0, 0, 77, 1, 0, 0, 0, 0, 35, 0,127, 0, 0, 0, 77, 1, 0, 0, 0, 0, 35, 0, 28, 0, 0, 0,
- 78, 1, 0, 0, 0, 0, 35, 0,128, 0, 0, 0, 78, 1, 0, 0, 0, 0, 35, 0, 29, 0, 0, 0, 79, 1, 0, 0, 0, 0, 35, 0,
-128, 0, 0, 0, 79, 1, 0, 0, 0, 0, 35, 0, 21, 0, 0, 0, 80, 1, 0, 0, 0, 0, 35, 0,129, 0, 0, 0, 80, 1, 0, 0,
- 0, 0, 35, 0, 31, 0, 0, 0, 81, 1, 0, 0, 0, 0, 35, 0,129, 0, 0, 0, 81, 1, 0, 0, 0, 0, 35, 0, 21, 0, 0, 0,
- 82, 1, 0, 0, 0, 0, 35, 0,130, 0, 0, 0, 82, 1, 0, 0, 0, 0, 35, 0, 30, 0, 0, 0, 83, 1, 0, 0, 0, 0, 35, 0,
-130, 0, 0, 0, 83, 1, 0, 0, 0, 0, 35, 0, 30, 0, 0, 0, 84, 1, 0, 0, 0, 0, 35, 0,131, 0, 0, 0, 84, 1, 0, 0,
- 0, 0, 35, 0, 31, 0, 0, 0, 85, 1, 0, 0, 0, 0, 35, 0,131, 0, 0, 0, 85, 1, 0, 0, 0, 0, 35, 0, 23, 0, 0, 0,
- 86, 1, 0, 0, 0, 0, 35, 0,132, 0, 0, 0, 86, 1, 0, 0, 0, 0, 35, 0, 32, 0, 0, 0, 87, 1, 0, 0, 0, 0, 35, 0,
-132, 0, 0, 0, 87, 1, 0, 0, 0, 0, 35, 0, 23, 0, 0, 0, 88, 1, 0, 0, 0, 0, 35, 0,133, 0, 0, 0, 88, 1, 0, 0,
- 0, 0, 35, 0, 24, 0, 0, 0, 89, 1, 0, 0, 0, 0, 35, 0,133, 0, 0, 0, 89, 1, 0, 0, 0, 0, 35, 0, 24, 0, 0, 0,
- 90, 1, 0, 0, 0, 0, 35, 0,134, 0, 0, 0, 90, 1, 0, 0, 0, 0, 35, 0, 32, 0, 0, 0, 91, 1, 0, 0, 0, 0, 35, 0,
-134, 0, 0, 0, 91, 1, 0, 0, 0, 0, 35, 0, 25, 0, 0, 0, 92, 1, 0, 0, 0, 0, 35, 0,135, 0, 0, 0, 92, 1, 0, 0,
- 0, 0, 35, 0, 33, 0, 0, 0, 93, 1, 0, 0, 0, 0, 35, 0,135, 0, 0, 0, 93, 1, 0, 0, 0, 0, 35, 0, 25, 0, 0, 0,
- 94, 1, 0, 0, 0, 0, 35, 0,136, 0, 0, 0, 94, 1, 0, 0, 0, 0, 35, 0, 26, 0, 0, 0, 95, 1, 0, 0, 0, 0, 35, 0,
-136, 0, 0, 0, 95, 1, 0, 0, 0, 0, 35, 0, 26, 0, 0, 0, 96, 1, 0, 0, 0, 0, 35, 0,137, 0, 0, 0, 96, 1, 0, 0,
- 0, 0, 35, 0, 33, 0, 0, 0, 97, 1, 0, 0, 0, 0, 35, 0,137, 0, 0, 0, 97, 1, 0, 0, 0, 0, 35, 0, 27, 0, 0, 0,
- 98, 1, 0, 0, 0, 0, 35, 0,138, 0, 0, 0, 98, 1, 0, 0, 0, 0, 35, 0, 34, 0, 0, 0, 99, 1, 0, 0, 0, 0, 35, 0,
-138, 0, 0, 0, 99, 1, 0, 0, 0, 0, 35, 0, 27, 0, 0, 0,100, 1, 0, 0, 0, 0, 35, 0,139, 0, 0, 0,100, 1, 0, 0,
- 0, 0, 35, 0, 28, 0, 0, 0,101, 1, 0, 0, 0, 0, 35, 0,139, 0, 0, 0,101, 1, 0, 0, 0, 0, 35, 0, 28, 0, 0, 0,
-102, 1, 0, 0, 0, 0, 35, 0,140, 0, 0, 0,102, 1, 0, 0, 0, 0, 35, 0, 34, 0, 0, 0,103, 1, 0, 0, 0, 0, 35, 0,
-140, 0, 0, 0,103, 1, 0, 0, 0, 0, 35, 0, 29, 0, 0, 0,104, 1, 0, 0, 0, 0, 35, 0,141, 0, 0, 0,104, 1, 0, 0,
- 0, 0, 35, 0, 35, 0, 0, 0,105, 1, 0, 0, 0, 0, 35, 0,141, 0, 0, 0,105, 1, 0, 0, 0, 0, 35, 0, 29, 0, 0, 0,
-106, 1, 0, 0, 0, 0, 35, 0,142, 0, 0, 0,106, 1, 0, 0, 0, 0, 35, 0, 30, 0, 0, 0,107, 1, 0, 0, 0, 0, 35, 0,
-142, 0, 0, 0,107, 1, 0, 0, 0, 0, 35, 0, 30, 0, 0, 0,108, 1, 0, 0, 0, 0, 35, 0,143, 0, 0, 0,108, 1, 0, 0,
- 0, 0, 35, 0, 35, 0, 0, 0,109, 1, 0, 0, 0, 0, 35, 0,143, 0, 0, 0,109, 1, 0, 0, 0, 0, 35, 0, 31, 0, 0, 0,
-110, 1, 0, 0, 0, 0, 35, 0,144, 0, 0, 0,110, 1, 0, 0, 0, 0, 35, 0, 36, 0, 0, 0,111, 1, 0, 0, 0, 0, 35, 0,
-144, 0, 0, 0,111, 1, 0, 0, 0, 0, 35, 0, 22, 0, 0, 0,112, 1, 0, 0, 0, 0, 35, 0,145, 0, 0, 0,112, 1, 0, 0,
- 0, 0, 35, 0, 31, 0, 0, 0,113, 1, 0, 0, 0, 0, 35, 0,145, 0, 0, 0,113, 1, 0, 0, 0, 0, 35, 0, 22, 0, 0, 0,
-114, 1, 0, 0, 0, 0, 35, 0,146, 0, 0, 0,114, 1, 0, 0, 0, 0, 35, 0, 36, 0, 0, 0,115, 1, 0, 0, 0, 0, 35, 0,
-146, 0, 0, 0,115, 1, 0, 0, 0, 0, 35, 0, 32, 0, 0, 0,116, 1, 0, 0, 0, 0, 35, 0,147, 0, 0, 0,116, 1, 0, 0,
- 0, 0, 35, 0, 38, 0, 0, 0,117, 1, 0, 0, 0, 0, 35, 0,147, 0, 0, 0,117, 1, 0, 0, 0, 0, 35, 0, 32, 0, 0, 0,
-118, 1, 0, 0, 0, 0, 35, 0,148, 0, 0, 0,118, 1, 0, 0, 0, 0, 35, 0, 37, 0, 0, 0,119, 1, 0, 0, 0, 0, 35, 0,
-148, 0, 0, 0,119, 1, 0, 0, 0, 0, 35, 0, 37, 0, 0, 0,120, 1, 0, 0, 0, 0, 35, 0,149, 0, 0, 0,120, 1, 0, 0,
- 0, 0, 35, 0, 38, 0, 0, 0,121, 1, 0, 0, 0, 0, 35, 0,149, 0, 0, 0,121, 1, 0, 0, 0, 0, 35, 0, 33, 0, 0, 0,
-122, 1, 0, 0, 0, 0, 35, 0,150, 0, 0, 0,122, 1, 0, 0, 0, 0, 35, 0, 39, 0, 0, 0,123, 1, 0, 0, 0, 0, 35, 0,
-150, 0, 0, 0,123, 1, 0, 0, 0, 0, 35, 0, 33, 0, 0, 0,124, 1, 0, 0, 0, 0, 35, 0,151, 0, 0, 0,124, 1, 0, 0,
- 0, 0, 35, 0, 38, 0, 0, 0,125, 1, 0, 0, 0, 0, 35, 0,151, 0, 0, 0,125, 1, 0, 0, 0, 0, 35, 0, 38, 0, 0, 0,
-126, 1, 0, 0, 0, 0, 35, 0,152, 0, 0, 0,126, 1, 0, 0, 0, 0, 35, 0, 39, 0, 0, 0,127, 1, 0, 0, 0, 0, 35, 0,
-152, 0, 0, 0,127, 1, 0, 0, 0, 0, 35, 0, 34, 0, 0, 0,128, 1, 0, 0, 0, 0, 35, 0,153, 0, 0, 0,128, 1, 0, 0,
- 0, 0, 35, 0, 40, 0, 0, 0,129, 1, 0, 0, 0, 0, 35, 0,153, 0, 0, 0,129, 1, 0, 0, 0, 0, 35, 0, 34, 0, 0, 0,
-130, 1, 0, 0, 0, 0, 35, 0,154, 0, 0, 0,130, 1, 0, 0, 0, 0, 35, 0, 39, 0, 0, 0,131, 1, 0, 0, 0, 0, 35, 0,
-154, 0, 0, 0,131, 1, 0, 0, 0, 0, 35, 0, 39, 0, 0, 0,132, 1, 0, 0, 0, 0, 35, 0,155, 0, 0, 0,132, 1, 0, 0,
- 0, 0, 35, 0, 40, 0, 0, 0,133, 1, 0, 0, 0, 0, 35, 0,155, 0, 0, 0,133, 1, 0, 0, 0, 0, 35, 0, 35, 0, 0, 0,
-134, 1, 0, 0, 0, 0, 35, 0,156, 0, 0, 0,134, 1, 0, 0, 0, 0, 35, 0, 41, 0, 0, 0,135, 1, 0, 0, 0, 0, 35, 0,
-156, 0, 0, 0,135, 1, 0, 0, 0, 0, 35, 0, 35, 0, 0, 0,136, 1, 0, 0, 0, 0, 35, 0,157, 0, 0, 0,136, 1, 0, 0,
- 0, 0, 35, 0, 40, 0, 0, 0,137, 1, 0, 0, 0, 0, 35, 0,157, 0, 0, 0,137, 1, 0, 0, 0, 0, 35, 0, 40, 0, 0, 0,
-138, 1, 0, 0, 0, 0, 35, 0,158, 0, 0, 0,138, 1, 0, 0, 0, 0, 35, 0, 41, 0, 0, 0,139, 1, 0, 0, 0, 0, 35, 0,
-158, 0, 0, 0,139, 1, 0, 0, 0, 0, 35, 0, 36, 0, 0, 0,140, 1, 0, 0, 0, 0, 35, 0,159, 0, 0, 0,140, 1, 0, 0,
- 0, 0, 35, 0, 37, 0, 0, 0,141, 1, 0, 0, 0, 0, 35, 0,159, 0, 0, 0,141, 1, 0, 0, 0, 0, 35, 0, 36, 0, 0, 0,
-142, 1, 0, 0, 0, 0, 35, 0,160, 0, 0, 0,142, 1, 0, 0, 0, 0, 35, 0, 41, 0, 0, 0,143, 1, 0, 0, 0, 0, 35, 0,
-160, 0, 0, 0,143, 1, 0, 0, 0, 0, 35, 0, 37, 0, 0, 0,144, 1, 0, 0, 0, 0, 35, 0,161, 0, 0, 0,144, 1, 0, 0,
- 0, 0, 35, 0, 41, 0, 0, 0,145, 1, 0, 0, 0, 0, 35, 0,161, 0, 0, 0,145, 1, 0, 0, 0, 0, 35, 0, 46, 0, 0, 0,
-146, 1, 0, 0, 0, 0, 35, 0,102, 0, 0, 0,146, 1, 0, 0, 0, 0, 35, 0, 43, 0, 0, 0,147, 1, 0, 0, 0, 0, 33, 0,
- 46, 0, 0, 0,147, 1, 0, 0, 0, 0, 33, 0, 43, 0, 0, 0,148, 1, 0, 0, 0, 0, 35, 0,102, 0, 0, 0,148, 1, 0, 0,
- 0, 0, 35, 0,102, 0, 0, 0,149, 1, 0, 0, 0, 0, 35, 0,103, 0, 0, 0,149, 1, 0, 0, 0, 0, 35, 0,103, 0, 0, 0,
-150, 1, 0, 0, 0, 0, 35, 0,104, 0, 0, 0,150, 1, 0, 0, 0, 0, 35, 0,102, 0, 0, 0,151, 1, 0, 0, 0, 0, 35, 0,
-104, 0, 0, 0,151, 1, 0, 0, 0, 0, 35, 0, 45, 0, 0, 0,152, 1, 0, 0, 0, 0, 33, 0, 47, 0, 0, 0,152, 1, 0, 0,
- 0, 0, 33, 0, 47, 0, 0, 0,153, 1, 0, 0, 0, 0, 35, 0,104, 0, 0, 0,153, 1, 0, 0, 0, 0, 35, 0, 45, 0, 0, 0,
-154, 1, 0, 0, 0, 0, 35, 0,104, 0, 0, 0,154, 1, 0, 0, 0, 0, 35, 0, 44, 0, 0, 0,155, 1, 0, 0, 0, 0, 35, 0,
-103, 0, 0, 0,155, 1, 0, 0, 0, 0, 35, 0, 42, 0, 0, 0,156, 1, 0, 0, 0, 0, 35, 0,103, 0, 0, 0,156, 1, 0, 0,
- 0, 0, 35, 0, 42, 0, 0, 0,157, 1, 0, 0, 0, 0, 33, 0, 44, 0, 0, 0,157, 1, 0, 0, 0, 0, 33, 0, 50, 0, 0, 0,
-158, 1, 0, 0, 0, 0, 35, 0,105, 0, 0, 0,158, 1, 0, 0, 0, 0, 35, 0, 43, 0, 0, 0,159, 1, 0, 0, 0, 0, 33, 0,
- 50, 0, 0, 0,159, 1, 0, 0, 0, 0, 33, 0, 43, 0, 0, 0,160, 1, 0, 0, 0, 0, 35, 0,105, 0, 0, 0,160, 1, 0, 0,
- 0, 0, 35, 0,105, 0, 0, 0,161, 1, 0, 0, 0, 0, 35, 0,106, 0, 0, 0,161, 1, 0, 0, 0, 0, 35, 0,106, 0, 0, 0,
-162, 1, 0, 0, 0, 0, 35, 0,107, 0, 0, 0,162, 1, 0, 0, 0, 0, 35, 0,105, 0, 0, 0,163, 1, 0, 0, 0, 0, 35, 0,
-107, 0, 0, 0,163, 1, 0, 0, 0, 0, 35, 0, 49, 0, 0, 0,164, 1, 0, 0, 0, 0, 33, 0, 51, 0, 0, 0,164, 1, 0, 0,
- 0, 0, 33, 0, 51, 0, 0, 0,165, 1, 0, 0, 0, 0, 35, 0,107, 0, 0, 0,165, 1, 0, 0, 0, 0, 35, 0, 49, 0, 0, 0,
-166, 1, 0, 0, 0, 0, 35, 0,107, 0, 0, 0,166, 1, 0, 0, 0, 0, 35, 0, 48, 0, 0, 0,167, 1, 0, 0, 0, 0, 35, 0,
-106, 0, 0, 0,167, 1, 0, 0, 0, 0, 35, 0, 42, 0, 0, 0,168, 1, 0, 0, 0, 0, 35, 0,106, 0, 0, 0,168, 1, 0, 0,
- 0, 0, 35, 0, 42, 0, 0, 0,169, 1, 0, 0, 0, 0, 33, 0, 48, 0, 0, 0,169, 1, 0, 0, 0, 0, 33, 0, 54, 0, 0, 0,
-170, 1, 0, 0, 0, 0, 35, 0,108, 0, 0, 0,170, 1, 0, 0, 0, 0, 35, 0, 45, 0, 0, 0,171, 1, 0, 0, 0, 0, 33, 0,
- 54, 0, 0, 0,171, 1, 0, 0, 0, 0, 33, 0, 45, 0, 0, 0,172, 1, 0, 0, 0, 0, 35, 0,108, 0, 0, 0,172, 1, 0, 0,
- 0, 0, 35, 0,108, 0, 0, 0,173, 1, 0, 0, 0, 0, 35, 0,109, 0, 0, 0,173, 1, 0, 0, 0, 0, 35, 0,109, 0, 0, 0,
-174, 1, 0, 0, 0, 0, 35, 0,110, 0, 0, 0,174, 1, 0, 0, 0, 0, 35, 0,108, 0, 0, 0,175, 1, 0, 0, 0, 0, 35, 0,
-110, 0, 0, 0,175, 1, 0, 0, 0, 0, 35, 0, 53, 0, 0, 0,176, 1, 0, 0, 0, 0, 33, 0, 55, 0, 0, 0,176, 1, 0, 0,
- 0, 0, 33, 0, 55, 0, 0, 0,177, 1, 0, 0, 0, 0, 35, 0,110, 0, 0, 0,177, 1, 0, 0, 0, 0, 35, 0, 53, 0, 0, 0,
-178, 1, 0, 0, 0, 0, 35, 0,110, 0, 0, 0,178, 1, 0, 0, 0, 0, 35, 0, 52, 0, 0, 0,179, 1, 0, 0, 0, 0, 35, 0,
-109, 0, 0, 0,179, 1, 0, 0, 0, 0, 35, 0, 44, 0, 0, 0,180, 1, 0, 0, 0, 0, 35, 0,109, 0, 0, 0,180, 1, 0, 0,
- 0, 0, 35, 0, 44, 0, 0, 0,181, 1, 0, 0, 0, 0, 33, 0, 52, 0, 0, 0,181, 1, 0, 0, 0, 0, 33, 0, 58, 0, 0, 0,
-182, 1, 0, 0, 0, 0, 35, 0,111, 0, 0, 0,182, 1, 0, 0, 0, 0, 35, 0, 53, 0, 0, 0,183, 1, 0, 0, 0, 0, 33, 0,
- 58, 0, 0, 0,183, 1, 0, 0, 0, 0, 33, 0, 53, 0, 0, 0,184, 1, 0, 0, 0, 0, 35, 0,111, 0, 0, 0,184, 1, 0, 0,
- 0, 0, 35, 0,111, 0, 0, 0,185, 1, 0, 0, 0, 0, 35, 0,112, 0, 0, 0,185, 1, 0, 0, 0, 0, 35, 0,112, 0, 0, 0,
-186, 1, 0, 0, 0, 0, 35, 0,113, 0, 0, 0,186, 1, 0, 0, 0, 0, 35, 0,111, 0, 0, 0,187, 1, 0, 0, 0, 0, 35, 0,
-113, 0, 0, 0,187, 1, 0, 0, 0, 0, 35, 0, 57, 0, 0, 0,188, 1, 0, 0, 0, 0, 33, 0, 59, 0, 0, 0,188, 1, 0, 0,
- 0, 0, 33, 0, 59, 0, 0, 0,189, 1, 0, 0, 0, 0, 35, 0,113, 0, 0, 0,189, 1, 0, 0, 0, 0, 35, 0, 57, 0, 0, 0,
-190, 1, 0, 0, 0, 0, 35, 0,113, 0, 0, 0,190, 1, 0, 0, 0, 0, 35, 0, 56, 0, 0, 0,191, 1, 0, 0, 0, 0, 35, 0,
-112, 0, 0, 0,191, 1, 0, 0, 0, 0, 35, 0, 52, 0, 0, 0,192, 1, 0, 0, 0, 0, 35, 0,112, 0, 0, 0,192, 1, 0, 0,
- 0, 0, 35, 0, 52, 0, 0, 0,193, 1, 0, 0, 0, 0, 33, 0, 56, 0, 0, 0,193, 1, 0, 0, 0, 0, 33, 0, 60, 0, 0, 0,
-194, 1, 0, 0, 0, 0, 35, 0,114, 0, 0, 0,194, 1, 0, 0, 0, 0, 35, 0, 57, 0, 0, 0,195, 1, 0, 0, 0, 0, 33, 0,
- 60, 0, 0, 0,195, 1, 0, 0, 0, 0, 33, 0, 57, 0, 0, 0,196, 1, 0, 0, 0, 0, 35, 0,114, 0, 0, 0,196, 1, 0, 0,
- 0, 0, 35, 0,114, 0, 0, 0,197, 1, 0, 0, 0, 0, 35, 0,115, 0, 0, 0,197, 1, 0, 0, 0, 0, 35, 0,115, 0, 0, 0,
-198, 1, 0, 0, 0, 0, 35, 0,116, 0, 0, 0,198, 1, 0, 0, 0, 0, 35, 0,114, 0, 0, 0,199, 1, 0, 0, 0, 0, 35, 0,
-116, 0, 0, 0,199, 1, 0, 0, 0, 0, 35, 0, 49, 0, 0, 0,200, 1, 0, 0, 0, 0, 33, 0, 61, 0, 0, 0,200, 1, 0, 0,
- 0, 0, 33, 0, 61, 0, 0, 0,201, 1, 0, 0, 0, 0, 35, 0,116, 0, 0, 0,201, 1, 0, 0, 0, 0, 35, 0, 49, 0, 0, 0,
-202, 1, 0, 0, 0, 0, 35, 0,116, 0, 0, 0,202, 1, 0, 0, 0, 0, 35, 0, 48, 0, 0, 0,203, 1, 0, 0, 0, 0, 35, 0,
-115, 0, 0, 0,203, 1, 0, 0, 0, 0, 35, 0, 56, 0, 0, 0,204, 1, 0, 0, 0, 0, 35, 0,115, 0, 0, 0,204, 1, 0, 0,
- 0, 0, 35, 0, 48, 0, 0, 0,205, 1, 0, 0, 0, 0, 33, 0, 56, 0, 0, 0,205, 1, 0, 0, 0, 0, 33, 0, 64, 0, 0, 0,
-206, 1, 0, 0, 0, 0, 35, 0,117, 0, 0, 0,206, 1, 0, 0, 0, 0, 35, 0, 50, 0, 0, 0,207, 1, 0, 0, 0, 0, 33, 0,
- 64, 0, 0, 0,207, 1, 0, 0, 0, 0, 33, 0, 50, 0, 0, 0,208, 1, 0, 0, 0, 0, 35, 0,117, 0, 0, 0,208, 1, 0, 0,
- 0, 0, 35, 0,117, 0, 0, 0,209, 1, 0, 0, 0, 0, 35, 0,118, 0, 0, 0,209, 1, 0, 0, 0, 0, 35, 0,118, 0, 0, 0,
-210, 1, 0, 0, 0, 0, 35, 0,119, 0, 0, 0,210, 1, 0, 0, 0, 0, 35, 0,117, 0, 0, 0,211, 1, 0, 0, 0, 0, 35, 0,
-119, 0, 0, 0,211, 1, 0, 0, 0, 0, 35, 0, 63, 0, 0, 0,212, 1, 0, 0, 0, 0, 33, 0, 65, 0, 0, 0,212, 1, 0, 0,
- 0, 0, 33, 0, 65, 0, 0, 0,213, 1, 0, 0, 0, 0, 35, 0,119, 0, 0, 0,213, 1, 0, 0, 0, 0, 35, 0, 63, 0, 0, 0,
-214, 1, 0, 0, 0, 0, 35, 0,119, 0, 0, 0,214, 1, 0, 0, 0, 0, 35, 0, 62, 0, 0, 0,215, 1, 0, 0, 0, 0, 35, 0,
-118, 0, 0, 0,215, 1, 0, 0, 0, 0, 35, 0, 51, 0, 0, 0,216, 1, 0, 0, 0, 0, 35, 0,118, 0, 0, 0,216, 1, 0, 0,
- 0, 0, 35, 0, 51, 0, 0, 0,217, 1, 0, 0, 0, 0, 33, 0, 62, 0, 0, 0,217, 1, 0, 0, 0, 0, 33, 0, 68, 0, 0, 0,
-218, 1, 0, 0, 0, 0, 35, 0,120, 0, 0, 0,218, 1, 0, 0, 0, 0, 35, 0, 47, 0, 0, 0,219, 1, 0, 0, 0, 0, 33, 0,
- 68, 0, 0, 0,219, 1, 0, 0, 0, 0, 33, 0, 47, 0, 0, 0,220, 1, 0, 0, 0, 0, 35, 0,120, 0, 0, 0,220, 1, 0, 0,
- 0, 0, 35, 0,120, 0, 0, 0,221, 1, 0, 0, 0, 0, 35, 0,121, 0, 0, 0,221, 1, 0, 0, 0, 0, 35, 0,121, 0, 0, 0,
-222, 1, 0, 0, 0, 0, 35, 0,122, 0, 0, 0,222, 1, 0, 0, 0, 0, 35, 0,120, 0, 0, 0,223, 1, 0, 0, 0, 0, 35, 0,
-122, 0, 0, 0,223, 1, 0, 0, 0, 0, 35, 0, 67, 0, 0, 0,224, 1, 0, 0, 0, 0, 33, 0, 69, 0, 0, 0,224, 1, 0, 0,
- 0, 0, 33, 0, 69, 0, 0, 0,225, 1, 0, 0, 0, 0, 35, 0,122, 0, 0, 0,225, 1, 0, 0, 0, 0, 35, 0, 67, 0, 0, 0,
-226, 1, 0, 0, 0, 0, 35, 0,122, 0, 0, 0,226, 1, 0, 0, 0, 0, 35, 0, 66, 0, 0, 0,227, 1, 0, 0, 0, 0, 35, 0,
-121, 0, 0, 0,227, 1, 0, 0, 0, 0, 35, 0, 46, 0, 0, 0,228, 1, 0, 0, 0, 0, 35, 0,121, 0, 0, 0,228, 1, 0, 0,
- 0, 0, 35, 0, 46, 0, 0, 0,229, 1, 0, 0, 0, 0, 33, 0, 66, 0, 0, 0,229, 1, 0, 0, 0, 0, 33, 0, 72, 0, 0, 0,
-230, 1, 0, 0, 0, 0, 35, 0,123, 0, 0, 0,230, 1, 0, 0, 0, 0, 35, 0, 55, 0, 0, 0,231, 1, 0, 0, 0, 0, 33, 0,
- 72, 0, 0, 0,231, 1, 0, 0, 0, 0, 33, 0, 55, 0, 0, 0,232, 1, 0, 0, 0, 0, 35, 0,123, 0, 0, 0,232, 1, 0, 0,
- 0, 0, 35, 0,123, 0, 0, 0,233, 1, 0, 0, 0, 0, 35, 0,124, 0, 0, 0,233, 1, 0, 0, 0, 0, 35, 0,124, 0, 0, 0,
-234, 1, 0, 0, 0, 0, 35, 0,125, 0, 0, 0,234, 1, 0, 0, 0, 0, 35, 0,123, 0, 0, 0,235, 1, 0, 0, 0, 0, 35, 0,
-125, 0, 0, 0,235, 1, 0, 0, 0, 0, 35, 0, 71, 0, 0, 0,236, 1, 0, 0, 0, 0, 33, 0, 73, 0, 0, 0,236, 1, 0, 0,
- 0, 0, 33, 0, 73, 0, 0, 0,237, 1, 0, 0, 0, 0, 35, 0,125, 0, 0, 0,237, 1, 0, 0, 0, 0, 35, 0, 71, 0, 0, 0,
-238, 1, 0, 0, 0, 0, 35, 0,125, 0, 0, 0,238, 1, 0, 0, 0, 0, 35, 0, 70, 0, 0, 0,239, 1, 0, 0, 0, 0, 35, 0,
-124, 0, 0, 0,239, 1, 0, 0, 0, 0, 35, 0, 54, 0, 0, 0,240, 1, 0, 0, 0, 0, 35, 0,124, 0, 0, 0,240, 1, 0, 0,
- 0, 0, 35, 0, 54, 0, 0, 0,241, 1, 0, 0, 0, 0, 33, 0, 70, 0, 0, 0,241, 1, 0, 0, 0, 0, 33, 0, 76, 0, 0, 0,
-242, 1, 0, 0, 0, 0, 35, 0,126, 0, 0, 0,242, 1, 0, 0, 0, 0, 35, 0, 59, 0, 0, 0,243, 1, 0, 0, 0, 0, 33, 0,
- 76, 0, 0, 0,243, 1, 0, 0, 0, 0, 33, 0, 59, 0, 0, 0,244, 1, 0, 0, 0, 0, 35, 0,126, 0, 0, 0,244, 1, 0, 0,
- 0, 0, 35, 0,126, 0, 0, 0,245, 1, 0, 0, 0, 0, 35, 0,127, 0, 0, 0,245, 1, 0, 0, 0, 0, 35, 0,127, 0, 0, 0,
-246, 1, 0, 0, 0, 0, 35, 0,128, 0, 0, 0,246, 1, 0, 0, 0, 0, 35, 0,126, 0, 0, 0,247, 1, 0, 0, 0, 0, 35, 0,
-128, 0, 0, 0,247, 1, 0, 0, 0, 0, 35, 0, 75, 0, 0, 0,248, 1, 0, 0, 0, 0, 33, 0, 77, 0, 0, 0,248, 1, 0, 0,
- 0, 0, 33, 0, 77, 0, 0, 0,249, 1, 0, 0, 0, 0, 35, 0,128, 0, 0, 0,249, 1, 0, 0, 0, 0, 35, 0, 75, 0, 0, 0,
-250, 1, 0, 0, 0, 0, 35, 0,128, 0, 0, 0,250, 1, 0, 0, 0, 0, 35, 0, 74, 0, 0, 0,251, 1, 0, 0, 0, 0, 35, 0,
-127, 0, 0, 0,251, 1, 0, 0, 0, 0, 35, 0, 58, 0, 0, 0,252, 1, 0, 0, 0, 0, 35, 0,127, 0, 0, 0,252, 1, 0, 0,
- 0, 0, 35, 0, 58, 0, 0, 0,253, 1, 0, 0, 0, 0, 33, 0, 74, 0, 0, 0,253, 1, 0, 0, 0, 0, 33, 0, 80, 0, 0, 0,
-254, 1, 0, 0, 0, 0, 35, 0,129, 0, 0, 0,254, 1, 0, 0, 0, 0, 35, 0, 61, 0, 0, 0,255, 1, 0, 0, 0, 0, 33, 0,
- 80, 0, 0, 0,255, 1, 0, 0, 0, 0, 33, 0, 61, 0, 0, 0, 0, 2, 0, 0, 0, 0, 35, 0,129, 0, 0, 0, 0, 2, 0, 0,
- 0, 0, 35, 0,129, 0, 0, 0, 1, 2, 0, 0, 0, 0, 35, 0,130, 0, 0, 0, 1, 2, 0, 0, 0, 0, 35, 0,130, 0, 0, 0,
- 2, 2, 0, 0, 0, 0, 35, 0,131, 0, 0, 0, 2, 2, 0, 0, 0, 0, 35, 0,129, 0, 0, 0, 3, 2, 0, 0, 0, 0, 35, 0,
-131, 0, 0, 0, 3, 2, 0, 0, 0, 0, 35, 0, 79, 0, 0, 0, 4, 2, 0, 0, 0, 0, 33, 0, 81, 0, 0, 0, 4, 2, 0, 0,
- 0, 0, 33, 0, 81, 0, 0, 0, 5, 2, 0, 0, 0, 0, 35, 0,131, 0, 0, 0, 5, 2, 0, 0, 0, 0, 35, 0, 79, 0, 0, 0,
- 6, 2, 0, 0, 0, 0, 35, 0,131, 0, 0, 0, 6, 2, 0, 0, 0, 0, 35, 0, 78, 0, 0, 0, 7, 2, 0, 0, 0, 0, 35, 0,
-130, 0, 0, 0, 7, 2, 0, 0, 0, 0, 35, 0, 60, 0, 0, 0, 8, 2, 0, 0, 0, 0, 35, 0,130, 0, 0, 0, 8, 2, 0, 0,
- 0, 0, 35, 0, 60, 0, 0, 0, 9, 2, 0, 0, 0, 0, 33, 0, 78, 0, 0, 0, 9, 2, 0, 0, 0, 0, 33, 0, 83, 0, 0, 0,
- 10, 2, 0, 0, 0, 0, 35, 0,132, 0, 0, 0, 10, 2, 0, 0, 0, 0, 35, 0, 65, 0, 0, 0, 11, 2, 0, 0, 0, 0, 33, 0,
- 83, 0, 0, 0, 11, 2, 0, 0, 0, 0, 33, 0, 65, 0, 0, 0, 12, 2, 0, 0, 0, 0, 35, 0,132, 0, 0, 0, 12, 2, 0, 0,
- 0, 0, 35, 0,132, 0, 0, 0, 13, 2, 0, 0, 0, 0, 35, 0,133, 0, 0, 0, 13, 2, 0, 0, 0, 0, 35, 0,133, 0, 0, 0,
- 14, 2, 0, 0, 0, 0, 35, 0,134, 0, 0, 0, 14, 2, 0, 0, 0, 0, 35, 0,132, 0, 0, 0, 15, 2, 0, 0, 0, 0, 35, 0,
-134, 0, 0, 0, 15, 2, 0, 0, 0, 0, 35, 0, 67, 0, 0, 0, 16, 2, 0, 0, 0, 0, 33, 0, 82, 0, 0, 0, 16, 2, 0, 0,
- 0, 0, 33, 0, 82, 0, 0, 0, 17, 2, 0, 0, 0, 0, 35, 0,134, 0, 0, 0, 17, 2, 0, 0, 0, 0, 35, 0, 67, 0, 0, 0,
- 18, 2, 0, 0, 0, 0, 35, 0,134, 0, 0, 0, 18, 2, 0, 0, 0, 0, 35, 0, 66, 0, 0, 0, 19, 2, 0, 0, 0, 0, 35, 0,
-133, 0, 0, 0, 19, 2, 0, 0, 0, 0, 35, 0, 64, 0, 0, 0, 20, 2, 0, 0, 0, 0, 35, 0,133, 0, 0, 0, 20, 2, 0, 0,
- 0, 0, 35, 0, 64, 0, 0, 0, 21, 2, 0, 0, 0, 0, 33, 0, 66, 0, 0, 0, 21, 2, 0, 0, 0, 0, 33, 0, 84, 0, 0, 0,
- 22, 2, 0, 0, 0, 0, 35, 0,135, 0, 0, 0, 22, 2, 0, 0, 0, 0, 35, 0, 69, 0, 0, 0, 23, 2, 0, 0, 0, 0, 33, 0,
- 84, 0, 0, 0, 23, 2, 0, 0, 0, 0, 33, 0, 69, 0, 0, 0, 24, 2, 0, 0, 0, 0, 35, 0,135, 0, 0, 0, 24, 2, 0, 0,
- 0, 0, 35, 0,135, 0, 0, 0, 25, 2, 0, 0, 0, 0, 35, 0,136, 0, 0, 0, 25, 2, 0, 0, 0, 0, 35, 0,136, 0, 0, 0,
- 26, 2, 0, 0, 0, 0, 35, 0,137, 0, 0, 0, 26, 2, 0, 0, 0, 0, 35, 0,135, 0, 0, 0, 27, 2, 0, 0, 0, 0, 35, 0,
-137, 0, 0, 0, 27, 2, 0, 0, 0, 0, 35, 0, 71, 0, 0, 0, 28, 2, 0, 0, 0, 0, 33, 0, 85, 0, 0, 0, 28, 2, 0, 0,
- 0, 0, 33, 0, 85, 0, 0, 0, 29, 2, 0, 0, 0, 0, 35, 0,137, 0, 0, 0, 29, 2, 0, 0, 0, 0, 35, 0, 71, 0, 0, 0,
- 30, 2, 0, 0, 0, 0, 35, 0,137, 0, 0, 0, 30, 2, 0, 0, 0, 0, 35, 0, 70, 0, 0, 0, 31, 2, 0, 0, 0, 0, 35, 0,
-136, 0, 0, 0, 31, 2, 0, 0, 0, 0, 35, 0, 68, 0, 0, 0, 32, 2, 0, 0, 0, 0, 35, 0,136, 0, 0, 0, 32, 2, 0, 0,
- 0, 0, 35, 0, 68, 0, 0, 0, 33, 2, 0, 0, 0, 0, 33, 0, 70, 0, 0, 0, 33, 2, 0, 0, 0, 0, 33, 0, 86, 0, 0, 0,
- 34, 2, 0, 0, 0, 0, 35, 0,138, 0, 0, 0, 34, 2, 0, 0, 0, 0, 35, 0, 73, 0, 0, 0, 35, 2, 0, 0, 0, 0, 33, 0,
- 86, 0, 0, 0, 35, 2, 0, 0, 0, 0, 33, 0, 73, 0, 0, 0, 36, 2, 0, 0, 0, 0, 35, 0,138, 0, 0, 0, 36, 2, 0, 0,
- 0, 0, 35, 0,138, 0, 0, 0, 37, 2, 0, 0, 0, 0, 35, 0,139, 0, 0, 0, 37, 2, 0, 0, 0, 0, 35, 0,139, 0, 0, 0,
- 38, 2, 0, 0, 0, 0, 35, 0,140, 0, 0, 0, 38, 2, 0, 0, 0, 0, 35, 0,138, 0, 0, 0, 39, 2, 0, 0, 0, 0, 35, 0,
-140, 0, 0, 0, 39, 2, 0, 0, 0, 0, 35, 0, 75, 0, 0, 0, 40, 2, 0, 0, 0, 0, 33, 0, 87, 0, 0, 0, 40, 2, 0, 0,
- 0, 0, 33, 0, 87, 0, 0, 0, 41, 2, 0, 0, 0, 0, 35, 0,140, 0, 0, 0, 41, 2, 0, 0, 0, 0, 35, 0, 75, 0, 0, 0,
- 42, 2, 0, 0, 0, 0, 35, 0,140, 0, 0, 0, 42, 2, 0, 0, 0, 0, 35, 0, 74, 0, 0, 0, 43, 2, 0, 0, 0, 0, 35, 0,
-139, 0, 0, 0, 43, 2, 0, 0, 0, 0, 35, 0, 72, 0, 0, 0, 44, 2, 0, 0, 0, 0, 35, 0,139, 0, 0, 0, 44, 2, 0, 0,
- 0, 0, 35, 0, 72, 0, 0, 0, 45, 2, 0, 0, 0, 0, 33, 0, 74, 0, 0, 0, 45, 2, 0, 0, 0, 0, 33, 0, 88, 0, 0, 0,
- 46, 2, 0, 0, 0, 0, 35, 0,141, 0, 0, 0, 46, 2, 0, 0, 0, 0, 35, 0, 77, 0, 0, 0, 47, 2, 0, 0, 0, 0, 33, 0,
- 88, 0, 0, 0, 47, 2, 0, 0, 0, 0, 33, 0, 77, 0, 0, 0, 48, 2, 0, 0, 0, 0, 35, 0,141, 0, 0, 0, 48, 2, 0, 0,
- 0, 0, 35, 0,141, 0, 0, 0, 49, 2, 0, 0, 0, 0, 35, 0,142, 0, 0, 0, 49, 2, 0, 0, 0, 0, 35, 0,142, 0, 0, 0,
- 50, 2, 0, 0, 0, 0, 35, 0,143, 0, 0, 0, 50, 2, 0, 0, 0, 0, 35, 0,141, 0, 0, 0, 51, 2, 0, 0, 0, 0, 35, 0,
-143, 0, 0, 0, 51, 2, 0, 0, 0, 0, 35, 0, 79, 0, 0, 0, 52, 2, 0, 0, 0, 0, 33, 0, 89, 0, 0, 0, 52, 2, 0, 0,
- 0, 0, 33, 0, 89, 0, 0, 0, 53, 2, 0, 0, 0, 0, 35, 0,143, 0, 0, 0, 53, 2, 0, 0, 0, 0, 35, 0, 79, 0, 0, 0,
- 54, 2, 0, 0, 0, 0, 35, 0,143, 0, 0, 0, 54, 2, 0, 0, 0, 0, 35, 0, 78, 0, 0, 0, 55, 2, 0, 0, 0, 0, 35, 0,
-142, 0, 0, 0, 55, 2, 0, 0, 0, 0, 35, 0, 76, 0, 0, 0, 56, 2, 0, 0, 0, 0, 35, 0,142, 0, 0, 0, 56, 2, 0, 0,
- 0, 0, 35, 0, 76, 0, 0, 0, 57, 2, 0, 0, 0, 0, 33, 0, 78, 0, 0, 0, 57, 2, 0, 0, 0, 0, 33, 0, 90, 0, 0, 0,
- 58, 2, 0, 0, 0, 0, 35, 0,144, 0, 0, 0, 58, 2, 0, 0, 0, 0, 35, 0, 81, 0, 0, 0, 59, 2, 0, 0, 0, 0, 33, 0,
- 90, 0, 0, 0, 59, 2, 0, 0, 0, 0, 33, 0, 81, 0, 0, 0, 60, 2, 0, 0, 0, 0, 35, 0,144, 0, 0, 0, 60, 2, 0, 0,
- 0, 0, 35, 0,144, 0, 0, 0, 61, 2, 0, 0, 0, 0, 35, 0,145, 0, 0, 0, 61, 2, 0, 0, 0, 0, 35, 0,145, 0, 0, 0,
- 62, 2, 0, 0, 0, 0, 35, 0,146, 0, 0, 0, 62, 2, 0, 0, 0, 0, 35, 0,144, 0, 0, 0, 63, 2, 0, 0, 0, 0, 35, 0,
-146, 0, 0, 0, 63, 2, 0, 0, 0, 0, 35, 0, 63, 0, 0, 0, 64, 2, 0, 0, 0, 0, 33, 0, 91, 0, 0, 0, 64, 2, 0, 0,
- 0, 0, 33, 0, 91, 0, 0, 0, 65, 2, 0, 0, 0, 0, 35, 0,146, 0, 0, 0, 65, 2, 0, 0, 0, 0, 35, 0, 63, 0, 0, 0,
- 66, 2, 0, 0, 0, 0, 35, 0,146, 0, 0, 0, 66, 2, 0, 0, 0, 0, 35, 0, 62, 0, 0, 0, 67, 2, 0, 0, 0, 0, 35, 0,
-145, 0, 0, 0, 67, 2, 0, 0, 0, 0, 35, 0, 80, 0, 0, 0, 68, 2, 0, 0, 0, 0, 35, 0,145, 0, 0, 0, 68, 2, 0, 0,
- 0, 0, 35, 0, 62, 0, 0, 0, 69, 2, 0, 0, 0, 0, 33, 0, 80, 0, 0, 0, 69, 2, 0, 0, 0, 0, 33, 0, 94, 0, 0, 0,
- 70, 2, 0, 0, 0, 0, 35, 0,147, 0, 0, 0, 70, 2, 0, 0, 0, 0, 35, 0, 82, 0, 0, 0, 71, 2, 0, 0, 0, 0, 33, 0,
- 94, 0, 0, 0, 71, 2, 0, 0, 0, 0, 33, 0, 82, 0, 0, 0, 72, 2, 0, 0, 0, 0, 35, 0,147, 0, 0, 0, 72, 2, 0, 0,
- 0, 0, 35, 0,147, 0, 0, 0, 73, 2, 0, 0, 0, 0, 35, 0,148, 0, 0, 0, 73, 2, 0, 0, 0, 0, 35, 0,148, 0, 0, 0,
- 74, 2, 0, 0, 0, 0, 35, 0,149, 0, 0, 0, 74, 2, 0, 0, 0, 0, 35, 0,147, 0, 0, 0, 75, 2, 0, 0, 0, 0, 35, 0,
-149, 0, 0, 0, 75, 2, 0, 0, 0, 0, 35, 0, 93, 0, 0, 0, 76, 2, 0, 0, 0, 0, 33, 0, 95, 0, 0, 0, 76, 2, 0, 0,
- 0, 0, 33, 0, 95, 0, 0, 0, 77, 2, 0, 0, 0, 0, 35, 0,149, 0, 0, 0, 77, 2, 0, 0, 0, 0, 35, 0, 93, 0, 0, 0,
- 78, 2, 0, 0, 0, 0, 35, 0,149, 0, 0, 0, 78, 2, 0, 0, 0, 0, 35, 0, 92, 0, 0, 0, 79, 2, 0, 0, 0, 0, 35, 0,
-148, 0, 0, 0, 79, 2, 0, 0, 0, 0, 35, 0, 83, 0, 0, 0, 80, 2, 0, 0, 0, 0, 35, 0,148, 0, 0, 0, 80, 2, 0, 0,
- 0, 0, 35, 0, 83, 0, 0, 0, 81, 2, 0, 0, 0, 0, 33, 0, 92, 0, 0, 0, 81, 2, 0, 0, 0, 0, 33, 0, 96, 0, 0, 0,
- 82, 2, 0, 0, 0, 0, 35, 0,150, 0, 0, 0, 82, 2, 0, 0, 0, 0, 35, 0, 85, 0, 0, 0, 83, 2, 0, 0, 0, 0, 33, 0,
- 96, 0, 0, 0, 83, 2, 0, 0, 0, 0, 33, 0, 85, 0, 0, 0, 84, 2, 0, 0, 0, 0, 35, 0,150, 0, 0, 0, 84, 2, 0, 0,
- 0, 0, 35, 0,150, 0, 0, 0, 85, 2, 0, 0, 0, 0, 35, 0,151, 0, 0, 0, 85, 2, 0, 0, 0, 0, 35, 0,151, 0, 0, 0,
- 86, 2, 0, 0, 0, 0, 35, 0,152, 0, 0, 0, 86, 2, 0, 0, 0, 0, 35, 0,150, 0, 0, 0, 87, 2, 0, 0, 0, 0, 35, 0,
-152, 0, 0, 0, 87, 2, 0, 0, 0, 0, 35, 0, 95, 0, 0, 0, 88, 2, 0, 0, 0, 0, 33, 0, 97, 0, 0, 0, 88, 2, 0, 0,
- 0, 0, 33, 0, 97, 0, 0, 0, 89, 2, 0, 0, 0, 0, 35, 0,152, 0, 0, 0, 89, 2, 0, 0, 0, 0, 35, 0, 95, 0, 0, 0,
- 90, 2, 0, 0, 0, 0, 35, 0,152, 0, 0, 0, 90, 2, 0, 0, 0, 0, 35, 0, 94, 0, 0, 0, 91, 2, 0, 0, 0, 0, 35, 0,
-151, 0, 0, 0, 91, 2, 0, 0, 0, 0, 35, 0, 84, 0, 0, 0, 92, 2, 0, 0, 0, 0, 35, 0,151, 0, 0, 0, 92, 2, 0, 0,
- 0, 0, 35, 0, 84, 0, 0, 0, 93, 2, 0, 0, 0, 0, 33, 0, 94, 0, 0, 0, 93, 2, 0, 0, 0, 0, 33, 0, 98, 0, 0, 0,
- 94, 2, 0, 0, 0, 0, 35, 0,153, 0, 0, 0, 94, 2, 0, 0, 0, 0, 35, 0, 87, 0, 0, 0, 95, 2, 0, 0, 0, 0, 33, 0,
- 98, 0, 0, 0, 95, 2, 0, 0, 0, 0, 33, 0, 87, 0, 0, 0, 96, 2, 0, 0, 0, 0, 35, 0,153, 0, 0, 0, 96, 2, 0, 0,
- 0, 0, 35, 0,153, 0, 0, 0, 97, 2, 0, 0, 0, 0, 35, 0,154, 0, 0, 0, 97, 2, 0, 0, 0, 0, 35, 0,154, 0, 0, 0,
- 98, 2, 0, 0, 0, 0, 35, 0,155, 0, 0, 0, 98, 2, 0, 0, 0, 0, 35, 0,153, 0, 0, 0, 99, 2, 0, 0, 0, 0, 35, 0,
-155, 0, 0, 0, 99, 2, 0, 0, 0, 0, 35, 0, 97, 0, 0, 0,100, 2, 0, 0, 0, 0, 33, 0, 99, 0, 0, 0,100, 2, 0, 0,
- 0, 0, 33, 0, 99, 0, 0, 0,101, 2, 0, 0, 0, 0, 35, 0,155, 0, 0, 0,101, 2, 0, 0, 0, 0, 35, 0, 97, 0, 0, 0,
-102, 2, 0, 0, 0, 0, 35, 0,155, 0, 0, 0,102, 2, 0, 0, 0, 0, 35, 0, 96, 0, 0, 0,103, 2, 0, 0, 0, 0, 35, 0,
-154, 0, 0, 0,103, 2, 0, 0, 0, 0, 35, 0, 86, 0, 0, 0,104, 2, 0, 0, 0, 0, 35, 0,154, 0, 0, 0,104, 2, 0, 0,
- 0, 0, 35, 0, 86, 0, 0, 0,105, 2, 0, 0, 0, 0, 33, 0, 96, 0, 0, 0,105, 2, 0, 0, 0, 0, 33, 0,100, 0, 0, 0,
-106, 2, 0, 0, 0, 0, 35, 0,156, 0, 0, 0,106, 2, 0, 0, 0, 0, 35, 0, 89, 0, 0, 0,107, 2, 0, 0, 0, 0, 33, 0,
-100, 0, 0, 0,107, 2, 0, 0, 0, 0, 33, 0, 89, 0, 0, 0,108, 2, 0, 0, 0, 0, 35, 0,156, 0, 0, 0,108, 2, 0, 0,
- 0, 0, 35, 0,156, 0, 0, 0,109, 2, 0, 0, 0, 0, 35, 0,157, 0, 0, 0,109, 2, 0, 0, 0, 0, 35, 0,157, 0, 0, 0,
-110, 2, 0, 0, 0, 0, 35, 0,158, 0, 0, 0,110, 2, 0, 0, 0, 0, 35, 0,156, 0, 0, 0,111, 2, 0, 0, 0, 0, 35, 0,
-158, 0, 0, 0,111, 2, 0, 0, 0, 0, 35, 0, 99, 0, 0, 0,112, 2, 0, 0, 0, 0, 33, 0,101, 0, 0, 0,112, 2, 0, 0,
- 0, 0, 33, 0,101, 0, 0, 0,113, 2, 0, 0, 0, 0, 35, 0,158, 0, 0, 0,113, 2, 0, 0, 0, 0, 35, 0, 99, 0, 0, 0,
-114, 2, 0, 0, 0, 0, 35, 0,158, 0, 0, 0,114, 2, 0, 0, 0, 0, 35, 0, 98, 0, 0, 0,115, 2, 0, 0, 0, 0, 35, 0,
-157, 0, 0, 0,115, 2, 0, 0, 0, 0, 35, 0, 88, 0, 0, 0,116, 2, 0, 0, 0, 0, 35, 0,157, 0, 0, 0,116, 2, 0, 0,
- 0, 0, 35, 0, 88, 0, 0, 0,117, 2, 0, 0, 0, 0, 33, 0, 98, 0, 0, 0,117, 2, 0, 0, 0, 0, 33, 0, 92, 0, 0, 0,
-118, 2, 0, 0, 0, 0, 35, 0,159, 0, 0, 0,118, 2, 0, 0, 0, 0, 35, 0, 91, 0, 0, 0,119, 2, 0, 0, 0, 0, 33, 0,
- 92, 0, 0, 0,119, 2, 0, 0, 0, 0, 33, 0, 91, 0, 0, 0,120, 2, 0, 0, 0, 0, 35, 0,159, 0, 0, 0,120, 2, 0, 0,
- 0, 0, 35, 0,159, 0, 0, 0,121, 2, 0, 0, 0, 0, 35, 0,160, 0, 0, 0,121, 2, 0, 0, 0, 0, 35, 0,160, 0, 0, 0,
-122, 2, 0, 0, 0, 0, 35, 0,161, 0, 0, 0,122, 2, 0, 0, 0, 0, 35, 0,159, 0, 0, 0,123, 2, 0, 0, 0, 0, 35, 0,
-161, 0, 0, 0,123, 2, 0, 0, 0, 0, 35, 0, 93, 0, 0, 0,124, 2, 0, 0, 0, 0, 33, 0,101, 0, 0, 0,124, 2, 0, 0,
- 0, 0, 33, 0, 93, 0, 0, 0,125, 2, 0, 0, 0, 0, 35, 0,161, 0, 0, 0,125, 2, 0, 0, 0, 0, 35, 0,101, 0, 0, 0,
-126, 2, 0, 0, 0, 0, 35, 0,161, 0, 0, 0,126, 2, 0, 0, 0, 0, 35, 0,100, 0, 0, 0,127, 2, 0, 0, 0, 0, 35, 0,
-160, 0, 0, 0,127, 2, 0, 0, 0, 0, 35, 0, 90, 0, 0, 0,128, 2, 0, 0, 0, 0, 35, 0,160, 0, 0, 0,128, 2, 0, 0,
- 0, 0, 35, 0, 90, 0, 0, 0,129, 2, 0, 0, 0, 0, 33, 0,100, 0, 0, 0,129, 2, 0, 0, 0, 0, 33, 0, 27, 1, 0, 0,
-146, 1, 0, 0, 0, 0, 35, 0,171, 0, 0, 0,146, 1, 0, 0, 0, 0, 35, 0,171, 0, 0, 0, 27, 1, 0, 0, 0, 0, 35, 0,
-146, 1, 0, 0,147, 1, 0, 0, 0, 0, 35, 0,146, 1, 0, 0,148, 1, 0, 0, 0, 0, 35, 0,147, 1, 0, 0,148, 1, 0, 0,
- 0, 0, 35, 0,165, 0, 0, 0, 26, 1, 0, 0, 0, 0, 35, 0,165, 0, 0, 0,148, 1, 0, 0, 0, 0, 35, 0, 26, 1, 0, 0,
-148, 1, 0, 0, 0, 0, 35, 0,164, 0, 0, 0,147, 1, 0, 0, 0, 0, 35, 0,164, 0, 0, 0,170, 0, 0, 0, 0, 0, 35, 0,
-170, 0, 0, 0,147, 1, 0, 0, 0, 0, 35, 0, 26, 1, 0, 0,149, 1, 0, 0, 0, 0, 35, 0, 28, 1, 0, 0,149, 1, 0, 0,
- 0, 0, 35, 0, 26, 1, 0, 0, 28, 1, 0, 0, 0, 0, 35, 0,149, 1, 0, 0,150, 1, 0, 0, 0, 0, 35, 0,149, 1, 0, 0,
-151, 1, 0, 0, 0, 0, 35, 0,150, 1, 0, 0,151, 1, 0, 0, 0, 0, 35, 0, 27, 1, 0, 0, 31, 1, 0, 0, 0, 0, 35, 0,
- 31, 1, 0, 0,151, 1, 0, 0, 0, 0, 35, 0, 27, 1, 0, 0,151, 1, 0, 0, 0, 0, 35, 0, 30, 1, 0, 0,150, 1, 0, 0,
- 0, 0, 35, 0, 29, 1, 0, 0, 30, 1, 0, 0, 0, 0, 35, 0, 29, 1, 0, 0,150, 1, 0, 0, 0, 0, 35, 0,168, 0, 0, 0,
-152, 1, 0, 0, 0, 0, 35, 0,172, 0, 0, 0,152, 1, 0, 0, 0, 0, 35, 0,168, 0, 0, 0,172, 0, 0, 0, 0, 0, 35, 0,
-152, 1, 0, 0,153, 1, 0, 0, 0, 0, 35, 0,152, 1, 0, 0,154, 1, 0, 0, 0, 0, 35, 0,153, 1, 0, 0,154, 1, 0, 0,
- 0, 0, 35, 0,169, 0, 0, 0, 30, 1, 0, 0, 0, 0, 35, 0, 30, 1, 0, 0,154, 1, 0, 0, 0, 0, 35, 0,169, 0, 0, 0,
-154, 1, 0, 0, 0, 0, 35, 0, 31, 1, 0, 0,153, 1, 0, 0, 0, 0, 35, 0,173, 0, 0, 0, 31, 1, 0, 0, 0, 0, 35, 0,
-173, 0, 0, 0,153, 1, 0, 0, 0, 0, 35, 0,167, 0, 0, 0,155, 1, 0, 0, 0, 0, 35, 0, 29, 1, 0, 0,155, 1, 0, 0,
- 0, 0, 35, 0,167, 0, 0, 0, 29, 1, 0, 0, 0, 0, 35, 0,155, 1, 0, 0,156, 1, 0, 0, 0, 0, 35, 0,155, 1, 0, 0,
-157, 1, 0, 0, 0, 0, 35, 0,156, 1, 0, 0,157, 1, 0, 0, 0, 0, 35, 0,162, 0, 0, 0,166, 0, 0, 0, 0, 0, 35, 0,
-162, 0, 0, 0,157, 1, 0, 0, 0, 0, 35, 0,166, 0, 0, 0,157, 1, 0, 0, 0, 0, 35, 0,163, 0, 0, 0,156, 1, 0, 0,
- 0, 0, 35, 0,163, 0, 0, 0, 28, 1, 0, 0, 0, 0, 35, 0, 28, 1, 0, 0,156, 1, 0, 0, 0, 0, 35, 0, 33, 1, 0, 0,
-158, 1, 0, 0, 0, 0, 35, 0,179, 0, 0, 0, 33, 1, 0, 0, 0, 0, 35, 0,179, 0, 0, 0,158, 1, 0, 0, 0, 0, 35, 0,
-158, 1, 0, 0,159, 1, 0, 0, 0, 0, 35, 0,159, 1, 0, 0,160, 1, 0, 0, 0, 0, 35, 0,158, 1, 0, 0,160, 1, 0, 0,
- 0, 0, 35, 0,165, 0, 0, 0, 32, 1, 0, 0, 0, 0, 35, 0, 32, 1, 0, 0,160, 1, 0, 0, 0, 0, 35, 0,165, 0, 0, 0,
-160, 1, 0, 0, 0, 0, 35, 0,164, 0, 0, 0,159, 1, 0, 0, 0, 0, 35, 0,178, 0, 0, 0,159, 1, 0, 0, 0, 0, 35, 0,
-164, 0, 0, 0,178, 0, 0, 0, 0, 0, 35, 0, 32, 1, 0, 0,161, 1, 0, 0, 0, 0, 35, 0, 32, 1, 0, 0, 34, 1, 0, 0,
- 0, 0, 35, 0, 34, 1, 0, 0,161, 1, 0, 0, 0, 0, 35, 0,161, 1, 0, 0,162, 1, 0, 0, 0, 0, 35, 0,162, 1, 0, 0,
-163, 1, 0, 0, 0, 0, 35, 0,161, 1, 0, 0,163, 1, 0, 0, 0, 0, 35, 0, 33, 1, 0, 0, 37, 1, 0, 0, 0, 0, 35, 0,
- 33, 1, 0, 0,163, 1, 0, 0, 0, 0, 35, 0, 37, 1, 0, 0,163, 1, 0, 0, 0, 0, 35, 0, 36, 1, 0, 0,162, 1, 0, 0,
- 0, 0, 35, 0, 35, 1, 0, 0,162, 1, 0, 0, 0, 0, 35, 0, 35, 1, 0, 0, 36, 1, 0, 0, 0, 0, 35, 0,176, 0, 0, 0,
-164, 1, 0, 0, 0, 0, 35, 0,176, 0, 0, 0,180, 0, 0, 0, 0, 0, 35, 0,180, 0, 0, 0,164, 1, 0, 0, 0, 0, 35, 0,
-164, 1, 0, 0,165, 1, 0, 0, 0, 0, 35, 0,165, 1, 0, 0,166, 1, 0, 0, 0, 0, 35, 0,164, 1, 0, 0,166, 1, 0, 0,
- 0, 0, 35, 0,177, 0, 0, 0, 36, 1, 0, 0, 0, 0, 35, 0,177, 0, 0, 0,166, 1, 0, 0, 0, 0, 35, 0, 36, 1, 0, 0,
-166, 1, 0, 0, 0, 0, 35, 0, 37, 1, 0, 0,165, 1, 0, 0, 0, 0, 35, 0,181, 0, 0, 0,165, 1, 0, 0, 0, 0, 35, 0,
-181, 0, 0, 0, 37, 1, 0, 0, 0, 0, 35, 0,175, 0, 0, 0,167, 1, 0, 0, 0, 0, 35, 0,175, 0, 0, 0, 35, 1, 0, 0,
- 0, 0, 35, 0, 35, 1, 0, 0,167, 1, 0, 0, 0, 0, 35, 0,167, 1, 0, 0,168, 1, 0, 0, 0, 0, 35, 0,168, 1, 0, 0,
-169, 1, 0, 0, 0, 0, 35, 0,167, 1, 0, 0,169, 1, 0, 0, 0, 0, 35, 0,162, 0, 0, 0,174, 0, 0, 0, 0, 0, 35, 0,
-174, 0, 0, 0,169, 1, 0, 0, 0, 0, 35, 0,162, 0, 0, 0,169, 1, 0, 0, 0, 0, 35, 0,163, 0, 0, 0,168, 1, 0, 0,
- 0, 0, 35, 0, 34, 1, 0, 0,168, 1, 0, 0, 0, 0, 35, 0,163, 0, 0, 0, 34, 1, 0, 0, 0, 0, 35, 0, 39, 1, 0, 0,
-170, 1, 0, 0, 0, 0, 35, 0,187, 0, 0, 0,170, 1, 0, 0, 0, 0, 35, 0,187, 0, 0, 0, 39, 1, 0, 0, 0, 0, 35, 0,
-170, 1, 0, 0,171, 1, 0, 0, 0, 0, 35, 0,170, 1, 0, 0,172, 1, 0, 0, 0, 0, 35, 0,171, 1, 0, 0,172, 1, 0, 0,
- 0, 0, 35, 0,169, 0, 0, 0, 38, 1, 0, 0, 0, 0, 35, 0,169, 0, 0, 0,172, 1, 0, 0, 0, 0, 35, 0, 38, 1, 0, 0,
-172, 1, 0, 0, 0, 0, 35, 0,168, 0, 0, 0,171, 1, 0, 0, 0, 0, 35, 0,168, 0, 0, 0,186, 0, 0, 0, 0, 0, 35, 0,
-186, 0, 0, 0,171, 1, 0, 0, 0, 0, 35, 0, 38, 1, 0, 0,173, 1, 0, 0, 0, 0, 35, 0, 40, 1, 0, 0,173, 1, 0, 0,
- 0, 0, 35, 0, 38, 1, 0, 0, 40, 1, 0, 0, 0, 0, 35, 0,173, 1, 0, 0,174, 1, 0, 0, 0, 0, 35, 0,173, 1, 0, 0,
-175, 1, 0, 0, 0, 0, 35, 0,174, 1, 0, 0,175, 1, 0, 0, 0, 0, 35, 0, 39, 1, 0, 0, 43, 1, 0, 0, 0, 0, 35, 0,
- 43, 1, 0, 0,175, 1, 0, 0, 0, 0, 35, 0, 39, 1, 0, 0,175, 1, 0, 0, 0, 0, 35, 0, 42, 1, 0, 0,174, 1, 0, 0,
- 0, 0, 35, 0, 41, 1, 0, 0, 42, 1, 0, 0, 0, 0, 35, 0, 41, 1, 0, 0,174, 1, 0, 0, 0, 0, 35, 0,184, 0, 0, 0,
-176, 1, 0, 0, 0, 0, 35, 0,188, 0, 0, 0,176, 1, 0, 0, 0, 0, 35, 0,184, 0, 0, 0,188, 0, 0, 0, 0, 0, 35, 0,
-176, 1, 0, 0,177, 1, 0, 0, 0, 0, 35, 0,176, 1, 0, 0,178, 1, 0, 0, 0, 0, 35, 0,177, 1, 0, 0,178, 1, 0, 0,
- 0, 0, 35, 0,185, 0, 0, 0, 42, 1, 0, 0, 0, 0, 35, 0, 42, 1, 0, 0,178, 1, 0, 0, 0, 0, 35, 0,185, 0, 0, 0,
-178, 1, 0, 0, 0, 0, 35, 0, 43, 1, 0, 0,177, 1, 0, 0, 0, 0, 35, 0,189, 0, 0, 0, 43, 1, 0, 0, 0, 0, 35, 0,
-189, 0, 0, 0,177, 1, 0, 0, 0, 0, 35, 0,183, 0, 0, 0,179, 1, 0, 0, 0, 0, 35, 0, 41, 1, 0, 0,179, 1, 0, 0,
- 0, 0, 35, 0,183, 0, 0, 0, 41, 1, 0, 0, 0, 0, 35, 0,179, 1, 0, 0,180, 1, 0, 0, 0, 0, 35, 0,179, 1, 0, 0,
-181, 1, 0, 0, 0, 0, 35, 0,180, 1, 0, 0,181, 1, 0, 0, 0, 0, 35, 0,166, 0, 0, 0,182, 0, 0, 0, 0, 0, 35, 0,
-166, 0, 0, 0,181, 1, 0, 0, 0, 0, 35, 0,182, 0, 0, 0,181, 1, 0, 0, 0, 0, 35, 0,167, 0, 0, 0,180, 1, 0, 0,
- 0, 0, 35, 0,167, 0, 0, 0, 40, 1, 0, 0, 0, 0, 35, 0, 40, 1, 0, 0,180, 1, 0, 0, 0, 0, 35, 0, 45, 1, 0, 0,
-182, 1, 0, 0, 0, 0, 35, 0,195, 0, 0, 0,182, 1, 0, 0, 0, 0, 35, 0,195, 0, 0, 0, 45, 1, 0, 0, 0, 0, 35, 0,
-182, 1, 0, 0,183, 1, 0, 0, 0, 0, 35, 0,182, 1, 0, 0,184, 1, 0, 0, 0, 0, 35, 0,183, 1, 0, 0,184, 1, 0, 0,
- 0, 0, 35, 0,185, 0, 0, 0, 44, 1, 0, 0, 0, 0, 35, 0,185, 0, 0, 0,184, 1, 0, 0, 0, 0, 35, 0, 44, 1, 0, 0,
-184, 1, 0, 0, 0, 0, 35, 0,184, 0, 0, 0,183, 1, 0, 0, 0, 0, 35, 0,184, 0, 0, 0,194, 0, 0, 0, 0, 0, 35, 0,
-194, 0, 0, 0,183, 1, 0, 0, 0, 0, 35, 0, 44, 1, 0, 0,185, 1, 0, 0, 0, 0, 35, 0, 46, 1, 0, 0,185, 1, 0, 0,
- 0, 0, 35, 0, 44, 1, 0, 0, 46, 1, 0, 0, 0, 0, 35, 0,185, 1, 0, 0,186, 1, 0, 0, 0, 0, 35, 0,185, 1, 0, 0,
-187, 1, 0, 0, 0, 0, 35, 0,186, 1, 0, 0,187, 1, 0, 0, 0, 0, 35, 0, 45, 1, 0, 0, 49, 1, 0, 0, 0, 0, 35, 0,
- 49, 1, 0, 0,187, 1, 0, 0, 0, 0, 35, 0, 45, 1, 0, 0,187, 1, 0, 0, 0, 0, 35, 0, 48, 1, 0, 0,186, 1, 0, 0,
- 0, 0, 35, 0, 47, 1, 0, 0, 48, 1, 0, 0, 0, 0, 35, 0, 47, 1, 0, 0,186, 1, 0, 0, 0, 0, 35, 0,192, 0, 0, 0,
-188, 1, 0, 0, 0, 0, 35, 0,196, 0, 0, 0,188, 1, 0, 0, 0, 0, 35, 0,192, 0, 0, 0,196, 0, 0, 0, 0, 0, 35, 0,
-188, 1, 0, 0,189, 1, 0, 0, 0, 0, 35, 0,188, 1, 0, 0,190, 1, 0, 0, 0, 0, 35, 0,189, 1, 0, 0,190, 1, 0, 0,
- 0, 0, 35, 0,193, 0, 0, 0, 48, 1, 0, 0, 0, 0, 35, 0, 48, 1, 0, 0,190, 1, 0, 0, 0, 0, 35, 0,193, 0, 0, 0,
-190, 1, 0, 0, 0, 0, 35, 0, 49, 1, 0, 0,189, 1, 0, 0, 0, 0, 35, 0,197, 0, 0, 0, 49, 1, 0, 0, 0, 0, 35, 0,
-197, 0, 0, 0,189, 1, 0, 0, 0, 0, 35, 0,191, 0, 0, 0,191, 1, 0, 0, 0, 0, 35, 0, 47, 1, 0, 0,191, 1, 0, 0,
- 0, 0, 35, 0,191, 0, 0, 0, 47, 1, 0, 0, 0, 0, 35, 0,191, 1, 0, 0,192, 1, 0, 0, 0, 0, 35, 0,191, 1, 0, 0,
-193, 1, 0, 0, 0, 0, 35, 0,192, 1, 0, 0,193, 1, 0, 0, 0, 0, 35, 0,182, 0, 0, 0,190, 0, 0, 0, 0, 0, 35, 0,
-182, 0, 0, 0,193, 1, 0, 0, 0, 0, 35, 0,190, 0, 0, 0,193, 1, 0, 0, 0, 0, 35, 0,183, 0, 0, 0,192, 1, 0, 0,
- 0, 0, 35, 0,183, 0, 0, 0, 46, 1, 0, 0, 0, 0, 35, 0, 46, 1, 0, 0,192, 1, 0, 0, 0, 0, 35, 0, 51, 1, 0, 0,
-194, 1, 0, 0, 0, 0, 35, 0,199, 0, 0, 0,194, 1, 0, 0, 0, 0, 35, 0,199, 0, 0, 0, 51, 1, 0, 0, 0, 0, 35, 0,
-194, 1, 0, 0,195, 1, 0, 0, 0, 0, 35, 0,194, 1, 0, 0,196, 1, 0, 0, 0, 0, 35, 0,195, 1, 0, 0,196, 1, 0, 0,
- 0, 0, 35, 0,193, 0, 0, 0, 50, 1, 0, 0, 0, 0, 35, 0,193, 0, 0, 0,196, 1, 0, 0, 0, 0, 35, 0, 50, 1, 0, 0,
-196, 1, 0, 0, 0, 0, 35, 0,192, 0, 0, 0,195, 1, 0, 0, 0, 0, 35, 0,192, 0, 0, 0,198, 0, 0, 0, 0, 0, 35, 0,
-198, 0, 0, 0,195, 1, 0, 0, 0, 0, 35, 0, 50, 1, 0, 0,197, 1, 0, 0, 0, 0, 35, 0, 53, 1, 0, 0,197, 1, 0, 0,
- 0, 0, 35, 0, 50, 1, 0, 0, 53, 1, 0, 0, 0, 0, 35, 0,197, 1, 0, 0,198, 1, 0, 0, 0, 0, 35, 0,197, 1, 0, 0,
-199, 1, 0, 0, 0, 0, 35, 0,198, 1, 0, 0,199, 1, 0, 0, 0, 0, 35, 0, 51, 1, 0, 0, 55, 1, 0, 0, 0, 0, 35, 0,
- 55, 1, 0, 0,199, 1, 0, 0, 0, 0, 35, 0, 51, 1, 0, 0,199, 1, 0, 0, 0, 0, 35, 0, 54, 1, 0, 0,198, 1, 0, 0,
- 0, 0, 35, 0, 52, 1, 0, 0, 54, 1, 0, 0, 0, 0, 35, 0, 52, 1, 0, 0,198, 1, 0, 0, 0, 0, 35, 0,176, 0, 0, 0,
-200, 1, 0, 0, 0, 0, 35, 0,200, 0, 0, 0,200, 1, 0, 0, 0, 0, 35, 0,176, 0, 0, 0,200, 0, 0, 0, 0, 0, 35, 0,
-200, 1, 0, 0,201, 1, 0, 0, 0, 0, 35, 0,200, 1, 0, 0,202, 1, 0, 0, 0, 0, 35, 0,201, 1, 0, 0,202, 1, 0, 0,
- 0, 0, 35, 0,177, 0, 0, 0, 54, 1, 0, 0, 0, 0, 35, 0, 54, 1, 0, 0,202, 1, 0, 0, 0, 0, 35, 0,177, 0, 0, 0,
-202, 1, 0, 0, 0, 0, 35, 0, 55, 1, 0, 0,201, 1, 0, 0, 0, 0, 35, 0,201, 0, 0, 0, 55, 1, 0, 0, 0, 0, 35, 0,
-201, 0, 0, 0,201, 1, 0, 0, 0, 0, 35, 0,175, 0, 0, 0,203, 1, 0, 0, 0, 0, 35, 0, 52, 1, 0, 0,203, 1, 0, 0,
- 0, 0, 35, 0,175, 0, 0, 0, 52, 1, 0, 0, 0, 0, 35, 0,203, 1, 0, 0,204, 1, 0, 0, 0, 0, 35, 0,203, 1, 0, 0,
-205, 1, 0, 0, 0, 0, 35, 0,204, 1, 0, 0,205, 1, 0, 0, 0, 0, 35, 0,174, 0, 0, 0,190, 0, 0, 0, 0, 0, 35, 0,
-190, 0, 0, 0,205, 1, 0, 0, 0, 0, 35, 0,174, 0, 0, 0,205, 1, 0, 0, 0, 0, 35, 0,191, 0, 0, 0,204, 1, 0, 0,
- 0, 0, 35, 0,191, 0, 0, 0, 53, 1, 0, 0, 0, 0, 35, 0, 53, 1, 0, 0,204, 1, 0, 0, 0, 0, 35, 0, 57, 1, 0, 0,
-206, 1, 0, 0, 0, 0, 35, 0,207, 0, 0, 0, 57, 1, 0, 0, 0, 0, 35, 0,207, 0, 0, 0,206, 1, 0, 0, 0, 0, 35, 0,
-206, 1, 0, 0,207, 1, 0, 0, 0, 0, 35, 0,207, 1, 0, 0,208, 1, 0, 0, 0, 0, 35, 0,206, 1, 0, 0,208, 1, 0, 0,
- 0, 0, 35, 0,179, 0, 0, 0, 56, 1, 0, 0, 0, 0, 35, 0, 56, 1, 0, 0,208, 1, 0, 0, 0, 0, 35, 0,179, 0, 0, 0,
-208, 1, 0, 0, 0, 0, 35, 0,178, 0, 0, 0,207, 1, 0, 0, 0, 0, 35, 0,206, 0, 0, 0,207, 1, 0, 0, 0, 0, 35, 0,
-178, 0, 0, 0,206, 0, 0, 0, 0, 0, 35, 0, 56, 1, 0, 0,209, 1, 0, 0, 0, 0, 35, 0, 56, 1, 0, 0, 58, 1, 0, 0,
- 0, 0, 35, 0, 58, 1, 0, 0,209, 1, 0, 0, 0, 0, 35, 0,209, 1, 0, 0,210, 1, 0, 0, 0, 0, 35, 0,210, 1, 0, 0,
-211, 1, 0, 0, 0, 0, 35, 0,209, 1, 0, 0,211, 1, 0, 0, 0, 0, 35, 0, 57, 1, 0, 0, 61, 1, 0, 0, 0, 0, 35, 0,
- 57, 1, 0, 0,211, 1, 0, 0, 0, 0, 35, 0, 61, 1, 0, 0,211, 1, 0, 0, 0, 0, 35, 0, 60, 1, 0, 0,210, 1, 0, 0,
- 0, 0, 35, 0, 59, 1, 0, 0,210, 1, 0, 0, 0, 0, 35, 0, 59, 1, 0, 0, 60, 1, 0, 0, 0, 0, 35, 0,204, 0, 0, 0,
-212, 1, 0, 0, 0, 0, 35, 0,204, 0, 0, 0,208, 0, 0, 0, 0, 0, 35, 0,208, 0, 0, 0,212, 1, 0, 0, 0, 0, 35, 0,
-212, 1, 0, 0,213, 1, 0, 0, 0, 0, 35, 0,213, 1, 0, 0,214, 1, 0, 0, 0, 0, 35, 0,212, 1, 0, 0,214, 1, 0, 0,
- 0, 0, 35, 0,205, 0, 0, 0, 60, 1, 0, 0, 0, 0, 35, 0,205, 0, 0, 0,214, 1, 0, 0, 0, 0, 35, 0, 60, 1, 0, 0,
-214, 1, 0, 0, 0, 0, 35, 0, 61, 1, 0, 0,213, 1, 0, 0, 0, 0, 35, 0,209, 0, 0, 0,213, 1, 0, 0, 0, 0, 35, 0,
-209, 0, 0, 0, 61, 1, 0, 0, 0, 0, 35, 0,203, 0, 0, 0,215, 1, 0, 0, 0, 0, 35, 0,203, 0, 0, 0, 59, 1, 0, 0,
- 0, 0, 35, 0, 59, 1, 0, 0,215, 1, 0, 0, 0, 0, 35, 0,215, 1, 0, 0,216, 1, 0, 0, 0, 0, 35, 0,216, 1, 0, 0,
-217, 1, 0, 0, 0, 0, 35, 0,215, 1, 0, 0,217, 1, 0, 0, 0, 0, 35, 0,180, 0, 0, 0,202, 0, 0, 0, 0, 0, 35, 0,
-202, 0, 0, 0,217, 1, 0, 0, 0, 0, 35, 0,180, 0, 0, 0,217, 1, 0, 0, 0, 0, 35, 0,181, 0, 0, 0,216, 1, 0, 0,
- 0, 0, 35, 0, 58, 1, 0, 0,216, 1, 0, 0, 0, 0, 35, 0,181, 0, 0, 0, 58, 1, 0, 0, 0, 0, 35, 0, 63, 1, 0, 0,
-218, 1, 0, 0, 0, 0, 35, 0,215, 0, 0, 0, 63, 1, 0, 0, 0, 0, 35, 0,215, 0, 0, 0,218, 1, 0, 0, 0, 0, 35, 0,
-218, 1, 0, 0,219, 1, 0, 0, 0, 0, 35, 0,219, 1, 0, 0,220, 1, 0, 0, 0, 0, 35, 0,218, 1, 0, 0,220, 1, 0, 0,
- 0, 0, 35, 0,173, 0, 0, 0, 62, 1, 0, 0, 0, 0, 35, 0, 62, 1, 0, 0,220, 1, 0, 0, 0, 0, 35, 0,173, 0, 0, 0,
-220, 1, 0, 0, 0, 0, 35, 0,172, 0, 0, 0,219, 1, 0, 0, 0, 0, 35, 0,214, 0, 0, 0,219, 1, 0, 0, 0, 0, 35, 0,
-172, 0, 0, 0,214, 0, 0, 0, 0, 0, 35, 0, 62, 1, 0, 0,221, 1, 0, 0, 0, 0, 35, 0, 62, 1, 0, 0, 64, 1, 0, 0,
- 0, 0, 35, 0, 64, 1, 0, 0,221, 1, 0, 0, 0, 0, 35, 0,221, 1, 0, 0,222, 1, 0, 0, 0, 0, 35, 0,222, 1, 0, 0,
-223, 1, 0, 0, 0, 0, 35, 0,221, 1, 0, 0,223, 1, 0, 0, 0, 0, 35, 0, 63, 1, 0, 0, 67, 1, 0, 0, 0, 0, 35, 0,
- 63, 1, 0, 0,223, 1, 0, 0, 0, 0, 35, 0, 67, 1, 0, 0,223, 1, 0, 0, 0, 0, 35, 0, 66, 1, 0, 0,222, 1, 0, 0,
- 0, 0, 35, 0, 65, 1, 0, 0,222, 1, 0, 0, 0, 0, 35, 0, 65, 1, 0, 0, 66, 1, 0, 0, 0, 0, 35, 0,212, 0, 0, 0,
-224, 1, 0, 0, 0, 0, 35, 0,212, 0, 0, 0,216, 0, 0, 0, 0, 0, 35, 0,216, 0, 0, 0,224, 1, 0, 0, 0, 0, 35, 0,
-224, 1, 0, 0,225, 1, 0, 0, 0, 0, 35, 0,225, 1, 0, 0,226, 1, 0, 0, 0, 0, 35, 0,224, 1, 0, 0,226, 1, 0, 0,
- 0, 0, 35, 0,213, 0, 0, 0, 66, 1, 0, 0, 0, 0, 35, 0,213, 0, 0, 0,226, 1, 0, 0, 0, 0, 35, 0, 66, 1, 0, 0,
-226, 1, 0, 0, 0, 0, 35, 0, 67, 1, 0, 0,225, 1, 0, 0, 0, 0, 35, 0,217, 0, 0, 0,225, 1, 0, 0, 0, 0, 35, 0,
-217, 0, 0, 0, 67, 1, 0, 0, 0, 0, 35, 0,211, 0, 0, 0,227, 1, 0, 0, 0, 0, 35, 0,211, 0, 0, 0, 65, 1, 0, 0,
- 0, 0, 35, 0, 65, 1, 0, 0,227, 1, 0, 0, 0, 0, 35, 0,227, 1, 0, 0,228, 1, 0, 0, 0, 0, 35, 0,228, 1, 0, 0,
-229, 1, 0, 0, 0, 0, 35, 0,227, 1, 0, 0,229, 1, 0, 0, 0, 0, 35, 0,170, 0, 0, 0,210, 0, 0, 0, 0, 0, 35, 0,
-210, 0, 0, 0,229, 1, 0, 0, 0, 0, 35, 0,170, 0, 0, 0,229, 1, 0, 0, 0, 0, 35, 0,171, 0, 0, 0,228, 1, 0, 0,
- 0, 0, 35, 0, 64, 1, 0, 0,228, 1, 0, 0, 0, 0, 35, 0,171, 0, 0, 0, 64, 1, 0, 0, 0, 0, 35, 0, 69, 1, 0, 0,
-230, 1, 0, 0, 0, 0, 35, 0,223, 0, 0, 0, 69, 1, 0, 0, 0, 0, 35, 0,223, 0, 0, 0,230, 1, 0, 0, 0, 0, 35, 0,
-230, 1, 0, 0,231, 1, 0, 0, 0, 0, 35, 0,231, 1, 0, 0,232, 1, 0, 0, 0, 0, 35, 0,230, 1, 0, 0,232, 1, 0, 0,
- 0, 0, 35, 0,189, 0, 0, 0, 68, 1, 0, 0, 0, 0, 35, 0, 68, 1, 0, 0,232, 1, 0, 0, 0, 0, 35, 0,189, 0, 0, 0,
-232, 1, 0, 0, 0, 0, 35, 0,188, 0, 0, 0,231, 1, 0, 0, 0, 0, 35, 0,222, 0, 0, 0,231, 1, 0, 0, 0, 0, 35, 0,
-188, 0, 0, 0,222, 0, 0, 0, 0, 0, 35, 0, 68, 1, 0, 0,233, 1, 0, 0, 0, 0, 35, 0, 68, 1, 0, 0, 70, 1, 0, 0,
- 0, 0, 35, 0, 70, 1, 0, 0,233, 1, 0, 0, 0, 0, 35, 0,233, 1, 0, 0,234, 1, 0, 0, 0, 0, 35, 0,234, 1, 0, 0,
-235, 1, 0, 0, 0, 0, 35, 0,233, 1, 0, 0,235, 1, 0, 0, 0, 0, 35, 0, 69, 1, 0, 0, 73, 1, 0, 0, 0, 0, 35, 0,
- 69, 1, 0, 0,235, 1, 0, 0, 0, 0, 35, 0, 73, 1, 0, 0,235, 1, 0, 0, 0, 0, 35, 0, 72, 1, 0, 0,234, 1, 0, 0,
- 0, 0, 35, 0, 71, 1, 0, 0,234, 1, 0, 0, 0, 0, 35, 0, 71, 1, 0, 0, 72, 1, 0, 0, 0, 0, 35, 0,220, 0, 0, 0,
-236, 1, 0, 0, 0, 0, 35, 0,220, 0, 0, 0,224, 0, 0, 0, 0, 0, 35, 0,224, 0, 0, 0,236, 1, 0, 0, 0, 0, 35, 0,
-236, 1, 0, 0,237, 1, 0, 0, 0, 0, 35, 0,237, 1, 0, 0,238, 1, 0, 0, 0, 0, 35, 0,236, 1, 0, 0,238, 1, 0, 0,
- 0, 0, 35, 0,221, 0, 0, 0, 72, 1, 0, 0, 0, 0, 35, 0,221, 0, 0, 0,238, 1, 0, 0, 0, 0, 35, 0, 72, 1, 0, 0,
-238, 1, 0, 0, 0, 0, 35, 0, 73, 1, 0, 0,237, 1, 0, 0, 0, 0, 35, 0,225, 0, 0, 0,237, 1, 0, 0, 0, 0, 35, 0,
-225, 0, 0, 0, 73, 1, 0, 0, 0, 0, 35, 0,219, 0, 0, 0,239, 1, 0, 0, 0, 0, 35, 0,219, 0, 0, 0, 71, 1, 0, 0,
- 0, 0, 35, 0, 71, 1, 0, 0,239, 1, 0, 0, 0, 0, 35, 0,239, 1, 0, 0,240, 1, 0, 0, 0, 0, 35, 0,240, 1, 0, 0,
-241, 1, 0, 0, 0, 0, 35, 0,239, 1, 0, 0,241, 1, 0, 0, 0, 0, 35, 0,186, 0, 0, 0,218, 0, 0, 0, 0, 0, 35, 0,
-218, 0, 0, 0,241, 1, 0, 0, 0, 0, 35, 0,186, 0, 0, 0,241, 1, 0, 0, 0, 0, 35, 0,187, 0, 0, 0,240, 1, 0, 0,
- 0, 0, 35, 0, 70, 1, 0, 0,240, 1, 0, 0, 0, 0, 35, 0,187, 0, 0, 0, 70, 1, 0, 0, 0, 0, 35, 0, 75, 1, 0, 0,
-242, 1, 0, 0, 0, 0, 35, 0,231, 0, 0, 0, 75, 1, 0, 0, 0, 0, 35, 0,231, 0, 0, 0,242, 1, 0, 0, 0, 0, 35, 0,
-242, 1, 0, 0,243, 1, 0, 0, 0, 0, 35, 0,243, 1, 0, 0,244, 1, 0, 0, 0, 0, 35, 0,242, 1, 0, 0,244, 1, 0, 0,
- 0, 0, 35, 0,197, 0, 0, 0, 74, 1, 0, 0, 0, 0, 35, 0, 74, 1, 0, 0,244, 1, 0, 0, 0, 0, 35, 0,197, 0, 0, 0,
-244, 1, 0, 0, 0, 0, 35, 0,196, 0, 0, 0,243, 1, 0, 0, 0, 0, 35, 0,230, 0, 0, 0,243, 1, 0, 0, 0, 0, 35, 0,
-196, 0, 0, 0,230, 0, 0, 0, 0, 0, 35, 0, 74, 1, 0, 0,245, 1, 0, 0, 0, 0, 35, 0, 74, 1, 0, 0, 76, 1, 0, 0,
- 0, 0, 35, 0, 76, 1, 0, 0,245, 1, 0, 0, 0, 0, 35, 0,245, 1, 0, 0,246, 1, 0, 0, 0, 0, 35, 0,246, 1, 0, 0,
-247, 1, 0, 0, 0, 0, 35, 0,245, 1, 0, 0,247, 1, 0, 0, 0, 0, 35, 0, 75, 1, 0, 0, 79, 1, 0, 0, 0, 0, 35, 0,
- 75, 1, 0, 0,247, 1, 0, 0, 0, 0, 35, 0, 79, 1, 0, 0,247, 1, 0, 0, 0, 0, 35, 0, 78, 1, 0, 0,246, 1, 0, 0,
- 0, 0, 35, 0, 77, 1, 0, 0,246, 1, 0, 0, 0, 0, 35, 0, 77, 1, 0, 0, 78, 1, 0, 0, 0, 0, 35, 0,228, 0, 0, 0,
-248, 1, 0, 0, 0, 0, 35, 0,228, 0, 0, 0,232, 0, 0, 0, 0, 0, 35, 0,232, 0, 0, 0,248, 1, 0, 0, 0, 0, 35, 0,
-248, 1, 0, 0,249, 1, 0, 0, 0, 0, 35, 0,249, 1, 0, 0,250, 1, 0, 0, 0, 0, 35, 0,248, 1, 0, 0,250, 1, 0, 0,
- 0, 0, 35, 0,229, 0, 0, 0, 78, 1, 0, 0, 0, 0, 35, 0,229, 0, 0, 0,250, 1, 0, 0, 0, 0, 35, 0, 78, 1, 0, 0,
-250, 1, 0, 0, 0, 0, 35, 0, 79, 1, 0, 0,249, 1, 0, 0, 0, 0, 35, 0,233, 0, 0, 0,249, 1, 0, 0, 0, 0, 35, 0,
-233, 0, 0, 0, 79, 1, 0, 0, 0, 0, 35, 0,227, 0, 0, 0,251, 1, 0, 0, 0, 0, 35, 0,227, 0, 0, 0, 77, 1, 0, 0,
- 0, 0, 35, 0, 77, 1, 0, 0,251, 1, 0, 0, 0, 0, 35, 0,251, 1, 0, 0,252, 1, 0, 0, 0, 0, 35, 0,252, 1, 0, 0,
-253, 1, 0, 0, 0, 0, 35, 0,251, 1, 0, 0,253, 1, 0, 0, 0, 0, 35, 0,194, 0, 0, 0,226, 0, 0, 0, 0, 0, 35, 0,
-226, 0, 0, 0,253, 1, 0, 0, 0, 0, 35, 0,194, 0, 0, 0,253, 1, 0, 0, 0, 0, 35, 0,195, 0, 0, 0,252, 1, 0, 0,
- 0, 0, 35, 0, 76, 1, 0, 0,252, 1, 0, 0, 0, 0, 35, 0,195, 0, 0, 0, 76, 1, 0, 0, 0, 0, 35, 0, 81, 1, 0, 0,
-254, 1, 0, 0, 0, 0, 35, 0,239, 0, 0, 0, 81, 1, 0, 0, 0, 0, 35, 0,239, 0, 0, 0,254, 1, 0, 0, 0, 0, 35, 0,
-254, 1, 0, 0,255, 1, 0, 0, 0, 0, 35, 0,255, 1, 0, 0, 0, 2, 0, 0, 0, 0, 35, 0,254, 1, 0, 0, 0, 2, 0, 0,
- 0, 0, 35, 0,201, 0, 0, 0, 80, 1, 0, 0, 0, 0, 35, 0, 80, 1, 0, 0, 0, 2, 0, 0, 0, 0, 35, 0,201, 0, 0, 0,
- 0, 2, 0, 0, 0, 0, 35, 0,200, 0, 0, 0,255, 1, 0, 0, 0, 0, 35, 0,238, 0, 0, 0,255, 1, 0, 0, 0, 0, 35, 0,
-200, 0, 0, 0,238, 0, 0, 0, 0, 0, 35, 0, 80, 1, 0, 0, 1, 2, 0, 0, 0, 0, 35, 0, 80, 1, 0, 0, 82, 1, 0, 0,
- 0, 0, 35, 0, 82, 1, 0, 0, 1, 2, 0, 0, 0, 0, 35, 0, 1, 2, 0, 0, 2, 2, 0, 0, 0, 0, 35, 0, 2, 2, 0, 0,
- 3, 2, 0, 0, 0, 0, 35, 0, 1, 2, 0, 0, 3, 2, 0, 0, 0, 0, 35, 0, 81, 1, 0, 0, 85, 1, 0, 0, 0, 0, 35, 0,
- 81, 1, 0, 0, 3, 2, 0, 0, 0, 0, 35, 0, 85, 1, 0, 0, 3, 2, 0, 0, 0, 0, 35, 0, 84, 1, 0, 0, 2, 2, 0, 0,
- 0, 0, 35, 0, 83, 1, 0, 0, 2, 2, 0, 0, 0, 0, 35, 0, 83, 1, 0, 0, 84, 1, 0, 0, 0, 0, 35, 0,236, 0, 0, 0,
- 4, 2, 0, 0, 0, 0, 35, 0,236, 0, 0, 0,240, 0, 0, 0, 0, 0, 35, 0,240, 0, 0, 0, 4, 2, 0, 0, 0, 0, 35, 0,
- 4, 2, 0, 0, 5, 2, 0, 0, 0, 0, 35, 0, 5, 2, 0, 0, 6, 2, 0, 0, 0, 0, 35, 0, 4, 2, 0, 0, 6, 2, 0, 0,
- 0, 0, 35, 0,237, 0, 0, 0, 84, 1, 0, 0, 0, 0, 35, 0,237, 0, 0, 0, 6, 2, 0, 0, 0, 0, 35, 0, 84, 1, 0, 0,
- 6, 2, 0, 0, 0, 0, 35, 0, 85, 1, 0, 0, 5, 2, 0, 0, 0, 0, 35, 0,241, 0, 0, 0, 5, 2, 0, 0, 0, 0, 35, 0,
-241, 0, 0, 0, 85, 1, 0, 0, 0, 0, 35, 0,235, 0, 0, 0, 7, 2, 0, 0, 0, 0, 35, 0,235, 0, 0, 0, 83, 1, 0, 0,
- 0, 0, 35, 0, 83, 1, 0, 0, 7, 2, 0, 0, 0, 0, 35, 0, 7, 2, 0, 0, 8, 2, 0, 0, 0, 0, 35, 0, 8, 2, 0, 0,
- 9, 2, 0, 0, 0, 0, 35, 0, 7, 2, 0, 0, 9, 2, 0, 0, 0, 0, 35, 0,198, 0, 0, 0,234, 0, 0, 0, 0, 0, 35, 0,
-234, 0, 0, 0, 9, 2, 0, 0, 0, 0, 35, 0,198, 0, 0, 0, 9, 2, 0, 0, 0, 0, 35, 0,199, 0, 0, 0, 8, 2, 0, 0,
- 0, 0, 35, 0, 82, 1, 0, 0, 8, 2, 0, 0, 0, 0, 35, 0,199, 0, 0, 0, 82, 1, 0, 0, 0, 0, 35, 0, 87, 1, 0, 0,
- 10, 2, 0, 0, 0, 0, 35, 0,245, 0, 0, 0, 10, 2, 0, 0, 0, 0, 35, 0,245, 0, 0, 0, 87, 1, 0, 0, 0, 0, 35, 0,
- 10, 2, 0, 0, 11, 2, 0, 0, 0, 0, 35, 0, 10, 2, 0, 0, 12, 2, 0, 0, 0, 0, 35, 0, 11, 2, 0, 0, 12, 2, 0, 0,
- 0, 0, 35, 0,209, 0, 0, 0, 86, 1, 0, 0, 0, 0, 35, 0,209, 0, 0, 0, 12, 2, 0, 0, 0, 0, 35, 0, 86, 1, 0, 0,
- 12, 2, 0, 0, 0, 0, 35, 0,208, 0, 0, 0, 11, 2, 0, 0, 0, 0, 35, 0,208, 0, 0, 0,244, 0, 0, 0, 0, 0, 35, 0,
-244, 0, 0, 0, 11, 2, 0, 0, 0, 0, 35, 0, 86, 1, 0, 0, 13, 2, 0, 0, 0, 0, 35, 0, 88, 1, 0, 0, 13, 2, 0, 0,
- 0, 0, 35, 0, 86, 1, 0, 0, 88, 1, 0, 0, 0, 0, 35, 0, 13, 2, 0, 0, 14, 2, 0, 0, 0, 0, 35, 0, 13, 2, 0, 0,
- 15, 2, 0, 0, 0, 0, 35, 0, 14, 2, 0, 0, 15, 2, 0, 0, 0, 0, 35, 0, 87, 1, 0, 0, 91, 1, 0, 0, 0, 0, 35, 0,
- 91, 1, 0, 0, 15, 2, 0, 0, 0, 0, 35, 0, 87, 1, 0, 0, 15, 2, 0, 0, 0, 0, 35, 0, 90, 1, 0, 0, 14, 2, 0, 0,
- 0, 0, 35, 0, 89, 1, 0, 0, 90, 1, 0, 0, 0, 0, 35, 0, 89, 1, 0, 0, 14, 2, 0, 0, 0, 0, 35, 0,212, 0, 0, 0,
- 16, 2, 0, 0, 0, 0, 35, 0,242, 0, 0, 0, 16, 2, 0, 0, 0, 0, 35, 0,212, 0, 0, 0,242, 0, 0, 0, 0, 0, 35, 0,
- 16, 2, 0, 0, 17, 2, 0, 0, 0, 0, 35, 0, 16, 2, 0, 0, 18, 2, 0, 0, 0, 0, 35, 0, 17, 2, 0, 0, 18, 2, 0, 0,
- 0, 0, 35, 0,213, 0, 0, 0, 90, 1, 0, 0, 0, 0, 35, 0, 90, 1, 0, 0, 18, 2, 0, 0, 0, 0, 35, 0,213, 0, 0, 0,
- 18, 2, 0, 0, 0, 0, 35, 0, 91, 1, 0, 0, 17, 2, 0, 0, 0, 0, 35, 0,243, 0, 0, 0, 91, 1, 0, 0, 0, 0, 35, 0,
-243, 0, 0, 0, 17, 2, 0, 0, 0, 0, 35, 0,211, 0, 0, 0, 19, 2, 0, 0, 0, 0, 35, 0, 89, 1, 0, 0, 19, 2, 0, 0,
- 0, 0, 35, 0,211, 0, 0, 0, 89, 1, 0, 0, 0, 0, 35, 0, 19, 2, 0, 0, 20, 2, 0, 0, 0, 0, 35, 0, 19, 2, 0, 0,
- 21, 2, 0, 0, 0, 0, 35, 0, 20, 2, 0, 0, 21, 2, 0, 0, 0, 0, 35, 0,206, 0, 0, 0,210, 0, 0, 0, 0, 0, 35, 0,
-206, 0, 0, 0, 21, 2, 0, 0, 0, 0, 35, 0,210, 0, 0, 0, 21, 2, 0, 0, 0, 0, 35, 0,207, 0, 0, 0, 20, 2, 0, 0,
- 0, 0, 35, 0,207, 0, 0, 0, 88, 1, 0, 0, 0, 0, 35, 0, 88, 1, 0, 0, 20, 2, 0, 0, 0, 0, 35, 0, 93, 1, 0, 0,
- 22, 2, 0, 0, 0, 0, 35, 0,247, 0, 0, 0, 22, 2, 0, 0, 0, 0, 35, 0,247, 0, 0, 0, 93, 1, 0, 0, 0, 0, 35, 0,
- 22, 2, 0, 0, 23, 2, 0, 0, 0, 0, 35, 0, 22, 2, 0, 0, 24, 2, 0, 0, 0, 0, 35, 0, 23, 2, 0, 0, 24, 2, 0, 0,
- 0, 0, 35, 0,217, 0, 0, 0, 92, 1, 0, 0, 0, 0, 35, 0,217, 0, 0, 0, 24, 2, 0, 0, 0, 0, 35, 0, 92, 1, 0, 0,
- 24, 2, 0, 0, 0, 0, 35, 0,216, 0, 0, 0, 23, 2, 0, 0, 0, 0, 35, 0,216, 0, 0, 0,246, 0, 0, 0, 0, 0, 35, 0,
-246, 0, 0, 0, 23, 2, 0, 0, 0, 0, 35, 0, 92, 1, 0, 0, 25, 2, 0, 0, 0, 0, 35, 0, 94, 1, 0, 0, 25, 2, 0, 0,
- 0, 0, 35, 0, 92, 1, 0, 0, 94, 1, 0, 0, 0, 0, 35, 0, 25, 2, 0, 0, 26, 2, 0, 0, 0, 0, 35, 0, 25, 2, 0, 0,
- 27, 2, 0, 0, 0, 0, 35, 0, 26, 2, 0, 0, 27, 2, 0, 0, 0, 0, 35, 0, 93, 1, 0, 0, 97, 1, 0, 0, 0, 0, 35, 0,
- 97, 1, 0, 0, 27, 2, 0, 0, 0, 0, 35, 0, 93, 1, 0, 0, 27, 2, 0, 0, 0, 0, 35, 0, 96, 1, 0, 0, 26, 2, 0, 0,
- 0, 0, 35, 0, 95, 1, 0, 0, 96, 1, 0, 0, 0, 0, 35, 0, 95, 1, 0, 0, 26, 2, 0, 0, 0, 0, 35, 0,220, 0, 0, 0,
- 28, 2, 0, 0, 0, 0, 35, 0,248, 0, 0, 0, 28, 2, 0, 0, 0, 0, 35, 0,220, 0, 0, 0,248, 0, 0, 0, 0, 0, 35, 0,
- 28, 2, 0, 0, 29, 2, 0, 0, 0, 0, 35, 0, 28, 2, 0, 0, 30, 2, 0, 0, 0, 0, 35, 0, 29, 2, 0, 0, 30, 2, 0, 0,
- 0, 0, 35, 0,221, 0, 0, 0, 96, 1, 0, 0, 0, 0, 35, 0, 96, 1, 0, 0, 30, 2, 0, 0, 0, 0, 35, 0,221, 0, 0, 0,
- 30, 2, 0, 0, 0, 0, 35, 0, 97, 1, 0, 0, 29, 2, 0, 0, 0, 0, 35, 0,249, 0, 0, 0, 97, 1, 0, 0, 0, 0, 35, 0,
-249, 0, 0, 0, 29, 2, 0, 0, 0, 0, 35, 0,219, 0, 0, 0, 31, 2, 0, 0, 0, 0, 35, 0, 95, 1, 0, 0, 31, 2, 0, 0,
- 0, 0, 35, 0,219, 0, 0, 0, 95, 1, 0, 0, 0, 0, 35, 0, 31, 2, 0, 0, 32, 2, 0, 0, 0, 0, 35, 0, 31, 2, 0, 0,
- 33, 2, 0, 0, 0, 0, 35, 0, 32, 2, 0, 0, 33, 2, 0, 0, 0, 0, 35, 0,214, 0, 0, 0,218, 0, 0, 0, 0, 0, 35, 0,
-214, 0, 0, 0, 33, 2, 0, 0, 0, 0, 35, 0,218, 0, 0, 0, 33, 2, 0, 0, 0, 0, 35, 0,215, 0, 0, 0, 32, 2, 0, 0,
- 0, 0, 35, 0,215, 0, 0, 0, 94, 1, 0, 0, 0, 0, 35, 0, 94, 1, 0, 0, 32, 2, 0, 0, 0, 0, 35, 0, 99, 1, 0, 0,
- 34, 2, 0, 0, 0, 0, 35, 0,251, 0, 0, 0, 34, 2, 0, 0, 0, 0, 35, 0,251, 0, 0, 0, 99, 1, 0, 0, 0, 0, 35, 0,
- 34, 2, 0, 0, 35, 2, 0, 0, 0, 0, 35, 0, 34, 2, 0, 0, 36, 2, 0, 0, 0, 0, 35, 0, 35, 2, 0, 0, 36, 2, 0, 0,
- 0, 0, 35, 0,225, 0, 0, 0, 98, 1, 0, 0, 0, 0, 35, 0,225, 0, 0, 0, 36, 2, 0, 0, 0, 0, 35, 0, 98, 1, 0, 0,
- 36, 2, 0, 0, 0, 0, 35, 0,224, 0, 0, 0, 35, 2, 0, 0, 0, 0, 35, 0,224, 0, 0, 0,250, 0, 0, 0, 0, 0, 35, 0,
-250, 0, 0, 0, 35, 2, 0, 0, 0, 0, 35, 0, 98, 1, 0, 0, 37, 2, 0, 0, 0, 0, 35, 0,100, 1, 0, 0, 37, 2, 0, 0,
- 0, 0, 35, 0, 98, 1, 0, 0,100, 1, 0, 0, 0, 0, 35, 0, 37, 2, 0, 0, 38, 2, 0, 0, 0, 0, 35, 0, 37, 2, 0, 0,
- 39, 2, 0, 0, 0, 0, 35, 0, 38, 2, 0, 0, 39, 2, 0, 0, 0, 0, 35, 0, 99, 1, 0, 0,103, 1, 0, 0, 0, 0, 35, 0,
-103, 1, 0, 0, 39, 2, 0, 0, 0, 0, 35, 0, 99, 1, 0, 0, 39, 2, 0, 0, 0, 0, 35, 0,102, 1, 0, 0, 38, 2, 0, 0,
- 0, 0, 35, 0,101, 1, 0, 0,102, 1, 0, 0, 0, 0, 35, 0,101, 1, 0, 0, 38, 2, 0, 0, 0, 0, 35, 0,228, 0, 0, 0,
- 40, 2, 0, 0, 0, 0, 35, 0,252, 0, 0, 0, 40, 2, 0, 0, 0, 0, 35, 0,228, 0, 0, 0,252, 0, 0, 0, 0, 0, 35, 0,
- 40, 2, 0, 0, 41, 2, 0, 0, 0, 0, 35, 0, 40, 2, 0, 0, 42, 2, 0, 0, 0, 0, 35, 0, 41, 2, 0, 0, 42, 2, 0, 0,
- 0, 0, 35, 0,229, 0, 0, 0,102, 1, 0, 0, 0, 0, 35, 0,102, 1, 0, 0, 42, 2, 0, 0, 0, 0, 35, 0,229, 0, 0, 0,
- 42, 2, 0, 0, 0, 0, 35, 0,103, 1, 0, 0, 41, 2, 0, 0, 0, 0, 35, 0,253, 0, 0, 0,103, 1, 0, 0, 0, 0, 35, 0,
-253, 0, 0, 0, 41, 2, 0, 0, 0, 0, 35, 0,227, 0, 0, 0, 43, 2, 0, 0, 0, 0, 35, 0,101, 1, 0, 0, 43, 2, 0, 0,
- 0, 0, 35, 0,227, 0, 0, 0,101, 1, 0, 0, 0, 0, 35, 0, 43, 2, 0, 0, 44, 2, 0, 0, 0, 0, 35, 0, 43, 2, 0, 0,
- 45, 2, 0, 0, 0, 0, 35, 0, 44, 2, 0, 0, 45, 2, 0, 0, 0, 0, 35, 0,222, 0, 0, 0,226, 0, 0, 0, 0, 0, 35, 0,
-222, 0, 0, 0, 45, 2, 0, 0, 0, 0, 35, 0,226, 0, 0, 0, 45, 2, 0, 0, 0, 0, 35, 0,223, 0, 0, 0, 44, 2, 0, 0,
- 0, 0, 35, 0,223, 0, 0, 0,100, 1, 0, 0, 0, 0, 35, 0,100, 1, 0, 0, 44, 2, 0, 0, 0, 0, 35, 0,105, 1, 0, 0,
- 46, 2, 0, 0, 0, 0, 35, 0,255, 0, 0, 0, 46, 2, 0, 0, 0, 0, 35, 0,255, 0, 0, 0,105, 1, 0, 0, 0, 0, 35, 0,
- 46, 2, 0, 0, 47, 2, 0, 0, 0, 0, 35, 0, 46, 2, 0, 0, 48, 2, 0, 0, 0, 0, 35, 0, 47, 2, 0, 0, 48, 2, 0, 0,
- 0, 0, 35, 0,233, 0, 0, 0,104, 1, 0, 0, 0, 0, 35, 0,233, 0, 0, 0, 48, 2, 0, 0, 0, 0, 35, 0,104, 1, 0, 0,
- 48, 2, 0, 0, 0, 0, 35, 0,232, 0, 0, 0, 47, 2, 0, 0, 0, 0, 35, 0,232, 0, 0, 0,254, 0, 0, 0, 0, 0, 35, 0,
-254, 0, 0, 0, 47, 2, 0, 0, 0, 0, 35, 0,104, 1, 0, 0, 49, 2, 0, 0, 0, 0, 35, 0,106, 1, 0, 0, 49, 2, 0, 0,
- 0, 0, 35, 0,104, 1, 0, 0,106, 1, 0, 0, 0, 0, 35, 0, 49, 2, 0, 0, 50, 2, 0, 0, 0, 0, 35, 0, 49, 2, 0, 0,
- 51, 2, 0, 0, 0, 0, 35, 0, 50, 2, 0, 0, 51, 2, 0, 0, 0, 0, 35, 0,105, 1, 0, 0,109, 1, 0, 0, 0, 0, 35, 0,
-109, 1, 0, 0, 51, 2, 0, 0, 0, 0, 35, 0,105, 1, 0, 0, 51, 2, 0, 0, 0, 0, 35, 0,108, 1, 0, 0, 50, 2, 0, 0,
- 0, 0, 35, 0,107, 1, 0, 0,108, 1, 0, 0, 0, 0, 35, 0,107, 1, 0, 0, 50, 2, 0, 0, 0, 0, 35, 0,236, 0, 0, 0,
- 52, 2, 0, 0, 0, 0, 35, 0, 0, 1, 0, 0, 52, 2, 0, 0, 0, 0, 35, 0,236, 0, 0, 0, 0, 1, 0, 0, 0, 0, 35, 0,
- 52, 2, 0, 0, 53, 2, 0, 0, 0, 0, 35, 0, 52, 2, 0, 0, 54, 2, 0, 0, 0, 0, 35, 0, 53, 2, 0, 0, 54, 2, 0, 0,
- 0, 0, 35, 0,237, 0, 0, 0,108, 1, 0, 0, 0, 0, 35, 0,108, 1, 0, 0, 54, 2, 0, 0, 0, 0, 35, 0,237, 0, 0, 0,
- 54, 2, 0, 0, 0, 0, 35, 0,109, 1, 0, 0, 53, 2, 0, 0, 0, 0, 35, 0, 1, 1, 0, 0,109, 1, 0, 0, 0, 0, 35, 0,
- 1, 1, 0, 0, 53, 2, 0, 0, 0, 0, 35, 0,235, 0, 0, 0, 55, 2, 0, 0, 0, 0, 35, 0,107, 1, 0, 0, 55, 2, 0, 0,
- 0, 0, 35, 0,235, 0, 0, 0,107, 1, 0, 0, 0, 0, 35, 0, 55, 2, 0, 0, 56, 2, 0, 0, 0, 0, 35, 0, 55, 2, 0, 0,
- 57, 2, 0, 0, 0, 0, 35, 0, 56, 2, 0, 0, 57, 2, 0, 0, 0, 0, 35, 0,230, 0, 0, 0,234, 0, 0, 0, 0, 0, 35, 0,
-230, 0, 0, 0, 57, 2, 0, 0, 0, 0, 35, 0,234, 0, 0, 0, 57, 2, 0, 0, 0, 0, 35, 0,231, 0, 0, 0, 56, 2, 0, 0,
- 0, 0, 35, 0,231, 0, 0, 0,106, 1, 0, 0, 0, 0, 35, 0,106, 1, 0, 0, 56, 2, 0, 0, 0, 0, 35, 0,111, 1, 0, 0,
- 58, 2, 0, 0, 0, 0, 35, 0, 3, 1, 0, 0, 58, 2, 0, 0, 0, 0, 35, 0, 3, 1, 0, 0,111, 1, 0, 0, 0, 0, 35, 0,
- 58, 2, 0, 0, 59, 2, 0, 0, 0, 0, 35, 0, 58, 2, 0, 0, 60, 2, 0, 0, 0, 0, 35, 0, 59, 2, 0, 0, 60, 2, 0, 0,
- 0, 0, 35, 0,241, 0, 0, 0,110, 1, 0, 0, 0, 0, 35, 0,241, 0, 0, 0, 60, 2, 0, 0, 0, 0, 35, 0,110, 1, 0, 0,
- 60, 2, 0, 0, 0, 0, 35, 0,240, 0, 0, 0, 59, 2, 0, 0, 0, 0, 35, 0,240, 0, 0, 0, 2, 1, 0, 0, 0, 0, 35, 0,
- 2, 1, 0, 0, 59, 2, 0, 0, 0, 0, 35, 0,110, 1, 0, 0, 61, 2, 0, 0, 0, 0, 35, 0,113, 1, 0, 0, 61, 2, 0, 0,
- 0, 0, 35, 0,110, 1, 0, 0,113, 1, 0, 0, 0, 0, 35, 0, 61, 2, 0, 0, 62, 2, 0, 0, 0, 0, 35, 0, 61, 2, 0, 0,
- 63, 2, 0, 0, 0, 0, 35, 0, 62, 2, 0, 0, 63, 2, 0, 0, 0, 0, 35, 0,111, 1, 0, 0,115, 1, 0, 0, 0, 0, 35, 0,
-115, 1, 0, 0, 63, 2, 0, 0, 0, 0, 35, 0,111, 1, 0, 0, 63, 2, 0, 0, 0, 0, 35, 0,114, 1, 0, 0, 62, 2, 0, 0,
- 0, 0, 35, 0,112, 1, 0, 0,114, 1, 0, 0, 0, 0, 35, 0,112, 1, 0, 0, 62, 2, 0, 0, 0, 0, 35, 0,204, 0, 0, 0,
- 64, 2, 0, 0, 0, 0, 35, 0, 4, 1, 0, 0, 64, 2, 0, 0, 0, 0, 35, 0,204, 0, 0, 0, 4, 1, 0, 0, 0, 0, 35, 0,
- 64, 2, 0, 0, 65, 2, 0, 0, 0, 0, 35, 0, 64, 2, 0, 0, 66, 2, 0, 0, 0, 0, 35, 0, 65, 2, 0, 0, 66, 2, 0, 0,
- 0, 0, 35, 0,205, 0, 0, 0,114, 1, 0, 0, 0, 0, 35, 0,114, 1, 0, 0, 66, 2, 0, 0, 0, 0, 35, 0,205, 0, 0, 0,
- 66, 2, 0, 0, 0, 0, 35, 0,115, 1, 0, 0, 65, 2, 0, 0, 0, 0, 35, 0, 5, 1, 0, 0,115, 1, 0, 0, 0, 0, 35, 0,
- 5, 1, 0, 0, 65, 2, 0, 0, 0, 0, 35, 0,203, 0, 0, 0, 67, 2, 0, 0, 0, 0, 35, 0,112, 1, 0, 0, 67, 2, 0, 0,
- 0, 0, 35, 0,203, 0, 0, 0,112, 1, 0, 0, 0, 0, 35, 0, 67, 2, 0, 0, 68, 2, 0, 0, 0, 0, 35, 0, 67, 2, 0, 0,
- 69, 2, 0, 0, 0, 0, 35, 0, 68, 2, 0, 0, 69, 2, 0, 0, 0, 0, 35, 0,202, 0, 0, 0,238, 0, 0, 0, 0, 0, 35, 0,
-238, 0, 0, 0, 69, 2, 0, 0, 0, 0, 35, 0,202, 0, 0, 0, 69, 2, 0, 0, 0, 0, 35, 0,239, 0, 0, 0, 68, 2, 0, 0,
- 0, 0, 35, 0,239, 0, 0, 0,113, 1, 0, 0, 0, 0, 35, 0,113, 1, 0, 0, 68, 2, 0, 0, 0, 0, 35, 0,117, 1, 0, 0,
- 70, 2, 0, 0, 0, 0, 35, 0, 11, 1, 0, 0,117, 1, 0, 0, 0, 0, 35, 0, 11, 1, 0, 0, 70, 2, 0, 0, 0, 0, 35, 0,
- 70, 2, 0, 0, 71, 2, 0, 0, 0, 0, 35, 0, 71, 2, 0, 0, 72, 2, 0, 0, 0, 0, 35, 0, 70, 2, 0, 0, 72, 2, 0, 0,
- 0, 0, 35, 0,243, 0, 0, 0,116, 1, 0, 0, 0, 0, 35, 0,116, 1, 0, 0, 72, 2, 0, 0, 0, 0, 35, 0,243, 0, 0, 0,
- 72, 2, 0, 0, 0, 0, 35, 0,242, 0, 0, 0, 71, 2, 0, 0, 0, 0, 35, 0, 10, 1, 0, 0, 71, 2, 0, 0, 0, 0, 35, 0,
-242, 0, 0, 0, 10, 1, 0, 0, 0, 0, 35, 0,116, 1, 0, 0, 73, 2, 0, 0, 0, 0, 35, 0,116, 1, 0, 0,118, 1, 0, 0,
- 0, 0, 35, 0,118, 1, 0, 0, 73, 2, 0, 0, 0, 0, 35, 0, 73, 2, 0, 0, 74, 2, 0, 0, 0, 0, 35, 0, 74, 2, 0, 0,
- 75, 2, 0, 0, 0, 0, 35, 0, 73, 2, 0, 0, 75, 2, 0, 0, 0, 0, 35, 0,117, 1, 0, 0,121, 1, 0, 0, 0, 0, 35, 0,
-117, 1, 0, 0, 75, 2, 0, 0, 0, 0, 35, 0,121, 1, 0, 0, 75, 2, 0, 0, 0, 0, 35, 0,120, 1, 0, 0, 74, 2, 0, 0,
- 0, 0, 35, 0,119, 1, 0, 0, 74, 2, 0, 0, 0, 0, 35, 0,119, 1, 0, 0,120, 1, 0, 0, 0, 0, 35, 0, 8, 1, 0, 0,
- 76, 2, 0, 0, 0, 0, 35, 0, 8, 1, 0, 0, 12, 1, 0, 0, 0, 0, 35, 0, 12, 1, 0, 0, 76, 2, 0, 0, 0, 0, 35, 0,
- 76, 2, 0, 0, 77, 2, 0, 0, 0, 0, 35, 0, 77, 2, 0, 0, 78, 2, 0, 0, 0, 0, 35, 0, 76, 2, 0, 0, 78, 2, 0, 0,
- 0, 0, 35, 0, 9, 1, 0, 0,120, 1, 0, 0, 0, 0, 35, 0, 9, 1, 0, 0, 78, 2, 0, 0, 0, 0, 35, 0,120, 1, 0, 0,
- 78, 2, 0, 0, 0, 0, 35, 0,121, 1, 0, 0, 77, 2, 0, 0, 0, 0, 35, 0, 13, 1, 0, 0, 77, 2, 0, 0, 0, 0, 35, 0,
- 13, 1, 0, 0,121, 1, 0, 0, 0, 0, 35, 0, 7, 1, 0, 0, 79, 2, 0, 0, 0, 0, 35, 0, 7, 1, 0, 0,119, 1, 0, 0,
- 0, 0, 35, 0,119, 1, 0, 0, 79, 2, 0, 0, 0, 0, 35, 0, 79, 2, 0, 0, 80, 2, 0, 0, 0, 0, 35, 0, 80, 2, 0, 0,
- 81, 2, 0, 0, 0, 0, 35, 0, 79, 2, 0, 0, 81, 2, 0, 0, 0, 0, 35, 0,244, 0, 0, 0, 6, 1, 0, 0, 0, 0, 35, 0,
- 6, 1, 0, 0, 81, 2, 0, 0, 0, 0, 35, 0,244, 0, 0, 0, 81, 2, 0, 0, 0, 0, 35, 0,245, 0, 0, 0, 80, 2, 0, 0,
- 0, 0, 35, 0,118, 1, 0, 0, 80, 2, 0, 0, 0, 0, 35, 0,245, 0, 0, 0,118, 1, 0, 0, 0, 0, 35, 0,123, 1, 0, 0,
- 82, 2, 0, 0, 0, 0, 35, 0, 15, 1, 0, 0,123, 1, 0, 0, 0, 0, 35, 0, 15, 1, 0, 0, 82, 2, 0, 0, 0, 0, 35, 0,
- 82, 2, 0, 0, 83, 2, 0, 0, 0, 0, 35, 0, 83, 2, 0, 0, 84, 2, 0, 0, 0, 0, 35, 0, 82, 2, 0, 0, 84, 2, 0, 0,
- 0, 0, 35, 0,249, 0, 0, 0,122, 1, 0, 0, 0, 0, 35, 0,122, 1, 0, 0, 84, 2, 0, 0, 0, 0, 35, 0,249, 0, 0, 0,
- 84, 2, 0, 0, 0, 0, 35, 0,248, 0, 0, 0, 83, 2, 0, 0, 0, 0, 35, 0, 14, 1, 0, 0, 83, 2, 0, 0, 0, 0, 35, 0,
-248, 0, 0, 0, 14, 1, 0, 0, 0, 0, 35, 0,122, 1, 0, 0, 85, 2, 0, 0, 0, 0, 35, 0,122, 1, 0, 0,124, 1, 0, 0,
- 0, 0, 35, 0,124, 1, 0, 0, 85, 2, 0, 0, 0, 0, 35, 0, 85, 2, 0, 0, 86, 2, 0, 0, 0, 0, 35, 0, 86, 2, 0, 0,
- 87, 2, 0, 0, 0, 0, 35, 0, 85, 2, 0, 0, 87, 2, 0, 0, 0, 0, 35, 0,123, 1, 0, 0,127, 1, 0, 0, 0, 0, 35, 0,
-123, 1, 0, 0, 87, 2, 0, 0, 0, 0, 35, 0,127, 1, 0, 0, 87, 2, 0, 0, 0, 0, 35, 0,126, 1, 0, 0, 86, 2, 0, 0,
- 0, 0, 35, 0,125, 1, 0, 0, 86, 2, 0, 0, 0, 0, 35, 0,125, 1, 0, 0,126, 1, 0, 0, 0, 0, 35, 0, 12, 1, 0, 0,
- 88, 2, 0, 0, 0, 0, 35, 0, 12, 1, 0, 0, 16, 1, 0, 0, 0, 0, 35, 0, 16, 1, 0, 0, 88, 2, 0, 0, 0, 0, 35, 0,
- 88, 2, 0, 0, 89, 2, 0, 0, 0, 0, 35, 0, 89, 2, 0, 0, 90, 2, 0, 0, 0, 0, 35, 0, 88, 2, 0, 0, 90, 2, 0, 0,
- 0, 0, 35, 0, 13, 1, 0, 0,126, 1, 0, 0, 0, 0, 35, 0, 13, 1, 0, 0, 90, 2, 0, 0, 0, 0, 35, 0,126, 1, 0, 0,
- 90, 2, 0, 0, 0, 0, 35, 0,127, 1, 0, 0, 89, 2, 0, 0, 0, 0, 35, 0, 17, 1, 0, 0, 89, 2, 0, 0, 0, 0, 35, 0,
- 17, 1, 0, 0,127, 1, 0, 0, 0, 0, 35, 0, 11, 1, 0, 0, 91, 2, 0, 0, 0, 0, 35, 0, 11, 1, 0, 0,125, 1, 0, 0,
- 0, 0, 35, 0,125, 1, 0, 0, 91, 2, 0, 0, 0, 0, 35, 0, 91, 2, 0, 0, 92, 2, 0, 0, 0, 0, 35, 0, 92, 2, 0, 0,
- 93, 2, 0, 0, 0, 0, 35, 0, 91, 2, 0, 0, 93, 2, 0, 0, 0, 0, 35, 0,246, 0, 0, 0, 10, 1, 0, 0, 0, 0, 35, 0,
- 10, 1, 0, 0, 93, 2, 0, 0, 0, 0, 35, 0,246, 0, 0, 0, 93, 2, 0, 0, 0, 0, 35, 0,247, 0, 0, 0, 92, 2, 0, 0,
- 0, 0, 35, 0,124, 1, 0, 0, 92, 2, 0, 0, 0, 0, 35, 0,247, 0, 0, 0,124, 1, 0, 0, 0, 0, 35, 0,129, 1, 0, 0,
- 94, 2, 0, 0, 0, 0, 35, 0, 19, 1, 0, 0,129, 1, 0, 0, 0, 0, 35, 0, 19, 1, 0, 0, 94, 2, 0, 0, 0, 0, 35, 0,
- 94, 2, 0, 0, 95, 2, 0, 0, 0, 0, 35, 0, 95, 2, 0, 0, 96, 2, 0, 0, 0, 0, 35, 0, 94, 2, 0, 0, 96, 2, 0, 0,
- 0, 0, 35, 0,253, 0, 0, 0,128, 1, 0, 0, 0, 0, 35, 0,128, 1, 0, 0, 96, 2, 0, 0, 0, 0, 35, 0,253, 0, 0, 0,
- 96, 2, 0, 0, 0, 0, 35, 0,252, 0, 0, 0, 95, 2, 0, 0, 0, 0, 35, 0, 18, 1, 0, 0, 95, 2, 0, 0, 0, 0, 35, 0,
-252, 0, 0, 0, 18, 1, 0, 0, 0, 0, 35, 0,128, 1, 0, 0, 97, 2, 0, 0, 0, 0, 35, 0,128, 1, 0, 0,130, 1, 0, 0,
- 0, 0, 35, 0,130, 1, 0, 0, 97, 2, 0, 0, 0, 0, 35, 0, 97, 2, 0, 0, 98, 2, 0, 0, 0, 0, 35, 0, 98, 2, 0, 0,
- 99, 2, 0, 0, 0, 0, 35, 0, 97, 2, 0, 0, 99, 2, 0, 0, 0, 0, 35, 0,129, 1, 0, 0,133, 1, 0, 0, 0, 0, 35, 0,
-129, 1, 0, 0, 99, 2, 0, 0, 0, 0, 35, 0,133, 1, 0, 0, 99, 2, 0, 0, 0, 0, 35, 0,132, 1, 0, 0, 98, 2, 0, 0,
- 0, 0, 35, 0,131, 1, 0, 0, 98, 2, 0, 0, 0, 0, 35, 0,131, 1, 0, 0,132, 1, 0, 0, 0, 0, 35, 0, 16, 1, 0, 0,
-100, 2, 0, 0, 0, 0, 35, 0, 16, 1, 0, 0, 20, 1, 0, 0, 0, 0, 35, 0, 20, 1, 0, 0,100, 2, 0, 0, 0, 0, 35, 0,
-100, 2, 0, 0,101, 2, 0, 0, 0, 0, 35, 0,101, 2, 0, 0,102, 2, 0, 0, 0, 0, 35, 0,100, 2, 0, 0,102, 2, 0, 0,
- 0, 0, 35, 0, 17, 1, 0, 0,132, 1, 0, 0, 0, 0, 35, 0, 17, 1, 0, 0,102, 2, 0, 0, 0, 0, 35, 0,132, 1, 0, 0,
-102, 2, 0, 0, 0, 0, 35, 0,133, 1, 0, 0,101, 2, 0, 0, 0, 0, 35, 0, 21, 1, 0, 0,101, 2, 0, 0, 0, 0, 35, 0,
- 21, 1, 0, 0,133, 1, 0, 0, 0, 0, 35, 0, 15, 1, 0, 0,103, 2, 0, 0, 0, 0, 35, 0, 15, 1, 0, 0,131, 1, 0, 0,
- 0, 0, 35, 0,131, 1, 0, 0,103, 2, 0, 0, 0, 0, 35, 0,103, 2, 0, 0,104, 2, 0, 0, 0, 0, 35, 0,104, 2, 0, 0,
-105, 2, 0, 0, 0, 0, 35, 0,103, 2, 0, 0,105, 2, 0, 0, 0, 0, 35, 0,250, 0, 0, 0, 14, 1, 0, 0, 0, 0, 35, 0,
- 14, 1, 0, 0,105, 2, 0, 0, 0, 0, 35, 0,250, 0, 0, 0,105, 2, 0, 0, 0, 0, 35, 0,251, 0, 0, 0,104, 2, 0, 0,
- 0, 0, 35, 0,130, 1, 0, 0,104, 2, 0, 0, 0, 0, 35, 0,251, 0, 0, 0,130, 1, 0, 0, 0, 0, 35, 0,135, 1, 0, 0,
-106, 2, 0, 0, 0, 0, 35, 0, 23, 1, 0, 0,135, 1, 0, 0, 0, 0, 35, 0, 23, 1, 0, 0,106, 2, 0, 0, 0, 0, 35, 0,
-106, 2, 0, 0,107, 2, 0, 0, 0, 0, 35, 0,107, 2, 0, 0,108, 2, 0, 0, 0, 0, 35, 0,106, 2, 0, 0,108, 2, 0, 0,
- 0, 0, 35, 0, 1, 1, 0, 0,134, 1, 0, 0, 0, 0, 35, 0,134, 1, 0, 0,108, 2, 0, 0, 0, 0, 35, 0, 1, 1, 0, 0,
-108, 2, 0, 0, 0, 0, 35, 0, 0, 1, 0, 0,107, 2, 0, 0, 0, 0, 35, 0, 22, 1, 0, 0,107, 2, 0, 0, 0, 0, 35, 0,
- 0, 1, 0, 0, 22, 1, 0, 0, 0, 0, 35, 0,134, 1, 0, 0,109, 2, 0, 0, 0, 0, 35, 0,134, 1, 0, 0,136, 1, 0, 0,
- 0, 0, 35, 0,136, 1, 0, 0,109, 2, 0, 0, 0, 0, 35, 0,109, 2, 0, 0,110, 2, 0, 0, 0, 0, 35, 0,110, 2, 0, 0,
-111, 2, 0, 0, 0, 0, 35, 0,109, 2, 0, 0,111, 2, 0, 0, 0, 0, 35, 0,135, 1, 0, 0,139, 1, 0, 0, 0, 0, 35, 0,
-135, 1, 0, 0,111, 2, 0, 0, 0, 0, 35, 0,139, 1, 0, 0,111, 2, 0, 0, 0, 0, 35, 0,138, 1, 0, 0,110, 2, 0, 0,
- 0, 0, 35, 0,137, 1, 0, 0,110, 2, 0, 0, 0, 0, 35, 0,137, 1, 0, 0,138, 1, 0, 0, 0, 0, 35, 0, 20, 1, 0, 0,
-112, 2, 0, 0, 0, 0, 35, 0, 20, 1, 0, 0, 24, 1, 0, 0, 0, 0, 35, 0, 24, 1, 0, 0,112, 2, 0, 0, 0, 0, 35, 0,
-112, 2, 0, 0,113, 2, 0, 0, 0, 0, 35, 0,113, 2, 0, 0,114, 2, 0, 0, 0, 0, 35, 0,112, 2, 0, 0,114, 2, 0, 0,
- 0, 0, 35, 0, 21, 1, 0, 0,138, 1, 0, 0, 0, 0, 35, 0, 21, 1, 0, 0,114, 2, 0, 0, 0, 0, 35, 0,138, 1, 0, 0,
-114, 2, 0, 0, 0, 0, 35, 0,139, 1, 0, 0,113, 2, 0, 0, 0, 0, 35, 0, 25, 1, 0, 0,113, 2, 0, 0, 0, 0, 35, 0,
- 25, 1, 0, 0,139, 1, 0, 0, 0, 0, 35, 0, 19, 1, 0, 0,115, 2, 0, 0, 0, 0, 35, 0, 19, 1, 0, 0,137, 1, 0, 0,
- 0, 0, 35, 0,137, 1, 0, 0,115, 2, 0, 0, 0, 0, 35, 0,115, 2, 0, 0,116, 2, 0, 0, 0, 0, 35, 0,116, 2, 0, 0,
-117, 2, 0, 0, 0, 0, 35, 0,115, 2, 0, 0,117, 2, 0, 0, 0, 0, 35, 0,254, 0, 0, 0, 18, 1, 0, 0, 0, 0, 35, 0,
- 18, 1, 0, 0,117, 2, 0, 0, 0, 0, 35, 0,254, 0, 0, 0,117, 2, 0, 0, 0, 0, 35, 0,255, 0, 0, 0,116, 2, 0, 0,
- 0, 0, 35, 0,136, 1, 0, 0,116, 2, 0, 0, 0, 0, 35, 0,255, 0, 0, 0,136, 1, 0, 0, 0, 0, 35, 0,141, 1, 0, 0,
-118, 2, 0, 0, 0, 0, 35, 0, 7, 1, 0, 0,141, 1, 0, 0, 0, 0, 35, 0, 7, 1, 0, 0,118, 2, 0, 0, 0, 0, 35, 0,
-118, 2, 0, 0,119, 2, 0, 0, 0, 0, 35, 0,119, 2, 0, 0,120, 2, 0, 0, 0, 0, 35, 0,118, 2, 0, 0,120, 2, 0, 0,
- 0, 0, 35, 0, 5, 1, 0, 0,140, 1, 0, 0, 0, 0, 35, 0,140, 1, 0, 0,120, 2, 0, 0, 0, 0, 35, 0, 5, 1, 0, 0,
-120, 2, 0, 0, 0, 0, 35, 0, 4, 1, 0, 0,119, 2, 0, 0, 0, 0, 35, 0, 6, 1, 0, 0,119, 2, 0, 0, 0, 0, 35, 0,
- 4, 1, 0, 0, 6, 1, 0, 0, 0, 0, 35, 0,140, 1, 0, 0,121, 2, 0, 0, 0, 0, 35, 0,140, 1, 0, 0,142, 1, 0, 0,
- 0, 0, 35, 0,142, 1, 0, 0,121, 2, 0, 0, 0, 0, 35, 0,121, 2, 0, 0,122, 2, 0, 0, 0, 0, 35, 0,122, 2, 0, 0,
-123, 2, 0, 0, 0, 0, 35, 0,121, 2, 0, 0,123, 2, 0, 0, 0, 0, 35, 0,141, 1, 0, 0,144, 1, 0, 0, 0, 0, 35, 0,
-141, 1, 0, 0,123, 2, 0, 0, 0, 0, 35, 0,144, 1, 0, 0,123, 2, 0, 0, 0, 0, 35, 0,145, 1, 0, 0,122, 2, 0, 0,
- 0, 0, 35, 0,143, 1, 0, 0,122, 2, 0, 0, 0, 0, 35, 0,143, 1, 0, 0,145, 1, 0, 0, 0, 0, 35, 0, 24, 1, 0, 0,
-124, 2, 0, 0, 0, 0, 35, 0, 8, 1, 0, 0, 24, 1, 0, 0, 0, 0, 35, 0, 8, 1, 0, 0,124, 2, 0, 0, 0, 0, 35, 0,
-124, 2, 0, 0,125, 2, 0, 0, 0, 0, 35, 0,125, 2, 0, 0,126, 2, 0, 0, 0, 0, 35, 0,124, 2, 0, 0,126, 2, 0, 0,
- 0, 0, 35, 0, 25, 1, 0, 0,145, 1, 0, 0, 0, 0, 35, 0, 25, 1, 0, 0,126, 2, 0, 0, 0, 0, 35, 0,145, 1, 0, 0,
-126, 2, 0, 0, 0, 0, 35, 0,144, 1, 0, 0,125, 2, 0, 0, 0, 0, 35, 0, 9, 1, 0, 0,125, 2, 0, 0, 0, 0, 35, 0,
- 9, 1, 0, 0,144, 1, 0, 0, 0, 0, 35, 0, 23, 1, 0, 0,127, 2, 0, 0, 0, 0, 35, 0, 23, 1, 0, 0,143, 1, 0, 0,
- 0, 0, 35, 0,143, 1, 0, 0,127, 2, 0, 0, 0, 0, 35, 0,127, 2, 0, 0,128, 2, 0, 0, 0, 0, 35, 0,128, 2, 0, 0,
-129, 2, 0, 0, 0, 0, 35, 0,127, 2, 0, 0,129, 2, 0, 0, 0, 0, 35, 0, 2, 1, 0, 0, 22, 1, 0, 0, 0, 0, 35, 0,
- 22, 1, 0, 0,129, 2, 0, 0, 0, 0, 35, 0, 2, 1, 0, 0,129, 2, 0, 0, 0, 0, 35, 0, 3, 1, 0, 0,128, 2, 0, 0,
- 0, 0, 35, 0,142, 1, 0, 0,128, 2, 0, 0, 0, 0, 35, 0, 3, 1, 0, 0,142, 1, 0, 0, 0, 0, 35, 0, 68, 65, 84, 65,
- 44, 1, 0, 0,168,195,152, 2, 21, 1, 0, 0, 5, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,224, 47,167, 2, 5, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 85, 86, 84,101,120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 8, 75, 18, 3, 6, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 67,111,108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 16,148,167, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 0,100, 0, 0,224, 47,167, 2, 53, 0, 0, 0, 0, 5, 0, 0, 27, 1, 0, 0,102, 0, 0, 0,146, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3,146, 1, 0, 0,171, 0, 0, 0, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 14, 0, 0, 0, 27, 1, 0, 0,
-171, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,171, 0, 0, 0,146, 1, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
-147, 1, 0, 0, 46, 0, 0, 0,146, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,146, 1, 0, 0,148, 1, 0, 0,147, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3, 43, 0, 0, 0,147, 1, 0, 0,148, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,148, 1, 0, 0,
-146, 1, 0, 0,102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 26, 1, 0, 0, 12, 0, 0, 0,165, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3,165, 0, 0, 0,148, 1, 0, 0, 26, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,102, 0, 0, 0, 26, 1, 0, 0,
-148, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,148, 1, 0, 0,165, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
-147, 1, 0, 0, 43, 0, 0, 0,164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,164, 0, 0, 0,170, 0, 0, 0,147, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3, 46, 0, 0, 0,147, 1, 0, 0,170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,170, 0, 0, 0,
-164, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 26, 1, 0, 0,102, 0, 0, 0,149, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3,149, 1, 0, 0, 28, 1, 0, 0, 26, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 12, 0, 0, 0, 26, 1, 0, 0,
- 28, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 28, 1, 0, 0,149, 1, 0, 0,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
-150, 1, 0, 0,103, 0, 0, 0,149, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,149, 1, 0, 0,151, 1, 0, 0,150, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3,104, 0, 0, 0,150, 1, 0, 0,151, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,151, 1, 0, 0,
-149, 1, 0, 0,102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 27, 1, 0, 0, 14, 0, 0, 0, 31, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3, 31, 1, 0, 0,151, 1, 0, 0, 27, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,102, 0, 0, 0, 27, 1, 0, 0,
-151, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,151, 1, 0, 0, 31, 1, 0, 0,104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
-150, 1, 0, 0,104, 0, 0, 0, 30, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 30, 1, 0, 0, 29, 1, 0, 0,150, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3,103, 0, 0, 0,150, 1, 0, 0, 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 29, 1, 0, 0,
- 30, 1, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,168, 0, 0, 0, 45, 0, 0, 0,152, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3,152, 1, 0, 0,172, 0, 0, 0,168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 2, 0, 0, 0,168, 0, 0, 0,
-172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,172, 0, 0, 0,152, 1, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
-153, 1, 0, 0, 47, 0, 0, 0,152, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,152, 1, 0, 0,154, 1, 0, 0,153, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3,104, 0, 0, 0,153, 1, 0, 0,154, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,154, 1, 0, 0,
-152, 1, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,169, 0, 0, 0, 13, 0, 0, 0, 30, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3, 30, 1, 0, 0,154, 1, 0, 0,169, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 45, 0, 0, 0,169, 0, 0, 0,
-154, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,154, 1, 0, 0, 30, 1, 0, 0,104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
-153, 1, 0, 0,104, 0, 0, 0, 31, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 31, 1, 0, 0,173, 0, 0, 0,153, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3, 47, 0, 0, 0,153, 1, 0, 0,173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,173, 0, 0, 0,
- 31, 1, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,167, 0, 0, 0, 44, 0, 0, 0,155, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3,155, 1, 0, 0, 29, 1, 0, 0,167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 13, 0, 0, 0,167, 0, 0, 0,
- 29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 29, 1, 0, 0,155, 1, 0, 0,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
-156, 1, 0, 0,103, 0, 0, 0,155, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,155, 1, 0, 0,157, 1, 0, 0,156, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3, 42, 0, 0, 0,156, 1, 0, 0,157, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,157, 1, 0, 0,
-155, 1, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,166, 0, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3,162, 0, 0, 0,157, 1, 0, 0,166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 44, 0, 0, 0,166, 0, 0, 0,
-157, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,157, 1, 0, 0,162, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
-156, 1, 0, 0, 42, 0, 0, 0,163, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,163, 0, 0, 0, 28, 1, 0, 0,156, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3,103, 0, 0, 0,156, 1, 0, 0, 28, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 28, 1, 0, 0,
-163, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,158, 1, 0, 0,105, 0, 0, 0, 33, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3, 33, 1, 0, 0,179, 0, 0, 0,158, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 50, 0, 0, 0,158, 1, 0, 0,
-179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,179, 0, 0, 0, 33, 1, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
-158, 1, 0, 0, 50, 0, 0, 0,159, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,159, 1, 0, 0,160, 1, 0, 0,158, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3,105, 0, 0, 0,158, 1, 0, 0,160, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,160, 1, 0, 0,
-159, 1, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,165, 0, 0, 0, 12, 0, 0, 0, 32, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3, 32, 1, 0, 0,160, 1, 0, 0,165, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 43, 0, 0, 0,165, 0, 0, 0,
-160, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,160, 1, 0, 0, 32, 1, 0, 0,105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
-164, 0, 0, 0, 43, 0, 0, 0,159, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,159, 1, 0, 0,178, 0, 0, 0,164, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3, 1, 0, 0, 0,164, 0, 0, 0,178, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,178, 0, 0, 0,
-159, 1, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,161, 1, 0, 0,105, 0, 0, 0, 32, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3, 32, 1, 0, 0, 34, 1, 0, 0,161, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,106, 0, 0, 0,161, 1, 0, 0,
- 34, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 34, 1, 0, 0, 32, 1, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
-161, 1, 0, 0,106, 0, 0, 0,162, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,162, 1, 0, 0,163, 1, 0, 0,161, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3,105, 0, 0, 0,161, 1, 0, 0,163, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,163, 1, 0, 0,
-162, 1, 0, 0,107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 37, 1, 0, 0, 16, 0, 0, 0, 33, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3, 33, 1, 0, 0,163, 1, 0, 0, 37, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,107, 0, 0, 0, 37, 1, 0, 0,
-163, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,163, 1, 0, 0, 33, 1, 0, 0,105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
- 36, 1, 0, 0,107, 0, 0, 0,162, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,162, 1, 0, 0, 35, 1, 0, 0, 36, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3, 15, 0, 0, 0, 36, 1, 0, 0, 35, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 35, 1, 0, 0,
-162, 1, 0, 0,106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,164, 1, 0, 0, 49, 0, 0, 0,176, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3,176, 0, 0, 0,180, 0, 0, 0,164, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 51, 0, 0, 0,164, 1, 0, 0,
-180, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,180, 0, 0, 0,176, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
-164, 1, 0, 0, 51, 0, 0, 0,165, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,165, 1, 0, 0,166, 1, 0, 0,164, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3, 49, 0, 0, 0,164, 1, 0, 0,166, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,166, 1, 0, 0,
-165, 1, 0, 0,107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 36, 1, 0, 0, 15, 0, 0, 0,177, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3,177, 0, 0, 0,166, 1, 0, 0, 36, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,107, 0, 0, 0, 36, 1, 0, 0,
-166, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,166, 1, 0, 0,177, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
- 37, 1, 0, 0,107, 0, 0, 0,165, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,165, 1, 0, 0,181, 0, 0, 0, 37, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3, 16, 0, 0, 0, 37, 1, 0, 0,181, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,181, 0, 0, 0,
-165, 1, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,167, 1, 0, 0, 48, 0, 0, 0,175, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3,175, 0, 0, 0, 35, 1, 0, 0,167, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,106, 0, 0, 0,167, 1, 0, 0,
- 35, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 35, 1, 0, 0,175, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
-167, 1, 0, 0,106, 0, 0, 0,168, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,168, 1, 0, 0,169, 1, 0, 0,167, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3, 48, 0, 0, 0,167, 1, 0, 0,169, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,169, 1, 0, 0,
-168, 1, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,162, 0, 0, 0, 0, 0, 0, 0,174, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3,174, 0, 0, 0,169, 1, 0, 0,162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 42, 0, 0, 0,162, 0, 0, 0,
-169, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,169, 1, 0, 0,174, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
-163, 0, 0, 0, 42, 0, 0, 0,168, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,168, 1, 0, 0, 34, 1, 0, 0,163, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3, 12, 0, 0, 0,163, 0, 0, 0, 34, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 34, 1, 0, 0,
-168, 1, 0, 0,106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 39, 1, 0, 0,108, 0, 0, 0,170, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3,170, 1, 0, 0,187, 0, 0, 0, 39, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 18, 0, 0, 0, 39, 1, 0, 0,
-187, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,187, 0, 0, 0,170, 1, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
-171, 1, 0, 0, 54, 0, 0, 0,170, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,170, 1, 0, 0,172, 1, 0, 0,171, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3, 45, 0, 0, 0,171, 1, 0, 0,172, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,172, 1, 0, 0,
-170, 1, 0, 0,108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 38, 1, 0, 0, 13, 0, 0, 0,169, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3,169, 0, 0, 0,172, 1, 0, 0, 38, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,108, 0, 0, 0, 38, 1, 0, 0,
-172, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,172, 1, 0, 0,169, 0, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
-171, 1, 0, 0, 45, 0, 0, 0,168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,168, 0, 0, 0,186, 0, 0, 0,171, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3, 54, 0, 0, 0,171, 1, 0, 0,186, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,186, 0, 0, 0,
-168, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 38, 1, 0, 0,108, 0, 0, 0,173, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3,173, 1, 0, 0, 40, 1, 0, 0, 38, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 13, 0, 0, 0, 38, 1, 0, 0,
- 40, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 40, 1, 0, 0,173, 1, 0, 0,109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
-174, 1, 0, 0,109, 0, 0, 0,173, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,173, 1, 0, 0,175, 1, 0, 0,174, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3,110, 0, 0, 0,174, 1, 0, 0,175, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,175, 1, 0, 0,
-173, 1, 0, 0,108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 39, 1, 0, 0, 18, 0, 0, 0, 43, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3, 43, 1, 0, 0,175, 1, 0, 0, 39, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,108, 0, 0, 0, 39, 1, 0, 0,
-175, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,175, 1, 0, 0, 43, 1, 0, 0,110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
-174, 1, 0, 0,110, 0, 0, 0, 42, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 42, 1, 0, 0, 41, 1, 0, 0,174, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3,109, 0, 0, 0,174, 1, 0, 0, 41, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 41, 1, 0, 0,
- 42, 1, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,184, 0, 0, 0, 53, 0, 0, 0,176, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3,176, 1, 0, 0,188, 0, 0, 0,184, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 0, 0, 0,184, 0, 0, 0,
-188, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,188, 0, 0, 0,176, 1, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
-177, 1, 0, 0, 55, 0, 0, 0,176, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,176, 1, 0, 0,178, 1, 0, 0,177, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3,110, 0, 0, 0,177, 1, 0, 0,178, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,178, 1, 0, 0,
-176, 1, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,185, 0, 0, 0, 17, 0, 0, 0, 42, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3, 42, 1, 0, 0,178, 1, 0, 0,185, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 53, 0, 0, 0,185, 0, 0, 0,
-178, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,178, 1, 0, 0, 42, 1, 0, 0,110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
-177, 1, 0, 0,110, 0, 0, 0, 43, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 43, 1, 0, 0,189, 0, 0, 0,177, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3, 55, 0, 0, 0,177, 1, 0, 0,189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,189, 0, 0, 0,
- 43, 1, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,183, 0, 0, 0, 52, 0, 0, 0,179, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3,179, 1, 0, 0, 41, 1, 0, 0,183, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 17, 0, 0, 0,183, 0, 0, 0,
- 41, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 41, 1, 0, 0,179, 1, 0, 0,109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
-180, 1, 0, 0,109, 0, 0, 0,179, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,179, 1, 0, 0,181, 1, 0, 0,180, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3, 44, 0, 0, 0,180, 1, 0, 0,181, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,181, 1, 0, 0,
-179, 1, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,182, 0, 0, 0, 0, 0, 0, 0,166, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3,166, 0, 0, 0,181, 1, 0, 0,182, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 52, 0, 0, 0,182, 0, 0, 0,
-181, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,181, 1, 0, 0,166, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
-180, 1, 0, 0, 44, 0, 0, 0,167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,167, 0, 0, 0, 40, 1, 0, 0,180, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3,109, 0, 0, 0,180, 1, 0, 0, 40, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 40, 1, 0, 0,
-167, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 45, 1, 0, 0,111, 0, 0, 0,182, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3,182, 1, 0, 0,195, 0, 0, 0, 45, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 20, 0, 0, 0, 45, 1, 0, 0,
-195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,195, 0, 0, 0,182, 1, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
-183, 1, 0, 0, 58, 0, 0, 0,182, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,182, 1, 0, 0,184, 1, 0, 0,183, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3, 53, 0, 0, 0,183, 1, 0, 0,184, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,184, 1, 0, 0,
-182, 1, 0, 0,111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 44, 1, 0, 0, 17, 0, 0, 0,185, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3,185, 0, 0, 0,184, 1, 0, 0, 44, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,111, 0, 0, 0, 44, 1, 0, 0,
-184, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,184, 1, 0, 0,185, 0, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
-183, 1, 0, 0, 53, 0, 0, 0,184, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,184, 0, 0, 0,194, 0, 0, 0,183, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3, 58, 0, 0, 0,183, 1, 0, 0,194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,194, 0, 0, 0,
-184, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 44, 1, 0, 0,111, 0, 0, 0,185, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3,185, 1, 0, 0, 46, 1, 0, 0, 44, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 17, 0, 0, 0, 44, 1, 0, 0,
- 46, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 46, 1, 0, 0,185, 1, 0, 0,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
-186, 1, 0, 0,112, 0, 0, 0,185, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,185, 1, 0, 0,187, 1, 0, 0,186, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3,113, 0, 0, 0,186, 1, 0, 0,187, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,187, 1, 0, 0,
-185, 1, 0, 0,111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 45, 1, 0, 0, 20, 0, 0, 0, 49, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3, 49, 1, 0, 0,187, 1, 0, 0, 45, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,111, 0, 0, 0, 45, 1, 0, 0,
-187, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,187, 1, 0, 0, 49, 1, 0, 0,113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
-186, 1, 0, 0,113, 0, 0, 0, 48, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 48, 1, 0, 0, 47, 1, 0, 0,186, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3,112, 0, 0, 0,186, 1, 0, 0, 47, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 47, 1, 0, 0,
- 48, 1, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,192, 0, 0, 0, 57, 0, 0, 0,188, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3,188, 1, 0, 0,196, 0, 0, 0,192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 4, 0, 0, 0,192, 0, 0, 0,
-196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,196, 0, 0, 0,188, 1, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
-189, 1, 0, 0, 59, 0, 0, 0,188, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,188, 1, 0, 0,190, 1, 0, 0,189, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3,113, 0, 0, 0,189, 1, 0, 0,190, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,190, 1, 0, 0,
-188, 1, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,193, 0, 0, 0, 19, 0, 0, 0, 48, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3, 48, 1, 0, 0,190, 1, 0, 0,193, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 57, 0, 0, 0,193, 0, 0, 0,
-190, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,190, 1, 0, 0, 48, 1, 0, 0,113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
-189, 1, 0, 0,113, 0, 0, 0, 49, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 49, 1, 0, 0,197, 0, 0, 0,189, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3, 59, 0, 0, 0,189, 1, 0, 0,197, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,197, 0, 0, 0,
- 49, 1, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,191, 0, 0, 0, 56, 0, 0, 0,191, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3,191, 1, 0, 0, 47, 1, 0, 0,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 19, 0, 0, 0,191, 0, 0, 0,
- 47, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 47, 1, 0, 0,191, 1, 0, 0,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
-192, 1, 0, 0,112, 0, 0, 0,191, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,191, 1, 0, 0,193, 1, 0, 0,192, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3, 52, 0, 0, 0,192, 1, 0, 0,193, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,193, 1, 0, 0,
-191, 1, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,190, 0, 0, 0, 0, 0, 0, 0,182, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3,182, 0, 0, 0,193, 1, 0, 0,190, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 56, 0, 0, 0,190, 0, 0, 0,
-193, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,193, 1, 0, 0,182, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
-192, 1, 0, 0, 52, 0, 0, 0,183, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,183, 0, 0, 0, 46, 1, 0, 0,192, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3,112, 0, 0, 0,192, 1, 0, 0, 46, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 46, 1, 0, 0,
-183, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 51, 1, 0, 0,114, 0, 0, 0,194, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3,194, 1, 0, 0,199, 0, 0, 0, 51, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 21, 0, 0, 0, 51, 1, 0, 0,
-199, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,199, 0, 0, 0,194, 1, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
-195, 1, 0, 0, 60, 0, 0, 0,194, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,194, 1, 0, 0,196, 1, 0, 0,195, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3, 57, 0, 0, 0,195, 1, 0, 0,196, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,196, 1, 0, 0,
-194, 1, 0, 0,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 50, 1, 0, 0, 19, 0, 0, 0,193, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3,193, 0, 0, 0,196, 1, 0, 0, 50, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,114, 0, 0, 0, 50, 1, 0, 0,
-196, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,196, 1, 0, 0,193, 0, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
-195, 1, 0, 0, 57, 0, 0, 0,192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,192, 0, 0, 0,198, 0, 0, 0,195, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3, 60, 0, 0, 0,195, 1, 0, 0,198, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,198, 0, 0, 0,
-192, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 50, 1, 0, 0,114, 0, 0, 0,197, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3,197, 1, 0, 0, 53, 1, 0, 0, 50, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 19, 0, 0, 0, 50, 1, 0, 0,
- 53, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 53, 1, 0, 0,197, 1, 0, 0,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
-198, 1, 0, 0,115, 0, 0, 0,197, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,197, 1, 0, 0,199, 1, 0, 0,198, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3,116, 0, 0, 0,198, 1, 0, 0,199, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,199, 1, 0, 0,
-197, 1, 0, 0,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 51, 1, 0, 0, 21, 0, 0, 0, 55, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3, 55, 1, 0, 0,199, 1, 0, 0, 51, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,114, 0, 0, 0, 51, 1, 0, 0,
-199, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,199, 1, 0, 0, 55, 1, 0, 0,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
-198, 1, 0, 0,116, 0, 0, 0, 54, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 54, 1, 0, 0, 52, 1, 0, 0,198, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3,115, 0, 0, 0,198, 1, 0, 0, 52, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 52, 1, 0, 0,
- 54, 1, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,176, 0, 0, 0, 49, 0, 0, 0,200, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3,200, 1, 0, 0,200, 0, 0, 0,176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 5, 0, 0, 0,176, 0, 0, 0,
-200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,200, 0, 0, 0,200, 1, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
-201, 1, 0, 0, 61, 0, 0, 0,200, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,200, 1, 0, 0,202, 1, 0, 0,201, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3,116, 0, 0, 0,201, 1, 0, 0,202, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,202, 1, 0, 0,
-200, 1, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,177, 0, 0, 0, 15, 0, 0, 0, 54, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3, 54, 1, 0, 0,202, 1, 0, 0,177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 49, 0, 0, 0,177, 0, 0, 0,
-202, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,202, 1, 0, 0, 54, 1, 0, 0,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
-201, 1, 0, 0,116, 0, 0, 0, 55, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 55, 1, 0, 0,201, 0, 0, 0,201, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3, 61, 0, 0, 0,201, 1, 0, 0,201, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,201, 0, 0, 0,
- 55, 1, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,175, 0, 0, 0, 48, 0, 0, 0,203, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3,203, 1, 0, 0, 52, 1, 0, 0,175, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 15, 0, 0, 0,175, 0, 0, 0,
- 52, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 52, 1, 0, 0,203, 1, 0, 0,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
-204, 1, 0, 0,115, 0, 0, 0,203, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,203, 1, 0, 0,205, 1, 0, 0,204, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3, 56, 0, 0, 0,204, 1, 0, 0,205, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,205, 1, 0, 0,
-203, 1, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,174, 0, 0, 0, 0, 0, 0, 0,190, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3,190, 0, 0, 0,205, 1, 0, 0,174, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 48, 0, 0, 0,174, 0, 0, 0,
-205, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,205, 1, 0, 0,190, 0, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
-204, 1, 0, 0, 56, 0, 0, 0,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,191, 0, 0, 0, 53, 1, 0, 0,204, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3,115, 0, 0, 0,204, 1, 0, 0, 53, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 53, 1, 0, 0,
-191, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,206, 1, 0, 0,117, 0, 0, 0, 57, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3, 57, 1, 0, 0,207, 0, 0, 0,206, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 64, 0, 0, 0,206, 1, 0, 0,
-207, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,207, 0, 0, 0, 57, 1, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
-206, 1, 0, 0, 64, 0, 0, 0,207, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,207, 1, 0, 0,208, 1, 0, 0,206, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3,117, 0, 0, 0,206, 1, 0, 0,208, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,208, 1, 0, 0,
-207, 1, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,179, 0, 0, 0, 16, 0, 0, 0, 56, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3, 56, 1, 0, 0,208, 1, 0, 0,179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 50, 0, 0, 0,179, 0, 0, 0,
-208, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,208, 1, 0, 0, 56, 1, 0, 0,117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
-178, 0, 0, 0, 50, 0, 0, 0,207, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,207, 1, 0, 0,206, 0, 0, 0,178, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3, 1, 0, 0, 0,178, 0, 0, 0,206, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,206, 0, 0, 0,
-207, 1, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,209, 1, 0, 0,117, 0, 0, 0, 56, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3, 56, 1, 0, 0, 58, 1, 0, 0,209, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,118, 0, 0, 0,209, 1, 0, 0,
- 58, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 58, 1, 0, 0, 56, 1, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
-209, 1, 0, 0,118, 0, 0, 0,210, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,210, 1, 0, 0,211, 1, 0, 0,209, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3,117, 0, 0, 0,209, 1, 0, 0,211, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,211, 1, 0, 0,
-210, 1, 0, 0,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 61, 1, 0, 0, 23, 0, 0, 0, 57, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3, 57, 1, 0, 0,211, 1, 0, 0, 61, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,119, 0, 0, 0, 61, 1, 0, 0,
-211, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,211, 1, 0, 0, 57, 1, 0, 0,117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
- 60, 1, 0, 0,119, 0, 0, 0,210, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,210, 1, 0, 0, 59, 1, 0, 0, 60, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3, 22, 0, 0, 0, 60, 1, 0, 0, 59, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 59, 1, 0, 0,
-210, 1, 0, 0,118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,212, 1, 0, 0, 63, 0, 0, 0,204, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3,204, 0, 0, 0,208, 0, 0, 0,212, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 65, 0, 0, 0,212, 1, 0, 0,
-208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,208, 0, 0, 0,204, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
-212, 1, 0, 0, 65, 0, 0, 0,213, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,213, 1, 0, 0,214, 1, 0, 0,212, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3, 63, 0, 0, 0,212, 1, 0, 0,214, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,214, 1, 0, 0,
-213, 1, 0, 0,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 60, 1, 0, 0, 22, 0, 0, 0,205, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3,205, 0, 0, 0,214, 1, 0, 0, 60, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,119, 0, 0, 0, 60, 1, 0, 0,
-214, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,214, 1, 0, 0,205, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
- 61, 1, 0, 0,119, 0, 0, 0,213, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,213, 1, 0, 0,209, 0, 0, 0, 61, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3, 23, 0, 0, 0, 61, 1, 0, 0,209, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,209, 0, 0, 0,
-213, 1, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,215, 1, 0, 0, 62, 0, 0, 0,203, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3,203, 0, 0, 0, 59, 1, 0, 0,215, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,118, 0, 0, 0,215, 1, 0, 0,
- 59, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 59, 1, 0, 0,203, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
-215, 1, 0, 0,118, 0, 0, 0,216, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,216, 1, 0, 0,217, 1, 0, 0,215, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3, 62, 0, 0, 0,215, 1, 0, 0,217, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,217, 1, 0, 0,
-216, 1, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,180, 0, 0, 0, 5, 0, 0, 0,202, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3,202, 0, 0, 0,217, 1, 0, 0,180, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 51, 0, 0, 0,180, 0, 0, 0,
-217, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,217, 1, 0, 0,202, 0, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
-181, 0, 0, 0, 51, 0, 0, 0,216, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,216, 1, 0, 0, 58, 1, 0, 0,181, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3, 16, 0, 0, 0,181, 0, 0, 0, 58, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 58, 1, 0, 0,
-216, 1, 0, 0,118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,218, 1, 0, 0,120, 0, 0, 0, 63, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3, 63, 1, 0, 0,215, 0, 0, 0,218, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 68, 0, 0, 0,218, 1, 0, 0,
-215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,215, 0, 0, 0, 63, 1, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
-218, 1, 0, 0, 68, 0, 0, 0,219, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,219, 1, 0, 0,220, 1, 0, 0,218, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3,120, 0, 0, 0,218, 1, 0, 0,220, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,220, 1, 0, 0,
-219, 1, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,173, 0, 0, 0, 14, 0, 0, 0, 62, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3, 62, 1, 0, 0,220, 1, 0, 0,173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 47, 0, 0, 0,173, 0, 0, 0,
-220, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,220, 1, 0, 0, 62, 1, 0, 0,120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
-172, 0, 0, 0, 47, 0, 0, 0,219, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,219, 1, 0, 0,214, 0, 0, 0,172, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3, 2, 0, 0, 0,172, 0, 0, 0,214, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,214, 0, 0, 0,
-219, 1, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,221, 1, 0, 0,120, 0, 0, 0, 62, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3, 62, 1, 0, 0, 64, 1, 0, 0,221, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,121, 0, 0, 0,221, 1, 0, 0,
- 64, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 64, 1, 0, 0, 62, 1, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
-221, 1, 0, 0,121, 0, 0, 0,222, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,222, 1, 0, 0,223, 1, 0, 0,221, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3,120, 0, 0, 0,221, 1, 0, 0,223, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,223, 1, 0, 0,
-222, 1, 0, 0,122, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 67, 1, 0, 0, 25, 0, 0, 0, 63, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3, 63, 1, 0, 0,223, 1, 0, 0, 67, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,122, 0, 0, 0, 67, 1, 0, 0,
-223, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,223, 1, 0, 0, 63, 1, 0, 0,120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
- 66, 1, 0, 0,122, 0, 0, 0,222, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,222, 1, 0, 0, 65, 1, 0, 0, 66, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3, 24, 0, 0, 0, 66, 1, 0, 0, 65, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 65, 1, 0, 0,
-222, 1, 0, 0,121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,224, 1, 0, 0, 67, 0, 0, 0,212, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3,212, 0, 0, 0,216, 0, 0, 0,224, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 69, 0, 0, 0,224, 1, 0, 0,
-216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,216, 0, 0, 0,212, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
-224, 1, 0, 0, 69, 0, 0, 0,225, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,225, 1, 0, 0,226, 1, 0, 0,224, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3, 67, 0, 0, 0,224, 1, 0, 0,226, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,226, 1, 0, 0,
-225, 1, 0, 0,122, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 66, 1, 0, 0, 24, 0, 0, 0,213, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3,213, 0, 0, 0,226, 1, 0, 0, 66, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,122, 0, 0, 0, 66, 1, 0, 0,
-226, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,226, 1, 0, 0,213, 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
- 67, 1, 0, 0,122, 0, 0, 0,225, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,225, 1, 0, 0,217, 0, 0, 0, 67, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3, 25, 0, 0, 0, 67, 1, 0, 0,217, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,217, 0, 0, 0,
-225, 1, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,227, 1, 0, 0, 66, 0, 0, 0,211, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3,211, 0, 0, 0, 65, 1, 0, 0,227, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,121, 0, 0, 0,227, 1, 0, 0,
- 65, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 65, 1, 0, 0,211, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
-227, 1, 0, 0,121, 0, 0, 0,228, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,228, 1, 0, 0,229, 1, 0, 0,227, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3, 66, 0, 0, 0,227, 1, 0, 0,229, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,229, 1, 0, 0,
-228, 1, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,170, 0, 0, 0, 1, 0, 0, 0,210, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3,210, 0, 0, 0,229, 1, 0, 0,170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 46, 0, 0, 0,170, 0, 0, 0,
-229, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,229, 1, 0, 0,210, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
-171, 0, 0, 0, 46, 0, 0, 0,228, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,228, 1, 0, 0, 64, 1, 0, 0,171, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3, 14, 0, 0, 0,171, 0, 0, 0, 64, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 64, 1, 0, 0,
-228, 1, 0, 0,121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,230, 1, 0, 0,123, 0, 0, 0, 69, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3, 69, 1, 0, 0,223, 0, 0, 0,230, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 72, 0, 0, 0,230, 1, 0, 0,
-223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,223, 0, 0, 0, 69, 1, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
-230, 1, 0, 0, 72, 0, 0, 0,231, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,231, 1, 0, 0,232, 1, 0, 0,230, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3,123, 0, 0, 0,230, 1, 0, 0,232, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,232, 1, 0, 0,
-231, 1, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,189, 0, 0, 0, 18, 0, 0, 0, 68, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3, 68, 1, 0, 0,232, 1, 0, 0,189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 55, 0, 0, 0,189, 0, 0, 0,
-232, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,232, 1, 0, 0, 68, 1, 0, 0,123, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
-188, 0, 0, 0, 55, 0, 0, 0,231, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,231, 1, 0, 0,222, 0, 0, 0,188, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3, 3, 0, 0, 0,188, 0, 0, 0,222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,222, 0, 0, 0,
-231, 1, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,233, 1, 0, 0,123, 0, 0, 0, 68, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3, 68, 1, 0, 0, 70, 1, 0, 0,233, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,124, 0, 0, 0,233, 1, 0, 0,
- 70, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 70, 1, 0, 0, 68, 1, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
-233, 1, 0, 0,124, 0, 0, 0,234, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,234, 1, 0, 0,235, 1, 0, 0,233, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3,123, 0, 0, 0,233, 1, 0, 0,235, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,235, 1, 0, 0,
-234, 1, 0, 0,125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 73, 1, 0, 0, 27, 0, 0, 0, 69, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3, 69, 1, 0, 0,235, 1, 0, 0, 73, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,125, 0, 0, 0, 73, 1, 0, 0,
-235, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,235, 1, 0, 0, 69, 1, 0, 0,123, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
- 72, 1, 0, 0,125, 0, 0, 0,234, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,234, 1, 0, 0, 71, 1, 0, 0, 72, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3, 26, 0, 0, 0, 72, 1, 0, 0, 71, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 71, 1, 0, 0,
-234, 1, 0, 0,124, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,236, 1, 0, 0, 71, 0, 0, 0,220, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3,220, 0, 0, 0,224, 0, 0, 0,236, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 73, 0, 0, 0,236, 1, 0, 0,
-224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,224, 0, 0, 0,220, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
-236, 1, 0, 0, 73, 0, 0, 0,237, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,237, 1, 0, 0,238, 1, 0, 0,236, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3, 71, 0, 0, 0,236, 1, 0, 0,238, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,238, 1, 0, 0,
-237, 1, 0, 0,125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 72, 1, 0, 0, 26, 0, 0, 0,221, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3,221, 0, 0, 0,238, 1, 0, 0, 72, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,125, 0, 0, 0, 72, 1, 0, 0,
-238, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,238, 1, 0, 0,221, 0, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
- 73, 1, 0, 0,125, 0, 0, 0,237, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,237, 1, 0, 0,225, 0, 0, 0, 73, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3, 27, 0, 0, 0, 73, 1, 0, 0,225, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,225, 0, 0, 0,
-237, 1, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,239, 1, 0, 0, 70, 0, 0, 0,219, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3,219, 0, 0, 0, 71, 1, 0, 0,239, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,124, 0, 0, 0,239, 1, 0, 0,
- 71, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 71, 1, 0, 0,219, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
-239, 1, 0, 0,124, 0, 0, 0,240, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,240, 1, 0, 0,241, 1, 0, 0,239, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3, 70, 0, 0, 0,239, 1, 0, 0,241, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,241, 1, 0, 0,
-240, 1, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,186, 0, 0, 0, 2, 0, 0, 0,218, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3,218, 0, 0, 0,241, 1, 0, 0,186, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 54, 0, 0, 0,186, 0, 0, 0,
-241, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,241, 1, 0, 0,218, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
-187, 0, 0, 0, 54, 0, 0, 0,240, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,240, 1, 0, 0, 70, 1, 0, 0,187, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3, 18, 0, 0, 0,187, 0, 0, 0, 70, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 70, 1, 0, 0,
-240, 1, 0, 0,124, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,242, 1, 0, 0,126, 0, 0, 0, 75, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3, 75, 1, 0, 0,231, 0, 0, 0,242, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 76, 0, 0, 0,242, 1, 0, 0,
-231, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,231, 0, 0, 0, 75, 1, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
-242, 1, 0, 0, 76, 0, 0, 0,243, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,243, 1, 0, 0,244, 1, 0, 0,242, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3,126, 0, 0, 0,242, 1, 0, 0,244, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,244, 1, 0, 0,
-243, 1, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,197, 0, 0, 0, 20, 0, 0, 0, 74, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3, 74, 1, 0, 0,244, 1, 0, 0,197, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 59, 0, 0, 0,197, 0, 0, 0,
-244, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,244, 1, 0, 0, 74, 1, 0, 0,126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
-196, 0, 0, 0, 59, 0, 0, 0,243, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,243, 1, 0, 0,230, 0, 0, 0,196, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3, 4, 0, 0, 0,196, 0, 0, 0,230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,230, 0, 0, 0,
-243, 1, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,245, 1, 0, 0,126, 0, 0, 0, 74, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3, 74, 1, 0, 0, 76, 1, 0, 0,245, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,127, 0, 0, 0,245, 1, 0, 0,
- 76, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 76, 1, 0, 0, 74, 1, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
-245, 1, 0, 0,127, 0, 0, 0,246, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,246, 1, 0, 0,247, 1, 0, 0,245, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3,126, 0, 0, 0,245, 1, 0, 0,247, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,247, 1, 0, 0,
-246, 1, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 79, 1, 0, 0, 29, 0, 0, 0, 75, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3, 75, 1, 0, 0,247, 1, 0, 0, 79, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,128, 0, 0, 0, 79, 1, 0, 0,
-247, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,247, 1, 0, 0, 75, 1, 0, 0,126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
- 78, 1, 0, 0,128, 0, 0, 0,246, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,246, 1, 0, 0, 77, 1, 0, 0, 78, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3, 28, 0, 0, 0, 78, 1, 0, 0, 77, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 77, 1, 0, 0,
-246, 1, 0, 0,127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,248, 1, 0, 0, 75, 0, 0, 0,228, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3,228, 0, 0, 0,232, 0, 0, 0,248, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 77, 0, 0, 0,248, 1, 0, 0,
-232, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,232, 0, 0, 0,228, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
-248, 1, 0, 0, 77, 0, 0, 0,249, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,249, 1, 0, 0,250, 1, 0, 0,248, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3, 75, 0, 0, 0,248, 1, 0, 0,250, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,250, 1, 0, 0,
-249, 1, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 78, 1, 0, 0, 28, 0, 0, 0,229, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3,229, 0, 0, 0,250, 1, 0, 0, 78, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,128, 0, 0, 0, 78, 1, 0, 0,
-250, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,250, 1, 0, 0,229, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
- 79, 1, 0, 0,128, 0, 0, 0,249, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,249, 1, 0, 0,233, 0, 0, 0, 79, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3, 29, 0, 0, 0, 79, 1, 0, 0,233, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,233, 0, 0, 0,
-249, 1, 0, 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,251, 1, 0, 0, 74, 0, 0, 0,227, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3,227, 0, 0, 0, 77, 1, 0, 0,251, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,127, 0, 0, 0,251, 1, 0, 0,
- 77, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 77, 1, 0, 0,227, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
-251, 1, 0, 0,127, 0, 0, 0,252, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,252, 1, 0, 0,253, 1, 0, 0,251, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3, 74, 0, 0, 0,251, 1, 0, 0,253, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,253, 1, 0, 0,
-252, 1, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,194, 0, 0, 0, 3, 0, 0, 0,226, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3,226, 0, 0, 0,253, 1, 0, 0,194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 58, 0, 0, 0,194, 0, 0, 0,
-253, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,253, 1, 0, 0,226, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
-195, 0, 0, 0, 58, 0, 0, 0,252, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,252, 1, 0, 0, 76, 1, 0, 0,195, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3, 20, 0, 0, 0,195, 0, 0, 0, 76, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 76, 1, 0, 0,
-252, 1, 0, 0,127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,254, 1, 0, 0,129, 0, 0, 0, 81, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3, 81, 1, 0, 0,239, 0, 0, 0,254, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 80, 0, 0, 0,254, 1, 0, 0,
-239, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,239, 0, 0, 0, 81, 1, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
-254, 1, 0, 0, 80, 0, 0, 0,255, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,255, 1, 0, 0, 0, 2, 0, 0,254, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3,129, 0, 0, 0,254, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 2, 0, 0,
-255, 1, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,201, 0, 0, 0, 21, 0, 0, 0, 80, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3, 80, 1, 0, 0, 0, 2, 0, 0,201, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 61, 0, 0, 0,201, 0, 0, 0,
- 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 2, 0, 0, 80, 1, 0, 0,129, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
-200, 0, 0, 0, 61, 0, 0, 0,255, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,255, 1, 0, 0,238, 0, 0, 0,200, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3, 5, 0, 0, 0,200, 0, 0, 0,238, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,238, 0, 0, 0,
-255, 1, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 2, 0, 0,129, 0, 0, 0, 80, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3, 80, 1, 0, 0, 82, 1, 0, 0, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,130, 0, 0, 0, 1, 2, 0, 0,
- 82, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 82, 1, 0, 0, 80, 1, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
- 1, 2, 0, 0,130, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 2, 2, 0, 0, 3, 2, 0, 0, 1, 2, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3,129, 0, 0, 0, 1, 2, 0, 0, 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 2, 0, 0,
- 2, 2, 0, 0,131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 85, 1, 0, 0, 31, 0, 0, 0, 81, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3, 81, 1, 0, 0, 3, 2, 0, 0, 85, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,131, 0, 0, 0, 85, 1, 0, 0,
- 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 2, 0, 0, 81, 1, 0, 0,129, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
- 84, 1, 0, 0,131, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 2, 2, 0, 0, 83, 1, 0, 0, 84, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3, 30, 0, 0, 0, 84, 1, 0, 0, 83, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 83, 1, 0, 0,
- 2, 2, 0, 0,130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 4, 2, 0, 0, 79, 0, 0, 0,236, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3,236, 0, 0, 0,240, 0, 0, 0, 4, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 81, 0, 0, 0, 4, 2, 0, 0,
-240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,240, 0, 0, 0,236, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
- 4, 2, 0, 0, 81, 0, 0, 0, 5, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 5, 2, 0, 0, 6, 2, 0, 0, 4, 2, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3, 79, 0, 0, 0, 4, 2, 0, 0, 6, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 6, 2, 0, 0,
- 5, 2, 0, 0,131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 84, 1, 0, 0, 30, 0, 0, 0,237, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3,237, 0, 0, 0, 6, 2, 0, 0, 84, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,131, 0, 0, 0, 84, 1, 0, 0,
- 6, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 6, 2, 0, 0,237, 0, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
- 85, 1, 0, 0,131, 0, 0, 0, 5, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 5, 2, 0, 0,241, 0, 0, 0, 85, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3, 31, 0, 0, 0, 85, 1, 0, 0,241, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,241, 0, 0, 0,
- 5, 2, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 7, 2, 0, 0, 78, 0, 0, 0,235, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3,235, 0, 0, 0, 83, 1, 0, 0, 7, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,130, 0, 0, 0, 7, 2, 0, 0,
- 83, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 83, 1, 0, 0,235, 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
- 7, 2, 0, 0,130, 0, 0, 0, 8, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 8, 2, 0, 0, 9, 2, 0, 0, 7, 2, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3, 78, 0, 0, 0, 7, 2, 0, 0, 9, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 9, 2, 0, 0,
- 8, 2, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,198, 0, 0, 0, 4, 0, 0, 0,234, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3,234, 0, 0, 0, 9, 2, 0, 0,198, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 60, 0, 0, 0,198, 0, 0, 0,
- 9, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 9, 2, 0, 0,234, 0, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
-199, 0, 0, 0, 60, 0, 0, 0, 8, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 8, 2, 0, 0, 82, 1, 0, 0,199, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3, 21, 0, 0, 0,199, 0, 0, 0, 82, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 82, 1, 0, 0,
- 8, 2, 0, 0,130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 87, 1, 0, 0,132, 0, 0, 0, 10, 2, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3, 10, 2, 0, 0,245, 0, 0, 0, 87, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 32, 0, 0, 0, 87, 1, 0, 0,
-245, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,245, 0, 0, 0, 10, 2, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
- 11, 2, 0, 0, 83, 0, 0, 0, 10, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 10, 2, 0, 0, 12, 2, 0, 0, 11, 2, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3, 65, 0, 0, 0, 11, 2, 0, 0, 12, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 12, 2, 0, 0,
- 10, 2, 0, 0,132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 86, 1, 0, 0, 23, 0, 0, 0,209, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3,209, 0, 0, 0, 12, 2, 0, 0, 86, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,132, 0, 0, 0, 86, 1, 0, 0,
- 12, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 12, 2, 0, 0,209, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
- 11, 2, 0, 0, 65, 0, 0, 0,208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,208, 0, 0, 0,244, 0, 0, 0, 11, 2, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3, 83, 0, 0, 0, 11, 2, 0, 0,244, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,244, 0, 0, 0,
-208, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 86, 1, 0, 0,132, 0, 0, 0, 13, 2, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3, 13, 2, 0, 0, 88, 1, 0, 0, 86, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 23, 0, 0, 0, 86, 1, 0, 0,
- 88, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 88, 1, 0, 0, 13, 2, 0, 0,133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
- 14, 2, 0, 0,133, 0, 0, 0, 13, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 13, 2, 0, 0, 15, 2, 0, 0, 14, 2, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3,134, 0, 0, 0, 14, 2, 0, 0, 15, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 15, 2, 0, 0,
- 13, 2, 0, 0,132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 87, 1, 0, 0, 32, 0, 0, 0, 91, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3, 91, 1, 0, 0, 15, 2, 0, 0, 87, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,132, 0, 0, 0, 87, 1, 0, 0,
- 15, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 15, 2, 0, 0, 91, 1, 0, 0,134, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
- 14, 2, 0, 0,134, 0, 0, 0, 90, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 90, 1, 0, 0, 89, 1, 0, 0, 14, 2, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3,133, 0, 0, 0, 14, 2, 0, 0, 89, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 89, 1, 0, 0,
- 90, 1, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,212, 0, 0, 0, 67, 0, 0, 0, 16, 2, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3, 16, 2, 0, 0,242, 0, 0, 0,212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 6, 0, 0, 0,212, 0, 0, 0,
-242, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,242, 0, 0, 0, 16, 2, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
- 17, 2, 0, 0, 82, 0, 0, 0, 16, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 16, 2, 0, 0, 18, 2, 0, 0, 17, 2, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3,134, 0, 0, 0, 17, 2, 0, 0, 18, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 18, 2, 0, 0,
- 16, 2, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,213, 0, 0, 0, 24, 0, 0, 0, 90, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3, 90, 1, 0, 0, 18, 2, 0, 0,213, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 67, 0, 0, 0,213, 0, 0, 0,
- 18, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 18, 2, 0, 0, 90, 1, 0, 0,134, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
- 17, 2, 0, 0,134, 0, 0, 0, 91, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 91, 1, 0, 0,243, 0, 0, 0, 17, 2, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3, 82, 0, 0, 0, 17, 2, 0, 0,243, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,243, 0, 0, 0,
- 91, 1, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,211, 0, 0, 0, 66, 0, 0, 0, 19, 2, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3, 19, 2, 0, 0, 89, 1, 0, 0,211, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 24, 0, 0, 0,211, 0, 0, 0,
- 89, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 89, 1, 0, 0, 19, 2, 0, 0,133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
- 20, 2, 0, 0,133, 0, 0, 0, 19, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 19, 2, 0, 0, 21, 2, 0, 0, 20, 2, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3, 64, 0, 0, 0, 20, 2, 0, 0, 21, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 21, 2, 0, 0,
- 19, 2, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,210, 0, 0, 0, 1, 0, 0, 0,206, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3,206, 0, 0, 0, 21, 2, 0, 0,210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 66, 0, 0, 0,210, 0, 0, 0,
- 21, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 21, 2, 0, 0,206, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
- 20, 2, 0, 0, 64, 0, 0, 0,207, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,207, 0, 0, 0, 88, 1, 0, 0, 20, 2, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3,133, 0, 0, 0, 20, 2, 0, 0, 88, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 88, 1, 0, 0,
-207, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 93, 1, 0, 0,135, 0, 0, 0, 22, 2, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3, 22, 2, 0, 0,247, 0, 0, 0, 93, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 33, 0, 0, 0, 93, 1, 0, 0,
-247, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,247, 0, 0, 0, 22, 2, 0, 0, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
- 23, 2, 0, 0, 84, 0, 0, 0, 22, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 22, 2, 0, 0, 24, 2, 0, 0, 23, 2, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3, 69, 0, 0, 0, 23, 2, 0, 0, 24, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 24, 2, 0, 0,
- 22, 2, 0, 0,135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 92, 1, 0, 0, 25, 0, 0, 0,217, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3,217, 0, 0, 0, 24, 2, 0, 0, 92, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,135, 0, 0, 0, 92, 1, 0, 0,
- 24, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 24, 2, 0, 0,217, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
- 23, 2, 0, 0, 69, 0, 0, 0,216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,216, 0, 0, 0,246, 0, 0, 0, 23, 2, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3, 84, 0, 0, 0, 23, 2, 0, 0,246, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,246, 0, 0, 0,
-216, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 92, 1, 0, 0,135, 0, 0, 0, 25, 2, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3, 25, 2, 0, 0, 94, 1, 0, 0, 92, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 25, 0, 0, 0, 92, 1, 0, 0,
- 94, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 94, 1, 0, 0, 25, 2, 0, 0,136, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
- 26, 2, 0, 0,136, 0, 0, 0, 25, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 25, 2, 0, 0, 27, 2, 0, 0, 26, 2, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3,137, 0, 0, 0, 26, 2, 0, 0, 27, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 27, 2, 0, 0,
- 25, 2, 0, 0,135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 93, 1, 0, 0, 33, 0, 0, 0, 97, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3, 97, 1, 0, 0, 27, 2, 0, 0, 93, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,135, 0, 0, 0, 93, 1, 0, 0,
- 27, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 27, 2, 0, 0, 97, 1, 0, 0,137, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
- 26, 2, 0, 0,137, 0, 0, 0, 96, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 96, 1, 0, 0, 95, 1, 0, 0, 26, 2, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3,136, 0, 0, 0, 26, 2, 0, 0, 95, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 95, 1, 0, 0,
- 96, 1, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,220, 0, 0, 0, 71, 0, 0, 0, 28, 2, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3, 28, 2, 0, 0,248, 0, 0, 0,220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 7, 0, 0, 0,220, 0, 0, 0,
-248, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,248, 0, 0, 0, 28, 2, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
- 29, 2, 0, 0, 85, 0, 0, 0, 28, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 28, 2, 0, 0, 30, 2, 0, 0, 29, 2, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3,137, 0, 0, 0, 29, 2, 0, 0, 30, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 30, 2, 0, 0,
- 28, 2, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,221, 0, 0, 0, 26, 0, 0, 0, 96, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3, 96, 1, 0, 0, 30, 2, 0, 0,221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 71, 0, 0, 0,221, 0, 0, 0,
- 30, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 30, 2, 0, 0, 96, 1, 0, 0,137, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
- 29, 2, 0, 0,137, 0, 0, 0, 97, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 97, 1, 0, 0,249, 0, 0, 0, 29, 2, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3, 85, 0, 0, 0, 29, 2, 0, 0,249, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,249, 0, 0, 0,
- 97, 1, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,219, 0, 0, 0, 70, 0, 0, 0, 31, 2, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3, 31, 2, 0, 0, 95, 1, 0, 0,219, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 26, 0, 0, 0,219, 0, 0, 0,
- 95, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 95, 1, 0, 0, 31, 2, 0, 0,136, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
- 32, 2, 0, 0,136, 0, 0, 0, 31, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 31, 2, 0, 0, 33, 2, 0, 0, 32, 2, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3, 68, 0, 0, 0, 32, 2, 0, 0, 33, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 33, 2, 0, 0,
- 31, 2, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,218, 0, 0, 0, 2, 0, 0, 0,214, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3,214, 0, 0, 0, 33, 2, 0, 0,218, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 70, 0, 0, 0,218, 0, 0, 0,
- 33, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 33, 2, 0, 0,214, 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
- 32, 2, 0, 0, 68, 0, 0, 0,215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,215, 0, 0, 0, 94, 1, 0, 0, 32, 2, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3,136, 0, 0, 0, 32, 2, 0, 0, 94, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 94, 1, 0, 0,
-215, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 99, 1, 0, 0,138, 0, 0, 0, 34, 2, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3, 34, 2, 0, 0,251, 0, 0, 0, 99, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 34, 0, 0, 0, 99, 1, 0, 0,
-251, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,251, 0, 0, 0, 34, 2, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
- 35, 2, 0, 0, 86, 0, 0, 0, 34, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 34, 2, 0, 0, 36, 2, 0, 0, 35, 2, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3, 73, 0, 0, 0, 35, 2, 0, 0, 36, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 36, 2, 0, 0,
- 34, 2, 0, 0,138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 98, 1, 0, 0, 27, 0, 0, 0,225, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3,225, 0, 0, 0, 36, 2, 0, 0, 98, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,138, 0, 0, 0, 98, 1, 0, 0,
- 36, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 36, 2, 0, 0,225, 0, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
- 35, 2, 0, 0, 73, 0, 0, 0,224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,224, 0, 0, 0,250, 0, 0, 0, 35, 2, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3, 86, 0, 0, 0, 35, 2, 0, 0,250, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,250, 0, 0, 0,
-224, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 98, 1, 0, 0,138, 0, 0, 0, 37, 2, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3, 37, 2, 0, 0,100, 1, 0, 0, 98, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 27, 0, 0, 0, 98, 1, 0, 0,
-100, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,100, 1, 0, 0, 37, 2, 0, 0,139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
- 38, 2, 0, 0,139, 0, 0, 0, 37, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 37, 2, 0, 0, 39, 2, 0, 0, 38, 2, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3,140, 0, 0, 0, 38, 2, 0, 0, 39, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 39, 2, 0, 0,
- 37, 2, 0, 0,138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 99, 1, 0, 0, 34, 0, 0, 0,103, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3,103, 1, 0, 0, 39, 2, 0, 0, 99, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,138, 0, 0, 0, 99, 1, 0, 0,
- 39, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 39, 2, 0, 0,103, 1, 0, 0,140, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
- 38, 2, 0, 0,140, 0, 0, 0,102, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,102, 1, 0, 0,101, 1, 0, 0, 38, 2, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3,139, 0, 0, 0, 38, 2, 0, 0,101, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,101, 1, 0, 0,
-102, 1, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,228, 0, 0, 0, 75, 0, 0, 0, 40, 2, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3, 40, 2, 0, 0,252, 0, 0, 0,228, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 8, 0, 0, 0,228, 0, 0, 0,
-252, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,252, 0, 0, 0, 40, 2, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
- 41, 2, 0, 0, 87, 0, 0, 0, 40, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 40, 2, 0, 0, 42, 2, 0, 0, 41, 2, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3,140, 0, 0, 0, 41, 2, 0, 0, 42, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 42, 2, 0, 0,
- 40, 2, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,229, 0, 0, 0, 28, 0, 0, 0,102, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3,102, 1, 0, 0, 42, 2, 0, 0,229, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 75, 0, 0, 0,229, 0, 0, 0,
- 42, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 42, 2, 0, 0,102, 1, 0, 0,140, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
- 41, 2, 0, 0,140, 0, 0, 0,103, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,103, 1, 0, 0,253, 0, 0, 0, 41, 2, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3, 87, 0, 0, 0, 41, 2, 0, 0,253, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,253, 0, 0, 0,
-103, 1, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,227, 0, 0, 0, 74, 0, 0, 0, 43, 2, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3, 43, 2, 0, 0,101, 1, 0, 0,227, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 28, 0, 0, 0,227, 0, 0, 0,
-101, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,101, 1, 0, 0, 43, 2, 0, 0,139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
- 44, 2, 0, 0,139, 0, 0, 0, 43, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 43, 2, 0, 0, 45, 2, 0, 0, 44, 2, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3, 72, 0, 0, 0, 44, 2, 0, 0, 45, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 45, 2, 0, 0,
- 43, 2, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,226, 0, 0, 0, 3, 0, 0, 0,222, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3,222, 0, 0, 0, 45, 2, 0, 0,226, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 74, 0, 0, 0,226, 0, 0, 0,
- 45, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 45, 2, 0, 0,222, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
- 44, 2, 0, 0, 72, 0, 0, 0,223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,223, 0, 0, 0,100, 1, 0, 0, 44, 2, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3,139, 0, 0, 0, 44, 2, 0, 0,100, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,100, 1, 0, 0,
-223, 0, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,105, 1, 0, 0,141, 0, 0, 0, 46, 2, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3, 46, 2, 0, 0,255, 0, 0, 0,105, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 35, 0, 0, 0,105, 1, 0, 0,
-255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,255, 0, 0, 0, 46, 2, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
- 47, 2, 0, 0, 88, 0, 0, 0, 46, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 46, 2, 0, 0, 48, 2, 0, 0, 47, 2, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3, 77, 0, 0, 0, 47, 2, 0, 0, 48, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 48, 2, 0, 0,
- 46, 2, 0, 0,141, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,104, 1, 0, 0, 29, 0, 0, 0,233, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3,233, 0, 0, 0, 48, 2, 0, 0,104, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,141, 0, 0, 0,104, 1, 0, 0,
- 48, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 48, 2, 0, 0,233, 0, 0, 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
- 47, 2, 0, 0, 77, 0, 0, 0,232, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,232, 0, 0, 0,254, 0, 0, 0, 47, 2, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3, 88, 0, 0, 0, 47, 2, 0, 0,254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,254, 0, 0, 0,
-232, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,104, 1, 0, 0,141, 0, 0, 0, 49, 2, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3, 49, 2, 0, 0,106, 1, 0, 0,104, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 29, 0, 0, 0,104, 1, 0, 0,
-106, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,106, 1, 0, 0, 49, 2, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
- 50, 2, 0, 0,142, 0, 0, 0, 49, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 49, 2, 0, 0, 51, 2, 0, 0, 50, 2, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3,143, 0, 0, 0, 50, 2, 0, 0, 51, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 51, 2, 0, 0,
- 49, 2, 0, 0,141, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,105, 1, 0, 0, 35, 0, 0, 0,109, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3,109, 1, 0, 0, 51, 2, 0, 0,105, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,141, 0, 0, 0,105, 1, 0, 0,
- 51, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 51, 2, 0, 0,109, 1, 0, 0,143, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
- 50, 2, 0, 0,143, 0, 0, 0,108, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,108, 1, 0, 0,107, 1, 0, 0, 50, 2, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3,142, 0, 0, 0, 50, 2, 0, 0,107, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,107, 1, 0, 0,
-108, 1, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,236, 0, 0, 0, 79, 0, 0, 0, 52, 2, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3, 52, 2, 0, 0, 0, 1, 0, 0,236, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 9, 0, 0, 0,236, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 1, 0, 0, 52, 2, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
- 53, 2, 0, 0, 89, 0, 0, 0, 52, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 52, 2, 0, 0, 54, 2, 0, 0, 53, 2, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3,143, 0, 0, 0, 53, 2, 0, 0, 54, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 54, 2, 0, 0,
- 52, 2, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,237, 0, 0, 0, 30, 0, 0, 0,108, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3,108, 1, 0, 0, 54, 2, 0, 0,237, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 79, 0, 0, 0,237, 0, 0, 0,
- 54, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 54, 2, 0, 0,108, 1, 0, 0,143, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
- 53, 2, 0, 0,143, 0, 0, 0,109, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,109, 1, 0, 0, 1, 1, 0, 0, 53, 2, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3, 89, 0, 0, 0, 53, 2, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 1, 0, 0,
-109, 1, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,235, 0, 0, 0, 78, 0, 0, 0, 55, 2, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3, 55, 2, 0, 0,107, 1, 0, 0,235, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 30, 0, 0, 0,235, 0, 0, 0,
-107, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,107, 1, 0, 0, 55, 2, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
- 56, 2, 0, 0,142, 0, 0, 0, 55, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 55, 2, 0, 0, 57, 2, 0, 0, 56, 2, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3, 76, 0, 0, 0, 56, 2, 0, 0, 57, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 57, 2, 0, 0,
- 55, 2, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,234, 0, 0, 0, 4, 0, 0, 0,230, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3,230, 0, 0, 0, 57, 2, 0, 0,234, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 78, 0, 0, 0,234, 0, 0, 0,
- 57, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 57, 2, 0, 0,230, 0, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
- 56, 2, 0, 0, 76, 0, 0, 0,231, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,231, 0, 0, 0,106, 1, 0, 0, 56, 2, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3,142, 0, 0, 0, 56, 2, 0, 0,106, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,106, 1, 0, 0,
-231, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,111, 1, 0, 0,144, 0, 0, 0, 58, 2, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3, 58, 2, 0, 0, 3, 1, 0, 0,111, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 36, 0, 0, 0,111, 1, 0, 0,
- 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 1, 0, 0, 58, 2, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
- 59, 2, 0, 0, 90, 0, 0, 0, 58, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 58, 2, 0, 0, 60, 2, 0, 0, 59, 2, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3, 81, 0, 0, 0, 59, 2, 0, 0, 60, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 60, 2, 0, 0,
- 58, 2, 0, 0,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,110, 1, 0, 0, 31, 0, 0, 0,241, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3,241, 0, 0, 0, 60, 2, 0, 0,110, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,144, 0, 0, 0,110, 1, 0, 0,
- 60, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 60, 2, 0, 0,241, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
- 59, 2, 0, 0, 81, 0, 0, 0,240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,240, 0, 0, 0, 2, 1, 0, 0, 59, 2, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3, 90, 0, 0, 0, 59, 2, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 2, 1, 0, 0,
-240, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,110, 1, 0, 0,144, 0, 0, 0, 61, 2, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3, 61, 2, 0, 0,113, 1, 0, 0,110, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 31, 0, 0, 0,110, 1, 0, 0,
-113, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,113, 1, 0, 0, 61, 2, 0, 0,145, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
- 62, 2, 0, 0,145, 0, 0, 0, 61, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 61, 2, 0, 0, 63, 2, 0, 0, 62, 2, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3,146, 0, 0, 0, 62, 2, 0, 0, 63, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 63, 2, 0, 0,
- 61, 2, 0, 0,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,111, 1, 0, 0, 36, 0, 0, 0,115, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3,115, 1, 0, 0, 63, 2, 0, 0,111, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,144, 0, 0, 0,111, 1, 0, 0,
- 63, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 63, 2, 0, 0,115, 1, 0, 0,146, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
- 62, 2, 0, 0,146, 0, 0, 0,114, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,114, 1, 0, 0,112, 1, 0, 0, 62, 2, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3,145, 0, 0, 0, 62, 2, 0, 0,112, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,112, 1, 0, 0,
-114, 1, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,204, 0, 0, 0, 63, 0, 0, 0, 64, 2, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3, 64, 2, 0, 0, 4, 1, 0, 0,204, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 10, 0, 0, 0,204, 0, 0, 0,
- 4, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 4, 1, 0, 0, 64, 2, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
- 65, 2, 0, 0, 91, 0, 0, 0, 64, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 64, 2, 0, 0, 66, 2, 0, 0, 65, 2, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3,146, 0, 0, 0, 65, 2, 0, 0, 66, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 66, 2, 0, 0,
- 64, 2, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,205, 0, 0, 0, 22, 0, 0, 0,114, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3,114, 1, 0, 0, 66, 2, 0, 0,205, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 63, 0, 0, 0,205, 0, 0, 0,
- 66, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 66, 2, 0, 0,114, 1, 0, 0,146, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
- 65, 2, 0, 0,146, 0, 0, 0,115, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,115, 1, 0, 0, 5, 1, 0, 0, 65, 2, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3, 91, 0, 0, 0, 65, 2, 0, 0, 5, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 5, 1, 0, 0,
-115, 1, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,203, 0, 0, 0, 62, 0, 0, 0, 67, 2, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3, 67, 2, 0, 0,112, 1, 0, 0,203, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 22, 0, 0, 0,203, 0, 0, 0,
-112, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,112, 1, 0, 0, 67, 2, 0, 0,145, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
- 68, 2, 0, 0,145, 0, 0, 0, 67, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 67, 2, 0, 0, 69, 2, 0, 0, 68, 2, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3, 80, 0, 0, 0, 68, 2, 0, 0, 69, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 69, 2, 0, 0,
- 67, 2, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,202, 0, 0, 0, 5, 0, 0, 0,238, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3,238, 0, 0, 0, 69, 2, 0, 0,202, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 62, 0, 0, 0,202, 0, 0, 0,
- 69, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 69, 2, 0, 0,238, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
- 68, 2, 0, 0, 80, 0, 0, 0,239, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,239, 0, 0, 0,113, 1, 0, 0, 68, 2, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3,145, 0, 0, 0, 68, 2, 0, 0,113, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,113, 1, 0, 0,
-239, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 70, 2, 0, 0,147, 0, 0, 0,117, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3,117, 1, 0, 0, 11, 1, 0, 0, 70, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 94, 0, 0, 0, 70, 2, 0, 0,
- 11, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 11, 1, 0, 0,117, 1, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
- 70, 2, 0, 0, 94, 0, 0, 0, 71, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 71, 2, 0, 0, 72, 2, 0, 0, 70, 2, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3,147, 0, 0, 0, 70, 2, 0, 0, 72, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 72, 2, 0, 0,
- 71, 2, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,243, 0, 0, 0, 32, 0, 0, 0,116, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3,116, 1, 0, 0, 72, 2, 0, 0,243, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 82, 0, 0, 0,243, 0, 0, 0,
- 72, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 72, 2, 0, 0,116, 1, 0, 0,147, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
-242, 0, 0, 0, 82, 0, 0, 0, 71, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 71, 2, 0, 0, 10, 1, 0, 0,242, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3, 6, 0, 0, 0,242, 0, 0, 0, 10, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 10, 1, 0, 0,
- 71, 2, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 73, 2, 0, 0,147, 0, 0, 0,116, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3,116, 1, 0, 0,118, 1, 0, 0, 73, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,148, 0, 0, 0, 73, 2, 0, 0,
-118, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,118, 1, 0, 0,116, 1, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
- 73, 2, 0, 0,148, 0, 0, 0, 74, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 74, 2, 0, 0, 75, 2, 0, 0, 73, 2, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3,147, 0, 0, 0, 73, 2, 0, 0, 75, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 75, 2, 0, 0,
- 74, 2, 0, 0,149, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,121, 1, 0, 0, 38, 0, 0, 0,117, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3,117, 1, 0, 0, 75, 2, 0, 0,121, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,149, 0, 0, 0,121, 1, 0, 0,
- 75, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 75, 2, 0, 0,117, 1, 0, 0,147, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
-120, 1, 0, 0,149, 0, 0, 0, 74, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 74, 2, 0, 0,119, 1, 0, 0,120, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3, 37, 0, 0, 0,120, 1, 0, 0,119, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,119, 1, 0, 0,
- 74, 2, 0, 0,148, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 76, 2, 0, 0, 93, 0, 0, 0, 8, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3, 8, 1, 0, 0, 12, 1, 0, 0, 76, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 95, 0, 0, 0, 76, 2, 0, 0,
- 12, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 12, 1, 0, 0, 8, 1, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
- 76, 2, 0, 0, 95, 0, 0, 0, 77, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 77, 2, 0, 0, 78, 2, 0, 0, 76, 2, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3, 93, 0, 0, 0, 76, 2, 0, 0, 78, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 78, 2, 0, 0,
- 77, 2, 0, 0,149, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,120, 1, 0, 0, 37, 0, 0, 0, 9, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3, 9, 1, 0, 0, 78, 2, 0, 0,120, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,149, 0, 0, 0,120, 1, 0, 0,
- 78, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 78, 2, 0, 0, 9, 1, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
-121, 1, 0, 0,149, 0, 0, 0, 77, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 77, 2, 0, 0, 13, 1, 0, 0,121, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3, 38, 0, 0, 0,121, 1, 0, 0, 13, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 13, 1, 0, 0,
- 77, 2, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 79, 2, 0, 0, 92, 0, 0, 0, 7, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3, 7, 1, 0, 0,119, 1, 0, 0, 79, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,148, 0, 0, 0, 79, 2, 0, 0,
-119, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,119, 1, 0, 0, 7, 1, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
- 79, 2, 0, 0,148, 0, 0, 0, 80, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 80, 2, 0, 0, 81, 2, 0, 0, 79, 2, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3, 92, 0, 0, 0, 79, 2, 0, 0, 81, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 81, 2, 0, 0,
- 80, 2, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,244, 0, 0, 0, 10, 0, 0, 0, 6, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3, 6, 1, 0, 0, 81, 2, 0, 0,244, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 83, 0, 0, 0,244, 0, 0, 0,
- 81, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 81, 2, 0, 0, 6, 1, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
-245, 0, 0, 0, 83, 0, 0, 0, 80, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 80, 2, 0, 0,118, 1, 0, 0,245, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3, 32, 0, 0, 0,245, 0, 0, 0,118, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,118, 1, 0, 0,
- 80, 2, 0, 0,148, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 82, 2, 0, 0,150, 0, 0, 0,123, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3,123, 1, 0, 0, 15, 1, 0, 0, 82, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 96, 0, 0, 0, 82, 2, 0, 0,
- 15, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 15, 1, 0, 0,123, 1, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
- 82, 2, 0, 0, 96, 0, 0, 0, 83, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 83, 2, 0, 0, 84, 2, 0, 0, 82, 2, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3,150, 0, 0, 0, 82, 2, 0, 0, 84, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 84, 2, 0, 0,
- 83, 2, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,249, 0, 0, 0, 33, 0, 0, 0,122, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3,122, 1, 0, 0, 84, 2, 0, 0,249, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 85, 0, 0, 0,249, 0, 0, 0,
- 84, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 84, 2, 0, 0,122, 1, 0, 0,150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
-248, 0, 0, 0, 85, 0, 0, 0, 83, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 83, 2, 0, 0, 14, 1, 0, 0,248, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3, 7, 0, 0, 0,248, 0, 0, 0, 14, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 14, 1, 0, 0,
- 83, 2, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 85, 2, 0, 0,150, 0, 0, 0,122, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3,122, 1, 0, 0,124, 1, 0, 0, 85, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,151, 0, 0, 0, 85, 2, 0, 0,
-124, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,124, 1, 0, 0,122, 1, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
- 85, 2, 0, 0,151, 0, 0, 0, 86, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 86, 2, 0, 0, 87, 2, 0, 0, 85, 2, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3,150, 0, 0, 0, 85, 2, 0, 0, 87, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 87, 2, 0, 0,
- 86, 2, 0, 0,152, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,127, 1, 0, 0, 39, 0, 0, 0,123, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3,123, 1, 0, 0, 87, 2, 0, 0,127, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,152, 0, 0, 0,127, 1, 0, 0,
- 87, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 87, 2, 0, 0,123, 1, 0, 0,150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
-126, 1, 0, 0,152, 0, 0, 0, 86, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 86, 2, 0, 0,125, 1, 0, 0,126, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3, 38, 0, 0, 0,126, 1, 0, 0,125, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,125, 1, 0, 0,
- 86, 2, 0, 0,151, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 88, 2, 0, 0, 95, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3, 12, 1, 0, 0, 16, 1, 0, 0, 88, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 97, 0, 0, 0, 88, 2, 0, 0,
- 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 16, 1, 0, 0, 12, 1, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
- 88, 2, 0, 0, 97, 0, 0, 0, 89, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 89, 2, 0, 0, 90, 2, 0, 0, 88, 2, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3, 95, 0, 0, 0, 88, 2, 0, 0, 90, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 90, 2, 0, 0,
- 89, 2, 0, 0,152, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,126, 1, 0, 0, 38, 0, 0, 0, 13, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3, 13, 1, 0, 0, 90, 2, 0, 0,126, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,152, 0, 0, 0,126, 1, 0, 0,
- 90, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 90, 2, 0, 0, 13, 1, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
-127, 1, 0, 0,152, 0, 0, 0, 89, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 89, 2, 0, 0, 17, 1, 0, 0,127, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3, 39, 0, 0, 0,127, 1, 0, 0, 17, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 17, 1, 0, 0,
- 89, 2, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 91, 2, 0, 0, 94, 0, 0, 0, 11, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3, 11, 1, 0, 0,125, 1, 0, 0, 91, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,151, 0, 0, 0, 91, 2, 0, 0,
-125, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,125, 1, 0, 0, 11, 1, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
- 91, 2, 0, 0,151, 0, 0, 0, 92, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 92, 2, 0, 0, 93, 2, 0, 0, 91, 2, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3, 94, 0, 0, 0, 91, 2, 0, 0, 93, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 93, 2, 0, 0,
- 92, 2, 0, 0, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,246, 0, 0, 0, 6, 0, 0, 0, 10, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3, 10, 1, 0, 0, 93, 2, 0, 0,246, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 84, 0, 0, 0,246, 0, 0, 0,
- 93, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 93, 2, 0, 0, 10, 1, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
-247, 0, 0, 0, 84, 0, 0, 0, 92, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 92, 2, 0, 0,124, 1, 0, 0,247, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3, 33, 0, 0, 0,247, 0, 0, 0,124, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,124, 1, 0, 0,
- 92, 2, 0, 0,151, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 94, 2, 0, 0,153, 0, 0, 0,129, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3,129, 1, 0, 0, 19, 1, 0, 0, 94, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 98, 0, 0, 0, 94, 2, 0, 0,
- 19, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 19, 1, 0, 0,129, 1, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
- 94, 2, 0, 0, 98, 0, 0, 0, 95, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 95, 2, 0, 0, 96, 2, 0, 0, 94, 2, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3,153, 0, 0, 0, 94, 2, 0, 0, 96, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 96, 2, 0, 0,
- 95, 2, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,253, 0, 0, 0, 34, 0, 0, 0,128, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3,128, 1, 0, 0, 96, 2, 0, 0,253, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 87, 0, 0, 0,253, 0, 0, 0,
- 96, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 96, 2, 0, 0,128, 1, 0, 0,153, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
-252, 0, 0, 0, 87, 0, 0, 0, 95, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 95, 2, 0, 0, 18, 1, 0, 0,252, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3, 8, 0, 0, 0,252, 0, 0, 0, 18, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 18, 1, 0, 0,
- 95, 2, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 97, 2, 0, 0,153, 0, 0, 0,128, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3,128, 1, 0, 0,130, 1, 0, 0, 97, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,154, 0, 0, 0, 97, 2, 0, 0,
-130, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,130, 1, 0, 0,128, 1, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
- 97, 2, 0, 0,154, 0, 0, 0, 98, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 98, 2, 0, 0, 99, 2, 0, 0, 97, 2, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3,153, 0, 0, 0, 97, 2, 0, 0, 99, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 99, 2, 0, 0,
- 98, 2, 0, 0,155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,133, 1, 0, 0, 40, 0, 0, 0,129, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3,129, 1, 0, 0, 99, 2, 0, 0,133, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,155, 0, 0, 0,133, 1, 0, 0,
- 99, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 99, 2, 0, 0,129, 1, 0, 0,153, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
-132, 1, 0, 0,155, 0, 0, 0, 98, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 98, 2, 0, 0,131, 1, 0, 0,132, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3, 39, 0, 0, 0,132, 1, 0, 0,131, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,131, 1, 0, 0,
- 98, 2, 0, 0,154, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,100, 2, 0, 0, 97, 0, 0, 0, 16, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3, 16, 1, 0, 0, 20, 1, 0, 0,100, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 99, 0, 0, 0,100, 2, 0, 0,
- 20, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 20, 1, 0, 0, 16, 1, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
-100, 2, 0, 0, 99, 0, 0, 0,101, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,101, 2, 0, 0,102, 2, 0, 0,100, 2, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3, 97, 0, 0, 0,100, 2, 0, 0,102, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,102, 2, 0, 0,
-101, 2, 0, 0,155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,132, 1, 0, 0, 39, 0, 0, 0, 17, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3, 17, 1, 0, 0,102, 2, 0, 0,132, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,155, 0, 0, 0,132, 1, 0, 0,
-102, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,102, 2, 0, 0, 17, 1, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
-133, 1, 0, 0,155, 0, 0, 0,101, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,101, 2, 0, 0, 21, 1, 0, 0,133, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3, 40, 0, 0, 0,133, 1, 0, 0, 21, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 21, 1, 0, 0,
-101, 2, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,103, 2, 0, 0, 96, 0, 0, 0, 15, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3, 15, 1, 0, 0,131, 1, 0, 0,103, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,154, 0, 0, 0,103, 2, 0, 0,
-131, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,131, 1, 0, 0, 15, 1, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
-103, 2, 0, 0,154, 0, 0, 0,104, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,104, 2, 0, 0,105, 2, 0, 0,103, 2, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3, 96, 0, 0, 0,103, 2, 0, 0,105, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,105, 2, 0, 0,
-104, 2, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,250, 0, 0, 0, 7, 0, 0, 0, 14, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3, 14, 1, 0, 0,105, 2, 0, 0,250, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 86, 0, 0, 0,250, 0, 0, 0,
-105, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,105, 2, 0, 0, 14, 1, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
-251, 0, 0, 0, 86, 0, 0, 0,104, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,104, 2, 0, 0,130, 1, 0, 0,251, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3, 34, 0, 0, 0,251, 0, 0, 0,130, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,130, 1, 0, 0,
-104, 2, 0, 0,154, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,106, 2, 0, 0,156, 0, 0, 0,135, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3,135, 1, 0, 0, 23, 1, 0, 0,106, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,100, 0, 0, 0,106, 2, 0, 0,
- 23, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 23, 1, 0, 0,135, 1, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
-106, 2, 0, 0,100, 0, 0, 0,107, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,107, 2, 0, 0,108, 2, 0, 0,106, 2, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3,156, 0, 0, 0,106, 2, 0, 0,108, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,108, 2, 0, 0,
-107, 2, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 1, 0, 0, 35, 0, 0, 0,134, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3,134, 1, 0, 0,108, 2, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 89, 0, 0, 0, 1, 1, 0, 0,
-108, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,108, 2, 0, 0,134, 1, 0, 0,156, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
- 0, 1, 0, 0, 89, 0, 0, 0,107, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,107, 2, 0, 0, 22, 1, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3, 9, 0, 0, 0, 0, 1, 0, 0, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 22, 1, 0, 0,
-107, 2, 0, 0,100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,109, 2, 0, 0,156, 0, 0, 0,134, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3,134, 1, 0, 0,136, 1, 0, 0,109, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,157, 0, 0, 0,109, 2, 0, 0,
-136, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,136, 1, 0, 0,134, 1, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
-109, 2, 0, 0,157, 0, 0, 0,110, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,110, 2, 0, 0,111, 2, 0, 0,109, 2, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3,156, 0, 0, 0,109, 2, 0, 0,111, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,111, 2, 0, 0,
-110, 2, 0, 0,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,139, 1, 0, 0, 41, 0, 0, 0,135, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3,135, 1, 0, 0,111, 2, 0, 0,139, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,158, 0, 0, 0,139, 1, 0, 0,
-111, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,111, 2, 0, 0,135, 1, 0, 0,156, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
-138, 1, 0, 0,158, 0, 0, 0,110, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,110, 2, 0, 0,137, 1, 0, 0,138, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3, 40, 0, 0, 0,138, 1, 0, 0,137, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,137, 1, 0, 0,
-110, 2, 0, 0,157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,112, 2, 0, 0, 99, 0, 0, 0, 20, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3, 20, 1, 0, 0, 24, 1, 0, 0,112, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,101, 0, 0, 0,112, 2, 0, 0,
- 24, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 24, 1, 0, 0, 20, 1, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
-112, 2, 0, 0,101, 0, 0, 0,113, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,113, 2, 0, 0,114, 2, 0, 0,112, 2, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3, 99, 0, 0, 0,112, 2, 0, 0,114, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,114, 2, 0, 0,
-113, 2, 0, 0,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,138, 1, 0, 0, 40, 0, 0, 0, 21, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3, 21, 1, 0, 0,114, 2, 0, 0,138, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,158, 0, 0, 0,138, 1, 0, 0,
-114, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,114, 2, 0, 0, 21, 1, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
-139, 1, 0, 0,158, 0, 0, 0,113, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,113, 2, 0, 0, 25, 1, 0, 0,139, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3, 41, 0, 0, 0,139, 1, 0, 0, 25, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 25, 1, 0, 0,
-113, 2, 0, 0,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,115, 2, 0, 0, 98, 0, 0, 0, 19, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3, 19, 1, 0, 0,137, 1, 0, 0,115, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,157, 0, 0, 0,115, 2, 0, 0,
-137, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,137, 1, 0, 0, 19, 1, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
-115, 2, 0, 0,157, 0, 0, 0,116, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,116, 2, 0, 0,117, 2, 0, 0,115, 2, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3, 98, 0, 0, 0,115, 2, 0, 0,117, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,117, 2, 0, 0,
-116, 2, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,254, 0, 0, 0, 8, 0, 0, 0, 18, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3, 18, 1, 0, 0,117, 2, 0, 0,254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 88, 0, 0, 0,254, 0, 0, 0,
-117, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,117, 2, 0, 0, 18, 1, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
-255, 0, 0, 0, 88, 0, 0, 0,116, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,116, 2, 0, 0,136, 1, 0, 0,255, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3, 35, 0, 0, 0,255, 0, 0, 0,136, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,136, 1, 0, 0,
-116, 2, 0, 0,157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,118, 2, 0, 0,159, 0, 0, 0,141, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3,141, 1, 0, 0, 7, 1, 0, 0,118, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 92, 0, 0, 0,118, 2, 0, 0,
- 7, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 7, 1, 0, 0,141, 1, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
-118, 2, 0, 0, 92, 0, 0, 0,119, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,119, 2, 0, 0,120, 2, 0, 0,118, 2, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3,159, 0, 0, 0,118, 2, 0, 0,120, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,120, 2, 0, 0,
-119, 2, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 5, 1, 0, 0, 36, 0, 0, 0,140, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3,140, 1, 0, 0,120, 2, 0, 0, 5, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 91, 0, 0, 0, 5, 1, 0, 0,
-120, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,120, 2, 0, 0,140, 1, 0, 0,159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
- 4, 1, 0, 0, 91, 0, 0, 0,119, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,119, 2, 0, 0, 6, 1, 0, 0, 4, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3, 10, 0, 0, 0, 4, 1, 0, 0, 6, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 6, 1, 0, 0,
-119, 2, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,121, 2, 0, 0,159, 0, 0, 0,140, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3,140, 1, 0, 0,142, 1, 0, 0,121, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,160, 0, 0, 0,121, 2, 0, 0,
-142, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,142, 1, 0, 0,140, 1, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
-121, 2, 0, 0,160, 0, 0, 0,122, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,122, 2, 0, 0,123, 2, 0, 0,121, 2, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3,159, 0, 0, 0,121, 2, 0, 0,123, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,123, 2, 0, 0,
-122, 2, 0, 0,161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,144, 1, 0, 0, 37, 0, 0, 0,141, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3,141, 1, 0, 0,123, 2, 0, 0,144, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,161, 0, 0, 0,144, 1, 0, 0,
-123, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,123, 2, 0, 0,141, 1, 0, 0,159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
-145, 1, 0, 0,161, 0, 0, 0,122, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,122, 2, 0, 0,143, 1, 0, 0,145, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3, 41, 0, 0, 0,145, 1, 0, 0,143, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,143, 1, 0, 0,
-122, 2, 0, 0,160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,124, 2, 0, 0,101, 0, 0, 0, 24, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3, 24, 1, 0, 0, 8, 1, 0, 0,124, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 93, 0, 0, 0,124, 2, 0, 0,
- 8, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 8, 1, 0, 0, 24, 1, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
-124, 2, 0, 0, 93, 0, 0, 0,125, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,125, 2, 0, 0,126, 2, 0, 0,124, 2, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3,101, 0, 0, 0,124, 2, 0, 0,126, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,126, 2, 0, 0,
-125, 2, 0, 0,161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,145, 1, 0, 0, 41, 0, 0, 0, 25, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3, 25, 1, 0, 0,126, 2, 0, 0,145, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,161, 0, 0, 0,145, 1, 0, 0,
-126, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,126, 2, 0, 0, 25, 1, 0, 0,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
-144, 1, 0, 0,161, 0, 0, 0,125, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,125, 2, 0, 0, 9, 1, 0, 0,144, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3, 37, 0, 0, 0,144, 1, 0, 0, 9, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 9, 1, 0, 0,
-125, 2, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,127, 2, 0, 0,100, 0, 0, 0, 23, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3, 23, 1, 0, 0,143, 1, 0, 0,127, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,160, 0, 0, 0,127, 2, 0, 0,
-143, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,143, 1, 0, 0, 23, 1, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
-127, 2, 0, 0,160, 0, 0, 0,128, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,128, 2, 0, 0,129, 2, 0, 0,127, 2, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3,100, 0, 0, 0,127, 2, 0, 0,129, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,129, 2, 0, 0,
-128, 2, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 2, 1, 0, 0, 9, 0, 0, 0, 22, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3, 22, 1, 0, 0,129, 2, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 90, 0, 0, 0, 2, 1, 0, 0,
-129, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,129, 2, 0, 0, 22, 1, 0, 0,100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
- 3, 1, 0, 0, 90, 0, 0, 0,128, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,128, 2, 0, 0,142, 1, 0, 0, 3, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3, 36, 0, 0, 0, 3, 1, 0, 0,142, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,142, 1, 0, 0,
-128, 2, 0, 0,160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 68, 65, 84, 65, 0,220, 0, 0, 8, 75, 18, 3, 61, 0, 0, 0,
- 0, 5, 0, 0,166,222,110, 63, 9,205, 55, 63,212,132,105, 63,201,236, 65, 63,218,153,103, 63,119,155, 54, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,218,153,103, 63,119,155, 54, 63,118,148,108, 63,211,160, 44, 63,
-166,222,110, 63, 9,205, 55, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 36, 51,115, 63,
- 36, 28, 45, 63,166,222,110, 63, 9,205, 55, 63,118,148,108, 63,211,160, 44, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0,118,148,108, 63,211,160, 44, 63,218,153,103, 63,119,155, 54, 63, 87, 17,102, 63,229, 52, 43, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 56, 81, 96, 63,170, 55, 52, 63, 87, 17,102, 63,
-229, 52, 43, 63,218,153,103, 63,119,155, 54, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
-218,153,103, 63,119,155, 54, 63, 9, 75, 97, 63, 92,233, 63, 63, 56, 81, 96, 63,170, 55, 52, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,138,153, 89, 63, 49, 86, 60, 63, 56, 81, 96, 63,170, 55, 52, 63, 9, 75, 97, 63,
- 92,233, 63, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 9, 75, 97, 63, 92,233, 63, 63,
-218,153,103, 63,119,155, 54, 63,212,132,105, 63,201,236, 65, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0,103,167, 98, 63,168, 39, 75, 63,138,153, 89, 63, 39,228, 82, 63,139,153, 89, 63,255,153, 71, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,139,153, 89, 63,255,153, 71, 63, 9, 75, 97, 63, 92,233, 63, 63,
-103,167, 98, 63,168, 39, 75, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,212,132,105, 63,
-201,236, 65, 63,103,167, 98, 63,168, 39, 75, 63, 9, 75, 97, 63, 92,233, 63, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0, 9, 75, 97, 63, 92,233, 63, 63,139,153, 89, 63,255,153, 71, 63,138,153, 89, 63, 49, 86, 60, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 56, 81, 96, 63,170, 55, 52, 63,138,153, 89, 63,
- 49, 86, 60, 63,139,153, 89, 63, 79, 12, 49, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
-139,153, 89, 63, 79, 12, 49, 63,205,182, 95, 63,222,228, 40, 63, 56, 81, 96, 63,170, 55, 52, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 87, 17,102, 63,229, 52, 43, 63, 56, 81, 96, 63,170, 55, 52, 63,205,182, 95, 63,
-222,228, 40, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,205,182, 95, 63,222,228, 40, 63,
-139,153, 89, 63, 79, 12, 49, 63,139,153, 89, 63, 45,200, 37, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0,103,167, 98, 63,168, 39, 75, 63,212,132,105, 63,201,236, 65, 63,168, 83,109, 63,207, 83, 78, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,168, 83,109, 63,207, 83, 78, 63,135, 85,101, 63,148, 64, 88, 63,
-103,167, 98, 63,168, 39, 75, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,138,153, 89, 63,
- 39,228, 82, 63,103,167, 98, 63,168, 39, 75, 63,135, 85,101, 63,148, 64, 88, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0,135, 85,101, 63,148, 64, 88, 63,168, 83,109, 63,207, 83, 78, 63, 36, 51,115, 63, 22, 56, 90, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,162, 18,121, 63,207, 83, 78, 63, 36, 51,115, 63,
- 22, 56, 90, 63,168, 83,109, 63,207, 83, 78, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
-168, 83,109, 63,207, 83, 78, 63, 36, 51,115, 63,115, 23, 67, 63,162, 18,121, 63,207, 83, 78, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,116,225,124, 63,202,236, 65, 63,162, 18,121, 63,207, 83, 78, 63, 36, 51,115, 63,
-115, 23, 67, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 36, 51,115, 63,115, 23, 67, 63,
-168, 83,109, 63,207, 83, 78, 63,212,132,105, 63,201,236, 65, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0,166,222,110, 63, 9,205, 55, 63, 36, 51,115, 63, 36, 28, 45, 63,163,135,119, 63, 11,205, 55, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,163,135,119, 63, 11,205, 55, 63, 36, 51,115, 63,115, 23, 67, 63,
-166,222,110, 63, 9,205, 55, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,212,132,105, 63,
-201,236, 65, 63,166,222,110, 63, 9,205, 55, 63, 36, 51,115, 63,115, 23, 67, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0, 36, 51,115, 63,115, 23, 67, 63,163,135,119, 63, 11,205, 55, 63,116,225,124, 63,202,236, 65, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,162, 18,121, 63,207, 83, 78, 63,116,225,124, 63,
-202,236, 65, 63,113,223,129, 63,170, 39, 75, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
-113,223,129, 63,170, 39, 75, 63, 98,136,128, 63,148, 64, 88, 63,162, 18,121, 63,207, 83, 78, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 36, 51,115, 63, 22, 56, 90, 63,162, 18,121, 63,207, 83, 78, 63, 98,136,128, 63,
-148, 64, 88, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 95, 98,136, 59,148, 64, 88, 63,
-160,184,111, 60,170, 39, 75, 63,243,203, 76, 61, 41,228, 82, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0,243,203, 76, 61, 82, 12, 49, 63,246,203, 76, 61, 53, 86, 60, 63, 31,162,194, 60,172, 55, 52, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 31,162,194, 60,172, 55, 52, 63,111,239,213, 60,223,228, 40, 63,
-243,203, 76, 61, 82, 12, 49, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,246,203, 76, 61,
- 48,200, 37, 63,243,203, 76, 61, 82, 12, 49, 63,111,239,213, 60,223,228, 40, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0,111,239,213, 60,223,228, 40, 63, 31,162,194, 60,172, 55, 52, 63,120,226,169, 58,230, 52, 43, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,111,204,126, 63,121,155, 54, 63,121, 42,128, 63,
-230, 52, 43, 63,136, 10,131, 63,172, 55, 52, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
-136, 10,131, 63,172, 55, 52, 63,160,141,130, 63, 95,233, 63, 63,111,204,126, 63,121,155, 54, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,116,225,124, 63,202,236, 65, 63,111,204,126, 63,121,155, 54, 63,160,141,130, 63,
- 95,233, 63, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 11,104,163, 60, 95,233, 63, 63,
- 31,162,194, 60,172, 55, 52, 63,246,203, 76, 61, 53, 86, 60, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0,244,203, 76, 61, 2,154, 71, 63,243,203, 76, 61, 41,228, 82, 63,160,184,111, 60,170, 39, 75, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,160,184,111, 60,170, 39, 75, 63, 11,104,163, 60, 95,233, 63, 63,
-244,203, 76, 61, 2,154, 71, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,246,203, 76, 61,
- 53, 86, 60, 63,244,203, 76, 61, 2,154, 71, 63, 11,104,163, 60, 95,233, 63, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0,160,141,130, 63, 95,233, 63, 63,113,223,129, 63,170, 39, 75, 63,116,225,124, 63,202,236, 65, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,111,204,126, 63,121,155, 54, 63,116,225,124, 63,
-202,236, 65, 63,163,135,119, 63, 11,205, 55, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
-163,135,119, 63, 11,205, 55, 63,210,209,121, 63,212,160, 44, 63,111,204,126, 63,121,155, 54, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,121, 42,128, 63,230, 52, 43, 63,111,204,126, 63,121,155, 54, 63,210,209,121, 63,
-212,160, 44, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,210,209,121, 63,212,160, 44, 63,
-163,135,119, 63, 11,205, 55, 63, 36, 51,115, 63, 36, 28, 45, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 95,102,134, 63, 79, 46, 94, 63, 95,102,134, 63, 22,114,105, 63, 52,205,124, 63, 58, 26, 99, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 52,205,124, 63, 58, 26, 99, 63, 98,136,128, 63,148, 64, 88, 63,
- 95,102,134, 63, 79, 46, 94, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,243,203, 76, 61,
- 41,228, 82, 63,234,203, 76, 61, 79, 46, 94, 63, 95, 98,136, 59,148, 64, 88, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0, 98,136,128, 63,148, 64, 88, 63, 52,205,124, 63, 58, 26, 99, 63, 36, 51,115, 63, 22, 56, 90, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 21,153,105, 63, 58, 26, 99, 63, 36, 51,115, 63,
- 22, 56, 90, 63, 52,205,124, 63, 58, 26, 99, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
- 52,205,124, 63, 58, 26, 99, 63, 32, 51,115, 63,212,154,109, 63, 21,153,105, 63, 58, 26, 99, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,138,153, 89, 63, 19,114,105, 63, 21,153,105, 63, 58, 26, 99, 63, 32, 51,115, 63,
-212,154,109, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 32, 51,115, 63,212,154,109, 63,
- 52,205,124, 63, 58, 26, 99, 63, 95,102,134, 63, 22,114,105, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 95,102,134, 63,242,187,116, 63, 3,153, 59, 63, 0, 0,128, 63,136,153, 89, 63,242,187,116, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,136,153, 89, 63,242,187,116, 63, 32, 51,115, 63,212,154,109, 63,
- 95,102,134, 63,242,187,116, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 95,102,134, 63,
- 22,114,105, 63, 95,102,134, 63,242,187,116, 63, 32, 51,115, 63,212,154,109, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0, 32, 51,115, 63,212,154,109, 63,136,153, 89, 63,242,187,116, 63,138,153, 89, 63, 19,114,105, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 21,153,105, 63, 58, 26, 99, 63,138,153, 89, 63,
- 19,114,105, 63,138,153, 89, 63, 77, 46, 94, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
-138,153, 89, 63, 77, 46, 94, 63,135, 85,101, 63,148, 64, 88, 63, 21,153,105, 63, 58, 26, 99, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 36, 51,115, 63, 22, 56, 90, 63, 21,153,105, 63, 58, 26, 99, 63,135, 85,101, 63,
-148, 64, 88, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,135, 85,101, 63,148, 64, 88, 63,
-138,153, 89, 63, 77, 46, 94, 63,138,153, 89, 63, 39,228, 82, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 67,153, 75, 63,113,155, 54, 63, 74,174, 73, 63,193,236, 65, 63,124, 84, 68, 63,255,204, 55, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,124, 84, 68, 63,255,204, 55, 63,169,158, 70, 63,200,160, 44, 63,
- 67,153, 75, 63,113,155, 54, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,196, 33, 77, 63,
-221, 52, 43, 63, 67,153, 75, 63,113,155, 54, 63,169,158, 70, 63,200,160, 44, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0,169,158, 70, 63,200,160, 44, 63,124, 84, 68, 63,255,204, 55, 63, 0, 0, 64, 63, 24, 28, 45, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 67,153, 75, 63,113,155, 54, 63,196, 33, 77, 63,
-221, 52, 43, 63,225,225, 82, 63,165, 55, 52, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
-225,225, 82, 63,165, 55, 52, 63, 16,232, 81, 63, 89,233, 63, 63, 67,153, 75, 63,113,155, 54, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 74,174, 73, 63,193,236, 65, 63, 67,153, 75, 63,113,155, 54, 63, 16,232, 81, 63,
- 89,233, 63, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 16,232, 81, 63, 89,233, 63, 63,
-225,225, 82, 63,165, 55, 52, 63,138,153, 89, 63, 49, 86, 60, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0,139,153, 89, 63,255,153, 71, 63,138,153, 89, 63, 39,228, 82, 63,179,139, 80, 63,164, 39, 75, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,179,139, 80, 63,164, 39, 75, 63, 16,232, 81, 63, 89,233, 63, 63,
-139,153, 89, 63,255,153, 71, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,138,153, 89, 63,
- 49, 86, 60, 63,139,153, 89, 63,255,153, 71, 63, 16,232, 81, 63, 89,233, 63, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0, 16,232, 81, 63, 89,233, 63, 63,179,139, 80, 63,164, 39, 75, 63, 74,174, 73, 63,193,236, 65, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,139,153, 89, 63, 79, 12, 49, 63,138,153, 89, 63,
- 49, 86, 60, 63,225,225, 82, 63,165, 55, 52, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
-225,225, 82, 63,165, 55, 52, 63, 75,124, 83, 63,217,228, 40, 63,139,153, 89, 63, 79, 12, 49, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,139,153, 89, 63, 45,200, 37, 63,139,153, 89, 63, 79, 12, 49, 63, 75,124, 83, 63,
-217,228, 40, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 75,124, 83, 63,217,228, 40, 63,
-225,225, 82, 63,165, 55, 52, 63,196, 33, 77, 63,221, 52, 43, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0,120,223, 69, 63,198, 83, 78, 63, 74,174, 73, 63,193,236, 65, 63,179,139, 80, 63,164, 39, 75, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,179,139, 80, 63,164, 39, 75, 63,148,221, 77, 63,140, 64, 88, 63,
-120,223, 69, 63,198, 83, 78, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 64, 63,
- 12, 56, 90, 63,120,223, 69, 63,198, 83, 78, 63,148,221, 77, 63,140, 64, 88, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0,148,221, 77, 63,140, 64, 88, 63,179,139, 80, 63,164, 39, 75, 63,138,153, 89, 63, 39,228, 82, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,120,223, 69, 63,198, 83, 78, 63, 0, 0, 64, 63,
- 12, 56, 90, 63,136, 32, 58, 63,198, 83, 78, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
-136, 32, 58, 63,198, 83, 78, 63, 0, 0, 64, 63,106, 23, 67, 63,120,223, 69, 63,198, 83, 78, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 74,174, 73, 63,193,236, 65, 63,120,223, 69, 63,198, 83, 78, 63, 0, 0, 64, 63,
-106, 23, 67, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 64, 63,106, 23, 67, 63,
-136, 32, 58, 63,198, 83, 78, 63,182, 81, 54, 63,193,236, 65, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0,132,171, 59, 63,255,204, 55, 63, 0, 0, 64, 63, 24, 28, 45, 63,124, 84, 68, 63,255,204, 55, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,124, 84, 68, 63,255,204, 55, 63, 0, 0, 64, 63,106, 23, 67, 63,
-132,171, 59, 63,255,204, 55, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,182, 81, 54, 63,
-193,236, 65, 63,132,171, 59, 63,255,204, 55, 63, 0, 0, 64, 63,106, 23, 67, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 64, 63,106, 23, 67, 63,124, 84, 68, 63,255,204, 55, 63, 74,174, 73, 63,193,236, 65, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 77,116, 47, 63,164, 39, 75, 63,182, 81, 54, 63,
-193,236, 65, 63,136, 32, 58, 63,198, 83, 78, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
-136, 32, 58, 63,198, 83, 78, 63,108, 34, 50, 63,140, 64, 88, 63, 77,116, 47, 63,164, 39, 75, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,118,102, 38, 63, 38,228, 82, 63, 77,116, 47, 63,164, 39, 75, 63,108, 34, 50, 63,
-140, 64, 88, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,108, 34, 50, 63,140, 64, 88, 63,
-136, 32, 58, 63,198, 83, 78, 63, 0, 0, 64, 63, 12, 56, 90, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 31, 30, 45, 63,165, 55, 52, 63,117,102, 38, 63, 50, 86, 60, 63,117,102, 38, 63, 78, 12, 49, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,117,102, 38, 63, 78, 12, 49, 63,181,131, 44, 63,216,228, 40, 63,
- 31, 30, 45, 63,165, 55, 52, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 60,222, 50, 63,
-221, 52, 43, 63, 31, 30, 45, 63,165, 55, 52, 63,181,131, 44, 63,216,228, 40, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0,181,131, 44, 63,216,228, 40, 63,117,102, 38, 63, 78, 12, 49, 63,117,102, 38, 63, 45,200, 37, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 31, 30, 45, 63,165, 55, 52, 63, 60,222, 50, 63,
-221, 52, 43, 63,189,102, 52, 63,113,155, 54, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
-189,102, 52, 63,113,155, 54, 63,240, 23, 46, 63, 89,233, 63, 63, 31, 30, 45, 63,165, 55, 52, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,117,102, 38, 63, 50, 86, 60, 63, 31, 30, 45, 63,165, 55, 52, 63,240, 23, 46, 63,
- 89,233, 63, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,240, 23, 46, 63, 89,233, 63, 63,
-189,102, 52, 63,113,155, 54, 63,182, 81, 54, 63,193,236, 65, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 77,116, 47, 63,164, 39, 75, 63,118,102, 38, 63, 38,228, 82, 63,117,102, 38, 63,255,153, 71, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,117,102, 38, 63,255,153, 71, 63,240, 23, 46, 63, 89,233, 63, 63,
- 77,116, 47, 63,164, 39, 75, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,182, 81, 54, 63,
-193,236, 65, 63, 77,116, 47, 63,164, 39, 75, 63,240, 23, 46, 63, 89,233, 63, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0,240, 23, 46, 63, 89,233, 63, 63,117,102, 38, 63,255,153, 71, 63,117,102, 38, 63, 50, 86, 60, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,132,171, 59, 63,255,204, 55, 63,182, 81, 54, 63,
-193,236, 65, 63,189,102, 52, 63,113,155, 54, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
-189,102, 52, 63,113,155, 54, 63, 87, 97, 57, 63,200,160, 44, 63,132,171, 59, 63,255,204, 55, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 64, 63, 24, 28, 45, 63,132,171, 59, 63,255,204, 55, 63, 87, 97, 57, 63,
-200,160, 44, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 87, 97, 57, 63,200,160, 44, 63,
-189,102, 52, 63,113,155, 54, 63, 60,222, 50, 63,221, 52, 43, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0,250,101, 54, 63, 51, 26, 99, 63,118,102, 38, 63, 19,114,105, 63,118,102, 38, 63, 77, 46, 94, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,118,102, 38, 63, 77, 46, 94, 63,108, 34, 50, 63,140, 64, 88, 63,
-250,101, 54, 63, 51, 26, 99, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 64, 63,
- 12, 56, 90, 63,250,101, 54, 63, 51, 26, 99, 63,108, 34, 50, 63,140, 64, 88, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0,108, 34, 50, 63,140, 64, 88, 63,118,102, 38, 63, 77, 46, 94, 63,118,102, 38, 63, 38,228, 82, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,250,101, 54, 63, 51, 26, 99, 63, 0, 0, 64, 63,
- 12, 56, 90, 63, 6,154, 73, 63, 51, 26, 99, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
- 6,154, 73, 63, 51, 26, 99, 63, 0, 0, 64, 63,206,154,109, 63,250,101, 54, 63, 51, 26, 99, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,118,102, 38, 63, 19,114,105, 63,250,101, 54, 63, 51, 26, 99, 63, 0, 0, 64, 63,
-206,154,109, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 64, 63,206,154,109, 63,
- 6,154, 73, 63, 51, 26, 99, 63,138,153, 89, 63, 19,114,105, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0,136,153, 89, 63,242,187,116, 63, 3,153, 59, 63, 0, 0,128, 63,120,102, 38, 63,242,187,116, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,120,102, 38, 63,242,187,116, 63, 0, 0, 64, 63,206,154,109, 63,
-136,153, 89, 63,242,187,116, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,138,153, 89, 63,
- 19,114,105, 63,136,153, 89, 63,242,187,116, 63, 0, 0, 64, 63,206,154,109, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 64, 63,206,154,109, 63,120,102, 38, 63,242,187,116, 63,118,102, 38, 63, 19,114,105, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,138,153, 89, 63, 77, 46, 94, 63,138,153, 89, 63,
- 19,114,105, 63, 6,154, 73, 63, 51, 26, 99, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
- 6,154, 73, 63, 51, 26, 99, 63,148,221, 77, 63,140, 64, 88, 63,138,153, 89, 63, 77, 46, 94, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,138,153, 89, 63, 39,228, 82, 63,138,153, 89, 63, 77, 46, 94, 63,148,221, 77, 63,
-140, 64, 88, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,148,221, 77, 63,140, 64, 88, 63,
- 6,154, 73, 63, 51, 26, 99, 63, 0, 0, 64, 63, 12, 56, 90, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0,167, 71, 8, 62, 7,205, 55, 63,170,192,229, 61,200,236, 65, 63,203,104,214, 61,120,155, 54, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,203,104,214, 61,120,155, 54, 63,201, 61,254, 61,207,160, 44, 63,
-167, 71, 8, 62, 7,205, 55, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,173,153, 25, 62,
- 27, 28, 45, 63,167, 71, 8, 62, 7,205, 55, 63,201, 61,254, 61,207,160, 44, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0,201, 61,254, 61,207,160, 44, 63,203,104,214, 61,120,155, 54, 63,175, 36,202, 61,228, 52, 43, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,145, 35,156, 61,172, 55, 52, 63,175, 36,202, 61,
-228, 52, 43, 63,203,104,214, 61,120,155, 54, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
-203,104,214, 61,120,155, 54, 63, 32,242,163, 61, 96,233, 63, 63,145, 35,156, 61,172, 55, 52, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,246,203, 76, 61, 53, 86, 60, 63,145, 35,156, 61,172, 55, 52, 63, 32,242,163, 61,
- 96,233, 63, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 32,242,163, 61, 96,233, 63, 63,
-203,104,214, 61,120,155, 54, 63,170,192,229, 61,200,236, 65, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 17,213,174, 61,171, 39, 75, 63,243,203, 76, 61, 41,228, 82, 63,244,203, 76, 61, 2,154, 71, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,244,203, 76, 61, 2,154, 71, 63, 32,242,163, 61, 96,233, 63, 63,
- 17,213,174, 61,171, 39, 75, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,170,192,229, 61,
-200,236, 65, 63, 17,213,174, 61,171, 39, 75, 63, 32,242,163, 61, 96,233, 63, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0, 32,242,163, 61, 96,233, 63, 63,244,203, 76, 61, 2,154, 71, 63,246,203, 76, 61, 53, 86, 60, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,145, 35,156, 61,172, 55, 52, 63,246,203, 76, 61,
- 53, 86, 60, 63,243,203, 76, 61, 82, 12, 49, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
-243,203, 76, 61, 82, 12, 49, 63, 53, 80,151, 61,223,228, 40, 63,145, 35,156, 61,172, 55, 52, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,175, 36,202, 61,228, 52, 43, 63,145, 35,156, 61,172, 55, 52, 63, 53, 80,151, 61,
-223,228, 40, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 53, 80,151, 61,223,228, 40, 63,
-243,203, 76, 61, 82, 12, 49, 63,246,203, 76, 61, 48,200, 37, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 17,213,174, 61,171, 39, 75, 63,170,192,229, 61,200,236, 65, 63,169, 27, 2, 62,204, 83, 78, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,169, 27, 2, 62,204, 83, 78, 63, 23, 70,196, 61,147, 64, 88, 63,
- 17,213,174, 61,171, 39, 75, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,243,203, 76, 61,
- 41,228, 82, 63, 17,213,174, 61,171, 39, 75, 63, 23, 70,196, 61,147, 64, 88, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0, 23, 70,196, 61,147, 64, 88, 63,169, 27, 2, 62,204, 83, 78, 63,160,153, 25, 62, 14, 56, 90, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,162, 23, 49, 62,195, 83, 78, 63,160,153, 25, 62,
- 14, 56, 90, 63,169, 27, 2, 62,204, 83, 78, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
-169, 27, 2, 62,204, 83, 78, 63,172,153, 25, 62,108, 23, 67, 63,162, 23, 49, 62,195, 83, 78, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,240, 82, 64, 62,183,236, 65, 63,162, 23, 49, 62,195, 83, 78, 63,172,153, 25, 62,
-108, 23, 67, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,172,153, 25, 62,108, 23, 67, 63,
-169, 27, 2, 62,204, 83, 78, 63,170,192,229, 61,200,236, 65, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0,167, 71, 8, 62, 7,205, 55, 63,173,153, 25, 62, 27, 28, 45, 63,173,235, 42, 62,254,204, 55, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,173,235, 42, 62,254,204, 55, 63,172,153, 25, 62,108, 23, 67, 63,
-167, 71, 8, 62, 7,205, 55, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,170,192,229, 61,
-200,236, 65, 63,167, 71, 8, 62, 7,205, 55, 63,172,153, 25, 62,108, 23, 67, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0,172,153, 25, 62,108, 23, 67, 63,173,235, 42, 62,254,204, 55, 63,240, 82, 64, 62,183,236, 65, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,162, 23, 49, 62,195, 83, 78, 63,240, 82, 64, 62,
-183,236, 65, 63,166,200, 91, 62,147, 39, 75, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
-166,200, 91, 62,147, 39, 75, 63, 34, 16, 81, 62,131, 64, 88, 63,162, 23, 49, 62,195, 83, 78, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,160,153, 25, 62, 14, 56, 90, 63,162, 23, 49, 62,195, 83, 78, 63, 34, 16, 81, 62,
-131, 64, 88, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 34, 16, 81, 62,131, 64, 88, 63,
-166,200, 91, 62,147, 39, 75, 63, 0, 0,128, 62, 13,228, 82, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,128, 62, 47, 12, 49, 63, 0, 0,128, 62, 19, 86, 60, 63, 92, 33,101, 62,146, 55, 52, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 92, 33,101, 62,146, 55, 52, 63, 14,139,103, 62,199,228, 40, 63,
- 0, 0,128, 62, 47, 12, 49, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0,128, 62,
- 23,200, 37, 63, 0, 0,128, 62, 47, 12, 49, 63, 14,139,103, 62,199,228, 40, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0, 14,139,103, 62,199,228, 40, 63, 92, 33,101, 62,146, 55, 52, 63,230, 32, 78, 62,211, 52, 43, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,223,254, 71, 62,102,155, 54, 63,230, 32, 78, 62,
-211, 52, 43, 63, 92, 33,101, 62,146, 55, 52, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
- 92, 33,101, 62,146, 55, 52, 63, 23, 58, 97, 62, 69,233, 63, 63,223,254, 71, 62,102,155, 54, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,240, 82, 64, 62,183,236, 65, 63,223,254, 71, 62,102,155, 54, 63, 23, 58, 97, 62,
- 69,233, 63, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 23, 58, 97, 62, 69,233, 63, 63,
- 92, 33,101, 62,146, 55, 52, 63, 0, 0,128, 62, 19, 86, 60, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,128, 62,228,153, 71, 63, 0, 0,128, 62, 13,228, 82, 63,166,200, 91, 62,147, 39, 75, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,166,200, 91, 62,147, 39, 75, 63, 23, 58, 97, 62, 69,233, 63, 63,
- 0, 0,128, 62,228,153, 71, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0,128, 62,
- 19, 86, 60, 63, 0, 0,128, 62,228,153, 71, 63, 23, 58, 97, 62, 69,233, 63, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0, 23, 58, 97, 62, 69,233, 63, 63,166,200, 91, 62,147, 39, 75, 63,240, 82, 64, 62,183,236, 65, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,223,254, 71, 62,102,155, 54, 63,240, 82, 64, 62,
-183,236, 65, 63,173,235, 42, 62,254,204, 55, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
-173,235, 42, 62,254,204, 55, 63,105, 20, 52, 62,198,160, 44, 63,223,254, 71, 62,102,155, 54, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,230, 32, 78, 62,211, 52, 43, 63,223,254, 71, 62,102,155, 54, 63,105, 20, 52, 62,
-198,160, 44, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,105, 20, 52, 62,198,160, 44, 63,
-173,235, 42, 62,254,204, 55, 63,173,153, 25, 62, 27, 28, 45, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,128, 62, 58, 46, 94, 63, 0, 0,128, 62, 8,114,105, 63,230, 1, 64, 62, 49, 26, 99, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,230, 1, 64, 62, 49, 26, 99, 63, 34, 16, 81, 62,131, 64, 88, 63,
- 0, 0,128, 62, 58, 46, 94, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0,128, 62,
- 13,228, 82, 63, 0, 0,128, 62, 58, 46, 94, 63, 34, 16, 81, 62,131, 64, 88, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0, 34, 16, 81, 62,131, 64, 88, 63,230, 1, 64, 62, 49, 26, 99, 63,160,153, 25, 62, 14, 56, 90, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,164, 98,230, 61, 58, 26, 99, 63,160,153, 25, 62,
- 14, 56, 90, 63,230, 1, 64, 62, 49, 26, 99, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
-230, 1, 64, 62, 49, 26, 99, 63,159,153, 25, 62,210,154,109, 63,164, 98,230, 61, 58, 26, 99, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,237,203, 76, 61, 22,114,105, 63,164, 98,230, 61, 58, 26, 99, 63,159,153, 25, 62,
-210,154,109, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,159,153, 25, 62,210,154,109, 63,
-230, 1, 64, 62, 49, 26, 99, 63, 0, 0,128, 62, 8,114,105, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,128, 62,232,187,116, 63, 3,153, 59, 63, 0, 0,128, 63, 95,102,134, 63,242,187,116, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,210,203, 76, 61,242,187,116, 63,159,153, 25, 62,210,154,109, 63,
- 0, 0,128, 62,232,187,116, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0,128, 62,
- 8,114,105, 63, 0, 0,128, 62,232,187,116, 63,159,153, 25, 62,210,154,109, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0,159,153, 25, 62,210,154,109, 63,210,203, 76, 61,242,187,116, 63,237,203, 76, 61, 22,114,105, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,164, 98,230, 61, 58, 26, 99, 63,237,203, 76, 61,
- 22,114,105, 63,234,203, 76, 61, 79, 46, 94, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
-234,203, 76, 61, 79, 46, 94, 63, 23, 70,196, 61,147, 64, 88, 63,164, 98,230, 61, 58, 26, 99, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,160,153, 25, 62, 14, 56, 90, 63,164, 98,230, 61, 58, 26, 99, 63, 23, 70,196, 61,
-147, 64, 88, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 23, 70,196, 61,147, 64, 88, 63,
-234,203, 76, 61, 79, 46, 94, 63,243,203, 76, 61, 41,228, 82, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 42,138,170, 62,254,204, 55, 63,136,214,159, 62,183,236, 65, 63,145, 0,156, 62,102,155, 54, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,145, 0,156, 62,102,155, 54, 63,204,245,165, 62,198,160, 44, 63,
- 42,138,170, 62,254,204, 55, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 42, 51,179, 62,
- 28, 28, 45, 63, 42,138,170, 62,254,204, 55, 63,204,245,165, 62,198,160, 44, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0,204,245,165, 62,198,160, 44, 63,145, 0,156, 62,102,155, 54, 63,141,239,152, 62,211, 52, 43, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 82,111,141, 62,146, 55, 52, 63,141,239,152, 62,
-211, 52, 43, 63,145, 0,156, 62,102,155, 54, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
-145, 0,156, 62,102,155, 54, 63,245, 98,143, 62, 68,233, 63, 63, 82,111,141, 62,146, 55, 52, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0,128, 62, 19, 86, 60, 63, 82,111,141, 62,146, 55, 52, 63,245, 98,143, 62,
- 68,233, 63, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,245, 98,143, 62, 68,233, 63, 63,
-145, 0,156, 62,102,155, 54, 63,136,214,159, 62,183,236, 65, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0,173, 27,146, 62,147, 39, 75, 63, 0, 0,128, 62, 13,228, 82, 63, 0, 0,128, 62,228,153, 71, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0,128, 62,228,153, 71, 63,245, 98,143, 62, 68,233, 63, 63,
-173, 27,146, 62,147, 39, 75, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,136,214,159, 62,
-183,236, 65, 63,173, 27,146, 62,147, 39, 75, 63,245, 98,143, 62, 68,233, 63, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0,245, 98,143, 62, 68,233, 63, 63, 0, 0,128, 62,228,153, 71, 63, 0, 0,128, 62, 19, 86, 60, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 82,111,141, 62,146, 55, 52, 63, 0, 0,128, 62,
- 19, 86, 60, 63, 0, 0,128, 62, 47, 12, 49, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 0,128, 62, 47, 12, 49, 63,121, 58,140, 62,199,228, 40, 63, 82,111,141, 62,146, 55, 52, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,141,239,152, 62,211, 52, 43, 63, 82,111,141, 62,146, 55, 52, 63,121, 58,140, 62,
-199,228, 40, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,121, 58,140, 62,199,228, 40, 63,
- 0, 0,128, 62, 47, 12, 49, 63, 0, 0,128, 62, 23,200, 37, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0,173, 27,146, 62,147, 39, 75, 63,136,214,159, 62,183,236, 65, 63, 47,116,167, 62,195, 83, 78, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 47,116,167, 62,195, 83, 78, 63,239,119,151, 62,131, 64, 88, 63,
-173, 27,146, 62,147, 39, 75, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0,128, 62,
- 13,228, 82, 63,173, 27,146, 62,147, 39, 75, 63,239,119,151, 62,131, 64, 88, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0,239,119,151, 62,131, 64, 88, 63, 47,116,167, 62,195, 83, 78, 63, 49, 51,179, 62, 14, 56, 90, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 44,242,190, 62,205, 83, 78, 63, 49, 51,179, 62,
- 14, 56, 90, 63, 47,116,167, 62,195, 83, 78, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
- 47,116,167, 62,195, 83, 78, 63, 42, 51,179, 62,108, 23, 67, 63, 44,242,190, 62,205, 83, 78, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,214,143,198, 62,200,236, 65, 63, 44,242,190, 62,205, 83, 78, 63, 42, 51,179, 62,
-108, 23, 67, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 42, 51,179, 62,108, 23, 67, 63,
- 47,116,167, 62,195, 83, 78, 63,136,214,159, 62,183,236, 65, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 42,138,170, 62,254,204, 55, 63, 42, 51,179, 62, 28, 28, 45, 63, 45,220,187, 62, 7,205, 55, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 45,220,187, 62, 7,205, 55, 63, 42, 51,179, 62,108, 23, 67, 63,
- 42,138,170, 62,254,204, 55, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,136,214,159, 62,
-183,236, 65, 63, 42,138,170, 62,254,204, 55, 63, 42, 51,179, 62,108, 23, 67, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0, 42, 51,179, 62,108, 23, 67, 63, 45,220,187, 62, 7,205, 55, 63,214,143,198, 62,200,236, 65, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 44,242,190, 62,205, 83, 78, 63,214,143,198, 62,
-200,236, 65, 63,188, 74,212, 62,171, 39, 75, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
-188, 74,212, 62,171, 39, 75, 63,122,238,206, 62,147, 64, 88, 63, 44,242,190, 62,205, 83, 78, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 49, 51,179, 62, 14, 56, 90, 63, 44,242,190, 62,205, 83, 78, 63,122,238,206, 62,
-147, 64, 88, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,122,238,206, 62,147, 64, 88, 63,
-188, 74,212, 62,171, 39, 75, 63,130,102,230, 62, 41,228, 82, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0,130,102,230, 62, 82, 12, 49, 63,129,102,230, 62, 53, 86, 60, 63, 28,247,216, 62,172, 55, 52, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 28,247,216, 62,172, 55, 52, 63,243, 43,218, 62,223,228, 40, 63,
-130,102,230, 62, 82, 12, 49, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,129,102,230, 62,
- 48,200, 37, 63,130,102,230, 62, 82, 12, 49, 63,243, 43,218, 62,223,228, 40, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0,243, 43,218, 62,223,228, 40, 63, 28,247,216, 62,172, 55, 52, 63,212,118,205, 62,228, 52, 43, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,206,101,202, 62,120,155, 54, 63,212,118,205, 62,
-228, 52, 43, 63, 28,247,216, 62,172, 55, 52, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
- 28,247,216, 62,172, 55, 52, 63,120, 3,215, 62, 95,233, 63, 63,206,101,202, 62,120,155, 54, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,214,143,198, 62,200,236, 65, 63,206,101,202, 62,120,155, 54, 63,120, 3,215, 62,
- 95,233, 63, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,120, 3,215, 62, 95,233, 63, 63,
- 28,247,216, 62,172, 55, 52, 63,129,102,230, 62, 53, 86, 60, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0,130,102,230, 62, 1,154, 71, 63,130,102,230, 62, 41,228, 82, 63,188, 74,212, 62,171, 39, 75, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,188, 74,212, 62,171, 39, 75, 63,120, 3,215, 62, 95,233, 63, 63,
-130,102,230, 62, 1,154, 71, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,129,102,230, 62,
- 53, 86, 60, 63,130,102,230, 62, 1,154, 71, 63,120, 3,215, 62, 95,233, 63, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0,120, 3,215, 62, 95,233, 63, 63,188, 74,212, 62,171, 39, 75, 63,214,143,198, 62,200,236, 65, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,206,101,202, 62,120,155, 54, 63,214,143,198, 62,
-200,236, 65, 63, 45,220,187, 62, 7,205, 55, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
- 45,220,187, 62, 7,205, 55, 63,142,112,192, 62,207,160, 44, 63,206,101,202, 62,120,155, 54, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,212,118,205, 62,228, 52, 43, 63,206,101,202, 62,120,155, 54, 63,142,112,192, 62,
-207,160, 44, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,142,112,192, 62,207,160, 44, 63,
- 45,220,187, 62, 7,205, 55, 63, 42, 51,179, 62, 28, 28, 45, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0,131,102,230, 62, 79, 46, 94, 63,131,102,230, 62, 22,114,105, 63, 87,103,198, 62, 58, 26, 99, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 87,103,198, 62, 58, 26, 99, 63,122,238,206, 62,147, 64, 88, 63,
-131,102,230, 62, 79, 46, 94, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,130,102,230, 62,
- 41,228, 82, 63,131,102,230, 62, 79, 46, 94, 63,122,238,206, 62,147, 64, 88, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0,122,238,206, 62,147, 64, 88, 63, 87,103,198, 62, 58, 26, 99, 63, 49, 51,179, 62, 14, 56, 90, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 14,255,159, 62, 49, 26, 99, 63, 49, 51,179, 62,
- 14, 56, 90, 63, 87,103,198, 62, 58, 26, 99, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
- 87,103,198, 62, 58, 26, 99, 63, 49, 51,179, 62,210,154,109, 63, 14,255,159, 62, 49, 26, 99, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0,128, 62, 8,114,105, 63, 14,255,159, 62, 49, 26, 99, 63, 49, 51,179, 62,
-210,154,109, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 49, 51,179, 62,210,154,109, 63,
- 87,103,198, 62, 58, 26, 99, 63,131,102,230, 62, 22,114,105, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0,134,102,230, 62,242,187,116, 63, 3,153, 59, 63, 0, 0,128, 63, 0, 0,128, 62,232,187,116, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0,128, 62,232,187,116, 63, 49, 51,179, 62,210,154,109, 63,
-134,102,230, 62,242,187,116, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,131,102,230, 62,
- 22,114,105, 63,134,102,230, 62,242,187,116, 63, 49, 51,179, 62,210,154,109, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0, 49, 51,179, 62,210,154,109, 63, 0, 0,128, 62,232,187,116, 63, 0, 0,128, 62, 8,114,105, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 14,255,159, 62, 49, 26, 99, 63, 0, 0,128, 62,
- 8,114,105, 63, 0, 0,128, 62, 58, 46, 94, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 0,128, 62, 58, 46, 94, 63,239,119,151, 62,131, 64, 88, 63, 14,255,159, 62, 49, 26, 99, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 49, 51,179, 62, 14, 56, 90, 63, 14,255,159, 62, 49, 26, 99, 63,239,119,151, 62,
-131, 64, 88, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,239,119,151, 62,131, 64, 88, 63,
- 0, 0,128, 62, 58, 46, 94, 63, 0, 0,128, 62, 13,228, 82, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 93,120, 8, 63, 11,205, 55, 63,140, 30, 3, 63,201,236, 65, 63,145, 51, 1, 63,121,155, 54, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,145, 51, 1, 63,121,155, 54, 63, 46, 46, 6, 63,211,160, 44, 63,
- 93,120, 8, 63, 11,205, 55, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,220,204, 12, 63,
- 35, 28, 45, 63, 93,120, 8, 63, 11,205, 55, 63, 46, 46, 6, 63,211,160, 44, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0, 46, 46, 6, 63,211,160, 44, 63,145, 51, 1, 63,121,155, 54, 63, 30, 86,255, 62,230, 52, 43, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,222,213,243, 62,172, 55, 52, 63, 30, 86,255, 62,
-230, 52, 43, 63,145, 51, 1, 63,121,155, 54, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
-145, 51, 1, 63,121,155, 54, 63,128,201,245, 62, 94,233, 63, 63,222,213,243, 62,172, 55, 52, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,129,102,230, 62, 53, 86, 60, 63,222,213,243, 62,172, 55, 52, 63,128,201,245, 62,
- 94,233, 63, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,128,201,245, 62, 94,233, 63, 63,
-145, 51, 1, 63,121,155, 54, 63,140, 30, 3, 63,201,236, 65, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 59,130,248, 62,169, 39, 75, 63,130,102,230, 62, 41,228, 82, 63,130,102,230, 62, 1,154, 71, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,130,102,230, 62, 1,154, 71, 63,128,201,245, 62, 94,233, 63, 63,
- 59,130,248, 62,169, 39, 75, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,140, 30, 3, 63,
-201,236, 65, 63, 59,130,248, 62,169, 39, 75, 63,128,201,245, 62, 94,233, 63, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0,128,201,245, 62, 94,233, 63, 63,130,102,230, 62, 1,154, 71, 63,129,102,230, 62, 53, 86, 60, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,222,213,243, 62,172, 55, 52, 63,129,102,230, 62,
- 53, 86, 60, 63,130,102,230, 62, 82, 12, 49, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
-130,102,230, 62, 82, 12, 49, 63, 9,161,242, 62,223,228, 40, 63,222,213,243, 62,172, 55, 52, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 30, 86,255, 62,230, 52, 43, 63,222,213,243, 62,172, 55, 52, 63, 9,161,242, 62,
-223,228, 40, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 9,161,242, 62,223,228, 40, 63,
-130,102,230, 62, 82, 12, 49, 63,129,102,230, 62, 48,200, 37, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 59,130,248, 62,169, 39, 75, 63,140, 30, 3, 63,201,236, 65, 63, 94,237, 6, 63,207, 83, 78, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 94,237, 6, 63,207, 83, 78, 63,118,222,253, 62,148, 64, 88, 63,
- 59,130,248, 62,169, 39, 75, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,130,102,230, 62,
- 41,228, 82, 63, 59,130,248, 62,169, 39, 75, 63,118,222,253, 62,148, 64, 88, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0,118,222,253, 62,148, 64, 88, 63, 94,237, 6, 63,207, 83, 78, 63,220,204, 12, 63, 22, 56, 90, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 88,172, 18, 63,207, 83, 78, 63,220,204, 12, 63,
- 22, 56, 90, 63, 94,237, 6, 63,207, 83, 78, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
- 94,237, 6, 63,207, 83, 78, 63,220,204, 12, 63,115, 23, 67, 63, 88,172, 18, 63,207, 83, 78, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 44,123, 22, 63,201,236, 65, 63, 88,172, 18, 63,207, 83, 78, 63,220,204, 12, 63,
-115, 23, 67, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,220,204, 12, 63,115, 23, 67, 63,
- 94,237, 6, 63,207, 83, 78, 63,140, 30, 3, 63,201,236, 65, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 93,120, 8, 63, 11,205, 55, 63,220,204, 12, 63, 35, 28, 45, 63, 91, 33, 17, 63, 9,205, 55, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 91, 33, 17, 63, 9,205, 55, 63,220,204, 12, 63,115, 23, 67, 63,
- 93,120, 8, 63, 11,205, 55, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,140, 30, 3, 63,
-201,236, 65, 63, 93,120, 8, 63, 11,205, 55, 63,220,204, 12, 63,115, 23, 67, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0,220,204, 12, 63,115, 23, 67, 63, 91, 33, 17, 63, 9,205, 55, 63, 44,123, 22, 63,201,236, 65, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 88,172, 18, 63,207, 83, 78, 63, 44,123, 22, 63,
-201,236, 65, 63,153, 88, 29, 63,167, 39, 75, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
-153, 88, 29, 63,167, 39, 75, 63,121,170, 26, 63,147, 64, 88, 63, 88,172, 18, 63,207, 83, 78, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,220,204, 12, 63, 22, 56, 90, 63, 88,172, 18, 63,207, 83, 78, 63,121,170, 26, 63,
-147, 64, 88, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,121,170, 26, 63,147, 64, 88, 63,
-153, 88, 29, 63,167, 39, 75, 63,118,102, 38, 63, 38,228, 82, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0,117,102, 38, 63, 78, 12, 49, 63,117,102, 38, 63, 50, 86, 60, 63,200,174, 31, 63,169, 55, 52, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,200,174, 31, 63,169, 55, 52, 63, 51, 73, 32, 63,221,228, 40, 63,
-117,102, 38, 63, 78, 12, 49, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,117,102, 38, 63,
- 45,200, 37, 63,117,102, 38, 63, 78, 12, 49, 63, 51, 73, 32, 63,221,228, 40, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0, 51, 73, 32, 63,221,228, 40, 63,200,174, 31, 63,169, 55, 52, 63,169,238, 25, 63,229, 52, 43, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 39,102, 24, 63,119,155, 54, 63,169,238, 25, 63,
-229, 52, 43, 63,200,174, 31, 63,169, 55, 52, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
-200,174, 31, 63,169, 55, 52, 63,246,180, 30, 63, 92,233, 63, 63, 39,102, 24, 63,119,155, 54, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 44,123, 22, 63,201,236, 65, 63, 39,102, 24, 63,119,155, 54, 63,246,180, 30, 63,
- 92,233, 63, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,246,180, 30, 63, 92,233, 63, 63,
-200,174, 31, 63,169, 55, 52, 63,117,102, 38, 63, 50, 86, 60, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0,117,102, 38, 63,255,153, 71, 63,118,102, 38, 63, 38,228, 82, 63,153, 88, 29, 63,167, 39, 75, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,153, 88, 29, 63,167, 39, 75, 63,246,180, 30, 63, 92,233, 63, 63,
-117,102, 38, 63,255,153, 71, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,117,102, 38, 63,
- 50, 86, 60, 63,117,102, 38, 63,255,153, 71, 63,246,180, 30, 63, 92,233, 63, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0,246,180, 30, 63, 92,233, 63, 63,153, 88, 29, 63,167, 39, 75, 63, 44,123, 22, 63,201,236, 65, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 39,102, 24, 63,119,155, 54, 63, 44,123, 22, 63,
-201,236, 65, 63, 91, 33, 17, 63, 9,205, 55, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
- 91, 33, 17, 63, 9,205, 55, 63,138,107, 19, 63,211,160, 44, 63, 39,102, 24, 63,119,155, 54, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,169,238, 25, 63,229, 52, 43, 63, 39,102, 24, 63,119,155, 54, 63,138,107, 19, 63,
-211,160, 44, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,138,107, 19, 63,211,160, 44, 63,
- 91, 33, 17, 63, 9,205, 55, 63,220,204, 12, 63, 35, 28, 45, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0,118,102, 38, 63, 77, 46, 94, 63,118,102, 38, 63, 19,114,105, 63,235,102, 22, 63, 59, 26, 99, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,235,102, 22, 63, 59, 26, 99, 63,121,170, 26, 63,147, 64, 88, 63,
-118,102, 38, 63, 77, 46, 94, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,118,102, 38, 63,
- 38,228, 82, 63,118,102, 38, 63, 77, 46, 94, 63,121,170, 26, 63,147, 64, 88, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0,121,170, 26, 63,147, 64, 88, 63,235,102, 22, 63, 59, 26, 99, 63,220,204, 12, 63, 22, 56, 90, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,204, 50, 3, 63, 58, 26, 99, 63,220,204, 12, 63,
- 22, 56, 90, 63,235,102, 22, 63, 59, 26, 99, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
-235,102, 22, 63, 59, 26, 99, 63,224,204, 12, 63,212,154,109, 63,204, 50, 3, 63, 58, 26, 99, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,131,102,230, 62, 22,114,105, 63,204, 50, 3, 63, 58, 26, 99, 63,224,204, 12, 63,
-212,154,109, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,224,204, 12, 63,212,154,109, 63,
-235,102, 22, 63, 59, 26, 99, 63,118,102, 38, 63, 19,114,105, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0,120,102, 38, 63,242,187,116, 63, 3,153, 59, 63, 0, 0,128, 63,134,102,230, 62,242,187,116, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,134,102,230, 62,242,187,116, 63,224,204, 12, 63,212,154,109, 63,
-120,102, 38, 63,242,187,116, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,118,102, 38, 63,
- 19,114,105, 63,120,102, 38, 63,242,187,116, 63,224,204, 12, 63,212,154,109, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0,224,204, 12, 63,212,154,109, 63,134,102,230, 62,242,187,116, 63,131,102,230, 62, 22,114,105, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,204, 50, 3, 63, 58, 26, 99, 63,131,102,230, 62,
- 22,114,105, 63,131,102,230, 62, 79, 46, 94, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
-131,102,230, 62, 79, 46, 94, 63,118,222,253, 62,148, 64, 88, 63,204, 50, 3, 63, 58, 26, 99, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,220,204, 12, 63, 22, 56, 90, 63,204, 50, 3, 63, 58, 26, 99, 63,118,222,253, 62,
-148, 64, 88, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,118,222,253, 62,148, 64, 88, 63,
-131,102,230, 62, 79, 46, 94, 63,130,102,230, 62, 41,228, 82, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0,213,233, 76, 63, 35, 48, 21, 63,176,235, 70, 63,226,209, 22, 63, 80,234, 73, 63,146,111, 11, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 80,234, 73, 63,146,111, 11, 63, 1,200, 79, 63, 94,152, 9, 63,
-213,233, 76, 63, 35, 48, 21, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 19,215, 82, 63,
-252, 29, 19, 63,213,233, 76, 63, 35, 48, 21, 63, 1,200, 79, 63, 94,152, 9, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0, 1,200, 79, 63, 94,152, 9, 63, 80,234, 73, 63,146,111, 11, 63,193,204, 76, 63, 0, 0, 0, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,213,233, 76, 63, 35, 48, 21, 63, 19,215, 82, 63,
-252, 29, 19, 63,220, 41, 80, 63,105, 60, 31, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
-220, 41, 80, 63,105, 60, 31, 63,164,219, 73, 63,173, 23, 33, 63,213,233, 76, 63, 35, 48, 21, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,176,235, 70, 63,226,209, 22, 63,213,233, 76, 63, 35, 48, 21, 63,164,219, 73, 63,
-173, 23, 33, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,164,219, 73, 63,173, 23, 33, 63,
-220, 41, 80, 63,105, 60, 31, 63,196, 33, 77, 63,221, 52, 43, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0,169,158, 70, 63,200,160, 44, 63, 0, 0, 64, 63, 24, 28, 45, 63, 5,171, 67, 63,216, 17, 34, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 5,171, 67, 63,216, 17, 34, 63,164,219, 73, 63,173, 23, 33, 63,
-169,158, 70, 63,200,160, 44, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,196, 33, 77, 63,
-221, 52, 43, 63,169,158, 70, 63,200,160, 44, 63,164,219, 73, 63,173, 23, 33, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0,164,219, 73, 63,173, 23, 33, 63, 5,171, 67, 63,216, 17, 34, 63,176,235, 70, 63,226,209, 22, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 75,124, 83, 63,217,228, 40, 63,196, 33, 77, 63,
-221, 52, 43, 63,220, 41, 80, 63,105, 60, 31, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
-220, 41, 80, 63,105, 60, 31, 63,218, 20, 86, 63,143,140, 28, 63, 75,124, 83, 63,217,228, 40, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,139,153, 89, 63, 45,200, 37, 63, 75,124, 83, 63,217,228, 40, 63,218, 20, 86, 63,
-143,140, 28, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,218, 20, 86, 63,143,140, 28, 63,
-220, 41, 80, 63,105, 60, 31, 63, 19,215, 82, 63,252, 29, 19, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 64, 63,182, 32, 23, 63,176,235, 70, 63,226,209, 22, 63, 5,171, 67, 63,216, 17, 34, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 5,171, 67, 63,216, 17, 34, 63,251, 84, 60, 63,216, 17, 34, 63,
- 0, 0, 64, 63,182, 32, 23, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 80, 20, 57, 63,
-226,209, 22, 63, 0, 0, 64, 63,182, 32, 23, 63,251, 84, 60, 63,216, 17, 34, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0,251, 84, 60, 63,216, 17, 34, 63, 5,171, 67, 63,216, 17, 34, 63, 0, 0, 64, 63, 24, 28, 45, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 64, 63,182, 32, 23, 63, 80, 20, 57, 63,
-226,209, 22, 63,169,156, 60, 63, 96,116, 11, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
-169,156, 60, 63, 96,116, 11, 63, 87, 99, 67, 63, 96,116, 11, 63, 0, 0, 64, 63,182, 32, 23, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,176,235, 70, 63,226,209, 22, 63, 0, 0, 64, 63,182, 32, 23, 63, 87, 99, 67, 63,
- 96,116, 11, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 87, 99, 67, 63, 96,116, 11, 63,
-169,156, 60, 63, 96,116, 11, 63, 0, 0, 64, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 96,102, 70, 63,244, 1, 0, 63,193,204, 76, 63, 0, 0, 0, 63, 80,234, 73, 63,146,111, 11, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 80,234, 73, 63,146,111, 11, 63, 87, 99, 67, 63, 96,116, 11, 63,
- 96,102, 70, 63,244, 1, 0, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 64, 63,
- 0, 0, 0, 63, 96,102, 70, 63,244, 1, 0, 63, 87, 99, 67, 63, 96,116, 11, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0, 87, 99, 67, 63, 96,116, 11, 63, 80,234, 73, 63,146,111, 11, 63,176,235, 70, 63,226,209, 22, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,160,153, 57, 63,244, 1, 0, 63, 0, 0, 64, 63,
- 0, 0, 0, 63,169,156, 60, 63, 96,116, 11, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
-169,156, 60, 63, 96,116, 11, 63,176, 21, 54, 63,146,111, 11, 63,160,153, 57, 63,244, 1, 0, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 63, 51, 51, 63, 0, 0, 0, 63,160,153, 57, 63,244, 1, 0, 63,176, 21, 54, 63,
-146,111, 11, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,176, 21, 54, 63,146,111, 11, 63,
-169,156, 60, 63, 96,116, 11, 63, 80, 20, 57, 63,226,209, 22, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 64, 63, 93, 58,217, 62,144, 61, 57, 63, 19,196,217, 62, 85,123, 60, 63,253,230,198, 62, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 85,123, 60, 63,253,230,198, 62,171,132, 67, 63,253,230,198, 62,
- 0, 0, 64, 63, 93, 58,217, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,112,194, 70, 63,
- 19,196,217, 62, 0, 0, 64, 63, 93, 58,217, 62,171,132, 67, 63,253,230,198, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0,171,132, 67, 63,253,230,198, 62, 85,123, 60, 63,253,230,198, 62, 0, 0, 64, 63,211,111,180, 62,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 64, 63, 93, 58,217, 62,112,194, 70, 63,
- 19,196,217, 62,125, 84, 67, 63, 42,211,236, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
-125, 84, 67, 63, 42,211,236, 62,131,171, 60, 63, 42,211,236, 62, 0, 0, 64, 63, 93, 58,217, 62, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,144, 61, 57, 63, 19,196,217, 62, 0, 0, 64, 63, 93, 58,217, 62,131,171, 60, 63,
- 42,211,236, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,131,171, 60, 63, 42,211,236, 62,
-125, 84, 67, 63, 42,211,236, 62, 0, 0, 64, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0,160,153, 57, 63,244, 1, 0, 63, 63, 51, 51, 63, 0, 0, 0, 63,128, 46, 54, 63, 75,207,236, 62, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,128, 46, 54, 63, 75,207,236, 62,131,171, 60, 63, 42,211,236, 62,
-160,153, 57, 63,244, 1, 0, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 64, 63,
- 0, 0, 0, 63,160,153, 57, 63,244, 1, 0, 63,131,171, 60, 63, 42,211,236, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0,131,171, 60, 63, 42,211,236, 62,128, 46, 54, 63, 75,207,236, 62,144, 61, 57, 63, 19,196,217, 62,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 96,102, 70, 63,244, 1, 0, 63, 0, 0, 64, 63,
- 0, 0, 0, 63,125, 84, 67, 63, 42,211,236, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
-125, 84, 67, 63, 42,211,236, 62,128,209, 73, 63, 75,207,236, 62, 96,102, 70, 63,244, 1, 0, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,193,204, 76, 63, 0, 0, 0, 63, 96,102, 70, 63,244, 1, 0, 63,128,209, 73, 63,
- 75,207,236, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,128,209, 73, 63, 75,207,236, 62,
-125, 84, 67, 63, 42,211,236, 62,112,194, 70, 63, 19,196,217, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 43, 22, 51, 63, 35, 48, 21, 63,237, 40, 45, 63,252, 29, 19, 63,255, 55, 48, 63, 94,152, 9, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,255, 55, 48, 63, 94,152, 9, 63,176, 21, 54, 63,146,111, 11, 63,
- 43, 22, 51, 63, 35, 48, 21, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 80, 20, 57, 63,
-226,209, 22, 63, 43, 22, 51, 63, 35, 48, 21, 63,176, 21, 54, 63,146,111, 11, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0,176, 21, 54, 63,146,111, 11, 63,255, 55, 48, 63, 94,152, 9, 63, 63, 51, 51, 63, 0, 0, 0, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 43, 22, 51, 63, 35, 48, 21, 63, 80, 20, 57, 63,
-226,209, 22, 63, 91, 36, 54, 63,173, 23, 33, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
- 91, 36, 54, 63,173, 23, 33, 63, 36,214, 47, 63,105, 60, 31, 63, 43, 22, 51, 63, 35, 48, 21, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,237, 40, 45, 63,252, 29, 19, 63, 43, 22, 51, 63, 35, 48, 21, 63, 36,214, 47, 63,
-105, 60, 31, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 36,214, 47, 63,105, 60, 31, 63,
- 91, 36, 54, 63,173, 23, 33, 63, 60,222, 50, 63,221, 52, 43, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0,181,131, 44, 63,216,228, 40, 63,117,102, 38, 63, 45,200, 37, 63, 38,235, 41, 63,141,140, 28, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 38,235, 41, 63,141,140, 28, 63, 36,214, 47, 63,105, 60, 31, 63,
-181,131, 44, 63,216,228, 40, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 60,222, 50, 63,
-221, 52, 43, 63,181,131, 44, 63,216,228, 40, 63, 36,214, 47, 63,105, 60, 31, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0, 36,214, 47, 63,105, 60, 31, 63, 38,235, 41, 63,141,140, 28, 63,237, 40, 45, 63,252, 29, 19, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 87, 97, 57, 63,200,160, 44, 63, 60,222, 50, 63,
-221, 52, 43, 63, 91, 36, 54, 63,173, 23, 33, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
- 91, 36, 54, 63,173, 23, 33, 63,251, 84, 60, 63,216, 17, 34, 63, 87, 97, 57, 63,200,160, 44, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 64, 63, 24, 28, 45, 63, 87, 97, 57, 63,200,160, 44, 63,251, 84, 60, 63,
-216, 17, 34, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,251, 84, 60, 63,216, 17, 34, 63,
- 91, 36, 54, 63,173, 23, 33, 63, 80, 20, 57, 63,226,209, 22, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0,134, 14,128, 63, 39, 48, 21, 63,227, 30,122, 63,233,209, 22, 63,138, 29,125, 63,150,111, 11, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,138, 29,125, 63,150,111, 11, 63,159,125,129, 63, 94,152, 9, 63,
-134, 14,128, 63, 39, 48, 21, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,174, 73,193, 60,
-253, 29, 19, 63,209, 92,232, 57, 39, 48, 21, 63,114,207, 62, 60, 94,152, 9, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0,159,125,129, 63, 94,152, 9, 63,138, 29,125, 63,150,111, 11, 63, 0, 0,128, 63, 0, 0, 0, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,209, 92,232, 57, 39, 48, 21, 63,174, 73,193, 60,
-253, 29, 19, 63,214, 67, 87, 60,110, 60, 31, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
-136,174,129, 63,110, 60, 31, 63,213, 14,125, 63,180, 23, 33, 63,134, 14,128, 63, 39, 48, 21, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,227, 30,122, 63,233,209, 22, 63,134, 14,128, 63, 39, 48, 21, 63,213, 14,125, 63,
-180, 23, 33, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,213, 14,125, 63,180, 23, 33, 63,
-136,174,129, 63,110, 60, 31, 63,121, 42,128, 63,230, 52, 43, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0,210,209,121, 63,212,160, 44, 63, 36, 51,115, 63, 36, 28, 45, 63, 49,222,118, 63,226, 17, 34, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 49,222,118, 63,226, 17, 34, 63,213, 14,125, 63,180, 23, 33, 63,
-210,209,121, 63,212,160, 44, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,121, 42,128, 63,
-230, 52, 43, 63,210,209,121, 63,212,160, 44, 63,213, 14,125, 63,180, 23, 33, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0,213, 14,125, 63,180, 23, 33, 63, 49,222,118, 63,226, 17, 34, 63,227, 30,122, 63,233,209, 22, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,111,239,213, 60,223,228, 40, 63,120,226,169, 58,
-230, 52, 43, 63,214, 67, 87, 60,110, 60, 31, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
-214, 67, 87, 60,110, 60, 31, 63, 13,129, 20, 61,143,140, 28, 63,111,239,213, 60,223,228, 40, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,246,203, 76, 61, 48,200, 37, 63,111,239,213, 60,223,228, 40, 63, 13,129, 20, 61,
-143,140, 28, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 13,129, 20, 61,143,140, 28, 63,
-214, 67, 87, 60,110, 60, 31, 63,174, 73,193, 60,253, 29, 19, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 44, 51,115, 63,188, 32, 23, 63,227, 30,122, 63,233,209, 22, 63, 49,222,118, 63,226, 17, 34, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 49,222,118, 63,226, 17, 34, 63, 31,136,111, 63,225, 17, 34, 63,
- 44, 51,115, 63,188, 32, 23, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,116, 71,108, 63,
-232,209, 22, 63, 44, 51,115, 63,188, 32, 23, 63, 31,136,111, 63,225, 17, 34, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0, 31,136,111, 63,225, 17, 34, 63, 49,222,118, 63,226, 17, 34, 63, 36, 51,115, 63, 36, 28, 45, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 44, 51,115, 63,188, 32, 23, 63,116, 71,108, 63,
-232,209, 22, 63,213,207,111, 63,100,116, 11, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
-213,207,111, 63,100,116, 11, 63,138,150,118, 63,101,116, 11, 63, 44, 51,115, 63,188, 32, 23, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,227, 30,122, 63,233,209, 22, 63, 44, 51,115, 63,188, 32, 23, 63,138,150,118, 63,
-101,116, 11, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,138,150,118, 63,101,116, 11, 63,
-213,207,111, 63,100,116, 11, 63, 51, 51,115, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0,154,153,121, 63,244, 1, 0, 63, 0, 0,128, 63, 0, 0, 0, 63,138, 29,125, 63,150,111, 11, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,138, 29,125, 63,150,111, 11, 63,138,150,118, 63,101,116, 11, 63,
-154,153,121, 63,244, 1, 0, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 51, 51,115, 63,
- 0, 0, 0, 63,154,153,121, 63,244, 1, 0, 63,138,150,118, 63,101,116, 11, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0,138,150,118, 63,101,116, 11, 63,138, 29,125, 63,150,111, 11, 63,227, 30,122, 63,233,209, 22, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,205,204,108, 63,244, 1, 0, 63, 51, 51,115, 63,
- 0, 0, 0, 63,213,207,111, 63,100,116, 11, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
-213,207,111, 63,100,116, 11, 63,213, 72,105, 63,149,111, 11, 63,205,204,108, 63,244, 1, 0, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,101,102,102, 63, 0, 0, 0, 63,205,204,108, 63,244, 1, 0, 63,213, 72,105, 63,
-149,111, 11, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,213, 72,105, 63,149,111, 11, 63,
-213,207,111, 63,100,116, 11, 63,116, 71,108, 63,232,209, 22, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 58, 51,115, 63, 73, 58,217, 62,192,112,108, 63, 4,196,217, 62,139,174,111, 63,223,230,198, 62, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,139,174,111, 63,223,230,198, 62,239,183,118, 63,227,230,198, 62,
- 58, 51,115, 63, 73, 58,217, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,179,245,121, 63,
- 6,196,217, 62, 58, 51,115, 63, 73, 58,217, 62,239,183,118, 63,227,230,198, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0,239,183,118, 63,227,230,198, 62,139,174,111, 63,223,230,198, 62, 65, 51,115, 63,160,111,180, 62,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 58, 51,115, 63, 73, 58,217, 62,179,245,121, 63,
- 6,196,217, 62,185,135,118, 63, 30,211,236, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
-185,135,118, 63, 30,211,236, 62,180,222,111, 63, 30,211,236, 62, 58, 51,115, 63, 73, 58,217, 62, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,192,112,108, 63, 4,196,217, 62, 58, 51,115, 63, 73, 58,217, 62,180,222,111, 63,
- 30,211,236, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,180,222,111, 63, 30,211,236, 62,
-185,135,118, 63, 30,211,236, 62, 51, 51,115, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0,205,204,108, 63,244, 1, 0, 63,101,102,102, 63, 0, 0, 0, 63,170, 97,105, 63, 65,207,236, 62, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,170, 97,105, 63, 65,207,236, 62,180,222,111, 63, 30,211,236, 62,
-205,204,108, 63,244, 1, 0, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 51, 51,115, 63,
- 0, 0, 0, 63,205,204,108, 63,244, 1, 0, 63,180,222,111, 63, 30,211,236, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0,180,222,111, 63, 30,211,236, 62,170, 97,105, 63, 65,207,236, 62,192,112,108, 63, 4,196,217, 62,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,154,153,121, 63,244, 1, 0, 63, 51, 51,115, 63,
- 0, 0, 0, 63,185,135,118, 63, 30,211,236, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
-185,135,118, 63, 30,211,236, 62,194, 4,125, 63, 67,207,236, 62,154,153,121, 63,244, 1, 0, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 63,154,153,121, 63,244, 1, 0, 63,194, 4,125, 63,
- 67,207,236, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,194, 4,125, 63, 67,207,236, 62,
-185,135,118, 63, 30,211,236, 62,179,245,121, 63, 6,196,217, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 76, 73,102, 63, 38, 48, 21, 63, 11, 92, 96, 63,253, 29, 19, 63, 33,107, 99, 63, 94,152, 9, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 33,107, 99, 63, 94,152, 9, 63,213, 72,105, 63,149,111, 11, 63,
- 76, 73,102, 63, 38, 48, 21, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,116, 71,108, 63,
-232,209, 22, 63, 76, 73,102, 63, 38, 48, 21, 63,213, 72,105, 63,149,111, 11, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0,213, 72,105, 63,149,111, 11, 63, 33,107, 99, 63, 94,152, 9, 63,101,102,102, 63, 0, 0, 0, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 76, 73,102, 63, 38, 48, 21, 63,116, 71,108, 63,
-232,209, 22, 63,124, 87,105, 63,180, 23, 33, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
-124, 87,105, 63,180, 23, 33, 63, 65, 9, 99, 63,109, 60, 31, 63, 76, 73,102, 63, 38, 48, 21, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 11, 92, 96, 63,253, 29, 19, 63, 76, 73,102, 63, 38, 48, 21, 63, 65, 9, 99, 63,
-109, 60, 31, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 65, 9, 99, 63,109, 60, 31, 63,
-124, 87,105, 63,180, 23, 33, 63, 87, 17,102, 63,229, 52, 43, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0,205,182, 95, 63,222,228, 40, 63,139,153, 89, 63, 45,200, 37, 63, 63, 30, 93, 63,143,140, 28, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 63, 30, 93, 63,143,140, 28, 63, 65, 9, 99, 63,109, 60, 31, 63,
-205,182, 95, 63,222,228, 40, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 87, 17,102, 63,
-229, 52, 43, 63,205,182, 95, 63,222,228, 40, 63, 65, 9, 99, 63,109, 60, 31, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0, 65, 9, 99, 63,109, 60, 31, 63, 63, 30, 93, 63,143,140, 28, 63, 11, 92, 96, 63,253, 29, 19, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,118,148,108, 63,211,160, 44, 63, 87, 17,102, 63,
-229, 52, 43, 63,124, 87,105, 63,180, 23, 33, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
-124, 87,105, 63,180, 23, 33, 63, 31,136,111, 63,225, 17, 34, 63,118,148,108, 63,211,160, 44, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 36, 51,115, 63, 36, 28, 45, 63,118,148,108, 63,211,160, 44, 63, 31,136,111, 63,
-225, 17, 34, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 31,136,111, 63,225, 17, 34, 63,
-124, 87,105, 63,180, 23, 33, 63,116, 71,108, 63,232,209, 22, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 65, 65, 77, 62, 32, 48, 21, 63,152, 72, 53, 62,229,209, 22, 63, 47, 67, 65, 62,147,111, 11, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 47, 67, 65, 62,147,111, 11, 63,255,185, 88, 62, 90,152, 9, 63,
- 65, 65, 77, 62, 32, 48, 21, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 64,246,100, 62,
-246, 29, 19, 63, 65, 65, 77, 62, 32, 48, 21, 63,255,185, 88, 62, 90,152, 9, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0,255,185, 88, 62, 90,152, 9, 63, 47, 67, 65, 62,147,111, 11, 63,254,204, 76, 62, 0, 0, 0, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 65, 65, 77, 62, 32, 48, 21, 63, 64,246,100, 62,
-246, 29, 19, 63, 89, 65, 90, 62, 94, 60, 31, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
- 89, 65, 90, 62, 94, 60, 31, 63,107, 8, 65, 62,170, 23, 33, 63, 65, 65, 77, 62, 32, 48, 21, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,152, 72, 53, 62,229,209, 22, 63, 65, 65, 77, 62, 32, 48, 21, 63,107, 8, 65, 62,
-170, 23, 33, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,107, 8, 65, 62,170, 23, 33, 63,
- 89, 65, 90, 62, 94, 60, 31, 63,230, 32, 78, 62,211, 52, 43, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0,105, 20, 52, 62,198,160, 44, 63,173,153, 25, 62, 27, 28, 45, 63,216, 69, 40, 62,220, 17, 34, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,216, 69, 40, 62,220, 17, 34, 63,107, 8, 65, 62,170, 23, 33, 63,
-105, 20, 52, 62,198,160, 44, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,230, 32, 78, 62,
-211, 52, 43, 63,105, 20, 52, 62,198,160, 44, 63,107, 8, 65, 62,170, 23, 33, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0,107, 8, 65, 62,170, 23, 33, 63,216, 69, 40, 62,220, 17, 34, 63,152, 72, 53, 62,229,209, 22, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 14,139,103, 62,199,228, 40, 63,230, 32, 78, 62,
-211, 52, 43, 63, 89, 65, 90, 62, 94, 60, 31, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
- 89, 65, 90, 62, 94, 60, 31, 63, 83,237,113, 62,130,140, 28, 63, 14,139,103, 62,199,228, 40, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0,128, 62, 23,200, 37, 63, 14,139,103, 62,199,228, 40, 63, 83,237,113, 62,
-130,140, 28, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 83,237,113, 62,130,140, 28, 63,
- 89, 65, 90, 62, 94, 60, 31, 63, 64,246,100, 62,246, 29, 19, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0,180,153, 25, 62,185, 32, 23, 63,152, 72, 53, 62,229,209, 22, 63,216, 69, 40, 62,220, 17, 34, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,216, 69, 40, 62,220, 17, 34, 63,133,237, 10, 62,219, 17, 34, 63,
-180,153, 25, 62,185, 32, 23, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,147,213,251, 61,
-228,209, 22, 63,180,153, 25, 62,185, 32, 23, 63,133,237, 10, 62,219, 17, 34, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0,133,237, 10, 62,219, 17, 34, 63,216, 69, 40, 62,220, 17, 34, 63,173,153, 25, 62, 27, 28, 45, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,180,153, 25, 62,185, 32, 23, 63,147,213,251, 61,
-228,209, 22, 63, 67, 12, 12, 62, 98,116, 11, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
- 67, 12, 12, 62, 98,116, 11, 63, 34, 39, 39, 62, 98,116, 11, 63,180,153, 25, 62,185, 32, 23, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,152, 72, 53, 62,229,209, 22, 63,180,153, 25, 62,185, 32, 23, 63, 34, 39, 39, 62,
- 98,116, 11, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 34, 39, 39, 62, 98,116, 11, 63,
- 67, 12, 12, 62, 98,116, 11, 63,181,153, 25, 62, 0, 0, 0, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 92, 51, 51, 62,244, 1, 0, 63,254,204, 76, 62, 0, 0, 0, 63, 47, 67, 65, 62,147,111, 11, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 47, 67, 65, 62,147,111, 11, 63, 34, 39, 39, 62, 98,116, 11, 63,
- 92, 51, 51, 62,244, 1, 0, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,181,153, 25, 62,
- 0, 0, 0, 63, 92, 51, 51, 62,244, 1, 0, 63, 34, 39, 39, 62, 98,116, 11, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0, 34, 39, 39, 62, 98,116, 11, 63, 47, 67, 65, 62,147,111, 11, 63,152, 72, 53, 62,229,209, 22, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 8, 0, 0, 62,244, 1, 0, 63,181,153, 25, 62,
- 0, 0, 0, 63, 67, 12, 12, 62, 98,116, 11, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
- 67, 12, 12, 62, 98,116, 11, 63,109,224,227, 61,147,111, 11, 63, 8, 0, 0, 62,244, 1, 0, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,215,204,204, 61, 0, 0, 0, 63, 8, 0, 0, 62,244, 1, 0, 63,109,224,227, 61,
-147,111, 11, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,109,224,227, 61,147,111, 11, 63,
- 67, 12, 12, 62, 98,116, 11, 63,147,213,251, 61,228,209, 22, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0,196,153, 25, 62, 73, 58,217, 62,171, 31,253, 61, 6,196,217, 62, 1,135, 11, 62,228,230,198, 62, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1,135, 11, 62,228,230,198, 62,153,172, 39, 62,230,230,198, 62,
-196,153, 25, 62, 73, 58,217, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,179,163, 52, 62,
- 7,196,217, 62,196,153, 25, 62, 73, 58,217, 62,153,172, 39, 62,230,230,198, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0,153,172, 39, 62,230,230,198, 62, 1,135, 11, 62,228,230,198, 62,214,153, 25, 62,165,111,180, 62,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,196,153, 25, 62, 73, 58,217, 62,179,163, 52, 62,
- 7,196,217, 62,202,235, 38, 62, 33,211,236, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
-202,235, 38, 62, 33,211,236, 62,173, 71, 12, 62, 31,211,236, 62,196,153, 25, 62, 73, 58,217, 62, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,171, 31,253, 61, 6,196,217, 62,196,153, 25, 62, 73, 58,217, 62,173, 71, 12, 62,
- 31,211,236, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,173, 71, 12, 62, 31,211,236, 62,
-202,235, 38, 62, 33,211,236, 62,181,153, 25, 62, 0, 0, 0, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 8, 0, 0, 62,244, 1, 0, 63,215,204,204, 61, 0, 0, 0, 63,251,166,228, 61, 67,207,236, 62, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,251,166,228, 61, 67,207,236, 62,173, 71, 12, 62, 31,211,236, 62,
- 8, 0, 0, 62,244, 1, 0, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,181,153, 25, 62,
- 0, 0, 0, 63, 8, 0, 0, 62,244, 1, 0, 63,173, 71, 12, 62, 31,211,236, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0,173, 71, 12, 62, 31,211,236, 62,251,166,228, 61, 67,207,236, 62,171, 31,253, 61, 6,196,217, 62,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 92, 51, 51, 62,244, 1, 0, 63,181,153, 25, 62,
- 0, 0, 0, 63,202,235, 38, 62, 33,211,236, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
-202,235, 38, 62, 33,211,236, 62,251,223, 64, 62, 67,207,236, 62, 92, 51, 51, 62,244, 1, 0, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,254,204, 76, 62, 0, 0, 0, 63, 92, 51, 51, 62,244, 1, 0, 63,251,223, 64, 62,
- 67,207,236, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,251,223, 64, 62, 67,207,236, 62,
-202,235, 38, 62, 33,211,236, 62,179,163, 52, 62, 7,196,217, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 42,228,203, 61, 37, 48, 21, 63, 1,122,156, 61,254, 29, 19, 63,172,242,180, 61, 96,152, 9, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,172,242,180, 61, 96,152, 9, 63,109,224,227, 61,147,111, 11, 63,
- 42,228,203, 61, 37, 48, 21, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,147,213,251, 61,
-228,209, 22, 63, 42,228,203, 61, 37, 48, 21, 63,109,224,227, 61,147,111, 11, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0,109,224,227, 61,147,111, 11, 63,172,242,180, 61, 96,152, 9, 63,215,204,204, 61, 0, 0, 0, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 42,228,203, 61, 37, 48, 21, 63,147,213,251, 61,
-228,209, 22, 63,208, 85,228, 61,179, 23, 33, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
-208, 85,228, 61,179, 23, 33, 63,212,227,177, 61,110, 60, 31, 63, 42,228,203, 61, 37, 48, 21, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1,122,156, 61,254, 29, 19, 63, 42,228,203, 61, 37, 48, 21, 63,212,227,177, 61,
-110, 60, 31, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,212,227,177, 61,110, 60, 31, 63,
-208, 85,228, 61,179, 23, 33, 63,175, 36,202, 61,228, 52, 43, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 53, 80,151, 61,223,228, 40, 63,246,203, 76, 61, 48,200, 37, 63,166,139,130, 61,145,140, 28, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,166,139,130, 61,145,140, 28, 63,212,227,177, 61,110, 60, 31, 63,
- 53, 80,151, 61,223,228, 40, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,175, 36,202, 61,
-228, 52, 43, 63, 53, 80,151, 61,223,228, 40, 63,212,227,177, 61,110, 60, 31, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0,212,227,177, 61,110, 60, 31, 63,166,139,130, 61,145,140, 28, 63, 1,122,156, 61,254, 29, 19, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,201, 61,254, 61,207,160, 44, 63,175, 36,202, 61,
-228, 52, 43, 63,208, 85,228, 61,179, 23, 33, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
-208, 85,228, 61,179, 23, 33, 63,133,237, 10, 62,219, 17, 34, 63,201, 61,254, 61,207,160, 44, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,173,153, 25, 62, 27, 28, 45, 63,201, 61,254, 61,207,160, 44, 63,133,237, 10, 62,
-219, 17, 34, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,133,237, 10, 62,219, 17, 34, 63,
-208, 85,228, 61,179, 23, 33, 63,147,213,251, 61,228,209, 22, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0,245, 6,205, 62, 37, 48, 21, 63,155, 10,193, 62,229,209, 22, 63,229, 7,199, 62,147,111, 11, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,229, 7,199, 62,147,111, 11, 63, 85,195,210, 62, 96,152, 9, 63,
-245, 6,205, 62, 37, 48, 21, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,128,225,216, 62,
-254, 29, 19, 63,245, 6,205, 62, 37, 48, 21, 63, 85,195,210, 62, 96,152, 9, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0, 85,195,210, 62, 96,152, 9, 63,229, 7,199, 62,147,111, 11, 63,202,204,204, 62, 0, 0, 0, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,245, 6,205, 62, 37, 48, 21, 63,128,225,216, 62,
-254, 29, 19, 63, 11,135,211, 62,110, 60, 31, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
- 11,135,211, 62,110, 60, 31, 63,140,234,198, 62,179, 23, 33, 63,245, 6,205, 62, 37, 48, 21, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,155, 10,193, 62,229,209, 22, 63,245, 6,205, 62, 37, 48, 21, 63,140,234,198, 62,
-179, 23, 33, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,140,234,198, 62,179, 23, 33, 63,
- 11,135,211, 62,110, 60, 31, 63,212,118,205, 62,228, 52, 43, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0,142,112,192, 62,207,160, 44, 63, 42, 51,179, 62, 28, 28, 45, 63, 61,137,186, 62,219, 17, 34, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 61,137,186, 62,219, 17, 34, 63,140,234,198, 62,179, 23, 33, 63,
-142,112,192, 62,207,160, 44, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,212,118,205, 62,
-228, 52, 43, 63,142,112,192, 62,207,160, 44, 63,140,234,198, 62,179, 23, 33, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0,140,234,198, 62,179, 23, 33, 63, 61,137,186, 62,219, 17, 34, 63,155, 10,193, 62,229,209, 22, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,243, 43,218, 62,223,228, 40, 63,212,118,205, 62,
-228, 52, 43, 63, 11,135,211, 62,110, 60, 31, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
- 11,135,211, 62,110, 60, 31, 63, 22, 93,223, 62,145,140, 28, 63,243, 43,218, 62,223,228, 40, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,129,102,230, 62, 48,200, 37, 63,243, 43,218, 62,223,228, 40, 63, 22, 93,223, 62,
-145,140, 28, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 22, 93,223, 62,145,140, 28, 63,
- 11,135,211, 62,110, 60, 31, 63,128,225,216, 62,254, 29, 19, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 38, 51,179, 62,185, 32, 23, 63,155, 10,193, 62,229,209, 22, 63, 61,137,186, 62,219, 17, 34, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 61,137,186, 62,219, 17, 34, 63, 20,221,171, 62,219, 17, 34, 63,
- 38, 51,179, 62,185, 32, 23, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,180, 91,165, 62,
-229,209, 22, 63, 38, 51,179, 62,185, 32, 23, 63, 20,221,171, 62,219, 17, 34, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0, 20,221,171, 62,219, 17, 34, 63, 61,137,186, 62,219, 17, 34, 63, 42, 51,179, 62, 28, 28, 45, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 38, 51,179, 62,185, 32, 23, 63,180, 91,165, 62,
-229,209, 22, 63,111,108,172, 62, 98,116, 11, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
-111,108,172, 62, 98,116, 11, 63,222,249,185, 62, 98,116, 11, 63, 38, 51,179, 62,185, 32, 23, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,155, 10,193, 62,229,209, 22, 63, 38, 51,179, 62,185, 32, 23, 63,222,249,185, 62,
- 98,116, 11, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,222,249,185, 62, 98,116, 11, 63,
-111,108,172, 62, 98,116, 11, 63, 38, 51,179, 62, 0, 0, 0, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0,252,255,191, 62,244, 1, 0, 63,202,204,204, 62, 0, 0, 0, 63,229, 7,199, 62,147,111, 11, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,229, 7,199, 62,147,111, 11, 63,222,249,185, 62, 98,116, 11, 63,
-252,255,191, 62,244, 1, 0, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 38, 51,179, 62,
- 0, 0, 0, 63,252,255,191, 62,244, 1, 0, 63,222,249,185, 62, 98,116, 11, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0,222,249,185, 62, 98,116, 11, 63,229, 7,199, 62,147,111, 11, 63,155, 10,193, 62,229,209, 22, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 82,102,166, 62,244, 1, 0, 63, 38, 51,179, 62,
- 0, 0, 0, 63,111,108,172, 62, 98,116, 11, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
-111,108,172, 62, 98,116, 11, 63,104, 94,159, 62,147,111, 11, 63, 82,102,166, 62,244, 1, 0, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,129,153,153, 62, 0, 0, 0, 63, 82,102,166, 62,244, 1, 0, 63,104, 94,159, 62,
-147,111, 11, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,104, 94,159, 62,147,111, 11, 63,
-111,108,172, 62, 98,116, 11, 63,180, 91,165, 62,229,209, 22, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 30, 51,179, 62, 73, 58,217, 62, 39,174,165, 62, 7,196,217, 62,180, 41,172, 62,227,230,198, 62, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,180, 41,172, 62,227,230,198, 62,127, 60,186, 62,225,230,198, 62,
- 30, 51,179, 62, 73, 58,217, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 21,184,192, 62,
- 6,196,217, 62, 30, 51,179, 62, 73, 58,217, 62,127, 60,186, 62,225,230,198, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0,127, 60,186, 62,225,230,198, 62,180, 41,172, 62,227,230,198, 62, 21, 51,179, 62,165,111,180, 62,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 30, 51,179, 62, 73, 58,217, 62, 21,184,192, 62,
- 6,196,217, 62, 42,220,185, 62, 31,211,236, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
- 42,220,185, 62, 31,211,236, 62, 27,138,172, 62, 33,211,236, 62, 30, 51,179, 62, 73, 58,217, 62, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 39,174,165, 62, 7,196,217, 62, 30, 51,179, 62, 73, 58,217, 62, 27,138,172, 62,
- 33,211,236, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 27,138,172, 62, 33,211,236, 62,
- 42,220,185, 62, 31,211,236, 62, 38, 51,179, 62, 0, 0, 0, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 82,102,166, 62,244, 1, 0, 63,129,153,153, 62, 0, 0, 0, 63, 3,144,159, 62, 67,207,236, 62, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 3,144,159, 62, 67,207,236, 62, 27,138,172, 62, 33,211,236, 62,
- 82,102,166, 62,244, 1, 0, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 38, 51,179, 62,
- 0, 0, 0, 63, 82,102,166, 62,244, 1, 0, 63, 27,138,172, 62, 33,211,236, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0, 27,138,172, 62, 33,211,236, 62, 3,144,159, 62, 67,207,236, 62, 39,174,165, 62, 7,196,217, 62,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,252,255,191, 62,244, 1, 0, 63, 38, 51,179, 62,
- 0, 0, 0, 63, 42,220,185, 62, 31,211,236, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
- 42,220,185, 62, 31,211,236, 62, 65,214,198, 62, 67,207,236, 62,252,255,191, 62,244, 1, 0, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,202,204,204, 62, 0, 0, 0, 63,252,255,191, 62,244, 1, 0, 63, 65,214,198, 62,
- 67,207,236, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 65,214,198, 62, 67,207,236, 62,
- 42,220,185, 62, 31,211,236, 62, 21,184,192, 62, 6,196,217, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 95, 95,153, 62, 32, 48, 21, 63,224,132,141, 62,246, 29, 19, 63, 1,163,147, 62, 91,152, 9, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1,163,147, 62, 91,152, 9, 63,104, 94,159, 62,147,111, 11, 63,
- 95, 95,153, 62, 32, 48, 21, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,180, 91,165, 62,
-229,209, 22, 63, 95, 95,153, 62, 32, 48, 21, 63,104, 94,159, 62,147,111, 11, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0,104, 94,159, 62,147,111, 11, 63, 1,163,147, 62, 91,152, 9, 63,129,153,153, 62, 0, 0, 0, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 95, 95,153, 62, 32, 48, 21, 63,180, 91,165, 62,
-229,209, 22, 63,203,123,159, 62,170, 23, 33, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
-203,123,159, 62,170, 23, 33, 63, 84,223,146, 62, 94, 60, 31, 63, 95, 95,153, 62, 32, 48, 21, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,224,132,141, 62,246, 29, 19, 63, 95, 95,153, 62, 32, 48, 21, 63, 84,223,146, 62,
- 94, 60, 31, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 84,223,146, 62, 94, 60, 31, 63,
-203,123,159, 62,170, 23, 33, 63,141,239,152, 62,211, 52, 43, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0,121, 58,140, 62,199,228, 40, 63, 0, 0,128, 62, 23,200, 37, 63, 86, 9,135, 62,130,140, 28, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 86, 9,135, 62,130,140, 28, 63, 84,223,146, 62, 94, 60, 31, 63,
-121, 58,140, 62,199,228, 40, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,141,239,152, 62,
-211, 52, 43, 63,121, 58,140, 62,199,228, 40, 63, 84,223,146, 62, 94, 60, 31, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0, 84,223,146, 62, 94, 60, 31, 63, 86, 9,135, 62,130,140, 28, 63,224,132,141, 62,246, 29, 19, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,204,245,165, 62,198,160, 44, 63,141,239,152, 62,
-211, 52, 43, 63,203,123,159, 62,170, 23, 33, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
-203,123,159, 62,170, 23, 33, 63, 20,221,171, 62,219, 17, 34, 63,204,245,165, 62,198,160, 44, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 42, 51,179, 62, 28, 28, 45, 63,204,245,165, 62,198,160, 44, 63, 20,221,171, 62,
-219, 17, 34, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 20,221,171, 62,219, 17, 34, 63,
-203,123,159, 62,170, 23, 33, 63,180, 91,165, 62,229,209, 22, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0,180,182, 25, 63, 38, 48, 21, 63,140,184, 19, 63,232,209, 22, 63, 43,183, 22, 63,149,111, 11, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 43,183, 22, 63,149,111, 11, 63,223,148, 28, 63, 94,152, 9, 63,
-180,182, 25, 63, 38, 48, 21, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,245,163, 31, 63,
-253, 29, 19, 63,180,182, 25, 63, 38, 48, 21, 63,223,148, 28, 63, 94,152, 9, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0,223,148, 28, 63, 94,152, 9, 63, 43,183, 22, 63,149,111, 11, 63,155,153, 25, 63, 0, 0, 0, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,180,182, 25, 63, 38, 48, 21, 63,245,163, 31, 63,
-253, 29, 19, 63,191,246, 28, 63,109, 60, 31, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
-191,246, 28, 63,109, 60, 31, 63,132,168, 22, 63,180, 23, 33, 63,180,182, 25, 63, 38, 48, 21, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,140,184, 19, 63,232,209, 22, 63,180,182, 25, 63, 38, 48, 21, 63,132,168, 22, 63,
-180, 23, 33, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,132,168, 22, 63,180, 23, 33, 63,
-191,246, 28, 63,109, 60, 31, 63,169,238, 25, 63,229, 52, 43, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0,138,107, 19, 63,211,160, 44, 63,220,204, 12, 63, 35, 28, 45, 63,225,119, 16, 63,225, 17, 34, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,225,119, 16, 63,225, 17, 34, 63,132,168, 22, 63,180, 23, 33, 63,
-138,107, 19, 63,211,160, 44, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,169,238, 25, 63,
-229, 52, 43, 63,138,107, 19, 63,211,160, 44, 63,132,168, 22, 63,180, 23, 33, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0,132,168, 22, 63,180, 23, 33, 63,225,119, 16, 63,225, 17, 34, 63,140,184, 19, 63,232,209, 22, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 51, 73, 32, 63,221,228, 40, 63,169,238, 25, 63,
-229, 52, 43, 63,191,246, 28, 63,109, 60, 31, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
-191,246, 28, 63,109, 60, 31, 63,192,225, 34, 63,142,140, 28, 63, 51, 73, 32, 63,221,228, 40, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,117,102, 38, 63, 45,200, 37, 63, 51, 73, 32, 63,221,228, 40, 63,192,225, 34, 63,
-142,140, 28, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,192,225, 34, 63,142,140, 28, 63,
-191,246, 28, 63,109, 60, 31, 63,245,163, 31, 63,253, 29, 19, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0,212,204, 12, 63,188, 32, 23, 63,140,184, 19, 63,232,209, 22, 63,225,119, 16, 63,225, 17, 34, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,225,119, 16, 63,225, 17, 34, 63,207, 33, 9, 63,226, 17, 34, 63,
-212,204, 12, 63,188, 32, 23, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 29,225, 5, 63,
-233,209, 22, 63,212,204, 12, 63,188, 32, 23, 63,207, 33, 9, 63,226, 17, 34, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0,207, 33, 9, 63,226, 17, 34, 63,225,119, 16, 63,225, 17, 34, 63,220,204, 12, 63, 35, 28, 45, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,212,204, 12, 63,188, 32, 23, 63, 29,225, 5, 63,
-233,209, 22, 63,118,105, 9, 63,101,116, 11, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
-118,105, 9, 63,101,116, 11, 63, 43, 48, 16, 63,100,116, 11, 63,212,204, 12, 63,188, 32, 23, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,140,184, 19, 63,232,209, 22, 63,212,204, 12, 63,188, 32, 23, 63, 43, 48, 16, 63,
-100,116, 11, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 43, 48, 16, 63,100,116, 11, 63,
-118,105, 9, 63,101,116, 11, 63,205,204, 12, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 51, 51, 19, 63,244, 1, 0, 63,155,153, 25, 63, 0, 0, 0, 63, 43,183, 22, 63,149,111, 11, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 43,183, 22, 63,149,111, 11, 63, 43, 48, 16, 63,100,116, 11, 63,
- 51, 51, 19, 63,244, 1, 0, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,205,204, 12, 63,
- 0, 0, 0, 63, 51, 51, 19, 63,244, 1, 0, 63, 43, 48, 16, 63,100,116, 11, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0, 43, 48, 16, 63,100,116, 11, 63, 43,183, 22, 63,149,111, 11, 63,140,184, 19, 63,232,209, 22, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,102,102, 6, 63,244, 1, 0, 63,205,204, 12, 63,
- 0, 0, 0, 63,118,105, 9, 63,101,116, 11, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
-118,105, 9, 63,101,116, 11, 63,118,226, 2, 63,149,111, 11, 63,102,102, 6, 63,244, 1, 0, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,102,102, 6, 63,244, 1, 0, 63,118,226, 2, 63,
-149,111, 11, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,118,226, 2, 63,149,111, 11, 63,
-118,105, 9, 63,101,116, 11, 63, 29,225, 5, 63,233,209, 22, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0,198,204, 12, 63, 72, 58,217, 62, 77, 10, 6, 63, 6,196,217, 62, 17, 72, 9, 63,227,230,198, 62, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 17, 72, 9, 63,227,230,198, 62,117, 81, 16, 63,223,230,198, 62,
-198,204, 12, 63, 72, 58,217, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 64,143, 19, 63,
- 4,196,217, 62,198,204, 12, 63, 72, 58,217, 62,117, 81, 16, 63,223,230,198, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0,117, 81, 16, 63,223,230,198, 62, 17, 72, 9, 63,227,230,198, 62,191,204, 12, 63,160,111,180, 62,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,198,204, 12, 63, 72, 58,217, 62, 64,143, 19, 63,
- 4,196,217, 62, 76, 33, 16, 63, 30,211,236, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
- 76, 33, 16, 63, 30,211,236, 62, 71,120, 9, 63, 30,211,236, 62,198,204, 12, 63, 72, 58,217, 62, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 77, 10, 6, 63, 6,196,217, 62,198,204, 12, 63, 72, 58,217, 62, 71,120, 9, 63,
- 30,211,236, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 71,120, 9, 63, 30,211,236, 62,
- 76, 33, 16, 63, 30,211,236, 62,205,204, 12, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0,102,102, 6, 63,244, 1, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 62,251, 2, 63, 67,207,236, 62, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 62,251, 2, 63, 67,207,236, 62, 71,120, 9, 63, 30,211,236, 62,
-102,102, 6, 63,244, 1, 0, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,205,204, 12, 63,
- 0, 0, 0, 63,102,102, 6, 63,244, 1, 0, 63, 71,120, 9, 63, 30,211,236, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0, 71,120, 9, 63, 30,211,236, 62, 62,251, 2, 63, 67,207,236, 62, 77, 10, 6, 63, 6,196,217, 62,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 51, 51, 19, 63,244, 1, 0, 63,205,204, 12, 63,
- 0, 0, 0, 63, 76, 33, 16, 63, 30,211,236, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
- 76, 33, 16, 63, 30,211,236, 62, 86,158, 22, 63, 65,207,236, 62, 51, 51, 19, 63,244, 1, 0, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,155,153, 25, 63, 0, 0, 0, 63, 51, 51, 19, 63,244, 1, 0, 63, 86,158, 22, 63,
- 65,207,236, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 86,158, 22, 63, 65,207,236, 62,
- 76, 33, 16, 63, 30,211,236, 62, 64,143, 19, 63, 4,196,217, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0,233,197,255, 62, 39, 48, 21, 63,101,235,243, 62,252, 29, 19, 63,132, 9,250, 62, 94,152, 9, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,132, 9,250, 62, 94,152, 9, 63,118,226, 2, 63,149,111, 11, 63,
-233,197,255, 62, 39, 48, 21, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 29,225, 5, 63,
-233,209, 22, 63,233,197,255, 62, 39, 48, 21, 63,118,226, 2, 63,149,111, 11, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0,118,226, 2, 63,149,111, 11, 63,132, 9,250, 62, 94,152, 9, 63, 0, 0, 0, 63, 0, 0, 0, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,233,197,255, 62, 39, 48, 21, 63, 29,225, 5, 63,
-233,209, 22, 63, 43,241, 2, 63,181, 23, 33, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
- 43,241, 2, 63,181, 23, 33, 63,225, 69,249, 62,110, 60, 31, 63,233,197,255, 62, 39, 48, 21, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,101,235,243, 62,252, 29, 19, 63,233,197,255, 62, 39, 48, 21, 63,225, 69,249, 62,
-110, 60, 31, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,225, 69,249, 62,110, 60, 31, 63,
- 43,241, 2, 63,181, 23, 33, 63, 30, 86,255, 62,230, 52, 43, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 9,161,242, 62,223,228, 40, 63,129,102,230, 62, 48,200, 37, 63,222,111,237, 62,143,140, 28, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,222,111,237, 62,143,140, 28, 63,225, 69,249, 62,110, 60, 31, 63,
- 9,161,242, 62,223,228, 40, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 30, 86,255, 62,
-230, 52, 43, 63, 9,161,242, 62,223,228, 40, 63,225, 69,249, 62,110, 60, 31, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0,225, 69,249, 62,110, 60, 31, 63,222,111,237, 62,143,140, 28, 63,101,235,243, 62,252, 29, 19, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 46, 46, 6, 63,211,160, 44, 63, 30, 86,255, 62,
-230, 52, 43, 63, 43,241, 2, 63,181, 23, 33, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
- 43,241, 2, 63,181, 23, 33, 63,207, 33, 9, 63,226, 17, 34, 63, 46, 46, 6, 63,211,160, 44, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,220,204, 12, 63, 35, 28, 45, 63, 46, 46, 6, 63,211,160, 44, 63,207, 33, 9, 63,
-226, 17, 34, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,207, 33, 9, 63,226, 17, 34, 63,
- 43,241, 2, 63,181, 23, 33, 63, 29,225, 5, 63,233,209, 22, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0,138,238, 85, 63, 72,220,187, 62,218,173, 82, 63, 55, 92,210, 62,229,189, 79, 63,173,208,189, 62, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,229,189, 79, 63,173,208,189, 62,230,250, 82, 63,117,190,166, 62,
-138,238, 85, 63, 72,220,187, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,149,153, 89, 63,
-201,199,165, 62,138,238, 85, 63, 72,220,187, 62,230,250, 82, 63,117,190,166, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0,230,250, 82, 63,117,190,166, 62,229,189, 79, 63,173,208,189, 62,198,119, 76, 63, 90,150,169, 62,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,170,111, 73, 63, 68,135,193, 62,198,119, 76, 63,
- 90,150,169, 62,229,189, 79, 63,173,208,189, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
-229,189, 79, 63,173,208,189, 62,176,175, 76, 63,192,159,213, 62,170,111, 73, 63, 68,135,193, 62, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,112,194, 70, 63, 19,196,217, 62,170,111, 73, 63, 68,135,193, 62,176,175, 76, 63,
-192,159,213, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,176,175, 76, 63,192,159,213, 62,
-229,189, 79, 63,173,208,189, 62,218,173, 82, 63, 55, 92,210, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 52,175, 79, 63,218, 32,233, 62,193,204, 76, 63, 0, 0, 0, 63,128,209, 73, 63, 75,207,236, 62, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,128,209, 73, 63, 75,207,236, 62,176,175, 76, 63,192,159,213, 62,
- 52,175, 79, 63,218, 32,233, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,218,173, 82, 63,
- 55, 92,210, 62, 52,175, 79, 63,218, 32,233, 62,176,175, 76, 63,192,159,213, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0,176,175, 76, 63,192,159,213, 62,128,209, 73, 63, 75,207,236, 62,112,194, 70, 63, 19,196,217, 62,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,170,111, 73, 63, 68,135,193, 62,112,194, 70, 63,
- 19,196,217, 62,171,132, 67, 63,253,230,198, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
-171,132, 67, 63,253,230,198, 62, 61, 29, 70, 63,114, 54,174, 62,170,111, 73, 63, 68,135,193, 62, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,198,119, 76, 63, 90,150,169, 62,170,111, 73, 63, 68,135,193, 62, 61, 29, 70, 63,
-114, 54,174, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 61, 29, 70, 63,114, 54,174, 62,
-171,132, 67, 63,253,230,198, 62, 0, 0, 64, 63,211,111,180, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 52,175, 79, 63,218, 32,233, 62,218,173, 82, 63, 55, 92,210, 62, 56, 54, 86, 63, 58, 23,233, 62, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 56, 54, 86, 63, 58, 23,233, 62, 41, 51, 83, 63, 24,252,255, 62,
- 52,175, 79, 63,218, 32,233, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,193,204, 76, 63,
- 0, 0, 0, 63, 52,175, 79, 63,218, 32,233, 62, 41, 51, 83, 63, 24,252,255, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0, 41, 51, 83, 63, 24,252,255, 62, 56, 54, 86, 63, 58, 23,233, 62,147,153, 89, 63, 0, 0, 0, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,239,252, 92, 63, 58, 23,233, 62,147,153, 89, 63,
- 0, 0, 0, 63, 56, 54, 86, 63, 58, 23,233, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
- 56, 54, 86, 63, 58, 23,233, 62,147,153, 89, 63,143,190,209, 62,239,252, 92, 63, 58, 23,233, 62, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 78,133, 96, 63, 55, 92,210, 62,239,252, 92, 63, 58, 23,233, 62,147,153, 89, 63,
-143,190,209, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,147,153, 89, 63,143,190,209, 62,
- 56, 54, 86, 63, 58, 23,233, 62,218,173, 82, 63, 55, 92,210, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0,138,238, 85, 63, 72,220,187, 62,149,153, 89, 63,201,199,165, 62,159, 68, 93, 63, 72,220,187, 62, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,159, 68, 93, 63, 72,220,187, 62,147,153, 89, 63,143,190,209, 62,
-138,238, 85, 63, 72,220,187, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,218,173, 82, 63,
- 55, 92,210, 62,138,238, 85, 63, 72,220,187, 62,147,153, 89, 63,143,190,209, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0,147,153, 89, 63,143,190,209, 62,159, 68, 93, 63, 72,220,187, 62, 78,133, 96, 63, 55, 92,210, 62,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,239,252, 92, 63, 58, 23,233, 62, 78,133, 96, 63,
- 55, 92,210, 62,242,131, 99, 63,218, 32,233, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
-242,131, 99, 63,218, 32,233, 62,254,255, 95, 63, 24,252,255, 62,239,252, 92, 63, 58, 23,233, 62, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,147,153, 89, 63, 0, 0, 0, 63,239,252, 92, 63, 58, 23,233, 62,254,255, 95, 63,
- 24,252,255, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,254,255, 95, 63, 24,252,255, 62,
-242,131, 99, 63,218, 32,233, 62,101,102,102, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0,139,174,111, 63,223,230,198, 62,192,112,108, 63, 4,196,217, 62,133,195,105, 63, 37,135,193, 62, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,133,195,105, 63, 37,135,193, 62,249, 21,109, 63, 65, 54,174, 62,
-139,174,111, 63,223,230,198, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 65, 51,115, 63,
-160,111,180, 62,139,174,111, 63,223,230,198, 62,249, 21,109, 63, 65, 54,174, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0,249, 21,109, 63, 65, 54,174, 62,133,195,105, 63, 37,135,193, 62,106,187,102, 63, 54,150,169, 62,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 70,117, 99, 63,155,208,189, 62,106,187,102, 63,
- 54,150,169, 62,133,195,105, 63, 37,135,193, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
-133,195,105, 63, 37,135,193, 62,123,131,102, 63,181,159,213, 62, 70,117, 99, 63,155,208,189, 62, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 78,133, 96, 63, 55, 92,210, 62, 70,117, 99, 63,155,208,189, 62,123,131,102, 63,
-181,159,213, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,123,131,102, 63,181,159,213, 62,
-133,195,105, 63, 37,135,193, 62,192,112,108, 63, 4,196,217, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0,170, 97,105, 63, 65,207,236, 62,101,102,102, 63, 0, 0, 0, 63,242,131, 99, 63,218, 32,233, 62, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,242,131, 99, 63,218, 32,233, 62,123,131,102, 63,181,159,213, 62,
-170, 97,105, 63, 65,207,236, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,192,112,108, 63,
- 4,196,217, 62,170, 97,105, 63, 65,207,236, 62,123,131,102, 63,181,159,213, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0,123,131,102, 63,181,159,213, 62,242,131, 99, 63,218, 32,233, 62, 78,133, 96, 63, 55, 92,210, 62,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 70,117, 99, 63,155,208,189, 62, 78,133, 96, 63,
- 55, 92,210, 62,159, 68, 93, 63, 72,220,187, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
-159, 68, 93, 63, 72,220,187, 62, 71, 56, 96, 63, 99,190,166, 62, 70,117, 99, 63,155,208,189, 62, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,106,187,102, 63, 54,150,169, 62, 70,117, 99, 63,155,208,189, 62, 71, 56, 96, 63,
- 99,190,166, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 71, 56, 96, 63, 99,190,166, 62,
-159, 68, 93, 63, 72,220,187, 62,149,153, 89, 63,201,199,165, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 33,107, 99, 63, 94,152, 9, 63, 11, 92, 96, 63,253, 29, 19, 63, 21,238, 92, 63,112,150, 9, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 21,238, 92, 63,112,150, 9, 63,254,255, 95, 63, 24,252,255, 62,
- 33,107, 99, 63, 94,152, 9, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,101,102,102, 63,
- 0, 0, 0, 63, 33,107, 99, 63, 94,152, 9, 63,254,255, 95, 63, 24,252,255, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0,254,255, 95, 63, 24,252,255, 62, 21,238, 92, 63,112,150, 9, 63,147,153, 89, 63, 0, 0, 0, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 14, 69, 86, 63,112,150, 9, 63,147,153, 89, 63,
- 0, 0, 0, 63, 21,238, 92, 63,112,150, 9, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
- 21,238, 92, 63,112,150, 9, 63,143,153, 89, 63,219, 98, 19, 63, 14, 69, 86, 63,112,150, 9, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 19,215, 82, 63,252, 29, 19, 63, 14, 69, 86, 63,112,150, 9, 63,143,153, 89, 63,
-219, 98, 19, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,143,153, 89, 63,219, 98, 19, 63,
- 21,238, 92, 63,112,150, 9, 63, 11, 92, 96, 63,253, 29, 19, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 63, 30, 93, 63,143,140, 28, 63,139,153, 89, 63, 45,200, 37, 63,218, 20, 86, 63,143,140, 28, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,218, 20, 86, 63,143,140, 28, 63,143,153, 89, 63,219, 98, 19, 63,
- 63, 30, 93, 63,143,140, 28, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 11, 92, 96, 63,
-253, 29, 19, 63, 63, 30, 93, 63,143,140, 28, 63,143,153, 89, 63,219, 98, 19, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0,143,153, 89, 63,219, 98, 19, 63,218, 20, 86, 63,143,140, 28, 63, 19,215, 82, 63,252, 29, 19, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 14, 69, 86, 63,112,150, 9, 63, 19,215, 82, 63,
-252, 29, 19, 63, 1,200, 79, 63, 94,152, 9, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
- 1,200, 79, 63, 94,152, 9, 63, 41, 51, 83, 63, 24,252,255, 62, 14, 69, 86, 63,112,150, 9, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,147,153, 89, 63, 0, 0, 0, 63, 14, 69, 86, 63,112,150, 9, 63, 41, 51, 83, 63,
- 24,252,255, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 41, 51, 83, 63, 24,252,255, 62,
- 1,200, 79, 63, 94,152, 9, 63,193,204, 76, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0,237, 28, 18, 61, 60,220,187, 62,151, 35,188, 60, 46, 92,210, 62,218, 74, 60, 60,150,208,189, 62, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,218, 74, 60, 60,150,208,189, 62,195,197,197, 60, 89,190,166, 62,
-237, 28, 18, 61, 60,220,187, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,194,205, 76, 61,
-186,199,165, 62,237, 28, 18, 61, 60,220,187, 62,195,197,197, 60, 89,190,166, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0, 23, 23,131, 63, 89,190,166, 62,150,120,129, 63,150,208,189, 62, 15,171,127, 63, 52,150,169, 62,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,241,162,124, 63, 36,135,193, 62, 15,171,127, 63,
- 52,150,169, 62,150,120,129, 63,150,208,189, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
-150,120,129, 63,150,208,189, 62,244,226,127, 63,179,159,213, 62,241,162,124, 63, 36,135,193, 62, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,179,245,121, 63, 6,196,217, 62,241,162,124, 63, 36,135,193, 62,244,226,127, 63,
-179,159,213, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,244,226,127, 63,179,159,213, 62,
-150,120,129, 63,150,208,189, 62,142,240,130, 63, 46, 92,210, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 59,113,129, 63,214, 32,233, 62, 0, 0,128, 63, 0, 0, 0, 63,194, 4,125, 63, 67,207,236, 62, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,194, 4,125, 63, 67,207,236, 62,244,226,127, 63,179,159,213, 62,
- 59,113,129, 63,214, 32,233, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,142,240,130, 63,
- 46, 92,210, 62, 59,113,129, 63,214, 32,233, 62,244,226,127, 63,179,159,213, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0,244,226,127, 63,179,159,213, 62,194, 4,125, 63, 67,207,236, 62,179,245,121, 63, 6,196,217, 62,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,241,162,124, 63, 36,135,193, 62,179,245,121, 63,
- 6,196,217, 62,239,183,118, 63,227,230,198, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
-239,183,118, 63,227,230,198, 62,133, 80,121, 63, 65, 54,174, 62,241,162,124, 63, 36,135,193, 62, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 15,171,127, 63, 52,150,169, 62,241,162,124, 63, 36,135,193, 62,133, 80,121, 63,
- 65, 54,174, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,133, 80,121, 63, 65, 54,174, 62,
-239,183,118, 63,227,230,198, 62, 65, 51,115, 63,160,111,180, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0,110,157, 56, 60,214, 32,233, 62,151, 35,188, 60, 46, 92,210, 62, 95,151, 22, 61, 55, 23,233, 62, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 95,151, 22, 61, 55, 23,233, 62,176,204,204, 60, 24,252,255, 62,
-110,157, 56, 60,214, 32,233, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,167, 79, 11, 38,
- 0, 0, 0, 63,110,157, 56, 60,214, 32,233, 62,176,204,204, 60, 24,252,255, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0,176,204,204, 60, 24,252,255, 62, 95,151, 22, 61, 55, 23,233, 62,215,204, 76, 61, 0, 0, 0, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 87,129,129, 61, 57, 23,233, 62,215,204, 76, 61,
- 0, 0, 0, 63, 95,151, 22, 61, 55, 23,233, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
- 95,151, 22, 61, 55, 23,233, 62, 68,205, 76, 61,135,190,209, 62, 87,129,129, 61, 57, 23,233, 62, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 92,196,157, 61, 49, 92,210, 62, 87,129,129, 61, 57, 23,233, 62, 68,205, 76, 61,
-135,190,209, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 68,205, 76, 61,135,190,209, 62,
- 95,151, 22, 61, 55, 23,233, 62,151, 35,188, 60, 46, 92,210, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0,237, 28, 18, 61, 60,220,187, 62,194,205, 76, 61,186,199,165, 62, 7,191,131, 61, 62,220,187, 62, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 7,191,131, 61, 62,220,187, 62, 68,205, 76, 61,135,190,209, 62,
-237, 28, 18, 61, 60,220,187, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,151, 35,188, 60,
- 46, 92,210, 62,237, 28, 18, 61, 60,220,187, 62, 68,205, 76, 61,135,190,209, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0, 68,205, 76, 61,135,190,209, 62, 7,191,131, 61, 62,220,187, 62, 92,196,157, 61, 49, 92,210, 62,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 87,129,129, 61, 57, 23,233, 62, 92,196,157, 61,
- 49, 92,210, 62, 89,185,181, 61,214, 32,233, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
- 89,185,181, 61,214, 32,233, 62,154,153,153, 61, 25,252,255, 62, 87,129,129, 61, 57, 23,233, 62, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,215,204, 76, 61, 0, 0, 0, 63, 87,129,129, 61, 57, 23,233, 62,154,153,153, 61,
- 25,252,255, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,154,153,153, 61, 25,252,255, 62,
- 89,185,181, 61,214, 32,233, 62,215,204,204, 61, 0, 0, 0, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 1,135, 11, 62,228,230,198, 62,171, 31,253, 61, 6,196,217, 62,251,181,231, 61, 38,135,193, 62, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,251,181,231, 61, 38,135,193, 62,204, 36, 1, 62, 70, 54,174, 62,
- 1,135, 11, 62,228,230,198, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,214,153, 25, 62,
-165,111,180, 62, 1,135, 11, 62,228,230,198, 62,204, 36, 1, 62, 70, 54,174, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0,204, 36, 1, 62, 70, 54,174, 62,251,181,231, 61, 38,135,193, 62, 70,117,207, 61, 54,150,169, 62,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 35, 68,181, 61,153,208,189, 62, 70,117,207, 61,
- 54,150,169, 62,251,181,231, 61, 38,135,193, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
-251,181,231, 61, 38,135,193, 62,164,181,205, 61,180,159,213, 62, 35, 68,181, 61,153,208,189, 62, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 92,196,157, 61, 49, 92,210, 62, 35, 68,181, 61,153,208,189, 62,164,181,205, 61,
-180,159,213, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,164,181,205, 61,180,159,213, 62,
-251,181,231, 61, 38,135,193, 62,171, 31,253, 61, 6,196,217, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0,251,166,228, 61, 67,207,236, 62,215,204,204, 61, 0, 0, 0, 63, 89,185,181, 61,214, 32,233, 62, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 89,185,181, 61,214, 32,233, 62,164,181,205, 61,180,159,213, 62,
-251,166,228, 61, 67,207,236, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,171, 31,253, 61,
- 6,196,217, 62,251,166,228, 61, 67,207,236, 62,164,181,205, 61,180,159,213, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0,164,181,205, 61,180,159,213, 62, 89,185,181, 61,214, 32,233, 62, 92,196,157, 61, 49, 92,210, 62,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 35, 68,181, 61,153,208,189, 62, 92,196,157, 61,
- 49, 92,210, 62, 7,191,131, 61, 62,220,187, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
- 7,191,131, 61, 62,220,187, 62, 79, 92,155, 61, 91,190,166, 62, 35, 68,181, 61,153,208,189, 62, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 70,117,207, 61, 54,150,169, 62, 35, 68,181, 61,153,208,189, 62, 79, 92,155, 61,
- 91,190,166, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 79, 92,155, 61, 91,190,166, 62,
- 7,191,131, 61, 62,220,187, 62,194,205, 76, 61,186,199,165, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0,172,242,180, 61, 96,152, 9, 63, 1,122,156, 61,254, 29, 19, 63,100, 10,129, 61,113,150, 9, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,100, 10,129, 61,113,150, 9, 63,154,153,153, 61, 25,252,255, 62,
-172,242,180, 61, 96,152, 9, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,215,204,204, 61,
- 0, 0, 0, 63,172,242,180, 61, 96,152, 9, 63,154,153,153, 61, 25,252,255, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0,154,153,153, 61, 25,252,255, 62,100, 10,129, 61,113,150, 9, 63,215,204, 76, 61, 0, 0, 0, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,109,132, 23, 61,113,150, 9, 63,215,204, 76, 61,
- 0, 0, 0, 63,100, 10,129, 61,113,150, 9, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
-100, 10,129, 61,113,150, 9, 63, 91,204, 76, 61,220, 98, 19, 63,109,132, 23, 61,113,150, 9, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,174, 73,193, 60,253, 29, 19, 63,109,132, 23, 61,113,150, 9, 63, 91,204, 76, 61,
-220, 98, 19, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 91,204, 76, 61,220, 98, 19, 63,
-100, 10,129, 61,113,150, 9, 63, 1,122,156, 61,254, 29, 19, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0,166,139,130, 61,145,140, 28, 63,246,203, 76, 61, 48,200, 37, 63, 13,129, 20, 61,143,140, 28, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 13,129, 20, 61,143,140, 28, 63, 91,204, 76, 61,220, 98, 19, 63,
-166,139,130, 61,145,140, 28, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1,122,156, 61,
-254, 29, 19, 63,166,139,130, 61,145,140, 28, 63, 91,204, 76, 61,220, 98, 19, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0, 91,204, 76, 61,220, 98, 19, 63, 13,129, 20, 61,143,140, 28, 63,174, 73,193, 60,253, 29, 19, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,109,132, 23, 61,113,150, 9, 63,174, 73,193, 60,
-253, 29, 19, 63,114,207, 62, 60, 94,152, 9, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
-114,207, 62, 60, 94,152, 9, 63,176,204,204, 60, 24,252,255, 62,109,132, 23, 61,113,150, 9, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,215,204, 76, 61, 0, 0, 0, 63,109,132, 23, 61,113,150, 9, 63,176,204,204, 60,
- 24,252,255, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,176,204,204, 60, 24,252,255, 62,
-114,207, 62, 60, 94,152, 9, 63,167, 79, 11, 38, 0, 0, 0, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0,237, 83,113, 62, 79,220,187, 62, 63, 81,100, 62, 60, 92,210, 62,110,145, 88, 62,167,208,189, 62, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,110,145, 88, 62,167,208,189, 62, 91,133,101, 62,112,190,166, 62,
-237, 83,113, 62, 79,220,187, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0,128, 62,
-206,199,165, 62,237, 83,113, 62, 79,220,187, 62, 91,133,101, 62,112,190,166, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0, 91,133,101, 62,112,190,166, 62,110,145, 88, 62,167,208,189, 62,239,120, 75, 62, 70,150,169, 62,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,144, 88, 63, 62, 46,135,193, 62,239,120, 75, 62,
- 70,150,169, 62,110,145, 88, 62,167,208,189, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
-110,145, 88, 62,167,208,189, 62,170, 88, 76, 62,187,159,213, 62,144, 88, 63, 62, 46,135,193, 62, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,179,163, 52, 62, 7,196,217, 62,144, 88, 63, 62, 46,135,193, 62,170, 88, 76, 62,
-187,159,213, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,170, 88, 76, 62,187,159,213, 62,
-110,145, 88, 62,167,208,189, 62, 63, 81,100, 62, 60, 92,210, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0,190, 86, 88, 62,221, 32,233, 62,254,204, 76, 62, 0, 0, 0, 63,251,223, 64, 62, 67,207,236, 62, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,251,223, 64, 62, 67,207,236, 62,170, 88, 76, 62,187,159,213, 62,
-190, 86, 88, 62,221, 32,233, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 63, 81,100, 62,
- 60, 92,210, 62,190, 86, 88, 62,221, 32,233, 62,170, 88, 76, 62,187,159,213, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0,170, 88, 76, 62,187,159,213, 62,251,223, 64, 62, 67,207,236, 62,179,163, 52, 62, 7,196,217, 62,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,144, 88, 63, 62, 46,135,193, 62,179,163, 52, 62,
- 7,196,217, 62,153,172, 39, 62,230,230,198, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
-153,172, 39, 62,230,230,198, 62,213, 14, 50, 62, 78, 54,174, 62,144, 88, 63, 62, 46,135,193, 62, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,239,120, 75, 62, 70,150,169, 62,144, 88, 63, 62, 46,135,193, 62,213, 14, 50, 62,
- 78, 54,174, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,213, 14, 50, 62, 78, 54,174, 62,
-153,172, 39, 62,230,230,198, 62,214,153, 25, 62,165,111,180, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0,190, 86, 88, 62,221, 32,233, 62, 63, 81,100, 62, 60, 92,210, 62,166,114,114, 62, 63, 23,233, 62, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,166,114,114, 62, 63, 23,233, 62,126,102,102, 62, 25,252,255, 62,
-190, 86, 88, 62,221, 32,233, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,254,204, 76, 62,
- 0, 0, 0, 63,190, 86, 88, 62,221, 32,233, 62,126,102,102, 62, 25,252,255, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0,126,102,102, 62, 25,252,255, 62,166,114,114, 62, 63, 23,233, 62, 0, 0,128, 62, 0, 0, 0, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,173,198,134, 62, 63, 23,233, 62, 0, 0,128, 62,
- 0, 0, 0, 63,166,114,114, 62, 63, 23,233, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
-166,114,114, 62, 63, 23,233, 62, 0, 0,128, 62,149,190,209, 62,173,198,134, 62, 63, 23,233, 62, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 97,215,141, 62, 60, 92,210, 62,173,198,134, 62, 63, 23,233, 62, 0, 0,128, 62,
-149,190,209, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0,128, 62,149,190,209, 62,
-166,114,114, 62, 63, 23,233, 62, 63, 81,100, 62, 60, 92,210, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0,237, 83,113, 62, 79,220,187, 62, 0, 0,128, 62,206,199,165, 62, 9, 86,135, 62, 79,220,187, 62, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 9, 86,135, 62, 79,220,187, 62, 0, 0,128, 62,149,190,209, 62,
-237, 83,113, 62, 79,220,187, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 63, 81,100, 62,
- 60, 92,210, 62,237, 83,113, 62, 79,220,187, 62, 0, 0,128, 62,149,190,209, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0, 0, 0,128, 62,149,190,209, 62, 9, 86,135, 62, 79,220,187, 62, 97,215,141, 62, 60, 92,210, 62,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,173,198,134, 62, 63, 23,233, 62, 97,215,141, 62,
- 60, 92,210, 62,161,212,147, 62,221, 32,233, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
-161,212,147, 62,221, 32,233, 62,193,204,140, 62, 25,252,255, 62,173,198,134, 62, 63, 23,233, 62, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0,128, 62, 0, 0, 0, 63,173,198,134, 62, 63, 23,233, 62,193,204,140, 62,
- 25,252,255, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,193,204,140, 62, 25,252,255, 62,
-161,212,147, 62,221, 32,233, 62,129,153,153, 62, 0, 0, 0, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0,180, 41,172, 62,227,230,198, 62, 39,174,165, 62, 7,196,217, 62,184, 83,160, 62, 46,135,193, 62, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,184, 83,160, 62, 46,135,193, 62,150,248,166, 62, 78, 54,174, 62,
-180, 41,172, 62,227,230,198, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 21, 51,179, 62,
-165,111,180, 62,180, 41,172, 62,227,230,198, 62,150,248,166, 62, 78, 54,174, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0,150,248,166, 62, 78, 54,174, 62,184, 83,160, 62, 46,135,193, 62,137, 67,154, 62, 70,150,169, 62,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 73,183,147, 62,167,208,189, 62,137, 67,154, 62,
- 70,150,169, 62,184, 83,160, 62, 46,135,193, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
-184, 83,160, 62, 46,135,193, 62,171,211,153, 62,187,159,213, 62, 73,183,147, 62,167,208,189, 62, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 97,215,141, 62, 60, 92,210, 62, 73,183,147, 62,167,208,189, 62,171,211,153, 62,
-187,159,213, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,171,211,153, 62,187,159,213, 62,
-184, 83,160, 62, 46,135,193, 62, 39,174,165, 62, 7,196,217, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 3,144,159, 62, 67,207,236, 62,129,153,153, 62, 0, 0, 0, 63,161,212,147, 62,221, 32,233, 62, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,161,212,147, 62,221, 32,233, 62,171,211,153, 62,187,159,213, 62,
- 3,144,159, 62, 67,207,236, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 39,174,165, 62,
- 7,196,217, 62, 3,144,159, 62, 67,207,236, 62,171,211,153, 62,187,159,213, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0,171,211,153, 62,187,159,213, 62,161,212,147, 62,221, 32,233, 62, 97,215,141, 62, 60, 92,210, 62,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 73,183,147, 62,167,208,189, 62, 97,215,141, 62,
- 60, 92,210, 62, 9, 86,135, 62, 79,220,187, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
- 9, 86,135, 62, 79,220,187, 62, 82, 61,141, 62,112,190,166, 62, 73,183,147, 62,167,208,189, 62, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,137, 67,154, 62, 70,150,169, 62, 73,183,147, 62,167,208,189, 62, 82, 61,141, 62,
-112,190,166, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 82, 61,141, 62,112,190,166, 62,
- 9, 86,135, 62, 79,220,187, 62, 0, 0,128, 62,206,199,165, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 1,163,147, 62, 91,152, 9, 63,224,132,141, 62,246, 29, 19, 63,251,168,134, 62,107,150, 9, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,251,168,134, 62,107,150, 9, 63,193,204,140, 62, 25,252,255, 62,
- 1,163,147, 62, 91,152, 9, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,129,153,153, 62,
- 0, 0, 0, 63, 1,163,147, 62, 91,152, 9, 63,193,204,140, 62, 25,252,255, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0,193,204,140, 62, 25,252,255, 62,251,168,134, 62,107,150, 9, 63, 0, 0,128, 62, 0, 0, 0, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 11,174,114, 62,107,150, 9, 63, 0, 0,128, 62,
- 0, 0, 0, 63,251,168,134, 62,107,150, 9, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
-251,168,134, 62,107,150, 9, 63, 0, 0,128, 62,209, 98, 19, 63, 11,174,114, 62,107,150, 9, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 64,246,100, 62,246, 29, 19, 63, 11,174,114, 62,107,150, 9, 63, 0, 0,128, 62,
-209, 98, 19, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0,128, 62,209, 98, 19, 63,
-251,168,134, 62,107,150, 9, 63,224,132,141, 62,246, 29, 19, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 86, 9,135, 62,130,140, 28, 63, 0, 0,128, 62, 23,200, 37, 63, 83,237,113, 62,130,140, 28, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 83,237,113, 62,130,140, 28, 63, 0, 0,128, 62,209, 98, 19, 63,
- 86, 9,135, 62,130,140, 28, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,224,132,141, 62,
-246, 29, 19, 63, 86, 9,135, 62,130,140, 28, 63, 0, 0,128, 62,209, 98, 19, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0, 0, 0,128, 62,209, 98, 19, 63, 83,237,113, 62,130,140, 28, 63, 64,246,100, 62,246, 29, 19, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 11,174,114, 62,107,150, 9, 63, 64,246,100, 62,
-246, 29, 19, 63,255,185, 88, 62, 90,152, 9, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
-255,185, 88, 62, 90,152, 9, 63,126,102,102, 62, 25,252,255, 62, 11,174,114, 62,107,150, 9, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0,128, 62, 0, 0, 0, 63, 11,174,114, 62,107,150, 9, 63,126,102,102, 62,
- 25,252,255, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,126,102,102, 62, 25,252,255, 62,
-255,185, 88, 62, 90,152, 9, 63,254,204, 76, 62, 0, 0, 0, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 63, 16,223, 62, 62,220,187, 62,233,142,216, 62, 49, 92,210, 62,248,174,210, 62,153,208,189, 62, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,248,174,210, 62,153,208,189, 62,237, 40,217, 62, 91,190,166, 62,
- 63, 16,223, 62, 62,220,187, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 72,102,230, 62,
-183,199,165, 62, 63, 16,223, 62, 62,220,187, 62,237, 40,217, 62, 91,190,166, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0,237, 40,217, 62, 91,190,166, 62,248,174,210, 62,153,208,189, 62,175, 34,204, 62, 54,150,169, 62,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,129, 18,198, 62, 37,135,193, 62,175, 34,204, 62,
- 54,150,169, 62,248,174,210, 62,153,208,189, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
-248,174,210, 62,153,208,189, 62,151,146,204, 62,180,159,213, 62,129, 18,198, 62, 37,135,193, 62, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 21,184,192, 62, 6,196,217, 62,129, 18,198, 62, 37,135,193, 62,151,146,204, 62,
-180,159,213, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,151,146,204, 62,180,159,213, 62,
-248,174,210, 62,153,208,189, 62,233,142,216, 62, 49, 92,210, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0,170,145,210, 62,214, 32,233, 62,202,204,204, 62, 0, 0, 0, 63, 65,214,198, 62, 67,207,236, 62, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 65,214,198, 62, 67,207,236, 62,151,146,204, 62,180,159,213, 62,
-170,145,210, 62,214, 32,233, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,233,142,216, 62,
- 49, 92,210, 62,170,145,210, 62,214, 32,233, 62,151,146,204, 62,180,159,213, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0,151,146,204, 62,180,159,213, 62, 65,214,198, 62, 67,207,236, 62, 21,184,192, 62, 6,196,217, 62,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,129, 18,198, 62, 37,135,193, 62, 21,184,192, 62,
- 6,196,217, 62,127, 60,186, 62,225,230,198, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
-127, 60,186, 62,225,230,198, 62,154,109,191, 62, 68, 54,174, 62,129, 18,198, 62, 37,135,193, 62, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,175, 34,204, 62, 54,150,169, 62,129, 18,198, 62, 37,135,193, 62,154,109,191, 62,
- 68, 54,174, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,154,109,191, 62, 68, 54,174, 62,
-127, 60,186, 62,225,230,198, 62, 21, 51,179, 62,165,111,180, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0,170,145,210, 62,214, 32,233, 62,233,142,216, 62, 49, 92,210, 62,171,159,223, 62, 57, 23,233, 62, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,171,159,223, 62, 57, 23,233, 62,154,153,217, 62, 24,252,255, 62,
-170,145,210, 62,214, 32,233, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,202,204,204, 62,
- 0, 0, 0, 63,170,145,210, 62,214, 32,233, 62,154,153,217, 62, 24,252,255, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0,154,153,217, 62, 24,252,255, 62,171,159,223, 62, 57, 23,233, 62,101,102,230, 62, 0, 0, 0, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 20, 45,237, 62, 55, 23,233, 62,101,102,230, 62,
- 0, 0, 0, 63,171,159,223, 62, 57, 23,233, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
-171,159,223, 62, 57, 23,233, 62, 88,102,230, 62,135,190,209, 62, 20, 45,237, 62, 55, 23,233, 62, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,199, 61,244, 62, 46, 92,210, 62, 20, 45,237, 62, 55, 23,233, 62, 88,102,230, 62,
-135,190,209, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 88,102,230, 62,135,190,209, 62,
-171,159,223, 62, 57, 23,233, 62,233,142,216, 62, 49, 92,210, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 63, 16,223, 62, 62,220,187, 62, 72,102,230, 62,183,199,165, 62, 99,188,237, 62, 60,220,187, 62, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 99,188,237, 62, 60,220,187, 62, 88,102,230, 62,135,190,209, 62,
- 63, 16,223, 62, 62,220,187, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,233,142,216, 62,
- 49, 92,210, 62, 63, 16,223, 62, 62,220,187, 62, 88,102,230, 62,135,190,209, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0, 88,102,230, 62,135,190,209, 62, 99,188,237, 62, 60,220,187, 62,199, 61,244, 62, 46, 92,210, 62,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 20, 45,237, 62, 55, 23,233, 62,199, 61,244, 62,
- 46, 92,210, 62, 21, 59,250, 62,213, 32,233, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
- 21, 59,250, 62,213, 32,233, 62, 53, 51,243, 62, 24,252,255, 62, 20, 45,237, 62, 55, 23,233, 62, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,101,102,230, 62, 0, 0, 0, 63, 20, 45,237, 62, 55, 23,233, 62, 53, 51,243, 62,
- 24,252,255, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 53, 51,243, 62, 24,252,255, 62,
- 21, 59,250, 62,213, 32,233, 62, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 17, 72, 9, 63,227,230,198, 62, 77, 10, 6, 63, 6,196,217, 62, 15, 93, 3, 63, 36,135,193, 62, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 15, 93, 3, 63, 36,135,193, 62,123,175, 6, 63, 65, 54,174, 62,
- 17, 72, 9, 63,227,230,198, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,191,204, 12, 63,
-160,111,180, 62, 17, 72, 9, 63,227,230,198, 62,123,175, 6, 63, 65, 54,174, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0,123,175, 6, 63, 65, 54,174, 62, 15, 93, 3, 63, 36,135,193, 62,241, 84, 0, 63, 52,150,169, 62,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,169, 29,250, 62,150,208,189, 62,241, 84, 0, 63,
- 52,150,169, 62, 15, 93, 3, 63, 36,135,193, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
- 15, 93, 3, 63, 36,135,193, 62, 12, 29, 0, 63,179,159,213, 62,169, 29,250, 62,150,208,189, 62, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,199, 61,244, 62, 46, 92,210, 62,169, 29,250, 62,150,208,189, 62, 12, 29, 0, 63,
-179,159,213, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 12, 29, 0, 63,179,159,213, 62,
- 15, 93, 3, 63, 36,135,193, 62, 77, 10, 6, 63, 6,196,217, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 62,251, 2, 63, 67,207,236, 62, 0, 0, 0, 63, 0, 0, 0, 63, 21, 59,250, 62,213, 32,233, 62, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 21, 59,250, 62,213, 32,233, 62, 12, 29, 0, 63,179,159,213, 62,
- 62,251, 2, 63, 67,207,236, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 77, 10, 6, 63,
- 6,196,217, 62, 62,251, 2, 63, 67,207,236, 62, 12, 29, 0, 63,179,159,213, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0, 12, 29, 0, 63,179,159,213, 62, 21, 59,250, 62,213, 32,233, 62,199, 61,244, 62, 46, 92,210, 62,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,169, 29,250, 62,150,208,189, 62,199, 61,244, 62,
- 46, 92,210, 62, 99,188,237, 62, 60,220,187, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
- 99,188,237, 62, 60,220,187, 62,164,163,243, 62, 89,190,166, 62,169, 29,250, 62,150,208,189, 62, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,241, 84, 0, 63, 52,150,169, 62,169, 29,250, 62,150,208,189, 62,164,163,243, 62,
- 89,190,166, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,164,163,243, 62, 89,190,166, 62,
- 99,188,237, 62, 60,220,187, 62, 72,102,230, 62,183,199,165, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0,132, 9,250, 62, 94,152, 9, 63,101,235,243, 62,252, 29, 19, 63,114, 15,237, 62,113,150, 9, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,114, 15,237, 62,113,150, 9, 63, 53, 51,243, 62, 24,252,255, 62,
-132, 9,250, 62, 94,152, 9, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 63,
- 0, 0, 0, 63,132, 9,250, 62, 94,152, 9, 63, 53, 51,243, 62, 24,252,255, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0, 53, 51,243, 62, 24,252,255, 62,114, 15,237, 62,113,150, 9, 63,101,102,230, 62, 0, 0, 0, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,103,189,223, 62,112,150, 9, 63,101,102,230, 62,
- 0, 0, 0, 63,114, 15,237, 62,113,150, 9, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
-114, 15,237, 62,113,150, 9, 63,117,102,230, 62,220, 98, 19, 63,103,189,223, 62,112,150, 9, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,128,225,216, 62,254, 29, 19, 63,103,189,223, 62,112,150, 9, 63,117,102,230, 62,
-220, 98, 19, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,117,102,230, 62,220, 98, 19, 63,
-114, 15,237, 62,113,150, 9, 63,101,235,243, 62,252, 29, 19, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0,222,111,237, 62,143,140, 28, 63,129,102,230, 62, 48,200, 37, 63, 22, 93,223, 62,145,140, 28, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 22, 93,223, 62,145,140, 28, 63,117,102,230, 62,220, 98, 19, 63,
-222,111,237, 62,143,140, 28, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,101,235,243, 62,
-252, 29, 19, 63,222,111,237, 62,143,140, 28, 63,117,102,230, 62,220, 98, 19, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0,117,102,230, 62,220, 98, 19, 63, 22, 93,223, 62,145,140, 28, 63,128,225,216, 62,254, 29, 19, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,103,189,223, 62,112,150, 9, 63,128,225,216, 62,
-254, 29, 19, 63, 85,195,210, 62, 96,152, 9, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
- 85,195,210, 62, 96,152, 9, 63,154,153,217, 62, 24,252,255, 62,103,189,223, 62,112,150, 9, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,101,102,230, 62, 0, 0, 0, 63,103,189,223, 62,112,150, 9, 63,154,153,217, 62,
- 24,252,255, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,154,153,217, 62, 24,252,255, 62,
- 85,195,210, 62, 96,152, 9, 63,202,204,204, 62, 0, 0, 0, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 97,187, 34, 63, 72,220,187, 62,178,122, 31, 63, 55, 92,210, 62,186,138, 28, 63,155,208,189, 62, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,186,138, 28, 63,155,208,189, 62,185,199, 31, 63, 96,190,166, 62,
- 97,187, 34, 63, 72,220,187, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,107,102, 38, 63,
-201,199,165, 62, 97,187, 34, 63, 72,220,187, 62,185,199, 31, 63, 96,190,166, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0,185,199, 31, 63, 96,190,166, 62,186,138, 28, 63,155,208,189, 62,150, 68, 25, 63, 54,150,169, 62,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,123, 60, 22, 63, 36,135,193, 62,150, 68, 25, 63,
- 54,150,169, 62,186,138, 28, 63,155,208,189, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
-186,138, 28, 63,155,208,189, 62,133,124, 25, 63,181,159,213, 62,123, 60, 22, 63, 36,135,193, 62, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 64,143, 19, 63, 4,196,217, 62,123, 60, 22, 63, 36,135,193, 62,133,124, 25, 63,
-181,159,213, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,133,124, 25, 63,181,159,213, 62,
-186,138, 28, 63,155,208,189, 62,178,122, 31, 63, 55, 92,210, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 14,124, 28, 63,218, 32,233, 62,155,153, 25, 63, 0, 0, 0, 63, 86,158, 22, 63, 65,207,236, 62, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 86,158, 22, 63, 65,207,236, 62,133,124, 25, 63,181,159,213, 62,
- 14,124, 28, 63,218, 32,233, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,178,122, 31, 63,
- 55, 92,210, 62, 14,124, 28, 63,218, 32,233, 62,133,124, 25, 63,181,159,213, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0,133,124, 25, 63,181,159,213, 62, 86,158, 22, 63, 65,207,236, 62, 64,143, 19, 63, 4,196,217, 62,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,123, 60, 22, 63, 36,135,193, 62, 64,143, 19, 63,
- 4,196,217, 62,117, 81, 16, 63,223,230,198, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
-117, 81, 16, 63,223,230,198, 62, 7,234, 18, 63, 65, 54,174, 62,123, 60, 22, 63, 36,135,193, 62, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,150, 68, 25, 63, 54,150,169, 62,123, 60, 22, 63, 36,135,193, 62, 7,234, 18, 63,
- 65, 54,174, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 7,234, 18, 63, 65, 54,174, 62,
-117, 81, 16, 63,223,230,198, 62,191,204, 12, 63,160,111,180, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 14,124, 28, 63,218, 32,233, 62,178,122, 31, 63, 55, 92,210, 62, 17, 3, 35, 63, 58, 23,233, 62, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 17, 3, 35, 63, 58, 23,233, 62, 2, 0, 32, 63, 24,252,255, 62,
- 14,124, 28, 63,218, 32,233, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,155,153, 25, 63,
- 0, 0, 0, 63, 14,124, 28, 63,218, 32,233, 62, 2, 0, 32, 63, 24,252,255, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0, 2, 0, 32, 63, 24,252,255, 62, 17, 3, 35, 63, 58, 23,233, 62,109,102, 38, 63, 0, 0, 0, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,200,201, 41, 63, 58, 23,233, 62,109,102, 38, 63,
- 0, 0, 0, 63, 17, 3, 35, 63, 58, 23,233, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
- 17, 3, 35, 63, 58, 23,233, 62,109,102, 38, 63,143,190,209, 62,200,201, 41, 63, 58, 23,233, 62, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 38, 82, 45, 63, 55, 92,210, 62,200,201, 41, 63, 58, 23,233, 62,109,102, 38, 63,
-143,190,209, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,109,102, 38, 63,143,190,209, 62,
- 17, 3, 35, 63, 58, 23,233, 62,178,122, 31, 63, 55, 92,210, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 97,187, 34, 63, 72,220,187, 62,107,102, 38, 63,201,199,165, 62,118, 17, 42, 63, 72,220,187, 62, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,118, 17, 42, 63, 72,220,187, 62,109,102, 38, 63,143,190,209, 62,
- 97,187, 34, 63, 72,220,187, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,178,122, 31, 63,
- 55, 92,210, 62, 97,187, 34, 63, 72,220,187, 62,109,102, 38, 63,143,190,209, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0,109,102, 38, 63,143,190,209, 62,118, 17, 42, 63, 72,220,187, 62, 38, 82, 45, 63, 55, 92,210, 62,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,200,201, 41, 63, 58, 23,233, 62, 38, 82, 45, 63,
- 55, 92,210, 62,204, 80, 48, 63,218, 32,233, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
-204, 80, 48, 63,218, 32,233, 62,215,204, 44, 63, 23,252,255, 62,200,201, 41, 63, 58, 23,233, 62, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,109,102, 38, 63, 0, 0, 0, 63,200,201, 41, 63, 58, 23,233, 62,215,204, 44, 63,
- 23,252,255, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,215,204, 44, 63, 23,252,255, 62,
-204, 80, 48, 63,218, 32,233, 62, 63, 51, 51, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 85,123, 60, 63,253,230,198, 62,144, 61, 57, 63, 19,196,217, 62, 86,144, 54, 63, 68,135,193, 62, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 86,144, 54, 63, 68,135,193, 62,196,226, 57, 63,114, 54,174, 62,
- 85,123, 60, 63,253,230,198, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 64, 63,
-211,111,180, 62, 85,123, 60, 63,253,230,198, 62,196,226, 57, 63,114, 54,174, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0,196,226, 57, 63,114, 54,174, 62, 86,144, 54, 63, 68,135,193, 62, 58,136, 51, 63, 90,150,169, 62,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 27, 66, 48, 63,173,208,189, 62, 58,136, 51, 63,
- 90,150,169, 62, 86,144, 54, 63, 68,135,193, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
- 86,144, 54, 63, 68,135,193, 62, 80, 80, 51, 63,192,159,213, 62, 27, 66, 48, 63,173,208,189, 62, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 38, 82, 45, 63, 55, 92,210, 62, 27, 66, 48, 63,173,208,189, 62, 80, 80, 51, 63,
-192,159,213, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 80, 80, 51, 63,192,159,213, 62,
- 86,144, 54, 63, 68,135,193, 62,144, 61, 57, 63, 19,196,217, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0,128, 46, 54, 63, 75,207,236, 62, 63, 51, 51, 63, 0, 0, 0, 63,204, 80, 48, 63,218, 32,233, 62, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,204, 80, 48, 63,218, 32,233, 62, 80, 80, 51, 63,192,159,213, 62,
-128, 46, 54, 63, 75,207,236, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,144, 61, 57, 63,
- 19,196,217, 62,128, 46, 54, 63, 75,207,236, 62, 80, 80, 51, 63,192,159,213, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0, 80, 80, 51, 63,192,159,213, 62,204, 80, 48, 63,218, 32,233, 62, 38, 82, 45, 63, 55, 92,210, 62,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 27, 66, 48, 63,173,208,189, 62, 38, 82, 45, 63,
- 55, 92,210, 62,118, 17, 42, 63, 72,220,187, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
-118, 17, 42, 63, 72,220,187, 62, 26, 5, 45, 63,117,190,166, 62, 27, 66, 48, 63,173,208,189, 62, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 58,136, 51, 63, 90,150,169, 62, 27, 66, 48, 63,173,208,189, 62, 26, 5, 45, 63,
-117,190,166, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 26, 5, 45, 63,117,190,166, 62,
-118, 17, 42, 63, 72,220,187, 62,107,102, 38, 63,201,199,165, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0,255, 55, 48, 63, 94,152, 9, 63,237, 40, 45, 63,252, 29, 19, 63,242,186, 41, 63,112,150, 9, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,242,186, 41, 63,112,150, 9, 63,215,204, 44, 63, 23,252,255, 62,
-255, 55, 48, 63, 94,152, 9, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 63, 51, 51, 63,
- 0, 0, 0, 63,255, 55, 48, 63, 94,152, 9, 63,215,204, 44, 63, 23,252,255, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0,215,204, 44, 63, 23,252,255, 62,242,186, 41, 63,112,150, 9, 63,109,102, 38, 63, 0, 0, 0, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,235, 17, 35, 63,112,150, 9, 63,109,102, 38, 63,
- 0, 0, 0, 63,242,186, 41, 63,112,150, 9, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
-242,186, 41, 63,112,150, 9, 63,113,102, 38, 63,219, 98, 19, 63,235, 17, 35, 63,112,150, 9, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,245,163, 31, 63,253, 29, 19, 63,235, 17, 35, 63,112,150, 9, 63,113,102, 38, 63,
-219, 98, 19, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,113,102, 38, 63,219, 98, 19, 63,
-242,186, 41, 63,112,150, 9, 63,237, 40, 45, 63,252, 29, 19, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 38,235, 41, 63,141,140, 28, 63,117,102, 38, 63, 45,200, 37, 63,192,225, 34, 63,142,140, 28, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,192,225, 34, 63,142,140, 28, 63,113,102, 38, 63,219, 98, 19, 63,
- 38,235, 41, 63,141,140, 28, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,237, 40, 45, 63,
-252, 29, 19, 63, 38,235, 41, 63,141,140, 28, 63,113,102, 38, 63,219, 98, 19, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0,113,102, 38, 63,219, 98, 19, 63,192,225, 34, 63,142,140, 28, 63,245,163, 31, 63,253, 29, 19, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,235, 17, 35, 63,112,150, 9, 63,245,163, 31, 63,
-253, 29, 19, 63,223,148, 28, 63, 94,152, 9, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
-223,148, 28, 63, 94,152, 9, 63, 2, 0, 32, 63, 24,252,255, 62,235, 17, 35, 63,112,150, 9, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,109,102, 38, 63, 0, 0, 0, 63,235, 17, 35, 63,112,150, 9, 63, 2, 0, 32, 63,
- 24,252,255, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 2, 0, 32, 63, 24,252,255, 62,
-223,148, 28, 63, 94,152, 9, 63,155,153, 25, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0,188,129,107, 63, 66, 45,128, 62,235, 71, 99, 63,222, 76,120, 62, 94, 37,106, 63, 84, 97, 83, 62, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 94, 37,106, 63, 84, 97, 83, 62, 65, 51,115, 63,248,151, 97, 62,
-188,129,107, 63, 66, 45,128, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 65, 51,115, 63,
-151, 83,135, 62,188,129,107, 63, 66, 45,128, 62, 65, 51,115, 63,248,151, 97, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0, 65, 51,115, 63,248,151, 97, 62, 94, 37,106, 63, 84, 97, 83, 62, 65, 51,115, 63, 90,111, 52, 62,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,188,129,107, 63, 66, 45,128, 62, 65, 51,115, 63,
-151, 83,135, 62,142,123,108, 63,169,144,151, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
-142,123,108, 63,169,144,151, 62,231, 50,101, 63, 17,201,146, 62,188,129,107, 63, 66, 45,128, 62, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,235, 71, 99, 63,222, 76,120, 62,188,129,107, 63, 66, 45,128, 62,231, 50,101, 63,
- 17,201,146, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,231, 50,101, 63, 17,201,146, 62,
-142,123,108, 63,169,144,151, 62,106,187,102, 63, 54,150,169, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 71, 56, 96, 63, 99,190,166, 62,149,153, 89, 63,201,199,165, 62, 22,238, 93, 63,243,101,144, 62, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 22,238, 93, 63,243,101,144, 62,231, 50,101, 63, 17,201,146, 62,
- 71, 56, 96, 63, 99,190,166, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,106,187,102, 63,
- 54,150,169, 62, 71, 56, 96, 63, 99,190,166, 62,231, 50,101, 63, 17,201,146, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0,231, 50,101, 63, 17,201,146, 62, 22,238, 93, 63,243,101,144, 62,235, 71, 99, 63,222, 76,120, 62,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,249, 21,109, 63, 65, 54,174, 62,106,187,102, 63,
- 54,150,169, 62,142,123,108, 63,169,144,151, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
-142,123,108, 63,169,144,151, 62, 65, 51,115, 63, 93,231,157, 62,249, 21,109, 63, 65, 54,174, 62, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 65, 51,115, 63,160,111,180, 62,249, 21,109, 63, 65, 54,174, 62, 65, 51,115, 63,
- 93,231,157, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 65, 51,115, 63, 93,231,157, 62,
-142,123,108, 63,169,144,151, 62, 65, 51,115, 63,151, 83,135, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0,149,153, 89, 63, 79,162,115, 62,235, 71, 99, 63,222, 76,120, 62, 22,238, 93, 63,243,101,144, 62, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 22,238, 93, 63,243,101,144, 62, 21, 69, 85, 63, 3,102,144, 62,
-149,153, 89, 63, 79,162,115, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 68,235, 79, 63,
- 37, 77,120, 62,149,153, 89, 63, 79,162,115, 62, 21, 69, 85, 63, 3,102,144, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0, 21, 69, 85, 63, 3,102,144, 62, 22,238, 93, 63,243,101,144, 62,149,153, 89, 63,201,199,165, 62,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,149,153, 89, 63, 79,162,115, 62, 68,235, 79, 63,
- 37, 77,120, 62, 24,186, 83, 63,245,176, 70, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
- 24,186, 83, 63,245,176, 70, 62, 22,121, 95, 63,204,176, 70, 62,149,153, 89, 63, 79,162,115, 62, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,235, 71, 99, 63,222, 76,120, 62,149,153, 89, 63, 79,162,115, 62, 22,121, 95, 63,
-204,176, 70, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 22,121, 95, 63,204,176, 70, 62,
- 24,186, 83, 63,245,176, 70, 62,152,153, 89, 63,198, 31, 23, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 61,119,103, 63,179,253, 30, 62, 65, 51,115, 63, 90,111, 52, 62, 94, 37,106, 63, 84, 97, 83, 62, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 94, 37,106, 63, 84, 97, 83, 62, 22,121, 95, 63,204,176, 70, 62,
- 61,119,103, 63,179,253, 30, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,152,153, 89, 63,
-198, 31, 23, 62, 61,119,103, 63,179,253, 30, 62, 22,121, 95, 63,204,176, 70, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0, 22,121, 95, 63,204,176, 70, 62, 94, 37,106, 63, 84, 97, 83, 62,235, 71, 99, 63,222, 76,120, 62,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,248,187, 75, 63,241,253, 30, 62,152,153, 89, 63,
-198, 31, 23, 62, 24,186, 83, 63,245,176, 70, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
- 24,186, 83, 63,245,176, 70, 62,214, 13, 73, 63,181, 97, 83, 62,248,187, 75, 63,241,253, 30, 62, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 64, 63,202,111, 52, 62,248,187, 75, 63,241,253, 30, 62,214, 13, 73, 63,
-181, 97, 83, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,214, 13, 73, 63,181, 97, 83, 62,
- 24,186, 83, 63,245,176, 70, 62, 68,235, 79, 63, 37, 77,120, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0,152,153, 89, 63,111, 41,147, 61, 0, 0, 64, 63,195,111,180, 61, 0, 0, 64, 63,111, 65, 52, 61, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 64, 63,111, 65, 52, 61, 38, 49,117, 63,225, 64, 52, 61,
-152,153, 89, 63,111, 41,147, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 65, 51,115, 63,
- 83,111,180, 61,152,153, 89, 63,111, 41,147, 61, 38, 49,117, 63,225, 64, 52, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0, 38, 49,117, 63,225, 64, 52, 61, 0, 0, 64, 63,111, 65, 52, 61,208,222,121, 63,102, 9,239,178,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,152,153, 89, 63,111, 41,147, 61, 65, 51,115, 63,
- 83,111,180, 61,172, 51, 99, 63, 48, 46,231, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
-172, 51, 99, 63, 48, 46,231, 61,135,255, 79, 63,120, 46,231, 61,152,153, 89, 63,111, 41,147, 61, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 64, 63,195,111,180, 61,152,153, 89, 63,111, 41,147, 61,135,255, 79, 63,
-120, 46,231, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,135,255, 79, 63,120, 46,231, 61,
-172, 51, 99, 63, 48, 46,231, 61,152,153, 89, 63,198, 31, 23, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0,248,187, 75, 63,241,253, 30, 62, 0, 0, 64, 63,202,111, 52, 62, 0, 0, 64, 63, 24, 71, 7, 62, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 64, 63, 24, 71, 7, 62,135,255, 79, 63,120, 46,231, 61,
-248,187, 75, 63,241,253, 30, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,152,153, 89, 63,
-198, 31, 23, 62,248,187, 75, 63,241,253, 30, 62,135,255, 79, 63,120, 46,231, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0,135,255, 79, 63,120, 46,231, 61, 0, 0, 64, 63, 24, 71, 7, 62, 0, 0, 64, 63,195,111,180, 61,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 61,119,103, 63,179,253, 30, 62,152,153, 89, 63,
-198, 31, 23, 62,172, 51, 99, 63, 48, 46,231, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
-172, 51, 99, 63, 48, 46,231, 61, 66, 51,115, 63,199, 70, 7, 62, 61,119,103, 63,179,253, 30, 62, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 65, 51,115, 63, 90,111, 52, 62, 61,119,103, 63,179,253, 30, 62, 66, 51,115, 63,
-199, 70, 7, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 66, 51,115, 63,199, 70, 7, 62,
-172, 51, 99, 63, 48, 46,231, 61, 65, 51,115, 63, 83,111,180, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0,122,177, 71, 63,120, 45,128, 62, 0, 0, 64, 63,218, 83,135, 62, 0, 0, 64, 63,115,152, 97, 62, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 64, 63,115,152, 97, 62,214, 13, 73, 63,181, 97, 83, 62,
-122,177, 71, 63,120, 45,128, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 68,235, 79, 63,
- 37, 77,120, 62,122,177, 71, 63,120, 45,128, 62,214, 13, 73, 63,181, 97, 83, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0,214, 13, 73, 63,181, 97, 83, 62, 0, 0, 64, 63,115,152, 97, 62, 0, 0, 64, 63,202,111, 52, 62,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,122,177, 71, 63,120, 45,128, 62, 68,235, 79, 63,
- 37, 77,120, 62, 72, 0, 78, 63, 52,201,146, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
- 72, 0, 78, 63, 52,201,146, 62,169,183, 70, 63,219,144,151, 62,122,177, 71, 63,120, 45,128, 62, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 64, 63,218, 83,135, 62,122,177, 71, 63,120, 45,128, 62,169,183, 70, 63,
-219,144,151, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,169,183, 70, 63,219,144,151, 62,
- 72, 0, 78, 63, 52,201,146, 62,198,119, 76, 63, 90,150,169, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 61, 29, 70, 63,114, 54,174, 62, 0, 0, 64, 63,211,111,180, 62, 0, 0, 64, 63,162,231,157, 62, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 64, 63,162,231,157, 62,169,183, 70, 63,219,144,151, 62,
- 61, 29, 70, 63,114, 54,174, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,198,119, 76, 63,
- 90,150,169, 62, 61, 29, 70, 63,114, 54,174, 62,169,183, 70, 63,219,144,151, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0,169,183, 70, 63,219,144,151, 62, 0, 0, 64, 63,162,231,157, 62, 0, 0, 64, 63,218, 83,135, 62,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,230,250, 82, 63,117,190,166, 62,198,119, 76, 63,
- 90,150,169, 62, 72, 0, 78, 63, 52,201,146, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
- 72, 0, 78, 63, 52,201,146, 62, 21, 69, 85, 63, 3,102,144, 62,230,250, 82, 63,117,190,166, 62, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,149,153, 89, 63,201,199,165, 62,230,250, 82, 63,117,190,166, 62, 21, 69, 85, 63,
- 3,102,144, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 21, 69, 85, 63, 3,102,144, 62,
- 72, 0, 78, 63, 52,201,146, 62, 68,235, 79, 63, 37, 77,120, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0,179,167,245, 61, 72, 45,128, 62, 94,217,179, 61,222, 76,120, 62,202,196,234, 61,100, 97, 83, 62, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,202,196,234, 61,100, 97, 83, 62,212,153, 25, 62, 2,152, 97, 62,
-179,167,245, 61, 72, 45,128, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,214,153, 25, 62,
-156, 83,135, 62,179,167,245, 61, 72, 45,128, 62,212,153, 25, 62, 2,152, 97, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0,212,153, 25, 62, 2,152, 97, 62,202,196,234, 61,100, 97, 83, 62,214,153, 25, 62,106,111, 52, 62,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,179,167,245, 61, 72, 45,128, 62,214,153, 25, 62,
-156, 83,135, 62, 62,118,253, 61,174,144,151, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
- 62,118,253, 61,174,144,151, 62, 53, 49,195, 61, 17,201,146, 62,179,167,245, 61, 72, 45,128, 62, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 94,217,179, 61,222, 76,120, 62,179,167,245, 61, 72, 45,128, 62, 53, 49,195, 61,
- 17,201,146, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 53, 49,195, 61, 17,201,146, 62,
- 62,118,253, 61,174,144,151, 62, 70,117,207, 61, 54,150,169, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 79, 92,155, 61, 91,190,166, 62,194,205, 76, 61,186,199,165, 62,212, 10,137, 61,238,101,144, 62, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,212, 10,137, 61,238,101,144, 62, 53, 49,195, 61, 17,201,146, 62,
- 79, 92,155, 61, 91,190,166, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 70,117,207, 61,
- 54,150,169, 62, 79, 92,155, 61, 91,190,166, 62, 53, 49,195, 61, 17,201,146, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0, 53, 49,195, 61, 17,201,146, 62,212, 10,137, 61,238,101,144, 62, 94,217,179, 61,222, 76,120, 62,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,204, 36, 1, 62, 70, 54,174, 62, 70,117,207, 61,
- 54,150,169, 62, 62,118,253, 61,174,144,151, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
- 62,118,253, 61,174,144,151, 62,213,153, 25, 62,100,231,157, 62,204, 36, 1, 62, 70, 54,174, 62, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,214,153, 25, 62,165,111,180, 62,204, 36, 1, 62, 70, 54,174, 62,213,153, 25, 62,
-100,231,157, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,213,153, 25, 62,100,231,157, 62,
- 62,118,253, 61,174,144,151, 62,214,153, 25, 62,156, 83,135, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0,188,205, 76, 61, 53,162,115, 62, 94,217,179, 61,222, 76,120, 62,212, 10,137, 61,238,101,144, 62, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,212, 10,137, 61,238,101,144, 62,207,133, 7, 61,236,101,144, 62,
-188,205, 76, 61, 53,162,115, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,255,162, 71, 60,
-216, 76,120, 62,188,205, 76, 61, 53,162,115, 62,207,133, 7, 61,236,101,144, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0,207,133, 7, 61,236,101,144, 62,212, 10,137, 61,238,101,144, 62,194,205, 76, 61,186,199,165, 62,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,188,205, 76, 61, 53,162,115, 62,255,162, 71, 60,
-216, 76,120, 62,190,171,221, 60,194,176, 70, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
-190,171,221, 60,194,176, 70, 62,194, 98,149, 61,194,176, 70, 62,188,205, 76, 61, 53,162,115, 62, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 94,217,179, 61,222, 76,120, 62,188,205, 76, 61, 53,162,115, 62,194, 98,149, 61,
-194,176, 70, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,194, 98,149, 61,194,176, 70, 62,
-190,171,221, 60,194,176, 70, 62,193,205, 76, 61,168, 31, 23, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0,198, 83,213, 61,179,253, 30, 62,214,153, 25, 62,106,111, 52, 62,202,196,234, 61,100, 97, 83, 62, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,202,196,234, 61,100, 97, 83, 62,194, 98,149, 61,194,176, 70, 62,
-198, 83,213, 61,179,253, 30, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,193,205, 76, 61,
-168, 31, 23, 62,198, 83,213, 61,179,253, 30, 62,194, 98,149, 61,194,176, 70, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0,194, 98,149, 61,194,176, 70, 62,202,196,234, 61,100, 97, 83, 62, 94,217,179, 61,222, 76,120, 62,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 59,239,126, 63,174,253, 30, 62,154,105,131, 63,
-168, 31, 23, 62,175,118,131, 63,194,176, 70, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
-175,118,131, 63,194,176, 70, 62, 30, 65,124, 63, 90, 97, 83, 62, 59,239,126, 63,174,253, 30, 62, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 65, 51,115, 63, 90,111, 52, 62, 59,239,126, 63,174,253, 30, 62, 30, 65,124, 63,
- 90, 97, 83, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 30, 65,124, 63, 90, 97, 83, 62,
-175,118,131, 63,194,176, 70, 62, 70,143,129, 63,216, 76,120, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0,156,105,131, 63,101, 41,147, 61, 65, 51,115, 63, 83,111,180, 61, 38, 49,117, 63,225, 64, 52, 61, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 38, 49,117, 63,225, 64, 52, 61,232,148,135, 63,144,158,125, 60,
-156,105,131, 63,101, 41,147, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,215,153, 25, 62,
-104,111,180, 61,122,245,128, 61,101, 41,147, 61,224,153, 25, 62,225, 64, 52, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0,232,148,135, 63,144,158,125, 60, 38, 49,117, 63,225, 64, 52, 61,208,222,121, 63,102, 9,239,178,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,122,245,128, 61,101, 41,147, 61,215,153, 25, 62,
-104,111,180, 61, 89, 55,179, 61, 38, 46,231, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
- 89, 55,179, 61, 38, 46,231, 61, 96,147,208, 60, 48, 46,231, 61,122,245,128, 61,101, 41,147, 61, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 65, 51,115, 63, 83,111,180, 61,156,105,131, 63,101, 41,147, 61,102,153,129, 63,
- 48, 46,231, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 96,147,208, 60, 48, 46,231, 61,
- 89, 55,179, 61, 38, 46,231, 61,193,205, 76, 61,168, 31, 23, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 59,239,126, 63,174,253, 30, 62, 65, 51,115, 63, 90,111, 52, 62, 66, 51,115, 63,199, 70, 7, 62, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 66, 51,115, 63,199, 70, 7, 62,102,153,129, 63, 48, 46,231, 61,
- 59,239,126, 63,174,253, 30, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,154,105,131, 63,
-168, 31, 23, 62, 59,239,126, 63,174,253, 30, 62,102,153,129, 63, 48, 46,231, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0,102,153,129, 63, 48, 46,231, 61, 66, 51,115, 63,199, 70, 7, 62, 65, 51,115, 63, 83,111,180, 61,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,198, 83,213, 61,179,253, 30, 62,193,205, 76, 61,
-168, 31, 23, 62, 89, 55,179, 61, 38, 46,231, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
- 89, 55,179, 61, 38, 46,231, 61,217,153, 25, 62,204, 70, 7, 62,198, 83,213, 61,179,253, 30, 62, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,214,153, 25, 62,106,111, 52, 62,198, 83,213, 61,179,253, 30, 62,217,153, 25, 62,
-204, 70, 7, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,217,153, 25, 62,204, 70, 7, 62,
- 89, 55,179, 61, 38, 46,231, 61,215,153, 25, 62,104,111,180, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0,192,228,122, 63, 66, 45,128, 62, 65, 51,115, 63,151, 83,135, 62, 65, 51,115, 63,248,151, 97, 62, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 65, 51,115, 63,248,151, 97, 62, 30, 65,124, 63, 90, 97, 83, 62,
-192,228,122, 63, 66, 45,128, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 70,143,129, 63,
-216, 76,120, 62,192,228,122, 63, 66, 45,128, 62, 30, 65,124, 63, 90, 97, 83, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0, 30, 65,124, 63, 90, 97, 83, 62, 65, 51,115, 63,248,151, 97, 62, 65, 51,115, 63, 90,111, 52, 62,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,192,228,122, 63, 66, 45,128, 62, 70,143,129, 63,
-216, 76,120, 62,201,153,128, 63, 14,201,146, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
-201,153,128, 63, 14,201,146, 62,239,234,121, 63,169,144,151, 62,192,228,122, 63, 66, 45,128, 62, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 65, 51,115, 63,151, 83,135, 62,192,228,122, 63, 66, 45,128, 62,239,234,121, 63,
-169,144,151, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,239,234,121, 63,169,144,151, 62,
-201,153,128, 63, 14,201,146, 62, 15,171,127, 63, 52,150,169, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0,133, 80,121, 63, 65, 54,174, 62, 65, 51,115, 63,160,111,180, 62, 65, 51,115, 63, 93,231,157, 62, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 65, 51,115, 63, 93,231,157, 62,239,234,121, 63,169,144,151, 62,
-133, 80,121, 63, 65, 54,174, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 15,171,127, 63,
- 52,150,169, 62,133, 80,121, 63, 65, 54,174, 62,239,234,121, 63,169,144,151, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0,239,234,121, 63,169,144,151, 62, 65, 51,115, 63, 93,231,157, 62, 65, 51,115, 63,151, 83,135, 62,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 23, 23,131, 63, 89,190,166, 62, 15,171,127, 63,
- 52,150,169, 62,201,153,128, 63, 14,201,146, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
-136,200,153, 59, 14,201,146, 62,207,133, 7, 61,236,101,144, 62,195,197,197, 60, 89,190,166, 62, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,194,205, 76, 61,186,199,165, 62,195,197,197, 60, 89,190,166, 62,207,133, 7, 61,
-236,101,144, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,207,133, 7, 61,236,101,144, 62,
-136,200,153, 59, 14,201,146, 62,255,162, 71, 60,216, 76,120, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 32,208,163, 62, 79, 45,128, 62,147, 92,147, 62,252, 76,120, 62,102, 23,161, 62,115, 97, 83, 62, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,102, 23,161, 62,115, 97, 83, 62, 22, 51,179, 62, 2,152, 97, 62,
- 32,208,163, 62, 79, 45,128, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 21, 51,179, 62,
-156, 83,135, 62, 32,208,163, 62, 79, 45,128, 62, 22, 51,179, 62, 2,152, 97, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0, 22, 51,179, 62, 2,152, 97, 62,102, 23,161, 62,115, 97, 83, 62, 21, 51,179, 62,101,111, 52, 62,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 32,208,163, 62, 79, 45,128, 62, 21, 51,179, 62,
-156, 83,135, 62,194,195,165, 62,181,144,151, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
-194,195,165, 62,181,144,151, 62,134, 50,151, 62, 29,201,146, 62, 32,208,163, 62, 79, 45,128, 62, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,147, 92,147, 62,252, 76,120, 62, 32,208,163, 62, 79, 45,128, 62,134, 50,151, 62,
- 29,201,146, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,134, 50,151, 62, 29,201,146, 62,
-194,195,165, 62,181,144,151, 62,137, 67,154, 62, 70,150,169, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 82, 61,141, 62,112,190,166, 62, 0, 0,128, 62,206,199,165, 62,247,168,136, 62, 3,102,144, 62, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,247,168,136, 62, 3,102,144, 62,134, 50,151, 62, 29,201,146, 62,
- 82, 61,141, 62,112,190,166, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,137, 67,154, 62,
- 70,150,169, 62, 82, 61,141, 62,112,190,166, 62,134, 50,151, 62, 29,201,146, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0,134, 50,151, 62, 29,201,146, 62,247,168,136, 62, 3,102,144, 62,147, 92,147, 62,252, 76,120, 62,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,150,248,166, 62, 78, 54,174, 62,137, 67,154, 62,
- 70,150,169, 62,194,195,165, 62,181,144,151, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
-194,195,165, 62,181,144,151, 62, 21, 51,179, 62, 98,231,157, 62,150,248,166, 62, 78, 54,174, 62, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 21, 51,179, 62,165,111,180, 62,150,248,166, 62, 78, 54,174, 62, 21, 51,179, 62,
- 98,231,157, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 21, 51,179, 62, 98,231,157, 62,
-194,195,165, 62,181,144,151, 62, 21, 51,179, 62,156, 83,135, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,128, 62, 89,162,115, 62,147, 92,147, 62,252, 76,120, 62,247,168,136, 62, 3,102,144, 62, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,247,168,136, 62, 3,102,144, 62, 18,174,110, 62, 3,102,144, 62,
- 0, 0,128, 62, 89,162,115, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,217, 70, 89, 62,
-252, 76,120, 62, 0, 0,128, 62, 89,162,115, 62, 18,174,110, 62, 3,102,144, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0, 18,174,110, 62, 3,102,144, 62,247,168,136, 62, 3,102,144, 62, 0, 0,128, 62,206,199,165, 62,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0,128, 62, 89,162,115, 62,217, 70, 89, 62,
-252, 76,120, 62, 30,130,104, 62,230,176, 70, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
- 30,130,104, 62,230,176, 70, 62,241,190,139, 62,230,176, 70, 62, 0, 0,128, 62, 89,162,115, 62, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,147, 92,147, 62,252, 76,120, 62, 0, 0,128, 62, 89,162,115, 62,241,190,139, 62,
-230,176, 70, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,241,190,139, 62,230,176, 70, 62,
- 30,130,104, 62,230,176, 70, 62, 0, 0,128, 62,208, 31, 23, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 41,187,155, 62,205,253, 30, 62, 21, 51,179, 62,101,111, 52, 62,102, 23,161, 62,115, 97, 83, 62, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,102, 23,161, 62,115, 97, 83, 62,241,190,139, 62,230,176, 70, 62,
- 41,187,155, 62,205,253, 30, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0,128, 62,
-208, 31, 23, 62, 41,187,155, 62,205,253, 30, 62,241,190,139, 62,230,176, 70, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0,241,190,139, 62,230,176, 70, 62,102, 23,161, 62,115, 97, 83, 62,147, 92,147, 62,252, 76,120, 62,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,174,137, 72, 62,205,253, 30, 62, 0, 0,128, 62,
-208, 31, 23, 62, 30,130,104, 62,230,176, 70, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
- 30,130,104, 62,230,176, 70, 62, 51,209, 61, 62,115, 97, 83, 62,174,137, 72, 62,205,253, 30, 62, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,214,153, 25, 62,106,111, 52, 62,174,137, 72, 62,205,253, 30, 62, 51,209, 61, 62,
-115, 97, 83, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 51,209, 61, 62,115, 97, 83, 62,
- 30,130,104, 62,230,176, 70, 62,217, 70, 89, 62,252, 76,120, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0,255,255,127, 62,141, 41,147, 61,215,153, 25, 62,104,111,180, 61,224,153, 25, 62,225, 64, 52, 61, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,224,153, 25, 62,225, 64, 52, 61, 15, 51,179, 62,225, 64, 52, 61,
-255,255,127, 62,141, 41,147, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 20, 51,179, 62,
-104,111,180, 61,255,255,127, 62,141, 41,147, 61, 15, 51,179, 62,225, 64, 52, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0, 15, 51,179, 62,225, 64, 52, 61,224,153, 25, 62,225, 64, 52, 61,144,175,161, 62,102, 9,239,178,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,255,255,127, 62,141, 41,147, 61, 20, 51,179, 62,
-104,111,180, 61, 12, 52,147, 62,109, 46,231, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
- 12, 52,147, 62,109, 46,231, 61,231,151, 89, 62,109, 46,231, 61,255,255,127, 62,141, 41,147, 61, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,215,153, 25, 62,104,111,180, 61,255,255,127, 62,141, 41,147, 61,231,151, 89, 62,
-109, 46,231, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,231,151, 89, 62,109, 46,231, 61,
- 12, 52,147, 62,109, 46,231, 61, 0, 0,128, 62,208, 31, 23, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0,174,137, 72, 62,205,253, 30, 62,214,153, 25, 62,106,111, 52, 62,217,153, 25, 62,204, 70, 7, 62, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,217,153, 25, 62,204, 70, 7, 62,231,151, 89, 62,109, 46,231, 61,
-174,137, 72, 62,205,253, 30, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0,128, 62,
-208, 31, 23, 62,174,137, 72, 62,205,253, 30, 62,231,151, 89, 62,109, 46,231, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0,231,151, 89, 62,109, 46,231, 61,217,153, 25, 62,204, 70, 7, 62,215,153, 25, 62,104,111,180, 61,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 41,187,155, 62,205,253, 30, 62, 0, 0,128, 62,
-208, 31, 23, 62, 12, 52,147, 62,109, 46,231, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
- 12, 52,147, 62,109, 46,231, 61, 19, 51,179, 62,204, 70, 7, 62, 41,187,155, 62,205,253, 30, 62, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 21, 51,179, 62,101,111, 52, 62, 41,187,155, 62,205,253, 30, 62, 19, 51,179, 62,
-204, 70, 7, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 19, 51,179, 62,204, 70, 7, 62,
- 12, 52,147, 62,109, 46,231, 61, 20, 51,179, 62,104,111,180, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0,192, 95, 56, 62, 79, 45,128, 62,214,153, 25, 62,156, 83,135, 62,212,153, 25, 62, 2,152, 97, 62, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,212,153, 25, 62, 2,152, 97, 62, 51,209, 61, 62,115, 97, 83, 62,
-192, 95, 56, 62, 79, 45,128, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,217, 70, 89, 62,
-252, 76,120, 62,192, 95, 56, 62, 79, 45,128, 62, 51,209, 61, 62,115, 97, 83, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0, 51,209, 61, 62,115, 97, 83, 62,212,153, 25, 62, 2,152, 97, 62,214,153, 25, 62,106,111, 52, 62,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,192, 95, 56, 62, 79, 45,128, 62,217, 70, 89, 62,
-252, 76,120, 62,245,154, 81, 62, 29,201,146, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
-245,154, 81, 62, 29,201,146, 62,125,120, 52, 62,181,144,151, 62,192, 95, 56, 62, 79, 45,128, 62, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,214,153, 25, 62,156, 83,135, 62,192, 95, 56, 62, 79, 45,128, 62,125,120, 52, 62,
-181,144,151, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,125,120, 52, 62,181,144,151, 62,
-245,154, 81, 62, 29,201,146, 62,239,120, 75, 62, 70,150,169, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0,213, 14, 50, 62, 78, 54,174, 62,214,153, 25, 62,165,111,180, 62,213,153, 25, 62,100,231,157, 62, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,213,153, 25, 62,100,231,157, 62,125,120, 52, 62,181,144,151, 62,
-213, 14, 50, 62, 78, 54,174, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,239,120, 75, 62,
- 70,150,169, 62,213, 14, 50, 62, 78, 54,174, 62,125,120, 52, 62,181,144,151, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0,125,120, 52, 62,181,144,151, 62,213,153, 25, 62,100,231,157, 62,214,153, 25, 62,156, 83,135, 62,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 91,133,101, 62,112,190,166, 62,239,120, 75, 62,
- 70,150,169, 62,245,154, 81, 62, 29,201,146, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
-245,154, 81, 62, 29,201,146, 62, 18,174,110, 62, 3,102,144, 62, 91,133,101, 62,112,190,166, 62, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0,128, 62,206,199,165, 62, 91,133,101, 62,112,190,166, 62, 18,174,110, 62,
- 3,102,144, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 18,174,110, 62, 3,102,144, 62,
-245,154, 81, 62, 29,201,146, 62,217, 70, 89, 62,252, 76,120, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 64, 27, 5, 63, 66, 45,128, 62,232,194,249, 62,216, 76,120, 62,226,190, 3, 63, 90, 97, 83, 62, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,226,190, 3, 63, 90, 97, 83, 62,191,204, 12, 63,248,151, 97, 62,
- 64, 27, 5, 63, 66, 45,128, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,191,204, 12, 63,
-149, 83,135, 62, 64, 27, 5, 63, 66, 45,128, 62,191,204, 12, 63,248,151, 97, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0,191,204, 12, 63,248,151, 97, 62,226,190, 3, 63, 90, 97, 83, 62,191,204, 12, 63, 90,111, 52, 62,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 64, 27, 5, 63, 66, 45,128, 62,191,204, 12, 63,
-149, 83,135, 62, 17, 21, 6, 63,169,144,151, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
- 17, 21, 6, 63,169,144,151, 62,222,152,253, 62, 14,201,146, 62, 64, 27, 5, 63, 66, 45,128, 62, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,232,194,249, 62,216, 76,120, 62, 64, 27, 5, 63, 66, 45,128, 62,222,152,253, 62,
- 14,201,146, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,222,152,253, 62, 14,201,146, 62,
- 17, 21, 6, 63,169,144,151, 62,241, 84, 0, 63, 52,150,169, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0,164,163,243, 62, 89,190,166, 62, 72,102,230, 62,183,199,165, 62, 70, 15,239, 62,233,101,144, 62, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 70, 15,239, 62,233,101,144, 62,222,152,253, 62, 14,201,146, 62,
-164,163,243, 62, 89,190,166, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,241, 84, 0, 63,
- 52,150,169, 62,164,163,243, 62, 89,190,166, 62,222,152,253, 62, 14,201,146, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0,222,152,253, 62, 14,201,146, 62, 70, 15,239, 62,233,101,144, 62,232,194,249, 62,216, 76,120, 62,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,123,175, 6, 63, 65, 54,174, 62,241, 84, 0, 63,
- 52,150,169, 62, 17, 21, 6, 63,169,144,151, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
- 17, 21, 6, 63,169,144,151, 62,191,204, 12, 63, 90,231,157, 62,123,175, 6, 63, 65, 54,174, 62, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,191,204, 12, 63,160,111,180, 62,123,175, 6, 63, 65, 54,174, 62,191,204, 12, 63,
- 90,231,157, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,191,204, 12, 63, 90,231,157, 62,
- 17, 21, 6, 63,169,144,151, 62,191,204, 12, 63,149, 83,135, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 72,102,230, 62, 53,162,115, 62,232,194,249, 62,216, 76,120, 62, 70, 15,239, 62,233,101,144, 62, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 70, 15,239, 62,233,101,144, 62, 75,189,221, 62,238,101,144, 62,
- 72,102,230, 62, 53,162,115, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,168, 9,211, 62,
-222, 76,120, 62, 72,102,230, 62, 53,162,115, 62, 75,189,221, 62,238,101,144, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0, 75,189,221, 62,238,101,144, 62, 70, 15,239, 62,233,101,144, 62, 72,102,230, 62,183,199,165, 62,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 72,102,230, 62, 53,162,115, 62,168, 9,211, 62,
-222, 76,120, 62, 80,167,218, 62,194,176, 70, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
- 80,167,218, 62,194,176, 70, 62, 68, 37,242, 62,194,176, 70, 62, 72,102,230, 62, 53,162,115, 62, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,232,194,249, 62,216, 76,120, 62, 72,102,230, 62, 53,162,115, 62, 68, 37,242, 62,
-194,176, 70, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 68, 37,242, 62,194,176, 70, 62,
- 80,167,218, 62,194,176, 70, 62, 72,102,230, 62,168, 31, 23, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0,197, 16, 1, 63,174,253, 30, 62,191,204, 12, 63, 90,111, 52, 62,226,190, 3, 63, 90, 97, 83, 62, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,226,190, 3, 63, 90, 97, 83, 62, 68, 37,242, 62,194,176, 70, 62,
-197, 16, 1, 63,174,253, 30, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 72,102,230, 62,
-168, 31, 23, 62,197, 16, 1, 63,174,253, 30, 62, 68, 37,242, 62,194,176, 70, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0, 68, 37,242, 62,194,176, 70, 62,226,190, 3, 63, 90, 97, 83, 62,232,194,249, 62,216, 76,120, 62,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 14,171,202, 62,179,253, 30, 62, 72,102,230, 62,
-168, 31, 23, 62, 80,167,218, 62,194,176, 70, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
- 80,167,218, 62,194,176, 70, 62,205, 78,197, 62, 95, 97, 83, 62, 14,171,202, 62,179,253, 30, 62, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 21, 51,179, 62,101,111, 52, 62, 14,171,202, 62,179,253, 30, 62,205, 78,197, 62,
- 95, 97, 83, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,205, 78,197, 62, 95, 97, 83, 62,
- 80,167,218, 62,194,176, 70, 62,168, 9,211, 62,222, 76,120, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 63,102,230, 62,101, 41,147, 61, 20, 51,179, 62,104,111,180, 61, 15, 51,179, 62,225, 64, 52, 61, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 15, 51,179, 62,225, 64, 52, 61,189,204, 12, 63,225, 64, 52, 61,
- 63,102,230, 62,101, 41,147, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,191,204, 12, 63,
- 83,111,180, 61, 63,102,230, 62,101, 41,147, 61,189,204, 12, 63,225, 64, 52, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0,189,204, 12, 63,225, 64, 52, 61, 15, 51,179, 62,225, 64, 52, 61,144,175,161, 62,102, 9,239,178,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 63,102,230, 62,101, 41,147, 61,191,204, 12, 63,
- 83,111,180, 61,104,154,249, 62, 48, 46,231, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
-104,154,249, 62, 48, 46,231, 61, 42, 50,211, 62, 48, 46,231, 61, 63,102,230, 62,101, 41,147, 61, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 20, 51,179, 62,104,111,180, 61, 63,102,230, 62,101, 41,147, 61, 42, 50,211, 62,
- 48, 46,231, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 42, 50,211, 62, 48, 46,231, 61,
-104,154,249, 62, 48, 46,231, 61, 72,102,230, 62,168, 31, 23, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 14,171,202, 62,179,253, 30, 62, 21, 51,179, 62,101,111, 52, 62, 19, 51,179, 62,204, 70, 7, 62, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 19, 51,179, 62,204, 70, 7, 62, 42, 50,211, 62, 48, 46,231, 61,
- 14,171,202, 62,179,253, 30, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 72,102,230, 62,
-168, 31, 23, 62, 14,171,202, 62,179,253, 30, 62, 42, 50,211, 62, 48, 46,231, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0, 42, 50,211, 62, 48, 46,231, 61, 19, 51,179, 62,204, 70, 7, 62, 20, 51,179, 62,104,111,180, 61,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,197, 16, 1, 63,174,253, 30, 62, 72,102,230, 62,
-168, 31, 23, 62,104,154,249, 62, 48, 46,231, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
-104,154,249, 62, 48, 46,231, 61,191,204, 12, 63,199, 70, 7, 62,197, 16, 1, 63,174,253, 30, 62, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,191,204, 12, 63, 90,111, 52, 62,197, 16, 1, 63,174,253, 30, 62,191,204, 12, 63,
-199, 70, 7, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,191,204, 12, 63,199, 70, 7, 62,
-104,154,249, 62, 48, 46,231, 61,191,204, 12, 63, 83,111,180, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 19,150,194, 62, 72, 45,128, 62, 21, 51,179, 62,156, 83,135, 62, 22, 51,179, 62, 2,152, 97, 62, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 22, 51,179, 62, 2,152, 97, 62,205, 78,197, 62, 95, 97, 83, 62,
- 19,150,194, 62, 72, 45,128, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,168, 9,211, 62,
-222, 76,120, 62, 19,150,194, 62, 72, 45,128, 62,205, 78,197, 62, 95, 97, 83, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0,205, 78,197, 62, 95, 97, 83, 62, 22, 51,179, 62, 2,152, 97, 62, 21, 51,179, 62,101,111, 52, 62,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 19,150,194, 62, 72, 45,128, 62,168, 9,211, 62,
-222, 76,120, 62,179, 51,207, 62, 17,201,146, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
-179, 51,207, 62, 17,201,146, 62,113,162,192, 62,174,144,151, 62, 19,150,194, 62, 72, 45,128, 62, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 21, 51,179, 62,156, 83,135, 62, 19,150,194, 62, 72, 45,128, 62,113,162,192, 62,
-174,144,151, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,113,162,192, 62,174,144,151, 62,
-179, 51,207, 62, 17,201,146, 62,175, 34,204, 62, 54,150,169, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0,154,109,191, 62, 68, 54,174, 62, 21, 51,179, 62,165,111,180, 62, 21, 51,179, 62, 98,231,157, 62, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 21, 51,179, 62, 98,231,157, 62,113,162,192, 62,174,144,151, 62,
-154,109,191, 62, 68, 54,174, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,175, 34,204, 62,
- 54,150,169, 62,154,109,191, 62, 68, 54,174, 62,113,162,192, 62,174,144,151, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0,113,162,192, 62,174,144,151, 62, 21, 51,179, 62, 98,231,157, 62, 21, 51,179, 62,156, 83,135, 62,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,237, 40,217, 62, 91,190,166, 62,175, 34,204, 62,
- 54,150,169, 62,179, 51,207, 62, 17,201,146, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
-179, 51,207, 62, 17,201,146, 62, 75,189,221, 62,238,101,144, 62,237, 40,217, 62, 91,190,166, 62, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 72,102,230, 62,183,199,165, 62,237, 40,217, 62, 91,190,166, 62, 75,189,221, 62,
-238,101,144, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 75,189,221, 62,238,101,144, 62,
-179, 51,207, 62, 17,201,146, 62,168, 9,211, 62,222, 76,120, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0,134, 78, 56, 63,117, 45,128, 62,188, 20, 48, 63, 37, 77,120, 62, 42,242, 54, 63,181, 97, 83, 62, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 42,242, 54, 63,181, 97, 83, 62, 0, 0, 64, 63,115,152, 97, 62,
-134, 78, 56, 63,117, 45,128, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 64, 63,
-218, 83,135, 62,134, 78, 56, 63,117, 45,128, 62, 0, 0, 64, 63,115,152, 97, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 64, 63,115,152, 97, 62, 42,242, 54, 63,181, 97, 83, 62, 0, 0, 64, 63,202,111, 52, 62,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,134, 78, 56, 63,117, 45,128, 62, 0, 0, 64, 63,
-218, 83,135, 62, 87, 72, 57, 63,219,144,151, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
- 87, 72, 57, 63,219,144,151, 62,184,255, 49, 63, 52,201,146, 62,134, 78, 56, 63,117, 45,128, 62, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,188, 20, 48, 63, 37, 77,120, 62,134, 78, 56, 63,117, 45,128, 62,184,255, 49, 63,
- 52,201,146, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,184,255, 49, 63, 52,201,146, 62,
- 87, 72, 57, 63,219,144,151, 62, 58,136, 51, 63, 90,150,169, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 26, 5, 45, 63,117,190,166, 62,107,102, 38, 63,201,199,165, 62,235,186, 42, 63, 5,102,144, 62, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,235,186, 42, 63, 5,102,144, 62,184,255, 49, 63, 52,201,146, 62,
- 26, 5, 45, 63,117,190,166, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 58,136, 51, 63,
- 90,150,169, 62, 26, 5, 45, 63,117,190,166, 62,184,255, 49, 63, 52,201,146, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0,184,255, 49, 63, 52,201,146, 62,235,186, 42, 63, 5,102,144, 62,188, 20, 48, 63, 37, 77,120, 62,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,196,226, 57, 63,114, 54,174, 62, 58,136, 51, 63,
- 90,150,169, 62, 87, 72, 57, 63,219,144,151, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
- 87, 72, 57, 63,219,144,151, 62, 0, 0, 64, 63,162,231,157, 62,196,226, 57, 63,114, 54,174, 62, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 64, 63,211,111,180, 62,196,226, 57, 63,114, 54,174, 62, 0, 0, 64, 63,
-162,231,157, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 64, 63,162,231,157, 62,
- 87, 72, 57, 63,219,144,151, 62, 0, 0, 64, 63,218, 83,135, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0,107,102, 38, 63, 79,162,115, 62,188, 20, 48, 63, 37, 77,120, 62,235,186, 42, 63, 5,102,144, 62, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,235,186, 42, 63, 5,102,144, 62,234, 17, 34, 63,243,101,144, 62,
-107,102, 38, 63, 79,162,115, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 21,184, 28, 63,
-222, 76,120, 62,107,102, 38, 63, 79,162,115, 62,234, 17, 34, 63,243,101,144, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0,234, 17, 34, 63,243,101,144, 62,235,186, 42, 63, 5,102,144, 62,107,102, 38, 63,201,199,165, 62,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,107,102, 38, 63, 79,162,115, 62, 21,184, 28, 63,
-222, 76,120, 62,234,134, 32, 63,204,176, 70, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
-234,134, 32, 63,204,176, 70, 62,233, 69, 44, 63,245,176, 70, 62,107,102, 38, 63, 79,162,115, 62, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,188, 20, 48, 63, 37, 77,120, 62,107,102, 38, 63, 79,162,115, 62,233, 69, 44, 63,
-245,176, 70, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,233, 69, 44, 63,245,176, 70, 62,
-234,134, 32, 63,204,176, 70, 62,104,102, 38, 63,198, 31, 23, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 9, 68, 52, 63,241,253, 30, 62, 0, 0, 64, 63,202,111, 52, 62, 42,242, 54, 63,181, 97, 83, 62, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 42,242, 54, 63,181, 97, 83, 62,233, 69, 44, 63,245,176, 70, 62,
- 9, 68, 52, 63,241,253, 30, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,104,102, 38, 63,
-198, 31, 23, 62, 9, 68, 52, 63,241,253, 30, 62,233, 69, 44, 63,245,176, 70, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0,233, 69, 44, 63,245,176, 70, 62, 42,242, 54, 63,181, 97, 83, 62,188, 20, 48, 63, 37, 77,120, 62,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,195,136, 24, 63,179,253, 30, 62,104,102, 38, 63,
-198, 31, 23, 62,234,134, 32, 63,204,176, 70, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
-234,134, 32, 63,204,176, 70, 62,162,218, 21, 63, 84, 97, 83, 62,195,136, 24, 63,179,253, 30, 62, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,191,204, 12, 63, 90,111, 52, 62,195,136, 24, 63,179,253, 30, 62,162,218, 21, 63,
- 84, 97, 83, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,162,218, 21, 63, 84, 97, 83, 62,
-234,134, 32, 63,204,176, 70, 62, 21,184, 28, 63,222, 76,120, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0,104,102, 38, 63,111, 41,147, 61,191,204, 12, 63, 83,111,180, 61,189,204, 12, 63,225, 64, 52, 61, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,189,204, 12, 63,225, 64, 52, 61, 0, 0, 64, 63,111, 65, 52, 61,
-104,102, 38, 63,111, 41,147, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 64, 63,
-195,111,180, 61,104,102, 38, 63,111, 41,147, 61, 0, 0, 64, 63,111, 65, 52, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 64, 63,111, 65, 52, 61,189,204, 12, 63,225, 64, 52, 61,208,222,121, 63,102, 9,239,178,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,104,102, 38, 63,111, 41,147, 61, 0, 0, 64, 63,
-195,111,180, 61,122, 0, 48, 63,120, 46,231, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
-122, 0, 48, 63,120, 46,231, 61, 85,204, 28, 63, 48, 46,231, 61,104,102, 38, 63,111, 41,147, 61, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,191,204, 12, 63, 83,111,180, 61,104,102, 38, 63,111, 41,147, 61, 85,204, 28, 63,
- 48, 46,231, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 85,204, 28, 63, 48, 46,231, 61,
-122, 0, 48, 63,120, 46,231, 61,104,102, 38, 63,198, 31, 23, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0,195,136, 24, 63,179,253, 30, 62,191,204, 12, 63, 90,111, 52, 62,191,204, 12, 63,199, 70, 7, 62, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,191,204, 12, 63,199, 70, 7, 62, 85,204, 28, 63, 48, 46,231, 61,
-195,136, 24, 63,179,253, 30, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,104,102, 38, 63,
-198, 31, 23, 62,195,136, 24, 63,179,253, 30, 62, 85,204, 28, 63, 48, 46,231, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0, 85,204, 28, 63, 48, 46,231, 61,191,204, 12, 63,199, 70, 7, 62,191,204, 12, 63, 83,111,180, 61,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 9, 68, 52, 63,241,253, 30, 62,104,102, 38, 63,
-198, 31, 23, 62,122, 0, 48, 63,120, 46,231, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
-122, 0, 48, 63,120, 46,231, 61, 0, 0, 64, 63, 24, 71, 7, 62, 9, 68, 52, 63,241,253, 30, 62, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 64, 63,202,111, 52, 62, 9, 68, 52, 63,241,253, 30, 62, 0, 0, 64, 63,
- 24, 71, 7, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 64, 63, 24, 71, 7, 62,
-122, 0, 48, 63,120, 46,231, 61, 0, 0, 64, 63,195,111,180, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 68,126, 20, 63, 64, 45,128, 62,191,204, 12, 63,149, 83,135, 62,191,204, 12, 63,248,151, 97, 62, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,191,204, 12, 63,248,151, 97, 62,162,218, 21, 63, 84, 97, 83, 62,
- 68,126, 20, 63, 64, 45,128, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 21,184, 28, 63,
-222, 76,120, 62, 68,126, 20, 63, 64, 45,128, 62,162,218, 21, 63, 84, 97, 83, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0,162,218, 21, 63, 84, 97, 83, 62,191,204, 12, 63,248,151, 97, 62,191,204, 12, 63, 90,111, 52, 62,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 68,126, 20, 63, 64, 45,128, 62, 21,184, 28, 63,
-222, 76,120, 62, 25,205, 26, 63, 14,201,146, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
- 25,205, 26, 63, 14,201,146, 62,114,132, 19, 63,169,144,151, 62, 68,126, 20, 63, 64, 45,128, 62, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,191,204, 12, 63,149, 83,135, 62, 68,126, 20, 63, 64, 45,128, 62,114,132, 19, 63,
-169,144,151, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,114,132, 19, 63,169,144,151, 62,
- 25,205, 26, 63, 14,201,146, 62,150, 68, 25, 63, 54,150,169, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 7,234, 18, 63, 65, 54,174, 62,191,204, 12, 63,160,111,180, 62,191,204, 12, 63, 90,231,157, 62, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,191,204, 12, 63, 90,231,157, 62,114,132, 19, 63,169,144,151, 62,
- 7,234, 18, 63, 65, 54,174, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,150, 68, 25, 63,
- 54,150,169, 62, 7,234, 18, 63, 65, 54,174, 62,114,132, 19, 63,169,144,151, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0,114,132, 19, 63,169,144,151, 62,191,204, 12, 63, 90,231,157, 62,191,204, 12, 63,149, 83,135, 62,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,185,199, 31, 63, 96,190,166, 62,150, 68, 25, 63,
- 54,150,169, 62, 25,205, 26, 63, 14,201,146, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
- 25,205, 26, 63, 14,201,146, 62,234, 17, 34, 63,243,101,144, 62,185,199, 31, 63, 96,190,166, 62, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,107,102, 38, 63,201,199,165, 62,185,199, 31, 63, 96,190,166, 62,234, 17, 34, 63,
-243,101,144, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,234, 17, 34, 63,243,101,144, 62,
- 25,205, 26, 63, 14,201,146, 62, 21,184, 28, 63,222, 76,120, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 0, 80, 0, 0, 16,148,167, 2, 58, 0, 0, 0, 0, 20, 0, 0,255,255,255,255,255,255,255,255,
+ 0, 0, 0, 96, 13, 65,144, 96, 0, 0, 0, 58, 0, 0, 0, 4, 63,128, 0, 0, 63,127,255,255, 0, 0, 0, 0, 0, 0, 0, 0,
+127,255, 3,255, 0, 0, 0, 0, 63,128, 0, 0,191,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,127,255, 3,255, 0, 0, 0, 0,
+191,128, 0, 1,191,127,255,253, 0, 0, 0, 0, 0, 0, 0, 0,127,255, 3,255, 0, 0, 0, 0,191,127,255,250, 63,128, 0, 3,
+ 0, 0, 0, 0, 0, 0, 0, 0,127,255, 3,255, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 1, 44, 13, 65,144,240, 0, 0, 1, 35,
+ 0, 0, 0, 5, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 65,146, 80,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 48, 13, 65,146, 80, 0, 0, 0, 55,
+ 0, 0, 0, 4, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 35, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 35, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 35, 68, 65, 84, 65, 0, 0, 1, 44, 13, 65,146,176,
+ 0, 0, 1, 35, 0, 0, 0, 5, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 86, 84,101,120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 65,148, 16, 0, 0, 0, 5, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 86, 84,101,
+120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 65,148, 80,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 20, 13, 65,148, 16,
+ 0, 0, 0, 54, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 2, 68, 65, 84, 65,
+ 0, 0, 0, 44, 13, 65,148, 80, 0, 0, 0, 65, 0, 0, 0, 1, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 0, 0, 77, 69,
+ 0, 0, 1, 24, 13, 65,148,176, 0, 0, 0, 52, 0, 0, 0, 1, 13, 65,154, 64, 13, 65,141,144, 0, 0, 0, 0, 0, 0, 0, 0,
+ 77, 69,112,114,101,118,105,101,119, 0, 0, 0, 0,112,104,101,114,101, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 65,149,240, 12,118,208, 32,
+ 12,119, 64, 32, 0, 0, 0, 0, 12,118, 48, 32, 12,118,112, 32, 0, 0, 0, 0, 12,120, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 13, 65,150, 32, 0, 0, 0, 1, 0, 0, 0, 5, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 13, 65,151,128,
+ 0, 0, 0, 1, 0, 0, 0, 5, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 13, 65,152,224, 0, 0, 0, 3, 0, 0, 0, 5,
+ 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,130, 0, 0, 7,128, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,186,224,117, 64,187, 13, 91, 64,186,240,160, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 4, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 4, 13, 65,149,240, 0, 0, 0, 0, 0, 0, 0, 1, 7,160, 8, 32,
+ 68, 65, 84, 65, 0, 0, 1, 44, 13, 65,150, 32, 0, 0, 1, 35, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12,118, 48, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 0, 0, 60, 48, 12,118, 48, 32, 0, 0, 0, 58, 0, 0, 2,130,191,141,136, 28, 62,244,243, 12,192,183, 86,198,
+231,212, 10,117,130,191, 3,255, 0, 0, 0, 0,192,131,102,240, 64,119,183, 30,191,199,169,109,166, 58, 84,158,221,230, 3,255,
+ 0, 0, 0, 0, 63,239,108,119, 64,156, 85,213,192, 40, 58,188, 40,228,106,207,198,137, 3,255, 0, 0, 0, 0, 64,146,135, 95,
+191, 14, 54, 63,192,102,194,241,100, 27,243,219,177, 45, 3,255, 0, 0, 0, 0, 62,141, 84,239,192,157,220, 16,192, 73, 2, 14,
+ 6, 8,148, 39,187, 86, 3,255, 0, 0, 0, 0,192,162,239,132,192, 12,165,206,191,240, 45,150,144,175,207,245,214,251, 3,255,
+ 0, 0, 0, 0,190,141, 84,239, 64,157,220, 16, 64, 73, 2, 14,249,248,107,217, 68,170, 3,255, 0, 0, 0, 0, 64,162,239,132,
+ 64, 12,165,206, 63,240, 45,150,111, 81, 48, 11, 41, 5, 3,255, 0, 0, 0, 0, 64,131,102,240,192,119,183, 30, 63,199,169,109,
+ 89,198,171, 98, 34, 26, 3,255, 0, 0, 0, 0,191,239,108,119,192,156, 85,213, 64, 40, 58,188,215, 28,149, 49, 57,119, 3,255,
+ 0, 0, 0, 0,192,146,135, 95, 63, 14, 54, 63, 64,102,194,241,155,229, 12, 37, 78,211, 3,255, 0, 0, 0, 0, 63,141,136, 28,
+190,244,243, 12, 64,183, 86,198, 24, 44,245,139,125, 65, 3,255, 0, 0, 0, 0,192, 68, 17,114, 64, 35,153,226,192,137, 26,154,
+189, 6, 55,226,162, 85, 3,255, 0, 0, 0, 0, 62,230, 40,155, 64, 73,199,239,192,157, 52,176, 9,211, 68,237,148,153, 3,255,
+ 0, 0, 0, 0,191,168, 55,124, 64,164,177,224,192, 29,144, 58,227, 69,112,132,202, 46, 3,255, 0, 0, 0, 0,192,105, 35, 94,
+191,129, 88,230,192,143, 14,195,176, 93,233,233,158, 68, 3,255, 0, 0, 0, 0,192,173, 2, 37, 63,123,187,137,192, 1, 68, 56,
+137,206, 21,127,211,216, 3,255, 0, 0, 0, 0, 64, 2,168,234,189, 57,158,231,192,175,149, 65, 44,162,255, 3,136, 11, 3,255,
+ 0, 0, 0, 0, 64,114,159, 19, 64, 34,226,254,192,106,133,196, 82,225, 55,164,175,228, 3,255, 0, 0, 0, 0,190,249,176,105,
+192, 39,148, 21,192,166,214,217,245, 87,198,194,142, 5, 3,255, 0, 0, 0, 0, 64, 54,163,227,192, 78,121, 86,192,125,202, 22,
+ 62, 99,185,120,169, 79, 3,255, 0, 0, 0, 0,192, 53, 40,241,192,134, 31,200,192, 60,188,229,194, 30,164, 94,191,136, 3,255,
+ 0, 0, 0, 0,192,181,230, 96,191,119, 24, 33, 63,130, 26,174,131,186,234,231, 22, 56, 3,255, 0, 0, 0, 0,192,163, 93,103,
+ 64, 38,128,136, 63,153,235, 83,144,100, 56,224, 26, 74, 3,255, 0, 0, 0, 0,192, 36,219,238, 64,165,151,132, 63,109,226,165,
+199,176,113, 33, 20, 80, 3,255, 0, 0, 0, 0, 63,111,237, 24, 64,184,174,118, 62,154, 34,212, 20,125,126, 44, 6,148, 3,255,
+ 0, 0, 0, 0, 64,130,244,163, 64,133, 58,157,190,226, 95,125, 89,119, 91, 5,246, 86, 3,255, 0, 0, 0, 0, 64,181,230, 96,
+ 63,119, 24, 33,191,130, 26,174,124, 70, 21, 25,233,200, 3,255, 0, 0, 0, 0, 64,163, 93,103,192, 38,128,136,191,153,235, 83,
+111,156,199, 32,229,182, 3,255, 0, 0, 0, 0, 64, 36,219,238,192,165,151,132,191,109,226,165, 56, 80,142,223,235,176, 3,255,
+ 0, 0, 0, 0,191,111,237, 24,192,184,174,118,190,154, 34,212,235,131,129,212,249,108, 3,255, 0, 0, 0, 0,192,130,244,163,
+192,133, 58,157, 62,226, 95,125,166,137,164,251, 9,170, 3,255, 0, 0, 0, 0,192, 54,163,227, 64, 78,121, 86, 64,125,202, 22,
+193,157, 70,136, 86,177, 3,255, 0, 0, 0, 0, 64, 53, 40,241, 64,134, 31,200, 64, 60,188,229, 61,226, 91,162, 64,120, 3,255,
+ 0, 0, 0, 0, 64,173, 2, 37,191,123,187,137, 64, 1, 68, 56,118, 50,234,129, 44, 40, 3,255, 0, 0, 0, 0, 63,168, 55,124,
+192,164,177,224, 64, 29,144, 58, 28,187,143,124, 53,210, 3,255, 0, 0, 0, 0,192,114,159, 19,192, 34,226,254, 64,106,133,196,
+173, 31,200, 92, 80, 28, 3,255, 0, 0, 0, 0,192, 2,168,234, 61, 57,158,231, 64,175,149, 65,211, 94, 0,253,119,245, 3,255,
+ 0, 0, 0, 0, 62,249,176,105, 64, 39,148, 21, 64,166,214,217, 10,169, 57, 62,113,251, 3,255, 0, 0, 0, 0, 64,105, 35, 94,
+ 63,129, 88,230, 64,143, 14,195, 79,163, 22, 23, 97,188, 3,255, 0, 0, 0, 0, 64, 68, 17,114,192, 35,153,226, 64,137, 26,154,
+ 66,250,200, 30, 93,171, 3,255, 0, 0, 0, 0,190,230, 40,155,192, 73,199,239, 64,157, 52,176,246, 45,187, 19,107,103, 3,255,
+ 0, 0, 0, 0,192, 10,178, 37, 63,201,231,138,192,166,143,149,209,129, 33,140,141,145, 3,255, 0, 0, 0, 0,192,110,132, 3,
+ 64, 85,203,243,192, 66,107,151,174, 16, 73,158,190,209, 3,255, 0, 0, 0, 0,190,174,161,116, 63,241,152, 81,192,177, 2,110,
+247,217, 40, 15,134,182, 3,255, 0, 0, 0, 0, 63,154, 91,138, 64,133,179,218,192,122,222,209, 27, 0, 92, 30,171, 86, 3,255,
+ 0, 0, 0, 0,192, 52, 82, 7, 64,149,252, 82,192, 5,202, 64,193, 39,101,227,210,181, 3,255, 0, 0, 0, 0, 62,148, 12,179,
+ 64,166,221,251,192, 41, 87,188, 7,192,113,224,198, 21, 3,255, 0, 0, 0, 0,192, 29,246,216,190,141,156, 17,192,169,167,209,
+203, 47,250,160,139,137, 3,255, 0, 0, 0, 0,192,145, 72, 99,191,213,114, 79,192, 83, 35,183,156, 26,219, 3,185, 12, 3,255,
+ 0, 0, 0, 0,192,158, 58,115, 64, 33,120,129,191,238, 41,198,148,126, 56,116,215,137, 3,255, 0, 0, 0, 0,192,174,158,118,
+191, 33,148,103,192, 1,156,140,136,218,240,198,211,203, 3,255, 0, 0, 0, 0, 62,249, 14, 55, 62,102,133, 95,192,186,143,210,
+ 9, 56, 5, 40,128,113, 3,255, 0, 0, 0, 0, 64, 92, 61,220,190,159,230, 56,192,151, 61, 6, 76, 94,248,242,153,135, 3,255,
+ 0, 0, 0, 0, 64, 60, 86, 7, 64,119, 48, 60,192, 81, 88, 93, 63,119, 85,124,184,246, 3,255, 0, 0, 0, 0, 64,139, 55,252,
+ 63,132, 95, 62,192,113,216,225, 95,118, 21, 54,173,107, 3,255, 0, 0, 0, 0,191, 84, 6, 18,191,142, 96,251,192,182, 4, 76,
+237,158,233, 20,131,109, 3,255, 0, 0, 0, 0,189,225, 74,109,192,123, 54, 51,192,138,246, 34,253,241,169, 39,162, 1, 3,255,
+ 0, 0, 0, 0, 64,119, 66,153,191,251,154,127,192,123,220,161, 85, 59,214, 59,170, 34, 3,255, 0, 0, 0, 0, 63,208, 59,201,
+192,135,182,241,192,108,101,212, 34,103,162,133,175,160, 3,255, 0, 0, 0, 0,191,169,246,161,192,151,196,235,192, 74,149,170,
+228, 95,151,253,186,184, 3,255, 0, 0, 0, 0,192,131,198, 33,192, 84,137,218,192, 32,134, 37,164,247,184, 77,201,167, 3,255,
+ 0, 0, 0, 0,192,179, 61,176,191,210,110,138,190,228,220, 24,133,210,219,130,244,238, 3,255, 0, 0, 0, 0,192,170,182, 73,
+190, 90, 16,136, 64, 25,194, 90,139,224,252, 8, 53,174, 3,255, 0, 0, 0, 0,192,153, 55, 75, 64, 87, 78, 4,190, 62, 54, 12,
+151,200, 74, 29,250,179, 3,255, 0, 0, 0, 0,192,161, 19,235, 63,210, 12,207, 64, 31,242,210,146, 50, 34,244, 55,182, 3,255,
+ 0, 0, 0, 0,192, 94, 75, 60, 64,150,115,189,190,167,211,186,179, 98,102, 49,247,183, 3,255, 0, 0, 0, 0,191,189,191,186,
+ 64,168, 32, 63, 64, 7,100,213,224,161,114,191, 47, 61, 3,255, 0, 0, 0, 0, 63,186,205,242, 64,177, 65,141,191,154,219,127,
+ 32, 82,120,177,228, 61, 3,255, 0, 0, 0, 0, 62,175,245, 99, 64,178, 12, 97, 63,228,253,255, 6,247,121, 65, 40, 98, 3,255,
+ 0, 0, 0, 0, 64, 70, 92,226, 64,150,131, 8,191,204, 77,182, 66,193,103, 37,220, 32, 3,255, 0, 0, 0, 0, 64,152,194,200,
+ 64, 83,155,180, 63, 62,217,154,104,207, 71,101, 17, 87, 3,255, 0, 0, 0, 0, 64,170,182, 73, 62, 90, 16,136,192, 25,194, 90,
+116, 32, 3,248,202, 82, 3,255, 0, 0, 0, 0, 64,179, 61,176, 63,210,110,138, 62,228,220, 24,122, 46, 36,126, 11, 18, 3,255,
+ 0, 0, 0, 0, 64,161, 19,235,191,210, 12,207,192, 31,242,210,109,206,221, 12,200, 74, 3,255, 0, 0, 0, 0, 64,153, 55, 75,
+192, 87, 78, 4, 62, 62, 54, 12,104, 56,181,227, 5, 77, 3,255, 0, 0, 0, 0, 63,189,191,186,192,168, 32, 63,192, 7,100,213,
+ 31, 95,141, 65,208,195, 3,255, 0, 0, 0, 0, 64, 94, 75, 60,192,150,115,189, 62,167,211,186, 76,158,153,207, 8, 73, 3,255,
+ 0, 0, 0, 0,190,175,245, 99,192,178, 12, 97,191,228,253,255,249, 9,134,191,215,158, 3,255, 0, 0, 0, 0,191,186,205,242,
+192,177, 65,141, 63,154,219,127,223,174,135, 79, 27,195, 3,255, 0, 0, 0, 0,192,152,194,200,192, 83,155,180,191, 62,217,154,
+151, 49,184,155,238,169, 3,255, 0, 0, 0, 0,192, 70, 92,226,192,150,131, 8, 63,204, 77,182,189, 63,152,219, 35,224, 3,255,
+ 0, 0, 0, 0,191,208, 59,201, 64,135,182,241, 64,108,101,212,221,153, 93,123, 80, 96, 3,255, 0, 0, 0, 0,192,119, 66,153,
+ 63,251,154,127, 64,123,220,161,170,197, 41,197, 85,222, 3,255, 0, 0, 0, 0, 63,169,246,161, 64,151,196,235, 64, 74,149,170,
+ 27,161,104, 3, 69, 72, 3,255, 0, 0, 0, 0, 64,131,198, 33, 64, 84,137,218, 64, 32,134, 37, 91, 9, 71,179, 54, 89, 3,255,
+ 0, 0, 0, 0, 64,174,158,118, 63, 33,148,103, 64, 1,156,140,119, 38, 15, 58, 44, 53, 3,255, 0, 0, 0, 0, 64,158, 58,115,
+192, 33,120,129, 63,238, 41,198,107,130,199,140, 40,119, 3,255, 0, 0, 0, 0, 64, 52, 82, 7,192,149,252, 82, 64, 5,202, 64,
+ 62,217,154, 29, 45, 75, 3,255, 0, 0, 0, 0,190,148, 12,179,192,166,221,251, 64, 41, 87,188,248, 64,142, 32, 57,235, 3,255,
+ 0, 0, 0, 0,192, 60, 86, 7,192,119, 48, 60, 64, 81, 88, 93,192,137,170,132, 71, 10, 3,255, 0, 0, 0, 0,192,139, 55,252,
+191,132, 95, 62, 64,113,216,225,160,138,234,202, 82,149, 3,255, 0, 0, 0, 0,192, 92, 61,220, 62,159,230, 56, 64,151, 61, 6,
+179,162, 7, 14,102,121, 3,255, 0, 0, 0, 0,190,249, 14, 55,190,102,133, 95, 64,186,143,210,246,200,250,216,127,143, 3,255,
+ 0, 0, 0, 0, 61,225, 74,109, 64,123, 54, 51, 64,138,246, 34, 2, 15, 86,217, 93,255, 3,255, 0, 0, 0, 0, 63, 84, 6, 18,
+ 63,142, 96,251, 64,182, 4, 76, 18, 98, 22,236,124,147, 3,255, 0, 0, 0, 0, 64,145, 72, 99, 63,213,114, 79, 64, 83, 35,183,
+ 99,230, 36,253, 70,244, 3,255, 0, 0, 0, 0, 64, 29,246,216, 62,141,156, 17, 64,169,167,209, 52,209, 5, 96,116,119, 3,255,
+ 0, 0, 0, 0, 64,110,132, 3,192, 85,203,243, 64, 66,107,151, 81,240,182, 98, 65, 47, 3,255, 0, 0, 0, 0, 64, 10,178, 37,
+191,201,231,138, 64,166,143,149, 46,127,222,116,114,111, 3,255, 0, 0, 0, 0,191,154, 91,138,192,133,179,218, 64,122,222,209,
+229, 0,163,226, 84,170, 3,255, 0, 0, 0, 0, 62,174,161,116,191,241,152, 81, 64,177, 2,110, 8, 39,215,241,121, 74, 3,255,
+ 0, 0, 0, 0,192, 19, 76, 36, 64,129,151, 25,192, 98,254,212,206,231, 88, 97,177,131, 3,255, 0, 0, 0, 0,191,175,232, 93,
+ 64, 64, 23,177,192,154,186, 69,225,227, 66,235,151, 34, 3,255, 0, 0, 0, 0,190,232,190,208, 64,139,160, 93,192,120, 33,191,
+244,183, 94,205,170,192, 3,255, 0, 0, 0, 0,192,142,126,210, 63,238, 49, 43,192, 84, 30,112,158,187, 39, 95,182,183, 3,255,
+ 0, 0, 0, 0,192, 97,165,138, 63, 80, 9, 92,192,147, 74, 20,177,183, 17,233,156, 86, 3,255, 0, 0, 0, 0,192,152, 61, 98,
+188,106, 63, 87,192, 90, 97, 6,152,127, 0,251,180,183, 3,255, 0, 0, 0, 0, 64, 14,173,200, 64, 63,183,155,192,144, 75,192,
+ 48,206, 64, 45,156,152, 3,255, 0, 0, 0, 0, 63,167,162, 95, 63,209, 29,144,192,174,245, 25, 29,250, 36, 75,136,250, 3,255,
+ 0, 0, 0, 0, 64, 68, 62,211, 63,168, 56, 51,192,153,245, 13, 65,241, 29,192,150,106, 3,255, 0, 0, 0, 0, 64, 36,182, 33,
+191,220, 38, 34,192,159, 5,150, 54,233,217,211,146,223, 3,255, 0, 0, 0, 0, 63, 81, 34, 16,191,179, 64,129,192,180, 5,162,
+ 18,242,224, 93,133,111, 3,255, 0, 0, 0, 0, 63,159, 56,212,192, 68,166,172,192,154,108,212, 27,176,190, 32,149,208, 3,255,
+ 0, 0, 0, 0,191,223, 76,204,192,101, 32,170,192,137, 83, 65,216,199,178,195,161,198, 3,255, 0, 0, 0, 0,192, 10,249,249,
+191,244, 52, 62,192,162,236, 25,208, 9,213, 0,145,102, 3,255, 0, 0, 0, 0,192, 89,207, 42,192, 47, 6,251,192,121,165, 27,
+182,209,196, 18,169,198, 3,255, 0, 0, 0, 0,192,176,215,137, 63,241, 62, 25,190,219,254,179,134,179, 39,232,247, 78, 3,255,
+ 0, 0, 0, 0,192,186,150, 28, 60, 28, 16,150,191, 7, 9,191,128,118, 1,131,245, 77, 3,255, 0, 0, 0, 0,192,181,132, 34,
+ 63, 92, 60, 99, 63,149, 81,217,131,181, 18,238, 23,252, 3,255, 0, 0, 0, 0,190, 74,242,175, 64,183,173,164,191,145,105,227,
+250,117,125,160,232, 31, 3,255, 0, 0, 0, 0,192, 2,227,219, 64,173,164, 96,191, 78, 71,200,212,164,119, 52,238,226, 3,255,
+ 0, 0, 0, 0,191, 92,140,181, 64,184, 38, 75, 63, 37,148,176,236,224,125,237, 12,159, 3,255, 0, 0, 0, 0, 64,159,104, 75,
+ 63,236, 56,212,192, 29,126,240,108,211, 41,166,203, 9, 3,255, 0, 0, 0, 0, 64,132,159,215, 64, 97,184, 84,192, 10, 44, 30,
+ 91,176, 76, 19,209, 56, 3,255, 0, 0, 0, 0, 64,164,122, 95, 64, 44,143,199,191, 68, 78, 53,112, 17, 59, 17,237,185, 3,255,
+ 0, 0, 0, 0, 64, 54,176,255,192,141, 84,243,192, 36,176,237, 63,192,160, 9,200, 63, 3,255, 0, 0, 0, 0, 64,133,229, 93,
+192, 68, 21,217,192, 45,226,157, 90,249,187,187,197, 78, 3,255, 0, 0, 0, 0, 64,129, 56,203,192,130,211, 21,191,143,115,187,
+ 87,252,166,194,229,252, 3,255, 0, 0, 0, 0,192,104,239,189,192,140,142, 82,191,168,178,178,177,134,158,245,227,155, 3,255,
+ 0, 0, 0, 0,191,253,141, 50,192,167,155, 52,191,218,181,170,211,125,141,166,219,155, 3,255, 0, 0, 0, 0,192, 41, 58,164,
+192,167, 34,172, 61,151,232,206,197,232,141,243, 0, 26, 3,255, 0, 0, 0, 0,192,133,229, 93, 64, 68, 21,217, 64, 45,226,157,
+165, 7, 68, 69, 58,178, 3,255, 0, 0, 0, 0,192,129, 56,203, 64,130,211, 21, 63,143,115,187,168, 4, 89, 62, 26, 4, 3,255,
+ 0, 0, 0, 0,192, 54,176,255, 64,141, 84,243, 64, 36,176,237,192, 64, 95,247, 55,193, 3,255, 0, 0, 0, 0, 63,253,141, 50,
+ 64,167,155, 52, 63,218,181,170, 44,131,114, 90, 36,101, 3,255, 0, 0, 0, 0, 64, 41, 58,164, 64,167, 34,172,189,151,232,206,
+ 58, 24,114, 13,255,230, 3,255, 0, 0, 0, 0, 64,104,239,189, 64,140,142, 82, 63,168,178,178, 78,122, 97, 11, 28,101, 3,255,
+ 0, 0, 0, 0, 64,186,150, 28,188, 28, 16,150, 63, 7, 9,191,127,138,254,125, 10,179, 3,255, 0, 0, 0, 0, 64,181,132, 34,
+191, 92, 60, 99,191,149, 81,217,124, 75,237, 18,232, 4, 3,255, 0, 0, 0, 0, 64,176,215,137,191,241, 62, 25, 62,219,254,179,
+121, 77,216, 24, 8,178, 3,255, 0, 0, 0, 0, 64, 2,227,219,192,173,164, 96, 63, 78, 71,200, 43, 92,136,204, 17, 30, 3,255,
+ 0, 0, 0, 0, 63, 92,140,181,192,184, 38, 75,191, 37,148,176, 19, 32,130, 19,243, 97, 3,255, 0, 0, 0, 0, 62, 74,242,175,
+192,183,173,164, 63,145,105,227, 5,139,130, 96, 23,225, 3,255, 0, 0, 0, 0,192,132,159,215,192, 97,184, 84, 64, 10, 44, 30,
+164, 80,179,237, 46,200, 3,255, 0, 0, 0, 0,192,164,122, 95,192, 44,143,199, 63, 68, 78, 53,143,239,196,239, 18, 71, 3,255,
+ 0, 0, 0, 0,192,159,104, 75,191,236, 56,212, 64, 29,126,240,147, 45,214, 90, 52,247, 3,255, 0, 0, 0, 0,191,159, 56,212,
+ 64, 68,166,172, 64,154,108,212,228, 80, 65,224,106, 48, 3,255, 0, 0, 0, 0,192, 36,182, 33, 63,220, 38, 34, 64,159, 5,150,
+201, 23, 38, 45,109, 33, 3,255, 0, 0, 0, 0,191, 81, 34, 16, 63,179, 64,129, 64,180, 5,162,237, 14, 31,163,122,145, 3,255,
+ 0, 0, 0, 0, 64, 89,207, 42, 64, 47, 6,251, 64,121,165, 27, 73, 47, 59,238, 86, 58, 3,255, 0, 0, 0, 0, 63,223, 76,208,
+ 64,101, 32,170, 64,137, 83, 65, 39, 57, 77, 61, 94, 58, 3,255, 0, 0, 0, 0, 64, 10,249,249, 63,244, 52, 62, 64,162,236, 25,
+ 47,247, 43, 0,110,154, 3,255, 0, 0, 0, 0, 64,142,126,210,191,238, 49, 43, 64, 84, 30,112, 97, 69,216,161, 73, 73, 3,255,
+ 0, 0, 0, 0, 64,152, 61, 98, 60,106, 63, 87, 64, 90, 97, 6,103,129,255, 5, 75, 73, 3,255, 0, 0, 0, 0, 64, 97,165,138,
+191, 80, 9, 92, 64,147, 74, 20, 78, 73,238, 23, 99,170, 3,255, 0, 0, 0, 0, 62,232,190,208,192,139,160, 93, 64,120, 33,191,
+ 11, 73,161, 51, 85, 64, 3,255, 0, 0, 0, 0, 64, 19, 76, 36,192,129,151, 25, 64, 98,254,212, 49, 25,167,159, 78,125, 3,255,
+ 0, 0, 0, 0, 63,175,232, 93,192, 64, 23,177, 64,154,186, 69, 30, 29,189, 21,104,222, 3,255, 0, 0, 0, 0,192, 68, 62,211,
+191,168, 56, 51, 64,153,245, 13,190, 15,226, 64,105,150, 3,255, 0, 0, 0, 0,192, 14,173,200,192, 63,183,155, 64,144, 75,192,
+207, 50,191,211, 99,104, 3,255, 0, 0, 0, 0,191,167,162, 95,191,209, 29,144, 64,174,245, 25,226, 6,219,181,119, 6, 3,255,
+ 0, 0, 0, 0,191,211,156,158, 63,132,228,185,192,176,207,190,220,164, 21,231,134,244, 3,255, 0, 0, 0, 0,192, 41, 76, 0,
+ 64, 5,199,190,192,153,157, 83,198,146, 45, 75,150,246, 3,255, 0, 0, 0, 0,192,125, 83,204, 64,105, 55,169,192, 20,162,244,
+169, 72, 79,246,206, 82, 3,255, 0, 0, 0, 0,192, 91,215,178, 64, 62,235,222,192,108,254,190,180,215, 65, 87,175,155, 3,255,
+ 0, 0, 0, 0,191, 59, 63,242, 63,152,237,210,192,182, 21,251,239,125, 25, 26,131,149, 3,255, 0, 0, 0, 0, 61, 94,230, 86,
+ 64, 35, 30,198,192,169, 15,233, 0,238, 55, 52,140,135, 3,255, 0, 0, 0, 0, 63,199, 4,220, 64,146,145, 7,192, 83,186,104,
+ 34,109,100,137,184,168, 3,255, 0, 0, 0, 0, 63, 86,120, 9, 64,109, 91,149,192,142,242, 79, 18,133, 81, 64,158,218, 3,255,
+ 0, 0, 0, 0,192, 95,243,103, 64,138, 91,221,191,236, 15,186,178,170, 93,219,216, 25, 3,255, 0, 0, 0, 0,192, 5,206, 46,
+ 64,159, 41,121,192, 19, 91,154,209,230,108, 96,205,226, 3,255, 0, 0, 0, 0, 63,139,200,169, 64,163, 78,198,192, 42,146,201,
+ 24,247,111, 59,197,206, 3,255, 0, 0, 0, 0,191, 4,128,187, 64,167,181,206,192, 37, 92, 74,245, 57,114, 96,199,145, 3,255,
+ 0, 0, 0, 0,191,231, 16,151, 61,209,166,160,192,178, 95,167,217,136, 2,196,133,245, 3,255, 0, 0, 0, 0,192, 69,200,163,
+191, 38,143,178,192,158, 48,148,188,243,242, 11,147,223, 3,255, 0, 0, 0, 0,192,155,192, 43,191,250, 6,151,192, 39, 82,170,
+149, 79,212,247,199,231, 3,255, 0, 0, 0, 0,192,132,118,233,191,173,111,217,192,123,122, 67,165,100,226, 58,170,165, 3,255,
+ 0, 0, 0, 0,192,146, 85,238, 64, 78,205,178,191,221, 54, 70,156,183, 71,134,218,120, 3,255, 0, 0, 0, 0,192,167,137, 76,
+ 63,227, 31,111,191,251, 57,158,141,234, 39, 54,213, 59, 3,255, 0, 0, 0, 0,192,170,143, 39,191,183, 15,167,191,252, 85,251,
+139,217,223,169,213, 13, 3,255, 0, 0, 0, 0,192,175,214, 8, 62, 53,124,177,192, 2,241,206,136, 23, 3, 89,211, 92, 3,255,
+ 0, 0, 0, 0,190,160,160, 77, 62,182, 20, 9,192,186,232,108,248, 8, 7,241,128,128, 3,255, 0, 0, 0, 0, 63,163,144, 33,
+ 61,186,144,151,192,183, 47, 50, 27, 97, 2, 19,130,252, 3,255, 0, 0, 0, 0, 64,129,179,222,190,224,147,234,192,134,180, 38,
+ 89, 83,246, 64,164,218, 3,255, 0, 0, 0, 0, 64, 49,138,114,190, 57, 97,246,192,165, 76, 57, 60,250,251,247,143,138, 3,255,
+ 0, 0, 0, 0, 64, 27,158,249, 64,141,118,197,192, 62,196, 58, 52, 90, 97, 70,191, 90, 3,255, 0, 0, 0, 0, 64, 89,244, 98,
+ 64, 79,120, 8,192, 96,128, 65, 74, 8, 71, 39,179,151, 3,255, 0, 0, 0, 0, 64,144,100, 13, 62,118,214,200,192,110,205, 64,
+ 98,182, 4, 37,174,161, 3,255, 0, 0, 0, 0, 64,131,202, 42, 63,231,161, 60,192,112,245,142, 90, 10, 38,255,173,209, 3,255,
+ 0, 0, 0, 0,191,122, 51,149,190,163,151, 52,192,184,157, 15,234,118,250, 36,129,248, 3,255, 0, 0, 0, 0,191, 42,113, 5,
+191,241,112, 31,192,176,119, 15,241, 93,215, 84,135,135, 3,255, 0, 0, 0, 0, 61,172, 55, 60,192,143, 64, 22,192,113,246,164,
+ 2, 27,157,132,174, 71, 3,255, 0, 0, 0, 0,190,154,173,167,192, 83,224,111,192,154,169,198,249,136,183, 89,150,211, 3,255,
+ 0, 0, 0, 0, 64,136,133,151,191,162,249, 9,192,115,219,106, 93,175,229, 47,173, 3, 3,255, 0, 0, 0, 0, 64, 89,124,110,
+192, 40, 6,135,192,127,195,223, 74,120,199, 31,168,208, 3,255, 0, 0, 0, 0, 63,117,248,244,192,148, 90,109,192, 93, 0,123,
+ 20, 8,154, 66,180,249, 3,255, 0, 0, 0, 0, 64, 17, 0,162,192,113,196, 63,192,119,239, 52, 49, 10,173, 64,171,144, 3,255,
+ 0, 0, 0, 0,191, 7,217,162,192,156,117, 21,192, 75,238,222,245,139,149, 20,186,108, 3,255, 0, 0, 0, 0,192, 6,144,171,
+192,144,158,112,192, 69,241,198,210,156,157, 55,188,115, 3,255, 0, 0, 0, 0,192,148,238,110,192, 50,109,115,192, 13,197,187,
+153,170,195,231,208, 17, 3,255, 0, 0, 0, 0,192, 96,252, 79,192,115, 40,140,192, 48,165,116,178,226,173, 98,195,236, 3,255,
+ 0, 0, 0, 0,192,172,228,100,191,248,128,217,191,150, 93, 8,138, 91,213, 53,229, 86, 3,255, 0, 0, 0, 0,192,182,171, 82,
+191,168,250,216, 62,147, 15, 15,131,122,226,250, 5,203, 3,255, 0, 0, 0, 0,192,160, 73,215, 62, 49,165,124, 64, 66, 85,232,
+147, 33, 4, 84, 67, 42, 3,255, 0, 0, 0, 0,192,178, 89,171,191, 24,115,192, 63,221,116, 78,134,129,243, 64, 38, 50, 3,255,
+ 0, 0, 0, 0,192,143,206, 51, 64,105,250,133,191, 97,251,119,158, 85, 80, 53,235,193, 3,255, 0, 0, 0, 0,192,160, 32, 62,
+ 64, 65, 38,163, 63, 3,117,164,146,236, 66, 24, 10,193, 3,255, 0, 0, 0, 0,192,155,108,216, 63,141,255, 59, 64, 69,117,189,
+150, 61, 23,119, 68, 42, 3,255, 0, 0, 0, 0,192,164, 27, 85, 64, 9, 78,244, 63,239,193, 87,144, 33, 46,128, 41, 73, 3,255,
+ 0, 0, 0, 0,192,117, 35,134, 64,138,152, 39,191,116, 86, 73,171,230, 94, 2,234, 73, 3,255, 0, 0, 0, 0,192, 67,220, 35,
+ 64,159,218, 6, 62,155,103,242,188,240,108,215, 6, 55, 3,255, 0, 0, 0, 0,191, 99, 79,130, 64,164,182,215, 64, 42, 4, 10,
+237,118,112, 50, 58,190, 3,255, 0, 0, 0, 0,192, 3, 86,161, 64,168,205, 14, 63,197, 55, 60,211,148,115, 31, 33,255, 3,255,
+ 0, 0, 0, 0, 63,215,101,229, 64,168,141, 84,191,248, 90, 16, 37, 11,114,148,212,159, 3,255, 0, 0, 0, 0, 63,155, 52, 99,
+ 64,183, 17,198,190,235,199,232, 26,159,124,192,245,120, 3,255, 0, 0, 0, 0, 61, 10,179,105, 64,169,185, 25, 64, 31,119,120,
+ 0, 77,115,101, 55, 96, 3,255, 0, 0, 0, 0, 63, 37,198,143, 64,183,120,123, 63,135,108,160, 13,240,125, 8, 23,144, 3,255,
+ 0, 0, 0, 0, 64, 32,174,180, 64,155, 13, 65,192, 8,167,238, 53,247,105,245,208,163, 3,255, 0, 0, 0, 0, 64,104,199, 69,
+ 64,143,135,177,191,132, 12, 41, 79, 10, 98, 10,233, 31, 3,255, 0, 0, 0, 0, 64,159,134,121, 64, 49,245, 49, 63,169,166,210,
+109, 27, 59,242, 29,190, 3,255, 0, 0, 0, 0, 64,143,133, 52, 64,113,200,119, 62, 29,206,186, 98, 20, 82, 39, 3,190, 3,255,
+ 0, 0, 0, 0, 64,160, 73,215,190, 49,165,124,192, 66, 85,232,108,223,251,172,188,214, 3,255, 0, 0, 0, 0, 64,178, 89,171,
+ 63, 24,115,192,191,221,116, 78,121,127, 12,192,217,206, 3,255, 0, 0, 0, 0, 64,172,228,100, 63,248,128,217, 63,150, 93, 8,
+117,165, 42,203, 26,170, 3,255, 0, 0, 0, 0, 64,182,171, 82, 63,168,250,216,190,147, 15, 15,124,134, 29, 6,250, 53, 3,255,
+ 0, 0, 0, 0, 64,155,108,216,191,141,255, 59,192, 69,117,189,105,195,232,137,187,214, 3,255, 0, 0, 0, 0, 64,164, 27, 85,
+192, 9, 78,244,191,239,193, 87,111,223,209,128,214,183, 3,255, 0, 0, 0, 0, 64,143,206, 51,192,105,250,133, 63, 97,251,119,
+ 97,171,175,203, 20, 63, 3,255, 0, 0, 0, 0, 64,160, 32, 62,192, 65, 38,163,191, 3,117,164,109, 20,189,232,245, 63, 3,255,
+ 0, 0, 0, 0, 63, 99, 79,130,192,164,182,215,192, 42, 4, 10, 18,138,143,206,197, 66, 3,255, 0, 0, 0, 0, 64, 3, 86,161,
+192,168,205, 14,191,197, 55, 60, 44,108,140,225,222, 1, 3,255, 0, 0, 0, 0, 64,117, 35,134,192,138,152, 39, 63,116, 86, 73,
+ 84, 26,161,254, 21,183, 3,255, 0, 0, 0, 0, 64, 67,220, 35,192,159,218, 6,190,155,103,242, 67, 16,147, 41,249,201, 3,255,
+ 0, 0, 0, 0,189, 10,179,105,192,169,185, 25,192, 31,119,120,255,179,140,155,200,160, 3,255, 0, 0, 0, 0,191, 37,198,143,
+192,183,120,123,191,135,108,160,242, 16,130,248,232,112, 3,255, 0, 0, 0, 0,191,215,101,229,192,168,141, 84, 63,248, 90, 16,
+218,245,141,108, 43, 97, 3,255, 0, 0, 0, 0,191,155, 52, 99,192,183, 17,198, 62,235,199,232,229, 97,131, 64, 10,136, 3,255,
+ 0, 0, 0, 0,192,159,134,121,192, 49,245, 49,191,169,166,210,146,229,196, 14,226, 66, 3,255, 0, 0, 0, 0,192,143,133, 52,
+192,113,200,119,190, 29,206,186,157,236,173,217,252, 66, 3,255, 0, 0, 0, 0,192, 32,174,180,192,155, 13, 65, 64, 8,167,238,
+202, 9,150, 11, 47, 93, 3,255, 0, 0, 0, 0,192,104,199, 69,192,143,135,177, 63,132, 12, 41,176,246,157,246, 22,225, 3,255,
+ 0, 0, 0, 0,191,117,248,244, 64,148, 90,109, 64, 93, 0,123,235,248,101,190, 75, 7, 3,255, 0, 0, 0, 0,192, 17, 0,162,
+ 64,113,196, 63, 64,119,239, 52,206,246, 82,192, 84,112, 3,255, 0, 0, 0, 0,192,136,133,151, 63,162,249, 9, 64,115,219,106,
+162, 81, 26,209, 82,253, 3,255, 0, 0, 0, 0,192, 89,124,110, 64, 40, 6,135, 64,127,195,223,181,136, 56,225, 87, 48, 3,255,
+ 0, 0, 0, 0, 63, 7,217,162, 64,156,117, 21, 64, 75,238,222, 10,117,106,236, 69,148, 3,255, 0, 0, 0, 0, 64, 6,144,171,
+ 64,144,158,112, 64, 69,241,198, 45,100, 98,201, 67,141, 3,255, 0, 0, 0, 0, 64,148,238,110, 64, 50,109,115, 64, 13,197,187,
+102, 86, 60, 25, 47,239, 3,255, 0, 0, 0, 0, 64, 96,252, 79, 64,115, 40,140, 64, 48,165,116, 77, 30, 82,158, 60, 20, 3,255,
+ 0, 0, 0, 0, 64,170,143, 39, 63,183, 15,167, 63,252, 85,251,116, 39, 32, 87, 42,243, 3,255, 0, 0, 0, 0, 64,175,214, 8,
+190, 53,124,177, 64, 2,241,206,119,233,252,167, 44,164, 3,255, 0, 0, 0, 0, 64,146, 85,238,192, 78,205,178, 63,221, 54, 70,
+ 99, 73,184,122, 37,136, 3,255, 0, 0, 0, 0, 64,167,137, 76,191,227, 31,111, 63,251, 57,158,114, 22,216,202, 42,197, 3,255,
+ 0, 0, 0, 0, 64, 95,243,103,192,138, 91,221, 63,236, 15,186, 77, 86,162, 37, 39,231, 3,255, 0, 0, 0, 0, 64, 5,206, 46,
+192,159, 41,121, 64, 19, 91,154, 46, 26,147,160, 50, 30, 3,255, 0, 0, 0, 0,191,139,200,169,192,163, 78,198, 64, 42,146,201,
+231, 9,144,197, 58, 50, 3,255, 0, 0, 0, 0, 63, 4,128,187,192,167,181,206, 64, 37, 92, 74, 10,199,141,160, 56,111, 3,255,
+ 0, 0, 0, 0,192, 27,158,249,192,141,118,197, 64, 62,196, 58,203,166,158,186, 64,166, 3,255, 0, 0, 0, 0,192, 89,244, 98,
+192, 79,120, 8, 64, 96,128, 65,181,248,184,217, 76,105, 3,255, 0, 0, 0, 0,192,144,100, 13,190,118,214,200, 64,110,205, 64,
+157, 74,251,219, 81, 95, 3,255, 0, 0, 0, 0,192,131,202, 42,191,231,161, 60, 64,112,245,142,165,246,217, 1, 82, 47, 3,255,
+ 0, 0, 0, 0,192,129,179,222, 62,224,147,234, 64,134,180, 38,166,173, 9,192, 91, 38, 3,255, 0, 0, 0, 0,192, 49,138,114,
+ 62, 57, 97,246, 64,165, 76, 57,195, 6, 4, 9,112,118, 3,255, 0, 0, 0, 0, 62,160,160, 77,190,182, 20, 9, 64,186,232,108,
+ 7,248,248, 15,127,128, 3,255, 0, 0, 0, 0,191,163,144, 33,189,186,144,151, 64,183, 47, 50,228,159,253,237,125, 4, 3,255,
+ 0, 0, 0, 0,189,172, 55, 60, 64,143, 64, 22, 64,113,246,164,253,229, 98,124, 81,185, 3,255, 0, 0, 0, 0, 62,154,173,167,
+ 64, 83,224,111, 64,154,169,198, 6,120, 72,167,105, 45, 3,255, 0, 0, 0, 0, 63,122, 51,149, 62,163,151, 52, 64,184,157, 15,
+ 21,138, 5,220,126, 8, 3,255, 0, 0, 0, 0, 63, 42,113, 5, 63,241,112, 31, 64,176,119, 15, 14,163, 40,172,120,121, 3,255,
+ 0, 0, 0, 0, 64,155,192, 43, 63,250, 6,151, 64, 39, 82,170,106,177, 43, 9, 56, 25, 3,255, 0, 0, 0, 0, 64,132,118,233,
+ 63,173,111,217, 64,123,122, 67, 90,156, 29,198, 85, 91, 3,255, 0, 0, 0, 0, 63,231, 16,151,189,209,166,160, 64,178, 95,167,
+ 38,120,253, 60,122, 11, 3,255, 0, 0, 0, 0, 64, 69,200,163, 63, 38,143,178, 64,158, 48,148, 67, 13, 13,245,108, 33, 3,255,
+ 0, 0, 0, 0, 64,125, 83,204,192,105, 55,169, 64, 20,162,244, 86,184,176, 10, 49,174, 3,255, 0, 0, 0, 0, 64, 91,215,178,
+192, 62,235,222, 64,108,254,190, 75, 41,190,169, 80,101, 3,255, 0, 0, 0, 0, 63,211,156,158,191,132,228,185, 64,176,207,190,
+ 35, 92,234, 25,121, 12, 3,255, 0, 0, 0, 0, 64, 41, 76, 0,192, 5,199,190, 64,153,157, 83, 57,110,210,181,105, 10, 3,255,
+ 0, 0, 0, 0,191,199, 4,220,192,146,145, 7, 64, 83,186,104,221,147,155,119, 71, 88, 3,255, 0, 0, 0, 0,191, 86,120, 9,
+192,109, 91,149, 64,142,242, 79,237,123,174,192, 97, 38, 3,255, 0, 0, 0, 0, 63, 59, 63,242,191,152,237,210, 64,182, 21,251,
+ 16,131,230,230,124,107, 3,255, 0, 0, 0, 0,189, 94,230, 86,192, 35, 30,198, 64,169, 15,233,255, 18,200,204,115,121, 3,255,
+ 0, 0, 0, 0,192, 46, 27,208, 64, 86,104,124,192,126, 52, 85,197,137, 72,226,168,134, 3,255, 0, 0, 0, 0,191,234,168, 82,
+ 64,149, 62, 87,192, 67, 12,118,217, 5,101,188,188,210, 3,255, 0, 0, 0, 0,192, 16, 10,186, 64, 52,106,249,192,147,253,210,
+206,182, 62,131,155,198, 3,255, 0, 0, 0, 0,190,240, 33, 93, 64, 71,199,191,192,158, 47,142,245,214, 69, 40,148,199, 3,255,
+ 0, 0, 0, 0,187, 71, 46, 19, 64,115,240,194,192,142,166,175,254,240, 82,161,158, 66, 3,255, 0, 0, 0, 0,191,101,194,188,
+ 64,154, 84, 17,192, 77,193,240,235, 76,104,214,185,142, 3,255, 0, 0, 0, 0,192,115,246,246, 64, 15, 86,183,192,118,168, 51,
+172,249, 47,229,171, 45, 3,255, 0, 0, 0, 0,192,160, 1,101, 63,184,146, 47,192, 45, 38,153,146,225, 30, 96,196,102, 3,255,
+ 0, 0, 0, 0,192, 85,229,215, 63,218,178,166,192,144, 55,183,182, 38, 37,133,158,110, 3,255, 0, 0, 0, 0,192,104,178,151,
+189,205,107,245,192,147, 60,175,175,178,253,205,156, 91, 3,255, 0, 0, 0, 0,192,136, 81,192,191, 4,239, 55,192,127,222, 24,
+163,130,245,158,168, 35, 3,255, 0, 0, 0, 0,192,164,241, 70, 62,251,218,102,192, 48, 82,143,143,222, 11,210,195,110, 3,255,
+ 0, 0, 0, 0, 63,173,230,209, 64, 71,135,231,192,152,234, 27, 29,148, 67, 4,151, 11, 3,255, 0, 0, 0, 0, 64, 67,103,158,
+ 64, 51,206, 82,192,132,168, 39, 66,203, 60, 63,164,242, 3,255, 0, 0, 0, 0, 63,100,131,136, 64, 27, 95, 16,192,168,115, 4,
+ 20,122, 53,138,141,143, 3,255, 0, 0, 0, 0, 63,217,154, 77, 63, 78, 69,185,192,177,196,221, 38, 53, 17,236,135, 42, 3,255,
+ 0, 0, 0, 0, 64, 37,195,107, 63, 36,213, 4,192,167, 33, 20, 55,151, 14,194,141,168, 3,255, 0, 0, 0, 0, 64, 94,139,103,
+ 63,250,146,153,192,137,141, 72, 75, 19, 43,156,161,245, 3,255, 0, 0, 0, 0, 64, 21,195,231,191,101, 58,236,192,169,178,218,
+ 49,247,236, 31,139,218, 3,255, 0, 0, 0, 0, 64, 48, 32,142,192, 32,140,155,192,145, 1,195, 59, 3,200,178,156,204, 3,255,
+ 0, 0, 0, 0, 63,185,155, 70,191, 59,202, 12,192,180, 86,163, 32,149,239, 73,133, 91, 3,255, 0, 0, 0, 0, 62, 43, 97, 29,
+192, 2,118,144,192,175,231,125, 4,106,210,160,136,103, 3,255, 0, 0, 0, 0, 62,196,116, 97,192, 56,176, 10,192,162,239,120,
+ 8,164,194, 20,144, 81, 3,255, 0, 0, 0, 0, 64, 5, 2,185,192, 76,105,217,192,142,173,135, 45,218,187, 79,158, 56, 3,255,
+ 0, 0, 0, 0,191,144,243,163,192, 73, 41,252,192,154, 66,148,230,134,188, 73,150,107, 3,255, 0, 0, 0, 0,192, 20,133,147,
+192,124, 55,234,192,107, 3,176,204,110,170,196,175,164, 3,255, 0, 0, 0, 0,192, 60,186, 42,191,189,128,219,192,155, 43, 23,
+191, 41,222,189,150,199, 3,255, 0, 0, 0, 0,191,172,164, 52,192, 18,240,106,192,167, 58,141,226, 76,204,213,142,128, 3,255,
+ 0, 0, 0, 0,192,100,171, 12,191,243, 33,249,192,135,221,106,178,248,214,143,162,143, 3,255, 0, 0, 0, 0,192, 74, 78,195,
+192, 96,206,241,192, 94, 88, 98,188, 4,179, 34,179,129, 3,255, 0, 0, 0, 0,192,177,110, 41, 63,186, 30, 81,191,158,249,105,
+134,160, 30,165,229, 86, 3,255, 0, 0, 0, 0,192,172,138, 45, 64, 17,149,114, 62,200,203,127,137,251, 48,171, 9, 56, 3,255,
+ 0, 0, 0, 0,192,182, 94, 10, 63, 1, 5, 48,191,165, 81, 86,131,156, 12, 24,228, 94, 3,255, 0, 0, 0, 0,192,186,224,117,
+190,247,234, 37, 62,126, 56,147,128,132,246,101, 6, 46, 3,255, 0, 0, 0, 0,192,184, 78,204,189, 89,193, 19, 63,141,163,187,
+130, 22,254,208, 22,241, 3,255, 0, 0, 0, 0,192,174,232,105, 63,224,187,151, 63,153,183,156,136,137, 38,137, 25, 3, 3,255,
+ 0, 0, 0, 0,191, 68,118, 42, 64,176,173,101,191,233,132,114,238, 57,120,142,216,217, 3,255, 0, 0, 0, 0, 62,191,172, 81,
+ 64,186,208, 67,190,216,163,195, 7, 75,127,131,247,159, 3,255, 0, 0, 0, 0,191,218, 2,113, 64,171,151,172,191,212, 25,114,
+219,243,117,116,220, 30, 3,255, 0, 0, 0, 0,192, 21,244,251, 64,172, 12, 28, 61,128,151, 13,205,229,117,196, 1,226, 3,255,
+ 0, 0, 0, 0,191,223, 39, 51, 64,177, 94,248, 63, 76,122,104,217,155,121, 3, 16, 65, 3,255, 0, 0, 0, 0, 61, 28,208, 72,
+ 64,187, 13, 91, 62,245,215, 64, 0,187,127,168, 9, 66, 3,255, 0, 0, 0, 0, 64,142, 93, 45, 64, 14,137, 70,192, 70,202,147,
+ 96,241, 49,173,188,202, 3,255, 0, 0, 0, 0, 64,173, 23,106, 63,182,131,157,191,225,176,175,118, 7, 32, 20,218, 72, 3,255,
+ 0, 0, 0, 0, 64,128,203, 78, 64, 69, 14,124,192, 61, 0, 55, 88,168, 66, 80,191,199, 3,255, 0, 0, 0, 0, 64,133,175,133,
+ 64,121,149, 28,191,168,212, 51, 92, 4, 84, 86,227,170, 3,255, 0, 0, 0, 0, 64,149,211, 8, 64, 94,166, 84,191, 29, 24, 68,
+101,221, 76, 30,241,113, 3,255, 0, 0, 0, 0, 64,175,169, 31, 63,237,176,138,191,103,168, 15,119,152, 40,128,235, 11, 3,255,
+ 0, 0, 0, 0, 64, 57, 78,122,192,120, 12,224,192, 84, 56, 7, 64, 62,171,247,183,239, 3,255, 0, 0, 0, 0, 64, 48, 74, 0,
+192,155,165,245,191,227, 87,208, 61, 38,150, 68,217,192, 3,255, 0, 0, 0, 0, 64,100,108, 85,192, 76, 47,115,192, 88,224,149,
+ 77,102,185, 90,182,131, 3,255, 0, 0, 0, 0, 64,150,191,173,192, 55,233,227,191,254,101,198,102,121,192, 79,213, 73, 3,255,
+ 0, 0, 0, 0, 64,148, 97,119,192, 89, 33,200,191,150,225, 24,101, 7,182, 44,229, 20, 3,255, 0, 0, 0, 0, 64, 86,171, 75,
+192,150, 83, 36,191,133, 36, 22, 72,220,153,131,232, 32, 3,255, 0, 0, 0, 0,192, 81,251,116,192,139, 80,115,192, 10,124, 57,
+185, 81,160, 53,208,254, 3,255, 0, 0, 0, 0,192,122,239, 70,192,138,220, 53,190,227, 86,113,171, 68,160,132,246,195, 3,255,
+ 0, 0, 0, 0,192, 28, 50, 14,192,153, 4,245,192, 23, 39,141,201,187,151,215,205, 33, 3,255, 0, 0, 0, 0,191,189,123, 34,
+192,178,168,203,191,130,106,149,222,209,134, 63,234,158, 3,255, 0, 0, 0, 0,191,232,127,176,192,178,107,177,189,236,189, 47,
+216, 65,134,100,252, 66, 3,255, 0, 0, 0, 0,192, 90,168, 53,192,152, 83,169, 62,133,201,227,181, 29,152, 77, 4,136, 3,255,
+ 0, 0, 0, 0,192,150,191,173, 64, 55,233,227, 63,254,101,198,153,135, 63,177, 42,183, 3,255, 0, 0, 0, 0,192,100,108, 85,
+ 64, 76, 47,115, 64, 88,224,149,178,154, 70,166, 73,125, 3,255, 0, 0, 0, 0,192,148, 97,119, 64, 89, 33,200, 63,150,225, 24,
+154,249, 73,212, 26,236, 3,255, 0, 0, 0, 0,192, 86,171, 75, 64,150, 83, 36, 63,133, 36, 22,183, 36,102,125, 23,224, 3,255,
+ 0, 0, 0, 0,192, 48, 74, 0, 64,155,165,245, 63,227, 87,208,194,218,105,188, 38, 64, 3,255, 0, 0, 0, 0,192, 57, 78,122,
+ 64,120, 12,224, 64, 84, 56, 7,191,194, 84, 9, 72, 17, 3,255, 0, 0, 0, 0, 63,189,123, 34, 64,178,168,203, 63,130,106,149,
+ 33, 47,121,193, 21, 98, 3,255, 0, 0, 0, 0, 64, 28, 50, 14, 64,153, 4,245, 64, 23, 39,141, 54, 69,104, 41, 50,223, 3,255,
+ 0, 0, 0, 0, 63,232,127,176, 64,178,107,177, 61,236,189, 47, 39,191,121,156, 3,190, 3,255, 0, 0, 0, 0, 64, 90,168, 53,
+ 64,152, 83,169,190,133,201,227, 74,227,103,179,251,120, 3,255, 0, 0, 0, 0, 64,122,239, 70, 64,138,220, 53, 62,227, 86,113,
+ 84,188, 95,124, 9, 61, 3,255, 0, 0, 0, 0, 64, 81,251,116, 64,139, 80,115, 64, 10,124, 57, 70,175, 95,203, 47, 2, 3,255,
+ 0, 0, 0, 0, 64,186,224,117, 62,247,234, 37,190,126, 56,147,127,124, 9,155,249,210, 3,255, 0, 0, 0, 0, 64,182, 94, 10,
+191, 1, 5, 48, 63,165, 81, 86,124,100,243,232, 27,162, 3,255, 0, 0, 0, 0, 64,184, 78,204, 61, 89,193, 19,191,141,163,187,
+125,234, 1, 48,233, 15, 3,255, 0, 0, 0, 0, 64,174,232,105,191,224,187,151,191,153,183,156,119,119,217,119,230,253, 3,255,
+ 0, 0, 0, 0, 64,172,138, 45,192, 17,149,114,190,200,203,127,118, 5,207, 85,246,200, 3,255, 0, 0, 0, 0, 64,177,110, 41,
+191,186, 30, 81, 63,158,249,105,121, 96,225, 91, 26,170, 3,255, 0, 0, 0, 0, 64, 21,244,251,192,172, 12, 28,189,128,151, 13,
+ 50, 27,138, 60,254, 30, 3,255, 0, 0, 0, 0, 63,218, 2,113,192,171,151,172, 63,212, 25,114, 36, 13,138,140, 35,226, 3,255,
+ 0, 0, 0, 0, 63,223, 39, 51,192,177, 94,248,191, 76,122,104, 38,101,134,253,239,191, 3,255, 0, 0, 0, 0,189, 28,208, 72,
+192,187, 13, 91,190,245,215, 64,255, 69,128, 88,246,190, 3,255, 0, 0, 0, 0,190,191,172, 81,192,186,208, 67, 62,216,163,195,
+248,181,128,125, 8, 97, 3,255, 0, 0, 0, 0, 63, 68,118, 42,192,176,173,101, 63,233,132,114, 17,199,135,114, 39, 39, 3,255,
+ 0, 0, 0, 0,192,133,175,133,192,121,149, 28, 63,168,212, 51,163,252,171,170, 28, 86, 3,255, 0, 0, 0, 0,192,128,203, 78,
+192, 69, 14,124, 64, 61, 0, 55,167, 88,189,176, 64, 57, 3,255, 0, 0, 0, 0,192,175,169, 31,191,237,176,138, 63,103,168, 15,
+136,104,215,128, 20,245, 3,255, 0, 0, 0, 0,192,149,211, 8,192, 94,166, 84, 63, 29, 24, 68,154, 35,179,226, 14,143, 3,255,
+ 0, 0, 0, 0,192,173, 23,106,191,182,131,157, 63,225,176,175,137,249,223,236, 37,184, 3,255, 0, 0, 0, 0,192,142, 93, 45,
+192, 14,137, 70, 64, 70,202,147,159, 15,206, 83, 67, 54, 3,255, 0, 0, 0, 0,192, 5, 2,185, 64, 76,105,217, 64,142,173,135,
+210, 38, 68,177, 97,200, 3,255, 0, 0, 0, 0,190,196,116, 97, 64, 56,176, 10, 64,162,239,120,247, 92, 61,236,111,175, 3,255,
+ 0, 0, 0, 0,192, 48, 32,142, 64, 32,140,155, 64,145, 1,195,196,253, 55, 78, 99, 52, 3,255, 0, 0, 0, 0,192, 21,195,231,
+ 63,101, 58,236, 64,169,178,218,206, 9, 19,225,116, 38, 3,255, 0, 0, 0, 0,191,185,155, 70, 63, 59,202, 12, 64,180, 86,163,
+223,107, 16,183,122,165, 3,255, 0, 0, 0, 0,190, 43, 97, 29, 64, 2,118,144, 64,175,231,125,251,150, 45, 96,119,153, 3,255,
+ 0, 0, 0, 0, 64, 74, 78,195, 64, 96,206,241, 64, 94, 88, 98, 67,252, 76,222, 76,127, 3,255, 0, 0, 0, 0, 64,100,171, 12,
+ 63,243, 33,249, 64,135,221,106, 77, 8, 41,113, 93,113, 3,255, 0, 0, 0, 0, 64, 20,133,147, 64,124, 55,234, 64,107, 3,176,
+ 51,146, 85, 60, 80, 92, 3,255, 0, 0, 0, 0, 63,144,243,164, 64, 73, 41,252, 64,154, 66,148, 25,122, 67,183,105,149, 3,255,
+ 0, 0, 0, 0, 63,172,164, 52, 64, 18,240,106, 64,167, 58,141, 29,180, 51, 43,113,128, 3,255, 0, 0, 0, 0, 64, 60,186, 42,
+ 63,189,128,219, 64,155, 43, 23, 64,215, 33, 67,105, 57, 3,255, 0, 0, 0, 0, 64,160, 1,101,191,184,146, 47, 64, 45, 38,153,
+109, 31,225,160, 59,154, 3,255, 0, 0, 0, 0, 64,115,246,246,192, 15, 86,183, 64,118,168, 51, 83, 7,208, 27, 84,211, 3,255,
+ 0, 0, 0, 0, 64,164,241, 70,190,251,218,102, 64, 48, 82,143,112, 34,244, 46, 60,146, 3,255, 0, 0, 0, 0, 64,136, 81,192,
+ 63, 4,239, 55, 64,127,222, 24, 92,126, 10, 98, 87,221, 3,255, 0, 0, 0, 0, 64,104,178,151, 61,205,107,245, 64,147, 60,175,
+ 80, 78, 2, 51, 99,165, 3,255, 0, 0, 0, 0, 64, 85,229,215,191,218,178,166, 64,144, 55,183, 73,218,218,123, 97,146, 3,255,
+ 0, 0, 0, 0, 63,101,194,188,192,154, 84, 17, 64, 77,193,240, 20,180,151, 42, 70,114, 3,255, 0, 0, 0, 0, 59, 71, 46, 19,
+192,115,240,194, 64,142,166,175, 1, 16,173, 95, 97,190, 3,255, 0, 0, 0, 0, 63,234,168, 82,192,149, 62, 87, 64, 67, 12,118,
+ 38,251,154, 68, 67, 46, 3,255, 0, 0, 0, 0, 64, 46, 27,208,192, 86,104,124, 64,126, 52, 85, 58,119,183, 30, 87,122, 3,255,
+ 0, 0, 0, 0, 64, 16, 10,186,192, 52,106,249, 64,147,253,210, 49, 74,193,125,100, 58, 3,255, 0, 0, 0, 0, 62,240, 33, 93,
+192, 71,199,191, 64,158, 47,142, 10, 42,186,216,107, 57, 3,255, 0, 0, 0, 0,192, 94,139,103,191,250,146,153, 64,137,141, 72,
+180,237,212,100, 94, 11, 3,255, 0, 0, 0, 0,192, 37,195,107,191, 36,213, 4, 64,167, 33, 20,200,105,241, 62,114, 88, 3,255,
+ 0, 0, 0, 0,192, 67,103,158,192, 51,206, 82, 64,132,168, 39,189, 53,195,193, 91, 14, 3,255, 0, 0, 0, 0,191,173,230,209,
+192, 71,135,231, 64,152,234, 27,226,108,188,252,104,245, 3,255, 0, 0, 0, 0,191,217,154, 77,191, 78, 69,185, 64,177,196,221,
+217,203,238, 20,120,214, 3,255, 0, 0, 0, 0,191,100,131,136,192, 27, 95, 16, 64,168,115, 4,235,134,202,118,114,113, 3,255,
+ 0, 0, 0, 0,192, 37,220,139, 64,141,135,245,192, 54,173,114,199, 45, 96, 95,193,211, 3,255, 0, 0, 0, 0,192, 84,119,204,
+ 64,130, 73, 93,192, 38,107,212,183, 58, 88,223,199,137, 3,255, 0, 0, 0, 0,192, 67, 76,208, 64,111,120, 62,192, 85, 89, 14,
+189, 80, 81,196,183,140, 3,255, 0, 0, 0, 0,191,238,147, 68, 64,100,230,166,192,136, 9,234,215,216, 78,130,163, 59, 3,255,
+ 0, 0, 0, 0,191,109,149, 30, 64,111, 18, 40,192,141,100,171,235, 37, 81,201,159,199, 3,255, 0, 0, 0, 0,191,178,237,144,
+ 64,136,136, 25,192,113, 1,121,225,117, 92,189,173, 62, 3,255, 0, 0, 0, 0, 63, 66, 82,214, 64,152,115,128,192, 85, 25,164,
+ 16,241,104, 27,183,126, 3,255, 0, 0, 0, 0,189,171,155,119, 64,155, 40,138,192, 83, 96,113,254,128,105,196,183,238, 3,255,
+ 0, 0, 0, 0, 62,194,138, 67, 64,138, 97,177,192,124,158, 75, 8,112, 94,134,170, 29, 3,255, 0, 0, 0, 0,191, 94,106,158,
+ 64, 30,106,167,192,167,240,254,236,229, 53,187,141,105, 3,255, 0, 0, 0, 0,191,229,114, 22, 64, 20, 96,193,192,162,167,253,
+217, 22, 50, 93,144,244, 3,255, 0, 0, 0, 0,191,162,210, 45, 63,224,211,233,192,174, 67,184,228, 69, 37,245,136,244, 3,255,
+ 0, 0, 0, 0,192,152, 61, 37, 64, 14, 9,230,192, 39,179,137,152, 85, 48,183,198,226, 3,255, 0, 0, 0, 0,192,140,187,232,
+ 64, 62, 96, 6,192, 30,247,107,160, 7, 65, 68,202, 11, 3,255, 0, 0, 0, 0,192,132,134,116, 64, 40,130, 40,192, 77,207,237,
+165,139, 57,149,186, 30, 3,255, 0, 0, 0, 0,192,129,129, 12, 63,173,129,231,192,128,125,159,167, 62, 29, 15,168,123, 3,255,
+ 0, 0, 0, 0,192,134,112,254, 62,207,146,126,192,130, 19,159,164, 15, 9,119,167,117, 3,255, 0, 0, 0, 0,192,149,121,189,
+ 63,111,192,142,192, 90, 95, 76,154, 95, 20,107,180,236, 3,255, 0, 0, 0, 0,192,162, 65, 12,191,149, 84, 11,192, 44,202,172,
+145, 60,230, 47,197, 75, 3,255, 0, 0, 0, 0,192,165,120, 74,190,167, 78, 95,192, 48, 51,139,143, 54,248,140,195,244, 3,255,
+ 0, 0, 0, 0,192,150,161, 61,191, 89,221,107,192, 89,113,118,153, 40,237, 79,182, 35, 3,255, 0, 0, 0, 0,192, 66, 56, 52,
+ 62,139, 40,206,192,160,116, 21,190, 13, 6, 19,146,121, 3,255, 0, 0, 0, 0,192, 56,120,245, 63,154,213,118,192,158,227, 81,
+193, 81, 26, 47,147,133, 3,255, 0, 0, 0, 0,192, 22,104,220, 63, 40,221,204,192,170,137,115,205, 16, 14, 89,139,117, 3,255,
+ 0, 0, 0, 0, 64, 39,143,145, 64, 94, 49,190,192,124, 27,165, 56,238, 75,252,170, 43, 3,255, 0, 0, 0, 0, 64, 6,168,130,
+ 64,130,132,190,192,105, 96, 12, 45,226, 89, 91,176,173, 3,255, 0, 0, 0, 0, 63,222,169, 76, 64,104,107,205,192,136,142,150,
+ 38, 23, 79,105,163, 33, 3,255, 0, 0, 0, 0, 63,229,207,137, 64, 22, 63, 30,192,161,235,207, 39,198, 50,227,145,127, 3,255,
+ 0, 0, 0, 0, 64, 14, 11,239, 63,191,114,175,192,166,208,254, 48,133, 33, 81,142, 87, 3,255, 0, 0, 0, 0, 64, 43,222,239,
+ 64, 11,226,212,192,151, 71,227, 58, 33, 47,140,152, 91, 3,255, 0, 0, 0, 0, 64,124,245, 0, 62,187, 32, 27,192,138, 6, 57,
+ 86,138, 7,176,162, 2, 3,255, 0, 0, 0, 0, 64,112, 75, 42, 63,152, 42,228,192,139, 44, 25, 82, 0, 25,159,161, 31, 3,255,
+ 0, 0, 0, 0, 64, 82,218,178, 63, 1,247,178,192,154,129,211, 72, 35, 11, 4,150,217, 3,255, 0, 0, 0, 0, 63,104,203,208,
+ 63,113, 6,146,192,183, 5,108, 19,132, 20,150,131, 49, 3,255, 0, 0, 0, 0, 62,251, 68, 26, 63,228, 38,111,192,178, 48,114,
+ 10,139, 38,158,134,109, 3,255, 0, 0, 0, 0, 61,149, 78,163, 63,137, 25, 65,192,184,102,234, 1, 54, 23, 52,130, 34, 3,255,
+ 0, 0, 0, 0, 64, 80,140, 98,191,238,205,169,192,144, 69, 83, 71, 70,215,145,157,173, 3,255, 0, 0, 0, 0, 64,109, 39,177,
+191,147,213,155,192,140,143,238, 81, 57,230,247,160, 77, 3,255, 0, 0, 0, 0, 64, 66,225,100,191,131,191,146,192,157, 18,152,
+ 66,178,233,128,149, 25, 3,255, 0, 0, 0, 0, 63,220, 24,190,191,202,163,163,192,171,244,160, 37, 99,220,199,138,196, 3,255,
+ 0, 0, 0, 0, 63,133,219,227,192, 17, 47,172,192,169,160, 93, 23,126,206,164,140, 68, 3,255, 0, 0, 0, 0, 63,247,202, 46,
+192, 27,140, 23,192,158,252,116, 41,217,203, 77,147, 32, 3,255, 0, 0, 0, 0, 63, 68,220, 36,192,132,143, 24,192,130,105, 20,
+ 16,163,165, 66,167, 72, 3,255, 0, 0, 0, 0, 63,185,255, 60,192,108,244,215,192,138, 7,129, 31,113,175, 11,161,251, 3,255,
+ 0, 0, 0, 0, 63, 19, 18,220,192, 98,186,168,192,148,136, 66, 12,155,178,121,154,241, 3,255, 0, 0, 0, 0,187,172,119,131,
+191,162,209,182,192,183, 73,170,255,209,228,144,130,251, 3,255, 0, 0, 0, 0, 63, 40,230,165,191, 24,111,246,192,185,150, 50,
+ 14, 19,243, 18,129,113, 3,255, 0, 0, 0, 0,190, 50, 45,123,190,230, 16,213,192,186,240,160,251,231,246,124,128,109, 3,255,
+ 0, 0, 0, 0,191,199, 22,221,192,134,211, 71,192,113,161, 37,222, 98,163,255,173,157, 3,255, 0, 0, 0, 0,191, 58,131,171,
+192,140,178, 57,192,115,174,214,240,105,159,201,173, 11, 3,255, 0, 0, 0, 0,191,112,119,228,192,115, 46, 49,192,139,222,186,
+235,152,172,221,160,217, 3,255, 0, 0, 0, 0,191,254, 75,122,192, 50, 36, 18,192,152, 70, 84,211,253,195, 46,152, 87, 3,255,
+ 0, 0, 0, 0,192, 52,239,190,192, 22,186,193,192,145,240,166,194,167,204, 3,156,108, 3,255, 0, 0, 0, 0,192, 39, 23, 51,
+192, 76,245, 14,192,132,248,105,199, 29,186,137,164,200, 3,255, 0, 0, 0, 0,192,140,137,202,192, 33,234, 4,192, 60,117,152,
+159,215,200,216,192, 6, 3,255, 0, 0, 0, 0,192,115,176, 68,192, 68, 49, 85,192, 79,173, 65,172,178,189, 81,185, 81, 3,255,
+ 0, 0, 0, 0,192,128,173,131,192, 14,170, 50,192,105, 71,247,168, 30,207, 64,176,189, 3,255, 0, 0, 0, 0,192, 22, 80,230,
+191,141,155, 50,192,168, 95,108,205, 3,232, 6,141, 19, 3,255, 0, 0, 0, 0,191,194,113, 96,191,195,184,166,192,174,160, 31,
+222,205,222,245,136,227, 3,255, 0, 0, 0, 0,191,213,244,249,191, 52, 33, 10,192,178, 94,248,219,172,241, 3,134, 48, 3,255,
+ 0, 0, 0, 0,192,167, 26, 30, 64, 42, 11, 62,190,159,163,199,142, 45, 58, 26,248,236, 3,255, 0, 0, 0, 0,192,157,242, 15,
+ 64, 63, 35,177,191,132,230,242,148,115, 65,134,233, 39, 3,255, 0, 0, 0, 0,192,169,163, 58, 64, 14,207,184,191,148, 92, 43,
+140,122, 48,250,230,193, 3,255, 0, 0, 0, 0,192,184, 83,241, 63,117,241, 33,190,248, 69,204,130, 32, 20,245,246, 22, 3,255,
+ 0, 0, 0, 0,192,186,178, 88, 62,226, 33,180, 62,165,211, 69,128,153, 10, 65, 6,196, 3,255, 0, 0, 0, 0,192,181,194,100,
+ 63,178, 37,227, 62,191, 51, 65,131,199, 29,217, 7,201, 3,255, 0, 0, 0, 0,192,168, 68,140, 63, 57,100,162, 64, 31, 41, 90,
+141, 91, 15,195, 54,175, 3,255, 0, 0, 0, 0,192,173,114,185, 63,162, 11,147, 63,237,131,136,137,204, 27,106, 40,187, 3,255,
+ 0, 0, 0, 0,192,178, 82, 90, 62,168, 0,181, 63,231, 64,125,134,136, 7, 78, 39,175, 3,255, 0, 0, 0, 0,192,185, 52,235,
+191, 83,185,191,190,252,176, 39,129,201,237,211,244,241, 3,255, 0, 0, 0, 0,192,182,222, 95,190,161, 32,178,191,165, 92, 48,
+131, 90,248,208,227,211, 3,255, 0, 0, 0, 0,192,179,119, 52,191,147,204,223,191,160,141,116,133,169,230,113,228,103, 3,255,
+ 0, 0, 0, 0, 63, 35, 88,109, 64,182,186,129,191,152, 8,207, 14, 5,124,127,229,202, 3,255, 0, 0, 0, 0, 63, 99, 54,226,
+ 64,174,134,172,191,250, 98, 96, 19,180,118,244,213, 14, 3,255, 0, 0, 0, 0, 61, 60,195,150, 64,177,121, 46,191,245, 6,174,
+ 1, 84,120,249,214, 55, 3,255, 0, 0, 0, 0,191,145,160,228, 64,181, 59,121,191,123,252,246,231, 63,123,214,235, 42, 3,255,
+ 0, 0, 0, 0,191,188,166, 29, 64,181,120,167,189,165,224, 4,224, 81,123,253,253,203, 3,255, 0, 0, 0, 0,191, 9,186, 26,
+ 64,186,142,104,190,126, 74,128,243,158,127, 69,250, 88, 3,255, 0, 0, 0, 0,191, 19,205,179, 64,175,145, 33, 63,253,151,102,
+243,125,119,171, 43,167, 3,255, 0, 0, 0, 0,190,134,114,163, 64,183, 94, 81, 63,157,210, 73,250, 40,124,240, 27, 49, 3,255,
+ 0, 0, 0, 0,191,151,217,253, 64,178, 89, 90, 63,178,246,210,230, 89,121,146, 30,187, 3,255, 0, 0, 0, 0,192, 50,200,107,
+ 64,164, 21, 4,191, 18,252,143,194,229,111,189,243, 58, 3,255, 0, 0, 0, 0,192, 29,140,219, 64,163,216,164,191,187,160,163,
+202, 2,111,148,224, 27, 3,255, 0, 0, 0, 0,192, 76, 63, 8, 64,152, 92,149,191,157, 6,201,185,254,103,184,229, 25, 3,255,
+ 0, 0, 0, 0, 64,167, 31,102, 63,133,113, 18,192, 29,150,122,113,214, 22,149,202, 5, 3,255, 0, 0, 0, 0, 64,157, 48,115,
+ 63, 33,183, 74,192, 72,172, 21,107, 50, 13,106,187, 91, 3,255, 0, 0, 0, 0, 64,151, 48,250, 63,186,157,117,192, 74, 37,236,
+103, 41, 31,126,187, 23, 3,255, 0, 0, 0, 0, 64,148, 31,118, 64, 46, 99,144,192, 21,237, 95,101,101, 59,141,205,115, 3,255,
+ 0, 0, 0, 0, 64,150,177, 40, 64, 73,250,101,191,189,252,104,103, 13, 68,113,223, 39, 3,255, 0, 0, 0, 0, 64,164, 67, 59,
+ 64, 19,116,106,191,209,145, 96,111,204, 50,223,219,255, 3,255, 0, 0, 0, 0, 64,168, 99, 9, 64, 32,173,184, 63, 27, 16,129,
+114,228, 54,189, 13,164, 3,255, 0, 0, 0, 0, 64,174, 1,225, 64, 12,167, 65,190, 38, 1,199,118,149, 48, 17,252,195, 3,255,
+ 0, 0, 0, 0, 64,160,156,172, 64, 66,121, 23,188, 53,253,220,109,155, 66, 25, 0, 0, 3,255, 0, 0, 0, 0, 64,106,184,230,
+ 64,133, 83,117,191,243, 95, 76, 79,202, 90,251,214, 77, 3,255, 0, 0, 0, 0, 64,101,166,116, 64,111,107, 67,192, 47,233, 69,
+ 78, 23, 81,219,196, 34, 3,255, 0, 0, 0, 0, 64, 68, 20,109, 64,139, 9,202,192, 29,255,124, 66,138, 95, 22,202, 6, 3,255,
+ 0, 0, 0, 0, 64, 12,138, 46,192,156,168,195,192, 23,240, 99, 47,172,149, 54,203,252, 3,255, 0, 0, 0, 0, 63,201,189,110,
+192,154, 28, 48,192, 60,148,180, 34, 2,150,195,191,147, 3,255, 0, 0, 0, 0, 64, 17, 55, 21,192,140, 67,125,192, 75, 8,118,
+ 49, 61,160, 50,186,221, 3,255, 0, 0, 0, 0, 64,100,126, 85,192,114,211,103,192, 43,176,187, 78, 60,172,241,198, 2, 3,255,
+ 0, 0, 0, 0, 64,133,112, 29,192,104, 45,168,191,249, 44, 95, 90,154,176, 96,213, 48, 3,255, 0, 0, 0, 0, 64, 95,193,192,
+192,138, 5,221,191,239,219, 42, 76,181,162, 61,214,177, 3,255, 0, 0, 0, 0, 64,134, 21, 28,192,130,231,185, 62,133,210,175,
+ 91,128,166,182, 6, 33, 3,255, 0, 0, 0, 0, 64,115,101,128,192,142,100,106,190,205,174,214, 83, 32,159, 12,247,127, 3,255,
+ 0, 0, 0, 0, 64,142,250,187,192,113,123,178,190,242,120, 90, 97, 99,173,142,245,244, 3,255, 0, 0, 0, 0, 64,149, 83,115,
+192, 24,118, 25,192, 41, 5, 96,101,195,204, 61,198, 36, 3,255, 0, 0, 0, 0, 64,130, 97,236,192, 34,248,181,192, 87,132, 49,
+ 89, 17,200,184,182,144, 3,255, 0, 0, 0, 0, 64,144,103,186,191,234, 9, 91,192, 80,226,150, 98,152,216,121,184,152, 3,255,
+ 0, 0, 0, 0,192,136, 74,208,192,121,117,231,191,133,193, 32,162,248,171, 42,232,249, 3,255, 0, 0, 0, 0,192,144, 84, 31,
+192, 87, 19, 24,191,211, 65, 53,157, 74,182,248,219,224, 3,255, 0, 0, 0, 0,192,123, 90, 7,192,121,238,107,191,247,227,115,
+170, 22,171, 1,213,218, 3,255, 0, 0, 0, 0,192, 54,112,161,192,156, 77, 94,191,196,107,207,193,198,149, 23,223, 32, 3,255,
+ 0, 0, 0, 0,192, 22, 41, 24,192,169,197, 1,191, 84, 68,191,204, 45,140,105,237,172, 3,255, 0, 0, 0, 0,192, 75,243, 73,
+192,156, 16, 86,191, 33,150,180,186,216,149, 63,241,194, 3,255, 0, 0, 0, 0,192, 19,246,140,192,166, 60,148, 63,182, 70, 11,
+205,164,142,159, 31,127, 3,255, 0, 0, 0, 0,192, 58, 21, 17,192,160,209,224, 63, 88,100,103,192,202,146, 72, 18,171, 3,255,
+ 0, 0, 0, 0,192, 4,252,151,192,174, 89, 71, 63, 38, 93,215,210,148,137, 55, 14,122, 3,255, 0, 0, 0, 0,191,150,176, 53,
+192,174,252,238,191,226,172, 37,230,114,136,199,217, 20, 3,255, 0, 0, 0, 0,191,214,105,225,192,161,177,211,192, 29,229,160,
+219,197,145,175,202, 38, 3,255, 0, 0, 0, 0,191, 88,213, 62,192,167, 70,193,192, 32,217,212,237,221,141,232,200,230, 3,255,
+ 0, 0, 0, 0,192,130, 97,236, 64, 34,248,181, 64, 87,132, 49,166,239, 55, 72, 73,112, 3,255, 0, 0, 0, 0,192,144,103,186,
+ 63,234, 9, 91, 64, 80,226,150,157,104, 39,135, 71,104, 3,255, 0, 0, 0, 0,192,149, 83,115, 64, 24,118, 25, 64, 41, 5, 96,
+154, 61, 51,195, 57,220, 3,255, 0, 0, 0, 0,192,133,112, 29, 64,104, 45,168, 63,249, 44, 95,165,102, 79,160, 42,208, 3,255,
+ 0, 0, 0, 0,192, 95,193,192, 64,138, 5,221, 63,239,219, 42,179, 75, 93,195, 41, 79, 3,255, 0, 0, 0, 0,192,100,126, 85,
+ 64,114,211,103, 64, 43,176,187,177,196, 83, 15, 57,254, 3,255, 0, 0, 0, 0,191,201,189,110, 64,154, 28, 48, 64, 60,148,180,
+221,254,105, 61, 64,109, 3,255, 0, 0, 0, 0,192, 17, 55, 21, 64,140, 67,125, 64, 75, 8,118,206,195, 95,206, 69, 35, 3,255,
+ 0, 0, 0, 0,192, 12,138, 46, 64,156,168,195, 64, 23,240, 99,208, 84,106,202, 52, 4, 3,255, 0, 0, 0, 0,192,115,101,128,
+ 64,142,100,106, 62,205,174,214,172,224, 96,244, 8,129, 3,255, 0, 0, 0, 0,192,142,250,187, 64,113,123,178, 62,242,120, 90,
+158,157, 82,114, 10, 12, 3,255, 0, 0, 0, 0,192,134, 21, 28, 64,130,231,185,190,133,210,175,164,128, 89, 74,249,223, 3,255,
+ 0, 0, 0, 0, 63,214,105,225, 64,161,177,211, 64, 29,229,160, 36, 59,110, 81, 53,218, 3,255, 0, 0, 0, 0, 63, 88,213, 62,
+ 64,167, 70,193, 64, 32,217,212, 18, 35,114, 24, 55, 26, 3,255, 0, 0, 0, 0, 63,150,176, 53, 64,174,252,238, 63,226,172, 37,
+ 25,142,119, 57, 38,236, 3,255, 0, 0, 0, 0, 64, 22, 41, 24, 64,169,197, 1, 63, 84, 68,191, 51,211,115,151, 18, 84, 3,255,
+ 0, 0, 0, 0, 64, 75,243, 73, 64,156, 16, 86, 63, 33,150,180, 69, 40,106,193, 14, 62, 3,255, 0, 0, 0, 0, 64, 54,112,161,
+ 64,156, 77, 94, 63,196,107,208, 62, 58,106,233, 32,224, 3,255, 0, 0, 0, 0, 64,144, 84, 31, 64, 87, 19, 24, 63,211, 65, 53,
+ 98,182, 73, 8, 36, 32, 3,255, 0, 0, 0, 0, 64,123, 90, 7, 64,121,238,107, 63,247,227,115, 85,234, 84,255, 42, 38, 3,255,
+ 0, 0, 0, 0, 64,136, 74,208, 64,121,117,231, 63,133,193, 32, 93, 8, 84,214, 23, 7, 3,255, 0, 0, 0, 0, 64, 58, 21, 17,
+ 64,160,209,224,191, 88,100,103, 63, 54,109,184,237, 85, 3,255, 0, 0, 0, 0, 64, 4,252,151, 64,174, 89, 71,191, 38, 93,215,
+ 45,108,118,201,241,134, 3,255, 0, 0, 0, 0, 64, 19,246,140, 64,166, 60,148,191,182, 70, 11, 50, 92,113, 97,224,129, 3,255,
+ 0, 0, 0, 0, 64,182,222, 95, 62,161, 32,178, 63,165, 92, 48,124,166, 7, 48, 28, 45, 3,255, 0, 0, 0, 0, 64,179,119, 52,
+ 63,147,204,223, 63,160,141,116,122, 87, 25,143, 27,153, 3,255, 0, 0, 0, 0, 64,185, 52,235, 63, 83,185,191, 62,252,176, 39,
+126, 55, 18, 45, 11, 15, 3,255, 0, 0, 0, 0, 64,186,178, 88,190,226, 33,180,190,165,211, 69,127,103,245,191,249, 60, 3,255,
+ 0, 0, 0, 0, 64,181,194,100,191,178, 37,227,190,191, 51, 65,124, 57,226, 39,248, 55, 3,255, 0, 0, 0, 0, 64,184, 83,241,
+191,117,241, 33, 62,248, 69,204,125,224,235, 11, 9,234, 3,255, 0, 0, 0, 0, 64,157,242, 15,192, 63, 35,177, 63,132,230,242,
+107,141,190,122, 22,217, 3,255, 0, 0, 0, 0, 64,169,163, 58,192, 14,207,184, 63,148, 92, 43,115,134,207, 6, 25, 63, 3,255,
+ 0, 0, 0, 0, 64,167, 26, 30,192, 42, 11, 62, 62,159,163,199,113,211,197,230, 7, 20, 3,255, 0, 0, 0, 0, 64,173,114,185,
+191,162, 11,147,191,237,131,136,118, 52,228,150,215, 69, 3,255, 0, 0, 0, 0, 64,178, 82, 90,190,168, 0,181,191,231, 64,125,
+121,120,248,178,216, 81, 3,255, 0, 0, 0, 0, 64,168, 68,140,191, 57,100,162,192, 31, 41, 90,114,165,240, 61,201, 81, 3,255,
+ 0, 0, 0, 0, 64, 29,140,219,192,163,216,164, 63,187,160,163, 53,254,144,108, 31,229, 3,255, 0, 0, 0, 0, 64, 76, 63, 8,
+192,152, 92,149, 63,157, 6,201, 70, 2,152, 72, 26,231, 3,255, 0, 0, 0, 0, 64, 50,200,107,192,164, 21, 4, 63, 18,252,143,
+ 61, 27,144, 67, 12,198, 3,255, 0, 0, 0, 0, 63,188,166, 29,192,181,120,167, 61,165,224, 4, 31,175,132, 3, 2, 53, 3,255,
+ 0, 0, 0, 0, 63, 9,186, 26,192,186,142,104, 62,126, 74,128, 12, 98,128,187, 5,168, 3,255, 0, 0, 0, 0, 63,145,160,228,
+192,181, 59,121, 63,123,252,246, 24,193,132, 42, 20,214, 3,255, 0, 0, 0, 0,191, 99, 54,226,192,174,134,172, 63,250, 98, 96,
+236, 76,137, 12, 42,242, 3,255, 0, 0, 0, 0,189, 60,195,150,192,177,121, 46, 63,245, 6,174,254,172,135, 7, 41,201, 3,255,
+ 0, 0, 0, 0,191, 35, 88,109,192,182,186,129, 63,152, 8,207,241,251,131,129, 26, 54, 3,255, 0, 0, 0, 0, 62,134,114,163,
+192,183, 94, 81,191,157,210, 73, 5,216,131, 16,228,207, 3,255, 0, 0, 0, 0, 63,151,217,253,192,178, 89, 90,191,178,246,210,
+ 25,167,134,110,225, 69, 3,255, 0, 0, 0, 0, 63, 19,205,179,192,175,145, 33,191,253,151,102, 12,131,136, 85,212, 89, 3,255,
+ 0, 0, 0, 0,192,101,166,116,192,111,107, 67, 64, 47,233, 69,177,233,174, 37, 59,222, 3,255, 0, 0, 0, 0,192, 68, 20,109,
+192,139, 9,202, 64, 29,255,124,189,118,160,234, 53,250, 3,255, 0, 0, 0, 0,192,106,184,230,192,133, 83,117, 63,243, 95, 76,
+176, 54,165, 5, 41,179, 3,255, 0, 0, 0, 0,192,150,177, 40,192, 73,250,101, 63,189,252,104,152,243,187,143, 32,217, 3,255,
+ 0, 0, 0, 0,192,164, 67, 59,192, 19,116,106, 63,209,145, 96,144, 52,205, 33, 36, 1, 3,255, 0, 0, 0, 0,192,148, 31,118,
+192, 46, 99,144, 64, 21,237, 95,154,155,196,115, 50,141, 3,255, 0, 0, 0, 0,192,157, 48,115,191, 33,183, 74, 64, 72,172, 21,
+148,206,242,150, 68,165, 3,255, 0, 0, 0, 0,192,151, 48,250,191,186,157,117, 64, 74, 37,236,152,215,224,130, 68,233, 3,255,
+ 0, 0, 0, 0,192,167, 31,102,191,133,113, 18, 64, 29,150,122,142, 42,233,107, 53,251, 3,255, 0, 0, 0, 0,192,174, 1,225,
+192, 12,167, 65, 62, 38, 1,199,137,107,207,239, 3, 61, 3,255, 0, 0, 0, 0,192,160,156,172,192, 66,121, 23, 60, 53,253,220,
+146,101,189,231, 0, 0, 3,255, 0, 0, 0, 0,192,168, 99, 9,192, 32,173,184,191, 27, 16,129,141, 28,201, 67,242, 92, 3,255,
+ 0, 0, 0, 0,191, 19, 18,220, 64, 98,186,168, 64,148,136, 66,243,101, 77,135,101, 15, 3,255, 0, 0, 0, 0,191, 68,220, 36,
+ 64,132,143, 24, 64,130,105, 20,239, 93, 90,190, 88,184, 3,255, 0, 0, 0, 0,191,185,255, 60, 64,108,244,215, 64,138, 7,129,
+224,143, 80,245, 94, 5, 3,255, 0, 0, 0, 0,191,247,202, 46, 64, 27,140, 23, 64,158,252,116,214, 39, 52,179,108,224, 3,255,
+ 0, 0, 0, 0,191,220, 24,190, 63,202,163,163, 64,171,244,160,218,157, 35, 57,117, 60, 3,255, 0, 0, 0, 0,191,133,219,227,
+ 64, 17, 47,172, 64,169,160, 93,232,130, 49, 92,115,188, 3,255, 0, 0, 0, 0, 62, 50, 45,123, 62,230, 16,213, 64,186,240,160,
+ 4, 25, 9,132,127,147, 3,255, 0, 0, 0, 0, 59,172,119,131, 63,162,209,182, 64,183, 73,170, 0, 47, 27,112,125, 5, 3,255,
+ 0, 0, 0, 0,191, 40,230,165, 63, 24,111,246, 64,185,150, 50,241,237, 12,238,126,143, 3,255, 0, 0, 0, 0,192, 66,225,100,
+ 63,131,191,146, 64,157, 18,152,189, 78, 22,128,106,231, 3,255, 0, 0, 0, 0,192, 80,140, 98, 63,238,205,169, 64,144, 69, 83,
+184,186, 40,111, 98, 83, 3,255, 0, 0, 0, 0,192,109, 39,177, 63,147,213,154, 64,140,143,239,174,199, 25, 9, 95,179, 3,255,
+ 0, 0, 0, 0, 64,128,173,131, 64, 14,170, 50, 64,105, 71,247, 87,226, 48,192, 79, 67, 3,255, 0, 0, 0, 0, 64,140,137,202,
+ 64, 33,234, 4, 64, 60,117,152, 96, 41, 55, 40, 63,250, 3,255, 0, 0, 0, 0, 64,115,176, 68, 64, 68, 49, 85, 64, 79,173, 65,
+ 83, 78, 66,175, 70,175, 3,255, 0, 0, 0, 0, 64, 39, 23, 51, 64, 76,245, 14, 64,132,248,105, 56,227, 69,119, 91, 56, 3,255,
+ 0, 0, 0, 0, 63,254, 75,122, 64, 50, 36, 17, 64,152, 70, 83, 44, 3, 60,210,103,169, 3,255, 0, 0, 0, 0, 64, 52,239,190,
+ 64, 22,186,193, 64,145,240,166, 61, 89, 51,253, 99,148, 3,255, 0, 0, 0, 0, 63,213,244,249, 63, 52, 33, 10, 64,178, 94,248,
+ 36, 84, 14,253,121,208, 3,255, 0, 0, 0, 0, 64, 22, 80,230, 63,141,155, 50, 64,168, 95,108, 50,253, 23,250,114,237, 3,255,
+ 0, 0, 0, 0, 63,194,113, 96, 63,195,184,166, 64,174,160, 31, 33, 51, 33, 11,119, 29, 3,255, 0, 0, 0, 0, 63,112,119,228,
+ 64,115, 46, 49, 64,139,222,186, 20,104, 83, 35, 95, 40, 3,255, 0, 0, 0, 0, 63,199, 22,221, 64,134,211, 71, 64,113,161, 37,
+ 33,158, 92, 1, 82, 99, 3,255, 0, 0, 0, 0, 63, 58,131,170, 64,140,178, 58, 64,115,174,213, 15,151, 96, 55, 82,245, 3,255,
+ 0, 0, 0, 0, 64,132,134,116,192, 40,130, 40, 64, 77,207,237, 90,117,198,107, 69,226, 3,255, 0, 0, 0, 0, 64,140,187,232,
+192, 62, 96, 6, 64, 30,247,107, 95,249,190,188, 53,245, 3,255, 0, 0, 0, 0, 64,152, 61, 37,192, 14, 9,230, 64, 39,179,137,
+103,171,207, 73, 57, 30, 3,255, 0, 0, 0, 0, 64,149,121,189,191,111,192,142, 64, 90, 95, 76,101,161,235,149, 75, 20, 3,255,
+ 0, 0, 0, 0, 64,134,112,254,190,207,146,126, 64,130, 19,159, 91,241,246,137, 88,139, 3,255, 0, 0, 0, 0, 64,129,129, 12,
+191,173,129,231, 64,128,125,159, 88,194,226,241, 87,133, 3,255, 0, 0, 0, 0, 64, 22,104,220,191, 40,221,204, 64,170,137,115,
+ 50,240,241,167,116,139, 3,255, 0, 0, 0, 0, 64, 56,120,245,191,154,213,118, 64,158,227, 81, 62,175,229,209,108,123, 3,255,
+ 0, 0, 0, 0, 64, 66, 56, 52,190,139, 40,206, 64,160,116, 21, 65,243,249,237,109,135, 3,255, 0, 0, 0, 0, 64,150,161, 61,
+ 63, 89,221,107, 64, 89,113,118,102,216, 18,177, 73,221, 3,255, 0, 0, 0, 0, 64,165,120, 74, 62,167, 78, 95, 64, 48, 51,139,
+112,202, 7,116, 60, 12, 3,255, 0, 0, 0, 0, 64,162, 65, 12, 63,149, 84, 11, 64, 44,202,172,110,196, 25,209, 58,181, 3,255,
+ 0, 0, 0, 0,190,194,138, 67,192,138, 97,177, 64,124,158, 75,247,144,161,122, 85,227, 3,255, 0, 0, 0, 0,191, 66, 82,214,
+192,152,115,128, 64, 85, 25,164,239, 15,151,229, 72,130, 3,255, 0, 0, 0, 0, 61,171,155,119,192,155, 40,138, 64, 83, 96,113,
+ 1,128,150, 60, 72, 18, 3,255, 0, 0, 0, 0, 63,178,237,144,192,136,136, 25, 64,113, 1,121, 30,139,163, 67, 82,194, 3,255,
+ 0, 0, 0, 0, 63,238,147, 68,192,100,230,166, 64,136, 9,234, 40, 40,177,126, 92,197, 3,255, 0, 0, 0, 0, 63,109,149, 30,
+192,111, 18, 40, 64,141,100,171, 20,219,174, 55, 96, 57, 3,255, 0, 0, 0, 0, 63,162,210, 45,191,224,211,233, 64,174, 67,184,
+ 27,187,218, 11,119, 12, 3,255, 0, 0, 0, 0, 63, 94,106,158,192, 30,106,167, 64,167,240,254, 19, 27,202, 69,114,151, 3,255,
+ 0, 0, 0, 0, 63,229,114, 22,192, 20, 96,193, 64,162,167,253, 38,234,205,163,111, 12, 3,255, 0, 0, 0, 0, 64, 67, 76,208,
+192,111,120, 62, 64, 85, 89, 14, 66,176,174, 60, 72,116, 3,255, 0, 0, 0, 0, 64, 37,220,139,192,141,135,245, 64, 54,173,114,
+ 56,211,159,161, 62, 45, 3,255, 0, 0, 0, 0, 64, 84,119,204,192,130, 73, 93, 64, 38,107,212, 72,198,167, 33, 56,119, 3,255,
+ 0, 0, 0, 0,192, 82,218,178,191, 1,247,178, 64,154,129,211,183,221,244,252,105, 39, 3,255, 0, 0, 0, 0,192,124,245, 0,
+190,187, 32, 27, 64,138, 6, 57,169,118,248, 80, 93,254, 3,255, 0, 0, 0, 0,192,112, 75, 42,191,152, 42,228, 64,139, 44, 25,
+174, 0,230, 97, 94,225, 3,255, 0, 0, 0, 0,192, 43,222,239,192, 11,226,212, 64,151, 71,227,197,223,208,116,103,165, 3,255,
+ 0, 0, 0, 0,191,229,207,137,192, 22, 63, 30, 64,161,235,207,216, 58,205, 29,110,129, 3,255, 0, 0, 0, 0,192, 14, 11,239,
+191,191,114,175, 64,166,208,254,207,123,222,175,113,169, 3,255, 0, 0, 0, 0,189,149, 78,163,191,137, 25, 65, 64,184,102,234,
+254,202,232,204,125,222, 3,255, 0, 0, 0, 0,191,104,203,208,191,113, 6,146, 64,183, 5,108,236,124,235,106,124,207, 3,255,
+ 0, 0, 0, 0,190,251, 68, 26,191,228, 38,111, 64,178, 48,114,245,117,217, 98,121,147, 3,255, 0, 0, 0, 0,191,222,169, 76,
+192,104,107,205, 64,136,142,150,217,233,176,151, 92,223, 3,255, 0, 0, 0, 0,192, 39,143,145,192, 94, 49,190, 64,124, 27,165,
+199, 18,180, 4, 85,213, 3,255, 0, 0, 0, 0,192, 6,168,130,192,130,132,190, 64,105, 96, 12,210, 30,166,165, 79, 83, 3,255,
+ 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 1, 44, 13, 65,151,128, 0, 0, 1, 35, 0, 0, 0, 5, 0, 0, 0, 3, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12,118,112, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 90, 0, 12,118,112, 32, 0, 0, 0, 55, 0, 0, 7,128, 0, 0, 0, 0, 0, 0, 0,162,
+ 0, 0, 0, 35, 0, 0, 0, 42, 0, 0, 0,162, 0, 0, 0, 35, 0, 0, 0, 12, 0, 0, 0,163, 0, 0, 0, 35, 0, 0, 0, 42,
+ 0, 0, 0,163, 0, 0, 0, 35, 0, 0, 0, 1, 0, 0, 0,164, 0, 0, 0, 35, 0, 0, 0, 43, 0, 0, 0,164, 0, 0, 0, 35,
+ 0, 0, 0, 12, 0, 0, 0,165, 0, 0, 0, 35, 0, 0, 0, 43, 0, 0, 0,165, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0,166,
+ 0, 0, 0, 35, 0, 0, 0, 44, 0, 0, 0,166, 0, 0, 0, 35, 0, 0, 0, 13, 0, 0, 0,167, 0, 0, 0, 35, 0, 0, 0, 44,
+ 0, 0, 0,167, 0, 0, 0, 35, 0, 0, 0, 2, 0, 0, 0,168, 0, 0, 0, 35, 0, 0, 0, 45, 0, 0, 0,168, 0, 0, 0, 35,
+ 0, 0, 0, 13, 0, 0, 0,169, 0, 0, 0, 35, 0, 0, 0, 45, 0, 0, 0,169, 0, 0, 0, 35, 0, 0, 0, 1, 0, 0, 0,170,
+ 0, 0, 0, 35, 0, 0, 0, 46, 0, 0, 0,170, 0, 0, 0, 35, 0, 0, 0, 14, 0, 0, 0,171, 0, 0, 0, 35, 0, 0, 0, 46,
+ 0, 0, 0,171, 0, 0, 0, 35, 0, 0, 0, 2, 0, 0, 0,172, 0, 0, 0, 35, 0, 0, 0, 47, 0, 0, 0,172, 0, 0, 0, 35,
+ 0, 0, 0, 14, 0, 0, 0,173, 0, 0, 0, 35, 0, 0, 0, 47, 0, 0, 0,173, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0,174,
+ 0, 0, 0, 35, 0, 0, 0, 48, 0, 0, 0,174, 0, 0, 0, 35, 0, 0, 0, 15, 0, 0, 0,175, 0, 0, 0, 35, 0, 0, 0, 48,
+ 0, 0, 0,175, 0, 0, 0, 35, 0, 0, 0, 5, 0, 0, 0,176, 0, 0, 0, 35, 0, 0, 0, 49, 0, 0, 0,176, 0, 0, 0, 35,
+ 0, 0, 0, 15, 0, 0, 0,177, 0, 0, 0, 35, 0, 0, 0, 49, 0, 0, 0,177, 0, 0, 0, 35, 0, 0, 0, 1, 0, 0, 0,178,
+ 0, 0, 0, 35, 0, 0, 0, 50, 0, 0, 0,178, 0, 0, 0, 35, 0, 0, 0, 16, 0, 0, 0,179, 0, 0, 0, 35, 0, 0, 0, 50,
+ 0, 0, 0,179, 0, 0, 0, 35, 0, 0, 0, 5, 0, 0, 0,180, 0, 0, 0, 35, 0, 0, 0, 51, 0, 0, 0,180, 0, 0, 0, 35,
+ 0, 0, 0, 16, 0, 0, 0,181, 0, 0, 0, 35, 0, 0, 0, 51, 0, 0, 0,181, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0,182,
+ 0, 0, 0, 35, 0, 0, 0, 52, 0, 0, 0,182, 0, 0, 0, 35, 0, 0, 0, 17, 0, 0, 0,183, 0, 0, 0, 35, 0, 0, 0, 52,
+ 0, 0, 0,183, 0, 0, 0, 35, 0, 0, 0, 3, 0, 0, 0,184, 0, 0, 0, 35, 0, 0, 0, 53, 0, 0, 0,184, 0, 0, 0, 35,
+ 0, 0, 0, 17, 0, 0, 0,185, 0, 0, 0, 35, 0, 0, 0, 53, 0, 0, 0,185, 0, 0, 0, 35, 0, 0, 0, 2, 0, 0, 0,186,
+ 0, 0, 0, 35, 0, 0, 0, 54, 0, 0, 0,186, 0, 0, 0, 35, 0, 0, 0, 18, 0, 0, 0,187, 0, 0, 0, 35, 0, 0, 0, 54,
+ 0, 0, 0,187, 0, 0, 0, 35, 0, 0, 0, 3, 0, 0, 0,188, 0, 0, 0, 35, 0, 0, 0, 55, 0, 0, 0,188, 0, 0, 0, 35,
+ 0, 0, 0, 18, 0, 0, 0,189, 0, 0, 0, 35, 0, 0, 0, 55, 0, 0, 0,189, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0,190,
+ 0, 0, 0, 35, 0, 0, 0, 56, 0, 0, 0,190, 0, 0, 0, 35, 0, 0, 0, 19, 0, 0, 0,191, 0, 0, 0, 35, 0, 0, 0, 56,
+ 0, 0, 0,191, 0, 0, 0, 35, 0, 0, 0, 4, 0, 0, 0,192, 0, 0, 0, 35, 0, 0, 0, 57, 0, 0, 0,192, 0, 0, 0, 35,
+ 0, 0, 0, 19, 0, 0, 0,193, 0, 0, 0, 35, 0, 0, 0, 57, 0, 0, 0,193, 0, 0, 0, 35, 0, 0, 0, 3, 0, 0, 0,194,
+ 0, 0, 0, 35, 0, 0, 0, 58, 0, 0, 0,194, 0, 0, 0, 35, 0, 0, 0, 20, 0, 0, 0,195, 0, 0, 0, 35, 0, 0, 0, 58,
+ 0, 0, 0,195, 0, 0, 0, 35, 0, 0, 0, 4, 0, 0, 0,196, 0, 0, 0, 35, 0, 0, 0, 59, 0, 0, 0,196, 0, 0, 0, 35,
+ 0, 0, 0, 20, 0, 0, 0,197, 0, 0, 0, 35, 0, 0, 0, 59, 0, 0, 0,197, 0, 0, 0, 35, 0, 0, 0, 4, 0, 0, 0,198,
+ 0, 0, 0, 35, 0, 0, 0, 60, 0, 0, 0,198, 0, 0, 0, 35, 0, 0, 0, 21, 0, 0, 0,199, 0, 0, 0, 35, 0, 0, 0, 60,
+ 0, 0, 0,199, 0, 0, 0, 35, 0, 0, 0, 5, 0, 0, 0,200, 0, 0, 0, 35, 0, 0, 0, 61, 0, 0, 0,200, 0, 0, 0, 35,
+ 0, 0, 0, 21, 0, 0, 0,201, 0, 0, 0, 35, 0, 0, 0, 61, 0, 0, 0,201, 0, 0, 0, 35, 0, 0, 0, 5, 0, 0, 0,202,
+ 0, 0, 0, 35, 0, 0, 0, 62, 0, 0, 0,202, 0, 0, 0, 35, 0, 0, 0, 22, 0, 0, 0,203, 0, 0, 0, 35, 0, 0, 0, 62,
+ 0, 0, 0,203, 0, 0, 0, 35, 0, 0, 0, 10, 0, 0, 0,204, 0, 0, 0, 35, 0, 0, 0, 63, 0, 0, 0,204, 0, 0, 0, 35,
+ 0, 0, 0, 22, 0, 0, 0,205, 0, 0, 0, 35, 0, 0, 0, 63, 0, 0, 0,205, 0, 0, 0, 35, 0, 0, 0, 1, 0, 0, 0,206,
+ 0, 0, 0, 35, 0, 0, 0, 64, 0, 0, 0,206, 0, 0, 0, 35, 0, 0, 0, 23, 0, 0, 0,207, 0, 0, 0, 35, 0, 0, 0, 64,
+ 0, 0, 0,207, 0, 0, 0, 35, 0, 0, 0, 10, 0, 0, 0,208, 0, 0, 0, 35, 0, 0, 0, 65, 0, 0, 0,208, 0, 0, 0, 35,
+ 0, 0, 0, 23, 0, 0, 0,209, 0, 0, 0, 35, 0, 0, 0, 65, 0, 0, 0,209, 0, 0, 0, 35, 0, 0, 0, 1, 0, 0, 0,210,
+ 0, 0, 0, 35, 0, 0, 0, 66, 0, 0, 0,210, 0, 0, 0, 35, 0, 0, 0, 24, 0, 0, 0,211, 0, 0, 0, 35, 0, 0, 0, 66,
+ 0, 0, 0,211, 0, 0, 0, 35, 0, 0, 0, 6, 0, 0, 0,212, 0, 0, 0, 35, 0, 0, 0, 67, 0, 0, 0,212, 0, 0, 0, 35,
+ 0, 0, 0, 24, 0, 0, 0,213, 0, 0, 0, 35, 0, 0, 0, 67, 0, 0, 0,213, 0, 0, 0, 35, 0, 0, 0, 2, 0, 0, 0,214,
+ 0, 0, 0, 35, 0, 0, 0, 68, 0, 0, 0,214, 0, 0, 0, 35, 0, 0, 0, 25, 0, 0, 0,215, 0, 0, 0, 35, 0, 0, 0, 68,
+ 0, 0, 0,215, 0, 0, 0, 35, 0, 0, 0, 6, 0, 0, 0,216, 0, 0, 0, 35, 0, 0, 0, 69, 0, 0, 0,216, 0, 0, 0, 35,
+ 0, 0, 0, 25, 0, 0, 0,217, 0, 0, 0, 35, 0, 0, 0, 69, 0, 0, 0,217, 0, 0, 0, 35, 0, 0, 0, 2, 0, 0, 0,218,
+ 0, 0, 0, 35, 0, 0, 0, 70, 0, 0, 0,218, 0, 0, 0, 35, 0, 0, 0, 26, 0, 0, 0,219, 0, 0, 0, 35, 0, 0, 0, 70,
+ 0, 0, 0,219, 0, 0, 0, 35, 0, 0, 0, 7, 0, 0, 0,220, 0, 0, 0, 35, 0, 0, 0, 71, 0, 0, 0,220, 0, 0, 0, 35,
+ 0, 0, 0, 26, 0, 0, 0,221, 0, 0, 0, 35, 0, 0, 0, 71, 0, 0, 0,221, 0, 0, 0, 35, 0, 0, 0, 3, 0, 0, 0,222,
+ 0, 0, 0, 35, 0, 0, 0, 72, 0, 0, 0,222, 0, 0, 0, 35, 0, 0, 0, 27, 0, 0, 0,223, 0, 0, 0, 35, 0, 0, 0, 72,
+ 0, 0, 0,223, 0, 0, 0, 35, 0, 0, 0, 7, 0, 0, 0,224, 0, 0, 0, 35, 0, 0, 0, 73, 0, 0, 0,224, 0, 0, 0, 35,
+ 0, 0, 0, 27, 0, 0, 0,225, 0, 0, 0, 35, 0, 0, 0, 73, 0, 0, 0,225, 0, 0, 0, 35, 0, 0, 0, 3, 0, 0, 0,226,
+ 0, 0, 0, 35, 0, 0, 0, 74, 0, 0, 0,226, 0, 0, 0, 35, 0, 0, 0, 28, 0, 0, 0,227, 0, 0, 0, 35, 0, 0, 0, 74,
+ 0, 0, 0,227, 0, 0, 0, 35, 0, 0, 0, 8, 0, 0, 0,228, 0, 0, 0, 35, 0, 0, 0, 75, 0, 0, 0,228, 0, 0, 0, 35,
+ 0, 0, 0, 28, 0, 0, 0,229, 0, 0, 0, 35, 0, 0, 0, 75, 0, 0, 0,229, 0, 0, 0, 35, 0, 0, 0, 4, 0, 0, 0,230,
+ 0, 0, 0, 35, 0, 0, 0, 76, 0, 0, 0,230, 0, 0, 0, 35, 0, 0, 0, 29, 0, 0, 0,231, 0, 0, 0, 35, 0, 0, 0, 76,
+ 0, 0, 0,231, 0, 0, 0, 35, 0, 0, 0, 8, 0, 0, 0,232, 0, 0, 0, 35, 0, 0, 0, 77, 0, 0, 0,232, 0, 0, 0, 35,
+ 0, 0, 0, 29, 0, 0, 0,233, 0, 0, 0, 35, 0, 0, 0, 77, 0, 0, 0,233, 0, 0, 0, 35, 0, 0, 0, 4, 0, 0, 0,234,
+ 0, 0, 0, 35, 0, 0, 0, 78, 0, 0, 0,234, 0, 0, 0, 35, 0, 0, 0, 30, 0, 0, 0,235, 0, 0, 0, 35, 0, 0, 0, 78,
+ 0, 0, 0,235, 0, 0, 0, 35, 0, 0, 0, 9, 0, 0, 0,236, 0, 0, 0, 35, 0, 0, 0, 79, 0, 0, 0,236, 0, 0, 0, 35,
+ 0, 0, 0, 30, 0, 0, 0,237, 0, 0, 0, 35, 0, 0, 0, 79, 0, 0, 0,237, 0, 0, 0, 35, 0, 0, 0, 5, 0, 0, 0,238,
+ 0, 0, 0, 35, 0, 0, 0, 80, 0, 0, 0,238, 0, 0, 0, 35, 0, 0, 0, 31, 0, 0, 0,239, 0, 0, 0, 35, 0, 0, 0, 80,
+ 0, 0, 0,239, 0, 0, 0, 35, 0, 0, 0, 9, 0, 0, 0,240, 0, 0, 0, 35, 0, 0, 0, 81, 0, 0, 0,240, 0, 0, 0, 35,
+ 0, 0, 0, 31, 0, 0, 0,241, 0, 0, 0, 35, 0, 0, 0, 81, 0, 0, 0,241, 0, 0, 0, 35, 0, 0, 0, 6, 0, 0, 0,242,
+ 0, 0, 0, 35, 0, 0, 0, 82, 0, 0, 0,242, 0, 0, 0, 35, 0, 0, 0, 32, 0, 0, 0,243, 0, 0, 0, 35, 0, 0, 0, 82,
+ 0, 0, 0,243, 0, 0, 0, 35, 0, 0, 0, 10, 0, 0, 0,244, 0, 0, 0, 35, 0, 0, 0, 83, 0, 0, 0,244, 0, 0, 0, 35,
+ 0, 0, 0, 32, 0, 0, 0,245, 0, 0, 0, 35, 0, 0, 0, 83, 0, 0, 0,245, 0, 0, 0, 35, 0, 0, 0, 6, 0, 0, 0,246,
+ 0, 0, 0, 35, 0, 0, 0, 84, 0, 0, 0,246, 0, 0, 0, 35, 0, 0, 0, 33, 0, 0, 0,247, 0, 0, 0, 35, 0, 0, 0, 84,
+ 0, 0, 0,247, 0, 0, 0, 35, 0, 0, 0, 7, 0, 0, 0,248, 0, 0, 0, 35, 0, 0, 0, 85, 0, 0, 0,248, 0, 0, 0, 35,
+ 0, 0, 0, 33, 0, 0, 0,249, 0, 0, 0, 35, 0, 0, 0, 85, 0, 0, 0,249, 0, 0, 0, 35, 0, 0, 0, 7, 0, 0, 0,250,
+ 0, 0, 0, 35, 0, 0, 0, 86, 0, 0, 0,250, 0, 0, 0, 35, 0, 0, 0, 34, 0, 0, 0,251, 0, 0, 0, 35, 0, 0, 0, 86,
+ 0, 0, 0,251, 0, 0, 0, 35, 0, 0, 0, 8, 0, 0, 0,252, 0, 0, 0, 35, 0, 0, 0, 87, 0, 0, 0,252, 0, 0, 0, 35,
+ 0, 0, 0, 34, 0, 0, 0,253, 0, 0, 0, 35, 0, 0, 0, 87, 0, 0, 0,253, 0, 0, 0, 35, 0, 0, 0, 8, 0, 0, 0,254,
+ 0, 0, 0, 35, 0, 0, 0, 88, 0, 0, 0,254, 0, 0, 0, 35, 0, 0, 0, 35, 0, 0, 0,255, 0, 0, 0, 35, 0, 0, 0, 88,
+ 0, 0, 0,255, 0, 0, 0, 35, 0, 0, 0, 9, 0, 0, 1, 0, 0, 0, 0, 35, 0, 0, 0, 89, 0, 0, 1, 0, 0, 0, 0, 35,
+ 0, 0, 0, 35, 0, 0, 1, 1, 0, 0, 0, 35, 0, 0, 0, 89, 0, 0, 1, 1, 0, 0, 0, 35, 0, 0, 0, 9, 0, 0, 1, 2,
+ 0, 0, 0, 35, 0, 0, 0, 90, 0, 0, 1, 2, 0, 0, 0, 35, 0, 0, 0, 36, 0, 0, 1, 3, 0, 0, 0, 35, 0, 0, 0, 90,
+ 0, 0, 1, 3, 0, 0, 0, 35, 0, 0, 0, 10, 0, 0, 1, 4, 0, 0, 0, 35, 0, 0, 0, 91, 0, 0, 1, 4, 0, 0, 0, 35,
+ 0, 0, 0, 36, 0, 0, 1, 5, 0, 0, 0, 35, 0, 0, 0, 91, 0, 0, 1, 5, 0, 0, 0, 35, 0, 0, 0, 10, 0, 0, 1, 6,
+ 0, 0, 0, 35, 0, 0, 0, 92, 0, 0, 1, 6, 0, 0, 0, 35, 0, 0, 0, 37, 0, 0, 1, 7, 0, 0, 0, 35, 0, 0, 0, 92,
+ 0, 0, 1, 7, 0, 0, 0, 35, 0, 0, 0, 11, 0, 0, 1, 8, 0, 0, 0, 35, 0, 0, 0, 93, 0, 0, 1, 8, 0, 0, 0, 35,
+ 0, 0, 0, 37, 0, 0, 1, 9, 0, 0, 0, 35, 0, 0, 0, 93, 0, 0, 1, 9, 0, 0, 0, 35, 0, 0, 0, 6, 0, 0, 1, 10,
+ 0, 0, 0, 35, 0, 0, 0, 94, 0, 0, 1, 10, 0, 0, 0, 35, 0, 0, 0, 38, 0, 0, 1, 11, 0, 0, 0, 35, 0, 0, 0, 94,
+ 0, 0, 1, 11, 0, 0, 0, 35, 0, 0, 0, 11, 0, 0, 1, 12, 0, 0, 0, 35, 0, 0, 0, 95, 0, 0, 1, 12, 0, 0, 0, 35,
+ 0, 0, 0, 38, 0, 0, 1, 13, 0, 0, 0, 35, 0, 0, 0, 95, 0, 0, 1, 13, 0, 0, 0, 35, 0, 0, 0, 7, 0, 0, 1, 14,
+ 0, 0, 0, 35, 0, 0, 0, 96, 0, 0, 1, 14, 0, 0, 0, 35, 0, 0, 0, 39, 0, 0, 1, 15, 0, 0, 0, 35, 0, 0, 0, 96,
+ 0, 0, 1, 15, 0, 0, 0, 35, 0, 0, 0, 11, 0, 0, 1, 16, 0, 0, 0, 35, 0, 0, 0, 97, 0, 0, 1, 16, 0, 0, 0, 35,
+ 0, 0, 0, 39, 0, 0, 1, 17, 0, 0, 0, 35, 0, 0, 0, 97, 0, 0, 1, 17, 0, 0, 0, 35, 0, 0, 0, 8, 0, 0, 1, 18,
+ 0, 0, 0, 35, 0, 0, 0, 98, 0, 0, 1, 18, 0, 0, 0, 35, 0, 0, 0, 40, 0, 0, 1, 19, 0, 0, 0, 35, 0, 0, 0, 98,
+ 0, 0, 1, 19, 0, 0, 0, 35, 0, 0, 0, 11, 0, 0, 1, 20, 0, 0, 0, 35, 0, 0, 0, 99, 0, 0, 1, 20, 0, 0, 0, 35,
+ 0, 0, 0, 40, 0, 0, 1, 21, 0, 0, 0, 35, 0, 0, 0, 99, 0, 0, 1, 21, 0, 0, 0, 35, 0, 0, 0, 9, 0, 0, 1, 22,
+ 0, 0, 0, 35, 0, 0, 0,100, 0, 0, 1, 22, 0, 0, 0, 35, 0, 0, 0, 41, 0, 0, 1, 23, 0, 0, 0, 35, 0, 0, 0,100,
+ 0, 0, 1, 23, 0, 0, 0, 35, 0, 0, 0, 11, 0, 0, 1, 24, 0, 0, 0, 35, 0, 0, 0,101, 0, 0, 1, 24, 0, 0, 0, 35,
+ 0, 0, 0, 41, 0, 0, 1, 25, 0, 0, 0, 35, 0, 0, 0,101, 0, 0, 1, 25, 0, 0, 0, 35, 0, 0, 0, 12, 0, 0, 1, 26,
+ 0, 0, 0, 35, 0, 0, 0,102, 0, 0, 1, 26, 0, 0, 0, 35, 0, 0, 0, 14, 0, 0, 1, 27, 0, 0, 0, 35, 0, 0, 0,102,
+ 0, 0, 1, 27, 0, 0, 0, 35, 0, 0, 0, 12, 0, 0, 1, 28, 0, 0, 0, 35, 0, 0, 0,103, 0, 0, 1, 28, 0, 0, 0, 35,
+ 0, 0, 0, 13, 0, 0, 1, 29, 0, 0, 0, 35, 0, 0, 0,103, 0, 0, 1, 29, 0, 0, 0, 35, 0, 0, 0, 13, 0, 0, 1, 30,
+ 0, 0, 0, 35, 0, 0, 0,104, 0, 0, 1, 30, 0, 0, 0, 35, 0, 0, 0, 14, 0, 0, 1, 31, 0, 0, 0, 35, 0, 0, 0,104,
+ 0, 0, 1, 31, 0, 0, 0, 35, 0, 0, 0, 12, 0, 0, 1, 32, 0, 0, 0, 35, 0, 0, 0,105, 0, 0, 1, 32, 0, 0, 0, 35,
+ 0, 0, 0, 16, 0, 0, 1, 33, 0, 0, 0, 35, 0, 0, 0,105, 0, 0, 1, 33, 0, 0, 0, 35, 0, 0, 0, 12, 0, 0, 1, 34,
+ 0, 0, 0, 35, 0, 0, 0,106, 0, 0, 1, 34, 0, 0, 0, 35, 0, 0, 0, 15, 0, 0, 1, 35, 0, 0, 0, 35, 0, 0, 0,106,
+ 0, 0, 1, 35, 0, 0, 0, 35, 0, 0, 0, 15, 0, 0, 1, 36, 0, 0, 0, 35, 0, 0, 0,107, 0, 0, 1, 36, 0, 0, 0, 35,
+ 0, 0, 0, 16, 0, 0, 1, 37, 0, 0, 0, 35, 0, 0, 0,107, 0, 0, 1, 37, 0, 0, 0, 35, 0, 0, 0, 13, 0, 0, 1, 38,
+ 0, 0, 0, 35, 0, 0, 0,108, 0, 0, 1, 38, 0, 0, 0, 35, 0, 0, 0, 18, 0, 0, 1, 39, 0, 0, 0, 35, 0, 0, 0,108,
+ 0, 0, 1, 39, 0, 0, 0, 35, 0, 0, 0, 13, 0, 0, 1, 40, 0, 0, 0, 35, 0, 0, 0,109, 0, 0, 1, 40, 0, 0, 0, 35,
+ 0, 0, 0, 17, 0, 0, 1, 41, 0, 0, 0, 35, 0, 0, 0,109, 0, 0, 1, 41, 0, 0, 0, 35, 0, 0, 0, 17, 0, 0, 1, 42,
+ 0, 0, 0, 35, 0, 0, 0,110, 0, 0, 1, 42, 0, 0, 0, 35, 0, 0, 0, 18, 0, 0, 1, 43, 0, 0, 0, 35, 0, 0, 0,110,
+ 0, 0, 1, 43, 0, 0, 0, 35, 0, 0, 0, 17, 0, 0, 1, 44, 0, 0, 0, 35, 0, 0, 0,111, 0, 0, 1, 44, 0, 0, 0, 35,
+ 0, 0, 0, 20, 0, 0, 1, 45, 0, 0, 0, 35, 0, 0, 0,111, 0, 0, 1, 45, 0, 0, 0, 35, 0, 0, 0, 17, 0, 0, 1, 46,
+ 0, 0, 0, 35, 0, 0, 0,112, 0, 0, 1, 46, 0, 0, 0, 35, 0, 0, 0, 19, 0, 0, 1, 47, 0, 0, 0, 35, 0, 0, 0,112,
+ 0, 0, 1, 47, 0, 0, 0, 35, 0, 0, 0, 19, 0, 0, 1, 48, 0, 0, 0, 35, 0, 0, 0,113, 0, 0, 1, 48, 0, 0, 0, 35,
+ 0, 0, 0, 20, 0, 0, 1, 49, 0, 0, 0, 35, 0, 0, 0,113, 0, 0, 1, 49, 0, 0, 0, 35, 0, 0, 0, 19, 0, 0, 1, 50,
+ 0, 0, 0, 35, 0, 0, 0,114, 0, 0, 1, 50, 0, 0, 0, 35, 0, 0, 0, 21, 0, 0, 1, 51, 0, 0, 0, 35, 0, 0, 0,114,
+ 0, 0, 1, 51, 0, 0, 0, 35, 0, 0, 0, 15, 0, 0, 1, 52, 0, 0, 0, 35, 0, 0, 0,115, 0, 0, 1, 52, 0, 0, 0, 35,
+ 0, 0, 0, 19, 0, 0, 1, 53, 0, 0, 0, 35, 0, 0, 0,115, 0, 0, 1, 53, 0, 0, 0, 35, 0, 0, 0, 15, 0, 0, 1, 54,
+ 0, 0, 0, 35, 0, 0, 0,116, 0, 0, 1, 54, 0, 0, 0, 35, 0, 0, 0, 21, 0, 0, 1, 55, 0, 0, 0, 35, 0, 0, 0,116,
+ 0, 0, 1, 55, 0, 0, 0, 35, 0, 0, 0, 16, 0, 0, 1, 56, 0, 0, 0, 35, 0, 0, 0,117, 0, 0, 1, 56, 0, 0, 0, 35,
+ 0, 0, 0, 23, 0, 0, 1, 57, 0, 0, 0, 35, 0, 0, 0,117, 0, 0, 1, 57, 0, 0, 0, 35, 0, 0, 0, 16, 0, 0, 1, 58,
+ 0, 0, 0, 35, 0, 0, 0,118, 0, 0, 1, 58, 0, 0, 0, 35, 0, 0, 0, 22, 0, 0, 1, 59, 0, 0, 0, 35, 0, 0, 0,118,
+ 0, 0, 1, 59, 0, 0, 0, 35, 0, 0, 0, 22, 0, 0, 1, 60, 0, 0, 0, 35, 0, 0, 0,119, 0, 0, 1, 60, 0, 0, 0, 35,
+ 0, 0, 0, 23, 0, 0, 1, 61, 0, 0, 0, 35, 0, 0, 0,119, 0, 0, 1, 61, 0, 0, 0, 35, 0, 0, 0, 14, 0, 0, 1, 62,
+ 0, 0, 0, 35, 0, 0, 0,120, 0, 0, 1, 62, 0, 0, 0, 35, 0, 0, 0, 25, 0, 0, 1, 63, 0, 0, 0, 35, 0, 0, 0,120,
+ 0, 0, 1, 63, 0, 0, 0, 35, 0, 0, 0, 14, 0, 0, 1, 64, 0, 0, 0, 35, 0, 0, 0,121, 0, 0, 1, 64, 0, 0, 0, 35,
+ 0, 0, 0, 24, 0, 0, 1, 65, 0, 0, 0, 35, 0, 0, 0,121, 0, 0, 1, 65, 0, 0, 0, 35, 0, 0, 0, 24, 0, 0, 1, 66,
+ 0, 0, 0, 35, 0, 0, 0,122, 0, 0, 1, 66, 0, 0, 0, 35, 0, 0, 0, 25, 0, 0, 1, 67, 0, 0, 0, 35, 0, 0, 0,122,
+ 0, 0, 1, 67, 0, 0, 0, 35, 0, 0, 0, 18, 0, 0, 1, 68, 0, 0, 0, 35, 0, 0, 0,123, 0, 0, 1, 68, 0, 0, 0, 35,
+ 0, 0, 0, 27, 0, 0, 1, 69, 0, 0, 0, 35, 0, 0, 0,123, 0, 0, 1, 69, 0, 0, 0, 35, 0, 0, 0, 18, 0, 0, 1, 70,
+ 0, 0, 0, 35, 0, 0, 0,124, 0, 0, 1, 70, 0, 0, 0, 35, 0, 0, 0, 26, 0, 0, 1, 71, 0, 0, 0, 35, 0, 0, 0,124,
+ 0, 0, 1, 71, 0, 0, 0, 35, 0, 0, 0, 26, 0, 0, 1, 72, 0, 0, 0, 35, 0, 0, 0,125, 0, 0, 1, 72, 0, 0, 0, 35,
+ 0, 0, 0, 27, 0, 0, 1, 73, 0, 0, 0, 35, 0, 0, 0,125, 0, 0, 1, 73, 0, 0, 0, 35, 0, 0, 0, 20, 0, 0, 1, 74,
+ 0, 0, 0, 35, 0, 0, 0,126, 0, 0, 1, 74, 0, 0, 0, 35, 0, 0, 0, 29, 0, 0, 1, 75, 0, 0, 0, 35, 0, 0, 0,126,
+ 0, 0, 1, 75, 0, 0, 0, 35, 0, 0, 0, 20, 0, 0, 1, 76, 0, 0, 0, 35, 0, 0, 0,127, 0, 0, 1, 76, 0, 0, 0, 35,
+ 0, 0, 0, 28, 0, 0, 1, 77, 0, 0, 0, 35, 0, 0, 0,127, 0, 0, 1, 77, 0, 0, 0, 35, 0, 0, 0, 28, 0, 0, 1, 78,
+ 0, 0, 0, 35, 0, 0, 0,128, 0, 0, 1, 78, 0, 0, 0, 35, 0, 0, 0, 29, 0, 0, 1, 79, 0, 0, 0, 35, 0, 0, 0,128,
+ 0, 0, 1, 79, 0, 0, 0, 35, 0, 0, 0, 21, 0, 0, 1, 80, 0, 0, 0, 35, 0, 0, 0,129, 0, 0, 1, 80, 0, 0, 0, 35,
+ 0, 0, 0, 31, 0, 0, 1, 81, 0, 0, 0, 35, 0, 0, 0,129, 0, 0, 1, 81, 0, 0, 0, 35, 0, 0, 0, 21, 0, 0, 1, 82,
+ 0, 0, 0, 35, 0, 0, 0,130, 0, 0, 1, 82, 0, 0, 0, 35, 0, 0, 0, 30, 0, 0, 1, 83, 0, 0, 0, 35, 0, 0, 0,130,
+ 0, 0, 1, 83, 0, 0, 0, 35, 0, 0, 0, 30, 0, 0, 1, 84, 0, 0, 0, 35, 0, 0, 0,131, 0, 0, 1, 84, 0, 0, 0, 35,
+ 0, 0, 0, 31, 0, 0, 1, 85, 0, 0, 0, 35, 0, 0, 0,131, 0, 0, 1, 85, 0, 0, 0, 35, 0, 0, 0, 23, 0, 0, 1, 86,
+ 0, 0, 0, 35, 0, 0, 0,132, 0, 0, 1, 86, 0, 0, 0, 35, 0, 0, 0, 32, 0, 0, 1, 87, 0, 0, 0, 35, 0, 0, 0,132,
+ 0, 0, 1, 87, 0, 0, 0, 35, 0, 0, 0, 23, 0, 0, 1, 88, 0, 0, 0, 35, 0, 0, 0,133, 0, 0, 1, 88, 0, 0, 0, 35,
+ 0, 0, 0, 24, 0, 0, 1, 89, 0, 0, 0, 35, 0, 0, 0,133, 0, 0, 1, 89, 0, 0, 0, 35, 0, 0, 0, 24, 0, 0, 1, 90,
+ 0, 0, 0, 35, 0, 0, 0,134, 0, 0, 1, 90, 0, 0, 0, 35, 0, 0, 0, 32, 0, 0, 1, 91, 0, 0, 0, 35, 0, 0, 0,134,
+ 0, 0, 1, 91, 0, 0, 0, 35, 0, 0, 0, 25, 0, 0, 1, 92, 0, 0, 0, 35, 0, 0, 0,135, 0, 0, 1, 92, 0, 0, 0, 35,
+ 0, 0, 0, 33, 0, 0, 1, 93, 0, 0, 0, 35, 0, 0, 0,135, 0, 0, 1, 93, 0, 0, 0, 35, 0, 0, 0, 25, 0, 0, 1, 94,
+ 0, 0, 0, 35, 0, 0, 0,136, 0, 0, 1, 94, 0, 0, 0, 35, 0, 0, 0, 26, 0, 0, 1, 95, 0, 0, 0, 35, 0, 0, 0,136,
+ 0, 0, 1, 95, 0, 0, 0, 35, 0, 0, 0, 26, 0, 0, 1, 96, 0, 0, 0, 35, 0, 0, 0,137, 0, 0, 1, 96, 0, 0, 0, 35,
+ 0, 0, 0, 33, 0, 0, 1, 97, 0, 0, 0, 35, 0, 0, 0,137, 0, 0, 1, 97, 0, 0, 0, 35, 0, 0, 0, 27, 0, 0, 1, 98,
+ 0, 0, 0, 35, 0, 0, 0,138, 0, 0, 1, 98, 0, 0, 0, 35, 0, 0, 0, 34, 0, 0, 1, 99, 0, 0, 0, 35, 0, 0, 0,138,
+ 0, 0, 1, 99, 0, 0, 0, 35, 0, 0, 0, 27, 0, 0, 1,100, 0, 0, 0, 35, 0, 0, 0,139, 0, 0, 1,100, 0, 0, 0, 35,
+ 0, 0, 0, 28, 0, 0, 1,101, 0, 0, 0, 35, 0, 0, 0,139, 0, 0, 1,101, 0, 0, 0, 35, 0, 0, 0, 28, 0, 0, 1,102,
+ 0, 0, 0, 35, 0, 0, 0,140, 0, 0, 1,102, 0, 0, 0, 35, 0, 0, 0, 34, 0, 0, 1,103, 0, 0, 0, 35, 0, 0, 0,140,
+ 0, 0, 1,103, 0, 0, 0, 35, 0, 0, 0, 29, 0, 0, 1,104, 0, 0, 0, 35, 0, 0, 0,141, 0, 0, 1,104, 0, 0, 0, 35,
+ 0, 0, 0, 35, 0, 0, 1,105, 0, 0, 0, 35, 0, 0, 0,141, 0, 0, 1,105, 0, 0, 0, 35, 0, 0, 0, 29, 0, 0, 1,106,
+ 0, 0, 0, 35, 0, 0, 0,142, 0, 0, 1,106, 0, 0, 0, 35, 0, 0, 0, 30, 0, 0, 1,107, 0, 0, 0, 35, 0, 0, 0,142,
+ 0, 0, 1,107, 0, 0, 0, 35, 0, 0, 0, 30, 0, 0, 1,108, 0, 0, 0, 35, 0, 0, 0,143, 0, 0, 1,108, 0, 0, 0, 35,
+ 0, 0, 0, 35, 0, 0, 1,109, 0, 0, 0, 35, 0, 0, 0,143, 0, 0, 1,109, 0, 0, 0, 35, 0, 0, 0, 31, 0, 0, 1,110,
+ 0, 0, 0, 35, 0, 0, 0,144, 0, 0, 1,110, 0, 0, 0, 35, 0, 0, 0, 36, 0, 0, 1,111, 0, 0, 0, 35, 0, 0, 0,144,
+ 0, 0, 1,111, 0, 0, 0, 35, 0, 0, 0, 22, 0, 0, 1,112, 0, 0, 0, 35, 0, 0, 0,145, 0, 0, 1,112, 0, 0, 0, 35,
+ 0, 0, 0, 31, 0, 0, 1,113, 0, 0, 0, 35, 0, 0, 0,145, 0, 0, 1,113, 0, 0, 0, 35, 0, 0, 0, 22, 0, 0, 1,114,
+ 0, 0, 0, 35, 0, 0, 0,146, 0, 0, 1,114, 0, 0, 0, 35, 0, 0, 0, 36, 0, 0, 1,115, 0, 0, 0, 35, 0, 0, 0,146,
+ 0, 0, 1,115, 0, 0, 0, 35, 0, 0, 0, 32, 0, 0, 1,116, 0, 0, 0, 35, 0, 0, 0,147, 0, 0, 1,116, 0, 0, 0, 35,
+ 0, 0, 0, 38, 0, 0, 1,117, 0, 0, 0, 35, 0, 0, 0,147, 0, 0, 1,117, 0, 0, 0, 35, 0, 0, 0, 32, 0, 0, 1,118,
+ 0, 0, 0, 35, 0, 0, 0,148, 0, 0, 1,118, 0, 0, 0, 35, 0, 0, 0, 37, 0, 0, 1,119, 0, 0, 0, 35, 0, 0, 0,148,
+ 0, 0, 1,119, 0, 0, 0, 35, 0, 0, 0, 37, 0, 0, 1,120, 0, 0, 0, 35, 0, 0, 0,149, 0, 0, 1,120, 0, 0, 0, 35,
+ 0, 0, 0, 38, 0, 0, 1,121, 0, 0, 0, 35, 0, 0, 0,149, 0, 0, 1,121, 0, 0, 0, 35, 0, 0, 0, 33, 0, 0, 1,122,
+ 0, 0, 0, 35, 0, 0, 0,150, 0, 0, 1,122, 0, 0, 0, 35, 0, 0, 0, 39, 0, 0, 1,123, 0, 0, 0, 35, 0, 0, 0,150,
+ 0, 0, 1,123, 0, 0, 0, 35, 0, 0, 0, 33, 0, 0, 1,124, 0, 0, 0, 35, 0, 0, 0,151, 0, 0, 1,124, 0, 0, 0, 35,
+ 0, 0, 0, 38, 0, 0, 1,125, 0, 0, 0, 35, 0, 0, 0,151, 0, 0, 1,125, 0, 0, 0, 35, 0, 0, 0, 38, 0, 0, 1,126,
+ 0, 0, 0, 35, 0, 0, 0,152, 0, 0, 1,126, 0, 0, 0, 35, 0, 0, 0, 39, 0, 0, 1,127, 0, 0, 0, 35, 0, 0, 0,152,
+ 0, 0, 1,127, 0, 0, 0, 35, 0, 0, 0, 34, 0, 0, 1,128, 0, 0, 0, 35, 0, 0, 0,153, 0, 0, 1,128, 0, 0, 0, 35,
+ 0, 0, 0, 40, 0, 0, 1,129, 0, 0, 0, 35, 0, 0, 0,153, 0, 0, 1,129, 0, 0, 0, 35, 0, 0, 0, 34, 0, 0, 1,130,
+ 0, 0, 0, 35, 0, 0, 0,154, 0, 0, 1,130, 0, 0, 0, 35, 0, 0, 0, 39, 0, 0, 1,131, 0, 0, 0, 35, 0, 0, 0,154,
+ 0, 0, 1,131, 0, 0, 0, 35, 0, 0, 0, 39, 0, 0, 1,132, 0, 0, 0, 35, 0, 0, 0,155, 0, 0, 1,132, 0, 0, 0, 35,
+ 0, 0, 0, 40, 0, 0, 1,133, 0, 0, 0, 35, 0, 0, 0,155, 0, 0, 1,133, 0, 0, 0, 35, 0, 0, 0, 35, 0, 0, 1,134,
+ 0, 0, 0, 35, 0, 0, 0,156, 0, 0, 1,134, 0, 0, 0, 35, 0, 0, 0, 41, 0, 0, 1,135, 0, 0, 0, 35, 0, 0, 0,156,
+ 0, 0, 1,135, 0, 0, 0, 35, 0, 0, 0, 35, 0, 0, 1,136, 0, 0, 0, 35, 0, 0, 0,157, 0, 0, 1,136, 0, 0, 0, 35,
+ 0, 0, 0, 40, 0, 0, 1,137, 0, 0, 0, 35, 0, 0, 0,157, 0, 0, 1,137, 0, 0, 0, 35, 0, 0, 0, 40, 0, 0, 1,138,
+ 0, 0, 0, 35, 0, 0, 0,158, 0, 0, 1,138, 0, 0, 0, 35, 0, 0, 0, 41, 0, 0, 1,139, 0, 0, 0, 35, 0, 0, 0,158,
+ 0, 0, 1,139, 0, 0, 0, 35, 0, 0, 0, 36, 0, 0, 1,140, 0, 0, 0, 35, 0, 0, 0,159, 0, 0, 1,140, 0, 0, 0, 35,
+ 0, 0, 0, 37, 0, 0, 1,141, 0, 0, 0, 35, 0, 0, 0,159, 0, 0, 1,141, 0, 0, 0, 35, 0, 0, 0, 36, 0, 0, 1,142,
+ 0, 0, 0, 35, 0, 0, 0,160, 0, 0, 1,142, 0, 0, 0, 35, 0, 0, 0, 41, 0, 0, 1,143, 0, 0, 0, 35, 0, 0, 0,160,
+ 0, 0, 1,143, 0, 0, 0, 35, 0, 0, 0, 37, 0, 0, 1,144, 0, 0, 0, 35, 0, 0, 0,161, 0, 0, 1,144, 0, 0, 0, 35,
+ 0, 0, 0, 41, 0, 0, 1,145, 0, 0, 0, 35, 0, 0, 0,161, 0, 0, 1,145, 0, 0, 0, 35, 0, 0, 0, 46, 0, 0, 1,146,
+ 0, 0, 0, 35, 0, 0, 0,102, 0, 0, 1,146, 0, 0, 0, 35, 0, 0, 0, 43, 0, 0, 1,147, 0, 0, 0, 33, 0, 0, 0, 46,
+ 0, 0, 1,147, 0, 0, 0, 33, 0, 0, 0, 43, 0, 0, 1,148, 0, 0, 0, 35, 0, 0, 0,102, 0, 0, 1,148, 0, 0, 0, 35,
+ 0, 0, 0,102, 0, 0, 1,149, 0, 0, 0, 35, 0, 0, 0,103, 0, 0, 1,149, 0, 0, 0, 35, 0, 0, 0,103, 0, 0, 1,150,
+ 0, 0, 0, 35, 0, 0, 0,104, 0, 0, 1,150, 0, 0, 0, 35, 0, 0, 0,102, 0, 0, 1,151, 0, 0, 0, 35, 0, 0, 0,104,
+ 0, 0, 1,151, 0, 0, 0, 35, 0, 0, 0, 45, 0, 0, 1,152, 0, 0, 0, 33, 0, 0, 0, 47, 0, 0, 1,152, 0, 0, 0, 33,
+ 0, 0, 0, 47, 0, 0, 1,153, 0, 0, 0, 35, 0, 0, 0,104, 0, 0, 1,153, 0, 0, 0, 35, 0, 0, 0, 45, 0, 0, 1,154,
+ 0, 0, 0, 35, 0, 0, 0,104, 0, 0, 1,154, 0, 0, 0, 35, 0, 0, 0, 44, 0, 0, 1,155, 0, 0, 0, 35, 0, 0, 0,103,
+ 0, 0, 1,155, 0, 0, 0, 35, 0, 0, 0, 42, 0, 0, 1,156, 0, 0, 0, 35, 0, 0, 0,103, 0, 0, 1,156, 0, 0, 0, 35,
+ 0, 0, 0, 42, 0, 0, 1,157, 0, 0, 0, 33, 0, 0, 0, 44, 0, 0, 1,157, 0, 0, 0, 33, 0, 0, 0, 50, 0, 0, 1,158,
+ 0, 0, 0, 35, 0, 0, 0,105, 0, 0, 1,158, 0, 0, 0, 35, 0, 0, 0, 43, 0, 0, 1,159, 0, 0, 0, 33, 0, 0, 0, 50,
+ 0, 0, 1,159, 0, 0, 0, 33, 0, 0, 0, 43, 0, 0, 1,160, 0, 0, 0, 35, 0, 0, 0,105, 0, 0, 1,160, 0, 0, 0, 35,
+ 0, 0, 0,105, 0, 0, 1,161, 0, 0, 0, 35, 0, 0, 0,106, 0, 0, 1,161, 0, 0, 0, 35, 0, 0, 0,106, 0, 0, 1,162,
+ 0, 0, 0, 35, 0, 0, 0,107, 0, 0, 1,162, 0, 0, 0, 35, 0, 0, 0,105, 0, 0, 1,163, 0, 0, 0, 35, 0, 0, 0,107,
+ 0, 0, 1,163, 0, 0, 0, 35, 0, 0, 0, 49, 0, 0, 1,164, 0, 0, 0, 33, 0, 0, 0, 51, 0, 0, 1,164, 0, 0, 0, 33,
+ 0, 0, 0, 51, 0, 0, 1,165, 0, 0, 0, 35, 0, 0, 0,107, 0, 0, 1,165, 0, 0, 0, 35, 0, 0, 0, 49, 0, 0, 1,166,
+ 0, 0, 0, 35, 0, 0, 0,107, 0, 0, 1,166, 0, 0, 0, 35, 0, 0, 0, 48, 0, 0, 1,167, 0, 0, 0, 35, 0, 0, 0,106,
+ 0, 0, 1,167, 0, 0, 0, 35, 0, 0, 0, 42, 0, 0, 1,168, 0, 0, 0, 35, 0, 0, 0,106, 0, 0, 1,168, 0, 0, 0, 35,
+ 0, 0, 0, 42, 0, 0, 1,169, 0, 0, 0, 33, 0, 0, 0, 48, 0, 0, 1,169, 0, 0, 0, 33, 0, 0, 0, 54, 0, 0, 1,170,
+ 0, 0, 0, 35, 0, 0, 0,108, 0, 0, 1,170, 0, 0, 0, 35, 0, 0, 0, 45, 0, 0, 1,171, 0, 0, 0, 33, 0, 0, 0, 54,
+ 0, 0, 1,171, 0, 0, 0, 33, 0, 0, 0, 45, 0, 0, 1,172, 0, 0, 0, 35, 0, 0, 0,108, 0, 0, 1,172, 0, 0, 0, 35,
+ 0, 0, 0,108, 0, 0, 1,173, 0, 0, 0, 35, 0, 0, 0,109, 0, 0, 1,173, 0, 0, 0, 35, 0, 0, 0,109, 0, 0, 1,174,
+ 0, 0, 0, 35, 0, 0, 0,110, 0, 0, 1,174, 0, 0, 0, 35, 0, 0, 0,108, 0, 0, 1,175, 0, 0, 0, 35, 0, 0, 0,110,
+ 0, 0, 1,175, 0, 0, 0, 35, 0, 0, 0, 53, 0, 0, 1,176, 0, 0, 0, 33, 0, 0, 0, 55, 0, 0, 1,176, 0, 0, 0, 33,
+ 0, 0, 0, 55, 0, 0, 1,177, 0, 0, 0, 35, 0, 0, 0,110, 0, 0, 1,177, 0, 0, 0, 35, 0, 0, 0, 53, 0, 0, 1,178,
+ 0, 0, 0, 35, 0, 0, 0,110, 0, 0, 1,178, 0, 0, 0, 35, 0, 0, 0, 52, 0, 0, 1,179, 0, 0, 0, 35, 0, 0, 0,109,
+ 0, 0, 1,179, 0, 0, 0, 35, 0, 0, 0, 44, 0, 0, 1,180, 0, 0, 0, 35, 0, 0, 0,109, 0, 0, 1,180, 0, 0, 0, 35,
+ 0, 0, 0, 44, 0, 0, 1,181, 0, 0, 0, 33, 0, 0, 0, 52, 0, 0, 1,181, 0, 0, 0, 33, 0, 0, 0, 58, 0, 0, 1,182,
+ 0, 0, 0, 35, 0, 0, 0,111, 0, 0, 1,182, 0, 0, 0, 35, 0, 0, 0, 53, 0, 0, 1,183, 0, 0, 0, 33, 0, 0, 0, 58,
+ 0, 0, 1,183, 0, 0, 0, 33, 0, 0, 0, 53, 0, 0, 1,184, 0, 0, 0, 35, 0, 0, 0,111, 0, 0, 1,184, 0, 0, 0, 35,
+ 0, 0, 0,111, 0, 0, 1,185, 0, 0, 0, 35, 0, 0, 0,112, 0, 0, 1,185, 0, 0, 0, 35, 0, 0, 0,112, 0, 0, 1,186,
+ 0, 0, 0, 35, 0, 0, 0,113, 0, 0, 1,186, 0, 0, 0, 35, 0, 0, 0,111, 0, 0, 1,187, 0, 0, 0, 35, 0, 0, 0,113,
+ 0, 0, 1,187, 0, 0, 0, 35, 0, 0, 0, 57, 0, 0, 1,188, 0, 0, 0, 33, 0, 0, 0, 59, 0, 0, 1,188, 0, 0, 0, 33,
+ 0, 0, 0, 59, 0, 0, 1,189, 0, 0, 0, 35, 0, 0, 0,113, 0, 0, 1,189, 0, 0, 0, 35, 0, 0, 0, 57, 0, 0, 1,190,
+ 0, 0, 0, 35, 0, 0, 0,113, 0, 0, 1,190, 0, 0, 0, 35, 0, 0, 0, 56, 0, 0, 1,191, 0, 0, 0, 35, 0, 0, 0,112,
+ 0, 0, 1,191, 0, 0, 0, 35, 0, 0, 0, 52, 0, 0, 1,192, 0, 0, 0, 35, 0, 0, 0,112, 0, 0, 1,192, 0, 0, 0, 35,
+ 0, 0, 0, 52, 0, 0, 1,193, 0, 0, 0, 33, 0, 0, 0, 56, 0, 0, 1,193, 0, 0, 0, 33, 0, 0, 0, 60, 0, 0, 1,194,
+ 0, 0, 0, 35, 0, 0, 0,114, 0, 0, 1,194, 0, 0, 0, 35, 0, 0, 0, 57, 0, 0, 1,195, 0, 0, 0, 33, 0, 0, 0, 60,
+ 0, 0, 1,195, 0, 0, 0, 33, 0, 0, 0, 57, 0, 0, 1,196, 0, 0, 0, 35, 0, 0, 0,114, 0, 0, 1,196, 0, 0, 0, 35,
+ 0, 0, 0,114, 0, 0, 1,197, 0, 0, 0, 35, 0, 0, 0,115, 0, 0, 1,197, 0, 0, 0, 35, 0, 0, 0,115, 0, 0, 1,198,
+ 0, 0, 0, 35, 0, 0, 0,116, 0, 0, 1,198, 0, 0, 0, 35, 0, 0, 0,114, 0, 0, 1,199, 0, 0, 0, 35, 0, 0, 0,116,
+ 0, 0, 1,199, 0, 0, 0, 35, 0, 0, 0, 49, 0, 0, 1,200, 0, 0, 0, 33, 0, 0, 0, 61, 0, 0, 1,200, 0, 0, 0, 33,
+ 0, 0, 0, 61, 0, 0, 1,201, 0, 0, 0, 35, 0, 0, 0,116, 0, 0, 1,201, 0, 0, 0, 35, 0, 0, 0, 49, 0, 0, 1,202,
+ 0, 0, 0, 35, 0, 0, 0,116, 0, 0, 1,202, 0, 0, 0, 35, 0, 0, 0, 48, 0, 0, 1,203, 0, 0, 0, 35, 0, 0, 0,115,
+ 0, 0, 1,203, 0, 0, 0, 35, 0, 0, 0, 56, 0, 0, 1,204, 0, 0, 0, 35, 0, 0, 0,115, 0, 0, 1,204, 0, 0, 0, 35,
+ 0, 0, 0, 48, 0, 0, 1,205, 0, 0, 0, 33, 0, 0, 0, 56, 0, 0, 1,205, 0, 0, 0, 33, 0, 0, 0, 64, 0, 0, 1,206,
+ 0, 0, 0, 35, 0, 0, 0,117, 0, 0, 1,206, 0, 0, 0, 35, 0, 0, 0, 50, 0, 0, 1,207, 0, 0, 0, 33, 0, 0, 0, 64,
+ 0, 0, 1,207, 0, 0, 0, 33, 0, 0, 0, 50, 0, 0, 1,208, 0, 0, 0, 35, 0, 0, 0,117, 0, 0, 1,208, 0, 0, 0, 35,
+ 0, 0, 0,117, 0, 0, 1,209, 0, 0, 0, 35, 0, 0, 0,118, 0, 0, 1,209, 0, 0, 0, 35, 0, 0, 0,118, 0, 0, 1,210,
+ 0, 0, 0, 35, 0, 0, 0,119, 0, 0, 1,210, 0, 0, 0, 35, 0, 0, 0,117, 0, 0, 1,211, 0, 0, 0, 35, 0, 0, 0,119,
+ 0, 0, 1,211, 0, 0, 0, 35, 0, 0, 0, 63, 0, 0, 1,212, 0, 0, 0, 33, 0, 0, 0, 65, 0, 0, 1,212, 0, 0, 0, 33,
+ 0, 0, 0, 65, 0, 0, 1,213, 0, 0, 0, 35, 0, 0, 0,119, 0, 0, 1,213, 0, 0, 0, 35, 0, 0, 0, 63, 0, 0, 1,214,
+ 0, 0, 0, 35, 0, 0, 0,119, 0, 0, 1,214, 0, 0, 0, 35, 0, 0, 0, 62, 0, 0, 1,215, 0, 0, 0, 35, 0, 0, 0,118,
+ 0, 0, 1,215, 0, 0, 0, 35, 0, 0, 0, 51, 0, 0, 1,216, 0, 0, 0, 35, 0, 0, 0,118, 0, 0, 1,216, 0, 0, 0, 35,
+ 0, 0, 0, 51, 0, 0, 1,217, 0, 0, 0, 33, 0, 0, 0, 62, 0, 0, 1,217, 0, 0, 0, 33, 0, 0, 0, 68, 0, 0, 1,218,
+ 0, 0, 0, 35, 0, 0, 0,120, 0, 0, 1,218, 0, 0, 0, 35, 0, 0, 0, 47, 0, 0, 1,219, 0, 0, 0, 33, 0, 0, 0, 68,
+ 0, 0, 1,219, 0, 0, 0, 33, 0, 0, 0, 47, 0, 0, 1,220, 0, 0, 0, 35, 0, 0, 0,120, 0, 0, 1,220, 0, 0, 0, 35,
+ 0, 0, 0,120, 0, 0, 1,221, 0, 0, 0, 35, 0, 0, 0,121, 0, 0, 1,221, 0, 0, 0, 35, 0, 0, 0,121, 0, 0, 1,222,
+ 0, 0, 0, 35, 0, 0, 0,122, 0, 0, 1,222, 0, 0, 0, 35, 0, 0, 0,120, 0, 0, 1,223, 0, 0, 0, 35, 0, 0, 0,122,
+ 0, 0, 1,223, 0, 0, 0, 35, 0, 0, 0, 67, 0, 0, 1,224, 0, 0, 0, 33, 0, 0, 0, 69, 0, 0, 1,224, 0, 0, 0, 33,
+ 0, 0, 0, 69, 0, 0, 1,225, 0, 0, 0, 35, 0, 0, 0,122, 0, 0, 1,225, 0, 0, 0, 35, 0, 0, 0, 67, 0, 0, 1,226,
+ 0, 0, 0, 35, 0, 0, 0,122, 0, 0, 1,226, 0, 0, 0, 35, 0, 0, 0, 66, 0, 0, 1,227, 0, 0, 0, 35, 0, 0, 0,121,
+ 0, 0, 1,227, 0, 0, 0, 35, 0, 0, 0, 46, 0, 0, 1,228, 0, 0, 0, 35, 0, 0, 0,121, 0, 0, 1,228, 0, 0, 0, 35,
+ 0, 0, 0, 46, 0, 0, 1,229, 0, 0, 0, 33, 0, 0, 0, 66, 0, 0, 1,229, 0, 0, 0, 33, 0, 0, 0, 72, 0, 0, 1,230,
+ 0, 0, 0, 35, 0, 0, 0,123, 0, 0, 1,230, 0, 0, 0, 35, 0, 0, 0, 55, 0, 0, 1,231, 0, 0, 0, 33, 0, 0, 0, 72,
+ 0, 0, 1,231, 0, 0, 0, 33, 0, 0, 0, 55, 0, 0, 1,232, 0, 0, 0, 35, 0, 0, 0,123, 0, 0, 1,232, 0, 0, 0, 35,
+ 0, 0, 0,123, 0, 0, 1,233, 0, 0, 0, 35, 0, 0, 0,124, 0, 0, 1,233, 0, 0, 0, 35, 0, 0, 0,124, 0, 0, 1,234,
+ 0, 0, 0, 35, 0, 0, 0,125, 0, 0, 1,234, 0, 0, 0, 35, 0, 0, 0,123, 0, 0, 1,235, 0, 0, 0, 35, 0, 0, 0,125,
+ 0, 0, 1,235, 0, 0, 0, 35, 0, 0, 0, 71, 0, 0, 1,236, 0, 0, 0, 33, 0, 0, 0, 73, 0, 0, 1,236, 0, 0, 0, 33,
+ 0, 0, 0, 73, 0, 0, 1,237, 0, 0, 0, 35, 0, 0, 0,125, 0, 0, 1,237, 0, 0, 0, 35, 0, 0, 0, 71, 0, 0, 1,238,
+ 0, 0, 0, 35, 0, 0, 0,125, 0, 0, 1,238, 0, 0, 0, 35, 0, 0, 0, 70, 0, 0, 1,239, 0, 0, 0, 35, 0, 0, 0,124,
+ 0, 0, 1,239, 0, 0, 0, 35, 0, 0, 0, 54, 0, 0, 1,240, 0, 0, 0, 35, 0, 0, 0,124, 0, 0, 1,240, 0, 0, 0, 35,
+ 0, 0, 0, 54, 0, 0, 1,241, 0, 0, 0, 33, 0, 0, 0, 70, 0, 0, 1,241, 0, 0, 0, 33, 0, 0, 0, 76, 0, 0, 1,242,
+ 0, 0, 0, 35, 0, 0, 0,126, 0, 0, 1,242, 0, 0, 0, 35, 0, 0, 0, 59, 0, 0, 1,243, 0, 0, 0, 33, 0, 0, 0, 76,
+ 0, 0, 1,243, 0, 0, 0, 33, 0, 0, 0, 59, 0, 0, 1,244, 0, 0, 0, 35, 0, 0, 0,126, 0, 0, 1,244, 0, 0, 0, 35,
+ 0, 0, 0,126, 0, 0, 1,245, 0, 0, 0, 35, 0, 0, 0,127, 0, 0, 1,245, 0, 0, 0, 35, 0, 0, 0,127, 0, 0, 1,246,
+ 0, 0, 0, 35, 0, 0, 0,128, 0, 0, 1,246, 0, 0, 0, 35, 0, 0, 0,126, 0, 0, 1,247, 0, 0, 0, 35, 0, 0, 0,128,
+ 0, 0, 1,247, 0, 0, 0, 35, 0, 0, 0, 75, 0, 0, 1,248, 0, 0, 0, 33, 0, 0, 0, 77, 0, 0, 1,248, 0, 0, 0, 33,
+ 0, 0, 0, 77, 0, 0, 1,249, 0, 0, 0, 35, 0, 0, 0,128, 0, 0, 1,249, 0, 0, 0, 35, 0, 0, 0, 75, 0, 0, 1,250,
+ 0, 0, 0, 35, 0, 0, 0,128, 0, 0, 1,250, 0, 0, 0, 35, 0, 0, 0, 74, 0, 0, 1,251, 0, 0, 0, 35, 0, 0, 0,127,
+ 0, 0, 1,251, 0, 0, 0, 35, 0, 0, 0, 58, 0, 0, 1,252, 0, 0, 0, 35, 0, 0, 0,127, 0, 0, 1,252, 0, 0, 0, 35,
+ 0, 0, 0, 58, 0, 0, 1,253, 0, 0, 0, 33, 0, 0, 0, 74, 0, 0, 1,253, 0, 0, 0, 33, 0, 0, 0, 80, 0, 0, 1,254,
+ 0, 0, 0, 35, 0, 0, 0,129, 0, 0, 1,254, 0, 0, 0, 35, 0, 0, 0, 61, 0, 0, 1,255, 0, 0, 0, 33, 0, 0, 0, 80,
+ 0, 0, 1,255, 0, 0, 0, 33, 0, 0, 0, 61, 0, 0, 2, 0, 0, 0, 0, 35, 0, 0, 0,129, 0, 0, 2, 0, 0, 0, 0, 35,
+ 0, 0, 0,129, 0, 0, 2, 1, 0, 0, 0, 35, 0, 0, 0,130, 0, 0, 2, 1, 0, 0, 0, 35, 0, 0, 0,130, 0, 0, 2, 2,
+ 0, 0, 0, 35, 0, 0, 0,131, 0, 0, 2, 2, 0, 0, 0, 35, 0, 0, 0,129, 0, 0, 2, 3, 0, 0, 0, 35, 0, 0, 0,131,
+ 0, 0, 2, 3, 0, 0, 0, 35, 0, 0, 0, 79, 0, 0, 2, 4, 0, 0, 0, 33, 0, 0, 0, 81, 0, 0, 2, 4, 0, 0, 0, 33,
+ 0, 0, 0, 81, 0, 0, 2, 5, 0, 0, 0, 35, 0, 0, 0,131, 0, 0, 2, 5, 0, 0, 0, 35, 0, 0, 0, 79, 0, 0, 2, 6,
+ 0, 0, 0, 35, 0, 0, 0,131, 0, 0, 2, 6, 0, 0, 0, 35, 0, 0, 0, 78, 0, 0, 2, 7, 0, 0, 0, 35, 0, 0, 0,130,
+ 0, 0, 2, 7, 0, 0, 0, 35, 0, 0, 0, 60, 0, 0, 2, 8, 0, 0, 0, 35, 0, 0, 0,130, 0, 0, 2, 8, 0, 0, 0, 35,
+ 0, 0, 0, 60, 0, 0, 2, 9, 0, 0, 0, 33, 0, 0, 0, 78, 0, 0, 2, 9, 0, 0, 0, 33, 0, 0, 0, 83, 0, 0, 2, 10,
+ 0, 0, 0, 35, 0, 0, 0,132, 0, 0, 2, 10, 0, 0, 0, 35, 0, 0, 0, 65, 0, 0, 2, 11, 0, 0, 0, 33, 0, 0, 0, 83,
+ 0, 0, 2, 11, 0, 0, 0, 33, 0, 0, 0, 65, 0, 0, 2, 12, 0, 0, 0, 35, 0, 0, 0,132, 0, 0, 2, 12, 0, 0, 0, 35,
+ 0, 0, 0,132, 0, 0, 2, 13, 0, 0, 0, 35, 0, 0, 0,133, 0, 0, 2, 13, 0, 0, 0, 35, 0, 0, 0,133, 0, 0, 2, 14,
+ 0, 0, 0, 35, 0, 0, 0,134, 0, 0, 2, 14, 0, 0, 0, 35, 0, 0, 0,132, 0, 0, 2, 15, 0, 0, 0, 35, 0, 0, 0,134,
+ 0, 0, 2, 15, 0, 0, 0, 35, 0, 0, 0, 67, 0, 0, 2, 16, 0, 0, 0, 33, 0, 0, 0, 82, 0, 0, 2, 16, 0, 0, 0, 33,
+ 0, 0, 0, 82, 0, 0, 2, 17, 0, 0, 0, 35, 0, 0, 0,134, 0, 0, 2, 17, 0, 0, 0, 35, 0, 0, 0, 67, 0, 0, 2, 18,
+ 0, 0, 0, 35, 0, 0, 0,134, 0, 0, 2, 18, 0, 0, 0, 35, 0, 0, 0, 66, 0, 0, 2, 19, 0, 0, 0, 35, 0, 0, 0,133,
+ 0, 0, 2, 19, 0, 0, 0, 35, 0, 0, 0, 64, 0, 0, 2, 20, 0, 0, 0, 35, 0, 0, 0,133, 0, 0, 2, 20, 0, 0, 0, 35,
+ 0, 0, 0, 64, 0, 0, 2, 21, 0, 0, 0, 33, 0, 0, 0, 66, 0, 0, 2, 21, 0, 0, 0, 33, 0, 0, 0, 84, 0, 0, 2, 22,
+ 0, 0, 0, 35, 0, 0, 0,135, 0, 0, 2, 22, 0, 0, 0, 35, 0, 0, 0, 69, 0, 0, 2, 23, 0, 0, 0, 33, 0, 0, 0, 84,
+ 0, 0, 2, 23, 0, 0, 0, 33, 0, 0, 0, 69, 0, 0, 2, 24, 0, 0, 0, 35, 0, 0, 0,135, 0, 0, 2, 24, 0, 0, 0, 35,
+ 0, 0, 0,135, 0, 0, 2, 25, 0, 0, 0, 35, 0, 0, 0,136, 0, 0, 2, 25, 0, 0, 0, 35, 0, 0, 0,136, 0, 0, 2, 26,
+ 0, 0, 0, 35, 0, 0, 0,137, 0, 0, 2, 26, 0, 0, 0, 35, 0, 0, 0,135, 0, 0, 2, 27, 0, 0, 0, 35, 0, 0, 0,137,
+ 0, 0, 2, 27, 0, 0, 0, 35, 0, 0, 0, 71, 0, 0, 2, 28, 0, 0, 0, 33, 0, 0, 0, 85, 0, 0, 2, 28, 0, 0, 0, 33,
+ 0, 0, 0, 85, 0, 0, 2, 29, 0, 0, 0, 35, 0, 0, 0,137, 0, 0, 2, 29, 0, 0, 0, 35, 0, 0, 0, 71, 0, 0, 2, 30,
+ 0, 0, 0, 35, 0, 0, 0,137, 0, 0, 2, 30, 0, 0, 0, 35, 0, 0, 0, 70, 0, 0, 2, 31, 0, 0, 0, 35, 0, 0, 0,136,
+ 0, 0, 2, 31, 0, 0, 0, 35, 0, 0, 0, 68, 0, 0, 2, 32, 0, 0, 0, 35, 0, 0, 0,136, 0, 0, 2, 32, 0, 0, 0, 35,
+ 0, 0, 0, 68, 0, 0, 2, 33, 0, 0, 0, 33, 0, 0, 0, 70, 0, 0, 2, 33, 0, 0, 0, 33, 0, 0, 0, 86, 0, 0, 2, 34,
+ 0, 0, 0, 35, 0, 0, 0,138, 0, 0, 2, 34, 0, 0, 0, 35, 0, 0, 0, 73, 0, 0, 2, 35, 0, 0, 0, 33, 0, 0, 0, 86,
+ 0, 0, 2, 35, 0, 0, 0, 33, 0, 0, 0, 73, 0, 0, 2, 36, 0, 0, 0, 35, 0, 0, 0,138, 0, 0, 2, 36, 0, 0, 0, 35,
+ 0, 0, 0,138, 0, 0, 2, 37, 0, 0, 0, 35, 0, 0, 0,139, 0, 0, 2, 37, 0, 0, 0, 35, 0, 0, 0,139, 0, 0, 2, 38,
+ 0, 0, 0, 35, 0, 0, 0,140, 0, 0, 2, 38, 0, 0, 0, 35, 0, 0, 0,138, 0, 0, 2, 39, 0, 0, 0, 35, 0, 0, 0,140,
+ 0, 0, 2, 39, 0, 0, 0, 35, 0, 0, 0, 75, 0, 0, 2, 40, 0, 0, 0, 33, 0, 0, 0, 87, 0, 0, 2, 40, 0, 0, 0, 33,
+ 0, 0, 0, 87, 0, 0, 2, 41, 0, 0, 0, 35, 0, 0, 0,140, 0, 0, 2, 41, 0, 0, 0, 35, 0, 0, 0, 75, 0, 0, 2, 42,
+ 0, 0, 0, 35, 0, 0, 0,140, 0, 0, 2, 42, 0, 0, 0, 35, 0, 0, 0, 74, 0, 0, 2, 43, 0, 0, 0, 35, 0, 0, 0,139,
+ 0, 0, 2, 43, 0, 0, 0, 35, 0, 0, 0, 72, 0, 0, 2, 44, 0, 0, 0, 35, 0, 0, 0,139, 0, 0, 2, 44, 0, 0, 0, 35,
+ 0, 0, 0, 72, 0, 0, 2, 45, 0, 0, 0, 33, 0, 0, 0, 74, 0, 0, 2, 45, 0, 0, 0, 33, 0, 0, 0, 88, 0, 0, 2, 46,
+ 0, 0, 0, 35, 0, 0, 0,141, 0, 0, 2, 46, 0, 0, 0, 35, 0, 0, 0, 77, 0, 0, 2, 47, 0, 0, 0, 33, 0, 0, 0, 88,
+ 0, 0, 2, 47, 0, 0, 0, 33, 0, 0, 0, 77, 0, 0, 2, 48, 0, 0, 0, 35, 0, 0, 0,141, 0, 0, 2, 48, 0, 0, 0, 35,
+ 0, 0, 0,141, 0, 0, 2, 49, 0, 0, 0, 35, 0, 0, 0,142, 0, 0, 2, 49, 0, 0, 0, 35, 0, 0, 0,142, 0, 0, 2, 50,
+ 0, 0, 0, 35, 0, 0, 0,143, 0, 0, 2, 50, 0, 0, 0, 35, 0, 0, 0,141, 0, 0, 2, 51, 0, 0, 0, 35, 0, 0, 0,143,
+ 0, 0, 2, 51, 0, 0, 0, 35, 0, 0, 0, 79, 0, 0, 2, 52, 0, 0, 0, 33, 0, 0, 0, 89, 0, 0, 2, 52, 0, 0, 0, 33,
+ 0, 0, 0, 89, 0, 0, 2, 53, 0, 0, 0, 35, 0, 0, 0,143, 0, 0, 2, 53, 0, 0, 0, 35, 0, 0, 0, 79, 0, 0, 2, 54,
+ 0, 0, 0, 35, 0, 0, 0,143, 0, 0, 2, 54, 0, 0, 0, 35, 0, 0, 0, 78, 0, 0, 2, 55, 0, 0, 0, 35, 0, 0, 0,142,
+ 0, 0, 2, 55, 0, 0, 0, 35, 0, 0, 0, 76, 0, 0, 2, 56, 0, 0, 0, 35, 0, 0, 0,142, 0, 0, 2, 56, 0, 0, 0, 35,
+ 0, 0, 0, 76, 0, 0, 2, 57, 0, 0, 0, 33, 0, 0, 0, 78, 0, 0, 2, 57, 0, 0, 0, 33, 0, 0, 0, 90, 0, 0, 2, 58,
+ 0, 0, 0, 35, 0, 0, 0,144, 0, 0, 2, 58, 0, 0, 0, 35, 0, 0, 0, 81, 0, 0, 2, 59, 0, 0, 0, 33, 0, 0, 0, 90,
+ 0, 0, 2, 59, 0, 0, 0, 33, 0, 0, 0, 81, 0, 0, 2, 60, 0, 0, 0, 35, 0, 0, 0,144, 0, 0, 2, 60, 0, 0, 0, 35,
+ 0, 0, 0,144, 0, 0, 2, 61, 0, 0, 0, 35, 0, 0, 0,145, 0, 0, 2, 61, 0, 0, 0, 35, 0, 0, 0,145, 0, 0, 2, 62,
+ 0, 0, 0, 35, 0, 0, 0,146, 0, 0, 2, 62, 0, 0, 0, 35, 0, 0, 0,144, 0, 0, 2, 63, 0, 0, 0, 35, 0, 0, 0,146,
+ 0, 0, 2, 63, 0, 0, 0, 35, 0, 0, 0, 63, 0, 0, 2, 64, 0, 0, 0, 33, 0, 0, 0, 91, 0, 0, 2, 64, 0, 0, 0, 33,
+ 0, 0, 0, 91, 0, 0, 2, 65, 0, 0, 0, 35, 0, 0, 0,146, 0, 0, 2, 65, 0, 0, 0, 35, 0, 0, 0, 63, 0, 0, 2, 66,
+ 0, 0, 0, 35, 0, 0, 0,146, 0, 0, 2, 66, 0, 0, 0, 35, 0, 0, 0, 62, 0, 0, 2, 67, 0, 0, 0, 35, 0, 0, 0,145,
+ 0, 0, 2, 67, 0, 0, 0, 35, 0, 0, 0, 80, 0, 0, 2, 68, 0, 0, 0, 35, 0, 0, 0,145, 0, 0, 2, 68, 0, 0, 0, 35,
+ 0, 0, 0, 62, 0, 0, 2, 69, 0, 0, 0, 33, 0, 0, 0, 80, 0, 0, 2, 69, 0, 0, 0, 33, 0, 0, 0, 94, 0, 0, 2, 70,
+ 0, 0, 0, 35, 0, 0, 0,147, 0, 0, 2, 70, 0, 0, 0, 35, 0, 0, 0, 82, 0, 0, 2, 71, 0, 0, 0, 33, 0, 0, 0, 94,
+ 0, 0, 2, 71, 0, 0, 0, 33, 0, 0, 0, 82, 0, 0, 2, 72, 0, 0, 0, 35, 0, 0, 0,147, 0, 0, 2, 72, 0, 0, 0, 35,
+ 0, 0, 0,147, 0, 0, 2, 73, 0, 0, 0, 35, 0, 0, 0,148, 0, 0, 2, 73, 0, 0, 0, 35, 0, 0, 0,148, 0, 0, 2, 74,
+ 0, 0, 0, 35, 0, 0, 0,149, 0, 0, 2, 74, 0, 0, 0, 35, 0, 0, 0,147, 0, 0, 2, 75, 0, 0, 0, 35, 0, 0, 0,149,
+ 0, 0, 2, 75, 0, 0, 0, 35, 0, 0, 0, 93, 0, 0, 2, 76, 0, 0, 0, 33, 0, 0, 0, 95, 0, 0, 2, 76, 0, 0, 0, 33,
+ 0, 0, 0, 95, 0, 0, 2, 77, 0, 0, 0, 35, 0, 0, 0,149, 0, 0, 2, 77, 0, 0, 0, 35, 0, 0, 0, 93, 0, 0, 2, 78,
+ 0, 0, 0, 35, 0, 0, 0,149, 0, 0, 2, 78, 0, 0, 0, 35, 0, 0, 0, 92, 0, 0, 2, 79, 0, 0, 0, 35, 0, 0, 0,148,
+ 0, 0, 2, 79, 0, 0, 0, 35, 0, 0, 0, 83, 0, 0, 2, 80, 0, 0, 0, 35, 0, 0, 0,148, 0, 0, 2, 80, 0, 0, 0, 35,
+ 0, 0, 0, 83, 0, 0, 2, 81, 0, 0, 0, 33, 0, 0, 0, 92, 0, 0, 2, 81, 0, 0, 0, 33, 0, 0, 0, 96, 0, 0, 2, 82,
+ 0, 0, 0, 35, 0, 0, 0,150, 0, 0, 2, 82, 0, 0, 0, 35, 0, 0, 0, 85, 0, 0, 2, 83, 0, 0, 0, 33, 0, 0, 0, 96,
+ 0, 0, 2, 83, 0, 0, 0, 33, 0, 0, 0, 85, 0, 0, 2, 84, 0, 0, 0, 35, 0, 0, 0,150, 0, 0, 2, 84, 0, 0, 0, 35,
+ 0, 0, 0,150, 0, 0, 2, 85, 0, 0, 0, 35, 0, 0, 0,151, 0, 0, 2, 85, 0, 0, 0, 35, 0, 0, 0,151, 0, 0, 2, 86,
+ 0, 0, 0, 35, 0, 0, 0,152, 0, 0, 2, 86, 0, 0, 0, 35, 0, 0, 0,150, 0, 0, 2, 87, 0, 0, 0, 35, 0, 0, 0,152,
+ 0, 0, 2, 87, 0, 0, 0, 35, 0, 0, 0, 95, 0, 0, 2, 88, 0, 0, 0, 33, 0, 0, 0, 97, 0, 0, 2, 88, 0, 0, 0, 33,
+ 0, 0, 0, 97, 0, 0, 2, 89, 0, 0, 0, 35, 0, 0, 0,152, 0, 0, 2, 89, 0, 0, 0, 35, 0, 0, 0, 95, 0, 0, 2, 90,
+ 0, 0, 0, 35, 0, 0, 0,152, 0, 0, 2, 90, 0, 0, 0, 35, 0, 0, 0, 94, 0, 0, 2, 91, 0, 0, 0, 35, 0, 0, 0,151,
+ 0, 0, 2, 91, 0, 0, 0, 35, 0, 0, 0, 84, 0, 0, 2, 92, 0, 0, 0, 35, 0, 0, 0,151, 0, 0, 2, 92, 0, 0, 0, 35,
+ 0, 0, 0, 84, 0, 0, 2, 93, 0, 0, 0, 33, 0, 0, 0, 94, 0, 0, 2, 93, 0, 0, 0, 33, 0, 0, 0, 98, 0, 0, 2, 94,
+ 0, 0, 0, 35, 0, 0, 0,153, 0, 0, 2, 94, 0, 0, 0, 35, 0, 0, 0, 87, 0, 0, 2, 95, 0, 0, 0, 33, 0, 0, 0, 98,
+ 0, 0, 2, 95, 0, 0, 0, 33, 0, 0, 0, 87, 0, 0, 2, 96, 0, 0, 0, 35, 0, 0, 0,153, 0, 0, 2, 96, 0, 0, 0, 35,
+ 0, 0, 0,153, 0, 0, 2, 97, 0, 0, 0, 35, 0, 0, 0,154, 0, 0, 2, 97, 0, 0, 0, 35, 0, 0, 0,154, 0, 0, 2, 98,
+ 0, 0, 0, 35, 0, 0, 0,155, 0, 0, 2, 98, 0, 0, 0, 35, 0, 0, 0,153, 0, 0, 2, 99, 0, 0, 0, 35, 0, 0, 0,155,
+ 0, 0, 2, 99, 0, 0, 0, 35, 0, 0, 0, 97, 0, 0, 2,100, 0, 0, 0, 33, 0, 0, 0, 99, 0, 0, 2,100, 0, 0, 0, 33,
+ 0, 0, 0, 99, 0, 0, 2,101, 0, 0, 0, 35, 0, 0, 0,155, 0, 0, 2,101, 0, 0, 0, 35, 0, 0, 0, 97, 0, 0, 2,102,
+ 0, 0, 0, 35, 0, 0, 0,155, 0, 0, 2,102, 0, 0, 0, 35, 0, 0, 0, 96, 0, 0, 2,103, 0, 0, 0, 35, 0, 0, 0,154,
+ 0, 0, 2,103, 0, 0, 0, 35, 0, 0, 0, 86, 0, 0, 2,104, 0, 0, 0, 35, 0, 0, 0,154, 0, 0, 2,104, 0, 0, 0, 35,
+ 0, 0, 0, 86, 0, 0, 2,105, 0, 0, 0, 33, 0, 0, 0, 96, 0, 0, 2,105, 0, 0, 0, 33, 0, 0, 0,100, 0, 0, 2,106,
+ 0, 0, 0, 35, 0, 0, 0,156, 0, 0, 2,106, 0, 0, 0, 35, 0, 0, 0, 89, 0, 0, 2,107, 0, 0, 0, 33, 0, 0, 0,100,
+ 0, 0, 2,107, 0, 0, 0, 33, 0, 0, 0, 89, 0, 0, 2,108, 0, 0, 0, 35, 0, 0, 0,156, 0, 0, 2,108, 0, 0, 0, 35,
+ 0, 0, 0,156, 0, 0, 2,109, 0, 0, 0, 35, 0, 0, 0,157, 0, 0, 2,109, 0, 0, 0, 35, 0, 0, 0,157, 0, 0, 2,110,
+ 0, 0, 0, 35, 0, 0, 0,158, 0, 0, 2,110, 0, 0, 0, 35, 0, 0, 0,156, 0, 0, 2,111, 0, 0, 0, 35, 0, 0, 0,158,
+ 0, 0, 2,111, 0, 0, 0, 35, 0, 0, 0, 99, 0, 0, 2,112, 0, 0, 0, 33, 0, 0, 0,101, 0, 0, 2,112, 0, 0, 0, 33,
+ 0, 0, 0,101, 0, 0, 2,113, 0, 0, 0, 35, 0, 0, 0,158, 0, 0, 2,113, 0, 0, 0, 35, 0, 0, 0, 99, 0, 0, 2,114,
+ 0, 0, 0, 35, 0, 0, 0,158, 0, 0, 2,114, 0, 0, 0, 35, 0, 0, 0, 98, 0, 0, 2,115, 0, 0, 0, 35, 0, 0, 0,157,
+ 0, 0, 2,115, 0, 0, 0, 35, 0, 0, 0, 88, 0, 0, 2,116, 0, 0, 0, 35, 0, 0, 0,157, 0, 0, 2,116, 0, 0, 0, 35,
+ 0, 0, 0, 88, 0, 0, 2,117, 0, 0, 0, 33, 0, 0, 0, 98, 0, 0, 2,117, 0, 0, 0, 33, 0, 0, 0, 92, 0, 0, 2,118,
+ 0, 0, 0, 35, 0, 0, 0,159, 0, 0, 2,118, 0, 0, 0, 35, 0, 0, 0, 91, 0, 0, 2,119, 0, 0, 0, 33, 0, 0, 0, 92,
+ 0, 0, 2,119, 0, 0, 0, 33, 0, 0, 0, 91, 0, 0, 2,120, 0, 0, 0, 35, 0, 0, 0,159, 0, 0, 2,120, 0, 0, 0, 35,
+ 0, 0, 0,159, 0, 0, 2,121, 0, 0, 0, 35, 0, 0, 0,160, 0, 0, 2,121, 0, 0, 0, 35, 0, 0, 0,160, 0, 0, 2,122,
+ 0, 0, 0, 35, 0, 0, 0,161, 0, 0, 2,122, 0, 0, 0, 35, 0, 0, 0,159, 0, 0, 2,123, 0, 0, 0, 35, 0, 0, 0,161,
+ 0, 0, 2,123, 0, 0, 0, 35, 0, 0, 0, 93, 0, 0, 2,124, 0, 0, 0, 33, 0, 0, 0,101, 0, 0, 2,124, 0, 0, 0, 33,
+ 0, 0, 0, 93, 0, 0, 2,125, 0, 0, 0, 35, 0, 0, 0,161, 0, 0, 2,125, 0, 0, 0, 35, 0, 0, 0,101, 0, 0, 2,126,
+ 0, 0, 0, 35, 0, 0, 0,161, 0, 0, 2,126, 0, 0, 0, 35, 0, 0, 0,100, 0, 0, 2,127, 0, 0, 0, 35, 0, 0, 0,160,
+ 0, 0, 2,127, 0, 0, 0, 35, 0, 0, 0, 90, 0, 0, 2,128, 0, 0, 0, 35, 0, 0, 0,160, 0, 0, 2,128, 0, 0, 0, 35,
+ 0, 0, 0, 90, 0, 0, 2,129, 0, 0, 0, 33, 0, 0, 0,100, 0, 0, 2,129, 0, 0, 0, 33, 0, 0, 1, 27, 0, 0, 1,146,
+ 0, 0, 0, 35, 0, 0, 0,171, 0, 0, 1,146, 0, 0, 0, 35, 0, 0, 0,171, 0, 0, 1, 27, 0, 0, 0, 35, 0, 0, 1,146,
+ 0, 0, 1,147, 0, 0, 0, 35, 0, 0, 1,146, 0, 0, 1,148, 0, 0, 0, 35, 0, 0, 1,147, 0, 0, 1,148, 0, 0, 0, 35,
+ 0, 0, 0,165, 0, 0, 1, 26, 0, 0, 0, 35, 0, 0, 0,165, 0, 0, 1,148, 0, 0, 0, 35, 0, 0, 1, 26, 0, 0, 1,148,
+ 0, 0, 0, 35, 0, 0, 0,164, 0, 0, 1,147, 0, 0, 0, 35, 0, 0, 0,164, 0, 0, 0,170, 0, 0, 0, 35, 0, 0, 0,170,
+ 0, 0, 1,147, 0, 0, 0, 35, 0, 0, 1, 26, 0, 0, 1,149, 0, 0, 0, 35, 0, 0, 1, 28, 0, 0, 1,149, 0, 0, 0, 35,
+ 0, 0, 1, 26, 0, 0, 1, 28, 0, 0, 0, 35, 0, 0, 1,149, 0, 0, 1,150, 0, 0, 0, 35, 0, 0, 1,149, 0, 0, 1,151,
+ 0, 0, 0, 35, 0, 0, 1,150, 0, 0, 1,151, 0, 0, 0, 35, 0, 0, 1, 27, 0, 0, 1, 31, 0, 0, 0, 35, 0, 0, 1, 31,
+ 0, 0, 1,151, 0, 0, 0, 35, 0, 0, 1, 27, 0, 0, 1,151, 0, 0, 0, 35, 0, 0, 1, 30, 0, 0, 1,150, 0, 0, 0, 35,
+ 0, 0, 1, 29, 0, 0, 1, 30, 0, 0, 0, 35, 0, 0, 1, 29, 0, 0, 1,150, 0, 0, 0, 35, 0, 0, 0,168, 0, 0, 1,152,
+ 0, 0, 0, 35, 0, 0, 0,172, 0, 0, 1,152, 0, 0, 0, 35, 0, 0, 0,168, 0, 0, 0,172, 0, 0, 0, 35, 0, 0, 1,152,
+ 0, 0, 1,153, 0, 0, 0, 35, 0, 0, 1,152, 0, 0, 1,154, 0, 0, 0, 35, 0, 0, 1,153, 0, 0, 1,154, 0, 0, 0, 35,
+ 0, 0, 0,169, 0, 0, 1, 30, 0, 0, 0, 35, 0, 0, 1, 30, 0, 0, 1,154, 0, 0, 0, 35, 0, 0, 0,169, 0, 0, 1,154,
+ 0, 0, 0, 35, 0, 0, 1, 31, 0, 0, 1,153, 0, 0, 0, 35, 0, 0, 0,173, 0, 0, 1, 31, 0, 0, 0, 35, 0, 0, 0,173,
+ 0, 0, 1,153, 0, 0, 0, 35, 0, 0, 0,167, 0, 0, 1,155, 0, 0, 0, 35, 0, 0, 1, 29, 0, 0, 1,155, 0, 0, 0, 35,
+ 0, 0, 0,167, 0, 0, 1, 29, 0, 0, 0, 35, 0, 0, 1,155, 0, 0, 1,156, 0, 0, 0, 35, 0, 0, 1,155, 0, 0, 1,157,
+ 0, 0, 0, 35, 0, 0, 1,156, 0, 0, 1,157, 0, 0, 0, 35, 0, 0, 0,162, 0, 0, 0,166, 0, 0, 0, 35, 0, 0, 0,162,
+ 0, 0, 1,157, 0, 0, 0, 35, 0, 0, 0,166, 0, 0, 1,157, 0, 0, 0, 35, 0, 0, 0,163, 0, 0, 1,156, 0, 0, 0, 35,
+ 0, 0, 0,163, 0, 0, 1, 28, 0, 0, 0, 35, 0, 0, 1, 28, 0, 0, 1,156, 0, 0, 0, 35, 0, 0, 1, 33, 0, 0, 1,158,
+ 0, 0, 0, 35, 0, 0, 0,179, 0, 0, 1, 33, 0, 0, 0, 35, 0, 0, 0,179, 0, 0, 1,158, 0, 0, 0, 35, 0, 0, 1,158,
+ 0, 0, 1,159, 0, 0, 0, 35, 0, 0, 1,159, 0, 0, 1,160, 0, 0, 0, 35, 0, 0, 1,158, 0, 0, 1,160, 0, 0, 0, 35,
+ 0, 0, 0,165, 0, 0, 1, 32, 0, 0, 0, 35, 0, 0, 1, 32, 0, 0, 1,160, 0, 0, 0, 35, 0, 0, 0,165, 0, 0, 1,160,
+ 0, 0, 0, 35, 0, 0, 0,164, 0, 0, 1,159, 0, 0, 0, 35, 0, 0, 0,178, 0, 0, 1,159, 0, 0, 0, 35, 0, 0, 0,164,
+ 0, 0, 0,178, 0, 0, 0, 35, 0, 0, 1, 32, 0, 0, 1,161, 0, 0, 0, 35, 0, 0, 1, 32, 0, 0, 1, 34, 0, 0, 0, 35,
+ 0, 0, 1, 34, 0, 0, 1,161, 0, 0, 0, 35, 0, 0, 1,161, 0, 0, 1,162, 0, 0, 0, 35, 0, 0, 1,162, 0, 0, 1,163,
+ 0, 0, 0, 35, 0, 0, 1,161, 0, 0, 1,163, 0, 0, 0, 35, 0, 0, 1, 33, 0, 0, 1, 37, 0, 0, 0, 35, 0, 0, 1, 33,
+ 0, 0, 1,163, 0, 0, 0, 35, 0, 0, 1, 37, 0, 0, 1,163, 0, 0, 0, 35, 0, 0, 1, 36, 0, 0, 1,162, 0, 0, 0, 35,
+ 0, 0, 1, 35, 0, 0, 1,162, 0, 0, 0, 35, 0, 0, 1, 35, 0, 0, 1, 36, 0, 0, 0, 35, 0, 0, 0,176, 0, 0, 1,164,
+ 0, 0, 0, 35, 0, 0, 0,176, 0, 0, 0,180, 0, 0, 0, 35, 0, 0, 0,180, 0, 0, 1,164, 0, 0, 0, 35, 0, 0, 1,164,
+ 0, 0, 1,165, 0, 0, 0, 35, 0, 0, 1,165, 0, 0, 1,166, 0, 0, 0, 35, 0, 0, 1,164, 0, 0, 1,166, 0, 0, 0, 35,
+ 0, 0, 0,177, 0, 0, 1, 36, 0, 0, 0, 35, 0, 0, 0,177, 0, 0, 1,166, 0, 0, 0, 35, 0, 0, 1, 36, 0, 0, 1,166,
+ 0, 0, 0, 35, 0, 0, 1, 37, 0, 0, 1,165, 0, 0, 0, 35, 0, 0, 0,181, 0, 0, 1,165, 0, 0, 0, 35, 0, 0, 0,181,
+ 0, 0, 1, 37, 0, 0, 0, 35, 0, 0, 0,175, 0, 0, 1,167, 0, 0, 0, 35, 0, 0, 0,175, 0, 0, 1, 35, 0, 0, 0, 35,
+ 0, 0, 1, 35, 0, 0, 1,167, 0, 0, 0, 35, 0, 0, 1,167, 0, 0, 1,168, 0, 0, 0, 35, 0, 0, 1,168, 0, 0, 1,169,
+ 0, 0, 0, 35, 0, 0, 1,167, 0, 0, 1,169, 0, 0, 0, 35, 0, 0, 0,162, 0, 0, 0,174, 0, 0, 0, 35, 0, 0, 0,174,
+ 0, 0, 1,169, 0, 0, 0, 35, 0, 0, 0,162, 0, 0, 1,169, 0, 0, 0, 35, 0, 0, 0,163, 0, 0, 1,168, 0, 0, 0, 35,
+ 0, 0, 1, 34, 0, 0, 1,168, 0, 0, 0, 35, 0, 0, 0,163, 0, 0, 1, 34, 0, 0, 0, 35, 0, 0, 1, 39, 0, 0, 1,170,
+ 0, 0, 0, 35, 0, 0, 0,187, 0, 0, 1,170, 0, 0, 0, 35, 0, 0, 0,187, 0, 0, 1, 39, 0, 0, 0, 35, 0, 0, 1,170,
+ 0, 0, 1,171, 0, 0, 0, 35, 0, 0, 1,170, 0, 0, 1,172, 0, 0, 0, 35, 0, 0, 1,171, 0, 0, 1,172, 0, 0, 0, 35,
+ 0, 0, 0,169, 0, 0, 1, 38, 0, 0, 0, 35, 0, 0, 0,169, 0, 0, 1,172, 0, 0, 0, 35, 0, 0, 1, 38, 0, 0, 1,172,
+ 0, 0, 0, 35, 0, 0, 0,168, 0, 0, 1,171, 0, 0, 0, 35, 0, 0, 0,168, 0, 0, 0,186, 0, 0, 0, 35, 0, 0, 0,186,
+ 0, 0, 1,171, 0, 0, 0, 35, 0, 0, 1, 38, 0, 0, 1,173, 0, 0, 0, 35, 0, 0, 1, 40, 0, 0, 1,173, 0, 0, 0, 35,
+ 0, 0, 1, 38, 0, 0, 1, 40, 0, 0, 0, 35, 0, 0, 1,173, 0, 0, 1,174, 0, 0, 0, 35, 0, 0, 1,173, 0, 0, 1,175,
+ 0, 0, 0, 35, 0, 0, 1,174, 0, 0, 1,175, 0, 0, 0, 35, 0, 0, 1, 39, 0, 0, 1, 43, 0, 0, 0, 35, 0, 0, 1, 43,
+ 0, 0, 1,175, 0, 0, 0, 35, 0, 0, 1, 39, 0, 0, 1,175, 0, 0, 0, 35, 0, 0, 1, 42, 0, 0, 1,174, 0, 0, 0, 35,
+ 0, 0, 1, 41, 0, 0, 1, 42, 0, 0, 0, 35, 0, 0, 1, 41, 0, 0, 1,174, 0, 0, 0, 35, 0, 0, 0,184, 0, 0, 1,176,
+ 0, 0, 0, 35, 0, 0, 0,188, 0, 0, 1,176, 0, 0, 0, 35, 0, 0, 0,184, 0, 0, 0,188, 0, 0, 0, 35, 0, 0, 1,176,
+ 0, 0, 1,177, 0, 0, 0, 35, 0, 0, 1,176, 0, 0, 1,178, 0, 0, 0, 35, 0, 0, 1,177, 0, 0, 1,178, 0, 0, 0, 35,
+ 0, 0, 0,185, 0, 0, 1, 42, 0, 0, 0, 35, 0, 0, 1, 42, 0, 0, 1,178, 0, 0, 0, 35, 0, 0, 0,185, 0, 0, 1,178,
+ 0, 0, 0, 35, 0, 0, 1, 43, 0, 0, 1,177, 0, 0, 0, 35, 0, 0, 0,189, 0, 0, 1, 43, 0, 0, 0, 35, 0, 0, 0,189,
+ 0, 0, 1,177, 0, 0, 0, 35, 0, 0, 0,183, 0, 0, 1,179, 0, 0, 0, 35, 0, 0, 1, 41, 0, 0, 1,179, 0, 0, 0, 35,
+ 0, 0, 0,183, 0, 0, 1, 41, 0, 0, 0, 35, 0, 0, 1,179, 0, 0, 1,180, 0, 0, 0, 35, 0, 0, 1,179, 0, 0, 1,181,
+ 0, 0, 0, 35, 0, 0, 1,180, 0, 0, 1,181, 0, 0, 0, 35, 0, 0, 0,166, 0, 0, 0,182, 0, 0, 0, 35, 0, 0, 0,166,
+ 0, 0, 1,181, 0, 0, 0, 35, 0, 0, 0,182, 0, 0, 1,181, 0, 0, 0, 35, 0, 0, 0,167, 0, 0, 1,180, 0, 0, 0, 35,
+ 0, 0, 0,167, 0, 0, 1, 40, 0, 0, 0, 35, 0, 0, 1, 40, 0, 0, 1,180, 0, 0, 0, 35, 0, 0, 1, 45, 0, 0, 1,182,
+ 0, 0, 0, 35, 0, 0, 0,195, 0, 0, 1,182, 0, 0, 0, 35, 0, 0, 0,195, 0, 0, 1, 45, 0, 0, 0, 35, 0, 0, 1,182,
+ 0, 0, 1,183, 0, 0, 0, 35, 0, 0, 1,182, 0, 0, 1,184, 0, 0, 0, 35, 0, 0, 1,183, 0, 0, 1,184, 0, 0, 0, 35,
+ 0, 0, 0,185, 0, 0, 1, 44, 0, 0, 0, 35, 0, 0, 0,185, 0, 0, 1,184, 0, 0, 0, 35, 0, 0, 1, 44, 0, 0, 1,184,
+ 0, 0, 0, 35, 0, 0, 0,184, 0, 0, 1,183, 0, 0, 0, 35, 0, 0, 0,184, 0, 0, 0,194, 0, 0, 0, 35, 0, 0, 0,194,
+ 0, 0, 1,183, 0, 0, 0, 35, 0, 0, 1, 44, 0, 0, 1,185, 0, 0, 0, 35, 0, 0, 1, 46, 0, 0, 1,185, 0, 0, 0, 35,
+ 0, 0, 1, 44, 0, 0, 1, 46, 0, 0, 0, 35, 0, 0, 1,185, 0, 0, 1,186, 0, 0, 0, 35, 0, 0, 1,185, 0, 0, 1,187,
+ 0, 0, 0, 35, 0, 0, 1,186, 0, 0, 1,187, 0, 0, 0, 35, 0, 0, 1, 45, 0, 0, 1, 49, 0, 0, 0, 35, 0, 0, 1, 49,
+ 0, 0, 1,187, 0, 0, 0, 35, 0, 0, 1, 45, 0, 0, 1,187, 0, 0, 0, 35, 0, 0, 1, 48, 0, 0, 1,186, 0, 0, 0, 35,
+ 0, 0, 1, 47, 0, 0, 1, 48, 0, 0, 0, 35, 0, 0, 1, 47, 0, 0, 1,186, 0, 0, 0, 35, 0, 0, 0,192, 0, 0, 1,188,
+ 0, 0, 0, 35, 0, 0, 0,196, 0, 0, 1,188, 0, 0, 0, 35, 0, 0, 0,192, 0, 0, 0,196, 0, 0, 0, 35, 0, 0, 1,188,
+ 0, 0, 1,189, 0, 0, 0, 35, 0, 0, 1,188, 0, 0, 1,190, 0, 0, 0, 35, 0, 0, 1,189, 0, 0, 1,190, 0, 0, 0, 35,
+ 0, 0, 0,193, 0, 0, 1, 48, 0, 0, 0, 35, 0, 0, 1, 48, 0, 0, 1,190, 0, 0, 0, 35, 0, 0, 0,193, 0, 0, 1,190,
+ 0, 0, 0, 35, 0, 0, 1, 49, 0, 0, 1,189, 0, 0, 0, 35, 0, 0, 0,197, 0, 0, 1, 49, 0, 0, 0, 35, 0, 0, 0,197,
+ 0, 0, 1,189, 0, 0, 0, 35, 0, 0, 0,191, 0, 0, 1,191, 0, 0, 0, 35, 0, 0, 1, 47, 0, 0, 1,191, 0, 0, 0, 35,
+ 0, 0, 0,191, 0, 0, 1, 47, 0, 0, 0, 35, 0, 0, 1,191, 0, 0, 1,192, 0, 0, 0, 35, 0, 0, 1,191, 0, 0, 1,193,
+ 0, 0, 0, 35, 0, 0, 1,192, 0, 0, 1,193, 0, 0, 0, 35, 0, 0, 0,182, 0, 0, 0,190, 0, 0, 0, 35, 0, 0, 0,182,
+ 0, 0, 1,193, 0, 0, 0, 35, 0, 0, 0,190, 0, 0, 1,193, 0, 0, 0, 35, 0, 0, 0,183, 0, 0, 1,192, 0, 0, 0, 35,
+ 0, 0, 0,183, 0, 0, 1, 46, 0, 0, 0, 35, 0, 0, 1, 46, 0, 0, 1,192, 0, 0, 0, 35, 0, 0, 1, 51, 0, 0, 1,194,
+ 0, 0, 0, 35, 0, 0, 0,199, 0, 0, 1,194, 0, 0, 0, 35, 0, 0, 0,199, 0, 0, 1, 51, 0, 0, 0, 35, 0, 0, 1,194,
+ 0, 0, 1,195, 0, 0, 0, 35, 0, 0, 1,194, 0, 0, 1,196, 0, 0, 0, 35, 0, 0, 1,195, 0, 0, 1,196, 0, 0, 0, 35,
+ 0, 0, 0,193, 0, 0, 1, 50, 0, 0, 0, 35, 0, 0, 0,193, 0, 0, 1,196, 0, 0, 0, 35, 0, 0, 1, 50, 0, 0, 1,196,
+ 0, 0, 0, 35, 0, 0, 0,192, 0, 0, 1,195, 0, 0, 0, 35, 0, 0, 0,192, 0, 0, 0,198, 0, 0, 0, 35, 0, 0, 0,198,
+ 0, 0, 1,195, 0, 0, 0, 35, 0, 0, 1, 50, 0, 0, 1,197, 0, 0, 0, 35, 0, 0, 1, 53, 0, 0, 1,197, 0, 0, 0, 35,
+ 0, 0, 1, 50, 0, 0, 1, 53, 0, 0, 0, 35, 0, 0, 1,197, 0, 0, 1,198, 0, 0, 0, 35, 0, 0, 1,197, 0, 0, 1,199,
+ 0, 0, 0, 35, 0, 0, 1,198, 0, 0, 1,199, 0, 0, 0, 35, 0, 0, 1, 51, 0, 0, 1, 55, 0, 0, 0, 35, 0, 0, 1, 55,
+ 0, 0, 1,199, 0, 0, 0, 35, 0, 0, 1, 51, 0, 0, 1,199, 0, 0, 0, 35, 0, 0, 1, 54, 0, 0, 1,198, 0, 0, 0, 35,
+ 0, 0, 1, 52, 0, 0, 1, 54, 0, 0, 0, 35, 0, 0, 1, 52, 0, 0, 1,198, 0, 0, 0, 35, 0, 0, 0,176, 0, 0, 1,200,
+ 0, 0, 0, 35, 0, 0, 0,200, 0, 0, 1,200, 0, 0, 0, 35, 0, 0, 0,176, 0, 0, 0,200, 0, 0, 0, 35, 0, 0, 1,200,
+ 0, 0, 1,201, 0, 0, 0, 35, 0, 0, 1,200, 0, 0, 1,202, 0, 0, 0, 35, 0, 0, 1,201, 0, 0, 1,202, 0, 0, 0, 35,
+ 0, 0, 0,177, 0, 0, 1, 54, 0, 0, 0, 35, 0, 0, 1, 54, 0, 0, 1,202, 0, 0, 0, 35, 0, 0, 0,177, 0, 0, 1,202,
+ 0, 0, 0, 35, 0, 0, 1, 55, 0, 0, 1,201, 0, 0, 0, 35, 0, 0, 0,201, 0, 0, 1, 55, 0, 0, 0, 35, 0, 0, 0,201,
+ 0, 0, 1,201, 0, 0, 0, 35, 0, 0, 0,175, 0, 0, 1,203, 0, 0, 0, 35, 0, 0, 1, 52, 0, 0, 1,203, 0, 0, 0, 35,
+ 0, 0, 0,175, 0, 0, 1, 52, 0, 0, 0, 35, 0, 0, 1,203, 0, 0, 1,204, 0, 0, 0, 35, 0, 0, 1,203, 0, 0, 1,205,
+ 0, 0, 0, 35, 0, 0, 1,204, 0, 0, 1,205, 0, 0, 0, 35, 0, 0, 0,174, 0, 0, 0,190, 0, 0, 0, 35, 0, 0, 0,190,
+ 0, 0, 1,205, 0, 0, 0, 35, 0, 0, 0,174, 0, 0, 1,205, 0, 0, 0, 35, 0, 0, 0,191, 0, 0, 1,204, 0, 0, 0, 35,
+ 0, 0, 0,191, 0, 0, 1, 53, 0, 0, 0, 35, 0, 0, 1, 53, 0, 0, 1,204, 0, 0, 0, 35, 0, 0, 1, 57, 0, 0, 1,206,
+ 0, 0, 0, 35, 0, 0, 0,207, 0, 0, 1, 57, 0, 0, 0, 35, 0, 0, 0,207, 0, 0, 1,206, 0, 0, 0, 35, 0, 0, 1,206,
+ 0, 0, 1,207, 0, 0, 0, 35, 0, 0, 1,207, 0, 0, 1,208, 0, 0, 0, 35, 0, 0, 1,206, 0, 0, 1,208, 0, 0, 0, 35,
+ 0, 0, 0,179, 0, 0, 1, 56, 0, 0, 0, 35, 0, 0, 1, 56, 0, 0, 1,208, 0, 0, 0, 35, 0, 0, 0,179, 0, 0, 1,208,
+ 0, 0, 0, 35, 0, 0, 0,178, 0, 0, 1,207, 0, 0, 0, 35, 0, 0, 0,206, 0, 0, 1,207, 0, 0, 0, 35, 0, 0, 0,178,
+ 0, 0, 0,206, 0, 0, 0, 35, 0, 0, 1, 56, 0, 0, 1,209, 0, 0, 0, 35, 0, 0, 1, 56, 0, 0, 1, 58, 0, 0, 0, 35,
+ 0, 0, 1, 58, 0, 0, 1,209, 0, 0, 0, 35, 0, 0, 1,209, 0, 0, 1,210, 0, 0, 0, 35, 0, 0, 1,210, 0, 0, 1,211,
+ 0, 0, 0, 35, 0, 0, 1,209, 0, 0, 1,211, 0, 0, 0, 35, 0, 0, 1, 57, 0, 0, 1, 61, 0, 0, 0, 35, 0, 0, 1, 57,
+ 0, 0, 1,211, 0, 0, 0, 35, 0, 0, 1, 61, 0, 0, 1,211, 0, 0, 0, 35, 0, 0, 1, 60, 0, 0, 1,210, 0, 0, 0, 35,
+ 0, 0, 1, 59, 0, 0, 1,210, 0, 0, 0, 35, 0, 0, 1, 59, 0, 0, 1, 60, 0, 0, 0, 35, 0, 0, 0,204, 0, 0, 1,212,
+ 0, 0, 0, 35, 0, 0, 0,204, 0, 0, 0,208, 0, 0, 0, 35, 0, 0, 0,208, 0, 0, 1,212, 0, 0, 0, 35, 0, 0, 1,212,
+ 0, 0, 1,213, 0, 0, 0, 35, 0, 0, 1,213, 0, 0, 1,214, 0, 0, 0, 35, 0, 0, 1,212, 0, 0, 1,214, 0, 0, 0, 35,
+ 0, 0, 0,205, 0, 0, 1, 60, 0, 0, 0, 35, 0, 0, 0,205, 0, 0, 1,214, 0, 0, 0, 35, 0, 0, 1, 60, 0, 0, 1,214,
+ 0, 0, 0, 35, 0, 0, 1, 61, 0, 0, 1,213, 0, 0, 0, 35, 0, 0, 0,209, 0, 0, 1,213, 0, 0, 0, 35, 0, 0, 0,209,
+ 0, 0, 1, 61, 0, 0, 0, 35, 0, 0, 0,203, 0, 0, 1,215, 0, 0, 0, 35, 0, 0, 0,203, 0, 0, 1, 59, 0, 0, 0, 35,
+ 0, 0, 1, 59, 0, 0, 1,215, 0, 0, 0, 35, 0, 0, 1,215, 0, 0, 1,216, 0, 0, 0, 35, 0, 0, 1,216, 0, 0, 1,217,
+ 0, 0, 0, 35, 0, 0, 1,215, 0, 0, 1,217, 0, 0, 0, 35, 0, 0, 0,180, 0, 0, 0,202, 0, 0, 0, 35, 0, 0, 0,202,
+ 0, 0, 1,217, 0, 0, 0, 35, 0, 0, 0,180, 0, 0, 1,217, 0, 0, 0, 35, 0, 0, 0,181, 0, 0, 1,216, 0, 0, 0, 35,
+ 0, 0, 1, 58, 0, 0, 1,216, 0, 0, 0, 35, 0, 0, 0,181, 0, 0, 1, 58, 0, 0, 0, 35, 0, 0, 1, 63, 0, 0, 1,218,
+ 0, 0, 0, 35, 0, 0, 0,215, 0, 0, 1, 63, 0, 0, 0, 35, 0, 0, 0,215, 0, 0, 1,218, 0, 0, 0, 35, 0, 0, 1,218,
+ 0, 0, 1,219, 0, 0, 0, 35, 0, 0, 1,219, 0, 0, 1,220, 0, 0, 0, 35, 0, 0, 1,218, 0, 0, 1,220, 0, 0, 0, 35,
+ 0, 0, 0,173, 0, 0, 1, 62, 0, 0, 0, 35, 0, 0, 1, 62, 0, 0, 1,220, 0, 0, 0, 35, 0, 0, 0,173, 0, 0, 1,220,
+ 0, 0, 0, 35, 0, 0, 0,172, 0, 0, 1,219, 0, 0, 0, 35, 0, 0, 0,214, 0, 0, 1,219, 0, 0, 0, 35, 0, 0, 0,172,
+ 0, 0, 0,214, 0, 0, 0, 35, 0, 0, 1, 62, 0, 0, 1,221, 0, 0, 0, 35, 0, 0, 1, 62, 0, 0, 1, 64, 0, 0, 0, 35,
+ 0, 0, 1, 64, 0, 0, 1,221, 0, 0, 0, 35, 0, 0, 1,221, 0, 0, 1,222, 0, 0, 0, 35, 0, 0, 1,222, 0, 0, 1,223,
+ 0, 0, 0, 35, 0, 0, 1,221, 0, 0, 1,223, 0, 0, 0, 35, 0, 0, 1, 63, 0, 0, 1, 67, 0, 0, 0, 35, 0, 0, 1, 63,
+ 0, 0, 1,223, 0, 0, 0, 35, 0, 0, 1, 67, 0, 0, 1,223, 0, 0, 0, 35, 0, 0, 1, 66, 0, 0, 1,222, 0, 0, 0, 35,
+ 0, 0, 1, 65, 0, 0, 1,222, 0, 0, 0, 35, 0, 0, 1, 65, 0, 0, 1, 66, 0, 0, 0, 35, 0, 0, 0,212, 0, 0, 1,224,
+ 0, 0, 0, 35, 0, 0, 0,212, 0, 0, 0,216, 0, 0, 0, 35, 0, 0, 0,216, 0, 0, 1,224, 0, 0, 0, 35, 0, 0, 1,224,
+ 0, 0, 1,225, 0, 0, 0, 35, 0, 0, 1,225, 0, 0, 1,226, 0, 0, 0, 35, 0, 0, 1,224, 0, 0, 1,226, 0, 0, 0, 35,
+ 0, 0, 0,213, 0, 0, 1, 66, 0, 0, 0, 35, 0, 0, 0,213, 0, 0, 1,226, 0, 0, 0, 35, 0, 0, 1, 66, 0, 0, 1,226,
+ 0, 0, 0, 35, 0, 0, 1, 67, 0, 0, 1,225, 0, 0, 0, 35, 0, 0, 0,217, 0, 0, 1,225, 0, 0, 0, 35, 0, 0, 0,217,
+ 0, 0, 1, 67, 0, 0, 0, 35, 0, 0, 0,211, 0, 0, 1,227, 0, 0, 0, 35, 0, 0, 0,211, 0, 0, 1, 65, 0, 0, 0, 35,
+ 0, 0, 1, 65, 0, 0, 1,227, 0, 0, 0, 35, 0, 0, 1,227, 0, 0, 1,228, 0, 0, 0, 35, 0, 0, 1,228, 0, 0, 1,229,
+ 0, 0, 0, 35, 0, 0, 1,227, 0, 0, 1,229, 0, 0, 0, 35, 0, 0, 0,170, 0, 0, 0,210, 0, 0, 0, 35, 0, 0, 0,210,
+ 0, 0, 1,229, 0, 0, 0, 35, 0, 0, 0,170, 0, 0, 1,229, 0, 0, 0, 35, 0, 0, 0,171, 0, 0, 1,228, 0, 0, 0, 35,
+ 0, 0, 1, 64, 0, 0, 1,228, 0, 0, 0, 35, 0, 0, 0,171, 0, 0, 1, 64, 0, 0, 0, 35, 0, 0, 1, 69, 0, 0, 1,230,
+ 0, 0, 0, 35, 0, 0, 0,223, 0, 0, 1, 69, 0, 0, 0, 35, 0, 0, 0,223, 0, 0, 1,230, 0, 0, 0, 35, 0, 0, 1,230,
+ 0, 0, 1,231, 0, 0, 0, 35, 0, 0, 1,231, 0, 0, 1,232, 0, 0, 0, 35, 0, 0, 1,230, 0, 0, 1,232, 0, 0, 0, 35,
+ 0, 0, 0,189, 0, 0, 1, 68, 0, 0, 0, 35, 0, 0, 1, 68, 0, 0, 1,232, 0, 0, 0, 35, 0, 0, 0,189, 0, 0, 1,232,
+ 0, 0, 0, 35, 0, 0, 0,188, 0, 0, 1,231, 0, 0, 0, 35, 0, 0, 0,222, 0, 0, 1,231, 0, 0, 0, 35, 0, 0, 0,188,
+ 0, 0, 0,222, 0, 0, 0, 35, 0, 0, 1, 68, 0, 0, 1,233, 0, 0, 0, 35, 0, 0, 1, 68, 0, 0, 1, 70, 0, 0, 0, 35,
+ 0, 0, 1, 70, 0, 0, 1,233, 0, 0, 0, 35, 0, 0, 1,233, 0, 0, 1,234, 0, 0, 0, 35, 0, 0, 1,234, 0, 0, 1,235,
+ 0, 0, 0, 35, 0, 0, 1,233, 0, 0, 1,235, 0, 0, 0, 35, 0, 0, 1, 69, 0, 0, 1, 73, 0, 0, 0, 35, 0, 0, 1, 69,
+ 0, 0, 1,235, 0, 0, 0, 35, 0, 0, 1, 73, 0, 0, 1,235, 0, 0, 0, 35, 0, 0, 1, 72, 0, 0, 1,234, 0, 0, 0, 35,
+ 0, 0, 1, 71, 0, 0, 1,234, 0, 0, 0, 35, 0, 0, 1, 71, 0, 0, 1, 72, 0, 0, 0, 35, 0, 0, 0,220, 0, 0, 1,236,
+ 0, 0, 0, 35, 0, 0, 0,220, 0, 0, 0,224, 0, 0, 0, 35, 0, 0, 0,224, 0, 0, 1,236, 0, 0, 0, 35, 0, 0, 1,236,
+ 0, 0, 1,237, 0, 0, 0, 35, 0, 0, 1,237, 0, 0, 1,238, 0, 0, 0, 35, 0, 0, 1,236, 0, 0, 1,238, 0, 0, 0, 35,
+ 0, 0, 0,221, 0, 0, 1, 72, 0, 0, 0, 35, 0, 0, 0,221, 0, 0, 1,238, 0, 0, 0, 35, 0, 0, 1, 72, 0, 0, 1,238,
+ 0, 0, 0, 35, 0, 0, 1, 73, 0, 0, 1,237, 0, 0, 0, 35, 0, 0, 0,225, 0, 0, 1,237, 0, 0, 0, 35, 0, 0, 0,225,
+ 0, 0, 1, 73, 0, 0, 0, 35, 0, 0, 0,219, 0, 0, 1,239, 0, 0, 0, 35, 0, 0, 0,219, 0, 0, 1, 71, 0, 0, 0, 35,
+ 0, 0, 1, 71, 0, 0, 1,239, 0, 0, 0, 35, 0, 0, 1,239, 0, 0, 1,240, 0, 0, 0, 35, 0, 0, 1,240, 0, 0, 1,241,
+ 0, 0, 0, 35, 0, 0, 1,239, 0, 0, 1,241, 0, 0, 0, 35, 0, 0, 0,186, 0, 0, 0,218, 0, 0, 0, 35, 0, 0, 0,218,
+ 0, 0, 1,241, 0, 0, 0, 35, 0, 0, 0,186, 0, 0, 1,241, 0, 0, 0, 35, 0, 0, 0,187, 0, 0, 1,240, 0, 0, 0, 35,
+ 0, 0, 1, 70, 0, 0, 1,240, 0, 0, 0, 35, 0, 0, 0,187, 0, 0, 1, 70, 0, 0, 0, 35, 0, 0, 1, 75, 0, 0, 1,242,
+ 0, 0, 0, 35, 0, 0, 0,231, 0, 0, 1, 75, 0, 0, 0, 35, 0, 0, 0,231, 0, 0, 1,242, 0, 0, 0, 35, 0, 0, 1,242,
+ 0, 0, 1,243, 0, 0, 0, 35, 0, 0, 1,243, 0, 0, 1,244, 0, 0, 0, 35, 0, 0, 1,242, 0, 0, 1,244, 0, 0, 0, 35,
+ 0, 0, 0,197, 0, 0, 1, 74, 0, 0, 0, 35, 0, 0, 1, 74, 0, 0, 1,244, 0, 0, 0, 35, 0, 0, 0,197, 0, 0, 1,244,
+ 0, 0, 0, 35, 0, 0, 0,196, 0, 0, 1,243, 0, 0, 0, 35, 0, 0, 0,230, 0, 0, 1,243, 0, 0, 0, 35, 0, 0, 0,196,
+ 0, 0, 0,230, 0, 0, 0, 35, 0, 0, 1, 74, 0, 0, 1,245, 0, 0, 0, 35, 0, 0, 1, 74, 0, 0, 1, 76, 0, 0, 0, 35,
+ 0, 0, 1, 76, 0, 0, 1,245, 0, 0, 0, 35, 0, 0, 1,245, 0, 0, 1,246, 0, 0, 0, 35, 0, 0, 1,246, 0, 0, 1,247,
+ 0, 0, 0, 35, 0, 0, 1,245, 0, 0, 1,247, 0, 0, 0, 35, 0, 0, 1, 75, 0, 0, 1, 79, 0, 0, 0, 35, 0, 0, 1, 75,
+ 0, 0, 1,247, 0, 0, 0, 35, 0, 0, 1, 79, 0, 0, 1,247, 0, 0, 0, 35, 0, 0, 1, 78, 0, 0, 1,246, 0, 0, 0, 35,
+ 0, 0, 1, 77, 0, 0, 1,246, 0, 0, 0, 35, 0, 0, 1, 77, 0, 0, 1, 78, 0, 0, 0, 35, 0, 0, 0,228, 0, 0, 1,248,
+ 0, 0, 0, 35, 0, 0, 0,228, 0, 0, 0,232, 0, 0, 0, 35, 0, 0, 0,232, 0, 0, 1,248, 0, 0, 0, 35, 0, 0, 1,248,
+ 0, 0, 1,249, 0, 0, 0, 35, 0, 0, 1,249, 0, 0, 1,250, 0, 0, 0, 35, 0, 0, 1,248, 0, 0, 1,250, 0, 0, 0, 35,
+ 0, 0, 0,229, 0, 0, 1, 78, 0, 0, 0, 35, 0, 0, 0,229, 0, 0, 1,250, 0, 0, 0, 35, 0, 0, 1, 78, 0, 0, 1,250,
+ 0, 0, 0, 35, 0, 0, 1, 79, 0, 0, 1,249, 0, 0, 0, 35, 0, 0, 0,233, 0, 0, 1,249, 0, 0, 0, 35, 0, 0, 0,233,
+ 0, 0, 1, 79, 0, 0, 0, 35, 0, 0, 0,227, 0, 0, 1,251, 0, 0, 0, 35, 0, 0, 0,227, 0, 0, 1, 77, 0, 0, 0, 35,
+ 0, 0, 1, 77, 0, 0, 1,251, 0, 0, 0, 35, 0, 0, 1,251, 0, 0, 1,252, 0, 0, 0, 35, 0, 0, 1,252, 0, 0, 1,253,
+ 0, 0, 0, 35, 0, 0, 1,251, 0, 0, 1,253, 0, 0, 0, 35, 0, 0, 0,194, 0, 0, 0,226, 0, 0, 0, 35, 0, 0, 0,226,
+ 0, 0, 1,253, 0, 0, 0, 35, 0, 0, 0,194, 0, 0, 1,253, 0, 0, 0, 35, 0, 0, 0,195, 0, 0, 1,252, 0, 0, 0, 35,
+ 0, 0, 1, 76, 0, 0, 1,252, 0, 0, 0, 35, 0, 0, 0,195, 0, 0, 1, 76, 0, 0, 0, 35, 0, 0, 1, 81, 0, 0, 1,254,
+ 0, 0, 0, 35, 0, 0, 0,239, 0, 0, 1, 81, 0, 0, 0, 35, 0, 0, 0,239, 0, 0, 1,254, 0, 0, 0, 35, 0, 0, 1,254,
+ 0, 0, 1,255, 0, 0, 0, 35, 0, 0, 1,255, 0, 0, 2, 0, 0, 0, 0, 35, 0, 0, 1,254, 0, 0, 2, 0, 0, 0, 0, 35,
+ 0, 0, 0,201, 0, 0, 1, 80, 0, 0, 0, 35, 0, 0, 1, 80, 0, 0, 2, 0, 0, 0, 0, 35, 0, 0, 0,201, 0, 0, 2, 0,
+ 0, 0, 0, 35, 0, 0, 0,200, 0, 0, 1,255, 0, 0, 0, 35, 0, 0, 0,238, 0, 0, 1,255, 0, 0, 0, 35, 0, 0, 0,200,
+ 0, 0, 0,238, 0, 0, 0, 35, 0, 0, 1, 80, 0, 0, 2, 1, 0, 0, 0, 35, 0, 0, 1, 80, 0, 0, 1, 82, 0, 0, 0, 35,
+ 0, 0, 1, 82, 0, 0, 2, 1, 0, 0, 0, 35, 0, 0, 2, 1, 0, 0, 2, 2, 0, 0, 0, 35, 0, 0, 2, 2, 0, 0, 2, 3,
+ 0, 0, 0, 35, 0, 0, 2, 1, 0, 0, 2, 3, 0, 0, 0, 35, 0, 0, 1, 81, 0, 0, 1, 85, 0, 0, 0, 35, 0, 0, 1, 81,
+ 0, 0, 2, 3, 0, 0, 0, 35, 0, 0, 1, 85, 0, 0, 2, 3, 0, 0, 0, 35, 0, 0, 1, 84, 0, 0, 2, 2, 0, 0, 0, 35,
+ 0, 0, 1, 83, 0, 0, 2, 2, 0, 0, 0, 35, 0, 0, 1, 83, 0, 0, 1, 84, 0, 0, 0, 35, 0, 0, 0,236, 0, 0, 2, 4,
+ 0, 0, 0, 35, 0, 0, 0,236, 0, 0, 0,240, 0, 0, 0, 35, 0, 0, 0,240, 0, 0, 2, 4, 0, 0, 0, 35, 0, 0, 2, 4,
+ 0, 0, 2, 5, 0, 0, 0, 35, 0, 0, 2, 5, 0, 0, 2, 6, 0, 0, 0, 35, 0, 0, 2, 4, 0, 0, 2, 6, 0, 0, 0, 35,
+ 0, 0, 0,237, 0, 0, 1, 84, 0, 0, 0, 35, 0, 0, 0,237, 0, 0, 2, 6, 0, 0, 0, 35, 0, 0, 1, 84, 0, 0, 2, 6,
+ 0, 0, 0, 35, 0, 0, 1, 85, 0, 0, 2, 5, 0, 0, 0, 35, 0, 0, 0,241, 0, 0, 2, 5, 0, 0, 0, 35, 0, 0, 0,241,
+ 0, 0, 1, 85, 0, 0, 0, 35, 0, 0, 0,235, 0, 0, 2, 7, 0, 0, 0, 35, 0, 0, 0,235, 0, 0, 1, 83, 0, 0, 0, 35,
+ 0, 0, 1, 83, 0, 0, 2, 7, 0, 0, 0, 35, 0, 0, 2, 7, 0, 0, 2, 8, 0, 0, 0, 35, 0, 0, 2, 8, 0, 0, 2, 9,
+ 0, 0, 0, 35, 0, 0, 2, 7, 0, 0, 2, 9, 0, 0, 0, 35, 0, 0, 0,198, 0, 0, 0,234, 0, 0, 0, 35, 0, 0, 0,234,
+ 0, 0, 2, 9, 0, 0, 0, 35, 0, 0, 0,198, 0, 0, 2, 9, 0, 0, 0, 35, 0, 0, 0,199, 0, 0, 2, 8, 0, 0, 0, 35,
+ 0, 0, 1, 82, 0, 0, 2, 8, 0, 0, 0, 35, 0, 0, 0,199, 0, 0, 1, 82, 0, 0, 0, 35, 0, 0, 1, 87, 0, 0, 2, 10,
+ 0, 0, 0, 35, 0, 0, 0,245, 0, 0, 2, 10, 0, 0, 0, 35, 0, 0, 0,245, 0, 0, 1, 87, 0, 0, 0, 35, 0, 0, 2, 10,
+ 0, 0, 2, 11, 0, 0, 0, 35, 0, 0, 2, 10, 0, 0, 2, 12, 0, 0, 0, 35, 0, 0, 2, 11, 0, 0, 2, 12, 0, 0, 0, 35,
+ 0, 0, 0,209, 0, 0, 1, 86, 0, 0, 0, 35, 0, 0, 0,209, 0, 0, 2, 12, 0, 0, 0, 35, 0, 0, 1, 86, 0, 0, 2, 12,
+ 0, 0, 0, 35, 0, 0, 0,208, 0, 0, 2, 11, 0, 0, 0, 35, 0, 0, 0,208, 0, 0, 0,244, 0, 0, 0, 35, 0, 0, 0,244,
+ 0, 0, 2, 11, 0, 0, 0, 35, 0, 0, 1, 86, 0, 0, 2, 13, 0, 0, 0, 35, 0, 0, 1, 88, 0, 0, 2, 13, 0, 0, 0, 35,
+ 0, 0, 1, 86, 0, 0, 1, 88, 0, 0, 0, 35, 0, 0, 2, 13, 0, 0, 2, 14, 0, 0, 0, 35, 0, 0, 2, 13, 0, 0, 2, 15,
+ 0, 0, 0, 35, 0, 0, 2, 14, 0, 0, 2, 15, 0, 0, 0, 35, 0, 0, 1, 87, 0, 0, 1, 91, 0, 0, 0, 35, 0, 0, 1, 91,
+ 0, 0, 2, 15, 0, 0, 0, 35, 0, 0, 1, 87, 0, 0, 2, 15, 0, 0, 0, 35, 0, 0, 1, 90, 0, 0, 2, 14, 0, 0, 0, 35,
+ 0, 0, 1, 89, 0, 0, 1, 90, 0, 0, 0, 35, 0, 0, 1, 89, 0, 0, 2, 14, 0, 0, 0, 35, 0, 0, 0,212, 0, 0, 2, 16,
+ 0, 0, 0, 35, 0, 0, 0,242, 0, 0, 2, 16, 0, 0, 0, 35, 0, 0, 0,212, 0, 0, 0,242, 0, 0, 0, 35, 0, 0, 2, 16,
+ 0, 0, 2, 17, 0, 0, 0, 35, 0, 0, 2, 16, 0, 0, 2, 18, 0, 0, 0, 35, 0, 0, 2, 17, 0, 0, 2, 18, 0, 0, 0, 35,
+ 0, 0, 0,213, 0, 0, 1, 90, 0, 0, 0, 35, 0, 0, 1, 90, 0, 0, 2, 18, 0, 0, 0, 35, 0, 0, 0,213, 0, 0, 2, 18,
+ 0, 0, 0, 35, 0, 0, 1, 91, 0, 0, 2, 17, 0, 0, 0, 35, 0, 0, 0,243, 0, 0, 1, 91, 0, 0, 0, 35, 0, 0, 0,243,
+ 0, 0, 2, 17, 0, 0, 0, 35, 0, 0, 0,211, 0, 0, 2, 19, 0, 0, 0, 35, 0, 0, 1, 89, 0, 0, 2, 19, 0, 0, 0, 35,
+ 0, 0, 0,211, 0, 0, 1, 89, 0, 0, 0, 35, 0, 0, 2, 19, 0, 0, 2, 20, 0, 0, 0, 35, 0, 0, 2, 19, 0, 0, 2, 21,
+ 0, 0, 0, 35, 0, 0, 2, 20, 0, 0, 2, 21, 0, 0, 0, 35, 0, 0, 0,206, 0, 0, 0,210, 0, 0, 0, 35, 0, 0, 0,206,
+ 0, 0, 2, 21, 0, 0, 0, 35, 0, 0, 0,210, 0, 0, 2, 21, 0, 0, 0, 35, 0, 0, 0,207, 0, 0, 2, 20, 0, 0, 0, 35,
+ 0, 0, 0,207, 0, 0, 1, 88, 0, 0, 0, 35, 0, 0, 1, 88, 0, 0, 2, 20, 0, 0, 0, 35, 0, 0, 1, 93, 0, 0, 2, 22,
+ 0, 0, 0, 35, 0, 0, 0,247, 0, 0, 2, 22, 0, 0, 0, 35, 0, 0, 0,247, 0, 0, 1, 93, 0, 0, 0, 35, 0, 0, 2, 22,
+ 0, 0, 2, 23, 0, 0, 0, 35, 0, 0, 2, 22, 0, 0, 2, 24, 0, 0, 0, 35, 0, 0, 2, 23, 0, 0, 2, 24, 0, 0, 0, 35,
+ 0, 0, 0,217, 0, 0, 1, 92, 0, 0, 0, 35, 0, 0, 0,217, 0, 0, 2, 24, 0, 0, 0, 35, 0, 0, 1, 92, 0, 0, 2, 24,
+ 0, 0, 0, 35, 0, 0, 0,216, 0, 0, 2, 23, 0, 0, 0, 35, 0, 0, 0,216, 0, 0, 0,246, 0, 0, 0, 35, 0, 0, 0,246,
+ 0, 0, 2, 23, 0, 0, 0, 35, 0, 0, 1, 92, 0, 0, 2, 25, 0, 0, 0, 35, 0, 0, 1, 94, 0, 0, 2, 25, 0, 0, 0, 35,
+ 0, 0, 1, 92, 0, 0, 1, 94, 0, 0, 0, 35, 0, 0, 2, 25, 0, 0, 2, 26, 0, 0, 0, 35, 0, 0, 2, 25, 0, 0, 2, 27,
+ 0, 0, 0, 35, 0, 0, 2, 26, 0, 0, 2, 27, 0, 0, 0, 35, 0, 0, 1, 93, 0, 0, 1, 97, 0, 0, 0, 35, 0, 0, 1, 97,
+ 0, 0, 2, 27, 0, 0, 0, 35, 0, 0, 1, 93, 0, 0, 2, 27, 0, 0, 0, 35, 0, 0, 1, 96, 0, 0, 2, 26, 0, 0, 0, 35,
+ 0, 0, 1, 95, 0, 0, 1, 96, 0, 0, 0, 35, 0, 0, 1, 95, 0, 0, 2, 26, 0, 0, 0, 35, 0, 0, 0,220, 0, 0, 2, 28,
+ 0, 0, 0, 35, 0, 0, 0,248, 0, 0, 2, 28, 0, 0, 0, 35, 0, 0, 0,220, 0, 0, 0,248, 0, 0, 0, 35, 0, 0, 2, 28,
+ 0, 0, 2, 29, 0, 0, 0, 35, 0, 0, 2, 28, 0, 0, 2, 30, 0, 0, 0, 35, 0, 0, 2, 29, 0, 0, 2, 30, 0, 0, 0, 35,
+ 0, 0, 0,221, 0, 0, 1, 96, 0, 0, 0, 35, 0, 0, 1, 96, 0, 0, 2, 30, 0, 0, 0, 35, 0, 0, 0,221, 0, 0, 2, 30,
+ 0, 0, 0, 35, 0, 0, 1, 97, 0, 0, 2, 29, 0, 0, 0, 35, 0, 0, 0,249, 0, 0, 1, 97, 0, 0, 0, 35, 0, 0, 0,249,
+ 0, 0, 2, 29, 0, 0, 0, 35, 0, 0, 0,219, 0, 0, 2, 31, 0, 0, 0, 35, 0, 0, 1, 95, 0, 0, 2, 31, 0, 0, 0, 35,
+ 0, 0, 0,219, 0, 0, 1, 95, 0, 0, 0, 35, 0, 0, 2, 31, 0, 0, 2, 32, 0, 0, 0, 35, 0, 0, 2, 31, 0, 0, 2, 33,
+ 0, 0, 0, 35, 0, 0, 2, 32, 0, 0, 2, 33, 0, 0, 0, 35, 0, 0, 0,214, 0, 0, 0,218, 0, 0, 0, 35, 0, 0, 0,214,
+ 0, 0, 2, 33, 0, 0, 0, 35, 0, 0, 0,218, 0, 0, 2, 33, 0, 0, 0, 35, 0, 0, 0,215, 0, 0, 2, 32, 0, 0, 0, 35,
+ 0, 0, 0,215, 0, 0, 1, 94, 0, 0, 0, 35, 0, 0, 1, 94, 0, 0, 2, 32, 0, 0, 0, 35, 0, 0, 1, 99, 0, 0, 2, 34,
+ 0, 0, 0, 35, 0, 0, 0,251, 0, 0, 2, 34, 0, 0, 0, 35, 0, 0, 0,251, 0, 0, 1, 99, 0, 0, 0, 35, 0, 0, 2, 34,
+ 0, 0, 2, 35, 0, 0, 0, 35, 0, 0, 2, 34, 0, 0, 2, 36, 0, 0, 0, 35, 0, 0, 2, 35, 0, 0, 2, 36, 0, 0, 0, 35,
+ 0, 0, 0,225, 0, 0, 1, 98, 0, 0, 0, 35, 0, 0, 0,225, 0, 0, 2, 36, 0, 0, 0, 35, 0, 0, 1, 98, 0, 0, 2, 36,
+ 0, 0, 0, 35, 0, 0, 0,224, 0, 0, 2, 35, 0, 0, 0, 35, 0, 0, 0,224, 0, 0, 0,250, 0, 0, 0, 35, 0, 0, 0,250,
+ 0, 0, 2, 35, 0, 0, 0, 35, 0, 0, 1, 98, 0, 0, 2, 37, 0, 0, 0, 35, 0, 0, 1,100, 0, 0, 2, 37, 0, 0, 0, 35,
+ 0, 0, 1, 98, 0, 0, 1,100, 0, 0, 0, 35, 0, 0, 2, 37, 0, 0, 2, 38, 0, 0, 0, 35, 0, 0, 2, 37, 0, 0, 2, 39,
+ 0, 0, 0, 35, 0, 0, 2, 38, 0, 0, 2, 39, 0, 0, 0, 35, 0, 0, 1, 99, 0, 0, 1,103, 0, 0, 0, 35, 0, 0, 1,103,
+ 0, 0, 2, 39, 0, 0, 0, 35, 0, 0, 1, 99, 0, 0, 2, 39, 0, 0, 0, 35, 0, 0, 1,102, 0, 0, 2, 38, 0, 0, 0, 35,
+ 0, 0, 1,101, 0, 0, 1,102, 0, 0, 0, 35, 0, 0, 1,101, 0, 0, 2, 38, 0, 0, 0, 35, 0, 0, 0,228, 0, 0, 2, 40,
+ 0, 0, 0, 35, 0, 0, 0,252, 0, 0, 2, 40, 0, 0, 0, 35, 0, 0, 0,228, 0, 0, 0,252, 0, 0, 0, 35, 0, 0, 2, 40,
+ 0, 0, 2, 41, 0, 0, 0, 35, 0, 0, 2, 40, 0, 0, 2, 42, 0, 0, 0, 35, 0, 0, 2, 41, 0, 0, 2, 42, 0, 0, 0, 35,
+ 0, 0, 0,229, 0, 0, 1,102, 0, 0, 0, 35, 0, 0, 1,102, 0, 0, 2, 42, 0, 0, 0, 35, 0, 0, 0,229, 0, 0, 2, 42,
+ 0, 0, 0, 35, 0, 0, 1,103, 0, 0, 2, 41, 0, 0, 0, 35, 0, 0, 0,253, 0, 0, 1,103, 0, 0, 0, 35, 0, 0, 0,253,
+ 0, 0, 2, 41, 0, 0, 0, 35, 0, 0, 0,227, 0, 0, 2, 43, 0, 0, 0, 35, 0, 0, 1,101, 0, 0, 2, 43, 0, 0, 0, 35,
+ 0, 0, 0,227, 0, 0, 1,101, 0, 0, 0, 35, 0, 0, 2, 43, 0, 0, 2, 44, 0, 0, 0, 35, 0, 0, 2, 43, 0, 0, 2, 45,
+ 0, 0, 0, 35, 0, 0, 2, 44, 0, 0, 2, 45, 0, 0, 0, 35, 0, 0, 0,222, 0, 0, 0,226, 0, 0, 0, 35, 0, 0, 0,222,
+ 0, 0, 2, 45, 0, 0, 0, 35, 0, 0, 0,226, 0, 0, 2, 45, 0, 0, 0, 35, 0, 0, 0,223, 0, 0, 2, 44, 0, 0, 0, 35,
+ 0, 0, 0,223, 0, 0, 1,100, 0, 0, 0, 35, 0, 0, 1,100, 0, 0, 2, 44, 0, 0, 0, 35, 0, 0, 1,105, 0, 0, 2, 46,
+ 0, 0, 0, 35, 0, 0, 0,255, 0, 0, 2, 46, 0, 0, 0, 35, 0, 0, 0,255, 0, 0, 1,105, 0, 0, 0, 35, 0, 0, 2, 46,
+ 0, 0, 2, 47, 0, 0, 0, 35, 0, 0, 2, 46, 0, 0, 2, 48, 0, 0, 0, 35, 0, 0, 2, 47, 0, 0, 2, 48, 0, 0, 0, 35,
+ 0, 0, 0,233, 0, 0, 1,104, 0, 0, 0, 35, 0, 0, 0,233, 0, 0, 2, 48, 0, 0, 0, 35, 0, 0, 1,104, 0, 0, 2, 48,
+ 0, 0, 0, 35, 0, 0, 0,232, 0, 0, 2, 47, 0, 0, 0, 35, 0, 0, 0,232, 0, 0, 0,254, 0, 0, 0, 35, 0, 0, 0,254,
+ 0, 0, 2, 47, 0, 0, 0, 35, 0, 0, 1,104, 0, 0, 2, 49, 0, 0, 0, 35, 0, 0, 1,106, 0, 0, 2, 49, 0, 0, 0, 35,
+ 0, 0, 1,104, 0, 0, 1,106, 0, 0, 0, 35, 0, 0, 2, 49, 0, 0, 2, 50, 0, 0, 0, 35, 0, 0, 2, 49, 0, 0, 2, 51,
+ 0, 0, 0, 35, 0, 0, 2, 50, 0, 0, 2, 51, 0, 0, 0, 35, 0, 0, 1,105, 0, 0, 1,109, 0, 0, 0, 35, 0, 0, 1,109,
+ 0, 0, 2, 51, 0, 0, 0, 35, 0, 0, 1,105, 0, 0, 2, 51, 0, 0, 0, 35, 0, 0, 1,108, 0, 0, 2, 50, 0, 0, 0, 35,
+ 0, 0, 1,107, 0, 0, 1,108, 0, 0, 0, 35, 0, 0, 1,107, 0, 0, 2, 50, 0, 0, 0, 35, 0, 0, 0,236, 0, 0, 2, 52,
+ 0, 0, 0, 35, 0, 0, 1, 0, 0, 0, 2, 52, 0, 0, 0, 35, 0, 0, 0,236, 0, 0, 1, 0, 0, 0, 0, 35, 0, 0, 2, 52,
+ 0, 0, 2, 53, 0, 0, 0, 35, 0, 0, 2, 52, 0, 0, 2, 54, 0, 0, 0, 35, 0, 0, 2, 53, 0, 0, 2, 54, 0, 0, 0, 35,
+ 0, 0, 0,237, 0, 0, 1,108, 0, 0, 0, 35, 0, 0, 1,108, 0, 0, 2, 54, 0, 0, 0, 35, 0, 0, 0,237, 0, 0, 2, 54,
+ 0, 0, 0, 35, 0, 0, 1,109, 0, 0, 2, 53, 0, 0, 0, 35, 0, 0, 1, 1, 0, 0, 1,109, 0, 0, 0, 35, 0, 0, 1, 1,
+ 0, 0, 2, 53, 0, 0, 0, 35, 0, 0, 0,235, 0, 0, 2, 55, 0, 0, 0, 35, 0, 0, 1,107, 0, 0, 2, 55, 0, 0, 0, 35,
+ 0, 0, 0,235, 0, 0, 1,107, 0, 0, 0, 35, 0, 0, 2, 55, 0, 0, 2, 56, 0, 0, 0, 35, 0, 0, 2, 55, 0, 0, 2, 57,
+ 0, 0, 0, 35, 0, 0, 2, 56, 0, 0, 2, 57, 0, 0, 0, 35, 0, 0, 0,230, 0, 0, 0,234, 0, 0, 0, 35, 0, 0, 0,230,
+ 0, 0, 2, 57, 0, 0, 0, 35, 0, 0, 0,234, 0, 0, 2, 57, 0, 0, 0, 35, 0, 0, 0,231, 0, 0, 2, 56, 0, 0, 0, 35,
+ 0, 0, 0,231, 0, 0, 1,106, 0, 0, 0, 35, 0, 0, 1,106, 0, 0, 2, 56, 0, 0, 0, 35, 0, 0, 1,111, 0, 0, 2, 58,
+ 0, 0, 0, 35, 0, 0, 1, 3, 0, 0, 2, 58, 0, 0, 0, 35, 0, 0, 1, 3, 0, 0, 1,111, 0, 0, 0, 35, 0, 0, 2, 58,
+ 0, 0, 2, 59, 0, 0, 0, 35, 0, 0, 2, 58, 0, 0, 2, 60, 0, 0, 0, 35, 0, 0, 2, 59, 0, 0, 2, 60, 0, 0, 0, 35,
+ 0, 0, 0,241, 0, 0, 1,110, 0, 0, 0, 35, 0, 0, 0,241, 0, 0, 2, 60, 0, 0, 0, 35, 0, 0, 1,110, 0, 0, 2, 60,
+ 0, 0, 0, 35, 0, 0, 0,240, 0, 0, 2, 59, 0, 0, 0, 35, 0, 0, 0,240, 0, 0, 1, 2, 0, 0, 0, 35, 0, 0, 1, 2,
+ 0, 0, 2, 59, 0, 0, 0, 35, 0, 0, 1,110, 0, 0, 2, 61, 0, 0, 0, 35, 0, 0, 1,113, 0, 0, 2, 61, 0, 0, 0, 35,
+ 0, 0, 1,110, 0, 0, 1,113, 0, 0, 0, 35, 0, 0, 2, 61, 0, 0, 2, 62, 0, 0, 0, 35, 0, 0, 2, 61, 0, 0, 2, 63,
+ 0, 0, 0, 35, 0, 0, 2, 62, 0, 0, 2, 63, 0, 0, 0, 35, 0, 0, 1,111, 0, 0, 1,115, 0, 0, 0, 35, 0, 0, 1,115,
+ 0, 0, 2, 63, 0, 0, 0, 35, 0, 0, 1,111, 0, 0, 2, 63, 0, 0, 0, 35, 0, 0, 1,114, 0, 0, 2, 62, 0, 0, 0, 35,
+ 0, 0, 1,112, 0, 0, 1,114, 0, 0, 0, 35, 0, 0, 1,112, 0, 0, 2, 62, 0, 0, 0, 35, 0, 0, 0,204, 0, 0, 2, 64,
+ 0, 0, 0, 35, 0, 0, 1, 4, 0, 0, 2, 64, 0, 0, 0, 35, 0, 0, 0,204, 0, 0, 1, 4, 0, 0, 0, 35, 0, 0, 2, 64,
+ 0, 0, 2, 65, 0, 0, 0, 35, 0, 0, 2, 64, 0, 0, 2, 66, 0, 0, 0, 35, 0, 0, 2, 65, 0, 0, 2, 66, 0, 0, 0, 35,
+ 0, 0, 0,205, 0, 0, 1,114, 0, 0, 0, 35, 0, 0, 1,114, 0, 0, 2, 66, 0, 0, 0, 35, 0, 0, 0,205, 0, 0, 2, 66,
+ 0, 0, 0, 35, 0, 0, 1,115, 0, 0, 2, 65, 0, 0, 0, 35, 0, 0, 1, 5, 0, 0, 1,115, 0, 0, 0, 35, 0, 0, 1, 5,
+ 0, 0, 2, 65, 0, 0, 0, 35, 0, 0, 0,203, 0, 0, 2, 67, 0, 0, 0, 35, 0, 0, 1,112, 0, 0, 2, 67, 0, 0, 0, 35,
+ 0, 0, 0,203, 0, 0, 1,112, 0, 0, 0, 35, 0, 0, 2, 67, 0, 0, 2, 68, 0, 0, 0, 35, 0, 0, 2, 67, 0, 0, 2, 69,
+ 0, 0, 0, 35, 0, 0, 2, 68, 0, 0, 2, 69, 0, 0, 0, 35, 0, 0, 0,202, 0, 0, 0,238, 0, 0, 0, 35, 0, 0, 0,238,
+ 0, 0, 2, 69, 0, 0, 0, 35, 0, 0, 0,202, 0, 0, 2, 69, 0, 0, 0, 35, 0, 0, 0,239, 0, 0, 2, 68, 0, 0, 0, 35,
+ 0, 0, 0,239, 0, 0, 1,113, 0, 0, 0, 35, 0, 0, 1,113, 0, 0, 2, 68, 0, 0, 0, 35, 0, 0, 1,117, 0, 0, 2, 70,
+ 0, 0, 0, 35, 0, 0, 1, 11, 0, 0, 1,117, 0, 0, 0, 35, 0, 0, 1, 11, 0, 0, 2, 70, 0, 0, 0, 35, 0, 0, 2, 70,
+ 0, 0, 2, 71, 0, 0, 0, 35, 0, 0, 2, 71, 0, 0, 2, 72, 0, 0, 0, 35, 0, 0, 2, 70, 0, 0, 2, 72, 0, 0, 0, 35,
+ 0, 0, 0,243, 0, 0, 1,116, 0, 0, 0, 35, 0, 0, 1,116, 0, 0, 2, 72, 0, 0, 0, 35, 0, 0, 0,243, 0, 0, 2, 72,
+ 0, 0, 0, 35, 0, 0, 0,242, 0, 0, 2, 71, 0, 0, 0, 35, 0, 0, 1, 10, 0, 0, 2, 71, 0, 0, 0, 35, 0, 0, 0,242,
+ 0, 0, 1, 10, 0, 0, 0, 35, 0, 0, 1,116, 0, 0, 2, 73, 0, 0, 0, 35, 0, 0, 1,116, 0, 0, 1,118, 0, 0, 0, 35,
+ 0, 0, 1,118, 0, 0, 2, 73, 0, 0, 0, 35, 0, 0, 2, 73, 0, 0, 2, 74, 0, 0, 0, 35, 0, 0, 2, 74, 0, 0, 2, 75,
+ 0, 0, 0, 35, 0, 0, 2, 73, 0, 0, 2, 75, 0, 0, 0, 35, 0, 0, 1,117, 0, 0, 1,121, 0, 0, 0, 35, 0, 0, 1,117,
+ 0, 0, 2, 75, 0, 0, 0, 35, 0, 0, 1,121, 0, 0, 2, 75, 0, 0, 0, 35, 0, 0, 1,120, 0, 0, 2, 74, 0, 0, 0, 35,
+ 0, 0, 1,119, 0, 0, 2, 74, 0, 0, 0, 35, 0, 0, 1,119, 0, 0, 1,120, 0, 0, 0, 35, 0, 0, 1, 8, 0, 0, 2, 76,
+ 0, 0, 0, 35, 0, 0, 1, 8, 0, 0, 1, 12, 0, 0, 0, 35, 0, 0, 1, 12, 0, 0, 2, 76, 0, 0, 0, 35, 0, 0, 2, 76,
+ 0, 0, 2, 77, 0, 0, 0, 35, 0, 0, 2, 77, 0, 0, 2, 78, 0, 0, 0, 35, 0, 0, 2, 76, 0, 0, 2, 78, 0, 0, 0, 35,
+ 0, 0, 1, 9, 0, 0, 1,120, 0, 0, 0, 35, 0, 0, 1, 9, 0, 0, 2, 78, 0, 0, 0, 35, 0, 0, 1,120, 0, 0, 2, 78,
+ 0, 0, 0, 35, 0, 0, 1,121, 0, 0, 2, 77, 0, 0, 0, 35, 0, 0, 1, 13, 0, 0, 2, 77, 0, 0, 0, 35, 0, 0, 1, 13,
+ 0, 0, 1,121, 0, 0, 0, 35, 0, 0, 1, 7, 0, 0, 2, 79, 0, 0, 0, 35, 0, 0, 1, 7, 0, 0, 1,119, 0, 0, 0, 35,
+ 0, 0, 1,119, 0, 0, 2, 79, 0, 0, 0, 35, 0, 0, 2, 79, 0, 0, 2, 80, 0, 0, 0, 35, 0, 0, 2, 80, 0, 0, 2, 81,
+ 0, 0, 0, 35, 0, 0, 2, 79, 0, 0, 2, 81, 0, 0, 0, 35, 0, 0, 0,244, 0, 0, 1, 6, 0, 0, 0, 35, 0, 0, 1, 6,
+ 0, 0, 2, 81, 0, 0, 0, 35, 0, 0, 0,244, 0, 0, 2, 81, 0, 0, 0, 35, 0, 0, 0,245, 0, 0, 2, 80, 0, 0, 0, 35,
+ 0, 0, 1,118, 0, 0, 2, 80, 0, 0, 0, 35, 0, 0, 0,245, 0, 0, 1,118, 0, 0, 0, 35, 0, 0, 1,123, 0, 0, 2, 82,
+ 0, 0, 0, 35, 0, 0, 1, 15, 0, 0, 1,123, 0, 0, 0, 35, 0, 0, 1, 15, 0, 0, 2, 82, 0, 0, 0, 35, 0, 0, 2, 82,
+ 0, 0, 2, 83, 0, 0, 0, 35, 0, 0, 2, 83, 0, 0, 2, 84, 0, 0, 0, 35, 0, 0, 2, 82, 0, 0, 2, 84, 0, 0, 0, 35,
+ 0, 0, 0,249, 0, 0, 1,122, 0, 0, 0, 35, 0, 0, 1,122, 0, 0, 2, 84, 0, 0, 0, 35, 0, 0, 0,249, 0, 0, 2, 84,
+ 0, 0, 0, 35, 0, 0, 0,248, 0, 0, 2, 83, 0, 0, 0, 35, 0, 0, 1, 14, 0, 0, 2, 83, 0, 0, 0, 35, 0, 0, 0,248,
+ 0, 0, 1, 14, 0, 0, 0, 35, 0, 0, 1,122, 0, 0, 2, 85, 0, 0, 0, 35, 0, 0, 1,122, 0, 0, 1,124, 0, 0, 0, 35,
+ 0, 0, 1,124, 0, 0, 2, 85, 0, 0, 0, 35, 0, 0, 2, 85, 0, 0, 2, 86, 0, 0, 0, 35, 0, 0, 2, 86, 0, 0, 2, 87,
+ 0, 0, 0, 35, 0, 0, 2, 85, 0, 0, 2, 87, 0, 0, 0, 35, 0, 0, 1,123, 0, 0, 1,127, 0, 0, 0, 35, 0, 0, 1,123,
+ 0, 0, 2, 87, 0, 0, 0, 35, 0, 0, 1,127, 0, 0, 2, 87, 0, 0, 0, 35, 0, 0, 1,126, 0, 0, 2, 86, 0, 0, 0, 35,
+ 0, 0, 1,125, 0, 0, 2, 86, 0, 0, 0, 35, 0, 0, 1,125, 0, 0, 1,126, 0, 0, 0, 35, 0, 0, 1, 12, 0, 0, 2, 88,
+ 0, 0, 0, 35, 0, 0, 1, 12, 0, 0, 1, 16, 0, 0, 0, 35, 0, 0, 1, 16, 0, 0, 2, 88, 0, 0, 0, 35, 0, 0, 2, 88,
+ 0, 0, 2, 89, 0, 0, 0, 35, 0, 0, 2, 89, 0, 0, 2, 90, 0, 0, 0, 35, 0, 0, 2, 88, 0, 0, 2, 90, 0, 0, 0, 35,
+ 0, 0, 1, 13, 0, 0, 1,126, 0, 0, 0, 35, 0, 0, 1, 13, 0, 0, 2, 90, 0, 0, 0, 35, 0, 0, 1,126, 0, 0, 2, 90,
+ 0, 0, 0, 35, 0, 0, 1,127, 0, 0, 2, 89, 0, 0, 0, 35, 0, 0, 1, 17, 0, 0, 2, 89, 0, 0, 0, 35, 0, 0, 1, 17,
+ 0, 0, 1,127, 0, 0, 0, 35, 0, 0, 1, 11, 0, 0, 2, 91, 0, 0, 0, 35, 0, 0, 1, 11, 0, 0, 1,125, 0, 0, 0, 35,
+ 0, 0, 1,125, 0, 0, 2, 91, 0, 0, 0, 35, 0, 0, 2, 91, 0, 0, 2, 92, 0, 0, 0, 35, 0, 0, 2, 92, 0, 0, 2, 93,
+ 0, 0, 0, 35, 0, 0, 2, 91, 0, 0, 2, 93, 0, 0, 0, 35, 0, 0, 0,246, 0, 0, 1, 10, 0, 0, 0, 35, 0, 0, 1, 10,
+ 0, 0, 2, 93, 0, 0, 0, 35, 0, 0, 0,246, 0, 0, 2, 93, 0, 0, 0, 35, 0, 0, 0,247, 0, 0, 2, 92, 0, 0, 0, 35,
+ 0, 0, 1,124, 0, 0, 2, 92, 0, 0, 0, 35, 0, 0, 0,247, 0, 0, 1,124, 0, 0, 0, 35, 0, 0, 1,129, 0, 0, 2, 94,
+ 0, 0, 0, 35, 0, 0, 1, 19, 0, 0, 1,129, 0, 0, 0, 35, 0, 0, 1, 19, 0, 0, 2, 94, 0, 0, 0, 35, 0, 0, 2, 94,
+ 0, 0, 2, 95, 0, 0, 0, 35, 0, 0, 2, 95, 0, 0, 2, 96, 0, 0, 0, 35, 0, 0, 2, 94, 0, 0, 2, 96, 0, 0, 0, 35,
+ 0, 0, 0,253, 0, 0, 1,128, 0, 0, 0, 35, 0, 0, 1,128, 0, 0, 2, 96, 0, 0, 0, 35, 0, 0, 0,253, 0, 0, 2, 96,
+ 0, 0, 0, 35, 0, 0, 0,252, 0, 0, 2, 95, 0, 0, 0, 35, 0, 0, 1, 18, 0, 0, 2, 95, 0, 0, 0, 35, 0, 0, 0,252,
+ 0, 0, 1, 18, 0, 0, 0, 35, 0, 0, 1,128, 0, 0, 2, 97, 0, 0, 0, 35, 0, 0, 1,128, 0, 0, 1,130, 0, 0, 0, 35,
+ 0, 0, 1,130, 0, 0, 2, 97, 0, 0, 0, 35, 0, 0, 2, 97, 0, 0, 2, 98, 0, 0, 0, 35, 0, 0, 2, 98, 0, 0, 2, 99,
+ 0, 0, 0, 35, 0, 0, 2, 97, 0, 0, 2, 99, 0, 0, 0, 35, 0, 0, 1,129, 0, 0, 1,133, 0, 0, 0, 35, 0, 0, 1,129,
+ 0, 0, 2, 99, 0, 0, 0, 35, 0, 0, 1,133, 0, 0, 2, 99, 0, 0, 0, 35, 0, 0, 1,132, 0, 0, 2, 98, 0, 0, 0, 35,
+ 0, 0, 1,131, 0, 0, 2, 98, 0, 0, 0, 35, 0, 0, 1,131, 0, 0, 1,132, 0, 0, 0, 35, 0, 0, 1, 16, 0, 0, 2,100,
+ 0, 0, 0, 35, 0, 0, 1, 16, 0, 0, 1, 20, 0, 0, 0, 35, 0, 0, 1, 20, 0, 0, 2,100, 0, 0, 0, 35, 0, 0, 2,100,
+ 0, 0, 2,101, 0, 0, 0, 35, 0, 0, 2,101, 0, 0, 2,102, 0, 0, 0, 35, 0, 0, 2,100, 0, 0, 2,102, 0, 0, 0, 35,
+ 0, 0, 1, 17, 0, 0, 1,132, 0, 0, 0, 35, 0, 0, 1, 17, 0, 0, 2,102, 0, 0, 0, 35, 0, 0, 1,132, 0, 0, 2,102,
+ 0, 0, 0, 35, 0, 0, 1,133, 0, 0, 2,101, 0, 0, 0, 35, 0, 0, 1, 21, 0, 0, 2,101, 0, 0, 0, 35, 0, 0, 1, 21,
+ 0, 0, 1,133, 0, 0, 0, 35, 0, 0, 1, 15, 0, 0, 2,103, 0, 0, 0, 35, 0, 0, 1, 15, 0, 0, 1,131, 0, 0, 0, 35,
+ 0, 0, 1,131, 0, 0, 2,103, 0, 0, 0, 35, 0, 0, 2,103, 0, 0, 2,104, 0, 0, 0, 35, 0, 0, 2,104, 0, 0, 2,105,
+ 0, 0, 0, 35, 0, 0, 2,103, 0, 0, 2,105, 0, 0, 0, 35, 0, 0, 0,250, 0, 0, 1, 14, 0, 0, 0, 35, 0, 0, 1, 14,
+ 0, 0, 2,105, 0, 0, 0, 35, 0, 0, 0,250, 0, 0, 2,105, 0, 0, 0, 35, 0, 0, 0,251, 0, 0, 2,104, 0, 0, 0, 35,
+ 0, 0, 1,130, 0, 0, 2,104, 0, 0, 0, 35, 0, 0, 0,251, 0, 0, 1,130, 0, 0, 0, 35, 0, 0, 1,135, 0, 0, 2,106,
+ 0, 0, 0, 35, 0, 0, 1, 23, 0, 0, 1,135, 0, 0, 0, 35, 0, 0, 1, 23, 0, 0, 2,106, 0, 0, 0, 35, 0, 0, 2,106,
+ 0, 0, 2,107, 0, 0, 0, 35, 0, 0, 2,107, 0, 0, 2,108, 0, 0, 0, 35, 0, 0, 2,106, 0, 0, 2,108, 0, 0, 0, 35,
+ 0, 0, 1, 1, 0, 0, 1,134, 0, 0, 0, 35, 0, 0, 1,134, 0, 0, 2,108, 0, 0, 0, 35, 0, 0, 1, 1, 0, 0, 2,108,
+ 0, 0, 0, 35, 0, 0, 1, 0, 0, 0, 2,107, 0, 0, 0, 35, 0, 0, 1, 22, 0, 0, 2,107, 0, 0, 0, 35, 0, 0, 1, 0,
+ 0, 0, 1, 22, 0, 0, 0, 35, 0, 0, 1,134, 0, 0, 2,109, 0, 0, 0, 35, 0, 0, 1,134, 0, 0, 1,136, 0, 0, 0, 35,
+ 0, 0, 1,136, 0, 0, 2,109, 0, 0, 0, 35, 0, 0, 2,109, 0, 0, 2,110, 0, 0, 0, 35, 0, 0, 2,110, 0, 0, 2,111,
+ 0, 0, 0, 35, 0, 0, 2,109, 0, 0, 2,111, 0, 0, 0, 35, 0, 0, 1,135, 0, 0, 1,139, 0, 0, 0, 35, 0, 0, 1,135,
+ 0, 0, 2,111, 0, 0, 0, 35, 0, 0, 1,139, 0, 0, 2,111, 0, 0, 0, 35, 0, 0, 1,138, 0, 0, 2,110, 0, 0, 0, 35,
+ 0, 0, 1,137, 0, 0, 2,110, 0, 0, 0, 35, 0, 0, 1,137, 0, 0, 1,138, 0, 0, 0, 35, 0, 0, 1, 20, 0, 0, 2,112,
+ 0, 0, 0, 35, 0, 0, 1, 20, 0, 0, 1, 24, 0, 0, 0, 35, 0, 0, 1, 24, 0, 0, 2,112, 0, 0, 0, 35, 0, 0, 2,112,
+ 0, 0, 2,113, 0, 0, 0, 35, 0, 0, 2,113, 0, 0, 2,114, 0, 0, 0, 35, 0, 0, 2,112, 0, 0, 2,114, 0, 0, 0, 35,
+ 0, 0, 1, 21, 0, 0, 1,138, 0, 0, 0, 35, 0, 0, 1, 21, 0, 0, 2,114, 0, 0, 0, 35, 0, 0, 1,138, 0, 0, 2,114,
+ 0, 0, 0, 35, 0, 0, 1,139, 0, 0, 2,113, 0, 0, 0, 35, 0, 0, 1, 25, 0, 0, 2,113, 0, 0, 0, 35, 0, 0, 1, 25,
+ 0, 0, 1,139, 0, 0, 0, 35, 0, 0, 1, 19, 0, 0, 2,115, 0, 0, 0, 35, 0, 0, 1, 19, 0, 0, 1,137, 0, 0, 0, 35,
+ 0, 0, 1,137, 0, 0, 2,115, 0, 0, 0, 35, 0, 0, 2,115, 0, 0, 2,116, 0, 0, 0, 35, 0, 0, 2,116, 0, 0, 2,117,
+ 0, 0, 0, 35, 0, 0, 2,115, 0, 0, 2,117, 0, 0, 0, 35, 0, 0, 0,254, 0, 0, 1, 18, 0, 0, 0, 35, 0, 0, 1, 18,
+ 0, 0, 2,117, 0, 0, 0, 35, 0, 0, 0,254, 0, 0, 2,117, 0, 0, 0, 35, 0, 0, 0,255, 0, 0, 2,116, 0, 0, 0, 35,
+ 0, 0, 1,136, 0, 0, 2,116, 0, 0, 0, 35, 0, 0, 0,255, 0, 0, 1,136, 0, 0, 0, 35, 0, 0, 1,141, 0, 0, 2,118,
+ 0, 0, 0, 35, 0, 0, 1, 7, 0, 0, 1,141, 0, 0, 0, 35, 0, 0, 1, 7, 0, 0, 2,118, 0, 0, 0, 35, 0, 0, 2,118,
+ 0, 0, 2,119, 0, 0, 0, 35, 0, 0, 2,119, 0, 0, 2,120, 0, 0, 0, 35, 0, 0, 2,118, 0, 0, 2,120, 0, 0, 0, 35,
+ 0, 0, 1, 5, 0, 0, 1,140, 0, 0, 0, 35, 0, 0, 1,140, 0, 0, 2,120, 0, 0, 0, 35, 0, 0, 1, 5, 0, 0, 2,120,
+ 0, 0, 0, 35, 0, 0, 1, 4, 0, 0, 2,119, 0, 0, 0, 35, 0, 0, 1, 6, 0, 0, 2,119, 0, 0, 0, 35, 0, 0, 1, 4,
+ 0, 0, 1, 6, 0, 0, 0, 35, 0, 0, 1,140, 0, 0, 2,121, 0, 0, 0, 35, 0, 0, 1,140, 0, 0, 1,142, 0, 0, 0, 35,
+ 0, 0, 1,142, 0, 0, 2,121, 0, 0, 0, 35, 0, 0, 2,121, 0, 0, 2,122, 0, 0, 0, 35, 0, 0, 2,122, 0, 0, 2,123,
+ 0, 0, 0, 35, 0, 0, 2,121, 0, 0, 2,123, 0, 0, 0, 35, 0, 0, 1,141, 0, 0, 1,144, 0, 0, 0, 35, 0, 0, 1,141,
+ 0, 0, 2,123, 0, 0, 0, 35, 0, 0, 1,144, 0, 0, 2,123, 0, 0, 0, 35, 0, 0, 1,145, 0, 0, 2,122, 0, 0, 0, 35,
+ 0, 0, 1,143, 0, 0, 2,122, 0, 0, 0, 35, 0, 0, 1,143, 0, 0, 1,145, 0, 0, 0, 35, 0, 0, 1, 24, 0, 0, 2,124,
+ 0, 0, 0, 35, 0, 0, 1, 8, 0, 0, 1, 24, 0, 0, 0, 35, 0, 0, 1, 8, 0, 0, 2,124, 0, 0, 0, 35, 0, 0, 2,124,
+ 0, 0, 2,125, 0, 0, 0, 35, 0, 0, 2,125, 0, 0, 2,126, 0, 0, 0, 35, 0, 0, 2,124, 0, 0, 2,126, 0, 0, 0, 35,
+ 0, 0, 1, 25, 0, 0, 1,145, 0, 0, 0, 35, 0, 0, 1, 25, 0, 0, 2,126, 0, 0, 0, 35, 0, 0, 1,145, 0, 0, 2,126,
+ 0, 0, 0, 35, 0, 0, 1,144, 0, 0, 2,125, 0, 0, 0, 35, 0, 0, 1, 9, 0, 0, 2,125, 0, 0, 0, 35, 0, 0, 1, 9,
+ 0, 0, 1,144, 0, 0, 0, 35, 0, 0, 1, 23, 0, 0, 2,127, 0, 0, 0, 35, 0, 0, 1, 23, 0, 0, 1,143, 0, 0, 0, 35,
+ 0, 0, 1,143, 0, 0, 2,127, 0, 0, 0, 35, 0, 0, 2,127, 0, 0, 2,128, 0, 0, 0, 35, 0, 0, 2,128, 0, 0, 2,129,
+ 0, 0, 0, 35, 0, 0, 2,127, 0, 0, 2,129, 0, 0, 0, 35, 0, 0, 1, 2, 0, 0, 1, 22, 0, 0, 0, 35, 0, 0, 1, 22,
+ 0, 0, 2,129, 0, 0, 0, 35, 0, 0, 1, 2, 0, 0, 2,129, 0, 0, 0, 35, 0, 0, 1, 3, 0, 0, 2,128, 0, 0, 0, 35,
+ 0, 0, 1,142, 0, 0, 2,128, 0, 0, 0, 35, 0, 0, 1, 3, 0, 0, 1,142, 0, 0, 0, 35, 68, 65, 84, 65, 0, 0, 1, 44,
+ 13, 65,152,224, 0, 0, 1, 35, 0, 0, 0, 5, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 12,118,208, 32, 0, 0, 0, 5, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 85, 86, 84,101,120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 12,119, 64, 32, 0, 0, 0, 6, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67,111,108, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12,120, 32, 32,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0,100, 0,
+ 12,118,208, 32, 0, 0, 0, 54, 0, 0, 5, 0, 0, 0, 1, 27, 0, 0, 0,102, 0, 0, 1,146, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 1,146, 0, 0, 0,171, 0, 0, 1, 27, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 14, 0, 0, 1, 27, 0, 0, 0,171,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,171, 0, 0, 1,146, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,147,
+ 0, 0, 0, 46, 0, 0, 1,146, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,146, 0, 0, 1,148, 0, 0, 1,147, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 43, 0, 0, 1,147, 0, 0, 1,148, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,148, 0, 0, 1,146,
+ 0, 0, 0,102, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 26, 0, 0, 0, 12, 0, 0, 0,165, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 0,165, 0, 0, 1,148, 0, 0, 1, 26, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,102, 0, 0, 1, 26, 0, 0, 1,148,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,148, 0, 0, 0,165, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,147,
+ 0, 0, 0, 43, 0, 0, 0,164, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,164, 0, 0, 0,170, 0, 0, 1,147, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 46, 0, 0, 1,147, 0, 0, 0,170, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,170, 0, 0, 0,164,
+ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 26, 0, 0, 0,102, 0, 0, 1,149, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 1,149, 0, 0, 1, 28, 0, 0, 1, 26, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 12, 0, 0, 1, 26, 0, 0, 1, 28,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 28, 0, 0, 1,149, 0, 0, 0,103, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,150,
+ 0, 0, 0,103, 0, 0, 1,149, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,149, 0, 0, 1,151, 0, 0, 1,150, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0,104, 0, 0, 1,150, 0, 0, 1,151, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,151, 0, 0, 1,149,
+ 0, 0, 0,102, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 27, 0, 0, 0, 14, 0, 0, 1, 31, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 1, 31, 0, 0, 1,151, 0, 0, 1, 27, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,102, 0, 0, 1, 27, 0, 0, 1,151,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,151, 0, 0, 1, 31, 0, 0, 0,104, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,150,
+ 0, 0, 0,104, 0, 0, 1, 30, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 30, 0, 0, 1, 29, 0, 0, 1,150, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0,103, 0, 0, 1,150, 0, 0, 1, 29, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 29, 0, 0, 1, 30,
+ 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,168, 0, 0, 0, 45, 0, 0, 1,152, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 1,152, 0, 0, 0,172, 0, 0, 0,168, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 2, 0, 0, 0,168, 0, 0, 0,172,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,172, 0, 0, 1,152, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,153,
+ 0, 0, 0, 47, 0, 0, 1,152, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,152, 0, 0, 1,154, 0, 0, 1,153, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0,104, 0, 0, 1,153, 0, 0, 1,154, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,154, 0, 0, 1,152,
+ 0, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,169, 0, 0, 0, 13, 0, 0, 1, 30, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 1, 30, 0, 0, 1,154, 0, 0, 0,169, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 45, 0, 0, 0,169, 0, 0, 1,154,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,154, 0, 0, 1, 30, 0, 0, 0,104, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,153,
+ 0, 0, 0,104, 0, 0, 1, 31, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 31, 0, 0, 0,173, 0, 0, 1,153, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 47, 0, 0, 1,153, 0, 0, 0,173, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,173, 0, 0, 1, 31,
+ 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,167, 0, 0, 0, 44, 0, 0, 1,155, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 1,155, 0, 0, 1, 29, 0, 0, 0,167, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 13, 0, 0, 0,167, 0, 0, 1, 29,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 29, 0, 0, 1,155, 0, 0, 0,103, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,156,
+ 0, 0, 0,103, 0, 0, 1,155, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,155, 0, 0, 1,157, 0, 0, 1,156, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 42, 0, 0, 1,156, 0, 0, 1,157, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,157, 0, 0, 1,155,
+ 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,166, 0, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 0,162, 0, 0, 1,157, 0, 0, 0,166, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 44, 0, 0, 0,166, 0, 0, 1,157,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,157, 0, 0, 0,162, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,156,
+ 0, 0, 0, 42, 0, 0, 0,163, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,163, 0, 0, 1, 28, 0, 0, 1,156, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0,103, 0, 0, 1,156, 0, 0, 1, 28, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 28, 0, 0, 0,163,
+ 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,158, 0, 0, 0,105, 0, 0, 1, 33, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 1, 33, 0, 0, 0,179, 0, 0, 1,158, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 50, 0, 0, 1,158, 0, 0, 0,179,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,179, 0, 0, 1, 33, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,158,
+ 0, 0, 0, 50, 0, 0, 1,159, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,159, 0, 0, 1,160, 0, 0, 1,158, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0,105, 0, 0, 1,158, 0, 0, 1,160, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,160, 0, 0, 1,159,
+ 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,165, 0, 0, 0, 12, 0, 0, 1, 32, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 1, 32, 0, 0, 1,160, 0, 0, 0,165, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 43, 0, 0, 0,165, 0, 0, 1,160,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,160, 0, 0, 1, 32, 0, 0, 0,105, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,164,
+ 0, 0, 0, 43, 0, 0, 1,159, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,159, 0, 0, 0,178, 0, 0, 0,164, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0,164, 0, 0, 0,178, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,178, 0, 0, 1,159,
+ 0, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,161, 0, 0, 0,105, 0, 0, 1, 32, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 1, 32, 0, 0, 1, 34, 0, 0, 1,161, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,106, 0, 0, 1,161, 0, 0, 1, 34,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 34, 0, 0, 1, 32, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,161,
+ 0, 0, 0,106, 0, 0, 1,162, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,162, 0, 0, 1,163, 0, 0, 1,161, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0,105, 0, 0, 1,161, 0, 0, 1,163, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,163, 0, 0, 1,162,
+ 0, 0, 0,107, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 37, 0, 0, 0, 16, 0, 0, 1, 33, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 1, 33, 0, 0, 1,163, 0, 0, 1, 37, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,107, 0, 0, 1, 37, 0, 0, 1,163,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,163, 0, 0, 1, 33, 0, 0, 0,105, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 36,
+ 0, 0, 0,107, 0, 0, 1,162, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,162, 0, 0, 1, 35, 0, 0, 1, 36, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 15, 0, 0, 1, 36, 0, 0, 1, 35, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 35, 0, 0, 1,162,
+ 0, 0, 0,106, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,164, 0, 0, 0, 49, 0, 0, 0,176, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 0,176, 0, 0, 0,180, 0, 0, 1,164, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 51, 0, 0, 1,164, 0, 0, 0,180,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,180, 0, 0, 0,176, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,164,
+ 0, 0, 0, 51, 0, 0, 1,165, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,165, 0, 0, 1,166, 0, 0, 1,164, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 49, 0, 0, 1,164, 0, 0, 1,166, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,166, 0, 0, 1,165,
+ 0, 0, 0,107, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 36, 0, 0, 0, 15, 0, 0, 0,177, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 0,177, 0, 0, 1,166, 0, 0, 1, 36, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,107, 0, 0, 1, 36, 0, 0, 1,166,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,166, 0, 0, 0,177, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 37,
+ 0, 0, 0,107, 0, 0, 1,165, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,165, 0, 0, 0,181, 0, 0, 1, 37, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 16, 0, 0, 1, 37, 0, 0, 0,181, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,181, 0, 0, 1,165,
+ 0, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,167, 0, 0, 0, 48, 0, 0, 0,175, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 0,175, 0, 0, 1, 35, 0, 0, 1,167, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,106, 0, 0, 1,167, 0, 0, 1, 35,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 35, 0, 0, 0,175, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,167,
+ 0, 0, 0,106, 0, 0, 1,168, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,168, 0, 0, 1,169, 0, 0, 1,167, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 48, 0, 0, 1,167, 0, 0, 1,169, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,169, 0, 0, 1,168,
+ 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,162, 0, 0, 0, 0, 0, 0, 0,174, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 0,174, 0, 0, 1,169, 0, 0, 0,162, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 42, 0, 0, 0,162, 0, 0, 1,169,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,169, 0, 0, 0,174, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,163,
+ 0, 0, 0, 42, 0, 0, 1,168, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,168, 0, 0, 1, 34, 0, 0, 0,163, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 12, 0, 0, 0,163, 0, 0, 1, 34, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 34, 0, 0, 1,168,
+ 0, 0, 0,106, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 39, 0, 0, 0,108, 0, 0, 1,170, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 1,170, 0, 0, 0,187, 0, 0, 1, 39, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 18, 0, 0, 1, 39, 0, 0, 0,187,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,187, 0, 0, 1,170, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,171,
+ 0, 0, 0, 54, 0, 0, 1,170, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,170, 0, 0, 1,172, 0, 0, 1,171, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 45, 0, 0, 1,171, 0, 0, 1,172, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,172, 0, 0, 1,170,
+ 0, 0, 0,108, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 38, 0, 0, 0, 13, 0, 0, 0,169, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 0,169, 0, 0, 1,172, 0, 0, 1, 38, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,108, 0, 0, 1, 38, 0, 0, 1,172,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,172, 0, 0, 0,169, 0, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,171,
+ 0, 0, 0, 45, 0, 0, 0,168, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,168, 0, 0, 0,186, 0, 0, 1,171, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 54, 0, 0, 1,171, 0, 0, 0,186, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,186, 0, 0, 0,168,
+ 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 38, 0, 0, 0,108, 0, 0, 1,173, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 1,173, 0, 0, 1, 40, 0, 0, 1, 38, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 13, 0, 0, 1, 38, 0, 0, 1, 40,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 40, 0, 0, 1,173, 0, 0, 0,109, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,174,
+ 0, 0, 0,109, 0, 0, 1,173, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,173, 0, 0, 1,175, 0, 0, 1,174, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0,110, 0, 0, 1,174, 0, 0, 1,175, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,175, 0, 0, 1,173,
+ 0, 0, 0,108, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 39, 0, 0, 0, 18, 0, 0, 1, 43, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 1, 43, 0, 0, 1,175, 0, 0, 1, 39, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,108, 0, 0, 1, 39, 0, 0, 1,175,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,175, 0, 0, 1, 43, 0, 0, 0,110, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,174,
+ 0, 0, 0,110, 0, 0, 1, 42, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 42, 0, 0, 1, 41, 0, 0, 1,174, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0,109, 0, 0, 1,174, 0, 0, 1, 41, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 41, 0, 0, 1, 42,
+ 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,184, 0, 0, 0, 53, 0, 0, 1,176, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 1,176, 0, 0, 0,188, 0, 0, 0,184, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 3, 0, 0, 0,184, 0, 0, 0,188,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,188, 0, 0, 1,176, 0, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,177,
+ 0, 0, 0, 55, 0, 0, 1,176, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,176, 0, 0, 1,178, 0, 0, 1,177, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0,110, 0, 0, 1,177, 0, 0, 1,178, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,178, 0, 0, 1,176,
+ 0, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,185, 0, 0, 0, 17, 0, 0, 1, 42, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 1, 42, 0, 0, 1,178, 0, 0, 0,185, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 53, 0, 0, 0,185, 0, 0, 1,178,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,178, 0, 0, 1, 42, 0, 0, 0,110, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,177,
+ 0, 0, 0,110, 0, 0, 1, 43, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 43, 0, 0, 0,189, 0, 0, 1,177, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 55, 0, 0, 1,177, 0, 0, 0,189, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,189, 0, 0, 1, 43,
+ 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,183, 0, 0, 0, 52, 0, 0, 1,179, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 1,179, 0, 0, 1, 41, 0, 0, 0,183, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 17, 0, 0, 0,183, 0, 0, 1, 41,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 41, 0, 0, 1,179, 0, 0, 0,109, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,180,
+ 0, 0, 0,109, 0, 0, 1,179, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,179, 0, 0, 1,181, 0, 0, 1,180, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 44, 0, 0, 1,180, 0, 0, 1,181, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,181, 0, 0, 1,179,
+ 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,182, 0, 0, 0, 0, 0, 0, 0,166, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 0,166, 0, 0, 1,181, 0, 0, 0,182, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 52, 0, 0, 0,182, 0, 0, 1,181,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,181, 0, 0, 0,166, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,180,
+ 0, 0, 0, 44, 0, 0, 0,167, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,167, 0, 0, 1, 40, 0, 0, 1,180, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0,109, 0, 0, 1,180, 0, 0, 1, 40, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 40, 0, 0, 0,167,
+ 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 45, 0, 0, 0,111, 0, 0, 1,182, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 1,182, 0, 0, 0,195, 0, 0, 1, 45, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 20, 0, 0, 1, 45, 0, 0, 0,195,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,195, 0, 0, 1,182, 0, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,183,
+ 0, 0, 0, 58, 0, 0, 1,182, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,182, 0, 0, 1,184, 0, 0, 1,183, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 53, 0, 0, 1,183, 0, 0, 1,184, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,184, 0, 0, 1,182,
+ 0, 0, 0,111, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 44, 0, 0, 0, 17, 0, 0, 0,185, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 0,185, 0, 0, 1,184, 0, 0, 1, 44, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,111, 0, 0, 1, 44, 0, 0, 1,184,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,184, 0, 0, 0,185, 0, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,183,
+ 0, 0, 0, 53, 0, 0, 0,184, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,184, 0, 0, 0,194, 0, 0, 1,183, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 58, 0, 0, 1,183, 0, 0, 0,194, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,194, 0, 0, 0,184,
+ 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 44, 0, 0, 0,111, 0, 0, 1,185, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 1,185, 0, 0, 1, 46, 0, 0, 1, 44, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 17, 0, 0, 1, 44, 0, 0, 1, 46,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 46, 0, 0, 1,185, 0, 0, 0,112, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,186,
+ 0, 0, 0,112, 0, 0, 1,185, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,185, 0, 0, 1,187, 0, 0, 1,186, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0,113, 0, 0, 1,186, 0, 0, 1,187, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,187, 0, 0, 1,185,
+ 0, 0, 0,111, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 45, 0, 0, 0, 20, 0, 0, 1, 49, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 1, 49, 0, 0, 1,187, 0, 0, 1, 45, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,111, 0, 0, 1, 45, 0, 0, 1,187,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,187, 0, 0, 1, 49, 0, 0, 0,113, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,186,
+ 0, 0, 0,113, 0, 0, 1, 48, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 48, 0, 0, 1, 47, 0, 0, 1,186, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0,112, 0, 0, 1,186, 0, 0, 1, 47, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 47, 0, 0, 1, 48,
+ 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,192, 0, 0, 0, 57, 0, 0, 1,188, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 1,188, 0, 0, 0,196, 0, 0, 0,192, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 4, 0, 0, 0,192, 0, 0, 0,196,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,196, 0, 0, 1,188, 0, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,189,
+ 0, 0, 0, 59, 0, 0, 1,188, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,188, 0, 0, 1,190, 0, 0, 1,189, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0,113, 0, 0, 1,189, 0, 0, 1,190, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,190, 0, 0, 1,188,
+ 0, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,193, 0, 0, 0, 19, 0, 0, 1, 48, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 1, 48, 0, 0, 1,190, 0, 0, 0,193, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 57, 0, 0, 0,193, 0, 0, 1,190,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,190, 0, 0, 1, 48, 0, 0, 0,113, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,189,
+ 0, 0, 0,113, 0, 0, 1, 49, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 49, 0, 0, 0,197, 0, 0, 1,189, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 59, 0, 0, 1,189, 0, 0, 0,197, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,197, 0, 0, 1, 49,
+ 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,191, 0, 0, 0, 56, 0, 0, 1,191, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 1,191, 0, 0, 1, 47, 0, 0, 0,191, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 19, 0, 0, 0,191, 0, 0, 1, 47,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 47, 0, 0, 1,191, 0, 0, 0,112, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,192,
+ 0, 0, 0,112, 0, 0, 1,191, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,191, 0, 0, 1,193, 0, 0, 1,192, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 52, 0, 0, 1,192, 0, 0, 1,193, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,193, 0, 0, 1,191,
+ 0, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,190, 0, 0, 0, 0, 0, 0, 0,182, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 0,182, 0, 0, 1,193, 0, 0, 0,190, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 56, 0, 0, 0,190, 0, 0, 1,193,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,193, 0, 0, 0,182, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,192,
+ 0, 0, 0, 52, 0, 0, 0,183, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,183, 0, 0, 1, 46, 0, 0, 1,192, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0,112, 0, 0, 1,192, 0, 0, 1, 46, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 46, 0, 0, 0,183,
+ 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 51, 0, 0, 0,114, 0, 0, 1,194, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 1,194, 0, 0, 0,199, 0, 0, 1, 51, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 21, 0, 0, 1, 51, 0, 0, 0,199,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,199, 0, 0, 1,194, 0, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,195,
+ 0, 0, 0, 60, 0, 0, 1,194, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,194, 0, 0, 1,196, 0, 0, 1,195, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 57, 0, 0, 1,195, 0, 0, 1,196, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,196, 0, 0, 1,194,
+ 0, 0, 0,114, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 50, 0, 0, 0, 19, 0, 0, 0,193, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 0,193, 0, 0, 1,196, 0, 0, 1, 50, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,114, 0, 0, 1, 50, 0, 0, 1,196,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,196, 0, 0, 0,193, 0, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,195,
+ 0, 0, 0, 57, 0, 0, 0,192, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,192, 0, 0, 0,198, 0, 0, 1,195, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 60, 0, 0, 1,195, 0, 0, 0,198, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,198, 0, 0, 0,192,
+ 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 50, 0, 0, 0,114, 0, 0, 1,197, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 1,197, 0, 0, 1, 53, 0, 0, 1, 50, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 19, 0, 0, 1, 50, 0, 0, 1, 53,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 53, 0, 0, 1,197, 0, 0, 0,115, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,198,
+ 0, 0, 0,115, 0, 0, 1,197, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,197, 0, 0, 1,199, 0, 0, 1,198, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0,116, 0, 0, 1,198, 0, 0, 1,199, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,199, 0, 0, 1,197,
+ 0, 0, 0,114, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 51, 0, 0, 0, 21, 0, 0, 1, 55, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 1, 55, 0, 0, 1,199, 0, 0, 1, 51, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,114, 0, 0, 1, 51, 0, 0, 1,199,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,199, 0, 0, 1, 55, 0, 0, 0,116, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,198,
+ 0, 0, 0,116, 0, 0, 1, 54, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 54, 0, 0, 1, 52, 0, 0, 1,198, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0,115, 0, 0, 1,198, 0, 0, 1, 52, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 52, 0, 0, 1, 54,
+ 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,176, 0, 0, 0, 49, 0, 0, 1,200, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 1,200, 0, 0, 0,200, 0, 0, 0,176, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 5, 0, 0, 0,176, 0, 0, 0,200,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,200, 0, 0, 1,200, 0, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,201,
+ 0, 0, 0, 61, 0, 0, 1,200, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,200, 0, 0, 1,202, 0, 0, 1,201, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0,116, 0, 0, 1,201, 0, 0, 1,202, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,202, 0, 0, 1,200,
+ 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,177, 0, 0, 0, 15, 0, 0, 1, 54, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 1, 54, 0, 0, 1,202, 0, 0, 0,177, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 49, 0, 0, 0,177, 0, 0, 1,202,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,202, 0, 0, 1, 54, 0, 0, 0,116, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,201,
+ 0, 0, 0,116, 0, 0, 1, 55, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 55, 0, 0, 0,201, 0, 0, 1,201, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 61, 0, 0, 1,201, 0, 0, 0,201, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,201, 0, 0, 1, 55,
+ 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,175, 0, 0, 0, 48, 0, 0, 1,203, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 1,203, 0, 0, 1, 52, 0, 0, 0,175, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 15, 0, 0, 0,175, 0, 0, 1, 52,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 52, 0, 0, 1,203, 0, 0, 0,115, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,204,
+ 0, 0, 0,115, 0, 0, 1,203, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,203, 0, 0, 1,205, 0, 0, 1,204, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 56, 0, 0, 1,204, 0, 0, 1,205, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,205, 0, 0, 1,203,
+ 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,174, 0, 0, 0, 0, 0, 0, 0,190, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 0,190, 0, 0, 1,205, 0, 0, 0,174, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 48, 0, 0, 0,174, 0, 0, 1,205,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,205, 0, 0, 0,190, 0, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,204,
+ 0, 0, 0, 56, 0, 0, 0,191, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,191, 0, 0, 1, 53, 0, 0, 1,204, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0,115, 0, 0, 1,204, 0, 0, 1, 53, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 53, 0, 0, 0,191,
+ 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,206, 0, 0, 0,117, 0, 0, 1, 57, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 1, 57, 0, 0, 0,207, 0, 0, 1,206, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 64, 0, 0, 1,206, 0, 0, 0,207,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,207, 0, 0, 1, 57, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,206,
+ 0, 0, 0, 64, 0, 0, 1,207, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,207, 0, 0, 1,208, 0, 0, 1,206, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0,117, 0, 0, 1,206, 0, 0, 1,208, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,208, 0, 0, 1,207,
+ 0, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,179, 0, 0, 0, 16, 0, 0, 1, 56, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 1, 56, 0, 0, 1,208, 0, 0, 0,179, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 50, 0, 0, 0,179, 0, 0, 1,208,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,208, 0, 0, 1, 56, 0, 0, 0,117, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,178,
+ 0, 0, 0, 50, 0, 0, 1,207, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,207, 0, 0, 0,206, 0, 0, 0,178, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0,178, 0, 0, 0,206, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,206, 0, 0, 1,207,
+ 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,209, 0, 0, 0,117, 0, 0, 1, 56, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 1, 56, 0, 0, 1, 58, 0, 0, 1,209, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,118, 0, 0, 1,209, 0, 0, 1, 58,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 58, 0, 0, 1, 56, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,209,
+ 0, 0, 0,118, 0, 0, 1,210, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,210, 0, 0, 1,211, 0, 0, 1,209, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0,117, 0, 0, 1,209, 0, 0, 1,211, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,211, 0, 0, 1,210,
+ 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 61, 0, 0, 0, 23, 0, 0, 1, 57, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 1, 57, 0, 0, 1,211, 0, 0, 1, 61, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,119, 0, 0, 1, 61, 0, 0, 1,211,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,211, 0, 0, 1, 57, 0, 0, 0,117, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 60,
+ 0, 0, 0,119, 0, 0, 1,210, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,210, 0, 0, 1, 59, 0, 0, 1, 60, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 22, 0, 0, 1, 60, 0, 0, 1, 59, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 59, 0, 0, 1,210,
+ 0, 0, 0,118, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,212, 0, 0, 0, 63, 0, 0, 0,204, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 0,204, 0, 0, 0,208, 0, 0, 1,212, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 65, 0, 0, 1,212, 0, 0, 0,208,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,208, 0, 0, 0,204, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,212,
+ 0, 0, 0, 65, 0, 0, 1,213, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,213, 0, 0, 1,214, 0, 0, 1,212, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 63, 0, 0, 1,212, 0, 0, 1,214, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,214, 0, 0, 1,213,
+ 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 60, 0, 0, 0, 22, 0, 0, 0,205, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 0,205, 0, 0, 1,214, 0, 0, 1, 60, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,119, 0, 0, 1, 60, 0, 0, 1,214,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,214, 0, 0, 0,205, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 61,
+ 0, 0, 0,119, 0, 0, 1,213, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,213, 0, 0, 0,209, 0, 0, 1, 61, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 23, 0, 0, 1, 61, 0, 0, 0,209, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,209, 0, 0, 1,213,
+ 0, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,215, 0, 0, 0, 62, 0, 0, 0,203, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 0,203, 0, 0, 1, 59, 0, 0, 1,215, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,118, 0, 0, 1,215, 0, 0, 1, 59,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 59, 0, 0, 0,203, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,215,
+ 0, 0, 0,118, 0, 0, 1,216, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,216, 0, 0, 1,217, 0, 0, 1,215, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 62, 0, 0, 1,215, 0, 0, 1,217, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,217, 0, 0, 1,216,
+ 0, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,180, 0, 0, 0, 5, 0, 0, 0,202, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 0,202, 0, 0, 1,217, 0, 0, 0,180, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 51, 0, 0, 0,180, 0, 0, 1,217,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,217, 0, 0, 0,202, 0, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,181,
+ 0, 0, 0, 51, 0, 0, 1,216, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,216, 0, 0, 1, 58, 0, 0, 0,181, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 16, 0, 0, 0,181, 0, 0, 1, 58, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 58, 0, 0, 1,216,
+ 0, 0, 0,118, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,218, 0, 0, 0,120, 0, 0, 1, 63, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 1, 63, 0, 0, 0,215, 0, 0, 1,218, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 68, 0, 0, 1,218, 0, 0, 0,215,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,215, 0, 0, 1, 63, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,218,
+ 0, 0, 0, 68, 0, 0, 1,219, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,219, 0, 0, 1,220, 0, 0, 1,218, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0,120, 0, 0, 1,218, 0, 0, 1,220, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,220, 0, 0, 1,219,
+ 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,173, 0, 0, 0, 14, 0, 0, 1, 62, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 1, 62, 0, 0, 1,220, 0, 0, 0,173, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 47, 0, 0, 0,173, 0, 0, 1,220,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,220, 0, 0, 1, 62, 0, 0, 0,120, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,172,
+ 0, 0, 0, 47, 0, 0, 1,219, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,219, 0, 0, 0,214, 0, 0, 0,172, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 2, 0, 0, 0,172, 0, 0, 0,214, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,214, 0, 0, 1,219,
+ 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,221, 0, 0, 0,120, 0, 0, 1, 62, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 1, 62, 0, 0, 1, 64, 0, 0, 1,221, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,121, 0, 0, 1,221, 0, 0, 1, 64,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 64, 0, 0, 1, 62, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,221,
+ 0, 0, 0,121, 0, 0, 1,222, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,222, 0, 0, 1,223, 0, 0, 1,221, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0,120, 0, 0, 1,221, 0, 0, 1,223, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,223, 0, 0, 1,222,
+ 0, 0, 0,122, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 67, 0, 0, 0, 25, 0, 0, 1, 63, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 1, 63, 0, 0, 1,223, 0, 0, 1, 67, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,122, 0, 0, 1, 67, 0, 0, 1,223,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,223, 0, 0, 1, 63, 0, 0, 0,120, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 66,
+ 0, 0, 0,122, 0, 0, 1,222, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,222, 0, 0, 1, 65, 0, 0, 1, 66, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 24, 0, 0, 1, 66, 0, 0, 1, 65, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 65, 0, 0, 1,222,
+ 0, 0, 0,121, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,224, 0, 0, 0, 67, 0, 0, 0,212, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 0,212, 0, 0, 0,216, 0, 0, 1,224, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 69, 0, 0, 1,224, 0, 0, 0,216,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,216, 0, 0, 0,212, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,224,
+ 0, 0, 0, 69, 0, 0, 1,225, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,225, 0, 0, 1,226, 0, 0, 1,224, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 67, 0, 0, 1,224, 0, 0, 1,226, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,226, 0, 0, 1,225,
+ 0, 0, 0,122, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 66, 0, 0, 0, 24, 0, 0, 0,213, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 0,213, 0, 0, 1,226, 0, 0, 1, 66, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,122, 0, 0, 1, 66, 0, 0, 1,226,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,226, 0, 0, 0,213, 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 67,
+ 0, 0, 0,122, 0, 0, 1,225, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,225, 0, 0, 0,217, 0, 0, 1, 67, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 25, 0, 0, 1, 67, 0, 0, 0,217, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,217, 0, 0, 1,225,
+ 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,227, 0, 0, 0, 66, 0, 0, 0,211, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 0,211, 0, 0, 1, 65, 0, 0, 1,227, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,121, 0, 0, 1,227, 0, 0, 1, 65,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 65, 0, 0, 0,211, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,227,
+ 0, 0, 0,121, 0, 0, 1,228, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,228, 0, 0, 1,229, 0, 0, 1,227, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 66, 0, 0, 1,227, 0, 0, 1,229, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,229, 0, 0, 1,228,
+ 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,170, 0, 0, 0, 1, 0, 0, 0,210, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 0,210, 0, 0, 1,229, 0, 0, 0,170, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 46, 0, 0, 0,170, 0, 0, 1,229,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,229, 0, 0, 0,210, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,171,
+ 0, 0, 0, 46, 0, 0, 1,228, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,228, 0, 0, 1, 64, 0, 0, 0,171, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 14, 0, 0, 0,171, 0, 0, 1, 64, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 64, 0, 0, 1,228,
+ 0, 0, 0,121, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,230, 0, 0, 0,123, 0, 0, 1, 69, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 1, 69, 0, 0, 0,223, 0, 0, 1,230, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 72, 0, 0, 1,230, 0, 0, 0,223,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,223, 0, 0, 1, 69, 0, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,230,
+ 0, 0, 0, 72, 0, 0, 1,231, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,231, 0, 0, 1,232, 0, 0, 1,230, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0,123, 0, 0, 1,230, 0, 0, 1,232, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,232, 0, 0, 1,231,
+ 0, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,189, 0, 0, 0, 18, 0, 0, 1, 68, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 1, 68, 0, 0, 1,232, 0, 0, 0,189, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 55, 0, 0, 0,189, 0, 0, 1,232,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,232, 0, 0, 1, 68, 0, 0, 0,123, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,188,
+ 0, 0, 0, 55, 0, 0, 1,231, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,231, 0, 0, 0,222, 0, 0, 0,188, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 3, 0, 0, 0,188, 0, 0, 0,222, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,222, 0, 0, 1,231,
+ 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,233, 0, 0, 0,123, 0, 0, 1, 68, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 1, 68, 0, 0, 1, 70, 0, 0, 1,233, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,124, 0, 0, 1,233, 0, 0, 1, 70,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 70, 0, 0, 1, 68, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,233,
+ 0, 0, 0,124, 0, 0, 1,234, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,234, 0, 0, 1,235, 0, 0, 1,233, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0,123, 0, 0, 1,233, 0, 0, 1,235, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,235, 0, 0, 1,234,
+ 0, 0, 0,125, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 73, 0, 0, 0, 27, 0, 0, 1, 69, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 1, 69, 0, 0, 1,235, 0, 0, 1, 73, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,125, 0, 0, 1, 73, 0, 0, 1,235,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,235, 0, 0, 1, 69, 0, 0, 0,123, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 72,
+ 0, 0, 0,125, 0, 0, 1,234, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,234, 0, 0, 1, 71, 0, 0, 1, 72, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 26, 0, 0, 1, 72, 0, 0, 1, 71, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 71, 0, 0, 1,234,
+ 0, 0, 0,124, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,236, 0, 0, 0, 71, 0, 0, 0,220, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 0,220, 0, 0, 0,224, 0, 0, 1,236, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 73, 0, 0, 1,236, 0, 0, 0,224,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,224, 0, 0, 0,220, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,236,
+ 0, 0, 0, 73, 0, 0, 1,237, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,237, 0, 0, 1,238, 0, 0, 1,236, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 71, 0, 0, 1,236, 0, 0, 1,238, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,238, 0, 0, 1,237,
+ 0, 0, 0,125, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 72, 0, 0, 0, 26, 0, 0, 0,221, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 0,221, 0, 0, 1,238, 0, 0, 1, 72, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,125, 0, 0, 1, 72, 0, 0, 1,238,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,238, 0, 0, 0,221, 0, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 73,
+ 0, 0, 0,125, 0, 0, 1,237, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,237, 0, 0, 0,225, 0, 0, 1, 73, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 27, 0, 0, 1, 73, 0, 0, 0,225, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,225, 0, 0, 1,237,
+ 0, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,239, 0, 0, 0, 70, 0, 0, 0,219, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 0,219, 0, 0, 1, 71, 0, 0, 1,239, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,124, 0, 0, 1,239, 0, 0, 1, 71,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 71, 0, 0, 0,219, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,239,
+ 0, 0, 0,124, 0, 0, 1,240, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,240, 0, 0, 1,241, 0, 0, 1,239, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 70, 0, 0, 1,239, 0, 0, 1,241, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,241, 0, 0, 1,240,
+ 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,186, 0, 0, 0, 2, 0, 0, 0,218, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 0,218, 0, 0, 1,241, 0, 0, 0,186, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 54, 0, 0, 0,186, 0, 0, 1,241,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,241, 0, 0, 0,218, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,187,
+ 0, 0, 0, 54, 0, 0, 1,240, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,240, 0, 0, 1, 70, 0, 0, 0,187, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 18, 0, 0, 0,187, 0, 0, 1, 70, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 70, 0, 0, 1,240,
+ 0, 0, 0,124, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,242, 0, 0, 0,126, 0, 0, 1, 75, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 1, 75, 0, 0, 0,231, 0, 0, 1,242, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 76, 0, 0, 1,242, 0, 0, 0,231,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,231, 0, 0, 1, 75, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,242,
+ 0, 0, 0, 76, 0, 0, 1,243, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,243, 0, 0, 1,244, 0, 0, 1,242, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0,126, 0, 0, 1,242, 0, 0, 1,244, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,244, 0, 0, 1,243,
+ 0, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,197, 0, 0, 0, 20, 0, 0, 1, 74, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 1, 74, 0, 0, 1,244, 0, 0, 0,197, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 59, 0, 0, 0,197, 0, 0, 1,244,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,244, 0, 0, 1, 74, 0, 0, 0,126, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,196,
+ 0, 0, 0, 59, 0, 0, 1,243, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,243, 0, 0, 0,230, 0, 0, 0,196, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 4, 0, 0, 0,196, 0, 0, 0,230, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,230, 0, 0, 1,243,
+ 0, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,245, 0, 0, 0,126, 0, 0, 1, 74, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 1, 74, 0, 0, 1, 76, 0, 0, 1,245, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,127, 0, 0, 1,245, 0, 0, 1, 76,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 76, 0, 0, 1, 74, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,245,
+ 0, 0, 0,127, 0, 0, 1,246, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,246, 0, 0, 1,247, 0, 0, 1,245, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0,126, 0, 0, 1,245, 0, 0, 1,247, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,247, 0, 0, 1,246,
+ 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 79, 0, 0, 0, 29, 0, 0, 1, 75, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 1, 75, 0, 0, 1,247, 0, 0, 1, 79, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,128, 0, 0, 1, 79, 0, 0, 1,247,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,247, 0, 0, 1, 75, 0, 0, 0,126, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 78,
+ 0, 0, 0,128, 0, 0, 1,246, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,246, 0, 0, 1, 77, 0, 0, 1, 78, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 28, 0, 0, 1, 78, 0, 0, 1, 77, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 77, 0, 0, 1,246,
+ 0, 0, 0,127, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,248, 0, 0, 0, 75, 0, 0, 0,228, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 0,228, 0, 0, 0,232, 0, 0, 1,248, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 77, 0, 0, 1,248, 0, 0, 0,232,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,232, 0, 0, 0,228, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,248,
+ 0, 0, 0, 77, 0, 0, 1,249, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,249, 0, 0, 1,250, 0, 0, 1,248, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 75, 0, 0, 1,248, 0, 0, 1,250, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,250, 0, 0, 1,249,
+ 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 78, 0, 0, 0, 28, 0, 0, 0,229, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 0,229, 0, 0, 1,250, 0, 0, 1, 78, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,128, 0, 0, 1, 78, 0, 0, 1,250,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,250, 0, 0, 0,229, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 79,
+ 0, 0, 0,128, 0, 0, 1,249, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,249, 0, 0, 0,233, 0, 0, 1, 79, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 29, 0, 0, 1, 79, 0, 0, 0,233, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,233, 0, 0, 1,249,
+ 0, 0, 0, 77, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,251, 0, 0, 0, 74, 0, 0, 0,227, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 0,227, 0, 0, 1, 77, 0, 0, 1,251, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,127, 0, 0, 1,251, 0, 0, 1, 77,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 77, 0, 0, 0,227, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,251,
+ 0, 0, 0,127, 0, 0, 1,252, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,252, 0, 0, 1,253, 0, 0, 1,251, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 74, 0, 0, 1,251, 0, 0, 1,253, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,253, 0, 0, 1,252,
+ 0, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,194, 0, 0, 0, 3, 0, 0, 0,226, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 0,226, 0, 0, 1,253, 0, 0, 0,194, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 58, 0, 0, 0,194, 0, 0, 1,253,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,253, 0, 0, 0,226, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,195,
+ 0, 0, 0, 58, 0, 0, 1,252, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,252, 0, 0, 1, 76, 0, 0, 0,195, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 20, 0, 0, 0,195, 0, 0, 1, 76, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 76, 0, 0, 1,252,
+ 0, 0, 0,127, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,254, 0, 0, 0,129, 0, 0, 1, 81, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 1, 81, 0, 0, 0,239, 0, 0, 1,254, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 80, 0, 0, 1,254, 0, 0, 0,239,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,239, 0, 0, 1, 81, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,254,
+ 0, 0, 0, 80, 0, 0, 1,255, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,255, 0, 0, 2, 0, 0, 0, 1,254, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0,129, 0, 0, 1,254, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 0, 0, 0, 1,255,
+ 0, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,201, 0, 0, 0, 21, 0, 0, 1, 80, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 1, 80, 0, 0, 2, 0, 0, 0, 0,201, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 61, 0, 0, 0,201, 0, 0, 2, 0,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 0, 0, 0, 1, 80, 0, 0, 0,129, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,200,
+ 0, 0, 0, 61, 0, 0, 1,255, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,255, 0, 0, 0,238, 0, 0, 0,200, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 5, 0, 0, 0,200, 0, 0, 0,238, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,238, 0, 0, 1,255,
+ 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 1, 0, 0, 0,129, 0, 0, 1, 80, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 1, 80, 0, 0, 1, 82, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,130, 0, 0, 2, 1, 0, 0, 1, 82,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 82, 0, 0, 1, 80, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 1,
+ 0, 0, 0,130, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 2, 0, 0, 2, 3, 0, 0, 2, 1, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0,129, 0, 0, 2, 1, 0, 0, 2, 3, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 3, 0, 0, 2, 2,
+ 0, 0, 0,131, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 85, 0, 0, 0, 31, 0, 0, 1, 81, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 1, 81, 0, 0, 2, 3, 0, 0, 1, 85, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,131, 0, 0, 1, 85, 0, 0, 2, 3,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 3, 0, 0, 1, 81, 0, 0, 0,129, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 84,
+ 0, 0, 0,131, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 2, 0, 0, 1, 83, 0, 0, 1, 84, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 30, 0, 0, 1, 84, 0, 0, 1, 83, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 83, 0, 0, 2, 2,
+ 0, 0, 0,130, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 4, 0, 0, 0, 79, 0, 0, 0,236, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 0,236, 0, 0, 0,240, 0, 0, 2, 4, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 81, 0, 0, 2, 4, 0, 0, 0,240,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,240, 0, 0, 0,236, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 4,
+ 0, 0, 0, 81, 0, 0, 2, 5, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 5, 0, 0, 2, 6, 0, 0, 2, 4, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 79, 0, 0, 2, 4, 0, 0, 2, 6, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 6, 0, 0, 2, 5,
+ 0, 0, 0,131, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 84, 0, 0, 0, 30, 0, 0, 0,237, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 0,237, 0, 0, 2, 6, 0, 0, 1, 84, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,131, 0, 0, 1, 84, 0, 0, 2, 6,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 6, 0, 0, 0,237, 0, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 85,
+ 0, 0, 0,131, 0, 0, 2, 5, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 5, 0, 0, 0,241, 0, 0, 1, 85, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 31, 0, 0, 1, 85, 0, 0, 0,241, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,241, 0, 0, 2, 5,
+ 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 7, 0, 0, 0, 78, 0, 0, 0,235, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 0,235, 0, 0, 1, 83, 0, 0, 2, 7, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,130, 0, 0, 2, 7, 0, 0, 1, 83,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 83, 0, 0, 0,235, 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 7,
+ 0, 0, 0,130, 0, 0, 2, 8, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 8, 0, 0, 2, 9, 0, 0, 2, 7, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 78, 0, 0, 2, 7, 0, 0, 2, 9, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 9, 0, 0, 2, 8,
+ 0, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,198, 0, 0, 0, 4, 0, 0, 0,234, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 0,234, 0, 0, 2, 9, 0, 0, 0,198, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 60, 0, 0, 0,198, 0, 0, 2, 9,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 9, 0, 0, 0,234, 0, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,199,
+ 0, 0, 0, 60, 0, 0, 2, 8, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 8, 0, 0, 1, 82, 0, 0, 0,199, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 21, 0, 0, 0,199, 0, 0, 1, 82, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 82, 0, 0, 2, 8,
+ 0, 0, 0,130, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 87, 0, 0, 0,132, 0, 0, 2, 10, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 2, 10, 0, 0, 0,245, 0, 0, 1, 87, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 32, 0, 0, 1, 87, 0, 0, 0,245,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,245, 0, 0, 2, 10, 0, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 11,
+ 0, 0, 0, 83, 0, 0, 2, 10, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 10, 0, 0, 2, 12, 0, 0, 2, 11, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 65, 0, 0, 2, 11, 0, 0, 2, 12, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 12, 0, 0, 2, 10,
+ 0, 0, 0,132, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 86, 0, 0, 0, 23, 0, 0, 0,209, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 0,209, 0, 0, 2, 12, 0, 0, 1, 86, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,132, 0, 0, 1, 86, 0, 0, 2, 12,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 12, 0, 0, 0,209, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 11,
+ 0, 0, 0, 65, 0, 0, 0,208, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,208, 0, 0, 0,244, 0, 0, 2, 11, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 83, 0, 0, 2, 11, 0, 0, 0,244, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,244, 0, 0, 0,208,
+ 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 86, 0, 0, 0,132, 0, 0, 2, 13, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 2, 13, 0, 0, 1, 88, 0, 0, 1, 86, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 23, 0, 0, 1, 86, 0, 0, 1, 88,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 88, 0, 0, 2, 13, 0, 0, 0,133, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 14,
+ 0, 0, 0,133, 0, 0, 2, 13, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 13, 0, 0, 2, 15, 0, 0, 2, 14, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0,134, 0, 0, 2, 14, 0, 0, 2, 15, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 15, 0, 0, 2, 13,
+ 0, 0, 0,132, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 87, 0, 0, 0, 32, 0, 0, 1, 91, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 1, 91, 0, 0, 2, 15, 0, 0, 1, 87, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,132, 0, 0, 1, 87, 0, 0, 2, 15,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 15, 0, 0, 1, 91, 0, 0, 0,134, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 14,
+ 0, 0, 0,134, 0, 0, 1, 90, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 90, 0, 0, 1, 89, 0, 0, 2, 14, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0,133, 0, 0, 2, 14, 0, 0, 1, 89, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 89, 0, 0, 1, 90,
+ 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,212, 0, 0, 0, 67, 0, 0, 2, 16, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 2, 16, 0, 0, 0,242, 0, 0, 0,212, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 6, 0, 0, 0,212, 0, 0, 0,242,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,242, 0, 0, 2, 16, 0, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 17,
+ 0, 0, 0, 82, 0, 0, 2, 16, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 16, 0, 0, 2, 18, 0, 0, 2, 17, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0,134, 0, 0, 2, 17, 0, 0, 2, 18, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 18, 0, 0, 2, 16,
+ 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,213, 0, 0, 0, 24, 0, 0, 1, 90, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 1, 90, 0, 0, 2, 18, 0, 0, 0,213, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 67, 0, 0, 0,213, 0, 0, 2, 18,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 18, 0, 0, 1, 90, 0, 0, 0,134, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 17,
+ 0, 0, 0,134, 0, 0, 1, 91, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 91, 0, 0, 0,243, 0, 0, 2, 17, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 82, 0, 0, 2, 17, 0, 0, 0,243, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,243, 0, 0, 1, 91,
+ 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,211, 0, 0, 0, 66, 0, 0, 2, 19, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 2, 19, 0, 0, 1, 89, 0, 0, 0,211, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 24, 0, 0, 0,211, 0, 0, 1, 89,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 89, 0, 0, 2, 19, 0, 0, 0,133, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 20,
+ 0, 0, 0,133, 0, 0, 2, 19, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 19, 0, 0, 2, 21, 0, 0, 2, 20, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 64, 0, 0, 2, 20, 0, 0, 2, 21, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 21, 0, 0, 2, 19,
+ 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,210, 0, 0, 0, 1, 0, 0, 0,206, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 0,206, 0, 0, 2, 21, 0, 0, 0,210, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 66, 0, 0, 0,210, 0, 0, 2, 21,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 21, 0, 0, 0,206, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 20,
+ 0, 0, 0, 64, 0, 0, 0,207, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,207, 0, 0, 1, 88, 0, 0, 2, 20, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0,133, 0, 0, 2, 20, 0, 0, 1, 88, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 88, 0, 0, 0,207,
+ 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 93, 0, 0, 0,135, 0, 0, 2, 22, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 2, 22, 0, 0, 0,247, 0, 0, 1, 93, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 33, 0, 0, 1, 93, 0, 0, 0,247,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,247, 0, 0, 2, 22, 0, 0, 0, 84, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 23,
+ 0, 0, 0, 84, 0, 0, 2, 22, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 22, 0, 0, 2, 24, 0, 0, 2, 23, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 69, 0, 0, 2, 23, 0, 0, 2, 24, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 24, 0, 0, 2, 22,
+ 0, 0, 0,135, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 92, 0, 0, 0, 25, 0, 0, 0,217, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 0,217, 0, 0, 2, 24, 0, 0, 1, 92, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,135, 0, 0, 1, 92, 0, 0, 2, 24,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 24, 0, 0, 0,217, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 23,
+ 0, 0, 0, 69, 0, 0, 0,216, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,216, 0, 0, 0,246, 0, 0, 2, 23, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 84, 0, 0, 2, 23, 0, 0, 0,246, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,246, 0, 0, 0,216,
+ 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 92, 0, 0, 0,135, 0, 0, 2, 25, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 2, 25, 0, 0, 1, 94, 0, 0, 1, 92, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 25, 0, 0, 1, 92, 0, 0, 1, 94,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 94, 0, 0, 2, 25, 0, 0, 0,136, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 26,
+ 0, 0, 0,136, 0, 0, 2, 25, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 25, 0, 0, 2, 27, 0, 0, 2, 26, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0,137, 0, 0, 2, 26, 0, 0, 2, 27, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 27, 0, 0, 2, 25,
+ 0, 0, 0,135, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 93, 0, 0, 0, 33, 0, 0, 1, 97, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 1, 97, 0, 0, 2, 27, 0, 0, 1, 93, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,135, 0, 0, 1, 93, 0, 0, 2, 27,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 27, 0, 0, 1, 97, 0, 0, 0,137, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 26,
+ 0, 0, 0,137, 0, 0, 1, 96, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 96, 0, 0, 1, 95, 0, 0, 2, 26, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0,136, 0, 0, 2, 26, 0, 0, 1, 95, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 95, 0, 0, 1, 96,
+ 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,220, 0, 0, 0, 71, 0, 0, 2, 28, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 2, 28, 0, 0, 0,248, 0, 0, 0,220, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0,220, 0, 0, 0,248,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,248, 0, 0, 2, 28, 0, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 29,
+ 0, 0, 0, 85, 0, 0, 2, 28, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 28, 0, 0, 2, 30, 0, 0, 2, 29, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0,137, 0, 0, 2, 29, 0, 0, 2, 30, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 30, 0, 0, 2, 28,
+ 0, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,221, 0, 0, 0, 26, 0, 0, 1, 96, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 1, 96, 0, 0, 2, 30, 0, 0, 0,221, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 71, 0, 0, 0,221, 0, 0, 2, 30,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 30, 0, 0, 1, 96, 0, 0, 0,137, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 29,
+ 0, 0, 0,137, 0, 0, 1, 97, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 97, 0, 0, 0,249, 0, 0, 2, 29, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 85, 0, 0, 2, 29, 0, 0, 0,249, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,249, 0, 0, 1, 97,
+ 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,219, 0, 0, 0, 70, 0, 0, 2, 31, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 2, 31, 0, 0, 1, 95, 0, 0, 0,219, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 26, 0, 0, 0,219, 0, 0, 1, 95,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 95, 0, 0, 2, 31, 0, 0, 0,136, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 32,
+ 0, 0, 0,136, 0, 0, 2, 31, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 31, 0, 0, 2, 33, 0, 0, 2, 32, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 68, 0, 0, 2, 32, 0, 0, 2, 33, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 33, 0, 0, 2, 31,
+ 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,218, 0, 0, 0, 2, 0, 0, 0,214, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 0,214, 0, 0, 2, 33, 0, 0, 0,218, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 70, 0, 0, 0,218, 0, 0, 2, 33,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 33, 0, 0, 0,214, 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 32,
+ 0, 0, 0, 68, 0, 0, 0,215, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,215, 0, 0, 1, 94, 0, 0, 2, 32, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0,136, 0, 0, 2, 32, 0, 0, 1, 94, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 94, 0, 0, 0,215,
+ 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 99, 0, 0, 0,138, 0, 0, 2, 34, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 2, 34, 0, 0, 0,251, 0, 0, 1, 99, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 34, 0, 0, 1, 99, 0, 0, 0,251,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,251, 0, 0, 2, 34, 0, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 35,
+ 0, 0, 0, 86, 0, 0, 2, 34, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 34, 0, 0, 2, 36, 0, 0, 2, 35, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 73, 0, 0, 2, 35, 0, 0, 2, 36, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 36, 0, 0, 2, 34,
+ 0, 0, 0,138, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 98, 0, 0, 0, 27, 0, 0, 0,225, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 0,225, 0, 0, 2, 36, 0, 0, 1, 98, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,138, 0, 0, 1, 98, 0, 0, 2, 36,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 36, 0, 0, 0,225, 0, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 35,
+ 0, 0, 0, 73, 0, 0, 0,224, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,224, 0, 0, 0,250, 0, 0, 2, 35, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 86, 0, 0, 2, 35, 0, 0, 0,250, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,250, 0, 0, 0,224,
+ 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 98, 0, 0, 0,138, 0, 0, 2, 37, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 2, 37, 0, 0, 1,100, 0, 0, 1, 98, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 27, 0, 0, 1, 98, 0, 0, 1,100,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,100, 0, 0, 2, 37, 0, 0, 0,139, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 38,
+ 0, 0, 0,139, 0, 0, 2, 37, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 37, 0, 0, 2, 39, 0, 0, 2, 38, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0,140, 0, 0, 2, 38, 0, 0, 2, 39, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 39, 0, 0, 2, 37,
+ 0, 0, 0,138, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 99, 0, 0, 0, 34, 0, 0, 1,103, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 1,103, 0, 0, 2, 39, 0, 0, 1, 99, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,138, 0, 0, 1, 99, 0, 0, 2, 39,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 39, 0, 0, 1,103, 0, 0, 0,140, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 38,
+ 0, 0, 0,140, 0, 0, 1,102, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,102, 0, 0, 1,101, 0, 0, 2, 38, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0,139, 0, 0, 2, 38, 0, 0, 1,101, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,101, 0, 0, 1,102,
+ 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,228, 0, 0, 0, 75, 0, 0, 2, 40, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 2, 40, 0, 0, 0,252, 0, 0, 0,228, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 8, 0, 0, 0,228, 0, 0, 0,252,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,252, 0, 0, 2, 40, 0, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 41,
+ 0, 0, 0, 87, 0, 0, 2, 40, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 40, 0, 0, 2, 42, 0, 0, 2, 41, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0,140, 0, 0, 2, 41, 0, 0, 2, 42, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 42, 0, 0, 2, 40,
+ 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,229, 0, 0, 0, 28, 0, 0, 1,102, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 1,102, 0, 0, 2, 42, 0, 0, 0,229, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 75, 0, 0, 0,229, 0, 0, 2, 42,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 42, 0, 0, 1,102, 0, 0, 0,140, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 41,
+ 0, 0, 0,140, 0, 0, 1,103, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,103, 0, 0, 0,253, 0, 0, 2, 41, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 87, 0, 0, 2, 41, 0, 0, 0,253, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,253, 0, 0, 1,103,
+ 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,227, 0, 0, 0, 74, 0, 0, 2, 43, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 2, 43, 0, 0, 1,101, 0, 0, 0,227, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 28, 0, 0, 0,227, 0, 0, 1,101,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,101, 0, 0, 2, 43, 0, 0, 0,139, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 44,
+ 0, 0, 0,139, 0, 0, 2, 43, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 43, 0, 0, 2, 45, 0, 0, 2, 44, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 72, 0, 0, 2, 44, 0, 0, 2, 45, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 45, 0, 0, 2, 43,
+ 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,226, 0, 0, 0, 3, 0, 0, 0,222, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 0,222, 0, 0, 2, 45, 0, 0, 0,226, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 74, 0, 0, 0,226, 0, 0, 2, 45,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 45, 0, 0, 0,222, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 44,
+ 0, 0, 0, 72, 0, 0, 0,223, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,223, 0, 0, 1,100, 0, 0, 2, 44, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0,139, 0, 0, 2, 44, 0, 0, 1,100, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,100, 0, 0, 0,223,
+ 0, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,105, 0, 0, 0,141, 0, 0, 2, 46, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 2, 46, 0, 0, 0,255, 0, 0, 1,105, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 35, 0, 0, 1,105, 0, 0, 0,255,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,255, 0, 0, 2, 46, 0, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 47,
+ 0, 0, 0, 88, 0, 0, 2, 46, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 46, 0, 0, 2, 48, 0, 0, 2, 47, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 77, 0, 0, 2, 47, 0, 0, 2, 48, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 48, 0, 0, 2, 46,
+ 0, 0, 0,141, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,104, 0, 0, 0, 29, 0, 0, 0,233, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 0,233, 0, 0, 2, 48, 0, 0, 1,104, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,141, 0, 0, 1,104, 0, 0, 2, 48,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 48, 0, 0, 0,233, 0, 0, 0, 77, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 47,
+ 0, 0, 0, 77, 0, 0, 0,232, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,232, 0, 0, 0,254, 0, 0, 2, 47, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 88, 0, 0, 2, 47, 0, 0, 0,254, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,254, 0, 0, 0,232,
+ 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,104, 0, 0, 0,141, 0, 0, 2, 49, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 2, 49, 0, 0, 1,106, 0, 0, 1,104, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 29, 0, 0, 1,104, 0, 0, 1,106,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,106, 0, 0, 2, 49, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 50,
+ 0, 0, 0,142, 0, 0, 2, 49, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 49, 0, 0, 2, 51, 0, 0, 2, 50, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0,143, 0, 0, 2, 50, 0, 0, 2, 51, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 51, 0, 0, 2, 49,
+ 0, 0, 0,141, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,105, 0, 0, 0, 35, 0, 0, 1,109, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 1,109, 0, 0, 2, 51, 0, 0, 1,105, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,141, 0, 0, 1,105, 0, 0, 2, 51,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 51, 0, 0, 1,109, 0, 0, 0,143, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 50,
+ 0, 0, 0,143, 0, 0, 1,108, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,108, 0, 0, 1,107, 0, 0, 2, 50, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0,142, 0, 0, 2, 50, 0, 0, 1,107, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,107, 0, 0, 1,108,
+ 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,236, 0, 0, 0, 79, 0, 0, 2, 52, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 2, 52, 0, 0, 1, 0, 0, 0, 0,236, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 9, 0, 0, 0,236, 0, 0, 1, 0,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 0, 0, 0, 2, 52, 0, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 53,
+ 0, 0, 0, 89, 0, 0, 2, 52, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 52, 0, 0, 2, 54, 0, 0, 2, 53, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0,143, 0, 0, 2, 53, 0, 0, 2, 54, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 54, 0, 0, 2, 52,
+ 0, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,237, 0, 0, 0, 30, 0, 0, 1,108, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 1,108, 0, 0, 2, 54, 0, 0, 0,237, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 79, 0, 0, 0,237, 0, 0, 2, 54,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 54, 0, 0, 1,108, 0, 0, 0,143, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 53,
+ 0, 0, 0,143, 0, 0, 1,109, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,109, 0, 0, 1, 1, 0, 0, 2, 53, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 89, 0, 0, 2, 53, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 1, 0, 0, 1,109,
+ 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,235, 0, 0, 0, 78, 0, 0, 2, 55, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 2, 55, 0, 0, 1,107, 0, 0, 0,235, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 30, 0, 0, 0,235, 0, 0, 1,107,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,107, 0, 0, 2, 55, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 56,
+ 0, 0, 0,142, 0, 0, 2, 55, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 55, 0, 0, 2, 57, 0, 0, 2, 56, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 76, 0, 0, 2, 56, 0, 0, 2, 57, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 57, 0, 0, 2, 55,
+ 0, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,234, 0, 0, 0, 4, 0, 0, 0,230, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 0,230, 0, 0, 2, 57, 0, 0, 0,234, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 78, 0, 0, 0,234, 0, 0, 2, 57,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 57, 0, 0, 0,230, 0, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 56,
+ 0, 0, 0, 76, 0, 0, 0,231, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,231, 0, 0, 1,106, 0, 0, 2, 56, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0,142, 0, 0, 2, 56, 0, 0, 1,106, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,106, 0, 0, 0,231,
+ 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,111, 0, 0, 0,144, 0, 0, 2, 58, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 2, 58, 0, 0, 1, 3, 0, 0, 1,111, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 36, 0, 0, 1,111, 0, 0, 1, 3,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 3, 0, 0, 2, 58, 0, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 59,
+ 0, 0, 0, 90, 0, 0, 2, 58, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 58, 0, 0, 2, 60, 0, 0, 2, 59, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 81, 0, 0, 2, 59, 0, 0, 2, 60, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 60, 0, 0, 2, 58,
+ 0, 0, 0,144, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,110, 0, 0, 0, 31, 0, 0, 0,241, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 0,241, 0, 0, 2, 60, 0, 0, 1,110, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,144, 0, 0, 1,110, 0, 0, 2, 60,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 60, 0, 0, 0,241, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 59,
+ 0, 0, 0, 81, 0, 0, 0,240, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,240, 0, 0, 1, 2, 0, 0, 2, 59, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 90, 0, 0, 2, 59, 0, 0, 1, 2, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 2, 0, 0, 0,240,
+ 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,110, 0, 0, 0,144, 0, 0, 2, 61, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 2, 61, 0, 0, 1,113, 0, 0, 1,110, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 31, 0, 0, 1,110, 0, 0, 1,113,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,113, 0, 0, 2, 61, 0, 0, 0,145, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 62,
+ 0, 0, 0,145, 0, 0, 2, 61, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 61, 0, 0, 2, 63, 0, 0, 2, 62, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0,146, 0, 0, 2, 62, 0, 0, 2, 63, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 63, 0, 0, 2, 61,
+ 0, 0, 0,144, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,111, 0, 0, 0, 36, 0, 0, 1,115, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 1,115, 0, 0, 2, 63, 0, 0, 1,111, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,144, 0, 0, 1,111, 0, 0, 2, 63,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 63, 0, 0, 1,115, 0, 0, 0,146, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 62,
+ 0, 0, 0,146, 0, 0, 1,114, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,114, 0, 0, 1,112, 0, 0, 2, 62, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0,145, 0, 0, 2, 62, 0, 0, 1,112, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,112, 0, 0, 1,114,
+ 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,204, 0, 0, 0, 63, 0, 0, 2, 64, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 2, 64, 0, 0, 1, 4, 0, 0, 0,204, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 10, 0, 0, 0,204, 0, 0, 1, 4,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 4, 0, 0, 2, 64, 0, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 65,
+ 0, 0, 0, 91, 0, 0, 2, 64, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 64, 0, 0, 2, 66, 0, 0, 2, 65, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0,146, 0, 0, 2, 65, 0, 0, 2, 66, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 66, 0, 0, 2, 64,
+ 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,205, 0, 0, 0, 22, 0, 0, 1,114, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 1,114, 0, 0, 2, 66, 0, 0, 0,205, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 63, 0, 0, 0,205, 0, 0, 2, 66,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 66, 0, 0, 1,114, 0, 0, 0,146, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 65,
+ 0, 0, 0,146, 0, 0, 1,115, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,115, 0, 0, 1, 5, 0, 0, 2, 65, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 91, 0, 0, 2, 65, 0, 0, 1, 5, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 5, 0, 0, 1,115,
+ 0, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,203, 0, 0, 0, 62, 0, 0, 2, 67, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 2, 67, 0, 0, 1,112, 0, 0, 0,203, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 22, 0, 0, 0,203, 0, 0, 1,112,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,112, 0, 0, 2, 67, 0, 0, 0,145, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 68,
+ 0, 0, 0,145, 0, 0, 2, 67, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 67, 0, 0, 2, 69, 0, 0, 2, 68, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 80, 0, 0, 2, 68, 0, 0, 2, 69, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 69, 0, 0, 2, 67,
+ 0, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,202, 0, 0, 0, 5, 0, 0, 0,238, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 0,238, 0, 0, 2, 69, 0, 0, 0,202, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 62, 0, 0, 0,202, 0, 0, 2, 69,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 69, 0, 0, 0,238, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 68,
+ 0, 0, 0, 80, 0, 0, 0,239, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,239, 0, 0, 1,113, 0, 0, 2, 68, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0,145, 0, 0, 2, 68, 0, 0, 1,113, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,113, 0, 0, 0,239,
+ 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 70, 0, 0, 0,147, 0, 0, 1,117, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 1,117, 0, 0, 1, 11, 0, 0, 2, 70, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 94, 0, 0, 2, 70, 0, 0, 1, 11,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 11, 0, 0, 1,117, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 70,
+ 0, 0, 0, 94, 0, 0, 2, 71, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 71, 0, 0, 2, 72, 0, 0, 2, 70, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0,147, 0, 0, 2, 70, 0, 0, 2, 72, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 72, 0, 0, 2, 71,
+ 0, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,243, 0, 0, 0, 32, 0, 0, 1,116, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 1,116, 0, 0, 2, 72, 0, 0, 0,243, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 82, 0, 0, 0,243, 0, 0, 2, 72,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 72, 0, 0, 1,116, 0, 0, 0,147, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,242,
+ 0, 0, 0, 82, 0, 0, 2, 71, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 71, 0, 0, 1, 10, 0, 0, 0,242, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 6, 0, 0, 0,242, 0, 0, 1, 10, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 10, 0, 0, 2, 71,
+ 0, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 73, 0, 0, 0,147, 0, 0, 1,116, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 1,116, 0, 0, 1,118, 0, 0, 2, 73, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,148, 0, 0, 2, 73, 0, 0, 1,118,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,118, 0, 0, 1,116, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 73,
+ 0, 0, 0,148, 0, 0, 2, 74, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 74, 0, 0, 2, 75, 0, 0, 2, 73, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0,147, 0, 0, 2, 73, 0, 0, 2, 75, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 75, 0, 0, 2, 74,
+ 0, 0, 0,149, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,121, 0, 0, 0, 38, 0, 0, 1,117, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 1,117, 0, 0, 2, 75, 0, 0, 1,121, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,149, 0, 0, 1,121, 0, 0, 2, 75,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 75, 0, 0, 1,117, 0, 0, 0,147, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,120,
+ 0, 0, 0,149, 0, 0, 2, 74, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 74, 0, 0, 1,119, 0, 0, 1,120, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 37, 0, 0, 1,120, 0, 0, 1,119, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,119, 0, 0, 2, 74,
+ 0, 0, 0,148, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 76, 0, 0, 0, 93, 0, 0, 1, 8, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 1, 8, 0, 0, 1, 12, 0, 0, 2, 76, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 95, 0, 0, 2, 76, 0, 0, 1, 12,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 12, 0, 0, 1, 8, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 76,
+ 0, 0, 0, 95, 0, 0, 2, 77, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 77, 0, 0, 2, 78, 0, 0, 2, 76, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 93, 0, 0, 2, 76, 0, 0, 2, 78, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 78, 0, 0, 2, 77,
+ 0, 0, 0,149, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,120, 0, 0, 0, 37, 0, 0, 1, 9, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 1, 9, 0, 0, 2, 78, 0, 0, 1,120, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,149, 0, 0, 1,120, 0, 0, 2, 78,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 78, 0, 0, 1, 9, 0, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,121,
+ 0, 0, 0,149, 0, 0, 2, 77, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 77, 0, 0, 1, 13, 0, 0, 1,121, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 38, 0, 0, 1,121, 0, 0, 1, 13, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 13, 0, 0, 2, 77,
+ 0, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 79, 0, 0, 0, 92, 0, 0, 1, 7, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 1, 7, 0, 0, 1,119, 0, 0, 2, 79, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,148, 0, 0, 2, 79, 0, 0, 1,119,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,119, 0, 0, 1, 7, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 79,
+ 0, 0, 0,148, 0, 0, 2, 80, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 80, 0, 0, 2, 81, 0, 0, 2, 79, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 92, 0, 0, 2, 79, 0, 0, 2, 81, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 81, 0, 0, 2, 80,
+ 0, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,244, 0, 0, 0, 10, 0, 0, 1, 6, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 1, 6, 0, 0, 2, 81, 0, 0, 0,244, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 83, 0, 0, 0,244, 0, 0, 2, 81,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 81, 0, 0, 1, 6, 0, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,245,
+ 0, 0, 0, 83, 0, 0, 2, 80, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 80, 0, 0, 1,118, 0, 0, 0,245, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 32, 0, 0, 0,245, 0, 0, 1,118, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,118, 0, 0, 2, 80,
+ 0, 0, 0,148, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 82, 0, 0, 0,150, 0, 0, 1,123, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 1,123, 0, 0, 1, 15, 0, 0, 2, 82, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 96, 0, 0, 2, 82, 0, 0, 1, 15,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 15, 0, 0, 1,123, 0, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 82,
+ 0, 0, 0, 96, 0, 0, 2, 83, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 83, 0, 0, 2, 84, 0, 0, 2, 82, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0,150, 0, 0, 2, 82, 0, 0, 2, 84, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 84, 0, 0, 2, 83,
+ 0, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,249, 0, 0, 0, 33, 0, 0, 1,122, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 1,122, 0, 0, 2, 84, 0, 0, 0,249, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 85, 0, 0, 0,249, 0, 0, 2, 84,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 84, 0, 0, 1,122, 0, 0, 0,150, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,248,
+ 0, 0, 0, 85, 0, 0, 2, 83, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 83, 0, 0, 1, 14, 0, 0, 0,248, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0,248, 0, 0, 1, 14, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 14, 0, 0, 2, 83,
+ 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 85, 0, 0, 0,150, 0, 0, 1,122, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 1,122, 0, 0, 1,124, 0, 0, 2, 85, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,151, 0, 0, 2, 85, 0, 0, 1,124,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,124, 0, 0, 1,122, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 85,
+ 0, 0, 0,151, 0, 0, 2, 86, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 86, 0, 0, 2, 87, 0, 0, 2, 85, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0,150, 0, 0, 2, 85, 0, 0, 2, 87, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 87, 0, 0, 2, 86,
+ 0, 0, 0,152, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,127, 0, 0, 0, 39, 0, 0, 1,123, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 1,123, 0, 0, 2, 87, 0, 0, 1,127, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,152, 0, 0, 1,127, 0, 0, 2, 87,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 87, 0, 0, 1,123, 0, 0, 0,150, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,126,
+ 0, 0, 0,152, 0, 0, 2, 86, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 86, 0, 0, 1,125, 0, 0, 1,126, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 38, 0, 0, 1,126, 0, 0, 1,125, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,125, 0, 0, 2, 86,
+ 0, 0, 0,151, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 88, 0, 0, 0, 95, 0, 0, 1, 12, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 1, 12, 0, 0, 1, 16, 0, 0, 2, 88, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 97, 0, 0, 2, 88, 0, 0, 1, 16,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 16, 0, 0, 1, 12, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 88,
+ 0, 0, 0, 97, 0, 0, 2, 89, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 89, 0, 0, 2, 90, 0, 0, 2, 88, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 95, 0, 0, 2, 88, 0, 0, 2, 90, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 90, 0, 0, 2, 89,
+ 0, 0, 0,152, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,126, 0, 0, 0, 38, 0, 0, 1, 13, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 1, 13, 0, 0, 2, 90, 0, 0, 1,126, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,152, 0, 0, 1,126, 0, 0, 2, 90,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 90, 0, 0, 1, 13, 0, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,127,
+ 0, 0, 0,152, 0, 0, 2, 89, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 89, 0, 0, 1, 17, 0, 0, 1,127, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 39, 0, 0, 1,127, 0, 0, 1, 17, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 17, 0, 0, 2, 89,
+ 0, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 91, 0, 0, 0, 94, 0, 0, 1, 11, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 1, 11, 0, 0, 1,125, 0, 0, 2, 91, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,151, 0, 0, 2, 91, 0, 0, 1,125,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,125, 0, 0, 1, 11, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 91,
+ 0, 0, 0,151, 0, 0, 2, 92, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 92, 0, 0, 2, 93, 0, 0, 2, 91, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 94, 0, 0, 2, 91, 0, 0, 2, 93, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 93, 0, 0, 2, 92,
+ 0, 0, 0, 84, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,246, 0, 0, 0, 6, 0, 0, 1, 10, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 1, 10, 0, 0, 2, 93, 0, 0, 0,246, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 84, 0, 0, 0,246, 0, 0, 2, 93,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 93, 0, 0, 1, 10, 0, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,247,
+ 0, 0, 0, 84, 0, 0, 2, 92, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 92, 0, 0, 1,124, 0, 0, 0,247, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 33, 0, 0, 0,247, 0, 0, 1,124, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,124, 0, 0, 2, 92,
+ 0, 0, 0,151, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 94, 0, 0, 0,153, 0, 0, 1,129, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 1,129, 0, 0, 1, 19, 0, 0, 2, 94, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 98, 0, 0, 2, 94, 0, 0, 1, 19,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 19, 0, 0, 1,129, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 94,
+ 0, 0, 0, 98, 0, 0, 2, 95, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 95, 0, 0, 2, 96, 0, 0, 2, 94, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0,153, 0, 0, 2, 94, 0, 0, 2, 96, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 96, 0, 0, 2, 95,
+ 0, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,253, 0, 0, 0, 34, 0, 0, 1,128, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 1,128, 0, 0, 2, 96, 0, 0, 0,253, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 87, 0, 0, 0,253, 0, 0, 2, 96,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 96, 0, 0, 1,128, 0, 0, 0,153, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,252,
+ 0, 0, 0, 87, 0, 0, 2, 95, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 95, 0, 0, 1, 18, 0, 0, 0,252, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 8, 0, 0, 0,252, 0, 0, 1, 18, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 18, 0, 0, 2, 95,
+ 0, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 97, 0, 0, 0,153, 0, 0, 1,128, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 1,128, 0, 0, 1,130, 0, 0, 2, 97, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,154, 0, 0, 2, 97, 0, 0, 1,130,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,130, 0, 0, 1,128, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 97,
+ 0, 0, 0,154, 0, 0, 2, 98, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 98, 0, 0, 2, 99, 0, 0, 2, 97, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0,153, 0, 0, 2, 97, 0, 0, 2, 99, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 99, 0, 0, 2, 98,
+ 0, 0, 0,155, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,133, 0, 0, 0, 40, 0, 0, 1,129, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 1,129, 0, 0, 2, 99, 0, 0, 1,133, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,155, 0, 0, 1,133, 0, 0, 2, 99,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 99, 0, 0, 1,129, 0, 0, 0,153, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,132,
+ 0, 0, 0,155, 0, 0, 2, 98, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 98, 0, 0, 1,131, 0, 0, 1,132, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 39, 0, 0, 1,132, 0, 0, 1,131, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,131, 0, 0, 2, 98,
+ 0, 0, 0,154, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2,100, 0, 0, 0, 97, 0, 0, 1, 16, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 1, 16, 0, 0, 1, 20, 0, 0, 2,100, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 99, 0, 0, 2,100, 0, 0, 1, 20,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 20, 0, 0, 1, 16, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2,100,
+ 0, 0, 0, 99, 0, 0, 2,101, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2,101, 0, 0, 2,102, 0, 0, 2,100, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 97, 0, 0, 2,100, 0, 0, 2,102, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2,102, 0, 0, 2,101,
+ 0, 0, 0,155, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,132, 0, 0, 0, 39, 0, 0, 1, 17, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 1, 17, 0, 0, 2,102, 0, 0, 1,132, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,155, 0, 0, 1,132, 0, 0, 2,102,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2,102, 0, 0, 1, 17, 0, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,133,
+ 0, 0, 0,155, 0, 0, 2,101, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2,101, 0, 0, 1, 21, 0, 0, 1,133, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 40, 0, 0, 1,133, 0, 0, 1, 21, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 21, 0, 0, 2,101,
+ 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2,103, 0, 0, 0, 96, 0, 0, 1, 15, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 1, 15, 0, 0, 1,131, 0, 0, 2,103, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,154, 0, 0, 2,103, 0, 0, 1,131,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,131, 0, 0, 1, 15, 0, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2,103,
+ 0, 0, 0,154, 0, 0, 2,104, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2,104, 0, 0, 2,105, 0, 0, 2,103, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 96, 0, 0, 2,103, 0, 0, 2,105, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2,105, 0, 0, 2,104,
+ 0, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,250, 0, 0, 0, 7, 0, 0, 1, 14, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 1, 14, 0, 0, 2,105, 0, 0, 0,250, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 86, 0, 0, 0,250, 0, 0, 2,105,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2,105, 0, 0, 1, 14, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,251,
+ 0, 0, 0, 86, 0, 0, 2,104, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2,104, 0, 0, 1,130, 0, 0, 0,251, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 34, 0, 0, 0,251, 0, 0, 1,130, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,130, 0, 0, 2,104,
+ 0, 0, 0,154, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2,106, 0, 0, 0,156, 0, 0, 1,135, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 1,135, 0, 0, 1, 23, 0, 0, 2,106, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,100, 0, 0, 2,106, 0, 0, 1, 23,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 23, 0, 0, 1,135, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2,106,
+ 0, 0, 0,100, 0, 0, 2,107, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2,107, 0, 0, 2,108, 0, 0, 2,106, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0,156, 0, 0, 2,106, 0, 0, 2,108, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2,108, 0, 0, 2,107,
+ 0, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 1, 0, 0, 0, 35, 0, 0, 1,134, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 1,134, 0, 0, 2,108, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 89, 0, 0, 1, 1, 0, 0, 2,108,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2,108, 0, 0, 1,134, 0, 0, 0,156, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 0,
+ 0, 0, 0, 89, 0, 0, 2,107, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2,107, 0, 0, 1, 22, 0, 0, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 9, 0, 0, 1, 0, 0, 0, 1, 22, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 22, 0, 0, 2,107,
+ 0, 0, 0,100, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2,109, 0, 0, 0,156, 0, 0, 1,134, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 1,134, 0, 0, 1,136, 0, 0, 2,109, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,157, 0, 0, 2,109, 0, 0, 1,136,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,136, 0, 0, 1,134, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2,109,
+ 0, 0, 0,157, 0, 0, 2,110, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2,110, 0, 0, 2,111, 0, 0, 2,109, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0,156, 0, 0, 2,109, 0, 0, 2,111, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2,111, 0, 0, 2,110,
+ 0, 0, 0,158, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,139, 0, 0, 0, 41, 0, 0, 1,135, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 1,135, 0, 0, 2,111, 0, 0, 1,139, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,158, 0, 0, 1,139, 0, 0, 2,111,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2,111, 0, 0, 1,135, 0, 0, 0,156, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,138,
+ 0, 0, 0,158, 0, 0, 2,110, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2,110, 0, 0, 1,137, 0, 0, 1,138, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 40, 0, 0, 1,138, 0, 0, 1,137, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,137, 0, 0, 2,110,
+ 0, 0, 0,157, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2,112, 0, 0, 0, 99, 0, 0, 1, 20, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 1, 20, 0, 0, 1, 24, 0, 0, 2,112, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,101, 0, 0, 2,112, 0, 0, 1, 24,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 24, 0, 0, 1, 20, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2,112,
+ 0, 0, 0,101, 0, 0, 2,113, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2,113, 0, 0, 2,114, 0, 0, 2,112, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 99, 0, 0, 2,112, 0, 0, 2,114, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2,114, 0, 0, 2,113,
+ 0, 0, 0,158, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,138, 0, 0, 0, 40, 0, 0, 1, 21, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 1, 21, 0, 0, 2,114, 0, 0, 1,138, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,158, 0, 0, 1,138, 0, 0, 2,114,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2,114, 0, 0, 1, 21, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,139,
+ 0, 0, 0,158, 0, 0, 2,113, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2,113, 0, 0, 1, 25, 0, 0, 1,139, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 41, 0, 0, 1,139, 0, 0, 1, 25, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 25, 0, 0, 2,113,
+ 0, 0, 0,101, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2,115, 0, 0, 0, 98, 0, 0, 1, 19, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 1, 19, 0, 0, 1,137, 0, 0, 2,115, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,157, 0, 0, 2,115, 0, 0, 1,137,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,137, 0, 0, 1, 19, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2,115,
+ 0, 0, 0,157, 0, 0, 2,116, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2,116, 0, 0, 2,117, 0, 0, 2,115, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 98, 0, 0, 2,115, 0, 0, 2,117, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2,117, 0, 0, 2,116,
+ 0, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,254, 0, 0, 0, 8, 0, 0, 1, 18, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 1, 18, 0, 0, 2,117, 0, 0, 0,254, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 88, 0, 0, 0,254, 0, 0, 2,117,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2,117, 0, 0, 1, 18, 0, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,255,
+ 0, 0, 0, 88, 0, 0, 2,116, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2,116, 0, 0, 1,136, 0, 0, 0,255, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 35, 0, 0, 0,255, 0, 0, 1,136, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,136, 0, 0, 2,116,
+ 0, 0, 0,157, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2,118, 0, 0, 0,159, 0, 0, 1,141, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 1,141, 0, 0, 1, 7, 0, 0, 2,118, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 92, 0, 0, 2,118, 0, 0, 1, 7,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 7, 0, 0, 1,141, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2,118,
+ 0, 0, 0, 92, 0, 0, 2,119, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2,119, 0, 0, 2,120, 0, 0, 2,118, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0,159, 0, 0, 2,118, 0, 0, 2,120, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2,120, 0, 0, 2,119,
+ 0, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 5, 0, 0, 0, 36, 0, 0, 1,140, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 1,140, 0, 0, 2,120, 0, 0, 1, 5, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 91, 0, 0, 1, 5, 0, 0, 2,120,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2,120, 0, 0, 1,140, 0, 0, 0,159, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 4,
+ 0, 0, 0, 91, 0, 0, 2,119, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2,119, 0, 0, 1, 6, 0, 0, 1, 4, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 10, 0, 0, 1, 4, 0, 0, 1, 6, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 6, 0, 0, 2,119,
+ 0, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2,121, 0, 0, 0,159, 0, 0, 1,140, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 1,140, 0, 0, 1,142, 0, 0, 2,121, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,160, 0, 0, 2,121, 0, 0, 1,142,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,142, 0, 0, 1,140, 0, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2,121,
+ 0, 0, 0,160, 0, 0, 2,122, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2,122, 0, 0, 2,123, 0, 0, 2,121, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0,159, 0, 0, 2,121, 0, 0, 2,123, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2,123, 0, 0, 2,122,
+ 0, 0, 0,161, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,144, 0, 0, 0, 37, 0, 0, 1,141, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 1,141, 0, 0, 2,123, 0, 0, 1,144, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,161, 0, 0, 1,144, 0, 0, 2,123,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2,123, 0, 0, 1,141, 0, 0, 0,159, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,145,
+ 0, 0, 0,161, 0, 0, 2,122, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2,122, 0, 0, 1,143, 0, 0, 1,145, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 41, 0, 0, 1,145, 0, 0, 1,143, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,143, 0, 0, 2,122,
+ 0, 0, 0,160, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2,124, 0, 0, 0,101, 0, 0, 1, 24, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 1, 24, 0, 0, 1, 8, 0, 0, 2,124, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 93, 0, 0, 2,124, 0, 0, 1, 8,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 8, 0, 0, 1, 24, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2,124,
+ 0, 0, 0, 93, 0, 0, 2,125, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2,125, 0, 0, 2,126, 0, 0, 2,124, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0,101, 0, 0, 2,124, 0, 0, 2,126, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2,126, 0, 0, 2,125,
+ 0, 0, 0,161, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,145, 0, 0, 0, 41, 0, 0, 1, 25, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 1, 25, 0, 0, 2,126, 0, 0, 1,145, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,161, 0, 0, 1,145, 0, 0, 2,126,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2,126, 0, 0, 1, 25, 0, 0, 0,101, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,144,
+ 0, 0, 0,161, 0, 0, 2,125, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2,125, 0, 0, 1, 9, 0, 0, 1,144, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 37, 0, 0, 1,144, 0, 0, 1, 9, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 9, 0, 0, 2,125,
+ 0, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2,127, 0, 0, 0,100, 0, 0, 1, 23, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 1, 23, 0, 0, 1,143, 0, 0, 2,127, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,160, 0, 0, 2,127, 0, 0, 1,143,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,143, 0, 0, 1, 23, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2,127,
+ 0, 0, 0,160, 0, 0, 2,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2,128, 0, 0, 2,129, 0, 0, 2,127, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0,100, 0, 0, 2,127, 0, 0, 2,129, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2,129, 0, 0, 2,128,
+ 0, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 2, 0, 0, 0, 9, 0, 0, 1, 22, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 1, 22, 0, 0, 2,129, 0, 0, 1, 2, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 90, 0, 0, 1, 2, 0, 0, 2,129,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2,129, 0, 0, 1, 22, 0, 0, 0,100, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 3,
+ 0, 0, 0, 90, 0, 0, 2,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2,128, 0, 0, 1,142, 0, 0, 1, 3, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 36, 0, 0, 1, 3, 0, 0, 1,142, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,142, 0, 0, 2,128,
+ 0, 0, 0,160, 0, 0, 0, 0, 0, 0, 0, 3, 68, 65, 84, 65, 0, 0,220, 0, 12,119, 64, 32, 0, 0, 0, 65, 0, 0, 5, 0,
+ 63,110,222,166, 63, 55,205, 9, 63,105,132,212, 63, 65,236,201, 63,103,153,218, 63, 54,155,119, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,103,153,218, 63, 54,155,119, 63,108,148,118, 63, 44,160,211, 63,110,222,166,
+ 63, 55,205, 9, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,115, 51, 36, 63, 45, 28, 36,
+ 63,110,222,166, 63, 55,205, 9, 63,108,148,118, 63, 44,160,211, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 63,108,148,118, 63, 44,160,211, 63,103,153,218, 63, 54,155,119, 63,102, 17, 87, 63, 43, 52,229, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 96, 81, 56, 63, 52, 55,170, 63,102, 17, 87, 63, 43, 52,229,
+ 63,103,153,218, 63, 54,155,119, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,103,153,218,
+ 63, 54,155,119, 63, 97, 75, 9, 63, 63,233, 92, 63, 96, 81, 56, 63, 52, 55,170, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 63, 89,153,138, 63, 60, 86, 49, 63, 96, 81, 56, 63, 52, 55,170, 63, 97, 75, 9, 63, 63,233, 92,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 97, 75, 9, 63, 63,233, 92, 63,103,153,218,
+ 63, 54,155,119, 63,105,132,212, 63, 65,236,201, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 63, 98,167,103, 63, 75, 39,168, 63, 89,153,138, 63, 82,228, 39, 63, 89,153,139, 63, 71,153,255, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 89,153,139, 63, 71,153,255, 63, 97, 75, 9, 63, 63,233, 92, 63, 98,167,103,
+ 63, 75, 39,168, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,105,132,212, 63, 65,236,201,
+ 63, 98,167,103, 63, 75, 39,168, 63, 97, 75, 9, 63, 63,233, 92, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 63, 97, 75, 9, 63, 63,233, 92, 63, 89,153,139, 63, 71,153,255, 63, 89,153,138, 63, 60, 86, 49, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 96, 81, 56, 63, 52, 55,170, 63, 89,153,138, 63, 60, 86, 49,
+ 63, 89,153,139, 63, 49, 12, 79, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 89,153,139,
+ 63, 49, 12, 79, 63, 95,182,205, 63, 40,228,222, 63, 96, 81, 56, 63, 52, 55,170, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 63,102, 17, 87, 63, 43, 52,229, 63, 96, 81, 56, 63, 52, 55,170, 63, 95,182,205, 63, 40,228,222,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 95,182,205, 63, 40,228,222, 63, 89,153,139,
+ 63, 49, 12, 79, 63, 89,153,139, 63, 37,200, 45, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 63, 98,167,103, 63, 75, 39,168, 63,105,132,212, 63, 65,236,201, 63,109, 83,168, 63, 78, 83,207, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,109, 83,168, 63, 78, 83,207, 63,101, 85,135, 63, 88, 64,148, 63, 98,167,103,
+ 63, 75, 39,168, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 89,153,138, 63, 82,228, 39,
+ 63, 98,167,103, 63, 75, 39,168, 63,101, 85,135, 63, 88, 64,148, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 63,101, 85,135, 63, 88, 64,148, 63,109, 83,168, 63, 78, 83,207, 63,115, 51, 36, 63, 90, 56, 22, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,121, 18,162, 63, 78, 83,207, 63,115, 51, 36, 63, 90, 56, 22,
+ 63,109, 83,168, 63, 78, 83,207, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,109, 83,168,
+ 63, 78, 83,207, 63,115, 51, 36, 63, 67, 23,115, 63,121, 18,162, 63, 78, 83,207, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 63,124,225,116, 63, 65,236,202, 63,121, 18,162, 63, 78, 83,207, 63,115, 51, 36, 63, 67, 23,115,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,115, 51, 36, 63, 67, 23,115, 63,109, 83,168,
+ 63, 78, 83,207, 63,105,132,212, 63, 65,236,201, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 63,110,222,166, 63, 55,205, 9, 63,115, 51, 36, 63, 45, 28, 36, 63,119,135,163, 63, 55,205, 11, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,119,135,163, 63, 55,205, 11, 63,115, 51, 36, 63, 67, 23,115, 63,110,222,166,
+ 63, 55,205, 9, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,105,132,212, 63, 65,236,201,
+ 63,110,222,166, 63, 55,205, 9, 63,115, 51, 36, 63, 67, 23,115, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 63,115, 51, 36, 63, 67, 23,115, 63,119,135,163, 63, 55,205, 11, 63,124,225,116, 63, 65,236,202, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,121, 18,162, 63, 78, 83,207, 63,124,225,116, 63, 65,236,202,
+ 63,129,223,113, 63, 75, 39,170, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,129,223,113,
+ 63, 75, 39,170, 63,128,136, 98, 63, 88, 64,148, 63,121, 18,162, 63, 78, 83,207, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 63,115, 51, 36, 63, 90, 56, 22, 63,121, 18,162, 63, 78, 83,207, 63,128,136, 98, 63, 88, 64,148,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 59,136, 98, 95, 63, 88, 64,148, 60,111,184,160,
+ 63, 75, 39,170, 61, 76,203,243, 63, 82,228, 41, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 61, 76,203,243, 63, 49, 12, 82, 61, 76,203,246, 63, 60, 86, 53, 60,194,162, 31, 63, 52, 55,172, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 60,194,162, 31, 63, 52, 55,172, 60,213,239,111, 63, 40,228,223, 61, 76,203,243,
+ 63, 49, 12, 82, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61, 76,203,246, 63, 37,200, 48,
+ 61, 76,203,243, 63, 49, 12, 82, 60,213,239,111, 63, 40,228,223, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 60,213,239,111, 63, 40,228,223, 60,194,162, 31, 63, 52, 55,172, 58,169,226,120, 63, 43, 52,230, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,126,204,111, 63, 54,155,121, 63,128, 42,121, 63, 43, 52,230,
+ 63,131, 10,136, 63, 52, 55,172, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,131, 10,136,
+ 63, 52, 55,172, 63,130,141,160, 63, 63,233, 95, 63,126,204,111, 63, 54,155,121, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 63,124,225,116, 63, 65,236,202, 63,126,204,111, 63, 54,155,121, 63,130,141,160, 63, 63,233, 95,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 60,163,104, 11, 63, 63,233, 95, 60,194,162, 31,
+ 63, 52, 55,172, 61, 76,203,246, 63, 60, 86, 53, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 61, 76,203,244, 63, 71,154, 2, 61, 76,203,243, 63, 82,228, 41, 60,111,184,160, 63, 75, 39,170, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 60,111,184,160, 63, 75, 39,170, 60,163,104, 11, 63, 63,233, 95, 61, 76,203,244,
+ 63, 71,154, 2, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61, 76,203,246, 63, 60, 86, 53,
+ 61, 76,203,244, 63, 71,154, 2, 60,163,104, 11, 63, 63,233, 95, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 63,130,141,160, 63, 63,233, 95, 63,129,223,113, 63, 75, 39,170, 63,124,225,116, 63, 65,236,202, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,126,204,111, 63, 54,155,121, 63,124,225,116, 63, 65,236,202,
+ 63,119,135,163, 63, 55,205, 11, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,119,135,163,
+ 63, 55,205, 11, 63,121,209,210, 63, 44,160,212, 63,126,204,111, 63, 54,155,121, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 63,128, 42,121, 63, 43, 52,230, 63,126,204,111, 63, 54,155,121, 63,121,209,210, 63, 44,160,212,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,121,209,210, 63, 44,160,212, 63,119,135,163,
+ 63, 55,205, 11, 63,115, 51, 36, 63, 45, 28, 36, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 63,134,102, 95, 63, 94, 46, 79, 63,134,102, 95, 63,105,114, 22, 63,124,205, 52, 63, 99, 26, 58, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,124,205, 52, 63, 99, 26, 58, 63,128,136, 98, 63, 88, 64,148, 63,134,102, 95,
+ 63, 94, 46, 79, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61, 76,203,243, 63, 82,228, 41,
+ 61, 76,203,234, 63, 94, 46, 79, 59,136, 98, 95, 63, 88, 64,148, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 63,128,136, 98, 63, 88, 64,148, 63,124,205, 52, 63, 99, 26, 58, 63,115, 51, 36, 63, 90, 56, 22, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,105,153, 21, 63, 99, 26, 58, 63,115, 51, 36, 63, 90, 56, 22,
+ 63,124,205, 52, 63, 99, 26, 58, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,124,205, 52,
+ 63, 99, 26, 58, 63,115, 51, 32, 63,109,154,212, 63,105,153, 21, 63, 99, 26, 58, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 63, 89,153,138, 63,105,114, 19, 63,105,153, 21, 63, 99, 26, 58, 63,115, 51, 32, 63,109,154,212,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,115, 51, 32, 63,109,154,212, 63,124,205, 52,
+ 63, 99, 26, 58, 63,134,102, 95, 63,105,114, 22, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 63,134,102, 95, 63,116,187,242, 63, 59,153, 3, 63,128, 0, 0, 63, 89,153,136, 63,116,187,242, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 89,153,136, 63,116,187,242, 63,115, 51, 32, 63,109,154,212, 63,134,102, 95,
+ 63,116,187,242, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,134,102, 95, 63,105,114, 22,
+ 63,134,102, 95, 63,116,187,242, 63,115, 51, 32, 63,109,154,212, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 63,115, 51, 32, 63,109,154,212, 63, 89,153,136, 63,116,187,242, 63, 89,153,138, 63,105,114, 19, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,105,153, 21, 63, 99, 26, 58, 63, 89,153,138, 63,105,114, 19,
+ 63, 89,153,138, 63, 94, 46, 77, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 89,153,138,
+ 63, 94, 46, 77, 63,101, 85,135, 63, 88, 64,148, 63,105,153, 21, 63, 99, 26, 58, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 63,115, 51, 36, 63, 90, 56, 22, 63,105,153, 21, 63, 99, 26, 58, 63,101, 85,135, 63, 88, 64,148,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,101, 85,135, 63, 88, 64,148, 63, 89,153,138,
+ 63, 94, 46, 77, 63, 89,153,138, 63, 82,228, 39, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 63, 75,153, 67, 63, 54,155,113, 63, 73,174, 74, 63, 65,236,193, 63, 68, 84,124, 63, 55,204,255, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 68, 84,124, 63, 55,204,255, 63, 70,158,169, 63, 44,160,200, 63, 75,153, 67,
+ 63, 54,155,113, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 77, 33,196, 63, 43, 52,221,
+ 63, 75,153, 67, 63, 54,155,113, 63, 70,158,169, 63, 44,160,200, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 63, 70,158,169, 63, 44,160,200, 63, 68, 84,124, 63, 55,204,255, 63, 64, 0, 0, 63, 45, 28, 24, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 75,153, 67, 63, 54,155,113, 63, 77, 33,196, 63, 43, 52,221,
+ 63, 82,225,225, 63, 52, 55,165, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 82,225,225,
+ 63, 52, 55,165, 63, 81,232, 16, 63, 63,233, 89, 63, 75,153, 67, 63, 54,155,113, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 63, 73,174, 74, 63, 65,236,193, 63, 75,153, 67, 63, 54,155,113, 63, 81,232, 16, 63, 63,233, 89,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 81,232, 16, 63, 63,233, 89, 63, 82,225,225,
+ 63, 52, 55,165, 63, 89,153,138, 63, 60, 86, 49, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 63, 89,153,139, 63, 71,153,255, 63, 89,153,138, 63, 82,228, 39, 63, 80,139,179, 63, 75, 39,164, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 80,139,179, 63, 75, 39,164, 63, 81,232, 16, 63, 63,233, 89, 63, 89,153,139,
+ 63, 71,153,255, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 89,153,138, 63, 60, 86, 49,
+ 63, 89,153,139, 63, 71,153,255, 63, 81,232, 16, 63, 63,233, 89, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 63, 81,232, 16, 63, 63,233, 89, 63, 80,139,179, 63, 75, 39,164, 63, 73,174, 74, 63, 65,236,193, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 89,153,139, 63, 49, 12, 79, 63, 89,153,138, 63, 60, 86, 49,
+ 63, 82,225,225, 63, 52, 55,165, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 82,225,225,
+ 63, 52, 55,165, 63, 83,124, 75, 63, 40,228,217, 63, 89,153,139, 63, 49, 12, 79, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 63, 89,153,139, 63, 37,200, 45, 63, 89,153,139, 63, 49, 12, 79, 63, 83,124, 75, 63, 40,228,217,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 83,124, 75, 63, 40,228,217, 63, 82,225,225,
+ 63, 52, 55,165, 63, 77, 33,196, 63, 43, 52,221, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 63, 69,223,120, 63, 78, 83,198, 63, 73,174, 74, 63, 65,236,193, 63, 80,139,179, 63, 75, 39,164, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 80,139,179, 63, 75, 39,164, 63, 77,221,148, 63, 88, 64,140, 63, 69,223,120,
+ 63, 78, 83,198, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 64, 0, 0, 63, 90, 56, 12,
+ 63, 69,223,120, 63, 78, 83,198, 63, 77,221,148, 63, 88, 64,140, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 63, 77,221,148, 63, 88, 64,140, 63, 80,139,179, 63, 75, 39,164, 63, 89,153,138, 63, 82,228, 39, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 69,223,120, 63, 78, 83,198, 63, 64, 0, 0, 63, 90, 56, 12,
+ 63, 58, 32,136, 63, 78, 83,198, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 58, 32,136,
+ 63, 78, 83,198, 63, 64, 0, 0, 63, 67, 23,106, 63, 69,223,120, 63, 78, 83,198, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 63, 73,174, 74, 63, 65,236,193, 63, 69,223,120, 63, 78, 83,198, 63, 64, 0, 0, 63, 67, 23,106,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 64, 0, 0, 63, 67, 23,106, 63, 58, 32,136,
+ 63, 78, 83,198, 63, 54, 81,182, 63, 65,236,193, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 63, 59,171,132, 63, 55,204,255, 63, 64, 0, 0, 63, 45, 28, 24, 63, 68, 84,124, 63, 55,204,255, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 68, 84,124, 63, 55,204,255, 63, 64, 0, 0, 63, 67, 23,106, 63, 59,171,132,
+ 63, 55,204,255, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 54, 81,182, 63, 65,236,193,
+ 63, 59,171,132, 63, 55,204,255, 63, 64, 0, 0, 63, 67, 23,106, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 63, 64, 0, 0, 63, 67, 23,106, 63, 68, 84,124, 63, 55,204,255, 63, 73,174, 74, 63, 65,236,193, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 47,116, 77, 63, 75, 39,164, 63, 54, 81,182, 63, 65,236,193,
+ 63, 58, 32,136, 63, 78, 83,198, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 58, 32,136,
+ 63, 78, 83,198, 63, 50, 34,108, 63, 88, 64,140, 63, 47,116, 77, 63, 75, 39,164, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 63, 38,102,118, 63, 82,228, 38, 63, 47,116, 77, 63, 75, 39,164, 63, 50, 34,108, 63, 88, 64,140,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 50, 34,108, 63, 88, 64,140, 63, 58, 32,136,
+ 63, 78, 83,198, 63, 64, 0, 0, 63, 90, 56, 12, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 63, 45, 30, 31, 63, 52, 55,165, 63, 38,102,117, 63, 60, 86, 50, 63, 38,102,117, 63, 49, 12, 78, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 38,102,117, 63, 49, 12, 78, 63, 44,131,181, 63, 40,228,216, 63, 45, 30, 31,
+ 63, 52, 55,165, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 50,222, 60, 63, 43, 52,221,
+ 63, 45, 30, 31, 63, 52, 55,165, 63, 44,131,181, 63, 40,228,216, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 63, 44,131,181, 63, 40,228,216, 63, 38,102,117, 63, 49, 12, 78, 63, 38,102,117, 63, 37,200, 45, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 45, 30, 31, 63, 52, 55,165, 63, 50,222, 60, 63, 43, 52,221,
+ 63, 52,102,189, 63, 54,155,113, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 52,102,189,
+ 63, 54,155,113, 63, 46, 23,240, 63, 63,233, 89, 63, 45, 30, 31, 63, 52, 55,165, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 63, 38,102,117, 63, 60, 86, 50, 63, 45, 30, 31, 63, 52, 55,165, 63, 46, 23,240, 63, 63,233, 89,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 46, 23,240, 63, 63,233, 89, 63, 52,102,189,
+ 63, 54,155,113, 63, 54, 81,182, 63, 65,236,193, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 63, 47,116, 77, 63, 75, 39,164, 63, 38,102,118, 63, 82,228, 38, 63, 38,102,117, 63, 71,153,255, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 38,102,117, 63, 71,153,255, 63, 46, 23,240, 63, 63,233, 89, 63, 47,116, 77,
+ 63, 75, 39,164, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 54, 81,182, 63, 65,236,193,
+ 63, 47,116, 77, 63, 75, 39,164, 63, 46, 23,240, 63, 63,233, 89, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 63, 46, 23,240, 63, 63,233, 89, 63, 38,102,117, 63, 71,153,255, 63, 38,102,117, 63, 60, 86, 50, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 59,171,132, 63, 55,204,255, 63, 54, 81,182, 63, 65,236,193,
+ 63, 52,102,189, 63, 54,155,113, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 52,102,189,
+ 63, 54,155,113, 63, 57, 97, 87, 63, 44,160,200, 63, 59,171,132, 63, 55,204,255, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 63, 64, 0, 0, 63, 45, 28, 24, 63, 59,171,132, 63, 55,204,255, 63, 57, 97, 87, 63, 44,160,200,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 57, 97, 87, 63, 44,160,200, 63, 52,102,189,
+ 63, 54,155,113, 63, 50,222, 60, 63, 43, 52,221, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 63, 54,101,250, 63, 99, 26, 51, 63, 38,102,118, 63,105,114, 19, 63, 38,102,118, 63, 94, 46, 77, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 38,102,118, 63, 94, 46, 77, 63, 50, 34,108, 63, 88, 64,140, 63, 54,101,250,
+ 63, 99, 26, 51, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 64, 0, 0, 63, 90, 56, 12,
+ 63, 54,101,250, 63, 99, 26, 51, 63, 50, 34,108, 63, 88, 64,140, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 63, 50, 34,108, 63, 88, 64,140, 63, 38,102,118, 63, 94, 46, 77, 63, 38,102,118, 63, 82,228, 38, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 54,101,250, 63, 99, 26, 51, 63, 64, 0, 0, 63, 90, 56, 12,
+ 63, 73,154, 6, 63, 99, 26, 51, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 73,154, 6,
+ 63, 99, 26, 51, 63, 64, 0, 0, 63,109,154,206, 63, 54,101,250, 63, 99, 26, 51, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 63, 38,102,118, 63,105,114, 19, 63, 54,101,250, 63, 99, 26, 51, 63, 64, 0, 0, 63,109,154,206,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 64, 0, 0, 63,109,154,206, 63, 73,154, 6,
+ 63, 99, 26, 51, 63, 89,153,138, 63,105,114, 19, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 63, 89,153,136, 63,116,187,242, 63, 59,153, 3, 63,128, 0, 0, 63, 38,102,120, 63,116,187,242, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 38,102,120, 63,116,187,242, 63, 64, 0, 0, 63,109,154,206, 63, 89,153,136,
+ 63,116,187,242, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 89,153,138, 63,105,114, 19,
+ 63, 89,153,136, 63,116,187,242, 63, 64, 0, 0, 63,109,154,206, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 63, 64, 0, 0, 63,109,154,206, 63, 38,102,120, 63,116,187,242, 63, 38,102,118, 63,105,114, 19, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 89,153,138, 63, 94, 46, 77, 63, 89,153,138, 63,105,114, 19,
+ 63, 73,154, 6, 63, 99, 26, 51, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 73,154, 6,
+ 63, 99, 26, 51, 63, 77,221,148, 63, 88, 64,140, 63, 89,153,138, 63, 94, 46, 77, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 63, 89,153,138, 63, 82,228, 39, 63, 89,153,138, 63, 94, 46, 77, 63, 77,221,148, 63, 88, 64,140,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 77,221,148, 63, 88, 64,140, 63, 73,154, 6,
+ 63, 99, 26, 51, 63, 64, 0, 0, 63, 90, 56, 12, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 62, 8, 71,167, 63, 55,205, 7, 61,229,192,170, 63, 65,236,200, 61,214,104,203, 63, 54,155,120, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61,214,104,203, 63, 54,155,120, 61,254, 61,201, 63, 44,160,207, 62, 8, 71,167,
+ 63, 55,205, 7, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 25,153,173, 63, 45, 28, 27,
+ 62, 8, 71,167, 63, 55,205, 7, 61,254, 61,201, 63, 44,160,207, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 61,254, 61,201, 63, 44,160,207, 61,214,104,203, 63, 54,155,120, 61,202, 36,175, 63, 43, 52,228, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61,156, 35,145, 63, 52, 55,172, 61,202, 36,175, 63, 43, 52,228,
+ 61,214,104,203, 63, 54,155,120, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61,214,104,203,
+ 63, 54,155,120, 61,163,242, 32, 63, 63,233, 96, 61,156, 35,145, 63, 52, 55,172, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 61, 76,203,246, 63, 60, 86, 53, 61,156, 35,145, 63, 52, 55,172, 61,163,242, 32, 63, 63,233, 96,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61,163,242, 32, 63, 63,233, 96, 61,214,104,203,
+ 63, 54,155,120, 61,229,192,170, 63, 65,236,200, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 61,174,213, 17, 63, 75, 39,171, 61, 76,203,243, 63, 82,228, 41, 61, 76,203,244, 63, 71,154, 2, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61, 76,203,244, 63, 71,154, 2, 61,163,242, 32, 63, 63,233, 96, 61,174,213, 17,
+ 63, 75, 39,171, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61,229,192,170, 63, 65,236,200,
+ 61,174,213, 17, 63, 75, 39,171, 61,163,242, 32, 63, 63,233, 96, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 61,163,242, 32, 63, 63,233, 96, 61, 76,203,244, 63, 71,154, 2, 61, 76,203,246, 63, 60, 86, 53, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61,156, 35,145, 63, 52, 55,172, 61, 76,203,246, 63, 60, 86, 53,
+ 61, 76,203,243, 63, 49, 12, 82, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61, 76,203,243,
+ 63, 49, 12, 82, 61,151, 80, 53, 63, 40,228,223, 61,156, 35,145, 63, 52, 55,172, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 61,202, 36,175, 63, 43, 52,228, 61,156, 35,145, 63, 52, 55,172, 61,151, 80, 53, 63, 40,228,223,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61,151, 80, 53, 63, 40,228,223, 61, 76,203,243,
+ 63, 49, 12, 82, 61, 76,203,246, 63, 37,200, 48, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 61,174,213, 17, 63, 75, 39,171, 61,229,192,170, 63, 65,236,200, 62, 2, 27,169, 63, 78, 83,204, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 2, 27,169, 63, 78, 83,204, 61,196, 70, 23, 63, 88, 64,147, 61,174,213, 17,
+ 63, 75, 39,171, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61, 76,203,243, 63, 82,228, 41,
+ 61,174,213, 17, 63, 75, 39,171, 61,196, 70, 23, 63, 88, 64,147, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 61,196, 70, 23, 63, 88, 64,147, 62, 2, 27,169, 63, 78, 83,204, 62, 25,153,160, 63, 90, 56, 14, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 49, 23,162, 63, 78, 83,195, 62, 25,153,160, 63, 90, 56, 14,
+ 62, 2, 27,169, 63, 78, 83,204, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 2, 27,169,
+ 63, 78, 83,204, 62, 25,153,172, 63, 67, 23,108, 62, 49, 23,162, 63, 78, 83,195, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 62, 64, 82,240, 63, 65,236,183, 62, 49, 23,162, 63, 78, 83,195, 62, 25,153,172, 63, 67, 23,108,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 25,153,172, 63, 67, 23,108, 62, 2, 27,169,
+ 63, 78, 83,204, 61,229,192,170, 63, 65,236,200, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 62, 8, 71,167, 63, 55,205, 7, 62, 25,153,173, 63, 45, 28, 27, 62, 42,235,173, 63, 55,204,254, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 42,235,173, 63, 55,204,254, 62, 25,153,172, 63, 67, 23,108, 62, 8, 71,167,
+ 63, 55,205, 7, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61,229,192,170, 63, 65,236,200,
+ 62, 8, 71,167, 63, 55,205, 7, 62, 25,153,172, 63, 67, 23,108, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 62, 25,153,172, 63, 67, 23,108, 62, 42,235,173, 63, 55,204,254, 62, 64, 82,240, 63, 65,236,183, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 49, 23,162, 63, 78, 83,195, 62, 64, 82,240, 63, 65,236,183,
+ 62, 91,200,166, 63, 75, 39,147, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 91,200,166,
+ 63, 75, 39,147, 62, 81, 16, 34, 63, 88, 64,131, 62, 49, 23,162, 63, 78, 83,195, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 62, 25,153,160, 63, 90, 56, 14, 62, 49, 23,162, 63, 78, 83,195, 62, 81, 16, 34, 63, 88, 64,131,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 81, 16, 34, 63, 88, 64,131, 62, 91,200,166,
+ 63, 75, 39,147, 62,128, 0, 0, 63, 82,228, 13, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 62,128, 0, 0, 63, 49, 12, 47, 62,128, 0, 0, 63, 60, 86, 19, 62,101, 33, 92, 63, 52, 55,146, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,101, 33, 92, 63, 52, 55,146, 62,103,139, 14, 63, 40,228,199, 62,128, 0, 0,
+ 63, 49, 12, 47, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,128, 0, 0, 63, 37,200, 23,
+ 62,128, 0, 0, 63, 49, 12, 47, 62,103,139, 14, 63, 40,228,199, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 62,103,139, 14, 63, 40,228,199, 62,101, 33, 92, 63, 52, 55,146, 62, 78, 32,230, 63, 43, 52,211, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 71,254,223, 63, 54,155,102, 62, 78, 32,230, 63, 43, 52,211,
+ 62,101, 33, 92, 63, 52, 55,146, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,101, 33, 92,
+ 63, 52, 55,146, 62, 97, 58, 23, 63, 63,233, 69, 62, 71,254,223, 63, 54,155,102, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 62, 64, 82,240, 63, 65,236,183, 62, 71,254,223, 63, 54,155,102, 62, 97, 58, 23, 63, 63,233, 69,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 97, 58, 23, 63, 63,233, 69, 62,101, 33, 92,
+ 63, 52, 55,146, 62,128, 0, 0, 63, 60, 86, 19, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 62,128, 0, 0, 63, 71,153,228, 62,128, 0, 0, 63, 82,228, 13, 62, 91,200,166, 63, 75, 39,147, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 91,200,166, 63, 75, 39,147, 62, 97, 58, 23, 63, 63,233, 69, 62,128, 0, 0,
+ 63, 71,153,228, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,128, 0, 0, 63, 60, 86, 19,
+ 62,128, 0, 0, 63, 71,153,228, 62, 97, 58, 23, 63, 63,233, 69, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 62, 97, 58, 23, 63, 63,233, 69, 62, 91,200,166, 63, 75, 39,147, 62, 64, 82,240, 63, 65,236,183, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 71,254,223, 63, 54,155,102, 62, 64, 82,240, 63, 65,236,183,
+ 62, 42,235,173, 63, 55,204,254, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 42,235,173,
+ 63, 55,204,254, 62, 52, 20,105, 63, 44,160,198, 62, 71,254,223, 63, 54,155,102, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 62, 78, 32,230, 63, 43, 52,211, 62, 71,254,223, 63, 54,155,102, 62, 52, 20,105, 63, 44,160,198,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 52, 20,105, 63, 44,160,198, 62, 42,235,173,
+ 63, 55,204,254, 62, 25,153,173, 63, 45, 28, 27, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 62,128, 0, 0, 63, 94, 46, 58, 62,128, 0, 0, 63,105,114, 8, 62, 64, 1,230, 63, 99, 26, 49, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 64, 1,230, 63, 99, 26, 49, 62, 81, 16, 34, 63, 88, 64,131, 62,128, 0, 0,
+ 63, 94, 46, 58, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,128, 0, 0, 63, 82,228, 13,
+ 62,128, 0, 0, 63, 94, 46, 58, 62, 81, 16, 34, 63, 88, 64,131, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 62, 81, 16, 34, 63, 88, 64,131, 62, 64, 1,230, 63, 99, 26, 49, 62, 25,153,160, 63, 90, 56, 14, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61,230, 98,164, 63, 99, 26, 58, 62, 25,153,160, 63, 90, 56, 14,
+ 62, 64, 1,230, 63, 99, 26, 49, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 64, 1,230,
+ 63, 99, 26, 49, 62, 25,153,159, 63,109,154,210, 61,230, 98,164, 63, 99, 26, 58, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 61, 76,203,237, 63,105,114, 22, 61,230, 98,164, 63, 99, 26, 58, 62, 25,153,159, 63,109,154,210,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 25,153,159, 63,109,154,210, 62, 64, 1,230,
+ 63, 99, 26, 49, 62,128, 0, 0, 63,105,114, 8, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 62,128, 0, 0, 63,116,187,232, 63, 59,153, 3, 63,128, 0, 0, 63,134,102, 95, 63,116,187,242, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61, 76,203,210, 63,116,187,242, 62, 25,153,159, 63,109,154,210, 62,128, 0, 0,
+ 63,116,187,232, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,128, 0, 0, 63,105,114, 8,
+ 62,128, 0, 0, 63,116,187,232, 62, 25,153,159, 63,109,154,210, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 62, 25,153,159, 63,109,154,210, 61, 76,203,210, 63,116,187,242, 61, 76,203,237, 63,105,114, 22, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61,230, 98,164, 63, 99, 26, 58, 61, 76,203,237, 63,105,114, 22,
+ 61, 76,203,234, 63, 94, 46, 79, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61, 76,203,234,
+ 63, 94, 46, 79, 61,196, 70, 23, 63, 88, 64,147, 61,230, 98,164, 63, 99, 26, 58, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 62, 25,153,160, 63, 90, 56, 14, 61,230, 98,164, 63, 99, 26, 58, 61,196, 70, 23, 63, 88, 64,147,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61,196, 70, 23, 63, 88, 64,147, 61, 76,203,234,
+ 63, 94, 46, 79, 61, 76,203,243, 63, 82,228, 41, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 62,170,138, 42, 63, 55,204,254, 62,159,214,136, 63, 65,236,183, 62,156, 0,145, 63, 54,155,102, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,156, 0,145, 63, 54,155,102, 62,165,245,204, 63, 44,160,198, 62,170,138, 42,
+ 63, 55,204,254, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,179, 51, 42, 63, 45, 28, 28,
+ 62,170,138, 42, 63, 55,204,254, 62,165,245,204, 63, 44,160,198, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 62,165,245,204, 63, 44,160,198, 62,156, 0,145, 63, 54,155,102, 62,152,239,141, 63, 43, 52,211, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,141,111, 82, 63, 52, 55,146, 62,152,239,141, 63, 43, 52,211,
+ 62,156, 0,145, 63, 54,155,102, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,156, 0,145,
+ 63, 54,155,102, 62,143, 98,245, 63, 63,233, 68, 62,141,111, 82, 63, 52, 55,146, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 62,128, 0, 0, 63, 60, 86, 19, 62,141,111, 82, 63, 52, 55,146, 62,143, 98,245, 63, 63,233, 68,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,143, 98,245, 63, 63,233, 68, 62,156, 0,145,
+ 63, 54,155,102, 62,159,214,136, 63, 65,236,183, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 62,146, 27,173, 63, 75, 39,147, 62,128, 0, 0, 63, 82,228, 13, 62,128, 0, 0, 63, 71,153,228, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,128, 0, 0, 63, 71,153,228, 62,143, 98,245, 63, 63,233, 68, 62,146, 27,173,
+ 63, 75, 39,147, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,159,214,136, 63, 65,236,183,
+ 62,146, 27,173, 63, 75, 39,147, 62,143, 98,245, 63, 63,233, 68, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 62,143, 98,245, 63, 63,233, 68, 62,128, 0, 0, 63, 71,153,228, 62,128, 0, 0, 63, 60, 86, 19, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,141,111, 82, 63, 52, 55,146, 62,128, 0, 0, 63, 60, 86, 19,
+ 62,128, 0, 0, 63, 49, 12, 47, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,128, 0, 0,
+ 63, 49, 12, 47, 62,140, 58,121, 63, 40,228,199, 62,141,111, 82, 63, 52, 55,146, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 62,152,239,141, 63, 43, 52,211, 62,141,111, 82, 63, 52, 55,146, 62,140, 58,121, 63, 40,228,199,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,140, 58,121, 63, 40,228,199, 62,128, 0, 0,
+ 63, 49, 12, 47, 62,128, 0, 0, 63, 37,200, 23, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 62,146, 27,173, 63, 75, 39,147, 62,159,214,136, 63, 65,236,183, 62,167,116, 47, 63, 78, 83,195, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,167,116, 47, 63, 78, 83,195, 62,151,119,239, 63, 88, 64,131, 62,146, 27,173,
+ 63, 75, 39,147, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,128, 0, 0, 63, 82,228, 13,
+ 62,146, 27,173, 63, 75, 39,147, 62,151,119,239, 63, 88, 64,131, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 62,151,119,239, 63, 88, 64,131, 62,167,116, 47, 63, 78, 83,195, 62,179, 51, 49, 63, 90, 56, 14, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,190,242, 44, 63, 78, 83,205, 62,179, 51, 49, 63, 90, 56, 14,
+ 62,167,116, 47, 63, 78, 83,195, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,167,116, 47,
+ 63, 78, 83,195, 62,179, 51, 42, 63, 67, 23,108, 62,190,242, 44, 63, 78, 83,205, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 62,198,143,214, 63, 65,236,200, 62,190,242, 44, 63, 78, 83,205, 62,179, 51, 42, 63, 67, 23,108,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,179, 51, 42, 63, 67, 23,108, 62,167,116, 47,
+ 63, 78, 83,195, 62,159,214,136, 63, 65,236,183, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 62,170,138, 42, 63, 55,204,254, 62,179, 51, 42, 63, 45, 28, 28, 62,187,220, 45, 63, 55,205, 7, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,187,220, 45, 63, 55,205, 7, 62,179, 51, 42, 63, 67, 23,108, 62,170,138, 42,
+ 63, 55,204,254, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,159,214,136, 63, 65,236,183,
+ 62,170,138, 42, 63, 55,204,254, 62,179, 51, 42, 63, 67, 23,108, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 62,179, 51, 42, 63, 67, 23,108, 62,187,220, 45, 63, 55,205, 7, 62,198,143,214, 63, 65,236,200, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,190,242, 44, 63, 78, 83,205, 62,198,143,214, 63, 65,236,200,
+ 62,212, 74,188, 63, 75, 39,171, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,212, 74,188,
+ 63, 75, 39,171, 62,206,238,122, 63, 88, 64,147, 62,190,242, 44, 63, 78, 83,205, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 62,179, 51, 49, 63, 90, 56, 14, 62,190,242, 44, 63, 78, 83,205, 62,206,238,122, 63, 88, 64,147,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,206,238,122, 63, 88, 64,147, 62,212, 74,188,
+ 63, 75, 39,171, 62,230,102,130, 63, 82,228, 41, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 62,230,102,130, 63, 49, 12, 82, 62,230,102,129, 63, 60, 86, 53, 62,216,247, 28, 63, 52, 55,172, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,216,247, 28, 63, 52, 55,172, 62,218, 43,243, 63, 40,228,223, 62,230,102,130,
+ 63, 49, 12, 82, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,230,102,129, 63, 37,200, 48,
+ 62,230,102,130, 63, 49, 12, 82, 62,218, 43,243, 63, 40,228,223, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 62,218, 43,243, 63, 40,228,223, 62,216,247, 28, 63, 52, 55,172, 62,205,118,212, 63, 43, 52,228, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,202,101,206, 63, 54,155,120, 62,205,118,212, 63, 43, 52,228,
+ 62,216,247, 28, 63, 52, 55,172, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,216,247, 28,
+ 63, 52, 55,172, 62,215, 3,120, 63, 63,233, 95, 62,202,101,206, 63, 54,155,120, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 62,198,143,214, 63, 65,236,200, 62,202,101,206, 63, 54,155,120, 62,215, 3,120, 63, 63,233, 95,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,215, 3,120, 63, 63,233, 95, 62,216,247, 28,
+ 63, 52, 55,172, 62,230,102,129, 63, 60, 86, 53, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 62,230,102,130, 63, 71,154, 1, 62,230,102,130, 63, 82,228, 41, 62,212, 74,188, 63, 75, 39,171, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,212, 74,188, 63, 75, 39,171, 62,215, 3,120, 63, 63,233, 95, 62,230,102,130,
+ 63, 71,154, 1, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,230,102,129, 63, 60, 86, 53,
+ 62,230,102,130, 63, 71,154, 1, 62,215, 3,120, 63, 63,233, 95, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 62,215, 3,120, 63, 63,233, 95, 62,212, 74,188, 63, 75, 39,171, 62,198,143,214, 63, 65,236,200, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,202,101,206, 63, 54,155,120, 62,198,143,214, 63, 65,236,200,
+ 62,187,220, 45, 63, 55,205, 7, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,187,220, 45,
+ 63, 55,205, 7, 62,192,112,142, 63, 44,160,207, 62,202,101,206, 63, 54,155,120, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 62,205,118,212, 63, 43, 52,228, 62,202,101,206, 63, 54,155,120, 62,192,112,142, 63, 44,160,207,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,192,112,142, 63, 44,160,207, 62,187,220, 45,
+ 63, 55,205, 7, 62,179, 51, 42, 63, 45, 28, 28, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 62,230,102,131, 63, 94, 46, 79, 62,230,102,131, 63,105,114, 22, 62,198,103, 87, 63, 99, 26, 58, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,198,103, 87, 63, 99, 26, 58, 62,206,238,122, 63, 88, 64,147, 62,230,102,131,
+ 63, 94, 46, 79, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,230,102,130, 63, 82,228, 41,
+ 62,230,102,131, 63, 94, 46, 79, 62,206,238,122, 63, 88, 64,147, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 62,206,238,122, 63, 88, 64,147, 62,198,103, 87, 63, 99, 26, 58, 62,179, 51, 49, 63, 90, 56, 14, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,159,255, 14, 63, 99, 26, 49, 62,179, 51, 49, 63, 90, 56, 14,
+ 62,198,103, 87, 63, 99, 26, 58, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,198,103, 87,
+ 63, 99, 26, 58, 62,179, 51, 49, 63,109,154,210, 62,159,255, 14, 63, 99, 26, 49, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 62,128, 0, 0, 63,105,114, 8, 62,159,255, 14, 63, 99, 26, 49, 62,179, 51, 49, 63,109,154,210,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,179, 51, 49, 63,109,154,210, 62,198,103, 87,
+ 63, 99, 26, 58, 62,230,102,131, 63,105,114, 22, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 62,230,102,134, 63,116,187,242, 63, 59,153, 3, 63,128, 0, 0, 62,128, 0, 0, 63,116,187,232, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,128, 0, 0, 63,116,187,232, 62,179, 51, 49, 63,109,154,210, 62,230,102,134,
+ 63,116,187,242, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,230,102,131, 63,105,114, 22,
+ 62,230,102,134, 63,116,187,242, 62,179, 51, 49, 63,109,154,210, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 62,179, 51, 49, 63,109,154,210, 62,128, 0, 0, 63,116,187,232, 62,128, 0, 0, 63,105,114, 8, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,159,255, 14, 63, 99, 26, 49, 62,128, 0, 0, 63,105,114, 8,
+ 62,128, 0, 0, 63, 94, 46, 58, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,128, 0, 0,
+ 63, 94, 46, 58, 62,151,119,239, 63, 88, 64,131, 62,159,255, 14, 63, 99, 26, 49, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 62,179, 51, 49, 63, 90, 56, 14, 62,159,255, 14, 63, 99, 26, 49, 62,151,119,239, 63, 88, 64,131,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,151,119,239, 63, 88, 64,131, 62,128, 0, 0,
+ 63, 94, 46, 58, 62,128, 0, 0, 63, 82,228, 13, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 63, 8,120, 93, 63, 55,205, 11, 63, 3, 30,140, 63, 65,236,201, 63, 1, 51,145, 63, 54,155,121, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 1, 51,145, 63, 54,155,121, 63, 6, 46, 46, 63, 44,160,211, 63, 8,120, 93,
+ 63, 55,205, 11, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 12,204,220, 63, 45, 28, 35,
+ 63, 8,120, 93, 63, 55,205, 11, 63, 6, 46, 46, 63, 44,160,211, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 63, 6, 46, 46, 63, 44,160,211, 63, 1, 51,145, 63, 54,155,121, 62,255, 86, 30, 63, 43, 52,230, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,243,213,222, 63, 52, 55,172, 62,255, 86, 30, 63, 43, 52,230,
+ 63, 1, 51,145, 63, 54,155,121, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 1, 51,145,
+ 63, 54,155,121, 62,245,201,128, 63, 63,233, 94, 62,243,213,222, 63, 52, 55,172, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 62,230,102,129, 63, 60, 86, 53, 62,243,213,222, 63, 52, 55,172, 62,245,201,128, 63, 63,233, 94,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,245,201,128, 63, 63,233, 94, 63, 1, 51,145,
+ 63, 54,155,121, 63, 3, 30,140, 63, 65,236,201, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 62,248,130, 59, 63, 75, 39,169, 62,230,102,130, 63, 82,228, 41, 62,230,102,130, 63, 71,154, 1, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,230,102,130, 63, 71,154, 1, 62,245,201,128, 63, 63,233, 94, 62,248,130, 59,
+ 63, 75, 39,169, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 3, 30,140, 63, 65,236,201,
+ 62,248,130, 59, 63, 75, 39,169, 62,245,201,128, 63, 63,233, 94, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 62,245,201,128, 63, 63,233, 94, 62,230,102,130, 63, 71,154, 1, 62,230,102,129, 63, 60, 86, 53, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,243,213,222, 63, 52, 55,172, 62,230,102,129, 63, 60, 86, 53,
+ 62,230,102,130, 63, 49, 12, 82, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,230,102,130,
+ 63, 49, 12, 82, 62,242,161, 9, 63, 40,228,223, 62,243,213,222, 63, 52, 55,172, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 62,255, 86, 30, 63, 43, 52,230, 62,243,213,222, 63, 52, 55,172, 62,242,161, 9, 63, 40,228,223,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,242,161, 9, 63, 40,228,223, 62,230,102,130,
+ 63, 49, 12, 82, 62,230,102,129, 63, 37,200, 48, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 62,248,130, 59, 63, 75, 39,169, 63, 3, 30,140, 63, 65,236,201, 63, 6,237, 94, 63, 78, 83,207, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 6,237, 94, 63, 78, 83,207, 62,253,222,118, 63, 88, 64,148, 62,248,130, 59,
+ 63, 75, 39,169, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,230,102,130, 63, 82,228, 41,
+ 62,248,130, 59, 63, 75, 39,169, 62,253,222,118, 63, 88, 64,148, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 62,253,222,118, 63, 88, 64,148, 63, 6,237, 94, 63, 78, 83,207, 63, 12,204,220, 63, 90, 56, 22, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 18,172, 88, 63, 78, 83,207, 63, 12,204,220, 63, 90, 56, 22,
+ 63, 6,237, 94, 63, 78, 83,207, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 6,237, 94,
+ 63, 78, 83,207, 63, 12,204,220, 63, 67, 23,115, 63, 18,172, 88, 63, 78, 83,207, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 63, 22,123, 44, 63, 65,236,201, 63, 18,172, 88, 63, 78, 83,207, 63, 12,204,220, 63, 67, 23,115,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 12,204,220, 63, 67, 23,115, 63, 6,237, 94,
+ 63, 78, 83,207, 63, 3, 30,140, 63, 65,236,201, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 63, 8,120, 93, 63, 55,205, 11, 63, 12,204,220, 63, 45, 28, 35, 63, 17, 33, 91, 63, 55,205, 9, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 17, 33, 91, 63, 55,205, 9, 63, 12,204,220, 63, 67, 23,115, 63, 8,120, 93,
+ 63, 55,205, 11, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 3, 30,140, 63, 65,236,201,
+ 63, 8,120, 93, 63, 55,205, 11, 63, 12,204,220, 63, 67, 23,115, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 63, 12,204,220, 63, 67, 23,115, 63, 17, 33, 91, 63, 55,205, 9, 63, 22,123, 44, 63, 65,236,201, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 18,172, 88, 63, 78, 83,207, 63, 22,123, 44, 63, 65,236,201,
+ 63, 29, 88,153, 63, 75, 39,167, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 29, 88,153,
+ 63, 75, 39,167, 63, 26,170,121, 63, 88, 64,147, 63, 18,172, 88, 63, 78, 83,207, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 63, 12,204,220, 63, 90, 56, 22, 63, 18,172, 88, 63, 78, 83,207, 63, 26,170,121, 63, 88, 64,147,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 26,170,121, 63, 88, 64,147, 63, 29, 88,153,
+ 63, 75, 39,167, 63, 38,102,118, 63, 82,228, 38, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 63, 38,102,117, 63, 49, 12, 78, 63, 38,102,117, 63, 60, 86, 50, 63, 31,174,200, 63, 52, 55,169, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 31,174,200, 63, 52, 55,169, 63, 32, 73, 51, 63, 40,228,221, 63, 38,102,117,
+ 63, 49, 12, 78, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 38,102,117, 63, 37,200, 45,
+ 63, 38,102,117, 63, 49, 12, 78, 63, 32, 73, 51, 63, 40,228,221, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 63, 32, 73, 51, 63, 40,228,221, 63, 31,174,200, 63, 52, 55,169, 63, 25,238,169, 63, 43, 52,229, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 24,102, 39, 63, 54,155,119, 63, 25,238,169, 63, 43, 52,229,
+ 63, 31,174,200, 63, 52, 55,169, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 31,174,200,
+ 63, 52, 55,169, 63, 30,180,246, 63, 63,233, 92, 63, 24,102, 39, 63, 54,155,119, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 63, 22,123, 44, 63, 65,236,201, 63, 24,102, 39, 63, 54,155,119, 63, 30,180,246, 63, 63,233, 92,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 30,180,246, 63, 63,233, 92, 63, 31,174,200,
+ 63, 52, 55,169, 63, 38,102,117, 63, 60, 86, 50, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 63, 38,102,117, 63, 71,153,255, 63, 38,102,118, 63, 82,228, 38, 63, 29, 88,153, 63, 75, 39,167, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 29, 88,153, 63, 75, 39,167, 63, 30,180,246, 63, 63,233, 92, 63, 38,102,117,
+ 63, 71,153,255, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 38,102,117, 63, 60, 86, 50,
+ 63, 38,102,117, 63, 71,153,255, 63, 30,180,246, 63, 63,233, 92, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 63, 30,180,246, 63, 63,233, 92, 63, 29, 88,153, 63, 75, 39,167, 63, 22,123, 44, 63, 65,236,201, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 24,102, 39, 63, 54,155,119, 63, 22,123, 44, 63, 65,236,201,
+ 63, 17, 33, 91, 63, 55,205, 9, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 17, 33, 91,
+ 63, 55,205, 9, 63, 19,107,138, 63, 44,160,211, 63, 24,102, 39, 63, 54,155,119, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 63, 25,238,169, 63, 43, 52,229, 63, 24,102, 39, 63, 54,155,119, 63, 19,107,138, 63, 44,160,211,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 19,107,138, 63, 44,160,211, 63, 17, 33, 91,
+ 63, 55,205, 9, 63, 12,204,220, 63, 45, 28, 35, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 63, 38,102,118, 63, 94, 46, 77, 63, 38,102,118, 63,105,114, 19, 63, 22,102,235, 63, 99, 26, 59, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 22,102,235, 63, 99, 26, 59, 63, 26,170,121, 63, 88, 64,147, 63, 38,102,118,
+ 63, 94, 46, 77, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 38,102,118, 63, 82,228, 38,
+ 63, 38,102,118, 63, 94, 46, 77, 63, 26,170,121, 63, 88, 64,147, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 63, 26,170,121, 63, 88, 64,147, 63, 22,102,235, 63, 99, 26, 59, 63, 12,204,220, 63, 90, 56, 22, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 3, 50,204, 63, 99, 26, 58, 63, 12,204,220, 63, 90, 56, 22,
+ 63, 22,102,235, 63, 99, 26, 59, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 22,102,235,
+ 63, 99, 26, 59, 63, 12,204,224, 63,109,154,212, 63, 3, 50,204, 63, 99, 26, 58, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 62,230,102,131, 63,105,114, 22, 63, 3, 50,204, 63, 99, 26, 58, 63, 12,204,224, 63,109,154,212,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 12,204,224, 63,109,154,212, 63, 22,102,235,
+ 63, 99, 26, 59, 63, 38,102,118, 63,105,114, 19, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 63, 38,102,120, 63,116,187,242, 63, 59,153, 3, 63,128, 0, 0, 62,230,102,134, 63,116,187,242, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,230,102,134, 63,116,187,242, 63, 12,204,224, 63,109,154,212, 63, 38,102,120,
+ 63,116,187,242, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 38,102,118, 63,105,114, 19,
+ 63, 38,102,120, 63,116,187,242, 63, 12,204,224, 63,109,154,212, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 63, 12,204,224, 63,109,154,212, 62,230,102,134, 63,116,187,242, 62,230,102,131, 63,105,114, 22, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 3, 50,204, 63, 99, 26, 58, 62,230,102,131, 63,105,114, 22,
+ 62,230,102,131, 63, 94, 46, 79, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,230,102,131,
+ 63, 94, 46, 79, 62,253,222,118, 63, 88, 64,148, 63, 3, 50,204, 63, 99, 26, 58, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 63, 12,204,220, 63, 90, 56, 22, 63, 3, 50,204, 63, 99, 26, 58, 62,253,222,118, 63, 88, 64,148,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,253,222,118, 63, 88, 64,148, 62,230,102,131,
+ 63, 94, 46, 79, 62,230,102,130, 63, 82,228, 41, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 63, 76,233,213, 63, 21, 48, 35, 63, 70,235,176, 63, 22,209,226, 63, 73,234, 80, 63, 11,111,146, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 73,234, 80, 63, 11,111,146, 63, 79,200, 1, 63, 9,152, 94, 63, 76,233,213,
+ 63, 21, 48, 35, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 82,215, 19, 63, 19, 29,252,
+ 63, 76,233,213, 63, 21, 48, 35, 63, 79,200, 1, 63, 9,152, 94, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 63, 79,200, 1, 63, 9,152, 94, 63, 73,234, 80, 63, 11,111,146, 63, 76,204,193, 63, 0, 0, 0, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 76,233,213, 63, 21, 48, 35, 63, 82,215, 19, 63, 19, 29,252,
+ 63, 80, 41,220, 63, 31, 60,105, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 80, 41,220,
+ 63, 31, 60,105, 63, 73,219,164, 63, 33, 23,173, 63, 76,233,213, 63, 21, 48, 35, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 63, 70,235,176, 63, 22,209,226, 63, 76,233,213, 63, 21, 48, 35, 63, 73,219,164, 63, 33, 23,173,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 73,219,164, 63, 33, 23,173, 63, 80, 41,220,
+ 63, 31, 60,105, 63, 77, 33,196, 63, 43, 52,221, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 63, 70,158,169, 63, 44,160,200, 63, 64, 0, 0, 63, 45, 28, 24, 63, 67,171, 5, 63, 34, 17,216, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 67,171, 5, 63, 34, 17,216, 63, 73,219,164, 63, 33, 23,173, 63, 70,158,169,
+ 63, 44,160,200, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 77, 33,196, 63, 43, 52,221,
+ 63, 70,158,169, 63, 44,160,200, 63, 73,219,164, 63, 33, 23,173, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 63, 73,219,164, 63, 33, 23,173, 63, 67,171, 5, 63, 34, 17,216, 63, 70,235,176, 63, 22,209,226, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 83,124, 75, 63, 40,228,217, 63, 77, 33,196, 63, 43, 52,221,
+ 63, 80, 41,220, 63, 31, 60,105, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 80, 41,220,
+ 63, 31, 60,105, 63, 86, 20,218, 63, 28,140,143, 63, 83,124, 75, 63, 40,228,217, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 63, 89,153,139, 63, 37,200, 45, 63, 83,124, 75, 63, 40,228,217, 63, 86, 20,218, 63, 28,140,143,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 86, 20,218, 63, 28,140,143, 63, 80, 41,220,
+ 63, 31, 60,105, 63, 82,215, 19, 63, 19, 29,252, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 63, 64, 0, 0, 63, 23, 32,182, 63, 70,235,176, 63, 22,209,226, 63, 67,171, 5, 63, 34, 17,216, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 67,171, 5, 63, 34, 17,216, 63, 60, 84,251, 63, 34, 17,216, 63, 64, 0, 0,
+ 63, 23, 32,182, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 57, 20, 80, 63, 22,209,226,
+ 63, 64, 0, 0, 63, 23, 32,182, 63, 60, 84,251, 63, 34, 17,216, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 63, 60, 84,251, 63, 34, 17,216, 63, 67,171, 5, 63, 34, 17,216, 63, 64, 0, 0, 63, 45, 28, 24, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 64, 0, 0, 63, 23, 32,182, 63, 57, 20, 80, 63, 22,209,226,
+ 63, 60,156,169, 63, 11,116, 96, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 60,156,169,
+ 63, 11,116, 96, 63, 67, 99, 87, 63, 11,116, 96, 63, 64, 0, 0, 63, 23, 32,182, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 63, 70,235,176, 63, 22,209,226, 63, 64, 0, 0, 63, 23, 32,182, 63, 67, 99, 87, 63, 11,116, 96,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 67, 99, 87, 63, 11,116, 96, 63, 60,156,169,
+ 63, 11,116, 96, 63, 64, 0, 0, 63, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 63, 70,102, 96, 63, 0, 1,244, 63, 76,204,193, 63, 0, 0, 0, 63, 73,234, 80, 63, 11,111,146, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 73,234, 80, 63, 11,111,146, 63, 67, 99, 87, 63, 11,116, 96, 63, 70,102, 96,
+ 63, 0, 1,244, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 64, 0, 0, 63, 0, 0, 0,
+ 63, 70,102, 96, 63, 0, 1,244, 63, 67, 99, 87, 63, 11,116, 96, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 63, 67, 99, 87, 63, 11,116, 96, 63, 73,234, 80, 63, 11,111,146, 63, 70,235,176, 63, 22,209,226, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 57,153,160, 63, 0, 1,244, 63, 64, 0, 0, 63, 0, 0, 0,
+ 63, 60,156,169, 63, 11,116, 96, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 60,156,169,
+ 63, 11,116, 96, 63, 54, 21,176, 63, 11,111,146, 63, 57,153,160, 63, 0, 1,244, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 63, 51, 51, 63, 63, 0, 0, 0, 63, 57,153,160, 63, 0, 1,244, 63, 54, 21,176, 63, 11,111,146,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 54, 21,176, 63, 11,111,146, 63, 60,156,169,
+ 63, 11,116, 96, 63, 57, 20, 80, 63, 22,209,226, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 63, 64, 0, 0, 62,217, 58, 93, 63, 57, 61,144, 62,217,196, 19, 63, 60,123, 85, 62,198,230,253, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 60,123, 85, 62,198,230,253, 63, 67,132,171, 62,198,230,253, 63, 64, 0, 0,
+ 62,217, 58, 93, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 70,194,112, 62,217,196, 19,
+ 63, 64, 0, 0, 62,217, 58, 93, 63, 67,132,171, 62,198,230,253, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 63, 67,132,171, 62,198,230,253, 63, 60,123, 85, 62,198,230,253, 63, 64, 0, 0, 62,180,111,211, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 64, 0, 0, 62,217, 58, 93, 63, 70,194,112, 62,217,196, 19,
+ 63, 67, 84,125, 62,236,211, 42, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 67, 84,125,
+ 62,236,211, 42, 63, 60,171,131, 62,236,211, 42, 63, 64, 0, 0, 62,217, 58, 93, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 63, 57, 61,144, 62,217,196, 19, 63, 64, 0, 0, 62,217, 58, 93, 63, 60,171,131, 62,236,211, 42,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 60,171,131, 62,236,211, 42, 63, 67, 84,125,
+ 62,236,211, 42, 63, 64, 0, 0, 63, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 63, 57,153,160, 63, 0, 1,244, 63, 51, 51, 63, 63, 0, 0, 0, 63, 54, 46,128, 62,236,207, 75, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 54, 46,128, 62,236,207, 75, 63, 60,171,131, 62,236,211, 42, 63, 57,153,160,
+ 63, 0, 1,244, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 64, 0, 0, 63, 0, 0, 0,
+ 63, 57,153,160, 63, 0, 1,244, 63, 60,171,131, 62,236,211, 42, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 63, 60,171,131, 62,236,211, 42, 63, 54, 46,128, 62,236,207, 75, 63, 57, 61,144, 62,217,196, 19, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 70,102, 96, 63, 0, 1,244, 63, 64, 0, 0, 63, 0, 0, 0,
+ 63, 67, 84,125, 62,236,211, 42, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 67, 84,125,
+ 62,236,211, 42, 63, 73,209,128, 62,236,207, 75, 63, 70,102, 96, 63, 0, 1,244, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 63, 76,204,193, 63, 0, 0, 0, 63, 70,102, 96, 63, 0, 1,244, 63, 73,209,128, 62,236,207, 75,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 73,209,128, 62,236,207, 75, 63, 67, 84,125,
+ 62,236,211, 42, 63, 70,194,112, 62,217,196, 19, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 63, 51, 22, 43, 63, 21, 48, 35, 63, 45, 40,237, 63, 19, 29,252, 63, 48, 55,255, 63, 9,152, 94, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 48, 55,255, 63, 9,152, 94, 63, 54, 21,176, 63, 11,111,146, 63, 51, 22, 43,
+ 63, 21, 48, 35, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 57, 20, 80, 63, 22,209,226,
+ 63, 51, 22, 43, 63, 21, 48, 35, 63, 54, 21,176, 63, 11,111,146, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 63, 54, 21,176, 63, 11,111,146, 63, 48, 55,255, 63, 9,152, 94, 63, 51, 51, 63, 63, 0, 0, 0, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 51, 22, 43, 63, 21, 48, 35, 63, 57, 20, 80, 63, 22,209,226,
+ 63, 54, 36, 91, 63, 33, 23,173, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 54, 36, 91,
+ 63, 33, 23,173, 63, 47,214, 36, 63, 31, 60,105, 63, 51, 22, 43, 63, 21, 48, 35, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 63, 45, 40,237, 63, 19, 29,252, 63, 51, 22, 43, 63, 21, 48, 35, 63, 47,214, 36, 63, 31, 60,105,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 47,214, 36, 63, 31, 60,105, 63, 54, 36, 91,
+ 63, 33, 23,173, 63, 50,222, 60, 63, 43, 52,221, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 63, 44,131,181, 63, 40,228,216, 63, 38,102,117, 63, 37,200, 45, 63, 41,235, 38, 63, 28,140,141, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 41,235, 38, 63, 28,140,141, 63, 47,214, 36, 63, 31, 60,105, 63, 44,131,181,
+ 63, 40,228,216, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 50,222, 60, 63, 43, 52,221,
+ 63, 44,131,181, 63, 40,228,216, 63, 47,214, 36, 63, 31, 60,105, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 63, 47,214, 36, 63, 31, 60,105, 63, 41,235, 38, 63, 28,140,141, 63, 45, 40,237, 63, 19, 29,252, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 57, 97, 87, 63, 44,160,200, 63, 50,222, 60, 63, 43, 52,221,
+ 63, 54, 36, 91, 63, 33, 23,173, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 54, 36, 91,
+ 63, 33, 23,173, 63, 60, 84,251, 63, 34, 17,216, 63, 57, 97, 87, 63, 44,160,200, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 63, 64, 0, 0, 63, 45, 28, 24, 63, 57, 97, 87, 63, 44,160,200, 63, 60, 84,251, 63, 34, 17,216,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 60, 84,251, 63, 34, 17,216, 63, 54, 36, 91,
+ 63, 33, 23,173, 63, 57, 20, 80, 63, 22,209,226, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 63,128, 14,134, 63, 21, 48, 39, 63,122, 30,227, 63, 22,209,233, 63,125, 29,138, 63, 11,111,150, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,125, 29,138, 63, 11,111,150, 63,129,125,159, 63, 9,152, 94, 63,128, 14,134,
+ 63, 21, 48, 39, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 60,193, 73,174, 63, 19, 29,253,
+ 57,232, 92,209, 63, 21, 48, 39, 60, 62,207,114, 63, 9,152, 94, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 63,129,125,159, 63, 9,152, 94, 63,125, 29,138, 63, 11,111,150, 63,128, 0, 0, 63, 0, 0, 0, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 57,232, 92,209, 63, 21, 48, 39, 60,193, 73,174, 63, 19, 29,253,
+ 60, 87, 67,214, 63, 31, 60,110, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,129,174,136,
+ 63, 31, 60,110, 63,125, 14,213, 63, 33, 23,180, 63,128, 14,134, 63, 21, 48, 39, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 63,122, 30,227, 63, 22,209,233, 63,128, 14,134, 63, 21, 48, 39, 63,125, 14,213, 63, 33, 23,180,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,125, 14,213, 63, 33, 23,180, 63,129,174,136,
+ 63, 31, 60,110, 63,128, 42,121, 63, 43, 52,230, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 63,121,209,210, 63, 44,160,212, 63,115, 51, 36, 63, 45, 28, 36, 63,118,222, 49, 63, 34, 17,226, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,118,222, 49, 63, 34, 17,226, 63,125, 14,213, 63, 33, 23,180, 63,121,209,210,
+ 63, 44,160,212, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,128, 42,121, 63, 43, 52,230,
+ 63,121,209,210, 63, 44,160,212, 63,125, 14,213, 63, 33, 23,180, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 63,125, 14,213, 63, 33, 23,180, 63,118,222, 49, 63, 34, 17,226, 63,122, 30,227, 63, 22,209,233, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 60,213,239,111, 63, 40,228,223, 58,169,226,120, 63, 43, 52,230,
+ 60, 87, 67,214, 63, 31, 60,110, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 60, 87, 67,214,
+ 63, 31, 60,110, 61, 20,129, 13, 63, 28,140,143, 60,213,239,111, 63, 40,228,223, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 61, 76,203,246, 63, 37,200, 48, 60,213,239,111, 63, 40,228,223, 61, 20,129, 13, 63, 28,140,143,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61, 20,129, 13, 63, 28,140,143, 60, 87, 67,214,
+ 63, 31, 60,110, 60,193, 73,174, 63, 19, 29,253, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 63,115, 51, 44, 63, 23, 32,188, 63,122, 30,227, 63, 22,209,233, 63,118,222, 49, 63, 34, 17,226, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,118,222, 49, 63, 34, 17,226, 63,111,136, 31, 63, 34, 17,225, 63,115, 51, 44,
+ 63, 23, 32,188, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,108, 71,116, 63, 22,209,232,
+ 63,115, 51, 44, 63, 23, 32,188, 63,111,136, 31, 63, 34, 17,225, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 63,111,136, 31, 63, 34, 17,225, 63,118,222, 49, 63, 34, 17,226, 63,115, 51, 36, 63, 45, 28, 36, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,115, 51, 44, 63, 23, 32,188, 63,108, 71,116, 63, 22,209,232,
+ 63,111,207,213, 63, 11,116,100, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,111,207,213,
+ 63, 11,116,100, 63,118,150,138, 63, 11,116,101, 63,115, 51, 44, 63, 23, 32,188, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 63,122, 30,227, 63, 22,209,233, 63,115, 51, 44, 63, 23, 32,188, 63,118,150,138, 63, 11,116,101,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,118,150,138, 63, 11,116,101, 63,111,207,213,
+ 63, 11,116,100, 63,115, 51, 51, 63, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 63,121,153,154, 63, 0, 1,244, 63,128, 0, 0, 63, 0, 0, 0, 63,125, 29,138, 63, 11,111,150, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,125, 29,138, 63, 11,111,150, 63,118,150,138, 63, 11,116,101, 63,121,153,154,
+ 63, 0, 1,244, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,115, 51, 51, 63, 0, 0, 0,
+ 63,121,153,154, 63, 0, 1,244, 63,118,150,138, 63, 11,116,101, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 63,118,150,138, 63, 11,116,101, 63,125, 29,138, 63, 11,111,150, 63,122, 30,227, 63, 22,209,233, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,108,204,205, 63, 0, 1,244, 63,115, 51, 51, 63, 0, 0, 0,
+ 63,111,207,213, 63, 11,116,100, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,111,207,213,
+ 63, 11,116,100, 63,105, 72,213, 63, 11,111,149, 63,108,204,205, 63, 0, 1,244, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 63,102,102,101, 63, 0, 0, 0, 63,108,204,205, 63, 0, 1,244, 63,105, 72,213, 63, 11,111,149,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,105, 72,213, 63, 11,111,149, 63,111,207,213,
+ 63, 11,116,100, 63,108, 71,116, 63, 22,209,232, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 63,115, 51, 58, 62,217, 58, 73, 63,108,112,192, 62,217,196, 4, 63,111,174,139, 62,198,230,223, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,111,174,139, 62,198,230,223, 63,118,183,239, 62,198,230,227, 63,115, 51, 58,
+ 62,217, 58, 73, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,121,245,179, 62,217,196, 6,
+ 63,115, 51, 58, 62,217, 58, 73, 63,118,183,239, 62,198,230,227, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 63,118,183,239, 62,198,230,227, 63,111,174,139, 62,198,230,223, 63,115, 51, 65, 62,180,111,160, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,115, 51, 58, 62,217, 58, 73, 63,121,245,179, 62,217,196, 6,
+ 63,118,135,185, 62,236,211, 30, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,118,135,185,
+ 62,236,211, 30, 63,111,222,180, 62,236,211, 30, 63,115, 51, 58, 62,217, 58, 73, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 63,108,112,192, 62,217,196, 4, 63,115, 51, 58, 62,217, 58, 73, 63,111,222,180, 62,236,211, 30,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,111,222,180, 62,236,211, 30, 63,118,135,185,
+ 62,236,211, 30, 63,115, 51, 51, 63, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 63,108,204,205, 63, 0, 1,244, 63,102,102,101, 63, 0, 0, 0, 63,105, 97,170, 62,236,207, 65, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,105, 97,170, 62,236,207, 65, 63,111,222,180, 62,236,211, 30, 63,108,204,205,
+ 63, 0, 1,244, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,115, 51, 51, 63, 0, 0, 0,
+ 63,108,204,205, 63, 0, 1,244, 63,111,222,180, 62,236,211, 30, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 63,111,222,180, 62,236,211, 30, 63,105, 97,170, 62,236,207, 65, 63,108,112,192, 62,217,196, 4, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,121,153,154, 63, 0, 1,244, 63,115, 51, 51, 63, 0, 0, 0,
+ 63,118,135,185, 62,236,211, 30, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,118,135,185,
+ 62,236,211, 30, 63,125, 4,194, 62,236,207, 67, 63,121,153,154, 63, 0, 1,244, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 63,128, 0, 0, 63, 0, 0, 0, 63,121,153,154, 63, 0, 1,244, 63,125, 4,194, 62,236,207, 67,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,125, 4,194, 62,236,207, 67, 63,118,135,185,
+ 62,236,211, 30, 63,121,245,179, 62,217,196, 6, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 63,102, 73, 76, 63, 21, 48, 38, 63, 96, 92, 11, 63, 19, 29,253, 63, 99,107, 33, 63, 9,152, 94, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 99,107, 33, 63, 9,152, 94, 63,105, 72,213, 63, 11,111,149, 63,102, 73, 76,
+ 63, 21, 48, 38, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,108, 71,116, 63, 22,209,232,
+ 63,102, 73, 76, 63, 21, 48, 38, 63,105, 72,213, 63, 11,111,149, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 63,105, 72,213, 63, 11,111,149, 63, 99,107, 33, 63, 9,152, 94, 63,102,102,101, 63, 0, 0, 0, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,102, 73, 76, 63, 21, 48, 38, 63,108, 71,116, 63, 22,209,232,
+ 63,105, 87,124, 63, 33, 23,180, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,105, 87,124,
+ 63, 33, 23,180, 63, 99, 9, 65, 63, 31, 60,109, 63,102, 73, 76, 63, 21, 48, 38, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 63, 96, 92, 11, 63, 19, 29,253, 63,102, 73, 76, 63, 21, 48, 38, 63, 99, 9, 65, 63, 31, 60,109,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 99, 9, 65, 63, 31, 60,109, 63,105, 87,124,
+ 63, 33, 23,180, 63,102, 17, 87, 63, 43, 52,229, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 63, 95,182,205, 63, 40,228,222, 63, 89,153,139, 63, 37,200, 45, 63, 93, 30, 63, 63, 28,140,143, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 93, 30, 63, 63, 28,140,143, 63, 99, 9, 65, 63, 31, 60,109, 63, 95,182,205,
+ 63, 40,228,222, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,102, 17, 87, 63, 43, 52,229,
+ 63, 95,182,205, 63, 40,228,222, 63, 99, 9, 65, 63, 31, 60,109, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 63, 99, 9, 65, 63, 31, 60,109, 63, 93, 30, 63, 63, 28,140,143, 63, 96, 92, 11, 63, 19, 29,253, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,108,148,118, 63, 44,160,211, 63,102, 17, 87, 63, 43, 52,229,
+ 63,105, 87,124, 63, 33, 23,180, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,105, 87,124,
+ 63, 33, 23,180, 63,111,136, 31, 63, 34, 17,225, 63,108,148,118, 63, 44,160,211, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 63,115, 51, 36, 63, 45, 28, 36, 63,108,148,118, 63, 44,160,211, 63,111,136, 31, 63, 34, 17,225,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,111,136, 31, 63, 34, 17,225, 63,105, 87,124,
+ 63, 33, 23,180, 63,108, 71,116, 63, 22,209,232, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 62, 77, 65, 65, 63, 21, 48, 32, 62, 53, 72,152, 63, 22,209,229, 62, 65, 67, 47, 63, 11,111,147, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 65, 67, 47, 63, 11,111,147, 62, 88,185,255, 63, 9,152, 90, 62, 77, 65, 65,
+ 63, 21, 48, 32, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,100,246, 64, 63, 19, 29,246,
+ 62, 77, 65, 65, 63, 21, 48, 32, 62, 88,185,255, 63, 9,152, 90, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 62, 88,185,255, 63, 9,152, 90, 62, 65, 67, 47, 63, 11,111,147, 62, 76,204,254, 63, 0, 0, 0, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 77, 65, 65, 63, 21, 48, 32, 62,100,246, 64, 63, 19, 29,246,
+ 62, 90, 65, 89, 63, 31, 60, 94, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 90, 65, 89,
+ 63, 31, 60, 94, 62, 65, 8,107, 63, 33, 23,170, 62, 77, 65, 65, 63, 21, 48, 32, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 62, 53, 72,152, 63, 22,209,229, 62, 77, 65, 65, 63, 21, 48, 32, 62, 65, 8,107, 63, 33, 23,170,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 65, 8,107, 63, 33, 23,170, 62, 90, 65, 89,
+ 63, 31, 60, 94, 62, 78, 32,230, 63, 43, 52,211, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 62, 52, 20,105, 63, 44,160,198, 62, 25,153,173, 63, 45, 28, 27, 62, 40, 69,216, 63, 34, 17,220, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 40, 69,216, 63, 34, 17,220, 62, 65, 8,107, 63, 33, 23,170, 62, 52, 20,105,
+ 63, 44,160,198, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 78, 32,230, 63, 43, 52,211,
+ 62, 52, 20,105, 63, 44,160,198, 62, 65, 8,107, 63, 33, 23,170, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 62, 65, 8,107, 63, 33, 23,170, 62, 40, 69,216, 63, 34, 17,220, 62, 53, 72,152, 63, 22,209,229, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,103,139, 14, 63, 40,228,199, 62, 78, 32,230, 63, 43, 52,211,
+ 62, 90, 65, 89, 63, 31, 60, 94, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 90, 65, 89,
+ 63, 31, 60, 94, 62,113,237, 83, 63, 28,140,130, 62,103,139, 14, 63, 40,228,199, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 62,128, 0, 0, 63, 37,200, 23, 62,103,139, 14, 63, 40,228,199, 62,113,237, 83, 63, 28,140,130,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,113,237, 83, 63, 28,140,130, 62, 90, 65, 89,
+ 63, 31, 60, 94, 62,100,246, 64, 63, 19, 29,246, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 62, 25,153,180, 63, 23, 32,185, 62, 53, 72,152, 63, 22,209,229, 62, 40, 69,216, 63, 34, 17,220, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 40, 69,216, 63, 34, 17,220, 62, 10,237,133, 63, 34, 17,219, 62, 25,153,180,
+ 63, 23, 32,185, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61,251,213,147, 63, 22,209,228,
+ 62, 25,153,180, 63, 23, 32,185, 62, 10,237,133, 63, 34, 17,219, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 62, 10,237,133, 63, 34, 17,219, 62, 40, 69,216, 63, 34, 17,220, 62, 25,153,173, 63, 45, 28, 27, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 25,153,180, 63, 23, 32,185, 61,251,213,147, 63, 22,209,228,
+ 62, 12, 12, 67, 63, 11,116, 98, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 12, 12, 67,
+ 63, 11,116, 98, 62, 39, 39, 34, 63, 11,116, 98, 62, 25,153,180, 63, 23, 32,185, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 62, 53, 72,152, 63, 22,209,229, 62, 25,153,180, 63, 23, 32,185, 62, 39, 39, 34, 63, 11,116, 98,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 39, 39, 34, 63, 11,116, 98, 62, 12, 12, 67,
+ 63, 11,116, 98, 62, 25,153,181, 63, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 62, 51, 51, 92, 63, 0, 1,244, 62, 76,204,254, 63, 0, 0, 0, 62, 65, 67, 47, 63, 11,111,147, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 65, 67, 47, 63, 11,111,147, 62, 39, 39, 34, 63, 11,116, 98, 62, 51, 51, 92,
+ 63, 0, 1,244, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 25,153,181, 63, 0, 0, 0,
+ 62, 51, 51, 92, 63, 0, 1,244, 62, 39, 39, 34, 63, 11,116, 98, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 62, 39, 39, 34, 63, 11,116, 98, 62, 65, 67, 47, 63, 11,111,147, 62, 53, 72,152, 63, 22,209,229, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 0, 0, 8, 63, 0, 1,244, 62, 25,153,181, 63, 0, 0, 0,
+ 62, 12, 12, 67, 63, 11,116, 98, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 12, 12, 67,
+ 63, 11,116, 98, 61,227,224,109, 63, 11,111,147, 62, 0, 0, 8, 63, 0, 1,244, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 61,204,204,215, 63, 0, 0, 0, 62, 0, 0, 8, 63, 0, 1,244, 61,227,224,109, 63, 11,111,147,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61,227,224,109, 63, 11,111,147, 62, 12, 12, 67,
+ 63, 11,116, 98, 61,251,213,147, 63, 22,209,228, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 62, 25,153,196, 62,217, 58, 73, 61,253, 31,171, 62,217,196, 6, 62, 11,135, 1, 62,198,230,228, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 11,135, 1, 62,198,230,228, 62, 39,172,153, 62,198,230,230, 62, 25,153,196,
+ 62,217, 58, 73, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 52,163,179, 62,217,196, 7,
+ 62, 25,153,196, 62,217, 58, 73, 62, 39,172,153, 62,198,230,230, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 62, 39,172,153, 62,198,230,230, 62, 11,135, 1, 62,198,230,228, 62, 25,153,214, 62,180,111,165, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 25,153,196, 62,217, 58, 73, 62, 52,163,179, 62,217,196, 7,
+ 62, 38,235,202, 62,236,211, 33, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 38,235,202,
+ 62,236,211, 33, 62, 12, 71,173, 62,236,211, 31, 62, 25,153,196, 62,217, 58, 73, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 61,253, 31,171, 62,217,196, 6, 62, 25,153,196, 62,217, 58, 73, 62, 12, 71,173, 62,236,211, 31,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 12, 71,173, 62,236,211, 31, 62, 38,235,202,
+ 62,236,211, 33, 62, 25,153,181, 63, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 62, 0, 0, 8, 63, 0, 1,244, 61,204,204,215, 63, 0, 0, 0, 61,228,166,251, 62,236,207, 67, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61,228,166,251, 62,236,207, 67, 62, 12, 71,173, 62,236,211, 31, 62, 0, 0, 8,
+ 63, 0, 1,244, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 25,153,181, 63, 0, 0, 0,
+ 62, 0, 0, 8, 63, 0, 1,244, 62, 12, 71,173, 62,236,211, 31, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 62, 12, 71,173, 62,236,211, 31, 61,228,166,251, 62,236,207, 67, 61,253, 31,171, 62,217,196, 6, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 51, 51, 92, 63, 0, 1,244, 62, 25,153,181, 63, 0, 0, 0,
+ 62, 38,235,202, 62,236,211, 33, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 38,235,202,
+ 62,236,211, 33, 62, 64,223,251, 62,236,207, 67, 62, 51, 51, 92, 63, 0, 1,244, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 62, 76,204,254, 63, 0, 0, 0, 62, 51, 51, 92, 63, 0, 1,244, 62, 64,223,251, 62,236,207, 67,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 64,223,251, 62,236,207, 67, 62, 38,235,202,
+ 62,236,211, 33, 62, 52,163,179, 62,217,196, 7, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 61,203,228, 42, 63, 21, 48, 37, 61,156,122, 1, 63, 19, 29,254, 61,180,242,172, 63, 9,152, 96, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61,180,242,172, 63, 9,152, 96, 61,227,224,109, 63, 11,111,147, 61,203,228, 42,
+ 63, 21, 48, 37, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61,251,213,147, 63, 22,209,228,
+ 61,203,228, 42, 63, 21, 48, 37, 61,227,224,109, 63, 11,111,147, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 61,227,224,109, 63, 11,111,147, 61,180,242,172, 63, 9,152, 96, 61,204,204,215, 63, 0, 0, 0, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61,203,228, 42, 63, 21, 48, 37, 61,251,213,147, 63, 22,209,228,
+ 61,228, 85,208, 63, 33, 23,179, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61,228, 85,208,
+ 63, 33, 23,179, 61,177,227,212, 63, 31, 60,110, 61,203,228, 42, 63, 21, 48, 37, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 61,156,122, 1, 63, 19, 29,254, 61,203,228, 42, 63, 21, 48, 37, 61,177,227,212, 63, 31, 60,110,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61,177,227,212, 63, 31, 60,110, 61,228, 85,208,
+ 63, 33, 23,179, 61,202, 36,175, 63, 43, 52,228, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 61,151, 80, 53, 63, 40,228,223, 61, 76,203,246, 63, 37,200, 48, 61,130,139,166, 63, 28,140,145, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61,130,139,166, 63, 28,140,145, 61,177,227,212, 63, 31, 60,110, 61,151, 80, 53,
+ 63, 40,228,223, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61,202, 36,175, 63, 43, 52,228,
+ 61,151, 80, 53, 63, 40,228,223, 61,177,227,212, 63, 31, 60,110, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 61,177,227,212, 63, 31, 60,110, 61,130,139,166, 63, 28,140,145, 61,156,122, 1, 63, 19, 29,254, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61,254, 61,201, 63, 44,160,207, 61,202, 36,175, 63, 43, 52,228,
+ 61,228, 85,208, 63, 33, 23,179, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61,228, 85,208,
+ 63, 33, 23,179, 62, 10,237,133, 63, 34, 17,219, 61,254, 61,201, 63, 44,160,207, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 62, 25,153,173, 63, 45, 28, 27, 61,254, 61,201, 63, 44,160,207, 62, 10,237,133, 63, 34, 17,219,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 10,237,133, 63, 34, 17,219, 61,228, 85,208,
+ 63, 33, 23,179, 61,251,213,147, 63, 22,209,228, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 62,205, 6,245, 63, 21, 48, 37, 62,193, 10,155, 63, 22,209,229, 62,199, 7,229, 63, 11,111,147, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,199, 7,229, 63, 11,111,147, 62,210,195, 85, 63, 9,152, 96, 62,205, 6,245,
+ 63, 21, 48, 37, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,216,225,128, 63, 19, 29,254,
+ 62,205, 6,245, 63, 21, 48, 37, 62,210,195, 85, 63, 9,152, 96, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 62,210,195, 85, 63, 9,152, 96, 62,199, 7,229, 63, 11,111,147, 62,204,204,202, 63, 0, 0, 0, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,205, 6,245, 63, 21, 48, 37, 62,216,225,128, 63, 19, 29,254,
+ 62,211,135, 11, 63, 31, 60,110, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,211,135, 11,
+ 63, 31, 60,110, 62,198,234,140, 63, 33, 23,179, 62,205, 6,245, 63, 21, 48, 37, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 62,193, 10,155, 63, 22,209,229, 62,205, 6,245, 63, 21, 48, 37, 62,198,234,140, 63, 33, 23,179,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,198,234,140, 63, 33, 23,179, 62,211,135, 11,
+ 63, 31, 60,110, 62,205,118,212, 63, 43, 52,228, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 62,192,112,142, 63, 44,160,207, 62,179, 51, 42, 63, 45, 28, 28, 62,186,137, 61, 63, 34, 17,219, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,186,137, 61, 63, 34, 17,219, 62,198,234,140, 63, 33, 23,179, 62,192,112,142,
+ 63, 44,160,207, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,205,118,212, 63, 43, 52,228,
+ 62,192,112,142, 63, 44,160,207, 62,198,234,140, 63, 33, 23,179, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 62,198,234,140, 63, 33, 23,179, 62,186,137, 61, 63, 34, 17,219, 62,193, 10,155, 63, 22,209,229, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,218, 43,243, 63, 40,228,223, 62,205,118,212, 63, 43, 52,228,
+ 62,211,135, 11, 63, 31, 60,110, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,211,135, 11,
+ 63, 31, 60,110, 62,223, 93, 22, 63, 28,140,145, 62,218, 43,243, 63, 40,228,223, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 62,230,102,129, 63, 37,200, 48, 62,218, 43,243, 63, 40,228,223, 62,223, 93, 22, 63, 28,140,145,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,223, 93, 22, 63, 28,140,145, 62,211,135, 11,
+ 63, 31, 60,110, 62,216,225,128, 63, 19, 29,254, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 62,179, 51, 38, 63, 23, 32,185, 62,193, 10,155, 63, 22,209,229, 62,186,137, 61, 63, 34, 17,219, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,186,137, 61, 63, 34, 17,219, 62,171,221, 20, 63, 34, 17,219, 62,179, 51, 38,
+ 63, 23, 32,185, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,165, 91,180, 63, 22,209,229,
+ 62,179, 51, 38, 63, 23, 32,185, 62,171,221, 20, 63, 34, 17,219, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 62,171,221, 20, 63, 34, 17,219, 62,186,137, 61, 63, 34, 17,219, 62,179, 51, 42, 63, 45, 28, 28, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,179, 51, 38, 63, 23, 32,185, 62,165, 91,180, 63, 22,209,229,
+ 62,172,108,111, 63, 11,116, 98, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,172,108,111,
+ 63, 11,116, 98, 62,185,249,222, 63, 11,116, 98, 62,179, 51, 38, 63, 23, 32,185, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 62,193, 10,155, 63, 22,209,229, 62,179, 51, 38, 63, 23, 32,185, 62,185,249,222, 63, 11,116, 98,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,185,249,222, 63, 11,116, 98, 62,172,108,111,
+ 63, 11,116, 98, 62,179, 51, 38, 63, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 62,191,255,252, 63, 0, 1,244, 62,204,204,202, 63, 0, 0, 0, 62,199, 7,229, 63, 11,111,147, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,199, 7,229, 63, 11,111,147, 62,185,249,222, 63, 11,116, 98, 62,191,255,252,
+ 63, 0, 1,244, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,179, 51, 38, 63, 0, 0, 0,
+ 62,191,255,252, 63, 0, 1,244, 62,185,249,222, 63, 11,116, 98, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 62,185,249,222, 63, 11,116, 98, 62,199, 7,229, 63, 11,111,147, 62,193, 10,155, 63, 22,209,229, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,166,102, 82, 63, 0, 1,244, 62,179, 51, 38, 63, 0, 0, 0,
+ 62,172,108,111, 63, 11,116, 98, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,172,108,111,
+ 63, 11,116, 98, 62,159, 94,104, 63, 11,111,147, 62,166,102, 82, 63, 0, 1,244, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 62,153,153,129, 63, 0, 0, 0, 62,166,102, 82, 63, 0, 1,244, 62,159, 94,104, 63, 11,111,147,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,159, 94,104, 63, 11,111,147, 62,172,108,111,
+ 63, 11,116, 98, 62,165, 91,180, 63, 22,209,229, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 62,179, 51, 30, 62,217, 58, 73, 62,165,174, 39, 62,217,196, 7, 62,172, 41,180, 62,198,230,227, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,172, 41,180, 62,198,230,227, 62,186, 60,127, 62,198,230,225, 62,179, 51, 30,
+ 62,217, 58, 73, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,192,184, 21, 62,217,196, 6,
+ 62,179, 51, 30, 62,217, 58, 73, 62,186, 60,127, 62,198,230,225, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 62,186, 60,127, 62,198,230,225, 62,172, 41,180, 62,198,230,227, 62,179, 51, 21, 62,180,111,165, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,179, 51, 30, 62,217, 58, 73, 62,192,184, 21, 62,217,196, 6,
+ 62,185,220, 42, 62,236,211, 31, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,185,220, 42,
+ 62,236,211, 31, 62,172,138, 27, 62,236,211, 33, 62,179, 51, 30, 62,217, 58, 73, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 62,165,174, 39, 62,217,196, 7, 62,179, 51, 30, 62,217, 58, 73, 62,172,138, 27, 62,236,211, 33,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,172,138, 27, 62,236,211, 33, 62,185,220, 42,
+ 62,236,211, 31, 62,179, 51, 38, 63, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 62,166,102, 82, 63, 0, 1,244, 62,153,153,129, 63, 0, 0, 0, 62,159,144, 3, 62,236,207, 67, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,159,144, 3, 62,236,207, 67, 62,172,138, 27, 62,236,211, 33, 62,166,102, 82,
+ 63, 0, 1,244, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,179, 51, 38, 63, 0, 0, 0,
+ 62,166,102, 82, 63, 0, 1,244, 62,172,138, 27, 62,236,211, 33, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 62,172,138, 27, 62,236,211, 33, 62,159,144, 3, 62,236,207, 67, 62,165,174, 39, 62,217,196, 7, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,191,255,252, 63, 0, 1,244, 62,179, 51, 38, 63, 0, 0, 0,
+ 62,185,220, 42, 62,236,211, 31, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,185,220, 42,
+ 62,236,211, 31, 62,198,214, 65, 62,236,207, 67, 62,191,255,252, 63, 0, 1,244, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 62,204,204,202, 63, 0, 0, 0, 62,191,255,252, 63, 0, 1,244, 62,198,214, 65, 62,236,207, 67,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,198,214, 65, 62,236,207, 67, 62,185,220, 42,
+ 62,236,211, 31, 62,192,184, 21, 62,217,196, 6, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 62,153, 95, 95, 63, 21, 48, 32, 62,141,132,224, 63, 19, 29,246, 62,147,163, 1, 63, 9,152, 91, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,147,163, 1, 63, 9,152, 91, 62,159, 94,104, 63, 11,111,147, 62,153, 95, 95,
+ 63, 21, 48, 32, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,165, 91,180, 63, 22,209,229,
+ 62,153, 95, 95, 63, 21, 48, 32, 62,159, 94,104, 63, 11,111,147, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 62,159, 94,104, 63, 11,111,147, 62,147,163, 1, 63, 9,152, 91, 62,153,153,129, 63, 0, 0, 0, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,153, 95, 95, 63, 21, 48, 32, 62,165, 91,180, 63, 22,209,229,
+ 62,159,123,203, 63, 33, 23,170, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,159,123,203,
+ 63, 33, 23,170, 62,146,223, 84, 63, 31, 60, 94, 62,153, 95, 95, 63, 21, 48, 32, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 62,141,132,224, 63, 19, 29,246, 62,153, 95, 95, 63, 21, 48, 32, 62,146,223, 84, 63, 31, 60, 94,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,146,223, 84, 63, 31, 60, 94, 62,159,123,203,
+ 63, 33, 23,170, 62,152,239,141, 63, 43, 52,211, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 62,140, 58,121, 63, 40,228,199, 62,128, 0, 0, 63, 37,200, 23, 62,135, 9, 86, 63, 28,140,130, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,135, 9, 86, 63, 28,140,130, 62,146,223, 84, 63, 31, 60, 94, 62,140, 58,121,
+ 63, 40,228,199, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,152,239,141, 63, 43, 52,211,
+ 62,140, 58,121, 63, 40,228,199, 62,146,223, 84, 63, 31, 60, 94, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 62,146,223, 84, 63, 31, 60, 94, 62,135, 9, 86, 63, 28,140,130, 62,141,132,224, 63, 19, 29,246, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,165,245,204, 63, 44,160,198, 62,152,239,141, 63, 43, 52,211,
+ 62,159,123,203, 63, 33, 23,170, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,159,123,203,
+ 63, 33, 23,170, 62,171,221, 20, 63, 34, 17,219, 62,165,245,204, 63, 44,160,198, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 62,179, 51, 42, 63, 45, 28, 28, 62,165,245,204, 63, 44,160,198, 62,171,221, 20, 63, 34, 17,219,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,171,221, 20, 63, 34, 17,219, 62,159,123,203,
+ 63, 33, 23,170, 62,165, 91,180, 63, 22,209,229, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 63, 25,182,180, 63, 21, 48, 38, 63, 19,184,140, 63, 22,209,232, 63, 22,183, 43, 63, 11,111,149, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 22,183, 43, 63, 11,111,149, 63, 28,148,223, 63, 9,152, 94, 63, 25,182,180,
+ 63, 21, 48, 38, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 31,163,245, 63, 19, 29,253,
+ 63, 25,182,180, 63, 21, 48, 38, 63, 28,148,223, 63, 9,152, 94, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 63, 28,148,223, 63, 9,152, 94, 63, 22,183, 43, 63, 11,111,149, 63, 25,153,155, 63, 0, 0, 0, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 25,182,180, 63, 21, 48, 38, 63, 31,163,245, 63, 19, 29,253,
+ 63, 28,246,191, 63, 31, 60,109, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 28,246,191,
+ 63, 31, 60,109, 63, 22,168,132, 63, 33, 23,180, 63, 25,182,180, 63, 21, 48, 38, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 63, 19,184,140, 63, 22,209,232, 63, 25,182,180, 63, 21, 48, 38, 63, 22,168,132, 63, 33, 23,180,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 22,168,132, 63, 33, 23,180, 63, 28,246,191,
+ 63, 31, 60,109, 63, 25,238,169, 63, 43, 52,229, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 63, 19,107,138, 63, 44,160,211, 63, 12,204,220, 63, 45, 28, 35, 63, 16,119,225, 63, 34, 17,225, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 16,119,225, 63, 34, 17,225, 63, 22,168,132, 63, 33, 23,180, 63, 19,107,138,
+ 63, 44,160,211, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 25,238,169, 63, 43, 52,229,
+ 63, 19,107,138, 63, 44,160,211, 63, 22,168,132, 63, 33, 23,180, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 63, 22,168,132, 63, 33, 23,180, 63, 16,119,225, 63, 34, 17,225, 63, 19,184,140, 63, 22,209,232, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 32, 73, 51, 63, 40,228,221, 63, 25,238,169, 63, 43, 52,229,
+ 63, 28,246,191, 63, 31, 60,109, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 28,246,191,
+ 63, 31, 60,109, 63, 34,225,192, 63, 28,140,142, 63, 32, 73, 51, 63, 40,228,221, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 63, 38,102,117, 63, 37,200, 45, 63, 32, 73, 51, 63, 40,228,221, 63, 34,225,192, 63, 28,140,142,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 34,225,192, 63, 28,140,142, 63, 28,246,191,
+ 63, 31, 60,109, 63, 31,163,245, 63, 19, 29,253, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 63, 12,204,212, 63, 23, 32,188, 63, 19,184,140, 63, 22,209,232, 63, 16,119,225, 63, 34, 17,225, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 16,119,225, 63, 34, 17,225, 63, 9, 33,207, 63, 34, 17,226, 63, 12,204,212,
+ 63, 23, 32,188, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 5,225, 29, 63, 22,209,233,
+ 63, 12,204,212, 63, 23, 32,188, 63, 9, 33,207, 63, 34, 17,226, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 63, 9, 33,207, 63, 34, 17,226, 63, 16,119,225, 63, 34, 17,225, 63, 12,204,220, 63, 45, 28, 35, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 12,204,212, 63, 23, 32,188, 63, 5,225, 29, 63, 22,209,233,
+ 63, 9,105,118, 63, 11,116,101, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 9,105,118,
+ 63, 11,116,101, 63, 16, 48, 43, 63, 11,116,100, 63, 12,204,212, 63, 23, 32,188, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 63, 19,184,140, 63, 22,209,232, 63, 12,204,212, 63, 23, 32,188, 63, 16, 48, 43, 63, 11,116,100,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 16, 48, 43, 63, 11,116,100, 63, 9,105,118,
+ 63, 11,116,101, 63, 12,204,205, 63, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 63, 19, 51, 51, 63, 0, 1,244, 63, 25,153,155, 63, 0, 0, 0, 63, 22,183, 43, 63, 11,111,149, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 22,183, 43, 63, 11,111,149, 63, 16, 48, 43, 63, 11,116,100, 63, 19, 51, 51,
+ 63, 0, 1,244, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 12,204,205, 63, 0, 0, 0,
+ 63, 19, 51, 51, 63, 0, 1,244, 63, 16, 48, 43, 63, 11,116,100, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 63, 16, 48, 43, 63, 11,116,100, 63, 22,183, 43, 63, 11,111,149, 63, 19,184,140, 63, 22,209,232, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 6,102,102, 63, 0, 1,244, 63, 12,204,205, 63, 0, 0, 0,
+ 63, 9,105,118, 63, 11,116,101, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 9,105,118,
+ 63, 11,116,101, 63, 2,226,118, 63, 11,111,149, 63, 6,102,102, 63, 0, 1,244, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 6,102,102, 63, 0, 1,244, 63, 2,226,118, 63, 11,111,149,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 2,226,118, 63, 11,111,149, 63, 9,105,118,
+ 63, 11,116,101, 63, 5,225, 29, 63, 22,209,233, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 63, 12,204,198, 62,217, 58, 72, 63, 6, 10, 77, 62,217,196, 6, 63, 9, 72, 17, 62,198,230,227, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 9, 72, 17, 62,198,230,227, 63, 16, 81,117, 62,198,230,223, 63, 12,204,198,
+ 62,217, 58, 72, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 19,143, 64, 62,217,196, 4,
+ 63, 12,204,198, 62,217, 58, 72, 63, 16, 81,117, 62,198,230,223, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 63, 16, 81,117, 62,198,230,223, 63, 9, 72, 17, 62,198,230,227, 63, 12,204,191, 62,180,111,160, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 12,204,198, 62,217, 58, 72, 63, 19,143, 64, 62,217,196, 4,
+ 63, 16, 33, 76, 62,236,211, 30, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 16, 33, 76,
+ 62,236,211, 30, 63, 9,120, 71, 62,236,211, 30, 63, 12,204,198, 62,217, 58, 72, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 63, 6, 10, 77, 62,217,196, 6, 63, 12,204,198, 62,217, 58, 72, 63, 9,120, 71, 62,236,211, 30,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 9,120, 71, 62,236,211, 30, 63, 16, 33, 76,
+ 62,236,211, 30, 63, 12,204,205, 63, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 63, 6,102,102, 63, 0, 1,244, 63, 0, 0, 0, 63, 0, 0, 0, 63, 2,251, 62, 62,236,207, 67, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 2,251, 62, 62,236,207, 67, 63, 9,120, 71, 62,236,211, 30, 63, 6,102,102,
+ 63, 0, 1,244, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 12,204,205, 63, 0, 0, 0,
+ 63, 6,102,102, 63, 0, 1,244, 63, 9,120, 71, 62,236,211, 30, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 63, 9,120, 71, 62,236,211, 30, 63, 2,251, 62, 62,236,207, 67, 63, 6, 10, 77, 62,217,196, 6, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 19, 51, 51, 63, 0, 1,244, 63, 12,204,205, 63, 0, 0, 0,
+ 63, 16, 33, 76, 62,236,211, 30, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 16, 33, 76,
+ 62,236,211, 30, 63, 22,158, 86, 62,236,207, 65, 63, 19, 51, 51, 63, 0, 1,244, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 63, 25,153,155, 63, 0, 0, 0, 63, 19, 51, 51, 63, 0, 1,244, 63, 22,158, 86, 62,236,207, 65,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 22,158, 86, 62,236,207, 65, 63, 16, 33, 76,
+ 62,236,211, 30, 63, 19,143, 64, 62,217,196, 4, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 62,255,197,233, 63, 21, 48, 39, 62,243,235,101, 63, 19, 29,252, 62,250, 9,132, 63, 9,152, 94, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,250, 9,132, 63, 9,152, 94, 63, 2,226,118, 63, 11,111,149, 62,255,197,233,
+ 63, 21, 48, 39, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 5,225, 29, 63, 22,209,233,
+ 62,255,197,233, 63, 21, 48, 39, 63, 2,226,118, 63, 11,111,149, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 63, 2,226,118, 63, 11,111,149, 62,250, 9,132, 63, 9,152, 94, 63, 0, 0, 0, 63, 0, 0, 0, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,255,197,233, 63, 21, 48, 39, 63, 5,225, 29, 63, 22,209,233,
+ 63, 2,241, 43, 63, 33, 23,181, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 2,241, 43,
+ 63, 33, 23,181, 62,249, 69,225, 63, 31, 60,110, 62,255,197,233, 63, 21, 48, 39, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 62,243,235,101, 63, 19, 29,252, 62,255,197,233, 63, 21, 48, 39, 62,249, 69,225, 63, 31, 60,110,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,249, 69,225, 63, 31, 60,110, 63, 2,241, 43,
+ 63, 33, 23,181, 62,255, 86, 30, 63, 43, 52,230, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 62,242,161, 9, 63, 40,228,223, 62,230,102,129, 63, 37,200, 48, 62,237,111,222, 63, 28,140,143, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,237,111,222, 63, 28,140,143, 62,249, 69,225, 63, 31, 60,110, 62,242,161, 9,
+ 63, 40,228,223, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,255, 86, 30, 63, 43, 52,230,
+ 62,242,161, 9, 63, 40,228,223, 62,249, 69,225, 63, 31, 60,110, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 62,249, 69,225, 63, 31, 60,110, 62,237,111,222, 63, 28,140,143, 62,243,235,101, 63, 19, 29,252, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 6, 46, 46, 63, 44,160,211, 62,255, 86, 30, 63, 43, 52,230,
+ 63, 2,241, 43, 63, 33, 23,181, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 2,241, 43,
+ 63, 33, 23,181, 63, 9, 33,207, 63, 34, 17,226, 63, 6, 46, 46, 63, 44,160,211, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 63, 12,204,220, 63, 45, 28, 35, 63, 6, 46, 46, 63, 44,160,211, 63, 9, 33,207, 63, 34, 17,226,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 9, 33,207, 63, 34, 17,226, 63, 2,241, 43,
+ 63, 33, 23,181, 63, 5,225, 29, 63, 22,209,233, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 63, 85,238,138, 62,187,220, 72, 63, 82,173,218, 62,210, 92, 55, 63, 79,189,229, 62,189,208,173, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 79,189,229, 62,189,208,173, 63, 82,250,230, 62,166,190,117, 63, 85,238,138,
+ 62,187,220, 72, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 89,153,149, 62,165,199,201,
+ 63, 85,238,138, 62,187,220, 72, 63, 82,250,230, 62,166,190,117, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 63, 82,250,230, 62,166,190,117, 63, 79,189,229, 62,189,208,173, 63, 76,119,198, 62,169,150, 90, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 73,111,170, 62,193,135, 68, 63, 76,119,198, 62,169,150, 90,
+ 63, 79,189,229, 62,189,208,173, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 79,189,229,
+ 62,189,208,173, 63, 76,175,176, 62,213,159,192, 63, 73,111,170, 62,193,135, 68, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 63, 70,194,112, 62,217,196, 19, 63, 73,111,170, 62,193,135, 68, 63, 76,175,176, 62,213,159,192,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 76,175,176, 62,213,159,192, 63, 79,189,229,
+ 62,189,208,173, 63, 82,173,218, 62,210, 92, 55, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 63, 79,175, 52, 62,233, 32,218, 63, 76,204,193, 63, 0, 0, 0, 63, 73,209,128, 62,236,207, 75, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 73,209,128, 62,236,207, 75, 63, 76,175,176, 62,213,159,192, 63, 79,175, 52,
+ 62,233, 32,218, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 82,173,218, 62,210, 92, 55,
+ 63, 79,175, 52, 62,233, 32,218, 63, 76,175,176, 62,213,159,192, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 63, 76,175,176, 62,213,159,192, 63, 73,209,128, 62,236,207, 75, 63, 70,194,112, 62,217,196, 19, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 73,111,170, 62,193,135, 68, 63, 70,194,112, 62,217,196, 19,
+ 63, 67,132,171, 62,198,230,253, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 67,132,171,
+ 62,198,230,253, 63, 70, 29, 61, 62,174, 54,114, 63, 73,111,170, 62,193,135, 68, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 63, 76,119,198, 62,169,150, 90, 63, 73,111,170, 62,193,135, 68, 63, 70, 29, 61, 62,174, 54,114,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 70, 29, 61, 62,174, 54,114, 63, 67,132,171,
+ 62,198,230,253, 63, 64, 0, 0, 62,180,111,211, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 63, 79,175, 52, 62,233, 32,218, 63, 82,173,218, 62,210, 92, 55, 63, 86, 54, 56, 62,233, 23, 58, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 86, 54, 56, 62,233, 23, 58, 63, 83, 51, 41, 62,255,252, 24, 63, 79,175, 52,
+ 62,233, 32,218, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 76,204,193, 63, 0, 0, 0,
+ 63, 79,175, 52, 62,233, 32,218, 63, 83, 51, 41, 62,255,252, 24, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 63, 83, 51, 41, 62,255,252, 24, 63, 86, 54, 56, 62,233, 23, 58, 63, 89,153,147, 63, 0, 0, 0, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 92,252,239, 62,233, 23, 58, 63, 89,153,147, 63, 0, 0, 0,
+ 63, 86, 54, 56, 62,233, 23, 58, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 86, 54, 56,
+ 62,233, 23, 58, 63, 89,153,147, 62,209,190,143, 63, 92,252,239, 62,233, 23, 58, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 63, 96,133, 78, 62,210, 92, 55, 63, 92,252,239, 62,233, 23, 58, 63, 89,153,147, 62,209,190,143,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 89,153,147, 62,209,190,143, 63, 86, 54, 56,
+ 62,233, 23, 58, 63, 82,173,218, 62,210, 92, 55, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 63, 85,238,138, 62,187,220, 72, 63, 89,153,149, 62,165,199,201, 63, 93, 68,159, 62,187,220, 72, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 93, 68,159, 62,187,220, 72, 63, 89,153,147, 62,209,190,143, 63, 85,238,138,
+ 62,187,220, 72, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 82,173,218, 62,210, 92, 55,
+ 63, 85,238,138, 62,187,220, 72, 63, 89,153,147, 62,209,190,143, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 63, 89,153,147, 62,209,190,143, 63, 93, 68,159, 62,187,220, 72, 63, 96,133, 78, 62,210, 92, 55, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 92,252,239, 62,233, 23, 58, 63, 96,133, 78, 62,210, 92, 55,
+ 63, 99,131,242, 62,233, 32,218, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 99,131,242,
+ 62,233, 32,218, 63, 95,255,254, 62,255,252, 24, 63, 92,252,239, 62,233, 23, 58, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 63, 89,153,147, 63, 0, 0, 0, 63, 92,252,239, 62,233, 23, 58, 63, 95,255,254, 62,255,252, 24,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 95,255,254, 62,255,252, 24, 63, 99,131,242,
+ 62,233, 32,218, 63,102,102,101, 63, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 63,111,174,139, 62,198,230,223, 63,108,112,192, 62,217,196, 4, 63,105,195,133, 62,193,135, 37, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,105,195,133, 62,193,135, 37, 63,109, 21,249, 62,174, 54, 65, 63,111,174,139,
+ 62,198,230,223, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,115, 51, 65, 62,180,111,160,
+ 63,111,174,139, 62,198,230,223, 63,109, 21,249, 62,174, 54, 65, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 63,109, 21,249, 62,174, 54, 65, 63,105,195,133, 62,193,135, 37, 63,102,187,106, 62,169,150, 54, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 99,117, 70, 62,189,208,155, 63,102,187,106, 62,169,150, 54,
+ 63,105,195,133, 62,193,135, 37, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,105,195,133,
+ 62,193,135, 37, 63,102,131,123, 62,213,159,181, 63, 99,117, 70, 62,189,208,155, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 63, 96,133, 78, 62,210, 92, 55, 63, 99,117, 70, 62,189,208,155, 63,102,131,123, 62,213,159,181,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,102,131,123, 62,213,159,181, 63,105,195,133,
+ 62,193,135, 37, 63,108,112,192, 62,217,196, 4, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 63,105, 97,170, 62,236,207, 65, 63,102,102,101, 63, 0, 0, 0, 63, 99,131,242, 62,233, 32,218, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 99,131,242, 62,233, 32,218, 63,102,131,123, 62,213,159,181, 63,105, 97,170,
+ 62,236,207, 65, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,108,112,192, 62,217,196, 4,
+ 63,105, 97,170, 62,236,207, 65, 63,102,131,123, 62,213,159,181, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 63,102,131,123, 62,213,159,181, 63, 99,131,242, 62,233, 32,218, 63, 96,133, 78, 62,210, 92, 55, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 99,117, 70, 62,189,208,155, 63, 96,133, 78, 62,210, 92, 55,
+ 63, 93, 68,159, 62,187,220, 72, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 93, 68,159,
+ 62,187,220, 72, 63, 96, 56, 71, 62,166,190, 99, 63, 99,117, 70, 62,189,208,155, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 63,102,187,106, 62,169,150, 54, 63, 99,117, 70, 62,189,208,155, 63, 96, 56, 71, 62,166,190, 99,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 96, 56, 71, 62,166,190, 99, 63, 93, 68,159,
+ 62,187,220, 72, 63, 89,153,149, 62,165,199,201, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 63, 99,107, 33, 63, 9,152, 94, 63, 96, 92, 11, 63, 19, 29,253, 63, 92,238, 21, 63, 9,150,112, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 92,238, 21, 63, 9,150,112, 63, 95,255,254, 62,255,252, 24, 63, 99,107, 33,
+ 63, 9,152, 94, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,102,102,101, 63, 0, 0, 0,
+ 63, 99,107, 33, 63, 9,152, 94, 63, 95,255,254, 62,255,252, 24, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 63, 95,255,254, 62,255,252, 24, 63, 92,238, 21, 63, 9,150,112, 63, 89,153,147, 63, 0, 0, 0, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 86, 69, 14, 63, 9,150,112, 63, 89,153,147, 63, 0, 0, 0,
+ 63, 92,238, 21, 63, 9,150,112, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 92,238, 21,
+ 63, 9,150,112, 63, 89,153,143, 63, 19, 98,219, 63, 86, 69, 14, 63, 9,150,112, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 63, 82,215, 19, 63, 19, 29,252, 63, 86, 69, 14, 63, 9,150,112, 63, 89,153,143, 63, 19, 98,219,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 89,153,143, 63, 19, 98,219, 63, 92,238, 21,
+ 63, 9,150,112, 63, 96, 92, 11, 63, 19, 29,253, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 63, 93, 30, 63, 63, 28,140,143, 63, 89,153,139, 63, 37,200, 45, 63, 86, 20,218, 63, 28,140,143, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 86, 20,218, 63, 28,140,143, 63, 89,153,143, 63, 19, 98,219, 63, 93, 30, 63,
+ 63, 28,140,143, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 96, 92, 11, 63, 19, 29,253,
+ 63, 93, 30, 63, 63, 28,140,143, 63, 89,153,143, 63, 19, 98,219, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 63, 89,153,143, 63, 19, 98,219, 63, 86, 20,218, 63, 28,140,143, 63, 82,215, 19, 63, 19, 29,252, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 86, 69, 14, 63, 9,150,112, 63, 82,215, 19, 63, 19, 29,252,
+ 63, 79,200, 1, 63, 9,152, 94, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 79,200, 1,
+ 63, 9,152, 94, 63, 83, 51, 41, 62,255,252, 24, 63, 86, 69, 14, 63, 9,150,112, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 63, 89,153,147, 63, 0, 0, 0, 63, 86, 69, 14, 63, 9,150,112, 63, 83, 51, 41, 62,255,252, 24,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 83, 51, 41, 62,255,252, 24, 63, 79,200, 1,
+ 63, 9,152, 94, 63, 76,204,193, 63, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 61, 18, 28,237, 62,187,220, 60, 60,188, 35,151, 62,210, 92, 46, 60, 60, 74,218, 62,189,208,150, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 60, 60, 74,218, 62,189,208,150, 60,197,197,195, 62,166,190, 89, 61, 18, 28,237,
+ 62,187,220, 60, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61, 76,205,194, 62,165,199,186,
+ 61, 18, 28,237, 62,187,220, 60, 60,197,197,195, 62,166,190, 89, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 63,131, 23, 23, 62,166,190, 89, 63,129,120,150, 62,189,208,150, 63,127,171, 15, 62,169,150, 52, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,124,162,241, 62,193,135, 36, 63,127,171, 15, 62,169,150, 52,
+ 63,129,120,150, 62,189,208,150, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,129,120,150,
+ 62,189,208,150, 63,127,226,244, 62,213,159,179, 63,124,162,241, 62,193,135, 36, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 63,121,245,179, 62,217,196, 6, 63,124,162,241, 62,193,135, 36, 63,127,226,244, 62,213,159,179,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,127,226,244, 62,213,159,179, 63,129,120,150,
+ 62,189,208,150, 63,130,240,142, 62,210, 92, 46, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 63,129,113, 59, 62,233, 32,214, 63,128, 0, 0, 63, 0, 0, 0, 63,125, 4,194, 62,236,207, 67, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,125, 4,194, 62,236,207, 67, 63,127,226,244, 62,213,159,179, 63,129,113, 59,
+ 62,233, 32,214, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,130,240,142, 62,210, 92, 46,
+ 63,129,113, 59, 62,233, 32,214, 63,127,226,244, 62,213,159,179, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 63,127,226,244, 62,213,159,179, 63,125, 4,194, 62,236,207, 67, 63,121,245,179, 62,217,196, 6, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,124,162,241, 62,193,135, 36, 63,121,245,179, 62,217,196, 6,
+ 63,118,183,239, 62,198,230,227, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,118,183,239,
+ 62,198,230,227, 63,121, 80,133, 62,174, 54, 65, 63,124,162,241, 62,193,135, 36, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 63,127,171, 15, 62,169,150, 52, 63,124,162,241, 62,193,135, 36, 63,121, 80,133, 62,174, 54, 65,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,121, 80,133, 62,174, 54, 65, 63,118,183,239,
+ 62,198,230,227, 63,115, 51, 65, 62,180,111,160, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 60, 56,157,110, 62,233, 32,214, 60,188, 35,151, 62,210, 92, 46, 61, 22,151, 95, 62,233, 23, 55, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61, 22,151, 95, 62,233, 23, 55, 60,204,204,176, 62,255,252, 24, 60, 56,157,110,
+ 62,233, 32,214, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 38, 11, 79,167, 63, 0, 0, 0,
+ 60, 56,157,110, 62,233, 32,214, 60,204,204,176, 62,255,252, 24, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 60,204,204,176, 62,255,252, 24, 61, 22,151, 95, 62,233, 23, 55, 61, 76,204,215, 63, 0, 0, 0, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61,129,129, 87, 62,233, 23, 57, 61, 76,204,215, 63, 0, 0, 0,
+ 61, 22,151, 95, 62,233, 23, 55, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61, 22,151, 95,
+ 62,233, 23, 55, 61, 76,205, 68, 62,209,190,135, 61,129,129, 87, 62,233, 23, 57, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 61,157,196, 92, 62,210, 92, 49, 61,129,129, 87, 62,233, 23, 57, 61, 76,205, 68, 62,209,190,135,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61, 76,205, 68, 62,209,190,135, 61, 22,151, 95,
+ 62,233, 23, 55, 60,188, 35,151, 62,210, 92, 46, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 61, 18, 28,237, 62,187,220, 60, 61, 76,205,194, 62,165,199,186, 61,131,191, 7, 62,187,220, 62, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61,131,191, 7, 62,187,220, 62, 61, 76,205, 68, 62,209,190,135, 61, 18, 28,237,
+ 62,187,220, 60, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 60,188, 35,151, 62,210, 92, 46,
+ 61, 18, 28,237, 62,187,220, 60, 61, 76,205, 68, 62,209,190,135, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 61, 76,205, 68, 62,209,190,135, 61,131,191, 7, 62,187,220, 62, 61,157,196, 92, 62,210, 92, 49, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61,129,129, 87, 62,233, 23, 57, 61,157,196, 92, 62,210, 92, 49,
+ 61,181,185, 89, 62,233, 32,214, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61,181,185, 89,
+ 62,233, 32,214, 61,153,153,154, 62,255,252, 25, 61,129,129, 87, 62,233, 23, 57, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 61, 76,204,215, 63, 0, 0, 0, 61,129,129, 87, 62,233, 23, 57, 61,153,153,154, 62,255,252, 25,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61,153,153,154, 62,255,252, 25, 61,181,185, 89,
+ 62,233, 32,214, 61,204,204,215, 63, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 62, 11,135, 1, 62,198,230,228, 61,253, 31,171, 62,217,196, 6, 61,231,181,251, 62,193,135, 38, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61,231,181,251, 62,193,135, 38, 62, 1, 36,204, 62,174, 54, 70, 62, 11,135, 1,
+ 62,198,230,228, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 25,153,214, 62,180,111,165,
+ 62, 11,135, 1, 62,198,230,228, 62, 1, 36,204, 62,174, 54, 70, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 62, 1, 36,204, 62,174, 54, 70, 61,231,181,251, 62,193,135, 38, 61,207,117, 70, 62,169,150, 54, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61,181, 68, 35, 62,189,208,153, 61,207,117, 70, 62,169,150, 54,
+ 61,231,181,251, 62,193,135, 38, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61,231,181,251,
+ 62,193,135, 38, 61,205,181,164, 62,213,159,180, 61,181, 68, 35, 62,189,208,153, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 61,157,196, 92, 62,210, 92, 49, 61,181, 68, 35, 62,189,208,153, 61,205,181,164, 62,213,159,180,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61,205,181,164, 62,213,159,180, 61,231,181,251,
+ 62,193,135, 38, 61,253, 31,171, 62,217,196, 6, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 61,228,166,251, 62,236,207, 67, 61,204,204,215, 63, 0, 0, 0, 61,181,185, 89, 62,233, 32,214, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61,181,185, 89, 62,233, 32,214, 61,205,181,164, 62,213,159,180, 61,228,166,251,
+ 62,236,207, 67, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61,253, 31,171, 62,217,196, 6,
+ 61,228,166,251, 62,236,207, 67, 61,205,181,164, 62,213,159,180, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 61,205,181,164, 62,213,159,180, 61,181,185, 89, 62,233, 32,214, 61,157,196, 92, 62,210, 92, 49, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61,181, 68, 35, 62,189,208,153, 61,157,196, 92, 62,210, 92, 49,
+ 61,131,191, 7, 62,187,220, 62, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61,131,191, 7,
+ 62,187,220, 62, 61,155, 92, 79, 62,166,190, 91, 61,181, 68, 35, 62,189,208,153, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 61,207,117, 70, 62,169,150, 54, 61,181, 68, 35, 62,189,208,153, 61,155, 92, 79, 62,166,190, 91,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61,155, 92, 79, 62,166,190, 91, 61,131,191, 7,
+ 62,187,220, 62, 61, 76,205,194, 62,165,199,186, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 61,180,242,172, 63, 9,152, 96, 61,156,122, 1, 63, 19, 29,254, 61,129, 10,100, 63, 9,150,113, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61,129, 10,100, 63, 9,150,113, 61,153,153,154, 62,255,252, 25, 61,180,242,172,
+ 63, 9,152, 96, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61,204,204,215, 63, 0, 0, 0,
+ 61,180,242,172, 63, 9,152, 96, 61,153,153,154, 62,255,252, 25, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 61,153,153,154, 62,255,252, 25, 61,129, 10,100, 63, 9,150,113, 61, 76,204,215, 63, 0, 0, 0, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61, 23,132,109, 63, 9,150,113, 61, 76,204,215, 63, 0, 0, 0,
+ 61,129, 10,100, 63, 9,150,113, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61,129, 10,100,
+ 63, 9,150,113, 61, 76,204, 91, 63, 19, 98,220, 61, 23,132,109, 63, 9,150,113, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 60,193, 73,174, 63, 19, 29,253, 61, 23,132,109, 63, 9,150,113, 61, 76,204, 91, 63, 19, 98,220,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61, 76,204, 91, 63, 19, 98,220, 61,129, 10,100,
+ 63, 9,150,113, 61,156,122, 1, 63, 19, 29,254, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 61,130,139,166, 63, 28,140,145, 61, 76,203,246, 63, 37,200, 48, 61, 20,129, 13, 63, 28,140,143, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61, 20,129, 13, 63, 28,140,143, 61, 76,204, 91, 63, 19, 98,220, 61,130,139,166,
+ 63, 28,140,145, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61,156,122, 1, 63, 19, 29,254,
+ 61,130,139,166, 63, 28,140,145, 61, 76,204, 91, 63, 19, 98,220, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 61, 76,204, 91, 63, 19, 98,220, 61, 20,129, 13, 63, 28,140,143, 60,193, 73,174, 63, 19, 29,253, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61, 23,132,109, 63, 9,150,113, 60,193, 73,174, 63, 19, 29,253,
+ 60, 62,207,114, 63, 9,152, 94, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 60, 62,207,114,
+ 63, 9,152, 94, 60,204,204,176, 62,255,252, 24, 61, 23,132,109, 63, 9,150,113, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 61, 76,204,215, 63, 0, 0, 0, 61, 23,132,109, 63, 9,150,113, 60,204,204,176, 62,255,252, 24,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 60,204,204,176, 62,255,252, 24, 60, 62,207,114,
+ 63, 9,152, 94, 38, 11, 79,167, 63, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 62,113, 83,237, 62,187,220, 79, 62,100, 81, 63, 62,210, 92, 60, 62, 88,145,110, 62,189,208,167, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 88,145,110, 62,189,208,167, 62,101,133, 91, 62,166,190,112, 62,113, 83,237,
+ 62,187,220, 79, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,128, 0, 0, 62,165,199,206,
+ 62,113, 83,237, 62,187,220, 79, 62,101,133, 91, 62,166,190,112, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 62,101,133, 91, 62,166,190,112, 62, 88,145,110, 62,189,208,167, 62, 75,120,239, 62,169,150, 70, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 63, 88,144, 62,193,135, 46, 62, 75,120,239, 62,169,150, 70,
+ 62, 88,145,110, 62,189,208,167, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 88,145,110,
+ 62,189,208,167, 62, 76, 88,170, 62,213,159,187, 62, 63, 88,144, 62,193,135, 46, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 62, 52,163,179, 62,217,196, 7, 62, 63, 88,144, 62,193,135, 46, 62, 76, 88,170, 62,213,159,187,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 76, 88,170, 62,213,159,187, 62, 88,145,110,
+ 62,189,208,167, 62,100, 81, 63, 62,210, 92, 60, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 62, 88, 86,190, 62,233, 32,221, 62, 76,204,254, 63, 0, 0, 0, 62, 64,223,251, 62,236,207, 67, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 64,223,251, 62,236,207, 67, 62, 76, 88,170, 62,213,159,187, 62, 88, 86,190,
+ 62,233, 32,221, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,100, 81, 63, 62,210, 92, 60,
+ 62, 88, 86,190, 62,233, 32,221, 62, 76, 88,170, 62,213,159,187, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 62, 76, 88,170, 62,213,159,187, 62, 64,223,251, 62,236,207, 67, 62, 52,163,179, 62,217,196, 7, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 63, 88,144, 62,193,135, 46, 62, 52,163,179, 62,217,196, 7,
+ 62, 39,172,153, 62,198,230,230, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 39,172,153,
+ 62,198,230,230, 62, 50, 14,213, 62,174, 54, 78, 62, 63, 88,144, 62,193,135, 46, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 62, 75,120,239, 62,169,150, 70, 62, 63, 88,144, 62,193,135, 46, 62, 50, 14,213, 62,174, 54, 78,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 50, 14,213, 62,174, 54, 78, 62, 39,172,153,
+ 62,198,230,230, 62, 25,153,214, 62,180,111,165, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 62, 88, 86,190, 62,233, 32,221, 62,100, 81, 63, 62,210, 92, 60, 62,114,114,166, 62,233, 23, 63, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,114,114,166, 62,233, 23, 63, 62,102,102,126, 62,255,252, 25, 62, 88, 86,190,
+ 62,233, 32,221, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 76,204,254, 63, 0, 0, 0,
+ 62, 88, 86,190, 62,233, 32,221, 62,102,102,126, 62,255,252, 25, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 62,102,102,126, 62,255,252, 25, 62,114,114,166, 62,233, 23, 63, 62,128, 0, 0, 63, 0, 0, 0, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,134,198,173, 62,233, 23, 63, 62,128, 0, 0, 63, 0, 0, 0,
+ 62,114,114,166, 62,233, 23, 63, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,114,114,166,
+ 62,233, 23, 63, 62,128, 0, 0, 62,209,190,149, 62,134,198,173, 62,233, 23, 63, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 62,141,215, 97, 62,210, 92, 60, 62,134,198,173, 62,233, 23, 63, 62,128, 0, 0, 62,209,190,149,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,128, 0, 0, 62,209,190,149, 62,114,114,166,
+ 62,233, 23, 63, 62,100, 81, 63, 62,210, 92, 60, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 62,113, 83,237, 62,187,220, 79, 62,128, 0, 0, 62,165,199,206, 62,135, 86, 9, 62,187,220, 79, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,135, 86, 9, 62,187,220, 79, 62,128, 0, 0, 62,209,190,149, 62,113, 83,237,
+ 62,187,220, 79, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,100, 81, 63, 62,210, 92, 60,
+ 62,113, 83,237, 62,187,220, 79, 62,128, 0, 0, 62,209,190,149, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 62,128, 0, 0, 62,209,190,149, 62,135, 86, 9, 62,187,220, 79, 62,141,215, 97, 62,210, 92, 60, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,134,198,173, 62,233, 23, 63, 62,141,215, 97, 62,210, 92, 60,
+ 62,147,212,161, 62,233, 32,221, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,147,212,161,
+ 62,233, 32,221, 62,140,204,193, 62,255,252, 25, 62,134,198,173, 62,233, 23, 63, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 62,128, 0, 0, 63, 0, 0, 0, 62,134,198,173, 62,233, 23, 63, 62,140,204,193, 62,255,252, 25,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,140,204,193, 62,255,252, 25, 62,147,212,161,
+ 62,233, 32,221, 62,153,153,129, 63, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 62,172, 41,180, 62,198,230,227, 62,165,174, 39, 62,217,196, 7, 62,160, 83,184, 62,193,135, 46, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,160, 83,184, 62,193,135, 46, 62,166,248,150, 62,174, 54, 78, 62,172, 41,180,
+ 62,198,230,227, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,179, 51, 21, 62,180,111,165,
+ 62,172, 41,180, 62,198,230,227, 62,166,248,150, 62,174, 54, 78, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 62,166,248,150, 62,174, 54, 78, 62,160, 83,184, 62,193,135, 46, 62,154, 67,137, 62,169,150, 70, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,147,183, 73, 62,189,208,167, 62,154, 67,137, 62,169,150, 70,
+ 62,160, 83,184, 62,193,135, 46, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,160, 83,184,
+ 62,193,135, 46, 62,153,211,171, 62,213,159,187, 62,147,183, 73, 62,189,208,167, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 62,141,215, 97, 62,210, 92, 60, 62,147,183, 73, 62,189,208,167, 62,153,211,171, 62,213,159,187,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,153,211,171, 62,213,159,187, 62,160, 83,184,
+ 62,193,135, 46, 62,165,174, 39, 62,217,196, 7, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 62,159,144, 3, 62,236,207, 67, 62,153,153,129, 63, 0, 0, 0, 62,147,212,161, 62,233, 32,221, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,147,212,161, 62,233, 32,221, 62,153,211,171, 62,213,159,187, 62,159,144, 3,
+ 62,236,207, 67, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,165,174, 39, 62,217,196, 7,
+ 62,159,144, 3, 62,236,207, 67, 62,153,211,171, 62,213,159,187, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 62,153,211,171, 62,213,159,187, 62,147,212,161, 62,233, 32,221, 62,141,215, 97, 62,210, 92, 60, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,147,183, 73, 62,189,208,167, 62,141,215, 97, 62,210, 92, 60,
+ 62,135, 86, 9, 62,187,220, 79, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,135, 86, 9,
+ 62,187,220, 79, 62,141, 61, 82, 62,166,190,112, 62,147,183, 73, 62,189,208,167, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 62,154, 67,137, 62,169,150, 70, 62,147,183, 73, 62,189,208,167, 62,141, 61, 82, 62,166,190,112,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,141, 61, 82, 62,166,190,112, 62,135, 86, 9,
+ 62,187,220, 79, 62,128, 0, 0, 62,165,199,206, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 62,147,163, 1, 63, 9,152, 91, 62,141,132,224, 63, 19, 29,246, 62,134,168,251, 63, 9,150,107, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,134,168,251, 63, 9,150,107, 62,140,204,193, 62,255,252, 25, 62,147,163, 1,
+ 63, 9,152, 91, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,153,153,129, 63, 0, 0, 0,
+ 62,147,163, 1, 63, 9,152, 91, 62,140,204,193, 62,255,252, 25, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 62,140,204,193, 62,255,252, 25, 62,134,168,251, 63, 9,150,107, 62,128, 0, 0, 63, 0, 0, 0, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,114,174, 11, 63, 9,150,107, 62,128, 0, 0, 63, 0, 0, 0,
+ 62,134,168,251, 63, 9,150,107, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,134,168,251,
+ 63, 9,150,107, 62,128, 0, 0, 63, 19, 98,209, 62,114,174, 11, 63, 9,150,107, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 62,100,246, 64, 63, 19, 29,246, 62,114,174, 11, 63, 9,150,107, 62,128, 0, 0, 63, 19, 98,209,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,128, 0, 0, 63, 19, 98,209, 62,134,168,251,
+ 63, 9,150,107, 62,141,132,224, 63, 19, 29,246, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 62,135, 9, 86, 63, 28,140,130, 62,128, 0, 0, 63, 37,200, 23, 62,113,237, 83, 63, 28,140,130, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,113,237, 83, 63, 28,140,130, 62,128, 0, 0, 63, 19, 98,209, 62,135, 9, 86,
+ 63, 28,140,130, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,141,132,224, 63, 19, 29,246,
+ 62,135, 9, 86, 63, 28,140,130, 62,128, 0, 0, 63, 19, 98,209, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 62,128, 0, 0, 63, 19, 98,209, 62,113,237, 83, 63, 28,140,130, 62,100,246, 64, 63, 19, 29,246, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,114,174, 11, 63, 9,150,107, 62,100,246, 64, 63, 19, 29,246,
+ 62, 88,185,255, 63, 9,152, 90, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 88,185,255,
+ 63, 9,152, 90, 62,102,102,126, 62,255,252, 25, 62,114,174, 11, 63, 9,150,107, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 62,128, 0, 0, 63, 0, 0, 0, 62,114,174, 11, 63, 9,150,107, 62,102,102,126, 62,255,252, 25,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,102,102,126, 62,255,252, 25, 62, 88,185,255,
+ 63, 9,152, 90, 62, 76,204,254, 63, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 62,223, 16, 63, 62,187,220, 62, 62,216,142,233, 62,210, 92, 49, 62,210,174,248, 62,189,208,153, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,210,174,248, 62,189,208,153, 62,217, 40,237, 62,166,190, 91, 62,223, 16, 63,
+ 62,187,220, 62, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,230,102, 72, 62,165,199,183,
+ 62,223, 16, 63, 62,187,220, 62, 62,217, 40,237, 62,166,190, 91, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 62,217, 40,237, 62,166,190, 91, 62,210,174,248, 62,189,208,153, 62,204, 34,175, 62,169,150, 54, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,198, 18,129, 62,193,135, 37, 62,204, 34,175, 62,169,150, 54,
+ 62,210,174,248, 62,189,208,153, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,210,174,248,
+ 62,189,208,153, 62,204,146,151, 62,213,159,180, 62,198, 18,129, 62,193,135, 37, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 62,192,184, 21, 62,217,196, 6, 62,198, 18,129, 62,193,135, 37, 62,204,146,151, 62,213,159,180,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,204,146,151, 62,213,159,180, 62,210,174,248,
+ 62,189,208,153, 62,216,142,233, 62,210, 92, 49, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 62,210,145,170, 62,233, 32,214, 62,204,204,202, 63, 0, 0, 0, 62,198,214, 65, 62,236,207, 67, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,198,214, 65, 62,236,207, 67, 62,204,146,151, 62,213,159,180, 62,210,145,170,
+ 62,233, 32,214, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,216,142,233, 62,210, 92, 49,
+ 62,210,145,170, 62,233, 32,214, 62,204,146,151, 62,213,159,180, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 62,204,146,151, 62,213,159,180, 62,198,214, 65, 62,236,207, 67, 62,192,184, 21, 62,217,196, 6, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,198, 18,129, 62,193,135, 37, 62,192,184, 21, 62,217,196, 6,
+ 62,186, 60,127, 62,198,230,225, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,186, 60,127,
+ 62,198,230,225, 62,191,109,154, 62,174, 54, 68, 62,198, 18,129, 62,193,135, 37, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 62,204, 34,175, 62,169,150, 54, 62,198, 18,129, 62,193,135, 37, 62,191,109,154, 62,174, 54, 68,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,191,109,154, 62,174, 54, 68, 62,186, 60,127,
+ 62,198,230,225, 62,179, 51, 21, 62,180,111,165, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 62,210,145,170, 62,233, 32,214, 62,216,142,233, 62,210, 92, 49, 62,223,159,171, 62,233, 23, 57, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,223,159,171, 62,233, 23, 57, 62,217,153,154, 62,255,252, 24, 62,210,145,170,
+ 62,233, 32,214, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,204,204,202, 63, 0, 0, 0,
+ 62,210,145,170, 62,233, 32,214, 62,217,153,154, 62,255,252, 24, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 62,217,153,154, 62,255,252, 24, 62,223,159,171, 62,233, 23, 57, 62,230,102,101, 63, 0, 0, 0, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,237, 45, 20, 62,233, 23, 55, 62,230,102,101, 63, 0, 0, 0,
+ 62,223,159,171, 62,233, 23, 57, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,223,159,171,
+ 62,233, 23, 57, 62,230,102, 88, 62,209,190,135, 62,237, 45, 20, 62,233, 23, 55, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 62,244, 61,199, 62,210, 92, 46, 62,237, 45, 20, 62,233, 23, 55, 62,230,102, 88, 62,209,190,135,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,230,102, 88, 62,209,190,135, 62,223,159,171,
+ 62,233, 23, 57, 62,216,142,233, 62,210, 92, 49, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 62,223, 16, 63, 62,187,220, 62, 62,230,102, 72, 62,165,199,183, 62,237,188, 99, 62,187,220, 60, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,237,188, 99, 62,187,220, 60, 62,230,102, 88, 62,209,190,135, 62,223, 16, 63,
+ 62,187,220, 62, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,216,142,233, 62,210, 92, 49,
+ 62,223, 16, 63, 62,187,220, 62, 62,230,102, 88, 62,209,190,135, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 62,230,102, 88, 62,209,190,135, 62,237,188, 99, 62,187,220, 60, 62,244, 61,199, 62,210, 92, 46, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,237, 45, 20, 62,233, 23, 55, 62,244, 61,199, 62,210, 92, 46,
+ 62,250, 59, 21, 62,233, 32,213, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,250, 59, 21,
+ 62,233, 32,213, 62,243, 51, 53, 62,255,252, 24, 62,237, 45, 20, 62,233, 23, 55, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 62,230,102,101, 63, 0, 0, 0, 62,237, 45, 20, 62,233, 23, 55, 62,243, 51, 53, 62,255,252, 24,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,243, 51, 53, 62,255,252, 24, 62,250, 59, 21,
+ 62,233, 32,213, 63, 0, 0, 0, 63, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 63, 9, 72, 17, 62,198,230,227, 63, 6, 10, 77, 62,217,196, 6, 63, 3, 93, 15, 62,193,135, 36, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 3, 93, 15, 62,193,135, 36, 63, 6,175,123, 62,174, 54, 65, 63, 9, 72, 17,
+ 62,198,230,227, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 12,204,191, 62,180,111,160,
+ 63, 9, 72, 17, 62,198,230,227, 63, 6,175,123, 62,174, 54, 65, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 63, 6,175,123, 62,174, 54, 65, 63, 3, 93, 15, 62,193,135, 36, 63, 0, 84,241, 62,169,150, 52, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,250, 29,169, 62,189,208,150, 63, 0, 84,241, 62,169,150, 52,
+ 63, 3, 93, 15, 62,193,135, 36, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 3, 93, 15,
+ 62,193,135, 36, 63, 0, 29, 12, 62,213,159,179, 62,250, 29,169, 62,189,208,150, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 62,244, 61,199, 62,210, 92, 46, 62,250, 29,169, 62,189,208,150, 63, 0, 29, 12, 62,213,159,179,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 0, 29, 12, 62,213,159,179, 63, 3, 93, 15,
+ 62,193,135, 36, 63, 6, 10, 77, 62,217,196, 6, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 63, 2,251, 62, 62,236,207, 67, 63, 0, 0, 0, 63, 0, 0, 0, 62,250, 59, 21, 62,233, 32,213, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,250, 59, 21, 62,233, 32,213, 63, 0, 29, 12, 62,213,159,179, 63, 2,251, 62,
+ 62,236,207, 67, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 6, 10, 77, 62,217,196, 6,
+ 63, 2,251, 62, 62,236,207, 67, 63, 0, 29, 12, 62,213,159,179, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 63, 0, 29, 12, 62,213,159,179, 62,250, 59, 21, 62,233, 32,213, 62,244, 61,199, 62,210, 92, 46, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,250, 29,169, 62,189,208,150, 62,244, 61,199, 62,210, 92, 46,
+ 62,237,188, 99, 62,187,220, 60, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,237,188, 99,
+ 62,187,220, 60, 62,243,163,164, 62,166,190, 89, 62,250, 29,169, 62,189,208,150, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 63, 0, 84,241, 62,169,150, 52, 62,250, 29,169, 62,189,208,150, 62,243,163,164, 62,166,190, 89,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,243,163,164, 62,166,190, 89, 62,237,188, 99,
+ 62,187,220, 60, 62,230,102, 72, 62,165,199,183, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 62,250, 9,132, 63, 9,152, 94, 62,243,235,101, 63, 19, 29,252, 62,237, 15,114, 63, 9,150,113, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,237, 15,114, 63, 9,150,113, 62,243, 51, 53, 62,255,252, 24, 62,250, 9,132,
+ 63, 9,152, 94, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0,
+ 62,250, 9,132, 63, 9,152, 94, 62,243, 51, 53, 62,255,252, 24, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 62,243, 51, 53, 62,255,252, 24, 62,237, 15,114, 63, 9,150,113, 62,230,102,101, 63, 0, 0, 0, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,223,189,103, 63, 9,150,112, 62,230,102,101, 63, 0, 0, 0,
+ 62,237, 15,114, 63, 9,150,113, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,237, 15,114,
+ 63, 9,150,113, 62,230,102,117, 63, 19, 98,220, 62,223,189,103, 63, 9,150,112, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 62,216,225,128, 63, 19, 29,254, 62,223,189,103, 63, 9,150,112, 62,230,102,117, 63, 19, 98,220,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,230,102,117, 63, 19, 98,220, 62,237, 15,114,
+ 63, 9,150,113, 62,243,235,101, 63, 19, 29,252, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 62,237,111,222, 63, 28,140,143, 62,230,102,129, 63, 37,200, 48, 62,223, 93, 22, 63, 28,140,145, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,223, 93, 22, 63, 28,140,145, 62,230,102,117, 63, 19, 98,220, 62,237,111,222,
+ 63, 28,140,143, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,243,235,101, 63, 19, 29,252,
+ 62,237,111,222, 63, 28,140,143, 62,230,102,117, 63, 19, 98,220, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 62,230,102,117, 63, 19, 98,220, 62,223, 93, 22, 63, 28,140,145, 62,216,225,128, 63, 19, 29,254, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,223,189,103, 63, 9,150,112, 62,216,225,128, 63, 19, 29,254,
+ 62,210,195, 85, 63, 9,152, 96, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,210,195, 85,
+ 63, 9,152, 96, 62,217,153,154, 62,255,252, 24, 62,223,189,103, 63, 9,150,112, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 62,230,102,101, 63, 0, 0, 0, 62,223,189,103, 63, 9,150,112, 62,217,153,154, 62,255,252, 24,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,217,153,154, 62,255,252, 24, 62,210,195, 85,
+ 63, 9,152, 96, 62,204,204,202, 63, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 63, 34,187, 97, 62,187,220, 72, 63, 31,122,178, 62,210, 92, 55, 63, 28,138,186, 62,189,208,155, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 28,138,186, 62,189,208,155, 63, 31,199,185, 62,166,190, 96, 63, 34,187, 97,
+ 62,187,220, 72, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 38,102,107, 62,165,199,201,
+ 63, 34,187, 97, 62,187,220, 72, 63, 31,199,185, 62,166,190, 96, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 63, 31,199,185, 62,166,190, 96, 63, 28,138,186, 62,189,208,155, 63, 25, 68,150, 62,169,150, 54, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 22, 60,123, 62,193,135, 36, 63, 25, 68,150, 62,169,150, 54,
+ 63, 28,138,186, 62,189,208,155, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 28,138,186,
+ 62,189,208,155, 63, 25,124,133, 62,213,159,181, 63, 22, 60,123, 62,193,135, 36, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 63, 19,143, 64, 62,217,196, 4, 63, 22, 60,123, 62,193,135, 36, 63, 25,124,133, 62,213,159,181,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 25,124,133, 62,213,159,181, 63, 28,138,186,
+ 62,189,208,155, 63, 31,122,178, 62,210, 92, 55, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 63, 28,124, 14, 62,233, 32,218, 63, 25,153,155, 63, 0, 0, 0, 63, 22,158, 86, 62,236,207, 65, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 22,158, 86, 62,236,207, 65, 63, 25,124,133, 62,213,159,181, 63, 28,124, 14,
+ 62,233, 32,218, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 31,122,178, 62,210, 92, 55,
+ 63, 28,124, 14, 62,233, 32,218, 63, 25,124,133, 62,213,159,181, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 63, 25,124,133, 62,213,159,181, 63, 22,158, 86, 62,236,207, 65, 63, 19,143, 64, 62,217,196, 4, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 22, 60,123, 62,193,135, 36, 63, 19,143, 64, 62,217,196, 4,
+ 63, 16, 81,117, 62,198,230,223, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 16, 81,117,
+ 62,198,230,223, 63, 18,234, 7, 62,174, 54, 65, 63, 22, 60,123, 62,193,135, 36, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 63, 25, 68,150, 62,169,150, 54, 63, 22, 60,123, 62,193,135, 36, 63, 18,234, 7, 62,174, 54, 65,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 18,234, 7, 62,174, 54, 65, 63, 16, 81,117,
+ 62,198,230,223, 63, 12,204,191, 62,180,111,160, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 63, 28,124, 14, 62,233, 32,218, 63, 31,122,178, 62,210, 92, 55, 63, 35, 3, 17, 62,233, 23, 58, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 35, 3, 17, 62,233, 23, 58, 63, 32, 0, 2, 62,255,252, 24, 63, 28,124, 14,
+ 62,233, 32,218, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 25,153,155, 63, 0, 0, 0,
+ 63, 28,124, 14, 62,233, 32,218, 63, 32, 0, 2, 62,255,252, 24, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 63, 32, 0, 2, 62,255,252, 24, 63, 35, 3, 17, 62,233, 23, 58, 63, 38,102,109, 63, 0, 0, 0, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 41,201,200, 62,233, 23, 58, 63, 38,102,109, 63, 0, 0, 0,
+ 63, 35, 3, 17, 62,233, 23, 58, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 35, 3, 17,
+ 62,233, 23, 58, 63, 38,102,109, 62,209,190,143, 63, 41,201,200, 62,233, 23, 58, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 63, 45, 82, 38, 62,210, 92, 55, 63, 41,201,200, 62,233, 23, 58, 63, 38,102,109, 62,209,190,143,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 38,102,109, 62,209,190,143, 63, 35, 3, 17,
+ 62,233, 23, 58, 63, 31,122,178, 62,210, 92, 55, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 63, 34,187, 97, 62,187,220, 72, 63, 38,102,107, 62,165,199,201, 63, 42, 17,118, 62,187,220, 72, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 42, 17,118, 62,187,220, 72, 63, 38,102,109, 62,209,190,143, 63, 34,187, 97,
+ 62,187,220, 72, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 31,122,178, 62,210, 92, 55,
+ 63, 34,187, 97, 62,187,220, 72, 63, 38,102,109, 62,209,190,143, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 63, 38,102,109, 62,209,190,143, 63, 42, 17,118, 62,187,220, 72, 63, 45, 82, 38, 62,210, 92, 55, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 41,201,200, 62,233, 23, 58, 63, 45, 82, 38, 62,210, 92, 55,
+ 63, 48, 80,204, 62,233, 32,218, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 48, 80,204,
+ 62,233, 32,218, 63, 44,204,215, 62,255,252, 23, 63, 41,201,200, 62,233, 23, 58, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 63, 38,102,109, 63, 0, 0, 0, 63, 41,201,200, 62,233, 23, 58, 63, 44,204,215, 62,255,252, 23,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 44,204,215, 62,255,252, 23, 63, 48, 80,204,
+ 62,233, 32,218, 63, 51, 51, 63, 63, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 63, 60,123, 85, 62,198,230,253, 63, 57, 61,144, 62,217,196, 19, 63, 54,144, 86, 62,193,135, 68, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 54,144, 86, 62,193,135, 68, 63, 57,226,196, 62,174, 54,114, 63, 60,123, 85,
+ 62,198,230,253, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 64, 0, 0, 62,180,111,211,
+ 63, 60,123, 85, 62,198,230,253, 63, 57,226,196, 62,174, 54,114, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 63, 57,226,196, 62,174, 54,114, 63, 54,144, 86, 62,193,135, 68, 63, 51,136, 58, 62,169,150, 90, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 48, 66, 27, 62,189,208,173, 63, 51,136, 58, 62,169,150, 90,
+ 63, 54,144, 86, 62,193,135, 68, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 54,144, 86,
+ 62,193,135, 68, 63, 51, 80, 80, 62,213,159,192, 63, 48, 66, 27, 62,189,208,173, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 63, 45, 82, 38, 62,210, 92, 55, 63, 48, 66, 27, 62,189,208,173, 63, 51, 80, 80, 62,213,159,192,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 51, 80, 80, 62,213,159,192, 63, 54,144, 86,
+ 62,193,135, 68, 63, 57, 61,144, 62,217,196, 19, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 63, 54, 46,128, 62,236,207, 75, 63, 51, 51, 63, 63, 0, 0, 0, 63, 48, 80,204, 62,233, 32,218, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 48, 80,204, 62,233, 32,218, 63, 51, 80, 80, 62,213,159,192, 63, 54, 46,128,
+ 62,236,207, 75, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 57, 61,144, 62,217,196, 19,
+ 63, 54, 46,128, 62,236,207, 75, 63, 51, 80, 80, 62,213,159,192, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 63, 51, 80, 80, 62,213,159,192, 63, 48, 80,204, 62,233, 32,218, 63, 45, 82, 38, 62,210, 92, 55, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 48, 66, 27, 62,189,208,173, 63, 45, 82, 38, 62,210, 92, 55,
+ 63, 42, 17,118, 62,187,220, 72, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 42, 17,118,
+ 62,187,220, 72, 63, 45, 5, 26, 62,166,190,117, 63, 48, 66, 27, 62,189,208,173, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 63, 51,136, 58, 62,169,150, 90, 63, 48, 66, 27, 62,189,208,173, 63, 45, 5, 26, 62,166,190,117,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 45, 5, 26, 62,166,190,117, 63, 42, 17,118,
+ 62,187,220, 72, 63, 38,102,107, 62,165,199,201, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 63, 48, 55,255, 63, 9,152, 94, 63, 45, 40,237, 63, 19, 29,252, 63, 41,186,242, 63, 9,150,112, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 41,186,242, 63, 9,150,112, 63, 44,204,215, 62,255,252, 23, 63, 48, 55,255,
+ 63, 9,152, 94, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 51, 51, 63, 63, 0, 0, 0,
+ 63, 48, 55,255, 63, 9,152, 94, 63, 44,204,215, 62,255,252, 23, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 63, 44,204,215, 62,255,252, 23, 63, 41,186,242, 63, 9,150,112, 63, 38,102,109, 63, 0, 0, 0, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 35, 17,235, 63, 9,150,112, 63, 38,102,109, 63, 0, 0, 0,
+ 63, 41,186,242, 63, 9,150,112, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 41,186,242,
+ 63, 9,150,112, 63, 38,102,113, 63, 19, 98,219, 63, 35, 17,235, 63, 9,150,112, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 63, 31,163,245, 63, 19, 29,253, 63, 35, 17,235, 63, 9,150,112, 63, 38,102,113, 63, 19, 98,219,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 38,102,113, 63, 19, 98,219, 63, 41,186,242,
+ 63, 9,150,112, 63, 45, 40,237, 63, 19, 29,252, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 63, 41,235, 38, 63, 28,140,141, 63, 38,102,117, 63, 37,200, 45, 63, 34,225,192, 63, 28,140,142, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 34,225,192, 63, 28,140,142, 63, 38,102,113, 63, 19, 98,219, 63, 41,235, 38,
+ 63, 28,140,141, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 45, 40,237, 63, 19, 29,252,
+ 63, 41,235, 38, 63, 28,140,141, 63, 38,102,113, 63, 19, 98,219, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 63, 38,102,113, 63, 19, 98,219, 63, 34,225,192, 63, 28,140,142, 63, 31,163,245, 63, 19, 29,253, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 35, 17,235, 63, 9,150,112, 63, 31,163,245, 63, 19, 29,253,
+ 63, 28,148,223, 63, 9,152, 94, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 28,148,223,
+ 63, 9,152, 94, 63, 32, 0, 2, 62,255,252, 24, 63, 35, 17,235, 63, 9,150,112, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 63, 38,102,109, 63, 0, 0, 0, 63, 35, 17,235, 63, 9,150,112, 63, 32, 0, 2, 62,255,252, 24,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 32, 0, 2, 62,255,252, 24, 63, 28,148,223,
+ 63, 9,152, 94, 63, 25,153,155, 63, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 63,107,129,188, 62,128, 45, 66, 63, 99, 71,235, 62,120, 76,222, 63,106, 37, 94, 62, 83, 97, 84, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,106, 37, 94, 62, 83, 97, 84, 63,115, 51, 65, 62, 97,151,248, 63,107,129,188,
+ 62,128, 45, 66, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,115, 51, 65, 62,135, 83,151,
+ 63,107,129,188, 62,128, 45, 66, 63,115, 51, 65, 62, 97,151,248, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 63,115, 51, 65, 62, 97,151,248, 63,106, 37, 94, 62, 83, 97, 84, 63,115, 51, 65, 62, 52,111, 90, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,107,129,188, 62,128, 45, 66, 63,115, 51, 65, 62,135, 83,151,
+ 63,108,123,142, 62,151,144,169, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,108,123,142,
+ 62,151,144,169, 63,101, 50,231, 62,146,201, 17, 63,107,129,188, 62,128, 45, 66, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 63, 99, 71,235, 62,120, 76,222, 63,107,129,188, 62,128, 45, 66, 63,101, 50,231, 62,146,201, 17,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,101, 50,231, 62,146,201, 17, 63,108,123,142,
+ 62,151,144,169, 63,102,187,106, 62,169,150, 54, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 63, 96, 56, 71, 62,166,190, 99, 63, 89,153,149, 62,165,199,201, 63, 93,238, 22, 62,144,101,243, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 93,238, 22, 62,144,101,243, 63,101, 50,231, 62,146,201, 17, 63, 96, 56, 71,
+ 62,166,190, 99, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,102,187,106, 62,169,150, 54,
+ 63, 96, 56, 71, 62,166,190, 99, 63,101, 50,231, 62,146,201, 17, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 63,101, 50,231, 62,146,201, 17, 63, 93,238, 22, 62,144,101,243, 63, 99, 71,235, 62,120, 76,222, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,109, 21,249, 62,174, 54, 65, 63,102,187,106, 62,169,150, 54,
+ 63,108,123,142, 62,151,144,169, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,108,123,142,
+ 62,151,144,169, 63,115, 51, 65, 62,157,231, 93, 63,109, 21,249, 62,174, 54, 65, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 63,115, 51, 65, 62,180,111,160, 63,109, 21,249, 62,174, 54, 65, 63,115, 51, 65, 62,157,231, 93,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,115, 51, 65, 62,157,231, 93, 63,108,123,142,
+ 62,151,144,169, 63,115, 51, 65, 62,135, 83,151, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 63, 89,153,149, 62,115,162, 79, 63, 99, 71,235, 62,120, 76,222, 63, 93,238, 22, 62,144,101,243, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 93,238, 22, 62,144,101,243, 63, 85, 69, 21, 62,144,102, 3, 63, 89,153,149,
+ 62,115,162, 79, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 79,235, 68, 62,120, 77, 37,
+ 63, 89,153,149, 62,115,162, 79, 63, 85, 69, 21, 62,144,102, 3, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 63, 85, 69, 21, 62,144,102, 3, 63, 93,238, 22, 62,144,101,243, 63, 89,153,149, 62,165,199,201, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 89,153,149, 62,115,162, 79, 63, 79,235, 68, 62,120, 77, 37,
+ 63, 83,186, 24, 62, 70,176,245, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 83,186, 24,
+ 62, 70,176,245, 63, 95,121, 22, 62, 70,176,204, 63, 89,153,149, 62,115,162, 79, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 63, 99, 71,235, 62,120, 76,222, 63, 89,153,149, 62,115,162, 79, 63, 95,121, 22, 62, 70,176,204,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 95,121, 22, 62, 70,176,204, 63, 83,186, 24,
+ 62, 70,176,245, 63, 89,153,152, 62, 23, 31,198, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 63,103,119, 61, 62, 30,253,179, 63,115, 51, 65, 62, 52,111, 90, 63,106, 37, 94, 62, 83, 97, 84, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,106, 37, 94, 62, 83, 97, 84, 63, 95,121, 22, 62, 70,176,204, 63,103,119, 61,
+ 62, 30,253,179, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 89,153,152, 62, 23, 31,198,
+ 63,103,119, 61, 62, 30,253,179, 63, 95,121, 22, 62, 70,176,204, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 63, 95,121, 22, 62, 70,176,204, 63,106, 37, 94, 62, 83, 97, 84, 63, 99, 71,235, 62,120, 76,222, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 75,187,248, 62, 30,253,241, 63, 89,153,152, 62, 23, 31,198,
+ 63, 83,186, 24, 62, 70,176,245, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 83,186, 24,
+ 62, 70,176,245, 63, 73, 13,214, 62, 83, 97,181, 63, 75,187,248, 62, 30,253,241, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 63, 64, 0, 0, 62, 52,111,202, 63, 75,187,248, 62, 30,253,241, 63, 73, 13,214, 62, 83, 97,181,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 73, 13,214, 62, 83, 97,181, 63, 83,186, 24,
+ 62, 70,176,245, 63, 79,235, 68, 62,120, 77, 37, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 63, 89,153,152, 61,147, 41,111, 63, 64, 0, 0, 61,180,111,195, 63, 64, 0, 0, 61, 52, 65,111, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 64, 0, 0, 61, 52, 65,111, 63,117, 49, 38, 61, 52, 64,225, 63, 89,153,152,
+ 61,147, 41,111, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,115, 51, 65, 61,180,111, 83,
+ 63, 89,153,152, 61,147, 41,111, 63,117, 49, 38, 61, 52, 64,225, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 63,117, 49, 38, 61, 52, 64,225, 63, 64, 0, 0, 61, 52, 65,111, 63,121,222,208,178,239, 9,102, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 89,153,152, 61,147, 41,111, 63,115, 51, 65, 61,180,111, 83,
+ 63, 99, 51,172, 61,231, 46, 48, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 99, 51,172,
+ 61,231, 46, 48, 63, 79,255,135, 61,231, 46,120, 63, 89,153,152, 61,147, 41,111, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 63, 64, 0, 0, 61,180,111,195, 63, 89,153,152, 61,147, 41,111, 63, 79,255,135, 61,231, 46,120,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 79,255,135, 61,231, 46,120, 63, 99, 51,172,
+ 61,231, 46, 48, 63, 89,153,152, 62, 23, 31,198, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 63, 75,187,248, 62, 30,253,241, 63, 64, 0, 0, 62, 52,111,202, 63, 64, 0, 0, 62, 7, 71, 24, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 64, 0, 0, 62, 7, 71, 24, 63, 79,255,135, 61,231, 46,120, 63, 75,187,248,
+ 62, 30,253,241, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 89,153,152, 62, 23, 31,198,
+ 63, 75,187,248, 62, 30,253,241, 63, 79,255,135, 61,231, 46,120, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 63, 79,255,135, 61,231, 46,120, 63, 64, 0, 0, 62, 7, 71, 24, 63, 64, 0, 0, 61,180,111,195, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,103,119, 61, 62, 30,253,179, 63, 89,153,152, 62, 23, 31,198,
+ 63, 99, 51,172, 61,231, 46, 48, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 99, 51,172,
+ 61,231, 46, 48, 63,115, 51, 66, 62, 7, 70,199, 63,103,119, 61, 62, 30,253,179, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 63,115, 51, 65, 62, 52,111, 90, 63,103,119, 61, 62, 30,253,179, 63,115, 51, 66, 62, 7, 70,199,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,115, 51, 66, 62, 7, 70,199, 63, 99, 51,172,
+ 61,231, 46, 48, 63,115, 51, 65, 61,180,111, 83, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 63, 71,177,122, 62,128, 45,120, 63, 64, 0, 0, 62,135, 83,218, 63, 64, 0, 0, 62, 97,152,115, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 64, 0, 0, 62, 97,152,115, 63, 73, 13,214, 62, 83, 97,181, 63, 71,177,122,
+ 62,128, 45,120, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 79,235, 68, 62,120, 77, 37,
+ 63, 71,177,122, 62,128, 45,120, 63, 73, 13,214, 62, 83, 97,181, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 63, 73, 13,214, 62, 83, 97,181, 63, 64, 0, 0, 62, 97,152,115, 63, 64, 0, 0, 62, 52,111,202, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 71,177,122, 62,128, 45,120, 63, 79,235, 68, 62,120, 77, 37,
+ 63, 78, 0, 72, 62,146,201, 52, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 78, 0, 72,
+ 62,146,201, 52, 63, 70,183,169, 62,151,144,219, 63, 71,177,122, 62,128, 45,120, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 63, 64, 0, 0, 62,135, 83,218, 63, 71,177,122, 62,128, 45,120, 63, 70,183,169, 62,151,144,219,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 70,183,169, 62,151,144,219, 63, 78, 0, 72,
+ 62,146,201, 52, 63, 76,119,198, 62,169,150, 90, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 63, 70, 29, 61, 62,174, 54,114, 63, 64, 0, 0, 62,180,111,211, 63, 64, 0, 0, 62,157,231,162, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 64, 0, 0, 62,157,231,162, 63, 70,183,169, 62,151,144,219, 63, 70, 29, 61,
+ 62,174, 54,114, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 76,119,198, 62,169,150, 90,
+ 63, 70, 29, 61, 62,174, 54,114, 63, 70,183,169, 62,151,144,219, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 63, 70,183,169, 62,151,144,219, 63, 64, 0, 0, 62,157,231,162, 63, 64, 0, 0, 62,135, 83,218, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 82,250,230, 62,166,190,117, 63, 76,119,198, 62,169,150, 90,
+ 63, 78, 0, 72, 62,146,201, 52, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 78, 0, 72,
+ 62,146,201, 52, 63, 85, 69, 21, 62,144,102, 3, 63, 82,250,230, 62,166,190,117, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 63, 89,153,149, 62,165,199,201, 63, 82,250,230, 62,166,190,117, 63, 85, 69, 21, 62,144,102, 3,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 85, 69, 21, 62,144,102, 3, 63, 78, 0, 72,
+ 62,146,201, 52, 63, 79,235, 68, 62,120, 77, 37, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 61,245,167,179, 62,128, 45, 72, 61,179,217, 94, 62,120, 76,222, 61,234,196,202, 62, 83, 97,100, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61,234,196,202, 62, 83, 97,100, 62, 25,153,212, 62, 97,152, 2, 61,245,167,179,
+ 62,128, 45, 72, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 25,153,214, 62,135, 83,156,
+ 61,245,167,179, 62,128, 45, 72, 62, 25,153,212, 62, 97,152, 2, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 62, 25,153,212, 62, 97,152, 2, 61,234,196,202, 62, 83, 97,100, 62, 25,153,214, 62, 52,111,106, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61,245,167,179, 62,128, 45, 72, 62, 25,153,214, 62,135, 83,156,
+ 61,253,118, 62, 62,151,144,174, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61,253,118, 62,
+ 62,151,144,174, 61,195, 49, 53, 62,146,201, 17, 61,245,167,179, 62,128, 45, 72, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 61,179,217, 94, 62,120, 76,222, 61,245,167,179, 62,128, 45, 72, 61,195, 49, 53, 62,146,201, 17,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61,195, 49, 53, 62,146,201, 17, 61,253,118, 62,
+ 62,151,144,174, 61,207,117, 70, 62,169,150, 54, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 61,155, 92, 79, 62,166,190, 91, 61, 76,205,194, 62,165,199,186, 61,137, 10,212, 62,144,101,238, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61,137, 10,212, 62,144,101,238, 61,195, 49, 53, 62,146,201, 17, 61,155, 92, 79,
+ 62,166,190, 91, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61,207,117, 70, 62,169,150, 54,
+ 61,155, 92, 79, 62,166,190, 91, 61,195, 49, 53, 62,146,201, 17, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 61,195, 49, 53, 62,146,201, 17, 61,137, 10,212, 62,144,101,238, 61,179,217, 94, 62,120, 76,222, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 1, 36,204, 62,174, 54, 70, 61,207,117, 70, 62,169,150, 54,
+ 61,253,118, 62, 62,151,144,174, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61,253,118, 62,
+ 62,151,144,174, 62, 25,153,213, 62,157,231,100, 62, 1, 36,204, 62,174, 54, 70, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 62, 25,153,214, 62,180,111,165, 62, 1, 36,204, 62,174, 54, 70, 62, 25,153,213, 62,157,231,100,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 25,153,213, 62,157,231,100, 61,253,118, 62,
+ 62,151,144,174, 62, 25,153,214, 62,135, 83,156, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 61, 76,205,188, 62,115,162, 53, 61,179,217, 94, 62,120, 76,222, 61,137, 10,212, 62,144,101,238, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61,137, 10,212, 62,144,101,238, 61, 7,133,207, 62,144,101,236, 61, 76,205,188,
+ 62,115,162, 53, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 60, 71,162,255, 62,120, 76,216,
+ 61, 76,205,188, 62,115,162, 53, 61, 7,133,207, 62,144,101,236, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 61, 7,133,207, 62,144,101,236, 61,137, 10,212, 62,144,101,238, 61, 76,205,194, 62,165,199,186, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61, 76,205,188, 62,115,162, 53, 60, 71,162,255, 62,120, 76,216,
+ 60,221,171,190, 62, 70,176,194, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 60,221,171,190,
+ 62, 70,176,194, 61,149, 98,194, 62, 70,176,194, 61, 76,205,188, 62,115,162, 53, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 61,179,217, 94, 62,120, 76,222, 61, 76,205,188, 62,115,162, 53, 61,149, 98,194, 62, 70,176,194,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61,149, 98,194, 62, 70,176,194, 60,221,171,190,
+ 62, 70,176,194, 61, 76,205,193, 62, 23, 31,168, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 61,213, 83,198, 62, 30,253,179, 62, 25,153,214, 62, 52,111,106, 61,234,196,202, 62, 83, 97,100, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61,234,196,202, 62, 83, 97,100, 61,149, 98,194, 62, 70,176,194, 61,213, 83,198,
+ 62, 30,253,179, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61, 76,205,193, 62, 23, 31,168,
+ 61,213, 83,198, 62, 30,253,179, 61,149, 98,194, 62, 70,176,194, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 61,149, 98,194, 62, 70,176,194, 61,234,196,202, 62, 83, 97,100, 61,179,217, 94, 62,120, 76,222, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,126,239, 59, 62, 30,253,174, 63,131,105,154, 62, 23, 31,168,
+ 63,131,118,175, 62, 70,176,194, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,131,118,175,
+ 62, 70,176,194, 63,124, 65, 30, 62, 83, 97, 90, 63,126,239, 59, 62, 30,253,174, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 63,115, 51, 65, 62, 52,111, 90, 63,126,239, 59, 62, 30,253,174, 63,124, 65, 30, 62, 83, 97, 90,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,124, 65, 30, 62, 83, 97, 90, 63,131,118,175,
+ 62, 70,176,194, 63,129,143, 70, 62,120, 76,216, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 63,131,105,156, 61,147, 41,101, 63,115, 51, 65, 61,180,111, 83, 63,117, 49, 38, 61, 52, 64,225, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,117, 49, 38, 61, 52, 64,225, 63,135,148,232, 60,125,158,144, 63,131,105,156,
+ 61,147, 41,101, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 25,153,215, 61,180,111,104,
+ 61,128,245,122, 61,147, 41,101, 62, 25,153,224, 61, 52, 64,225, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 63,135,148,232, 60,125,158,144, 63,117, 49, 38, 61, 52, 64,225, 63,121,222,208,178,239, 9,102, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61,128,245,122, 61,147, 41,101, 62, 25,153,215, 61,180,111,104,
+ 61,179, 55, 89, 61,231, 46, 38, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61,179, 55, 89,
+ 61,231, 46, 38, 60,208,147, 96, 61,231, 46, 48, 61,128,245,122, 61,147, 41,101, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 63,115, 51, 65, 61,180,111, 83, 63,131,105,156, 61,147, 41,101, 63,129,153,102, 61,231, 46, 48,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 60,208,147, 96, 61,231, 46, 48, 61,179, 55, 89,
+ 61,231, 46, 38, 61, 76,205,193, 62, 23, 31,168, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 63,126,239, 59, 62, 30,253,174, 63,115, 51, 65, 62, 52,111, 90, 63,115, 51, 66, 62, 7, 70,199, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,115, 51, 66, 62, 7, 70,199, 63,129,153,102, 61,231, 46, 48, 63,126,239, 59,
+ 62, 30,253,174, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,131,105,154, 62, 23, 31,168,
+ 63,126,239, 59, 62, 30,253,174, 63,129,153,102, 61,231, 46, 48, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 63,129,153,102, 61,231, 46, 48, 63,115, 51, 66, 62, 7, 70,199, 63,115, 51, 65, 61,180,111, 83, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61,213, 83,198, 62, 30,253,179, 61, 76,205,193, 62, 23, 31,168,
+ 61,179, 55, 89, 61,231, 46, 38, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61,179, 55, 89,
+ 61,231, 46, 38, 62, 25,153,217, 62, 7, 70,204, 61,213, 83,198, 62, 30,253,179, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 62, 25,153,214, 62, 52,111,106, 61,213, 83,198, 62, 30,253,179, 62, 25,153,217, 62, 7, 70,204,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 25,153,217, 62, 7, 70,204, 61,179, 55, 89,
+ 61,231, 46, 38, 62, 25,153,215, 61,180,111,104, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 63,122,228,192, 62,128, 45, 66, 63,115, 51, 65, 62,135, 83,151, 63,115, 51, 65, 62, 97,151,248, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,115, 51, 65, 62, 97,151,248, 63,124, 65, 30, 62, 83, 97, 90, 63,122,228,192,
+ 62,128, 45, 66, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,129,143, 70, 62,120, 76,216,
+ 63,122,228,192, 62,128, 45, 66, 63,124, 65, 30, 62, 83, 97, 90, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 63,124, 65, 30, 62, 83, 97, 90, 63,115, 51, 65, 62, 97,151,248, 63,115, 51, 65, 62, 52,111, 90, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,122,228,192, 62,128, 45, 66, 63,129,143, 70, 62,120, 76,216,
+ 63,128,153,201, 62,146,201, 14, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,128,153,201,
+ 62,146,201, 14, 63,121,234,239, 62,151,144,169, 63,122,228,192, 62,128, 45, 66, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 63,115, 51, 65, 62,135, 83,151, 63,122,228,192, 62,128, 45, 66, 63,121,234,239, 62,151,144,169,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,121,234,239, 62,151,144,169, 63,128,153,201,
+ 62,146,201, 14, 63,127,171, 15, 62,169,150, 52, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 63,121, 80,133, 62,174, 54, 65, 63,115, 51, 65, 62,180,111,160, 63,115, 51, 65, 62,157,231, 93, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,115, 51, 65, 62,157,231, 93, 63,121,234,239, 62,151,144,169, 63,121, 80,133,
+ 62,174, 54, 65, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,127,171, 15, 62,169,150, 52,
+ 63,121, 80,133, 62,174, 54, 65, 63,121,234,239, 62,151,144,169, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 63,121,234,239, 62,151,144,169, 63,115, 51, 65, 62,157,231, 93, 63,115, 51, 65, 62,135, 83,151, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63,131, 23, 23, 62,166,190, 89, 63,127,171, 15, 62,169,150, 52,
+ 63,128,153,201, 62,146,201, 14, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 59,153,200,136,
+ 62,146,201, 14, 61, 7,133,207, 62,144,101,236, 60,197,197,195, 62,166,190, 89, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 61, 76,205,194, 62,165,199,186, 60,197,197,195, 62,166,190, 89, 61, 7,133,207, 62,144,101,236,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 61, 7,133,207, 62,144,101,236, 59,153,200,136,
+ 62,146,201, 14, 60, 71,162,255, 62,120, 76,216, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 62,163,208, 32, 62,128, 45, 79, 62,147, 92,147, 62,120, 76,252, 62,161, 23,102, 62, 83, 97,115, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,161, 23,102, 62, 83, 97,115, 62,179, 51, 22, 62, 97,152, 2, 62,163,208, 32,
+ 62,128, 45, 79, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,179, 51, 21, 62,135, 83,156,
+ 62,163,208, 32, 62,128, 45, 79, 62,179, 51, 22, 62, 97,152, 2, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 62,179, 51, 22, 62, 97,152, 2, 62,161, 23,102, 62, 83, 97,115, 62,179, 51, 21, 62, 52,111,101, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,163,208, 32, 62,128, 45, 79, 62,179, 51, 21, 62,135, 83,156,
+ 62,165,195,194, 62,151,144,181, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,165,195,194,
+ 62,151,144,181, 62,151, 50,134, 62,146,201, 29, 62,163,208, 32, 62,128, 45, 79, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 62,147, 92,147, 62,120, 76,252, 62,163,208, 32, 62,128, 45, 79, 62,151, 50,134, 62,146,201, 29,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,151, 50,134, 62,146,201, 29, 62,165,195,194,
+ 62,151,144,181, 62,154, 67,137, 62,169,150, 70, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 62,141, 61, 82, 62,166,190,112, 62,128, 0, 0, 62,165,199,206, 62,136,168,247, 62,144,102, 3, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,136,168,247, 62,144,102, 3, 62,151, 50,134, 62,146,201, 29, 62,141, 61, 82,
+ 62,166,190,112, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,154, 67,137, 62,169,150, 70,
+ 62,141, 61, 82, 62,166,190,112, 62,151, 50,134, 62,146,201, 29, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 62,151, 50,134, 62,146,201, 29, 62,136,168,247, 62,144,102, 3, 62,147, 92,147, 62,120, 76,252, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,166,248,150, 62,174, 54, 78, 62,154, 67,137, 62,169,150, 70,
+ 62,165,195,194, 62,151,144,181, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,165,195,194,
+ 62,151,144,181, 62,179, 51, 21, 62,157,231, 98, 62,166,248,150, 62,174, 54, 78, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 62,179, 51, 21, 62,180,111,165, 62,166,248,150, 62,174, 54, 78, 62,179, 51, 21, 62,157,231, 98,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,179, 51, 21, 62,157,231, 98, 62,165,195,194,
+ 62,151,144,181, 62,179, 51, 21, 62,135, 83,156, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 62,128, 0, 0, 62,115,162, 89, 62,147, 92,147, 62,120, 76,252, 62,136,168,247, 62,144,102, 3, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,136,168,247, 62,144,102, 3, 62,110,174, 18, 62,144,102, 3, 62,128, 0, 0,
+ 62,115,162, 89, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 89, 70,217, 62,120, 76,252,
+ 62,128, 0, 0, 62,115,162, 89, 62,110,174, 18, 62,144,102, 3, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 62,110,174, 18, 62,144,102, 3, 62,136,168,247, 62,144,102, 3, 62,128, 0, 0, 62,165,199,206, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,128, 0, 0, 62,115,162, 89, 62, 89, 70,217, 62,120, 76,252,
+ 62,104,130, 30, 62, 70,176,230, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,104,130, 30,
+ 62, 70,176,230, 62,139,190,241, 62, 70,176,230, 62,128, 0, 0, 62,115,162, 89, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 62,147, 92,147, 62,120, 76,252, 62,128, 0, 0, 62,115,162, 89, 62,139,190,241, 62, 70,176,230,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,139,190,241, 62, 70,176,230, 62,104,130, 30,
+ 62, 70,176,230, 62,128, 0, 0, 62, 23, 31,208, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 62,155,187, 41, 62, 30,253,205, 62,179, 51, 21, 62, 52,111,101, 62,161, 23,102, 62, 83, 97,115, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,161, 23,102, 62, 83, 97,115, 62,139,190,241, 62, 70,176,230, 62,155,187, 41,
+ 62, 30,253,205, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,128, 0, 0, 62, 23, 31,208,
+ 62,155,187, 41, 62, 30,253,205, 62,139,190,241, 62, 70,176,230, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 62,139,190,241, 62, 70,176,230, 62,161, 23,102, 62, 83, 97,115, 62,147, 92,147, 62,120, 76,252, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 72,137,174, 62, 30,253,205, 62,128, 0, 0, 62, 23, 31,208,
+ 62,104,130, 30, 62, 70,176,230, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,104,130, 30,
+ 62, 70,176,230, 62, 61,209, 51, 62, 83, 97,115, 62, 72,137,174, 62, 30,253,205, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 62, 25,153,214, 62, 52,111,106, 62, 72,137,174, 62, 30,253,205, 62, 61,209, 51, 62, 83, 97,115,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 61,209, 51, 62, 83, 97,115, 62,104,130, 30,
+ 62, 70,176,230, 62, 89, 70,217, 62,120, 76,252, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 62,127,255,255, 61,147, 41,141, 62, 25,153,215, 61,180,111,104, 62, 25,153,224, 61, 52, 64,225, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 25,153,224, 61, 52, 64,225, 62,179, 51, 15, 61, 52, 64,225, 62,127,255,255,
+ 61,147, 41,141, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,179, 51, 20, 61,180,111,104,
+ 62,127,255,255, 61,147, 41,141, 62,179, 51, 15, 61, 52, 64,225, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 62,179, 51, 15, 61, 52, 64,225, 62, 25,153,224, 61, 52, 64,225, 62,161,175,144,178,239, 9,102, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,127,255,255, 61,147, 41,141, 62,179, 51, 20, 61,180,111,104,
+ 62,147, 52, 12, 61,231, 46,109, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,147, 52, 12,
+ 61,231, 46,109, 62, 89,151,231, 61,231, 46,109, 62,127,255,255, 61,147, 41,141, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 62, 25,153,215, 61,180,111,104, 62,127,255,255, 61,147, 41,141, 62, 89,151,231, 61,231, 46,109,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 89,151,231, 61,231, 46,109, 62,147, 52, 12,
+ 61,231, 46,109, 62,128, 0, 0, 62, 23, 31,208, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 62, 72,137,174, 62, 30,253,205, 62, 25,153,214, 62, 52,111,106, 62, 25,153,217, 62, 7, 70,204, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 25,153,217, 62, 7, 70,204, 62, 89,151,231, 61,231, 46,109, 62, 72,137,174,
+ 62, 30,253,205, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,128, 0, 0, 62, 23, 31,208,
+ 62, 72,137,174, 62, 30,253,205, 62, 89,151,231, 61,231, 46,109, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 62, 89,151,231, 61,231, 46,109, 62, 25,153,217, 62, 7, 70,204, 62, 25,153,215, 61,180,111,104, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,155,187, 41, 62, 30,253,205, 62,128, 0, 0, 62, 23, 31,208,
+ 62,147, 52, 12, 61,231, 46,109, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,147, 52, 12,
+ 61,231, 46,109, 62,179, 51, 19, 62, 7, 70,204, 62,155,187, 41, 62, 30,253,205, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 62,179, 51, 21, 62, 52,111,101, 62,155,187, 41, 62, 30,253,205, 62,179, 51, 19, 62, 7, 70,204,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,179, 51, 19, 62, 7, 70,204, 62,147, 52, 12,
+ 61,231, 46,109, 62,179, 51, 20, 61,180,111,104, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 62, 56, 95,192, 62,128, 45, 79, 62, 25,153,214, 62,135, 83,156, 62, 25,153,212, 62, 97,152, 2, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 25,153,212, 62, 97,152, 2, 62, 61,209, 51, 62, 83, 97,115, 62, 56, 95,192,
+ 62,128, 45, 79, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 89, 70,217, 62,120, 76,252,
+ 62, 56, 95,192, 62,128, 45, 79, 62, 61,209, 51, 62, 83, 97,115, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 62, 61,209, 51, 62, 83, 97,115, 62, 25,153,212, 62, 97,152, 2, 62, 25,153,214, 62, 52,111,106, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 56, 95,192, 62,128, 45, 79, 62, 89, 70,217, 62,120, 76,252,
+ 62, 81,154,245, 62,146,201, 29, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 81,154,245,
+ 62,146,201, 29, 62, 52,120,125, 62,151,144,181, 62, 56, 95,192, 62,128, 45, 79, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 62, 25,153,214, 62,135, 83,156, 62, 56, 95,192, 62,128, 45, 79, 62, 52,120,125, 62,151,144,181,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 52,120,125, 62,151,144,181, 62, 81,154,245,
+ 62,146,201, 29, 62, 75,120,239, 62,169,150, 70, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 62, 50, 14,213, 62,174, 54, 78, 62, 25,153,214, 62,180,111,165, 62, 25,153,213, 62,157,231,100, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 25,153,213, 62,157,231,100, 62, 52,120,125, 62,151,144,181, 62, 50, 14,213,
+ 62,174, 54, 78, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 75,120,239, 62,169,150, 70,
+ 62, 50, 14,213, 62,174, 54, 78, 62, 52,120,125, 62,151,144,181, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 62, 52,120,125, 62,151,144,181, 62, 25,153,213, 62,157,231,100, 62, 25,153,214, 62,135, 83,156, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,101,133, 91, 62,166,190,112, 62, 75,120,239, 62,169,150, 70,
+ 62, 81,154,245, 62,146,201, 29, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62, 81,154,245,
+ 62,146,201, 29, 62,110,174, 18, 62,144,102, 3, 62,101,133, 91, 62,166,190,112, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 62,128, 0, 0, 62,165,199,206, 62,101,133, 91, 62,166,190,112, 62,110,174, 18, 62,144,102, 3,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,110,174, 18, 62,144,102, 3, 62, 81,154,245,
+ 62,146,201, 29, 62, 89, 70,217, 62,120, 76,252, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 63, 5, 27, 64, 62,128, 45, 66, 62,249,194,232, 62,120, 76,216, 63, 3,190,226, 62, 83, 97, 90, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 3,190,226, 62, 83, 97, 90, 63, 12,204,191, 62, 97,151,248, 63, 5, 27, 64,
+ 62,128, 45, 66, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 12,204,191, 62,135, 83,149,
+ 63, 5, 27, 64, 62,128, 45, 66, 63, 12,204,191, 62, 97,151,248, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 63, 12,204,191, 62, 97,151,248, 63, 3,190,226, 62, 83, 97, 90, 63, 12,204,191, 62, 52,111, 90, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 5, 27, 64, 62,128, 45, 66, 63, 12,204,191, 62,135, 83,149,
+ 63, 6, 21, 17, 62,151,144,169, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 6, 21, 17,
+ 62,151,144,169, 62,253,152,222, 62,146,201, 14, 63, 5, 27, 64, 62,128, 45, 66, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 62,249,194,232, 62,120, 76,216, 63, 5, 27, 64, 62,128, 45, 66, 62,253,152,222, 62,146,201, 14,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,253,152,222, 62,146,201, 14, 63, 6, 21, 17,
+ 62,151,144,169, 63, 0, 84,241, 62,169,150, 52, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 62,243,163,164, 62,166,190, 89, 62,230,102, 72, 62,165,199,183, 62,239, 15, 70, 62,144,101,233, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,239, 15, 70, 62,144,101,233, 62,253,152,222, 62,146,201, 14, 62,243,163,164,
+ 62,166,190, 89, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 0, 84,241, 62,169,150, 52,
+ 62,243,163,164, 62,166,190, 89, 62,253,152,222, 62,146,201, 14, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 62,253,152,222, 62,146,201, 14, 62,239, 15, 70, 62,144,101,233, 62,249,194,232, 62,120, 76,216, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 6,175,123, 62,174, 54, 65, 63, 0, 84,241, 62,169,150, 52,
+ 63, 6, 21, 17, 62,151,144,169, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 6, 21, 17,
+ 62,151,144,169, 63, 12,204,191, 62,157,231, 90, 63, 6,175,123, 62,174, 54, 65, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 63, 12,204,191, 62,180,111,160, 63, 6,175,123, 62,174, 54, 65, 63, 12,204,191, 62,157,231, 90,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 12,204,191, 62,157,231, 90, 63, 6, 21, 17,
+ 62,151,144,169, 63, 12,204,191, 62,135, 83,149, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 62,230,102, 72, 62,115,162, 53, 62,249,194,232, 62,120, 76,216, 62,239, 15, 70, 62,144,101,233, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,239, 15, 70, 62,144,101,233, 62,221,189, 75, 62,144,101,238, 62,230,102, 72,
+ 62,115,162, 53, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,211, 9,168, 62,120, 76,222,
+ 62,230,102, 72, 62,115,162, 53, 62,221,189, 75, 62,144,101,238, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 62,221,189, 75, 62,144,101,238, 62,239, 15, 70, 62,144,101,233, 62,230,102, 72, 62,165,199,183, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,230,102, 72, 62,115,162, 53, 62,211, 9,168, 62,120, 76,222,
+ 62,218,167, 80, 62, 70,176,194, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,218,167, 80,
+ 62, 70,176,194, 62,242, 37, 68, 62, 70,176,194, 62,230,102, 72, 62,115,162, 53, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 62,249,194,232, 62,120, 76,216, 62,230,102, 72, 62,115,162, 53, 62,242, 37, 68, 62, 70,176,194,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,242, 37, 68, 62, 70,176,194, 62,218,167, 80,
+ 62, 70,176,194, 62,230,102, 72, 62, 23, 31,168, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 63, 1, 16,197, 62, 30,253,174, 63, 12,204,191, 62, 52,111, 90, 63, 3,190,226, 62, 83, 97, 90, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 3,190,226, 62, 83, 97, 90, 62,242, 37, 68, 62, 70,176,194, 63, 1, 16,197,
+ 62, 30,253,174, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,230,102, 72, 62, 23, 31,168,
+ 63, 1, 16,197, 62, 30,253,174, 62,242, 37, 68, 62, 70,176,194, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 62,242, 37, 68, 62, 70,176,194, 63, 3,190,226, 62, 83, 97, 90, 62,249,194,232, 62,120, 76,216, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,202,171, 14, 62, 30,253,179, 62,230,102, 72, 62, 23, 31,168,
+ 62,218,167, 80, 62, 70,176,194, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,218,167, 80,
+ 62, 70,176,194, 62,197, 78,205, 62, 83, 97, 95, 62,202,171, 14, 62, 30,253,179, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 62,179, 51, 21, 62, 52,111,101, 62,202,171, 14, 62, 30,253,179, 62,197, 78,205, 62, 83, 97, 95,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,197, 78,205, 62, 83, 97, 95, 62,218,167, 80,
+ 62, 70,176,194, 62,211, 9,168, 62,120, 76,222, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 62,230,102, 63, 61,147, 41,101, 62,179, 51, 20, 61,180,111,104, 62,179, 51, 15, 61, 52, 64,225, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,179, 51, 15, 61, 52, 64,225, 63, 12,204,189, 61, 52, 64,225, 62,230,102, 63,
+ 61,147, 41,101, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 12,204,191, 61,180,111, 83,
+ 62,230,102, 63, 61,147, 41,101, 63, 12,204,189, 61, 52, 64,225, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 63, 12,204,189, 61, 52, 64,225, 62,179, 51, 15, 61, 52, 64,225, 62,161,175,144,178,239, 9,102, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,230,102, 63, 61,147, 41,101, 63, 12,204,191, 61,180,111, 83,
+ 62,249,154,104, 61,231, 46, 48, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,249,154,104,
+ 61,231, 46, 48, 62,211, 50, 42, 61,231, 46, 48, 62,230,102, 63, 61,147, 41,101, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 62,179, 51, 20, 61,180,111,104, 62,230,102, 63, 61,147, 41,101, 62,211, 50, 42, 61,231, 46, 48,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,211, 50, 42, 61,231, 46, 48, 62,249,154,104,
+ 61,231, 46, 48, 62,230,102, 72, 62, 23, 31,168, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 62,202,171, 14, 62, 30,253,179, 62,179, 51, 21, 62, 52,111,101, 62,179, 51, 19, 62, 7, 70,204, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,179, 51, 19, 62, 7, 70,204, 62,211, 50, 42, 61,231, 46, 48, 62,202,171, 14,
+ 62, 30,253,179, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,230,102, 72, 62, 23, 31,168,
+ 62,202,171, 14, 62, 30,253,179, 62,211, 50, 42, 61,231, 46, 48, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 62,211, 50, 42, 61,231, 46, 48, 62,179, 51, 19, 62, 7, 70,204, 62,179, 51, 20, 61,180,111,104, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 1, 16,197, 62, 30,253,174, 62,230,102, 72, 62, 23, 31,168,
+ 62,249,154,104, 61,231, 46, 48, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,249,154,104,
+ 61,231, 46, 48, 63, 12,204,191, 62, 7, 70,199, 63, 1, 16,197, 62, 30,253,174, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 63, 12,204,191, 62, 52,111, 90, 63, 1, 16,197, 62, 30,253,174, 63, 12,204,191, 62, 7, 70,199,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 12,204,191, 62, 7, 70,199, 62,249,154,104,
+ 61,231, 46, 48, 63, 12,204,191, 61,180,111, 83, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 62,194,150, 19, 62,128, 45, 72, 62,179, 51, 21, 62,135, 83,156, 62,179, 51, 22, 62, 97,152, 2, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,179, 51, 22, 62, 97,152, 2, 62,197, 78,205, 62, 83, 97, 95, 62,194,150, 19,
+ 62,128, 45, 72, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,211, 9,168, 62,120, 76,222,
+ 62,194,150, 19, 62,128, 45, 72, 62,197, 78,205, 62, 83, 97, 95, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 62,197, 78,205, 62, 83, 97, 95, 62,179, 51, 22, 62, 97,152, 2, 62,179, 51, 21, 62, 52,111,101, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,194,150, 19, 62,128, 45, 72, 62,211, 9,168, 62,120, 76,222,
+ 62,207, 51,179, 62,146,201, 17, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,207, 51,179,
+ 62,146,201, 17, 62,192,162,113, 62,151,144,174, 62,194,150, 19, 62,128, 45, 72, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 62,179, 51, 21, 62,135, 83,156, 62,194,150, 19, 62,128, 45, 72, 62,192,162,113, 62,151,144,174,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,192,162,113, 62,151,144,174, 62,207, 51,179,
+ 62,146,201, 17, 62,204, 34,175, 62,169,150, 54, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 62,191,109,154, 62,174, 54, 68, 62,179, 51, 21, 62,180,111,165, 62,179, 51, 21, 62,157,231, 98, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,179, 51, 21, 62,157,231, 98, 62,192,162,113, 62,151,144,174, 62,191,109,154,
+ 62,174, 54, 68, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,204, 34,175, 62,169,150, 54,
+ 62,191,109,154, 62,174, 54, 68, 62,192,162,113, 62,151,144,174, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 62,192,162,113, 62,151,144,174, 62,179, 51, 21, 62,157,231, 98, 62,179, 51, 21, 62,135, 83,156, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,217, 40,237, 62,166,190, 91, 62,204, 34,175, 62,169,150, 54,
+ 62,207, 51,179, 62,146,201, 17, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,207, 51,179,
+ 62,146,201, 17, 62,221,189, 75, 62,144,101,238, 62,217, 40,237, 62,166,190, 91, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 62,230,102, 72, 62,165,199,183, 62,217, 40,237, 62,166,190, 91, 62,221,189, 75, 62,144,101,238,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 62,221,189, 75, 62,144,101,238, 62,207, 51,179,
+ 62,146,201, 17, 62,211, 9,168, 62,120, 76,222, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 63, 56, 78,134, 62,128, 45,117, 63, 48, 20,188, 62,120, 77, 37, 63, 54,242, 42, 62, 83, 97,181, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 54,242, 42, 62, 83, 97,181, 63, 64, 0, 0, 62, 97,152,115, 63, 56, 78,134,
+ 62,128, 45,117, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 64, 0, 0, 62,135, 83,218,
+ 63, 56, 78,134, 62,128, 45,117, 63, 64, 0, 0, 62, 97,152,115, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 63, 64, 0, 0, 62, 97,152,115, 63, 54,242, 42, 62, 83, 97,181, 63, 64, 0, 0, 62, 52,111,202, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 56, 78,134, 62,128, 45,117, 63, 64, 0, 0, 62,135, 83,218,
+ 63, 57, 72, 87, 62,151,144,219, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 57, 72, 87,
+ 62,151,144,219, 63, 49,255,184, 62,146,201, 52, 63, 56, 78,134, 62,128, 45,117, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 63, 48, 20,188, 62,120, 77, 37, 63, 56, 78,134, 62,128, 45,117, 63, 49,255,184, 62,146,201, 52,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 49,255,184, 62,146,201, 52, 63, 57, 72, 87,
+ 62,151,144,219, 63, 51,136, 58, 62,169,150, 90, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 63, 45, 5, 26, 62,166,190,117, 63, 38,102,107, 62,165,199,201, 63, 42,186,235, 62,144,102, 5, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 42,186,235, 62,144,102, 5, 63, 49,255,184, 62,146,201, 52, 63, 45, 5, 26,
+ 62,166,190,117, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 51,136, 58, 62,169,150, 90,
+ 63, 45, 5, 26, 62,166,190,117, 63, 49,255,184, 62,146,201, 52, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 63, 49,255,184, 62,146,201, 52, 63, 42,186,235, 62,144,102, 5, 63, 48, 20,188, 62,120, 77, 37, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 57,226,196, 62,174, 54,114, 63, 51,136, 58, 62,169,150, 90,
+ 63, 57, 72, 87, 62,151,144,219, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 57, 72, 87,
+ 62,151,144,219, 63, 64, 0, 0, 62,157,231,162, 63, 57,226,196, 62,174, 54,114, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 63, 64, 0, 0, 62,180,111,211, 63, 57,226,196, 62,174, 54,114, 63, 64, 0, 0, 62,157,231,162,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 64, 0, 0, 62,157,231,162, 63, 57, 72, 87,
+ 62,151,144,219, 63, 64, 0, 0, 62,135, 83,218, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 63, 38,102,107, 62,115,162, 79, 63, 48, 20,188, 62,120, 77, 37, 63, 42,186,235, 62,144,102, 5, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 42,186,235, 62,144,102, 5, 63, 34, 17,234, 62,144,101,243, 63, 38,102,107,
+ 62,115,162, 79, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 28,184, 21, 62,120, 76,222,
+ 63, 38,102,107, 62,115,162, 79, 63, 34, 17,234, 62,144,101,243, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 63, 34, 17,234, 62,144,101,243, 63, 42,186,235, 62,144,102, 5, 63, 38,102,107, 62,165,199,201, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 38,102,107, 62,115,162, 79, 63, 28,184, 21, 62,120, 76,222,
+ 63, 32,134,234, 62, 70,176,204, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 32,134,234,
+ 62, 70,176,204, 63, 44, 69,233, 62, 70,176,245, 63, 38,102,107, 62,115,162, 79, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 63, 48, 20,188, 62,120, 77, 37, 63, 38,102,107, 62,115,162, 79, 63, 44, 69,233, 62, 70,176,245,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 44, 69,233, 62, 70,176,245, 63, 32,134,234,
+ 62, 70,176,204, 63, 38,102,104, 62, 23, 31,198, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 63, 52, 68, 9, 62, 30,253,241, 63, 64, 0, 0, 62, 52,111,202, 63, 54,242, 42, 62, 83, 97,181, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 54,242, 42, 62, 83, 97,181, 63, 44, 69,233, 62, 70,176,245, 63, 52, 68, 9,
+ 62, 30,253,241, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 38,102,104, 62, 23, 31,198,
+ 63, 52, 68, 9, 62, 30,253,241, 63, 44, 69,233, 62, 70,176,245, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 63, 44, 69,233, 62, 70,176,245, 63, 54,242, 42, 62, 83, 97,181, 63, 48, 20,188, 62,120, 77, 37, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 24,136,195, 62, 30,253,179, 63, 38,102,104, 62, 23, 31,198,
+ 63, 32,134,234, 62, 70,176,204, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 32,134,234,
+ 62, 70,176,204, 63, 21,218,162, 62, 83, 97, 84, 63, 24,136,195, 62, 30,253,179, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 63, 12,204,191, 62, 52,111, 90, 63, 24,136,195, 62, 30,253,179, 63, 21,218,162, 62, 83, 97, 84,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 21,218,162, 62, 83, 97, 84, 63, 32,134,234,
+ 62, 70,176,204, 63, 28,184, 21, 62,120, 76,222, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 63, 38,102,104, 61,147, 41,111, 63, 12,204,191, 61,180,111, 83, 63, 12,204,189, 61, 52, 64,225, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 12,204,189, 61, 52, 64,225, 63, 64, 0, 0, 61, 52, 65,111, 63, 38,102,104,
+ 61,147, 41,111, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 64, 0, 0, 61,180,111,195,
+ 63, 38,102,104, 61,147, 41,111, 63, 64, 0, 0, 61, 52, 65,111, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 63, 64, 0, 0, 61, 52, 65,111, 63, 12,204,189, 61, 52, 64,225, 63,121,222,208,178,239, 9,102, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 38,102,104, 61,147, 41,111, 63, 64, 0, 0, 61,180,111,195,
+ 63, 48, 0,122, 61,231, 46,120, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 48, 0,122,
+ 61,231, 46,120, 63, 28,204, 85, 61,231, 46, 48, 63, 38,102,104, 61,147, 41,111, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 63, 12,204,191, 61,180,111, 83, 63, 38,102,104, 61,147, 41,111, 63, 28,204, 85, 61,231, 46, 48,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 28,204, 85, 61,231, 46, 48, 63, 48, 0,122,
+ 61,231, 46,120, 63, 38,102,104, 62, 23, 31,198, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 63, 24,136,195, 62, 30,253,179, 63, 12,204,191, 62, 52,111, 90, 63, 12,204,191, 62, 7, 70,199, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 12,204,191, 62, 7, 70,199, 63, 28,204, 85, 61,231, 46, 48, 63, 24,136,195,
+ 62, 30,253,179, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 38,102,104, 62, 23, 31,198,
+ 63, 24,136,195, 62, 30,253,179, 63, 28,204, 85, 61,231, 46, 48, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 63, 28,204, 85, 61,231, 46, 48, 63, 12,204,191, 62, 7, 70,199, 63, 12,204,191, 61,180,111, 83, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 52, 68, 9, 62, 30,253,241, 63, 38,102,104, 62, 23, 31,198,
+ 63, 48, 0,122, 61,231, 46,120, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 48, 0,122,
+ 61,231, 46,120, 63, 64, 0, 0, 62, 7, 71, 24, 63, 52, 68, 9, 62, 30,253,241, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 63, 64, 0, 0, 62, 52,111,202, 63, 52, 68, 9, 62, 30,253,241, 63, 64, 0, 0, 62, 7, 71, 24,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 64, 0, 0, 62, 7, 71, 24, 63, 48, 0,122,
+ 61,231, 46,120, 63, 64, 0, 0, 61,180,111,195, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 63, 20,126, 68, 62,128, 45, 64, 63, 12,204,191, 62,135, 83,149, 63, 12,204,191, 62, 97,151,248, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 12,204,191, 62, 97,151,248, 63, 21,218,162, 62, 83, 97, 84, 63, 20,126, 68,
+ 62,128, 45, 64, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 28,184, 21, 62,120, 76,222,
+ 63, 20,126, 68, 62,128, 45, 64, 63, 21,218,162, 62, 83, 97, 84, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 63, 21,218,162, 62, 83, 97, 84, 63, 12,204,191, 62, 97,151,248, 63, 12,204,191, 62, 52,111, 90, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 20,126, 68, 62,128, 45, 64, 63, 28,184, 21, 62,120, 76,222,
+ 63, 26,205, 25, 62,146,201, 14, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 26,205, 25,
+ 62,146,201, 14, 63, 19,132,114, 62,151,144,169, 63, 20,126, 68, 62,128, 45, 64, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 63, 12,204,191, 62,135, 83,149, 63, 20,126, 68, 62,128, 45, 64, 63, 19,132,114, 62,151,144,169,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 19,132,114, 62,151,144,169, 63, 26,205, 25,
+ 62,146,201, 14, 63, 25, 68,150, 62,169,150, 54, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 63, 18,234, 7, 62,174, 54, 65, 63, 12,204,191, 62,180,111,160, 63, 12,204,191, 62,157,231, 90, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 12,204,191, 62,157,231, 90, 63, 19,132,114, 62,151,144,169, 63, 18,234, 7,
+ 62,174, 54, 65, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 25, 68,150, 62,169,150, 54,
+ 63, 18,234, 7, 62,174, 54, 65, 63, 19,132,114, 62,151,144,169, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 63, 19,132,114, 62,151,144,169, 63, 12,204,191, 62,157,231, 90, 63, 12,204,191, 62,135, 83,149, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 31,199,185, 62,166,190, 96, 63, 25, 68,150, 62,169,150, 54,
+ 63, 26,205, 25, 62,146,201, 14, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 26,205, 25,
+ 62,146,201, 14, 63, 34, 17,234, 62,144,101,243, 63, 31,199,185, 62,166,190, 96, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 63, 38,102,107, 62,165,199,201, 63, 31,199,185, 62,166,190, 96, 63, 34, 17,234, 62,144,101,243,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 63, 34, 17,234, 62,144,101,243, 63, 26,205, 25,
+ 62,146,201, 14, 63, 28,184, 21, 62,120, 76,222, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 68, 65, 84, 65, 0, 0, 80, 0, 12,120, 32, 32, 0, 0, 0, 59, 0, 0, 20, 0,255,255,255,255,255,255,255,255,255,255,255,255,
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
@@ -12058,33 +12379,34 @@ char datatoc_preview_blend[]= {
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 77, 69, 0, 0, 12, 1, 0, 0,
- 8,197,152, 2, 51, 0, 0, 0, 1, 0, 0, 0,104,202,152, 2,152, 43,161, 2, 0, 0, 0, 0, 0, 0, 0, 0, 77, 69,112,114,
-101,118,105,101,119, 46, 48, 48, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96,194,149, 2, 56, 86,169, 2,192,100,169, 2,
- 0, 0, 0, 0, 32, 61,150, 2,152,134, 20, 3, 0, 0, 0, 0,152,118,148, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 72,198,152, 2, 1, 0, 0, 0, 5, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0,168,199,152, 2, 1, 0, 0, 0, 5, 0, 0, 0,
- 12, 0, 0, 0, 0, 0, 0, 0, 8,201,152, 2, 3, 0, 0, 0, 5, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0,
- 4, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,128,179, 0, 0, 64, 52,235, 92,142,188,
- 0, 0,128, 63, 2, 0,128, 63,235, 92,142, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 30, 0, 4, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 4, 0, 0, 0,
- 96,194,149, 2, 0, 0, 0, 0, 1, 0, 0, 0,152,140,165, 2, 68, 65, 84, 65, 44, 1, 0, 0, 72,198,152, 2, 21, 1, 0, 0,
- 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 61,150, 2,
+255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 77, 69, 0, 0, 1, 24, 13, 65,154, 64,
+ 0, 0, 0, 52, 0, 0, 0, 1, 13, 65,161,176, 13, 65,148,176, 0, 0, 0, 0, 0, 0, 0, 0, 77, 69,112,114,101,118,105,101,
+119, 46, 48, 48, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 65,155,128, 13, 65,160,208, 13, 65,161, 16, 0, 0, 0, 0,
+ 13, 65,157, 16, 13, 65,159, 16, 0, 0, 0, 0, 13, 65,161,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 65,155,176,
+ 0, 0, 0, 1, 0, 0, 0, 5, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 13, 65,157,176, 0, 0, 0, 1, 0, 0, 0, 5,
+ 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 13, 65,159,112, 0, 0, 0, 3, 0, 0, 0, 5, 0, 0, 0, 80, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 4, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1,179,128, 0, 0,
+ 52, 64, 0, 0,188,142, 92,235, 63,128, 0, 0, 63,128, 0, 2, 60,142, 92,235, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 4, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 0, 0, 0, 4, 13, 65,155,128, 0, 0, 0, 0, 0, 0, 0, 1, 7,160, 8, 32, 68, 65, 84, 65, 0, 0, 1, 44,
+ 13, 65,155,176, 0, 0, 1, 35, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 13, 65,157, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,100, 0, 0, 0, 32, 61,150, 2, 57, 0, 0, 0,
- 5, 0, 0, 0, 0, 0,128, 63,255,255,127, 63,255,255,251, 39, 0, 0, 0, 0,255,127, 2,255, 0, 0,128, 63, 0, 0,128,191,
- 0, 0, 2,168, 0, 0, 0, 0,255,127, 2,255, 1, 0,128,191,253,255,127,191,253,255,251,167, 0, 0, 0, 0,255,127, 2,255,
-250,255,127,191, 3, 0,128, 63, 3, 0, 2, 40, 0, 0, 0, 0,255,127, 2,255, 0,239,110, 59,131,164, 26, 60,235, 92, 14,189,
-228, 12, 95, 33, 28,133, 3,255, 68, 65, 84, 65, 44, 1, 0, 0,168,199,152, 2, 21, 1, 0, 0, 5, 0, 0, 0, 3, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,120,
+ 13, 65,157, 16, 0, 0, 0, 58, 0, 0, 0, 5, 63,128, 0, 0, 63,127,255,255, 39,251,255,255, 0, 0, 0, 0,127,255, 2,255,
+ 0, 0, 0, 0, 63,128, 0, 0,191,128, 0, 0,168, 2, 0, 0, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,191,128, 0, 1,
+191,127,255,253,167,251,255,253, 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0,191,127,255,250, 63,128, 0, 3, 40, 2, 0, 3,
+ 0, 0, 0, 0,127,255, 2,255, 0, 0, 0, 0, 59,110,239, 0, 60, 26,164,131,189, 14, 92,235, 12,228, 33, 95,133, 28, 3,255,
+ 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 1, 44, 13, 65,157,176, 0, 0, 1, 35, 0, 0, 0, 5, 0, 0, 0, 3, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152,134, 20, 3, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 65,159, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -12092,134 +12414,136 @@ char datatoc_preview_blend[]= {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 48, 0, 0, 0,152,134, 20, 3, 54, 0, 0, 0, 4, 0, 0, 0, 1, 0, 0, 0,
- 2, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 34, 0,
- 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 34, 0, 68, 65, 84, 65, 44, 1, 0, 0, 8,201,152, 2, 21, 1, 0, 0, 5, 0, 0, 0,
- 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 86,169, 2, 5, 0, 0, 0,
- 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 86, 84,101,120, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192,100,169, 2, 6, 0, 0, 0, 64, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67,111,108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152,118,148, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 48, 13, 65,159, 16, 0, 0, 0, 55, 0, 0, 0, 4, 0, 0, 0, 1, 0, 0, 0, 2,
+ 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 34, 0, 0, 0, 2,
+ 0, 0, 0, 3, 0, 0, 0, 34, 68, 65, 84, 65, 0, 0, 1, 44, 13, 65,159,112, 0, 0, 1, 35, 0, 0, 0, 5, 0, 0, 0, 4,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 65,160,208, 0, 0, 0, 5, 0, 0, 0, 20,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 86, 84,101,120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 65,161, 16, 0, 0, 0, 6, 0, 0, 0, 64, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67,111,108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 65,161,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 20, 0, 0, 0, 56, 86,169, 2, 53, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 3, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 44, 0, 0, 0,192,100,169, 2,
- 61, 0, 0, 0, 1, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 68, 65, 84, 65, 16, 0, 0, 0,152,118,148, 2,
- 58, 0, 0, 0, 4, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 77, 69, 0, 0, 12, 1, 0, 0,
-104,202,152, 2, 51, 0, 0, 0, 1, 0, 0, 0,152, 47,161, 2, 8,197,152, 2, 0, 0, 0, 0, 0, 0, 0, 0, 77, 69,112,114,
-101,118,105,101,119, 46, 48, 48, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 3,153, 2, 96, 33,164, 2,152, 91,169, 2,
- 0, 0, 0, 0,128,175, 20, 3,128, 40,150, 2, 0, 0, 0, 0,112,187,147, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-168,203,152, 2, 1, 0, 0, 0, 5, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 8,205,152, 2, 1, 0, 0, 0, 5, 0, 0, 0,
- 12, 0, 0, 0, 0, 0, 0, 0, 56, 46,161, 2, 3, 0, 0, 0, 5, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0,
- 4, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,128,179, 0, 0, 64, 52, 0, 0,192, 28,
- 0, 0,128, 63, 2, 0,128, 63,172,197, 39, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 30, 0, 4, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 4, 0, 0, 0,
- 72, 3,153, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0,147,165, 2, 68, 65, 84, 65, 44, 1, 0, 0,168,203,152, 2, 21, 1, 0, 0,
- 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,175, 20, 3,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 20, 13, 65,160,208, 0, 0, 0, 54, 0, 0, 0, 1, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 44, 13, 65,161, 16, 0, 0, 0, 65,
+ 0, 0, 0, 1, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 16, 13, 65,161,112, 0, 0, 0, 59,
+ 0, 0, 0, 4,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 77, 69, 0, 0, 1, 24, 13, 65,161,176,
+ 0, 0, 0, 52, 0, 0, 0, 1, 13, 65,169, 16, 13, 65,154, 64, 0, 0, 0, 0, 0, 0, 0, 0, 77, 69,112,114,101,118,105,101,
+119, 46, 48, 48, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 65,162,240, 13, 65,168, 48, 13, 65,168,112, 0, 0, 0, 0,
+ 13, 65,164,128, 13, 65,166,112, 0, 0, 0, 0, 13, 65,168,208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 65,163, 32,
+ 0, 0, 0, 1, 0, 0, 0, 5, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 13, 65,165, 16, 0, 0, 0, 1, 0, 0, 0, 5,
+ 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 13, 65,166,208, 0, 0, 0, 3, 0, 0, 0, 5, 0, 0, 0, 80, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 4, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,179,128, 0, 0,
+ 52, 64, 0, 0, 28,192, 0, 0, 63,128, 0, 0, 63,128, 0, 2, 55, 39,197,172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 4, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 0, 0, 0, 4, 13, 65,162,240, 0, 0, 0, 0, 0, 0, 0, 1, 7,160, 16, 32, 68, 65, 84, 65, 0, 0, 1, 44,
+ 13, 65,163, 32, 0, 0, 1, 35, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 13, 65,164,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 80, 0, 0, 0,128,175, 20, 3, 57, 0, 0, 0,
- 4, 0, 0, 0, 0, 0,128, 63,255,255,127, 63,255,255,251, 39, 0, 0, 0, 0,255,127, 3,255, 0, 0,128, 63, 0, 0,128,191,
- 0, 0, 2,168, 0, 0, 0, 0,255,127, 3,255, 1, 0,128,191,253,255,127,191,253,255,251,167, 0, 0, 0, 0,255,127, 3,255,
-250,255,127,191, 3, 0,128, 63, 3, 0, 2, 40, 0, 0, 0, 0,255,127, 3,255, 68, 65, 84, 65, 44, 1, 0, 0, 8,205,152, 2,
- 21, 1, 0, 0, 5, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-128, 40,150, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 96,
+ 13, 65,164,128, 0, 0, 0, 58, 0, 0, 0, 4, 63,128, 0, 0, 63,127,255,255, 39,251,255,255, 0, 0, 0, 0,127,255, 3,255,
+ 0, 0, 0, 0, 63,128, 0, 0,191,128, 0, 0,168, 2, 0, 0, 0, 0, 0, 0,127,255, 3,255, 0, 0, 0, 0,191,128, 0, 1,
+191,127,255,253,167,251,255,253, 0, 0, 0, 0,127,255, 3,255, 0, 0, 0, 0,191,127,255,250, 63,128, 0, 3, 40, 2, 0, 3,
+ 0, 0, 0, 0,127,255, 3,255, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 1, 44, 13, 65,165, 16, 0, 0, 1, 35, 0, 0, 0, 5,
+ 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 65,166,112, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 48, 0, 0, 0,128, 40,150, 2,
- 54, 0, 0, 0, 4, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 35, 0,
- 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 35, 0, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 35, 0, 68, 65, 84, 65, 44, 1, 0, 0,
- 56, 46,161, 2, 21, 1, 0, 0, 5, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 96, 33,164, 2, 5, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 85, 86, 84,101,120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-152, 91,169, 2, 6, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67,111,108, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,112,187,147, 2,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 48, 13, 65,166,112, 0, 0, 0, 55, 0, 0, 0, 4,
+ 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 0, 35, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 35, 68, 65, 84, 65, 0, 0, 1, 44, 13, 65,166,208, 0, 0, 1, 35,
+ 0, 0, 0, 5, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 65,168, 48,
+ 0, 0, 0, 5, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 86, 84,101,120, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 65,168,112, 0, 0, 0, 6,
+ 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67,111,108, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 65,168,208, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 20, 0, 0, 0,
- 96, 33,164, 2, 53, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 2,
- 68, 65, 84, 65, 44, 0, 0, 0,152, 91,169, 2, 61, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 16, 0, 0, 0,112,187,147, 2, 58, 0, 0, 0, 4, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,
-255,255,255,255, 77, 69, 0, 0, 12, 1, 0, 0,152, 47,161, 2, 51, 0, 0, 0, 1, 0, 0, 0,248, 52,161, 2,104,202,152, 2,
- 0, 0, 0, 0, 0, 0, 0, 0, 77, 69,112,114,101,118,105,101,119, 46, 48, 48, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 88, 14,167, 2,152,110,126, 2,168,144, 8, 3, 0, 0, 0, 0,104,206,152, 2,160, 93,169, 2, 0, 0, 0, 0,232,110,127, 2,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216, 48,161, 2, 1, 0, 0, 0, 5, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0,
- 56, 50,161, 2, 1, 0, 0, 0, 5, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0,152, 51,161, 2, 3, 0, 0, 0, 5, 0, 0, 0,
- 80, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 4, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0,128,179, 0, 0, 64, 52, 0, 0,192, 28, 0, 0,128, 63, 2, 0,128, 63,172,197, 39, 55, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 4, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 4, 0, 0, 0, 88, 14,167, 2, 0, 0, 0, 0, 1, 0, 0, 0,248, 6,131, 2, 68, 65, 84, 65,
- 44, 1, 0, 0,216, 48,161, 2, 21, 1, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 20, 13, 65,168, 48, 0, 0, 0, 54,
+ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 2, 68, 65, 84, 65, 0, 0, 0, 44,
+ 13, 65,168,112, 0, 0, 0, 65, 0, 0, 0, 1, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 16,
+ 13, 65,168,208, 0, 0, 0, 59, 0, 0, 0, 4,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 77, 69,
+ 0, 0, 1, 24, 13, 65,169, 16, 0, 0, 0, 52, 0, 0, 0, 1, 13, 65,176,112, 13, 65,161,176, 0, 0, 0, 0, 0, 0, 0, 0,
+ 77, 69,112,114,101,118,105,101,119, 46, 48, 48, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 65,170, 80, 13, 65,175,144,
+ 13, 65,175,208, 0, 0, 0, 0, 13, 65,171,224, 13, 65,173,208, 0, 0, 0, 0, 13, 65,176, 48, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 13, 65,170,128, 0, 0, 0, 1, 0, 0, 0, 5, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 13, 65,172,112,
+ 0, 0, 0, 1, 0, 0, 0, 5, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 13, 65,174, 48, 0, 0, 0, 3, 0, 0, 0, 5,
+ 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 4, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 1,179,128, 0, 0, 52, 64, 0, 0, 28,192, 0, 0, 63,128, 0, 0, 63,128, 0, 2, 55, 39,197,172, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 4, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 4, 13, 65,170, 80, 0, 0, 0, 0, 0, 0, 0, 1, 7,160, 24, 32,
+ 68, 65, 84, 65, 0, 0, 1, 44, 13, 65,170,128, 0, 0, 1, 35, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,104,206,152, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 65,171,224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 80, 0, 0, 0,104,206,152, 2, 57, 0, 0, 0, 4, 0, 0, 0, 0, 0,128, 63,255,255,127, 63,255,255,251, 39, 0, 0, 0, 0,
-255,127, 3,255, 0, 0,128, 63, 0, 0,128,191, 0, 0, 2,168, 0, 0, 0, 0,255,127, 3,255, 1, 0,128,191,253,255,127,191,
-253,255,251,167, 0, 0, 0, 0,255,127, 3,255,250,255,127,191, 3, 0,128, 63, 3, 0, 2, 40, 0, 0, 0, 0,255,127, 3,255,
- 68, 65, 84, 65, 44, 1, 0, 0, 56, 50,161, 2, 21, 1, 0, 0, 5, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 93,169, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 0, 0, 0, 96, 13, 65,171,224, 0, 0, 0, 58, 0, 0, 0, 4, 63,128, 0, 0, 63,127,255,255, 39,251,255,255,
+ 0, 0, 0, 0,127,255, 3,255, 0, 0, 0, 0, 63,128, 0, 0,191,128, 0, 0,168, 2, 0, 0, 0, 0, 0, 0,127,255, 3,255,
+ 0, 0, 0, 0,191,128, 0, 1,191,127,255,253,167,251,255,253, 0, 0, 0, 0,127,255, 3,255, 0, 0, 0, 0,191,127,255,250,
+ 63,128, 0, 3, 40, 2, 0, 3, 0, 0, 0, 0,127,255, 3,255, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 1, 44, 13, 65,172,112,
+ 0, 0, 1, 35, 0, 0, 0, 5, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 65,173,208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 48, 0, 0, 0,160, 93,169, 2, 54, 0, 0, 0, 4, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 35, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 35, 0, 2, 0, 0, 0, 3, 0, 0, 0,
- 0, 0, 35, 0, 68, 65, 84, 65, 44, 1, 0, 0,152, 51,161, 2, 21, 1, 0, 0, 5, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 48, 13, 65,173,208,
+ 0, 0, 0, 55, 0, 0, 0, 4, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 35,
+ 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 35, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 35, 68, 65, 84, 65, 0, 0, 1, 44,
+ 13, 65,174, 48, 0, 0, 1, 35, 0, 0, 0, 5, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152,110,126, 2, 5, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 86, 84,101,120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,168,144, 8, 3, 6, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 67,111,108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,232,110,127, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 13, 65,175,144, 0, 0, 0, 5, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 85, 86, 84,101,120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 65,175,208, 0, 0, 0, 6, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67,111,108, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 65,176, 48,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 20, 0, 0, 0,152,110,126, 2, 53, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,
- 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 2, 68, 65, 84, 65, 44, 0, 0, 0,168,144, 8, 3, 61, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 68, 65, 84, 65, 16, 0, 0, 0,232,110,127, 2, 58, 0, 0, 0, 4, 0, 0, 0,
-255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 77, 69, 0, 0, 12, 1, 0, 0,248, 52,161, 2, 51, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0,152, 47,161, 2, 0, 0, 0, 0, 0, 0, 0, 0, 77, 69, 67,117, 98,101, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,224, 25,167, 2,136,107,169, 2, 88, 58,161, 2, 0, 0, 0, 0,248,131, 20, 3,
- 56, 53,132, 2, 0, 0, 0, 0, 0,204,156, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 54,161, 2, 1, 0, 0, 0,
- 5, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0,152, 55,161, 2, 1, 0, 0, 0, 5, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0,
-248, 56,161, 2, 3, 0, 0, 0, 5, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 12, 0, 0, 0, 6, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,128, 51, 0, 0, 0,180, 0, 0, 0, 0, 4, 0,128, 63, 4, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 4, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 4, 0, 0, 0,224, 25,167, 2, 0, 0, 0, 0,
- 1, 0, 0, 0,152,140,165, 2, 68, 65, 84, 65, 44, 1, 0, 0, 56, 54,161, 2, 21, 1, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 20,
+ 13, 65,175,144, 0, 0, 0, 54, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 2,
+ 68, 65, 84, 65, 0, 0, 0, 44, 13, 65,175,208, 0, 0, 0, 65, 0, 0, 0, 1, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
+ 68, 65, 84, 65, 0, 0, 0, 16, 13, 65,176, 48, 0, 0, 0, 59, 0, 0, 0, 4,255,255,255,255,255,255,255,255,255,255,255,255,
+255,255,255,255, 0, 0, 77, 69, 0, 0, 1, 24, 13, 65,176,112, 0, 0, 0, 52, 0, 0, 0, 1, 0, 0, 0, 0, 13, 65,169, 16,
+ 0, 0, 0, 0, 0, 0, 0, 0, 77, 69, 67,117, 98,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 65,177,176, 13, 65,183,176, 13, 65,184, 80, 0, 0, 0, 0, 13, 65,179, 64, 13, 65,181,144, 0, 0, 0, 0, 13, 65,185,128,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 65,177,224, 0, 0, 0, 1, 0, 0, 0, 5, 0, 0, 0, 20, 0, 0, 0, 0,
+ 0, 0, 0, 0, 13, 65,180, 48, 0, 0, 0, 1, 0, 0, 0, 5, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 13, 65,182, 80,
+ 0, 0, 0, 3, 0, 0, 0, 5, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 12, 0, 0, 0, 6,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 51,128, 0, 0,180, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 4, 63,128, 0, 4,
+ 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 4, 0, 0, 0, 0,
+ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 4, 13, 65,177,176, 0, 0, 0, 0,
+ 0, 0, 0, 1, 7,160, 8, 32, 68, 65, 84, 65, 0, 0, 1, 44, 13, 65,177,224, 0, 0, 1, 35, 0, 0, 0, 5, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248,131, 20, 3, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 65,179, 64, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -12227,15 +12551,16 @@ char datatoc_preview_blend[]= {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,248,131, 20, 3, 57, 0, 0, 0, 8, 0, 0, 0, 0, 0,128, 63,
-255,255,127, 63, 0, 0,128,191,230, 73,230, 73, 26,182, 3,255, 0, 0,128, 63, 0, 0,128,191, 0, 0,128,191,230, 73, 26,182,
- 26,182, 3,255, 1, 0,128,191,253,255,127,191, 0, 0,128,191, 26,182, 26,182, 26,182, 3,255,250,255,127,191, 3, 0,128, 63,
- 0, 0,128,191, 26,182,230, 73, 26,182, 3,255, 4, 0,128, 63,247,255,127, 63, 0, 0,128, 63,230, 73,230, 73,230, 73, 3,255,
-245,255,127, 63, 5, 0,128,191, 0, 0,128, 63,230, 73, 26,182,230, 73, 3,255, 3, 0,128,191,250,255,127,191, 0, 0,128, 63,
- 26,182, 26,182,230, 73, 3,255,255,255,127,191, 0, 0,128, 63, 0, 0,128, 63, 26,182,230, 73,230, 73, 3,255, 68, 65, 84, 65,
- 44, 1, 0, 0,152, 55,161, 2, 21, 1, 0, 0, 5, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0,192, 13, 65,179, 64, 0, 0, 0, 58, 0, 0, 0, 8, 63,128, 0, 0,
+ 63,127,255,255,191,128, 0, 0, 73,230, 73,230,182, 26, 3,255, 0, 0, 0, 0, 63,128, 0, 0,191,128, 0, 0,191,128, 0, 0,
+ 73,230,182, 26,182, 26, 3,255, 0, 0, 0, 0,191,128, 0, 1,191,127,255,253,191,128, 0, 0,182, 26,182, 26,182, 26, 3,255,
+ 0, 0, 0, 0,191,127,255,250, 63,128, 0, 3,191,128, 0, 0,182, 26, 73,230,182, 26, 3,255, 0, 0, 0, 0, 63,128, 0, 4,
+ 63,127,255,247, 63,128, 0, 0, 73,230, 73,230, 73,230, 3,255, 0, 0, 0, 0, 63,127,255,245,191,128, 0, 5, 63,128, 0, 0,
+ 73,230,182, 26, 73,230, 3,255, 0, 0, 0, 0,191,128, 0, 3,191,127,255,250, 63,128, 0, 0,182, 26,182, 26, 73,230, 3,255,
+ 0, 0, 0, 0,191,127,255,255, 63,128, 0, 0, 63,128, 0, 0,182, 26, 73,230, 73,230, 3,255, 0, 0, 0, 0, 68, 65, 84, 65,
+ 0, 0, 1, 44, 13, 65,180, 48, 0, 0, 1, 35, 0, 0, 0, 5, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 56, 53,132, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 13, 65,181,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -12243,73 +12568,78 @@ char datatoc_preview_blend[]= {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
-144, 0, 0, 0, 56, 53,132, 2, 54, 0, 0, 0, 12, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 35, 0, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 35, 0,
- 4, 0, 0, 0, 5, 0, 0, 0, 0, 0, 35, 0, 5, 0, 0, 0, 6, 0, 0, 0, 0, 0, 35, 0, 6, 0, 0, 0, 7, 0, 0, 0,
- 0, 0, 35, 0, 4, 0, 0, 0, 7, 0, 0, 0, 0, 0, 35, 0, 1, 0, 0, 0, 5, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0,
- 4, 0, 0, 0, 0, 0, 35, 0, 2, 0, 0, 0, 6, 0, 0, 0, 0, 0, 35, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 35, 0,
- 68, 65, 84, 65, 44, 1, 0, 0,248, 56,161, 2, 21, 1, 0, 0, 5, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,136,107,169, 2, 5, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,144, 13, 65,181,144, 0, 0, 0, 55, 0, 0, 0, 12, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 35, 0, 0, 0, 0,
+ 0, 0, 0, 1, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 35, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 35,
+ 0, 0, 0, 4, 0, 0, 0, 5, 0, 0, 0, 35, 0, 0, 0, 5, 0, 0, 0, 6, 0, 0, 0, 35, 0, 0, 0, 6, 0, 0, 0, 7,
+ 0, 0, 0, 35, 0, 0, 0, 4, 0, 0, 0, 7, 0, 0, 0, 35, 0, 0, 0, 1, 0, 0, 0, 5, 0, 0, 0, 35, 0, 0, 0, 0,
+ 0, 0, 0, 4, 0, 0, 0, 35, 0, 0, 0, 2, 0, 0, 0, 6, 0, 0, 0, 35, 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 35,
+ 68, 65, 84, 65, 0, 0, 1, 44, 13, 65,182, 80, 0, 0, 1, 35, 0, 0, 0, 5, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 65,183,176, 0, 0, 0, 5, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 85, 86, 84,101,120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 88, 58,161, 2, 6, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 13, 65,184, 80, 0, 0, 0, 6, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 67,111,108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,204,156, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65,120, 0, 0, 0,136,107,169, 2, 53, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0,
- 3, 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 0, 7, 0, 0, 0, 6, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0,
- 4, 0, 0, 0, 5, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 2, 1, 0, 0, 0, 5, 0, 0, 0, 6, 0, 0, 0, 2, 0, 0, 0,
- 0, 0, 0, 2, 2, 0, 0, 0, 6, 0, 0, 0, 7, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 0, 0, 0, 0, 0,
- 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 2, 68, 65, 84, 65, 8, 1, 0, 0, 88, 58,161, 2, 61, 0, 0, 0, 6, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0, 68, 65, 84, 65, 96, 0, 0, 0, 0,204,156, 2, 58, 0, 0, 0, 24, 0, 0, 0,255,255,255,255,
-255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 80, 65, 0, 0,
-220, 1, 0, 0,232,102,152, 2, 27, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 80, 65, 80, 83,121,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 18, 0, 0, 0, 2, 0, 1, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 4, 0,
- 6, 0, 8, 0, 5, 0, 5, 0, 3, 0,100, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 4, 0, 5, 0, 3, 0, 1, 0,
- 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0,128, 63,205,204,204, 61,
-205,204, 76, 63, 0, 0,128, 63, 0, 0,200, 66, 0, 0, 72, 66, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 63,
- 0, 0, 0, 0, 0, 0, 0, 0,150, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0,128, 41,182, 63, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,240,214, 35,189, 0, 0, 0, 0,184,155,196,189, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0,205,204, 76, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,205,204, 76, 62,
- 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0,128, 63,205,204, 76, 62,154,153,153, 62,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63,
- 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 1, 2, 3, 4, 5, 6, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 78, 65, 49,108,158, 0, 0,176, 98,130, 2, 0, 0, 0, 0, 1, 0, 0, 0,
- 83, 68, 78, 65, 78, 65, 77, 69,179, 8, 0, 0, 42,110,101,120,116, 0, 42,112,114,101,118, 0, 42,100, 97,116, 97, 0, 42,102,
-105,114,115,116, 0, 42,108, 97,115,116, 0,120, 0,121, 0,122, 0,119, 0,120,109,105,110, 0,120,109, 97,120, 0,121,109,105,
-110, 0,121,109, 97,120, 0, 42,112,111,105,110,116,101,114, 0,103,114,111,117,112, 0,118, 97,108, 0,112, 97,100, 0,110, 97,
-109,101, 91, 51, 50, 93, 0,116,121,112,101, 0,115,117, 98,116,121,112,101, 0,102,108, 97,103, 0,115, 97,118,101,100, 0,100,
- 97,116, 97, 0,108,101,110, 0,116,111,116, 97,108,108,101,110, 0, 42,110,101,119,105,100, 0, 42,108,105, 98, 0,110, 97,109,
-101, 91, 50, 52, 93, 0,117,115, 0,105, 99,111,110, 95,105,100, 0, 42,112,114,111,112,101,114,116,105,101,115, 0,105,100, 0,
- 42,105,100, 98,108,111, 99,107, 0, 42,102,105,108,101,100, 97,116, 97, 0,110, 97,109,101, 91, 50, 52, 48, 93, 0,102,105,108,
-101,110, 97,109,101, 91, 50, 52, 48, 93, 0,116,111,116, 0, 42,112, 97,114,101,110,116, 0,119, 91, 50, 93, 0,104, 91, 50, 93,
- 0, 99,104, 97,110,103,101,100, 91, 50, 93, 0,112, 97,100, 48, 0,112, 97,100, 49, 0, 42,114,101, 99,116, 91, 50, 93, 0, 99,
-117,114,118,101, 0, 99,117,114, 0, 98,108,111, 99,107,116,121,112,101, 0,115,104,111,119,107,101,121, 0,109,117,116,101,105,
-112,111, 0,112,111,115, 0, 99,117,114,118, 97,108, 0, 97,100,114, 99,111,100,101, 0,114,101,108, 97,116,105,118,101, 0,116,
-111,116,101,108,101,109, 0,112, 97,100, 50, 0, 42,119,101,105,103,104,116,115, 0,118,103,114,111,117,112, 91, 51, 50, 93, 0,
-115,108,105,100,101,114,109,105,110, 0,115,108,105,100,101,114,109, 97,120, 0, 42,114,101,102,107,101,121, 0,101,108,101,109,
-115,116,114, 91, 51, 50, 93, 0,101,108,101,109,115,105,122,101, 0, 98,108,111, 99,107, 0, 42,105,112,111, 0, 42,102,114,111,
-109, 0,116,111,116,107,101,121, 0,115,108,117,114,112,104, 0, 42, 42,115, 99,114,105,112,116,115, 0, 42,102,108, 97,103, 0,
- 97, 99,116,115, 99,114,105,112,116, 0,116,111,116,115, 99,114,105,112,116, 0, 42,108,105,110,101, 0, 42,102,111,114,109, 97,
-116, 0, 98,108,101,110, 0, 42,110, 97,109,101, 0,102,108, 97,103,115, 0,110,108,105,110,101,115, 0,108,105,110,101,115, 0,
- 42, 99,117,114,108, 0, 42,115,101,108,108, 0, 99,117,114, 99, 0,115,101,108, 99, 0, 42,117,110,100,111, 95, 98,117,102, 0,
-117,110,100,111, 95,112,111,115, 0,117,110,100,111, 95,108,101,110, 0, 42, 99,111,109,112,105,108,101,100, 0,115,105,122,101,
+ 0, 0, 0, 0, 13, 65,185,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 0, 0, 0,120, 13, 65,183,176, 0, 0, 0, 54, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2,
+ 0, 0, 0, 3, 0, 0, 0, 2, 0, 0, 0, 4, 0, 0, 0, 7, 0, 0, 0, 6, 0, 0, 0, 5, 0, 0, 0, 2, 0, 0, 0, 0,
+ 0, 0, 0, 4, 0, 0, 0, 5, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 5, 0, 0, 0, 6, 0, 0, 0, 2,
+ 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 6, 0, 0, 0, 7, 0, 0, 0, 3, 0, 0, 0, 2, 0, 0, 0, 4, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 2, 68, 65, 84, 65, 0, 0, 1, 8, 13, 65,184, 80, 0, 0, 0, 65, 0, 0, 0, 6,
+ 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0, 0, 0, 68, 65, 84, 65, 0, 0, 0, 96, 13, 65,185,128, 0, 0, 0, 59, 0, 0, 0, 24,255,255,255,255,
+255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 80, 65,
+ 0, 0, 1,224, 7,161, 74, 32, 0, 0, 1, 41, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 80, 65, 80, 83,121,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 18, 0, 2, 0, 1, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 4,
+ 0, 6, 0, 8, 0, 5, 0, 5, 0, 3, 0,100, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 4, 0, 5, 0, 3, 0, 1,
+ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,128, 63,128, 0, 0, 61,204,204,205,
+ 63, 76,204,205, 63,128, 0, 0, 66,200, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 63,128, 0, 0, 63, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,150, 0, 0, 0, 0, 0, 0, 0, 10, 63,182, 41,128, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0,189, 35,214,240, 0, 0, 0, 0,189,196,155,184, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 10, 0, 0, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 62, 76,204,205, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 76,204,205,
+ 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 63,128, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 65, 32, 0, 0, 63,128, 0, 0, 62, 76,204,205, 62,153,153,154,
+ 63,128, 0, 0, 63,128, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0,
+ 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 78, 65, 49, 0, 0,166,136, 12,150,192, 32, 0, 0, 0, 0,
+ 0, 0, 0, 1, 83, 68, 78, 65, 78, 65, 77, 69, 0, 0, 9, 22, 42,110,101,120,116, 0, 42,112,114,101,118, 0, 42,100, 97,116,
+ 97, 0, 42,102,105,114,115,116, 0, 42,108, 97,115,116, 0,120, 0,121, 0,122, 0,119, 0,120,109,105,110, 0,120,109, 97,120,
+ 0,121,109,105,110, 0,121,109, 97,120, 0, 42,112,111,105,110,116,101,114, 0,103,114,111,117,112, 0,118, 97,108, 0,118, 97,
+108, 50, 0,110, 97,109,101, 91, 51, 50, 93, 0,116,121,112,101, 0,115,117, 98,116,121,112,101, 0,102,108, 97,103, 0,115, 97,
+118,101,100, 0,100, 97,116, 97, 0,108,101,110, 0,116,111,116, 97,108,108,101,110, 0, 42,110,101,119,105,100, 0, 42,108,105,
+ 98, 0,110, 97,109,101, 91, 50, 52, 93, 0,117,115, 0,105, 99,111,110, 95,105,100, 0, 42,112,114,111,112,101,114,116,105,101,
+115, 0,105,100, 0, 42,105,100, 98,108,111, 99,107, 0, 42,102,105,108,101,100, 97,116, 97, 0,110, 97,109,101, 91, 50, 52, 48,
+ 93, 0,102,105,108,101,110, 97,109,101, 91, 50, 52, 48, 93, 0,116,111,116, 0,112, 97,100, 0, 42,112, 97,114,101,110,116, 0,
+119, 91, 50, 93, 0,104, 91, 50, 93, 0, 99,104, 97,110,103,101,100, 91, 50, 93, 0,112, 97,100, 48, 0,112, 97,100, 49, 0, 42,
+114,101, 99,116, 91, 50, 93, 0, 42,111, 98, 0, 98,108,111, 99,107,116,121,112,101, 0, 97,100,114, 99,111,100,101, 0,110, 97,
+109,101, 91, 49, 50, 56, 93, 0, 42, 98,112, 0, 42, 98,101,122,116, 0,109, 97,120,114, 99,116, 0,116,111,116,114, 99,116, 0,
+118, 97,114,116,121,112,101, 0,116,111,116,118,101,114,116, 0,105,112,111, 0,101,120,116,114, 97,112, 0,114,116, 0, 98,105,
+116,109, 97,115,107, 0,115,108,105,100,101, 95,109,105,110, 0,115,108,105,100,101, 95,109, 97,120, 0, 99,117,114,118, 97,108,
+ 0, 42,100,114,105,118,101,114, 0, 99,117,114,118,101, 0, 99,117,114, 0,115,104,111,119,107,101,121, 0,109,117,116,101,105,
+112,111, 0,112,111,115, 0,114,101,108, 97,116,105,118,101, 0,116,111,116,101,108,101,109, 0,112, 97,100, 50, 0, 42,119,101,
+105,103,104,116,115, 0,118,103,114,111,117,112, 91, 51, 50, 93, 0,115,108,105,100,101,114,109,105,110, 0,115,108,105,100,101,
+114,109, 97,120, 0, 42,114,101,102,107,101,121, 0,101,108,101,109,115,116,114, 91, 51, 50, 93, 0,101,108,101,109,115,105,122,
+101, 0, 98,108,111, 99,107, 0, 42,105,112,111, 0, 42,102,114,111,109, 0,116,111,116,107,101,121, 0,115,108,117,114,112,104,
+ 0, 42, 42,115, 99,114,105,112,116,115, 0, 42,102,108, 97,103, 0, 97, 99,116,115, 99,114,105,112,116, 0,116,111,116,115, 99,
+114,105,112,116, 0, 42,108,105,110,101, 0, 42,102,111,114,109, 97,116, 0, 98,108,101,110, 0,108,105,110,101,110,111, 0,115,
+116, 97,114,116, 0,101,110,100, 0,102,108, 97,103,115, 0, 99,111,108,111,114, 91, 52, 93, 0,112, 97,100, 91, 52, 93, 0, 42,
+110, 97,109,101, 0,110,108,105,110,101,115, 0,108,105,110,101,115, 0, 42, 99,117,114,108, 0, 42,115,101,108,108, 0, 99,117,
+114, 99, 0,115,101,108, 99, 0,109, 97,114,107,101,114,115, 0, 42,117,110,100,111, 95, 98,117,102, 0,117,110,100,111, 95,112,
+111,115, 0,117,110,100,111, 95,108,101,110, 0, 42, 99,111,109,112,105,108,101,100, 0,109,116,105,109,101, 0,115,105,122,101,
0,115,101,101,107, 0,112, 97,115,115,101,112, 97,114,116, 97,108,112,104, 97, 0, 97,110,103,108,101, 0, 99,108,105,112,115,
116, 97, 0, 99,108,105,112,101,110,100, 0,108,101,110,115, 0,111,114,116,104,111, 95,115, 99, 97,108,101, 0,100,114, 97,119,
115,105,122,101, 0,115,104,105,102,116,120, 0,115,104,105,102,116,121, 0, 89, 70, 95,100,111,102,100,105,115,116, 0, 89, 70,
@@ -12317,1247 +12647,1306 @@ char datatoc_preview_blend[]= {
89, 70, 95, 98,107,104,114,111,116, 0,115, 99,114,105,112,116,108,105,110,107, 0, 42,100,111,102, 95,111, 98, 0,102,114, 97,
109,101,110,114, 0,102,114, 97,109,101,115, 0,111,102,102,115,101,116, 0,115,102,114, 97, 0,102,105,101, 95,105,109, 97, 0,
99,121, 99,108, 0,111,107, 0,109,117,108,116,105, 95,105,110,100,101,120, 0,108, 97,121,101,114, 0,112, 97,115,115, 0,109,
-101,110,117,110,114, 0,105, 98,117,102,115, 0, 42, 97,110,105,109, 0, 42,114,114, 0,115,111,117,114, 99,101, 0,108, 97,115,
-116,102,114, 97,109,101, 0,116,112, 97,103,101,102,108, 97,103, 0,116,111,116, 98,105,110,100, 0,120,114,101,112, 0,121,114,
-101,112, 0,116,119,115,116, 97, 0,116,119,101,110,100, 0, 98,105,110,100, 99,111,100,101, 0, 42,114,101,112, 98,105,110,100,
- 0, 42,112, 97, 99,107,101,100,102,105,108,101, 0, 42,112,114,101,118,105,101,119, 0,108, 97,115,116,117,112,100, 97,116,101,
- 0,108, 97,115,116,117,115,101,100, 0, 97,110,105,109,115,112,101,101,100, 0,103,101,110, 95,120, 0,103,101,110, 95,121, 0,
-103,101,110, 95,116,121,112,101, 0, 97,115,112,120, 0, 97,115,112,121, 0, 42,118,110,111,100,101, 0,116,101,120, 99,111, 0,
-109, 97,112,116,111, 0,109, 97,112,116,111,110,101,103, 0, 98,108,101,110,100,116,121,112,101, 0, 42,111, 98,106,101, 99,116,
- 0, 42,116,101,120, 0,117,118,110, 97,109,101, 91, 51, 50, 93, 0,112,114,111,106,120, 0,112,114,111,106,121, 0,112,114,111,
-106,122, 0,109, 97,112,112,105,110,103, 0,111,102,115, 91, 51, 93, 0,115,105,122,101, 91, 51, 93, 0,116,101,120,102,108, 97,
-103, 0, 99,111,108,111,114,109,111,100,101,108, 0,112,109, 97,112,116,111, 0,112,109, 97,112,116,111,110,101,103, 0,110,111,
-114,109, 97,112,115,112, 97, 99,101, 0,112, 97,100, 91, 51, 93, 0,114, 0,103, 0, 98, 0,107, 0,100,101,102, 95,118, 97,114,
- 0,114,116, 0, 99,111,108,102, 97, 99, 0,110,111,114,102, 97, 99, 0,118, 97,114,102, 97, 99, 0,100,105,115,112,102, 97, 99,
- 0,119, 97,114,112,102, 97, 99, 0,110, 97,109,101, 91, 49, 54, 48, 93, 0, 42,104, 97,110,100,108,101, 0, 42,112,110, 97,109,
-101, 0, 42,115,116,110, 97,109,101,115, 0,115,116,121,112,101,115, 0,118, 97,114,115, 0, 42,118, 97,114,115,116,114, 0, 42,
-114,101,115,117,108,116, 0, 42, 99,102,114, 97, 0,100, 97,116, 97, 91, 51, 50, 93, 0, 40, 42,100,111,105,116, 41, 40, 41, 0,
- 40, 42,105,110,115,116, 97,110, 99,101, 95,105,110,105,116, 41, 40, 41, 0, 40, 42, 99, 97,108,108, 98, 97, 99,107, 41, 40, 41,
- 0,118,101,114,115,105,111,110, 0, 97, 0,105,112,111,116,121,112,101, 0, 42,105,109, 97, 0, 42, 99,117, 98,101, 91, 54, 93,
- 0,105,109, 97,116, 91, 52, 93, 91, 52, 93, 0,111, 98,105,109, 97,116, 91, 51, 93, 91, 51, 93, 0,115,116,121,112,101, 0,118,
-105,101,119,115, 99, 97,108,101, 0,110,111,116,108, 97,121, 0, 99,117, 98,101,114,101,115, 0,100,101,112,116,104, 0,114,101,
- 99, 97,108, 99, 0,108, 97,115,116,115,105,122,101, 0,110,111,105,115,101,115,105,122,101, 0,116,117,114, 98,117,108, 0, 98,
-114,105,103,104,116, 0, 99,111,110,116,114, 97,115,116, 0,114,102, 97, 99, 0,103,102, 97, 99, 0, 98,102, 97, 99, 0,102,105,
-108,116,101,114,115,105,122,101, 0,109,103, 95, 72, 0,109,103, 95,108, 97, 99,117,110, 97,114,105,116,121, 0,109,103, 95,111,
- 99,116, 97,118,101,115, 0,109,103, 95,111,102,102,115,101,116, 0,109,103, 95,103, 97,105,110, 0,100,105,115,116, 95, 97,109,
-111,117,110,116, 0,110,115, 95,111,117,116,115, 99, 97,108,101, 0,118,110, 95,119, 49, 0,118,110, 95,119, 50, 0,118,110, 95,
-119, 51, 0,118,110, 95,119, 52, 0,118,110, 95,109,101,120,112, 0,118,110, 95,100,105,115,116,109, 0,118,110, 95, 99,111,108,
-116,121,112,101, 0,110,111,105,115,101,100,101,112,116,104, 0,110,111,105,115,101,116,121,112,101, 0,110,111,105,115,101, 98,
- 97,115,105,115, 0,110,111,105,115,101, 98, 97,115,105,115, 50, 0,105,109, 97,102,108, 97,103, 0, 99,114,111,112,120,109,105,
-110, 0, 99,114,111,112,121,109,105,110, 0, 99,114,111,112,120,109, 97,120, 0, 99,114,111,112,121,109, 97,120, 0,120,114,101,
-112,101, 97,116, 0,121,114,101,112,101, 97,116, 0,101,120,116,101,110,100, 0, 99,104,101, 99,107,101,114,100,105,115,116, 0,
-110, 97, 98,108, 97, 0,105,117,115,101,114, 0, 42,112,108,117,103,105,110, 0, 42, 99,111, 98, 97, 0, 42,101,110,118, 0,108,
-111, 99, 91, 51, 93, 0,114,111,116, 91, 51, 93, 0,109, 97,116, 91, 52, 93, 91, 52, 93, 0,109,105,110, 91, 51, 93, 0,109, 97,
-120, 91, 51, 93, 0, 42,111, 98, 0,109,111,100,101, 0,116,111,116,101,120, 0,101,110,101,114,103,121, 0,100,105,115,116, 0,
-115,112,111,116,115,105,122,101, 0,115,112,111,116, 98,108,101,110,100, 0,104, 97,105,110,116, 0, 97,116,116, 49, 0, 97,116,
-116, 50, 0, 42, 99,117,114,102, 97,108,108,111,102,102, 0,102, 97,108,108,111,102,102, 95,116,121,112,101, 0,112, 97,100, 51,
- 0,115,104, 97,100,115,112,111,116,115,105,122,101, 0, 98,105, 97,115, 0,115,111,102,116, 0, 98,117,102,115,105,122,101, 0,
-115, 97,109,112, 0, 98,117,102,102,101,114,115, 0,102,105,108,116,101,114,116,121,112,101, 0, 98,117,102,102,108, 97,103, 0,
- 98,117,102,116,121,112,101, 0,114, 97,121, 95,115, 97,109,112, 0,114, 97,121, 95,115, 97,109,112,121, 0,114, 97,121, 95,115,
- 97,109,112,122, 0,114, 97,121, 95,115, 97,109,112, 95,116,121,112,101, 0, 97,114,101, 97, 95,115,104, 97,112,101, 0, 97,114,
-101, 97, 95,115,105,122,101, 0, 97,114,101, 97, 95,115,105,122,101,121, 0, 97,114,101, 97, 95,115,105,122,101,122, 0, 97,100,
- 97,112,116, 95,116,104,114,101,115,104, 0,114, 97,121, 95,115, 97,109,112, 95,109,101,116,104,111,100, 0,116,101,120, 97, 99,
-116, 0,115,104, 97,100,104, 97,108,111,115,116,101,112, 0, 89, 70, 95,110,117,109,112,104,111,116,111,110,115, 0, 89, 70, 95,
-110,117,109,115,101, 97,114, 99,104, 0, 89, 70, 95,112,104,100,101,112,116,104, 0, 89, 70, 95,117,115,101,113,109, 99, 0, 89,
- 70, 95, 98,117,102,115,105,122,101, 0, 89, 70, 95,112, 97,100, 0, 89, 70, 95, 99, 97,117,115,116,105, 99, 98,108,117,114, 0,
- 89, 70, 95,108,116,114, 97,100,105,117,115, 0, 89, 70, 95,103,108,111,119,105,110,116, 0, 89, 70, 95,103,108,111,119,111,102,
-115, 0, 89, 70, 95,103,108,111,119,116,121,112,101, 0, 89, 70, 95,112, 97,100, 50, 0, 42,109,116,101,120, 91, 49, 48, 93, 0,
-115,112,101, 99,114, 0,115,112,101, 99,103, 0,115,112,101, 99, 98, 0,109,105,114,114, 0,109,105,114,103, 0,109,105,114, 98,
- 0, 97,109, 98,114, 0, 97,109, 98, 98, 0, 97,109, 98,103, 0, 97,109, 98, 0,101,109,105,116, 0, 97,110,103, 0,115,112,101,
- 99,116,114, 97, 0,114, 97,121, 95,109,105,114,114,111,114, 0, 97,108,112,104, 97, 0,114,101,102, 0,115,112,101, 99, 0,122,
-111,102,102,115, 0, 97,100,100, 0,116,114, 97,110,115,108,117, 99,101,110, 99,121, 0,102,114,101,115,110,101,108, 95,109,105,
-114, 0,102,114,101,115,110,101,108, 95,109,105,114, 95,105, 0,102,114,101,115,110,101,108, 95,116,114, 97, 0,102,114,101,115,
-110,101,108, 95,116,114, 97, 95,105, 0,102,105,108,116,101,114, 0,116,120, 95,108,105,109,105,116, 0,116,120, 95,102, 97,108,
-108,111,102,102, 0,114, 97,121, 95,100,101,112,116,104, 0,114, 97,121, 95,100,101,112,116,104, 95,116,114, 97, 0,104, 97,114,
- 0,115,101,101,100, 49, 0,115,101,101,100, 50, 0,103,108,111,115,115, 95,109,105,114, 0,103,108,111,115,115, 95,116,114, 97,
- 0,115, 97,109,112, 95,103,108,111,115,115, 95,109,105,114, 0,115, 97,109,112, 95,103,108,111,115,115, 95,116,114, 97, 0, 97,
-100, 97,112,116, 95,116,104,114,101,115,104, 95,109,105,114, 0, 97,100, 97,112,116, 95,116,104,114,101,115,104, 95,116,114, 97,
- 0, 97,110,105,115,111, 95,103,108,111,115,115, 95,109,105,114, 0,100,105,115,116, 95,109,105,114, 0,102, 97,100,101,116,111,
- 95,109,105,114, 0,115,104, 97,100,101, 95,102,108, 97,103, 0,109,111,100,101, 95,108, 0,102,108, 97,114,101, 99, 0,115,116,
- 97,114, 99, 0,108,105,110,101, 99, 0,114,105,110,103, 99, 0,104, 97,115,105,122,101, 0,102,108, 97,114,101,115,105,122,101,
- 0,115,117, 98,115,105,122,101, 0,102,108, 97,114,101, 98,111,111,115,116, 0,115,116,114, 97,110,100, 95,115,116, 97, 0,115,
-116,114, 97,110,100, 95,101,110,100, 0,115,116,114, 97,110,100, 95,101, 97,115,101, 0,115,116,114, 97,110,100, 95,115,117,114,
-102,110,111,114, 0,115,116,114, 97,110,100, 95,109,105,110, 0,115,116,114, 97,110,100, 95,119,105,100,116,104,102, 97,100,101,
- 0,115,116,114, 97,110,100, 95,117,118,110, 97,109,101, 91, 51, 50, 93, 0,115, 98,105, 97,115, 0,108, 98,105, 97,115, 0,115,
-104, 97,100, 95, 97,108,112,104, 97, 0,112, 97,100,102, 0,114,103, 98,115,101,108, 0,112,114, 95,116,121,112,101, 0,117,115,
-101, 95,110,111,100,101,115, 0,112,114, 95, 98, 97, 99,107, 0,112,114, 95,108, 97,109,112, 0,115,101,112,116,101,120, 0,109,
-108, 95,102,108, 97,103, 0,100,105,102,102, 95,115,104, 97,100,101,114, 0,115,112,101, 99, 95,115,104, 97,100,101,114, 0,114,
-111,117,103,104,110,101,115,115, 0,114,101,102,114, 97, 99, 0,112, 97,114, 97,109, 91, 52, 93, 0,114,109,115, 0,100, 97,114,
-107,110,101,115,115, 0, 42,114, 97,109,112, 95, 99,111,108, 0, 42,114, 97,109,112, 95,115,112,101, 99, 0,114, 97,109,112,105,
-110, 95, 99,111,108, 0,114, 97,109,112,105,110, 95,115,112,101, 99, 0,114, 97,109,112, 98,108,101,110,100, 95, 99,111,108, 0,
-114, 97,109,112, 98,108,101,110,100, 95,115,112,101, 99, 0,114, 97,109,112, 95,115,104,111,119, 0,114, 97,109,112,102, 97, 99,
- 95, 99,111,108, 0,114, 97,109,112,102, 97, 99, 95,115,112,101, 99, 0, 42,110,111,100,101,116,114,101,101, 0, 42,103,114,111,
-117,112, 0,102,114,105, 99,116,105,111,110, 0,102,104, 0,114,101,102,108,101, 99,116, 0,102,104,100,105,115,116, 0,120,121,
-102,114,105, 99,116, 0,100,121,110, 97,109,111,100,101, 0,115,115,115, 95,114, 97,100,105,117,115, 91, 51, 93, 0,115,115,115,
- 95, 99,111,108, 91, 51, 93, 0,115,115,115, 95,101,114,114,111,114, 0,115,115,115, 95,115, 99, 97,108,101, 0,115,115,115, 95,
-105,111,114, 0,115,115,115, 95, 99,111,108,102, 97, 99, 0,115,115,115, 95,116,101,120,102, 97, 99, 0,115,115,115, 95,102,114,
-111,110,116, 0,115,115,115, 95, 98, 97, 99,107, 0,115,115,115, 95,102,108, 97,103, 0,115,115,115, 95,112,114,101,115,101,116,
- 0, 89, 70, 95, 97,114, 0, 89, 70, 95, 97,103, 0, 89, 70, 95, 97, 98, 0, 89, 70, 95,100,115, 99, 97,108,101, 0, 89, 70, 95,
-100,112,119,114, 0, 89, 70, 95,100,115,109,112, 0, 89, 70, 95,112,114,101,115,101,116, 0, 89, 70, 95,100,106,105,116, 0,110,
- 97,109,101, 91, 50, 53, 54, 93, 0,115, 99, 97,108,101, 0, 42, 98, 98, 0,105, 49, 0,106, 49, 0,107, 49, 0,105, 50, 0,106,
- 50, 0,107, 50, 0,115,101,108, 99,111,108, 49, 0,115,101,108, 99,111,108, 50, 0,113,117, 97,116, 91, 52, 93, 0,101,120,112,
-120, 0,101,120,112,121, 0,101,120,112,122, 0,114, 97,100, 0,114, 97,100, 50, 0,115, 0, 42,109, 97,116, 0, 42,105,109, 97,
-116, 0,101,108,101,109,115, 0,100,105,115,112, 0, 42, 42,109, 97,116, 0,116,111,116, 99,111,108, 0,119,105,114,101,115,105,
-122,101, 0,114,101,110,100,101,114,115,105,122,101, 0,116,104,114,101,115,104, 0,118,101, 99, 91, 51, 93, 91, 51, 93, 0, 97,
-108,102, 97, 0,119,101,105,103,104,116, 0,114, 97,100,105,117,115, 0,104, 49, 0,104, 50, 0,102, 49, 0,102, 50, 0,102, 51,
- 0,104,105,100,101, 0,118,101, 99, 91, 52, 93, 0,109, 97,116, 95,110,114, 0,112,110,116,115,117, 0,112,110,116,115,118, 0,
-114,101,115,111,108,117, 0,114,101,115,111,108,118, 0,111,114,100,101,114,117, 0,111,114,100,101,114,118, 0,102,108, 97,103,
-117, 0,102,108, 97,103,118, 0, 42,107,110,111,116,115,117, 0, 42,107,110,111,116,115,118, 0, 42, 98,112, 0, 42, 98,101,122,
-116, 0,116,105,108,116, 95,105,110,116,101,114,112, 0, 99,104, 97,114,105,100,120, 0,107,101,114,110, 0,104, 0,110,117,114,
- 98, 0, 42, 98,101,118,111, 98,106, 0, 42,116, 97,112,101,114,111, 98,106, 0, 42,116,101,120,116,111,110, 99,117,114,118,101,
- 0, 42,112, 97,116,104, 0, 42,107,101,121, 0, 98,101,118, 0,112, 97,116,104,108,101,110, 0, 98,101,118,114,101,115,111,108,
- 0,119,105,100,116,104, 0,101,120,116, 49, 0,101,120,116, 50, 0,114,101,115,111,108,117, 95,114,101,110, 0,114,101,115,111,
-108,118, 95,114,101,110, 0,115,112, 97, 99,101,109,111,100,101, 0,115,112, 97, 99,105,110,103, 0,108,105,110,101,100,105,115,
-116, 0,115,104,101, 97,114, 0,102,115,105,122,101, 0,119,111,114,100,115,112, 97, 99,101, 0,117,108,112,111,115, 0,117,108,
-104,101,105,103,104,116, 0,120,111,102, 0,121,111,102, 0,108,105,110,101,119,105,100,116,104, 0, 42,115,116,114, 0,102, 97,
-109,105,108,121, 91, 50, 52, 93, 0, 42,118,102,111,110,116, 0, 42,118,102,111,110,116, 98, 0, 42,118,102,111,110,116,105, 0,
- 42,118,102,111,110,116, 98,105, 0,115,101,112, 99,104, 97,114, 0,116,111,116, 98,111,120, 0, 97, 99,116, 98,111,120, 0, 42,
-116, 98, 0,115,101,108,115,116, 97,114,116, 0,115,101,108,101,110,100, 0, 42,115,116,114,105,110,102,111, 0, 99,117,114,105,
-110,102,111, 0,110, 97,109,101, 91, 49, 50, 56, 93, 0,109, 97,120,114, 99,116, 0,116,111,116,114, 99,116, 0,118, 97,114,116,
-121,112,101, 0,116,111,116,118,101,114,116, 0,105,112,111, 0,101,120,116,114, 97,112, 0, 98,105,116,109, 97,115,107, 0,115,
-108,105,100,101, 95,109,105,110, 0,115,108,105,100,101, 95,109, 97,120, 0, 42,100,114,105,118,101,114, 0,101,102,102,101, 99,
-116, 0, 42,109,102, 97, 99,101, 0, 42,109,116,102, 97, 99,101, 0, 42,116,102, 97, 99,101, 0, 42,109,118,101,114,116, 0, 42,
-109,101,100,103,101, 0, 42,100,118,101,114,116, 0, 42,109, 99,111,108, 0, 42,109,115,116,105, 99,107,121, 0, 42,116,101,120,
- 99,111,109,101,115,104, 0, 42,109,115,101,108,101, 99,116, 0,118,100, 97,116, 97, 0,101,100, 97,116, 97, 0,102,100, 97,116,
- 97, 0,116,111,116,101,100,103,101, 0,116,111,116,102, 97, 99,101, 0,116,111,116,115,101,108,101, 99,116, 0, 97, 99,116, 95,
-102, 97, 99,101, 0, 99,117, 98,101,109, 97,112,115,105,122,101, 0,115,109,111,111,116,104,114,101,115,104, 0,115,117, 98,100,
-105,118, 0,115,117, 98,100,105,118,114, 0,115,117, 98,115,117,114,102,116,121,112,101, 0, 42,109,114, 0, 42,112,118, 0, 42,
-116,112, 97,103,101, 0,117,118, 91, 52, 93, 91, 50, 93, 0, 99,111,108, 91, 52, 93, 0,116,114, 97,110,115,112, 0,116,105,108,
-101, 0,117,110,119,114, 97,112, 0,118, 49, 0,118, 50, 0,118, 51, 0,118, 52, 0,101,100, 99,111,100,101, 0, 99,114,101, 97,
-115,101, 0,100,101,102, 95,110,114, 0, 42,100,119, 0,116,111,116,119,101,105,103,104,116, 0, 99,111, 91, 51, 93, 0,110,111,
- 91, 51, 93, 0, 99,111, 91, 50, 93, 0,105,110,100,101,120, 0,102, 0,105, 0,115, 91, 50, 53, 54, 93, 0,118, 91, 52, 93, 0,
-109,105,100, 0,112, 97,100, 91, 50, 93, 0,118, 91, 50, 93, 0, 42,102, 97, 99,101,115, 0, 42, 99,111,108,102, 97, 99,101,115,
- 0, 42,101,100,103,101,115, 0, 42,101,100,103,101, 95, 98,111,117,110,100, 97,114,121, 95,115,116, 97,116,101,115, 0, 42,118,
-101,114,116, 95,101,100,103,101, 95,109, 97,112, 0, 42,118,101,114,116, 95,102, 97, 99,101, 95,109, 97,112, 0, 42,109, 97,112,
- 95,109,101,109, 0, 42,118,101,114,116,115, 0,108,101,118,101,108,115, 0,108,101,118,101,108, 95, 99,111,117,110,116, 0, 99,
-117,114,114,101,110,116, 0,110,101,119,108,118,108, 0,101,100,103,101,108,118,108, 0,112,105,110,108,118,108, 0,114,101,110,
-100,101,114,108,118,108, 0,117,115,101, 95, 99,111,108, 0, 42,101,100,103,101, 95,102,108, 97,103,115, 0, 42,101,100,103,101,
- 95, 99,114,101, 97,115,101,115, 0, 42,118,101,114,116, 95,109, 97,112, 0, 42,101,100,103,101, 95,109, 97,112, 0, 42,111,108,
-100, 95,102, 97, 99,101,115, 0, 42,111,108,100, 95,101,100,103,101,115, 0, 42,101,114,114,111,114, 0,109,111,100,105,102,105,
-101,114, 0,115,117, 98,100,105,118, 84,121,112,101, 0,114,101,110,100,101,114, 76,101,118,101,108,115, 0, 42,101,109, 67, 97,
- 99,104,101, 0, 42,109, 67, 97, 99,104,101, 0,100,101,102, 97,120,105,115, 0,112, 97,100, 91, 54, 93, 0,115,116, 97,114,116,
- 0,108,101,110,103,116,104, 0,114, 97,110,100,111,109,105,122,101, 0,115,101,101,100, 0, 42,115,116, 97,114,116, 95, 99, 97,
-112, 0, 42,101,110,100, 95, 99, 97,112, 0, 42, 99,117,114,118,101, 95,111, 98, 0, 42,111,102,102,115,101,116, 95,111, 98, 0,
-111,102,102,115,101,116, 91, 51, 93, 0,115, 99, 97,108,101, 91, 51, 93, 0,109,101,114,103,101, 95,100,105,115,116, 0,102,105,
-116, 95,116,121,112,101, 0,111,102,102,115,101,116, 95,116,121,112,101, 0, 99,111,117,110,116, 0, 97,120,105,115, 0,116,111,
-108,101,114, 97,110, 99,101, 0, 42,109,105,114,114,111,114, 95,111, 98, 0,115,112,108,105,116, 95, 97,110,103,108,101, 0, 42,
-116,101,120,116,117,114,101, 0,115,116,114,101,110,103,116,104, 0,100,105,114,101, 99,116,105,111,110, 0,100,101,102,103,114,
-112, 95,110, 97,109,101, 91, 51, 50, 93, 0,109,105,100,108,101,118,101,108, 0,116,101,120,109, 97,112,112,105,110,103, 0, 42,
-109, 97,112, 95,111, 98,106,101, 99,116, 0,117,118,108, 97,121,101,114, 95,110, 97,109,101, 91, 51, 50, 93, 0,117,118,108, 97,
-121,101,114, 95,116,109,112, 0, 42,112,114,111,106,101, 99,116,111,114,115, 91, 49, 48, 93, 0, 42,105,109, 97,103,101, 0,110,
-117,109, 95,112,114,111,106,101, 99,116,111,114,115, 0, 97,115,112,101, 99,116,120, 0, 97,115,112,101, 99,116,121, 0,112,101,
-114, 99,101,110,116, 0,102, 97, 99,101, 67,111,117,110,116, 0,102, 97, 99, 0,114,101,112,101, 97,116, 0, 42,111, 98,106,101,
- 99,116, 99,101,110,116,101,114, 0,115,116, 97,114,116,120, 0,115,116, 97,114,116,121, 0,104,101,105,103,104,116, 0,110, 97,
-114,114,111,119, 0,115,112,101,101,100, 0,100, 97,109,112, 0,116,105,109,101,111,102,102,115, 0,108,105,102,101,116,105,109,
-101, 0,100,101,102,111,114,109,102,108, 97,103, 0,109,117,108,116,105, 0, 42,112,114,101,118, 67,111,115, 0,112, 97,114,101,
-110,116,105,110,118, 91, 52, 93, 91, 52, 93, 0, 99,101,110,116, 91, 51, 93, 0,102, 97,108,108,111,102,102, 0, 42,105,110,100,
-101,120, 97,114, 0,116,111,116,105,110,100,101,120, 0,102,111,114, 99,101, 0, 42, 99,108,111,116,104, 79, 98,106,101, 99,116,
- 0, 42,115,105,109, 95,112, 97,114,109,115, 0, 42, 99,111,108,108, 95,112, 97,114,109,115, 0, 42,120, 0, 42,120,110,101,119,
- 0, 42,120,111,108,100, 0, 42, 99,117,114,114,101,110,116, 95,120,110,101,119, 0, 42, 99,117,114,114,101,110,116, 95,120, 0,
- 42, 99,117,114,114,101,110,116, 95,118, 0, 42,109,102, 97, 99,101,115, 0,110,117,109,118,101,114,116,115, 0,110,117,109,102,
- 97, 99,101,115, 0,116,105,109,101, 0, 42,116,114,101,101, 0,111,112,101,114, 97,116,105,111,110, 0,118,101,114,116,101,120,
- 0,116,111,116,105,110,102,108,117,101,110, 99,101, 0,103,114,105,100,115,105,122,101, 0,110,101,101,100, 98,105,110,100, 0,
- 42, 98,105,110,100,119,101,105,103,104,116,115, 0, 42, 98,105,110,100, 99,111,115, 0,116,111,116, 99, 97,103,101,118,101,114,
-116, 0, 42,100,121,110,103,114,105,100, 0, 42,100,121,110,105,110,102,108,117,101,110, 99,101,115, 0, 42,100,121,110,118,101,
-114,116,115, 0, 42,112, 97,100, 50, 0,100,121,110,103,114,105,100,115,105,122,101, 0,100,121,110, 99,101,108,108,109,105,110,
- 91, 51, 93, 0,100,121,110, 99,101,108,108,119,105,100,116,104, 0, 98,105,110,100,109, 97,116, 91, 52, 93, 91, 52, 93, 0, 42,
-112,115,121,115, 0, 42,100,109, 0,116,111,116,100,109,118,101,114,116, 0,116,111,116,100,109,101,100,103,101, 0,116,111,116,
-100,109,102, 97, 99,101, 0,112,115,121,115, 0,114,116, 91, 50, 93, 0, 42,102, 97, 99,101,112, 97, 0,118,103,114,111,117,112,
- 0,112,114,111,116,101, 99,116, 0,112,110,116,115,119, 0,111,112,110,116,115,117, 0,111,112,110,116,115,118, 0,111,112,110,
-116,115,119, 0,116,121,112,101,117, 0,116,121,112,101,118, 0,116,121,112,101,119, 0,102,117, 0,102,118, 0,102,119, 0,100,
-117, 0,100,118, 0,100,119, 0, 42,100,101,102, 0,118,101, 99, 91, 56, 93, 91, 51, 93, 0,112, 97,114,116,121,112,101, 0,112,
- 97,114, 49, 0,112, 97,114, 50, 0,112, 97,114, 51, 0,112, 97,114,115,117, 98,115,116,114, 91, 51, 50, 93, 0, 42,116,114, 97,
- 99,107, 0, 42,112,114,111,120,121, 0, 42,112,114,111,120,121, 95,103,114,111,117,112, 0, 42,112,114,111,120,121, 95,102,114,
-111,109, 0, 42, 97, 99,116,105,111,110, 0, 42,112,111,115,101,108,105, 98, 0, 42,112,111,115,101, 0, 99,111,110,115,116,114,
- 97,105,110,116, 67,104, 97,110,110,101,108,115, 0,100,101,102, 98, 97,115,101, 0,109,111,100,105,102,105,101,114,115, 0,100,
-108,111, 99, 91, 51, 93, 0,111,114,105,103, 91, 51, 93, 0,100,115,105,122,101, 91, 51, 93, 0,100,114,111,116, 91, 51, 93, 0,
-100,113,117, 97,116, 91, 52, 93, 0,111, 98,109, 97,116, 91, 52, 93, 91, 52, 93, 0, 99,111,110,115,116,105,110,118, 91, 52, 93,
- 91, 52, 93, 0,108, 97,121, 0, 99,111,108, 98,105,116,115, 0,116,114, 97,110,115,102,108, 97,103, 0,105,112,111,102,108, 97,
-103, 0,116,114, 97, 99,107,102,108, 97,103, 0,117,112,102,108, 97,103, 0,110,108, 97,102,108, 97,103, 0,112,114,111,116,101,
- 99,116,102,108, 97,103, 0,105,112,111,119,105,110, 0,115, 99, 97,102,108, 97,103, 0,115, 99, 97,118,105,115,102,108, 97,103,
- 0, 98,111,117,110,100,116,121,112,101, 0,100,117,112,111,110, 0,100,117,112,111,102,102, 0,100,117,112,115,116, 97, 0,100,
-117,112,101,110,100, 0,115,102, 0, 99,116,105,109,101, 0,109, 97,115,115, 0,100, 97,109,112,105,110,103, 0,105,110,101,114,
-116,105, 97, 0,102,111,114,109,102, 97, 99,116,111,114, 0,114,100, 97,109,112,105,110,103, 0,115,105,122,101,102, 97, 99, 0,
-100,116, 0,100,116,120, 0, 97, 99,116, 99,111,108, 0,101,109,112,116,121, 95,100,114, 97,119,116,121,112,101, 0,112, 97,100,
- 49, 91, 51, 93, 0,101,109,112,116,121, 95,100,114, 97,119,115,105,122,101, 0,100,117,112,102, 97, 99,101,115, 99, 97, 0,112,
-114,111,112, 0,115,101,110,115,111,114,115, 0, 99,111,110,116,114,111,108,108,101,114,115, 0, 97, 99,116,117, 97,116,111,114,
-115, 0, 42,115,117,109,111,104, 97,110,100,108,101, 0, 98, 98,115,105,122,101, 91, 51, 93, 0, 97, 99,116,100,101,102, 0,103,
- 97,109,101,102,108, 97,103, 0,103, 97,109,101,102,108, 97,103, 50, 0,115,111,102,116,102,108, 97,103, 0, 97,110,105,115,111,
-116,114,111,112,105, 99, 70,114,105, 99,116,105,111,110, 91, 51, 93, 0, 99,111,110,115,116,114, 97,105,110,116,115, 0,110,108,
- 97,115,116,114,105,112,115, 0,104,111,111,107,115, 0,112, 97,114,116,105, 99,108,101,115,121,115,116,101,109, 0, 42,112,100,
- 0, 42,115,111,102,116, 0, 42,100,117,112, 95,103,114,111,117,112, 0,102,108,117,105,100,115,105,109, 70,108, 97,103, 0,114,
-101,115,116,114,105, 99,116,102,108, 97,103, 0,115,104, 97,112,101,110,114, 0,115,104, 97,112,101,102,108, 97,103, 0,114,101,
- 99, 97,108, 99,111, 0,112, 97,100, 52, 0, 42,102,108,117,105,100,115,105,109, 83,101,116,116,105,110,103,115, 0, 42,100,101,
-114,105,118,101,100, 68,101,102,111,114,109, 0, 42,100,101,114,105,118,101,100, 70,105,110, 97,108, 0,108, 97,115,116, 68, 97,
-116, 97, 77, 97,115,107, 0, 99,117,114,105,110,100,101,120, 0, 97, 99,116,105,118,101, 0,100,101,102,108,101, 99,116, 0,102,
-111,114, 99,101,102,105,101,108,100, 0,112,100,101,102, 95,100, 97,109,112, 0,112,100,101,102, 95,114,100, 97,109,112, 0,112,
-100,101,102, 95,112,101,114,109, 0,112,100,101,102, 95,102,114,105, 99,116, 0,112,100,101,102, 95,114,102,114,105, 99,116, 0,
-102, 95,115,116,114,101,110,103,116,104, 0,102, 95,112,111,119,101,114, 0,102, 95,100,105,115,116, 0,102, 95,100, 97,109,112,
- 0,109, 97,120,100,105,115,116, 0,109,105,110,100,105,115,116, 0,109, 97,120,114, 97,100, 0,109,105,110,114, 97,100, 0,102,
- 95,112,111,119,101,114, 95,114, 0,112,100,101,102, 95,115, 98,100, 97,109,112, 0,112,100,101,102, 95,115, 98,105,102,116, 0,
-112,100,101,102, 95,115, 98,111,102,116, 0, 99,108,117,109,112, 95,102, 97, 99, 0, 99,108,117,109,112, 95,112,111,119, 0,107,
-105,110,107, 95,102,114,101,113, 0,107,105,110,107, 95,115,104, 97,112,101, 0,107,105,110,107, 95, 97,109,112, 0,102,114,101,
-101, 95,101,110,100, 0,116,101,120, 95,110, 97, 98,108, 97, 0,116,101,120, 95,109,111,100,101, 0,107,105,110,107, 0,107,105,
-110,107, 95, 97,120,105,115, 0,114,116, 50, 0, 42,112, 97,114,116,105, 99,108,101,115, 0,116,111,116,112,111,105,110,116, 0,
-116,111,116,115,112,114,105,110,103, 0, 42, 98,112,111,105,110,116, 0, 42, 98,115,112,114,105,110,103, 0,110,111,100,101,109,
- 97,115,115, 0,103,114, 97,118, 0,109,101,100,105, 97,102,114,105, 99,116, 0,114,107,108,105,109,105,116, 0,112,104,121,115,
-105, 99,115, 95,115,112,101,101,100, 0,103,111, 97,108,115,112,114,105,110,103, 0,103,111, 97,108,102,114,105, 99,116, 0,109,
-105,110,103,111, 97,108, 0,109, 97,120,103,111, 97,108, 0,100,101,102,103,111, 97,108, 0,118,101,114,116,103,114,111,117,112,
- 0,102,117,122,122,121,110,101,115,115, 0,105,110,115,112,114,105,110,103, 0,105,110,102,114,105, 99,116, 0,101,102,114, 97,
- 0,105,110,116,101,114,118, 97,108, 0,108,111, 99, 97,108, 0,115,111,108,118,101,114,102,108, 97,103,115, 0, 42, 42,107,101,
-121,115, 0,116,111,116,112,111,105,110,116,107,101,121, 0,115,101, 99,111,110,100,115,112,114,105,110,103, 0, 99,111,108, 98,
- 97,108,108, 0, 98, 97,108,108,100, 97,109,112, 0, 98, 97,108,108,115,116,105,102,102, 0,115, 98, 99, 95,109,111,100,101, 0,
- 97,101,114,111,101,100,103,101, 0,109,105,110,108,111,111,112,115, 0,109, 97,120,108,111,111,112,115, 0, 99,104,111,107,101,
- 0,115,111,108,118,101,114, 95, 73, 68, 0,112,108, 97,115,116,105, 99, 0,112, 97,100, 53, 0, 42,115, 99,114, 97,116, 99,104,
- 0,115,104,101, 97,114,115,116,105,102,102, 0,105,110,112,117,115,104, 0,115,104,111,119, 95, 97,100,118, 97,110, 99,101,100,
-111,112,116,105,111,110,115, 0,114,101,115,111,108,117,116,105,111,110,120,121,122, 0,112,114,101,118,105,101,119,114,101,115,
-120,121,122, 0,114,101, 97,108,115,105,122,101, 0,103,117,105, 68,105,115,112,108, 97,121, 77,111,100,101, 0,114,101,110,100,
-101,114, 68,105,115,112,108, 97,121, 77,111,100,101, 0,118,105,115, 99,111,115,105,116,121, 86, 97,108,117,101, 0,118,105,115,
- 99,111,115,105,116,121, 77,111,100,101, 0,118,105,115, 99,111,115,105,116,121, 69,120,112,111,110,101,110,116, 0,103,114, 97,
-118,120, 0,103,114, 97,118,121, 0,103,114, 97,118,122, 0, 97,110,105,109, 83,116, 97,114,116, 0, 97,110,105,109, 69,110,100,
- 0,103,115,116, 97,114, 0,109, 97,120, 82,101,102,105,110,101, 0,105,110,105, 86,101,108,120, 0,105,110,105, 86,101,108,121,
- 0,105,110,105, 86,101,108,122, 0, 42,111,114,103, 77,101,115,104, 0, 42,109,101,115,104, 83,117,114,102, 97, 99,101, 0, 42,
-109,101,115,104, 66, 66, 0,115,117,114,102,100, 97,116, 97, 80, 97,116,104, 91, 50, 52, 48, 93, 0, 98, 98, 83,116, 97,114,116,
- 91, 51, 93, 0, 98, 98, 83,105,122,101, 91, 51, 93, 0,116,121,112,101, 70,108, 97,103,115, 0,100,111,109, 97,105,110, 78,111,
-118,101, 99,103,101,110, 0,118,111,108,117,109,101, 73,110,105,116, 84,121,112,101, 0,112, 97,114,116, 83,108,105,112, 86, 97,
-108,117,101, 0,103,101,110,101,114, 97,116,101, 84,114, 97, 99,101,114,115, 0,103,101,110,101,114, 97,116,101, 80, 97,114,116,
-105, 99,108,101,115, 0,115,117,114,102, 97, 99,101, 83,109,111,111,116,104,105,110,103, 0,115,117,114,102, 97, 99,101, 83,117,
- 98,100,105,118,115, 0,117,110,117,115,101,100, 68, 78, 65, 68,117,109,109,121, 0,112, 97,114,116,105, 99,108,101, 73,110,102,
- 83,105,122,101, 0,112, 97,114,116,105, 99,108,101, 73,110,102, 65,108,112,104, 97, 0,102, 97,114, 70,105,101,108,100, 83,105,
-122,101, 0, 42,109,101,115,104, 83,117,114,102, 78,111,114,109, 97,108,115, 0,109,105,115,116,121,112,101, 0,104,111,114,114,
- 0,104,111,114,103, 0,104,111,114, 98, 0,104,111,114,107, 0,122,101,110,114, 0,122,101,110,103, 0,122,101,110, 98, 0,122,
-101,110,107, 0, 97,109, 98,107, 0,102, 97,115,116, 99,111,108, 0,101,120,112,111,115,117,114,101, 0,101,120,112, 0,114, 97,
-110,103,101, 0,108,105,110,102, 97, 99, 0,108,111,103,102, 97, 99, 0,103,114, 97,118,105,116,121, 0, 97, 99,116,105,118,105,
-116,121, 66,111,120, 82, 97,100,105,117,115, 0,115,107,121,116,121,112,101, 0,112,104,121,115,105, 99,115, 69,110,103,105,110,
-101, 0,109,105,115,105, 0,109,105,115,116,115,116, 97, 0,109,105,115,116,100,105,115,116, 0,109,105,115,116,104,105, 0,115,
-116, 97,114,114, 0,115,116, 97,114,103, 0,115,116, 97,114, 98, 0,115,116, 97,114,107, 0,115,116, 97,114,115,105,122,101, 0,
-115,116, 97,114,109,105,110,100,105,115,116, 0,115,116, 97,114,100,105,115,116, 0,115,116, 97,114, 99,111,108,110,111,105,115,
-101, 0,100,111,102,115,116, 97, 0,100,111,102,101,110,100, 0,100,111,102,109,105,110, 0,100,111,102,109, 97,120, 0, 97,111,
-100,105,115,116, 0, 97,111,100,105,115,116,102, 97, 99, 0, 97,111,101,110,101,114,103,121, 0, 97,111, 98,105, 97,115, 0, 97,
-111,109,111,100,101, 0, 97,111,115, 97,109,112, 0, 97,111,109,105,120, 0, 97,111, 99,111,108,111,114, 0, 97,111, 95, 97,100,
- 97,112,116, 95,116,104,114,101,115,104, 0, 97,111, 95, 97,100, 97,112,116, 95,115,112,101,101,100, 95,102, 97, 99, 0, 97,111,
- 95, 97,112,112,114,111,120, 95,101,114,114,111,114, 0, 97,111, 95, 97,112,112,114,111,120, 95, 99,111,114,114,101, 99,116,105,
-111,110, 0, 97,111, 95,115, 97,109,112, 95,109,101,116,104,111,100, 0, 97,111, 95,103, 97,116,104,101,114, 95,109,101,116,104,
-111,100, 0, 97,111, 95, 97,112,112,114,111,120, 95,112, 97,115,115,101,115, 0, 42, 97,111,115,112,104,101,114,101, 0, 42, 97,
-111,116, 97, 98,108,101,115, 0,104,101,109,105,114,101,115, 0,109, 97,120,105,116,101,114, 0,100,114, 97,119,116,121,112,101,
- 0,115,117, 98,115,104,111,111,116,112, 0,115,117, 98,115,104,111,111,116,101, 0,110,111,100,101,108,105,109, 0,109, 97,120,
-115,117, 98,108, 97,109,112, 0,112, 97,109, 97, 0,112, 97,109,105, 0,101,108,109, 97, 0,101,108,109,105, 0,109, 97,120,110,
-111,100,101, 0, 99,111,110,118,101,114,103,101,110, 99,101, 0,114, 97,100,102, 97, 99, 0,103, 97,109,109, 97, 0,115,101,108,
- 99,111,108, 0,115,120, 0,115,121, 0, 42,108,112, 70,111,114,109, 97,116, 0, 42,108,112, 80, 97,114,109,115, 0, 99, 98, 70,
-111,114,109, 97,116, 0, 99, 98, 80, 97,114,109,115, 0,102, 99, 99, 84,121,112,101, 0,102, 99, 99, 72, 97,110,100,108,101,114,
- 0,100,119, 75,101,121, 70,114, 97,109,101, 69,118,101,114,121, 0,100,119, 81,117, 97,108,105,116,121, 0,100,119, 66,121,116,
-101,115, 80,101,114, 83,101, 99,111,110,100, 0,100,119, 70,108, 97,103,115, 0,100,119, 73,110,116,101,114,108,101, 97,118,101,
- 69,118,101,114,121, 0, 97,118,105, 99,111,100,101, 99,110, 97,109,101, 91, 49, 50, 56, 93, 0, 42, 99,100, 80, 97,114,109,115,
- 0, 42,112, 97,100, 0, 99,100, 83,105,122,101, 0,113,116, 99,111,100,101, 99,110, 97,109,101, 91, 49, 50, 56, 93, 0, 99,111,
-100,101, 99, 0, 97,117,100,105,111, 95, 99,111,100,101, 99, 0,118,105,100,101,111, 95, 98,105,116,114, 97,116,101, 0, 97,117,
-100,105,111, 95, 98,105,116,114, 97,116,101, 0,103,111,112, 95,115,105,122,101, 0,114, 99, 95,109,105,110, 95,114, 97,116,101,
- 0,114, 99, 95,109, 97,120, 95,114, 97,116,101, 0,114, 99, 95, 98,117,102,102,101,114, 95,115,105,122,101, 0,109,117,120, 95,
-112, 97, 99,107,101,116, 95,115,105,122,101, 0,109,117,120, 95,114, 97,116,101, 0,109,105,120,114, 97,116,101, 0,109, 97,105,
-110, 0, 42,109, 97,116, 95,111,118,101,114,114,105,100,101, 0, 42,108,105,103,104,116, 95,111,118,101,114,114,105,100,101, 0,
-108, 97,121, 95,122,109, 97,115,107, 0,108, 97,121,102,108, 97,103, 0,112, 97,115,115,102,108, 97,103, 0,112, 97,115,115, 95,
-120,111,114, 0, 42, 97,118,105, 99,111,100,101, 99,100, 97,116, 97, 0, 42,113,116, 99,111,100,101, 99,100, 97,116, 97, 0,102,
-102, 99,111,100,101, 99,100, 97,116, 97, 0, 99,102,114, 97, 0,112,115,102,114, 97, 0,112,101,102,114, 97, 0,105,109, 97,103,
-101,115, 0,102,114, 97,109, 97,112,116,111, 0,116,104,114,101, 97,100,115, 0,102,114, 97,109,101,108,101,110, 0, 98,108,117,
-114,102, 97, 99, 0,101,100,103,101, 82, 0,101,100,103,101, 71, 0,101,100,103,101, 66, 0,102,117,108,108,115, 99,114,101,101,
-110, 0,120,112,108, 97,121, 0,121,112,108, 97,121, 0,102,114,101,113,112,108, 97,121, 0, 97,116,116,114,105, 98, 0,114,116,
- 49, 0,115,116,101,114,101,111,109,111,100,101, 0,100,105,109,101,110,115,105,111,110,115,112,114,101,115,101,116, 0,109, 97,
-120,105,109,115,105,122,101, 0,120,115, 99,104, 0,121,115, 99,104, 0,120, 97,115,112, 0,121, 97,115,112, 0,120,112, 97,114,
-116,115, 0,121,112, 97,114,116,115, 0,119,105,110,112,111,115, 0,112,108, 97,110,101,115, 0,105,109,116,121,112,101, 0,115,
-117, 98,105,109,116,121,112,101, 0,113,117, 97,108,105,116,121, 0,115, 99,101,109,111,100,101, 0,114,101,110,100,101,114,101,
-114, 0,111, 99,114,101,115, 0,114,112, 97,100, 91, 50, 93, 0, 97,108,112,104, 97,109,111,100,101, 0,111,115, 97, 0,102,114,
-115, 95,115,101, 99, 0,101,100,103,101,105,110,116, 0,115, 97,102,101,116,121, 0, 98,111,114,100,101,114, 0,100,105,115,112,
-114,101, 99,116, 0,108, 97,121,101,114,115, 0, 97, 99,116,108, 97,121, 0,102,114,115, 95,115,101, 99, 95, 98, 97,115,101, 0,
-103, 97,117,115,115, 0,112,111,115,116,109,117,108, 0,112,111,115,116,103, 97,109,109, 97, 0,112,111,115,116,104,117,101, 0,
-112,111,115,116,115, 97,116, 0,100,105,116,104,101,114, 95,105,110,116,101,110,115,105,116,121, 0, 98, 97,107,101, 95,111,115,
- 97, 0, 98, 97,107,101, 95,102,105,108,116,101,114, 0, 98, 97,107,101, 95,109,111,100,101, 0, 98, 97,107,101, 95,102,108, 97,
-103, 0, 98, 97,107,101, 95,110,111,114,109, 97,108, 95,115,112, 97, 99,101, 0, 98,112, 97,100, 0, 98, 97,107,101, 95,109, 97,
-120,100,105,115,116, 0, 71, 73,113,117, 97,108,105,116,121, 0, 71, 73, 99, 97, 99,104,101, 0, 71, 73,109,101,116,104,111,100,
- 0, 71, 73,112,104,111,116,111,110,115, 0, 71, 73,100,105,114,101, 99,116, 0, 89, 70, 95, 65, 65, 0, 89, 70,101,120,112,111,
-114,116,120,109,108, 0, 89, 70, 95,110,111, 98,117,109,112, 0, 89, 70, 95, 99,108, 97,109,112,114,103, 98, 0,121,102,112, 97,
-100, 49, 0, 71, 73,100,101,112,116,104, 0, 71, 73, 99, 97,117,115,100,101,112,116,104, 0, 71, 73,112,105,120,101,108,115,112,
-101,114,115, 97,109,112,108,101, 0, 71, 73,112,104,111,116,111,110, 99,111,117,110,116, 0, 71, 73,109,105,120,112,104,111,116,
-111,110,115, 0, 71, 73,112,104,111,116,111,110,114, 97,100,105,117,115, 0, 89, 70, 95,110,117,109,112,114,111, 99,115, 0, 89,
- 70, 95,114, 97,121,100,101,112,116,104, 0, 89, 70, 95, 65, 65,112, 97,115,115,101,115, 0, 89, 70, 95, 65, 65,115, 97,109,112,
-108,101,115, 0, 71, 73,115,104, 97,100,111,119,113,117, 97,108,105,116,121, 0, 71, 73,114,101,102,105,110,101,109,101,110,116,
- 0, 71, 73,112,111,119,101,114, 0, 71, 73,105,110,100,105,114,112,111,119,101,114, 0, 89, 70, 95,103, 97,109,109, 97, 0, 89,
- 70, 95,101,120,112,111,115,117,114,101, 0, 89, 70, 95,114, 97,121, 98,105, 97,115, 0, 89, 70, 95, 65, 65,112,105,120,101,108,
-115,105,122,101, 0, 89, 70, 95, 65, 65,116,104,114,101,115,104,111,108,100, 0, 98, 97, 99,107, 98,117,102, 91, 49, 54, 48, 93,
- 0,112,105, 99, 91, 49, 54, 48, 93, 0,115,116, 97,109,112, 0,115,116, 97,109,112, 95,102,111,110,116, 95,105,100, 0,115,116,
- 97,109,112, 95,117,100, 97,116, 97, 91, 49, 54, 48, 93, 0,102,103, 95,115,116, 97,109,112, 91, 52, 93, 0, 98,103, 95,115,116,
- 97,109,112, 91, 52, 93, 0,115,105,109,112,108,105,102,121, 95,115,117, 98,115,117,114,102, 0,115,105,109,112,108,105,102,121,
- 95,115,104, 97,100,111,119,115, 97,109,112,108,101,115, 0,115,105,109,112,108,105,102,121, 95,112, 97,114,116,105, 99,108,101,
-115, 0,115,105,109,112,108,105,102,121, 95, 97,111,115,115,115, 0, 99,111,108, 91, 51, 93, 0,102,114, 97,109,101, 0,110, 97,
-109,101, 91, 54, 52, 93, 0, 42, 98,114,117,115,104, 0,116,111,111,108, 0,115,116,101,112, 0,105,110,118,101,114,116, 0,116,
-111,116,114,101,107,101,121, 0,116,111,116, 97,100,100,107,101,121, 0, 98,114,117,115,104,116,121,112,101, 0, 98,114,117,115,
-104, 91, 55, 93, 0,101,109,105,116,116,101,114,100,105,115,116, 0,100,114, 97,119, 95,116,105,109,101,100, 0,110, 97,109,101,
- 91, 51, 54, 93, 0,109, 97,116, 91, 51, 93, 91, 51, 93, 0, 99,111,114,110,101,114,116,121,112,101, 0,101,100,105,116, 98,117,
-116,102,108, 97,103, 0,106,111,105,110,116,114,105,108,105,109,105,116, 0,100,101,103,114, 0,116,117,114,110, 0,101,120,116,
-114, 95,111,102,102,115, 0,100,111,117, 98,108,105,109,105,116, 0,115,101,103,109,101,110,116,115, 0,114,105,110,103,115, 0,
-118,101,114,116,105, 99,101,115, 0,117,110,119,114, 97,112,112,101,114, 0,117,118, 99, 97,108, 99, 95,114, 97,100,105,117,115,
- 0,117,118, 99, 97,108, 99, 95, 99,117, 98,101,115,105,122,101, 0,117,118, 99, 97,108, 99, 95,109, 97,112,100,105,114, 0,117,
-118, 99, 97,108, 99, 95,109, 97,112, 97,108,105,103,110, 0,117,118, 99, 97,108, 99, 95,102,108, 97,103, 0, 97,117,116,111,105,
-107, 95, 99,104, 97,105,110,108,101,110, 0,105,109, 97,112, 97,105,110,116, 0,112, 97,114,116,105, 99,108,101, 0,115,101,108,
-101, 99,116, 95,116,104,114,101,115,104, 0, 99,108,101, 97,110, 95,116,104,114,101,115,104, 0,114,101,116,111,112,111, 95,109,
-111,100,101, 0,114,101,116,111,112,111, 95,112, 97,105,110,116, 95,116,111,111,108, 0,108,105,110,101, 95,100,105,118, 0,101,
-108,108,105,112,115,101, 95,100,105,118, 0,114,101,116,111,112,111, 95,104,111,116,115,112,111,116, 0,109,117,108,116,105,114,
-101,115, 95,115,117, 98,100,105,118, 95,116,121,112,101, 0,115,107,103,101,110, 95,114,101,115,111,108,117,116,105,111,110, 0,
-115,107,103,101,110, 95,116,104,114,101,115,104,111,108,100, 95,105,110,116,101,114,110, 97,108, 0,115,107,103,101,110, 95,116,
-104,114,101,115,104,111,108,100, 95,101,120,116,101,114,110, 97,108, 0,115,107,103,101,110, 95,108,101,110,103,116,104, 95,114,
- 97,116,105,111, 0,115,107,103,101,110, 95,108,101,110,103,116,104, 95,108,105,109,105,116, 0,115,107,103,101,110, 95, 97,110,
-103,108,101, 95,108,105,109,105,116, 0,115,107,103,101,110, 95, 99,111,114,114,101,108, 97,116,105,111,110, 95,108,105,109,105,
-116, 0,115,107,103,101,110, 95,115,121,109,109,101,116,114,121, 95,108,105,109,105,116, 0,115,107,103,101,110, 95,111,112,116,
-105,111,110,115, 0,115,107,103,101,110, 95,112,111,115,116,112,114,111, 0,115,107,103,101,110, 95,112,111,115,116,112,114,111,
- 95,112, 97,115,115,101,115, 0,115,107,103,101,110, 95,115,117, 98,100,105,118,105,115,105,111,110,115, 91, 51, 93, 0,112, 97,
-100, 51, 91, 53, 93, 0,100,105,114, 0,118,105,101,119, 0, 42,115,101,115,115,105,111,110, 0, 42, 99,117,109, 97,112, 0,100,
-114, 97,119, 98,114,117,115,104, 0,115,109,111,111,116,104, 98,114,117,115,104, 0,112,105,110, 99,104, 98,114,117,115,104, 0,
-105,110,102,108, 97,116,101, 98,114,117,115,104, 0,103,114, 97, 98, 98,114,117,115,104, 0,108, 97,121,101,114, 98,114,117,115,
-104, 0,102,108, 97,116,116,101,110, 98,114,117,115,104, 0, 98,114,117,115,104, 95,116,121,112,101, 0,116,101,120,110,114, 0,
-116,101,120,114,101,112,116, 0,116,101,120,102, 97,100,101, 0,116,101,120,115,101,112, 0, 97,118,101,114, 97,103,105,110,103,
- 0,116, 97, 98,108,101,116, 95,115,105,122,101, 0,116, 97, 98,108,101,116, 95,115,116,114,101,110,103,116,104, 0,115,121,109,
-109, 0,114, 97,107,101, 0,112, 97,100, 91, 55, 93, 0, 42, 99, 97,109,101,114, 97, 0, 42,119,111,114,108,100, 0, 42,115,101,
-116, 0, 98, 97,115,101, 0, 42, 98, 97,115, 97, 99,116, 0, 99,117,114,115,111,114, 91, 51, 93, 0,116,119, 99,101,110,116, 91,
- 51, 93, 0,116,119,109,105,110, 91, 51, 93, 0,116,119,109, 97,120, 91, 51, 93, 0,101,100,105,116, 98,117,116,115,105,122,101,
- 0,115,101,108,101, 99,116,109,111,100,101, 0,112,114,111,112,111,114,116,105,111,110, 97,108, 0,112,114,111,112, 95,109,111,
-100,101, 0, 97,117,116,111,109,101,114,103,101, 0,112, 97,100, 54, 0,112, 97,100, 55, 0, 42,101,100, 0, 42,114, 97,100,105,
-111, 0,102,114, 97,109,105,110,103, 0, 42,116,111,111,108,115,101,116,116,105,110,103,115, 0, 97,117,100,105,111, 0,109, 97,
-114,107,101,114,115, 0,116,114, 97,110,115,102,111,114,109, 95,115,112, 97, 99,101,115, 0,106,117,109,112,102,114, 97,109,101,
- 0,115,110, 97,112, 95,102,108, 97,103, 0,115,110, 97,112, 95,116, 97,114,103,101,116, 0, 42,116,104,101, 68, 97,103, 0,100,
- 97,103,105,115,118, 97,108,105,100, 0,100, 97,103,102,108, 97,103,115, 0,115, 99,117,108,112,116,100, 97,116, 97, 0,122,111,
-111,109, 0, 98,108,101,110,100, 0,120,105,109, 0,121,105,109, 0,115,112, 97, 99,101,116,121,112,101, 0, 98,108,111, 99,107,
-115, 99, 97,108,101, 0, 42, 97,114,101, 97, 0, 98,108,111, 99,107,104, 97,110,100,108,101,114, 91, 56, 93, 0,118,105,101,119,
-109, 97,116, 91, 52, 93, 91, 52, 93, 0,118,105,101,119,105,110,118, 91, 52, 93, 91, 52, 93, 0,112,101,114,115,109, 97,116, 91,
- 52, 93, 91, 52, 93, 0,112,101,114,115,105,110,118, 91, 52, 93, 91, 52, 93, 0,119,105,110,109, 97,116, 49, 91, 52, 93, 91, 52,
- 93, 0,118,105,101,119,109, 97,116, 49, 91, 52, 93, 91, 52, 93, 0,118,105,101,119,113,117, 97,116, 91, 52, 93, 0,122,102, 97,
- 99, 0,112,101,114,115,112, 0, 42,111, 98, 95, 99,101,110,116,114,101, 0, 42, 98,103,112,105, 99, 0, 42,108,111, 99, 97,108,
-118,100, 0, 42,114,105, 0, 42,114,101,116,111,112,111, 95,118,105,101,119, 95,100, 97,116, 97, 0, 42,100,101,112,116,104,115,
- 0,111, 98, 95, 99,101,110,116,114,101, 95, 98,111,110,101, 91, 51, 50, 93, 0,108,111, 99, 97,108,118,105,101,119, 0,108, 97,
-121, 97, 99,116, 0,115, 99,101,110,101,108,111, 99,107, 0, 97,114,111,117,110,100, 0, 99, 97,109,122,111,111,109, 0,112,105,
-118,111,116, 95,108, 97,115,116, 0,103,114,105,100, 0,103,114,105,100,118,105,101,119, 0,112,105,120,115,105,122,101, 0,110,
-101, 97,114, 0,102, 97,114, 0, 99, 97,109,100,120, 0, 99, 97,109,100,121, 0,103,114,105,100,108,105,110,101,115, 0,118,105,
-101,119, 98,117,116, 0,103,114,105,100,102,108, 97,103, 0,109,111,100,101,115,101,108,101, 99,116, 0,116,119,116,121,112,101,
- 0,116,119,109,111,100,101, 0,116,119,102,108, 97,103, 0,116,119,100,114, 97,119,102,108, 97,103, 0,116,119,109, 97,116, 91,
- 52, 93, 91, 52, 93, 0, 99,108,105,112, 91, 52, 93, 91, 52, 93, 0, 42, 99,108,105,112, 98, 98, 0, 97,102,116,101,114,100,114,
- 97,119, 0,122, 98,117,102, 0,120,114, 97,121, 0,102,108, 97,103, 50, 0,103,114,105,100,115,117, 98,100,105,118, 0, 42,112,
-114,111,112,101,114,116,105,101,115, 95,115,116,111,114, 97,103,101, 0,118,101,114,116, 0,104,111,114, 0,109, 97,115,107, 0,
-109,105,110, 91, 50, 93, 0,109, 97,120, 91, 50, 93, 0,109,105,110,122,111,111,109, 0,109, 97,120,122,111,111,109, 0,115, 99,
-114,111,108,108, 0,107,101,101,112,116,111,116, 0,107,101,101,112, 97,115,112,101, 99,116, 0,107,101,101,112,122,111,111,109,
- 0,111,108,100,119,105,110,120, 0,111,108,100,119,105,110,121, 0, 99,117,114,115,111,114, 91, 50, 93, 0,114,111,119, 98,117,
-116, 0,118, 50,100, 0, 42,101,100,105,116,105,112,111, 0,105,112,111,107,101,121, 0, 97, 99,116,110, 97,109,101, 91, 51, 50,
- 93, 0, 99,111,110,115,116,110, 97,109,101, 91, 51, 50, 93, 0, 98,111,110,101,110, 97,109,101, 91, 51, 50, 93, 0,116,111,116,
-105,112,111, 0,112,105,110, 0, 98,117,116,111,102,115, 0, 99,104, 97,110,110,101,108, 0,108,111, 99,107, 0,109,101,100,105,
- 97,110, 91, 51, 93, 0, 99,117,114,115,101,110,115, 0, 99,117,114, 97, 99,116, 0, 97,108,105,103,110, 0,116, 97, 98,111, 0,
-109, 97,105,110, 98, 0,109, 97,105,110, 98,111, 0, 42,108,111, 99,107,112,111,105,110, 0,116,101,120,102,114,111,109, 0,115,
-104,111,119,103,114,111,117,112, 0,109,111,100,101,108,116,121,112,101, 0,115, 99,114,105,112,116, 98,108,111, 99,107, 0,114,
-101, 95, 97,108,105,103,110, 0,111,108,100,107,101,121,112,114,101,115,115, 0,116, 97, 98, 91, 55, 93, 0, 99,104, 97,110,115,
-104,111,119,110, 0,122,101, 98,114, 97, 0, 42,102,105,108,101,108,105,115,116, 0,116,111,116,102,105,108,101, 0,116,105,116,
-108,101, 91, 50, 52, 93, 0,100,105,114, 91, 49, 54, 48, 93, 0,102,105,108,101, 91, 56, 48, 93, 0,111,102,115, 0,115,111,114,
-116, 0,109, 97,120,110, 97,109,101,108,101,110, 0, 99,111,108,108,117,109,115, 0,102, 95,102,112, 0,102,112, 95,115,116,114,
- 91, 56, 93, 0, 42,108,105, 98,102,105,108,101,100, 97,116, 97, 0,114,101,116,118, 97,108, 0,109,101,110,117, 0, 97, 99,116,
- 0, 40, 42,114,101,116,117,114,110,102,117,110, 99, 41, 40, 41, 0, 40, 42,114,101,116,117,114,110,102,117,110, 99, 95,101,118,
-101,110,116, 41, 40, 41, 0, 40, 42,114,101,116,117,114,110,102,117,110, 99, 95, 97,114,103,115, 41, 40, 41, 0, 42, 97,114,103,
- 49, 0, 42, 97,114,103, 50, 0, 42,109,101,110,117,112, 0, 42,112,117,112,109,101,110,117, 0,111,111,112,115, 0,118,105,115,
-105,102,108, 97,103, 0,116,114,101,101, 0, 42,116,114,101,101,115,116,111,114,101, 0,115,101, 97,114, 99,104, 95,115,116,114,
-105,110,103, 91, 51, 50, 93, 0,115,101, 97,114, 99,104, 95,116,115,101, 0,115,101, 97,114, 99,104, 95,102,108, 97,103,115, 0,
-100,111, 95, 0,111,117,116,108,105,110,101,118,105,115, 0,115,116,111,114,101,102,108, 97,103, 0,100,101,112,115, 95,102,108,
- 97,103,115, 0,102,105,108,116,101,114, 95, 97,108,108, 91, 51, 50, 93, 0,102,105,108,116,101,114, 95, 99,117,114, 91, 51, 50,
- 93, 0,102,105,108,116,101,114, 95, 97, 99,116, 91, 51, 50, 93, 0,102,105,108,116,101,114, 95,115,101,108, 91, 51, 50, 93, 0,
-102,105,108,116,101,114, 95,108,105, 98, 91, 51, 50, 93, 0,102,105,108,116,101,114, 95,103,114,112, 91, 51, 50, 93, 0,102,105,
-108,116,101,114, 95,101,110, 97, 98,108,101, 0,105,109, 97,110,114, 0, 99,117,114,116,105,108,101, 0,105,109,116,121,112,101,
-110,114, 0,115,104,111,119,115,112, 97,114,101, 0,100,116, 95,117,118, 0,115,116,105, 99,107,121, 0, 99,101,110,116,120, 0,
- 99,101,110,116,121, 0, 42,105,110,102,111, 95,115,116,114, 0, 42,105,110,102,111, 95,115,112, 97,114,101, 0, 42,115,112, 97,
-114,101, 0, 97,117,116,111,115,110, 97,112, 0, 42,116,101,120,116, 0,116,111,112, 0,118,105,101,119,108,105,110,101,115, 0,
-102,111,110,116, 95,105,100, 0,108,104,101,105,103,104,116, 0,108,101,102,116, 0,115,104,111,119,108,105,110,101,110,114,115,
- 0,116, 97, 98,110,117,109, 98,101,114, 0, 99,117,114,114,116, 97, 98, 95,115,101,116, 0,115,104,111,119,115,121,110,116, 97,
-120, 0,117,110,117,115,101,100, 95,112, 97,100,100, 0,112,105,120, 95,112,101,114, 95,108,105,110,101, 0,116,120,116,115, 99,
-114,111,108,108, 0,116,120,116, 98, 97,114, 0, 42,115, 99,114,105,112,116, 0, 42, 98,117,116, 95,114,101,102,115, 0,114,101,
-100,114, 97,119,115, 0, 42,105,100, 0, 97,115,112,101, 99,116, 0, 42, 99,117,114,102,111,110,116, 0, 42,101,100,105,116,116,
-114,101,101, 0,116,114,101,101,116,121,112,101, 0, 42,102,105,108,101,115, 0, 97, 99,116,105,118,101, 95,102,105,108,101, 0,
-110,117,109,116,105,108,101,115,120, 0,110,117,109,116,105,108,101,115,121, 0,115,101,108,115,116, 97,116,101, 0,118,105,101,
-119,114,101, 99,116, 0, 98,111,111,107,109, 97,114,107,114,101, 99,116, 0,115, 99,114,111,108,108,112,111,115, 0,115, 99,114,
-111,108,108,104,101,105,103,104,116, 0,115, 99,114,111,108,108, 97,114,101, 97, 0, 97, 99,116,105,118,101, 95, 98,111,111,107,
-109, 97,114,107, 0,112,114,118, 95,119, 0,112,114,118, 95,104, 0, 42,105,109,103, 0,111,117,116,108,105,110,101, 91, 52, 93,
- 0,110,101,117,116,114, 97,108, 91, 52, 93, 0, 97, 99,116,105,111,110, 91, 52, 93, 0,115,101,116,116,105,110,103, 91, 52, 93,
- 0,115,101,116,116,105,110,103, 49, 91, 52, 93, 0,115,101,116,116,105,110,103, 50, 91, 52, 93, 0,110,117,109, 91, 52, 93, 0,
-116,101,120,116,102,105,101,108,100, 91, 52, 93, 0,116,101,120,116,102,105,101,108,100, 95,104,105, 91, 52, 93, 0,112,111,112,
-117,112, 91, 52, 93, 0,116,101,120,116, 91, 52, 93, 0,116,101,120,116, 95,104,105, 91, 52, 93, 0,109,101,110,117, 95, 98, 97,
- 99,107, 91, 52, 93, 0,109,101,110,117, 95,105,116,101,109, 91, 52, 93, 0,109,101,110,117, 95,104,105,108,105,116,101, 91, 52,
- 93, 0,109,101,110,117, 95,116,101,120,116, 91, 52, 93, 0,109,101,110,117, 95,116,101,120,116, 95,104,105, 91, 52, 93, 0, 98,
-117,116, 95,100,114, 97,119,116,121,112,101, 0,105, 99,111,110,102,105,108,101, 91, 56, 48, 93, 0, 98, 97, 99,107, 91, 52, 93,
- 0,104,101, 97,100,101,114, 91, 52, 93, 0,112, 97,110,101,108, 91, 52, 93, 0,115,104, 97,100,101, 49, 91, 52, 93, 0,115,104,
- 97,100,101, 50, 91, 52, 93, 0,104,105,108,105,116,101, 91, 52, 93, 0,103,114,105,100, 91, 52, 93, 0,119,105,114,101, 91, 52,
- 93, 0,115,101,108,101, 99,116, 91, 52, 93, 0,108, 97,109,112, 91, 52, 93, 0, 97, 99,116,105,118,101, 91, 52, 93, 0,103,114,
-111,117,112, 91, 52, 93, 0,103,114,111,117,112, 95, 97, 99,116,105,118,101, 91, 52, 93, 0,116,114, 97,110,115,102,111,114,109,
- 91, 52, 93, 0,118,101,114,116,101,120, 91, 52, 93, 0,118,101,114,116,101,120, 95,115,101,108,101, 99,116, 91, 52, 93, 0,101,
-100,103,101, 91, 52, 93, 0,101,100,103,101, 95,115,101,108,101, 99,116, 91, 52, 93, 0,101,100,103,101, 95,115,101, 97,109, 91,
- 52, 93, 0,101,100,103,101, 95,115,104, 97,114,112, 91, 52, 93, 0,101,100,103,101, 95,102, 97, 99,101,115,101,108, 91, 52, 93,
- 0,102, 97, 99,101, 91, 52, 93, 0,102, 97, 99,101, 95,115,101,108,101, 99,116, 91, 52, 93, 0,102, 97, 99,101, 95,100,111,116,
- 91, 52, 93, 0,110,111,114,109, 97,108, 91, 52, 93, 0, 98,111,110,101, 95,115,111,108,105,100, 91, 52, 93, 0, 98,111,110,101,
- 95,112,111,115,101, 91, 52, 93, 0,115,116,114,105,112, 91, 52, 93, 0,115,116,114,105,112, 95,115,101,108,101, 99,116, 91, 52,
- 93, 0, 99,102,114, 97,109,101, 91, 52, 93, 0,112, 97,100, 91, 52, 93, 0,118,101,114,116,101,120, 95,115,105,122,101, 0,102,
- 97, 99,101,100,111,116, 95,115,105,122,101, 0, 98,112, 97,100, 91, 50, 93, 0,115,121,110,116, 97,120,108, 91, 52, 93, 0,115,
-121,110,116, 97,120,110, 91, 52, 93, 0,115,121,110,116, 97,120, 98, 91, 52, 93, 0,115,121,110,116, 97,120,118, 91, 52, 93, 0,
-115,121,110,116, 97,120, 99, 91, 52, 93, 0,109,111,118,105,101, 91, 52, 93, 0,105,109, 97,103,101, 91, 52, 93, 0,115, 99,101,
-110,101, 91, 52, 93, 0, 97,117,100,105,111, 91, 52, 93, 0,101,102,102,101, 99,116, 91, 52, 93, 0,112,108,117,103,105,110, 91,
- 52, 93, 0,116,114, 97,110,115,105,116,105,111,110, 91, 52, 93, 0,109,101,116, 97, 91, 52, 93, 0,101,100,105,116,109,101,115,
-104, 95, 97, 99,116,105,118,101, 91, 52, 93, 0,115,111,108,105,100, 91, 52, 93, 0,116,117,105, 0,116, 98,117,116,115, 0,116,
-118, 51,100, 0,116,102,105,108,101, 0,116,105,112,111, 0,116,105,110,102,111, 0,116,115,110,100, 0,116, 97, 99,116, 0,116,
-110,108, 97, 0,116,115,101,113, 0,116,105,109, 97, 0,116,105,109, 97,115,101,108, 0,116,101,120,116, 0,116,111,111,112,115,
- 0,116,116,105,109,101, 0,116,110,111,100,101, 0,116, 97,114,109, 91, 50, 48, 93, 0, 98,112, 97,100, 91, 52, 93, 0, 98,112,
- 97,100, 49, 91, 52, 93, 0,115,112,101, 99, 91, 52, 93, 0,100,117,112,102,108, 97,103, 0,115, 97,118,101,116,105,109,101, 0,
-116,101,109,112,100,105,114, 91, 49, 54, 48, 93, 0,102,111,110,116,100,105,114, 91, 49, 54, 48, 93, 0,114,101,110,100,101,114,
-100,105,114, 91, 49, 54, 48, 93, 0,116,101,120,116,117,100,105,114, 91, 49, 54, 48, 93, 0,112,108,117,103,116,101,120,100,105,
-114, 91, 49, 54, 48, 93, 0,112,108,117,103,115,101,113,100,105,114, 91, 49, 54, 48, 93, 0,112,121,116,104,111,110,100,105,114,
- 91, 49, 54, 48, 93, 0,115,111,117,110,100,100,105,114, 91, 49, 54, 48, 93, 0,121,102,101,120,112,111,114,116,100,105,114, 91,
- 49, 54, 48, 93, 0,118,101,114,115,105,111,110,115, 0,118,114,109,108,102,108, 97,103, 0,103, 97,109,101,102,108, 97,103,115,
- 0,119,104,101,101,108,108,105,110,101,115, 99,114,111,108,108, 0,117,105,102,108, 97,103, 0,108, 97,110,103,117, 97,103,101,
- 0,117,115,101,114,112,114,101,102, 0,118,105,101,119,122,111,111,109, 0, 99,111,110,115,111,108,101, 95, 98,117,102,102,101,
-114, 0, 99,111,110,115,111,108,101, 95,111,117,116, 0,109,105,120, 98,117,102,115,105,122,101, 0,102,111,110,116,115,105,122,
-101, 0,101,110, 99,111,100,105,110,103, 0,116,114, 97,110,115,111,112,116,115, 0,109,101,110,117,116,104,114,101,115,104,111,
-108,100, 49, 0,109,101,110,117,116,104,114,101,115,104,111,108,100, 50, 0,102,111,110,116,110, 97,109,101, 91, 50, 53, 54, 93,
- 0,116,104,101,109,101,115, 0,117,110,100,111,115,116,101,112,115, 0, 99,117,114,115,115,105,122,101, 0,116, 98, 95,108,101,
-102,116,109,111,117,115,101, 0,116, 98, 95,114,105,103,104,116,109,111,117,115,101, 0,108,105,103,104,116, 91, 51, 93, 0,116,
-119, 95,104,111,116,115,112,111,116, 0,116,119, 95,102,108, 97,103, 0,116,119, 95,104, 97,110,100,108,101,115,105,122,101, 0,
-116,119, 95,115,105,122,101, 0,116,101,120,116,105,109,101,111,117,116, 0,116,101,120, 99,111,108,108,101, 99,116,114, 97,116,
-101, 0,109,101,109, 99, 97, 99,104,101,108,105,109,105,116, 0,112,114,101,102,101,116, 99,104,102,114, 97,109,101,115, 0,102,
-114, 97,109,101,115,101,114,118,101,114,112,111,114,116, 0,112, 97,100, 95,114,111,116, 95, 97,110,103,108,101, 0,111, 98, 99,
-101,110,116,101,114, 95,100,105, 97, 0,114,118,105,115,105,122,101, 0,114,118,105, 98,114,105,103,104,116, 0,114,101, 99,101,
-110,116, 95,102,105,108,101,115, 0,115,109,111,111,116,104, 95,118,105,101,119,116,120, 0,103,108,114,101,115,108,105,109,105,
-116, 0,118,101,114,115,101,109, 97,115,116,101,114, 91, 49, 54, 48, 93, 0,118,101,114,115,101,117,115,101,114, 91, 49, 54, 48,
- 93, 0,103,108, 97,108,112,104, 97, 99,108,105,112, 0, 97,117,116,111,107,101,121, 95,109,111,100,101, 0, 97,117,116,111,107,
-101,121, 95,102,108, 97,103, 0, 99,111, 98, 97, 95,119,101,105,103,104,116, 0,118,101,114,116, 98, 97,115,101, 0,101,100,103,
-101, 98, 97,115,101, 0, 97,114,101, 97, 98, 97,115,101, 0, 42,115, 99,101,110,101, 0,101,110,100,120, 0,101,110,100,121, 0,
-115,105,122,101,120, 0,115,105,122,101,121, 0,115, 99,101,110,101,110,114, 0,115, 99,114,101,101,110,110,114, 0,102,117,108,
-108, 0,109, 97,105,110,119,105,110, 0,119,105,110, 97,107,116, 0,104, 97,110,100,108,101,114, 91, 56, 93, 0, 42,110,101,119,
-118, 0,118,101, 99, 0, 42,118, 49, 0, 42,118, 50, 0,112, 97,110,101,108,110, 97,109,101, 91, 54, 52, 93, 0,116, 97, 98,110,
- 97,109,101, 91, 54, 52, 93, 0,100,114, 97,119,110, 97,109,101, 91, 54, 52, 93, 0,111,102,115,120, 0,111,102,115,121, 0, 99,
-111,110,116,114,111,108, 0,115,110, 97,112, 0,111,108,100, 95,111,102,115,120, 0,111,108,100, 95,111,102,115,121, 0,115,111,
-114,116, 99,111,117,110,116,101,114, 0, 42,112, 97,110,101,108,116, 97, 98, 0, 42,118, 51, 0, 42,118, 52, 0, 42,102,117,108,
-108, 0,119,105,110,109, 97,116, 91, 52, 93, 91, 52, 93, 0,104,101, 97,100,114, 99,116, 0,119,105,110,114, 99,116, 0,104,101,
- 97,100,119,105,110, 0,119,105,110, 0,104,101, 97,100,101,114,116,121,112,101, 0, 98,117,116,115,112, 97, 99,101,116,121,112,
-101, 0,119,105,110,120, 0,119,105,110,121, 0,104,101, 97,100, 95,115,119, 97,112, 0,104,101, 97,100, 95,101,113,117, 97,108,
- 0,119,105,110, 95,115,119, 97,112, 0,119,105,110, 95,101,113,117, 97,108, 0,104,101, 97,100, 98,117,116,108,101,110, 0,104,
-101, 97,100, 98,117,116,111,102,115, 0, 99,117,114,115,111,114, 0,115,112, 97, 99,101,100, 97,116, 97, 0,117,105, 98,108,111,
- 99,107,115, 0,112, 97,110,101,108,115, 0,115,117, 98,118,115,116,114, 91, 52, 93, 0,115,117, 98,118,101,114,115,105,111,110,
- 0,112, 97,100,115, 0,109,105,110,118,101,114,115,105,111,110, 0,109,105,110,115,117, 98,118,101,114,115,105,111,110, 0,100,
-105,115,112,108, 97,121,109,111,100,101, 0, 42, 99,117,114,115, 99,114,101,101,110, 0, 42, 99,117,114,115, 99,101,110,101, 0,
-102,105,108,101,102,108, 97,103,115, 0,103,108,111, 98, 97,108,102, 0,110, 97,109,101, 91, 56, 48, 93, 0, 42,105, 98,117,102,
- 0, 42,105, 98,117,102, 95, 99,111,109,112, 0, 42,115,101, 49, 0, 42,115,101, 50, 0, 42,115,101, 51, 0,110,114, 0, 98,111,
-116,116,111,109, 0,114,105,103,104,116, 0,120,111,102,115, 0,121,111,102,115, 0,108,105,102,116, 91, 51, 93, 0,103, 97,109,
-109, 97, 91, 51, 93, 0,103, 97,105,110, 91, 51, 93, 0,115, 97,116,117,114, 97,116,105,111,110, 0,100,111,110,101, 0,115,116,
- 97,114,116,115,116,105,108,108, 0,101,110,100,115,116,105,108,108, 0, 42,115,116,114,105,112,100, 97,116, 97, 0,111,114,120,
- 0,111,114,121, 0, 42, 99,114,111,112, 0, 42,116,114, 97,110,115,102,111,114,109, 0, 42, 99,111,108,111,114, 95, 98, 97,108,
- 97,110, 99,101, 0, 42,116,115,116,114,105,112,100, 97,116, 97, 0, 42,116,115,116,114,105,112,100, 97,116, 97, 95,115,116, 97,
-114,116,115,116,105,108,108, 0, 42,116,115,116,114,105,112,100, 97,116, 97, 95,101,110,100,115,116,105,108,108, 0, 42,105,110,
-115,116, 97,110, 99,101, 95,112,114,105,118, 97,116,101, 95,100, 97,116, 97, 0, 42, 42, 99,117,114,114,101,110,116, 95,112,114,
-105,118, 97,116,101, 95,100, 97,116, 97, 0, 42,116,109,112, 0,115,116, 97,114,116,111,102,115, 0,101,110,100,111,102,115, 0,
-109, 97, 99,104,105,110,101, 0,115,116, 97,114,116,100,105,115,112, 0,101,110,100,100,105,115,112, 0,109,117,108, 0,104, 97,
-110,100,115,105,122,101, 0, 97,110,105,109, 95,112,114,101,115,101,101,107, 0, 42,115,116,114,105,112, 0,102, 97, 99,102, 48,
- 0,102, 97, 99,102, 49, 0, 42,115,101,113, 49, 0, 42,115,101,113, 50, 0, 42,115,101,113, 51, 0,115,101,113, 98, 97,115,101,
- 0, 42,115,111,117,110,100, 0, 42,104,100, 97,117,100,105,111, 0,108,101,118,101,108, 0,112, 97,110, 0, 99,117,114,112,111,
-115, 0,115,116,114,111, 98,101, 0, 42,101,102,102,101, 99,116,100, 97,116, 97, 0, 97,110,105,109, 95,115,116, 97,114,116,111,
-102,115, 0, 97,110,105,109, 95,101,110,100,111,102,115, 0, 98,108,101,110,100, 95,109,111,100,101, 0, 98,108,101,110,100, 95,
-111,112, 97, 99,105,116,121, 0, 42,111,108,100, 98, 97,115,101,112, 0, 42,112, 97,114,115,101,113, 0, 42,115,101,113, 98, 97,
-115,101,112, 0,109,101,116, 97,115,116, 97, 99,107, 0,101,100,103,101, 87,105,100,116,104, 0,102,111,114,119, 97,114,100, 0,
-119,105,112,101,116,121,112,101, 0,102, 77,105,110,105, 0,102, 67,108, 97,109,112, 0,102, 66,111,111,115,116, 0,100, 68,105,
-115,116, 0,100, 81,117, 97,108,105,116,121, 0, 98, 78,111, 67,111,109,112, 0, 83, 99, 97,108,101,120, 73,110,105, 0, 83, 99,
- 97,108,101,121, 73,110,105, 0, 83, 99, 97,108,101,120, 70,105,110, 0, 83, 99, 97,108,101,121, 70,105,110, 0,120, 73,110,105,
- 0,120, 70,105,110, 0,121, 73,110,105, 0,121, 70,105,110, 0,114,111,116, 73,110,105, 0,114,111,116, 70,105,110, 0,105,110,
-116,101,114,112,111,108, 97,116,105,111,110, 0, 42,102,114, 97,109,101, 77, 97,112, 0,103,108,111, 98, 97,108, 83,112,101,101,
-100, 0,108, 97,115,116, 86, 97,108,105,100, 70,114, 97,109,101, 0, 98,117,116,116,121,112,101, 0,117,115,101,114,106,105,116,
- 0,115,116, 97, 0,101,110,100, 0,116,111,116,112, 97,114,116, 0,110,111,114,109,102, 97, 99, 0,111, 98,102, 97, 99, 0,114,
- 97,110,100,102, 97, 99, 0,116,101,120,102, 97, 99, 0,114, 97,110,100,108,105,102,101, 0,102,111,114, 99,101, 91, 51, 93, 0,
-118,101, 99,116,115,105,122,101, 0,109, 97,120,108,101,110, 0,100,101,102,118,101, 99, 91, 51, 93, 0,109,117,108,116, 91, 52,
- 93, 0,108,105,102,101, 91, 52, 93, 0, 99,104,105,108,100, 91, 52, 93, 0,109, 97,116, 91, 52, 93, 0,116,101,120,109, 97,112,
- 0, 99,117,114,109,117,108,116, 0,115,116, 97,116,105, 99,115,116,101,112, 0,111,109, 97,116, 0,116,105,109,101,116,101,120,
- 0,115,112,101,101,100,116,101,120, 0,102,108, 97,103, 50,110,101,103, 0,118,101,114,116,103,114,111,117,112, 95,118, 0,118,
-103,114,111,117,112,110, 97,109,101, 91, 51, 50, 93, 0,118,103,114,111,117,112,110, 97,109,101, 95,118, 91, 51, 50, 93, 0, 42,
-107,101,121,115, 0,109,105,110,102, 97, 99, 0,117,115,101,100, 0,117,115,101,100,101,108,101,109, 0,100,120, 0,100,121, 0,
-108,105,110,107, 0,111,116,121,112,101, 0,111,108,100, 0, 42,112,111,105,110, 0, 42,111,108,100,112,111,105,110, 0,114,101,
-115,101,116,100,105,115,116, 0,108, 97,115,116,118, 97,108, 0, 42,109, 97, 0,107,101,121, 0,113,117, 97,108, 0,113,117, 97,
-108, 50, 0,116, 97,114,103,101,116, 78, 97,109,101, 91, 51, 50, 93, 0,116,111,103,103,108,101, 78, 97,109,101, 91, 51, 50, 93,
- 0,118, 97,108,117,101, 91, 51, 50, 93, 0,109, 97,120,118, 97,108,117,101, 91, 51, 50, 93, 0,109, 97,116,101,114,105, 97,108,
- 78, 97,109,101, 91, 51, 50, 93, 0,100, 97,109,112,116,105,109,101,114, 0,100,101,108, 97,121, 0,112,114,111,112,110, 97,109,
-101, 91, 51, 50, 93, 0,109, 97,116,110, 97,109,101, 91, 51, 50, 93, 0, 97,120,105,115,102,108, 97,103, 0, 42,102,114,111,109,
- 79, 98,106,101, 99,116, 0,115,117, 98,106,101, 99,116, 91, 51, 50, 93, 0, 98,111,100,121, 91, 51, 50, 93, 0,112,117,108,115,
-101, 0,102,114,101,113, 0,116,111,116,108,105,110,107,115, 0, 42, 42,108,105,110,107,115, 0,102,114,101,113, 50, 0, 97,120,
-105,115,102, 0, 98,117,116,116,111,110, 0, 98,117,116,116,111,110,102, 0,104, 97,116, 0,104, 97,116,102, 0,112,114,101, 99,
-105,115,105,111,110, 0,115,116,114, 91, 49, 50, 56, 93, 0, 42,109,121,110,101,119, 0,105,110,112,117,116,115, 0,116,111,116,
-115,108,105,110,107,115, 0, 42, 42,115,108,105,110,107,115, 0,118, 97,108,111, 0, 42, 97, 99,116, 0, 98,108,101,110,100,105,
-110, 0,112,114,105,111,114,105,116,121, 0,115,116,114,105,100,101, 97,120,105,115, 0,115,116,114,105,100,101,108,101,110,103,
-116,104, 0,115,110,100,110,114, 0,112, 97,100, 49, 91, 50, 93, 0,109, 97,107,101, 99,111,112,121, 0, 99,111,112,121,109, 97,
-100,101, 0,112, 97,100, 50, 91, 49, 93, 0,116,114, 97, 99,107, 0,118,111,108,117,109,101, 0, 42,109,101, 0,108,105,110, 86,
-101,108,111, 99,105,116,121, 91, 51, 93, 0,108,111, 99, 97,108,102,108, 97,103, 0,102,111,114, 99,101,108,111, 99, 91, 51, 93,
- 0,102,111,114, 99,101,114,111,116, 91, 51, 93, 0,108,105,110,101, 97,114,118,101,108,111, 99,105,116,121, 91, 51, 93, 0, 97,
-110,103,117,108, 97,114,118,101,108,111, 99,105,116,121, 91, 51, 93, 0, 98,117,116,115,116, 97, 0, 98,117,116,101,110,100, 0,
-109,105,110, 0,109, 97,120, 0,118,105,115,105,102, 97, 99, 0,115,108,111,119, 0,109,105,110,108,111, 99, 91, 51, 93, 0,109,
- 97,120,108,111, 99, 91, 51, 93, 0,109,105,110,114,111,116, 91, 51, 93, 0,109, 97,120,114,111,116, 91, 51, 93, 0,100,105,115,
-116,114,105, 98,117,116,105,111,110, 0,105,110,116, 95, 97,114,103, 95, 49, 0,105,110,116, 95, 97,114,103, 95, 50, 0,102,108,
-111, 97,116, 95, 97,114,103, 95, 49, 0,102,108,111, 97,116, 95, 97,114,103, 95, 50, 0,116,111, 80,114,111,112, 78, 97,109,101,
- 91, 51, 50, 93, 0, 42,116,111, 79, 98,106,101, 99,116, 0, 98,111,100,121, 84,121,112,101, 0,102,105,108,101,110, 97,109,101,
- 91, 54, 52, 93, 0,108,111, 97,100, 97,110,105,110, 97,109,101, 91, 54, 52, 93, 0,105,110,116, 95, 97,114,103, 0,102,108,111,
- 97,116, 95, 97,114,103, 0,103,111, 0, 97, 99, 99,101,108,108,101,114, 97,116,105,111,110, 0,109, 97,120,115,112,101,101,100,
- 0,109, 97,120,114,111,116,115,112,101,101,100, 0,109, 97,120,116,105,108,116,115,112,101,101,100, 0,114,111,116,100, 97,109,
-112, 0,116,105,108,116,100, 97,109,112, 0,115,112,101,101,100,100, 97,109,112, 0, 42,115, 97,109,112,108,101, 0, 42,115,116,
-114,101, 97,109, 0, 42,110,101,119,112, 97, 99,107,101,100,102,105,108,101, 0, 42,115,110,100, 95,115,111,117,110,100, 0,112,
- 97,110,110,105,110,103, 0, 97,116,116,101,110,117, 97,116,105,111,110, 0,112,105,116, 99,104, 0,109,105,110, 95,103, 97,105,
-110, 0,109, 97,120, 95,103, 97,105,110, 0,100,105,115,116, 97,110, 99,101, 0,115,116,114,101, 97,109,108,101,110, 0, 99,104,
- 97,110,110,101,108,115, 0,104,105,103,104,112,114,105,111, 0,112, 97,100, 91, 49, 48, 93, 0,103, 97,105,110, 0,100,111,112,
-112,108,101,114,102, 97, 99,116,111,114, 0,100,111,112,112,108,101,114,118,101,108,111, 99,105,116,121, 0,110,117,109,115,111,
-117,110,100,115, 98,108,101,110,100,101,114, 0,110,117,109,115,111,117,110,100,115,103, 97,109,101,101,110,103,105,110,101, 0,
- 42,108, 97,109,112,114,101,110, 0,103,111, 98,106,101, 99,116, 0, 99,104,105,108,100, 98, 97,115,101, 0,114,111,108,108, 0,
-104,101, 97,100, 91, 51, 93, 0,116, 97,105,108, 91, 51, 93, 0, 98,111,110,101, 95,109, 97,116, 91, 51, 93, 91, 51, 93, 0, 97,
-114,109, 95,104,101, 97,100, 91, 51, 93, 0, 97,114,109, 95,116, 97,105,108, 91, 51, 93, 0, 97,114,109, 95,109, 97,116, 91, 52,
- 93, 91, 52, 93, 0,120,119,105,100,116,104, 0,122,119,105,100,116,104, 0,101, 97,115,101, 49, 0,101, 97,115,101, 50, 0,114,
- 97,100, 95,104,101, 97,100, 0,114, 97,100, 95,116, 97,105,108, 0, 98,111,110,101, 98, 97,115,101, 0, 99,104, 97,105,110, 98,
- 97,115,101, 0,112, 97,116,104,102,108, 97,103, 0,108, 97,121,101,114, 95,112,114,111,116,101, 99,116,101,100, 0,103,104,111,
-115,116,101,112, 0,103,104,111,115,116,115,105,122,101, 0,103,104,111,115,116,116,121,112,101, 0,112, 97,116,104,115,105,122,
-101, 0,103,104,111,115,116,115,102, 0,103,104,111,115,116,101,102, 0,112, 97,116,104,115,102, 0,112, 97,116,104,101,102, 0,
-112, 97,116,104, 98, 99, 0,112, 97,116,104, 97, 99, 0, 99,111,110,115,116,102,108, 97,103, 0,105,107,102,108, 97,103, 0,115,
-101,108,101, 99,116,102,108, 97,103, 0, 97,103,114,112, 95,105,110,100,101,120, 0, 42, 98,111,110,101, 0, 42, 99,104,105,108,
-100, 0,105,107,116,114,101,101, 0, 42, 98, 95, 98,111,110,101, 95,109, 97,116,115, 0, 42,100,117, 97,108, 95,113,117, 97,116,
- 0, 42, 98, 95, 98,111,110,101, 95,100,117, 97,108, 95,113,117, 97,116,115, 0, 99,104, 97,110, 95,109, 97,116, 91, 52, 93, 91,
- 52, 93, 0,112,111,115,101, 95,109, 97,116, 91, 52, 93, 91, 52, 93, 0,112,111,115,101, 95,104,101, 97,100, 91, 51, 93, 0,112,
-111,115,101, 95,116, 97,105,108, 91, 51, 93, 0,108,105,109,105,116,109,105,110, 91, 51, 93, 0,108,105,109,105,116,109, 97,120,
- 91, 51, 93, 0,115,116,105,102,102,110,101,115,115, 91, 51, 93, 0,105,107,115,116,114,101,116, 99,104, 0, 42, 99,117,115,116,
-111,109, 0, 99,104, 97,110, 98, 97,115,101, 0,112,114,111,120,121, 95,108, 97,121,101,114, 0,115,116,114,105,100,101, 95,111,
-102,102,115,101,116, 91, 51, 93, 0, 99,121, 99,108,105, 99, 95,111,102,102,115,101,116, 91, 51, 93, 0, 97,103,114,111,117,112,
-115, 0, 97, 99,116,105,118,101, 95,103,114,111,117,112, 0, 99,117,115,116,111,109, 67,111,108, 0, 42,103,114,112, 0,114,101,
-115,101,114,118,101,100, 49, 0,103,114,111,117,112,115, 0, 97, 99,116,105,118,101, 95,109, 97,114,107,101,114, 0, 97, 99,116,
-110,114, 0, 97, 99,116,119,105,100,116,104, 0,116,105,109,101,115,108,105,100,101, 0,110, 97,109,101, 91, 51, 48, 93, 0,111,
-119,110,115,112, 97, 99,101, 0,116, 97,114,115,112, 97, 99,101, 0,101,110,102,111,114, 99,101, 0,104,101, 97,100,116, 97,105,
-108, 0, 42,116, 97,114, 0,115,117, 98,116, 97,114,103,101,116, 91, 51, 50, 93, 0,109, 97,116,114,105,120, 91, 52, 93, 91, 52,
- 93, 0,115,112, 97, 99,101, 0, 42,112,114,111,112, 0,116, 97,114,110,117,109, 0,116, 97,114,103,101,116,115, 0,105,116,101,
-114, 97,116,105,111,110,115, 0,114,111,111,116, 98,111,110,101, 0,109, 97,120, 95,114,111,111,116, 98,111,110,101, 0, 42,112,
-111,108,101,116, 97,114, 0,112,111,108,101,115,117, 98,116, 97,114,103,101,116, 91, 51, 50, 93, 0,112,111,108,101, 97,110,103,
-108,101, 0,111,114,105,101,110,116,119,101,105,103,104,116, 0,103,114, 97, 98,116, 97,114,103,101,116, 91, 51, 93, 0,114,101,
-115,101,114,118,101,100, 50, 0,109,105,110,109, 97,120,102,108, 97,103, 0,115,116,117, 99,107, 0, 99, 97, 99,104,101, 91, 51,
- 93, 0,108,111, 99,107,102,108, 97,103, 0,102,111,108,108,111,119,102,108, 97,103, 0,118,111,108,109,111,100,101, 0,112,108,
- 97,110,101, 0,111,114,103,108,101,110,103,116,104, 0, 98,117,108,103,101, 0,112,105,118, 88, 0,112,105,118, 89, 0,112,105,
-118, 90, 0, 97,120, 88, 0, 97,120, 89, 0, 97,120, 90, 0,109,105,110, 76,105,109,105,116, 91, 54, 93, 0,109, 97,120, 76,105,
-109,105,116, 91, 54, 93, 0,101,120,116,114, 97, 70,122, 0,105,110,118,109, 97,116, 91, 52, 93, 91, 52, 93, 0,102,114,111,109,
- 0,116,111, 0,109, 97,112, 91, 51, 93, 0,101,120,112,111, 0,102,114,111,109, 95,109,105,110, 91, 51, 93, 0,102,114,111,109,
- 95,109, 97,120, 91, 51, 93, 0,116,111, 95,109,105,110, 91, 51, 93, 0,116,111, 95,109, 97,120, 91, 51, 93, 0,122,109,105,110,
- 0,122,109, 97,120, 0, 99,104, 97,110,110,101,108, 91, 51, 50, 93, 0,110,111, 95,114,111,116, 95, 97,120,105,115, 0,115,116,
-114,105,100,101, 95, 97,120,105,115, 0, 99,117,114,109,111,100, 0, 97, 99,116,115,116, 97,114,116, 0, 97, 99,116,101,110,100,
- 0, 97, 99,116,111,102,102,115, 0,115,116,114,105,100,101,108,101,110, 0, 98,108,101,110,100,111,117,116, 0,115,116,114,105,
-100,101, 99,104, 97,110,110,101,108, 91, 51, 50, 93, 0,111,102,102,115, 95, 98,111,110,101, 91, 51, 50, 93, 0,104, 97,115,105,
-110,112,117,116, 0,104, 97,115,111,117,116,112,117,116, 0,100, 97,116, 97,116,121,112,101, 0,115,111, 99,107,101,116,116,121,
-112,101, 0,110,115, 0,108,105,109,105,116, 0,115,116, 97, 99,107, 95,105,110,100,101,120, 0,105,110,116,101,114,110, 0,115,
-116, 97, 99,107, 95,105,110,100,101,120, 95,101,120,116, 0,108,111, 99,120, 0,108,111, 99,121, 0,111,119,110, 95,105,110,100,
-101,120, 0,116,111, 95,105,110,100,101,120, 0, 42,116,111,115,111, 99,107, 0, 42,108,105,110,107, 0, 42,110,101,119, 95,110,
-111,100,101, 0,117,115,101,114,110, 97,109,101, 91, 51, 50, 93, 0,108, 97,115,116,121, 0,111,117,116,112,117,116,115, 0, 42,
-115,116,111,114, 97,103,101, 0,109,105,110,105,119,105,100,116,104, 0, 99,117,115,116,111,109, 49, 0, 99,117,115,116,111,109,
- 50, 0,110,101,101,100, 95,101,120,101, 99, 0,101,120,101, 99, 0,116,111,116,114, 0, 98,117,116,114, 0,112,114,118,114, 0,
- 42,116,121,112,101,105,110,102,111, 0, 42,102,114,111,109,110,111,100,101, 0, 42,116,111,110,111,100,101, 0, 42,102,114,111,
-109,115,111, 99,107, 0,110,111,100,101,115, 0,108,105,110,107,115, 0, 42, 42,115,116, 97, 99,107, 0,105,110,105,116, 0,115,
-116, 97, 99,107,115,105,122,101, 0, 99,117,114, 95,105,110,100,101,120, 0, 97,108,108,116,121,112,101,115, 0, 42,111,119,110,
-116,121,112,101, 0, 42,115,101,108,105,110, 0, 42,115,101,108,111,117,116, 0, 40, 42,116,105,109,101, 99,117,114,115,111,114,
- 41, 40, 41, 0, 40, 42,115,116, 97,116,115, 95,100,114, 97,119, 41, 40, 41, 0, 40, 42,116,101,115,116, 95, 98,114,101, 97,107,
- 41, 40, 41, 0, 99,121, 99,108,105, 99, 0,109,111,118,105,101, 0,115, 97,109,112,108,101,115, 0,109,105,110,115,112,101,101,
-100, 0,112,101,114, 99,101,110,116,120, 0,112,101,114, 99,101,110,116,121, 0, 98,111,107,101,104, 0, 99,117,114,118,101,100,
- 0,105,109, 97,103,101, 95,105,110, 95,119,105,100,116,104, 0,105,109, 97,103,101, 95,105,110, 95,104,101,105,103,104,116, 0,
- 99,101,110,116,101,114, 95,120, 0, 99,101,110,116,101,114, 95,121, 0,115,112,105,110, 0,105,116,101,114, 0,119,114, 97,112,
- 0,115,105,103,109, 97, 95, 99,111,108,111,114, 0,115,105,103,109, 97, 95,115,112, 97, 99,101, 0,104,117,101, 0,115, 97,116,
- 0,116, 49, 0,116, 50, 0,116, 51, 0,102,115,116,114,101,110,103,116,104, 0,102, 97,108,112,104, 97, 0,107,101,121, 91, 52,
- 93, 0,120, 49, 0,120, 50, 0,121, 49, 0,121, 50, 0, 99,111,108,110, 97,109,101, 91, 51, 50, 93, 0, 98,107,116,121,112,101,
- 0,114,111,116, 97,116,105,111,110, 0,112,114,101,118,105,101,119, 0,103, 97,109, 99,111, 0,110,111, 95,122, 98,117,102, 0,
-102,115,116,111,112, 0,109, 97,120, 98,108,117,114, 0, 98,116,104,114,101,115,104, 0, 42,100,105, 99,116, 0, 42,110,111,100,
-101, 0, 97,110,103,108,101, 95,111,102,115, 0, 99,111,108,109,111,100, 0,109,105,120, 0,116,104,114,101,115,104,111,108,100,
- 0,102, 97,100,101, 0,109, 0, 99, 0,106,105,116, 0,112,114,111,106, 0,102,105,116, 0,115,104,111,114,116,121, 0,109,105,
-110,116, 97, 98,108,101, 0,109, 97,120,116, 97, 98,108,101, 0,101,120,116, 95,105,110, 91, 50, 93, 0,101,120,116, 95,111,117,
-116, 91, 50, 93, 0, 42, 99,117,114,118,101, 0, 42,116, 97, 98,108,101, 0, 42,112,114,101,109,117,108,116, 97, 98,108,101, 0,
- 99,117,114,114, 0, 99,108,105,112,114, 0, 99,109, 91, 52, 93, 0, 98,108, 97, 99,107, 91, 51, 93, 0,119,104,105,116,101, 91,
- 51, 93, 0, 98,119,109,117,108, 91, 51, 93, 0,115, 97,109,112,108,101, 91, 51, 93, 0,111,102,102,115,101,116, 91, 50, 93, 0,
-105,110,110,101,114,114, 97,100,105,117,115, 0,114, 97,116,101, 0,114,103, 98, 91, 51, 93, 0, 99,108,111,110,101, 0, 97, 99,
-116,105,118,101, 95,114,110,100, 0, 42,108, 97,121,101,114,115, 0,116,111,116,108, 97,121,101,114, 0,109, 97,120,108, 97,121,
-101,114, 0,116,111,116,115,105,122,101, 0,101,100,105,116,102,108, 97,103, 0,118,101,108, 91, 51, 93, 0,114,111,116, 91, 52,
- 93, 0, 97,118,101, 91, 51, 93, 0,110,117,109, 0,112, 97,114,101,110,116, 0,112, 97, 91, 52, 93, 0,119, 91, 52, 93, 0,102,
-117,118, 91, 52, 93, 0,102,111,102,102,115,101,116, 0,114, 97,110,100, 91, 51, 93, 0, 42,115,116,105, 99,107, 95,111, 98, 0,
-115,116, 97,116,101, 0, 42,104, 97,105,114, 0,105, 95,114,111,116, 91, 52, 93, 0,114, 95,114,111,116, 91, 52, 93, 0,114, 95,
- 97,118,101, 91, 51, 93, 0,114, 95,118,101, 91, 51, 93, 0,100,105,101,116,105,109,101, 0, 98, 97,110,107, 0,115,105,122,101,
-109,117,108, 0,110,117,109, 95,100,109, 99, 97, 99,104,101, 0, 98,112,105, 0, 97,108,105,118,101, 0,108,111,111,112, 0,100,
-105,115,116,114, 0,112,104,121,115,116,121,112,101, 0,114,111,116,109,111,100,101, 0, 97,118,101,109,111,100,101, 0,114,101,
- 97, 99,116,101,118,101,110,116, 0,100,114, 97,119, 0,100,114, 97,119, 95, 97,115, 0,100,114, 97,119, 95,115,105,122,101, 0,
- 99,104,105,108,100,116,121,112,101, 0,100,114, 97,119, 95,115,116,101,112, 0,114,101,110, 95,115,116,101,112, 0,104, 97,105,
-114, 95,115,116,101,112, 0,107,101,121,115, 95,115,116,101,112, 0, 97,100, 97,112,116, 95, 97,110,103,108,101, 0, 97,100, 97,
-112,116, 95,112,105,120, 0,114,111,116,102,114,111,109, 0,105,110,116,101,103,114, 97,116,111,114, 0,110, 98,101,116,119,101,
-101,110, 0, 98,111,105,100,110,101,105,103,104, 98,111,117,114,115, 0, 98, 98, 95, 97,108,105,103,110, 0, 98, 98, 95,117,118,
- 95,115,112,108,105,116, 0, 98, 98, 95, 97,110,105,109, 0, 98, 98, 95,115,112,108,105,116, 95,111,102,102,115,101,116, 0, 98,
- 98, 95,116,105,108,116, 0, 98, 98, 95,114, 97,110,100, 95,116,105,108,116, 0, 98, 98, 95,111,102,102,115,101,116, 91, 50, 93,
- 0,115,105,109,112,108,105,102,121, 95,102,108, 97,103, 0,115,105,109,112,108,105,102,121, 95,114,101,102,115,105,122,101, 0,
-115,105,109,112,108,105,102,121, 95,114, 97,116,101, 0,115,105,109,112,108,105,102,121, 95,116,114, 97,110,115,105,116,105,111,
-110, 0,115,105,109,112,108,105,102,121, 95,118,105,101,119,112,111,114,116, 0,116,105,109,101,116,119,101, 97,107, 0,106,105,
-116,102, 97, 99, 0,107,101,121,101,100, 95,116,105,109,101, 0,101,102,102, 95,104, 97,105,114, 0,103,114,105,100, 95,114,101,
-115, 0,112, 97,114,116,102, 97, 99, 0,116, 97,110,102, 97, 99, 0,116, 97,110,112,104, 97,115,101, 0,114,101, 97, 99,116,102,
- 97, 99, 0, 97,118,101,102, 97, 99, 0,112,104, 97,115,101,102, 97, 99, 0,114, 97,110,100,114,111,116,102, 97, 99, 0,114, 97,
-110,100,112,104, 97,115,101,102, 97, 99, 0,114, 97,110,100,115,105,122,101, 0,114,101, 97, 99,116,115,104, 97,112,101, 0, 97,
- 99, 99, 91, 51, 93, 0,100,114, 97,103,102, 97, 99, 0, 98,114,111,119,110,102, 97, 99, 0,100, 97,109,112,102, 97, 99, 0, 97,
- 98,115,108,101,110,103,116,104, 0,114, 97,110,100,108,101,110,103,116,104, 0, 99,104,105,108,100, 95,110, 98,114, 0,114,101,
-110, 95, 99,104,105,108,100, 95,110, 98,114, 0,112, 97,114,101,110,116,115, 0, 99,104,105,108,100,115,105,122,101, 0, 99,104,
-105,108,100,114, 97,110,100,115,105,122,101, 0, 99,104,105,108,100,114, 97,100, 0, 99,104,105,108,100,102,108, 97,116, 0, 99,
-104,105,108,100,115,112,114,101, 97,100, 0, 99,108,117,109,112,102, 97, 99, 0, 99,108,117,109,112,112,111,119, 0,114,111,117,
-103,104, 49, 0,114,111,117,103,104, 49, 95,115,105,122,101, 0,114,111,117,103,104, 50, 0,114,111,117,103,104, 50, 95,115,105,
-122,101, 0,114,111,117,103,104, 50, 95,116,104,114,101,115, 0,114,111,117,103,104, 95,101,110,100, 0,114,111,117,103,104, 95,
-101,110,100, 95,115,104, 97,112,101, 0, 98,114, 97,110, 99,104, 95,116,104,114,101,115, 0,100,114, 97,119, 95,108,105,110,101,
- 91, 50, 93, 0,109, 97,120, 95,118,101,108, 0,109, 97,120, 95,108, 97,116, 95, 97, 99, 99, 0,109, 97,120, 95,116, 97,110, 95,
- 97, 99, 99, 0, 97,118,101,114, 97,103,101, 95,118,101,108, 0, 98, 97,110,107,105,110,103, 0,109, 97,120, 95, 98, 97,110,107,
- 0,103,114,111,117,110,100,122, 0, 98,111,105,100,102, 97, 99, 91, 56, 93, 0, 98,111,105,100,114,117,108,101, 91, 56, 93, 0,
- 42,101,102,102, 95,103,114,111,117,112, 0, 42,100,117,112, 95,111, 98, 0, 42, 98, 98, 95,111, 98, 0, 42,112, 97,114,116, 0,
- 42,101,100,105,116, 0, 42, 42,112, 97,116,104, 99, 97, 99,104,101, 0, 42, 42, 99,104,105,108,100, 99, 97, 99,104,101, 0, 42,
-116, 97,114,103,101,116, 95,111, 98, 0, 42,107,101,121,101,100, 95,111, 98, 0, 42,108, 97,116,116,105, 99,101, 0,101,102,102,
-101, 99,116,111,114,115, 0,114,101, 97, 99,116,101,118,101,110,116,115, 0,116,111,116, 99,104,105,108,100, 0,116,111,116, 99,
- 97, 99,104,101,100, 0,116,111,116, 99,104,105,108,100, 99, 97, 99,104,101, 0,116, 97,114,103,101,116, 95,112,115,121,115, 0,
-107,101,121,101,100, 95,112,115,121,115, 0,116,111,116,107,101,121,101,100, 0, 98, 97,107,101,115,112, 97, 99,101, 0, 98, 98,
- 95,117,118,110, 97,109,101, 91, 51, 93, 91, 51, 50, 93, 0,118,103,114,111,117,112, 91, 49, 49, 93, 0,118,103, 95,110,101,103,
- 0,114,116, 51, 91, 50, 93, 0, 42,114,101,110,100,101,114,100, 97,116, 97, 0,118,103,114,111,117,112, 95,109, 97,115,115, 0,
-118,103,114,111,117,112, 95,115,116,114,117, 99,116, 0,112,114,101,114,111,108,108, 0, 67,100,105,115, 0, 67,118,105, 0,115,
-116,101,112,115, 80,101,114, 70,114, 97,109,101, 0, 91, 51, 93, 0,117,102,108,117,105,100, 0,115,116,114,117, 99,116,117,114,
- 97,108, 0, 98,101,110,100,105,110,103, 0,115,105,109, 95,116,105,109,101, 0,115,111,108,118,101,114, 95,116,121,112,101, 0,
-118,103,114,111,117,112, 95, 98,101,110,100, 0,101,102,102, 95,102,111,114, 99,101, 95,115, 99, 97,108,101, 0,101,102,102, 95,
-119,105,110,100, 95,115, 99, 97,108,101, 0,115,105,109, 95,116,105,109,101, 95,111,108,100, 0, 42, 99, 97, 99,104,101, 0,109,
- 97,120,115,112,114,105,110,103,108,101,110, 0,102,105,114,115,116,102,114, 97,109,101, 0,108, 97,115,116, 99, 97, 99,104,101,
-100,102,114, 97,109,101, 0,101,100,105,116,101,100,102,114, 97,109,101, 0, 97,117,116,111,112,114,111,116,101, 99,116, 0,109,
- 97,120, 95, 98,101,110,100, 0,109, 97,120, 95,115,116,114,117, 99,116, 0,109, 97,120, 95,115,104,101, 97,114, 0,102,105,114,
-115,116, 99, 97, 99,104,101,100,102,114, 97,109,101, 0, 97,118,103, 95,115,112,114,105,110,103, 95,108,101,110, 0,101,112,115,
-105,108,111,110, 0,115,101,108,102, 95,102,114,105, 99,116,105,111,110, 0,115,101,108,102, 95,108,111,111,112, 95, 99,111,117,
-110,116, 0,108,111,111,112, 95, 99,111,117,110,116, 0, 42, 99,111,108,108,105,115,105,111,110, 95,108,105,115,116, 0,115,101,
-108,102,101,112,115,105,108,111,110, 0, 42,115,112,114,105,110,103,115, 0,110,117,109,115,112,114,105,110,103,115, 0,111,108,
-100, 95,115,111,108,118,101,114, 95,116,121,112,101, 0, 42,105,109,112,108,105, 99,105,116, 0, 42,105,109,112,108,105, 99,105,
-116, 69, 77, 0, 42,101,100,103,101,104, 97,115,104, 0, 0, 0, 84, 89, 80, 69, 74, 1, 0, 0, 99,104, 97,114, 0,117, 99,104,
+101,110,117,110,114, 0,105, 98,117,102,115, 0, 42,103,112,117,116,101,120,116,117,114,101, 0, 42, 97,110,105,109, 0, 42,114,
+114, 0,115,111,117,114, 99,101, 0,108, 97,115,116,102,114, 97,109,101, 0,116,112, 97,103,101,102,108, 97,103, 0,116,111,116,
+ 98,105,110,100, 0,120,114,101,112, 0,121,114,101,112, 0,116,119,115,116, 97, 0,116,119,101,110,100, 0, 98,105,110,100, 99,
+111,100,101, 0, 42,114,101,112, 98,105,110,100, 0, 42,112, 97, 99,107,101,100,102,105,108,101, 0, 42,112,114,101,118,105,101,
+119, 0,108, 97,115,116,117,112,100, 97,116,101, 0,108, 97,115,116,117,115,101,100, 0, 97,110,105,109,115,112,101,101,100, 0,
+103,101,110, 95,120, 0,103,101,110, 95,121, 0,103,101,110, 95,116,121,112,101, 0, 97,115,112,120, 0, 97,115,112,121, 0, 42,
+118,110,111,100,101, 0,116,101,120, 99,111, 0,109, 97,112,116,111, 0,109, 97,112,116,111,110,101,103, 0, 98,108,101,110,100,
+116,121,112,101, 0, 42,111, 98,106,101, 99,116, 0, 42,116,101,120, 0,117,118,110, 97,109,101, 91, 51, 50, 93, 0,112,114,111,
+106,120, 0,112,114,111,106,121, 0,112,114,111,106,122, 0,109, 97,112,112,105,110,103, 0,111,102,115, 91, 51, 93, 0,115,105,
+122,101, 91, 51, 93, 0,116,101,120,102,108, 97,103, 0, 99,111,108,111,114,109,111,100,101,108, 0,112,109, 97,112,116,111, 0,
+112,109, 97,112,116,111,110,101,103, 0,110,111,114,109, 97,112,115,112, 97, 99,101, 0,112, 97,100, 91, 51, 93, 0,114, 0,103,
+ 0, 98, 0,107, 0,100,101,102, 95,118, 97,114, 0, 99,111,108,102, 97, 99, 0,110,111,114,102, 97, 99, 0,118, 97,114,102, 97,
+ 99, 0,100,105,115,112,102, 97, 99, 0,119, 97,114,112,102, 97, 99, 0,110, 97,109,101, 91, 49, 54, 48, 93, 0, 42,104, 97,110,
+100,108,101, 0, 42,112,110, 97,109,101, 0, 42,115,116,110, 97,109,101,115, 0,115,116,121,112,101,115, 0,118, 97,114,115, 0,
+ 42,118, 97,114,115,116,114, 0, 42,114,101,115,117,108,116, 0, 42, 99,102,114, 97, 0,100, 97,116, 97, 91, 51, 50, 93, 0, 40,
+ 42,100,111,105,116, 41, 40, 41, 0, 40, 42,105,110,115,116, 97,110, 99,101, 95,105,110,105,116, 41, 40, 41, 0, 40, 42, 99, 97,
+108,108, 98, 97, 99,107, 41, 40, 41, 0,118,101,114,115,105,111,110, 0, 97, 0,105,112,111,116,121,112,101, 0, 42,105,109, 97,
+ 0, 42, 99,117, 98,101, 91, 54, 93, 0,105,109, 97,116, 91, 52, 93, 91, 52, 93, 0,111, 98,105,109, 97,116, 91, 51, 93, 91, 51,
+ 93, 0,115,116,121,112,101, 0,118,105,101,119,115, 99, 97,108,101, 0,110,111,116,108, 97,121, 0, 99,117, 98,101,114,101,115,
+ 0,100,101,112,116,104, 0,114,101, 99, 97,108, 99, 0,108, 97,115,116,115,105,122,101, 0,110,111,105,115,101,115,105,122,101,
+ 0,116,117,114, 98,117,108, 0, 98,114,105,103,104,116, 0, 99,111,110,116,114, 97,115,116, 0,114,102, 97, 99, 0,103,102, 97,
+ 99, 0, 98,102, 97, 99, 0,102,105,108,116,101,114,115,105,122,101, 0,109,103, 95, 72, 0,109,103, 95,108, 97, 99,117,110, 97,
+114,105,116,121, 0,109,103, 95,111, 99,116, 97,118,101,115, 0,109,103, 95,111,102,102,115,101,116, 0,109,103, 95,103, 97,105,
+110, 0,100,105,115,116, 95, 97,109,111,117,110,116, 0,110,115, 95,111,117,116,115, 99, 97,108,101, 0,118,110, 95,119, 49, 0,
+118,110, 95,119, 50, 0,118,110, 95,119, 51, 0,118,110, 95,119, 52, 0,118,110, 95,109,101,120,112, 0,118,110, 95,100,105,115,
+116,109, 0,118,110, 95, 99,111,108,116,121,112,101, 0,110,111,105,115,101,100,101,112,116,104, 0,110,111,105,115,101,116,121,
+112,101, 0,110,111,105,115,101, 98, 97,115,105,115, 0,110,111,105,115,101, 98, 97,115,105,115, 50, 0,105,109, 97,102,108, 97,
+103, 0, 99,114,111,112,120,109,105,110, 0, 99,114,111,112,121,109,105,110, 0, 99,114,111,112,120,109, 97,120, 0, 99,114,111,
+112,121,109, 97,120, 0,120,114,101,112,101, 97,116, 0,121,114,101,112,101, 97,116, 0,101,120,116,101,110,100, 0, 99,104,101,
+ 99,107,101,114,100,105,115,116, 0,110, 97, 98,108, 97, 0,105,117,115,101,114, 0, 42,112,108,117,103,105,110, 0, 42, 99,111,
+ 98, 97, 0, 42,101,110,118, 0,108,111, 99, 91, 51, 93, 0,114,111,116, 91, 51, 93, 0,109, 97,116, 91, 52, 93, 91, 52, 93, 0,
+109,105,110, 91, 51, 93, 0,109, 97,120, 91, 51, 93, 0,112, 97,100, 51, 0,109,111,100,101, 0,116,111,116,101,120, 0,115,104,
+100,119,114, 0,115,104,100,119,103, 0,115,104,100,119, 98, 0,115,104,100,119,112, 97,100, 0,101,110,101,114,103,121, 0,100,
+105,115,116, 0,115,112,111,116,115,105,122,101, 0,115,112,111,116, 98,108,101,110,100, 0,104, 97,105,110,116, 0, 97,116,116,
+ 49, 0, 97,116,116, 50, 0, 42, 99,117,114,102, 97,108,108,111,102,102, 0,102, 97,108,108,111,102,102, 95,116,121,112,101, 0,
+115,104, 97,100,115,112,111,116,115,105,122,101, 0, 98,105, 97,115, 0,115,111,102,116, 0, 98,117,102,115,105,122,101, 0,115,
+ 97,109,112, 0, 98,117,102,102,101,114,115, 0,102,105,108,116,101,114,116,121,112,101, 0, 98,117,102,102,108, 97,103, 0, 98,
+117,102,116,121,112,101, 0,114, 97,121, 95,115, 97,109,112, 0,114, 97,121, 95,115, 97,109,112,121, 0,114, 97,121, 95,115, 97,
+109,112,122, 0,114, 97,121, 95,115, 97,109,112, 95,116,121,112,101, 0, 97,114,101, 97, 95,115,104, 97,112,101, 0, 97,114,101,
+ 97, 95,115,105,122,101, 0, 97,114,101, 97, 95,115,105,122,101,121, 0, 97,114,101, 97, 95,115,105,122,101,122, 0, 97,100, 97,
+112,116, 95,116,104,114,101,115,104, 0,114, 97,121, 95,115, 97,109,112, 95,109,101,116,104,111,100, 0,116,101,120, 97, 99,116,
+ 0,115,104, 97,100,104, 97,108,111,115,116,101,112, 0,115,117,110, 95,101,102,102,101, 99,116, 95,116,121,112,101, 0,115,107,
+121, 98,108,101,110,100,116,121,112,101, 0,104,111,114,105,122,111,110, 95, 98,114,105,103,104,116,110,101,115,115, 0,115,112,
+114,101, 97,100, 0,115,117,110, 95, 98,114,105,103,104,116,110,101,115,115, 0,115,117,110, 95,115,105,122,101, 0, 98, 97, 99,
+107,115, 99, 97,116,116,101,114,101,100, 95,108,105,103,104,116, 0,115,117,110, 95,105,110,116,101,110,115,105,116,121, 0, 97,
+116,109, 95,116,117,114, 98,105,100,105,116,121, 0, 97,116,109, 95,105,110,115, 99, 97,116,116,101,114,105,110,103, 95,102, 97,
+ 99,116,111,114, 0, 97,116,109, 95,101,120,116,105,110, 99,116,105,111,110, 95,102, 97, 99,116,111,114, 0, 97,116,109, 95,100,
+105,115,116, 97,110, 99,101, 95,102, 97, 99,116,111,114, 0,115,107,121, 98,108,101,110,100,102, 97, 99, 0, 89, 70, 95,110,117,
+109,112,104,111,116,111,110,115, 0, 89, 70, 95,110,117,109,115,101, 97,114, 99,104, 0, 89, 70, 95,112,104,100,101,112,116,104,
+ 0, 89, 70, 95,117,115,101,113,109, 99, 0, 89, 70, 95, 98,117,102,115,105,122,101, 0, 89, 70, 95,112, 97,100, 0, 89, 70, 95,
+ 99, 97,117,115,116,105, 99, 98,108,117,114, 0, 89, 70, 95,108,116,114, 97,100,105,117,115, 0, 89, 70, 95,103,108,111,119,105,
+110,116, 0, 89, 70, 95,103,108,111,119,111,102,115, 0, 89, 70, 95,103,108,111,119,116,121,112,101, 0, 89, 70, 95,112, 97,100,
+ 50, 0, 42,109,116,101,120, 91, 49, 56, 93, 0,115,112,101, 99,114, 0,115,112,101, 99,103, 0,115,112,101, 99, 98, 0,109,105,
+114,114, 0,109,105,114,103, 0,109,105,114, 98, 0, 97,109, 98,114, 0, 97,109, 98, 98, 0, 97,109, 98,103, 0, 97,109, 98, 0,
+101,109,105,116, 0, 97,110,103, 0,115,112,101, 99,116,114, 97, 0,114, 97,121, 95,109,105,114,114,111,114, 0, 97,108,112,104,
+ 97, 0,114,101,102, 0,115,112,101, 99, 0,122,111,102,102,115, 0, 97,100,100, 0,116,114, 97,110,115,108,117, 99,101,110, 99,
+121, 0,102,114,101,115,110,101,108, 95,109,105,114, 0,102,114,101,115,110,101,108, 95,109,105,114, 95,105, 0,102,114,101,115,
+110,101,108, 95,116,114, 97, 0,102,114,101,115,110,101,108, 95,116,114, 97, 95,105, 0,102,105,108,116,101,114, 0,116,120, 95,
+108,105,109,105,116, 0,116,120, 95,102, 97,108,108,111,102,102, 0,114, 97,121, 95,100,101,112,116,104, 0,114, 97,121, 95,100,
+101,112,116,104, 95,116,114, 97, 0,104, 97,114, 0,115,101,101,100, 49, 0,115,101,101,100, 50, 0,103,108,111,115,115, 95,109,
+105,114, 0,103,108,111,115,115, 95,116,114, 97, 0,115, 97,109,112, 95,103,108,111,115,115, 95,109,105,114, 0,115, 97,109,112,
+ 95,103,108,111,115,115, 95,116,114, 97, 0, 97,100, 97,112,116, 95,116,104,114,101,115,104, 95,109,105,114, 0, 97,100, 97,112,
+116, 95,116,104,114,101,115,104, 95,116,114, 97, 0, 97,110,105,115,111, 95,103,108,111,115,115, 95,109,105,114, 0,100,105,115,
+116, 95,109,105,114, 0,102, 97,100,101,116,111, 95,109,105,114, 0,115,104, 97,100,101, 95,102,108, 97,103, 0,109,111,100,101,
+ 95,108, 0,102,108, 97,114,101, 99, 0,115,116, 97,114, 99, 0,108,105,110,101, 99, 0,114,105,110,103, 99, 0,104, 97,115,105,
+122,101, 0,102,108, 97,114,101,115,105,122,101, 0,115,117, 98,115,105,122,101, 0,102,108, 97,114,101, 98,111,111,115,116, 0,
+115,116,114, 97,110,100, 95,115,116, 97, 0,115,116,114, 97,110,100, 95,101,110,100, 0,115,116,114, 97,110,100, 95,101, 97,115,
+101, 0,115,116,114, 97,110,100, 95,115,117,114,102,110,111,114, 0,115,116,114, 97,110,100, 95,109,105,110, 0,115,116,114, 97,
+110,100, 95,119,105,100,116,104,102, 97,100,101, 0,115,116,114, 97,110,100, 95,117,118,110, 97,109,101, 91, 51, 50, 93, 0,115,
+ 98,105, 97,115, 0,108, 98,105, 97,115, 0,115,104, 97,100, 95, 97,108,112,104, 97, 0,115,101,112,116,101,120, 0,114,103, 98,
+115,101,108, 0,112,114, 95,116,121,112,101, 0,117,115,101, 95,110,111,100,101,115, 0,112,114, 95, 98, 97, 99,107, 0,112,114,
+ 95,108, 97,109,112, 0,112, 97,100, 52, 0,109,108, 95,102,108, 97,103, 0,100,105,102,102, 95,115,104, 97,100,101,114, 0,115,
+112,101, 99, 95,115,104, 97,100,101,114, 0,114,111,117,103,104,110,101,115,115, 0,114,101,102,114, 97, 99, 0,112, 97,114, 97,
+109, 91, 52, 93, 0,114,109,115, 0,100, 97,114,107,110,101,115,115, 0, 42,114, 97,109,112, 95, 99,111,108, 0, 42,114, 97,109,
+112, 95,115,112,101, 99, 0,114, 97,109,112,105,110, 95, 99,111,108, 0,114, 97,109,112,105,110, 95,115,112,101, 99, 0,114, 97,
+109,112, 98,108,101,110,100, 95, 99,111,108, 0,114, 97,109,112, 98,108,101,110,100, 95,115,112,101, 99, 0,114, 97,109,112, 95,
+115,104,111,119, 0,114, 97,109,112,102, 97, 99, 95, 99,111,108, 0,114, 97,109,112,102, 97, 99, 95,115,112,101, 99, 0, 42,110,
+111,100,101,116,114,101,101, 0, 42,103,114,111,117,112, 0,102,114,105, 99,116,105,111,110, 0,102,104, 0,114,101,102,108,101,
+ 99,116, 0,102,104,100,105,115,116, 0,120,121,102,114,105, 99,116, 0,100,121,110, 97,109,111,100,101, 0,115,115,115, 95,114,
+ 97,100,105,117,115, 91, 51, 93, 0,115,115,115, 95, 99,111,108, 91, 51, 93, 0,115,115,115, 95,101,114,114,111,114, 0,115,115,
+115, 95,115, 99, 97,108,101, 0,115,115,115, 95,105,111,114, 0,115,115,115, 95, 99,111,108,102, 97, 99, 0,115,115,115, 95,116,
+101,120,102, 97, 99, 0,115,115,115, 95,102,114,111,110,116, 0,115,115,115, 95, 98, 97, 99,107, 0,115,115,115, 95,102,108, 97,
+103, 0,115,115,115, 95,112,114,101,115,101,116, 0, 89, 70, 95, 97,114, 0, 89, 70, 95, 97,103, 0, 89, 70, 95, 97, 98, 0, 89,
+ 70, 95,100,115, 99, 97,108,101, 0, 89, 70, 95,100,112,119,114, 0, 89, 70, 95,100,115,109,112, 0, 89, 70, 95,112,114,101,115,
+101,116, 0, 89, 70, 95,100,106,105,116, 0,103,112,117,109, 97,116,101,114,105, 97,108, 0,110, 97,109,101, 91, 50, 53, 54, 93,
+ 0,115, 99, 97,108,101, 0, 42, 98, 98, 0,105, 49, 0,106, 49, 0,107, 49, 0,105, 50, 0,106, 50, 0,107, 50, 0,115,101,108,
+ 99,111,108, 49, 0,115,101,108, 99,111,108, 50, 0,113,117, 97,116, 91, 52, 93, 0,101,120,112,120, 0,101,120,112,121, 0,101,
+120,112,122, 0,114, 97,100, 0,114, 97,100, 50, 0,115, 0, 42,109, 97,116, 0, 42,105,109, 97,116, 0,101,108,101,109,115, 0,
+100,105,115,112, 0, 42, 42,109, 97,116, 0,116,111,116, 99,111,108, 0,119,105,114,101,115,105,122,101, 0,114,101,110,100,101,
+114,115,105,122,101, 0,116,104,114,101,115,104, 0,118,101, 99, 91, 51, 93, 91, 51, 93, 0, 97,108,102, 97, 0,119,101,105,103,
+104,116, 0,114, 97,100,105,117,115, 0,104, 49, 0,104, 50, 0,102, 49, 0,102, 50, 0,102, 51, 0,104,105,100,101, 0,118,101,
+ 99, 91, 52, 93, 0,109, 97,116, 95,110,114, 0,112,110,116,115,117, 0,112,110,116,115,118, 0,114,101,115,111,108,117, 0,114,
+101,115,111,108,118, 0,111,114,100,101,114,117, 0,111,114,100,101,114,118, 0,102,108, 97,103,117, 0,102,108, 97,103,118, 0,
+ 42,107,110,111,116,115,117, 0, 42,107,110,111,116,115,118, 0,116,105,108,116, 95,105,110,116,101,114,112, 0, 99,104, 97,114,
+105,100,120, 0,107,101,114,110, 0,104, 0,110,117,114, 98, 0, 42, 98,101,118,111, 98,106, 0, 42,116, 97,112,101,114,111, 98,
+106, 0, 42,116,101,120,116,111,110, 99,117,114,118,101, 0, 42,112, 97,116,104, 0, 42,107,101,121, 0, 98,101,118, 0,112, 97,
+116,104,108,101,110, 0, 98,101,118,114,101,115,111,108, 0,119,105,100,116,104, 0,101,120,116, 49, 0,101,120,116, 50, 0,114,
+101,115,111,108,117, 95,114,101,110, 0,114,101,115,111,108,118, 95,114,101,110, 0,115,112, 97, 99,101,109,111,100,101, 0,115,
+112, 97, 99,105,110,103, 0,108,105,110,101,100,105,115,116, 0,115,104,101, 97,114, 0,102,115,105,122,101, 0,119,111,114,100,
+115,112, 97, 99,101, 0,117,108,112,111,115, 0,117,108,104,101,105,103,104,116, 0,120,111,102, 0,121,111,102, 0,108,105,110,
+101,119,105,100,116,104, 0, 42,115,116,114, 0,102, 97,109,105,108,121, 91, 50, 52, 93, 0, 42,118,102,111,110,116, 0, 42,118,
+102,111,110,116, 98, 0, 42,118,102,111,110,116,105, 0, 42,118,102,111,110,116, 98,105, 0,115,101,112, 99,104, 97,114, 0,116,
+111,116, 98,111,120, 0, 97, 99,116, 98,111,120, 0, 42,116, 98, 0,115,101,108,115,116, 97,114,116, 0,115,101,108,101,110,100,
+ 0, 42,115,116,114,105,110,102,111, 0, 99,117,114,105,110,102,111, 0,101,102,102,101, 99,116, 0, 42,109,102, 97, 99,101, 0,
+ 42,109,116,102, 97, 99,101, 0, 42,116,102, 97, 99,101, 0, 42,109,118,101,114,116, 0, 42,109,101,100,103,101, 0, 42,100,118,
+101,114,116, 0, 42,109, 99,111,108, 0, 42,109,115,116,105, 99,107,121, 0, 42,116,101,120, 99,111,109,101,115,104, 0, 42,109,
+115,101,108,101, 99,116, 0,118,100, 97,116, 97, 0,101,100, 97,116, 97, 0,102,100, 97,116, 97, 0,116,111,116,101,100,103,101,
+ 0,116,111,116,102, 97, 99,101, 0,116,111,116,115,101,108,101, 99,116, 0, 97, 99,116, 95,102, 97, 99,101, 0, 99,117, 98,101,
+109, 97,112,115,105,122,101, 0,115,109,111,111,116,104,114,101,115,104, 0,115,117, 98,100,105,118, 0,115,117, 98,100,105,118,
+114, 0,115,117, 98,115,117,114,102,116,121,112,101, 0, 42,109,114, 0, 42,112,118, 0, 42,116,112, 97,103,101, 0,117,118, 91,
+ 52, 93, 91, 50, 93, 0, 99,111,108, 91, 52, 93, 0,116,114, 97,110,115,112, 0,116,105,108,101, 0,117,110,119,114, 97,112, 0,
+118, 49, 0,118, 50, 0,118, 51, 0,118, 52, 0,101,100, 99,111,100,101, 0, 99,114,101, 97,115,101, 0, 98,119,101,105,103,104,
+116, 0,100,101,102, 95,110,114, 0, 42,100,119, 0,116,111,116,119,101,105,103,104,116, 0, 99,111, 91, 51, 93, 0,110,111, 91,
+ 51, 93, 0,117,118, 91, 50, 93, 0, 99,111, 91, 50, 93, 0,105,110,100,101,120, 0,102, 0,105, 0,115, 91, 50, 53, 54, 93, 0,
+118, 91, 52, 93, 0,109,105,100, 0,112, 97,100, 91, 50, 93, 0,118, 91, 50, 93, 0, 42,102, 97, 99,101,115, 0, 42, 99,111,108,
+102, 97, 99,101,115, 0, 42,101,100,103,101,115, 0, 42,101,100,103,101, 95, 98,111,117,110,100, 97,114,121, 95,115,116, 97,116,
+101,115, 0, 42,118,101,114,116, 95,101,100,103,101, 95,109, 97,112, 0, 42,118,101,114,116, 95,102, 97, 99,101, 95,109, 97,112,
+ 0, 42,109, 97,112, 95,109,101,109, 0, 42,118,101,114,116,115, 0,108,101,118,101,108,115, 0,108,101,118,101,108, 95, 99,111,
+117,110,116, 0, 99,117,114,114,101,110,116, 0,110,101,119,108,118,108, 0,101,100,103,101,108,118,108, 0,112,105,110,108,118,
+108, 0,114,101,110,100,101,114,108,118,108, 0,117,115,101, 95, 99,111,108, 0, 42,101,100,103,101, 95,102,108, 97,103,115, 0,
+ 42,101,100,103,101, 95, 99,114,101, 97,115,101,115, 0, 42,118,101,114,116, 95,109, 97,112, 0, 42,101,100,103,101, 95,109, 97,
+112, 0, 42,111,108,100, 95,102, 97, 99,101,115, 0, 42,111,108,100, 95,101,100,103,101,115, 0, 42,101,114,114,111,114, 0,109,
+111,100,105,102,105,101,114, 0,115,117, 98,100,105,118, 84,121,112,101, 0,114,101,110,100,101,114, 76,101,118,101,108,115, 0,
+ 42,101,109, 67, 97, 99,104,101, 0, 42,109, 67, 97, 99,104,101, 0,100,101,102, 97,120,105,115, 0,112, 97,100, 91, 54, 93, 0,
+108,101,110,103,116,104, 0,114, 97,110,100,111,109,105,122,101, 0,115,101,101,100, 0, 42,115,116, 97,114,116, 95, 99, 97,112,
+ 0, 42,101,110,100, 95, 99, 97,112, 0, 42, 99,117,114,118,101, 95,111, 98, 0, 42,111,102,102,115,101,116, 95,111, 98, 0,111,
+102,102,115,101,116, 91, 51, 93, 0,115, 99, 97,108,101, 91, 51, 93, 0,109,101,114,103,101, 95,100,105,115,116, 0,102,105,116,
+ 95,116,121,112,101, 0,111,102,102,115,101,116, 95,116,121,112,101, 0, 99,111,117,110,116, 0, 97,120,105,115, 0,116,111,108,
+101,114, 97,110, 99,101, 0, 42,109,105,114,114,111,114, 95,111, 98, 0,115,112,108,105,116, 95, 97,110,103,108,101, 0,118, 97,
+108,117,101, 0,114,101,115, 0,118, 97,108, 95,102,108, 97,103,115, 0,108,105,109, 95,102,108, 97,103,115, 0,101, 95,102,108,
+ 97,103,115, 0, 98,101,118,101,108, 95, 97,110,103,108,101, 0,100,101,102,103,114,112, 95,110, 97,109,101, 91, 51, 50, 93, 0,
+ 42,116,101,120,116,117,114,101, 0,115,116,114,101,110,103,116,104, 0,100,105,114,101, 99,116,105,111,110, 0,109,105,100,108,
+101,118,101,108, 0,116,101,120,109, 97,112,112,105,110,103, 0, 42,109, 97,112, 95,111, 98,106,101, 99,116, 0,117,118,108, 97,
+121,101,114, 95,110, 97,109,101, 91, 51, 50, 93, 0,117,118,108, 97,121,101,114, 95,116,109,112, 0, 42,112,114,111,106,101, 99,
+116,111,114,115, 91, 49, 48, 93, 0, 42,105,109, 97,103,101, 0,110,117,109, 95,112,114,111,106,101, 99,116,111,114,115, 0, 97,
+115,112,101, 99,116,120, 0, 97,115,112,101, 99,116,121, 0,112,101,114, 99,101,110,116, 0,102, 97, 99,101, 67,111,117,110,116,
+ 0,102, 97, 99, 0,114,101,112,101, 97,116, 0, 42,111, 98,106,101, 99,116, 99,101,110,116,101,114, 0,115,116, 97,114,116,120,
+ 0,115,116, 97,114,116,121, 0,104,101,105,103,104,116, 0,110, 97,114,114,111,119, 0,115,112,101,101,100, 0,100, 97,109,112,
+ 0,102, 97,108,108,111,102,102, 0,116,105,109,101,111,102,102,115, 0,108,105,102,101,116,105,109,101, 0,100,101,102,111,114,
+109,102,108, 97,103, 0,109,117,108,116,105, 0, 42,112,114,101,118, 67,111,115, 0,112, 97,114,101,110,116,105,110,118, 91, 52,
+ 93, 91, 52, 93, 0, 99,101,110,116, 91, 51, 93, 0, 42,105,110,100,101,120, 97,114, 0,116,111,116,105,110,100,101,120, 0,102,
+111,114, 99,101, 0, 42, 99,108,111,116,104, 79, 98,106,101, 99,116, 0, 42,115,105,109, 95,112, 97,114,109,115, 0, 42, 99,111,
+108,108, 95,112, 97,114,109,115, 0, 42,112,111,105,110,116, 95, 99, 97, 99,104,101, 0, 42,120, 0, 42,120,110,101,119, 0, 42,
+120,111,108,100, 0, 42, 99,117,114,114,101,110,116, 95,120,110,101,119, 0, 42, 99,117,114,114,101,110,116, 95,120, 0, 42, 99,
+117,114,114,101,110,116, 95,118, 0, 42,109,102, 97, 99,101,115, 0,110,117,109,118,101,114,116,115, 0,110,117,109,102, 97, 99,
+101,115, 0, 97, 98,115,111,114,112,116,105,111,110, 0,116,105,109,101, 0, 42, 98,118,104,116,114,101,101, 0,111,112,101,114,
+ 97,116,105,111,110, 0,118,101,114,116,101,120, 0,116,111,116,105,110,102,108,117,101,110, 99,101, 0,103,114,105,100,115,105,
+122,101, 0,110,101,101,100, 98,105,110,100, 0, 42, 98,105,110,100,119,101,105,103,104,116,115, 0, 42, 98,105,110,100, 99,111,
+115, 0,116,111,116, 99, 97,103,101,118,101,114,116, 0, 42,100,121,110,103,114,105,100, 0, 42,100,121,110,105,110,102,108,117,
+101,110, 99,101,115, 0, 42,100,121,110,118,101,114,116,115, 0, 42,112, 97,100, 50, 0,100,121,110,103,114,105,100,115,105,122,
+101, 0,100,121,110, 99,101,108,108,109,105,110, 91, 51, 93, 0,100,121,110, 99,101,108,108,119,105,100,116,104, 0, 98,105,110,
+100,109, 97,116, 91, 52, 93, 91, 52, 93, 0, 42,112,115,121,115, 0, 42,100,109, 0,116,111,116,100,109,118,101,114,116, 0,116,
+111,116,100,109,101,100,103,101, 0,116,111,116,100,109,102, 97, 99,101, 0,112,115,121,115, 0,114,116, 91, 50, 93, 0, 42,102,
+ 97, 99,101,112, 97, 0,118,103,114,111,117,112, 0,112,114,111,116,101, 99,116, 0, 42,116, 97,114,103,101,116, 0, 42, 97,117,
+120, 84, 97,114,103,101,116, 0,118,103,114,111,117,112, 95,110, 97,109,101, 91, 51, 50, 93, 0,107,101,101,112, 68,105,115,116,
+ 0,115,104,114,105,110,107, 84,121,112,101, 0,115,104,114,105,110,107, 79,112,116,115, 0,112,114,111,106, 65,120,105,115, 0,
+115,117, 98,115,117,114,102, 76,101,118,101,108,115, 0,112,110,116,115,119, 0,111,112,110,116,115,117, 0,111,112,110,116,115,
+118, 0,111,112,110,116,115,119, 0,116,121,112,101,117, 0,116,121,112,101,118, 0,116,121,112,101,119, 0,102,117, 0,102,118,
+ 0,102,119, 0,100,117, 0,100,118, 0,100,119, 0, 42,100,101,102, 0,118,101, 99, 91, 56, 93, 91, 51, 93, 0,112, 97,114,116,
+121,112,101, 0,112, 97,114, 49, 0,112, 97,114, 50, 0,112, 97,114, 51, 0,112, 97,114,115,117, 98,115,116,114, 91, 51, 50, 93,
+ 0, 42,116,114, 97, 99,107, 0, 42,112,114,111,120,121, 0, 42,112,114,111,120,121, 95,103,114,111,117,112, 0, 42,112,114,111,
+120,121, 95,102,114,111,109, 0, 42, 97, 99,116,105,111,110, 0, 42,112,111,115,101,108,105, 98, 0, 42,112,111,115,101, 0, 99,
+111,110,115,116,114, 97,105,110,116, 67,104, 97,110,110,101,108,115, 0,100,101,102, 98, 97,115,101, 0,109,111,100,105,102,105,
+101,114,115, 0,100,108,111, 99, 91, 51, 93, 0,111,114,105,103, 91, 51, 93, 0,100,115,105,122,101, 91, 51, 93, 0,100,114,111,
+116, 91, 51, 93, 0,111, 98,109, 97,116, 91, 52, 93, 91, 52, 93, 0, 99,111,110,115,116,105,110,118, 91, 52, 93, 91, 52, 93, 0,
+108, 97,121, 0, 99,111,108, 98,105,116,115, 0,116,114, 97,110,115,102,108, 97,103, 0,105,112,111,102,108, 97,103, 0,116,114,
+ 97, 99,107,102,108, 97,103, 0,117,112,102,108, 97,103, 0,110,108, 97,102,108, 97,103, 0,112,114,111,116,101, 99,116,102,108,
+ 97,103, 0,105,112,111,119,105,110, 0,115, 99, 97,102,108, 97,103, 0,115, 99, 97,118,105,115,102,108, 97,103, 0, 98,111,117,
+110,100,116,121,112,101, 0,100,117,112,111,110, 0,100,117,112,111,102,102, 0,100,117,112,115,116, 97, 0,100,117,112,101,110,
+100, 0,115,102, 0, 99,116,105,109,101, 0,109, 97,115,115, 0,100, 97,109,112,105,110,103, 0,105,110,101,114,116,105, 97, 0,
+102,111,114,109,102, 97, 99,116,111,114, 0,114,100, 97,109,112,105,110,103, 0,115,105,122,101,102, 97, 99, 0,109, 97,114,103,
+105,110, 0,100,116, 0,100,116,120, 0, 97, 99,116, 99,111,108, 0,101,109,112,116,121, 95,100,114, 97,119,116,121,112,101, 0,
+112, 97,100, 49, 91, 51, 93, 0,101,109,112,116,121, 95,100,114, 97,119,115,105,122,101, 0,100,117,112,102, 97, 99,101,115, 99,
+ 97, 0,112,114,111,112, 0,115,101,110,115,111,114,115, 0, 99,111,110,116,114,111,108,108,101,114,115, 0, 97, 99,116,117, 97,
+116,111,114,115, 0, 98, 98,115,105,122,101, 91, 51, 93, 0, 97, 99,116,100,101,102, 0,103, 97,109,101,102,108, 97,103, 0,103,
+ 97,109,101,102,108, 97,103, 50, 0,115,111,102,116,102,108, 97,103, 0, 97,110,105,115,111,116,114,111,112,105, 99, 70,114,105,
+ 99,116,105,111,110, 91, 51, 93, 0, 99,111,110,115,116,114, 97,105,110,116,115, 0,110,108, 97,115,116,114,105,112,115, 0,104,
+111,111,107,115, 0,112, 97,114,116,105, 99,108,101,115,121,115,116,101,109, 0, 42,112,100, 0, 42,115,111,102,116, 0, 42,100,
+117,112, 95,103,114,111,117,112, 0,102,108,117,105,100,115,105,109, 70,108, 97,103, 0,114,101,115,116,114,105, 99,116,102,108,
+ 97,103, 0,115,104, 97,112,101,110,114, 0,115,104, 97,112,101,102,108, 97,103, 0,114,101, 99, 97,108, 99,111, 0, 98,111,100,
+121, 95,116,121,112,101, 0, 42,102,108,117,105,100,115,105,109, 83,101,116,116,105,110,103,115, 0, 42,100,101,114,105,118,101,
+100, 68,101,102,111,114,109, 0, 42,100,101,114,105,118,101,100, 70,105,110, 97,108, 0,108, 97,115,116, 68, 97,116, 97, 77, 97,
+115,107, 0,115,116, 97,116,101, 0,105,110,105,116, 95,115,116, 97,116,101, 0,103,112,117,108, 97,109,112, 0, 99,117,114,105,
+110,100,101,120, 0, 97, 99,116,105,118,101, 0,100,101,102,108,101, 99,116, 0,102,111,114, 99,101,102,105,101,108,100, 0,112,
+100,101,102, 95,100, 97,109,112, 0,112,100,101,102, 95,114,100, 97,109,112, 0,112,100,101,102, 95,112,101,114,109, 0,112,100,
+101,102, 95,102,114,105, 99,116, 0,112,100,101,102, 95,114,102,114,105, 99,116, 0,102, 95,115,116,114,101,110,103,116,104, 0,
+102, 95,112,111,119,101,114, 0,102, 95,100,105,115,116, 0,102, 95,100, 97,109,112, 0,109, 97,120,100,105,115,116, 0,109,105,
+110,100,105,115,116, 0,109, 97,120,114, 97,100, 0,109,105,110,114, 97,100, 0,102, 95,112,111,119,101,114, 95,114, 0,112,100,
+101,102, 95,115, 98,100, 97,109,112, 0,112,100,101,102, 95,115, 98,105,102,116, 0,112,100,101,102, 95,115, 98,111,102,116, 0,
+ 99,108,117,109,112, 95,102, 97, 99, 0, 99,108,117,109,112, 95,112,111,119, 0,107,105,110,107, 95,102,114,101,113, 0,107,105,
+110,107, 95,115,104, 97,112,101, 0,107,105,110,107, 95, 97,109,112, 0,102,114,101,101, 95,101,110,100, 0,116,101,120, 95,110,
+ 97, 98,108, 97, 0,116,101,120, 95,109,111,100,101, 0,107,105,110,107, 0,107,105,110,107, 95, 97,120,105,115, 0,114,116, 50,
+ 0, 42,114,110,103, 0,102, 95,110,111,105,115,101, 0,115,105,109,102,114, 97,109,101, 0,115,116, 97,114,116,102,114, 97,109,
+101, 0,101,110,100,102,114, 97,109,101, 0,101,100,105,116,102,114, 97,109,101, 0, 42,112, 97,114,116,105, 99,108,101,115, 0,
+116,111,116,112,111,105,110,116, 0,116,111,116,115,112,114,105,110,103, 0, 42, 98,112,111,105,110,116, 0, 42, 98,115,112,114,
+105,110,103, 0,110,111,100,101,109, 97,115,115, 0,103,114, 97,118, 0,109,101,100,105, 97,102,114,105, 99,116, 0,114,107,108,
+105,109,105,116, 0,112,104,121,115,105, 99,115, 95,115,112,101,101,100, 0,103,111, 97,108,115,112,114,105,110,103, 0,103,111,
+ 97,108,102,114,105, 99,116, 0,109,105,110,103,111, 97,108, 0,109, 97,120,103,111, 97,108, 0,100,101,102,103,111, 97,108, 0,
+118,101,114,116,103,114,111,117,112, 0,102,117,122,122,121,110,101,115,115, 0,105,110,115,112,114,105,110,103, 0,105,110,102,
+114,105, 99,116, 0,101,102,114, 97, 0,105,110,116,101,114,118, 97,108, 0,108,111, 99, 97,108, 0,115,111,108,118,101,114,102,
+108, 97,103,115, 0, 42, 42,107,101,121,115, 0,116,111,116,112,111,105,110,116,107,101,121, 0,115,101, 99,111,110,100,115,112,
+114,105,110,103, 0, 99,111,108, 98, 97,108,108, 0, 98, 97,108,108,100, 97,109,112, 0, 98, 97,108,108,115,116,105,102,102, 0,
+115, 98, 99, 95,109,111,100,101, 0, 97,101,114,111,101,100,103,101, 0,109,105,110,108,111,111,112,115, 0,109, 97,120,108,111,
+111,112,115, 0, 99,104,111,107,101, 0,115,111,108,118,101,114, 95, 73, 68, 0,112,108, 97,115,116,105, 99, 0,115,112,114,105,
+110,103,112,114,101,108,111, 97,100, 0, 42,115, 99,114, 97,116, 99,104, 0,115,104,101, 97,114,115,116,105,102,102, 0,105,110,
+112,117,115,104, 0, 42,112,111,105,110,116, 99, 97, 99,104,101, 0,115,104,111,119, 95, 97,100,118, 97,110, 99,101,100,111,112,
+116,105,111,110,115, 0,114,101,115,111,108,117,116,105,111,110,120,121,122, 0,112,114,101,118,105,101,119,114,101,115,120,121,
+122, 0,114,101, 97,108,115,105,122,101, 0,103,117,105, 68,105,115,112,108, 97,121, 77,111,100,101, 0,114,101,110,100,101,114,
+ 68,105,115,112,108, 97,121, 77,111,100,101, 0,118,105,115, 99,111,115,105,116,121, 86, 97,108,117,101, 0,118,105,115, 99,111,
+115,105,116,121, 77,111,100,101, 0,118,105,115, 99,111,115,105,116,121, 69,120,112,111,110,101,110,116, 0,103,114, 97,118,120,
+ 0,103,114, 97,118,121, 0,103,114, 97,118,122, 0, 97,110,105,109, 83,116, 97,114,116, 0, 97,110,105,109, 69,110,100, 0,103,
+115,116, 97,114, 0,109, 97,120, 82,101,102,105,110,101, 0,105,110,105, 86,101,108,120, 0,105,110,105, 86,101,108,121, 0,105,
+110,105, 86,101,108,122, 0, 42,111,114,103, 77,101,115,104, 0, 42,109,101,115,104, 83,117,114,102, 97, 99,101, 0, 42,109,101,
+115,104, 66, 66, 0,115,117,114,102,100, 97,116, 97, 80, 97,116,104, 91, 50, 52, 48, 93, 0, 98, 98, 83,116, 97,114,116, 91, 51,
+ 93, 0, 98, 98, 83,105,122,101, 91, 51, 93, 0,116,121,112,101, 70,108, 97,103,115, 0,100,111,109, 97,105,110, 78,111,118,101,
+ 99,103,101,110, 0,118,111,108,117,109,101, 73,110,105,116, 84,121,112,101, 0,112, 97,114,116, 83,108,105,112, 86, 97,108,117,
+101, 0,103,101,110,101,114, 97,116,101, 84,114, 97, 99,101,114,115, 0,103,101,110,101,114, 97,116,101, 80, 97,114,116,105, 99,
+108,101,115, 0,115,117,114,102, 97, 99,101, 83,109,111,111,116,104,105,110,103, 0,115,117,114,102, 97, 99,101, 83,117, 98,100,
+105,118,115, 0,117,110,117,115,101,100, 68, 78, 65, 68,117,109,109,121, 0,112, 97,114,116,105, 99,108,101, 73,110,102, 83,105,
+122,101, 0,112, 97,114,116,105, 99,108,101, 73,110,102, 65,108,112,104, 97, 0,102, 97,114, 70,105,101,108,100, 83,105,122,101,
+ 0, 42,109,101,115,104, 83,117,114,102, 78,111,114,109, 97,108,115, 0,109,105,115,116,121,112,101, 0,104,111,114,114, 0,104,
+111,114,103, 0,104,111,114, 98, 0,104,111,114,107, 0,122,101,110,114, 0,122,101,110,103, 0,122,101,110, 98, 0,122,101,110,
+107, 0, 97,109, 98,107, 0,102, 97,115,116, 99,111,108, 0,101,120,112,111,115,117,114,101, 0,101,120,112, 0,114, 97,110,103,
+101, 0,108,105,110,102, 97, 99, 0,108,111,103,102, 97, 99, 0,103,114, 97,118,105,116,121, 0, 97, 99,116,105,118,105,116,121,
+ 66,111,120, 82, 97,100,105,117,115, 0,115,107,121,116,121,112,101, 0,112,104,121,115,105, 99,115, 69,110,103,105,110,101, 0,
+109,105,115,105, 0,109,105,115,116,115,116, 97, 0,109,105,115,116,100,105,115,116, 0,109,105,115,116,104,105, 0,115,116, 97,
+114,114, 0,115,116, 97,114,103, 0,115,116, 97,114, 98, 0,115,116, 97,114,107, 0,115,116, 97,114,115,105,122,101, 0,115,116,
+ 97,114,109,105,110,100,105,115,116, 0,115,116, 97,114,100,105,115,116, 0,115,116, 97,114, 99,111,108,110,111,105,115,101, 0,
+100,111,102,115,116, 97, 0,100,111,102,101,110,100, 0,100,111,102,109,105,110, 0,100,111,102,109, 97,120, 0, 97,111,100,105,
+115,116, 0, 97,111,100,105,115,116,102, 97, 99, 0, 97,111,101,110,101,114,103,121, 0, 97,111, 98,105, 97,115, 0, 97,111,109,
+111,100,101, 0, 97,111,115, 97,109,112, 0, 97,111,109,105,120, 0, 97,111, 99,111,108,111,114, 0, 97,111, 95, 97,100, 97,112,
+116, 95,116,104,114,101,115,104, 0, 97,111, 95, 97,100, 97,112,116, 95,115,112,101,101,100, 95,102, 97, 99, 0, 97,111, 95, 97,
+112,112,114,111,120, 95,101,114,114,111,114, 0, 97,111, 95, 97,112,112,114,111,120, 95, 99,111,114,114,101, 99,116,105,111,110,
+ 0, 97,111, 95,115, 97,109,112, 95,109,101,116,104,111,100, 0, 97,111, 95,103, 97,116,104,101,114, 95,109,101,116,104,111,100,
+ 0, 97,111, 95, 97,112,112,114,111,120, 95,112, 97,115,115,101,115, 0, 42, 97,111,115,112,104,101,114,101, 0, 42, 97,111,116,
+ 97, 98,108,101,115, 0,104,101,109,105,114,101,115, 0,109, 97,120,105,116,101,114, 0,100,114, 97,119,116,121,112,101, 0,115,
+117, 98,115,104,111,111,116,112, 0,115,117, 98,115,104,111,111,116,101, 0,110,111,100,101,108,105,109, 0,109, 97,120,115,117,
+ 98,108, 97,109,112, 0,112, 97,109, 97, 0,112, 97,109,105, 0,101,108,109, 97, 0,101,108,109,105, 0,109, 97,120,110,111,100,
+101, 0, 99,111,110,118,101,114,103,101,110, 99,101, 0,114, 97,100,102, 97, 99, 0,103, 97,109,109, 97, 0,115,101,108, 99,111,
+108, 0,115,120, 0,115,121, 0, 42,108,112, 70,111,114,109, 97,116, 0, 42,108,112, 80, 97,114,109,115, 0, 99, 98, 70,111,114,
+109, 97,116, 0, 99, 98, 80, 97,114,109,115, 0,102, 99, 99, 84,121,112,101, 0,102, 99, 99, 72, 97,110,100,108,101,114, 0,100,
+119, 75,101,121, 70,114, 97,109,101, 69,118,101,114,121, 0,100,119, 81,117, 97,108,105,116,121, 0,100,119, 66,121,116,101,115,
+ 80,101,114, 83,101, 99,111,110,100, 0,100,119, 70,108, 97,103,115, 0,100,119, 73,110,116,101,114,108,101, 97,118,101, 69,118,
+101,114,121, 0, 97,118,105, 99,111,100,101, 99,110, 97,109,101, 91, 49, 50, 56, 93, 0, 42, 99,100, 80, 97,114,109,115, 0, 42,
+112, 97,100, 0, 99,100, 83,105,122,101, 0,113,116, 99,111,100,101, 99,110, 97,109,101, 91, 49, 50, 56, 93, 0, 99,111,100,101,
+ 99, 0, 97,117,100,105,111, 95, 99,111,100,101, 99, 0,118,105,100,101,111, 95, 98,105,116,114, 97,116,101, 0, 97,117,100,105,
+111, 95, 98,105,116,114, 97,116,101, 0,103,111,112, 95,115,105,122,101, 0,114, 99, 95,109,105,110, 95,114, 97,116,101, 0,114,
+ 99, 95,109, 97,120, 95,114, 97,116,101, 0,114, 99, 95, 98,117,102,102,101,114, 95,115,105,122,101, 0,109,117,120, 95,112, 97,
+ 99,107,101,116, 95,115,105,122,101, 0,109,117,120, 95,114, 97,116,101, 0,109,105,120,114, 97,116,101, 0,109, 97,105,110, 0,
+ 42,109, 97,116, 95,111,118,101,114,114,105,100,101, 0, 42,108,105,103,104,116, 95,111,118,101,114,114,105,100,101, 0,108, 97,
+121, 95,122,109, 97,115,107, 0,108, 97,121,102,108, 97,103, 0,112, 97,115,115,102,108, 97,103, 0,112, 97,115,115, 95,120,111,
+114, 0, 42, 97,118,105, 99,111,100,101, 99,100, 97,116, 97, 0, 42,113,116, 99,111,100,101, 99,100, 97,116, 97, 0,102,102, 99,
+111,100,101, 99,100, 97,116, 97, 0, 99,102,114, 97, 0,112,115,102,114, 97, 0,112,101,102,114, 97, 0,105,109, 97,103,101,115,
+ 0,102,114, 97,109, 97,112,116,111, 0,116,104,114,101, 97,100,115, 0,102,114, 97,109,101,108,101,110, 0, 98,108,117,114,102,
+ 97, 99, 0,101,100,103,101, 82, 0,101,100,103,101, 71, 0,101,100,103,101, 66, 0,102,117,108,108,115, 99,114,101,101,110, 0,
+120,112,108, 97,121, 0,121,112,108, 97,121, 0,102,114,101,113,112,108, 97,121, 0, 97,116,116,114,105, 98, 0,114,116, 49, 0,
+115,116,101,114,101,111,109,111,100,101, 0,100,105,109,101,110,115,105,111,110,115,112,114,101,115,101,116, 0,109, 97,120,105,
+109,115,105,122,101, 0,120,115, 99,104, 0,121,115, 99,104, 0,120,112, 97,114,116,115, 0,121,112, 97,114,116,115, 0,119,105,
+110,112,111,115, 0,112,108, 97,110,101,115, 0,105,109,116,121,112,101, 0,115,117, 98,105,109,116,121,112,101, 0,113,117, 97,
+108,105,116,121, 0,114,112, 97,100, 0,114,112, 97,100, 49, 0,114,112, 97,100, 50, 0,115, 99,101,109,111,100,101, 0,114,101,
+110,100,101,114,101,114, 0,111, 99,114,101,115, 0, 97,108,112,104, 97,109,111,100,101, 0,111,115, 97, 0,102,114,115, 95,115,
+101, 99, 0,101,100,103,101,105,110,116, 0,115, 97,102,101,116,121, 0, 98,111,114,100,101,114, 0,100,105,115,112,114,101, 99,
+116, 0,108, 97,121,101,114,115, 0, 97, 99,116,108, 97,121, 0,120, 97,115,112, 0,121, 97,115,112, 0,102,114,115, 95,115,101,
+ 99, 95, 98, 97,115,101, 0,103, 97,117,115,115, 0,112,111,115,116,109,117,108, 0,112,111,115,116,103, 97,109,109, 97, 0,112,
+111,115,116,104,117,101, 0,112,111,115,116,115, 97,116, 0,100,105,116,104,101,114, 95,105,110,116,101,110,115,105,116,121, 0,
+ 98, 97,107,101, 95,111,115, 97, 0, 98, 97,107,101, 95,102,105,108,116,101,114, 0, 98, 97,107,101, 95,109,111,100,101, 0, 98,
+ 97,107,101, 95,102,108, 97,103, 0, 98, 97,107,101, 95,110,111,114,109, 97,108, 95,115,112, 97, 99,101, 0, 98, 97,107,101, 95,
+113,117, 97,100, 95,115,112,108,105,116, 0, 98, 97,107,101, 95,109, 97,120,100,105,115,116, 0, 98, 97,107,101, 95, 98,105, 97,
+115,100,105,115,116, 0, 98, 97,107,101, 95,112, 97,100, 0, 71, 73,113,117, 97,108,105,116,121, 0, 71, 73, 99, 97, 99,104,101,
+ 0, 71, 73,109,101,116,104,111,100, 0, 71, 73,112,104,111,116,111,110,115, 0, 71, 73,100,105,114,101, 99,116, 0, 89, 70, 95,
+ 65, 65, 0, 89, 70,101,120,112,111,114,116,120,109,108, 0, 89, 70, 95,110,111, 98,117,109,112, 0, 89, 70, 95, 99,108, 97,109,
+112,114,103, 98, 0,121,102,112, 97,100, 49, 0, 71, 73,100,101,112,116,104, 0, 71, 73, 99, 97,117,115,100,101,112,116,104, 0,
+ 71, 73,112,105,120,101,108,115,112,101,114,115, 97,109,112,108,101, 0, 71, 73,112,104,111,116,111,110, 99,111,117,110,116, 0,
+ 71, 73,109,105,120,112,104,111,116,111,110,115, 0, 71, 73,112,104,111,116,111,110,114, 97,100,105,117,115, 0, 89, 70, 95,114,
+ 97,121,100,101,112,116,104, 0, 89, 70, 95, 65, 65,112, 97,115,115,101,115, 0, 89, 70, 95, 65, 65,115, 97,109,112,108,101,115,
+ 0,121,102,112, 97,100, 50, 0, 71, 73,115,104, 97,100,111,119,113,117, 97,108,105,116,121, 0, 71, 73,114,101,102,105,110,101,
+109,101,110,116, 0, 71, 73,112,111,119,101,114, 0, 71, 73,105,110,100,105,114,112,111,119,101,114, 0, 89, 70, 95,103, 97,109,
+109, 97, 0, 89, 70, 95,101,120,112,111,115,117,114,101, 0, 89, 70, 95,114, 97,121, 98,105, 97,115, 0, 89, 70, 95, 65, 65,112,
+105,120,101,108,115,105,122,101, 0, 89, 70, 95, 65, 65,116,104,114,101,115,104,111,108,100, 0, 98, 97, 99,107, 98,117,102, 91,
+ 49, 54, 48, 93, 0,112,105, 99, 91, 49, 54, 48, 93, 0,115,116, 97,109,112, 0,115,116, 97,109,112, 95,102,111,110,116, 95,105,
+100, 0,115,116, 97,109,112, 95,117,100, 97,116, 97, 91, 49, 54, 48, 93, 0,102,103, 95,115,116, 97,109,112, 91, 52, 93, 0, 98,
+103, 95,115,116, 97,109,112, 91, 52, 93, 0,115,105,109,112,108,105,102,121, 95,115,117, 98,115,117,114,102, 0,115,105,109,112,
+108,105,102,121, 95,115,104, 97,100,111,119,115, 97,109,112,108,101,115, 0,115,105,109,112,108,105,102,121, 95,112, 97,114,116,
+105, 99,108,101,115, 0,115,105,109,112,108,105,102,121, 95, 97,111,115,115,115, 0, 99,105,110,101,111,110,119,104,105,116,101,
+ 0, 99,105,110,101,111,110, 98,108, 97, 99,107, 0, 99,105,110,101,111,110,103, 97,109,109, 97, 0,112, 97,114,116,105, 99,108,
+101, 95,112,101,114, 99, 0,115,117, 98,115,117,114,102, 95,109, 97,120, 0,115,104, 97,100, 98,117,102,115, 97,109,112,108,101,
+ 95,109, 97,120, 0, 97,111, 95,101,114,114,111,114, 0, 99,111,108, 91, 51, 93, 0,102,114, 97,109,101, 0,110, 97,109,101, 91,
+ 54, 52, 93, 0, 42, 98,114,117,115,104, 0,116,111,111,108, 0,115,116,101,112, 0,105,110,118,101,114,116, 0,116,111,116,114,
+101,107,101,121, 0,116,111,116, 97,100,100,107,101,121, 0, 98,114,117,115,104,116,121,112,101, 0, 98,114,117,115,104, 91, 55,
+ 93, 0,101,109,105,116,116,101,114,100,105,115,116, 0,100,114, 97,119, 95,116,105,109,101,100, 0,110, 97,109,101, 91, 51, 54,
+ 93, 0,109, 97,116, 91, 51, 93, 91, 51, 93, 0, 99,111,114,110,101,114,116,121,112,101, 0,101,100,105,116, 98,117,116,102,108,
+ 97,103, 0,106,111,105,110,116,114,105,108,105,109,105,116, 0,100,101,103,114, 0,116,117,114,110, 0,101,120,116,114, 95,111,
+102,102,115, 0,100,111,117, 98,108,105,109,105,116, 0,115,101,103,109,101,110,116,115, 0,114,105,110,103,115, 0,118,101,114,
+116,105, 99,101,115, 0,117,110,119,114, 97,112,112,101,114, 0,117,118, 99, 97,108, 99, 95,114, 97,100,105,117,115, 0,117,118,
+ 99, 97,108, 99, 95, 99,117, 98,101,115,105,122,101, 0,117,118, 99, 97,108, 99, 95,109, 97,112,100,105,114, 0,117,118, 99, 97,
+108, 99, 95,109, 97,112, 97,108,105,103,110, 0,117,118, 99, 97,108, 99, 95,102,108, 97,103, 0, 97,117,116,111,105,107, 95, 99,
+104, 97,105,110,108,101,110, 0,105,109, 97,112, 97,105,110,116, 0,112, 97,114,116,105, 99,108,101, 0,115,101,108,101, 99,116,
+ 95,116,104,114,101,115,104, 0, 99,108,101, 97,110, 95,116,104,114,101,115,104, 0,114,101,116,111,112,111, 95,109,111,100,101,
+ 0,114,101,116,111,112,111, 95,112, 97,105,110,116, 95,116,111,111,108, 0,108,105,110,101, 95,100,105,118, 0,101,108,108,105,
+112,115,101, 95,100,105,118, 0,114,101,116,111,112,111, 95,104,111,116,115,112,111,116, 0,109,117,108,116,105,114,101,115, 95,
+115,117, 98,100,105,118, 95,116,121,112,101, 0,115,107,103,101,110, 95,114,101,115,111,108,117,116,105,111,110, 0,115,107,103,
+101,110, 95,116,104,114,101,115,104,111,108,100, 95,105,110,116,101,114,110, 97,108, 0,115,107,103,101,110, 95,116,104,114,101,
+115,104,111,108,100, 95,101,120,116,101,114,110, 97,108, 0,115,107,103,101,110, 95,108,101,110,103,116,104, 95,114, 97,116,105,
+111, 0,115,107,103,101,110, 95,108,101,110,103,116,104, 95,108,105,109,105,116, 0,115,107,103,101,110, 95, 97,110,103,108,101,
+ 95,108,105,109,105,116, 0,115,107,103,101,110, 95, 99,111,114,114,101,108, 97,116,105,111,110, 95,108,105,109,105,116, 0,115,
+107,103,101,110, 95,115,121,109,109,101,116,114,121, 95,108,105,109,105,116, 0,115,107,103,101,110, 95,111,112,116,105,111,110,
+115, 0,115,107,103,101,110, 95,112,111,115,116,112,114,111, 0,115,107,103,101,110, 95,112,111,115,116,112,114,111, 95,112, 97,
+115,115,101,115, 0,115,107,103,101,110, 95,115,117, 98,100,105,118,105,115,105,111,110,115, 91, 51, 93, 0,101,100,103,101, 95,
+109,111,100,101, 0,112, 97,100, 51, 91, 52, 93, 0,100,105,114, 0,118,105,101,119, 0, 42,115,101,115,115,105,111,110, 0, 42,
+ 99,117,109, 97,112, 0,100,114, 97,119, 98,114,117,115,104, 0,115,109,111,111,116,104, 98,114,117,115,104, 0,112,105,110, 99,
+104, 98,114,117,115,104, 0,105,110,102,108, 97,116,101, 98,114,117,115,104, 0,103,114, 97, 98, 98,114,117,115,104, 0,108, 97,
+121,101,114, 98,114,117,115,104, 0,102,108, 97,116,116,101,110, 98,114,117,115,104, 0,112,105,118,111,116, 91, 51, 93, 0, 98,
+114,117,115,104, 95,116,121,112,101, 0,116,101,120,110,114, 0,116,101,120,114,101,112,116, 0,116,101,120,102, 97,100,101, 0,
+116,101,120,115,101,112, 0, 97,118,101,114, 97,103,105,110,103, 0,116, 97, 98,108,101,116, 95,115,105,122,101, 0,116, 97, 98,
+108,101,116, 95,115,116,114,101,110,103,116,104, 0,115,121,109,109, 0,114, 97,107,101, 0, 97,120,105,115,108,111, 99,107, 0,
+ 42, 99, 97,109,101,114, 97, 0, 42,119,111,114,108,100, 0, 42,115,101,116, 0, 98, 97,115,101, 0, 42, 98, 97,115, 97, 99,116,
+ 0, 99,117,114,115,111,114, 91, 51, 93, 0,116,119, 99,101,110,116, 91, 51, 93, 0,116,119,109,105,110, 91, 51, 93, 0,116,119,
+109, 97,120, 91, 51, 93, 0,101,100,105,116, 98,117,116,115,105,122,101, 0,115,101,108,101, 99,116,109,111,100,101, 0,112,114,
+111,112,111,114,116,105,111,110, 97,108, 0,112,114,111,112, 95,109,111,100,101, 0, 97,117,116,111,109,101,114,103,101, 0,112,
+ 97,100, 53, 0,112, 97,100, 54, 0,112, 97,100, 55, 0, 42,101,100, 0, 42,114, 97,100,105,111, 0,102,114, 97,109,105,110,103,
+ 0, 42,116,111,111,108,115,101,116,116,105,110,103,115, 0, 97,117,100,105,111, 0,116,114, 97,110,115,102,111,114,109, 95,115,
+112, 97, 99,101,115, 0,106,117,109,112,102,114, 97,109,101, 0,115,110, 97,112, 95,109,111,100,101, 0,115,110, 97,112, 95,102,
+108, 97,103, 0,115,110, 97,112, 95,116, 97,114,103,101,116, 0, 42,116,104,101, 68, 97,103, 0,100, 97,103,105,115,118, 97,108,
+105,100, 0,100, 97,103,102,108, 97,103,115, 0,115, 99,117,108,112,116,100, 97,116, 97, 0,102,114, 97,109,101, 95,115,116,101,
+112, 0,122,111,111,109, 0, 98,108,101,110,100, 0,120,105,109, 0,121,105,109, 0,115,112, 97, 99,101,116,121,112,101, 0, 98,
+108,111, 99,107,115, 99, 97,108,101, 0, 42, 97,114,101, 97, 0, 98,108,111, 99,107,104, 97,110,100,108,101,114, 91, 56, 93, 0,
+118,105,101,119,109, 97,116, 91, 52, 93, 91, 52, 93, 0,118,105,101,119,105,110,118, 91, 52, 93, 91, 52, 93, 0,112,101,114,115,
+109, 97,116, 91, 52, 93, 91, 52, 93, 0,112,101,114,115,105,110,118, 91, 52, 93, 91, 52, 93, 0,119,105,110,109, 97,116, 49, 91,
+ 52, 93, 91, 52, 93, 0,118,105,101,119,109, 97,116, 49, 91, 52, 93, 91, 52, 93, 0,118,105,101,119,113,117, 97,116, 91, 52, 93,
+ 0,122,102, 97, 99, 0,108, 97,121, 95,117,115,101,100, 0,112,101,114,115,112, 0, 42,111, 98, 95, 99,101,110,116,114,101, 0,
+ 42, 98,103,112,105, 99, 0, 42,108,111, 99, 97,108,118,100, 0, 42,114,105, 0, 42,114,101,116,111,112,111, 95,118,105,101,119,
+ 95,100, 97,116, 97, 0, 42,100,101,112,116,104,115, 0,111, 98, 95, 99,101,110,116,114,101, 95, 98,111,110,101, 91, 51, 50, 93,
+ 0,108,111, 99, 97,108,118,105,101,119, 0,108, 97,121, 97, 99,116, 0,115, 99,101,110,101,108,111, 99,107, 0, 97,114,111,117,
+110,100, 0, 99, 97,109,122,111,111,109, 0,112,105,118,111,116, 95,108, 97,115,116, 0,103,114,105,100, 0,103,114,105,100,118,
+105,101,119, 0,112,105,120,115,105,122,101, 0,110,101, 97,114, 0,102, 97,114, 0, 99, 97,109,100,120, 0, 99, 97,109,100,121,
+ 0,103,114,105,100,108,105,110,101,115, 0,118,105,101,119, 98,117,116, 0,103,114,105,100,102,108, 97,103, 0,109,111,100,101,
+115,101,108,101, 99,116, 0,116,119,116,121,112,101, 0,116,119,109,111,100,101, 0,116,119,102,108, 97,103, 0,116,119,100,114,
+ 97,119,102,108, 97,103, 0,116,119,109, 97,116, 91, 52, 93, 91, 52, 93, 0, 99,108,105,112, 91, 52, 93, 91, 52, 93, 0, 42, 99,
+108,105,112, 98, 98, 0, 97,102,116,101,114,100,114, 97,119, 0,122, 98,117,102, 0,120,114, 97,121, 0,102,108, 97,103, 50, 0,
+103,114,105,100,115,117, 98,100,105,118, 0,110,100,111,102,109,111,100,101, 0,110,100,111,102,102,105,108,116,101,114, 0, 42,
+112,114,111,112,101,114,116,105,101,115, 95,115,116,111,114, 97,103,101, 0, 42,103,112,100, 0,118,101,114,116, 0,104,111,114,
+ 0,109, 97,115,107, 0,109,105,110, 91, 50, 93, 0,109, 97,120, 91, 50, 93, 0,109,105,110,122,111,111,109, 0,109, 97,120,122,
+111,111,109, 0,115, 99,114,111,108,108, 0,107,101,101,112,116,111,116, 0,107,101,101,112, 97,115,112,101, 99,116, 0,107,101,
+101,112,122,111,111,109, 0,111,108,100,119,105,110,120, 0,111,108,100,119,105,110,121, 0, 99,117,114,115,111,114, 91, 50, 93,
+ 0,114,111,119, 98,117,116, 0,118, 50,100, 0, 42,101,100,105,116,105,112,111, 0,105,112,111,107,101,121, 0, 97, 99,116,110,
+ 97,109,101, 91, 51, 50, 93, 0, 99,111,110,115,116,110, 97,109,101, 91, 51, 50, 93, 0, 98,111,110,101,110, 97,109,101, 91, 51,
+ 50, 93, 0,116,111,116,105,112,111, 0,112,105,110, 0, 98,117,116,111,102,115, 0, 99,104, 97,110,110,101,108, 0,108,111, 99,
+107, 0,109,101,100,105, 97,110, 91, 51, 93, 0, 99,117,114,115,101,110,115, 0, 99,117,114, 97, 99,116, 0, 97,108,105,103,110,
+ 0,116, 97, 98,111, 0,109, 97,105,110, 98, 0,109, 97,105,110, 98,111, 0, 42,108,111, 99,107,112,111,105,110, 0,116,101,120,
+102,114,111,109, 0,115,104,111,119,103,114,111,117,112, 0,109,111,100,101,108,116,121,112,101, 0,115, 99,114,105,112,116, 98,
+108,111, 99,107, 0,114,101, 95, 97,108,105,103,110, 0,111,108,100,107,101,121,112,114,101,115,115, 0,116, 97, 98, 91, 55, 93,
+ 0, 99,104, 97,110,115,104,111,119,110, 0,122,101, 98,114, 97, 0, 42,102,105,108,101,108,105,115,116, 0,116,111,116,102,105,
+108,101, 0,116,105,116,108,101, 91, 50, 52, 93, 0,100,105,114, 91, 50, 52, 48, 93, 0,102,105,108,101, 91, 56, 48, 93, 0,111,
+102,115, 0,115,111,114,116, 0,109, 97,120,110, 97,109,101,108,101,110, 0, 99,111,108,108,117,109,115, 0,102, 95,102,112, 0,
+102,112, 95,115,116,114, 91, 56, 93, 0, 42,108,105, 98,102,105,108,101,100, 97,116, 97, 0,114,101,116,118, 97,108, 0,109,101,
+110,117, 0, 97, 99,116, 0, 40, 42,114,101,116,117,114,110,102,117,110, 99, 41, 40, 41, 0, 40, 42,114,101,116,117,114,110,102,
+117,110, 99, 95,101,118,101,110,116, 41, 40, 41, 0, 40, 42,114,101,116,117,114,110,102,117,110, 99, 95, 97,114,103,115, 41, 40,
+ 41, 0, 42, 97,114,103, 49, 0, 42, 97,114,103, 50, 0, 42,109,101,110,117,112, 0, 42,112,117,112,109,101,110,117, 0,111,111,
+112,115, 0,118,105,115,105,102,108, 97,103, 0,116,114,101,101, 0, 42,116,114,101,101,115,116,111,114,101, 0,115,101, 97,114,
+ 99,104, 95,115,116,114,105,110,103, 91, 51, 50, 93, 0,115,101, 97,114, 99,104, 95,116,115,101, 0,115,101, 97,114, 99,104, 95,
+102,108, 97,103,115, 0,100,111, 95, 0,111,117,116,108,105,110,101,118,105,115, 0,115,116,111,114,101,102,108, 97,103, 0,100,
+101,112,115, 95,102,108, 97,103,115, 0,105,109, 97,110,114, 0, 99,117,114,116,105,108,101, 0,105,109,116,121,112,101,110,114,
+ 0,100,116, 95,117,118, 0,115,116,105, 99,107,121, 0,100,116, 95,117,118,115,116,114,101,116, 99,104, 0,112, 97,100, 91, 53,
+ 93, 0, 99,101,110,116,120, 0, 99,101,110,116,121, 0, 97,117,116,111,115,110, 97,112, 0, 42,116,101,120,116, 0,116,111,112,
+ 0,118,105,101,119,108,105,110,101,115, 0,102,111,110,116, 95,105,100, 0,108,104,101,105,103,104,116, 0,108,101,102,116, 0,
+115,104,111,119,108,105,110,101,110,114,115, 0,116, 97, 98,110,117,109, 98,101,114, 0, 99,117,114,114,116, 97, 98, 95,115,101,
+116, 0,115,104,111,119,115,121,110,116, 97,120, 0,111,118,101,114,119,114,105,116,101, 0,112,105,120, 95,112,101,114, 95,108,
+105,110,101, 0,116,120,116,115, 99,114,111,108,108, 0,116,120,116, 98, 97,114, 0,119,111,114,100,119,114, 97,112, 0,100,111,
+112,108,117,103,105,110,115, 0, 42,112,121, 95,100,114, 97,119, 0, 42,112,121, 95,101,118,101,110,116, 0, 42,112,121, 95, 98,
+117,116,116,111,110, 0, 42,112,121, 95, 98,114,111,119,115,101,114, 99, 97,108,108, 98, 97, 99,107, 0, 42,112,121, 95,103,108,
+111, 98, 97,108,100,105, 99,116, 0,108, 97,115,116,115,112, 97, 99,101, 0,115, 99,114,105,112,116,110, 97,109,101, 91, 50, 53,
+ 54, 93, 0,115, 99,114,105,112,116, 97,114,103, 91, 50, 53, 54, 93, 0, 42,115, 99,114,105,112,116, 0, 42, 98,117,116, 95,114,
+101,102,115, 0,114,101,100,114, 97,119,115, 0, 42,105,100, 0, 97,115,112,101, 99,116, 0, 42, 99,117,114,102,111,110,116, 0,
+ 42,101,100,105,116,116,114,101,101, 0,116,114,101,101,116,121,112,101, 0, 42,102,105,108,101,115, 0, 97, 99,116,105,118,101,
+ 95,102,105,108,101, 0,110,117,109,116,105,108,101,115,120, 0,110,117,109,116,105,108,101,115,121, 0,115,101,108,115,116, 97,
+116,101, 0,118,105,101,119,114,101, 99,116, 0, 98,111,111,107,109, 97,114,107,114,101, 99,116, 0,115, 99,114,111,108,108,112,
+111,115, 0,115, 99,114,111,108,108,104,101,105,103,104,116, 0,115, 99,114,111,108,108, 97,114,101, 97, 0, 97, 99,116,105,118,
+101, 95, 98,111,111,107,109, 97,114,107, 0,112,114,118, 95,119, 0,112,114,118, 95,104, 0, 42,105,109,103, 0,111,117,116,108,
+105,110,101, 91, 52, 93, 0,110,101,117,116,114, 97,108, 91, 52, 93, 0, 97, 99,116,105,111,110, 91, 52, 93, 0,115,101,116,116,
+105,110,103, 91, 52, 93, 0,115,101,116,116,105,110,103, 49, 91, 52, 93, 0,115,101,116,116,105,110,103, 50, 91, 52, 93, 0,110,
+117,109, 91, 52, 93, 0,116,101,120,116,102,105,101,108,100, 91, 52, 93, 0,116,101,120,116,102,105,101,108,100, 95,104,105, 91,
+ 52, 93, 0,112,111,112,117,112, 91, 52, 93, 0,116,101,120,116, 91, 52, 93, 0,116,101,120,116, 95,104,105, 91, 52, 93, 0,109,
+101,110,117, 95, 98, 97, 99,107, 91, 52, 93, 0,109,101,110,117, 95,105,116,101,109, 91, 52, 93, 0,109,101,110,117, 95,104,105,
+108,105,116,101, 91, 52, 93, 0,109,101,110,117, 95,116,101,120,116, 91, 52, 93, 0,109,101,110,117, 95,116,101,120,116, 95,104,
+105, 91, 52, 93, 0, 98,117,116, 95,100,114, 97,119,116,121,112,101, 0,105, 99,111,110,102,105,108,101, 91, 56, 48, 93, 0, 98,
+ 97, 99,107, 91, 52, 93, 0,104,101, 97,100,101,114, 91, 52, 93, 0,112, 97,110,101,108, 91, 52, 93, 0,115,104, 97,100,101, 49,
+ 91, 52, 93, 0,115,104, 97,100,101, 50, 91, 52, 93, 0,104,105,108,105,116,101, 91, 52, 93, 0,103,114,105,100, 91, 52, 93, 0,
+119,105,114,101, 91, 52, 93, 0,115,101,108,101, 99,116, 91, 52, 93, 0,108, 97,109,112, 91, 52, 93, 0, 97, 99,116,105,118,101,
+ 91, 52, 93, 0,103,114,111,117,112, 91, 52, 93, 0,103,114,111,117,112, 95, 97, 99,116,105,118,101, 91, 52, 93, 0,116,114, 97,
+110,115,102,111,114,109, 91, 52, 93, 0,118,101,114,116,101,120, 91, 52, 93, 0,118,101,114,116,101,120, 95,115,101,108,101, 99,
+116, 91, 52, 93, 0,101,100,103,101, 91, 52, 93, 0,101,100,103,101, 95,115,101,108,101, 99,116, 91, 52, 93, 0,101,100,103,101,
+ 95,115,101, 97,109, 91, 52, 93, 0,101,100,103,101, 95,115,104, 97,114,112, 91, 52, 93, 0,101,100,103,101, 95,102, 97, 99,101,
+115,101,108, 91, 52, 93, 0,102, 97, 99,101, 91, 52, 93, 0,102, 97, 99,101, 95,115,101,108,101, 99,116, 91, 52, 93, 0,102, 97,
+ 99,101, 95,100,111,116, 91, 52, 93, 0,110,111,114,109, 97,108, 91, 52, 93, 0, 98,111,110,101, 95,115,111,108,105,100, 91, 52,
+ 93, 0, 98,111,110,101, 95,112,111,115,101, 91, 52, 93, 0,115,116,114,105,112, 91, 52, 93, 0,115,116,114,105,112, 95,115,101,
+108,101, 99,116, 91, 52, 93, 0, 99,102,114, 97,109,101, 91, 52, 93, 0,118,101,114,116,101,120, 95,115,105,122,101, 0,102, 97,
+ 99,101,100,111,116, 95,115,105,122,101, 0, 98,112, 97,100, 91, 50, 93, 0,115,121,110,116, 97,120,108, 91, 52, 93, 0,115,121,
+110,116, 97,120,110, 91, 52, 93, 0,115,121,110,116, 97,120, 98, 91, 52, 93, 0,115,121,110,116, 97,120,118, 91, 52, 93, 0,115,
+121,110,116, 97,120, 99, 91, 52, 93, 0,109,111,118,105,101, 91, 52, 93, 0,105,109, 97,103,101, 91, 52, 93, 0,115, 99,101,110,
+101, 91, 52, 93, 0, 97,117,100,105,111, 91, 52, 93, 0,101,102,102,101, 99,116, 91, 52, 93, 0,112,108,117,103,105,110, 91, 52,
+ 93, 0,116,114, 97,110,115,105,116,105,111,110, 91, 52, 93, 0,109,101,116, 97, 91, 52, 93, 0,101,100,105,116,109,101,115,104,
+ 95, 97, 99,116,105,118,101, 91, 52, 93, 0,104, 97,110,100,108,101, 95,118,101,114,116,101,120, 91, 52, 93, 0,104, 97,110,100,
+108,101, 95,118,101,114,116,101,120, 95,115,101,108,101, 99,116, 91, 52, 93, 0,104, 97,110,100,108,101, 95,118,101,114,116,101,
+120, 95,115,105,122,101, 0,104,112, 97,100, 91, 55, 93, 0,115,111,108,105,100, 91, 52, 93, 0,116,117,105, 0,116, 98,117,116,
+115, 0,116,118, 51,100, 0,116,102,105,108,101, 0,116,105,112,111, 0,116,105,110,102,111, 0,116,115,110,100, 0,116, 97, 99,
+116, 0,116,110,108, 97, 0,116,115,101,113, 0,116,105,109, 97, 0,116,105,109, 97,115,101,108, 0,116,101,120,116, 0,116,111,
+111,112,115, 0,116,116,105,109,101, 0,116,110,111,100,101, 0,116, 97,114,109, 91, 50, 48, 93, 0, 98,112, 97,100, 91, 52, 93,
+ 0, 98,112, 97,100, 49, 91, 52, 93, 0,115,112,101, 99, 91, 52, 93, 0,100,117,112,102,108, 97,103, 0,115, 97,118,101,116,105,
+109,101, 0,116,101,109,112,100,105,114, 91, 49, 54, 48, 93, 0,102,111,110,116,100,105,114, 91, 49, 54, 48, 93, 0,114,101,110,
+100,101,114,100,105,114, 91, 49, 54, 48, 93, 0,116,101,120,116,117,100,105,114, 91, 49, 54, 48, 93, 0,112,108,117,103,116,101,
+120,100,105,114, 91, 49, 54, 48, 93, 0,112,108,117,103,115,101,113,100,105,114, 91, 49, 54, 48, 93, 0,112,121,116,104,111,110,
+100,105,114, 91, 49, 54, 48, 93, 0,115,111,117,110,100,100,105,114, 91, 49, 54, 48, 93, 0,121,102,101,120,112,111,114,116,100,
+105,114, 91, 49, 54, 48, 93, 0,118,101,114,115,105,111,110,115, 0,118,114,109,108,102,108, 97,103, 0,103, 97,109,101,102,108,
+ 97,103,115, 0,119,104,101,101,108,108,105,110,101,115, 99,114,111,108,108, 0,117,105,102,108, 97,103, 0,108, 97,110,103,117,
+ 97,103,101, 0,117,115,101,114,112,114,101,102, 0,118,105,101,119,122,111,111,109, 0, 99,111,110,115,111,108,101, 95, 98,117,
+102,102,101,114, 0, 99,111,110,115,111,108,101, 95,111,117,116, 0,109,105,120, 98,117,102,115,105,122,101, 0,102,111,110,116,
+115,105,122,101, 0,101,110, 99,111,100,105,110,103, 0,116,114, 97,110,115,111,112,116,115, 0,109,101,110,117,116,104,114,101,
+115,104,111,108,100, 49, 0,109,101,110,117,116,104,114,101,115,104,111,108,100, 50, 0,102,111,110,116,110, 97,109,101, 91, 50,
+ 53, 54, 93, 0,116,104,101,109,101,115, 0,117,110,100,111,115,116,101,112,115, 0,117,110,100,111,109,101,109,111,114,121, 0,
+103,112, 95,109, 97,110,104, 97,116,116,101,110,100,105,115,116, 0,103,112, 95,101,117, 99,108,105,100,101, 97,110,100,105,115,
+116, 0, 99,117,114,115,115,105,122,101, 0,116, 98, 95,108,101,102,116,109,111,117,115,101, 0,116, 98, 95,114,105,103,104,116,
+109,111,117,115,101, 0,108,105,103,104,116, 91, 51, 93, 0,116,119, 95,104,111,116,115,112,111,116, 0,116,119, 95,102,108, 97,
+103, 0,116,119, 95,104, 97,110,100,108,101,115,105,122,101, 0,116,119, 95,115,105,122,101, 0,116,101,120,116,105,109,101,111,
+117,116, 0,116,101,120, 99,111,108,108,101, 99,116,114, 97,116,101, 0,109,101,109, 99, 97, 99,104,101,108,105,109,105,116, 0,
+112,114,101,102,101,116, 99,104,102,114, 97,109,101,115, 0,102,114, 97,109,101,115,101,114,118,101,114,112,111,114,116, 0,112,
+ 97,100, 95,114,111,116, 95, 97,110,103,108,101, 0,111, 98, 99,101,110,116,101,114, 95,100,105, 97, 0,114,118,105,115,105,122,
+101, 0,114,118,105, 98,114,105,103,104,116, 0,114,101, 99,101,110,116, 95,102,105,108,101,115, 0,115,109,111,111,116,104, 95,
+118,105,101,119,116,120, 0,103,108,114,101,115,108,105,109,105,116, 0,110,100,111,102, 95,112, 97,110, 0,110,100,111,102, 95,
+114,111,116, 97,116,101, 0,112, 97,100,115, 91, 50, 93, 0,112, 97,100, 91, 56, 93, 0,118,101,114,115,101,109, 97,115,116,101,
+114, 91, 49, 54, 48, 93, 0,118,101,114,115,101,117,115,101,114, 91, 49, 54, 48, 93, 0,103,108, 97,108,112,104, 97, 99,108,105,
+112, 0, 97,117,116,111,107,101,121, 95,109,111,100,101, 0, 97,117,116,111,107,101,121, 95,102,108, 97,103, 0, 99,111, 98, 97,
+ 95,119,101,105,103,104,116, 0,118,101,114,116, 98, 97,115,101, 0,101,100,103,101, 98, 97,115,101, 0, 97,114,101, 97, 98, 97,
+115,101, 0, 42,115, 99,101,110,101, 0,101,110,100,120, 0,101,110,100,121, 0,115,105,122,101,120, 0,115,105,122,101,121, 0,
+115, 99,101,110,101,110,114, 0,115, 99,114,101,101,110,110,114, 0,102,117,108,108, 0,109, 97,105,110,119,105,110, 0,119,105,
+110, 97,107,116, 0,104, 97,110,100,108,101,114, 91, 56, 93, 0, 42,110,101,119,118, 0,118,101, 99, 0, 42,118, 49, 0, 42,118,
+ 50, 0,112, 97,110,101,108,110, 97,109,101, 91, 54, 52, 93, 0,116, 97, 98,110, 97,109,101, 91, 54, 52, 93, 0,100,114, 97,119,
+110, 97,109,101, 91, 54, 52, 93, 0,111,102,115,120, 0,111,102,115,121, 0, 99,111,110,116,114,111,108, 0,115,110, 97,112, 0,
+111,108,100, 95,111,102,115,120, 0,111,108,100, 95,111,102,115,121, 0,115,111,114,116, 99,111,117,110,116,101,114, 0, 42,112,
+ 97,110,101,108,116, 97, 98, 0, 42,118, 51, 0, 42,118, 52, 0, 42,102,117,108,108, 0,119,105,110,109, 97,116, 91, 52, 93, 91,
+ 52, 93, 0,104,101, 97,100,114, 99,116, 0,119,105,110,114, 99,116, 0,104,101, 97,100,119,105,110, 0,119,105,110, 0,104,101,
+ 97,100,101,114,116,121,112,101, 0, 98,117,116,115,112, 97, 99,101,116,121,112,101, 0,119,105,110,120, 0,119,105,110,121, 0,
+104,101, 97,100, 95,115,119, 97,112, 0,104,101, 97,100, 95,101,113,117, 97,108, 0,119,105,110, 95,115,119, 97,112, 0,119,105,
+110, 95,101,113,117, 97,108, 0,104,101, 97,100, 98,117,116,108,101,110, 0,104,101, 97,100, 98,117,116,111,102,115, 0, 99,117,
+114,115,111,114, 0,115,112, 97, 99,101,100, 97,116, 97, 0,117,105, 98,108,111, 99,107,115, 0,112, 97,110,101,108,115, 0,115,
+117, 98,118,115,116,114, 91, 52, 93, 0,115,117, 98,118,101,114,115,105,111,110, 0,112, 97,100,115, 0,109,105,110,118,101,114,
+115,105,111,110, 0,109,105,110,115,117, 98,118,101,114,115,105,111,110, 0,100,105,115,112,108, 97,121,109,111,100,101, 0, 42,
+ 99,117,114,115, 99,114,101,101,110, 0, 42, 99,117,114,115, 99,101,110,101, 0,102,105,108,101,102,108, 97,103,115, 0,103,108,
+111, 98, 97,108,102, 0,110, 97,109,101, 91, 56, 48, 93, 0, 42,105, 98,117,102, 0, 42,105, 98,117,102, 95, 99,111,109,112, 0,
+ 42,115,101, 49, 0, 42,115,101, 50, 0, 42,115,101, 51, 0,110,114, 0, 98,111,116,116,111,109, 0,114,105,103,104,116, 0,120,
+111,102,115, 0,121,111,102,115, 0,108,105,102,116, 91, 51, 93, 0,103, 97,109,109, 97, 91, 51, 93, 0,103, 97,105,110, 91, 51,
+ 93, 0,115, 97,116,117,114, 97,116,105,111,110, 0,100,105,114, 91, 49, 54, 48, 93, 0,100,111,110,101, 0,115,116, 97,114,116,
+115,116,105,108,108, 0,101,110,100,115,116,105,108,108, 0, 42,115,116,114,105,112,100, 97,116, 97, 0,111,114,120, 0,111,114,
+121, 0, 42, 99,114,111,112, 0, 42,116,114, 97,110,115,102,111,114,109, 0, 42, 99,111,108,111,114, 95, 98, 97,108, 97,110, 99,
+101, 0, 42,116,115,116,114,105,112,100, 97,116, 97, 0, 42,116,115,116,114,105,112,100, 97,116, 97, 95,115,116, 97,114,116,115,
+116,105,108,108, 0, 42,116,115,116,114,105,112,100, 97,116, 97, 95,101,110,100,115,116,105,108,108, 0, 42,105, 98,117,102, 95,
+115,116, 97,114,116,115,116,105,108,108, 0, 42,105, 98,117,102, 95,101,110,100,115,116,105,108,108, 0, 42,105,110,115,116, 97,
+110, 99,101, 95,112,114,105,118, 97,116,101, 95,100, 97,116, 97, 0, 42, 42, 99,117,114,114,101,110,116, 95,112,114,105,118, 97,
+116,101, 95,100, 97,116, 97, 0, 42,116,109,112, 0,115,116, 97,114,116,111,102,115, 0,101,110,100,111,102,115, 0,109, 97, 99,
+104,105,110,101, 0,115,116, 97,114,116,100,105,115,112, 0,101,110,100,100,105,115,112, 0,109,117,108, 0,104, 97,110,100,115,
+105,122,101, 0, 97,110,105,109, 95,112,114,101,115,101,101,107, 0, 42,115,116,114,105,112, 0,102, 97, 99,102, 48, 0,102, 97,
+ 99,102, 49, 0, 42,115,101,113, 49, 0, 42,115,101,113, 50, 0, 42,115,101,113, 51, 0,115,101,113, 98, 97,115,101, 0, 42,115,
+111,117,110,100, 0, 42,104,100, 97,117,100,105,111, 0,108,101,118,101,108, 0,112, 97,110, 0, 99,117,114,112,111,115, 0,115,
+116,114,111, 98,101, 0, 42,101,102,102,101, 99,116,100, 97,116, 97, 0, 97,110,105,109, 95,115,116, 97,114,116,111,102,115, 0,
+ 97,110,105,109, 95,101,110,100,111,102,115, 0, 98,108,101,110,100, 95,109,111,100,101, 0, 98,108,101,110,100, 95,111,112, 97,
+ 99,105,116,121, 0, 42,111,108,100, 98, 97,115,101,112, 0, 42,112, 97,114,115,101,113, 0, 42,115,101,113, 98, 97,115,101,112,
+ 0,109,101,116, 97,115,116, 97, 99,107, 0,101,100,103,101, 87,105,100,116,104, 0,102,111,114,119, 97,114,100, 0,119,105,112,
+101,116,121,112,101, 0,102, 77,105,110,105, 0,102, 67,108, 97,109,112, 0,102, 66,111,111,115,116, 0,100, 68,105,115,116, 0,
+100, 81,117, 97,108,105,116,121, 0, 98, 78,111, 67,111,109,112, 0, 83, 99, 97,108,101,120, 73,110,105, 0, 83, 99, 97,108,101,
+121, 73,110,105, 0, 83, 99, 97,108,101,120, 70,105,110, 0, 83, 99, 97,108,101,121, 70,105,110, 0,120, 73,110,105, 0,120, 70,
+105,110, 0,121, 73,110,105, 0,121, 70,105,110, 0,114,111,116, 73,110,105, 0,114,111,116, 70,105,110, 0,105,110,116,101,114,
+112,111,108, 97,116,105,111,110, 0, 42,102,114, 97,109,101, 77, 97,112, 0,103,108,111, 98, 97,108, 83,112,101,101,100, 0,108,
+ 97,115,116, 86, 97,108,105,100, 70,114, 97,109,101, 0, 98,117,116,116,121,112,101, 0,117,115,101,114,106,105,116, 0,115,116,
+ 97, 0,116,111,116,112, 97,114,116, 0,110,111,114,109,102, 97, 99, 0,111, 98,102, 97, 99, 0,114, 97,110,100,102, 97, 99, 0,
+116,101,120,102, 97, 99, 0,114, 97,110,100,108,105,102,101, 0,102,111,114, 99,101, 91, 51, 93, 0,118,101, 99,116,115,105,122,
+101, 0,109, 97,120,108,101,110, 0,100,101,102,118,101, 99, 91, 51, 93, 0,109,117,108,116, 91, 52, 93, 0,108,105,102,101, 91,
+ 52, 93, 0, 99,104,105,108,100, 91, 52, 93, 0,109, 97,116, 91, 52, 93, 0,116,101,120,109, 97,112, 0, 99,117,114,109,117,108,
+116, 0,115,116, 97,116,105, 99,115,116,101,112, 0,111,109, 97,116, 0,116,105,109,101,116,101,120, 0,115,112,101,101,100,116,
+101,120, 0,102,108, 97,103, 50,110,101,103, 0,118,101,114,116,103,114,111,117,112, 95,118, 0,118,103,114,111,117,112,110, 97,
+109,101, 91, 51, 50, 93, 0,118,103,114,111,117,112,110, 97,109,101, 95,118, 91, 51, 50, 93, 0, 42,107,101,121,115, 0,109,105,
+110,102, 97, 99, 0,117,115,101,100, 0,117,115,101,100,101,108,101,109, 0,100,120, 0,100,121, 0,108,105,110,107, 0,111,116,
+121,112,101, 0,111,108,100, 0, 42,112,111,105,110, 0, 42,111,108,100,112,111,105,110, 0,114,101,115,101,116,100,105,115,116,
+ 0,108, 97,115,116,118, 97,108, 0, 42,109, 97, 0,107,101,121, 0,113,117, 97,108, 0,113,117, 97,108, 50, 0,116, 97,114,103,
+101,116, 78, 97,109,101, 91, 51, 50, 93, 0,116,111,103,103,108,101, 78, 97,109,101, 91, 51, 50, 93, 0,118, 97,108,117,101, 91,
+ 51, 50, 93, 0,109, 97,120,118, 97,108,117,101, 91, 51, 50, 93, 0,100,101,108, 97,121, 0,100,117,114, 97,116,105,111,110, 0,
+109, 97,116,101,114,105, 97,108, 78, 97,109,101, 91, 51, 50, 93, 0,100, 97,109,112,116,105,109,101,114, 0,112,114,111,112,110,
+ 97,109,101, 91, 51, 50, 93, 0,109, 97,116,110, 97,109,101, 91, 51, 50, 93, 0, 97,120,105,115,102,108, 97,103, 0, 42,102,114,
+111,109, 79, 98,106,101, 99,116, 0,115,117, 98,106,101, 99,116, 91, 51, 50, 93, 0, 98,111,100,121, 91, 51, 50, 93, 0,112,117,
+108,115,101, 0,102,114,101,113, 0,116,111,116,108,105,110,107,115, 0, 42, 42,108,105,110,107,115, 0,106,111,121,105,110,100,
+101,120, 0, 97,120,105,115,102, 0, 98,117,116,116,111,110, 0, 98,117,116,116,111,110,102, 0,104, 97,116, 0,104, 97,116,102,
+ 0,112,114,101, 99,105,115,105,111,110, 0,115,116,114, 91, 49, 50, 56, 93, 0, 42,109,121,110,101,119, 0,105,110,112,117,116,
+115, 0,116,111,116,115,108,105,110,107,115, 0, 42, 42,115,108,105,110,107,115, 0,118, 97,108,111, 0,115,116, 97,116,101, 95,
+109, 97,115,107, 0, 42, 97, 99,116, 0,102,114, 97,109,101, 80,114,111,112, 91, 51, 50, 93, 0, 98,108,101,110,100,105,110, 0,
+112,114,105,111,114,105,116,121, 0,101,110,100, 95,114,101,115,101,116, 0,115,116,114,105,100,101, 97,120,105,115, 0,115,116,
+114,105,100,101,108,101,110,103,116,104, 0,115,110,100,110,114, 0,112, 97,100, 49, 91, 50, 93, 0,109, 97,107,101, 99,111,112,
+121, 0, 99,111,112,121,109, 97,100,101, 0,112, 97,100, 50, 91, 49, 93, 0,116,114, 97, 99,107, 0,118,111,108,117,109,101, 0,
+ 42,109,101, 0,108,105,110, 86,101,108,111, 99,105,116,121, 91, 51, 93, 0, 97,110,103, 86,101,108,111, 99,105,116,121, 91, 51,
+ 93, 0,108,111, 99, 97,108,102,108, 97,103, 0,100,121,110, 95,111,112,101,114, 97,116,105,111,110, 0,102,111,114, 99,101,108,
+111, 99, 91, 51, 93, 0,102,111,114, 99,101,114,111,116, 91, 51, 93, 0,108,105,110,101, 97,114,118,101,108,111, 99,105,116,121,
+ 91, 51, 93, 0, 97,110,103,117,108, 97,114,118,101,108,111, 99,105,116,121, 91, 51, 93, 0, 98,117,116,115,116, 97, 0, 98,117,
+116,101,110,100, 0,109,105,110, 0,109, 97,120, 0,118,105,115,105,102, 97, 99, 0,114,111,116,100, 97,109,112, 0,109,105,110,
+108,111, 99, 91, 51, 93, 0,109, 97,120,108,111, 99, 91, 51, 93, 0,109,105,110,114,111,116, 91, 51, 93, 0,109, 97,120,114,111,
+116, 91, 51, 93, 0,109, 97,116,112,114,111,112, 91, 51, 50, 93, 0,100,105,115,116,114,105, 98,117,116,105,111,110, 0,105,110,
+116, 95, 97,114,103, 95, 49, 0,105,110,116, 95, 97,114,103, 95, 50, 0,102,108,111, 97,116, 95, 97,114,103, 95, 49, 0,102,108,
+111, 97,116, 95, 97,114,103, 95, 50, 0,116,111, 80,114,111,112, 78, 97,109,101, 91, 51, 50, 93, 0, 42,116,111, 79, 98,106,101,
+ 99,116, 0, 98,111,100,121, 84,121,112,101, 0,102,105,108,101,110, 97,109,101, 91, 54, 52, 93, 0,108,111, 97,100, 97,110,105,
+110, 97,109,101, 91, 54, 52, 93, 0,105,110,116, 95, 97,114,103, 0,102,108,111, 97,116, 95, 97,114,103, 0,103,111, 0, 97, 99,
+ 99,101,108,108,101,114, 97,116,105,111,110, 0,109, 97,120,115,112,101,101,100, 0,109, 97,120,114,111,116,115,112,101,101,100,
+ 0,109, 97,120,116,105,108,116,115,112,101,101,100, 0,116,105,108,116,100, 97,109,112, 0,115,112,101,101,100,100, 97,109,112,
+ 0, 42,115, 97,109,112,108,101, 0, 42,115,116,114,101, 97,109, 0, 42,110,101,119,112, 97, 99,107,101,100,102,105,108,101, 0,
+ 42,115,110,100, 95,115,111,117,110,100, 0,112, 97,110,110,105,110,103, 0, 97,116,116,101,110,117, 97,116,105,111,110, 0,112,
+105,116, 99,104, 0,109,105,110, 95,103, 97,105,110, 0,109, 97,120, 95,103, 97,105,110, 0,100,105,115,116, 97,110, 99,101, 0,
+115,116,114,101, 97,109,108,101,110, 0, 99,104, 97,110,110,101,108,115, 0,104,105,103,104,112,114,105,111, 0,112, 97,100, 91,
+ 49, 48, 93, 0,103, 97,105,110, 0,100,111,112,112,108,101,114,102, 97, 99,116,111,114, 0,100,111,112,112,108,101,114,118,101,
+108,111, 99,105,116,121, 0,110,117,109,115,111,117,110,100,115, 98,108,101,110,100,101,114, 0,110,117,109,115,111,117,110,100,
+115,103, 97,109,101,101,110,103,105,110,101, 0, 42,108, 97,109,112,114,101,110, 0,103,111, 98,106,101, 99,116, 0,100,117,112,
+108,105, 95,111,102,115, 91, 51, 93, 0, 99,104,105,108,100, 98, 97,115,101, 0,114,111,108,108, 0,104,101, 97,100, 91, 51, 93,
+ 0,116, 97,105,108, 91, 51, 93, 0, 98,111,110,101, 95,109, 97,116, 91, 51, 93, 91, 51, 93, 0, 97,114,109, 95,104,101, 97,100,
+ 91, 51, 93, 0, 97,114,109, 95,116, 97,105,108, 91, 51, 93, 0, 97,114,109, 95,109, 97,116, 91, 52, 93, 91, 52, 93, 0,120,119,
+105,100,116,104, 0,122,119,105,100,116,104, 0,101, 97,115,101, 49, 0,101, 97,115,101, 50, 0,114, 97,100, 95,104,101, 97,100,
+ 0,114, 97,100, 95,116, 97,105,108, 0, 98,111,110,101, 98, 97,115,101, 0, 99,104, 97,105,110, 98, 97,115,101, 0,112, 97,116,
+104,102,108, 97,103, 0,108, 97,121,101,114, 95,112,114,111,116,101, 99,116,101,100, 0,103,104,111,115,116,101,112, 0,103,104,
+111,115,116,115,105,122,101, 0,103,104,111,115,116,116,121,112,101, 0,112, 97,116,104,115,105,122,101, 0,103,104,111,115,116,
+115,102, 0,103,104,111,115,116,101,102, 0,112, 97,116,104,115,102, 0,112, 97,116,104,101,102, 0,112, 97,116,104, 98, 99, 0,
+112, 97,116,104, 97, 99, 0, 99,111,110,115,116,102,108, 97,103, 0,105,107,102,108, 97,103, 0,115,101,108,101, 99,116,102,108,
+ 97,103, 0, 97,103,114,112, 95,105,110,100,101,120, 0, 42, 98,111,110,101, 0, 42, 99,104,105,108,100, 0,105,107,116,114,101,
+101, 0, 42, 98, 95, 98,111,110,101, 95,109, 97,116,115, 0, 42,100,117, 97,108, 95,113,117, 97,116, 0, 42, 98, 95, 98,111,110,
+101, 95,100,117, 97,108, 95,113,117, 97,116,115, 0, 99,104, 97,110, 95,109, 97,116, 91, 52, 93, 91, 52, 93, 0,112,111,115,101,
+ 95,109, 97,116, 91, 52, 93, 91, 52, 93, 0,112,111,115,101, 95,104,101, 97,100, 91, 51, 93, 0,112,111,115,101, 95,116, 97,105,
+108, 91, 51, 93, 0,108,105,109,105,116,109,105,110, 91, 51, 93, 0,108,105,109,105,116,109, 97,120, 91, 51, 93, 0,115,116,105,
+102,102,110,101,115,115, 91, 51, 93, 0,105,107,115,116,114,101,116, 99,104, 0, 42, 99,117,115,116,111,109, 0, 99,104, 97,110,
+ 98, 97,115,101, 0,112,114,111,120,121, 95,108, 97,121,101,114, 0,115,116,114,105,100,101, 95,111,102,102,115,101,116, 91, 51,
+ 93, 0, 99,121, 99,108,105, 99, 95,111,102,102,115,101,116, 91, 51, 93, 0, 97,103,114,111,117,112,115, 0, 97, 99,116,105,118,
+101, 95,103,114,111,117,112, 0, 99,117,115,116,111,109, 67,111,108, 0, 99,115, 0, 42,103,114,112, 0,114,101,115,101,114,118,
+101,100, 49, 0,103,114,111,117,112,115, 0, 97, 99,116,105,118,101, 95,109, 97,114,107,101,114, 0, 97, 99,116,110,114, 0, 97,
+ 99,116,119,105,100,116,104, 0,116,105,109,101,115,108,105,100,101, 0,110, 97,109,101, 91, 51, 48, 93, 0,111,119,110,115,112,
+ 97, 99,101, 0,116, 97,114,115,112, 97, 99,101, 0,101,110,102,111,114, 99,101, 0,104,101, 97,100,116, 97,105,108, 0, 42,116,
+ 97,114, 0,115,117, 98,116, 97,114,103,101,116, 91, 51, 50, 93, 0,109, 97,116,114,105,120, 91, 52, 93, 91, 52, 93, 0,115,112,
+ 97, 99,101, 0, 42,112,114,111,112, 0,116, 97,114,110,117,109, 0,116, 97,114,103,101,116,115, 0,105,116,101,114, 97,116,105,
+111,110,115, 0,114,111,111,116, 98,111,110,101, 0,109, 97,120, 95,114,111,111,116, 98,111,110,101, 0, 42,112,111,108,101,116,
+ 97,114, 0,112,111,108,101,115,117, 98,116, 97,114,103,101,116, 91, 51, 50, 93, 0,112,111,108,101, 97,110,103,108,101, 0,111,
+114,105,101,110,116,119,101,105,103,104,116, 0,103,114, 97, 98,116, 97,114,103,101,116, 91, 51, 93, 0,114,101,115,101,114,118,
+101,100, 50, 0,109,105,110,109, 97,120,102,108, 97,103, 0,115,116,117, 99,107, 0, 99, 97, 99,104,101, 91, 51, 93, 0,108,111,
+ 99,107,102,108, 97,103, 0,102,111,108,108,111,119,102,108, 97,103, 0,118,111,108,109,111,100,101, 0,112,108, 97,110,101, 0,
+111,114,103,108,101,110,103,116,104, 0, 98,117,108,103,101, 0,112,105,118, 88, 0,112,105,118, 89, 0,112,105,118, 90, 0, 97,
+120, 88, 0, 97,120, 89, 0, 97,120, 90, 0,109,105,110, 76,105,109,105,116, 91, 54, 93, 0,109, 97,120, 76,105,109,105,116, 91,
+ 54, 93, 0,101,120,116,114, 97, 70,122, 0,105,110,118,109, 97,116, 91, 52, 93, 91, 52, 93, 0,102,114,111,109, 0,116,111, 0,
+109, 97,112, 91, 51, 93, 0,101,120,112,111, 0,102,114,111,109, 95,109,105,110, 91, 51, 93, 0,102,114,111,109, 95,109, 97,120,
+ 91, 51, 93, 0,116,111, 95,109,105,110, 91, 51, 93, 0,116,111, 95,109, 97,120, 91, 51, 93, 0,122,109,105,110, 0,122,109, 97,
+120, 0, 99,104, 97,110,110,101,108, 91, 51, 50, 93, 0,110,111, 95,114,111,116, 95, 97,120,105,115, 0,115,116,114,105,100,101,
+ 95, 97,120,105,115, 0, 99,117,114,109,111,100, 0, 97, 99,116,115,116, 97,114,116, 0, 97, 99,116,101,110,100, 0, 97, 99,116,
+111,102,102,115, 0,115,116,114,105,100,101,108,101,110, 0, 98,108,101,110,100,111,117,116, 0,115,116,114,105,100,101, 99,104,
+ 97,110,110,101,108, 91, 51, 50, 93, 0,111,102,102,115, 95, 98,111,110,101, 91, 51, 50, 93, 0,104, 97,115,105,110,112,117,116,
+ 0,104, 97,115,111,117,116,112,117,116, 0,100, 97,116, 97,116,121,112,101, 0,115,111, 99,107,101,116,116,121,112,101, 0, 42,
+110,101,119, 95,115,111, 99,107, 0,110,115, 0,108,105,109,105,116, 0,115,116, 97, 99,107, 95,105,110,100,101,120, 0,105,110,
+116,101,114,110, 0,115,116, 97, 99,107, 95,105,110,100,101,120, 95,101,120,116, 0,108,111, 99,120, 0,108,111, 99,121, 0,111,
+119,110, 95,105,110,100,101,120, 0,116,111, 95,105,110,100,101,120, 0, 42,116,111,115,111, 99,107, 0, 42,108,105,110,107, 0,
+ 42,110,101,119, 95,110,111,100,101, 0,117,115,101,114,110, 97,109,101, 91, 51, 50, 93, 0,108, 97,115,116,121, 0,111,117,116,
+112,117,116,115, 0, 42,115,116,111,114, 97,103,101, 0,109,105,110,105,119,105,100,116,104, 0, 99,117,115,116,111,109, 49, 0,
+ 99,117,115,116,111,109, 50, 0,110,101,101,100, 95,101,120,101, 99, 0,101,120,101, 99, 0,116,111,116,114, 0, 98,117,116,114,
+ 0,112,114,118,114, 0, 42,116,121,112,101,105,110,102,111, 0, 42,102,114,111,109,110,111,100,101, 0, 42,116,111,110,111,100,
+101, 0, 42,102,114,111,109,115,111, 99,107, 0,110,111,100,101,115, 0,108,105,110,107,115, 0, 42,115,116, 97, 99,107, 0, 42,
+116,104,114,101, 97,100,115,116, 97, 99,107, 0,105,110,105,116, 0,115,116, 97, 99,107,115,105,122,101, 0, 99,117,114, 95,105,
+110,100,101,120, 0, 97,108,108,116,121,112,101,115, 0, 42,111,119,110,116,121,112,101, 0, 42,115,101,108,105,110, 0, 42,115,
+101,108,111,117,116, 0, 40, 42,116,105,109,101, 99,117,114,115,111,114, 41, 40, 41, 0, 40, 42,115,116, 97,116,115, 95,100,114,
+ 97,119, 41, 40, 41, 0, 40, 42,116,101,115,116, 95, 98,114,101, 97,107, 41, 40, 41, 0, 99,121, 99,108,105, 99, 0,109,111,118,
+105,101, 0,115, 97,109,112,108,101,115, 0,109,105,110,115,112,101,101,100, 0,112,101,114, 99,101,110,116,120, 0,112,101,114,
+ 99,101,110,116,121, 0, 98,111,107,101,104, 0, 99,117,114,118,101,100, 0,105,109, 97,103,101, 95,105,110, 95,119,105,100,116,
+104, 0,105,109, 97,103,101, 95,105,110, 95,104,101,105,103,104,116, 0, 99,101,110,116,101,114, 95,120, 0, 99,101,110,116,101,
+114, 95,121, 0,115,112,105,110, 0,105,116,101,114, 0,119,114, 97,112, 0,115,105,103,109, 97, 95, 99,111,108,111,114, 0,115,
+105,103,109, 97, 95,115,112, 97, 99,101, 0,104,117,101, 0,115, 97,116, 0,116, 49, 0,116, 50, 0,116, 51, 0,102,115,116,114,
+101,110,103,116,104, 0,102, 97,108,112,104, 97, 0,107,101,121, 91, 52, 93, 0,120, 49, 0,120, 50, 0,121, 49, 0,121, 50, 0,
+ 99,111,108,110, 97,109,101, 91, 51, 50, 93, 0, 98,107,116,121,112,101, 0,114,111,116, 97,116,105,111,110, 0,112,114,101,118,
+105,101,119, 0,103, 97,109, 99,111, 0,110,111, 95,122, 98,117,102, 0,102,115,116,111,112, 0,109, 97,120, 98,108,117,114, 0,
+ 98,116,104,114,101,115,104, 0, 42,100,105, 99,116, 0, 42,110,111,100,101, 0, 97,110,103,108,101, 95,111,102,115, 0, 99,111,
+108,109,111,100, 0,109,105,120, 0,116,104,114,101,115,104,111,108,100, 0,102, 97,100,101, 0,109, 0, 99, 0,106,105,116, 0,
+112,114,111,106, 0,102,105,116, 0,115,104,111,114,116,121, 0,109,105,110,116, 97, 98,108,101, 0,109, 97,120,116, 97, 98,108,
+101, 0,101,120,116, 95,105,110, 91, 50, 93, 0,101,120,116, 95,111,117,116, 91, 50, 93, 0, 42, 99,117,114,118,101, 0, 42,116,
+ 97, 98,108,101, 0, 42,112,114,101,109,117,108,116, 97, 98,108,101, 0, 99,117,114,114, 0, 99,108,105,112,114, 0, 99,109, 91,
+ 52, 93, 0, 98,108, 97, 99,107, 91, 51, 93, 0,119,104,105,116,101, 91, 51, 93, 0, 98,119,109,117,108, 91, 51, 93, 0,115, 97,
+109,112,108,101, 91, 51, 93, 0,111,102,102,115,101,116, 91, 50, 93, 0,105,110,110,101,114,114, 97,100,105,117,115, 0,114, 97,
+116,101, 0,114,103, 98, 91, 51, 93, 0, 99,108,111,110,101, 0, 97, 99,116,105,118,101, 95,114,110,100, 0, 42,108, 97,121,101,
+114,115, 0,116,111,116,108, 97,121,101,114, 0,109, 97,120,108, 97,121,101,114, 0,116,111,116,115,105,122,101, 0, 42,112,111,
+111,108, 0,101,100,105,116,102,108, 97,103, 0,118,101,108, 91, 51, 93, 0,114,111,116, 91, 52, 93, 0, 97,118,101, 91, 51, 93,
+ 0,110,117,109, 0,112, 97,114,101,110,116, 0,112, 97, 91, 52, 93, 0,119, 91, 52, 93, 0,102,117,118, 91, 52, 93, 0,102,111,
+102,102,115,101,116, 0,114, 97,110,100, 91, 51, 93, 0, 42,115,116,105, 99,107, 95,111, 98, 0, 42,104, 97,105,114, 0,105, 95,
+114,111,116, 91, 52, 93, 0,114, 95,114,111,116, 91, 52, 93, 0,114, 95, 97,118,101, 91, 51, 93, 0,114, 95,118,101, 91, 51, 93,
+ 0,100,105,101,116,105,109,101, 0, 98, 97,110,107, 0,115,105,122,101,109,117,108, 0,110,117,109, 95,100,109, 99, 97, 99,104,
+101, 0, 98,112,105, 0, 97,108,105,118,101, 0,108,111,111,112, 0,100,105,115,116,114, 0,112,104,121,115,116,121,112,101, 0,
+114,111,116,109,111,100,101, 0, 97,118,101,109,111,100,101, 0,114,101, 97, 99,116,101,118,101,110,116, 0,100,114, 97,119, 0,
+100,114, 97,119, 95, 97,115, 0,100,114, 97,119, 95,115,105,122,101, 0, 99,104,105,108,100,116,121,112,101, 0,100,114, 97,119,
+ 95,115,116,101,112, 0,114,101,110, 95,115,116,101,112, 0,104, 97,105,114, 95,115,116,101,112, 0,107,101,121,115, 95,115,116,
+101,112, 0, 97,100, 97,112,116, 95, 97,110,103,108,101, 0, 97,100, 97,112,116, 95,112,105,120, 0,114,111,116,102,114,111,109,
+ 0,105,110,116,101,103,114, 97,116,111,114, 0,110, 98,101,116,119,101,101,110, 0, 98,111,105,100,110,101,105,103,104, 98,111,
+117,114,115, 0, 98, 98, 95, 97,108,105,103,110, 0, 98, 98, 95,117,118, 95,115,112,108,105,116, 0, 98, 98, 95, 97,110,105,109,
+ 0, 98, 98, 95,115,112,108,105,116, 95,111,102,102,115,101,116, 0, 98, 98, 95,116,105,108,116, 0, 98, 98, 95,114, 97,110,100,
+ 95,116,105,108,116, 0, 98, 98, 95,111,102,102,115,101,116, 91, 50, 93, 0,115,105,109,112,108,105,102,121, 95,102,108, 97,103,
+ 0,115,105,109,112,108,105,102,121, 95,114,101,102,115,105,122,101, 0,115,105,109,112,108,105,102,121, 95,114, 97,116,101, 0,
+115,105,109,112,108,105,102,121, 95,116,114, 97,110,115,105,116,105,111,110, 0,115,105,109,112,108,105,102,121, 95,118,105,101,
+119,112,111,114,116, 0,116,105,109,101,116,119,101, 97,107, 0,106,105,116,102, 97, 99, 0,107,101,121,101,100, 95,116,105,109,
+101, 0,101,102,102, 95,104, 97,105,114, 0,103,114,105,100, 95,114,101,115, 0,112, 97,114,116,102, 97, 99, 0,116, 97,110,102,
+ 97, 99, 0,116, 97,110,112,104, 97,115,101, 0,114,101, 97, 99,116,102, 97, 99, 0, 97,118,101,102, 97, 99, 0,112,104, 97,115,
+101,102, 97, 99, 0,114, 97,110,100,114,111,116,102, 97, 99, 0,114, 97,110,100,112,104, 97,115,101,102, 97, 99, 0,114, 97,110,
+100,115,105,122,101, 0,114,101, 97, 99,116,115,104, 97,112,101, 0, 97, 99, 99, 91, 51, 93, 0,100,114, 97,103,102, 97, 99, 0,
+ 98,114,111,119,110,102, 97, 99, 0,100, 97,109,112,102, 97, 99, 0, 97, 98,115,108,101,110,103,116,104, 0,114, 97,110,100,108,
+101,110,103,116,104, 0, 99,104,105,108,100, 95,110, 98,114, 0,114,101,110, 95, 99,104,105,108,100, 95,110, 98,114, 0,112, 97,
+114,101,110,116,115, 0, 99,104,105,108,100,115,105,122,101, 0, 99,104,105,108,100,114, 97,110,100,115,105,122,101, 0, 99,104,
+105,108,100,114, 97,100, 0, 99,104,105,108,100,102,108, 97,116, 0, 99,104,105,108,100,115,112,114,101, 97,100, 0, 99,108,117,
+109,112,102, 97, 99, 0, 99,108,117,109,112,112,111,119, 0,114,111,117,103,104, 49, 0,114,111,117,103,104, 49, 95,115,105,122,
+101, 0,114,111,117,103,104, 50, 0,114,111,117,103,104, 50, 95,115,105,122,101, 0,114,111,117,103,104, 50, 95,116,104,114,101,
+115, 0,114,111,117,103,104, 95,101,110,100, 0,114,111,117,103,104, 95,101,110,100, 95,115,104, 97,112,101, 0, 98,114, 97,110,
+ 99,104, 95,116,104,114,101,115, 0,100,114, 97,119, 95,108,105,110,101, 91, 50, 93, 0,109, 97,120, 95,118,101,108, 0,109, 97,
+120, 95,108, 97,116, 95, 97, 99, 99, 0,109, 97,120, 95,116, 97,110, 95, 97, 99, 99, 0, 97,118,101,114, 97,103,101, 95,118,101,
+108, 0, 98, 97,110,107,105,110,103, 0,109, 97,120, 95, 98, 97,110,107, 0,103,114,111,117,110,100,122, 0, 98,111,105,100,102,
+ 97, 99, 91, 56, 93, 0, 98,111,105,100,114,117,108,101, 91, 56, 93, 0, 42,101,102,102, 95,103,114,111,117,112, 0, 42,100,117,
+112, 95,111, 98, 0, 42, 98, 98, 95,111, 98, 0, 42,112,100, 50, 0, 42,112, 97,114,116, 0, 42,101,100,105,116, 0, 42, 42,112,
+ 97,116,104, 99, 97, 99,104,101, 0, 42, 42, 99,104,105,108,100, 99, 97, 99,104,101, 0,112, 97,116,104, 99, 97, 99,104,101, 98,
+117,102,115, 0, 99,104,105,108,100, 99, 97, 99,104,101, 98,117,102,115, 0, 42,116, 97,114,103,101,116, 95,111, 98, 0, 42,107,
+101,121,101,100, 95,111, 98, 0, 42,108, 97,116,116,105, 99,101, 0,101,102,102,101, 99,116,111,114,115, 0,114,101, 97, 99,116,
+101,118,101,110,116,115, 0,116,111,116, 99,104,105,108,100, 0,116,111,116, 99, 97, 99,104,101,100, 0,116,111,116, 99,104,105,
+108,100, 99, 97, 99,104,101, 0,116, 97,114,103,101,116, 95,112,115,121,115, 0,107,101,121,101,100, 95,112,115,121,115, 0,116,
+111,116,107,101,121,101,100, 0, 98, 97,107,101,115,112, 97, 99,101, 0, 98, 98, 95,117,118,110, 97,109,101, 91, 51, 93, 91, 51,
+ 50, 93, 0,118,103,114,111,117,112, 91, 49, 50, 93, 0,118,103, 95,110,101,103, 0,114,116, 51, 0, 42,114,101,110,100,101,114,
+100, 97,116, 97, 0, 42, 99, 97, 99,104,101, 0, 67,100,105,115, 0, 67,118,105, 0, 91, 51, 93, 0,115,116,114,117, 99,116,117,
+114, 97,108, 0, 98,101,110,100,105,110,103, 0,109, 97,120, 95, 98,101,110,100, 0,109, 97,120, 95,115,116,114,117, 99,116, 0,
+109, 97,120, 95,115,104,101, 97,114, 0, 97,118,103, 95,115,112,114,105,110,103, 95,108,101,110, 0,116,105,109,101,115, 99, 97,
+108,101, 0,101,102,102, 95,102,111,114, 99,101, 95,115, 99, 97,108,101, 0,101,102,102, 95,119,105,110,100, 95,115, 99, 97,108,
+101, 0,115,105,109, 95,116,105,109,101, 95,111,108,100, 0,115,116,101,112,115, 80,101,114, 70,114, 97,109,101, 0,112,114,101,
+114,111,108,108, 0,109, 97,120,115,112,114,105,110,103,108,101,110, 0,115,111,108,118,101,114, 95,116,121,112,101, 0,118,103,
+114,111,117,112, 95, 98,101,110,100, 0,118,103,114,111,117,112, 95,109, 97,115,115, 0,118,103,114,111,117,112, 95,115,116,114,
+117, 99,116, 0,112,114,101,115,101,116,115, 0, 42, 99,111,108,108,105,115,105,111,110, 95,108,105,115,116, 0,101,112,115,105,
+108,111,110, 0,115,101,108,102, 95,102,114,105, 99,116,105,111,110, 0,115,101,108,102,101,112,115,105,108,111,110, 0,115,101,
+108,102, 95,108,111,111,112, 95, 99,111,117,110,116, 0,108,111,111,112, 95, 99,111,117,110,116, 0,112,114,101,115,115,117,114,
+101, 0, 42,112,111,105,110,116,115, 0,116,111,116,112,111,105,110,116,115, 0,116,104,105, 99,107,110,101,115,115, 0,115,116,
+114,111,107,101,115, 0,102,114, 97,109,101,110,117,109, 0, 42, 97, 99,116,102,114, 97,109,101, 0,103,115,116,101,112, 0,105,
+110,102,111, 91, 49, 50, 56, 93, 0,115, 98,117,102,102,101,114, 95,115,105,122,101, 0,115, 98,117,102,102,101,114, 95,115,102,
+108, 97,103, 0, 42,115, 98,117,102,102,101,114, 0, 0, 0, 0, 84, 89, 80, 69, 0, 0, 1, 91, 99,104, 97,114, 0,117, 99,104,
97,114, 0,115,104,111,114,116, 0,117,115,104,111,114,116, 0,105,110,116, 0,108,111,110,103, 0,117,108,111,110,103, 0,102,
108,111, 97,116, 0,100,111,117, 98,108,101, 0,118,111,105,100, 0, 76,105,110,107, 0, 76,105,110,107, 68, 97,116, 97, 0, 76,
105,115,116, 66, 97,115,101, 0,118,101, 99, 50,115, 0,118,101, 99, 50,105, 0,118,101, 99, 50,102, 0,118,101, 99, 50,100, 0,
118,101, 99, 51,105, 0,118,101, 99, 51,102, 0,118,101, 99, 51,100, 0,118,101, 99, 52,105, 0,118,101, 99, 52,102, 0,118,101,
99, 52,100, 0,114, 99,116,105, 0,114, 99,116,102, 0, 73, 68, 80,114,111,112,101,114,116,121, 68, 97,116, 97, 0, 73, 68, 80,
114,111,112,101,114,116,121, 0, 73, 68, 0, 76,105, 98,114, 97,114,121, 0, 70,105,108,101, 68, 97,116, 97, 0, 80,114,101,118,
-105,101,119, 73,109, 97,103,101, 0, 73,112,111, 0, 75,101,121, 66,108,111, 99,107, 0, 75,101,121, 0, 83, 99,114,105,112,116,
- 76,105,110,107, 0, 84,101,120,116, 76,105,110,101, 0, 84,101,120,116, 0, 80, 97, 99,107,101,100, 70,105,108,101, 0, 67, 97,
-109,101,114, 97, 0, 79, 98,106,101, 99,116, 0, 73,109, 97,103,101, 85,115,101,114, 0, 73,109, 97,103,101, 0, 97,110,105,109,
- 0, 82,101,110,100,101,114, 82,101,115,117,108,116, 0, 77, 84,101,120, 0, 84,101,120, 0, 80,108,117,103,105,110, 84,101,120,
- 0, 67, 66, 68, 97,116, 97, 0, 67,111,108,111,114, 66, 97,110,100, 0, 69,110,118, 77, 97,112, 0, 73,109, 66,117,102, 0, 84,
-101,120, 77, 97,112,112,105,110,103, 0, 76, 97,109,112, 0, 67,117,114,118,101, 77, 97,112,112,105,110,103, 0, 87, 97,118,101,
- 0, 77, 97,116,101,114,105, 97,108, 0, 98, 78,111,100,101, 84,114,101,101, 0, 71,114,111,117,112, 0, 86, 70,111,110,116, 0,
- 86, 70,111,110,116, 68, 97,116, 97, 0, 77,101,116, 97, 69,108,101,109, 0, 66,111,117,110,100, 66,111,120, 0, 77,101,116, 97,
- 66, 97,108,108, 0, 66,101,122, 84,114,105,112,108,101, 0, 66, 80,111,105,110,116, 0, 78,117,114, 98, 0, 67,104, 97,114, 73,
-110,102,111, 0, 84,101,120,116, 66,111,120, 0, 67,117,114,118,101, 0, 80, 97,116,104, 0, 73,112,111, 68,114,105,118,101,114,
- 0, 73,112,111, 67,117,114,118,101, 0, 77,101,115,104, 0, 77, 70, 97, 99,101, 0, 77, 84, 70, 97, 99,101, 0, 84, 70, 97, 99,
-101, 0, 77, 86,101,114,116, 0, 77, 69,100,103,101, 0, 77, 68,101,102,111,114,109, 86,101,114,116, 0, 77, 67,111,108, 0, 77,
- 83,116,105, 99,107,121, 0, 77, 83,101,108,101, 99,116, 0, 67,117,115,116,111,109, 68, 97,116, 97, 0, 77,117,108,116,105,114,
-101,115, 0, 80, 97,114,116,105, 97,108, 86,105,115,105, 98,105,108,105,116,121, 0, 77, 68,101,102,111,114,109, 87,101,105,103,
-104,116, 0, 77, 70,108,111, 97,116, 80,114,111,112,101,114,116,121, 0, 77, 73,110,116, 80,114,111,112,101,114,116,121, 0, 77,
- 83,116,114,105,110,103, 80,114,111,112,101,114,116,121, 0, 79,114,105,103, 83,112, 97, 99,101, 70, 97, 99,101, 0, 77,117,108,
-116,105,114,101,115, 67,111,108, 0, 77,117,108,116,105,114,101,115, 67,111,108, 70, 97, 99,101, 0, 77,117,108,116,105,114,101,
-115, 70, 97, 99,101, 0, 77,117,108,116,105,114,101,115, 69,100,103,101, 0, 77,117,108,116,105,114,101,115, 76,101,118,101,108,
- 0, 77,117,108,116,105,114,101,115, 77, 97,112, 78,111,100,101, 0, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 83,117,
- 98,115,117,114,102, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 76, 97,116,116,105, 99,101, 77,111,100,105,102,105,101,
-114, 68, 97,116, 97, 0, 67,117,114,118,101, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 66,117,105,108,100, 77,111,100,
-105,102,105,101,114, 68, 97,116, 97, 0, 65,114,114, 97,121, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 77,105,114,114,
-111,114, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 69,100,103,101, 83,112,108,105,116, 77,111,100,105,102,105,101,114,
- 68, 97,116, 97, 0, 68,105,115,112,108, 97, 99,101, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 85, 86, 80,114,111,106,
-101, 99,116, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 68,101, 99,105,109, 97,116,101, 77,111,100,105,102,105,101,114,
- 68, 97,116, 97, 0, 83,109,111,111,116,104, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 67, 97,115,116, 77,111,100,105,
-102,105,101,114, 68, 97,116, 97, 0, 87, 97,118,101, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 65,114,109, 97,116,117,
-114,101, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 72,111,111,107, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0,
- 83,111,102,116, 98,111,100,121, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 67,108,111,116,104, 77,111,100,105,102,105,
-101,114, 68, 97,116, 97, 0, 67,108,111,116,104, 0, 83,105,109,117,108, 97,116,105,111,110, 83,101,116,116,105,110,103,115, 0,
- 67,111,108,108,105,115,105,111,110, 83,101,116,116,105,110,103,115, 0, 67,111,108,108,105,115,105,111,110, 77,111,100,105,102,
-105,101,114, 68, 97,116, 97, 0, 66, 86, 72, 0, 66,111,111,108,101, 97,110, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0,
- 77, 68,101,102, 73,110,102,108,117,101,110, 99,101, 0, 77, 68,101,102, 67,101,108,108, 0, 77,101,115,104, 68,101,102,111,114,
-109, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 80, 97,114,116,105, 99,108,101, 83,121,115,116,101,109, 77,111,100,105,
-102,105,101,114, 68, 97,116, 97, 0, 80, 97,114,116,105, 99,108,101, 83,121,115,116,101,109, 0, 68,101,114,105,118,101,100, 77,
-101,115,104, 0, 80, 97,114,116,105, 99,108,101, 73,110,115,116, 97,110, 99,101, 77,111,100,105,102,105,101,114, 68, 97,116, 97,
- 0, 69,120,112,108,111,100,101, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 76, 97,116,116,105, 99,101, 0, 98, 68,101,
-102,111,114,109, 71,114,111,117,112, 0, 98, 65, 99,116,105,111,110, 0, 98, 80,111,115,101, 0, 80, 97,114,116, 68,101,102,108,
-101, 99,116, 0, 83,111,102,116, 66,111,100,121, 0, 70,108,117,105,100,115,105,109, 83,101,116,116,105,110,103,115, 0, 79, 98,
- 72,111,111,107, 0, 83, 66, 86,101,114,116,101,120, 0, 66,111,100,121, 80,111,105,110,116, 0, 66,111,100,121, 83,112,114,105,
-110,103, 0, 83, 66, 83, 99,114, 97,116, 99,104, 0, 87,111,114,108,100, 0, 82, 97,100,105,111, 0, 66, 97,115,101, 0, 65,118,
-105, 67,111,100,101, 99, 68, 97,116, 97, 0, 81,117,105, 99,107,116,105,109,101, 67,111,100,101, 99, 68, 97,116, 97, 0, 70, 70,
- 77,112,101,103, 67,111,100,101, 99, 68, 97,116, 97, 0, 65,117,100,105,111, 68, 97,116, 97, 0, 83, 99,101,110,101, 82,101,110,
-100,101,114, 76, 97,121,101,114, 0, 82,101,110,100,101,114, 68, 97,116, 97, 0, 71, 97,109,101, 70,114, 97,109,105,110,103, 0,
- 84,105,109,101, 77, 97,114,107,101,114, 0, 73,109, 97,103,101, 80, 97,105,110,116, 83,101,116,116,105,110,103,115, 0, 66,114,
-117,115,104, 0, 80, 97,114,116,105, 99,108,101, 66,114,117,115,104, 68, 97,116, 97, 0, 80, 97,114,116,105, 99,108,101, 69,100,
-105,116, 83,101,116,116,105,110,103,115, 0, 84,114, 97,110,115,102,111,114,109, 79,114,105,101,110,116, 97,116,105,111,110, 0,
- 84,111,111,108, 83,101,116,116,105,110,103,115, 0, 66,114,117,115,104, 68, 97,116, 97, 0, 83, 99,117,108,112,116, 68, 97,116,
- 97, 0, 83, 99,117,108,112,116, 83,101,115,115,105,111,110, 0, 83, 99,101,110,101, 0, 68, 97,103, 70,111,114,101,115,116, 0,
- 66, 71,112,105, 99, 0, 86,105,101,119, 51, 68, 0, 83,112, 97, 99,101, 76,105,110,107, 0, 83, 99,114, 65,114,101, 97, 0, 82,
-101,110,100,101,114, 73,110,102,111, 0, 82,101,116,111,112,111, 86,105,101,119, 68, 97,116, 97, 0, 86,105,101,119, 68,101,112,
-116,104,115, 0, 86,105,101,119, 50, 68, 0, 83,112, 97, 99,101, 73,110,102,111, 0, 83,112, 97, 99,101, 73,112,111, 0, 83,112,
- 97, 99,101, 66,117,116,115, 0, 83,112, 97, 99,101, 83,101,113, 0, 83,112, 97, 99,101, 70,105,108,101, 0,100,105,114,101,110,
-116,114,121, 0, 66,108,101,110,100, 72, 97,110,100,108,101, 0, 83,112, 97, 99,101, 79,111,112,115, 0, 84,114,101,101, 83,116,
-111,114,101, 0, 84,114,101,101, 83,116,111,114,101, 69,108,101,109, 0, 83,112, 97, 99,101, 73,109, 97,103,101, 0, 83,112, 97,
- 99,101, 78,108, 97, 0, 83,112, 97, 99,101, 84,101,120,116, 0, 83,112, 97, 99,101, 83, 99,114,105,112,116, 0, 83, 99,114,105,
-112,116, 0, 83,112, 97, 99,101, 84,105,109,101, 0, 83,112, 97, 99,101, 78,111,100,101, 0, 83,112, 97, 99,101, 73,109, 97, 83,
-101,108, 0, 70,105,108,101, 76,105,115,116, 0, 84,104,101,109,101, 85, 73, 0, 84,104,101,109,101, 83,112, 97, 99,101, 0, 84,
-104,101,109,101, 87,105,114,101, 67,111,108,111,114, 0, 98, 84,104,101,109,101, 0, 83,111,108,105,100, 76,105,103,104,116, 0,
- 85,115,101,114, 68,101,102, 0, 98, 83, 99,114,101,101,110, 0, 83, 99,114, 86,101,114,116, 0, 83, 99,114, 69,100,103,101, 0,
- 80, 97,110,101,108, 0, 70,105,108,101, 71,108,111, 98, 97,108, 0, 83,116,114,105,112, 69,108,101,109, 0, 84, 83,116,114,105,
-112, 69,108,101,109, 0, 83,116,114,105,112, 67,114,111,112, 0, 83,116,114,105,112, 84,114, 97,110,115,102,111,114,109, 0, 83,
-116,114,105,112, 67,111,108,111,114, 66, 97,108, 97,110, 99,101, 0, 83,116,114,105,112, 80,114,111,120,121, 0, 83,116,114,105,
-112, 0, 80,108,117,103,105,110, 83,101,113, 0, 83,101,113,117,101,110, 99,101, 0, 98, 83,111,117,110,100, 0,104,100, 97,117,
-100,105,111, 0, 77,101,116, 97, 83,116, 97, 99,107, 0, 69,100,105,116,105,110,103, 0, 87,105,112,101, 86, 97,114,115, 0, 71,
-108,111,119, 86, 97,114,115, 0, 84,114, 97,110,115,102,111,114,109, 86, 97,114,115, 0, 83,111,108,105,100, 67,111,108,111,114,
- 86, 97,114,115, 0, 83,112,101,101,100, 67,111,110,116,114,111,108, 86, 97,114,115, 0, 69,102,102,101, 99,116, 0, 66,117,105,
-108,100, 69,102,102, 0, 80, 97,114,116, 69,102,102, 0, 80, 97,114,116,105, 99,108,101, 0, 87, 97,118,101, 69,102,102, 0, 79,
-111,112,115, 0, 98, 80,114,111,112,101,114,116,121, 0, 98, 78,101, 97,114, 83,101,110,115,111,114, 0, 98, 77,111,117,115,101,
- 83,101,110,115,111,114, 0, 98, 84,111,117, 99,104, 83,101,110,115,111,114, 0, 98, 75,101,121, 98,111, 97,114,100, 83,101,110,
-115,111,114, 0, 98, 80,114,111,112,101,114,116,121, 83,101,110,115,111,114, 0, 98, 67,111,108,108,105,115,105,111,110, 83,101,
-110,115,111,114, 0, 98, 82, 97,100, 97,114, 83,101,110,115,111,114, 0, 98, 82, 97,110,100,111,109, 83,101,110,115,111,114, 0,
- 98, 82, 97,121, 83,101,110,115,111,114, 0, 98, 77,101,115,115, 97,103,101, 83,101,110,115,111,114, 0, 98, 83,101,110,115,111,
-114, 0, 98, 67,111,110,116,114,111,108,108,101,114, 0, 98, 74,111,121,115,116,105, 99,107, 83,101,110,115,111,114, 0, 98, 69,
-120,112,114,101,115,115,105,111,110, 67,111,110,116, 0, 98, 80,121,116,104,111,110, 67,111,110,116, 0, 98, 65, 99,116,117, 97,
-116,111,114, 0, 98, 65,100,100, 79, 98,106,101, 99,116, 65, 99,116,117, 97,116,111,114, 0, 98, 65, 99,116,105,111,110, 65, 99,
-116,117, 97,116,111,114, 0, 98, 83,111,117,110,100, 65, 99,116,117, 97,116,111,114, 0, 98, 67, 68, 65, 99,116,117, 97,116,111,
-114, 0, 98, 69,100,105,116, 79, 98,106,101, 99,116, 65, 99,116,117, 97,116,111,114, 0, 98, 83, 99,101,110,101, 65, 99,116,117,
- 97,116,111,114, 0, 98, 80,114,111,112,101,114,116,121, 65, 99,116,117, 97,116,111,114, 0, 98, 79, 98,106,101, 99,116, 65, 99,
-116,117, 97,116,111,114, 0, 98, 73,112,111, 65, 99,116,117, 97,116,111,114, 0, 98, 67, 97,109,101,114, 97, 65, 99,116,117, 97,
-116,111,114, 0, 98, 67,111,110,115,116,114, 97,105,110,116, 65, 99,116,117, 97,116,111,114, 0, 98, 71,114,111,117,112, 65, 99,
-116,117, 97,116,111,114, 0, 98, 82, 97,110,100,111,109, 65, 99,116,117, 97,116,111,114, 0, 98, 77,101,115,115, 97,103,101, 65,
- 99,116,117, 97,116,111,114, 0, 98, 71, 97,109,101, 65, 99,116,117, 97,116,111,114, 0, 98, 86,105,115,105, 98,105,108,105,116,
-121, 65, 99,116,117, 97,116,111,114, 0, 98, 84,119,111, 68, 70,105,108,116,101,114, 65, 99,116,117, 97,116,111,114, 0, 70,114,
-101,101, 67, 97,109,101,114, 97, 0, 98, 83, 97,109,112,108,101, 0, 98, 83,111,117,110,100, 76,105,115,116,101,110,101,114, 0,
- 83,112, 97, 99,101, 83,111,117,110,100, 0, 71,114,111,117,112, 79, 98,106,101, 99,116, 0, 66,111,110,101, 0, 98, 65,114,109,
- 97,116,117,114,101, 0, 98, 80,111,115,101, 67,104, 97,110,110,101,108, 0, 98, 65, 99,116,105,111,110, 71,114,111,117,112, 0,
- 98, 65, 99,116,105,111,110, 67,104, 97,110,110,101,108, 0, 83,112, 97, 99,101, 65, 99,116,105,111,110, 0, 98, 67,111,110,115,
-116,114, 97,105,110,116, 67,104, 97,110,110,101,108, 0, 98, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 67,111,110,115,116,
-114, 97,105,110,116, 84, 97,114,103,101,116, 0, 98, 80,121,116,104,111,110, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 75,
-105,110,101,109, 97,116,105, 99, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 84,114, 97, 99,107, 84,111, 67,111,110,115,116,
-114, 97,105,110,116, 0, 98, 82,111,116, 97,116,101, 76,105,107,101, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 76,111, 99,
- 97,116,101, 76,105,107,101, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 77,105,110, 77, 97,120, 67,111,110,115,116,114, 97,
-105,110,116, 0, 98, 83,105,122,101, 76,105,107,101, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 65, 99,116,105,111,110, 67,
-111,110,115,116,114, 97,105,110,116, 0, 98, 76,111, 99,107, 84,114, 97, 99,107, 67,111,110,115,116,114, 97,105,110,116, 0, 98,
- 70,111,108,108,111,119, 80, 97,116,104, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 83,116,114,101,116, 99,104, 84,111, 67,
-111,110,115,116,114, 97,105,110,116, 0, 98, 82,105,103,105,100, 66,111,100,121, 74,111,105,110,116, 67,111,110,115,116,114, 97,
-105,110,116, 0, 98, 67,108, 97,109,112, 84,111, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 67,104,105,108,100, 79,102, 67,
-111,110,115,116,114, 97,105,110,116, 0, 98, 84,114, 97,110,115,102,111,114,109, 67,111,110,115,116,114, 97,105,110,116, 0, 98,
- 76,111, 99, 76,105,109,105,116, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 82,111,116, 76,105,109,105,116, 67,111,110,115,
-116,114, 97,105,110,116, 0, 98, 83,105,122,101, 76,105,109,105,116, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 68,105,115,
-116, 76,105,109,105,116, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 65, 99,116,105,111,110, 77,111,100,105,102,105,101,114,
- 0, 98, 65, 99,116,105,111,110, 83,116,114,105,112, 0, 98, 78,111,100,101, 83,116, 97, 99,107, 0, 98, 78,111,100,101, 83,111,
- 99,107,101,116, 0, 98, 78,111,100,101, 76,105,110,107, 0, 98, 78,111,100,101, 0, 98, 78,111,100,101, 80,114,101,118,105,101,
-119, 0, 98, 78,111,100,101, 84,121,112,101, 0, 78,111,100,101, 73,109, 97,103,101, 65,110,105,109, 0, 78,111,100,101, 66,108,
-117,114, 68, 97,116, 97, 0, 78,111,100,101, 68, 66,108,117,114, 68, 97,116, 97, 0, 78,111,100,101, 66,105,108, 97,116,101,114,
- 97,108, 66,108,117,114, 68, 97,116, 97, 0, 78,111,100,101, 72,117,101, 83, 97,116, 0, 78,111,100,101, 73,109, 97,103,101, 70,
-105,108,101, 0, 78,111,100,101, 67,104,114,111,109, 97, 0, 78,111,100,101, 84,119,111, 88, 89,115, 0, 78,111,100,101, 84,119,
-111, 70,108,111, 97,116,115, 0, 78,111,100,101, 71,101,111,109,101,116,114,121, 0, 78,111,100,101, 86,101,114,116,101,120, 67,
-111,108, 0, 78,111,100,101, 68,101,102,111, 99,117,115, 0, 78,111,100,101, 83, 99,114,105,112,116, 68,105, 99,116, 0, 78,111,
-100,101, 71,108, 97,114,101, 0, 78,111,100,101, 84,111,110,101,109, 97,112, 0, 78,111,100,101, 76,101,110,115, 68,105,115,116,
- 0, 67,117,114,118,101, 77, 97,112, 80,111,105,110,116, 0, 67,117,114,118,101, 77, 97,112, 0, 66,114,117,115,104, 67,108,111,
-110,101, 0, 67,117,115,116,111,109, 68, 97,116, 97, 76, 97,121,101,114, 0, 72, 97,105,114, 75,101,121, 0, 80, 97,114,116,105,
- 99,108,101, 75,101,121, 0, 67,104,105,108,100, 80, 97,114,116,105, 99,108,101, 0, 80, 97,114,116,105, 99,108,101, 68, 97,116,
- 97, 0, 80, 97,114,116,105, 99,108,101, 83,101,116,116,105,110,103,115, 0, 80, 97,114,116,105, 99,108,101, 69,100,105,116, 0,
- 80, 97,114,116,105, 99,108,101, 67, 97, 99,104,101, 75,101,121, 0, 76,105,110,107, 78,111,100,101, 0, 67,108,111,116,104, 86,
-101,114,116,101,120, 0, 73,109,112,108,105, 99,105,116, 95, 68, 97,116, 97, 0, 69,100,103,101, 72, 97,115,104, 0, 0, 0, 0,
- 84, 76, 69, 78, 1, 0, 1, 0, 2, 0, 2, 0, 4, 0, 4, 0, 4, 0, 4, 0, 8, 0, 0, 0, 8, 0, 12, 0, 8, 0, 4, 0,
- 8, 0, 8, 0, 16, 0, 12, 0, 12, 0, 24, 0, 16, 0, 16, 0, 32, 0, 16, 0, 16, 0, 20, 0, 76, 0, 52, 0, 40, 2, 0, 0,
- 32, 0, 84, 0,112, 0,120, 0, 16, 0, 24, 0,104, 0, 20, 0,132, 0, 80, 3, 32, 0,124, 1, 0, 0, 0, 0,136, 0, 4, 1,
- 84, 1, 24, 0, 8, 3,168, 0, 0, 0,132, 0, 24, 1, 8, 1, 56, 0, 68, 2,120, 0, 68, 0, 68, 1, 0, 0,108, 0,104, 0,
-136, 0, 56, 0, 36, 0, 56, 0, 8, 0, 16, 0, 56, 1, 0, 0,140, 0, 92, 0, 12, 1, 20, 0, 44, 0, 60, 0, 20, 0, 12, 0,
- 12, 0, 4, 0, 8, 0, 8, 0, 20, 0, 68, 0, 32, 0, 8, 0, 4, 0, 4, 0, 0, 1, 32, 0, 16, 0, 64, 0, 24, 0, 12, 0,
- 56, 0, 0, 0, 52, 0, 68, 0, 88, 0, 96, 0, 68, 0,116, 0, 64, 0, 60, 0,148, 0,152, 0, 60, 0, 92, 0,104, 0,176, 0,
-100, 0,180, 0, 52, 0, 64, 0, 44, 0,164, 0, 28, 0,100, 0, 0, 0, 64, 0, 8, 0, 8, 0,216, 0, 76, 0, 44, 1, 0, 0,
- 64, 0, 64, 0,116, 0, 40, 0, 84, 0, 56, 0,116, 0,148, 0,132, 1,208, 0, 16, 0, 0, 0, 0, 0, 0, 0, 68, 1, 40, 0,
- 28, 0,176, 0,144, 0, 48, 0, 16, 0, 72, 0,152, 3, 16, 0, 80, 0, 12, 0,152, 0, 16, 0,128, 0, 80, 0,244, 0, 8, 0,
-128, 0, 0, 0, 20, 5, 0, 0, 60, 0, 0, 3, 36, 0,204, 0, 0, 0, 0, 0, 0, 0,136, 0, 36, 0, 88, 1,220, 0,196, 0,
-120, 1, 0, 0, 0, 0,208, 1, 12, 0, 12, 0, 16, 1,180, 0,120, 0, 36, 0, 0, 0,164, 0,200, 0, 52, 2, 0, 0,152, 0,
-192, 0, 16, 0, 72, 13, 56, 0, 8, 12,120, 0, 20, 0, 24, 0,228, 0, 32, 0, 80, 0, 28, 0, 16, 0, 8, 0, 52, 0,160, 0,
-232, 0,168, 1,204, 0, 28, 1, 0, 0, 16, 0, 28, 0, 12, 0, 24, 0, 48, 0, 16, 0, 20, 0, 16, 0, 24, 0, 56, 1, 0, 0,
- 56, 0, 44, 0, 64, 0, 48, 0, 8, 0, 44, 0, 72, 0,104, 0, 72, 0, 44, 0, 40, 0,108, 0, 68, 0, 76, 0, 80, 0, 64, 0,
-128, 0, 4, 0, 60, 0, 12, 0, 60, 0, 28, 0, 20, 0, 64, 0, 16, 0, 76, 0,104, 0, 52, 0, 28, 0, 56, 0, 60, 0, 56, 0,
-108, 0,140, 0, 4, 0, 20, 0, 40, 0, 0, 0, 68, 0,176, 0, 24, 0, 4, 1,116, 0,152, 1, 56, 0, 64, 0,192, 0, 44, 0,
- 64, 0,116, 0, 60, 0,104, 0, 52, 0, 44, 0, 44, 0, 68, 0, 44, 0, 64, 0, 44, 0, 20, 0, 52, 0, 96, 0, 12, 0,108, 0,
- 92, 0, 28, 0, 28, 0, 28, 0, 52, 0, 60, 0,140, 0, 36, 0,116, 0, 24, 0,196, 0, 0, 0, 0, 0, 16, 0, 40, 0, 28, 0,
- 12, 0, 12, 0, 16, 1, 40, 0, 8, 0, 8, 0, 64, 0, 32, 0, 24, 0, 8, 0, 24, 0, 32, 0, 8, 0, 12, 0, 44, 0, 20, 0,
- 60, 0, 24, 0, 56, 0, 72, 0,196, 0,220, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 84, 82, 67, 32, 1, 0, 0,
- 10, 0, 2, 0, 10, 0, 0, 0, 10, 0, 1, 0, 11, 0, 3, 0, 11, 0, 0, 0, 11, 0, 1, 0, 9, 0, 2, 0, 12, 0, 2, 0,
- 9, 0, 3, 0, 9, 0, 4, 0, 13, 0, 2, 0, 2, 0, 5, 0, 2, 0, 6, 0, 14, 0, 2, 0, 4, 0, 5, 0, 4, 0, 6, 0,
- 15, 0, 2, 0, 7, 0, 5, 0, 7, 0, 6, 0, 16, 0, 2, 0, 8, 0, 5, 0, 8, 0, 6, 0, 17, 0, 3, 0, 4, 0, 5, 0,
- 4, 0, 6, 0, 4, 0, 7, 0, 18, 0, 3, 0, 7, 0, 5, 0, 7, 0, 6, 0, 7, 0, 7, 0, 19, 0, 3, 0, 8, 0, 5, 0,
- 8, 0, 6, 0, 8, 0, 7, 0, 20, 0, 4, 0, 4, 0, 5, 0, 4, 0, 6, 0, 4, 0, 7, 0, 4, 0, 8, 0, 21, 0, 4, 0,
- 7, 0, 5, 0, 7, 0, 6, 0, 7, 0, 7, 0, 7, 0, 8, 0, 22, 0, 4, 0, 8, 0, 5, 0, 8, 0, 6, 0, 8, 0, 7, 0,
- 8, 0, 8, 0, 23, 0, 4, 0, 4, 0, 9, 0, 4, 0, 10, 0, 4, 0, 11, 0, 4, 0, 12, 0, 24, 0, 4, 0, 7, 0, 9, 0,
- 7, 0, 10, 0, 7, 0, 11, 0, 7, 0, 12, 0, 25, 0, 4, 0, 9, 0, 13, 0, 12, 0, 14, 0, 4, 0, 15, 0, 4, 0, 16, 0,
- 26, 0, 10, 0, 26, 0, 0, 0, 26, 0, 1, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0, 19, 0, 2, 0, 20, 0, 4, 0, 21, 0,
- 25, 0, 22, 0, 4, 0, 23, 0, 4, 0, 24, 0, 27, 0, 9, 0, 9, 0, 0, 0, 9, 0, 1, 0, 27, 0, 25, 0, 28, 0, 26, 0,
- 0, 0, 27, 0, 2, 0, 28, 0, 2, 0, 20, 0, 4, 0, 29, 0, 26, 0, 30, 0, 28, 0, 8, 0, 27, 0, 31, 0, 27, 0, 32, 0,
- 29, 0, 33, 0, 0, 0, 34, 0, 0, 0, 35, 0, 4, 0, 36, 0, 4, 0, 16, 0, 28, 0, 37, 0, 30, 0, 6, 0, 4, 0, 38, 0,
- 4, 0, 39, 0, 2, 0, 40, 0, 2, 0, 41, 0, 2, 0, 42, 0, 4, 0, 43, 0, 31, 0, 7, 0, 27, 0, 31, 0, 12, 0, 44, 0,
- 24, 0, 45, 0, 2, 0, 46, 0, 2, 0, 47, 0, 2, 0, 48, 0, 2, 0, 16, 0, 32, 0, 16, 0, 32, 0, 0, 0, 32, 0, 1, 0,
- 7, 0, 49, 0, 7, 0, 50, 0, 2, 0, 18, 0, 2, 0, 51, 0, 2, 0, 52, 0, 2, 0, 20, 0, 4, 0, 53, 0, 4, 0, 54, 0,
- 9, 0, 2, 0, 7, 0, 55, 0, 0, 0, 17, 0, 0, 0, 56, 0, 7, 0, 57, 0, 7, 0, 58, 0, 33, 0, 12, 0, 27, 0, 31, 0,
- 32, 0, 59, 0, 0, 0, 60, 0, 4, 0, 61, 0, 7, 0, 50, 0, 12, 0, 62, 0, 31, 0, 63, 0, 27, 0, 64, 0, 2, 0, 18, 0,
- 2, 0, 65, 0, 2, 0, 66, 0, 2, 0, 20, 0, 34, 0, 5, 0, 27, 0, 67, 0, 2, 0, 68, 0, 2, 0, 69, 0, 2, 0, 70, 0,
- 4, 0, 16, 0, 35, 0, 6, 0, 35, 0, 0, 0, 35, 0, 1, 0, 0, 0, 71, 0, 0, 0, 72, 0, 4, 0, 23, 0, 4, 0, 73, 0,
- 36, 0, 13, 0, 27, 0, 31, 0, 0, 0, 74, 0, 4, 0, 75, 0, 4, 0, 76, 0, 12, 0, 77, 0, 35, 0, 78, 0, 35, 0, 79, 0,
- 4, 0, 80, 0, 4, 0, 81, 0, 0, 0, 82, 0, 4, 0, 83, 0, 4, 0, 84, 0, 9, 0, 85, 0, 37, 0, 5, 0, 4, 0, 86, 0,
- 4, 0, 87, 0, 4, 0, 75, 0, 4, 0, 16, 0, 9, 0, 2, 0, 38, 0, 20, 0, 27, 0, 31, 0, 2, 0, 18, 0, 2, 0, 20, 0,
- 7, 0, 88, 0, 7, 0, 89, 0, 7, 0, 90, 0, 7, 0, 91, 0, 7, 0, 92, 0, 7, 0, 93, 0, 7, 0, 94, 0, 7, 0, 95, 0,
- 7, 0, 96, 0, 7, 0, 97, 0, 7, 0, 98, 0, 2, 0, 99, 0, 2, 0,100, 0, 7, 0,101, 0, 31, 0, 63, 0, 34, 0,102, 0,
- 39, 0,103, 0, 40, 0, 12, 0, 4, 0,104, 0, 4, 0,105, 0, 4, 0,106, 0, 4, 0,107, 0, 2, 0,108, 0, 2, 0,109, 0,
- 2, 0, 20, 0, 2, 0,110, 0, 2, 0,111, 0, 2, 0,112, 0, 2, 0,113, 0, 2, 0,114, 0, 41, 0, 31, 0, 27, 0, 31, 0,
- 0, 0, 34, 0, 12, 0,115, 0, 42, 0,116, 0, 43, 0,117, 0, 2, 0,110, 0, 2, 0, 20, 0, 2, 0,118, 0, 2, 0, 18, 0,
- 2, 0, 16, 0, 2, 0, 42, 0, 4, 0,119, 0, 2, 0,120, 0, 2, 0,121, 0, 2, 0,122, 0, 2, 0,123, 0, 2, 0,124, 0,
- 2, 0,125, 0, 4, 0,126, 0, 4, 0,127, 0, 37, 0,128, 0, 30, 0,129, 0, 7, 0,130, 0, 4, 0,131, 0, 2, 0,132, 0,
- 2, 0,133, 0, 2, 0,134, 0, 2, 0,135, 0, 7, 0,136, 0, 7, 0,137, 0, 9, 0,138, 0, 44, 0, 30, 0, 2, 0,139, 0,
- 2, 0,140, 0, 2, 0,141, 0, 2, 0,142, 0, 39, 0,143, 0, 45, 0,144, 0, 0, 0,145, 0, 0, 0,146, 0, 0, 0,147, 0,
- 0, 0,148, 0, 0, 0,149, 0, 7, 0,150, 0, 7, 0,151, 0, 2, 0,152, 0, 2, 0,153, 0, 2, 0,154, 0, 2, 0,155, 0,
- 2, 0,156, 0, 2, 0,157, 0, 7, 0,158, 0, 7, 0,159, 0, 7, 0,160, 0, 7, 0,161, 0, 7, 0,162, 0, 7, 0,163, 0,
- 7, 0,164, 0, 7, 0,165, 0, 7, 0,166, 0, 7, 0,167, 0, 7, 0,168, 0, 46, 0, 15, 0, 0, 0,169, 0, 9, 0,170, 0,
- 0, 0,171, 0, 0, 0,172, 0, 4, 0,173, 0, 4, 0,174, 0, 9, 0,175, 0, 7, 0,176, 0, 7, 0,177, 0, 7, 0,178, 0,
- 4, 0,179, 0, 9, 0,180, 0, 9, 0,181, 0, 4, 0,182, 0, 4, 0, 16, 0, 47, 0, 6, 0, 7, 0,158, 0, 7, 0,159, 0,
- 7, 0,160, 0, 7, 0,183, 0, 7, 0, 49, 0, 4, 0, 45, 0, 48, 0, 5, 0, 2, 0, 20, 0, 2, 0, 36, 0, 2, 0, 45, 0,
- 2, 0,184, 0, 47, 0,178, 0, 49, 0, 17, 0, 39, 0,143, 0, 41, 0,185, 0, 50, 0,186, 0, 7, 0,187, 0, 7, 0,188, 0,
- 2, 0, 18, 0, 2, 0,189, 0, 7, 0, 90, 0, 7, 0, 91, 0, 7, 0,190, 0, 4, 0,191, 0, 2, 0,192, 0, 2, 0,193, 0,
- 4, 0,110, 0, 4, 0,119, 0, 2, 0,194, 0, 2, 0,195, 0, 45, 0, 53, 0, 27, 0, 31, 0, 7, 0,196, 0, 7, 0,197, 0,
- 7, 0,198, 0, 7, 0,199, 0, 7, 0,200, 0, 7, 0,201, 0, 7, 0,202, 0, 7, 0,203, 0, 7, 0,204, 0, 7, 0,205, 0,
- 7, 0,206, 0, 7, 0,207, 0, 7, 0,208, 0, 7, 0,209, 0, 7, 0,210, 0, 7, 0,211, 0, 7, 0,212, 0, 7, 0,213, 0,
- 7, 0,214, 0, 7, 0,215, 0, 2, 0,216, 0, 2, 0,217, 0, 2, 0,218, 0, 2, 0,219, 0, 2, 0,220, 0, 2, 0,221, 0,
- 2, 0,222, 0, 2, 0, 20, 0, 2, 0, 18, 0, 2, 0,189, 0, 7, 0,223, 0, 7, 0,224, 0, 7, 0,225, 0, 7, 0,226, 0,
- 2, 0,227, 0, 2, 0,228, 0, 2, 0,229, 0, 2, 0,108, 0, 4, 0, 23, 0, 4, 0,105, 0, 4, 0,106, 0, 4, 0,107, 0,
- 7, 0,230, 0, 7, 0,231, 0, 7, 0,165, 0, 40, 0,232, 0, 31, 0, 63, 0, 41, 0,185, 0, 46, 0,233, 0, 48, 0,234, 0,
- 49, 0,235, 0, 30, 0,129, 0, 51, 0, 8, 0, 7, 0,236, 0, 7, 0,237, 0, 7, 0,151, 0, 4, 0, 20, 0, 7, 0,238, 0,
- 7, 0,239, 0, 7, 0,240, 0, 39, 0,241, 0, 52, 0, 60, 0, 27, 0, 31, 0, 2, 0, 18, 0, 2, 0,242, 0, 2, 0,153, 0,
- 2, 0,243, 0, 7, 0,158, 0, 7, 0,159, 0, 7, 0,160, 0, 7, 0,161, 0, 7, 0,244, 0, 7, 0,245, 0, 7, 0,246, 0,
- 7, 0,247, 0, 7, 0,248, 0, 7, 0,249, 0, 7, 0,250, 0, 4, 0, 54, 0, 53, 0,251, 0, 2, 0,252, 0, 2, 0,253, 0,
- 7, 0, 90, 0, 7, 0, 91, 0, 7, 0,254, 0, 7, 0,255, 0, 7, 0, 0, 1, 2, 0, 1, 1, 2, 0, 2, 1, 2, 0, 3, 1,
- 2, 0, 4, 1, 0, 0, 5, 1, 0, 0, 6, 1, 2, 0, 7, 1, 2, 0, 8, 1, 2, 0, 9, 1, 2, 0, 10, 1, 2, 0, 11, 1,
- 7, 0, 12, 1, 7, 0, 13, 1, 7, 0, 14, 1, 7, 0, 15, 1, 2, 0, 16, 1, 2, 0, 42, 0, 2, 0, 17, 1, 2, 0, 18, 1,
- 4, 0, 19, 1, 4, 0, 20, 1, 2, 0, 21, 1, 2, 0, 22, 1, 2, 0, 23, 1, 2, 0, 24, 1, 7, 0, 25, 1, 7, 0, 26, 1,
- 7, 0, 27, 1, 7, 0, 28, 1, 2, 0, 29, 1, 2, 0, 30, 1, 44, 0, 31, 1, 31, 0, 63, 0, 30, 0,129, 0, 34, 0,102, 0,
- 54, 0, 2, 0, 27, 0, 31, 0, 31, 0, 63, 0, 55, 0,128, 0, 27, 0, 31, 0, 2, 0,153, 0, 2, 0, 20, 0, 7, 0,158, 0,
- 7, 0,159, 0, 7, 0,160, 0, 7, 0, 32, 1, 7, 0, 33, 1, 7, 0, 34, 1, 7, 0, 35, 1, 7, 0, 36, 1, 7, 0, 37, 1,
- 7, 0, 38, 1, 7, 0, 39, 1, 7, 0, 40, 1, 7, 0, 41, 1, 7, 0, 42, 1, 7, 0, 43, 1, 7, 0, 44, 1, 7, 0, 45, 1,
- 7, 0, 46, 1, 7, 0, 47, 1, 7, 0, 48, 1, 7, 0, 49, 1, 7, 0, 50, 1, 7, 0, 51, 1, 7, 0, 52, 1, 7, 0, 53, 1,
- 7, 0, 54, 1, 7, 0, 55, 1, 7, 0, 56, 1, 7, 0, 57, 1, 7, 0, 58, 1, 2, 0, 59, 1, 2, 0, 60, 1, 2, 0, 61, 1,
- 0, 0, 62, 1, 0, 0, 63, 1, 7, 0, 64, 1, 7, 0, 65, 1, 2, 0, 66, 1, 2, 0, 67, 1, 7, 0, 68, 1, 7, 0, 69, 1,
- 7, 0, 70, 1, 7, 0, 71, 1, 2, 0, 72, 1, 2, 0, 73, 1, 4, 0,242, 0, 4, 0, 74, 1, 2, 0, 75, 1, 2, 0, 76, 1,
- 2, 0, 77, 1, 2, 0, 78, 1, 7, 0, 79, 1, 7, 0, 80, 1, 7, 0, 81, 1, 7, 0, 82, 1, 7, 0, 83, 1, 7, 0, 84, 1,
- 7, 0, 85, 1, 7, 0, 86, 1, 7, 0, 87, 1, 7, 0, 88, 1, 0, 0, 89, 1, 7, 0, 90, 1, 7, 0, 91, 1, 7, 0, 92, 1,
- 7, 0, 93, 1, 0, 0, 94, 1, 0, 0, 17, 1, 0, 0, 95, 1, 0, 0, 96, 1, 2, 0, 97, 1, 2, 0, 98, 1, 2, 0, 99, 1,
- 2, 0,100, 1, 2, 0,101, 1, 2, 0,102, 1, 7, 0,103, 1, 7, 0,104, 1, 7, 0,105, 1, 7, 0,106, 1, 7, 0,107, 1,
- 2, 0,139, 0, 2, 0,140, 0, 48, 0,108, 1, 48, 0,109, 1, 0, 0,110, 1, 0, 0,111, 1, 0, 0,112, 1, 0, 0,113, 1,
- 2, 0,114, 1, 2, 0,253, 0, 7, 0,115, 1, 7, 0,116, 1, 44, 0, 31, 1, 56, 0,117, 1, 31, 0, 63, 0, 57, 0,118, 1,
- 30, 0,129, 0, 7, 0,119, 1, 7, 0,120, 1, 7, 0,121, 1, 7, 0,122, 1, 7, 0,123, 1, 2, 0,124, 1, 2, 0, 54, 0,
- 7, 0,125, 1, 7, 0,126, 1, 7, 0,127, 1, 7, 0,128, 1, 7, 0,129, 1, 7, 0,130, 1, 7, 0,131, 1, 7, 0,132, 1,
- 7, 0,133, 1, 2, 0,134, 1, 2, 0,135, 1, 7, 0,136, 1, 7, 0,137, 1, 7, 0,138, 1, 7, 0,139, 1, 7, 0,140, 1,
- 4, 0,141, 1, 4, 0,142, 1, 4, 0,143, 1, 34, 0,102, 0, 58, 0, 6, 0, 27, 0, 31, 0, 0, 0,144, 1, 7, 0,145, 1,
- 7, 0, 16, 0, 59, 0, 2, 0, 37, 0,128, 0, 60, 0, 26, 0, 60, 0, 0, 0, 60, 0, 1, 0, 61, 0,146, 1, 4, 0,147, 1,
- 4, 0,148, 1, 4, 0,149, 1, 4, 0,150, 1, 4, 0,151, 1, 4, 0,152, 1, 2, 0, 18, 0, 2, 0, 20, 0, 2, 0,153, 1,
- 2, 0,154, 1, 7, 0, 5, 0, 7, 0, 6, 0, 7, 0, 7, 0, 7, 0,155, 1, 7, 0,156, 1, 7, 0,157, 1, 7, 0,158, 1,
- 7, 0,159, 1, 7, 0,160, 1, 7, 0,161, 1, 7, 0, 23, 0, 7, 0,162, 1, 7, 0,163, 1, 62, 0, 15, 0, 27, 0, 31, 0,
- 61, 0,146, 1, 12, 0,164, 1, 12, 0,165, 1, 31, 0, 63, 0, 55, 0,166, 1, 2, 0, 20, 0, 2, 0,167, 1, 4, 0,152, 0,
- 7, 0,236, 0, 7, 0,151, 0, 7, 0,237, 0, 7, 0,168, 1, 7, 0,169, 1, 7, 0,170, 1, 63, 0, 10, 0, 7, 0,171, 1,
- 7, 0,172, 1, 7, 0,173, 1, 7, 0,174, 1, 2, 0,175, 1, 2, 0,176, 1, 0, 0,177, 1, 0, 0,178, 1, 0, 0,179, 1,
- 0, 0,180, 1, 64, 0, 7, 0, 7, 0,181, 1, 7, 0,172, 1, 7, 0,173, 1, 2, 0,177, 1, 2, 0,180, 1, 7, 0,174, 1,
- 7, 0, 16, 0, 65, 0, 21, 0, 65, 0, 0, 0, 65, 0, 1, 0, 2, 0, 18, 0, 2, 0,182, 1, 2, 0,180, 1, 2, 0, 20, 0,
- 2, 0,183, 1, 2, 0,184, 1, 2, 0,185, 1, 2, 0,186, 1, 2, 0,187, 1, 2, 0,188, 1, 2, 0,189, 1, 2, 0,190, 1,
- 7, 0,191, 1, 7, 0,192, 1, 64, 0,193, 1, 63, 0,194, 1, 2, 0,195, 1, 2, 0, 16, 0, 4, 0,196, 1, 66, 0, 5, 0,
- 2, 0,197, 1, 2, 0,182, 1, 0, 0, 20, 0, 0, 0, 16, 0, 2, 0, 54, 0, 67, 0, 4, 0, 7, 0, 5, 0, 7, 0, 6, 0,
- 7, 0, 8, 0, 7, 0,198, 1, 68, 0, 57, 0, 27, 0, 31, 0, 61, 0,146, 1, 12, 0,199, 1, 12, 0,165, 1, 39, 0,200, 1,
- 39, 0,201, 1, 39, 0,202, 1, 31, 0, 63, 0, 69, 0,203, 1, 33, 0,204, 1, 55, 0,166, 1, 12, 0,205, 1, 7, 0,236, 0,
- 7, 0,151, 0, 7, 0,237, 0, 4, 0,152, 0, 2, 0,206, 1, 2, 0,167, 1, 2, 0, 20, 0, 2, 0,207, 1, 7, 0,208, 1,
- 7, 0,209, 1, 7, 0,210, 1, 2, 0,185, 1, 2, 0,186, 1, 2, 0,211, 1, 2, 0,212, 1, 4, 0, 54, 0, 2, 0, 23, 0,
- 2, 0, 77, 0, 2, 0, 49, 0, 2, 0,213, 1, 7, 0,214, 1, 7, 0,215, 1, 7, 0,216, 1, 7, 0,217, 1, 7, 0,218, 1,
- 7, 0,219, 1, 7, 0,220, 1, 7, 0,221, 1, 7, 0,222, 1, 7, 0,223, 1, 0, 0,224, 1, 0, 0,225, 1, 58, 0,226, 1,
- 58, 0,227, 1, 58, 0,228, 1, 58, 0,229, 1, 4, 0,230, 1, 4, 0,231, 1, 4, 0,232, 1, 4, 0, 16, 0, 67, 0,233, 1,
- 4, 0,234, 1, 4, 0,235, 1, 66, 0,236, 1, 66, 0,237, 1, 70, 0, 6, 0, 39, 0,241, 0, 2, 0, 46, 0, 2, 0, 51, 0,
- 2, 0, 18, 0, 2, 0, 20, 0, 0, 0,238, 1, 71, 0, 21, 0, 71, 0, 0, 0, 71, 0, 1, 0, 64, 0,193, 1, 63, 0,194, 1,
- 24, 0,239, 1, 24, 0,240, 1, 2, 0, 46, 0, 2, 0, 51, 0, 2, 0,241, 1, 2, 0,242, 1, 2, 0,243, 1, 2, 0,244, 1,
- 2, 0, 20, 0, 2, 0,163, 0, 7, 0, 11, 0, 7, 0, 12, 0, 4, 0,245, 1, 7, 0,246, 1, 7, 0,247, 1, 7, 0, 50, 0,
- 70, 0,248, 1, 72, 0, 39, 0, 27, 0, 31, 0, 61, 0,146, 1, 12, 0,249, 1, 31, 0, 63, 0, 33, 0,204, 1, 55, 0,166, 1,
- 73, 0,250, 1, 74, 0,251, 1, 75, 0,252, 1, 76, 0,253, 1, 77, 0,254, 1, 78, 0,255, 1, 79, 0, 0, 2, 80, 0, 1, 2,
- 72, 0, 2, 2, 81, 0, 3, 2, 82, 0, 4, 2, 82, 0, 5, 2, 82, 0, 6, 2, 4, 0,242, 1, 4, 0, 7, 2, 4, 0, 8, 2,
- 4, 0, 9, 2, 4, 0, 10, 2, 4, 0,152, 0, 7, 0,236, 0, 7, 0,151, 0, 7, 0,237, 0, 7, 0, 11, 2, 7, 0, 16, 0,
- 2, 0, 12, 2, 2, 0, 20, 0, 2, 0, 13, 2, 2, 0, 14, 2, 2, 0,167, 1, 2, 0, 15, 2, 83, 0, 16, 2, 84, 0, 17, 2,
- 9, 0,138, 0, 75, 0, 8, 0, 9, 0, 18, 2, 7, 0, 19, 2, 4, 0, 20, 2, 0, 0, 20, 0, 0, 0, 21, 2, 2, 0,242, 0,
- 2, 0, 22, 2, 2, 0, 23, 2, 73, 0, 8, 0, 4, 0, 24, 2, 4, 0, 25, 2, 4, 0, 26, 2, 4, 0, 27, 2, 0, 0, 16, 0,
- 0, 0,182, 1, 0, 0, 28, 2, 0, 0, 20, 0, 77, 0, 5, 0, 4, 0, 24, 2, 4, 0, 25, 2, 0, 0, 29, 2, 0, 0, 16, 0,
- 2, 0, 20, 0, 85, 0, 2, 0, 4, 0, 30, 2, 7, 0,173, 1, 78, 0, 3, 0, 85, 0, 31, 2, 4, 0, 32, 2, 4, 0, 20, 0,
- 76, 0, 4, 0, 7, 0, 33, 2, 2, 0, 34, 2, 0, 0, 20, 0, 0, 0,182, 1, 79, 0, 4, 0, 0, 0,183, 0, 0, 0,158, 0,
- 0, 0,159, 0, 0, 0,160, 0, 80, 0, 1, 0, 7, 0, 35, 2, 81, 0, 2, 0, 4, 0, 36, 2, 4, 0, 18, 0, 74, 0, 7, 0,
- 7, 0, 19, 2, 41, 0, 18, 2, 0, 0, 20, 0, 0, 0, 21, 2, 2, 0,242, 0, 2, 0, 22, 2, 2, 0, 23, 2, 86, 0, 1, 0,
- 7, 0, 37, 2, 87, 0, 1, 0, 4, 0, 38, 2, 88, 0, 1, 0, 0, 0, 39, 2, 89, 0, 1, 0, 7, 0, 19, 2, 90, 0, 4, 0,
- 7, 0,183, 0, 7, 0,158, 0, 7, 0,159, 0, 7, 0,160, 0, 91, 0, 1, 0, 90, 0, 20, 2, 92, 0, 5, 0, 4, 0, 40, 2,
- 4, 0, 41, 2, 0, 0, 20, 0, 0, 0,182, 1, 0, 0, 42, 2, 93, 0, 2, 0, 4, 0, 43, 2, 4, 0, 41, 2, 94, 0, 14, 0,
- 94, 0, 0, 0, 94, 0, 1, 0, 92, 0, 44, 2, 91, 0, 45, 2, 93, 0, 46, 2, 0, 0, 47, 2, 12, 0, 48, 2, 12, 0, 49, 2,
- 95, 0, 50, 2, 4, 0,242, 1, 4, 0, 8, 2, 4, 0, 7, 2, 4, 0, 16, 0, 76, 0, 51, 2, 83, 0, 14, 0, 12, 0, 52, 2,
- 76, 0, 51, 2, 0, 0, 53, 2, 0, 0, 54, 2, 0, 0, 55, 2, 0, 0, 56, 2, 0, 0, 57, 2, 0, 0, 58, 2, 0, 0, 59, 2,
- 0, 0, 20, 0, 82, 0, 4, 2, 82, 0, 6, 2, 2, 0, 60, 2, 0, 0, 61, 2, 84, 0, 8, 0, 4, 0, 62, 2, 4, 0, 63, 2,
- 73, 0, 64, 2, 77, 0, 65, 2, 4, 0, 8, 2, 4, 0, 7, 2, 4, 0,242, 1, 4, 0, 16, 0, 96, 0, 6, 0, 96, 0, 0, 0,
- 96, 0, 1, 0, 4, 0, 18, 0, 4, 0,242, 0, 0, 0, 17, 0, 0, 0, 66, 2, 97, 0, 7, 0, 96, 0, 67, 2, 2, 0, 68, 2,
- 2, 0, 52, 2, 2, 0, 69, 2, 2, 0, 75, 0, 9, 0, 70, 2, 9, 0, 71, 2, 98, 0, 3, 0, 96, 0, 67, 2, 39, 0,143, 0,
- 0, 0, 17, 0, 99, 0, 5, 0, 96, 0, 67, 2, 39, 0,143, 0, 0, 0, 17, 0, 2, 0, 72, 2, 0, 0, 73, 2,100, 0, 5, 0,
- 96, 0, 67, 2, 7, 0, 74, 2, 7, 0, 75, 2, 4, 0, 76, 2, 4, 0, 77, 2,101, 0, 13, 0, 96, 0, 67, 2, 39, 0, 78, 2,
- 39, 0, 79, 2, 39, 0, 80, 2, 39, 0, 81, 2, 7, 0, 82, 2, 7, 0, 83, 2, 7, 0, 75, 2, 7, 0, 84, 2, 4, 0, 85, 2,
- 4, 0, 86, 2, 4, 0, 75, 0, 4, 0, 87, 2,102, 0, 5, 0, 96, 0, 67, 2, 2, 0, 88, 2, 2, 0, 20, 0, 7, 0, 89, 2,
- 39, 0, 90, 2,103, 0, 3, 0, 96, 0, 67, 2, 7, 0, 91, 2, 4, 0, 75, 0,104, 0, 11, 0, 96, 0, 67, 2, 45, 0, 92, 2,
- 7, 0, 93, 2, 4, 0, 94, 2, 0, 0, 95, 2, 7, 0, 96, 2, 4, 0, 97, 2, 39, 0, 98, 2, 0, 0, 99, 2, 4, 0,100, 2,
- 4, 0, 16, 0,105, 0, 10, 0, 96, 0, 67, 2, 39, 0,101, 2, 41, 0,102, 2, 4, 0, 75, 0, 4, 0,103, 2, 7, 0,104, 2,
- 7, 0,105, 2, 0, 0, 99, 2, 4, 0,100, 2, 4, 0, 16, 0,106, 0, 3, 0, 96, 0, 67, 2, 7, 0,106, 2, 4, 0,107, 2,
-107, 0, 5, 0, 96, 0, 67, 2, 7, 0,108, 2, 0, 0, 95, 2, 2, 0, 20, 0, 2, 0,109, 2,108, 0, 8, 0, 96, 0, 67, 2,
- 39, 0,143, 0, 7, 0,108, 2, 7, 0,174, 1, 7, 0, 86, 0, 0, 0, 95, 2, 2, 0, 20, 0, 2, 0, 18, 0,109, 0, 19, 0,
- 96, 0, 67, 2, 39, 0,110, 2, 0, 0, 95, 2, 45, 0, 92, 2, 39, 0, 98, 2, 2, 0, 20, 0, 2, 0, 16, 0, 7, 0,111, 2,
- 7, 0,112, 2, 7, 0,113, 2, 7, 0,208, 1, 7, 0,114, 2, 7, 0,115, 2, 7, 0,116, 2, 4, 0, 97, 2, 4, 0,100, 2,
- 0, 0, 99, 2, 7, 0,117, 2, 7, 0,118, 2,110, 0, 7, 0, 96, 0, 67, 2, 2, 0,119, 2, 2, 0,120, 2, 4, 0, 54, 0,
- 39, 0,143, 0, 7, 0,121, 2, 0, 0, 95, 2,111, 0, 9, 0, 96, 0, 67, 2, 39, 0,143, 0, 7, 0,122, 2, 7, 0,123, 2,
- 7, 0,124, 2, 4, 0,125, 2, 4, 0,126, 2, 7, 0,127, 2, 0, 0, 17, 0,112, 0, 1, 0, 96, 0, 67, 2,113, 0, 4, 0,
- 96, 0, 67, 2,114, 0,128, 2,115, 0,129, 2,116, 0,130, 2,117, 0, 13, 0, 96, 0, 67, 2, 76, 0,131, 2, 76, 0,132, 2,
- 76, 0,133, 2, 76, 0,134, 2, 76, 0,135, 2, 76, 0,136, 2, 73, 0,137, 2, 4, 0,138, 2, 4, 0,139, 2, 4, 0, 16, 0,
- 7, 0,140, 2,118, 0,141, 2,119, 0, 4, 0, 96, 0, 67, 2, 39, 0,143, 0, 4, 0,142, 2, 4, 0, 16, 0,120, 0, 2, 0,
- 4, 0,143, 2, 7, 0,173, 1,121, 0, 2, 0, 4, 0,106, 0, 4, 0,144, 2,122, 0, 20, 0, 96, 0, 67, 2, 39, 0,143, 0,
- 0, 0, 95, 2, 2, 0,145, 2, 2, 0,146, 2, 2, 0, 20, 0, 2, 0, 16, 0, 7, 0,147, 2, 7, 0,148, 2, 4, 0,242, 1,
- 4, 0,149, 2,121, 0,150, 2,120, 0,151, 2, 4, 0,152, 2, 4, 0,153, 2, 4, 0,154, 2, 4, 0,144, 2, 7, 0,155, 2,
- 7, 0,156, 2, 7, 0,157, 2,123, 0, 8, 0, 96, 0, 67, 2,124, 0,158, 2,125, 0,159, 2, 4, 0,160, 2, 4, 0,161, 2,
- 4, 0,162, 2, 2, 0, 20, 0, 2, 0,163, 0,126, 0, 5, 0, 96, 0, 67, 2, 39, 0,241, 0, 2, 0,163, 2, 2, 0, 20, 0,
- 2, 0,164, 2,127, 0, 5, 0, 96, 0, 67, 2, 4, 0,165, 2, 2, 0, 20, 0, 2, 0,166, 2, 7, 0,167, 2,128, 0, 24, 0,
- 27, 0, 31, 0, 2, 0,183, 1, 2, 0,184, 1, 2, 0,168, 2, 2, 0, 20, 0, 2, 0,169, 2, 2, 0,170, 2, 2, 0,171, 2,
- 2, 0, 54, 0, 0, 0,172, 2, 0, 0,173, 2, 0, 0,174, 2, 0, 0, 18, 0, 4, 0, 16, 0, 7, 0,175, 2, 7, 0,176, 2,
- 7, 0,177, 2, 7, 0,178, 2, 7, 0,179, 2, 7, 0,180, 2, 64, 0,181, 2, 31, 0, 63, 0, 33, 0,204, 1, 78, 0,255, 1,
-129, 0, 3, 0,129, 0, 0, 0,129, 0, 1, 0, 0, 0, 17, 0, 61, 0, 3, 0, 7, 0,182, 2, 4, 0, 20, 0, 4, 0, 16, 0,
- 39, 0,106, 0, 27, 0, 31, 0, 2, 0, 18, 0, 2, 0,183, 2, 4, 0,184, 2, 4, 0,185, 2, 4, 0,186, 2, 0, 0,187, 2,
- 39, 0, 37, 0, 39, 0,188, 2, 39, 0,189, 2, 39, 0,190, 2, 39, 0,191, 2, 31, 0, 63, 0, 69, 0,203, 1, 61, 0,146, 1,
-130, 0,192, 2,130, 0,193, 2,131, 0,194, 2, 9, 0, 2, 0, 12, 0,195, 2, 12, 0,249, 1, 12, 0,165, 1, 12, 0,196, 2,
- 12, 0,197, 2, 55, 0,166, 1, 7, 0,236, 0, 7, 0,198, 2, 7, 0,199, 2, 7, 0,151, 0, 7, 0,200, 2, 7, 0,237, 0,
- 7, 0,201, 2, 7, 0,155, 1, 7, 0,202, 2, 7, 0,203, 2, 7, 0,122, 2, 7, 0,204, 2, 7, 0,187, 0, 4, 0,205, 2,
- 2, 0, 20, 0, 2, 0,206, 2, 2, 0,207, 2, 2, 0,208, 2, 2, 0,209, 2, 2, 0,210, 2, 2, 0,211, 2, 2, 0,212, 2,
- 2, 0,213, 2, 2, 0,214, 2, 2, 0,215, 2, 2, 0,216, 2, 4, 0,217, 2, 4, 0,218, 2, 4, 0,219, 2, 4, 0,220, 2,
- 7, 0,221, 2, 7, 0,222, 2, 7, 0,223, 2, 7, 0,224, 2, 7, 0,225, 2, 7, 0,226, 2, 7, 0,227, 2, 7, 0,228, 2,
- 0, 0,229, 2, 0, 0,230, 2, 0, 0,167, 1, 0, 0,231, 2, 0, 0,232, 2, 0, 0,233, 2, 7, 0,234, 2, 7, 0,235, 2,
- 34, 0,102, 0, 12, 0,236, 2, 12, 0,237, 2, 12, 0,238, 2, 12, 0,239, 2, 9, 0,240, 2, 7, 0,241, 2, 2, 0, 36, 2,
- 2, 0,242, 2, 7, 0, 20, 2, 4, 0,243, 2, 4, 0,244, 2, 2, 0,245, 2, 2, 0,194, 0, 7, 0,246, 2, 12, 0,247, 2,
- 12, 0,248, 2, 12, 0,249, 2, 12, 0,250, 2,132, 0,251, 2,133, 0,252, 2, 57, 0,253, 2, 2, 0,254, 2, 2, 0,255, 2,
- 2, 0, 0, 3, 2, 0, 1, 3, 7, 0, 12, 2, 2, 0, 2, 3, 2, 0, 3, 3,134, 0, 4, 3,125, 0, 5, 3,125, 0, 6, 3,
- 4, 0, 7, 3, 4, 0, 16, 0, 9, 0,138, 0,135, 0, 14, 0,135, 0, 0, 0,135, 0, 1, 0, 39, 0, 37, 0, 7, 0,122, 2,
- 7, 0,238, 0, 7, 0,123, 2, 7, 0,124, 2, 0, 0, 17, 0, 4, 0,125, 2, 4, 0,126, 2, 4, 0, 8, 3, 2, 0, 18, 0,
- 2, 0, 9, 3, 7, 0,127, 2,132, 0, 33, 0, 2, 0, 10, 3, 2, 0, 11, 3, 2, 0, 20, 0, 2, 0,124, 2, 7, 0, 12, 3,
- 7, 0, 13, 3, 7, 0, 14, 3, 7, 0, 15, 3, 7, 0, 16, 3, 7, 0, 17, 3, 7, 0, 18, 3, 7, 0, 19, 3, 7, 0, 20, 3,
- 7, 0, 21, 3, 7, 0, 22, 3, 7, 0, 23, 3, 7, 0, 24, 3, 7, 0, 25, 3, 7, 0, 26, 3, 7, 0, 27, 3, 7, 0, 28, 3,
- 7, 0, 29, 3, 7, 0, 30, 3, 7, 0, 31, 3, 7, 0, 32, 3, 7, 0, 33, 3, 7, 0, 34, 3, 7, 0, 35, 3, 2, 0, 36, 3,
- 2, 0, 37, 3, 2, 0, 38, 3, 2, 0, 39, 3, 45, 0,144, 0,136, 0, 1, 0, 7, 0,181, 1,133, 0, 43, 0,124, 0, 40, 3,
- 4, 0, 41, 3, 4, 0, 42, 3,137, 0, 43, 3,138, 0, 44, 3, 7, 0,222, 2, 7, 0, 45, 3, 7, 0, 46, 3, 7, 0, 47, 3,
- 7, 0, 48, 3, 7, 0, 49, 3, 7, 0, 50, 3, 7, 0, 51, 3, 7, 0, 52, 3, 7, 0, 53, 3, 7, 0, 54, 3, 2, 0, 55, 3,
- 2, 0, 56, 3, 7, 0, 57, 3, 7, 0, 58, 3, 4, 0,107, 0, 4, 0, 59, 3, 4, 0, 60, 3, 2, 0, 61, 3, 2, 0, 62, 3,
-136, 0, 63, 3, 4, 0, 64, 3, 4, 0, 65, 0, 7, 0, 65, 3, 7, 0, 66, 3, 7, 0, 67, 3, 7, 0, 68, 3, 2, 0, 69, 3,
- 2, 0, 70, 3, 2, 0, 71, 3, 2, 0, 72, 3, 2, 0, 73, 3, 2, 0, 74, 3, 2, 0, 75, 3, 2, 0, 76, 3,139, 0, 77, 3,
- 7, 0, 78, 3, 7, 0, 79, 3,134, 0, 40, 0, 2, 0, 18, 0, 2, 0, 80, 3, 2, 0, 81, 3, 2, 0, 82, 3, 7, 0, 83, 3,
- 2, 0, 84, 3, 2, 0, 85, 3, 7, 0, 86, 3, 2, 0, 87, 3, 2, 0, 88, 3, 7, 0, 89, 3, 7, 0, 90, 3, 7, 0, 91, 3,
- 7, 0, 92, 3, 7, 0, 93, 3, 7, 0, 94, 3, 4, 0, 95, 3, 7, 0, 96, 3, 7, 0, 97, 3, 7, 0, 98, 3, 72, 0, 99, 3,
- 72, 0,100, 3, 72, 0,101, 3, 0, 0,102, 3, 7, 0,103, 3, 7, 0,104, 3, 31, 0, 63, 0, 2, 0,105, 3, 0, 0,106, 3,
- 0, 0,107, 3, 7, 0,108, 3, 4, 0,109, 3, 7, 0,110, 3, 7, 0,111, 3, 4, 0,112, 3, 4, 0,113, 3, 7, 0,114, 3,
- 7, 0,115, 3, 7, 0,116, 3, 76, 0,117, 3,140, 0, 66, 0, 27, 0, 31, 0, 2, 0,153, 0, 2, 0,243, 0, 2, 0, 17, 1,
- 2, 0,118, 3, 7, 0,119, 3, 7, 0,120, 3, 7, 0,121, 3, 7, 0,122, 3, 7, 0,123, 3, 7, 0,124, 3, 7, 0,125, 3,
- 7, 0,126, 3, 7, 0, 38, 1, 7, 0, 40, 1, 7, 0, 39, 1, 7, 0,127, 3, 4, 0,128, 3, 7, 0,129, 3, 7, 0,130, 3,
- 7, 0,131, 3, 7, 0,132, 3, 7, 0,133, 3, 7, 0,134, 3, 7, 0,135, 3, 2, 0,136, 3, 2, 0,242, 0, 4, 0,137, 3,
- 7, 0,138, 3, 7, 0,139, 3, 7, 0,140, 3, 7, 0,141, 3, 7, 0,142, 3, 7, 0,143, 3, 7, 0,144, 3, 7, 0,145, 3,
- 7, 0,146, 3, 7, 0,147, 3, 7, 0,148, 3, 7, 0,149, 3, 2, 0,150, 3, 2, 0,151, 3, 2, 0,152, 3, 2, 0,153, 3,
- 7, 0,154, 3, 7, 0,155, 3, 7, 0,156, 3, 7, 0,157, 3, 2, 0,158, 3, 2, 0,159, 3, 2, 0,160, 3, 2, 0,161, 3,
- 7, 0,162, 3, 7, 0,163, 3, 7, 0,164, 3, 7, 0,165, 3, 2, 0,166, 3, 2, 0,167, 3, 2, 0,168, 3, 2, 0, 42, 0,
- 7, 0,169, 3, 7, 0,170, 3, 31, 0, 63, 0, 44, 0, 31, 1, 30, 0,129, 0, 34, 0,102, 0,141, 0, 16, 0, 2, 0,171, 3,
- 2, 0,172, 3, 2, 0,173, 3, 2, 0, 20, 0, 2, 0,174, 3, 2, 0,175, 3, 2, 0,176, 3, 2, 0,177, 3, 2, 0,178, 3,
- 2, 0,179, 3, 2, 0,180, 3, 2, 0,181, 3, 4, 0,182, 3, 7, 0,183, 3, 7, 0,184, 3, 7, 0,185, 3,142, 0, 8, 0,
-142, 0, 0, 0,142, 0, 1, 0, 4, 0,205, 2, 4, 0,186, 3, 4, 0, 20, 0, 2, 0,187, 3, 2, 0,188, 3, 39, 0,143, 0,
-143, 0, 13, 0, 9, 0,189, 3, 9, 0,190, 3, 4, 0,191, 3, 4, 0,192, 3, 4, 0,193, 3, 4, 0,194, 3, 4, 0,195, 3,
- 4, 0,196, 3, 4, 0,197, 3, 4, 0,198, 3, 4, 0,199, 3, 4, 0, 16, 0, 0, 0,200, 3,144, 0, 5, 0, 9, 0,201, 3,
- 9, 0,202, 3, 4, 0,203, 3, 4, 0, 54, 0, 0, 0,204, 3,145, 0, 12, 0, 4, 0, 18, 0, 4, 0,205, 3, 4, 0,206, 3,
- 4, 0,207, 3, 4, 0,208, 3, 4, 0,209, 3, 4, 0, 75, 0, 4, 0,210, 3, 4, 0,211, 3, 4, 0,212, 3, 4, 0,213, 3,
- 4, 0,214, 3,146, 0, 4, 0, 4, 0,215, 3, 7, 0,216, 3, 2, 0, 20, 0, 2, 0,157, 0,147, 0, 11, 0,147, 0, 0, 0,
-147, 0, 1, 0, 0, 0, 17, 0, 55, 0,217, 3, 57, 0,218, 3, 4, 0,205, 2, 4, 0,219, 3, 4, 0,220, 3, 4, 0, 16, 0,
- 4, 0,221, 3, 4, 0,222, 3,148, 0,113, 0,143, 0,223, 3,144, 0,224, 3,145, 0,225, 3, 4, 0,226, 3, 4, 0,107, 0,
- 4, 0, 59, 3, 4, 0,227, 3, 4, 0,228, 3, 4, 0,229, 3, 4, 0,230, 3, 2, 0, 20, 0, 2, 0,231, 3, 7, 0,222, 2,
- 7, 0,232, 3, 7, 0,233, 3, 7, 0,234, 3, 7, 0,235, 3, 7, 0,236, 3, 2, 0,237, 3, 2, 0,238, 3, 2, 0,239, 3,
- 2, 0,240, 3, 2, 0,193, 0, 2, 0,241, 3, 2, 0,242, 3, 2, 0, 39, 3, 2, 0,243, 3, 2, 0,244, 3, 2, 0, 4, 1,
- 2, 0, 86, 0, 2, 0,245, 3, 2, 0,246, 3, 2, 0,247, 3, 2, 0,248, 3, 2, 0,249, 3, 2, 0,250, 3, 2, 0,251, 3,
- 2, 0,252, 3, 2, 0,253, 3, 2, 0,254, 3, 2, 0,255, 3, 2, 0, 5, 1, 2, 0, 0, 4, 2, 0, 1, 4, 4, 0,242, 0,
- 2, 0, 2, 4, 2, 0, 3, 4, 2, 0, 4, 4, 2, 0, 5, 4, 2, 0, 6, 4, 2, 0, 7, 4, 2, 0, 8, 4, 24, 0, 9, 4,
- 24, 0, 10, 4, 23, 0, 11, 4, 12, 0, 12, 4, 2, 0, 13, 4, 2, 0, 16, 0, 7, 0, 14, 4, 7, 0, 15, 4, 7, 0, 16, 4,
- 7, 0, 17, 4, 7, 0, 18, 4, 7, 0, 19, 4, 7, 0, 20, 4, 2, 0, 21, 4, 2, 0, 22, 4, 2, 0, 23, 4, 2, 0, 24, 4,
- 2, 0, 25, 4, 2, 0, 26, 4, 7, 0, 27, 4, 2, 0, 28, 4, 2, 0, 29, 4, 2, 0, 30, 4, 2, 0, 31, 4, 2, 0, 32, 4,
- 2, 0, 33, 4, 2, 0, 34, 4, 2, 0, 35, 4, 2, 0, 36, 4, 2, 0, 37, 4, 4, 0, 38, 4, 4, 0, 39, 4, 4, 0, 40, 4,
- 4, 0, 41, 4, 4, 0, 42, 4, 7, 0, 43, 4, 4, 0, 44, 4, 4, 0, 45, 4, 4, 0, 46, 4, 4, 0, 47, 4, 7, 0, 48, 4,
- 7, 0, 49, 4, 7, 0, 50, 4, 7, 0, 51, 4, 7, 0, 52, 4, 7, 0, 53, 4, 7, 0, 54, 4, 7, 0, 55, 4, 7, 0, 56, 4,
- 0, 0, 57, 4, 0, 0, 58, 4, 4, 0, 59, 4, 2, 0, 60, 4, 2, 0,253, 0, 0, 0, 61, 4, 7, 0, 62, 4, 7, 0, 63, 4,
- 4, 0, 64, 4, 4, 0, 65, 4, 7, 0, 66, 4, 7, 0, 67, 4,149, 0, 5, 0, 7, 0, 68, 4, 0, 0, 18, 0, 0, 0, 42, 0,
- 0, 0, 54, 0, 0, 0,253, 0,150, 0, 5, 0,150, 0, 0, 0,150, 0, 1, 0, 4, 0, 69, 4, 0, 0, 70, 4, 4, 0, 20, 0,
-151, 0, 4, 0,152, 0, 71, 4, 2, 0, 20, 0, 2, 0, 72, 4, 4, 0,253, 0,153, 0, 6, 0, 2, 0, 86, 0, 2, 0, 93, 2,
- 2, 0, 20, 0, 2, 0, 73, 4, 2, 0, 74, 4, 2, 0,157, 0,154, 0, 7, 0, 2, 0, 20, 0, 2, 0, 75, 4, 2, 0, 76, 4,
- 2, 0, 77, 4,153, 0, 78, 4, 7, 0, 79, 4, 4, 0, 80, 4,155, 0, 4, 0,155, 0, 0, 0,155, 0, 1, 0, 0, 0, 81, 4,
- 7, 0, 82, 4,156, 0, 41, 0, 2, 0, 83, 4, 2, 0, 84, 4, 7, 0, 85, 4, 7, 0, 86, 4, 2, 0, 73, 4, 2, 0, 87, 4,
- 7, 0, 88, 4, 7, 0, 89, 4, 2, 0, 90, 4, 2, 0, 91, 4, 2, 0, 92, 4, 2, 0, 93, 4, 7, 0, 94, 4, 7, 0, 95, 4,
- 2, 0, 96, 4, 2, 0, 97, 4, 2, 0, 98, 4, 2, 0, 99, 4,151, 0,100, 4,154, 0,101, 4, 7, 0,102, 4, 7, 0,103, 4,
- 0, 0,104, 4, 0, 0,105, 4, 0, 0,106, 4, 0, 0,107, 4, 0, 0,108, 4, 0, 0,109, 4, 2, 0,110, 4, 7, 0,111, 4,
- 7, 0,112, 4, 7, 0,113, 4, 7, 0,114, 4, 7, 0,115, 4, 7, 0,116, 4, 7, 0,117, 4, 2, 0,118, 4, 0, 0,119, 4,
- 0, 0,120, 4, 0, 0,121, 4, 0, 0,122, 4,157, 0, 6, 0, 2, 0, 86, 0, 0, 0, 93, 2, 0, 0,123, 4, 0, 0,124, 4,
- 0, 0, 20, 0, 0, 0, 42, 2,158, 0, 24, 0,159, 0,125, 4, 44, 0, 31, 1, 53, 0,126, 4,157, 0,127, 4,157, 0,128, 4,
-157, 0,129, 4,157, 0,130, 4,157, 0,131, 4,157, 0,132, 4,157, 0,133, 4, 2, 0,134, 4, 2, 0, 17, 1, 2, 0,135, 4,
- 2, 0,214, 1, 0, 0,136, 4, 0, 0,137, 4, 0, 0,138, 4, 0, 0,139, 4, 0, 0, 75, 0, 0, 0,140, 4, 0, 0,141, 4,
- 0, 0,142, 4, 0, 0,143, 4, 0, 0,144, 4,160, 0, 41, 0, 27, 0, 31, 0, 39, 0,145, 4,140, 0,146, 4,160, 0,147, 4,
- 41, 0,185, 0, 12, 0,148, 4,142, 0,149, 4, 7, 0,150, 4, 7, 0,151, 4, 7, 0,152, 4, 7, 0,153, 4, 4, 0,205, 2,
- 7, 0,154, 4, 2, 0,155, 4, 2, 0,156, 4, 2, 0,157, 4, 2, 0,158, 4, 2, 0, 76, 3, 2, 0,159, 4, 2, 0,160, 4,
- 2, 0, 96, 1, 56, 0,117, 1, 9, 0,161, 4,141, 0,162, 4,149, 0,163, 4,156, 0,164, 4,148, 0,158, 0,146, 0,165, 4,
- 34, 0,102, 0, 12, 0,166, 4, 12, 0,167, 4, 2, 0,168, 4, 2, 0, 42, 0, 2, 0,169, 4, 2, 0,170, 4,161, 0,171, 4,
- 2, 0,172, 4, 2, 0,173, 4, 2, 0, 3, 3, 2, 0,194, 0,158, 0,174, 4,162, 0, 9, 0, 41, 0,185, 0, 40, 0,232, 0,
- 7, 0,221, 1, 7, 0,222, 1, 7, 0, 86, 0, 7, 0,175, 4, 7, 0,176, 4, 2, 0,177, 4, 2, 0,178, 4,163, 0, 68, 0,
-164, 0, 0, 0,164, 0, 1, 0, 4, 0,179, 4, 7, 0,180, 4,165, 0,181, 4, 2, 0,182, 4, 7, 0,183, 4, 7, 0,184, 4,
- 7, 0,185, 4, 7, 0,186, 4, 7, 0,187, 4, 7, 0,188, 4, 7, 0,189, 4, 7, 0,245, 0, 7, 0,190, 4, 7, 0, 41, 0,
- 2, 0,191, 4, 2, 0,124, 4, 39, 0,145, 4, 39, 0,192, 4,162, 0,193, 4,163, 0,194, 4,166, 0,195, 4,167, 0,196, 4,
-168, 0,197, 4, 0, 0,198, 4, 2, 0,173, 3, 2, 0,199, 4, 4, 0,205, 2, 4, 0,200, 4, 2, 0,201, 4, 2, 0,202, 4,
- 2, 0,203, 4, 0, 0,204, 4, 0, 0, 42, 0, 7, 0, 92, 0, 7, 0,205, 4, 7, 0,206, 4, 7, 0,207, 4, 7, 0,208, 4,
- 7, 0,209, 4, 7, 0,210, 4, 7, 0,211, 4, 7, 0,150, 0, 7, 0,150, 4, 2, 0,212, 4, 2, 0,213, 4, 2, 0,214, 4,
- 2, 0,215, 4, 2, 0,114, 0, 2, 0,135, 4, 2, 0,216, 4, 2, 0,217, 4, 2, 0,218, 4, 2, 0,219, 4, 7, 0,220, 4,
- 7, 0,221, 4, 61, 0,222, 4, 12, 0,223, 4, 2, 0,224, 4, 2, 0, 21, 2, 2, 0,225, 4, 2, 0, 20, 0, 2, 0,226, 4,
- 2, 0,227, 4, 2, 0,253, 0, 2, 0, 54, 0, 9, 0,228, 4,169, 0, 19, 0, 24, 0, 36, 0, 24, 0, 45, 0, 23, 0,229, 4,
- 23, 0,230, 4, 23, 0,231, 4, 7, 0,232, 4, 7, 0,233, 4, 7, 0,234, 4, 7, 0,235, 4, 2, 0,236, 4, 2, 0,237, 4,
- 2, 0,238, 4, 2, 0,239, 4, 2, 0,240, 4, 2, 0,241, 4, 4, 0, 20, 0, 7, 0,242, 4, 2, 0,202, 4, 0, 0, 73, 2,
-164, 0, 6, 0,164, 0, 0, 0,164, 0, 1, 0, 4, 0,179, 4, 7, 0,180, 4,165, 0,181, 4, 2, 0,182, 4,170, 0, 6, 0,
-164, 0, 0, 0,164, 0, 1, 0, 4, 0,179, 4, 7, 0,180, 4,165, 0,181, 4, 2, 0,182, 4,171, 0, 27, 0,164, 0, 0, 0,
-164, 0, 1, 0, 4, 0,179, 4, 7, 0,180, 4,165, 0,181, 4, 2, 0,182, 4, 4, 0,243, 4, 4, 0, 54, 0,169, 0,244, 4,
- 9, 0,245, 4, 12, 0,246, 4, 31, 0, 63, 0, 27, 0, 64, 0, 0, 0,247, 4, 0, 0,248, 4, 0, 0,249, 4, 2, 0,250, 4,
- 2, 0,251, 4, 2, 0,252, 4, 2, 0,253, 4, 2, 0, 47, 0, 2, 0, 46, 0, 2, 0,114, 0, 2, 0,254, 4, 4, 0, 20, 0,
- 7, 0,255, 4, 24, 0, 36, 0,172, 0, 29, 0,164, 0, 0, 0,164, 0, 1, 0, 4, 0,179, 4, 7, 0,180, 4,165, 0,181, 4,
-166, 0,195, 4, 2, 0,182, 4, 2, 0, 0, 5, 2, 0, 1, 5, 2, 0, 2, 5, 2, 0, 3, 5,169, 0,244, 4, 2, 0, 4, 5,
- 2, 0,114, 0, 2, 0,251, 4, 2, 0, 5, 5, 9, 0, 6, 5, 2, 0,135, 4, 0, 0, 7, 5, 0, 0, 8, 5, 2, 0, 9, 5,
- 2, 0, 10, 5, 2, 0,214, 2, 2, 0, 11, 5, 2, 0, 12, 5, 0, 0, 16, 0, 0, 0, 20, 0, 0, 0, 17, 1, 0, 0, 13, 5,
-173, 0, 15, 0,164, 0, 0, 0,164, 0, 1, 0, 4, 0,179, 4, 7, 0,180, 4,165, 0,181, 4, 2, 0,182, 4,169, 0,244, 4,
- 7, 0,221, 1, 7, 0,222, 1, 2, 0, 4, 5, 2, 0,175, 4, 2, 0, 14, 5, 2, 0, 15, 5, 4, 0, 20, 0, 4, 0, 16, 0,
-174, 0, 33, 0,164, 0, 0, 0,164, 0, 1, 0, 4, 0,179, 4, 7, 0,180, 4,165, 0,181, 4, 2, 0,182, 4,175, 0, 16, 5,
- 4, 0, 17, 5, 0, 0, 18, 5, 0, 0, 19, 5, 0, 0, 20, 5, 2, 0, 18, 0, 2, 0, 21, 5, 2, 0, 20, 0, 2, 0, 22, 5,
- 2, 0, 23, 5, 2, 0, 24, 5, 2, 0, 25, 5, 2, 0, 42, 0, 4, 0, 54, 0, 0, 0, 26, 5,176, 0, 27, 5, 2, 0, 28, 5,
- 2, 0, 29, 5, 2, 0, 30, 5, 2, 0,184, 0, 9, 0, 31, 5, 9, 0, 32, 5, 9, 0, 33, 5, 9, 0, 34, 5, 9, 0, 35, 5,
- 2, 0, 36, 5, 0, 0, 37, 5,177, 0, 31, 0,164, 0, 0, 0,164, 0, 1, 0, 4, 0,179, 4, 7, 0,180, 4,165, 0,181, 4,
- 2, 0,182, 4,169, 0,244, 4, 12, 0, 38, 5, 2, 0,251, 4, 2, 0, 39, 5, 2, 0, 20, 0, 2, 0,163, 0, 9, 0, 6, 5,
- 12, 0, 40, 5,178, 0, 41, 5, 0, 0, 42, 5,179, 0, 43, 5, 4, 0, 44, 5, 4, 0, 45, 5, 2, 0, 18, 0, 2, 0, 46, 5,
- 2, 0, 47, 5, 2, 0, 48, 5, 0, 0, 49, 5, 0, 0, 50, 5, 0, 0, 51, 5, 0, 0, 52, 5, 0, 0, 53, 5, 0, 0, 54, 5,
- 2, 0, 55, 5, 0, 0, 73, 2,180, 0, 30, 0,164, 0, 0, 0,164, 0, 1, 0, 4, 0,179, 4, 7, 0,180, 4,165, 0,181, 4,
- 2, 0,182, 4,169, 0,244, 4, 41, 0,102, 2, 40, 0,232, 0, 53, 0,126, 4, 2, 0,242, 0, 2, 0,114, 0, 2, 0, 56, 5,
- 2, 0, 57, 5, 4, 0, 20, 0, 2, 0, 58, 5, 2, 0,254, 4, 2, 0, 59, 5, 2, 0,251, 4, 7, 0,175, 4, 0, 0, 60, 5,
- 0, 0, 61, 5, 0, 0, 73, 2, 7, 0,221, 1, 7, 0,222, 1, 7, 0, 62, 5, 7, 0, 63, 5, 0, 0, 64, 5, 0, 0, 65, 5,
- 50, 0, 66, 5,181, 0, 11, 0,164, 0, 0, 0,164, 0, 1, 0, 4, 0,179, 4, 7, 0,180, 4,165, 0,181, 4, 2, 0,182, 4,
- 2, 0,114, 0, 2, 0,254, 4, 2, 0, 67, 5, 2, 0, 20, 0,169, 0,244, 4,182, 0, 22, 0,164, 0, 0, 0,164, 0, 1, 0,
- 4, 0,179, 4, 7, 0,180, 4,165, 0,181, 4, 2, 0,182, 4, 36, 0, 68, 5, 4, 0, 69, 5, 4, 0, 70, 5, 2, 0, 75, 0,
- 2, 0,114, 0, 4, 0, 71, 5, 4, 0, 72, 5, 4, 0, 73, 5, 4, 0, 74, 5, 4, 0, 75, 5, 4, 0, 76, 5, 4, 0, 77, 5,
- 4, 0, 78, 5, 7, 0, 79, 5, 23, 0, 80, 5, 23, 0, 81, 5,183, 0, 10, 0,164, 0, 0, 0,164, 0, 1, 0, 4, 0,179, 4,
- 7, 0,180, 4,165, 0,181, 4,184, 0, 82, 5, 2, 0, 75, 0, 2, 0,114, 0, 4, 0, 42, 0, 9, 0, 83, 5,185, 0, 8, 0,
-164, 0, 0, 0,164, 0, 1, 0, 4, 0,179, 4, 7, 0,180, 4,165, 0,181, 4,169, 0,244, 4, 4, 0, 20, 0, 4, 0, 84, 5,
-186, 0, 18, 0,164, 0, 0, 0,164, 0, 1, 0, 4, 0,179, 4, 7, 0,180, 4,165, 0,181, 4,169, 0,244, 4, 27, 0, 85, 5,
- 27, 0, 64, 0, 2, 0, 20, 0, 2, 0,114, 0, 7, 0, 86, 5, 9, 0, 87, 5, 7, 0,221, 1, 7, 0,222, 1, 56, 0,117, 1,
- 56, 0, 88, 5, 4, 0, 89, 5, 4, 0, 16, 0,187, 0, 42, 0,164, 0, 0, 0,164, 0, 1, 0, 4, 0,179, 4, 7, 0,180, 4,
-165, 0,181, 4, 2, 0,182, 4,169, 0,244, 4,188, 0, 90, 5, 0, 0, 18, 5, 0, 0, 19, 5, 0, 0, 20, 5, 2, 0, 18, 0,
- 2, 0, 29, 5, 2, 0, 20, 0, 2, 0, 22, 5, 9, 0, 87, 5, 4, 0, 91, 5, 4, 0, 92, 5, 4, 0, 93, 5, 4, 0, 94, 5,
- 23, 0, 95, 5, 23, 0, 96, 5, 7, 0, 97, 5, 7, 0, 98, 5, 7, 0, 99, 5, 7, 0, 86, 5, 2, 0, 28, 5, 2, 0,184, 0,
- 2, 0, 56, 1, 2, 0,100, 5, 2, 0, 16, 0, 2, 0, 42, 0, 2, 0,101, 5, 2, 0,102, 5, 9, 0, 31, 5, 9, 0, 32, 5,
- 9, 0, 33, 5, 9, 0, 34, 5, 9, 0, 35, 5, 2, 0, 36, 5, 0, 0, 37, 5, 50, 0,103, 5,189, 0, 20, 0, 0, 0,104, 5,
- 0, 0,105, 5, 0, 0,106, 5, 0, 0,107, 5, 0, 0,108, 5, 0, 0,109, 5, 0, 0,110, 5, 0, 0,111, 5, 0, 0,112, 5,
- 0, 0,113, 5, 0, 0,114, 5, 0, 0,115, 5, 0, 0,116, 5, 0, 0,117, 5, 0, 0,118, 5, 0, 0,119, 5, 0, 0,120, 5,
- 0, 0,121, 5, 0, 0,157, 0, 0, 0,122, 5,190, 0, 50, 0, 0, 0,123, 5, 0, 0,114, 5, 0, 0,115, 5, 0, 0,124, 5,
- 0, 0,125, 5, 0, 0,126, 5, 0, 0,127, 5, 0, 0,128, 5, 0, 0,129, 5, 0, 0,130, 5, 0, 0,131, 5, 0, 0,132, 5,
- 0, 0,133, 5, 0, 0,134, 5, 0, 0,135, 5, 0, 0,136, 5, 0, 0,137, 5, 0, 0,138, 5, 0, 0,139, 5, 0, 0,140, 5,
- 0, 0,141, 5, 0, 0,142, 5, 0, 0,143, 5, 0, 0,144, 5, 0, 0,145, 5, 0, 0,146, 5, 0, 0,147, 5, 0, 0,148, 5,
- 0, 0,149, 5, 0, 0,150, 5, 0, 0,151, 5, 0, 0,152, 5, 0, 0,153, 5, 0, 0,154, 5, 0, 0,155, 5, 0, 0,156, 5,
- 0, 0,157, 5, 0, 0,158, 5, 0, 0,159, 5, 0, 0,160, 5, 0, 0,161, 5, 0, 0,162, 5, 0, 0,163, 5, 0, 0,164, 5,
- 0, 0,165, 5, 0, 0,166, 5, 0, 0,167, 5, 0, 0,168, 5, 0, 0,169, 5, 0, 0,170, 5,191, 0, 5, 0, 0, 0,171, 5,
- 0, 0,131, 5, 0, 0,133, 5, 2, 0, 20, 0, 2, 0, 16, 0,192, 0, 22, 0,192, 0, 0, 0,192, 0, 1, 0, 0, 0, 17, 0,
-189, 0,172, 5,190, 0,173, 5,190, 0,174, 5,190, 0,175, 5,190, 0,176, 5,190, 0,177, 5,190, 0,178, 5,190, 0,179, 5,
-190, 0,180, 5,190, 0,181, 5,190, 0,182, 5,190, 0,183, 5,190, 0,184, 5,190, 0,185, 5,190, 0,186, 5,190, 0,187, 5,
-191, 0,188, 5, 0, 0,189, 5, 0, 0,190, 5,193, 0, 5, 0, 4, 0, 20, 0, 4, 0, 16, 0, 7, 0, 20, 2, 7, 0,191, 5,
- 7, 0,181, 1,194, 0, 57, 0, 4, 0, 20, 0, 4, 0,192, 5, 4, 0,193, 5, 0, 0,194, 5, 0, 0,195, 5, 0, 0,196, 5,
- 0, 0,197, 5, 0, 0,198, 5, 0, 0,199, 5, 0, 0,200, 5, 0, 0,201, 5, 0, 0,202, 5, 2, 0,203, 5, 2, 0,204, 5,
- 4, 0,205, 5, 4, 0,206, 5, 4, 0,207, 5, 4, 0,208, 5, 2, 0,209, 5, 2, 0,210, 5, 2, 0,211, 5, 2, 0,212, 5,
- 4, 0,213, 5, 4, 0,214, 5, 2, 0,215, 5, 2, 0,216, 5, 2, 0,217, 5, 2, 0,218, 5, 0, 0,219, 5, 12, 0,220, 5,
- 2, 0,221, 5, 2, 0,222, 5, 2, 0,223, 5, 2, 0,224, 5,193, 0,225, 5, 2, 0,226, 5, 2, 0,227, 5, 2, 0,228, 5,
- 2, 0,229, 5, 4, 0,230, 5, 4, 0,231, 5, 4, 0,232, 5, 4, 0,233, 5, 2, 0,234, 5, 2, 0,235, 5, 2, 0,236, 5,
- 2, 0,237, 5, 2, 0,238, 5, 2, 0,239, 5, 2, 0,240, 5, 2, 0,241, 5, 0, 0,242, 5, 0, 0,243, 5, 7, 0,244, 5,
- 2, 0,245, 5, 2, 0,246, 5, 48, 0,247, 5,195, 0, 18, 0, 27, 0, 31, 0, 12, 0,248, 5, 12, 0,249, 5, 12, 0,250, 5,
-160, 0,251, 5, 2, 0,111, 2, 2, 0,252, 5, 2, 0,112, 2, 2, 0,253, 5, 2, 0,254, 5, 2, 0,255, 5, 2, 0, 0, 6,
- 2, 0, 1, 6, 2, 0, 2, 6, 2, 0, 16, 0, 2, 0, 3, 6, 2, 0, 4, 6, 2, 0, 5, 6,196, 0, 5, 0,196, 0, 0, 0,
-196, 0, 1, 0,196, 0, 6, 6, 13, 0, 7, 6, 4, 0, 20, 0,197, 0, 7, 0,197, 0, 0, 0,197, 0, 1, 0,196, 0, 8, 6,
-196, 0, 9, 6, 2, 0, 10, 4, 2, 0, 20, 0, 4, 0, 16, 0,198, 0, 17, 0,198, 0, 0, 0,198, 0, 1, 0, 0, 0, 10, 6,
- 0, 0, 11, 6, 0, 0, 12, 6, 2, 0, 13, 6, 2, 0, 14, 6, 2, 0,254, 5, 2, 0,255, 5, 2, 0, 20, 0, 2, 0, 9, 3,
- 2, 0, 15, 6, 2, 0, 16, 6, 2, 0, 17, 6, 2, 0, 18, 6, 4, 0, 19, 6,198, 0, 20, 6,165, 0, 30, 0,165, 0, 0, 0,
-165, 0, 1, 0,196, 0, 8, 6,196, 0, 9, 6,196, 0, 21, 6,196, 0, 22, 6,195, 0, 23, 6, 7, 0, 24, 6, 23, 0,240, 1,
- 23, 0, 25, 6, 23, 0, 26, 6, 2, 0, 27, 6, 2, 0, 28, 6, 2, 0, 29, 6, 0, 0,179, 4, 0, 0, 30, 6, 2, 0, 31, 6,
- 2, 0, 32, 6, 0, 0, 33, 6, 0, 0, 34, 6, 0, 0, 35, 6, 0, 0, 36, 6, 2, 0, 37, 6, 2, 0, 38, 6, 2, 0, 39, 6,
- 2, 0, 20, 0, 34, 0,102, 0, 12, 0, 40, 6, 12, 0, 41, 6, 12, 0, 42, 6,199, 0, 11, 0, 0, 0, 43, 6, 2, 0, 44, 6,
- 2, 0, 45, 6, 2, 0, 46, 6, 2, 0, 47, 6, 2, 0, 48, 6, 2, 0,252, 3, 9, 0, 49, 6, 9, 0, 50, 6, 4, 0, 51, 6,
- 4, 0, 52, 6,200, 0, 1, 0, 0, 0, 53, 6,201, 0, 8, 0, 50, 0, 54, 6, 50, 0, 55, 6,201, 0, 56, 6,201, 0, 57, 6,
-201, 0, 58, 6, 2, 0,110, 0, 2, 0, 20, 0, 4, 0, 59, 6,202, 0, 4, 0, 4, 0, 69, 5, 4, 0, 60, 6, 4, 0, 73, 5,
- 4, 0, 61, 6,203, 0, 2, 0, 4, 0, 62, 6, 4, 0, 63, 6,204, 0, 7, 0, 7, 0, 64, 6, 7, 0, 65, 6, 7, 0, 66, 6,
- 4, 0, 20, 0, 4, 0, 16, 0, 7, 0,129, 3, 7, 0, 67, 6,205, 0, 1, 0, 0, 0, 19, 5,206, 0, 19, 0,206, 0, 0, 0,
-206, 0, 1, 0, 4, 0,163, 0, 4, 0, 23, 0, 4, 0, 28, 0, 4, 0, 68, 6, 4, 0, 69, 6, 4, 0, 70, 6,200, 0, 71, 6,
- 0, 0, 19, 5, 4, 0, 72, 6, 4, 0, 73, 6,205, 0,189, 2,202, 0, 74, 6,203, 0, 75, 6,204, 0, 76, 6,201, 0, 77, 6,
-201, 0, 78, 6,201, 0, 79, 6,207, 0, 12, 0, 0, 0,144, 1, 9, 0,170, 0, 0, 0,171, 0, 4, 0,174, 0, 4, 0,182, 0,
- 9, 0,175, 0, 7, 0,177, 0, 7, 0,178, 0, 9, 0, 80, 6, 9, 0, 81, 6, 9, 0,179, 0, 9, 0,181, 0,208, 0, 45, 0,
-208, 0, 0, 0,208, 0, 1, 0, 9, 0, 82, 6, 9, 0, 26, 0, 0, 0, 27, 0, 4, 0, 20, 0, 4, 0, 18, 0, 4, 0, 23, 0,
- 4, 0, 74, 2, 4, 0, 83, 6, 4, 0, 84, 6, 4, 0, 69, 6, 4, 0, 70, 6, 4, 0, 85, 6, 4, 0,193, 0, 4, 0, 86, 6,
- 4, 0, 87, 6, 7, 0, 88, 6, 7, 0, 89, 6, 4, 0,107, 0, 4, 0, 90, 6,206, 0, 91, 6, 31, 0, 63, 0,160, 0,251, 5,
- 42, 0,116, 0, 7, 0, 92, 6, 7, 0, 93, 6,207, 0,233, 0,208, 0, 94, 6,208, 0, 95, 6,208, 0, 96, 6, 12, 0, 97, 6,
-209, 0, 98, 6,210, 0, 99, 6, 7, 0,100, 6, 7, 0,101, 6, 4, 0,102, 6, 7, 0,103, 6, 9, 0,104, 6, 4, 0,105, 6,
- 4, 0,106, 6, 4, 0,107, 6, 7, 0,108, 6, 4, 0, 0, 6, 4, 0, 16, 0,211, 0, 4, 0,211, 0, 0, 0,211, 0, 1, 0,
- 12, 0,109, 6,208, 0,110, 6,212, 0, 6, 0, 12, 0,111, 6, 12, 0, 97, 6, 12, 0,112, 6, 2, 0, 20, 0, 2, 0, 16, 0,
- 4, 0,163, 0,213, 0, 4, 0, 7, 0,113, 6, 7, 0, 89, 0, 2, 0,114, 6, 2, 0,115, 6,214, 0, 6, 0, 7, 0,116, 6,
- 7, 0,117, 6, 7, 0,118, 6, 7, 0,119, 6, 4, 0,120, 6, 4, 0,121, 6,215, 0, 12, 0, 7, 0,122, 6, 7, 0,123, 6,
- 7, 0,124, 6, 7, 0,125, 6, 7, 0,126, 6, 7, 0,127, 6, 7, 0,128, 6, 7, 0,129, 6, 7, 0,130, 6, 7, 0,131, 6,
- 4, 0,106, 2, 4, 0,132, 6,216, 0, 2, 0, 7, 0, 68, 4, 7, 0, 16, 0,217, 0, 5, 0, 7, 0,133, 6, 7, 0,134, 6,
- 4, 0, 75, 0, 4, 0, 75, 2, 4, 0,135, 6,218, 0, 6, 0,218, 0, 0, 0,218, 0, 1, 0, 2, 0, 18, 0, 2, 0, 20, 0,
- 2, 0,136, 6, 2, 0,163, 0,219, 0, 8, 0,219, 0, 0, 0,219, 0, 1, 0, 2, 0, 18, 0, 2, 0, 20, 0, 2, 0,136, 6,
- 2, 0,163, 0, 7, 0, 23, 0, 7, 0,107, 0,220, 0, 45, 0,220, 0, 0, 0,220, 0, 1, 0, 2, 0, 18, 0, 2, 0, 20, 0,
- 2, 0,136, 6, 2, 0,189, 0, 2, 0, 55, 3, 2, 0,137, 6, 7, 0,138, 6, 7, 0,139, 6, 7, 0,118, 2, 4, 0,140, 6,
- 4, 0, 65, 0, 4, 0, 77, 2, 7, 0,141, 6, 7, 0,142, 6, 7, 0,143, 6, 7, 0,144, 6, 7, 0,145, 6, 7, 0,146, 6,
- 7, 0,116, 2, 7, 0,231, 0, 7, 0,147, 6, 7, 0,148, 6, 7, 0, 16, 0, 7, 0,149, 6, 7, 0,150, 6, 7, 0,151, 6,
- 2, 0,152, 6, 2, 0,153, 6, 2, 0,154, 6, 2, 0,155, 6, 2, 0,156, 6, 2, 0,157, 6, 2, 0,158, 6, 2, 0,159, 6,
- 2, 0,226, 4, 2, 0,160, 6, 2, 0,165, 1, 2, 0,161, 6, 0, 0,162, 6, 0, 0,163, 6, 7, 0,187, 0,221, 0,164, 6,
- 57, 0,118, 1,222, 0, 16, 0,222, 0, 0, 0,222, 0, 1, 0, 2, 0, 18, 0, 2, 0, 20, 0, 2, 0,136, 6, 2, 0,189, 0,
- 7, 0,111, 2, 7, 0,112, 2, 7, 0,113, 2, 7, 0,208, 1, 7, 0,114, 2, 7, 0,115, 2, 7, 0,165, 6, 7, 0,116, 2,
- 7, 0,117, 2, 7, 0,118, 2,179, 0, 5, 0, 2, 0, 18, 0, 2, 0, 59, 6, 2, 0, 20, 0, 2, 0,166, 6, 27, 0, 85, 5,
-178, 0, 3, 0, 4, 0, 53, 0, 4, 0,167, 6,179, 0, 2, 0,223, 0, 12, 0,223, 0, 0, 0,223, 0, 1, 0, 2, 0, 18, 0,
- 2, 0, 20, 0, 2, 0,229, 2, 2, 0,180, 1, 7, 0, 5, 0, 7, 0, 6, 0, 7, 0,168, 6, 7, 0,169, 6, 27, 0, 85, 5,
- 12, 0,170, 6,224, 0, 11, 0,224, 0, 0, 0,224, 0, 1, 0, 0, 0, 17, 0, 2, 0, 18, 0, 2, 0,171, 6, 4, 0, 22, 0,
- 4, 0,172, 6, 2, 0, 20, 0, 2, 0, 16, 0, 9, 0,173, 6, 9, 0,174, 6,225, 0, 5, 0, 0, 0, 17, 0, 7, 0,245, 0,
- 7, 0,175, 6, 4, 0,176, 6, 4, 0, 16, 0,226, 0, 4, 0, 2, 0, 18, 0, 2, 0, 20, 0, 2, 0, 42, 0, 2, 0, 54, 0,
-227, 0, 4, 0, 0, 0, 17, 0, 55, 0,177, 6, 7, 0,245, 0, 7, 0, 16, 0,228, 0, 6, 0, 2, 0,178, 6, 2, 0,179, 6,
- 2, 0, 18, 0, 2, 0,180, 6, 0, 0,181, 6, 0, 0,182, 6,229, 0, 5, 0, 4, 0, 18, 0, 4, 0, 16, 0, 0, 0, 17, 0,
- 0, 0,183, 6, 0, 0,184, 6,230, 0, 6, 0, 0, 0, 17, 0, 0, 0,185, 6, 2, 0,186, 6, 2, 0,116, 2, 2, 0,242, 0,
- 2, 0, 54, 0,231, 0, 5, 0, 0, 0, 17, 0, 7, 0, 89, 0, 7, 0,131, 3, 2, 0, 20, 0, 2, 0, 88, 2,232, 0, 3, 0,
- 0, 0, 17, 0, 4, 0, 77, 2, 4, 0,187, 6,233, 0, 7, 0, 0, 0, 17, 0, 7, 0,131, 3, 0, 0,188, 6, 0, 0,189, 6,
- 2, 0,242, 0, 2, 0, 42, 0, 4, 0,190, 6,234, 0, 3, 0, 39, 0,191, 6, 0, 0,192, 6, 0, 0,193, 6,235, 0, 17, 0,
-235, 0, 0, 0,235, 0, 1, 0, 2, 0, 18, 0, 2, 0,171, 6, 2, 0, 20, 0, 2, 0,194, 6, 2, 0,195, 6, 2, 0,196, 6,
- 2, 0, 42, 0, 2, 0, 54, 0, 0, 0, 17, 0, 9, 0, 2, 0,236, 0,197, 6, 39, 0,241, 0, 2, 0, 74, 4, 2, 0,198, 6,
- 4, 0, 16, 0,237, 0, 10, 0, 0, 0, 17, 0, 2, 0, 18, 0, 2, 0, 16, 0, 4, 0, 88, 2, 4, 0,199, 6, 4, 0,200, 6,
- 4, 0,201, 6, 4, 0,202, 6, 4, 0,203, 6, 4, 0,204, 6,238, 0, 1, 0, 0, 0,205, 6,239, 0, 1, 0, 36, 0, 68, 5,
-236, 0, 18, 0,236, 0, 0, 0,236, 0, 1, 0,236, 0,206, 6, 2, 0, 18, 0, 2, 0, 20, 0, 2, 0,207, 6, 2, 0,196, 6,
- 2, 0,171, 6, 2, 0,208, 6, 2, 0, 54, 0, 2, 0,253, 0, 0, 0, 17, 0, 9, 0, 2, 0,240, 0,197, 6,235, 0,209, 6,
- 2, 0, 15, 0, 2, 0,210, 6, 4, 0, 76, 3,241, 0, 3, 0, 4, 0,140, 2, 4, 0, 16, 0, 39, 0,241, 0,242, 0, 10, 0,
-130, 0,211, 6, 2, 0, 18, 0, 2, 0, 20, 0, 4, 0,138, 6, 4, 0,139, 6, 0, 0, 17, 0, 4, 0,212, 6, 2, 0,213, 6,
- 2, 0,214, 6, 7, 0,215, 6,243, 0, 10, 0, 2, 0, 20, 0, 2, 0,216, 6, 4, 0,138, 6, 4, 0,139, 6, 2, 0,217, 6,
-209, 0, 98, 6, 2, 0, 18, 0, 2, 0,218, 6, 2, 0,219, 6, 2, 0,220, 6,244, 0, 7, 0, 2, 0, 20, 0, 2, 0,216, 6,
- 4, 0,138, 6, 4, 0,139, 6, 2, 0, 18, 0, 2, 0,221, 6, 7, 0,222, 6,245, 0, 9, 0, 4, 0,140, 2, 2, 0, 18, 0,
- 2, 0, 20, 0, 39, 0,241, 0, 72, 0,223, 6, 0, 0, 17, 0, 7, 0,224, 6, 2, 0,225, 6, 2, 0, 16, 0,246, 0, 5, 0,
- 2, 0, 18, 0, 2, 0, 20, 0, 4, 0, 16, 0,160, 0,251, 5, 39, 0,145, 4,247, 0, 5, 0, 4, 0, 20, 0, 4, 0, 18, 0,
- 0, 0, 17, 0, 0, 0,183, 6, 39, 0,241, 0,248, 0, 10, 0, 4, 0, 20, 0, 4, 0, 18, 0, 7, 0,226, 6, 7, 0,227, 6,
- 7, 0,236, 0, 7, 0,237, 0, 7, 0,198, 2, 7, 0,201, 2, 7, 0,228, 6, 7, 0,229, 6,249, 0, 9, 0, 2, 0, 20, 0,
- 2, 0, 18, 0, 4, 0,138, 6, 4, 0,139, 6, 0, 0, 17, 0, 2, 0, 42, 0, 2, 0, 45, 0, 2, 0,230, 6, 2, 0,231, 6,
-250, 0, 8, 0, 39, 0,241, 0, 7, 0,113, 2, 7, 0,232, 6, 7, 0,233, 6, 7, 0,108, 2, 2, 0, 20, 0, 2, 0, 88, 2,
- 7, 0,234, 6,251, 0, 7, 0, 2, 0, 20, 0, 2, 0,116, 2, 7, 0,235, 6, 7, 0,236, 6, 7, 0,237, 6, 7, 0,238, 6,
- 7, 0,239, 6,252, 0, 10, 0, 2, 0, 20, 0, 2, 0, 18, 0, 4, 0,138, 6, 4, 0,139, 6, 0, 0, 17, 0, 2, 0,157, 0,
- 2, 0, 45, 0, 2, 0,230, 6, 2, 0,231, 6, 57, 0,118, 1,253, 0, 7, 0, 4, 0, 77, 2, 4, 0,240, 6, 4, 0,241, 6,
- 4, 0,242, 6, 7, 0,243, 6, 7, 0,244, 6, 0, 0,188, 6,254, 0, 7, 0, 0, 0,245, 6, 39, 0,246, 6, 0, 0,192, 6,
- 2, 0,247, 6, 2, 0, 42, 0, 4, 0, 54, 0, 0, 0,193, 6,255, 0, 6, 0, 2, 0, 20, 0, 2, 0, 18, 0, 4, 0,138, 6,
- 4, 0,139, 6, 0, 0,248, 6, 0, 0,249, 6, 0, 1, 1, 0, 4, 0, 20, 0, 1, 1, 6, 0, 0, 0,153, 5, 2, 0, 18, 0,
- 2, 0, 20, 0, 4, 0,250, 6, 7, 0,251, 6, 36, 0, 68, 5,240, 0, 10, 0,240, 0, 0, 0,240, 0, 1, 0,240, 0,206, 6,
- 2, 0, 18, 0, 2, 0, 20, 0, 2, 0,171, 6, 2, 0,252, 6, 0, 0, 17, 0, 9, 0, 2, 0, 39, 0,241, 0, 2, 1, 10, 0,
- 7, 0,223, 2, 7, 0,253, 6, 7, 0,254, 6, 7, 0,255, 6, 7, 0, 0, 7, 4, 0, 20, 0, 7, 0, 1, 7, 7, 0, 2, 7,
- 7, 0, 3, 7, 7, 0, 16, 0,209, 0, 20, 0, 27, 0, 31, 0, 0, 0,169, 0, 3, 1, 4, 7, 9, 0, 5, 7, 37, 0,128, 0,
- 37, 0, 6, 7, 9, 0, 7, 7, 31, 0, 63, 0, 7, 0,222, 6, 7, 0, 8, 7, 7, 0, 9, 7, 7, 0, 10, 7, 7, 0, 11, 7,
- 7, 0, 12, 7, 7, 0, 13, 7, 4, 0, 75, 0, 4, 0, 14, 7, 0, 0, 15, 7, 0, 0, 16, 7, 0, 0, 17, 7, 4, 1, 6, 0,
- 27, 0, 31, 0, 7, 0, 18, 7, 7, 0, 19, 7, 7, 0, 20, 7, 2, 0, 21, 7, 2, 0, 22, 7, 5, 1, 14, 0,164, 0, 0, 0,
-164, 0, 1, 0, 4, 0,179, 4, 7, 0,180, 4,165, 0,181, 4,169, 0,244, 4,209, 0, 98, 6, 2, 0,242, 0, 2, 0,216, 6,
- 2, 0,221, 1, 2, 0,222, 1, 2, 0, 20, 0, 2, 0,254, 4, 4, 0, 54, 0, 6, 1, 6, 0, 6, 1, 0, 0, 6, 1, 1, 0,
- 39, 0,241, 0, 9, 0, 23, 7, 4, 0,194, 0, 4, 0, 16, 0, 57, 0, 4, 0, 27, 0, 31, 0, 12, 0, 24, 7, 4, 0,112, 0,
- 4, 0, 16, 0, 7, 1, 25, 0, 7, 1, 0, 0, 7, 1, 1, 0, 7, 1, 37, 0, 12, 0, 25, 7, 0, 0, 17, 0, 7, 0, 26, 7,
- 7, 0, 27, 7, 7, 0, 28, 7, 7, 0, 29, 7, 4, 0, 20, 0, 7, 0, 30, 7, 7, 0, 31, 7, 7, 0, 32, 7, 7, 0,245, 0,
- 7, 0,173, 1, 7, 0, 33, 7, 7, 0, 75, 2, 7, 0, 34, 7, 7, 0, 35, 7, 7, 0, 36, 7, 7, 0, 37, 7, 7, 0, 38, 7,
- 7, 0,151, 0, 2, 0,112, 0, 2, 0, 90, 4, 8, 1, 19, 0, 27, 0, 31, 0, 12, 0, 39, 7, 12, 0, 40, 7, 4, 0, 20, 0,
- 4, 0,173, 3, 2, 0,119, 2, 2, 0, 41, 7, 2, 0,112, 0, 2, 0, 42, 7, 2, 0, 43, 7, 2, 0, 44, 7, 2, 0, 45, 7,
- 2, 0, 46, 7, 4, 0, 47, 7, 4, 0, 48, 7, 4, 0, 49, 7, 4, 0, 50, 7, 4, 0, 51, 7, 4, 0, 52, 7, 9, 1, 34, 0,
- 9, 1, 0, 0, 9, 1, 1, 0, 12, 0,247, 2, 0, 0, 17, 0, 2, 0, 20, 0, 2, 0, 53, 7, 2, 0, 54, 7, 2, 0, 55, 7,
- 2, 0,212, 2, 2, 0, 56, 7, 4, 0,206, 1, 4, 0, 49, 7, 4, 0, 50, 7, 7, 1, 57, 7, 9, 1, 37, 0, 9, 1, 58, 7,
- 12, 0, 59, 7, 9, 0, 60, 7, 9, 0, 61, 7, 9, 0, 62, 7, 7, 0,236, 0, 7, 0,151, 0, 7, 0,155, 1, 7, 0, 63, 7,
- 7, 0, 64, 7, 7, 0,204, 2, 7, 0, 65, 7, 7, 0, 66, 7, 7, 0, 67, 7, 7, 0, 68, 7, 7, 0, 69, 7, 7, 0, 70, 7,
- 7, 0,203, 1, 39, 0, 71, 7,131, 0, 9, 0, 12, 0, 72, 7, 2, 0, 20, 0, 2, 0, 73, 7, 7, 0,222, 2, 7, 0, 74, 7,
- 7, 0, 75, 7, 12, 0, 76, 7, 4, 0, 77, 7, 4, 0, 16, 0, 10, 1, 6, 0, 10, 1, 0, 0, 10, 1, 1, 0, 4, 0, 20, 0,
- 4, 0, 78, 7, 0, 0, 17, 0, 12, 0, 15, 7, 11, 1, 8, 0, 11, 1, 0, 0, 11, 1, 1, 0, 10, 1, 79, 7, 31, 0, 63, 0,
- 12, 0,195, 2, 4, 0, 20, 0, 0, 0, 17, 0, 4, 0, 80, 7,130, 0, 6, 0, 27, 0, 31, 0, 12, 0, 72, 7, 12, 0, 81, 7,
- 12, 0,166, 4, 4, 0, 82, 7, 4, 0, 16, 0, 12, 1, 15, 0,164, 0, 0, 0,164, 0, 1, 0, 4, 0,179, 4, 7, 0,180, 4,
-165, 0,181, 4, 2, 0,182, 4,169, 0,244, 4,130, 0,192, 2, 2, 0, 20, 0, 2, 0, 67, 5, 2, 0,251, 4, 2, 0, 83, 7,
- 2, 0,254, 4, 2, 0, 84, 7, 7, 0, 85, 7, 13, 1, 5, 0, 13, 1, 0, 0, 13, 1, 1, 0, 31, 0, 63, 0, 2, 0, 20, 0,
- 0, 0, 86, 7, 14, 1, 12, 0, 14, 1, 0, 0, 14, 1, 1, 0, 9, 0, 2, 0, 2, 0, 18, 0, 2, 0, 20, 0, 0, 0, 87, 7,
- 0, 0, 88, 7, 0, 0, 86, 7, 7, 0, 89, 7, 7, 0, 90, 7, 4, 0, 16, 0, 31, 0, 63, 0, 15, 1, 9, 0, 15, 1, 0, 0,
- 15, 1, 1, 0, 39, 0, 91, 7, 0, 0, 92, 7, 7, 0, 93, 7, 2, 0, 94, 7, 2, 0, 20, 0, 2, 0, 18, 0, 2, 0, 16, 0,
- 16, 1, 7, 0, 36, 0, 68, 5, 26, 0, 95, 7, 4, 0, 20, 0, 4, 0, 96, 7, 12, 0, 97, 7, 39, 0, 91, 7, 0, 0, 92, 7,
- 17, 1, 12, 0, 39, 0, 91, 7, 2, 0, 98, 7, 2, 0, 20, 0, 2, 0, 99, 7, 2, 0,100, 7, 0, 0, 92, 7, 39, 0,101, 7,
- 0, 0,102, 7, 7, 0,103, 7, 7, 0,173, 1, 7, 0,104, 7, 7, 0,105, 7, 18, 1, 6, 0, 39, 0, 91, 7, 4, 0, 80, 7,
- 4, 0,106, 7, 4, 0, 75, 0, 4, 0, 16, 0, 0, 0, 92, 7, 19, 1, 4, 0, 39, 0, 91, 7, 4, 0, 20, 0, 4, 0, 80, 7,
- 0, 0, 92, 7, 20, 1, 4, 0, 39, 0, 91, 7, 4, 0, 20, 0, 4, 0, 80, 7, 0, 0, 92, 7, 21, 1, 10, 0, 39, 0, 91, 7,
- 4, 0,107, 7, 7, 0,106, 0, 4, 0, 20, 0, 2, 0, 61, 5, 2, 0,108, 7, 2, 0, 42, 0, 2, 0, 54, 0, 7, 0,109, 7,
- 0, 0, 92, 7, 22, 1, 4, 0, 39, 0, 91, 7, 4, 0, 20, 0, 4, 0, 80, 7, 0, 0, 92, 7, 23, 1, 10, 0, 39, 0, 91, 7,
- 2, 0, 18, 0, 2, 0, 61, 3, 4, 0, 74, 2, 4, 0,139, 6, 7, 0,232, 6, 7, 0,233, 6, 4, 0, 16, 0,130, 0,211, 6,
- 0, 0, 92, 7, 24, 1, 4, 0, 39, 0, 91, 7, 4, 0,209, 2, 4, 0,110, 7, 0, 0, 92, 7, 25, 1, 5, 0, 39, 0, 91, 7,
- 7, 0,106, 0, 4, 0,111, 7, 4, 0,209, 2, 4, 0,210, 2, 26, 1, 6, 0, 39, 0, 91, 7, 4, 0,112, 7, 4, 0,113, 7,
- 7, 0,114, 7, 7, 0,115, 7, 0, 0, 92, 7, 27, 1, 16, 0, 39, 0, 91, 7, 39, 0, 58, 7, 4, 0, 18, 0, 7, 0,116, 7,
- 7, 0,117, 7, 7, 0,118, 7, 7, 0,119, 7, 7, 0,120, 7, 7, 0,121, 7, 7, 0,122, 7, 7, 0,123, 7, 7, 0,124, 7,
- 2, 0, 20, 0, 2, 0, 16, 0, 2, 0, 42, 0, 2, 0, 54, 0, 28, 1, 3, 0, 39, 0, 91, 7, 4, 0, 20, 0, 4, 0,226, 4,
- 29, 1, 5, 0, 39, 0, 91, 7, 4, 0, 20, 0, 4, 0, 16, 0, 7, 0,125, 7, 0, 0, 92, 7, 30, 1, 10, 0, 39, 0, 91, 7,
- 0, 0, 92, 7, 2, 0,126, 7, 2, 0,127, 7, 0, 0,128, 7, 0, 0,129, 7, 7, 0,130, 7, 7, 0,131, 7, 7, 0,132, 7,
- 7, 0,133, 7, 31, 1, 8, 0, 7, 0, 9, 0, 7, 0, 10, 0, 7, 0, 11, 0, 7, 0, 12, 0, 7, 0,134, 7, 7, 0,135, 7,
- 2, 0, 20, 0, 2, 0,226, 4, 32, 1, 8, 0, 7, 0, 9, 0, 7, 0, 10, 0, 7, 0, 11, 0, 7, 0, 12, 0, 7, 0,134, 7,
- 7, 0,135, 7, 2, 0, 20, 0, 2, 0,226, 4, 33, 1, 8, 0, 7, 0, 9, 0, 7, 0, 10, 0, 7, 0, 11, 0, 7, 0, 12, 0,
- 7, 0,134, 7, 7, 0,135, 7, 2, 0, 20, 0, 2, 0,226, 4, 34, 1, 7, 0, 39, 0, 91, 7, 0, 0, 92, 7, 7, 0,245, 0,
- 7, 0, 0, 1, 2, 0, 20, 0, 2, 0,242, 0, 4, 0, 16, 0, 35, 1, 10, 0, 35, 1, 0, 0, 35, 1, 1, 0, 2, 0, 18, 0,
- 2, 0, 20, 0, 0, 0,136, 7, 7, 0,196, 0, 7, 0,197, 0, 2, 0, 15, 7, 2, 0,137, 7, 39, 0,241, 0, 36, 1, 22, 0,
- 36, 1, 0, 0, 36, 1, 1, 0, 2, 0, 20, 0, 2, 0,242, 0, 2, 0,138, 7, 2, 0,139, 7, 31, 0, 63, 0,130, 0,211, 6,
- 39, 0,143, 0, 7, 0, 74, 2, 7, 0,139, 6, 7, 0,140, 7, 7, 0,141, 7, 7, 0,142, 7, 7, 0,143, 7, 7, 0,109, 2,
- 7, 0,145, 1, 7, 0,212, 6, 7, 0,144, 7, 0, 0,145, 7, 0, 0,146, 7, 12, 0,197, 2, 37, 1, 8, 0, 7, 0,181, 1,
- 7, 0,232, 6, 7, 0,233, 6, 9, 0, 2, 0, 2, 0,147, 7, 2, 0,148, 7, 2, 0,149, 7, 2, 0,150, 7, 38, 1, 17, 0,
- 38, 1, 0, 0, 38, 1, 1, 0, 0, 0, 17, 0, 37, 1,151, 7, 2, 0, 18, 0, 2, 0, 20, 0, 2, 0,152, 7, 2, 0,153, 7,
- 2, 0,154, 7, 2, 0,155, 7, 4, 0, 42, 0, 7, 0,156, 7, 7, 0,157, 7, 4, 0,158, 7, 4, 0,159, 7, 38, 1,160, 7,
- 39, 1,161, 7, 40, 1, 30, 0, 40, 1, 0, 0, 40, 1, 1, 0, 40, 1,162, 7, 0, 0, 17, 0, 0, 0,163, 7, 2, 0, 18, 0,
- 2, 0, 20, 0, 2, 0, 68, 6, 2, 0,100, 6, 2, 0,164, 7, 2, 0,114, 0, 2, 0,153, 7, 2, 0, 59, 6, 12, 0,207, 6,
- 12, 0,165, 7, 27, 0, 85, 5, 9, 0,166, 7, 7, 0,156, 7, 7, 0,157, 7, 7, 0,208, 1, 7, 0,167, 7, 2, 0,168, 7,
- 2, 0,169, 7, 2, 0,170, 7, 2, 0,171, 7, 24, 0,172, 7, 24, 0,173, 7, 24, 0,174, 7, 41, 1,129, 0, 42, 1,175, 7,
- 39, 1, 6, 0, 39, 1, 0, 0, 39, 1, 1, 0, 40, 1,176, 7, 40, 1,177, 7, 38, 1,178, 7, 38, 1,160, 7, 56, 0, 15, 0,
- 27, 0, 31, 0, 12, 0,179, 7, 12, 0,180, 7, 37, 1,181, 7, 4, 0, 18, 0, 4, 0,182, 7, 4, 0,183, 7, 4, 0,184, 7,
- 12, 0,185, 7, 42, 1,186, 7, 38, 1,187, 7, 38, 1,188, 7, 9, 0,189, 7, 9, 0,190, 7, 4, 0,191, 7, 43, 1, 6, 0,
- 4, 0,105, 0, 4, 0,107, 0, 4, 0, 59, 6, 0, 0,192, 7, 0, 0,193, 7, 2, 0, 16, 0, 44, 1, 16, 0, 2, 0,254, 5,
- 2, 0,255, 5, 2, 0,194, 7, 2, 0,254, 6, 2, 0,195, 7, 2, 0, 52, 0, 7, 0,108, 2, 7, 0,196, 7, 7, 0,197, 7,
- 2, 0, 4, 1, 0, 0,198, 7, 0, 0,185, 3, 2, 0,199, 7, 2, 0, 16, 0, 4, 0,200, 7, 4, 0,201, 7, 45, 1, 9, 0,
- 7, 0,202, 7, 7, 0,203, 7, 7, 0, 13, 7, 7, 0, 89, 0, 7, 0,204, 7, 7, 0,175, 4, 2, 0,205, 7, 0, 0,206, 7,
- 0, 0, 16, 0, 46, 1, 4, 0, 7, 0,207, 7, 7, 0,208, 7, 2, 0,205, 7, 2, 0, 16, 0, 47, 1, 3, 0, 7, 0,209, 7,
- 7, 0,210, 7, 7, 0, 15, 0, 48, 1, 7, 0, 0, 0,144, 1, 2, 0,254, 3, 2, 0,255, 3, 2, 0, 0, 4, 2, 0,205, 3,
- 4, 0,107, 0, 4, 0, 59, 3, 49, 1, 7, 0, 7, 0,211, 7, 7, 0,212, 7, 7, 0,213, 7, 7, 0,217, 1, 7, 0,214, 7,
- 7, 0,215, 7, 7, 0,216, 7, 50, 1, 4, 0, 2, 0,217, 7, 2, 0,218, 7, 2, 0,219, 7, 2, 0,220, 7, 51, 1, 2, 0,
- 7, 0, 5, 0, 7, 0, 6, 0, 52, 1, 2, 0, 0, 0,145, 0, 0, 0,221, 7, 53, 1, 1, 0, 0, 0, 17, 0, 54, 1, 10, 0,
- 0, 0,222, 7, 0, 0,223, 7, 0, 0,224, 7, 0, 0,225, 7, 2, 0,194, 7, 2, 0,226, 7, 7, 0,227, 7, 7, 0,228, 7,
- 7, 0,229, 7, 7, 0,145, 1, 55, 1, 2, 0, 9, 0,230, 7, 9, 0,231, 7, 56, 1, 11, 0, 0, 0, 0, 4, 0, 0, 18, 0,
- 0, 0,205, 7, 0, 0, 89, 0, 0, 0,232, 7, 0, 0, 86, 0, 0, 0, 42, 2, 7, 0,233, 7, 7, 0,234, 7, 7, 0,235, 7,
- 7, 0,236, 7, 57, 1, 8, 0, 7, 0,178, 6, 7, 0,106, 0, 7, 0,185, 3, 7, 0, 37, 2, 7, 0,237, 7, 7, 0,183, 0,
- 7, 0,238, 7, 4, 0, 18, 0, 58, 1, 4, 0, 2, 0,239, 7, 2, 0,240, 7, 2, 0,241, 7, 2, 0, 16, 0, 59, 1, 4, 0,
- 7, 0, 5, 0, 7, 0, 6, 0, 2, 0, 20, 0, 2, 0,242, 7, 60, 1, 10, 0, 2, 0, 41, 3, 2, 0, 20, 0, 7, 0,131, 3,
- 7, 0,243, 7, 7, 0,244, 7, 7, 0,245, 7, 7, 0,246, 7, 59, 1,247, 7, 59, 1,248, 7, 59, 1,249, 7, 53, 0, 9, 0,
- 4, 0, 20, 0, 4, 0, 45, 0, 24, 0,250, 7, 24, 0,251, 7, 60, 1,252, 7, 7, 0,253, 7, 7, 0,254, 7, 7, 0,255, 7,
- 7, 0, 0, 8, 61, 1, 4, 0, 41, 0,102, 2, 7, 0, 1, 8, 7, 0, 46, 1, 7, 0, 16, 0,152, 0, 13, 0, 27, 0, 31, 0,
- 2, 0, 20, 0, 2, 0,176, 4, 4, 0, 86, 0, 7, 0, 2, 8, 7, 0,214, 1, 7, 0, 3, 8, 7, 0, 4, 8, 7, 0, 46, 1,
- 2, 0, 17, 1, 2, 0, 16, 0, 44, 0, 31, 1, 61, 1, 5, 8, 62, 1, 8, 0, 4, 0, 18, 0, 4, 0,106, 0, 4, 0, 20, 0,
- 4, 0, 9, 3, 4, 0, 6, 8, 0, 0,153, 5, 0, 0, 17, 0, 9, 0, 2, 0, 82, 0, 5, 0, 62, 1, 7, 8, 4, 0, 8, 8,
- 4, 0, 9, 8, 4, 0, 10, 8, 4, 0, 16, 0, 63, 1, 5, 0, 7, 0, 33, 2, 7, 0,140, 2, 7, 0,173, 1, 2, 0, 11, 8,
- 2, 0, 16, 0, 64, 1, 5, 0, 7, 0, 33, 2, 7, 0, 12, 8, 7, 0, 13, 8, 7, 0, 14, 8, 7, 0,140, 2, 65, 1, 7, 0,
- 4, 0, 15, 8, 4, 0, 16, 8, 4, 0, 17, 8, 7, 0, 18, 8, 7, 0, 19, 8, 7, 0, 20, 8, 7, 0, 21, 8, 66, 1, 25, 0,
- 39, 0, 22, 8, 64, 1, 23, 8, 63, 1, 24, 8, 64, 1,164, 6, 7, 0, 25, 8, 7, 0, 26, 8, 7, 0, 27, 8, 7, 0, 28, 8,
- 7, 0, 19, 8, 7, 0, 20, 8, 7, 0,140, 2, 7, 0,118, 2, 7, 0, 29, 8, 7, 0, 30, 8, 7, 0, 86, 0, 7, 0, 31, 8,
- 4, 0, 15, 8, 4, 0, 32, 8, 4, 0, 16, 0, 4, 0, 65, 0, 4, 0, 33, 8, 2, 0, 20, 0, 2, 0, 34, 8, 2, 0, 35, 8,
- 2, 0, 39, 3, 67, 1,111, 0, 27, 0, 31, 0, 4, 0, 20, 0, 2, 0, 18, 0, 2, 0,126, 7, 2, 0, 36, 8, 2, 0, 37, 8,
- 2, 0, 38, 8, 2, 0, 39, 8, 2, 0, 40, 8, 2, 0, 41, 8, 2, 0, 42, 8, 2, 0, 43, 8, 2, 0, 44, 8, 2, 0, 45, 8,
- 2, 0, 46, 8, 2, 0, 47, 8, 2, 0, 48, 8, 2, 0, 49, 8, 2, 0, 50, 8, 2, 0,165, 1, 2, 0,157, 6, 2, 0,132, 6,
- 2, 0, 51, 8, 2, 0, 52, 8, 2, 0, 37, 3, 2, 0, 38, 3, 2, 0, 53, 8, 2, 0, 54, 8, 2, 0, 55, 8, 2, 0, 56, 8,
- 2, 0, 57, 8, 2, 0, 58, 8, 7, 0, 59, 8, 7, 0, 60, 8, 7, 0, 61, 8, 2, 0, 62, 8, 2, 0, 63, 8, 7, 0, 64, 8,
- 7, 0, 65, 8, 7, 0, 66, 8, 7, 0,138, 6, 7, 0,139, 6, 7, 0,118, 2, 7, 0,145, 6, 7, 0, 67, 8, 7, 0, 68, 8,
- 7, 0, 69, 8, 7, 0, 70, 8, 7, 0,163, 0, 4, 0,140, 6, 4, 0,137, 6, 4, 0, 71, 8, 7, 0,141, 6, 7, 0,142, 6,
- 7, 0,143, 6, 7, 0, 72, 8, 7, 0, 73, 8, 7, 0, 74, 8, 7, 0, 75, 8, 7, 0, 76, 8, 7, 0, 77, 8, 7, 0, 78, 8,
- 7, 0, 79, 8, 7, 0,223, 2, 7, 0, 86, 0, 7, 0, 80, 8, 7, 0, 81, 8, 7, 0, 82, 8, 7, 0, 83, 8, 7, 0, 84, 8,
- 7, 0, 85, 8, 7, 0, 75, 2, 7, 0, 86, 8, 7, 0, 87, 8, 4, 0, 88, 8, 4, 0, 89, 8, 7, 0, 90, 8, 7, 0, 91, 8,
- 7, 0, 92, 8, 7, 0, 93, 8, 7, 0, 94, 8, 7, 0, 95, 8, 7, 0, 96, 8, 7, 0, 97, 8, 7, 0, 33, 3, 7, 0, 31, 3,
- 7, 0, 32, 3, 7, 0, 98, 8, 7, 0, 99, 8, 7, 0,100, 8, 7, 0,101, 8, 7, 0,102, 8, 7, 0,103, 8, 7, 0,104, 8,
- 7, 0,105, 8, 7, 0,106, 8, 7, 0,107, 8, 7, 0,108, 8, 7, 0,109, 8, 7, 0,110, 8, 7, 0,111, 8, 7, 0,112, 8,
- 7, 0,113, 8, 7, 0,114, 8, 0, 0,115, 8, 57, 0,253, 2, 57, 0,116, 8, 39, 0,117, 8, 39, 0,118, 8, 31, 0, 63, 0,
-132, 0,251, 2,124, 0, 34, 0,124, 0, 0, 0,124, 0, 1, 0, 67, 1,119, 8, 66, 1, 40, 3, 65, 1, 58, 7, 68, 1,120, 8,
- 69, 1,121, 8, 69, 1,122, 8,133, 0,252, 2, 39, 0,123, 8, 39, 0,124, 8, 39, 0,125, 8, 12, 0,126, 8, 12, 0,127, 8,
- 7, 0,187, 0, 7, 0,226, 3, 4, 0, 77, 2, 4, 0, 20, 0, 4, 0,140, 6, 4, 0,128, 8, 4, 0,129, 8, 4, 0,130, 8,
- 4, 0,163, 0, 2, 0,194, 0, 2, 0,131, 8, 2, 0,132, 8, 2, 0,133, 8, 2, 0,245, 2, 2, 0,134, 8, 0, 0,135, 8,
- 2, 0,136, 8, 2, 0,137, 8, 2, 0,138, 8, 9, 0,139, 8,115, 0, 39, 0, 2, 0,140, 8, 2, 0,141, 8, 7, 0, 52, 3,
- 4, 0,142, 8, 7, 0,143, 8, 7, 0,144, 8, 4, 0,145, 8, 7, 0,134, 3, 7, 0,146, 8, 7, 0,147, 8, 7, 0,146, 8,
- 7, 0,229, 2, 7, 0,223, 2, 7, 0,148, 8, 7, 0,216, 1, 7, 0,149, 8, 7, 0,150, 8, 4, 0, 75, 0, 2, 0,151, 8,
- 2, 0,152, 8, 7, 0, 53, 3, 7, 0,153, 8, 7, 0,154, 8, 7, 0,155, 8, 70, 1,156, 8, 7, 0, 54, 3, 4, 0, 51, 3,
- 7, 0, 50, 3, 4, 0,157, 8, 4, 0,119, 0, 4, 0,158, 8, 4, 0,159, 8, 4, 0,160, 8, 4, 0,161, 8, 7, 0,162, 8,
- 7, 0,163, 8, 7, 0,164, 8, 4, 0,165, 8, 7, 0,166, 8,116, 0, 8, 0, 7, 0,167, 8, 7, 0,168, 8, 7, 0,119, 1,
- 2, 0,169, 8, 2, 0,170, 8, 70, 1,171, 8, 4, 0, 75, 0, 7, 0,172, 8,114, 0, 13, 0, 71, 1, 51, 2, 70, 1,173, 8,
- 4, 0,138, 2, 4, 0,174, 8, 4, 0,139, 2, 0, 0,175, 8, 0, 0, 54, 0, 2, 0,253, 0,118, 0,141, 2, 73, 0,137, 2,
- 72, 1,176, 8, 72, 1,177, 8, 73, 1,178, 8, 69, 78, 68, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+105,101,119, 73,109, 97,103,101, 0, 73,112,111, 68,114,105,118,101,114, 0, 79, 98,106,101, 99,116, 0, 73,112,111, 67,117,114,
+118,101, 0, 66, 80,111,105,110,116, 0, 66,101,122, 84,114,105,112,108,101, 0, 73,112,111, 0, 75,101,121, 66,108,111, 99,107,
+ 0, 75,101,121, 0, 83, 99,114,105,112,116, 76,105,110,107, 0, 84,101,120,116, 76,105,110,101, 0, 84,101,120,116, 77, 97,114,
+107,101,114, 0, 84,101,120,116, 0, 80, 97, 99,107,101,100, 70,105,108,101, 0, 67, 97,109,101,114, 97, 0, 73,109, 97,103,101,
+ 85,115,101,114, 0, 73,109, 97,103,101, 0, 71, 80, 85, 84,101,120,116,117,114,101, 0, 97,110,105,109, 0, 82,101,110,100,101,
+114, 82,101,115,117,108,116, 0, 77, 84,101,120, 0, 84,101,120, 0, 80,108,117,103,105,110, 84,101,120, 0, 67, 66, 68, 97,116,
+ 97, 0, 67,111,108,111,114, 66, 97,110,100, 0, 69,110,118, 77, 97,112, 0, 73,109, 66,117,102, 0, 84,101,120, 77, 97,112,112,
+105,110,103, 0, 76, 97,109,112, 0, 67,117,114,118,101, 77, 97,112,112,105,110,103, 0, 87, 97,118,101, 0, 77, 97,116,101,114,
+105, 97,108, 0, 98, 78,111,100,101, 84,114,101,101, 0, 71,114,111,117,112, 0, 86, 70,111,110,116, 0, 86, 70,111,110,116, 68,
+ 97,116, 97, 0, 77,101,116, 97, 69,108,101,109, 0, 66,111,117,110,100, 66,111,120, 0, 77,101,116, 97, 66, 97,108,108, 0, 78,
+117,114, 98, 0, 67,104, 97,114, 73,110,102,111, 0, 84,101,120,116, 66,111,120, 0, 67,117,114,118,101, 0, 80, 97,116,104, 0,
+ 77,101,115,104, 0, 77, 70, 97, 99,101, 0, 77, 84, 70, 97, 99,101, 0, 84, 70, 97, 99,101, 0, 77, 86,101,114,116, 0, 77, 69,
+100,103,101, 0, 77, 68,101,102,111,114,109, 86,101,114,116, 0, 77, 67,111,108, 0, 77, 83,116,105, 99,107,121, 0, 77, 83,101,
+108,101, 99,116, 0, 67,117,115,116,111,109, 68, 97,116, 97, 0, 77,117,108,116,105,114,101,115, 0, 80, 97,114,116,105, 97,108,
+ 86,105,115,105, 98,105,108,105,116,121, 0, 77, 68,101,102,111,114,109, 87,101,105,103,104,116, 0, 77, 84,101,120, 80,111,108,
+121, 0, 77, 76,111,111,112, 85, 86, 0, 77, 76,111,111,112, 67,111,108, 0, 77, 70,108,111, 97,116, 80,114,111,112,101,114,116,
+121, 0, 77, 73,110,116, 80,114,111,112,101,114,116,121, 0, 77, 83,116,114,105,110,103, 80,114,111,112,101,114,116,121, 0, 79,
+114,105,103, 83,112, 97, 99,101, 70, 97, 99,101, 0, 77,117,108,116,105,114,101,115, 67,111,108, 0, 77,117,108,116,105,114,101,
+115, 67,111,108, 70, 97, 99,101, 0, 77,117,108,116,105,114,101,115, 70, 97, 99,101, 0, 77,117,108,116,105,114,101,115, 69,100,
+103,101, 0, 77,117,108,116,105,114,101,115, 76,101,118,101,108, 0, 77,117,108,116,105,114,101,115, 77, 97,112, 78,111,100,101,
+ 0, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 83,117, 98,115,117,114,102, 77,111,100,105,102,105,101,114, 68, 97,116,
+ 97, 0, 76, 97,116,116,105, 99,101, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 67,117,114,118,101, 77,111,100,105,102,
+105,101,114, 68, 97,116, 97, 0, 66,117,105,108,100, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 65,114,114, 97,121, 77,
+111,100,105,102,105,101,114, 68, 97,116, 97, 0, 77,105,114,114,111,114, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 69,
+100,103,101, 83,112,108,105,116, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 66,101,118,101,108, 77,111,100,105,102,105,
+101,114, 68, 97,116, 97, 0, 66, 77,101,115,104, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 68,105,115,112,108, 97, 99,
+101, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 85, 86, 80,114,111,106,101, 99,116, 77,111,100,105,102,105,101,114, 68,
+ 97,116, 97, 0, 68,101, 99,105,109, 97,116,101, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 83,109,111,111,116,104, 77,
+111,100,105,102,105,101,114, 68, 97,116, 97, 0, 67, 97,115,116, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 87, 97,118,
+101, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 65,114,109, 97,116,117,114,101, 77,111,100,105,102,105,101,114, 68, 97,
+116, 97, 0, 72,111,111,107, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 83,111,102,116, 98,111,100,121, 77,111,100,105,
+102,105,101,114, 68, 97,116, 97, 0, 67,108,111,116,104, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 67,108,111,116,104,
+ 0, 67,108,111,116,104, 83,105,109, 83,101,116,116,105,110,103,115, 0, 67,108,111,116,104, 67,111,108,108, 83,101,116,116,105,
+110,103,115, 0, 80,111,105,110,116, 67, 97, 99,104,101, 0, 67,111,108,108,105,115,105,111,110, 77,111,100,105,102,105,101,114,
+ 68, 97,116, 97, 0, 66, 86, 72, 84,114,101,101, 0, 66,111,111,108,101, 97,110, 77,111,100,105,102,105,101,114, 68, 97,116, 97,
+ 0, 77, 68,101,102, 73,110,102,108,117,101,110, 99,101, 0, 77, 68,101,102, 67,101,108,108, 0, 77,101,115,104, 68,101,102,111,
+114,109, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 80, 97,114,116,105, 99,108,101, 83,121,115,116,101,109, 77,111,100,
+105,102,105,101,114, 68, 97,116, 97, 0, 80, 97,114,116,105, 99,108,101, 83,121,115,116,101,109, 0, 68,101,114,105,118,101,100,
+ 77,101,115,104, 0, 80, 97,114,116,105, 99,108,101, 73,110,115,116, 97,110, 99,101, 77,111,100,105,102,105,101,114, 68, 97,116,
+ 97, 0, 69,120,112,108,111,100,101, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 83,104,114,105,110,107,119,114, 97,112,
+ 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 76, 97,116,116,105, 99,101, 0, 98, 68,101,102,111,114,109, 71,114,111,117,
+112, 0, 98, 65, 99,116,105,111,110, 0, 98, 80,111,115,101, 0, 80, 97,114,116, 68,101,102,108,101, 99,116, 0, 83,111,102,116,
+ 66,111,100,121, 0, 70,108,117,105,100,115,105,109, 83,101,116,116,105,110,103,115, 0, 79, 98, 72,111,111,107, 0, 82, 78, 71,
+ 0, 83, 66, 86,101,114,116,101,120, 0, 66,111,100,121, 80,111,105,110,116, 0, 66,111,100,121, 83,112,114,105,110,103, 0, 83,
+ 66, 83, 99,114, 97,116, 99,104, 0, 87,111,114,108,100, 0, 82, 97,100,105,111, 0, 66, 97,115,101, 0, 65,118,105, 67,111,100,
+101, 99, 68, 97,116, 97, 0, 81,117,105, 99,107,116,105,109,101, 67,111,100,101, 99, 68, 97,116, 97, 0, 70, 70, 77,112,101,103,
+ 67,111,100,101, 99, 68, 97,116, 97, 0, 65,117,100,105,111, 68, 97,116, 97, 0, 83, 99,101,110,101, 82,101,110,100,101,114, 76,
+ 97,121,101,114, 0, 82,101,110,100,101,114, 68, 97,116, 97, 0, 82,101,110,100,101,114, 80,114,111,102,105,108,101, 0, 71, 97,
+109,101, 70,114, 97,109,105,110,103, 0, 84,105,109,101, 77, 97,114,107,101,114, 0, 73,109, 97,103,101, 80, 97,105,110,116, 83,
+101,116,116,105,110,103,115, 0, 66,114,117,115,104, 0, 80, 97,114,116,105, 99,108,101, 66,114,117,115,104, 68, 97,116, 97, 0,
+ 80, 97,114,116,105, 99,108,101, 69,100,105,116, 83,101,116,116,105,110,103,115, 0, 84,114, 97,110,115,102,111,114,109, 79,114,
+105,101,110,116, 97,116,105,111,110, 0, 84,111,111,108, 83,101,116,116,105,110,103,115, 0, 66,114,117,115,104, 68, 97,116, 97,
+ 0, 83, 99,117,108,112,116, 68, 97,116, 97, 0, 83, 99,117,108,112,116, 83,101,115,115,105,111,110, 0, 83, 99,101,110,101, 0,
+ 68, 97,103, 70,111,114,101,115,116, 0, 66, 71,112,105, 99, 0, 86,105,101,119, 51, 68, 0, 83,112, 97, 99,101, 76,105,110,107,
+ 0, 83, 99,114, 65,114,101, 97, 0, 82,101,110,100,101,114, 73,110,102,111, 0, 82,101,116,111,112,111, 86,105,101,119, 68, 97,
+116, 97, 0, 86,105,101,119, 68,101,112,116,104,115, 0, 98, 71, 80,100, 97,116, 97, 0, 86,105,101,119, 50, 68, 0, 83,112, 97,
+ 99,101, 73,110,102,111, 0, 83,112, 97, 99,101, 73,112,111, 0, 83,112, 97, 99,101, 66,117,116,115, 0, 83,112, 97, 99,101, 83,
+101,113, 0, 83,112, 97, 99,101, 70,105,108,101, 0,100,105,114,101,110,116,114,121, 0, 66,108,101,110,100, 72, 97,110,100,108,
+101, 0, 83,112, 97, 99,101, 79,111,112,115, 0, 84,114,101,101, 83,116,111,114,101, 0, 84,114,101,101, 83,116,111,114,101, 69,
+108,101,109, 0, 83,112, 97, 99,101, 73,109, 97,103,101, 0, 83,112, 97, 99,101, 78,108, 97, 0, 83,112, 97, 99,101, 84,101,120,
+116, 0, 83, 99,114,105,112,116, 0, 83,112, 97, 99,101, 83, 99,114,105,112,116, 0, 83,112, 97, 99,101, 84,105,109,101, 0, 83,
+112, 97, 99,101, 78,111,100,101, 0, 83,112, 97, 99,101, 73,109, 97, 83,101,108, 0, 70,105,108,101, 76,105,115,116, 0, 84,104,
+101,109,101, 85, 73, 0, 84,104,101,109,101, 83,112, 97, 99,101, 0, 84,104,101,109,101, 87,105,114,101, 67,111,108,111,114, 0,
+ 98, 84,104,101,109,101, 0, 83,111,108,105,100, 76,105,103,104,116, 0, 85,115,101,114, 68,101,102, 0, 98, 83, 99,114,101,101,
+110, 0, 83, 99,114, 86,101,114,116, 0, 83, 99,114, 69,100,103,101, 0, 80, 97,110,101,108, 0, 70,105,108,101, 71,108,111, 98,
+ 97,108, 0, 83,116,114,105,112, 69,108,101,109, 0, 84, 83,116,114,105,112, 69,108,101,109, 0, 83,116,114,105,112, 67,114,111,
+112, 0, 83,116,114,105,112, 84,114, 97,110,115,102,111,114,109, 0, 83,116,114,105,112, 67,111,108,111,114, 66, 97,108, 97,110,
+ 99,101, 0, 83,116,114,105,112, 80,114,111,120,121, 0, 83,116,114,105,112, 0, 80,108,117,103,105,110, 83,101,113, 0, 83,101,
+113,117,101,110, 99,101, 0, 98, 83,111,117,110,100, 0,104,100, 97,117,100,105,111, 0, 77,101,116, 97, 83,116, 97, 99,107, 0,
+ 69,100,105,116,105,110,103, 0, 87,105,112,101, 86, 97,114,115, 0, 71,108,111,119, 86, 97,114,115, 0, 84,114, 97,110,115,102,
+111,114,109, 86, 97,114,115, 0, 83,111,108,105,100, 67,111,108,111,114, 86, 97,114,115, 0, 83,112,101,101,100, 67,111,110,116,
+114,111,108, 86, 97,114,115, 0, 69,102,102,101, 99,116, 0, 66,117,105,108,100, 69,102,102, 0, 80, 97,114,116, 69,102,102, 0,
+ 80, 97,114,116,105, 99,108,101, 0, 87, 97,118,101, 69,102,102, 0, 79,111,112,115, 0, 98, 80,114,111,112,101,114,116,121, 0,
+ 98, 78,101, 97,114, 83,101,110,115,111,114, 0, 98, 77,111,117,115,101, 83,101,110,115,111,114, 0, 98, 84,111,117, 99,104, 83,
+101,110,115,111,114, 0, 98, 75,101,121, 98,111, 97,114,100, 83,101,110,115,111,114, 0, 98, 80,114,111,112,101,114,116,121, 83,
+101,110,115,111,114, 0, 98, 65, 99,116,117, 97,116,111,114, 83,101,110,115,111,114, 0, 98, 68,101,108, 97,121, 83,101,110,115,
+111,114, 0, 98, 67,111,108,108,105,115,105,111,110, 83,101,110,115,111,114, 0, 98, 82, 97,100, 97,114, 83,101,110,115,111,114,
+ 0, 98, 82, 97,110,100,111,109, 83,101,110,115,111,114, 0, 98, 82, 97,121, 83,101,110,115,111,114, 0, 98, 77,101,115,115, 97,
+103,101, 83,101,110,115,111,114, 0, 98, 83,101,110,115,111,114, 0, 98, 67,111,110,116,114,111,108,108,101,114, 0, 98, 74,111,
+121,115,116,105, 99,107, 83,101,110,115,111,114, 0, 98, 69,120,112,114,101,115,115,105,111,110, 67,111,110,116, 0, 98, 80,121,
+116,104,111,110, 67,111,110,116, 0, 98, 65, 99,116,117, 97,116,111,114, 0, 98, 65,100,100, 79, 98,106,101, 99,116, 65, 99,116,
+117, 97,116,111,114, 0, 98, 65, 99,116,105,111,110, 65, 99,116,117, 97,116,111,114, 0, 98, 83,111,117,110,100, 65, 99,116,117,
+ 97,116,111,114, 0, 98, 67, 68, 65, 99,116,117, 97,116,111,114, 0, 98, 69,100,105,116, 79, 98,106,101, 99,116, 65, 99,116,117,
+ 97,116,111,114, 0, 98, 83, 99,101,110,101, 65, 99,116,117, 97,116,111,114, 0, 98, 80,114,111,112,101,114,116,121, 65, 99,116,
+117, 97,116,111,114, 0, 98, 79, 98,106,101, 99,116, 65, 99,116,117, 97,116,111,114, 0, 98, 73,112,111, 65, 99,116,117, 97,116,
+111,114, 0, 98, 67, 97,109,101,114, 97, 65, 99,116,117, 97,116,111,114, 0, 98, 67,111,110,115,116,114, 97,105,110,116, 65, 99,
+116,117, 97,116,111,114, 0, 98, 71,114,111,117,112, 65, 99,116,117, 97,116,111,114, 0, 98, 82, 97,110,100,111,109, 65, 99,116,
+117, 97,116,111,114, 0, 98, 77,101,115,115, 97,103,101, 65, 99,116,117, 97,116,111,114, 0, 98, 71, 97,109,101, 65, 99,116,117,
+ 97,116,111,114, 0, 98, 86,105,115,105, 98,105,108,105,116,121, 65, 99,116,117, 97,116,111,114, 0, 98, 84,119,111, 68, 70,105,
+108,116,101,114, 65, 99,116,117, 97,116,111,114, 0, 98, 80, 97,114,101,110,116, 65, 99,116,117, 97,116,111,114, 0, 98, 83,116,
+ 97,116,101, 65, 99,116,117, 97,116,111,114, 0, 70,114,101,101, 67, 97,109,101,114, 97, 0, 98, 83, 97,109,112,108,101, 0, 98,
+ 83,111,117,110,100, 76,105,115,116,101,110,101,114, 0, 83,112, 97, 99,101, 83,111,117,110,100, 0, 71,114,111,117,112, 79, 98,
+106,101, 99,116, 0, 66,111,110,101, 0, 98, 65,114,109, 97,116,117,114,101, 0, 98, 80,111,115,101, 67,104, 97,110,110,101,108,
+ 0, 98, 65, 99,116,105,111,110, 71,114,111,117,112, 0, 98, 65, 99,116,105,111,110, 67,104, 97,110,110,101,108, 0, 83,112, 97,
+ 99,101, 65, 99,116,105,111,110, 0, 98, 67,111,110,115,116,114, 97,105,110,116, 67,104, 97,110,110,101,108, 0, 98, 67,111,110,
+115,116,114, 97,105,110,116, 0, 98, 67,111,110,115,116,114, 97,105,110,116, 84, 97,114,103,101,116, 0, 98, 80,121,116,104,111,
+110, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 75,105,110,101,109, 97,116,105, 99, 67,111,110,115,116,114, 97,105,110,116,
+ 0, 98, 84,114, 97, 99,107, 84,111, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 82,111,116, 97,116,101, 76,105,107,101, 67,
+111,110,115,116,114, 97,105,110,116, 0, 98, 76,111, 99, 97,116,101, 76,105,107,101, 67,111,110,115,116,114, 97,105,110,116, 0,
+ 98, 77,105,110, 77, 97,120, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 83,105,122,101, 76,105,107,101, 67,111,110,115,116,
+114, 97,105,110,116, 0, 98, 65, 99,116,105,111,110, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 76,111, 99,107, 84,114, 97,
+ 99,107, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 70,111,108,108,111,119, 80, 97,116,104, 67,111,110,115,116,114, 97,105,
+110,116, 0, 98, 83,116,114,101,116, 99,104, 84,111, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 82,105,103,105,100, 66,111,
+100,121, 74,111,105,110,116, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 67,108, 97,109,112, 84,111, 67,111,110,115,116,114,
+ 97,105,110,116, 0, 98, 67,104,105,108,100, 79,102, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 84,114, 97,110,115,102,111,
+114,109, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 76,111, 99, 76,105,109,105,116, 67,111,110,115,116,114, 97,105,110,116,
+ 0, 98, 82,111,116, 76,105,109,105,116, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 83,105,122,101, 76,105,109,105,116, 67,
+111,110,115,116,114, 97,105,110,116, 0, 98, 68,105,115,116, 76,105,109,105,116, 67,111,110,115,116,114, 97,105,110,116, 0, 98,
+ 65, 99,116,105,111,110, 77,111,100,105,102,105,101,114, 0, 98, 65, 99,116,105,111,110, 83,116,114,105,112, 0, 98, 78,111,100,
+101, 83,116, 97, 99,107, 0, 98, 78,111,100,101, 83,111, 99,107,101,116, 0, 98, 78,111,100,101, 76,105,110,107, 0, 98, 78,111,
+100,101, 0, 98, 78,111,100,101, 80,114,101,118,105,101,119, 0, 98, 78,111,100,101, 84,121,112,101, 0, 78,111,100,101, 73,109,
+ 97,103,101, 65,110,105,109, 0, 78,111,100,101, 66,108,117,114, 68, 97,116, 97, 0, 78,111,100,101, 68, 66,108,117,114, 68, 97,
+116, 97, 0, 78,111,100,101, 66,105,108, 97,116,101,114, 97,108, 66,108,117,114, 68, 97,116, 97, 0, 78,111,100,101, 72,117,101,
+ 83, 97,116, 0, 78,111,100,101, 73,109, 97,103,101, 70,105,108,101, 0, 78,111,100,101, 67,104,114,111,109, 97, 0, 78,111,100,
+101, 84,119,111, 88, 89,115, 0, 78,111,100,101, 84,119,111, 70,108,111, 97,116,115, 0, 78,111,100,101, 71,101,111,109,101,116,
+114,121, 0, 78,111,100,101, 86,101,114,116,101,120, 67,111,108, 0, 78,111,100,101, 68,101,102,111, 99,117,115, 0, 78,111,100,
+101, 83, 99,114,105,112,116, 68,105, 99,116, 0, 78,111,100,101, 71,108, 97,114,101, 0, 78,111,100,101, 84,111,110,101,109, 97,
+112, 0, 78,111,100,101, 76,101,110,115, 68,105,115,116, 0, 67,117,114,118,101, 77, 97,112, 80,111,105,110,116, 0, 67,117,114,
+118,101, 77, 97,112, 0, 66,114,117,115,104, 67,108,111,110,101, 0, 67,117,115,116,111,109, 68, 97,116, 97, 76, 97,121,101,114,
+ 0, 72, 97,105,114, 75,101,121, 0, 80, 97,114,116,105, 99,108,101, 75,101,121, 0, 67,104,105,108,100, 80, 97,114,116,105, 99,
+108,101, 0, 80, 97,114,116,105, 99,108,101, 68, 97,116, 97, 0, 80, 97,114,116,105, 99,108,101, 83,101,116,116,105,110,103,115,
+ 0, 80, 97,114,116,105, 99,108,101, 69,100,105,116, 0, 80, 97,114,116,105, 99,108,101, 67, 97, 99,104,101, 75,101,121, 0, 76,
+105,110,107, 78,111,100,101, 0, 98, 71, 80, 68,115,112,111,105,110,116, 0, 98, 71, 80, 68,115,116,114,111,107,101, 0, 98, 71,
+ 80, 68,102,114, 97,109,101, 0, 98, 71, 80, 68,108, 97,121,101,114, 0, 0, 0, 84, 76, 69, 78, 0, 1, 0, 1, 0, 2, 0, 2,
+ 0, 4, 0, 4, 0, 4, 0, 4, 0, 8, 0, 0, 0, 8, 0, 12, 0, 8, 0, 4, 0, 8, 0, 8, 0, 16, 0, 12, 0, 12, 0, 24,
+ 0, 16, 0, 16, 0, 32, 0, 16, 0, 16, 0, 20, 0, 76, 0, 52, 2, 40, 0, 0, 0, 32, 0,140, 3, 68, 0, 92, 0, 36, 0, 56,
+ 0, 84, 0,112, 0,120, 0, 16, 0, 24, 0, 40, 0,120, 0, 20, 0,132, 0, 32, 1,128, 0, 0, 0, 0, 0, 0, 0,136, 1, 4,
+ 1, 84, 0, 24, 3, 8, 0,168, 0, 0, 0,132, 1,120, 1, 8, 0, 56, 2,108, 0,124, 0, 76, 1, 68, 0, 0, 0,108, 0,104,
+ 0,136, 0, 56, 0, 8, 0, 16, 1, 56, 0, 0, 1, 24, 0, 20, 0, 44, 0, 60, 0, 24, 0, 12, 0, 12, 0, 4, 0, 8, 0, 8,
+ 0, 24, 0, 76, 0, 32, 0, 8, 0, 12, 0, 8, 0, 8, 0, 4, 0, 4, 1, 0, 0, 32, 0, 16, 0, 64, 0, 24, 0, 12, 0, 56,
+ 0, 0, 0, 52, 0, 68, 0, 88, 0, 96, 0, 68, 0,116, 0, 64, 0, 60, 0,108, 0, 60, 0,148, 0,152, 0, 60, 0, 92, 0,104,
+ 0,184, 0,100, 0,180, 0, 52, 0, 68, 0, 0, 0,132, 0, 28, 0, 20, 0,100, 0, 0, 0, 64, 0, 8, 0, 8, 0,216, 0, 76,
+ 1, 64, 0, 0, 0, 64, 0, 64, 0,108, 0,116, 0, 40, 0, 84, 0, 56, 0,128, 0,152, 1,132, 0,208, 0, 0, 0, 16, 0, 0,
+ 0, 0, 0, 0, 1,100, 0, 40, 0, 28, 0,176, 0,144, 0, 52, 0, 16, 0, 72, 3,180, 0, 56, 0, 16, 0, 80, 0, 12, 0,184,
+ 0, 8, 0, 72, 0, 80, 0,188, 0, 8, 0,168, 0, 0, 5, 96, 0, 0, 0, 60, 3, 4, 0, 36, 0,204, 0, 0, 0, 0, 0, 0,
+ 0, 20, 0,136, 0, 36, 1, 88, 0,220, 0,200, 1,200, 0, 0, 0, 0, 1, 8, 0, 12, 0, 12, 1, 8, 0,180, 0,128, 2, 80,
+ 0, 36, 0,164, 0,220, 2,132, 0, 0, 0,152, 0,208, 0, 16, 14, 56, 0, 56, 12, 32, 0,120, 0, 20, 0, 24, 0,228, 0, 32,
+ 0, 80, 0, 28, 0, 16, 0, 8, 0, 52, 0,160, 0,240, 1,168, 0,204, 1, 28, 0, 0, 0, 16, 0, 28, 0, 12, 0, 24, 0, 48,
+ 0, 16, 0, 20, 0, 16, 0, 24, 1, 56, 0, 0, 0, 56, 0, 44, 0, 64, 0, 48, 0, 8, 0, 44, 0, 72, 0,104, 0, 40, 0, 8,
+ 0, 72, 0, 44, 0, 40, 0,108, 0, 68, 0, 76, 0, 80, 0, 64, 0,128, 0, 4, 0, 60, 0, 12, 0, 92, 0, 28, 0, 20, 0, 80,
+ 0, 16, 0, 76, 0,104, 0, 52, 0, 28, 0, 96, 0, 60, 0, 56, 0,108, 0,140, 0, 4, 0, 20, 0, 12, 0, 8, 0, 40, 0, 0,
+ 0, 68, 0,176, 0, 24, 1, 4, 0,116, 1,152, 0, 72, 0, 64, 0,192, 0, 44, 0, 64, 0,116, 0, 60, 0,104, 0, 52, 0, 44,
+ 0, 44, 0, 68, 0, 44, 0, 64, 0, 44, 0, 20, 0, 52, 0, 96, 0, 12, 0,108, 0, 92, 0, 28, 0, 28, 0, 28, 0, 52, 0, 60,
+ 0,140, 0, 36, 0,120, 0, 24, 0,196, 0, 0, 0, 0, 0, 16, 0, 40, 0, 28, 0, 12, 0, 12, 1, 16, 0, 40, 0, 8, 0, 8,
+ 0, 64, 0, 32, 0, 24, 0, 8, 0, 24, 0, 32, 0, 8, 0, 12, 0, 44, 0, 20, 0, 60, 0, 24, 0, 56, 0, 72, 0,196, 1,224,
+ 0, 0, 0, 0, 0, 0, 0, 16, 0, 20, 0, 24, 0,172, 0, 0, 83, 84, 82, 67, 0, 0, 1, 50, 0, 10, 0, 2, 0, 10, 0, 0,
+ 0, 10, 0, 1, 0, 11, 0, 3, 0, 11, 0, 0, 0, 11, 0, 1, 0, 9, 0, 2, 0, 12, 0, 2, 0, 9, 0, 3, 0, 9, 0, 4,
+ 0, 13, 0, 2, 0, 2, 0, 5, 0, 2, 0, 6, 0, 14, 0, 2, 0, 4, 0, 5, 0, 4, 0, 6, 0, 15, 0, 2, 0, 7, 0, 5,
+ 0, 7, 0, 6, 0, 16, 0, 2, 0, 8, 0, 5, 0, 8, 0, 6, 0, 17, 0, 3, 0, 4, 0, 5, 0, 4, 0, 6, 0, 4, 0, 7,
+ 0, 18, 0, 3, 0, 7, 0, 5, 0, 7, 0, 6, 0, 7, 0, 7, 0, 19, 0, 3, 0, 8, 0, 5, 0, 8, 0, 6, 0, 8, 0, 7,
+ 0, 20, 0, 4, 0, 4, 0, 5, 0, 4, 0, 6, 0, 4, 0, 7, 0, 4, 0, 8, 0, 21, 0, 4, 0, 7, 0, 5, 0, 7, 0, 6,
+ 0, 7, 0, 7, 0, 7, 0, 8, 0, 22, 0, 4, 0, 8, 0, 5, 0, 8, 0, 6, 0, 8, 0, 7, 0, 8, 0, 8, 0, 23, 0, 4,
+ 0, 4, 0, 9, 0, 4, 0, 10, 0, 4, 0, 11, 0, 4, 0, 12, 0, 24, 0, 4, 0, 7, 0, 9, 0, 7, 0, 10, 0, 7, 0, 11,
+ 0, 7, 0, 12, 0, 25, 0, 4, 0, 9, 0, 13, 0, 12, 0, 14, 0, 4, 0, 15, 0, 4, 0, 16, 0, 26, 0, 10, 0, 26, 0, 0,
+ 0, 26, 0, 1, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0, 19, 0, 2, 0, 20, 0, 4, 0, 21, 0, 25, 0, 22, 0, 4, 0, 23,
+ 0, 4, 0, 24, 0, 27, 0, 9, 0, 9, 0, 0, 0, 9, 0, 1, 0, 27, 0, 25, 0, 28, 0, 26, 0, 0, 0, 27, 0, 2, 0, 28,
+ 0, 2, 0, 20, 0, 4, 0, 29, 0, 26, 0, 30, 0, 28, 0, 8, 0, 27, 0, 31, 0, 27, 0, 32, 0, 29, 0, 33, 0, 0, 0, 34,
+ 0, 0, 0, 35, 0, 4, 0, 36, 0, 4, 0, 37, 0, 28, 0, 38, 0, 30, 0, 6, 0, 4, 0, 39, 0, 4, 0, 40, 0, 2, 0, 41,
+ 0, 2, 0, 42, 0, 2, 0, 43, 0, 4, 0, 44, 0, 31, 0, 6, 0, 32, 0, 45, 0, 2, 0, 46, 0, 2, 0, 47, 0, 2, 0, 18,
+ 0, 2, 0, 20, 0, 0, 0, 48, 0, 33, 0, 21, 0, 33, 0, 0, 0, 33, 0, 1, 0, 34, 0, 49, 0, 35, 0, 50, 0, 24, 0, 51,
+ 0, 24, 0, 52, 0, 2, 0, 46, 0, 2, 0, 47, 0, 2, 0, 53, 0, 2, 0, 54, 0, 2, 0, 55, 0, 2, 0, 56, 0, 2, 0, 20,
+ 0, 2, 0, 57, 0, 7, 0, 11, 0, 7, 0, 12, 0, 4, 0, 58, 0, 7, 0, 59, 0, 7, 0, 60, 0, 7, 0, 61, 0, 31, 0, 62,
+ 0, 36, 0, 7, 0, 27, 0, 31, 0, 12, 0, 63, 0, 24, 0, 64, 0, 2, 0, 46, 0, 2, 0, 65, 0, 2, 0, 66, 0, 2, 0, 37,
+ 0, 37, 0, 16, 0, 37, 0, 0, 0, 37, 0, 1, 0, 7, 0, 67, 0, 7, 0, 61, 0, 2, 0, 18, 0, 2, 0, 47, 0, 2, 0, 68,
+ 0, 2, 0, 20, 0, 4, 0, 69, 0, 4, 0, 70, 0, 9, 0, 2, 0, 7, 0, 71, 0, 0, 0, 17, 0, 0, 0, 72, 0, 7, 0, 73,
+ 0, 7, 0, 74, 0, 38, 0, 12, 0, 27, 0, 31, 0, 37, 0, 75, 0, 0, 0, 76, 0, 4, 0, 77, 0, 7, 0, 61, 0, 12, 0, 78,
+ 0, 36, 0, 79, 0, 27, 0, 80, 0, 2, 0, 18, 0, 2, 0, 81, 0, 2, 0, 82, 0, 2, 0, 20, 0, 39, 0, 5, 0, 27, 0, 83,
+ 0, 2, 0, 84, 0, 2, 0, 85, 0, 2, 0, 86, 0, 4, 0, 37, 0, 40, 0, 6, 0, 40, 0, 0, 0, 40, 0, 1, 0, 0, 0, 87,
+ 0, 0, 0, 88, 0, 4, 0, 23, 0, 4, 0, 89, 0, 41, 0, 10, 0, 41, 0, 0, 0, 41, 0, 1, 0, 4, 0, 90, 0, 4, 0, 91,
+ 0, 4, 0, 92, 0, 4, 0, 43, 0, 4, 0, 14, 0, 4, 0, 93, 0, 0, 0, 94, 0, 0, 0, 95, 0, 42, 0, 15, 0, 27, 0, 31,
+ 0, 0, 0, 96, 0, 4, 0, 93, 0, 4, 0, 97, 0, 12, 0, 98, 0, 40, 0, 99, 0, 40, 0,100, 0, 4, 0,101, 0, 4, 0,102,
+ 0, 12, 0,103, 0, 0, 0,104, 0, 4, 0,105, 0, 4, 0,106, 0, 9, 0,107, 0, 8, 0,108, 0, 43, 0, 5, 0, 4, 0,109,
+ 0, 4, 0,110, 0, 4, 0, 93, 0, 4, 0, 37, 0, 9, 0, 2, 0, 44, 0, 20, 0, 27, 0, 31, 0, 2, 0, 18, 0, 2, 0, 20,
+ 0, 7, 0,111, 0, 7, 0,112, 0, 7, 0,113, 0, 7, 0,114, 0, 7, 0,115, 0, 7, 0,116, 0, 7, 0,117, 0, 7, 0,118,
+ 0, 7, 0,119, 0, 7, 0,120, 0, 7, 0,121, 0, 2, 0,122, 0, 2, 0,123, 0, 7, 0,124, 0, 36, 0, 79, 0, 39, 0,125,
+ 0, 32, 0,126, 0, 45, 0, 12, 0, 4, 0,127, 0, 4, 0,128, 0, 4, 0,129, 0, 4, 0,130, 0, 2, 0,131, 0, 2, 0,132,
+ 0, 2, 0, 20, 0, 2, 0,133, 0, 2, 0,134, 0, 2, 0,135, 0, 2, 0,136, 0, 2, 0,137, 0, 46, 0, 32, 0, 27, 0, 31,
+ 0, 0, 0, 34, 0, 12, 0,138, 0, 47, 0,139, 0, 48, 0,140, 0, 49, 0,141, 0, 2, 0,133, 0, 2, 0, 20, 0, 2, 0,142,
+ 0, 2, 0, 18, 0, 2, 0, 37, 0, 2, 0, 43, 0, 4, 0,143, 0, 2, 0,144, 0, 2, 0,145, 0, 2, 0,146, 0, 2, 0,147,
+ 0, 2, 0,148, 0, 2, 0,149, 0, 4, 0,150, 0, 4, 0,151, 0, 43, 0,152, 0, 30, 0,153, 0, 7, 0,154, 0, 4, 0,155,
+ 0, 2, 0,156, 0, 2, 0,157, 0, 2, 0,158, 0, 2, 0,159, 0, 7, 0,160, 0, 7, 0,161, 0, 9, 0,162, 0, 50, 0, 30,
+ 0, 2, 0,163, 0, 2, 0,164, 0, 2, 0,165, 0, 2, 0,166, 0, 32, 0,167, 0, 51, 0,168, 0, 0, 0,169, 0, 0, 0,170,
+ 0, 0, 0,171, 0, 0, 0,172, 0, 0, 0,173, 0, 7, 0,174, 0, 7, 0,175, 0, 2, 0,176, 0, 2, 0,177, 0, 2, 0,178,
+ 0, 2, 0,179, 0, 2, 0,180, 0, 2, 0,181, 0, 7, 0,182, 0, 7, 0,183, 0, 7, 0,184, 0, 7, 0,185, 0, 7, 0,186,
+ 0, 7, 0, 57, 0, 7, 0,187, 0, 7, 0,188, 0, 7, 0,189, 0, 7, 0,190, 0, 7, 0,191, 0, 52, 0, 15, 0, 0, 0,192,
+ 0, 9, 0,193, 0, 0, 0,194, 0, 0, 0,195, 0, 4, 0,196, 0, 4, 0,197, 0, 9, 0,198, 0, 7, 0,199, 0, 7, 0,200,
+ 0, 7, 0,201, 0, 4, 0,202, 0, 9, 0,203, 0, 9, 0,204, 0, 4, 0,205, 0, 4, 0, 37, 0, 53, 0, 6, 0, 7, 0,182,
+ 0, 7, 0,183, 0, 7, 0,184, 0, 7, 0,206, 0, 7, 0, 67, 0, 4, 0, 64, 0, 54, 0, 5, 0, 2, 0, 20, 0, 2, 0, 36,
+ 0, 2, 0, 64, 0, 2, 0,207, 0, 53, 0,201, 0, 55, 0, 17, 0, 32, 0,167, 0, 46, 0,208, 0, 56, 0,209, 0, 7, 0,210,
+ 0, 7, 0,211, 0, 2, 0, 18, 0, 2, 0,212, 0, 7, 0,113, 0, 7, 0,114, 0, 7, 0,213, 0, 4, 0,214, 0, 2, 0,215,
+ 0, 2, 0,216, 0, 4, 0,133, 0, 4, 0,143, 0, 2, 0,217, 0, 2, 0,218, 0, 51, 0, 53, 0, 27, 0, 31, 0, 7, 0,219,
+ 0, 7, 0,220, 0, 7, 0,221, 0, 7, 0,222, 0, 7, 0,223, 0, 7, 0,224, 0, 7, 0,225, 0, 7, 0,226, 0, 7, 0,227,
+ 0, 7, 0,228, 0, 7, 0,229, 0, 7, 0,230, 0, 7, 0,231, 0, 7, 0,232, 0, 7, 0,233, 0, 7, 0,234, 0, 7, 0,235,
+ 0, 7, 0,236, 0, 7, 0,237, 0, 7, 0,238, 0, 2, 0,239, 0, 2, 0,240, 0, 2, 0,241, 0, 2, 0,242, 0, 2, 0,243,
+ 0, 2, 0,244, 0, 2, 0,245, 0, 2, 0, 20, 0, 2, 0, 18, 0, 2, 0,212, 0, 7, 0,246, 0, 7, 0,247, 0, 7, 0,248,
+ 0, 7, 0,249, 0, 2, 0,250, 0, 2, 0,251, 0, 2, 0,252, 0, 2, 0,131, 0, 4, 0, 23, 0, 4, 0,128, 0, 4, 0,129,
+ 0, 4, 0,130, 0, 7, 0,253, 0, 7, 0,254, 0, 7, 0,188, 0, 45, 0,255, 0, 36, 0, 79, 0, 46, 0,208, 0, 52, 1, 0,
+ 0, 54, 1, 1, 0, 55, 1, 2, 0, 30, 0,153, 0, 57, 0, 8, 0, 7, 1, 3, 0, 7, 1, 4, 0, 7, 0,175, 0, 4, 0, 20,
+ 0, 7, 1, 5, 0, 7, 1, 6, 0, 7, 1, 7, 0, 32, 0, 45, 0, 58, 0, 77, 0, 27, 0, 31, 0, 2, 0, 18, 0, 2, 1, 8,
+ 0, 4, 1, 9, 0, 2, 0,177, 0, 2, 1, 10, 0, 7, 0,182, 0, 7, 0,183, 0, 7, 0,184, 0, 7, 0,185, 0, 7, 1, 11,
+ 0, 7, 1, 12, 0, 7, 1, 13, 0, 7, 1, 14, 0, 7, 1, 15, 0, 7, 1, 16, 0, 7, 1, 17, 0, 7, 1, 18, 0, 7, 1, 19,
+ 0, 7, 1, 20, 0, 7, 1, 21, 0, 59, 1, 22, 0, 2, 1, 23, 0, 2, 0, 70, 0, 7, 0,113, 0, 7, 0,114, 0, 7, 1, 24,
+ 0, 7, 1, 25, 0, 7, 1, 26, 0, 2, 1, 27, 0, 2, 1, 28, 0, 2, 1, 29, 0, 2, 1, 30, 0, 0, 1, 31, 0, 0, 1, 32,
+ 0, 2, 1, 33, 0, 2, 1, 34, 0, 2, 1, 35, 0, 2, 1, 36, 0, 2, 1, 37, 0, 7, 1, 38, 0, 7, 1, 39, 0, 7, 1, 40,
+ 0, 7, 1, 41, 0, 2, 1, 42, 0, 2, 0, 43, 0, 2, 1, 43, 0, 2, 1, 44, 0, 2, 1, 45, 0, 2, 1, 46, 0, 7, 1, 47,
+ 0, 7, 1, 48, 0, 7, 1, 49, 0, 7, 1, 50, 0, 7, 1, 51, 0, 7, 1, 52, 0, 7, 1, 53, 0, 7, 1, 54, 0, 7, 1, 55,
+ 0, 7, 1, 56, 0, 7, 1, 57, 0, 4, 1, 58, 0, 4, 1, 59, 0, 2, 1, 60, 0, 2, 1, 61, 0, 2, 1, 62, 0, 2, 1, 63,
+ 0, 7, 1, 64, 0, 7, 1, 65, 0, 7, 1, 66, 0, 7, 1, 67, 0, 2, 1, 68, 0, 2, 1, 69, 0, 50, 1, 70, 0, 36, 0, 79,
+ 0, 30, 0,153, 0, 39, 0,125, 0, 60, 0, 2, 0, 27, 0, 31, 0, 36, 0, 79, 0, 61, 0,129, 0, 27, 0, 31, 0, 2, 0,177,
+ 0, 2, 0, 20, 0, 7, 0,182, 0, 7, 0,183, 0, 7, 0,184, 0, 7, 1, 71, 0, 7, 1, 72, 0, 7, 1, 73, 0, 7, 1, 74,
+ 0, 7, 1, 75, 0, 7, 1, 76, 0, 7, 1, 77, 0, 7, 1, 78, 0, 7, 1, 79, 0, 7, 1, 80, 0, 7, 1, 81, 0, 7, 1, 82,
+ 0, 7, 1, 83, 0, 7, 1, 84, 0, 7, 1, 85, 0, 7, 1, 86, 0, 7, 1, 87, 0, 7, 1, 88, 0, 7, 1, 89, 0, 7, 1, 90,
+ 0, 7, 1, 91, 0, 7, 1, 92, 0, 7, 1, 93, 0, 7, 1, 94, 0, 7, 1, 95, 0, 7, 1, 96, 0, 7, 1, 97, 0, 2, 1, 98,
+ 0, 2, 1, 99, 0, 2, 1,100, 0, 0, 1,101, 0, 0, 1,102, 0, 7, 1,103, 0, 7, 1,104, 0, 2, 1,105, 0, 2, 1,106,
+ 0, 7, 1,107, 0, 7, 1,108, 0, 7, 1,109, 0, 7, 1,110, 0, 2, 1,111, 0, 2, 1,112, 0, 4, 1, 9, 0, 4, 1,113,
+ 0, 2, 1,114, 0, 2, 1,115, 0, 2, 1,116, 0, 2, 1,117, 0, 7, 1,118, 0, 7, 1,119, 0, 7, 1,120, 0, 7, 1,121,
+ 0, 7, 1,122, 0, 7, 1,123, 0, 7, 1,124, 0, 7, 1,125, 0, 7, 1,126, 0, 7, 1,127, 0, 0, 1,128, 0, 7, 1,129,
+ 0, 7, 1,130, 0, 7, 1,131, 0, 4, 1,132, 0, 0, 1,133, 0, 0, 1, 43, 0, 0, 1,134, 0, 0, 1,135, 0, 2, 1,136,
+ 0, 2, 1,137, 0, 2, 1,138, 0, 2, 1,139, 0, 2, 1,140, 0, 2, 1,141, 0, 7, 1,142, 0, 7, 1,143, 0, 7, 1,144,
+ 0, 7, 1,145, 0, 7, 1,146, 0, 2, 0,163, 0, 2, 0,164, 0, 54, 1,147, 0, 54, 1,148, 0, 0, 1,149, 0, 0, 1,150,
+ 0, 0, 1,151, 0, 0, 1,152, 0, 2, 1,153, 0, 2, 1, 8, 0, 7, 1,154, 0, 7, 1,155, 0, 50, 1, 70, 0, 62, 1,156,
+ 0, 36, 0, 79, 0, 63, 1,157, 0, 30, 0,153, 0, 7, 1,158, 0, 7, 1,159, 0, 7, 1,160, 0, 7, 1,161, 0, 7, 1,162,
+ 0, 2, 1,163, 0, 2, 0, 70, 0, 7, 1,164, 0, 7, 1,165, 0, 7, 1,166, 0, 7, 1,167, 0, 7, 1,168, 0, 7, 1,169,
+ 0, 7, 1,170, 0, 7, 1,171, 0, 7, 1,172, 0, 2, 1,173, 0, 2, 1,174, 0, 7, 1,175, 0, 7, 1,176, 0, 7, 1,177,
+ 0, 7, 1,178, 0, 7, 1,179, 0, 4, 1,180, 0, 4, 1,181, 0, 4, 1,182, 0, 39, 0,125, 0, 12, 1,183, 0, 64, 0, 6,
+ 0, 27, 0, 31, 0, 0, 1,184, 0, 7, 1,185, 0, 7, 0, 37, 0, 65, 0, 2, 0, 43, 0,152, 0, 66, 0, 26, 0, 66, 0, 0,
+ 0, 66, 0, 1, 0, 67, 1,186, 0, 4, 1,187, 0, 4, 1,188, 0, 4, 1,189, 0, 4, 1,190, 0, 4, 1,191, 0, 4, 1,192,
+ 0, 2, 0, 18, 0, 2, 0, 20, 0, 2, 1,193, 0, 2, 1,194, 0, 7, 0, 5, 0, 7, 0, 6, 0, 7, 0, 7, 0, 7, 1,195,
+ 0, 7, 1,196, 0, 7, 1,197, 0, 7, 1,198, 0, 7, 1,199, 0, 7, 1,200, 0, 7, 1,201, 0, 7, 0, 23, 0, 7, 1,202,
+ 0, 7, 1,203, 0, 68, 0, 15, 0, 27, 0, 31, 0, 67, 1,186, 0, 12, 1,204, 0, 12, 1,205, 0, 36, 0, 79, 0, 61, 1,206,
+ 0, 2, 0, 20, 0, 2, 1,207, 0, 4, 0,176, 0, 7, 1, 3, 0, 7, 0,175, 0, 7, 1, 4, 0, 7, 1,208, 0, 7, 1,209,
+ 0, 7, 1,210, 0, 35, 0, 10, 0, 7, 1,211, 0, 7, 1,212, 0, 7, 1,213, 0, 7, 1,214, 0, 2, 1,215, 0, 2, 1,216,
+ 0, 0, 1,217, 0, 0, 1,218, 0, 0, 1,219, 0, 0, 1,220, 0, 34, 0, 7, 0, 7, 1,221, 0, 7, 1,212, 0, 7, 1,213,
+ 0, 2, 1,217, 0, 2, 1,220, 0, 7, 1,214, 0, 7, 0, 37, 0, 69, 0, 21, 0, 69, 0, 0, 0, 69, 0, 1, 0, 2, 0, 18,
+ 0, 2, 1,222, 0, 2, 1,220, 0, 2, 0, 20, 0, 2, 1,223, 0, 2, 1,224, 0, 2, 1,225, 0, 2, 1,226, 0, 2, 1,227,
+ 0, 2, 1,228, 0, 2, 1,229, 0, 2, 1,230, 0, 7, 1,231, 0, 7, 1,232, 0, 34, 0, 49, 0, 35, 0, 50, 0, 2, 1,233,
+ 0, 2, 0, 37, 0, 4, 1,234, 0, 70, 0, 5, 0, 2, 1,235, 0, 2, 1,222, 0, 0, 0, 20, 0, 0, 0, 37, 0, 2, 0, 70,
+ 0, 71, 0, 4, 0, 7, 0, 5, 0, 7, 0, 6, 0, 7, 0, 8, 0, 7, 1,236, 0, 72, 0, 57, 0, 27, 0, 31, 0, 67, 1,186,
+ 0, 12, 1,237, 0, 12, 1,205, 0, 32, 1,238, 0, 32, 1,239, 0, 32, 1,240, 0, 36, 0, 79, 0, 73, 1,241, 0, 38, 1,242,
+ 0, 61, 1,206, 0, 12, 1,243, 0, 7, 1, 3, 0, 7, 0,175, 0, 7, 1, 4, 0, 4, 0,176, 0, 2, 1,244, 0, 2, 1,207,
+ 0, 2, 0, 20, 0, 2, 1,245, 0, 7, 1,246, 0, 7, 1,247, 0, 7, 1,248, 0, 2, 1,225, 0, 2, 1,226, 0, 2, 1,249,
+ 0, 2, 1,250, 0, 4, 0, 70, 0, 2, 0, 23, 0, 2, 0, 98, 0, 2, 0, 67, 0, 2, 1,251, 0, 7, 1,252, 0, 7, 1,253,
+ 0, 7, 1,254, 0, 7, 1,255, 0, 7, 2, 0, 0, 7, 2, 1, 0, 7, 2, 2, 0, 7, 2, 3, 0, 7, 2, 4, 0, 7, 2, 5,
+ 0, 0, 2, 6, 0, 0, 2, 7, 0, 64, 2, 8, 0, 64, 2, 9, 0, 64, 2, 10, 0, 64, 2, 11, 0, 4, 2, 12, 0, 4, 2, 13,
+ 0, 4, 2, 14, 0, 4, 0, 37, 0, 71, 2, 15, 0, 4, 2, 16, 0, 4, 2, 17, 0, 70, 2, 18, 0, 70, 2, 19, 0, 74, 0, 39,
+ 0, 27, 0, 31, 0, 67, 1,186, 0, 12, 2, 20, 0, 36, 0, 79, 0, 38, 1,242, 0, 61, 1,206, 0, 75, 2, 21, 0, 76, 2, 22,
+ 0, 77, 2, 23, 0, 78, 2, 24, 0, 79, 2, 25, 0, 80, 2, 26, 0, 81, 2, 27, 0, 82, 2, 28, 0, 74, 2, 29, 0, 83, 2, 30,
+ 0, 84, 2, 31, 0, 84, 2, 32, 0, 84, 2, 33, 0, 4, 0, 54, 0, 4, 2, 34, 0, 4, 2, 35, 0, 4, 2, 36, 0, 4, 2, 37,
+ 0, 4, 0,176, 0, 7, 1, 3, 0, 7, 0,175, 0, 7, 1, 4, 0, 7, 2, 38, 0, 7, 0, 37, 0, 2, 2, 39, 0, 2, 0, 20,
+ 0, 2, 2, 40, 0, 2, 2, 41, 0, 2, 1,207, 0, 2, 2, 42, 0, 85, 2, 43, 0, 86, 2, 44, 0, 9, 0,162, 0, 77, 0, 8,
+ 0, 9, 2, 45, 0, 7, 2, 46, 0, 4, 2, 47, 0, 0, 0, 20, 0, 0, 2, 48, 0, 2, 1, 9, 0, 2, 2, 49, 0, 2, 2, 50,
+ 0, 75, 0, 8, 0, 4, 2, 51, 0, 4, 2, 52, 0, 4, 2, 53, 0, 4, 2, 54, 0, 0, 0, 37, 0, 0, 1,222, 0, 0, 2, 55,
+ 0, 0, 0, 20, 0, 79, 0, 5, 0, 4, 2, 51, 0, 4, 2, 52, 0, 0, 2, 56, 0, 0, 2, 57, 0, 2, 0, 20, 0, 87, 0, 2,
+ 0, 4, 2, 58, 0, 7, 1,213, 0, 80, 0, 3, 0, 87, 2, 59, 0, 4, 2, 60, 0, 4, 0, 20, 0, 78, 0, 6, 0, 7, 2, 61,
+ 0, 2, 2, 62, 0, 0, 0, 20, 0, 0, 1,222, 0, 0, 2, 57, 0, 0, 0,181, 0, 81, 0, 4, 0, 0, 0,206, 0, 0, 0,182,
+ 0, 0, 0,183, 0, 0, 0,184, 0, 88, 0, 6, 0, 46, 2, 45, 0, 0, 0, 20, 0, 0, 2, 48, 0, 2, 1, 9, 0, 2, 2, 49,
+ 0, 2, 2, 50, 0, 89, 0, 1, 0, 7, 2, 63, 0, 90, 0, 5, 0, 0, 0,206, 0, 0, 0,182, 0, 0, 0,183, 0, 0, 0,184,
+ 0, 4, 0, 37, 0, 82, 0, 1, 0, 7, 2, 64, 0, 83, 0, 2, 0, 4, 2, 65, 0, 4, 0, 18, 0, 76, 0, 7, 0, 7, 2, 46,
+ 0, 46, 2, 45, 0, 0, 0, 20, 0, 0, 2, 48, 0, 2, 1, 9, 0, 2, 2, 49, 0, 2, 2, 50, 0, 91, 0, 1, 0, 7, 2, 66,
+ 0, 92, 0, 1, 0, 4, 2, 67, 0, 93, 0, 1, 0, 0, 2, 68, 0, 94, 0, 1, 0, 7, 2, 46, 0, 95, 0, 4, 0, 7, 0,206,
+ 0, 7, 0,182, 0, 7, 0,183, 0, 7, 0,184, 0, 96, 0, 1, 0, 95, 2, 47, 0, 97, 0, 5, 0, 4, 2, 69, 0, 4, 2, 70,
+ 0, 0, 0, 20, 0, 0, 1,222, 0, 0, 2, 71, 0, 98, 0, 2, 0, 4, 2, 72, 0, 4, 2, 70, 0, 99, 0, 14, 0, 99, 0, 0,
+ 0, 99, 0, 1, 0, 97, 2, 73, 0, 96, 2, 74, 0, 98, 2, 75, 0, 0, 2, 76, 0, 12, 2, 77, 0, 12, 2, 78, 0,100, 2, 79,
+ 0, 4, 0, 54, 0, 4, 2, 35, 0, 4, 2, 34, 0, 4, 0, 37, 0, 78, 2, 80, 0, 85, 0, 14, 0, 12, 2, 81, 0, 78, 2, 80,
+ 0, 0, 2, 82, 0, 0, 2, 83, 0, 0, 2, 84, 0, 0, 2, 85, 0, 0, 2, 86, 0, 0, 2, 87, 0, 0, 2, 88, 0, 0, 0, 20,
+ 0, 84, 2, 31, 0, 84, 2, 33, 0, 2, 2, 89, 0, 0, 2, 90, 0, 86, 0, 8, 0, 4, 2, 91, 0, 4, 2, 92, 0, 75, 2, 93,
+ 0, 79, 2, 94, 0, 4, 2, 35, 0, 4, 2, 34, 0, 4, 0, 54, 0, 4, 0, 37, 0,101, 0, 6, 0,101, 0, 0, 0,101, 0, 1,
+ 0, 4, 0, 18, 0, 4, 1, 9, 0, 0, 0, 17, 0, 0, 2, 95, 0,102, 0, 7, 0,101, 2, 96, 0, 2, 2, 97, 0, 2, 2, 81,
+ 0, 2, 2, 98, 0, 2, 0, 93, 0, 9, 2, 99, 0, 9, 2,100, 0,103, 0, 3, 0,101, 2, 96, 0, 32, 0,167, 0, 0, 0, 17,
+ 0,104, 0, 5, 0,101, 2, 96, 0, 32, 0,167, 0, 0, 0, 17, 0, 2, 2,101, 0, 0, 2,102, 0,105, 0, 5, 0,101, 2, 96,
+ 0, 7, 0, 91, 0, 7, 2,103, 0, 4, 2,104, 0, 4, 2,105, 0,106, 0, 13, 0,101, 2, 96, 0, 32, 2,106, 0, 32, 2,107,
+ 0, 32, 2,108, 0, 32, 2,109, 0, 7, 2,110, 0, 7, 2,111, 0, 7, 2,103, 0, 7, 2,112, 0, 4, 2,113, 0, 4, 2,114,
+ 0, 4, 0, 93, 0, 4, 2,115, 0,107, 0, 5, 0,101, 2, 96, 0, 2, 2,116, 0, 2, 0, 20, 0, 7, 2,117, 0, 32, 2,118,
+ 0,108, 0, 3, 0,101, 2, 96, 0, 7, 2,119, 0, 4, 0, 93, 0,109, 0, 10, 0,101, 2, 96, 0, 7, 2,120, 0, 4, 2,121,
+ 0, 4, 0, 37, 0, 2, 0, 93, 0, 2, 2,122, 0, 2, 2,123, 0, 2, 2,124, 0, 7, 2,125, 0, 0, 2,126, 0,110, 0, 3,
+ 0,101, 2, 96, 0, 7, 0, 37, 0, 4, 0, 18, 0,111, 0, 11, 0,101, 2, 96, 0, 51, 2,127, 0, 7, 2,128, 0, 4, 2,129,
+ 0, 0, 2,126, 0, 7, 2,130, 0, 4, 2,131, 0, 32, 2,132, 0, 0, 2,133, 0, 4, 2,134, 0, 4, 0, 37, 0,112, 0, 10,
+ 0,101, 2, 96, 0, 32, 2,135, 0, 46, 2,136, 0, 4, 0, 93, 0, 4, 2,137, 0, 7, 2,138, 0, 7, 2,139, 0, 0, 2,133,
+ 0, 4, 2,134, 0, 4, 0, 37, 0,113, 0, 3, 0,101, 2, 96, 0, 7, 2,140, 0, 4, 2,141, 0,114, 0, 5, 0,101, 2, 96,
+ 0, 7, 2,142, 0, 0, 2,126, 0, 2, 0, 20, 0, 2, 2,143, 0,115, 0, 8, 0,101, 2, 96, 0, 32, 0,167, 0, 7, 2,142,
+ 0, 7, 1,214, 0, 7, 0,109, 0, 0, 2,126, 0, 2, 0, 20, 0, 2, 0, 18, 0,116, 0, 21, 0,101, 2, 96, 0, 32, 2,144,
+ 0, 0, 2,126, 0, 51, 2,127, 0, 32, 2,132, 0, 2, 0, 20, 0, 2, 0, 37, 0, 7, 2,145, 0, 7, 2,146, 0, 7, 2,147,
+ 0, 7, 1,246, 0, 7, 2,148, 0, 7, 2,149, 0, 7, 2,150, 0, 7, 2,151, 0, 4, 2,131, 0, 4, 2,134, 0, 0, 2,133,
+ 0, 7, 2,152, 0, 7, 2,153, 0, 7, 0, 43, 0,117, 0, 7, 0,101, 2, 96, 0, 2, 2,154, 0, 2, 2,155, 0, 4, 0, 70,
+ 0, 32, 0,167, 0, 7, 2,156, 0, 0, 2,126, 0,118, 0, 9, 0,101, 2, 96, 0, 32, 0,167, 0, 7, 2,157, 0, 7, 2,158,
+ 0, 7, 2,151, 0, 4, 2,159, 0, 4, 2,160, 0, 7, 2,161, 0, 0, 0, 17, 0,119, 0, 1, 0,101, 2, 96, 0,120, 0, 5,
+ 0,101, 2, 96, 0,121, 2,162, 0,122, 2,163, 0,123, 2,164, 0,124, 2,165, 0,125, 0, 14, 0,101, 2, 96, 0, 78, 2,166,
+ 0, 78, 2,167, 0, 78, 2,168, 0, 78, 2,169, 0, 78, 2,170, 0, 78, 2,171, 0, 75, 2,172, 0, 4, 2,173, 0, 4, 2,174,
+ 0, 2, 2,175, 0, 2, 0, 37, 0, 7, 2,176, 0,126, 2,177, 0,127, 0, 4, 0,101, 2, 96, 0, 32, 0,167, 0, 4, 2,178,
+ 0, 4, 0, 37, 0,128, 0, 2, 0, 4, 2,179, 0, 7, 1,213, 0,129, 0, 2, 0, 4, 0,129, 0, 4, 2,180, 0,130, 0, 20,
+ 0,101, 2, 96, 0, 32, 0,167, 0, 0, 2,126, 0, 2, 2,181, 0, 2, 2,182, 0, 2, 0, 20, 0, 2, 0, 37, 0, 7, 2,183,
+ 0, 7, 2,184, 0, 4, 0, 54, 0, 4, 2,185, 0,129, 2,186, 0,128, 2,187, 0, 4, 2,188, 0, 4, 2,189, 0, 4, 2,190,
+ 0, 4, 2,180, 0, 7, 2,191, 0, 7, 2,192, 0, 7, 2,193, 0,131, 0, 8, 0,101, 2, 96, 0,132, 2,194, 0,133, 2,195,
+ 0, 4, 2,196, 0, 4, 2,197, 0, 4, 2,198, 0, 2, 0, 20, 0, 2, 0, 57, 0,134, 0, 5, 0,101, 2, 96, 0, 32, 0, 45,
+ 0, 2, 2,199, 0, 2, 0, 20, 0, 2, 2,200, 0,135, 0, 5, 0,101, 2, 96, 0, 4, 2,201, 0, 2, 0, 20, 0, 2, 2,202,
+ 0, 7, 2,203, 0,136, 0, 10, 0,101, 2, 96, 0, 32, 2,204, 0, 32, 2,205, 0, 0, 2,206, 0, 7, 2,207, 0, 2, 2,208,
+ 0, 2, 2,209, 0, 0, 2,210, 0, 0, 2,211, 0, 0, 2,102, 0,137, 0, 24, 0, 27, 0, 31, 0, 2, 1,223, 0, 2, 1,224,
+ 0, 2, 2,212, 0, 2, 0, 20, 0, 2, 2,213, 0, 2, 2,214, 0, 2, 2,215, 0, 2, 0, 70, 0, 0, 2,216, 0, 0, 2,217,
+ 0, 0, 2,218, 0, 0, 0, 18, 0, 4, 0, 37, 0, 7, 2,219, 0, 7, 2,220, 0, 7, 2,221, 0, 7, 2,222, 0, 7, 2,223,
+ 0, 7, 2,224, 0, 34, 2,225, 0, 36, 0, 79, 0, 38, 1,242, 0, 80, 2, 26, 0,138, 0, 3, 0,138, 0, 0, 0,138, 0, 1,
+ 0, 0, 0, 17, 0, 67, 0, 3, 0, 7, 2,226, 0, 4, 0, 20, 0, 4, 0, 37, 0, 32, 0,108, 0, 27, 0, 31, 0, 2, 0, 18,
+ 0, 2, 2,227, 0, 4, 2,228, 0, 4, 2,229, 0, 4, 2,230, 0, 0, 2,231, 0, 32, 0, 38, 0, 32, 2,232, 0, 32, 2,233,
+ 0, 32, 2,234, 0, 32, 2,235, 0, 36, 0, 79, 0, 73, 1,241, 0, 67, 1,186, 0,139, 2,236, 0,139, 2,237, 0,140, 2,238,
+ 0, 9, 0, 2, 0, 12, 2,239, 0, 12, 2, 20, 0, 12, 1,205, 0, 12, 2,240, 0, 12, 2,241, 0, 61, 1,206, 0, 7, 1, 3,
+ 0, 7, 2,242, 0, 7, 2,243, 0, 7, 0,175, 0, 7, 2,244, 0, 7, 1, 4, 0, 7, 2,245, 0, 7, 2,246, 0, 7, 2,157,
+ 0, 7, 2,247, 0, 7, 0,210, 0, 4, 2,248, 0, 2, 0, 20, 0, 2, 2,249, 0, 2, 2,250, 0, 2, 2,251, 0, 2, 2,252,
+ 0, 2, 2,253, 0, 2, 2,254, 0, 2, 2,255, 0, 2, 3, 0, 0, 2, 3, 1, 0, 2, 3, 2, 0, 2, 3, 3, 0, 4, 3, 4,
+ 0, 4, 3, 5, 0, 4, 3, 6, 0, 4, 3, 7, 0, 7, 3, 8, 0, 7, 3, 9, 0, 7, 3, 10, 0, 7, 3, 11, 0, 7, 3, 12,
+ 0, 7, 3, 13, 0, 7, 3, 14, 0, 7, 3, 15, 0, 7, 3, 16, 0, 7, 1, 8, 0, 0, 3, 17, 0, 0, 3, 18, 0, 0, 1,207,
+ 0, 0, 3, 19, 0, 0, 3, 20, 0, 0, 3, 21, 0, 7, 3, 22, 0, 7, 3, 23, 0, 39, 0,125, 0, 12, 3, 24, 0, 12, 3, 25,
+ 0, 12, 3, 26, 0, 12, 3, 27, 0, 7, 3, 28, 0, 2, 2, 65, 0, 2, 3, 29, 0, 7, 2, 47, 0, 4, 3, 30, 0, 4, 3, 31,
+ 0, 2, 3, 32, 0, 2, 0,217, 0, 7, 3, 33, 0, 12, 3, 34, 0, 12, 3, 35, 0, 12, 3, 36, 0, 12, 3, 37, 0,141, 3, 38,
+ 0,142, 3, 39, 0, 63, 3, 40, 0, 2, 3, 41, 0, 2, 3, 42, 0, 2, 3, 43, 0, 2, 3, 44, 0, 7, 2, 39, 0, 2, 3, 45,
+ 0, 2, 3, 46, 0,143, 3, 47, 0,133, 3, 48, 0,133, 3, 49, 0, 4, 3, 50, 0, 4, 3, 51, 0, 4, 3, 52, 0, 4, 0, 70,
+ 0, 9, 0,162, 0, 12, 3, 53, 0,144, 0, 14, 0,144, 0, 0, 0,144, 0, 1, 0, 32, 0, 38, 0, 7, 2,157, 0, 7, 1, 5,
+ 0, 7, 2,158, 0, 7, 2,151, 0, 0, 0, 17, 0, 4, 2,159, 0, 4, 2,160, 0, 4, 3, 54, 0, 2, 0, 18, 0, 2, 3, 55,
+ 0, 7, 2,161, 0,141, 0, 36, 0, 2, 3, 56, 0, 2, 3, 57, 0, 2, 0, 20, 0, 2, 2,151, 0, 7, 3, 58, 0, 7, 3, 59,
+ 0, 7, 3, 60, 0, 7, 3, 61, 0, 7, 3, 62, 0, 7, 3, 63, 0, 7, 3, 64, 0, 7, 3, 65, 0, 7, 3, 66, 0, 7, 3, 67,
+ 0, 7, 3, 68, 0, 7, 3, 69, 0, 7, 3, 70, 0, 7, 3, 71, 0, 7, 3, 72, 0, 7, 3, 73, 0, 7, 3, 74, 0, 7, 3, 75,
+ 0, 7, 3, 76, 0, 7, 3, 77, 0, 7, 3, 78, 0, 7, 3, 79, 0, 7, 3, 80, 0, 7, 3, 81, 0, 2, 3, 82, 0, 2, 3, 83,
+ 0, 2, 3, 84, 0, 2, 3, 85, 0, 51, 0,168, 0,145, 3, 86, 0, 7, 3, 87, 0, 4, 0, 37, 0,124, 0, 5, 0, 4, 0, 20,
+ 0, 4, 3, 88, 0, 4, 3, 89, 0, 4, 3, 90, 0, 4, 3, 91, 0,146, 0, 1, 0, 7, 1,221, 0,142, 0, 44, 0,132, 3, 92,
+ 0, 4, 3, 93, 0, 4, 3, 94, 0,147, 3, 95, 0,148, 3, 96, 0, 7, 0, 37, 0, 7, 3, 97, 0, 7, 3, 98, 0, 7, 3, 99,
+ 0, 7, 3,100, 0, 7, 3,101, 0, 7, 3,102, 0, 7, 3,103, 0, 7, 3,104, 0, 7, 3,105, 0, 7, 3,106, 0, 2, 3,107,
+ 0, 2, 3,108, 0, 7, 3,109, 0, 7, 3,110, 0, 4, 0,130, 0, 4, 3,111, 0, 4, 3,112, 0, 2, 3,113, 0, 2, 3,114,
+ 0,146, 3,115, 0, 4, 3,116, 0, 4, 0, 81, 0, 7, 3,117, 0, 7, 3,118, 0, 7, 3,119, 0, 7, 3,120, 0, 2, 3,121,
+ 0, 2, 3,122, 0, 2, 3,123, 0, 2, 3,124, 0, 2, 3,125, 0, 2, 3,126, 0, 2, 3,127, 0, 2, 3,128, 0,149, 3,129,
+ 0, 7, 3,130, 0, 7, 3,131, 0,124, 3,132, 0,143, 0, 40, 0, 2, 0, 18, 0, 2, 3,133, 0, 2, 3,134, 0, 2, 3,135,
+ 0, 7, 3,136, 0, 2, 3,137, 0, 2, 3,138, 0, 7, 3,139, 0, 2, 3,140, 0, 2, 3,141, 0, 7, 3,142, 0, 7, 3,143,
+ 0, 7, 3,144, 0, 7, 3,145, 0, 7, 3,146, 0, 7, 3,147, 0, 4, 3,148, 0, 7, 3,149, 0, 7, 3,150, 0, 7, 3,151,
+ 0, 74, 3,152, 0, 74, 3,153, 0, 74, 3,154, 0, 0, 3,155, 0, 7, 3,156, 0, 7, 3,157, 0, 36, 0, 79, 0, 2, 3,158,
+ 0, 0, 3,159, 0, 0, 3,160, 0, 7, 3,161, 0, 4, 3,162, 0, 7, 3,163, 0, 7, 3,164, 0, 4, 3,165, 0, 4, 3,166,
+ 0, 7, 3,167, 0, 7, 3,168, 0, 7, 3,169, 0, 78, 3,170, 0,150, 0, 66, 0, 27, 0, 31, 0, 2, 0,177, 0, 2, 1, 10,
+ 0, 2, 1, 43, 0, 2, 3,171, 0, 7, 3,172, 0, 7, 3,173, 0, 7, 3,174, 0, 7, 3,175, 0, 7, 3,176, 0, 7, 3,177,
+ 0, 7, 3,178, 0, 7, 3,179, 0, 7, 1, 77, 0, 7, 1, 79, 0, 7, 1, 78, 0, 7, 3,180, 0, 4, 3,181, 0, 7, 3,182,
+ 0, 7, 3,183, 0, 7, 3,184, 0, 7, 3,185, 0, 7, 3,186, 0, 7, 3,187, 0, 7, 3,188, 0, 2, 3,189, 0, 2, 1, 9,
+ 0, 4, 3,190, 0, 7, 3,191, 0, 7, 3,192, 0, 7, 3,193, 0, 7, 3,194, 0, 7, 3,195, 0, 7, 3,196, 0, 7, 3,197,
+ 0, 7, 3,198, 0, 7, 3,199, 0, 7, 3,200, 0, 7, 3,201, 0, 7, 3,202, 0, 2, 3,203, 0, 2, 3,204, 0, 2, 3,205,
+ 0, 2, 3,206, 0, 7, 3,207, 0, 7, 3,208, 0, 7, 3,209, 0, 7, 3,210, 0, 2, 3,211, 0, 2, 3,212, 0, 2, 3,213,
+ 0, 2, 3,214, 0, 7, 3,215, 0, 7, 3,216, 0, 7, 3,217, 0, 7, 3,218, 0, 2, 3,219, 0, 2, 3,220, 0, 2, 3,221,
+ 0, 2, 0, 43, 0, 7, 3,222, 0, 7, 3,223, 0, 36, 0, 79, 0, 50, 1, 70, 0, 30, 0,153, 0, 39, 0,125, 0,151, 0, 16,
+ 0, 2, 3,224, 0, 2, 3,225, 0, 2, 3,226, 0, 2, 0, 20, 0, 2, 3,227, 0, 2, 3,228, 0, 2, 3,229, 0, 2, 3,230,
+ 0, 2, 3,231, 0, 2, 3,232, 0, 2, 3,233, 0, 2, 3,234, 0, 4, 3,235, 0, 7, 3,236, 0, 7, 3,237, 0, 7, 3,238,
+ 0,152, 0, 8, 0,152, 0, 0, 0,152, 0, 1, 0, 4, 2,248, 0, 4, 3,239, 0, 4, 0, 20, 0, 2, 3,240, 0, 2, 3,241,
+ 0, 32, 0,167, 0,153, 0, 13, 0, 9, 3,242, 0, 9, 3,243, 0, 4, 3,244, 0, 4, 3,245, 0, 4, 3,246, 0, 4, 3,247,
+ 0, 4, 3,248, 0, 4, 3,249, 0, 4, 3,250, 0, 4, 3,251, 0, 4, 3,252, 0, 4, 0, 37, 0, 0, 3,253, 0,154, 0, 5,
+ 0, 9, 3,254, 0, 9, 3,255, 0, 4, 4, 0, 0, 4, 0, 70, 0, 0, 4, 1, 0,155, 0, 13, 0, 4, 0, 18, 0, 4, 4, 2,
+ 0, 4, 4, 3, 0, 4, 4, 4, 0, 4, 4, 5, 0, 4, 4, 6, 0, 4, 0, 93, 0, 4, 4, 7, 0, 4, 4, 8, 0, 4, 4, 9,
+ 0, 4, 4, 10, 0, 4, 4, 11, 0, 26, 0, 30, 0,156, 0, 4, 0, 4, 4, 12, 0, 7, 4, 13, 0, 2, 0, 20, 0, 2, 0,181,
+ 0,157, 0, 11, 0,157, 0, 0, 0,157, 0, 1, 0, 0, 0, 17, 0, 61, 4, 14, 0, 63, 4, 15, 0, 4, 2,248, 0, 4, 4, 16,
+ 0, 4, 4, 17, 0, 4, 0, 37, 0, 4, 4, 18, 0, 4, 4, 19, 0,158, 0,120, 0,153, 4, 20, 0,154, 4, 21, 0,155, 4, 22,
+ 0, 4, 4, 23, 0, 4, 0,130, 0, 4, 3,111, 0, 4, 4, 24, 0, 4, 4, 25, 0, 4, 4, 26, 0, 4, 4, 27, 0, 2, 0, 20,
+ 0, 2, 4, 28, 0, 7, 3, 9, 0, 7, 4, 29, 0, 7, 4, 30, 0, 7, 4, 31, 0, 7, 4, 32, 0, 7, 4, 33, 0, 2, 4, 34,
+ 0, 2, 4, 35, 0, 2, 4, 36, 0, 2, 4, 37, 0, 2, 0,216, 0, 2, 4, 38, 0, 2, 4, 39, 0, 2, 3, 85, 0, 2, 4, 40,
+ 0, 2, 4, 41, 0, 2, 1, 30, 0, 2, 0,109, 0, 2, 4, 42, 0, 2, 4, 43, 0, 2, 4, 44, 0, 2, 4, 45, 0, 2, 4, 46,
+ 0, 2, 4, 47, 0, 2, 4, 48, 0, 2, 4, 49, 0, 2, 4, 50, 0, 2, 1, 31, 0, 2, 4, 51, 0, 2, 4, 52, 0, 2, 4, 53,
+ 0, 2, 4, 54, 0, 4, 4, 55, 0, 4, 1, 9, 0, 2, 4, 56, 0, 2, 4, 57, 0, 2, 4, 58, 0, 2, 4, 59, 0, 2, 4, 60,
+ 0, 2, 4, 61, 0, 24, 4, 62, 0, 24, 4, 63, 0, 23, 4, 64, 0, 12, 4, 65, 0, 2, 4, 66, 0, 2, 0, 37, 0, 7, 4, 67,
+ 0, 7, 4, 68, 0, 7, 4, 69, 0, 7, 4, 70, 0, 7, 4, 71, 0, 7, 4, 72, 0, 7, 4, 73, 0, 7, 4, 74, 0, 7, 4, 75,
+ 0, 2, 4, 76, 0, 2, 4, 77, 0, 2, 4, 78, 0, 2, 4, 79, 0, 2, 4, 80, 0, 2, 4, 81, 0, 7, 4, 82, 0, 7, 4, 83,
+ 0, 7, 4, 84, 0, 2, 4, 85, 0, 2, 4, 86, 0, 2, 4, 87, 0, 2, 4, 88, 0, 2, 4, 89, 0, 2, 4, 90, 0, 2, 4, 91,
+ 0, 2, 4, 92, 0, 2, 4, 93, 0, 2, 4, 94, 0, 4, 4, 95, 0, 4, 4, 96, 0, 4, 4, 97, 0, 4, 4, 98, 0, 4, 4, 99,
+ 0, 7, 4,100, 0, 4, 4,101, 0, 4, 4,102, 0, 4, 4,103, 0, 4, 4,104, 0, 7, 4,105, 0, 7, 4,106, 0, 7, 4,107,
+ 0, 7, 4,108, 0, 7, 4,109, 0, 7, 4,110, 0, 7, 4,111, 0, 7, 4,112, 0, 7, 4,113, 0, 0, 4,114, 0, 0, 4,115,
+ 0, 4, 4,116, 0, 2, 4,117, 0, 2, 1, 8, 0, 0, 4,118, 0, 7, 4,119, 0, 7, 4,120, 0, 4, 4,121, 0, 4, 4,122,
+ 0, 7, 4,123, 0, 7, 4,124, 0, 2, 4,125, 0, 2, 4,126, 0, 7, 4,127, 0,159, 0, 9, 0,159, 0, 0, 0,159, 0, 1,
+ 0, 0, 0, 17, 0, 2, 4,128, 0, 2, 4,129, 0, 2, 4,130, 0, 2, 0, 43, 0, 7, 4,131, 0, 7, 0, 70, 0,160, 0, 5,
+ 0, 7, 4,132, 0, 0, 0, 18, 0, 0, 0, 43, 0, 0, 0, 70, 0, 0, 1, 8, 0,161, 0, 5, 0,161, 0, 0, 0,161, 0, 1,
+ 0, 4, 4,133, 0, 0, 4,134, 0, 4, 0, 20, 0,162, 0, 4, 0,163, 4,135, 0, 2, 0, 20, 0, 2, 4,136, 0, 4, 1, 8,
+ 0,164, 0, 4, 0, 2, 0,109, 0, 2, 2,128, 0, 2, 4,137, 0, 2, 4,138, 0,165, 0, 7, 0, 2, 0, 20, 0, 2, 4,139,
+ 0, 2, 4,140, 0, 2, 4,141, 0,164, 4,142, 0, 7, 4,143, 0, 4, 4,144, 0,166, 0, 4, 0,166, 0, 0, 0,166, 0, 1,
+ 0, 0, 4,145, 0, 7, 4,146, 0,167, 0, 42, 0, 2, 4,147, 0, 2, 4,148, 0, 7, 4,149, 0, 7, 4,150, 0, 2, 4,137,
+ 0, 2, 4,151, 0, 7, 4,152, 0, 7, 4,153, 0, 2, 4,154, 0, 2, 4,155, 0, 2, 4,156, 0, 2, 4,157, 0, 7, 4,158,
+ 0, 7, 4,159, 0, 2, 4,160, 0, 2, 4,161, 0, 2, 4,162, 0, 2, 4,163, 0,162, 4,164, 0,165, 4,165, 0, 7, 4,166,
+ 0, 7, 4,167, 0, 0, 4,168, 0, 0, 4,169, 0, 0, 4,170, 0, 0, 4,171, 0, 0, 4,172, 0, 0, 4,173, 0, 2, 4,174,
+ 0, 7, 4,175, 0, 7, 4,176, 0, 7, 4,177, 0, 7, 4,178, 0, 7, 4,179, 0, 7, 4,180, 0, 7, 4,181, 0, 2, 4,182,
+ 0, 0, 4,183, 0, 0, 4,184, 0, 0, 4,185, 0, 0, 4,186, 0, 0, 4,187, 0,168, 0, 6, 0, 2, 0,109, 0, 0, 2,128,
+ 0, 0, 4,188, 0, 0, 4,189, 0, 0, 0, 20, 0, 0, 2, 71, 0,169, 0, 26, 0,170, 4,190, 0, 50, 1, 70, 0, 59, 4,191,
+ 0,168, 4,192, 0,168, 4,193, 0,168, 4,194, 0,168, 4,195, 0,168, 4,196, 0,168, 4,197, 0,168, 4,198, 0, 7, 4,199,
+ 0, 2, 4,200, 0, 2, 1, 43, 0, 2, 4,201, 0, 2, 1,252, 0, 0, 4,202, 0, 0, 4,203, 0, 0, 4,204, 0, 0, 4,205,
+ 0, 0, 0, 93, 0, 0, 4,206, 0, 0, 4,207, 0, 0, 4,208, 0, 0, 4,209, 0, 0, 4,210, 0, 0, 2, 71, 0,171, 0, 43,
+ 0, 27, 0, 31, 0, 32, 4,211, 0,150, 4,212, 0,171, 4,213, 0, 46, 0,208, 0, 12, 4,214, 0,152, 4,215, 0, 7, 4,216,
+ 0, 7, 4,217, 0, 7, 4,218, 0, 7, 4,219, 0, 4, 2,248, 0, 7, 4,220, 0, 2, 4,221, 0, 2, 4,222, 0, 2, 4,223,
+ 0, 2, 4,224, 0, 2, 4,225, 0, 2, 4,226, 0, 2, 4,227, 0, 2, 1,135, 0, 62, 1,156, 0, 9, 4,228, 0,151, 4,229,
+ 0,160, 4,230, 0,167, 4,231, 0,158, 0,182, 0,156, 4,232, 0, 39, 0,125, 0, 12, 0,103, 0, 12, 4,233, 0, 2, 4,234,
+ 0, 2, 4,235, 0, 2, 4,236, 0, 2, 4,237, 0,172, 4,238, 0, 2, 4,239, 0, 2, 4,240, 0, 2, 1,138, 0, 2, 0,217,
+ 0,169, 4,241, 0, 4, 4,242, 0, 4, 0, 37, 0,173, 0, 9, 0, 46, 0,208, 0, 45, 0,255, 0, 7, 2, 3, 0, 7, 2, 4,
+ 0, 7, 0,109, 0, 7, 4,243, 0, 7, 4,244, 0, 2, 4,245, 0, 2, 4,246, 0,174, 0, 70, 0,175, 0, 0, 0,175, 0, 1,
+ 0, 4, 4,247, 0, 7, 4,248, 0,176, 4,249, 0, 2, 4,250, 0, 7, 4,251, 0, 7, 4,252, 0, 7, 4,253, 0, 7, 4,254,
+ 0, 7, 4,255, 0, 7, 5, 0, 0, 7, 5, 1, 0, 7, 1, 16, 0, 7, 5, 2, 0, 4, 5, 3, 0, 2, 5, 4, 0, 2, 4,189,
+ 0, 32, 4,211, 0, 32, 5, 5, 0,173, 5, 6, 0,174, 5, 7, 0,177, 5, 8, 0,178, 5, 9, 0,179, 5, 10, 0, 0, 5, 11,
+ 0, 2, 3,226, 0, 2, 5, 12, 0, 4, 2,248, 0, 4, 5, 13, 0, 2, 5, 14, 0, 2, 5, 15, 0, 2, 5, 16, 0, 0, 5, 17,
+ 0, 0, 0, 43, 0, 7, 0,115, 0, 7, 5, 18, 0, 7, 5, 19, 0, 7, 5, 20, 0, 7, 5, 21, 0, 7, 5, 22, 0, 7, 5, 23,
+ 0, 7, 5, 24, 0, 7, 0,174, 0, 7, 4,216, 0, 2, 5, 25, 0, 2, 5, 26, 0, 2, 5, 27, 0, 2, 5, 28, 0, 2, 0,137,
+ 0, 2, 4,201, 0, 2, 5, 29, 0, 2, 5, 30, 0, 2, 5, 31, 0, 2, 5, 32, 0, 7, 5, 33, 0, 7, 5, 34, 0, 67, 5, 35,
+ 0, 12, 5, 36, 0, 2, 5, 37, 0, 2, 2, 48, 0, 2, 5, 38, 0, 2, 0, 20, 0, 2, 5, 39, 0, 2, 5, 40, 0, 2, 1, 8,
+ 0, 0, 5, 41, 0, 0, 5, 42, 0, 9, 5, 43, 0,180, 5, 44, 0,181, 0, 19, 0, 24, 0, 36, 0, 24, 0, 64, 0, 23, 5, 45,
+ 0, 23, 5, 46, 0, 23, 5, 47, 0, 7, 5, 48, 0, 7, 5, 49, 0, 7, 5, 50, 0, 7, 5, 51, 0, 2, 5, 52, 0, 2, 5, 53,
+ 0, 2, 5, 54, 0, 2, 5, 55, 0, 2, 5, 56, 0, 2, 5, 57, 0, 4, 0, 20, 0, 7, 5, 58, 0, 2, 5, 15, 0, 0, 2,102,
+ 0,175, 0, 6, 0,175, 0, 0, 0,175, 0, 1, 0, 4, 4,247, 0, 7, 4,248, 0,176, 4,249, 0, 2, 4,250, 0,182, 0, 6,
+ 0,175, 0, 0, 0,175, 0, 1, 0, 4, 4,247, 0, 7, 4,248, 0,176, 4,249, 0, 2, 4,250, 0,183, 0, 27, 0,175, 0, 0,
+ 0,175, 0, 1, 0, 4, 4,247, 0, 7, 4,248, 0,176, 4,249, 0, 2, 4,250, 0, 4, 5, 59, 0, 4, 0, 70, 0,181, 5, 60,
+ 0, 9, 5, 61, 0, 12, 5, 62, 0, 36, 0, 79, 0, 27, 0, 80, 0, 0, 5, 63, 0, 0, 5, 64, 0, 0, 5, 65, 0, 2, 5, 66,
+ 0, 2, 5, 67, 0, 2, 5, 68, 0, 2, 5, 69, 0, 2, 0, 65, 0, 2, 0, 46, 0, 2, 0,137, 0, 2, 5, 70, 0, 4, 0, 20,
+ 0, 7, 5, 71, 0, 24, 0, 36, 0,184, 0, 29, 0,175, 0, 0, 0,175, 0, 1, 0, 4, 4,247, 0, 7, 4,248, 0,176, 4,249,
+ 0,177, 5, 8, 0, 2, 4,250, 0, 2, 5, 72, 0, 2, 5, 73, 0, 2, 5, 74, 0, 2, 5, 75, 0,181, 5, 60, 0, 2, 5, 76,
+ 0, 2, 0,137, 0, 2, 5, 67, 0, 2, 5, 77, 0, 9, 5, 78, 0, 2, 4,201, 0, 0, 5, 79, 0, 0, 5, 80, 0, 2, 5, 81,
+ 0, 2, 5, 82, 0, 2, 3, 1, 0, 2, 5, 83, 0, 2, 5, 84, 0, 0, 0, 37, 0, 0, 0, 20, 0, 0, 1, 43, 0, 0, 5, 85,
+ 0,185, 0, 16, 0,175, 0, 0, 0,175, 0, 1, 0, 4, 4,247, 0, 7, 4,248, 0,176, 4,249, 0, 2, 4,250, 0,181, 5, 60,
+ 0, 7, 2, 3, 0, 7, 2, 4, 0, 2, 5, 76, 0, 2, 0, 37, 0, 2, 5, 86, 0, 2, 5, 87, 0, 4, 0, 20, 0, 7, 4,243,
+ 0,180, 5, 44, 0,186, 0, 33, 0,175, 0, 0, 0,175, 0, 1, 0, 4, 4,247, 0, 7, 4,248, 0,176, 4,249, 0, 2, 4,250,
+ 0,187, 5, 88, 0, 4, 5, 89, 0, 0, 5, 90, 0, 0, 5, 91, 0, 0, 5, 92, 0, 2, 0, 18, 0, 2, 5, 93, 0, 2, 0, 20,
+ 0, 2, 5, 94, 0, 2, 5, 95, 0, 2, 5, 96, 0, 2, 5, 97, 0, 2, 0, 43, 0, 4, 0, 70, 0, 0, 5, 98, 0,188, 5, 99,
+ 0, 2, 5,100, 0, 2, 5,101, 0, 2, 5,102, 0, 2, 0,207, 0, 9, 5,103, 0, 9, 5,104, 0, 9, 5,105, 0, 9, 5,106,
+ 0, 9, 5,107, 0, 2, 5,108, 0, 0, 5,109, 0,189, 0, 23, 0,175, 0, 0, 0,175, 0, 1, 0, 4, 4,247, 0, 7, 4,248,
+ 0,176, 4,249, 0, 2, 4,250, 0,181, 5, 60, 0, 12, 5,110, 0, 2, 5, 67, 0, 2, 5,111, 0, 2, 0, 20, 0, 2, 0, 57,
+ 0, 9, 5, 78, 0, 12, 5,112, 0,190, 5,113, 0, 0, 5,114, 0,191, 5,115, 0, 4, 5,116, 0, 4, 5,117, 0, 2, 0, 18,
+ 0, 2, 5,118, 0, 2, 5,119, 0, 2, 5,120, 0,192, 0, 29, 0,175, 0, 0, 0,175, 0, 1, 0, 4, 4,247, 0, 7, 4,248,
+ 0,176, 4,249, 0, 2, 4,250, 0,181, 5, 60, 0, 46, 2,136, 0, 45, 0,255, 0, 59, 4,191, 0, 2, 1, 9, 0, 2, 0,137,
+ 0, 2, 5,121, 0, 2, 5,122, 0, 4, 0, 20, 0, 2, 4,221, 0, 2, 5,123, 0, 2, 5, 70, 0, 2, 5, 67, 0, 7, 4,243,
+ 0, 0, 5,124, 0, 0, 5,125, 0, 0, 5,126, 0, 0, 5,127, 0, 7, 2, 3, 0, 7, 2, 4, 0, 7, 5,128, 0, 7, 5,129,
+ 0,180, 5, 44, 0,193, 0, 11, 0,175, 0, 0, 0,175, 0, 1, 0, 4, 4,247, 0, 7, 4,248, 0,176, 4,249, 0, 2, 4,250,
+ 0, 2, 0,137, 0, 2, 5, 70, 0, 2, 5,130, 0, 2, 0, 20, 0,181, 5, 60, 0,194, 0, 24, 0,175, 0, 0, 0,175, 0, 1,
+ 0, 4, 4,247, 0, 7, 4,248, 0,176, 4,249, 0, 2, 4,250, 0, 42, 5,131, 0, 4, 5,132, 0, 4, 5,133, 0, 2, 0, 93,
+ 0, 2, 0,137, 0, 4, 5,134, 0, 4, 5,135, 0, 4, 5,136, 0, 4, 5,137, 0, 4, 5,138, 0, 4, 5,139, 0, 4, 5,140,
+ 0, 4, 5,141, 0, 7, 5,142, 0, 23, 5,143, 0, 23, 5,144, 0, 4, 5,145, 0, 4, 5,146, 0,195, 0, 10, 0, 27, 0, 31,
+ 0, 9, 5,147, 0, 9, 5,148, 0, 9, 5,149, 0, 9, 5,150, 0, 9, 5,151, 0, 4, 0, 93, 0, 4, 5,152, 0, 0, 5,153,
+ 0, 0, 5,154, 0,196, 0, 10, 0,175, 0, 0, 0,175, 0, 1, 0, 4, 4,247, 0, 7, 4,248, 0,176, 4,249, 0,195, 5,155,
+ 0, 2, 0, 93, 0, 2, 0,137, 0, 4, 0, 43, 0, 9, 5,156, 0,197, 0, 8, 0,175, 0, 0, 0,175, 0, 1, 0, 4, 4,247,
+ 0, 7, 4,248, 0,176, 4,249, 0,181, 5, 60, 0, 4, 0, 20, 0, 4, 5,157, 0,198, 0, 20, 0,175, 0, 0, 0,175, 0, 1,
+ 0, 4, 4,247, 0, 7, 4,248, 0,176, 4,249, 0, 2, 4,250, 0,181, 5, 60, 0, 27, 5,158, 0, 27, 0, 80, 0, 2, 0, 20,
+ 0, 2, 0,137, 0, 7, 5,159, 0, 9, 5,160, 0, 7, 2, 3, 0, 7, 2, 4, 0, 62, 1,156, 0, 62, 5,161, 0, 4, 5,162,
+ 0, 4, 0, 37, 0,180, 5, 44, 0,199, 0, 42, 0,175, 0, 0, 0,175, 0, 1, 0, 4, 4,247, 0, 7, 4,248, 0,176, 4,249,
+ 0, 2, 4,250, 0,181, 5, 60, 0,200, 5,163, 0, 0, 5, 90, 0, 0, 5, 91, 0, 0, 5, 92, 0, 2, 0, 18, 0, 2, 5,101,
+ 0, 2, 0, 20, 0, 2, 5, 94, 0, 9, 5,160, 0, 4, 5,164, 0, 4, 5,165, 0, 4, 5,166, 0, 4, 5,167, 0, 23, 5,168,
+ 0, 23, 5,169, 0, 7, 5,170, 0, 7, 5,171, 0, 7, 5,172, 0, 7, 5,159, 0, 2, 5,100, 0, 2, 0,207, 0, 2, 1, 95,
+ 0, 2, 5,173, 0, 2, 0, 37, 0, 2, 0, 43, 0, 2, 5,174, 0, 2, 5,175, 0, 9, 5,103, 0, 9, 5,104, 0, 9, 5,105,
+ 0, 9, 5,106, 0, 9, 5,107, 0, 2, 5,108, 0, 0, 5,109, 0, 56, 5,176, 0,201, 0, 20, 0, 0, 5,177, 0, 0, 5,178,
+ 0, 0, 5,179, 0, 0, 5,180, 0, 0, 5,181, 0, 0, 5,182, 0, 0, 5,183, 0, 0, 5,184, 0, 0, 5,185, 0, 0, 5,186,
+ 0, 0, 5,187, 0, 0, 5,188, 0, 0, 5,189, 0, 0, 5,190, 0, 0, 5,191, 0, 0, 5,192, 0, 0, 5,193, 0, 0, 5,194,
+ 0, 0, 0,181, 0, 0, 5,195, 0,202, 0, 54, 0, 0, 5,196, 0, 0, 5,187, 0, 0, 5,188, 0, 0, 5,197, 0, 0, 5,198,
+ 0, 0, 5,199, 0, 0, 5,200, 0, 0, 5,201, 0, 0, 5,202, 0, 0, 5,203, 0, 0, 5,204, 0, 0, 5,205, 0, 0, 5,206,
+ 0, 0, 5,207, 0, 0, 5,208, 0, 0, 5,209, 0, 0, 5,210, 0, 0, 5,211, 0, 0, 5,212, 0, 0, 5,213, 0, 0, 5,214,
+ 0, 0, 5,215, 0, 0, 5,216, 0, 0, 5,217, 0, 0, 5,218, 0, 0, 5,219, 0, 0, 5,220, 0, 0, 5,221, 0, 0, 5,222,
+ 0, 0, 5,223, 0, 0, 5,224, 0, 0, 5,225, 0, 0, 0, 95, 0, 0, 5,226, 0, 0, 5,227, 0, 0, 5,228, 0, 0, 5,229,
+ 0, 0, 5,230, 0, 0, 5,231, 0, 0, 5,232, 0, 0, 5,233, 0, 0, 5,234, 0, 0, 5,235, 0, 0, 5,236, 0, 0, 5,237,
+ 0, 0, 5,238, 0, 0, 5,239, 0, 0, 5,240, 0, 0, 5,241, 0, 0, 5,242, 0, 0, 5,243, 0, 0, 5,244, 0, 0, 5,245,
+ 0, 0, 5,246, 0,203, 0, 5, 0, 0, 5,247, 0, 0, 5,204, 0, 0, 5,206, 0, 2, 0, 20, 0, 2, 0, 37, 0,204, 0, 22,
+ 0,204, 0, 0, 0,204, 0, 1, 0, 0, 0, 17, 0,201, 5,248, 0,202, 5,249, 0,202, 5,250, 0,202, 5,251, 0,202, 5,252,
+ 0,202, 5,253, 0,202, 5,254, 0,202, 5,255, 0,202, 6, 0, 0,202, 6, 1, 0,202, 6, 2, 0,202, 6, 3, 0,202, 6, 4,
+ 0,202, 6, 5, 0,202, 6, 6, 0,202, 6, 7, 0,203, 6, 8, 0, 0, 6, 9, 0, 0, 6, 10, 0,205, 0, 5, 0, 4, 0, 20,
+ 0, 4, 0, 37, 0, 7, 2, 47, 0, 7, 6, 11, 0, 7, 1,221, 0,206, 0, 65, 0, 4, 0, 20, 0, 4, 6, 12, 0, 4, 6, 13,
+ 0, 0, 6, 14, 0, 0, 6, 15, 0, 0, 6, 16, 0, 0, 6, 17, 0, 0, 6, 18, 0, 0, 6, 19, 0, 0, 6, 20, 0, 0, 6, 21,
+ 0, 0, 6, 22, 0, 2, 6, 23, 0, 2, 6, 24, 0, 4, 6, 25, 0, 4, 6, 26, 0, 4, 6, 27, 0, 4, 6, 28, 0, 2, 6, 29,
+ 0, 2, 6, 30, 0, 2, 6, 31, 0, 2, 6, 32, 0, 4, 6, 33, 0, 4, 6, 34, 0, 2, 6, 35, 0, 2, 6, 36, 0, 2, 6, 37,
+ 0, 2, 6, 38, 0, 0, 6, 39, 0, 12, 6, 40, 0, 2, 6, 41, 0, 2, 6, 42, 0, 2, 6, 43, 0, 2, 6, 44, 0, 2, 0, 37,
+ 0, 2, 6, 45, 0, 2, 6, 46, 0, 2, 6, 47, 0,205, 6, 48, 0, 2, 6, 49, 0, 2, 6, 50, 0, 2, 6, 51, 0, 2, 6, 52,
+ 0, 4, 6, 53, 0, 4, 6, 54, 0, 4, 6, 55, 0, 4, 6, 56, 0, 2, 6, 57, 0, 2, 6, 58, 0, 2, 6, 59, 0, 2, 6, 60,
+ 0, 2, 6, 61, 0, 2, 6, 62, 0, 2, 6, 63, 0, 2, 6, 64, 0, 2, 6, 65, 0, 2, 6, 66, 0, 2, 6, 67, 0, 0, 6, 68,
+ 0, 0, 6, 69, 0, 0, 6, 70, 0, 7, 6, 71, 0, 2, 6, 72, 0, 2, 6, 73, 0, 54, 6, 74, 0,207, 0, 18, 0, 27, 0, 31,
+ 0, 12, 6, 75, 0, 12, 6, 76, 0, 12, 6, 77, 0,171, 6, 78, 0, 2, 2,145, 0, 2, 6, 79, 0, 2, 2,146, 0, 2, 6, 80,
+ 0, 2, 6, 81, 0, 2, 6, 82, 0, 2, 6, 83, 0, 2, 6, 84, 0, 2, 6, 85, 0, 2, 0, 37, 0, 2, 6, 86, 0, 2, 6, 87,
+ 0, 2, 6, 88, 0,208, 0, 5, 0,208, 0, 0, 0,208, 0, 1, 0,208, 6, 89, 0, 13, 6, 90, 0, 4, 0, 20, 0,209, 0, 7,
+ 0,209, 0, 0, 0,209, 0, 1, 0,208, 6, 91, 0,208, 6, 92, 0, 2, 4, 63, 0, 2, 0, 20, 0, 4, 0, 37, 0,210, 0, 17,
+ 0,210, 0, 0, 0,210, 0, 1, 0, 0, 6, 93, 0, 0, 6, 94, 0, 0, 6, 95, 0, 2, 6, 96, 0, 2, 6, 97, 0, 2, 6, 81,
+ 0, 2, 6, 82, 0, 2, 0, 20, 0, 2, 3, 55, 0, 2, 6, 98, 0, 2, 6, 99, 0, 2, 6,100, 0, 2, 6,101, 0, 4, 6,102,
+ 0,210, 6,103, 0,176, 0, 30, 0,176, 0, 0, 0,176, 0, 1, 0,208, 6, 91, 0,208, 6, 92, 0,208, 6,104, 0,208, 6,105,
+ 0,207, 6,106, 0, 7, 6,107, 0, 23, 0, 52, 0, 23, 6,108, 0, 23, 6,109, 0, 2, 6,110, 0, 2, 6,111, 0, 2, 6,112,
+ 0, 0, 4,247, 0, 0, 6,113, 0, 2, 6,114, 0, 2, 6,115, 0, 0, 6,116, 0, 0, 6,117, 0, 0, 6,118, 0, 0, 6,119,
+ 0, 2, 6,120, 0, 2, 6,121, 0, 2, 6,122, 0, 2, 0, 20, 0, 39, 0,125, 0, 12, 6,123, 0, 12, 6,124, 0, 12, 6,125,
+ 0,211, 0, 11, 0, 0, 6,126, 0, 2, 6,127, 0, 2, 6,128, 0, 2, 6,129, 0, 2, 6,130, 0, 2, 6,131, 0, 2, 4, 47,
+ 0, 9, 6,132, 0, 9, 6,133, 0, 4, 6,134, 0, 4, 6,135, 0,212, 0, 1, 0, 0, 6,136, 0,213, 0, 8, 0, 56, 6,137,
+ 0, 56, 6,138, 0,213, 6,139, 0,213, 6,140, 0,213, 6,141, 0, 2, 0,133, 0, 2, 0, 20, 0, 4, 6,142, 0,214, 0, 4,
+ 0, 4, 5,132, 0, 4, 6,143, 0, 4, 5,136, 0, 4, 6,144, 0,215, 0, 2, 0, 4, 6,145, 0, 4, 6,146, 0,216, 0, 7,
+ 0, 7, 6,147, 0, 7, 6,148, 0, 7, 6,149, 0, 4, 0, 20, 0, 4, 0, 37, 0, 7, 3,182, 0, 7, 6,150, 0,217, 0, 1,
+ 0, 0, 6,151, 0,218, 0, 21, 0,218, 0, 0, 0,218, 0, 1, 0, 4, 0, 57, 0, 4, 0, 23, 0, 4, 0, 28, 0, 4, 6,152,
+ 0, 4, 6,153, 0, 4, 6,154, 0,212, 6,155, 0, 0, 6,151, 0, 4, 6,156, 0, 4, 6,157, 0,217, 2,233, 0,214, 6,158,
+ 0,215, 6,159, 0,216, 6,160, 0,213, 6,161, 0,213, 6,162, 0,213, 6,163, 0, 56, 6,164, 0, 56, 6,165, 0,219, 0, 12,
+ 0, 0, 1,184, 0, 9, 0,193, 0, 0, 0,194, 0, 4, 0,197, 0, 4, 0,205, 0, 9, 0,198, 0, 7, 0,200, 0, 7, 0,201,
+ 0, 9, 6,166, 0, 9, 6,167, 0, 9, 0,202, 0, 9, 0,204, 0,220, 0, 45, 0,220, 0, 0, 0,220, 0, 1, 0, 9, 6,168,
+ 0, 9, 0, 26, 0, 0, 0, 27, 0, 4, 0, 20, 0, 4, 0, 18, 0, 4, 0, 23, 0, 4, 0, 91, 0, 4, 6,169, 0, 4, 6,170,
+ 0, 4, 6,153, 0, 4, 6,154, 0, 4, 6,171, 0, 4, 0,216, 0, 4, 6,172, 0, 4, 6,173, 0, 7, 6,174, 0, 7, 6,175,
+ 0, 4, 0,130, 0, 4, 6,176, 0,218, 6,177, 0, 36, 0, 79, 0,171, 6, 78, 0, 48, 0,140, 0, 7, 6,178, 0, 7, 6,179,
+ 0,219, 1, 0, 0,220, 6,180, 0,220, 6,181, 0,220, 6,182, 0, 12, 6,183, 0,221, 6,184, 0,222, 6,185, 0, 7, 6,186,
+ 0, 7, 6,187, 0, 4, 6,188, 0, 7, 6,189, 0, 9, 6,190, 0, 4, 6,191, 0, 4, 6,192, 0, 4, 6,193, 0, 7, 6,194,
+ 0, 4, 6, 83, 0, 4, 0, 37, 0,223, 0, 4, 0,223, 0, 0, 0,223, 0, 1, 0, 12, 6,195, 0,220, 6,196, 0,224, 0, 6,
+ 0, 12, 6,197, 0, 12, 6,183, 0, 12, 6,198, 0, 2, 0, 20, 0, 2, 0, 37, 0, 4, 0, 57, 0,225, 0, 4, 0, 7, 6,199,
+ 0, 7, 0,112, 0, 2, 6,200, 0, 2, 6,201, 0,226, 0, 6, 0, 7, 6,202, 0, 7, 6,203, 0, 7, 6,204, 0, 7, 6,205,
+ 0, 4, 6,206, 0, 4, 6,207, 0,227, 0, 12, 0, 7, 6,208, 0, 7, 6,209, 0, 7, 6,210, 0, 7, 6,211, 0, 7, 6,212,
+ 0, 7, 6,213, 0, 7, 6,214, 0, 7, 6,215, 0, 7, 6,216, 0, 7, 6,217, 0, 4, 2,140, 0, 4, 6,218, 0,228, 0, 2,
+ 0, 7, 4,132, 0, 7, 0, 37, 0,229, 0, 5, 0, 7, 6,219, 0, 7, 6,220, 0, 4, 0, 93, 0, 4, 2,103, 0, 4, 6,221,
+ 0,230, 0, 6, 0,230, 0, 0, 0,230, 0, 1, 0, 2, 0, 18, 0, 2, 0, 20, 0, 2, 6,222, 0, 2, 0, 57, 0,231, 0, 8,
+ 0,231, 0, 0, 0,231, 0, 1, 0, 2, 0, 18, 0, 2, 0, 20, 0, 2, 6,222, 0, 2, 0, 57, 0, 7, 0, 23, 0, 7, 0,130,
+ 0,232, 0, 45, 0,232, 0, 0, 0,232, 0, 1, 0, 2, 0, 18, 0, 2, 0, 20, 0, 2, 6,222, 0, 2, 0,212, 0, 2, 3,107,
+ 0, 2, 6,223, 0, 7, 6,224, 0, 7, 0, 92, 0, 7, 2,153, 0, 4, 6,225, 0, 4, 0, 81, 0, 4, 2,105, 0, 7, 6,226,
+ 0, 7, 6,227, 0, 7, 6,228, 0, 7, 6,229, 0, 7, 6,230, 0, 7, 6,231, 0, 7, 2,150, 0, 7, 0,254, 0, 7, 6,232,
+ 0, 7, 6,233, 0, 7, 0, 37, 0, 7, 6,234, 0, 7, 6,235, 0, 7, 6,236, 0, 2, 6,237, 0, 2, 6,238, 0, 2, 6,239,
+ 0, 2, 6,240, 0, 2, 6,241, 0, 2, 6,242, 0, 2, 6,243, 0, 2, 6,244, 0, 2, 5, 39, 0, 2, 6,245, 0, 2, 1,205,
+ 0, 2, 6,246, 0, 0, 6,247, 0, 0, 6,248, 0, 7, 0,210, 0,233, 6,249, 0, 63, 1,157, 0,234, 0, 16, 0,234, 0, 0,
+ 0,234, 0, 1, 0, 2, 0, 18, 0, 2, 0, 20, 0, 2, 6,222, 0, 2, 0,212, 0, 7, 2,145, 0, 7, 2,146, 0, 7, 2,147,
+ 0, 7, 1,246, 0, 7, 2,148, 0, 7, 2,149, 0, 7, 6,250, 0, 7, 2,150, 0, 7, 2,152, 0, 7, 2,153, 0,191, 0, 5,
+ 0, 2, 0, 18, 0, 2, 6,142, 0, 2, 0, 20, 0, 2, 6,251, 0, 27, 5,158, 0,190, 0, 3, 0, 4, 0, 69, 0, 4, 6,252,
+ 0,191, 0, 2, 0,235, 0, 12, 0,235, 0, 0, 0,235, 0, 1, 0, 2, 0, 18, 0, 2, 0, 20, 0, 2, 3, 17, 0, 2, 1,220,
+ 0, 7, 0, 5, 0, 7, 0, 6, 0, 7, 6,253, 0, 7, 6,254, 0, 27, 5,158, 0, 12, 6,255, 0,236, 0, 11, 0,236, 0, 0,
+ 0,236, 0, 1, 0, 0, 0, 17, 0, 2, 0, 18, 0, 2, 7, 0, 0, 4, 0, 22, 0, 4, 7, 1, 0, 2, 0, 20, 0, 2, 0, 37,
+ 0, 9, 7, 2, 0, 9, 7, 3, 0,237, 0, 5, 0, 0, 0, 17, 0, 7, 1, 16, 0, 7, 7, 4, 0, 4, 7, 5, 0, 4, 0, 37,
+ 0,238, 0, 4, 0, 2, 0, 18, 0, 2, 0, 20, 0, 2, 0, 43, 0, 2, 0, 70, 0,239, 0, 4, 0, 0, 0, 17, 0, 61, 7, 6,
+ 0, 7, 1, 16, 0, 7, 0, 37, 0,240, 0, 6, 0, 2, 7, 7, 0, 2, 7, 8, 0, 2, 0, 18, 0, 2, 7, 9, 0, 0, 7, 10,
+ 0, 0, 7, 11, 0,241, 0, 5, 0, 4, 0, 18, 0, 4, 0, 37, 0, 0, 0, 17, 0, 0, 7, 12, 0, 0, 7, 13, 0,242, 0, 3,
+ 0, 4, 0, 18, 0, 4, 0, 37, 0, 0, 0, 17, 0,243, 0, 4, 0, 2, 7, 14, 0, 2, 7, 15, 0, 2, 0, 20, 0, 2, 0, 37,
+ 0,244, 0, 6, 0, 0, 0, 17, 0, 0, 7, 16, 0, 2, 7, 17, 0, 2, 2,150, 0, 2, 1, 9, 0, 2, 0, 70, 0,245, 0, 5,
+ 0, 0, 0, 17, 0, 7, 0,112, 0, 7, 3,184, 0, 2, 0, 20, 0, 2, 2,116, 0,246, 0, 3, 0, 0, 0, 17, 0, 4, 2,105,
+ 0, 4, 7, 14, 0,247, 0, 7, 0, 0, 0, 17, 0, 7, 3,184, 0, 0, 7, 18, 0, 0, 7, 19, 0, 2, 1, 9, 0, 2, 0, 43,
+ 0, 4, 7, 20, 0,248, 0, 3, 0, 32, 7, 21, 0, 0, 7, 22, 0, 0, 7, 23, 0,249, 0, 17, 0,249, 0, 0, 0,249, 0, 1,
+ 0, 2, 0, 18, 0, 2, 7, 0, 0, 2, 0, 20, 0, 2, 7, 24, 0, 2, 7, 25, 0, 2, 7, 26, 0, 2, 0, 43, 0, 2, 0, 70,
+ 0, 0, 0, 17, 0, 9, 0, 2, 0,250, 7, 27, 0, 32, 0, 45, 0, 2, 4,138, 0, 2, 6,186, 0, 4, 0, 37, 0,251, 0, 10,
+ 0, 0, 0, 17, 0, 2, 0, 18, 0, 2, 7, 28, 0, 4, 2,116, 0, 4, 7, 29, 0, 4, 7, 30, 0, 4, 7, 31, 0, 4, 7, 32,
+ 0, 4, 7, 33, 0, 4, 7, 34, 0,252, 0, 1, 0, 0, 7, 35, 0,253, 0, 1, 0, 42, 5,131, 0,250, 0, 18, 0,250, 0, 0,
+ 0,250, 0, 1, 0,250, 7, 36, 0, 2, 0, 18, 0, 2, 0, 20, 0, 2, 7, 37, 0, 2, 7, 26, 0, 2, 7, 0, 0, 2, 7, 38,
+ 0, 2, 0, 70, 0, 2, 1, 8, 0, 0, 0, 17, 0, 9, 0, 2, 0,254, 7, 27, 0,249, 7, 39, 0, 2, 0, 15, 0, 2, 7, 40,
+ 0, 4, 7, 41, 0,255, 0, 3, 0, 4, 2,176, 0, 4, 0, 37, 0, 32, 0, 45, 1, 0, 0, 12, 0,139, 7, 42, 0, 2, 0, 18,
+ 0, 2, 0, 20, 0, 4, 6,224, 0, 4, 0, 92, 0, 0, 0, 17, 0, 0, 7, 43, 0, 2, 7, 44, 0, 2, 7, 45, 0, 2, 7, 46,
+ 0, 2, 7, 47, 0, 7, 7, 48, 1, 1, 0, 10, 0, 2, 0, 20, 0, 2, 7, 49, 0, 4, 6,224, 0, 4, 0, 92, 0, 2, 7, 50,
+ 0,221, 6,184, 0, 2, 0, 18, 0, 2, 7, 51, 0, 2, 7, 52, 0, 2, 7, 53, 1, 2, 0, 7, 0, 2, 0, 20, 0, 2, 7, 49,
+ 0, 4, 6,224, 0, 4, 0, 92, 0, 2, 0, 18, 0, 2, 7, 54, 0, 7, 7, 55, 1, 3, 0, 11, 0, 4, 2,176, 0, 2, 0, 18,
+ 0, 2, 0, 20, 0, 32, 0, 45, 0, 74, 7, 56, 0, 0, 0, 17, 0, 7, 7, 57, 0, 7, 7, 58, 0, 7, 0, 37, 0, 2, 7, 59,
+ 0, 2, 7, 60, 1, 4, 0, 5, 0, 2, 0, 18, 0, 2, 0, 20, 0, 4, 0, 37, 0,171, 6, 78, 0, 32, 4,211, 1, 5, 0, 5,
+ 0, 4, 0, 20, 0, 4, 0, 18, 0, 0, 0, 17, 0, 0, 7, 12, 0, 32, 0, 45, 1, 6, 0, 12, 0, 2, 0, 20, 0, 2, 0, 18,
+ 0, 2, 7, 0, 0, 2, 3, 11, 0, 7, 7, 61, 0, 7, 7, 62, 0, 7, 1, 3, 0, 7, 1, 4, 0, 7, 2,242, 0, 7, 2,245,
+ 0, 7, 7, 63, 0, 7, 7, 64, 1, 7, 0, 9, 0, 2, 0, 20, 0, 2, 0, 18, 0, 4, 6,224, 0, 4, 0, 92, 0, 0, 0, 17,
+ 0, 2, 0, 43, 0, 2, 0, 64, 0, 2, 7, 65, 0, 2, 7, 66, 1, 8, 0, 8, 0, 32, 0, 45, 0, 7, 2,147, 0, 7, 7, 67,
+ 0, 7, 7, 68, 0, 7, 2,142, 0, 2, 0, 20, 0, 2, 2,116, 0, 7, 7, 69, 1, 9, 0, 12, 0, 2, 0, 18, 0, 2, 1, 9,
+ 0, 2, 0, 20, 0, 2, 2,150, 0, 2, 2,176, 0, 2, 7, 70, 0, 4, 0, 37, 0, 7, 7, 71, 0, 7, 7, 72, 0, 7, 7, 73,
+ 0, 7, 7, 74, 0, 0, 7, 75, 1, 10, 0, 10, 0, 2, 0, 20, 0, 2, 0, 18, 0, 4, 6,224, 0, 4, 0, 92, 0, 0, 0, 17,
+ 0, 2, 0,181, 0, 2, 0, 64, 0, 2, 7, 65, 0, 2, 7, 66, 0, 63, 1,157, 1, 11, 0, 7, 0, 4, 2,105, 0, 4, 7, 76,
+ 0, 4, 7, 77, 0, 4, 7, 78, 0, 7, 7, 79, 0, 7, 7, 80, 0, 0, 7, 18, 1, 12, 0, 7, 0, 0, 7, 81, 0, 32, 7, 82,
+ 0, 0, 7, 22, 0, 2, 7, 83, 0, 2, 0, 43, 0, 4, 0, 70, 0, 0, 7, 23, 1, 13, 0, 6, 0, 2, 0, 20, 0, 2, 0, 18,
+ 0, 4, 6,224, 0, 4, 0, 92, 0, 0, 7, 84, 0, 0, 7, 85, 1, 14, 0, 1, 0, 4, 0, 20, 1, 15, 0, 6, 0, 0, 0, 95,
+ 0, 2, 0, 18, 0, 2, 0, 20, 0, 4, 7, 86, 0, 7, 7, 87, 0, 42, 5,131, 1, 16, 0, 3, 0, 0, 0, 95, 0, 4, 0, 18,
+ 0, 32, 0, 45, 1, 17, 0, 2, 0, 4, 0, 18, 0, 4, 5, 47, 0,254, 0, 10, 0,254, 0, 0, 0,254, 0, 1, 0,254, 7, 36,
+ 0, 2, 0, 18, 0, 2, 0, 20, 0, 2, 7, 0, 0, 2, 7, 88, 0, 0, 0, 17, 0, 9, 0, 2, 0, 32, 0, 45, 1, 18, 0, 10,
+ 0, 7, 3, 10, 0, 7, 7, 89, 0, 7, 7, 90, 0, 7, 7, 91, 0, 7, 7, 92, 0, 4, 0, 20, 0, 7, 7, 70, 0, 7, 7, 93,
+ 0, 7, 7, 94, 0, 7, 0, 37, 0,221, 0, 20, 0, 27, 0, 31, 0, 0, 0,192, 1, 19, 7, 95, 0, 9, 7, 96, 0, 43, 0,152,
+ 0, 43, 7, 97, 0, 9, 7, 98, 0, 36, 0, 79, 0, 7, 7, 55, 0, 7, 7, 99, 0, 7, 7,100, 0, 7, 7,101, 0, 7, 7,102,
+ 0, 7, 7,103, 0, 7, 7,104, 0, 4, 0, 93, 0, 4, 7,105, 0, 0, 7,106, 0, 0, 7,107, 0, 0, 7,108, 1, 20, 0, 6,
+ 0, 27, 0, 31, 0, 7, 7,109, 0, 7, 7,110, 0, 7, 7,111, 0, 2, 7,112, 0, 2, 7,113, 1, 21, 0, 14, 0,175, 0, 0,
+ 0,175, 0, 1, 0, 4, 4,247, 0, 7, 4,248, 0,176, 4,249, 0,181, 5, 60, 0,221, 6,184, 0, 2, 1, 9, 0, 2, 7, 49,
+ 0, 2, 2, 3, 0, 2, 2, 4, 0, 2, 0, 20, 0, 2, 5, 70, 0, 4, 0, 70, 1, 22, 0, 6, 1, 22, 0, 0, 1, 22, 0, 1,
+ 0, 32, 0, 45, 0, 9, 7,114, 0, 4, 0,217, 0, 4, 0, 37, 0, 63, 0, 4, 0, 27, 0, 31, 0, 12, 7,115, 0, 4, 0,135,
+ 0, 7, 7,116, 1, 23, 0, 25, 1, 23, 0, 0, 1, 23, 0, 1, 1, 23, 0, 38, 0, 12, 7,117, 0, 0, 0, 17, 0, 7, 7,118,
+ 0, 7, 7,119, 0, 7, 7,120, 0, 7, 7,121, 0, 4, 0, 20, 0, 7, 7,122, 0, 7, 7,123, 0, 7, 7,124, 0, 7, 1, 16,
+ 0, 7, 1,213, 0, 7, 7,125, 0, 7, 2,103, 0, 7, 7,126, 0, 7, 7,127, 0, 7, 7,128, 0, 7, 7,129, 0, 7, 7,130,
+ 0, 7, 0,175, 0, 2, 0,135, 0, 2, 4,154, 1, 24, 0, 19, 0, 27, 0, 31, 0, 12, 7,131, 0, 12, 7,132, 0, 4, 0, 20,
+ 0, 4, 3,226, 0, 2, 2,154, 0, 2, 7,133, 0, 2, 0,135, 0, 2, 7,134, 0, 2, 7,135, 0, 2, 7,136, 0, 2, 7,137,
+ 0, 2, 7,138, 0, 4, 7,139, 0, 4, 7,140, 0, 4, 7,141, 0, 4, 7,142, 0, 4, 7,143, 0, 4, 7,144, 1, 25, 0, 34,
+ 1, 25, 0, 0, 1, 25, 0, 1, 0, 12, 3, 34, 0, 0, 0, 17, 0, 2, 0, 20, 0, 2, 7,145, 0, 2, 7,146, 0, 2, 7,147,
+ 0, 2, 2,255, 0, 2, 7,148, 0, 4, 1,244, 0, 4, 7,141, 0, 4, 7,142, 1, 23, 7,149, 1, 25, 0, 38, 1, 25, 7,150,
+ 0, 12, 7,151, 0, 9, 7,152, 0, 9, 7,153, 0, 9, 7,154, 0, 7, 1, 3, 0, 7, 0,175, 0, 7, 1,195, 0, 7, 7,155,
+ 0, 7, 7,156, 0, 7, 2,247, 0, 7, 7,157, 0, 7, 7,158, 0, 7, 7,159, 0, 7, 7,160, 0, 7, 7,161, 0, 7, 7,162,
+ 0, 7, 1,241, 0, 32, 7,163, 0,140, 0, 9, 0, 12, 7,164, 0, 2, 0, 20, 0, 2, 7,165, 0, 7, 3, 9, 0, 7, 7,166,
+ 0, 7, 7,167, 0, 12, 7,168, 0, 4, 7,169, 0, 4, 0, 37, 1, 26, 0, 7, 1, 26, 0, 0, 1, 26, 0, 1, 0, 12, 7,106,
+ 0, 4, 0, 20, 0, 4, 7,170, 0, 0, 0, 17, 0,203, 7,171, 1, 27, 0, 8, 1, 27, 0, 0, 1, 27, 0, 1, 1, 26, 7,172,
+ 0, 36, 0, 79, 0, 12, 2,239, 0, 4, 0, 20, 0, 0, 0, 17, 0, 4, 7,173, 0,139, 0, 6, 0, 27, 0, 31, 0, 12, 7,164,
+ 0, 12, 7,174, 0, 12, 0,103, 0, 4, 7,175, 0, 4, 0, 37, 1, 28, 0, 16, 0,175, 0, 0, 0,175, 0, 1, 0, 4, 4,247,
+ 0, 7, 4,248, 0,176, 4,249, 0, 2, 4,250, 0,181, 5, 60, 0,139, 2,236, 0, 0, 1, 9, 0, 0, 5,130, 0, 2, 0, 20,
+ 0, 2, 7,176, 0, 2, 5, 67, 0, 2, 5, 70, 0, 2, 7,177, 0, 7, 7,178, 1, 29, 0, 5, 1, 29, 0, 0, 1, 29, 0, 1,
+ 0, 36, 0, 79, 0, 2, 0, 20, 0, 0, 7,179, 1, 30, 0, 12, 1, 30, 0, 0, 1, 30, 0, 1, 0, 9, 0, 2, 0, 2, 0, 18,
+ 0, 2, 0, 20, 0, 0, 7,180, 0, 0, 7,181, 0, 0, 7,179, 0, 7, 7,182, 0, 7, 7,183, 0, 4, 0, 37, 0, 36, 0, 79,
+ 1, 31, 0, 9, 1, 31, 0, 0, 1, 31, 0, 1, 0, 32, 7,184, 0, 0, 7,185, 0, 7, 7,186, 0, 2, 7,187, 0, 2, 0, 20,
+ 0, 2, 0, 18, 0, 2, 0, 37, 1, 32, 0, 7, 0, 42, 5,131, 0, 26, 7,188, 0, 4, 0, 20, 0, 4, 7,189, 0, 12, 7,190,
+ 0, 32, 7,184, 0, 0, 7,185, 1, 33, 0, 12, 0, 32, 7,184, 0, 2, 7,191, 0, 2, 0, 20, 0, 2, 7,192, 0, 2, 7,193,
+ 0, 0, 7,185, 0, 32, 7,194, 0, 0, 7,195, 0, 7, 7,196, 0, 7, 1,213, 0, 7, 7,197, 0, 7, 7,198, 1, 34, 0, 6,
+ 0, 32, 7,184, 0, 4, 7,173, 0, 4, 7,199, 0, 4, 0, 93, 0, 4, 0, 37, 0, 0, 7,185, 1, 35, 0, 4, 0, 32, 7,184,
+ 0, 4, 0, 20, 0, 4, 7,173, 0, 0, 7,185, 1, 36, 0, 4, 0, 32, 7,184, 0, 4, 0, 20, 0, 4, 7,173, 0, 0, 7,185,
+ 1, 37, 0, 10, 0, 32, 7,184, 0, 4, 7,200, 0, 7, 0,129, 0, 4, 0, 20, 0, 2, 5,125, 0, 2, 7,201, 0, 2, 0, 43,
+ 0, 2, 0, 70, 0, 7, 7,202, 0, 0, 7,185, 1, 38, 0, 4, 0, 32, 7,184, 0, 4, 0, 20, 0, 4, 7,173, 0, 0, 7,185,
+ 1, 39, 0, 10, 0, 32, 7,184, 0, 2, 0, 18, 0, 2, 3,113, 0, 4, 0, 91, 0, 4, 0, 92, 0, 7, 7, 67, 0, 7, 7, 68,
+ 0, 4, 0, 37, 0,139, 7, 42, 0, 0, 7,185, 1, 40, 0, 4, 0, 32, 7,184, 0, 4, 2,252, 0, 4, 7,203, 0, 0, 7,185,
+ 1, 41, 0, 5, 0, 32, 7,184, 0, 7, 0,129, 0, 4, 7,204, 0, 4, 2,252, 0, 4, 2,253, 1, 42, 0, 6, 0, 32, 7,184,
+ 0, 4, 7,205, 0, 4, 7,206, 0, 7, 7,207, 0, 7, 7,208, 0, 0, 7,185, 1, 43, 0, 16, 0, 32, 7,184, 0, 32, 7,150,
+ 0, 4, 0, 18, 0, 7, 7,209, 0, 7, 7,210, 0, 7, 7,211, 0, 7, 7,212, 0, 7, 7,213, 0, 7, 7,214, 0, 7, 7,215,
+ 0, 7, 7,216, 0, 7, 7,217, 0, 2, 0, 20, 0, 2, 0, 37, 0, 2, 0, 43, 0, 2, 0, 70, 1, 44, 0, 3, 0, 32, 7,184,
+ 0, 4, 0, 20, 0, 4, 5, 39, 1, 45, 0, 5, 0, 32, 7,184, 0, 4, 0, 20, 0, 4, 0, 37, 0, 7, 7,218, 0, 0, 7,185,
+ 1, 46, 0, 10, 0, 32, 7,184, 0, 0, 7,185, 0, 2, 7,219, 0, 2, 7,220, 0, 0, 7,221, 0, 0, 7,222, 0, 7, 7,223,
+ 0, 7, 7,224, 0, 7, 7,225, 0, 7, 7,226, 1, 47, 0, 8, 0, 7, 0, 9, 0, 7, 0, 10, 0, 7, 0, 11, 0, 7, 0, 12,
+ 0, 7, 7,227, 0, 7, 7,228, 0, 2, 0, 20, 0, 2, 5, 39, 1, 48, 0, 8, 0, 7, 0, 9, 0, 7, 0, 10, 0, 7, 0, 11,
+ 0, 7, 0, 12, 0, 7, 7,227, 0, 7, 7,228, 0, 2, 0, 20, 0, 2, 5, 39, 1, 49, 0, 8, 0, 7, 0, 9, 0, 7, 0, 10,
+ 0, 7, 0, 11, 0, 7, 0, 12, 0, 7, 7,227, 0, 7, 7,228, 0, 2, 0, 20, 0, 2, 5, 39, 1, 50, 0, 7, 0, 32, 7,184,
+ 0, 0, 7,185, 0, 7, 1, 16, 0, 7, 1, 26, 0, 2, 0, 20, 0, 2, 1, 9, 0, 4, 0, 37, 1, 51, 0, 10, 1, 51, 0, 0,
+ 1, 51, 0, 1, 0, 2, 0, 18, 0, 2, 0, 20, 0, 0, 7,229, 0, 7, 0,219, 0, 7, 0,220, 0, 2, 7,106, 0, 2, 7,230,
+ 0, 32, 0, 45, 1, 52, 0, 22, 1, 52, 0, 0, 1, 52, 0, 1, 0, 2, 0, 20, 0, 2, 1, 9, 0, 2, 7,231, 0, 2, 7,232,
+ 0, 36, 0, 79, 0,139, 7, 42, 0, 32, 0,167, 0, 7, 0, 91, 0, 7, 0, 92, 0, 7, 7,233, 0, 7, 7,234, 0, 7, 7,235,
+ 0, 7, 7,236, 0, 7, 2,143, 0, 7, 1,185, 0, 7, 7, 44, 0, 7, 7,237, 0, 0, 7,238, 0, 0, 7,239, 0, 12, 2,241,
+ 1, 53, 0, 8, 0, 7, 1,221, 0, 7, 7, 67, 0, 7, 7, 68, 0, 9, 0, 2, 0, 2, 7,240, 0, 2, 7,241, 0, 2, 7,242,
+ 0, 2, 7,243, 1, 54, 0, 18, 1, 54, 0, 0, 1, 54, 0, 1, 1, 54, 7,244, 0, 0, 0, 17, 1, 53, 7,245, 0, 2, 0, 18,
+ 0, 2, 0, 20, 0, 2, 7,246, 0, 2, 7,247, 0, 2, 7,248, 0, 2, 7,249, 0, 4, 0, 43, 0, 7, 7,250, 0, 7, 7,251,
+ 0, 4, 7,252, 0, 4, 7,253, 1, 54, 7,254, 1, 55, 7,255, 1, 56, 0, 30, 1, 56, 0, 0, 1, 56, 0, 1, 1, 56, 8, 0,
+ 0, 0, 0, 17, 0, 0, 8, 1, 0, 2, 0, 18, 0, 2, 0, 20, 0, 2, 6,152, 0, 2, 6,186, 0, 2, 8, 2, 0, 2, 0,137,
+ 0, 2, 7,247, 0, 2, 6,142, 0, 12, 7, 37, 0, 12, 8, 3, 0, 27, 5,158, 0, 9, 8, 4, 0, 7, 7,250, 0, 7, 7,251,
+ 0, 7, 1,246, 0, 7, 8, 5, 0, 2, 8, 6, 0, 2, 8, 7, 0, 2, 8, 8, 0, 2, 8, 9, 0, 24, 8, 10, 0, 24, 8, 11,
+ 0, 24, 8, 12, 1, 57, 0,153, 1, 58, 8, 13, 1, 55, 0, 6, 1, 55, 0, 0, 1, 55, 0, 1, 1, 56, 8, 14, 1, 56, 8, 15,
+ 1, 54, 8, 16, 1, 54, 7,254, 0, 62, 0, 16, 0, 27, 0, 31, 0, 12, 8, 17, 0, 12, 8, 18, 1, 53, 8, 19, 0, 12, 8, 20,
+ 0, 4, 0, 18, 0, 4, 8, 21, 0, 4, 8, 22, 0, 4, 8, 23, 0, 12, 8, 24, 1, 58, 8, 25, 1, 54, 8, 26, 1, 54, 8, 27,
+ 0, 9, 8, 28, 0, 9, 8, 29, 0, 4, 8, 30, 1, 59, 0, 6, 0, 4, 0,128, 0, 4, 0,130, 0, 4, 6,142, 0, 0, 8, 31,
+ 0, 0, 8, 32, 0, 2, 0, 37, 1, 60, 0, 16, 0, 2, 6, 81, 0, 2, 6, 82, 0, 2, 8, 33, 0, 2, 7, 90, 0, 2, 8, 34,
+ 0, 2, 0, 68, 0, 7, 2,142, 0, 7, 8, 35, 0, 7, 8, 36, 0, 2, 1, 30, 0, 0, 8, 37, 0, 0, 3,238, 0, 2, 8, 38,
+ 0, 2, 0, 37, 0, 4, 8, 39, 0, 4, 8, 40, 1, 61, 0, 9, 0, 7, 8, 41, 0, 7, 8, 42, 0, 7, 7,104, 0, 7, 0,112,
+ 0, 7, 8, 43, 0, 7, 4,243, 0, 2, 8, 44, 0, 0, 8, 45, 0, 0, 0, 37, 1, 62, 0, 4, 0, 7, 8, 46, 0, 7, 8, 47,
+ 0, 2, 8, 44, 0, 2, 0, 37, 1, 63, 0, 3, 0, 7, 8, 48, 0, 7, 8, 49, 0, 7, 0, 15, 1, 64, 0, 7, 0, 0, 1,184,
+ 0, 2, 4, 49, 0, 2, 4, 50, 0, 2, 4, 51, 0, 2, 4, 2, 0, 4, 0,130, 0, 4, 3,111, 1, 65, 0, 7, 0, 7, 8, 50,
+ 0, 7, 8, 51, 0, 7, 8, 52, 0, 7, 1,255, 0, 7, 8, 53, 0, 7, 8, 54, 0, 7, 8, 55, 1, 66, 0, 4, 0, 2, 8, 56,
+ 0, 2, 8, 57, 0, 2, 8, 58, 0, 2, 8, 59, 1, 67, 0, 2, 0, 7, 0, 5, 0, 7, 0, 6, 1, 68, 0, 2, 0, 0, 0,169,
+ 0, 0, 8, 60, 1, 69, 0, 1, 0, 0, 0, 17, 1, 70, 0, 10, 0, 0, 8, 61, 0, 0, 8, 62, 0, 0, 8, 63, 0, 0, 8, 64,
+ 0, 2, 8, 33, 0, 2, 8, 65, 0, 7, 8, 66, 0, 7, 8, 67, 0, 7, 8, 68, 0, 7, 1,185, 1, 71, 0, 2, 0, 9, 8, 69,
+ 0, 9, 8, 70, 1, 72, 0, 11, 0, 0, 4, 51, 0, 0, 0, 18, 0, 0, 8, 44, 0, 0, 0,112, 0, 0, 8, 71, 0, 0, 0,109,
+ 0, 0, 2, 71, 0, 7, 8, 72, 0, 7, 8, 73, 0, 7, 8, 74, 0, 7, 8, 75, 1, 73, 0, 8, 0, 7, 7, 7, 0, 7, 0,129,
+ 0, 7, 3,238, 0, 7, 2, 66, 0, 7, 8, 76, 0, 7, 0,206, 0, 7, 8, 77, 0, 4, 0, 18, 1, 74, 0, 4, 0, 2, 8, 78,
+ 0, 2, 8, 79, 0, 2, 8, 80, 0, 2, 0, 37, 1, 75, 0, 4, 0, 7, 0, 5, 0, 7, 0, 6, 0, 2, 0, 20, 0, 2, 8, 81,
+ 1, 76, 0, 10, 0, 2, 3, 93, 0, 2, 0, 20, 0, 7, 3,184, 0, 7, 8, 82, 0, 7, 8, 83, 0, 7, 8, 84, 0, 7, 8, 85,
+ 1, 75, 8, 86, 1, 75, 8, 87, 1, 75, 8, 88, 0, 59, 0, 9, 0, 4, 0, 20, 0, 4, 0, 64, 0, 24, 8, 89, 0, 24, 8, 90,
+ 1, 76, 8, 91, 0, 7, 8, 92, 0, 7, 8, 93, 0, 7, 8, 94, 0, 7, 8, 95, 1, 77, 0, 4, 0, 46, 2,136, 0, 7, 8, 96,
+ 0, 7, 1, 85, 0, 7, 0, 37, 0,163, 0, 13, 0, 27, 0, 31, 0, 2, 0, 20, 0, 2, 4,244, 0, 4, 0,109, 0, 7, 8, 97,
+ 0, 7, 1,252, 0, 7, 8, 98, 0, 7, 8, 99, 0, 7, 1, 85, 0, 2, 1, 43, 0, 2, 0, 37, 0, 50, 1, 70, 1, 77, 8,100,
+ 1, 78, 0, 8, 0, 4, 0, 18, 0, 4, 0,129, 0, 4, 0, 20, 0, 4, 3, 55, 0, 4, 8,101, 0, 0, 0, 95, 0, 0, 0, 17,
+ 0, 9, 0, 2, 0, 84, 0, 6, 1, 78, 8,102, 0, 4, 8,103, 0, 4, 8,104, 0, 4, 8,105, 0, 4, 0, 37, 0, 9, 8,106,
+ 1, 79, 0, 5, 0, 7, 2, 61, 0, 7, 2,176, 0, 7, 1,213, 0, 2, 8,107, 0, 2, 0, 37, 1, 80, 0, 5, 0, 7, 2, 61,
+ 0, 7, 8,108, 0, 7, 8,109, 0, 7, 8,110, 0, 7, 2,176, 1, 81, 0, 7, 0, 4, 8,111, 0, 4, 8,112, 0, 4, 8,113,
+ 0, 7, 8,114, 0, 7, 8,115, 0, 7, 8,116, 0, 7, 8,117, 1, 82, 0, 25, 0, 32, 8,118, 1, 80, 3, 51, 1, 79, 8,119,
+ 1, 80, 6,249, 0, 7, 8,120, 0, 7, 8,121, 0, 7, 8,122, 0, 7, 8,123, 0, 7, 8,115, 0, 7, 8,116, 0, 7, 2,176,
+ 0, 7, 2,153, 0, 7, 8,124, 0, 7, 8,125, 0, 7, 0,109, 0, 7, 8,126, 0, 4, 8,111, 0, 4, 8,127, 0, 4, 0, 37,
+ 0, 4, 0, 81, 0, 4, 8,128, 0, 2, 0, 20, 0, 2, 8,129, 0, 2, 8,130, 0, 2, 3, 85, 1, 83, 0,112, 0, 27, 0, 31,
+ 0, 4, 0, 20, 0, 2, 0, 18, 0, 2, 7,219, 0, 2, 8,131, 0, 2, 8,132, 0, 2, 8,133, 0, 2, 8,134, 0, 2, 8,135,
+ 0, 2, 8,136, 0, 2, 8,137, 0, 2, 8,138, 0, 2, 8,139, 0, 2, 8,140, 0, 2, 8,141, 0, 2, 8,142, 0, 2, 8,143,
+ 0, 2, 8,144, 0, 2, 8,145, 0, 2, 1,205, 0, 2, 6,242, 0, 2, 6,218, 0, 2, 8,146, 0, 2, 8,147, 0, 2, 3, 83,
+ 0, 2, 3, 84, 0, 2, 8,148, 0, 2, 8,149, 0, 2, 8,150, 0, 2, 8,151, 0, 2, 8,152, 0, 2, 8,153, 0, 7, 8,154,
+ 0, 7, 8,155, 0, 7, 8,156, 0, 2, 8,157, 0, 2, 8,158, 0, 7, 8,159, 0, 7, 8,160, 0, 7, 8,161, 0, 7, 6,224,
+ 0, 7, 0, 92, 0, 7, 2,153, 0, 7, 6,230, 0, 7, 8,162, 0, 7, 8,163, 0, 7, 8,164, 0, 7, 8,165, 0, 7, 0, 57,
+ 0, 4, 6,225, 0, 4, 6,223, 0, 4, 8,166, 0, 7, 6,226, 0, 7, 6,227, 0, 7, 6,228, 0, 7, 8,167, 0, 7, 8,168,
+ 0, 7, 8,169, 0, 7, 8,170, 0, 7, 8,171, 0, 7, 8,172, 0, 7, 8,173, 0, 7, 8,174, 0, 7, 3, 10, 0, 7, 0,109,
+ 0, 7, 8,175, 0, 7, 8,176, 0, 7, 8,177, 0, 7, 8,178, 0, 7, 8,179, 0, 7, 8,180, 0, 7, 2,103, 0, 7, 8,181,
+ 0, 7, 8,182, 0, 4, 8,183, 0, 4, 8,184, 0, 7, 8,185, 0, 7, 8,186, 0, 7, 8,187, 0, 7, 8,188, 0, 7, 8,189,
+ 0, 7, 8,190, 0, 7, 8,191, 0, 7, 8,192, 0, 7, 3, 79, 0, 7, 3, 77, 0, 7, 3, 78, 0, 7, 8,193, 0, 7, 8,194,
+ 0, 7, 8,195, 0, 7, 8,196, 0, 7, 8,197, 0, 7, 8,198, 0, 7, 8,199, 0, 7, 8,200, 0, 7, 8,201, 0, 7, 8,202,
+ 0, 7, 8,203, 0, 7, 8,204, 0, 7, 8,205, 0, 7, 8,206, 0, 7, 8,207, 0, 7, 8,208, 0, 7, 8,209, 0, 0, 8,210,
+ 0, 63, 3, 40, 0, 63, 8,211, 0, 32, 8,212, 0, 32, 8,213, 0, 36, 0, 79, 0,141, 3, 38, 0,141, 8,214, 0,132, 0, 37,
+ 0,132, 0, 0, 0,132, 0, 1, 1, 83, 8,215, 1, 82, 3, 92, 1, 81, 7,150, 1, 84, 8,216, 1, 85, 8,217, 1, 85, 8,218,
+ 0, 12, 8,219, 0, 12, 8,220, 0,142, 3, 39, 0, 32, 8,221, 0, 32, 8,222, 0, 32, 8,223, 0, 12, 8,224, 0, 12, 8,225,
+ 0, 7, 0,210, 0, 7, 4, 23, 0, 4, 2,105, 0, 4, 0, 20, 0, 4, 6,225, 0, 4, 8,226, 0, 4, 8,227, 0, 4, 8,228,
+ 0, 4, 0, 57, 0, 2, 0,217, 0, 2, 8,229, 0, 2, 8,230, 0, 2, 8,231, 0, 2, 3, 32, 0, 2, 8,232, 0, 0, 8,233,
+ 0, 2, 8,234, 0, 2, 8,235, 0, 2, 8,236, 0, 9, 8,237, 0,124, 3,132, 0,122, 0, 34, 1, 86, 8,238, 0, 7, 3,104,
+ 0, 7, 8,239, 0, 7, 8,240, 0, 7, 3,187, 0, 7, 8,241, 0, 7, 3, 17, 0, 7, 3, 10, 0, 7, 8,242, 0, 7, 1,254,
+ 0, 7, 8,243, 0, 7, 8,244, 0, 7, 8,245, 0, 7, 8,246, 0, 7, 8,247, 0, 7, 8,248, 0, 7, 3,105, 0, 7, 8,249,
+ 0, 7, 8,250, 0, 7, 8,251, 0, 7, 3,106, 0, 7, 3,102, 0, 7, 3,103, 0, 4, 8,252, 0, 4, 0, 93, 0, 4, 8,253,
+ 0, 4, 8,254, 0, 2, 8,255, 0, 2, 9, 0, 0, 2, 9, 1, 0, 2, 9, 2, 0, 2, 9, 3, 0, 2, 0, 37, 0, 4, 0, 70,
+ 0,123, 0, 8, 1, 86, 9, 4, 0, 7, 9, 5, 0, 7, 9, 6, 0, 7, 1,158, 0, 7, 9, 7, 0, 4, 0, 93, 0, 2, 9, 8,
+ 0, 2, 9, 9, 1, 87, 0, 4, 0, 7, 0, 5, 0, 7, 0, 6, 0, 7, 0, 7, 0, 7, 9, 10, 1, 88, 0, 6, 1, 88, 0, 0,
+ 1, 88, 0, 1, 1, 87, 9, 11, 0, 4, 9, 12, 0, 2, 9, 13, 0, 2, 0, 20, 1, 89, 0, 5, 1, 89, 0, 0, 1, 89, 0, 1,
+ 0, 12, 9, 14, 0, 4, 9, 15, 0, 4, 0, 20, 1, 90, 0, 9, 1, 90, 0, 0, 1, 90, 0, 1, 0, 12, 0,128, 1, 89, 9, 16,
+ 0, 4, 0, 20, 0, 2, 9, 13, 0, 2, 9, 17, 0, 7, 0, 94, 0, 0, 9, 18, 0,180, 0, 5, 0, 12, 4, 65, 0, 4, 0, 20,
+ 0, 2, 9, 19, 0, 2, 9, 20, 0, 9, 9, 21, 69, 78, 68, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
};
-
diff --git a/source/blender/src/previewrender.c b/source/blender/src/previewrender.c
index 0be63197dd1..8dfa32d48c8 100644
--- a/source/blender/src/previewrender.c
+++ b/source/blender/src/previewrender.c
@@ -97,6 +97,8 @@
#include "RE_pipeline.h"
#include "BLO_readfile.h"
+#include "GPU_material.h"
+
#include "blendef.h" /* CLAMP */
#include "interface.h" /* ui_graphics_to_window(), SOLVE! (ton) */
#include "mydevice.h"
@@ -221,6 +223,36 @@ void BIF_preview_changed(short id_code)
}
}
}
+
+ if(ELEM4(id_code, ID_MA, ID_TE, ID_LA, ID_WO)) {
+ Object *ob;
+ Material *ma;
+
+ if(id_code == ID_WO) {
+ for(ma=G.main->mat.first; ma; ma=ma->id.next) {
+ if(ma->gpumaterial.first) {
+ GPU_material_free(ma);
+ allqueue(REDRAWVIEW3D, 0);
+ }
+ }
+ }
+ else if(id_code == ID_LA) {
+ for(ob=G.main->object.first; ob; ob=ob->id.next) {
+ if(ob->gpulamp.first) {
+ GPU_lamp_free(ob);
+ allqueue(REDRAWVIEW3D, 0);
+ }
+ }
+ } else if(OBACT) {
+ Object *ob = OBACT;
+
+ ma= give_current_material(ob, ob->actcol);
+ if(ma && ma->gpumaterial.first) {
+ GPU_material_free(ma);
+ allqueue(REDRAWVIEW3D, 0);
+ }
+ }
+ }
}
/* *************************** Preview for buttons *********************** */
@@ -250,6 +282,15 @@ void BIF_preview_free_dbase(void)
free_main(pr_main);
}
+static Object *find_object(ListBase *lb, const char *name)
+{
+ Object *ob;
+ for(ob= lb->first; ob; ob= ob->id.next)
+ if(strcmp(ob->id.name+2, name)==0)
+ break;
+ return ob;
+}
+
/* call this with an ID pointer to initialize preview scene */
/* call this with ID NULL to restore assigned ID pointers in preview scene */
static Scene *preview_prepare_scene(RenderInfo *ri, int id_type, ID *id, int pr_method)
@@ -352,7 +393,16 @@ static Scene *preview_prepare_scene(RenderInfo *ri, int id_type, ID *id, int pr_
else if(id_type==ID_LA) {
Lamp *la= (Lamp *)id;
- sce->lay= 1<<MA_LAMP;
+ if(la && la->type==LA_SUN && (la->sun_effect_type & LA_SUN_EFFECT_SKY)) {
+ sce->lay= 1<<MA_ATMOS;
+ sce->world= G.scene->world;
+ sce->camera= (Object *)find_object(&pr_main->object, "CameraAtmo");
+ }
+ else {
+ sce->lay= 1<<MA_LAMP;
+ sce->world= NULL;
+ sce->camera= (Object *)find_object(&pr_main->object, "Camera");
+ }
sce->r.mode &= ~R_SHADOW;
for(base= sce->base.first; base; base= base->next) {
diff --git a/source/blender/src/pub/license_key.c b/source/blender/src/pub/license_key.c
deleted file mode 100644
index 3b825f35743..00000000000
--- a/source/blender/src/pub/license_key.c
+++ /dev/null
@@ -1,444 +0,0 @@
-/**
- * $Id$
- *
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
- * All rights reserved.
- *
- * The Original Code is: all of this file.
- *
- * Contributor(s): none yet.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-#include "license_key.h"
-#include "keyed_functions.h"
-#include "BKE_utildefines.h"
-#include "BIF_screen.h" // splash
-#include "BIF_toolbox.h"
-#include "blenkey.h"
-#include <stdio.h>
-#include <string.h>
-
-#include "BLI_blenlib.h"
-
-#include "BLO_readfile.h"
-#include "BLO_keyStore.h"
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-int LICENSE_KEY_VALID = TRUE;
-int I_AM_PUBLISHER = TRUE;
-
-static UserStruct User;
-
-// Python stuff
-
-#include "Python.h"
-#include "marshal.h"
-#include "compile.h" /* to give us PyCodeObject */
-#include "eval.h" /* prototype for PyEval_EvalCode */
-
-#include "BPY_extern.h"
-
-#include "IMB_imbuf.h"
-
-Fptr g_functab[PYKEY_TABLEN];
-Fptr g_ptrtab[PYKEY_TABLEN];
-
-static int g_seed[3] = PYKEY_SEED;
-static PyObject *g_module_self;
-static PyObject *g_main;
-
-
-// end Python stuff
-
-// **************** PYTHON STUFF **************************
-/* ----------------------------------------------------- */
-/* this is the dummy functions to demonstrate */
-
-int sticky_shoes(void *vp)
-{
- return 0;
-}
-
-/*
-int key_func1(void *vp) {
- printf("function 1 called\n");
-}
-
-*/
-int key_return_true(void *vp) {
- return 1;
-}
-
-
-/* ----------------------------------------------------- */
-
-/* Declarations for objects of type Fplist */
-
-
-static char prot_getseed__doc__[] = "";
-
-static PyObject *
-prot_getseed(self, args)
- PyObject *self; /* Not used */
- PyObject *args;
-{
- PyObject *p;
- p = PyTuple_New(3);
- PyTuple_SetItem(p, 0, PyInt_FromLong(g_seed[0]));
- PyTuple_SetItem(p, 1, PyInt_FromLong(g_seed[1]));
- PyTuple_SetItem(p, 2, PyInt_FromLong(g_seed[2]));
- return p;
-}
-
-static char prot_getlen__doc__[] = "";
-static PyObject *
-prot_getlen(self, args)
- PyObject *self; /* Not used */
- PyObject *args;
-{
- return Py_BuildValue("i", PYKEY_TABLEN);
-}
-
-static char prot_getptr__doc__[] =
-""
-;
-
-static PyObject *
-prot_getptr(self, args)
- PyObject *self; /* Not used */
- PyObject *args;
-{
- PyObject *p;
- Fptr f;
- int index;
- /* we don't catch errors here, we're in the key code */
- if (!g_functab)
- return NULL;
- if (!PyArg_ParseTuple(args, "i", &index))
- return NULL;
- if (index >= PYKEY_TABLEN)
- return NULL;
-
- f = g_functab[index];
- p = PyCObject_FromVoidPtr(f , NULL);
- return p;
-}
-
-static char prot_setptr__doc__[] =
-""
-;
-static PyObject *
-prot_setptr(self, args)
- PyObject *self; /* Not used */
- PyObject *args;
-{
- PyObject *p;
-
- int index;
-
- if (!g_ptrtab)
- return NULL;
- if (!PyArg_ParseTuple(args, "iO", &index, &p))
- return NULL;
- if (index >= PYKEY_TABLEN)
- return NULL;
- if (!PyCObject_Check(p)) {
- return NULL;
- }
-
- g_ptrtab[index] = PyCObject_AsVoidPtr(p);
- return Py_BuildValue("i", 1);
-}
-
-static PyObject *callkeycode(
- unsigned char *keycode,
- int keycodelen)
-{
- PyCodeObject *code;
- PyObject *maindict = PyModule_GetDict(g_main);
-
- code = (PyCodeObject *) PyMarshal_ReadObjectFromString(keycode, keycodelen);
- if (!PyEval_EvalCode(code, maindict, maindict))
- return NULL;
- return Py_BuildValue("i", 1);
-}
-
-
-
-/* List of methods defined in the module */
-
-static struct PyMethodDef prot_methods[] = {
- {"getlen", (PyCFunction)prot_getlen, METH_VARARGS, prot_getlen__doc__},
- {"getseed", (PyCFunction)prot_getseed, METH_VARARGS, prot_getseed__doc__},
- {"getptr", (PyCFunction)prot_getptr, METH_VARARGS, prot_getptr__doc__},
- {"setptr", (PyCFunction)prot_setptr, METH_VARARGS, prot_setptr__doc__},
-
- {NULL, (PyCFunction)NULL, 0, NULL} /* sentinel */
-};
-
-
-/* Initialization function for the module (*must* be called initprot) */
-
-static char prot_module_documentation[] = "No Documentation";
-
-static void init_ftable(void) // initializes functiontable
-{
- int i;
-
- g_functab[0] = &key_func1;
-/* add more key_funcs here */
-
- for (i = 1; i < PYKEY_TABLEN; i++)
- {
- g_functab[i] = &sticky_shoes;
- }
-}
-
-
-static void init_ptable(void) // initializes functiontable
-{
- int i;
-
- for (i = 0; i < PYKEY_TABLEN; i++)
- {
- g_ptrtab[i] = &sticky_shoes;
- }
-}
-
-
-static void insertname(PyObject *m,PyObject *p, char *name)
-{
- PyObject *d = PyModule_GetDict(m);
-
- EXPP_dict_set_item_str(d, name, p);
-}
-
-/* initialisation */
-static void initprot()
-{
- PyObject *m, *d;
- PyObject *capi1;
- init_ftable();
-
- g_main = PyImport_AddModule("__main__");
-
- m = Py_InitModule4("prot", prot_methods,
- prot_module_documentation,
- (PyObject*)NULL,PYTHON_API_VERSION);
- g_module_self = m;
- d = PyModule_GetDict(m);
- EXPP_dict_set_item_str(d, "error", PyString_FromString("prot.error");
-
- /* add global object */
-
- capi1 = PyCObject_FromVoidPtr((void *)g_functab , NULL);
- if (capi1) {
- insertname(m, capi1, "APIfunctab");
- }
-
- /* Check for errors */
- if (PyErr_Occurred())
- Py_FatalError("can't initialize module prot");
-
- init_ptable();
-}
-
-// ******************************* KEY STUFF *********************
-
-static void create_key_name(char * keyname)
-{
- sprintf(keyname, "%s/.BPkey", BLI_gethome());
-}
-
-void checkhome()
-{
- int keyresult;
- char *HexPriv, *HexPub, *HexPython;
- byte *Byte;
- char keyname[FILE_MAXDIR + FILE_MAXFILE];
- int wasInitialized;
- unsigned char *keycode = NULL;
- int keycodelen = 0;
-
- create_key_name(keyname);
- keyresult = ReadKeyFile(keyname, &User, &HexPriv, &HexPub,
- &Byte, &HexPython);
- if (keyresult != 0) {
- // printf("\nReadKeyFile error %d\n", keyresult);
- } else {
- // printf("\nReadKeyFile OK\n");
- LICENSE_KEY_VALID = TRUE;
-
- wasInitialized = Py_IsInitialized();
-
- // make it failsafe if python interpreter was already initialized
- if (wasInitialized)
- Py_Initialize();
-
- initprot(); // initialize module and function tables
- // get python byte code
- keycode = DeHexify(HexPython);
- keycodelen = strlen(HexPython) / 2;
-
- callkeycode(keycode, keycodelen);
-
- Py_Finalize();
-
- if (wasInitialized) // if we were initialized,
- BPY_start_python(); // restart creator python
-
- //some debugging stuff
- // print_ptable();
-
- // Store key stuff for use by stream
- keyStoreConstructor(
- &User,
- HexPriv,
- HexPub,
- Byte,
- HexPython);
-
- // other initialization code
-
- }
-}
-
-void SHOW_LICENSE_KEY(void)
-{
- extern int datatoc_tonize;
- extern char datatoc_ton[];
- char string[1024];
- int maxtype, type;
- char *typestrings[] = {
- "",
- "Individual",
- "Company",
- "Unlimited",
- "Educational"};
-
- maxtype = (sizeof(typestrings) / sizeof(char *)) - 1;
- type = User.keytype;
- if (type > maxtype) {
- type = 0;
- }
-
- if (LICENSE_KEY_VALID) {
- sprintf(string, "%s License registered to: %s (%s)", typestrings[type], User.name, User.email);
- splash((void *)datatoc_ton, datatoc_tonize, string);
- }
-}
-
-void loadKeyboard(char * name)
-{
- char keyname[FILE_MAXDIR + FILE_MAXFILE];
- FILE *in, *out;
- char string[1024], *match = 0;
- int i, c;
- int found = 0;
-
- // make sure we don't overwrite a valid key...
-
- if (!LICENSE_KEY_VALID) {
- in = fopen(name, "rb");
- if (in) {
- // scan for blender key magic, read strings
- // with anything but a newline
- while (fscanf(in, "%1000[^\n\r]", string) != EOF) {
- match = strstr(string, BLENKEYMAGIC);
- if (match) {
- break;
- }
- fscanf(in, "\n");
- }
-
- if (match) {
- // found blender key magic, open output file
- // to copy key information
-
- create_key_name(keyname);
- out = fopen(keyname, "wb");
- if (out) {
- // printout first line
- fprintf(out, "%s", match);
- for (i = 0; i < 350; i++) {
- // handle control characters (\n\r)
- while (1) {
- c = getc(in);
- if (c == '\n') {
- // output a \n for each \n in the input
- fprintf(out, "\n");
- } else if (c == EOF) {
- break;
- } else if (c < ' ') {
- // skip control characters
- } else {
- ungetc(c, in);
- break;
- }
- }
-
- if (fscanf(in, "%1000[^\n\r]", string) != EOF) {
- if (strcmp(string, BLENKEYSEPERATOR) == 0) {
- found++;
- }
- fprintf(out, "%s", string);
- } else {
- break;
- }
-
- if (found >= 2) {
- break;
- }
- }
-
- fclose(out);
-
- checkhome();
- if (LICENSE_KEY_VALID) {
- SHOW_LICENSE_KEY();
- } else {
- error("Not a valid license key ! Removing installed key.");
- BLI_delete(keyname, 0, 0);
- }
-
- } else {
- error("Can't install key");
- }
- } else {
- error("File doesn't contain a valid key: %s", name);
- }
-
- fclose(in);
-
- if (LICENSE_KEY_VALID) {
- if (okee("Remove input file: '%s'?", name)) {
- BLI_delete(name, 0, 0);
- }
- }
-
- } else {
- error("File doesn't exist: %s", name);
- }
- }
-}
diff --git a/source/blender/src/renderwin.c b/source/blender/src/renderwin.c
index 6c150f3d30f..b4d78b7fa37 100644
--- a/source/blender/src/renderwin.c
+++ b/source/blender/src/renderwin.c
@@ -100,6 +100,8 @@
#include "IMB_imbuf.h"
#include "IMB_imbuf_types.h"
+#include "GPU_draw.h"
+
#include "blendef.h"
#include "mydevice.h"
#include "winlay.h"
@@ -424,7 +426,6 @@ static void renderwin_zoom(RenderWin *rw, int ZoomIn) {
renderwin_queue_redraw(rw);
}
-#define FTOCHAR(val) val<=0.0f? 0 : (val>=(1.0f-0.5f/255.0f)? 255 :(char)((255.0f*val)+0.5f))
static void renderwin_mouse_moved(RenderWin *rw)
{
@@ -674,7 +675,7 @@ static void open_renderwin(int winpos[2], int winsize[2], int imagesize[2])
/* mywindow has to know about it too */
mywindow_build_and_set_renderwin(winpos[0], winpos[1], winsize[0], winsize[1]+RW_HEADERY);
/* and we should be able to draw 3d in it */
- init_gl_stuff();
+ GPU_state_init();
renderwin_draw(render_win, 1);
renderwin_draw(render_win, 1);
@@ -901,10 +902,13 @@ static void renderwin_progress_display_cb(RenderResult *rr, volatile rcti *rect)
void make_renderinfo_string(RenderStats *rs, char *str)
{
extern char info_time_str[32]; // header_info.c
- extern unsigned long mem_in_use, mmap_in_use;
+ uintptr_t mem_in_use, mmap_in_use;
float megs_used_memory, mmap_used_memory;
char *spos= str;
+ mem_in_use= MEM_get_memory_in_use();
+ mmap_in_use= MEM_get_mapped_memory_in_use();
+
megs_used_memory= (mem_in_use-mmap_in_use)/(1024.0*1024.0);
mmap_used_memory= (mmap_in_use)/(1024.0*1024.0);
@@ -1127,7 +1131,7 @@ static void do_render(int anim)
}
if(anim)
- RE_BlenderAnim(re, G.scene, G.scene->r.sfra, G.scene->r.efra);
+ RE_BlenderAnim(re, G.scene, G.scene->r.sfra, G.scene->r.efra, G.scene->frame_step);
else
RE_BlenderFrame(re, G.scene, G.scene->r.cfra);
@@ -1269,16 +1273,9 @@ void BIF_store_spare(void)
/* set up display, render an image or scene */
void BIF_do_render(int anim)
{
- int slink_flag = 0;
+ if (G.f & G_DOSCRIPTLINKS)
+ BPY_do_all_scripts(SCRIPT_RENDER, anim);
- if (G.f & G_DOSCRIPTLINKS) {
- BPY_do_all_scripts(SCRIPT_RENDER);
- if (!anim) { /* avoid FRAMECHANGED slink in render callback */
- G.f &= ~G_DOSCRIPTLINKS;
- slink_flag = 1;
- }
- }
-
BIF_store_spare();
do_render(anim);
@@ -1289,8 +1286,8 @@ void BIF_do_render(int anim)
}
if(G.scene->r.dither_intensity != 0.0f)
BIF_redraw_render_rect();
- if (slink_flag) G.f |= G_DOSCRIPTLINKS;
- if (G.f & G_DOSCRIPTLINKS) BPY_do_all_scripts(SCRIPT_POSTRENDER);
+
+ if (G.f & G_DOSCRIPTLINKS) BPY_do_all_scripts(SCRIPT_POSTRENDER, anim);
}
void do_ogl_view3d_render(Render *re, View3D *v3d, int winx, int winy)
@@ -1302,10 +1299,10 @@ void do_ogl_view3d_render(Render *re, View3D *v3d, int winx, int winy)
if(v3d->persp==V3D_CAMOB && v3d->camera) {
/* in camera view, use actual render winmat */
RE_GetCameraWindow(re, v3d->camera, CFRA, winmat);
- drawview3d_render(v3d, winx, winy, winmat);
+ drawview3d_render(v3d, NULL, winx, winy, winmat, 0);
}
else
- drawview3d_render(v3d, winx, winy, NULL);
+ drawview3d_render(v3d, NULL, winx, winy, NULL, 0);
}
/* set up display, render the current area view in an image */
@@ -1334,22 +1331,34 @@ void BIF_do_ogl_render(View3D *v3d, int anim)
if(render_win)
render_win->flags &= ~RW_FLAGS_ESCAPE;
- init_gl_stuff();
+ GPU_state_init();
waitcursor(1);
if(anim) {
bMovieHandle *mh= BKE_get_movie_handle(G.scene->r.imtype);
+ unsigned int lay;
int cfrao= CFRA;
+ int nfra;
if(BKE_imtype_is_movie(G.scene->r.imtype))
mh->start_movie(&G.scene->r, winx, winy);
- for(CFRA= SFRA; CFRA<=EFRA; CFRA++) {
+ for(nfra= SFRA, CFRA= SFRA; CFRA<=EFRA; CFRA++) {
/* user event can close window */
if(render_win==NULL)
break;
+ if(nfra!=CFRA) {
+ if(G.scene->lay & 0xFF000000)
+ lay= G.scene->lay & 0xFF000000;
+ else
+ lay= G.scene->lay;
+
+ scene_update_for_newframe(G.scene, lay);
+ continue;
+ }
+
do_ogl_view3d_render(re, v3d, winx, winy);
glReadPixels(0, 0, winx, winy, GL_RGBA, GL_UNSIGNED_BYTE, rr->rect32);
if((G.scene->r.scemode & R_STAMP_INFO) && (G.scene->r.stamp & R_STAMP_DRAW)) {
@@ -1384,6 +1393,7 @@ void BIF_do_ogl_render(View3D *v3d, int anim)
printf("\n");
if(test_break()) break;
+ nfra+= STFRA;
}
if(BKE_imtype_is_movie(G.scene->r.imtype))
diff --git a/source/blender/src/resources.c b/source/blender/src/resources.c
index f47f14a605c..5481f717971 100644
--- a/source/blender/src/resources.c
+++ b/source/blender/src/resources.c
@@ -313,7 +313,15 @@ char *BIF_ThemeGetColorPtr(bTheme *btheme, int spacetype, int colorid)
cp= ts->transition; break;
case TH_SEQ_META:
cp= ts->meta; break;
-
+ case TH_HANDLE_VERTEX:
+ cp= ts->handle_vertex;
+ break;
+ case TH_HANDLE_VERTEX_SELECT:
+ cp= ts->handle_vertex_select;
+ break;
+ case TH_HANDLE_VERTEX_SIZE:
+ cp= &ts->handle_vertex_size;
+ break;
}
}
@@ -493,6 +501,10 @@ void BIF_InitTheme(void)
SETCOL(btheme->tipo.hilite, 0x60, 0xc0, 0x40, 255);
btheme->tipo.vertex_size= 3;
+ SETCOL(btheme->tipo.handle_vertex, 0xff, 0x70, 0xff, 255);
+ SETCOL(btheme->tipo.handle_vertex_select, 0xff, 0xff, 0x70, 255);
+ btheme->tipo.handle_vertex_size= 3;
+
/* space file */
/* to have something initialized */
btheme->tfile= btheme->tv3d;
@@ -684,7 +696,10 @@ char *BIF_ThemeColorsPup(int spacetype)
str += sprintf(str, "Vertex %%x%d|", TH_VERTEX);
str += sprintf(str, "Vertex Selected %%x%d|", TH_VERTEX_SELECT);
str += sprintf(str, "Vertex Size %%x%d|", TH_VERTEX_SIZE);
- str += sprintf(str, "Current Frame %%x%d", TH_CFRAME);
+ str += sprintf(str, "Current Frame %%x%d|", TH_CFRAME);
+ str += sprintf(str, "Handle Vertex %%x%d|", TH_HANDLE_VERTEX);
+ str += sprintf(str, "Handle Vertex Selected %%x%d|", TH_HANDLE_VERTEX_SELECT);
+ str += sprintf(str, "Handle Vertex Size %%x%d", TH_HANDLE_VERTEX_SIZE);
break;
case SPACE_FILE:
str += sprintf(str, "Selected file %%x%d", TH_HILITE);
@@ -738,6 +753,8 @@ char *BIF_ThemeColorsPup(int spacetype)
str += sprintf(str, "Transition Strip %%x%d|", TH_SEQ_TRANSITION);
str += sprintf(str, "Meta Strip %%x%d|", TH_SEQ_META);
str += sprintf(str, "Current Frame %%x%d", TH_CFRAME);
+ str += sprintf(str, "Keyframe %%x%d|", TH_VERTEX_SELECT);
+ str += sprintf(str, "Draw Action %%x%d|", TH_BONE_POSE);
break;
case SPACE_SOUND:
str += sprintf(str, "Grid %%x%d|", TH_GRID);
@@ -757,6 +774,7 @@ char *BIF_ThemeColorsPup(int spacetype)
break;
case SPACE_TEXT:
str += sprintf(str, "Scroll Bar %%x%d|", TH_SHADE1);
+ str += sprintf(str, "Line Numbers Background %%x%d|", TH_GRID);
str += sprintf(str, "Selected Text %%x%d|", TH_SHADE2);
str += sprintf(str, "Cursor %%x%d|", TH_HILITE);
str += sprintf(str, "%%l|");
diff --git a/source/blender/src/retopo.c b/source/blender/src/retopo.c
index 60be622e3ad..5118744127c 100644
--- a/source/blender/src/retopo.c
+++ b/source/blender/src/retopo.c
@@ -85,18 +85,18 @@ typedef struct RetopoPaintHit {
float where;
} RetopoPaintHit;
-void retopo_do_2d(View3D *v3d, double proj[2], float *v, char adj);
-void retopo_paint_debug_print(RetopoPaintData *rpd);
+static void retopo_do_2d(View3D *v3d, double proj[2], float *v, char adj);
+static void retopo_paint_debug_print(RetopoPaintData *rpd);
/* Painting */
-RetopoPaintData *get_retopo_paint_data()
+RetopoPaintData *get_retopo_paint_data(void)
{
if(!retopo_mesh_paint_check()) return NULL;
if(!G.editMesh) return NULL;
return G.editMesh->retopo_paint_data;
}
-char retopo_mesh_paint_check()
+char retopo_mesh_paint_check(void)
{
return retopo_mesh_check() && G.scene->toolsettings->retopo_mode & RETOPO_PAINT;
}
@@ -117,7 +117,7 @@ void retopo_free_paint_data(RetopoPaintData *rpd)
}
}
-void retopo_free_paint()
+void retopo_free_paint(void)
{
retopo_free_paint_data(G.editMesh->retopo_paint_data);
G.editMesh->retopo_paint_data= NULL;
@@ -251,7 +251,7 @@ EditFace *addfaceif(EditMesh *em, EditVert *v1, EditVert *v2, EditVert *v3, Edit
return addfacelist(v1,v2,v3,v4,NULL,NULL);
}
-void retopo_paint_apply()
+void retopo_paint_apply(void)
{
RetopoPaintData *rpd= G.editMesh->retopo_paint_data;
EditVert *eve;
@@ -392,7 +392,7 @@ void retopo_paint_add_ellipse(RetopoPaintData *rpd, short mouse[2])
allqueue(REDRAWVIEW3D,0);
}
-void retopo_end_okee()
+void retopo_end_okee(void)
{
if(okee("Apply retopo paint?"))
retopo_paint_apply();
@@ -442,7 +442,7 @@ void retopo_paint_view_update(struct View3D *v3d)
}
}
-void retopo_force_update()
+void retopo_force_update(void)
{
RetopoPaintData *rpd= get_retopo_paint_data();
@@ -727,11 +727,11 @@ RetopoPaintData *retopo_paint_data_copy(RetopoPaintData *rpd)
return copy;
}
-char retopo_mesh_check()
+char retopo_mesh_check(void)
{
return G.obedit && G.obedit->type==OB_MESH && (G.scene->toolsettings->retopo_mode & RETOPO);
}
-char retopo_curve_check()
+char retopo_curve_check(void)
{
return G.obedit && (G.obedit->type==OB_CURVE ||
G.obedit->type==OB_SURF) && (((Curve*)G.obedit->data)->flag & CU_RETOPO);
@@ -751,7 +751,7 @@ void retopo_toggle(void *j1,void *j2)
allqueue(REDRAWVIEW3D, 0);
}
-void retopo_do_2d(View3D *v3d, double proj[2], float *v, char adj)
+static void retopo_do_2d(View3D *v3d, double proj[2], float *v, char adj)
{
/* Check to make sure vert is visible in window */
if(proj[0]>0 && proj[1]>0 && proj[0] < v3d->depths->w && proj[1] < v3d->depths->h) {
@@ -792,7 +792,7 @@ void retopo_do_vert(View3D *v3d, float *v)
retopo_do_2d(v3d,proj,v,0);
}
-void retopo_do_all()
+void retopo_do_all(void)
{
RetopoViewData *rvd= G.vd->retopo_view_data;
if(retopo_mesh_check()) {
@@ -826,11 +826,11 @@ void retopo_do_all()
}
else if(nu->type & CU_BEZIER) {
for(i=0; i<nu->pntsu; ++i) {
- if(nu->bezt[i].f1 & 1)
+ if(nu->bezt[i].f1 & SELECT)
retopo_do_vert(G.vd, nu->bezt[i].vec[0]);
- if(nu->bezt[i].f2 & 1)
+ if(nu->bezt[i].f2 & SELECT)
retopo_do_vert(G.vd, nu->bezt[i].vec[1]);
- if(nu->bezt[i].f3 & 1)
+ if(nu->bezt[i].f3 & SELECT)
retopo_do_vert(G.vd, nu->bezt[i].vec[2]);
}
}
@@ -905,7 +905,7 @@ void retopo_free_view_data(View3D *v3d)
}
}
-void retopo_paint_debug_print(RetopoPaintData *rpd)
+static void retopo_paint_debug_print(RetopoPaintData *rpd)
{
RetopoPaintLine *l;
RetopoPaintPoint *p;
diff --git a/source/blender/src/sculptmode.c b/source/blender/src/sculptmode.c
index 24f4100efdb..c534a8b3cab 100644
--- a/source/blender/src/sculptmode.c
+++ b/source/blender/src/sculptmode.c
@@ -82,7 +82,6 @@
#include "BIF_space.h"
#include "BIF_toolbox.h"
-#include "BDR_drawobject.h"
#include "BDR_sculptmode.h"
#include "BSE_drawview.h"
@@ -98,6 +97,8 @@
#include "RE_render_ext.h"
#include "RE_shader_ext.h" /*for multitex_ext*/
+#include "GPU_draw.h"
+
#include <math.h>
#include <stdlib.h>
#include <string.h>
@@ -191,9 +192,9 @@ SculptData *sculpt_data(void)
return &G.scene->sculptdata;
}
-void sculpt_init_session(void);
-void init_brushaction(BrushAction *a, short *, short *);
-void sculpt_undo_push(const short);
+static void sculpt_init_session(void);
+static void init_brushaction(BrushAction *a, short *, short *);
+static void sculpt_undo_push(const short);
SculptSession *sculpt_session(void)
{
@@ -207,7 +208,7 @@ SculptSession *sculpt_session(void)
* Allocate/initialize/free data
*/
-void sculpt_init_session(void)
+static void sculpt_init_session(void)
{
if(sculpt_data()->session)
sculptsession_free(G.scene);
@@ -216,7 +217,7 @@ void sculpt_init_session(void)
/* vertex_users is an array of Lists that store all the faces that use a
particular vertex. vertex_users is in the same order as mesh.mvert */
-void calc_vertex_users()
+static void calc_vertex_users()
{
SculptSession *ss= sculpt_session();
int i,j;
@@ -864,14 +865,14 @@ float tex_strength(BrushAction *a, float *point, const float len,const unsigned
float fy= point_2d[1];
float angle= atan2(fy, fx) - rot;
- float len= sqrtf(fx*fx + fy*fy);
+ float flen= sqrtf(fx*fx + fy*fy);
if(rot<0.001 && rot>-0.001) {
px= point_2d[0];
py= point_2d[1];
} else {
- px= len * cos(angle) + 2000;
- py= len * sin(angle) + 2000;
+ px= flen * cos(angle) + 2000;
+ py= flen * sin(angle) + 2000;
}
if(sx != 1)
px %= sx-1;
@@ -883,10 +884,10 @@ float tex_strength(BrushAction *a, float *point, const float len,const unsigned
float fy= (point_2d[1] - a->mouse[1]) / bsize;
float angle= atan2(fy, fx) - rot;
- float len= sqrtf(fx*fx + fy*fy);
+ float flen= sqrtf(fx*fx + fy*fy);
- fx = len * cos(angle) + 0.5;
- fy = len * sin(angle) + 0.5;
+ fx = flen * cos(angle) + 0.5;
+ fy = flen * sin(angle) + 0.5;
avg= get_texcache_pixel_bilinear(ss, fx * TC_SIZE, fy * TC_SIZE);
}
@@ -1222,7 +1223,7 @@ void sculptmode_update_tex()
}
/* pr_mouse is only used for the grab brush, can be NULL otherwise */
-void init_brushaction(BrushAction *a, short *mouse, short *pr_mouse)
+static void init_brushaction(BrushAction *a, short *mouse, short *pr_mouse)
{
SculptData *sd = sculpt_data();
const float mouse_depth = get_depth(mouse[0], mouse[1]);
@@ -1514,7 +1515,7 @@ void sculptmode_draw_mesh(int only_damaged)
mymultmatrix(OBACT->obmat);
glEnable(GL_DEPTH_TEST);
glEnable(GL_LIGHTING);
- init_gl_materials(OBACT, 0);
+ GPU_set_object_materials(G.scene, OBACT, 0, NULL);
glEnable(GL_CULL_FACE);
glShadeModel(GL_SMOOTH);
@@ -1532,7 +1533,7 @@ void sculptmode_draw_mesh(int only_damaged)
int new_matnr= f->mat_nr + 1;
if(new_matnr != matnr)
- drawCurrentMat= set_gl_material(matnr = new_matnr);
+ drawCurrentMat= GPU_enable_material(matnr = new_matnr, NULL);
/* If only_damaged!=0, only draw faces that are partially
inside the area(s) modified by the brush */
@@ -1808,7 +1809,7 @@ void sculpt(void)
allqueue(REDRAWVIEW3D, 0);
}
-void sculpt_undo_push(const short brush_type)
+static void sculpt_undo_push(const short brush_type)
{
switch(brush_type) {
case DRAW_BRUSH:
diff --git a/source/blender/src/seqaudio.c b/source/blender/src/seqaudio.c
index 7c27f32c242..1e0c8099dea 100644
--- a/source/blender/src/seqaudio.c
+++ b/source/blender/src/seqaudio.c
@@ -27,6 +27,7 @@
* ***** END GPL LICENSE BLOCK *****
*/
+
#include <math.h>
#include <stdlib.h>
#include <string.h>
@@ -85,7 +86,7 @@
#include "blendef.h"
-void audio_fill(void *mixdown, Uint8 *sstream, int len);
+static void audio_fill(void *mixdown, Uint8 *sstream, int len);
/* ************ GLOBALS ************* */
static int audio_pos;
@@ -118,6 +119,7 @@ void makewavstring (char *string)
void audio_mixdown()
{
+#ifndef DISABLE_SDL
int file, c, totlen, totframe, i, oldcfra;
char *buf;
@@ -203,6 +205,7 @@ void audio_mixdown()
MEM_freeN(buf);
return;
+#endif
}
void audiostream_fill(Uint8 *mixdown, int len)
@@ -211,7 +214,7 @@ void audiostream_fill(Uint8 *mixdown, int len)
int i;
memset(mixdown, 0, len);
-
+#ifndef DISABLE_SDL
for (i = 0; i < len; i += 64) {
CFRA = (int) ( ((float)(audio_pos-64)
/( G.scene->audio.mixrate*4 ))
@@ -222,6 +225,7 @@ void audiostream_fill(Uint8 *mixdown, int len)
}
CFRA = oldcfra;
+#endif
}
@@ -288,6 +292,7 @@ void audio_makestream(bSound *sound)
}
}
+#ifndef DISABLE_SDL
static void audio_fill_ram_sound(Sequence *seq, void * mixdown,
Uint8 * sstream, int len)
{
@@ -318,7 +323,9 @@ static void audio_fill_ram_sound(Sequence *seq, void * mixdown,
}
seq->curpos += len;
}
+#endif
+#ifndef DISABLE_SDL
static void audio_fill_hd_sound(Sequence *seq,
void * mixdown, Uint8 * sstream,
int len)
@@ -354,7 +361,9 @@ static void audio_fill_hd_sound(Sequence *seq,
}
seq->curpos += len;
}
+#endif
+#ifndef DISABLE_SDL
static void audio_fill_seq(Sequence * seq, void * mixdown,
Uint8 *sstream, int len, int advance_only)
{
@@ -407,8 +416,10 @@ static void audio_fill_seq(Sequence * seq, void * mixdown,
seq = seq->next;
}
}
+#endif
-void audio_fill(void *mixdown, Uint8 *sstream, int len)
+#ifndef DISABLE_SDL
+static void audio_fill(void *mixdown, Uint8 *sstream, int len)
{
Editing *ed;
Sequence *seq;
@@ -427,7 +438,9 @@ void audio_fill(void *mixdown, Uint8 *sstream, int len)
}
}
}
+#endif
+#ifndef DISABLE_SDL
static int audio_init(SDL_AudioSpec *desired)
{
SDL_AudioSpec *obtained, *hardware_spec;
@@ -452,6 +465,7 @@ static int audio_init(SDL_AudioSpec *desired)
SDL_PauseAudio(0);
return 1;
}
+#endif
static int audiostream_play_seq(Sequence * seq, Uint32 startframe)
{
@@ -498,6 +512,7 @@ static int audiostream_play_seq(Sequence * seq, Uint32 startframe)
void audiostream_play(Uint32 startframe, Uint32 duration, int mixdown)
{
+#ifndef DISABLE_SDL
static SDL_AudioSpec desired;
Editing *ed;
int have_sound = 0;
@@ -539,6 +554,7 @@ void audiostream_play(Uint32 startframe, Uint32 duration, int mixdown)
SDL_PauseAudio(0);
audio_playing++;
}
+#endif
}
void audiostream_start(Uint32 frame)
@@ -553,8 +569,10 @@ void audiostream_scrub(Uint32 frame)
void audiostream_stop(void)
{
+#ifndef DISABLE_SDL
SDL_PauseAudio(1);
audio_playing=0;
+#endif
}
int audiostream_pos(void)
diff --git a/source/blender/src/seqscopes.c b/source/blender/src/seqscopes.c
index 34cd27dfdd3..553752c0676 100644
--- a/source/blender/src/seqscopes.c
+++ b/source/blender/src/seqscopes.c
@@ -384,7 +384,6 @@ static void draw_zebra_byte(struct ImBuf * src,struct ImBuf * ibuf, float perc)
}
}
-#define FTOCHAR(val) val<=0.0f?0: (val>=1.0f?255: (char)(255.99f*val))
static void draw_zebra_float(struct ImBuf * src,struct ImBuf * ibuf,float perc)
{
diff --git a/source/blender/src/sequence.c b/source/blender/src/sequence.c
index 7e2ffc3ba63..5be11a724f1 100644
--- a/source/blender/src/sequence.c
+++ b/source/blender/src/sequence.c
@@ -2949,13 +2949,16 @@ void do_render_seq(RenderResult *rr, int cfra)
(schlaile)
*/
{
- extern int mem_in_use;
- extern int mmap_in_use;
+ uintptr_t mem_in_use;
+ uintptr_t mmap_in_use;
+ uintptr_t max;
+
+ mem_in_use= MEM_get_memory_in_use();
+ mmap_in_use= MEM_get_mapped_memory_in_use();
+ max = MEM_CacheLimiter_get_maximum();
- int max = MEM_CacheLimiter_get_maximum();
if (max != 0 && mem_in_use + mmap_in_use > max) {
- fprintf(stderr, "mem_in_use = %d, max = %d\n",
- mem_in_use + mmap_in_use, max);
+ fprintf(stderr, "Memory in use > maximum memory\n");
fprintf(stderr, "Cleaning up, please wait...\n"
"If this happens very often,\n"
"consider "
diff --git a/source/blender/src/space.c b/source/blender/src/space.c
index 8d86336e12e..0339747ec66 100644
--- a/source/blender/src/space.c
+++ b/source/blender/src/space.c
@@ -64,6 +64,7 @@
#include "DNA_modifier_types.h" /* used for select grouped hooks */
#include "DNA_object_types.h"
#include "DNA_particle_types.h"
+#include "DNA_property_types.h"
#include "DNA_scene_types.h"
#include "DNA_screen_types.h"
#include "DNA_sequence_types.h"
@@ -87,13 +88,13 @@
#include "BKE_multires.h"
#include "BKE_node.h"
#include "BKE_pointcache.h"
+#include "BKE_property.h"
#include "BKE_scene.h"
#include "BKE_sculpt.h"
#include "BKE_texture.h"
#include "BKE_utildefines.h"
#include "BKE_image.h" /* for IMA_TYPE_COMPOSITE and IMA_TYPE_R_RESULT */
#include "BKE_particle.h"
-
#include "BIF_spacetypes.h" /* first, nasty dependency with typedef */
#include "BIF_butspace.h"
@@ -122,6 +123,7 @@
#include "BIF_imasel.h"
#include "BIF_interface.h"
#include "BIF_interface_icons.h"
+#include "BIF_keyframing.h"
#include "BIF_meshtools.h"
#include "BIF_mywindow.h"
#include "BIF_oops.h"
@@ -182,6 +184,11 @@
#include "SYS_System.h" /* for the user def menu ... should move elsewhere. */
+#include "GPU_extensions.h"
+#include "GPU_draw.h"
+
+#include "BLO_sys_types.h" // for intptr_t support
+
/* maybe we need this defined somewhere else */
extern void StartKetsjiShell(ScrArea *area, char* startscenename, struct Main* maggie, struct SpaceIpo* sipo,int always_use_expand_framing);
extern void StartKetsjiShellSimulation(ScrArea *area, char* startscenename, struct Main* maggie, struct SpaceIpo* sipo,int always_use_expand_framing);/*rcruiz*/
@@ -190,9 +197,9 @@ extern void StartKetsjiShellSimulation(ScrArea *area, char* startscenename, stru
* When the mipmap setting changes, we want to redraw the view right
* away to reflect this setting.
*/
-void space_mipmap_button_function(int event);
+static void space_mipmap_button_function(int event);
-void free_soundspace(SpaceSound *ssound);
+static void free_soundspace(SpaceSound *ssound);
/* *************************************** */
@@ -381,10 +388,14 @@ void space_set_commmandline_options(void) {
if ( (syshandle = SYS_GetSystem()) ) {
/* User defined settings */
a= (U.gameflags & USER_DISABLE_SOUND);
- SYS_WriteCommandLineInt(syshandle, "noaudio", a);
+ /* if user already disabled audio at the command-line, don't re-enable it */
+ if (a)
+ {
+ SYS_WriteCommandLineInt(syshandle, "noaudio", a);
+ }
a= (U.gameflags & USER_DISABLE_MIPMAP);
- set_mipmap(!a);
+ GPU_set_mipmap(!a);
SYS_WriteCommandLineInt(syshandle, "nomipmap", a);
/* File specific settings: */
@@ -413,7 +424,9 @@ void space_set_commmandline_options(void) {
a=(G.fileflags & G_FILE_GAME_MAT);
SYS_WriteCommandLineInt(syshandle, "blender_material", a);
- a=(G.fileflags & G_FILE_DIAPLAY_LISTS);
+ a=(G.fileflags & G_FILE_GAME_MAT_GLSL);
+ SYS_WriteCommandLineInt(syshandle, "blender_glsl_material", a);
+ a=(G.fileflags & G_FILE_DISPLAY_LISTS);
SYS_WriteCommandLineInt(syshandle, "displaylists", a);
@@ -430,11 +443,10 @@ static void SaveState(void)
{
glPushAttrib(GL_ALL_ATTRIB_BITS);
- init_realtime_GL();
- init_gl_stuff();
+ GPU_state_init();
if(G.f & G_TEXTUREPAINT)
- texpaint_enable_mipmap();
+ GPU_paint_set_mipmap(1);
waitcursor(1);
}
@@ -442,7 +454,7 @@ static void SaveState(void)
static void RestoreState(void)
{
if(G.f & G_TEXTUREPAINT)
- texpaint_disable_mipmap();
+ GPU_paint_set_mipmap(0);
curarea->win_swap = 0;
curarea->head_swap=0;
@@ -460,7 +472,7 @@ static LinkNode *save_and_reset_all_scene_cfra(void)
Scene *sc;
for (sc= G.main->scene.first; sc; sc= sc->id.next) {
- BLI_linklist_prepend(&storelist, (void*) (long) sc->r.cfra);
+ BLI_linklist_prepend(&storelist, (void*) (intptr_t) sc->r.cfra);
/* why is this reset to 1 ?*/
/* sc->r.cfra= 1;*/
@@ -478,7 +490,7 @@ static void restore_all_scene_cfra(LinkNode *storelist) {
Scene *sc;
for (sc= G.main->scene.first; sc; sc= sc->id.next) {
- int stored_cfra= (long) sc_store->link;
+ int stored_cfra= (intptr_t) sc_store->link;
sc->r.cfra= stored_cfra;
set_scene_bg(sc);
@@ -704,7 +716,7 @@ static short select_parent(void) /* Makes parent active and de-selected OBACT */
short changed = 0;
Base *base, *startbase, *basact=NULL, *oldbasact;
- if (!(OBACT) || !(OBACT->parent)) return 0;
+ if (!(OBACT->parent)) return 0; /* we know OBACT is valid */
BASACT->flag &= (~SELECT);
BASACT->object->flag &= (~SELECT);
startbase= FIRSTBASE;
@@ -740,9 +752,6 @@ static short select_same_group(Object *ob) /* Select objects in the same group a
char str[10 + (24*GROUP_MENU_MAX)];
char *p = str;
int group_count=0, menu, i;
-
- if (!ob)
- return 0;
for ( group=G.main->group.first;
group && group_count < GROUP_MENU_MAX;
@@ -798,9 +807,6 @@ static short select_object_hooks(Object *ob)
ModifierData *md;
HookModifierData *hmd;
- if (!ob)
- return 0;
-
for (md = ob->modifiers.first; md; md=md->next) {
if (md->type==eModifierType_Hook) {
hmd= (HookModifierData*) md;
@@ -823,8 +829,6 @@ static short select_same_parent(Object *ob)
{
short changed = 0;
Base *base;
- if (!ob)
- return 0;
for (base= FIRSTBASE; base; base= base->next) {
if (BASE_SELECTABLE(base) && (base->object->parent==ob->parent) && !(base->flag & SELECT)) {
@@ -840,8 +844,6 @@ static short select_same_type(Object *ob)
{
short changed = 0;
Base *base;
- if (!ob)
- return 0;
for (base= FIRSTBASE; base; base= base->next) {
if (BASE_SELECTABLE(base) && (base->object->type == ob->type) && !(base->flag & SELECT)) {
@@ -858,9 +860,6 @@ static short select_same_layer(Object *ob)
char changed = 0;
Base *base = FIRSTBASE;
- if (!ob)
- return 0;
-
while(base) {
if (BASE_SELECTABLE(base) && (base->lay & ob->lay) && !(base->flag & SELECT)) {
base->flag |= SELECT;
@@ -877,9 +876,6 @@ static short select_same_index_object(Object *ob)
char changed = 0;
Base *base = FIRSTBASE;
- if (!ob)
- return 0;
-
while(base) {
if (BASE_SELECTABLE(base) && (base->object->index == ob->index) && !(base->flag & SELECT)) {
base->flag |= SELECT;
@@ -891,18 +887,68 @@ static short select_same_index_object(Object *ob)
return changed;
}
+static short select_same_color(Object *ob)
+{
+ char changed = 0;
+ Base *base = FIRSTBASE;
+
+ while(base) {
+ if (BASE_SELECTABLE(base) && !(base->flag & SELECT) && (FloatCompare(base->object->col, ob->col, 0.005))) {
+ base->flag |= SELECT;
+ base->object->flag |= SELECT;
+ changed = 1;
+ }
+ base= base->next;
+ }
+ return changed;
+}
+
+static short objects_share_gameprop(Object *a, Object *b)
+{
+ bProperty *prop;
+ /*make a copy of all its properties*/
+
+ for( prop= a->prop.first; prop; prop = prop->next ) {
+ if ( get_ob_property(b, prop->name) )
+ return 1;
+ }
+ return 0;
+}
+
+static short select_same_gameprops(Object *ob)
+{
+ char changed = 0;
+ Base *base = FIRSTBASE;
+
+ while(base) {
+ if (BASE_SELECTABLE(base) && !(base->flag & SELECT) && (objects_share_gameprop(base->object, ob))) {
+ base->flag |= SELECT;
+ base->object->flag |= SELECT;
+ changed = 1;
+ }
+ base= base->next;
+ }
+ return changed;
+}
+
void select_object_grouped(short nr)
{
+ Object *ob = OBACT;
short changed = 0;
- if(nr==1) changed = select_children(OBACT, 1);
- else if(nr==2) changed = select_children(OBACT, 0);
+
+ if (ob==NULL) return;
+
+ if(nr==1) changed = select_children(ob, 1);
+ else if(nr==2) changed = select_children(ob, 0);
else if(nr==3) changed = select_parent();
- else if(nr==4) changed = select_same_parent(OBACT);
- else if(nr==5) changed = select_same_type(OBACT);
- else if(nr==6) changed = select_same_layer(OBACT);
- else if(nr==7) changed = select_same_group(OBACT);
- else if(nr==8) changed = select_object_hooks(OBACT);
- else if(nr==9) changed = select_same_index_object(OBACT);
+ else if(nr==4) changed = select_same_parent(ob);
+ else if(nr==5) changed = select_same_type(ob);
+ else if(nr==6) changed = select_same_layer(ob);
+ else if(nr==7) changed = select_same_group(ob);
+ else if(nr==8) changed = select_object_hooks(ob);
+ else if(nr==9) changed = select_same_index_object(ob);
+ else if(nr==10) changed = select_same_color(ob);
+ else if(nr==11) changed = select_same_gameprops(ob);
if (changed) {
countall();
@@ -928,7 +974,10 @@ static void select_object_grouped_menu(void)
"Objects of Same Type%x5|"
"Objects on Shared Layers%x6|"
"Objects in Same Group%x7|"
- "Object Hooks%x8|Object PassIndex%x9");
+ "Object Hooks%x8|"
+ "Object PassIndex%x9|"
+ "Object Color%x10|"
+ "Game Properties%x11");
/* here we go */
@@ -1022,9 +1071,9 @@ void BIF_undo(void)
}
else {
if(G.f & G_TEXTUREPAINT)
- imagepaint_undo();
+ undo_imagepaint_step(1);
else if(curarea->spacetype==SPACE_IMAGE && (G.sima->flag & SI_DRAWTOOL))
- imagepaint_undo();
+ undo_imagepaint_step(1);
else if(G.f & G_PARTICLEEDIT)
PE_undo();
else {
@@ -1046,9 +1095,9 @@ void BIF_redo(void)
}
else {
if(G.f & G_TEXTUREPAINT)
- imagepaint_undo();
+ undo_imagepaint_step(-1);
else if(curarea->spacetype==SPACE_IMAGE && (G.sima->flag & SI_DRAWTOOL))
- imagepaint_undo();
+ undo_imagepaint_step(-1);
else if(G.f & G_PARTICLEEDIT)
PE_redo();
else {
@@ -1200,8 +1249,8 @@ static void winqreadview3dspace(ScrArea *sa, void *spacedata, BWinEvent *evt)
*/
if(event==LEFTMOUSE) {
/* run any view3d event handler script links */
- if (event && sa->scriptlink.totscript) {
- if (BPY_do_spacehandlers(sa, event, SPACEHANDLER_VIEW3D_EVENT))
+ if (sa->scriptlink.totscript) {
+ if (BPY_do_spacehandlers(sa, event, val, SPACEHANDLER_VIEW3D_EVENT))
return; /* return if event was processed (swallowed) by handler(s) */
}
@@ -1262,7 +1311,7 @@ static void winqreadview3dspace(ScrArea *sa, void *spacedata, BWinEvent *evt)
/* run any view3d event handler script links */
if (event && sa->scriptlink.totscript)
- if (BPY_do_spacehandlers(sa, event, SPACEHANDLER_VIEW3D_EVENT))
+ if (BPY_do_spacehandlers(sa, event, val, SPACEHANDLER_VIEW3D_EVENT))
return; /* return if event was processed (swallowed) by handler(s) */
/* TEXTEDITING?? */
@@ -1821,8 +1870,11 @@ static void winqreadview3dspace(ScrArea *sa, void *spacedata, BWinEvent *evt)
break;
case AKEY:
- if (G.obedit == 0 && G.qual == (LR_CTRLKEY|LR_ALTKEY)) {
- alignmenu();
+ if(G.qual == (LR_CTRLKEY|LR_ALTKEY)) {
+ if(G.obedit == 0)
+ alignmenu();
+ else if(G.obedit->type==OB_ARMATURE)
+ align_selected_bones();
}
else if(G.qual & LR_CTRLKEY) { /* also with shift! */
apply_object();
@@ -1904,6 +1956,8 @@ static void winqreadview3dspace(ScrArea *sa, void *spacedata, BWinEvent *evt)
else
copy_attr_menu();
}
+ else if(G.qual==(LR_ALTKEY|LR_SHIFTKEY))
+ gpencil_convert_menu(); /* gpencil.c */
else if(G.qual==LR_ALTKEY) {
if(ob && (ob->flag & OB_POSEMODE))
pose_clear_constraints(); /* poseobject.c */
@@ -1962,7 +2016,7 @@ static void winqreadview3dspace(ScrArea *sa, void *spacedata, BWinEvent *evt)
G.vd->drawtype= pupval;
doredraw= 1;
}
- }
+ }
break;
case EKEY:
@@ -2054,6 +2108,7 @@ static void winqreadview3dspace(ScrArea *sa, void *spacedata, BWinEvent *evt)
if (G.f & (G_VERTEXPAINT|G_WEIGHTPAINT|G_TEXTUREPAINT)){
G.f ^= G_FACESELECT;
allqueue(REDRAWVIEW3D, 1);
+ allqueue(REDRAWBUTSEDIT, 1);
}
else if(G.f & G_PARTICLEEDIT) {
PE_radialcontrol_start(RADIALCONTROL_SIZE);
@@ -2209,7 +2264,7 @@ static void winqreadview3dspace(ScrArea *sa, void *spacedata, BWinEvent *evt)
else
selectswap();
}
- else if(G.qual==LR_ALTKEY) {
+ else if(G.qual==(LR_CTRLKEY|LR_ALTKEY)) {
if(ob && (ob->flag & OB_POSEMODE) && ob->type==OB_ARMATURE)
pose_clear_IK();
}
@@ -2639,10 +2694,9 @@ static void winqreadview3dspace(ScrArea *sa, void *spacedata, BWinEvent *evt)
else if(G.f & G_VERTEXPAINT)
BIF_undo();
else if(G.f & G_TEXTUREPAINT)
- imagepaint_undo();
- else {
+ undo_imagepaint_step(1);
+ else
single_user();
- }
}
break;
@@ -3095,6 +3149,9 @@ static void winqreadipospace(ScrArea *sa, void *spacedata, BWinEvent *evt)
else if (G.qual==LR_CTRLKEY) {
borderselect_markers();
}
+ else if (G.qual==LR_SHIFTKEY) {
+ do_ipo_buttons(B_IPOBORDER);
+ }
break;
case CKEY:
if (G.qual == LR_SHIFTKEY)
@@ -3198,16 +3255,21 @@ static void winqreadipospace(ScrArea *sa, void *spacedata, BWinEvent *evt)
break;
case XKEY:
case DELKEY:
- if (okee("Erase selected")) {
- remove_marker();
- del_ipo(0);
-
- /* note: don't update the other spaces (in particular ipo)
- * or else curves disappear.
- */
- allqueue(REDRAWTIME, 0);
- allqueue(REDRAWSOUND, 0);
+ /* markers are incorported under shift-modifier (it does go against conventions, but oh well :/) */
+ if (G.qual == LR_SHIFTKEY) {
+ if (okee("Erase selected marker(s)?"))
+ remove_marker();
+ }
+ else {
+ if (okee("Erase selected?"))
+ del_ipo(0);
}
+
+ /* note: don't update the other spaces (in particular ipo)
+ * or else curves disappear.
+ */
+ allqueue(REDRAWTIME, 0);
+ allqueue(REDRAWSOUND, 0);
break;
case ACCENTGRAVEKEY:
if((G.qual==0)) {
@@ -3254,8 +3316,8 @@ void initipo(ScrArea *sa)
/* ******************** SPACE: INFO ********************** */
-void space_mipmap_button_function(int event) {
- set_mipmap(!(U.gameflags & USER_DISABLE_MIPMAP));
+static void space_mipmap_button_function(int event) {
+ GPU_set_mipmap(!(U.gameflags & USER_DISABLE_MIPMAP));
allqueue(REDRAWVIEW3D, 0);
}
@@ -3490,6 +3552,9 @@ static void info_user_themebuts(uiBlock *block, short y1, short y2, short y3, sh
uiButSetFunc(but, set_userdef_iconfile_cb, &iconfileindex, NULL);
}
+ else if(th_curcol==TH_HANDLE_VERTEX_SIZE) {
+ uiDefButC(block, NUMSLI, B_UPDATE_THEME,"Handle size ", 465,y3,200,20, col, 1.0, 10.0, 0, 0, "");
+ }
else {
uiBlockBeginAlign(block);
if ELEM9(th_curcol, TH_PANEL, TH_LAMP, TH_FACE, TH_FACE_SELECT, TH_EDITMESH_ACTIVE, TH_MENU_BACK, TH_MENU_HILITE, TH_MENU_ITEM, TH_NODE) {
@@ -3728,6 +3793,11 @@ void drawinfospace(ScrArea *sa, void *spacedata)
"Snap objects and sub-objects to grid units when scaling");
uiBlockEndAlign(block);
+ uiDefButBitI(block, TOG, USER_ORBIT_ZBUF, B_DRAWINFO, "Auto Depth",
+ (xpos+edgsp+mpref+spref+(2*midsp)),y2,spref,buth,
+ &(U.uiflag), 0, 0, 0, 0,
+ "Use the depth under the mouse to improve view pan/rotate/zoom functionality");
+
uiDefButBitI(block, TOG, USER_LOCKAROUND, B_DRAWINFO, "Global Pivot",
(xpos+edgsp+mpref+spref+(2*midsp)),y1,spref,buth,
&(U.uiflag), 0, 0, 0, 0,
@@ -3942,20 +4012,23 @@ void drawinfospace(ScrArea *sa, void *spacedata)
uiDefBut(block, LABEL,0,"Transform:",
- (xpos+(2*edgsp)+mpref),y5label, mpref,buth,
+ (xpos+(2*edgsp)+mpref),y6label, mpref,buth,
0, 0, 0, 0, 0, "");
uiDefButBitI(block, TOG, USER_DRAGIMMEDIATE, B_DRAWINFO, "Drag Immediately",
- (xpos+edgsp+mpref+midsp),y4,mpref,buth,
+ (xpos+edgsp+mpref+midsp),y5,mpref,buth,
&(U.flag), 0, 0, 0, 0, "Moving things with a mouse drag doesn't require a click to confirm (Best for tablet users)");
uiBlockEndAlign(block);
uiDefBut(block, LABEL,0,"Undo:",
- (xpos+(2*edgsp)+mpref),y3label, mpref,buth,
+ (xpos+(2*edgsp)+mpref),y4label, mpref,buth,
0, 0, 0, 0, 0, "");
uiBlockBeginAlign(block);
uiDefButS(block, NUMSLI, B_DRAWINFO, "Steps: ",
- (xpos+edgsp+mpref+midsp),y2,mpref,buth,
+ (xpos+edgsp+mpref+midsp),y3,mpref,buth,
&(U.undosteps), 0, 64, 0, 0, "Number of undo steps available (smaller values conserve memory)");
+ uiDefButS(block, NUM, B_DRAWINFO, "Memory Limit: ",
+ (xpos+edgsp+mpref+midsp),y2,mpref,buth,
+ &(U.undomemory), 0, 32767, -1, 0, "Maximum memory usage in megabytes (0 means unlimited)");
uiDefButBitI(block, TOG, USER_GLOBALUNDO, B_DRAWINFO, "Global Undo",
(xpos+edgsp+mpref+midsp),y1,mpref,buth,
@@ -3972,7 +4045,7 @@ void drawinfospace(ScrArea *sa, void *spacedata)
(xpos+edgsp+(2*mpref)+(2*midsp)),y5,mpref, buth,
&(U.autokey_mode), 0, 0, 0, 0, "Automatic keyframe insertion for Objects and Bones");
- if (IS_AUTOKEY_ON) {
+ if (U.autokey_mode & AUTOKEY_ON) {
uiDefButS(block, MENU, REDRAWTIME,
"Auto-Keying Mode %t|Add/Replace Keys%x3|Replace Keys %x5",
(xpos+edgsp+(2*mpref)+(2*midsp)),y4,mpref, buth,
@@ -4033,6 +4106,19 @@ void drawinfospace(ScrArea *sa, void *spacedata)
(xpos+edgsp+(8*midsp)+(3*mpref)+(5*spref)),y1,(spref+edgsp),buth,
&(U.dupflag), 0, 0, 0, 0, "Causes ipo data to be duplicated with Shift+D");
uiBlockEndAlign(block);
+
+ uiDefBut(block, LABEL,0,"Grease Pencil:",
+ (xpos+(2*edgsp)+(3*midsp)+(3*mpref)+spref),y6label,mpref,buth,
+ 0, 0, 0, 0, 0, "");
+
+ uiBlockBeginAlign(block);
+ uiDefButS(block, NUM, 0, "Manhatten Dist:",
+ (xpos+(4*midsp)+(3*mpref)+mpref),y5,mpref,buth,
+ &(U.gp_manhattendist), 0, 100, 0, 0, "Pixels moved by mouse per axis when drawing stroke");
+ uiDefButS(block, NUM, 0, "Euclidean Dist:",
+ (xpos+(5*midsp)+(3*mpref)+(2*mpref)),y5,mpref,buth,
+ &(U.gp_euclideandist), 0, 100, 0, 0, "Distance moved by mouse when drawing stroke (in pixels) to include");
+ uiBlockEndAlign(block);
} else if(U.userpref == 2) { /* language & colors */
@@ -4290,6 +4376,7 @@ void drawinfospace(ScrArea *sa, void *spacedata)
uiDefButI(block, NUM, 0, "Collect Rate ",
(xpos+edgsp+(5*mpref)+(5*midsp)), y2, mpref, buth,
&U.texcollectrate, 1.0, 3600.0, 30, 2, "Number of seconds between each run of the GL texture garbage collector.");
+ uiBlockEndAlign(block);
/* *** */
uiDefBut(block, LABEL,0,"Color range for weight paint",
@@ -4526,7 +4613,7 @@ static void winqreadinfospace(ScrArea *sa, void *spacedata, BWinEvent *evt)
if(U.light[0].flag==0 && U.light[1].flag==0 && U.light[2].flag==0)
U.light[0].flag= 1;
- default_gl_light();
+ GPU_default_lights();
addqueue(sa->win, REDRAW, 1);
allqueue(REDRAWVIEW3D, 0);
}
@@ -5124,6 +5211,10 @@ static void winqreadseqspace(ScrArea *sa, void *spacedata, BWinEvent *evt)
if(sseq->mainb)
gpencil_delete_menu();
}
+ else if(G.qual==LR_SHIFTKEY) {
+ /* markers are incorported under shift-modifier (it does go against conventions, but oh well :/) */
+ remove_marker();
+ }
break;
case PAD1: case PAD2: case PAD4: case PAD8:
seq_viewzoom(event, (G.qual & LR_SHIFTKEY)==0);
@@ -5166,8 +5257,8 @@ static void init_seqspace(ScrArea *sa)
sseq->v2d.max[0]= MAXFRAMEF;
sseq->v2d.max[1]= MAXSEQ;
- sseq->v2d.minzoom= 0.1f;
- sseq->v2d.maxzoom= 10.0;
+ sseq->v2d.minzoom= 0.01f;
+ sseq->v2d.maxzoom= 100.0;
sseq->v2d.scroll= L_SCROLL+B_SCROLL;
sseq->v2d.keepaspect= 0;
@@ -5299,7 +5390,7 @@ static void init_soundspace(ScrArea *sa)
}
-void free_soundspace(SpaceSound *ssound)
+static void free_soundspace(SpaceSound *ssound)
{
/* don't free ssound itself */
@@ -5322,7 +5413,15 @@ static void winqreadimagespace(ScrArea *sa, void *spacedata, BWinEvent *evt)
if(val==0) return;
if(uiDoBlocks(&sa->uiblocks, event, 1)!=UI_NOTHING ) event= 0;
-
+
+ /* grease-pencil drawing before draw-tool */
+ if (event == LEFTMOUSE) {
+ if (gpencil_do_paint(sa, L_MOUSE)) return;
+ }
+ else if (event == RIGHTMOUSE) {
+ if (gpencil_do_paint(sa, R_MOUSE)) return;
+ }
+
if (sima->image && (sima->flag & SI_DRAWTOOL)) {
switch(event) {
case CKEY:
@@ -5345,7 +5444,7 @@ static void winqreadimagespace(ScrArea *sa, void *spacedata, BWinEvent *evt)
event = LEFTMOUSE;
}
}
-
+
/* Draw tool is inactive, editmode is enabled and the image is not a render or composite */
if (EM_texFaceCheck() && (G.sima->image==0 || (G.sima->image->type != IMA_TYPE_R_RESULT && G.sima->image->type != IMA_TYPE_COMPOSITE))) {
switch(event) {
@@ -5982,7 +6081,7 @@ static void init_oopsspace(ScrArea *sa)
soops= MEM_callocN(sizeof(SpaceOops), "initoopsspace");
BLI_addhead(&sa->spacedata, soops);
- soops->visiflag= OOPS_OB+OOPS_MA+OOPS_ME+OOPS_TE+OOPS_CU+OOPS_IP;
+ soops->visiflag= OOPS_OB|OOPS_MA|OOPS_ME|OOPS_TE|OOPS_CU|OOPS_IP;
/* new oops is default an outliner */
soops->type= SO_OUTLINER;
@@ -6053,6 +6152,10 @@ static void init_textspace(ScrArea *sa)
st->lheight= 12;
st->showlinenrs= 0;
st->tabnumber = 4;
+ st->showsyntax= 0;
+ st->doplugins= 0;
+ st->overwrite= 0;
+ st->wordwrap= 0;
st->currtab_set = 0;
st->top= 0;
@@ -6322,6 +6425,8 @@ void freespacelist(ScrArea *sa)
SpaceImage *sima= (SpaceImage *)sl;
if(sima->cumap)
curvemapping_free(sima->cumap);
+ if(sima->gpd)
+ free_gpencil_data(sima->gpd);
}
else if(sl->spacetype==SPACE_NODE) {
SpaceNode *snode= (SpaceNode *)sl;
@@ -6389,6 +6494,10 @@ void duplicatespacelist(ScrArea *newarea, ListBase *lb1, ListBase *lb2)
SpaceSeq *sseq= (SpaceSeq *)sl;
sseq->gpd= gpencil_data_duplicate(sseq->gpd);
}
+ else if(sl->spacetype==SPACE_IMAGE) {
+ SpaceImage *sima= (SpaceImage *)sl;
+ sima->gpd= gpencil_data_duplicate(sima->gpd);
+ }
sl= sl->next;
}
diff --git a/source/blender/src/toets.c b/source/blender/src/toets.c
index 5f80f14d069..bb2e83d8fa5 100644
--- a/source/blender/src/toets.c
+++ b/source/blender/src/toets.c
@@ -75,6 +75,7 @@
#include "BIF_imasel.h"
#include "BIF_editparticle.h"
#include "BIF_interface.h"
+#include "BIF_keyframing.h"
#include "BIF_poseobject.h"
#include "BIF_previewrender.h"
#include "BIF_renderwin.h"
@@ -104,6 +105,8 @@
#include "IMB_imbuf.h"
#include "IMB_imbuf_types.h"
+#include "GPU_draw.h"
+
#include "mydevice.h"
#include "transform.h"
@@ -288,6 +291,20 @@ void persptoetsen(unsigned short event)
}
}
else if(event==PAD0) {
+ /* lastview - */
+ if(G.vd->lastview_set==0) {
+ /* store settings of current view before allowing overwriting with camera view */
+ QUATCOPY(G.vd->lviewquat, G.vd->viewquat);
+ G.vd->lview= G.vd->view;
+ G.vd->lpersp= G.vd->persp;
+ G.vd->lastview_set= 1;
+ }
+ else {
+ /* return to settings of last view */
+ axis_set_view(G.vd->lviewquat[0], G.vd->lviewquat[1], G.vd->lviewquat[2], G.vd->lviewquat[3], G.vd->lview, G.vd->lpersp);
+ G.vd->lastview_set= 0;
+ }
+
if(G.qual==LR_ALTKEY) {
if(oldcamera && is_an_active_object(oldcamera)) {
G.vd->camera= oldcamera;
@@ -310,6 +327,7 @@ void persptoetsen(unsigned short event)
handle_view3d_lock();
}
}
+
if(G.vd->camera==0) {
G.vd->camera= scene_find_camera(G.scene);
handle_view3d_lock();
@@ -339,8 +357,6 @@ void persptoetsen(unsigned short event)
VECCOPY(G.vd->ofs, orig_ofs);
G.vd->lens = orig_lens;
}
-
-
}
}
else if(event==PAD9) {
@@ -359,7 +375,6 @@ void persptoetsen(unsigned short event)
q1[1]= q1[2]= 0.0;
q1[3]= si;
QuatMul(G.vd->viewquat, G.vd->viewquat, q1);
- G.vd->view= 0;
}
if(event==PAD2 || event==PAD8) {
/* horizontal axis */
@@ -374,7 +389,6 @@ void persptoetsen(unsigned short event)
q1[2]*= si;
q1[3]*= si;
QuatMul(G.vd->viewquat, G.vd->viewquat, q1);
- G.vd->view= 0;
}
}
@@ -790,6 +804,10 @@ int blenderqread(unsigned short event, short val)
ob= OBACT;
if(G.f & G_SCULPTMODE) return 1;
+ else if(G.qual==LR_ALTKEY) {
+ common_deletekey();
+ return 0;
+ }
else if(G.qual==0) {
common_insertkey();
return 0;
@@ -964,7 +982,7 @@ int blenderqread(unsigned short event, short val)
/* Reset lights
* This isn't done when reading userdef, do it now
* */
- default_gl_light();
+ GPU_default_lights();
}
return 0;
}
diff --git a/source/blender/src/toolbox.c b/source/blender/src/toolbox.c
index 8a8d7c8cec7..55feb4c0305 100644
--- a/source/blender/src/toolbox.c
+++ b/source/blender/src/toolbox.c
@@ -93,6 +93,7 @@
#include "BIF_graphics.h"
#include "BIF_imasel.h"
#include "BIF_interface.h"
+#include "BIF_keyframing.h"
#include "BIF_mainqueue.h"
#include "BIF_mywindow.h"
#include "BIF_renderwin.h"
@@ -123,6 +124,8 @@
#include "BPY_extern.h"
#include "BPY_menus.h"
+#include "BLO_sys_types.h" // for intptr_t support
+
void asciitoraw(int ch, unsigned short *event, unsigned short *qual)
{
if( isupper(ch) ) {
@@ -238,7 +241,7 @@ void error_libdata(void)
int saveover(char *file)
{
- int len= strlen(file);
+ size_t len= strlen(file);
if(len==0)
return 0;
@@ -894,6 +897,8 @@ static TBitem tb_object_select_grouped[]= {
{ 0, "Objects in Same Group|Shift G, 7", 7, NULL},
{ 0, "Object Hooks|Shift G, 8", 8, NULL},
{ 0, "Object PassIndex|Shift G, 9", 9, NULL},
+{ 0, "Object Color|Shift G, 0", 9, NULL},
+{ 0, "Game Properties|Shift G, Alt+1", 9, NULL},
{ -1, "", 0, do_view3d_select_object_groupedmenu}};
static TBitem tb_object_select[]= {
@@ -1756,8 +1761,8 @@ static uiBlock *tb_makemenu(void *arg)
static int tb_mainx= 1234, tb_mainy= 0;
static void store_main(void *arg1, void *arg2)
{
- tb_mainx= (long)arg1;
- tb_mainy= (long)arg2;
+ tb_mainx= (intptr_t)arg1;
+ tb_mainy= (intptr_t)arg2;
}
static void do_group_addmenu(void *arg, int event)
@@ -2185,27 +2190,27 @@ void toolbox_n(void)
but=uiDefBlockBut(block, tb_makemenu, menu1, str1, mval[0]-(1.5*dx)+tb_mainx,mval[1]+tb_mainy, dx, 19, "");
uiButSetFlag(but, UI_MAKE_TOP|UI_MAKE_RIGHT);
- uiButSetFunc(but, store_main, (void *)(long)dx, (void *)(long)-5);
+ uiButSetFunc(but, store_main, (void *)(intptr_t)dx, (void *)(intptr_t)-5);
but=uiDefBlockBut(block, tb_makemenu, menu2, str2, mval[0]-(0.5*dx)+tb_mainx,mval[1]+tb_mainy, dx, 19, "");
uiButSetFlag(but, UI_MAKE_TOP);
- uiButSetFunc(but, store_main, (void *)(long)0, (void *)(long)-5);
+ uiButSetFunc(but, store_main, (void *)(intptr_t)0, (void *)(intptr_t)-5);
but=uiDefBlockBut(block, tb_makemenu, menu3, str3, mval[0]+(0.5*dx)+tb_mainx,mval[1]+tb_mainy, dx, 19, "");
uiButSetFlag(but, UI_MAKE_TOP|UI_MAKE_LEFT);
- uiButSetFunc(but, store_main, (void *)(long)-dx, (void *)(long)-5);
+ uiButSetFunc(but, store_main, (void *)(intptr_t)-dx, (void *)(intptr_t)-5);
but=uiDefBlockBut(block, tb_makemenu, menu4, str4, mval[0]-(1.5*dx)+tb_mainx,mval[1]+tb_mainy-20, dx, 19, "");
uiButSetFlag(but, UI_MAKE_DOWN|UI_MAKE_RIGHT);
- uiButSetFunc(but, store_main, (void *)(long)dx, (void *)(long)5);
+ uiButSetFunc(but, store_main, (void *)(intptr_t)dx, (void *)(intptr_t)5);
but=uiDefBlockBut(block, tb_makemenu, menu5, str5, mval[0]-(0.5*dx)+tb_mainx,mval[1]+tb_mainy-20, dx, 19, "");
uiButSetFlag(but, UI_MAKE_DOWN);
- uiButSetFunc(but, store_main, (void *)(long)0, (void *)(long)5);
+ uiButSetFunc(but, store_main, (void *)(intptr_t)0, (void *)(intptr_t)5);
but=uiDefBlockBut(block, tb_makemenu, menu6, str6, mval[0]+(0.5*dx)+tb_mainx,mval[1]+tb_mainy-20, dx, 19, "");
uiButSetFlag(but, UI_MAKE_DOWN|UI_MAKE_LEFT);
- uiButSetFunc(but, store_main, (void *)(long)-dx, (void *)(long)5);
+ uiButSetFunc(but, store_main, (void *)(intptr_t)-dx, (void *)(intptr_t)5);
} else if (tot==5 || tot==7) {
/* check if it fits, dubious */
if(mval[0]-0.25*dx+tb_mainx < 6) mval[0]= 6 + 0.25*dx -tb_mainx;
@@ -2280,9 +2285,9 @@ void toolbox_generic( TBitem *generic_menu )
uiBlock *block;
uiBut *but;
TBitem *menu;
- int dx=96;
+ int dx=96, first=1, len;
short event, mval[2];
- long ypos = -5;
+ intptr_t ypos = -5;
tb_mainx= -32;
tb_mainy= -5;
@@ -2301,11 +2306,17 @@ void toolbox_generic( TBitem *generic_menu )
/* Add the menu */
for (menu = generic_menu; menu->icon != -1; menu++) {
- if(strcmp(menu->name, "SEPR")==0) {
+ if (first && (len=strlen(menu->name)) > 2 && menu->name[len-2]=='%' && menu->name[len-1]=='t') {
+ menu->name[len-2] = '\0';
+ uiSetCurFont(block, UI_HELVB);
+ uiDefIconTextBut(block, LABEL, 0, ICON_BLANK1, menu->name, mval[0]+tb_mainx,mval[1]+tb_mainy+ypos+5, dx, 19, NULL, 0.0, 0.0, 0, 0, "");
+ uiSetCurFont(block, UI_HELV);
+ ypos-=20;
+ } else if(strcmp(menu->name, "SEPR")==0) {
uiDefBut(block, SEPR, 0, "", mval[0]+tb_mainx,mval[1]+tb_mainy+ypos+5, dx, 6, NULL, 0.0, 0.0, 0, 0, "");
ypos-=6;
} else {
- if (menu->poin) {
+ if (menu->poin) {
but=uiDefIconTextBlockBut(block, tb_makemenu, menu->poin, ICON_RIGHTARROW_THIN, menu->name, mval[0]+tb_mainx,mval[1]+tb_mainy+ypos+5, dx, 19, "");
uiButSetFlag(but, UI_MAKE_RIGHT);
@@ -2316,6 +2327,7 @@ void toolbox_generic( TBitem *generic_menu )
}
ypos-=20;
}
+ first= 0;
}
uiBlockSetButmFunc(block, menu->poin, NULL);
diff --git a/source/blender/src/transform.c b/source/blender/src/transform.c
index 705a5f868e7..e21d543d34e 100644
--- a/source/blender/src/transform.c
+++ b/source/blender/src/transform.c
@@ -2548,9 +2548,9 @@ static void ElementRotation(TransInfo *t, TransData *td, float mat[3][3], short
float rot[3];
/* current IPO value for compatible euler */
- current_rot[0] = tdi->rotx[0];
- current_rot[1] = tdi->roty[0];
- current_rot[2] = tdi->rotz[0];
+ current_rot[0] = (tdi->rotx) ? tdi->rotx[0] : 0.0f;
+ current_rot[1] = (tdi->roty) ? tdi->roty[0] : 0.0f;
+ current_rot[2] = (tdi->rotz) ? tdi->rotz[0] : 0.0f;
VecMulf(current_rot, (float)(M_PI_2 / 9.0));
/* calculate the total rotatation in eulers */
diff --git a/source/blender/src/transform_conversions.c b/source/blender/src/transform_conversions.c
index 9f2f58d0cdb..70dcb58b87c 100644
--- a/source/blender/src/transform_conversions.c
+++ b/source/blender/src/transform_conversions.c
@@ -108,6 +108,7 @@
#include "BIF_editsima.h"
#include "BIF_editparticle.h"
#include "BIF_gl.h"
+#include "BIF_keyframing.h"
#include "BIF_poseobject.h"
#include "BIF_meshtools.h"
#include "BIF_mywindow.h"
@@ -144,6 +145,8 @@ extern ListBase editelems;
#include "transform.h"
+#include "BLO_sys_types.h" // for intptr_t support
+
/* local function prototype - for Object/Bone Constraints */
static short constraints_list_needinv(TransInfo *t, ListBase *list);
/* local function prototype - for finding number of keyframes that are selected for editing */
@@ -394,7 +397,7 @@ static bKinematicConstraint *has_targetless_ik(bPoseChannel *pchan)
bConstraint *con= pchan->constraints.first;
for(;con; con= con->next) {
- if(con->type==CONSTRAINT_TYPE_KINEMATIC) {
+ if(con->type==CONSTRAINT_TYPE_KINEMATIC && (con->enforce!=0.0)) {
bKinematicConstraint *data= con->data;
if(data->tar==NULL)
@@ -502,12 +505,17 @@ static short apply_targetless_ik(Object *ob)
Mat3ToQuat(rmat3, parchan->quat);
/* for size, remove rotation */
- QuatToMat3(parchan->quat, qmat);
- Mat3Inv(imat, qmat);
- Mat3MulMat3(smat, rmat3, imat);
- Mat3ToSize(smat, parchan->size);
+ /* causes problems with some constraints (so apply only if needed) */
+ if (data->flag & CONSTRAINT_IK_STRETCH) {
+ QuatToMat3(parchan->quat, qmat);
+ Mat3Inv(imat, qmat);
+ Mat3MulMat3(smat, rmat3, imat);
+ Mat3ToSize(smat, parchan->size);
+ }
- VECCOPY(parchan->loc, rmat[3]);
+ /* causes problems with some constraints (e.g. childof), so disable this */
+ /* as it is IK shouldn't affect location directly */
+ /* VECCOPY(parchan->loc, rmat[3]); */
}
}
@@ -708,7 +716,7 @@ static void pchan_autoik_adjust (bPoseChannel *pchan, short chainlen)
/* check if pchan has ik-constraint */
for (con= pchan->constraints.first; con; con= con->next) {
- if (con->type == CONSTRAINT_TYPE_KINEMATIC) {
+ if (con->type == CONSTRAINT_TYPE_KINEMATIC && (con->enforce!=0.0)) {
bKinematicConstraint *data= con->data;
/* only accept if a temporary one (for auto-ik) */
@@ -760,6 +768,7 @@ static void pose_grab_with_ik_clear(Object *ob)
/* clear all temporary lock flags */
pchan->ikflag &= ~(BONE_IK_NO_XDOF_TEMP|BONE_IK_NO_YDOF_TEMP|BONE_IK_NO_ZDOF_TEMP);
+ pchan->constflag &= ~(PCHAN_HAS_IK|PCHAN_HAS_TARGET);
/* remove all temporary IK-constraints added */
for (con= pchan->constraints.first; con; con= con->next) {
if (con->type==CONSTRAINT_TYPE_KINEMATIC) {
@@ -768,9 +777,11 @@ static void pose_grab_with_ik_clear(Object *ob)
BLI_remlink(&pchan->constraints, con);
MEM_freeN(con->data);
MEM_freeN(con);
- pchan->constflag &= ~(PCHAN_HAS_IK|PCHAN_HAS_TARGET);
- break;
+ continue;
}
+ pchan->constflag |= PCHAN_HAS_IK;
+ if(data->tar==NULL || (data->tar->type==OB_ARMATURE && data->subtarget[0]==0))
+ pchan->constflag |= PCHAN_HAS_TARGET;
}
}
}
@@ -781,6 +792,7 @@ static short pose_grab_with_ik_add(bPoseChannel *pchan)
{
bKinematicConstraint *data;
bConstraint *con;
+ bConstraint *targetless = 0;
/* Sanity check */
if (pchan == NULL)
@@ -788,23 +800,31 @@ static short pose_grab_with_ik_add(bPoseChannel *pchan)
/* Rule: not if there's already an IK on this channel */
for (con= pchan->constraints.first; con; con= con->next) {
- if (con->type==CONSTRAINT_TYPE_KINEMATIC)
- break;
- }
-
- if (con) {
- /* but, if this is a targetless IK, we make it auto anyway (for the children loop) */
- data= has_targetless_ik(pchan);
- if (data)
- data->flag |= CONSTRAINT_IK_AUTO;
- return 0;
+ if (con->type==CONSTRAINT_TYPE_KINEMATIC) {
+ bKinematicConstraint *data= con->data;
+ if(data->tar==NULL || (data->tar->type==OB_ARMATURE && data->subtarget[0]==0)) {
+ targetless = con;
+ /* but, if this is a targetless IK, we make it auto anyway (for the children loop) */
+ if (con->enforce!=0.0) {
+ targetless->flag |= CONSTRAINT_IK_AUTO;
+ return 0;
+ }
+ }
+ if ((con->flag & CONSTRAINT_DISABLE)==0 && (con->enforce!=0.0))
+ return 0;
+ }
}
con = add_new_constraint(CONSTRAINT_TYPE_KINEMATIC);
BLI_addtail(&pchan->constraints, con);
pchan->constflag |= (PCHAN_HAS_IK|PCHAN_HAS_TARGET); /* for draw, but also for detecting while pose solving */
data= con->data;
- data->flag= CONSTRAINT_IK_TIP|CONSTRAINT_IK_TEMP|CONSTRAINT_IK_AUTO;
+ if (targetless) { /* if exists use values from last targetless IK-constraint as base */
+ *data = *((bKinematicConstraint*)targetless->data);
+ }
+ else
+ data->flag= CONSTRAINT_IK_TIP;
+ data->flag |= CONSTRAINT_IK_TEMP|CONSTRAINT_IK_AUTO;
VECCOPY(data->grabtarget, pchan->pose_tail);
data->rootbone= 1;
@@ -1913,7 +1933,7 @@ static void set_crazyspace_quats(float *origcos, float *mappedcos, float *quats)
EditVert *eve, *prev;
EditFace *efa;
float *v1, *v2, *v3, *v4, *co1, *co2, *co3, *co4;
- long index= 0;
+ intptr_t index= 0;
/* two abused locations in vertices */
for(eve= em->verts.first; eve; eve= eve->next, index++) {
@@ -1925,13 +1945,13 @@ static void set_crazyspace_quats(float *origcos, float *mappedcos, float *quats)
for(efa= em->faces.first; efa; efa= efa->next) {
/* retrieve mapped coordinates */
- v1= mappedcos + 3*(long)(efa->v1->prev);
- v2= mappedcos + 3*(long)(efa->v2->prev);
- v3= mappedcos + 3*(long)(efa->v3->prev);
+ v1= mappedcos + 3*(intptr_t)(efa->v1->prev);
+ v2= mappedcos + 3*(intptr_t)(efa->v2->prev);
+ v3= mappedcos + 3*(intptr_t)(efa->v3->prev);
- co1= (origcos)? origcos + 3*(long)(efa->v1->prev): efa->v1->co;
- co2= (origcos)? origcos + 3*(long)(efa->v2->prev): efa->v2->co;
- co3= (origcos)? origcos + 3*(long)(efa->v3->prev): efa->v3->co;
+ co1= (origcos)? origcos + 3*(intptr_t)(efa->v1->prev): efa->v1->co;
+ co2= (origcos)? origcos + 3*(intptr_t)(efa->v2->prev): efa->v2->co;
+ co3= (origcos)? origcos + 3*(intptr_t)(efa->v3->prev): efa->v3->co;
if(efa->v2->tmp.p==NULL && efa->v2->f1) {
set_crazy_vertex_quat(quats, co2, co3, co1, v2, v3, v1);
@@ -1940,8 +1960,8 @@ static void set_crazyspace_quats(float *origcos, float *mappedcos, float *quats)
}
if(efa->v4) {
- v4= mappedcos + 3*(long)(efa->v4->prev);
- co4= (origcos)? origcos + 3*(long)(efa->v4->prev): efa->v4->co;
+ v4= mappedcos + 3*(intptr_t)(efa->v4->prev);
+ co4= (origcos)? origcos + 3*(intptr_t)(efa->v4->prev): efa->v4->co;
if(efa->v1->tmp.p==NULL && efa->v1->f1) {
set_crazy_vertex_quat(quats, co1, co2, co4, v1, v2, v4);
@@ -3560,22 +3580,25 @@ short autokeyframe_cfra_can_key(Object *ob)
*/
void autokeyframe_ob_cb_func(Object *ob, int tmode)
{
+ ID *id= (ID *)(ob);
IpoCurve *icu;
if (autokeyframe_cfra_can_key(ob)) {
char *actname = NULL;
+ short flag = 0;
if (ob->ipoflag & OB_ACTION_OB)
actname= "Object";
+
+ if (IS_AUTOKEY_FLAG(INSERTNEEDED))
+ flag |= INSERTKEY_NEEDED;
+ if (IS_AUTOKEY_FLAG(AUTOMATKEY))
+ flag |= INSERTKEY_MATRIX;
if (IS_AUTOKEY_FLAG(INSERTAVAIL)) {
+ /* only key on available channels */
if ((ob->ipo) || (ob->action)) {
- ID *id= (ID *)(ob);
-
- if (ob->ipo) {
- icu= ob->ipo->curve.first;
- }
- else {
+ if (ob->action && actname) {
bActionChannel *achan;
achan= get_action_channel(ob->action, actname);
@@ -3584,19 +3607,16 @@ void autokeyframe_ob_cb_func(Object *ob, int tmode)
else
icu= NULL;
}
+ else
+ icu= ob->ipo->curve.first;
- while (icu) {
+ for (; icu; icu= icu->next) {
icu->flag &= ~IPO_SELECT;
- if (IS_AUTOKEY_FLAG(INSERTNEEDED))
- insertkey_smarter(id, ID_OB, actname, NULL, icu->adrcode);
- else
- insertkey(id, ID_OB, actname, NULL, icu->adrcode, 0);
- icu= icu->next;
+ insertkey(id, ID_OB, actname, NULL, icu->adrcode, flag);
}
}
}
else if (IS_AUTOKEY_FLAG(INSERTNEEDED)) {
- ID *id= (ID *)(ob);
short doLoc=0, doRot=0, doScale=0;
/* filter the conditions when this happens (assume that curarea->spacetype==SPACE_VIE3D) */
@@ -3627,35 +3647,33 @@ void autokeyframe_ob_cb_func(Object *ob, int tmode)
}
if (doLoc) {
- insertkey_smarter(id, ID_OB, actname, NULL, OB_LOC_X);
- insertkey_smarter(id, ID_OB, actname, NULL, OB_LOC_Y);
- insertkey_smarter(id, ID_OB, actname, NULL, OB_LOC_Z);
+ insertkey(id, ID_OB, actname, NULL, OB_LOC_X, flag);
+ insertkey(id, ID_OB, actname, NULL, OB_LOC_Y, flag);
+ insertkey(id, ID_OB, actname, NULL, OB_LOC_Z, flag);
}
if (doRot) {
- insertkey_smarter(id, ID_OB, actname, NULL, OB_ROT_X);
- insertkey_smarter(id, ID_OB, actname, NULL, OB_ROT_Y);
- insertkey_smarter(id, ID_OB, actname, NULL, OB_ROT_Z);
+ insertkey(id, ID_OB, actname, NULL, OB_ROT_X, flag);
+ insertkey(id, ID_OB, actname, NULL, OB_ROT_Y, flag);
+ insertkey(id, ID_OB, actname, NULL, OB_ROT_Z, flag);
}
if (doScale) {
- insertkey_smarter(id, ID_OB, actname, NULL, OB_SIZE_X);
- insertkey_smarter(id, ID_OB, actname, NULL, OB_SIZE_Y);
- insertkey_smarter(id, ID_OB, actname, NULL, OB_SIZE_Z);
+ insertkey(id, ID_OB, actname, NULL, OB_SIZE_X, flag);
+ insertkey(id, ID_OB, actname, NULL, OB_SIZE_Y, flag);
+ insertkey(id, ID_OB, actname, NULL, OB_SIZE_Z, flag);
}
}
else {
- ID *id= (ID *)(ob);
-
- insertkey(id, ID_OB, actname, NULL, OB_LOC_X, 0);
- insertkey(id, ID_OB, actname, NULL, OB_LOC_Y, 0);
- insertkey(id, ID_OB, actname, NULL, OB_LOC_Z, 0);
+ insertkey(id, ID_OB, actname, NULL, OB_LOC_X, flag);
+ insertkey(id, ID_OB, actname, NULL, OB_LOC_Y, flag);
+ insertkey(id, ID_OB, actname, NULL, OB_LOC_Z, flag);
- insertkey(id, ID_OB, actname, NULL, OB_ROT_X, 0);
- insertkey(id, ID_OB, actname, NULL, OB_ROT_Y, 0);
- insertkey(id, ID_OB, actname, NULL, OB_ROT_Z, 0);
+ insertkey(id, ID_OB, actname, NULL, OB_ROT_X, flag);
+ insertkey(id, ID_OB, actname, NULL, OB_ROT_Y, flag);
+ insertkey(id, ID_OB, actname, NULL, OB_ROT_Z, flag);
- insertkey(id, ID_OB, actname, NULL, OB_SIZE_X, 0);
- insertkey(id, ID_OB, actname, NULL, OB_SIZE_Y, 0);
- insertkey(id, ID_OB, actname, NULL, OB_SIZE_Z, 0);
+ insertkey(id, ID_OB, actname, NULL, OB_SIZE_X, flag);
+ insertkey(id, ID_OB, actname, NULL, OB_SIZE_Y, flag);
+ insertkey(id, ID_OB, actname, NULL, OB_SIZE_Z, flag);
}
remake_object_ipos(ob);
@@ -3681,8 +3699,15 @@ void autokeyframe_pose_cb_func(Object *ob, int tmode, short targetless_ik)
act= ob->action;
if (autokeyframe_cfra_can_key(ob)) {
+ short flag= 0;
+
if (act == NULL)
act= ob->action= add_empty_action("Action");
+
+ if (IS_AUTOKEY_FLAG(INSERTNEEDED))
+ flag |= INSERTKEY_NEEDED;
+ if (IS_AUTOKEY_FLAG(AUTOMATKEY))
+ flag |= INSERTKEY_MATRIX;
for (pchan=pose->chanbase.first; pchan; pchan=pchan->next) {
if (pchan->bone->flag & BONE_TRANSFORM) {
@@ -3693,17 +3718,10 @@ void autokeyframe_pose_cb_func(Object *ob, int tmode, short targetless_ik)
if (IS_AUTOKEY_FLAG(INSERTAVAIL)) {
bActionChannel *achan;
- for (achan = act->chanbase.first; achan; achan=achan->next) {
- if ((achan->ipo) && !strcmp(achan->name, pchan->name)) {
- for (icu = achan->ipo->curve.first; icu; icu=icu->next) {
- /* only insert keyframe if needed? */
- if (IS_AUTOKEY_FLAG(INSERTNEEDED))
- insertkey_smarter(&ob->id, ID_PO, pchan->name, NULL, icu->adrcode);
- else
- insertkey(&ob->id, ID_PO, pchan->name, NULL, icu->adrcode, 0);
- }
- break;
- }
+ achan= get_action_channel(act, pchan->name);
+ if (achan && achan->ipo) {
+ for (icu= achan->ipo->curve.first; icu; icu= icu->next)
+ insertkey(id, ID_PO, pchan->name, NULL, icu->adrcode, flag);
}
}
/* only insert keyframe if needed? */
@@ -3733,36 +3751,36 @@ void autokeyframe_pose_cb_func(Object *ob, int tmode, short targetless_ik)
}
if (doLoc) {
- insertkey_smarter(id, ID_PO, pchan->name, NULL, AC_LOC_X);
- insertkey_smarter(id, ID_PO, pchan->name, NULL, AC_LOC_Y);
- insertkey_smarter(id, ID_PO, pchan->name, NULL, AC_LOC_Z);
+ insertkey(id, ID_PO, pchan->name, NULL, AC_LOC_X, flag);
+ insertkey(id, ID_PO, pchan->name, NULL, AC_LOC_Y, flag);
+ insertkey(id, ID_PO, pchan->name, NULL, AC_LOC_Z, flag);
}
if (doRot) {
- insertkey_smarter(id, ID_PO, pchan->name, NULL, AC_QUAT_W);
- insertkey_smarter(id, ID_PO, pchan->name, NULL, AC_QUAT_X);
- insertkey_smarter(id, ID_PO, pchan->name, NULL, AC_QUAT_Y);
- insertkey_smarter(id, ID_PO, pchan->name, NULL, AC_QUAT_Z);
+ insertkey(id, ID_PO, pchan->name, NULL, AC_QUAT_W, flag);
+ insertkey(id, ID_PO, pchan->name, NULL, AC_QUAT_X, flag);
+ insertkey(id, ID_PO, pchan->name, NULL, AC_QUAT_Y, flag);
+ insertkey(id, ID_PO, pchan->name, NULL, AC_QUAT_Z, flag);
}
if (doScale) {
- insertkey_smarter(id, ID_PO, pchan->name, NULL, AC_SIZE_X);
- insertkey_smarter(id, ID_PO, pchan->name, NULL, AC_SIZE_Y);
- insertkey_smarter(id, ID_PO, pchan->name, NULL, AC_SIZE_Z);
+ insertkey(id, ID_PO, pchan->name, NULL, AC_SIZE_X, flag);
+ insertkey(id, ID_PO, pchan->name, NULL, AC_SIZE_Y, flag);
+ insertkey(id, ID_PO, pchan->name, NULL, AC_SIZE_Z, flag);
}
}
/* insert keyframe in any channel that's appropriate */
else {
- insertkey(id, ID_PO, pchan->name, NULL, AC_SIZE_X, 0);
- insertkey(id, ID_PO, pchan->name, NULL, AC_SIZE_Y, 0);
- insertkey(id, ID_PO, pchan->name, NULL, AC_SIZE_Z, 0);
+ insertkey(id, ID_PO, pchan->name, NULL, AC_SIZE_X, flag);
+ insertkey(id, ID_PO, pchan->name, NULL, AC_SIZE_Y, flag);
+ insertkey(id, ID_PO, pchan->name, NULL, AC_SIZE_Z, flag);
- insertkey(id, ID_PO, pchan->name, NULL, AC_QUAT_W, 0);
- insertkey(id, ID_PO, pchan->name, NULL, AC_QUAT_X, 0);
- insertkey(id, ID_PO, pchan->name, NULL, AC_QUAT_Y, 0);
- insertkey(id, ID_PO, pchan->name, NULL, AC_QUAT_Z, 0);
+ insertkey(id, ID_PO, pchan->name, NULL, AC_QUAT_W, flag);
+ insertkey(id, ID_PO, pchan->name, NULL, AC_QUAT_X, flag);
+ insertkey(id, ID_PO, pchan->name, NULL, AC_QUAT_Y, flag);
+ insertkey(id, ID_PO, pchan->name, NULL, AC_QUAT_Z, flag);
- insertkey(id, ID_PO, pchan->name, NULL, AC_LOC_X, 0);
- insertkey(id, ID_PO, pchan->name, NULL, AC_LOC_Y, 0);
- insertkey(id, ID_PO, pchan->name, NULL, AC_LOC_Z, 0);
+ insertkey(id, ID_PO, pchan->name, NULL, AC_LOC_X, flag);
+ insertkey(id, ID_PO, pchan->name, NULL, AC_LOC_Y, flag);
+ insertkey(id, ID_PO, pchan->name, NULL, AC_LOC_Z, flag);
}
}
}
@@ -3911,13 +3929,10 @@ void special_aftertrans_update(TransInfo *t)
if ( (G.sipo->flag & SIPO_NOTRANSKEYCULL)==0 &&
(cancelled == 0) )
{
- if (NLA_IPO_SCALED) {
- actstrip_map_ipo_keys(OBACT, G.sipo->ipo, 0, 1);
- posttrans_ipo_clean(G.sipo->ipo);
- actstrip_map_ipo_keys(OBACT, G.sipo->ipo, 1, 1);
- }
- else
- posttrans_ipo_clean(G.sipo->ipo);
+ /* NOTE: no need to do NLA scaling stuff here, as when there is NLA scaling,
+ * the transformed handles will get moved wrong (seem to match wrong repeat cycle)
+ */
+ posttrans_ipo_clean(G.sipo->ipo);
}
}
@@ -4035,7 +4050,7 @@ static void createTransObject(TransInfo *t)
ob= base->object;
/* store ipo keys? */
- if (ob->id.lib == 0 && ob->ipo && ob->ipo->showkey && (ob->ipoflag & OB_DRAWKEY)) {
+ if ((ob->id.lib == 0) && (ob->ipo) && (ob->ipo->showkey) && (ob->ipoflag & OB_DRAWKEY)) {
elems.first= elems.last= NULL;
make_ipokey_transform(ob, &elems, 1); /* '1' only selected keys */
@@ -4043,7 +4058,7 @@ static void createTransObject(TransInfo *t)
for(ik= elems.first; ik; ik= ik->next)
t->total++;
-
+
if(elems.first==NULL)
t->total++;
}
@@ -4076,7 +4091,7 @@ static void createTransObject(TransInfo *t)
}
/* store ipo keys? */
- if(ob->id.lib == 0 && ob->ipo && ob->ipo->showkey && (ob->ipoflag & OB_DRAWKEY)) {
+ if((ob->id.lib == 0) && (ob->ipo) && (ob->ipo->showkey) && (ob->ipoflag & OB_DRAWKEY)) {
popfirst(&elems); // bring back pushed listbase
@@ -4281,3 +4296,4 @@ void createTransData(TransInfo *t)
+
diff --git a/source/blender/src/transform_generics.c b/source/blender/src/transform_generics.c
index c332fd723eb..a1440b8cbce 100644
--- a/source/blender/src/transform_generics.c
+++ b/source/blender/src/transform_generics.c
@@ -32,6 +32,8 @@
#include "MEM_guardedalloc.h"
+#include "BLO_sys_types.h" // for intptr_t support
+
#include "DNA_action_types.h"
#include "DNA_armature_types.h"
#include "DNA_constraint_types.h"
@@ -581,39 +583,6 @@ void recalcData(TransInfo *t)
reshadeall_displist();
}
-void initTransModeFlags(TransInfo *t, int mode)
-{
- t->mode = mode;
- t->num.flag = 0;
-
- /* REMOVING RESTRICTIONS FLAGS */
- t->flag &= ~T_ALL_RESTRICTIONS;
-
- switch (mode) {
- case TFM_RESIZE:
- t->flag |= T_NULL_ONE;
- t->num.flag |= NUM_NULL_ONE;
- t->num.flag |= NUM_AFFECT_ALL;
- if (!G.obedit) {
- t->flag |= T_NO_ZERO;
- t->num.flag |= NUM_NO_ZERO;
- }
- break;
- case TFM_TOSPHERE:
- t->num.flag |= NUM_NULL_ONE;
- t->num.flag |= NUM_NO_NEGATIVE;
- t->flag |= T_NO_CONSTRAINT;
- break;
- case TFM_SHEAR:
- case TFM_CREASE:
- case TFM_BONE_ENVELOPE:
- case TFM_CURVE_SHRINKFATTEN:
- case TFM_BONE_ROLL:
- t->flag |= T_NO_CONSTRAINT;
- break;
- }
-}
-
void drawLine(float *center, float *dir, char axis, short options)
{
extern void make_axis_color(char *col, char *col2, char axis); // drawview.c
@@ -672,19 +641,10 @@ void initTrans (TransInfo *t)
t->transform = NULL;
t->handleEvent = NULL;
- t->total =
- t->num.idx =
- t->num.idx_max =
- t->num.ctrl[0] =
- t->num.ctrl[1] =
- t->num.ctrl[2] = 0;
+ t->total = 0;
t->val = 0.0f;
- t->num.val[0] =
- t->num.val[1] =
- t->num.val[2] = 0.0f;
-
t->vec[0] =
t->vec[1] =
t->vec[2] = 0.0f;
@@ -706,7 +666,8 @@ void initTrans (TransInfo *t)
t->around = V3D_CENTER;
setTransformViewMatrices(t);
- initNDofInput(&(t->ndof));
+ initNumInput(&t->num);
+ initNDofInput(&t->ndof);
}
/* Here I would suggest only TransInfo related issues, like free data & reset vars. Not redraws */
diff --git a/source/blender/src/transform_ndofinput.c b/source/blender/src/transform_ndofinput.c
index b7362197423..a22c7ed6472 100644
--- a/source/blender/src/transform_ndofinput.c
+++ b/source/blender/src/transform_ndofinput.c
@@ -38,8 +38,8 @@
#include "transform.h"
-int updateNDofMotion(NDofInput *n); // return 0 when motion is null
-void resetNDofInput(NDofInput *n);
+static int updateNDofMotion(NDofInput *n); // return 0 when motion is null
+static void resetNDofInput(NDofInput *n);
void initNDofInput(NDofInput *n)
{
@@ -56,7 +56,7 @@ void initNDofInput(NDofInput *n)
}
}
-void resetNDofInput(NDofInput *n)
+static void resetNDofInput(NDofInput *n)
{
int i;
for(i = 0; i < 6; i++)
@@ -122,7 +122,7 @@ void applyNDofInput(NDofInput *n, float *vec)
}
-int updateNDofMotion(NDofInput *n)
+static int updateNDofMotion(NDofInput *n)
{
float fval[7];
int i;
diff --git a/source/blender/src/transform_numinput.c b/source/blender/src/transform_numinput.c
index 9b811595a9a..89a76c097e0 100644
--- a/source/blender/src/transform_numinput.c
+++ b/source/blender/src/transform_numinput.c
@@ -41,6 +41,20 @@
/* ************************** NUMINPUT **************************** */
+void initNumInput(NumInput *n)
+{
+ n->flag =
+ n->idx =
+ n->idx_max =
+ n->ctrl[0] =
+ n->ctrl[1] =
+ n->ctrl[2] = 0;
+
+ n->val[0] =
+ n->val[1] =
+ n->val[2] = 0.0f;
+}
+
void outputNumInput(NumInput *n, char *str)
{
char cur;
diff --git a/source/blender/src/transform_orientations.c b/source/blender/src/transform_orientations.c
index 9c7a2f67b89..fc9dfbb902e 100644
--- a/source/blender/src/transform_orientations.c
+++ b/source/blender/src/transform_orientations.c
@@ -352,7 +352,7 @@ char * BIF_menustringTransformOrientation(char *title) {
char *str_menu, *p;
- str_menu = MEM_callocN(strlen(menu) + strlen(title) + 40 * BIF_countTransformOrientation(), "UserTransSpace from matrix");
+ str_menu = MEM_callocN(strlen(menu) + strlen(title) + 1 + 40 * BIF_countTransformOrientation(), "UserTransSpace from matrix");
p = str_menu;
p += sprintf(str_menu, "%s", title);
diff --git a/source/blender/src/transform_snap.c b/source/blender/src/transform_snap.c
index 3c17d0c1da8..e7937e72c2b 100644
--- a/source/blender/src/transform_snap.c
+++ b/source/blender/src/transform_snap.c
@@ -814,7 +814,7 @@ int snapDerivedMesh(Object *ob, DerivedMesh *dm, float obmat[][4], float ray_sta
{
efa = EM_get_face_for_index(index);
- if (efa && ((efa->v1->f & SELECT) || (efa->v2->f & SELECT) || (efa->v3->f & SELECT) || (efa->v4 && efa->v4->f & SELECT)))
+ if (efa && (efa->h || (efa->v1->f & SELECT) || (efa->v2->f & SELECT) || (efa->v3->f & SELECT) || (efa->v4 && efa->v4->f & SELECT)))
{
test = 0;
}
@@ -957,7 +957,7 @@ int snapDerivedMesh(Object *ob, DerivedMesh *dm, float obmat[][4], float ray_sta
{
eve = EM_get_vert_for_index(index);
- if (eve && eve->f & SELECT)
+ if (eve && (eve->h || (eve->f & SELECT)))
{
test = 0;
}
@@ -1050,7 +1050,7 @@ int snapDerivedMesh(Object *ob, DerivedMesh *dm, float obmat[][4], float ray_sta
{
eed = EM_get_edge_for_index(index);
- if (eed && ((eed->v1->f & SELECT) || (eed->v2->f & SELECT)))
+ if (eed && (eed->h || (eed->v1->f & SELECT) || (eed->v2->f & SELECT)))
{
test = 0;
}
@@ -1173,7 +1173,7 @@ int snapObjects(int *dist, float *loc, float *no, int mode) {
base= FIRSTBASE;
for ( base = FIRSTBASE; base != NULL; base = base->next ) {
- if ( BASE_SELECTABLE(base) && ((mode == NOT_SELECTED && (base->flag & SELECT) == 0) || (mode == NOT_ACTIVE && base != BASACT)) ) {
+ if ( BASE_SELECTABLE(base) && (base->flag & (BA_HAS_RECALC_OB|BA_HAS_RECALC_DATA)) == 0 && ((mode == NOT_SELECTED && (base->flag & (SELECT|BA_WAS_SEL)) == 0) || (mode == NOT_ACTIVE && base != BASACT)) ) {
Object *ob = base->object;
if (ob->transflag & OB_DUPLI)
diff --git a/source/blender/src/unwrapper.c b/source/blender/src/unwrapper.c
index ee5ce0c914e..612e068c6ca 100644
--- a/source/blender/src/unwrapper.c
+++ b/source/blender/src/unwrapper.c
@@ -202,8 +202,7 @@ ParamHandle *construct_param_handle(EditMesh *em, short implicit, short fill, sh
handle = param_construct_begin();
if ((G.scene->toolsettings->uvcalc_flag & UVCALC_NO_ASPECT_CORRECT)==0) {
- EditMesh *em = G.editMesh;
- EditFace *efa = EM_get_actFace(1);
+ efa = EM_get_actFace(1);
if (efa) {
float aspx, aspy;
MTFace *tface = CustomData_em_get(&em->fdata, efa->data, CD_MTFACE);
diff --git a/source/blender/src/usiblender.c b/source/blender/src/usiblender.c
index f019d299654..7de866ccfb7 100644
--- a/source/blender/src/usiblender.c
+++ b/source/blender/src/usiblender.c
@@ -34,8 +34,6 @@
#include <stdio.h>
#include <string.h>
-#include "GL/glew.h"
-
#ifdef WIN32
#include <windows.h> /* need to include windows.h so _WIN32_IE is defined */
#ifndef _WIN32_IE
@@ -69,6 +67,7 @@
#include "DNA_sound_types.h"
#include "DNA_scene_types.h"
#include "DNA_screen_types.h"
+#include "DNA_text_types.h"
#include "BKE_blender.h"
#include "BKE_curve.h"
@@ -81,6 +80,7 @@
#include "BKE_mball.h"
#include "BKE_node.h"
#include "BKE_packedFile.h"
+#include "BKE_suggestions.h"
#include "BKE_texture.h"
#include "BKE_utildefines.h"
#include "BKE_pointcache.h"
@@ -149,6 +149,9 @@
#include "reeb.h"
+#include "GPU_extensions.h"
+#include "GPU_draw.h"
+
/***/
/* define for setting colors in theme below */
@@ -479,7 +482,33 @@ static void init_userdef_file(void)
if ((G.main->versionfile < 245) || (G.main->versionfile == 245 && G.main->subversionfile < 16)) {
U.flag |= USER_ADD_VIEWALIGNED|USER_ADD_EDITMODE;
}
-
+ if ((G.main->versionfile < 247) || (G.main->versionfile == 247 && G.main->subversionfile <= 2)) {
+ bTheme *btheme;
+
+ /* adjust themes */
+ for (btheme= U.themes.first; btheme; btheme= btheme->next) {
+ char *col;
+
+ /* IPO Editor: Handles/Vertices */
+ col = btheme->tipo.vertex;
+ SETCOL(btheme->tipo.handle_vertex, col[0], col[1], col[2], 255);
+ col = btheme->tipo.vertex_select;
+ SETCOL(btheme->tipo.handle_vertex_select, col[0], col[1], col[2], 255);
+ btheme->tipo.handle_vertex_size= btheme->tipo.vertex_size;
+
+ /* Sequence/Image Editor: colors for GPencil text */
+ col = btheme->tv3d.bone_pose;
+ SETCOL(btheme->tseq.bone_pose, col[0], col[1], col[2], 255);
+ SETCOL(btheme->tima.bone_pose, col[0], col[1], col[2], 255);
+ col = btheme->tv3d.vertex_select;
+ SETCOL(btheme->tseq.vertex_select, col[0], col[1], col[2], 255);
+ }
+
+ /* define grease-pencil distances */
+ U.gp_manhattendist= 3;
+ U.gp_euclideandist= 20;
+ }
+
/* GL Texture Garbage Collection (variable abused above!) */
if (U.textimeout == 0) {
U.texcollectrate = 60;
@@ -569,8 +598,9 @@ void BIF_read_file(char *name)
if (retval!=0) G.relbase_valid = 1;
undo_editmode_clear();
+ undo_imagepaint_clear();
BKE_reset_undo();
- BKE_write_undo("original"); /* save current state */
+ BKE_write_undo("Original"); /* save current state */
refresh_interface_font();
}
@@ -642,8 +672,9 @@ int BIF_read_homefile(int from_memory)
init_userdef_file();
undo_editmode_clear();
+ undo_imagepaint_clear();
BKE_reset_undo();
- BKE_write_undo("original"); /* save current state */
+ BKE_write_undo("Original"); /* save current state */
/* if from memory, need to refresh python scripts */
if (from_memory) {
@@ -1041,8 +1072,9 @@ void BIF_init(void)
BIF_filelist_init_icons();
- init_gl_stuff(); /* drawview.c, after homefile */
- glewInit();
+ GPU_state_init();
+ GPU_extensions_init();
+
readBlog();
BLI_strncpy(G.lib, G.sce, FILE_MAX);
}
@@ -1055,6 +1087,7 @@ extern ListBase editelems;
void exit_usiblender(void)
{
struct TmpFont *tf;
+ int totblock;
BIF_clear_tempfiles();
@@ -1103,7 +1136,7 @@ void exit_usiblender(void)
free_ipocopybuf();
free_actcopybuf();
free_vertexpaint();
- free_imagepaint();
+ free_texttools();
/* editnurb can remain to exist outside editmode */
freeNurblist(&editNurb);
@@ -1121,6 +1154,7 @@ void exit_usiblender(void)
sound_exit_audio();
if(G.listener) MEM_freeN(G.listener);
+ GPU_extensions_exit();
libtiff_exit();
@@ -1130,6 +1164,7 @@ void exit_usiblender(void)
/* undo free stuff */
undo_editmode_clear();
+ undo_imagepaint_clear();
BKE_undo_save_quit(); // saves quit.blend if global undo is on
BKE_reset_undo();
@@ -1155,6 +1190,7 @@ void exit_usiblender(void)
BLI_freelistN(&U.themes);
BIF_preview_free_dbase();
+ totblock= MEM_get_memory_blocks_in_use();
if(totblock!=0) {
printf("Error Totblock: %d\n",totblock);
MEM_printmemlist();
diff --git a/source/blender/src/verse_image.c b/source/blender/src/verse_image.c
index fe9e6137091..edb3a0a9f2c 100644
--- a/source/blender/src/verse_image.c
+++ b/source/blender/src/verse_image.c
@@ -43,6 +43,8 @@
#include "BIF_verse.h"
#include "BIF_space.h"
+#include "GPU_draw.h"
+
/*
* unsubscribe from verse bitmap
*/
@@ -327,7 +329,7 @@ void post_bitmap_tile_set(VBitmapLayer *vblayer, unsigned int xs, unsigned int y
rect[channel] = (char)vuint8[i];
}
- free_realtime_image(image);
+ GPU_free_image(image);
/* redraw preview of image ... uncommented, because rendering
* was computed too often */
diff --git a/source/blender/src/view.c b/source/blender/src/view.c
index 12450bee9de..d5468342932 100644
--- a/source/blender/src/view.c
+++ b/source/blender/src/view.c
@@ -94,6 +94,9 @@
#define TRACKBALLSIZE (1.1)
#define BL_NEAR_CLIP 0.001
+#define COS45 0.70710678118654746
+#define SIN45 COS45
+
/* local prototypes ----------*/
void setcameratoview3d(void); /* windows.c & toets.c */
@@ -793,6 +796,82 @@ void viewmoveNDOFfly(int mode)
BIF_view3d_previewrender_signal(curarea, PR_DBASE|PR_DISPRECT);
}
+int view_autodist( float mouse_worldloc[3] ) //, float *autodist )
+{
+ View3D *v3d = G.vd;
+
+ /* Zooms in on a border drawn by the user */
+ short mval[2];
+ rcti rect;
+
+ /* ZBuffer depth vars */
+ bglMats mats;
+ float depth, depth_close= MAXFLOAT;
+ int had_depth = 0;
+ double cent[2], p[3];
+ int xs, ys;
+
+ getmouseco_areawin(mval);
+
+ persp(PERSP_VIEW);
+
+ rect.xmax = mval[0] + 4;
+ rect.ymax = mval[1] + 4;
+
+ rect.xmin = mval[0] - 4;
+ rect.ymin = mval[1] - 4;
+
+ /* Get Z Depths, needed for perspective, nice for ortho */
+ bgl_get_mats(&mats);
+ draw_depth(curarea, (void *)v3d, NULL);
+
+ /* force updating */
+ if (v3d->depths) {
+ had_depth = 1;
+ v3d->depths->damaged = 1;
+ }
+
+ view3d_update_depths(v3d);
+
+ /* Constrain rect to depth bounds */
+ if (rect.xmin < 0) rect.xmin = 0;
+ if (rect.ymin < 0) rect.ymin = 0;
+ if (rect.xmax >= v3d->depths->w) rect.xmax = v3d->depths->w-1;
+ if (rect.ymax >= v3d->depths->h) rect.ymax = v3d->depths->h-1;
+
+ /* Find the closest Z pixel */
+ for (xs=rect.xmin; xs < rect.xmax; xs++) {
+ for (ys=rect.ymin; ys < rect.ymax; ys++) {
+ depth= v3d->depths->depths[ys*v3d->depths->w+xs];
+ if(depth < v3d->depths->depth_range[1] && depth > v3d->depths->depth_range[0]) {
+ if (depth_close > depth) {
+ depth_close = depth;
+ }
+ }
+ }
+ }
+
+ if (depth_close==MAXFLOAT)
+ return 0;
+
+ if (had_depth==0) {
+ MEM_freeN(v3d->depths->depths);
+ v3d->depths->depths = NULL;
+ }
+ v3d->depths->damaged = 1;
+
+ cent[0] = (double)mval[0];
+ cent[1] = (double)mval[1];
+
+ if (!gluUnProject(cent[0], cent[1], depth_close, mats.modelview, mats.projection, mats.viewport, &p[0], &p[1], &p[2]))
+ return 0;
+
+ mouse_worldloc[0] = (float)p[0];
+ mouse_worldloc[1] = (float)p[1];
+ mouse_worldloc[2] = (float)p[2];
+ return 1;
+}
+
void viewmove(int mode)
{
static float lastofs[3] = {0,0,0};
@@ -815,6 +894,11 @@ void viewmove(int mode)
return;
}
+ /* clear lastview flag (used to return to previous view when
+ * pressing Pad0 again after entering Camera view)
+ */
+ if (G.vd->lastview_set) G.vd->lastview_set= 0;
+
// dist correction from other movement devices
if((dz_flag)||G.vd->dist==0) {
dz_flag = 0;
@@ -825,15 +909,11 @@ void viewmove(int mode)
Mat3MulVecfl(mat, upvec);
VecAddf(G.vd->ofs, G.vd->ofs, upvec);
}
-
-
/* sometimes this routine is called from headerbuttons */
areawinset(curarea->win);
- initgrabz(-G.vd->ofs[0], -G.vd->ofs[1], -G.vd->ofs[2]);
-
QUATCOPY(oldquat, G.vd->viewquat);
getmouseco_areawin(mval_area); /* for zoom to mouse loc */
@@ -867,9 +947,44 @@ void viewmove(int mode)
VECCOPY(obofs, lastofs);
VecMulf(obofs, -1.0f);
}
+ else if (U.uiflag & USER_ORBIT_ZBUF) {
+ if ((use_sel=view_autodist(obofs))) {
+ if (G.vd->persp==V3D_PERSP) {
+ float my_origin[3]; /* original G.vd->ofs */
+ float my_pivot[3]; /* view */
+
+ VECCOPY(my_origin, G.vd->ofs);
+ VecMulf(my_origin, -1.0f); /* ofs is flipped */
+
+ /* Set the dist value to be the distance from this 3d point */
+ /* this means youll always be able to zoom into it and panning wont go bad when dist was zero */
+
+ /* remove dist value */
+ upvec[0] = upvec[1] = 0;
+ upvec[2] = G.vd->dist;
+ Mat3CpyMat4(mat, G.vd->viewinv);
+ Mat3MulVecfl(mat, upvec);
+ VecSubf(my_pivot, G.vd->ofs, upvec);
+ VecMulf(my_pivot, -1.0f); /* ofs is flipped */
+
+ /* find a new ofs value that is allong the view axis (rather then the mouse location) */
+ lambda_cp_line_ex(obofs, my_pivot, my_origin, dvec);
+ dist0 = G.vd->dist = VecLenf(my_pivot, dvec);
+
+ VecMulf(dvec, -1.0f);
+ VECCOPY(G.vd->ofs, dvec);
+ }
+ VecMulf(obofs, -1.0f);
+ VECCOPY(ofs, G.vd->ofs);
+ } else {
+ ofs[0] = ofs[1] = ofs[2] = 0.0f;
+ }
+ }
else
ofs[0] = ofs[1] = ofs[2] = 0.0f;
-
+
+ initgrabz(-G.vd->ofs[0], -G.vd->ofs[1], -G.vd->ofs[2]);
+
reverse= 1.0f;
if (G.vd->persmat[2][1] < 0.0f)
reverse= -1.0f;
@@ -997,6 +1112,87 @@ void viewmove(int mode)
VecAddf(G.vd->ofs, G.vd->ofs, obofs);
}
}
+
+ /* check for view snap */
+ if (G.qual==LR_CTRLKEY){
+ int i;
+ float viewmat[3][3];
+
+ static const float thres = 0.93; //cos(20 deg);
+
+ static float snapquats[39][6] = {
+ /*{q0, q1, q3, q4, view, oposite_direction}*/
+ {COS45, -SIN45, 0.0, 0.0, 1, 0}, //front
+ {0.0, 0.0, -SIN45, -SIN45, 1, 1}, //back
+ {1.0, 0.0, 0.0, 0.0, 7, 0}, //top
+ {0.0, -1.0, 0.0, 0.0, 7, 1}, //bottom
+ {0.5, -0.5, -0.5, -0.5, 3, 0}, //left
+ {0.5, -0.5, 0.5, 0.5, 3, 1}, //right
+
+ /* some more 45 deg snaps */
+ {0.65328145027160645, -0.65328145027160645, 0.27059805393218994, 0.27059805393218994, 0, 0},
+ {0.92387950420379639, 0.0, 0.0, 0.38268342614173889, 0, 0},
+ {0.0, -0.92387950420379639, 0.38268342614173889, 0.0, 0, 0},
+ {0.35355335474014282, -0.85355335474014282, 0.35355338454246521, 0.14644660055637360, 0, 0},
+ {0.85355335474014282, -0.35355335474014282, 0.14644660055637360, 0.35355338454246521, 0, 0},
+ {0.49999994039535522, -0.49999994039535522, 0.49999997019767761, 0.49999997019767761, 0, 0},
+ {0.27059802412986755, -0.65328145027160645, 0.65328145027160645, 0.27059802412986755, 0, 0},
+ {0.65328145027160645, -0.27059802412986755, 0.27059802412986755, 0.65328145027160645, 0, 0},
+ {0.27059799432754517, -0.27059799432754517, 0.65328139066696167, 0.65328139066696167, 0, 0},
+ {0.38268336653709412, 0.0, 0.0, 0.92387944459915161, 0, 0},
+ {0.0, -0.38268336653709412, 0.92387944459915161, 0.0, 0, 0},
+ {0.14644658565521240, -0.35355335474014282, 0.85355335474014282, 0.35355335474014282, 0, 0},
+ {0.35355335474014282, -0.14644658565521240, 0.35355335474014282, 0.85355335474014282, 0, 0},
+ {0.0, 0.0, 0.92387944459915161, 0.38268336653709412, 0, 0},
+ {-0.0, 0.0, 0.38268336653709412, 0.92387944459915161, 0, 0},
+ {-0.27059802412986755, 0.27059802412986755, 0.65328133106231689, 0.65328133106231689, 0, 0},
+ {-0.38268339633941650, 0.0, 0.0, 0.92387938499450684, 0, 0},
+ {0.0, 0.38268339633941650, 0.92387938499450684, 0.0, 0, 0},
+ {-0.14644658565521240, 0.35355338454246521, 0.85355329513549805, 0.35355332493782043, 0, 0},
+ {-0.35355338454246521, 0.14644658565521240, 0.35355332493782043, 0.85355329513549805, 0, 0},
+ {-0.49999991059303284, 0.49999991059303284, 0.49999985098838806, 0.49999985098838806, 0, 0},
+ {-0.27059799432754517, 0.65328145027160645, 0.65328139066696167, 0.27059799432754517, 0, 0},
+ {-0.65328145027160645, 0.27059799432754517, 0.27059799432754517, 0.65328139066696167, 0, 0},
+ {-0.65328133106231689, 0.65328133106231689, 0.27059793472290039, 0.27059793472290039, 0, 0},
+ {-0.92387932538986206, 0.0, 0.0, 0.38268333673477173, 0, 0},
+ {0.0, 0.92387932538986206, 0.38268333673477173, 0.0, 0, 0},
+ {-0.35355329513549805, 0.85355329513549805, 0.35355329513549805, 0.14644657075405121, 0, 0},
+ {-0.85355329513549805, 0.35355329513549805, 0.14644657075405121, 0.35355329513549805, 0, 0},
+ {-0.38268330693244934, 0.92387938499450684, 0.0, 0.0, 0, 0},
+ {-0.92387938499450684, 0.38268330693244934, 0.0, 0.0, 0, 0},
+ {-COS45, 0.0, 0.0, SIN45, 0, 0},
+ {COS45, 0.0, 0.0, SIN45, 0, 0},
+ {0.0, 0.0, 0.0, 1.0, 0, 0}
+ };
+
+ QuatToMat3(G.vd->viewquat, viewmat);
+
+ for (i = 0 ; i < 39; i++){
+ float snapmat[3][3];
+ float view = (int)snapquats[i][4];
+ float oposite_dir = (int)snapquats[i][5];
+
+ QuatToMat3(snapquats[i], snapmat);
+
+ if ((Inpf(snapmat[0], viewmat[0]) > thres) &&
+ (Inpf(snapmat[1], viewmat[1]) > thres) &&
+ (Inpf(snapmat[2], viewmat[2]) > thres)){
+
+ QUATCOPY(G.vd->viewquat, snapquats[i]);
+
+ G.vd->view = view;
+ if (view){
+ if (oposite_dir){
+ G.vd->flag2 |= V3D_OPP_DIRECTION_NAME;
+ }else{
+ G.vd->flag2 &= ~V3D_OPP_DIRECTION_NAME;
+ }
+ }
+
+ break;
+ }
+ }
+ }
}
else if(mode==1) { /* translate */
if(G.vd->persp==V3D_CAMOB) {
@@ -1046,9 +1242,20 @@ void viewmove(int mode)
zfac*G.vd->dist < 10.0*G.vd->far)
view_zoom_mouseloc(zfac, mval_area);
- /* these limits are in toets.c too */
- if(G.vd->dist<0.001*G.vd->grid) G.vd->dist= 0.001*G.vd->grid;
- if(G.vd->dist>10.0*G.vd->far) G.vd->dist=10.0*G.vd->far;
+
+ if ((U.uiflag & USER_ORBIT_ZBUF) && (U.viewzoom==USER_ZOOM_CONT) && (G.vd->persp==V3D_PERSP)) {
+ /* Secret apricot feature, translate the view when in continues mode */
+ upvec[0] = upvec[1] = 0;
+ upvec[2] = (dist0 - G.vd->dist) * G.vd->grid;
+ G.vd->dist = dist0;
+ Mat3CpyMat4(mat, G.vd->viewinv);
+ Mat3MulVecfl(mat, upvec);
+ VecAddf(G.vd->ofs, G.vd->ofs, upvec);
+ } else {
+ /* these limits are in toets.c too */
+ if(G.vd->dist<0.001*G.vd->grid) G.vd->dist= 0.001*G.vd->grid;
+ if(G.vd->dist>10.0*G.vd->far) G.vd->dist=10.0*G.vd->far;
+ }
if(G.vd->persp==V3D_ORTHO || G.vd->persp==V3D_CAMOB) preview3d_event= 0;
}
@@ -2353,3 +2560,4 @@ void smooth_view_to_camera(View3D *v3d)
v3d->persp= V3D_CAMOB;
}
}
+
diff --git a/source/blender/src/vpaint.c b/source/blender/src/vpaint.c
index 935c546a235..8da5e1b2572 100644
--- a/source/blender/src/vpaint.c
+++ b/source/blender/src/vpaint.c
@@ -740,7 +740,7 @@ static void vpaint_blend( unsigned int *col, unsigned int *colorig, unsigned int
}
-static int sample_backbuf_area(VPaint *vp, int *indexar, int totface, int x, int y, float size)
+static int sample_backbuf_area(int *indexar, int totface, int x, int y, float size)
{
unsigned int *rt;
struct ImBuf *ibuf;
@@ -1196,7 +1196,7 @@ void weight_paint(void)
/* which faces are involved */
if(Gwp.flag & VP_AREA) {
- totindex= sample_backbuf_area(&Gwp, indexar, me->totface, mval[0], mval[1], Gwp.size);
+ totindex= sample_backbuf_area(indexar, me->totface, mval[0], mval[1], Gwp.size);
}
else {
indexar[0]= sample_backbuf(mval[0], mval[1]);
@@ -1428,7 +1428,7 @@ void vertex_paint()
/* which faces are involved */
if(Gvp.flag & VP_AREA) {
- totindex= sample_backbuf_area(&Gvp, indexar, me->totface, mval[0], mval[1], Gvp.size);
+ totindex= sample_backbuf_area(indexar, me->totface, mval[0], mval[1], Gvp.size);
}
else {
indexar[0]= sample_backbuf(mval[0], mval[1]);
diff --git a/source/blender/src/writeimage.c b/source/blender/src/writeimage.c
index 1ef32fc33e8..b21c14bed35 100644
--- a/source/blender/src/writeimage.c
+++ b/source/blender/src/writeimage.c
@@ -80,7 +80,6 @@ void BIF_save_envmap(EnvMap *env, char *str)
}
-#define FTOCHAR(val) val<=0.0f?255: 255-(val>=255.0f?255: (char)(val))
/* callback for fileselect to save rendered image, renderresult was checked to exist */
static void save_rendered_image_cb_real(char *name, int confirm)
diff --git a/source/blender/yafray/intern/export_File.cpp b/source/blender/yafray/intern/export_File.cpp
index f8bbdad5f65..ea700965826 100644
--- a/source/blender/yafray/intern/export_File.cpp
+++ b/source/blender/yafray/intern/export_File.cpp
@@ -96,7 +96,7 @@ static void addDrive(string &path)
static string unixYafrayPath()
{
- static char *alternative[]=
+ static const char *alternative[]=
{
"/usr/local/bin/",
"/usr/bin/",
@@ -881,7 +881,7 @@ void yafrayFileRender_t::writeShader(const string &shader_name, Material* matr,
ostr << "\t\t<input value=\"" << shader_name << "_map" << m2 << "\" />\n";
// blendtype, would have been nice if the order would have been the same as for ramps...
- const string blendtype[9] = {"mix", "mul", "add", "sub", "divide", "darken", "difference", "lighten", "screen"};
+ const string blendtype[MTEX_NUM_BLENDTYPES] = {"mix", "mul", "add", "sub", "divide", "darken", "difference", "lighten", "screen", "hue", "sat", "val", "color"};
ostr << "\t\t<mode value=\"" << blendtype[(int)mtex->blendtype] << "\" />\n";
// texture color (for use with MUL and/or no_rgb etc..)
diff --git a/source/blender/yafray/intern/export_Plugin.cpp b/source/blender/yafray/intern/export_Plugin.cpp
index 6ae4a31bf50..92ec7ba8d82 100644
--- a/source/blender/yafray/intern/export_Plugin.cpp
+++ b/source/blender/yafray/intern/export_Plugin.cpp
@@ -74,7 +74,7 @@ extern "C" { extern char bprogname[]; }
// add drive character if not in path string, using blender executable location as reference
static void addDrive(string &path)
{
- int sp = path.find_first_of(":");
+ size_t sp = path.find_first_of(":");
if (sp==-1) {
string blpath = bprogname;
sp = blpath.find_first_of(":");
@@ -98,7 +98,7 @@ static string YafrayPath()
string path=find_path();
return path;
#else
- static char *alternative[]=
+ static const char *alternative[]=
{
"/usr/local/lib/",
#ifdef __x86_64__
@@ -124,7 +124,7 @@ static string YafrayPluginPath()
#ifdef WIN32
return find_path()+"\\plugins";
#else
- static char *alternative[]=
+ static const char *alternative[]=
{
"/usr/local/lib/yafray",
#ifdef __x86_64__
@@ -782,7 +782,7 @@ void yafrayPluginRender_t::writeShader(const string &shader_name, Material* matr
mparams["input"] = yafray::parameter_t(shader_name + temp);
// blendtype, would have been nice if the order would have been the same as for ramps...
- const string blendtype[9] = {"mix", "mul", "add", "sub", "divide", "darken", "difference", "lighten", "screen"};
+ const string blendtype[MTEX_NUM_BLENDTYPES] = {"mix", "mul", "add", "sub", "divide", "darken", "difference", "lighten", "screen", "hue", "sat", "val", "color"};
mparams["mode"] = yafray::parameter_t(blendtype[(int)mtex->blendtype]);
// texture color (for use with MUL and/or no_rgb etc..)
diff --git a/source/creator/CMakeLists.txt b/source/creator/CMakeLists.txt
index d17b94c631d..5109fbc0930 100644
--- a/source/creator/CMakeLists.txt
+++ b/source/creator/CMakeLists.txt
@@ -37,8 +37,10 @@ INCLUDE_DIRECTORIES(../../intern/guardedalloc
../blender/render/extern/include
../blender/python
../blender/makesdna
+ ../blender/gpu
../kernel/gen_messaging
../kernel/gen_system
+ ../../extern/glew/include
)
@@ -52,10 +54,6 @@ IF(LINUX)
INCLUDE_DIRECTORIES(${BINRELOC_INC})
endif(LINUX)
-IF(YESIAMSTUPID)
- ADD_DEFINITIONS(-DYESIAMSTUPID)
-ENDIF(YESIAMSTUPID)
-
MESSAGE(STATUS "Configuring blender")
ADD_CUSTOM_COMMAND(
@@ -189,7 +187,11 @@ ADD_DEPENDENCIES(blender makesdna)
FILE(READ ${CMAKE_BINARY_DIR}/cmake_blender_libs.txt BLENDER_LINK_LIBS)
-SET(BLENDER_LINK_LIBS bf_nodes ${BLENDER_LINK_LIBS} src blender_python blender_render blender_radiosity blender_IK bf_elbeem)
+SET(BLENDER_LINK_LIBS bf_nodes ${BLENDER_LINK_LIBS} src blender_python blender_render blender_radiosity)
+
+IF(WITH_ELBEEM)
+ SET(BLENDER_LINK_LIBS ${BLENDER_LINK_LIBS} bf_elbeem)
+ENDIF(WITH_ELBEEM)
IF(CMAKE_SYSTEM_NAME MATCHES "Linux")
SET(BLENDER_LINK_LIBS ${BLENDER_LINK_LIBS} extern_binreloc)
@@ -210,6 +212,7 @@ IF(UNIX)
blender_python
bf_blenkernel
bf_nodes
+ bf_gpu
bf_blenloader
bf_blenpluginapi
bf_imbuf
@@ -223,7 +226,7 @@ IF(UNIX)
bf_decimation
bf_elbeem
bf_yafray
- blender_IK
+ bf_IK
bf_memutil
bf_guardedalloc
blender_CTR
diff --git a/source/creator/Makefile b/source/creator/Makefile
index 8a0d20264ea..9273d943883 100644
--- a/source/creator/Makefile
+++ b/source/creator/Makefile
@@ -49,20 +49,18 @@ CPPFLAGS += -I../blender/renderconverter
CPPFLAGS += -I../blender/blenkernel
CPPFLAGS += -I../blender/python
CPPFLAGS += -I../blender/blenloader
+CPPFLAGS += -I../blender/gpu
CPPFLAGS += -I../kernel/gen_system
CPPFLAGS += -I../kernel/gen_messaging
CPPFLAGS += -I$(NAN_GUARDEDALLOC)/include
+CPPFLAGS += -I$(NAN_GLEW)/include
ifeq ($(WITH_QUICKTIME), true)
CPPFLAGS += -I$(NAN_QUICKTIME)/include -DWITH_QUICKTIME
endif
ifeq ($(WITH_BINRELOC), true)
- CPPFLAGS += -I$(OCGDIR)/extern/binreloc/include -DWITH_BINRELOC
-endif
-
-ifeq ($(NAN_YESIAMSTUPID), true)
- CPPFLAGS += -DYESIAMSTUPID
+ CPPFLAGS += -I$(NANBLENDERHOME)/extern/binreloc/include -DWITH_BINRELOC
endif
CPPFLAGS += -I$(OPENGL_HEADERS)
diff --git a/source/creator/SConscript b/source/creator/SConscript
index cac9e895a97..a4c218f89d6 100644
--- a/source/creator/SConscript
+++ b/source/creator/SConscript
@@ -7,7 +7,7 @@ incs = '#/intern/guardedalloc ../blender/blenlib ../blender/blenkernel'
incs += ' ../blender/include ../blender/blenloader ../blender/imbuf'
incs += ' ../blender/renderconverter ../blender/render/extern/include'
incs += ' ../blender/python ../blender/makesdna ../kernel/gen_messaging'
-incs += ' ../kernel/gen_system'
+incs += ' ../kernel/gen_system #/extern/glew/include ../blender/gpu'
incs += ' ' + env['BF_OPENGL_INC']
defs = []
diff --git a/source/creator/creator.c b/source/creator/creator.c
index e17b0f66977..84ee7c319f9 100644
--- a/source/creator/creator.c
+++ b/source/creator/creator.c
@@ -70,14 +70,14 @@
#include "BLO_writefile.h"
#include "BLO_readfile.h"
-#include "BDR_drawmesh.h"
-
#include "IMB_imbuf.h" // for quicktime_init
#include "BPY_extern.h"
#include "RE_pipeline.h"
+#include "GPU_draw.h"
+
#include "playanim_ext.h"
#include "mydevice.h"
#include "nla.h"
@@ -107,8 +107,8 @@ extern char * build_type;
#endif
/* Local Function prototypes */
-static void print_help();
-static void print_version();
+static void print_help(void);
+static void print_version(void);
/* defined in ghostwinlay and winlay, we can't include carbon here, conflict with DNA */
@@ -128,7 +128,7 @@ char bprogname[FILE_MAXDIR+FILE_MAXFILE]; /* from blenpluginapi:pluginapi.c */
char btempdir[FILE_MAXDIR+FILE_MAXFILE];
/* Initialise callbacks for the modules that need them */
-void setCallbacks(void);
+static void setCallbacks(void);
#if defined(__sgi) || defined(__alpha__)
static void fpe_handler(int sig)
@@ -202,6 +202,7 @@ static void print_help(void)
printf (" -p <sx> <sy>\tOpen with lower left corner at <sx>, <sy>\n");
printf (" -m\t\tRead from disk (Don't buffer)\n");
printf (" -f <fps> <fps-base>\t\tSpecify FPS to start with\n");
+ printf (" -j <frame>\tSet frame step to <frame>\n");
printf ("\nWindow options:\n");
printf (" -w\t\tForce opening with borders (default)\n");
@@ -218,6 +219,7 @@ static void print_help(void)
printf ("\nMisc options:\n");
printf (" -d\t\tTurn debugging on\n");
printf (" -noaudio\tDisable audio on systems that support audio\n");
+ printf (" -nojoystick\tDisable joystick support\n");
printf (" -h\t\tPrint this help text\n");
printf (" -y\t\tDisable automatic python script execution (scriptlinks, pydrivers, pyconstraints, pynodes)\n");
printf (" -P <filename>\tRun the given Python script (filename or Blender Text)\n");
@@ -267,7 +269,7 @@ static void main_init_screen( void )
int main(int argc, char **argv)
{
- int a, i, stax=0, stay=0, sizx, sizy, scr_init = 0;
+ int a, i, stax, stay, sizx, sizy, scr_init = 0;
SYS_SystemHandle syshandle;
#if defined(WIN32) || defined (__linux__)
@@ -301,10 +303,10 @@ int main(int argc, char **argv)
setprefsize(left +10,scr_y - bottom +10,right-left -20,bottom - 64, 0);
} else {
- winlay_get_screensize(&scr_x, &scr_y);
+ winlay_get_screensize(&scr_x, &scr_y);
- /* 40 + 684 + (headers) 22 + 22 = 768, the powerbook screen height */
- setprefsize(120, 40, 850, 684, 0);
+ /* 40 + 684 + (headers) 22 + 22 = 768, the powerbook screen height */
+ setprefsize(120, 40, 850, 684, 0);
}
winlay_process_events(0);
@@ -430,11 +432,11 @@ int main(int argc, char **argv)
init_def_material();
- winlay_get_screensize(&sizx, &sizy);
- stax=0;
- stay=0;
-
if(G.background==0) {
+ winlay_get_screensize(&sizx, &sizy);
+ stax=0;
+ stay=0;
+
for(a=1; a<argc; a++) {
if(argv[a][0] == '-') {
switch(argv[a][1]) {
@@ -492,6 +494,14 @@ int main(int argc, char **argv)
audio = 0;
if (G.f & G_DEBUG) printf("setting audio to: %d\n", audio);
}
+ if (BLI_strcasecmp(argv[a], "-nojoystick") == 0) {
+ /**
+ don't initialize joysticks if user doesn't want to use joysticks
+ failed joystick initialization delays over 5 seconds, before game engine start
+ */
+ SYS_WriteCommandLineInt(syshandle,"nojoystick",1);
+ if (G.f & G_DEBUG) printf("disabling nojoystick\n");
+ }
break;
}
}
@@ -600,12 +610,12 @@ int main(int argc, char **argv)
/* doMipMap */
if (!strcmp(argv[a],"nomipmap"))
{
- set_mipmap(0); //doMipMap = 0;
+ GPU_set_mipmap(0); //doMipMap = 0;
}
/* linearMipMap */
if (!strcmp(argv[a],"linearmipmap"))
{
- set_linear_mipmap(1); //linearMipMap = 1;
+ GPU_set_linear_mipmap(1); //linearMipMap = 1;
}
@@ -618,23 +628,14 @@ int main(int argc, char **argv)
if (G.scene) {
if (a < argc) {
int frame= MIN2(MAXFRAME, MAX2(1, atoi(argv[a])));
- int slink_flag= 0;
Render *re= RE_NewRender(G.scene->id.name);
- if (G.f & G_DOSCRIPTLINKS) {
- BPY_do_all_scripts(SCRIPT_RENDER);
- /* avoid FRAMECHANGED slink event
- * (should only be triggered in anims): */
- G.f &= ~G_DOSCRIPTLINKS;
- slink_flag= 1;
- }
+ if (G.f & G_DOSCRIPTLINKS)
+ BPY_do_all_scripts(SCRIPT_RENDER, 0);
- RE_BlenderAnim(re, G.scene, frame, frame);
+ RE_BlenderAnim(re, G.scene, frame, frame, G.scene->frame_step);
- if (slink_flag) {
- G.f |= G_DOSCRIPTLINKS;
- BPY_do_all_scripts(SCRIPT_POSTRENDER);
- }
+ BPY_do_all_scripts(SCRIPT_POSTRENDER, 0);
}
} else {
printf("\nError: no blend loaded. cannot use '-f'.\n");
@@ -645,12 +646,12 @@ int main(int argc, char **argv)
Render *re= RE_NewRender(G.scene->id.name);
if (G.f & G_DOSCRIPTLINKS)
- BPY_do_all_scripts(SCRIPT_RENDER);
+ BPY_do_all_scripts(SCRIPT_RENDER, 1);
- RE_BlenderAnim(re, G.scene, G.scene->r.sfra, G.scene->r.efra);
+ RE_BlenderAnim(re, G.scene, G.scene->r.sfra, G.scene->r.efra, G.scene->frame_step);
if (G.f & G_DOSCRIPTLINKS)
- BPY_do_all_scripts(SCRIPT_POSTRENDER);
+ BPY_do_all_scripts(SCRIPT_POSTRENDER, 1);
} else {
printf("\nError: no blend loaded. cannot use '-a'.\n");
}
@@ -678,6 +679,15 @@ int main(int argc, char **argv)
printf("\nError: no blend loaded. cannot use '-e'.\n");
}
break;
+ case 'j':
+ a++;
+ if(G.scene) {
+ int fstep= MIN2(MAXFRAME, MAX2(1, atoi(argv[a])));
+ if (a < argc) (G.scene->frame_step) = fstep;
+ } else {
+ printf("\nError: no blend loaded. cannot use '-j'.\n");
+ }
+ break;
case 'P':
a++;
if (a < argc) {
@@ -772,44 +782,10 @@ int main(int argc, char **argv)
else {
/* Make the path absolute because its needed for relative linked blends to be found */
- int abs = 0;
- int filelen;
- char cwd[FILE_MAXDIR + FILE_MAXFILE];
char filename[FILE_MAXDIR + FILE_MAXFILE];
- cwd[0] = filename[0] = '\0';
BLI_strncpy(filename, argv[a], sizeof(filename));
- filelen = strlen(filename);
-
- /* relative path checks, could do more tests here... */
-#ifdef WIN32
- /* Account for X:/ and X:\ - should be enough */
- if (filelen >= 3 && filename[1] == ':' && (filename[2] == '\\' || filename[2] == '/'))
- abs = 1;
-#else
- if (filelen >= 2 && filename[0] == '/')
- abs = 1 ;
-#endif
- if (!abs) {
- BLI_getwdN(cwd); /* incase the full path to the blend isnt used */
-
- if (cwd[0] == '\0') {
- printf(
- "Could not get the current working directory - $PWD for an unknown reason.\n\t"
- "Relative linked files will not load if the entire blend path is not used.\n\t"
- "The 'Play' button may also fail.\n"
- );
- } else {
- /* uses the blend path relative to cwd important for loading relative linked files.
- *
- * cwd should contain c:\ etc on win32 so the relbase can be NULL
- * relbase being NULL also prevents // being misunderstood as relative to the current
- * blend file which isnt a feature we want to use in this case since were dealing
- * with a path from the command line, rather then from inside Blender */
-
- BLI_make_file_string(NULL, filename, cwd, argv[a]);
- }
- }
+ BLI_convertstringcwd(filename);
if (G.background) {
int retval = BKE_read_file(filename, NULL);
@@ -855,7 +831,7 @@ static void mem_error_cb(char *errorStr)
fflush(stderr);
}
-void setCallbacks(void)
+static void setCallbacks(void)
{
/* Error output from the alloc routines: */
MEM_set_error_callback(mem_error_cb);
diff --git a/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp b/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp
index 7de3056e382..0d58810e156 100644
--- a/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp
+++ b/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp
@@ -79,6 +79,8 @@
#include "DNA_scene_types.h"
/***/
+#include "GPU_extensions.h"
+
#ifdef __cplusplus
extern "C" {
#endif
@@ -90,33 +92,10 @@ void update_for_newframe();
static BlendFileData *load_game_data(char *filename) {
BlendReadError error;
- //this doesn't work anymore for relative paths, so use BLO_read_from_memory instead
- //BlendFileData *bfd= BLO_read_from_file(filename, &error);
- FILE* file = fopen(filename,"rb");
- BlendFileData *bfd = 0;
- if (file)
- {
- fseek(file, 0L, SEEK_END);
- int len= ftell(file);
- fseek(file, 0L, SEEK_SET);
- char* filebuffer= new char[len];//MEM_mallocN(len, "text_buffer");
- int sizeread = fread(filebuffer,len,1,file);
- if (sizeread==1){
- bfd = BLO_read_from_memory(filebuffer, len, &error);
- } else {
- error = BRE_UNABLE_TO_READ;
- }
- fclose(file);
- // the memory is not released in BLO_read_from_memory, must do it here
- delete filebuffer;
- } else {
- error = BRE_UNABLE_TO_OPEN;
- }
-
+ BlendFileData *bfd= BLO_read_from_file(filename, &error);
if (!bfd) {
printf("Loading %s failed: %s\n", filename, BLO_bre_as_string(error));
}
-
return bfd;
}
@@ -139,7 +118,9 @@ extern "C" void StartKetsjiShell(struct ScrArea *area,
// Acquire Python's GIL (global interpreter lock)
// so we can safely run Python code and API calls
PyGILState_STATE gilstate = PyGILState_Ensure();
-
+
+ PyObject *pyGlobalDict = PyDict_New(); /* python utility storage, spans blend file loading */
+
bgl::InitExtensions(true);
do
@@ -157,7 +138,12 @@ extern "C" void StartKetsjiShell(struct ScrArea *area,
bool usemat = false, useglslmat = false;
if(GLEW_ARB_multitexture && GLEW_VERSION_1_1)
- usemat = (SYS_GetCommandLineInt(syshandle, "blender_material", 0) != 0);
+ usemat = (SYS_GetCommandLineInt(syshandle, "blender_material", 1) != 0);
+
+ if(GPU_extensions_minimum_support())
+ useglslmat = (SYS_GetCommandLineInt(syshandle, "blender_glsl_material", 1) != 0);
+ else if(G.fileflags & G_FILE_GAME_MAT_GLSL)
+ usemat = false;
// create the canvas, rasterizer and rendertools
RAS_ICanvas* canvas = new KX_BlenderCanvas(area);
@@ -184,6 +170,13 @@ extern "C" void StartKetsjiShell(struct ScrArea *area,
NG_NetworkDeviceInterface* networkdevice = new
NG_LoopBackNetworkDeviceInterface();
+ //
+ SYS_SystemHandle hSystem = SYS_GetSystem();
+ bool noaudio = SYS_GetCommandLineInt(hSystem,"noaudio",0);
+
+ if (noaudio)/*(noaudio) intrr: disable game engine audio (openal) */
+ SND_DeviceManager::SetDeviceType(snd_e_dummydevice);
+
// get an audiodevice
SND_DeviceManager::Subscribe();
SND_IAudioDevice* audiodevice = SND_DeviceManager::Instance();
@@ -212,6 +205,7 @@ extern "C" void StartKetsjiShell(struct ScrArea *area,
// some blender stuff
MT_CmMatrix4x4 projmat;
MT_CmMatrix4x4 viewmat;
+ float camzoom;
int i;
for (i = 0; i < 16; i++)
@@ -225,8 +219,13 @@ extern "C" void StartKetsjiShell(struct ScrArea *area,
projmat.setElem(i, projmat_linear[i]);
}
- float camzoom = (1.41421 + (v3d->camzoom / 50.0));
- camzoom *= camzoom;
+ if(v3d->persp==V3D_CAMOB) {
+ camzoom = (1.41421 + (v3d->camzoom / 50.0));
+ camzoom *= camzoom;
+ }
+ else
+ camzoom = 2.0;
+
camzoom = 4.0 / camzoom;
ketsjiengine->SetDrawType(v3d->drawtype);
@@ -307,6 +306,7 @@ extern "C" void StartKetsjiShell(struct ScrArea *area,
ketsjiengine->SetCameraOverrideUseOrtho((v3d->persp == V3D_ORTHO));
ketsjiengine->SetCameraOverrideProjectionMatrix(projmat);
ketsjiengine->SetCameraOverrideViewMatrix(viewmat);
+ ketsjiengine->SetCameraOverrideClipping(v3d->near, v3d->far);
}
// create a scene converter, create and convert the startingscene
@@ -315,24 +315,28 @@ extern "C" void StartKetsjiShell(struct ScrArea *area,
sceneconverter->addInitFromFrame=false;
if (always_use_expand_framing)
sceneconverter->SetAlwaysUseExpandFraming(true);
-
- if(usemat)
+
+ if(usemat && (G.fileflags & G_FILE_GAME_MAT))
sceneconverter->SetMaterials(true);
- if(useglslmat)
+ if(useglslmat && (G.fileflags & G_FILE_GAME_MAT_GLSL))
sceneconverter->SetGLSLMaterials(true);
KX_Scene* startscene = new KX_Scene(keyboarddevice,
mousedevice,
networkdevice,
audiodevice,
- startscenename);
+ startscenename,
+ blscene);
// some python things
PyObject* dictionaryobject = initGamePythonScripting("Ketsji", psl_Lowest);
ketsjiengine->SetPythonDictionary(dictionaryobject);
initRasterizer(rasterizer, canvas);
- PyObject *gameLogic = initGameLogic(startscene);
+ PyObject *gameLogic = initGameLogic(ketsjiengine, startscene);
+ PyDict_SetItemString(PyModule_GetDict(gameLogic), "globalDict", pyGlobalDict); // Same as importing the module.
+ PyObject *gameLogic_keys = PyDict_Keys(PyModule_GetDict(gameLogic));
PyDict_SetItemString(dictionaryobject, "GameLogic", gameLogic); // Same as importing the module.
+
initGameKeys();
initPythonConstraintBinding();
initMathutils();
@@ -362,6 +366,7 @@ extern "C" void StartKetsjiShell(struct ScrArea *area,
ketsjiengine->SetAnimFrameRate( (((double) blscene->r.frs_sec) / blscene->r.frs_sec_base) );
// the mainloop
+ printf("\nBlender Game Engine Started\n\n");
while (!exitrequested)
{
// first check if we want to exit
@@ -397,6 +402,7 @@ extern "C" void StartKetsjiShell(struct ScrArea *area,
mousedevice->ConvertBlenderEvent(event,val);
}
}
+ printf("\nBlender Game Engine Finished\n\n");
exitstring = ketsjiengine->GetExitString();
// when exiting the mainloop
@@ -406,7 +412,20 @@ extern "C" void StartKetsjiShell(struct ScrArea *area,
// inside the GameLogic dictionary when the python interpreter is finalized.
// which allows the scene to safely delete them :)
// see: (space.c)->start_game
- PyDict_Clear(PyModule_GetDict(gameLogic));
+
+ //PyDict_Clear(PyModule_GetDict(gameLogic));
+
+ // Keep original items, means python plugins will autocomplete members
+ int listIndex;
+ PyObject *gameLogic_keys_new = PyDict_Keys(PyModule_GetDict(gameLogic));
+ for (listIndex=0; listIndex < PyList_Size(gameLogic_keys_new); listIndex++) {
+ PyObject* item = PyList_GET_ITEM(gameLogic_keys_new, listIndex);
+ if (!PySequence_Contains(gameLogic_keys, item)) {
+ PyDict_DelItem( PyModule_GetDict(gameLogic), item);
+ }
+ }
+ Py_DECREF(gameLogic_keys_new);
+ gameLogic_keys_new = NULL;
ketsjiengine->StopEngine();
exitGamePythonScripting();
@@ -417,6 +436,9 @@ extern "C" void StartKetsjiShell(struct ScrArea *area,
delete sceneconverter;
sceneconverter = NULL;
}
+
+ Py_DECREF(gameLogic_keys);
+ gameLogic_keys = NULL;
}
// set the cursor back to normal
canvas->SetMouseState(RAS_ICanvas::MOUSE_NORMAL);
@@ -545,8 +567,6 @@ extern "C" void StartKetsjiShellSimulation(struct ScrArea *area,
// create the ketsjiengine
KX_KetsjiEngine* ketsjiengine = new KX_KetsjiEngine(kxsystem);
- int i;
-
Scene *blscene = NULL;
if (!bfd)
{
@@ -562,7 +582,7 @@ extern "C" void StartKetsjiShellSimulation(struct ScrArea *area,
} else {
blscene = bfd->curscene;
}
- int cframe,startFrame;
+ int cframe = 1, startFrame;
if (blscene)
{
cframe=blscene->r.cfra;
@@ -593,12 +613,14 @@ extern "C" void StartKetsjiShellSimulation(struct ScrArea *area,
mousedevice,
networkdevice,
audiodevice,
- startscenename);
+ startscenename,
+ blscene);
+
// some python things
PyObject* dictionaryobject = initGamePythonScripting("Ketsji", psl_Lowest);
ketsjiengine->SetPythonDictionary(dictionaryobject);
initRasterizer(rasterizer, canvas);
- PyObject *gameLogic = initGameLogic(startscene);
+ PyObject *gameLogic = initGameLogic(ketsjiengine, startscene);
PyDict_SetItemString(dictionaryobject, "GameLogic", gameLogic); // Same as importing the module
initGameKeys();
initPythonConstraintBinding();
diff --git a/source/gameengine/BlenderRoutines/CMakeLists.txt b/source/gameengine/BlenderRoutines/CMakeLists.txt
index 1d72fb9cde1..340a1ae310b 100644
--- a/source/gameengine/BlenderRoutines/CMakeLists.txt
+++ b/source/gameengine/BlenderRoutines/CMakeLists.txt
@@ -31,6 +31,7 @@ SET(INC
../../../intern/SoundSystem
../../../source/blender/misc
../../../source/blender/blenloader
+ ../../../source/blender/gpu
../../../extern/bullet2/src
../../../extern/solid
../../../extern/glew/include
diff --git a/source/gameengine/BlenderRoutines/KX_BlenderGL.cpp b/source/gameengine/BlenderRoutines/KX_BlenderGL.cpp
index da52be56d1b..669e7bd1b3f 100644
--- a/source/gameengine/BlenderRoutines/KX_BlenderGL.cpp
+++ b/source/gameengine/BlenderRoutines/KX_BlenderGL.cpp
@@ -26,7 +26,6 @@
* ***** END GPL LICENSE BLOCK *****
*/
-#include "GL/glew.h"
#include "KX_BlenderGL.h"
#ifdef HAVE_CONFIG_H
@@ -93,80 +92,6 @@ void BL_SwapBuffers()
myswapbuffers();
}
-void BL_RenderText(int mode,const char* textstr,int textlen,struct MTFace* tface,
- unsigned int *col,float v1[3],float v2[3],float v3[3],float v4[3])
-{
- Image* ima;
-
- if(mode & TF_BMFONT) {
- //char string[MAX_PROPSTRING];
- int characters, index, character;
- float centerx, centery, sizex, sizey, transx, transy, movex, movey, advance;
-
-// bProperty *prop;
-
- // string = "Frank van Beek";
-
- characters = textlen;
-
- ima = (struct Image*) tface->tpage;
- if (ima == NULL) {
- characters = 0;
- }
-
- /* When OBCOL flag is on the color is set in IndexPrimitives_3DText */
- if (tface->mode & TF_OBCOL) { /* Color has been set */
- col= NULL;
- } else {
- if(!col) glColor3f(1.0f, 1.0f, 1.0f);
- }
-
- glPushMatrix();
- for (index = 0; index < characters; index++) {
- // lets calculate offset stuff
- character = textstr[index];
-
- // space starts at offset 1
- // character = character - ' ' + 1;
-
- matrixGlyph((ImBuf *)ima->ibufs.first, character, & centerx, &centery, &sizex, &sizey, &transx, &transy, &movex, &movey, &advance);
-
- glBegin(GL_POLYGON);
- // printf(" %c %f %f %f %f\n", character, tface->uv[0][0], tface->uv[0][1], );
- // glTexCoord2f((tface->uv[0][0] - centerx) * sizex + transx, (tface->uv[0][1] - centery) * sizey + transy);
- glTexCoord2f((tface->uv[0][0] - centerx) * sizex + transx, (tface->uv[0][1] - centery) * sizey + transy);
-
- if(col) spack(col[0]);
- // glVertex3fv(v1);
- glVertex3f(sizex * v1[0] + movex, sizey * v1[1] + movey, v1[2]);
-
- glTexCoord2f((tface->uv[1][0] - centerx) * sizex + transx, (tface->uv[1][1] - centery) * sizey + transy);
- if(col) spack(col[1]);
- // glVertex3fv(v2);
- glVertex3f(sizex * v2[0] + movex, sizey * v2[1] + movey, v2[2]);
-
- glTexCoord2f((tface->uv[2][0] - centerx) * sizex + transx, (tface->uv[2][1] - centery) * sizey + transy);
- if(col) spack(col[2]);
- // glVertex3fv(v3);
- glVertex3f(sizex * v3[0] + movex, sizey * v3[1] + movey, v3[2]);
-
- if(v4) {
- // glTexCoord2f((tface->uv[3][0] - centerx) * sizex + transx, 1.0 - (1.0 - tface->uv[3][1]) * sizey - transy);
- glTexCoord2f((tface->uv[3][0] - centerx) * sizex + transx, (tface->uv[3][1] - centery) * sizey + transy);
- if(col) spack(col[3]);
- // glVertex3fv(v4);
- glVertex3f(sizex * v4[0] + movex, sizey * v4[1] + movey, v4[2]);
- }
- glEnd();
-
- glTranslatef(advance, 0.0, 0.0);
- }
- glPopMatrix();
-
- }
-}
-
-
void DisableForText()
{
if(glIsEnabled(GL_BLEND)) glDisable(GL_BLEND);
diff --git a/source/gameengine/BlenderRoutines/KX_BlenderGL.h b/source/gameengine/BlenderRoutines/KX_BlenderGL.h
index c8e0d47afb6..b891a7343c2 100644
--- a/source/gameengine/BlenderRoutines/KX_BlenderGL.h
+++ b/source/gameengine/BlenderRoutines/KX_BlenderGL.h
@@ -46,9 +46,6 @@ void BL_HideMouse();
void BL_NormalMouse();
void BL_WaitMouse();
-void BL_RenderText(int mode,const char* textstr,int textlen,struct MTFace* tface,
- unsigned int *col,float v1[3],float v2[3],float v3[3],float v4[3]);
-
void BL_print_gamedebug_line(char* text, int xco, int yco, int width, int height);
void BL_print_gamedebug_line_padded(char* text, int xco, int yco, int width, int height);
diff --git a/source/gameengine/BlenderRoutines/KX_BlenderRenderTools.cpp b/source/gameengine/BlenderRoutines/KX_BlenderRenderTools.cpp
index e4eff163d5b..1797d6c1a0f 100644
--- a/source/gameengine/BlenderRoutines/KX_BlenderRenderTools.cpp
+++ b/source/gameengine/BlenderRoutines/KX_BlenderRenderTools.cpp
@@ -26,8 +26,6 @@
* ***** END GPL LICENSE BLOCK *****
*/
-#include "KX_BlenderRenderTools.h"
-
#include "GL/glew.h"
#include "RAS_IRenderTools.h"
@@ -36,23 +34,22 @@
#include "RAS_ICanvas.h"
#include "RAS_GLExtensionManager.h"
-// next two includes/dependencies come from the shadow feature
-// it needs the gameobject and the sumo physics scene for a raycast
#include "KX_GameObject.h"
-
#include "KX_PolygonMaterial.h"
#include "KX_BlenderMaterial.h"
+#include "KX_RayCast.h"
+#include "KX_IPhysicsController.h"
-#include "Value.h"
+#include "PHY_IPhysicsEnvironment.h"
-#include "KX_BlenderGL.h" // for text printing
#include "STR_String.h"
-#include "RAS_BucketManager.h" // for polymaterial (needed for textprinting)
-#include "KX_RayCast.h"
-#include "KX_IPhysicsController.h"
-#include "PHY_IPhysicsEnvironment.h"
-#include "KX_Scene.h"
+#include "GPU_draw.h"
+
+#include "KX_BlenderGL.h" // for text printing
+#include "KX_BlenderRenderTools.h"
+
+unsigned int KX_BlenderRenderTools::m_numgllights;
KX_BlenderRenderTools::KX_BlenderRenderTools()
{
@@ -61,81 +58,98 @@ KX_BlenderRenderTools::KX_BlenderRenderTools()
m_numgllights = 8;
}
-/**
-ProcessLighting performs lighting on objects. the layer is a bitfield that contains layer information.
-There are 20 'official' layers in blender.
-A light is applied on an object only when they are in the same layer.
-OpenGL has a maximum of 8 lights (simultaneous), so 20 * 8 lights are possible in a scene.
-*/
+KX_BlenderRenderTools::~KX_BlenderRenderTools()
+{
+}
-int KX_BlenderRenderTools::ProcessLighting(int layer)
+void KX_BlenderRenderTools::BeginFrame(RAS_IRasterizer* rasty)
{
-
- int result = false;
+ m_clientobject = NULL;
+ m_lastlightlayer = -1;
+ m_lastlighting = false;
+ DisableOpenGLLights();
+}
- if (layer < 0)
- {
- DisableOpenGLLights();
- result = false;
- } else
+void KX_BlenderRenderTools::EndFrame(RAS_IRasterizer* rasty)
+{
+}
+
+/* ProcessLighting performs lighting on objects. the layer is a bitfield that
+ * contains layer information. There are 20 'official' layers in blender. A
+ * light is applied on an object only when they are in the same layer. OpenGL
+ * has a maximum of 8 lights (simultaneous), so 20 * 8 lights are possible in
+ * a scene. */
+
+void KX_BlenderRenderTools::ProcessLighting(int layer, const MT_Transform& viewmat)
+{
+ if(m_lastlightlayer == layer)
+ return;
+
+ m_lastlightlayer = layer;
+
+ bool enable = false;
+
+ if (layer >= 0)
{
if (m_clientobject)
{
if (layer == RAS_LIGHT_OBJECT_LAYER)
- {
layer = static_cast<KX_GameObject*>(m_clientobject)->GetLayer();
- }
- if (applyLights(layer))
- {
- EnableOpenGLLights();
- result = true;
- } else
- {
- DisableOpenGLLights();
- result = false;
- }
+
+ enable = applyLights(layer, viewmat);
}
}
- return result;
-
-
+
+ if(enable)
+ EnableOpenGLLights();
+ else
+ DisableOpenGLLights();
}
+void KX_BlenderRenderTools::EnableOpenGLLights()
+{
+ if(m_lastlighting == true)
+ return;
-void KX_BlenderRenderTools::BeginFrame(RAS_IRasterizer* rasty)
+ glEnable(GL_LIGHTING);
+ glEnable(GL_COLOR_MATERIAL);
+
+ glColorMaterial(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE);
+ glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, true);
+ if (GLEW_EXT_separate_specular_color || GLEW_VERSION_1_2)
+ glLightModeli(GL_LIGHT_MODEL_COLOR_CONTROL, GL_SEPARATE_SPECULAR_COLOR);
+
+ m_lastlighting = true;
+}
+
+void KX_BlenderRenderTools::DisableOpenGLLights()
{
- m_clientobject = NULL;
- m_lastblenderobject = NULL;
- m_lastblenderlights = false;
- m_lastlayer = -1;
- m_lastlighting = false;
- m_modified = true;
- DisableOpenGLLights();
+ if(m_lastlighting == false)
+ return;
+ glDisable(GL_LIGHTING);
+ glDisable(GL_COLOR_MATERIAL);
+ m_lastlighting = false;
}
-void KX_BlenderRenderTools::SetClientObject(void* obj)
+
+void KX_BlenderRenderTools::SetClientObject(RAS_IRasterizer *rasty, void* obj)
{
if (m_clientobject != obj)
{
- if (obj == NULL || !((KX_GameObject*)obj)->IsNegativeScaling())
- {
- glFrontFace(GL_CCW);
- } else
- {
- glFrontFace(GL_CW);
- }
+ bool ccw = (obj == NULL || !((KX_GameObject*)obj)->IsNegativeScaling());
+ rasty->SetFrontFace(ccw);
+
m_clientobject = obj;
- m_modified = true;
}
}
-bool KX_BlenderRenderTools::RayHit(KX_ClientObjectInfo* client, MT_Point3& hit_point, MT_Vector3& hit_normal, void * const data)
+bool KX_BlenderRenderTools::RayHit(KX_ClientObjectInfo* client, KX_RayCast* result, void * const data)
{
double* const oglmatrix = (double* const) data;
- MT_Point3 resultpoint(hit_point);
- MT_Vector3 resultnormal(hit_normal);
+ MT_Point3 resultpoint(result->m_hitPoint);
+ MT_Vector3 resultnormal(result->m_hitNormal);
MT_Vector3 left(oglmatrix[0],oglmatrix[1],oglmatrix[2]);
MT_Vector3 dir = -(left.cross(resultnormal)).safe_normalized();
left = (dir.cross(resultnormal)).safe_normalized();
@@ -182,7 +196,7 @@ void KX_BlenderRenderTools::applyTransform(RAS_IRasterizer* rasty,double* oglmat
MT_Vector3 dir = (campos - objpos).safe_normalized();
MT_Vector3 up(0,0,1.0);
- KX_GameObject* gameobj = (KX_GameObject*) this->m_clientobject;
+ KX_GameObject* gameobj = (KX_GameObject*)m_clientobject;
// get scaling of halo object
MT_Vector3 size = gameobj->GetSGNode()->GetLocalScale();
@@ -218,7 +232,7 @@ void KX_BlenderRenderTools::applyTransform(RAS_IRasterizer* rasty,double* oglmat
{
// shadow must be cast to the ground, physics system needed here!
MT_Point3 frompoint(oglmatrix[12],oglmatrix[13],oglmatrix[14]);
- KX_GameObject *gameobj = (KX_GameObject*) this->m_clientobject;
+ KX_GameObject *gameobj = (KX_GameObject*)m_clientobject;
MT_Vector3 direction = MT_Vector3(0,0,-1);
direction.normalize();
@@ -236,9 +250,8 @@ void KX_BlenderRenderTools::applyTransform(RAS_IRasterizer* rasty,double* oglmat
if (parent)
parent->Release();
- MT_Point3 resultpoint;
- MT_Vector3 resultnormal;
- if (!KX_RayCast::RayTest(physics_controller, physics_environment, frompoint, topoint, resultpoint, resultnormal, KX_RayCast::Callback<KX_BlenderRenderTools>(this, oglmatrix)))
+ KX_RayCast::Callback<KX_BlenderRenderTools> callback(this, physics_controller, oglmatrix);
+ if (!KX_RayCast::RayTest(physics_environment, frompoint, topoint, callback))
{
// couldn't find something to cast the shadow on...
glMultMatrixd(oglmatrix);
@@ -253,13 +266,29 @@ void KX_BlenderRenderTools::applyTransform(RAS_IRasterizer* rasty,double* oglmat
}
-/**
-Render Text renders text into a (series of) polygon, using a texture font,
-Each character consists of one polygon (one quad or two triangles)
-*/
-void KX_BlenderRenderTools::RenderText(int mode,RAS_IPolyMaterial* polymat,float v1[3],float v2[3],float v3[3],float v4[3])
+void KX_BlenderRenderTools::RenderText2D(RAS_TEXT_RENDER_MODE mode,
+ const char* text,
+ int xco,
+ int yco,
+ int width,
+ int height)
+{
+ STR_String tmpstr(text);
+
+ if(mode == RAS_IRenderTools::RAS_TEXT_PADDED)
+ BL_print_gamedebug_line_padded(tmpstr.Ptr(), xco, yco, width, height);
+ else
+ BL_print_gamedebug_line(tmpstr.Ptr(), xco, yco, width, height);
+}
+
+/* Render Text renders text into a (series of) polygon, using a texture font,
+ * Each character consists of one polygon (one quad or two triangles) */
+
+void KX_BlenderRenderTools::RenderText(
+ int mode,
+ RAS_IPolyMaterial* polymat,
+ float v1[3], float v2[3], float v3[3], float v4[3], int glattrib)
{
-
STR_String mytext = ((CValue*)m_clientobject)->GetPropertyText("Text");
const unsigned int flag = polymat->GetFlag();
@@ -276,67 +305,9 @@ void KX_BlenderRenderTools::RenderText(int mode,RAS_IPolyMaterial* polymat,float
col = blenderpoly->GetMCol();
}
- BL_RenderText( mode,mytext,mytext.Length(),tface,col,v1,v2,v3,v4);
-
-}
-
-
-
-KX_BlenderRenderTools::~KX_BlenderRenderTools()
-{
-};
-
-
-void KX_BlenderRenderTools::EndFrame(RAS_IRasterizer* rasty)
-{
+ GPU_render_text(tface, mode, mytext, mytext.Length(), col, v1, v2, v3, v4, glattrib);
}
-
-
-void KX_BlenderRenderTools::DisableOpenGLLights()
-{
- glDisable(GL_LIGHTING);
- glDisable(GL_COLOR_MATERIAL);
-}
-
-
-void KX_BlenderRenderTools::EnableOpenGLLights()
-{
- glEnable(GL_LIGHTING);
-
- glEnable(GL_COLOR_MATERIAL);
- glColorMaterial(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE);
- glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, true);
- if (GLEW_EXT_separate_specular_color || GLEW_VERSION_1_2)
- glLightModeli(GL_LIGHT_MODEL_COLOR_CONTROL, GL_SEPARATE_SPECULAR_COLOR);
-
-}
-
-
-/**
- * Rendering text using 2D bitmap functionality.
- */
-void KX_BlenderRenderTools::RenderText2D(RAS_TEXT_RENDER_MODE mode,
- const char* text,
- int xco,
- int yco,
- int width,
- int height)
-{
- switch (mode) {
- case RAS_IRenderTools::RAS_TEXT_PADDED: {
- STR_String tmpstr(text);
- BL_print_gamedebug_line_padded(tmpstr.Ptr(),xco,yco,width,height);
- break;
- }
- default: {
- STR_String tmpstr(text);
- BL_print_gamedebug_line(tmpstr.Ptr(),xco,yco,width,height);
- }
- }
-}
-
-
void KX_BlenderRenderTools::PushMatrix()
{
@@ -349,14 +320,13 @@ void KX_BlenderRenderTools::PopMatrix()
}
-
-int KX_BlenderRenderTools::applyLights(int objectlayer)
+int KX_BlenderRenderTools::applyLights(int objectlayer, const MT_Transform& viewmat)
{
-// taken from blender source, incompatibility between Blender Object / GameObject
-
+ // taken from blender source, incompatibility between Blender Object / GameObject
+ float glviewmat[16];
unsigned int count;
float vec[4];
-
+
vec[3]= 1.0;
for(count=0; count<m_numgllights; count++)
@@ -364,9 +334,11 @@ int KX_BlenderRenderTools::applyLights(int objectlayer)
//std::vector<struct RAS_LightObject*> m_lights;
std::vector<struct RAS_LightObject*>::iterator lit = m_lights.begin();
+
+ viewmat.getValue(glviewmat);
glPushMatrix();
- glLoadMatrixf(m_viewmat);
+ glLoadMatrixf(glviewmat);
for (lit = m_lights.begin(), count = 0; !(lit==m_lights.end()) && count < m_numgllights; ++lit)
{
RAS_LightObject* lightdata = (*lit);
@@ -434,7 +406,6 @@ int KX_BlenderRenderTools::applyLights(int objectlayer)
glEnable((GLenum)(GL_LIGHT0+count));
count++;
-
}
}
glPopMatrix();
@@ -443,22 +414,6 @@ int KX_BlenderRenderTools::applyLights(int objectlayer)
}
-
-
-RAS_IPolyMaterial* KX_BlenderRenderTools::CreateBlenderPolyMaterial(
- const STR_String &texname,
- bool ba,const STR_String& matname,int tile,int tilexrep,int tileyrep,int mode,bool transparant,bool zsort, int lightlayer
- ,bool bIsTriangle,void* clientobject,void* tface)
-{
- assert(!"Deprecated");
-/* return new KX_BlenderPolyMaterial(
-
- texname,
- ba,matname,tile,tilexrep,tileyrep,mode,transparant,zsort, lightlayer
- ,bIsTriangle,clientobject,(struct MTFace*)tface);*/
- return NULL;
-}
-
void KX_BlenderRenderTools::MotionBlur(RAS_IRasterizer* rasterizer)
{
int state = rasterizer->GetMotionBlurState();
@@ -492,4 +447,3 @@ void KX_BlenderRenderTools::Render2DFilters(RAS_ICanvas* canvas)
m_filtermanager.RenderFilters(canvas);
}
-unsigned int KX_BlenderRenderTools::m_numgllights;
diff --git a/source/gameengine/BlenderRoutines/KX_BlenderRenderTools.h b/source/gameengine/BlenderRoutines/KX_BlenderRenderTools.h
index 8abce1b8c3e..a7618462c9b 100644
--- a/source/gameengine/BlenderRoutines/KX_BlenderRenderTools.h
+++ b/source/gameengine/BlenderRoutines/KX_BlenderRenderTools.h
@@ -26,6 +26,7 @@
*
* ***** END GPL LICENSE BLOCK *****
*/
+
#ifndef __KX_BLENDERRENDERTOOLS
#define __KX_BLENDERRENDERTOOLS
@@ -37,67 +38,54 @@
#include "RAS_IRenderTools.h"
struct KX_ClientObjectInfo;
+class KX_RayCast;
-/**
-BlenderRenderTools are a set of tools to apply 2D/3D graphics effects, which are not
-part of the (polygon) Rasterizer.
-Effects like 2D text, 3D (polygon) text, lighting.
-*/
+/* BlenderRenderTools are a set of tools to apply 2D/3D graphics effects, which
+ * are not part of the (polygon) Rasterizer. Effects like 2D text, 3D (polygon)
+ * text, lighting.
+ *
+ * Most of this code is duplicated in GPC_RenderTools, so this should be
+ * moved to some common location to avoid duplication. */
class KX_BlenderRenderTools : public RAS_IRenderTools
{
- bool m_lastblenderlights;
- void* m_lastblenderobject;
- int m_lastlayer;
+ int m_lastlightlayer;
bool m_lastlighting;
static unsigned int m_numgllights;
-
-
+
public:
-
KX_BlenderRenderTools();
virtual ~KX_BlenderRenderTools();
- virtual void EndFrame(class RAS_IRasterizer* rasty);
- virtual void BeginFrame(class RAS_IRasterizer* rasty);
- void DisableOpenGLLights();
+ void EndFrame(RAS_IRasterizer* rasty);
+ void BeginFrame(RAS_IRasterizer* rasty);
+
void EnableOpenGLLights();
- int ProcessLighting(int layer);
+ void DisableOpenGLLights();
+ void ProcessLighting(int layer, const MT_Transform& viewmat);
- virtual void RenderText2D(RAS_TEXT_RENDER_MODE mode,
+ void RenderText2D(RAS_TEXT_RENDER_MODE mode,
const char* text,
int xco,
int yco,
int width,
int height);
- virtual void RenderText(int mode,
+ void RenderText(int mode,
class RAS_IPolyMaterial* polymat,
float v1[3],
float v2[3],
float v3[3],
- float v4[3]);
- void applyTransform(class RAS_IRasterizer* rasty,
- double* oglmatrix,
- int objectdrawmode );
- int applyLights(int objectlayer);
- virtual void PushMatrix();
- virtual void PopMatrix();
-
- virtual class RAS_IPolyMaterial* CreateBlenderPolyMaterial(const STR_String &texname,
- bool ba,
- const STR_String& matname,
- int tile,
- int tilexrep,
- int tileyrep,
- int mode,
- bool transparant,
- bool zsort,
- int lightlayer,
- bool bIsTriangle,
- void* clientobject,
- void* tface);
-
- bool RayHit(KX_ClientObjectInfo* client, MT_Point3& hit_point, MT_Vector3& hit_normal, void * const data);
+ float v4[3],
+ int glattrib);
+
+ void applyTransform(RAS_IRasterizer* rasty, double* oglmatrix, int objectdrawmode);
+ int applyLights(int objectlayer, const MT_Transform& viewmat);
+
+ void PushMatrix();
+ void PopMatrix();
+
+ bool RayHit(KX_ClientObjectInfo* client, class KX_RayCast* result, void * const data);
+ bool NeedRayCast(KX_ClientObjectInfo*) { return true; }
virtual void MotionBlur(RAS_IRasterizer* rasterizer);
@@ -105,8 +93,7 @@ public:
virtual void Render2DFilters(RAS_ICanvas* canvas);
- virtual void SetClientObject(void* obj);
-
+ virtual void SetClientObject(RAS_IRasterizer *rasty, void* obj);
};
#endif //__KX_BLENDERRENDERTOOLS
diff --git a/source/gameengine/BlenderRoutines/Makefile b/source/gameengine/BlenderRoutines/Makefile
index a7394158a20..4b9a2a3af17 100644
--- a/source/gameengine/BlenderRoutines/Makefile
+++ b/source/gameengine/BlenderRoutines/Makefile
@@ -54,6 +54,7 @@ CPPFLAGS += -I../../blender/blenkernel
CPPFLAGS += -I../../blender/render/extern/include
CPPFLAGS += -I../../blender/blenloader
CPPFLAGS += -I../../blender/blenkernel
+CPPFLAGS += -I../../blender/gpu
CPPFLAGS += -I../Converter
CPPFLAGS += -I../Expressions
CPPFLAGS += -I../GameLogic
@@ -72,9 +73,5 @@ ifeq ($(OS),windows)
CPPFLAGS += -I../../blender
endif
-ifeq ($(WITH_BF_GLEXT),true)
- CPPFLAGS += -DWITH_GLEXT
-endif
-
CPPFLAGS += -I$(NAN_PYTHON)/include/python$(NAN_PYTHON_VERSION)
diff --git a/source/gameengine/BlenderRoutines/SConscript b/source/gameengine/BlenderRoutines/SConscript
index 327f4798e04..78adbc83d9b 100644
--- a/source/gameengine/BlenderRoutines/SConscript
+++ b/source/gameengine/BlenderRoutines/SConscript
@@ -15,7 +15,7 @@ incs += ' #source/gameengine/SceneGraph #source/gameengine/Physics/common'
incs += ' #source/gameengine/Physics/Bullet #source/gameengine/Physics/Sumo'
incs += ' #source/gameengine/Physics/Sumo/Fuzzics/include #source/gameengine/Network/LoopBackNetwork'
incs += ' #intern/SoundSystem #source/blender/misc #source/blender/blenloader'
-incs += ' #extern/glew/include'
+incs += ' #extern/glew/include #source/blender/gpu'
incs += ' ' + env['BF_PYTHON_INC']
incs += ' ' + env['BF_SOLID_INC']
@@ -26,7 +26,4 @@ cxxflags = []
if env['OURPLATFORM']=='win32-vc':
cxxflags.append ('/GR')
-if env['WITH_BF_GLEXT'] == 1:
- env['CPPFLAGS'].append('-DWITH_GLEXT')
-
env.BlenderLib ( 'bf_bloutines', sources, Split(incs), [], libtype=['game', 'game2', 'player'], priority=[0, 0, 55] , compileflags=cxxflags)
diff --git a/source/gameengine/Converter/BL_ActionActuator.cpp b/source/gameengine/Converter/BL_ActionActuator.cpp
index d8b2e063a9d..4d748948c27 100644
--- a/source/gameengine/Converter/BL_ActionActuator.cpp
+++ b/source/gameengine/Converter/BL_ActionActuator.cpp
@@ -50,6 +50,7 @@
#include "MT_Matrix4x4.h"
#include "BKE_utildefines.h"
#include "FloatValue.h"
+#include "PyObjectPlus.h"
#ifdef HAVE_CONFIG_H
#include <config.h>
@@ -58,11 +59,11 @@
BL_ActionActuator::~BL_ActionActuator()
{
if (m_pose)
- free_pose(m_pose);
+ game_free_pose(m_pose);
if (m_userpose)
- free_pose(m_userpose);
+ game_free_pose(m_userpose);
if (m_blendpose)
- free_pose(m_blendpose);
+ game_free_pose(m_blendpose);
}
void BL_ActionActuator::ProcessReplica(){
@@ -151,6 +152,8 @@ bool BL_ActionActuator::Update(double curtime, bool frame)
bool apply=true;
int priority;
float newweight;
+
+ curtime -= KX_KetsjiEngine::GetSuspendedDelta();
// result = true if animation has to be continued, false if animation stops
// maybe there are events for us in the queue !
@@ -445,28 +448,28 @@ PyParentObject BL_ActionActuator::Parents[] = {
};
PyMethodDef BL_ActionActuator::Methods[] = {
- {"setAction", (PyCFunction) BL_ActionActuator::sPySetAction, METH_VARARGS, SetAction_doc},
- {"setStart", (PyCFunction) BL_ActionActuator::sPySetStart, METH_VARARGS, SetStart_doc},
- {"setEnd", (PyCFunction) BL_ActionActuator::sPySetEnd, METH_VARARGS, SetEnd_doc},
- {"setBlendin", (PyCFunction) BL_ActionActuator::sPySetBlendin, METH_VARARGS, SetBlendin_doc},
- {"setPriority", (PyCFunction) BL_ActionActuator::sPySetPriority, METH_VARARGS, SetPriority_doc},
- {"setFrame", (PyCFunction) BL_ActionActuator::sPySetFrame, METH_VARARGS, SetFrame_doc},
- {"setProperty", (PyCFunction) BL_ActionActuator::sPySetProperty, METH_VARARGS, SetProperty_doc},
- {"setFrameProperty", (PyCFunction) BL_ActionActuator::sPySetFrameProperty, METH_VARARGS, SetFrameProperty_doc},
- {"setBlendtime", (PyCFunction) BL_ActionActuator::sPySetBlendtime, METH_VARARGS, SetBlendtime_doc},
-
- {"getAction", (PyCFunction) BL_ActionActuator::sPyGetAction, METH_VARARGS, GetAction_doc},
- {"getStart", (PyCFunction) BL_ActionActuator::sPyGetStart, METH_VARARGS, GetStart_doc},
- {"getEnd", (PyCFunction) BL_ActionActuator::sPyGetEnd, METH_VARARGS, GetEnd_doc},
- {"getBlendin", (PyCFunction) BL_ActionActuator::sPyGetBlendin, METH_VARARGS, GetBlendin_doc},
- {"getPriority", (PyCFunction) BL_ActionActuator::sPyGetPriority, METH_VARARGS, GetPriority_doc},
- {"getFrame", (PyCFunction) BL_ActionActuator::sPyGetFrame, METH_VARARGS, GetFrame_doc},
- {"getProperty", (PyCFunction) BL_ActionActuator::sPyGetProperty, METH_VARARGS, GetProperty_doc},
- {"getFrameProperty", (PyCFunction) BL_ActionActuator::sPyGetFrameProperty, METH_VARARGS, GetFrameProperty_doc},
- {"setChannel", (PyCFunction) BL_ActionActuator::sPySetChannel, METH_VARARGS, SetChannel_doc},
+ {"setAction", (PyCFunction) BL_ActionActuator::sPySetAction, METH_VARARGS, (PY_METHODCHAR)SetAction_doc},
+ {"setStart", (PyCFunction) BL_ActionActuator::sPySetStart, METH_VARARGS, (PY_METHODCHAR)SetStart_doc},
+ {"setEnd", (PyCFunction) BL_ActionActuator::sPySetEnd, METH_VARARGS, (PY_METHODCHAR)SetEnd_doc},
+ {"setBlendin", (PyCFunction) BL_ActionActuator::sPySetBlendin, METH_VARARGS, (PY_METHODCHAR)SetBlendin_doc},
+ {"setPriority", (PyCFunction) BL_ActionActuator::sPySetPriority, METH_VARARGS, (PY_METHODCHAR)SetPriority_doc},
+ {"setFrame", (PyCFunction) BL_ActionActuator::sPySetFrame, METH_VARARGS, (PY_METHODCHAR)SetFrame_doc},
+ {"setProperty", (PyCFunction) BL_ActionActuator::sPySetProperty, METH_VARARGS, (PY_METHODCHAR)SetProperty_doc},
+ {"setFrameProperty", (PyCFunction) BL_ActionActuator::sPySetFrameProperty, METH_VARARGS, (PY_METHODCHAR)SetFrameProperty_doc},
+ {"setBlendtime", (PyCFunction) BL_ActionActuator::sPySetBlendtime, METH_VARARGS, (PY_METHODCHAR)SetBlendtime_doc},
+
+ {"getAction", (PyCFunction) BL_ActionActuator::sPyGetAction, METH_VARARGS, (PY_METHODCHAR)GetAction_doc},
+ {"getStart", (PyCFunction) BL_ActionActuator::sPyGetStart, METH_VARARGS, (PY_METHODCHAR)GetStart_doc},
+ {"getEnd", (PyCFunction) BL_ActionActuator::sPyGetEnd, METH_VARARGS, (PY_METHODCHAR)GetEnd_doc},
+ {"getBlendin", (PyCFunction) BL_ActionActuator::sPyGetBlendin, METH_VARARGS, (PY_METHODCHAR)GetBlendin_doc},
+ {"getPriority", (PyCFunction) BL_ActionActuator::sPyGetPriority, METH_VARARGS, (PY_METHODCHAR)GetPriority_doc},
+ {"getFrame", (PyCFunction) BL_ActionActuator::sPyGetFrame, METH_VARARGS, (PY_METHODCHAR)GetFrame_doc},
+ {"getProperty", (PyCFunction) BL_ActionActuator::sPyGetProperty, METH_VARARGS, (PY_METHODCHAR)GetProperty_doc},
+ {"getFrameProperty", (PyCFunction) BL_ActionActuator::sPyGetFrameProperty, METH_VARARGS, (PY_METHODCHAR)GetFrameProperty_doc},
+ {"setChannel", (PyCFunction) BL_ActionActuator::sPySetChannel, METH_VARARGS, (PY_METHODCHAR)SetChannel_doc},
// {"getChannel", (PyCFunction) BL_ActionActuator::sPyGetChannel, METH_VARARGS},
- {"getType", (PyCFunction) BL_ActionActuator::sPyGetType, METH_VARARGS, GetType_doc},
- {"setType", (PyCFunction) BL_ActionActuator::sPySetType, METH_VARARGS, SetType_doc},
+ {"getType", (PyCFunction) BL_ActionActuator::sPyGetType, METH_VARARGS, (PY_METHODCHAR)GetType_doc},
+ {"setType", (PyCFunction) BL_ActionActuator::sPySetType, METH_VARARGS, (PY_METHODCHAR)SetType_doc},
{"getContinue", (PyCFunction) BL_ActionActuator::sPyGetContinue, METH_NOARGS, 0},
{"setContinue", (PyCFunction) BL_ActionActuator::sPySetContinue, METH_O, 0},
{NULL,NULL} //Sentinel
@@ -477,7 +480,7 @@ PyObject* BL_ActionActuator::_getattr(const STR_String& attr) {
}
/* setStart */
-char BL_ActionActuator::GetAction_doc[] =
+const char BL_ActionActuator::GetAction_doc[] =
"getAction()\n"
"\tReturns a string containing the name of the current action.\n";
@@ -491,7 +494,7 @@ PyObject* BL_ActionActuator::PyGetAction(PyObject* self,
}
/* getProperty */
-char BL_ActionActuator::GetProperty_doc[] =
+const char BL_ActionActuator::GetProperty_doc[] =
"getProperty()\n"
"\tReturns the name of the property to be used in FromProp mode.\n";
@@ -506,7 +509,7 @@ PyObject* BL_ActionActuator::PyGetProperty(PyObject* self,
}
/* getProperty */
-char BL_ActionActuator::GetFrameProperty_doc[] =
+const char BL_ActionActuator::GetFrameProperty_doc[] =
"getFrameProperty()\n"
"\tReturns the name of the property, that is set to the current frame number.\n";
@@ -521,7 +524,7 @@ PyObject* BL_ActionActuator::PyGetFrameProperty(PyObject* self,
}
/* getFrame */
-char BL_ActionActuator::GetFrame_doc[] =
+const char BL_ActionActuator::GetFrame_doc[] =
"getFrame()\n"
"\tReturns the current frame number.\n";
@@ -536,7 +539,7 @@ PyObject* BL_ActionActuator::PyGetFrame(PyObject* self,
}
/* getEnd */
-char BL_ActionActuator::GetEnd_doc[] =
+const char BL_ActionActuator::GetEnd_doc[] =
"getEnd()\n"
"\tReturns the last frame of the action.\n";
@@ -551,7 +554,7 @@ PyObject* BL_ActionActuator::PyGetEnd(PyObject* self,
}
/* getStart */
-char BL_ActionActuator::GetStart_doc[] =
+const char BL_ActionActuator::GetStart_doc[] =
"getStart()\n"
"\tReturns the starting frame of the action.\n";
@@ -566,7 +569,7 @@ PyObject* BL_ActionActuator::PyGetStart(PyObject* self,
}
/* getBlendin */
-char BL_ActionActuator::GetBlendin_doc[] =
+const char BL_ActionActuator::GetBlendin_doc[] =
"getBlendin()\n"
"\tReturns the number of interpolation animation frames to be\n"
"\tgenerated when this actuator is triggered.\n";
@@ -582,7 +585,7 @@ PyObject* BL_ActionActuator::PyGetBlendin(PyObject* self,
}
/* getPriority */
-char BL_ActionActuator::GetPriority_doc[] =
+const char BL_ActionActuator::GetPriority_doc[] =
"getPriority()\n"
"\tReturns the priority for this actuator. Actuators with lower\n"
"\tPriority numbers will override actuators with higher numbers.\n";
@@ -598,7 +601,7 @@ PyObject* BL_ActionActuator::PyGetPriority(PyObject* self,
}
/* setAction */
-char BL_ActionActuator::SetAction_doc[] =
+const char BL_ActionActuator::SetAction_doc[] =
"setAction(action, (reset))\n"
"\t - action : The name of the action to set as the current action.\n"
"\t - reset : Optional parameter indicating whether to reset the\n"
@@ -637,7 +640,7 @@ PyObject* BL_ActionActuator::PySetAction(PyObject* self,
}
/* setStart */
-char BL_ActionActuator::SetStart_doc[] =
+const char BL_ActionActuator::SetStart_doc[] =
"setStart(start)\n"
"\t - start : Specifies the starting frame of the animation.\n";
@@ -658,7 +661,7 @@ PyObject* BL_ActionActuator::PySetStart(PyObject* self,
}
/* setEnd */
-char BL_ActionActuator::SetEnd_doc[] =
+const char BL_ActionActuator::SetEnd_doc[] =
"setEnd(end)\n"
"\t - end : Specifies the ending frame of the animation.\n";
@@ -679,7 +682,7 @@ PyObject* BL_ActionActuator::PySetEnd(PyObject* self,
}
/* setBlendin */
-char BL_ActionActuator::SetBlendin_doc[] =
+const char BL_ActionActuator::SetBlendin_doc[] =
"setBlendin(blendin)\n"
"\t - blendin : Specifies the number of frames of animation to generate\n"
"\t when making transitions between actions.\n";
@@ -701,7 +704,7 @@ PyObject* BL_ActionActuator::PySetBlendin(PyObject* self,
}
/* setBlendtime */
-char BL_ActionActuator::SetBlendtime_doc[] =
+const char BL_ActionActuator::SetBlendtime_doc[] =
"setBlendtime(blendtime)\n"
"\t - blendtime : Allows the script to directly modify the internal timer\n"
"\t used when generating transitions between actions. This\n"
@@ -728,7 +731,7 @@ PyObject* BL_ActionActuator::PySetBlendtime(PyObject* self,
}
/* setPriority */
-char BL_ActionActuator::SetPriority_doc[] =
+const char BL_ActionActuator::SetPriority_doc[] =
"setPriority(priority)\n"
"\t - priority : Specifies the new priority. Actuators will lower\n"
"\t priority numbers will override actuators with higher\n"
@@ -751,7 +754,7 @@ PyObject* BL_ActionActuator::PySetPriority(PyObject* self,
}
/* setFrame */
-char BL_ActionActuator::SetFrame_doc[] =
+const char BL_ActionActuator::SetFrame_doc[] =
"setFrame(frame)\n"
"\t - frame : Specifies the new current frame for the animation\n";
@@ -776,7 +779,7 @@ PyObject* BL_ActionActuator::PySetFrame(PyObject* self,
}
/* setProperty */
-char BL_ActionActuator::SetProperty_doc[] =
+const char BL_ActionActuator::SetProperty_doc[] =
"setProperty(prop)\n"
"\t - prop : A string specifying the property name to be used in\n"
"\t FromProp playback mode.\n";
@@ -798,7 +801,7 @@ PyObject* BL_ActionActuator::PySetProperty(PyObject* self,
}
/* setFrameProperty */
-char BL_ActionActuator::SetFrameProperty_doc[] =
+const char BL_ActionActuator::SetFrameProperty_doc[] =
"setFrameProperty(prop)\n"
"\t - prop : A string specifying the property of the frame set up update.\n";
@@ -837,7 +840,7 @@ PyObject* BL_ActionActuator::PyGetChannel(PyObject* self,
*/
/* setChannel */
-char BL_ActionActuator::SetChannel_doc[] =
+const char BL_ActionActuator::SetChannel_doc[] =
"setChannel(channel, matrix)\n"
"\t - channel : A string specifying the name of the bone channel.\n"
"\t - matrix : A 4x4 matrix specifying the overriding transformation\n"
@@ -921,7 +924,7 @@ PyObject* BL_ActionActuator::PySetChannel(PyObject* self,
}
/* getType */
-char BL_ActionActuator::GetType_doc[] =
+const char BL_ActionActuator::GetType_doc[] =
"getType()\n"
"\tReturns the operation mode of the actuator.\n";
PyObject* BL_ActionActuator::PyGetType(PyObject* self,
@@ -931,7 +934,7 @@ PyObject* BL_ActionActuator::PyGetType(PyObject* self,
}
/* setType */
-char BL_ActionActuator::SetType_doc[] =
+const char BL_ActionActuator::SetType_doc[] =
"setType(mode)\n"
"\t - mode: Play (0), Flipper (2), LoopStop (3), LoopEnd (4) or Property (6)\n"
"\tSet the operation mode of the actuator.\n";
diff --git a/source/gameengine/Converter/BL_ArmatureObject.cpp b/source/gameengine/Converter/BL_ArmatureObject.cpp
index 09f1d9d4d87..d2001212f7d 100644
--- a/source/gameengine/Converter/BL_ArmatureObject.cpp
+++ b/source/gameengine/Converter/BL_ArmatureObject.cpp
@@ -45,7 +45,6 @@
#include <config.h>
#endif
-
BL_ArmatureObject::BL_ArmatureObject(
void* sgReplicationInfo,
SG_Callbacks callbacks,
@@ -53,15 +52,20 @@ BL_ArmatureObject::BL_ArmatureObject(
: KX_GameObject(sgReplicationInfo,callbacks),
m_objArma(armature),
- m_mrdPose(NULL),
- m_lastframe(0.),
+ m_framePose(NULL),
+ m_lastframe(0.0),
m_activeAct(NULL),
- m_activePriority(999)
+ m_activePriority(999),
+ m_lastapplyframe(0.0)
{
m_armature = get_armature(m_objArma);
- m_pose = m_objArma->pose;
-}
+ /* we make a copy of blender object's pose, and then always swap it with
+ * the original pose before calling into blender functions, to deal with
+ * replica's or other objects using the same blender object */
+ m_pose = NULL;
+ game_copy_pose(&m_pose, m_objArma->pose);
+}
CValue* BL_ArmatureObject::GetReplica()
{
@@ -78,34 +82,37 @@ void BL_ArmatureObject::ProcessReplica(BL_ArmatureObject *replica)
{
KX_GameObject::ProcessReplica(replica);
+ replica->m_pose = NULL;
+ game_copy_pose(&replica->m_pose, m_pose);
}
BL_ArmatureObject::~BL_ArmatureObject()
{
- if (m_mrdPose)
- free_pose(m_mrdPose);
+ if (m_pose)
+ game_free_pose(m_pose);
}
-/* note, you can only call this for exisiting Armature objects, and not mix it with other Armatures */
-/* there is only 1 unique Pose per Armature */
void BL_ArmatureObject::ApplyPose()
{
- if (m_pose) {
- // copy to armature object
- if (m_objArma->pose != m_pose)/* This should never happen but it does - Campbell */
- extract_pose_from_pose(m_objArma->pose, m_pose);
-
- // is this needed anymore?
- //if (!m_mrdPose)
- // copy_pose (&m_mrdPose, m_pose, 0);
- //else
- // extract_pose_from_pose(m_mrdPose, m_pose);
+ m_armpose = m_objArma->pose;
+ m_objArma->pose = m_pose;
+
+ if(m_lastapplyframe != m_lastframe) {
+ where_is_pose(m_objArma);
+ m_lastapplyframe = m_lastframe;
}
}
+void BL_ArmatureObject::RestorePose()
+{
+ m_objArma->pose = m_armpose;
+ m_armpose = NULL;
+}
+
void BL_ArmatureObject::SetPose(bPose *pose)
{
- m_pose = pose;
+ extract_pose_from_pose(m_pose, pose);
+ m_lastapplyframe = -1.0;
}
bool BL_ArmatureObject::SetActiveAction(BL_ActionActuator *act, short priority, double curtime)
@@ -114,10 +121,15 @@ bool BL_ArmatureObject::SetActiveAction(BL_ActionActuator *act, short priority,
m_activePriority = 9999;
m_lastframe= curtime;
m_activeAct = NULL;
+ // remember the pose at the start of the frame
+ m_framePose = m_pose;
}
if (priority<=m_activePriority)
{
+ if (priority<m_activePriority)
+ // this action overwrites the previous ones, start from initial pose to cancel their effects
+ m_pose = m_framePose;
if (m_activeAct && (m_activeAct!=act))
m_activeAct->SetBlendTime(0.0); /* Reset the blend timer */
m_activeAct = act;
@@ -149,13 +161,13 @@ void BL_ArmatureObject::GetPose(bPose **pose)
a crash and memory leakage when
&BL_ActionActuator::m_pose is freed
*/
- int copy_constraint_channels_hack = 1;
- copy_pose(pose, m_pose, copy_constraint_channels_hack);
+ game_copy_pose(pose, m_pose);
}
else {
if (*pose == m_pose)
// no need to copy if the pointers are the same
return;
+
extract_pose_from_pose(*pose, m_pose);
}
}
@@ -165,21 +177,10 @@ void BL_ArmatureObject::GetMRDPose(bPose **pose)
/* If the caller supplies a null pose, create a new one. */
/* Otherwise, copy the armature's pose channels into the caller-supplied pose */
- // is this needed anymore?
- //if (!m_mrdPose){
- // copy_pose (&m_mrdPose, m_pose, 0);
- //}
-
- if (!*pose) {
- // must duplicate the constraints too otherwise we have corruption in free_pose_channels()
- // because it will free the blender constraints.
- // Ideally, blender should rememeber that the constraints were not copied so that
- // free_pose_channels() would not free them.
- copy_pose(pose, m_objArma->pose, 1);
- }
+ if (!*pose)
+ game_copy_pose(pose, m_pose);
else
- extract_pose_from_pose(*pose, m_objArma->pose);
-
+ extract_pose_from_pose(*pose, m_pose);
}
short BL_ArmatureObject::GetActivePriority()
@@ -192,17 +193,17 @@ double BL_ArmatureObject::GetLastFrame()
return m_lastframe;
}
-bool BL_ArmatureObject::GetBoneMatrix(Bone* bone, MT_Matrix4x4& matrix) const
+bool BL_ArmatureObject::GetBoneMatrix(Bone* bone, MT_Matrix4x4& matrix)
{
- Object* par_arma = m_objArma;
- where_is_pose(par_arma);
- bPoseChannel *pchan= get_pose_channel(par_arma->pose, bone->name);
+ bPoseChannel *pchan;
- if(pchan) {
+ ApplyPose();
+ pchan = get_pose_channel(m_objArma->pose, bone->name);
+ if(pchan)
matrix.setValue(&pchan->pose_mat[0][0]);
- return true;
- }
- return false;
+ RestorePose();
+
+ return (pchan != NULL);
}
float BL_ArmatureObject::GetBoneLength(Bone* bone) const
diff --git a/source/gameengine/Converter/BL_ArmatureObject.h b/source/gameengine/Converter/BL_ArmatureObject.h
index 752bd5eb365..d68e37d9e37 100644
--- a/source/gameengine/Converter/BL_ArmatureObject.h
+++ b/source/gameengine/Converter/BL_ArmatureObject.h
@@ -59,7 +59,10 @@ public:
void GetMRDPose(struct bPose **pose);
void GetPose(struct bPose **pose);
void SetPose (struct bPose *pose);
+
void ApplyPose();
+ void RestorePose();
+
bool SetActiveAction(class BL_ActionActuator *act, short priority, double curtime);
struct bArmature * GetArmature() { return m_armature; }
@@ -69,7 +72,7 @@ public:
/// Retrieve the pose matrix for the specified bone.
/// Returns true on success.
- bool GetBoneMatrix(Bone* bone, MT_Matrix4x4& matrix) const;
+ bool GetBoneMatrix(Bone* bone, MT_Matrix4x4& matrix);
/// Returns the bone length. The end of the bone is in the local y direction.
float GetBoneLength(Bone* bone) const;
@@ -79,10 +82,13 @@ protected:
Object *m_objArma;
struct bArmature *m_armature;
struct bPose *m_pose;
- struct bPose *m_mrdPose;
+ struct bPose *m_armpose;
+ struct bPose *m_framePose;
double m_lastframe;
class BL_ActionActuator *m_activeAct;
short m_activePriority;
+
+ double m_lastapplyframe;
};
#endif
diff --git a/source/gameengine/Converter/BL_BlenderDataConversion.cpp b/source/gameengine/Converter/BL_BlenderDataConversion.cpp
index a6337403cd1..97ed6f4002a 100644
--- a/source/gameengine/Converter/BL_BlenderDataConversion.cpp
+++ b/source/gameengine/Converter/BL_BlenderDataConversion.cpp
@@ -129,6 +129,7 @@
#include "DNA_sound_types.h"
#include "DNA_key_types.h"
#include "DNA_armature_types.h"
+#include "DNA_object_force.h"
#include "MEM_guardedalloc.h"
#include "BKE_utildefines.h"
@@ -308,7 +309,7 @@ static void GetRGB(short type,
typedef struct MTF_localLayer
{
MTFace *face;
- char *name;
+ const char *name;
}MTF_localLayer;
// ------------------------------------
@@ -377,6 +378,7 @@ BL_Material* ConvertMaterial(
material->texname[i] = material->img[i]->id.name;
material->flag[i] |= ( tface->transp &TF_ALPHA )?USEALPHA:0;
material->flag[i] |= ( tface->transp &TF_ADD )?CALCALPHA:0;
+ material->flag[i] |= MIPMAP;
if(material->img[i]->flag & IMA_REFLECT)
material->mapping[i].mapping |= USEREFL;
@@ -601,7 +603,6 @@ BL_Material* ConvertMaterial(
(tface->mode & TF_INVISIBLE)
)?POLY_VIS:0;
- material->ras_mode |= ( (tface->mode & TF_DYNAMIC)!= 0 )?COLLIDER:0;
material->transp = tface->transp;
material->tile = tface->tile;
material->mode = tface->mode;
@@ -617,7 +618,7 @@ BL_Material* ConvertMaterial(
}
else {
// nothing at all
- material->ras_mode |= (COLLIDER|POLY_VIS| (validmat?0:USE_LIGHT));
+ material->ras_mode |= (POLY_VIS| (validmat?0:USE_LIGHT));
material->mode = default_face_mode;
material->transp = TF_SOLID;
material->tile = 0;
@@ -627,13 +628,19 @@ BL_Material* ConvertMaterial(
if(validmat && (mat->mode & MA_ZTRA) && (material->transp == TF_SOLID))
material->transp = TF_ALPHA;
- // always zsort alpha + add
- if((material->transp == TF_ALPHA || material->transp == TF_ADD || texalpha)
- && (material->transp != TF_CLIP)) {
+ // always zsort alpha + add
+ if((material->transp == TF_ALPHA || material->transp == TF_ADD || texalpha) && (material->transp != TF_CLIP)) {
material->ras_mode |= ALPHA;
material->ras_mode |= (material->mode & TF_ALPHASORT)? ZSORT: 0;
}
+ // collider or not?
+ material->ras_mode |= (material->mode & TF_DYNAMIC)? COLLIDER: 0;
+
+ // these flags are irrelevant at this point, remove so they
+ // don't hurt material bucketing
+ material->mode &= ~(TF_DYNAMIC|TF_ALPHASORT|TF_TEX);
+
// get uv sets
if(validmat)
{
@@ -644,6 +651,7 @@ BL_Material* ConvertMaterial(
for (int vind = 0; vind<material->num_enabled; vind++)
{
BL_Mapping &map = material->mapping[vind];
+
if (map.uvCoName.IsEmpty())
isFirstSet = false;
else
@@ -673,7 +681,7 @@ BL_Material* ConvertMaterial(
isFirstSet = false;
uvName = layer.name;
}
- else
+ else if(strcmp(layer.name, uvName) != 0)
{
uv2[0] = uvSet[0]; uv2[1] = uvSet[1];
uv2[2] = uvSet[2]; uv2[3] = uvSet[3];
@@ -702,7 +710,6 @@ BL_Material* ConvertMaterial(
material->SetConversionUV(uvName, uv);
material->SetConversionUV2(uv2Name, uv2);
- material->ras_mode |= (mface->v4==0)?TRIANGLE:0;
if(validmat)
material->matname =(mat->id.name);
@@ -737,7 +744,8 @@ RAS_MeshObject* BL_ConvertMesh(Mesh* mesh, Object* blenderobj, RAS_IRenderTools*
}
// Determine if we need to make a skinned mesh
- if (mesh->dvert || mesh->key) {
+ if (mesh->dvert || mesh->key || ((blenderobj->gameflag & OB_SOFT_BODY) != 0))
+ {
meshobj = new BL_SkinMeshObject(mesh, lightlayer);
skinMesh = true;
}
@@ -767,7 +775,7 @@ RAS_MeshObject* BL_ConvertMesh(Mesh* mesh, Object* blenderobj, RAS_IRenderTools*
}
meshobj->SetName(mesh->id.name);
- meshobj->m_xyz_index_to_vertex_index_mapping.resize(totvert);
+ meshobj->m_sharedvertex_map.resize(totvert);
for (int f=0;f<totface;f++,mface++)
{
@@ -777,9 +785,9 @@ RAS_MeshObject* BL_ConvertMesh(Mesh* mesh, Object* blenderobj, RAS_IRenderTools*
MT_Point2 uv20(0.0,0.0),uv21(0.0,0.0),uv22(0.0,0.0),uv23(0.0,0.0);
unsigned int rgb0,rgb1,rgb2,rgb3 = 0;
- MT_Vector3 no0, no1, no2, no3;
MT_Point3 pt0, pt1, pt2, pt3;
- MT_Vector4 tan0, tan1, tan2, tan3;
+ MT_Vector3 no0(0,0,0), no1(0,0,0), no2(0,0,0), no3(0,0,0);
+ MT_Vector4 tan0(0,0,0,0), tan1(0,0,0,0), tan2(0,0,0,0), tan3(0,0,0,0);
/* get coordinates, normals and tangents */
pt0 = MT_Point3(mvert[mface->v1].co);
@@ -801,8 +809,6 @@ RAS_MeshObject* BL_ConvertMesh(Mesh* mesh, Object* blenderobj, RAS_IRenderTools*
NormalShortToFloat(n3, mvert[mface->v4].no);
no3 = n3;
}
- else
- no3 = MT_Vector3(0.0, 0.0, 0.0);
}
else {
float fno[3];
@@ -830,7 +836,7 @@ RAS_MeshObject* BL_ConvertMesh(Mesh* mesh, Object* blenderobj, RAS_IRenderTools*
ma = give_current_material(blenderobj, mface->mat_nr+1);
{
- bool polyvisible = true;
+ bool visible = true;
RAS_IPolyMaterial* polymat = NULL;
BL_Material *bl_mat = NULL;
@@ -845,7 +851,7 @@ RAS_MeshObject* BL_ConvertMesh(Mesh* mesh, Object* blenderobj, RAS_IRenderTools*
bl_mat->material_index = (int)mface->mat_nr;
- polyvisible = ((bl_mat->ras_mode & POLY_VIS)!=0);
+ visible = ((bl_mat->ras_mode & POLY_VIS)!=0);
collider = ((bl_mat->ras_mode & COLLIDER)!=0);
/* vertex colors and uv's were stored in bl_mat temporarily */
@@ -862,7 +868,7 @@ RAS_MeshObject* BL_ConvertMesh(Mesh* mesh, Object* blenderobj, RAS_IRenderTools*
uv22 = uv[2]; uv23 = uv[3];
/* then the KX_BlenderMaterial */
- polymat = new KX_BlenderMaterial(scene, bl_mat, skinMesh, lightlayer, blenderobj );
+ polymat = new KX_BlenderMaterial(scene, bl_mat, skinMesh, lightlayer);
}
else {
/* do Texture Face materials */
@@ -886,7 +892,7 @@ RAS_MeshObject* BL_ConvertMesh(Mesh* mesh, Object* blenderobj, RAS_IRenderTools*
tile = tface->tile;
mode = tface->mode;
- polyvisible = !((mface->flag & ME_HIDE)||(tface->mode & TF_INVISIBLE));
+ visible = !((mface->flag & ME_HIDE)||(tface->mode & TF_INVISIBLE));
uv0 = MT_Point2(tface->uv[0]);
uv1 = MT_Point2(tface->uv[1]);
@@ -940,15 +946,13 @@ RAS_MeshObject* BL_ConvertMesh(Mesh* mesh, Object* blenderobj, RAS_IRenderTools*
rgb3 = KX_rgbaint2uint_new(color);
}
- bool istriangle = (mface->v4==0);
-
// only zsort alpha + add
bool alpha = (transp == TF_ALPHA || transp == TF_ADD);
bool zsort = (mode & TF_ALPHASORT)? alpha: 0;
polymat = new KX_PolygonMaterial(imastr, ma,
tile, tilexrep, tileyrep,
- mode, transp, alpha, zsort, lightlayer, istriangle, blenderobj, tface, (unsigned int*)mcol);
+ mode, transp, alpha, zsort, lightlayer, tface, (unsigned int*)mcol);
if (ma) {
polymat->m_specular = MT_Vector3(ma->specr, ma->specg, ma->specb)*ma->spec;
@@ -961,6 +965,9 @@ RAS_MeshObject* BL_ConvertMesh(Mesh* mesh, Object* blenderobj, RAS_IRenderTools*
}
}
+ /* mark face as flat, so vertices are split */
+ bool flat = (mface->flag & ME_SMOOTH) == 0;
+
// see if a bucket was reused or a new one was created
// this way only one KX_BlenderMaterial object has to exist per bucket
bool bucketCreated;
@@ -981,49 +988,19 @@ RAS_MeshObject* BL_ConvertMesh(Mesh* mesh, Object* blenderobj, RAS_IRenderTools*
polymat = bucket->GetPolyMaterial();
}
- int nverts = mface->v4?4:3;
- int vtxarray = meshobj->FindVertexArray(nverts,polymat);
- RAS_Polygon* poly = new RAS_Polygon(bucket,polyvisible,nverts,vtxarray);
-
- bool flat;
-
- if (skinMesh) {
- /* If the face is set to solid, all fnors are the same */
- if (mface->flag & ME_SMOOTH)
- flat = false;
- else
- flat = true;
- }
- else
- flat = false;
-
- poly->SetVertex(0,meshobj->FindOrAddVertex(vtxarray,pt0,uv0,uv20,tan0,rgb0,no0,flat,polymat,mface->v1));
- poly->SetVertex(1,meshobj->FindOrAddVertex(vtxarray,pt1,uv1,uv21,tan1,rgb1,no1,flat,polymat,mface->v2));
- poly->SetVertex(2,meshobj->FindOrAddVertex(vtxarray,pt2,uv2,uv22,tan2,rgb2,no2,flat,polymat,mface->v3));
- if (nverts==4)
- poly->SetVertex(3,meshobj->FindOrAddVertex(vtxarray,pt3,uv3,uv23,tan3,rgb3,no3,flat,polymat,mface->v4));
+ int nverts = (mface->v4)? 4: 3;
+ RAS_Polygon *poly = meshobj->AddPolygon(bucket, nverts);
- meshobj->AddPolygon(poly);
- if (poly->IsCollider())
- {
- RAS_TriangleIndex idx;
- idx.m_index[0] = mface->v1;
- idx.m_index[1] = mface->v2;
- idx.m_index[2] = mface->v3;
- idx.m_collider = collider;
- meshobj->m_triangle_indices.push_back(idx);
- if (nverts==4)
- {
- idx.m_index[0] = mface->v1;
- idx.m_index[1] = mface->v3;
- idx.m_index[2] = mface->v4;
- idx.m_collider = collider;
- meshobj->m_triangle_indices.push_back(idx);
- }
- }
-
-// poly->SetVisibleWireframeEdges(mface->edcode);
+ poly->SetVisible(visible);
poly->SetCollider(collider);
+ //poly->SetEdgeCode(mface->edcode);
+
+ meshobj->AddVertex(poly,0,pt0,uv0,uv20,tan0,rgb0,no0,flat,mface->v1);
+ meshobj->AddVertex(poly,1,pt1,uv1,uv21,tan1,rgb1,no1,flat,mface->v2);
+ meshobj->AddVertex(poly,2,pt2,uv2,uv22,tan2,rgb2,no2,flat,mface->v3);
+
+ if (nverts==4)
+ meshobj->AddVertex(poly,3,pt3,uv3,uv23,tan3,rgb3,no3,flat,mface->v4);
}
if (tface)
@@ -1039,13 +1016,12 @@ RAS_MeshObject* BL_ConvertMesh(Mesh* mesh, Object* blenderobj, RAS_IRenderTools*
layer.face++;
}
}
- meshobj->m_xyz_index_to_vertex_index_mapping.clear();
- meshobj->UpdateMaterialList();
+ meshobj->m_sharedvertex_map.clear();
// pre calculate texture generation
- for(RAS_MaterialBucket::Set::iterator mit = meshobj->GetFirstMaterial();
+ for(list<RAS_MeshMaterial>::iterator mit = meshobj->GetFirstMaterial();
mit != meshobj->GetLastMaterial(); ++ mit) {
- (*mit)->GetPolyMaterial()->OnConstruction();
+ mit->m_bucket->GetPolyMaterial()->OnConstruction();
}
if (layers)
@@ -1305,6 +1281,10 @@ void BL_CreatePhysicsObjectNew(KX_GameObject* gameobj,
//int userigidbody = SYS_GetCommandLineInt(syshandle,"norigidbody",0);
//bool bRigidBody = (userigidbody == 0);
+ // object has physics representation?
+ if (!(blenderobject->gameflag & OB_COLLISION))
+ return;
+
// get Root Parent of blenderobject
struct Object* parent= blenderobject->parent;
while(parent && parent->parent) {
@@ -1336,19 +1316,97 @@ void BL_CreatePhysicsObjectNew(KX_GameObject* gameobj,
objprop.m_isCompoundChild = isCompoundChild;
objprop.m_hasCompoundChildren = (blenderobject->gameflag & OB_CHILD) != 0;
-
- if ((objprop.m_isactor = (blenderobject->gameflag & OB_ACTOR)!=0))
+ objprop.m_margin = blenderobject->margin;
+ // ACTOR is now a separate feature
+ objprop.m_isactor = (blenderobject->gameflag & OB_ACTOR)!=0;
+ objprop.m_dyna = (blenderobject->gameflag & OB_DYNAMIC) != 0;
+ objprop.m_softbody = (blenderobject->gameflag & OB_SOFT_BODY) != 0;
+ objprop.m_angular_rigidbody = (blenderobject->gameflag & OB_RIGID_BODY) != 0;
+
+ if (objprop.m_softbody)
{
- objprop.m_dyna = (blenderobject->gameflag & OB_DYNAMIC) != 0;
- objprop.m_angular_rigidbody = (blenderobject->gameflag & OB_RIGID_BODY) != 0;
- objprop.m_ghost = (blenderobject->gameflag & OB_GHOST) != 0;
- objprop.m_disableSleeping = (blenderobject->gameflag & OB_COLLISION_RESPONSE) != 0;//abuse the OB_COLLISION_RESPONSE flag
- } else {
- objprop.m_dyna = false;
- objprop.m_angular_rigidbody = false;
- objprop.m_ghost = false;
- objprop.m_disableSleeping = false;
+ ///for game soft bodies
+ if (blenderobject->bsoft)
+ {
+ objprop.m_gamesoftFlag = blenderobject->bsoft->flag;
+ ///////////////////
+ objprop.m_soft_linStiff = blenderobject->bsoft->linStiff;
+ objprop.m_soft_angStiff = blenderobject->bsoft->angStiff; /* angular stiffness 0..1 */
+ objprop.m_soft_volume= blenderobject->bsoft->volume; /* volume preservation 0..1 */
+
+ objprop.m_soft_viterations= blenderobject->bsoft->viterations; /* Velocities solver iterations */
+ objprop.m_soft_piterations= blenderobject->bsoft->piterations; /* Positions solver iterations */
+ objprop.m_soft_diterations= blenderobject->bsoft->diterations; /* Drift solver iterations */
+ objprop.m_soft_citerations= blenderobject->bsoft->citerations; /* Cluster solver iterations */
+
+ objprop.m_soft_kSRHR_CL= blenderobject->bsoft->kSRHR_CL; /* Soft vs rigid hardness [0,1] (cluster only) */
+ objprop.m_soft_kSKHR_CL= blenderobject->bsoft->kSKHR_CL; /* Soft vs kinetic hardness [0,1] (cluster only) */
+ objprop.m_soft_kSSHR_CL= blenderobject->bsoft->kSSHR_CL; /* Soft vs soft hardness [0,1] (cluster only) */
+ objprop.m_soft_kSR_SPLT_CL= blenderobject->bsoft->kSR_SPLT_CL; /* Soft vs rigid impulse split [0,1] (cluster only) */
+
+ objprop.m_soft_kSK_SPLT_CL= blenderobject->bsoft->kSK_SPLT_CL; /* Soft vs rigid impulse split [0,1] (cluster only) */
+ objprop.m_soft_kSS_SPLT_CL= blenderobject->bsoft->kSS_SPLT_CL; /* Soft vs rigid impulse split [0,1] (cluster only) */
+ objprop.m_soft_kVCF= blenderobject->bsoft->kVCF; /* Velocities correction factor (Baumgarte) */
+ objprop.m_soft_kDP= blenderobject->bsoft->kDP; /* Damping coefficient [0,1] */
+
+ objprop.m_soft_kDG= blenderobject->bsoft->kDG; /* Drag coefficient [0,+inf] */
+ objprop.m_soft_kLF= blenderobject->bsoft->kLF; /* Lift coefficient [0,+inf] */
+ objprop.m_soft_kPR= blenderobject->bsoft->kPR; /* Pressure coefficient [-inf,+inf] */
+ objprop.m_soft_kVC= blenderobject->bsoft->kVC; /* Volume conversation coefficient [0,+inf] */
+
+ objprop.m_soft_kDF= blenderobject->bsoft->kDF; /* Dynamic friction coefficient [0,1] */
+ objprop.m_soft_kMT= blenderobject->bsoft->kMT; /* Pose matching coefficient [0,1] */
+ objprop.m_soft_kCHR= blenderobject->bsoft->kCHR; /* Rigid contacts hardness [0,1] */
+ objprop.m_soft_kKHR= blenderobject->bsoft->kKHR; /* Kinetic contacts hardness [0,1] */
+
+ objprop.m_soft_kSHR= blenderobject->bsoft->kSHR; /* Soft contacts hardness [0,1] */
+ objprop.m_soft_kAHR= blenderobject->bsoft->kAHR; /* Anchors hardness [0,1] */
+ objprop.m_soft_collisionflags= blenderobject->bsoft->collisionflags; /* Vertex/Face or Signed Distance Field(SDF) or Clusters, Soft versus Soft or Rigid */
+ objprop.m_soft_numclusteriterations= blenderobject->bsoft->numclusteriterations; /* number of iterations to refine collision clusters*/
+
+ } else
+ {
+ objprop.m_gamesoftFlag = OB_BSB_BENDING_CONSTRAINTS | OB_BSB_SHAPE_MATCHING | OB_BSB_AERO_VPOINT;
+
+ objprop.m_soft_linStiff = 0.5;;
+ objprop.m_soft_angStiff = 1.f; /* angular stiffness 0..1 */
+ objprop.m_soft_volume= 1.f; /* volume preservation 0..1 */
+
+
+ objprop.m_soft_viterations= 0;
+ objprop.m_soft_piterations= 1;
+ objprop.m_soft_diterations= 0;
+ objprop.m_soft_citerations= 4;
+
+ objprop.m_soft_kSRHR_CL= 0.1f;
+ objprop.m_soft_kSKHR_CL= 1.f;
+ objprop.m_soft_kSSHR_CL= 0.5;
+ objprop.m_soft_kSR_SPLT_CL= 0.5f;
+
+ objprop.m_soft_kSK_SPLT_CL= 0.5f;
+ objprop.m_soft_kSS_SPLT_CL= 0.5f;
+ objprop.m_soft_kVCF= 1;
+ objprop.m_soft_kDP= 0;
+
+ objprop.m_soft_kDG= 0;
+ objprop.m_soft_kLF= 0;
+ objprop.m_soft_kPR= 0;
+ objprop.m_soft_kVC= 0;
+
+ objprop.m_soft_kDF= 0.2f;
+ objprop.m_soft_kMT= 0.05f;
+ objprop.m_soft_kCHR= 1.0f;
+ objprop.m_soft_kKHR= 0.1f;
+
+ objprop.m_soft_kSHR= 1.f;
+ objprop.m_soft_kAHR= 0.7f;
+ objprop.m_soft_collisionflags= OB_BSB_COL_SDF_RS + OB_BSB_COL_VF_SS;
+ objprop.m_soft_numclusteriterations= 16;
+ }
}
+
+ objprop.m_ghost = (blenderobject->gameflag & OB_GHOST) != 0;
+ objprop.m_disableSleeping = (blenderobject->gameflag & OB_COLLISION_RESPONSE) != 0;//abuse the OB_COLLISION_RESPONSE flag
//mmm, for now, taks this for the size of the dynamicobject
// Blender uses inertia for radius of dynamic object
objprop.m_radius = blenderobject->inertia;
@@ -1356,6 +1414,12 @@ void BL_CreatePhysicsObjectNew(KX_GameObject* gameobj,
objprop.m_dynamic_parent=NULL;
objprop.m_isdeformable = ((blenderobject->gameflag2 & 2)) != 0;
objprop.m_boundclass = objprop.m_dyna?KX_BOUNDSPHERE:KX_BOUNDMESH;
+
+ if ((blenderobject->gameflag & OB_SOFT_BODY) && !(blenderobject->gameflag & OB_BOUNDS))
+ {
+ objprop.m_boundclass = KX_BOUNDMESH;
+ }
+
KX_BoxBounds bb;
my_get_local_bounds(blenderobject,objprop.m_boundobject.box.m_center,bb.m_extends);
if (blenderobject->gameflag & OB_BOUNDS)
@@ -1490,14 +1554,9 @@ static KX_LightObject *gamelight_from_blamp(Object *ob, Lamp *la, unsigned int l
lightobj.m_type = RAS_LightObject::LIGHT_NORMAL;
}
-#ifdef BLENDER_GLSL
- if(converter->GetGLSLMaterials())
- GPU_lamp_from_blender(ob, la);
-
- gamelight = new KX_LightObject(kxscene, KX_Scene::m_callbacks, rendertools, lightobj, ob->gpulamp);
-#else
- gamelight = new KX_LightObject(kxscene, KX_Scene::m_callbacks, rendertools, lightobj, NULL);
-#endif
+ gamelight = new KX_LightObject(kxscene, KX_Scene::m_callbacks, rendertools,
+ lightobj, converter->GetGLSLMaterials());
+
BL_ConvertLampIpos(la, gamelight, converter);
return gamelight;
@@ -1534,7 +1593,7 @@ static KX_GameObject *gameobject_from_blenderobject(
gamelight->AddRef();
kxscene->GetLightList()->Add(gamelight);
-
+
break;
}
@@ -1586,20 +1645,20 @@ static KX_GameObject *gameobject_from_blenderobject(
// not that we can have shape keys without dvert!
BL_ShapeDeformer *dcont = new BL_ShapeDeformer((BL_DeformableGameObject*)gameobj,
ob, (BL_SkinMeshObject*)meshobj);
- ((BL_DeformableGameObject*)gameobj)->m_pDeformer = dcont;
+ ((BL_DeformableGameObject*)gameobj)->SetDeformer(dcont);
if (bHasArmature)
dcont->LoadShapeDrivers(ob->parent);
} else if (bHasArmature) {
BL_SkinDeformer *dcont = new BL_SkinDeformer((BL_DeformableGameObject*)gameobj,
ob, (BL_SkinMeshObject*)meshobj);
- ((BL_DeformableGameObject*)gameobj)->m_pDeformer = dcont;
+ ((BL_DeformableGameObject*)gameobj)->SetDeformer(dcont);
} else if (bHasDvert) {
// this case correspond to a mesh that can potentially deform but not with the
// object to which it is attached for the moment. A skin mesh was created in
// BL_ConvertMesh() so must create a deformer too!
BL_MeshDeformer *dcont = new BL_MeshDeformer((BL_DeformableGameObject*)gameobj,
ob, (BL_SkinMeshObject*)meshobj);
- ((BL_DeformableGameObject*)gameobj)->m_pDeformer = dcont;
+ ((BL_DeformableGameObject*)gameobj)->SetDeformer(dcont);
}
MT_Point3 min = MT_Point3(center) - MT_Vector3(extents);
@@ -1634,6 +1693,8 @@ static KX_GameObject *gameobject_from_blenderobject(
gameobj->SetPhysicsEnvironment(kxscene->GetPhysicsEnvironment());
gameobj->SetLayer(ob->lay);
gameobj->SetBlenderObject(ob);
+ /* set the visibility state based on the objects render option in the outliner */
+ if(ob->restrictflag & OB_RESTRICT_RENDER) gameobj->SetVisible(0, 0);
}
return gameobj;
}
@@ -1643,20 +1704,6 @@ struct parentChildLink {
SG_Node* m_gamechildnode;
};
- /**
- * Find the specified scene by name, or the first
- * scene if nothing matches (shouldn't happen).
- */
-static struct Scene *GetSceneForName(struct Main *maggie, const STR_String& scenename) {
- Scene *sce;
-
- for (sce= (Scene*) maggie->scene.first; sce; sce= (Scene*) sce->id.next)
- if (scenename == (sce->id.name+2))
- return sce;
-
- return (Scene*) maggie->scene.first;
-}
-
#include "DNA_constraint_types.h"
#include "BIF_editconstraint.h"
@@ -1755,7 +1802,7 @@ void BL_ConvertBlenderObjects(struct Main* maggie,
)
{
- Scene *blenderscene = GetSceneForName(maggie, scenename);
+ Scene *blenderscene = converter->GetBlenderSceneForName(scenename);
// for SETLOOPER
Scene *sce;
Base *base;
@@ -1946,10 +1993,22 @@ void BL_ConvertBlenderObjects(struct Main* maggie,
//parentinversenode->SetLocalOrientation(parinvtrans.getBasis());
// Extract the rotation and the scaling from the basis
- MT_Matrix3x3 inverseOrientation(parinvtrans.getRotation());
- parentinversenode->SetLocalOrientation(inverseOrientation);
- MT_Matrix3x3 scale(inverseOrientation.transposed()*parinvtrans.getBasis());
- parentinversenode->SetLocalScale(MT_Vector3(scale[0][0], scale[1][1], scale[2][2]));
+ MT_Matrix3x3 ori(parinvtrans.getBasis());
+ MT_Vector3 x(ori.getColumn(0));
+ MT_Vector3 y(ori.getColumn(1));
+ MT_Vector3 z(ori.getColumn(2));
+ MT_Vector3 scale(x.length(), y.length(), z.length());
+ if (!MT_fuzzyZero(scale[0]))
+ x /= scale[0];
+ if (!MT_fuzzyZero(scale[1]))
+ y /= scale[1];
+ if (!MT_fuzzyZero(scale[2]))
+ z /= scale[2];
+ ori.setColumn(0, x);
+ ori.setColumn(1, y);
+ ori.setColumn(2, z);
+ parentinversenode->SetLocalOrientation(ori);
+ parentinversenode->SetLocalScale(scale);
parentinversenode->AddChild(gameobj->GetSGNode());
}
@@ -1978,7 +2037,7 @@ void BL_ConvertBlenderObjects(struct Main* maggie,
//tf.Add(gameobj->GetSGNode());
gameobj->NodeUpdateGS(0,true);
- gameobj->Bucketize();
+ gameobj->AddMeshUser();
}
else
@@ -2129,7 +2188,24 @@ void BL_ConvertBlenderObjects(struct Main* maggie,
float* fl = (float*) blenderobject->parentinv;
MT_Transform parinvtrans(fl);
parentinversenode->SetLocalPosition(parinvtrans.getOrigin());
- parentinversenode->SetLocalOrientation(parinvtrans.getBasis());
+
+ // Extract the rotation and the scaling from the basis
+ MT_Matrix3x3 ori(parinvtrans.getBasis());
+ MT_Vector3 x(ori.getColumn(0));
+ MT_Vector3 y(ori.getColumn(1));
+ MT_Vector3 z(ori.getColumn(2));
+ MT_Vector3 scale(x.length(), y.length(), z.length());
+ if (!MT_fuzzyZero(scale[0]))
+ x /= scale[0];
+ if (!MT_fuzzyZero(scale[1]))
+ y /= scale[1];
+ if (!MT_fuzzyZero(scale[2]))
+ z /= scale[2];
+ ori.setColumn(0, x);
+ ori.setColumn(1, y);
+ ori.setColumn(2, z);
+ parentinversenode->SetLocalOrientation(ori);
+ parentinversenode->SetLocalScale(scale);
parentinversenode->AddChild(gameobj->GetSGNode());
}
@@ -2158,8 +2234,7 @@ void BL_ConvertBlenderObjects(struct Main* maggie,
//tf.Add(gameobj->GetSGNode());
gameobj->NodeUpdateGS(0,true);
- gameobj->Bucketize();
-
+ gameobj->AddMeshUser();
}
else
{
@@ -2201,16 +2276,16 @@ void BL_ConvertBlenderObjects(struct Main* maggie,
for(oit=allblobj.begin(); oit!=allblobj.end(); oit++)
{
Object* blenderobj = *oit;
- if (blenderobj->type==OB_MESH){
+ if (blenderobj->type==OB_MESH) {
Mesh *me = (Mesh*)blenderobj->data;
if (me->dvert){
- KX_GameObject *obj = converter->FindGameObject(blenderobj);
+ BL_DeformableGameObject *obj = (BL_DeformableGameObject*)converter->FindGameObject(blenderobj);
if (obj && blenderobj->parent && blenderobj->parent->type==OB_ARMATURE && blenderobj->partype==PARSKEL){
KX_GameObject *par = converter->FindGameObject(blenderobj->parent);
- if (par)
- ((BL_SkinDeformer*)(((BL_DeformableGameObject*)obj)->m_pDeformer))->SetArmature((BL_ArmatureObject*) par);
+ if (par && obj->GetDeformer())
+ ((BL_SkinDeformer*)obj->GetDeformer())->SetArmature((BL_ArmatureObject*) par);
}
}
}
@@ -2224,6 +2299,41 @@ void BL_ConvertBlenderObjects(struct Main* maggie,
{
struct Object* blenderchild = pcit->m_blenderchild;
+ struct Object* blenderparent = blenderchild->parent;
+ KX_GameObject* parentobj = converter->FindGameObject(blenderparent);
+ KX_GameObject* childobj = converter->FindGameObject(blenderchild);
+
+ assert(childobj);
+
+ if (!parentobj || objectlist->SearchValue(childobj) != objectlist->SearchValue(parentobj))
+ {
+ // special case: the parent and child object are not in the same layer.
+ // This weird situation is used in Apricot for test purposes.
+ // Resolve it by not converting the child
+ childobj->GetSGNode()->DisconnectFromParent();
+ delete pcit->m_gamechildnode;
+ // Now destroy the child object but also all its descendent that may already be linked
+ // Remove the child reference in the local list!
+ // Note: there may be descendents already if the children of the child were processed
+ // by this loop before the child. In that case, we must remove the children also
+ CListValue* childrenlist = (CListValue*)childobj->PyGetChildrenRecursive(childobj);
+ childrenlist->Add(childobj->AddRef());
+ for ( i=0;i<childrenlist->GetCount();i++)
+ {
+ KX_GameObject* obj = static_cast<KX_GameObject*>(childrenlist->GetValue(i));
+ if (templist->RemoveValue(obj))
+ obj->Release();
+ if (sumolist->RemoveValue(obj))
+ obj->Release();
+ if (logicbrick_conversionlist->RemoveValue(obj))
+ obj->Release();
+ }
+ childrenlist->Release();
+ // now destroy recursively
+ kxscene->RemoveObject(childobj);
+ continue;
+ }
+
switch (blenderchild->partype)
{
case PARVERT1:
@@ -2244,8 +2354,11 @@ void BL_ConvertBlenderObjects(struct Main* maggie,
{
// parent this to a bone
Bone *parent_bone = get_named_bone(get_armature(blenderchild->parent), blenderchild->parsubstr);
- KX_BoneParentRelation *bone_parent_relation = KX_BoneParentRelation::New(parent_bone);
- pcit->m_gamechildnode->SetParentRelation(bone_parent_relation);
+
+ if(parent_bone) {
+ KX_BoneParentRelation *bone_parent_relation = KX_BoneParentRelation::New(parent_bone);
+ pcit->m_gamechildnode->SetParentRelation(bone_parent_relation);
+ }
break;
}
@@ -2260,12 +2373,7 @@ void BL_ConvertBlenderObjects(struct Main* maggie,
break;
}
- struct Object* blenderparent = blenderchild->parent;
- KX_GameObject* parentobj = converter->FindGameObject(blenderparent);
- if (parentobj)
- {
- parentobj-> GetSGNode()->AddChild(pcit->m_gamechildnode);
- }
+ parentobj-> GetSGNode()->AddChild(pcit->m_gamechildnode);
}
vec_parent_child.clear();
@@ -2450,7 +2558,7 @@ void BL_ConvertBlenderObjects(struct Main* maggie,
struct Object* blenderobj = converter->FindBlenderObject(gameobj);
int layerMask = (groupobj.find(blenderobj) == groupobj.end()) ? activeLayerBitInfo : 0;
bool isInActiveLayer = (blenderobj->lay & layerMask)!=0;
- BL_ConvertSensors(blenderobj,gameobj,logicmgr,kxscene,keydev,executePriority,layerMask,isInActiveLayer,canvas,converter);
+ BL_ConvertSensors(blenderobj,gameobj,logicmgr,kxscene,ketsjiEngine,keydev,executePriority,layerMask,isInActiveLayer,canvas,converter);
// set the init state to all objects
gameobj->SetInitState((blenderobj->init_state)?blenderobj->init_state:blenderobj->state);
}
@@ -2482,5 +2590,10 @@ void BL_ConvertBlenderObjects(struct Main* maggie,
kxscene->DupliGroupRecurse(gameobj, 0);
}
}
+
+ KX_Camera *activecam = kxscene->GetActiveCamera();
+ MT_Scalar distance = (activecam)? activecam->GetCameraFar() - activecam->GetCameraNear(): 100.0f;
+ RAS_BucketManager *bucketmanager = kxscene->GetBucketManager();
+ bucketmanager->OptimizeBuckets(distance);
}
diff --git a/source/gameengine/Converter/BL_DeformableGameObject.cpp b/source/gameengine/Converter/BL_DeformableGameObject.cpp
index d23274324ee..e2610d2b405 100644
--- a/source/gameengine/Converter/BL_DeformableGameObject.cpp
+++ b/source/gameengine/Converter/BL_DeformableGameObject.cpp
@@ -41,12 +41,14 @@ BL_DeformableGameObject::~BL_DeformableGameObject()
delete m_pDeformer; // __NLA : Temporary until we decide where to put this
}
-void BL_DeformableGameObject::ProcessReplica(KX_GameObject* replica)
+void BL_DeformableGameObject::ProcessReplica(KX_GameObject* replica)
{
+ BL_MeshDeformer *deformer;
KX_GameObject::ProcessReplica(replica);
- if (m_pDeformer){
- ((BL_DeformableGameObject*)replica)->m_pDeformer = m_pDeformer->GetReplica();
+ if (m_pDeformer) {
+ deformer = (BL_MeshDeformer*)m_pDeformer->GetReplica(replica);
+ ((BL_DeformableGameObject*)replica)->m_pDeformer = deformer;
}
}
diff --git a/source/gameengine/Converter/BL_DeformableGameObject.h b/source/gameengine/Converter/BL_DeformableGameObject.h
index 315ad18c42c..126a1fcb1e7 100644
--- a/source/gameengine/Converter/BL_DeformableGameObject.h
+++ b/source/gameengine/Converter/BL_DeformableGameObject.h
@@ -83,9 +83,21 @@ public:
return (m_pDeformer) ? ((BL_MeshDeformer*)m_pDeformer)->GetMesh()->key : NULL;
}
+ virtual void SetDeformer(class RAS_Deformer* deformer)
+ {
+ m_pDeformer = deformer;
+ }
+ virtual class RAS_Deformer* GetDeformer()
+ {
+ return m_pDeformer;
+ }
+
public:
- RAS_Deformer *m_pDeformer;
+
protected:
+
+ RAS_Deformer *m_pDeformer;
+
class BL_ShapeActionActuator *m_activeAct;
double m_lastframe;
Object* m_blendobj;
diff --git a/source/gameengine/Converter/BL_MeshDeformer.cpp b/source/gameengine/Converter/BL_MeshDeformer.cpp
index 39d66a90e92..fa3b8185fe2 100644
--- a/source/gameengine/Converter/BL_MeshDeformer.cpp
+++ b/source/gameengine/Converter/BL_MeshDeformer.cpp
@@ -50,26 +50,26 @@
bool BL_MeshDeformer::Apply(RAS_IPolyMaterial*)
{
- size_t i, j;
+ size_t i;
float *co;
// only apply once per frame if the mesh is actually modified
if(m_pMeshObject->MeshModified() &&
m_lastDeformUpdate != m_gameobj->GetLastFrame()) {
// For each material
- for(RAS_MaterialBucket::Set::iterator mit = m_pMeshObject->GetFirstMaterial();
+ for(list<RAS_MeshMaterial>::iterator mit= m_pMeshObject->GetFirstMaterial();
mit != m_pMeshObject->GetLastMaterial(); ++ mit) {
- RAS_IPolyMaterial *mat = (*mit)->GetPolyMaterial();
+ if(!mit->m_slots[(void*)m_gameobj])
+ continue;
- vecVertexArray& vertexarrays = m_pMeshObject->GetVertexCache(mat);
-
- // For each array
- for (i=0; i<vertexarrays.size(); i++){
- KX_VertexArray& vertexarray = (*vertexarrays[i]);
+ RAS_MeshSlot *slot = *mit->m_slots[(void*)m_gameobj];
+ RAS_MeshSlot::iterator it;
+ // for each array
+ for(slot->begin(it); !slot->end(it); slot->next(it)) {
// For each vertex
- for (j=0; j<vertexarray.size(); j++){
- RAS_TexVert& v = vertexarray[j];
+ for(i=it.startvertex; i<it.endvertex; i++) {
+ RAS_TexVert& v = it.vertex[i];
co = m_bmesh->mvert[v.getOrigIndex()].co;
v.SetXYZ(MT_Point3(co));
}
@@ -90,7 +90,17 @@ BL_MeshDeformer::~BL_MeshDeformer()
delete [] m_transverts;
if (m_transnors)
delete [] m_transnors;
-};
+}
+
+void BL_MeshDeformer::Relink(GEN_Map<class GEN_HashedPtr, void*>*map)
+{
+ void **h_obj = (*map)[m_gameobj];
+
+ if (h_obj)
+ m_gameobj = (BL_DeformableGameObject*)(*h_obj);
+ else
+ m_gameobj = NULL;
+}
/**
* @warning This function is expensive!
@@ -101,41 +111,41 @@ void BL_MeshDeformer::RecalcNormals()
* gives area-weight normals which often look better anyway, and use
* GL_NORMALIZE so we don't have to do per vertex normalization either
* since the GPU can do it faster */
- size_t i, j;
+ list<RAS_MeshMaterial>::iterator mit;
+ RAS_MeshSlot::iterator it;
+ size_t i;
/* set vertex normals to zero */
memset(m_transnors, 0, sizeof(float)*3*m_bmesh->totvert);
/* add face normals to vertices. */
- for(RAS_MaterialBucket::Set::iterator mit = m_pMeshObject->GetFirstMaterial();
+ for(mit = m_pMeshObject->GetFirstMaterial();
mit != m_pMeshObject->GetLastMaterial(); ++ mit) {
- RAS_IPolyMaterial *mat = (*mit)->GetPolyMaterial();
+ if(!mit->m_slots[(void*)m_gameobj])
+ continue;
- const vecIndexArrays& indexarrays = m_pMeshObject->GetIndexCache(mat);
- vecVertexArray& vertexarrays = m_pMeshObject->GetVertexCache(mat);
+ RAS_MeshSlot *slot = *mit->m_slots[(void*)m_gameobj];
- for (i=0; i<indexarrays.size(); i++) {
- KX_VertexArray& vertexarray = (*vertexarrays[i]);
- const KX_IndexArray& indexarray = (*indexarrays[i]);
- int nvert = mat->UsesTriangles()? 3: 4;
+ for(slot->begin(it); !slot->end(it); slot->next(it)) {
+ int nvert = (int)it.array->m_type;
- for(j=0; j<indexarray.size(); j+=nvert) {
- RAS_TexVert& v1 = vertexarray[indexarray[j]];
- RAS_TexVert& v2 = vertexarray[indexarray[j+1]];
- RAS_TexVert& v3 = vertexarray[indexarray[j+2]];
+ for(i=0; i<it.totindex; i+=nvert) {
+ RAS_TexVert& v1 = it.vertex[it.index[i]];
+ RAS_TexVert& v2 = it.vertex[it.index[i+1]];
+ RAS_TexVert& v3 = it.vertex[it.index[i+2]];
RAS_TexVert *v4 = NULL;
- const float *co1 = v1.getLocalXYZ();
- const float *co2 = v2.getLocalXYZ();
- const float *co3 = v3.getLocalXYZ();
+ const float *co1 = v1.getXYZ();
+ const float *co2 = v2.getXYZ();
+ const float *co3 = v3.getXYZ();
const float *co4 = NULL;
/* compute face normal */
float fnor[3], n1[3], n2[3];
if(nvert == 4) {
- v4 = &vertexarray[indexarray[j+3]];
- co4 = v4->getLocalXYZ();
+ v4 = &it.vertex[it.index[i+3]];
+ co4 = v4->getXYZ();
n1[0]= co1[0]-co3[0];
n1[1]= co1[1]-co3[1];
@@ -174,7 +184,7 @@ void BL_MeshDeformer::RecalcNormals()
}
/* in case of flat - just assign, the vertices are split */
- if(v1.getFlag() & TV_CALCFACENORMAL) {
+ if(v1.getFlag() & RAS_TexVert::FLAT) {
v1.SetNormal(fnor);
v2.SetNormal(fnor);
v3.SetNormal(fnor);
@@ -186,19 +196,18 @@ void BL_MeshDeformer::RecalcNormals()
}
/* assign smooth vertex normals */
- for(RAS_MaterialBucket::Set::iterator mit = m_pMeshObject->GetFirstMaterial();
+ for(mit = m_pMeshObject->GetFirstMaterial();
mit != m_pMeshObject->GetLastMaterial(); ++ mit) {
- RAS_IPolyMaterial *mat = (*mit)->GetPolyMaterial();
+ if(!mit->m_slots[(void*)m_gameobj])
+ continue;
- vecVertexArray& vertexarrays = m_pMeshObject->GetVertexCache(mat);
+ RAS_MeshSlot *slot = *mit->m_slots[(void*)m_gameobj];
- for (i=0; i<vertexarrays.size(); i++) {
- KX_VertexArray& vertexarray = (*vertexarrays[i]);
-
- for(j=0; j<vertexarray.size(); j++) {
- RAS_TexVert& v = vertexarray[j];
+ for(slot->begin(it); !slot->end(it); slot->next(it)) {
+ for(i=it.startvertex; i<it.endvertex; i++) {
+ RAS_TexVert& v = it.vertex[i];
- if(!(v.getFlag() & TV_CALCFACENORMAL))
+ if(!(v.getFlag() & RAS_TexVert::FLAT))
v.SetNormal(m_transnors[v.getOrigIndex()]); //.safe_normalized()
}
}
@@ -219,4 +228,4 @@ void BL_MeshDeformer::VerifyStorage()
m_tvtot = m_bmesh->totvert;
}
}
-
+
diff --git a/source/gameengine/Converter/BL_MeshDeformer.h b/source/gameengine/Converter/BL_MeshDeformer.h
index e9f7f0b192f..8de59c1cdf3 100644
--- a/source/gameengine/Converter/BL_MeshDeformer.h
+++ b/source/gameengine/Converter/BL_MeshDeformer.h
@@ -47,7 +47,7 @@ class BL_MeshDeformer : public RAS_Deformer
public:
void VerifyStorage();
void RecalcNormals();
- virtual void Relink(GEN_Map<class GEN_HashedPtr, void*>*map){};
+ virtual void Relink(GEN_Map<class GEN_HashedPtr, void*>*map);
BL_MeshDeformer(BL_DeformableGameObject *gameobj,
struct Object* obj,
class BL_SkinMeshObject *meshobj ):
@@ -64,9 +64,10 @@ public:
virtual void SetSimulatedTime(double time){};
virtual bool Apply(class RAS_IPolyMaterial *mat);
virtual bool Update(void){ return false; };
- virtual RAS_Deformer* GetReplica(){return NULL;};
+ virtual RAS_Deformer* GetReplica(class KX_GameObject* replica){return NULL;};
struct Mesh* GetMesh() { return m_bmesh; };
// virtual void InitDeform(double time){};
+
protected:
class BL_SkinMeshObject* m_pMeshObject;
struct Mesh* m_bmesh;
diff --git a/source/gameengine/Converter/BL_ShapeActionActuator.cpp b/source/gameengine/Converter/BL_ShapeActionActuator.cpp
index 0f976bfb842..cbaa8668b26 100644
--- a/source/gameengine/Converter/BL_ShapeActionActuator.cpp
+++ b/source/gameengine/Converter/BL_ShapeActionActuator.cpp
@@ -1,3 +1,4 @@
+<<<<<<< .working
/**
* $Id:BL_ShapeActionActuator.cpp 15330 2008-06-23 16:37:51Z theeth $
*
@@ -91,6 +92,102 @@ bool BL_ShapeActionActuator::ClampLocalTime()
{
m_localtime = m_endframe;
return true;
+=======
+/**
+* $Id$
+*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): none yet.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+*/
+
+#if defined (__sgi)
+#include <math.h>
+#else
+#include <cmath>
+#endif
+
+#include "SCA_LogicManager.h"
+#include "BL_ShapeActionActuator.h"
+#include "BL_ActionActuator.h"
+#include "BL_ShapeDeformer.h"
+#include "KX_GameObject.h"
+#include "STR_HashedString.h"
+#include "DNA_action_types.h"
+#include "DNA_nla_types.h"
+#include "DNA_actuator_types.h"
+#include "BKE_action.h"
+#include "DNA_armature_types.h"
+#include "MEM_guardedalloc.h"
+#include "BLI_blenlib.h"
+#include "BLI_arithb.h"
+#include "MT_Matrix4x4.h"
+#include "BKE_utildefines.h"
+#include "FloatValue.h"
+#include "PyObjectPlus.h"
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+BL_ShapeActionActuator::~BL_ShapeActionActuator()
+{
+}
+
+void BL_ShapeActionActuator::ProcessReplica()
+{
+ m_localtime=m_startframe;
+ m_lastUpdate=-1;
+}
+
+void BL_ShapeActionActuator::SetBlendTime (float newtime)
+{
+ m_blendframe = newtime;
+}
+
+CValue* BL_ShapeActionActuator::GetReplica()
+{
+ BL_ShapeActionActuator* replica = new BL_ShapeActionActuator(*this);//m_float,GetName());
+ replica->ProcessReplica();
+
+ // this will copy properties and so on...
+ CValue::AddDataToReplica(replica);
+ return replica;
+}
+
+bool BL_ShapeActionActuator::ClampLocalTime()
+{
+ if (m_startframe < m_endframe) {
+ if (m_localtime < m_startframe)
+ {
+ m_localtime = m_startframe;
+ return true;
+ }
+ else if (m_localtime > m_endframe)
+ {
+ m_localtime = m_endframe;
+ return true;
}
} else {
if (m_localtime > m_startframe)
@@ -134,7 +231,6 @@ void BL_ShapeActionActuator::BlendShape(Key* key, float srcweight)
{
vector<float>::const_iterator it;
float dstweight;
- int i;
KeyBlock *kb;
dstweight = 1.0F - srcweight;
@@ -155,6 +251,8 @@ bool BL_ShapeActionActuator::Update(double curtime, bool frame)
bool apply=true;
int priority;
float newweight;
+
+ curtime -= KX_KetsjiEngine::GetSuspendedDelta();
// result = true if animation has to be continued, false if animation stops
// maybe there are events for us in the queue !
@@ -340,6 +438,19 @@ bool BL_ShapeActionActuator::Update(double curtime, bool frame)
break;
}
+ /* Set the property if its defined */
+ if (m_framepropname[0] != '\0') {
+ CValue* propowner = GetParent();
+ CValue* oldprop = propowner->GetProperty(m_framepropname);
+ CValue* newval = new CFloatValue(m_localtime);
+ if (oldprop) {
+ oldprop->SetValue(newval);
+ } else {
+ propowner->SetProperty(m_framepropname, newval);
+>>>>>>> .merge-right.r16886
+ }
+ newval->Release();
+ }
if (bNegativeEvent)
m_blendframe=0.0f;
@@ -433,24 +544,26 @@ PyParentObject BL_ShapeActionActuator::Parents[] = {
};
PyMethodDef BL_ShapeActionActuator::Methods[] = {
- {"setAction", (PyCFunction) BL_ShapeActionActuator::sPySetAction, METH_VARARGS, SetAction_doc},
- {"setStart", (PyCFunction) BL_ShapeActionActuator::sPySetStart, METH_VARARGS, SetStart_doc},
- {"setEnd", (PyCFunction) BL_ShapeActionActuator::sPySetEnd, METH_VARARGS, SetEnd_doc},
- {"setBlendin", (PyCFunction) BL_ShapeActionActuator::sPySetBlendin, METH_VARARGS, SetBlendin_doc},
- {"setPriority", (PyCFunction) BL_ShapeActionActuator::sPySetPriority, METH_VARARGS, SetPriority_doc},
- {"setFrame", (PyCFunction) BL_ShapeActionActuator::sPySetFrame, METH_VARARGS, SetFrame_doc},
- {"setProperty", (PyCFunction) BL_ShapeActionActuator::sPySetProperty, METH_VARARGS, SetProperty_doc},
- {"setBlendtime", (PyCFunction) BL_ShapeActionActuator::sPySetBlendtime, METH_VARARGS, SetBlendtime_doc},
-
- {"getAction", (PyCFunction) BL_ShapeActionActuator::sPyGetAction, METH_NOARGS, GetAction_doc},
- {"getStart", (PyCFunction) BL_ShapeActionActuator::sPyGetStart, METH_NOARGS, GetStart_doc},
- {"getEnd", (PyCFunction) BL_ShapeActionActuator::sPyGetEnd, METH_NOARGS, GetEnd_doc},
- {"getBlendin", (PyCFunction) BL_ShapeActionActuator::sPyGetBlendin, METH_NOARGS, GetBlendin_doc},
- {"getPriority", (PyCFunction) BL_ShapeActionActuator::sPyGetPriority, METH_NOARGS, GetPriority_doc},
- {"getFrame", (PyCFunction) BL_ShapeActionActuator::sPyGetFrame, METH_NOARGS, GetFrame_doc},
- {"getProperty", (PyCFunction) BL_ShapeActionActuator::sPyGetProperty, METH_NOARGS, GetProperty_doc},
- {"getType", (PyCFunction) BL_ShapeActionActuator::sPyGetType, METH_NOARGS, GetType_doc},
- {"setType", (PyCFunction) BL_ShapeActionActuator::sPySetType, METH_NOARGS, SetType_doc},
+ {"setAction", (PyCFunction) BL_ShapeActionActuator::sPySetAction, METH_VARARGS, (PY_METHODCHAR)SetAction_doc},
+ {"setStart", (PyCFunction) BL_ShapeActionActuator::sPySetStart, METH_VARARGS, (PY_METHODCHAR)SetStart_doc},
+ {"setEnd", (PyCFunction) BL_ShapeActionActuator::sPySetEnd, METH_VARARGS, (PY_METHODCHAR)SetEnd_doc},
+ {"setBlendin", (PyCFunction) BL_ShapeActionActuator::sPySetBlendin, METH_VARARGS, (PY_METHODCHAR)SetBlendin_doc},
+ {"setPriority", (PyCFunction) BL_ShapeActionActuator::sPySetPriority, METH_VARARGS, (PY_METHODCHAR)SetPriority_doc},
+ {"setFrame", (PyCFunction) BL_ShapeActionActuator::sPySetFrame, METH_VARARGS, (PY_METHODCHAR)SetFrame_doc},
+ {"setProperty", (PyCFunction) BL_ShapeActionActuator::sPySetProperty, METH_VARARGS, (PY_METHODCHAR)SetProperty_doc},
+ {"setFrameProperty", (PyCFunction) BL_ShapeActionActuator::sPySetFrameProperty, METH_VARARGS, (PY_METHODCHAR)SetFrameProperty_doc},
+ {"setBlendtime", (PyCFunction) BL_ShapeActionActuator::sPySetBlendtime, METH_VARARGS, (PY_METHODCHAR)SetBlendtime_doc},
+
+ {"getAction", (PyCFunction) BL_ShapeActionActuator::sPyGetAction, METH_NOARGS, (PY_METHODCHAR)GetAction_doc},
+ {"getStart", (PyCFunction) BL_ShapeActionActuator::sPyGetStart, METH_NOARGS, (PY_METHODCHAR)GetStart_doc},
+ {"getEnd", (PyCFunction) BL_ShapeActionActuator::sPyGetEnd, METH_NOARGS, (PY_METHODCHAR)GetEnd_doc},
+ {"getBlendin", (PyCFunction) BL_ShapeActionActuator::sPyGetBlendin, METH_NOARGS, (PY_METHODCHAR)GetBlendin_doc},
+ {"getPriority", (PyCFunction) BL_ShapeActionActuator::sPyGetPriority, METH_NOARGS, (PY_METHODCHAR)GetPriority_doc},
+ {"getFrame", (PyCFunction) BL_ShapeActionActuator::sPyGetFrame, METH_NOARGS, (PY_METHODCHAR)GetFrame_doc},
+ {"getProperty", (PyCFunction) BL_ShapeActionActuator::sPyGetProperty, METH_NOARGS, (PY_METHODCHAR)GetProperty_doc},
+ {"getFrameProperty", (PyCFunction) BL_ShapeActionActuator::sPyGetFrameProperty, METH_NOARGS, (PY_METHODCHAR)GetFrameProperty_doc},
+ {"getType", (PyCFunction) BL_ShapeActionActuator::sPyGetType, METH_NOARGS, (PY_METHODCHAR)GetType_doc},
+ {"setType", (PyCFunction) BL_ShapeActionActuator::sPySetType, METH_NOARGS, (PY_METHODCHAR)SetType_doc},
{NULL,NULL} //Sentinel
};
@@ -459,7 +572,7 @@ PyObject* BL_ShapeActionActuator::_getattr(const STR_String& attr) {
}
/* setStart */
-char BL_ShapeActionActuator::GetAction_doc[] =
+const char BL_ShapeActionActuator::GetAction_doc[] =
"getAction()\n"
"\tReturns a string containing the name of the current action.\n";
@@ -471,7 +584,7 @@ PyObject* BL_ShapeActionActuator::PyGetAction(PyObject* self) {
}
/* getProperty */
-char BL_ShapeActionActuator::GetProperty_doc[] =
+const char BL_ShapeActionActuator::GetProperty_doc[] =
"getProperty()\n"
"\tReturns the name of the property to be used in FromProp mode.\n";
@@ -484,7 +597,7 @@ PyObject* BL_ShapeActionActuator::PyGetProperty(PyObject* self) {
}
/* getFrame */
-char BL_ShapeActionActuator::GetFrame_doc[] =
+const char BL_ShapeActionActuator::GetFrame_doc[] =
"getFrame()\n"
"\tReturns the current frame number.\n";
@@ -497,7 +610,7 @@ PyObject* BL_ShapeActionActuator::PyGetFrame(PyObject* self) {
}
/* getEnd */
-char BL_ShapeActionActuator::GetEnd_doc[] =
+const char BL_ShapeActionActuator::GetEnd_doc[] =
"getEnd()\n"
"\tReturns the last frame of the action.\n";
@@ -510,7 +623,7 @@ PyObject* BL_ShapeActionActuator::PyGetEnd(PyObject* self) {
}
/* getStart */
-char BL_ShapeActionActuator::GetStart_doc[] =
+const char BL_ShapeActionActuator::GetStart_doc[] =
"getStart()\n"
"\tReturns the starting frame of the action.\n";
@@ -523,7 +636,7 @@ PyObject* BL_ShapeActionActuator::PyGetStart(PyObject* self) {
}
/* getBlendin */
-char BL_ShapeActionActuator::GetBlendin_doc[] =
+const char BL_ShapeActionActuator::GetBlendin_doc[] =
"getBlendin()\n"
"\tReturns the number of interpolation animation frames to be\n"
"\tgenerated when this actuator is triggered.\n";
@@ -537,7 +650,7 @@ PyObject* BL_ShapeActionActuator::PyGetBlendin(PyObject* self) {
}
/* getPriority */
-char BL_ShapeActionActuator::GetPriority_doc[] =
+const char BL_ShapeActionActuator::GetPriority_doc[] =
"getPriority()\n"
"\tReturns the priority for this actuator. Actuators with lower\n"
"\tPriority numbers will override actuators with higher numbers.\n";
@@ -551,7 +664,7 @@ PyObject* BL_ShapeActionActuator::PyGetPriority(PyObject* self) {
}
/* setAction */
-char BL_ShapeActionActuator::SetAction_doc[] =
+const char BL_ShapeActionActuator::SetAction_doc[] =
"setAction(action, (reset))\n"
"\t - action : The name of the action to set as the current action.\n"
"\t Should be an action with Shape channels.\n"
@@ -591,7 +704,7 @@ PyObject* BL_ShapeActionActuator::PySetAction(PyObject* self,
}
/* setStart */
-char BL_ShapeActionActuator::SetStart_doc[] =
+const char BL_ShapeActionActuator::SetStart_doc[] =
"setStart(start)\n"
"\t - start : Specifies the starting frame of the animation.\n";
@@ -612,7 +725,7 @@ PyObject* BL_ShapeActionActuator::PySetStart(PyObject* self,
}
/* setEnd */
-char BL_ShapeActionActuator::SetEnd_doc[] =
+const char BL_ShapeActionActuator::SetEnd_doc[] =
"setEnd(end)\n"
"\t - end : Specifies the ending frame of the animation.\n";
@@ -633,7 +746,7 @@ PyObject* BL_ShapeActionActuator::PySetEnd(PyObject* self,
}
/* setBlendin */
-char BL_ShapeActionActuator::SetBlendin_doc[] =
+const char BL_ShapeActionActuator::SetBlendin_doc[] =
"setBlendin(blendin)\n"
"\t - blendin : Specifies the number of frames of animation to generate\n"
"\t when making transitions between actions.\n";
@@ -655,7 +768,7 @@ PyObject* BL_ShapeActionActuator::PySetBlendin(PyObject* self,
}
/* setBlendtime */
-char BL_ShapeActionActuator::SetBlendtime_doc[] =
+const char BL_ShapeActionActuator::SetBlendtime_doc[] =
"setBlendtime(blendtime)\n"
"\t - blendtime : Allows the script to directly modify the internal timer\n"
"\t used when generating transitions between actions. This\n"
@@ -682,7 +795,7 @@ PyObject* BL_ShapeActionActuator::PySetBlendtime(PyObject* self,
}
/* setPriority */
-char BL_ShapeActionActuator::SetPriority_doc[] =
+const char BL_ShapeActionActuator::SetPriority_doc[] =
"setPriority(priority)\n"
"\t - priority : Specifies the new priority. Actuators will lower\n"
"\t priority numbers will override actuators with higher\n"
@@ -704,8 +817,22 @@ PyObject* BL_ShapeActionActuator::PySetPriority(PyObject* self,
Py_RETURN_NONE;
}
+/* getProperty */
+const char BL_ShapeActionActuator::GetFrameProperty_doc[] =
+"getFrameProperty()\n"
+"\tReturns the name of the property, that is set to the current frame number.\n";
+
+PyObject* BL_ShapeActionActuator::PyGetFrameProperty(PyObject* self) {
+ PyObject *result;
+
+ result = Py_BuildValue("s", (const char *)m_framepropname);
+
+ return result;
+}
+
+
/* setFrame */
-char BL_ShapeActionActuator::SetFrame_doc[] =
+const char BL_ShapeActionActuator::SetFrame_doc[] =
"setFrame(frame)\n"
"\t - frame : Specifies the new current frame for the animation\n";
@@ -730,7 +857,7 @@ PyObject* BL_ShapeActionActuator::PySetFrame(PyObject* self,
}
/* setProperty */
-char BL_ShapeActionActuator::SetProperty_doc[] =
+const char BL_ShapeActionActuator::SetProperty_doc[] =
"setProperty(prop)\n"
"\t - prop : A string specifying the property name to be used in\n"
"\t FromProp playback mode.\n";
@@ -751,8 +878,29 @@ PyObject* BL_ShapeActionActuator::PySetProperty(PyObject* self,
Py_RETURN_NONE;
}
+/* setFrameProperty */
+const char BL_ShapeActionActuator::SetFrameProperty_doc[] =
+"setFrameProperty(prop)\n"
+"\t - prop : A string specifying the property of the frame set up update.\n";
+
+PyObject* BL_ShapeActionActuator::PySetFrameProperty(PyObject* self,
+ PyObject* args,
+ PyObject* kwds) {
+ char *string;
+
+ if (PyArg_ParseTuple(args,"s",&string))
+ {
+ m_framepropname = string;
+ }
+ else {
+ return NULL;
+ }
+
+ Py_RETURN_NONE;
+}
+
/* getType */
-char BL_ShapeActionActuator::GetType_doc[] =
+const char BL_ShapeActionActuator::GetType_doc[] =
"getType()\n"
"\tReturns the operation mode of the actuator.\n";
PyObject* BL_ShapeActionActuator::PyGetType(PyObject* self) {
@@ -760,7 +908,7 @@ PyObject* BL_ShapeActionActuator::PyGetType(PyObject* self) {
}
/* setType */
-char BL_ShapeActionActuator::SetType_doc[] =
+const char BL_ShapeActionActuator::SetType_doc[] =
"setType(mode)\n"
"\t - mode: Play (0), Flipper (2), LoopStop (3), LoopEnd (4) or Property (6)\n"
"\tSet the operation mode of the actuator.\n";
diff --git a/source/gameengine/Converter/BL_ShapeActionActuator.h b/source/gameengine/Converter/BL_ShapeActionActuator.h
index 10cbe9f1ac3..92f75d12764 100644
--- a/source/gameengine/Converter/BL_ShapeActionActuator.h
+++ b/source/gameengine/Converter/BL_ShapeActionActuator.h
@@ -42,6 +42,7 @@ public:
Py_Header;
BL_ShapeActionActuator(SCA_IObject* gameobj,
const STR_String& propname,
+ const STR_String& framepropname,
float starttime,
float endtime,
struct bAction *action,
@@ -66,6 +67,7 @@ public:
m_playtype(playtype),
m_priority(priority),
m_action(action),
+ m_framepropname(framepropname),
m_propname(propname)
{
};
@@ -84,6 +86,7 @@ public:
KX_PYMETHOD_DOC(BL_ShapeActionActuator,SetEnd);
KX_PYMETHOD_DOC(BL_ShapeActionActuator,SetFrame);
KX_PYMETHOD_DOC(BL_ShapeActionActuator,SetProperty);
+ KX_PYMETHOD_DOC(BL_ShapeActionActuator,SetFrameProperty);
KX_PYMETHOD_DOC(BL_ShapeActionActuator,SetBlendtime);
KX_PYMETHOD_DOC(BL_ShapeActionActuator,SetChannel);
@@ -94,6 +97,7 @@ public:
KX_PYMETHOD_DOC_NOARGS(BL_ShapeActionActuator,GetEnd);
KX_PYMETHOD_DOC_NOARGS(BL_ShapeActionActuator,GetFrame);
KX_PYMETHOD_DOC_NOARGS(BL_ShapeActionActuator,GetProperty);
+ KX_PYMETHOD_DOC_NOARGS(BL_ShapeActionActuator,GetFrameProperty);
// KX_PYMETHOD(BL_ActionActuator,GetChannel);
KX_PYMETHOD_DOC_NOARGS(BL_ShapeActionActuator,GetType);
KX_PYMETHOD_DOC(BL_ShapeActionActuator,SetType);
@@ -126,6 +130,7 @@ protected:
short m_priority;
struct bAction *m_action;
STR_String m_propname;
+ STR_String m_framepropname;
vector<float> m_blendshape;
};
diff --git a/source/gameengine/Converter/BL_ShapeDeformer.cpp b/source/gameengine/Converter/BL_ShapeDeformer.cpp
index d3fbb795b23..264deb26eb0 100644
--- a/source/gameengine/Converter/BL_ShapeDeformer.cpp
+++ b/source/gameengine/Converter/BL_ShapeDeformer.cpp
@@ -68,7 +68,7 @@ BL_ShapeDeformer::~BL_ShapeDeformer()
{
};
-RAS_Deformer *BL_ShapeDeformer::GetReplica()
+RAS_Deformer *BL_ShapeDeformer::GetReplica(class KX_GameObject* replica)
{
BL_ShapeDeformer *result;
@@ -109,12 +109,10 @@ bool BL_ShapeDeformer::ExecuteShapeDrivers(void)
vector<IpoCurve*>::iterator it;
void *poin;
int type;
+
// the shape drivers use the bone matrix as input. Must
// update the matrix now
- Object* par_arma = m_armobj->GetArmatureObject();
m_armobj->ApplyPose();
- where_is_pose( par_arma );
- PoseApplied(true);
for (it=m_shapeDrivers.begin(); it!=m_shapeDrivers.end(); it++) {
// no need to set a specific time: this curve has a driver
@@ -124,7 +122,10 @@ bool BL_ShapeDeformer::ExecuteShapeDrivers(void)
if (poin)
write_ipo_poin(poin, type, icu->curval);
}
+
ForceUpdate();
+ m_armobj->RestorePose();
+
return true;
}
return false;
diff --git a/source/gameengine/Converter/BL_ShapeDeformer.h b/source/gameengine/Converter/BL_ShapeDeformer.h
index d3d699b8ddc..b5443ae4dd1 100644
--- a/source/gameengine/Converter/BL_ShapeDeformer.h
+++ b/source/gameengine/Converter/BL_ShapeDeformer.h
@@ -43,17 +43,6 @@ struct IpoCurve;
class BL_ShapeDeformer : public BL_SkinDeformer
{
public:
- virtual void Relink(GEN_Map<class GEN_HashedPtr, void*>*map)
- {
- void **h_obj = (*map)[m_gameobj];
- if (h_obj){
- m_gameobj = (BL_DeformableGameObject*)(*h_obj);
- }
- else
- m_gameobj=NULL;
- // relink the underlying skin deformer
- BL_SkinDeformer::Relink(map);
- };
BL_ShapeDeformer(BL_DeformableGameObject *gameobj,
Object *bmeshobj,
BL_SkinMeshObject *mesh)
@@ -77,7 +66,7 @@ public:
};
virtual void ProcessReplica();
- virtual RAS_Deformer *GetReplica();
+ virtual RAS_Deformer *GetReplica(class KX_GameObject* replica);
virtual ~BL_ShapeDeformer();
bool Update (void);
diff --git a/source/gameengine/Converter/BL_SkinDeformer.cpp b/source/gameengine/Converter/BL_SkinDeformer.cpp
index f96c40c098f..d8563763954 100644
--- a/source/gameengine/Converter/BL_SkinDeformer.cpp
+++ b/source/gameengine/Converter/BL_SkinDeformer.cpp
@@ -99,9 +99,26 @@ BL_SkinDeformer::~BL_SkinDeformer()
m_armobj->Release();
}
+void BL_SkinDeformer::Relink(GEN_Map<class GEN_HashedPtr, void*>*map)
+{
+ if (m_armobj) {
+ void **h_obj = (*map)[m_armobj];
+
+ if (h_obj)
+ SetArmature( (BL_ArmatureObject*)(*h_obj) );
+ else
+ m_armobj=NULL;
+ }
+
+ BL_MeshDeformer::Relink(map);
+}
+
bool BL_SkinDeformer::Apply(RAS_IPolyMaterial *mat)
{
- size_t i, j;
+ RAS_MeshSlot::iterator it;
+ RAS_MeshMaterial *mmat;
+ RAS_MeshSlot *slot;
+ size_t i;
// update the vertex in m_transverts
Update();
@@ -110,16 +127,18 @@ bool BL_SkinDeformer::Apply(RAS_IPolyMaterial *mat)
// Duplicated objects with more than one ploymaterial (=multiple mesh slot per object)
// share the same mesh (=the same cache). As the rendering is done per polymaterial
// cycling through the objects, the entire mesh cache cannot be updated in one shot.
- vecVertexArray& vertexarrays = m_pMeshObject->GetVertexCache(mat);
+ mmat = m_pMeshObject->GetMeshMaterial(mat);
+ if(!mmat->m_slots[(void*)m_gameobj])
+ return true;
- // For each array
- for (i=0; i<vertexarrays.size(); i++) {
- KX_VertexArray& vertexarray = (*vertexarrays[i]);
+ slot = *mmat->m_slots[(void*)m_gameobj];
- // For each vertex
+ // for each array
+ for(slot->begin(it); !slot->end(it); slot->next(it)) {
+ // for each vertex
// copy the untransformed data from the original mvert
- for (j=0; j<vertexarray.size(); j++) {
- RAS_TexVert& v = vertexarray[j];
+ for(i=it.startvertex; i<it.endvertex; i++) {
+ RAS_TexVert& v = it.vertex[i];
v.SetXYZ(m_transverts[v.getOrigIndex()]);
}
}
@@ -127,7 +146,7 @@ bool BL_SkinDeformer::Apply(RAS_IPolyMaterial *mat)
return true;
}
-RAS_Deformer *BL_SkinDeformer::GetReplica()
+RAS_Deformer *BL_SkinDeformer::GetReplica(class KX_GameObject* replica)
{
BL_SkinDeformer *result;
@@ -147,14 +166,10 @@ bool BL_SkinDeformer::Update(void)
/* See if the armature has been updated for this frame */
if (PoseUpdated()){
float obmat[4][4]; // the original object matrice
-
+
/* XXX note: where_is_pose() (from BKE_armature.h) calculates all matrices needed to start deforming */
/* but it requires the blender object pointer... */
Object* par_arma = m_armobj->GetArmatureObject();
- if (!PoseApplied()){
- m_armobj->ApplyPose();
- where_is_pose( par_arma );
- }
/* store verts locally */
VerifyStorage();
@@ -163,6 +178,8 @@ bool BL_SkinDeformer::Update(void)
for (int v =0; v<m_bmesh->totvert; v++)
VECCOPY(m_transverts[v], m_bmesh->mvert[v].co);
+ m_armobj->ApplyPose();
+
// save matrix first
Mat4CpyMat4(obmat, m_objMesh->obmat);
// set reference matrix
@@ -179,11 +196,13 @@ bool BL_SkinDeformer::Update(void)
/* Update the current frame */
m_lastArmaUpdate=m_armobj->GetLastFrame();
- /* reset for next frame */
- PoseApplied(false);
+
+ m_armobj->RestorePose();
+
/* indicate that the m_transverts and normals are up to date */
return true;
}
+
return false;
}
diff --git a/source/gameengine/Converter/BL_SkinDeformer.h b/source/gameengine/Converter/BL_SkinDeformer.h
index d3fc5ae2a81..f87860021c6 100644
--- a/source/gameengine/Converter/BL_SkinDeformer.h
+++ b/source/gameengine/Converter/BL_SkinDeformer.h
@@ -50,17 +50,7 @@ class BL_SkinDeformer : public BL_MeshDeformer
{
public:
// void SetArmatureController (BL_ArmatureController *cont);
- virtual void Relink(GEN_Map<class GEN_HashedPtr, void*>*map)
- {
- if (m_armobj){
- void **h_obj = (*map)[m_armobj];
- if (h_obj){
- SetArmature( (BL_ArmatureObject*)(*h_obj) );
- }
- else
- m_armobj=NULL;
- }
- }
+ virtual void Relink(GEN_Map<class GEN_HashedPtr, void*>*map);
void SetArmature (class BL_ArmatureObject *armobj);
BL_SkinDeformer(BL_DeformableGameObject *gameobj,
@@ -77,14 +67,10 @@ public:
BL_ArmatureObject* arma = NULL);
virtual void ProcessReplica();
- virtual RAS_Deformer *GetReplica();
+ virtual RAS_Deformer *GetReplica(class KX_GameObject* replica);
virtual ~BL_SkinDeformer();
bool Update (void);
bool Apply (class RAS_IPolyMaterial *polymat);
- bool PoseApplied()
- { return m_poseApplied; }
- void PoseApplied(bool applied)
- { m_poseApplied = applied; }
bool PoseUpdated(void)
{
if (m_armobj && m_lastArmaUpdate!=m_armobj->GetLastFrame()) {
diff --git a/source/gameengine/Converter/BL_SkinMeshObject.cpp b/source/gameengine/Converter/BL_SkinMeshObject.cpp
index fa215df1e1c..eb3f9d0588d 100644
--- a/source/gameengine/Converter/BL_SkinMeshObject.cpp
+++ b/source/gameengine/Converter/BL_SkinMeshObject.cpp
@@ -28,42 +28,69 @@
* Deformer that supports armature skinning
*/
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
#ifdef WIN32
#pragma warning (disable:4786) // get rid of stupid stl-visual compiler debug warning
#endif //WIN32
-#include "RAS_IPolygonMaterial.h"
-#include "BL_SkinMeshObject.h"
-#include "BL_DeformableGameObject.h"
+
+#include "MEM_guardedalloc.h"
+
+#include "DNA_key_types.h"
#include "DNA_mesh_types.h"
#include "DNA_meshdata_types.h"
-#include "KX_GameObject.h"
+
#include "RAS_BucketManager.h"
+#include "RAS_IPolygonMaterial.h"
-//void BL_SkinMeshObject::Bucketize(double* oglmatrix,void* clientobj,bool useObjectColor,const MT_Vector4& rgbavec,RAS_BucketManager* bucketmgr)
-void BL_SkinMeshObject::Bucketize(double* oglmatrix,void* clientobj,bool useObjectColor,const MT_Vector4& rgbavec)
-{
+#include "KX_GameObject.h"
+
+#include "BL_SkinMeshObject.h"
+#include "BL_DeformableGameObject.h"
- KX_MeshSlot ms;
- ms.m_clientObj = clientobj;
- ms.m_mesh = this;
- ms.m_OpenGLMatrix = oglmatrix;
- ms.m_bObjectColor = useObjectColor;
- ms.m_RGBAcolor = rgbavec;
- ms.m_pDeformer = ((BL_DeformableGameObject*)clientobj)->m_pDeformer;
-
- for (RAS_MaterialBucket::Set::iterator it = m_materials.begin();it!=m_materials.end();it++)
+BL_SkinMeshObject::BL_SkinMeshObject(Mesh* mesh, int lightlayer)
+ : RAS_MeshObject (mesh, lightlayer)
+{
+ m_bDeformed = true;
+
+ if (m_mesh && m_mesh->key)
{
+ KeyBlock *kb;
+ int count=0;
+ // initialize weight cache for shape objects
+ // count how many keys in this mesh
+ for(kb= (KeyBlock*)m_mesh->key->block.first; kb; kb= (KeyBlock*)kb->next)
+ count++;
+ m_cacheWeightIndex.resize(count,-1);
+ }
+}
- RAS_MaterialBucket* materialbucket = (*it);
+BL_SkinMeshObject::~BL_SkinMeshObject()
+{
+ if (m_mesh && m_mesh->key)
+ {
+ KeyBlock *kb;
+ // remove the weight cache to avoid memory leak
+ for(kb= (KeyBlock*)m_mesh->key->block.first; kb; kb= (KeyBlock*)kb->next) {
+ if(kb->weights)
+ MEM_freeN(kb->weights);
+ kb->weights= NULL;
+ }
+ }
+}
+
+void BL_SkinMeshObject::UpdateBuckets(void* clientobj,double* oglmatrix,bool useObjectColor,const MT_Vector4& rgbavec, bool visible, bool culled)
+{
+ list<RAS_MeshMaterial>::iterator it;
+ list<RAS_MeshSlot*>::iterator sit;
+
+ for(it = m_materials.begin();it!=m_materials.end();++it) {
+ if(!it->m_slots[clientobj])
+ continue;
-// KX_ArrayOptimizer* oa = GetArrayOptimizer(materialbucket->GetPolyMaterial());
- materialbucket->SetMeshSlot(ms);
+ RAS_MeshSlot *slot = *it->m_slots[clientobj];
+ slot->m_pDeformer = ((BL_DeformableGameObject*)clientobj)->GetDeformer();
}
+ RAS_MeshObject::UpdateBuckets(clientobj, oglmatrix, useObjectColor, rgbavec, visible, culled);
}
static int get_def_index(Object* ob, const char* vgroup)
@@ -74,6 +101,7 @@ static int get_def_index(Object* ob, const char* vgroup)
for (curdef = (bDeformGroup*)ob->defbase.first; curdef; curdef=(bDeformGroup*)curdef->next, index++)
if (!strcmp(curdef->name, vgroup))
return index;
+
return -1;
}
diff --git a/source/gameengine/Converter/BL_SkinMeshObject.h b/source/gameengine/Converter/BL_SkinMeshObject.h
index c21fb64204b..8544a2b958c 100644
--- a/source/gameengine/Converter/BL_SkinMeshObject.h
+++ b/source/gameengine/Converter/BL_SkinMeshObject.h
@@ -33,62 +33,27 @@
#ifdef WIN32
#pragma warning (disable:4786) // get rid of stupid stl-visual compiler debug warning
#endif //WIN32
-#include "MEM_guardedalloc.h"
+
#include "RAS_MeshObject.h"
#include "RAS_Deformer.h"
#include "RAS_IPolygonMaterial.h"
#include "BL_MeshDeformer.h"
-#include "DNA_mesh_types.h"
-#include "DNA_key_types.h"
-#include "DNA_meshdata_types.h"
-
class BL_SkinMeshObject : public RAS_MeshObject
{
-
-// enum { BUCKET_MAX_INDICES = 16384};//2048};//8192};
-// enum { BUCKET_MAX_TRIANGLES = 4096};
-
protected:
vector<int> m_cacheWeightIndex;
public:
- void Bucketize(double* oglmatrix,void* clientobj,bool useObjectColor,const MT_Vector4& rgbavec);
-// void Bucketize(double* oglmatrix,void* clientobj,bool useObjectColor,const MT_Vector4& rgbavec,class RAS_BucketManager* bucketmgr);
-
- BL_SkinMeshObject(Mesh* mesh, int lightlayer) : RAS_MeshObject (mesh, lightlayer)
- {
- m_class = 1;
- if (m_mesh && m_mesh->key)
- {
- KeyBlock *kb;
- int count=0;
- // initialize weight cache for shape objects
- // count how many keys in this mesh
- for(kb= (KeyBlock*)m_mesh->key->block.first; kb; kb= (KeyBlock*)kb->next)
- count++;
- m_cacheWeightIndex.resize(count,-1);
- }
- };
+ BL_SkinMeshObject(Mesh* mesh, int lightlayer);
+ ~BL_SkinMeshObject();
- virtual ~BL_SkinMeshObject()
- {
- if (m_mesh && m_mesh->key)
- {
- KeyBlock *kb;
- // remove the weight cache to avoid memory leak
- for(kb= (KeyBlock*)m_mesh->key->block.first; kb; kb= (KeyBlock*)kb->next) {
- if(kb->weights)
- MEM_freeN(kb->weights);
- kb->weights= NULL;
- }
- }
- };
+ void UpdateBuckets(void* clientobj, double* oglmatrix,
+ bool useObjectColor, const MT_Vector4& rgbavec, bool visible, bool culled);
// for shape keys,
void CheckWeightCache(struct Object* obj);
-
};
#endif
diff --git a/source/gameengine/Converter/CMakeLists.txt b/source/gameengine/Converter/CMakeLists.txt
index adb7304b10e..217bdb30907 100644
--- a/source/gameengine/Converter/CMakeLists.txt
+++ b/source/gameengine/Converter/CMakeLists.txt
@@ -64,6 +64,7 @@ SET(INC
../../../source/gameengine/Network/LoopBackNetwork
../../../source/blender/misc
../../../source/blender/blenloader
+ ../../../source/blender/gpu
../../../extern/bullet2/src
../../../extern/solid
${PYTHON_INC}
diff --git a/source/gameengine/Converter/KX_BlenderSceneConverter.cpp b/source/gameengine/Converter/KX_BlenderSceneConverter.cpp
index de91bce2ab1..7eec93dc402 100644
--- a/source/gameengine/Converter/KX_BlenderSceneConverter.cpp
+++ b/source/gameengine/Converter/KX_BlenderSceneConverter.cpp
@@ -184,20 +184,21 @@ bool KX_BlenderSceneConverter::TryAndLoadNewFile()
return result;
}
-
+Scene *KX_BlenderSceneConverter::GetBlenderSceneForName(const STR_String& name)
+{
+ Scene *sce;
/**
* Find the specified scene by name, or the first
* scene if nothing matches (shouldn't happen).
*/
-static struct Scene *GetSceneForName2(struct Main *maggie, const STR_String& scenename) {
- Scene *sce;
- for (sce= (Scene*) maggie->scene.first; sce; sce= (Scene*) sce->id.next)
- if (scenename == (sce->id.name+2))
+ for (sce= (Scene*) m_maggie->scene.first; sce; sce= (Scene*) sce->id.next)
+ if (name == (sce->id.name+2))
return sce;
- return (Scene*) maggie->scene.first;
+ return (Scene*)m_maggie->scene.first;
+
}
#include "KX_PythonInit.h"
@@ -245,6 +246,11 @@ struct BlenderDebugDraw : public btIDebugDraw
{
return m_debugMode;
}
+ ///todo: find out if Blender can do this
+ virtual void draw3dText(const btVector3& location,const char* textString)
+ {
+
+ }
};
@@ -258,7 +264,7 @@ void KX_BlenderSceneConverter::ConvertScene(const STR_String& scenename,
class RAS_ICanvas* canvas)
{
//find out which physics engine
- Scene *blenderscene = GetSceneForName2(m_maggie, scenename);
+ Scene *blenderscene = GetBlenderSceneForName(scenename);
e_PhysicsEngine physics_engine = UseBullet;
// hook for registration function during conversion.
@@ -495,7 +501,17 @@ void KX_BlenderSceneConverter::RegisterGameObject(
void KX_BlenderSceneConverter::UnregisterGameObject(
KX_GameObject *gameobject)
{
- m_map_gameobject_to_blender.remove(CHashedPtr(gameobject));
+ CHashedPtr gptr(gameobject);
+ struct Object **bobp= m_map_gameobject_to_blender[gptr];
+ if (bobp) {
+ CHashedPtr bptr(*bobp);
+ KX_GameObject **gobp= m_map_blender_to_gameobject[bptr];
+ if (gobp && *gobp == gameobject)
+ // also maintain m_map_blender_to_gameobject if the gameobject
+ // being removed is matching the blender object
+ m_map_blender_to_gameobject.remove(bptr);
+ m_map_gameobject_to_blender.remove(gptr);
+ }
}
@@ -644,13 +660,13 @@ extern "C"
{
Ipo *add_ipo( char *name, int idcode );
char *getIpoCurveName( IpoCurve * icu );
- struct IpoCurve *verify_ipocurve(struct ID *, short, char *, char *, char *, int);
+ struct IpoCurve *verify_ipocurve(struct ID *, short, char *, char *, char *, int, short);
void testhandles_ipocurve(struct IpoCurve *icu);
+ void insert_vert_icu(struct IpoCurve *, float, float, short);
void Mat3ToEul(float tmat[][3], float *eul);
-
}
-IpoCurve* findIpoCurve(IpoCurve* first,char* searchName)
+IpoCurve* findIpoCurve(IpoCurve* first, const char* searchName)
{
IpoCurve* icu1;
for( icu1 = first; icu1; icu1 = icu1->next )
@@ -818,7 +834,7 @@ void KX_BlenderSceneConverter::WritePhysicsObjectToAnimationIpo(int frameNumber)
KX_GameObject* gameObj = (KX_GameObject*)parentList->GetValue(g);
if (gameObj->IsDynamic())
{
- KX_IPhysicsController* physCtrl = gameObj->GetPhysicsController();
+ //KX_IPhysicsController* physCtrl = gameObj->GetPhysicsController();
Object* blenderObject = FindBlenderObject(gameObj);
if (blenderObject)
@@ -846,7 +862,7 @@ void KX_BlenderSceneConverter::WritePhysicsObjectToAnimationIpo(int frameNumber)
- const MT_Vector3& scale = gameObj->NodeGetWorldScaling();
+ //const MT_Vector3& scale = gameObj->NodeGetWorldScaling();
const MT_Point3& position = gameObj->NodeGetWorldPosition();
Ipo* ipo = blenderObject->ipo;
@@ -857,27 +873,27 @@ void KX_BlenderSceneConverter::WritePhysicsObjectToAnimationIpo(int frameNumber)
IpoCurve *icu1 = findIpoCurve((IpoCurve *)ipo->curve.first,"LocX");
if (!icu1)
- icu1 = verify_ipocurve(&blenderObject->id, ipo->blocktype, NULL, NULL, NULL, OB_LOC_X);
+ icu1 = verify_ipocurve(&blenderObject->id, ipo->blocktype, NULL, NULL, NULL, OB_LOC_X, 1);
icu1 = findIpoCurve((IpoCurve *)ipo->curve.first,"LocY");
if (!icu1)
- icu1 = verify_ipocurve(&blenderObject->id, ipo->blocktype, NULL, NULL, NULL, OB_LOC_Y);
+ icu1 = verify_ipocurve(&blenderObject->id, ipo->blocktype, NULL, NULL, NULL, OB_LOC_Y, 1);
icu1 = findIpoCurve((IpoCurve *)ipo->curve.first,"LocZ");
if (!icu1)
- icu1 = verify_ipocurve(&blenderObject->id, ipo->blocktype, NULL, NULL, NULL, OB_LOC_Z);
+ icu1 = verify_ipocurve(&blenderObject->id, ipo->blocktype, NULL, NULL, NULL, OB_LOC_Z, 1);
icu1 = findIpoCurve((IpoCurve *)ipo->curve.first,"RotX");
if (!icu1)
- icu1 = verify_ipocurve(&blenderObject->id, ipo->blocktype, NULL, NULL, NULL, OB_ROT_X);
+ icu1 = verify_ipocurve(&blenderObject->id, ipo->blocktype, NULL, NULL, NULL, OB_ROT_X, 1);
icu1 = findIpoCurve((IpoCurve *)ipo->curve.first,"RotY");
if (!icu1)
- icu1 = verify_ipocurve(&blenderObject->id, ipo->blocktype, NULL, NULL, NULL, OB_ROT_Y);
+ icu1 = verify_ipocurve(&blenderObject->id, ipo->blocktype, NULL, NULL, NULL, OB_ROT_Y, 1);
icu1 = findIpoCurve((IpoCurve *)ipo->curve.first,"RotZ");
if (!icu1)
- icu1 = verify_ipocurve(&blenderObject->id, ipo->blocktype, NULL, NULL, NULL, OB_ROT_Z);
+ icu1 = verify_ipocurve(&blenderObject->id, ipo->blocktype, NULL, NULL, NULL, OB_ROT_Z, 1);
@@ -974,7 +990,7 @@ void KX_BlenderSceneConverter::TestHandlesPhysicsObjectToAnimationIpo()
KX_GameObject* gameObj = (KX_GameObject*)parentList->GetValue(g);
if (gameObj->IsDynamic())
{
- KX_IPhysicsController* physCtrl = gameObj->GetPhysicsController();
+ //KX_IPhysicsController* physCtrl = gameObj->GetPhysicsController();
Object* blenderObject = FindBlenderObject(gameObj);
if (blenderObject)
@@ -1002,8 +1018,8 @@ void KX_BlenderSceneConverter::TestHandlesPhysicsObjectToAnimationIpo()
- const MT_Vector3& scale = gameObj->NodeGetWorldScaling();
- const MT_Point3& position = gameObj->NodeGetWorldPosition();
+ //const MT_Vector3& scale = gameObj->NodeGetWorldScaling();
+ //const MT_Point3& position = gameObj->NodeGetWorldPosition();
Ipo* ipo = blenderObject->ipo;
if (ipo)
@@ -1013,27 +1029,27 @@ void KX_BlenderSceneConverter::TestHandlesPhysicsObjectToAnimationIpo()
IpoCurve *icu1 = findIpoCurve((IpoCurve *)ipo->curve.first,"LocX");
if (!icu1)
- icu1 = verify_ipocurve(&blenderObject->id, ipo->blocktype, NULL, NULL, NULL, OB_LOC_X);
+ icu1 = verify_ipocurve(&blenderObject->id, ipo->blocktype, NULL, NULL, NULL, OB_LOC_X, 1);
icu1 = findIpoCurve((IpoCurve *)ipo->curve.first,"LocY");
if (!icu1)
- icu1 = verify_ipocurve(&blenderObject->id, ipo->blocktype, NULL, NULL, NULL, OB_LOC_Y);
+ icu1 = verify_ipocurve(&blenderObject->id, ipo->blocktype, NULL, NULL, NULL, OB_LOC_Y, 1);
icu1 = findIpoCurve((IpoCurve *)ipo->curve.first,"LocZ");
if (!icu1)
- icu1 = verify_ipocurve(&blenderObject->id, ipo->blocktype, NULL, NULL, NULL, OB_LOC_Z);
+ icu1 = verify_ipocurve(&blenderObject->id, ipo->blocktype, NULL, NULL, NULL, OB_LOC_Z, 1);
icu1 = findIpoCurve((IpoCurve *)ipo->curve.first,"RotX");
if (!icu1)
- icu1 = verify_ipocurve(&blenderObject->id, ipo->blocktype, NULL, NULL, NULL, OB_ROT_X);
+ icu1 = verify_ipocurve(&blenderObject->id, ipo->blocktype, NULL, NULL, NULL, OB_ROT_X, 1);
icu1 = findIpoCurve((IpoCurve *)ipo->curve.first,"RotY");
if (!icu1)
- icu1 = verify_ipocurve(&blenderObject->id, ipo->blocktype, NULL, NULL, NULL, OB_ROT_Y);
+ icu1 = verify_ipocurve(&blenderObject->id, ipo->blocktype, NULL, NULL, NULL, OB_ROT_Y, 1);
icu1 = findIpoCurve((IpoCurve *)ipo->curve.first,"RotZ");
if (!icu1)
- icu1 = verify_ipocurve(&blenderObject->id, ipo->blocktype, NULL, NULL, NULL, OB_ROT_Z);
+ icu1 = verify_ipocurve(&blenderObject->id, ipo->blocktype, NULL, NULL, NULL, OB_ROT_Z, 1);
diff --git a/source/gameengine/Converter/KX_BlenderSceneConverter.h b/source/gameengine/Converter/KX_BlenderSceneConverter.h
index e5d6ccc5caf..2317e952a0a 100644
--- a/source/gameengine/Converter/KX_BlenderSceneConverter.h
+++ b/source/gameengine/Converter/KX_BlenderSceneConverter.h
@@ -45,6 +45,7 @@ class BL_Material;
struct IpoCurve;
struct Main;
struct SpaceIpo;
+struct Scene;
class KX_BlenderSceneConverter : public KX_ISceneConverter
{
@@ -151,6 +152,7 @@ public:
virtual void SetGLSLMaterials(bool val);
virtual bool GetGLSLMaterials();
+ struct Scene* GetBlenderSceneForName(const STR_String& name);
};
#endif //__KX_BLENDERSCENECONVERTER_H
diff --git a/source/gameengine/Converter/KX_ConvertActuators.cpp b/source/gameengine/Converter/KX_ConvertActuators.cpp
index cb2521de9a4..d5f304c38e7 100644
--- a/source/gameengine/Converter/KX_ConvertActuators.cpp
+++ b/source/gameengine/Converter/KX_ConvertActuators.cpp
@@ -74,6 +74,8 @@
#include "BKE_text.h"
#include "BLI_blenlib.h"
+#define FILE_MAX 240 // repeated here to avoid dependency from BKE_utildefines.h
+
#include "KX_NetworkMessageActuator.h"
#ifdef WIN32
@@ -208,10 +210,12 @@ void BL_ConvertActuators(char* maggiename,
if (blenderobject->type==OB_MESH){
bActionActuator* actact = (bActionActuator*) bact->data;
STR_String propname = (actact->name ? actact->name : "");
+ STR_String propframe = (actact->frameProp ? actact->frameProp : "");
BL_ShapeActionActuator* tmpbaseact = new BL_ShapeActionActuator(
gameobj,
propname,
+ propframe,
actact->sta,
actact->end,
actact->act,
@@ -231,7 +235,8 @@ void BL_ConvertActuators(char* maggiename,
{
bIpoActuator* ipoact = (bIpoActuator*) bact->data;
bool ipochild = (ipoact->flag & ACT_IPOCHILD) !=0;
- STR_String propname = ( ipoact->name ? ipoact->name : "");
+ STR_String propname = ipoact->name;
+ STR_String frameProp = ipoact->frameProp;
// first bit?
bool ipo_as_force = (ipoact->flag & ACT_IPOFORCE);
bool local = (ipoact->flag & ACT_IPOLOCAL);
@@ -240,6 +245,7 @@ void BL_ConvertActuators(char* maggiename,
KX_IpoActuator* tmpbaseact = new KX_IpoActuator(
gameobj,
propname ,
+ frameProp,
ipoact->sta,
ipoact->end,
ipochild,
@@ -355,22 +361,26 @@ void BL_ConvertActuators(char* maggiename,
if (soundActuatorType != KX_SoundActuator::KX_SOUNDACT_NODEF)
{
- SND_SoundObject* sndobj = NULL;
+ SND_Scene* soundscene = scene->GetSoundScene();
+ STR_String samplename = "";
+ bool sampleisloaded = false;
- if (soundact->sound)
- {
- SND_Scene* soundscene = scene->GetSoundScene();
- STR_String samplename = soundact->sound->name;
+ if (soundact->sound) {
+ /* Need to convert the samplename into absolute path
+ * before checking if its loaded */
+ char fullpath[FILE_MAX];
- bool sampleisloaded = false;
+ /* dont modify soundact->sound->name, only change a copy */
+ BLI_strncpy(fullpath, soundact->sound->name, sizeof(fullpath));
+ BLI_convertstringcode(fullpath, maggiename);
+ samplename = fullpath;
/* let's see if the sample was already loaded */
if (soundscene->IsSampleLoaded(samplename))
{
sampleisloaded = true;
}
- else
- {
+ else {
/* if not, make it so */
PackedFile* pf = soundact->sound->newpackedfile;
@@ -383,21 +393,33 @@ void BL_ConvertActuators(char* maggiename,
/* or else load it from disk */
else
{
- /* but we need to convert the samplename into absolute pathname first */
- BLI_convertstringcode(soundact->sound->name, maggiename);
- samplename = soundact->sound->name;
-
- /* and now we can load it */
- if (soundscene->LoadSample(samplename, NULL, 0) > -1)
+ if (soundscene->LoadSample(samplename, NULL, 0) > -1) {
sampleisloaded = true;
+ }
+ else {
+ std::cout << "WARNING: Sound actuator \"" << bact->name <<
+ "\" from object \"" << blenderobject->id.name+2 <<
+ "\" failed to load sample." << std::endl;
+ }
}
}
-
- if (sampleisloaded)
- {
- sndobj = new SND_SoundObject();
- sndobj->SetSampleName(samplename.Ptr());
- sndobj->SetObjectName(bact->name);
+ } else {
+ std::cout << "WARNING: Sound actuator \"" << bact->name <<
+ "\" from object \"" << blenderobject->id.name+2 <<
+ "\" has no sound datablock." << std::endl;
+ }
+
+ /* Note, allowing actuators for sounds that are not there was added since 2.47
+ * This is because python may expect the actuator and raise an exception if it dosnt find it
+ * better just to add a dummy sound actuator. */
+ SND_SoundObject* sndobj = NULL;
+ if (sampleisloaded)
+ {
+ /* setup the SND_SoundObject */
+ sndobj = new SND_SoundObject();
+ sndobj->SetSampleName(samplename.Ptr());
+ sndobj->SetObjectName(bact->name);
+ if (soundact->sound) {
sndobj->SetRollOffFactor(soundact->sound->attenuation);
sndobj->SetGain(soundact->sound->volume);
sndobj->SetPitch(exp((soundact->sound->pitch / 12.0) * log(2.0)));
@@ -410,8 +432,9 @@ void BL_ConvertActuators(char* maggiename,
else
sndobj->SetLoopMode(SND_LOOP_NORMAL);
}
- else
+ else {
sndobj->SetLoopMode(SND_LOOP_OFF);
+ }
if (soundact->sound->flags & SOUND_FLAGS_PRIORITY)
sndobj->SetHighPriority(true);
@@ -422,22 +445,30 @@ void BL_ConvertActuators(char* maggiename,
sndobj->Set3D(true);
else
sndobj->Set3D(false);
-
- KX_SoundActuator* tmpsoundact =
- new KX_SoundActuator(gameobj,
- sndobj,
- scene->GetSoundScene(), // needed for replication!
- soundActuatorType,
- startFrame,
- stopFrame);
-
- tmpsoundact->SetName(bact->name);
- baseact = tmpsoundact;
- soundscene->AddObject(sndobj);
- } else {
- std::cout << "WARNING: Sound actuator " << bact->name << " failed to load sample." << std::endl;
+ }
+ else {
+ /* dummy values for a NULL sound
+ * see editsound.c - defaults are unlikely to change soon */
+ sndobj->SetRollOffFactor(1.0);
+ sndobj->SetGain(1.0);
+ sndobj->SetPitch(1.0);
+ sndobj->SetLoopMode(SND_LOOP_OFF);
+ sndobj->SetHighPriority(false);
+ sndobj->Set3D(false);
}
}
+ KX_SoundActuator* tmpsoundact =
+ new KX_SoundActuator(gameobj,
+ sndobj,
+ scene->GetSoundScene(), // needed for replication!
+ soundActuatorType,
+ startFrame,
+ stopFrame);
+
+ tmpsoundact->SetName(bact->name);
+ baseact = tmpsoundact;
+ if (sndobj)
+ soundscene->AddObject(sndobj);
}
break;
}
@@ -550,10 +581,16 @@ void BL_ConvertActuators(char* maggiename,
originalval = converter->FindGameObject(editobact->ob);
}
}
- MT_Vector3 linvelvec ( KX_BLENDERTRUNC(editobact->linVelocity[0]),
+ MT_Vector3 linvelvec (
+ KX_BLENDERTRUNC(editobact->linVelocity[0]),
KX_BLENDERTRUNC(editobact->linVelocity[1]),
KX_BLENDERTRUNC(editobact->linVelocity[2]));
-
+
+ MT_Vector3 angvelvec (
+ KX_BLENDERTRUNC(editobact->angVelocity[0]),
+ KX_BLENDERTRUNC(editobact->angVelocity[1]),
+ KX_BLENDERTRUNC(editobact->angVelocity[2]));
+
KX_SCA_AddObjectActuator* tmpaddact =
new KX_SCA_AddObjectActuator(
gameobj,
@@ -561,7 +598,9 @@ void BL_ConvertActuators(char* maggiename,
editobact->time,
scene,
linvelvec.getValue(),
- editobact->localflag!=0
+ (editobact->localflag & ACT_EDOB_LOCAL_LINV)!=0,
+ angvelvec.getValue(),
+ (editobact->localflag & ACT_EDOB_LOCAL_ANGV)!=0
);
//editobact->ob to gameobj
@@ -682,6 +721,40 @@ void BL_ConvertActuators(char* maggiename,
break;
}
prop = conact->matprop;
+ } else if (conact->type == ACT_CONST_TYPE_FH) {
+ switch (conact->mode) {
+ case ACT_CONST_DIRPX:
+ locrot = KX_ConstraintActuator::KX_ACT_CONSTRAINT_FHPX;
+ min = conact->minloc[0];
+ max = conact->maxloc[0];
+ break;
+ case ACT_CONST_DIRPY:
+ locrot = KX_ConstraintActuator::KX_ACT_CONSTRAINT_FHPY;
+ min = conact->minloc[1];
+ max = conact->maxloc[1];
+ break;
+ case ACT_CONST_DIRPZ:
+ locrot = KX_ConstraintActuator::KX_ACT_CONSTRAINT_FHPZ;
+ min = conact->minloc[2];
+ max = conact->maxloc[2];
+ break;
+ case ACT_CONST_DIRNX:
+ locrot = KX_ConstraintActuator::KX_ACT_CONSTRAINT_FHNX;
+ min = conact->minloc[0];
+ max = conact->maxloc[0];
+ break;
+ case ACT_CONST_DIRNY:
+ locrot = KX_ConstraintActuator::KX_ACT_CONSTRAINT_FHNY;
+ min = conact->minloc[1];
+ max = conact->maxloc[1];
+ break;
+ case ACT_CONST_DIRNZ:
+ locrot = KX_ConstraintActuator::KX_ACT_CONSTRAINT_FHNZ;
+ min = conact->minloc[2];
+ max = conact->maxloc[2];
+ break;
+ }
+ prop = conact->matprop;
} else {
switch (conact->flag) {
case ACT_CONST_LOCX:
@@ -843,6 +916,16 @@ void BL_ConvertActuators(char* maggiename,
mode = KX_GameActuator::KX_GAME_QUIT;
break;
}
+ case ACT_GAME_SAVECFG:
+ {
+ mode = KX_GameActuator::KX_GAME_SAVECFG;
+ break;
+ }
+ case ACT_GAME_LOADCFG:
+ {
+ mode = KX_GameActuator::KX_GAME_LOADCFG;
+ break;
+ }
default:
; /* flag error */
}
@@ -929,10 +1012,9 @@ void BL_ConvertActuators(char* maggiename,
bVisibilityActuator *vis_act = (bVisibilityActuator *) bact->data;
KX_VisibilityActuator * tmp_vis_act = NULL;
bool v = ((vis_act->flag & ACT_VISIBILITY_INVISIBLE) != 0);
+ bool recursive = ((vis_act->flag & ACT_VISIBILITY_RECURSIVE) != 0);
- tmp_vis_act =
- new KX_VisibilityActuator(gameobj,
- !v);
+ tmp_vis_act = new KX_VisibilityActuator(gameobj, !v, recursive);
baseact = tmp_vis_act;
}
@@ -1031,7 +1113,7 @@ void BL_ConvertActuators(char* maggiename,
{
bParentActuator *parAct = (bParentActuator *) bact->data;
int mode = KX_ParentActuator::KX_PARENT_NODEF;
- KX_GameObject *tmpgob;
+ KX_GameObject *tmpgob = NULL;
switch(parAct->type)
{
diff --git a/source/gameengine/Converter/KX_ConvertProperties.cpp b/source/gameengine/Converter/KX_ConvertProperties.cpp
index aae8752671f..dfbc6f0c48d 100644
--- a/source/gameengine/Converter/KX_ConvertProperties.cpp
+++ b/source/gameengine/Converter/KX_ConvertProperties.cpp
@@ -132,6 +132,10 @@ void BL_ConvertProperties(Object* object,KX_GameObject* gameobj,SCA_TimeEventMan
prop = prop->next;
}
-
-
+ // check if state needs to be debugged
+ if (object->scaflag & OB_DEBUGSTATE)
+ {
+ // reserve name for object state
+ scene->AddDebugProperty(gameobj,STR_String("__state__"));
+ }
}
diff --git a/source/gameengine/Converter/KX_ConvertSensors.cpp b/source/gameengine/Converter/KX_ConvertSensors.cpp
index 5e433bb821b..be0bb8103c0 100644
--- a/source/gameengine/Converter/KX_ConvertSensors.cpp
+++ b/source/gameengine/Converter/KX_ConvertSensors.cpp
@@ -65,6 +65,7 @@ probably misplaced */
#include "SCA_JoystickSensor.h"
#include "KX_NetworkMessageSensor.h"
#include "SCA_ActuatorSensor.h"
+#include "SCA_DelaySensor.h"
#include "SCA_PropertySensor.h"
@@ -91,6 +92,7 @@ void BL_ConvertSensors(struct Object* blenderobject,
class KX_GameObject* gameobj,
SCA_LogicManager* logicmgr,
KX_Scene* kxscene,
+ KX_KetsjiEngine* kxengine,
SCA_IInputDevice* keydev,
int & executePriority,
int activeLayerBitInfo,
@@ -281,6 +283,22 @@ void BL_ConvertSensors(struct Object* blenderobject,
break;
}
+ case SENS_DELAY:
+ {
+ // we can reuse the Always event manager for the delay sensor
+ SCA_EventManager* eventmgr = logicmgr->FindEventManager(SCA_EventManager::ALWAYS_EVENTMGR);
+ if (eventmgr)
+ {
+ bDelaySensor* delaysensor = (bDelaySensor*)sens->data;
+ gamesensor = new SCA_DelaySensor(eventmgr,
+ gameobj,
+ delaysensor->delay,
+ delaysensor->duration,
+ (delaysensor->flag & SENS_DELAY_REPEAT) != 0);
+ }
+ break;
+ }
+
case SENS_COLLISION:
{
SCA_EventManager* eventmgr = logicmgr->FindEventManager(SCA_EventManager::TOUCH_EVENTMGR);
@@ -491,6 +509,7 @@ void BL_ConvertSensors(struct Object* blenderobject,
trackfocus,
canvas,
kxscene,
+ kxengine,
gameobj);
}
} else {
@@ -616,6 +635,7 @@ void BL_ConvertSensors(struct Object* blenderobject,
if (eventmgr)
{
bool bFindMaterial = (blenderraysensor->mode & SENS_COLLISION_MATERIAL);
+ bool bXRay = (blenderraysensor->mode & SENS_RAY_XRAY);
STR_String checkname = (bFindMaterial? blenderraysensor->matname : blenderraysensor->propname);
@@ -628,6 +648,7 @@ void BL_ConvertSensors(struct Object* blenderobject,
gameobj,
checkname,
bFindMaterial,
+ bXRay,
distance,
axis,
kxscene);
@@ -694,6 +715,7 @@ void BL_ConvertSensors(struct Object* blenderobject,
gamesensor = new SCA_JoystickSensor(
eventmgr,
gameobj,
+ bjoy->joyindex,
joysticktype,
axis,axisf,
prec,
@@ -741,12 +763,33 @@ void BL_ConvertSensors(struct Object* blenderobject,
for (int i=0;i<sens->totlinks;i++)
{
bController* linkedcont = (bController*) sens->links[i];
- SCA_IController* gamecont = converter->FindGameController(linkedcont);
+ if (linkedcont) {
+ SCA_IController* gamecont = converter->FindGameController(linkedcont);
- if (gamecont) {
- logicmgr->RegisterToSensor(gamecont,gamesensor);
+ if (gamecont) {
+ logicmgr->RegisterToSensor(gamecont,gamesensor);
+ } else {
+ printf(
+ "Warning, sensor \"%s\" could not find its controller "
+ "(link %d of %d) from object \"%s\"\n"
+ "\tthere has been an error converting the blender controller for the game engine,"
+ "logic may be incorrect\n", sens->name, i+1, sens->totlinks, blenderobject->id.name+2);
+ }
+ } else {
+ printf(
+ "Warning, sensor \"%s\" has lost a link to a controller "
+ "(link %d of %d) from object \"%s\"\n"
+ "\tpossible causes are partially appended objects or an error reading the file,"
+ "logic may be incorrect\n", sens->name, i+1, sens->totlinks, blenderobject->id.name+2);
}
}
+ // special case: Keyboard sensor with no link
+ // this combination is usually used for key logging.
+ if (sens->type == SENS_KEYBOARD && sens->totlinks == 0) {
+ // Force the registration so that the sensor runs
+ gamesensor->IncLink();
+ }
+
// done with gamesensor
gamesensor->Release();
diff --git a/source/gameengine/Converter/KX_ConvertSensors.h b/source/gameengine/Converter/KX_ConvertSensors.h
index 73da51f47f0..b18ffc10a2a 100644
--- a/source/gameengine/Converter/KX_ConvertSensors.h
+++ b/source/gameengine/Converter/KX_ConvertSensors.h
@@ -33,6 +33,7 @@ void BL_ConvertSensors(struct Object* blenderobject,
class KX_GameObject* gameobj,
class SCA_LogicManager* logicmgr,
class KX_Scene* kxscene,
+ class KX_KetsjiEngine* kxengine,
class SCA_IInputDevice* keydev,
int & executePriority ,
int activeLayerBitInfo,
diff --git a/source/gameengine/Converter/Makefile b/source/gameengine/Converter/Makefile
index f312fc13221..4dd63e428bd 100644
--- a/source/gameengine/Converter/Makefile
+++ b/source/gameengine/Converter/Makefile
@@ -51,6 +51,7 @@ CPPFLAGS += -I../../blender/include
CPPFLAGS += -I../../blender/blenlib
CPPFLAGS += -I../../blender/blenkernel
CPPFLAGS += -I../../blender/render/extern/include
+CPPFLAGS += -I../../blender/gpu
CPPFLAGS += -I$(NAN_GUARDEDALLOC)/include
CPPFLAGS += -I../Expressions -I../Rasterizer -I../GameLogic
CPPFLAGS += -I../Ketsji -I../BlenderRoutines -I../SceneGraph
diff --git a/source/gameengine/Converter/SConscript b/source/gameengine/Converter/SConscript
index f5e382b471e..3be352c568b 100644
--- a/source/gameengine/Converter/SConscript
+++ b/source/gameengine/Converter/SConscript
@@ -16,7 +16,7 @@ incs += ' #source/gameengine/Expressions #source/gameengine/Network #source/game
incs += ' #source/gameengine/Physics/common #source/gameengine/Physics/Bullet #source/gameengine/Physics/BlOde'
incs += ' #source/gameengine/Physics/Dummy #source/gameengine/Physics/Sumo'
incs += ' #source/gameengine/Physics/Sumo/Fuzzics/include #source/gameengine/Network/LoopBackNetwork'
-incs += ' #source/blender/misc #source/blender/blenloader'
+incs += ' #source/blender/misc #source/blender/blenloader #source/blender/gpu'
incs += ' ' + env['BF_PYTHON_INC']
incs += ' ' + env['BF_SOLID_INC']
diff --git a/source/gameengine/Expressions/Makefile b/source/gameengine/Expressions/Makefile
index e9c02eedcf2..6736149bbcd 100644
--- a/source/gameengine/Expressions/Makefile
+++ b/source/gameengine/Expressions/Makefile
@@ -36,6 +36,7 @@ include nan_compile.mk
CCFLAGS += $(LEVEL_1_CPP_WARNINGS)
CPPFLAGS += -I$(NAN_PYTHON)/include/python$(NAN_PYTHON_VERSION)
+CPPFLAGS += -I../../blender/makesdna
CPPFLAGS += -I$(NAN_STRING)/include
CPPFLAGS += -I$(NAN_MOTO)/include
diff --git a/source/gameengine/Expressions/PyObjectPlus.cpp b/source/gameengine/Expressions/PyObjectPlus.cpp
index 8937f481922..1eca527151a 100644
--- a/source/gameengine/Expressions/PyObjectPlus.cpp
+++ b/source/gameengine/Expressions/PyObjectPlus.cpp
@@ -119,6 +119,7 @@ PyObject *PyObjectPlus::_getattr(const STR_String& attr)
int PyObjectPlus::_delattr(const STR_String& attr)
{
+ PyErr_SetString(PyExc_AttributeError, "attribute cant be deleted");
return 1;
}
@@ -126,7 +127,8 @@ int PyObjectPlus::_setattr(const STR_String& attr, PyObject *value)
{
//return PyObject::_setattr(attr,value);
//cerr << "Unknown attribute" << endl;
- return 1;
+ PyErr_SetString(PyExc_AttributeError, "attribute cant be set");
+ return 1;
}
/*------------------------------
diff --git a/source/gameengine/Expressions/PyObjectPlus.h b/source/gameengine/Expressions/PyObjectPlus.h
index f433a08faba..3a054454a0b 100644
--- a/source/gameengine/Expressions/PyObjectPlus.h
+++ b/source/gameengine/Expressions/PyObjectPlus.h
@@ -43,10 +43,39 @@
* Python defines
------------------------------*/
+/*
+ Py_RETURN_NONE
+ Python 2.4 macro.
+ defined here until we switch to 2.4
+ also in api2_2x/gen_utils.h
+*/
+#ifndef Py_RETURN_NONE
+#define Py_RETURN_NONE return Py_BuildValue("O", Py_None)
+#endif
+#ifndef Py_RETURN_FALSE
+#define Py_RETURN_FALSE return PyBool_FromLong(0)
+#endif
+#ifndef Py_RETURN_TRUE
+#define Py_RETURN_TRUE return PyBool_FromLong(1)
+#endif
+
+/* for pre Py 2.5 */
+#if PY_VERSION_HEX < 0x02050000
+typedef int Py_ssize_t;
+#define PY_SSIZE_T_MAX INT_MAX
+#define PY_SSIZE_T_MIN INT_MIN
+#define PY_METHODCHAR char *
+#else
+/* Py 2.5 and later */
+#define intargfunc ssizeargfunc
+#define intintargfunc ssizessizeargfunc
+#define PY_METHODCHAR const char *
+#endif
+
// some basic python macros
#define Py_Return { Py_INCREF(Py_None); return Py_None;}
-static inline void Py_Fatal(char *M) {
+static inline void Py_Fatal(const char *M) {
//cout << M << endl;
exit(-1);
};
@@ -102,6 +131,12 @@ static inline void Py_Fatal(char *M) {
return ((class_name*) self)->Py##method_name(self, args, kwds); \
}; \
+#define KX_PYMETHOD_VARARGS(class_name, method_name) \
+ PyObject* Py##method_name(PyObject* self, PyObject* args); \
+ static PyObject* sPy##method_name( PyObject* self, PyObject* args) { \
+ return ((class_name*) self)->Py##method_name(self, args); \
+ }; \
+
#define KX_PYMETHOD_NOARGS(class_name, method_name) \
PyObject* Py##method_name(PyObject* self); \
static PyObject* sPy##method_name( PyObject* self) { \
@@ -119,28 +154,28 @@ static inline void Py_Fatal(char *M) {
static PyObject* sPy##method_name( PyObject* self, PyObject* args, PyObject* kwds) { \
return ((class_name*) self)->Py##method_name(self, args, kwds); \
}; \
- static char method_name##_doc[]; \
+ static const char method_name##_doc[]; \
#define KX_PYMETHOD_DOC_VARARGS(class_name, method_name) \
PyObject* Py##method_name(PyObject* self, PyObject* args); \
static PyObject* sPy##method_name( PyObject* self, PyObject* args) { \
return ((class_name*) self)->Py##method_name(self, args); \
}; \
- static char method_name##_doc[]; \
+ static const char method_name##_doc[]; \
#define KX_PYMETHOD_DOC_O(class_name, method_name) \
PyObject* Py##method_name(PyObject* self, PyObject* value); \
static PyObject* sPy##method_name( PyObject* self, PyObject* value) { \
return ((class_name*) self)->Py##method_name(self, value); \
}; \
- static char method_name##_doc[]; \
+ static const char method_name##_doc[]; \
#define KX_PYMETHOD_DOC_NOARGS(class_name, method_name) \
PyObject* Py##method_name(PyObject* self); \
static PyObject* sPy##method_name( PyObject* self) { \
return ((class_name*) self)->Py##method_name(self); \
}; \
- static char method_name##_doc[]; \
+ static const char method_name##_doc[]; \
/* The line above should remain empty */
@@ -148,15 +183,21 @@ static inline void Py_Fatal(char *M) {
* Method table macro (with doc)
*/
#define KX_PYMETHODTABLE(class_name, method_name) \
- {#method_name , (PyCFunction) class_name::sPy##method_name, METH_VARARGS, class_name::method_name##_doc}
+ {#method_name , (PyCFunction) class_name::sPy##method_name, METH_VARARGS, (PY_METHODCHAR)class_name::method_name##_doc}
+
+#define KX_PYMETHODTABLE_NOARG(class_name, method_name) \
+ {#method_name , (PyCFunction) class_name::sPy##method_name, METH_NOARGS, (PY_METHODCHAR)class_name::method_name##_doc}
/**
* Function implementation macro
*/
#define KX_PYMETHODDEF_DOC(class_name, method_name, doc_string) \
-char class_name::method_name##_doc[] = doc_string; \
+const char class_name::method_name##_doc[] = doc_string; \
PyObject* class_name::Py##method_name(PyObject*, PyObject* args, PyObject*)
+#define KX_PYMETHODDEF_DOC_NOARG(class_name, method_name, doc_string) \
+const char class_name::method_name##_doc[] = doc_string; \
+PyObject* class_name::Py##method_name(PyObject*)
/*------------------------------
* PyObjectPlus
diff --git a/source/gameengine/Expressions/Value.cpp b/source/gameengine/Expressions/Value.cpp
index 7bcb45228db..7296dfbec10 100644
--- a/source/gameengine/Expressions/Value.cpp
+++ b/source/gameengine/Expressions/Value.cpp
@@ -391,16 +391,23 @@ float CValue::GetPropertyNumber(const STR_String& inName,float defnumber)
bool CValue::RemoveProperty(const STR_String & inName)
{
// Check if there are properties at all which can be removed
- if (m_pNamedPropertyArray == NULL)
- return false;
-
- CValue* val = GetProperty(inName);
- if (NULL != val)
- {
- val->Release();
- m_pNamedPropertyArray->erase(inName);
- return true;
- }
+ if (m_pNamedPropertyArray) {
+ CValue* val = GetProperty(inName);
+ if (NULL != val)
+ {
+ val->Release();
+ m_pNamedPropertyArray->erase(inName);
+ return true;
+ }
+ }
+
+ char err[128];
+ if (m_pNamedPropertyArray)
+ sprintf(err, "attribute \"%s\" dosnt exist", inName.ReadPtr());
+ else
+ sprintf(err, "attribute \"%s\" dosnt exist (no property array)", inName.ReadPtr());
+
+ PyErr_SetString(PyExc_AttributeError, err);
return false;
}
@@ -755,7 +762,8 @@ CValue* CValue::ConvertPythonToValue(PyObject* pyobj)
int CValue::_delattr(const STR_String& attr)
{
- RemoveProperty(attr);
+ if (!RemoveProperty(attr)) /* sets error */
+ return 1;
return 0;
}
diff --git a/source/gameengine/GameLogic/Joystick/SCA_Joystick.cpp b/source/gameengine/GameLogic/Joystick/SCA_Joystick.cpp
index 18d7b6ffcd0..092956e6489 100644
--- a/source/gameengine/GameLogic/Joystick/SCA_Joystick.cpp
+++ b/source/gameengine/GameLogic/Joystick/SCA_Joystick.cpp
@@ -29,9 +29,9 @@
#include "SCA_Joystick.h"
#include "SCA_JoystickPrivate.h"
-
-SCA_Joystick::SCA_Joystick()
+SCA_Joystick::SCA_Joystick(short int index)
:
+ m_joyindex(index),
m_axis10(0),
m_axis11(0),
m_axis20(0),
@@ -42,92 +42,74 @@ SCA_Joystick::SCA_Joystick()
m_isinit(0),
m_istrig(0)
{
+#ifndef DISABLE_SDL
m_private = new PrivateData();
+#endif
}
SCA_Joystick::~SCA_Joystick()
{
+#ifndef DISABLE_SDL
delete m_private;
+#endif
}
-SCA_Joystick *SCA_Joystick::m_instance = NULL;
+SCA_Joystick *SCA_Joystick::m_instance[JOYINDEX_MAX];
int SCA_Joystick::m_refCount = 0;
-SCA_Joystick *SCA_Joystick::GetInstance()
+SCA_Joystick *SCA_Joystick::GetInstance( short int joyindex )
{
- if (m_instance == 0)
+#ifdef DISABLE_SDL
+ return NULL;
+#else
+ if (joyindex < 0 || joyindex >= JOYINDEX_MAX) {
+ echo("Error-invalid joystick index: " << joyindex);
+ return NULL;
+ }
+
+ if (m_refCount == 0)
{
- m_instance = new SCA_Joystick();
- m_instance->CreateJoystickDevice();
+ int i;
+ // do this once only
+ if(SDL_InitSubSystem(SDL_INIT_JOYSTICK | SDL_INIT_VIDEO ) == -1 ){
+ echo("Error-Initializing-SDL: " << SDL_GetError());
+ return NULL;
+ }
+ for (i=0; i<JOYINDEX_MAX; i++) {
+ m_instance[i] = new SCA_Joystick(i);
+ m_instance[i]->CreateJoystickDevice();
+ }
m_refCount = 1;
}
else
{
m_refCount++;
}
- return m_instance;
+ return m_instance[joyindex];
+#endif
}
void SCA_Joystick::ReleaseInstance()
{
if (--m_refCount == 0)
{
- DestroyJoystickDevice();
- delete m_instance;
- m_instance = NULL;
- }
-}
-
-
-bool SCA_Joystick::CreateJoystickDevice()
-{
- bool init = false;
- init = pCreateJoystickDevice();
- return init;
-}
-
-
-void SCA_Joystick::DestroyJoystickDevice()
-{
- if(m_isinit)
- pDestroyJoystickDevice();
-}
-
-
-void SCA_Joystick::HandleEvents()
-{
- if(m_isinit)
- {
- if(SDL_PollEvent(&m_private->m_event))
- {
- switch(m_private->m_event.type)
- {
- case SDL_JOYAXISMOTION:
- HANDLE_AXISMOTION(OnAxisMotion);
- break;
- case SDL_JOYHATMOTION:
- HANDLE_HATMOTION(OnHatMotion);
- break;
- case SDL_JOYBUTTONUP:
- HANDLE_BUTTONUP(OnButtonUp);
- break;
- case SDL_JOYBUTTONDOWN:
- HANDLE_BUTTONDOWN(OnButtonDown);
- break;
- case SDL_JOYBALLMOTION:
- HANDLE_BALLMOTION(OnBallMotion);
- break;
- default:
- HANDLE_NOEVENT(OnNothing);
- break;
+#ifndef DISABLE_SDL
+ int i;
+ for (i=0; i<JOYINDEX_MAX; i++) {
+ if (m_instance[i]) {
+ m_instance[i]->DestroyJoystickDevice();
+ delete m_instance[i];
}
+ m_instance[i]= NULL;
}
+
+ SDL_QuitSubSystem(SDL_INIT_JOYSTICK | SDL_INIT_VIDEO );
+#endif
}
}
-
void SCA_Joystick::cSetPrecision(int val)
{
m_prec = val;
@@ -176,19 +158,27 @@ bool SCA_Joystick::aDownAxisIsPositive(int axis)
bool SCA_Joystick::aButtonPressIsPositive(int button)
{
+#ifdef DISABLE_SDL
+ return false;
+#else
bool result;
SDL_JoystickGetButton(m_private->m_joystick, button)? result = true:result = false;
m_istrig = result;
return result;
+#endif
}
bool SCA_Joystick::aButtonReleaseIsPositive(int button)
{
+#ifdef DISABLE_SDL
+ return false;
+#else
bool result;
SDL_JoystickGetButton(m_private->m_joystick, button)? result = false : result = true;
m_istrig = result;
return result;
+#endif
}
@@ -226,78 +216,11 @@ int SCA_Joystick::pGetHat(int direction)
return 0;
}
-
-bool SCA_Joystick::GetJoyAxisMotion()
-{
- bool result = false;
- if(m_isinit){
- if(SDL_PollEvent(&m_private->m_event)){
- switch(m_private->m_event.type)
- {
- case SDL_JOYAXISMOTION:
- result = true;
- break;
- }
- }
- }
- return result;
-}
-
-
-bool SCA_Joystick::GetJoyButtonPress()
-{
- bool result = false;
- if(m_isinit){
- if(SDL_PollEvent(&m_private->m_event)){
- switch(m_private->m_event.type)
- {
- case SDL_JOYBUTTONDOWN:
- result = true;
- break;
- }
- }
- }
- return result;
-}
-
-
-bool SCA_Joystick::GetJoyButtonRelease()
-{
- bool result = false;
- if(m_isinit)
- {
- if(SDL_PollEvent(&m_private->m_event)){
- switch(m_private->m_event.type)
- {
- case SDL_JOYBUTTONUP:
- result = true;
- break;
- }
- }
- }
- return result;
-}
-
-
-bool SCA_Joystick::GetJoyHatMotion()
-{
- bool result = false;
- if(m_isinit){
- if(SDL_PollEvent(&m_private->m_event)){
- switch(m_private->m_event.type)
- {
- case SDL_JOYHATMOTION:
- result = true;
- break;
- }
- }
- }
- return 0;
-}
-
-
int SCA_Joystick::GetNumberOfAxes()
{
+#ifdef DISABLE_SDL
+ return -1;
+#else
int number;
if(m_isinit){
if(m_private->m_joystick){
@@ -306,11 +229,15 @@ int SCA_Joystick::GetNumberOfAxes()
}
}
return -1;
+#endif
}
int SCA_Joystick::GetNumberOfButtons()
{
+#ifdef DISABLE_SDL
+ return -1;
+#else
int number;
if(m_isinit){
if(m_private->m_joystick){
@@ -319,11 +246,15 @@ int SCA_Joystick::GetNumberOfButtons()
}
}
return -1;
+#endif
}
int SCA_Joystick::GetNumberOfHats()
{
+#ifdef DISABLE_SDL
+ return -1;
+#else
int number;
if(m_isinit){
if(m_private->m_joystick){
@@ -332,47 +263,57 @@ int SCA_Joystick::GetNumberOfHats()
}
}
return -1;
+#endif
}
-bool SCA_Joystick::pCreateJoystickDevice()
+bool SCA_Joystick::CreateJoystickDevice(void)
{
+#ifdef DISABLE_SDL
+ return false;
+#else
if(m_isinit == false){
- if(SDL_InitSubSystem(SDL_INIT_JOYSTICK | SDL_INIT_VIDEO ) == -1 ){
- echo("Error-Initializing-SDL: " << SDL_GetError());
- return false;
- }
- if(SDL_NumJoysticks() > 0){
- for(int i=0; i<SDL_NumJoysticks();i++){
- m_private->m_joystick = SDL_JoystickOpen(i);
- SDL_JoystickEventState(SDL_ENABLE);
- m_numjoys = i;
- }
- echo("Joystick-initialized");
- m_isinit = true;
- return true;
- }else{
- echo("Joystick-Error: " << SDL_NumJoysticks() << " avaiable joystick(s)");
+ if (m_joyindex>=SDL_NumJoysticks()) {
+ // don't print a message, because this is done anyway
+ //echo("Joystick-Error: " << SDL_NumJoysticks() << " avaiable joystick(s)");
return false;
}
+
+ m_private->m_joystick = SDL_JoystickOpen(m_joyindex);
+ SDL_JoystickEventState(SDL_ENABLE);
+
+ echo("Joystick " << m_joyindex << " initialized");
+ m_isinit = true;
}
- return false;
+ return true;
+#endif
}
-void SCA_Joystick::pDestroyJoystickDevice()
+void SCA_Joystick::DestroyJoystickDevice(void)
{
- echo("Closing-");
- for(int i=0; i<SDL_NumJoysticks(); i++){
- if(SDL_JoystickOpened(i)){
+#ifndef DISABLE_SDL
+ if (m_isinit){
+ if(SDL_JoystickOpened(m_joyindex)){
+ echo("Closing-joystick " << m_joyindex);
SDL_JoystickClose(m_private->m_joystick);
}
+ m_isinit = false;
}
- SDL_QuitSubSystem(SDL_INIT_JOYSTICK | SDL_INIT_VIDEO );
+#endif
}
+int SCA_Joystick::Connected(void)
+{
+#ifndef DISABLE_SDL
+ if (m_isinit && SDL_JoystickOpened(m_joyindex))
+ return 1;
+#endif
+ return 0;
+}
void SCA_Joystick::pFillAxes()
{
+#ifndef DISABLE_SDL
if(GetNumberOfAxes() == 1){
m_axis10 = SDL_JoystickGetAxis(m_private->m_joystick, 0);
m_axis11 = SDL_JoystickGetAxis(m_private->m_joystick, 1);
@@ -382,18 +323,20 @@ void SCA_Joystick::pFillAxes()
m_axis20 = SDL_JoystickGetAxis(m_private->m_joystick, 2);
m_axis21 = SDL_JoystickGetAxis(m_private->m_joystick, 3);
}else{
- m_axis10 = 0;m_axis11 = 0;
- m_axis20 = 0;m_axis21 = 0;
+ m_axis10 = m_axis11 = m_axis20 = m_axis21 = 0;
}
+#endif
}
int SCA_Joystick::pGetAxis(int axisnum, int udlr)
{
+#ifndef DISABLE_SDL
if(axisnum == 1 && udlr == 1)return m_axis10; //u/d
if(axisnum == 1 && udlr == 0)return m_axis11; //l/r
if(axisnum == 2 && udlr == 0)return m_axis20; //...
if(axisnum == 2 && udlr == 1)return m_axis21;
+#endif
return 0;
}
diff --git a/source/gameengine/GameLogic/Joystick/SCA_Joystick.h b/source/gameengine/GameLogic/Joystick/SCA_Joystick.h
index 1e853070b09..ea7ecf7cefe 100644
--- a/source/gameengine/GameLogic/Joystick/SCA_Joystick.h
+++ b/source/gameengine/GameLogic/Joystick/SCA_Joystick.h
@@ -1,72 +1,37 @@
/**
-
* ***** BEGIN GPL LICENSE BLOCK *****
-
*
-
* This program is free software; you can redistribute it and/or
-
* modify it under the terms of the GNU General Public License
-
* as published by the Free Software Foundation; either version 2
-
* of the License, or (at your option) any later version.
-
-
-
-
*
-
* This program is distributed in the hope that it will be useful,
-
* but WITHOUT ANY WARRANTY; without even the implied warranty of
-
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-
* GNU General Public License for more details.
-
*
-
* You should have received a copy of the GNU General Public License
-
* along with this program; if not, write to the Free Software Foundation,
-
* Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
*
-
* The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
-
* All rights reserved.
-
*
-
* The Original Code is: all of this file.
-
*
-
* Contributor(s): snailrose.
-
*
-
* ***** END GPL LICENSE BLOCK *****
-
*/
#ifndef _SCA_JOYSTICK_H_
-
#define _SCA_JOYSTICK_H_
-
-
#include "SCA_JoystickDefines.h"
-
-
-
-
+#include "SDL.h"
/*
-
* Basic Joystick class
* I will make this class a singleton because there should be only one joystick
* even if there are more than one scene using it and count how many scene are using it.
@@ -76,235 +41,145 @@
class SCA_Joystick
{
- static SCA_Joystick *m_instance;
+ static SCA_Joystick *m_instance[JOYINDEX_MAX];
static int m_refCount;
class PrivateData;
-
+#ifndef DISABLE_SDL
PrivateData *m_private;
-
+#endif
int m_joyindex;
- /*!
-
- * the number of avail joysticks
-
- */
-
- int m_numjoys;
-
/*
-
*support for 2 axes
-
*/
int m_axis10,m_axis11;
-
int m_axis20,m_axis21;
- /*
-
+ /*
* Precision or range of the axes
-
*/
-
int m_prec;
/*
-
* multiple axis values stored here
-
*/
-
int m_axisnum;
-
int m_axisvalue;
/*
-
* max # of axes avail
-
*/
-
/*disabled
-
int m_axismax;
-
*/
/*
-
* button values stored here
-
*/
-
int m_buttonnum;
/*
-
* max # of buttons avail
-
*/
int m_buttonmax;
-
/*
-
* hat values stored here
-
*/
-
int m_hatnum;
-
int m_hatdir;
/*
* max # of hats avail
-
disabled
-
int m_hatmax;
-
*/
-
/* is the joystick initialized ?*/
-
bool m_isinit;
-
/* is triggered */
-
bool m_istrig;
+#ifndef DISABLE_SDL
/*
-
- * Open the joystick
-
+ * event callbacks
*/
-
- bool pCreateJoystickDevice(void);
-
+ void OnAxisMotion(SDL_Event *sdl_event);
+ void OnHatMotion(SDL_Event *sdl_event);
+ void OnButtonUp(SDL_Event *sdl_event);
+ void OnButtonDown(SDL_Event *sdl_event);
+ void OnNothing(SDL_Event *sdl_event);
+ void OnBallMotion(SDL_Event *sdl_event){}
+#endif
/*
-
- * Close the joystick
-
+ * Open the joystick
*/
-
- void pDestroyJoystickDevice(void);
-
-
+ bool CreateJoystickDevice(void);
/*
-
- * event callbacks
-
+ * Close the joystick
*/
-
- void OnAxisMotion(void);
-
- void OnHatMotion(void);
-
- void OnButtonUp(void);
-
- void OnButtonDown(void);
-
- void OnNothing(void);
-
- void OnBallMotion(void){}
+ void DestroyJoystickDevice(void);
/*
-
* fills the axis mnember values
-
*/
-
void pFillAxes(void);
-
-
-
void pFillButtons(void);
/*
-
* returns m_axis10,m_axis11...
-
*/
-
int pGetAxis(int axisnum, int udlr);
-
+
/*
-
* gets the current button
-
*/
int pGetButtonPress(int button);
/*
-
* returns if no button is pressed
-
*/
-
int pGetButtonRelease(int button);
/*
-
* gets the current hat direction
-
*/
-
int pGetHat(int direction);
- SCA_Joystick();
+ SCA_Joystick(short int index);
~SCA_Joystick();
- bool CreateJoystickDevice(void);
-
- void DestroyJoystickDevice(void);
-
-
public:
- static SCA_Joystick *GetInstance();
-
+ static SCA_Joystick *GetInstance( short int joyindex );
+ static void HandleEvents( void );
void ReleaseInstance();
- void HandleEvents();
-
/*
-
*/
bool aUpAxisIsPositive(int axis);
-
bool aDownAxisIsPositive(int axis);
-
bool aLeftAxisIsPositive(int axis);
-
bool aRightAxisIsPositive(int axis);
-
bool aButtonPressIsPositive(int button);
-
bool aButtonReleaseIsPositive(int button);
-
bool aHatIsPositive(int dir);
/*
-
* precision is default '3200' which is overridden by input
-
*/
void cSetPrecision(int val);
-
-
int GetAxis10(void){
return m_axis10;
@@ -312,80 +187,49 @@ public:
}
int GetAxis11(void){
-
return m_axis11;
-
}
int GetAxis20(void){
-
return m_axis20;
-
}
int GetAxis21(void){
-
return m_axis21;
-
}
int GetButton(void){
-
return m_buttonnum;
-
}
int GetHat(void){
-
return m_hatdir;
-
}
int GetThreshold(void){
-
return m_prec;
-
}
bool IsTrig(void){
-
return m_istrig;
-
}
-
-
- /*
-
- * returns true if an event is being processed
-
- */
-
- bool GetJoyAxisMotion(void);
-
- bool GetJoyButtonPress(void);
-
- bool GetJoyButtonRelease(void);
-
- bool GetJoyHatMotion(void);
-
/*
-
* returns the # of...
-
*/
int GetNumberOfAxes(void);
-
int GetNumberOfButtons(void);
-
int GetNumberOfHats(void);
-
-
+ /*
+ * Test if the joystick is connected
+ */
+ int Connected(void);
};
-
-
+#ifndef DISABLE_SDL
+void Joystick_HandleEvents( void );
+#endif
#endif
diff --git a/source/gameengine/GameLogic/Joystick/SCA_JoystickDefines.h b/source/gameengine/GameLogic/Joystick/SCA_JoystickDefines.h
index 15a421188b9..73ffe1406d9 100644
--- a/source/gameengine/GameLogic/Joystick/SCA_JoystickDefines.h
+++ b/source/gameengine/GameLogic/Joystick/SCA_JoystickDefines.h
@@ -38,12 +38,6 @@
#define echo(x) std::cout << x << std::endl;
#endif
-/* function callbacks */
-#define HANDLE_AXISMOTION(fn) ((fn)(), 0L)
-#define HANDLE_HATMOTION(fn) ((fn)(), 0L)
-#define HANDLE_BUTTONUP(fn) ((fn)(), 0L)
-#define HANDLE_BUTTONDOWN(fn) ((fn)(), 0L)
-#define HANDLE_BALLMOTION(fn) ((fn)(), 0L)
-#define HANDLE_NOEVENT(fn) ((fn)(), 0L)
+#define JOYINDEX_MAX 8
#endif
diff --git a/source/gameengine/GameLogic/Joystick/SCA_JoystickEvents.cpp b/source/gameengine/GameLogic/Joystick/SCA_JoystickEvents.cpp
index ab523470e21..0e2078265c9 100644
--- a/source/gameengine/GameLogic/Joystick/SCA_JoystickEvents.cpp
+++ b/source/gameengine/GameLogic/Joystick/SCA_JoystickEvents.cpp
@@ -29,42 +29,77 @@
#include "SCA_JoystickPrivate.h"
-
-void SCA_Joystick::OnAxisMotion(void)
+#ifndef DISABLE_SDL
+void SCA_Joystick::OnAxisMotion(SDL_Event* sdl_event)
{
pFillAxes();
- m_axisnum = m_private->m_event.jaxis.axis;
- m_axisvalue = m_private->m_event.jaxis.value;
+ m_axisnum = sdl_event->jaxis.axis;
+ m_axisvalue = sdl_event->jaxis.value;
m_istrig = 1;
}
-void SCA_Joystick::OnHatMotion(void)
+void SCA_Joystick::OnHatMotion(SDL_Event* sdl_event)
{
- m_hatdir = m_private->m_event.jhat.value;
- m_hatnum = m_private->m_event.jhat.hat;
+ m_hatdir = sdl_event->jhat.value;
+ m_hatnum = sdl_event->jhat.hat;
m_istrig = 1;
}
-void SCA_Joystick::OnButtonUp(void)
+void SCA_Joystick::OnButtonUp(SDL_Event* sdl_event)
{
m_buttonnum = -2;
}
-void SCA_Joystick::OnButtonDown(void)
+void SCA_Joystick::OnButtonDown(SDL_Event* sdl_event)
{
m_buttonmax = GetNumberOfButtons();
- if(m_private->m_event.jbutton.button >= 1 || m_private->m_event.jbutton.button <= m_buttonmax)
+ if(sdl_event->jbutton.button >= 1 || sdl_event->jbutton.button <= m_buttonmax)
{
m_istrig = 1;
- m_buttonnum = m_private->m_event.jbutton.button;
+ m_buttonnum = sdl_event->jbutton.button;
}
}
-void SCA_Joystick::OnNothing(void)
+void SCA_Joystick::OnNothing(SDL_Event* sdl_event)
{
m_istrig = 0;
}
+
+/* only handle events for 1 joystick */
+
+void SCA_Joystick::HandleEvents(void)
+{
+ SDL_Event sdl_event;
+
+ if(SDL_PollEvent(&sdl_event))
+ {
+ /* Note! m_instance[sdl_event.jaxis.which]
+ * will segfault if over JOYINDEX_MAX, not too nice but what are the chances? */
+ switch(sdl_event.type)
+ {
+ case SDL_JOYAXISMOTION:
+ SCA_Joystick::m_instance[sdl_event.jaxis.which]->OnAxisMotion(&sdl_event);
+ break;
+ case SDL_JOYHATMOTION:
+ SCA_Joystick::m_instance[sdl_event.jhat.which]->OnHatMotion(&sdl_event);
+ break;
+ case SDL_JOYBUTTONUP:
+ SCA_Joystick::m_instance[sdl_event.jbutton.which]->OnButtonUp(&sdl_event);
+ break;
+ case SDL_JOYBUTTONDOWN:
+ SCA_Joystick::m_instance[sdl_event.jbutton.which]->OnButtonDown(&sdl_event);
+ break;
+ case SDL_JOYBALLMOTION:
+ SCA_Joystick::m_instance[sdl_event.jball.which]->OnBallMotion(&sdl_event);
+ break;
+ default:
+ printf("SCA_Joystick::HandleEvents, Unknown SDL event, this should not happen\n");
+ break;
+ }
+ }
+}
+#endif
diff --git a/source/gameengine/GameLogic/Joystick/SCA_JoystickPrivate.h b/source/gameengine/GameLogic/Joystick/SCA_JoystickPrivate.h
index 23fad3cd55d..acbbcae9cd7 100644
--- a/source/gameengine/GameLogic/Joystick/SCA_JoystickPrivate.h
+++ b/source/gameengine/GameLogic/Joystick/SCA_JoystickPrivate.h
@@ -29,14 +29,11 @@
#define __SCA_JOYSTICKPRIVATE_H__
#include "SCA_Joystick.h"
+#ifndef DISABLE_SDL
class SCA_Joystick::PrivateData
{
public:
/*
- * SDL events structure
- */
- SDL_Event m_event;
- /*
* The Joystick
*/
SDL_Joystick* m_joystick;
@@ -47,3 +44,5 @@ public:
}
};
#endif
+
+#endif
diff --git a/source/gameengine/GameLogic/Makefile b/source/gameengine/GameLogic/Makefile
index b3eae5d67dc..355ece6e8bd 100644
--- a/source/gameengine/GameLogic/Makefile
+++ b/source/gameengine/GameLogic/Makefile
@@ -42,6 +42,7 @@ CPPFLAGS += -I../Expressions
CPPFLAGS += -I../Rasterizer
CPPFLAGS += -I$(NAN_STRING)/include
CPPFLAGS += -I$(NAN_MOTO)/include
+CPPFLAGS += -I../../blender/makesdna
CPPFLAGS += -I$(NAN_PYTHON)/include/python$(NAN_PYTHON_VERSION)
CPPFLAGS += $(NAN_SDLCFLAGS)
diff --git a/source/gameengine/GameLogic/SCA_2DFilterActuator.cpp b/source/gameengine/GameLogic/SCA_2DFilterActuator.cpp
index 96a770a553f..9ec4ea00337 100644
--- a/source/gameengine/GameLogic/SCA_2DFilterActuator.cpp
+++ b/source/gameengine/GameLogic/SCA_2DFilterActuator.cpp
@@ -23,8 +23,8 @@ SCA_2DFilterActuator::SCA_2DFilterActuator(
: SCA_IActuator(gameobj, T),
m_type(type),
m_flag(flag),
- m_int_arg(int_arg),
m_float_arg(float_arg),
+ m_int_arg(int_arg),
m_rasterizer(rasterizer),
m_rendertools(rendertools)
{
@@ -64,13 +64,11 @@ bool SCA_2DFilterActuator::Update()
if( m_type == RAS_2DFilterManager::RAS_2DFILTER_MOTIONBLUR )
{
if(!m_flag)
- {
m_rasterizer->EnableMotionBlur(m_float_arg);
- }
else
- {
m_rasterizer->DisableMotionBlur();
- }
+
+ return false;
}
else if(m_type < RAS_2DFilterManager::RAS_2DFILTER_NUMBER_OF_FILTERS)
{
diff --git a/source/gameengine/GameLogic/SCA_ActuatorSensor.cpp b/source/gameengine/GameLogic/SCA_ActuatorSensor.cpp
index 6501a3173a7..6d6a059207b 100644
--- a/source/gameengine/GameLogic/SCA_ActuatorSensor.cpp
+++ b/source/gameengine/GameLogic/SCA_ActuatorSensor.cpp
@@ -149,8 +149,8 @@ PyParentObject SCA_ActuatorSensor::Parents[] = {
};
PyMethodDef SCA_ActuatorSensor::Methods[] = {
- {"getActuator", (PyCFunction) SCA_ActuatorSensor::sPyGetActuator, METH_NOARGS, GetActuator_doc},
- {"setActuator", (PyCFunction) SCA_ActuatorSensor::sPySetActuator, METH_VARARGS, SetActuator_doc},
+ {"getActuator", (PyCFunction) SCA_ActuatorSensor::sPyGetActuator, METH_NOARGS, (PY_METHODCHAR)GetActuator_doc},
+ {"setActuator", (PyCFunction) SCA_ActuatorSensor::sPySetActuator, METH_VARARGS, (PY_METHODCHAR)SetActuator_doc},
{NULL,NULL} //Sentinel
};
@@ -159,7 +159,7 @@ PyObject* SCA_ActuatorSensor::_getattr(const STR_String& attr) {
}
/* 3. getActuator */
-char SCA_ActuatorSensor::GetActuator_doc[] =
+const char SCA_ActuatorSensor::GetActuator_doc[] =
"getActuator()\n"
"\tReturn the Actuator with which the sensor operates.\n";
PyObject* SCA_ActuatorSensor::PyGetActuator(PyObject* self)
@@ -168,7 +168,7 @@ PyObject* SCA_ActuatorSensor::PyGetActuator(PyObject* self)
}
/* 4. setActuator */
-char SCA_ActuatorSensor::SetActuator_doc[] =
+const char SCA_ActuatorSensor::SetActuator_doc[] =
"setActuator(name)\n"
"\t- name: string\n"
"\tSets the Actuator with which to operate. If there is no Actuator\n"
diff --git a/source/gameengine/GameLogic/SCA_DelaySensor.cpp b/source/gameengine/GameLogic/SCA_DelaySensor.cpp
new file mode 100644
index 00000000000..f15d4c7249f
--- /dev/null
+++ b/source/gameengine/GameLogic/SCA_DelaySensor.cpp
@@ -0,0 +1,257 @@
+/**
+ * Delay trigger
+ *
+ * $Id$
+ *
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): none yet.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#ifdef WIN32
+// This warning tells us about truncation of __long__ stl-generated names.
+// It can occasionally cause DevStudio to have internal compiler warnings.
+#pragma warning( disable : 4786 )
+#endif
+
+#include "SCA_DelaySensor.h"
+#include "SCA_LogicManager.h"
+#include "SCA_EventManager.h"
+
+/* ------------------------------------------------------------------------- */
+/* Native functions */
+/* ------------------------------------------------------------------------- */
+
+SCA_DelaySensor::SCA_DelaySensor(class SCA_EventManager* eventmgr,
+ SCA_IObject* gameobj,
+ int delay,
+ int duration,
+ bool repeat,
+ PyTypeObject* T)
+ : SCA_ISensor(gameobj,eventmgr, T),
+ m_delay(delay),
+ m_duration(duration),
+ m_repeat(repeat)
+{
+ Init();
+}
+
+void SCA_DelaySensor::Init()
+{
+ m_lastResult = false;
+ m_frameCount = -1;
+ m_reset = true;
+}
+
+SCA_DelaySensor::~SCA_DelaySensor()
+{
+ /* intentionally empty */
+}
+
+CValue* SCA_DelaySensor::GetReplica()
+{
+ CValue* replica = new SCA_DelaySensor(*this);
+ // this will copy properties and so on...
+ CValue::AddDataToReplica(replica);
+
+ return replica;
+}
+
+
+
+bool SCA_DelaySensor::IsPositiveTrigger()
+{
+ return (m_invert ? !m_lastResult : m_lastResult);
+}
+
+bool SCA_DelaySensor::Evaluate(CValue* event)
+{
+ bool trigger = false;
+ bool result;
+
+ if (m_frameCount==-1) {
+ // this is needed to ensure ON trigger in case delay==0
+ // and avoid spurious OFF trigger when duration==0
+ m_lastResult = false;
+ m_frameCount = 0;
+ }
+
+ if (m_frameCount<m_delay) {
+ m_frameCount++;
+ result = false;
+ } else if (m_duration > 0) {
+ if (m_frameCount < m_delay+m_duration) {
+ m_frameCount++;
+ result = true;
+ } else {
+ result = false;
+ if (m_repeat)
+ m_frameCount = -1;
+ }
+ } else {
+ result = true;
+ if (m_repeat)
+ m_frameCount = -1;
+ }
+ if ((m_reset && m_level) || result != m_lastResult)
+ trigger = true;
+ m_reset = false;
+ m_lastResult = result;
+ return trigger;
+}
+
+/* ------------------------------------------------------------------------- */
+/* Python functions */
+/* ------------------------------------------------------------------------- */
+
+/* Integration hooks ------------------------------------------------------- */
+PyTypeObject SCA_DelaySensor::Type = {
+ PyObject_HEAD_INIT(&PyType_Type)
+ 0,
+ "SCA_DelaySensor",
+ sizeof(SCA_DelaySensor),
+ 0,
+ PyDestructor,
+ 0,
+ __getattr,
+ __setattr,
+ 0, //&MyPyCompare,
+ __repr,
+ 0, //&cvalue_as_number,
+ 0,
+ 0,
+ 0,
+ 0
+};
+
+PyParentObject SCA_DelaySensor::Parents[] = {
+ &SCA_DelaySensor::Type,
+ &SCA_ISensor::Type,
+ &SCA_ILogicBrick::Type,
+ &CValue::Type,
+ NULL
+};
+
+PyMethodDef SCA_DelaySensor::Methods[] = {
+ /* setProperty */
+ {"setDelay", (PyCFunction) SCA_DelaySensor::sPySetDelay, METH_VARARGS, (PY_METHODCHAR)SetDelay_doc},
+ {"setDuration", (PyCFunction) SCA_DelaySensor::sPySetDuration, METH_VARARGS, (PY_METHODCHAR)SetDuration_doc},
+ {"setRepeat", (PyCFunction) SCA_DelaySensor::sPySetRepeat, METH_VARARGS, (PY_METHODCHAR)SetRepeat_doc},
+ /* getProperty */
+ {"getDelay", (PyCFunction) SCA_DelaySensor::sPyGetDelay, METH_NOARGS, (PY_METHODCHAR)GetDelay_doc},
+ {"getDuration", (PyCFunction) SCA_DelaySensor::sPyGetDuration, METH_NOARGS, (PY_METHODCHAR)GetDuration_doc},
+ {"getRepeat", (PyCFunction) SCA_DelaySensor::sPyGetRepeat, METH_NOARGS, (PY_METHODCHAR)GetRepeat_doc},
+ {NULL,NULL} //Sentinel
+};
+
+PyObject* SCA_DelaySensor::_getattr(const STR_String& attr) {
+ _getattr_up(SCA_ISensor);
+}
+
+const char SCA_DelaySensor::SetDelay_doc[] =
+"setDelay(delay)\n"
+"\t- delay: length of the initial OFF period as number of frame\n"
+"\t 0 for immediate trigger\n"
+"\tSet the initial delay before the positive trigger\n";
+PyObject* SCA_DelaySensor::PySetDelay(PyObject* self, PyObject* args, PyObject* kwds)
+{
+ int delay;
+
+ if(!PyArg_ParseTuple(args, "i", &delay)) {
+ return NULL;
+ }
+ if (delay < 0) {
+ PyErr_SetString(PyExc_ValueError, "Delay cannot be negative");
+ return NULL;
+ }
+ m_delay = delay;
+ Py_Return;
+}
+
+const char SCA_DelaySensor::SetDuration_doc[] =
+"setDuration(duration)\n"
+"\t- duration: length of the ON period in number of frame after the initial off period\n"
+"\t 0 for no ON period\n"
+"\tSet the duration of the ON pulse after initial delay.\n"
+"\tIf > 0, a negative trigger is fired at the end of the ON pulse.\n";
+PyObject* SCA_DelaySensor::PySetDuration(PyObject* self, PyObject* args, PyObject* kwds)
+{
+ int duration;
+
+ if(!PyArg_ParseTuple(args, "i", &duration)) {
+ return NULL;
+ }
+ if (duration < 0) {
+ PyErr_SetString(PyExc_ValueError, "Duration cannot be negative");
+ return NULL;
+ }
+ m_duration = duration;
+ Py_Return;
+}
+
+const char SCA_DelaySensor::SetRepeat_doc[] =
+"setRepeat(repeat)\n"
+"\t- repeat: 1 if the initial OFF-ON cycle should be repeated indefinately\n"
+"\t 0 if the initial OFF-ON cycle should run only once\n"
+"\tSet the sensor repeat mode\n";
+PyObject* SCA_DelaySensor::PySetRepeat(PyObject* self, PyObject* args, PyObject* kwds)
+{
+ int repeat;
+
+ if(!PyArg_ParseTuple(args, "i", &repeat)) {
+ return NULL;
+ }
+ m_repeat = (repeat != 0);
+ Py_Return;
+}
+
+const char SCA_DelaySensor::GetDelay_doc[] =
+"getDelay()\n"
+"\tReturn the delay parameter value\n";
+PyObject* SCA_DelaySensor::PyGetDelay(PyObject* self)
+{
+ return PyInt_FromLong(m_delay);
+}
+
+const char SCA_DelaySensor::GetDuration_doc[] =
+"getDuration()\n"
+"\tReturn the duration parameter value\n";
+PyObject* SCA_DelaySensor::PyGetDuration(PyObject* self)
+{
+ return PyInt_FromLong(m_duration);
+}
+
+const char SCA_DelaySensor::GetRepeat_doc[] =
+"getRepeat()\n"
+"\tReturn the repeat parameter value\n";
+PyObject* SCA_DelaySensor::PyGetRepeat(PyObject* self)
+{
+ return BoolToPyArg(m_repeat);
+}
+
+/* eof */
diff --git a/source/gameengine/GameLogic/SCA_DelaySensor.h b/source/gameengine/GameLogic/SCA_DelaySensor.h
new file mode 100644
index 00000000000..a997fabe3cd
--- /dev/null
+++ b/source/gameengine/GameLogic/SCA_DelaySensor.h
@@ -0,0 +1,77 @@
+/**
+ * SCA_DelaySensor.h
+ *
+ * $Id$
+ *
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): none yet.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+#ifndef __KX_DELAYSENSOR
+#define __KX_DELAYSENSOR
+#include "SCA_ISensor.h"
+
+class SCA_DelaySensor : public SCA_ISensor
+{
+ Py_Header;
+ bool m_lastResult;
+ bool m_repeat;
+ int m_delay;
+ int m_duration;
+ int m_frameCount;
+
+public:
+ SCA_DelaySensor(class SCA_EventManager* eventmgr,
+ SCA_IObject* gameobj,
+ int delay,
+ int duration,
+ bool repeat,
+ PyTypeObject* T =&Type);
+ virtual ~SCA_DelaySensor();
+ virtual CValue* GetReplica();
+ virtual bool Evaluate(CValue* event);
+ virtual bool IsPositiveTrigger();
+ virtual void Init();
+
+
+ /* --------------------------------------------------------------------- */
+ /* Python interface ---------------------------------------------------- */
+ /* --------------------------------------------------------------------- */
+
+ virtual PyObject* _getattr(const STR_String& attr);
+
+ /* setProperty */
+ KX_PYMETHOD_DOC(SCA_DelaySensor,SetDelay);
+ KX_PYMETHOD_DOC(SCA_DelaySensor,SetDuration);
+ KX_PYMETHOD_DOC(SCA_DelaySensor,SetRepeat);
+ /* getProperty */
+ KX_PYMETHOD_DOC_NOARGS(SCA_DelaySensor,GetDelay);
+ KX_PYMETHOD_DOC_NOARGS(SCA_DelaySensor,GetDuration);
+ KX_PYMETHOD_DOC_NOARGS(SCA_DelaySensor,GetRepeat);
+
+};
+
+#endif //__KX_ALWAYSSENSOR
+
diff --git a/source/gameengine/GameLogic/SCA_IController.cpp b/source/gameengine/GameLogic/SCA_IController.cpp
index 8f156cc63e7..0bd20117f31 100644
--- a/source/gameengine/GameLogic/SCA_IController.cpp
+++ b/source/gameengine/GameLogic/SCA_IController.cpp
@@ -188,6 +188,8 @@ void SCA_IController::ApplyState(unsigned int state)
for (sensit = m_linkedsensors.begin();!(sensit==m_linkedsensors.end());++sensit)
{
(*sensit)->IncLink();
+ // remember that this controller just activated that sensor
+ (*sensit)->AddNewController(this);
}
SetActive(true);
}
diff --git a/source/gameengine/GameLogic/SCA_ILogicBrick.cpp b/source/gameengine/GameLogic/SCA_ILogicBrick.cpp
index f5512664d8f..abd049e9d64 100644
--- a/source/gameengine/GameLogic/SCA_ILogicBrick.cpp
+++ b/source/gameengine/GameLogic/SCA_ILogicBrick.cpp
@@ -27,6 +27,7 @@
*/
#include "SCA_ILogicBrick.h"
+#include "PyObjectPlus.h"
#ifdef HAVE_CONFIG_H
#include <config.h>
diff --git a/source/gameengine/GameLogic/SCA_ISensor.cpp b/source/gameengine/GameLogic/SCA_ISensor.cpp
index 2dc49924062..b10ac676464 100644
--- a/source/gameengine/GameLogic/SCA_ISensor.cpp
+++ b/source/gameengine/GameLogic/SCA_ISensor.cpp
@@ -32,6 +32,8 @@
#include "SCA_ISensor.h"
#include "SCA_EventManager.h"
#include "SCA_LogicManager.h"
+// needed for IsTriggered()
+#include "SCA_PythonController.h"
#ifdef HAVE_CONFIG_H
#include <config.h>
@@ -132,10 +134,8 @@ void SCA_ISensor::DecLink() {
}
if (!m_links)
{
- // sensor is detached from all controllers, initialize it so that it
- // is fresh as at startup when it is reattached again.
+ // sensor is detached from all controllers, remove it from manager
UnregisterToManager();
- Init();
}
}
@@ -168,27 +168,31 @@ PyParentObject SCA_ISensor::Parents[] = {
};
PyMethodDef SCA_ISensor::Methods[] = {
{"isPositive", (PyCFunction) SCA_ISensor::sPyIsPositive,
- METH_VARARGS, IsPositive_doc},
+ METH_NOARGS, (PY_METHODCHAR)IsPositive_doc},
+ {"isTriggered", (PyCFunction) SCA_ISensor::sPyIsTriggered,
+ METH_VARARGS, (PY_METHODCHAR)IsTriggered_doc},
{"getUsePosPulseMode", (PyCFunction) SCA_ISensor::sPyGetUsePosPulseMode,
- METH_NOARGS, GetUsePosPulseMode_doc},
+ METH_NOARGS, (PY_METHODCHAR)GetUsePosPulseMode_doc},
{"setUsePosPulseMode", (PyCFunction) SCA_ISensor::sPySetUsePosPulseMode,
- METH_VARARGS, SetUsePosPulseMode_doc},
+ METH_VARARGS, (PY_METHODCHAR)SetUsePosPulseMode_doc},
{"getFrequency", (PyCFunction) SCA_ISensor::sPyGetFrequency,
- METH_NOARGS, GetFrequency_doc},
+ METH_NOARGS, (PY_METHODCHAR)GetFrequency_doc},
{"setFrequency", (PyCFunction) SCA_ISensor::sPySetFrequency,
- METH_VARARGS, SetFrequency_doc},
+ METH_VARARGS, (PY_METHODCHAR)SetFrequency_doc},
{"getUseNegPulseMode", (PyCFunction) SCA_ISensor::sPyGetUseNegPulseMode,
- METH_NOARGS, GetUseNegPulseMode_doc},
+ METH_NOARGS, (PY_METHODCHAR)GetUseNegPulseMode_doc},
{"setUseNegPulseMode", (PyCFunction) SCA_ISensor::sPySetUseNegPulseMode,
- METH_VARARGS, SetUseNegPulseMode_doc},
+ METH_VARARGS, (PY_METHODCHAR)SetUseNegPulseMode_doc},
{"getInvert", (PyCFunction) SCA_ISensor::sPyGetInvert,
- METH_NOARGS, GetInvert_doc},
+ METH_NOARGS, (PY_METHODCHAR)GetInvert_doc},
{"setInvert", (PyCFunction) SCA_ISensor::sPySetInvert,
- METH_VARARGS, SetInvert_doc},
+ METH_VARARGS, (PY_METHODCHAR)SetInvert_doc},
{"getLevel", (PyCFunction) SCA_ISensor::sPyGetLevel,
- METH_NOARGS, GetLevel_doc},
+ METH_NOARGS, (PY_METHODCHAR)GetLevel_doc},
{"setLevel", (PyCFunction) SCA_ISensor::sPySetLevel,
- METH_VARARGS, SetLevel_doc},
+ METH_VARARGS, (PY_METHODCHAR)SetLevel_doc},
+ {"reset", (PyCFunction) SCA_ISensor::sPyReset,
+ METH_NOARGS, (PY_METHODCHAR)Reset_doc},
{NULL,NULL} //Sentinel
};
@@ -202,6 +206,9 @@ SCA_ISensor::_getattr(const STR_String& attr)
void SCA_ISensor::RegisterToManager()
{
+ // sensor is just activated, initialize it
+ Init();
+ m_newControllers.erase(m_newControllers.begin(), m_newControllers.end());
m_eventmgr->RegisterSensor(this);
}
@@ -219,6 +226,9 @@ void SCA_ISensor::Activate(class SCA_LogicManager* logicmgr, CValue* event)
bool result = this->Evaluate(event);
if (result) {
logicmgr->AddActivatedSensor(this);
+ // reset these counters so that pulse are synchronized with transition
+ m_pos_ticks = 0;
+ m_neg_ticks = 0;
} else
{
/* First, the pulsing behaviour, if pulse mode is
@@ -247,23 +257,51 @@ void SCA_ISensor::Activate(class SCA_LogicManager* logicmgr, CValue* event)
}
}
}
+ if (!m_newControllers.empty())
+ {
+ if (!IsActive() && m_level)
+ {
+ // This level sensor is connected to at least one controller that was just made
+ // active but it did not generate an event yet, do it now to those controllers only
+ for (std::vector<SCA_IController*>::iterator ci=m_newControllers.begin();
+ ci != m_newControllers.end(); ci++)
+ {
+ logicmgr->AddTriggeredController(*ci, this);
+ }
+ }
+ // clear the list. Instead of using clear, which also release the memory,
+ // use erase, which keeps the memory available for next time.
+ m_newControllers.erase(m_newControllers.begin(), m_newControllers.end());
+ }
}
}
/* Python functions: */
-char SCA_ISensor::IsPositive_doc[] =
+const char SCA_ISensor::IsPositive_doc[] =
"isPositive()\n"
-"\tReturns whether the sensor is registered a positive event.\n";
-PyObject* SCA_ISensor::PyIsPositive(PyObject* self, PyObject* args, PyObject* kwds)
+"\tReturns whether the sensor is in an active state.\n";
+PyObject* SCA_ISensor::PyIsPositive(PyObject* self)
{
int retval = IsPositiveTrigger();
return PyInt_FromLong(retval);
}
+const char SCA_ISensor::IsTriggered_doc[] =
+"isTriggered()\n"
+"\tReturns whether the sensor has triggered the current controller.\n";
+PyObject* SCA_ISensor::PyIsTriggered(PyObject* self)
+{
+ // check with the current controller
+ int retval = 0;
+ if (SCA_PythonController::m_sCurrentController)
+ retval = SCA_PythonController::m_sCurrentController->IsTriggered(this);
+ return PyInt_FromLong(retval);
+}
+
/**
* getUsePulseMode: getter for the pulse mode (KX_TRUE = on)
*/
-char SCA_ISensor::GetUsePosPulseMode_doc[] =
+const char SCA_ISensor::GetUsePosPulseMode_doc[] =
"getUsePosPulseMode()\n"
"\tReturns whether positive pulse mode is active.\n";
PyObject* SCA_ISensor::PyGetUsePosPulseMode(PyObject* self)
@@ -274,7 +312,7 @@ PyObject* SCA_ISensor::PyGetUsePosPulseMode(PyObject* self)
/**
* setUsePulseMode: setter for the pulse mode (KX_TRUE = on)
*/
-char SCA_ISensor::SetUsePosPulseMode_doc[] =
+const char SCA_ISensor::SetUsePosPulseMode_doc[] =
"setUsePosPulseMode(pulse?)\n"
"\t - pulse? : Pulse when a positive event occurs?\n"
"\t (KX_TRUE, KX_FALSE)\n"
@@ -290,7 +328,7 @@ PyObject* SCA_ISensor::PySetUsePosPulseMode(PyObject* self, PyObject* args, PyOb
/**
* getFrequency: getter for the pulse mode interval
*/
-char SCA_ISensor::GetFrequency_doc[] =
+const char SCA_ISensor::GetFrequency_doc[] =
"getFrequency()\n"
"\tReturns the frequency of the updates in pulse mode.\n" ;
PyObject* SCA_ISensor::PyGetFrequency(PyObject* self)
@@ -301,7 +339,7 @@ PyObject* SCA_ISensor::PyGetFrequency(PyObject* self)
/**
* setFrequency: setter for the pulse mode (KX_TRUE = on)
*/
-char SCA_ISensor::SetFrequency_doc[] =
+const char SCA_ISensor::SetFrequency_doc[] =
"setFrequency(pulse_frequency)\n"
"\t- pulse_frequency: The frequency of the updates in pulse mode (integer)"
"\tSet the frequency of the updates in pulse mode.\n"
@@ -325,7 +363,7 @@ PyObject* SCA_ISensor::PySetFrequency(PyObject* self, PyObject* args, PyObject*
}
-char SCA_ISensor::GetInvert_doc[] =
+const char SCA_ISensor::GetInvert_doc[] =
"getInvert()\n"
"\tReturns whether or not pulses from this sensor are inverted.\n" ;
PyObject* SCA_ISensor::PyGetInvert(PyObject* self)
@@ -333,7 +371,7 @@ PyObject* SCA_ISensor::PyGetInvert(PyObject* self)
return BoolToPyArg(m_invert);
}
-char SCA_ISensor::SetInvert_doc[] =
+const char SCA_ISensor::SetInvert_doc[] =
"setInvert(invert?)\n"
"\t- invert?: Invert the event-values? (KX_TRUE, KX_FALSE)\n"
"\tSet whether to invert pulses.\n";
@@ -345,7 +383,7 @@ PyObject* SCA_ISensor::PySetInvert(PyObject* self, PyObject* args, PyObject* kwd
Py_Return;
}
-char SCA_ISensor::GetLevel_doc[] =
+const char SCA_ISensor::GetLevel_doc[] =
"getLevel()\n"
"\tReturns whether this sensor is a level detector or a edge detector.\n"
"\tIt makes a difference only in case of logic state transition (state actuator).\n"
@@ -357,7 +395,7 @@ PyObject* SCA_ISensor::PyGetLevel(PyObject* self)
return BoolToPyArg(m_level);
}
-char SCA_ISensor::SetLevel_doc[] =
+const char SCA_ISensor::SetLevel_doc[] =
"setLevel(level?)\n"
"\t- level?: Detect level instead of edge? (KX_TRUE, KX_FALSE)\n"
"\tSet whether to detect level or edge transition when entering a state.\n";
@@ -369,7 +407,7 @@ PyObject* SCA_ISensor::PySetLevel(PyObject* self, PyObject* args, PyObject* kwds
Py_Return;
}
-char SCA_ISensor::GetUseNegPulseMode_doc[] =
+const char SCA_ISensor::GetUseNegPulseMode_doc[] =
"getUseNegPulseMode()\n"
"\tReturns whether negative pulse mode is active.\n";
PyObject* SCA_ISensor::PyGetUseNegPulseMode(PyObject* self)
@@ -377,7 +415,7 @@ PyObject* SCA_ISensor::PyGetUseNegPulseMode(PyObject* self)
return BoolToPyArg(m_neg_pulsemode);
}
-char SCA_ISensor::SetUseNegPulseMode_doc[] =
+const char SCA_ISensor::SetUseNegPulseMode_doc[] =
"setUseNegPulseMode(pulse?)\n"
"\t - pulse? : Pulse when a negative event occurs?\n"
"\t (KX_TRUE, KX_FALSE)\n"
@@ -390,4 +428,15 @@ PyObject* SCA_ISensor::PySetUseNegPulseMode(PyObject* self, PyObject* args, PyOb
Py_Return;
}
+const char SCA_ISensor::Reset_doc[] =
+"reset()\n"
+"\tReset sensor internal state, effect depends on the type of sensor and settings.\n"
+"\tThe sensor is put in its initial state as if it was just activated.\n";
+PyObject* SCA_ISensor::PyReset(PyObject* self)
+{
+ Init();
+ Py_Return;
+}
+
+
/* eof */
diff --git a/source/gameengine/GameLogic/SCA_ISensor.h b/source/gameengine/GameLogic/SCA_ISensor.h
index d5dabbce3ee..0d65270dc7b 100644
--- a/source/gameengine/GameLogic/SCA_ISensor.h
+++ b/source/gameengine/GameLogic/SCA_ISensor.h
@@ -34,6 +34,8 @@
#include "SCA_ILogicBrick.h"
+#include <vector>
+
/**
* Interface Class for all logic Sensors. Implements
* pulsemode,pulsefrequency */
@@ -73,9 +75,9 @@ class SCA_ISensor : public SCA_ILogicBrick
/** number of connections to controller */
int m_links;
- /** Pass the activation on to the logic manager.*/
- void SignalActivation(class SCA_LogicManager* logicmgr);
-
+ /** list of controllers that have just activated this sensor because of a state change */
+ std::vector<class SCA_IController*> m_newControllers;
+
public:
SCA_ISensor(SCA_IObject* gameobj,
class SCA_EventManager* eventmgr,
@@ -128,6 +130,8 @@ public:
/** Resume sensing. */
void Resume();
+ void AddNewController(class SCA_IController* controller)
+ { m_newControllers.push_back(controller); }
void ClrLink()
{ m_links = 0; }
void IncLink()
@@ -137,7 +141,8 @@ public:
{ return !m_links; }
/* Python functions: */
- KX_PYMETHOD_DOC(SCA_ISensor,IsPositive);
+ KX_PYMETHOD_DOC_NOARGS(SCA_ISensor,IsPositive);
+ KX_PYMETHOD_DOC_NOARGS(SCA_ISensor,IsTriggered);
KX_PYMETHOD_DOC_NOARGS(SCA_ISensor,GetUsePosPulseMode);
KX_PYMETHOD_DOC(SCA_ISensor,SetUsePosPulseMode);
KX_PYMETHOD_DOC_NOARGS(SCA_ISensor,GetFrequency);
@@ -148,6 +153,7 @@ public:
KX_PYMETHOD_DOC(SCA_ISensor,SetInvert);
KX_PYMETHOD_DOC_NOARGS(SCA_ISensor,GetLevel);
KX_PYMETHOD_DOC(SCA_ISensor,SetLevel);
+ KX_PYMETHOD_DOC_NOARGS(SCA_ISensor,Reset);
};
diff --git a/source/gameengine/GameLogic/SCA_JoystickManager.cpp b/source/gameengine/GameLogic/SCA_JoystickManager.cpp
index 8ff28ba0b51..d874b5b013a 100644
--- a/source/gameengine/GameLogic/SCA_JoystickManager.cpp
+++ b/source/gameengine/GameLogic/SCA_JoystickManager.cpp
@@ -40,35 +40,48 @@ SCA_JoystickManager::SCA_JoystickManager(class SCA_LogicManager* logicmgr)
: SCA_EventManager(JOY_EVENTMGR),
m_logicmgr(logicmgr)
{
- m_joystick = SCA_Joystick::GetInstance();
+ int i;
+ for (i=0; i<JOYINDEX_MAX; i++) {
+ m_joystick[i] = SCA_Joystick::GetInstance( i );
+ }
}
SCA_JoystickManager::~SCA_JoystickManager()
{
- m_joystick->ReleaseInstance();
+ int i;
+ for (i=0; i<JOYINDEX_MAX; i++) {
+ m_joystick[i]->ReleaseInstance();
+ }
}
void SCA_JoystickManager::NextFrame(double curtime,double deltatime)
{
- set<SCA_ISensor*>::iterator it;
- for (it = m_sensors.begin(); it != m_sensors.end(); it++)
- {
- SCA_JoystickSensor* joysensor = (SCA_JoystickSensor*)(*it);
- if(!joysensor->IsSuspended())
+ if (m_sensors.size()==0) {
+ return;
+ }
+ else {
+ set<SCA_ISensor*>::iterator it;
+#ifndef DISABLE_SDL
+ SCA_Joystick::HandleEvents(); /* Handle all SDL Joystick events */
+#endif
+ for (it = m_sensors.begin(); it != m_sensors.end(); it++)
{
- m_joystick->HandleEvents();
- joysensor->Activate(m_logicmgr, NULL);
+ SCA_JoystickSensor* joysensor = (SCA_JoystickSensor*)(*it);
+ if(!joysensor->IsSuspended())
+ {
+ joysensor->Activate(m_logicmgr, NULL);
+ }
}
}
}
-SCA_Joystick *SCA_JoystickManager::GetJoystickDevice()
+SCA_Joystick *SCA_JoystickManager::GetJoystickDevice( short int joyindex)
{
/*
*Return the instance of SCA_Joystick for use
*/
- return m_joystick;
+ return m_joystick[joyindex];
}
diff --git a/source/gameengine/GameLogic/SCA_JoystickManager.h b/source/gameengine/GameLogic/SCA_JoystickManager.h
index f2bb27965fa..d3a7ac95bea 100644
--- a/source/gameengine/GameLogic/SCA_JoystickManager.h
+++ b/source/gameengine/GameLogic/SCA_JoystickManager.h
@@ -40,12 +40,12 @@ class SCA_JoystickManager : public SCA_EventManager
/**
* SDL Joystick Class Instance
*/
- SCA_Joystick *m_joystick;
+ SCA_Joystick *m_joystick[JOYINDEX_MAX];
public:
SCA_JoystickManager(class SCA_LogicManager* logicmgr);
virtual ~SCA_JoystickManager();
virtual void NextFrame(double curtime,double deltatime);
- SCA_Joystick* GetJoystickDevice(void);
+ SCA_Joystick* GetJoystickDevice(short int joyindex);
};
diff --git a/source/gameengine/GameLogic/SCA_JoystickSensor.cpp b/source/gameengine/GameLogic/SCA_JoystickSensor.cpp
index 3fb439eb25b..58818240009 100644
--- a/source/gameengine/GameLogic/SCA_JoystickSensor.cpp
+++ b/source/gameengine/GameLogic/SCA_JoystickSensor.cpp
@@ -30,8 +30,11 @@
#include "SCA_EventManager.h"
#include "SCA_LogicManager.h"
+#include "PyObjectPlus.h"
+
#include <iostream>
+
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
@@ -39,6 +42,7 @@
SCA_JoystickSensor::SCA_JoystickSensor(class SCA_JoystickManager* eventmgr,
SCA_IObject* gameobj,
+ short int joyindex,
short int joymode,
int axis, int axisf,int prec,
int button, int buttonf,
@@ -53,7 +57,8 @@ SCA_JoystickSensor::SCA_JoystickSensor(class SCA_JoystickManager* eventmgr,
m_hat(hat),
m_hatf(hatf),
m_precision(prec),
- m_joymode(joymode)
+ m_joymode(joymode),
+ m_joyindex(joyindex)
{
/*
std::cout << " axis " << m_axis << std::endl;
@@ -99,10 +104,13 @@ bool SCA_JoystickSensor::IsPositiveTrigger()
bool SCA_JoystickSensor::Evaluate(CValue* event)
{
- SCA_Joystick *js = m_pJoystickMgr->GetJoystickDevice();
+ SCA_Joystick *js = m_pJoystickMgr->GetJoystickDevice(m_joyindex);
bool result = false;
bool reset = m_reset && m_level;
+ if(js==NULL)
+ return false;
+
m_reset = false;
switch(m_joymode)
{
@@ -118,7 +126,7 @@ bool SCA_JoystickSensor::Evaluate(CValue* event)
js->cSetPrecision(m_precision);
if(m_axisf == 1){
if(js->aUpAxisIsPositive(m_axis)){
- m_istrig =1;
+ m_istrig = 1;
result = true;
}else{
if(m_istrig){
@@ -241,11 +249,31 @@ bool SCA_JoystickSensor::Evaluate(CValue* event)
printf("Error invalid switch statement\n");
break;
}
- if(!js->IsTrig()){
+
+ if (js->IsTrig()) {
+ /* The if below detects changes with the joystick trigger state.
+ * js->IsTrig() will stay true as long as the key is held.
+ * even though the event from SDL will only be sent once.
+ * (js->IsTrig() && m_istrig_lastjs) - when true it means this sensor
+ * had the same joystick trigger state last time,
+ * Setting the result false this time means it wont run the sensors
+ * controller every time (like a pulse sensor)
+ *
+ * This is not done with the joystick its self incase other sensors use
+ * it or become active.
+ */
+ if (m_istrig_lastjs) {
+ result = false;
+ }
+ m_istrig_lastjs = true;
+ } else {
m_istrig = 0;
+ m_istrig_lastjs = false;
}
+
if (reset)
result = true;
+
return result;
}
@@ -293,18 +321,21 @@ PyParentObject SCA_JoystickSensor::Parents[] = {
PyMethodDef SCA_JoystickSensor::Methods[] = {
- {"getAxis", (PyCFunction) SCA_JoystickSensor::sPyGetAxis, METH_NOARGS, GetAxis_doc},
- {"setAxis", (PyCFunction) SCA_JoystickSensor::sPySetAxis, METH_VARARGS, SetAxis_doc},
- {"getAxisValue", (PyCFunction) SCA_JoystickSensor::sPyGetRealAxis, METH_NOARGS, GetRealAxis_doc},
- {"getThreshold", (PyCFunction) SCA_JoystickSensor::sPyGetThreshold, METH_NOARGS, GetThreshold_doc},
- {"setThreshold", (PyCFunction) SCA_JoystickSensor::sPySetThreshold, METH_VARARGS, SetThreshold_doc},
- {"getButton", (PyCFunction) SCA_JoystickSensor::sPyGetButton, METH_NOARGS, GetButton_doc},
- {"setButton", (PyCFunction) SCA_JoystickSensor::sPySetButton, METH_VARARGS, SetButton_doc},
- {"getHat", (PyCFunction) SCA_JoystickSensor::sPyGetHat, METH_NOARGS, GetHat_doc},
- {"setHat", (PyCFunction) SCA_JoystickSensor::sPySetHat, METH_VARARGS, SetHat_doc},
- {"getNumAxes", (PyCFunction) SCA_JoystickSensor::sPyNumberOfAxes, METH_NOARGS, NumberOfAxes_doc},
- {"getNumButtons",(PyCFunction) SCA_JoystickSensor::sPyNumberOfButtons,METH_NOARGS, NumberOfButtons_doc},
- {"getNumHats", (PyCFunction) SCA_JoystickSensor::sPyNumberOfHats, METH_NOARGS, NumberOfHats_doc},
+ {"getIndex", (PyCFunction) SCA_JoystickSensor::sPyGetIndex, METH_NOARGS, (PY_METHODCHAR)GetIndex_doc},
+ {"setIndex", (PyCFunction) SCA_JoystickSensor::sPySetIndex, METH_O, (PY_METHODCHAR)SetIndex_doc},
+ {"getAxis", (PyCFunction) SCA_JoystickSensor::sPyGetAxis, METH_NOARGS, (PY_METHODCHAR)GetAxis_doc},
+ {"setAxis", (PyCFunction) SCA_JoystickSensor::sPySetAxis, METH_VARARGS, (PY_METHODCHAR)SetAxis_doc},
+ {"getAxisValue", (PyCFunction) SCA_JoystickSensor::sPyGetRealAxis, METH_NOARGS, (PY_METHODCHAR)GetRealAxis_doc},
+ {"getThreshold", (PyCFunction) SCA_JoystickSensor::sPyGetThreshold, METH_NOARGS, (PY_METHODCHAR)GetThreshold_doc},
+ {"setThreshold", (PyCFunction) SCA_JoystickSensor::sPySetThreshold, METH_VARARGS, (PY_METHODCHAR)SetThreshold_doc},
+ {"getButton", (PyCFunction) SCA_JoystickSensor::sPyGetButton, METH_NOARGS, (PY_METHODCHAR)GetButton_doc},
+ {"setButton", (PyCFunction) SCA_JoystickSensor::sPySetButton, METH_VARARGS, (PY_METHODCHAR)SetButton_doc},
+ {"getHat", (PyCFunction) SCA_JoystickSensor::sPyGetHat, METH_NOARGS, (PY_METHODCHAR)GetHat_doc},
+ {"setHat", (PyCFunction) SCA_JoystickSensor::sPySetHat, METH_VARARGS, (PY_METHODCHAR)SetHat_doc},
+ {"getNumAxes", (PyCFunction) SCA_JoystickSensor::sPyNumberOfAxes, METH_NOARGS, (PY_METHODCHAR)NumberOfAxes_doc},
+ {"getNumButtons",(PyCFunction) SCA_JoystickSensor::sPyNumberOfButtons,METH_NOARGS, (PY_METHODCHAR)NumberOfButtons_doc},
+ {"getNumHats", (PyCFunction) SCA_JoystickSensor::sPyNumberOfHats, METH_NOARGS, (PY_METHODCHAR)NumberOfHats_doc},
+ {"isConnected", (PyCFunction) SCA_JoystickSensor::sPyConnected, METH_NOARGS, (PY_METHODCHAR)Connected_doc},
{NULL,NULL} //Sentinel
};
@@ -314,24 +345,44 @@ PyObject* SCA_JoystickSensor::_getattr(const STR_String& attr) {
}
+/* get index ---------------------------------------------------------- */
+const char SCA_JoystickSensor::GetIndex_doc[] =
+"getIndex\n"
+"\tReturns the joystick index to use.\n";
+PyObject* SCA_JoystickSensor::PyGetIndex( PyObject* self ) {
+ return PyInt_FromLong(m_joyindex);
+}
+
+
+/* set index ---------------------------------------------------------- */
+const char SCA_JoystickSensor::SetIndex_doc[] =
+"setIndex\n"
+"\tSets the joystick index to use.\n";
+PyObject* SCA_JoystickSensor::PySetIndex( PyObject* self, PyObject* value ) {
+ int index = PyInt_AsLong( value ); /* -1 on error, will raise an error in this case */
+ if (index < 0 || index >= JOYINDEX_MAX) {
+ PyErr_SetString(PyExc_ValueError, "joystick index out of range or not an int");
+ return NULL;
+ }
+
+ m_joyindex = index;
+ Py_RETURN_NONE;
+}
+
/* get axis ---------------------------------------------------------- */
-char SCA_JoystickSensor::GetAxis_doc[] =
+const char SCA_JoystickSensor::GetAxis_doc[] =
"getAxis\n"
"\tReturns the current state of the axis.\n";
-PyObject* SCA_JoystickSensor::PyGetAxis( PyObject* self,
- PyObject* args,
- PyObject* kwds) {
- return Py_BuildValue("[ii]",m_axis, m_axisf);
+PyObject* SCA_JoystickSensor::PyGetAxis( PyObject* self) {
+ return PyInt_FromLong(m_joyindex);
}
/* set axis ---------------------------------------------------------- */
-char SCA_JoystickSensor::SetAxis_doc[] =
+const char SCA_JoystickSensor::SetAxis_doc[] =
"setAxis\n"
"\tSets the current state of the axis.\n";
-PyObject* SCA_JoystickSensor::PySetAxis( PyObject* self,
- PyObject* args,
- PyObject* kwds) {
+PyObject* SCA_JoystickSensor::PySetAxis( PyObject* self, PyObject* args ) {
int axis,axisflag;
if(!PyArg_ParseTuple(args, "ii", &axis, &axisflag)){
@@ -339,145 +390,126 @@ PyObject* SCA_JoystickSensor::PySetAxis( PyObject* self,
}
m_axis = axis;
m_axisf = axisflag;
- Py_Return;
+ Py_RETURN_NONE;
}
/* get axis value ----------------------------------------------------- */
-char SCA_JoystickSensor::GetRealAxis_doc[] =
+const char SCA_JoystickSensor::GetRealAxis_doc[] =
"getAxisValue\n"
"\tReturns a list of the values for each axis .\n";
-PyObject* SCA_JoystickSensor::PyGetRealAxis( PyObject* self,
- PyObject* args,
- PyObject* kwds) {
- int a,b,c,d;
- SCA_Joystick *joy = m_pJoystickMgr->GetJoystickDevice();
- a = joy->GetAxis10();
- b = joy->GetAxis11();
- c = joy->GetAxis20();
- d = joy->GetAxis21();
- return Py_BuildValue("[iiii]",a,b,c,d);
+PyObject* SCA_JoystickSensor::PyGetRealAxis( PyObject* self) {
+ SCA_Joystick *joy = m_pJoystickMgr->GetJoystickDevice(m_joyindex);
+ if(joy)
+ return Py_BuildValue("[iiii]", joy->GetAxis10(), joy->GetAxis11(), joy->GetAxis20(), joy->GetAxis21());
+ else
+ return Py_BuildValue("[iiii]", 0, 0, 0, 0);
}
/* get threshold ----------------------------------------------------- */
-char SCA_JoystickSensor::GetThreshold_doc[] =
+const char SCA_JoystickSensor::GetThreshold_doc[] =
"getThreshold\n"
"\tReturns the threshold of the axis.\n";
-PyObject* SCA_JoystickSensor::PyGetThreshold( PyObject* self,
- PyObject* args,
- PyObject* kwds) {
- return Py_BuildValue("i", m_precision);
+PyObject* SCA_JoystickSensor::PyGetThreshold( PyObject* self) {
+ return PyInt_FromLong(m_precision);
}
/* set threshold ----------------------------------------------------- */
-char SCA_JoystickSensor::SetThreshold_doc[] =
+const char SCA_JoystickSensor::SetThreshold_doc[] =
"setThreshold\n"
"\tSets the threshold of the axis.\n";
-PyObject* SCA_JoystickSensor::PySetThreshold( PyObject* self,
- PyObject* args,
- PyObject* kwds) {
+PyObject* SCA_JoystickSensor::PySetThreshold( PyObject* self, PyObject* args ) {
int thresh;
if(!PyArg_ParseTuple(args, "i", &thresh)){
return NULL;
}
m_precision = thresh;
- Py_Return;
+ Py_RETURN_NONE;
}
/* get button -------------------------------------------------------- */
-char SCA_JoystickSensor::GetButton_doc[] =
+const char SCA_JoystickSensor::GetButton_doc[] =
"getButton\n"
"\tReturns the currently pressed button.\n";
-PyObject* SCA_JoystickSensor::PyGetButton( PyObject* self,
- PyObject* args,
- PyObject* kwds) {
+PyObject* SCA_JoystickSensor::PyGetButton( PyObject* self) {
return Py_BuildValue("[ii]",m_button, m_buttonf);
}
/* set button -------------------------------------------------------- */
-char SCA_JoystickSensor::SetButton_doc[] =
+const char SCA_JoystickSensor::SetButton_doc[] =
"setButton\n"
"\tSets the button the sensor reacts to.\n";
-PyObject* SCA_JoystickSensor::PySetButton( PyObject* self,
- PyObject* args,
- PyObject* kwds) {
+PyObject* SCA_JoystickSensor::PySetButton( PyObject* self, PyObject* args ) {
int button,buttonflag;
if(!PyArg_ParseTuple(args, "ii", &button, &buttonflag)){
return NULL;
}
m_button = button;
m_buttonf = buttonflag;
- Py_Return;
+ Py_RETURN_NONE;
}
/* get hat ----------------------------------------------------------- */
-char SCA_JoystickSensor::GetHat_doc[] =
+const char SCA_JoystickSensor::GetHat_doc[] =
"getHat\n"
"\tReturns the current direction of the hat.\n";
-PyObject* SCA_JoystickSensor::PyGetHat( PyObject* self,
- PyObject* args,
- PyObject* kwds) {
+PyObject* SCA_JoystickSensor::PyGetHat( PyObject* self ) {
return Py_BuildValue("[ii]",m_hat, m_hatf);
}
/* set hat ----------------------------------------------------------- */
-char SCA_JoystickSensor::SetHat_doc[] =
+const char SCA_JoystickSensor::SetHat_doc[] =
"setHat\n"
"\tSets the hat the sensor reacts to.\n";
-PyObject* SCA_JoystickSensor::PySetHat( PyObject* self,
- PyObject* args,
- PyObject* kwds) {
+PyObject* SCA_JoystickSensor::PySetHat( PyObject* self, PyObject* args ) {
int hat,hatflag;
if(!PyArg_ParseTuple(args, "ii", &hat, &hatflag)){
return NULL;
}
m_hat = hat;
m_hatf = hatflag;
- Py_Return;
+ Py_RETURN_NONE;
}
/* get # of ----------------------------------------------------- */
-char SCA_JoystickSensor::NumberOfAxes_doc[] =
+const char SCA_JoystickSensor::NumberOfAxes_doc[] =
"getNumAxes\n"
"\tReturns the number of axes .\n";
-PyObject* SCA_JoystickSensor::PyNumberOfAxes( PyObject* self,
- PyObject* args,
- PyObject* kwds) {
- int num;
- SCA_Joystick *joy = m_pJoystickMgr->GetJoystickDevice();
- num = joy->GetNumberOfAxes();
- return Py_BuildValue("i",num);
+PyObject* SCA_JoystickSensor::PyNumberOfAxes( PyObject* self ) {
+ SCA_Joystick *joy = m_pJoystickMgr->GetJoystickDevice(m_joyindex);
+ // when the joystick is null their is 0 exis still. dumb but scripters should use isConnected()
+ return PyInt_FromLong( joy ? joy->GetNumberOfAxes() : 0 );
}
-char SCA_JoystickSensor::NumberOfButtons_doc[] =
+const char SCA_JoystickSensor::NumberOfButtons_doc[] =
"getNumButtons\n"
"\tReturns the number of buttons .\n";
-PyObject* SCA_JoystickSensor::PyNumberOfButtons( PyObject* self,
- PyObject* args,
- PyObject* kwds) {
- int num;
- SCA_Joystick *joy = m_pJoystickMgr->GetJoystickDevice();
- num = joy->GetNumberOfButtons();
- return Py_BuildValue("i",num);
+PyObject* SCA_JoystickSensor::PyNumberOfButtons( PyObject* self ) {
+ SCA_Joystick *joy = m_pJoystickMgr->GetJoystickDevice(m_joyindex);
+ return PyInt_FromLong( joy ? joy->GetNumberOfButtons() : 0 );
}
-char SCA_JoystickSensor::NumberOfHats_doc[] =
+const char SCA_JoystickSensor::NumberOfHats_doc[] =
"getNumHats\n"
"\tReturns the number of hats .\n";
-PyObject* SCA_JoystickSensor::PyNumberOfHats( PyObject* self,
- PyObject* args,
- PyObject* kwds) {
- int num;
- SCA_Joystick *joy = m_pJoystickMgr->GetJoystickDevice();
- num = joy->GetNumberOfHats();
- return Py_BuildValue("i",num);
+PyObject* SCA_JoystickSensor::PyNumberOfHats( PyObject* self ) {
+ SCA_Joystick *joy = m_pJoystickMgr->GetJoystickDevice(m_joyindex);
+ return PyInt_FromLong( joy ? joy->GetNumberOfHats() : 0 );
+}
+
+const char SCA_JoystickSensor::Connected_doc[] =
+"getConnected\n"
+"\tReturns True if a joystick is connected at this joysticks index.\n";
+PyObject* SCA_JoystickSensor::PyConnected( PyObject* self ) {
+ SCA_Joystick *joy = m_pJoystickMgr->GetJoystickDevice(m_joyindex);
+ return PyBool_FromLong( joy ? joy->Connected() : 0 );
}
diff --git a/source/gameengine/GameLogic/SCA_JoystickSensor.h b/source/gameengine/GameLogic/SCA_JoystickSensor.h
index 69068da6494..8b74f6e0296 100644
--- a/source/gameengine/GameLogic/SCA_JoystickSensor.h
+++ b/source/gameengine/GameLogic/SCA_JoystickSensor.h
@@ -69,9 +69,19 @@ class SCA_JoystickSensor :public SCA_ISensor
*/
bool m_istrig;
/**
+ * Last trigger state for this sensors joystick,
+ * Otherwise it will trigger all the time
+ * this is used to see if the trigger state changes.
+ */
+ bool m_istrig_lastjs;
+ /**
* The mode to determine axis,button or hat
*/
short int m_joymode;
+ /**
+ * Select which joystick to use
+ */
+ short int m_joyindex;
enum KX_JOYSENSORMODE {
KX_JOYSENSORMODE_NODEF = 0,
@@ -85,6 +95,7 @@ class SCA_JoystickSensor :public SCA_ISensor
public:
SCA_JoystickSensor(class SCA_JoystickManager* eventmgr,
SCA_IObject* gameobj,
+ short int joyindex,
short int joymode,
int axis, int axisf,int prec,
int button, int buttonf,
@@ -97,28 +108,36 @@ public:
virtual bool IsPositiveTrigger();
virtual void Init();
+ short int GetJoyIndex(void){
+ return m_joyindex;
+ }
+
/* --------------------------------------------------------------------- */
/* Python interface ---------------------------------------------------- */
/* --------------------------------------------------------------------- */
virtual PyObject* _getattr(const STR_String& attr);
+ /* Joystick Index */
+ KX_PYMETHOD_DOC_NOARGS(SCA_JoystickSensor,GetIndex);
+ KX_PYMETHOD_DOC_O(SCA_JoystickSensor,SetIndex);
/* Axes*/
- KX_PYMETHOD_DOC(SCA_JoystickSensor,GetAxis);
- KX_PYMETHOD_DOC(SCA_JoystickSensor,SetAxis);
- KX_PYMETHOD_DOC(SCA_JoystickSensor,GetRealAxis);
- KX_PYMETHOD_DOC(SCA_JoystickSensor,GetThreshold);
- KX_PYMETHOD_DOC(SCA_JoystickSensor,SetThreshold);
+ KX_PYMETHOD_DOC_NOARGS(SCA_JoystickSensor,GetAxis);
+ KX_PYMETHOD_DOC_VARARGS(SCA_JoystickSensor,SetAxis);
+ KX_PYMETHOD_DOC_NOARGS(SCA_JoystickSensor,GetRealAxis);
+ KX_PYMETHOD_DOC_NOARGS(SCA_JoystickSensor,GetThreshold);
+ KX_PYMETHOD_DOC_VARARGS(SCA_JoystickSensor,SetThreshold);
/* Buttons */
- KX_PYMETHOD_DOC(SCA_JoystickSensor,GetButton);
- KX_PYMETHOD_DOC(SCA_JoystickSensor,SetButton);
+ KX_PYMETHOD_DOC_NOARGS(SCA_JoystickSensor,GetButton);
+ KX_PYMETHOD_DOC_VARARGS(SCA_JoystickSensor,SetButton);
/* Hats */
- KX_PYMETHOD_DOC(SCA_JoystickSensor,GetHat);
- KX_PYMETHOD_DOC(SCA_JoystickSensor,SetHat);
+ KX_PYMETHOD_DOC_NOARGS(SCA_JoystickSensor,GetHat);
+ KX_PYMETHOD_DOC_VARARGS(SCA_JoystickSensor,SetHat);
/* number of */
- KX_PYMETHOD_DOC(SCA_JoystickSensor,NumberOfAxes);
- KX_PYMETHOD_DOC(SCA_JoystickSensor,NumberOfButtons);
- KX_PYMETHOD_DOC(SCA_JoystickSensor,NumberOfHats);
+ KX_PYMETHOD_DOC_NOARGS(SCA_JoystickSensor,NumberOfAxes);
+ KX_PYMETHOD_DOC_NOARGS(SCA_JoystickSensor,NumberOfButtons);
+ KX_PYMETHOD_DOC_NOARGS(SCA_JoystickSensor,NumberOfHats);
+ KX_PYMETHOD_DOC_NOARGS(SCA_JoystickSensor,Connected);
};
diff --git a/source/gameengine/GameLogic/SCA_KeyboardSensor.cpp b/source/gameengine/GameLogic/SCA_KeyboardSensor.cpp
index a7a6fa93db4..d09a5394965 100644
--- a/source/gameengine/GameLogic/SCA_KeyboardSensor.cpp
+++ b/source/gameengine/GameLogic/SCA_KeyboardSensor.cpp
@@ -505,12 +505,12 @@ PyObject* SCA_KeyboardSensor::sPySetAllMode(PyObject* self,
PyObject* kwds)
{
// printf("sPyIsPositive\n");
- return ((SCA_KeyboardSensor*) self)->PyIsPositive(self, args, kwds);
+ return ((SCA_KeyboardSensor*) self)->PyIsPositive(self);
}
/** 1. GetKey : check which key this sensor looks at */
-char SCA_KeyboardSensor::GetKey_doc[] =
+const char SCA_KeyboardSensor::GetKey_doc[] =
"getKey()\n"
"\tReturn the code of the key this sensor is listening to.\n" ;
PyObject* SCA_KeyboardSensor::PyGetKey(PyObject* self, PyObject* args, PyObject* kwds)
@@ -519,7 +519,7 @@ PyObject* SCA_KeyboardSensor::PyGetKey(PyObject* self, PyObject* args, PyObject*
}
/** 2. SetKey: change the key to look at */
-char SCA_KeyboardSensor::SetKey_doc[] =
+const char SCA_KeyboardSensor::SetKey_doc[] =
"setKey(keycode)\n"
"\t- keycode: any code from GameKeys\n"
"\tSet the key this sensor should listen to.\n" ;
@@ -539,7 +539,7 @@ PyObject* SCA_KeyboardSensor::PySetKey(PyObject* self, PyObject* args, PyObject*
}
/** 3. GetHold1 : set the first bucky bit */
-char SCA_KeyboardSensor::GetHold1_doc[] =
+const char SCA_KeyboardSensor::GetHold1_doc[] =
"getHold1()\n"
"\tReturn the code of the first key modifier to the key this \n"
"\tsensor is listening to.\n" ;
@@ -549,7 +549,7 @@ PyObject* SCA_KeyboardSensor::PyGetHold1(PyObject* self, PyObject* args, PyObjec
}
/** 4. SetHold1: change the first bucky bit */
-char SCA_KeyboardSensor::SetHold1_doc[] =
+const char SCA_KeyboardSensor::SetHold1_doc[] =
"setHold1(keycode)\n"
"\t- keycode: any code from GameKeys\n"
"\tSet the first modifier to the key this sensor should listen to.\n" ;
@@ -569,7 +569,7 @@ PyObject* SCA_KeyboardSensor::PySetHold1(PyObject* self, PyObject* args, PyObjec
}
/** 5. GetHold2 : get the second bucky bit */
-char SCA_KeyboardSensor::GetHold2_doc[] =
+const char SCA_KeyboardSensor::GetHold2_doc[] =
"getHold2()\n"
"\tReturn the code of the second key modifier to the key this \n"
"\tsensor is listening to.\n" ;
@@ -579,7 +579,7 @@ PyObject* SCA_KeyboardSensor::PyGetHold2(PyObject* self, PyObject* args, PyObjec
}
/** 6. SetHold2: change the second bucky bit */
-char SCA_KeyboardSensor::SetHold2_doc[] =
+const char SCA_KeyboardSensor::SetHold2_doc[] =
"setHold2(keycode)\n"
"\t- keycode: any code from GameKeys\n"
"\tSet the first modifier to the key this sensor should listen to.\n" ;
@@ -599,7 +599,7 @@ PyObject* SCA_KeyboardSensor::PySetHold2(PyObject* self, PyObject* args, PyObjec
}
-char SCA_KeyboardSensor::GetPressedKeys_doc[] =
+const char SCA_KeyboardSensor::GetPressedKeys_doc[] =
"getPressedKeys()\n"
"\tGet a list of pressed keys that have either been pressed, or just released this frame.\n" ;
@@ -639,7 +639,7 @@ PyObject* SCA_KeyboardSensor::PyGetPressedKeys(PyObject* self, PyObject* args, P
-char SCA_KeyboardSensor::GetCurrentlyPressedKeys_doc[] =
+const char SCA_KeyboardSensor::GetCurrentlyPressedKeys_doc[] =
"getCurrentlyPressedKeys()\n"
"\tGet a list of keys that are currently pressed.\n" ;
@@ -710,17 +710,17 @@ PyParentObject SCA_KeyboardSensor::Parents[] = {
};
PyMethodDef SCA_KeyboardSensor::Methods[] = {
- {"getKey", (PyCFunction) SCA_KeyboardSensor::sPyGetKey, METH_VARARGS, GetKey_doc},
- {"setKey", (PyCFunction) SCA_KeyboardSensor::sPySetKey, METH_VARARGS, SetKey_doc},
- {"getHold1", (PyCFunction) SCA_KeyboardSensor::sPyGetHold1, METH_VARARGS, GetHold1_doc},
- {"setHold1", (PyCFunction) SCA_KeyboardSensor::sPySetHold1, METH_VARARGS, SetHold1_doc},
- {"getHold2", (PyCFunction) SCA_KeyboardSensor::sPyGetHold2, METH_VARARGS, GetHold2_doc},
- {"setHold2", (PyCFunction) SCA_KeyboardSensor::sPySetHold2, METH_VARARGS, SetHold2_doc},
-// {"getUseAllKeys", (PyCFunction) SCA_KeyboardSensor::sPyGetUseAllKeys, METH_VARARGS, GetUseAllKeys_doc},
-// {"setUseAllKeys", (PyCFunction) SCA_KeyboardSensor::sPySetUseAllKeys, METH_VARARGS, SetUseAllKeys_doc},
- {"getPressedKeys", (PyCFunction) SCA_KeyboardSensor::sPyGetPressedKeys, METH_VARARGS, GetPressedKeys_doc},
- {"getCurrentlyPressedKeys", (PyCFunction) SCA_KeyboardSensor::sPyGetCurrentlyPressedKeys, METH_VARARGS, GetCurrentlyPressedKeys_doc},
-// {"getKeyEvents", (PyCFunction) SCA_KeyboardSensor::sPyGetKeyEvents, METH_VARARGS, GetKeyEvents_doc},
+ {"getKey", (PyCFunction) SCA_KeyboardSensor::sPyGetKey, METH_VARARGS, (PY_METHODCHAR)GetKey_doc},
+ {"setKey", (PyCFunction) SCA_KeyboardSensor::sPySetKey, METH_VARARGS, (PY_METHODCHAR)SetKey_doc},
+ {"getHold1", (PyCFunction) SCA_KeyboardSensor::sPyGetHold1, METH_VARARGS, (PY_METHODCHAR)GetHold1_doc},
+ {"setHold1", (PyCFunction) SCA_KeyboardSensor::sPySetHold1, METH_VARARGS, (PY_METHODCHAR)SetHold1_doc},
+ {"getHold2", (PyCFunction) SCA_KeyboardSensor::sPyGetHold2, METH_VARARGS, (PY_METHODCHAR)GetHold2_doc},
+ {"setHold2", (PyCFunction) SCA_KeyboardSensor::sPySetHold2, METH_VARARGS, (PY_METHODCHAR)SetHold2_doc},
+// {"getUseAllKeys", (PyCFunction) SCA_KeyboardSensor::sPyGetUseAllKeys, METH_VARARGS, (PY_METHODCHAR)GetUseAllKeys_doc},
+// {"setUseAllKeys", (PyCFunction) SCA_KeyboardSensor::sPySetUseAllKeys, METH_VARARGS, (PY_METHODCHAR)SetUseAllKeys_doc},
+ {"getPressedKeys", (PyCFunction) SCA_KeyboardSensor::sPyGetPressedKeys, METH_VARARGS, (PY_METHODCHAR)GetPressedKeys_doc},
+ {"getCurrentlyPressedKeys", (PyCFunction) SCA_KeyboardSensor::sPyGetCurrentlyPressedKeys, METH_VARARGS, (PY_METHODCHAR)GetCurrentlyPressedKeys_doc},
+// {"getKeyEvents", (PyCFunction) SCA_KeyboardSensor::sPyGetKeyEvents, METH_VARARGS, (PY_METHODCHAR)GetKeyEvents_doc},
{NULL,NULL} //Sentinel
};
diff --git a/source/gameengine/GameLogic/SCA_LogicManager.cpp b/source/gameengine/GameLogic/SCA_LogicManager.cpp
index 91e66aea359..b584b37180f 100644
--- a/source/gameengine/GameLogic/SCA_LogicManager.cpp
+++ b/source/gameengine/GameLogic/SCA_LogicManager.cpp
@@ -33,6 +33,7 @@
#include "SCA_IController.h"
#include "SCA_IActuator.h"
#include "SCA_EventManager.h"
+#include "SCA_PythonController.h"
#include <set>
#ifdef HAVE_CONFIG_H
@@ -232,8 +233,6 @@ void SCA_LogicManager::BeginFrame(double curtime, double fixedtime)
// for this frame, look up for activated sensors, and build the collection of triggered controllers
// int numsensors = this->m_activatedsensors.size(); /*unused*/
- set<SmartControllerPtr> triggeredControllerSet;
-
for (vector<SCA_ISensor*>::const_iterator is=m_activatedsensors.begin();
!(is==m_activatedsensors.end());is++)
{
@@ -244,19 +243,28 @@ void SCA_LogicManager::BeginFrame(double curtime, double fixedtime)
{
SCA_IController* contr = *c;//controllerarray->at(c);
if (contr->IsActive())
- triggeredControllerSet.insert(SmartControllerPtr(contr,0));
+ {
+ m_triggeredControllerSet.insert(SmartControllerPtr(contr,0));
+ // So that the controller knows which sensor has activited it.
+ // Only needed for the python controller though.
+ if (contr->GetType() == &SCA_PythonController::Type)
+ {
+ SCA_PythonController* pythonController = (SCA_PythonController*)contr;
+ pythonController->AddTriggeredSensor(sensor);
+ }
+ }
}
//sensor->SetActive(false);
}
// int numtriggered = triggeredControllerSet.size(); /*unused*/
- for (set<SmartControllerPtr>::iterator tit=triggeredControllerSet.begin();
- !(tit==triggeredControllerSet.end());tit++)
+ for (set<SmartControllerPtr>::iterator tit=m_triggeredControllerSet.begin();
+ !(tit==m_triggeredControllerSet.end());tit++)
{
(*tit)->Trigger(this);
}
- triggeredControllerSet.clear();
+ m_triggeredControllerSet.clear();
}
@@ -382,6 +390,17 @@ void SCA_LogicManager::AddActivatedSensor(SCA_ISensor* sensor)
}
}
+void SCA_LogicManager::AddTriggeredController(SCA_IController* controller, SCA_ISensor* sensor)
+{
+ m_triggeredControllerSet.insert(SmartControllerPtr(controller,0));
+ // so that the controller knows which sensor has activited it
+ // only needed for python controller
+ if (controller->GetType() == &SCA_PythonController::Type)
+ {
+ SCA_PythonController* pythonController = (SCA_PythonController*)controller;
+ pythonController->AddTriggeredSensor(sensor);
+ }
+}
void SCA_LogicManager::AddActiveActuator(SCA_IActuator* actua,CValue* event)
diff --git a/source/gameengine/GameLogic/SCA_LogicManager.h b/source/gameengine/GameLogic/SCA_LogicManager.h
index e0d3d506702..50383879d8f 100644
--- a/source/gameengine/GameLogic/SCA_LogicManager.h
+++ b/source/gameengine/GameLogic/SCA_LogicManager.h
@@ -99,6 +99,7 @@ class SCA_LogicManager
vector<class SCA_ISensor*> m_activatedsensors;
set<class SmartActuatorPtr> m_activeActuators;
+ set<class SmartControllerPtr> m_triggeredControllerSet;
map<SCA_ISensor*,controllerlist > m_sensorcontrollermapje;
@@ -127,6 +128,7 @@ public:
void EndFrame();
void AddActivatedSensor(SCA_ISensor* sensor);
void AddActiveActuator(SCA_IActuator* sensor,class CValue* event);
+ void AddTriggeredController(SCA_IController* controller, SCA_ISensor* sensor);
SCA_EventManager* FindEventManager(int eventmgrtype);
void RemoveGameObject(const STR_String& gameobjname);
diff --git a/source/gameengine/GameLogic/SCA_MouseSensor.cpp b/source/gameengine/GameLogic/SCA_MouseSensor.cpp
index 2298ddb0743..d4952ce4777 100644
--- a/source/gameengine/GameLogic/SCA_MouseSensor.cpp
+++ b/source/gameengine/GameLogic/SCA_MouseSensor.cpp
@@ -283,8 +283,8 @@ PyParentObject SCA_MouseSensor::Parents[] = {
};
PyMethodDef SCA_MouseSensor::Methods[] = {
- {"getXPosition", (PyCFunction) SCA_MouseSensor::sPyGetXPosition, METH_VARARGS, GetXPosition_doc},
- {"getYPosition", (PyCFunction) SCA_MouseSensor::sPyGetYPosition, METH_VARARGS, GetYPosition_doc},
+ {"getXPosition", (PyCFunction) SCA_MouseSensor::sPyGetXPosition, METH_VARARGS, (PY_METHODCHAR)GetXPosition_doc},
+ {"getYPosition", (PyCFunction) SCA_MouseSensor::sPyGetYPosition, METH_VARARGS, (PY_METHODCHAR)GetYPosition_doc},
{NULL,NULL} //Sentinel
};
@@ -293,7 +293,7 @@ PyObject* SCA_MouseSensor::_getattr(const STR_String& attr) {
}
/* get x position ---------------------------------------------------------- */
-char SCA_MouseSensor::GetXPosition_doc[] =
+const char SCA_MouseSensor::GetXPosition_doc[] =
"getXPosition\n"
"\tReturns the x-coordinate of the mouse sensor, in frame coordinates.\n"
"\tThe lower-left corner is the origin. The coordinate is given in\n"
@@ -305,7 +305,7 @@ PyObject* SCA_MouseSensor::PyGetXPosition(PyObject* self,
}
/* get y position ---------------------------------------------------------- */
-char SCA_MouseSensor::GetYPosition_doc[] =
+const char SCA_MouseSensor::GetYPosition_doc[] =
"getYPosition\n"
"\tReturns the y-coordinate of the mouse sensor, in frame coordinates.\n"
"\tThe lower-left corner is the origin. The coordinate is given in\n"
diff --git a/source/gameengine/GameLogic/SCA_PropertyActuator.cpp b/source/gameengine/GameLogic/SCA_PropertyActuator.cpp
index 7062f2cef6a..3b541e87f02 100644
--- a/source/gameengine/GameLogic/SCA_PropertyActuator.cpp
+++ b/source/gameengine/GameLogic/SCA_PropertyActuator.cpp
@@ -245,10 +245,10 @@ PyParentObject SCA_PropertyActuator::Parents[] = {
};
PyMethodDef SCA_PropertyActuator::Methods[] = {
- {"setProperty", (PyCFunction) SCA_PropertyActuator::sPySetProperty, METH_VARARGS, SetProperty_doc},
- {"getProperty", (PyCFunction) SCA_PropertyActuator::sPyGetProperty, METH_VARARGS, GetProperty_doc},
- {"setValue", (PyCFunction) SCA_PropertyActuator::sPySetValue, METH_VARARGS, SetValue_doc},
- {"getValue", (PyCFunction) SCA_PropertyActuator::sPyGetValue, METH_VARARGS, GetValue_doc},
+ {"setProperty", (PyCFunction) SCA_PropertyActuator::sPySetProperty, METH_VARARGS, (PY_METHODCHAR)SetProperty_doc},
+ {"getProperty", (PyCFunction) SCA_PropertyActuator::sPyGetProperty, METH_VARARGS, (PY_METHODCHAR)GetProperty_doc},
+ {"setValue", (PyCFunction) SCA_PropertyActuator::sPySetValue, METH_VARARGS, (PY_METHODCHAR)SetValue_doc},
+ {"getValue", (PyCFunction) SCA_PropertyActuator::sPyGetValue, METH_VARARGS, (PY_METHODCHAR)GetValue_doc},
{NULL,NULL} //Sentinel
};
@@ -257,7 +257,7 @@ PyObject* SCA_PropertyActuator::_getattr(const STR_String& attr) {
}
/* 1. setProperty */
-char SCA_PropertyActuator::SetProperty_doc[] =
+const char SCA_PropertyActuator::SetProperty_doc[] =
"setProperty(name)\n"
"\t- name: string\n"
"\tSet the property on which to operate. If there is no property\n"
@@ -283,7 +283,7 @@ PyObject* SCA_PropertyActuator::PySetProperty(PyObject* self, PyObject* args, Py
}
/* 2. getProperty */
-char SCA_PropertyActuator::GetProperty_doc[] =
+const char SCA_PropertyActuator::GetProperty_doc[] =
"getProperty(name)\n"
"\tReturn the property on which the actuator operates.\n";
PyObject* SCA_PropertyActuator::PyGetProperty(PyObject* self, PyObject* args, PyObject* kwds)
@@ -292,7 +292,7 @@ PyObject* SCA_PropertyActuator::PyGetProperty(PyObject* self, PyObject* args, Py
}
/* 3. setValue */
-char SCA_PropertyActuator::SetValue_doc[] =
+const char SCA_PropertyActuator::SetValue_doc[] =
"setValue(value)\n"
"\t- value: string\n"
"\tSet the value with which the actuator operates. If the value\n"
@@ -311,7 +311,7 @@ PyObject* SCA_PropertyActuator::PySetValue(PyObject* self, PyObject* args, PyObj
}
/* 4. getValue */
-char SCA_PropertyActuator::GetValue_doc[] =
+const char SCA_PropertyActuator::GetValue_doc[] =
"getValue()\n"
"\tReturns the value with which the actuator operates.\n";
PyObject* SCA_PropertyActuator::PyGetValue(PyObject* self, PyObject* args, PyObject* kwds)
diff --git a/source/gameengine/GameLogic/SCA_PropertySensor.cpp b/source/gameengine/GameLogic/SCA_PropertySensor.cpp
index c50c011cc63..64e3d49c6cb 100644
--- a/source/gameengine/GameLogic/SCA_PropertySensor.cpp
+++ b/source/gameengine/GameLogic/SCA_PropertySensor.cpp
@@ -333,12 +333,12 @@ PyParentObject SCA_PropertySensor::Parents[] = {
};
PyMethodDef SCA_PropertySensor::Methods[] = {
- {"getType", (PyCFunction) SCA_PropertySensor::sPyGetType, METH_VARARGS, GetType_doc},
- {"setType", (PyCFunction) SCA_PropertySensor::sPySetType, METH_VARARGS, SetType_doc},
- {"getProperty", (PyCFunction) SCA_PropertySensor::sPyGetProperty, METH_VARARGS, GetProperty_doc},
- {"setProperty", (PyCFunction) SCA_PropertySensor::sPySetProperty, METH_VARARGS, SetProperty_doc},
- {"getValue", (PyCFunction) SCA_PropertySensor::sPyGetValue, METH_VARARGS, GetValue_doc},
- {"setValue", (PyCFunction) SCA_PropertySensor::sPySetValue, METH_VARARGS, SetValue_doc},
+ {"getType", (PyCFunction) SCA_PropertySensor::sPyGetType, METH_VARARGS, (PY_METHODCHAR)GetType_doc},
+ {"setType", (PyCFunction) SCA_PropertySensor::sPySetType, METH_VARARGS, (PY_METHODCHAR)SetType_doc},
+ {"getProperty", (PyCFunction) SCA_PropertySensor::sPyGetProperty, METH_VARARGS, (PY_METHODCHAR)GetProperty_doc},
+ {"setProperty", (PyCFunction) SCA_PropertySensor::sPySetProperty, METH_VARARGS, (PY_METHODCHAR)SetProperty_doc},
+ {"getValue", (PyCFunction) SCA_PropertySensor::sPyGetValue, METH_VARARGS, (PY_METHODCHAR)GetValue_doc},
+ {"setValue", (PyCFunction) SCA_PropertySensor::sPySetValue, METH_VARARGS, (PY_METHODCHAR)SetValue_doc},
{NULL,NULL} //Sentinel
};
@@ -347,7 +347,7 @@ PyObject* SCA_PropertySensor::_getattr(const STR_String& attr) {
}
/* 1. getType */
-char SCA_PropertySensor::GetType_doc[] =
+const char SCA_PropertySensor::GetType_doc[] =
"getType()\n"
"\tReturns the type of check this sensor performs.\n";
PyObject* SCA_PropertySensor::PyGetType(PyObject* self, PyObject* args, PyObject* kwds)
@@ -356,7 +356,7 @@ PyObject* SCA_PropertySensor::PyGetType(PyObject* self, PyObject* args, PyObject
}
/* 2. setType */
-char SCA_PropertySensor::SetType_doc[] =
+const char SCA_PropertySensor::SetType_doc[] =
"setType(type)\n"
"\t- type: KX_PROPSENSOR_EQUAL, KX_PROPSENSOR_NOTEQUAL,\n"
"\t KX_PROPSENSOR_INTERVAL, KX_PROPSENSOR_CHANGED,\n"
@@ -379,7 +379,7 @@ PyObject* SCA_PropertySensor::PySetType(PyObject* self, PyObject* args, PyObject
}
/* 3. getProperty */
-char SCA_PropertySensor::GetProperty_doc[] =
+const char SCA_PropertySensor::GetProperty_doc[] =
"getProperty()\n"
"\tReturn the property with which the sensor operates.\n";
PyObject* SCA_PropertySensor::PyGetProperty(PyObject* self, PyObject* args, PyObject* kwds)
@@ -388,7 +388,7 @@ PyObject* SCA_PropertySensor::PyGetProperty(PyObject* self, PyObject* args, PyOb
}
/* 4. setProperty */
-char SCA_PropertySensor::SetProperty_doc[] =
+const char SCA_PropertySensor::SetProperty_doc[] =
"setProperty(name)\n"
"\t- name: string\n"
"\tSets the property with which to operate. If there is no property\n"
@@ -414,7 +414,7 @@ PyObject* SCA_PropertySensor::PySetProperty(PyObject* self, PyObject* args, PyOb
}
/* 5. getValue */
-char SCA_PropertySensor::GetValue_doc[] =
+const char SCA_PropertySensor::GetValue_doc[] =
"getValue()\n"
"\tReturns the value with which the sensor operates.\n";
PyObject* SCA_PropertySensor::PyGetValue(PyObject* self, PyObject* args, PyObject* kwds)
@@ -423,7 +423,7 @@ PyObject* SCA_PropertySensor::PyGetValue(PyObject* self, PyObject* args, PyObjec
}
/* 6. setValue */
-char SCA_PropertySensor::SetValue_doc[] =
+const char SCA_PropertySensor::SetValue_doc[] =
"setValue(value)\n"
"\t- value: string\n"
"\tSet the value with which the sensor operates. If the value\n"
diff --git a/source/gameengine/GameLogic/SCA_PythonController.cpp b/source/gameengine/GameLogic/SCA_PythonController.cpp
index cd1b029fc34..4cb9bc8fe53 100644
--- a/source/gameengine/GameLogic/SCA_PythonController.cpp
+++ b/source/gameengine/GameLogic/SCA_PythonController.cpp
@@ -33,8 +33,11 @@
#include "SCA_LogicManager.h"
#include "SCA_ISensor.h"
#include "SCA_IActuator.h"
+#include "PyObjectPlus.h"
#include "compile.h"
#include "eval.h"
+#include <algorithm>
+
#ifdef HAVE_CONFIG_H
#include <config.h>
@@ -139,8 +142,16 @@ void SCA_PythonController::SetDictionary(PyObject* pythondictionary)
m_pythondictionary = PyDict_Copy(pythondictionary); /* new reference */
}
+int SCA_PythonController::IsTriggered(class SCA_ISensor* sensor)
+{
+ if (std::find(m_triggeredSensors.begin(), m_triggeredSensors.end(), sensor) !=
+ m_triggeredSensors.end())
+ return 1;
+ return 0;
+}
+
#if 0
-static char* sPyGetCurrentController__doc__;
+static const char* sPyGetCurrentController__doc__;
#endif
@@ -151,7 +162,7 @@ PyObject* SCA_PythonController::sPyGetCurrentController(PyObject* self)
}
#if 0
-static char* sPyAddActiveActuator__doc__;
+static const char* sPyAddActiveActuator__doc__;
#endif
PyObject* SCA_PythonController::sPyAddActiveActuator(
@@ -188,9 +199,9 @@ PyObject* SCA_PythonController::sPyAddActiveActuator(
}
-char* SCA_PythonController::sPyGetCurrentController__doc__ = "getCurrentController()";
-char* SCA_PythonController::sPyAddActiveActuator__doc__= "addActiveActuator(actuator,bool)";
-char SCA_PythonController::GetActuators_doc[] = "getActuator";
+const char* SCA_PythonController::sPyGetCurrentController__doc__ = "getCurrentController()";
+const char* SCA_PythonController::sPyAddActiveActuator__doc__= "addActiveActuator(actuator,bool)";
+const char SCA_PythonController::GetActuators_doc[] = "getActuator";
PyTypeObject SCA_PythonController::Type = {
PyObject_HEAD_INIT(&PyType_Type)
@@ -218,10 +229,10 @@ PyParentObject SCA_PythonController::Parents[] = {
NULL
};
PyMethodDef SCA_PythonController::Methods[] = {
- {"getActuators", (PyCFunction) SCA_PythonController::sPyGetActuators, METH_NOARGS, SCA_PythonController::GetActuators_doc},
- {"getActuator", (PyCFunction) SCA_PythonController::sPyGetActuator, METH_O, SCA_PythonController::GetActuator_doc},
- {"getSensors", (PyCFunction) SCA_PythonController::sPyGetSensors, METH_NOARGS, SCA_PythonController::GetSensors_doc},
- {"getSensor", (PyCFunction) SCA_PythonController::sPyGetSensor, METH_O, SCA_PythonController::GetSensor_doc},
+ {"getActuators", (PyCFunction) SCA_PythonController::sPyGetActuators, METH_NOARGS, (PY_METHODCHAR)SCA_PythonController::GetActuators_doc},
+ {"getActuator", (PyCFunction) SCA_PythonController::sPyGetActuator, METH_O, (PY_METHODCHAR)SCA_PythonController::GetActuator_doc},
+ {"getSensors", (PyCFunction) SCA_PythonController::sPyGetSensors, METH_NOARGS, (PY_METHODCHAR)SCA_PythonController::GetSensors_doc},
+ {"getSensor", (PyCFunction) SCA_PythonController::sPyGetSensor, METH_O, (PY_METHODCHAR)SCA_PythonController::GetSensor_doc},
{"getScript", (PyCFunction) SCA_PythonController::sPyGetScript, METH_NOARGS},
{"setScript", (PyCFunction) SCA_PythonController::sPySetScript, METH_O},
{"getState", (PyCFunction) SCA_PythonController::sPyGetState, METH_NOARGS},
@@ -248,7 +259,7 @@ void SCA_PythonController::Trigger(SCA_LogicManager* logicmgr)
{
// didn't compile, so instead of compile, complain
// something is wrong, tell the user what went wrong
- printf("PYTHON SCRIPT ERROR:\n");
+ printf("Python compile error from controller \"%s\": \n", GetName().Ptr());
//PyRun_SimpleString(m_scriptText.Ptr());
PyErr_Print();
return;
@@ -285,7 +296,7 @@ void SCA_PythonController::Trigger(SCA_LogicManager* logicmgr)
else
{
// something is wrong, tell the user what went wrong
- printf("PYTHON SCRIPT ERROR:\n");
+ printf("Python script error from controller \"%s\": \n", GetName().Ptr());
PyErr_Print();
//PyRun_SimpleString(m_scriptText.Ptr());
}
@@ -294,7 +305,7 @@ void SCA_PythonController::Trigger(SCA_LogicManager* logicmgr)
// something in this dictionary and crash?
PyDict_Clear(excdict);
Py_DECREF(excdict);
-
+ m_triggeredSensors.erase(m_triggeredSensors.begin(), m_triggeredSensors.end());
m_sCurrentController = NULL;
}
@@ -318,7 +329,7 @@ PyObject* SCA_PythonController::PyGetActuators(PyObject* self)
return resultlist;
}
-char SCA_PythonController::GetSensor_doc[] =
+const char SCA_PythonController::GetSensor_doc[] =
"GetSensor (char sensorname) return linked sensor that is named [sensorname]\n";
PyObject*
SCA_PythonController::PyGetSensor(PyObject* self, PyObject* value)
@@ -348,7 +359,7 @@ SCA_PythonController::PyGetSensor(PyObject* self, PyObject* value)
-char SCA_PythonController::GetActuator_doc[] =
+const char SCA_PythonController::GetActuator_doc[] =
"GetActuator (char sensorname) return linked actuator that is named [actuatorname]\n";
PyObject*
SCA_PythonController::PyGetActuator(PyObject* self, PyObject* value)
@@ -377,7 +388,7 @@ SCA_PythonController::PyGetActuator(PyObject* self, PyObject* value)
}
-char SCA_PythonController::GetSensors_doc[] = "getSensors returns a list of all attached sensors";
+const char SCA_PythonController::GetSensors_doc[] = "getSensors returns a list of all attached sensors";
PyObject*
SCA_PythonController::PyGetSensors(PyObject* self)
{
diff --git a/source/gameengine/GameLogic/SCA_PythonController.h b/source/gameengine/GameLogic/SCA_PythonController.h
index 39b6c68c359..d9b2e242bea 100644
--- a/source/gameengine/GameLogic/SCA_PythonController.h
+++ b/source/gameengine/GameLogic/SCA_PythonController.h
@@ -36,6 +36,8 @@
#include "SCA_LogicManager.h"
#include "BoolValue.h"
+#include <vector>
+
class SCA_IObject;
class SCA_PythonController : public SCA_IController
{
@@ -47,6 +49,7 @@ class SCA_PythonController : public SCA_IController
STR_String m_scriptText;
STR_String m_scriptName;
PyObject* m_pythondictionary;
+ std::vector<class SCA_ISensor*> m_triggeredSensors;
public:
static SCA_PythonController* m_sCurrentController; // protected !!!
@@ -64,10 +67,13 @@ class SCA_PythonController : public SCA_IController
void SetScriptText(const STR_String& text);
void SetScriptName(const STR_String& name);
void SetDictionary(PyObject* pythondictionary);
+ void AddTriggeredSensor(class SCA_ISensor* sensor)
+ { m_triggeredSensors.push_back(sensor); }
+ int IsTriggered(class SCA_ISensor* sensor);
- static char* sPyGetCurrentController__doc__;
+ static const char* sPyGetCurrentController__doc__;
static PyObject* sPyGetCurrentController(PyObject* self);
- static char* sPyAddActiveActuator__doc__;
+ static const char* sPyAddActiveActuator__doc__;
static PyObject* sPyAddActiveActuator(PyObject* self,
PyObject* args);
virtual PyObject* _getattr(const STR_String& attr);
diff --git a/source/gameengine/GameLogic/SCA_RandomActuator.cpp b/source/gameengine/GameLogic/SCA_RandomActuator.cpp
index 0a1ac2d0668..7b50a483cd8 100644
--- a/source/gameengine/GameLogic/SCA_RandomActuator.cpp
+++ b/source/gameengine/GameLogic/SCA_RandomActuator.cpp
@@ -339,23 +339,23 @@ PyParentObject SCA_RandomActuator::Parents[] = {
};
PyMethodDef SCA_RandomActuator::Methods[] = {
- {"setSeed", (PyCFunction) SCA_RandomActuator::sPySetSeed, METH_VARARGS, SetSeed_doc},
- {"getSeed", (PyCFunction) SCA_RandomActuator::sPyGetSeed, METH_VARARGS, GetSeed_doc},
- {"getPara1", (PyCFunction) SCA_RandomActuator::sPyGetPara1, METH_VARARGS, GetPara1_doc},
- {"getPara2", (PyCFunction) SCA_RandomActuator::sPyGetPara2, METH_VARARGS, GetPara2_doc},
- {"getDistribution", (PyCFunction) SCA_RandomActuator::sPyGetDistribution, METH_VARARGS, GetDistribution_doc},
- {"setProperty", (PyCFunction) SCA_RandomActuator::sPySetProperty, METH_VARARGS, SetProperty_doc},
- {"getProperty", (PyCFunction) SCA_RandomActuator::sPyGetProperty, METH_VARARGS, GetProperty_doc},
- {"setBoolConst", (PyCFunction) SCA_RandomActuator::sPySetBoolConst, METH_VARARGS, SetBoolConst_doc},
- {"setBoolUniform", (PyCFunction) SCA_RandomActuator::sPySetBoolUniform, METH_VARARGS, SetBoolUniform_doc},
- {"setBoolBernouilli",(PyCFunction) SCA_RandomActuator::sPySetBoolBernouilli, METH_VARARGS, SetBoolBernouilli_doc},
- {"setIntConst", (PyCFunction) SCA_RandomActuator::sPySetIntConst, METH_VARARGS, SetIntConst_doc},
- {"setIntUniform", (PyCFunction) SCA_RandomActuator::sPySetIntUniform, METH_VARARGS, SetIntUniform_doc},
- {"setIntPoisson", (PyCFunction) SCA_RandomActuator::sPySetIntPoisson, METH_VARARGS, SetIntPoisson_doc},
- {"setFloatConst", (PyCFunction) SCA_RandomActuator::sPySetFloatConst, METH_VARARGS, SetFloatConst_doc},
- {"setFloatUniform", (PyCFunction) SCA_RandomActuator::sPySetFloatUniform, METH_VARARGS, SetFloatUniform_doc},
- {"setFloatNormal", (PyCFunction) SCA_RandomActuator::sPySetFloatNormal, METH_VARARGS, SetFloatNormal_doc},
- {"setFloatNegativeExponential", (PyCFunction) SCA_RandomActuator::sPySetFloatNegativeExponential, METH_VARARGS, SetFloatNegativeExponential_doc},
+ {"setSeed", (PyCFunction) SCA_RandomActuator::sPySetSeed, METH_VARARGS, (PY_METHODCHAR)SetSeed_doc},
+ {"getSeed", (PyCFunction) SCA_RandomActuator::sPyGetSeed, METH_VARARGS, (PY_METHODCHAR)GetSeed_doc},
+ {"getPara1", (PyCFunction) SCA_RandomActuator::sPyGetPara1, METH_VARARGS, (PY_METHODCHAR)GetPara1_doc},
+ {"getPara2", (PyCFunction) SCA_RandomActuator::sPyGetPara2, METH_VARARGS, (PY_METHODCHAR)GetPara2_doc},
+ {"getDistribution", (PyCFunction) SCA_RandomActuator::sPyGetDistribution, METH_VARARGS, (PY_METHODCHAR)GetDistribution_doc},
+ {"setProperty", (PyCFunction) SCA_RandomActuator::sPySetProperty, METH_VARARGS, (PY_METHODCHAR)SetProperty_doc},
+ {"getProperty", (PyCFunction) SCA_RandomActuator::sPyGetProperty, METH_VARARGS, (PY_METHODCHAR)GetProperty_doc},
+ {"setBoolConst", (PyCFunction) SCA_RandomActuator::sPySetBoolConst, METH_VARARGS, (PY_METHODCHAR)SetBoolConst_doc},
+ {"setBoolUniform", (PyCFunction) SCA_RandomActuator::sPySetBoolUniform, METH_VARARGS, (PY_METHODCHAR)SetBoolUniform_doc},
+ {"setBoolBernouilli",(PyCFunction) SCA_RandomActuator::sPySetBoolBernouilli, METH_VARARGS, (PY_METHODCHAR)SetBoolBernouilli_doc},
+ {"setIntConst", (PyCFunction) SCA_RandomActuator::sPySetIntConst, METH_VARARGS, (PY_METHODCHAR)SetIntConst_doc},
+ {"setIntUniform", (PyCFunction) SCA_RandomActuator::sPySetIntUniform, METH_VARARGS, (PY_METHODCHAR)SetIntUniform_doc},
+ {"setIntPoisson", (PyCFunction) SCA_RandomActuator::sPySetIntPoisson, METH_VARARGS, (PY_METHODCHAR)SetIntPoisson_doc},
+ {"setFloatConst", (PyCFunction) SCA_RandomActuator::sPySetFloatConst, METH_VARARGS, (PY_METHODCHAR)SetFloatConst_doc},
+ {"setFloatUniform", (PyCFunction) SCA_RandomActuator::sPySetFloatUniform, METH_VARARGS, (PY_METHODCHAR)SetFloatUniform_doc},
+ {"setFloatNormal", (PyCFunction) SCA_RandomActuator::sPySetFloatNormal, METH_VARARGS, (PY_METHODCHAR)SetFloatNormal_doc},
+ {"setFloatNegativeExponential", (PyCFunction) SCA_RandomActuator::sPySetFloatNegativeExponential, METH_VARARGS, (PY_METHODCHAR)SetFloatNegativeExponential_doc},
{NULL,NULL} //Sentinel
};
@@ -364,7 +364,7 @@ PyObject* SCA_RandomActuator::_getattr(const STR_String& attr) {
}
/* 1. setSeed */
-char SCA_RandomActuator::SetSeed_doc[] =
+const char SCA_RandomActuator::SetSeed_doc[] =
"setSeed(seed)\n"
"\t- seed: integer\n"
"\tSet the initial seed of the generator. Equal seeds produce\n"
@@ -381,7 +381,7 @@ PyObject* SCA_RandomActuator::PySetSeed(PyObject* self, PyObject* args, PyObject
Py_Return;
}
/* 2. getSeed */
-char SCA_RandomActuator::GetSeed_doc[] =
+const char SCA_RandomActuator::GetSeed_doc[] =
"getSeed()\n"
"\tReturns the initial seed of the generator. Equal seeds produce\n"
"\tequal series.\n";
@@ -390,7 +390,7 @@ PyObject* SCA_RandomActuator::PyGetSeed(PyObject* self, PyObject* args, PyObject
}
/* 4. getPara1 */
-char SCA_RandomActuator::GetPara1_doc[] =
+const char SCA_RandomActuator::GetPara1_doc[] =
"getPara1()\n"
"\tReturns the first parameter of the active distribution. Refer\n"
"\tto the documentation of the generator types for the meaning\n"
@@ -400,7 +400,7 @@ PyObject* SCA_RandomActuator::PyGetPara1(PyObject* self, PyObject* args, PyObjec
}
/* 6. getPara2 */
-char SCA_RandomActuator::GetPara2_doc[] =
+const char SCA_RandomActuator::GetPara2_doc[] =
"getPara2()\n"
"\tReturns the first parameter of the active distribution. Refer\n"
"\tto the documentation of the generator types for the meaning\n"
@@ -410,7 +410,7 @@ PyObject* SCA_RandomActuator::PyGetPara2(PyObject* self, PyObject* args, PyObjec
}
/* 8. getDistribution */
-char SCA_RandomActuator::GetDistribution_doc[] =
+const char SCA_RandomActuator::GetDistribution_doc[] =
"getDistribution()\n"
"\tReturns the type of the active distribution.\n";
PyObject* SCA_RandomActuator::PyGetDistribution(PyObject* self, PyObject* args, PyObject* kwds) {
@@ -418,7 +418,7 @@ PyObject* SCA_RandomActuator::PyGetDistribution(PyObject* self, PyObject* args,
}
/* 9. setProperty */
-char SCA_RandomActuator::SetProperty_doc[] =
+const char SCA_RandomActuator::SetProperty_doc[] =
"setProperty(name)\n"
"\t- name: string\n"
"\tSet the property to which the random value is assigned. If the \n"
@@ -441,7 +441,7 @@ PyObject* SCA_RandomActuator::PySetProperty(PyObject* self, PyObject* args, PyOb
Py_Return;
}
/* 10. getProperty */
-char SCA_RandomActuator::GetProperty_doc[] =
+const char SCA_RandomActuator::GetProperty_doc[] =
"getProperty(name)\n"
"\tReturn the property to which the random value is assigned. If the \n"
"\tgenerator and property types do not match, the assignment is ignored.\n";
@@ -450,7 +450,7 @@ PyObject* SCA_RandomActuator::PyGetProperty(PyObject* self, PyObject* args, PyOb
}
/* 11. setBoolConst */
-char SCA_RandomActuator::SetBoolConst_doc[] =
+const char SCA_RandomActuator::SetBoolConst_doc[] =
"setBoolConst(value)\n"
"\t- value: 0 or 1\n"
"\tSet this generator to produce a constant boolean value.\n";
@@ -470,7 +470,7 @@ PyObject* SCA_RandomActuator::PySetBoolConst(PyObject* self,
Py_Return;
}
/* 12. setBoolUniform, */
-char SCA_RandomActuator::SetBoolUniform_doc[] =
+const char SCA_RandomActuator::SetBoolUniform_doc[] =
"setBoolUniform()\n"
"\tSet this generator to produce true and false, each with 50%% chance of occuring\n";
PyObject* SCA_RandomActuator::PySetBoolUniform(PyObject* self,
@@ -482,7 +482,7 @@ PyObject* SCA_RandomActuator::PySetBoolUniform(PyObject* self,
Py_Return;
}
/* 13. setBoolBernouilli, */
-char SCA_RandomActuator::SetBoolBernouilli_doc[] =
+const char SCA_RandomActuator::SetBoolBernouilli_doc[] =
"setBoolBernouilli(value)\n"
"\t- value: a float between 0 and 1\n"
"\tReturn false value * 100%% of the time.\n";
@@ -500,7 +500,7 @@ PyObject* SCA_RandomActuator::PySetBoolBernouilli(PyObject* self,
Py_Return;
}
/* 14. setIntConst,*/
-char SCA_RandomActuator::SetIntConst_doc[] =
+const char SCA_RandomActuator::SetIntConst_doc[] =
"setIntConst(value)\n"
"\t- value: integer\n"
"\tAlways return value\n";
@@ -518,7 +518,7 @@ PyObject* SCA_RandomActuator::PySetIntConst(PyObject* self,
Py_Return;
}
/* 15. setIntUniform,*/
-char SCA_RandomActuator::SetIntUniform_doc[] =
+const char SCA_RandomActuator::SetIntUniform_doc[] =
"setIntUniform(lower_bound, upper_bound)\n"
"\t- lower_bound: integer\n"
"\t- upper_bound: integer\n"
@@ -539,7 +539,7 @@ PyObject* SCA_RandomActuator::PySetIntUniform(PyObject* self,
Py_Return;
}
/* 16. setIntPoisson, */
-char SCA_RandomActuator::SetIntPoisson_doc[] =
+const char SCA_RandomActuator::SetIntPoisson_doc[] =
"setIntPoisson(value)\n"
"\t- value: float\n"
"\tReturn a Poisson-distributed number. This performs a series\n"
@@ -559,7 +559,7 @@ PyObject* SCA_RandomActuator::PySetIntPoisson(PyObject* self,
Py_Return;
}
/* 17. setFloatConst,*/
-char SCA_RandomActuator::SetFloatConst_doc[] =
+const char SCA_RandomActuator::SetFloatConst_doc[] =
"setFloatConst(value)\n"
"\t- value: float\n"
"\tAlways return value\n";
@@ -577,7 +577,7 @@ PyObject* SCA_RandomActuator::PySetFloatConst(PyObject* self,
Py_Return;
}
/* 18. setFloatUniform, */
-char SCA_RandomActuator::SetFloatUniform_doc[] =
+const char SCA_RandomActuator::SetFloatUniform_doc[] =
"setFloatUniform(lower_bound, upper_bound)\n"
"\t- lower_bound: float\n"
"\t- upper_bound: float\n"
@@ -598,7 +598,7 @@ PyObject* SCA_RandomActuator::PySetFloatUniform(PyObject* self,
Py_Return;
}
/* 19. setFloatNormal, */
-char SCA_RandomActuator::SetFloatNormal_doc[] =
+const char SCA_RandomActuator::SetFloatNormal_doc[] =
"setFloatNormal(mean, standard_deviation)\n"
"\t- mean: float\n"
"\t- standard_deviation: float\n"
@@ -619,7 +619,7 @@ PyObject* SCA_RandomActuator::PySetFloatNormal(PyObject* self,
Py_Return;
}
/* 20. setFloatNegativeExponential, */
-char SCA_RandomActuator::SetFloatNegativeExponential_doc[] =
+const char SCA_RandomActuator::SetFloatNegativeExponential_doc[] =
"setFloatNegativeExponential(half_life)\n"
"\t- half_life: float\n"
"\tReturn negative-exponentially distributed numbers. The half-life 'time'\n"
diff --git a/source/gameengine/GameLogic/SCA_RandomSensor.cpp b/source/gameengine/GameLogic/SCA_RandomSensor.cpp
index 3626522e49a..202fd6382e6 100644
--- a/source/gameengine/GameLogic/SCA_RandomSensor.cpp
+++ b/source/gameengine/GameLogic/SCA_RandomSensor.cpp
@@ -154,9 +154,9 @@ PyParentObject SCA_RandomSensor::Parents[] = {
};
PyMethodDef SCA_RandomSensor::Methods[] = {
- {"setSeed", (PyCFunction) SCA_RandomSensor::sPySetSeed, METH_VARARGS, SetSeed_doc},
- {"getSeed", (PyCFunction) SCA_RandomSensor::sPyGetSeed, METH_VARARGS, GetSeed_doc},
- {"getLastDraw", (PyCFunction) SCA_RandomSensor::sPyGetLastDraw, METH_VARARGS, GetLastDraw_doc},
+ {"setSeed", (PyCFunction) SCA_RandomSensor::sPySetSeed, METH_VARARGS, (PY_METHODCHAR)SetSeed_doc},
+ {"getSeed", (PyCFunction) SCA_RandomSensor::sPyGetSeed, METH_VARARGS, (PY_METHODCHAR)GetSeed_doc},
+ {"getLastDraw", (PyCFunction) SCA_RandomSensor::sPyGetLastDraw, METH_VARARGS, (PY_METHODCHAR)GetLastDraw_doc},
{NULL,NULL} //Sentinel
};
@@ -165,7 +165,7 @@ PyObject* SCA_RandomSensor::_getattr(const STR_String& attr) {
}
/* 1. setSeed */
-char SCA_RandomSensor::SetSeed_doc[] =
+const char SCA_RandomSensor::SetSeed_doc[] =
"setSeed(seed)\n"
"\t- seed: integer\n"
"\tSet the initial seed of the generator. Equal seeds produce\n"
@@ -183,7 +183,7 @@ PyObject* SCA_RandomSensor::PySetSeed(PyObject* self, PyObject* args, PyObject*
}
/* 2. getSeed */
-char SCA_RandomSensor::GetSeed_doc[] =
+const char SCA_RandomSensor::GetSeed_doc[] =
"getSeed()\n"
"\tReturns the initial seed of the generator. Equal seeds produce\n"
"\tequal series.\n";
@@ -192,7 +192,7 @@ PyObject* SCA_RandomSensor::PyGetSeed(PyObject* self, PyObject* args, PyObject*
}
/* 3. getLastDraw */
-char SCA_RandomSensor::GetLastDraw_doc[] =
+const char SCA_RandomSensor::GetLastDraw_doc[] =
"getLastDraw()\n"
"\tReturn the last value that was drawn.\n";
PyObject* SCA_RandomSensor::PyGetLastDraw(PyObject* self, PyObject* args, PyObject* kwds) {
diff --git a/source/gameengine/GameLogic/SConscript b/source/gameengine/GameLogic/SConscript
index 1ca884f6dec..fa5a3123215 100644
--- a/source/gameengine/GameLogic/SConscript
+++ b/source/gameengine/GameLogic/SConscript
@@ -10,4 +10,9 @@ incs += ' #/source/gameengine/Rasterizer'
incs += ' ' + env['BF_PYTHON_INC']
incs += ' ' + env['BF_SDL_INC']
-env.BlenderLib ( 'bf_logic', sources, Split(incs), [], libtype=['game','player'], priority=[30, 110] )
+defs = ''
+
+if not env['WITH_BF_SDL']:
+ defs += ' DISABLE_SDL'
+
+env.BlenderLib ( 'bf_logic', sources, Split(incs), Split(defs), libtype=['game','player'], priority=[30, 110] )
diff --git a/source/gameengine/GamePlayer/CMakeLists.txt b/source/gameengine/GamePlayer/CMakeLists.txt
index ff1040bfb40..fc5912155cf 100644
--- a/source/gameengine/GamePlayer/CMakeLists.txt
+++ b/source/gameengine/GamePlayer/CMakeLists.txt
@@ -25,3 +25,7 @@
# ***** END GPL LICENSE BLOCK *****
SUBDIRS(common ghost)
+
+IF(WITH_WEBPLUGIN)
+ SUBDIRS(xembed)
+ENDIF(WITH_WEBPLUGIN)
diff --git a/source/gameengine/GamePlayer/common/CMakeLists.txt b/source/gameengine/GamePlayer/common/CMakeLists.txt
index e26f8b9d69a..0c6c4179e2d 100644
--- a/source/gameengine/GamePlayer/common/CMakeLists.txt
+++ b/source/gameengine/GamePlayer/common/CMakeLists.txt
@@ -30,7 +30,6 @@ SET(SRC
GPC_Engine.cpp
GPC_KeyboardDevice.cpp
GPC_MouseDevice.cpp
- GPC_PolygonMaterial.cpp
GPC_RawImage.cpp
GPC_RawLoadDotBlendArray.cpp
GPC_RawLogoArrays.cpp
@@ -69,6 +68,7 @@ SET(INC
../../../../source/gameengine/GamePlayer/ghost
../../../../source/blender/misc
../../../../source/blender/blenloader
+ ../../../../source/blender/gpu
../../../../extern/glew/include
${PYTHON_INC}
${SOLID_INC}
diff --git a/source/gameengine/GamePlayer/common/GPC_RawImage.cpp b/source/gameengine/GamePlayer/common/GPC_RawImage.cpp
index a9cfb0a9366..e6e97cbdfd3 100644
--- a/source/gameengine/GamePlayer/common/GPC_RawImage.cpp
+++ b/source/gameengine/GamePlayer/common/GPC_RawImage.cpp
@@ -45,7 +45,7 @@ GPC_RawImage::GPC_RawImage()
bool GPC_RawImage::Load(
- char *srcName,
+ const char *srcName,
int destWidth, int destHeight,
TImageAlignment alignment, int offsetX, int offsetY)
{
diff --git a/source/gameengine/GamePlayer/common/GPC_RawImage.h b/source/gameengine/GamePlayer/common/GPC_RawImage.h
index 17c00d2fcc3..49a3043bffc 100644
--- a/source/gameengine/GamePlayer/common/GPC_RawImage.h
+++ b/source/gameengine/GamePlayer/common/GPC_RawImage.h
@@ -61,7 +61,7 @@ public:
* @param offsetX Amount of horzontal offset applied to the resource image.
* @param offsetY Amount of vertical offset applied to the resource image.
*/
- virtual bool Load(char *srcName,
+ virtual bool Load(const char *srcName,
int destWidth, int destHeight,
TImageAlignment alignment = alignTopLeft,
int offsetX = 0, int offsetY = 0);
diff --git a/source/gameengine/GamePlayer/common/GPC_RenderTools.cpp b/source/gameengine/GamePlayer/common/GPC_RenderTools.cpp
index 8b828393c67..78d8eaf2aa3 100644
--- a/source/gameengine/GamePlayer/common/GPC_RenderTools.cpp
+++ b/source/gameengine/GamePlayer/common/GPC_RenderTools.cpp
@@ -27,141 +27,256 @@
* ***** END GPL LICENSE BLOCK *****
*/
-#include <assert.h>
-
-#ifdef WIN32
-#pragma warning (disable : 4786)
-#include <windows.h>
-#endif
-
#include "GL/glew.h"
-#include <iostream>
-
-#include "GPC_RenderTools.h"
-
#include "RAS_IRenderTools.h"
#include "RAS_IRasterizer.h"
#include "RAS_LightObject.h"
#include "RAS_ICanvas.h"
#include "RAS_GLExtensionManager.h"
-// next two includes/dependencies come from the shadow feature
-// it needs the gameobject and the sumo physics scene for a raycast
#include "KX_GameObject.h"
-
-#include "GPC_PolygonMaterial.h"
#include "KX_PolygonMaterial.h"
-#include "Value.h"
+#include "KX_BlenderMaterial.h"
+#include "KX_RayCast.h"
+#include "KX_IPhysicsController.h"
+
+#include "PHY_IPhysicsEnvironment.h"
-//#include "KX_BlenderGL.h" // for text printing
-//#include "KX_BlenderClientObject.h"
#include "STR_String.h"
-#include "RAS_BucketManager.h" // for polymaterial (needed for textprinting)
-
-
-// Blender includes
-/* This list includes only data type definitions */
-#include "DNA_object_types.h"
-#include "DNA_material_types.h"
-#include "DNA_image_types.h"
-#include "DNA_lamp_types.h"
-#include "DNA_group_types.h"
-#include "DNA_scene_types.h"
-#include "DNA_camera_types.h"
-#include "DNA_property_types.h"
-#include "DNA_text_types.h"
-#include "DNA_sensor_types.h"
-#include "DNA_controller_types.h"
-#include "DNA_actuator_types.h"
-#include "DNA_mesh_types.h"
-#include "DNA_meshdata_types.h"
-#include "DNA_view3d_types.h"
-#include "DNA_world_types.h"
-
-#include "BKE_global.h"
-#include "BKE_image.h"
-#include "BKE_bmfont.h"
+
+#include "GPU_draw.h"
+
+#include "BKE_bmfont.h" // for text printing
#include "BKE_bmfont_types.h"
-#include "BKE_main.h"
-#include "IMB_imbuf_types.h"
-// End of Blender includes
+#include "GPC_RenderTools.h"
-#include "KX_Scene.h"
-#include "KX_RayCast.h"
-#include "KX_IPhysicsController.h"
-#include "PHY_IPhysicsEnvironment.h"
-#include "KX_BlenderMaterial.h"
+unsigned int GPC_RenderTools::m_numgllights;
GPC_RenderTools::GPC_RenderTools()
{
m_font = BMF_GetFont(BMF_kHelvetica10);
+
glGetIntegerv(GL_MAX_LIGHTS, (GLint*) &m_numgllights);
if (m_numgllights < 8)
m_numgllights = 8;
}
-
GPC_RenderTools::~GPC_RenderTools()
{
}
+void GPC_RenderTools::BeginFrame(RAS_IRasterizer* rasty)
+{
+ m_clientobject = NULL;
+ m_lastlightlayer = -1;
+ m_lastlighting = false;
+ DisableOpenGLLights();
+}
void GPC_RenderTools::EndFrame(RAS_IRasterizer* rasty)
{
}
+/* ProcessLighting performs lighting on objects. the layer is a bitfield that
+ * contains layer information. There are 20 'official' layers in blender. A
+ * light is applied on an object only when they are in the same layer. OpenGL
+ * has a maximum of 8 lights (simultaneous), so 20 * 8 lights are possible in
+ * a scene. */
-void GPC_RenderTools::BeginFrame(RAS_IRasterizer* rasty)
+void GPC_RenderTools::ProcessLighting(int layer, const MT_Transform& viewmat)
{
- m_clientobject=NULL;
- m_modified=true;
- DisableOpenGLLights();
+ if(m_lastlightlayer == layer)
+ return;
-}
+ m_lastlightlayer = layer;
-int GPC_RenderTools::ProcessLighting(int layer)
-{
- int result = false;
+ bool enable = false;
- if (layer < 0)
- {
- DisableOpenGLLights();
- result = false;
- } else
+ if (layer >= 0)
{
if (m_clientobject)
- {
- if (applyLights(layer))
- {
- EnableOpenGLLights();
- result = true;
- } else
- {
- DisableOpenGLLights();
- result = false;
- }
+ {
+ if (layer == RAS_LIGHT_OBJECT_LAYER)
+ layer = static_cast<KX_GameObject*>(m_clientobject)->GetLayer();
+
+ enable = applyLights(layer, viewmat);
}
}
- return result;
+
+ if(enable)
+ EnableOpenGLLights();
+ else
+ DisableOpenGLLights();
}
void GPC_RenderTools::EnableOpenGLLights()
{
+ if(m_lastlighting == true)
+ return;
+
glEnable(GL_LIGHTING);
glEnable(GL_COLOR_MATERIAL);
- glColorMaterial(GL_FRONT_AND_BACK,GL_DIFFUSE);
+
+ glColorMaterial(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE);
+ glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, true);
if (GLEW_EXT_separate_specular_color || GLEW_VERSION_1_2)
glLightModeli(GL_LIGHT_MODEL_COLOR_CONTROL, GL_SEPARATE_SPECULAR_COLOR);
+
+ m_lastlighting = true;
+}
+
+void GPC_RenderTools::DisableOpenGLLights()
+{
+ if(m_lastlighting == false)
+ return;
+
+ glDisable(GL_LIGHTING);
+ glDisable(GL_COLOR_MATERIAL);
+
+ m_lastlighting = false;
+}
+
+
+void GPC_RenderTools::SetClientObject(RAS_IRasterizer *rasty, void* obj)
+{
+ if (m_clientobject != obj)
+ {
+ bool ccw = (obj == NULL || !((KX_GameObject*)obj)->IsNegativeScaling());
+ rasty->SetFrontFace(ccw);
+
+ m_clientobject = obj;
+ }
+}
+
+bool GPC_RenderTools::RayHit(KX_ClientObjectInfo* client, KX_RayCast* result, void * const data)
+{
+ double* const oglmatrix = (double* const) data;
+ MT_Point3 resultpoint(result->m_hitPoint);
+ MT_Vector3 resultnormal(result->m_hitNormal);
+ MT_Vector3 left(oglmatrix[0],oglmatrix[1],oglmatrix[2]);
+ MT_Vector3 dir = -(left.cross(resultnormal)).safe_normalized();
+ left = (dir.cross(resultnormal)).safe_normalized();
+ // for the up vector, we take the 'resultnormal' returned by the physics
+
+ double maat[16]={
+ left[0], left[1], left[2], 0,
+ dir[0], dir[1], dir[2], 0,
+ resultnormal[0],resultnormal[1],resultnormal[2], 0,
+ 0, 0, 0, 1};
+ glTranslated(resultpoint[0],resultpoint[1],resultpoint[2]);
+ //glMultMatrixd(oglmatrix);
+ glMultMatrixd(maat);
+ return true;
}
-void GPC_RenderTools::RenderText2D(RAS_TEXT_RENDER_MODE mode,
- const char* text,
- int xco,
- int yco,
- int width,
- int height)
+void GPC_RenderTools::applyTransform(RAS_IRasterizer* rasty,double* oglmatrix,int objectdrawmode )
+{
+ /* FIXME:
+ blender: intern/moto/include/MT_Vector3.inl:42: MT_Vector3 operator/(const
+ MT_Vector3&, double): Assertion `!MT_fuzzyZero(s)' failed.
+
+ Program received signal SIGABRT, Aborted.
+ [Switching to Thread 16384 (LWP 1519)]
+ 0x40477571 in kill () from /lib/libc.so.6
+ (gdb) bt
+ #7 0x08334368 in MT_Vector3::normalized() const ()
+ #8 0x0833e6ec in GPC_RenderTools::applyTransform(RAS_IRasterizer*, double*, int) ()
+ */
+
+ if (objectdrawmode & RAS_IPolyMaterial::BILLBOARD_SCREENALIGNED ||
+ objectdrawmode & RAS_IPolyMaterial::BILLBOARD_AXISALIGNED)
+ {
+ // rotate the billboard/halo
+ //page 360/361 3D Game Engine Design, David Eberly for a discussion
+ // on screen aligned and axis aligned billboards
+ // assumed is that the preprocessor transformed all billboard polygons
+ // so that their normal points into the positive x direction (1.0 , 0.0 , 0.0)
+ // when new parenting for objects is done, this rotation
+ // will be moved into the object
+
+ MT_Point3 objpos (oglmatrix[12],oglmatrix[13],oglmatrix[14]);
+ MT_Point3 campos = rasty->GetCameraPosition();
+ MT_Vector3 dir = (campos - objpos).safe_normalized();
+ MT_Vector3 up(0,0,1.0);
+
+ KX_GameObject* gameobj = (KX_GameObject*) this->m_clientobject;
+ // get scaling of halo object
+ MT_Vector3 size = gameobj->GetSGNode()->GetLocalScale();
+
+ bool screenaligned = (objectdrawmode & RAS_IPolyMaterial::BILLBOARD_SCREENALIGNED)!=0;//false; //either screen or axisaligned
+ if (screenaligned)
+ {
+ up = (up - up.dot(dir) * dir).safe_normalized();
+ } else
+ {
+ dir = (dir - up.dot(dir)*up).safe_normalized();
+ }
+
+ MT_Vector3 left = dir.normalized();
+ dir = (left.cross(up)).normalized();
+
+ // we have calculated the row vectors, now we keep
+ // local scaling into account:
+
+ left *= size[0];
+ dir *= size[1];
+ up *= size[2];
+ double maat[16]={
+ left[0], left[1],left[2], 0,
+ dir[0], dir[1],dir[2],0,
+ up[0],up[1],up[2],0,
+ 0,0,0,1};
+ glTranslated(objpos[0],objpos[1],objpos[2]);
+ glMultMatrixd(maat);
+
+ } else
+ {
+ if (objectdrawmode & RAS_IPolyMaterial::SHADOW)
+ {
+ // shadow must be cast to the ground, physics system needed here!
+ MT_Point3 frompoint(oglmatrix[12],oglmatrix[13],oglmatrix[14]);
+ KX_GameObject *gameobj = (KX_GameObject*) this->m_clientobject;
+ MT_Vector3 direction = MT_Vector3(0,0,-1);
+
+ direction.normalize();
+ direction *= 100000;
+
+ MT_Point3 topoint = frompoint + direction;
+
+ KX_Scene* kxscene = (KX_Scene*) m_auxilaryClientInfo;
+ PHY_IPhysicsEnvironment* physics_environment = kxscene->GetPhysicsEnvironment();
+ KX_IPhysicsController* physics_controller = gameobj->GetPhysicsController();
+
+ KX_GameObject *parent = gameobj->GetParent();
+ if (!physics_controller && parent)
+ physics_controller = parent->GetPhysicsController();
+ if (parent)
+ parent->Release();
+
+ KX_RayCast::Callback<GPC_RenderTools> callback(this, physics_controller, oglmatrix);
+ if (!KX_RayCast::RayTest(physics_environment, frompoint, topoint, callback))
+ {
+ // couldn't find something to cast the shadow on...
+ glMultMatrixd(oglmatrix);
+ }
+ } else
+ {
+
+ // 'normal' object
+ glMultMatrixd(oglmatrix);
+ }
+ }
+}
+
+
+void GPC_RenderTools::RenderText2D(RAS_TEXT_RENDER_MODE mode,
+ const char* text,
+ int xco,
+ int yco,
+ int width,
+ int height)
{
STR_String tmpstr(text);
int lines;
@@ -234,21 +349,19 @@ void GPC_RenderTools::RenderText2D(RAS_TEXT_RENDER_MODE mode,
glDisable(GL_LIGHTING);
}
-/**
- * Copied from KX_BlenderRenderTools.cpp in KX_blenderhook
- * Renders text into a (series of) polygon(s), using a texture font,
- * Each character consists of one polygon (one quad or two triangles)
- */
+/* Render Text renders text into a (series of) polygon, using a texture font,
+ * Each character consists of one polygon (one quad or two triangles) */
+
void GPC_RenderTools::RenderText(
int mode,
RAS_IPolyMaterial* polymat,
- float v1[3], float v2[3], float v3[3], float v4[3])
+ float v1[3], float v2[3], float v3[3], float v4[3], int glattrib)
{
STR_String mytext = ((CValue*)m_clientobject)->GetPropertyText("Text");
const unsigned int flag = polymat->GetFlag();
struct MTFace* tface = 0;
- unsigned int* col = 0;
+ unsigned int *col = 0;
if(flag & RAS_BLENDERMAT) {
KX_BlenderMaterial *bl_mat = static_cast<KX_BlenderMaterial*>(polymat);
@@ -259,110 +372,29 @@ void GPC_RenderTools::RenderText(
tface = blenderpoly->GetMTFace();
col = blenderpoly->GetMCol();
}
-
- BL_RenderText(mode, mytext, mytext.Length(), tface, col, v1, v2, v3, v4);
+
+ GPU_render_text(tface, mode, mytext, mytext.Length(), col, v1, v2, v3, v4, glattrib);
}
-
-/**
- * Copied from KX_BlenderGL.cpp in KX_blenderhook
- */
-void GPC_RenderTools::BL_RenderText(
- int mode,
- const char* textstr,
- int textlen,
- struct MTFace* tface,
- unsigned int* col,
- float v1[3],float v2[3],float v3[3],float v4[3])
+void GPC_RenderTools::PushMatrix()
{
- struct Image* ima;
-
- if (mode & TF_BMFONT) {
- //char string[MAX_PROPSTRING];
-// float tmat[4][4];
- int characters, index, character;
- float centerx, centery, sizex, sizey, transx, transy, movex, movey, advance;
-
-// bProperty *prop;
-
- // string = "Frank van Beek";
-
- characters = textlen;
-
- ima = (struct Image*) tface->tpage;
- if (ima == NULL) {
- characters = 0;
- }
-
- if(!col) glColor3f(1.0f, 1.0f, 1.0f);
-
- glPushMatrix();
- for (index = 0; index < characters; index++) {
- // lets calculate offset stuff
- character = textstr[index];
-
- // space starts at offset 1
- // character = character - ' ' + 1;
-
- matrixGlyph((ImBuf *)ima->ibufs.first, character, & centerx, &centery, &sizex, &sizey, &transx, &transy, &movex, &movey, &advance);
-
- glBegin(GL_POLYGON);
- // printf(" %c %f %f %f %f\n", character, tface->uv[0][0], tface->uv[0][1], );
- // glTexCoord2f((tface->uv[0][0] - centerx) * sizex + transx, (tface->uv[0][1] - centery) * sizey + transy);
- glTexCoord2f((tface->uv[0][0] - centerx) * sizex + transx, (tface->uv[0][1] - centery) * sizey + transy);
-
- if(col) BL_spack(col[0]);
- // glVertex3fv(v1);
- glVertex3f(sizex * v1[0] + movex, sizey * v1[1] + movey, v1[2]);
-
- glTexCoord2f((tface->uv[1][0] - centerx) * sizex + transx, (tface->uv[1][1] - centery) * sizey + transy);
- if(col) BL_spack(col[1]);
- // glVertex3fv(v2);
- glVertex3f(sizex * v2[0] + movex, sizey * v2[1] + movey, v2[2]);
-
- glTexCoord2f((tface->uv[2][0] - centerx) * sizex + transx, (tface->uv[2][1] - centery) * sizey + transy);
- if(col) BL_spack(col[2]);
- // glVertex3fv(v3);
- glVertex3f(sizex * v3[0] + movex, sizey * v3[1] + movey, v3[2]);
-
- if(v4) {
- // glTexCoord2f((tface->uv[3][0] - centerx) * sizex + transx, 1.0 - (1.0 - tface->uv[3][1]) * sizey - transy);
- glTexCoord2f((tface->uv[3][0] - centerx) * sizex + transx, (tface->uv[3][1] - centery) * sizey + transy);
- if(col) BL_spack(col[3]);
- // glVertex3fv(v4);
- glVertex3f(sizex * v4[0] + movex, sizey * v4[1] + movey, v4[2]);
- }
- glEnd();
-
- glTranslatef(advance, 0.0, 0.0);
- }
- glPopMatrix();
-
- }
+ glPushMatrix();
}
-
-RAS_IPolyMaterial* GPC_RenderTools::CreateBlenderPolyMaterial(
- const STR_String &texname,
- bool ba,const STR_String& matname,int tile,int tilexrep,int tileyrep,int mode,bool transparant, bool zsort,
- int lightlayer,bool bIsTriangle,void* clientobject,void* tface)
+void GPC_RenderTools::PopMatrix()
{
- assert(!"Deprecated");
-/* return new GPC_PolygonMaterial(texname, ba,matname,tile,tilexrep,tileyrep,
- mode,transparant,zsort,lightlayer,bIsTriangle,clientobject,tface);
- */
- return NULL;
+ glPopMatrix();
}
-int GPC_RenderTools::applyLights(int objectlayer)
+int GPC_RenderTools::applyLights(int objectlayer, const MT_Transform& viewmat)
{
-// taken from blender source, incompatibility between Blender Object / GameObject
-
- int count;
+ // taken from blender source, incompatibility between Blender Object / GameObject
+ float glviewmat[16];
+ unsigned int count;
float vec[4];
-
+
vec[3]= 1.0;
for(count=0; count<m_numgllights; count++)
@@ -371,23 +403,20 @@ int GPC_RenderTools::applyLights(int objectlayer)
//std::vector<struct RAS_LightObject*> m_lights;
std::vector<struct RAS_LightObject*>::iterator lit = m_lights.begin();
+ viewmat.getValue(glviewmat);
+ glPushMatrix();
+ glLoadMatrixf(glviewmat);
for (lit = m_lights.begin(), count = 0; !(lit==m_lights.end()) && count < m_numgllights; ++lit)
{
RAS_LightObject* lightdata = (*lit);
if (lightdata->m_layer & objectlayer)
{
-
- glPushMatrix();
- glLoadMatrixf(m_viewmat);
-
-
vec[0] = (*(lightdata->m_worldmatrix))(0,3);
vec[1] = (*(lightdata->m_worldmatrix))(1,3);
vec[2] = (*(lightdata->m_worldmatrix))(2,3);
vec[3] = 1;
-
if(lightdata->m_type==RAS_LightObject::LIGHT_SUN) {
vec[0] = (*(lightdata->m_worldmatrix))(0,2);
@@ -443,142 +472,16 @@ int GPC_RenderTools::applyLights(int objectlayer)
}
glLightfv((GLenum)(GL_LIGHT0+count), GL_SPECULAR, vec);
glEnable((GLenum)(GL_LIGHT0+count));
-
- count++;
- glPopMatrix();
+ count++;
}
}
+ glPopMatrix();
return count;
}
-void GPC_RenderTools::SetClientObject(void* obj)
-{
- if (m_clientobject != obj)
- {
- if (obj == NULL || !((KX_GameObject*)obj)->IsNegativeScaling())
- {
- glFrontFace(GL_CCW);
- } else
- {
- glFrontFace(GL_CW);
- }
- m_clientobject = obj;
- m_modified = true;
- }
-}
-
-bool GPC_RenderTools::RayHit(KX_ClientObjectInfo* client, MT_Point3& hit_point, MT_Vector3& hit_normal, void * const data)
-{
- double* const oglmatrix = (double* const) data;
- MT_Point3 resultpoint(hit_point);
- MT_Vector3 resultnormal(hit_normal);
- MT_Vector3 left(oglmatrix[0],oglmatrix[1],oglmatrix[2]);
- MT_Vector3 dir = -(left.cross(resultnormal)).safe_normalized();
- left = (dir.cross(resultnormal)).safe_normalized();
- // for the up vector, we take the 'resultnormal' returned by the physics
-
- double maat[16]={
- left[0], left[1], left[2], 0,
- dir[0], dir[1], dir[2], 0,
- resultnormal[0],resultnormal[1],resultnormal[2], 0,
- 0, 0, 0, 1};
- glTranslated(resultpoint[0],resultpoint[1],resultpoint[2]);
- //glMultMatrixd(oglmatrix);
- glMultMatrixd(maat);
- return true;
-}
-
-void GPC_RenderTools::applyTransform(RAS_IRasterizer* rasty,double* oglmatrix,int objectdrawmode )
-{
- if (objectdrawmode & RAS_IPolyMaterial::BILLBOARD_SCREENALIGNED ||
- objectdrawmode & RAS_IPolyMaterial::BILLBOARD_AXISALIGNED)
- {
- // rotate the billboard/halo
- //page 360/361 3D Game Engine Design, David Eberly for a discussion
- // on screen aligned and axis aligned billboards
- // assumed is that the preprocessor transformed all billboard polygons
- // so that their normal points into the positive x direction (1.0 , 0.0 , 0.0)
- // when new parenting for objects is done, this rotation
- // will be moved into the object
-
- MT_Point3 objpos (oglmatrix[12],oglmatrix[13],oglmatrix[14]);
- MT_Point3 campos = rasty->GetCameraPosition();
- MT_Vector3 dir = (campos - objpos).safe_normalized();
- MT_Vector3 up(0,0,1.0);
-
- KX_GameObject* gameobj = (KX_GameObject*) this->m_clientobject;
- // get scaling of halo object
- MT_Vector3 size = gameobj->GetSGNode()->GetLocalScale();
-
- bool screenaligned = (objectdrawmode & RAS_IPolyMaterial::BILLBOARD_SCREENALIGNED)!=0;//false; //either screen or axisaligned
- if (screenaligned)
- {
- up = (up - up.dot(dir) * dir).safe_normalized();
- } else
- {
- dir = (dir - up.dot(dir)*up).safe_normalized();
- }
-
- MT_Vector3 left = dir.normalized();
- dir = (left.cross(up)).normalized();
-
- // we have calculated the row vectors, now we keep
- // local scaling into account:
-
- left *= size[0];
- dir *= size[1];
- up *= size[2];
- double maat[16]={
- left[0], left[1],left[2], 0,
- dir[0], dir[1],dir[2],0,
- up[0],up[1],up[2],0,
- 0,0,0,1};
- glTranslated(objpos[0],objpos[1],objpos[2]);
- glMultMatrixd(maat);
-
- } else
- {
- if (objectdrawmode & RAS_IPolyMaterial::SHADOW)
- {
- // shadow must be cast to the ground, physics system needed here!
- MT_Point3 frompoint(oglmatrix[12],oglmatrix[13],oglmatrix[14]);
- KX_GameObject *gameobj = (KX_GameObject*) this->m_clientobject;
- MT_Vector3 direction = MT_Vector3(0,0,-1);
-
- direction.normalize();
- direction *= 100000;
-
- MT_Point3 topoint = frompoint + direction;
-
- KX_Scene* kxscene = (KX_Scene*) m_auxilaryClientInfo;
- PHY_IPhysicsEnvironment* physics_environment = kxscene->GetPhysicsEnvironment();
- KX_IPhysicsController* physics_controller = gameobj->GetPhysicsController();
-
- KX_GameObject *parent = gameobj->GetParent();
- if (!physics_controller && parent)
- physics_controller = parent->GetPhysicsController();
- if (parent)
- parent->Release();
-
- MT_Point3 resultpoint;
- MT_Vector3 resultnormal;
- if (!KX_RayCast::RayTest(physics_controller, physics_environment, frompoint, topoint, resultpoint, resultnormal, KX_RayCast::Callback<GPC_RenderTools>(this, oglmatrix)))
- {
- // couldn't find something to cast the shadow on...
- glMultMatrixd(oglmatrix);
- }
- } else
- {
-
- // 'normal' object
- glMultMatrixd(oglmatrix);
- }
- }
-}
-
void GPC_RenderTools::MotionBlur(RAS_IRasterizer* rasterizer)
{
int state = rasterizer->GetMotionBlurState();
@@ -609,7 +512,6 @@ void GPC_RenderTools::Update2DFilter(vector<STR_String>& propNames, void* gameOb
void GPC_RenderTools::Render2DFilters(RAS_ICanvas* canvas)
{
- m_filtermanager.RenderFilters( canvas);
+ m_filtermanager.RenderFilters(canvas);
}
-unsigned int GPC_RenderTools::m_numgllights;
diff --git a/source/gameengine/GamePlayer/common/GPC_RenderTools.h b/source/gameengine/GamePlayer/common/GPC_RenderTools.h
index 8fae3d2b305..382956e73ea 100644
--- a/source/gameengine/GamePlayer/common/GPC_RenderTools.h
+++ b/source/gameengine/GamePlayer/common/GPC_RenderTools.h
@@ -31,114 +31,67 @@
#define __GPC_RENDERTOOLS_H
#ifdef WIN32
- #include <windows.h>
+// don't show stl-warnings
+#pragma warning (disable:4786)
+#include <windows.h>
#endif // WIN32
-#include "GL/glew.h"
-
#include "RAS_IRenderTools.h"
#include "BMF_Api.h"
struct KX_ClientObjectInfo;
+class KX_RayCast;
+/* BlenderRenderTools are a set of tools to apply 2D/3D graphics effects, which
+ * are not part of the (polygon) Rasterizer. Effects like 2D text, 3D (polygon)
+ * text, lighting.
+ *
+ * Most of this code is duplicated in KX_BlenderRenderTools, so this should be
+ * moved to some common location to avoid duplication. */
class GPC_RenderTools : public RAS_IRenderTools
{
+ int m_lastlightlayer;
+ bool m_lastlighting;
+ static unsigned int m_numgllights;
+
+ BMF_Font* m_font;
+
public:
- GPC_RenderTools();
- virtual ~GPC_RenderTools();
-
- virtual void EndFrame(RAS_IRasterizer* rasty);
- virtual void BeginFrame(RAS_IRasterizer* rasty);
-
- void DisableOpenGLLights()
- {
- glDisable(GL_LIGHTING);
- glDisable(GL_COLOR_MATERIAL);
- }
-
- void EnableOpenGLLights();
-
- int ProcessLighting(int layer);
-
- void Perspective(int a, int width, int height, float mat[4][4], float viewmat[4][4])
- {
- if(a== 0)
- {
- glMatrixMode(GL_PROJECTION);
- glMatrixMode(GL_MODELVIEW);
- glLoadIdentity();
- }
- else
- {
- if(a== 1)
- {
- glMatrixMode(GL_PROJECTION);
- glMatrixMode(GL_MODELVIEW);
- }
- }
- }
-
- /**
- * @attention mode is ignored here
- */
- virtual void RenderText2D(
- RAS_TEXT_RENDER_MODE mode,
- const char* text,
- int xco,
- int yco,
- int width,
- int height);
-
- /**
- * Renders text into a (series of) polygon(s), using a texture font,
- * Each character consists of one polygon (one quad or two triangles)
- */
- virtual void RenderText(
- int mode,
- RAS_IPolyMaterial* polymat,
- float v1[3],
- float v2[3],
- float v3[3],
- float v4[3]);
-
- void Render(RAS_IRasterizer* rasty,double* oglmatrix,int objectdrawmode)
- {
- glPopMatrix();
- glPushMatrix();
- glMultMatrixd(oglmatrix);
- }
-
- void applyTransform(RAS_IRasterizer* rasty, double* oglmatrix, int objectdrawmode);
-
- virtual void PushMatrix()
- {
- glPushMatrix();
- }
-
- virtual void PopMatrix()
- {
- glPopMatrix();
- }
-
- virtual class RAS_IPolyMaterial* CreateBlenderPolyMaterial(
- const STR_String &texname,
- bool ba,
- const STR_String& matname,
- int tile,
- int tilexrep,int tileyrep,
- int mode,
- bool transparant,
- bool zsort,
- int lightlayer,
- bool bIsTriangle,
- void* clientobject,
- void* tface);
-
- int applyLights(int objectlayer);
-
- bool RayHit(KX_ClientObjectInfo* client, MT_Point3& hit_point, MT_Vector3& hit_normal, void * const data);
+ GPC_RenderTools();
+ virtual ~GPC_RenderTools();
+
+ void EndFrame(RAS_IRasterizer* rasty);
+ void BeginFrame(RAS_IRasterizer* rasty);
+
+ void EnableOpenGLLights();
+ void DisableOpenGLLights();
+ void ProcessLighting(int layer, const MT_Transform& viewmat);
+
+ /* @attention mode is ignored here */
+ void RenderText2D(RAS_TEXT_RENDER_MODE mode,
+ const char* text,
+ int xco,
+ int yco,
+ int width,
+ int height);
+ void RenderText(int mode,
+ class RAS_IPolyMaterial* polymat,
+ float v1[3],
+ float v2[3],
+ float v3[3],
+ float v4[3],
+ int glattrib);
+
+ void applyTransform(RAS_IRasterizer* rasty, double* oglmatrix, int objectdrawmode);
+ int applyLights(int objectlayer, const MT_Transform& viewmat);
+
+ void PushMatrix();
+ void PopMatrix();
+
+ bool RayHit(KX_ClientObjectInfo* client, KX_RayCast* result, void * const data);
+ bool NeedRayCast(KX_ClientObjectInfo* client) { return true; }
virtual void MotionBlur(RAS_IRasterizer* rasterizer);
@@ -146,28 +99,7 @@ public:
virtual void Render2DFilters(RAS_ICanvas* canvas);
- virtual void SetClientObject(void* obj);
-
-protected:
- /**
- * Copied from KX_BlenderGL.cpp in KX_blenderhook
- */
- void BL_RenderText(
- int mode,
- const char* textstr,
- int textlen,
- struct MTFace* tface,
- unsigned int* col,
- float v1[3],float v2[3],float v3[3],float v4[3]);
- void BL_spack(unsigned int ucol)
- {
- char *cp = (char *)&ucol;
- glColor3ub(cp[3], cp[2], cp[1]);
- }
-
-
- BMF_Font* m_font;
- static unsigned int m_numgllights;
+ virtual void SetClientObject(RAS_IRasterizer *rasty, void* obj);
};
#endif // __GPC_RENDERTOOLS_H
diff --git a/source/gameengine/GamePlayer/common/Makefile b/source/gameengine/GamePlayer/common/Makefile
index 19d792ddbdb..6a12e659be6 100644
--- a/source/gameengine/GamePlayer/common/Makefile
+++ b/source/gameengine/GamePlayer/common/Makefile
@@ -43,6 +43,7 @@ CPPFLAGS += -I../../../blender/blenloader
CPPFLAGS += -I../../../blender/blenlib
CPPFLAGS += -I../../../blender/imbuf
CPPFLAGS += -I../../../blender/makesdna
+CPPFLAGS += -I../../../blender/gpu
CPPFLAGS += -I../../../kernel/gen_system
CPPFLAGS += -I$(NAN_GUARDEDALLOC)/include
@@ -72,10 +73,6 @@ CPPFLAGS += -I../../../gameengine/Rasterizer/RAS_OpenGLRasterizer
CPPFLAGS += -I../../../gameengine/Physics/Sumo
CPPFLAGS += -I../../../gameengine/Physics/common
-ifeq ($(WITH_BF_GLEXT),true)
- CPPFLAGS += -DWITH_GLEXT
-endif
-
###############################
SOURCEDIR = source/gameengine/GamePlayer/common
diff --git a/source/gameengine/GamePlayer/common/SConscript b/source/gameengine/GamePlayer/common/SConscript
index 3b2367d2592..30f20a670d3 100644
--- a/source/gameengine/GamePlayer/common/SConscript
+++ b/source/gameengine/GamePlayer/common/SConscript
@@ -8,7 +8,6 @@ source_files = ['bmfont.cpp',
'GPC_Engine.cpp',
'GPC_KeyboardDevice.cpp',
'GPC_MouseDevice.cpp',
- 'GPC_PolygonMaterial.cpp',
'GPC_RawImage.cpp',
'GPC_RawLoadDotBlendArray.cpp',
'GPC_RawLogoArrays.cpp',
@@ -46,6 +45,7 @@ incs = ['.',
'#source/gameengine/GamePlayer/ghost',
'#source/blender/misc',
'#source/blender/blenloader',
+ '#source/blender/gpu',
'#extern/glew/include']
#This is all plugin stuff!
diff --git a/source/gameengine/GamePlayer/common/unix/GPU_PolygonMaterial.h b/source/gameengine/GamePlayer/common/unix/GPU_PolygonMaterial.h
index fee729a84ac..e5ed7f39811 100644
--- a/source/gameengine/GamePlayer/common/unix/GPU_PolygonMaterial.h
+++ b/source/gameengine/GamePlayer/common/unix/GPU_PolygonMaterial.h
@@ -37,9 +37,9 @@ class GPU_PolygonMaterial : public BP_PolygonMaterial
public:
GPUPolygonMaterial(const STR_String& texname, bool ba,const STR_String& matname,
int tile, int tileXrep, int tileYrep, int mode, int transparant,
- int lightlayer,bool bIsTriangle,void* clientobject,void* tpage) :
+ int lightlayer,,void* tpage) :
BP_PolygonMaterial(texname, ba,matname, tile, tileXrep, tileYrep,
- mode, transparant, lightlayer, bIsTriangle, clientobject),
+ mode, transparant, lightlayer),
m_tface(tpage)
{
}
diff --git a/source/gameengine/GamePlayer/ghost/CMakeLists.txt b/source/gameengine/GamePlayer/ghost/CMakeLists.txt
index d9f0675001f..5e0ca93ac06 100644
--- a/source/gameengine/GamePlayer/ghost/CMakeLists.txt
+++ b/source/gameengine/GamePlayer/ghost/CMakeLists.txt
@@ -64,6 +64,7 @@ SET(INC
../../../../source/gameengine/GamePlayer/common
../../../../source/blender/misc
../../../../source/blender/blenloader
+ ../../../../source/blender/gpu
../../../../extern/solid
../../../../extern/glew/include
${PYTHON_INC}
diff --git a/source/gameengine/GamePlayer/ghost/GPG_Application.cpp b/source/gameengine/GamePlayer/ghost/GPG_Application.cpp
index 7be3b94d8ae..a9196a1a5e3 100644
--- a/source/gameengine/GamePlayer/ghost/GPG_Application.cpp
+++ b/source/gameengine/GamePlayer/ghost/GPG_Application.cpp
@@ -38,6 +38,7 @@
#endif
#include "GL/glew.h"
+#include "GPU_extensions.h"
#include "GPG_Application.h"
@@ -56,6 +57,7 @@ extern "C"
#include "BLO_readfile.h"
#include "BKE_global.h"
#include "BKE_main.h"
+#include "IMB_imbuf.h"
#include "DNA_scene_types.h"
#ifdef __cplusplus
}
@@ -98,15 +100,15 @@ extern "C"
#include "GHOST_IWindow.h"
#include "GHOST_Rect.h"
-
static void frameTimerProc(GHOST_ITimerTask* task, GHOST_TUns64 time);
static GHOST_ISystem* fSystem = 0;
static const int kTimerFreq = 10;
-GPG_Application::GPG_Application(GHOST_ISystem* system, struct Main* maggie, STR_String startSceneName)
- : m_startSceneName(startSceneName),
- m_maggie(maggie),
+GPG_Application::GPG_Application(GHOST_ISystem* system)
+ : m_startSceneName(""),
+ m_startScene(0),
+ m_maggie(0),
m_exitRequested(0),
m_system(system),
m_mainWindow(0),
@@ -114,6 +116,7 @@ GPG_Application::GPG_Application(GHOST_ISystem* system, struct Main* maggie, STR
m_cursor(GHOST_kStandardCursorFirstCursor),
m_engineInitialized(0),
m_engineRunning(0),
+ m_isEmbedded(false),
m_ketsjiengine(0),
m_kxsystem(0),
m_keyboard(0),
@@ -125,7 +128,9 @@ GPG_Application::GPG_Application(GHOST_ISystem* system, struct Main* maggie, STR
m_networkdevice(0),
m_audiodevice(0),
m_blendermat(0),
- m_blenderglslmat(0)
+ m_blenderglslmat(0),
+ m_pyGlobalDictString(0),
+ m_pyGlobalDictString_Length(0)
{
fSystem = system;
}
@@ -134,21 +139,28 @@ GPG_Application::GPG_Application(GHOST_ISystem* system, struct Main* maggie, STR
GPG_Application::~GPG_Application(void)
{
+ if(m_pyGlobalDictString) {
+ delete [] m_pyGlobalDictString;
+ m_pyGlobalDictString = 0;
+ m_pyGlobalDictString_Length = 0;
+ }
+
exitEngine();
fSystem->disposeWindow(m_mainWindow);
}
-bool GPG_Application::SetGameEngineData(struct Main* maggie, STR_String startSceneName)
+bool GPG_Application::SetGameEngineData(struct Main* maggie, Scene *scene)
{
bool result = false;
- if (maggie != NULL && startSceneName != "")
+ if (maggie != NULL && scene != NULL)
{
- G.scene = (Scene*)maggie->scene.first;
+ G.scene = scene;
m_maggie = maggie;
- m_startSceneName = startSceneName;
+ m_startSceneName = scene->id.name+2;
+ m_startScene = scene;
result = true;
}
@@ -320,6 +332,26 @@ bool GPG_Application::startWindow(STR_String& title,
return success;
}
+bool GPG_Application::startEmbeddedWindow(STR_String& title,
+ const GHOST_TEmbedderWindowID parentWindow,
+ const bool stereoVisual,
+ const int stereoMode) {
+
+ m_mainWindow = fSystem->createWindow(title, 0, 0, 0, 0, GHOST_kWindowStateNormal,
+ GHOST_kDrawingContextTypeOpenGL, stereoVisual, parentWindow);
+
+ if (!m_mainWindow) {
+ printf("error: could not create main window\n");
+ exit(-1);
+ }
+ m_isEmbedded = true;
+
+ bool success = initEngine(m_mainWindow, stereoMode);
+ if (success) {
+ success = startEngine();
+ }
+ return success;
+}
bool GPG_Application::startFullScreen(
@@ -478,7 +510,7 @@ bool GPG_Application::initEngine(GHOST_IWindow* window, const int stereoMode)
{
if (!m_engineInitialized)
{
- glewInit();
+ GPU_extensions_init();
bgl::InitExtensions(true);
// get and set the preferences
@@ -497,13 +529,16 @@ bool GPG_Application::initEngine(GHOST_IWindow* window, const int stereoMode)
bool fixed_framerate= (SYS_GetCommandLineInt(syshandle, "fixed_framerate", fixedFr) != 0);
bool frameRate = (SYS_GetCommandLineInt(syshandle, "show_framerate", 0) != 0);
- bool useLists = (SYS_GetCommandLineInt(syshandle, "displaylists", G.fileflags & G_FILE_DIAPLAY_LISTS) != 0);
+ bool useLists = (SYS_GetCommandLineInt(syshandle, "displaylists", G.fileflags & G_FILE_DISPLAY_LISTS) != 0);
+
+ if(GLEW_ARB_multitexture && GLEW_VERSION_1_1)
+ m_blendermat = (SYS_GetCommandLineInt(syshandle, "blender_material", 1) != 0);
+
+ if(GPU_extensions_minimum_support())
+ m_blenderglslmat = (SYS_GetCommandLineInt(syshandle, "blender_glsl_material", 1) != 0);
+ else if(G.fileflags & G_FILE_GAME_MAT_GLSL)
+ m_blendermat = false;
- if(GLEW_ARB_multitexture && GLEW_VERSION_1_1) {
- int gameflag =(G.fileflags & G_FILE_GAME_MAT);
- m_blendermat = (SYS_GetCommandLineInt(syshandle, "blender_material", gameflag) != 0);
- }
-
// create the canvas, rasterizer and rendertools
m_canvas = new GPG_Canvas(window);
if (!m_canvas)
@@ -626,33 +661,36 @@ bool GPG_Application::startEngine(void)
{
STR_String startscenename = m_startSceneName.Ptr();
m_ketsjiengine->SetSceneConverter(m_sceneconverter);
-
+
// if (always_use_expand_framing)
// sceneconverter->SetAlwaysUseExpandFraming(true);
- if(m_blendermat)
+ if(m_blendermat && (G.fileflags & G_FILE_GAME_MAT))
m_sceneconverter->SetMaterials(true);
- if(m_blenderglslmat)
+ if(m_blenderglslmat && (G.fileflags & G_FILE_GAME_MAT_GLSL))
m_sceneconverter->SetGLSLMaterials(true);
KX_Scene* startscene = new KX_Scene(m_keyboard,
m_mouse,
m_networkdevice,
m_audiodevice,
- startscenename);
+ startscenename,
+ m_startScene);
// some python things
PyObject* dictionaryobject = initGamePlayerPythonScripting("Ketsji", psl_Lowest);
m_ketsjiengine->SetPythonDictionary(dictionaryobject);
initRasterizer(m_rasterizer, m_canvas);
- PyDict_SetItemString(dictionaryobject, "GameLogic", initGameLogic(startscene)); // Same as importing the module
+ PyObject *gameLogic = initGameLogic(m_ketsjiengine, startscene);
+ PyDict_SetItemString(dictionaryobject, "GameLogic", gameLogic); // Same as importing the module
initGameKeys();
initPythonConstraintBinding();
initMathutils();
-
-
-
+ // Set the GameLogic.globalDict from marshal'd data, so we can
+ // load new blend files and keep data in GameLogic.globalDict
+ loadGamePythonConfig(m_pyGlobalDictString, m_pyGlobalDictString_Length);
+
m_sceneconverter->ConvertScene(
startscenename,
startscene,
@@ -688,6 +726,16 @@ bool GPG_Application::startEngine(void)
void GPG_Application::stopEngine()
{
+ // GameLogic.globalDict gets converted into a buffer, and sorted in
+ // m_pyGlobalDictString so we can restore after python has stopped
+ // and started between .blend file loads.
+ if(m_pyGlobalDictString) {
+ delete [] m_pyGlobalDictString;
+ m_pyGlobalDictString = 0;
+ }
+
+ m_pyGlobalDictString_Length = saveGamePythonConfig(&m_pyGlobalDictString);
+
// when exiting the mainloop
exitGamePythonScripting();
m_ketsjiengine->StopEngine();
@@ -754,6 +802,12 @@ void GPG_Application::exitEngine()
m_canvas = 0;
}
+ libtiff_exit();
+#ifdef WITH_QUICKTIME
+ quicktime_exit();
+#endif
+ GPU_extensions_exit();
+
m_exitRequested = 0;
m_engineInitialized = false;
}
@@ -833,7 +887,7 @@ bool GPG_Application::handleKey(GHOST_IEvent* event, bool isDown)
GHOST_TEventKeyData* keyData = static_cast<GHOST_TEventKeyData*>(eventData);
//no need for this test
//if (fSystem->getFullScreen()) {
- if (keyData->key == GHOST_kKeyEsc && !m_keyboard->m_hookesc) {
+ if (keyData->key == GHOST_kKeyEsc && !m_keyboard->m_hookesc && !m_isEmbedded) {
m_exitRequested = KX_EXIT_REQUEST_OUTSIDE;
}
//}
diff --git a/source/gameengine/GamePlayer/ghost/GPG_Application.h b/source/gameengine/GamePlayer/ghost/GPG_Application.h
index 17f5add8b19..38408f919b4 100644
--- a/source/gameengine/GamePlayer/ghost/GPG_Application.h
+++ b/source/gameengine/GamePlayer/ghost/GPG_Application.h
@@ -50,17 +50,19 @@ class GPG_Canvas;
class GPG_KeyboardDevice;
class GPG_System;
struct Main;
+struct Scene;
class GPG_Application : public GHOST_IEventConsumer
{
public:
- GPG_Application(GHOST_ISystem* system, struct Main* maggie, STR_String startSceneName);
+ GPG_Application(GHOST_ISystem* system);
~GPG_Application(void);
- bool SetGameEngineData(struct Main* maggie,STR_String startSceneName);
+ bool SetGameEngineData(struct Main* maggie, struct Scene* scene);
bool startWindow(STR_String& title, int windowLeft, int windowTop, int windowWidth, int windowHeight,
const bool stereoVisual, const int stereoMode);
bool startFullScreen(int width, int height, int bpp, int frequency, const bool stereoVisual, const int stereoMode);
+ bool startEmbeddedWindow(STR_String& title, const GHOST_TEmbedderWindowID parent_window, const bool stereoVisual, const int stereoMode);
#ifdef WIN32
bool startScreenSaverFullScreen(int width, int height, int bpp, int frequency, const bool stereoVisual, const int stereoMode);
bool startScreenSaverPreview(HWND parentWindow, const bool stereoVisual, const int stereoMode);
@@ -100,6 +102,7 @@ protected:
/* The game data */
STR_String m_startSceneName;
+ struct Scene* m_startScene;
struct Main* m_maggie;
/* Exit state. */
@@ -118,6 +121,8 @@ protected:
bool m_engineInitialized;
/** Engine state. */
bool m_engineRunning;
+ /** Running on embedded window */
+ bool m_isEmbedded;
/** the gameengine itself */
KX_KetsjiEngine* m_ketsjiengine;
@@ -142,6 +147,12 @@ protected:
bool m_blendermat;
bool m_blenderglslmat;
-
+
+ /*
+ * GameLogic.globalDict as a string so that loading new blend files can use the same dict.
+ * Do this because python starts/stops when loading blend files.
+ */
+ char* m_pyGlobalDictString;
+ int m_pyGlobalDictString_Length;
};
diff --git a/source/gameengine/GamePlayer/ghost/GPG_ghost.cpp b/source/gameengine/GamePlayer/ghost/GPG_ghost.cpp
index 8222e5c8bac..9700e6387f2 100644
--- a/source/gameengine/GamePlayer/ghost/GPG_ghost.cpp
+++ b/source/gameengine/GamePlayer/ghost/GPG_ghost.cpp
@@ -52,25 +52,31 @@
extern "C"
{
#endif // __cplusplus
+#include "MEM_guardedalloc.h"
+#include "BKE_blender.h"
#include "BKE_global.h"
#include "BKE_icons.h"
+#include "BKE_node.h"
#include "BLI_blenlib.h"
#include "DNA_scene_types.h"
#include "BLO_readfile.h"
#include "BLO_readblenfile.h"
+#include "IMB_imbuf.h"
int GHOST_HACK_getFirstFile(char buf[]);
#ifdef __cplusplus
}
#endif // __cplusplus
+
+#include "GPU_draw.h"
+
/**********************************
* End Blender include block
**********************************/
#include "SYS_System.h"
#include "GPG_Application.h"
-#include "GPC_PolygonMaterial.h"
#include "GHOST_ISystem.h"
#include "RAS_IRasterizer.h"
@@ -146,9 +152,9 @@ static BOOL scr_saver_init(int argc, char **argv)
#endif /* WIN32 */
-void usage(char* program)
+void usage(const char* program)
{
- char * consoleoption;
+ const char * consoleoption;
#ifdef _WIN32
consoleoption = "-c ";
#else
@@ -176,9 +182,13 @@ void usage(char* program)
printf(" anaglyph (Red-Blue glasses)\n");
printf(" vinterlace (Vertical interlace for autostereo display)\n");
printf(" depending on the type of stereo you want\n");
+#ifndef _WIN32
+ printf(" -i: parent windows ID \n");
+#endif
#ifdef _WIN32
printf(" -c: keep console window open\n");
#endif
+ printf(" -d: turn debugging on\n");
printf(" -g: game engine options:\n");
printf(" Name Default Description\n");
printf(" ----------------------------------------\n");
@@ -193,7 +203,8 @@ void usage(char* program)
printf("example: %s -g show_framerate = 0 c:\\loadtest.blend\n", program);
}
-char *get_filename(int argc, char **argv) {
+static void get_filename(int argc, char **argv, char *filename)
+{
#ifdef __APPLE__
/* On Mac we park the game file (called game.blend) in the application bundle.
* The executable is located in the bundle as well.
@@ -201,22 +212,18 @@ char *get_filename(int argc, char **argv) {
*/
int srclen = ::strlen(argv[0]);
int len = 0;
- char *filename = NULL;
+ char *gamefile = NULL;
+ filename[0] = '\0';
+
if (argc > 1) {
if (BLI_exists(argv[argc-1])) {
- len = ::strlen(argv[argc-1]);
- filename = new char [len + 1];
- ::strcpy(filename, argv[argc-1]);
- return(filename);
+ BLI_strncpy(filename, argv[argc-1], FILE_MAXDIR + FILE_MAXFILE);
}
if (::strncmp(argv[argc-1], "-psn_", 5)==0) {
static char firstfilebuf[512];
if (GHOST_HACK_getFirstFile(firstfilebuf)) {
- len = ::strlen(firstfilebuf);
- filename = new char [len + 1];
- ::strcpy(filename, firstfilebuf);
- return(filename);
+ BLI_strncpy(filename, firstfilebuf, FILE_MAXDIR + FILE_MAXFILE);
}
}
}
@@ -224,23 +231,26 @@ char *get_filename(int argc, char **argv) {
srclen -= ::strlen("MacOS/blenderplayer");
if (srclen > 0) {
len = srclen + ::strlen("Resources/game.blend");
- filename = new char [len + 1];
- ::strcpy(filename, argv[0]);
- ::strcpy(filename + srclen, "Resources/game.blend");
+ gamefile = new char [len + 1];
+ ::strcpy(gamefile, argv[0]);
+ ::strcpy(gamefile + srclen, "Resources/game.blend");
//::printf("looking for file: %s\n", filename);
- if (BLI_exists(filename)) {
- return (filename);
- }
+ if (BLI_exists(gamefile))
+ BLI_strncpy(filename, gamefile, FILE_MAXDIR + FILE_MAXFILE);
+
+ delete gamefile;
}
- return(NULL);
#else
- return (argc>1)?argv[argc-1]:NULL;
+ filename[0] = '\0';
+
+ if(argc > 1)
+ BLI_strncpy(filename, argv[argc-1], FILE_MAXDIR + FILE_MAXFILE);
#endif // !_APPLE
}
-static BlendFileData *load_game_data(char *progname, char *filename = NULL) {
+static BlendFileData *load_game_data(char *progname, char *filename = NULL, char *relativename = NULL) {
BlendReadError error;
BlendFileData *bfd = NULL;
@@ -282,7 +292,7 @@ int main(int argc, char** argv)
bool fullScreenParFound = false;
bool windowParFound = false;
bool closeConsole = true;
- RAS_IRasterizer::StereoMode stereomode;
+ RAS_IRasterizer::StereoMode stereomode = RAS_IRasterizer::RAS_STEREO_NOSTEREO;
bool stereoWindow = false;
bool stereoParFound = false;
int windowLeft = 100;
@@ -293,7 +303,10 @@ int main(int argc, char** argv)
GHOST_TUns32 fullScreenHeight= 0;
int fullScreenBpp = 32;
int fullScreenFrequency = 60;
+ GHOST_TEmbedderWindowID parentWindow = 0;
+
+
#ifdef __linux__
#ifdef __alpha__
signal (SIGFPE, SIG_IGN);
@@ -321,8 +334,18 @@ int main(int argc, char** argv)
::DisposeNibReference(nibRef);
*/
#endif // __APPLE__
+
+ init_nodesystem();
+ initglobals();
+
GEN_init_messaging_system();
+
+#ifdef WITH_QUICKTIME
+ quicktime_init();
+#endif
+
+ libtiff_init();
// Parse command line options
#ifndef NDEBUG
@@ -401,6 +424,12 @@ int main(int argc, char** argv)
}
}
break;
+
+ case 'd':
+ i++;
+ G.f |= G_DEBUG; /* std output printf's */
+ MEM_set_memory_debug();
+ break;
case 'p':
// Parse window position and size options
@@ -453,6 +482,16 @@ int main(int argc, char** argv)
usage(argv[0]);
return 0;
break;
+#ifndef _WIN32
+ case 'i':
+ i++;
+ if ( (i + 1) < argc )
+ parentWindow = atoi(argv[i++]);
+#ifndef NDEBUG
+ printf("XWindows ID = %d\n", parentWindow);
+#endif //NDEBUG
+
+#endif // _WIN32
case 'c':
i++;
closeConsole = false;
@@ -523,21 +562,19 @@ int main(int argc, char** argv)
return 0;
}
- if (!stereoParFound) stereomode = RAS_IRasterizer::RAS_STEREO_NOSTEREO;
-
#ifdef WIN32
if (scr_saver_mode != SCREEN_SAVER_MODE_CONFIGURATION)
#endif
{
#ifdef __APPLE__
//SYS_WriteCommandLineInt(syshandle, "show_framerate", 1);
- SYS_WriteCommandLineInt(syshandle, "nomipmap", 1);
+ //SYS_WriteCommandLineInt(syshandle, "nomipmap", 1);
//fullScreen = false; // Can't use full screen
#endif
if (SYS_GetCommandLineInt(syshandle, "nomipmap", 0))
{
- GPC_PolygonMaterial::SetMipMappingEnabled(0);
+ GPU_set_mipmap(0);
}
// Create the system
@@ -559,11 +596,15 @@ int main(int argc, char** argv)
{
int exitcode = KX_EXIT_REQUEST_NO_REQUEST;
STR_String exitstring = "";
- GPG_Application app(system, NULL, exitstring);
+ GPG_Application app(system);
bool firstTimeRunning = true;
- char *filename = get_filename(argc, argv);
+ char filename[FILE_MAXDIR + FILE_MAXFILE];
char *titlename;
char pathname[160];
+
+ get_filename(argc, argv, filename);
+ if(filename[0])
+ BLI_convertstringcwd(filename);
do
{
@@ -595,7 +636,7 @@ int main(int argc, char** argv)
}
else
{
- bfd = load_game_data(argv[0], filename);
+ bfd = load_game_data(bprogname, filename[0]? filename: NULL);
}
//::printf("game data loaded from %s\n", filename);
@@ -617,7 +658,7 @@ int main(int argc, char** argv)
#endif // WIN32
Main *maggie = bfd->main;
Scene *scene = bfd->curscene;
- char *startscenename = scene->id.name + 2;
+ G.main = maggie;
G.fileflags = bfd->fileflags;
//Seg Fault; icon.c gIcons == 0
@@ -655,7 +696,7 @@ int main(int argc, char** argv)
}
// GPG_Application app (system, maggie, startscenename);
- app.SetGameEngineData(maggie, startscenename);
+ app.SetGameEngineData(maggie, scene);
if (firstTimeRunning)
{
@@ -723,7 +764,10 @@ int main(int argc, char** argv)
else
#endif
{
- app.startWindow(title, windowLeft, windowTop, windowWidth, windowHeight,
+ if (parentWindow != 0)
+ app.startEmbeddedWindow(title, parentWindow, stereoWindow, stereomode);
+ else
+ app.startWindow(title, windowLeft, windowTop, windowWidth, windowHeight,
stereoWindow, stereomode);
}
}
@@ -750,13 +794,8 @@ int main(int argc, char** argv)
}
}
app.StopGameEngine();
+
BLO_blendfiledata_free(bfd);
-
-#ifdef __APPLE__
- if (filename) {
- delete [] filename;
- }
-#endif // __APPLE__
}
} while (exitcode == KX_EXIT_REQUEST_RESTART_GAME || exitcode == KX_EXIT_REQUEST_START_OTHER_GAME);
}
@@ -772,6 +811,8 @@ int main(int argc, char** argv)
}
}
+ free_nodesystem();
+
return error ? -1 : 0;
}
diff --git a/source/gameengine/GamePlayer/ghost/Makefile b/source/gameengine/GamePlayer/ghost/Makefile
index 13940ac3fc8..52e219db8f2 100644
--- a/source/gameengine/GamePlayer/ghost/Makefile
+++ b/source/gameengine/GamePlayer/ghost/Makefile
@@ -41,6 +41,7 @@ CPPFLAGS += -I$(OPENGL_HEADERS)
CPPFLAGS += -I$(NAN_STRING)/include
CPPFLAGS += -I$(NAN_BMFONT)/include
CPPFLAGS += -I$(NAN_SOUNDSYSTEM)/include
+CPPFLAGS += -I$(NAN_GUARDEDALLOC)/include
CPPFLAGS += -I../../GamePlayer/common
@@ -69,6 +70,7 @@ CPPFLAGS += -I../../../blender/blenloader
CPPFLAGS += -I../../../blender/imbuf
CPPFLAGS += -I../../../blender/makesdna
CPPFLAGS += -I../../../blender/readblenfile
+CPPFLAGS += -I../../../blender/gpu
CPPFLAGS += -I../../../gameengine/BlenderRoutines
@@ -80,7 +82,3 @@ CPPFLAGS += -I$(NAN_STRING)/include
CPPFLAGS += -I$(NAN_GHOST)/include
CPPFLAGS += -I$(NAN_PYTHON)/include/python$(NAN_PYTHON_VERSION)
-ifeq ($(WITH_BF_GLEXT),true)
- CPPFLAGS += -DWITH_GLEXT
-endif
-
diff --git a/source/gameengine/GamePlayer/ghost/SConscript b/source/gameengine/GamePlayer/ghost/SConscript
index f3cce6c7443..33cf07b6211 100644
--- a/source/gameengine/GamePlayer/ghost/SConscript
+++ b/source/gameengine/GamePlayer/ghost/SConscript
@@ -40,6 +40,7 @@ incs = ['.',
'#source/gameengine/GamePlayer/common',
'#source/blender/misc',
'#source/blender/blenloader',
+ '#source/blender/gpu',
'#extern/glew/include']
incs += Split(env['BF_PYTHON_INC'])
@@ -48,8 +49,5 @@ cflags = []
if env['OURPLATFORM']=='win32-vc':
cflags = ['/GR']
-if env['WITH_BF_GLEXT'] == 1:
- env['CPPFLAGS'].append('-DWITH_GLEXT')
-
env.BlenderLib (libname='gp_ghost', sources=source_files, includes = incs, defines = [], libtype='player',priority=0, compileflags=cflags)
diff --git a/source/gameengine/Ketsji/BL_BlenderShader.cpp b/source/gameengine/Ketsji/BL_BlenderShader.cpp
index a9a0771936c..8ec463be6ff 100644
--- a/source/gameengine/Ketsji/BL_BlenderShader.cpp
+++ b/source/gameengine/Ketsji/BL_BlenderShader.cpp
@@ -9,108 +9,64 @@
#include "BL_BlenderShader.h"
#include "BL_Material.h"
-#ifdef BLENDER_GLSL
#include "GPU_extensions.h"
#include "GPU_material.h"
-#endif
#include "RAS_BucketManager.h"
#include "RAS_MeshObject.h"
#include "RAS_IRasterizer.h"
- /* this is evil, but we need the scene to create materials with
- * lights from the correct scene .. */
-static struct Scene *GetSceneForName(const STR_String& scenename)
-{
- Scene *sce;
-
- for (sce= (Scene*)G.main->scene.first; sce; sce= (Scene*)sce->id.next)
- if (scenename == (sce->id.name+2))
- return sce;
-
- return (Scene*)G.main->scene.first;
-}
-
-bool BL_BlenderShader::Ok()
-{
-#ifdef BLENDER_GLSL
- VerifyShader();
-
- return (mMat && mMat->gpumaterial);
-#else
- return 0;
-#endif
-}
-
BL_BlenderShader::BL_BlenderShader(KX_Scene *scene, struct Material *ma, int lightlayer)
:
-#ifdef BLENDER_GLSL
mScene(scene),
mMat(ma),
- mGPUMat(NULL),
-#endif
- mBound(false),
mLightLayer(lightlayer)
{
-#ifdef BLENDER_GLSL
- mBlenderScene = GetSceneForName(scene->GetName());
+ mBlenderScene = scene->GetBlenderScene();
mBlendMode = GPU_BLEND_SOLID;
- if(mMat) {
+ if(mMat)
GPU_material_from_blender(mBlenderScene, mMat);
- mGPUMat = mMat->gpumaterial;
- }
-#endif
}
BL_BlenderShader::~BL_BlenderShader()
{
-#ifdef BLENDER_GLSL
- if(mMat && mMat->gpumaterial)
- GPU_material_unbind(mMat->gpumaterial);
-#endif
+ if(mMat && GPU_material_from_blender(mBlenderScene, mMat))
+ GPU_material_unbind(GPU_material_from_blender(mBlenderScene, mMat));
}
-bool BL_BlenderShader::VerifyShader()
+bool BL_BlenderShader::Ok()
{
-#ifdef BLENDER_GLSL
- if(mMat && !mMat->gpumaterial)
- GPU_material_from_blender(mBlenderScene, mMat);
+ return VerifyShader();
+}
- mGPUMat = mMat->gpumaterial;
-
- return (mMat && mGPUMat);
-#else
- return false;
-#endif
+bool BL_BlenderShader::VerifyShader()
+{
+ if(mMat)
+ return (GPU_material_from_blender(mBlenderScene, mMat) != 0);
+ else
+ return false;
}
-void BL_BlenderShader::SetProg(bool enable)
+void BL_BlenderShader::SetProg(bool enable, double time)
{
-#ifdef BLENDER_GLSL
if(VerifyShader()) {
- if(enable) {
- GPU_material_bind(mGPUMat, mLightLayer);
- mBound = true;
- }
- else {
- GPU_material_unbind(mGPUMat);
- mBound = false;
- }
+ if(enable)
+ GPU_material_bind(GPU_material_from_blender(mBlenderScene, mMat), mLightLayer, ~0, time);
+ else
+ GPU_material_unbind(GPU_material_from_blender(mBlenderScene, mMat));
}
-#endif
}
int BL_BlenderShader::GetAttribNum()
{
-#ifdef BLENDER_GLSL
GPUVertexAttribs attribs;
int i, enabled = 0;
if(!VerifyShader())
return enabled;
- GPU_material_vertex_attributes(mGPUMat, &attribs);
+ GPU_material_vertex_attributes(GPU_material_from_blender(mBlenderScene, mMat), &attribs);
for(i = 0; i < attribs.totlayer; i++)
if(attribs.layer[i].glindex+1 > enabled)
@@ -120,24 +76,23 @@ int BL_BlenderShader::GetAttribNum()
enabled = BL_MAX_ATTRIB;
return enabled;
-#else
- return 0;
-#endif
}
void BL_BlenderShader::SetAttribs(RAS_IRasterizer* ras, const BL_Material *mat)
{
-#ifdef BLENDER_GLSL
GPUVertexAttribs attribs;
+ GPUMaterial *gpumat;
int i, attrib_num;
ras->SetAttribNum(0);
if(!VerifyShader())
return;
+
+ gpumat = GPU_material_from_blender(mBlenderScene, mMat);
if(ras->GetDrawingMode() == RAS_IRasterizer::KX_TEXTURED) {
- GPU_material_vertex_attributes(mGPUMat, &attribs);
+ GPU_material_vertex_attributes(gpumat, &attribs);
attrib_num = GetAttribNum();
ras->SetTexCoordNum(0);
@@ -168,44 +123,37 @@ void BL_BlenderShader::SetAttribs(RAS_IRasterizer* ras, const BL_Material *mat)
else
ras->SetAttrib(RAS_IRasterizer::RAS_TEXCO_DISABLE, attribs.layer[i].glindex);
}
-
- ras->EnableTextures(true);
}
- else
- ras->EnableTextures(false);
-#endif
}
-void BL_BlenderShader::Update( const KX_MeshSlot & ms, RAS_IRasterizer* rasty )
+void BL_BlenderShader::Update(const RAS_MeshSlot & ms, RAS_IRasterizer* rasty )
{
-#ifdef BLENDER_GLSL
float obmat[4][4], viewmat[4][4], viewinvmat[4][4], obcol[4];
+ GPUMaterial *gpumat;
- VerifyShader();
+ gpumat = GPU_material_from_blender(mBlenderScene, mMat);
- if(!mGPUMat) // || !mBound)
+ if(!gpumat || !GPU_material_bound(gpumat))
return;
MT_Matrix4x4 model;
model.setValue(ms.m_OpenGLMatrix);
- MT_Matrix4x4 view;
- rasty->GetViewMatrix(view);
+ const MT_Matrix4x4& view = rasty->GetViewMatrix();
+ const MT_Matrix4x4& viewinv = rasty->GetViewInvMatrix();
+ // note: getValue gives back column major as needed by OpenGL
model.getValue((float*)obmat);
view.getValue((float*)viewmat);
-
- view.invert();
- view.getValue((float*)viewinvmat);
+ viewinv.getValue((float*)viewinvmat);
if(ms.m_bObjectColor)
ms.m_RGBAcolor.getValue((float*)obcol);
else
obcol[0]= obcol[1]= obcol[2]= obcol[3]= 1.0f;
- GPU_material_bind_uniforms(mGPUMat, obmat, viewmat, viewinvmat, obcol);
+ GPU_material_bind_uniforms(gpumat, obmat, viewmat, viewinvmat, obcol);
- mBlendMode = GPU_material_blend_mode(mGPUMat, obcol);
-#endif
+ mBlendMode = GPU_material_blend_mode(gpumat, obcol);
}
int BL_BlenderShader::GetBlendMode()
@@ -215,12 +163,8 @@ int BL_BlenderShader::GetBlendMode()
bool BL_BlenderShader::Equals(BL_BlenderShader *blshader)
{
-#ifdef BLENDER_GLSL
/* to avoid unneeded state switches */
- return (blshader && mGPUMat == blshader->mGPUMat && mLightLayer == blshader->mLightLayer);
-#else
- return true;
-#endif
+ return (blshader && mMat == blshader->mMat && mLightLayer == blshader->mLightLayer);
}
// eof
diff --git a/source/gameengine/Ketsji/BL_BlenderShader.h b/source/gameengine/Ketsji/BL_BlenderShader.h
index da9765dafa4..5c1f59f94ad 100644
--- a/source/gameengine/Ketsji/BL_BlenderShader.h
+++ b/source/gameengine/Ketsji/BL_BlenderShader.h
@@ -2,9 +2,7 @@
#ifndef __BL_GPUSHADER_H__
#define __BL_GPUSHADER_H__
-#ifdef BLENDER_GLSL
#include "GPU_material.h"
-#endif
#include "MT_Matrix4x4.h"
#include "MT_Matrix3x3.h"
@@ -29,13 +27,9 @@ class BL_Material;
class BL_BlenderShader
{
private:
-#ifdef BLENDER_GLSL
KX_Scene *mScene;
struct Scene *mBlenderScene;
struct Material *mMat;
- GPUMaterial *mGPUMat;
-#endif
- bool mBound;
int mLightLayer;
int mBlendMode;
@@ -46,11 +40,11 @@ public:
virtual ~BL_BlenderShader();
bool Ok();
- void SetProg(bool enable);
+ void SetProg(bool enable, double time=0.0);
int GetAttribNum();
void SetAttribs(class RAS_IRasterizer* ras, const BL_Material *mat);
- void Update(const class KX_MeshSlot & ms, class RAS_IRasterizer* rasty);
+ void Update(const class RAS_MeshSlot & ms, class RAS_IRasterizer* rasty);
int GetBlendMode();
bool Equals(BL_BlenderShader *blshader);
diff --git a/source/gameengine/Ketsji/BL_Material.h b/source/gameengine/Ketsji/BL_Material.h
index dcb66ea2579..0eaa234566c 100644
--- a/source/gameengine/Ketsji/BL_Material.h
+++ b/source/gameengine/Ketsji/BL_Material.h
@@ -18,9 +18,9 @@ struct EnvMap;
this will default to users available units
to build with more available, just increment this value
although the more you add the slower the search time will be.
- we will go for three, which should be enough
+ we will go for eight, which should be enough
*/
-#define MAXTEX 3 //match in RAS_TexVert & RAS_OpenGLRasterizer
+#define MAXTEX 8 //match in RAS_TexVert & RAS_OpenGLRasterizer
// different mapping modes
class BL_Mapping
@@ -139,7 +139,7 @@ enum BL_ras_mode
COLLIDER=2,
ZSORT=4,
ALPHA=8,
- TRIANGLE=16,
+ // TRIANGLE=16,
USE_LIGHT=32,
WIRE=64
};
diff --git a/source/gameengine/Ketsji/BL_Shader.cpp b/source/gameengine/Ketsji/BL_Shader.cpp
index 57d0fe4140f..80892764089 100644
--- a/source/gameengine/Ketsji/BL_Shader.cpp
+++ b/source/gameengine/Ketsji/BL_Shader.cpp
@@ -433,7 +433,7 @@ void BL_Shader::SetProg(bool enable)
}
}
-void BL_Shader::Update( const KX_MeshSlot & ms, RAS_IRasterizer* rasty )
+void BL_Shader::Update( const RAS_MeshSlot & ms, RAS_IRasterizer* rasty )
{
if(!Ok() || !mPreDef.size())
return;
@@ -445,8 +445,7 @@ void BL_Shader::Update( const KX_MeshSlot & ms, RAS_IRasterizer* rasty )
{
MT_Matrix4x4 model;
model.setValue(ms.m_OpenGLMatrix);
- MT_Matrix4x4 view;
- rasty->GetViewMatrix(view);
+ const MT_Matrix4x4& view = rasty->GetViewMatrix();
if(mAttr==SHD_TANGENT)
ms.m_mesh->SetMeshModified(true);
@@ -525,13 +524,15 @@ void BL_Shader::Update( const KX_MeshSlot & ms, RAS_IRasterizer* rasty )
}
case VIEWMATRIX_INVERSE:
{
- view.invert();
+ MT_Matrix4x4 viewinv = view;
+ viewinv.invert();
SetUniform(uni->mLoc, view);
break;
}
case VIEWMATRIX_INVERSETRANSPOSE:
{
- view.invert();
+ MT_Matrix4x4 viewinv = view;
+ viewinv.invert();
SetUniform(uni->mLoc, view, true);
break;
}
@@ -670,6 +671,7 @@ void BL_Shader::SetUniform(int uniform, const MT_Matrix4x4& vec, bool transpose)
)
{
float value[16];
+ // note: getValue gives back column major as needed by OpenGL
vec.getValue(value);
glUniformMatrix4fvARB(uniform, 1, transpose?GL_TRUE:GL_FALSE, value);
}
@@ -879,7 +881,7 @@ KX_PYMETHODDEF_DOC( BL_Shader, setSampler, "setSampler(name, index)" )
Py_RETURN_NONE;
}
- char *uniform="";
+ const char *uniform="";
int index=-1;
if(PyArg_ParseTuple(args, "si", &uniform, &index))
{
@@ -920,7 +922,7 @@ KX_PYMETHODDEF_DOC( BL_Shader, setUniform1f, "setUniform1f(name, fx)" )
Py_RETURN_NONE;
}
- char *uniform="";
+ const char *uniform="";
float value=0;
if(PyArg_ParseTuple(args, "sf", &uniform, &value ))
{
@@ -944,7 +946,7 @@ KX_PYMETHODDEF_DOC( BL_Shader, setUniform2f , "setUniform2f(name, fx, fy)")
if(mError) {
Py_RETURN_NONE;
}
- char *uniform="";
+ const char *uniform="";
float array[2]={ 0,0 };
if(PyArg_ParseTuple(args, "sff", &uniform, &array[0],&array[1] ))
{
@@ -968,7 +970,7 @@ KX_PYMETHODDEF_DOC( BL_Shader, setUniform3f, "setUniform3f(name, fx,fy,fz) ")
if(mError) {
Py_RETURN_NONE;
}
- char *uniform="";
+ const char *uniform="";
float array[3]={0,0,0};
if(PyArg_ParseTuple(args, "sfff", &uniform, &array[0],&array[1],&array[2]))
{
@@ -993,7 +995,7 @@ KX_PYMETHODDEF_DOC( BL_Shader, setUniform4f, "setUniform4f(name, fx,fy,fz, fw) "
if(mError) {
Py_RETURN_NONE;
}
- char *uniform="";
+ const char *uniform="";
float array[4]={0,0,0,0};
if(PyArg_ParseTuple(args, "sffff", &uniform, &array[0],&array[1],&array[2], &array[3]))
{
@@ -1017,7 +1019,7 @@ KX_PYMETHODDEF_DOC( BL_Shader, setUniform1i, "setUniform1i(name, ix)" )
if(mError) {
Py_RETURN_NONE;
}
- char *uniform="";
+ const char *uniform="";
int value=0;
if(PyArg_ParseTuple(args, "si", &uniform, &value ))
{
@@ -1041,7 +1043,7 @@ KX_PYMETHODDEF_DOC( BL_Shader, setUniform2i , "setUniform2i(name, ix, iy)")
if(mError) {
Py_RETURN_NONE;
}
- char *uniform="";
+ const char *uniform="";
int array[2]={ 0,0 };
if(PyArg_ParseTuple(args, "sii", &uniform, &array[0],&array[1] ))
{
@@ -1066,7 +1068,7 @@ KX_PYMETHODDEF_DOC( BL_Shader, setUniform3i, "setUniform3i(name, ix,iy,iz) ")
Py_RETURN_NONE;
}
- char *uniform="";
+ const char *uniform="";
int array[3]={0,0,0};
if(PyArg_ParseTuple(args, "siii", &uniform, &array[0],&array[1],&array[2]))
{
@@ -1089,7 +1091,7 @@ KX_PYMETHODDEF_DOC( BL_Shader, setUniform4i, "setUniform4i(name, ix,iy,iz, iw) "
if(mError) {
Py_RETURN_NONE;
}
- char *uniform="";
+ const char *uniform="";
int array[4]={0,0,0, 0};
if(PyArg_ParseTuple(args, "siiii", &uniform, &array[0],&array[1],&array[2], &array[3] ))
{
@@ -1112,7 +1114,7 @@ KX_PYMETHODDEF_DOC( BL_Shader, setUniformfv , "setUniformfv( float (list2 or lis
if(mError) {
Py_RETURN_NONE;
}
- char*uniform = "";
+ const char *uniform = "";
PyObject *listPtr =0;
float array_data[4] = {0.f,0.f,0.f,0.f};
@@ -1181,7 +1183,7 @@ KX_PYMETHODDEF_DOC( BL_Shader, setUniformiv, "setUniformiv( int (list2 or list3
if(mError) {
Py_RETURN_NONE;
}
- char*uniform = "";
+ const char *uniform = "";
PyObject *listPtr =0;
int array_data[4] = {0,0,0,0};
@@ -1261,7 +1263,7 @@ KX_PYMETHODDEF_DOC( BL_Shader, setUniformMatrix4,
0,0,0,1
};
- char *uniform="";
+ const char *uniform="";
PyObject *matrix=0;
int transp=1; // MT_ is row major so transpose by default....
if(PyArg_ParseTuple(args, "sO|i",&uniform, &matrix,&transp))
@@ -1302,7 +1304,7 @@ KX_PYMETHODDEF_DOC( BL_Shader, setUniformMatrix3,
0,0,1,
};
- char *uniform="";
+ const char *uniform="";
PyObject *matrix=0;
int transp=1; // MT_ is row major so transpose by default....
if(PyArg_ParseTuple(args, "sO|i",&uniform, &matrix,&transp))
@@ -1356,7 +1358,7 @@ KX_PYMETHODDEF_DOC( BL_Shader, setUniformDef, "setUniformDef(name, enum)" )
Py_RETURN_NONE;
}
- char *uniform="";
+ const char *uniform="";
int nloc=0;
if(PyArg_ParseTuple(args, "si",&uniform, &nloc))
{
diff --git a/source/gameengine/Ketsji/BL_Shader.h b/source/gameengine/Ketsji/BL_Shader.h
index 8f303454087..18ca8f8b4f8 100644
--- a/source/gameengine/Ketsji/BL_Shader.h
+++ b/source/gameengine/Ketsji/BL_Shader.h
@@ -102,8 +102,8 @@ private:
bool mUse; // ...
//BL_Sampler mSampler[MAXTEX]; // Number of samplers
int mAttr; // Tangent attribute
- char* vertProg; // Vertex program string
- char* fragProg; // Fragment program string
+ const char* vertProg; // Vertex program string
+ const char* fragProg; // Fragment program string
bool mError; // ...
bool mDirty; //
@@ -177,7 +177,7 @@ public:
void UnloadShader();
// Update predefined uniforms each render call
- void Update(const class KX_MeshSlot & ms, class RAS_IRasterizer* rasty);
+ void Update(const class RAS_MeshSlot & ms, class RAS_IRasterizer* rasty);
//// Set sampler units (copied)
//void InitializeSampler(int unit, BL_Texture* texture );
diff --git a/source/gameengine/Ketsji/CMakeLists.txt b/source/gameengine/Ketsji/CMakeLists.txt
index be009d94701..58411f6d25e 100644
--- a/source/gameengine/Ketsji/CMakeLists.txt
+++ b/source/gameengine/Ketsji/CMakeLists.txt
@@ -69,6 +69,7 @@ SET(INC
../../../intern/SoundSystem
../../../source/blender/misc
../../../source/blender/blenloader
+ ../../../source/blender/gpu
../../../extern/bullet2/src
../../../extern/solid
../../../extern/glew/include
diff --git a/source/gameengine/Ketsji/KXNetwork/KX_NetworkMessageSensor.cpp b/source/gameengine/Ketsji/KXNetwork/KX_NetworkMessageSensor.cpp
index 0c66ac1fde3..8956df9c96b 100644
--- a/source/gameengine/Ketsji/KXNetwork/KX_NetworkMessageSensor.cpp
+++ b/source/gameengine/Ketsji/KXNetwork/KX_NetworkMessageSensor.cpp
@@ -196,20 +196,20 @@ PyParentObject KX_NetworkMessageSensor::Parents[] = {
PyMethodDef KX_NetworkMessageSensor::Methods[] = {
{"setSubjectFilterText", (PyCFunction)
- KX_NetworkMessageSensor::sPySetSubjectFilterText, METH_VARARGS,
- SetSubjectFilterText_doc},
+ KX_NetworkMessageSensor::sPySetSubjectFilterText, METH_O,
+ (PY_METHODCHAR)SetSubjectFilterText_doc},
{"getFrameMessageCount", (PyCFunction)
- KX_NetworkMessageSensor::sPyGetFrameMessageCount, METH_VARARGS,
- GetFrameMessageCount_doc},
+ KX_NetworkMessageSensor::sPyGetFrameMessageCount, METH_NOARGS,
+ (PY_METHODCHAR)GetFrameMessageCount_doc},
{"getBodies", (PyCFunction)
- KX_NetworkMessageSensor::sPyGetBodies, METH_VARARGS,
- GetBodies_doc},
+ KX_NetworkMessageSensor::sPyGetBodies, METH_NOARGS,
+ (PY_METHODCHAR)GetBodies_doc},
{"getSubject", (PyCFunction)
- KX_NetworkMessageSensor::sPyGetSubject, METH_VARARGS,
- GetSubject_doc},
+ KX_NetworkMessageSensor::sPyGetSubject, METH_NOARGS,
+ (PY_METHODCHAR)GetSubject_doc},
{"getSubjects", (PyCFunction)
- KX_NetworkMessageSensor::sPyGetSubjects, METH_VARARGS,
- GetSubjects_doc},
+ KX_NetworkMessageSensor::sPyGetSubjects, METH_NOARGS,
+ (PY_METHODCHAR)GetSubjects_doc},
{NULL,NULL} //Sentinel
};
@@ -218,88 +218,66 @@ PyObject* KX_NetworkMessageSensor::_getattr(const STR_String& attr) {
}
// 1. Set the message subject that this sensor listens for
-char KX_NetworkMessageSensor::SetSubjectFilterText_doc[] =
+const char KX_NetworkMessageSensor::SetSubjectFilterText_doc[] =
"\tsetSubjectFilterText(value)\n"
"\tChange the message subject text that this sensor is listening to.\n";
-PyObject* KX_NetworkMessageSensor::PySetSubjectFilterText(
- PyObject* self,
- PyObject* args,
- PyObject* kwds)
+PyObject* KX_NetworkMessageSensor::PySetSubjectFilterText( PyObject* self, PyObject* value)
{
- char* Subject;
-
- if (PyArg_ParseTuple(args, "s", &Subject))
- {
- m_subject = Subject;
- }
- else {
+ char* Subject = PyString_AsString(value);
+ if (Subject==NULL) {
+ PyErr_SetString(PyExc_TypeError, "expected a string message");
return NULL;
}
-
- Py_Return;
+
+ m_subject = Subject;
+ Py_RETURN_NONE;
}
// 2. Get the number of messages received since the last frame
-char KX_NetworkMessageSensor::GetFrameMessageCount_doc[] =
+const char KX_NetworkMessageSensor::GetFrameMessageCount_doc[] =
"\tgetFrameMessageCount()\n"
"\tGet the number of messages received since the last frame.\n";
-PyObject* KX_NetworkMessageSensor::PyGetFrameMessageCount(
- PyObject* self,
- PyObject* args,
- PyObject* kwds)
+PyObject* KX_NetworkMessageSensor::PyGetFrameMessageCount( PyObject* )
{
return PyInt_FromLong(long(m_frame_message_count));
}
// 3. Get the message bodies
-char KX_NetworkMessageSensor::GetBodies_doc[] =
+const char KX_NetworkMessageSensor::GetBodies_doc[] =
"\tgetBodies()\n"
"\tGet the list of message bodies.\n";
-PyObject* KX_NetworkMessageSensor::PyGetBodies(
- PyObject* self,
- PyObject* args,
- PyObject* kwds)
+PyObject* KX_NetworkMessageSensor::PyGetBodies( PyObject* )
{
if (m_BodyList) {
return ((PyObject*) m_BodyList->AddRef());
+ } else {
+ return ((PyObject*) new CListValue());
}
-
- Py_Return;
}
// 4. Get the message subject: field of the message sensor
-char KX_NetworkMessageSensor::GetSubject_doc[] =
+const char KX_NetworkMessageSensor::GetSubject_doc[] =
"\tgetSubject()\n"
"\tGet the subject: field of the message sensor.\n";
-PyObject* KX_NetworkMessageSensor::PyGetSubject(
- PyObject* self,
- PyObject* args,
- PyObject* kwds)
+PyObject* KX_NetworkMessageSensor::PyGetSubject( PyObject* )
{
- if (m_subject) {
- return PyString_FromString(m_subject);
- }
-
- Py_Return;
+ return PyString_FromString(m_subject ? m_subject : "");
}
// 5. Get the message subjects
-char KX_NetworkMessageSensor::GetSubjects_doc[] =
+const char KX_NetworkMessageSensor::GetSubjects_doc[] =
"\tgetSubjects()\n"
"\tGet list of message subjects.\n";
-PyObject* KX_NetworkMessageSensor::PyGetSubjects(
- PyObject* self,
- PyObject* args,
- PyObject* kwds)
+PyObject* KX_NetworkMessageSensor::PyGetSubjects( PyObject* )
{
if (m_SubjectList) {
- return ((PyObject*) m_SubjectList->AddRef());
- }
-
- Py_Return;
+ return ((PyObject*) m_SubjectList->AddRef());
+ } else {
+ return ((PyObject*) new CListValue());
+ }
}
diff --git a/source/gameengine/Ketsji/KXNetwork/KX_NetworkMessageSensor.h b/source/gameengine/Ketsji/KXNetwork/KX_NetworkMessageSensor.h
index 6fd92d17be3..8cdfd6cdb5a 100644
--- a/source/gameengine/Ketsji/KXNetwork/KX_NetworkMessageSensor.h
+++ b/source/gameengine/Ketsji/KXNetwork/KX_NetworkMessageSensor.h
@@ -74,11 +74,11 @@ public:
virtual PyObject* _getattr(const STR_String& attr);
- KX_PYMETHOD_DOC(KX_NetworkMessageSensor, SetSubjectFilterText);
- KX_PYMETHOD_DOC(KX_NetworkMessageSensor, GetFrameMessageCount);
- KX_PYMETHOD_DOC(KX_NetworkMessageSensor, GetBodies);
- KX_PYMETHOD_DOC(KX_NetworkMessageSensor, GetSubject);
- KX_PYMETHOD_DOC(KX_NetworkMessageSensor, GetSubjects);
+ KX_PYMETHOD_DOC_O(KX_NetworkMessageSensor, SetSubjectFilterText);
+ KX_PYMETHOD_DOC_NOARGS(KX_NetworkMessageSensor, GetFrameMessageCount);
+ KX_PYMETHOD_DOC_NOARGS(KX_NetworkMessageSensor, GetBodies);
+ KX_PYMETHOD_DOC_NOARGS(KX_NetworkMessageSensor, GetSubject);
+ KX_PYMETHOD_DOC_NOARGS(KX_NetworkMessageSensor, GetSubjects);
};
diff --git a/source/gameengine/Ketsji/KX_BlenderMaterial.cpp b/source/gameengine/Ketsji/KX_BlenderMaterial.cpp
index a67e5b26667..f92200780d5 100644
--- a/source/gameengine/Ketsji/KX_BlenderMaterial.cpp
+++ b/source/gameengine/Ketsji/KX_BlenderMaterial.cpp
@@ -19,13 +19,12 @@
#include "MT_Vector4.h"
#include "MT_Matrix4x4.h"
+#include "RAS_BucketManager.h"
#include "RAS_MeshObject.h"
#include "RAS_IRasterizer.h"
#include "RAS_OpenGLRasterizer/RAS_GLExtensionManager.h"
-extern "C" {
-#include "BDR_drawmesh.h"
-}
+#include "GPU_draw.h"
#include "STR_HashedString.h"
@@ -48,7 +47,6 @@ KX_BlenderMaterial::KX_BlenderMaterial(
BL_Material *data,
bool skin,
int lightlayer,
- void *clientobject,
PyTypeObject *T
)
: PyObjectPlus(T),
@@ -62,9 +60,7 @@ KX_BlenderMaterial::KX_BlenderMaterial(
data->transp,
((data->ras_mode &ALPHA)!=0),
((data->ras_mode &ZSORT)!=0),
- lightlayer,
- ((data->ras_mode &TRIANGLE)!=0),
- clientobject
+ lightlayer
),
mMaterial(data),
mShader(0),
@@ -78,9 +74,10 @@ KX_BlenderMaterial::KX_BlenderMaterial(
{
// --------------------------------
// RAS_IPolyMaterial variables...
- m_flag |=RAS_BLENDERMAT;
- m_flag |=(mMaterial->IdMode>=ONETEX)?RAS_MULTITEX:0;
- m_flag |=(mMaterial->ras_mode & USE_LIGHT)!=0?RAS_MULTILIGHT:0;
+ m_flag |= RAS_BLENDERMAT;
+ m_flag |= (mMaterial->IdMode>=ONETEX)? RAS_MULTITEX: 0;
+ m_flag |= ((mMaterial->ras_mode & USE_LIGHT)!=0)? RAS_MULTILIGHT: 0;
+ m_flag |= (mMaterial->glslmat)? RAS_BLENDERGLSL: 0;
// figure max
int enabled = mMaterial->num_enabled;
@@ -97,7 +94,7 @@ KX_BlenderMaterial::KX_BlenderMaterial(
mMaterial->blend_mode[i]
);
}
- m_multimode += mMaterial->IdMode+mMaterial->ras_mode;
+ m_multimode += mMaterial->IdMode+ (mMaterial->ras_mode & ~(COLLIDER|USE_LIGHT));
}
@@ -204,7 +201,7 @@ void KX_BlenderMaterial::OnExit()
}
if( mMaterial->tface )
- set_tpage(mMaterial->tface);
+ GPU_set_tpage(mMaterial->tface);
}
@@ -256,25 +253,28 @@ void KX_BlenderMaterial::setShaderData( bool enable, RAS_IRasterizer *ras)
void KX_BlenderMaterial::setBlenderShaderData( bool enable, RAS_IRasterizer *ras)
{
if( !enable || !mBlenderShader->Ok() ) {
+ ras->SetBlendingMode(TF_SOLID);
+
// frame cleanup.
if(mLastBlenderShader) {
mLastBlenderShader->SetProg(false);
mLastBlenderShader= NULL;
}
+ else
+ BL_Texture::DisableAllTextures();
- ras->SetBlendingMode(TF_SOLID);
- BL_Texture::DisableAllTextures();
return;
}
if(!mBlenderShader->Equals(mLastBlenderShader)) {
ras->SetBlendingMode(mMaterial->transp);
- BL_Texture::DisableAllTextures();
if(mLastBlenderShader)
mLastBlenderShader->SetProg(false);
+ else
+ BL_Texture::DisableAllTextures();
- mBlenderShader->SetProg(true);
+ mBlenderShader->SetProg(true, ras->GetTime());
mLastBlenderShader= mBlenderShader;
}
}
@@ -354,21 +354,22 @@ KX_BlenderMaterial::ActivatShaders(
if (GetCachingInfo() != cachingInfo) {
if (!cachingInfo)
- tmp->setShaderData( false, rasty);
+ tmp->setShaderData(false, rasty);
cachingInfo = GetCachingInfo();
if(rasty->GetDrawingMode() == RAS_IRasterizer::KX_TEXTURED)
- tmp->setShaderData( true, rasty);
+ tmp->setShaderData(true, rasty);
else
- tmp->setShaderData( false, rasty);
+ tmp->setShaderData(false, rasty);
if(mMaterial->mode & RAS_IRasterizer::KX_TWOSIDE)
rasty->SetCullFace(false);
else
rasty->SetCullFace(true);
- if (((mMaterial->ras_mode &WIRE)!=0) || mMaterial->mode & RAS_IRasterizer::KX_LINES)
+ if (((mMaterial->ras_mode &WIRE)!=0) || (mMaterial->mode & RAS_IRasterizer::KX_LINES) ||
+ (rasty->GetDrawingMode() <= RAS_IRasterizer::KX_WIREFRAME))
{
if((mMaterial->ras_mode &WIRE)!=0)
rasty->SetCullFace(false);
@@ -394,31 +395,24 @@ KX_BlenderMaterial::ActivateBlenderShaders(
mLastShader= NULL;
}
- // reset...
- if(tmp->mMaterial->IsShared())
- cachingInfo =0;
-
if (GetCachingInfo() != cachingInfo) {
if (!cachingInfo)
tmp->setBlenderShaderData(false, rasty);
cachingInfo = GetCachingInfo();
- if(rasty->GetDrawingMode() == RAS_IRasterizer::KX_TEXTURED) {
+ if(rasty->GetDrawingMode() == RAS_IRasterizer::KX_TEXTURED)
tmp->setBlenderShaderData(true, rasty);
- rasty->EnableTextures(true);
- }
- else {
+ else
tmp->setBlenderShaderData(false, rasty);
- rasty->EnableTextures(false);
- }
if(mMaterial->mode & RAS_IRasterizer::KX_TWOSIDE)
rasty->SetCullFace(false);
else
rasty->SetCullFace(true);
- if (((mMaterial->ras_mode &WIRE)!=0) || mMaterial->mode & RAS_IRasterizer::KX_LINES)
+ if (((mMaterial->ras_mode & WIRE)!=0) || (mMaterial->mode & RAS_IRasterizer::KX_LINES) ||
+ (rasty->GetDrawingMode() <= RAS_IRasterizer::KX_WIREFRAME))
{
if((mMaterial->ras_mode &WIRE)!=0)
rasty->SetCullFace(false);
@@ -426,10 +420,10 @@ KX_BlenderMaterial::ActivateBlenderShaders(
}
else
rasty->SetLines(false);
- }
- ActivatGLMaterials(rasty);
- mBlenderShader->SetAttribs(rasty, mMaterial);
+ ActivatGLMaterials(rasty);
+ mBlenderShader->SetAttribs(rasty, mMaterial);
+ }
}
void
@@ -466,7 +460,8 @@ KX_BlenderMaterial::ActivateMat(
else
rasty->SetCullFace(true);
- if (((mMaterial->ras_mode &WIRE)!=0) || mMaterial->mode & RAS_IRasterizer::KX_LINES)
+ if (((mMaterial->ras_mode &WIRE)!=0) || (mMaterial->mode & RAS_IRasterizer::KX_LINES) ||
+ (rasty->GetDrawingMode() <= RAS_IRasterizer::KX_WIREFRAME))
{
if((mMaterial->ras_mode &WIRE)!=0)
rasty->SetCullFace(false);
@@ -486,12 +481,10 @@ KX_BlenderMaterial::Activate(
TCachingInfo& cachingInfo
)const
{
- bool dopass = false;
- if( GLEW_ARB_shader_objects && ( mShader && mShader->Ok() ) ) {
- if( (mPass++) < mShader->getNumPass() ) {
+ if(GLEW_ARB_shader_objects && (mShader && mShader->Ok())) {
+ if((mPass++) < mShader->getNumPass() ) {
ActivatShaders(rasty, cachingInfo);
- dopass = true;
- return dopass;
+ return true;
}
else {
if(mShader == mLastShader) {
@@ -499,36 +492,29 @@ KX_BlenderMaterial::Activate(
mLastShader = NULL;
}
mPass = 0;
- dopass = false;
- return dopass;
+ return false;
}
}
- else if( GLEW_ARB_shader_objects && ( mBlenderShader && mBlenderShader->Ok() ) ) {
- if( (mPass++) == 0 ) {
+ else if( GLEW_ARB_shader_objects && (mBlenderShader && mBlenderShader->Ok() ) ) {
+ if(mPass++ == 0) {
ActivateBlenderShaders(rasty, cachingInfo);
- dopass = true;
- return dopass;
+ return true;
}
else {
mPass = 0;
- dopass = false;
- return dopass;
+ return false;
}
}
else {
- switch (mPass++)
- {
- case 0:
- ActivateMat(rasty, cachingInfo);
- dopass = true;
- break;
- default:
- mPass = 0;
- dopass = false;
- break;
+ if(mPass++ == 0) {
+ ActivateMat(rasty, cachingInfo);
+ return true;
+ }
+ else {
+ mPass = 0;
+ return false;
}
}
- return dopass;
}
bool KX_BlenderMaterial::UsesLighting(RAS_IRasterizer *rasty) const
@@ -536,14 +522,15 @@ bool KX_BlenderMaterial::UsesLighting(RAS_IRasterizer *rasty) const
if(!RAS_IPolyMaterial::UsesLighting(rasty))
return false;
- if(mShader && mShader->Ok());
+ if(mShader && mShader->Ok())
+ return true;
else if(mBlenderShader && mBlenderShader->Ok())
return false;
-
- return true;
+ else
+ return true;
}
-void KX_BlenderMaterial::ActivateMeshSlot(const KX_MeshSlot & ms, RAS_IRasterizer* rasty) const
+void KX_BlenderMaterial::ActivateMeshSlot(const RAS_MeshSlot & ms, RAS_IRasterizer* rasty) const
{
if(mShader && GLEW_ARB_shader_objects) {
mShader->Update(ms, rasty);
@@ -554,7 +541,7 @@ void KX_BlenderMaterial::ActivateMeshSlot(const KX_MeshSlot & ms, RAS_IRasterize
mBlenderShader->Update(ms, rasty);
/* we do blend modes here, because they can change per object
- * with the same material due to obcolor */
+ * with the same material due to obcolor/obalpha */
blendmode = mBlenderShader->GetBlendMode();
if((blendmode == TF_SOLID || blendmode == TF_ALPHA) && mMaterial->transp != TF_SOLID)
blendmode = mMaterial->transp;
@@ -633,11 +620,7 @@ void KX_BlenderMaterial::ActivateTexGen(RAS_IRasterizer *ras) const
else
ras->SetTexCoord(RAS_IRasterizer::RAS_TEXCO_DISABLE, i);
}
-
- ras->EnableTextures(true);
}
- else
- ras->EnableTextures(false);
}
void KX_BlenderMaterial::setTexMatrixData(int i)
@@ -712,8 +695,7 @@ void KX_BlenderMaterial::setObjectMatrixData(int i, RAS_IRasterizer *ras)
glEnable(GL_TEXTURE_GEN_T);
glEnable(GL_TEXTURE_GEN_R);
- MT_Matrix4x4 mvmat;
- ras->GetViewMatrix(mvmat);
+ const MT_Matrix4x4& mvmat = ras->GetViewMatrix();
glMatrixMode(GL_TEXTURE);
glLoadIdentity();
@@ -835,7 +817,9 @@ KX_PYMETHODDEF_DOC( KX_BlenderMaterial, getShader , "getShader()")
}
if(mShader && !mShader->GetError()) {
+ m_flag &= ~RAS_BLENDERGLSL;
mMaterial->SetSharedMaterial(true);
+ mScene->GetBucketManager()->ReleaseDisplayLists(this);
Py_INCREF(mShader);
return mShader;
}else
@@ -870,8 +854,6 @@ void KX_BlenderMaterial::SetBlenderGLSLShader(void)
delete mBlenderShader;
mBlenderShader = 0;
}
- else
- m_flag |= RAS_BLENDERGLSL;
}
KX_PYMETHODDEF_DOC( KX_BlenderMaterial, getMaterialIndex, "getMaterialIndex()")
diff --git a/source/gameengine/Ketsji/KX_BlenderMaterial.h b/source/gameengine/Ketsji/KX_BlenderMaterial.h
index 0d7657b8cdb..4ddf5a924df 100644
--- a/source/gameengine/Ketsji/KX_BlenderMaterial.h
+++ b/source/gameengine/Ketsji/KX_BlenderMaterial.h
@@ -28,7 +28,6 @@ public:
BL_Material* mat,
bool skin,
int lightlayer,
- void* clientobject,
PyTypeObject* T=&Type
);
@@ -47,7 +46,7 @@ public:
virtual
void ActivateMeshSlot(
- const KX_MeshSlot & ms,
+ const RAS_MeshSlot & ms,
RAS_IRasterizer* rasty
) const;
diff --git a/source/gameengine/Ketsji/KX_BulletPhysicsController.cpp b/source/gameengine/Ketsji/KX_BulletPhysicsController.cpp
index 539eaec4a7b..bf838e60210 100644
--- a/source/gameengine/Ketsji/KX_BulletPhysicsController.cpp
+++ b/source/gameengine/Ketsji/KX_BulletPhysicsController.cpp
@@ -14,6 +14,7 @@
#include "PHY_IPhysicsEnvironment.h"
#include "CcdPhysicsEnvironment.h"
+#include "BulletSoftBody/btSoftBody.h"
KX_BulletPhysicsController::KX_BulletPhysicsController (const CcdConstructionInfo& ci, bool dyna)
@@ -114,7 +115,7 @@ MT_Vector3 KX_BulletPhysicsController::GetAngularVelocity()
MT_Vector3 KX_BulletPhysicsController::GetVelocity(const MT_Point3& pos)
{
float linVel[3];
- CcdPhysicsController::GetLinearVelocity(linVel[0],linVel[1],linVel[2]);
+ CcdPhysicsController::GetVelocity(pos[0], pos[1], pos[2], linVel[0],linVel[1],linVel[2]);
return MT_Vector3(linVel[0],linVel[1],linVel[2]);
}
@@ -148,13 +149,23 @@ void KX_BulletPhysicsController::setScaling(const MT_Vector3& scaling)
}
MT_Scalar KX_BulletPhysicsController::GetMass()
{
-
- MT_Scalar invmass = GetRigidBody()->getInvMass();
+ if (GetSoftBody())
+ return GetSoftBody()->getTotalMass();
+
+ MT_Scalar invmass = 0.f;
+ if (GetRigidBody())
+ invmass = GetRigidBody()->getInvMass();
if (invmass)
return 1.f/invmass;
return 0.f;
}
+
+MT_Scalar KX_BulletPhysicsController::GetRadius()
+{
+ return MT_Scalar(CcdPhysicsController::GetRadius());
+}
+
MT_Vector3 KX_BulletPhysicsController::getReactionForce()
{
assert(0);
@@ -167,7 +178,7 @@ void KX_BulletPhysicsController::setRigidBody(bool rigid)
void KX_BulletPhysicsController::SuspendDynamics(bool ghost)
{
btRigidBody *body = GetRigidBody();
- if (body->getActivationState() != DISABLE_SIMULATION)
+ if (body && body->getActivationState() != DISABLE_SIMULATION)
{
btBroadphaseProxy* handle = body->getBroadphaseHandle();
m_savedCollisionFlags = body->getCollisionFlags();
@@ -186,7 +197,7 @@ void KX_BulletPhysicsController::SuspendDynamics(bool ghost)
void KX_BulletPhysicsController::RestoreDynamics()
{
btRigidBody *body = GetRigidBody();
- if (body->getActivationState() == DISABLE_SIMULATION)
+ if (body && body->getActivationState() == DISABLE_SIMULATION)
{
GetPhysicsEnvironment()->updateCcdPhysicsController(this,
m_savedMass,
@@ -206,6 +217,9 @@ SG_Controller* KX_BulletPhysicsController::GetReplica(class SG_Node* destnode)
//parentcontroller is here be able to avoid collisions between parent/child
PHY_IPhysicsController* parentctrl = NULL;
+ KX_BulletPhysicsController* parentKxCtrl = NULL;
+ CcdPhysicsController* ccdParent = NULL;
+
if (destnode != destnode->GetRootSGParent())
{
@@ -225,12 +239,15 @@ SG_Controller* KX_BulletPhysicsController::GetReplica(class SG_Node* destnode)
KX_GameObject *clientgameobj = static_cast<KX_GameObject*>( (*childit)->GetSGClientObject());
if (clientgameobj)
{
- parentctrl = (KX_BulletPhysicsController*)clientgameobj->GetPhysicsController();
+ parentKxCtrl = (KX_BulletPhysicsController*)clientgameobj->GetPhysicsController();
+ parentctrl = parentKxCtrl;
+ ccdParent = parentKxCtrl;
}
}
}
}
+ physicsreplica->setParentCtrl(ccdParent);
physicsreplica->PostProcessReplica(motionstate,parentctrl);
physicsreplica->m_userdata = (PHY_IPhysicsController*)physicsreplica;
return physicsreplica;
@@ -241,18 +258,22 @@ SG_Controller* KX_BulletPhysicsController::GetReplica(class SG_Node* destnode)
void KX_BulletPhysicsController::SetSumoTransform(bool nondynaonly)
{
- GetRigidBody()->activate(true);
+ if (GetRigidBody())
+ GetRigidBody()->activate(true);
if (!m_bDyna)
{
- GetRigidBody()->setCollisionFlags(GetRigidBody()->getCollisionFlags() | btCollisionObject::CF_KINEMATIC_OBJECT);
+ GetCollisionObject()->setCollisionFlags(GetRigidBody()->getCollisionFlags() | btCollisionObject::CF_KINEMATIC_OBJECT);
} else
{
if (!nondynaonly)
{
btTransform worldTrans;
- GetRigidBody()->getMotionState()->getWorldTransform(worldTrans);
- GetRigidBody()->setCenterOfMassTransform(worldTrans);
+ if (GetRigidBody())
+ {
+ GetRigidBody()->getMotionState()->getWorldTransform(worldTrans);
+ GetRigidBody()->setCenterOfMassTransform(worldTrans);
+ }
/*
scaling?
diff --git a/source/gameengine/Ketsji/KX_BulletPhysicsController.h b/source/gameengine/Ketsji/KX_BulletPhysicsController.h
index 2efe0474b30..cdcb82c87ca 100644
--- a/source/gameengine/Ketsji/KX_BulletPhysicsController.h
+++ b/source/gameengine/Ketsji/KX_BulletPhysicsController.h
@@ -49,9 +49,7 @@ public:
virtual SG_Controller* GetReplica(class SG_Node* destnode);
- void SetDyna(bool isDynamic) {
- m_bDyna = isDynamic;
- }
+ virtual MT_Scalar GetRadius();
virtual void SetSumoTransform(bool nondynaonly);
diff --git a/source/gameengine/Ketsji/KX_CameraActuator.cpp b/source/gameengine/Ketsji/KX_CameraActuator.cpp
index 42b909927fd..4d24e83843e 100644
--- a/source/gameengine/Ketsji/KX_CameraActuator.cpp
+++ b/source/gameengine/Ketsji/KX_CameraActuator.cpp
@@ -35,6 +35,8 @@
#include <math.h>
#include "KX_GameObject.h"
+#include "PyObjectPlus.h"
+
STR_String KX_CameraActuator::X_AXIS_STRING = "x";
STR_String KX_CameraActuator::Y_AXIS_STRING = "y";
@@ -395,16 +397,16 @@ PyParentObject KX_CameraActuator::Parents[] = {
};
PyMethodDef KX_CameraActuator::Methods[] = {
- {"setObject",(PyCFunction) KX_CameraActuator::sPySetObject, METH_O, SetObject_doc},
- {"getObject",(PyCFunction) KX_CameraActuator::sPyGetObject, METH_VARARGS, GetObject_doc},
- {"setMin" ,(PyCFunction) KX_CameraActuator::sPySetMin, METH_VARARGS, SetMin_doc},
- {"getMin" ,(PyCFunction) KX_CameraActuator::sPyGetMin, METH_NOARGS, GetMin_doc},
- {"setMax" ,(PyCFunction) KX_CameraActuator::sPySetMax, METH_VARARGS, SetMax_doc},
- {"getMax" ,(PyCFunction) KX_CameraActuator::sPyGetMax, METH_NOARGS, GetMax_doc},
- {"setHeight",(PyCFunction) KX_CameraActuator::sPySetHeight, METH_VARARGS, SetHeight_doc},
- {"getHeight",(PyCFunction) KX_CameraActuator::sPyGetHeight, METH_NOARGS, GetHeight_doc},
- {"setXY" ,(PyCFunction) KX_CameraActuator::sPySetXY, METH_VARARGS, SetXY_doc},
- {"getXY" ,(PyCFunction) KX_CameraActuator::sPyGetXY, METH_VARARGS, GetXY_doc},
+ {"setObject",(PyCFunction) KX_CameraActuator::sPySetObject, METH_O, (PY_METHODCHAR)SetObject_doc},
+ {"getObject",(PyCFunction) KX_CameraActuator::sPyGetObject, METH_VARARGS, (PY_METHODCHAR)GetObject_doc},
+ {"setMin" ,(PyCFunction) KX_CameraActuator::sPySetMin, METH_VARARGS, (PY_METHODCHAR)SetMin_doc},
+ {"getMin" ,(PyCFunction) KX_CameraActuator::sPyGetMin, METH_NOARGS, (PY_METHODCHAR)GetMin_doc},
+ {"setMax" ,(PyCFunction) KX_CameraActuator::sPySetMax, METH_VARARGS, (PY_METHODCHAR)SetMax_doc},
+ {"getMax" ,(PyCFunction) KX_CameraActuator::sPyGetMax, METH_NOARGS, (PY_METHODCHAR)GetMax_doc},
+ {"setHeight",(PyCFunction) KX_CameraActuator::sPySetHeight, METH_VARARGS, (PY_METHODCHAR)SetHeight_doc},
+ {"getHeight",(PyCFunction) KX_CameraActuator::sPyGetHeight, METH_NOARGS, (PY_METHODCHAR)GetHeight_doc},
+ {"setXY" ,(PyCFunction) KX_CameraActuator::sPySetXY, METH_VARARGS, (PY_METHODCHAR)SetXY_doc},
+ {"getXY" ,(PyCFunction) KX_CameraActuator::sPyGetXY, METH_VARARGS, (PY_METHODCHAR)GetXY_doc},
{NULL,NULL,NULL,NULL} //Sentinel
};
@@ -412,7 +414,7 @@ PyObject* KX_CameraActuator::_getattr(const STR_String& attr) {
_getattr_up(SCA_IActuator);
}
/* get obj ---------------------------------------------------------- */
-char KX_CameraActuator::GetObject_doc[] =
+const char KX_CameraActuator::GetObject_doc[] =
"getObject(name_only = 1)\n"
"name_only - optional arg, when true will return the KX_GameObject rather then its name\n"
"\tReturns the object this sensor reacts to.\n";
@@ -431,7 +433,7 @@ PyObject* KX_CameraActuator::PyGetObject(PyObject* self, PyObject* args)
return m_ob->AddRef();
}
/* set obj ---------------------------------------------------------- */
-char KX_CameraActuator::SetObject_doc[] =
+const char KX_CameraActuator::SetObject_doc[] =
"setObject(object)\n"
"\t- object: KX_GameObject, string or None\n"
"\tSets the object this sensor reacts to.\n";
@@ -453,7 +455,7 @@ PyObject* KX_CameraActuator::PySetObject(PyObject* self, PyObject* value)
}
/* get min ---------------------------------------------------------- */
-char KX_CameraActuator::GetMin_doc[] =
+const char KX_CameraActuator::GetMin_doc[] =
"getMin\n"
"\tReturns the minimum value set in the Min: field.\n";
PyObject* KX_CameraActuator::PyGetMin(PyObject* self,
@@ -463,7 +465,7 @@ PyObject* KX_CameraActuator::PyGetMin(PyObject* self,
return PyFloat_FromDouble(m_minHeight);
}
/* set min ---------------------------------------------------------- */
-char KX_CameraActuator::SetMin_doc[] =
+const char KX_CameraActuator::SetMin_doc[] =
"setMin\n"
"\tSets the minimum value.\n";
PyObject* KX_CameraActuator::PySetMin(PyObject* self,
@@ -479,7 +481,7 @@ PyObject* KX_CameraActuator::PySetMin(PyObject* self,
return NULL;
}
/* get min ---------------------------------------------------------- */
-char KX_CameraActuator::GetMax_doc[] =
+const char KX_CameraActuator::GetMax_doc[] =
"getMax\n"
"\tReturns the maximum value set in the Max: field.\n";
PyObject* KX_CameraActuator::PyGetMax(PyObject* self,
@@ -489,7 +491,7 @@ PyObject* KX_CameraActuator::PyGetMax(PyObject* self,
return PyFloat_FromDouble(m_maxHeight);
}
/* set min ---------------------------------------------------------- */
-char KX_CameraActuator::SetMax_doc[] =
+const char KX_CameraActuator::SetMax_doc[] =
"setMax\n"
"\tSets the maximum value.\n";
PyObject* KX_CameraActuator::PySetMax(PyObject* self,
@@ -505,7 +507,7 @@ PyObject* KX_CameraActuator::PySetMax(PyObject* self,
return NULL;
}
/* get height ---------------------------------------------------------- */
-char KX_CameraActuator::GetHeight_doc[] =
+const char KX_CameraActuator::GetHeight_doc[] =
"getHeight\n"
"\tReturns the height value set in the height: field.\n";
PyObject* KX_CameraActuator::PyGetHeight(PyObject* self,
@@ -515,7 +517,7 @@ PyObject* KX_CameraActuator::PyGetHeight(PyObject* self,
return PyFloat_FromDouble(m_height);
}
/* set height ---------------------------------------------------------- */
-char KX_CameraActuator::SetHeight_doc[] =
+const char KX_CameraActuator::SetHeight_doc[] =
"setHeight\n"
"\tSets the height value.\n";
PyObject* KX_CameraActuator::PySetHeight(PyObject* self,
@@ -531,7 +533,7 @@ PyObject* KX_CameraActuator::PySetHeight(PyObject* self,
return NULL;
}
/* set XY ---------------------------------------------------------- */
-char KX_CameraActuator::SetXY_doc[] =
+const char KX_CameraActuator::SetXY_doc[] =
"setXY\n"
"\tSets axis the camera tries to get behind.\n"
"\t1=x, 0=y\n";
@@ -549,7 +551,7 @@ PyObject* KX_CameraActuator::PySetXY(PyObject* self,
}
/* get XY -------------------------------------------------------------*/
-char KX_CameraActuator::GetXY_doc[] =
+const char KX_CameraActuator::GetXY_doc[] =
"getXY\n"
"\tGets the axis the camera tries to get behind.\n"
"\tTrue = X, False = Y\n";
diff --git a/source/gameengine/Ketsji/KX_ConstraintActuator.cpp b/source/gameengine/Ketsji/KX_ConstraintActuator.cpp
index e00ec68ad33..76357e9c58f 100644
--- a/source/gameengine/Ketsji/KX_ConstraintActuator.cpp
+++ b/source/gameengine/Ketsji/KX_ConstraintActuator.cpp
@@ -109,16 +109,11 @@ KX_ConstraintActuator::~KX_ConstraintActuator()
// there's nothing to be done here, really....
} /* end of destructor */
-bool KX_ConstraintActuator::RayHit(KX_ClientObjectInfo* client, MT_Point3& hit_point, MT_Vector3& hit_normal, void * const data)
+bool KX_ConstraintActuator::RayHit(KX_ClientObjectInfo* client, KX_RayCast* result, void * const data)
{
- KX_GameObject* hitKXObj = client->m_gameobject;
+ m_hitObject = client->m_gameobject;
- if (client->m_type > KX_ClientObjectInfo::ACTOR)
- {
- // false hit
- return false;
- }
bool bFound = false;
if (m_property[0] == 0)
@@ -136,11 +131,29 @@ bool KX_ConstraintActuator::RayHit(KX_ClientObjectInfo* client, MT_Point3& hit_p
}
else
{
- bFound = hitKXObj->GetProperty(m_property) != NULL;
+ bFound = m_hitObject->GetProperty(m_property) != NULL;
}
}
+ // update the hit status
+ result->m_hitFound = bFound;
+ // stop looking
+ return true;
+}
- return bFound;
+/* this function is used to pre-filter the object before casting the ray on them.
+ This is useful for "X-Ray" option when we want to see "through" unwanted object.
+ */
+bool KX_ConstraintActuator::NeedRayCast(KX_ClientObjectInfo* client)
+{
+ if (client->m_type > KX_ClientObjectInfo::ACTOR)
+ {
+ // Unknown type of object, skip it.
+ // Should not occur as the sensor objects are filtered in RayTest()
+ printf("Invalid client type %d found in ray casting\n", client->m_type);
+ return false;
+ }
+ // no X-Ray function yet
+ return true;
}
bool KX_ConstraintActuator::Update(double curtime, bool frame)
@@ -159,13 +172,15 @@ bool KX_ConstraintActuator::Update(double curtime, bool frame)
KX_GameObject *obj = (KX_GameObject*) GetParent();
MT_Point3 position = obj->NodeGetWorldPosition();
MT_Point3 newposition;
- MT_Vector3 direction, refDirection;
+ MT_Vector3 normal, direction, refDirection;
MT_Matrix3x3 rotation = obj->NodeGetWorldOrientation();
MT_Scalar filter, newdistance, cosangle;
int axis, sign;
if (m_posDampTime) {
filter = m_posDampTime/(1.0+m_posDampTime);
+ } else {
+ filter = 0.0;
}
switch (m_locrot) {
case KX_ACT_CONSTRAINT_ORIX:
@@ -225,12 +240,8 @@ bool KX_ConstraintActuator::Update(double curtime, bool frame)
} else {
refDirection = m_refDirection;
}
- if (m_posDampTime) {
- // apply damping on the direction
- direction = filter*direction + (1.0-filter)*refDirection;
- } else {
- direction = refDirection;
- }
+ // apply damping on the direction
+ direction = filter*direction + (1.0-filter)*refDirection;
obj->AlignAxisToVect(direction, axis);
result = true;
goto CHECK_TIME;
@@ -242,53 +253,76 @@ bool KX_ConstraintActuator::Update(double curtime, bool frame)
case KX_ACT_CONSTRAINT_DIRNZ:
switch (m_locrot) {
case KX_ACT_CONSTRAINT_DIRPX:
- direction[0] = rotation[0][0];
- direction[1] = rotation[1][0];
- direction[2] = rotation[2][0];
+ normal[0] = rotation[0][0];
+ normal[1] = rotation[1][0];
+ normal[2] = rotation[2][0];
axis = 0; // axis according to KX_GameObject::AlignAxisToVect()
- sign = 1; // X axis will be anti parrallel to normal
+ sign = 0; // X axis will be parrallel to direction of ray
break;
case KX_ACT_CONSTRAINT_DIRPY:
- direction[0] = rotation[0][1];
- direction[1] = rotation[1][1];
- direction[2] = rotation[2][1];
+ normal[0] = rotation[0][1];
+ normal[1] = rotation[1][1];
+ normal[2] = rotation[2][1];
axis = 1;
- sign = 1;
+ sign = 0;
break;
case KX_ACT_CONSTRAINT_DIRPZ:
- direction[0] = rotation[0][2];
- direction[1] = rotation[1][2];
- direction[2] = rotation[2][2];
+ normal[0] = rotation[0][2];
+ normal[1] = rotation[1][2];
+ normal[2] = rotation[2][2];
axis = 2;
- sign = 1;
+ sign = 0;
break;
case KX_ACT_CONSTRAINT_DIRNX:
- direction[0] = -rotation[0][0];
- direction[1] = -rotation[1][0];
- direction[2] = -rotation[2][0];
+ normal[0] = -rotation[0][0];
+ normal[1] = -rotation[1][0];
+ normal[2] = -rotation[2][0];
axis = 0;
- sign = 0;
+ sign = 1;
break;
case KX_ACT_CONSTRAINT_DIRNY:
- direction[0] = -rotation[0][1];
- direction[1] = -rotation[1][1];
- direction[2] = -rotation[2][1];
+ normal[0] = -rotation[0][1];
+ normal[1] = -rotation[1][1];
+ normal[2] = -rotation[2][1];
axis = 1;
- sign = 0;
+ sign = 1;
break;
case KX_ACT_CONSTRAINT_DIRNZ:
- direction[0] = -rotation[0][2];
- direction[1] = -rotation[1][2];
- direction[2] = -rotation[2][2];
+ normal[0] = -rotation[0][2];
+ normal[1] = -rotation[1][2];
+ normal[2] = -rotation[2][2];
axis = 2;
- sign = 0;
+ sign = 1;
break;
}
- direction.normalize();
+ normal.normalize();
+ if (m_option & KX_ACT_CONSTRAINT_LOCAL) {
+ // direction of the ray is along the local axis
+ direction = normal;
+ } else {
+ switch (m_locrot) {
+ case KX_ACT_CONSTRAINT_DIRPX:
+ direction = MT_Vector3(1.0,0.0,0.0);
+ break;
+ case KX_ACT_CONSTRAINT_DIRPY:
+ direction = MT_Vector3(0.0,1.0,0.0);
+ break;
+ case KX_ACT_CONSTRAINT_DIRPZ:
+ direction = MT_Vector3(0.0,0.0,1.0);
+ break;
+ case KX_ACT_CONSTRAINT_DIRNX:
+ direction = MT_Vector3(-1.0,0.0,0.0);
+ break;
+ case KX_ACT_CONSTRAINT_DIRNY:
+ direction = MT_Vector3(0.0,-1.0,0.0);
+ break;
+ case KX_ACT_CONSTRAINT_DIRNZ:
+ direction = MT_Vector3(0.0,0.0,-1.0);
+ break;
+ }
+ }
{
MT_Point3 topoint = position + (m_maximumBound) * direction;
- MT_Point3 resultpoint;
- MT_Vector3 resultnormal;
PHY_IPhysicsEnvironment* pe = obj->GetPhysicsEnvironment();
KX_IPhysicsController *spc = obj->GetPhysicsController();
@@ -304,9 +338,10 @@ bool KX_ConstraintActuator::Update(double curtime, bool frame)
parent->Release();
}
}
- result = KX_RayCast::RayTest(spc, pe, position, topoint, resultpoint, resultnormal, KX_RayCast::Callback<KX_ConstraintActuator>(this));
-
+ KX_RayCast::Callback<KX_ConstraintActuator> callback(this,spc);
+ result = KX_RayCast::RayTest(pe, position, topoint, callback);
if (result) {
+ MT_Vector3 newnormal = callback.m_hitNormal;
// compute new position & orientation
if ((m_option & (KX_ACT_CONSTRAINT_NORMAL|KX_ACT_CONSTRAINT_DISTANCE)) == 0) {
// if none option is set, the actuator does nothing but detect ray
@@ -314,29 +349,40 @@ bool KX_ConstraintActuator::Update(double curtime, bool frame)
goto CHECK_TIME;
}
if (m_option & KX_ACT_CONSTRAINT_NORMAL) {
- // the new orientation must be so that the axis is parallel to normal
- if (sign)
- resultnormal = -resultnormal;
+ MT_Scalar rotFilter;
// apply damping on the direction
if (m_rotDampTime) {
- MT_Scalar rotFilter = 1.0/(1.0+m_rotDampTime);
- resultnormal = (-m_rotDampTime*rotFilter)*direction + rotFilter*resultnormal;
- } else if (m_posDampTime) {
- resultnormal = -filter*direction + (1.0-filter)*resultnormal;
+ rotFilter = m_rotDampTime/(1.0+m_rotDampTime);
+ } else {
+ rotFilter = filter;
+ }
+ newnormal = rotFilter*normal - (1.0-rotFilter)*newnormal;
+ obj->AlignAxisToVect((sign)?-newnormal:newnormal, axis);
+ if (m_option & KX_ACT_CONSTRAINT_LOCAL) {
+ direction = newnormal;
+ direction.normalize();
}
- obj->AlignAxisToVect(resultnormal, axis);
- direction = -resultnormal;
}
if (m_option & KX_ACT_CONSTRAINT_DISTANCE) {
if (m_posDampTime) {
- newdistance = filter*(position-resultpoint).length()+(1.0-filter)*m_minimumBound;
+ newdistance = filter*(position-callback.m_hitPoint).length()+(1.0-filter)*m_minimumBound;
} else {
newdistance = m_minimumBound;
}
+ // logically we should cancel the speed along the ray direction as we set the
+ // position along that axis
+ spc = obj->GetPhysicsController();
+ if (spc && spc->IsDyna()) {
+ MT_Vector3 linV = spc->GetLinearVelocity();
+ // cancel the projection along the ray direction
+ MT_Scalar fallspeed = linV.dot(direction);
+ if (!MT_fuzzyZero(fallspeed))
+ spc->SetLinearVelocity(linV-fallspeed*direction,false);
+ }
} else {
- newdistance = (position-resultpoint).length();
+ newdistance = (position-callback.m_hitPoint).length();
}
- newposition = resultpoint-newdistance*direction;
+ newposition = callback.m_hitPoint-newdistance*direction;
} else if (m_option & KX_ACT_CONSTRAINT_PERMANENT) {
// no contact but still keep running
result = true;
@@ -344,10 +390,114 @@ bool KX_ConstraintActuator::Update(double curtime, bool frame)
}
}
break;
+ case KX_ACT_CONSTRAINT_FHPX:
+ case KX_ACT_CONSTRAINT_FHPY:
+ case KX_ACT_CONSTRAINT_FHPZ:
+ case KX_ACT_CONSTRAINT_FHNX:
+ case KX_ACT_CONSTRAINT_FHNY:
+ case KX_ACT_CONSTRAINT_FHNZ:
+ switch (m_locrot) {
+ case KX_ACT_CONSTRAINT_FHPX:
+ normal[0] = -rotation[0][0];
+ normal[1] = -rotation[1][0];
+ normal[2] = -rotation[2][0];
+ direction = MT_Vector3(1.0,0.0,0.0);
+ break;
+ case KX_ACT_CONSTRAINT_FHPY:
+ normal[0] = -rotation[0][1];
+ normal[1] = -rotation[1][1];
+ normal[2] = -rotation[2][1];
+ direction = MT_Vector3(0.0,1.0,0.0);
+ break;
+ case KX_ACT_CONSTRAINT_FHPZ:
+ normal[0] = -rotation[0][2];
+ normal[1] = -rotation[1][2];
+ normal[2] = -rotation[2][2];
+ direction = MT_Vector3(0.0,0.0,1.0);
+ break;
+ case KX_ACT_CONSTRAINT_FHNX:
+ normal[0] = rotation[0][0];
+ normal[1] = rotation[1][0];
+ normal[2] = rotation[2][0];
+ direction = MT_Vector3(-1.0,0.0,0.0);
+ break;
+ case KX_ACT_CONSTRAINT_FHNY:
+ normal[0] = rotation[0][1];
+ normal[1] = rotation[1][1];
+ normal[2] = rotation[2][1];
+ direction = MT_Vector3(0.0,-1.0,0.0);
+ break;
+ case KX_ACT_CONSTRAINT_FHNZ:
+ normal[0] = rotation[0][2];
+ normal[1] = rotation[1][2];
+ normal[2] = rotation[2][2];
+ direction = MT_Vector3(0.0,0.0,-1.0);
+ break;
+ }
+ normal.normalize();
+ {
+ PHY_IPhysicsEnvironment* pe = obj->GetPhysicsEnvironment();
+ KX_IPhysicsController *spc = obj->GetPhysicsController();
+
+ if (!pe) {
+ std::cout << "WARNING: Constraint actuator " << GetName() << ": There is no physics environment!" << std::endl;
+ goto CHECK_TIME;
+ }
+ if (!spc || !spc->IsDyna()) {
+ // the object is not dynamic, it won't support setting speed
+ goto CHECK_TIME;
+ }
+ m_hitObject = NULL;
+ // distance of Fh area is stored in m_minimum
+ MT_Point3 topoint = position + (m_minimumBound+spc->GetRadius()) * direction;
+ KX_RayCast::Callback<KX_ConstraintActuator> callback(this,spc);
+ result = KX_RayCast::RayTest(pe, position, topoint, callback);
+ // we expect a hit object
+ if (!m_hitObject)
+ result = false;
+ if (result)
+ {
+ MT_Vector3 newnormal = callback.m_hitNormal;
+ // compute new position & orientation
+ MT_Scalar distance = (callback.m_hitPoint-position).length()-spc->GetRadius();
+ // estimate the velocity of the hit point
+ MT_Point3 relativeHitPoint;
+ relativeHitPoint = (callback.m_hitPoint-m_hitObject->NodeGetWorldPosition());
+ MT_Vector3 velocityHitPoint = m_hitObject->GetVelocity(relativeHitPoint);
+ MT_Vector3 relativeVelocity = spc->GetLinearVelocity() - velocityHitPoint;
+ MT_Scalar relativeVelocityRay = direction.dot(relativeVelocity);
+ MT_Scalar springExtent = 1.0 - distance/m_minimumBound;
+ // Fh force is stored in m_maximum
+ MT_Scalar springForce = springExtent * m_maximumBound;
+ // damping is stored in m_refDirection [0] = damping, [1] = rot damping
+ MT_Scalar springDamp = relativeVelocityRay * m_refDirection[0];
+ MT_Vector3 newVelocity = spc->GetLinearVelocity()-(springForce+springDamp)*direction;
+ if (m_option & KX_ACT_CONSTRAINT_NORMAL)
+ {
+ newVelocity+=(springForce+springDamp)*(newnormal-newnormal.dot(direction)*direction);
+ }
+ spc->SetLinearVelocity(newVelocity, false);
+ if (m_option & KX_ACT_CONSTRAINT_DOROTFH)
+ {
+ MT_Vector3 angSpring = (normal.cross(newnormal))*m_maximumBound;
+ MT_Vector3 angVelocity = spc->GetAngularVelocity();
+ // remove component that is parallel to normal
+ angVelocity -= angVelocity.dot(newnormal)*newnormal;
+ MT_Vector3 angDamp = angVelocity * ((m_refDirection[1]>MT_EPSILON)?m_refDirection[1]:m_refDirection[0]);
+ spc->SetAngularVelocity(spc->GetAngularVelocity()+(angSpring-angDamp), false);
+ }
+ } else if (m_option & KX_ACT_CONSTRAINT_PERMANENT) {
+ // no contact but still keep running
+ result = true;
+ }
+ // don't set the position with this constraint
+ goto CHECK_TIME;
+ }
+ break;
case KX_ACT_CONSTRAINT_LOCX:
case KX_ACT_CONSTRAINT_LOCY:
case KX_ACT_CONSTRAINT_LOCZ:
- newposition = position;
+ newposition = position = obj->GetSGNode()->GetLocalPosition();
switch (m_locrot) {
case KX_ACT_CONSTRAINT_LOCX:
Clamp(newposition[0], m_minimumBound, m_maximumBound);
@@ -363,7 +513,8 @@ bool KX_ConstraintActuator::Update(double curtime, bool frame)
if (m_posDampTime) {
newposition = filter*position + (1.0-filter)*newposition;
}
- break;
+ obj->NodeSetLocalPosition(newposition);
+ goto CHECK_TIME;
}
if (result) {
// set the new position but take into account parent if any
@@ -436,28 +587,28 @@ PyParentObject KX_ConstraintActuator::Parents[] = {
};
PyMethodDef KX_ConstraintActuator::Methods[] = {
- {"setDamp", (PyCFunction) KX_ConstraintActuator::sPySetDamp, METH_VARARGS, SetDamp_doc},
- {"getDamp", (PyCFunction) KX_ConstraintActuator::sPyGetDamp, METH_NOARGS, GetDamp_doc},
- {"setRotDamp", (PyCFunction) KX_ConstraintActuator::sPySetRotDamp, METH_VARARGS, SetRotDamp_doc},
- {"getRotDamp", (PyCFunction) KX_ConstraintActuator::sPyGetRotDamp, METH_NOARGS, GetRotDamp_doc},
- {"setDirection", (PyCFunction) KX_ConstraintActuator::sPySetDirection, METH_VARARGS, SetDirection_doc},
- {"getDirection", (PyCFunction) KX_ConstraintActuator::sPyGetDirection, METH_NOARGS, GetDirection_doc},
- {"setOption", (PyCFunction) KX_ConstraintActuator::sPySetOption, METH_VARARGS, SetOption_doc},
- {"getOption", (PyCFunction) KX_ConstraintActuator::sPyGetOption, METH_NOARGS, GetOption_doc},
- {"setTime", (PyCFunction) KX_ConstraintActuator::sPySetTime, METH_VARARGS, SetTime_doc},
- {"getTime", (PyCFunction) KX_ConstraintActuator::sPyGetTime, METH_NOARGS, GetTime_doc},
- {"setProperty", (PyCFunction) KX_ConstraintActuator::sPySetProperty, METH_VARARGS, SetProperty_doc},
- {"getProperty", (PyCFunction) KX_ConstraintActuator::sPyGetProperty, METH_NOARGS, GetProperty_doc},
- {"setMin", (PyCFunction) KX_ConstraintActuator::sPySetMin, METH_VARARGS, SetMin_doc},
- {"getMin", (PyCFunction) KX_ConstraintActuator::sPyGetMin, METH_NOARGS, GetMin_doc},
- {"setDistance", (PyCFunction) KX_ConstraintActuator::sPySetMin, METH_VARARGS, SetDistance_doc},
- {"getDistance", (PyCFunction) KX_ConstraintActuator::sPyGetMin, METH_NOARGS, GetDistance_doc},
- {"setMax", (PyCFunction) KX_ConstraintActuator::sPySetMax, METH_VARARGS, SetMax_doc},
- {"getMax", (PyCFunction) KX_ConstraintActuator::sPyGetMax, METH_NOARGS, GetMax_doc},
- {"setRayLength", (PyCFunction) KX_ConstraintActuator::sPySetMax, METH_VARARGS, SetRayLength_doc},
- {"getRayLength", (PyCFunction) KX_ConstraintActuator::sPyGetMax, METH_NOARGS, GetRayLength_doc},
- {"setLimit", (PyCFunction) KX_ConstraintActuator::sPySetLimit, METH_VARARGS, SetLimit_doc},
- {"getLimit", (PyCFunction) KX_ConstraintActuator::sPyGetLimit, METH_NOARGS, GetLimit_doc},
+ {"setDamp", (PyCFunction) KX_ConstraintActuator::sPySetDamp, METH_VARARGS, (PY_METHODCHAR)SetDamp_doc},
+ {"getDamp", (PyCFunction) KX_ConstraintActuator::sPyGetDamp, METH_NOARGS, (PY_METHODCHAR)GetDamp_doc},
+ {"setRotDamp", (PyCFunction) KX_ConstraintActuator::sPySetRotDamp, METH_VARARGS, (PY_METHODCHAR)SetRotDamp_doc},
+ {"getRotDamp", (PyCFunction) KX_ConstraintActuator::sPyGetRotDamp, METH_NOARGS, (PY_METHODCHAR)GetRotDamp_doc},
+ {"setDirection", (PyCFunction) KX_ConstraintActuator::sPySetDirection, METH_VARARGS, (PY_METHODCHAR)SetDirection_doc},
+ {"getDirection", (PyCFunction) KX_ConstraintActuator::sPyGetDirection, METH_NOARGS, (PY_METHODCHAR)GetDirection_doc},
+ {"setOption", (PyCFunction) KX_ConstraintActuator::sPySetOption, METH_VARARGS, (PY_METHODCHAR)SetOption_doc},
+ {"getOption", (PyCFunction) KX_ConstraintActuator::sPyGetOption, METH_NOARGS, (PY_METHODCHAR)GetOption_doc},
+ {"setTime", (PyCFunction) KX_ConstraintActuator::sPySetTime, METH_VARARGS, (PY_METHODCHAR)SetTime_doc},
+ {"getTime", (PyCFunction) KX_ConstraintActuator::sPyGetTime, METH_NOARGS, (PY_METHODCHAR)GetTime_doc},
+ {"setProperty", (PyCFunction) KX_ConstraintActuator::sPySetProperty, METH_VARARGS, (PY_METHODCHAR)SetProperty_doc},
+ {"getProperty", (PyCFunction) KX_ConstraintActuator::sPyGetProperty, METH_NOARGS, (PY_METHODCHAR)GetProperty_doc},
+ {"setMin", (PyCFunction) KX_ConstraintActuator::sPySetMin, METH_VARARGS, (PY_METHODCHAR)SetMin_doc},
+ {"getMin", (PyCFunction) KX_ConstraintActuator::sPyGetMin, METH_NOARGS, (PY_METHODCHAR)GetMin_doc},
+ {"setDistance", (PyCFunction) KX_ConstraintActuator::sPySetMin, METH_VARARGS, (PY_METHODCHAR)SetDistance_doc},
+ {"getDistance", (PyCFunction) KX_ConstraintActuator::sPyGetMin, METH_NOARGS, (PY_METHODCHAR)GetDistance_doc},
+ {"setMax", (PyCFunction) KX_ConstraintActuator::sPySetMax, METH_VARARGS, (PY_METHODCHAR)SetMax_doc},
+ {"getMax", (PyCFunction) KX_ConstraintActuator::sPyGetMax, METH_NOARGS, (PY_METHODCHAR)GetMax_doc},
+ {"setRayLength", (PyCFunction) KX_ConstraintActuator::sPySetMax, METH_VARARGS, (PY_METHODCHAR)SetRayLength_doc},
+ {"getRayLength", (PyCFunction) KX_ConstraintActuator::sPyGetMax, METH_NOARGS, (PY_METHODCHAR)GetRayLength_doc},
+ {"setLimit", (PyCFunction) KX_ConstraintActuator::sPySetLimit, METH_VARARGS, (PY_METHODCHAR)SetLimit_doc},
+ {"getLimit", (PyCFunction) KX_ConstraintActuator::sPyGetLimit, METH_NOARGS, (PY_METHODCHAR)GetLimit_doc},
{NULL,NULL} //Sentinel
};
@@ -466,7 +617,7 @@ PyObject* KX_ConstraintActuator::_getattr(const STR_String& attr) {
}
/* 2. setDamp */
-char KX_ConstraintActuator::SetDamp_doc[] =
+const char KX_ConstraintActuator::SetDamp_doc[] =
"setDamp(duration)\n"
"\t- duration: integer\n"
"\tSets the time constant of the orientation and distance constraint.\n"
@@ -485,7 +636,7 @@ PyObject* KX_ConstraintActuator::PySetDamp(PyObject* self,
Py_Return;
}
/* 3. getDamp */
-char KX_ConstraintActuator::GetDamp_doc[] =
+const char KX_ConstraintActuator::GetDamp_doc[] =
"getDamp()\n"
"\tReturns the damping parameter.\n";
PyObject* KX_ConstraintActuator::PyGetDamp(PyObject* self){
@@ -493,7 +644,7 @@ PyObject* KX_ConstraintActuator::PyGetDamp(PyObject* self){
}
/* 2. setRotDamp */
-char KX_ConstraintActuator::SetRotDamp_doc[] =
+const char KX_ConstraintActuator::SetRotDamp_doc[] =
"setRotDamp(duration)\n"
"\t- duration: integer\n"
"\tSets the time constant of the orientation constraint.\n"
@@ -512,7 +663,7 @@ PyObject* KX_ConstraintActuator::PySetRotDamp(PyObject* self,
Py_Return;
}
/* 3. getRotDamp */
-char KX_ConstraintActuator::GetRotDamp_doc[] =
+const char KX_ConstraintActuator::GetRotDamp_doc[] =
"getRotDamp()\n"
"\tReturns the damping time for application of the constraint.\n";
PyObject* KX_ConstraintActuator::PyGetRotDamp(PyObject* self){
@@ -520,7 +671,7 @@ PyObject* KX_ConstraintActuator::PyGetRotDamp(PyObject* self){
}
/* 2. setDirection */
-char KX_ConstraintActuator::SetDirection_doc[] =
+const char KX_ConstraintActuator::SetDirection_doc[] =
"setDirection(vector)\n"
"\t- vector: 3-tuple\n"
"\tSets the reference direction in world coordinate for the orientation constraint.\n";
@@ -547,7 +698,7 @@ PyObject* KX_ConstraintActuator::PySetDirection(PyObject* self,
Py_Return;
}
/* 3. getDirection */
-char KX_ConstraintActuator::GetDirection_doc[] =
+const char KX_ConstraintActuator::GetDirection_doc[] =
"getDirection()\n"
"\tReturns the reference direction of the orientation constraint as a 3-tuple.\n";
PyObject* KX_ConstraintActuator::PyGetDirection(PyObject* self){
@@ -560,7 +711,7 @@ PyObject* KX_ConstraintActuator::PyGetDirection(PyObject* self){
}
/* 2. setOption */
-char KX_ConstraintActuator::SetOption_doc[] =
+const char KX_ConstraintActuator::SetOption_doc[] =
"setOption(option)\n"
"\t- option: integer\n"
"\tSets several options of the distance constraint.\n"
@@ -582,7 +733,7 @@ PyObject* KX_ConstraintActuator::PySetOption(PyObject* self,
Py_Return;
}
/* 3. getOption */
-char KX_ConstraintActuator::GetOption_doc[] =
+const char KX_ConstraintActuator::GetOption_doc[] =
"getOption()\n"
"\tReturns the option parameter.\n";
PyObject* KX_ConstraintActuator::PyGetOption(PyObject* self){
@@ -590,7 +741,7 @@ PyObject* KX_ConstraintActuator::PyGetOption(PyObject* self){
}
/* 2. setTime */
-char KX_ConstraintActuator::SetTime_doc[] =
+const char KX_ConstraintActuator::SetTime_doc[] =
"setTime(duration)\n"
"\t- duration: integer\n"
"\tSets the activation time of the actuator.\n"
@@ -611,7 +762,7 @@ PyObject* KX_ConstraintActuator::PySetTime(PyObject* self,
Py_Return;
}
/* 3. getTime */
-char KX_ConstraintActuator::GetTime_doc[] =
+const char KX_ConstraintActuator::GetTime_doc[] =
"getTime()\n"
"\tReturns the time parameter.\n";
PyObject* KX_ConstraintActuator::PyGetTime(PyObject* self){
@@ -619,7 +770,7 @@ PyObject* KX_ConstraintActuator::PyGetTime(PyObject* self){
}
/* 2. setProperty */
-char KX_ConstraintActuator::SetProperty_doc[] =
+const char KX_ConstraintActuator::SetProperty_doc[] =
"setProperty(property)\n"
"\t- property: string\n"
"\tSets the name of the property or material for the ray detection of the distance constraint.\n"
@@ -641,7 +792,7 @@ PyObject* KX_ConstraintActuator::PySetProperty(PyObject* self,
Py_Return;
}
/* 3. getProperty */
-char KX_ConstraintActuator::GetProperty_doc[] =
+const char KX_ConstraintActuator::GetProperty_doc[] =
"getProperty()\n"
"\tReturns the property parameter.\n";
PyObject* KX_ConstraintActuator::PyGetProperty(PyObject* self){
@@ -649,12 +800,12 @@ PyObject* KX_ConstraintActuator::PyGetProperty(PyObject* self){
}
/* 4. setDistance */
-char KX_ConstraintActuator::SetDistance_doc[] =
+const char KX_ConstraintActuator::SetDistance_doc[] =
"setDistance(distance)\n"
"\t- distance: float\n"
"\tSets the target distance in distance constraint\n";
/* 4. setMin */
-char KX_ConstraintActuator::SetMin_doc[] =
+const char KX_ConstraintActuator::SetMin_doc[] =
"setMin(lower_bound)\n"
"\t- lower_bound: float\n"
"\tSets the lower value of the interval to which the value\n"
@@ -681,11 +832,11 @@ PyObject* KX_ConstraintActuator::PySetMin(PyObject* self,
Py_Return;
}
/* 5. getDistance */
-char KX_ConstraintActuator::GetDistance_doc[] =
+const char KX_ConstraintActuator::GetDistance_doc[] =
"getDistance()\n"
"\tReturns the distance parameter \n";
/* 5. getMin */
-char KX_ConstraintActuator::GetMin_doc[] =
+const char KX_ConstraintActuator::GetMin_doc[] =
"getMin()\n"
"\tReturns the lower value of the interval to which the value\n"
"\tis clipped.\n";
@@ -694,12 +845,12 @@ PyObject* KX_ConstraintActuator::PyGetMin(PyObject* self) {
}
/* 6. setRayLength */
-char KX_ConstraintActuator::SetRayLength_doc[] =
+const char KX_ConstraintActuator::SetRayLength_doc[] =
"setRayLength(length)\n"
"\t- length: float\n"
"\tSets the maximum ray length of the distance constraint\n";
/* 6. setMax */
-char KX_ConstraintActuator::SetMax_doc[] =
+const char KX_ConstraintActuator::SetMax_doc[] =
"setMax(upper_bound)\n"
"\t- upper_bound: float\n"
"\tSets the upper value of the interval to which the value\n"
@@ -726,11 +877,11 @@ PyObject* KX_ConstraintActuator::PySetMax(PyObject* self,
Py_Return;
}
/* 7. getRayLength */
-char KX_ConstraintActuator::GetRayLength_doc[] =
+const char KX_ConstraintActuator::GetRayLength_doc[] =
"getRayLength()\n"
"\tReturns the length of the ray\n";
/* 7. getMax */
-char KX_ConstraintActuator::GetMax_doc[] =
+const char KX_ConstraintActuator::GetMax_doc[] =
"getMax()\n"
"\tReturns the upper value of the interval to which the value\n"
"\tis clipped.\n";
@@ -741,7 +892,7 @@ PyObject* KX_ConstraintActuator::PyGetMax(PyObject* self) {
/* This setter/getter probably for the constraint type */
/* 8. setLimit */
-char KX_ConstraintActuator::SetLimit_doc[] =
+const char KX_ConstraintActuator::SetLimit_doc[] =
"setLimit(type)\n"
"\t- type: integer\n"
"\t 1 : LocX\n"
@@ -770,7 +921,7 @@ PyObject* KX_ConstraintActuator::PySetLimit(PyObject* self,
Py_Return;
}
/* 9. getLimit */
-char KX_ConstraintActuator::GetLimit_doc[] =
+const char KX_ConstraintActuator::GetLimit_doc[] =
"getLimit()\n"
"\tReturns the type of constraint.\n";
PyObject* KX_ConstraintActuator::PyGetLimit(PyObject* self) {
diff --git a/source/gameengine/Ketsji/KX_ConstraintActuator.h b/source/gameengine/Ketsji/KX_ConstraintActuator.h
index d9f39124cac..28b9b1e6a0b 100644
--- a/source/gameengine/Ketsji/KX_ConstraintActuator.h
+++ b/source/gameengine/Ketsji/KX_ConstraintActuator.h
@@ -37,6 +37,9 @@
#include "MT_Vector3.h"
#include "KX_ClientObjectInfo.h"
+class KX_RayCast;
+class KX_GameObject;
+
class KX_ConstraintActuator : public SCA_IActuator
{
Py_Header;
@@ -63,6 +66,8 @@ protected:
int m_option;
// property to check
char m_property[32];
+ // hit object
+ KX_GameObject* m_hitObject;
/**
* Clamp <var> to <min>, <max>. Borders are included (in as far as
@@ -90,6 +95,12 @@ protected:
KX_ACT_CONSTRAINT_ORIX,
KX_ACT_CONSTRAINT_ORIY,
KX_ACT_CONSTRAINT_ORIZ,
+ KX_ACT_CONSTRAINT_FHPX,
+ KX_ACT_CONSTRAINT_FHPY,
+ KX_ACT_CONSTRAINT_FHPZ,
+ KX_ACT_CONSTRAINT_FHNX,
+ KX_ACT_CONSTRAINT_FHNY,
+ KX_ACT_CONSTRAINT_FHNZ,
KX_ACT_CONSTRAINT_MAX
};
// match ACT_CONST_... values from BIF_interface.h
@@ -97,10 +108,13 @@ protected:
KX_ACT_CONSTRAINT_NORMAL = 64,
KX_ACT_CONSTRAINT_MATERIAL = 128,
KX_ACT_CONSTRAINT_PERMANENT = 256,
- KX_ACT_CONSTRAINT_DISTANCE = 512
+ KX_ACT_CONSTRAINT_DISTANCE = 512,
+ KX_ACT_CONSTRAINT_LOCAL = 1024,
+ KX_ACT_CONSTRAINT_DOROTFH = 2048
};
bool IsValidMode(KX_CONSTRAINTTYPE m);
- bool RayHit(KX_ClientObjectInfo* client, MT_Point3& hit_point, MT_Vector3& hit_normal, void * const data);
+ bool RayHit(KX_ClientObjectInfo* client, KX_RayCast* result, void * const data);
+ bool NeedRayCast(KX_ClientObjectInfo*);
KX_ConstraintActuator(SCA_IObject* gameobj,
int posDamptime,
@@ -144,12 +158,12 @@ protected:
KX_PYMETHOD_DOC_NOARGS(KX_ConstraintActuator,GetProperty);
KX_PYMETHOD_DOC(KX_ConstraintActuator,SetMin);
KX_PYMETHOD_DOC_NOARGS(KX_ConstraintActuator,GetMin);
- static char SetDistance_doc[];
- static char GetDistance_doc[];
+ static const char SetDistance_doc[];
+ static const char GetDistance_doc[];
KX_PYMETHOD_DOC(KX_ConstraintActuator,SetMax);
KX_PYMETHOD_DOC_NOARGS(KX_ConstraintActuator,GetMax);
- static char SetRayLength_doc[];
- static char GetRayLength_doc[];
+ static const char SetRayLength_doc[];
+ static const char GetRayLength_doc[];
KX_PYMETHOD_DOC(KX_ConstraintActuator,SetLimit);
KX_PYMETHOD_DOC_NOARGS(KX_ConstraintActuator,GetLimit);
};
diff --git a/source/gameengine/Ketsji/KX_ConstraintWrapper.cpp b/source/gameengine/Ketsji/KX_ConstraintWrapper.cpp
index b54da6eb753..c9095ff34f6 100644
--- a/source/gameengine/Ketsji/KX_ConstraintWrapper.cpp
+++ b/source/gameengine/Ketsji/KX_ConstraintWrapper.cpp
@@ -27,6 +27,7 @@
* ***** END GPL LICENSE BLOCK *****
*/
#include <Python.h>
+#include "PyObjectPlus.h"
#include "KX_ConstraintWrapper.h"
#include "PHY_IPhysicsEnvironment.h"
diff --git a/source/gameengine/Ketsji/KX_ConvertPhysicsObject.h b/source/gameengine/Ketsji/KX_ConvertPhysicsObject.h
index 6653026f28a..53486cecf73 100644
--- a/source/gameengine/Ketsji/KX_ConvertPhysicsObject.h
+++ b/source/gameengine/Ketsji/KX_ConvertPhysicsObject.h
@@ -75,6 +75,7 @@ struct KX_CBounds
struct KX_ObjectProperties
{
bool m_dyna;
+ bool m_softbody;
double m_radius;
bool m_angular_rigidbody;
bool m_in_active_layer;
@@ -86,6 +87,47 @@ struct KX_ObjectProperties
bool m_disableSleeping;
bool m_hasCompoundChildren;
bool m_isCompoundChild;
+
+ /////////////////////////
+
+ int m_gamesoftFlag;
+ float m_soft_linStiff; /* linear stiffness 0..1 */
+ float m_soft_angStiff; /* angular stiffness 0..1 */
+ float m_soft_volume; /* volume preservation 0..1 */
+
+ int m_soft_viterations; /* Velocities solver iterations */
+ int m_soft_piterations; /* Positions solver iterations */
+ int m_soft_diterations; /* Drift solver iterations */
+ int m_soft_citerations; /* Cluster solver iterations */
+
+ float m_soft_kSRHR_CL; /* Soft vs rigid hardness [0,1] (cluster only) */
+ float m_soft_kSKHR_CL; /* Soft vs kinetic hardness [0,1] (cluster only) */
+ float m_soft_kSSHR_CL; /* Soft vs soft hardness [0,1] (cluster only) */
+ float m_soft_kSR_SPLT_CL; /* Soft vs rigid impulse split [0,1] (cluster only) */
+
+ float m_soft_kSK_SPLT_CL; /* Soft vs rigid impulse split [0,1] (cluster only) */
+ float m_soft_kSS_SPLT_CL; /* Soft vs rigid impulse split [0,1] (cluster only) */
+ float m_soft_kVCF; /* Velocities correction factor (Baumgarte) */
+ float m_soft_kDP; /* Damping coefficient [0,1] */
+
+ float m_soft_kDG; /* Drag coefficient [0,+inf] */
+ float m_soft_kLF; /* Lift coefficient [0,+inf] */
+ float m_soft_kPR; /* Pressure coefficient [-inf,+inf] */
+ float m_soft_kVC; /* Volume conversation coefficient [0,+inf] */
+
+ float m_soft_kDF; /* Dynamic friction coefficient [0,1] */
+ float m_soft_kMT; /* Pose matching coefficient [0,1] */
+ float m_soft_kCHR; /* Rigid contacts hardness [0,1] */
+ float m_soft_kKHR; /* Kinetic contacts hardness [0,1] */
+
+ float m_soft_kSHR; /* Soft contacts hardness [0,1] */
+ float m_soft_kAHR; /* Anchors hardness [0,1] */
+ int m_soft_collisionflags; /* Vertex/Face or Signed Distance Field(SDF) or Clusters, Soft versus Soft or Rigid */
+ int m_soft_numclusteriterations; /* number of iterations to refine collision clusters*/
+
+ /////////////////////////
+
+ double m_margin;
KX_BoundBoxClass m_boundclass;
union {
KX_BoxBounds box;
diff --git a/source/gameengine/Ketsji/KX_ConvertPhysicsObjects.cpp b/source/gameengine/Ketsji/KX_ConvertPhysicsObjects.cpp
index e0cd5a3bc9e..0e7a6d92ec1 100644
--- a/source/gameengine/Ketsji/KX_ConvertPhysicsObjects.cpp
+++ b/source/gameengine/Ketsji/KX_ConvertPhysicsObjects.cpp
@@ -38,6 +38,8 @@
#include "RAS_MeshObject.h"
#include "KX_Scene.h"
#include "SYS_System.h"
+#include "BL_SkinMeshObject.h"
+#include "BulletSoftBody/btSoftBody.h"
#include "PHY_Pro.h" //todo cleanup
#include "KX_ClientObjectInfo.h"
@@ -76,16 +78,16 @@
struct KX_PhysicsInstance
{
DT_VertexBaseHandle m_vertexbase;
- int m_vtxarray;
+ RAS_DisplayArray* m_darray;
RAS_IPolyMaterial* m_material;
-
- KX_PhysicsInstance(DT_VertexBaseHandle vertex_base, int vtxarray, RAS_IPolyMaterial* mat)
+
+ KX_PhysicsInstance(DT_VertexBaseHandle vertex_base, RAS_DisplayArray *darray, RAS_IPolyMaterial* mat)
: m_vertexbase(vertex_base),
- m_vtxarray(vtxarray),
- m_material(mat)
+ m_darray(darray),
+ m_material(mat)
{
}
-
+
~KX_PhysicsInstance()
{
DT_DeleteVertexBase(m_vertexbase);
@@ -100,11 +102,11 @@ static void BL_RegisterSumoObject(KX_GameObject* gameobj,class SM_Scene* sumoSce
static DT_ShapeHandle CreateShapeFromMesh(RAS_MeshObject* meshobj, bool polytope);
void KX_ConvertSumoObject( KX_GameObject* gameobj,
- RAS_MeshObject* meshobj,
- KX_Scene* kxscene,
- PHY_ShapeProps* kxshapeprops,
- PHY_MaterialProps* kxmaterial,
- struct KX_ObjectProperties* objprop)
+ RAS_MeshObject* meshobj,
+ KX_Scene* kxscene,
+ PHY_ShapeProps* kxshapeprops,
+ PHY_MaterialProps* kxmaterial,
+ struct KX_ObjectProperties* objprop)
{
@@ -150,23 +152,23 @@ void KX_ConvertSumoObject( KX_GameObject* gameobj,
objprop->m_boundobject.box.m_extends[1],
objprop->m_boundobject.box.m_extends[2]);
smprop->m_inertia.scale(objprop->m_boundobject.box.m_extends[0]*objprop->m_boundobject.box.m_extends[0],
- objprop->m_boundobject.box.m_extends[1]*objprop->m_boundobject.box.m_extends[1],
- objprop->m_boundobject.box.m_extends[2]*objprop->m_boundobject.box.m_extends[2]);
+ objprop->m_boundobject.box.m_extends[1]*objprop->m_boundobject.box.m_extends[1],
+ objprop->m_boundobject.box.m_extends[2]*objprop->m_boundobject.box.m_extends[2]);
smprop->m_inertia *= smprop->m_mass/MT_Vector3(objprop->m_boundobject.box.m_extends).length();
break;
case KX_BOUNDCYLINDER:
shape = DT_NewCylinder(smprop->m_radius, objprop->m_boundobject.c.m_height);
smprop->m_inertia.scale(smprop->m_mass*smprop->m_radius*smprop->m_radius,
- smprop->m_mass*smprop->m_radius*smprop->m_radius,
- smprop->m_mass*objprop->m_boundobject.c.m_height*objprop->m_boundobject.c.m_height);
+ smprop->m_mass*smprop->m_radius*smprop->m_radius,
+ smprop->m_mass*objprop->m_boundobject.c.m_height*objprop->m_boundobject.c.m_height);
break;
case KX_BOUNDCONE:
shape = DT_NewCone(objprop->m_radius, objprop->m_boundobject.c.m_height);
smprop->m_inertia.scale(smprop->m_mass*smprop->m_radius*smprop->m_radius,
- smprop->m_mass*smprop->m_radius*smprop->m_radius,
- smprop->m_mass*objprop->m_boundobject.c.m_height*objprop->m_boundobject.c.m_height);
+ smprop->m_mass*smprop->m_radius*smprop->m_radius,
+ smprop->m_mass*objprop->m_boundobject.c.m_height*objprop->m_boundobject.c.m_height);
break;
- /* Dynamic mesh objects. WARNING! slow. */
+ /* Dynamic mesh objects. WARNING! slow. */
case KX_BOUNDPOLYTOPE:
polytope = true;
// fall through
@@ -186,15 +188,15 @@ void KX_ConvertSumoObject( KX_GameObject* gameobj,
shape = DT_NewSphere(objprop->m_radius);
smprop->m_inertia *= smprop->m_mass*smprop->m_radius*smprop->m_radius;
break;
-
+
}
-
+
sumoObj = new SM_Object(shape, !objprop->m_ghost?smmaterial:NULL,smprop,NULL);
-
+
sumoObj->setRigidBody(objprop->m_angular_rigidbody?true:false);
-
+
BL_RegisterSumoObject(gameobj,sceneptr,sumoObj,"",true, true);
-
+
}
else {
// non physics object
@@ -320,12 +322,11 @@ static void BL_RegisterSumoObject(
physicscontroller->SetObject(gameobj->GetSGNode());
}
-static DT_ShapeHandle InstancePhysicsComplex(RAS_MeshObject* meshobj, int vtxarray, RAS_IPolyMaterial *mat)
+static DT_ShapeHandle InstancePhysicsComplex(RAS_MeshObject* meshobj, RAS_DisplayArray *darray, RAS_IPolyMaterial *mat)
{
// instance a mesh from a single vertex array & material
- const RAS_TexVert *vertex_array = &((*meshobj->GetVertexCache(mat)[vtxarray])[0]);
- //const KX_IndexArray &index_array = *meshobj->GetIndexCache(mat)[vtxarray];
- DT_VertexBaseHandle vertex_base = DT_NewVertexBase(vertex_array[0].getLocalXYZ(), sizeof(RAS_TexVert));
+ const RAS_TexVert *vertex_array = &darray->m_vertex[0];
+ DT_VertexBaseHandle vertex_base = DT_NewVertexBase(vertex_array[0].getXYZ(), sizeof(RAS_TexVert));
DT_ShapeHandle shape = DT_NewComplexShape(vertex_base);
@@ -337,15 +338,19 @@ static DT_ShapeHandle InstancePhysicsComplex(RAS_MeshObject* meshobj, int vtxarr
// only add polygons that have the collisionflag set
if (poly->IsCollider())
{
- DT_VertexIndices(3, poly->GetVertexIndexBase().m_indexarray);
+ DT_Begin();
+ DT_VertexIndex(poly->GetVertexOffset(0));
+ DT_VertexIndex(poly->GetVertexOffset(1));
+ DT_VertexIndex(poly->GetVertexOffset(2));
+ DT_End();
// tesselate
if (poly->VertexCount() == 4)
{
DT_Begin();
- DT_VertexIndex(poly->GetVertexIndexBase().m_indexarray[0]);
- DT_VertexIndex(poly->GetVertexIndexBase().m_indexarray[2]);
- DT_VertexIndex(poly->GetVertexIndexBase().m_indexarray[3]);
+ DT_VertexIndex(poly->GetVertexOffset(0));
+ DT_VertexIndex(poly->GetVertexOffset(2));
+ DT_VertexIndex(poly->GetVertexOffset(3));
DT_End();
}
}
@@ -354,16 +359,15 @@ static DT_ShapeHandle InstancePhysicsComplex(RAS_MeshObject* meshobj, int vtxarr
//DT_VertexIndices(indices.size(), &indices[0]);
DT_EndComplexShape();
- map_gamemesh_to_instance.insert(GEN_HashedPtr(meshobj), new KX_PhysicsInstance(vertex_base, vtxarray, mat));
+ map_gamemesh_to_instance.insert(GEN_HashedPtr(meshobj), new KX_PhysicsInstance(vertex_base, darray, mat));
return shape;
}
-static DT_ShapeHandle InstancePhysicsPolytope(RAS_MeshObject* meshobj, int vtxarray, RAS_IPolyMaterial *mat)
+static DT_ShapeHandle InstancePhysicsPolytope(RAS_MeshObject* meshobj, RAS_DisplayArray *darray, RAS_IPolyMaterial *mat)
{
// instance a mesh from a single vertex array & material
- const RAS_TexVert *vertex_array = &((*meshobj->GetVertexCache(mat)[vtxarray])[0]);
- //const KX_IndexArray &index_array = *meshobj->GetIndexCache(mat)[vtxarray];
- DT_VertexBaseHandle vertex_base = DT_NewVertexBase(vertex_array[0].getLocalXYZ(), sizeof(RAS_TexVert));
+ const RAS_TexVert *vertex_array = &darray->m_vertex[0];
+ DT_VertexBaseHandle vertex_base = DT_NewVertexBase(vertex_array[0].getXYZ(), sizeof(RAS_TexVert));
std::vector<DT_Index> indices;
for (int p = 0; p < meshobj->NumPolygons(); p++)
@@ -373,12 +377,12 @@ static DT_ShapeHandle InstancePhysicsPolytope(RAS_MeshObject* meshobj, int vtxar
// only add polygons that have the collisionflag set
if (poly->IsCollider())
{
- indices.push_back(poly->GetVertexIndexBase().m_indexarray[0]);
- indices.push_back(poly->GetVertexIndexBase().m_indexarray[1]);
- indices.push_back(poly->GetVertexIndexBase().m_indexarray[2]);
+ indices.push_back(poly->GetVertexOffset(0));
+ indices.push_back(poly->GetVertexOffset(1));
+ indices.push_back(poly->GetVertexOffset(2));
if (poly->VertexCount() == 4)
- indices.push_back(poly->GetVertexIndexBase().m_indexarray[3]);
+ indices.push_back(poly->GetVertexOffset(3));
}
}
@@ -386,7 +390,7 @@ static DT_ShapeHandle InstancePhysicsPolytope(RAS_MeshObject* meshobj, int vtxar
DT_VertexIndices(indices.size(), &indices[0]);
DT_EndPolytope();
- map_gamemesh_to_instance.insert(GEN_HashedPtr(meshobj), new KX_PhysicsInstance(vertex_base, vtxarray, mat));
+ map_gamemesh_to_instance.insert(GEN_HashedPtr(meshobj), new KX_PhysicsInstance(vertex_base, darray, mat));
return shape;
}
@@ -398,8 +402,8 @@ bool KX_ReInstanceShapeFromMesh(RAS_MeshObject* meshobj)
KX_PhysicsInstance *instance = *map_gamemesh_to_instance[GEN_HashedPtr(meshobj)];
if (instance)
{
- const RAS_TexVert *vertex_array = &((*meshobj->GetVertexCache(instance->m_material)[instance->m_vtxarray])[0]);
- DT_ChangeVertexBase(instance->m_vertexbase, vertex_array[0].getLocalXYZ());
+ const RAS_TexVert *vertex_array = &instance->m_darray->m_vertex[0];
+ DT_ChangeVertexBase(instance->m_vertexbase, vertex_array[0].getXYZ());
return true;
}
return false;
@@ -425,7 +429,7 @@ static DT_ShapeHandle CreateShapeFromMesh(RAS_MeshObject* meshobj, bool polytope
// Count the number of collision polygons and check they all come from the same
// vertex array
int numvalidpolys = 0;
- int vtxarray = -1;
+ RAS_DisplayArray *darray = NULL;
RAS_IPolyMaterial *poly_material = NULL;
bool reinstance = true;
@@ -437,14 +441,14 @@ static DT_ShapeHandle CreateShapeFromMesh(RAS_MeshObject* meshobj, bool polytope
if (poly->IsCollider())
{
// check polygon is from the same vertex array
- if (poly->GetVertexIndexBase().m_vtxarray != vtxarray)
+ if (poly->GetDisplayArray() != darray)
{
- if (vtxarray < 0)
- vtxarray = poly->GetVertexIndexBase().m_vtxarray;
+ if (darray == NULL)
+ darray = poly->GetDisplayArray();
else
{
reinstance = false;
- vtxarray = -1;
+ darray = NULL;
}
}
@@ -478,9 +482,9 @@ static DT_ShapeHandle CreateShapeFromMesh(RAS_MeshObject* meshobj, bool polytope
if (reinstance)
{
if (polytope)
- shape = InstancePhysicsPolytope(meshobj, vtxarray, poly_material);
+ shape = InstancePhysicsPolytope(meshobj, darray, poly_material);
else
- shape = InstancePhysicsComplex(meshobj, vtxarray, poly_material);
+ shape = InstancePhysicsComplex(meshobj, darray, poly_material);
}
else
{
@@ -489,7 +493,7 @@ static DT_ShapeHandle CreateShapeFromMesh(RAS_MeshObject* meshobj, bool polytope
std::cout << "CreateShapeFromMesh: " << meshobj->GetName() << " is not suitable for polytope." << std::endl;
if (!poly_material)
std::cout << " Check mesh materials." << std::endl;
- if (vtxarray < 0)
+ if (darray == NULL)
std::cout << " Check number of vertices." << std::endl;
}
@@ -505,18 +509,10 @@ static DT_ShapeHandle CreateShapeFromMesh(RAS_MeshObject* meshobj, bool polytope
if (poly->IsCollider())
{ /* We have to tesselate here because SOLID can only raycast triangles */
DT_Begin();
- /* V1 */
- DT_Vertex(meshobj->GetVertex(poly->GetVertexIndexBase().m_vtxarray,
- poly->GetVertexIndexBase().m_indexarray[2],
- poly->GetMaterial()->GetPolyMaterial())->getLocalXYZ());
- /* V2 */
- DT_Vertex(meshobj->GetVertex(poly->GetVertexIndexBase().m_vtxarray,
- poly->GetVertexIndexBase().m_indexarray[1],
- poly->GetMaterial()->GetPolyMaterial())->getLocalXYZ());
- /* V3 */
- DT_Vertex(meshobj->GetVertex(poly->GetVertexIndexBase().m_vtxarray,
- poly->GetVertexIndexBase().m_indexarray[0],
- poly->GetMaterial()->GetPolyMaterial())->getLocalXYZ());
+ /* V1, V2, V3 */
+ DT_Vertex(poly->GetVertex(2)->getXYZ());
+ DT_Vertex(poly->GetVertex(1)->getXYZ());
+ DT_Vertex(poly->GetVertex(0)->getXYZ());
numvalidpolys++;
DT_End();
@@ -524,18 +520,10 @@ static DT_ShapeHandle CreateShapeFromMesh(RAS_MeshObject* meshobj, bool polytope
if (poly->VertexCount() == 4)
{
DT_Begin();
- /* V1 */
- DT_Vertex(meshobj->GetVertex(poly->GetVertexIndexBase().m_vtxarray,
- poly->GetVertexIndexBase().m_indexarray[3],
- poly->GetMaterial()->GetPolyMaterial())->getLocalXYZ());
- /* V3 */
- DT_Vertex(meshobj->GetVertex(poly->GetVertexIndexBase().m_vtxarray,
- poly->GetVertexIndexBase().m_indexarray[2],
- poly->GetMaterial()->GetPolyMaterial())->getLocalXYZ());
- /* V4 */
- DT_Vertex(meshobj->GetVertex(poly->GetVertexIndexBase().m_vtxarray,
- poly->GetVertexIndexBase().m_indexarray[0],
- poly->GetMaterial()->GetPolyMaterial())->getLocalXYZ());
+ /* V1, V3, V4 */
+ DT_Vertex(poly->GetVertex(3)->getXYZ());
+ DT_Vertex(poly->GetVertex(2)->getXYZ());
+ DT_Vertex(poly->GetVertex(0)->getXYZ());
numvalidpolys++;
DT_End();
@@ -679,189 +667,107 @@ void KX_ConvertODEEngineObject(KX_GameObject* gameobj,
#endif //WIN32
-// forward declarations
-static btCollisionShape* CreateBulletShapeFromMesh(RAS_MeshObject* meshobj, bool polytope)
-{
- if (!meshobj)
- return 0;
-
- btCollisionShape* collisionMeshShape = 0;
- btConvexHullShape* convexHullShape = 0;
- btTriangleMeshShape* concaveShape = 0;
-
- btTriangleMesh* collisionMeshData = 0;
-
- //see if there is any polygons, if not, bail out.
-
- int numPoints = 0;
- btVector3* points = 0;
-
- // Mesh has no polygons!
- int numpolys = meshobj->NumPolygons();
- if (!numpolys)
+
+ class KX_SoftBodyDeformer : public RAS_Deformer
{
- return NULL;
- }
+ class RAS_MeshObject* m_pMeshObject;
+ class KX_GameObject* m_gameobj;
- // Count the number of collision polygons and check they all come from the same
- // vertex array
- int numvalidpolys = 0;
- int vtxarray = -1;
- RAS_IPolyMaterial *poly_material = NULL;
- bool reinstance = true;
-
- for (int p=0; p<numpolys; p++)
- {
- RAS_Polygon* poly = meshobj->GetPolygon(p);
-
- // only add polygons that have the collisionflag set
- if (poly->IsCollider())
+ public:
+ KX_SoftBodyDeformer(RAS_MeshObject* pMeshObject,KX_GameObject* gameobj)
+ :m_pMeshObject(pMeshObject),
+ m_gameobj(gameobj)
{
- // check polygon is from the same vertex array
- if (poly->GetVertexIndexBase().m_vtxarray != vtxarray)
- {
- if (vtxarray < 0)
- vtxarray = poly->GetVertexIndexBase().m_vtxarray;
- else
- {
- reinstance = false;
- vtxarray = -1;
- }
- }
-
- // check poly is from the same material
- if (poly->GetMaterial()->GetPolyMaterial() != poly_material)
- {
- if (poly_material)
- {
- reinstance = false;
- poly_material = NULL;
- }
- else
- poly_material = poly->GetMaterial()->GetPolyMaterial();
- }
-
- // count the number of collision polys
- numvalidpolys++;
+ //printf("KX_SoftBodyDeformer\n");
+ };
- // We have one collision poly, and we can't reinstance, so we
- // might as well break here.
- if (!reinstance)
- break;
+ virtual ~KX_SoftBodyDeformer()
+ {
+ //printf("~KX_SoftBodyDeformer\n");
+ };
+ virtual void Relink(GEN_Map<class GEN_HashedPtr, void*>*map)
+ {
+ //printf("relink\n");
}
- }
+ virtual bool Apply(class RAS_IPolyMaterial *polymat)
+ {
+ KX_BulletPhysicsController* ctrl = (KX_BulletPhysicsController*) m_gameobj->GetPhysicsController();
+ if (!ctrl)
+ return false;
- // No collision polygons
- if (numvalidpolys < 1)
- return NULL;
+ btSoftBody* softBody= ctrl->GetSoftBody();
+ if (!softBody)
+ return false;
+ //printf("apply\n");
+ RAS_MeshSlot::iterator it;
+ RAS_MeshMaterial *mmat;
+ RAS_MeshSlot *slot;
+ size_t i;
- if (polytope)
- {
- convexHullShape = new btConvexHullShape(&points[0].getX(),numPoints);
- collisionMeshShape = convexHullShape;
- } else
- {
- collisionMeshData = new btTriangleMesh();
-// concaveShape = new btTriangleMeshShape(collisionMeshData);
- //collisionMeshShape = concaveShape;
-
- }
+ // update the vertex in m_transverts
+ Update();
- numvalidpolys = 0;
- for (int p2=0; p2<numpolys; p2++)
- {
- RAS_Polygon* poly = meshobj->GetPolygon(p2);
+ // The vertex cache can only be updated for this deformer:
+ // Duplicated objects with more than one ploymaterial (=multiple mesh slot per object)
+ // share the same mesh (=the same cache). As the rendering is done per polymaterial
+ // cycling through the objects, the entire mesh cache cannot be updated in one shot.
+ mmat = m_pMeshObject->GetMeshMaterial(polymat);
+ if(!mmat->m_slots[(void*)m_gameobj])
+ return true;
- // only add polygons that have the collisionflag set
- if (poly->IsCollider())
- {
- //Bullet can raycast any shape, so
- if (polytope)
- {
- for (int i=0;i<poly->VertexCount();i++)
- {
- const float* vtx = meshobj->GetVertex(poly->GetVertexIndexBase().m_vtxarray,
- poly->GetVertexIndexBase().m_indexarray[i],
- poly->GetMaterial()->GetPolyMaterial())->getLocalXYZ();
- btPoint3 point(vtx[0],vtx[1],vtx[2]);
- convexHullShape->addPoint(point);
- }
- if (poly->VertexCount())
- numvalidpolys++;
+ slot = *mmat->m_slots[(void*)m_gameobj];
- } else
+ // for each array
+ for(slot->begin(it); !slot->end(it); slot->next(it))
{
- {
- const float* vtx = meshobj->GetVertex(poly->GetVertexIndexBase().m_vtxarray,
- poly->GetVertexIndexBase().m_indexarray[2],
- poly->GetMaterial()->GetPolyMaterial())->getLocalXYZ();
- btPoint3 vertex0(vtx[0],vtx[1],vtx[2]);
- vtx = meshobj->GetVertex(poly->GetVertexIndexBase().m_vtxarray,
- poly->GetVertexIndexBase().m_indexarray[1],
- poly->GetMaterial()->GetPolyMaterial())->getLocalXYZ();
- btPoint3 vertex1(vtx[0],vtx[1],vtx[2]);
- vtx = meshobj->GetVertex(poly->GetVertexIndexBase().m_vtxarray,
- poly->GetVertexIndexBase().m_indexarray[0],
- poly->GetMaterial()->GetPolyMaterial())->getLocalXYZ();
- btPoint3 vertex2(vtx[0],vtx[1],vtx[2]);
- collisionMeshData->addTriangle(vertex0,vertex1,vertex2);
- numvalidpolys++;
- }
- if (poly->VertexCount() == 4)
- {
- const float* vtx = meshobj->GetVertex(poly->GetVertexIndexBase().m_vtxarray,
- poly->GetVertexIndexBase().m_indexarray[3],
- poly->GetMaterial()->GetPolyMaterial())->getLocalXYZ();
- btPoint3 vertex0(vtx[0],vtx[1],vtx[2]);
- vtx = meshobj->GetVertex(poly->GetVertexIndexBase().m_vtxarray,
- poly->GetVertexIndexBase().m_indexarray[2],
- poly->GetMaterial()->GetPolyMaterial())->getLocalXYZ();
- btPoint3 vertex1(vtx[0],vtx[1],vtx[2]);
- vtx = meshobj->GetVertex(poly->GetVertexIndexBase().m_vtxarray,
- poly->GetVertexIndexBase().m_indexarray[0],
- poly->GetMaterial()->GetPolyMaterial())->getLocalXYZ();
- btPoint3 vertex2(vtx[0],vtx[1],vtx[2]);
- collisionMeshData->addTriangle(vertex0,vertex1,vertex2);
- numvalidpolys++;
- }
+ btSoftBody::tNodeArray& nodes(softBody->m_nodes);
- }
- }
- }
+ int index = 0;
+ for(i=it.startvertex; i<it.endvertex; i++,index++) {
+ RAS_TexVert& v = it.vertex[i];
+ btAssert(v.getSoftBodyIndex() >= 0);
+ MT_Point3 pt (
+ nodes[v.getSoftBodyIndex()].m_x.getX(),
+ nodes[v.getSoftBodyIndex()].m_x.getY(),
+ nodes[v.getSoftBodyIndex()].m_x.getZ());
+ v.SetXYZ(pt);
+ MT_Vector3 normal (
+ nodes[v.getSoftBodyIndex()].m_n.getX(),
+ nodes[v.getSoftBodyIndex()].m_n.getY(),
+ nodes[v.getSoftBodyIndex()].m_n.getZ());
+ v.SetNormal(normal);
- if (numvalidpolys > 0)
- {
-
- if (!polytope)
+ }
+ }
+ return true;
+ }
+ virtual bool Update(void)
{
- bool useQuantization = true;
- concaveShape = new btBvhTriangleMeshShape( collisionMeshData, useQuantization );
- //concaveShape = new btTriangleMeshShape( collisionMeshData );
-
- concaveShape->recalcLocalAabb();
- if (collisionMeshShape)
- delete collisionMeshShape;
- collisionMeshShape = concaveShape;
+ //printf("update\n");
+ return true;//??
+ }
+ virtual RAS_Deformer *GetReplica(class KX_GameObject* replica)
+ {
+ KX_SoftBodyDeformer* deformer = new KX_SoftBodyDeformer(replica->GetMesh(0),replica);
+ return deformer;
+ }
- }
-
-
+ virtual bool SkipVertexTransform()
+ {
+ return true;
+ }
- return collisionMeshShape;
- }
- if (collisionMeshShape)
- delete collisionMeshShape;
- if (collisionMeshData)
- delete collisionMeshData;
- return NULL;
+ protected:
+ //class RAS_MeshObject *m_pMesh;
+ };
-}
+// forward declarations
void KX_ConvertBulletObject( class KX_GameObject* gameobj,
class RAS_MeshObject* meshobj,
@@ -878,6 +784,7 @@ void KX_ConvertBulletObject( class KX_GameObject* gameobj,
bool isbulletdyna = false;
CcdConstructionInfo ci;
class PHY_IMotionState* motionstate = new KX_MotionState(gameobj->GetSGNode());
+ class CcdShapeConstructionInfo *shapeInfo = new CcdShapeConstructionInfo();
@@ -894,120 +801,99 @@ void KX_ConvertBulletObject( class KX_GameObject* gameobj,
ci.m_gravity = btVector3(0,0,0);
ci.m_localInertiaTensor =btVector3(0,0,0);
ci.m_mass = objprop->m_dyna ? shapeprops->m_mass : 0.f;
+ ci.m_margin = objprop->m_margin;
+ shapeInfo->m_radius = objprop->m_radius;
isbulletdyna = objprop->m_dyna;
ci.m_localInertiaTensor = btVector3(ci.m_mass/3.f,ci.m_mass/3.f,ci.m_mass/3.f);
- btTransform trans;
- trans.setIdentity();
-
btCollisionShape* bm = 0;
switch (objprop->m_boundclass)
{
case KX_BOUNDSPHERE:
{
- float radius = objprop->m_radius;
- btVector3 inertiaHalfExtents (
- radius,
- radius,
- radius);
+ //float radius = objprop->m_radius;
+ //btVector3 inertiaHalfExtents (
+ // radius,
+ // radius,
+ // radius);
//blender doesn't support multisphere, but for testing:
//bm = new MultiSphereShape(inertiaHalfExtents,,&trans.getOrigin(),&radius,1);
- bm = new btSphereShape(objprop->m_radius);
- bm->calculateLocalInertia(ci.m_mass,ci.m_localInertiaTensor);
+ shapeInfo->m_shapeType = PHY_SHAPE_SPHERE;
+ bm = shapeInfo->CreateBulletShape();
break;
};
case KX_BOUNDBOX:
{
- MT_Vector3 halfExtents (
+ shapeInfo->m_halfExtend.setValue(
objprop->m_boundobject.box.m_extends[0],
- objprop->m_boundobject.box.m_extends[1],
- objprop->m_boundobject.box.m_extends[2]);
-
- halfExtents /= 2.f;
-
- //btVector3 he (halfExtents[0]-CONVEX_DISTANCE_MARGIN ,halfExtents[1]-CONVEX_DISTANCE_MARGIN ,halfExtents[2]-CONVEX_DISTANCE_MARGIN );
- //he = he.absolute();
-
- btVector3 he (halfExtents[0],halfExtents[1],halfExtents[2]);
- he = he.absolute();
-
+ objprop->m_boundobject.box.m_extends[1],
+ objprop->m_boundobject.box.m_extends[2]);
- bm = new btBoxShape(he);
- bm->calculateLocalInertia(ci.m_mass,ci.m_localInertiaTensor);
+ shapeInfo->m_halfExtend /= 2.0;
+ shapeInfo->m_halfExtend = shapeInfo->m_halfExtend.absolute();
+ shapeInfo->m_shapeType = PHY_SHAPE_BOX;
+ bm = shapeInfo->CreateBulletShape();
break;
};
case KX_BOUNDCYLINDER:
{
- btVector3 halfExtents (
+ shapeInfo->m_halfExtend.setValue(
objprop->m_boundobject.c.m_radius,
objprop->m_boundobject.c.m_radius,
objprop->m_boundobject.c.m_height * 0.5f
);
- bm = new btCylinderShapeZ(halfExtents);
- bm->calculateLocalInertia(ci.m_mass,ci.m_localInertiaTensor);
-
+ shapeInfo->m_shapeType = PHY_SHAPE_CYLINDER;
+ bm = shapeInfo->CreateBulletShape();
break;
}
- case KX_BOUNDCONE:
+ case KX_BOUNDCONE:
{
- btVector3 halfExtents (objprop->m_boundobject.box.m_extends[0],
- objprop->m_boundobject.box.m_extends[1],
- objprop->m_boundobject.box.m_extends[2]);
-
-
- halfExtents /= 2.f;
-
- bm = new btConeShapeZ(objprop->m_boundobject.c.m_radius,objprop->m_boundobject.c.m_height);
- bm->calculateLocalInertia(ci.m_mass,ci.m_localInertiaTensor);
-
+ shapeInfo->m_radius = objprop->m_boundobject.c.m_radius;
+ shapeInfo->m_height = objprop->m_boundobject.c.m_height;
+ shapeInfo->m_shapeType = PHY_SHAPE_CONE;
+ bm = shapeInfo->CreateBulletShape();
break;
}
- case KX_BOUNDPOLYTOPE:
- {
- bm = CreateBulletShapeFromMesh(meshobj,true);
- if (bm)
+ case KX_BOUNDPOLYTOPE:
+ {
+ shapeInfo->SetMesh(meshobj, true,false);
+ bm = shapeInfo->CreateBulletShape();
+ break;
+ }
+ case KX_BOUNDMESH:
+ {
+
+ if (!ci.m_mass ||objprop->m_softbody)
+ {
+ // mesh shapes can be shared, check first if we already have a shape on that mesh
+ class CcdShapeConstructionInfo *sharedShapeInfo = CcdShapeConstructionInfo::FindMesh(meshobj, false);
+ if (sharedShapeInfo != NULL)
{
- bm->calculateLocalInertia(ci.m_mass,ci.m_localInertiaTensor);
- }
- break;
- }
- case KX_BOUNDMESH:
- {
- if (!ci.m_mass)
- {
- bm = CreateBulletShapeFromMesh(meshobj,false);
- ci.m_localInertiaTensor.setValue(0.f,0.f,0.f);
- //no moving concave meshes, so don't bother calculating inertia
- //bm->calculateLocalInertia(ci.m_mass,ci.m_localInertiaTensor);
+ delete shapeInfo;
+ shapeInfo = sharedShapeInfo;
+ shapeInfo->AddRef();
+ } else
+ {
+ shapeInfo->SetMesh(meshobj, false,false);
}
+ if (objprop->m_softbody)
+ shapeInfo->setVertexWeldingThreshold(0.01f); //todo: expose this to the UI
- break;
- }
-
- default:
- //interpret the shape as a concave triangle-mesh
- {
- if (meshobj)
+ bm = shapeInfo->CreateBulletShape();
+ //no moving concave meshes, so don't bother calculating inertia
+ //bm->calculateLocalInertia(ci.m_mass,ci.m_localInertiaTensor);
+ } else
{
- bm = CreateBulletShapeFromMesh(meshobj,false);
- ci.m_localInertiaTensor.setValue(0.f,0.f,0.f);
-
- // assert(0);
-
- /*
- meshobj->ScheduleCollisionPolygons();
-
- KX_DeformableMesh* gfxmesh = new KX_DeformableMesh(meshobj);
- gfxmesh->sendFixedMapping();
- //trianglemesh
- bm = new TriangleMeshInterface(gfxmesh,trans);
- */
+ shapeInfo->SetMesh(meshobj, false,true);
+ bm = shapeInfo->CreateBulletShape();
}
+
+ break;
}
}
@@ -1017,11 +903,11 @@ void KX_ConvertBulletObject( class KX_GameObject* gameobj,
if (!bm)
{
delete motionstate;
+ delete shapeInfo;
return;
}
- bm->setMargin(0.06);
-
+ bm->setMargin(ci.m_margin);
if (objprop->m_isCompoundChild)
@@ -1030,31 +916,46 @@ void KX_ConvertBulletObject( class KX_GameObject* gameobj,
//take relative transform into account!
KX_BulletPhysicsController* parentCtrl = (KX_BulletPhysicsController*)objprop->m_dynamic_parent->GetPhysicsController();
assert(parentCtrl);
+ CcdShapeConstructionInfo* parentShapeInfo = parentCtrl->GetShapeInfo();
btRigidBody* rigidbody = parentCtrl->GetRigidBody();
btCollisionShape* colShape = rigidbody->getCollisionShape();
assert(colShape->isCompound());
btCompoundShape* compoundShape = (btCompoundShape*)colShape;
- btTransform childTrans;
- childTrans.setIdentity();
- NodeList& children = objprop->m_dynamic_parent->GetSGNode()->GetSGChildren();
- MT_Point3 childPos = gameobj->GetSGNode()->GetLocalPosition();
- MT_Matrix3x3 childRot = gameobj->GetSGNode()->GetLocalOrientation();
- MT_Vector3 childScale = gameobj->GetSGNode()->GetLocalScale();
+ // compute the local transform from parent, this may include a parent inverse node
+ SG_Node* gameNode = gameobj->GetSGNode();
+ SG_Node* parentInverseNode = gameNode->GetSGParent();
+ if (parentInverseNode && parentInverseNode->GetSGClientObject() != NULL)
+ // this is not a parent inverse node, cancel it
+ parentInverseNode = NULL;
+ // now combine the parent inverse node and the game node
+ MT_Point3 childPos = gameNode->GetLocalPosition();
+ MT_Matrix3x3 childRot = gameNode->GetLocalOrientation();
+ MT_Vector3 childScale = gameNode->GetLocalScale();
+ if (parentInverseNode)
+ {
+ const MT_Point3& parentInversePos = parentInverseNode->GetLocalPosition();
+ const MT_Matrix3x3& parentInverseRot = parentInverseNode->GetLocalOrientation();
+ const MT_Vector3& parentInverseScale = parentInverseNode->GetLocalScale();
+ childRot = parentInverseRot * childRot;
+ childScale = parentInverseScale * childScale;
+ childPos = parentInversePos+parentInverseScale*(parentInverseRot*childPos);
+ }
- bm->setLocalScaling(btVector3(childScale.x(),childScale.y(),childScale.z()));
- childTrans.setOrigin(btVector3(childPos.x(),childPos.y(),childPos.z()));
+ shapeInfo->m_childScale.setValue(childScale.x(),childScale.y(),childScale.z());
+ bm->setLocalScaling(shapeInfo->m_childScale);
+
+ shapeInfo->m_childTrans.setOrigin(btVector3(childPos.x(),childPos.y(),childPos.z()));
float rotval[12];
childRot.getValue(rotval);
btMatrix3x3 newRot;
newRot.setValue(rotval[0],rotval[1],rotval[2],rotval[4],rotval[5],rotval[6],rotval[8],rotval[9],rotval[10]);
newRot = newRot.transpose();
- childTrans.setBasis(newRot);
-
-
- compoundShape->addChildShape(childTrans,bm);
- kxscene->AddShape(bm);
+ shapeInfo->m_childTrans.setBasis(newRot);
+ parentShapeInfo->AddShape(shapeInfo);
+
+ compoundShape->addChildShape(shapeInfo->m_childTrans,bm);
//do some recalc?
//recalc inertia for rigidbody
if (!rigidbody->isStaticOrKinematicObject())
@@ -1069,15 +970,16 @@ void KX_ConvertBulletObject( class KX_GameObject* gameobj,
if (objprop->m_hasCompoundChildren)
{
- //replace shape by compoundShape
+ // create a compound shape info
+ CcdShapeConstructionInfo *compoundShapeInfo = new CcdShapeConstructionInfo();
+ compoundShapeInfo->m_shapeType = PHY_SHAPE_COMPOUND;
+ compoundShapeInfo->AddShape(shapeInfo);
+ // create the compound shape manually as we already have the child shape
btCompoundShape* compoundShape = new btCompoundShape();
- btTransform identTrans;
- identTrans.setIdentity();
- compoundShape->addChildShape(identTrans,bm);
- //note abount compoundShape: Bullet does not delete the child shapes when
- //the compound shape is deleted, so insert also the child shapes
- kxscene->AddShape(bm);
+ compoundShape->addChildShape(shapeInfo->m_childTrans,bm);
+ // now replace the shape
bm = compoundShape;
+ shapeInfo = compoundShapeInfo;
}
@@ -1113,6 +1015,7 @@ void KX_ConvertBulletObject( class KX_GameObject* gameobj,
ci.m_collisionShape = bm;
+ ci.m_shapeInfo = shapeInfo;
ci.m_friction = smmaterial->m_friction;//tweak the friction a bit, so the default 0.5 works nice
ci.m_restitution = smmaterial->m_restitution;
ci.m_physicsEnv = env;
@@ -1121,12 +1024,70 @@ void KX_ConvertBulletObject( class KX_GameObject* gameobj,
ci.m_angularDamping = 1.f - shapeprops->m_ang_drag;
//need a bit of damping, else system doesn't behave well
ci.m_inertiaFactor = shapeprops->m_inertia/0.4f;//defaults to 0.4, don't want to change behaviour
+
+ ci.m_do_anisotropic = shapeprops->m_do_anisotropic;
+ ci.m_anisotropicFriction.setValue(shapeprops->m_friction_scaling[0],shapeprops->m_friction_scaling[1],shapeprops->m_friction_scaling[2]);
+
+
+//////////
+ //do Fh, do Rot Fh
+ ci.m_do_fh = shapeprops->m_do_fh;
+ ci.m_do_rot_fh = shapeprops->m_do_rot_fh ;
+ ci.m_fh_damping = smmaterial->m_fh_damping;
+ ci.m_fh_distance = smmaterial->m_fh_distance;
+ ci.m_fh_normal = smmaterial->m_fh_normal;
+ ci.m_fh_spring = smmaterial->m_fh_spring;
+ ci.m_radius = objprop->m_radius;
+
+
+ ///////////////////
+ ci.m_gamesoftFlag = objprop->m_gamesoftFlag;
+ ci.m_soft_linStiff = objprop->m_soft_linStiff;
+ ci.m_soft_angStiff = objprop->m_soft_angStiff; /* angular stiffness 0..1 */
+ ci.m_soft_volume= objprop->m_soft_volume; /* volume preservation 0..1 */
+
+ ci.m_soft_viterations= objprop->m_soft_viterations; /* Velocities solver iterations */
+ ci.m_soft_piterations= objprop->m_soft_piterations; /* Positions solver iterations */
+ ci.m_soft_diterations= objprop->m_soft_diterations; /* Drift solver iterations */
+ ci.m_soft_citerations= objprop->m_soft_citerations; /* Cluster solver iterations */
+
+ ci.m_soft_kSRHR_CL= objprop->m_soft_kSRHR_CL; /* Soft vs rigid hardness [0,1] (cluster only) */
+ ci.m_soft_kSKHR_CL= objprop->m_soft_kSKHR_CL; /* Soft vs kinetic hardness [0,1] (cluster only) */
+ ci.m_soft_kSSHR_CL= objprop->m_soft_kSSHR_CL; /* Soft vs soft hardness [0,1] (cluster only) */
+ ci.m_soft_kSR_SPLT_CL= objprop->m_soft_kSR_SPLT_CL; /* Soft vs rigid impulse split [0,1] (cluster only) */
+
+ ci.m_soft_kSK_SPLT_CL= objprop->m_soft_kSK_SPLT_CL; /* Soft vs rigid impulse split [0,1] (cluster only) */
+ ci.m_soft_kSS_SPLT_CL= objprop->m_soft_kSS_SPLT_CL; /* Soft vs rigid impulse split [0,1] (cluster only) */
+ ci.m_soft_kVCF= objprop->m_soft_kVCF; /* Velocities correction factor (Baumgarte) */
+ ci.m_soft_kDP= objprop->m_soft_kDP; /* Damping coefficient [0,1] */
+
+ ci.m_soft_kDG= objprop->m_soft_kDG; /* Drag coefficient [0,+inf] */
+ ci.m_soft_kLF= objprop->m_soft_kLF; /* Lift coefficient [0,+inf] */
+ ci.m_soft_kPR= objprop->m_soft_kPR; /* Pressure coefficient [-inf,+inf] */
+ ci.m_soft_kVC= objprop->m_soft_kVC; /* Volume conversation coefficient [0,+inf] */
+
+ ci.m_soft_kDF= objprop->m_soft_kDF; /* Dynamic friction coefficient [0,1] */
+ ci.m_soft_kMT= objprop->m_soft_kMT; /* Pose matching coefficient [0,1] */
+ ci.m_soft_kCHR= objprop->m_soft_kCHR; /* Rigid contacts hardness [0,1] */
+ ci.m_soft_kKHR= objprop->m_soft_kKHR; /* Kinetic contacts hardness [0,1] */
+
+ ci.m_soft_kSHR= objprop->m_soft_kSHR; /* Soft contacts hardness [0,1] */
+ ci.m_soft_kAHR= objprop->m_soft_kAHR; /* Anchors hardness [0,1] */
+ ci.m_soft_collisionflags= objprop->m_soft_collisionflags; /* Vertex/Face or Signed Distance Field(SDF) or Clusters, Soft versus Soft or Rigid */
+ ci.m_soft_numclusteriterations= objprop->m_soft_numclusteriterations; /* number of iterations to refine collision clusters*/
+
+ ////////////////////
+
ci.m_collisionFilterGroup = (isbulletdyna) ? short(CcdConstructionInfo::DefaultFilter) : short(CcdConstructionInfo::StaticFilter);
ci.m_collisionFilterMask = (isbulletdyna) ? short(CcdConstructionInfo::AllFilter) : short(CcdConstructionInfo::AllFilter ^ CcdConstructionInfo::StaticFilter);
ci.m_bRigid = objprop->m_dyna && objprop->m_angular_rigidbody;
+ ci.m_bSoft = objprop->m_softbody;
+ MT_Vector3 scaling = gameobj->NodeGetWorldScaling();
+ ci.m_scaling.setValue(scaling[0], scaling[1], scaling[2]);
KX_BulletPhysicsController* physicscontroller = new KX_BulletPhysicsController(ci,isbulletdyna);
- //remember that we created a shape so that we can delete it when the scene is removed (bullet will not delete it)
- kxscene->AddShape(bm);
+ // shapeInfo is reference counted, decrement now as we don't use it anymore
+ if (shapeInfo)
+ shapeInfo->Release();
if (objprop->m_in_active_layer)
{
@@ -1137,10 +1098,16 @@ void KX_ConvertBulletObject( class KX_GameObject* gameobj,
gameobj->SetPhysicsController(physicscontroller,isbulletdyna);
physicscontroller->setNewClientInfo(gameobj->getClientInfo());
- btRigidBody* rbody = physicscontroller->GetRigidBody();
+ {
+ btRigidBody* rbody = physicscontroller->GetRigidBody();
+
+ if (rbody && objprop->m_disableSleeping)
+ rbody->setActivationState(DISABLE_DEACTIVATION);
+ }
+
+ CcdPhysicsController* parentCtrl = objprop->m_dynamic_parent ? (KX_BulletPhysicsController*)objprop->m_dynamic_parent->GetPhysicsController() : 0;
+ physicscontroller->setParentCtrl(parentCtrl);
- if (objprop->m_disableSleeping)
- rbody->setActivationState(DISABLE_DEACTIVATION);
//Now done directly in ci.m_collisionFlags so that it propagates to replica
//if (objprop->m_ghost)
@@ -1189,6 +1156,20 @@ void KX_ConvertBulletObject( class KX_GameObject* gameobj,
physicscontroller->SetObject(gameobj->GetSGNode());
+
+ ///test for soft bodies
+ if (objprop->m_softbody && physicscontroller)
+ {
+ btSoftBody* softBody = physicscontroller->GetSoftBody();
+ if (softBody && gameobj->GetMesh(0))//only the first mesh, if any
+ {
+ //should be a mesh then, so add a soft body deformer
+ KX_SoftBodyDeformer* softbodyDeformer = new KX_SoftBodyDeformer( gameobj->GetMesh(0),gameobj);
+ gameobj->SetDeformer(softbodyDeformer);
+
+ }
+ }
+
}
diff --git a/source/gameengine/Ketsji/KX_GameActuator.cpp b/source/gameengine/Ketsji/KX_GameActuator.cpp
index fcd32d5f4fe..76459e46731 100644
--- a/source/gameengine/Ketsji/KX_GameActuator.cpp
+++ b/source/gameengine/Ketsji/KX_GameActuator.cpp
@@ -34,6 +34,7 @@
//#include <iostream>
#include "KX_Scene.h"
#include "KX_KetsjiEngine.h"
+#include "KX_PythonInit.h" /* for config load/saving */
#ifdef HAVE_CONFIG_H
#include <config.h>
@@ -125,6 +126,71 @@ bool KX_GameActuator::Update()
}
break;
}
+ case KX_GAME_SAVECFG:
+ {
+ if (m_ketsjiengine)
+ {
+ char mashal_path[512];
+ char *marshal_buffer = NULL;
+ int marshal_length;
+ FILE *fp = NULL;
+
+ pathGamePythonConfig(mashal_path);
+ marshal_length = saveGamePythonConfig(&marshal_buffer);
+
+ if (marshal_length && marshal_buffer) {
+ fp = fopen(mashal_path, "wb");
+ if (fp) {
+ if (fwrite(marshal_buffer, 1, marshal_length, fp) != marshal_length) {
+ printf("Warning: could not write marshal data\n");
+ }
+ fclose(fp);
+ } else {
+ printf("Warning: could not open marshal file\n");
+ }
+ } else {
+ printf("Warning: could not create marshal buffer\n");
+ }
+ }
+ break;
+ }
+ case KX_GAME_LOADCFG:
+ {
+ if (m_ketsjiengine)
+ {
+ char mashal_path[512];
+ char *marshal_buffer;
+ int marshal_length;
+ FILE *fp = NULL;
+ int result;
+
+ pathGamePythonConfig(mashal_path);
+
+ fp = fopen(mashal_path, "rb");
+ if (fp) {
+ // obtain file size:
+ fseek (fp , 0 , SEEK_END);
+ marshal_length = ftell(fp);
+ rewind(fp);
+
+ marshal_buffer = (char*) malloc (sizeof(char)*marshal_length);
+
+ result = fread (marshal_buffer, 1, marshal_length, fp);
+
+ if (result == marshal_length) {
+ loadGamePythonConfig(marshal_buffer, marshal_length);
+ } else {
+ printf("warning: could not read all of '%s'\n", mashal_path);
+ }
+
+ free(marshal_buffer);
+ fclose(fp);
+ } else {
+ printf("warning: could not open '%s'\n", mashal_path);
+ }
+ }
+ break;
+ }
default:
; /* do nothing? this is an internal error !!! */
}
@@ -175,13 +241,13 @@ PyParentObject KX_GameActuator::Parents[] =
PyMethodDef KX_GameActuator::Methods[] =
{
- {"getFile", (PyCFunction) KX_GameActuator::sPyGetFile, METH_VARARGS, GetFile_doc},
- {"setFile", (PyCFunction) KX_GameActuator::sPySetFile, METH_VARARGS, SetFile_doc},
+ {"getFile", (PyCFunction) KX_GameActuator::sPyGetFile, METH_VARARGS, (PY_METHODCHAR)GetFile_doc},
+ {"setFile", (PyCFunction) KX_GameActuator::sPySetFile, METH_VARARGS, (PY_METHODCHAR)SetFile_doc},
{NULL,NULL} //Sentinel
};
/* getFile */
-char KX_GameActuator::GetFile_doc[] =
+const char KX_GameActuator::GetFile_doc[] =
"getFile()\n"
"get the name of the file to start.\n";
PyObject* KX_GameActuator::PyGetFile(PyObject* self, PyObject* args, PyObject* kwds)
@@ -190,7 +256,7 @@ PyObject* KX_GameActuator::PyGetFile(PyObject* self, PyObject* args, PyObject* k
}
/* setFile */
-char KX_GameActuator::SetFile_doc[] =
+const char KX_GameActuator::SetFile_doc[] =
"setFile(name)\n"
"set the name of the file to start.\n";
PyObject* KX_GameActuator::PySetFile(PyObject* self, PyObject* args, PyObject* kwds)
diff --git a/source/gameengine/Ketsji/KX_GameActuator.h b/source/gameengine/Ketsji/KX_GameActuator.h
index 8565dc46caa..bb3448995dc 100644
--- a/source/gameengine/Ketsji/KX_GameActuator.h
+++ b/source/gameengine/Ketsji/KX_GameActuator.h
@@ -54,6 +54,8 @@ protected:
KX_GAME_START,
KX_GAME_RESTART,
KX_GAME_QUIT,
+ KX_GAME_SAVECFG,
+ KX_GAME_LOADCFG,
KX_GAME_MAX
};
diff --git a/source/gameengine/Ketsji/KX_GameObject.cpp b/source/gameengine/Ketsji/KX_GameObject.cpp
index 700cc00e996..1b57b9acc1d 100644
--- a/source/gameengine/Ketsji/KX_GameObject.cpp
+++ b/source/gameengine/Ketsji/KX_GameObject.cpp
@@ -51,6 +51,7 @@ typedef unsigned long uint_ptr;
#include "KX_GameObject.h"
#include "RAS_MeshObject.h"
#include "KX_MeshProxy.h"
+#include "KX_PolyProxy.h"
#include <stdio.h> // printf
#include "SG_Controller.h"
#include "KX_IPhysicsController.h"
@@ -64,6 +65,8 @@ typedef unsigned long uint_ptr;
#include "SCA_IActuator.h"
#include "SCA_ISensor.h"
+#include "PyObjectPlus.h" /* python stuff */
+
// This file defines relationships between parents and children
// in the game engine.
@@ -78,12 +81,15 @@ KX_GameObject::KX_GameObject(
m_bDyna(false),
m_layer(0),
m_pBlenderObject(NULL),
+ m_pBlenderGroupObject(NULL),
m_bSuspendDynamics(false),
m_bUseObjectColor(false),
m_bIsNegativeScaling(false),
m_bVisible(true),
+ m_bCulled(true),
m_pPhysicsController1(NULL),
m_pPhysicsEnvironment(NULL),
+ m_xray(false),
m_pHitObject(NULL),
m_isDeformable(false)
{
@@ -99,8 +105,11 @@ KX_GameObject::KX_GameObject(
};
+
KX_GameObject::~KX_GameObject()
{
+ RemoveMeshes();
+
// is this delete somewhere ?
//if (m_sumoObj)
// delete m_sumoObj;
@@ -162,7 +171,6 @@ STR_String KX_GameObject::GetName()
void KX_GameObject::SetName(STR_String name)
{
m_name = name;
-
}; // Set the name of the value
@@ -227,11 +235,12 @@ void KX_GameObject::SetParent(KX_Scene *scene, KX_GameObject* obj)
m_pPhysicsController1->SuspendDynamics(true);
}
// Set us to our new scale, position, and orientation
- scale1[0] = scale1[0]/scale2[0];
- scale1[1] = scale1[1]/scale2[1];
- scale1[2] = scale1[2]/scale2[2];
+ scale2[0] = 1.0/scale2[0];
+ scale2[1] = 1.0/scale2[1];
+ scale2[2] = 1.0/scale2[2];
+ scale1 = scale1 * scale2;
MT_Matrix3x3 invori = obj->NodeGetWorldOrientation().inverse();
- MT_Vector3 newpos = invori*(NodeGetWorldPosition()-obj->NodeGetWorldPosition())*scale1;
+ MT_Vector3 newpos = invori*(NodeGetWorldPosition()-obj->NodeGetWorldPosition())*scale2;
NodeSetLocalScale(scale1);
NodeSetLocalPosition(MT_Point3(newpos[0],newpos[1],newpos[2]));
@@ -283,11 +292,11 @@ void KX_GameObject::ProcessReplica(KX_GameObject* replica)
CValue* KX_GameObject::GetReplica()
{
KX_GameObject* replica = new KX_GameObject(*this);
-
+
// this will copy properties and so on...
CValue::AddDataToReplica(replica);
ProcessReplica(replica);
-
+
return replica;
}
@@ -353,24 +362,47 @@ double* KX_GameObject::GetOpenGLMatrix()
return fl;
}
+void KX_GameObject::AddMeshUser()
+{
+ for (size_t i=0;i<m_meshes.size();i++)
+ m_meshes[i]->AddMeshUser(this);
+
+ UpdateBuckets(false);
+}
+static void UpdateBuckets_recursive(SG_Node* node)
+{
+ NodeList& children = node->GetSGChildren();
-void KX_GameObject::Bucketize()
+ for (NodeList::iterator childit = children.begin();!(childit==children.end());++childit)
+ {
+ SG_Node* childnode = (*childit);
+ KX_GameObject *clientgameobj = static_cast<KX_GameObject*>( (*childit)->GetSGClientObject());
+ if (clientgameobj != NULL) // This is a GameObject
+ clientgameobj->UpdateBuckets(0);
+
+ // if the childobj is NULL then this may be an inverse parent link
+ // so a non recursive search should still look down this node.
+ UpdateBuckets_recursive(childnode);
+ }
+}
+
+void KX_GameObject::UpdateBuckets( bool recursive )
{
double* fl = GetOpenGLMatrix();
for (size_t i=0;i<m_meshes.size();i++)
- m_meshes[i]->Bucketize(fl, this, m_bUseObjectColor, m_objectColor);
+ m_meshes[i]->UpdateBuckets(this, fl, m_bUseObjectColor, m_objectColor, m_bVisible, m_bCulled);
+
+ if (recursive) {
+ UpdateBuckets_recursive(m_pSGNode);
+ }
}
-
-
void KX_GameObject::RemoveMeshes()
{
- double* fl = GetOpenGLMatrix();
-
for (size_t i=0;i<m_meshes.size();i++)
- m_meshes[i]->RemoveFromBuckets(fl, this);
+ m_meshes[i]->RemoveFromBuckets(this);
//note: meshes can be shared, and are deleted by KX_BlenderSceneConverter
@@ -453,13 +485,14 @@ KX_GameObject::UpdateMaterialData(
)
{
int mesh = 0;
-
if (((unsigned int)mesh < m_meshes.size()) && mesh >= 0) {
- RAS_MaterialBucket::Set::iterator mit = m_meshes[mesh]->GetFirstMaterial();
+ list<RAS_MeshMaterial>::iterator mit = m_meshes[mesh]->GetFirstMaterial();
+
for(; mit != m_meshes[mesh]->GetLastMaterial(); ++mit)
{
- RAS_IPolyMaterial* poly = (*mit)->GetPolyMaterial();
- if(poly->GetFlag() & RAS_BLENDERMAT)
+ RAS_IPolyMaterial* poly = mit->m_bucket->GetPolyMaterial();
+
+ if(poly->GetFlag() & RAS_BLENDERMAT )
{
KX_BlenderMaterial *m = static_cast<KX_BlenderMaterial*>(poly);
@@ -467,8 +500,7 @@ KX_GameObject::UpdateMaterialData(
{
m->UpdateIPO(rgba, specrgb,hard,spec,ref,emit, alpha);
// if mesh has only one material attached to it then use original hack with no need to edit vertices (better performance)
- if(!(poly->GetFlag() & RAS_BLENDERGLSL))
- SetObjectColor(rgba);
+ SetObjectColor(rgba);
}
else
{
@@ -494,72 +526,75 @@ KX_GameObject::GetVisible(
return m_bVisible;
}
+static void setVisible_recursive(SG_Node* node, bool v)
+{
+ NodeList& children = node->GetSGChildren();
+
+ for (NodeList::iterator childit = children.begin();!(childit==children.end());++childit)
+ {
+ SG_Node* childnode = (*childit);
+ KX_GameObject *clientgameobj = static_cast<KX_GameObject*>( (*childit)->GetSGClientObject());
+ if (clientgameobj != NULL) // This is a GameObject
+ clientgameobj->SetVisible(v, 0);
+
+ // if the childobj is NULL then this may be an inverse parent link
+ // so a non recursive search should still look down this node.
+ setVisible_recursive(childnode, v);
+ }
+}
+
+
void
KX_GameObject::SetVisible(
- bool v
+ bool v,
+ bool recursive
)
{
m_bVisible = v;
+ if (recursive)
+ setVisible_recursive(m_pSGNode, v);
}
-void
-KX_GameObject::SetLayer(
- int l
+bool
+KX_GameObject::GetCulled(
+ void
)
{
- m_layer = l;
+ return m_bCulled;
}
-int
-KX_GameObject::GetLayer(
- void
+void
+KX_GameObject::SetCulled(
+ bool c
)
{
- return m_layer;
+ m_bCulled = c;
}
-// used by Python, and the actuatorshould _not_ be misused by the
-// scene!
-void
-KX_GameObject::MarkVisible(
- bool visible
+
+void
+KX_GameObject::SetLayer(
+ int l
)
{
- /* If explicit visibility settings are used, this is
- * determined on this level. Maybe change this to mesh level
- * later on? */
-
- double* fl = GetOpenGLMatrixPtr()->getPointer();
- for (size_t i=0;i<m_meshes.size();i++)
- {
- m_meshes[i]->MarkVisible(fl,this,visible,m_bUseObjectColor,m_objectColor);
- }
+ m_layer = l;
}
-
-// Always use the flag?
-void
-KX_GameObject::MarkVisible(
+int
+KX_GameObject::GetLayer(
void
)
{
- double* fl = GetOpenGLMatrixPtr()->getPointer();
- for (size_t i=0;i<m_meshes.size();i++)
- {
- m_meshes[i]->MarkVisible(fl,
- this,
- m_bVisible,
- m_bUseObjectColor,
- m_objectColor
- );
- }
+ return m_layer;
}
-
void KX_GameObject::addLinearVelocity(const MT_Vector3& lin_vel,bool local)
{
- if (m_pPhysicsController1)
- m_pPhysicsController1->SetLinearVelocity(lin_vel + m_pPhysicsController1->GetLinearVelocity(),local);
+ if (m_pPhysicsController1)
+ {
+ MT_Vector3 lv = local ? NodeGetWorldOrientation() * lin_vel : lin_vel;
+ m_pPhysicsController1->SetLinearVelocity(lv + m_pPhysicsController1->GetLinearVelocity(), 0);
+ }
}
@@ -737,7 +772,14 @@ MT_Vector3 KX_GameObject::GetAngularVelocity(bool local)
return velocity;
}
-
+MT_Vector3 KX_GameObject::GetVelocity(const MT_Point3& point)
+{
+ if (m_pPhysicsController1)
+ {
+ return m_pPhysicsController1->GetVelocity(point);
+ }
+ return MT_Vector3(0.0,0.0,0.0);
+}
// scenegraph node stuff
@@ -788,7 +830,17 @@ void KX_GameObject::NodeSetLocalScale(const MT_Vector3& scale)
void KX_GameObject::NodeSetRelativeScale(const MT_Vector3& scale)
{
if (GetSGNode())
+ {
GetSGNode()->RelativeScale(scale);
+ if (m_pPhysicsController1 && (!GetSGNode()->GetSGParent()))
+ {
+ // see note above
+ // we can use the local scale: it's the same thing for a root object
+ // and the world scale is not yet updated
+ MT_Vector3 newscale = GetSGNode()->GetLocalScale();
+ m_pPhysicsController1->setScaling(newscale);
+ }
+ }
}
void KX_GameObject::NodeSetWorldPosition(const MT_Point3& trans)
@@ -883,15 +935,18 @@ void KX_GameObject::Suspend()
PyMethodDef KX_GameObject::Methods[] = {
{"getPosition", (PyCFunction) KX_GameObject::sPyGetPosition, METH_NOARGS},
{"setPosition", (PyCFunction) KX_GameObject::sPySetPosition, METH_O},
+ {"setWorldPosition", (PyCFunction) KX_GameObject::sPySetWorldPosition, METH_O},
{"getLinearVelocity", (PyCFunction) KX_GameObject::sPyGetLinearVelocity, METH_VARARGS},
{"setLinearVelocity", (PyCFunction) KX_GameObject::sPySetLinearVelocity, METH_VARARGS},
+ {"getAngularVelocity", (PyCFunction) KX_GameObject::sPyGetAngularVelocity, METH_VARARGS},
+ {"setAngularVelocity", (PyCFunction) KX_GameObject::sPySetAngularVelocity, METH_VARARGS},
{"getVelocity", (PyCFunction) KX_GameObject::sPyGetVelocity, METH_VARARGS},
{"getMass", (PyCFunction) KX_GameObject::sPyGetMass, METH_NOARGS},
{"getReactionForce", (PyCFunction) KX_GameObject::sPyGetReactionForce, METH_NOARGS},
{"getOrientation", (PyCFunction) KX_GameObject::sPyGetOrientation, METH_NOARGS},
{"setOrientation", (PyCFunction) KX_GameObject::sPySetOrientation, METH_O},
{"getVisible",(PyCFunction) KX_GameObject::sPyGetVisible, METH_NOARGS},
- {"setVisible",(PyCFunction) KX_GameObject::sPySetVisible, METH_O},
+ {"setVisible",(PyCFunction) KX_GameObject::sPySetVisible, METH_VARARGS},
{"getState",(PyCFunction) KX_GameObject::sPyGetState, METH_NOARGS},
{"setState",(PyCFunction) KX_GameObject::sPySetState, METH_O},
{"alignAxisToVect",(PyCFunction) KX_GameObject::sPyAlignAxisToVect, METH_VARARGS},
@@ -1032,18 +1087,23 @@ PyObject* KX_GameObject::_getattr(const STR_String& attr)
int KX_GameObject::_setattr(const STR_String& attr, PyObject *value) // _setattr method
{
- if (attr == "mass")
+ if (attr == "mass") {
+ PyErr_SetString(PyExc_AttributeError, "attribute \"mass\" is read only");
return 1;
+ }
- if (attr == "parent")
+ if (attr == "parent") {
+ PyErr_SetString(PyExc_AttributeError, "attribute \"mass\" is read only\nUse setParent()");
return 1;
+ }
if (PyInt_Check(value))
{
int val = PyInt_AsLong(value);
if (attr == "visible")
{
- SetVisible(val != 0);
+ SetVisible(val != 0, false);
+ UpdateBuckets(false);
return 0;
}
}
@@ -1102,7 +1162,7 @@ int KX_GameObject::_setattr(const STR_String& attr, PyObject *value) // _setattr
}
return 1;
}
-
+ PyErr_SetString(PyExc_AttributeError, "could not set the orientation from a 3x3 matrix, quaternion or euler sequence");
return 1;
}
@@ -1146,9 +1206,7 @@ int KX_GameObject::_setattr(const STR_String& attr, PyObject *value) // _setattr
}
-PyObject* KX_GameObject::PyGetLinearVelocity(PyObject* self,
- PyObject* args,
- PyObject* kwds)
+PyObject* KX_GameObject::PyGetLinearVelocity(PyObject* self, PyObject* args)
{
// only can get the velocity if we have a physics object connected to us...
int local = 0;
@@ -1162,9 +1220,7 @@ PyObject* KX_GameObject::PyGetLinearVelocity(PyObject* self,
}
}
-PyObject* KX_GameObject::PySetLinearVelocity(PyObject* self,
- PyObject* args,
- PyObject* kwds)
+PyObject* KX_GameObject::PySetLinearVelocity(PyObject* self, PyObject* args)
{
int local = 0;
PyObject* pyvect;
@@ -1179,17 +1235,43 @@ PyObject* KX_GameObject::PySetLinearVelocity(PyObject* self,
return NULL;
}
-PyObject* KX_GameObject::PySetVisible(PyObject* self, PyObject* value)
+PyObject* KX_GameObject::PyGetAngularVelocity(PyObject* self, PyObject* args)
{
- int visible = PyInt_AsLong(value);
-
- if (visible==-1 && PyErr_Occurred()) {
- PyErr_SetString(PyExc_TypeError, "expected 0 or 1");
+ // only can get the velocity if we have a physics object connected to us...
+ int local = 0;
+ if (PyArg_ParseTuple(args,"|i",&local))
+ {
+ return PyObjectFrom(GetAngularVelocity((local!=0)));
+ }
+ else
+ {
return NULL;
}
+}
+
+PyObject* KX_GameObject::PySetAngularVelocity(PyObject* self, PyObject* args)
+{
+ int local = 0;
+ PyObject* pyvect;
+
+ if (PyArg_ParseTuple(args,"O|i",&pyvect,&local)) {
+ MT_Vector3 velocity;
+ if (PyVecTo(pyvect, velocity)) {
+ setAngularVelocity(velocity, (local!=0));
+ Py_RETURN_NONE;
+ }
+ }
+ return NULL;
+}
+
+PyObject* KX_GameObject::PySetVisible(PyObject* self, PyObject* args)
+{
+ int visible, recursive = 0;
+ if (!PyArg_ParseTuple(args,"i|i",&visible, &recursive))
+ return NULL;
- MarkVisible(visible!=0);
- m_bVisible = (visible!=0);
+ SetVisible(visible ? true:false, recursive ? true:false);
+ UpdateBuckets(recursive ? true:false);
Py_RETURN_NONE;
}
@@ -1228,9 +1310,7 @@ PyObject* KX_GameObject::PySetState(PyObject* self, PyObject* value)
-PyObject* KX_GameObject::PyGetVelocity(PyObject* self,
- PyObject* args,
- PyObject* kwds)
+PyObject* KX_GameObject::PyGetVelocity(PyObject* self, PyObject* args)
{
// only can get the velocity if we have a physics object connected to us...
MT_Vector3 velocity(0.0,0.0,0.0);
@@ -1362,9 +1442,7 @@ PyObject* KX_GameObject::PyGetChildrenRecursive(PyObject* self)
return list;
}
-PyObject* KX_GameObject::PyGetMesh(PyObject* self,
- PyObject* args,
- PyObject* kwds)
+PyObject* KX_GameObject::PyGetMesh(PyObject* self, PyObject* args)
{
int mesh = 0;
@@ -1404,9 +1482,7 @@ PyObject* KX_GameObject::PySetCollisionMargin(PyObject* self, PyObject* value)
-PyObject* KX_GameObject::PyApplyImpulse(PyObject* self,
- PyObject* args,
- PyObject* kwds)
+PyObject* KX_GameObject::PyApplyImpulse(PyObject* self, PyObject* args)
{
PyObject* pyattach;
PyObject* pyimpulse;
@@ -1477,9 +1553,7 @@ PyObject* KX_GameObject::PySetOrientation(PyObject* self, PyObject* value)
return NULL;
}
-PyObject* KX_GameObject::PyAlignAxisToVect(PyObject* self,
- PyObject* args,
- PyObject* kwds)
+PyObject* KX_GameObject::PyAlignAxisToVect(PyObject* self, PyObject* args)
{
PyObject* pyvect;
int axis = 2; //z axis is the default
@@ -1524,6 +1598,19 @@ PyObject* KX_GameObject::PySetPosition(PyObject* self, PyObject* value)
return NULL;
}
+PyObject* KX_GameObject::PySetWorldPosition(PyObject* self, PyObject* value)
+{
+ MT_Point3 pos;
+ if (PyVecTo(value, pos))
+ {
+ NodeSetWorldPosition(pos);
+ NodeUpdateGS(0.f,true);
+ Py_RETURN_NONE;
+ }
+
+ return NULL;
+}
+
PyObject* KX_GameObject::PyGetPhysicsId(PyObject* self)
{
KX_IPhysicsController* ctrl = GetPhysicsController();
@@ -1609,25 +1696,45 @@ KX_PYMETHODDEF_DOC(KX_GameObject, getVectTo,
return returnValue;
}
-bool KX_GameObject::RayHit(KX_ClientObjectInfo* client, MT_Point3& hit_point, MT_Vector3& hit_normal, void * const data)
+bool KX_GameObject::RayHit(KX_ClientObjectInfo* client, KX_RayCast* result, void * const data)
{
+ KX_GameObject* hitKXObj = client->m_gameobject;
+
+ // if X-ray option is selected, the unwnted objects were not tested, so get here only with true hit
+ // if not, all objects were tested and the front one may not be the correct one.
+ if (m_xray || m_testPropName.Length() == 0 || hitKXObj->GetProperty(m_testPropName) != NULL)
+ {
+ m_pHitObject = hitKXObj;
+ return true;
+ }
+ // return true to stop RayCast::RayTest from looping, the above test was decisive
+ // We would want to loop only if we want to get more than one hit point
+ return true;
+}
+/* this function is used to pre-filter the object before casting the ray on them.
+ This is useful for "X-Ray" option when we want to see "through" unwanted object.
+ */
+bool KX_GameObject::NeedRayCast(KX_ClientObjectInfo* client)
+{
KX_GameObject* hitKXObj = client->m_gameobject;
if (client->m_type > KX_ClientObjectInfo::ACTOR)
{
- // false hit
+ // Unknown type of object, skip it.
+ // Should not occur as the sensor objects are filtered in RayTest()
+ printf("Invalid client type %d found in ray casting\n", client->m_type);
return false;
}
-
- if (m_testPropName.Length() == 0 || hitKXObj->GetProperty(m_testPropName) != NULL)
+
+ // if X-Ray option is selected, skip object that don't match the criteria as we see through them
+ // if not, test all objects because we don't know yet which one will be on front
+ if (!m_xray || m_testPropName.Length() == 0 || hitKXObj->GetProperty(m_testPropName) != NULL)
{
- m_pHitObject = hitKXObj;
return true;
}
-
+ // skip the object
return false;
-
}
KX_PYMETHODDEF_DOC(KX_GameObject, rayCastTo,
@@ -1667,8 +1774,6 @@ KX_PYMETHODDEF_DOC(KX_GameObject, rayCastTo,
toPoint = fromPoint + (dist) * toDir;
}
- MT_Point3 resultPoint;
- MT_Vector3 resultNormal;
PHY_IPhysicsEnvironment* pe = GetPhysicsEnvironment();
KX_IPhysicsController *spc = GetPhysicsController();
KX_GameObject *parent = GetParent();
@@ -1682,7 +1787,8 @@ KX_PYMETHODDEF_DOC(KX_GameObject, rayCastTo,
m_testPropName = propName;
else
m_testPropName.SetLength(0);
- KX_RayCast::RayTest(spc, pe, fromPoint, toPoint, resultPoint, resultNormal, KX_RayCast::Callback<KX_GameObject>(this));
+ KX_RayCast::Callback<KX_GameObject> callback(this,spc);
+ KX_RayCast::RayTest(pe, fromPoint, toPoint, callback);
if (m_pHitObject)
{
@@ -1693,13 +1799,24 @@ KX_PYMETHODDEF_DOC(KX_GameObject, rayCastTo,
}
KX_PYMETHODDEF_DOC(KX_GameObject, rayCast,
- "rayCast(to,from,dist,prop): cast a ray and return tuple (object,hit,normal) of contact point with object within dist that matches prop or (None,None,None) tuple if no hit\n"
-" prop = property name that object must have; can be omitted => detect any object\n"
-" dist = max distance to look (can be negative => look behind); 0 or omitted => detect up to to\n"
+ "rayCast(to,from,dist,prop,face,xray,poly): cast a ray and return 3-tuple (object,hit,normal) or 4-tuple (object,hit,normal,polygon) of contact point with object within dist that matches prop.\n"
+ " If no hit, return (None,None,None) or (None,None,None,None).\n"
+" to = 3-tuple or object reference for destination of ray (if object, use center of object)\n"
" from = 3-tuple or object reference for origin of ray (if object, use center of object)\n"
" Can be None or omitted => start from self object center\n"
-" to = 3-tuple or object reference for destination of ray (if object, use center of object)\n"
-"Note: the object on which you call this method matters: the ray will ignore it if it goes through it\n")
+" dist = max distance to look (can be negative => look behind); 0 or omitted => detect up to to\n"
+" prop = property name that object must have; can be omitted => detect any object\n"
+" face = normal option: 1=>return face normal; 0 or omitted => normal is oriented towards origin\n"
+" xray = X-ray option: 1=>skip objects that don't match prop; 0 or omitted => stop on first object\n"
+" poly = polygon option: 1=>return value is a 4-tuple and the 4th element is a KX_PolyProxy object\n"
+" which can be None if hit object has no mesh or if there is no hit\n"
+" If 0 or omitted, return value is a 3-tuple\n"
+"Note: The object on which you call this method matters: the ray will ignore it.\n"
+" prop and xray option interact as follow:\n"
+" prop off, xray off: return closest hit or no hit if there is no object on the full extend of the ray\n"
+" prop off, xray on : idem\n"
+" prop on, xray off: return closest hit if it matches prop, no hit otherwise\n"
+" prop on, xray on : return closest hit matching prop or no hit if there is no object matching prop on the full extend of the ray\n")
{
MT_Point3 toPoint;
MT_Point3 fromPoint;
@@ -1708,8 +1825,9 @@ KX_PYMETHODDEF_DOC(KX_GameObject, rayCast,
float dist = 0.0f;
char *propName = NULL;
KX_GameObject *other;
+ int face=0, xray=0, poly=0;
- if (!PyArg_ParseTuple(args,"O|Ofs", &pyto, &pyfrom, &dist, &propName)) {
+ if (!PyArg_ParseTuple(args,"O|Ofsiii", &pyto, &pyfrom, &dist, &propName, &face, &xray, &poly)) {
return NULL; // Python sets a simple error
}
@@ -1755,8 +1873,6 @@ KX_PYMETHODDEF_DOC(KX_GameObject, rayCast,
return Py_BuildValue("OOO", Py_None, Py_None, Py_None);
}
- MT_Point3 resultPoint;
- MT_Vector3 resultNormal;
PHY_IPhysicsEnvironment* pe = GetPhysicsEnvironment();
KX_IPhysicsController *spc = GetPhysicsController();
KX_GameObject *parent = GetParent();
@@ -1770,20 +1886,41 @@ KX_PYMETHODDEF_DOC(KX_GameObject, rayCast,
m_testPropName = propName;
else
m_testPropName.SetLength(0);
- KX_RayCast::RayTest(spc, pe, fromPoint, toPoint, resultPoint, resultNormal, KX_RayCast::Callback<KX_GameObject>(this));
+ m_xray = xray;
+ // to get the hit results
+ KX_RayCast::Callback<KX_GameObject> callback(this,spc,NULL,face);
+ KX_RayCast::RayTest(pe, fromPoint, toPoint, callback);
- if (m_pHitObject)
+ if (m_pHitObject)
{
- PyObject* returnValue = PyTuple_New(3);
+ PyObject* returnValue = (poly) ? PyTuple_New(4) : PyTuple_New(3);
if (returnValue) { // unlikely this would ever fail, if it does python sets an error
PyTuple_SET_ITEM(returnValue, 0, m_pHitObject->AddRef());
- PyTuple_SET_ITEM(returnValue, 1, PyObjectFrom(resultPoint));
- PyTuple_SET_ITEM(returnValue, 2, PyObjectFrom(resultNormal));
+ PyTuple_SET_ITEM(returnValue, 1, PyObjectFrom(callback.m_hitPoint));
+ PyTuple_SET_ITEM(returnValue, 2, PyObjectFrom(callback.m_hitNormal));
+ if (poly)
+ {
+ if (callback.m_hitMesh)
+ {
+ // if this field is set, then we can trust that m_hitPolygon is a valid polygon
+ RAS_Polygon* poly = callback.m_hitMesh->GetPolygon(callback.m_hitPolygon);
+ KX_PolyProxy* polyproxy = new KX_PolyProxy(callback.m_hitMesh, poly);
+ PyTuple_SET_ITEM(returnValue, 3, polyproxy);
+ }
+ else
+ {
+ Py_INCREF(Py_None);
+ PyTuple_SET_ITEM(returnValue, 3, Py_None);
+ }
+ }
}
return returnValue;
}
- return Py_BuildValue("OOO", Py_None, Py_None, Py_None);
- //Py_RETURN_NONE;
+ // no hit
+ if (poly)
+ return Py_BuildValue("OOOO", Py_None, Py_None, Py_None, Py_None);
+ else
+ return Py_BuildValue("OOO", Py_None, Py_None, Py_None);
}
/* ---------------------------------------------------------------------
diff --git a/source/gameengine/Ketsji/KX_GameObject.h b/source/gameengine/Ketsji/KX_GameObject.h
index a7ac2d75a93..472d31362dd 100644
--- a/source/gameengine/Ketsji/KX_GameObject.h
+++ b/source/gameengine/Ketsji/KX_GameObject.h
@@ -54,6 +54,7 @@
//Forward declarations.
struct KX_ClientObjectInfo;
+class KX_RayCast;
class RAS_MeshObject;
class KX_IPhysicsController;
class PHY_IPhysicsEnvironment;
@@ -74,20 +75,23 @@ protected:
int m_layer;
std::vector<RAS_MeshObject*> m_meshes;
struct Object* m_pBlenderObject;
+ struct Object* m_pBlenderGroupObject;
bool m_bSuspendDynamics;
bool m_bUseObjectColor;
bool m_bIsNegativeScaling;
MT_Vector4 m_objectColor;
- // Is this object set to be visible? Only useful for the
- // visibility subsystem right now.
- bool m_bVisible;
+ // visible = user setting
+ // culled = while rendering, depending on camera
+ bool m_bVisible;
+ bool m_bCulled;
KX_IPhysicsController* m_pPhysicsController1;
// used for ray casting
PHY_IPhysicsEnvironment* m_pPhysicsEnvironment;
STR_String m_testPropName;
+ bool m_xray;
KX_GameObject* m_pHitObject;
SG_Node* m_pSGNode;
@@ -260,6 +264,15 @@ public:
bool local=false
);
+ /**
+ * Return the linear velocity of a given point in world coordinate
+ * but relative to center of object ([0,0,0]=center of object)
+ */
+ MT_Vector3
+ GetVelocity(
+ const MT_Point3& position
+ );
+
/**
* Return the mass of the object
*/
@@ -328,6 +341,14 @@ public:
m_pPhysicsController1 = physicscontroller;
}
+ virtual class RAS_Deformer* GetDeformer()
+ {
+ return 0;
+ }
+ virtual void SetDeformer(class RAS_Deformer* deformer)
+ {
+
+ }
/**
* @section Coordinate system manipulation functions
@@ -393,6 +414,16 @@ public:
{
m_pBlenderObject = obj;
}
+
+ struct Object* GetBlenderGroupObject( )
+ {
+ return m_pBlenderGroupObject;
+ }
+
+ void SetBlenderGroupObject( struct Object* obj)
+ {
+ m_pBlenderGroupObject = obj;
+ }
bool IsDupliGroup()
{
@@ -428,7 +459,8 @@ public:
return (m_pSGNode && m_pSGNode->GetSGParent() && m_pSGNode->GetSGParent()->IsVertexParent());
}
- bool RayHit(KX_ClientObjectInfo* client, MT_Point3& hit_point, MT_Vector3& hit_normal, void * const data);
+ bool RayHit(KX_ClientObjectInfo* client, KX_RayCast* result, void * const data);
+ bool NeedRayCast(KX_ClientObjectInfo* client);
/**
@@ -535,18 +567,23 @@ public:
/**
* @section Mesh accessor functions.
*/
+
+ /**
+ * Update buckets to indicate that there is a new
+ * user of this object's meshes.
+ */
+ void
+ AddMeshUser(
+ );
/**
- * Run through the meshes associated with this
- * object and bucketize them. See RAS_Mesh for
- * more details on this function. Interesting to
- * note that polygon bucketizing seems to happen on a per
- * object basis. Which may explain why there is such
- * a big performance gain when all static objects
- * are joined into 1.
+ * Update buckets with data about the mesh after
+ * creating or duplicating the object, changing
+ * visibility, object color, .. .
*/
void
- Bucketize(
+ UpdateBuckets(
+ bool recursive
);
/**
@@ -607,38 +644,38 @@ public:
ResetDebugColor(
);
- /**
- * Set the visibility of the meshes associated with this
- * object.
+ /**
+ * Was this object marked visible? (only for the explicit
+ * visibility system).
*/
- void
- MarkVisible(
- bool visible
+ bool
+ GetVisible(
+ void
);
- /**
- * Set the visibility according to the visibility flag.
+ /**
+ * Set visibility flag of this object
*/
- void
- MarkVisible(
void
+ SetVisible(
+ bool b,
+ bool recursive
);
/**
- * Was this object marked visible? (only for the ewxplicit
- * visibility system).
+ * Was this object culled?
*/
bool
- GetVisible(
+ GetCulled(
void
);
/**
- * Set visibility flag of this object
+ * Set culled flag of this object
*/
void
- SetVisible(
- bool b
+ SetCulled(
+ bool c
);
/**
@@ -667,6 +704,14 @@ public:
) { return m_bIsNegativeScaling; }
/**
+ * Is this a light?
+ */
+ virtual bool
+ IsLight(
+ void
+ ) { return false; }
+
+ /**
* @section Logic bubbling methods.
*/
@@ -726,31 +771,34 @@ public:
KX_PYMETHOD_NOARGS(KX_GameObject,GetPosition);
KX_PYMETHOD_O(KX_GameObject,SetPosition);
- KX_PYMETHOD(KX_GameObject,GetLinearVelocity);
- KX_PYMETHOD(KX_GameObject,SetLinearVelocity);
- KX_PYMETHOD(KX_GameObject,GetVelocity);
+ KX_PYMETHOD_O(KX_GameObject,SetWorldPosition);
+ KX_PYMETHOD_VARARGS(KX_GameObject,GetLinearVelocity);
+ KX_PYMETHOD_VARARGS(KX_GameObject,SetLinearVelocity);
+ KX_PYMETHOD_VARARGS(KX_GameObject,GetAngularVelocity);
+ KX_PYMETHOD_VARARGS(KX_GameObject,SetAngularVelocity);
+ KX_PYMETHOD_VARARGS(KX_GameObject,GetVelocity);
KX_PYMETHOD_NOARGS(KX_GameObject,GetMass);
KX_PYMETHOD_NOARGS(KX_GameObject,GetReactionForce);
KX_PYMETHOD_NOARGS(KX_GameObject,GetOrientation);
KX_PYMETHOD_O(KX_GameObject,SetOrientation);
KX_PYMETHOD_NOARGS(KX_GameObject,GetVisible);
- KX_PYMETHOD_O(KX_GameObject,SetVisible);
+ KX_PYMETHOD_VARARGS(KX_GameObject,SetVisible);
KX_PYMETHOD_NOARGS(KX_GameObject,GetState);
KX_PYMETHOD_O(KX_GameObject,SetState);
- KX_PYMETHOD(KX_GameObject,AlignAxisToVect);
+ KX_PYMETHOD_VARARGS(KX_GameObject,AlignAxisToVect);
KX_PYMETHOD_O(KX_GameObject,GetAxisVect);
KX_PYMETHOD_NOARGS(KX_GameObject,SuspendDynamics);
KX_PYMETHOD_NOARGS(KX_GameObject,RestoreDynamics);
KX_PYMETHOD_NOARGS(KX_GameObject,EnableRigidBody);
KX_PYMETHOD_NOARGS(KX_GameObject,DisableRigidBody);
- KX_PYMETHOD(KX_GameObject,ApplyImpulse);
+ KX_PYMETHOD_VARARGS(KX_GameObject,ApplyImpulse);
KX_PYMETHOD_O(KX_GameObject,SetCollisionMargin);
KX_PYMETHOD_NOARGS(KX_GameObject,GetParent);
KX_PYMETHOD_O(KX_GameObject,SetParent);
KX_PYMETHOD_NOARGS(KX_GameObject,RemoveParent);
KX_PYMETHOD_NOARGS(KX_GameObject,GetChildren);
KX_PYMETHOD_NOARGS(KX_GameObject,GetChildrenRecursive);
- KX_PYMETHOD(KX_GameObject,GetMesh);
+ KX_PYMETHOD_VARARGS(KX_GameObject,GetMesh);
KX_PYMETHOD_NOARGS(KX_GameObject,GetPhysicsId);
KX_PYMETHOD_NOARGS(KX_GameObject,GetPropertyNames);
KX_PYMETHOD_NOARGS(KX_GameObject,EndObject);
diff --git a/source/gameengine/Ketsji/KX_IPO_SGController.cpp b/source/gameengine/Ketsji/KX_IPO_SGController.cpp
index d3aa924665e..67d54cf0b0b 100644
--- a/source/gameengine/Ketsji/KX_IPO_SGController.cpp
+++ b/source/gameengine/Ketsji/KX_IPO_SGController.cpp
@@ -59,7 +59,9 @@ KX_IpoSGController::KX_IpoSGController()
m_ipo_local(false),
m_modified(true),
m_ipo_start_initialized(false),
- m_ipotime(1.0)
+ m_ipotime(1.0),
+ m_ipo_start_euler(0.0,0.0,0.0),
+ m_ipo_euler_initialized(false)
{
m_game_object = NULL;
for (int i=0; i < KX_MAX_IPO_CHANNELS; i++)
@@ -136,6 +138,11 @@ bool KX_IpoSGController::Update(double currentTime)
m_ipo_start_orient = ob->GetLocalOrientation();
m_ipo_start_scale = ob->GetLocalScale();
m_ipo_start_initialized = true;
+ if (!m_ipo_euler_initialized) {
+ // do it only once to avoid angle discontinuities
+ m_ipo_start_orient.getEuler(m_ipo_start_euler[0], m_ipo_start_euler[1], m_ipo_start_euler[2]);
+ m_ipo_euler_initialized = true;
+ }
}
//modifies position?
@@ -143,7 +150,7 @@ bool KX_IpoSGController::Update(double currentTime)
{
if (m_ipo_as_force == true)
{
- if (m_game_object && ob)
+ if (m_game_object && ob && m_game_object->GetPhysicsController())
{
m_game_object->GetPhysicsController()->ApplyForce(m_ipo_local ?
ob->GetWorldOrientation() * m_ipo_xform.GetPosition() :
@@ -199,51 +206,87 @@ bool KX_IpoSGController::Update(double currentTime)
ob->GetWorldOrientation() * m_ipo_xform.GetEulerAngles() :
m_ipo_xform.GetEulerAngles(), false);
}
- } else {
- double yaw=0, pitch=0, roll=0; //final Euler angles
- double tempYaw=0, tempPitch=0, tempRoll=0; //temp holders
- if (!m_ipo_add)
- ob->GetLocalOrientation().getEuler(yaw, pitch, roll);
+ } else if (m_ipo_add) {
+ if (m_ipo_start_initialized) {
+ double yaw=0, pitch=0, roll=0; //delta Euler angles
- //RotX and dRotX
- if (m_ipo_channels_active[OB_ROT_X]) {
- yaw = (m_ipo_channels_active[OB_DROT_X] ? (m_ipo_xform.GetEulerAngles()[0] + m_ipo_xform.GetDeltaEulerAngles()[0]) : m_ipo_xform.GetEulerAngles()[0] );
- }
- else if (m_ipo_channels_active[OB_DROT_X] && m_ipo_start_initialized) {
- if (!m_ipo_add)
- m_ipo_start_orient.getEuler(tempYaw, tempPitch, tempRoll);
- yaw = tempYaw + m_ipo_xform.GetDeltaEulerAngles()[0];
- }
+ //RotX and dRotX
+ if (m_ipo_channels_active[OB_ROT_X])
+ yaw += m_ipo_xform.GetEulerAngles()[0];
+ if (m_ipo_channels_active[OB_DROT_X])
+ yaw += m_ipo_xform.GetDeltaEulerAngles()[0];
+
+ //RotY dRotY
+ if (m_ipo_channels_active[OB_ROT_Y])
+ pitch += m_ipo_xform.GetEulerAngles()[1];
+ if (m_ipo_channels_active[OB_DROT_Y])
+ pitch += m_ipo_xform.GetDeltaEulerAngles()[1];
+
+ //RotZ and dRotZ
+ if (m_ipo_channels_active[OB_ROT_Z])
+ roll += m_ipo_xform.GetEulerAngles()[2];
+ if (m_ipo_channels_active[OB_DROT_Z])
+ roll += m_ipo_xform.GetDeltaEulerAngles()[2];
- //RotY dRotY
- if (m_ipo_channels_active[OB_ROT_Y]) {
- pitch = (m_ipo_channels_active[OB_DROT_Y] ? (m_ipo_xform.GetEulerAngles()[1] + m_ipo_xform.GetDeltaEulerAngles()[1]) : m_ipo_xform.GetEulerAngles()[1] );
- }
- else if (m_ipo_channels_active[OB_DROT_Y] && m_ipo_start_initialized) {
- if (!m_ipo_add)
- m_ipo_start_orient.getEuler(tempYaw, tempPitch, tempRoll);
- pitch = tempPitch + m_ipo_xform.GetDeltaEulerAngles()[1];
- }
-
- //RotZ and dRotZ
- if (m_ipo_channels_active[OB_ROT_Z]) {
- roll = (m_ipo_channels_active[OB_DROT_Z] ? (m_ipo_xform.GetEulerAngles()[2] + m_ipo_xform.GetDeltaEulerAngles()[2]) : m_ipo_xform.GetEulerAngles()[2] );
- }
- else if (m_ipo_channels_active[OB_DROT_Z] && m_ipo_start_initialized) {
- if (!m_ipo_add)
- m_ipo_start_orient.getEuler(tempYaw, tempPitch, tempRoll);
- roll = tempRoll + m_ipo_xform.GetDeltaEulerAngles()[2];
- }
- if (m_ipo_add) {
MT_Matrix3x3 rotation(MT_Vector3(yaw, pitch, roll));
if (m_ipo_local)
rotation = m_ipo_start_orient * rotation;
else
rotation = rotation * m_ipo_start_orient;
ob->SetLocalOrientation(rotation);
- } else {
+ }
+ } else if (m_ipo_channels_active[OB_ROT_X] || m_ipo_channels_active[OB_ROT_Y] || m_ipo_channels_active[OB_ROT_Z]) {
+ if (m_ipo_euler_initialized) {
+ // assume all channel absolute
+ // All 3 channels should be specified but if they are not, we will take
+ // the value at the start of the game to avoid angle sign reversal
+ double yaw=m_ipo_start_euler[0], pitch=m_ipo_start_euler[1], roll=m_ipo_start_euler[2];
+
+ //RotX and dRotX
+ if (m_ipo_channels_active[OB_ROT_X]) {
+ yaw = (m_ipo_channels_active[OB_DROT_X] ? (m_ipo_xform.GetEulerAngles()[0] + m_ipo_xform.GetDeltaEulerAngles()[0]) : m_ipo_xform.GetEulerAngles()[0] );
+ }
+ else if (m_ipo_channels_active[OB_DROT_X]) {
+ yaw += m_ipo_xform.GetDeltaEulerAngles()[0];
+ }
+
+ //RotY dRotY
+ if (m_ipo_channels_active[OB_ROT_Y]) {
+ pitch = (m_ipo_channels_active[OB_DROT_Y] ? (m_ipo_xform.GetEulerAngles()[1] + m_ipo_xform.GetDeltaEulerAngles()[1]) : m_ipo_xform.GetEulerAngles()[1] );
+ }
+ else if (m_ipo_channels_active[OB_DROT_Y]) {
+ pitch += m_ipo_xform.GetDeltaEulerAngles()[1];
+ }
+
+ //RotZ and dRotZ
+ if (m_ipo_channels_active[OB_ROT_Z]) {
+ roll = (m_ipo_channels_active[OB_DROT_Z] ? (m_ipo_xform.GetEulerAngles()[2] + m_ipo_xform.GetDeltaEulerAngles()[2]) : m_ipo_xform.GetEulerAngles()[2] );
+ }
+ else if (m_ipo_channels_active[OB_DROT_Z]) {
+ roll += m_ipo_xform.GetDeltaEulerAngles()[2];
+ }
ob->SetLocalOrientation(MT_Vector3(yaw, pitch, roll));
}
+ } else if (m_ipo_start_initialized) {
+ // only DROT, treat as Add
+ double yaw=0, pitch=0, roll=0; //delta Euler angles
+
+ //dRotX
+ if (m_ipo_channels_active[OB_DROT_X])
+ yaw = m_ipo_xform.GetDeltaEulerAngles()[0];
+
+ //dRotY
+ if (m_ipo_channels_active[OB_DROT_Y])
+ pitch = m_ipo_xform.GetDeltaEulerAngles()[1];
+
+ //dRotZ
+ if (m_ipo_channels_active[OB_DROT_Z])
+ roll = m_ipo_xform.GetDeltaEulerAngles()[2];
+
+ // dRot are always local
+ MT_Matrix3x3 rotation(MT_Vector3(yaw, pitch, roll));
+ rotation = m_ipo_start_orient * rotation;
+ ob->SetLocalOrientation(rotation);
}
}
//modifies scale?
diff --git a/source/gameengine/Ketsji/KX_IPO_SGController.h b/source/gameengine/Ketsji/KX_IPO_SGController.h
index 0bd8980f11c..031b74294ce 100644
--- a/source/gameengine/Ketsji/KX_IPO_SGController.h
+++ b/source/gameengine/Ketsji/KX_IPO_SGController.h
@@ -72,6 +72,12 @@ class KX_IpoSGController : public SG_Controller
/** if IPO initial position has been set for local normal IPO */
bool m_ipo_start_initialized;
+ /** Euler angles at the start of the game, needed for incomplete ROT Ipo curves */
+ class MT_Vector3 m_ipo_start_euler;
+
+ /** true is m_ipo_start_euler has been initialized */
+ bool m_ipo_euler_initialized;
+
/** A reference to the original game object. */
class KX_GameObject* m_game_object;
diff --git a/source/gameengine/Ketsji/KX_IPhysicsController.h b/source/gameengine/Ketsji/KX_IPhysicsController.h
index ecfdb8c4275..4ea283e9f98 100644
--- a/source/gameengine/Ketsji/KX_IPhysicsController.h
+++ b/source/gameengine/Ketsji/KX_IPhysicsController.h
@@ -88,7 +88,11 @@ public:
m_bDyna = isDynamic;
}
+ bool IsDyna(void) {
+ return m_bDyna;
+ }
+ virtual MT_Scalar GetRadius()=0;
virtual void SetSumoTransform(bool nondynaonly)=0;
// todo: remove next line !
virtual void SetSimulatedTime(double time)=0;
diff --git a/source/gameengine/Ketsji/KX_ISceneConverter.h b/source/gameengine/Ketsji/KX_ISceneConverter.h
index f069048cd3d..3709fa8c784 100644
--- a/source/gameengine/Ketsji/KX_ISceneConverter.h
+++ b/source/gameengine/Ketsji/KX_ISceneConverter.h
@@ -32,6 +32,8 @@
#include "STR_String.h"
#include "KX_Python.h"
+struct Scene;
+
class KX_ISceneConverter
{
@@ -77,6 +79,8 @@ public:
// use blender glsl materials
virtual void SetGLSLMaterials(bool val) =0;
virtual bool GetGLSLMaterials()=0;
+
+ virtual struct Scene* GetBlenderSceneForName(const STR_String& name)=0;
};
#endif //__KX_ISCENECONVERTER_H
diff --git a/source/gameengine/Ketsji/KX_IpoActuator.cpp b/source/gameengine/Ketsji/KX_IpoActuator.cpp
index a203ea6a6ff..f5e17118ffb 100644
--- a/source/gameengine/Ketsji/KX_IpoActuator.cpp
+++ b/source/gameengine/Ketsji/KX_IpoActuator.cpp
@@ -37,6 +37,7 @@
#include "KX_IpoActuator.h"
#include "KX_GameObject.h"
+#include "FloatValue.h"
#ifdef HAVE_CONFIG_H
#include <config.h>
@@ -62,6 +63,7 @@ STR_String KX_IpoActuator::S_KX_ACT_IPO_FROM_PROP_STRING = "FromProp";
KX_IpoActuator::KX_IpoActuator(SCA_IObject* gameobj,
const STR_String& propname,
+ const STR_String& framePropname,
float starttime,
float endtime,
bool recurse,
@@ -78,6 +80,7 @@ KX_IpoActuator::KX_IpoActuator(SCA_IObject* gameobj,
m_localtime(starttime),
m_direction(1),
m_propname(propname),
+ m_framepropname(framePropname),
m_ipo_as_force(ipo_as_force),
m_ipo_add(ipo_add),
m_ipo_local(ipo_local),
@@ -130,7 +133,6 @@ void KX_IpoActuator::SetStartTime(float curtime)
{
float direction = m_startframe < m_endframe ? 1.0f : -1.0f;
- curtime = curtime - KX_KetsjiEngine::GetSuspendedDelta();
if (m_direction > 0)
m_starttime = curtime - direction*(m_localtime - m_startframe)/KX_KetsjiEngine::GetAnimFrameRate();
else
@@ -139,7 +141,7 @@ void KX_IpoActuator::SetStartTime(float curtime)
void KX_IpoActuator::SetLocalTime(float curtime)
{
- float delta_time = ((curtime - m_starttime) - KX_KetsjiEngine::GetSuspendedDelta())*KX_KetsjiEngine::GetAnimFrameRate();
+ float delta_time = (curtime - m_starttime)*KX_KetsjiEngine::GetAnimFrameRate();
// negative delta_time is caused by floating point inaccuracy
// perhaps the inaccuracy could be reduced a bit
@@ -165,6 +167,8 @@ bool KX_IpoActuator::Update(double curtime, bool frame)
int numevents = 0;
bool bIpoStart = false;
+ curtime -= KX_KetsjiEngine::GetSuspendedDelta();
+
if (frame)
{
numevents = m_events.size();
@@ -180,7 +184,7 @@ bool KX_IpoActuator::Update(double curtime, bool frame)
if (m_starttime < -2.0f*start_smaller_then_end*(m_endframe - m_startframe))
{
// start for all Ipo, initial start for LOOP_STOP
- m_starttime = curtime - KX_KetsjiEngine::GetSuspendedDelta();
+ m_starttime = curtime;
m_bIpoPlaying = true;
bIpoStart = true;
}
@@ -355,7 +359,20 @@ bool KX_IpoActuator::Update(double curtime, bool frame)
default:
result = false;
}
-
+
+ /* Set the property if its defined */
+ if (m_framepropname[0] != '\0') {
+ CValue* propowner = GetParent();
+ CValue* oldprop = propowner->GetProperty(m_framepropname);
+ CValue* newval = new CFloatValue(m_localtime);
+ if (oldprop) {
+ oldprop->SetValue(newval);
+ } else {
+ propowner->SetProperty(m_framepropname, newval);
+ }
+ newval->Release();
+ }
+
if (!result)
{
if (m_type != KX_ACT_IPO_LOOPSTOP)
@@ -423,34 +440,20 @@ PyParentObject KX_IpoActuator::Parents[] = {
};
PyMethodDef KX_IpoActuator::Methods[] = {
- {"set", (PyCFunction) KX_IpoActuator::sPySet,
- METH_VARARGS, Set_doc},
- {"setProperty", (PyCFunction) KX_IpoActuator::sPySetProperty,
- METH_VARARGS, SetProperty_doc},
- {"setStart", (PyCFunction) KX_IpoActuator::sPySetStart,
- METH_VARARGS, SetStart_doc},
- {"getStart", (PyCFunction) KX_IpoActuator::sPyGetStart,
- METH_NOARGS, GetStart_doc},
- {"setEnd", (PyCFunction) KX_IpoActuator::sPySetEnd,
- METH_VARARGS, SetEnd_doc},
- {"getEnd", (PyCFunction) KX_IpoActuator::sPyGetEnd,
- METH_NOARGS, GetEnd_doc},
- {"setIpoAsForce", (PyCFunction) KX_IpoActuator::sPySetIpoAsForce,
- METH_VARARGS, SetIpoAsForce_doc},
- {"getIpoAsForce", (PyCFunction) KX_IpoActuator::sPyGetIpoAsForce,
- METH_NOARGS, GetIpoAsForce_doc},
- {"setIpoAdd", (PyCFunction) KX_IpoActuator::sPySetIpoAdd,
- METH_VARARGS, SetIpoAdd_doc},
- {"getIpoAdd", (PyCFunction) KX_IpoActuator::sPyGetIpoAdd,
- METH_NOARGS, GetIpoAdd_doc},
- {"setType", (PyCFunction) KX_IpoActuator::sPySetType,
- METH_VARARGS, SetType_doc},
- {"getType", (PyCFunction) KX_IpoActuator::sPyGetType,
- METH_NOARGS, GetType_doc},
- {"setForceIpoActsLocal", (PyCFunction) KX_IpoActuator::sPySetForceIpoActsLocal,
- METH_VARARGS, SetForceIpoActsLocal_doc},
- {"getForceIpoActsLocal", (PyCFunction) KX_IpoActuator::sPyGetForceIpoActsLocal,
- METH_NOARGS, GetForceIpoActsLocal_doc},
+ {"set", (PyCFunction) KX_IpoActuator::sPySet, METH_VARARGS, (PY_METHODCHAR)Set_doc},
+ {"setProperty", (PyCFunction) KX_IpoActuator::sPySetProperty, METH_VARARGS, (PY_METHODCHAR)SetProperty_doc},
+ {"setStart", (PyCFunction) KX_IpoActuator::sPySetStart, METH_VARARGS, (PY_METHODCHAR)SetStart_doc},
+ {"getStart", (PyCFunction) KX_IpoActuator::sPyGetStart, METH_NOARGS, (PY_METHODCHAR)GetStart_doc},
+ {"setEnd", (PyCFunction) KX_IpoActuator::sPySetEnd, METH_VARARGS, (PY_METHODCHAR)SetEnd_doc},
+ {"getEnd", (PyCFunction) KX_IpoActuator::sPyGetEnd, METH_NOARGS, (PY_METHODCHAR)GetEnd_doc},
+ {"setIpoAsForce", (PyCFunction) KX_IpoActuator::sPySetIpoAsForce, METH_VARARGS, (PY_METHODCHAR)SetIpoAsForce_doc},
+ {"getIpoAsForce", (PyCFunction) KX_IpoActuator::sPyGetIpoAsForce, METH_NOARGS, (PY_METHODCHAR)GetIpoAsForce_doc},
+ {"setIpoAdd", (PyCFunction) KX_IpoActuator::sPySetIpoAdd, METH_VARARGS, (PY_METHODCHAR)SetIpoAdd_doc},
+ {"getIpoAdd", (PyCFunction) KX_IpoActuator::sPyGetIpoAdd, METH_NOARGS, (PY_METHODCHAR)GetIpoAdd_doc},
+ {"setType", (PyCFunction) KX_IpoActuator::sPySetType, METH_VARARGS, (PY_METHODCHAR)SetType_doc},
+ {"getType", (PyCFunction) KX_IpoActuator::sPyGetType, METH_NOARGS, (PY_METHODCHAR)GetType_doc},
+ {"setForceIpoActsLocal", (PyCFunction) KX_IpoActuator::sPySetForceIpoActsLocal, METH_VARARGS, (PY_METHODCHAR)SetForceIpoActsLocal_doc},
+ {"getForceIpoActsLocal", (PyCFunction) KX_IpoActuator::sPyGetForceIpoActsLocal, METH_NOARGS, (PY_METHODCHAR)GetForceIpoActsLocal_doc},
{NULL,NULL} //Sentinel
};
@@ -461,7 +464,7 @@ PyObject* KX_IpoActuator::_getattr(const STR_String& attr) {
/* set --------------------------------------------------------------------- */
-char KX_IpoActuator::Set_doc[] =
+const char KX_IpoActuator::Set_doc[] =
"set(type, startframe, endframe, mode?)\n"
"\t - type: Play, PingPong, Flipper, LoopStop, LoopEnd or FromProp (string)\n"
"\t - startframe: first frame to use (int)\n"
@@ -504,7 +507,7 @@ PyObject* KX_IpoActuator::PySet(PyObject* self,
}
/* set property ----------------------------------------------------------- */
-char KX_IpoActuator::SetProperty_doc[] =
+const char KX_IpoActuator::SetProperty_doc[] =
"setProperty(propname)\n"
"\t - propname: name of the property (string)\n"
"\tSet the property to be used in FromProp mode.\n";
@@ -524,7 +527,7 @@ PyObject* KX_IpoActuator::PySetProperty(PyObject* self,
}
/* 4. setStart: */
-char KX_IpoActuator::SetStart_doc[] =
+const char KX_IpoActuator::SetStart_doc[] =
"setStart(frame)\n"
"\t - frame: first frame to use (int)\n"
"\tSet the frame from which the ipo starts playing.\n";
@@ -541,7 +544,7 @@ PyObject* KX_IpoActuator::PySetStart(PyObject* self,
Py_Return;
}
/* 5. getStart: */
-char KX_IpoActuator::GetStart_doc[] =
+const char KX_IpoActuator::GetStart_doc[] =
"getStart()\n"
"\tReturns the frame from which the ipo starts playing.\n";
PyObject* KX_IpoActuator::PyGetStart(PyObject* self) {
@@ -549,7 +552,7 @@ PyObject* KX_IpoActuator::PyGetStart(PyObject* self) {
}
/* 6. setEnd: */
-char KX_IpoActuator::SetEnd_doc[] =
+const char KX_IpoActuator::SetEnd_doc[] =
"setEnd(frame)\n"
"\t - frame: last frame to use (int)\n"
"\tSet the frame at which the ipo stops playing.\n";
@@ -566,7 +569,7 @@ PyObject* KX_IpoActuator::PySetEnd(PyObject* self,
Py_Return;
}
/* 7. getEnd: */
-char KX_IpoActuator::GetEnd_doc[] =
+const char KX_IpoActuator::GetEnd_doc[] =
"getEnd()\n"
"\tReturns the frame at which the ipo stops playing.\n";
PyObject* KX_IpoActuator::PyGetEnd(PyObject* self) {
@@ -574,7 +577,7 @@ PyObject* KX_IpoActuator::PyGetEnd(PyObject* self) {
}
/* 6. setIpoAsForce: */
-char KX_IpoActuator::SetIpoAsForce_doc[] =
+const char KX_IpoActuator::SetIpoAsForce_doc[] =
"setIpoAsForce(force?)\n"
"\t - force? : interpret this ipo as a force? (KX_TRUE, KX_FALSE)\n"
"\tSet whether to interpret the ipo as a force rather than a displacement.\n";
@@ -594,7 +597,7 @@ PyObject* KX_IpoActuator::PySetIpoAsForce(PyObject* self,
Py_Return;
}
/* 7. getIpoAsForce: */
-char KX_IpoActuator::GetIpoAsForce_doc[] =
+const char KX_IpoActuator::GetIpoAsForce_doc[] =
"getIpoAsForce()\n"
"\tReturns whether to interpret the ipo as a force rather than a displacement.\n";
PyObject* KX_IpoActuator::PyGetIpoAsForce(PyObject* self) {
@@ -602,7 +605,7 @@ PyObject* KX_IpoActuator::PyGetIpoAsForce(PyObject* self) {
}
/* 6. setIpoAsForce: */
-char KX_IpoActuator::SetIpoAdd_doc[] =
+const char KX_IpoActuator::SetIpoAdd_doc[] =
"setIpoAdd(add?)\n"
"\t - add? : add flag (KX_TRUE, KX_FALSE)\n"
"\tSet whether to interpret the ipo as additive rather than absolute.\n";
@@ -622,7 +625,7 @@ PyObject* KX_IpoActuator::PySetIpoAdd(PyObject* self,
Py_Return;
}
/* 7. getIpoAsForce: */
-char KX_IpoActuator::GetIpoAdd_doc[] =
+const char KX_IpoActuator::GetIpoAdd_doc[] =
"getIpoAsAdd()\n"
"\tReturns whether to interpret the ipo as additive rather than absolute.\n";
PyObject* KX_IpoActuator::PyGetIpoAdd(PyObject* self) {
@@ -630,7 +633,7 @@ PyObject* KX_IpoActuator::PyGetIpoAdd(PyObject* self) {
}
/* 8. setType: */
-char KX_IpoActuator::SetType_doc[] =
+const char KX_IpoActuator::SetType_doc[] =
"setType(mode)\n"
"\t - mode: Play, PingPong, Flipper, LoopStop, LoopEnd or FromProp (string)\n"
"\tSet the operation mode of the actuator.\n";
@@ -651,7 +654,7 @@ PyObject* KX_IpoActuator::PySetType(PyObject* self,
Py_Return;
}
/* 9. getType: */
-char KX_IpoActuator::GetType_doc[] =
+const char KX_IpoActuator::GetType_doc[] =
"getType()\n"
"\tReturns the operation mode of the actuator.\n";
PyObject* KX_IpoActuator::PyGetType(PyObject* self) {
@@ -659,7 +662,7 @@ PyObject* KX_IpoActuator::PyGetType(PyObject* self) {
}
/* 10. setForceIpoActsLocal: */
-char KX_IpoActuator::SetForceIpoActsLocal_doc[] =
+const char KX_IpoActuator::SetForceIpoActsLocal_doc[] =
"setForceIpoActsLocal(local?)\n"
"\t - local? : Apply the ipo-as-force in the object's local\n"
"\t coordinates? (KX_TRUE, KX_FALSE)\n"
@@ -679,7 +682,7 @@ PyObject* KX_IpoActuator::PySetForceIpoActsLocal(PyObject* self,
Py_Return;
}
/* 11. getForceIpoActsLocal: */
-char KX_IpoActuator::GetForceIpoActsLocal_doc[] =
+const char KX_IpoActuator::GetForceIpoActsLocal_doc[] =
"getForceIpoActsLocal()\n"
"\tReturn whether to apply the force in the object's local\n"
"\tcoordinates rather than the world global coordinates.\n";
diff --git a/source/gameengine/Ketsji/KX_IpoActuator.h b/source/gameengine/Ketsji/KX_IpoActuator.h
index d6f52f8d59d..8e5baed0530 100644
--- a/source/gameengine/Ketsji/KX_IpoActuator.h
+++ b/source/gameengine/Ketsji/KX_IpoActuator.h
@@ -72,6 +72,9 @@ protected:
/** Name of the property (only used in from_prop mode). */
STR_String m_propname;
+ /** Name of the property where we write the current frame number */
+ STR_String m_framepropname;
+
/** Interpret the ipo as a force? */
bool m_ipo_as_force;
@@ -111,6 +114,7 @@ public:
KX_IpoActuator(SCA_IObject* gameobj,
const STR_String& propname,
+ const STR_String& framePropname,
float starttime,
float endtime,
bool recurse,
diff --git a/source/gameengine/Ketsji/KX_KetsjiEngine.cpp b/source/gameengine/Ketsji/KX_KetsjiEngine.cpp
index 1d6cc975ab5..b1ab8e3e7de 100644
--- a/source/gameengine/Ketsji/KX_KetsjiEngine.cpp
+++ b/source/gameengine/Ketsji/KX_KetsjiEngine.cpp
@@ -96,6 +96,7 @@ double KX_KetsjiEngine::m_ticrate = DEFAULT_LOGIC_TIC_RATE;
double KX_KetsjiEngine::m_anim_framerate = 25.0;
double KX_KetsjiEngine::m_suspendedtime = 0.0;
double KX_KetsjiEngine::m_suspendeddelta = 0.0;
+double KX_KetsjiEngine::m_average_framerate = 0.0;
/**
@@ -134,6 +135,8 @@ KX_KetsjiEngine::KX_KetsjiEngine(KX_ISystem* system)
m_overrideCam(false),
m_overrideCamUseOrtho(false),
+ m_overrideCamNear(0.0),
+ m_overrideCamFar(0.0),
m_stereo(false),
m_curreye(0),
@@ -275,30 +278,73 @@ void KX_KetsjiEngine::StartEngine(bool clearIpo)
}
-bool KX_KetsjiEngine::BeginFrame()
+void KX_KetsjiEngine::ClearFrame()
{
- bool result = false;
+ // clear unless we're drawing overlapping stereo
+ if(m_rasterizer->InterlacedStereo() &&
+ m_rasterizer->GetEye() == RAS_IRasterizer::RAS_STEREO_RIGHTEYE)
+ return;
- RAS_Rect vp;
- KX_Scene* firstscene = *m_scenes.begin();
- const RAS_FrameSettings &framesettings = firstscene->GetFramingType();
+ // clear the viewports with the background color of the first scene
+ bool doclear = false;
+ KX_SceneList::iterator sceneit;
+ RAS_Rect clearvp, area, viewport;
- // set the area used for rendering
- m_rasterizer->SetRenderArea();
+ for (sceneit = m_scenes.begin(); sceneit != m_scenes.end(); sceneit++)
+ {
+ KX_Scene* scene = *sceneit;
+ //const RAS_FrameSettings &framesettings = scene->GetFramingType();
+ list<class KX_Camera*>* cameras = scene->GetCameras();
+
+ list<KX_Camera*>::iterator it;
+ for(it = cameras->begin(); it != cameras->end(); it++)
+ {
+ GetSceneViewport(scene, (*it), area, viewport);
+
+ if(!doclear) {
+ clearvp = viewport;
+ doclear = true;
+ }
+ else {
+ if(viewport.GetLeft() < clearvp.GetLeft())
+ clearvp.SetLeft(viewport.GetLeft());
+ if(viewport.GetBottom() < clearvp.GetBottom())
+ clearvp.SetBottom(viewport.GetBottom());
+ if(viewport.GetRight() > clearvp.GetRight())
+ clearvp.SetRight(viewport.GetRight());
+ if(viewport.GetTop() > clearvp.GetTop())
+ clearvp.SetTop(viewport.GetTop());
+
+ }
+ }
+ }
+
+ if(doclear) {
+ KX_Scene* firstscene = *m_scenes.begin();
+ SetBackGround(firstscene->GetWorldInfo());
+
+ m_canvas->SetViewPort(clearvp.GetLeft(), clearvp.GetBottom(),
+ clearvp.GetRight(), clearvp.GetTop());
+ m_rasterizer->ClearColorBuffer();
+ }
+}
- RAS_FramingManager::ComputeViewport(framesettings, m_canvas->GetDisplayArea(), vp);
+bool KX_KetsjiEngine::BeginFrame()
+{
+ // set the area used for rendering (stereo can assign only a subset)
+ m_rasterizer->SetRenderArea();
if (m_canvas->BeginDraw())
{
- result = true;
+ ClearFrame();
- m_canvas->SetViewPort(vp.GetLeft(), vp.GetBottom(), vp.GetRight(), vp.GetTop());
- SetBackGround( firstscene->GetWorldInfo() );
- m_rasterizer->BeginFrame( m_drawingmode , m_kxsystem->GetTimeInSeconds());
- m_rendertools->BeginFrame( m_rasterizer);
+ m_rasterizer->BeginFrame(m_drawingmode , m_kxsystem->GetTimeInSeconds());
+ m_rendertools->BeginFrame(m_rasterizer);
+
+ return true;
}
- return result;
+ return false;
}
@@ -310,6 +356,12 @@ void KX_KetsjiEngine::EndFrame()
{
RenderDebugProperties();
}
+
+ m_average_framerate = m_logger->GetAverage();
+ if (m_average_framerate < 1e-6)
+ m_average_framerate = 1e-6;
+ m_average_framerate = 1.0/m_average_framerate;
+
// Go to next profiling measurement, time spend after this call is shown in the next frame.
m_logger->NextMeasurement(m_kxsystem->GetTimeInSeconds());
@@ -321,8 +373,6 @@ void KX_KetsjiEngine::EndFrame()
m_canvas->EndDraw();
-
-
}
//#include "PIL_time.h"
@@ -601,7 +651,7 @@ void KX_KetsjiEngine::Render()
);
}
// clear the -whole- viewport
- m_canvas->ClearBuffer(RAS_ICanvas::COLOR_BUFFER);
+ m_canvas->ClearBuffer(RAS_ICanvas::COLOR_BUFFER|RAS_ICanvas::DEPTH_BUFFER);
}
m_rasterizer->SetEye(RAS_IRasterizer::RAS_STEREO_LEFTEYE);
@@ -630,9 +680,6 @@ void KX_KetsjiEngine::Render()
m_rendertools->SetAuxilaryClientInfo(scene);
- //Initialize scene viewport.
- SetupRenderFrame(scene, cam);
-
// do the rendering
RenderFrame(scene, cam);
}
@@ -650,9 +697,6 @@ void KX_KetsjiEngine::Render()
m_rendertools->SetAuxilaryClientInfo(scene);
- //Initialize scene viewport.
- SetupRenderFrame(scene, (*it));
-
// do the rendering
RenderFrame(scene, (*it));
}
@@ -685,10 +729,6 @@ void KX_KetsjiEngine::Render()
//pass the scene, for picking and raycasting (shadows)
m_rendertools->SetAuxilaryClientInfo(scene);
- //Initialize scene viewport.
- //SetupRenderFrame(scene);
- SetupRenderFrame(scene, cam);
-
// do the rendering
//RenderFrame(scene);
RenderFrame(scene, cam);
@@ -848,8 +888,13 @@ void KX_KetsjiEngine::SetCameraOverrideViewMatrix(const MT_CmMatrix4x4& mat)
m_overrideCamViewMat = mat;
}
-
-void KX_KetsjiEngine::SetupRenderFrame(KX_Scene *scene, KX_Camera* cam)
+void KX_KetsjiEngine::SetCameraOverrideClipping(float near, float far)
+{
+ m_overrideCamNear = near;
+ m_overrideCamFar = far;
+}
+
+void KX_KetsjiEngine::GetSceneViewport(KX_Scene *scene, KX_Camera* cam, RAS_Rect& area, RAS_Rect& viewport)
{
// In this function we make sure the rasterizer settings are upto
// date. We compute the viewport so that logic
@@ -857,17 +902,26 @@ void KX_KetsjiEngine::SetupRenderFrame(KX_Scene *scene, KX_Camera* cam)
// Note we postpone computation of the projection matrix
// so that we are using the latest camera position.
+ if (cam->GetViewport()) {
+ RAS_Rect userviewport;
- RAS_Rect viewport;
+ userviewport.SetLeft(cam->GetViewportLeft());
+ userviewport.SetBottom(cam->GetViewportBottom());
+ userviewport.SetRight(cam->GetViewportRight());
+ userviewport.SetTop(cam->GetViewportTop());
- if (!cam)
- return;
+ // Don't do bars on user specified viewport
+ RAS_FrameSettings settings = scene->GetFramingType();
+ if(settings.FrameType() == RAS_FrameSettings::e_frame_bars)
+ settings.SetFrameType(RAS_FrameSettings::e_frame_extend);
- if (cam->GetViewport()) {
- viewport.SetLeft(cam->GetViewportLeft());
- viewport.SetBottom(cam->GetViewportBottom());
- viewport.SetRight(cam->GetViewportRight());
- viewport.SetTop(cam->GetViewportTop());
+ RAS_FramingManager::ComputeViewport(
+ scene->GetFramingType(),
+ userviewport,
+ viewport
+ );
+
+ area = userviewport;
}
else if ( m_overrideCam || (scene->GetName() != m_overrideSceneName) || m_overrideCamUseOrtho ) {
RAS_FramingManager::ComputeViewport(
@@ -875,33 +929,32 @@ void KX_KetsjiEngine::SetupRenderFrame(KX_Scene *scene, KX_Camera* cam)
m_canvas->GetDisplayArea(),
viewport
);
+
+ area = m_canvas->GetDisplayArea();
} else {
viewport.SetLeft(0);
viewport.SetBottom(0);
viewport.SetRight(int(m_canvas->GetWidth()));
viewport.SetTop(int(m_canvas->GetHeight()));
- }
- // store the computed viewport in the scene
-
- scene->SetSceneViewport(viewport);
-
- // set the viewport for this frame and scene
- m_canvas->SetViewPort(
- viewport.GetLeft(),
- viewport.GetBottom(),
- viewport.GetRight(),
- viewport.GetTop()
- );
+ area = m_canvas->GetDisplayArea();
+ }
}
void KX_KetsjiEngine::RenderShadowBuffers(KX_Scene *scene)
{
- CListValue *lightlist = scene->GetLightList();
+ CListValue *objectlist = scene->GetObjectList();
int i, drawmode;
- for(i=0; i<lightlist->GetCount(); i++) {
- KX_LightObject *light = (KX_LightObject*)lightlist->GetValue(i);
+ m_rendertools->SetAuxilaryClientInfo(scene);
+
+ for(i=0; i<objectlist->GetCount(); i++) {
+ KX_GameObject *gameobj = (KX_GameObject*)objectlist->GetValue(i);
+
+ if(!gameobj->IsLight())
+ continue;
+
+ KX_LightObject *light = (KX_LightObject*)gameobj;
light->Update();
@@ -939,18 +992,32 @@ void KX_KetsjiEngine::RenderShadowBuffers(KX_Scene *scene)
// update graphics
void KX_KetsjiEngine::RenderFrame(KX_Scene* scene, KX_Camera* cam)
{
+ bool override_camera;
+ RAS_Rect viewport, area;
float left, right, bottom, top, nearfrust, farfrust, focallength;
const float ortho = 100.0;
// KX_Camera* cam = scene->GetActiveCamera();
if (!cam)
return;
+
+ GetSceneViewport(scene, cam, area, viewport);
+
+ // store the computed viewport in the scene
+ scene->SetSceneViewport(viewport);
+
+ // set the viewport for this frame and scene
+ m_canvas->SetViewPort(viewport.GetLeft(), viewport.GetBottom(),
+ viewport.GetRight(), viewport.GetTop());
// see KX_BlenderMaterial::Activate
//m_rasterizer->SetAmbient();
m_rasterizer->DisplayFog();
- if (m_overrideCam && (scene->GetName() == m_overrideSceneName) && m_overrideCamUseOrtho) {
+ override_camera = m_overrideCam && (scene->GetName() == m_overrideSceneName);
+ override_camera = override_camera && (cam->GetName() == "__default__cam__");
+
+ if (override_camera && m_overrideCamUseOrtho) {
MT_CmMatrix4x4 projmat = m_overrideCamProjMat;
m_rasterizer->SetProjectionMatrix(projmat);
} else if (cam->hasValidProjectionMatrix() && !cam->GetViewport() )
@@ -960,12 +1027,17 @@ void KX_KetsjiEngine::RenderFrame(KX_Scene* scene, KX_Camera* cam)
{
RAS_FrameFrustum frustum;
float lens = cam->GetLens();
+ bool orthographic = !cam->GetCameraData()->m_perspective;
nearfrust = cam->GetCameraNear();
farfrust = cam->GetCameraFar();
focallength = cam->GetFocalLength();
- if (!cam->GetCameraData()->m_perspective)
- {
+ if(override_camera) {
+ nearfrust = m_overrideCamNear;
+ farfrust = m_overrideCamFar;
+ }
+
+ if (orthographic) {
lens *= ortho;
nearfrust = (nearfrust + 1.0)*ortho;
farfrust *= ortho;
@@ -973,8 +1045,8 @@ void KX_KetsjiEngine::RenderFrame(KX_Scene* scene, KX_Camera* cam)
RAS_FramingManager::ComputeFrustum(
scene->GetFramingType(),
- m_canvas->GetDisplayArea(),
- scene->GetSceneViewport(),
+ area,
+ viewport,
lens,
nearfrust,
farfrust,
@@ -990,7 +1062,7 @@ void KX_KetsjiEngine::RenderFrame(KX_Scene* scene, KX_Camera* cam)
MT_Matrix4x4 projmat = m_rasterizer->GetFrustumMatrix(
left, right, bottom, top, nearfrust, farfrust, focallength);
-
+
cam->SetProjectionMatrix(projmat);
// Otherwise the projection matrix for each eye will be the same...
@@ -1171,19 +1243,49 @@ void KX_KetsjiEngine::RenderDebugProperties()
CValue* propobj = (*it)->m_obj;
STR_String objname = propobj->GetName();
STR_String propname = (*it)->m_name;
- CValue* propval = propobj->GetProperty(propname);
- if (propval)
+ if (propname == "__state__")
{
- STR_String text = propval->GetText();
- debugtxt = objname + "." + propname + " = " + text;
+ // reserve name for object state
+ KX_GameObject* gameobj = static_cast<KX_GameObject*>(propobj);
+ unsigned int state = gameobj->GetState();
+ debugtxt = objname + "." + propname + " = ";
+ bool first = true;
+ for (int statenum=1;state;state >>= 1, statenum++)
+ {
+ if (state & 1)
+ {
+ if (!first)
+ {
+ debugtxt += ",";
+ }
+ debugtxt += STR_String(statenum);
+ first = false;
+ }
+ }
m_rendertools->RenderText2D(RAS_IRenderTools::RAS_TEXT_PADDED,
- debugtxt.Ptr(),
- xcoord,
- ycoord,
- m_canvas->GetWidth(),
- m_canvas->GetHeight());
+ debugtxt.Ptr(),
+ xcoord,
+ ycoord,
+ m_canvas->GetWidth(),
+ m_canvas->GetHeight());
ycoord += 14;
}
+ else
+ {
+ CValue* propval = propobj->GetProperty(propname);
+ if (propval)
+ {
+ STR_String text = propval->GetText();
+ debugtxt = objname + "." + propname + " = " + text;
+ m_rendertools->RenderText2D(RAS_IRenderTools::RAS_TEXT_PADDED,
+ debugtxt.Ptr(),
+ xcoord,
+ ycoord,
+ m_canvas->GetWidth(),
+ m_canvas->GetHeight());
+ ycoord += 14;
+ }
+ }
}
}
}
@@ -1281,12 +1383,13 @@ void KX_KetsjiEngine::RemoveScheduledScenes()
KX_Scene* KX_KetsjiEngine::CreateScene(const STR_String& scenename)
{
-
+ Scene *scene = m_sceneconverter->GetBlenderSceneForName(scenename);
KX_Scene* tmpscene = new KX_Scene(m_keyboarddevice,
m_mousedevice,
m_networkdevice,
m_audiodevice,
- scenename);
+ scenename,
+ scene);
m_sceneconverter->ConvertScene(scenename,
tmpscene,
@@ -1442,6 +1545,11 @@ void KX_KetsjiEngine::SetAnimFrameRate(double framerate)
m_anim_framerate = framerate;
}
+double KX_KetsjiEngine::GetAverageFrameRate()
+{
+ return m_average_framerate;
+}
+
void KX_KetsjiEngine::SetTimingDisplay(bool frameRate, bool profile, bool properties)
{
m_show_framerate = frameRate;
diff --git a/source/gameengine/Ketsji/KX_KetsjiEngine.h b/source/gameengine/Ketsji/KX_KetsjiEngine.h
index 77b69ec2d9e..1aa067a9962 100644
--- a/source/gameengine/Ketsji/KX_KetsjiEngine.h
+++ b/source/gameengine/Ketsji/KX_KetsjiEngine.h
@@ -124,6 +124,8 @@ private:
bool m_overrideCamUseOrtho;
MT_CmMatrix4x4 m_overrideCamProjMat;
MT_CmMatrix4x4 m_overrideCamViewMat;
+ float m_overrideCamNear;
+ float m_overrideCamFar;
bool m_stereo;
int m_curreye;
@@ -149,6 +151,8 @@ private:
/** Labels for profiling display. */
static const char m_profileLabels[tc_numCategories][15];
+ /** Last estimated framerate */
+ static double m_average_framerate;
/** Show the framerate on the game display? */
bool m_show_framerate;
/** Show profiling info on the game display? */
@@ -175,7 +179,6 @@ private:
/** Blue component of framing bar color. */
float m_overrideFrameColorB;
- void SetupRenderFrame(KX_Scene *scene, KX_Camera* cam);
void RenderFrame(KX_Scene* scene, KX_Camera* cam);
void PostRenderFrame();
void RenderDebugProperties();
@@ -226,6 +229,8 @@ public:
void SuspendScene(const STR_String& scenename);
void ResumeScene(const STR_String& scenename);
+ void GetSceneViewport(KX_Scene* scene, KX_Camera* cam, RAS_Rect& area, RAS_Rect& viewport);
+
void SetDrawType(int drawingtype);
void SetCameraZoom(float camzoom);
@@ -234,6 +239,7 @@ public:
void SetCameraOverrideUseOrtho(bool useOrtho);
void SetCameraOverrideProjectionMatrix(const MT_CmMatrix4x4& mat);
void SetCameraOverrideViewMatrix(const MT_CmMatrix4x4& mat);
+ void SetCameraOverrideClipping(float near, float far);
/**
* Sets display of all frames.
@@ -272,6 +278,11 @@ public:
static void SetAnimFrameRate(double framerate);
/**
+ * Gets the last estimated average framerate
+ */
+ static double GetAverageFrameRate();
+
+ /**
* Activates or deactivates timing information display.
* @param frameRate Display for frame rate on or off.
* @param profile Display for individual components on or off.
@@ -348,6 +359,7 @@ protected:
KX_Scene* CreateScene(const STR_String& scenename);
bool BeginFrame();
+ void ClearFrame();
void EndFrame();
};
diff --git a/source/gameengine/Ketsji/KX_Light.cpp b/source/gameengine/Ketsji/KX_Light.cpp
index 4e3d6180d22..e0f171e78e0 100644
--- a/source/gameengine/Ketsji/KX_Light.cpp
+++ b/source/gameengine/Ketsji/KX_Light.cpp
@@ -42,14 +42,13 @@
#include "KX_PyMath.h"
-#ifdef BLENDER_GLSL
+#include "DNA_object_types.h"
#include "GPU_material.h"
-#endif
KX_LightObject::KX_LightObject(void* sgReplicationInfo,SG_Callbacks callbacks,
class RAS_IRenderTools* rendertools,
const RAS_LightObject& lightobj,
- struct GPULamp *gpulamp,
+ bool glsl,
PyTypeObject* T
)
:
@@ -59,12 +58,20 @@ KX_LightObject::KX_LightObject(void* sgReplicationInfo,SG_Callbacks callbacks,
m_lightobj = lightobj;
m_lightobj.m_worldmatrix = GetOpenGLMatrixPtr();
m_rendertools->AddLight(&m_lightobj);
- m_gpulamp = gpulamp;
+ m_glsl = glsl;
+ m_blenderscene = ((KX_Scene*)sgReplicationInfo)->GetBlenderScene();
};
KX_LightObject::~KX_LightObject()
{
+ GPULamp *lamp;
+
+ if((lamp = GetGPULamp())) {
+ float obmat[4][4] = {{0}};
+ GPU_lamp_update(lamp, 0, obmat);
+ }
+
m_rendertools->RemoveLight(&m_lightobj);
}
@@ -73,7 +80,7 @@ CValue* KX_LightObject::GetReplica()
{
KX_LightObject* replica = new KX_LightObject(*this);
-
+
// this will copy properties and so on...
CValue::AddDataToReplica(replica);
@@ -81,13 +88,23 @@ CValue* KX_LightObject::GetReplica()
replica->m_lightobj.m_worldmatrix = replica->GetOpenGLMatrixPtr();
m_rendertools->AddLight(&replica->m_lightobj);
+
return replica;
}
+GPULamp *KX_LightObject::GetGPULamp()
+{
+ if(m_glsl)
+ return GPU_lamp_from_blender(m_blenderscene, GetBlenderObject(), GetBlenderGroupObject());
+ else
+ return false;
+}
+
void KX_LightObject::Update()
{
-#ifdef BLENDER_GLSL
- if(m_gpulamp) {
+ GPULamp *lamp;
+
+ if((lamp = GetGPULamp())) {
float obmat[4][4];
double *dobmat = GetOpenGLMatrixPtr()->getPointer();
@@ -95,38 +112,39 @@ void KX_LightObject::Update()
for(int j=0; j<4; j++, dobmat++)
obmat[i][j] = (float)*dobmat;
- GPU_lamp_update(m_gpulamp, obmat);
+ GPU_lamp_update(lamp, m_lightobj.m_layer, obmat);
}
-#endif
}
bool KX_LightObject::HasShadowBuffer()
{
-#ifdef BLENDER_GLSL
- return (m_gpulamp && GPU_lamp_has_shadow_buffer(m_gpulamp));
-#else
- return false;
-#endif
+ GPULamp *lamp;
+
+ if((lamp = GetGPULamp()))
+ return GPU_lamp_has_shadow_buffer(lamp);
+ else
+ return false;
}
int KX_LightObject::GetShadowLayer()
{
-#ifdef BLENDER_GLSL
- if(m_gpulamp)
- return GPU_lamp_shadow_layer(m_gpulamp);
+ GPULamp *lamp;
+
+ if((lamp = GetGPULamp()))
+ return GPU_lamp_shadow_layer(lamp);
else
-#endif
return 0;
}
void KX_LightObject::BindShadowBuffer(RAS_IRasterizer *ras, KX_Camera *cam, MT_Transform& camtrans)
{
-#ifdef BLENDER_GLSL
+ GPULamp *lamp;
float viewmat[4][4], winmat[4][4];
int winsize;
/* bind framebuffer */
- GPU_lamp_shadow_buffer_bind(m_gpulamp, viewmat, &winsize, winmat);
+ lamp = GetGPULamp();
+ GPU_lamp_shadow_buffer_bind(lamp, viewmat, &winsize, winmat);
/* setup camera transformation */
MT_Matrix4x4 modelviewmat((float*)viewmat);
@@ -146,14 +164,12 @@ void KX_LightObject::BindShadowBuffer(RAS_IRasterizer *ras, KX_Camera *cam, MT_T
ras->SetProjectionMatrix(projectionmat);
ras->SetViewMatrix(modelviewmat, cam->NodeGetWorldPosition(),
cam->GetCameraLocation(), cam->GetCameraOrientation());
-#endif
}
void KX_LightObject::UnbindShadowBuffer(RAS_IRasterizer *ras)
{
-#ifdef BLENDER_GLSL
- GPU_lamp_shadow_buffer_unbind(m_gpulamp);
-#endif
+ GPULamp *lamp = GetGPULamp();
+ GPU_lamp_shadow_buffer_unbind(lamp);
}
PyObject* KX_LightObject::_getattr(const STR_String& attr)
diff --git a/source/gameengine/Ketsji/KX_Light.h b/source/gameengine/Ketsji/KX_Light.h
index 62eb26c61a8..e5dbf0b7f4a 100644
--- a/source/gameengine/Ketsji/KX_Light.h
+++ b/source/gameengine/Ketsji/KX_Light.h
@@ -33,6 +33,7 @@
#include "KX_GameObject.h"
struct GPULamp;
+struct Scene;
class KX_Camera;
class RAS_IRasterizer;
class RAS_IRenderTools;
@@ -44,16 +45,18 @@ class KX_LightObject : public KX_GameObject
protected:
RAS_LightObject m_lightobj;
class RAS_IRenderTools* m_rendertools; //needed for registering and replication of lightobj
- struct GPULamp *m_gpulamp;
- static char doc[];
+ bool m_glsl;
+ Scene* m_blenderscene;
+ static char doc[];
public:
- KX_LightObject(void* sgReplicationInfo,SG_Callbacks callbacks,class RAS_IRenderTools* rendertools,const struct RAS_LightObject& lightobj, struct GPULamp *gpulamp, PyTypeObject *T = &Type);
+ KX_LightObject(void* sgReplicationInfo,SG_Callbacks callbacks,class RAS_IRenderTools* rendertools,const struct RAS_LightObject& lightobj, bool glsl, PyTypeObject *T = &Type);
virtual ~KX_LightObject();
virtual CValue* GetReplica();
RAS_LightObject* GetLightData() { return &m_lightobj;}
/* GLSL shadow */
+ struct GPULamp *GetGPULamp();
bool HasShadowBuffer();
int GetShadowLayer();
void BindShadowBuffer(class RAS_IRasterizer *ras, class KX_Camera *cam, class MT_Transform& camtrans);
@@ -62,6 +65,8 @@ public:
virtual PyObject* _getattr(const STR_String& attr); /* lens, near, far, projection_matrix */
virtual int _setattr(const STR_String& attr, PyObject *pyvalue);
+
+ virtual bool IsLight(void) { return true; }
};
#endif //__KX_LIGHT
diff --git a/source/gameengine/Ketsji/KX_MaterialIpoController.cpp b/source/gameengine/Ketsji/KX_MaterialIpoController.cpp
index 2ce5d469380..85d514bd22f 100644
--- a/source/gameengine/Ketsji/KX_MaterialIpoController.cpp
+++ b/source/gameengine/Ketsji/KX_MaterialIpoController.cpp
@@ -3,6 +3,8 @@
#include "KX_ScalarInterpolator.h"
#include "KX_GameObject.h"
+#include "BLO_sys_types.h" // for intptr_t support
+
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
@@ -76,10 +78,10 @@ SG_Controller* KX_MaterialIpoController::GetReplica(class SG_Node* destnode)
iporeplica->AddInterpolator(copyipo);
MT_Scalar* scaal = ((KX_ScalarInterpolator*)*i)->GetTarget();
- long orgbase = (long)this;
- long orgloc = (long)scaal;
- long offset = orgloc-orgbase;
- long newaddrbase = (long)iporeplica + offset;
+ intptr_t orgbase = (intptr_t)this;
+ intptr_t orgloc = (intptr_t)scaal;
+ intptr_t offset = orgloc-orgbase;
+ intptr_t newaddrbase = (intptr_t)iporeplica + offset;
MT_Scalar* blaptr = (MT_Scalar*) newaddrbase;
copyipo->SetNewTarget((MT_Scalar*)blaptr);
}
diff --git a/source/gameengine/Ketsji/KX_MeshProxy.cpp b/source/gameengine/Ketsji/KX_MeshProxy.cpp
index a0ac9cfd4ff..5cc102248f2 100644
--- a/source/gameengine/Ketsji/KX_MeshProxy.cpp
+++ b/source/gameengine/Ketsji/KX_MeshProxy.cpp
@@ -35,6 +35,7 @@
#include "RAS_MeshObject.h"
#include "KX_VertexProxy.h"
+#include "KX_PolyProxy.h"
#include "KX_PolygonMaterial.h"
#include "KX_BlenderMaterial.h"
@@ -42,6 +43,8 @@
#include "KX_PyMath.h"
#include "KX_ConvertPhysicsObject.h"
+#include "PyObjectPlus.h"
+
PyTypeObject KX_MeshProxy::Type = {
PyObject_HEAD_INIT(&PyType_Type)
0,
@@ -71,10 +74,12 @@ PyParentObject KX_MeshProxy::Parents[] = {
PyMethodDef KX_MeshProxy::Methods[] = {
{"getNumMaterials", (PyCFunction)KX_MeshProxy::sPyGetNumMaterials,METH_VARARGS},
+{"getNumPolygons", (PyCFunction)KX_MeshProxy::sPyGetNumPolygons,METH_NOARGS},
{"getMaterialName", (PyCFunction)KX_MeshProxy::sPyGetMaterialName,METH_VARARGS},
{"getTextureName", (PyCFunction)KX_MeshProxy::sPyGetTextureName,METH_VARARGS},
{"getVertexArrayLength", (PyCFunction)KX_MeshProxy::sPyGetVertexArrayLength,METH_VARARGS},
{"getVertex", (PyCFunction)KX_MeshProxy::sPyGetVertex,METH_VARARGS},
+{"getPolygon", (PyCFunction)KX_MeshProxy::sPyGetPolygon,METH_VARARGS},
KX_PYMETHODTABLE(KX_MeshProxy, reinstancePhysicsMesh),
//{"getIndexArrayLength", (PyCFunction)KX_MeshProxy::sPyGetIndexArrayLength,METH_VARARGS},
@@ -93,10 +98,11 @@ KX_MeshProxy::_getattr(const STR_String& attr)
if (attr == "materials")
{
PyObject *materials = PyList_New(0);
- RAS_MaterialBucket::Set::iterator mit = m_meshobj->GetFirstMaterial();
+ list<RAS_MeshMaterial>::iterator mit = m_meshobj->GetFirstMaterial();
for(; mit != m_meshobj->GetLastMaterial(); ++mit)
{
- RAS_IPolyMaterial *polymat = (*mit)->GetPolyMaterial();
+ RAS_IPolyMaterial *polymat = mit->m_bucket->GetPolyMaterial();
+
if(polymat->GetFlag() & RAS_BLENDERMAT)
{
KX_BlenderMaterial *mat = static_cast<KX_BlenderMaterial*>(polymat);
@@ -146,6 +152,12 @@ PyObject* KX_MeshProxy::PyGetNumMaterials(PyObject* self,
return PyInt_FromLong(num);
}
+PyObject* KX_MeshProxy::PyGetNumPolygons(PyObject* self)
+{
+ int num = m_meshobj->NumPolygons();
+ return PyInt_FromLong(num);
+}
+
PyObject* KX_MeshProxy::PyGetMaterialName(PyObject* self,
PyObject* args,
PyObject* kwds)
@@ -195,11 +207,11 @@ PyObject* KX_MeshProxy::PyGetVertexArrayLength(PyObject* self,
if (PyArg_ParseTuple(args,"i",&matid))
{
- RAS_IPolyMaterial* mat = m_meshobj->GetMaterialBucket(matid)->GetPolyMaterial();
+ RAS_MeshMaterial *mmat = m_meshobj->GetMeshMaterial(matid);
+ RAS_IPolyMaterial* mat = mmat->m_bucket->GetPolyMaterial();
+
if (mat)
- {
- length = m_meshobj->GetVertexArrayLength(mat);
- }
+ length = m_meshobj->NumVertices(mat);
}
else {
return NULL;
@@ -234,6 +246,28 @@ PyObject* KX_MeshProxy::PyGetVertex(PyObject* self,
}
+PyObject* KX_MeshProxy::PyGetPolygon(PyObject* self,
+ PyObject* args,
+ PyObject* kwds)
+{
+ int polyindex= 1;
+ PyObject* polyob = NULL;
+
+ if (!PyArg_ParseTuple(args,"i",&polyindex))
+ return NULL;
+
+ RAS_Polygon* polygon = m_meshobj->GetPolygon(polyindex);
+ if (polygon)
+ {
+ polyob = new KX_PolyProxy(m_meshobj, polygon);
+ }
+ else
+ {
+ PyErr_SetString(PyExc_AttributeError, "Invalid polygon index");
+ }
+ return polyob;
+}
+
KX_PYMETHODDEF_DOC(KX_MeshProxy, reinstancePhysicsMesh,
"Reinstance the physics mesh.")
{
diff --git a/source/gameengine/Ketsji/KX_MeshProxy.h b/source/gameengine/Ketsji/KX_MeshProxy.h
index 7c6202c15a4..3335c349673 100644
--- a/source/gameengine/Ketsji/KX_MeshProxy.h
+++ b/source/gameengine/Ketsji/KX_MeshProxy.h
@@ -57,10 +57,12 @@ public:
KX_PYMETHOD(KX_MeshProxy,GetNumMaterials);
KX_PYMETHOD(KX_MeshProxy,GetMaterialName);
KX_PYMETHOD(KX_MeshProxy,GetTextureName);
+ KX_PYMETHOD_NOARGS(KX_MeshProxy,GetNumPolygons);
// both take materialid (int)
KX_PYMETHOD(KX_MeshProxy,GetVertexArrayLength);
KX_PYMETHOD(KX_MeshProxy,GetVertex);
+ KX_PYMETHOD(KX_MeshProxy,GetPolygon);
KX_PYMETHOD_DOC(KX_MeshProxy, reinstancePhysicsMesh);
};
diff --git a/source/gameengine/Ketsji/KX_MouseFocusSensor.cpp b/source/gameengine/Ketsji/KX_MouseFocusSensor.cpp
index db0bef8b7e1..28279b9a6b8 100644
--- a/source/gameengine/Ketsji/KX_MouseFocusSensor.cpp
+++ b/source/gameengine/Ketsji/KX_MouseFocusSensor.cpp
@@ -62,12 +62,14 @@ KX_MouseFocusSensor::KX_MouseFocusSensor(SCA_MouseManager* eventmgr,
int focusmode,
RAS_ICanvas* canvas,
KX_Scene* kxscene,
+ KX_KetsjiEngine *kxengine,
SCA_IObject* gameobj,
PyTypeObject* T)
: SCA_MouseSensor(eventmgr, startx, starty, mousemode, gameobj, T),
m_focusmode(focusmode),
m_gp_canvas(canvas),
- m_kxscene(kxscene)
+ m_kxscene(kxscene),
+ m_kxengine(kxengine)
{
Init();
}
@@ -122,16 +124,10 @@ bool KX_MouseFocusSensor::Evaluate(CValue* event)
return result;
}
-bool KX_MouseFocusSensor::RayHit(KX_ClientObjectInfo* client_info, MT_Point3& hit_point, MT_Vector3& hit_normal, void * const data)
+bool KX_MouseFocusSensor::RayHit(KX_ClientObjectInfo* client_info, KX_RayCast* result, void * const data)
{
KX_GameObject* hitKXObj = client_info->m_gameobject;
- if (client_info->m_type > KX_ClientObjectInfo::ACTOR)
- {
- // false hit
- return false;
- }
-
/* Is this me? In the ray test, there are a lot of extra checks
* for aliasing artefacts from self-hits. That doesn't happen
* here, so a simple test suffices. Or does the camera also get
@@ -142,8 +138,8 @@ bool KX_MouseFocusSensor::RayHit(KX_ClientObjectInfo* client_info, MT_Point3& hi
if ((m_focusmode == 2) || hitKXObj == thisObj)
{
m_hitObject = hitKXObj;
- m_hitPosition = hit_point;
- m_hitNormal = hit_normal;
+ m_hitPosition = result->m_hitPoint;
+ m_hitNormal = result->m_hitNormal;
return true;
}
@@ -158,8 +154,6 @@ bool KX_MouseFocusSensor::ParentObjectHasFocus(void)
m_hitObject = 0;
m_hitPosition = MT_Vector3(0,0,0);
m_hitNormal = MT_Vector3(1,0,0);
- MT_Point3 resultpoint;
- MT_Vector3 resultnormal;
/* All screen handling in the gameengine is done by GL,
* specifically the model/view and projection parts. The viewport
@@ -201,11 +195,14 @@ bool KX_MouseFocusSensor::ParentObjectHasFocus(void)
* calculations don't bomb. Maybe we should explicitly guard for
* division by 0.0...*/
- /**
- * Get the scenes current viewport.
- */
+ KX_Camera* cam = m_kxscene->GetActiveCamera();
- const RAS_Rect & viewport = m_kxscene->GetSceneViewport();
+ /* get the scenes current viewport. we recompute it because there
+ * may be multiple cameras and m_kxscene->GetSceneViewport() only
+ * has the one that was last drawn */
+
+ RAS_Rect area, viewport;
+ m_kxengine->GetSceneViewport(m_kxscene, cam, area, viewport);
float height = float(viewport.m_y2 - viewport.m_y1 + 1);
float width = float(viewport.m_x2 - viewport.m_x1 + 1);
@@ -213,9 +210,9 @@ bool KX_MouseFocusSensor::ParentObjectHasFocus(void)
float x_lb = float(viewport.m_x1);
float y_lb = float(viewport.m_y1);
- KX_Camera* cam = m_kxscene->GetActiveCamera();
/* There's some strangeness I don't fully get here... These values
* _should_ be wrong! */
+
/* old: */
float nearclip = 0.0;
@@ -280,7 +277,8 @@ bool KX_MouseFocusSensor::ParentObjectHasFocus(void)
bool result = false;
- result = KX_RayCast::RayTest(physics_controller, physics_environment, frompoint3, topoint3, resultpoint, resultnormal, KX_RayCast::Callback<KX_MouseFocusSensor>(this));
+ KX_RayCast::Callback<KX_MouseFocusSensor> callback(this,physics_controller);
+ KX_RayCast::RayTest(physics_environment, frompoint3, topoint3, callback);
result = (m_hitObject!=0);
@@ -322,14 +320,12 @@ PyParentObject KX_MouseFocusSensor::Parents[] = {
};
PyMethodDef KX_MouseFocusSensor::Methods[] = {
- {"getRayTarget", (PyCFunction) KX_MouseFocusSensor::sPyGetRayTarget,
- METH_VARARGS, GetRayTarget_doc},
- {"getRaySource", (PyCFunction) KX_MouseFocusSensor::sPyGetRaySource,
- METH_VARARGS, GetRaySource_doc},
- {"getHitObject",(PyCFunction) KX_MouseFocusSensor::sPyGetHitObject,METH_VARARGS, GetHitObject_doc},
- {"getHitPosition",(PyCFunction) KX_MouseFocusSensor::sPyGetHitPosition,METH_VARARGS, GetHitPosition_doc},
- {"getHitNormal",(PyCFunction) KX_MouseFocusSensor::sPyGetHitNormal,METH_VARARGS, GetHitNormal_doc},
- {"getRayDirection",(PyCFunction) KX_MouseFocusSensor::sPyGetRayDirection,METH_VARARGS, GetRayDirection_doc},
+ {"getRayTarget", (PyCFunction) KX_MouseFocusSensor::sPyGetRayTarget, METH_VARARGS, (PY_METHODCHAR)GetRayTarget_doc},
+ {"getRaySource", (PyCFunction) KX_MouseFocusSensor::sPyGetRaySource, METH_VARARGS, (PY_METHODCHAR)GetRaySource_doc},
+ {"getHitObject",(PyCFunction) KX_MouseFocusSensor::sPyGetHitObject,METH_VARARGS, (PY_METHODCHAR)GetHitObject_doc},
+ {"getHitPosition",(PyCFunction) KX_MouseFocusSensor::sPyGetHitPosition,METH_VARARGS, (PY_METHODCHAR)GetHitPosition_doc},
+ {"getHitNormal",(PyCFunction) KX_MouseFocusSensor::sPyGetHitNormal,METH_VARARGS, (PY_METHODCHAR)GetHitNormal_doc},
+ {"getRayDirection",(PyCFunction) KX_MouseFocusSensor::sPyGetRayDirection,METH_VARARGS, (PY_METHODCHAR)GetRayDirection_doc},
{NULL,NULL} //Sentinel
@@ -340,7 +336,7 @@ PyObject* KX_MouseFocusSensor::_getattr(const STR_String& attr) {
}
-char KX_MouseFocusSensor::GetHitObject_doc[] =
+const char KX_MouseFocusSensor::GetHitObject_doc[] =
"getHitObject()\n"
"\tReturns the name of the object that was hit by this ray.\n";
PyObject* KX_MouseFocusSensor::PyGetHitObject(PyObject* self,
@@ -355,7 +351,7 @@ PyObject* KX_MouseFocusSensor::PyGetHitObject(PyObject* self,
}
-char KX_MouseFocusSensor::GetHitPosition_doc[] =
+const char KX_MouseFocusSensor::GetHitPosition_doc[] =
"getHitPosition()\n"
"\tReturns the position (in worldcoordinates) where the object was hit by this ray.\n";
PyObject* KX_MouseFocusSensor::PyGetHitPosition(PyObject* self,
@@ -375,7 +371,7 @@ PyObject* KX_MouseFocusSensor::PyGetHitPosition(PyObject* self,
}
-char KX_MouseFocusSensor::GetRayDirection_doc[] =
+const char KX_MouseFocusSensor::GetRayDirection_doc[] =
"getRayDirection()\n"
"\tReturns the direction from the ray (in worldcoordinates) .\n";
PyObject* KX_MouseFocusSensor::PyGetRayDirection(PyObject* self,
@@ -396,7 +392,7 @@ PyObject* KX_MouseFocusSensor::PyGetRayDirection(PyObject* self,
}
-char KX_MouseFocusSensor::GetHitNormal_doc[] =
+const char KX_MouseFocusSensor::GetHitNormal_doc[] =
"getHitNormal()\n"
"\tReturns the normal (in worldcoordinates) of the object at the location where the object was hit by this ray.\n";
PyObject* KX_MouseFocusSensor::PyGetHitNormal(PyObject* self,
@@ -417,7 +413,7 @@ PyObject* KX_MouseFocusSensor::PyGetHitNormal(PyObject* self,
/* getRayTarget */
-char KX_MouseFocusSensor::GetRayTarget_doc[] =
+const char KX_MouseFocusSensor::GetRayTarget_doc[] =
"getRayTarget()\n"
"\tReturns the target of the ray that seeks the focus object,\n"
"\tin worldcoordinates.";
@@ -434,7 +430,7 @@ PyObject* KX_MouseFocusSensor::PyGetRayTarget(PyObject* self,
}
/* getRayTarget */
-char KX_MouseFocusSensor::GetRaySource_doc[] =
+const char KX_MouseFocusSensor::GetRaySource_doc[] =
"getRaySource()\n"
"\tReturns the source of the ray that seeks the focus object,\n"
"\tin worldcoordinates.";
diff --git a/source/gameengine/Ketsji/KX_MouseFocusSensor.h b/source/gameengine/Ketsji/KX_MouseFocusSensor.h
index b011ebe1288..6731444699b 100644
--- a/source/gameengine/Ketsji/KX_MouseFocusSensor.h
+++ b/source/gameengine/Ketsji/KX_MouseFocusSensor.h
@@ -33,6 +33,8 @@
#include "SCA_MouseSensor.h"
+class KX_RayCast;
+
/**
* The mouse focus sensor extends the basic SCA_MouseSensor. It has
* been placed in KX because it needs access to the rasterizer and
@@ -54,6 +56,7 @@ class KX_MouseFocusSensor : public SCA_MouseSensor
int focusmode,
RAS_ICanvas* canvas,
KX_Scene* kxscene,
+ KX_KetsjiEngine* kxengine,
SCA_IObject* gameobj,
PyTypeObject* T=&Type );
@@ -76,7 +79,9 @@ class KX_MouseFocusSensor : public SCA_MouseSensor
return result;
};
- bool RayHit(KX_ClientObjectInfo* client, MT_Point3& hit_point, MT_Vector3& hit_normal, void * const data);
+ bool RayHit(KX_ClientObjectInfo* client, KX_RayCast* result, void * const data);
+ bool NeedRayCast(KX_ClientObjectInfo* client) { return true; }
+
/* --------------------------------------------------------------------- */
@@ -139,12 +144,6 @@ class KX_MouseFocusSensor : public SCA_MouseSensor
/**
- * Ref to the engine, for retrieving a reference to the current
- * scene. */
- class KX_KetsjiEngine* m_engine;
-
-
- /**
* The active canvas. The size of this canvas determines a part of
* the start position of the picking ray. */
RAS_ICanvas* m_gp_canvas;
@@ -154,6 +153,9 @@ class KX_MouseFocusSensor : public SCA_MouseSensor
* determines a part of the start location of the picking ray. */
KX_Scene* m_kxscene;
+ /**
+ * The KX engine is needed for computing the viewport */
+ KX_KetsjiEngine* m_kxengine;
};
#endif //__KX_MOUSESENSOR
diff --git a/source/gameengine/Ketsji/KX_NearSensor.cpp b/source/gameengine/Ketsji/KX_NearSensor.cpp
index 140dd37f5c6..397aedb3fa3 100644
--- a/source/gameengine/Ketsji/KX_NearSensor.cpp
+++ b/source/gameengine/Ketsji/KX_NearSensor.cpp
@@ -190,13 +190,13 @@ bool KX_NearSensor::Evaluate(CValue* event)
{
if (m_physCtrl)
{
- m_physCtrl->SetMargin(m_ResetMargin);
+ m_physCtrl->SetRadius(m_ResetMargin);
}
} else
{
if (m_physCtrl)
{
- m_physCtrl->SetMargin(m_Margin);
+ m_physCtrl->SetRadius(m_Margin);
}
}
@@ -309,14 +309,10 @@ PyParentObject KX_NearSensor::Parents[] = {
PyMethodDef KX_NearSensor::Methods[] = {
- {"setProperty",
- (PyCFunction) KX_NearSensor::sPySetProperty, METH_VARARGS, SetProperty_doc},
- {"getProperty",
- (PyCFunction) KX_NearSensor::sPyGetProperty, METH_VARARGS, GetProperty_doc},
- {"getHitObject",
- (PyCFunction) KX_NearSensor::sPyGetHitObject, METH_VARARGS, GetHitObject_doc},
- {"getHitObjectList",
- (PyCFunction) KX_NearSensor::sPyGetHitObjectList, METH_VARARGS, GetHitObjectList_doc},
+ {"setProperty", (PyCFunction) KX_NearSensor::sPySetProperty, METH_VARARGS, (PY_METHODCHAR)SetProperty_doc},
+ {"getProperty", (PyCFunction) KX_NearSensor::sPyGetProperty, METH_VARARGS, (PY_METHODCHAR)GetProperty_doc},
+ {"getHitObject",(PyCFunction) KX_NearSensor::sPyGetHitObject, METH_VARARGS, (PY_METHODCHAR)GetHitObject_doc},
+ {"getHitObjectList", (PyCFunction) KX_NearSensor::sPyGetHitObjectList, METH_VARARGS, (PY_METHODCHAR)GetHitObjectList_doc},
{NULL,NULL} //Sentinel
};
diff --git a/source/gameengine/Ketsji/KX_OdePhysicsController.cpp b/source/gameengine/Ketsji/KX_OdePhysicsController.cpp
index 05feb11a2bc..6a701a5f25b 100644
--- a/source/gameengine/Ketsji/KX_OdePhysicsController.cpp
+++ b/source/gameengine/Ketsji/KX_OdePhysicsController.cpp
@@ -169,6 +169,11 @@ MT_Scalar KX_OdePhysicsController::GetMass()
return ODEPhysicsController::getMass();
}
+MT_Scalar KX_OdePhysicsController::GetRadius()
+{
+ return MT_Scalar(0.f);
+}
+
MT_Vector3 KX_OdePhysicsController::getReactionForce()
{
return MT_Vector3(0,0,0);
diff --git a/source/gameengine/Ketsji/KX_OdePhysicsController.h b/source/gameengine/Ketsji/KX_OdePhysicsController.h
index 18f9edc6835..53050f6ce3e 100644
--- a/source/gameengine/Ketsji/KX_OdePhysicsController.h
+++ b/source/gameengine/Ketsji/KX_OdePhysicsController.h
@@ -76,7 +76,7 @@ public:
virtual void SuspendDynamics(bool);
virtual void RestoreDynamics();
-
+ virtual MT_Scalar GetRadius();
virtual SG_Controller* GetReplica(class SG_Node* destnode);
diff --git a/source/gameengine/Ketsji/KX_ParentActuator.cpp b/source/gameengine/Ketsji/KX_ParentActuator.cpp
index 344e0fccc35..eb56e8de679 100644
--- a/source/gameengine/Ketsji/KX_ParentActuator.cpp
+++ b/source/gameengine/Ketsji/KX_ParentActuator.cpp
@@ -36,6 +36,8 @@
#include "KX_GameObject.h"
#include "KX_PythonInit.h"
+#include "PyObjectPlus.h"
+
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
@@ -164,8 +166,8 @@ PyParentObject KX_ParentActuator::Parents[] = {
};
PyMethodDef KX_ParentActuator::Methods[] = {
- {"setObject", (PyCFunction) KX_ParentActuator::sPySetObject, METH_O, SetObject_doc},
- {"getObject", (PyCFunction) KX_ParentActuator::sPyGetObject, METH_VARARGS, GetObject_doc},
+ {"setObject", (PyCFunction) KX_ParentActuator::sPySetObject, METH_O, (PY_METHODCHAR)SetObject_doc},
+ {"getObject", (PyCFunction) KX_ParentActuator::sPyGetObject, METH_VARARGS, (PY_METHODCHAR)GetObject_doc},
{NULL,NULL} //Sentinel
};
@@ -174,7 +176,7 @@ PyObject* KX_ParentActuator::_getattr(const STR_String& attr) {
}
/* 1. setObject */
-char KX_ParentActuator::SetObject_doc[] =
+const char KX_ParentActuator::SetObject_doc[] =
"setObject(object)\n"
"\t- object: KX_GameObject, string or None\n"
"\tSet the object to set as parent.\n";
@@ -197,7 +199,7 @@ PyObject* KX_ParentActuator::PySetObject(PyObject* self, PyObject* value) {
/* 2. getObject */
/* get obj ---------------------------------------------------------- */
-char KX_ParentActuator::GetObject_doc[] =
+const char KX_ParentActuator::GetObject_doc[] =
"getObject(name_only = 1)\n"
"name_only - optional arg, when true will return the KX_GameObject rather then its name\n"
"\tReturns the object that is set to.\n";
diff --git a/source/gameengine/Ketsji/KX_PhysicsObjectWrapper.cpp b/source/gameengine/Ketsji/KX_PhysicsObjectWrapper.cpp
index 9291199d859..da4f05ced7c 100644
--- a/source/gameengine/Ketsji/KX_PhysicsObjectWrapper.cpp
+++ b/source/gameengine/Ketsji/KX_PhysicsObjectWrapper.cpp
@@ -27,6 +27,8 @@
* ***** END GPL LICENSE BLOCK *****
*/
#include <Python.h>
+#include "PyObjectPlus.h"
+
#include "KX_PhysicsObjectWrapper.h"
#include "PHY_IPhysicsEnvironment.h"
#include "PHY_IPhysicsController.h"
diff --git a/source/gameengine/Ketsji/KX_PolyProxy.cpp b/source/gameengine/Ketsji/KX_PolyProxy.cpp
new file mode 100644
index 00000000000..c6f6bc2db01
--- /dev/null
+++ b/source/gameengine/Ketsji/KX_PolyProxy.cpp
@@ -0,0 +1,265 @@
+/**
+ * $Id$
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): none yet.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "KX_PolyProxy.h"
+#include "KX_MeshProxy.h"
+#include "RAS_MeshObject.h"
+#include "KX_BlenderMaterial.h"
+#include "KX_PolygonMaterial.h"
+
+#include "KX_PyMath.h"
+
+PyTypeObject KX_PolyProxy::Type = {
+ PyObject_HEAD_INIT(&PyType_Type)
+ 0,
+ "KX_PolyProxy",
+ sizeof(KX_PolyProxy),
+ 0,
+ PyDestructor,
+ 0,
+ __getattr,
+ __setattr,
+ 0, //&MyPyCompare,
+ __repr,
+ 0, //&cvalue_as_number,
+ 0,
+ 0,
+ 0,
+ 0
+};
+
+PyParentObject KX_PolyProxy::Parents[] = {
+ &KX_PolyProxy::Type,
+ &SCA_IObject::Type,
+ &CValue::Type,
+ NULL
+};
+
+PyMethodDef KX_PolyProxy::Methods[] = {
+ KX_PYMETHODTABLE_NOARG(KX_PolyProxy,getMaterialIndex),
+ KX_PYMETHODTABLE_NOARG(KX_PolyProxy,getNumVertex),
+ KX_PYMETHODTABLE_NOARG(KX_PolyProxy,isVisible),
+ KX_PYMETHODTABLE_NOARG(KX_PolyProxy,isCollider),
+ KX_PYMETHODTABLE_NOARG(KX_PolyProxy,getMaterialName),
+ KX_PYMETHODTABLE_NOARG(KX_PolyProxy,getTextureName),
+ KX_PYMETHODTABLE(KX_PolyProxy,getVertexIndex),
+ KX_PYMETHODTABLE_NOARG(KX_PolyProxy,getMesh),
+ KX_PYMETHODTABLE_NOARG(KX_PolyProxy,getMaterial),
+ {NULL,NULL} //Sentinel
+};
+
+PyObject*
+KX_PolyProxy::_getattr(const STR_String& attr)
+{
+ if (attr == "matname")
+ {
+ return PyString_FromString(m_polygon->GetMaterial()->GetPolyMaterial()->GetMaterialName());
+ }
+ if (attr == "texture")
+ {
+ return PyString_FromString(m_polygon->GetMaterial()->GetPolyMaterial()->GetTextureName());
+ }
+ if (attr == "material")
+ {
+ RAS_IPolyMaterial *polymat = m_polygon->GetMaterial()->GetPolyMaterial();
+ if(polymat->GetFlag() & RAS_BLENDERMAT)
+ {
+ KX_BlenderMaterial* mat = static_cast<KX_BlenderMaterial*>(polymat);
+ Py_INCREF(mat);
+ return mat;
+ }
+ else
+ {
+ KX_PolygonMaterial* mat = static_cast<KX_PolygonMaterial*>(polymat);
+ Py_INCREF(mat);
+ return mat;
+ }
+ }
+ if (attr == "matid")
+ {
+ // we'll have to scan through the material bucket of the mes and compare with
+ // the one of the polygon
+ RAS_MaterialBucket* polyBucket = m_polygon->GetMaterial();
+ unsigned int matid;
+ for (matid=0; matid<m_mesh->NumMaterials(); matid++)
+ {
+ RAS_MeshMaterial* meshMat = m_mesh->GetMeshMaterial(matid);
+ if (meshMat->m_bucket == polyBucket)
+ // found it
+ break;
+ }
+ return PyInt_FromLong(matid);
+ }
+ if (attr == "v1")
+ {
+ return PyInt_FromLong(m_polygon->GetVertexOffset(0));
+ }
+ if (attr == "v2")
+ {
+ return PyInt_FromLong(m_polygon->GetVertexOffset(1));
+ }
+ if (attr == "v3")
+ {
+ return PyInt_FromLong(m_polygon->GetVertexOffset(2));
+ }
+ if (attr == "v4")
+ {
+ return PyInt_FromLong(((m_polygon->VertexCount()>3)?m_polygon->GetVertexOffset(3):0));
+ }
+ if (attr == "visible")
+ {
+ return PyInt_FromLong(m_polygon->IsVisible());
+ }
+ if (attr == "collide")
+ {
+ return PyInt_FromLong(m_polygon->IsCollider());
+ }
+ _getattr_up(SCA_IObject);
+}
+
+KX_PolyProxy::KX_PolyProxy(const RAS_MeshObject*mesh, RAS_Polygon* polygon)
+: m_mesh((RAS_MeshObject*)mesh),
+ m_polygon(polygon)
+{
+}
+
+KX_PolyProxy::~KX_PolyProxy()
+{
+}
+
+
+// stuff for cvalue related things
+CValue* KX_PolyProxy::Calc(VALUE_OPERATOR, CValue *) { return NULL;}
+CValue* KX_PolyProxy::CalcFinal(VALUE_DATA_TYPE, VALUE_OPERATOR, CValue *) { return NULL;}
+STR_String sPolyName="polygone";
+const STR_String & KX_PolyProxy::GetText() {return sPolyName;};
+float KX_PolyProxy::GetNumber() { return -1;}
+STR_String KX_PolyProxy::GetName() { return sPolyName;}
+void KX_PolyProxy::SetName(STR_String) { };
+CValue* KX_PolyProxy::GetReplica() { return NULL;}
+void KX_PolyProxy::ReplicaSetName(STR_String) {};
+
+
+// stuff for python integration
+
+KX_PYMETHODDEF_DOC_NOARG(KX_PolyProxy, getMaterialIndex,
+"getMaterialIndex() : return the material index of the polygon in the mesh\n")
+{
+ RAS_MaterialBucket* polyBucket = m_polygon->GetMaterial();
+ unsigned int matid;
+ for (matid=0; matid<m_mesh->NumMaterials(); matid++)
+ {
+ RAS_MeshMaterial* meshMat = m_mesh->GetMeshMaterial(matid);
+ if (meshMat->m_bucket == polyBucket)
+ // found it
+ break;
+ }
+ return PyInt_FromLong(matid);
+}
+
+KX_PYMETHODDEF_DOC_NOARG(KX_PolyProxy, getNumVertex,
+"getNumVertex() : returns the number of vertex of the polygon, 3 or 4\n")
+{
+ return PyInt_FromLong(m_polygon->VertexCount());
+}
+
+KX_PYMETHODDEF_DOC_NOARG(KX_PolyProxy, isVisible,
+"isVisible() : returns whether the polygon is visible or not\n")
+{
+ return PyInt_FromLong(m_polygon->IsVisible());
+}
+
+KX_PYMETHODDEF_DOC_NOARG(KX_PolyProxy, isCollider,
+"isCollider() : returns whether the polygon is receives collision or not\n")
+{
+ return PyInt_FromLong(m_polygon->IsCollider());
+}
+
+KX_PYMETHODDEF_DOC_NOARG(KX_PolyProxy, getMaterialName,
+"getMaterialName() : returns the polygon material name, \"NoMaterial\" if no material\n")
+{
+ return PyString_FromString(m_polygon->GetMaterial()->GetPolyMaterial()->GetMaterialName());
+}
+
+KX_PYMETHODDEF_DOC_NOARG(KX_PolyProxy, getTextureName,
+"getTexturelName() : returns the polygon texture name, \"NULL\" if no texture\n")
+{
+ return PyString_FromString(m_polygon->GetMaterial()->GetPolyMaterial()->GetTextureName());
+}
+
+KX_PYMETHODDEF_DOC(KX_PolyProxy, getVertexIndex,
+"getVertexIndex(vertex) : returns the mesh vertex index of a polygon vertex\n"
+"vertex: index of the vertex in the polygon: 0->3\n"
+"return value can be used to retrieve the vertex details through mesh proxy\n"
+"Note: getVertexIndex(3) on a triangle polygon returns 0\n")
+{
+ int index;
+ if (!PyArg_ParseTuple(args,"i",&index))
+ {
+ return NULL;
+ }
+ if (index < 0 || index > 3)
+ {
+ PyErr_SetString(PyExc_AttributeError, "Valid range for index is 0-3");
+ return NULL;
+ }
+ if (index < m_polygon->VertexCount())
+ {
+ return PyInt_FromLong(m_polygon->GetVertexOffset(index));
+ }
+ return PyInt_FromLong(0);
+}
+
+KX_PYMETHODDEF_DOC_NOARG(KX_PolyProxy, getMesh,
+"getMesh() : returns a mesh proxy\n")
+{
+ KX_MeshProxy* meshproxy = new KX_MeshProxy((RAS_MeshObject*)m_mesh);
+ return meshproxy;
+}
+
+KX_PYMETHODDEF_DOC_NOARG(KX_PolyProxy, getMaterial,
+"getMaterial() : returns a material\n")
+{
+ RAS_IPolyMaterial *polymat = m_polygon->GetMaterial()->GetPolyMaterial();
+ if(polymat->GetFlag() & RAS_BLENDERMAT)
+ {
+ KX_BlenderMaterial* mat = static_cast<KX_BlenderMaterial*>(polymat);
+ Py_INCREF(mat);
+ return mat;
+ }
+ else
+ {
+ KX_PolygonMaterial* mat = static_cast<KX_PolygonMaterial*>(polymat);
+ Py_INCREF(mat);
+ return mat;
+ }
+}
diff --git a/source/gameengine/Ketsji/KX_PolyProxy.h b/source/gameengine/Ketsji/KX_PolyProxy.h
new file mode 100644
index 00000000000..506e2c2a656
--- /dev/null
+++ b/source/gameengine/Ketsji/KX_PolyProxy.h
@@ -0,0 +1,71 @@
+/**
+ * $Id$
+ *
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): none yet.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+#ifndef __KX_POLYROXY
+#define __KX_POLYPROXY
+
+#include "SCA_IObject.h"
+
+class KX_PolyProxy : public SCA_IObject
+{
+ Py_Header;
+protected:
+ class RAS_Polygon* m_polygon;
+ class RAS_MeshObject* m_mesh;
+public:
+ KX_PolyProxy(const class RAS_MeshObject*mesh, class RAS_Polygon* polygon);
+ virtual ~KX_PolyProxy();
+
+ // stuff for cvalue related things
+ CValue* Calc(VALUE_OPERATOR op, CValue *val) ;
+ CValue* CalcFinal(VALUE_DATA_TYPE dtype, VALUE_OPERATOR op, CValue *val);
+ const STR_String & GetText();
+ float GetNumber();
+ STR_String GetName();
+ void SetName(STR_String name); // Set the name of the value
+ void ReplicaSetName(STR_String name);
+ CValue* GetReplica();
+
+
+// stuff for python integration
+ virtual PyObject* _getattr(const STR_String& attr);
+
+ KX_PYMETHOD_DOC_NOARGS(KX_PolyProxy,getMaterialIndex)
+ KX_PYMETHOD_DOC_NOARGS(KX_PolyProxy,getNumVertex)
+ KX_PYMETHOD_DOC_NOARGS(KX_PolyProxy,isVisible)
+ KX_PYMETHOD_DOC_NOARGS(KX_PolyProxy,isCollider)
+ KX_PYMETHOD_DOC_NOARGS(KX_PolyProxy,getMaterialName)
+ KX_PYMETHOD_DOC_NOARGS(KX_PolyProxy,getTextureName)
+ KX_PYMETHOD_DOC(KX_PolyProxy,getVertexIndex)
+ KX_PYMETHOD_DOC_NOARGS(KX_PolyProxy,getMesh)
+ KX_PYMETHOD_DOC_NOARGS(KX_PolyProxy,getMaterial)
+
+};
+
+#endif //__KX_POLYPROXY
+
diff --git a/source/gameengine/Ketsji/KX_PolygonMaterial.cpp b/source/gameengine/Ketsji/KX_PolygonMaterial.cpp
index 144f74a1a4c..c9180bf3a80 100644
--- a/source/gameengine/Ketsji/KX_PolygonMaterial.cpp
+++ b/source/gameengine/Ketsji/KX_PolygonMaterial.cpp
@@ -35,10 +35,6 @@
#include "BKE_global.h"
#include "BKE_image.h"
-extern "C" {
-#include "BDR_drawmesh.h"
-}
-
#include "DNA_material_types.h"
#include "DNA_texture_types.h"
#include "DNA_image_types.h"
@@ -46,6 +42,8 @@ extern "C" {
#include "IMB_imbuf_types.h"
+#include "GPU_draw.h"
+
#include "MEM_guardedalloc.h"
#include "RAS_LightObject.h"
@@ -63,8 +61,6 @@ KX_PolygonMaterial::KX_PolygonMaterial(const STR_String &texname,
bool alpha,
bool zsort,
int lightlayer,
- bool bIsTriangle,
- void* clientobject,
struct MTFace* tface,
unsigned int* mcol,
PyTypeObject *T)
@@ -78,9 +74,7 @@ KX_PolygonMaterial::KX_PolygonMaterial(const STR_String &texname,
transp,
alpha,
zsort,
- lightlayer,
- bIsTriangle,
- clientobject),
+ lightlayer),
m_tface(tface),
m_mcol(mcol),
m_material(material),
@@ -140,38 +134,29 @@ void KX_PolygonMaterial::DefaultActivate(RAS_IRasterizer* rasty, TCachingInfo& c
if (GetCachingInfo() != cachingInfo)
{
if (!cachingInfo)
- {
- set_tpage(NULL);
- }
+ GPU_set_tpage(NULL);
+
cachingInfo = GetCachingInfo();
if ((m_drawingmode & 4)&& (rasty->GetDrawingMode() == RAS_IRasterizer::KX_TEXTURED))
{
- update_realtime_texture((struct MTFace*) m_tface, rasty->GetTime());
- set_tpage(m_tface);
- rasty->EnableTextures(true);
+ Image *ima = (Image*)m_tface->tpage;
+ GPU_update_image_time(ima, rasty->GetTime());
+ GPU_set_tpage(m_tface);
}
else
- {
- set_tpage(NULL);
- rasty->EnableTextures(false);
- }
+ GPU_set_tpage(NULL);
if(m_drawingmode & RAS_IRasterizer::KX_TWOSIDE)
- {
rasty->SetCullFace(false);
- }
else
- {
rasty->SetCullFace(true);
- }
- if (m_drawingmode & RAS_IRasterizer::KX_LINES) {
+ if ((m_drawingmode & RAS_IRasterizer::KX_LINES) ||
+ (rasty->GetDrawingMode() <= RAS_IRasterizer::KX_WIREFRAME))
rasty->SetLines(true);
- }
- else {
+ else
rasty->SetLines(false);
- }
}
rasty->SetSpecularity(m_specular[0],m_specular[1],m_specular[2],m_specularity);
@@ -253,7 +238,8 @@ PyObject* KX_PolygonMaterial::_getattr(const STR_String& attr)
if (attr == "lightlayer")
return PyInt_FromLong(m_lightlayer);
if (attr == "triangle")
- return PyInt_FromLong(m_bIsTriangle);
+ // deprecated, triangle/quads shouldn't have been a material property
+ return 0;
if (attr == "diffuse")
return PyObjectFrom(m_diffuse);
@@ -333,7 +319,7 @@ int KX_PolygonMaterial::_setattr(const STR_String &attr, PyObject *pyvalue)
// This probably won't work...
if (attr == "triangle")
{
- m_bIsTriangle = value;
+ // deprecated, triangle/quads shouldn't have been a material property
return 0;
}
}
@@ -386,7 +372,9 @@ KX_PYMETHODDEF_DOC(KX_PolygonMaterial, updateTexture, "updateTexture(tface, rast
{
MTFace *tface = (MTFace*) PyCObject_AsVoidPtr(pytface);
RAS_IRasterizer *rasty = (RAS_IRasterizer*) PyCObject_AsVoidPtr(pyrasty);
- update_realtime_texture(tface, rasty->GetTime());
+ Image *ima = (Image*)tface->tpage;
+ GPU_update_image_time(ima, rasty->GetTime());
+
Py_Return;
}
@@ -399,7 +387,7 @@ KX_PYMETHODDEF_DOC(KX_PolygonMaterial, setTexture, "setTexture(tface)")
if (PyArg_ParseTuple(args, "O!", &PyCObject_Type, &pytface))
{
MTFace *tface = (MTFace*) PyCObject_AsVoidPtr(pytface);
- set_tpage(tface);
+ GPU_set_tpage(tface);
Py_Return;
}
diff --git a/source/gameengine/Ketsji/KX_PolygonMaterial.h b/source/gameengine/Ketsji/KX_PolygonMaterial.h
index 11c8baa8b1f..fe116f757db 100644
--- a/source/gameengine/Ketsji/KX_PolygonMaterial.h
+++ b/source/gameengine/Ketsji/KX_PolygonMaterial.h
@@ -68,8 +68,6 @@ public:
bool alpha,
bool zsort,
int lightlayer,
- bool bIsTriangle,
- void* clientobject,
struct MTFace* tface,
unsigned int* mcol,
PyTypeObject *T = &Type);
diff --git a/source/gameengine/Ketsji/KX_PyConstraintBinding.cpp b/source/gameengine/Ketsji/KX_PyConstraintBinding.cpp
index 26243c7dba1..dea6225edc2 100644
--- a/source/gameengine/Ketsji/KX_PyConstraintBinding.cpp
+++ b/source/gameengine/Ketsji/KX_PyConstraintBinding.cpp
@@ -34,6 +34,8 @@
#include "PHY_IPhysicsController.h"
#include "PHY_IVehicle.h"
+#include "PyObjectPlus.h"
+
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
@@ -508,54 +510,54 @@ static PyObject* gPyRemoveConstraint(PyObject* self,
static struct PyMethodDef physicsconstraints_methods[] = {
{"setGravity",(PyCFunction) gPySetGravity,
- METH_VARARGS, gPySetGravity__doc__},
+ METH_VARARGS, (PY_METHODCHAR)gPySetGravity__doc__},
{"setDebugMode",(PyCFunction) gPySetDebugMode,
- METH_VARARGS, gPySetDebugMode__doc__},
+ METH_VARARGS, (PY_METHODCHAR)gPySetDebugMode__doc__},
/// settings that influence quality of the rigidbody dynamics
{"setNumIterations",(PyCFunction) gPySetNumIterations,
- METH_VARARGS, gPySetNumIterations__doc__},
+ METH_VARARGS, (PY_METHODCHAR)gPySetNumIterations__doc__},
{"setNumTimeSubSteps",(PyCFunction) gPySetNumTimeSubSteps,
- METH_VARARGS, gPySetNumTimeSubSteps__doc__},
+ METH_VARARGS, (PY_METHODCHAR)gPySetNumTimeSubSteps__doc__},
{"setDeactivationTime",(PyCFunction) gPySetDeactivationTime,
- METH_VARARGS, gPySetDeactivationTime__doc__},
+ METH_VARARGS, (PY_METHODCHAR)gPySetDeactivationTime__doc__},
{"setDeactivationLinearTreshold",(PyCFunction) gPySetDeactivationLinearTreshold,
- METH_VARARGS, gPySetDeactivationLinearTreshold__doc__},
+ METH_VARARGS, (PY_METHODCHAR)gPySetDeactivationLinearTreshold__doc__},
{"setDeactivationAngularTreshold",(PyCFunction) gPySetDeactivationAngularTreshold,
- METH_VARARGS, gPySetDeactivationAngularTreshold__doc__},
+ METH_VARARGS, (PY_METHODCHAR)gPySetDeactivationAngularTreshold__doc__},
{"setContactBreakingTreshold",(PyCFunction) gPySetContactBreakingTreshold,
- METH_VARARGS, gPySetContactBreakingTreshold__doc__},
+ METH_VARARGS, (PY_METHODCHAR)gPySetContactBreakingTreshold__doc__},
{"setCcdMode",(PyCFunction) gPySetCcdMode,
- METH_VARARGS, gPySetCcdMode__doc__},
+ METH_VARARGS, (PY_METHODCHAR)gPySetCcdMode__doc__},
{"setSorConstant",(PyCFunction) gPySetSorConstant,
- METH_VARARGS, gPySetSorConstant__doc__},
+ METH_VARARGS, (PY_METHODCHAR)gPySetSorConstant__doc__},
{"setSolverTau",(PyCFunction) gPySetSolverTau,
- METH_VARARGS, gPySetSolverTau__doc__},
+ METH_VARARGS, (PY_METHODCHAR)gPySetSolverTau__doc__},
{"setSolverDamping",(PyCFunction) gPySetSolverDamping,
- METH_VARARGS, gPySetSolverDamping__doc__},
+ METH_VARARGS, (PY_METHODCHAR)gPySetSolverDamping__doc__},
{"setLinearAirDamping",(PyCFunction) gPySetLinearAirDamping,
- METH_VARARGS, gPySetLinearAirDamping__doc__},
+ METH_VARARGS, (PY_METHODCHAR)gPySetLinearAirDamping__doc__},
{"setUseEpa",(PyCFunction) gPySetUseEpa,
- METH_VARARGS, gPySetUseEpa__doc__},
+ METH_VARARGS, (PY_METHODCHAR)gPySetUseEpa__doc__},
{"setSolverType",(PyCFunction) gPySetSolverType,
- METH_VARARGS, gPySetSolverType__doc__},
+ METH_VARARGS, (PY_METHODCHAR)gPySetSolverType__doc__},
{"createConstraint",(PyCFunction) gPyCreateConstraint,
- METH_VARARGS, gPyCreateConstraint__doc__},
+ METH_VARARGS, (PY_METHODCHAR)gPyCreateConstraint__doc__},
{"getVehicleConstraint",(PyCFunction) gPyGetVehicleConstraint,
- METH_VARARGS, gPyGetVehicleConstraint__doc__},
+ METH_VARARGS, (PY_METHODCHAR)gPyGetVehicleConstraint__doc__},
{"removeConstraint",(PyCFunction) gPyRemoveConstraint,
- METH_VARARGS, gPyRemoveConstraint__doc__},
+ METH_VARARGS, (PY_METHODCHAR)gPyRemoveConstraint__doc__},
{"getAppliedImpulse",(PyCFunction) gPyGetAppliedImpulse,
- METH_VARARGS, gPyGetAppliedImpulse__doc__},
+ METH_VARARGS, (PY_METHODCHAR)gPyGetAppliedImpulse__doc__},
//sentinel
diff --git a/source/gameengine/Ketsji/KX_PythonInit.cpp b/source/gameengine/Ketsji/KX_PythonInit.cpp
index 868439546c3..fc836234e2b 100644
--- a/source/gameengine/Ketsji/KX_PythonInit.cpp
+++ b/source/gameengine/Ketsji/KX_PythonInit.cpp
@@ -30,7 +30,13 @@
#include "GL/glew.h"
+// directory header for py function getBlendFileList
#include <stdlib.h>
+#ifndef WIN32
+ #include <dirent.h>
+#else
+ #include "BLI_winstuff.h"
+#endif
#ifdef WIN32
#pragma warning (disable : 4786)
@@ -51,21 +57,25 @@
#include "BL_ActionActuator.h"
#include "RAS_IRasterizer.h"
#include "RAS_ICanvas.h"
+#include "RAS_BucketManager.h"
#include "MT_Vector3.h"
#include "MT_Point3.h"
#include "ListValue.h"
#include "KX_Scene.h"
#include "SND_DeviceManager.h"
-#include "RAS_OpenGLRasterizer/RAS_GLExtensionManager.h"
#include "BL_Shader.h"
#include "KX_PyMath.h"
+#include "PyObjectPlus.h"
+
extern "C" {
#include "Mathutils.h" // Blender.Mathutils module copied here so the blenderlayer can use.
}
+#include "marshal.h" /* python header for loading/saving dicts */
+
#include "PHY_IPhysicsEnvironment.h"
// FIXME: Enable for access to blender python modules. This is disabled because
// python has dependencies on a lot of other modules and is a pain to link.
@@ -77,6 +87,7 @@ extern "C" {
#include "BKE_utildefines.h"
#include "BKE_global.h"
#include "BLI_blenlib.h"
+#include "GPU_material.h"
static void setSandbox(TPythonSecurityLevel level);
@@ -84,6 +95,7 @@ static void setSandbox(TPythonSecurityLevel level);
// 'local' copy of canvas ptr, for window height/width python scripts
static RAS_ICanvas* gp_Canvas = NULL;
static KX_Scene* gp_KetsjiScene = NULL;
+static KX_KetsjiEngine* gp_KetsjiEngine = NULL;
static RAS_IRasterizer* gp_Rasterizer = NULL;
void KX_RasterizerDrawDebugLine(const MT_Vector3& from,const MT_Vector3& to,const MT_Vector3& color)
@@ -112,20 +124,16 @@ static PyObject* gPyGetRandomFloat(PyObject*)
return PyFloat_FromDouble(MT_random());
}
-static PyObject* gPySetGravity(PyObject*,
- PyObject* args,
- PyObject*)
+static PyObject* gPySetGravity(PyObject*, PyObject* args)
{
MT_Vector3 vec = MT_Vector3(0., 0., 0.);
- if (PyVecArgTo(args, vec))
- {
- if (gp_KetsjiScene)
- gp_KetsjiScene->SetGravity(vec);
-
- Py_Return;
- }
+ if (!PyVecArgTo(args, vec))
+ return NULL;
+
+ if (gp_KetsjiScene)
+ gp_KetsjiScene->SetGravity(vec);
- return NULL;
+ Py_RETURN_NONE;
}
static char gPyExpandPath_doc[] =
@@ -138,20 +146,17 @@ file to make a full path name (doesn't change during the game, even if you load\
other .blend).\n\
The function also converts the directory separator to the local file system format.";
-static PyObject* gPyExpandPath(PyObject*,
- PyObject* args,
- PyObject*)
+static PyObject* gPyExpandPath(PyObject*, PyObject* args)
{
char expanded[FILE_MAXDIR + FILE_MAXFILE];
char* filename;
- if (PyArg_ParseTuple(args,"s",&filename))
- {
- BLI_strncpy(expanded, filename, FILE_MAXDIR + FILE_MAXFILE);
- BLI_convertstringcode(expanded, G.sce);
- return PyString_FromString(expanded);
- }
- return NULL;
+ if (!PyArg_ParseTuple(args,"s",&filename))
+ return NULL;
+
+ BLI_strncpy(expanded, filename, FILE_MAXDIR + FILE_MAXFILE);
+ BLI_convertstringcode(expanded, G.sce);
+ return PyString_FromString(expanded);
}
@@ -179,62 +184,62 @@ static PyObject* gPyGetSpectrum(PyObject*)
PyList_SetItem(resultlist, index, PyFloat_FromDouble(spectrum[index]));
}
}
+ else {
+ for (int index = 0; index < 512; index++)
+ {
+ PyList_SetItem(resultlist, index, PyFloat_FromDouble(0.0));
+ }
+ }
return resultlist;
}
-static PyObject* gPyStartDSP(PyObject*,
- PyObject* args,
- PyObject*)
+static PyObject* gPyStartDSP(PyObject*, PyObject* args)
{
SND_IAudioDevice* audiodevice = SND_DeviceManager::Instance();
- if (audiodevice)
- {
- if (!usedsp)
- {
- audiodevice->StartUsingDSP();
- usedsp = true;
- Py_Return;
- }
+ if (!audiodevice) {
+ PyErr_SetString(PyExc_RuntimeError, "no audio device available");
+ return NULL;
}
- return NULL;
+
+ if (!usedsp) {
+ audiodevice->StartUsingDSP();
+ usedsp = true;
+ }
+
+ Py_RETURN_NONE;
}
-static PyObject* gPyStopDSP(PyObject*,
- PyObject* args,
- PyObject*)
+static PyObject* gPyStopDSP(PyObject*, PyObject* args)
{
SND_IAudioDevice* audiodevice = SND_DeviceManager::Instance();
- if (audiodevice)
- {
- if (usedsp)
- {
- audiodevice->StopUsingDSP();
- usedsp = false;
- Py_Return;
- }
+ if (!audiodevice) {
+ PyErr_SetString(PyExc_RuntimeError, "no audio device available");
+ return NULL;
}
- return NULL;
+
+ if (usedsp) {
+ audiodevice->StopUsingDSP();
+ usedsp = true;
+ }
+
+ Py_RETURN_NONE;
}
-static PyObject* gPySetLogicTicRate(PyObject*,
- PyObject* args,
- PyObject*)
+static PyObject* gPySetLogicTicRate(PyObject*, PyObject* args)
{
float ticrate;
- if (PyArg_ParseTuple(args, "f", &ticrate))
- {
- KX_KetsjiEngine::SetTicRate(ticrate);
- Py_Return;
- }
+ if (!PyArg_ParseTuple(args, "f", &ticrate))
+ return NULL;
- return NULL;
+ KX_KetsjiEngine::SetTicRate(ticrate);
+ Py_RETURN_NONE;
}
static PyObject* gPyGetLogicTicRate(PyObject*)
@@ -242,33 +247,24 @@ static PyObject* gPyGetLogicTicRate(PyObject*)
return PyFloat_FromDouble(KX_KetsjiEngine::GetTicRate());
}
-static PyObject* gPySetPhysicsTicRate(PyObject*,
- PyObject* args,
- PyObject*)
+static PyObject* gPySetPhysicsTicRate(PyObject*, PyObject* args)
{
float ticrate;
- if (PyArg_ParseTuple(args, "f", &ticrate))
- {
-
- PHY_GetActiveEnvironment()->setFixedTimeStep(true,ticrate);
- Py_Return;
- }
+ if (!PyArg_ParseTuple(args, "f", &ticrate))
+ return NULL;
- return NULL;
+ PHY_GetActiveEnvironment()->setFixedTimeStep(true,ticrate);
+ Py_RETURN_NONE;
}
-static PyObject* gPySetPhysicsDebug(PyObject*,
- PyObject* args,
- PyObject*)
+static PyObject* gPySetPhysicsDebug(PyObject*, PyObject* args)
{
int debugMode;
- if (PyArg_ParseTuple(args, "i", &debugMode))
- {
- PHY_GetActiveEnvironment()->setDebugMode(debugMode);
- Py_Return;
- }
+ if (!PyArg_ParseTuple(args, "i", &debugMode))
+ return NULL;
- return NULL;
+ PHY_GetActiveEnvironment()->setDebugMode(debugMode);
+ Py_RETURN_NONE;
}
@@ -278,6 +274,51 @@ static PyObject* gPyGetPhysicsTicRate(PyObject*)
return PyFloat_FromDouble(PHY_GetActiveEnvironment()->getFixedTimeStep());
}
+static PyObject* gPyGetAverageFrameRate(PyObject*)
+{
+ return PyFloat_FromDouble(KX_KetsjiEngine::GetAverageFrameRate());
+}
+
+static PyObject* gPyGetBlendFileList(PyObject*, PyObject* args)
+{
+ char cpath[sizeof(G.sce)];
+ char *searchpath = NULL;
+ PyObject* list, *value;
+
+ DIR *dp;
+ struct dirent *dirp;
+
+ if (!PyArg_ParseTuple(args, "|s", &searchpath))
+ return NULL;
+
+ list = PyList_New(0);
+
+ if (searchpath) {
+ BLI_strncpy(cpath, searchpath, FILE_MAXDIR + FILE_MAXFILE);
+ BLI_convertstringcode(cpath, G.sce);
+ } else {
+ /* Get the dir only */
+ BLI_split_dirfile_basic(G.sce, cpath, NULL);
+ }
+
+ if((dp = opendir(cpath)) == NULL) {
+ /* todo, show the errno, this shouldnt happen anyway if the blendfile is readable */
+ fprintf(stderr, "Could not read directoty (%s) failed, code %d (%s)\n", cpath, errno, strerror(errno));
+ return list;
+ }
+
+ while ((dirp = readdir(dp)) != NULL) {
+ if (BLI_testextensie(dirp->d_name, ".blend")) {
+ value = PyString_FromString(dirp->d_name);
+ PyList_Append(list, value);
+ Py_DECREF(value);
+ }
+ }
+
+ closedir(dp);
+ return list;
+}
+
static STR_String gPyGetCurrentScene_doc =
"getCurrentScene()\n"
"Gets a reference to the current scene.\n";
@@ -360,50 +401,40 @@ static PyObject *pyPrintExt(PyObject *,PyObject *,PyObject *)
static struct PyMethodDef game_methods[] = {
- {"expandPath", (PyCFunction)gPyExpandPath, METH_VARARGS, gPyExpandPath_doc},
+ {"expandPath", (PyCFunction)gPyExpandPath, METH_VARARGS, (PY_METHODCHAR)gPyExpandPath_doc},
{"getCurrentController",
(PyCFunction) SCA_PythonController::sPyGetCurrentController,
- METH_NOARGS, SCA_PythonController::sPyGetCurrentController__doc__},
+ METH_NOARGS, (PY_METHODCHAR)SCA_PythonController::sPyGetCurrentController__doc__},
{"getCurrentScene", (PyCFunction) gPyGetCurrentScene,
- METH_NOARGS, gPyGetCurrentScene_doc.Ptr()},
+ METH_NOARGS, (PY_METHODCHAR)gPyGetCurrentScene_doc.Ptr()},
{"addActiveActuator",(PyCFunction) SCA_PythonController::sPyAddActiveActuator,
- METH_VARARGS, SCA_PythonController::sPyAddActiveActuator__doc__},
+ METH_VARARGS, (PY_METHODCHAR)SCA_PythonController::sPyAddActiveActuator__doc__},
{"getRandomFloat",(PyCFunction) gPyGetRandomFloat,
- METH_NOARGS,gPyGetRandomFloat_doc.Ptr()},
- {"setGravity",(PyCFunction) gPySetGravity, METH_VARARGS,"set Gravitation"},
- {"getSpectrum",(PyCFunction) gPyGetSpectrum, METH_NOARGS,"get audio spectrum"},
- {"stopDSP",(PyCFunction) gPyStopDSP, METH_VARARGS,"stop using the audio dsp (for performance reasons)"},
- {"getLogicTicRate", (PyCFunction) gPyGetLogicTicRate, METH_NOARGS, "Gets the logic tic rate"},
- {"setLogicTicRate", (PyCFunction) gPySetLogicTicRate, METH_VARARGS, "Sets the logic tic rate"},
- {"getPhysicsTicRate", (PyCFunction) gPyGetPhysicsTicRate, METH_NOARGS, "Gets the physics tic rate"},
- {"setPhysicsTicRate", (PyCFunction) gPySetPhysicsTicRate, METH_VARARGS, "Sets the physics tic rate"},
- {"PrintGLInfo", (PyCFunction)pyPrintExt, METH_NOARGS, "Prints GL Extension Info"},
+ METH_NOARGS, (PY_METHODCHAR)gPyGetRandomFloat_doc.Ptr()},
+ {"setGravity",(PyCFunction) gPySetGravity, METH_VARARGS, (PY_METHODCHAR)"set Gravitation"},
+ {"getSpectrum",(PyCFunction) gPyGetSpectrum, METH_NOARGS, (PY_METHODCHAR)"get audio spectrum"},
+ {"stopDSP",(PyCFunction) gPyStopDSP, METH_VARARGS, (PY_METHODCHAR)"stop using the audio dsp (for performance reasons)"},
+ {"getLogicTicRate", (PyCFunction) gPyGetLogicTicRate, METH_NOARGS, (PY_METHODCHAR)"Gets the logic tic rate"},
+ {"setLogicTicRate", (PyCFunction) gPySetLogicTicRate, METH_VARARGS, (PY_METHODCHAR)"Sets the logic tic rate"},
+ {"getPhysicsTicRate", (PyCFunction) gPyGetPhysicsTicRate, METH_NOARGS, (PY_METHODCHAR)"Gets the physics tic rate"},
+ {"setPhysicsTicRate", (PyCFunction) gPySetPhysicsTicRate, METH_VARARGS, (PY_METHODCHAR)"Sets the physics tic rate"},
+ {"getAverageFrameRate", (PyCFunction) gPyGetAverageFrameRate, METH_NOARGS, (PY_METHODCHAR)"Gets the estimated average frame rate"},
+ {"getBlendFileList", (PyCFunction)gPyGetBlendFileList, METH_VARARGS, (PY_METHODCHAR)"Gets a list of blend files in the same directory as the current blend file"},
+ {"PrintGLInfo", (PyCFunction)pyPrintExt, METH_NOARGS, (PY_METHODCHAR)"Prints GL Extension Info"},
{NULL, (PyCFunction) NULL, 0, NULL }
};
-static PyObject* gPyGetWindowHeight(PyObject*,
- PyObject* args,
- PyObject*)
+static PyObject* gPyGetWindowHeight(PyObject*, PyObject* args)
{
- int height = (gp_Canvas ? gp_Canvas->GetHeight() : 0);
-
- PyObject* heightval = PyInt_FromLong(height);
- return heightval;
+ return PyInt_FromLong((gp_Canvas ? gp_Canvas->GetHeight() : 0));
}
-static PyObject* gPyGetWindowWidth(PyObject*,
- PyObject* args,
- PyObject*)
+static PyObject* gPyGetWindowWidth(PyObject*, PyObject* args)
{
-
-
- int width = (gp_Canvas ? gp_Canvas->GetWidth() : 0);
-
- PyObject* widthval = PyInt_FromLong(width);
- return widthval;
+ return PyInt_FromLong((gp_Canvas ? gp_Canvas->GetWidth() : 0));
}
@@ -411,282 +442,403 @@ static PyObject* gPyGetWindowWidth(PyObject*,
// temporarility visibility thing, will be moved to rasterizer/renderer later
bool gUseVisibilityTemp = false;
-static PyObject* gPyEnableVisibility(PyObject*,
- PyObject* args,
- PyObject*)
+static PyObject* gPyEnableVisibility(PyObject*, PyObject* args)
{
int visible;
- if (PyArg_ParseTuple(args,"i",&visible))
- {
- gUseVisibilityTemp = (visible != 0);
- }
- else
- {
+ if (!PyArg_ParseTuple(args,"i",&visible))
return NULL;
- }
- Py_Return;
+
+ gUseVisibilityTemp = (visible != 0);
+ Py_RETURN_NONE;
}
-static PyObject* gPyShowMouse(PyObject*,
- PyObject* args,
- PyObject*)
+static PyObject* gPyShowMouse(PyObject*, PyObject* args)
{
int visible;
- if (PyArg_ParseTuple(args,"i",&visible))
- {
- if (visible)
- {
- if (gp_Canvas)
- gp_Canvas->SetMouseState(RAS_ICanvas::MOUSE_NORMAL);
- } else
- {
- if (gp_Canvas)
- gp_Canvas->SetMouseState(RAS_ICanvas::MOUSE_INVISIBLE);
- }
- }
- else {
+ if (!PyArg_ParseTuple(args,"i",&visible))
return NULL;
+
+ if (visible)
+ {
+ if (gp_Canvas)
+ gp_Canvas->SetMouseState(RAS_ICanvas::MOUSE_NORMAL);
+ } else
+ {
+ if (gp_Canvas)
+ gp_Canvas->SetMouseState(RAS_ICanvas::MOUSE_INVISIBLE);
}
- Py_Return;
+ Py_RETURN_NONE;
}
-static PyObject* gPySetMousePosition(PyObject*,
- PyObject* args,
- PyObject*)
+static PyObject* gPySetMousePosition(PyObject*, PyObject* args)
{
int x,y;
- if (PyArg_ParseTuple(args,"ii",&x,&y))
- {
- if (gp_Canvas)
- gp_Canvas->SetMousePosition(x,y);
- }
- else {
+ if (!PyArg_ParseTuple(args,"ii",&x,&y))
return NULL;
- }
- Py_Return;
+ if (gp_Canvas)
+ gp_Canvas->SetMousePosition(x,y);
+
+ Py_RETURN_NONE;
}
-static PyObject* gPySetEyeSeparation(PyObject*,
- PyObject* args,
- PyObject*)
+static PyObject* gPySetEyeSeparation(PyObject*, PyObject* args)
{
float sep;
- if (PyArg_ParseTuple(args, "f", &sep))
- {
- if (gp_Rasterizer)
- gp_Rasterizer->SetEyeSeparation(sep);
-
- Py_Return;
+ if (!PyArg_ParseTuple(args, "f", &sep))
+ return NULL;
+
+ if (!gp_Rasterizer) {
+ PyErr_SetString(PyExc_RuntimeError, "Rasterizer not available");
+ return NULL;
}
- return NULL;
+ gp_Rasterizer->SetEyeSeparation(sep);
+
+ Py_RETURN_NONE;
}
static PyObject* gPyGetEyeSeparation(PyObject*, PyObject*, PyObject*)
{
- if (gp_Rasterizer)
- return PyFloat_FromDouble(gp_Rasterizer->GetEyeSeparation());
+ if (!gp_Rasterizer) {
+ PyErr_SetString(PyExc_RuntimeError, "Rasterizer not available");
+ return NULL;
+ }
- return NULL;
+ return PyFloat_FromDouble(gp_Rasterizer->GetEyeSeparation());
}
-static PyObject* gPySetFocalLength(PyObject*,
- PyObject* args,
- PyObject*)
+static PyObject* gPySetFocalLength(PyObject*, PyObject* args)
{
float focus;
- if (PyArg_ParseTuple(args, "f", &focus))
- {
- if (gp_Rasterizer)
- gp_Rasterizer->SetFocalLength(focus);
- Py_Return;
+ if (!PyArg_ParseTuple(args, "f", &focus))
+ return NULL;
+
+ if (!gp_Rasterizer) {
+ PyErr_SetString(PyExc_RuntimeError, "Rasterizer not available");
+ return NULL;
}
+
+ gp_Rasterizer->SetFocalLength(focus);
- return NULL;
+ Py_RETURN_NONE;
}
static PyObject* gPyGetFocalLength(PyObject*, PyObject*, PyObject*)
{
- if (gp_Rasterizer)
- return PyFloat_FromDouble(gp_Rasterizer->GetFocalLength());
- return NULL;
+ if (!gp_Rasterizer) {
+ PyErr_SetString(PyExc_RuntimeError, "Rasterizer not available");
+ return NULL;
+ }
+
+ return PyFloat_FromDouble(gp_Rasterizer->GetFocalLength());
+
+ Py_RETURN_NONE;
}
-static PyObject* gPySetBackgroundColor(PyObject*,
- PyObject* args,
- PyObject*)
+static PyObject* gPySetBackgroundColor(PyObject*, PyObject* args)
{
MT_Vector4 vec = MT_Vector4(0., 0., 0.3, 0.);
- if (PyVecArgTo(args, vec))
+ if (!PyVecArgTo(args, vec))
+ return NULL;
+
+ if (gp_Canvas)
{
- if (gp_Canvas)
- {
- gp_Rasterizer->SetBackColor(vec[0], vec[1], vec[2], vec[3]);
- }
- Py_Return;
+ gp_Rasterizer->SetBackColor(vec[0], vec[1], vec[2], vec[3]);
}
-
- return NULL;
+ Py_RETURN_NONE;
}
-static PyObject* gPySetMistColor(PyObject*,
- PyObject* args,
- PyObject*)
+static PyObject* gPySetMistColor(PyObject*, PyObject* args)
{
MT_Vector3 vec = MT_Vector3(0., 0., 0.);
- if (PyVecArgTo(args, vec))
- {
- if (gp_Rasterizer)
- {
- gp_Rasterizer->SetFogColor(vec[0], vec[1], vec[2]);
- }
- Py_Return;
- }
+ if (!PyVecArgTo(args, vec))
+ return NULL;
- return NULL;
+ if (!gp_Rasterizer) {
+ PyErr_SetString(PyExc_RuntimeError, "Rasterizer not available");
+ return NULL;
+ }
+ gp_Rasterizer->SetFogColor(vec[0], vec[1], vec[2]);
+
+ Py_RETURN_NONE;
}
-static PyObject* gPySetMistStart(PyObject*,
- PyObject* args,
- PyObject*)
+static PyObject* gPySetMistStart(PyObject*, PyObject* args)
{
float miststart;
- if (PyArg_ParseTuple(args,"f",&miststart))
- {
- if (gp_Rasterizer)
- {
- gp_Rasterizer->SetFogStart(miststart);
- }
- }
- else {
+ if (!PyArg_ParseTuple(args,"f",&miststart))
+ return NULL;
+
+ if (!gp_Rasterizer) {
+ PyErr_SetString(PyExc_RuntimeError, "Rasterizer not available");
return NULL;
}
- Py_Return;
+
+ gp_Rasterizer->SetFogStart(miststart);
+
+ Py_RETURN_NONE;
}
-static PyObject* gPySetMistEnd(PyObject*,
- PyObject* args,
- PyObject*)
+static PyObject* gPySetMistEnd(PyObject*, PyObject* args)
{
float mistend;
- if (PyArg_ParseTuple(args,"f",&mistend))
- {
- if (gp_Rasterizer)
- {
- gp_Rasterizer->SetFogEnd(mistend);
- }
- }
- else {
+ if (!PyArg_ParseTuple(args,"f",&mistend))
+ return NULL;
+
+ if (!gp_Rasterizer) {
+ PyErr_SetString(PyExc_RuntimeError, "Rasterizer not available");
return NULL;
}
- Py_Return;
+
+ gp_Rasterizer->SetFogEnd(mistend);
+
+ Py_RETURN_NONE;
}
-static PyObject* gPySetAmbientColor(PyObject*,
- PyObject* args,
- PyObject*)
+static PyObject* gPySetAmbientColor(PyObject*, PyObject* args)
{
MT_Vector3 vec = MT_Vector3(0., 0., 0.);
- if (PyVecArgTo(args, vec))
- {
- if (gp_Rasterizer)
- {
- gp_Rasterizer->SetAmbientColor(vec[0], vec[1], vec[2]);
- }
- Py_Return;
- }
+ if (!PyVecArgTo(args, vec))
+ return NULL;
- return NULL;
+ if (!gp_Rasterizer) {
+ PyErr_SetString(PyExc_RuntimeError, "Rasterizer not available");
+ return NULL;
+ }
+ gp_Rasterizer->SetAmbientColor(vec[0], vec[1], vec[2]);
+
+ Py_RETURN_NONE;
}
-static PyObject* gPyMakeScreenshot(PyObject*,
- PyObject* args,
- PyObject*)
+static PyObject* gPyMakeScreenshot(PyObject*, PyObject* args)
{
char* filename;
- if (PyArg_ParseTuple(args,"s",&filename))
+ if (!PyArg_ParseTuple(args,"s",&filename))
+ return NULL;
+
+ if (gp_Canvas)
{
- if (gp_Canvas)
- {
- gp_Canvas->MakeScreenShot(filename);
- }
+ gp_Canvas->MakeScreenShot(filename);
}
- else {
+
+ Py_RETURN_NONE;
+}
+
+static PyObject* gPyEnableMotionBlur(PyObject*, PyObject* args)
+{
+ float motionblurvalue;
+ if (!PyArg_ParseTuple(args,"f",&motionblurvalue))
+ return NULL;
+
+ if (!gp_Rasterizer) {
+ PyErr_SetString(PyExc_RuntimeError, "Rasterizer not available");
return NULL;
}
- Py_Return;
+
+ gp_Rasterizer->EnableMotionBlur(motionblurvalue);
+
+ Py_RETURN_NONE;
}
-static PyObject* gPyEnableMotionBlur(PyObject*,
- PyObject* args,
- PyObject*)
+static PyObject* gPyDisableMotionBlur(PyObject*, PyObject* args)
{
- float motionblurvalue;
- if (PyArg_ParseTuple(args,"f",&motionblurvalue))
- {
- if(gp_Rasterizer)
- {
- gp_Rasterizer->EnableMotionBlur(motionblurvalue);
+ if (!gp_Rasterizer) {
+ PyErr_SetString(PyExc_RuntimeError, "Rasterizer not available");
+ return NULL;
+ }
+
+ gp_Rasterizer->DisableMotionBlur();
+
+ Py_RETURN_NONE;
+}
+
+int getGLSLSettingFlag(char *setting)
+{
+ if(strcmp(setting, "lights") == 0)
+ return G_FILE_GLSL_NO_LIGHTS;
+ else if(strcmp(setting, "shaders") == 0)
+ return G_FILE_GLSL_NO_SHADERS;
+ else if(strcmp(setting, "shadows") == 0)
+ return G_FILE_GLSL_NO_SHADOWS;
+ else if(strcmp(setting, "ramps") == 0)
+ return G_FILE_GLSL_NO_RAMPS;
+ else if(strcmp(setting, "nodes") == 0)
+ return G_FILE_GLSL_NO_NODES;
+ else if(strcmp(setting, "extra_textures") == 0)
+ return G_FILE_GLSL_NO_EXTRA_TEX;
+ else
+ return -1;
+}
+
+static PyObject* gPySetGLSLMaterialSetting(PyObject*,
+ PyObject* args,
+ PyObject*)
+{
+ char *setting;
+ int enable, flag, fileflags;
+
+ if (!PyArg_ParseTuple(args,"si",&setting,&enable))
+ return NULL;
+
+ flag = getGLSLSettingFlag(setting);
+
+ if (flag==-1) {
+ PyErr_SetString(PyExc_ValueError, "glsl setting is not known");
+ return NULL;
+ }
+
+ fileflags = G.fileflags;
+
+ if (enable)
+ G.fileflags &= ~flag;
+ else
+ G.fileflags |= flag;
+
+ /* display lists and GLSL materials need to be remade */
+ if(G.fileflags != fileflags) {
+ if(gp_KetsjiEngine) {
+ KX_SceneList *scenes = gp_KetsjiEngine->CurrentScenes();
+ KX_SceneList::iterator it;
+
+ for(it=scenes->begin(); it!=scenes->end(); it++)
+ if((*it)->GetBucketManager())
+ (*it)->GetBucketManager()->ReleaseDisplayLists();
}
+
+ GPU_materials_free();
}
- else {
+
+ Py_RETURN_NONE;
+}
+
+static PyObject* gPyGetGLSLMaterialSetting(PyObject*,
+ PyObject* args,
+ PyObject*)
+{
+ char *setting;
+ int enabled = 0, flag;
+
+ if (!PyArg_ParseTuple(args,"s",&setting))
+ return NULL;
+
+ flag = getGLSLSettingFlag(setting);
+
+ if (flag==-1) {
+ PyErr_SetString(PyExc_ValueError, "glsl setting is not known");
return NULL;
}
- Py_Return;
+
+ enabled = ((G.fileflags & flag) != 0);
+ return PyInt_FromLong(enabled);
}
-static PyObject* gPyDisableMotionBlur(PyObject*,
+#define KX_TEXFACE_MATERIAL 0
+#define KX_BLENDER_MULTITEX_MATERIAL 1
+#define KX_BLENDER_GLSL_MATERIAL 2
+
+static PyObject* gPySetMaterialType(PyObject*,
PyObject* args,
PyObject*)
{
- if(gp_Rasterizer)
- {
- gp_Rasterizer->DisableMotionBlur();
+ int flag, type;
+
+ if (!PyArg_ParseTuple(args,"i",&type))
+ return NULL;
+
+ if(type == KX_BLENDER_GLSL_MATERIAL)
+ flag = G_FILE_GAME_MAT|G_FILE_GAME_MAT_GLSL;
+ else if(type == KX_BLENDER_MULTITEX_MATERIAL)
+ flag = G_FILE_GAME_MAT;
+ else if(type == KX_TEXFACE_MATERIAL)
+ flag = 0;
+ else {
+ PyErr_SetString(PyExc_ValueError, "material type is not known");
+ return NULL;
}
- Py_Return;
+
+ G.fileflags &= ~(G_FILE_GAME_MAT|G_FILE_GAME_MAT_GLSL);
+ G.fileflags |= flag;
+
+ Py_RETURN_NONE;
+}
+
+static PyObject* gPyGetMaterialType(PyObject*)
+{
+ int flag;
+
+ if(G.fileflags & (G_FILE_GAME_MAT|G_FILE_GAME_MAT_GLSL))
+ flag = KX_BLENDER_GLSL_MATERIAL;
+ else if(G.fileflags & G_FILE_GAME_MAT)
+ flag = KX_BLENDER_MULTITEX_MATERIAL;
+ else
+ flag = KX_TEXFACE_MATERIAL;
+
+ return PyInt_FromLong(flag);
}
-STR_String gPyGetWindowHeight__doc__="getWindowHeight doc";
-STR_String gPyGetWindowWidth__doc__="getWindowWidth doc";
-STR_String gPyEnableVisibility__doc__="enableVisibility doc";
-STR_String gPyMakeScreenshot__doc__="make Screenshot doc";
-STR_String gPyShowMouse__doc__="showMouse(bool visible)";
-STR_String gPySetMousePosition__doc__="setMousePosition(int x,int y)";
+static PyObject* gPyDrawLine(PyObject*, PyObject* args)
+{
+ PyObject* ob_from;
+ PyObject* ob_to;
+ PyObject* ob_color;
+
+ if (!gp_Rasterizer) {
+ PyErr_SetString(PyExc_RuntimeError, "Rasterizer not available");
+ return NULL;
+ }
+
+ if (!PyArg_ParseTuple(args,"OOO",&ob_from,&ob_to,&ob_color))
+ return NULL;
+
+ MT_Vector3 from(0., 0., 0.);
+ MT_Vector3 to(0., 0., 0.);
+ MT_Vector3 color(0., 0., 0.);
+ if (!PyVecTo(ob_from, from))
+ return NULL;
+ if (!PyVecTo(ob_to, to))
+ return NULL;
+ if (!PyVecTo(ob_color, color))
+ return NULL;
+
+ gp_Rasterizer->DrawDebugLine(from,to,color);
+
+ Py_RETURN_NONE;
+}
static struct PyMethodDef rasterizer_methods[] = {
{"getWindowWidth",(PyCFunction) gPyGetWindowWidth,
- METH_VARARGS, gPyGetWindowWidth__doc__.Ptr()},
+ METH_VARARGS, "getWindowWidth doc"},
{"getWindowHeight",(PyCFunction) gPyGetWindowHeight,
- METH_VARARGS, gPyGetWindowHeight__doc__.Ptr()},
+ METH_VARARGS, "getWindowHeight doc"},
{"makeScreenshot",(PyCFunction)gPyMakeScreenshot,
- METH_VARARGS, gPyMakeScreenshot__doc__.Ptr()},
+ METH_VARARGS, "make Screenshot doc"},
{"enableVisibility",(PyCFunction) gPyEnableVisibility,
- METH_VARARGS, gPyEnableVisibility__doc__.Ptr()},
+ METH_VARARGS, "enableVisibility doc"},
{"showMouse",(PyCFunction) gPyShowMouse,
- METH_VARARGS, gPyShowMouse__doc__.Ptr()},
+ METH_VARARGS, "showMouse(bool visible)"},
{"setMousePosition",(PyCFunction) gPySetMousePosition,
- METH_VARARGS, gPySetMousePosition__doc__.Ptr()},
+ METH_VARARGS, "setMousePosition(int x,int y)"},
{"setBackgroundColor",(PyCFunction)gPySetBackgroundColor,METH_VARARGS,"set Background Color (rgb)"},
{"setAmbientColor",(PyCFunction)gPySetAmbientColor,METH_VARARGS,"set Ambient Color (rgb)"},
{"setMistColor",(PyCFunction)gPySetMistColor,METH_VARARGS,"set Mist Color (rgb)"},
@@ -700,11 +852,19 @@ static struct PyMethodDef rasterizer_methods[] = {
{"getEyeSeparation", (PyCFunction) gPyGetEyeSeparation, METH_VARARGS, "get the eye separation for stereo mode"},
{"setFocalLength", (PyCFunction) gPySetFocalLength, METH_VARARGS, "set the focal length for stereo mode"},
{"getFocalLength", (PyCFunction) gPyGetFocalLength, METH_VARARGS, "get the focal length for stereo mode"},
+ {"setMaterialMode",(PyCFunction) gPySetMaterialType,
+ METH_VARARGS, "set the material mode to use for OpenGL rendering"},
+ {"getMaterialMode",(PyCFunction) gPyGetMaterialType,
+ METH_NOARGS, "get the material mode being used for OpenGL rendering"},
+ {"setGLSLMaterialSetting",(PyCFunction) gPySetGLSLMaterialSetting,
+ METH_VARARGS, "set the state of a GLSL material setting"},
+ {"getGLSLMaterialSetting",(PyCFunction) gPyGetGLSLMaterialSetting,
+ METH_VARARGS, "get the state of a GLSL material setting"},
+ {"drawLine", (PyCFunction) gPyDrawLine,
+ METH_VARARGS, "draw a line on the screen"},
{ NULL, (PyCFunction) NULL, 0, NULL }
};
-
-
// Initialization function for the module (*must* be called initGameLogic)
static char GameLogic_module_documentation[] =
@@ -717,11 +877,12 @@ static char Rasterizer_module_documentation[] =
-PyObject* initGameLogic(KX_Scene* scene) // quick hack to get gravity hook
+PyObject* initGameLogic(KX_KetsjiEngine *engine, KX_Scene* scene) // quick hack to get gravity hook
{
PyObject* m;
PyObject* d;
+ gp_KetsjiEngine = engine;
gp_KetsjiScene = scene;
gUseVisibilityTemp=false;
@@ -733,6 +894,10 @@ PyObject* initGameLogic(KX_Scene* scene) // quick hack to get gravity hook
// Add some symbolic constants to the module
d = PyModule_GetDict(m);
+
+ // can be overwritten later for gameEngine instances that can load new blend files and re-initialize this module
+ // for now its safe to make sure it exists for other areas such as the web plugin
+ PyDict_SetItemString(d, "globalDict", PyDict_New());
ErrorObject = PyString_FromString("GameLogic.error");
PyDict_SetItemString(d, "error", ErrorObject);
@@ -834,6 +999,38 @@ PyObject* initGameLogic(KX_Scene* scene) // quick hack to get gravity hook
KX_MACRO_addTypesToDict(d, CAM_POS, BL_Shader::CAM_POS);
KX_MACRO_addTypesToDict(d, CONSTANT_TIMER, BL_Shader::CONSTANT_TIMER);
+ /* 10 state actuator */
+ KX_MACRO_addTypesToDict(d, KX_STATE1, (1<<0));
+ KX_MACRO_addTypesToDict(d, KX_STATE2, (1<<1));
+ KX_MACRO_addTypesToDict(d, KX_STATE3, (1<<2));
+ KX_MACRO_addTypesToDict(d, KX_STATE4, (1<<3));
+ KX_MACRO_addTypesToDict(d, KX_STATE5, (1<<4));
+ KX_MACRO_addTypesToDict(d, KX_STATE6, (1<<5));
+ KX_MACRO_addTypesToDict(d, KX_STATE7, (1<<6));
+ KX_MACRO_addTypesToDict(d, KX_STATE8, (1<<7));
+ KX_MACRO_addTypesToDict(d, KX_STATE9, (1<<8));
+ KX_MACRO_addTypesToDict(d, KX_STATE10, (1<<9));
+ KX_MACRO_addTypesToDict(d, KX_STATE11, (1<<10));
+ KX_MACRO_addTypesToDict(d, KX_STATE12, (1<<11));
+ KX_MACRO_addTypesToDict(d, KX_STATE13, (1<<12));
+ KX_MACRO_addTypesToDict(d, KX_STATE14, (1<<13));
+ KX_MACRO_addTypesToDict(d, KX_STATE15, (1<<14));
+ KX_MACRO_addTypesToDict(d, KX_STATE16, (1<<15));
+ KX_MACRO_addTypesToDict(d, KX_STATE17, (1<<16));
+ KX_MACRO_addTypesToDict(d, KX_STATE18, (1<<17));
+ KX_MACRO_addTypesToDict(d, KX_STATE19, (1<<18));
+ KX_MACRO_addTypesToDict(d, KX_STATE20, (1<<19));
+ KX_MACRO_addTypesToDict(d, KX_STATE21, (1<<20));
+ KX_MACRO_addTypesToDict(d, KX_STATE22, (1<<21));
+ KX_MACRO_addTypesToDict(d, KX_STATE23, (1<<22));
+ KX_MACRO_addTypesToDict(d, KX_STATE24, (1<<23));
+ KX_MACRO_addTypesToDict(d, KX_STATE25, (1<<24));
+ KX_MACRO_addTypesToDict(d, KX_STATE26, (1<<25));
+ KX_MACRO_addTypesToDict(d, KX_STATE27, (1<<26));
+ KX_MACRO_addTypesToDict(d, KX_STATE28, (1<<27));
+ KX_MACRO_addTypesToDict(d, KX_STATE29, (1<<28));
+ KX_MACRO_addTypesToDict(d, KX_STATE30, (1<<29));
+
// Check for errors
if (PyErr_Occurred())
{
@@ -847,13 +1044,30 @@ PyObject* initGameLogic(KX_Scene* scene) // quick hack to get gravity hook
// override builtin functions import() and open()
-PyObject *KXpy_open(PyObject *self, PyObject *args)
-{
+PyObject *KXpy_open(PyObject *self, PyObject *args) {
PyErr_SetString(PyExc_RuntimeError, "Sandbox: open() function disabled!\nGame Scripts should not use this function.");
return NULL;
}
+PyObject *KXpy_reload(PyObject *self, PyObject *args) {
+ PyErr_SetString(PyExc_RuntimeError, "Sandbox: reload() function disabled!\nGame Scripts should not use this function.");
+ return NULL;
+}
+
+PyObject *KXpy_file(PyObject *self, PyObject *args) {
+ PyErr_SetString(PyExc_RuntimeError, "Sandbox: file() function disabled!\nGame Scripts should not use this function.");
+ return NULL;
+}
+PyObject *KXpy_execfile(PyObject *self, PyObject *args) {
+ PyErr_SetString(PyExc_RuntimeError, "Sandbox: execfile() function disabled!\nGame Scripts should not use this function.");
+ return NULL;
+}
+
+PyObject *KXpy_compile(PyObject *self, PyObject *args) {
+ PyErr_SetString(PyExc_RuntimeError, "Sandbox: compile() function disabled!\nGame Scripts should not use this function.");
+ return NULL;
+}
PyObject *KXpy_import(PyObject *self, PyObject *args)
{
@@ -889,40 +1103,67 @@ PyObject *KXpy_import(PyObject *self, PyObject *args)
}
+/* override python file type functions */
+#if 0
+static int
+file_init(PyObject *self, PyObject *args, PyObject *kwds)
+{
+ KXpy_file(NULL, NULL);
+ return -1;
+}
+static PyObject *
+file_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
+{
+ return KXpy_file(NULL, NULL);
+}
+#endif
-static PyMethodDef meth_open[] = {
- { "open", KXpy_open, METH_VARARGS,
- "(disabled)"}
-};
-
-
-static PyMethodDef meth_import[] = {
- { "import", KXpy_import, METH_VARARGS,
- "our own import"}
-};
-
+static PyMethodDef meth_open[] = {{ "open", KXpy_open, METH_VARARGS, "(disabled)"}};
+static PyMethodDef meth_reload[] = {{ "reload", KXpy_reload, METH_VARARGS, "(disabled)"}};
+static PyMethodDef meth_file[] = {{ "file", KXpy_file, METH_VARARGS, "(disabled)"}};
+static PyMethodDef meth_execfile[] = {{ "execfile", KXpy_execfile, METH_VARARGS, "(disabled)"}};
+static PyMethodDef meth_compile[] = {{ "compile", KXpy_compile, METH_VARARGS, "(disabled)"}};
+static PyMethodDef meth_import[] = {{ "import", KXpy_import, METH_VARARGS, "our own import"}};
//static PyObject *g_oldopen = 0;
//static PyObject *g_oldimport = 0;
//static int g_security = 0;
-
void setSandbox(TPythonSecurityLevel level)
{
PyObject *m = PyImport_AddModule("__builtin__");
PyObject *d = PyModule_GetDict(m);
- PyObject *meth = PyCFunction_New(meth_open, NULL);
switch (level) {
case psl_Highest:
//if (!g_security) {
//g_oldopen = PyDict_GetItemString(d, "open");
- PyDict_SetItemString(d, "open", meth);
- meth = PyCFunction_New(meth_import, NULL);
- PyDict_SetItemString(d, "__import__", meth);
+
+ // functions we cant trust
+ PyDict_SetItemString(d, "open", PyCFunction_New(meth_open, NULL));
+ PyDict_SetItemString(d, "reload", PyCFunction_New(meth_reload, NULL));
+ PyDict_SetItemString(d, "file", PyCFunction_New(meth_file, NULL));
+ PyDict_SetItemString(d, "execfile", PyCFunction_New(meth_execfile, NULL));
+ PyDict_SetItemString(d, "compile", PyCFunction_New(meth_compile, NULL));
+
+ // our own import
+ PyDict_SetItemString(d, "__import__", PyCFunction_New(meth_import, NULL));
//g_security = level;
+
+ // Overiding file dosnt stop it being accessed if your sneaky
+ // f = [ t for t in (1).__class__.__mro__[-1].__subclasses__() if t.__name__ == 'file'][0]('/some_file.txt', 'w')
+ // f.write('...')
+ // so overwrite the file types functions. be very careful here still, since python uses python.
+ // ps - python devs frown deeply upon this.
+
+ /* this could mess up pythons internals, if we are serious about sandboxing
+ * issues like the one above need to be solved, possibly modify __subclasses__ is safer? */
+#if 0
+ PyFile_Type.tp_init = file_init;
+ PyFile_Type.tp_new = file_new;
+#endif
//}
break;
/*
@@ -1005,6 +1246,11 @@ PyObject* initRasterizer(RAS_IRasterizer* rasty,RAS_ICanvas* canvas)
ErrorObject = PyString_FromString("Rasterizer.error");
PyDict_SetItemString(d, "error", ErrorObject);
+ /* needed for get/setMaterialType */
+ KX_MACRO_addTypesToDict(d, KX_TEXFACE_MATERIAL, KX_TEXFACE_MATERIAL);
+ KX_MACRO_addTypesToDict(d, KX_BLENDER_MULTITEX_MATERIAL, KX_BLENDER_MULTITEX_MATERIAL);
+ KX_MACRO_addTypesToDict(d, KX_BLENDER_GLSL_MATERIAL, KX_BLENDER_GLSL_MATERIAL);
+
// XXXX Add constants here
// Check for errors
@@ -1026,9 +1272,38 @@ static char GameKeys_module_documentation[] =
"This modules provides defines for key-codes"
;
+static char gPyEventToString_doc[] =
+"Take a valid event from the GameKeys module or Keyboard Sensor and return a name"
+;
+static PyObject* gPyEventToString(PyObject*, PyObject* value)
+{
+ PyObject* mod, *dict, *key, *val, *ret = NULL;
+ Py_ssize_t pos = 0;
+
+ mod = PyImport_ImportModule( "GameKeys" );
+ if (!mod)
+ return NULL;
+
+ dict = PyModule_GetDict(mod);
+
+ while (PyDict_Next(dict, &pos, &key, &val)) {
+ if (PyObject_Compare(value, val)==0) {
+ ret = key;
+ break;
+ }
+ }
+
+ PyErr_Clear(); // incase there was an error clearing
+ Py_DECREF(mod);
+ if (!ret) PyErr_SetString(PyExc_ValueError, "expected a valid int keyboard event");
+ else Py_INCREF(ret);
+
+ return ret;
+}
static struct PyMethodDef gamekeys_methods[] = {
+ {"EventToString", (PyCFunction)gPyEventToString, METH_O, (PY_METHODCHAR)gPyEventToString_doc},
{ NULL, (PyCFunction) NULL, 0, NULL }
};
@@ -1186,3 +1461,76 @@ class KX_Scene* PHY_GetActiveScene()
{
return gp_KetsjiScene;
}
+
+// utility function for loading and saving the globalDict
+int saveGamePythonConfig( char **marshal_buffer)
+{
+ int marshal_length = 0;
+ PyObject* gameLogic = PyImport_ImportModule("GameLogic");
+ if (gameLogic) {
+ PyObject* pyGlobalDict = PyDict_GetItemString(PyModule_GetDict(gameLogic), "globalDict"); // Same as importing the module
+ if (pyGlobalDict) {
+#ifdef Py_MARSHAL_VERSION
+ PyObject* pyGlobalDictMarshal = PyMarshal_WriteObjectToString( pyGlobalDict, 2); // Py_MARSHAL_VERSION == 2 as of Py2.5
+#else
+ PyObject* pyGlobalDictMarshal = PyMarshal_WriteObjectToString( pyGlobalDict );
+#endif
+ if (pyGlobalDictMarshal) {
+ // for testing only
+ // PyObject_Print(pyGlobalDictMarshal, stderr, 0);
+
+ marshal_length= PyString_Size(pyGlobalDictMarshal);
+ *marshal_buffer = new char[marshal_length + 1];
+ memcpy(*marshal_buffer, PyString_AsString(pyGlobalDictMarshal), marshal_length);
+
+ Py_DECREF(pyGlobalDictMarshal);
+ } else {
+ printf("Error, GameLogic.globalDict could not be marshal'd\n");
+ }
+ } else {
+ printf("Error, GameLogic.globalDict was removed\n");
+ }
+ Py_DECREF(gameLogic);
+ } else {
+ printf("Error, GameLogic failed to import GameLogic.globalDict will be lost\n");
+ }
+ return marshal_length;
+}
+
+int loadGamePythonConfig(char *marshal_buffer, int marshal_length)
+{
+ /* Restore the dict */
+ if (marshal_buffer) {
+ PyObject* gameLogic = PyImport_ImportModule("GameLogic");
+
+ if (gameLogic) {
+ PyObject* pyGlobalDict = PyMarshal_ReadObjectFromString(marshal_buffer, marshal_length);
+
+ if (pyGlobalDict) {
+ PyDict_SetItemString(PyModule_GetDict(gameLogic), "globalDict", pyGlobalDict); // Same as importing the module.
+ Py_DECREF(gameLogic);
+ return 1;
+ } else {
+ Py_DECREF(gameLogic);
+ PyErr_Clear();
+ printf("Error could not marshall string\n");
+ }
+ } else {
+ printf("Error, GameLogic failed to import GameLogic.globalDict will be lost\n");
+ }
+ }
+ return 0;
+}
+
+void pathGamePythonConfig( char *path )
+{
+ int len = strlen(G.sce);
+
+ strncpy(path, G.sce, sizeof(G.sce));
+ /* replace extension */
+ if (BLI_testextensie(path, ".blend")) {
+ strcpy(path+(len-6), ".bgeconf");
+ } else {
+ strcpy(path+len, ".bgeconf");
+ }
+}
diff --git a/source/gameengine/Ketsji/KX_PythonInit.h b/source/gameengine/Ketsji/KX_PythonInit.h
index f094a1ca575..28d9d72a4c3 100644
--- a/source/gameengine/Ketsji/KX_PythonInit.h
+++ b/source/gameengine/Ketsji/KX_PythonInit.h
@@ -40,7 +40,7 @@ typedef enum {
extern bool gUseVisibilityTemp;
-PyObject* initGameLogic(class KX_Scene* ketsjiscene);
+PyObject* initGameLogic(class KX_KetsjiEngine *engine, class KX_Scene* ketsjiscene);
PyObject* initGameKeys();
PyObject* initRasterizer(class RAS_IRasterizer* rasty,class RAS_ICanvas* canvas);
PyObject* initGamePlayerPythonScripting(const STR_String& progname, TPythonSecurityLevel level);
@@ -49,6 +49,10 @@ void exitGamePlayerPythonScripting();
PyObject* initGamePythonScripting(const STR_String& progname, TPythonSecurityLevel level);
void exitGamePythonScripting();
+void pathGamePythonConfig( char *path );
+int saveGamePythonConfig( char **marshal_buffer);
+int loadGamePythonConfig(char *marshal_buffer, int marshal_length);
+
void PHY_SetActiveScene(class KX_Scene* scene);
class KX_Scene* PHY_GetActiveScene();
#include "MT_Vector3.h"
diff --git a/source/gameengine/Ketsji/KX_RadarSensor.cpp b/source/gameengine/Ketsji/KX_RadarSensor.cpp
index d371626b597..244e9b75d8e 100644
--- a/source/gameengine/Ketsji/KX_RadarSensor.cpp
+++ b/source/gameengine/Ketsji/KX_RadarSensor.cpp
@@ -221,11 +221,11 @@ PyParentObject KX_RadarSensor::Parents[] = {
PyMethodDef KX_RadarSensor::Methods[] = {
{"getConeOrigin", (PyCFunction) KX_RadarSensor::sPyGetConeOrigin,
- METH_VARARGS, GetConeOrigin_doc},
+ METH_VARARGS, (PY_METHODCHAR)GetConeOrigin_doc},
{"getConeTarget", (PyCFunction) KX_RadarSensor::sPyGetConeTarget,
- METH_VARARGS, GetConeTarget_doc},
+ METH_VARARGS, (PY_METHODCHAR)GetConeTarget_doc},
{"getConeHeight", (PyCFunction) KX_RadarSensor::sPyGetConeHeight,
- METH_VARARGS, GetConeHeight_doc},
+ METH_VARARGS, (PY_METHODCHAR)GetConeHeight_doc},
{NULL,NULL,NULL,NULL} //Sentinel
};
@@ -234,7 +234,7 @@ PyObject* KX_RadarSensor::_getattr(const STR_String& attr) {
}
/* getConeOrigin */
-char KX_RadarSensor::GetConeOrigin_doc[] =
+const char KX_RadarSensor::GetConeOrigin_doc[] =
"getConeOrigin()\n"
"\tReturns the origin of the cone with which to test. The origin\n"
"\tis in the middle of the cone.";
@@ -251,7 +251,7 @@ PyObject* KX_RadarSensor::PyGetConeOrigin(PyObject* self,
}
/* getConeOrigin */
-char KX_RadarSensor::GetConeTarget_doc[] =
+const char KX_RadarSensor::GetConeTarget_doc[] =
"getConeTarget()\n"
"\tReturns the center of the bottom face of the cone with which to test.\n";
PyObject* KX_RadarSensor::PyGetConeTarget(PyObject* self,
@@ -267,7 +267,7 @@ PyObject* KX_RadarSensor::PyGetConeTarget(PyObject* self,
}
/* getConeOrigin */
-char KX_RadarSensor::GetConeHeight_doc[] =
+const char KX_RadarSensor::GetConeHeight_doc[] =
"getConeHeight()\n"
"\tReturns the height of the cone with which to test.\n";
PyObject* KX_RadarSensor::PyGetConeHeight(PyObject* self,
diff --git a/source/gameengine/Ketsji/KX_RayCast.cpp b/source/gameengine/Ketsji/KX_RayCast.cpp
index 89e2d645d54..974d4b992a6 100644
--- a/source/gameengine/Ketsji/KX_RayCast.cpp
+++ b/source/gameengine/Ketsji/KX_RayCast.cpp
@@ -40,7 +40,21 @@
#include "PHY_IPhysicsEnvironment.h"
#include "PHY_IPhysicsController.h"
-bool KX_RayCast::RayTest(KX_IPhysicsController* ignore_controller, PHY_IPhysicsEnvironment* physics_environment, const MT_Point3& _frompoint, const MT_Point3& topoint, MT_Point3& result_point, MT_Vector3& result_normal, const KX_RayCast& callback)
+KX_RayCast::KX_RayCast(KX_IPhysicsController* ignoreController, bool faceNormal)
+ :PHY_IRayCastFilterCallback(dynamic_cast<PHY_IPhysicsController*>(ignoreController), faceNormal)
+{
+}
+
+void KX_RayCast::reportHit(PHY_RayCastResult* result)
+{
+ m_hitFound = true;
+ m_hitPoint.setValue((const float*)result->m_hitPoint);
+ m_hitNormal.setValue((const float*)result->m_hitNormal);
+ m_hitMesh = result->m_meshObject;
+ m_hitPolygon = result->m_polygon;
+}
+
+bool KX_RayCast::RayTest(PHY_IPhysicsEnvironment* physics_environment, const MT_Point3& _frompoint, const MT_Point3& topoint, KX_RayCast& callback)
{
// Loops over all physics objects between frompoint and topoint,
// calling callback.RayHit for each one.
@@ -50,58 +64,51 @@ bool KX_RayCast::RayTest(KX_IPhysicsController* ignore_controller, PHY_IPhysicsE
// returns true if an object was found, false if not.
MT_Point3 frompoint(_frompoint);
const MT_Vector3 todir( (topoint - frompoint).safe_normalized() );
+ MT_Point3 prevpoint(_frompoint+todir*(-1.f));
PHY_IPhysicsController* hit_controller;
- PHY__Vector3 phy_pos;
- PHY__Vector3 phy_normal;
- while((hit_controller = physics_environment->rayTest(dynamic_cast<PHY_IPhysicsController*>(ignore_controller),
+ while((hit_controller = physics_environment->rayTest(callback,
frompoint.x(),frompoint.y(),frompoint.z(),
- topoint.x(),topoint.y(),topoint.z(),
- phy_pos[0],phy_pos[1],phy_pos[2],
- phy_normal[0],phy_normal[1],phy_normal[2])))
+ topoint.x(),topoint.y(),topoint.z())) != NULL)
{
- result_point = MT_Point3(phy_pos);
- result_normal = MT_Vector3(phy_normal);
KX_ClientObjectInfo* info = static_cast<KX_ClientObjectInfo*>(hit_controller->getNewClientInfo());
if (!info)
{
printf("no info!\n");
MT_assert(info && "Physics controller with no client object info");
- return false;
+ break;
}
- if (callback.RayHit(info, result_point, result_normal))
- return true;
-
- // There is a bug in the code below: the delta is computed with the wrong
- // sign on the face opposite to the center, resulting in infinite looping.
- // In Blender 2.45 this code was never executed because callback.RayHit() always
- // returned true, causing the ray sensor to stop on the first object.
- // To avoid changing the behaviour will simply return false here.
- // It should be discussed if we want the ray sensor to "see" through objects
- // that don't have the required property/material (condition to get here)
- return false;
-
- // skip past the object and keep tracing
- /* We add 0.01 of fudge, so that if the margin && radius == 0., we don't endless loop. */
- MT_Scalar marg = 0.01 + hit_controller->GetMargin();
- marg += 2.f * hit_controller->GetMargin();
+ // The biggest danger to to endless loop, prevent this by checking that the
+ // hit point always progresses along the ray direction..
+ prevpoint -= callback.m_hitPoint;
+ if (prevpoint.length2() < MT_EPSILON)
+ break;
+
+ if (callback.RayHit(info))
+ // caller may decide to stop the loop and still cancel the hit
+ return callback.m_hitFound;
+
+ // Skip past the object and keep tracing.
+ // Note that retrieving in a single shot multiple hit points would be possible
+ // but it would require some change in Bullet.
+ prevpoint = callback.m_hitPoint;
+ /* We add 0.001 of fudge, so that if the margin && radius == 0., we don't endless loop. */
+ MT_Scalar marg = 0.001 + hit_controller->GetMargin();
+ marg *= 2.f;
/* Calculate the other side of this object */
- PHY__Vector3 hitpos;
- hit_controller->getPosition(hitpos);
- MT_Point3 hitObjPos(hitpos);
-
- MT_Vector3 hitvector = hitObjPos - result_point;
- if (hitvector.dot(hitvector) > MT_EPSILON)
- {
- hitvector.normalize();
- marg *= 2.*todir.dot(hitvector);
- }
- frompoint = result_point + marg * todir;
+ MT_Scalar h = MT_abs(todir.dot(callback.m_hitNormal));
+ if (h <= 0.01)
+ // the normal is almost orthogonal to the ray direction, cannot compute the other side
+ break;
+ marg /= h;
+ frompoint = callback.m_hitPoint + marg * todir;
+ // verify that we are not passed the to point
+ if ((topoint - frompoint).dot(todir) < 0.f)
+ break;
}
-
- return hit_controller;
+ return false;
}
diff --git a/source/gameengine/Ketsji/KX_RayCast.h b/source/gameengine/Ketsji/KX_RayCast.h
index 607dabd8afc..c3084c997a1 100644
--- a/source/gameengine/Ketsji/KX_RayCast.h
+++ b/source/gameengine/Ketsji/KX_RayCast.h
@@ -30,12 +30,14 @@
#ifndef __KX_RAYCAST_H__
#define __KX_RAYCAST_H__
-class MT_Point3;
-class MT_Vector3;
-class KX_IPhysicsController;
-class PHY_IPhysicsEnvironment;
+#include "PHY_IPhysicsEnvironment.h"
+#include "PHY_IPhysicsController.h"
+#include "MT_Point3.h"
+#include "MT_Vector3.h"
+class RAS_MeshObject;
struct KX_ClientObjectInfo;
+class KX_IPhysicsController;
/**
* Defines a function for doing a ray cast.
@@ -49,17 +51,27 @@ struct KX_ClientObjectInfo;
*
* Returns true if a client was accepted, false if nothing found.
*/
-class KX_RayCast
+class KX_RayCast : public PHY_IRayCastFilterCallback
{
-protected:
- KX_RayCast() {};
public:
+ bool m_hitFound;
+ MT_Point3 m_hitPoint;
+ MT_Vector3 m_hitNormal;
+ const RAS_MeshObject* m_hitMesh;
+ int m_hitPolygon;
+
+ KX_RayCast(KX_IPhysicsController* ignoreController, bool faceNormal);
virtual ~KX_RayCast() {}
+ /**
+ * The physic environment returns the ray casting result through this function
+ */
+ virtual void reportHit(PHY_RayCastResult* result);
+
/** ray test callback.
* either override this in your class, or use a callback wrapper.
*/
- virtual bool RayHit(KX_ClientObjectInfo* client, MT_Point3& hit_point, MT_Vector3& hit_normal) const = 0;
+ virtual bool RayHit(KX_ClientObjectInfo* client) = 0;
/**
* Callback wrapper.
@@ -71,13 +83,11 @@ public:
/// Public interface.
/// Implement bool RayHit in your class to receive ray callbacks.
- static bool RayTest(KX_IPhysicsController* physics_controller,
+ static bool RayTest(
PHY_IPhysicsEnvironment* physics_environment,
- const MT_Point3& _frompoint,
+ const MT_Point3& frompoint,
const MT_Point3& topoint,
- MT_Point3& result_point,
- MT_Vector3& result_normal,
- const KX_RayCast& callback);
+ KX_RayCast& callback);
};
@@ -86,18 +96,32 @@ template<class T> class KX_RayCast::Callback : public KX_RayCast
T *self;
void *data;
public:
- Callback(T *_self, void *_data = NULL)
- : self(_self),
+ Callback(T *_self, KX_IPhysicsController* controller=NULL, void *_data = NULL, bool faceNormal=false)
+ : KX_RayCast(controller, faceNormal),
+ self(_self),
data(_data)
{
}
~Callback() {}
-
- virtual bool RayHit(KX_ClientObjectInfo* client, MT_Point3& hit_point, MT_Vector3& hit_normal) const
+
+ virtual bool RayHit(KX_ClientObjectInfo* client)
{
- return self->RayHit(client, hit_point, hit_normal, data);
+ return self->RayHit(client, this, data);
}
+
+ virtual bool needBroadphaseRayCast(PHY_IPhysicsController* controller)
+ {
+ KX_ClientObjectInfo* info = static_cast<KX_ClientObjectInfo*>(controller->getNewClientInfo());
+
+ if (!info)
+ {
+ MT_assert(info && "Physics controller with no client object info");
+ return false;
+ }
+ return self->NeedRayCast(info);
+ }
+
};
diff --git a/source/gameengine/Ketsji/KX_RaySensor.cpp b/source/gameengine/Ketsji/KX_RaySensor.cpp
index a416c8c9f89..e24fb773eac 100644
--- a/source/gameengine/Ketsji/KX_RaySensor.cpp
+++ b/source/gameengine/Ketsji/KX_RaySensor.cpp
@@ -51,6 +51,7 @@ KX_RaySensor::KX_RaySensor(class SCA_EventManager* eventmgr,
SCA_IObject* gameobj,
const STR_String& propname,
bool bFindMaterial,
+ bool bXRay,
double distance,
int axis,
KX_Scene* ketsjiScene,
@@ -58,6 +59,7 @@ KX_RaySensor::KX_RaySensor(class SCA_EventManager* eventmgr,
: SCA_ISensor(gameobj,eventmgr, T),
m_propertyname(propname),
m_bFindMaterial(bFindMaterial),
+ m_bXRay(bXRay),
m_distance(distance),
m_scene(ketsjiScene),
m_axis(axis)
@@ -104,16 +106,10 @@ bool KX_RaySensor::IsPositiveTrigger()
return result;
}
-bool KX_RaySensor::RayHit(KX_ClientObjectInfo* client, MT_Point3& hit_point, MT_Vector3& hit_normal, void * const data)
+bool KX_RaySensor::RayHit(KX_ClientObjectInfo* client, KX_RayCast* result, void * const data)
{
KX_GameObject* hitKXObj = client->m_gameobject;
-
- if (client->m_type > KX_ClientObjectInfo::ACTOR)
- {
- // false hit
- return false;
- }
bool bFound = false;
if (m_propertyname.Length() == 0)
@@ -139,16 +135,43 @@ bool KX_RaySensor::RayHit(KX_ClientObjectInfo* client, MT_Point3& hit_point, MT_
{
m_rayHit = true;
m_hitObject = hitKXObj;
- m_hitPosition = hit_point;
- m_hitNormal = hit_normal;
+ m_hitPosition = result->m_hitPoint;
+ m_hitNormal = result->m_hitNormal;
}
-
- return bFound;
-
+ // no multi-hit search yet
+ return true;
}
-
+/* this function is used to pre-filter the object before casting the ray on them.
+ This is useful for "X-Ray" option when we want to see "through" unwanted object.
+ */
+bool KX_RaySensor::NeedRayCast(KX_ClientObjectInfo* client)
+{
+ if (client->m_type > KX_ClientObjectInfo::ACTOR)
+ {
+ // Unknown type of object, skip it.
+ // Should not occur as the sensor objects are filtered in RayTest()
+ printf("Invalid client type %d found ray casting\n", client->m_type);
+ return false;
+ }
+ if (m_bXRay && m_propertyname.Length() != 0)
+ {
+ if (m_bFindMaterial)
+ {
+ // not quite correct: an object may have multiple material
+ // should check all the material and not only the first one
+ if (!client->m_auxilary_info || (m_propertyname != ((char*)client->m_auxilary_info)))
+ return false;
+ }
+ else
+ {
+ if (client->m_gameobject->GetProperty(m_propertyname) == NULL)
+ return false;
+ }
+ }
+ return true;
+}
bool KX_RaySensor::Evaluate(CValue* event)
{
@@ -215,8 +238,6 @@ bool KX_RaySensor::Evaluate(CValue* event)
m_rayDirection = todir;
MT_Point3 topoint = frompoint + (m_distance) * todir;
- MT_Point3 resultpoint;
- MT_Vector3 resultnormal;
PHY_IPhysicsEnvironment* pe = m_scene->GetPhysicsEnvironment();
if (!pe)
@@ -238,7 +259,8 @@ bool KX_RaySensor::Evaluate(CValue* event)
PHY_IPhysicsEnvironment* physics_environment = this->m_scene->GetPhysicsEnvironment();
- result = KX_RayCast::RayTest(spc, physics_environment, frompoint, topoint, resultpoint, resultnormal, KX_RayCast::Callback<KX_RaySensor>(this));
+ KX_RayCast::Callback<KX_RaySensor> callback(this, spc);
+ KX_RayCast::RayTest(physics_environment, frompoint, topoint, callback);
/* now pass this result to some controller */
@@ -265,6 +287,10 @@ bool KX_RaySensor::Evaluate(CValue* event)
// notify logicsystem that ray JUST left the Object
result = true;
}
+ else
+ {
+ result = false;
+ }
}
if (reset)
@@ -309,14 +335,14 @@ PyParentObject KX_RaySensor::Parents[] = {
};
PyMethodDef KX_RaySensor::Methods[] = {
- {"getHitObject",(PyCFunction) KX_RaySensor::sPyGetHitObject,METH_VARARGS, GetHitObject_doc},
- {"getHitPosition",(PyCFunction) KX_RaySensor::sPyGetHitPosition,METH_VARARGS, GetHitPosition_doc},
- {"getHitNormal",(PyCFunction) KX_RaySensor::sPyGetHitNormal,METH_VARARGS, GetHitNormal_doc},
- {"getRayDirection",(PyCFunction) KX_RaySensor::sPyGetRayDirection,METH_VARARGS, GetRayDirection_doc},
+ {"getHitObject",(PyCFunction) KX_RaySensor::sPyGetHitObject,METH_VARARGS, (PY_METHODCHAR)GetHitObject_doc},
+ {"getHitPosition",(PyCFunction) KX_RaySensor::sPyGetHitPosition,METH_VARARGS, (PY_METHODCHAR)GetHitPosition_doc},
+ {"getHitNormal",(PyCFunction) KX_RaySensor::sPyGetHitNormal,METH_VARARGS, (PY_METHODCHAR)GetHitNormal_doc},
+ {"getRayDirection",(PyCFunction) KX_RaySensor::sPyGetRayDirection,METH_VARARGS, (PY_METHODCHAR)GetRayDirection_doc},
{NULL,NULL} //Sentinel
};
-char KX_RaySensor::GetHitObject_doc[] =
+const char KX_RaySensor::GetHitObject_doc[] =
"getHitObject()\n"
"\tReturns the name of the object that was hit by this ray.\n";
PyObject* KX_RaySensor::PyGetHitObject(PyObject* self,
@@ -331,7 +357,7 @@ PyObject* KX_RaySensor::PyGetHitObject(PyObject* self,
}
-char KX_RaySensor::GetHitPosition_doc[] =
+const char KX_RaySensor::GetHitPosition_doc[] =
"getHitPosition()\n"
"\tReturns the position (in worldcoordinates) where the object was hit by this ray.\n";
PyObject* KX_RaySensor::PyGetHitPosition(PyObject* self,
@@ -351,7 +377,7 @@ PyObject* KX_RaySensor::PyGetHitPosition(PyObject* self,
}
-char KX_RaySensor::GetRayDirection_doc[] =
+const char KX_RaySensor::GetRayDirection_doc[] =
"getRayDirection()\n"
"\tReturns the direction from the ray (in worldcoordinates) .\n";
PyObject* KX_RaySensor::PyGetRayDirection(PyObject* self,
@@ -371,7 +397,7 @@ PyObject* KX_RaySensor::PyGetRayDirection(PyObject* self,
}
-char KX_RaySensor::GetHitNormal_doc[] =
+const char KX_RaySensor::GetHitNormal_doc[] =
"getHitNormal()\n"
"\tReturns the normal (in worldcoordinates) of the object at the location where the object was hit by this ray.\n";
PyObject* KX_RaySensor::PyGetHitNormal(PyObject* self,
diff --git a/source/gameengine/Ketsji/KX_RaySensor.h b/source/gameengine/Ketsji/KX_RaySensor.h
index f4305b053d1..02a755fedc1 100644
--- a/source/gameengine/Ketsji/KX_RaySensor.h
+++ b/source/gameengine/Ketsji/KX_RaySensor.h
@@ -36,12 +36,14 @@
#include "MT_Point3.h"
struct KX_ClientObjectInfo;
+class KX_RayCast;
class KX_RaySensor : public SCA_ISensor
{
Py_Header;
STR_String m_propertyname;
bool m_bFindMaterial;
+ bool m_bXRay;
double m_distance;
class KX_Scene* m_scene;
bool m_bTriggered;
@@ -56,7 +58,8 @@ public:
KX_RaySensor(class SCA_EventManager* eventmgr,
SCA_IObject* gameobj,
const STR_String& propname,
- bool fFindMaterial,
+ bool bFindMaterial,
+ bool bXRay,
double distance,
int axis,
class KX_Scene* ketsjiScene,
@@ -68,7 +71,8 @@ public:
virtual bool IsPositiveTrigger();
virtual void Init();
- bool RayHit(KX_ClientObjectInfo* client, MT_Point3& hit_point, MT_Vector3& hit_normal, void * const data);
+ bool RayHit(KX_ClientObjectInfo* client, KX_RayCast* result, void * const data);
+ bool NeedRayCast(KX_ClientObjectInfo* client);
KX_PYMETHOD_DOC(KX_RaySensor,GetHitObject);
KX_PYMETHOD_DOC(KX_RaySensor,GetHitPosition);
diff --git a/source/gameengine/Ketsji/KX_SCA_AddObjectActuator.cpp b/source/gameengine/Ketsji/KX_SCA_AddObjectActuator.cpp
index ca0106d64d9..5777f54b799 100644
--- a/source/gameengine/Ketsji/KX_SCA_AddObjectActuator.cpp
+++ b/source/gameengine/Ketsji/KX_SCA_AddObjectActuator.cpp
@@ -39,6 +39,8 @@
#include "KX_GameObject.h"
#include "KX_IPhysicsController.h"
+#include "PyObjectPlus.h"
+
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
@@ -52,14 +54,20 @@ KX_SCA_AddObjectActuator::KX_SCA_AddObjectActuator(SCA_IObject *gameobj,
int time,
SCA_IScene* scene,
const MT_Vector3& linvel,
- bool local,
+ bool linv_local,
+ const MT_Vector3& angvel,
+ bool angv_local,
PyTypeObject* T)
:
SCA_IActuator(gameobj, T),
m_OriginalObject(original),
m_scene(scene),
+
m_linear_velocity(linvel),
- m_localFlag(local)
+ m_localLinvFlag(linv_local),
+
+ m_angular_velocity(angvel),
+ m_localAngvFlag(angv_local)
{
if (m_OriginalObject)
m_OriginalObject->RegisterActuator(this);
@@ -180,14 +188,16 @@ PyParentObject KX_SCA_AddObjectActuator::Parents[] = {
NULL
};
PyMethodDef KX_SCA_AddObjectActuator::Methods[] = {
- {"setObject", (PyCFunction) KX_SCA_AddObjectActuator::sPySetObject, METH_O, SetObject_doc},
- {"setTime", (PyCFunction) KX_SCA_AddObjectActuator::sPySetTime, METH_VARARGS, SetTime_doc},
- {"getObject", (PyCFunction) KX_SCA_AddObjectActuator::sPyGetObject, METH_VARARGS, GetObject_doc},
- {"getTime", (PyCFunction) KX_SCA_AddObjectActuator::sPyGetTime, METH_VARARGS, GetTime_doc},
- {"getLinearVelocity", (PyCFunction) KX_SCA_AddObjectActuator::sPyGetLinearVelocity, METH_VARARGS, GetLinearVelocity_doc},
- {"setLinearVelocity", (PyCFunction) KX_SCA_AddObjectActuator::sPySetLinearVelocity, METH_VARARGS, SetLinearVelocity_doc},
- {"getLastCreatedObject", (PyCFunction) KX_SCA_AddObjectActuator::sPyGetLastCreatedObject, METH_VARARGS,"getLastCreatedObject() : get the object handle to the last created object\n"},
- {"instantAddObject", (PyCFunction) KX_SCA_AddObjectActuator::sPyInstantAddObject, METH_VARARGS,"instantAddObject() : immediately add object without delay\n"},
+ {"setObject", (PyCFunction) KX_SCA_AddObjectActuator::sPySetObject, METH_O, (PY_METHODCHAR)SetObject_doc},
+ {"setTime", (PyCFunction) KX_SCA_AddObjectActuator::sPySetTime, METH_O, (PY_METHODCHAR)SetTime_doc},
+ {"getObject", (PyCFunction) KX_SCA_AddObjectActuator::sPyGetObject, METH_VARARGS, (PY_METHODCHAR)GetObject_doc},
+ {"getTime", (PyCFunction) KX_SCA_AddObjectActuator::sPyGetTime, METH_NOARGS, (PY_METHODCHAR)GetTime_doc},
+ {"getLinearVelocity", (PyCFunction) KX_SCA_AddObjectActuator::sPyGetLinearVelocity, METH_NOARGS, (PY_METHODCHAR)GetLinearVelocity_doc},
+ {"setLinearVelocity", (PyCFunction) KX_SCA_AddObjectActuator::sPySetLinearVelocity, METH_VARARGS, (PY_METHODCHAR)SetLinearVelocity_doc},
+ {"getAngularVelocity", (PyCFunction) KX_SCA_AddObjectActuator::sPyGetAngularVelocity, METH_NOARGS, (PY_METHODCHAR)GetAngularVelocity_doc},
+ {"setAngularVelocity", (PyCFunction) KX_SCA_AddObjectActuator::sPySetAngularVelocity, METH_VARARGS, (PY_METHODCHAR)SetAngularVelocity_doc},
+ {"getLastCreatedObject", (PyCFunction) KX_SCA_AddObjectActuator::sPyGetLastCreatedObject, METH_NOARGS,"getLastCreatedObject() : get the object handle to the last created object\n"},
+ {"instantAddObject", (PyCFunction) KX_SCA_AddObjectActuator::sPyInstantAddObject, METH_NOARGS,"instantAddObject() : immediately add object without delay\n"},
{NULL,NULL} //Sentinel
};
@@ -199,7 +209,7 @@ PyObject* KX_SCA_AddObjectActuator::_getattr(const STR_String& attr)
}
/* 1. setObject */
-char KX_SCA_AddObjectActuator::SetObject_doc[] =
+const char KX_SCA_AddObjectActuator::SetObject_doc[] =
"setObject(object)\n"
"\t- object: KX_GameObject, string or None\n"
"\tSets the object that will be added. There has to be an object\n"
@@ -224,46 +234,43 @@ PyObject* KX_SCA_AddObjectActuator::PySetObject(PyObject* self, PyObject* value)
/* 2. setTime */
-char KX_SCA_AddObjectActuator::SetTime_doc[] =
+const char KX_SCA_AddObjectActuator::SetTime_doc[] =
"setTime(duration)\n"
"\t- duration: integer\n"
"\tSets the lifetime of the object that will be added, in frames. \n"
"\tIf the duration is negative, it is set to 0.\n";
-PyObject* KX_SCA_AddObjectActuator::PySetTime(PyObject* self,
- PyObject* args,
- PyObject* kwds)
+PyObject* KX_SCA_AddObjectActuator::PySetTime(PyObject* self, PyObject* value)
{
- int deltatime;
-
- if (!PyArg_ParseTuple(args, "i", &deltatime))
+ int deltatime = PyInt_AsLong(value);
+ if (deltatime==-1 && PyErr_Occurred()) {
+ PyErr_SetString(PyExc_TypeError, "expected an int");
return NULL;
+ }
m_timeProp = deltatime;
if (m_timeProp < 0) m_timeProp = 0;
- Py_Return;
+ Py_RETURN_NONE;
}
/* 3. getTime */
-char KX_SCA_AddObjectActuator::GetTime_doc[] =
+const char KX_SCA_AddObjectActuator::GetTime_doc[] =
"GetTime()\n"
"\tReturns the lifetime of the object that will be added.\n";
-PyObject* KX_SCA_AddObjectActuator::PyGetTime(PyObject* self,
- PyObject* args,
- PyObject* kwds)
+PyObject* KX_SCA_AddObjectActuator::PyGetTime(PyObject* self)
{
return PyInt_FromLong(m_timeProp);
}
/* 4. getObject */
-char KX_SCA_AddObjectActuator::GetObject_doc[] =
+const char KX_SCA_AddObjectActuator::GetObject_doc[] =
"getObject(name_only = 1)\n"
"name_only - optional arg, when true will return the KX_GameObject rather then its name\n"
"\tReturns the name of the object that will be added.\n";
@@ -285,22 +292,18 @@ PyObject* KX_SCA_AddObjectActuator::PyGetObject(PyObject* self, PyObject* args)
/* 5. getLinearVelocity */
-char KX_SCA_AddObjectActuator::GetLinearVelocity_doc[] =
+const char KX_SCA_AddObjectActuator::GetLinearVelocity_doc[] =
"GetLinearVelocity()\n"
"\tReturns the linear velocity that will be assigned to \n"
"\tthe created object.\n";
-
-
-PyObject* KX_SCA_AddObjectActuator::PyGetLinearVelocity(PyObject* self,
- PyObject* args,
- PyObject* kwds)
+PyObject* KX_SCA_AddObjectActuator::PyGetLinearVelocity(PyObject* self)
{
PyObject *retVal = PyList_New(3);
- PyList_SetItem(retVal, 0, PyFloat_FromDouble(m_linear_velocity[0]));
- PyList_SetItem(retVal, 1, PyFloat_FromDouble(m_linear_velocity[1]));
- PyList_SetItem(retVal, 2, PyFloat_FromDouble(m_linear_velocity[2]));
+ PyList_SET_ITEM(retVal, 0, PyFloat_FromDouble(m_linear_velocity[0]));
+ PyList_SET_ITEM(retVal, 1, PyFloat_FromDouble(m_linear_velocity[1]));
+ PyList_SET_ITEM(retVal, 2, PyFloat_FromDouble(m_linear_velocity[2]));
return retVal;
}
@@ -308,17 +311,15 @@ PyObject* KX_SCA_AddObjectActuator::PyGetLinearVelocity(PyObject* self,
/* 6. setLinearVelocity */
-char KX_SCA_AddObjectActuator::SetLinearVelocity_doc[] =
+const char KX_SCA_AddObjectActuator::SetLinearVelocity_doc[] =
"setLinearVelocity(vx, vy, vz)\n"
"\t- vx: float\n"
"\t- vy: float\n"
"\t- vz: float\n"
+"\t- local: bool\n"
"\tAssign this velocity to the created object. \n";
-
-PyObject* KX_SCA_AddObjectActuator::PySetLinearVelocity(PyObject* self,
- PyObject* args,
- PyObject* kwds)
+PyObject* KX_SCA_AddObjectActuator::PySetLinearVelocity(PyObject* self, PyObject* args)
{
float vecArg[3];
@@ -326,7 +327,46 @@ PyObject* KX_SCA_AddObjectActuator::PySetLinearVelocity(PyObject* self,
return NULL;
m_linear_velocity.setValue(vecArg);
- Py_Return;
+ Py_RETURN_NONE;
+}
+
+/* 7. getAngularVelocity */
+const char KX_SCA_AddObjectActuator::GetAngularVelocity_doc[] =
+"GetAngularVelocity()\n"
+"\tReturns the angular velocity that will be assigned to \n"
+"\tthe created object.\n";
+
+PyObject* KX_SCA_AddObjectActuator::PyGetAngularVelocity(PyObject* self)
+{
+ PyObject *retVal = PyList_New(3);
+
+ PyList_SET_ITEM(retVal, 0, PyFloat_FromDouble(m_angular_velocity[0]));
+ PyList_SET_ITEM(retVal, 1, PyFloat_FromDouble(m_angular_velocity[1]));
+ PyList_SET_ITEM(retVal, 2, PyFloat_FromDouble(m_angular_velocity[2]));
+
+ return retVal;
+}
+
+
+
+/* 8. setAngularVelocity */
+const char KX_SCA_AddObjectActuator::SetAngularVelocity_doc[] =
+"setAngularVelocity(vx, vy, vz)\n"
+"\t- vx: float\n"
+"\t- vy: float\n"
+"\t- vz: float\n"
+"\t- local: bool\n"
+"\tAssign this angular velocity to the created object. \n";
+
+PyObject* KX_SCA_AddObjectActuator::PySetAngularVelocity(PyObject* self, PyObject* args)
+{
+
+ float vecArg[3];
+ if (!PyArg_ParseTuple(args, "fff", &vecArg[0], &vecArg[1], &vecArg[2]))
+ return NULL;
+
+ m_angular_velocity.setValue(vecArg);
+ Py_RETURN_NONE;
}
void KX_SCA_AddObjectActuator::InstantAddObject()
@@ -337,8 +377,9 @@ void KX_SCA_AddObjectActuator::InstantAddObject()
// Now it needs to be added to the current scene.
SCA_IObject* replica = m_scene->AddReplicaObject(m_OriginalObject,GetParent(),m_timeProp );
KX_GameObject * game_obj = static_cast<KX_GameObject *>(replica);
- game_obj->setLinearVelocity(m_linear_velocity,m_localFlag);
- game_obj->ResolveCombinedVelocities(m_linear_velocity, MT_Vector3(0., 0., 0.), m_localFlag, false);
+ game_obj->setLinearVelocity(m_linear_velocity,m_localLinvFlag);
+ game_obj->setAngularVelocity(m_angular_velocity,m_localAngvFlag);
+ game_obj->ResolveCombinedVelocities(m_linear_velocity, m_angular_velocity, m_localLinvFlag, m_localAngvFlag);
// keep a copy of the last object, to allow python scripters to change it
if (m_lastCreatedObject)
@@ -355,33 +396,32 @@ void KX_SCA_AddObjectActuator::InstantAddObject()
}
}
-PyObject* KX_SCA_AddObjectActuator::PyInstantAddObject(PyObject* self,
- PyObject* args,
- PyObject* kwds)
+PyObject* KX_SCA_AddObjectActuator::PyInstantAddObject(PyObject* self)
{
InstantAddObject();
- Py_Return;
+ Py_RETURN_NONE;
}
/* 7. GetLastCreatedObject */
-char KX_SCA_AddObjectActuator::GetLastCreatedObject_doc[] =
+const char KX_SCA_AddObjectActuator::GetLastCreatedObject_doc[] =
"getLastCreatedObject()\n"
"\tReturn the last created object. \n";
-PyObject* KX_SCA_AddObjectActuator::PyGetLastCreatedObject(PyObject* self,
- PyObject* args,
- PyObject* kwds)
+PyObject* KX_SCA_AddObjectActuator::PyGetLastCreatedObject(PyObject* self)
{
SCA_IObject* result = this->GetLastCreatedObject();
- if (result)
+
+ // if result->GetSGNode() is NULL
+ // it means the object has ended, The BGE python api crashes in many places if the object is returned.
+ if (result && (static_cast<KX_GameObject *>(result))->GetSGNode())
{
result->AddRef();
return result;
}
// don't return NULL to python anymore, it gives trouble in the scripts
- Py_Return;
+ Py_RETURN_NONE;
}
diff --git a/source/gameengine/Ketsji/KX_SCA_AddObjectActuator.h b/source/gameengine/Ketsji/KX_SCA_AddObjectActuator.h
index e7fdb2fbfbc..278d4180284 100644
--- a/source/gameengine/Ketsji/KX_SCA_AddObjectActuator.h
+++ b/source/gameengine/Ketsji/KX_SCA_AddObjectActuator.h
@@ -60,9 +60,13 @@ class KX_SCA_AddObjectActuator : public SCA_IActuator
/// Linear velocity upon creation of the object.
MT_Vector3 m_linear_velocity;
+
+ /// Angular velocity upon creation of the object.
+ MT_Vector3 m_angular_velocity;
/// Apply the velocity locally
- bool m_localFlag;
+ bool m_localLinvFlag;
+ bool m_localAngvFlag;
SCA_IObject* m_lastCreatedObject;
@@ -79,7 +83,9 @@ public:
int time,
SCA_IScene* scene,
const MT_Vector3& linvel,
- bool local,
+ bool linv_local,
+ const MT_Vector3& angvel,
+ bool angv_local,
PyTypeObject* T=&Type
);
@@ -115,19 +121,23 @@ public:
/* 1. setObject */
KX_PYMETHOD_DOC_O(KX_SCA_AddObjectActuator,SetObject);
/* 2. setTime */
- KX_PYMETHOD_DOC(KX_SCA_AddObjectActuator,SetTime);
+ KX_PYMETHOD_DOC_O(KX_SCA_AddObjectActuator,SetTime);
/* 3. getTime */
- KX_PYMETHOD_DOC(KX_SCA_AddObjectActuator,GetTime);
+ KX_PYMETHOD_DOC_NOARGS(KX_SCA_AddObjectActuator,GetTime);
/* 4. getObject */
KX_PYMETHOD_DOC_VARARGS(KX_SCA_AddObjectActuator,GetObject);
/* 5. getLinearVelocity */
- KX_PYMETHOD_DOC(KX_SCA_AddObjectActuator,GetLinearVelocity);
+ KX_PYMETHOD_DOC_NOARGS(KX_SCA_AddObjectActuator,GetLinearVelocity);
/* 6. setLinearVelocity */
- KX_PYMETHOD_DOC(KX_SCA_AddObjectActuator,SetLinearVelocity);
- /* 7. getLastCreatedObject */
- KX_PYMETHOD_DOC(KX_SCA_AddObjectActuator,GetLastCreatedObject);
- /* 8. instantAddObject*/
- KX_PYMETHOD_DOC(KX_SCA_AddObjectActuator,InstantAddObject);
+ KX_PYMETHOD_DOC_VARARGS(KX_SCA_AddObjectActuator,SetLinearVelocity);
+ /* 7. getAngularVelocity */
+ KX_PYMETHOD_DOC_NOARGS(KX_SCA_AddObjectActuator,GetAngularVelocity);
+ /* 8. setAngularVelocity */
+ KX_PYMETHOD_DOC_VARARGS(KX_SCA_AddObjectActuator,SetAngularVelocity);
+ /* 9. getLastCreatedObject */
+ KX_PYMETHOD_DOC_NOARGS(KX_SCA_AddObjectActuator,GetLastCreatedObject);
+ /* 10. instantAddObject*/
+ KX_PYMETHOD_DOC_NOARGS(KX_SCA_AddObjectActuator,InstantAddObject);
}; /* end of class KX_SCA_AddObjectActuator : public KX_EditObjectActuator */
diff --git a/source/gameengine/Ketsji/KX_SCA_ReplaceMeshActuator.cpp b/source/gameengine/Ketsji/KX_SCA_ReplaceMeshActuator.cpp
index 630df2d21d9..261d9ec8f0c 100644
--- a/source/gameengine/Ketsji/KX_SCA_ReplaceMeshActuator.cpp
+++ b/source/gameengine/Ketsji/KX_SCA_ReplaceMeshActuator.cpp
@@ -37,6 +37,8 @@
#include "KX_SCA_ReplaceMeshActuator.h"
+#include "PyObjectPlus.h"
+
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
@@ -80,7 +82,7 @@ PyParentObject KX_SCA_ReplaceMeshActuator::Parents[] = {
PyMethodDef KX_SCA_ReplaceMeshActuator::Methods[] = {
- {"setMesh", (PyCFunction) KX_SCA_ReplaceMeshActuator::sPySetMesh, METH_VARARGS, SetMesh_doc},
+ {"setMesh", (PyCFunction) KX_SCA_ReplaceMeshActuator::sPySetMesh, METH_O, (PY_METHODCHAR)SetMesh_doc},
KX_PYMETHODTABLE(KX_SCA_ReplaceMeshActuator, instantReplaceMesh),
KX_PYMETHODTABLE(KX_SCA_ReplaceMeshActuator, getMesh),
@@ -97,30 +99,31 @@ PyObject* KX_SCA_ReplaceMeshActuator::_getattr(const STR_String& attr)
/* 1. setMesh */
-char KX_SCA_ReplaceMeshActuator::SetMesh_doc[] =
+const char KX_SCA_ReplaceMeshActuator::SetMesh_doc[] =
"setMesh(name)\n"
- "\t- name: string\n"
+ "\t- name: string or None\n"
"\tSet the mesh that will be substituted for the current one.\n";
-PyObject* KX_SCA_ReplaceMeshActuator::PySetMesh(PyObject* self,
- PyObject* args,
- PyObject* kwds)
+PyObject* KX_SCA_ReplaceMeshActuator::PySetMesh(PyObject* self, PyObject* value)
{
- char* meshname;
-
- if (!PyArg_ParseTuple(args, "s", &meshname))
- {
- return NULL;
- }
-
- void* mesh = SCA_ILogicBrick::m_sCurrentLogicManager->GetMeshByName(STR_String(meshname));
-
- if (mesh) {
+ if (value == Py_None) {
+ m_mesh = NULL;
+ } else {
+ char* meshname = PyString_AsString(value);
+ if (!meshname) {
+ PyErr_SetString(PyExc_ValueError, "Expected the name of a mesh or None");
+ return NULL;
+ }
+ void* mesh = SCA_ILogicBrick::m_sCurrentLogicManager->GetMeshByName(STR_String(meshname));
+
+ if (mesh==NULL) {
+ PyErr_SetString(PyExc_ValueError, "The mesh name given does not exist");
+ return NULL;
+ }
m_mesh= (class RAS_MeshObject*)mesh;
- Py_Return;
}
- return NULL;
+ Py_RETURN_NONE;
}
KX_PYMETHODDEF_DOC(KX_SCA_ReplaceMeshActuator, getMesh,
@@ -129,7 +132,7 @@ KX_PYMETHODDEF_DOC(KX_SCA_ReplaceMeshActuator, getMesh,
)
{
if (!m_mesh)
- Py_Return;
+ Py_RETURN_NONE;
return PyString_FromString(const_cast<char *>(m_mesh->GetName().ReadPtr()));
}
@@ -139,7 +142,7 @@ KX_PYMETHODDEF_DOC(KX_SCA_ReplaceMeshActuator, instantReplaceMesh,
"instantReplaceMesh() : immediately replace mesh without delay\n")
{
InstantReplaceMesh();
- Py_Return;
+ Py_RETURN_NONE;
}
/* ------------------------------------------------------------------------- */
diff --git a/source/gameengine/Ketsji/KX_SCA_ReplaceMeshActuator.h b/source/gameengine/Ketsji/KX_SCA_ReplaceMeshActuator.h
index 5ba0a099b14..1da154cc222 100644
--- a/source/gameengine/Ketsji/KX_SCA_ReplaceMeshActuator.h
+++ b/source/gameengine/Ketsji/KX_SCA_ReplaceMeshActuator.h
@@ -76,7 +76,7 @@ class KX_SCA_ReplaceMeshActuator : public SCA_IActuator
void InstantReplaceMesh();
/* 1. setMesh */
- KX_PYMETHOD_DOC(KX_SCA_ReplaceMeshActuator,SetMesh);
+ KX_PYMETHOD_DOC_O(KX_SCA_ReplaceMeshActuator,SetMesh);
KX_PYMETHOD_DOC(KX_SCA_ReplaceMeshActuator,getMesh);
KX_PYMETHOD_DOC(KX_SCA_ReplaceMeshActuator,instantReplaceMesh);
diff --git a/source/gameengine/Ketsji/KX_SG_BoneParentNodeRelationship.cpp b/source/gameengine/Ketsji/KX_SG_BoneParentNodeRelationship.cpp
index f085ff435dc..d651373869a 100644
--- a/source/gameengine/Ketsji/KX_SG_BoneParentNodeRelationship.cpp
+++ b/source/gameengine/Ketsji/KX_SG_BoneParentNodeRelationship.cpp
@@ -78,7 +78,7 @@ UpdateChildCoordinates(
if (parent)
{
- const BL_ArmatureObject *armature = (const BL_ArmatureObject*)(parent->GetSGClientObject());
+ BL_ArmatureObject *armature = (BL_ArmatureObject*)(parent->GetSGClientObject());
if (armature)
{
MT_Matrix4x4 parent_matrix;
diff --git a/source/gameengine/Ketsji/KX_Scene.cpp b/source/gameengine/Ketsji/KX_Scene.cpp
index 2828663c63d..f5d6d7e8e0a 100644
--- a/source/gameengine/Ketsji/KX_Scene.cpp
+++ b/source/gameengine/Ketsji/KX_Scene.cpp
@@ -68,6 +68,7 @@
#include "SG_IObject.h"
#include "SG_Tree.h"
#include "DNA_group_types.h"
+#include "DNA_scene_types.h"
#include "BKE_anim.h"
#include "KX_SG_NodeRelationships.h"
@@ -116,7 +117,8 @@ KX_Scene::KX_Scene(class SCA_IInputDevice* keyboarddevice,
class SCA_IInputDevice* mousedevice,
class NG_NetworkDeviceInterface *ndi,
class SND_IAudioDevice* adi,
- const STR_String& sceneName):
+ const STR_String& sceneName,
+ Scene *scene):
PyObjectPlus(&KX_Scene::Type),
m_keyboardmgr(NULL),
m_mousemgr(NULL),
@@ -126,7 +128,8 @@ KX_Scene::KX_Scene(class SCA_IInputDevice* keyboarddevice,
m_adi(adi),
m_networkDeviceInterface(ndi),
m_active_camera(NULL),
- m_ueberExecutionPriority(0)
+ m_ueberExecutionPriority(0),
+ m_blenderScene(scene)
{
m_suspendedtime = 0.0;
m_suspendeddelta = 0.0;
@@ -156,7 +159,7 @@ KX_Scene::KX_Scene(class SCA_IInputDevice* keyboarddevice,
KX_NetworkEventManager* netmgr = new KX_NetworkEventManager(m_logicmgr, ndi);
- SCA_JoystickManager *joymgr = new SCA_JoystickManager(m_logicmgr);
+
m_logicmgr->RegisterEventManager(alwaysmgr);
m_logicmgr->RegisterEventManager(propmgr);
@@ -167,7 +170,15 @@ KX_Scene::KX_Scene(class SCA_IInputDevice* keyboarddevice,
m_logicmgr->RegisterEventManager(rndmgr);
m_logicmgr->RegisterEventManager(raymgr);
m_logicmgr->RegisterEventManager(netmgr);
- m_logicmgr->RegisterEventManager(joymgr);
+
+
+ SYS_SystemHandle hSystem = SYS_GetSystem();
+ bool nojoystick= SYS_GetCommandLineInt(hSystem,"nojoystick",0);
+ if (!nojoystick)
+ {
+ SCA_JoystickManager *joymgr = new SCA_JoystickManager(m_logicmgr);
+ m_logicmgr->RegisterEventManager(joymgr);
+ }
m_soundScene = new SND_Scene(adi);
MT_assert (m_networkDeviceInterface != NULL);
@@ -234,40 +245,9 @@ KX_Scene::~KX_Scene()
{
delete m_bucketmanager;
}
-#ifdef USE_BULLET
- // This is a fix for memory leaks in bullet: the collision shapes is not destroyed
- // when the physical controllers are destroyed. The reason is that shapes are shared
- // between replicas of an object. There is no reference count in Bullet so the
- // only workaround that does not involve changes in Bullet is to save in this array
- // the list of shapes that are created when the scene is created (see KX_ConvertPhysicsObjects.cpp)
- class btCollisionShape* shape;
- class btTriangleMeshShape* meshShape;
- vector<class btCollisionShape*>::iterator it = m_shapes.begin();
- while (it != m_shapes.end()) {
- shape = *it;
- if (shape->getShapeType() == TRIANGLE_MESH_SHAPE_PROXYTYPE)
- {
- meshShape = static_cast<btTriangleMeshShape*>(shape);
- // shapes based on meshes use an interface that contains the vertices.
- // Again the idea is to be able to share the interface between shapes but
- // this is not used in Blender: each base object will have its own interface
- btStridingMeshInterface* meshInterface = meshShape->getMeshInterface();
- if (meshInterface)
- delete meshInterface;
- }
- delete shape;
- it++;
- }
-#endif
//Py_DECREF(m_attrlist);
}
-void KX_Scene::AddShape(class btCollisionShape*shape)
-{
- m_shapes.push_back(shape);
-}
-
-
void KX_Scene::SetProjectionMatrix(MT_CmMatrix4x4& pmat)
{
m_projectionmat = pmat;
@@ -484,7 +464,7 @@ KX_GameObject* KX_Scene::AddNodeReplicaObject(class SG_IObject* node, class CVal
// this is the list of object that are send to the graphics pipeline
m_objectlist->Add(newobj->AddRef());
- newobj->Bucketize();
+ newobj->AddMeshUser();
// logic cannot be replicated, until the whole hierarchy is replicated.
m_logicHierarchicalGameObjects.push_back(newobj);
@@ -654,6 +634,7 @@ void KX_Scene::DupliGroupRecurse(CValue* obj, int level)
if (blgroupobj == blenderobj)
// this check is also in group_duplilist()
continue;
+
gameobj = (KX_GameObject*)m_logicmgr->FindGameObjByBlendObj(blenderobj);
if (gameobj == NULL)
{
@@ -661,6 +642,9 @@ void KX_Scene::DupliGroupRecurse(CValue* obj, int level)
// Should not happen as dupli group are created automatically
continue;
}
+
+ gameobj->SetBlenderGroupObject(blgroupobj);
+
if ((blenderobj->lay & group->layer)==0)
{
// object is not visible in the 3D view, will not be instantiated
@@ -718,17 +702,6 @@ void KX_Scene::DupliGroupRecurse(CValue* obj, int level)
newscale*(groupobj->NodeGetWorldOrientation() * gameobj->NodeGetWorldPosition());
replica->NodeSetLocalPosition(newpos);
- if (replica->GetPhysicsController())
- {
- // not required, already done in NodeSetLocalOrientation..
- //replica->GetPhysicsController()->setPosition(newpos);
- //replica->GetPhysicsController()->setOrientation(newori.getRotation());
- // Scaling has been set relatively hereabove, this does not
- // set the scaling of the controller. I don't know why it's just the
- // relative scale and not the full scale that has to be put here...
- replica->GetPhysicsController()->setScaling(newscale);
- }
-
replica->GetSGNode()->UpdateWorldData(0);
replica->GetSGNode()->SetBBox(gameobj->GetSGNode()->BBox());
replica->GetSGNode()->SetRadius(gameobj->GetSGNode()->Radius());
@@ -853,18 +826,6 @@ SCA_IObject* KX_Scene::AddReplicaObject(class CValue* originalobject,
// set the replica's relative scale with the rootnode's scale
replica->NodeSetRelativeScale(newscale);
- if (replica->GetPhysicsController())
- {
- // not needed, already done in NodeSetLocalPosition()
- //replica->GetPhysicsController()->setPosition(newpos);
- //replica->GetPhysicsController()->setOrientation(newori.getRotation());
- replica->GetPhysicsController()->setScaling(newscale);
- }
-
- // here we want to set the relative scale: the rootnode's scale will override all other
- // scalings, so lets better prepare for it
-
-
replica->GetSGNode()->UpdateWorldData(0);
replica->GetSGNode()->SetBBox(originalobj->GetSGNode()->BBox());
replica->GetSGNode()->SetRadius(originalobj->GetSGNode()->Radius());
@@ -975,6 +936,8 @@ int KX_Scene::NewRemoveObject(class CValue* gameobj)
newobj->RemoveMeshes();
ret = 1;
+ if (m_lightlist->RemoveValue(newobj)) // TODO - use newobj->IsLight() test when its merged in from apricot. - Campbell
+ ret = newobj->Release();
if (m_objectlist->RemoveValue(newobj))
ret = newobj->Release();
if (m_tempObjectList->RemoveValue(newobj))
@@ -1022,13 +985,13 @@ void KX_Scene::ReplaceMesh(class CValue* obj,void* meshobj)
{
BL_DeformableGameObject* newobj = static_cast<BL_DeformableGameObject*>( gameobj );
- if (newobj->m_pDeformer)
+ if (newobj->GetDeformer())
{
- delete newobj->m_pDeformer;
- newobj->m_pDeformer = NULL;
+ delete newobj->GetDeformer();
+ newobj->SetDeformer(NULL);
}
- if (mesh->m_class == 1)
+ if (mesh->IsDeformed())
{
// we must create a new deformer but which one?
KX_GameObject* parentobj = newobj->GetParent();
@@ -1075,7 +1038,7 @@ void KX_Scene::ReplaceMesh(class CValue* obj,void* meshobj)
NULL
);
}
- newobj->m_pDeformer = shapeDeformer;
+ newobj->SetDeformer( shapeDeformer);
}
else if (bHasArmature)
{
@@ -1087,14 +1050,14 @@ void KX_Scene::ReplaceMesh(class CValue* obj,void* meshobj)
static_cast<BL_ArmatureObject*>( parentobj )
);
releaseParent= false;
- newobj->m_pDeformer = skinDeformer;
+ newobj->SetDeformer(skinDeformer);
}
else if (bHasDvert)
{
BL_MeshDeformer* meshdeformer = new BL_MeshDeformer(
newobj, oldblendobj, static_cast<BL_SkinMeshObject*>(mesh)
);
- newobj->m_pDeformer = meshdeformer;
+ newobj->SetDeformer(meshdeformer);
}
// release parent reference if its not being used
@@ -1102,7 +1065,8 @@ void KX_Scene::ReplaceMesh(class CValue* obj,void* meshobj)
parentobj->Release();
}
}
- gameobj->Bucketize();
+
+ gameobj->AddMeshUser();
}
@@ -1254,7 +1218,9 @@ void KX_Scene::MarkSubTreeVisible(SG_Tree *node, RAS_IRasterizer* rasty, bool vi
for (int m=0;m<nummeshes;m++)
(gameobj->GetMesh(m))->SchedulePolygons(rasty->GetDrawingMode());
}
- gameobj->MarkVisible(visible);
+
+ gameobj->SetCulled(!visible);
+ gameobj->UpdateBuckets(false);
}
}
if (node->Left())
@@ -1271,7 +1237,8 @@ void KX_Scene::MarkVisible(RAS_IRasterizer* rasty, KX_GameObject* gameobj,KX_Cam
// Shadow lamp layers
if(layer && !(gameobj->GetLayer() & layer)) {
- gameobj->MarkVisible(false);
+ gameobj->SetCulled(true);
+ gameobj->UpdateBuckets(false);
return;
}
@@ -1317,9 +1284,11 @@ void KX_Scene::MarkVisible(RAS_IRasterizer* rasty, KX_GameObject* gameobj,KX_Cam
}
// Visibility/ non-visibility are marked
// elsewhere now.
- gameobj->MarkVisible();
+ gameobj->SetCulled(false);
+ gameobj->UpdateBuckets(false);
} else {
- gameobj->MarkVisible(false);
+ gameobj->SetCulled(true);
+ gameobj->UpdateBuckets(false);
}
}
diff --git a/source/gameengine/Ketsji/KX_Scene.h b/source/gameengine/Ketsji/KX_Scene.h
index 80a2abe287a..5f7e1167e27 100644
--- a/source/gameengine/Ketsji/KX_Scene.h
+++ b/source/gameengine/Ketsji/KX_Scene.h
@@ -54,6 +54,7 @@
*/
struct SM_MaterialProps;
struct SM_ShapeProps;
+struct Scene;
class GEN_HashedPtr;
class CListValue;
@@ -122,11 +123,6 @@ protected:
*/
list<class KX_Camera*> m_cameras;
/**
- * The set of bullet shapes that must be deleted at the end of the scene
- * to avoid memory leak (not deleted by bullet because shape are shared between replicas)
- */
- vector<class btCollisionShape*> m_shapes;
- /**
* Various SCA managers used by the scene
*/
SCA_LogicManager* m_logicmgr;
@@ -282,12 +278,15 @@ protected:
*/
PyObject* m_attrlist;
+ struct Scene* m_blenderScene;
+
public:
KX_Scene(class SCA_IInputDevice* keyboarddevice,
class SCA_IInputDevice* mousedevice,
class NG_NetworkDeviceInterface* ndi,
class SND_IAudioDevice* adi,
- const STR_String& scenename );
+ const STR_String& scenename,
+ struct Scene* scene);
virtual
~KX_Scene();
@@ -322,7 +321,6 @@ public:
int NewRemoveObject(CValue* gameobj);
void ReplaceMesh(CValue* gameobj,
void* meshobj);
- void AddShape(class btCollisionShape* shape);
/**
* @section Logic stuff
* Initiate an update of the logic system.
@@ -588,6 +586,10 @@ public:
* was running and not suspended) and the "curtime"
*/
double getSuspendedDelta();
+ /**
+ * Returns the Blender scene this was made from
+ */
+ struct Scene *GetBlenderScene() { return m_blenderScene; }
};
typedef std::vector<KX_Scene*> KX_SceneList;
diff --git a/source/gameengine/Ketsji/KX_SceneActuator.cpp b/source/gameengine/Ketsji/KX_SceneActuator.cpp
index d6164dc812a..35484699b17 100644
--- a/source/gameengine/Ketsji/KX_SceneActuator.cpp
+++ b/source/gameengine/Ketsji/KX_SceneActuator.cpp
@@ -259,12 +259,12 @@ PyParentObject KX_SceneActuator::Parents[] =
PyMethodDef KX_SceneActuator::Methods[] =
{
- {"setUseRestart", (PyCFunction) KX_SceneActuator::sPySetUseRestart, METH_VARARGS, SetUseRestart_doc},
- {"setScene", (PyCFunction) KX_SceneActuator::sPySetScene, METH_VARARGS, SetScene_doc},
- {"setCamera", (PyCFunction) KX_SceneActuator::sPySetCamera, METH_VARARGS, SetCamera_doc},
- {"getUseRestart", (PyCFunction) KX_SceneActuator::sPyGetUseRestart, METH_VARARGS, GetUseRestart_doc},
- {"getScene", (PyCFunction) KX_SceneActuator::sPyGetScene, METH_VARARGS, GetScene_doc},
- {"getCamera", (PyCFunction) KX_SceneActuator::sPyGetCamera, METH_VARARGS, GetCamera_doc},
+ {"setUseRestart", (PyCFunction) KX_SceneActuator::sPySetUseRestart, METH_VARARGS, (PY_METHODCHAR)SetUseRestart_doc},
+ {"setScene", (PyCFunction) KX_SceneActuator::sPySetScene, METH_VARARGS, (PY_METHODCHAR)SetScene_doc},
+ {"setCamera", (PyCFunction) KX_SceneActuator::sPySetCamera, METH_VARARGS, (PY_METHODCHAR)SetCamera_doc},
+ {"getUseRestart", (PyCFunction) KX_SceneActuator::sPyGetUseRestart, METH_VARARGS, (PY_METHODCHAR)GetUseRestart_doc},
+ {"getScene", (PyCFunction) KX_SceneActuator::sPyGetScene, METH_VARARGS, (PY_METHODCHAR)GetScene_doc},
+ {"getCamera", (PyCFunction) KX_SceneActuator::sPyGetCamera, METH_VARARGS, (PY_METHODCHAR)GetCamera_doc},
{NULL,NULL} //Sentinel
};
@@ -278,7 +278,7 @@ PyObject* KX_SceneActuator::_getattr(const STR_String& attr)
/* 2. setUseRestart--------------------------------------------------------- */
-char KX_SceneActuator::SetUseRestart_doc[] =
+const char KX_SceneActuator::SetUseRestart_doc[] =
"setUseRestart(flag)\n"
"\t- flag: 0 or 1.\n"
"\tSet flag to 1 to restart the scene.\n" ;
@@ -301,7 +301,7 @@ PyObject* KX_SceneActuator::PySetUseRestart(PyObject* self,
/* 3. getUseRestart: */
-char KX_SceneActuator::GetUseRestart_doc[] =
+const char KX_SceneActuator::GetUseRestart_doc[] =
"getUseRestart()\n"
"\tReturn whether the scene will be restarted.\n" ;
PyObject* KX_SceneActuator::PyGetUseRestart(PyObject* self,
@@ -314,7 +314,7 @@ PyObject* KX_SceneActuator::PyGetUseRestart(PyObject* self,
/* 4. set scene------------------------------------------------------------- */
-char KX_SceneActuator::SetScene_doc[] =
+const char KX_SceneActuator::SetScene_doc[] =
"setScene(scene)\n"
"\t- scene: string\n"
"\tSet the name of scene the actuator will switch to.\n" ;
@@ -339,7 +339,7 @@ PyObject* KX_SceneActuator::PySetScene(PyObject* self,
/* 5. getScene: */
-char KX_SceneActuator::GetScene_doc[] =
+const char KX_SceneActuator::GetScene_doc[] =
"getScene()\n"
"\tReturn the name of the scene the actuator wants to switch to.\n" ;
PyObject* KX_SceneActuator::PyGetScene(PyObject* self,
@@ -352,7 +352,7 @@ PyObject* KX_SceneActuator::PyGetScene(PyObject* self,
/* 6. set camera------------------------------------------------------------ */
-char KX_SceneActuator::SetCamera_doc[] =
+const char KX_SceneActuator::SetCamera_doc[] =
"setCamera(camera)\n"
"\t- camera: string\n"
"\tSet the camera to switch to.\n" ;
@@ -394,7 +394,7 @@ PyObject* KX_SceneActuator::PySetCamera(PyObject* self,
/* 7. getCamera: */
-char KX_SceneActuator::GetCamera_doc[] =
+const char KX_SceneActuator::GetCamera_doc[] =
"getCamera()\n"
"\tReturn the name of the camera to switch to.\n" ;
PyObject* KX_SceneActuator::PyGetCamera(PyObject* self,
diff --git a/source/gameengine/Ketsji/KX_SoundActuator.cpp b/source/gameengine/Ketsji/KX_SoundActuator.cpp
index 34a3baec093..f75a1ee5c62 100644
--- a/source/gameengine/Ketsji/KX_SoundActuator.cpp
+++ b/source/gameengine/Ketsji/KX_SoundActuator.cpp
@@ -69,11 +69,11 @@ KX_SoundActuator::KX_SoundActuator(SCA_IObject* gameobj,
KX_SoundActuator::~KX_SoundActuator()
{
- //m_soundScene->RemoveObject(this->m_soundObject);
- //(this->m_soundObject)->DeleteWhenFinished();
- m_soundScene->RemoveActiveObject(m_soundObject);
-// m_soundScene->DeleteObjectWhenFinished(m_soundObject);
- m_soundScene->DeleteObject(m_soundObject);
+ if (m_soundObject)
+ {
+ m_soundScene->RemoveActiveObject(m_soundObject);
+ m_soundScene->DeleteObject(m_soundObject);
+ }
}
@@ -82,9 +82,12 @@ CValue* KX_SoundActuator::GetReplica()
{
KX_SoundActuator* replica = new KX_SoundActuator(*this);
replica->ProcessReplica();
- SND_SoundObject* soundobj = new SND_SoundObject(*m_soundObject);
- replica->setSoundObject(soundobj);
- m_soundScene->AddObject(soundobj);
+ if (m_soundObject)
+ {
+ SND_SoundObject* soundobj = new SND_SoundObject(*m_soundObject);
+ replica->setSoundObject(soundobj);
+ m_soundScene->AddObject(soundobj);
+ }
// this will copy properties and so on...
CValue::AddDataToReplica(replica);
@@ -104,6 +107,9 @@ bool KX_SoundActuator::Update(double curtime, bool frame)
RemoveAllEvents();
+ if (!m_soundObject)
+ return false;
+
if (m_pino)
{
bNegativeEvent = true;
@@ -287,6 +293,10 @@ PyObject* KX_SoundActuator::PySetFilename(PyObject* self, PyObject* args, PyObje
PyObject* KX_SoundActuator::PyGetFilename(PyObject* self, PyObject* args, PyObject* kwds)
{
+ if (!m_soundObject)
+ {
+ return PyString_FromString("");
+ }
STR_String objectname = m_soundObject->GetObjectName();
char* name = objectname.Ptr();
@@ -301,7 +311,8 @@ PyObject* KX_SoundActuator::PyGetFilename(PyObject* self, PyObject* args, PyObje
PyObject* KX_SoundActuator::PyStartSound(PyObject* self, PyObject* args, PyObject* kwds)
{
- m_soundObject->StartSound();
+ if (m_soundObject)
+ m_soundObject->StartSound();
Py_Return;
}
@@ -309,7 +320,8 @@ PyObject* KX_SoundActuator::PyStartSound(PyObject* self, PyObject* args, PyObjec
PyObject* KX_SoundActuator::PyPauseSound(PyObject* self, PyObject* args, PyObject* kwds)
{
- m_soundObject->PauseSound();
+ if (m_soundObject)
+ m_soundObject->PauseSound();
Py_Return;
}
@@ -317,7 +329,8 @@ PyObject* KX_SoundActuator::PyPauseSound(PyObject* self, PyObject* args, PyObjec
PyObject* KX_SoundActuator::PyStopSound(PyObject* self, PyObject* args, PyObject* kwds)
{
- m_soundObject->StopSound();
+ if (m_soundObject)
+ m_soundObject->StopSound();
Py_Return;
}
@@ -329,7 +342,8 @@ PyObject* KX_SoundActuator::PySetGain(PyObject* self, PyObject* args, PyObject*
if (!PyArg_ParseTuple(args, "f", &gain))
return NULL;
- m_soundObject->SetGain(gain);
+ if (m_soundObject)
+ m_soundObject->SetGain(gain);
Py_Return;
}
@@ -338,7 +352,7 @@ PyObject* KX_SoundActuator::PySetGain(PyObject* self, PyObject* args, PyObject*
PyObject* KX_SoundActuator::PyGetGain(PyObject* self, PyObject* args, PyObject* kwds)
{
- float gain = m_soundObject->GetGain();
+ float gain = (m_soundObject) ? m_soundObject->GetGain() : 1.0f;
PyObject* result = PyFloat_FromDouble(gain);
return result;
@@ -352,7 +366,8 @@ PyObject* KX_SoundActuator::PySetPitch(PyObject* self, PyObject* args, PyObject*
if (!PyArg_ParseTuple(args, "f", &pitch))
return NULL;
- m_soundObject->SetPitch(pitch);
+ if (m_soundObject)
+ m_soundObject->SetPitch(pitch);
Py_Return;
}
@@ -361,7 +376,7 @@ PyObject* KX_SoundActuator::PySetPitch(PyObject* self, PyObject* args, PyObject*
PyObject* KX_SoundActuator::PyGetPitch(PyObject* self, PyObject* args, PyObject* kwds)
{
- float pitch = m_soundObject->GetPitch();
+ float pitch = (m_soundObject) ? m_soundObject->GetPitch() : 1.0;
PyObject* result = PyFloat_FromDouble(pitch);
return result;
@@ -375,7 +390,8 @@ PyObject* KX_SoundActuator::PySetRollOffFactor(PyObject* self, PyObject* args, P
if (!PyArg_ParseTuple(args, "f", &rollofffactor))
return NULL;
- m_soundObject->SetRollOffFactor(rollofffactor);
+ if (m_soundObject)
+ m_soundObject->SetRollOffFactor(rollofffactor);
Py_Return;
}
@@ -384,7 +400,7 @@ PyObject* KX_SoundActuator::PySetRollOffFactor(PyObject* self, PyObject* args, P
PyObject* KX_SoundActuator::PyGetRollOffFactor(PyObject* self, PyObject* args, PyObject* kwds)
{
- float rollofffactor = m_soundObject->GetRollOffFactor();
+ float rollofffactor = (m_soundObject) ? m_soundObject->GetRollOffFactor() : 1.0;
PyObject* result = PyFloat_FromDouble(rollofffactor);
return result;
@@ -398,7 +414,8 @@ PyObject* KX_SoundActuator::PySetLooping(PyObject* self, PyObject* args, PyObjec
if (!PyArg_ParseTuple(args, "i", &looping))
return NULL;
- m_soundObject->SetLoopMode(looping);
+ if (m_soundObject)
+ m_soundObject->SetLoopMode(looping);
Py_Return;
}
@@ -407,7 +424,7 @@ PyObject* KX_SoundActuator::PySetLooping(PyObject* self, PyObject* args, PyObjec
PyObject* KX_SoundActuator::PyGetLooping(PyObject* self, PyObject* args, PyObject* kwds)
{
- int looping = m_soundObject->GetLoopMode();
+ int looping = (m_soundObject) ? m_soundObject->GetLoopMode() : SND_LOOP_OFF;
PyObject* result = PyInt_FromLong(looping);
return result;
@@ -425,7 +442,8 @@ PyObject* KX_SoundActuator::PySetPosition(PyObject* self, PyObject* args, PyObje
if (!PyArg_ParseTuple(args, "fff", &pos[0], &pos[1], &pos[2]))
return NULL;
- m_soundObject->SetPosition(pos);
+ if (m_soundObject)
+ m_soundObject->SetPosition(pos);
Py_Return;
}
@@ -442,7 +460,8 @@ PyObject* KX_SoundActuator::PySetVelocity(PyObject* self, PyObject* args, PyObje
if (!PyArg_ParseTuple(args, "fff", &vel[0], &vel[1], &vel[2]))
return NULL;
- m_soundObject->SetVelocity(vel);
+ if (m_soundObject)
+ m_soundObject->SetVelocity(vel);
Py_Return;
}
@@ -465,7 +484,8 @@ PyObject* KX_SoundActuator::PySetOrientation(PyObject* self, PyObject* args, PyO
if (!PyArg_ParseTuple(args, "fffffffff", &ori[0][0], &ori[0][1], &ori[0][2], &ori[1][0], &ori[1][1], &ori[1][2], &ori[2][0], &ori[2][1], &ori[2][2]))
return NULL;
- m_soundObject->SetOrientation(ori);
+ if (m_soundObject)
+ m_soundObject->SetOrientation(ori);
Py_Return;
}
diff --git a/source/gameengine/Ketsji/KX_StateActuator.cpp b/source/gameengine/Ketsji/KX_StateActuator.cpp
index 95a79f0c480..e360c4bac1f 100644
--- a/source/gameengine/Ketsji/KX_StateActuator.cpp
+++ b/source/gameengine/Ketsji/KX_StateActuator.cpp
@@ -140,9 +140,9 @@ KX_StateActuator::Parents[] = {
PyMethodDef
KX_StateActuator::Methods[] = {
{"setOperation", (PyCFunction) KX_StateActuator::sPySetOperation,
- METH_VARARGS, SetOperation_doc},
+ METH_VARARGS, (PY_METHODCHAR)SetOperation_doc},
{"setMask", (PyCFunction) KX_StateActuator::sPySetMask,
- METH_VARARGS, SetMask_doc},
+ METH_VARARGS, (PY_METHODCHAR)SetMask_doc},
{NULL,NULL} //Sentinel
};
@@ -157,7 +157,7 @@ KX_StateActuator::_getattr(
/* set operation ---------------------------------------------------------- */
-char
+const char
KX_StateActuator::SetOperation_doc[] =
"setOperation(op)\n"
"\t - op : bit operation (0=Copy, 1=Set, 2=Clear, 3=Negate)"
@@ -180,7 +180,7 @@ KX_StateActuator::PySetOperation(PyObject* self,
}
/* set mask ---------------------------------------------------------- */
-char
+const char
KX_StateActuator::SetMask_doc[] =
"setMask(mask)\n"
"\t - mask : bits that will be modified"
diff --git a/source/gameengine/Ketsji/KX_SumoPhysicsController.cpp b/source/gameengine/Ketsji/KX_SumoPhysicsController.cpp
index 4032a795ce3..c842ca1ee14 100644
--- a/source/gameengine/Ketsji/KX_SumoPhysicsController.cpp
+++ b/source/gameengine/Ketsji/KX_SumoPhysicsController.cpp
@@ -205,6 +205,11 @@ MT_Scalar KX_SumoPhysicsController::GetMass()
return SumoPhysicsController::getMass();
}
+MT_Scalar KX_SumoPhysicsController::GetRadius()
+{
+ return SumoPhysicsController::GetRadius();
+}
+
MT_Vector3 KX_SumoPhysicsController::getReactionForce()
{
float force[3];
diff --git a/source/gameengine/Ketsji/KX_SumoPhysicsController.h b/source/gameengine/Ketsji/KX_SumoPhysicsController.h
index 1dd930bf3d9..abe48d99043 100644
--- a/source/gameengine/Ketsji/KX_SumoPhysicsController.h
+++ b/source/gameengine/Ketsji/KX_SumoPhysicsController.h
@@ -84,6 +84,7 @@ public:
virtual void setPosition(const MT_Point3& pos);
virtual void setScaling(const MT_Vector3& scaling);
virtual MT_Scalar GetMass();
+ virtual MT_Scalar GetRadius();
virtual MT_Vector3 getReactionForce();
virtual void setRigidBody(bool rigid);
diff --git a/source/gameengine/Ketsji/KX_TouchSensor.cpp b/source/gameengine/Ketsji/KX_TouchSensor.cpp
index 60e1d87d318..41757a23f7a 100644
--- a/source/gameengine/Ketsji/KX_TouchSensor.cpp
+++ b/source/gameengine/Ketsji/KX_TouchSensor.cpp
@@ -240,13 +240,13 @@ PyParentObject KX_TouchSensor::Parents[] = {
PyMethodDef KX_TouchSensor::Methods[] = {
{"setProperty",
- (PyCFunction) KX_TouchSensor::sPySetProperty, METH_VARARGS, SetProperty_doc},
+ (PyCFunction) KX_TouchSensor::sPySetProperty, METH_VARARGS, (PY_METHODCHAR)SetProperty_doc},
{"getProperty",
- (PyCFunction) KX_TouchSensor::sPyGetProperty, METH_VARARGS, GetProperty_doc},
+ (PyCFunction) KX_TouchSensor::sPyGetProperty, METH_VARARGS, (PY_METHODCHAR)GetProperty_doc},
{"getHitObject",
- (PyCFunction) KX_TouchSensor::sPyGetHitObject, METH_VARARGS, GetHitObject_doc},
+ (PyCFunction) KX_TouchSensor::sPyGetHitObject, METH_VARARGS, (PY_METHODCHAR)GetHitObject_doc},
{"getHitObjectList",
- (PyCFunction) KX_TouchSensor::sPyGetHitObjectList, METH_VARARGS, GetHitObjectList_doc},
+ (PyCFunction) KX_TouchSensor::sPyGetHitObjectList, METH_VARARGS, (PY_METHODCHAR)GetHitObjectList_doc},
{NULL,NULL} //Sentinel
};
@@ -257,7 +257,7 @@ PyObject* KX_TouchSensor::_getattr(const STR_String& attr) {
/* Python API */
/* 1. setProperty */
-char KX_TouchSensor::SetProperty_doc[] =
+const char KX_TouchSensor::SetProperty_doc[] =
"setProperty(name)\n"
"\t- name: string\n"
"\tSet the property or material to collide with. Use\n"
@@ -283,7 +283,7 @@ PyObject* KX_TouchSensor::PySetProperty(PyObject* self,
Py_Return;
}
/* 2. getProperty */
-char KX_TouchSensor::GetProperty_doc[] =
+const char KX_TouchSensor::GetProperty_doc[] =
"getProperty(name)\n"
"\tReturns the property or material to collide with. Use\n"
"\tgetTouchMaterial() to find out whether this sensor\n"
@@ -294,7 +294,7 @@ PyObject* KX_TouchSensor::PyGetProperty(PyObject* self,
return PyString_FromString(m_touchedpropname);
}
-char KX_TouchSensor::GetHitObject_doc[] =
+const char KX_TouchSensor::GetHitObject_doc[] =
"getHitObject()\n"
;
PyObject* KX_TouchSensor::PyGetHitObject(PyObject* self,
@@ -310,7 +310,7 @@ PyObject* KX_TouchSensor::PyGetHitObject(PyObject* self,
Py_Return;
}
-char KX_TouchSensor::GetHitObjectList_doc[] =
+const char KX_TouchSensor::GetHitObjectList_doc[] =
"getHitObjectList()\n"
"\tReturn a list of the objects this object collided with,\n"
"\tbut only those matching the property/material condition.\n";
@@ -364,7 +364,7 @@ PyObject* KX_TouchSensor::PyGetHitObjectList(PyObject* self,
}
/* 5. getTouchMaterial */
-char KX_TouchSensor::GetTouchMaterial_doc[] =
+const char KX_TouchSensor::GetTouchMaterial_doc[] =
"getTouchMaterial()\n"
"\tReturns KX_TRUE if this sensor looks for a specific material,\n"
"\tKX_FALSE if it looks for a specific property.\n" ;
@@ -376,7 +376,7 @@ PyObject* KX_TouchSensor::PyGetTouchMaterial(PyObject* self,
}
/* 6. setTouchMaterial */
-char KX_TouchSensor::SetTouchMaterial_doc[] =
+const char KX_TouchSensor::SetTouchMaterial_doc[] =
"setTouchMaterial(flag)\n"
"\t- flag: KX_TRUE or KX_FALSE.\n"
"\tSet flag to KX_TRUE to switch on positive pulse mode,\n"
diff --git a/source/gameengine/Ketsji/KX_TrackToActuator.cpp b/source/gameengine/Ketsji/KX_TrackToActuator.cpp
index 67937d5c579..acc4a6ab5d7 100644
--- a/source/gameengine/Ketsji/KX_TrackToActuator.cpp
+++ b/source/gameengine/Ketsji/KX_TrackToActuator.cpp
@@ -42,6 +42,8 @@
#include <iostream>
#include "KX_GameObject.h"
+#include "PyObjectPlus.h"
+
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
@@ -454,12 +456,12 @@ PyParentObject KX_TrackToActuator::Parents[] = {
PyMethodDef KX_TrackToActuator::Methods[] = {
- {"setObject", (PyCFunction) KX_TrackToActuator::sPySetObject, METH_O, SetObject_doc},
- {"getObject", (PyCFunction) KX_TrackToActuator::sPyGetObject, METH_VARARGS, GetObject_doc},
- {"setTime", (PyCFunction) KX_TrackToActuator::sPySetTime, METH_VARARGS, SetTime_doc},
- {"getTime", (PyCFunction) KX_TrackToActuator::sPyGetTime, METH_VARARGS, GetTime_doc},
- {"setUse3D", (PyCFunction) KX_TrackToActuator::sPySetUse3D, METH_VARARGS, SetUse3D_doc},
- {"getUse3D", (PyCFunction) KX_TrackToActuator::sPyGetUse3D, METH_VARARGS, GetUse3D_doc},
+ {"setObject", (PyCFunction) KX_TrackToActuator::sPySetObject, METH_O, (PY_METHODCHAR)SetObject_doc},
+ {"getObject", (PyCFunction) KX_TrackToActuator::sPyGetObject, METH_VARARGS, (PY_METHODCHAR)GetObject_doc},
+ {"setTime", (PyCFunction) KX_TrackToActuator::sPySetTime, METH_VARARGS, (PY_METHODCHAR)SetTime_doc},
+ {"getTime", (PyCFunction) KX_TrackToActuator::sPyGetTime, METH_VARARGS, (PY_METHODCHAR)GetTime_doc},
+ {"setUse3D", (PyCFunction) KX_TrackToActuator::sPySetUse3D, METH_VARARGS, (PY_METHODCHAR)SetUse3D_doc},
+ {"getUse3D", (PyCFunction) KX_TrackToActuator::sPyGetUse3D, METH_VARARGS, (PY_METHODCHAR)GetUse3D_doc},
{NULL,NULL} //Sentinel
};
@@ -473,7 +475,7 @@ PyObject* KX_TrackToActuator::_getattr(const STR_String& attr)
/* 1. setObject */
-char KX_TrackToActuator::SetObject_doc[] =
+const char KX_TrackToActuator::SetObject_doc[] =
"setObject(object)\n"
"\t- object: KX_GameObject, string or None\n"
"\tSet the object to track with the parent of this actuator.\n";
@@ -497,7 +499,7 @@ PyObject* KX_TrackToActuator::PySetObject(PyObject* self, PyObject* value)
/* 2. getObject */
-char KX_TrackToActuator::GetObject_doc[] =
+const char KX_TrackToActuator::GetObject_doc[] =
"getObject(name_only = 1)\n"
"name_only - optional arg, when true will return the KX_GameObject rather then its name\n"
"\tReturns the object to track with the parent of this actuator\n";
@@ -519,7 +521,7 @@ PyObject* KX_TrackToActuator::PyGetObject(PyObject* self, PyObject* args)
/* 3. setTime */
-char KX_TrackToActuator::SetTime_doc[] =
+const char KX_TrackToActuator::SetTime_doc[] =
"setTime(time)\n"
"\t- time: integer\n"
"\tSet the time in frames with which to delay the tracking motion.\n";
@@ -540,7 +542,7 @@ PyObject* KX_TrackToActuator::PySetTime(PyObject* self, PyObject* args, PyObject
/* 4.getTime */
-char KX_TrackToActuator::GetTime_doc[] =
+const char KX_TrackToActuator::GetTime_doc[] =
"getTime()\n"
"\t- time: integer\n"
"\tReturn the time in frames with which the tracking motion is delayed.\n";
@@ -552,7 +554,7 @@ PyObject* KX_TrackToActuator::PyGetTime(PyObject* self, PyObject* args, PyObject
/* 5. getUse3D */
-char KX_TrackToActuator::GetUse3D_doc[] =
+const char KX_TrackToActuator::GetUse3D_doc[] =
"getUse3D()\n"
"\tReturns 1 if the motion is allowed to extend in the z-direction.\n";
PyObject* KX_TrackToActuator::PyGetUse3D(PyObject* self, PyObject* args, PyObject* kwds)
@@ -563,7 +565,7 @@ PyObject* KX_TrackToActuator::PyGetUse3D(PyObject* self, PyObject* args, PyObjec
/* 6. setUse3D */
-char KX_TrackToActuator::SetUse3D_doc[] =
+const char KX_TrackToActuator::SetUse3D_doc[] =
"setUse3D(value)\n"
"\t- value: 0 or 1\n"
"\tSet to 1 to allow the tracking motion to extend in the z-direction,\n"
diff --git a/source/gameengine/Ketsji/KX_VehicleWrapper.cpp b/source/gameengine/Ketsji/KX_VehicleWrapper.cpp
index f5a2b5e02fe..342e71c5093 100644
--- a/source/gameengine/Ketsji/KX_VehicleWrapper.cpp
+++ b/source/gameengine/Ketsji/KX_VehicleWrapper.cpp
@@ -1,6 +1,8 @@
#include <Python.h>
+#include "PyObjectPlus.h"
+
#include "KX_VehicleWrapper.h"
#include "PHY_IPhysicsEnvironment.h"
#include "PHY_IVehicle.h"
diff --git a/source/gameengine/Ketsji/KX_VertexProxy.cpp b/source/gameengine/Ketsji/KX_VertexProxy.cpp
index 5cec65dff1c..25205714308 100644
--- a/source/gameengine/Ketsji/KX_VertexProxy.cpp
+++ b/source/gameengine/Ketsji/KX_VertexProxy.cpp
@@ -82,7 +82,7 @@ PyObject*
KX_VertexProxy::_getattr(const STR_String& attr)
{
if (attr == "XYZ")
- return PyObjectFrom(MT_Vector3(m_vertex->getLocalXYZ()));
+ return PyObjectFrom(MT_Vector3(m_vertex->getXYZ()));
if (attr == "UV")
return PyObjectFrom(MT_Point2(m_vertex->getUV1()));
@@ -102,11 +102,11 @@ KX_VertexProxy::_getattr(const STR_String& attr)
// pos
if (attr == "x")
- return PyFloat_FromDouble(m_vertex->getLocalXYZ()[0]);
+ return PyFloat_FromDouble(m_vertex->getXYZ()[0]);
if (attr == "y")
- return PyFloat_FromDouble(m_vertex->getLocalXYZ()[1]);
+ return PyFloat_FromDouble(m_vertex->getXYZ()[1]);
if (attr == "z")
- return PyFloat_FromDouble(m_vertex->getLocalXYZ()[2]);
+ return PyFloat_FromDouble(m_vertex->getXYZ()[2]);
// Col
if (attr == "r")
@@ -184,7 +184,7 @@ int KX_VertexProxy::_setattr(const STR_String& attr, PyObject *pyvalue)
{
float val = PyFloat_AsDouble(pyvalue);
// pos
- MT_Point3 pos(m_vertex->getLocalXYZ());
+ MT_Point3 pos(m_vertex->getXYZ());
if (attr == "x")
{
pos.x() = val;
@@ -312,7 +312,7 @@ PyObject* KX_VertexProxy::PyGetXYZ(PyObject*,
PyObject*,
PyObject*)
{
- return PyObjectFrom(MT_Point3(m_vertex->getLocalXYZ()));
+ return PyObjectFrom(MT_Point3(m_vertex->getXYZ()));
}
PyObject* KX_VertexProxy::PySetXYZ(PyObject*,
@@ -426,7 +426,7 @@ PyObject* KX_VertexProxy::PySetUV2(PyObject*,
{
if (PyVecTo(list, vec))
{
- m_vertex->SetFlag((m_vertex->getFlag()|TV_2NDUV));
+ m_vertex->SetFlag((m_vertex->getFlag()|RAS_TexVert::SECOND_UV));
m_vertex->SetUnit(unit);
m_vertex->SetUV2(vec);
m_mesh->SetMeshModified(true);
diff --git a/source/gameengine/Ketsji/KX_VisibilityActuator.cpp b/source/gameengine/Ketsji/KX_VisibilityActuator.cpp
index b4693a7a7db..4b0db5a7953 100644
--- a/source/gameengine/Ketsji/KX_VisibilityActuator.cpp
+++ b/source/gameengine/Ketsji/KX_VisibilityActuator.cpp
@@ -38,10 +38,12 @@
KX_VisibilityActuator::KX_VisibilityActuator(
SCA_IObject* gameobj,
bool visible,
+ bool recursive,
PyTypeObject* T
)
: SCA_IActuator(gameobj,T),
- m_visible(visible)
+ m_visible(visible),
+ m_recursive(recursive)
{
// intentionally empty
}
@@ -75,10 +77,10 @@ KX_VisibilityActuator::Update()
KX_GameObject *obj = (KX_GameObject*) GetParent();
- obj->SetVisible(m_visible);
- obj->MarkVisible();
+ obj->SetVisible(m_visible, m_recursive);
+ obj->UpdateBuckets(m_recursive);
- return true;
+ return false;
}
/* ------------------------------------------------------------------------- */
@@ -120,7 +122,7 @@ KX_VisibilityActuator::Parents[] = {
PyMethodDef
KX_VisibilityActuator::Methods[] = {
{"set", (PyCFunction) KX_VisibilityActuator::sPySetVisible,
- METH_VARARGS, SetVisible_doc},
+ METH_VARARGS, (PY_METHODCHAR)SetVisible_doc},
{NULL,NULL} //Sentinel
};
@@ -135,7 +137,7 @@ KX_VisibilityActuator::_getattr(
/* set visibility ---------------------------------------------------------- */
-char
+const char
KX_VisibilityActuator::SetVisible_doc[] =
"setVisible(visible?)\n"
"\t - visible? : Make the object visible? (KX_TRUE, KX_FALSE)"
diff --git a/source/gameengine/Ketsji/KX_VisibilityActuator.h b/source/gameengine/Ketsji/KX_VisibilityActuator.h
index 9b4753033fb..d1b85ab998c 100644
--- a/source/gameengine/Ketsji/KX_VisibilityActuator.h
+++ b/source/gameengine/Ketsji/KX_VisibilityActuator.h
@@ -39,12 +39,14 @@ class KX_VisibilityActuator : public SCA_IActuator
/** Make visible? */
bool m_visible;
+ bool m_recursive;
public:
KX_VisibilityActuator(
SCA_IObject* gameobj,
bool visible,
+ bool recursive,
PyTypeObject* T=&Type
);
diff --git a/source/gameengine/Ketsji/Makefile b/source/gameengine/Ketsji/Makefile
index 47a4855b00c..0b48ad8b8c3 100644
--- a/source/gameengine/Ketsji/Makefile
+++ b/source/gameengine/Ketsji/Makefile
@@ -35,10 +35,13 @@ include nan_compile.mk
CCFLAGS += $(LEVEL_1_CPP_WARNINGS)
+CPPFLAGS += $(NAN_SDLCFLAGS)
CPPFLAGS += $(OGL_CPPFLAGS)
CPPFLAGS += -I$(NAN_GLEW)/include
CPPFLAGS += -I$(OPENGL_HEADERS)
-CPPFLAGS += -I$(NAN_PYTHON)/include/python$(NAN_PYTHON_VERSION) -I../../blender/python
+CPPFLAGS += -I$(NAN_PYTHON)/include/python$(NAN_PYTHON_VERSION)
+CPPFLAGS += -I../../blender/python
+CPPFLAGS += -I../../blender/python/api2_2x
CPPFLAGS += -I$(NAN_STRING)/include
CPPFLAGS += -I$(NAN_SOUNDSYSTEM)/include
CPPFLAGS += -I$(NAN_FUZZICS)/include -I$(NAN_SUMO) -I$(NAN_MOTO)/include
@@ -61,13 +64,9 @@ CPPFLAGS += -I../../blender/blenlib
CPPFLAGS += -I../../blender/include
CPPFLAGS += -I../../blender/makesdna
CPPFLAGS += -I../../blender/imbuf
+CPPFLAGS += -I../../blender/gpu
CPPFLAGS += -I$(NAN_GUARDEDALLOC)/include
-ifeq ($(WITH_BF_GLEXT),true)
- CPPFLAGS += -DWITH_GLEXT
-endif
-
-
###########################
SOURCEDIR = source/gameengine/Ketsji
diff --git a/source/gameengine/Ketsji/SConscript b/source/gameengine/Ketsji/SConscript
index f6f744b199a..02e7aed82a5 100644
--- a/source/gameengine/Ketsji/SConscript
+++ b/source/gameengine/Ketsji/SConscript
@@ -32,16 +32,13 @@ incs += ' #source/gameengine/SceneGraph #source/gameengine/Physics/common #sourc
incs += ' #source/gameengine/Physics/BlOde #source/gameengine/Physics/Dummy'
incs += ' #source/gameengine/Physics/Sumo #source/gameengine/Physics/Sumo/include'
incs += ' #source/gameengine/Physics/Sumo/Fuzzics/include #source/gameengine/Network/LoopBackNetwork'
-incs += ' #source/blender/misc #source/blender/blenloader #extern/glew/include'
+incs += ' #source/blender/misc #source/blender/blenloader #extern/glew/include #source/blender/gpu'
cflags = []
if env['OURPLATFORM'] == 'win32-vc':
cflags.append('/GR')
cflags.append('/Ox')
-if env['WITH_BF_GLEXT'] == 1:
- env['CPPFLAGS'].append('-DWITH_GLEXT')
-
incs += ' ' + env['BF_SOLID_INC']
incs += ' ' + env['BF_PYTHON_INC']
incs += ' ' + env['BF_SDL_INC']
diff --git a/source/gameengine/Physics/BlOde/OdePhysicsController.h b/source/gameengine/Physics/BlOde/OdePhysicsController.h
index d3eb443ed3a..925f5b6686a 100644
--- a/source/gameengine/Physics/BlOde/OdePhysicsController.h
+++ b/source/gameengine/Physics/BlOde/OdePhysicsController.h
@@ -111,6 +111,8 @@ public:
virtual void calcXform(){}
virtual void SetMargin(float margin) {}
virtual float GetMargin() const {return 0.f;}
+ virtual float GetRadius() const {return 0.f;}
+ virtual void SetRadius(float margin) {}
// clientinfo for raycasts for example
virtual void* getNewClientInfo() { return m_clientInfo;}
diff --git a/source/gameengine/Physics/BlOde/OdePhysicsEnvironment.cpp b/source/gameengine/Physics/BlOde/OdePhysicsEnvironment.cpp
index a04560aaf09..2e8ee31058f 100644
--- a/source/gameengine/Physics/BlOde/OdePhysicsEnvironment.cpp
+++ b/source/gameengine/Physics/BlOde/OdePhysicsEnvironment.cpp
@@ -198,7 +198,7 @@ int ODEPhysicsEnvironment::createConstraint(class PHY_IPhysicsController* ctrl
}
-void ODEPhysicsEnvironment::removeConstraint(int constraintid)
+void ODEPhysicsEnvironment::removeConstraint(void *constraintid)
{
if (constraintid)
{
@@ -206,8 +206,7 @@ void ODEPhysicsEnvironment::removeConstraint(int constraintid)
}
}
-PHY_IPhysicsController* ODEPhysicsEnvironment::rayTest(PHY_IPhysicsController* ignoreClient,float fromX,float fromY,float fromZ, float toX,float toY,float toZ,
- float& hitX,float& hitY,float& hitZ,float& normalX,float& normalY,float& normalZ)
+PHY_IPhysicsController* ODEPhysicsEnvironment::rayTest(PHY_IRayCastFilterCallback &filterCallback,float fromX,float fromY,float fromZ, float toX,float toY,float toZ)
{
//m_OdeWorld
diff --git a/source/gameengine/Physics/BlOde/OdePhysicsEnvironment.h b/source/gameengine/Physics/BlOde/OdePhysicsEnvironment.h
index 7c61902f8e2..dcc87d614c0 100644
--- a/source/gameengine/Physics/BlOde/OdePhysicsEnvironment.h
+++ b/source/gameengine/Physics/BlOde/OdePhysicsEnvironment.h
@@ -54,8 +54,7 @@ public:
float axisX,float axisY,float axisZ);
virtual void removeConstraint(void * constraintid);
- virtual PHY_IPhysicsController* rayTest(PHY_IPhysicsController* ignoreClient,float fromX,float fromY,float fromZ, float toX,float toY,float toZ,
- float& hitX,float& hitY,float& hitZ,float& normalX,float& normalY,float& normalZ);
+ virtual PHY_IPhysicsController* rayTest(PHY_IRayCastFilterCallback &filterCallback,float fromX,float fromY,float fromZ, float toX,float toY,float toZ);
//gamelogic callbacks
diff --git a/source/gameengine/Physics/Bullet/CMakeLists.txt b/source/gameengine/Physics/Bullet/CMakeLists.txt
index b610fd1bbb0..6c733786caf 100644
--- a/source/gameengine/Physics/Bullet/CMakeLists.txt
+++ b/source/gameengine/Physics/Bullet/CMakeLists.txt
@@ -30,6 +30,10 @@ SET(INC
.
../common
../../../../extern/bullet2/src
+ ../../../../intern/moto/include
+ ../../../kernel/gen_system
+ ../../../../intern/string
+ ../../Rasterizer
)
BLENDERLIB(bf_bullet "${SRC}" "${INC}")
diff --git a/source/gameengine/Physics/Bullet/CcdPhysicsController.cpp b/source/gameengine/Physics/Bullet/CcdPhysicsController.cpp
index b872fae6138..c9c30c1b450 100644
--- a/source/gameengine/Physics/Bullet/CcdPhysicsController.cpp
+++ b/source/gameengine/Physics/Bullet/CcdPhysicsController.cpp
@@ -15,10 +15,18 @@ subject to the following restrictions:
#include "CcdPhysicsController.h"
#include "btBulletDynamicsCommon.h"
-
+#include "BulletCollision/CollisionShapes/btScaledBvhTriangleMeshShape.h"
#include "PHY_IMotionState.h"
#include "CcdPhysicsEnvironment.h"
+#include "RAS_MeshObject.h"
+#include "BulletSoftBody/btSoftBody.h"
+#include "BulletSoftBody//btSoftBodyInternals.h"
+#include "BulletSoftBody/btSoftBodyHelpers.h"
+#include "LinearMath/btConvexHull.h"
+#include "BulletCollision/Gimpact/btGImpactShape.h"
+
+#include "BulletSoftBody/btSoftRigidDynamicsWorld.h"
class BP_Proxy;
@@ -40,22 +48,36 @@ btVector3 startVel(0,0,0);//-10000);
CcdPhysicsController::CcdPhysicsController (const CcdConstructionInfo& ci)
:m_cci(ci)
{
+ m_prototypeTransformInitialized = false;
+ m_softbodyMappingDone = false;
m_collisionDelay = 0;
m_newClientInfo = 0;
m_registerCount = 0;
-
+ m_softBodyTransformInitialized = false;
+ m_parentCtrl = 0;
+ // copy pointers locally to allow smart release
m_MotionState = ci.m_MotionState;
+ m_collisionShape = ci.m_collisionShape;
+ // apply scaling before creating rigid body
+ m_collisionShape->setLocalScaling(m_cci.m_scaling);
+ if (m_cci.m_mass)
+ m_collisionShape->calculateLocalInertia(m_cci.m_mass, m_cci.m_localInertiaTensor);
+ // shape info is shared, increment ref count
+ m_shapeInfo = ci.m_shapeInfo;
+ if (m_shapeInfo)
+ m_shapeInfo->AddRef();
+
m_bulletMotionState = 0;
CreateRigidbody();
-
- #ifdef WIN32
- if (m_body->getInvMass())
- m_body->setLinearVelocity(startVel);
- #endif
+///???
+#ifdef WIN32
+ if (GetRigidBody() && !GetRigidBody()->isStaticObject())
+ GetRigidBody()->setLinearVelocity(startVel);
+#endif
}
@@ -107,20 +129,351 @@ public:
};
-void CcdPhysicsController::CreateRigidbody()
+btRigidBody* CcdPhysicsController::GetRigidBody()
+{
+ return btRigidBody::upcast(m_object);
+}
+btCollisionObject* CcdPhysicsController::GetCollisionObject()
+{
+ return m_object;
+}
+btSoftBody* CcdPhysicsController::GetSoftBody()
{
+ return btSoftBody::upcast(m_object);
+}
+
+#include "BulletSoftBody/btSoftBodyHelpers.h"
+
- btTransform trans = GetTransformFromMotionState(m_MotionState);
+void CcdPhysicsController::CreateRigidbody()
+{
+
+ //btTransform trans = GetTransformFromMotionState(m_MotionState);
m_bulletMotionState = new BlenderBulletMotionState(m_MotionState);
- m_body = new btRigidBody(m_cci.m_mass,
- m_bulletMotionState,
- m_cci.m_collisionShape,
- m_cci.m_localInertiaTensor * m_cci.m_inertiaFactor,
- m_cci.m_linearDamping,m_cci.m_angularDamping,
- m_cci.m_friction,m_cci.m_restitution);
+ ///either create a btCollisionObject, btRigidBody or btSoftBody
+
+ //create a collision object
+
+ int shapeType = m_cci.m_collisionShape ? m_cci.m_collisionShape->getShapeType() : 0;
+
+ //disable soft body until first sneak preview is ready
+ if (m_cci.m_bSoft && m_cci.m_collisionShape &&
+ (shapeType == CONVEX_HULL_SHAPE_PROXYTYPE)|
+ (shapeType == TRIANGLE_MESH_SHAPE_PROXYTYPE) |
+ (shapeType == SCALED_TRIANGLE_MESH_SHAPE_PROXYTYPE))
+ {
+ btRigidBody::btRigidBodyConstructionInfo rbci(m_cci.m_mass,m_bulletMotionState,m_collisionShape,m_cci.m_localInertiaTensor * m_cci.m_inertiaFactor);
+ rbci.m_linearDamping = m_cci.m_linearDamping;
+ rbci.m_angularDamping = m_cci.m_angularDamping;
+ rbci.m_friction = m_cci.m_friction;
+ rbci.m_restitution = m_cci.m_restitution;
+
+
+ int nodecount = 0;
+
+ int numtriangles = 1;
+
+ btVector3 p(0,0,0);// = getOrigin();
+ btScalar h = 1.f;
+
+ btSoftRigidDynamicsWorld* softDynaWorld = (btSoftRigidDynamicsWorld*)m_cci.m_physicsEnv->getDynamicsWorld();
+
+ PHY__Vector3 grav;
+ grav[0] = softDynaWorld->getGravity().getX();
+ grav[1] = softDynaWorld->getGravity().getY();
+ grav[2] = softDynaWorld->getGravity().getZ();
+ softDynaWorld->getWorldInfo().m_gravity.setValue(grav[0],grav[1],grav[2]); //??
+
+
+ //btSoftBody* psb=btSoftBodyHelpers::CreateRope(sbi, btVector3(-10,0,i*0.25),btVector3(10,0,i*0.25), 16,1+2);
+
+ btSoftBody* psb = 0;
+
+ if (m_cci.m_collisionShape->getShapeType() == CONVEX_HULL_SHAPE_PROXYTYPE)
+ {
+ btConvexHullShape* convexHull = (btConvexHullShape* )m_cci.m_collisionShape;
+
+ //psb = btSoftBodyHelpers::CreateFromConvexHull(sbi,&transformedVertices[0],convexHull->getNumPoints());
+
+ {
+ int nvertices = convexHull->getNumPoints();
+ const btVector3* vertices = convexHull->getPoints();
+ btSoftBodyWorldInfo& worldInfo = softDynaWorld->getWorldInfo();
+
+ HullDesc hdsc(QF_TRIANGLES,nvertices,vertices);
+ HullResult hres;
+ HullLibrary hlib;/*??*/
+ hdsc.mMaxVertices=nvertices;
+ hlib.CreateConvexHull(hdsc,hres);
+
+ psb=new btSoftBody(&worldInfo,(int)hres.mNumOutputVertices,
+ &hres.m_OutputVertices[0],0);
+ for(int i=0;i<(int)hres.mNumFaces;++i)
+ {
+ const int idx[]={ hres.m_Indices[i*3+0],
+ hres.m_Indices[i*3+1],
+ hres.m_Indices[i*3+2]};
+ if(idx[0]<idx[1]) psb->appendLink( idx[0],idx[1]);
+ if(idx[1]<idx[2]) psb->appendLink( idx[1],idx[2]);
+ if(idx[2]<idx[0]) psb->appendLink( idx[2],idx[0]);
+ psb->appendFace(idx[0],idx[1],idx[2]);
+ }
+
+
+
+ hlib.ReleaseResult(hres);
+
+
+ }
+
+
+
+
+
+
+ } else
+ {
+
+ btSoftBodyWorldInfo& sbi= softDynaWorld->getWorldInfo();
+
+ if (m_cci.m_collisionShape->getShapeType() ==SCALED_TRIANGLE_MESH_SHAPE_PROXYTYPE)
+ {
+ btScaledBvhTriangleMeshShape* scaledtrimeshshape = (btScaledBvhTriangleMeshShape*) m_cci.m_collisionShape;
+ btBvhTriangleMeshShape* trimeshshape = scaledtrimeshshape->getChildShape();
+
+ ///only deal with meshes that have 1 sub part/component, for now
+ if (trimeshshape->getMeshInterface()->getNumSubParts()==1)
+ {
+ unsigned char* vertexBase;
+ PHY_ScalarType vertexType;
+ int numverts;
+ int vertexstride;
+ unsigned char* indexbase;
+ int indexstride;
+ int numtris;
+ PHY_ScalarType indexType;
+ trimeshshape->getMeshInterface()->getLockedVertexIndexBase(&vertexBase,numverts,vertexType,vertexstride,&indexbase,indexstride,numtris,indexType);
+
+ psb = btSoftBodyHelpers::CreateFromTriMesh(sbi,(const btScalar*)vertexBase,(const int*)indexbase,numtris);
+ }
+ } else
+ {
+ btBvhTriangleMeshShape* trimeshshape = (btBvhTriangleMeshShape*) m_cci.m_collisionShape;
+ ///only deal with meshes that have 1 sub part/component, for now
+ if (trimeshshape->getMeshInterface()->getNumSubParts()==1)
+ {
+ unsigned char* vertexBase;
+ PHY_ScalarType vertexType;
+ int numverts;
+ int vertexstride;
+ unsigned char* indexbase;
+ int indexstride;
+ int numtris;
+ PHY_ScalarType indexType;
+ trimeshshape->getMeshInterface()->getLockedVertexIndexBase(&vertexBase,numverts,vertexType,vertexstride,&indexbase,indexstride,numtris,indexType);
+
+ psb = btSoftBodyHelpers::CreateFromTriMesh(sbi,(const btScalar*)vertexBase,(const int*)indexbase,numtris);
+ }
+
+
+ //psb = btSoftBodyHelpers::CreateFromTriMesh(sbi,&pts[0].getX(),triangles,numtriangles);
+ }
+
+ }
+
+
+
+ m_object = psb;
+
+ //psb->m_cfg.collisions = btSoftBody::fCollision::SDF_RS;//btSoftBody::fCollision::CL_SS+ btSoftBody::fCollision::CL_RS;
+
+ //psb->m_cfg.collisions = btSoftBody::fCollision::SDF_RS + btSoftBody::fCollision::VF_SS;//CL_SS;
+
+
+ //btSoftBody::Material* pm=psb->appendMaterial();
+ btSoftBody::Material* pm=psb->m_materials[0];
+ pm->m_kLST = m_cci.m_soft_linStiff;
+ pm->m_kAST = m_cci.m_soft_angStiff;
+ pm->m_kVST = m_cci.m_soft_volume;
+ psb->m_cfg.collisions = 0;
+
+ if (m_cci.m_soft_collisionflags & CCD_BSB_COL_CL_RS)
+ {
+ psb->m_cfg.collisions += btSoftBody::fCollision::CL_RS;
+ } else
+ {
+ psb->m_cfg.collisions += btSoftBody::fCollision::SDF_RS;
+ }
+ if (m_cci.m_soft_collisionflags & CCD_BSB_COL_CL_SS)
+ {
+ psb->m_cfg.collisions += btSoftBody::fCollision::CL_SS;
+ } else
+ {
+ psb->m_cfg.collisions += btSoftBody::fCollision::VF_SS;
+ }
+
+
+ psb->m_cfg.kSRHR_CL = m_cci.m_soft_kSRHR_CL; /* Soft vs rigid hardness [0,1] (cluster only) */
+ psb->m_cfg.kSKHR_CL = m_cci.m_soft_kSKHR_CL; /* Soft vs kinetic hardness [0,1] (cluster only) */
+ psb->m_cfg.kSSHR_CL = m_cci.m_soft_kSSHR_CL; /* Soft vs soft hardness [0,1] (cluster only) */
+ psb->m_cfg.kSR_SPLT_CL = m_cci.m_soft_kSR_SPLT_CL; /* Soft vs rigid impulse split [0,1] (cluster only) */
+
+ psb->m_cfg.kSK_SPLT_CL = m_cci.m_soft_kSK_SPLT_CL; /* Soft vs rigid impulse split [0,1] (cluster only) */
+ psb->m_cfg.kSS_SPLT_CL = m_cci.m_soft_kSS_SPLT_CL; /* Soft vs rigid impulse split [0,1] (cluster only) */
+ psb->m_cfg.kVCF = m_cci.m_soft_kVCF; /* Velocities correction factor (Baumgarte) */
+ psb->m_cfg.kDP = m_cci.m_soft_kDP; /* Damping coefficient [0,1] */
+
+ psb->m_cfg.kDG = m_cci.m_soft_kDG; /* Drag coefficient [0,+inf] */
+ psb->m_cfg.kLF = m_cci.m_soft_kLF; /* Lift coefficient [0,+inf] */
+ psb->m_cfg.kPR = m_cci.m_soft_kPR; /* Pressure coefficient [-inf,+inf] */
+ psb->m_cfg.kVC = m_cci.m_soft_kVC; /* Volume conversation coefficient [0,+inf] */
+
+ psb->m_cfg.kDF = m_cci.m_soft_kDF; /* Dynamic friction coefficient [0,1] */
+ psb->m_cfg.kMT = m_cci.m_soft_kMT; /* Pose matching coefficient [0,1] */
+ psb->m_cfg.kCHR = m_cci.m_soft_kCHR; /* Rigid contacts hardness [0,1] */
+ psb->m_cfg.kKHR = m_cci.m_soft_kKHR; /* Kinetic contacts hardness [0,1] */
+
+ psb->m_cfg.kSHR = m_cci.m_soft_kSHR; /* Soft contacts hardness [0,1] */
+ psb->m_cfg.kAHR = m_cci.m_soft_kAHR; /* Anchors hardness [0,1] */
+
+
+ if (m_cci.m_gamesoftFlag & CCD_BSB_BENDING_CONSTRAINTS)//OB_SB_GOAL)
+ {
+ psb->generateBendingConstraints(2,pm);
+ }
+
+ psb->m_cfg.piterations = m_cci.m_soft_piterations;
+ psb->m_cfg.viterations = m_cci.m_soft_viterations;
+ psb->m_cfg.diterations = m_cci.m_soft_diterations;
+ psb->m_cfg.citerations = m_cci.m_soft_citerations;
+
+ if (m_cci.m_gamesoftFlag & CCD_BSB_SHAPE_MATCHING)//OB_SB_GOAL)
+ {
+ psb->setPose(false,true);//
+ } else
+ {
+ psb->setPose(true,false);
+ }
+
+
+
+ psb->randomizeConstraints();
+
+ if (m_cci.m_soft_collisionflags & (CCD_BSB_COL_CL_RS+CCD_BSB_COL_CL_SS))
+ {
+ psb->generateClusters(m_cci.m_soft_numclusteriterations);
+ }
+
+// psb->activate();
+// psb->setActivationState(1);
+// psb->setDeactivationTime(1.f);
+
+ //psb->m_materials[0]->m_kLST = 0.1+(i/(btScalar)(n-1))*0.9;
+ psb->setTotalMass(m_cci.m_mass);
+
+ psb->setCollisionFlags(0);
+
+ ///create a mapping between graphics mesh vertices and soft body vertices
+ {
+ RAS_MeshObject* rasMesh= GetShapeInfo()->GetMesh();
+
+ if (rasMesh && !m_softbodyMappingDone)
+ {
+
+ //printf("apply\n");
+ RAS_MeshSlot::iterator it;
+ RAS_MeshMaterial *mmat;
+ RAS_MeshSlot *slot;
+ size_t i;
+
+ //for each material
+ for (int m=0;m<rasMesh->NumMaterials();m++)
+ {
+ // The vertex cache can only be updated for this deformer:
+ // Duplicated objects with more than one ploymaterial (=multiple mesh slot per object)
+ // share the same mesh (=the same cache). As the rendering is done per polymaterial
+ // cycling through the objects, the entire mesh cache cannot be updated in one shot.
+ mmat = rasMesh->GetMeshMaterial(m);
+
+ slot = mmat->m_baseslot;
+ for(slot->begin(it); !slot->end(it); slot->next(it))
+ {
+ int index = 0;
+ for(i=it.startvertex; i<it.endvertex; i++,index++)
+ {
+ RAS_TexVert* vertex = &it.vertex[i];
+
+
+ //search closest index, and store it in vertex
+ vertex->setSoftBodyIndex(0);
+ btScalar maxDistSqr = 1e30;
+ btSoftBody::tNodeArray& nodes(psb->m_nodes);
+ btVector3 xyz = btVector3(vertex->getXYZ()[0],vertex->getXYZ()[1],vertex->getXYZ()[2]);
+ for (int n=0;n<nodes.size();n++)
+ {
+ btScalar distSqr = (nodes[n].m_x - xyz).length2();
+ if (distSqr<maxDistSqr)
+ {
+ maxDistSqr = distSqr;
+
+ vertex->setSoftBodyIndex(n);
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ m_softbodyMappingDone = true;
+
+
+
+
+
+
+// m_object->setCollisionShape(rbci.m_collisionShape);
+ btTransform startTrans;
+
+ if (rbci.m_motionState)
+ {
+ rbci.m_motionState->getWorldTransform(startTrans);
+ } else
+ {
+ startTrans = rbci.m_startWorldTransform;
+ }
+ //startTrans.setIdentity();
+
+ //m_object->setWorldTransform(startTrans);
+ //m_object->setInterpolationWorldTransform(startTrans);
+ m_MotionState->setWorldPosition(startTrans.getOrigin().getX(),startTrans.getOrigin().getY(),startTrans.getOrigin().getZ());
+ m_MotionState->setWorldOrientation(0,0,0,1);
+
+ if (!m_prototypeTransformInitialized)
+ {
+ m_prototypeTransformInitialized = true;
+ m_softBodyTransformInitialized = true;
+ GetSoftBody()->transform(startTrans);
+ }
+
+// btVector3 wp = m_softBody->getWorldTransform().getOrigin();
+// MT_Point3 center(wp.getX(),wp.getY(),wp.getZ());
+// m_gameobj->NodeSetWorldPosition(center);
+
+
+ } else
+ {
+ btRigidBody::btRigidBodyConstructionInfo rbci(m_cci.m_mass,m_bulletMotionState,m_collisionShape,m_cci.m_localInertiaTensor * m_cci.m_inertiaFactor);
+ rbci.m_linearDamping = m_cci.m_linearDamping;
+ rbci.m_angularDamping = m_cci.m_angularDamping;
+ rbci.m_friction = m_cci.m_friction;
+ rbci.m_restitution = m_cci.m_restitution;
+ m_object = new btRigidBody(rbci);
+ }
+
//
// init the rigidbody properly
//
@@ -132,16 +485,39 @@ void CcdPhysicsController::CreateRigidbody()
if ((m_cci.m_collisionFilterGroup & CcdConstructionInfo::SensorFilter) != 0)
{
// reset the flags that have been set so far
- m_body->setCollisionFlags(0);
+ GetCollisionObject()->setCollisionFlags(0);
}
- m_body->setCollisionFlags(m_body->getCollisionFlags() | m_cci.m_collisionFlags);
- m_body->setGravity( m_cci.m_gravity);
- m_body->setDamping(m_cci.m_linearDamping, m_cci.m_angularDamping);
+ GetCollisionObject()->setCollisionFlags(m_object->getCollisionFlags() | m_cci.m_collisionFlags);
+ btRigidBody* body = GetRigidBody();
+
+ if (body)
+ {
+ body->setGravity( m_cci.m_gravity);
+ body->setDamping(m_cci.m_linearDamping, m_cci.m_angularDamping);
+
+ if (!m_cci.m_bRigid)
+ {
+ body->setAngularFactor(0.f);
+ }
+ }
+ if (m_object && m_cci.m_do_anisotropic)
+ {
+ m_object->setAnisotropicFriction(m_cci.m_anisotropicFriction);
+ }
+
+}
- if (!m_cci.m_bRigid)
+static void DeleteBulletShape(btCollisionShape* shape)
+{
+ if (shape->getShapeType() == TRIANGLE_MESH_SHAPE_PROXYTYPE)
{
- m_body->setAngularFactor(0.f);
+ // shapes based on meshes use an interface that contains the vertices.
+ btTriangleMeshShape* meshShape = static_cast<btTriangleMeshShape*>(shape);
+ btStridingMeshInterface* meshInterface = meshShape->getMeshInterface();
+ if (meshInterface)
+ delete meshInterface;
}
+ delete shape;
}
CcdPhysicsController::~CcdPhysicsController()
@@ -154,7 +530,28 @@ CcdPhysicsController::~CcdPhysicsController()
delete m_MotionState;
if (m_bulletMotionState)
delete m_bulletMotionState;
- delete m_body;
+ delete m_object;
+
+ if (m_collisionShape)
+ {
+ // collision shape is always unique to the controller, can delete it here
+ if (m_collisionShape->isCompound())
+ {
+ // bullet does not delete the child shape, must do it here
+ btCompoundShape* compoundShape = (btCompoundShape*)m_collisionShape;
+ int numChild = compoundShape->getNumChildShapes();
+ for (int i=numChild-1 ; i >= 0; i--)
+ {
+ btCollisionShape* childShape = compoundShape->getChildShape(i);
+ DeleteBulletShape(childShape);
+ }
+ }
+ DeleteBulletShape(m_collisionShape);
+ }
+ if (m_shapeInfo)
+ {
+ m_shapeInfo->Release();
+ }
}
@@ -165,12 +562,26 @@ bool CcdPhysicsController::SynchronizeMotionStates(float time)
{
//sync non-static to motionstate, and static from motionstate (todo: add kinematic etc.)
- if (!m_body->isStaticObject())
+ btSoftBody* sb = GetSoftBody();
+ if (sb)
{
- const btVector3& worldPos = m_body->getCenterOfMassPosition();
+ btVector3 aabbMin,aabbMax;
+ sb->getAabb(aabbMin,aabbMax);
+ btVector3 worldPos = (aabbMax+aabbMin)*0.5f;
+ m_MotionState->setWorldPosition(worldPos[0],worldPos[1],worldPos[2]);
+ m_MotionState->calculateWorldTransformations();
+ return true;
+ }
+
+ btRigidBody* body = GetRigidBody();
+
+ if (body && !body->isStaticObject())
+ {
+
+ const btVector3& worldPos = body->getCenterOfMassPosition();
m_MotionState->setWorldPosition(worldPos[0],worldPos[1],worldPos[2]);
- const btQuaternion& worldquat = m_body->getOrientation();
+ const btQuaternion& worldquat = body->getOrientation();
m_MotionState->setWorldOrientation(worldquat[0],worldquat[1],worldquat[2],worldquat[3]);
m_MotionState->calculateWorldTransformations();
@@ -189,7 +600,7 @@ bool CcdPhysicsController::SynchronizeMotionStates(float time)
btTransform oldTrans = m_body->getCenterOfMassTransform();
btTransform newTrans(worldquat,worldPos);
- m_body->setCenterOfMassTransform(newTrans);
+ SetCenterOfMassTransform(newTrans);
//need to keep track of previous position for friction effects...
m_MotionState->calculateWorldTransformations();
@@ -217,13 +628,41 @@ void CcdPhysicsController::WriteDynamicsToMotionState()
// controller replication
void CcdPhysicsController::PostProcessReplica(class PHY_IMotionState* motionstate,class PHY_IPhysicsController* parentctrl)
{
+
+ m_softBodyTransformInitialized=false;
m_MotionState = motionstate;
m_registerCount = 0;
-
+ m_collisionShape = NULL;
- m_body = 0;
+ // always create a new shape to avoid scaling bug
+ if (m_shapeInfo)
+ {
+ m_shapeInfo->AddRef();
+ m_collisionShape = m_shapeInfo->CreateBulletShape();
+
+ if (m_collisionShape)
+ {
+ // new shape has no scaling, apply initial scaling
+ m_collisionShape->setMargin(m_cci.m_margin);
+ m_collisionShape->setLocalScaling(m_cci.m_scaling);
+
+ if (m_cci.m_mass)
+ m_collisionShape->calculateLocalInertia(m_cci.m_mass, m_cci.m_localInertiaTensor);
+ }
+ }
+
+ m_object = 0;
CreateRigidbody();
-
+
+ btRigidBody* body = GetRigidBody();
+
+ if (body)
+ {
+ if (m_cci.m_mass)
+ {
+ body->setMassProps(m_cci.m_mass, m_cci.m_localInertiaTensor * m_cci.m_inertiaFactor);
+ }
+ }
m_cci.m_physicsEnv->addCcdPhysicsController(this);
@@ -259,40 +698,75 @@ void CcdPhysicsController::PostProcessReplica(class PHY_IMotionState* motionsta
}
+
+void CcdPhysicsController::SetCenterOfMassTransform(btTransform& xform)
+{
+ btRigidBody* body = GetRigidBody();
+ if (body)
+ {
+ body->setCenterOfMassTransform(xform);
+ } else
+ {
+ //either collision object or soft body?
+ if (GetSoftBody())
+ {
+
+ } else
+ {
+
+ if (m_object->isStaticOrKinematicObject())
+ {
+ m_object->setInterpolationWorldTransform(m_object->getWorldTransform());
+ } else
+ {
+ m_object->setInterpolationWorldTransform(xform);
+ }
+ if (body)
+ {
+ body->setInterpolationLinearVelocity(body->getLinearVelocity());
+ body->setInterpolationAngularVelocity(body->getAngularVelocity());
+ body->updateInertiaTensor();
+ }
+ m_object->setWorldTransform(xform);
+ }
+ }
+}
+
// kinematic methods
void CcdPhysicsController::RelativeTranslate(float dlocX,float dlocY,float dlocZ,bool local)
{
- if (m_body)
+ if (m_object)
{
- m_body->activate(true);
- if (m_body->isStaticObject())
+ m_object->activate(true);
+ if (m_object->isStaticObject())
{
- m_body->setCollisionFlags(m_body->getCollisionFlags() | btCollisionObject::CF_KINEMATIC_OBJECT);
+ m_object->setCollisionFlags(m_object->getCollisionFlags() | btCollisionObject::CF_KINEMATIC_OBJECT);
}
+ btRigidBody* body = GetRigidBody();
btVector3 dloc(dlocX,dlocY,dlocZ);
- btTransform xform = m_body->getCenterOfMassTransform();
-
+ btTransform xform = m_object->getWorldTransform();
+
if (local)
{
dloc = xform.getBasis()*dloc;
}
xform.setOrigin(xform.getOrigin() + dloc);
- m_body->setCenterOfMassTransform(xform);
+ SetCenterOfMassTransform(xform);
}
}
void CcdPhysicsController::RelativeRotate(const float rotval[9],bool local)
{
- if (m_body)
+ if (m_object)
{
- m_body->activate(true);
- if (m_body->isStaticObject())
+ m_object->activate(true);
+ if (m_object->isStaticObject())
{
- m_body->setCollisionFlags(m_body->getCollisionFlags() | btCollisionObject::CF_KINEMATIC_OBJECT);
+ m_object->setCollisionFlags(m_object->getCollisionFlags() | btCollisionObject::CF_KINEMATIC_OBJECT);
}
btMatrix3x3 drotmat( rotval[0],rotval[4],rotval[8],
@@ -303,16 +777,16 @@ void CcdPhysicsController::RelativeRotate(const float rotval[9],bool local)
btMatrix3x3 currentOrn;
GetWorldOrientation(currentOrn);
- btTransform xform = m_body->getCenterOfMassTransform();
-
+ btTransform xform = m_object->getWorldTransform();
+
xform.setBasis(xform.getBasis()*(local ?
drotmat : (currentOrn.inverse() * drotmat * currentOrn)));
- m_body->setCenterOfMassTransform(xform);
+ SetCenterOfMassTransform(xform);
}
-
}
+
void CcdPhysicsController::GetWorldOrientation(btMatrix3x3& mat)
{
float orn[4];
@@ -323,7 +797,7 @@ void CcdPhysicsController::GetWorldOrientation(btMatrix3x3& mat)
void CcdPhysicsController::getOrientation(float &quatImag0,float &quatImag1,float &quatImag2,float &quatReal)
{
- btQuaternion q = m_body->getCenterOfMassTransform().getRotation();
+ btQuaternion q = m_object->getWorldTransform().getRotation();
quatImag0 = q[0];
quatImag1 = q[1];
quatImag2 = q[2];
@@ -331,58 +805,72 @@ void CcdPhysicsController::getOrientation(float &quatImag0,float &quatImag1,flo
}
void CcdPhysicsController::setOrientation(float quatImag0,float quatImag1,float quatImag2,float quatReal)
{
- if (m_body)
+ if (m_object)
{
- m_body->activate(true);
- if (m_body->isStaticObject())
+ m_object->activate(true);
+ if (m_object->isStaticObject())
{
- m_body->setCollisionFlags(m_body->getCollisionFlags() | btCollisionObject::CF_KINEMATIC_OBJECT);
+ m_object->setCollisionFlags(m_object->getCollisionFlags() | btCollisionObject::CF_KINEMATIC_OBJECT);
}
// not required
//m_MotionState->setWorldOrientation(quatImag0,quatImag1,quatImag2,quatReal);
- btTransform xform = m_body->getCenterOfMassTransform();
+ btTransform xform = m_object->getWorldTransform();
xform.setRotation(btQuaternion(quatImag0,quatImag1,quatImag2,quatReal));
- m_body->setCenterOfMassTransform(xform);
+ SetCenterOfMassTransform(xform);
// not required
//m_bulletMotionState->setWorldTransform(xform);
+
+
+
}
}
void CcdPhysicsController::setWorldOrientation(const btMatrix3x3& orn)
{
- if (m_body)
+ if (m_object)
{
- m_body->activate(true);
- if (m_body->isStaticObject())
+ m_object->activate(true);
+ if (m_object->isStaticObject())
{
- m_body->setCollisionFlags(m_body->getCollisionFlags() | btCollisionObject::CF_KINEMATIC_OBJECT);
+ m_object->setCollisionFlags(m_object->getCollisionFlags() | btCollisionObject::CF_KINEMATIC_OBJECT);
}
// not required
//m_MotionState->setWorldOrientation(quatImag0,quatImag1,quatImag2,quatReal);
- btTransform xform = m_body->getCenterOfMassTransform();
+ btTransform xform = m_object->getWorldTransform();
xform.setBasis(orn);
- m_body->setCenterOfMassTransform(xform);
+ SetCenterOfMassTransform(xform);
// not required
//m_bulletMotionState->setWorldTransform(xform);
+ //only once!
+ if (!m_softBodyTransformInitialized && GetSoftBody())
+ {
+ m_softbodyStartTrans.setBasis(orn);
+ xform.setOrigin(m_softbodyStartTrans.getOrigin());
+ GetSoftBody()->transform(xform);
+ m_softBodyTransformInitialized = true;
+ }
+
}
}
void CcdPhysicsController::setPosition(float posX,float posY,float posZ)
{
- if (m_body)
+ if (m_object)
{
- m_body->activate(true);
- if (m_body->isStaticObject())
+ m_object->activate(true);
+ if (m_object->isStaticObject())
{
- m_body->setCollisionFlags(m_body->getCollisionFlags() | btCollisionObject::CF_KINEMATIC_OBJECT);
+ m_object->setCollisionFlags(m_object->getCollisionFlags() | btCollisionObject::CF_KINEMATIC_OBJECT);
}
// not required, this function is only used to update the physic controller
//m_MotionState->setWorldPosition(posX,posY,posZ);
- btTransform xform = m_body->getCenterOfMassTransform();
+ btTransform xform = m_object->getWorldTransform();
xform.setOrigin(btVector3(posX,posY,posZ));
- m_body->setCenterOfMassTransform(xform);
+ SetCenterOfMassTransform(xform);
+ if (!m_softBodyTransformInitialized)
+ m_softbodyStartTrans.setOrigin(xform.getOrigin());
// not required
//m_bulletMotionState->setWorldTransform(xform);
}
@@ -395,7 +883,7 @@ void CcdPhysicsController::resolveCombinedVelocities(float linvelX,float linvel
void CcdPhysicsController::getPosition(PHY__Vector3& pos) const
{
- const btTransform& xform = m_body->getCenterOfMassTransform();
+ const btTransform& xform = m_object->getWorldTransform();
pos[0] = xform.getOrigin().x();
pos[1] = xform.getOrigin().y();
pos[2] = xform.getOrigin().z();
@@ -409,15 +897,16 @@ void CcdPhysicsController::setScaling(float scaleX,float scaleY,float scaleZ)
{
m_cci.m_scaling = btVector3(scaleX,scaleY,scaleZ);
- if (m_body && m_body->getCollisionShape())
+ if (m_object && m_object->getCollisionShape())
{
- m_body->getCollisionShape()->setLocalScaling(m_cci.m_scaling);
+ m_object->getCollisionShape()->setLocalScaling(m_cci.m_scaling);
//printf("no inertia recalc for fixed objects with mass=0\n");
- if (m_cci.m_mass)
+ btRigidBody* body = GetRigidBody();
+ if (body && m_cci.m_mass)
{
- m_body->getCollisionShape()->calculateLocalInertia(m_cci.m_mass, m_cci.m_localInertiaTensor);
- m_body->setMassProps(m_cci.m_mass, m_cci.m_localInertiaTensor * m_cci.m_inertiaFactor);
+ body->getCollisionShape()->calculateLocalInertia(m_cci.m_mass, m_cci.m_localInertiaTensor);
+ body->setMassProps(m_cci.m_mass, m_cci.m_localInertiaTensor * m_cci.m_inertiaFactor);
}
}
@@ -428,19 +917,23 @@ void CcdPhysicsController::setScaling(float scaleX,float scaleY,float scaleZ)
void CcdPhysicsController::ApplyTorque(float torqueX,float torqueY,float torqueZ,bool local)
{
btVector3 torque(torqueX,torqueY,torqueZ);
- btTransform xform = m_body->getCenterOfMassTransform();
- if (m_body && torque.length2() > (SIMD_EPSILON*SIMD_EPSILON))
+ btTransform xform = m_object->getWorldTransform();
+
+
+ if (m_object && torque.length2() > (SIMD_EPSILON*SIMD_EPSILON))
{
- m_body->activate();
- if (m_body->isStaticObject())
+ btRigidBody* body = GetRigidBody();
+ m_object->activate();
+ if (m_object->isStaticObject())
{
- m_body->setCollisionFlags(m_body->getCollisionFlags() | btCollisionObject::CF_KINEMATIC_OBJECT);
+ m_object->setCollisionFlags(m_object->getCollisionFlags() | btCollisionObject::CF_KINEMATIC_OBJECT);
}
if (local)
{
torque = xform.getBasis()*torque;
}
- m_body->applyTorque(torque);
+ if (body)
+ body->applyTorque(torque);
}
}
@@ -448,41 +941,57 @@ void CcdPhysicsController::ApplyForce(float forceX,float forceY,float forceZ,bo
{
btVector3 force(forceX,forceY,forceZ);
- if (m_body && force.length2() > (SIMD_EPSILON*SIMD_EPSILON))
+
+ if (m_object && force.length2() > (SIMD_EPSILON*SIMD_EPSILON))
{
- m_body->activate();
- if (m_body->isStaticObject())
+ m_object->activate();
+ if (m_object->isStaticObject())
{
- m_body->setCollisionFlags(m_body->getCollisionFlags() | btCollisionObject::CF_KINEMATIC_OBJECT);
+ m_object->setCollisionFlags(m_object->getCollisionFlags() | btCollisionObject::CF_KINEMATIC_OBJECT);
}
+
{
- btTransform xform = m_body->getCenterOfMassTransform();
+ btTransform xform = m_object->getWorldTransform();
+
if (local)
{
force = xform.getBasis()*force;
}
+ btRigidBody* body = GetRigidBody();
+ if (body)
+ body->applyCentralForce(force);
+ btSoftBody* soft = GetSoftBody();
+ if (soft)
+ {
+ // the force is applied on each node, must reduce it in the same extend
+ if (soft->m_nodes.size() > 0)
+ force /= soft->m_nodes.size();
+ soft->addForce(force);
+ }
}
- m_body->applyCentralForce(force);
}
}
void CcdPhysicsController::SetAngularVelocity(float ang_velX,float ang_velY,float ang_velZ,bool local)
{
btVector3 angvel(ang_velX,ang_velY,ang_velZ);
- if (m_body && angvel.length2() > (SIMD_EPSILON*SIMD_EPSILON))
+ if (m_object && angvel.length2() > (SIMD_EPSILON*SIMD_EPSILON))
{
- m_body->activate(true);
- if (m_body->isStaticObject())
+ m_object->activate(true);
+ if (m_object->isStaticObject())
{
- m_body->setCollisionFlags(m_body->getCollisionFlags() | btCollisionObject::CF_KINEMATIC_OBJECT);
- }
+ m_object->setCollisionFlags(m_object->getCollisionFlags() | btCollisionObject::CF_KINEMATIC_OBJECT);
+ } else
{
- btTransform xform = m_body->getCenterOfMassTransform();
+ btTransform xform = m_object->getWorldTransform();
if (local)
{
angvel = xform.getBasis()*angvel;
}
+ btRigidBody* body = GetRigidBody();
+ if (body)
+ body->setAngularVelocity(angvel);
+
}
- m_body->setAngularVelocity(angvel);
}
}
@@ -490,39 +999,53 @@ void CcdPhysicsController::SetLinearVelocity(float lin_velX,float lin_velY,floa
{
btVector3 linVel(lin_velX,lin_velY,lin_velZ);
- if (m_body && linVel.length2() > (SIMD_EPSILON*SIMD_EPSILON))
+ if (m_object/* && linVel.length2() > (SIMD_EPSILON*SIMD_EPSILON)*/)
{
- m_body->activate(true);
- if (m_body->isStaticObject())
+ m_object->activate(true);
+ if (m_object->isStaticObject())
{
- m_body->setCollisionFlags(m_body->getCollisionFlags() | btCollisionObject::CF_KINEMATIC_OBJECT);
+ m_object->setCollisionFlags(m_object->getCollisionFlags() | btCollisionObject::CF_KINEMATIC_OBJECT);
+ return;
}
-
+
+ btSoftBody* soft = GetSoftBody();
+ if (soft)
+ {
+ if (local)
+ {
+ linVel = m_softbodyStartTrans.getBasis()*linVel;
+ }
+ soft->setVelocity(linVel);
+ } else
{
- btTransform xform = m_body->getCenterOfMassTransform();
+ btTransform xform = m_object->getWorldTransform();
if (local)
{
linVel = xform.getBasis()*linVel;
}
+ btRigidBody* body = GetRigidBody();
+ if (body)
+ body->setLinearVelocity(linVel);
}
- m_body->setLinearVelocity(linVel);
}
}
void CcdPhysicsController::applyImpulse(float attachX,float attachY,float attachZ, float impulseX,float impulseY,float impulseZ)
{
btVector3 impulse(impulseX,impulseY,impulseZ);
- if (m_body && impulse.length2() > (SIMD_EPSILON*SIMD_EPSILON))
+ if (m_object && impulse.length2() > (SIMD_EPSILON*SIMD_EPSILON))
{
- m_body->activate();
- if (m_body->isStaticObject())
+ m_object->activate();
+ if (m_object->isStaticObject())
{
- m_body->setCollisionFlags(m_body->getCollisionFlags() | btCollisionObject::CF_KINEMATIC_OBJECT);
+ m_object->setCollisionFlags(m_object->getCollisionFlags() | btCollisionObject::CF_KINEMATIC_OBJECT);
}
btVector3 pos(attachX,attachY,attachZ);
-
- m_body->applyImpulse(impulse,pos);
+ btRigidBody* body = GetRigidBody();
+ if (body)
+ body->applyImpulse(impulse,pos);
+
}
}
@@ -532,29 +1055,55 @@ void CcdPhysicsController::SetActive(bool active)
// reading out information from physics
void CcdPhysicsController::GetLinearVelocity(float& linvX,float& linvY,float& linvZ)
{
- const btVector3& linvel = this->m_body->getLinearVelocity();
- linvX = linvel.x();
- linvY = linvel.y();
- linvZ = linvel.z();
+ btRigidBody* body = GetRigidBody();
+ if (body)
+ {
+ const btVector3& linvel = body->getLinearVelocity();
+ linvX = linvel.x();
+ linvY = linvel.y();
+ linvZ = linvel.z();
+ } else
+ {
+ linvX = 0.f;
+ linvY = 0.f;
+ linvZ = 0.f;
+ }
}
void CcdPhysicsController::GetAngularVelocity(float& angVelX,float& angVelY,float& angVelZ)
{
- const btVector3& angvel= m_body->getAngularVelocity();
- angVelX = angvel.x();
- angVelY = angvel.y();
- angVelZ = angvel.z();
+ btRigidBody* body = GetRigidBody();
+ if (body)
+ {
+ const btVector3& angvel= body->getAngularVelocity();
+ angVelX = angvel.x();
+ angVelY = angvel.y();
+ angVelZ = angvel.z();
+ } else
+ {
+ angVelX = 0.f;
+ angVelY = 0.f;
+ angVelZ = 0.f;
+ }
}
void CcdPhysicsController::GetVelocity(const float posX,const float posY,const float posZ,float& linvX,float& linvY,float& linvZ)
{
btVector3 pos(posX,posY,posZ);
- btVector3 rel_pos = pos-m_body->getCenterOfMassPosition();
- btVector3 linvel = m_body->getVelocityInLocalPoint(rel_pos);
- linvX = linvel.x();
- linvY = linvel.y();
- linvZ = linvel.z();
+ btRigidBody* body = GetRigidBody();
+ if (body)
+ {
+ btVector3 linvel = body->getVelocityInLocalPoint(pos);
+ linvX = linvel.x();
+ linvY = linvel.y();
+ linvZ = linvel.z();
+ } else
+ {
+ linvX = 0.f;
+ linvY = 0.f;
+ linvZ = 0.f;
+ }
}
void CcdPhysicsController::getReactionForce(float& forceX,float& forceY,float& forceZ)
{
@@ -565,11 +1114,15 @@ void CcdPhysicsController::setRigidBody(bool rigid)
{
if (!rigid)
{
- //fake it for now
- btVector3 inertia = m_body->getInvInertiaDiagLocal();
- inertia[1] = 0.f;
- m_body->setInvInertiaDiagLocal(inertia);
- m_body->updateInertiaTensor();
+ btRigidBody* body = GetRigidBody();
+ if (body)
+ {
+ //fake it for now
+ btVector3 inertia = body->getInvInertiaDiagLocal();
+ inertia[1] = 0.f;
+ body->setInvInertiaDiagLocal(inertia);
+ body->updateInertiaTensor();
+ }
}
}
@@ -586,40 +1139,52 @@ void CcdPhysicsController::setNewClientInfo(void* clientinfo)
void CcdPhysicsController::UpdateDeactivation(float timeStep)
{
- m_body->updateDeactivation( timeStep);
+ btRigidBody* body = GetRigidBody();
+ if (body)
+ {
+ body->updateDeactivation( timeStep);
+ }
}
bool CcdPhysicsController::wantsSleeping()
{
-
- return m_body->wantsSleeping();
+ btRigidBody* body = GetRigidBody();
+ if (body)
+ {
+ return body->wantsSleeping();
+ }
+ //check it out
+ return true;
}
PHY_IPhysicsController* CcdPhysicsController::GetReplica()
{
- //very experimental, shape sharing is not implemented yet.
- //just support btSphereShape/ConeShape for now
-
+ // This is used only to replicate Near and Radar sensor controllers
+ // The replication of object physics controller is done in KX_BulletPhysicsController::GetReplica()
CcdConstructionInfo cinfo = m_cci;
- if (cinfo.m_collisionShape)
+ if (m_shapeInfo)
+ {
+ // This situation does not normally happen
+ cinfo.m_collisionShape = m_shapeInfo->CreateBulletShape();
+ }
+ else if (m_collisionShape)
{
- switch (cinfo.m_collisionShape->getShapeType())
+ switch (m_collisionShape->getShapeType())
{
case SPHERE_SHAPE_PROXYTYPE:
{
- btSphereShape* orgShape = (btSphereShape*)cinfo.m_collisionShape;
+ btSphereShape* orgShape = (btSphereShape*)m_collisionShape;
cinfo.m_collisionShape = new btSphereShape(*orgShape);
break;
}
- case CONE_SHAPE_PROXYTYPE:
+ case CONE_SHAPE_PROXYTYPE:
{
- btConeShape* orgShape = (btConeShape*)cinfo.m_collisionShape;
+ btConeShape* orgShape = (btConeShape*)m_collisionShape;
cinfo.m_collisionShape = new btConeShape(*orgShape);
break;
}
-
default:
{
return 0;
@@ -628,6 +1193,7 @@ PHY_IPhysicsController* CcdPhysicsController::GetReplica()
}
cinfo.m_MotionState = new DefaultMotionState();
+ cinfo.m_shapeInfo = m_shapeInfo;
CcdPhysicsController* replica = new CcdPhysicsController(cinfo);
return replica;
@@ -689,3 +1255,273 @@ void DefaultMotionState::calculateWorldTransformations()
}
+// Shape constructor
+std::map<RAS_MeshObject*, CcdShapeConstructionInfo*> CcdShapeConstructionInfo::m_meshShapeMap;
+
+CcdShapeConstructionInfo* CcdShapeConstructionInfo::FindMesh(RAS_MeshObject* mesh, bool polytope)
+{
+ if (polytope)
+ // not yet supported
+ return NULL;
+
+ std::map<RAS_MeshObject*,CcdShapeConstructionInfo*>::const_iterator mit = m_meshShapeMap.find(mesh);
+ if (mit != m_meshShapeMap.end())
+ return mit->second;
+ return NULL;
+}
+
+bool CcdShapeConstructionInfo::SetMesh(RAS_MeshObject* meshobj, bool polytope,bool useGimpact)
+{
+ m_useGimpact = useGimpact;
+
+ // assume no shape information
+ // no support for dynamic change of shape yet
+ assert(m_meshObject == NULL);
+ m_shapeType = PHY_SHAPE_NONE;
+ m_vertexArray.clear();
+ m_polygonIndexArray.clear();
+ m_meshObject = NULL;
+
+ if (!meshobj)
+ return false;
+
+ // Mesh has no polygons!
+ int numpolys = meshobj->NumPolygons();
+ if (!numpolys)
+ {
+ return false;
+ }
+
+ // check that we have at least one colliding polygon
+ int numvalidpolys = 0;
+
+ for (int p=0; p<numpolys; p++)
+ {
+ RAS_Polygon* poly = meshobj->GetPolygon(p);
+
+ // only add polygons that have the collisionflag set
+ if (poly->IsCollider())
+ {
+ numvalidpolys++;
+ break;
+ }
+ }
+
+ // No collision polygons
+ if (numvalidpolys < 1)
+ return false;
+
+ m_shapeType = (polytope) ? PHY_SHAPE_POLYTOPE : PHY_SHAPE_MESH;
+
+ numvalidpolys = 0;
+
+ for (int p2=0; p2<numpolys; p2++)
+ {
+ RAS_Polygon* poly = meshobj->GetPolygon(p2);
+
+ // only add polygons that have the collisionflag set
+ if (poly->IsCollider())
+ {
+ //Bullet can raycast any shape, so
+ if (polytope)
+ {
+ for (int i=0;i<poly->VertexCount();i++)
+ {
+ const float* vtx = poly->GetVertex(i)->getXYZ();
+ btPoint3 point(vtx[0],vtx[1],vtx[2]);
+ //avoid duplicates (could better directly use vertex offsets, rather than a vertex compare)
+ bool found = false;
+ for (int j=0;j<m_vertexArray.size();j++)
+ {
+ if (m_vertexArray[j]==point)
+ {
+ found = true;
+ break;
+ }
+ }
+ if (!found)
+ m_vertexArray.push_back(point);
+
+ numvalidpolys++;
+ }
+ } else
+ {
+ {
+ const float* vtx = poly->GetVertex(2)->getXYZ();
+ btPoint3 vertex0(vtx[0],vtx[1],vtx[2]);
+
+ vtx = poly->GetVertex(1)->getXYZ();
+ btPoint3 vertex1(vtx[0],vtx[1],vtx[2]);
+
+ vtx = poly->GetVertex(0)->getXYZ();
+ btPoint3 vertex2(vtx[0],vtx[1],vtx[2]);
+
+ m_vertexArray.push_back(vertex0);
+ m_vertexArray.push_back(vertex1);
+ m_vertexArray.push_back(vertex2);
+ m_polygonIndexArray.push_back(p2);
+ numvalidpolys++;
+ }
+ if (poly->VertexCount() == 4)
+ {
+ const float* vtx = poly->GetVertex(3)->getXYZ();
+ btPoint3 vertex0(vtx[0],vtx[1],vtx[2]);
+
+ vtx = poly->GetVertex(2)->getXYZ();
+ btPoint3 vertex1(vtx[0],vtx[1],vtx[2]);
+
+ vtx = poly->GetVertex(0)->getXYZ();
+ btPoint3 vertex2(vtx[0],vtx[1],vtx[2]);
+
+ m_vertexArray.push_back(vertex0);
+ m_vertexArray.push_back(vertex1);
+ m_vertexArray.push_back(vertex2);
+ m_polygonIndexArray.push_back(p2);
+ numvalidpolys++;
+ }
+ }
+ }
+ }
+
+ if (!numvalidpolys)
+ {
+ // should not happen
+ m_shapeType = PHY_SHAPE_NONE;
+ return false;
+ }
+ m_meshObject = meshobj;
+ if (!polytope)
+ {
+ // triangle shape can be shared, store the mesh object in the map
+ m_meshShapeMap.insert(std::pair<RAS_MeshObject*,CcdShapeConstructionInfo*>(meshobj,this));
+ }
+ return true;
+}
+
+btCollisionShape* CcdShapeConstructionInfo::CreateBulletShape()
+{
+ btCollisionShape* collisionShape = 0;
+ btTriangleMeshShape* concaveShape = 0;
+ btTriangleMesh* collisionMeshData = 0;
+ btCompoundShape* compoundShape = 0;
+ CcdShapeConstructionInfo* nextShapeInfo;
+
+ switch (m_shapeType)
+ {
+ case PHY_SHAPE_NONE:
+ break;
+
+ case PHY_SHAPE_BOX:
+ collisionShape = new btBoxShape(m_halfExtend);
+ break;
+
+ case PHY_SHAPE_SPHERE:
+ collisionShape = new btSphereShape(m_radius);
+ break;
+
+ case PHY_SHAPE_CYLINDER:
+ collisionShape = new btCylinderShapeZ(m_halfExtend);
+ break;
+
+ case PHY_SHAPE_CONE:
+ collisionShape = new btConeShapeZ(m_radius, m_height);
+ break;
+
+ case PHY_SHAPE_POLYTOPE:
+ collisionShape = new btConvexHullShape(&m_vertexArray.begin()->getX(), m_vertexArray.size());
+ break;
+
+ case PHY_SHAPE_MESH:
+ // Let's use the latest btScaledBvhTriangleMeshShape: it allows true sharing of
+ // triangle mesh information between duplicates => drastic performance increase when
+ // duplicating complex mesh objects.
+ // BUT it causes a small performance decrease when sharing is not required:
+ // 9 multiplications/additions and one function call for each triangle that passes the mid phase filtering
+ // One possible optimization is to use directly the btBvhTriangleMeshShape when the scale is 1,1,1
+ // and btScaledBvhTriangleMeshShape otherwise.
+ if (m_useGimpact)
+ {
+ collisionMeshData = new btTriangleMesh();
+
+
+ // m_vertexArray is necessarily a multiple of 3
+ for (std::vector<btPoint3>::iterator it=m_vertexArray.begin(); it != m_vertexArray.end(); )
+ {
+ collisionMeshData->addTriangle(*it++,*it++,*it++);
+ }
+ btGImpactMeshShape* gimpactShape = new btGImpactMeshShape(collisionMeshData);
+
+ collisionShape = gimpactShape;
+ gimpactShape->updateBound();
+
+ } else
+ {
+ if (!m_unscaledShape)
+ {
+ collisionMeshData = new btTriangleMesh(true,false);
+ collisionMeshData->m_weldingThreshold = m_weldingThreshold;
+
+ // m_vertexArray is necessarily a multiple of 3
+ for (std::vector<btPoint3>::iterator it=m_vertexArray.begin(); it != m_vertexArray.end(); )
+ {
+ collisionMeshData->addTriangle(*it++,*it++,*it++);
+ }
+ // this shape will be shared and not deleted until shapeInfo is deleted
+ m_unscaledShape = new btBvhTriangleMeshShape( collisionMeshData, true );
+ m_unscaledShape->recalcLocalAabb();
+ }
+ collisionShape = new btScaledBvhTriangleMeshShape(m_unscaledShape, btVector3(1.0f,1.0f,1.0f));
+ }
+ break;
+
+ case PHY_SHAPE_COMPOUND:
+ if (m_shapeArray.size() > 0)
+ {
+ compoundShape = new btCompoundShape();
+ for (std::vector<CcdShapeConstructionInfo*>::iterator sit = m_shapeArray.begin();
+ sit != m_shapeArray.end();
+ sit++)
+ {
+ collisionShape = (*sit)->CreateBulletShape();
+ if (collisionShape)
+ {
+ collisionShape->setLocalScaling((*sit)->m_childScale);
+ compoundShape->addChildShape((*sit)->m_childTrans, collisionShape);
+ }
+ }
+ collisionShape = compoundShape;
+ }
+ }
+ return collisionShape;
+}
+
+void CcdShapeConstructionInfo::AddShape(CcdShapeConstructionInfo* shapeInfo)
+{
+ m_shapeArray.push_back(shapeInfo);
+}
+
+CcdShapeConstructionInfo::~CcdShapeConstructionInfo()
+{
+ for (std::vector<CcdShapeConstructionInfo*>::iterator sit = m_shapeArray.begin();
+ sit != m_shapeArray.end();
+ sit++)
+ {
+ (*sit)->Release();
+ }
+ m_shapeArray.clear();
+ if (m_unscaledShape)
+ {
+ DeleteBulletShape(m_unscaledShape);
+ }
+ m_vertexArray.clear();
+ if (m_shapeType == PHY_SHAPE_MESH && m_meshObject != NULL)
+ {
+ std::map<RAS_MeshObject*,CcdShapeConstructionInfo*>::iterator mit = m_meshShapeMap.find(m_meshObject);
+ if (mit != m_meshShapeMap.end() && mit->second == this)
+ {
+ m_meshShapeMap.erase(mit);
+ }
+ }
+}
+
+
diff --git a/source/gameengine/Physics/Bullet/CcdPhysicsController.h b/source/gameengine/Physics/Bullet/CcdPhysicsController.h
index 448e5622eff..054ec91122a 100644
--- a/source/gameengine/Physics/Bullet/CcdPhysicsController.h
+++ b/source/gameengine/Physics/Bullet/CcdPhysicsController.h
@@ -17,11 +17,15 @@ subject to the following restrictions:
#ifndef BULLET2_PHYSICSCONTROLLER_H
#define BULLET2_PHYSICSCONTROLLER_H
+#include <vector>
+#include <map>
+
#include "PHY_IPhysicsController.h"
/// PHY_IPhysicsController is the abstract simplified Interface to a physical object.
/// It contains the IMotionState and IDeformableMesh Interfaces.
#include "btBulletDynamicsCommon.h"
+#include "LinearMath/btTransform.h"
#include "PHY_IMotionState.h"
@@ -31,8 +35,119 @@ extern float gAngularSleepingTreshold;
extern bool gDisableDeactivation;
class CcdPhysicsEnvironment;
class btMotionState;
+class RAS_MeshObject;
+class btCollisionShape;
+
+
+#define CCD_BSB_SHAPE_MATCHING 2
+#define CCD_BSB_BENDING_CONSTRAINTS 8
+#define CCD_BSB_AERO_VPOINT 16 /* aero model, Vertex normals are oriented toward velocity*/
+#define CCD_BSB_AERO_VTWOSIDE 32 /* aero model, Vertex normals are flipped to match velocity */
+
+/* BulletSoftBody.collisionflags */
+#define CCD_BSB_COL_SDF_RS 2 /* SDF based rigid vs soft */
+#define CCD_BSB_COL_CL_RS 4 /* Cluster based rigid vs soft */
+#define CCD_BSB_COL_CL_SS 8 /* Cluster based soft vs soft */
+#define CCD_BSB_COL_VF_SS 16 /* Vertex/Face based soft vs soft */
+
+
+
+// Shape contructor
+// It contains all the information needed to create a simple bullet shape at runtime
+class CcdShapeConstructionInfo
+{
+public:
+
+
+ static CcdShapeConstructionInfo* FindMesh(RAS_MeshObject* mesh, bool polytope);
+
+ CcdShapeConstructionInfo() :
+ m_shapeType(PHY_SHAPE_NONE),
+ m_radius(1.0),
+ m_height(1.0),
+ m_halfExtend(0.f,0.f,0.f),
+ m_childScale(1.0f,1.0f,1.0f),
+ m_refCount(1),
+ m_meshObject(NULL),
+ m_unscaledShape(NULL),
+ m_useGimpact(false),
+ m_weldingThreshold(0.f)
+ {
+ m_childTrans.setIdentity();
+ }
+
+ ~CcdShapeConstructionInfo();
+
+ CcdShapeConstructionInfo* AddRef()
+ {
+ m_refCount++;
+ return this;
+ }
+
+ int Release()
+ {
+ if (--m_refCount > 0)
+ return m_refCount;
+ delete this;
+ return 0;
+ }
+
+ void AddShape(CcdShapeConstructionInfo* shapeInfo);
+
+ btTriangleMeshShape* GetMeshShape(void)
+ {
+ return m_unscaledShape;
+ }
+ CcdShapeConstructionInfo* GetChildShape(int i)
+ {
+ if (i < 0 || i >= m_shapeArray.size())
+ return NULL;
+
+ return m_shapeArray.at(i);
+ }
+ bool SetMesh(RAS_MeshObject* mesh, bool polytope,bool useGimpact);
+ RAS_MeshObject* GetMesh(void)
+ {
+ return m_meshObject;
+ }
+
+ btCollisionShape* CreateBulletShape();
+
+ // member variables
+ PHY_ShapeType m_shapeType;
+ btScalar m_radius;
+ btScalar m_height;
+ btVector3 m_halfExtend;
+ btTransform m_childTrans;
+ btVector3 m_childScale;
+ std::vector<btPoint3> m_vertexArray; // Contains both vertex array for polytope shape and
+ // triangle array for concave mesh shape.
+ // In this case a triangle is made of 3 consecutive points
+ std::vector<int> m_polygonIndexArray; // Contains the array of polygon index in the
+ // original mesh that correspond to shape triangles.
+ // only set for concave mesh shape.
+
+ void setVertexWeldingThreshold(float threshold)
+ {
+ m_weldingThreshold = threshold;
+ }
+ float getVertexWeldingThreshold() const
+ {
+ return m_weldingThreshold;
+ }
+protected:
+ static std::map<RAS_MeshObject*, CcdShapeConstructionInfo*> m_meshShapeMap;
+ int m_refCount; // this class is shared between replicas
+ // keep track of users so that we can release it
+ RAS_MeshObject* m_meshObject; // Keep a pointer to the original mesh
+ btBvhTriangleMeshShape* m_unscaledShape;// holds the shared unscale BVH mesh shape,
+ // the actual shape is of type btScaledBvhTriangleMeshShape
+ std::vector<CcdShapeConstructionInfo*> m_shapeArray; // for compound shapes
+ bool m_useGimpact; //use gimpact for concave dynamic/moving collision detection
+ float m_weldingThreshold; //welding closeby vertices together can improve softbody stability etc.
+};
struct CcdConstructionInfo
{
@@ -52,21 +167,28 @@ struct CcdConstructionInfo
CcdConstructionInfo()
- : m_gravity(0,0,0),
+ : m_localInertiaTensor(1.f, 1.f, 1.f),
+ m_gravity(0,0,0),
m_scaling(1.f,1.f,1.f),
m_mass(0.f),
m_restitution(0.1f),
m_friction(0.5f),
m_linearDamping(0.1f),
m_angularDamping(0.1f),
+ m_margin(0.06f),
+ m_gamesoftFlag(0),
m_collisionFlags(0),
m_bRigid(false),
+ m_bSoft(false),
m_collisionFilterGroup(DefaultFilter),
m_collisionFilterMask(AllFilter),
m_collisionShape(0),
m_MotionState(0),
+ m_shapeInfo(0),
m_physicsEnv(0),
- m_inertiaFactor(1.f)
+ m_inertiaFactor(1.f),
+ m_do_anisotropic(false),
+ m_anisotropicFriction(1.f,1.f,1.f)
{
}
@@ -78,8 +200,50 @@ struct CcdConstructionInfo
btScalar m_friction;
btScalar m_linearDamping;
btScalar m_angularDamping;
+ btScalar m_margin;
+
+ ////////////////////
+ int m_gamesoftFlag;
+ float m_soft_linStiff; /* linear stiffness 0..1 */
+ float m_soft_angStiff; /* angular stiffness 0..1 */
+ float m_soft_volume; /* volume preservation 0..1 */
+
+ int m_soft_viterations; /* Velocities solver iterations */
+ int m_soft_piterations; /* Positions solver iterations */
+ int m_soft_diterations; /* Drift solver iterations */
+ int m_soft_citerations; /* Cluster solver iterations */
+
+ float m_soft_kSRHR_CL; /* Soft vs rigid hardness [0,1] (cluster only) */
+ float m_soft_kSKHR_CL; /* Soft vs kinetic hardness [0,1] (cluster only) */
+ float m_soft_kSSHR_CL; /* Soft vs soft hardness [0,1] (cluster only) */
+ float m_soft_kSR_SPLT_CL; /* Soft vs rigid impulse split [0,1] (cluster only) */
+
+ float m_soft_kSK_SPLT_CL; /* Soft vs rigid impulse split [0,1] (cluster only) */
+ float m_soft_kSS_SPLT_CL; /* Soft vs rigid impulse split [0,1] (cluster only) */
+ float m_soft_kVCF; /* Velocities correction factor (Baumgarte) */
+ float m_soft_kDP; /* Damping coefficient [0,1] */
+
+ float m_soft_kDG; /* Drag coefficient [0,+inf] */
+ float m_soft_kLF; /* Lift coefficient [0,+inf] */
+ float m_soft_kPR; /* Pressure coefficient [-inf,+inf] */
+ float m_soft_kVC; /* Volume conversation coefficient [0,+inf] */
+
+ float m_soft_kDF; /* Dynamic friction coefficient [0,1] */
+ float m_soft_kMT; /* Pose matching coefficient [0,1] */
+ float m_soft_kCHR; /* Rigid contacts hardness [0,1] */
+ float m_soft_kKHR; /* Kinetic contacts hardness [0,1] */
+
+ float m_soft_kSHR; /* Soft contacts hardness [0,1] */
+ float m_soft_kAHR; /* Anchors hardness [0,1] */
+ int m_soft_collisionflags; /* Vertex/Face or Signed Distance Field(SDF) or Clusters, Soft versus Soft or Rigid */
+ int m_soft_numclusteriterations; /* number of iterations to refine collision clusters*/
+///////////////////
+
+
+
int m_collisionFlags;
bool m_bRigid;
+ bool m_bSoft;
///optional use of collision group/mask:
///only collision with object goups that match the collision mask.
@@ -89,29 +253,59 @@ struct CcdConstructionInfo
short int m_collisionFilterGroup;
short int m_collisionFilterMask;
+ ///these pointers are used as argument passing for the CcdPhysicsController constructor
+ ///and not anymore after that
class btCollisionShape* m_collisionShape;
class PHY_IMotionState* m_MotionState;
+ class CcdShapeConstructionInfo* m_shapeInfo;
CcdPhysicsEnvironment* m_physicsEnv; //needed for self-replication
float m_inertiaFactor;//tweak the inertia (hooked up to Blender 'formfactor'
+ bool m_do_anisotropic;
+ btVector3 m_anisotropicFriction;
+
+ bool m_do_fh; ///< Should the object have a linear Fh spring?
+ bool m_do_rot_fh; ///< Should the object have an angular Fh spring?
+ btScalar m_fh_spring; ///< Spring constant (both linear and angular)
+ btScalar m_fh_damping; ///< Damping factor (linear and angular) in range [0, 1]
+ btScalar m_fh_distance; ///< The range above the surface where Fh is active.
+ bool m_fh_normal; ///< Should the object slide off slopes?
+ float m_radius;//for fh backwards compatibility
+
};
class btRigidBody;
-
+class btCollisionObject;
+class btSoftBody;
///CcdPhysicsController is a physics object that supports continuous collision detection and time of impact based physics resolution.
class CcdPhysicsController : public PHY_IPhysicsController
{
- btRigidBody* m_body;
+
+ btCollisionObject* m_object;
+
+
class PHY_IMotionState* m_MotionState;
btMotionState* m_bulletMotionState;
+ class btCollisionShape* m_collisionShape;
+ class CcdShapeConstructionInfo* m_shapeInfo;
+
friend class CcdPhysicsEnvironment; // needed when updating the controller
+ //some book keeping for replication
+ bool m_softbodyMappingDone;
+ bool m_softBodyTransformInitialized;
+ bool m_prototypeTransformInitialized;
+ btTransform m_softbodyStartTrans;
+
void* m_newClientInfo;
int m_registerCount; // needed when multiple sensors use the same controller
CcdConstructionInfo m_cci;//needed for replication
+
+ CcdPhysicsController* m_parentCtrl;
+
void GetWorldOrientation(btMatrix3x3& mat);
void CreateRigidbody();
@@ -135,11 +329,24 @@ class CcdPhysicsController : public PHY_IPhysicsController
virtual ~CcdPhysicsController();
+ CcdConstructionInfo& getConstructionInfo()
+ {
+ return m_cci;
+ }
+ const CcdConstructionInfo& getConstructionInfo() const
+ {
+ return m_cci;
+ }
+
+
+ btRigidBody* GetRigidBody();
+ btCollisionObject* GetCollisionObject();
+ btSoftBody* GetSoftBody();
- btRigidBody* GetRigidBody() { return m_body;}
+ CcdShapeConstructionInfo* GetShapeInfo() { return m_shapeInfo; }
btCollisionShape* GetCollisionShape() {
- return m_body->getCollisionShape();
+ return m_object->getCollisionShape();
}
////////////////////////////////////
// PHY_IPhysicsController interface
@@ -206,14 +413,37 @@ class CcdPhysicsController : public PHY_IPhysicsController
}
virtual void calcXform() {} ;
- virtual void SetMargin(float margin) {};
- virtual float GetMargin() const {return 0.f;};
+ virtual void SetMargin(float margin)
+ {
+ if (m_collisionShape)
+ m_collisionShape->setMargin(btScalar(margin));
+ }
+ virtual float GetMargin() const
+ {
+ return (m_collisionShape) ? m_collisionShape->getMargin() : 0.f;
+ }
+ virtual float GetRadius() const
+ {
+ // this is not the actual shape radius, it's only used for Fh support
+ return m_cci.m_radius;
+ }
+ virtual void SetRadius(float margin)
+ {
+ if (m_collisionShape && m_collisionShape->getShapeType() == SPHERE_SHAPE_PROXYTYPE)
+ {
+ btSphereShape* sphereShape = static_cast<btSphereShape*>(m_collisionShape);
+ sphereShape->setUnscaledRadius(margin);
+ }
+ m_cci.m_radius = margin;
+ }
bool wantsSleeping();
void UpdateDeactivation(float timeStep);
+ void SetCenterOfMassTransform(btTransform& xform);
+
static btTransform GetTransformFromMotionState(PHY_IMotionState* motionState);
void setAabb(const btVector3& aabbMin,const btVector3& aabbMax);
@@ -233,6 +463,23 @@ class CcdPhysicsController : public PHY_IPhysicsController
{
return m_cci.m_physicsEnv;
}
+
+ void setParentCtrl(CcdPhysicsController* parentCtrl)
+ {
+ m_parentCtrl = parentCtrl;
+ }
+
+ CcdPhysicsController* getParentCtrl()
+ {
+ return m_parentCtrl;
+ }
+
+ const CcdPhysicsController* getParentCtrl() const
+ {
+ return m_parentCtrl;
+ }
+
+
};
diff --git a/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.cpp b/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.cpp
index dfbcf115fd7..91655e96101 100644
--- a/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.cpp
+++ b/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.cpp
@@ -23,6 +23,9 @@ subject to the following restrictions:
#include "btBulletDynamicsCommon.h"
#include "LinearMath/btIDebugDraw.h"
#include "BulletCollision/CollisionDispatch/btSimulationIslandManager.h"
+#include "BulletSoftBody/btSoftRigidDynamicsWorld.h"
+#include "BulletSoftBody/btSoftBodyRigidBodyCollisionConfiguration.h"
+#include "BulletCollision/Gimpact/btGImpactCollisionAlgorithm.h"
//profiling/timings
#include "LinearMath/btQuickprof.h"
@@ -53,6 +56,7 @@ void DrawRasterizerLine(const float* from,const float* to,int color);
#include <stdio.h>
+#include <string.h> // for memset
#ifdef NEW_BULLET_VEHICLE_SUPPORT
class WrapperVehicle : public PHY_IVehicle
@@ -329,30 +333,29 @@ m_filterCallback(NULL)
{
m_triggerCallbacks[i] = 0;
}
+
+// m_collisionConfiguration = new btDefaultCollisionConfiguration();
+ m_collisionConfiguration = new btSoftBodyRigidBodyCollisionConfiguration();
+
if (!dispatcher)
{
- dispatcher = new btCollisionDispatcher();
+ btCollisionDispatcher* disp = new btCollisionDispatcher(m_collisionConfiguration);
+ dispatcher = disp;
+ btGImpactCollisionAlgorithm::registerAlgorithm(disp);
m_ownDispatcher = dispatcher;
}
- if(!pairCache)
- {
-
- //todo: calculate/let user specify this world sizes
- btVector3 worldMin(-10000,-10000,-10000);
- btVector3 worldMax(10000,10000,10000);
-
- pairCache = new btAxisSweep3(worldMin,worldMax);
- // remember that this was allocated by us so that we can release it
- m_ownPairCache = pairCache;
- //broadphase = new btSimpleBroadphase();
- }
+ //m_broadphase = new btAxisSweep3(btVector3(-1000,-1000,-1000),btVector3(1000,1000,1000));
+ //m_broadphase = new btSimpleBroadphase();
+ m_broadphase = new btDbvtBroadphase();
m_filterCallback = new CcdOverlapFilterCallBack(this);
- pairCache->setOverlapFilterCallback(m_filterCallback);
+ m_broadphase->getOverlappingPairCache()->setOverlapFilterCallback(m_filterCallback);
setSolverType(1);//issues with quickstep and memory allocations
- m_dynamicsWorld = new btDiscreteDynamicsWorld(dispatcher,pairCache,m_solver);
+// m_dynamicsWorld = new btDiscreteDynamicsWorld(dispatcher,m_broadphase,m_solver,m_collisionConfiguration);
+ m_dynamicsWorld = new btSoftRigidDynamicsWorld(dispatcher,m_broadphase,m_solver,m_collisionConfiguration);
+
m_debugDrawer = 0;
m_gravity = btVector3(0.f,-10.f,0.f);
m_dynamicsWorld->setGravity(m_gravity);
@@ -363,24 +366,42 @@ m_filterCallback(NULL)
void CcdPhysicsEnvironment::addCcdPhysicsController(CcdPhysicsController* ctrl)
{
btRigidBody* body = ctrl->GetRigidBody();
+ btCollisionObject* obj = ctrl->GetCollisionObject();
//this m_userPointer is just used for triggers, see CallbackTriggers
- body->setUserPointer(ctrl);
+ obj->setUserPointer(ctrl);
+ if (body)
+ body->setGravity( m_gravity );
- body->setGravity( m_gravity );
m_controllers.insert(ctrl);
- //use explicit group/filter for finer control over collision in bullet => near/radar sensor
- m_dynamicsWorld->addRigidBody(body, ctrl->GetCollisionFilterGroup(), ctrl->GetCollisionFilterMask());
- if (body->isStaticOrKinematicObject())
+ if (body)
+ {
+ //use explicit group/filter for finer control over collision in bullet => near/radar sensor
+ m_dynamicsWorld->addRigidBody(body, ctrl->GetCollisionFilterGroup(), ctrl->GetCollisionFilterMask());
+ } else
+ {
+ if (ctrl->GetSoftBody())
+ {
+ btSoftBody* softBody = ctrl->GetSoftBody();
+ m_dynamicsWorld->addSoftBody(softBody);
+ } else
+ {
+ if (obj->getCollisionShape())
+ {
+ m_dynamicsWorld->addCollisionObject(obj,ctrl->GetCollisionFilterGroup(), ctrl->GetCollisionFilterMask());
+ }
+ }
+ }
+ if (obj->isStaticOrKinematicObject())
{
- body->setActivationState(ISLAND_SLEEPING);
+ obj->setActivationState(ISLAND_SLEEPING);
}
//CollisionObject(body,ctrl->GetCollisionFilterGroup(),ctrl->GetCollisionFilterMask());
- assert(body->getBroadphaseHandle());
+ assert(obj->getBroadphaseHandle());
btBroadphaseInterface* scene = getBroadphase();
@@ -389,7 +410,7 @@ void CcdPhysicsEnvironment::addCcdPhysicsController(CcdPhysicsController* ctrl)
assert(shapeinterface);
- const btTransform& t = ctrl->GetRigidBody()->getCenterOfMassTransform();
+ const btTransform& t = ctrl->GetCollisionObject()->getWorldTransform();
btPoint3 minAabb,maxAabb;
@@ -401,42 +422,59 @@ void CcdPhysicsEnvironment::addCcdPhysicsController(CcdPhysicsController* ctrl)
//extent it with the motion
- btVector3 linMotion = body->getLinearVelocity()*timeStep;
-
- float maxAabbx = maxAabb.getX();
- float maxAabby = maxAabb.getY();
- float maxAabbz = maxAabb.getZ();
- float minAabbx = minAabb.getX();
- float minAabby = minAabb.getY();
- float minAabbz = minAabb.getZ();
-
- if (linMotion.x() > 0.f)
- maxAabbx += linMotion.x();
- else
- minAabbx += linMotion.x();
- if (linMotion.y() > 0.f)
- maxAabby += linMotion.y();
- else
- minAabby += linMotion.y();
- if (linMotion.z() > 0.f)
- maxAabbz += linMotion.z();
- else
- minAabbz += linMotion.z();
-
-
- minAabb = btVector3(minAabbx,minAabby,minAabbz);
- maxAabb = btVector3(maxAabbx,maxAabby,maxAabbz);
-
+ if (body)
+ {
+ btVector3 linMotion = body->getLinearVelocity()*timeStep;
+
+ float maxAabbx = maxAabb.getX();
+ float maxAabby = maxAabb.getY();
+ float maxAabbz = maxAabb.getZ();
+ float minAabbx = minAabb.getX();
+ float minAabby = minAabb.getY();
+ float minAabbz = minAabb.getZ();
+
+ if (linMotion.x() > 0.f)
+ maxAabbx += linMotion.x();
+ else
+ minAabbx += linMotion.x();
+ if (linMotion.y() > 0.f)
+ maxAabby += linMotion.y();
+ else
+ minAabby += linMotion.y();
+ if (linMotion.z() > 0.f)
+ maxAabbz += linMotion.z();
+ else
+ minAabbz += linMotion.z();
+
+
+ minAabb = btVector3(minAabbx,minAabby,minAabbz);
+ maxAabb = btVector3(maxAabbx,maxAabby,maxAabbz);
+ }
}
+
+
void CcdPhysicsEnvironment::removeCcdPhysicsController(CcdPhysicsController* ctrl)
{
//also remove constraint
-
- m_dynamicsWorld->removeRigidBody(ctrl->GetRigidBody());
+ btRigidBody* body = ctrl->GetRigidBody();
+ if (body)
+ {
+ m_dynamicsWorld->removeRigidBody(ctrl->GetRigidBody());
+ } else
+ {
+ //if a softbody
+ if (ctrl->GetSoftBody())
+ {
+ m_dynamicsWorld->removeSoftBody(ctrl->GetSoftBody());
+ } else
+ {
+ m_dynamicsWorld->removeCollisionObject(ctrl->GetCollisionObject());
+ }
+ }
m_controllers.erase(ctrl);
if (ctrl->m_registerCount != 0)
@@ -451,13 +489,20 @@ void CcdPhysicsEnvironment::updateCcdPhysicsController(CcdPhysicsController* ctr
// this function is used when the collisionning group of a controller is changed
// remove and add the collistioning object
btRigidBody* body = ctrl->GetRigidBody();
- btVector3 inertia;
-
- m_dynamicsWorld->removeCollisionObject(body);
- body->setCollisionFlags(newCollisionFlags);
- body->getCollisionShape()->calculateLocalInertia(newMass, inertia);
- body->setMassProps(newMass, inertia);
- m_dynamicsWorld->addCollisionObject(body, newCollisionGroup, newCollisionMask);
+ btCollisionObject* obj = ctrl->GetCollisionObject();
+ if (obj)
+ {
+ btVector3 inertia(0.0,0.0,0.0);
+ m_dynamicsWorld->removeCollisionObject(obj);
+ obj->setCollisionFlags(newCollisionFlags);
+ if (body)
+ {
+ if (newMass)
+ body->getCollisionShape()->calculateLocalInertia(newMass, inertia);
+ body->setMassProps(newMass, inertia);
+ }
+ m_dynamicsWorld->addCollisionObject(obj, newCollisionGroup, newCollisionMask);
+ }
// to avoid nasty interaction, we must update the property of the controller as well
ctrl->m_cci.m_mass = newMass;
ctrl->m_cci.m_collisionFilterGroup = newCollisionGroup;
@@ -469,9 +514,9 @@ void CcdPhysicsEnvironment::enableCcdPhysicsController(CcdPhysicsController* ctr
{
if (m_controllers.insert(ctrl).second)
{
- btRigidBody* body = ctrl->GetRigidBody();
- body->setUserPointer(ctrl);
- m_dynamicsWorld->addCollisionObject(body,
+ btCollisionObject* obj = ctrl->GetCollisionObject();
+ obj->setUserPointer(ctrl);
+ m_dynamicsWorld->addCollisionObject(obj,
ctrl->GetCollisionFilterGroup(), ctrl->GetCollisionFilterMask());
}
}
@@ -480,7 +525,19 @@ void CcdPhysicsEnvironment::disableCcdPhysicsController(CcdPhysicsController* ct
{
if (m_controllers.erase(ctrl))
{
- m_dynamicsWorld->removeRigidBody(ctrl->GetRigidBody());
+ btRigidBody* body = ctrl->GetRigidBody();
+ if (body)
+ {
+ m_dynamicsWorld->removeRigidBody(body);
+ } else
+ {
+ if (ctrl->GetSoftBody())
+ {
+ } else
+ {
+ m_dynamicsWorld->removeCollisionObject(body);
+ }
+ }
}
}
@@ -501,10 +558,18 @@ bool CcdPhysicsEnvironment::proceedDeltaTime(double curTime,float timeStep)
(*it)->SynchronizeMotionStates(timeStep);
}
+ processFhSprings(curTime,timeStep);
+
float subStep = timeStep / float(m_numTimeSubSteps);
for (i=0;i<m_numTimeSubSteps;i++)
{
- m_dynamicsWorld->stepSimulation(subStep,0);//perform always a full simulation step
+// m_dynamicsWorld->stepSimulation(subStep,20,1./240.);//perform always a full simulation step
+ m_dynamicsWorld->stepSimulation(subStep,0);//perform always a full simulation step
+ }
+
+ for (it=m_controllers.begin(); it!=m_controllers.end(); it++)
+ {
+ (*it)->SynchronizeMotionStates(timeStep);
}
for (it=m_controllers.begin(); it!=m_controllers.end(); it++)
@@ -518,11 +583,181 @@ bool CcdPhysicsEnvironment::proceedDeltaTime(double curTime,float timeStep)
veh->SyncWheels();
}
+ if (m_dynamicsWorld->getDebugDrawer() && m_dynamicsWorld->getDebugDrawer()->getDebugMode() >0)
+ m_dynamicsWorld->debugDrawWorld();
+
+
CallbackTriggers();
return true;
}
+class ClosestRayResultCallbackNotMe : public btCollisionWorld::ClosestRayResultCallback
+{
+ btCollisionObject* m_owner;
+ btCollisionObject* m_parent;
+
+public:
+ ClosestRayResultCallbackNotMe(const btVector3& rayFromWorld,const btVector3& rayToWorld,btCollisionObject* owner,btCollisionObject* parent)
+ :btCollisionWorld::ClosestRayResultCallback(rayFromWorld,rayToWorld),
+ m_owner(owner)
+ {
+
+ }
+
+ virtual bool needsCollision(btBroadphaseProxy* proxy0) const
+ {
+ //don't collide with self
+ if (proxy0->m_clientObject == m_owner)
+ return false;
+
+ if (proxy0->m_clientObject == m_parent)
+ return false;
+
+ return btCollisionWorld::ClosestRayResultCallback::needsCollision(proxy0);
+ }
+
+};
+
+void CcdPhysicsEnvironment::processFhSprings(double curTime,float timeStep)
+{
+ std::set<CcdPhysicsController*>::iterator it;
+
+ for (it=m_controllers.begin(); it!=m_controllers.end(); it++)
+ {
+ CcdPhysicsController* ctrl = (*it);
+ btRigidBody* body = ctrl->GetRigidBody();
+
+ if (body && (ctrl->getConstructionInfo().m_do_fh || ctrl->getConstructionInfo().m_do_rot_fh))
+ {
+ //printf("has Fh or RotFh\n");
+ //re-implement SM_FhObject.cpp using btCollisionWorld::rayTest and info from ctrl->getConstructionInfo()
+ //send a ray from {0.0, 0.0, 0.0} towards {0.0, 0.0, -10.0}, in local coordinates
+
+
+ CcdPhysicsController* parentCtrl = ctrl->getParentCtrl();
+ btRigidBody* parentBody = parentCtrl?parentCtrl->GetRigidBody() : 0;
+ btRigidBody* cl_object = parentBody ? parentBody : body;
+
+ if (body->isStaticOrKinematicObject())
+ continue;
+
+ btVector3 rayDirLocal(0,0,-10);
+
+ //m_dynamicsWorld
+ //ctrl->GetRigidBody();
+ btVector3 rayFromWorld = body->getCenterOfMassPosition();
+ //btVector3 rayToWorld = rayFromWorld + body->getCenterOfMassTransform().getBasis() * rayDirLocal;
+ //ray always points down the z axis in world space...
+ btVector3 rayToWorld = rayFromWorld + rayDirLocal;
+
+ ClosestRayResultCallbackNotMe resultCallback(rayFromWorld,rayToWorld,body,parentBody);
+
+ m_dynamicsWorld->rayTest(rayFromWorld,rayToWorld,resultCallback);
+ if (resultCallback.hasHit())
+ {
+ //we hit this one: resultCallback.m_collisionObject;
+ CcdPhysicsController* controller = static_cast<CcdPhysicsController*>(resultCallback.m_collisionObject->getUserPointer());
+
+ if (controller)
+ {
+ if (controller->getConstructionInfo().m_fh_distance < SIMD_EPSILON)
+ continue;
+
+ btRigidBody* hit_object = controller->GetRigidBody();
+ if (!hit_object)
+ continue;
+
+ CcdConstructionInfo& hitObjShapeProps = controller->getConstructionInfo();
+
+ float distance = resultCallback.m_closestHitFraction*rayDirLocal.length()-ctrl->getConstructionInfo().m_radius;
+ if (distance >= hitObjShapeProps.m_fh_distance)
+ continue;
+
+
+
+ //btVector3 ray_dir = cl_object->getCenterOfMassTransform().getBasis()* rayDirLocal.normalized();
+ btVector3 ray_dir = rayDirLocal.normalized();
+ btVector3 normal = resultCallback.m_hitNormalWorld;
+ normal.normalize();
+
+
+ if (ctrl->getConstructionInfo().m_do_fh)
+ {
+ btVector3 lspot = cl_object->getCenterOfMassPosition()
+ + rayDirLocal * resultCallback.m_closestHitFraction;
+
+
+
+
+ lspot -= hit_object->getCenterOfMassPosition();
+ btVector3 rel_vel = cl_object->getLinearVelocity() - hit_object->getVelocityInLocalPoint(lspot);
+ btScalar rel_vel_ray = ray_dir.dot(rel_vel);
+ btScalar spring_extent = 1.0 - distance / hitObjShapeProps.m_fh_distance;
+
+ btScalar i_spring = spring_extent * hitObjShapeProps.m_fh_spring;
+ btScalar i_damp = rel_vel_ray * hitObjShapeProps.m_fh_damping;
+
+ cl_object->setLinearVelocity(cl_object->getLinearVelocity() + (-(i_spring + i_damp) * ray_dir));
+ if (hitObjShapeProps.m_fh_normal)
+ {
+ cl_object->setLinearVelocity(cl_object->getLinearVelocity()+(i_spring + i_damp) *(normal - normal.dot(ray_dir) * ray_dir));
+ }
+
+ btVector3 lateral = rel_vel - rel_vel_ray * ray_dir;
+
+
+ if (ctrl->getConstructionInfo().m_do_anisotropic) {
+ //Bullet basis contains no scaling/shear etc.
+ const btMatrix3x3& lcs = cl_object->getCenterOfMassTransform().getBasis();
+ btVector3 loc_lateral = lateral * lcs;
+ const btVector3& friction_scaling = cl_object->getAnisotropicFriction();
+ loc_lateral *= friction_scaling;
+ lateral = lcs * loc_lateral;
+ }
+
+ btScalar rel_vel_lateral = lateral.length();
+
+ if (rel_vel_lateral > SIMD_EPSILON) {
+ btScalar friction_factor = hit_object->getFriction();//cl_object->getFriction();
+
+ btScalar max_friction = friction_factor * btMax(btScalar(0.0), i_spring);
+
+ btScalar rel_mom_lateral = rel_vel_lateral / cl_object->getInvMass();
+
+ btVector3 friction = (rel_mom_lateral > max_friction) ?
+ -lateral * (max_friction / rel_vel_lateral) :
+ -lateral;
+
+ cl_object->applyCentralImpulse(friction);
+ }
+ }
+
+
+ if (ctrl->getConstructionInfo().m_do_rot_fh) {
+ btVector3 up2 = cl_object->getWorldTransform().getBasis().getColumn(2);
+
+ btVector3 t_spring = up2.cross(normal) * hitObjShapeProps.m_fh_spring;
+ btVector3 ang_vel = cl_object->getAngularVelocity();
+
+ // only rotations that tilt relative to the normal are damped
+ ang_vel -= ang_vel.dot(normal) * normal;
+
+ btVector3 t_damp = ang_vel * hitObjShapeProps.m_fh_damping;
+
+ cl_object->setAngularVelocity(cl_object->getAngularVelocity() + (t_spring - t_damp));
+ }
+
+ }
+
+
+ }
+
+
+ }
+ }
+
+}
void CcdPhysicsEnvironment::setDebugMode(int debugMode)
{
@@ -578,7 +813,7 @@ void CcdPhysicsEnvironment::setSolverDamping(float damping)
void CcdPhysicsEnvironment::setLinearAirDamping(float damping)
{
- gLinearAirDamping = damping;
+ //gLinearAirDamping = damping;
}
void CcdPhysicsEnvironment::setUseEpa(bool epa)
@@ -597,7 +832,7 @@ void CcdPhysicsEnvironment::setSolverType(int solverType)
{
m_solver = new btSequentialImpulseConstraintSolver();
- ((btSequentialImpulseConstraintSolver*)m_solver)->setSolverMode(btSequentialImpulseConstraintSolver::SOLVER_USE_WARMSTARTING | btSequentialImpulseConstraintSolver::SOLVER_RANDMIZE_ORDER);
+// ((btSequentialImpulseConstraintSolver*)m_solver)->setSolverMode(btSequentialImpulseConstraintSolver::SOLVER_USE_WARMSTARTING | btSequentialImpulseConstraintSolver::SOLVER_RANDMIZE_ORDER);
break;
}
}
@@ -618,7 +853,13 @@ void CcdPhysicsEnvironment::setSolverType(int solverType)
-
+void CcdPhysicsEnvironment::getGravity(PHY__Vector3& grav)
+{
+ const btVector3& gravity = m_dynamicsWorld->getGravity();
+ grav[0] = gravity.getX();
+ grav[1] = gravity.getY();
+ grav[2] = gravity.getZ();
+}
void CcdPhysicsEnvironment::setGravity(float x,float y,float z)
@@ -659,9 +900,10 @@ int CcdPhysicsEnvironment::createUniversalD6Constraint(
{
+ bool useReferenceFrameA = true;
genericConstraint = new btGeneric6DofConstraint(
*rb0,*rb1,
- frameInA,frameInB);
+ frameInA,frameInB,useReferenceFrameA);
genericConstraint->setLinearLowerLimit(linearMinLimits);
genericConstraint->setLinearUpperLimit(linearMaxLimits);
genericConstraint->setAngularLowerLimit(angularMinLimits);
@@ -709,35 +951,54 @@ void CcdPhysicsEnvironment::removeConstraint(int constraintId)
struct FilterClosestRayResultCallback : public btCollisionWorld::ClosestRayResultCallback
{
- PHY_IPhysicsController* m_ignoreClient;
+ PHY_IRayCastFilterCallback& m_phyRayFilter;
+ const btCollisionShape* m_hitTriangleShape;
+ int m_hitTriangleIndex;
- FilterClosestRayResultCallback (PHY_IPhysicsController* ignoreClient,const btVector3& rayFrom,const btVector3& rayTo)
+ FilterClosestRayResultCallback (PHY_IRayCastFilterCallback& phyRayFilter,const btVector3& rayFrom,const btVector3& rayTo)
: btCollisionWorld::ClosestRayResultCallback(rayFrom,rayTo),
- m_ignoreClient(ignoreClient)
+ m_phyRayFilter(phyRayFilter),
+ m_hitTriangleShape(NULL),
+ m_hitTriangleIndex(0)
{
-
}
virtual ~FilterClosestRayResultCallback()
{
}
- virtual float AddSingleResult( btCollisionWorld::LocalRayResult& rayResult)
+ virtual bool needsCollision(btBroadphaseProxy* proxy0) const
+ {
+ if (!(proxy0->m_collisionFilterGroup & m_collisionFilterMask))
+ return false;
+ if (!(m_collisionFilterGroup & proxy0->m_collisionFilterMask))
+ return false;
+ btCollisionObject* object = (btCollisionObject*)proxy0->m_clientObject;
+ CcdPhysicsController* phyCtrl = static_cast<CcdPhysicsController*>(object->getUserPointer());
+ if (phyCtrl == m_phyRayFilter.m_ignoreController)
+ return false;
+ return m_phyRayFilter.needBroadphaseRayCast(phyCtrl);
+ }
+
+ virtual btScalar addSingleResult(btCollisionWorld::LocalRayResult& rayResult,bool normalInWorldSpace)
{
CcdPhysicsController* curHit = static_cast<CcdPhysicsController*>(rayResult.m_collisionObject->getUserPointer());
- //ignore client...
- if (curHit != m_ignoreClient)
- {
- //if valid
- return ClosestRayResultCallback::AddSingleResult(rayResult);
+ // save shape information as ClosestRayResultCallback::AddSingleResult() does not do it
+ if (rayResult.m_localShapeInfo)
+ {
+ m_hitTriangleShape = rayResult.m_collisionObject->getCollisionShape();
+ m_hitTriangleIndex = rayResult.m_localShapeInfo->m_triangleIndex;
+ } else
+ {
+ m_hitTriangleShape = NULL;
+ m_hitTriangleIndex = 0;
}
- return m_closestHitFraction;
+ return ClosestRayResultCallback::addSingleResult(rayResult,normalInWorldSpace);
}
};
-PHY_IPhysicsController* CcdPhysicsEnvironment::rayTest(PHY_IPhysicsController* ignoreClient, float fromX,float fromY,float fromZ, float toX,float toY,float toZ,
- float& hitX,float& hitY,float& hitZ,float& normalX,float& normalY,float& normalZ)
+PHY_IPhysicsController* CcdPhysicsEnvironment::rayTest(PHY_IRayCastFilterCallback &filterCallback, float fromX,float fromY,float fromZ, float toX,float toY,float toZ)
{
@@ -751,19 +1012,101 @@ PHY_IPhysicsController* CcdPhysicsEnvironment::rayTest(PHY_IPhysicsController* i
//Either Ray Cast with or without filtering
//btCollisionWorld::ClosestRayResultCallback rayCallback(rayFrom,rayTo);
- FilterClosestRayResultCallback rayCallback(ignoreClient,rayFrom,rayTo);
+ FilterClosestRayResultCallback rayCallback(filterCallback,rayFrom,rayTo);
+
+ PHY_RayCastResult result;
+ memset(&result, 0, sizeof(result));
- PHY_IPhysicsController* nearestHit = 0;
// don't collision with sensor object
- m_dynamicsWorld->rayTest(rayFrom,rayTo,rayCallback, CcdConstructionInfo::AllFilter ^ CcdConstructionInfo::SensorFilter);
- if (rayCallback.HasHit())
+ rayCallback.m_collisionFilterMask = CcdConstructionInfo::AllFilter ^ CcdConstructionInfo::SensorFilter;
+ //, ,filterCallback.m_faceNormal);
+
+ m_dynamicsWorld->rayTest(rayFrom,rayTo,rayCallback);
+ if (rayCallback.hasHit())
{
- nearestHit = static_cast<CcdPhysicsController*>(rayCallback.m_collisionObject->getUserPointer());
- hitX = rayCallback.m_hitPointWorld.getX();
- hitY = rayCallback.m_hitPointWorld.getY();
- hitZ = rayCallback.m_hitPointWorld.getZ();
+ CcdPhysicsController* controller = static_cast<CcdPhysicsController*>(rayCallback.m_collisionObject->getUserPointer());
+ result.m_controller = controller;
+ result.m_hitPoint[0] = rayCallback.m_hitPointWorld.getX();
+ result.m_hitPoint[1] = rayCallback.m_hitPointWorld.getY();
+ result.m_hitPoint[2] = rayCallback.m_hitPointWorld.getZ();
+
+ if (rayCallback.m_hitTriangleShape != NULL)
+ {
+ // identify the mesh polygon
+ CcdShapeConstructionInfo* shapeInfo = controller->m_shapeInfo;
+ if (shapeInfo)
+ {
+ btCollisionShape* shape = controller->GetCollisionObject()->getCollisionShape();
+ if (shape->isCompound())
+ {
+ btCompoundShape* compoundShape = (btCompoundShape*)shape;
+ CcdShapeConstructionInfo* compoundShapeInfo = shapeInfo;
+ // need to search which sub-shape has been hit
+ for (int i=0; i<compoundShape->getNumChildShapes(); i++)
+ {
+ shapeInfo = compoundShapeInfo->GetChildShape(i);
+ shape=compoundShape->getChildShape(i);
+ if (shape == rayCallback.m_hitTriangleShape)
+ break;
+ }
+ }
+ if (shape == rayCallback.m_hitTriangleShape &&
+ rayCallback.m_hitTriangleIndex < shapeInfo->m_polygonIndexArray.size())
+ {
+ result.m_meshObject = shapeInfo->GetMesh();
+ result.m_polygon = shapeInfo->m_polygonIndexArray.at(rayCallback.m_hitTriangleIndex);
+ // Bullet returns the normal from "outside".
+ // If the user requests the real normal, compute it now
+ if (filterCallback.m_faceNormal)
+ {
+ // mesh shapes are shared and stored in the shapeInfo
+ btTriangleMeshShape* triangleShape = shapeInfo->GetMeshShape();
+ if (triangleShape)
+ {
+ // this code is copied from Bullet
+ btVector3 triangle[3];
+ const unsigned char *vertexbase;
+ int numverts;
+ PHY_ScalarType type;
+ int stride;
+ const unsigned char *indexbase;
+ int indexstride;
+ int numfaces;
+ PHY_ScalarType indicestype;
+ btStridingMeshInterface* meshInterface = triangleShape->getMeshInterface();
+
+ meshInterface->getLockedReadOnlyVertexIndexBase(
+ &vertexbase,
+ numverts,
+ type,
+ stride,
+ &indexbase,
+ indexstride,
+ numfaces,
+ indicestype,
+ 0);
+
+ unsigned int* gfxbase = (unsigned int*)(indexbase+rayCallback.m_hitTriangleIndex*indexstride);
+ const btVector3& meshScaling = shape->getLocalScaling();
+ for (int j=2;j>=0;j--)
+ {
+ int graphicsindex = indicestype==PHY_SHORT?((unsigned short*)gfxbase)[j]:gfxbase[j];
+
+ btScalar* graphicsbase = (btScalar*)(vertexbase+graphicsindex*stride);
+
+ triangle[j] = btVector3(graphicsbase[0]*meshScaling.getX(),graphicsbase[1]*meshScaling.getY(),graphicsbase[2]*meshScaling.getZ());
+ }
+ meshInterface->unLockReadOnlyVertexBase(0);
+ btVector3 triangleNormal;
+ triangleNormal = (triangle[1]-triangle[0]).cross(triangle[2]-triangle[0]);
+ rayCallback.m_hitNormalWorld = rayCallback.m_collisionObject->getWorldTransform().getBasis()*triangleNormal;
+ }
+ }
+ }
+ }
+ }
if (rayCallback.m_hitNormalWorld.length2() > (SIMD_EPSILON*SIMD_EPSILON))
{
rayCallback.m_hitNormalWorld.normalize();
@@ -771,14 +1114,14 @@ PHY_IPhysicsController* CcdPhysicsEnvironment::rayTest(PHY_IPhysicsController* i
{
rayCallback.m_hitNormalWorld.setValue(1,0,0);
}
- normalX = rayCallback.m_hitNormalWorld.getX();
- normalY = rayCallback.m_hitNormalWorld.getY();
- normalZ = rayCallback.m_hitNormalWorld.getZ();
-
+ result.m_hitNormal[0] = rayCallback.m_hitNormalWorld.getX();
+ result.m_hitNormal[1] = rayCallback.m_hitNormalWorld.getY();
+ result.m_hitNormal[2] = rayCallback.m_hitNormalWorld.getZ();
+ filterCallback.reportHit(&result);
}
- return nearestHit;
+ return result.m_controller;
}
@@ -801,6 +1144,13 @@ btBroadphaseInterface* CcdPhysicsEnvironment::getBroadphase()
return m_dynamicsWorld->getBroadphase();
}
+btDispatcher* CcdPhysicsEnvironment::getDispatcher()
+{
+ return m_dynamicsWorld->getDispatcher();
+}
+
+
+
@@ -833,6 +1183,12 @@ CcdPhysicsEnvironment::~CcdPhysicsEnvironment()
if (NULL != m_filterCallback)
delete m_filterCallback;
+
+ if (NULL != m_collisionConfiguration)
+ delete m_collisionConfiguration;
+
+ if (NULL != m_broadphase)
+ delete m_broadphase;
}
@@ -845,7 +1201,7 @@ void CcdPhysicsEnvironment::setConstraintParam(int constraintId,int param,float
{
//param = 1..12, min0,max0,min1,max1...min6,max6
btGeneric6DofConstraint* genCons = (btGeneric6DofConstraint*)typedConstraint;
- genCons->SetLimit(param,value0,value1);
+ genCons->setLimit(param,value0,value1);
break;
};
default:
@@ -1108,6 +1464,26 @@ PHY_IPhysicsController* CcdPhysicsEnvironment::CreateSphereController(float radi
return sphereController;
}
+int findClosestNode(btSoftBody* sb,const btVector3& worldPoint);
+int findClosestNode(btSoftBody* sb,const btVector3& worldPoint)
+{
+ int node = -1;
+
+ btSoftBody::tNodeArray& nodes(sb->m_nodes);
+ float maxDistSqr = 1e30f;
+
+ for (int n=0;n<nodes.size();n++)
+ {
+ btScalar distSqr = (nodes[n].m_x - worldPoint).length2();
+ if (distSqr<maxDistSqr)
+ {
+ maxDistSqr = distSqr;
+ node = n;
+ }
+ }
+ return node;
+}
+
int CcdPhysicsEnvironment::createConstraint(class PHY_IPhysicsController* ctrl0,class PHY_IPhysicsController* ctrl1,PHY_ConstraintType type,
float pivotX,float pivotY,float pivotZ,
float axisX,float axisY,float axisZ,
@@ -1123,14 +1499,166 @@ int CcdPhysicsEnvironment::createConstraint(class PHY_IPhysicsController* ctrl
btRigidBody* rb0 = c0 ? c0->GetRigidBody() : 0;
btRigidBody* rb1 = c1 ? c1->GetRigidBody() : 0;
+
+
+
bool rb0static = rb0 ? rb0->isStaticOrKinematicObject() : true;
bool rb1static = rb1 ? rb1->isStaticOrKinematicObject() : true;
+
+ btCollisionObject* colObj0 = c0->GetCollisionObject();
+ if (!colObj0)
+ {
+ return 0;
+ }
+
+ btVector3 pivotInA(pivotX,pivotY,pivotZ);
+
+ //it might be a soft body, let's try
+ btSoftBody* sb0 = c0 ? c0->GetSoftBody() : 0;
+ btSoftBody* sb1 = c1 ? c1->GetSoftBody() : 0;
+ if (sb0 && sb1)
+ {
+ //not between two soft bodies?
+ return 0;
+ }
+
+ if (sb0)
+ {
+ //either cluster or node attach, let's find closest node first
+ //the soft body doesn't have a 'real' world transform, so get its initial world transform for now
+ btVector3 pivotPointSoftWorld = sb0->m_initialWorldTransform(pivotInA);
+ int node=findClosestNode(sb0,pivotPointSoftWorld);
+ if (node >=0)
+ {
+ bool clusterconstaint = false;
+/*
+ switch (type)
+ {
+ case PHY_LINEHINGE_CONSTRAINT:
+ {
+ if (sb0->clusterCount() && rb1)
+ {
+ btSoftBody::LJoint::Specs ls;
+ ls.erp=0.5f;
+ ls.position=sb0->clusterCom(0);
+ sb0->appendLinearJoint(ls,rb1);
+ clusterconstaint = true;
+ break;
+ }
+ }
+ case PHY_GENERIC_6DOF_CONSTRAINT:
+ {
+ if (sb0->clusterCount() && rb1)
+ {
+ btSoftBody::AJoint::Specs as;
+ as.erp = 1;
+ as.cfm = 1;
+ as.axis.setValue(axisX,axisY,axisZ);
+ sb0->appendAngularJoint(as,rb1);
+ clusterconstaint = true;
+ break;
+ }
+
+ break;
+ }
+ default:
+ {
+
+ }
+ };
+ */
+
+ if (!clusterconstaint)
+ {
+ if (rb1)
+ {
+ sb0->appendAnchor(node,rb1);
+ } else
+ {
+ sb0->setMass(node,0.f);
+ }
+ }
+
+
+ }
+ return 0;//can't remove soft body anchors yet
+ }
+
+ if (sb1)
+ {
+ btVector3 pivotPointAWorld = colObj0->getWorldTransform()(pivotInA);
+ int node=findClosestNode(sb1,pivotPointAWorld);
+ if (node >=0)
+ {
+ bool clusterconstaint = false;
+
+ /*
+ switch (type)
+ {
+ case PHY_LINEHINGE_CONSTRAINT:
+ {
+ if (sb1->clusterCount() && rb0)
+ {
+ btSoftBody::LJoint::Specs ls;
+ ls.erp=0.5f;
+ ls.position=sb1->clusterCom(0);
+ sb1->appendLinearJoint(ls,rb0);
+ clusterconstaint = true;
+ break;
+ }
+ }
+ case PHY_GENERIC_6DOF_CONSTRAINT:
+ {
+ if (sb1->clusterCount() && rb0)
+ {
+ btSoftBody::AJoint::Specs as;
+ as.erp = 1;
+ as.cfm = 1;
+ as.axis.setValue(axisX,axisY,axisZ);
+ sb1->appendAngularJoint(as,rb0);
+ clusterconstaint = true;
+ break;
+ }
+
+ break;
+ }
+ default:
+ {
+
+
+ }
+ };*/
+
+
+ if (!clusterconstaint)
+ {
+ if (rb0)
+ {
+ sb1->appendAnchor(node,rb0);
+ } else
+ {
+ sb1->setMass(node,0.f);
+ }
+ }
+
+
+ }
+ return 0;//can't remove soft body anchors yet
+ }
+
if (rb0static && rb1static)
+ {
+
return 0;
+ }
+
- btVector3 pivotInA(pivotX,pivotY,pivotZ);
+ if (!rb0)
+ return 0;
+
+
btVector3 pivotInB = rb1 ? rb1->getCenterOfMassTransform().inverse()(rb0->getCenterOfMassTransform()(pivotInA)) :
rb0->getCenterOfMassTransform() * pivotInA;
btVector3 axisInA(axisX,axisY,axisZ);
@@ -1191,10 +1719,11 @@ int CcdPhysicsEnvironment::createConstraint(class PHY_IPhysicsController* ctrl
btTransform globalFrameA = rb0->getCenterOfMassTransform() * frameInA;
frameInB = inv * globalFrameA;
-
+ bool useReferenceFrameA = true;
+
genericConstraint = new btGeneric6DofConstraint(
*rb0,*rb1,
- frameInA,frameInB);
+ frameInA,frameInB,useReferenceFrameA);
} else
@@ -1215,9 +1744,10 @@ int CcdPhysicsEnvironment::createConstraint(class PHY_IPhysicsController* ctrl
///frameInB in worldspace
frameInB = rb0->getCenterOfMassTransform() * frameInA;
+ bool useReferenceFrameA = true;
genericConstraint = new btGeneric6DofConstraint(
*rb0,s_fixedObject2,
- frameInA,frameInB);
+ frameInA,frameInB,useReferenceFrameA);
}
if (genericConstraint)
@@ -1370,8 +1900,9 @@ int CcdPhysicsEnvironment::createConstraint(class PHY_IPhysicsController* ctrl
PHY_IPhysicsController* CcdPhysicsEnvironment::CreateConeController(float coneradius,float coneheight)
{
CcdConstructionInfo cinfo;
- //This is a memory leak: Bullet does not delete the shape and it cannot be added to
- //the KX_Scene.m_shapes list -- too bad but that's not a lot of data
+
+ // we don't need a CcdShapeConstructionInfo for this shape:
+ // it is simple enough for the standard copy constructor (see CcdPhysicsController::GetReplica)
cinfo.m_collisionShape = new btConeShape(coneradius,coneheight);
cinfo.m_MotionState = 0;
cinfo.m_physicsEnv = this;
diff --git a/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.h b/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.h
index 825a5e525f2..3d9d5442b8f 100644
--- a/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.h
+++ b/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.h
@@ -56,6 +56,10 @@ class CcdPhysicsEnvironment : public PHY_IPhysicsEnvironment
protected:
btIDebugDraw* m_debugDrawer;
+
+ class btDefaultCollisionConfiguration* m_collisionConfiguration;
+ class btBroadphaseInterface* m_broadphase;
+
//solver iterations
int m_numIterations;
@@ -70,6 +74,7 @@ protected:
btContactSolverInfo m_solverInfo;
+ void processFhSprings(double curTime,float timeStep);
public:
CcdPhysicsEnvironment(btDispatcher* dispatcher=0, btOverlappingPairCache* pairCache=0);
@@ -115,6 +120,8 @@ protected:
virtual void setDebugMode(int debugMode);
virtual void setGravity(float x,float y,float z);
+ virtual void getGravity(PHY__Vector3& grav);
+
virtual int createConstraint(class PHY_IPhysicsController* ctrl,class PHY_IPhysicsController* ctrl2,PHY_ConstraintType type,
float pivotX,float pivotY,float pivotZ,
@@ -157,8 +164,7 @@ protected:
btTypedConstraint* getConstraintById(int constraintId);
- virtual PHY_IPhysicsController* rayTest(PHY_IPhysicsController* ignoreClient, float fromX,float fromY,float fromZ, float toX,float toY,float toZ,
- float& hitX,float& hitY,float& hitZ,float& normalX,float& normalY,float& normalZ);
+ virtual PHY_IPhysicsController* rayTest(PHY_IRayCastFilterCallback &filterCallback, float fromX,float fromY,float fromZ, float toX,float toY,float toZ);
//Methods for gamelogic collision/physics callbacks
@@ -192,8 +198,7 @@ protected:
btBroadphaseInterface* getBroadphase();
-
-
+ btDispatcher* getDispatcher();
bool IsSatCollisionDetectionEnabled() const
@@ -212,7 +217,10 @@ protected:
void SyncMotionStates(float timeStep);
-
+ class btSoftRigidDynamicsWorld* getDynamicsWorld()
+ {
+ return m_dynamicsWorld;
+ }
class btConstraintSolver* GetConstraintSolver();
@@ -230,13 +238,13 @@ protected:
std::vector<WrapperVehicle*> m_wrapperVehicles;
- //use explicit btDiscreteDynamicsWorld* so that we have access to
+ //use explicit btSoftRigidDynamicsWorld/btDiscreteDynamicsWorld* so that we have access to
//btDiscreteDynamicsWorld::addRigidBody(body,filter,group)
//so that we can set the body collision filter/group at the time of creation
//and not afterwards (breaks the collision system for radar/near sensor)
//Ideally we would like to have access to this function from the btDynamicsWorld interface
//class btDynamicsWorld* m_dynamicsWorld;
- class btDiscreteDynamicsWorld* m_dynamicsWorld;
+ class btSoftRigidDynamicsWorld* m_dynamicsWorld;
class btConstraintSolver* m_solver;
diff --git a/source/gameengine/Physics/Bullet/Makefile b/source/gameengine/Physics/Bullet/Makefile
index 49259d0a67c..d5570e75833 100644
--- a/source/gameengine/Physics/Bullet/Makefile
+++ b/source/gameengine/Physics/Bullet/Makefile
@@ -37,5 +37,10 @@ CCFLAGS += $(LEVEL_1_CPP_WARNINGS)
CPPFLAGS += -I$(NAN_BULLET2)/include
CPPFLAGS += -I$(NAN_GUARDEDALLOC)/include
+CPPFLAGS += -I$(NAN_STRING)/include
+CPPFLAGS += -I$(NAN_MOTO)/include
+CPPFLAGS += -I../../../kernel/gen_system
CPPFLAGS += -I../../Physics/common
CPPFLAGS += -I../../Physics/Dummy
+CPPFLAGS += -I../../Rasterizer
+
diff --git a/source/gameengine/Physics/Bullet/SConscript b/source/gameengine/Physics/Bullet/SConscript
index dd6eab0f018..0936d45197a 100644
--- a/source/gameengine/Physics/Bullet/SConscript
+++ b/source/gameengine/Physics/Bullet/SConscript
@@ -3,7 +3,7 @@ Import ('env')
sources = 'CcdPhysicsEnvironment.cpp CcdPhysicsController.cpp'
-incs = '. ../common'
+incs = '. ../common #source/kernel/gen_system #intern/string #intern/moto/include #source/gameengine/Rasterizer'
incs += ' ' + env['BF_BULLET_INC']
diff --git a/source/gameengine/Physics/Dummy/DummyPhysicsEnvironment.cpp b/source/gameengine/Physics/Dummy/DummyPhysicsEnvironment.cpp
index f512d44c9f2..d78958b746c 100644
--- a/source/gameengine/Physics/Dummy/DummyPhysicsEnvironment.cpp
+++ b/source/gameengine/Physics/Dummy/DummyPhysicsEnvironment.cpp
@@ -109,8 +109,7 @@ void DummyPhysicsEnvironment::removeConstraint(int constraintid)
}
}
-PHY_IPhysicsController* DummyPhysicsEnvironment::rayTest(PHY_IPhysicsController* ignoreClient,float fromX,float fromY,float fromZ, float toX,float toY,float toZ,
- float& hitX,float& hitY,float& hitZ,float& normalX,float& normalY,float& normalZ)
+PHY_IPhysicsController* DummyPhysicsEnvironment::rayTest(PHY_IRayCastFilterCallback &filterCallback,float fromX,float fromY,float fromZ, float toX,float toY,float toZ)
{
//collision detection / raytesting
return NULL;
diff --git a/source/gameengine/Physics/Dummy/DummyPhysicsEnvironment.h b/source/gameengine/Physics/Dummy/DummyPhysicsEnvironment.h
index b5a61f72e4a..975be84f2a7 100644
--- a/source/gameengine/Physics/Dummy/DummyPhysicsEnvironment.h
+++ b/source/gameengine/Physics/Dummy/DummyPhysicsEnvironment.h
@@ -69,8 +69,7 @@ public:
return 0;
}
- virtual PHY_IPhysicsController* rayTest(PHY_IPhysicsController* ignoreClient, float fromX,float fromY,float fromZ, float toX,float toY,float toZ,
- float& hitX,float& hitY,float& hitZ,float& normalX,float& normalY,float& normalZ);
+ virtual PHY_IPhysicsController* rayTest(PHY_IRayCastFilterCallback &filterCallback, float fromX,float fromY,float fromZ, float toX,float toY,float toZ);
//gamelogic callbacks
diff --git a/source/gameengine/Physics/Sumo/SumoPhysicsController.h b/source/gameengine/Physics/Sumo/SumoPhysicsController.h
index 95f01b45f2b..d8ee54935d7 100644
--- a/source/gameengine/Physics/Sumo/SumoPhysicsController.h
+++ b/source/gameengine/Physics/Sumo/SumoPhysicsController.h
@@ -120,6 +120,7 @@ public:
virtual void SetMargin(float margin) ;
virtual float GetMargin() const;
virtual float GetRadius() const ;
+ virtual void SetRadius(float margin) { SetMargin(margin); }
// clientinfo for raycasts for example
diff --git a/source/gameengine/Physics/Sumo/SumoPhysicsEnvironment.cpp b/source/gameengine/Physics/Sumo/SumoPhysicsEnvironment.cpp
index 65018d2523e..80e4dc4044e 100644
--- a/source/gameengine/Physics/Sumo/SumoPhysicsEnvironment.cpp
+++ b/source/gameengine/Physics/Sumo/SumoPhysicsEnvironment.cpp
@@ -26,6 +26,7 @@
*
* ***** END GPL LICENSE BLOCK *****
*/
+#include <string.h> // memset
#include "SumoPhysicsEnvironment.h"
#include "PHY_IMotionState.h"
#include "SumoPhysicsController.h"
@@ -125,37 +126,35 @@ void SumoPhysicsEnvironment::removeConstraint(int constraintid)
}
}
-PHY_IPhysicsController* SumoPhysicsEnvironment::rayTest(PHY_IPhysicsController* ignoreClientCtrl,
+PHY_IPhysicsController* SumoPhysicsEnvironment::rayTest(PHY_IRayCastFilterCallback &filterCallback,
float fromX,float fromY,float fromZ,
- float toX,float toY,float toZ,
- float& hitX,float& hitY,float& hitZ,
- float& normalX,float& normalY,float& normalZ)
+ float toX,float toY,float toZ)
{
- SumoPhysicsController* ignoreCtr = static_cast<SumoPhysicsController*> (ignoreClientCtrl);
+ SumoPhysicsController* ignoreCtr = static_cast<SumoPhysicsController*> (filterCallback.m_ignoreController);
//collision detection / raytesting
MT_Point3 hit, normal;
- PHY_IPhysicsController *ret = 0;
+ PHY_RayCastResult result;
SM_Object* sm_ignore = 0;
if (ignoreCtr)
sm_ignore = ignoreCtr->GetSumoObject();
+ memset(&result, 0, sizeof(result));
SM_Object* smOb = m_sumoScene->rayTest(sm_ignore,MT_Point3(fromX, fromY, fromZ),MT_Point3(toX, toY, toZ), hit, normal);
if (smOb)
{
- ret = (PHY_IPhysicsController *) smOb->getPhysicsClientObject();
+ result.m_controller = (PHY_IPhysicsController *) smOb->getPhysicsClientObject();
+ result.m_hitPoint[0] = hit[0];
+ result.m_hitPoint[1] = hit[1];
+ result.m_hitPoint[2] = hit[2];
+ result.m_hitNormal[0] = normal[0];
+ result.m_hitNormal[1] = normal[1];
+ result.m_hitNormal[2] = normal[2];
+ filterCallback.reportHit(&result);
}
- hitX = hit[0];
- hitY = hit[1];
- hitZ = hit[2];
-
- normalX = normal[0];
- normalY = normal[1];
- normalZ = normal[2];
-
- return ret;
+ return result.m_controller;
}
//gamelogic callbacks
void SumoPhysicsEnvironment::addSensor(PHY_IPhysicsController* ctrl)
diff --git a/source/gameengine/Physics/Sumo/SumoPhysicsEnvironment.h b/source/gameengine/Physics/Sumo/SumoPhysicsEnvironment.h
index 8b9fb463034..100adf969d5 100644
--- a/source/gameengine/Physics/Sumo/SumoPhysicsEnvironment.h
+++ b/source/gameengine/Physics/Sumo/SumoPhysicsEnvironment.h
@@ -75,8 +75,7 @@ public:
return 0;
}
- virtual PHY_IPhysicsController* rayTest(PHY_IPhysicsController* ignoreClient,float fromX,float fromY,float fromZ, float toX,float toY,float toZ,
- float& hitX,float& hitY,float& hitZ,float& normalX,float& normalY,float& normalZ);
+ virtual PHY_IPhysicsController* rayTest(PHY_IRayCastFilterCallback &filterCallback,float fromX,float fromY,float fromZ, float toX,float toY,float toZ);
//gamelogic callbacks
diff --git a/source/gameengine/Physics/common/PHY_DynamicTypes.h b/source/gameengine/Physics/common/PHY_DynamicTypes.h
index c289b9d8bcb..3b3e42c38d2 100644
--- a/source/gameengine/Physics/common/PHY_DynamicTypes.h
+++ b/source/gameengine/Physics/common/PHY_DynamicTypes.h
@@ -87,6 +87,18 @@ typedef enum PHY_ConstraintType {
} PHY_ConstraintType;
+typedef enum PHY_ShapeType {
+ PHY_SHAPE_NONE,
+ PHY_SHAPE_BOX,
+ PHY_SHAPE_SPHERE,
+ PHY_SHAPE_CYLINDER,
+ PHY_SHAPE_CONE,
+ PHY_SHAPE_MESH,
+ PHY_SHAPE_POLYTOPE,
+ PHY_SHAPE_COMPOUND
+} PHY_ShapeType;
+
+
typedef float PHY_Vector3[3];
#endif //__PHY_DYNAMIC_TYPES
diff --git a/source/gameengine/Physics/common/PHY_IPhysicsController.h b/source/gameengine/Physics/common/PHY_IPhysicsController.h
index ca8edea114a..884e14cfb5a 100644
--- a/source/gameengine/Physics/common/PHY_IPhysicsController.h
+++ b/source/gameengine/Physics/common/PHY_IPhysicsController.h
@@ -90,7 +90,8 @@ class PHY_IPhysicsController
virtual void calcXform() =0;
virtual void SetMargin(float margin) =0;
virtual float GetMargin() const=0;
- virtual float GetRadius() const { return 0.f;}
+ virtual float GetRadius() const=0;
+ virtual void SetRadius(float margin) = 0;
PHY__Vector3 GetWorldPosition(PHY__Vector3& localpos);
};
diff --git a/source/gameengine/Physics/common/PHY_IPhysicsEnvironment.h b/source/gameengine/Physics/common/PHY_IPhysicsEnvironment.h
index 5b275066665..98496fb7f9e 100644
--- a/source/gameengine/Physics/common/PHY_IPhysicsEnvironment.h
+++ b/source/gameengine/Physics/common/PHY_IPhysicsEnvironment.h
@@ -33,6 +33,50 @@
#include <vector>
#include "PHY_DynamicTypes.h"
class PHY_IVehicle;
+class RAS_MeshObject;
+class PHY_IPhysicsController;
+
+/**
+ * pass back information from rayTest
+ */
+struct PHY_RayCastResult
+{
+ PHY_IPhysicsController* m_controller;
+ PHY__Vector3 m_hitPoint;
+ PHY__Vector3 m_hitNormal;
+ const RAS_MeshObject* m_meshObject; // !=NULL for mesh object (only for Bullet controllers)
+ int m_polygon; // index of the polygon hit by the ray,
+ // only if m_meshObject != NULL
+};
+
+/**
+ * This class replaces the ignoreController parameter of rayTest function.
+ * It allows more sophisticated filtering on the physics controller before computing the ray intersection to save CPU.
+ * It is only used to its full extend by the Ccd physics environement (Bullet).
+ */
+class PHY_IRayCastFilterCallback
+{
+public:
+ PHY_IPhysicsController* m_ignoreController;
+ bool m_faceNormal;
+
+ virtual ~PHY_IRayCastFilterCallback()
+ {
+ }
+
+ virtual bool needBroadphaseRayCast(PHY_IPhysicsController* controller)
+ {
+ return true;
+ }
+
+ virtual void reportHit(PHY_RayCastResult* result) = 0;
+
+ PHY_IRayCastFilterCallback(PHY_IPhysicsController* ignoreController, bool faceNormal=false)
+ :m_ignoreController(ignoreController),
+ m_faceNormal(faceNormal)
+ {
+ }
+};
/**
* Physics Environment takes care of stepping the simulation and is a container for physics entities (rigidbodies,constraints, materials etc.)
@@ -94,8 +138,7 @@ class PHY_IPhysicsEnvironment
//complex constraint for vehicles
virtual PHY_IVehicle* getVehicleConstraint(int constraintId) =0;
- virtual PHY_IPhysicsController* rayTest(PHY_IPhysicsController* ignoreClient, float fromX,float fromY,float fromZ, float toX,float toY,float toZ,
- float& hitX,float& hitY,float& hitZ,float& normalX,float& normalY,float& normalZ)=0;
+ virtual PHY_IPhysicsController* rayTest(PHY_IRayCastFilterCallback &filterCallback, float fromX,float fromY,float fromZ, float toX,float toY,float toZ)=0;
//Methods for gamelogic collision/physics callbacks
diff --git a/source/gameengine/PyDoc/BL_ActionActuator.py b/source/gameengine/PyDoc/BL_ActionActuator.py
index d56888cde80..b68d3014115 100644
--- a/source/gameengine/PyDoc/BL_ActionActuator.py
+++ b/source/gameengine/PyDoc/BL_ActionActuator.py
@@ -164,5 +164,14 @@ class BL_ActionActuator(SCA_IActuator):
@param mode: True for armature/world space, False for bone space
@type mode: boolean
"""
-
-
+ def setFrameProperty(prop):
+ """
+ @param prop: A string specifying the property of the object that will be updated with the action frame number.
+ @type prop: string
+ """
+ def getFrameProperty():
+ """
+ Returns the name of the property that is set to the current frame number.
+
+ @rtype: string
+ """
diff --git a/source/gameengine/PyDoc/BL_ShapeActionActuator.py b/source/gameengine/PyDoc/BL_ShapeActionActuator.py
index 63cce253fa4..a26b276a2da 100644
--- a/source/gameengine/PyDoc/BL_ShapeActionActuator.py
+++ b/source/gameengine/PyDoc/BL_ShapeActionActuator.py
@@ -154,5 +154,14 @@ class BL_ShapeActionActuator(SCA_IActuator):
@rtype: string
"""
-
-
+ def setFrameProperty(prop):
+ """
+ @param prop: A string specifying the property of the object that will be updated with the action frame number.
+ @type prop: string
+ """
+ def getFrameProperty():
+ """
+ Returns the name of the property that is set to the current frame number.
+
+ @rtype: string
+ """
diff --git a/source/gameengine/PyDoc/GameKeys.py b/source/gameengine/PyDoc/GameKeys.py
index 268fb9cc172..1a0a737718e 100644
--- a/source/gameengine/PyDoc/GameKeys.py
+++ b/source/gameengine/PyDoc/GameKeys.py
@@ -164,3 +164,12 @@ Example::
# Activate Right!
"""
+
+def EventToString(event):
+ """
+ Return the string name of a key event. Will raise a ValueError error if its invalid.
+
+ @type event: int
+ @param event: key event from GameKeys or the keyboard sensor.
+ @rtype: string
+ """
diff --git a/source/gameengine/PyDoc/GameLogic.py b/source/gameengine/PyDoc/GameLogic.py
index 965c0522bd7..af3d2810553 100644
--- a/source/gameengine/PyDoc/GameLogic.py
+++ b/source/gameengine/PyDoc/GameLogic.py
@@ -14,8 +14,7 @@ Documentation for the GameLogic Module.
Examples::
# To get a controller:
- import GameLogic
- co = GameLogic.getCurrentController()
+ co = GameLogic.getCurrentController() # GameLogic is automatically imported
# To get the game object associated with this controller:
obj = co.getOwner()
@@ -42,6 +41,7 @@ Documentation for the GameLogic Module.
- L{SCA_MouseSensor}
- L{SCA_PropertySensor}
- L{SCA_RandomSensor}
+ - L{SCA_DelaySensor}
You can also access actuators linked to the controller::
# To get an actuator attached to the controller:
@@ -220,6 +220,13 @@ def setPhysicsTicRate(ticrate):
@param ticrate: The new update frequency (in Hz).
@type ticrate: float
"""
+def getAverageFrameRate():
+ """
+ Gets the estimated average framerate
+
+ @return: The estimed average framerate in frames per second
+ @rtype: float
+ """
def expandPath(path):
"""
@@ -236,3 +243,13 @@ def expandPath(path):
@return: The converted string
@rtype: string
"""
+
+def getBlendFileList(path = "//"):
+ """
+ Returns a list of blend files in the same directory as the open blend file, or from using the option argument.
+
+ @param path: Optional directory argument, will be expanded (like expandPath) into the full path.
+ @type path: string
+ @return: A list of filenames, with no directory prefix
+ @rtype: list
+ """
diff --git a/source/gameengine/PyDoc/KX_GameObject.py b/source/gameengine/PyDoc/KX_GameObject.py
index a5ba5b1d634..ff9b4ffc95b 100644
--- a/source/gameengine/PyDoc/KX_GameObject.py
+++ b/source/gameengine/PyDoc/KX_GameObject.py
@@ -30,11 +30,11 @@ class KX_GameObject:
Delete this object, can be used inpace of the EndObject Actuator.
The actual removal of the object from the scene is delayed.
"""
- def getVisible(visible):
+ def getVisible():
"""
Gets the game object's visible flag.
- @type visible: boolean
+ @rtype: boolean
"""
def setVisible(visible):
"""
@@ -49,16 +49,25 @@ class KX_GameObject:
@rtype: int
@return: the objects state.
"""
- def setState():
+ def setState(state):
"""
- Sets the game object's visible flag.
+ Sets the game object's state flag.
The bitmasks for states from 1 to 30 can be set with (1<<0, 1<<1, 1<<2 ... 1<<29)
- @type visible: boolean
+ @type state: integer
"""
def setPosition(pos):
"""
- Sets the game object's position.
+ Sets the game object's position.
+ Global coordinates for root object, local for child objects.
+
+
+ @type pos: [x, y, z]
+ @param pos: the new position, in local coordinates.
+ """
+ def setWorldPosition(pos):
+ """
+ Sets the game object's position in world coordinates regardless if the object is root or child.
@type pos: [x, y, z]
@param pos: the new position, in world coordinates.
@@ -135,6 +144,26 @@ class KX_GameObject:
@param local: - False: you get the "global" velocity ie: relative to world orientation (default).
- True: you get the "local" velocity ie: relative to object orientation.
"""
+ def getAngularVelocity(local = 0):
+ """
+ Gets the game object's angular velocity.
+
+ @type local: boolean
+ @param local: - False: you get the "global" velocity ie: relative to world orientation (default).
+ - True: you get the "local" velocity ie: relative to object orientation.
+ @rtype: list [vx, vy, vz]
+ @return: the object's angular velocity.
+ """
+ def setAngularVelocity(velocity, local = 0):
+ """
+ Sets the game object's angular velocity.
+
+ @type velocity: 3d vector.
+ @param velocity: angular velocity vector.
+ @type local: boolean
+ @param local: - False: you get the "global" velocity ie: relative to world orientation (default).
+ - True: you get the "local" velocity ie: relative to object orientation.
+ """
def getVelocity(point):
"""
Gets the game object's velocity at the specified point.
@@ -280,11 +309,13 @@ class KX_GameObject:
@rtype: L{KX_GameObject}
@return: the first object hit or None if no object or object does not match prop
"""
- def rayCast(to,from,dist,prop):
+ def rayCast(objto,objfrom,dist,prop,face,xray,poly):
"""
Look from a point/object to another point/object and find first object hit within dist that matches prop.
- Returns a 3-tuple with object reference, hit point and hit normal or (None,None,None) if no hit.
- Ex:
+ if poly is 0, returns a 3-tuple with object reference, hit point and hit normal or (None,None,None) if no hit.
+ if poly is 1, returns a 4-tuple with in addition a L{KX_PolyProxy} as 4th element.
+
+ Ex::
# shoot along the axis gun-gunAim (gunAim should be collision-free)
ob,point,normal = gun.rayCast(gunAim,None,50)
if ob:
@@ -292,21 +323,42 @@ class KX_GameObject:
Notes:
The ray ignores the object on which the method is called.
- If is casted from/to object center or explicit [x,y,z] points.
- The ray does not have X-Ray capability: the first object hit (other than self object) stops the ray
- If a property was specified and the first object hit does not have that property, there is no hit
- The ray ignores collision-free objects and faces that dont have the collision flag enabled, you can however use ghost objects.
+ It is casted from/to object center or explicit [x,y,z] points.
+
+ The face paremeter determines the orientation of the normal::
+ 0 => hit normal is always oriented towards the ray origin (as if you casted the ray from outside)
+ 1 => hit normal is the real face normal (only for mesh object, otherwise face has no effect)
+
+ The ray has X-Ray capability if xray parameter is 1, otherwise the first object hit (other than self object) stops the ray.
+ The prop and xray parameters interact as follow::
+ prop off, xray off: return closest hit or no hit if there is no object on the full extend of the ray.
+ prop off, xray on : idem.
+ prop on, xray off: return closest hit if it matches prop, no hit otherwise.
+ prop on, xray on : return closest hit matching prop or no hit if there is no object matching prop on the full extend of the ray.
+ The L{KX_PolyProxy} 4th element of the return tuple when poly=1 allows to retrieve information on the polygon hit by the ray.
+ If there is no hit or the hit object is not a static mesh, None is returned as 4th element.
+
+ The ray ignores collision-free objects and faces that dont have the collision flag enabled, you can however use ghost objects.
- @param to: [x,y,z] or object to which the ray is casted
- @type to: L{KX_GameObject} or 3-tuple
- @param from: [x,y,z] or object from which the ray is casted; None or omitted => use self object center
- @type from: L{KX_GameObject} or 3-tuple or None
+ @param objto: [x,y,z] or object to which the ray is casted
+ @type objto: L{KX_GameObject} or 3-tuple
+ @param objfrom: [x,y,z] or object from which the ray is casted; None or omitted => use self object center
+ @type objfrom: L{KX_GameObject} or 3-tuple or None
@param dist: max distance to look (can be negative => look behind); 0 or omitted => detect up to to
@type dist: float
@param prop: property name that object must have; can be omitted => detect any object
@type prop: string
- @rtype: 3-tuple (L{KX_GameObject}, 3-tuple (x,y,z), 3-tuple (nx,ny,nz))
- @return: (object,hitpoint,hitnormal) or (None,None,None)
+ @param face: normal option: 1=>return face normal; 0 or omitted => normal is oriented towards origin
+ @type face: int
+ @param xray: X-ray option: 1=>skip objects that don't match prop; 0 or omitted => stop on first object
+ @type xray: int
+ @param poly: polygon option: 1=>return value is a 4-tuple and the 4th element is a L{KX_PolyProxy}
+ @type poly: int
+ @rtype: 3-tuple (L{KX_GameObject}, 3-tuple (x,y,z), 3-tuple (nx,ny,nz))
+ or 4-tuple (L{KX_GameObject}, 3-tuple (x,y,z), 3-tuple (nx,ny,nz), L{KX_PolyProxy})
+ @return: (object,hitpoint,hitnormal) or (object,hitpoint,hitnormal,polygon)
+ If no hit, returns (None,None,None) or (None,None,None,None)
+ If the object hit is not a static mesh, polygon is None
"""
diff --git a/source/gameengine/PyDoc/KX_MeshProxy.py b/source/gameengine/PyDoc/KX_MeshProxy.py
index e43fa3598f0..03bc36b6ac1 100644
--- a/source/gameengine/PyDoc/KX_MeshProxy.py
+++ b/source/gameengine/PyDoc/KX_MeshProxy.py
@@ -95,6 +95,21 @@ class KX_MeshProxy:
@rtype: L{KX_VertexProxy}
@return: a vertex object.
"""
+ def getNumPolygons():
+ """
+ Returns the number of polygon in the mesh.
+
+ @rtype: integer
+ """
+ def getPolygon(index):
+ """
+ Gets the specified polygon from the mesh.
+
+ @type index: integer
+ @param index: polygon number
+ @rtype: L{KX_PolyProxy}
+ @return: a polygon object.
+ """
def reinstancePhysicsMesh():
"""
Updates the physics system with the changed mesh.
diff --git a/source/gameengine/PyDoc/KX_ObjectActuator.py b/source/gameengine/PyDoc/KX_ObjectActuator.py
index db577d21e6f..b7b76473292 100644
--- a/source/gameengine/PyDoc/KX_ObjectActuator.py
+++ b/source/gameengine/PyDoc/KX_ObjectActuator.py
@@ -111,9 +111,7 @@ class KX_ObjectActuator(SCA_IActuator):
For the servo control actuator, this is the target speed.
@rtype: list [vx, vy, vz, local]
- @return: A four item list, containing the vector velocity, and whether
- the velocity is applied in local coordinates (True) or world
- coordinates (False)
+ @return: A four item list, containing the vector velocity, and whether the velocity is applied in local coordinates (True) or world coordinates (False)
"""
def setLinearVelocity(vx, vy, vz, local):
"""
diff --git a/source/gameengine/PyDoc/KX_PolyProxy.py b/source/gameengine/PyDoc/KX_PolyProxy.py
new file mode 100644
index 00000000000..bcd42c2ac2e
--- /dev/null
+++ b/source/gameengine/PyDoc/KX_PolyProxy.py
@@ -0,0 +1,100 @@
+# $Id$
+# Documentation for the polygon proxy class
+
+class KX_PolyProxy:
+ """
+ A polygon holds the index of the vertex forming the poylgon.
+
+ Note:
+ The polygon attributes are read-only, you need to retrieve the vertex proxy if you want
+ to change the vertex settings.
+
+ @ivar matname: The name of polygon material, empty if no material.
+ @type matname: string
+ @ivar material: The material of the polygon
+ @type material: L{KX_PolygonMaterial} or KX_BlenderMaterial
+ @ivar texture: The texture name of the polygon.
+ @type texture: string
+ @ivar matid: The material index of the polygon, use this to retrieve vertex proxy from mesh proxy
+ @type matid: integer
+ @ivar v1: vertex index of the first vertex of the polygon, use this to retrieve vertex proxy from mesh proxy
+ @type v1: integer
+ @ivar v2: vertex index of the second vertex of the polygon, use this to retrieve vertex proxy from mesh proxy
+ @type v2: integer
+ @ivar v3: vertex index of the third vertex of the polygon, use this to retrieve vertex proxy from mesh proxy
+ @type v3: integer
+ @ivar v4: vertex index of the fourth vertex of the polygon, 0 if polygon has only 3 vertex
+ use this to retrieve vertex proxy from mesh proxy
+ @type v4: integer
+ @ivar visible: visible state of the polygon: 1=visible, 0=invisible
+ @type visible: integer
+ @ivar collide: collide state of the polygon: 1=receives collision, 0=collision free.
+ @type collide: integer
+ """
+
+ def getMaterialName():
+ """
+ Returns the polygon material name with MA prefix
+
+ @rtype: string
+ @return: material name
+ """
+ def getMaterial():
+ """
+ Returns the polygon material
+
+ @rtype: L{KX_PolygonMaterial} or KX_BlenderMaterial
+ """
+ def getTextureName():
+ """
+ Returns the polygon texture name
+
+ @rtype: string
+ @return: texture name
+ """
+ def getMaterialIndex():
+ """
+ Returns the material bucket index of the polygon.
+ This index and the ones returned by getVertexIndex() are needed to retrieve the vertex proxy from L{KX_MeshProxy}.
+
+ @rtype: integer
+ @return: the material index in the mesh
+ """
+ def getNumVertex():
+ """
+ Returns the number of vertex of the polygon.
+
+ @rtype: integer
+ @return: number of vertex, 3 or 4.
+ """
+ def isVisible():
+ """
+ Returns whether the polygon is visible or not
+
+ @rtype: integer
+ @return: 0=invisible, 1=visible
+ """
+ def isCollider():
+ """
+ Returns whether the polygon is receives collision or not
+
+ @rtype: integer
+ @return: 0=collision free, 1=receives collision
+ """
+ def getVertexIndex(vertex):
+ """
+ Returns the mesh vertex index of a polygon vertex
+ This index and the one returned by getMaterialIndex() are needed to retrieve the vertex proxy from L{KX_MeshProxy}.
+
+ @type vertex: integer
+ @param vertex: index of the vertex in the polygon: 0->3
+ @rtype: integer
+ @return: mesh vertex index
+ """
+ def getMesh():
+ """
+ Returns a mesh proxy
+
+ @rtype: L{KX_MeshProxy}
+ @return: mesh proxy
+ """
diff --git a/source/gameengine/PyDoc/KX_SCA_AddObjectActuator.py b/source/gameengine/PyDoc/KX_SCA_AddObjectActuator.py
index 4f2bf85bff3..c3b2e947ddb 100644
--- a/source/gameengine/PyDoc/KX_SCA_AddObjectActuator.py
+++ b/source/gameengine/PyDoc/KX_SCA_AddObjectActuator.py
@@ -66,6 +66,23 @@ class KX_SCA_AddObjectActuator(SCA_IActuator):
@rtype: list [vx, vy, vz]
"""
+ def setAngularVelocity(vx, vy, vz):
+ """
+ Sets the initial angular velocity of added objects.
+
+ @type vx: float
+ @param vx: the x component of the initial angular velocity.
+ @type vy: float
+ @param vy: the y component of the initial angular velocity.
+ @type vz: float
+ @param vz: the z component of the initial angular velocity.
+ """
+ def getAngularVelocity():
+ """
+ Returns the initial angular velocity of added objects.
+
+ @rtype: list [vx, vy, vz]
+ """
def getLastCreatedObject():
"""
Returns the last object created by this actuator.
diff --git a/source/gameengine/PyDoc/KX_SCA_ReplaceMeshActuator.py b/source/gameengine/PyDoc/KX_SCA_ReplaceMeshActuator.py
index eb00a91a4ce..498f6072e23 100644
--- a/source/gameengine/PyDoc/KX_SCA_ReplaceMeshActuator.py
+++ b/source/gameengine/PyDoc/KX_SCA_ReplaceMeshActuator.py
@@ -59,8 +59,9 @@ class KX_SCA_ReplaceMeshActuator(SCA_IActuator):
def setMesh(name):
"""
Sets the name of the mesh that will replace the current one.
+ When the name is None it will unset the mesh value so no action is taken.
- @type name: string
+ @type name: string or None
"""
def getMesh():
"""
@@ -68,6 +69,6 @@ class KX_SCA_ReplaceMeshActuator(SCA_IActuator):
Returns None if no mesh has been scheduled to be added.
- @rtype: string
+ @rtype: string or None
"""
diff --git a/source/gameengine/PyDoc/KX_TrackToActuator.py b/source/gameengine/PyDoc/KX_TrackToActuator.py
index 2ecd94f38ae..948302991b7 100644
--- a/source/gameengine/PyDoc/KX_TrackToActuator.py
+++ b/source/gameengine/PyDoc/KX_TrackToActuator.py
@@ -21,7 +21,7 @@ class KX_TrackToActuator(SCA_IActuator):
@type object: L{KX_GameObject}, string or None
@param object: Either a reference to a game object or the name of the object to track.
"""
- def getObject():
+ def getObject(name_only):
"""
Returns the name of the object to track.
diff --git a/source/gameengine/PyDoc/Rasterizer.py b/source/gameengine/PyDoc/Rasterizer.py
index f0e48b6ed43..cdda87fcb49 100644
--- a/source/gameengine/PyDoc/Rasterizer.py
+++ b/source/gameengine/PyDoc/Rasterizer.py
@@ -37,6 +37,10 @@ Example Uses an L{SCA_MouseSensor}, and two L{KX_ObjectActuator}s to implement M
# Centre the mouse
Rasterizer.setMousePosition(Rasterizer.getWindowWidth()/2, Rasterizer.getWindowHeight()/2)
+@group Material Types: KX_TEXFACE_MATERIAL, KX_BLENDER_MULTITEX_MATERIAL, KX_BLENDER_GLSL_MATERIAL
+@var KX_TEXFACE_MATERIAL: Materials as defined by the texture face settings.
+@var KX_BLENDER_MULTITEX_MATERIAL: Materials approximating blender materials with multitexturing.
+@var KX_BLENDER_BLENDER_MATERIAL: Materials approximating blender materials with GLSL.
"""
@@ -84,7 +88,8 @@ def setMousePosition(x, y):
"""
Sets the mouse cursor position.
- @type x, y: integer
+ @type x: integer
+ @type y: integer
"""
def setBackgroundColor(rgba):
@@ -145,3 +150,46 @@ def getFocalLength():
@rtype: float
"""
+
+def setMaterialMode(mode):
+ """
+ Set the material mode to use for OpenGL rendering.
+
+ @type mode: KX_TEXFACE_MATERIAL, KX_BLENDER_MULTITEX_MATERIAL, KX_BLENDER_GLSL_MATERIAL
+ @note: Changes will only affect newly created scenes.
+ """
+
+def getMaterialMode(mode):
+ """
+ Get the material mode to use for OpenGL rendering.
+
+ @rtype: KX_TEXFACE_MATERIAL, KX_BLENDER_MULTITEX_MATERIAL, KX_BLENDER_GLSL_MATERIAL
+ """
+
+def setGLSLMaterialSetting(setting, enable):
+ """
+ Enables or disables a GLSL material setting.
+
+ @type setting: string (lights, shaders, shadows, ramps, nodes, extra_textures)
+ @type enable: boolean
+ """
+
+def getGLSLMaterialSetting(setting, enable):
+ """
+ Get the state of a GLSL material setting.
+
+ @type setting: string (lights, shaders, shadows, ramps, nodes, extra_textures)
+ @rtype: boolean
+ """
+def drawLine(from,to,color):
+ """
+ Draw a line in the 3D scene.
+
+ @param from: the origin of the line
+ @type from: list [x, y, z]
+ @param to: the end of the line
+ @type to: list [x, y, z]
+ @param color: the color of the line
+ @type color: list [r, g, b]
+ """
+
diff --git a/source/gameengine/PyDoc/SCA_DelaySensor.py b/source/gameengine/PyDoc/SCA_DelaySensor.py
new file mode 100644
index 00000000000..19df589ea7b
--- /dev/null
+++ b/source/gameengine/PyDoc/SCA_DelaySensor.py
@@ -0,0 +1,56 @@
+# $Id$
+# Documentation for SCA_DelaySensor
+from SCA_ISensor import *
+
+class SCA_DelaySensor(SCA_ISensor):
+ """
+ The Delay sensor generates positive and negative triggers at precise time,
+ expressed in number of frames. The delay parameter defines the length
+ of the initial OFF period. A positive trigger is generated at the end of this period.
+ The duration parameter defines the length of the ON period following the OFF period.
+ There is a negative trigger at the end of the ON period. If duration is 0, the sensor
+ stays ON and there is no negative trigger.
+ The sensor runs the OFF-ON cycle once unless the repeat option is set: the
+ OFF-ON cycle repeats indefinately (or the OFF cycle if duration is 0).
+ Use SCA_ISensor::reset() at any time to restart sensor.
+ """
+ def setDelay(delay):
+ """
+ Set the initial delay before the positive trigger.
+
+ @param delay: length of the initial OFF period as number of frame, 0 for immediate trigger
+ @type delay: integer
+ """
+ def setDuration(duration):
+ """
+ Set the duration of the ON pulse after initial delay and the generation of the positive trigger.
+ If duration is greater than 0, a negative trigger is sent at the end of the ON pulse.
+
+ @param duration: length of the ON period in number of frame after the initial OFF period
+ @type duration: integer
+ """
+ def setRepeat(repeat):
+ """
+ Set if the sensor repeat mode.
+
+ @param repeat: 1 if the OFF-ON cycle should be repeated indefinately, 0 if it should run once.
+ @type repeat: integer
+ """
+ def getDelay():
+ """
+ Return the delay parameter value.
+
+ @rtype: integer
+ """
+ def getDuration():
+ """
+ Return the duration parameter value
+
+ @rtype: integer
+ """
+ def getRepeat():
+ """
+ Return the repeat parameter value
+
+ @rtype: KX_TRUE or KX_FALSE
+ """
diff --git a/source/gameengine/PyDoc/SCA_ISensor.py b/source/gameengine/PyDoc/SCA_ISensor.py
index 0ebc2debb31..14858505e24 100644
--- a/source/gameengine/PyDoc/SCA_ISensor.py
+++ b/source/gameengine/PyDoc/SCA_ISensor.py
@@ -9,7 +9,12 @@ class SCA_ISensor(SCA_ILogicBrick):
def isPositive():
"""
- True if this sensor brick has been activated.
+ True if this sensor brick is in a positive state.
+ """
+
+ def isTriggered():
+ """
+ True if this sensor brick has triggered the current controller.
"""
def getUsePosPulseMode():
@@ -77,4 +82,10 @@ class SCA_ISensor(SCA_ILogicBrick):
@param level: Detect level instead of edge? (KX_TRUE, KX_FALSE)
@type level: boolean
"""
+ def reset():
+ """
+ Reset sensor internal state, effect depends on the type of sensor and settings.
+
+ The sensor is put in its initial state as if it was just activated.
+ """
diff --git a/source/gameengine/Rasterizer/Makefile b/source/gameengine/Rasterizer/Makefile
index e3b1f274ee5..917f70c7108 100644
--- a/source/gameengine/Rasterizer/Makefile
+++ b/source/gameengine/Rasterizer/Makefile
@@ -49,10 +49,6 @@ ifeq ($(OS),darwin)
CPPFLAGS += -fpascal-strings
endif
-ifeq ($(WITH_BF_GLEXT),true)
- CPPFLAGS += -DWITH_GLEXT
-endif
-
###############
SOURCEDIR = source/gameengine/Rasterizer
diff --git a/source/gameengine/Rasterizer/RAS_2DFilterManager.cpp b/source/gameengine/Rasterizer/RAS_2DFilterManager.cpp
index ef206332057..6e5553d4781 100644
--- a/source/gameengine/Rasterizer/RAS_2DFilterManager.cpp
+++ b/source/gameengine/Rasterizer/RAS_2DFilterManager.cpp
@@ -85,7 +85,7 @@ RAS_2DFilterManager::~RAS_2DFilterManager()
FreeTextures();
}
-unsigned int RAS_2DFilterManager::CreateShaderProgram(char* shadersource)
+unsigned int RAS_2DFilterManager::CreateShaderProgram(const char* shadersource)
{
GLuint program = 0;
GLuint fShader = glCreateShaderObjectARB(GL_FRAGMENT_SHADER);
diff --git a/source/gameengine/Rasterizer/RAS_2DFilterManager.h b/source/gameengine/Rasterizer/RAS_2DFilterManager.h
index f5998e1f093..c16bd41dd0e 100644
--- a/source/gameengine/Rasterizer/RAS_2DFilterManager.h
+++ b/source/gameengine/Rasterizer/RAS_2DFilterManager.h
@@ -33,7 +33,7 @@
class RAS_2DFilterManager
{
private:
- unsigned int CreateShaderProgram(char* shadersource);
+ unsigned int CreateShaderProgram(const char* shadersource);
unsigned int CreateShaderProgram(int filtermode);
void AnalyseShader(int passindex, vector<STR_String>& propNames);
void StartShaderProgram(int passindex);
diff --git a/source/gameengine/Rasterizer/RAS_BucketManager.cpp b/source/gameengine/Rasterizer/RAS_BucketManager.cpp
index 82bdce44519..f7938bb62e6 100644
--- a/source/gameengine/Rasterizer/RAS_BucketManager.cpp
+++ b/source/gameengine/Rasterizer/RAS_BucketManager.cpp
@@ -26,10 +26,6 @@
* ***** END GPL LICENSE BLOCK *****
*/
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
#ifdef WIN32
// don't show these anoying STL warnings
#pragma warning (disable:4786)
@@ -39,168 +35,234 @@
#include "RAS_MaterialBucket.h"
#include "STR_HashedString.h"
#include "RAS_MeshObject.h"
-#define KX_NUM_MATERIALBUCKETS 100
#include "RAS_IRasterizer.h"
#include "RAS_IRenderTools.h"
#include "RAS_BucketManager.h"
+#include <algorithm>
#include <set>
-RAS_BucketManager::RAS_BucketManager()
+/* sorting */
+
+struct RAS_BucketManager::sortedmeshslot
{
+public:
+ MT_Scalar m_z; /* depth */
+ RAS_MeshSlot *m_ms; /* mesh slot */
+ RAS_MaterialBucket *m_bucket; /* buck mesh slot came from */
-}
+ sortedmeshslot() {}
-RAS_BucketManager::~RAS_BucketManager()
-{
- RAS_BucketManagerClearAll();
-}
+ void set(RAS_MeshSlot *ms, RAS_MaterialBucket *bucket, const MT_Vector3& pnorm)
+ {
+ // would be good to use the actual bounding box center instead
+ MT_Point3 pos(ms->m_OpenGLMatrix[12], ms->m_OpenGLMatrix[13], ms->m_OpenGLMatrix[14]);
-/**
- * struct alphamesh holds a mesh, (m_ms) it's depth, (m_z) and the bucket it came from (m_bucket.)
- */
-struct RAS_BucketManager::alphamesh
-{
-public:
- MT_Scalar m_z;
- RAS_MaterialBucket::T_MeshSlotList::iterator m_ms;
- RAS_MaterialBucket *m_bucket;
- alphamesh(MT_Scalar z, RAS_MaterialBucket::T_MeshSlotList::iterator &ms, RAS_MaterialBucket *bucket) :
- m_z(z),
- m_ms(ms),
- m_bucket(bucket)
- {}
+ m_z = MT_dot(pnorm, pos);
+ m_ms = ms;
+ m_bucket = bucket;
+ }
};
struct RAS_BucketManager::backtofront
{
- bool operator()(const alphamesh &a, const alphamesh &b)
+ bool operator()(const sortedmeshslot &a, const sortedmeshslot &b)
{
- return a.m_z < b.m_z;
+ return (a.m_z < b.m_z) || (a.m_z == b.m_z && a.m_ms < b.m_ms);
}
};
+
+struct RAS_BucketManager::fronttoback
+{
+ bool operator()(const sortedmeshslot &a, const sortedmeshslot &b)
+ {
+ return (a.m_z > b.m_z) || (a.m_z == b.m_z && a.m_ms > b.m_ms);
+ }
+};
+
+/* bucket manager */
+
+RAS_BucketManager::RAS_BucketManager()
+{
+
+}
+
+RAS_BucketManager::~RAS_BucketManager()
+{
+ BucketList::iterator it;
+
+ for (it = m_SolidBuckets.begin(); it != m_SolidBuckets.end(); it++)
+ delete (*it);
+
+ for (it = m_AlphaBuckets.begin(); it != m_AlphaBuckets.end(); it++)
+ delete(*it);
+ m_SolidBuckets.clear();
+ m_AlphaBuckets.clear();
+}
+
+void RAS_BucketManager::OrderBuckets(const MT_Transform& cameratrans, BucketList& buckets, vector<sortedmeshslot>& slots, bool alpha)
+{
+ BucketList::iterator bit;
+ list<RAS_MeshSlot>::iterator mit;
+ size_t size = 0, i = 0;
+
+ /* Camera's near plane equation: pnorm.dot(point) + pval,
+ * but we leave out pval since it's constant anyway */
+ const MT_Vector3 pnorm(cameratrans.getBasis()[2]);
+
+ for (bit = buckets.begin(); bit != buckets.end(); ++bit)
+ for (mit = (*bit)->msBegin(); mit != (*bit)->msEnd(); ++mit)
+ if (!mit->IsCulled())
+ size++;
+
+ slots.resize(size);
+
+ for (bit = buckets.begin(); bit != buckets.end(); ++bit)
+ for (mit = (*bit)->msBegin(); mit != (*bit)->msEnd(); ++mit)
+ if (!mit->IsCulled())
+ slots[i++].set(&*mit, *bit, pnorm);
+
+ if(alpha)
+ sort(slots.begin(), slots.end(), backtofront());
+ else
+ sort(slots.begin(), slots.end(), fronttoback());
+}
void RAS_BucketManager::RenderAlphaBuckets(
const MT_Transform& cameratrans, RAS_IRasterizer* rasty, RAS_IRenderTools* rendertools)
{
- BucketList::iterator bit;
- std::multiset<alphamesh, backtofront> alphameshset;
- RAS_MaterialBucket::T_MeshSlotList::iterator mit;
+ vector<sortedmeshslot> slots;
+ vector<sortedmeshslot>::iterator sit;
+
+ // Having depth masks disabled/enabled gives different artifacts in
+ // case no sorting is done or is done inexact. For compatibility, we
+ // disable it.
+ rasty->SetDepthMask(RAS_IRasterizer::KX_DEPTHMASK_DISABLED);
+
+ OrderBuckets(cameratrans, m_AlphaBuckets, slots, true);
- /* Camera's near plane equation: cam_norm.dot(point) + cam_origin */
- const MT_Vector3 cam_norm(cameratrans.getBasis()[2]);
- const MT_Scalar cam_origin = cameratrans.getOrigin()[2];
- for (bit = m_AlphaBuckets.begin(); bit != m_AlphaBuckets.end(); ++bit)
- {
- for (mit = (*bit)->msBegin(); mit != (*bit)->msEnd(); ++mit)
- {
- if ((*mit).m_bVisible)
- {
- MT_Point3 pos((*mit).m_OpenGLMatrix[12], (*mit).m_OpenGLMatrix[13], (*mit).m_OpenGLMatrix[14]);
- alphameshset.insert(alphamesh(MT_dot(cam_norm, pos) + cam_origin, mit, *bit));
- }
+ for(sit=slots.begin(); sit!=slots.end(); ++sit) {
+ rendertools->SetClientObject(rasty, sit->m_ms->m_clientObj);
+
+ while(sit->m_bucket->ActivateMaterial(cameratrans, rasty, rendertools))
+ sit->m_bucket->RenderMeshSlot(cameratrans, rasty, rendertools, *(sit->m_ms));
+ }
+
+ rasty->SetDepthMask(RAS_IRasterizer::KX_DEPTHMASK_ENABLED);
+}
+
+void RAS_BucketManager::RenderSolidBuckets(
+ const MT_Transform& cameratrans, RAS_IRasterizer* rasty, RAS_IRenderTools* rendertools)
+{
+ BucketList::iterator bit;
+ list<RAS_MeshSlot>::iterator mit;
+
+ rasty->SetDepthMask(RAS_IRasterizer::KX_DEPTHMASK_ENABLED);
+
+ for (bit = m_SolidBuckets.begin(); bit != m_SolidBuckets.end(); ++bit) {
+ for (mit = (*bit)->msBegin(); mit != (*bit)->msEnd(); ++mit) {
+ if (mit->IsCulled())
+ continue;
+
+ rendertools->SetClientObject(rasty, mit->m_clientObj);
+
+ while ((*bit)->ActivateMaterial(cameratrans, rasty, rendertools))
+ (*bit)->RenderMeshSlot(cameratrans, rasty, rendertools, *mit);
}
}
- // It shouldn't be strictly necessary to disable depth writes; but
- // it is needed for compatibility.
- rasty->SetDepthMask(RAS_IRasterizer::KX_DEPTHMASK_DISABLED);
+ /* this code draws meshes order front-to-back instead to reduce overdraw.
+ * it turned out slower due to much material state switching, a more clever
+ * algorithm might do better. */
+#if 0
+ vector<sortedmeshslot> slots;
+ vector<sortedmeshslot>::iterator sit;
- RAS_IRasterizer::DrawMode drawingmode;
- std::multiset< alphamesh, backtofront>::iterator msit = alphameshset.begin();
- for (; msit != alphameshset.end(); ++msit)
- {
- rendertools->SetClientObject((*(*msit).m_ms).m_clientObj);
- while ((*msit).m_bucket->ActivateMaterial(cameratrans, rasty, rendertools, drawingmode))
- (*msit).m_bucket->RenderMeshSlot(cameratrans, rasty, rendertools, *(*msit).m_ms, drawingmode);
+ OrderBuckets(cameratrans, m_SolidBuckets, slots, false);
+
+ for(sit=slots.begin(); sit!=slots.end(); ++sit) {
+ rendertools->SetClientObject(rasty, sit->m_ms->m_clientObj);
+
+ while(sit->m_bucket->ActivateMaterial(cameratrans, rasty, rendertools))
+ sit->m_bucket->RenderMeshSlot(cameratrans, rasty, rendertools, *(sit->m_ms));
}
-
- rasty->SetDepthMask(RAS_IRasterizer::KX_DEPTHMASK_ENABLED);
+#endif
}
void RAS_BucketManager::Renderbuckets(
const MT_Transform& cameratrans, RAS_IRasterizer* rasty, RAS_IRenderTools* rendertools)
{
- BucketList::iterator bucket;
-
- rasty->EnableTextures(false);
- rasty->SetDepthMask(RAS_IRasterizer::KX_DEPTHMASK_ENABLED);
-
- // beginning each frame, clear (texture/material) caching information
+ /* beginning each frame, clear (texture/material) caching information */
rasty->ClearCachingInfo();
- RAS_MaterialBucket::StartFrame();
-
- for (bucket = m_MaterialBuckets.begin(); bucket != m_MaterialBuckets.end(); ++bucket)
- (*bucket)->Render(cameratrans,rasty,rendertools);
-
+ RenderSolidBuckets(cameratrans, rasty, rendertools);
RenderAlphaBuckets(cameratrans, rasty, rendertools);
- RAS_MaterialBucket::EndFrame();
+
+ rendertools->SetClientObject(rasty, NULL);
}
RAS_MaterialBucket* RAS_BucketManager::FindBucket(RAS_IPolyMaterial * material, bool &bucketCreated)
{
- bucketCreated = false;
BucketList::iterator it;
- for (it = m_MaterialBuckets.begin(); it != m_MaterialBuckets.end(); it++)
- {
+
+ bucketCreated = false;
+
+ for (it = m_SolidBuckets.begin(); it != m_SolidBuckets.end(); it++)
if (*(*it)->GetPolyMaterial() == *material)
return *it;
- }
for (it = m_AlphaBuckets.begin(); it != m_AlphaBuckets.end(); it++)
- {
if (*(*it)->GetPolyMaterial() == *material)
return *it;
- }
RAS_MaterialBucket *bucket = new RAS_MaterialBucket(material);
bucketCreated = true;
+
if (bucket->IsAlpha())
m_AlphaBuckets.push_back(bucket);
else
- m_MaterialBuckets.push_back(bucket);
+ m_SolidBuckets.push_back(bucket);
return bucket;
}
-void RAS_BucketManager::RAS_BucketManagerClearAll()
+void RAS_BucketManager::OptimizeBuckets(MT_Scalar distance)
{
- BucketList::iterator it;
- for (it = m_MaterialBuckets.begin(); it != m_MaterialBuckets.end(); it++)
- {
- delete (*it);
- }
- for (it = m_AlphaBuckets.begin(); it != m_AlphaBuckets.end(); it++)
- {
- delete(*it);
- }
+ BucketList::iterator bit;
- m_MaterialBuckets.clear();
- m_AlphaBuckets.clear();
+ distance = 10.0;
+
+ for (bit = m_SolidBuckets.begin(); bit != m_SolidBuckets.end(); ++bit)
+ (*bit)->Optimize(distance);
+ for (bit = m_AlphaBuckets.begin(); bit != m_AlphaBuckets.end(); ++bit)
+ (*bit)->Optimize(distance);
}
-void RAS_BucketManager::ReleaseDisplayLists()
+void RAS_BucketManager::ReleaseDisplayLists(RAS_IPolyMaterial *mat)
{
BucketList::iterator bit;
- RAS_MaterialBucket::T_MeshSlotList::iterator mit;
+ list<RAS_MeshSlot>::iterator mit;
- for (bit = m_MaterialBuckets.begin(); bit != m_MaterialBuckets.end(); ++bit) {
- for (mit = (*bit)->msBegin(); mit != (*bit)->msEnd(); ++mit) {
- if(mit->m_DisplayList) {
- mit->m_DisplayList->Release();
- mit->m_DisplayList = NULL;
+ for (bit = m_SolidBuckets.begin(); bit != m_SolidBuckets.end(); ++bit) {
+ if (mat == NULL || (mat == (*bit)->GetPolyMaterial())) {
+ for (mit = (*bit)->msBegin(); mit != (*bit)->msEnd(); ++mit) {
+ if(mit->m_DisplayList) {
+ mit->m_DisplayList->Release();
+ mit->m_DisplayList = NULL;
+ }
}
}
}
for (bit = m_AlphaBuckets.begin(); bit != m_AlphaBuckets.end(); ++bit) {
- for (mit = (*bit)->msBegin(); mit != (*bit)->msEnd(); ++mit) {
- if(mit->m_DisplayList) {
- mit->m_DisplayList->Release();
- mit->m_DisplayList = NULL;
+ if (mat == NULL || (mat == (*bit)->GetPolyMaterial())) {
+ for (mit = (*bit)->msBegin(); mit != (*bit)->msEnd(); ++mit) {
+ if(mit->m_DisplayList) {
+ mit->m_DisplayList->Release();
+ mit->m_DisplayList = NULL;
+ }
}
}
}
diff --git a/source/gameengine/Rasterizer/RAS_BucketManager.h b/source/gameengine/Rasterizer/RAS_BucketManager.h
index 08b67ed022f..74526f365a0 100644
--- a/source/gameengine/Rasterizer/RAS_BucketManager.h
+++ b/source/gameengine/Rasterizer/RAS_BucketManager.h
@@ -39,32 +39,33 @@
class RAS_BucketManager
{
- //GEN_Map<class RAS_IPolyMaterial,class RAS_MaterialBucket*> m_MaterialBuckets;
-
typedef std::vector<class RAS_MaterialBucket*> BucketList;
- BucketList m_MaterialBuckets;
+ BucketList m_SolidBuckets;
BucketList m_AlphaBuckets;
- struct alphamesh;
+ struct sortedmeshslot;
struct backtofront;
+ struct fronttoback;
public:
RAS_BucketManager();
virtual ~RAS_BucketManager();
- void RenderAlphaBuckets(const MT_Transform& cameratrans,
- RAS_IRasterizer* rasty, RAS_IRenderTools* rendertools);
void Renderbuckets(const MT_Transform & cameratrans,
- RAS_IRasterizer* rasty,
- class RAS_IRenderTools* rendertools);
+ RAS_IRasterizer* rasty, RAS_IRenderTools* rendertools);
RAS_MaterialBucket* FindBucket(RAS_IPolyMaterial * material, bool &bucketCreated);
+ void OptimizeBuckets(MT_Scalar distance);
- void ReleaseDisplayLists();
+ void ReleaseDisplayLists(RAS_IPolyMaterial * material = NULL);
private:
- void RAS_BucketManagerClearAll();
+ void OrderBuckets(const MT_Transform& cameratrans, BucketList& buckets, vector<sortedmeshslot>& slots, bool alpha);
+ void RenderSolidBuckets(const MT_Transform& cameratrans,
+ RAS_IRasterizer* rasty, RAS_IRenderTools* rendertools);
+ void RenderAlphaBuckets(const MT_Transform& cameratrans,
+ RAS_IRasterizer* rasty, RAS_IRenderTools* rendertools);
};
#endif //__RAS_BUCKETMANAGER
diff --git a/source/gameengine/Rasterizer/RAS_Deformer.h b/source/gameengine/Rasterizer/RAS_Deformer.h
index 4e8484ab880..3332ac4c0a7 100644
--- a/source/gameengine/Rasterizer/RAS_Deformer.h
+++ b/source/gameengine/Rasterizer/RAS_Deformer.h
@@ -44,7 +44,11 @@ public:
virtual void Relink(GEN_Map<class GEN_HashedPtr, void*>*map)=0;
virtual bool Apply(class RAS_IPolyMaterial *polymat)=0;
virtual bool Update(void)=0;
- virtual RAS_Deformer *GetReplica()=0;
+ virtual RAS_Deformer *GetReplica(class KX_GameObject* replica)=0;
+ virtual bool SkipVertexTransform()
+ {
+ return false;
+ }
protected:
class RAS_MeshObject *m_pMesh;
};
diff --git a/source/gameengine/Rasterizer/RAS_FramingManager.h b/source/gameengine/Rasterizer/RAS_FramingManager.h
index dcb48c1c2a0..9cb59f300f7 100644
--- a/source/gameengine/Rasterizer/RAS_FramingManager.h
+++ b/source/gameengine/Rasterizer/RAS_FramingManager.h
@@ -108,6 +108,13 @@ public :
) const {
return m_frame_type;
};
+
+ void
+ SetFrameType(
+ RAS_FrameType type
+ ) {
+ m_frame_type = type;
+ };
float
BarRed(
@@ -140,14 +147,6 @@ public :
};
private :
-
- /**
- * private to force use of public constructor
- */
-
- RAS_FrameSettings(
- const RAS_FrameSettings &
- );
RAS_FrameType m_frame_type;
float m_bar_r;
diff --git a/source/gameengine/Rasterizer/RAS_IPolygonMaterial.cpp b/source/gameengine/Rasterizer/RAS_IPolygonMaterial.cpp
index 4ee06d96603..fb3607f89f4 100644
--- a/source/gameengine/Rasterizer/RAS_IPolygonMaterial.cpp
+++ b/source/gameengine/Rasterizer/RAS_IPolygonMaterial.cpp
@@ -42,11 +42,8 @@ RAS_IPolyMaterial::RAS_IPolyMaterial(const STR_String& texname,
int transp,
bool alpha,
bool zsort,
- int lightlayer,
- bool bIsTriangle,
- void* clientobject=NULL) :
-
- m_texturename(texname),
+ int lightlayer)
+ : m_texturename(texname),
m_materialname(matname),
m_tile(tile),
m_tilexrep(tilexrep),
@@ -56,7 +53,6 @@ RAS_IPolyMaterial::RAS_IPolyMaterial(const STR_String& texname,
m_alpha(alpha),
m_zsort(zsort),
m_lightlayer(lightlayer),
- m_bIsTriangle(bIsTriangle),
m_polymatid(m_newpolymatid++),
m_flag(0),
m_multimode(0)
@@ -72,15 +68,16 @@ bool RAS_IPolyMaterial::Equals(const RAS_IPolyMaterial& lhs) const
{
if(m_flag &RAS_BLENDERMAT)
{
- return (
+ bool test = (
this->m_multimode == lhs.m_multimode &&
this->m_flag == lhs.m_flag &&
this->m_drawingmode == lhs.m_drawingmode &&
this->m_transp == lhs.m_transp &&
- this->m_lightlayer == lhs.m_lightlayer &&
this->m_texturename.hash() == lhs.m_texturename.hash() &&
this->m_materialname.hash() == lhs.m_materialname.hash()
);
+
+ return test;
}
else
{
@@ -92,8 +89,6 @@ bool RAS_IPolyMaterial::Equals(const RAS_IPolyMaterial& lhs) const
this->m_alpha == lhs.m_alpha &&
this->m_zsort == lhs.m_zsort &&
this->m_drawingmode == lhs.m_drawingmode &&
- this->m_bIsTriangle == lhs.m_bIsTriangle &&
- this->m_lightlayer == lhs.m_lightlayer &&
this->m_texturename.hash() == lhs.m_texturename.hash() &&
this->m_materialname.hash() == lhs.m_materialname.hash()
);
@@ -123,11 +118,6 @@ bool RAS_IPolyMaterial::IsZSort() const
return m_zsort;
}
-bool RAS_IPolyMaterial::UsesTriangles() const
-{
- return m_bIsTriangle;
-}
-
unsigned int RAS_IPolyMaterial::hash() const
{
return m_texturename.hash();
@@ -172,5 +162,10 @@ bool RAS_IPolyMaterial::UsesLighting(RAS_IRasterizer *rasty) const
return dolights;
}
+bool RAS_IPolyMaterial::UsesObjectColor() const
+{
+ return !(m_flag & RAS_BLENDERGLSL);
+}
+
unsigned int RAS_IPolyMaterial::m_newpolymatid = 0;
diff --git a/source/gameengine/Rasterizer/RAS_IPolygonMaterial.h b/source/gameengine/Rasterizer/RAS_IPolygonMaterial.h
index 8fc53e6b038..218dd91cb30 100644
--- a/source/gameengine/Rasterizer/RAS_IPolygonMaterial.h
+++ b/source/gameengine/Rasterizer/RAS_IPolygonMaterial.h
@@ -71,7 +71,6 @@ protected:
bool m_alpha;
bool m_zsort;
int m_lightlayer;
- bool m_bIsTriangle;
unsigned int m_polymatid;
static unsigned int m_newpolymatid;
@@ -106,9 +105,7 @@ public:
int transp,
bool alpha,
bool zsort,
- int lightlayer,
- bool bIsTriangle,
- void* clientobject);
+ int lightlayer);
virtual ~RAS_IPolyMaterial() {};
/**
@@ -129,14 +126,13 @@ public:
{
return false;
}
- virtual void ActivateMeshSlot(const class KX_MeshSlot & ms, RAS_IRasterizer* rasty) const {}
+ virtual void ActivateMeshSlot(const class RAS_MeshSlot & ms, RAS_IRasterizer* rasty) const {}
virtual bool Equals(const RAS_IPolyMaterial& lhs) const;
bool Less(const RAS_IPolyMaterial& rhs) const;
int GetLightLayer() const;
bool IsAlpha() const;
bool IsZSort() const;
- bool UsesTriangles() const;
unsigned int hash() const;
int GetDrawingMode() const;
const STR_String& GetMaterialName() const;
@@ -145,6 +141,7 @@ public:
const unsigned int GetFlag() const;
virtual bool UsesLighting(RAS_IRasterizer *rasty) const;
+ virtual bool UsesObjectColor() const;
/*
* PreCalculate texture gen
diff --git a/source/gameengine/Rasterizer/RAS_IRasterizer.h b/source/gameengine/Rasterizer/RAS_IRasterizer.h
index 9e03212283e..411b28fa3b7 100644
--- a/source/gameengine/Rasterizer/RAS_IRasterizer.h
+++ b/source/gameengine/Rasterizer/RAS_IRasterizer.h
@@ -169,6 +169,10 @@ public:
*/
virtual bool BeginFrame(int drawingmode, double time)=0;
/**
+ * ClearColorBuffer clears the color buffer.
+ */
+ virtual void ClearColorBuffer()=0;
+ /**
* ClearDepthBuffer clears the depth buffer.
*/
virtual void ClearDepthBuffer()=0;
@@ -181,7 +185,8 @@ public:
*/
virtual void EndFrame()=0;
/**
- * SetRenderArea sets the render area from the 2d canvas
+ * SetRenderArea sets the render area from the 2d canvas.
+ * Returns true if only of subset of the canvas is used.
*/
virtual void SetRenderArea()=0;
@@ -195,6 +200,7 @@ public:
* @return true if stereo mode is enabled.
*/
virtual bool Stereo()=0;
+ virtual bool InterlacedStereo()=0;
/**
* Sets which eye buffer subsequent primitives will be rendered to.
*/
@@ -217,39 +223,18 @@ public:
// Drawing Functions
/**
- * IndexPrimitives: Renders primitives.
- * @param vertexarrays is an array of vertex arrays
- * @param indexarrays is an array of index arrays
- * @param mode determines the type of primitive stored in the vertex/index arrays
- * @param useObjectColor will render the object using @param rgbacolor instead of
- * vertex colors.
- */
- virtual void IndexPrimitives( const vecVertexArray& vertexarrays,
- const vecIndexArrays & indexarrays,
- DrawMode mode,
- bool useObjectColor,
- const MT_Vector4& rgbacolor,
- class KX_ListSlot** slot)=0;
-
- virtual void IndexPrimitivesMulti(
- const vecVertexArray& vertexarrays,
- const vecIndexArrays & indexarrays,
- DrawMode mode,
- bool useObjectColor,
- const MT_Vector4& rgbacolor,
- class KX_ListSlot** slot)=0;
+ * IndexPrimitives: Renders primitives from mesh slot.
+ */
+ virtual void IndexPrimitives(class RAS_MeshSlot& ms)=0;
+ virtual void IndexPrimitivesMulti(class RAS_MeshSlot& ms)=0;
/**
* IndexPrimitives_3DText will render text into the polygons.
* The text to be rendered is from @param rendertools client object's text property.
*/
- virtual void IndexPrimitives_3DText( const vecVertexArray& vertexarrays,
- const vecIndexArrays & indexarrays,
- DrawMode mode,
+ virtual void IndexPrimitives_3DText(class RAS_MeshSlot& ms,
class RAS_IPolyMaterial* polymat,
- class RAS_IRenderTools* rendertools,
- bool useObjectColor,
- const MT_Vector4& rgbacolor)=0;
+ class RAS_IRenderTools* rendertools)=0;
virtual void SetProjectionMatrix(MT_CmMatrix4x4 & mat)=0;
/* This one should become our final version, methinks. */
@@ -271,9 +256,6 @@ public:
virtual const MT_Point3& GetCameraPosition()=0;
/**
*/
- virtual void LoadViewMatrix()=0;
- /**
- */
virtual void SetFog(float start,
float dist,
float r,
@@ -309,9 +291,6 @@ public:
*/
virtual int GetDrawingMode()=0;
/**
- */
- virtual void EnableTextures(bool enable)=0;
- /**
* Sets face culling
*/
virtual void SetCullFace(bool enable)=0;
@@ -385,7 +364,9 @@ public:
virtual void SetAttribNum(int num) = 0;
virtual void SetTexCoord(TexCoGen coords, int unit) = 0;
virtual void SetAttrib(TexCoGen coords, int unit) = 0;
- virtual void GetViewMatrix(MT_Matrix4x4 &mat) const = 0;
+
+ virtual const MT_Matrix4x4& GetViewMatrix() const = 0;
+ virtual const MT_Matrix4x4& GetViewInvMatrix() const = 0;
virtual bool QueryLists(){return false;}
virtual bool QueryArrays(){return false;}
@@ -398,6 +379,7 @@ public:
virtual void SetMotionBlurState(int newstate)=0;
virtual void SetBlendingMode(int blendmode)=0;
+ virtual void SetFrontFace(bool ccw)=0;
};
#endif //__RAS_IRASTERIZER
diff --git a/source/gameengine/Rasterizer/RAS_IRenderTools.cpp b/source/gameengine/Rasterizer/RAS_IRenderTools.cpp
index 2be9bb75ebf..555a3520bb4 100644
--- a/source/gameengine/Rasterizer/RAS_IRenderTools.cpp
+++ b/source/gameengine/Rasterizer/RAS_IRenderTools.cpp
@@ -28,42 +28,22 @@
#include "RAS_IRenderTools.h"
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-void RAS_IRenderTools::SetViewMat(const MT_Transform& trans)
-{
- trans.getValue(m_viewmat);
-}
-
-
-
-void RAS_IRenderTools::SetClientObject(void* obj)
+void RAS_IRenderTools::SetClientObject(RAS_IRasterizer* rasty, void *obj)
{
if (m_clientobject != obj)
- {
m_clientobject = obj;
- m_modified = true;
- }
}
-
-
void RAS_IRenderTools::SetAuxilaryClientInfo(void* inf)
{
m_auxilaryClientInfo = inf;
}
-
-
void RAS_IRenderTools::AddLight(struct RAS_LightObject* lightobject)
{
m_lights.push_back(lightobject);
}
-
-
void RAS_IRenderTools::RemoveLight(struct RAS_LightObject* lightobject)
{
std::vector<struct RAS_LightObject*>::iterator lit =
@@ -71,5 +51,5 @@ void RAS_IRenderTools::RemoveLight(struct RAS_LightObject* lightobject)
if (!(lit==m_lights.end()))
m_lights.erase(lit);
-
}
+
diff --git a/source/gameengine/Rasterizer/RAS_IRenderTools.h b/source/gameengine/Rasterizer/RAS_IRenderTools.h
index 54a663ba111..57f331e64cb 100644
--- a/source/gameengine/Rasterizer/RAS_IRenderTools.h
+++ b/source/gameengine/Rasterizer/RAS_IRenderTools.h
@@ -44,12 +44,9 @@ class RAS_IRenderTools
{
protected:
- float m_viewmat[16];
void* m_clientobject;
void* m_auxilaryClientInfo;
- bool m_modified;
-
std::vector<struct RAS_LightObject*> m_lights;
RAS_2DFilterManager m_filtermanager;
@@ -68,8 +65,7 @@ public:
RAS_IRenderTools(
) :
- m_clientobject(NULL),
- m_modified(true)
+ m_clientobject(NULL)
{
};
@@ -131,24 +127,21 @@ public:
float v1[3],
float v2[3],
float v3[3],
- float v4[3]
+ float v4[3],
+ int glattrib
)=0;
virtual
- void
- SetViewMat(
- const MT_Transform& trans
- );
-
- virtual
- int
+ void
ProcessLighting(
- int layer
+ int layer,
+ const MT_Transform& trans
)=0;
virtual
void
SetClientObject(
+ RAS_IRasterizer* rasty,
void* obj
);
@@ -190,24 +183,6 @@ public:
virtual
void
Render2DFilters(RAS_ICanvas* canvas)=0;
-
- virtual
- class RAS_IPolyMaterial*
- CreateBlenderPolyMaterial(
- const STR_String &texname,
- bool ba,
- const STR_String& matname,
- int tile,
- int tilexrep,
- int tileyrep,
- int mode,
- bool transparant,
- bool zsort,
- int lightlayer,
- bool bIsTriangle,
- void* clientobject,
- void* tface
- )=0;
};
#endif //__RAS_IRENDERTOOLS
diff --git a/source/gameengine/Rasterizer/RAS_MaterialBucket.cpp b/source/gameengine/Rasterizer/RAS_MaterialBucket.cpp
index 0015b6a251f..ad8d7ebd5b0 100644
--- a/source/gameengine/Rasterizer/RAS_MaterialBucket.cpp
+++ b/source/gameengine/Rasterizer/RAS_MaterialBucket.cpp
@@ -28,10 +28,6 @@
#include "RAS_MaterialBucket.h"
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
#ifdef WIN32
#pragma warning (disable:4786)
#include <windows.h>
@@ -44,79 +40,423 @@
#include "RAS_MeshObject.h"
#include "RAS_Deformer.h" // __NLA
+/* mesh slot */
+
+RAS_MeshSlot::RAS_MeshSlot()
+{
+ m_clientObj = NULL;
+ m_pDeformer = NULL;
+ m_OpenGLMatrix = NULL;
+ m_mesh = NULL;
+ m_bucket = NULL;
+ m_bVisible = false;
+ m_bCulled = true;
+ m_bObjectColor = false;
+ m_RGBAcolor = MT_Vector4(0.0, 0.0, 0.0, 0.0);
+ m_DisplayList = NULL;
+ m_bDisplayList = true;
+ m_joinSlot = NULL;
+}
+
+RAS_MeshSlot::~RAS_MeshSlot()
+{
+ vector<RAS_DisplayArray*>::iterator it;
+
+ Split(true);
+
+ while(m_joinedSlots.size())
+ m_joinedSlots.front()->Split(true);
+ for(it=m_displayArrays.begin(); it!=m_displayArrays.end(); it++) {
+ (*it)->m_users--;
+ if((*it)->m_users == 0)
+ delete *it;
+ }
+
+ if (m_DisplayList) {
+ m_DisplayList->Release();
+ m_DisplayList = NULL;
+ }
+}
-KX_VertexIndex::KX_VertexIndex(int size)
+RAS_MeshSlot::RAS_MeshSlot(const RAS_MeshSlot& slot)
{
- m_size = size;
+ vector<RAS_DisplayArray*>::iterator it;
+
+ m_clientObj = NULL;
+ m_pDeformer = NULL;
+ m_OpenGLMatrix = NULL;
+ m_mesh = slot.m_mesh;
+ m_bucket = slot.m_bucket;
+ m_bVisible = slot.m_bVisible;
+ m_bCulled = slot.m_bCulled;
+ m_bObjectColor = slot.m_bObjectColor;
+ m_RGBAcolor = slot.m_RGBAcolor;
+ m_DisplayList = NULL;
+ m_bDisplayList = slot.m_bDisplayList;
+ m_joinSlot = NULL;
+ m_currentArray = slot.m_currentArray;
+ m_displayArrays = slot.m_displayArrays;
+ m_joinedSlots = slot.m_joinedSlots;
+
+ m_startarray = slot.m_startarray;
+ m_startvertex = slot.m_startvertex;
+ m_startindex = slot.m_startindex;
+ m_endarray = slot.m_endarray;
+ m_endvertex = slot.m_endvertex;
+ m_endindex = slot.m_endindex;
+
+ for(it=m_displayArrays.begin(); it!=m_displayArrays.end(); it++) {
+ // don't copy display arrays for now because it breaks python
+ // access to vertices, but we'll need a solution if we want to
+ // join display arrays for reducing draw calls.
+ //*it = new RAS_DisplayArray(**it);
+ //(*it)->m_users = 1;
+
+ (*it)->m_users++;
+ }
}
+void RAS_MeshSlot::init(RAS_MaterialBucket *bucket, int numverts)
+{
+ m_bucket = bucket;
+
+ SetDisplayArray(numverts);
+ m_startarray = 0;
+ m_startvertex = 0;
+ m_startindex = 0;
+ m_endarray = 0;
+ m_endvertex = 0;
+ m_endindex = 0;
+}
-void KX_VertexIndex::SetIndex(short loc,unsigned int index)
+void RAS_MeshSlot::begin(RAS_MeshSlot::iterator& it)
{
- m_indexarray[loc]=index;
+ int startvertex, endvertex;
+ int startindex, endindex;
+
+ it.array = (m_displayArrays.size() > 0)? m_displayArrays[m_startarray]: NULL;
+
+ if(it.array == NULL || it.array->m_index.size() == 0 || it.array->m_vertex.size() == 0) {
+ it.array = NULL;
+ it.vertex = NULL;
+ it.index = NULL;
+ it.startvertex = 0;
+ it.endvertex = 0;
+ it.totindex = 0;
+ }
+ else {
+ startvertex = m_startvertex;
+ endvertex = (m_startarray == m_endarray)? m_endvertex: it.array->m_vertex.size();
+ startindex = m_startindex;
+ endindex = (m_startarray == m_endarray)? m_endindex: it.array->m_index.size();
+
+ it.vertex = &it.array->m_vertex[0];
+ it.index = &it.array->m_index[startindex];
+ it.startvertex = startvertex;
+ it.endvertex = endvertex;
+ it.totindex = endindex-startindex;
+ it.arraynum = m_startarray;
+ }
}
-bool KX_MeshSlot::Less(const KX_MeshSlot& lhs) const
+void RAS_MeshSlot::next(RAS_MeshSlot::iterator& it)
{
- bool result = ((m_mesh < lhs.m_mesh ) ||
- ((m_mesh == lhs.m_mesh)&&(m_OpenGLMatrix < lhs.m_OpenGLMatrix)));
-
- return result;
+ int startvertex, endvertex;
+ int startindex, endindex;
+
+ if(it.arraynum == (size_t)m_endarray) {
+ it.array = NULL;
+ it.vertex = NULL;
+ it.index = NULL;
+ it.startvertex = 0;
+ it.endvertex = 0;
+ it.totindex = 0;
+ }
+ else {
+ it.arraynum++;
+ it.array = m_displayArrays[it.arraynum];
+
+ startindex = 0;
+ endindex = (it.arraynum == (size_t)m_endarray)? m_endindex: it.array->m_index.size();
+ startvertex = 0;
+ endvertex = (it.arraynum == (size_t)m_endarray)? m_endvertex: it.array->m_vertex.size();
+
+ it.vertex = &it.array->m_vertex[0];
+ it.index = &it.array->m_index[startindex];
+ it.startvertex = startvertex;
+ it.endvertex = endvertex;
+ it.totindex = endindex-startindex;
+ }
}
-KX_MeshSlot::~KX_MeshSlot()
+bool RAS_MeshSlot::end(RAS_MeshSlot::iterator& it)
{
- if (m_DisplayList)
- m_DisplayList->Release();
+ return (it.array == NULL);
}
+RAS_DisplayArray *RAS_MeshSlot::CurrentDisplayArray()
+{
+ return m_currentArray;
+}
-RAS_MaterialBucket::RAS_MaterialBucket(RAS_IPolyMaterial* mat)
- :m_bModified(true)
+void RAS_MeshSlot::SetDisplayArray(int numverts)
{
- m_material = mat;
+ vector<RAS_DisplayArray*>::iterator it;
+ RAS_DisplayArray *darray = NULL;
+
+ for(it=m_displayArrays.begin(); it!=m_displayArrays.end(); it++) {
+ darray = *it;
+
+ if(darray->m_type == numverts) {
+ if(darray->m_index.size()+numverts >= RAS_DisplayArray::BUCKET_MAX_INDEX)
+ darray = NULL;
+ else if(darray->m_vertex.size()+numverts >= RAS_DisplayArray::BUCKET_MAX_VERTEX)
+ darray = NULL;
+ else
+ break;
+ }
+ else
+ darray = NULL;
+ }
+
+ if(!darray) {
+ darray = new RAS_DisplayArray();
+ darray->m_users = 1;
+
+ if(numverts == 2) darray->m_type = RAS_DisplayArray::LINE;
+ else if(numverts == 3) darray->m_type = RAS_DisplayArray::TRIANGLE;
+ else darray->m_type = RAS_DisplayArray::QUAD;
+
+ m_displayArrays.push_back(darray);
+
+ if(numverts == 2)
+ darray->m_type = RAS_DisplayArray::LINE;
+ else if(numverts == 3)
+ darray->m_type = RAS_DisplayArray::TRIANGLE;
+ else if(numverts == 4)
+ darray->m_type = RAS_DisplayArray::QUAD;
+
+ m_endarray = m_displayArrays.size()-1;
+ m_endvertex = 0;
+ m_endindex = 0;
+ }
+
+ m_currentArray = darray;
}
+void RAS_MeshSlot::AddPolygon(int numverts)
+{
+ SetDisplayArray(numverts);
+}
+int RAS_MeshSlot::AddVertex(const RAS_TexVert& tv)
+{
+ RAS_DisplayArray *darray;
+ int offset;
+
+ darray = m_currentArray;
+ darray->m_vertex.push_back(tv);
+ offset = darray->m_vertex.size()-1;
-RAS_IPolyMaterial* RAS_MaterialBucket::GetPolyMaterial() const
-{
- return m_material;
+ if(darray == m_displayArrays[m_endarray])
+ m_endvertex++;
+
+ return offset;
}
+void RAS_MeshSlot::AddPolygonVertex(int offset)
+{
+ RAS_DisplayArray *darray;
+
+ darray = m_currentArray;
+ darray->m_index.push_back(offset);
+
+ if(darray == m_displayArrays[m_endarray])
+ m_endindex++;
+}
+bool RAS_MeshSlot::Equals(RAS_MeshSlot *target)
+{
+ if(!m_OpenGLMatrix || !target->m_OpenGLMatrix)
+ return false;
+ if(m_pDeformer || target->m_pDeformer)
+ return false;
+ if(m_bVisible != target->m_bVisible)
+ return false;
+ if(m_bObjectColor != target->m_bObjectColor)
+ return false;
+ if(m_bObjectColor && !(m_RGBAcolor == target->m_RGBAcolor))
+ return false;
-void RAS_MaterialBucket::SetMeshSlot(KX_MeshSlot& ms)
+ return true;
+}
+
+bool RAS_MeshSlot::Join(RAS_MeshSlot *target, MT_Scalar distance)
{
- m_meshSlots.insert(ms);
+ vector<RAS_DisplayArray*>::iterator it;
+ iterator mit;
+ size_t i;
+
+ // verify if we can join
+ if(m_joinSlot || m_joinedSlots.size() || target->m_joinSlot)
+ return false;
+
+ if(!Equals(target))
+ return false;
+
+ MT_Vector3 co(&m_OpenGLMatrix[12]);
+ MT_Vector3 targetco(&target->m_OpenGLMatrix[12]);
+
+ if((co - targetco).length() > distance)
+ return false;
+
+ MT_Matrix4x4 mat(m_OpenGLMatrix);
+ MT_Matrix4x4 targetmat(target->m_OpenGLMatrix);
+ targetmat.invert();
+
+ MT_Matrix4x4 transform = targetmat*mat;
+
+ // m_mesh, clientobj
+ m_joinSlot = target;
+ m_joinInvTransform = transform;
+ m_joinInvTransform.invert();
+ target->m_joinedSlots.push_back(this);
+
+ MT_Matrix4x4 ntransform = m_joinInvTransform.transposed();
+ ntransform[0][3]= ntransform[1][3]= ntransform[2][3]= 0.0f;
+
+ for(begin(mit); !end(mit); next(mit))
+ for(i=mit.startvertex; i<mit.endvertex; i++)
+ mit.vertex[i].Transform(transform, ntransform);
+
+ for(it=m_displayArrays.begin(); it!=m_displayArrays.end(); it++) {
+ target->m_displayArrays.push_back(*it);
+ target->m_endarray++;
+ target->m_endvertex = target->m_displayArrays.back()->m_vertex.size();
+ target->m_endindex = target->m_displayArrays.back()->m_index.size();
+ }
+
+ if (m_DisplayList) {
+ m_DisplayList->Release();
+ m_DisplayList = NULL;
+ }
+ if (target->m_DisplayList) {
+ target->m_DisplayList->Release();
+ target->m_DisplayList = NULL;
+ }
+
+ return true;
+#if 0
+ return false;
+#endif
}
+bool RAS_MeshSlot::Split(bool force)
+{
+ list<RAS_MeshSlot*>::iterator jit;
+ RAS_MeshSlot *target = m_joinSlot;
+ vector<RAS_DisplayArray*>::iterator it, jt;
+ iterator mit;
+ size_t i, found0 = 0, found1 = 0;
+
+ if(target && (force || !Equals(target))) {
+ m_joinSlot = NULL;
+
+ for(jit=target->m_joinedSlots.begin(); jit!=target->m_joinedSlots.end(); jit++) {
+ if(*jit == this) {
+ target->m_joinedSlots.erase(jit);
+ found0 = 1;
+ break;
+ }
+ }
+
+ if(!found0)
+ abort();
+
+ for(it=m_displayArrays.begin(); it!=m_displayArrays.end(); it++) {
+ found1 = 0;
+ for(jt=target->m_displayArrays.begin(); jt!=target->m_displayArrays.end(); jt++) {
+ if(*jt == *it) {
+ target->m_displayArrays.erase(jt);
+ target->m_endarray--;
+ found1 = 1;
+ break;
+ }
+ }
+
+ if(!found1)
+ abort();
+ }
+
+ if(target->m_displayArrays.size()) {
+ target->m_endvertex = target->m_displayArrays.back()->m_vertex.size();
+ target->m_endindex = target->m_displayArrays.back()->m_index.size();
+ }
+ else {
+ target->m_endvertex = 0;
+ target->m_endindex = 0;
+ }
+
+ MT_Matrix4x4 ntransform = m_joinInvTransform.inverse().transposed();
+ ntransform[0][3]= ntransform[1][3]= ntransform[2][3]= 0.0f;
+
+ for(begin(mit); !end(mit); next(mit))
+ for(i=mit.startvertex; i<mit.endvertex; i++)
+ mit.vertex[i].Transform(m_joinInvTransform, ntransform);
+
+ if (target->m_DisplayList) {
+ target->m_DisplayList->Release();
+ target->m_DisplayList = NULL;
+ }
+
+ return true;
+ }
+ return false;
+}
-void RAS_MaterialBucket::RemoveMeshSlot(KX_MeshSlot& ms)
+bool RAS_MeshSlot::IsCulled()
{
- T_MeshSlotList::iterator it = m_meshSlots.find(ms);
+ list<RAS_MeshSlot*>::iterator it;
- if (!(it == m_meshSlots.end()))
- m_meshSlots.erase(it);
-
+ if(m_joinSlot)
+ return true;
+ if(!m_bCulled)
+ return false;
+
+ for(it=m_joinedSlots.begin(); it!=m_joinedSlots.end(); it++)
+ if(!(*it)->m_bCulled)
+ return false;
+
+ return true;
}
+/* material bucket sorting */
+
+struct RAS_MaterialBucket::less
+{
+ bool operator()(const RAS_MaterialBucket* x, const RAS_MaterialBucket* y) const
+ {
+ return *x->GetPolyMaterial() < *y->GetPolyMaterial();
+ }
+};
+
+/* material bucket */
+RAS_MaterialBucket::RAS_MaterialBucket(RAS_IPolyMaterial* mat)
+{
+ m_material = mat;
+}
-void RAS_MaterialBucket::MarkVisibleMeshSlot(KX_MeshSlot& ms,
- bool visible,
- bool color,
- const MT_Vector4& rgbavec)
+RAS_MaterialBucket::~RAS_MaterialBucket()
{
- T_MeshSlotList::iterator it = m_meshSlots.find(ms);
-
- assert (!(it == m_meshSlots.end()));
- (*it).m_bVisible = visible;
- (*it).m_bObjectColor = color;
- (*it).m_RGBAcolor= rgbavec;
+}
+
+RAS_IPolyMaterial* RAS_MaterialBucket::GetPolyMaterial() const
+{
+ return m_material;
}
bool RAS_MaterialBucket::IsAlpha() const
@@ -129,162 +469,132 @@ bool RAS_MaterialBucket::IsZSort() const
return (m_material->IsZSort());
}
-
-
-void RAS_MaterialBucket::StartFrame()
+RAS_MeshSlot* RAS_MaterialBucket::AddMesh(int numverts)
{
-}
+ RAS_MeshSlot *ms;
+ m_meshSlots.push_back(RAS_MeshSlot());
+
+ ms = &m_meshSlots.back();
+ ms->init(this, numverts);
+ return ms;
+}
-void RAS_MaterialBucket::EndFrame()
+RAS_MeshSlot* RAS_MaterialBucket::CopyMesh(RAS_MeshSlot *ms)
{
+ m_meshSlots.push_back(RAS_MeshSlot(*ms));
+
+ return &m_meshSlots.back();
}
-unsigned int RAS_MaterialBucket::NumMeshSlots()
+void RAS_MaterialBucket::RemoveMesh(RAS_MeshSlot* ms)
{
- return m_meshSlots.size();
+ list<RAS_MeshSlot>::iterator it;
+
+ for(it=m_meshSlots.begin(); it!=m_meshSlots.end(); it++) {
+ if(&*it == ms) {
+ m_meshSlots.erase(it);
+ return;
+ }
+ }
}
-RAS_MaterialBucket::T_MeshSlotList::iterator RAS_MaterialBucket::msBegin()
+list<RAS_MeshSlot>::iterator RAS_MaterialBucket::msBegin()
{
return m_meshSlots.begin();
}
-RAS_MaterialBucket::T_MeshSlotList::iterator RAS_MaterialBucket::msEnd()
+list<RAS_MeshSlot>::iterator RAS_MaterialBucket::msEnd()
{
return m_meshSlots.end();
}
bool RAS_MaterialBucket::ActivateMaterial(const MT_Transform& cameratrans, RAS_IRasterizer* rasty,
- RAS_IRenderTools *rendertools, RAS_IRasterizer::DrawMode &drawmode)
+ RAS_IRenderTools *rendertools)
{
- rendertools->SetViewMat(cameratrans);
-
if (!rasty->SetMaterial(*m_material))
return false;
if (m_material->UsesLighting(rasty))
- rendertools->ProcessLighting(RAS_IRenderTools::RAS_LIGHT_OBJECT_LAYER/*m_material->GetLightLayer()*/);
+ rendertools->ProcessLighting(RAS_IRenderTools::RAS_LIGHT_OBJECT_LAYER, cameratrans);
else
- rendertools->ProcessLighting(-1);
-
- if(rasty->GetDrawingMode() < RAS_IRasterizer::KX_SOLID)
- drawmode = RAS_IRasterizer::KX_MODE_LINES;
- else if(m_material->UsesTriangles())
- drawmode = RAS_IRasterizer::KX_MODE_TRIANGLES;
- else
- drawmode = RAS_IRasterizer::KX_MODE_QUADS;
+ rendertools->ProcessLighting(-1, cameratrans);
return true;
}
void RAS_MaterialBucket::RenderMeshSlot(const MT_Transform& cameratrans, RAS_IRasterizer* rasty,
- RAS_IRenderTools* rendertools, const KX_MeshSlot &ms, RAS_IRasterizer::DrawMode drawmode)
+ RAS_IRenderTools* rendertools, RAS_MeshSlot &ms)
{
- if (!ms.m_bVisible)
- return;
-
m_material->ActivateMeshSlot(ms, rasty);
- /* __NLA Do the deformation */
if (ms.m_pDeformer)
{
ms.m_pDeformer->Apply(m_material);
// KX_ReInstanceShapeFromMesh(ms.m_mesh); // Recompute the physics mesh. (Can't call KX_* from RAS_)
}
- /* End __NLA */
- if (rasty->GetDrawingMode() >= RAS_IRasterizer::KX_SOLID)
- ms.m_mesh->SortPolygons(cameratrans*MT_Transform(ms.m_OpenGLMatrix));
+ if(IsZSort() && rasty->GetDrawingMode() >= RAS_IRasterizer::KX_SOLID)
+ ms.m_mesh->SortPolygons(ms, cameratrans*MT_Transform(ms.m_OpenGLMatrix));
rendertools->PushMatrix();
- rendertools->applyTransform(rasty,ms.m_OpenGLMatrix,m_material->GetDrawingMode());
+ if (!ms.m_pDeformer || !ms.m_pDeformer->SkipVertexTransform())
+ {
+ rendertools->applyTransform(rasty,ms.m_OpenGLMatrix,m_material->GetDrawingMode());
+ }
if(rasty->QueryLists())
- {
if(ms.m_DisplayList)
ms.m_DisplayList->SetModified(ms.m_mesh->MeshModified());
- }
// verify if we can use display list, not for deformed object, and
// also don't create a new display list when drawing shadow buffers,
- // then it won't have texture coordinates for actual drawing
- KX_ListSlot **displaylist;
+ // then it won't have texture coordinates for actual drawing. also
+ // for zsort we can't make a display list, since the polygon order
+ // changes all the time.
if(ms.m_pDeformer)
- displaylist = 0;
+ ms.m_bDisplayList = false;
else if(!ms.m_DisplayList && rasty->GetDrawingMode() == RAS_IRasterizer::KX_SHADOW)
- displaylist = 0;
+ ms.m_bDisplayList = false;
+ else if (IsZSort())
+ ms.m_bDisplayList = false;
+ else if(m_material->UsesObjectColor() && ms.m_bObjectColor)
+ ms.m_bDisplayList = false;
else
- displaylist = &ms.m_DisplayList;
+ ms.m_bDisplayList = true;
- // Use the text-specific IndexPrimitives for text faces
+ // for text drawing using faces
if (m_material->GetDrawingMode() & RAS_IRasterizer::RAS_RENDER_3DPOLYGON_TEXT)
- {
- rasty->IndexPrimitives_3DText(
- ms.m_mesh->GetVertexCache(m_material),
- ms.m_mesh->GetIndexCache(m_material),
- drawmode,
- m_material,
- rendertools, // needed for textprinting on polys
- ms.m_bObjectColor,
- ms.m_RGBAcolor);
- }
-
- // for using glMultiTexCoord
- else if((m_material->GetFlag() & RAS_MULTITEX))
- {
- rasty->IndexPrimitivesMulti(
- ms.m_mesh->GetVertexCache(m_material),
- ms.m_mesh->GetIndexCache(m_material),
- drawmode,
- ms.m_bObjectColor,
- ms.m_RGBAcolor,
- displaylist);
- }
-
- // Use the normal IndexPrimitives
+ rasty->IndexPrimitives_3DText(ms, m_material, rendertools);
+ // for multitexturing
+ else if((m_material->GetFlag() & (RAS_MULTITEX|RAS_BLENDERGLSL)))
+ rasty->IndexPrimitivesMulti(ms);
+ // use normal IndexPrimitives
else
- {
- rasty->IndexPrimitives(
- ms.m_mesh->GetVertexCache(m_material),
- ms.m_mesh->GetIndexCache(m_material),
- drawmode,
- ms.m_bObjectColor,
- ms.m_RGBAcolor,
- displaylist);
- }
+ rasty->IndexPrimitives(ms);
- if(rasty->QueryLists()) {
+ if(rasty->QueryLists())
if(ms.m_DisplayList)
ms.m_mesh->SetMeshModified(false);
- }
rendertools->PopMatrix();
}
-void RAS_MaterialBucket::Render(const MT_Transform& cameratrans,
- RAS_IRasterizer* rasty,
- RAS_IRenderTools* rendertools)
+void RAS_MaterialBucket::Optimize(MT_Scalar distance)
{
- if (m_meshSlots.begin()== m_meshSlots.end())
- return;
-
- //rendertools->SetViewMat(cameratrans);
-
- //rasty->SetMaterial(*m_material);
+ /* TODO: still have to check before this works correct:
+ * - lightlayer, frontface, text, billboard
+ * - make it work with physics */
- RAS_IRasterizer::DrawMode drawmode;
- for (T_MeshSlotList::const_iterator it = m_meshSlots.begin();
- ! (it == m_meshSlots.end()); ++it)
- {
- rendertools->SetClientObject((*it).m_clientObj);
- while (ActivateMaterial(cameratrans, rasty, rendertools, drawmode)) {
- RenderMeshSlot(cameratrans, rasty, rendertools, *it, drawmode);
- }
- }
- // to reset the eventual GL_CW mode
- rendertools->SetClientObject(NULL);
+#if 0
+ list<RAS_MeshSlot>::iterator it;
+ list<RAS_MeshSlot>::iterator jt;
+
+ // greed joining on all following buckets
+ for(it=m_meshSlots.begin(); it!=m_meshSlots.end(); it++)
+ for(jt=it, jt++; jt!=m_meshSlots.end(); jt++)
+ jt->Join(&*it, distance);
+#endif
}
-
diff --git a/source/gameengine/Rasterizer/RAS_MaterialBucket.h b/source/gameengine/Rasterizer/RAS_MaterialBucket.h
index 4eef889c533..475f01d549a 100644
--- a/source/gameengine/Rasterizer/RAS_MaterialBucket.h
+++ b/source/gameengine/Rasterizer/RAS_MaterialBucket.h
@@ -36,30 +36,15 @@
#include "MT_Transform.h"
#include "RAS_IPolygonMaterial.h"
#include "RAS_IRasterizer.h"
-#include "RAS_Deformer.h" // __NLA
+#include "RAS_Deformer.h"
+
#include <vector>
-#include <map>
#include <set>
+#include <list>
using namespace std;
-/**
- * KX_VertexIndex
- */
-struct KX_VertexIndex {
-public:
- KX_VertexIndex(int size);
- void SetIndex(short loc,unsigned int index);
-
- // The vertex array
- short m_vtxarray;
- // An index into the vertex array for up to 4 verticies
- unsigned short m_indexarray[4];
- short m_size;
-};
+/* Display List Slot */
-/**
- * KX_ListSlot.
- */
class KX_ListSlot
{
protected:
@@ -80,91 +65,149 @@ public:
virtual void SetModified(bool mod)=0;
};
-/**
- * KX_MeshSlot.
- */
-class KX_MeshSlot
+class RAS_DisplayArray;
+class RAS_MeshSlot;
+class RAS_MeshMaterial;
+class RAS_MaterialBucket;
+
+/* An array with data used for OpenGL drawing */
+
+class RAS_DisplayArray
{
public:
- void* m_clientObj;
- RAS_Deformer* m_pDeformer; // __NLA
- double* m_OpenGLMatrix;
- class RAS_MeshObject* m_mesh;
- mutable bool m_bVisible; // for visibility
- mutable bool m_bObjectColor;
- mutable MT_Vector4 m_RGBAcolor;
- mutable KX_ListSlot* m_DisplayList; // for lists
- KX_MeshSlot() :
- m_pDeformer(NULL),
- m_bVisible(true),
- m_DisplayList(0)
- {
- }
- ~KX_MeshSlot();
- bool Less(const KX_MeshSlot& lhs) const;
+ vector<RAS_TexVert> m_vertex;
+ vector<unsigned short> m_index;
+ enum { LINE = 2, TRIANGLE = 3, QUAD = 4 } m_type;
+ //RAS_MeshSlot *m_origSlot;
+ int m_users;
+
+ enum { BUCKET_MAX_INDEX = 65535 };
+ enum { BUCKET_MAX_VERTEX = 65535 };
};
+/* Entry of a RAS_MeshObject into RAS_MaterialBucket */
-inline bool operator <( const KX_MeshSlot& rhs,const KX_MeshSlot& lhs)
+class RAS_MeshSlot
{
- return ( rhs.Less(lhs));
-}
+private:
+ // indices into display arrays
+ int m_startarray;
+ int m_endarray;
+ int m_startindex;
+ int m_endindex;
+ int m_startvertex;
+ int m_endvertex;
+ vector<RAS_DisplayArray*> m_displayArrays;
+
+ // for construction only
+ RAS_DisplayArray* m_currentArray;
+
+public:
+ // for rendering
+ RAS_MaterialBucket* m_bucket;
+ RAS_MeshObject* m_mesh;
+ void* m_clientObj;
+ RAS_Deformer* m_pDeformer;
+ double* m_OpenGLMatrix;
+ // visibility
+ bool m_bVisible;
+ bool m_bCulled;
+ // object color
+ bool m_bObjectColor;
+ MT_Vector4 m_RGBAcolor;
+ // display lists
+ KX_ListSlot* m_DisplayList;
+ bool m_bDisplayList;
+ // joined mesh slots
+ RAS_MeshSlot* m_joinSlot;
+ MT_Matrix4x4 m_joinInvTransform;
+ list<RAS_MeshSlot*> m_joinedSlots;
+
+ RAS_MeshSlot();
+ RAS_MeshSlot(const RAS_MeshSlot& slot);
+ virtual ~RAS_MeshSlot();
+
+ void init(RAS_MaterialBucket *bucket, int numverts);
+
+ struct iterator {
+ RAS_DisplayArray *array;
+ RAS_TexVert *vertex;
+ unsigned short *index;
+ size_t startvertex;
+ size_t endvertex;
+ size_t totindex;
+ size_t arraynum;
+ };
+
+ void begin(iterator& it);
+ void next(iterator& it);
+ bool end(iterator& it);
+
+ /* used during construction */
+ void SetDisplayArray(int numverts);
+ RAS_DisplayArray *CurrentDisplayArray();
+
+ void AddPolygon(int numverts);
+ int AddVertex(const RAS_TexVert& tv);
+ void AddPolygonVertex(int offset);
+
+ /* optimization */
+ bool Split(bool force=false);
+ bool Join(RAS_MeshSlot *target, MT_Scalar distance);
+ bool Equals(RAS_MeshSlot *target);
+ bool IsCulled();
+};
+
+/* Used by RAS_MeshObject, to point to it's slots in a bucket */
+
+class RAS_MeshMaterial
+{
+public:
+ RAS_MeshSlot *m_baseslot;
+ class RAS_MaterialBucket *m_bucket;
+
+ GEN_Map<GEN_HashedPtr,RAS_MeshSlot*> m_slots;
+};
+
+/* Contains a list of display arrays with the same material,
+ * and a mesh slot for each mesh that uses display arrays in
+ * this bucket */
-/**
- * Contains a list of meshs with the same material properties.
- */
class RAS_MaterialBucket
{
public:
- typedef std::set<KX_MeshSlot> T_MeshSlotList;
-
RAS_MaterialBucket(RAS_IPolyMaterial* mat);
- virtual ~RAS_MaterialBucket() {}
-
- void Render(const MT_Transform& cameratrans,
- class RAS_IRasterizer* rasty,
- class RAS_IRenderTools* rendertools);
+ virtual ~RAS_MaterialBucket();
+ /* Bucket Sorting */
+ struct less;
+ typedef set<RAS_MaterialBucket*, less> Set;
+
+ /* Material Properties */
RAS_IPolyMaterial* GetPolyMaterial() const;
- bool IsAlpha() const;
- bool IsZSort() const;
+ bool IsAlpha() const;
+ bool IsZSort() const;
- static void StartFrame();
- static void EndFrame();
-
- void SetMeshSlot(KX_MeshSlot& ms);
- void RemoveMeshSlot(KX_MeshSlot& ms);
- void MarkVisibleMeshSlot(KX_MeshSlot& ms,
- bool visible,
- bool color,
- const MT_Vector4& rgbavec);
-
- void RenderMeshSlot(const MT_Transform& cameratrans, RAS_IRasterizer* rasty,
- RAS_IRenderTools* rendertools, const KX_MeshSlot &ms, RAS_IRasterizer::DrawMode drawmode);
+ /* Rendering */
bool ActivateMaterial(const MT_Transform& cameratrans, RAS_IRasterizer* rasty,
- RAS_IRenderTools *rendertools, RAS_IRasterizer::DrawMode& drawmode);
-
- unsigned int NumMeshSlots();
- T_MeshSlotList::iterator msBegin();
- T_MeshSlotList::iterator msEnd();
-
- struct less
- {
- bool operator()(const RAS_MaterialBucket* x, const RAS_MaterialBucket* y) const
- {
- return *x->GetPolyMaterial() < *y->GetPolyMaterial();
- }
- };
+ RAS_IRenderTools *rendertools);
+ void RenderMeshSlot(const MT_Transform& cameratrans, RAS_IRasterizer* rasty,
+ RAS_IRenderTools* rendertools, RAS_MeshSlot &ms);
- typedef set<RAS_MaterialBucket*, less> Set;
+ /* Mesh Slot Access */
+ list<RAS_MeshSlot>::iterator msBegin();
+ list<RAS_MeshSlot>::iterator msEnd();
+
+ class RAS_MeshSlot* AddMesh(int numverts);
+ class RAS_MeshSlot* CopyMesh(class RAS_MeshSlot *ms);
+ void RemoveMesh(class RAS_MeshSlot* ms);
+ void Optimize(MT_Scalar distance);
+
private:
-
- T_MeshSlotList m_meshSlots;
- bool m_bModified;
+ list<RAS_MeshSlot> m_meshSlots;
RAS_IPolyMaterial* m_material;
- double* m_pOGLMatrix;
};
-#endif //__KX_BUCKET
+#endif //__RAS_MATERIAL_BUCKET
diff --git a/source/gameengine/Rasterizer/RAS_MeshObject.cpp b/source/gameengine/Rasterizer/RAS_MeshObject.cpp
index af5228e4c35..a907994bf57 100644
--- a/source/gameengine/Rasterizer/RAS_MeshObject.cpp
+++ b/source/gameengine/Rasterizer/RAS_MeshObject.cpp
@@ -26,10 +26,6 @@
* ***** END GPL LICENSE BLOCK *****
*/
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
#include "RAS_MeshObject.h"
#include "RAS_IRasterizer.h"
#include "MT_MinMax.h"
@@ -37,62 +33,84 @@
#include <algorithm>
+/* polygon sorting */
-STR_String RAS_MeshObject::s_emptyname = "";
+struct RAS_MeshObject::polygonSlot
+{
+ float m_z;
+ int m_index[4];
+
+ polygonSlot() {}
+ /* pnorm is the normal from the plane equation that the distance from is
+ * used to sort again. */
+ void get(const RAS_TexVert *vertexarray, const unsigned short *indexarray,
+ int offset, int nvert, const MT_Vector3& pnorm)
+ {
+ MT_Vector3 center(0, 0, 0);
+ int i;
+ for(i=0; i<nvert; i++) {
+ m_index[i] = indexarray[offset+i];
+ center += vertexarray[m_index[i]].getXYZ();
+ }
-KX_ArrayOptimizer::~KX_ArrayOptimizer()
-{
- for (vector<KX_VertexArray*>::iterator itv = m_VertexArrayCache1.begin();
- !(itv == m_VertexArrayCache1.end());++itv)
- {
- delete (*itv);
+ /* note we don't divide center by the number of vertices, since all
+ * polygons have the same number of vertices, and that we leave out
+ * the 4-th component of the plane equation since it is constant. */
+ m_z = MT_dot(pnorm, center);
}
- for (vector<KX_IndexArray*>::iterator iti = m_IndexArrayCache1.begin();
- !(iti == m_IndexArrayCache1.end());++iti)
+ void set(unsigned short *indexarray, int offset, int nvert)
{
- delete (*iti);
+ int i;
+
+ for(i=0; i<nvert; i++)
+ indexarray[offset+i] = m_index[i];
}
+};
- m_TriangleArrayCount.clear();
- m_VertexArrayCache1.clear();
- m_IndexArrayCache1.clear();
-
+struct RAS_MeshObject::backtofront
+{
+ bool operator()(const polygonSlot &a, const polygonSlot &b) const
+ {
+ return a.m_z < b.m_z;
+ }
+};
-}
+struct RAS_MeshObject::fronttoback
+{
+ bool operator()(const polygonSlot &a, const polygonSlot &b) const
+ {
+ return a.m_z > b.m_z;
+ }
+};
+/* mesh object */
+STR_String RAS_MeshObject::s_emptyname = "";
RAS_MeshObject::RAS_MeshObject(Mesh* mesh, int lightlayer)
- : m_bModified(true),
- m_lightlayer(lightlayer),
- m_zsort(false),
- m_MeshMod(true),
+ : m_lightlayer(lightlayer),
+ m_bModified(true),
+ m_bMeshModified(true),
m_mesh(mesh),
- m_class(0)
+ m_bDeformed(false)
{
}
-
-bool RAS_MeshObject::MeshModified()
-{
- return m_MeshMod;
-}
-
-
RAS_MeshObject::~RAS_MeshObject()
{
- for (vector<RAS_Polygon*>::iterator it=m_Polygons.begin();!(it==m_Polygons.end());it++)
- {
- delete (*it);
- }
+ vector<RAS_Polygon*>::iterator it;
- ClearArrayData();
+ for(it=m_Polygons.begin(); it!=m_Polygons.end(); it++)
+ delete (*it);
}
-
+bool RAS_MeshObject::MeshModified()
+{
+ return m_bMeshModified;
+}
unsigned int RAS_MeshObject::GetLightLayer()
{
@@ -108,18 +126,21 @@ int RAS_MeshObject::NumMaterials()
const STR_String& RAS_MeshObject::GetMaterialName(unsigned int matid)
{
- RAS_MaterialBucket* bucket = GetMaterialBucket(matid);
+ RAS_MeshMaterial* mmat = GetMeshMaterial(matid);
+
+ if(mmat)
+ return mmat->m_bucket->GetPolyMaterial()->GetMaterialName();
- return bucket?bucket->GetPolyMaterial()->GetMaterialName():s_emptyname;
+ return s_emptyname;
}
-RAS_MaterialBucket* RAS_MeshObject::GetMaterialBucket(unsigned int matid)
+RAS_MeshMaterial* RAS_MeshObject::GetMeshMaterial(unsigned int matid)
{
if (m_materials.size() > 0 && (matid < m_materials.size()))
{
- RAS_MaterialBucket::Set::const_iterator it = m_materials.begin();
+ list<RAS_MeshMaterial>::iterator it = m_materials.begin();
while (matid--) ++it;
- return *it;
+ return &*it;
}
return NULL;
@@ -134,21 +155,24 @@ int RAS_MeshObject::NumPolygons()
-RAS_Polygon* RAS_MeshObject::GetPolygon(int num)
+RAS_Polygon* RAS_MeshObject::GetPolygon(int num) const
{
return m_Polygons[num];
}
-RAS_MaterialBucket::Set::iterator RAS_MeshObject::GetFirstMaterial()
+
+ list<RAS_MeshMaterial>::iterator GetFirstMaterial();
+ list<RAS_MeshMaterial>::iterator GetLastMaterial();
+list<RAS_MeshMaterial>::iterator RAS_MeshObject::GetFirstMaterial()
{
return m_materials.begin();
}
-RAS_MaterialBucket::Set::iterator RAS_MeshObject::GetLastMaterial()
+list<RAS_MeshMaterial>::iterator RAS_MeshObject::GetLastMaterial()
{
return m_materials.end();
}
@@ -171,377 +195,238 @@ const STR_String& RAS_MeshObject::GetName()
const STR_String& RAS_MeshObject::GetTextureName(unsigned int matid)
{
- RAS_MaterialBucket* bucket = GetMaterialBucket(matid);
+ RAS_MeshMaterial* mmat = GetMeshMaterial(matid);
- return bucket?bucket->GetPolyMaterial()->GetTextureName():s_emptyname;
+ if(mmat)
+ return mmat->m_bucket->GetPolyMaterial()->GetTextureName();
+
+ return s_emptyname;
}
+RAS_MeshMaterial *RAS_MeshObject::GetMeshMaterial(RAS_IPolyMaterial *mat)
+{
+ list<RAS_MeshMaterial>::iterator mit;
+ /* find a mesh material */
+ for(mit = m_materials.begin(); mit != m_materials.end(); mit++)
+ if(mit->m_bucket->GetPolyMaterial() == mat)
+ return &*mit;
-void RAS_MeshObject::AddPolygon(RAS_Polygon* poly)
-{
- m_Polygons.push_back(poly);
+ return NULL;
}
+RAS_Polygon* RAS_MeshObject::AddPolygon(RAS_MaterialBucket *bucket, int numverts)
+{
+ RAS_MeshMaterial *mmat;
+ RAS_Polygon *poly;
+ RAS_MeshSlot *slot;
+ /* find a mesh material */
+ mmat = GetMeshMaterial(bucket->GetPolyMaterial());
+
+ /* none found, create a new one */
+ if(!mmat) {
+ RAS_MeshMaterial meshmat;
+ meshmat.m_bucket = bucket;
+ meshmat.m_baseslot = meshmat.m_bucket->AddMesh(numverts);
+ m_materials.push_back(meshmat);
+ mmat = &m_materials.back();
+ }
+
+ /* add it to the bucket, this also adds new display arrays */
+ slot = mmat->m_baseslot;
+ slot->AddPolygon(numverts);
+
+ /* create a new polygon */
+ RAS_DisplayArray *darray = slot->CurrentDisplayArray();
+ poly = new RAS_Polygon(bucket, darray, numverts);
+ m_Polygons.push_back(poly);
+
+ return poly;
+}
void RAS_MeshObject::DebugColor(unsigned int abgr)
{
-/*
- int numpolys = NumPolygons();
- for (int i=0;i<numpolys;i++)
- {
+ /*int numpolys = NumPolygons();
+
+ for (int i=0;i<numpolys;i++) {
RAS_Polygon* poly = m_polygons[i];
for (int v=0;v<poly->VertexCount();v++)
- {
- RAS_TexVert* vtx = poly->GetVertex(v);
- vtx->setDebugRGBA(abgr);
- }
+ RAS_TexVert* vtx = poly->GetVertex(v)->setDebugRGBA(abgr);
}
*/
- m_debugcolor = abgr;
+ /* m_debugcolor = abgr; */
}
void RAS_MeshObject::SetVertexColor(RAS_IPolyMaterial* mat,MT_Vector4 rgba)
{
- const vecVertexArray & vertexvec = GetVertexCache(mat);
-
- for (vector<KX_VertexArray*>::const_iterator it = vertexvec.begin(); it != vertexvec.end(); ++it)
- {
- KX_VertexArray::iterator vit;
- for (vit=(*it)->begin(); vit != (*it)->end(); vit++)
- {
- vit->SetRGBA(rgba);
- }
- }
-}
-
-void RAS_MeshObject::SchedulePoly(const KX_VertexIndex& idx,
- int numverts,
- RAS_IPolyMaterial* mat)
-{
- KX_ArrayOptimizer* ao = GetArrayOptimizer(mat);
-
- ao->m_IndexArrayCache1[idx.m_vtxarray]->push_back(idx.m_indexarray[0]);
- ao->m_IndexArrayCache1[idx.m_vtxarray]->push_back(idx.m_indexarray[1]);
- ao->m_IndexArrayCache1[idx.m_vtxarray]->push_back(idx.m_indexarray[2]);
-
- if (!mat->UsesTriangles())
- ao->m_IndexArrayCache1[idx.m_vtxarray]->push_back(idx.m_indexarray[3]);
-}
+ RAS_MeshMaterial *mmat = GetMeshMaterial(mat);
+ RAS_MeshSlot *slot = mmat->m_baseslot;
+ RAS_MeshSlot::iterator it;
+ size_t i;
+
+ for(slot->begin(it); !slot->end(it); slot->next(it))
+ for(i=it.startvertex; i<it.endvertex; i++)
+ it.vertex[i].SetRGBA(rgba);
+}
+
+void RAS_MeshObject::AddVertex(RAS_Polygon *poly, int i,
+ const MT_Point3& xyz,
+ const MT_Point2& uv,
+ const MT_Point2& uv2,
+ const MT_Vector4& tangent,
+ const unsigned int rgba,
+ const MT_Vector3& normal,
+ bool flat,
+ int origindex)
+{
+ RAS_TexVert texvert(xyz, uv, uv2, tangent, rgba, normal, flat, origindex);
+ RAS_MeshMaterial *mmat;
+ RAS_DisplayArray *darray;
+ RAS_MeshSlot *slot;
+ int offset;
+
+ mmat = GetMeshMaterial(poly->GetMaterial()->GetPolyMaterial());
+ slot = mmat->m_baseslot;
+ darray = slot->CurrentDisplayArray();
+ if(!flat) {
+ /* find vertices shared between faces, with the restriction
+ * that they exist in the same display array, and have the
+ * same uv coordinate etc */
+ vector<SharedVertex>& sharedmap = m_sharedvertex_map[origindex];
+ vector<SharedVertex>::iterator it;
-void RAS_MeshObject::ScheduleWireframePoly(const KX_VertexIndex& idx,
- int numverts,
- int edgecode,
- RAS_IPolyMaterial* mat)
-{
- //int indexpos = m_IndexArrayCount[idx.m_vtxarray];
- int edgetrace = 1<<(numverts-1);
- bool drawedge = (edgecode & edgetrace)!=0;
- edgetrace = 1;
- int prevvert = idx.m_indexarray[numverts-1];
- KX_ArrayOptimizer* ao = GetArrayOptimizer(mat);
-
- for (int v = 0; v < numverts; v++)
- {
- unsigned int curvert = idx.m_indexarray[v];
- if (drawedge)
+ for(it = sharedmap.begin(); it != sharedmap.end(); it++)
{
- ao->m_IndexArrayCache1[idx.m_vtxarray]->push_back(prevvert);
- ao->m_IndexArrayCache1[idx.m_vtxarray]->push_back(curvert);
+ if(it->m_darray != darray)
+ continue;
+ if(!it->m_darray->m_vertex[it->m_offset].closeTo(&texvert))
+ continue;
+
+ /* found one, add it and we're done */
+ if(poly->IsVisible())
+ slot->AddPolygonVertex(it->m_offset);
+ poly->SetVertexOffset(i, it->m_offset);
+ return;
}
- prevvert = curvert;
- drawedge = (edgecode & edgetrace)!=0;
- edgetrace*=2;
}
- //m_IndexArrayCount[idx.m_vtxarray] = indexpos;
-}
-int RAS_MeshObject::FindOrAddVertex(int vtxarray,
- const MT_Point3& xyz,
- const MT_Point2& uv,
- const MT_Point2& uv2,
- const MT_Vector4& tangent,
- const unsigned int rgbacolor,
- const MT_Vector3& normal,
- bool flat,
- RAS_IPolyMaterial* mat,
- int origindex)
-{
- KX_ArrayOptimizer* ao = GetArrayOptimizer(mat);
-
- int numverts = ao->m_VertexArrayCache1[vtxarray]->size();//m_VertexArrayCount[vtxarray];
- RAS_TexVert newvert(xyz,uv,uv2,tangent,rgbacolor,normal, flat? TV_CALCFACENORMAL: 0,origindex);
+ /* no shared vertex found, add a new one */
+ offset = slot->AddVertex(texvert);
+ if(poly->IsVisible())
+ slot->AddPolygonVertex(offset);
+ poly->SetVertexOffset(i, offset);
-#define KX_FIND_SHARED_VERTICES
-#ifdef KX_FIND_SHARED_VERTICES
if(!flat) {
- for (std::vector<RAS_MatArrayIndex>::iterator it = m_xyz_index_to_vertex_index_mapping[origindex].begin();
- it != m_xyz_index_to_vertex_index_mapping[origindex].end();
- it++)
- {
- if ((*it).m_arrayindex1 == ao->m_index1 &&
- (*it).m_array == vtxarray &&
- *(*it).m_matid == *mat &&
- (*ao->m_VertexArrayCache1[vtxarray])[(*it).m_index].closeTo(&newvert)
- )
- {
- return (*it).m_index;
- }
- }
+ SharedVertex shared;
+ shared.m_darray = darray;
+ shared.m_offset = offset;
+ m_sharedvertex_map[origindex].push_back(shared);
}
-#endif // KX_FIND_SHARED_VERTICES
-
- // no vertex found, add one
- ao->m_VertexArrayCache1[vtxarray]->push_back(newvert);
- // printf("(%f,%f,%f) ",xyz[0],xyz[1],xyz[2]);
- RAS_MatArrayIndex idx;
- idx.m_arrayindex1 = ao->m_index1;
- idx.m_array = vtxarray;
- idx.m_index = numverts;
- idx.m_matid = mat;
- m_xyz_index_to_vertex_index_mapping[origindex].push_back(idx);
-
- return numverts;
}
-vecVertexArray& RAS_MeshObject::GetVertexCache (RAS_IPolyMaterial* mat)
+int RAS_MeshObject::NumVertices(RAS_IPolyMaterial* mat)
{
- KX_ArrayOptimizer* ao = GetArrayOptimizer(mat);
-
- return ao->m_VertexArrayCache1;
-}
+ RAS_MeshMaterial *mmat;
+ RAS_MeshSlot *slot;
+ RAS_MeshSlot::iterator it;
+ size_t len = 0;
-int RAS_MeshObject::GetVertexArrayLength(RAS_IPolyMaterial* mat)
-{
- int len = 0;
-
- const vecVertexArray & vertexvec = GetVertexCache(mat);
- vector<KX_VertexArray*>::const_iterator it = vertexvec.begin();
+ mmat = GetMeshMaterial(mat);
+ slot = mmat->m_baseslot;
+ for(slot->begin(it); !slot->end(it); slot->next(it))
+ len += it.endvertex - it.startvertex;
- for (; it != vertexvec.end(); ++it)
- {
- len += (*it)->size();
- }
-
return len;
}
-
RAS_TexVert* RAS_MeshObject::GetVertex(unsigned int matid,
unsigned int index)
{
- RAS_TexVert* vertex = NULL;
-
- RAS_MaterialBucket* bucket = GetMaterialBucket(matid);
- if (bucket)
- {
- RAS_IPolyMaterial* mat = bucket->GetPolyMaterial();
- if (mat)
- {
- const vecVertexArray & vertexvec = GetVertexCache(mat);
- vector<KX_VertexArray*>::const_iterator it = vertexvec.begin();
-
- for (unsigned int len = 0; it != vertexvec.end(); ++it)
- {
- if (index < len + (*it)->size())
- {
- vertex = &(*(*it))[index-len];
- break;
- }
- else
- {
- len += (*it)->size();
- }
- }
- }
- }
-
- return vertex;
-}
-
-
+ RAS_MeshMaterial *mmat;
+ RAS_MeshSlot *slot;
+ RAS_MeshSlot::iterator it;
+ size_t len;
-const vecIndexArrays& RAS_MeshObject::GetIndexCache (RAS_IPolyMaterial* mat)
-{
- KX_ArrayOptimizer* ao = GetArrayOptimizer(mat);
-
- return ao->m_IndexArrayCache1;
-}
+ mmat = GetMeshMaterial(matid);
-
-
-KX_ArrayOptimizer* RAS_MeshObject::GetArrayOptimizer(RAS_IPolyMaterial* polymat)
-{
- KX_ArrayOptimizer** aop = m_matVertexArrayS[polymat];
-
- if(aop)
- return *aop;
+ if(!mmat)
+ return NULL;
- // didn't find array, but an array might already exist
- // for a material equal to this one
- for(int i=0;i<m_matVertexArrayS.size();i++) {
- RAS_IPolyMaterial *mat = (RAS_IPolyMaterial*)(m_matVertexArrayS.getKey(i)->getValue());
- if(*mat == *polymat) {
- m_matVertexArrayS.insert(polymat, *m_matVertexArrayS.at(i));
- return *m_matVertexArrayS.at(i);
- }
+ slot = mmat->m_baseslot;
+ len = 0;
+ for(slot->begin(it); !slot->end(it); slot->next(it)) {
+ if(index >= len + it.endvertex - it.startvertex)
+ len += it.endvertex - it.startvertex;
+ else
+ return &it.vertex[index - len];
}
-
- // create new array
- int numelements = m_matVertexArrayS.size();
- m_sortedMaterials.push_back(polymat);
-
- KX_ArrayOptimizer* ao = new KX_ArrayOptimizer(numelements);
- m_matVertexArrayS.insert(polymat, ao);
- return ao;
+ return NULL;
}
-
-
-void RAS_MeshObject::Bucketize(double* oglmatrix,
- void* clientobj,
- bool useObjectColor,
- const MT_Vector4& rgbavec)
+void RAS_MeshObject::AddMeshUser(void *clientobj)
{
- KX_MeshSlot ms;
- ms.m_clientObj = clientobj;
- ms.m_mesh = this;
- ms.m_OpenGLMatrix = oglmatrix;
- ms.m_bObjectColor = useObjectColor;
- ms.m_RGBAcolor = rgbavec;
-
- for (RAS_MaterialBucket::Set::iterator it = m_materials.begin();it!=m_materials.end();++it)
- {
- RAS_MaterialBucket* bucket = *it;
-// KX_ArrayOptimizer* oa = GetArrayOptimizer(bucket->GetPolyMaterial());
- bucket->SetMeshSlot(ms);
- }
+ list<RAS_MeshMaterial>::iterator it;
-}
-
-
-
-void RAS_MeshObject::MarkVisible(double* oglmatrix,
- void* clientobj,
- bool visible,
- bool useObjectColor,
- const MT_Vector4& rgbavec)
-{
- KX_MeshSlot ms;
- ms.m_clientObj = clientobj;
- ms.m_mesh = this;
- ms.m_OpenGLMatrix = oglmatrix;
- ms.m_RGBAcolor = rgbavec;
- ms.m_bObjectColor= useObjectColor;
-
- for (RAS_MaterialBucket::Set::iterator it = m_materials.begin();it!=m_materials.end();++it)
- {
- RAS_MaterialBucket* bucket = *it;
-// KX_ArrayOptimizer* oa = GetArrayOptimizer(bucket->GetPolyMaterial());
- bucket->MarkVisibleMeshSlot(ms,visible,useObjectColor,rgbavec);
+ for(it = m_materials.begin();it!=m_materials.end();++it) {
+ /* always copy from the base slot, which is never removed
+ * since new objects can be created with the same mesh data */
+ RAS_MeshSlot *ms = it->m_bucket->CopyMesh(it->m_baseslot);
+ ms->m_clientObj = clientobj;
+ it->m_slots.insert(clientobj, ms);
}
}
-
-void RAS_MeshObject::RemoveFromBuckets(double* oglmatrix,
- void* clientobj)
+void RAS_MeshObject::UpdateBuckets(void* clientobj,
+ double* oglmatrix,
+ bool useObjectColor,
+ const MT_Vector4& rgbavec,
+ bool visible,
+ bool culled)
{
- KX_MeshSlot ms;
- ms.m_clientObj = clientobj;
- ms.m_mesh = this;
- ms.m_OpenGLMatrix = oglmatrix;
-
- for (RAS_MaterialBucket::Set::iterator it = m_materials.begin();it!=m_materials.end();++it)
- {
- RAS_MaterialBucket* bucket = *it;
-// RAS_IPolyMaterial* polymat = bucket->GetPolyMaterial();
- //KX_ArrayOptimizer* oa = GetArrayOptimizer(polymat);
- bucket->RemoveMeshSlot(ms);
- }
-
-}
-
-
+ list<RAS_MeshMaterial>::iterator it;
-/*
- * RAS_MeshObject::GetVertex returns the vertex located somewhere in the vertexpool
- * it is the clients responsibility to make sure the array and index are valid
- */
-RAS_TexVert* RAS_MeshObject::GetVertex(short array,
- unsigned int index,
- RAS_IPolyMaterial* polymat)
-{
- KX_ArrayOptimizer* ao = GetArrayOptimizer(polymat);
- return &((*(ao->m_VertexArrayCache1)[array])[index]);
-}
+ for(it = m_materials.begin();it!=m_materials.end();++it) {
+ RAS_MeshSlot **msp = it->m_slots[clientobj];
+ if(!msp)
+ continue;
+ RAS_MeshSlot *ms = *msp;
-void RAS_MeshObject::ClearArrayData()
-{
- for (int i=0;i<m_matVertexArrayS.size();i++) {
- KX_ArrayOptimizer** ao = m_matVertexArrayS.at(i);
-
- // we have duplicate entries, only free once
- for(int j=i+1;j<m_matVertexArrayS.size();j++) {
- if(ao == m_matVertexArrayS.at(j)) {
- ao = NULL;
- break;
- }
- }
+ ms->m_mesh = this;
+ ms->m_OpenGLMatrix = oglmatrix;
+ ms->m_bObjectColor = useObjectColor;
+ ms->m_RGBAcolor = rgbavec;
+ ms->m_bVisible = visible;
+ ms->m_bCulled = culled || !visible;
- if (ao)
- delete *ao;
+ /* split if necessary */
+ ms->Split();
}
}
-
-
-/**
- * RAS_MeshObject::CreateNewVertices creates vertices within sorted pools of vertices that share same material
-*/
-int RAS_MeshObject::FindVertexArray(int numverts,
- RAS_IPolyMaterial* polymat)
+void RAS_MeshObject::RemoveFromBuckets(void *clientobj)
{
-// bool found=false;
- int array=-1;
+ list<RAS_MeshMaterial>::iterator it;
- KX_ArrayOptimizer* ao = GetArrayOptimizer(polymat);
+ for(it = m_materials.begin();it!=m_materials.end();++it) {
+ RAS_MeshSlot **msp = it->m_slots[clientobj];
- for (unsigned int i=0;i<ao->m_VertexArrayCache1.size();i++)
- {
- if ( (ao->m_TriangleArrayCount[i] + (numverts-2)) < BUCKET_MAX_TRIANGLES)
- {
- if((ao->m_VertexArrayCache1[i]->size()+numverts < BUCKET_MAX_INDICES))
- {
- array = i;
- ao->m_TriangleArrayCount[array]+=numverts-2;
- break;
- }
- }
- }
+ if(!msp)
+ continue;
- if (array == -1)
- {
- array = ao->m_VertexArrayCache1.size();
- vector<RAS_TexVert>* va = new vector<RAS_TexVert>;
- ao->m_VertexArrayCache1.push_back(va);
- KX_IndexArray *ia = new KX_IndexArray();
- ao->m_IndexArrayCache1.push_back(ia);
- ao->m_TriangleArrayCount.push_back(numverts-2);
- }
+ RAS_MeshSlot *ms = *msp;
- return array;
+ it->m_bucket->RemoveMesh(ms);
+ it->m_slots.remove(clientobj);
+ }
}
-
-
-
//void RAS_MeshObject::Transform(const MT_Transform& trans)
//{
//m_trans.translate(MT_Vector3(0,0,1));//.operator *=(trans);
@@ -563,71 +448,7 @@ void RAS_MeshObject::RelativeTransform(const MT_Vector3& vec)
}
*/
-
-
-void RAS_MeshObject::UpdateMaterialList()
-{
- m_materials.clear();
- unsigned int numpolys = m_Polygons.size();
- // for all polygons, find out which material they use, and add it to the set of materials
- for (unsigned int i=0;i<numpolys;i++)
- {
- m_materials.insert(m_Polygons[i]->GetMaterial());
- }
-}
-
-struct RAS_MeshObject::polygonSlot
-{
- float m_z;
- int m_index[4];
-
- polygonSlot() {}
-
- /* pnorm is the normal from the plane equation that the distance from is
- * used to sort again. */
- void get(const KX_VertexArray& vertexarray, const KX_IndexArray& indexarray,
- int offset, int nvert, const MT_Vector3& pnorm)
- {
- MT_Vector3 center(0, 0, 0);
- int i;
-
- for(i=0; i<nvert; i++) {
- m_index[i] = indexarray[offset+i];
- center += vertexarray[m_index[i]].getLocalXYZ();
- }
-
- /* note we don't divide center by the number of vertices, since all
- * polygons have the same number of vertices, and that we leave out
- * the 4-th component of the plane equation since it is constant. */
- m_z = MT_dot(pnorm, center);
- }
-
- void set(KX_IndexArray& indexarray, int offset, int nvert)
- {
- int i;
-
- for(i=0; i<nvert; i++)
- indexarray[offset+i] = m_index[i];
- }
-};
-
-struct RAS_MeshObject::backtofront
-{
- bool operator()(const polygonSlot &a, const polygonSlot &b) const
- {
- return a.m_z < b.m_z;
- }
-};
-
-struct RAS_MeshObject::fronttoback
-{
- bool operator()(const polygonSlot &a, const polygonSlot &b) const
- {
- return a.m_z > b.m_z;
- }
-};
-
-void RAS_MeshObject::SortPolygons(const MT_Transform &transform)
+void RAS_MeshObject::SortPolygons(RAS_MeshSlot& ms, const MT_Transform &transform)
{
// Limitations: sorting is quite simple, and handles many
// cases wrong, partially due to polygons being sorted per
@@ -645,43 +466,34 @@ void RAS_MeshObject::SortPolygons(const MT_Transform &transform)
// to avoid excessive state changes while drawing. e) would
// require splitting polygons.
- if (!m_zsort)
- return;
+ RAS_MeshSlot::iterator it;
+ size_t j;
- // Extract camera Z plane...
- const MT_Vector3 pnorm(transform.getBasis()[2]);
- // unneeded: const MT_Scalar pval = transform.getOrigin()[2];
+ for(ms.begin(it); !ms.end(it); ms.next(it)) {
+ unsigned int nvert = (int)it.array->m_type;
+ unsigned int totpoly = it.totindex/nvert;
- for (RAS_MaterialBucket::Set::iterator it = m_materials.begin();it!=m_materials.end();++it)
- {
- if(!(*it)->IsZSort())
+ if(totpoly <= 1)
+ continue;
+ if(it.array->m_type == RAS_DisplayArray::LINE)
continue;
- RAS_IPolyMaterial *mat = (*it)->GetPolyMaterial();
- KX_ArrayOptimizer* ao = GetArrayOptimizer(mat);
-
- vecIndexArrays& indexarrays = ao->m_IndexArrayCache1;
- vecVertexArray& vertexarrays = ao->m_VertexArrayCache1;
- unsigned int i, j, nvert = (mat->UsesTriangles())? 3: 4;
-
- for(i=0; i<indexarrays.size(); i++) {
- KX_IndexArray& indexarray = *indexarrays[i];
- KX_VertexArray& vertexarray = *vertexarrays[i];
+ // Extract camera Z plane...
+ const MT_Vector3 pnorm(transform.getBasis()[2]);
+ // unneeded: const MT_Scalar pval = transform.getOrigin()[2];
- unsigned int totpoly = indexarray.size()/nvert;
- vector<polygonSlot> slots(totpoly);
+ vector<polygonSlot> slots(totpoly);
- /* get indices and z into temporary array */
- for(j=0; j<totpoly; j++)
- slots[j].get(vertexarray, indexarray, j*nvert, nvert, pnorm);
+ /* get indices and z into temporary array */
+ for(j=0; j<totpoly; j++)
+ slots[j].get(it.vertex, it.index, j*nvert, nvert, pnorm);
- /* sort (stable_sort might be better, if flickering happens?) */
- std::sort(slots.begin(), slots.end(), backtofront());
+ /* sort (stable_sort might be better, if flickering happens?) */
+ std::sort(slots.begin(), slots.end(), backtofront());
- /* get indices from temporary array again */
- for(j=0; j<totpoly; j++)
- slots[j].set(indexarray, j*nvert, nvert);
- }
+ /* get indices from temporary array again */
+ for(j=0; j<totpoly; j++)
+ slots[j].set(it.index, j*nvert, nvert);
}
}
@@ -690,37 +502,8 @@ void RAS_MeshObject::SchedulePolygons(int drawingmode)
{
if (m_bModified)
{
- int i, numpolys = m_Polygons.size();
-
- for (RAS_MaterialBucket::Set::iterator it = m_materials.begin();it!=m_materials.end();++it)
- if ((*it)->IsZSort())
- m_zsort = true;
-
- if (drawingmode == RAS_IRasterizer::KX_WIREFRAME)
- {
- for (i=0;i<numpolys;i++)
- {
- RAS_Polygon* poly = m_Polygons[i];
- if (poly->IsVisible())
- ScheduleWireframePoly(poly->GetVertexIndexBase(),poly->VertexCount(),poly->GetEdgeCode(),
- poly->GetMaterial()->GetPolyMaterial());
-
- }
- m_zsort = false;
- }
- else
- {
- for (i=0;i<numpolys;i++)
- {
- RAS_Polygon* poly = m_Polygons[i];
- if (poly->IsVisible())
- SchedulePoly(poly->GetVertexIndexBase(),poly->VertexCount(),
- poly->GetMaterial()->GetPolyMaterial());
- }
- }
-
m_bModified = false;
- m_MeshMod = true;
+ m_bMeshModified = true;
}
}
diff --git a/source/gameengine/Rasterizer/RAS_MeshObject.h b/source/gameengine/Rasterizer/RAS_MeshObject.h
index 99806666fa6..0d35a2f402b 100644
--- a/source/gameengine/Rasterizer/RAS_MeshObject.h
+++ b/source/gameengine/Rasterizer/RAS_MeshObject.h
@@ -36,6 +36,7 @@
#include <vector>
#include <set>
+#include <list>
#include "RAS_Polygon.h"
#include "RAS_MaterialBucket.h"
@@ -44,194 +45,71 @@
#include "GEN_HashedPtr.h"
struct Mesh;
-/**
- * This class holds an array of vertices and indicies.
- */
-class KX_ArrayOptimizer
-{
-public:
- KX_ArrayOptimizer(int index)
- : m_index1(index)
- {};
- virtual ~KX_ArrayOptimizer();
-
- vector<KX_VertexArray*> m_VertexArrayCache1;
- vector<int> m_TriangleArrayCount;
- vector<KX_IndexArray*> m_IndexArrayCache1;
-
- /**
- order in which they are stored into the mesh
- */
- int m_index1;
-};
-
-/**
- * This struct holds a triangle.
- */
-struct RAS_TriangleIndex
-{
-public:
- int m_index[3];
- int m_array;
- RAS_IPolyMaterial* m_matid;
- bool m_collider;
-};
-
-/**
- * This class looks horribly broken. Only m_matid is used, and
- * m_matid is a (int) RAS_IPolyMaterial*.
- * --> m_matid == lhs.m_matid should be *m_matid == *lhs.m_matid
- */
-class RAS_MatArrayIndex
-{
-public:
- int m_arrayindex1;
- RAS_IPolyMaterial* m_matid;
- int m_array;
- int m_index;
-
-/*
- inline bool Less(const RAS_MatArrayIndex& lhs) const {
- bool result =
- ( (m_matid < lhs.m_matid) ||
- ((m_matid == lhs.m_matid)&&(m_array < lhs.m_array)) ||
- ((m_matid == lhs.m_matid) && (m_array == lhs.m_array) &&
- (m_index < lhs.m_index))
-
- );
- return result;
-
- }
-*/
-
-};
-/*
-inline bool operator <( const RAS_MatArrayIndex& rhs,const RAS_MatArrayIndex& lhs)
-{
- return ( rhs.Less(lhs));
-}*/
+/* RAS_MeshObject is a mesh used for rendering. It stores polygons,
+ * but the actual vertices and index arrays are stored in material
+ * buckets, referenced by the list of RAS_MeshMaterials. */
-/**
- * RAS_MeshObject stores mesh data for the renderer.
- */
class RAS_MeshObject
{
-
- // GEN_Map<class RAS_IPolyMaterial,KX_ArrayOptimizer*> m_matVertexArrayS;
- //vector<class RAS_IPolyMaterial*,KX_ArrayOptimizer> m_vertexArrays;
- virtual KX_ArrayOptimizer* GetArrayOptimizer(RAS_IPolyMaterial* polymat);
- //vector<RAS_Polygon*> m_polygons;
-
+private:
unsigned int m_debugcolor;
- bool m_bModified;
int m_lightlayer;
-
- vector<class RAS_Polygon*> m_Polygons;
+
+ bool m_bModified;
+ bool m_bMeshModified;
+
STR_String m_name;
static STR_String s_emptyname;
- bool m_zsort;
- bool m_MeshMod;
+ vector<class RAS_Polygon*> m_Polygons;
+
+ /* polygon sorting */
struct polygonSlot;
struct backtofront;
struct fronttoback;
- void SchedulePoly(
- const KX_VertexIndex& idx,
- int numverts,
- RAS_IPolyMaterial* mat
- );
-
- void ScheduleWireframePoly(
- const KX_VertexIndex& idx,
- int numverts,
- int edgecode,
- RAS_IPolyMaterial* mat
- );
-
protected:
- enum { BUCKET_MAX_INDICES = 65535 };//2048};//8192};
- enum { BUCKET_MAX_TRIANGLES = 65535 };
-
- GEN_Map<GEN_HashedPtr,KX_ArrayOptimizer*> m_matVertexArrayS;
-
- RAS_MaterialBucket::Set m_materials;
+ list<RAS_MeshMaterial> m_materials;
Mesh* m_mesh;
+ bool m_bDeformed;
+
public:
// for now, meshes need to be in a certain layer (to avoid sorting on lights in realtime)
RAS_MeshObject(Mesh* mesh, int lightlayer);
virtual ~RAS_MeshObject();
- vector<RAS_IPolyMaterial*> m_sortedMaterials;
- vector<vector<RAS_MatArrayIndex> > m_xyz_index_to_vertex_index_mapping;
- vector<RAS_TriangleIndex > m_triangle_indices;
-
- int m_class;
- unsigned int GetLightLayer();
+ bool IsDeformed() { return m_bDeformed; }
+
+ /* materials */
int NumMaterials();
const STR_String& GetMaterialName(unsigned int matid);
- RAS_MaterialBucket* GetMaterialBucket(unsigned int matid);
const STR_String& GetTextureName(unsigned int matid);
- virtual void AddPolygon(RAS_Polygon* poly);
- void UpdateMaterialList();
-
- int NumPolygons();
- RAS_Polygon* GetPolygon(int num);
-
- virtual void Bucketize(
- double* oglmatrix,
- void* clientobj,
- bool useObjectColor,
- const MT_Vector4& rgbavec
- );
- void RemoveFromBuckets(
- double* oglmatrix,
- void* clientobj
- );
+ RAS_MeshMaterial* GetMeshMaterial(unsigned int matid);
+ RAS_MeshMaterial* GetMeshMaterial(RAS_IPolyMaterial *mat);
- void MarkVisible(
- double* oglmatrix,
- void* clientobj,
- bool visible,
- bool useObjectColor,
- const MT_Vector4& rgbavec
- );
+ list<RAS_MeshMaterial>::iterator GetFirstMaterial();
+ list<RAS_MeshMaterial>::iterator GetLastMaterial();
- void DebugColor(unsigned int abgr);
- void SetVertexColor(RAS_IPolyMaterial* mat,MT_Vector4 rgba);
-
- /**
- * Sorts the polygons by their transformed z values.
- */
- void SortPolygons(const MT_Transform &transform);
+ unsigned int GetLightLayer();
- void SchedulePolygons(int drawingmode);
+ /* name */
+ void SetName(STR_String name);
+ const STR_String& GetName();
- void ClearArrayData();
-
- RAS_MaterialBucket::Set::iterator GetFirstMaterial();
- RAS_MaterialBucket::Set::iterator GetLastMaterial();
-
- virtual RAS_TexVert* GetVertex(
- short array,
- unsigned int index,
- RAS_IPolyMaterial* polymat
- );
-
- virtual int FindVertexArray(
- int numverts,
- RAS_IPolyMaterial* polymat
- );
+ /* modification state */
+ bool MeshModified();
+ void SetMeshModified(bool v){m_bMeshModified = v;}
+ /* original blender mesh */
+ Mesh* GetMesh() { return m_mesh; }
+
+ /* mesh construction */
- // find (and share) or add vertices
- // for some speedup, only the last 20 added vertices are searched for equality
-
- virtual int FindOrAddVertex(
- int vtxarray,
+ virtual RAS_Polygon* AddPolygon(RAS_MaterialBucket *bucket, int numverts);
+ virtual void AddVertex(RAS_Polygon *poly, int i,
const MT_Point3& xyz,
const MT_Point2& uv,
const MT_Point2& uv2,
@@ -239,27 +117,43 @@ public:
const unsigned int rgbacolor,
const MT_Vector3& normal,
bool flat,
- RAS_IPolyMaterial* mat,
- int origindex
- );
-
- vecVertexArray& GetVertexCache (RAS_IPolyMaterial* mat);
+ int origindex);
+
+ void SchedulePolygons(int drawingmode);
+
+ /* vertex and polygon acces */
+ int NumVertices(RAS_IPolyMaterial* mat);
+ RAS_TexVert* GetVertex(unsigned int matid, unsigned int index);
+
+ int NumPolygons();
+ RAS_Polygon* GetPolygon(int num) const;
- int GetVertexArrayLength(RAS_IPolyMaterial* mat);
+ /* buckets */
+ virtual void AddMeshUser(void *clientobj);
+ virtual void UpdateBuckets(
+ void* clientobj,
+ double* oglmatrix,
+ bool useObjectColor,
+ const MT_Vector4& rgbavec,
+ bool visible,
+ bool culled);
- RAS_TexVert* GetVertex(
- unsigned int matid,
- unsigned int index
- );
+ void RemoveFromBuckets(void *clientobj);
- const vecIndexArrays& GetIndexCache (RAS_IPolyMaterial* mat);
- void SetName(STR_String name);
- const STR_String& GetName();
+ /* colors */
+ void DebugColor(unsigned int abgr);
+ void SetVertexColor(RAS_IPolyMaterial* mat,MT_Vector4 rgba);
+
+ /* polygon sorting by Z for alpha */
+ void SortPolygons(RAS_MeshSlot& ms, const MT_Transform &transform);
- bool MeshModified();
- void SetMeshModified(bool v){m_MeshMod = v;}
- Mesh* GetMesh() { return m_mesh; }
+ /* for construction to find shared vertices */
+ struct SharedVertex {
+ RAS_DisplayArray *m_darray;
+ int m_offset;
+ };
+ vector<vector<SharedVertex> > m_sharedvertex_map;
};
#endif //__RAS_MESHOBJECT
diff --git a/source/gameengine/Rasterizer/RAS_OpenGLFilters/RAS_Blur2DFilter.h b/source/gameengine/Rasterizer/RAS_OpenGLFilters/RAS_Blur2DFilter.h
index 33c4b3faab0..81821639489 100644
--- a/source/gameengine/Rasterizer/RAS_OpenGLFilters/RAS_Blur2DFilter.h
+++ b/source/gameengine/Rasterizer/RAS_OpenGLFilters/RAS_Blur2DFilter.h
@@ -28,7 +28,7 @@
#ifndef __RAS_BLUR2DFILTER
#define __RAS_BLUR2DFILTER
-char * BlurFragmentShader=STRINGIFY(
+const char * BlurFragmentShader=STRINGIFY(
uniform sampler2D bgl_RenderedTexture;
uniform vec2 bgl_TextureCoordinateOffset[9];
diff --git a/source/gameengine/Rasterizer/RAS_OpenGLFilters/RAS_Dilation2DFilter.h b/source/gameengine/Rasterizer/RAS_OpenGLFilters/RAS_Dilation2DFilter.h
index c41e5ac06af..2ee75396f42 100644
--- a/source/gameengine/Rasterizer/RAS_OpenGLFilters/RAS_Dilation2DFilter.h
+++ b/source/gameengine/Rasterizer/RAS_OpenGLFilters/RAS_Dilation2DFilter.h
@@ -28,7 +28,7 @@
#ifndef __RAS_DILATION2DFILTER
#define __RAS_DILATION2DFILTER
-char * DilationFragmentShader=STRINGIFY(
+const char * DilationFragmentShader=STRINGIFY(
uniform sampler2D bgl_RenderedTexture;
uniform vec2 bgl_TextureCoordinateOffset[9];
diff --git a/source/gameengine/Rasterizer/RAS_OpenGLFilters/RAS_Erosion2DFilter.h b/source/gameengine/Rasterizer/RAS_OpenGLFilters/RAS_Erosion2DFilter.h
index 2bb357c958a..d3ce829bab0 100644
--- a/source/gameengine/Rasterizer/RAS_OpenGLFilters/RAS_Erosion2DFilter.h
+++ b/source/gameengine/Rasterizer/RAS_OpenGLFilters/RAS_Erosion2DFilter.h
@@ -28,7 +28,7 @@
#ifndef __RAS_EROSION2DFILTER
#define __RAS_EROSION2DFILTER
-char * ErosionFragmentShader=STRINGIFY(
+const char * ErosionFragmentShader=STRINGIFY(
uniform sampler2D bgl_RenderedTexture;
uniform vec2 bgl_TextureCoordinateOffset[9];
diff --git a/source/gameengine/Rasterizer/RAS_OpenGLFilters/RAS_GrayScale2DFilter.h b/source/gameengine/Rasterizer/RAS_OpenGLFilters/RAS_GrayScale2DFilter.h
index 7324edd4e92..ae51308e9a4 100644
--- a/source/gameengine/Rasterizer/RAS_OpenGLFilters/RAS_GrayScale2DFilter.h
+++ b/source/gameengine/Rasterizer/RAS_OpenGLFilters/RAS_GrayScale2DFilter.h
@@ -28,7 +28,7 @@
#ifndef __RAS_GRAYSCALE2DFILTER
#define __RAS_GRAYSCALE2DFILTER
-char * GrayScaleFragmentShader=STRINGIFY(
+const char * GrayScaleFragmentShader=STRINGIFY(
uniform sampler2D bgl_RenderedTexture;
void main(void)
diff --git a/source/gameengine/Rasterizer/RAS_OpenGLFilters/RAS_Invert2DFilter.h b/source/gameengine/Rasterizer/RAS_OpenGLFilters/RAS_Invert2DFilter.h
index 5d90fe3475b..f723f619f68 100644
--- a/source/gameengine/Rasterizer/RAS_OpenGLFilters/RAS_Invert2DFilter.h
+++ b/source/gameengine/Rasterizer/RAS_OpenGLFilters/RAS_Invert2DFilter.h
@@ -28,7 +28,7 @@
#ifndef __RAS_INVERT2DFILTER
#define __RAS_INVERT2DFILTER
-char * InvertFragmentShader=STRINGIFY(
+const char * InvertFragmentShader=STRINGIFY(
uniform sampler2D bgl_RenderedTexture;
void main(void)
diff --git a/source/gameengine/Rasterizer/RAS_OpenGLFilters/RAS_Laplacian2DFilter.h b/source/gameengine/Rasterizer/RAS_OpenGLFilters/RAS_Laplacian2DFilter.h
index cbe926976df..bfbb40b2fc9 100644
--- a/source/gameengine/Rasterizer/RAS_OpenGLFilters/RAS_Laplacian2DFilter.h
+++ b/source/gameengine/Rasterizer/RAS_OpenGLFilters/RAS_Laplacian2DFilter.h
@@ -28,7 +28,7 @@
#ifndef __RAS_LAPLACION2DFILTER
#define __RAS_LAPLACION2DFILTER
-char * LaplacionFragmentShader=STRINGIFY(
+const char * LaplacionFragmentShader=STRINGIFY(
uniform sampler2D bgl_RenderedTexture;
uniform vec2 bgl_TextureCoordinateOffset[9];
diff --git a/source/gameengine/Rasterizer/RAS_OpenGLFilters/RAS_Prewitt2DFilter.h b/source/gameengine/Rasterizer/RAS_OpenGLFilters/RAS_Prewitt2DFilter.h
index 7cd1082e5e3..0cbf8a7a802 100644
--- a/source/gameengine/Rasterizer/RAS_OpenGLFilters/RAS_Prewitt2DFilter.h
+++ b/source/gameengine/Rasterizer/RAS_OpenGLFilters/RAS_Prewitt2DFilter.h
@@ -28,7 +28,7 @@
#ifndef __RAS_PREWITT2DFILTER
#define __RAS_PREWITT2DFILTER
-char * PrewittFragmentShader=STRINGIFY(
+const char * PrewittFragmentShader=STRINGIFY(
uniform sampler2D bgl_RenderedTexture;
uniform vec2 bgl_TextureCoordinateOffset[9];
diff --git a/source/gameengine/Rasterizer/RAS_OpenGLFilters/RAS_Sepia2DFilter.h b/source/gameengine/Rasterizer/RAS_OpenGLFilters/RAS_Sepia2DFilter.h
index d1c16f39823..ca431af4cd7 100644
--- a/source/gameengine/Rasterizer/RAS_OpenGLFilters/RAS_Sepia2DFilter.h
+++ b/source/gameengine/Rasterizer/RAS_OpenGLFilters/RAS_Sepia2DFilter.h
@@ -28,7 +28,7 @@
#ifndef __RAS_SEPIA2DFILTER
#define __RAS_SEPIA2DFILTER
-char * SepiaFragmentShader=STRINGIFY(
+const char * SepiaFragmentShader=STRINGIFY(
uniform sampler2D bgl_RenderedTexture;
void main(void)
diff --git a/source/gameengine/Rasterizer/RAS_OpenGLFilters/RAS_Sharpen2DFilter.h b/source/gameengine/Rasterizer/RAS_OpenGLFilters/RAS_Sharpen2DFilter.h
index 14e0be6df9d..5a9661e2617 100644
--- a/source/gameengine/Rasterizer/RAS_OpenGLFilters/RAS_Sharpen2DFilter.h
+++ b/source/gameengine/Rasterizer/RAS_OpenGLFilters/RAS_Sharpen2DFilter.h
@@ -28,7 +28,7 @@
#ifndef __RAS_SHARPEN2DFILTER
#define __RAS_SHARPEN2DFILTER
-char * SharpenFragmentShader=STRINGIFY(
+const char * SharpenFragmentShader=STRINGIFY(
uniform sampler2D bgl_RenderedTexture;
uniform vec2 bgl_TextureCoordinateOffset[9];
diff --git a/source/gameengine/Rasterizer/RAS_OpenGLFilters/RAS_Sobel2DFilter.h b/source/gameengine/Rasterizer/RAS_OpenGLFilters/RAS_Sobel2DFilter.h
index 40c17c285ce..142e4f0e3d4 100644
--- a/source/gameengine/Rasterizer/RAS_OpenGLFilters/RAS_Sobel2DFilter.h
+++ b/source/gameengine/Rasterizer/RAS_OpenGLFilters/RAS_Sobel2DFilter.h
@@ -28,7 +28,7 @@
#ifndef __RAS_SOBEL2DFILTER
#define __RAS_SOBEL2DFILTER
-char * SobelFragmentShader=STRINGIFY(
+const char * SobelFragmentShader=STRINGIFY(
uniform sampler2D bgl_RenderedTexture;
uniform vec2 bgl_TextureCoordinateOffset[9];
diff --git a/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/CMakeLists.txt b/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/CMakeLists.txt
index 2a6d64ecc73..e4403ace69f 100644
--- a/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/CMakeLists.txt
+++ b/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/CMakeLists.txt
@@ -32,6 +32,7 @@ SET(INC
../../../../intern/moto/include
../../../../source/gameengine/Rasterizer
../../../../extern/glew/include
+ ../../../../source/blender/gpu
)
BLENDERLIB(bf_oglrasterizer "${SRC}" "${INC}")
diff --git a/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/Makefile b/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/Makefile
index f01978b8eb1..aee485a22be 100644
--- a/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/Makefile
+++ b/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/Makefile
@@ -41,12 +41,11 @@ CPPFLAGS += -I$(OPENGL_HEADERS)
CPPFLAGS += -I$(NAN_STRING)/include
CPPFLAGS += -I$(NAN_MOTO)/include
CPPFLAGS += -I../../../kernel/gen_system
+CPPFLAGS += -I../../../blender/gpu
CPPFLAGS += -I../../BlenderRoutines
CPPFLAGS += -I..
+
ifeq ($(OS),darwin)
CPPFLAGS += -fpascal-strings
endif
-ifeq ($(WITH_BF_GLEXT),true)
- CPPFLAGS += -DWITH_GLEXT
-endif
diff --git a/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_ListRasterizer.cpp b/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_ListRasterizer.cpp
index c2687319717..2c4b55ff964 100644
--- a/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_ListRasterizer.cpp
+++ b/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_ListRasterizer.cpp
@@ -9,6 +9,7 @@
#include "GL/glew.h"
+#include "RAS_MaterialBucket.h"
#include "RAS_TexVert.h"
#include "MT_assert.h"
@@ -125,20 +126,20 @@ void RAS_ListRasterizer::RemoveListSlot(RAS_ListSlot* list)
}
}
-RAS_ListSlot* RAS_ListRasterizer::FindOrAdd(const vecVertexArray& vertexarrays, KX_ListSlot** slot)
+RAS_ListSlot* RAS_ListRasterizer::FindOrAdd(RAS_MeshSlot& ms)
{
/*
Keep a copy of constant lists submitted for rendering,
this guards against (replicated)new...delete every frame,
and we can reuse lists!
- :: sorted by vertex array
+ :: sorted by mesh slot
*/
- RAS_ListSlot* localSlot = (RAS_ListSlot*)*slot;
+ RAS_ListSlot* localSlot = (RAS_ListSlot*)ms.m_DisplayList;
if(!localSlot) {
- RAS_Lists::iterator it = mLists.find(vertexarrays);
+ RAS_Lists::iterator it = mLists.find(&ms);
if(it == mLists.end()) {
localSlot = new RAS_ListSlot(this);
- mLists.insert(std::pair<vecVertexArray, RAS_ListSlot*>(vertexarrays, localSlot));
+ mLists.insert(std::pair<RAS_MeshSlot*, RAS_ListSlot*>(&ms, localSlot));
} else {
localSlot = static_cast<RAS_ListSlot*>(it->second->AddRef());
}
@@ -157,69 +158,45 @@ void RAS_ListRasterizer::ReleaseAlloc()
mLists.clear();
}
-
-void RAS_ListRasterizer::IndexPrimitives(
- const vecVertexArray & vertexarrays,
- const vecIndexArrays & indexarrays,
- DrawMode mode,
- bool useObjectColor,
- const MT_Vector4& rgbacolor,
- class KX_ListSlot** slot)
+void RAS_ListRasterizer::IndexPrimitives(RAS_MeshSlot& ms)
{
RAS_ListSlot* localSlot =0;
- // useObjectColor(are we updating every frame?)
- if(!useObjectColor && slot) {
- localSlot = FindOrAdd(vertexarrays, slot);
+ if(ms.m_bDisplayList) {
+ localSlot = FindOrAdd(ms);
localSlot->DrawList();
if(localSlot->End()) {
// save slot here too, needed for replicas and object using same mesh
// => they have the same vertexarray but different mesh slot
- *slot = localSlot;
+ ms.m_DisplayList = localSlot;
return;
}
}
- if (mUseVertexArrays) {
- RAS_VAOpenGLRasterizer::IndexPrimitives(
- vertexarrays, indexarrays,
- mode, useObjectColor,
- rgbacolor,slot
- );
- } else {
- RAS_OpenGLRasterizer::IndexPrimitives(
- vertexarrays, indexarrays,
- mode, useObjectColor,
- rgbacolor,slot
- );
- }
+ if (mUseVertexArrays)
+ RAS_VAOpenGLRasterizer::IndexPrimitives(ms);
+ else
+ RAS_OpenGLRasterizer::IndexPrimitives(ms);
- if(!useObjectColor && slot) {
+ if(ms.m_bDisplayList) {
localSlot->EndList();
- *slot = localSlot;
+ ms.m_DisplayList = localSlot;
}
}
-void RAS_ListRasterizer::IndexPrimitivesMulti(
- const vecVertexArray& vertexarrays,
- const vecIndexArrays & indexarrays,
- DrawMode mode,
- bool useObjectColor,
- const MT_Vector4& rgbacolor,
- class KX_ListSlot** slot)
+void RAS_ListRasterizer::IndexPrimitivesMulti(RAS_MeshSlot& ms)
{
RAS_ListSlot* localSlot =0;
- // useObjectColor(are we updating every frame?)
- if(!useObjectColor && slot) {
- localSlot = FindOrAdd(vertexarrays, slot);
+ if(ms.m_bDisplayList) {
+ localSlot = FindOrAdd(ms);
localSlot->DrawList();
if(localSlot->End()) {
// save slot here too, needed for replicas and object using same mesh
// => they have the same vertexarray but different mesh slot
- *slot = localSlot;
+ ms.m_DisplayList = localSlot;
return;
}
}
@@ -227,23 +204,14 @@ void RAS_ListRasterizer::IndexPrimitivesMulti(
// workaround: note how we do not use vertex arrays for making display
// lists, since glVertexAttribPointerARB doesn't seem to work correct
// in display lists on ATI? either a bug in the driver or in Blender ..
- if (mUseVertexArrays && !localSlot) {
- RAS_VAOpenGLRasterizer::IndexPrimitivesMulti(
- vertexarrays, indexarrays,
- mode, useObjectColor,
- rgbacolor,slot
- );
- } else {
- RAS_OpenGLRasterizer::IndexPrimitivesMulti(
- vertexarrays, indexarrays,
- mode, useObjectColor,
- rgbacolor,slot
- );
- }
+ if (mUseVertexArrays && !localSlot)
+ RAS_VAOpenGLRasterizer::IndexPrimitivesMulti(ms);
+ else
+ RAS_OpenGLRasterizer::IndexPrimitivesMulti(ms);
- if(!useObjectColor && slot) {
+ if(ms.m_bDisplayList) {
localSlot->EndList();
- *slot = localSlot;
+ ms.m_DisplayList = localSlot;
}
}
diff --git a/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_ListRasterizer.h b/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_ListRasterizer.h
index b1b19144c12..96d6d2a995d 100644
--- a/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_ListRasterizer.h
+++ b/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_ListRasterizer.h
@@ -4,6 +4,7 @@
#include "RAS_MaterialBucket.h"
#include "RAS_VAOpenGLRasterizer.h"
#include <vector>
+#include <map>
class RAS_ListRasterizer;
class RAS_ListSlot : public KX_ListSlot
@@ -34,14 +35,14 @@ enum RAS_ListSlotFlags {
LIST_REGEN =64
};
-typedef std::map<const vecVertexArray, RAS_ListSlot*> RAS_Lists;
+typedef std::map<class RAS_MeshSlot*, RAS_ListSlot*> RAS_Lists;
class RAS_ListRasterizer : public RAS_VAOpenGLRasterizer
{
bool mUseVertexArrays;
RAS_Lists mLists;
- RAS_ListSlot* FindOrAdd(const vecVertexArray& vertexarrays, KX_ListSlot** slot);
+ RAS_ListSlot* FindOrAdd(class RAS_MeshSlot& ms);
void ReleaseAlloc();
public:
@@ -49,23 +50,8 @@ public:
RAS_ListRasterizer(RAS_ICanvas* canvas, bool useVertexArrays=false, bool lock=false);
virtual ~RAS_ListRasterizer();
- virtual void IndexPrimitives(
- const vecVertexArray& vertexarrays,
- const vecIndexArrays & indexarrays,
- DrawMode mode,
- bool useObjectColor,
- const MT_Vector4& rgbacolor,
- class KX_ListSlot** slot
- );
-
- virtual void IndexPrimitivesMulti(
- const vecVertexArray& vertexarrays,
- const vecIndexArrays & indexarrays,
- DrawMode mode,
- bool useObjectColor,
- const MT_Vector4& rgbacolor,
- class KX_ListSlot** slot
- );
+ virtual void IndexPrimitives(class RAS_MeshSlot& ms);
+ virtual void IndexPrimitivesMulti(class RAS_MeshSlot& ms);
virtual bool Init();
virtual void Exit();
diff --git a/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp b/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp
index 1dcc6e70934..87a0a1d8b9e 100644
--- a/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp
+++ b/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp
@@ -38,6 +38,9 @@
#include "MT_CmMatrix4x4.h"
#include "RAS_IRenderTools.h" // rendering text
+#include "GPU_draw.h"
+#include "GPU_material.h"
+
/**
* 32x32 bit masks for vinterlace stereo mode
*/
@@ -67,10 +70,12 @@ RAS_OpenGLRasterizer::RAS_OpenGLRasterizer(RAS_ICanvas* canvas)
m_motionblurvalue(-1.0),
m_texco_num(0),
m_attrib_num(0),
- m_last_blendmode(0),
+ m_last_blendmode(GPU_BLEND_SOLID),
+ m_last_frontface(true),
m_materialCachingInfo(0)
{
- m_viewmatrix.Identity();
+ m_viewmatrix.setIdentity();
+ m_viewinvmatrix.setIdentity();
for (int i = 0; i < 32; i++)
{
@@ -87,81 +92,9 @@ RAS_OpenGLRasterizer::~RAS_OpenGLRasterizer()
{
}
-
-
-static void Myinit_gl_stuff(void)
-{
- float mat_specular[] = { 0.5, 0.5, 0.5, 1.0 };
- float mat_shininess[] = { 35.0 };
-/* float one= 1.0; */
- int a, x, y;
- GLubyte pat[32*32];
- const GLubyte *patc= pat;
-
- glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mat_specular);
- glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, mat_specular);
- glMaterialfv(GL_FRONT_AND_BACK, GL_SHININESS, mat_shininess);
-
-
-#if defined(__FreeBSD) || defined(__linux__)
- glDisable(GL_DITHER); /* op sgi/sun hardware && 12 bits */
-#endif
-
- /* no local viewer, looks ugly in ortho mode */
- /* glLightModelfv(GL_LIGHT_MODEL_LOCAL_VIEWER, &one); */
-
- glDepthFunc(GL_LEQUAL);
- /* scaling matrices */
- glEnable(GL_NORMALIZE);
-
- glShadeModel(GL_FLAT);
-
- glDisable(GL_ALPHA_TEST);
- glDisable(GL_BLEND);
- glDisable(GL_DEPTH_TEST);
- glDisable(GL_FOG);
- glDisable(GL_LIGHTING);
- glDisable(GL_LOGIC_OP);
- glDisable(GL_STENCIL_TEST);
- glDisable(GL_TEXTURE_1D);
- glDisable(GL_TEXTURE_2D);
-
- glEnableClientState(GL_VERTEX_ARRAY);
- glEnableClientState(GL_NORMAL_ARRAY);
-
- glPixelTransferi(GL_MAP_COLOR, GL_FALSE);
- glPixelTransferi(GL_RED_SCALE, 1);
- glPixelTransferi(GL_RED_BIAS, 0);
- glPixelTransferi(GL_GREEN_SCALE, 1);
- glPixelTransferi(GL_GREEN_BIAS, 0);
- glPixelTransferi(GL_BLUE_SCALE, 1);
- glPixelTransferi(GL_BLUE_BIAS, 0);
- glPixelTransferi(GL_ALPHA_SCALE, 1);
- glPixelTransferi(GL_ALPHA_BIAS, 0);
-
- a = 0;
- for(x=0; x<32; x++)
- {
- for(y=0; y<4; y++)
- {
- if( (x) & 1) pat[a++]= 0x88;
- else pat[a++]= 0x22;
- }
- }
-
- glPolygonStipple(patc);
-
- glFrontFace(GL_CCW);
- glCullFace(GL_BACK);
- glEnable(GL_CULL_FACE);
-}
-
-
-
bool RAS_OpenGLRasterizer::Init()
{
-
- Myinit_gl_stuff();
+ GPU_state_init();
m_redback = 0.4375;
m_greenback = 0.4375;
@@ -172,7 +105,12 @@ bool RAS_OpenGLRasterizer::Init()
m_ambg = 0.0f;
m_ambb = 0.0f;
- SetBlendingMode(0);
+ glDisable(GL_BLEND);
+ glDisable(GL_ALPHA_TEST);
+ m_last_blendmode = GPU_BLEND_SOLID;
+
+ glFrontFace(GL_CCW);
+ m_last_frontface = true;
glClearColor(m_redback,m_greenback,m_blueback,m_alphaback);
glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
@@ -316,21 +254,10 @@ void RAS_OpenGLRasterizer::Exit()
EndFrame();
}
-bool RAS_OpenGLRasterizer::InterlacedStereo() const
-{
- return m_stereomode == RAS_STEREO_VINTERLACE || m_stereomode == RAS_STEREO_INTERLACED;
-}
-
bool RAS_OpenGLRasterizer::BeginFrame(int drawingmode, double time)
{
m_time = time;
m_drawingmode = drawingmode;
-
- if (!InterlacedStereo() || m_curreye == RAS_STEREO_LEFTEYE)
- {
- m_2DCanvas->ClearColor(m_redback,m_greenback,m_blueback,m_alphaback);
- m_2DCanvas->ClearBuffer(RAS_ICanvas::COLOR_BUFFER);
- }
// Blender camera routine destroys the settings
if (m_drawingmode < KX_SOLID)
@@ -344,7 +271,12 @@ bool RAS_OpenGLRasterizer::BeginFrame(int drawingmode, double time)
glEnable (GL_CULL_FACE);
}
- SetBlendingMode(0);
+ glDisable(GL_BLEND);
+ glDisable(GL_ALPHA_TEST);
+ m_last_blendmode = GPU_BLEND_SOLID;
+
+ glFrontFace(GL_CCW);
+ m_last_frontface = true;
glShadeModel(GL_SMOOTH);
@@ -359,34 +291,28 @@ void RAS_OpenGLRasterizer::SetDrawingMode(int drawingmode)
{
m_drawingmode = drawingmode;
- switch (m_drawingmode)
- {
- case KX_WIREFRAME:
- {
- glDisable (GL_CULL_FACE);
- break;
- }
- default:
- {
- }
- }
+ if(m_drawingmode == KX_WIREFRAME)
+ glDisable(GL_CULL_FACE);
}
-
-
int RAS_OpenGLRasterizer::GetDrawingMode()
{
return m_drawingmode;
}
-
void RAS_OpenGLRasterizer::SetDepthMask(DepthMask depthmask)
{
glDepthMask(depthmask == KX_DEPTHMASK_DISABLED ? GL_FALSE : GL_TRUE);
}
+void RAS_OpenGLRasterizer::ClearColorBuffer()
+{
+ m_2DCanvas->ClearColor(m_redback,m_greenback,m_blueback,m_alphaback);
+ m_2DCanvas->ClearBuffer(RAS_ICanvas::COLOR_BUFFER);
+}
+
void RAS_OpenGLRasterizer::ClearDepthBuffer()
{
@@ -497,6 +423,10 @@ bool RAS_OpenGLRasterizer::Stereo()
return true;
}
+bool RAS_OpenGLRasterizer::InterlacedStereo()
+{
+ return m_stereomode == RAS_STEREO_VINTERLACE || m_stereomode == RAS_STEREO_INTERLACED;
+}
void RAS_OpenGLRasterizer::SetEye(const StereoEye eye)
{
@@ -573,294 +503,84 @@ void RAS_OpenGLRasterizer::SwapBuffers()
-void RAS_OpenGLRasterizer::GetViewMatrix(MT_Matrix4x4 &mat) const
+const MT_Matrix4x4& RAS_OpenGLRasterizer::GetViewMatrix() const
{
- float viewmat[16];
- glGetFloatv(GL_MODELVIEW_MATRIX, viewmat);
- mat.setValue(viewmat);
+ return m_viewmatrix;
}
-
-
-void RAS_OpenGLRasterizer::IndexPrimitives(const vecVertexArray & vertexarrays,
- const vecIndexArrays & indexarrays,
- DrawMode mode,
- bool useObjectColor,
- const MT_Vector4& rgbacolor,
- class KX_ListSlot** slot
- )
-{
- const RAS_TexVert* vertexarray;
- unsigned int numindices, vt;
-
- for (vt=0;vt<vertexarrays.size();vt++)
- {
- vertexarray = &((*vertexarrays[vt]) [0]);
- const KX_IndexArray & indexarray = (*indexarrays[vt]);
- numindices = indexarray.size();
-
- if (!numindices)
- break;
-
- int vindex=0;
- switch (mode)
- {
- case KX_MODE_LINES:
- {
- glBegin(GL_LINES);
- vindex=0;
- for (unsigned int i=0;i<numindices;i+=2)
- {
- glVertex3fv(vertexarray[(indexarray[vindex++])].getLocalXYZ());
- glVertex3fv(vertexarray[(indexarray[vindex++])].getLocalXYZ());
- }
- glEnd();
- }
- break;
- case KX_MODE_QUADS:
- {
- glBegin(GL_QUADS);
- vindex=0;
- if (useObjectColor)
- {
- for (unsigned int i=0;i<numindices;i+=4)
- {
-
- glColor4d(rgbacolor[0], rgbacolor[1], rgbacolor[2], rgbacolor[3]);
-
- glNormal3fv(vertexarray[(indexarray[vindex])].getNormal());
- glTexCoord2fv(vertexarray[(indexarray[vindex])].getUV1());
- glVertex3fv(vertexarray[(indexarray[vindex])].getLocalXYZ());
- vindex++;
-
- glNormal3fv(vertexarray[(indexarray[vindex])].getNormal());
- glTexCoord2fv(vertexarray[(indexarray[vindex])].getUV1());
- glVertex3fv(vertexarray[(indexarray[vindex])].getLocalXYZ());
- vindex++;
-
- glNormal3fv(vertexarray[(indexarray[vindex])].getNormal());
- glTexCoord2fv(vertexarray[(indexarray[vindex])].getUV1());
- glVertex3fv(vertexarray[(indexarray[vindex])].getLocalXYZ());
- vindex++;
-
- glNormal3fv(vertexarray[(indexarray[vindex])].getNormal());
- glTexCoord2fv(vertexarray[(indexarray[vindex])].getUV1());
- glVertex3fv(vertexarray[(indexarray[vindex])].getLocalXYZ());
- vindex++;
- }
- }
- else
- {
- for (unsigned int i=0;i<numindices;i+=4)
- {
- // This looks curiously endian unsafe to me.
- // However it depends on the way the colors are packed into
- // the m_rgba field of RAS_TexVert
-
- glColor4ubv((const GLubyte *)(vertexarray[(indexarray[vindex])].getRGBA()));
- glNormal3fv(vertexarray[(indexarray[vindex])].getNormal());
- glTexCoord2fv(vertexarray[(indexarray[vindex])].getUV1());
- glVertex3fv(vertexarray[(indexarray[vindex])].getLocalXYZ());
- vindex++;
-
- glColor4ubv((const GLubyte *)(vertexarray[(indexarray[vindex])].getRGBA()));
- glNormal3fv(vertexarray[(indexarray[vindex])].getNormal());
- glTexCoord2fv(vertexarray[(indexarray[vindex])].getUV1());
- glVertex3fv(vertexarray[(indexarray[vindex])].getLocalXYZ());
- vindex++;
-
- glColor4ubv((const GLubyte *)(vertexarray[(indexarray[vindex])].getRGBA()));
- glNormal3fv(vertexarray[(indexarray[vindex])].getNormal());
- glTexCoord2fv(vertexarray[(indexarray[vindex])].getUV1());
- glVertex3fv(vertexarray[(indexarray[vindex])].getLocalXYZ());
- vindex++;
-
- glColor4ubv((const GLubyte *)(vertexarray[(indexarray[vindex])].getRGBA()));
- glNormal3fv(vertexarray[(indexarray[vindex])].getNormal());
- glTexCoord2fv(vertexarray[(indexarray[vindex])].getUV1());
- glVertex3fv(vertexarray[(indexarray[vindex])].getLocalXYZ());
- vindex++;
- }
- }
- glEnd();
- break;
- }
- case KX_MODE_TRIANGLES:
- {
- glBegin(GL_TRIANGLES);
- vindex=0;
- if (useObjectColor)
- {
- for (unsigned int i=0;i<numindices;i+=3)
- {
-
- glColor4d(rgbacolor[0], rgbacolor[1], rgbacolor[2], rgbacolor[3]);
-
- glNormal3fv(vertexarray[(indexarray[vindex])].getNormal());
- glTexCoord2fv(vertexarray[(indexarray[vindex])].getUV1());
- glVertex3fv(vertexarray[(indexarray[vindex])].getLocalXYZ());
- vindex++;
-
- glNormal3fv(vertexarray[(indexarray[vindex])].getNormal());
- glTexCoord2fv(vertexarray[(indexarray[vindex])].getUV1());
- glVertex3fv(vertexarray[(indexarray[vindex])].getLocalXYZ());
- vindex++;
-
- glNormal3fv(vertexarray[(indexarray[vindex])].getNormal());
- glTexCoord2fv(vertexarray[(indexarray[vindex])].getUV1());
- glVertex3fv(vertexarray[(indexarray[vindex])].getLocalXYZ());
- vindex++;
- }
- }
- else
- {
- for (unsigned int i=0;i<numindices;i+=3)
- {
-
- glColor4ubv((const GLubyte *)(vertexarray[(indexarray[vindex])].getRGBA()));
- glNormal3fv(vertexarray[(indexarray[vindex])].getNormal());
- glTexCoord2fv(vertexarray[(indexarray[vindex])].getUV1());
- glVertex3fv(vertexarray[(indexarray[vindex])].getLocalXYZ());
- vindex++;
-
- glColor4ubv((const GLubyte *)(vertexarray[(indexarray[vindex])].getRGBA()));
- glNormal3fv(vertexarray[(indexarray[vindex])].getNormal());
- glTexCoord2fv(vertexarray[(indexarray[vindex])].getUV1());
- glVertex3fv(vertexarray[(indexarray[vindex])].getLocalXYZ());
- vindex++;
-
- glColor4ubv((const GLubyte *)(vertexarray[(indexarray[vindex])].getRGBA()));
- glNormal3fv(vertexarray[(indexarray[vindex])].getNormal());
- glTexCoord2fv(vertexarray[(indexarray[vindex])].getUV1());
- glVertex3fv(vertexarray[(indexarray[vindex])].getLocalXYZ());
- vindex++;
- }
- }
- glEnd();
- break;
- }
- default:
- {
- }
-
- } // switch
- } // for each vertexarray
-
+const MT_Matrix4x4& RAS_OpenGLRasterizer::GetViewInvMatrix() const
+{
+ return m_viewinvmatrix;
}
-void RAS_OpenGLRasterizer::IndexPrimitives_3DText(const vecVertexArray & vertexarrays,
- const vecIndexArrays & indexarrays,
- DrawMode mode,
+void RAS_OpenGLRasterizer::IndexPrimitives_3DText(RAS_MeshSlot& ms,
class RAS_IPolyMaterial* polymat,
- class RAS_IRenderTools* rendertools,
- bool useObjectColor,
- const MT_Vector4& rgbacolor
- )
+ class RAS_IRenderTools* rendertools)
{
- const RAS_TexVert* vertexarray;
- unsigned int numindices, vt;
-
- if (useObjectColor)
- {
+ bool obcolor = ms.m_bObjectColor;
+ MT_Vector4& rgba = ms.m_RGBAcolor;
+ RAS_MeshSlot::iterator it;
+
+ // handle object color
+ if (obcolor) {
glDisableClientState(GL_COLOR_ARRAY);
- glColor4d(rgbacolor[0], rgbacolor[1], rgbacolor[2], rgbacolor[3]);
+ glColor4d(rgba[0], rgba[1], rgba[2], rgba[3]);
}
else
- {
glEnableClientState(GL_COLOR_ARRAY);
- }
-
- for (vt=0;vt<vertexarrays.size();vt++)
- {
- vertexarray = &((*vertexarrays[vt]) [0]);
- const KX_IndexArray & indexarray = (*indexarrays[vt]);
- numindices = indexarray.size();
-
- if (!numindices)
- break;
+
+ for(ms.begin(it); !ms.end(it); ms.next(it)) {
+ RAS_TexVert *vertex;
+ size_t i, j, numvert;
- int vindex=0;
- switch (mode)
- {
- case KX_MODE_LINES:
- {
- glBegin(GL_LINES);
- vindex=0;
- for (unsigned int i=0;i<numindices;i+=2)
- {
- glVertex3fv(vertexarray[(indexarray[vindex++])].getLocalXYZ());
- glVertex3fv(vertexarray[(indexarray[vindex++])].getLocalXYZ());
- }
- glEnd();
- }
- break;
- case KX_MODE_QUADS:
+ numvert = it.array->m_type;
+
+ if(it.array->m_type == RAS_DisplayArray::LINE) {
+ // line drawing, no text
+ glBegin(GL_LINES);
+
+ for(i=0; i<it.totindex; i+=2)
{
- vindex=0;
- for (unsigned int i=0;i<numindices;i+=4)
- {
- float v1[3],v2[3],v3[3],v4[3];
-
- v1[0] = vertexarray[(indexarray[vindex])].getLocalXYZ()[0];
- v1[1] = vertexarray[(indexarray[vindex])].getLocalXYZ()[1];
- v1[2] = vertexarray[(indexarray[vindex])].getLocalXYZ()[2];
- vindex++;
-
- v2[0] = vertexarray[(indexarray[vindex])].getLocalXYZ()[0];
- v2[1] = vertexarray[(indexarray[vindex])].getLocalXYZ()[1];
- v2[2] = vertexarray[(indexarray[vindex])].getLocalXYZ()[2];
- vindex++;
-
- v3[0] = vertexarray[(indexarray[vindex])].getLocalXYZ()[0];
- v3[1] = vertexarray[(indexarray[vindex])].getLocalXYZ()[1];
- v3[2] = vertexarray[(indexarray[vindex])].getLocalXYZ()[2];
- vindex++;
-
- v4[0] = vertexarray[(indexarray[vindex])].getLocalXYZ()[0];
- v4[1] = vertexarray[(indexarray[vindex])].getLocalXYZ()[1];
- v4[2] = vertexarray[(indexarray[vindex])].getLocalXYZ()[2];
-
- vindex++;
-
- rendertools->RenderText(polymat->GetDrawingMode(),polymat,v1,v2,v3,v4);
- ClearCachingInfo();
- }
- break;
+ vertex = &it.vertex[it.index[i]];
+ glVertex3fv(vertex->getXYZ());
+
+ vertex = &it.vertex[it.index[i+1]];
+ glVertex3fv(vertex->getXYZ());
}
- case KX_MODE_TRIANGLES:
+
+ glEnd();
+ }
+ else {
+ // triangle and quad text drawing
+ for(i=0; i<it.totindex; i+=numvert)
{
- glBegin(GL_TRIANGLES);
- vindex=0;
- for (unsigned int i=0;i<numindices;i+=3)
- {
- float v1[3],v2[3],v3[3];
-
- v1[0] = vertexarray[(indexarray[vindex])].getLocalXYZ()[0];
- v1[1] = vertexarray[(indexarray[vindex])].getLocalXYZ()[1];
- v1[2] = vertexarray[(indexarray[vindex])].getLocalXYZ()[2];
- vindex++;
-
- v2[0] = vertexarray[(indexarray[vindex])].getLocalXYZ()[0];
- v2[1] = vertexarray[(indexarray[vindex])].getLocalXYZ()[1];
- v2[2] = vertexarray[(indexarray[vindex])].getLocalXYZ()[2];
- vindex++;
-
- v3[0] = vertexarray[(indexarray[vindex])].getLocalXYZ()[0];
- v3[1] = vertexarray[(indexarray[vindex])].getLocalXYZ()[1];
- v3[2] = vertexarray[(indexarray[vindex])].getLocalXYZ()[2];
- vindex++;
-
- rendertools->RenderText(polymat->GetDrawingMode(),polymat,v1,v2,v3,NULL);
- ClearCachingInfo();
+ float v[4][3];
+ int glattrib, unit;
+
+ for(j=0; j<numvert; j++) {
+ vertex = &it.vertex[it.index[i+j]];
+
+ v[j][0] = vertex->getXYZ()[0];
+ v[j][1] = vertex->getXYZ()[1];
+ v[j][2] = vertex->getXYZ()[2];
}
- glEnd();
- break;
- }
- default:
- {
+
+ // find the right opengl attribute
+ glattrib = -1;
+ if(GLEW_ARB_vertex_program)
+ for(unit=0; unit<m_attrib_num; unit++)
+ if(m_attrib[unit] == RAS_TEXCO_UV1)
+ glattrib = unit;
+
+ rendertools->RenderText(polymat->GetDrawingMode(), polymat,
+ v[0], v[1], v[2], (numvert == 4)? v[3]: NULL, glattrib);
+
+ ClearCachingInfo();
}
- } //switch
- } //for each vertexarray
+ }
+ }
+
+ glDisableClientState(GL_COLOR_ARRAY);
}
void RAS_OpenGLRasterizer::SetTexCoordNum(int num)
@@ -897,14 +617,14 @@ void RAS_OpenGLRasterizer::TexCoord(const RAS_TexVert &tv)
if(GLEW_ARB_multitexture) {
for(unit=0; unit<m_texco_num; unit++) {
- if(tv.getFlag() & TV_2NDUV && (int)tv.getUnit() == unit) {
+ if(tv.getFlag() & RAS_TexVert::SECOND_UV && (int)tv.getUnit() == unit) {
glMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, tv.getUV2());
continue;
}
switch(m_texco[unit]) {
case RAS_TEXCO_ORCO:
case RAS_TEXCO_GLOB:
- glMultiTexCoord3fvARB(GL_TEXTURE0_ARB+unit, tv.getLocalXYZ());
+ glMultiTexCoord3fvARB(GL_TEXTURE0_ARB+unit, tv.getXYZ());
break;
case RAS_TEXCO_UV1:
glMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, tv.getUV1());
@@ -929,7 +649,7 @@ void RAS_OpenGLRasterizer::TexCoord(const RAS_TexVert &tv)
switch(m_attrib[unit]) {
case RAS_TEXCO_ORCO:
case RAS_TEXCO_GLOB:
- glVertexAttrib3fvARB(unit, tv.getLocalXYZ());
+ glVertexAttrib3fvARB(unit, tv.getXYZ());
break;
case RAS_TEXCO_UV1:
glVertexAttrib2fvARB(unit, tv.getUV1());
@@ -953,211 +673,80 @@ void RAS_OpenGLRasterizer::TexCoord(const RAS_TexVert &tv)
}
}
-void RAS_OpenGLRasterizer::Tangent( const RAS_TexVert& v1,
- const RAS_TexVert& v2,
- const RAS_TexVert& v3,
- const MT_Vector3 &no)
+
+void RAS_OpenGLRasterizer::IndexPrimitives(RAS_MeshSlot& ms)
{
- // TODO: set for deformer...
- MT_Vector3 x1(v1.getLocalXYZ()), x2(v2.getLocalXYZ()), x3(v3.getLocalXYZ());
- MT_Vector2 uv1(v1.getUV1()), uv2(v2.getUV1()), uv3(v3.getUV1());
- MT_Vector3 dx1(x2 - x1), dx2(x3 - x1);
- MT_Vector2 duv1(uv2 - uv1), duv2(uv3 - uv1);
-
- MT_Scalar r = 1.0 / (duv1.x() * duv2.y() - duv2.x() * duv1.y());
- duv1 *= r;
- duv2 *= r;
- MT_Vector3 sdir(duv2.y() * dx1 - duv1.y() * dx2);
- MT_Vector3 tdir(duv1.x() * dx2 - duv2.x() * dx1);
-
- // Gram-Schmidt orthogonalize
- MT_Vector3 t(sdir - no.cross(no.cross(sdir)));
- if (!MT_fuzzyZero(t)) t /= t.length();
-
- float tangent[4];
- t.getValue(tangent);
- // Calculate handedness
- tangent[3] = no.dot(sdir.cross(tdir)) < 0.0 ? -1.0 : 1.0;
+ IndexPrimitivesInternal(ms, false);
}
+void RAS_OpenGLRasterizer::IndexPrimitivesMulti(RAS_MeshSlot& ms)
+{
+ IndexPrimitivesInternal(ms, true);
+}
-void RAS_OpenGLRasterizer::IndexPrimitivesMulti(
- const vecVertexArray& vertexarrays,
- const vecIndexArrays & indexarrays,
- DrawMode mode,
- bool useObjectColor,
- const MT_Vector4& rgbacolor,
- class KX_ListSlot** slot
- )
+void RAS_OpenGLRasterizer::IndexPrimitivesInternal(RAS_MeshSlot& ms, bool multi)
{
+ bool obcolor = ms.m_bObjectColor;
+ bool wireframe = m_drawingmode <= KX_WIREFRAME;
+ MT_Vector4& rgba = ms.m_RGBAcolor;
+ RAS_MeshSlot::iterator it;
+
+ // iterate over display arrays, each containing an index + vertex array
+ for(ms.begin(it); !ms.end(it); ms.next(it)) {
+ RAS_TexVert *vertex;
+ size_t i, j, numvert;
+
+ numvert = it.array->m_type;
- const RAS_TexVert* vertexarray;
- unsigned int numindices,vt;
-
- for (vt=0;vt<vertexarrays.size();vt++)
- {
- vertexarray = &((*vertexarrays[vt]) [0]);
- const KX_IndexArray & indexarray = (*indexarrays[vt]);
- numindices = indexarray.size();
-
- if (!numindices)
- break;
+ if(it.array->m_type == RAS_DisplayArray::LINE) {
+ // line drawing
+ glBegin(GL_LINES);
- int vindex=0;
- switch (mode)
- {
- case KX_MODE_LINES:
+ for(i=0; i<it.totindex; i+=2)
{
- glBegin(GL_LINES);
- vindex=0;
- for (unsigned int i=0;i<numindices;i+=2)
- {
- glVertex3fv(vertexarray[(indexarray[vindex++])].getLocalXYZ());
- glVertex3fv(vertexarray[(indexarray[vindex++])].getLocalXYZ());
- }
- glEnd();
+ vertex = &it.vertex[it.index[i]];
+ glVertex3fv(vertex->getXYZ());
+
+ vertex = &it.vertex[it.index[i+1]];
+ glVertex3fv(vertex->getXYZ());
}
- break;
- case KX_MODE_QUADS:
- {
+
+ glEnd();
+ }
+ else {
+ // triangle and quad drawing
+ if(it.array->m_type == RAS_DisplayArray::TRIANGLE)
+ glBegin(GL_TRIANGLES);
+ else
glBegin(GL_QUADS);
- vindex=0;
- if (useObjectColor)
- {
- for (unsigned int i=0;i<numindices;i+=4)
- {
-
- glColor4d(rgbacolor[0], rgbacolor[1], rgbacolor[2], rgbacolor[3]);
-
- //
- glNormal3fv(vertexarray[(indexarray[vindex])].getNormal());
- TexCoord(vertexarray[(indexarray[vindex])]);
- glVertex3fv(vertexarray[(indexarray[vindex])].getLocalXYZ());
- vindex++;
-
- //
- glNormal3fv(vertexarray[(indexarray[vindex])].getNormal());
- TexCoord(vertexarray[(indexarray[vindex])]);
- glVertex3fv(vertexarray[(indexarray[vindex])].getLocalXYZ());
- vindex++;
-
- //
- glNormal3fv(vertexarray[(indexarray[vindex])].getNormal());
- TexCoord(vertexarray[(indexarray[vindex])]);
- glVertex3fv(vertexarray[(indexarray[vindex])].getLocalXYZ());
- vindex++;
-
- //
- glNormal3fv(vertexarray[(indexarray[vindex])].getNormal());
- TexCoord(vertexarray[(indexarray[vindex])]);
- glVertex3fv(vertexarray[(indexarray[vindex])].getLocalXYZ());
- vindex++;
- }
- }
- else
- {
- for (unsigned int i=0;i<numindices;i+=4)
- {
- // This looks curiously endian unsafe to me.
- // However it depends on the way the colors are packed into
- // the m_rgba field of RAS_TexVert
-
- //
- glColor4ubv((const GLubyte *)(vertexarray[(indexarray[vindex])].getRGBA()));
-
- glNormal3fv(vertexarray[(indexarray[vindex])].getNormal());
- TexCoord(vertexarray[(indexarray[vindex])]);
- glVertex3fv(vertexarray[(indexarray[vindex])].getLocalXYZ());
- vindex++;
-
- //
- glColor4ubv((const GLubyte *)(vertexarray[(indexarray[vindex])].getRGBA()));
- glNormal3fv(vertexarray[(indexarray[vindex])].getNormal());
- TexCoord(vertexarray[(indexarray[vindex])]);
- glVertex3fv(vertexarray[(indexarray[vindex])].getLocalXYZ());
- vindex++;
-
- //
- glColor4ubv((const GLubyte *)(vertexarray[(indexarray[vindex])].getRGBA()));
- glNormal3fv(vertexarray[(indexarray[vindex])].getNormal());
- TexCoord(vertexarray[(indexarray[vindex])]);
- glVertex3fv(vertexarray[(indexarray[vindex])].getLocalXYZ());
- vindex++;
-
- //
- glColor4ubv((const GLubyte *)(vertexarray[(indexarray[vindex])].getRGBA()));
- glNormal3fv(vertexarray[(indexarray[vindex])].getNormal());
- TexCoord(vertexarray[(indexarray[vindex])]);
- glVertex3fv(vertexarray[(indexarray[vindex])].getLocalXYZ());
- vindex++;
- }
- }
- glEnd();
- break;
- }
- case KX_MODE_TRIANGLES:
+
+ for(i=0; i<it.totindex; i+=numvert)
{
- glBegin(GL_TRIANGLES);
- vindex=0;
- if (useObjectColor)
- {
- for (unsigned int i=0;i<numindices;i+=3)
- {
-
- glColor4d(rgbacolor[0], rgbacolor[1], rgbacolor[2], rgbacolor[3]);
- //
- glNormal3fv(vertexarray[(indexarray[vindex])].getNormal());
- TexCoord(vertexarray[(indexarray[vindex])]);
- glVertex3fv(vertexarray[(indexarray[vindex])].getLocalXYZ());
- vindex++;
-
- //
- glNormal3fv(vertexarray[(indexarray[vindex])].getNormal());
- TexCoord(vertexarray[(indexarray[vindex])]);
- glVertex3fv(vertexarray[(indexarray[vindex])].getLocalXYZ());
- vindex++;
-
- //
- glNormal3fv(vertexarray[(indexarray[vindex])].getNormal());
- TexCoord(vertexarray[(indexarray[vindex])]);
- glVertex3fv(vertexarray[(indexarray[vindex])].getLocalXYZ());
- vindex++;
- }
- }
- else
- {
- for (unsigned int i=0;i<numindices;i+=3)
- {
- //
- glColor4ubv((const GLubyte *)(vertexarray[(indexarray[vindex])].getRGBA()));
- glNormal3fv(vertexarray[(indexarray[vindex])].getNormal());
- TexCoord(vertexarray[(indexarray[vindex])]);
- glVertex3fv(vertexarray[(indexarray[vindex])].getLocalXYZ());
- vindex++;
-
- //
- glColor4ubv((const GLubyte *)(vertexarray[(indexarray[vindex])].getRGBA()));
- glNormal3fv(vertexarray[(indexarray[vindex])].getNormal());
- TexCoord(vertexarray[(indexarray[vindex])]);
- glVertex3fv(vertexarray[(indexarray[vindex])].getLocalXYZ());
- vindex++;
-
- //
- glColor4ubv((const GLubyte *)(vertexarray[(indexarray[vindex])].getRGBA()));
- glNormal3fv(vertexarray[(indexarray[vindex])].getNormal());
- TexCoord(vertexarray[(indexarray[vindex])]);
- glVertex3fv(vertexarray[(indexarray[vindex])].getLocalXYZ());
- vindex++;
+ if(obcolor)
+ glColor4d(rgba[0], rgba[1], rgba[2], rgba[3]);
+
+ for(j=0; j<numvert; j++) {
+ vertex = &it.vertex[it.index[i+j]];
+
+ if(!wireframe) {
+ if(!obcolor)
+ glColor4ubv((const GLubyte *)(vertex->getRGBA()));
+
+ glNormal3fv(vertex->getNormal());
+
+ if(multi)
+ TexCoord(*vertex);
+ else
+ glTexCoord2fv(vertex->getUV1());
}
+
+ glVertex3fv(vertex->getXYZ());
}
- glEnd();
- break;
}
- default:
- {
- }
- } // switch
- } // for each vertexarray
+
+ glEnd();
+ }
+ }
}
void RAS_OpenGLRasterizer::SetProjectionMatrix(MT_CmMatrix4x4 &mat)
@@ -1232,7 +821,7 @@ MT_Matrix4x4 RAS_OpenGLRasterizer::GetFrustumMatrix(
void RAS_OpenGLRasterizer::SetViewMatrix(const MT_Matrix4x4 &mat, const MT_Vector3& campos,
const MT_Point3 &, const MT_Quaternion &camOrientQuat)
{
- MT_Matrix4x4 viewMat = mat;
+ m_viewmatrix = mat;
// correction for stereo
if(m_stereomode != RAS_STEREO_NOSTEREO)
@@ -1259,7 +848,7 @@ void RAS_OpenGLRasterizer::SetViewMatrix(const MT_Matrix4x4 &mat, const MT_Vecto
MT_Transform transform;
transform.setIdentity();
transform.translate(-(eyeline * m_eyeseparation / 2.0));
- viewMat *= transform;
+ m_viewmatrix *= transform;
}
break;
case RAS_STEREO_RIGHTEYE:
@@ -1268,20 +857,21 @@ void RAS_OpenGLRasterizer::SetViewMatrix(const MT_Matrix4x4 &mat, const MT_Vecto
MT_Transform transform;
transform.setIdentity();
transform.translate(eyeline * m_eyeseparation / 2.0);
- viewMat *= transform;
+ m_viewmatrix *= transform;
}
break;
}
}
- // convert row major matrix 'viewMat' to column major for OpenGL
- MT_Scalar cammat[16];
- viewMat.getValue(cammat);
- MT_CmMatrix4x4 viewCmmat = cammat;
+ m_viewinvmatrix = m_viewmatrix;
+ m_viewinvmatrix.invert();
+
+ // note: getValue gives back column major as needed by OpenGL
+ MT_Scalar glviewmat[16];
+ m_viewmatrix.getValue(glviewmat);
glMatrixMode(GL_MODELVIEW);
- m_viewmatrix = viewCmmat;
- glLoadMatrixd(&m_viewmatrix(0,0));
+ glLoadMatrixd(glviewmat);
m_campos = campos;
}
@@ -1292,20 +882,6 @@ const MT_Point3& RAS_OpenGLRasterizer::GetCameraPosition()
}
-
-void RAS_OpenGLRasterizer::LoadViewMatrix()
-{
- glLoadMatrixd(&m_viewmatrix(0,0));
-}
-
-
-
-void RAS_OpenGLRasterizer::EnableTextures(bool enable)
-{
-}
-
-
-
void RAS_OpenGLRasterizer::SetCullFace(bool enable)
{
if (enable)
@@ -1373,7 +949,10 @@ void RAS_OpenGLRasterizer::SetPolygonOffset(float mult, float add)
void RAS_OpenGLRasterizer::EnableMotionBlur(float motionblurvalue)
{
- m_motionblur = 1;
+ /* don't just set m_motionblur to 1, but check if it is 0 so
+ * we don't reset a motion blur that is already enabled */
+ if(m_motionblur == 0)
+ m_motionblur = 1;
m_motionblurvalue = motionblurvalue;
}
@@ -1388,23 +967,23 @@ void RAS_OpenGLRasterizer::SetBlendingMode(int blendmode)
if(blendmode == m_last_blendmode)
return;
- if(blendmode == 0) {
+ if(blendmode == GPU_BLEND_SOLID) {
glDisable(GL_BLEND);
glDisable(GL_ALPHA_TEST);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
}
- else if(blendmode == 1) {
+ else if(blendmode == GPU_BLEND_ADD) {
glBlendFunc(GL_ONE, GL_ONE);
glEnable(GL_BLEND);
glDisable(GL_ALPHA_TEST);
}
- else if(blendmode == 2) {
+ else if(blendmode == GPU_BLEND_ALPHA) {
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_BLEND);
glEnable(GL_ALPHA_TEST);
glAlphaFunc(GL_GREATER, 0.0f);
}
- else if(blendmode == 4) {
+ else if(blendmode == GPU_BLEND_CLIP) {
glDisable(GL_BLEND);
glEnable(GL_ALPHA_TEST);
glAlphaFunc(GL_GREATER, 0.5f);
@@ -1413,3 +992,16 @@ void RAS_OpenGLRasterizer::SetBlendingMode(int blendmode)
m_last_blendmode = blendmode;
}
+void RAS_OpenGLRasterizer::SetFrontFace(bool ccw)
+{
+ if(m_last_frontface == ccw)
+ return;
+
+ if(ccw)
+ glFrontFace(GL_CCW);
+ else
+ glFrontFace(GL_CW);
+
+ m_last_frontface = ccw;
+}
+
diff --git a/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.h b/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.h
index 02056cce446..0717cce0ce8 100644
--- a/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.h
+++ b/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.h
@@ -41,7 +41,7 @@ using namespace std;
#include "RAS_MaterialBucket.h"
#include "RAS_ICanvas.h"
-#define RAS_MAX_TEXCO 3 // match in BL_Material
+#define RAS_MAX_TEXCO 8 // match in BL_Material
#define RAS_MAX_ATTRIB 16 // match in BL_BlenderShader
struct OglDebugLine
@@ -77,7 +77,8 @@ class RAS_OpenGLRasterizer : public RAS_IRasterizer
float m_ambb;
double m_time;
- MT_CmMatrix4x4 m_viewmatrix;
+ MT_Matrix4x4 m_viewmatrix;
+ MT_Matrix4x4 m_viewinvmatrix;
MT_Point3 m_campos;
StereoMode m_stereomode;
@@ -87,7 +88,6 @@ class RAS_OpenGLRasterizer : public RAS_IRasterizer
float m_focallength;
bool m_setfocallength;
int m_noOfScanlines;
- bool InterlacedStereo() const;
//motion blur
int m_motionblur;
@@ -100,6 +100,7 @@ protected:
int m_texco_num;
int m_attrib_num;
int m_last_blendmode;
+ bool m_last_frontface;
/** Stores the caching information for the last material activated. */
RAS_IPolyMaterial::TCachingInfo m_materialCachingInfo;
@@ -129,6 +130,7 @@ public:
virtual bool Init();
virtual void Exit();
virtual bool BeginFrame(int drawingmode, double time);
+ virtual void ClearColorBuffer();
virtual void ClearDepthBuffer();
virtual void ClearCachingInfo(void);
virtual void EndFrame();
@@ -136,6 +138,7 @@ public:
virtual void SetStereoMode(const StereoMode stereomode);
virtual bool Stereo();
+ virtual bool InterlacedStereo();
virtual void SetEye(const StereoEye eye);
virtual StereoEye GetEye();
virtual void SetEyeSeparation(const float eyeseparation);
@@ -144,33 +147,15 @@ public:
virtual float GetFocalLength();
virtual void SwapBuffers();
- virtual void IndexPrimitives(
- const vecVertexArray& vertexarrays,
- const vecIndexArrays & indexarrays,
- DrawMode mode,
- bool useObjectColor,
- const MT_Vector4& rgbacolor,
- class KX_ListSlot** slot
- );
+ virtual void IndexPrimitives(class RAS_MeshSlot& ms);
+ virtual void IndexPrimitivesMulti(class RAS_MeshSlot& ms);
virtual void IndexPrimitives_3DText(
- const vecVertexArray& vertexarrays,
- const vecIndexArrays & indexarrays,
- DrawMode mode,
+ class RAS_MeshSlot& ms,
class RAS_IPolyMaterial* polymat,
- class RAS_IRenderTools* rendertools,
- bool useObjectColor,
- const MT_Vector4& rgbacolor
- );
-
- virtual void IndexPrimitivesMulti(
- const vecVertexArray& vertexarrays,
- const vecIndexArrays & indexarrays,
- DrawMode mode,
- bool useObjectColor,
- const MT_Vector4& rgbacolor,
- class KX_ListSlot** slot);
+ class RAS_IRenderTools* rendertools);
+ void IndexPrimitivesInternal(RAS_MeshSlot& ms, bool multi);
virtual void SetProjectionMatrix(MT_CmMatrix4x4 & mat);
virtual void SetProjectionMatrix(const MT_Matrix4x4 & mat);
@@ -182,7 +167,6 @@ public:
);
virtual const MT_Point3& GetCameraPosition();
- virtual void LoadViewMatrix();
virtual void SetFog(
float start,
@@ -214,7 +198,6 @@ public:
virtual void SetDrawingMode(int drawingmode);
virtual int GetDrawingMode();
- virtual void EnableTextures(bool enable);
virtual void SetCullFace(bool enable);
virtual void SetLines(bool enable);
@@ -270,13 +253,10 @@ public:
virtual void SetTexCoord(TexCoGen coords, int unit);
virtual void SetAttrib(TexCoGen coords, int unit);
- void TexCoord(const RAS_TexVert &tv);
- virtual void GetViewMatrix(MT_Matrix4x4 &mat) const;
+ void TexCoord(const RAS_TexVert &tv);
- void Tangent(const RAS_TexVert& v1,
- const RAS_TexVert& v2,
- const RAS_TexVert& v3,
- const MT_Vector3 &no);
+ const MT_Matrix4x4& GetViewMatrix() const;
+ const MT_Matrix4x4& GetViewInvMatrix() const;
virtual void EnableMotionBlur(float motionblurvalue);
virtual void DisableMotionBlur();
@@ -293,6 +273,7 @@ public:
};
virtual void SetBlendingMode(int blendmode);
+ virtual void SetFrontFace(bool ccw);
};
#endif //__RAS_OPENGLRASTERIZER
diff --git a/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_VAOpenGLRasterizer.cpp b/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_VAOpenGLRasterizer.cpp
index c78a97ad7be..2cb3b52adfb 100644
--- a/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_VAOpenGLRasterizer.cpp
+++ b/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_VAOpenGLRasterizer.cpp
@@ -33,6 +33,7 @@
#include <stdlib.h>
#include "GL/glew.h"
+#include "GPU_extensions.h"
#include "STR_String.h"
#include "RAS_TexVert.h"
@@ -77,16 +78,16 @@ void RAS_VAOpenGLRasterizer::SetDrawingMode(int drawingmode)
{
case KX_BOUNDINGBOX:
case KX_WIREFRAME:
- glDisableClientState(GL_COLOR_ARRAY);
- glDisable(GL_CULL_FACE);
+ //glDisableClientState(GL_COLOR_ARRAY);
+ //glDisable(GL_CULL_FACE);
break;
case KX_SOLID:
- glDisableClientState(GL_COLOR_ARRAY);
+ //glDisableClientState(GL_COLOR_ARRAY);
break;
case KX_TEXTURED:
case KX_SHADED:
case KX_SHADOW:
- glEnableClientState(GL_COLOR_ARRAY);
+ //glEnableClientState(GL_COLOR_ARRAY);
default:
break;
}
@@ -98,141 +99,121 @@ void RAS_VAOpenGLRasterizer::Exit()
glEnableClientState(GL_NORMAL_ARRAY);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
glDisableClientState(GL_COLOR_ARRAY);
- EnableTextures(false);
RAS_OpenGLRasterizer::Exit();
}
-void RAS_VAOpenGLRasterizer::IndexPrimitives( const vecVertexArray& vertexarrays,
- const vecIndexArrays & indexarrays,
- DrawMode mode,
- bool useObjectColor,
- const MT_Vector4& rgbacolor,
- class KX_ListSlot** slot)
+void RAS_VAOpenGLRasterizer::IndexPrimitives(RAS_MeshSlot& ms)
{
- static const GLsizei vtxstride = sizeof(RAS_TexVert);
+ static const GLsizei stride = sizeof(RAS_TexVert);
+ bool wireframe = m_drawingmode <= KX_WIREFRAME;
+ RAS_MeshSlot::iterator it;
GLenum drawmode;
- if(mode == KX_MODE_TRIANGLES)
- drawmode = GL_TRIANGLES;
- else if(mode == KX_MODE_QUADS)
- drawmode = GL_QUADS;
- else
- drawmode = GL_LINES;
- const RAS_TexVert* vertexarray;
- unsigned int numindices, vt;
-
- if (drawmode != GL_LINES)
- {
- if (useObjectColor)
- {
- glDisableClientState(GL_COLOR_ARRAY);
- glColor4d(rgbacolor[0], rgbacolor[1], rgbacolor[2], rgbacolor[3]);
- } else
- {
- glColor4d(0,0,0,1.0);
- glEnableClientState(GL_COLOR_ARRAY);
- }
- }
- else
- {
- glColor3d(0,0,0);
- }
-
- EnableTextures(false);
- glEnableClientState(GL_TEXTURE_COORD_ARRAY);
+ if(!wireframe)
+ glEnableClientState(GL_TEXTURE_COORD_ARRAY);
// use glDrawElements to draw each vertexarray
- for (vt=0;vt<vertexarrays.size();vt++)
- {
- vertexarray = &((*vertexarrays[vt]) [0]);
- const KX_IndexArray & indexarray = (*indexarrays[vt]);
- numindices = indexarray.size();
-
- if (!numindices)
+ for(ms.begin(it); !ms.end(it); ms.next(it)) {
+ if(it.totindex == 0)
continue;
-
- glVertexPointer(3,GL_FLOAT,vtxstride,vertexarray->getLocalXYZ());
- glNormalPointer(GL_FLOAT,vtxstride,vertexarray->getNormal());
- glTexCoordPointer(2,GL_FLOAT,vtxstride,vertexarray->getUV1());
- if(glIsEnabled(GL_COLOR_ARRAY))
- glColorPointer(4,GL_UNSIGNED_BYTE,vtxstride,vertexarray->getRGBA());
- //if(m_Lock)
- // local->Begin(vertexarrays[vt]->size());
+ // drawing mode
+ if(it.array->m_type == RAS_DisplayArray::TRIANGLE)
+ drawmode = GL_TRIANGLES;
+ else if(it.array->m_type == RAS_DisplayArray::QUAD)
+ drawmode = GL_QUADS;
+ else
+ drawmode = GL_LINES;
+
+ // colors
+ if (drawmode != GL_LINES && !wireframe) {
+ if (ms.m_bObjectColor) {
+ const MT_Vector4& rgba = ms.m_RGBAcolor;
- // here the actual drawing takes places
- glDrawElements(drawmode,numindices,GL_UNSIGNED_SHORT,&(indexarray[0]));
+ glDisableClientState(GL_COLOR_ARRAY);
+ glColor4d(rgba[0], rgba[1], rgba[2], rgba[3]);
+ }
+ else {
+ glColor4f(0.0f, 0.0f, 0.0f, 1.0f);
+ glEnableClientState(GL_COLOR_ARRAY);
+ }
+ }
+ else
+ glColor4f(0.0f, 0.0f, 0.0f, 1.0f);
+
+ glVertexPointer(3, GL_FLOAT, stride, it.vertex->getXYZ());
+ glNormalPointer(GL_FLOAT, stride, it.vertex->getNormal());
+ if(!wireframe) {
+ glTexCoordPointer(2, GL_FLOAT, stride, it.vertex->getUV1());
+ if(glIsEnabled(GL_COLOR_ARRAY))
+ glColorPointer(4, GL_UNSIGNED_BYTE, stride, it.vertex->getRGBA());
+ }
- //if(m_Lock)
- // local->End();
+ // here the actual drawing takes places
+ glDrawElements(drawmode, it.totindex, GL_UNSIGNED_SHORT, it.index);
}
- glDisableClientState(GL_TEXTURE_COORD_ARRAY);
+ if(!wireframe) {
+ glDisableClientState(GL_TEXTURE_COORD_ARRAY);
+ glDisableClientState(GL_COLOR_ARRAY);
+ }
}
-void RAS_VAOpenGLRasterizer::IndexPrimitivesMulti( const vecVertexArray& vertexarrays,
- const vecIndexArrays & indexarrays,
- DrawMode mode,
- bool useObjectColor,
- const MT_Vector4& rgbacolor,
- class KX_ListSlot** slot)
+void RAS_VAOpenGLRasterizer::IndexPrimitivesMulti(RAS_MeshSlot& ms)
{
- static const GLsizei vtxstride = sizeof(RAS_TexVert);
-
+ static const GLsizei stride = sizeof(RAS_TexVert);
+ bool wireframe = m_drawingmode <= KX_WIREFRAME;
+ RAS_MeshSlot::iterator it;
GLenum drawmode;
- if(mode == KX_MODE_TRIANGLES)
- drawmode = GL_TRIANGLES;
- else if(mode == KX_MODE_QUADS)
- drawmode = GL_QUADS;
- else
- drawmode = GL_LINES;
- const RAS_TexVert* vertexarray;
- unsigned int numindices, vt;
-
- if (drawmode != GL_LINES)
- {
- if (useObjectColor)
- {
- glDisableClientState(GL_COLOR_ARRAY);
- glColor4d(rgbacolor[0], rgbacolor[1], rgbacolor[2], rgbacolor[3]);
- }
- else
- {
- glColor4d(0,0,0,1.0);
- glEnableClientState(GL_COLOR_ARRAY);
- }
- }
- else
- {
- glColor3d(0,0,0);
- }
+ if(!wireframe)
+ EnableTextures(true);
// use glDrawElements to draw each vertexarray
- for (vt=0;vt<vertexarrays.size();vt++)
- {
- vertexarray = &((*vertexarrays[vt]) [0]);
- const KX_IndexArray & indexarray = (*indexarrays[vt]);
- numindices = indexarray.size();
-
- if (!numindices)
+ for(ms.begin(it); !ms.end(it); ms.next(it)) {
+ if(it.totindex == 0)
continue;
- glVertexPointer(3,GL_FLOAT,vtxstride,vertexarray->getLocalXYZ());
- glNormalPointer(GL_FLOAT,vtxstride,vertexarray->getNormal());
- TexCoordPtr(vertexarray);
- if(glIsEnabled(GL_COLOR_ARRAY))
- glColorPointer(4,GL_UNSIGNED_BYTE,vtxstride,vertexarray->getRGBA());
+ // drawing mode
+ if(it.array->m_type == RAS_DisplayArray::TRIANGLE)
+ drawmode = GL_TRIANGLES;
+ else if(it.array->m_type == RAS_DisplayArray::QUAD)
+ drawmode = GL_QUADS;
+ else
+ drawmode = GL_LINES;
+
+ // colors
+ if (drawmode != GL_LINES && !wireframe) {
+ if (ms.m_bObjectColor) {
+ const MT_Vector4& rgba = ms.m_RGBAcolor;
- //if(m_Lock)
- // local->Begin(vertexarrays[vt]->size());
+ glDisableClientState(GL_COLOR_ARRAY);
+ glColor4d(rgba[0], rgba[1], rgba[2], rgba[3]);
+ }
+ else {
+ glColor4f(0.0f, 0.0f, 0.0f, 1.0f);
+ glEnableClientState(GL_COLOR_ARRAY);
+ }
+ }
+ else
+ glColor4f(0.0f, 0.0f, 0.0f, 1.0f);
+
+ glVertexPointer(3, GL_FLOAT, stride, it.vertex->getXYZ());
+ glNormalPointer(GL_FLOAT, stride, it.vertex->getNormal());
+ if(!wireframe) {
+ TexCoordPtr(it.vertex);
+ if(glIsEnabled(GL_COLOR_ARRAY))
+ glColorPointer(4, GL_UNSIGNED_BYTE, stride, it.vertex->getRGBA());
+ }
// here the actual drawing takes places
- glDrawElements(drawmode,numindices,GL_UNSIGNED_SHORT,&(indexarray[0]));
-
- //if(m_Lock)
- // local->End();
+ glDrawElements(drawmode, it.totindex, GL_UNSIGNED_SHORT, it.index);
+ }
+
+ if(!wireframe) {
+ glDisableClientState(GL_COLOR_ARRAY);
+ EnableTextures(false);
}
}
@@ -248,7 +229,7 @@ void RAS_VAOpenGLRasterizer::TexCoordPtr(const RAS_TexVert *tv)
for(unit=0; unit<m_texco_num; unit++)
{
glClientActiveTextureARB(GL_TEXTURE0_ARB+unit);
- if(tv->getFlag() & TV_2NDUV && (int)tv->getUnit() == unit) {
+ if(tv->getFlag() & RAS_TexVert::SECOND_UV && (int)tv->getUnit() == unit) {
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glTexCoordPointer(2, GL_FLOAT, sizeof(RAS_TexVert), tv->getUV2());
continue;
@@ -257,7 +238,7 @@ void RAS_VAOpenGLRasterizer::TexCoordPtr(const RAS_TexVert *tv)
{
case RAS_TEXCO_ORCO:
case RAS_TEXCO_GLOB:
- glTexCoordPointer(3, GL_FLOAT, sizeof(RAS_TexVert),tv->getLocalXYZ());
+ glTexCoordPointer(3, GL_FLOAT, sizeof(RAS_TexVert),tv->getXYZ());
break;
case RAS_TEXCO_UV1:
glTexCoordPointer(2, GL_FLOAT, sizeof(RAS_TexVert),tv->getUV1());
@@ -284,7 +265,7 @@ void RAS_VAOpenGLRasterizer::TexCoordPtr(const RAS_TexVert *tv)
switch(m_attrib[unit]) {
case RAS_TEXCO_ORCO:
case RAS_TEXCO_GLOB:
- glVertexAttribPointerARB(unit, 3, GL_FLOAT, GL_FALSE, sizeof(RAS_TexVert), tv->getLocalXYZ());
+ glVertexAttribPointerARB(unit, 3, GL_FLOAT, GL_FALSE, sizeof(RAS_TexVert), tv->getXYZ());
break;
case RAS_TEXCO_UV1:
glVertexAttribPointerARB(unit, 2, GL_FLOAT, GL_FALSE, sizeof(RAS_TexVert), tv->getUV1());
@@ -313,11 +294,6 @@ void RAS_VAOpenGLRasterizer::EnableTextures(bool enable)
TexCoGen *texco, *attrib;
int unit, texco_num, attrib_num;
- /* disable previously enabled texture coordinates and attributes. ideally
- * this shouldn't be necessary .. */
- if(enable)
- EnableTextures(false);
-
/* we cache last texcoords and attribs to ensure we disable the ones that
* were actually last set */
if(enable) {
diff --git a/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_VAOpenGLRasterizer.h b/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_VAOpenGLRasterizer.h
index e4cc4ace0e8..766bbfbed0e 100644
--- a/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_VAOpenGLRasterizer.h
+++ b/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_VAOpenGLRasterizer.h
@@ -50,22 +50,10 @@ public:
virtual void SetDrawingMode(int drawingmode);
- virtual void IndexPrimitives( const vecVertexArray& vertexarrays,
- const vecIndexArrays & indexarrays,
- DrawMode mode,
- bool useObjectColor,
- const MT_Vector4& rgbacolor,
- class KX_ListSlot** slot);
-
- virtual void IndexPrimitivesMulti(
- const vecVertexArray& vertexarrays,
- const vecIndexArrays & indexarrays,
- DrawMode mode,
- bool useObjectColor,
- const MT_Vector4& rgbacolor,
- class KX_ListSlot** slot);
-
+ virtual void IndexPrimitives(class RAS_MeshSlot& ms);
+ virtual void IndexPrimitivesMulti(class RAS_MeshSlot& ms);
+private:
virtual void EnableTextures(bool enable);
//virtual bool QueryArrays(){return true;}
//virtual bool QueryLists(){return m_Lock;}
diff --git a/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/SConscript b/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/SConscript
index 0cf9c326370..8d46528f7f0 100644
--- a/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/SConscript
+++ b/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/SConscript
@@ -1,12 +1,9 @@
#!/usr/bin/python
Import ('env')
-if env['WITH_BF_GLEXT'] == 1:
- env['CPPFLAGS'].append('-DWITH_GLEXT')
-
sources = env.Glob('*.cpp')
incs = '. #source/kernel/gen_system #intern/string #intern/moto/include #source/gameengine/Rasterizer #source/gameengine/BlenderRoutines '
-incs += ' #extern/glew/include ' + env['BF_OPENGL_INC']
+incs += ' #source/blender/gpu #extern/glew/include ' + env['BF_OPENGL_INC']
env.BlenderLib ( 'bf_oglrasterizer', Split(sources), Split(incs), [], libtype=['game','player'], priority=[40, 120] )
diff --git a/source/gameengine/Rasterizer/RAS_Polygon.cpp b/source/gameengine/Rasterizer/RAS_Polygon.cpp
index b74cb9cfcac..50331d7a664 100644
--- a/source/gameengine/Rasterizer/RAS_Polygon.cpp
+++ b/source/gameengine/Rasterizer/RAS_Polygon.cpp
@@ -26,99 +26,82 @@
* ***** END GPL LICENSE BLOCK *****
*/
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
#ifdef WIN32
-
#pragma warning (disable:4786)
#endif
#include "RAS_Polygon.h"
-RAS_Polygon::RAS_Polygon(RAS_MaterialBucket* bucket,
- bool visible,
- int numverts,
- int vtxarrayindex)
- :m_bucket(bucket),
- m_vertexindexbase(numverts),
- m_numverts(numverts),
- m_edgecode(65535)
+RAS_Polygon::RAS_Polygon(RAS_MaterialBucket* bucket, RAS_DisplayArray *darray, int numvert)
{
- m_vertexindexbase.m_vtxarray = vtxarrayindex ;//m_bucket->FindVertexArray(numverts);
- m_polyFlags.Visible = visible;
-}
-
+ m_bucket = bucket;
+ m_darray = darray;
+ m_offset[0]= m_offset[1]= m_offset[2]= m_offset[3]= 0;
+ m_numvert = numvert;
+ m_edgecode = 255;
+ m_polyflags = 0;
+}
int RAS_Polygon::VertexCount()
{
- return m_numverts;
+ return m_numvert;
}
-
-
-void RAS_Polygon::SetVertex(int i,
- unsigned int vertexindex ) //const MT_Point3& xyz,const MT_Point2& uv,const unsigned int rgbacolor,const MT_Vector3& normal)
+void RAS_Polygon::SetVertexOffset(int i, unsigned short offset)
{
- m_vertexindexbase.SetIndex(i,vertexindex); //m_bucket->FindOrAddVertex(m_vertexindexbase.m_vtxarray,
- //xyz,uv,rgbacolor,normal));
+ m_offset[i] = offset;
}
-
-
-const KX_VertexIndex& RAS_Polygon::GetIndexBase()
+RAS_TexVert *RAS_Polygon::GetVertex(int i)
{
- return m_vertexindexbase;
+ return &m_darray->m_vertex[m_offset[i]];
}
-
-
-void RAS_Polygon::SetVisibleWireframeEdges(int edgecode)
+int RAS_Polygon::GetVertexOffset(int i)
{
- m_edgecode = edgecode;
+ return m_offset[i];
}
-
-
-// each bit is for a visible edge, starting with bit 1 for the first edge, bit 2 for second etc.
int RAS_Polygon::GetEdgeCode()
{
return m_edgecode;
}
+void RAS_Polygon::SetEdgeCode(int edgecode)
+{
+ m_edgecode = edgecode;
+}
bool RAS_Polygon::IsVisible()
{
- return m_polyFlags.Visible;
+ return (m_polyflags & VISIBLE) != 0;
}
-
+void RAS_Polygon::SetVisible(bool visible)
+{
+ if(visible) m_polyflags |= VISIBLE;
+ else m_polyflags &= ~VISIBLE;
+}
bool RAS_Polygon::IsCollider()
{
- return m_polyFlags.Collider;
+ return (m_polyflags & COLLIDER) != 0;
}
-
-
-void RAS_Polygon::SetCollider(bool col)
+void RAS_Polygon::SetCollider(bool visible)
{
- m_polyFlags.Collider = col;
+ if(visible) m_polyflags |= COLLIDER;
+ else m_polyflags &= ~COLLIDER;
}
-
-
-KX_VertexIndex& RAS_Polygon::GetVertexIndexBase()
+RAS_MaterialBucket* RAS_Polygon::GetMaterial()
{
- return m_vertexindexbase;
+ return m_bucket;
}
-
-
-RAS_MaterialBucket* RAS_Polygon::GetMaterial()
+RAS_DisplayArray* RAS_Polygon::GetDisplayArray()
{
- return m_bucket;
+ return m_darray;
}
diff --git a/source/gameengine/Rasterizer/RAS_Polygon.h b/source/gameengine/Rasterizer/RAS_Polygon.h
index 7ce7926a816..18526ba45f7 100644
--- a/source/gameengine/Rasterizer/RAS_Polygon.h
+++ b/source/gameengine/Rasterizer/RAS_Polygon.h
@@ -35,55 +35,47 @@
#include <vector>
using namespace std;
-
-//
-// Bitfield that stores the flags for each CValue derived class
-//
-struct PolygonFlags {
- PolygonFlags() :
- Visible(true),
- Collider(true)
- {
- }
- unsigned char Visible : 1;
- unsigned char Collider : 1;
- //int Visible : 1;
- //int Collider : 1;
-};
+/* polygon flags */
class RAS_Polygon
{
+ /* location */
RAS_MaterialBucket* m_bucket;
- KX_VertexIndex m_vertexindexbase;
- int m_numverts;
- int m_edgecode;
- PolygonFlags m_polyFlags;
-
+ RAS_DisplayArray* m_darray;
+ unsigned short m_offset[4];
+ unsigned short m_numvert;
+
+ /* flags */
+ unsigned char m_edgecode;
+ unsigned char m_polyflags;
public:
- RAS_Polygon(RAS_MaterialBucket* bucket,
- bool visible,
- int numverts,
- int vtxarrayindex) ;
+ enum {
+ VISIBLE = 1,
+ COLLIDER = 2
+ };
+
+ RAS_Polygon(RAS_MaterialBucket* bucket, RAS_DisplayArray* darray, int numvert);
virtual ~RAS_Polygon() {};
-// RAS_TexVert* GetVertex(int index);
int VertexCount();
- void SetVertex(int i, unsigned int vertexindex); //const MT_Point3& xyz,const MT_Point2& uv,const unsigned int rgbacolor,const MT_Vector3& normal)
-
- const KX_VertexIndex& GetIndexBase();
+ RAS_TexVert* GetVertex(int i);
- void SetVisibleWireframeEdges(int edgecode);
+ void SetVertexOffset(int i, unsigned short offset);
+ int GetVertexOffset(int i);
+
// each bit is for a visible edge, starting with bit 1 for the first edge, bit 2 for second etc.
int GetEdgeCode();
+ void SetEdgeCode(int edgecode);
bool IsVisible();
+ void SetVisible(bool visible);
+
bool IsCollider();
- void SetCollider(bool col);
+ void SetCollider(bool collider);
- KX_VertexIndex& GetVertexIndexBase();
RAS_MaterialBucket* GetMaterial();
-
+ RAS_DisplayArray* GetDisplayArray();
};
#endif
diff --git a/source/gameengine/Rasterizer/RAS_TexVert.cpp b/source/gameengine/Rasterizer/RAS_TexVert.cpp
index 935633dc636..b92965ed1cc 100644
--- a/source/gameengine/Rasterizer/RAS_TexVert.cpp
+++ b/source/gameengine/Rasterizer/RAS_TexVert.cpp
@@ -27,12 +27,7 @@
*/
#include "RAS_TexVert.h"
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#define SHORT(x) short(x*32767.0)
+#include "MT_Matrix4x4.h"
RAS_TexVert::RAS_TexVert(const MT_Point3& xyz,
const MT_Point2& uv,
@@ -40,7 +35,7 @@ RAS_TexVert::RAS_TexVert(const MT_Point3& xyz,
const MT_Vector4& tangent,
const unsigned int rgba,
const MT_Vector3& normal,
- const short flag,
+ const bool flat,
const unsigned int origindex)
{
xyz.getValue(m_localxyz);
@@ -49,9 +44,10 @@ RAS_TexVert::RAS_TexVert(const MT_Point3& xyz,
SetRGBA(rgba);
SetNormal(normal);
tangent.getValue(m_tangent);
- m_flag = flag;
+ m_flag = (flat)? FLAT: 0;
m_origindex = origindex;
m_unit = 2;
+ m_softBodyIndex = -1;
}
const MT_Point3& RAS_TexVert::xyz()
@@ -101,7 +97,7 @@ void RAS_TexVert::SetFlag(const short flag)
void RAS_TexVert::SetUnit(const unsigned int u)
{
- m_unit = u<=TV_MAX?u:TV_MAX;
+ m_unit = u<=MAX_UNIT?u:MAX_UNIT;
}
void RAS_TexVert::SetNormal(const MT_Vector3& normal)
@@ -109,12 +105,18 @@ void RAS_TexVert::SetNormal(const MT_Vector3& normal)
normal.getValue(m_normal);
}
+void RAS_TexVert::SetTangent(const MT_Vector3& tangent)
+{
+ tangent.getValue(m_tangent);
+}
+
// compare two vertices, and return TRUE if both are almost identical (they can be shared)
bool RAS_TexVert::closeTo(const RAS_TexVert* other)
{
return (m_flag == other->m_flag &&
m_rgba == other->m_rgba &&
MT_fuzzyEqual(MT_Vector3(m_normal), MT_Vector3(other->m_normal)) &&
+ MT_fuzzyEqual(MT_Vector3(m_tangent), MT_Vector3(other->m_tangent)) &&
MT_fuzzyEqual(MT_Vector2(m_uv1), MT_Vector2(other->m_uv1)) &&
MT_fuzzyEqual(MT_Vector2(m_uv2), MT_Vector2(other->m_uv2)) && // p --
MT_fuzzyEqual(MT_Vector3(m_localxyz), MT_Vector3(other->m_localxyz))) ;
@@ -131,11 +133,10 @@ unsigned int RAS_TexVert::getUnit() const
return m_unit;
}
-
-void RAS_TexVert::getOffsets(void* &xyz, void* &uv1, void* &rgba, void* &normal) const
+void RAS_TexVert::Transform(const MT_Matrix4x4& mat, const MT_Matrix4x4& nmat)
{
- xyz = (void *) m_localxyz;
- uv1 = (void *) m_uv1;
- rgba = (void *) &m_rgba;
- normal = (void *) m_normal;
+ SetXYZ((mat*MT_Vector4(m_localxyz[0], m_localxyz[1], m_localxyz[2], 1.0)).getValue());
+ SetNormal((nmat*MT_Vector4(m_normal[0], m_normal[1], m_normal[2], 1.0)).getValue());
+ SetTangent((nmat*MT_Vector4(m_tangent[0], m_tangent[1], m_tangent[2], 1.0)).getValue());
}
+
diff --git a/source/gameengine/Rasterizer/RAS_TexVert.h b/source/gameengine/Rasterizer/RAS_TexVert.h
index bf092b4b230..54da109cbf1 100644
--- a/source/gameengine/Rasterizer/RAS_TexVert.h
+++ b/source/gameengine/Rasterizer/RAS_TexVert.h
@@ -37,11 +37,6 @@
static MT_Point3 g_pt3;
static MT_Point2 g_pt2;
-#define TV_CALCFACENORMAL 0x0001
-#define TV_2NDUV 0x0002
-
-#define TV_MAX 3//match Def in BL_Material.h
-
class RAS_TexVert
{
@@ -49,16 +44,23 @@ class RAS_TexVert
float m_uv1[2]; // 2*4 = 8
float m_uv2[2]; // 2*4 = 8
unsigned int m_rgba; // 4
- float m_tangent[4]; // 4*2 = 8
- float m_normal[3]; // 3*2 = 6
+ float m_tangent[4]; // 4*4 = 16
+ float m_normal[3]; // 3*4 = 12
short m_flag; // 2
+ short m_softBodyIndex; //2
unsigned int m_unit; // 4
- unsigned int m_origindex; // 4
+ unsigned int m_origindex; // 4
//---------
- // 56
+ // 56+6+8+2=72
// 32 bytes total size, fits nice = 56 = not fit nice.
- // We'll go for 64 bytes total size - 24 bytes left.
+
public:
+ enum {
+ FLAT = 1,
+ SECOND_UV = 2,
+ MAX_UNIT = 8
+ };
+
short getFlag() const;
unsigned int getUnit() const;
@@ -70,7 +72,7 @@ public:
const MT_Vector4& tangent,
const unsigned int rgba,
const MT_Vector3& normal,
- const short flag,
+ const bool flat,
const unsigned int origindex);
~RAS_TexVert() {};
@@ -82,7 +84,7 @@ public:
return m_uv2;
};
- const float* getLocalXYZ() const {
+ const float* getXYZ() const {
return m_localxyz;
};
@@ -90,6 +92,16 @@ public:
return m_normal;
}
+ short int getSoftBodyIndex() const
+ {
+ return m_softBodyIndex;
+ }
+
+ void setSoftBodyIndex(short int sbIndex)
+ {
+ m_softBodyIndex = sbIndex;
+ }
+
const float* getTangent() const {
return m_tangent;
}
@@ -108,20 +120,19 @@ public:
void SetRGBA(const unsigned int rgba);
void SetNormal(const MT_Vector3& normal);
+ void SetTangent(const MT_Vector3& tangent);
void SetFlag(const short flag);
void SetUnit(const unsigned u);
void SetRGBA(const MT_Vector4& rgba);
const MT_Point3& xyz();
- // compare two vertices, and return TRUE if both are almost identical (they can be shared)
- bool closeTo(const RAS_TexVert* other);
+ void Transform(const class MT_Matrix4x4& mat,
+ const class MT_Matrix4x4& nmat);
- bool closeTo(const MT_Point3& otherxyz,
- const MT_Point2& otheruv,
- const unsigned int otherrgba,
- short othernormal[3]) const;
- void getOffsets(void*&xyz, void *&uv1, void *&rgba, void *&normal) const;
+ // compare two vertices, to test if they can be shared, used for
+ // splitting up based on uv's, colors, etc
+ bool closeTo(const RAS_TexVert* other);
};
#endif //__RAS_TEXVERT
diff --git a/source/gameengine/Rasterizer/SConscript b/source/gameengine/Rasterizer/SConscript
index e6bc657ed6d..a024f7e0ee6 100644
--- a/source/gameengine/Rasterizer/SConscript
+++ b/source/gameengine/Rasterizer/SConscript
@@ -3,11 +3,8 @@ Import ('env')
sources = env.Glob('*.cpp')
-if env['WITH_BF_GLEXT'] == 1:
- env['CPPFLAGS'].append('-DWITH_GLEXT')
-
-incs = '. #source/kernel/gen_system #intern/string #intern/moto/include #source/gameengine/BlenderRoutines #extern/glew/include #source/gameengine/Expressions'
+incs = '. #source/kernel/gen_system #intern/string #intern/moto/include #source/gameengine/BlenderRoutines #extern/glew/include #source/gameengine/Expressions #source/blender/blenkernel #source/blender/makesdna'
incs += ' ' + env['BF_PYTHON_INC']
if env['OURPLATFORM']=='win32-vc':
diff --git a/source/kernel/CMakeLists.txt b/source/kernel/CMakeLists.txt
index 3d966152cc5..ac759393326 100644
--- a/source/kernel/CMakeLists.txt
+++ b/source/kernel/CMakeLists.txt
@@ -24,7 +24,7 @@
#
# ***** END GPL LICENSE BLOCK *****
-SET(INC gen_messaging gen_system ../../intern/string ../../intern/moto/include)
+SET(INC gen_messaging gen_system ../../intern/string ../../intern/moto/include ../../source/blender/blenloader )
FILE(GLOB SRC
gen_messaging/intern/messaging.c
diff --git a/source/kernel/SConscript b/source/kernel/SConscript
index 9e678c041dc..8bd1a18f835 100644
--- a/source/kernel/SConscript
+++ b/source/kernel/SConscript
@@ -5,6 +5,6 @@ sources = 'gen_messaging/intern/messaging.c gen_system/GEN_HashedPtr.cpp'
sources += ' gen_system/GEN_Matrix4x4.cpp gen_system/SYS_SingletonSystem.cpp'
sources += ' gen_system/SYS_System.cpp'
-incs = 'gen_messaging gen_system #/intern/string #/intern/moto/include'
+incs = 'gen_messaging gen_system #/intern/string #/intern/moto/include #/source/blender/blenloader '
env.BlenderLib ( 'bf_kernel', Split(sources), Split(incs), [], libtype = ['common','game2', 'player'], priority = [15, 10, 150] )
diff --git a/source/kernel/gen_system/GEN_HashedPtr.cpp b/source/kernel/gen_system/GEN_HashedPtr.cpp
index 49ccb252246..6dbed1fb7a8 100644
--- a/source/kernel/gen_system/GEN_HashedPtr.cpp
+++ b/source/kernel/gen_system/GEN_HashedPtr.cpp
@@ -33,6 +33,8 @@
#include <config.h>
#endif
+#include "BLO_sys_types.h" // for intptr_t support
+
//
// Build hash index from pointer. Even though the final result
// is a 32-bit integer, use all the bits of the pointer as long
@@ -41,11 +43,7 @@
unsigned int GEN_Hash(void * inDWord)
{
-#if defined(_WIN64)
- unsigned __int64 key = (unsigned __int64)inDWord;
-#else
- unsigned long key = (unsigned long)inDWord;
-#endif
+ uintptr_t key = (uintptr_t)inDWord;
key += ~(key << 16);
key ^= (key >> 5);
diff --git a/source/kernel/gen_system/GEN_Map.h b/source/kernel/gen_system/GEN_Map.h
index 37c75d8293a..88c79293223 100644
--- a/source/kernel/gen_system/GEN_Map.h
+++ b/source/kernel/gen_system/GEN_Map.h
@@ -50,6 +50,19 @@ public:
m_buckets[i] = 0;
}
}
+
+ GEN_Map(const GEN_Map& map)
+ {
+ m_num_buckets = map.m_num_buckets;
+ m_buckets = new Entry *[m_num_buckets];
+
+ for (int i = 0; i < m_num_buckets; ++i) {
+ m_buckets[i] = 0;
+
+ for(Entry *entry = map.m_buckets[i]; entry; entry=entry->m_next)
+ insert(entry->m_key, entry->m_value);
+ }
+ }
int size() {
int count=0;
diff --git a/source/kernel/gen_system/Makefile b/source/kernel/gen_system/Makefile
index 855af376615..31535ad2a97 100644
--- a/source/kernel/gen_system/Makefile
+++ b/source/kernel/gen_system/Makefile
@@ -37,4 +37,5 @@ CCFLAGS += $(LEVEL_2_CPP_WARNINGS)
CPPFLAGS += -I$(NAN_MOTO)/include
CPPFLAGS += -I$(NAN_STRING)/include
+CPPFLAGS += -I../../../source/blender/blenloader
diff --git a/source/nan_definitions.mk b/source/nan_definitions.mk
index 9c1a28de999..424a7c558d7 100644
--- a/source/nan_definitions.mk
+++ b/source/nan_definitions.mk
@@ -56,9 +56,6 @@ all debug::
# Object Config_Guess DIRectory
export OCGDIR = $(NAN_OBJDIR)/$(CONFIG_GUESS)
- export WITH_GLEXT?=true
- export WITH_BF_GLEXT?=$(WITH_GLEXT)
-
# Determines what targets are built
export WITH_BF_DYNAMICOPENGL ?= true
export WITH_BF_STATICOPENGL ?= false
@@ -287,7 +284,7 @@ endif
export FREEDESKTOP ?= true
export NAN_PYTHON ?= /usr/local
- export NAN_PYTHON_VERSION ?= 2.3
+ export NAN_PYTHON_VERSION ?= 2.5
export NAN_PYTHON_BINARY ?= $(NAN_PYTHON)/bin/python$(NAN_PYTHON_VERSION)
export NAN_PYTHON_LIB ?= $(NAN_PYTHON)/lib/python$(NAN_PYTHON_VERSION)/config/libpython$(NAN_PYTHON_VERSION).a
export NAN_OPENAL ?= /usr/local
@@ -302,9 +299,9 @@ endif
export NAN_NSPR ?= /usr/local
export NAN_FREETYPE ?= $(LCGDIR)/freetype
export NAN_GETTEXT ?= $(LCGDIR)/gettext
- export NAN_SDL ?= $(shell sdl11-config --prefix)
- export NAN_SDLLIBS ?= $(shell sdl11-config --libs)
- export NAN_SDLCFLAGS ?= $(shell sdl11-config --cflags)
+ export NAN_SDL ?= $(shell sdl-config --prefix)
+ export NAN_SDLLIBS ?= $(shell sdl-config --libs)
+ export NAN_SDLCFLAGS ?= $(shell sdl-config --cflags)
# Uncomment the following line to use Mozilla inplace of netscape
# CPPFLAGS +=-DMOZ_NOT_NET