+++ /dev/null
-#
-# Copyright 2008, 2009 Michel Pollet <buserror@gmail.com>
-#
-# This file is part of simavr.
-#
-# simavr 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 3 of the License, or
-# (at your option) any later version.
-#
-# simavr 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 simavr. If not, see <http://www.gnu.org/licenses/>.
-
-target= reprap
-firm_src = ${wildcard atmega*.c}
-firmware = ${firm_src:.c=.hex}
-simavr = ../../
-
-LIBC3 = ../shared/libc3
-
-IPATH = .
-IPATH += src
-IPATH += ../parts
-IPATH += ../shared
-IPATH += $(LIBC3)/src
-IPATH += $(LIBC3)/srcgl
-IPATH += ${simavr}/include
-IPATH += ${simavr}/simavr/sim
-
-VPATH = src
-VPATH += ../parts
-VPATH += ../shared
-
-# for the Open Motion Controller board
-CPPFLAGS += -DMOTHERBOARD=91
-CPPFLAGS += ${shell pkg-config --cflags pangocairo}
-
-include ../Makefile.opengl
-
-LDFLAGS += ${shell pkg-config --libs pangocairo}
-LDFLAGS += -lpthread -lutil -ldl
-LDFLAGS += -lm
-LDFLAGS += -rpath $(LIBC3)/${OBJ}/.libs -L$(LIBC3)/${OBJ}/.libs -lc3 -lc3gl
-
-CPPFLAGS += ${patsubst %,-I%,${subst :, ,${IPATH}}}
-
-
-all: obj ${firmware} ${target}
-
-include ${simavr}/Makefile.common
-
-board = ${OBJ}/${target}.elf
-
-${board} : ${OBJ}/arduidiot_pins.o
-${board} : ${OBJ}/button.o
-${board} : ${OBJ}/uart_pty.o
-${board} : ${OBJ}/thermistor.o
-${board} : ${OBJ}/heatpot.o
-${board} : ${OBJ}/stepper.o
-${board} : ${OBJ}/${target}.o
-${board} : ${OBJ}/${target}_gl.o
-
-build-libc3:
- $(MAKE) -C $(LIBC3) CC="$(CC)" CFLAGS="$(CFLAGS)"
-
-${target}: build-libc3 ${board}
- @echo $@ done
-
-clean: clean-${OBJ}
- rm -rf *.a *.axf ${target} *.vcd
- $(MAKE) -C $(LIBC3) CC="$(CC)" CFLAGS="$(CFLAGS)" clean
-
-
+++ /dev/null
-/*============================================================================\r
-\r
-\r
- NVIDIA FXAA 3.11 by TIMOTHY LOTTES\r
-\r
-\r
-------------------------------------------------------------------------------\r
-COPYRIGHT (C) 2010, 2011 NVIDIA CORPORATION. ALL RIGHTS RESERVED.\r
-------------------------------------------------------------------------------\r
-TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THIS SOFTWARE IS PROVIDED\r
-*AS IS* AND NVIDIA AND ITS SUPPLIERS DISCLAIM ALL WARRANTIES, EITHER EXPRESS\r
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF\r
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL NVIDIA\r
-OR ITS SUPPLIERS BE LIABLE FOR ANY SPECIAL, INCIDENTAL, INDIRECT, OR\r
-CONSEQUENTIAL DAMAGES WHATSOEVER (INCLUDING, WITHOUT LIMITATION, DAMAGES FOR\r
-LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, LOSS OF BUSINESS INFORMATION,\r
-OR ANY OTHER PECUNIARY LOSS) ARISING OUT OF THE USE OF OR INABILITY TO USE\r
-THIS SOFTWARE, EVEN IF NVIDIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\r
-DAMAGES.\r
-\r
-------------------------------------------------------------------------------\r
- INTEGRATION CHECKLIST\r
-------------------------------------------------------------------------------\r
-(1.)\r
-In the shader source, setup defines for the desired configuration.\r
-When providing multiple shaders (for different presets),\r
-simply setup the defines differently in multiple files.\r
-Example,\r
-\r
- #define FXAA_PC 1\r
- #define FXAA_HLSL_5 1\r
- #define FXAA_QUALITY__PRESET 12\r
-\r
-Or,\r
-\r
- #define FXAA_360 1\r
- \r
-Or,\r
-\r
- #define FXAA_PS3 1\r
- \r
-Etc.\r
-\r
-(2.)\r
-Then include this file,\r
-\r
- #include "Fxaa3_11.h"\r
-\r
-(3.)\r
-Then call the FXAA pixel shader from within your desired shader.\r
-Look at the FXAA Quality FxaaPixelShader() for docs on inputs.\r
-As for FXAA 3.11 all inputs for all shaders are the same \r
-to enable easy porting between platforms.\r
-\r
- return FxaaPixelShader(...);\r
-\r
-(4.)\r
-Insure pass prior to FXAA outputs RGBL (see next section).\r
-Or use,\r
-\r
- #define FXAA_GREEN_AS_LUMA 1\r
-\r
-(5.)\r
-Setup engine to provide the following constants\r
-which are used in the FxaaPixelShader() inputs,\r
-\r
- FxaaFloat2 fxaaQualityRcpFrame,\r
- FxaaFloat4 fxaaConsoleRcpFrameOpt,\r
- FxaaFloat4 fxaaConsoleRcpFrameOpt2,\r
- FxaaFloat4 fxaaConsole360RcpFrameOpt2,\r
- FxaaFloat fxaaQualitySubpix,\r
- FxaaFloat fxaaQualityEdgeThreshold,\r
- FxaaFloat fxaaQualityEdgeThresholdMin,\r
- FxaaFloat fxaaConsoleEdgeSharpness,\r
- FxaaFloat fxaaConsoleEdgeThreshold,\r
- FxaaFloat fxaaConsoleEdgeThresholdMin,\r
- FxaaFloat4 fxaaConsole360ConstDir\r
-\r
-Look at the FXAA Quality FxaaPixelShader() for docs on inputs.\r
-\r
-(6.)\r
-Have FXAA vertex shader run as a full screen triangle,\r
-and output "pos" and "fxaaConsolePosPos" \r
-such that inputs in the pixel shader provide,\r
-\r
- // {xy} = center of pixel\r
- FxaaFloat2 pos,\r
-\r
- // {xy__} = upper left of pixel\r
- // {__zw} = lower right of pixel\r
- FxaaFloat4 fxaaConsolePosPos,\r
-\r
-(7.)\r
-Insure the texture sampler(s) used by FXAA are set to bilinear filtering.\r
-\r
-\r
-------------------------------------------------------------------------------\r
- INTEGRATION - RGBL AND COLORSPACE\r
-------------------------------------------------------------------------------\r
-FXAA3 requires RGBL as input unless the following is set, \r
-\r
- #define FXAA_GREEN_AS_LUMA 1\r
-\r
-In which case the engine uses green in place of luma,\r
-and requires RGB input is in a non-linear colorspace.\r
-\r
-RGB should be LDR (low dynamic range).\r
-Specifically do FXAA after tonemapping.\r
-\r
-RGB data as returned by a texture fetch can be non-linear,\r
-or linear when FXAA_GREEN_AS_LUMA is not set.\r
-Note an "sRGB format" texture counts as linear,\r
-because the result of a texture fetch is linear data.\r
-Regular "RGBA8" textures in the sRGB colorspace are non-linear.\r
-\r
-If FXAA_GREEN_AS_LUMA is not set,\r
-luma must be stored in the alpha channel prior to running FXAA.\r
-This luma should be in a perceptual space (could be gamma 2.0).\r
-Example pass before FXAA where output is gamma 2.0 encoded,\r
-\r
- color.rgb = ToneMap(color.rgb); // linear color output\r
- color.rgb = sqrt(color.rgb); // gamma 2.0 color output\r
- return color;\r
-\r
-To use FXAA,\r
-\r
- color.rgb = ToneMap(color.rgb); // linear color output\r
- color.rgb = sqrt(color.rgb); // gamma 2.0 color output\r
- color.a = dot(color.rgb, FxaaFloat3(0.299, 0.587, 0.114)); // compute luma\r
- return color;\r
-\r
-Another example where output is linear encoded,\r
-say for instance writing to an sRGB formated render target,\r
-where the render target does the conversion back to sRGB after blending,\r
-\r
- color.rgb = ToneMap(color.rgb); // linear color output\r
- return color;\r
-\r
-To use FXAA,\r
-\r
- color.rgb = ToneMap(color.rgb); // linear color output\r
- color.a = sqrt(dot(color.rgb, FxaaFloat3(0.299, 0.587, 0.114))); // compute luma\r
- return color;\r
-\r
-Getting luma correct is required for the algorithm to work correctly.\r
-\r
-\r
-------------------------------------------------------------------------------\r
- BEING LINEARLY CORRECT?\r
-------------------------------------------------------------------------------\r
-Applying FXAA to a framebuffer with linear RGB color will look worse.\r
-This is very counter intuitive, but happends to be true in this case.\r
-The reason is because dithering artifacts will be more visiable \r
-in a linear colorspace.\r
-\r
-\r
-------------------------------------------------------------------------------\r
- COMPLEX INTEGRATION\r
-------------------------------------------------------------------------------\r
-Q. What if the engine is blending into RGB before wanting to run FXAA?\r
-\r
-A. In the last opaque pass prior to FXAA,\r
- have the pass write out luma into alpha.\r
- Then blend into RGB only.\r
- FXAA should be able to run ok\r
- assuming the blending pass did not any add aliasing.\r
- This should be the common case for particles and common blending passes.\r
-\r
-A. Or use FXAA_GREEN_AS_LUMA.\r
-\r
-============================================================================*/\r
-\r
-/*============================================================================\r
-\r
- INTEGRATION KNOBS\r
-\r
-============================================================================*/\r
-//\r
-// FXAA_PS3 and FXAA_360 choose the console algorithm (FXAA3 CONSOLE).\r
-// FXAA_360_OPT is a prototype for the new optimized 360 version.\r
-//\r
-// 1 = Use API.\r
-// 0 = Don't use API.\r
-//\r
-/*--------------------------------------------------------------------------*/\r
-#ifndef FXAA_PS3\r
- #define FXAA_PS3 0\r
-#endif\r
-/*--------------------------------------------------------------------------*/\r
-#ifndef FXAA_360\r
- #define FXAA_360 0\r
-#endif\r
-/*--------------------------------------------------------------------------*/\r
-#ifndef FXAA_360_OPT\r
- #define FXAA_360_OPT 0\r
-#endif\r
-/*==========================================================================*/\r
-#ifndef FXAA_PC\r
- //\r
- // FXAA Quality\r
- // The high quality PC algorithm.\r
- //\r
- #define FXAA_PC 0\r
-#endif\r
-/*--------------------------------------------------------------------------*/\r
-#ifndef FXAA_PC_CONSOLE\r
- //\r
- // The console algorithm for PC is included\r
- // for developers targeting really low spec machines.\r
- // Likely better to just run FXAA_PC, and use a really low preset.\r
- //\r
- #define FXAA_PC_CONSOLE 0\r
-#endif\r
-/*--------------------------------------------------------------------------*/\r
-#ifndef FXAA_GLSL_120\r
- #define FXAA_GLSL_120 0\r
-#endif\r
-/*--------------------------------------------------------------------------*/\r
-#ifndef FXAA_GLSL_130\r
- #define FXAA_GLSL_130 0\r
-#endif\r
-/*--------------------------------------------------------------------------*/\r
-#ifndef FXAA_HLSL_3\r
- #define FXAA_HLSL_3 0\r
-#endif\r
-/*--------------------------------------------------------------------------*/\r
-#ifndef FXAA_HLSL_4\r
- #define FXAA_HLSL_4 0\r
-#endif\r
-/*--------------------------------------------------------------------------*/\r
-#ifndef FXAA_HLSL_5\r
- #define FXAA_HLSL_5 0\r
-#endif\r
-/*==========================================================================*/\r
-#ifndef FXAA_GREEN_AS_LUMA\r
- //\r
- // For those using non-linear color,\r
- // and either not able to get luma in alpha, or not wanting to,\r
- // this enables FXAA to run using green as a proxy for luma.\r
- // So with this enabled, no need to pack luma in alpha.\r
- //\r
- // This will turn off AA on anything which lacks some amount of green.\r
- // Pure red and blue or combination of only R and B, will get no AA.\r
- //\r
- // Might want to lower the settings for both,\r
- // fxaaConsoleEdgeThresholdMin\r
- // fxaaQualityEdgeThresholdMin\r
- // In order to insure AA does not get turned off on colors \r
- // which contain a minor amount of green.\r
- //\r
- // 1 = On.\r
- // 0 = Off.\r
- //\r
- #define FXAA_GREEN_AS_LUMA 0\r
-#endif\r
-/*--------------------------------------------------------------------------*/\r
-#ifndef FXAA_EARLY_EXIT\r
- //\r
- // Controls algorithm's early exit path.\r
- // On PS3 turning this ON adds 2 cycles to the shader.\r
- // On 360 turning this OFF adds 10ths of a millisecond to the shader.\r
- // Turning this off on console will result in a more blurry image.\r
- // So this defaults to on.\r
- //\r
- // 1 = On.\r
- // 0 = Off.\r
- //\r
- #define FXAA_EARLY_EXIT 1\r
-#endif\r
-/*--------------------------------------------------------------------------*/\r
-#ifndef FXAA_DISCARD\r
- //\r
- // Only valid for PC OpenGL currently.\r
- // Probably will not work when FXAA_GREEN_AS_LUMA = 1.\r
- //\r
- // 1 = Use discard on pixels which don't need AA.\r
- // For APIs which enable concurrent TEX+ROP from same surface.\r
- // 0 = Return unchanged color on pixels which don't need AA.\r
- //\r
- #define FXAA_DISCARD 0\r
-#endif\r
-/*--------------------------------------------------------------------------*/\r
-#ifndef FXAA_FAST_PIXEL_OFFSET\r
- //\r
- // Used for GLSL 120 only.\r
- //\r
- // 1 = GL API supports fast pixel offsets\r
- // 0 = do not use fast pixel offsets\r
- //\r
- #ifdef GL_EXT_gpu_shader4\r
- #define FXAA_FAST_PIXEL_OFFSET 1\r
- #endif\r
- #ifdef GL_NV_gpu_shader5\r
- #define FXAA_FAST_PIXEL_OFFSET 1\r
- #endif\r
- #ifdef GL_ARB_gpu_shader5\r
- #define FXAA_FAST_PIXEL_OFFSET 1\r
- #endif\r
- #ifndef FXAA_FAST_PIXEL_OFFSET\r
- #define FXAA_FAST_PIXEL_OFFSET 0\r
- #endif\r
-#endif\r
-/*--------------------------------------------------------------------------*/\r
-#ifndef FXAA_GATHER4_ALPHA\r
- //\r
- // 1 = API supports gather4 on alpha channel.\r
- // 0 = API does not support gather4 on alpha channel.\r
- //\r
- #if (FXAA_HLSL_5 == 1)\r
- #define FXAA_GATHER4_ALPHA 1\r
- #endif\r
- #ifdef GL_ARB_gpu_shader5\r
- #define FXAA_GATHER4_ALPHA 1\r
- #endif\r
- #ifdef GL_NV_gpu_shader5\r
- #define FXAA_GATHER4_ALPHA 1\r
- #endif\r
- #ifndef FXAA_GATHER4_ALPHA\r
- #define FXAA_GATHER4_ALPHA 0\r
- #endif\r
-#endif\r
-\r
-/*============================================================================\r
- FXAA CONSOLE PS3 - TUNING KNOBS\r
-============================================================================*/\r
-#ifndef FXAA_CONSOLE__PS3_EDGE_SHARPNESS\r
- //\r
- // Consoles the sharpness of edges on PS3 only.\r
- // Non-PS3 tuning is done with shader input.\r
- //\r
- // Due to the PS3 being ALU bound,\r
- // there are only two safe values here: 4 and 8.\r
- // These options use the shaders ability to a free *|/ by 2|4|8.\r
- //\r
- // 8.0 is sharper\r
- // 4.0 is softer\r
- // 2.0 is really soft (good for vector graphics inputs)\r
- //\r
- #if 1\r
- #define FXAA_CONSOLE__PS3_EDGE_SHARPNESS 8.0\r
- #endif\r
- #if 0\r
- #define FXAA_CONSOLE__PS3_EDGE_SHARPNESS 4.0\r
- #endif\r
- #if 0\r
- #define FXAA_CONSOLE__PS3_EDGE_SHARPNESS 2.0\r
- #endif\r
-#endif\r
-/*--------------------------------------------------------------------------*/\r
-#ifndef FXAA_CONSOLE__PS3_EDGE_THRESHOLD\r
- //\r
- // Only effects PS3.\r
- // Non-PS3 tuning is done with shader input.\r
- //\r
- // The minimum amount of local contrast required to apply algorithm.\r
- // The console setting has a different mapping than the quality setting.\r
- //\r
- // This only applies when FXAA_EARLY_EXIT is 1.\r
- //\r
- // Due to the PS3 being ALU bound,\r
- // there are only two safe values here: 0.25 and 0.125.\r
- // These options use the shaders ability to a free *|/ by 2|4|8.\r
- //\r
- // 0.125 leaves less aliasing, but is softer\r
- // 0.25 leaves more aliasing, and is sharper\r
- //\r
- #if 1\r
- #define FXAA_CONSOLE__PS3_EDGE_THRESHOLD 0.125\r
- #else\r
- #define FXAA_CONSOLE__PS3_EDGE_THRESHOLD 0.25\r
- #endif\r
-#endif\r
-\r
-/*============================================================================\r
- FXAA QUALITY - TUNING KNOBS\r
-------------------------------------------------------------------------------\r
-NOTE the other tuning knobs are now in the shader function inputs!\r
-============================================================================*/\r
-#ifndef FXAA_QUALITY__PRESET\r
- //\r
- // Choose the quality preset.\r
- // This needs to be compiled into the shader as it effects code.\r
- // Best option to include multiple presets is to \r
- // in each shader define the preset, then include this file.\r
- // \r
- // OPTIONS\r
- // -----------------------------------------------------------------------\r
- // 10 to 15 - default medium dither (10=fastest, 15=highest quality)\r
- // 20 to 29 - less dither, more expensive (20=fastest, 29=highest quality)\r
- // 39 - no dither, very expensive \r
- //\r
- // NOTES\r
- // -----------------------------------------------------------------------\r
- // 12 = slightly faster then FXAA 3.9 and higher edge quality (default)\r
- // 13 = about same speed as FXAA 3.9 and better than 12\r
- // 23 = closest to FXAA 3.9 visually and performance wise\r
- // _ = the lowest digit is directly related to performance\r
- // _ = the highest digit is directly related to style\r
- // \r
- #define FXAA_QUALITY__PRESET 12\r
-#endif\r
-\r
-\r
-/*============================================================================\r
-\r
- FXAA QUALITY - PRESETS\r
-\r
-============================================================================*/\r
-\r
-/*============================================================================\r
- FXAA QUALITY - MEDIUM DITHER PRESETS\r
-============================================================================*/\r
-#if (FXAA_QUALITY__PRESET == 10)\r
- #define FXAA_QUALITY__PS 3\r
- #define FXAA_QUALITY__P0 1.5\r
- #define FXAA_QUALITY__P1 3.0\r
- #define FXAA_QUALITY__P2 12.0\r
-#endif\r
-/*--------------------------------------------------------------------------*/\r
-#if (FXAA_QUALITY__PRESET == 11)\r
- #define FXAA_QUALITY__PS 4\r
- #define FXAA_QUALITY__P0 1.0\r
- #define FXAA_QUALITY__P1 1.5\r
- #define FXAA_QUALITY__P2 3.0\r
- #define FXAA_QUALITY__P3 12.0\r
-#endif\r
-/*--------------------------------------------------------------------------*/\r
-#if (FXAA_QUALITY__PRESET == 12)\r
- #define FXAA_QUALITY__PS 5\r
- #define FXAA_QUALITY__P0 1.0\r
- #define FXAA_QUALITY__P1 1.5\r
- #define FXAA_QUALITY__P2 2.0\r
- #define FXAA_QUALITY__P3 4.0\r
- #define FXAA_QUALITY__P4 12.0\r
-#endif\r
-/*--------------------------------------------------------------------------*/\r
-#if (FXAA_QUALITY__PRESET == 13)\r
- #define FXAA_QUALITY__PS 6\r
- #define FXAA_QUALITY__P0 1.0\r
- #define FXAA_QUALITY__P1 1.5\r
- #define FXAA_QUALITY__P2 2.0\r
- #define FXAA_QUALITY__P3 2.0\r
- #define FXAA_QUALITY__P4 4.0\r
- #define FXAA_QUALITY__P5 12.0\r
-#endif\r
-/*--------------------------------------------------------------------------*/\r
-#if (FXAA_QUALITY__PRESET == 14)\r
- #define FXAA_QUALITY__PS 7\r
- #define FXAA_QUALITY__P0 1.0\r
- #define FXAA_QUALITY__P1 1.5\r
- #define FXAA_QUALITY__P2 2.0\r
- #define FXAA_QUALITY__P3 2.0\r
- #define FXAA_QUALITY__P4 2.0\r
- #define FXAA_QUALITY__P5 4.0\r
- #define FXAA_QUALITY__P6 12.0\r
-#endif\r
-/*--------------------------------------------------------------------------*/\r
-#if (FXAA_QUALITY__PRESET == 15)\r
- #define FXAA_QUALITY__PS 8\r
- #define FXAA_QUALITY__P0 1.0\r
- #define FXAA_QUALITY__P1 1.5\r
- #define FXAA_QUALITY__P2 2.0\r
- #define FXAA_QUALITY__P3 2.0\r
- #define FXAA_QUALITY__P4 2.0\r
- #define FXAA_QUALITY__P5 2.0\r
- #define FXAA_QUALITY__P6 4.0\r
- #define FXAA_QUALITY__P7 12.0\r
-#endif\r
-\r
-/*============================================================================\r
- FXAA QUALITY - LOW DITHER PRESETS\r
-============================================================================*/\r
-#if (FXAA_QUALITY__PRESET == 20)\r
- #define FXAA_QUALITY__PS 3\r
- #define FXAA_QUALITY__P0 1.5\r
- #define FXAA_QUALITY__P1 2.0\r
- #define FXAA_QUALITY__P2 8.0\r
-#endif\r
-/*--------------------------------------------------------------------------*/\r
-#if (FXAA_QUALITY__PRESET == 21)\r
- #define FXAA_QUALITY__PS 4\r
- #define FXAA_QUALITY__P0 1.0\r
- #define FXAA_QUALITY__P1 1.5\r
- #define FXAA_QUALITY__P2 2.0\r
- #define FXAA_QUALITY__P3 8.0\r
-#endif\r
-/*--------------------------------------------------------------------------*/\r
-#if (FXAA_QUALITY__PRESET == 22)\r
- #define FXAA_QUALITY__PS 5\r
- #define FXAA_QUALITY__P0 1.0\r
- #define FXAA_QUALITY__P1 1.5\r
- #define FXAA_QUALITY__P2 2.0\r
- #define FXAA_QUALITY__P3 2.0\r
- #define FXAA_QUALITY__P4 8.0\r
-#endif\r
-/*--------------------------------------------------------------------------*/\r
-#if (FXAA_QUALITY__PRESET == 23)\r
- #define FXAA_QUALITY__PS 6\r
- #define FXAA_QUALITY__P0 1.0\r
- #define FXAA_QUALITY__P1 1.5\r
- #define FXAA_QUALITY__P2 2.0\r
- #define FXAA_QUALITY__P3 2.0\r
- #define FXAA_QUALITY__P4 2.0\r
- #define FXAA_QUALITY__P5 8.0\r
-#endif\r
-/*--------------------------------------------------------------------------*/\r
-#if (FXAA_QUALITY__PRESET == 24)\r
- #define FXAA_QUALITY__PS 7\r
- #define FXAA_QUALITY__P0 1.0\r
- #define FXAA_QUALITY__P1 1.5\r
- #define FXAA_QUALITY__P2 2.0\r
- #define FXAA_QUALITY__P3 2.0\r
- #define FXAA_QUALITY__P4 2.0\r
- #define FXAA_QUALITY__P5 3.0\r
- #define FXAA_QUALITY__P6 8.0\r
-#endif\r
-/*--------------------------------------------------------------------------*/\r
-#if (FXAA_QUALITY__PRESET == 25)\r
- #define FXAA_QUALITY__PS 8\r
- #define FXAA_QUALITY__P0 1.0\r
- #define FXAA_QUALITY__P1 1.5\r
- #define FXAA_QUALITY__P2 2.0\r
- #define FXAA_QUALITY__P3 2.0\r
- #define FXAA_QUALITY__P4 2.0\r
- #define FXAA_QUALITY__P5 2.0\r
- #define FXAA_QUALITY__P6 4.0\r
- #define FXAA_QUALITY__P7 8.0\r
-#endif\r
-/*--------------------------------------------------------------------------*/\r
-#if (FXAA_QUALITY__PRESET == 26)\r
- #define FXAA_QUALITY__PS 9\r
- #define FXAA_QUALITY__P0 1.0\r
- #define FXAA_QUALITY__P1 1.5\r
- #define FXAA_QUALITY__P2 2.0\r
- #define FXAA_QUALITY__P3 2.0\r
- #define FXAA_QUALITY__P4 2.0\r
- #define FXAA_QUALITY__P5 2.0\r
- #define FXAA_QUALITY__P6 2.0\r
- #define FXAA_QUALITY__P7 4.0\r
- #define FXAA_QUALITY__P8 8.0\r
-#endif\r
-/*--------------------------------------------------------------------------*/\r
-#if (FXAA_QUALITY__PRESET == 27)\r
- #define FXAA_QUALITY__PS 10\r
- #define FXAA_QUALITY__P0 1.0\r
- #define FXAA_QUALITY__P1 1.5\r
- #define FXAA_QUALITY__P2 2.0\r
- #define FXAA_QUALITY__P3 2.0\r
- #define FXAA_QUALITY__P4 2.0\r
- #define FXAA_QUALITY__P5 2.0\r
- #define FXAA_QUALITY__P6 2.0\r
- #define FXAA_QUALITY__P7 2.0\r
- #define FXAA_QUALITY__P8 4.0\r
- #define FXAA_QUALITY__P9 8.0\r
-#endif\r
-/*--------------------------------------------------------------------------*/\r
-#if (FXAA_QUALITY__PRESET == 28)\r
- #define FXAA_QUALITY__PS 11\r
- #define FXAA_QUALITY__P0 1.0\r
- #define FXAA_QUALITY__P1 1.5\r
- #define FXAA_QUALITY__P2 2.0\r
- #define FXAA_QUALITY__P3 2.0\r
- #define FXAA_QUALITY__P4 2.0\r
- #define FXAA_QUALITY__P5 2.0\r
- #define FXAA_QUALITY__P6 2.0\r
- #define FXAA_QUALITY__P7 2.0\r
- #define FXAA_QUALITY__P8 2.0\r
- #define FXAA_QUALITY__P9 4.0\r
- #define FXAA_QUALITY__P10 8.0\r
-#endif\r
-/*--------------------------------------------------------------------------*/\r
-#if (FXAA_QUALITY__PRESET == 29)\r
- #define FXAA_QUALITY__PS 12\r
- #define FXAA_QUALITY__P0 1.0\r
- #define FXAA_QUALITY__P1 1.5\r
- #define FXAA_QUALITY__P2 2.0\r
- #define FXAA_QUALITY__P3 2.0\r
- #define FXAA_QUALITY__P4 2.0\r
- #define FXAA_QUALITY__P5 2.0\r
- #define FXAA_QUALITY__P6 2.0\r
- #define FXAA_QUALITY__P7 2.0\r
- #define FXAA_QUALITY__P8 2.0\r
- #define FXAA_QUALITY__P9 2.0\r
- #define FXAA_QUALITY__P10 4.0\r
- #define FXAA_QUALITY__P11 8.0\r
-#endif\r
-\r
-/*============================================================================\r
- FXAA QUALITY - EXTREME QUALITY\r
-============================================================================*/\r
-#if (FXAA_QUALITY__PRESET == 39)\r
- #define FXAA_QUALITY__PS 12\r
- #define FXAA_QUALITY__P0 1.0\r
- #define FXAA_QUALITY__P1 1.0\r
- #define FXAA_QUALITY__P2 1.0\r
- #define FXAA_QUALITY__P3 1.0\r
- #define FXAA_QUALITY__P4 1.0\r
- #define FXAA_QUALITY__P5 1.5\r
- #define FXAA_QUALITY__P6 2.0\r
- #define FXAA_QUALITY__P7 2.0\r
- #define FXAA_QUALITY__P8 2.0\r
- #define FXAA_QUALITY__P9 2.0\r
- #define FXAA_QUALITY__P10 4.0\r
- #define FXAA_QUALITY__P11 8.0\r
-#endif\r
-\r
-\r
-\r
-/*============================================================================\r
-\r
- API PORTING\r
-\r
-============================================================================*/\r
-#if (FXAA_GLSL_120 == 1) || (FXAA_GLSL_130 == 1)\r
- #define FxaaBool bool\r
- #define FxaaDiscard discard\r
- #define FxaaFloat float\r
- #define FxaaFloat2 vec2\r
- #define FxaaFloat3 vec3\r
- #define FxaaFloat4 vec4\r
- #define FxaaHalf float\r
- #define FxaaHalf2 vec2\r
- #define FxaaHalf3 vec3\r
- #define FxaaHalf4 vec4\r
- #define FxaaInt2 ivec2\r
- #define FxaaSat(x) clamp(x, 0.0, 1.0)\r
- #define FxaaTex sampler2D\r
-#else\r
- #define FxaaBool bool\r
- #define FxaaDiscard clip(-1)\r
- #define FxaaFloat float\r
- #define FxaaFloat2 float2\r
- #define FxaaFloat3 float3\r
- #define FxaaFloat4 float4\r
- #define FxaaHalf half\r
- #define FxaaHalf2 half2\r
- #define FxaaHalf3 half3\r
- #define FxaaHalf4 half4\r
- #define FxaaSat(x) saturate(x)\r
-#endif\r
-/*--------------------------------------------------------------------------*/\r
-#if (FXAA_GLSL_120 == 1)\r
- // Requires,\r
- // #version 120\r
- // And at least,\r
- // #extension GL_EXT_gpu_shader4 : enable\r
- // (or set FXAA_FAST_PIXEL_OFFSET 1 to work like DX9)\r
- #define FxaaTexTop(t, p) texture2DLod(t, p, 0.0)\r
- #if (FXAA_FAST_PIXEL_OFFSET == 1)\r
- #define FxaaTexOff(t, p, o, r) texture2DLodOffset(t, p, 0.0, o)\r
- #else\r
- #define FxaaTexOff(t, p, o, r) texture2DLod(t, p + (o * r), 0.0)\r
- #endif\r
- #if (FXAA_GATHER4_ALPHA == 1)\r
- // use #extension GL_ARB_gpu_shader5 : enable\r
- #define FxaaTexAlpha4(t, p) textureGather(t, p, 3)\r
- #define FxaaTexOffAlpha4(t, p, o) textureGatherOffset(t, p, o, 3)\r
- #define FxaaTexGreen4(t, p) textureGather(t, p, 1)\r
- #define FxaaTexOffGreen4(t, p, o) textureGatherOffset(t, p, o, 1)\r
- #endif\r
-#endif\r
-/*--------------------------------------------------------------------------*/\r
-#if (FXAA_GLSL_130 == 1)\r
- // Requires "#version 130" or better\r
- #define FxaaTexTop(t, p) textureLod(t, p, 0.0)\r
- #define FxaaTexOff(t, p, o, r) textureLodOffset(t, p, 0.0, o)\r
- #if (FXAA_GATHER4_ALPHA == 1)\r
- // use #extension GL_ARB_gpu_shader5 : enable\r
- #define FxaaTexAlpha4(t, p) textureGather(t, p, 3)\r
- #define FxaaTexOffAlpha4(t, p, o) textureGatherOffset(t, p, o, 3)\r
- #define FxaaTexGreen4(t, p) textureGather(t, p, 1)\r
- #define FxaaTexOffGreen4(t, p, o) textureGatherOffset(t, p, o, 1)\r
- #endif\r
-#endif\r
-/*--------------------------------------------------------------------------*/\r
-#if (FXAA_HLSL_3 == 1) || (FXAA_360 == 1) || (FXAA_PS3 == 1)\r
- #define FxaaInt2 float2\r
- #define FxaaTex sampler2D\r
- #define FxaaTexTop(t, p) tex2Dlod(t, float4(p, 0.0, 0.0))\r
- #define FxaaTexOff(t, p, o, r) tex2Dlod(t, float4(p + (o * r), 0, 0))\r
-#endif\r
-/*--------------------------------------------------------------------------*/\r
-#if (FXAA_HLSL_4 == 1)\r
- #define FxaaInt2 int2\r
- struct FxaaTex { SamplerState smpl; Texture2D tex; };\r
- #define FxaaTexTop(t, p) t.tex.SampleLevel(t.smpl, p, 0.0)\r
- #define FxaaTexOff(t, p, o, r) t.tex.SampleLevel(t.smpl, p, 0.0, o)\r
-#endif\r
-/*--------------------------------------------------------------------------*/\r
-#if (FXAA_HLSL_5 == 1)\r
- #define FxaaInt2 int2\r
- struct FxaaTex { SamplerState smpl; Texture2D tex; };\r
- #define FxaaTexTop(t, p) t.tex.SampleLevel(t.smpl, p, 0.0)\r
- #define FxaaTexOff(t, p, o, r) t.tex.SampleLevel(t.smpl, p, 0.0, o)\r
- #define FxaaTexAlpha4(t, p) t.tex.GatherAlpha(t.smpl, p)\r
- #define FxaaTexOffAlpha4(t, p, o) t.tex.GatherAlpha(t.smpl, p, o)\r
- #define FxaaTexGreen4(t, p) t.tex.GatherGreen(t.smpl, p)\r
- #define FxaaTexOffGreen4(t, p, o) t.tex.GatherGreen(t.smpl, p, o)\r
-#endif\r
-\r
-\r
-/*============================================================================\r
- GREEN AS LUMA OPTION SUPPORT FUNCTION\r
-============================================================================*/\r
-#if (FXAA_GREEN_AS_LUMA == 0)\r
- FxaaFloat FxaaLuma(FxaaFloat4 rgba) { return rgba.w; }\r
-#else\r
- FxaaFloat FxaaLuma(FxaaFloat4 rgba) { return rgba.y; }\r
-#endif \r
-\r
-\r
-\r
-\r
-/*============================================================================\r
-\r
- FXAA3 QUALITY - PC\r
-\r
-============================================================================*/\r
-#if (FXAA_PC == 1)\r
-/*--------------------------------------------------------------------------*/\r
-FxaaFloat4 FxaaPixelShader(\r
- //\r
- // Use noperspective interpolation here (turn off perspective interpolation).\r
- // {xy} = center of pixel\r
- FxaaFloat2 pos,\r
- //\r
- // Used only for FXAA Console, and not used on the 360 version.\r
- // Use noperspective interpolation here (turn off perspective interpolation).\r
- // {xy__} = upper left of pixel\r
- // {__zw} = lower right of pixel\r
- FxaaFloat4 fxaaConsolePosPos,\r
- //\r
- // Input color texture.\r
- // {rgb_} = color in linear or perceptual color space\r
- // if (FXAA_GREEN_AS_LUMA == 0)\r
- // {___a} = luma in perceptual color space (not linear)\r
- FxaaTex tex,\r
- //\r
- // Only used on the optimized 360 version of FXAA Console.\r
- // For everything but 360, just use the same input here as for "tex".\r
- // For 360, same texture, just alias with a 2nd sampler.\r
- // This sampler needs to have an exponent bias of -1.\r
- FxaaTex fxaaConsole360TexExpBiasNegOne,\r
- //\r
- // Only used on the optimized 360 version of FXAA Console.\r
- // For everything but 360, just use the same input here as for "tex".\r
- // For 360, same texture, just alias with a 3nd sampler.\r
- // This sampler needs to have an exponent bias of -2.\r
- FxaaTex fxaaConsole360TexExpBiasNegTwo,\r
- //\r
- // Only used on FXAA Quality.\r
- // This must be from a constant/uniform.\r
- // {x_} = 1.0/screenWidthInPixels\r
- // {_y} = 1.0/screenHeightInPixels\r
- FxaaFloat2 fxaaQualityRcpFrame,\r
- //\r
- // Only used on FXAA Console.\r
- // This must be from a constant/uniform.\r
- // This effects sub-pixel AA quality and inversely sharpness.\r
- // Where N ranges between,\r
- // N = 0.50 (default)\r
- // N = 0.33 (sharper)\r
- // {x___} = -N/screenWidthInPixels \r
- // {_y__} = -N/screenHeightInPixels\r
- // {__z_} = N/screenWidthInPixels \r
- // {___w} = N/screenHeightInPixels \r
- FxaaFloat4 fxaaConsoleRcpFrameOpt,\r
- //\r
- // Only used on FXAA Console.\r
- // Not used on 360, but used on PS3 and PC.\r
- // This must be from a constant/uniform.\r
- // {x___} = -2.0/screenWidthInPixels \r
- // {_y__} = -2.0/screenHeightInPixels\r
- // {__z_} = 2.0/screenWidthInPixels \r
- // {___w} = 2.0/screenHeightInPixels \r
- FxaaFloat4 fxaaConsoleRcpFrameOpt2,\r
- //\r
- // Only used on FXAA Console.\r
- // Only used on 360 in place of fxaaConsoleRcpFrameOpt2.\r
- // This must be from a constant/uniform.\r
- // {x___} = 8.0/screenWidthInPixels \r
- // {_y__} = 8.0/screenHeightInPixels\r
- // {__z_} = -4.0/screenWidthInPixels \r
- // {___w} = -4.0/screenHeightInPixels \r
- FxaaFloat4 fxaaConsole360RcpFrameOpt2,\r
- //\r
- // Only used on FXAA Quality.\r
- // This used to be the FXAA_QUALITY__SUBPIX define.\r
- // It is here now to allow easier tuning.\r
- // Choose the amount of sub-pixel aliasing removal.\r
- // This can effect sharpness.\r
- // 1.00 - upper limit (softer)\r
- // 0.75 - default amount of filtering\r
- // 0.50 - lower limit (sharper, less sub-pixel aliasing removal)\r
- // 0.25 - almost off\r
- // 0.00 - completely off\r
- FxaaFloat fxaaQualitySubpix,\r
- //\r
- // Only used on FXAA Quality.\r
- // This used to be the FXAA_QUALITY__EDGE_THRESHOLD define.\r
- // It is here now to allow easier tuning.\r
- // The minimum amount of local contrast required to apply algorithm.\r
- // 0.333 - too little (faster)\r
- // 0.250 - low quality\r
- // 0.166 - default\r
- // 0.125 - high quality \r
- // 0.063 - overkill (slower)\r
- FxaaFloat fxaaQualityEdgeThreshold,\r
- //\r
- // Only used on FXAA Quality.\r
- // This used to be the FXAA_QUALITY__EDGE_THRESHOLD_MIN define.\r
- // It is here now to allow easier tuning.\r
- // Trims the algorithm from processing darks.\r
- // 0.0833 - upper limit (default, the start of visible unfiltered edges)\r
- // 0.0625 - high quality (faster)\r
- // 0.0312 - visible limit (slower)\r
- // Special notes when using FXAA_GREEN_AS_LUMA,\r
- // Likely want to set this to zero.\r
- // As colors that are mostly not-green\r
- // will appear very dark in the green channel!\r
- // Tune by looking at mostly non-green content,\r
- // then start at zero and increase until aliasing is a problem.\r
- FxaaFloat fxaaQualityEdgeThresholdMin,\r
- // \r
- // Only used on FXAA Console.\r
- // This used to be the FXAA_CONSOLE__EDGE_SHARPNESS define.\r
- // It is here now to allow easier tuning.\r
- // This does not effect PS3, as this needs to be compiled in.\r
- // Use FXAA_CONSOLE__PS3_EDGE_SHARPNESS for PS3.\r
- // Due to the PS3 being ALU bound,\r
- // there are only three safe values here: 2 and 4 and 8.\r
- // These options use the shaders ability to a free *|/ by 2|4|8.\r
- // For all other platforms can be a non-power of two.\r
- // 8.0 is sharper (default!!!)\r
- // 4.0 is softer\r
- // 2.0 is really soft (good only for vector graphics inputs)\r
- FxaaFloat fxaaConsoleEdgeSharpness,\r
- //\r
- // Only used on FXAA Console.\r
- // This used to be the FXAA_CONSOLE__EDGE_THRESHOLD define.\r
- // It is here now to allow easier tuning.\r
- // This does not effect PS3, as this needs to be compiled in.\r
- // Use FXAA_CONSOLE__PS3_EDGE_THRESHOLD for PS3.\r
- // Due to the PS3 being ALU bound,\r
- // there are only two safe values here: 1/4 and 1/8.\r
- // These options use the shaders ability to a free *|/ by 2|4|8.\r
- // The console setting has a different mapping than the quality setting.\r
- // Other platforms can use other values.\r
- // 0.125 leaves less aliasing, but is softer (default!!!)\r
- // 0.25 leaves more aliasing, and is sharper\r
- FxaaFloat fxaaConsoleEdgeThreshold,\r
- //\r
- // Only used on FXAA Console.\r
- // This used to be the FXAA_CONSOLE__EDGE_THRESHOLD_MIN define.\r
- // It is here now to allow easier tuning.\r
- // Trims the algorithm from processing darks.\r
- // The console setting has a different mapping than the quality setting.\r
- // This only applies when FXAA_EARLY_EXIT is 1.\r
- // This does not apply to PS3, \r
- // PS3 was simplified to avoid more shader instructions.\r
- // 0.06 - faster but more aliasing in darks\r
- // 0.05 - default\r
- // 0.04 - slower and less aliasing in darks\r
- // Special notes when using FXAA_GREEN_AS_LUMA,\r
- // Likely want to set this to zero.\r
- // As colors that are mostly not-green\r
- // will appear very dark in the green channel!\r
- // Tune by looking at mostly non-green content,\r
- // then start at zero and increase until aliasing is a problem.\r
- FxaaFloat fxaaConsoleEdgeThresholdMin,\r
- // \r
- // Extra constants for 360 FXAA Console only.\r
- // Use zeros or anything else for other platforms.\r
- // These must be in physical constant registers and NOT immedates.\r
- // Immedates will result in compiler un-optimizing.\r
- // {xyzw} = float4(1.0, -1.0, 0.25, -0.25)\r
- FxaaFloat4 fxaaConsole360ConstDir\r
-) {\r
-/*--------------------------------------------------------------------------*/\r
- FxaaFloat2 posM;\r
- posM.x = pos.x;\r
- posM.y = pos.y;\r
- #if (FXAA_GATHER4_ALPHA == 1)\r
- #if (FXAA_DISCARD == 0)\r
- FxaaFloat4 rgbyM = FxaaTexTop(tex, posM);\r
- #if (FXAA_GREEN_AS_LUMA == 0)\r
- #define lumaM rgbyM.w\r
- #else\r
- #define lumaM rgbyM.y\r
- #endif\r
- #endif\r
- #if (FXAA_GREEN_AS_LUMA == 0)\r
- FxaaFloat4 luma4A = FxaaTexAlpha4(tex, posM);\r
- FxaaFloat4 luma4B = FxaaTexOffAlpha4(tex, posM, FxaaInt2(-1, -1));\r
- #else\r
- FxaaFloat4 luma4A = FxaaTexGreen4(tex, posM);\r
- FxaaFloat4 luma4B = FxaaTexOffGreen4(tex, posM, FxaaInt2(-1, -1));\r
- #endif\r
- #if (FXAA_DISCARD == 1)\r
- #define lumaM luma4A.w\r
- #endif\r
- #define lumaE luma4A.z\r
- #define lumaS luma4A.x\r
- #define lumaSE luma4A.y\r
- #define lumaNW luma4B.w\r
- #define lumaN luma4B.z\r
- #define lumaW luma4B.x\r
- #else\r
- FxaaFloat4 rgbyM = FxaaTexTop(tex, posM);\r
- #if (FXAA_GREEN_AS_LUMA == 0)\r
- #define lumaM rgbyM.w\r
- #else\r
- #define lumaM rgbyM.y\r
- #endif\r
- FxaaFloat lumaS = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2( 0, 1), fxaaQualityRcpFrame.xy));\r
- FxaaFloat lumaE = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2( 1, 0), fxaaQualityRcpFrame.xy));\r
- FxaaFloat lumaN = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2( 0,-1), fxaaQualityRcpFrame.xy));\r
- FxaaFloat lumaW = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2(-1, 0), fxaaQualityRcpFrame.xy));\r
- #endif\r
-/*--------------------------------------------------------------------------*/\r
- FxaaFloat maxSM = max(lumaS, lumaM);\r
- FxaaFloat minSM = min(lumaS, lumaM);\r
- FxaaFloat maxESM = max(lumaE, maxSM);\r
- FxaaFloat minESM = min(lumaE, minSM);\r
- FxaaFloat maxWN = max(lumaN, lumaW);\r
- FxaaFloat minWN = min(lumaN, lumaW);\r
- FxaaFloat rangeMax = max(maxWN, maxESM);\r
- FxaaFloat rangeMin = min(minWN, minESM);\r
- FxaaFloat rangeMaxScaled = rangeMax * fxaaQualityEdgeThreshold;\r
- FxaaFloat range = rangeMax - rangeMin;\r
- FxaaFloat rangeMaxClamped = max(fxaaQualityEdgeThresholdMin, rangeMaxScaled);\r
- FxaaBool earlyExit = range < rangeMaxClamped;\r
-/*--------------------------------------------------------------------------*/\r
- if(earlyExit)\r
- #if (FXAA_DISCARD == 1)\r
- FxaaDiscard;\r
- #else\r
- return rgbyM;\r
- #endif\r
-/*--------------------------------------------------------------------------*/\r
- #if (FXAA_GATHER4_ALPHA == 0)\r
- FxaaFloat lumaNW = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2(-1,-1), fxaaQualityRcpFrame.xy));\r
- FxaaFloat lumaSE = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2( 1, 1), fxaaQualityRcpFrame.xy));\r
- FxaaFloat lumaNE = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2( 1,-1), fxaaQualityRcpFrame.xy));\r
- FxaaFloat lumaSW = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2(-1, 1), fxaaQualityRcpFrame.xy));\r
- #else\r
- FxaaFloat lumaNE = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2(1, -1), fxaaQualityRcpFrame.xy));\r
- FxaaFloat lumaSW = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2(-1, 1), fxaaQualityRcpFrame.xy));\r
- #endif\r
-/*--------------------------------------------------------------------------*/\r
- FxaaFloat lumaNS = lumaN + lumaS;\r
- FxaaFloat lumaWE = lumaW + lumaE;\r
- FxaaFloat subpixRcpRange = 1.0/range;\r
- FxaaFloat subpixNSWE = lumaNS + lumaWE;\r
- FxaaFloat edgeHorz1 = (-2.0 * lumaM) + lumaNS;\r
- FxaaFloat edgeVert1 = (-2.0 * lumaM) + lumaWE;\r
-/*--------------------------------------------------------------------------*/\r
- FxaaFloat lumaNESE = lumaNE + lumaSE;\r
- FxaaFloat lumaNWNE = lumaNW + lumaNE;\r
- FxaaFloat edgeHorz2 = (-2.0 * lumaE) + lumaNESE;\r
- FxaaFloat edgeVert2 = (-2.0 * lumaN) + lumaNWNE;\r
-/*--------------------------------------------------------------------------*/\r
- FxaaFloat lumaNWSW = lumaNW + lumaSW;\r
- FxaaFloat lumaSWSE = lumaSW + lumaSE;\r
- FxaaFloat edgeHorz4 = (abs(edgeHorz1) * 2.0) + abs(edgeHorz2);\r
- FxaaFloat edgeVert4 = (abs(edgeVert1) * 2.0) + abs(edgeVert2);\r
- FxaaFloat edgeHorz3 = (-2.0 * lumaW) + lumaNWSW;\r
- FxaaFloat edgeVert3 = (-2.0 * lumaS) + lumaSWSE;\r
- FxaaFloat edgeHorz = abs(edgeHorz3) + edgeHorz4;\r
- FxaaFloat edgeVert = abs(edgeVert3) + edgeVert4;\r
-/*--------------------------------------------------------------------------*/\r
- FxaaFloat subpixNWSWNESE = lumaNWSW + lumaNESE;\r
- FxaaFloat lengthSign = fxaaQualityRcpFrame.x;\r
- FxaaBool horzSpan = edgeHorz >= edgeVert;\r
- FxaaFloat subpixA = subpixNSWE * 2.0 + subpixNWSWNESE;\r
-/*--------------------------------------------------------------------------*/\r
- if(!horzSpan) lumaN = lumaW;\r
- if(!horzSpan) lumaS = lumaE;\r
- if(horzSpan) lengthSign = fxaaQualityRcpFrame.y;\r
- FxaaFloat subpixB = (subpixA * (1.0/12.0)) - lumaM;\r
-/*--------------------------------------------------------------------------*/\r
- FxaaFloat gradientN = lumaN - lumaM;\r
- FxaaFloat gradientS = lumaS - lumaM;\r
- FxaaFloat lumaNN = lumaN + lumaM;\r
- FxaaFloat lumaSS = lumaS + lumaM;\r
- FxaaBool pairN = abs(gradientN) >= abs(gradientS);\r
- FxaaFloat gradient = max(abs(gradientN), abs(gradientS));\r
- if(pairN) lengthSign = -lengthSign;\r
- FxaaFloat subpixC = FxaaSat(abs(subpixB) * subpixRcpRange);\r
-/*--------------------------------------------------------------------------*/\r
- FxaaFloat2 posB;\r
- posB.x = posM.x;\r
- posB.y = posM.y;\r
- FxaaFloat2 offNP;\r
- offNP.x = (!horzSpan) ? 0.0 : fxaaQualityRcpFrame.x;\r
- offNP.y = ( horzSpan) ? 0.0 : fxaaQualityRcpFrame.y;\r
- if(!horzSpan) posB.x += lengthSign * 0.5;\r
- if( horzSpan) posB.y += lengthSign * 0.5;\r
-/*--------------------------------------------------------------------------*/\r
- FxaaFloat2 posN;\r
- posN.x = posB.x - offNP.x * FXAA_QUALITY__P0;\r
- posN.y = posB.y - offNP.y * FXAA_QUALITY__P0;\r
- FxaaFloat2 posP;\r
- posP.x = posB.x + offNP.x * FXAA_QUALITY__P0;\r
- posP.y = posB.y + offNP.y * FXAA_QUALITY__P0;\r
- FxaaFloat subpixD = ((-2.0)*subpixC) + 3.0;\r
- FxaaFloat lumaEndN = FxaaLuma(FxaaTexTop(tex, posN));\r
- FxaaFloat subpixE = subpixC * subpixC;\r
- FxaaFloat lumaEndP = FxaaLuma(FxaaTexTop(tex, posP));\r
-/*--------------------------------------------------------------------------*/\r
- if(!pairN) lumaNN = lumaSS;\r
- FxaaFloat gradientScaled = gradient * 1.0/4.0;\r
- FxaaFloat lumaMM = lumaM - lumaNN * 0.5;\r
- FxaaFloat subpixF = subpixD * subpixE;\r
- FxaaBool lumaMLTZero = lumaMM < 0.0;\r
-/*--------------------------------------------------------------------------*/\r
- lumaEndN -= lumaNN * 0.5;\r
- lumaEndP -= lumaNN * 0.5;\r
- FxaaBool doneN = abs(lumaEndN) >= gradientScaled;\r
- FxaaBool doneP = abs(lumaEndP) >= gradientScaled;\r
- if(!doneN) posN.x -= offNP.x * FXAA_QUALITY__P1;\r
- if(!doneN) posN.y -= offNP.y * FXAA_QUALITY__P1;\r
- FxaaBool doneNP = (!doneN) || (!doneP);\r
- if(!doneP) posP.x += offNP.x * FXAA_QUALITY__P1;\r
- if(!doneP) posP.y += offNP.y * FXAA_QUALITY__P1;\r
-/*--------------------------------------------------------------------------*/\r
- if(doneNP) {\r
- if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\r
- if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\r
- if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\r
- if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\r
- doneN = abs(lumaEndN) >= gradientScaled;\r
- doneP = abs(lumaEndP) >= gradientScaled;\r
- if(!doneN) posN.x -= offNP.x * FXAA_QUALITY__P2;\r
- if(!doneN) posN.y -= offNP.y * FXAA_QUALITY__P2;\r
- doneNP = (!doneN) || (!doneP);\r
- if(!doneP) posP.x += offNP.x * FXAA_QUALITY__P2;\r
- if(!doneP) posP.y += offNP.y * FXAA_QUALITY__P2;\r
-/*--------------------------------------------------------------------------*/\r
- #if (FXAA_QUALITY__PS > 3)\r
- if(doneNP) {\r
- if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\r
- if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\r
- if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\r
- if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\r
- doneN = abs(lumaEndN) >= gradientScaled;\r
- doneP = abs(lumaEndP) >= gradientScaled;\r
- if(!doneN) posN.x -= offNP.x * FXAA_QUALITY__P3;\r
- if(!doneN) posN.y -= offNP.y * FXAA_QUALITY__P3;\r
- doneNP = (!doneN) || (!doneP);\r
- if(!doneP) posP.x += offNP.x * FXAA_QUALITY__P3;\r
- if(!doneP) posP.y += offNP.y * FXAA_QUALITY__P3;\r
-/*--------------------------------------------------------------------------*/\r
- #if (FXAA_QUALITY__PS > 4)\r
- if(doneNP) {\r
- if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\r
- if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\r
- if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\r
- if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\r
- doneN = abs(lumaEndN) >= gradientScaled;\r
- doneP = abs(lumaEndP) >= gradientScaled;\r
- if(!doneN) posN.x -= offNP.x * FXAA_QUALITY__P4;\r
- if(!doneN) posN.y -= offNP.y * FXAA_QUALITY__P4;\r
- doneNP = (!doneN) || (!doneP);\r
- if(!doneP) posP.x += offNP.x * FXAA_QUALITY__P4;\r
- if(!doneP) posP.y += offNP.y * FXAA_QUALITY__P4;\r
-/*--------------------------------------------------------------------------*/\r
- #if (FXAA_QUALITY__PS > 5)\r
- if(doneNP) {\r
- if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\r
- if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\r
- if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\r
- if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\r
- doneN = abs(lumaEndN) >= gradientScaled;\r
- doneP = abs(lumaEndP) >= gradientScaled;\r
- if(!doneN) posN.x -= offNP.x * FXAA_QUALITY__P5;\r
- if(!doneN) posN.y -= offNP.y * FXAA_QUALITY__P5;\r
- doneNP = (!doneN) || (!doneP);\r
- if(!doneP) posP.x += offNP.x * FXAA_QUALITY__P5;\r
- if(!doneP) posP.y += offNP.y * FXAA_QUALITY__P5;\r
-/*--------------------------------------------------------------------------*/\r
- #if (FXAA_QUALITY__PS > 6)\r
- if(doneNP) {\r
- if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\r
- if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\r
- if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\r
- if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\r
- doneN = abs(lumaEndN) >= gradientScaled;\r
- doneP = abs(lumaEndP) >= gradientScaled;\r
- if(!doneN) posN.x -= offNP.x * FXAA_QUALITY__P6;\r
- if(!doneN) posN.y -= offNP.y * FXAA_QUALITY__P6;\r
- doneNP = (!doneN) || (!doneP);\r
- if(!doneP) posP.x += offNP.x * FXAA_QUALITY__P6;\r
- if(!doneP) posP.y += offNP.y * FXAA_QUALITY__P6;\r
-/*--------------------------------------------------------------------------*/\r
- #if (FXAA_QUALITY__PS > 7)\r
- if(doneNP) {\r
- if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\r
- if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\r
- if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\r
- if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\r
- doneN = abs(lumaEndN) >= gradientScaled;\r
- doneP = abs(lumaEndP) >= gradientScaled;\r
- if(!doneN) posN.x -= offNP.x * FXAA_QUALITY__P7;\r
- if(!doneN) posN.y -= offNP.y * FXAA_QUALITY__P7;\r
- doneNP = (!doneN) || (!doneP);\r
- if(!doneP) posP.x += offNP.x * FXAA_QUALITY__P7;\r
- if(!doneP) posP.y += offNP.y * FXAA_QUALITY__P7;\r
-/*--------------------------------------------------------------------------*/\r
- #if (FXAA_QUALITY__PS > 8)\r
- if(doneNP) {\r
- if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\r
- if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\r
- if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\r
- if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\r
- doneN = abs(lumaEndN) >= gradientScaled;\r
- doneP = abs(lumaEndP) >= gradientScaled;\r
- if(!doneN) posN.x -= offNP.x * FXAA_QUALITY__P8;\r
- if(!doneN) posN.y -= offNP.y * FXAA_QUALITY__P8;\r
- doneNP = (!doneN) || (!doneP);\r
- if(!doneP) posP.x += offNP.x * FXAA_QUALITY__P8;\r
- if(!doneP) posP.y += offNP.y * FXAA_QUALITY__P8;\r
-/*--------------------------------------------------------------------------*/\r
- #if (FXAA_QUALITY__PS > 9)\r
- if(doneNP) {\r
- if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\r
- if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\r
- if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\r
- if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\r
- doneN = abs(lumaEndN) >= gradientScaled;\r
- doneP = abs(lumaEndP) >= gradientScaled;\r
- if(!doneN) posN.x -= offNP.x * FXAA_QUALITY__P9;\r
- if(!doneN) posN.y -= offNP.y * FXAA_QUALITY__P9;\r
- doneNP = (!doneN) || (!doneP);\r
- if(!doneP) posP.x += offNP.x * FXAA_QUALITY__P9;\r
- if(!doneP) posP.y += offNP.y * FXAA_QUALITY__P9;\r
-/*--------------------------------------------------------------------------*/\r
- #if (FXAA_QUALITY__PS > 10)\r
- if(doneNP) {\r
- if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\r
- if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\r
- if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\r
- if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\r
- doneN = abs(lumaEndN) >= gradientScaled;\r
- doneP = abs(lumaEndP) >= gradientScaled;\r
- if(!doneN) posN.x -= offNP.x * FXAA_QUALITY__P10;\r
- if(!doneN) posN.y -= offNP.y * FXAA_QUALITY__P10;\r
- doneNP = (!doneN) || (!doneP);\r
- if(!doneP) posP.x += offNP.x * FXAA_QUALITY__P10;\r
- if(!doneP) posP.y += offNP.y * FXAA_QUALITY__P10;\r
-/*--------------------------------------------------------------------------*/\r
- #if (FXAA_QUALITY__PS > 11)\r
- if(doneNP) {\r
- if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\r
- if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\r
- if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\r
- if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\r
- doneN = abs(lumaEndN) >= gradientScaled;\r
- doneP = abs(lumaEndP) >= gradientScaled;\r
- if(!doneN) posN.x -= offNP.x * FXAA_QUALITY__P11;\r
- if(!doneN) posN.y -= offNP.y * FXAA_QUALITY__P11;\r
- doneNP = (!doneN) || (!doneP);\r
- if(!doneP) posP.x += offNP.x * FXAA_QUALITY__P11;\r
- if(!doneP) posP.y += offNP.y * FXAA_QUALITY__P11;\r
-/*--------------------------------------------------------------------------*/\r
- #if (FXAA_QUALITY__PS > 12)\r
- if(doneNP) {\r
- if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\r
- if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\r
- if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\r
- if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\r
- doneN = abs(lumaEndN) >= gradientScaled;\r
- doneP = abs(lumaEndP) >= gradientScaled;\r
- if(!doneN) posN.x -= offNP.x * FXAA_QUALITY__P12;\r
- if(!doneN) posN.y -= offNP.y * FXAA_QUALITY__P12;\r
- doneNP = (!doneN) || (!doneP);\r
- if(!doneP) posP.x += offNP.x * FXAA_QUALITY__P12;\r
- if(!doneP) posP.y += offNP.y * FXAA_QUALITY__P12;\r
-/*--------------------------------------------------------------------------*/\r
- }\r
- #endif\r
-/*--------------------------------------------------------------------------*/\r
- }\r
- #endif\r
-/*--------------------------------------------------------------------------*/\r
- }\r
- #endif\r
-/*--------------------------------------------------------------------------*/\r
- }\r
- #endif\r
-/*--------------------------------------------------------------------------*/\r
- }\r
- #endif\r
-/*--------------------------------------------------------------------------*/\r
- }\r
- #endif\r
-/*--------------------------------------------------------------------------*/\r
- }\r
- #endif\r
-/*--------------------------------------------------------------------------*/\r
- }\r
- #endif\r
-/*--------------------------------------------------------------------------*/\r
- }\r
- #endif\r
-/*--------------------------------------------------------------------------*/\r
- }\r
- #endif\r
-/*--------------------------------------------------------------------------*/\r
- }\r
-/*--------------------------------------------------------------------------*/\r
- FxaaFloat dstN = posM.x - posN.x;\r
- FxaaFloat dstP = posP.x - posM.x;\r
- if(!horzSpan) dstN = posM.y - posN.y;\r
- if(!horzSpan) dstP = posP.y - posM.y;\r
-/*--------------------------------------------------------------------------*/\r
- FxaaBool goodSpanN = (lumaEndN < 0.0) != lumaMLTZero;\r
- FxaaFloat spanLength = (dstP + dstN);\r
- FxaaBool goodSpanP = (lumaEndP < 0.0) != lumaMLTZero;\r
- FxaaFloat spanLengthRcp = 1.0/spanLength;\r
-/*--------------------------------------------------------------------------*/\r
- FxaaBool directionN = dstN < dstP;\r
- FxaaFloat dst = min(dstN, dstP);\r
- FxaaBool goodSpan = directionN ? goodSpanN : goodSpanP;\r
- FxaaFloat subpixG = subpixF * subpixF;\r
- FxaaFloat pixelOffset = (dst * (-spanLengthRcp)) + 0.5;\r
- FxaaFloat subpixH = subpixG * fxaaQualitySubpix;\r
-/*--------------------------------------------------------------------------*/\r
- FxaaFloat pixelOffsetGood = goodSpan ? pixelOffset : 0.0;\r
- FxaaFloat pixelOffsetSubpix = max(pixelOffsetGood, subpixH);\r
- if(!horzSpan) posM.x += pixelOffsetSubpix * lengthSign;\r
- if( horzSpan) posM.y += pixelOffsetSubpix * lengthSign;\r
- #if (FXAA_DISCARD == 1)\r
- return FxaaTexTop(tex, posM);\r
- #else\r
- return FxaaFloat4(FxaaTexTop(tex, posM).xyz, lumaM);\r
- #endif\r
-}\r
-/*==========================================================================*/\r
-#endif\r
-\r
-\r
-\r
-\r
-/*============================================================================\r
-\r
- FXAA3 CONSOLE - PC VERSION\r
- \r
-------------------------------------------------------------------------------\r
-Instead of using this on PC, I'd suggest just using FXAA Quality with\r
- #define FXAA_QUALITY__PRESET 10\r
-Or \r
- #define FXAA_QUALITY__PRESET 20\r
-Either are higher qualilty and almost as fast as this on modern PC GPUs.\r
-============================================================================*/\r
-#if (FXAA_PC_CONSOLE == 1)\r
-/*--------------------------------------------------------------------------*/\r
-FxaaFloat4 FxaaPixelShader(\r
- // See FXAA Quality FxaaPixelShader() source for docs on Inputs!\r
- FxaaFloat2 pos,\r
- FxaaFloat4 fxaaConsolePosPos,\r
- FxaaTex tex,\r
- FxaaTex fxaaConsole360TexExpBiasNegOne,\r
- FxaaTex fxaaConsole360TexExpBiasNegTwo,\r
- FxaaFloat2 fxaaQualityRcpFrame,\r
- FxaaFloat4 fxaaConsoleRcpFrameOpt,\r
- FxaaFloat4 fxaaConsoleRcpFrameOpt2,\r
- FxaaFloat4 fxaaConsole360RcpFrameOpt2,\r
- FxaaFloat fxaaQualitySubpix,\r
- FxaaFloat fxaaQualityEdgeThreshold,\r
- FxaaFloat fxaaQualityEdgeThresholdMin,\r
- FxaaFloat fxaaConsoleEdgeSharpness,\r
- FxaaFloat fxaaConsoleEdgeThreshold,\r
- FxaaFloat fxaaConsoleEdgeThresholdMin,\r
- FxaaFloat4 fxaaConsole360ConstDir\r
-) {\r
-/*--------------------------------------------------------------------------*/\r
- FxaaFloat lumaNw = FxaaLuma(FxaaTexTop(tex, fxaaConsolePosPos.xy));\r
- FxaaFloat lumaSw = FxaaLuma(FxaaTexTop(tex, fxaaConsolePosPos.xw));\r
- FxaaFloat lumaNe = FxaaLuma(FxaaTexTop(tex, fxaaConsolePosPos.zy));\r
- FxaaFloat lumaSe = FxaaLuma(FxaaTexTop(tex, fxaaConsolePosPos.zw));\r
-/*--------------------------------------------------------------------------*/\r
- FxaaFloat4 rgbyM = FxaaTexTop(tex, pos.xy);\r
- #if (FXAA_GREEN_AS_LUMA == 0)\r
- FxaaFloat lumaM = rgbyM.w;\r
- #else\r
- FxaaFloat lumaM = rgbyM.y;\r
- #endif\r
-/*--------------------------------------------------------------------------*/\r
- FxaaFloat lumaMaxNwSw = max(lumaNw, lumaSw);\r
- lumaNe += 1.0/384.0;\r
- FxaaFloat lumaMinNwSw = min(lumaNw, lumaSw);\r
-/*--------------------------------------------------------------------------*/\r
- FxaaFloat lumaMaxNeSe = max(lumaNe, lumaSe);\r
- FxaaFloat lumaMinNeSe = min(lumaNe, lumaSe);\r
-/*--------------------------------------------------------------------------*/\r
- FxaaFloat lumaMax = max(lumaMaxNeSe, lumaMaxNwSw);\r
- FxaaFloat lumaMin = min(lumaMinNeSe, lumaMinNwSw);\r
-/*--------------------------------------------------------------------------*/\r
- FxaaFloat lumaMaxScaled = lumaMax * fxaaConsoleEdgeThreshold;\r
-/*--------------------------------------------------------------------------*/\r
- FxaaFloat lumaMinM = min(lumaMin, lumaM);\r
- FxaaFloat lumaMaxScaledClamped = max(fxaaConsoleEdgeThresholdMin, lumaMaxScaled);\r
- FxaaFloat lumaMaxM = max(lumaMax, lumaM);\r
- FxaaFloat dirSwMinusNe = lumaSw - lumaNe;\r
- FxaaFloat lumaMaxSubMinM = lumaMaxM - lumaMinM;\r
- FxaaFloat dirSeMinusNw = lumaSe - lumaNw;\r
- if(lumaMaxSubMinM < lumaMaxScaledClamped) return rgbyM;\r
-/*--------------------------------------------------------------------------*/\r
- FxaaFloat2 dir;\r
- dir.x = dirSwMinusNe + dirSeMinusNw;\r
- dir.y = dirSwMinusNe - dirSeMinusNw;\r
-/*--------------------------------------------------------------------------*/\r
- FxaaFloat2 dir1 = normalize(dir.xy);\r
- FxaaFloat4 rgbyN1 = FxaaTexTop(tex, pos.xy - dir1 * fxaaConsoleRcpFrameOpt.zw);\r
- FxaaFloat4 rgbyP1 = FxaaTexTop(tex, pos.xy + dir1 * fxaaConsoleRcpFrameOpt.zw);\r
-/*--------------------------------------------------------------------------*/\r
- FxaaFloat dirAbsMinTimesC = min(abs(dir1.x), abs(dir1.y)) * fxaaConsoleEdgeSharpness;\r
- FxaaFloat2 dir2 = clamp(dir1.xy / dirAbsMinTimesC, -2.0, 2.0);\r
-/*--------------------------------------------------------------------------*/\r
- FxaaFloat4 rgbyN2 = FxaaTexTop(tex, pos.xy - dir2 * fxaaConsoleRcpFrameOpt2.zw);\r
- FxaaFloat4 rgbyP2 = FxaaTexTop(tex, pos.xy + dir2 * fxaaConsoleRcpFrameOpt2.zw);\r
-/*--------------------------------------------------------------------------*/\r
- FxaaFloat4 rgbyA = rgbyN1 + rgbyP1;\r
- FxaaFloat4 rgbyB = ((rgbyN2 + rgbyP2) * 0.25) + (rgbyA * 0.25);\r
-/*--------------------------------------------------------------------------*/\r
- #if (FXAA_GREEN_AS_LUMA == 0)\r
- FxaaBool twoTap = (rgbyB.w < lumaMin) || (rgbyB.w > lumaMax);\r
- #else\r
- FxaaBool twoTap = (rgbyB.y < lumaMin) || (rgbyB.y > lumaMax);\r
- #endif\r
- if(twoTap) rgbyB.xyz = rgbyA.xyz * 0.5;\r
- return rgbyB; }\r
-/*==========================================================================*/\r
-#endif\r
-\r
-\r
-\r
-/*============================================================================\r
-\r
- FXAA3 CONSOLE - 360 PIXEL SHADER \r
-\r
-------------------------------------------------------------------------------\r
-This optimized version thanks to suggestions from Andy Luedke.\r
-Should be fully tex bound in all cases.\r
-As of the FXAA 3.11 release, I have still not tested this code,\r
-however I fixed a bug which was in both FXAA 3.9 and FXAA 3.10.\r
-And note this is replacing the old unoptimized version.\r
-If it does not work, please let me know so I can fix it.\r
-============================================================================*/\r
-#if (FXAA_360 == 1)\r
-/*--------------------------------------------------------------------------*/\r
-[reduceTempRegUsage(4)]\r
-float4 FxaaPixelShader(\r
- // See FXAA Quality FxaaPixelShader() source for docs on Inputs!\r
- FxaaFloat2 pos,\r
- FxaaFloat4 fxaaConsolePosPos,\r
- FxaaTex tex,\r
- FxaaTex fxaaConsole360TexExpBiasNegOne,\r
- FxaaTex fxaaConsole360TexExpBiasNegTwo,\r
- FxaaFloat2 fxaaQualityRcpFrame,\r
- FxaaFloat4 fxaaConsoleRcpFrameOpt,\r
- FxaaFloat4 fxaaConsoleRcpFrameOpt2,\r
- FxaaFloat4 fxaaConsole360RcpFrameOpt2,\r
- FxaaFloat fxaaQualitySubpix,\r
- FxaaFloat fxaaQualityEdgeThreshold,\r
- FxaaFloat fxaaQualityEdgeThresholdMin,\r
- FxaaFloat fxaaConsoleEdgeSharpness,\r
- FxaaFloat fxaaConsoleEdgeThreshold,\r
- FxaaFloat fxaaConsoleEdgeThresholdMin,\r
- FxaaFloat4 fxaaConsole360ConstDir\r
-) {\r
-/*--------------------------------------------------------------------------*/\r
- float4 lumaNwNeSwSe;\r
- #if (FXAA_GREEN_AS_LUMA == 0)\r
- asm { \r
- tfetch2D lumaNwNeSwSe.w___, tex, pos.xy, OffsetX = -0.5, OffsetY = -0.5, UseComputedLOD=false\r
- tfetch2D lumaNwNeSwSe._w__, tex, pos.xy, OffsetX = 0.5, OffsetY = -0.5, UseComputedLOD=false\r
- tfetch2D lumaNwNeSwSe.__w_, tex, pos.xy, OffsetX = -0.5, OffsetY = 0.5, UseComputedLOD=false\r
- tfetch2D lumaNwNeSwSe.___w, tex, pos.xy, OffsetX = 0.5, OffsetY = 0.5, UseComputedLOD=false\r
- };\r
- #else\r
- asm { \r
- tfetch2D lumaNwNeSwSe.y___, tex, pos.xy, OffsetX = -0.5, OffsetY = -0.5, UseComputedLOD=false\r
- tfetch2D lumaNwNeSwSe._y__, tex, pos.xy, OffsetX = 0.5, OffsetY = -0.5, UseComputedLOD=false\r
- tfetch2D lumaNwNeSwSe.__y_, tex, pos.xy, OffsetX = -0.5, OffsetY = 0.5, UseComputedLOD=false\r
- tfetch2D lumaNwNeSwSe.___y, tex, pos.xy, OffsetX = 0.5, OffsetY = 0.5, UseComputedLOD=false\r
- };\r
- #endif\r
-/*--------------------------------------------------------------------------*/\r
- lumaNwNeSwSe.y += 1.0/384.0;\r
- float2 lumaMinTemp = min(lumaNwNeSwSe.xy, lumaNwNeSwSe.zw);\r
- float2 lumaMaxTemp = max(lumaNwNeSwSe.xy, lumaNwNeSwSe.zw);\r
- float lumaMin = min(lumaMinTemp.x, lumaMinTemp.y);\r
- float lumaMax = max(lumaMaxTemp.x, lumaMaxTemp.y);\r
-/*--------------------------------------------------------------------------*/\r
- float4 rgbyM = tex2Dlod(tex, float4(pos.xy, 0.0, 0.0));\r
- #if (FXAA_GREEN_AS_LUMA == 0)\r
- float lumaMinM = min(lumaMin, rgbyM.w);\r
- float lumaMaxM = max(lumaMax, rgbyM.w);\r
- #else\r
- float lumaMinM = min(lumaMin, rgbyM.y);\r
- float lumaMaxM = max(lumaMax, rgbyM.y);\r
- #endif \r
- if((lumaMaxM - lumaMinM) < max(fxaaConsoleEdgeThresholdMin, lumaMax * fxaaConsoleEdgeThreshold)) return rgbyM;\r
-/*--------------------------------------------------------------------------*/\r
- float2 dir;\r
- dir.x = dot(lumaNwNeSwSe, fxaaConsole360ConstDir.yyxx);\r
- dir.y = dot(lumaNwNeSwSe, fxaaConsole360ConstDir.xyxy);\r
- dir = normalize(dir);\r
-/*--------------------------------------------------------------------------*/\r
- float4 dir1 = dir.xyxy * fxaaConsoleRcpFrameOpt.xyzw;\r
-/*--------------------------------------------------------------------------*/\r
- float4 dir2;\r
- float dirAbsMinTimesC = min(abs(dir.x), abs(dir.y)) * fxaaConsoleEdgeSharpness;\r
- dir2 = saturate(fxaaConsole360ConstDir.zzww * dir.xyxy / dirAbsMinTimesC + 0.5);\r
- dir2 = dir2 * fxaaConsole360RcpFrameOpt2.xyxy + fxaaConsole360RcpFrameOpt2.zwzw;\r
-/*--------------------------------------------------------------------------*/\r
- float4 rgbyN1 = tex2Dlod(fxaaConsole360TexExpBiasNegOne, float4(pos.xy + dir1.xy, 0.0, 0.0));\r
- float4 rgbyP1 = tex2Dlod(fxaaConsole360TexExpBiasNegOne, float4(pos.xy + dir1.zw, 0.0, 0.0));\r
- float4 rgbyN2 = tex2Dlod(fxaaConsole360TexExpBiasNegTwo, float4(pos.xy + dir2.xy, 0.0, 0.0));\r
- float4 rgbyP2 = tex2Dlod(fxaaConsole360TexExpBiasNegTwo, float4(pos.xy + dir2.zw, 0.0, 0.0));\r
-/*--------------------------------------------------------------------------*/\r
- float4 rgbyA = rgbyN1 + rgbyP1;\r
- float4 rgbyB = rgbyN2 + rgbyP2 + rgbyA * 0.5;\r
-/*--------------------------------------------------------------------------*/\r
- float4 rgbyR = ((FxaaLuma(rgbyB) - lumaMax) > 0.0) ? rgbyA : rgbyB; \r
- rgbyR = ((FxaaLuma(rgbyB) - lumaMin) > 0.0) ? rgbyR : rgbyA; \r
- return rgbyR; }\r
-/*==========================================================================*/\r
-#endif\r
-\r
-\r
-\r
-/*============================================================================\r
-\r
- FXAA3 CONSOLE - OPTIMIZED PS3 PIXEL SHADER (NO EARLY EXIT)\r
-\r
-==============================================================================\r
-The code below does not exactly match the assembly.\r
-I have a feeling that 12 cycles is possible, but was not able to get there.\r
-Might have to increase register count to get full performance.\r
-Note this shader does not use perspective interpolation.\r
-\r
-Use the following cgc options,\r
-\r
- --fenable-bx2 --fastmath --fastprecision --nofloatbindings\r
-\r
-------------------------------------------------------------------------------\r
- NVSHADERPERF OUTPUT\r
-------------------------------------------------------------------------------\r
-For reference and to aid in debug, output of NVShaderPerf should match this,\r
-\r
-Shader to schedule:\r
- 0: texpkb h0.w(TRUE), v5.zyxx, #0\r
- 2: addh h2.z(TRUE), h0.w, constant(0.001953, 0.000000, 0.000000, 0.000000).x\r
- 4: texpkb h0.w(TRUE), v5.xwxx, #0\r
- 6: addh h0.z(TRUE), -h2, h0.w\r
- 7: texpkb h1.w(TRUE), v5, #0\r
- 9: addh h0.x(TRUE), h0.z, -h1.w\r
- 10: addh h3.w(TRUE), h0.z, h1\r
- 11: texpkb h2.w(TRUE), v5.zwzz, #0\r
- 13: addh h0.z(TRUE), h3.w, -h2.w\r
- 14: addh h0.x(TRUE), h2.w, h0\r
- 15: nrmh h1.xz(TRUE), h0_n\r
- 16: minh_m8 h0.x(TRUE), |h1|, |h1.z|\r
- 17: maxh h4.w(TRUE), h0, h1\r
- 18: divx h2.xy(TRUE), h1_n.xzzw, h0_n\r
- 19: movr r1.zw(TRUE), v4.xxxy\r
- 20: madr r2.xz(TRUE), -h1, constant(cConst5.x, cConst5.y, cConst5.z, cConst5.w).zzww, r1.zzww\r
- 22: minh h5.w(TRUE), h0, h1\r
- 23: texpkb h0(TRUE), r2.xzxx, #0\r
- 25: madr r0.zw(TRUE), h1.xzxz, constant(cConst5.x, cConst5.y, cConst5.z, cConst5.w), r1\r
- 27: maxh h4.x(TRUE), h2.z, h2.w\r
- 28: texpkb h1(TRUE), r0.zwzz, #0\r
- 30: addh_d2 h1(TRUE), h0, h1\r
- 31: madr r0.xy(TRUE), -h2, constant(cConst5.x, cConst5.y, cConst5.z, cConst5.w).xyxx, r1.zwzz\r
- 33: texpkb h0(TRUE), r0, #0\r
- 35: minh h4.z(TRUE), h2, h2.w\r
- 36: fenct TRUE\r
- 37: madr r1.xy(TRUE), h2, constant(cConst5.x, cConst5.y, cConst5.z, cConst5.w).xyxx, r1.zwzz\r
- 39: texpkb h2(TRUE), r1, #0\r
- 41: addh_d2 h0(TRUE), h0, h2\r
- 42: maxh h2.w(TRUE), h4, h4.x\r
- 43: minh h2.x(TRUE), h5.w, h4.z\r
- 44: addh_d2 h0(TRUE), h0, h1\r
- 45: slth h2.x(TRUE), h0.w, h2\r
- 46: sgth h2.w(TRUE), h0, h2\r
- 47: movh h0(TRUE), h0\r
- 48: addx.c0 rc(TRUE), h2, h2.w\r
- 49: movh h0(c0.NE.x), h1\r
-\r
-IPU0 ------ Simplified schedule: --------\r
-Pass | Unit | uOp | PC: Op\r
------+--------+------+-------------------------\r
- 1 | SCT0/1 | mov | 0: TXLr h0.w, g[TEX1].zyxx, const.xxxx, TEX0;\r
- | TEX | txl | 0: TXLr h0.w, g[TEX1].zyxx, const.xxxx, TEX0;\r
- | SCB1 | add | 2: ADDh h2.z, h0.--w-, const.--x-;\r
- | | |\r
- 2 | SCT0/1 | mov | 4: TXLr h0.w, g[TEX1].xwxx, const.xxxx, TEX0;\r
- | TEX | txl | 4: TXLr h0.w, g[TEX1].xwxx, const.xxxx, TEX0;\r
- | SCB1 | add | 6: ADDh h0.z,-h2, h0.--w-;\r
- | | |\r
- 3 | SCT0/1 | mov | 7: TXLr h1.w, g[TEX1], const.xxxx, TEX0;\r
- | TEX | txl | 7: TXLr h1.w, g[TEX1], const.xxxx, TEX0;\r
- | SCB0 | add | 9: ADDh h0.x, h0.z---,-h1.w---;\r
- | SCB1 | add | 10: ADDh h3.w, h0.---z, h1;\r
- | | |\r
- 4 | SCT0/1 | mov | 11: TXLr h2.w, g[TEX1].zwzz, const.xxxx, TEX0;\r
- | TEX | txl | 11: TXLr h2.w, g[TEX1].zwzz, const.xxxx, TEX0;\r
- | SCB0 | add | 14: ADDh h0.x, h2.w---, h0;\r
- | SCB1 | add | 13: ADDh h0.z, h3.--w-,-h2.--w-;\r
- | | |\r
- 5 | SCT1 | mov | 15: NRMh h1.xz, h0;\r
- | SRB | nrm | 15: NRMh h1.xz, h0;\r
- | SCB0 | min | 16: MINh*8 h0.x, |h1|, |h1.z---|;\r
- | SCB1 | max | 17: MAXh h4.w, h0, h1;\r
- | | |\r
- 6 | SCT0 | div | 18: DIVx h2.xy, h1.xz--, h0;\r
- | SCT1 | mov | 19: MOVr r1.zw, g[TEX0].--xy;\r
- | SCB0 | mad | 20: MADr r2.xz,-h1, const.z-w-, r1.z-w-;\r
- | SCB1 | min | 22: MINh h5.w, h0, h1;\r
- | | |\r
- 7 | SCT0/1 | mov | 23: TXLr h0, r2.xzxx, const.xxxx, TEX0;\r
- | TEX | txl | 23: TXLr h0, r2.xzxx, const.xxxx, TEX0;\r
- | SCB0 | max | 27: MAXh h4.x, h2.z---, h2.w---;\r
- | SCB1 | mad | 25: MADr r0.zw, h1.--xz, const, r1;\r
- | | |\r
- 8 | SCT0/1 | mov | 28: TXLr h1, r0.zwzz, const.xxxx, TEX0;\r
- | TEX | txl | 28: TXLr h1, r0.zwzz, const.xxxx, TEX0;\r
- | SCB0/1 | add | 30: ADDh/2 h1, h0, h1;\r
- | | |\r
- 9 | SCT0 | mad | 31: MADr r0.xy,-h2, const.xy--, r1.zw--;\r
- | SCT1 | mov | 33: TXLr h0, r0, const.zzzz, TEX0;\r
- | TEX | txl | 33: TXLr h0, r0, const.zzzz, TEX0;\r
- | SCB1 | min | 35: MINh h4.z, h2, h2.--w-;\r
- | | |\r
- 10 | SCT0 | mad | 37: MADr r1.xy, h2, const.xy--, r1.zw--;\r
- | SCT1 | mov | 39: TXLr h2, r1, const.zzzz, TEX0;\r
- | TEX | txl | 39: TXLr h2, r1, const.zzzz, TEX0;\r
- | SCB0/1 | add | 41: ADDh/2 h0, h0, h2;\r
- | | |\r
- 11 | SCT0 | min | 43: MINh h2.x, h5.w---, h4.z---;\r
- | SCT1 | max | 42: MAXh h2.w, h4, h4.---x;\r
- | SCB0/1 | add | 44: ADDh/2 h0, h0, h1;\r
- | | |\r
- 12 | SCT0 | set | 45: SLTh h2.x, h0.w---, h2;\r
- | SCT1 | set | 46: SGTh h2.w, h0, h2;\r
- | SCB0/1 | mul | 47: MOVh h0, h0;\r
- | | |\r
- 13 | SCT0 | mad | 48: ADDxc0_s rc, h2, h2.w---;\r
- | SCB0/1 | mul | 49: MOVh h0(NE0.xxxx), h1;\r
- \r
-Pass SCT TEX SCB\r
- 1: 0% 100% 25%\r
- 2: 0% 100% 25%\r
- 3: 0% 100% 50%\r
- 4: 0% 100% 50%\r
- 5: 0% 0% 50%\r
- 6: 100% 0% 75%\r
- 7: 0% 100% 75%\r
- 8: 0% 100% 100%\r
- 9: 0% 100% 25%\r
- 10: 0% 100% 100%\r
- 11: 50% 0% 100%\r
- 12: 50% 0% 100%\r
- 13: 25% 0% 100%\r
-\r
-MEAN: 17% 61% 67%\r
-\r
-Pass SCT0 SCT1 TEX SCB0 SCB1\r
- 1: 0% 0% 100% 0% 100%\r
- 2: 0% 0% 100% 0% 100%\r
- 3: 0% 0% 100% 100% 100%\r
- 4: 0% 0% 100% 100% 100%\r
- 5: 0% 0% 0% 100% 100%\r
- 6: 100% 100% 0% 100% 100%\r
- 7: 0% 0% 100% 100% 100%\r
- 8: 0% 0% 100% 100% 100%\r
- 9: 0% 0% 100% 0% 100%\r
- 10: 0% 0% 100% 100% 100%\r
- 11: 100% 100% 0% 100% 100%\r
- 12: 100% 100% 0% 100% 100%\r
- 13: 100% 0% 0% 100% 100%\r
-\r
-MEAN: 30% 23% 61% 76% 100%\r
-Fragment Performance Setup: Driver RSX Compiler, GPU RSX, Flags 0x5\r
-Results 13 cycles, 3 r regs, 923,076,923 pixels/s\r
-============================================================================*/\r
-#if (FXAA_PS3 == 1) && (FXAA_EARLY_EXIT == 0)\r
-/*--------------------------------------------------------------------------*/\r
-#pragma regcount 7\r
-#pragma disablepc all\r
-#pragma option O3\r
-#pragma option OutColorPrec=fp16\r
-#pragma texformat default RGBA8\r
-/*==========================================================================*/\r
-half4 FxaaPixelShader(\r
- // See FXAA Quality FxaaPixelShader() source for docs on Inputs!\r
- FxaaFloat2 pos,\r
- FxaaFloat4 fxaaConsolePosPos,\r
- FxaaTex tex,\r
- FxaaTex fxaaConsole360TexExpBiasNegOne,\r
- FxaaTex fxaaConsole360TexExpBiasNegTwo,\r
- FxaaFloat2 fxaaQualityRcpFrame,\r
- FxaaFloat4 fxaaConsoleRcpFrameOpt,\r
- FxaaFloat4 fxaaConsoleRcpFrameOpt2,\r
- FxaaFloat4 fxaaConsole360RcpFrameOpt2,\r
- FxaaFloat fxaaQualitySubpix,\r
- FxaaFloat fxaaQualityEdgeThreshold,\r
- FxaaFloat fxaaQualityEdgeThresholdMin,\r
- FxaaFloat fxaaConsoleEdgeSharpness,\r
- FxaaFloat fxaaConsoleEdgeThreshold,\r
- FxaaFloat fxaaConsoleEdgeThresholdMin,\r
- FxaaFloat4 fxaaConsole360ConstDir\r
-) {\r
-/*--------------------------------------------------------------------------*/\r
-// (1)\r
- half4 dir;\r
- half4 lumaNe = h4tex2Dlod(tex, half4(fxaaConsolePosPos.zy, 0, 0));\r
- #if (FXAA_GREEN_AS_LUMA == 0)\r
- lumaNe.w += half(1.0/512.0);\r
- dir.x = -lumaNe.w;\r
- dir.z = -lumaNe.w;\r
- #else\r
- lumaNe.y += half(1.0/512.0);\r
- dir.x = -lumaNe.y;\r
- dir.z = -lumaNe.y;\r
- #endif\r
-/*--------------------------------------------------------------------------*/\r
-// (2)\r
- half4 lumaSw = h4tex2Dlod(tex, half4(fxaaConsolePosPos.xw, 0, 0));\r
- #if (FXAA_GREEN_AS_LUMA == 0)\r
- dir.x += lumaSw.w;\r
- dir.z += lumaSw.w;\r
- #else\r
- dir.x += lumaSw.y;\r
- dir.z += lumaSw.y;\r
- #endif \r
-/*--------------------------------------------------------------------------*/\r
-// (3)\r
- half4 lumaNw = h4tex2Dlod(tex, half4(fxaaConsolePosPos.xy, 0, 0));\r
- #if (FXAA_GREEN_AS_LUMA == 0)\r
- dir.x -= lumaNw.w;\r
- dir.z += lumaNw.w;\r
- #else\r
- dir.x -= lumaNw.y;\r
- dir.z += lumaNw.y;\r
- #endif\r
-/*--------------------------------------------------------------------------*/\r
-// (4)\r
- half4 lumaSe = h4tex2Dlod(tex, half4(fxaaConsolePosPos.zw, 0, 0));\r
- #if (FXAA_GREEN_AS_LUMA == 0)\r
- dir.x += lumaSe.w;\r
- dir.z -= lumaSe.w;\r
- #else\r
- dir.x += lumaSe.y;\r
- dir.z -= lumaSe.y;\r
- #endif\r
-/*--------------------------------------------------------------------------*/\r
-// (5)\r
- half4 dir1_pos;\r
- dir1_pos.xy = normalize(dir.xyz).xz;\r
- half dirAbsMinTimesC = min(abs(dir1_pos.x), abs(dir1_pos.y)) * half(FXAA_CONSOLE__PS3_EDGE_SHARPNESS);\r
-/*--------------------------------------------------------------------------*/\r
-// (6)\r
- half4 dir2_pos;\r
- dir2_pos.xy = clamp(dir1_pos.xy / dirAbsMinTimesC, half(-2.0), half(2.0));\r
- dir1_pos.zw = pos.xy;\r
- dir2_pos.zw = pos.xy;\r
- half4 temp1N;\r
- temp1N.xy = dir1_pos.zw - dir1_pos.xy * fxaaConsoleRcpFrameOpt.zw;\r
-/*--------------------------------------------------------------------------*/\r
-// (7)\r
- temp1N = h4tex2Dlod(tex, half4(temp1N.xy, 0.0, 0.0));\r
- half4 rgby1;\r
- rgby1.xy = dir1_pos.zw + dir1_pos.xy * fxaaConsoleRcpFrameOpt.zw;\r
-/*--------------------------------------------------------------------------*/\r
-// (8)\r
- rgby1 = h4tex2Dlod(tex, half4(rgby1.xy, 0.0, 0.0));\r
- rgby1 = (temp1N + rgby1) * 0.5;\r
-/*--------------------------------------------------------------------------*/\r
-// (9)\r
- half4 temp2N;\r
- temp2N.xy = dir2_pos.zw - dir2_pos.xy * fxaaConsoleRcpFrameOpt2.zw;\r
- temp2N = h4tex2Dlod(tex, half4(temp2N.xy, 0.0, 0.0));\r
-/*--------------------------------------------------------------------------*/\r
-// (10)\r
- half4 rgby2;\r
- rgby2.xy = dir2_pos.zw + dir2_pos.xy * fxaaConsoleRcpFrameOpt2.zw;\r
- rgby2 = h4tex2Dlod(tex, half4(rgby2.xy, 0.0, 0.0));\r
- rgby2 = (temp2N + rgby2) * 0.5;\r
-/*--------------------------------------------------------------------------*/\r
-// (11)\r
- // compilier moves these scalar ops up to other cycles\r
- #if (FXAA_GREEN_AS_LUMA == 0)\r
- half lumaMin = min(min(lumaNw.w, lumaSw.w), min(lumaNe.w, lumaSe.w));\r
- half lumaMax = max(max(lumaNw.w, lumaSw.w), max(lumaNe.w, lumaSe.w));\r
- #else\r
- half lumaMin = min(min(lumaNw.y, lumaSw.y), min(lumaNe.y, lumaSe.y));\r
- half lumaMax = max(max(lumaNw.y, lumaSw.y), max(lumaNe.y, lumaSe.y));\r
- #endif \r
- rgby2 = (rgby2 + rgby1) * 0.5;\r
-/*--------------------------------------------------------------------------*/\r
-// (12)\r
- #if (FXAA_GREEN_AS_LUMA == 0)\r
- bool twoTapLt = rgby2.w < lumaMin;\r
- bool twoTapGt = rgby2.w > lumaMax;\r
- #else\r
- bool twoTapLt = rgby2.y < lumaMin;\r
- bool twoTapGt = rgby2.y > lumaMax;\r
- #endif\r
-/*--------------------------------------------------------------------------*/\r
-// (13)\r
- if(twoTapLt || twoTapGt) rgby2 = rgby1;\r
-/*--------------------------------------------------------------------------*/\r
- return rgby2; }\r
-/*==========================================================================*/\r
-#endif\r
-\r
-\r
-\r
-/*============================================================================\r
-\r
- FXAA3 CONSOLE - OPTIMIZED PS3 PIXEL SHADER (WITH EARLY EXIT)\r
-\r
-==============================================================================\r
-The code mostly matches the assembly.\r
-I have a feeling that 14 cycles is possible, but was not able to get there.\r
-Might have to increase register count to get full performance.\r
-Note this shader does not use perspective interpolation.\r
-\r
-Use the following cgc options,\r
-\r
- --fenable-bx2 --fastmath --fastprecision --nofloatbindings\r
-\r
-Use of FXAA_GREEN_AS_LUMA currently adds a cycle (16 clks).\r
-Will look at fixing this for FXAA 3.12.\r
-------------------------------------------------------------------------------\r
- NVSHADERPERF OUTPUT\r
-------------------------------------------------------------------------------\r
-For reference and to aid in debug, output of NVShaderPerf should match this,\r
-\r
-Shader to schedule:\r
- 0: texpkb h0.w(TRUE), v5.zyxx, #0\r
- 2: addh h2.y(TRUE), h0.w, constant(0.001953, 0.000000, 0.000000, 0.000000).x\r
- 4: texpkb h1.w(TRUE), v5.xwxx, #0\r
- 6: addh h0.x(TRUE), h1.w, -h2.y\r
- 7: texpkb h2.w(TRUE), v5.zwzz, #0\r
- 9: minh h4.w(TRUE), h2.y, h2\r
- 10: maxh h5.x(TRUE), h2.y, h2.w\r
- 11: texpkb h0.w(TRUE), v5, #0\r
- 13: addh h3.w(TRUE), -h0, h0.x\r
- 14: addh h0.x(TRUE), h0.w, h0\r
- 15: addh h0.z(TRUE), -h2.w, h0.x\r
- 16: addh h0.x(TRUE), h2.w, h3.w\r
- 17: minh h5.y(TRUE), h0.w, h1.w\r
- 18: nrmh h2.xz(TRUE), h0_n\r
- 19: minh_m8 h2.w(TRUE), |h2.x|, |h2.z|\r
- 20: divx h4.xy(TRUE), h2_n.xzzw, h2_n.w\r
- 21: movr r1.zw(TRUE), v4.xxxy\r
- 22: maxh h2.w(TRUE), h0, h1\r
- 23: fenct TRUE\r
- 24: madr r0.xy(TRUE), -h2.xzzw, constant(cConst5.x, cConst5.y, cConst5.z, cConst5.w).zwzz, r1.zwzz\r
- 26: texpkb h0(TRUE), r0, #0\r
- 28: maxh h5.x(TRUE), h2.w, h5\r
- 29: minh h5.w(TRUE), h5.y, h4\r
- 30: madr r1.xy(TRUE), h2.xzzw, constant(cConst5.x, cConst5.y, cConst5.z, cConst5.w).zwzz, r1.zwzz\r
- 32: texpkb h2(TRUE), r1, #0\r
- 34: addh_d2 h2(TRUE), h0, h2\r
- 35: texpkb h1(TRUE), v4, #0\r
- 37: maxh h5.y(TRUE), h5.x, h1.w\r
- 38: minh h4.w(TRUE), h1, h5\r
- 39: madr r0.xy(TRUE), -h4, constant(cConst5.x, cConst5.y, cConst5.z, cConst5.w).xyxx, r1.zwzz\r
- 41: texpkb h0(TRUE), r0, #0\r
- 43: addh_m8 h5.z(TRUE), h5.y, -h4.w\r
- 44: madr r2.xy(TRUE), h4, constant(cConst5.x, cConst5.y, cConst5.z, cConst5.w).xyxx, r1.zwzz\r
- 46: texpkb h3(TRUE), r2, #0\r
- 48: addh_d2 h0(TRUE), h0, h3\r
- 49: addh_d2 h3(TRUE), h0, h2\r
- 50: movh h0(TRUE), h3\r
- 51: slth h3.x(TRUE), h3.w, h5.w\r
- 52: sgth h3.w(TRUE), h3, h5.x\r
- 53: addx.c0 rc(TRUE), h3.x, h3\r
- 54: slth.c0 rc(TRUE), h5.z, h5\r
- 55: movh h0(c0.NE.w), h2\r
- 56: movh h0(c0.NE.x), h1\r
-\r
-IPU0 ------ Simplified schedule: --------\r
-Pass | Unit | uOp | PC: Op\r
------+--------+------+-------------------------\r
- 1 | SCT0/1 | mov | 0: TXLr h0.w, g[TEX1].zyxx, const.xxxx, TEX0;\r
- | TEX | txl | 0: TXLr h0.w, g[TEX1].zyxx, const.xxxx, TEX0;\r
- | SCB0 | add | 2: ADDh h2.y, h0.-w--, const.-x--;\r
- | | |\r
- 2 | SCT0/1 | mov | 4: TXLr h1.w, g[TEX1].xwxx, const.xxxx, TEX0;\r
- | TEX | txl | 4: TXLr h1.w, g[TEX1].xwxx, const.xxxx, TEX0;\r
- | SCB0 | add | 6: ADDh h0.x, h1.w---,-h2.y---;\r
- | | |\r
- 3 | SCT0/1 | mov | 7: TXLr h2.w, g[TEX1].zwzz, const.xxxx, TEX0;\r
- | TEX | txl | 7: TXLr h2.w, g[TEX1].zwzz, const.xxxx, TEX0;\r
- | SCB0 | max | 10: MAXh h5.x, h2.y---, h2.w---;\r
- | SCB1 | min | 9: MINh h4.w, h2.---y, h2;\r
- | | |\r
- 4 | SCT0/1 | mov | 11: TXLr h0.w, g[TEX1], const.xxxx, TEX0;\r
- | TEX | txl | 11: TXLr h0.w, g[TEX1], const.xxxx, TEX0;\r
- | SCB0 | add | 14: ADDh h0.x, h0.w---, h0;\r
- | SCB1 | add | 13: ADDh h3.w,-h0, h0.---x;\r
- | | |\r
- 5 | SCT0 | mad | 16: ADDh h0.x, h2.w---, h3.w---;\r
- | SCT1 | mad | 15: ADDh h0.z,-h2.--w-, h0.--x-;\r
- | SCB0 | min | 17: MINh h5.y, h0.-w--, h1.-w--;\r
- | | |\r
- 6 | SCT1 | mov | 18: NRMh h2.xz, h0;\r
- | SRB | nrm | 18: NRMh h2.xz, h0;\r
- | SCB1 | min | 19: MINh*8 h2.w, |h2.---x|, |h2.---z|;\r
- | | |\r
- 7 | SCT0 | div | 20: DIVx h4.xy, h2.xz--, h2.ww--;\r
- | SCT1 | mov | 21: MOVr r1.zw, g[TEX0].--xy;\r
- | SCB1 | max | 22: MAXh h2.w, h0, h1;\r
- | | |\r
- 8 | SCT0 | mad | 24: MADr r0.xy,-h2.xz--, const.zw--, r1.zw--;\r
- | SCT1 | mov | 26: TXLr h0, r0, const.xxxx, TEX0;\r
- | TEX | txl | 26: TXLr h0, r0, const.xxxx, TEX0;\r
- | SCB0 | max | 28: MAXh h5.x, h2.w---, h5;\r
- | SCB1 | min | 29: MINh h5.w, h5.---y, h4;\r
- | | |\r
- 9 | SCT0 | mad | 30: MADr r1.xy, h2.xz--, const.zw--, r1.zw--;\r
- | SCT1 | mov | 32: TXLr h2, r1, const.xxxx, TEX0;\r
- | TEX | txl | 32: TXLr h2, r1, const.xxxx, TEX0;\r
- | SCB0/1 | add | 34: ADDh/2 h2, h0, h2;\r
- | | |\r
- 10 | SCT0/1 | mov | 35: TXLr h1, g[TEX0], const.xxxx, TEX0;\r
- | TEX | txl | 35: TXLr h1, g[TEX0], const.xxxx, TEX0;\r
- | SCB0 | max | 37: MAXh h5.y, h5.-x--, h1.-w--;\r
- | SCB1 | min | 38: MINh h4.w, h1, h5;\r
- | | |\r
- 11 | SCT0 | mad | 39: MADr r0.xy,-h4, const.xy--, r1.zw--;\r
- | SCT1 | mov | 41: TXLr h0, r0, const.zzzz, TEX0;\r
- | TEX | txl | 41: TXLr h0, r0, const.zzzz, TEX0;\r
- | SCB0 | mad | 44: MADr r2.xy, h4, const.xy--, r1.zw--;\r
- | SCB1 | add | 43: ADDh*8 h5.z, h5.--y-,-h4.--w-;\r
- | | |\r
- 12 | SCT0/1 | mov | 46: TXLr h3, r2, const.xxxx, TEX0;\r
- | TEX | txl | 46: TXLr h3, r2, const.xxxx, TEX0;\r
- | SCB0/1 | add | 48: ADDh/2 h0, h0, h3;\r
- | | |\r
- 13 | SCT0/1 | mad | 49: ADDh/2 h3, h0, h2;\r
- | SCB0/1 | mul | 50: MOVh h0, h3;\r
- | | |\r
- 14 | SCT0 | set | 51: SLTh h3.x, h3.w---, h5.w---;\r
- | SCT1 | set | 52: SGTh h3.w, h3, h5.---x;\r
- | SCB0 | set | 54: SLThc0 rc, h5.z---, h5;\r
- | SCB1 | add | 53: ADDxc0_s rc, h3.---x, h3;\r
- | | |\r
- 15 | SCT0/1 | mul | 55: MOVh h0(NE0.wwww), h2;\r
- | SCB0/1 | mul | 56: MOVh h0(NE0.xxxx), h1;\r
- \r
-Pass SCT TEX SCB\r
- 1: 0% 100% 25%\r
- 2: 0% 100% 25%\r
- 3: 0% 100% 50%\r
- 4: 0% 100% 50%\r
- 5: 50% 0% 25%\r
- 6: 0% 0% 25%\r
- 7: 100% 0% 25%\r
- 8: 0% 100% 50%\r
- 9: 0% 100% 100%\r
- 10: 0% 100% 50%\r
- 11: 0% 100% 75%\r
- 12: 0% 100% 100%\r
- 13: 100% 0% 100%\r
- 14: 50% 0% 50%\r
- 15: 100% 0% 100%\r
-\r
-MEAN: 26% 60% 56%\r
-\r
-Pass SCT0 SCT1 TEX SCB0 SCB1\r
- 1: 0% 0% 100% 100% 0%\r
- 2: 0% 0% 100% 100% 0%\r
- 3: 0% 0% 100% 100% 100%\r
- 4: 0% 0% 100% 100% 100%\r
- 5: 100% 100% 0% 100% 0%\r
- 6: 0% 0% 0% 0% 100%\r
- 7: 100% 100% 0% 0% 100%\r
- 8: 0% 0% 100% 100% 100%\r
- 9: 0% 0% 100% 100% 100%\r
- 10: 0% 0% 100% 100% 100%\r
- 11: 0% 0% 100% 100% 100%\r
- 12: 0% 0% 100% 100% 100%\r
- 13: 100% 100% 0% 100% 100%\r
- 14: 100% 100% 0% 100% 100%\r
- 15: 100% 100% 0% 100% 100%\r
-\r
-MEAN: 33% 33% 60% 86% 80%\r
-Fragment Performance Setup: Driver RSX Compiler, GPU RSX, Flags 0x5\r
-Results 15 cycles, 3 r regs, 800,000,000 pixels/s\r
-============================================================================*/\r
-#if (FXAA_PS3 == 1) && (FXAA_EARLY_EXIT == 1)\r
-/*--------------------------------------------------------------------------*/\r
-#pragma regcount 7\r
-#pragma disablepc all\r
-#pragma option O2\r
-#pragma option OutColorPrec=fp16\r
-#pragma texformat default RGBA8\r
-/*==========================================================================*/\r
-half4 FxaaPixelShader(\r
- // See FXAA Quality FxaaPixelShader() source for docs on Inputs!\r
- FxaaFloat2 pos,\r
- FxaaFloat4 fxaaConsolePosPos,\r
- FxaaTex tex,\r
- FxaaTex fxaaConsole360TexExpBiasNegOne,\r
- FxaaTex fxaaConsole360TexExpBiasNegTwo,\r
- FxaaFloat2 fxaaQualityRcpFrame,\r
- FxaaFloat4 fxaaConsoleRcpFrameOpt,\r
- FxaaFloat4 fxaaConsoleRcpFrameOpt2,\r
- FxaaFloat4 fxaaConsole360RcpFrameOpt2,\r
- FxaaFloat fxaaQualitySubpix,\r
- FxaaFloat fxaaQualityEdgeThreshold,\r
- FxaaFloat fxaaQualityEdgeThresholdMin,\r
- FxaaFloat fxaaConsoleEdgeSharpness,\r
- FxaaFloat fxaaConsoleEdgeThreshold,\r
- FxaaFloat fxaaConsoleEdgeThresholdMin,\r
- FxaaFloat4 fxaaConsole360ConstDir\r
-) {\r
-/*--------------------------------------------------------------------------*/\r
-// (1)\r
- half4 rgbyNe = h4tex2Dlod(tex, half4(fxaaConsolePosPos.zy, 0, 0));\r
- #if (FXAA_GREEN_AS_LUMA == 0)\r
- half lumaNe = rgbyNe.w + half(1.0/512.0);\r
- #else\r
- half lumaNe = rgbyNe.y + half(1.0/512.0);\r
- #endif\r
-/*--------------------------------------------------------------------------*/\r
-// (2)\r
- half4 lumaSw = h4tex2Dlod(tex, half4(fxaaConsolePosPos.xw, 0, 0));\r
- #if (FXAA_GREEN_AS_LUMA == 0)\r
- half lumaSwNegNe = lumaSw.w - lumaNe;\r
- #else\r
- half lumaSwNegNe = lumaSw.y - lumaNe;\r
- #endif\r
-/*--------------------------------------------------------------------------*/\r
-// (3)\r
- half4 lumaNw = h4tex2Dlod(tex, half4(fxaaConsolePosPos.xy, 0, 0));\r
- #if (FXAA_GREEN_AS_LUMA == 0)\r
- half lumaMaxNwSw = max(lumaNw.w, lumaSw.w);\r
- half lumaMinNwSw = min(lumaNw.w, lumaSw.w);\r
- #else\r
- half lumaMaxNwSw = max(lumaNw.y, lumaSw.y);\r
- half lumaMinNwSw = min(lumaNw.y, lumaSw.y);\r
- #endif\r
-/*--------------------------------------------------------------------------*/\r
-// (4)\r
- half4 lumaSe = h4tex2Dlod(tex, half4(fxaaConsolePosPos.zw, 0, 0));\r
- #if (FXAA_GREEN_AS_LUMA == 0)\r
- half dirZ = lumaNw.w + lumaSwNegNe;\r
- half dirX = -lumaNw.w + lumaSwNegNe;\r
- #else\r
- half dirZ = lumaNw.y + lumaSwNegNe;\r
- half dirX = -lumaNw.y + lumaSwNegNe;\r
- #endif\r
-/*--------------------------------------------------------------------------*/\r
-// (5)\r
- half3 dir;\r
- dir.y = 0.0;\r
- #if (FXAA_GREEN_AS_LUMA == 0)\r
- dir.x = lumaSe.w + dirX;\r
- dir.z = -lumaSe.w + dirZ;\r
- half lumaMinNeSe = min(lumaNe, lumaSe.w);\r
- #else\r
- dir.x = lumaSe.y + dirX;\r
- dir.z = -lumaSe.y + dirZ;\r
- half lumaMinNeSe = min(lumaNe, lumaSe.y);\r
- #endif\r
-/*--------------------------------------------------------------------------*/\r
-// (6)\r
- half4 dir1_pos;\r
- dir1_pos.xy = normalize(dir).xz;\r
- half dirAbsMinTimes8 = min(abs(dir1_pos.x), abs(dir1_pos.y)) * half(FXAA_CONSOLE__PS3_EDGE_SHARPNESS);\r
-/*--------------------------------------------------------------------------*/\r
-// (7)\r
- half4 dir2_pos;\r
- dir2_pos.xy = clamp(dir1_pos.xy / dirAbsMinTimes8, half(-2.0), half(2.0));\r
- dir1_pos.zw = pos.xy;\r
- dir2_pos.zw = pos.xy;\r
- #if (FXAA_GREEN_AS_LUMA == 0)\r
- half lumaMaxNeSe = max(lumaNe, lumaSe.w);\r
- #else\r
- half lumaMaxNeSe = max(lumaNe, lumaSe.y);\r
- #endif\r
-/*--------------------------------------------------------------------------*/\r
-// (8)\r
- half4 temp1N;\r
- temp1N.xy = dir1_pos.zw - dir1_pos.xy * fxaaConsoleRcpFrameOpt.zw;\r
- temp1N = h4tex2Dlod(tex, half4(temp1N.xy, 0.0, 0.0));\r
- half lumaMax = max(lumaMaxNwSw, lumaMaxNeSe);\r
- half lumaMin = min(lumaMinNwSw, lumaMinNeSe);\r
-/*--------------------------------------------------------------------------*/\r
-// (9)\r
- half4 rgby1;\r
- rgby1.xy = dir1_pos.zw + dir1_pos.xy * fxaaConsoleRcpFrameOpt.zw;\r
- rgby1 = h4tex2Dlod(tex, half4(rgby1.xy, 0.0, 0.0));\r
- rgby1 = (temp1N + rgby1) * 0.5;\r
-/*--------------------------------------------------------------------------*/\r
-// (10)\r
- half4 rgbyM = h4tex2Dlod(tex, half4(pos.xy, 0.0, 0.0));\r
- #if (FXAA_GREEN_AS_LUMA == 0)\r
- half lumaMaxM = max(lumaMax, rgbyM.w);\r
- half lumaMinM = min(lumaMin, rgbyM.w);\r
- #else\r
- half lumaMaxM = max(lumaMax, rgbyM.y);\r
- half lumaMinM = min(lumaMin, rgbyM.y);\r
- #endif\r
-/*--------------------------------------------------------------------------*/\r
-// (11)\r
- half4 temp2N;\r
- temp2N.xy = dir2_pos.zw - dir2_pos.xy * fxaaConsoleRcpFrameOpt2.zw;\r
- temp2N = h4tex2Dlod(tex, half4(temp2N.xy, 0.0, 0.0));\r
- half4 rgby2;\r
- rgby2.xy = dir2_pos.zw + dir2_pos.xy * fxaaConsoleRcpFrameOpt2.zw;\r
- half lumaRangeM = (lumaMaxM - lumaMinM) / FXAA_CONSOLE__PS3_EDGE_THRESHOLD;\r
-/*--------------------------------------------------------------------------*/\r
-// (12)\r
- rgby2 = h4tex2Dlod(tex, half4(rgby2.xy, 0.0, 0.0));\r
- rgby2 = (temp2N + rgby2) * 0.5;\r
-/*--------------------------------------------------------------------------*/\r
-// (13)\r
- rgby2 = (rgby2 + rgby1) * 0.5;\r
-/*--------------------------------------------------------------------------*/\r
-// (14)\r
- #if (FXAA_GREEN_AS_LUMA == 0)\r
- bool twoTapLt = rgby2.w < lumaMin;\r
- bool twoTapGt = rgby2.w > lumaMax;\r
- #else\r
- bool twoTapLt = rgby2.y < lumaMin;\r
- bool twoTapGt = rgby2.y > lumaMax;\r
- #endif\r
- bool earlyExit = lumaRangeM < lumaMax;\r
- bool twoTap = twoTapLt || twoTapGt;\r
-/*--------------------------------------------------------------------------*/\r
-// (15)\r
- if(twoTap) rgby2 = rgby1;\r
- if(earlyExit) rgby2 = rgbyM;\r
-/*--------------------------------------------------------------------------*/\r
- return rgby2; }\r
-/*==========================================================================*/\r
-#endif\r
+++ /dev/null
-solid OpenSCAD_Model
- facet normal -1 0 0
- outer loop
- vertex -6.4 8.17705 5.29683
- vertex -6.4 11.25 4
- vertex -6.4 7.25 5.15
- endloop
- endfacet
- facet normal -1 0 0
- outer loop
- vertex -6.4 7.25 11.15
- vertex -6.4 -4.75 12.3
- vertex -6.4 11.25 12.3
- endloop
- endfacet
- facet normal -1 0 0
- outer loop
- vertex -6.4 -4.75 4
- vertex -6.4 -4.75 12.3
- vertex -6.4 4.39683 7.22295
- endloop
- endfacet
- facet normal -1 0 0
- outer loop
- vertex -6.4 -4.75 4
- vertex -6.4 4.39683 7.22295
- vertex -6.4 4.82295 6.38664
- endloop
- endfacet
- facet normal -1 0 0
- outer loop
- vertex -6.4 -4.75 4
- vertex -6.4 4.82295 6.38664
- vertex -6.4 5.48664 5.72295
- endloop
- endfacet
- facet normal -1 0 0
- outer loop
- vertex -6.4 -4.75 4
- vertex -6.4 5.48664 5.72295
- vertex -6.4 6.32295 5.29683
- endloop
- endfacet
- facet normal -1 0 0
- outer loop
- vertex -6.4 -4.75 4
- vertex -6.4 6.32295 5.29683
- vertex -6.4 11.25 4
- endloop
- endfacet
- facet normal -1 0 0
- outer loop
- vertex -6.4 6.32295 5.29683
- vertex -6.4 7.25 5.15
- vertex -6.4 11.25 4
- endloop
- endfacet
- facet normal -1 0 0
- outer loop
- vertex -6.4 9.01336 5.72295
- vertex -6.4 11.25 4
- vertex -6.4 8.17705 5.29683
- endloop
- endfacet
- facet normal -1 0 0
- outer loop
- vertex -6.4 10.1032 9.07705
- vertex -6.4 11.25 12.3
- vertex -6.4 10.25 8.15
- endloop
- endfacet
- facet normal -1 0 0
- outer loop
- vertex -6.4 11.25 4
- vertex -6.4 9.01336 5.72295
- vertex -6.4 9.67705 6.38664
- endloop
- endfacet
- facet normal -1 0 0
- outer loop
- vertex -6.4 11.25 4
- vertex -6.4 9.67705 6.38664
- vertex -6.4 10.1032 7.22295
- endloop
- endfacet
- facet normal -1 0 0
- outer loop
- vertex -6.4 11.25 4
- vertex -6.4 10.1032 7.22295
- vertex -6.4 11.25 12.3
- endloop
- endfacet
- facet normal -1 0 0
- outer loop
- vertex -6.4 10.1032 7.22295
- vertex -6.4 10.25 8.15
- vertex -6.4 11.25 12.3
- endloop
- endfacet
- facet normal -1 0 0
- outer loop
- vertex -6.4 8.17705 11.0032
- vertex -6.4 11.25 12.3
- vertex -6.4 9.01336 10.5771
- endloop
- endfacet
- facet normal -1 0 0
- outer loop
- vertex -6.4 10.1032 9.07705
- vertex -6.4 9.67705 9.91336
- vertex -6.4 11.25 12.3
- endloop
- endfacet
- facet normal -1 0 0
- outer loop
- vertex -6.4 9.67705 9.91336
- vertex -6.4 9.01336 10.5771
- vertex -6.4 11.25 12.3
- endloop
- endfacet
- facet normal -1 0 0
- outer loop
- vertex -6.4 6.32295 11.0032
- vertex -6.4 -4.75 12.3
- vertex -6.4 7.25 11.15
- endloop
- endfacet
- facet normal -1 0 0
- outer loop
- vertex -6.4 8.17705 11.0032
- vertex -6.4 7.25 11.15
- vertex -6.4 11.25 12.3
- endloop
- endfacet
- facet normal -1 0 0
- outer loop
- vertex -6.4 5.48664 10.5771
- vertex -6.4 -4.75 12.3
- vertex -6.4 6.32295 11.0032
- endloop
- endfacet
- facet normal -1 0 0
- outer loop
- vertex -6.4 4.82295 9.91336
- vertex -6.4 -4.75 12.3
- vertex -6.4 5.48664 10.5771
- endloop
- endfacet
- facet normal -1 0 0
- outer loop
- vertex -6.4 4.39683 9.07705
- vertex -6.4 -4.75 12.3
- vertex -6.4 4.82295 9.91336
- endloop
- endfacet
- facet normal -1 0 0
- outer loop
- vertex -6.4 4.25 8.15
- vertex -6.4 -4.75 12.3
- vertex -6.4 4.39683 9.07705
- endloop
- endfacet
- facet normal -1 0 0
- outer loop
- vertex -6.4 4.39683 7.22295
- vertex -6.4 -4.75 12.3
- vertex -6.4 4.25 8.15
- endloop
- endfacet
- facet normal 0 -1 0
- outer loop
- vertex -6.4 -4.75 12.3
- vertex -6.4 -4.75 4
- vertex 0 -4.75 4
- endloop
- endfacet
- facet normal 0 -1 0
- outer loop
- vertex 0 -4.75 12.3
- vertex -6.4 -4.75 12.3
- vertex 6.4 -4.75 4
- endloop
- endfacet
- facet normal 0 -1 0
- outer loop
- vertex 6.4 -4.75 4
- vertex -6.4 -4.75 12.3
- vertex 0 -4.75 4
- endloop
- endfacet
- facet normal 0 -1 0
- outer loop
- vertex 6.4 -4.75 12.3
- vertex 0 -4.75 12.3
- vertex 6.4 -4.75 4
- endloop
- endfacet
- facet normal 0 0 -1
- outer loop
- vertex -4.75 0 4
- vertex -6.4 -4.75 4
- vertex -4.51752 1.46783 4
- endloop
- endfacet
- facet normal 0 0 -1
- outer loop
- vertex 2.79198 3.84283 4
- vertex -6.4 11.25 4
- vertex 6.4 11.25 4
- endloop
- endfacet
- facet normal 0 0 -1
- outer loop
- vertex 4.75 0 4
- vertex 6.4 11.25 4
- vertex 6.4 -4.75 4
- endloop
- endfacet
- facet normal 0 0 -1
- outer loop
- vertex 0 -4.75 4
- vertex 1.46783 -4.51752 4
- vertex 6.4 -4.75 4
- endloop
- endfacet
- facet normal 0 0 -1
- outer loop
- vertex 2.79198 3.84283 4
- vertex 6.4 11.25 4
- vertex 3.84283 2.79198 4
- endloop
- endfacet
- facet normal 0 0 -1
- outer loop
- vertex 1.46783 -4.51752 4
- vertex 2.79198 -3.84283 4
- vertex 6.4 -4.75 4
- endloop
- endfacet
- facet normal 0 0 -1
- outer loop
- vertex 3.84283 2.79198 4
- vertex 6.4 11.25 4
- vertex 4.51752 1.46783 4
- endloop
- endfacet
- facet normal 0 0 -1
- outer loop
- vertex 2.79198 -3.84283 4
- vertex 3.84283 -2.79198 4
- vertex 6.4 -4.75 4
- endloop
- endfacet
- facet normal 0 0 -1
- outer loop
- vertex 3.84283 -2.79198 4
- vertex 4.51752 -1.46783 4
- vertex 6.4 -4.75 4
- endloop
- endfacet
- facet normal 0 0 -1
- outer loop
- vertex 4.51752 -1.46783 4
- vertex 4.75 0 4
- vertex 6.4 -4.75 4
- endloop
- endfacet
- facet normal 0 0 -1
- outer loop
- vertex 1.46783 4.51752 4
- vertex -6.4 11.25 4
- vertex 2.79198 3.84283 4
- endloop
- endfacet
- facet normal 0 0 -1
- outer loop
- vertex -3.84283 2.79198 4
- vertex -6.4 11.25 4
- vertex -2.79198 3.84283 4
- endloop
- endfacet
- facet normal 0 0 -1
- outer loop
- vertex 0 4.75 4
- vertex -6.4 11.25 4
- vertex 1.46783 4.51752 4
- endloop
- endfacet
- facet normal 0 0 -1
- outer loop
- vertex -1.46783 4.51752 4
- vertex -6.4 11.25 4
- vertex 0 4.75 4
- endloop
- endfacet
- facet normal 0 0 -1
- outer loop
- vertex -2.79198 3.84283 4
- vertex -6.4 11.25 4
- vertex -1.46783 4.51752 4
- endloop
- endfacet
- facet normal 0 0 -1
- outer loop
- vertex -4.51752 1.46783 4
- vertex -6.4 11.25 4
- vertex -3.84283 2.79198 4
- endloop
- endfacet
- facet normal 0 0 -1
- outer loop
- vertex -6.4 -4.75 4
- vertex -6.4 11.25 4
- vertex -4.51752 1.46783 4
- endloop
- endfacet
- facet normal 0 0 -1
- outer loop
- vertex -6.4 -4.75 4
- vertex -4.75 0 4
- vertex -4.51752 -1.46783 4
- endloop
- endfacet
- facet normal 0 0 -1
- outer loop
- vertex -6.4 -4.75 4
- vertex -4.51752 -1.46783 4
- vertex -3.84283 -2.79198 4
- endloop
- endfacet
- facet normal 0 0 -1
- outer loop
- vertex -6.4 -4.75 4
- vertex -3.84283 -2.79198 4
- vertex -2.79198 -3.84283 4
- endloop
- endfacet
- facet normal 0 0 -1
- outer loop
- vertex -6.4 -4.75 4
- vertex -2.79198 -3.84283 4
- vertex -1.46783 -4.51752 4
- endloop
- endfacet
- facet normal 0 0 -1
- outer loop
- vertex -6.4 -4.75 4
- vertex -1.46783 -4.51752 4
- vertex 0 -4.75 4
- endloop
- endfacet
- facet normal 0 0 -1
- outer loop
- vertex 4.51752 1.46783 4
- vertex 6.4 11.25 4
- vertex 4.75 0 4
- endloop
- endfacet
- facet normal 0 1 0
- outer loop
- vertex -6.4 11.25 4
- vertex -6.4 11.25 12.3
- vertex 6.4 11.25 4
- endloop
- endfacet
- facet normal 0 1 0
- outer loop
- vertex 6.4 11.25 4
- vertex -6.4 11.25 12.3
- vertex 6.4 11.25 12.3
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex -1.46783 -4.51752 12.3
- vertex -6.4 -4.75 12.3
- vertex 0 -4.75 12.3
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex -2.79198 -3.84283 12.3
- vertex -6.4 -4.75 12.3
- vertex -1.46783 -4.51752 12.3
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex -3.84283 -2.79198 12.3
- vertex -6.4 -4.75 12.3
- vertex -2.79198 -3.84283 12.3
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex -4.51752 -1.46783 12.3
- vertex -6.4 -4.75 12.3
- vertex -3.84283 -2.79198 12.3
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex -4.51752 1.46783 12.3
- vertex -3.84283 2.79198 12.3
- vertex -6.4 11.25 12.3
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex -4.75 0 12.3
- vertex -6.4 -4.75 12.3
- vertex -4.51752 -1.46783 12.3
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex -3.84283 2.79198 12.3
- vertex -2.79198 3.84283 12.3
- vertex -6.4 11.25 12.3
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex -6.4 11.25 12.3
- vertex -6.4 -4.75 12.3
- vertex -4.75 0 12.3
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex -1.46783 4.51752 12.3
- vertex -6.4 11.25 12.3
- vertex -2.79198 3.84283 12.3
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex 0 4.75 12.3
- vertex -6.4 11.25 12.3
- vertex -1.46783 4.51752 12.3
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex 1.46783 4.51752 12.3
- vertex -6.4 11.25 12.3
- vertex 0 4.75 12.3
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex 2.79198 3.84283 12.3
- vertex -6.4 11.25 12.3
- vertex 1.46783 4.51752 12.3
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex 6.4 11.25 12.3
- vertex -6.4 11.25 12.3
- vertex 2.79198 3.84283 12.3
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex 6.4 11.25 12.3
- vertex 2.79198 3.84283 12.3
- vertex 3.84283 2.79198 12.3
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex 6.4 11.25 12.3
- vertex 3.84283 2.79198 12.3
- vertex 4.51752 1.46783 12.3
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex 6.4 -4.75 12.3
- vertex 4.51752 1.46783 12.3
- vertex 4.75 0 12.3
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex 6.4 -4.75 12.3
- vertex 4.75 0 12.3
- vertex 4.51752 -1.46783 12.3
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex 6.4 -4.75 12.3
- vertex 4.51752 -1.46783 12.3
- vertex 3.84283 -2.79198 12.3
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex 6.4 -4.75 12.3
- vertex 3.84283 -2.79198 12.3
- vertex 2.79198 -3.84283 12.3
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex 6.4 -4.75 12.3
- vertex 2.79198 -3.84283 12.3
- vertex 1.46783 -4.51752 12.3
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex 0 -4.75 12.3
- vertex 6.4 -4.75 12.3
- vertex 1.46783 -4.51752 12.3
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex 6.4 11.25 12.3
- vertex 4.51752 1.46783 12.3
- vertex 6.4 -4.75 12.3
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex -4.75 0 12.3
- vertex -4.51752 1.46783 12.3
- vertex -6.4 11.25 12.3
- endloop
- endfacet
- facet normal 3.47353e-17 0.987688 -0.156434
- outer loop
- vertex 6.4 4.39683 9.07705
- vertex 6.4 4.25 8.15
- vertex -6.4 4.39683 9.07705
- endloop
- endfacet
- facet normal 3.47353e-17 0.987688 -0.156434
- outer loop
- vertex -6.4 4.39683 9.07705
- vertex 6.4 4.25 8.15
- vertex -6.4 4.25 8.15
- endloop
- endfacet
- facet normal -3.47353e-17 0.987688 0.156434
- outer loop
- vertex 6.4 4.39683 7.22295
- vertex -6.4 4.39683 7.22295
- vertex 6.4 4.25 8.15
- endloop
- endfacet
- facet normal -3.47353e-17 0.987688 0.156434
- outer loop
- vertex 6.4 4.25 8.15
- vertex -6.4 4.39683 7.22295
- vertex -6.4 4.25 8.15
- endloop
- endfacet
- facet normal 1.00806e-16 0.891006 -0.453991
- outer loop
- vertex 6.4 4.82295 9.91336
- vertex 6.4 4.39683 9.07705
- vertex -6.4 4.82295 9.91336
- endloop
- endfacet
- facet normal 1.00806e-16 0.891006 -0.453991
- outer loop
- vertex -6.4 4.82295 9.91336
- vertex 6.4 4.39683 9.07705
- vertex -6.4 4.39683 9.07705
- endloop
- endfacet
- facet normal 1.57009e-16 0.707107 -0.707107
- outer loop
- vertex 6.4 5.48664 10.5771
- vertex 6.4 4.82295 9.91336
- vertex -6.4 5.48664 10.5771
- endloop
- endfacet
- facet normal 1.57009e-16 0.707107 -0.707107
- outer loop
- vertex -6.4 5.48664 10.5771
- vertex 6.4 4.82295 9.91336
- vertex -6.4 4.82295 9.91336
- endloop
- endfacet
- facet normal 1.97843e-16 0.453991 -0.891006
- outer loop
- vertex 6.4 6.32295 11.0032
- vertex 6.4 5.48664 10.5771
- vertex -6.4 6.32295 11.0032
- endloop
- endfacet
- facet normal 1.97843e-16 0.453991 -0.891006
- outer loop
- vertex -6.4 6.32295 11.0032
- vertex 6.4 5.48664 10.5771
- vertex -6.4 5.48664 10.5771
- endloop
- endfacet
- facet normal 2.19311e-16 0.156434 -0.987688
- outer loop
- vertex 6.4 7.25 11.15
- vertex 6.4 6.32295 11.0032
- vertex -6.4 7.25 11.15
- endloop
- endfacet
- facet normal 2.19311e-16 0.156434 -0.987688
- outer loop
- vertex -6.4 7.25 11.15
- vertex 6.4 6.32295 11.0032
- vertex -6.4 6.32295 11.0032
- endloop
- endfacet
- facet normal 2.19311e-16 -0.156434 -0.987688
- outer loop
- vertex 6.4 8.17705 11.0032
- vertex 6.4 7.25 11.15
- vertex -6.4 8.17705 11.0032
- endloop
- endfacet
- facet normal 2.19311e-16 -0.156434 -0.987688
- outer loop
- vertex -6.4 8.17705 11.0032
- vertex 6.4 7.25 11.15
- vertex -6.4 7.25 11.15
- endloop
- endfacet
- facet normal 1.97843e-16 -0.453991 -0.891006
- outer loop
- vertex 6.4 9.01336 10.5771
- vertex 6.4 8.17705 11.0032
- vertex -6.4 9.01336 10.5771
- endloop
- endfacet
- facet normal 1.97843e-16 -0.453991 -0.891006
- outer loop
- vertex -6.4 9.01336 10.5771
- vertex 6.4 8.17705 11.0032
- vertex -6.4 8.17705 11.0032
- endloop
- endfacet
- facet normal 1.57009e-16 -0.707107 -0.707107
- outer loop
- vertex -6.4 9.67705 9.91336
- vertex 6.4 9.67705 9.91336
- vertex 6.4 9.01336 10.5771
- endloop
- endfacet
- facet normal 1.57009e-16 -0.707107 -0.707107
- outer loop
- vertex -6.4 9.01336 10.5771
- vertex -6.4 9.67705 9.91336
- vertex 6.4 9.01336 10.5771
- endloop
- endfacet
- facet normal 1.00806e-16 -0.891006 -0.453991
- outer loop
- vertex -6.4 10.1032 9.07705
- vertex 6.4 10.1032 9.07705
- vertex 6.4 9.67705 9.91336
- endloop
- endfacet
- facet normal 1.00806e-16 -0.891006 -0.453991
- outer loop
- vertex -6.4 9.67705 9.91336
- vertex -6.4 10.1032 9.07705
- vertex 6.4 9.67705 9.91336
- endloop
- endfacet
- facet normal 3.47353e-17 -0.987688 -0.156434
- outer loop
- vertex -6.4 10.25 8.15
- vertex 6.4 10.25 8.15
- vertex 6.4 10.1032 9.07705
- endloop
- endfacet
- facet normal 3.47353e-17 -0.987688 -0.156434
- outer loop
- vertex -6.4 10.1032 9.07705
- vertex -6.4 10.25 8.15
- vertex 6.4 10.1032 9.07705
- endloop
- endfacet
- facet normal -3.47353e-17 -0.987688 0.156434
- outer loop
- vertex 6.4 10.1032 7.22295
- vertex 6.4 10.25 8.15
- vertex -6.4 10.25 8.15
- endloop
- endfacet
- facet normal -3.47353e-17 -0.987688 0.156434
- outer loop
- vertex -6.4 10.1032 7.22295
- vertex 6.4 10.1032 7.22295
- vertex -6.4 10.25 8.15
- endloop
- endfacet
- facet normal -1.00806e-16 -0.891006 0.453991
- outer loop
- vertex 6.4 9.67705 6.38664
- vertex 6.4 10.1032 7.22295
- vertex -6.4 10.1032 7.22295
- endloop
- endfacet
- facet normal -1.00806e-16 -0.891006 0.453991
- outer loop
- vertex -6.4 9.67705 6.38664
- vertex 6.4 9.67705 6.38664
- vertex -6.4 10.1032 7.22295
- endloop
- endfacet
- facet normal -1.57009e-16 -0.707107 0.707107
- outer loop
- vertex 6.4 9.01336 5.72295
- vertex 6.4 9.67705 6.38664
- vertex -6.4 9.67705 6.38664
- endloop
- endfacet
- facet normal -1.57009e-16 -0.707107 0.707107
- outer loop
- vertex -6.4 9.01336 5.72295
- vertex 6.4 9.01336 5.72295
- vertex -6.4 9.67705 6.38664
- endloop
- endfacet
- facet normal -1.97843e-16 -0.453991 0.891006
- outer loop
- vertex 6.4 8.17705 5.29683
- vertex 6.4 9.01336 5.72295
- vertex -6.4 9.01336 5.72295
- endloop
- endfacet
- facet normal -1.97843e-16 -0.453991 0.891006
- outer loop
- vertex -6.4 8.17705 5.29683
- vertex 6.4 8.17705 5.29683
- vertex -6.4 9.01336 5.72295
- endloop
- endfacet
- facet normal -2.19311e-16 -0.156434 0.987688
- outer loop
- vertex 6.4 7.25 5.15
- vertex 6.4 8.17705 5.29683
- vertex -6.4 8.17705 5.29683
- endloop
- endfacet
- facet normal -2.19311e-16 -0.156434 0.987688
- outer loop
- vertex -6.4 7.25 5.15
- vertex 6.4 7.25 5.15
- vertex -6.4 8.17705 5.29683
- endloop
- endfacet
- facet normal -2.19311e-16 0.156434 0.987688
- outer loop
- vertex 6.4 6.32295 5.29683
- vertex 6.4 7.25 5.15
- vertex -6.4 7.25 5.15
- endloop
- endfacet
- facet normal -2.19311e-16 0.156434 0.987688
- outer loop
- vertex -6.4 6.32295 5.29683
- vertex 6.4 6.32295 5.29683
- vertex -6.4 7.25 5.15
- endloop
- endfacet
- facet normal -1.97843e-16 0.453991 0.891006
- outer loop
- vertex 6.4 5.48664 5.72295
- vertex 6.4 6.32295 5.29683
- vertex -6.4 6.32295 5.29683
- endloop
- endfacet
- facet normal -1.97843e-16 0.453991 0.891006
- outer loop
- vertex -6.4 5.48664 5.72295
- vertex 6.4 5.48664 5.72295
- vertex -6.4 6.32295 5.29683
- endloop
- endfacet
- facet normal -1.57009e-16 0.707107 0.707107
- outer loop
- vertex 6.4 5.48664 5.72295
- vertex -6.4 5.48664 5.72295
- vertex 6.4 4.82295 6.38664
- endloop
- endfacet
- facet normal -1.57009e-16 0.707107 0.707107
- outer loop
- vertex 6.4 4.82295 6.38664
- vertex -6.4 5.48664 5.72295
- vertex -6.4 4.82295 6.38664
- endloop
- endfacet
- facet normal -1.00806e-16 0.891006 0.453991
- outer loop
- vertex 6.4 4.82295 6.38664
- vertex -6.4 4.82295 6.38664
- vertex 6.4 4.39683 7.22295
- endloop
- endfacet
- facet normal -1.00806e-16 0.891006 0.453991
- outer loop
- vertex 6.4 4.39683 7.22295
- vertex -6.4 4.82295 6.38664
- vertex -6.4 4.39683 7.22295
- endloop
- endfacet
- facet normal -0.156435 -0.987688 0
- outer loop
- vertex -1.46783 -4.51752 18
- vertex -1.46783 -4.51752 12.3
- vertex 0 -4.75 12.3
- endloop
- endfacet
- facet normal -0.156435 -0.987688 0
- outer loop
- vertex 0 -4.75 18
- vertex -1.46783 -4.51752 18
- vertex 0 -4.75 12.3
- endloop
- endfacet
- facet normal 0.156435 -0.987688 0
- outer loop
- vertex 0 -4.75 18
- vertex 0 -4.75 12.3
- vertex 1.46783 -4.51752 12.3
- endloop
- endfacet
- facet normal 0.156435 -0.987688 0
- outer loop
- vertex 1.46783 -4.51752 18
- vertex 0 -4.75 18
- vertex 1.46783 -4.51752 12.3
- endloop
- endfacet
- facet normal 1 0 0
- outer loop
- vertex 6.4 7.25 5.15
- vertex 6.4 -4.75 4
- vertex 6.4 11.25 4
- endloop
- endfacet
- facet normal 1 0 0
- outer loop
- vertex 6.4 -4.75 12.3
- vertex 6.4 -4.75 4
- vertex 6.4 4.39683 7.22295
- endloop
- endfacet
- facet normal 1 0 0
- outer loop
- vertex 6.4 4.39683 9.07705
- vertex 6.4 -4.75 12.3
- vertex 6.4 4.25 8.15
- endloop
- endfacet
- facet normal 1 0 0
- outer loop
- vertex 6.4 4.82295 9.91336
- vertex 6.4 -4.75 12.3
- vertex 6.4 4.39683 9.07705
- endloop
- endfacet
- facet normal 1 0 0
- outer loop
- vertex 6.4 5.48664 10.5771
- vertex 6.4 -4.75 12.3
- vertex 6.4 4.82295 9.91336
- endloop
- endfacet
- facet normal 1 0 0
- outer loop
- vertex 6.4 6.32295 11.0032
- vertex 6.4 -4.75 12.3
- vertex 6.4 5.48664 10.5771
- endloop
- endfacet
- facet normal 1 0 0
- outer loop
- vertex 6.4 11.25 12.3
- vertex 6.4 -4.75 12.3
- vertex 6.4 6.32295 11.0032
- endloop
- endfacet
- facet normal 1 0 0
- outer loop
- vertex 6.4 8.17705 11.0032
- vertex 6.4 9.01336 10.5771
- vertex 6.4 11.25 12.3
- endloop
- endfacet
- facet normal 1 0 0
- outer loop
- vertex 6.4 11.25 12.3
- vertex 6.4 6.32295 11.0032
- vertex 6.4 7.25 11.15
- endloop
- endfacet
- facet normal 1 0 0
- outer loop
- vertex 6.4 10.25 8.15
- vertex 6.4 10.1032 7.22295
- vertex 6.4 11.25 4
- endloop
- endfacet
- facet normal 1 0 0
- outer loop
- vertex 6.4 9.01336 5.72295
- vertex 6.4 8.17705 5.29683
- vertex 6.4 11.25 4
- endloop
- endfacet
- facet normal 1 0 0
- outer loop
- vertex 6.4 11.25 12.3
- vertex 6.4 9.01336 10.5771
- vertex 6.4 9.67705 9.91336
- endloop
- endfacet
- facet normal 1 0 0
- outer loop
- vertex 6.4 11.25 12.3
- vertex 6.4 10.1032 9.07705
- vertex 6.4 11.25 4
- endloop
- endfacet
- facet normal 1 0 0
- outer loop
- vertex 6.4 11.25 12.3
- vertex 6.4 9.67705 9.91336
- vertex 6.4 10.1032 9.07705
- endloop
- endfacet
- facet normal 1 0 0
- outer loop
- vertex 6.4 10.1032 9.07705
- vertex 6.4 10.25 8.15
- vertex 6.4 11.25 4
- endloop
- endfacet
- facet normal 1 0 0
- outer loop
- vertex 6.4 10.1032 7.22295
- vertex 6.4 9.67705 6.38664
- vertex 6.4 11.25 4
- endloop
- endfacet
- facet normal 1 0 0
- outer loop
- vertex 6.4 9.67705 6.38664
- vertex 6.4 9.01336 5.72295
- vertex 6.4 11.25 4
- endloop
- endfacet
- facet normal 1 0 0
- outer loop
- vertex 6.4 8.17705 5.29683
- vertex 6.4 7.25 5.15
- vertex 6.4 11.25 4
- endloop
- endfacet
- facet normal 1 0 0
- outer loop
- vertex 6.4 5.48664 5.72295
- vertex 6.4 -4.75 4
- vertex 6.4 6.32295 5.29683
- endloop
- endfacet
- facet normal 1 0 0
- outer loop
- vertex 6.4 4.82295 6.38664
- vertex 6.4 -4.75 4
- vertex 6.4 5.48664 5.72295
- endloop
- endfacet
- facet normal 1 0 0
- outer loop
- vertex 6.4 4.39683 7.22295
- vertex 6.4 -4.75 4
- vertex 6.4 4.82295 6.38664
- endloop
- endfacet
- facet normal 1 0 0
- outer loop
- vertex 6.4 7.25 5.15
- vertex 6.4 6.32295 5.29683
- vertex 6.4 -4.75 4
- endloop
- endfacet
- facet normal 1 0 0
- outer loop
- vertex 6.4 4.39683 7.22295
- vertex 6.4 4.25 8.15
- vertex 6.4 -4.75 12.3
- endloop
- endfacet
- facet normal 1 0 0
- outer loop
- vertex 6.4 7.25 11.15
- vertex 6.4 8.17705 11.0032
- vertex 6.4 11.25 12.3
- endloop
- endfacet
- facet normal 0.156435 -0.987688 0
- outer loop
- vertex 0 -4.75 4
- vertex 0 -4.75 3
- vertex 1.46783 -4.51752 3
- endloop
- endfacet
- facet normal 0.156435 -0.987688 0
- outer loop
- vertex 1.46783 -4.51752 4
- vertex 0 -4.75 4
- vertex 1.46783 -4.51752 3
- endloop
- endfacet
- facet normal -0.156435 -0.987688 0
- outer loop
- vertex -1.46783 -4.51752 4
- vertex -1.46783 -4.51752 3
- vertex 0 -4.75 3
- endloop
- endfacet
- facet normal -0.156435 -0.987688 0
- outer loop
- vertex 0 -4.75 4
- vertex -1.46783 -4.51752 4
- vertex 0 -4.75 3
- endloop
- endfacet
- facet normal -0.45399 -0.891007 0
- outer loop
- vertex -2.79198 -3.84283 4
- vertex -2.79198 -3.84283 3
- vertex -1.46783 -4.51752 3
- endloop
- endfacet
- facet normal -0.45399 -0.891007 0
- outer loop
- vertex -1.46783 -4.51752 4
- vertex -2.79198 -3.84283 4
- vertex -1.46783 -4.51752 3
- endloop
- endfacet
- facet normal -0.707107 -0.707107 0
- outer loop
- vertex -3.84283 -2.79198 4
- vertex -3.84283 -2.79198 3
- vertex -2.79198 -3.84283 3
- endloop
- endfacet
- facet normal -0.707107 -0.707107 0
- outer loop
- vertex -2.79198 -3.84283 4
- vertex -3.84283 -2.79198 4
- vertex -2.79198 -3.84283 3
- endloop
- endfacet
- facet normal -0.891007 -0.45399 0
- outer loop
- vertex -4.51752 -1.46783 3
- vertex -3.84283 -2.79198 3
- vertex -4.51752 -1.46783 4
- endloop
- endfacet
- facet normal -0.891007 -0.45399 0
- outer loop
- vertex -4.51752 -1.46783 4
- vertex -3.84283 -2.79198 3
- vertex -3.84283 -2.79198 4
- endloop
- endfacet
- facet normal -0.987688 -0.156435 0
- outer loop
- vertex -4.75 0 3
- vertex -4.51752 -1.46783 3
- vertex -4.75 0 4
- endloop
- endfacet
- facet normal -0.987688 -0.156435 0
- outer loop
- vertex -4.75 0 4
- vertex -4.51752 -1.46783 3
- vertex -4.51752 -1.46783 4
- endloop
- endfacet
- facet normal -0.987688 0.156435 0
- outer loop
- vertex -4.75 0 3
- vertex -4.75 0 4
- vertex -4.51752 1.46783 3
- endloop
- endfacet
- facet normal -0.987688 0.156435 0
- outer loop
- vertex -4.51752 1.46783 3
- vertex -4.75 0 4
- vertex -4.51752 1.46783 4
- endloop
- endfacet
- facet normal -0.891007 0.45399 0
- outer loop
- vertex -4.51752 1.46783 3
- vertex -4.51752 1.46783 4
- vertex -3.84283 2.79198 3
- endloop
- endfacet
- facet normal -0.891007 0.45399 0
- outer loop
- vertex -3.84283 2.79198 3
- vertex -4.51752 1.46783 4
- vertex -3.84283 2.79198 4
- endloop
- endfacet
- facet normal -0.707107 0.707107 0
- outer loop
- vertex -3.84283 2.79198 3
- vertex -3.84283 2.79198 4
- vertex -2.79198 3.84283 3
- endloop
- endfacet
- facet normal -0.707107 0.707107 0
- outer loop
- vertex -2.79198 3.84283 3
- vertex -3.84283 2.79198 4
- vertex -2.79198 3.84283 4
- endloop
- endfacet
- facet normal -0.45399 0.891007 0
- outer loop
- vertex -2.79198 3.84283 3
- vertex -2.79198 3.84283 4
- vertex -1.46783 4.51752 3
- endloop
- endfacet
- facet normal -0.45399 0.891007 0
- outer loop
- vertex -1.46783 4.51752 3
- vertex -2.79198 3.84283 4
- vertex -1.46783 4.51752 4
- endloop
- endfacet
- facet normal -0.156435 0.987688 0
- outer loop
- vertex -1.46783 4.51752 3
- vertex -1.46783 4.51752 4
- vertex 0 4.75 3
- endloop
- endfacet
- facet normal -0.156435 0.987688 0
- outer loop
- vertex 0 4.75 3
- vertex -1.46783 4.51752 4
- vertex 0 4.75 4
- endloop
- endfacet
- facet normal 0.156435 0.987688 0
- outer loop
- vertex 0 4.75 3
- vertex 0 4.75 4
- vertex 1.46783 4.51752 3
- endloop
- endfacet
- facet normal 0.156435 0.987688 0
- outer loop
- vertex 1.46783 4.51752 3
- vertex 0 4.75 4
- vertex 1.46783 4.51752 4
- endloop
- endfacet
- facet normal 0.45399 0.891007 0
- outer loop
- vertex 1.46783 4.51752 3
- vertex 1.46783 4.51752 4
- vertex 2.79198 3.84283 3
- endloop
- endfacet
- facet normal 0.45399 0.891007 0
- outer loop
- vertex 2.79198 3.84283 3
- vertex 1.46783 4.51752 4
- vertex 2.79198 3.84283 4
- endloop
- endfacet
- facet normal 0.707107 0.707107 0
- outer loop
- vertex 2.79198 3.84283 3
- vertex 2.79198 3.84283 4
- vertex 3.84283 2.79198 3
- endloop
- endfacet
- facet normal 0.707107 0.707107 0
- outer loop
- vertex 3.84283 2.79198 3
- vertex 2.79198 3.84283 4
- vertex 3.84283 2.79198 4
- endloop
- endfacet
- facet normal 0.891007 0.45399 0
- outer loop
- vertex 4.51752 1.46783 3
- vertex 3.84283 2.79198 3
- vertex 3.84283 2.79198 4
- endloop
- endfacet
- facet normal 0.891007 0.45399 0
- outer loop
- vertex 4.51752 1.46783 4
- vertex 4.51752 1.46783 3
- vertex 3.84283 2.79198 4
- endloop
- endfacet
- facet normal 0.987688 0.156435 0
- outer loop
- vertex 4.75 0 3
- vertex 4.51752 1.46783 3
- vertex 4.51752 1.46783 4
- endloop
- endfacet
- facet normal 0.987688 0.156435 0
- outer loop
- vertex 4.75 0 4
- vertex 4.75 0 3
- vertex 4.51752 1.46783 4
- endloop
- endfacet
- facet normal 0.987688 -0.156435 0
- outer loop
- vertex 4.51752 -1.46783 4
- vertex 4.51752 -1.46783 3
- vertex 4.75 0 3
- endloop
- endfacet
- facet normal 0.987688 -0.156435 0
- outer loop
- vertex 4.75 0 4
- vertex 4.51752 -1.46783 4
- vertex 4.75 0 3
- endloop
- endfacet
- facet normal 0.891007 -0.45399 0
- outer loop
- vertex 3.84283 -2.79198 4
- vertex 3.84283 -2.79198 3
- vertex 4.51752 -1.46783 3
- endloop
- endfacet
- facet normal 0.891007 -0.45399 0
- outer loop
- vertex 4.51752 -1.46783 4
- vertex 3.84283 -2.79198 4
- vertex 4.51752 -1.46783 3
- endloop
- endfacet
- facet normal 0.707107 -0.707107 0
- outer loop
- vertex 2.79198 -3.84283 4
- vertex 2.79198 -3.84283 3
- vertex 3.84283 -2.79198 3
- endloop
- endfacet
- facet normal 0.707107 -0.707107 0
- outer loop
- vertex 3.84283 -2.79198 4
- vertex 2.79198 -3.84283 4
- vertex 3.84283 -2.79198 3
- endloop
- endfacet
- facet normal 0.45399 -0.891007 0
- outer loop
- vertex 1.46783 -4.51752 4
- vertex 1.46783 -4.51752 3
- vertex 2.79198 -3.84283 3
- endloop
- endfacet
- facet normal 0.45399 -0.891007 0
- outer loop
- vertex 2.79198 -3.84283 4
- vertex 1.46783 -4.51752 4
- vertex 2.79198 -3.84283 3
- endloop
- endfacet
- facet normal 0.45399 -0.891007 0
- outer loop
- vertex 1.46783 -4.51752 18
- vertex 1.46783 -4.51752 12.3
- vertex 2.79198 -3.84283 12.3
- endloop
- endfacet
- facet normal 0.45399 -0.891007 0
- outer loop
- vertex 2.79198 -3.84283 18
- vertex 1.46783 -4.51752 18
- vertex 2.79198 -3.84283 12.3
- endloop
- endfacet
- facet normal 0.707107 -0.707107 0
- outer loop
- vertex 2.79198 -3.84283 18
- vertex 2.79198 -3.84283 12.3
- vertex 3.84283 -2.79198 12.3
- endloop
- endfacet
- facet normal 0.707107 -0.707107 0
- outer loop
- vertex 3.84283 -2.79198 18
- vertex 2.79198 -3.84283 18
- vertex 3.84283 -2.79198 12.3
- endloop
- endfacet
- facet normal 0.891007 -0.45399 0
- outer loop
- vertex 3.84283 -2.79198 18
- vertex 3.84283 -2.79198 12.3
- vertex 4.51752 -1.46783 12.3
- endloop
- endfacet
- facet normal 0.891007 -0.45399 0
- outer loop
- vertex 4.51752 -1.46783 18
- vertex 3.84283 -2.79198 18
- vertex 4.51752 -1.46783 12.3
- endloop
- endfacet
- facet normal 0.987688 -0.156435 0
- outer loop
- vertex 4.51752 -1.46783 18
- vertex 4.51752 -1.46783 12.3
- vertex 4.75 0 12.3
- endloop
- endfacet
- facet normal 0.987688 -0.156435 0
- outer loop
- vertex 4.75 0 18
- vertex 4.51752 -1.46783 18
- vertex 4.75 0 12.3
- endloop
- endfacet
- facet normal 0.987688 0.156435 0
- outer loop
- vertex 4.75 0 12.3
- vertex 4.51752 1.46783 12.3
- vertex 4.51752 1.46783 18
- endloop
- endfacet
- facet normal 0.987688 0.156435 0
- outer loop
- vertex 4.75 0 18
- vertex 4.75 0 12.3
- vertex 4.51752 1.46783 18
- endloop
- endfacet
- facet normal 0.891007 0.45399 0
- outer loop
- vertex 4.51752 1.46783 12.3
- vertex 3.84283 2.79198 12.3
- vertex 3.84283 2.79198 18
- endloop
- endfacet
- facet normal 0.891007 0.45399 0
- outer loop
- vertex 4.51752 1.46783 18
- vertex 4.51752 1.46783 12.3
- vertex 3.84283 2.79198 18
- endloop
- endfacet
- facet normal 0.707107 0.707107 0
- outer loop
- vertex 2.79198 3.84283 12.3
- vertex 2.79198 3.84283 18
- vertex 3.84283 2.79198 12.3
- endloop
- endfacet
- facet normal 0.707107 0.707107 0
- outer loop
- vertex 3.84283 2.79198 12.3
- vertex 2.79198 3.84283 18
- vertex 3.84283 2.79198 18
- endloop
- endfacet
- facet normal 0.45399 0.891007 0
- outer loop
- vertex 1.46783 4.51752 12.3
- vertex 1.46783 4.51752 18
- vertex 2.79198 3.84283 12.3
- endloop
- endfacet
- facet normal 0.45399 0.891007 0
- outer loop
- vertex 2.79198 3.84283 12.3
- vertex 1.46783 4.51752 18
- vertex 2.79198 3.84283 18
- endloop
- endfacet
- facet normal 0.156435 0.987688 0
- outer loop
- vertex 0 4.75 12.3
- vertex 0 4.75 18
- vertex 1.46783 4.51752 12.3
- endloop
- endfacet
- facet normal 0.156435 0.987688 0
- outer loop
- vertex 1.46783 4.51752 12.3
- vertex 0 4.75 18
- vertex 1.46783 4.51752 18
- endloop
- endfacet
- facet normal -0.156435 0.987688 0
- outer loop
- vertex -1.46783 4.51752 12.3
- vertex -1.46783 4.51752 18
- vertex 0 4.75 12.3
- endloop
- endfacet
- facet normal -0.156435 0.987688 0
- outer loop
- vertex 0 4.75 12.3
- vertex -1.46783 4.51752 18
- vertex 0 4.75 18
- endloop
- endfacet
- facet normal -0.45399 0.891007 0
- outer loop
- vertex -2.79198 3.84283 12.3
- vertex -2.79198 3.84283 18
- vertex -1.46783 4.51752 12.3
- endloop
- endfacet
- facet normal -0.45399 0.891007 0
- outer loop
- vertex -1.46783 4.51752 12.3
- vertex -2.79198 3.84283 18
- vertex -1.46783 4.51752 18
- endloop
- endfacet
- facet normal -0.707107 0.707107 0
- outer loop
- vertex -3.84283 2.79198 12.3
- vertex -3.84283 2.79198 18
- vertex -2.79198 3.84283 12.3
- endloop
- endfacet
- facet normal -0.707107 0.707107 0
- outer loop
- vertex -2.79198 3.84283 12.3
- vertex -3.84283 2.79198 18
- vertex -2.79198 3.84283 18
- endloop
- endfacet
- facet normal -0.891007 0.45399 0
- outer loop
- vertex -4.51752 1.46783 12.3
- vertex -4.51752 1.46783 18
- vertex -3.84283 2.79198 12.3
- endloop
- endfacet
- facet normal -0.891007 0.45399 0
- outer loop
- vertex -3.84283 2.79198 12.3
- vertex -4.51752 1.46783 18
- vertex -3.84283 2.79198 18
- endloop
- endfacet
- facet normal -0.987688 0.156435 0
- outer loop
- vertex -4.75 0 12.3
- vertex -4.75 0 18
- vertex -4.51752 1.46783 12.3
- endloop
- endfacet
- facet normal -0.987688 0.156435 0
- outer loop
- vertex -4.51752 1.46783 12.3
- vertex -4.75 0 18
- vertex -4.51752 1.46783 18
- endloop
- endfacet
- facet normal -0.987688 -0.156435 0
- outer loop
- vertex -4.75 0 12.3
- vertex -4.51752 -1.46783 12.3
- vertex -4.75 0 18
- endloop
- endfacet
- facet normal -0.987688 -0.156435 0
- outer loop
- vertex -4.75 0 18
- vertex -4.51752 -1.46783 12.3
- vertex -4.51752 -1.46783 18
- endloop
- endfacet
- facet normal -0.891007 -0.45399 0
- outer loop
- vertex -4.51752 -1.46783 12.3
- vertex -3.84283 -2.79198 12.3
- vertex -4.51752 -1.46783 18
- endloop
- endfacet
- facet normal -0.891007 -0.45399 0
- outer loop
- vertex -4.51752 -1.46783 18
- vertex -3.84283 -2.79198 12.3
- vertex -3.84283 -2.79198 18
- endloop
- endfacet
- facet normal -0.707107 -0.707107 0
- outer loop
- vertex -3.84283 -2.79198 18
- vertex -3.84283 -2.79198 12.3
- vertex -2.79198 -3.84283 12.3
- endloop
- endfacet
- facet normal -0.707107 -0.707107 0
- outer loop
- vertex -2.79198 -3.84283 18
- vertex -3.84283 -2.79198 18
- vertex -2.79198 -3.84283 12.3
- endloop
- endfacet
- facet normal -0.45399 -0.891007 0
- outer loop
- vertex -2.79198 -3.84283 18
- vertex -2.79198 -3.84283 12.3
- vertex -1.46783 -4.51752 12.3
- endloop
- endfacet
- facet normal -0.45399 -0.891007 0
- outer loop
- vertex -1.46783 -4.51752 18
- vertex -2.79198 -3.84283 18
- vertex -1.46783 -4.51752 12.3
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex -4.51752 1.46783 18
- vertex -4.75 0 18
- vertex -4.51752 -1.46783 18
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex -3.80423 -1.23607 18
- vertex -4.51752 1.46783 18
- vertex -3.84283 -2.79198 18
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex -3.84283 -2.79198 18
- vertex -4.51752 1.46783 18
- vertex -4.51752 -1.46783 18
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex 1.23607 -3.80423 18
- vertex 0 -4 18
- vertex 1.46783 -4.51752 18
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex -1.23607 -3.80423 18
- vertex -2.35114 -3.23607 18
- vertex -1.46783 -4.51752 18
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex 0 4 18
- vertex 1.23607 3.80423 18
- vertex 1.46783 4.51752 18
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex -2.79198 3.84283 18
- vertex -4.51752 1.46783 18
- vertex -1.46783 4.51752 18
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex -3.84283 2.79198 18
- vertex -4.51752 1.46783 18
- vertex -2.79198 3.84283 18
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex -2.79198 -3.84283 18
- vertex -3.80423 -1.23607 18
- vertex -3.84283 -2.79198 18
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex 2.35114 -3.23607 18
- vertex 1.23607 -3.80423 18
- vertex 2.79198 -3.84283 18
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex 1.23607 3.80423 18
- vertex 2.35114 3.23607 18
- vertex 2.79198 3.84283 18
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex -2.35114 3.23607 18
- vertex -1.23607 3.80423 18
- vertex 0 4.75 18
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex -1.46783 4.51752 18
- vertex -2.35114 3.23607 18
- vertex 0 4.75 18
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex -1.46783 4.51752 18
- vertex -4.51752 1.46783 18
- vertex -2.35114 3.23607 18
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex 0 4.75 18
- vertex -1.23607 3.80423 18
- vertex 1.46783 4.51752 18
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex -1.23607 3.80423 18
- vertex 0 4 18
- vertex 1.46783 4.51752 18
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex 1.46783 4.51752 18
- vertex 1.23607 3.80423 18
- vertex 2.79198 3.84283 18
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex -3.23607 2.35114 18
- vertex -2.35114 3.23607 18
- vertex -4.51752 1.46783 18
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex 2.79198 3.84283 18
- vertex 2.35114 3.23607 18
- vertex 3.84283 2.79198 18
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex 3.84283 2.79198 18
- vertex 3.23607 2.35114 18
- vertex 4.51752 1.46783 18
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex 4.51752 1.46783 18
- vertex 3.80423 1.23607 18
- vertex 4.75 0 18
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex 4.75 0 18
- vertex 4 0 18
- vertex 4.51752 -1.46783 18
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex 4 0 18
- vertex 3.80423 -1.23607 18
- vertex 4.51752 -1.46783 18
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex 4.51752 -1.46783 18
- vertex 3.23607 -2.35114 18
- vertex 3.84283 -2.79198 18
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex 3.84283 -2.79198 18
- vertex 2.35114 -3.23607 18
- vertex 2.79198 -3.84283 18
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex 2.35114 3.23607 18
- vertex 3.23607 2.35114 18
- vertex 3.84283 2.79198 18
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex 2.79198 -3.84283 18
- vertex 1.23607 -3.80423 18
- vertex 1.46783 -4.51752 18
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex 3.23607 2.35114 18
- vertex 3.80423 1.23607 18
- vertex 4.51752 1.46783 18
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex 1.46783 -4.51752 18
- vertex 0 -4 18
- vertex 0 -4.75 18
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex 3.80423 1.23607 18
- vertex 4 0 18
- vertex 4.75 0 18
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex 0 -4.75 18
- vertex -1.23607 -3.80423 18
- vertex -1.46783 -4.51752 18
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex 3.80423 -1.23607 18
- vertex 3.23607 -2.35114 18
- vertex 4.51752 -1.46783 18
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex -1.46783 -4.51752 18
- vertex -2.35114 -3.23607 18
- vertex -2.79198 -3.84283 18
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex -2.35114 -3.23607 18
- vertex -3.23607 -2.35114 18
- vertex -2.79198 -3.84283 18
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex -3.80423 -1.23607 18
- vertex -4 0 18
- vertex -4.51752 1.46783 18
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex -3.23607 -2.35114 18
- vertex -3.80423 -1.23607 18
- vertex -2.79198 -3.84283 18
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex 0 -4 18
- vertex -1.23607 -3.80423 18
- vertex 0 -4.75 18
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex -4 0 18
- vertex -3.80423 1.23607 18
- vertex -4.51752 1.46783 18
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex 3.23607 -2.35114 18
- vertex 2.35114 -3.23607 18
- vertex 3.84283 -2.79198 18
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex -3.80423 1.23607 18
- vertex -3.23607 2.35114 18
- vertex -4.51752 1.46783 18
- endloop
- endfacet
- facet normal 0 0 -1
- outer loop
- vertex -4.50104 1.46248 3
- vertex -4.51752 1.46783 3
- vertex -3.84283 2.79198 3
- endloop
- endfacet
- facet normal 0 0 -1
- outer loop
- vertex -3.82881 2.78179 3
- vertex -3.84283 2.79198 3
- vertex -2.79198 3.84283 3
- endloop
- endfacet
- facet normal 0 0 -1
- outer loop
- vertex -2.78179 3.82881 3
- vertex -2.79198 3.84283 3
- vertex -1.46783 4.51752 3
- endloop
- endfacet
- facet normal 0 0 -1
- outer loop
- vertex -1.46248 4.50104 3
- vertex -1.46783 4.51752 3
- vertex 0 4.75 3
- endloop
- endfacet
- facet normal 0 0 -1
- outer loop
- vertex 0 4.73267 3
- vertex 0 4.75 3
- vertex 1.46783 4.51752 3
- endloop
- endfacet
- facet normal 0 0 -1
- outer loop
- vertex 1.46248 4.50104 3
- vertex 1.46783 4.51752 3
- vertex 2.79198 3.84283 3
- endloop
- endfacet
- facet normal 0 0 -1
- outer loop
- vertex 2.78179 3.82881 3
- vertex 2.79198 3.84283 3
- vertex 3.84283 2.79198 3
- endloop
- endfacet
- facet normal 0 0 -1
- outer loop
- vertex 4.50104 1.46248 3
- vertex 3.84283 2.79198 3
- vertex 4.51752 1.46783 3
- endloop
- endfacet
- facet normal 0 0 -1
- outer loop
- vertex 4.73267 0 3
- vertex 4.51752 1.46783 3
- vertex 4.75 0 3
- endloop
- endfacet
- facet normal 0 0 -1
- outer loop
- vertex 4.50104 -1.46248 3
- vertex 4.75 0 3
- vertex 4.51752 -1.46783 3
- endloop
- endfacet
- facet normal 0 0 -1
- outer loop
- vertex 3.82881 -2.78179 3
- vertex 4.51752 -1.46783 3
- vertex 3.84283 -2.79198 3
- endloop
- endfacet
- facet normal 0 0 -1
- outer loop
- vertex 2.78179 -3.82881 3
- vertex 3.84283 -2.79198 3
- vertex 2.79198 -3.84283 3
- endloop
- endfacet
- facet normal 0 0 -1
- outer loop
- vertex 1.46248 -4.50104 3
- vertex 2.79198 -3.84283 3
- vertex 1.46783 -4.51752 3
- endloop
- endfacet
- facet normal 0 0 -1
- outer loop
- vertex 0 -4.73267 3
- vertex 1.46783 -4.51752 3
- vertex 0 -4.75 3
- endloop
- endfacet
- facet normal 0 0 -1
- outer loop
- vertex -1.46248 -4.50104 3
- vertex 0 -4.75 3
- vertex -1.46783 -4.51752 3
- endloop
- endfacet
- facet normal 0 0 -1
- outer loop
- vertex -2.78179 -3.82881 3
- vertex -1.46783 -4.51752 3
- vertex -2.79198 -3.84283 3
- endloop
- endfacet
- facet normal 0 0 -1
- outer loop
- vertex -3.82881 -2.78179 3
- vertex -2.79198 -3.84283 3
- vertex -3.84283 -2.79198 3
- endloop
- endfacet
- facet normal 0 0 -1
- outer loop
- vertex -4.75 0 3
- vertex -4.51752 1.46783 3
- vertex -4.73267 0 3
- endloop
- endfacet
- facet normal 0 0 -1
- outer loop
- vertex -4.75 0 3
- vertex -4.73267 0 3
- vertex -4.51752 -1.46783 3
- endloop
- endfacet
- facet normal 0 0 -1
- outer loop
- vertex -4.50104 -1.46248 3
- vertex -4.51752 -1.46783 3
- vertex -4.73259 -0.000492458 3
- endloop
- endfacet
- facet normal 0 0 -1
- outer loop
- vertex -4.73267 0 3
- vertex -4.73259 -0.000492458 3
- vertex -4.51752 -1.46783 3
- endloop
- endfacet
- facet normal 0 0 -1
- outer loop
- vertex -3.82881 -2.78179 3
- vertex -4.51752 -1.46783 3
- vertex -4.50081 -1.46292 3
- endloop
- endfacet
- facet normal 0 0 -1
- outer loop
- vertex -4.51752 -1.46783 3
- vertex -4.50104 -1.46248 3
- vertex -4.50081 -1.46292 3
- endloop
- endfacet
- facet normal 0 0 -1
- outer loop
- vertex -2.78179 -3.82881 3
- vertex -2.79198 -3.84283 3
- vertex -3.82881 -2.78179 3
- endloop
- endfacet
- facet normal 0 0 -1
- outer loop
- vertex -4.51752 -1.46783 3
- vertex -3.82881 -2.78179 3
- vertex -3.84283 -2.79198 3
- endloop
- endfacet
- facet normal 0 0 -1
- outer loop
- vertex -2.78135 -3.82904 3
- vertex -1.46783 -4.51752 3
- vertex -2.78179 -3.82881 3
- endloop
- endfacet
- facet normal 0 0 -1
- outer loop
- vertex -1.46198 -4.50111 3
- vertex 0 -4.75 3
- vertex -1.46248 -4.50104 3
- endloop
- endfacet
- facet normal 0 0 -1
- outer loop
- vertex 0.000492458 -4.73259 3
- vertex 1.46783 -4.51752 3
- vertex 0 -4.73267 3
- endloop
- endfacet
- facet normal 0 0 -1
- outer loop
- vertex 1.46292 -4.50081 3
- vertex 2.79198 -3.84283 3
- vertex 1.46248 -4.50104 3
- endloop
- endfacet
- facet normal 0 0 -1
- outer loop
- vertex 3.82904 -2.78135 3
- vertex 4.51752 -1.46783 3
- vertex 3.82881 -2.78179 3
- endloop
- endfacet
- facet normal 0 0 -1
- outer loop
- vertex 4.50111 -1.46198 3
- vertex 4.75 0 3
- vertex 4.50104 -1.46248 3
- endloop
- endfacet
- facet normal 0 0 -1
- outer loop
- vertex 4.73259 0.000492458 3
- vertex 4.51752 1.46783 3
- vertex 4.73267 0 3
- endloop
- endfacet
- facet normal 0 0 -1
- outer loop
- vertex 4.50104 1.46248 3
- vertex 4.51752 1.46783 3
- vertex 4.73259 0.000492458 3
- endloop
- endfacet
- facet normal 0 0 -1
- outer loop
- vertex 4.50081 1.46292 3
- vertex 3.84283 2.79198 3
- vertex 4.50104 1.46248 3
- endloop
- endfacet
- facet normal 0 0 -1
- outer loop
- vertex 3.82881 2.78179 3
- vertex 3.84283 2.79198 3
- vertex 4.50081 1.46292 3
- endloop
- endfacet
- facet normal 0 0 -1
- outer loop
- vertex 4.73267 0 3
- vertex 4.75 0 3
- vertex 4.50111 -1.46198 3
- endloop
- endfacet
- facet normal 0 0 -1
- outer loop
- vertex 2.78135 3.82904 3
- vertex 2.79198 3.84283 3
- vertex 2.78179 3.82881 3
- endloop
- endfacet
- facet normal 0 0 -1
- outer loop
- vertex 4.50104 -1.46248 3
- vertex 4.51752 -1.46783 3
- vertex 3.82904 -2.78135 3
- endloop
- endfacet
- facet normal 0 0 -1
- outer loop
- vertex 1.46198 4.50111 3
- vertex 1.46783 4.51752 3
- vertex 1.46248 4.50104 3
- endloop
- endfacet
- facet normal 0 0 -1
- outer loop
- vertex 3.82881 -2.78179 3
- vertex 3.84283 -2.79198 3
- vertex 2.78179 -3.82881 3
- endloop
- endfacet
- facet normal 0 0 -1
- outer loop
- vertex -0.000492458 4.73259 3
- vertex 0 4.75 3
- vertex 0 4.73267 3
- endloop
- endfacet
- facet normal 0 0 -1
- outer loop
- vertex 2.78179 -3.82881 3
- vertex 2.79198 -3.84283 3
- vertex 1.46292 -4.50081 3
- endloop
- endfacet
- facet normal 0 0 -1
- outer loop
- vertex -1.46292 4.50081 3
- vertex -1.46783 4.51752 3
- vertex -1.46248 4.50104 3
- endloop
- endfacet
- facet normal 0 0 -1
- outer loop
- vertex 1.46248 -4.50104 3
- vertex 1.46783 -4.51752 3
- vertex 0.000492458 -4.73259 3
- endloop
- endfacet
- facet normal 0 0 -1
- outer loop
- vertex 0 -4.73267 3
- vertex 0 -4.75 3
- vertex -1.46198 -4.50111 3
- endloop
- endfacet
- facet normal 0 0 -1
- outer loop
- vertex -3.82904 2.78135 3
- vertex -3.84283 2.79198 3
- vertex -3.82881 2.78179 3
- endloop
- endfacet
- facet normal 0 0 -1
- outer loop
- vertex -1.46248 -4.50104 3
- vertex -1.46783 -4.51752 3
- vertex -2.78135 -3.82904 3
- endloop
- endfacet
- facet normal 0 0 -1
- outer loop
- vertex -4.50111 1.46198 3
- vertex -4.51752 1.46783 3
- vertex -4.50104 1.46248 3
- endloop
- endfacet
- facet normal 0 0 -1
- outer loop
- vertex -4.73267 0 3
- vertex -4.51752 1.46783 3
- vertex -4.50111 1.46198 3
- endloop
- endfacet
- facet normal 0 0 -1
- outer loop
- vertex -4.50104 1.46248 3
- vertex -3.84283 2.79198 3
- vertex -3.82904 2.78135 3
- endloop
- endfacet
- facet normal 0 0 -1
- outer loop
- vertex -3.82881 2.78179 3
- vertex -2.79198 3.84283 3
- vertex -2.78179 3.82881 3
- endloop
- endfacet
- facet normal 0 0 -1
- outer loop
- vertex -2.78179 3.82881 3
- vertex -1.46783 4.51752 3
- vertex -1.46292 4.50081 3
- endloop
- endfacet
- facet normal 0 0 -1
- outer loop
- vertex -1.46248 4.50104 3
- vertex 0 4.75 3
- vertex -0.000492458 4.73259 3
- endloop
- endfacet
- facet normal 0 0 -1
- outer loop
- vertex 0 4.73267 3
- vertex 1.46783 4.51752 3
- vertex 1.46198 4.50111 3
- endloop
- endfacet
- facet normal 0 0 -1
- outer loop
- vertex 1.46248 4.50104 3
- vertex 2.79198 3.84283 3
- vertex 2.78135 3.82904 3
- endloop
- endfacet
- facet normal 0 0 -1
- outer loop
- vertex 2.78179 3.82881 3
- vertex 3.84283 2.79198 3
- vertex 3.82881 2.78179 3
- endloop
- endfacet
- facet normal 0.987688 0.156435 0
- outer loop
- vertex -4 0 18
- vertex -3.80423 -1.23607 18
- vertex -3.80423 -1.23607 3.99
- endloop
- endfacet
- facet normal 0.987688 0.156435 0
- outer loop
- vertex -4 0 3.99
- vertex -4 0 18
- vertex -3.80423 -1.23607 3.99
- endloop
- endfacet
- facet normal 0.891007 0.45399 0
- outer loop
- vertex -3.80423 -1.23607 18
- vertex -3.23607 -2.35114 18
- vertex -3.23607 -2.35114 3.99
- endloop
- endfacet
- facet normal 0.891007 0.45399 0
- outer loop
- vertex -3.80423 -1.23607 3.99
- vertex -3.80423 -1.23607 18
- vertex -3.23607 -2.35114 3.99
- endloop
- endfacet
- facet normal 0.707107 0.707107 0
- outer loop
- vertex -2.35114 -3.23607 18
- vertex -2.35114 -3.23607 3.99
- vertex -3.23607 -2.35114 18
- endloop
- endfacet
- facet normal 0.707107 0.707107 0
- outer loop
- vertex -3.23607 -2.35114 18
- vertex -2.35114 -3.23607 3.99
- vertex -3.23607 -2.35114 3.99
- endloop
- endfacet
- facet normal 0.45399 0.891007 0
- outer loop
- vertex -1.23607 -3.80423 18
- vertex -1.23607 -3.80423 3.99
- vertex -2.35114 -3.23607 18
- endloop
- endfacet
- facet normal 0.45399 0.891007 0
- outer loop
- vertex -2.35114 -3.23607 18
- vertex -1.23607 -3.80423 3.99
- vertex -2.35114 -3.23607 3.99
- endloop
- endfacet
- facet normal 0.156435 0.987688 0
- outer loop
- vertex 0 -4 18
- vertex 0 -4 3.99
- vertex -1.23607 -3.80423 18
- endloop
- endfacet
- facet normal 0.156435 0.987688 0
- outer loop
- vertex -1.23607 -3.80423 18
- vertex 0 -4 3.99
- vertex -1.23607 -3.80423 3.99
- endloop
- endfacet
- facet normal -0.156435 0.987688 0
- outer loop
- vertex 1.23607 -3.80423 18
- vertex 1.23607 -3.80423 3.99
- vertex 0 -4 18
- endloop
- endfacet
- facet normal -0.156435 0.987688 0
- outer loop
- vertex 0 -4 18
- vertex 1.23607 -3.80423 3.99
- vertex 0 -4 3.99
- endloop
- endfacet
- facet normal -0.45399 0.891007 0
- outer loop
- vertex 2.35114 -3.23607 18
- vertex 2.35114 -3.23607 3.99
- vertex 1.23607 -3.80423 18
- endloop
- endfacet
- facet normal -0.45399 0.891007 0
- outer loop
- vertex 1.23607 -3.80423 18
- vertex 2.35114 -3.23607 3.99
- vertex 1.23607 -3.80423 3.99
- endloop
- endfacet
- facet normal -0.707107 0.707107 0
- outer loop
- vertex 3.23607 -2.35114 18
- vertex 3.23607 -2.35114 3.99
- vertex 2.35114 -3.23607 18
- endloop
- endfacet
- facet normal -0.707107 0.707107 0
- outer loop
- vertex 2.35114 -3.23607 18
- vertex 3.23607 -2.35114 3.99
- vertex 2.35114 -3.23607 3.99
- endloop
- endfacet
- facet normal -0.891007 0.45399 0
- outer loop
- vertex 3.80423 -1.23607 18
- vertex 3.80423 -1.23607 3.99
- vertex 3.23607 -2.35114 18
- endloop
- endfacet
- facet normal -0.891007 0.45399 0
- outer loop
- vertex 3.23607 -2.35114 18
- vertex 3.80423 -1.23607 3.99
- vertex 3.23607 -2.35114 3.99
- endloop
- endfacet
- facet normal -0.987688 0.156435 0
- outer loop
- vertex 4 0 18
- vertex 4 0 3.99
- vertex 3.80423 -1.23607 18
- endloop
- endfacet
- facet normal -0.987688 0.156435 0
- outer loop
- vertex 3.80423 -1.23607 18
- vertex 4 0 3.99
- vertex 3.80423 -1.23607 3.99
- endloop
- endfacet
- facet normal -0.987688 -0.156435 0
- outer loop
- vertex 4 0 18
- vertex 3.80423 1.23607 18
- vertex 4 0 3.99
- endloop
- endfacet
- facet normal -0.987688 -0.156435 0
- outer loop
- vertex 4 0 3.99
- vertex 3.80423 1.23607 18
- vertex 3.80423 1.23607 3.99
- endloop
- endfacet
- facet normal -0.891007 -0.45399 0
- outer loop
- vertex 3.80423 1.23607 18
- vertex 3.23607 2.35114 18
- vertex 3.80423 1.23607 3.99
- endloop
- endfacet
- facet normal -0.891007 -0.45399 0
- outer loop
- vertex 3.80423 1.23607 3.99
- vertex 3.23607 2.35114 18
- vertex 3.23607 2.35114 3.99
- endloop
- endfacet
- facet normal -0.707107 -0.707107 0
- outer loop
- vertex 3.23607 2.35114 3.99
- vertex 3.23607 2.35114 18
- vertex 2.35114 3.23607 18
- endloop
- endfacet
- facet normal -0.707107 -0.707107 0
- outer loop
- vertex 2.35114 3.23607 3.99
- vertex 3.23607 2.35114 3.99
- vertex 2.35114 3.23607 18
- endloop
- endfacet
- facet normal -0.45399 -0.891007 0
- outer loop
- vertex 2.35114 3.23607 3.99
- vertex 2.35114 3.23607 18
- vertex 1.23607 3.80423 18
- endloop
- endfacet
- facet normal -0.45399 -0.891007 0
- outer loop
- vertex 1.23607 3.80423 3.99
- vertex 2.35114 3.23607 3.99
- vertex 1.23607 3.80423 18
- endloop
- endfacet
- facet normal -0.156435 -0.987688 0
- outer loop
- vertex 1.23607 3.80423 3.99
- vertex 1.23607 3.80423 18
- vertex 0 4 18
- endloop
- endfacet
- facet normal -0.156435 -0.987688 0
- outer loop
- vertex 0 4 3.99
- vertex 1.23607 3.80423 3.99
- vertex 0 4 18
- endloop
- endfacet
- facet normal 0.156435 -0.987688 0
- outer loop
- vertex 0 4 3.99
- vertex 0 4 18
- vertex -1.23607 3.80423 18
- endloop
- endfacet
- facet normal 0.156435 -0.987688 0
- outer loop
- vertex -1.23607 3.80423 3.99
- vertex 0 4 3.99
- vertex -1.23607 3.80423 18
- endloop
- endfacet
- facet normal 0.45399 -0.891007 0
- outer loop
- vertex -1.23607 3.80423 3.99
- vertex -1.23607 3.80423 18
- vertex -2.35114 3.23607 18
- endloop
- endfacet
- facet normal 0.45399 -0.891007 0
- outer loop
- vertex -2.35114 3.23607 3.99
- vertex -1.23607 3.80423 3.99
- vertex -2.35114 3.23607 18
- endloop
- endfacet
- facet normal 0.707107 -0.707107 0
- outer loop
- vertex -2.35114 3.23607 3.99
- vertex -2.35114 3.23607 18
- vertex -3.23607 2.35114 18
- endloop
- endfacet
- facet normal 0.707107 -0.707107 0
- outer loop
- vertex -3.23607 2.35114 3.99
- vertex -2.35114 3.23607 3.99
- vertex -3.23607 2.35114 18
- endloop
- endfacet
- facet normal 0.891007 -0.45399 0
- outer loop
- vertex -3.23607 2.35114 3.99
- vertex -3.23607 2.35114 18
- vertex -3.80423 1.23607 18
- endloop
- endfacet
- facet normal 0.891007 -0.45399 0
- outer loop
- vertex -3.80423 1.23607 3.99
- vertex -3.23607 2.35114 3.99
- vertex -3.80423 1.23607 18
- endloop
- endfacet
- facet normal 0.987688 -0.156435 0
- outer loop
- vertex -3.80423 1.23607 3.99
- vertex -3.80423 1.23607 18
- vertex -4 0 18
- endloop
- endfacet
- facet normal 0.987688 -0.156435 0
- outer loop
- vertex -4 0 3.99
- vertex -3.80423 1.23607 3.99
- vertex -4 0 18
- endloop
- endfacet
- facet normal -0.498221 0.0789107 -0.863452
- outer loop
- vertex -0.4 0 0.5
- vertex -4.73267 0 3
- vertex -4.50111 1.46198 3
- endloop
- endfacet
- facet normal -0.498222 -0.0789088 -0.863452
- outer loop
- vertex -4.73267 0 3
- vertex -0.4 0 0.5
- vertex -4.73259 -0.000492458 3
- endloop
- endfacet
- facet normal -0.498222 -0.0789088 -0.863452
- outer loop
- vertex -4.73259 -0.000492458 3
- vertex -0.4 0 0.5
- vertex -0.380423 -0.123607 0.5
- endloop
- endfacet
- facet normal -0.498222 0.0789089 -0.863451
- outer loop
- vertex -4.50111 1.46198 3
- vertex -4.50104 1.46248 3
- vertex -0.4 0 0.5
- endloop
- endfacet
- facet normal -0.498222 0.0789089 -0.863451
- outer loop
- vertex -0.4 0 0.5
- vertex -4.50104 1.46248 3
- vertex -0.380423 0.123607 0.5
- endloop
- endfacet
- facet normal -0.449452 0.229007 -0.863451
- outer loop
- vertex -0.380423 0.123607 0.5
- vertex -4.50104 1.46248 3
- vertex -3.82904 2.78135 3
- endloop
- endfacet
- facet normal -0.449451 0.229008 -0.863452
- outer loop
- vertex -3.82904 2.78135 3
- vertex -3.82881 2.78179 3
- vertex -0.380423 0.123607 0.5
- endloop
- endfacet
- facet normal -0.449451 0.229008 -0.863452
- outer loop
- vertex -0.380423 0.123607 0.5
- vertex -3.82881 2.78179 3
- vertex -0.323607 0.235114 0.5
- endloop
- endfacet
- facet normal -0.356687 0.356687 -0.863452
- outer loop
- vertex -3.82881 2.78179 3
- vertex -2.78179 3.82881 3
- vertex -0.323607 0.235114 0.5
- endloop
- endfacet
- facet normal -0.356687 0.356687 -0.863452
- outer loop
- vertex -0.323607 0.235114 0.5
- vertex -2.78179 3.82881 3
- vertex -0.235114 0.323607 0.5
- endloop
- endfacet
- facet normal -0.229007 0.449452 -0.863452
- outer loop
- vertex -0.235114 0.323607 0.5
- vertex -2.78179 3.82881 3
- vertex -1.46292 4.50081 3
- endloop
- endfacet
- facet normal -0.229008 0.449452 -0.863451
- outer loop
- vertex -1.46292 4.50081 3
- vertex -1.46248 4.50104 3
- vertex -0.235114 0.323607 0.5
- endloop
- endfacet
- facet normal -0.229008 0.449452 -0.863451
- outer loop
- vertex -0.235114 0.323607 0.5
- vertex -1.46248 4.50104 3
- vertex -0.123607 0.380423 0.5
- endloop
- endfacet
- facet normal -0.0789107 0.498221 -0.863451
- outer loop
- vertex -0.123607 0.380423 0.5
- vertex -1.46248 4.50104 3
- vertex -0.000492458 4.73259 3
- endloop
- endfacet
- facet normal -0.0789088 0.498222 -0.863452
- outer loop
- vertex -0.123607 0.380423 0.5
- vertex -0.000492458 4.73259 3
- vertex 0 0.4 0.5
- endloop
- endfacet
- facet normal -0.0789088 0.498222 -0.863452
- outer loop
- vertex 0 0.4 0.5
- vertex -0.000492458 4.73259 3
- vertex 0 4.73267 3
- endloop
- endfacet
- facet normal 0.0789107 0.498221 -0.863452
- outer loop
- vertex 1.46198 4.50111 3
- vertex 0 0.4 0.5
- vertex 0 4.73267 3
- endloop
- endfacet
- facet normal 0.0789089 0.498222 -0.863451
- outer loop
- vertex 0 0.4 0.5
- vertex 1.46198 4.50111 3
- vertex 0.123607 0.380423 0.5
- endloop
- endfacet
- facet normal 0.0789089 0.498222 -0.863451
- outer loop
- vertex 0.123607 0.380423 0.5
- vertex 1.46198 4.50111 3
- vertex 1.46248 4.50104 3
- endloop
- endfacet
- facet normal 0.229007 0.449452 -0.863451
- outer loop
- vertex 2.78135 3.82904 3
- vertex 0.123607 0.380423 0.5
- vertex 1.46248 4.50104 3
- endloop
- endfacet
- facet normal 0.229008 0.449451 -0.863452
- outer loop
- vertex 0.123607 0.380423 0.5
- vertex 2.78135 3.82904 3
- vertex 0.235114 0.323607 0.5
- endloop
- endfacet
- facet normal 0.229008 0.449451 -0.863452
- outer loop
- vertex 0.235114 0.323607 0.5
- vertex 2.78135 3.82904 3
- vertex 2.78179 3.82881 3
- endloop
- endfacet
- facet normal 0.356687 0.356687 -0.863452
- outer loop
- vertex 0.235114 0.323607 0.5
- vertex 2.78179 3.82881 3
- vertex 0.323607 0.235114 0.5
- endloop
- endfacet
- facet normal 0.356687 0.356687 -0.863452
- outer loop
- vertex 0.323607 0.235114 0.5
- vertex 2.78179 3.82881 3
- vertex 3.82881 2.78179 3
- endloop
- endfacet
- facet normal 0.449452 0.229007 -0.863452
- outer loop
- vertex 4.50081 1.46292 3
- vertex 0.323607 0.235114 0.5
- vertex 3.82881 2.78179 3
- endloop
- endfacet
- facet normal 0.449452 0.229008 -0.863451
- outer loop
- vertex 0.323607 0.235114 0.5
- vertex 4.50081 1.46292 3
- vertex 0.380423 0.123607 0.5
- endloop
- endfacet
- facet normal 0.449452 0.229008 -0.863451
- outer loop
- vertex 0.380423 0.123607 0.5
- vertex 4.50081 1.46292 3
- vertex 4.50104 1.46248 3
- endloop
- endfacet
- facet normal 0.498221 0.0789107 -0.863451
- outer loop
- vertex 4.73259 0.000492458 3
- vertex 0.380423 0.123607 0.5
- vertex 4.50104 1.46248 3
- endloop
- endfacet
- facet normal 0.498222 0.0789088 -0.863452
- outer loop
- vertex 0.380423 0.123607 0.5
- vertex 4.73259 0.000492458 3
- vertex 0.4 0 0.5
- endloop
- endfacet
- facet normal 0.498222 0.0789088 -0.863452
- outer loop
- vertex 0.4 0 0.5
- vertex 4.73259 0.000492458 3
- vertex 4.73267 0 3
- endloop
- endfacet
- facet normal 0.498221 -0.0789107 -0.863452
- outer loop
- vertex 4.50111 -1.46198 3
- vertex 0.4 0 0.5
- vertex 4.73267 0 3
- endloop
- endfacet
- facet normal 0.498222 -0.0789089 -0.863451
- outer loop
- vertex 0.380423 -0.123607 0.5
- vertex 0.4 0 0.5
- vertex 4.50104 -1.46248 3
- endloop
- endfacet
- facet normal 0.498222 -0.0789089 -0.863451
- outer loop
- vertex 4.50104 -1.46248 3
- vertex 0.4 0 0.5
- vertex 4.50111 -1.46198 3
- endloop
- endfacet
- facet normal 0.449452 -0.229007 -0.863451
- outer loop
- vertex 3.82904 -2.78135 3
- vertex 0.380423 -0.123607 0.5
- vertex 4.50104 -1.46248 3
- endloop
- endfacet
- facet normal 0.449451 -0.229008 -0.863452
- outer loop
- vertex 0.323607 -0.235114 0.5
- vertex 0.380423 -0.123607 0.5
- vertex 3.82881 -2.78179 3
- endloop
- endfacet
- facet normal 0.449451 -0.229008 -0.863452
- outer loop
- vertex 3.82881 -2.78179 3
- vertex 0.380423 -0.123607 0.5
- vertex 3.82904 -2.78135 3
- endloop
- endfacet
- facet normal 0.356687 -0.356687 -0.863452
- outer loop
- vertex 0.235114 -0.323607 0.5
- vertex 0.323607 -0.235114 0.5
- vertex 2.78179 -3.82881 3
- endloop
- endfacet
- facet normal 0.356687 -0.356687 -0.863452
- outer loop
- vertex 2.78179 -3.82881 3
- vertex 0.323607 -0.235114 0.5
- vertex 3.82881 -2.78179 3
- endloop
- endfacet
- facet normal 0.229007 -0.449452 -0.863452
- outer loop
- vertex 1.46292 -4.50081 3
- vertex 0.235114 -0.323607 0.5
- vertex 2.78179 -3.82881 3
- endloop
- endfacet
- facet normal 0.229008 -0.449452 -0.863451
- outer loop
- vertex 0.123607 -0.380423 0.5
- vertex 0.235114 -0.323607 0.5
- vertex 1.46248 -4.50104 3
- endloop
- endfacet
- facet normal 0.229008 -0.449452 -0.863451
- outer loop
- vertex 1.46248 -4.50104 3
- vertex 0.235114 -0.323607 0.5
- vertex 1.46292 -4.50081 3
- endloop
- endfacet
- facet normal 0.0789107 -0.498221 -0.863451
- outer loop
- vertex 1.46248 -4.50104 3
- vertex 0.000492458 -4.73259 3
- vertex 0.123607 -0.380423 0.5
- endloop
- endfacet
- facet normal 0.0789088 -0.498222 -0.863452
- outer loop
- vertex 0 -4.73267 3
- vertex 0 -0.4 0.5
- vertex 0.000492458 -4.73259 3
- endloop
- endfacet
- facet normal 0.0789088 -0.498222 -0.863452
- outer loop
- vertex 0.000492458 -4.73259 3
- vertex 0 -0.4 0.5
- vertex 0.123607 -0.380423 0.5
- endloop
- endfacet
- facet normal -0.0789107 -0.498221 -0.863452
- outer loop
- vertex 0 -4.73267 3
- vertex -1.46198 -4.50111 3
- vertex 0 -0.4 0.5
- endloop
- endfacet
- facet normal -0.0789089 -0.498222 -0.863451
- outer loop
- vertex -1.46248 -4.50104 3
- vertex -0.123607 -0.380423 0.5
- vertex -1.46198 -4.50111 3
- endloop
- endfacet
- facet normal -0.0789089 -0.498222 -0.863451
- outer loop
- vertex -1.46198 -4.50111 3
- vertex -0.123607 -0.380423 0.5
- vertex 0 -0.4 0.5
- endloop
- endfacet
- facet normal -0.229007 -0.449452 -0.863451
- outer loop
- vertex -1.46248 -4.50104 3
- vertex -2.78135 -3.82904 3
- vertex -0.123607 -0.380423 0.5
- endloop
- endfacet
- facet normal -0.229008 -0.449451 -0.863452
- outer loop
- vertex -2.78179 -3.82881 3
- vertex -0.235114 -0.323607 0.5
- vertex -2.78135 -3.82904 3
- endloop
- endfacet
- facet normal -0.229008 -0.449451 -0.863452
- outer loop
- vertex -2.78135 -3.82904 3
- vertex -0.235114 -0.323607 0.5
- vertex -0.123607 -0.380423 0.5
- endloop
- endfacet
- facet normal -0.356687 -0.356687 -0.863452
- outer loop
- vertex -3.82881 -2.78179 3
- vertex -0.323607 -0.235114 0.5
- vertex -2.78179 -3.82881 3
- endloop
- endfacet
- facet normal -0.356687 -0.356687 -0.863452
- outer loop
- vertex -2.78179 -3.82881 3
- vertex -0.323607 -0.235114 0.5
- vertex -0.235114 -0.323607 0.5
- endloop
- endfacet
- facet normal -0.449452 -0.229007 -0.863452
- outer loop
- vertex -3.82881 -2.78179 3
- vertex -4.50081 -1.46292 3
- vertex -0.323607 -0.235114 0.5
- endloop
- endfacet
- facet normal -0.449452 -0.229008 -0.863451
- outer loop
- vertex -4.50104 -1.46248 3
- vertex -0.380423 -0.123607 0.5
- vertex -4.50081 -1.46292 3
- endloop
- endfacet
- facet normal -0.449452 -0.229008 -0.863451
- outer loop
- vertex -4.50081 -1.46292 3
- vertex -0.380423 -0.123607 0.5
- vertex -0.323607 -0.235114 0.5
- endloop
- endfacet
- facet normal -0.498221 -0.0789107 -0.863451
- outer loop
- vertex -4.50104 -1.46248 3
- vertex -4.73259 -0.000492458 3
- vertex -0.380423 -0.123607 0.5
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex -3.22639 -2.34411 3.99
- vertex -3.23607 -2.35114 3.99
- vertex -2.35114 -3.23607 3.99
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex -2.34411 -3.22639 3.99
- vertex -3.22639 -2.34411 3.99
- vertex -2.35114 -3.23607 3.99
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex -1.23237 -3.79285 3.99
- vertex -2.34374 -3.22658 3.99
- vertex -1.23607 -3.80423 3.99
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex 0 -3.98804 3.99
- vertex -1.23196 -3.79292 3.99
- vertex 0 -4 3.99
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex 1.23237 -3.79285 3.99
- vertex 0.000410654 -3.98797 3.99
- vertex 1.23607 -3.80423 3.99
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex 2.34411 -3.22639 3.99
- vertex 1.23274 -3.79266 3.99
- vertex 2.35114 -3.23607 3.99
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex 3.22639 -2.34411 3.99
- vertex 2.34411 -3.22639 3.99
- vertex 3.23607 -2.35114 3.99
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex 3.79285 -1.23237 3.99
- vertex 3.22658 -2.34374 3.99
- vertex 3.80423 -1.23607 3.99
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex -2.34411 3.22639 3.99
- vertex -1.23274 3.79266 3.99
- vertex -1.23607 3.80423 3.99
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex -4 0 3.99
- vertex -3.98804 0 3.99
- vertex -3.80423 1.23607 3.99
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex -4 0 3.99
- vertex -3.80423 -1.23607 3.99
- vertex -3.98804 0 3.99
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex -3.22639 2.34411 3.99
- vertex -2.34411 3.22639 3.99
- vertex -2.35114 3.23607 3.99
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex -3.80423 1.23607 3.99
- vertex -3.79285 1.23237 3.99
- vertex -3.23607 2.35114 3.99
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex -3.80423 1.23607 3.99
- vertex -3.79292 1.23196 3.99
- vertex -3.79285 1.23237 3.99
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex -1.23237 3.79285 3.99
- vertex -0.000410654 3.98797 3.99
- vertex 0 4 3.99
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex -3.23607 2.35114 3.99
- vertex -3.22639 2.34411 3.99
- vertex -2.35114 3.23607 3.99
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex -3.23607 2.35114 3.99
- vertex -3.22658 2.34374 3.99
- vertex -3.22639 2.34411 3.99
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex -2.35114 3.23607 3.99
- vertex -2.34411 3.22639 3.99
- vertex -1.23607 3.80423 3.99
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex 0 3.98804 3.99
- vertex 1.23196 3.79292 3.99
- vertex 1.23607 3.80423 3.99
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex -1.23607 3.80423 3.99
- vertex -1.23237 3.79285 3.99
- vertex 0 4 3.99
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex -1.23607 3.80423 3.99
- vertex -1.23274 3.79266 3.99
- vertex -1.23237 3.79285 3.99
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex 1.23237 3.79285 3.99
- vertex 2.34374 3.22658 3.99
- vertex 2.35114 3.23607 3.99
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex 0 4 3.99
- vertex 0 3.98804 3.99
- vertex 1.23607 3.80423 3.99
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex 0 4 3.99
- vertex -0.000410654 3.98797 3.99
- vertex 0 3.98804 3.99
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex 2.34411 3.22639 3.99
- vertex 3.22639 2.34411 3.99
- vertex 3.23607 2.35114 3.99
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex 1.23607 3.80423 3.99
- vertex 1.23237 3.79285 3.99
- vertex 2.35114 3.23607 3.99
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex 1.23607 3.80423 3.99
- vertex 1.23196 3.79292 3.99
- vertex 1.23237 3.79285 3.99
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex 2.35114 3.23607 3.99
- vertex 2.34411 3.22639 3.99
- vertex 3.23607 2.35114 3.99
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex 2.35114 3.23607 3.99
- vertex 2.34374 3.22658 3.99
- vertex 2.34411 3.22639 3.99
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex 3.23607 2.35114 3.99
- vertex 3.22639 2.34411 3.99
- vertex 3.80423 1.23607 3.99
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex 3.22639 2.34411 3.99
- vertex 3.79266 1.23274 3.99
- vertex 3.80423 1.23607 3.99
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex 3.79266 1.23274 3.99
- vertex 3.79285 1.23237 3.99
- vertex 3.80423 1.23607 3.99
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex 3.80423 1.23607 3.99
- vertex 3.98797 0.000410654 3.99
- vertex 4 0 3.99
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex 3.98797 0.000410654 3.99
- vertex 3.98804 0 3.99
- vertex 4 0 3.99
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex 4 0 3.99
- vertex 3.79292 -1.23196 3.99
- vertex 3.80423 -1.23607 3.99
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex 3.79292 -1.23196 3.99
- vertex 3.79285 -1.23237 3.99
- vertex 3.80423 -1.23607 3.99
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex 3.80423 -1.23607 3.99
- vertex 3.22658 -2.34374 3.99
- vertex 3.23607 -2.35114 3.99
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex 3.22658 -2.34374 3.99
- vertex 3.22639 -2.34411 3.99
- vertex 3.23607 -2.35114 3.99
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex 3.23607 -2.35114 3.99
- vertex 2.34411 -3.22639 3.99
- vertex 2.35114 -3.23607 3.99
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex 2.35114 -3.23607 3.99
- vertex 1.23274 -3.79266 3.99
- vertex 1.23607 -3.80423 3.99
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex 1.23274 -3.79266 3.99
- vertex 1.23237 -3.79285 3.99
- vertex 1.23607 -3.80423 3.99
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex 1.23607 -3.80423 3.99
- vertex 0.000410654 -3.98797 3.99
- vertex 0 -4 3.99
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex 0.000410654 -3.98797 3.99
- vertex 0 -3.98804 3.99
- vertex 0 -4 3.99
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex -3.79285 -1.23237 3.99
- vertex -3.98797 -0.000410654 3.99
- vertex -3.80423 -1.23607 3.99
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex 0 -4 3.99
- vertex -1.23196 -3.79292 3.99
- vertex -1.23607 -3.80423 3.99
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex -1.23196 -3.79292 3.99
- vertex -1.23237 -3.79285 3.99
- vertex -1.23607 -3.80423 3.99
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex -1.23607 -3.80423 3.99
- vertex -2.34374 -3.22658 3.99
- vertex -2.35114 -3.23607 3.99
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex -2.34374 -3.22658 3.99
- vertex -2.34411 -3.22639 3.99
- vertex -2.35114 -3.23607 3.99
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex -3.80423 -1.23607 3.99
- vertex -3.23607 -2.35114 3.99
- vertex -3.22639 -2.34411 3.99
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex -3.79285 -1.23237 3.99
- vertex -3.80423 -1.23607 3.99
- vertex -3.79266 -1.23274 3.99
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex 3.98804 0 3.99
- vertex 3.79292 -1.23196 3.99
- vertex 4 0 3.99
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex -3.79285 1.23237 3.99
- vertex -3.22658 2.34374 3.99
- vertex -3.23607 2.35114 3.99
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex -3.98804 0 3.99
- vertex -3.80423 -1.23607 3.99
- vertex -3.98797 -0.000410654 3.99
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex -3.98804 0 3.99
- vertex -3.79292 1.23196 3.99
- vertex -3.80423 1.23607 3.99
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex 3.79285 1.23237 3.99
- vertex 3.98797 0.000410654 3.99
- vertex 3.80423 1.23607 3.99
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex -3.22639 -2.34411 3.99
- vertex -3.79266 -1.23274 3.99
- vertex -3.80423 -1.23607 3.99
- endloop
- endfacet
- facet normal -0.987689 -0.156431 0
- outer loop
- vertex -0.4 0 0
- vertex -0.380423 -0.123607 0
- vertex -0.4 0 0.5
- endloop
- endfacet
- facet normal -0.987689 -0.156431 0
- outer loop
- vertex -0.4 0 0.5
- vertex -0.380423 -0.123607 0
- vertex -0.380423 -0.123607 0.5
- endloop
- endfacet
- facet normal -0.987689 0.156431 0
- outer loop
- vertex -0.4 0 0
- vertex -0.4 0 0.5
- vertex -0.380423 0.123607 0
- endloop
- endfacet
- facet normal -0.987689 0.156431 0
- outer loop
- vertex -0.380423 0.123607 0
- vertex -0.4 0 0.5
- vertex -0.380423 0.123607 0.5
- endloop
- endfacet
- facet normal -0.891005 -0.453993 0
- outer loop
- vertex -0.380423 -0.123607 0
- vertex -0.323607 -0.235114 0
- vertex -0.380423 -0.123607 0.5
- endloop
- endfacet
- facet normal -0.891005 -0.453993 0
- outer loop
- vertex -0.380423 -0.123607 0.5
- vertex -0.323607 -0.235114 0
- vertex -0.323607 -0.235114 0.5
- endloop
- endfacet
- facet normal -0.891005 0.453993 0
- outer loop
- vertex -0.380423 0.123607 0
- vertex -0.380423 0.123607 0.5
- vertex -0.323607 0.235114 0
- endloop
- endfacet
- facet normal -0.891005 0.453993 0
- outer loop
- vertex -0.323607 0.235114 0
- vertex -0.380423 0.123607 0.5
- vertex -0.323607 0.235114 0.5
- endloop
- endfacet
- facet normal -0.707107 0.707107 0
- outer loop
- vertex -0.323607 0.235114 0
- vertex -0.323607 0.235114 0.5
- vertex -0.235114 0.323607 0
- endloop
- endfacet
- facet normal -0.707107 0.707107 0
- outer loop
- vertex -0.235114 0.323607 0
- vertex -0.323607 0.235114 0.5
- vertex -0.235114 0.323607 0.5
- endloop
- endfacet
- facet normal -0.453993 0.891005 0
- outer loop
- vertex -0.235114 0.323607 0
- vertex -0.235114 0.323607 0.5
- vertex -0.123607 0.380423 0
- endloop
- endfacet
- facet normal -0.453993 0.891005 0
- outer loop
- vertex -0.123607 0.380423 0
- vertex -0.235114 0.323607 0.5
- vertex -0.123607 0.380423 0.5
- endloop
- endfacet
- facet normal -0.156431 0.987689 0
- outer loop
- vertex -0.123607 0.380423 0
- vertex -0.123607 0.380423 0.5
- vertex 0 0.4 0
- endloop
- endfacet
- facet normal -0.156431 0.987689 0
- outer loop
- vertex 0 0.4 0
- vertex -0.123607 0.380423 0.5
- vertex 0 0.4 0.5
- endloop
- endfacet
- facet normal 0.156431 0.987689 0
- outer loop
- vertex 0 0.4 0
- vertex 0 0.4 0.5
- vertex 0.123607 0.380423 0
- endloop
- endfacet
- facet normal 0.156431 0.987689 0
- outer loop
- vertex 0.123607 0.380423 0
- vertex 0 0.4 0.5
- vertex 0.123607 0.380423 0.5
- endloop
- endfacet
- facet normal 0.453993 0.891005 0
- outer loop
- vertex 0.123607 0.380423 0
- vertex 0.123607 0.380423 0.5
- vertex 0.235114 0.323607 0
- endloop
- endfacet
- facet normal 0.453993 0.891005 0
- outer loop
- vertex 0.235114 0.323607 0
- vertex 0.123607 0.380423 0.5
- vertex 0.235114 0.323607 0.5
- endloop
- endfacet
- facet normal 0.707107 0.707107 0
- outer loop
- vertex 0.235114 0.323607 0
- vertex 0.235114 0.323607 0.5
- vertex 0.323607 0.235114 0
- endloop
- endfacet
- facet normal 0.707107 0.707107 0
- outer loop
- vertex 0.323607 0.235114 0
- vertex 0.235114 0.323607 0.5
- vertex 0.323607 0.235114 0.5
- endloop
- endfacet
- facet normal 0.891005 0.453993 0
- outer loop
- vertex 0.380423 0.123607 0
- vertex 0.323607 0.235114 0
- vertex 0.323607 0.235114 0.5
- endloop
- endfacet
- facet normal 0.891005 0.453993 0
- outer loop
- vertex 0.380423 0.123607 0.5
- vertex 0.380423 0.123607 0
- vertex 0.323607 0.235114 0.5
- endloop
- endfacet
- facet normal 0.987689 0.156431 0
- outer loop
- vertex 0.4 0 0
- vertex 0.380423 0.123607 0
- vertex 0.380423 0.123607 0.5
- endloop
- endfacet
- facet normal 0.987689 0.156431 0
- outer loop
- vertex 0.4 0 0.5
- vertex 0.4 0 0
- vertex 0.380423 0.123607 0.5
- endloop
- endfacet
- facet normal 0.987689 -0.156431 0
- outer loop
- vertex 0.380423 -0.123607 0.5
- vertex 0.380423 -0.123607 0
- vertex 0.4 0 0
- endloop
- endfacet
- facet normal 0.987689 -0.156431 0
- outer loop
- vertex 0.4 0 0.5
- vertex 0.380423 -0.123607 0.5
- vertex 0.4 0 0
- endloop
- endfacet
- facet normal 0.891005 -0.453993 0
- outer loop
- vertex 0.323607 -0.235114 0.5
- vertex 0.323607 -0.235114 0
- vertex 0.380423 -0.123607 0
- endloop
- endfacet
- facet normal 0.891005 -0.453993 0
- outer loop
- vertex 0.380423 -0.123607 0.5
- vertex 0.323607 -0.235114 0.5
- vertex 0.380423 -0.123607 0
- endloop
- endfacet
- facet normal 0.707107 -0.707107 0
- outer loop
- vertex 0.235114 -0.323607 0.5
- vertex 0.235114 -0.323607 0
- vertex 0.323607 -0.235114 0
- endloop
- endfacet
- facet normal 0.707107 -0.707107 0
- outer loop
- vertex 0.323607 -0.235114 0.5
- vertex 0.235114 -0.323607 0.5
- vertex 0.323607 -0.235114 0
- endloop
- endfacet
- facet normal 0.453993 -0.891005 0
- outer loop
- vertex 0.123607 -0.380423 0.5
- vertex 0.123607 -0.380423 0
- vertex 0.235114 -0.323607 0
- endloop
- endfacet
- facet normal 0.453993 -0.891005 0
- outer loop
- vertex 0.235114 -0.323607 0.5
- vertex 0.123607 -0.380423 0.5
- vertex 0.235114 -0.323607 0
- endloop
- endfacet
- facet normal 0.156431 -0.987689 0
- outer loop
- vertex 0 -0.4 0.5
- vertex 0 -0.4 0
- vertex 0.123607 -0.380423 0
- endloop
- endfacet
- facet normal 0.156431 -0.987689 0
- outer loop
- vertex 0.123607 -0.380423 0.5
- vertex 0 -0.4 0.5
- vertex 0.123607 -0.380423 0
- endloop
- endfacet
- facet normal -0.156431 -0.987689 0
- outer loop
- vertex -0.123607 -0.380423 0.5
- vertex -0.123607 -0.380423 0
- vertex 0 -0.4 0
- endloop
- endfacet
- facet normal -0.156431 -0.987689 0
- outer loop
- vertex 0 -0.4 0.5
- vertex -0.123607 -0.380423 0.5
- vertex 0 -0.4 0
- endloop
- endfacet
- facet normal -0.453993 -0.891005 0
- outer loop
- vertex -0.235114 -0.323607 0.5
- vertex -0.235114 -0.323607 0
- vertex -0.123607 -0.380423 0
- endloop
- endfacet
- facet normal -0.453993 -0.891005 0
- outer loop
- vertex -0.123607 -0.380423 0.5
- vertex -0.235114 -0.323607 0.5
- vertex -0.123607 -0.380423 0
- endloop
- endfacet
- facet normal -0.707107 -0.707107 0
- outer loop
- vertex -0.323607 -0.235114 0.5
- vertex -0.323607 -0.235114 0
- vertex -0.235114 -0.323607 0
- endloop
- endfacet
- facet normal -0.707107 -0.707107 0
- outer loop
- vertex -0.235114 -0.323607 0.5
- vertex -0.323607 -0.235114 0.5
- vertex -0.235114 -0.323607 0
- endloop
- endfacet
- facet normal 0.638156 -0.101074 0.763243
- outer loop
- vertex -0.4 0 0.99
- vertex -3.79292 1.23196 3.99
- vertex -3.98804 0 3.99
- endloop
- endfacet
- facet normal 0.638156 0.101072 0.763244
- outer loop
- vertex -3.98797 -0.000410654 3.99
- vertex -0.380423 -0.123607 0.99
- vertex -0.4 0 0.99
- endloop
- endfacet
- facet normal 0.638156 0.101072 0.763244
- outer loop
- vertex -3.98804 0 3.99
- vertex -3.98797 -0.000410654 3.99
- vertex -0.4 0 0.99
- endloop
- endfacet
- facet normal 0.638156 0.101074 0.763243
- outer loop
- vertex -3.79285 -1.23237 3.99
- vertex -0.380423 -0.123607 0.99
- vertex -3.98797 -0.000410654 3.99
- endloop
- endfacet
- facet normal 0.575689 0.29333 0.763243
- outer loop
- vertex -3.79266 -1.23274 3.99
- vertex -0.323607 -0.235114 0.99
- vertex -0.380423 -0.123607 0.99
- endloop
- endfacet
- facet normal 0.575689 0.29333 0.763243
- outer loop
- vertex -3.79285 -1.23237 3.99
- vertex -3.79266 -1.23274 3.99
- vertex -0.380423 -0.123607 0.99
- endloop
- endfacet
- facet normal 0.575689 0.293328 0.763243
- outer loop
- vertex -3.22639 -2.34411 3.99
- vertex -0.323607 -0.235114 0.99
- vertex -3.79266 -1.23274 3.99
- endloop
- endfacet
- facet normal 0.456869 0.456869 0.763243
- outer loop
- vertex -2.34411 -3.22639 3.99
- vertex -0.235114 -0.323607 0.99
- vertex -0.323607 -0.235114 0.99
- endloop
- endfacet
- facet normal 0.456869 0.456869 0.763243
- outer loop
- vertex -3.22639 -2.34411 3.99
- vertex -2.34411 -3.22639 3.99
- vertex -0.323607 -0.235114 0.99
- endloop
- endfacet
- facet normal 0.29333 0.575688 0.763244
- outer loop
- vertex -2.34374 -3.22658 3.99
- vertex -0.123607 -0.380423 0.99
- vertex -0.235114 -0.323607 0.99
- endloop
- endfacet
- facet normal 0.29333 0.575688 0.763244
- outer loop
- vertex -2.34411 -3.22639 3.99
- vertex -2.34374 -3.22658 3.99
- vertex -0.235114 -0.323607 0.99
- endloop
- endfacet
- facet normal 0.293328 0.575689 0.763243
- outer loop
- vertex -1.23237 -3.79285 3.99
- vertex -0.123607 -0.380423 0.99
- vertex -2.34374 -3.22658 3.99
- endloop
- endfacet
- facet normal 0.101072 0.638157 0.763243
- outer loop
- vertex -1.23196 -3.79292 3.99
- vertex 0 -0.4 0.99
- vertex -0.123607 -0.380423 0.99
- endloop
- endfacet
- facet normal 0.101072 0.638157 0.763243
- outer loop
- vertex -1.23237 -3.79285 3.99
- vertex -1.23196 -3.79292 3.99
- vertex -0.123607 -0.380423 0.99
- endloop
- endfacet
- facet normal 0.101074 0.638156 0.763243
- outer loop
- vertex 0 -3.98804 3.99
- vertex 0 -0.4 0.99
- vertex -1.23196 -3.79292 3.99
- endloop
- endfacet
- facet normal -0.101072 0.638156 0.763244
- outer loop
- vertex 0.000410654 -3.98797 3.99
- vertex 0.123607 -0.380423 0.99
- vertex 0 -0.4 0.99
- endloop
- endfacet
- facet normal -0.101072 0.638156 0.763244
- outer loop
- vertex 0 -3.98804 3.99
- vertex 0.000410654 -3.98797 3.99
- vertex 0 -0.4 0.99
- endloop
- endfacet
- facet normal -0.101074 0.638156 0.763243
- outer loop
- vertex 1.23237 -3.79285 3.99
- vertex 0.123607 -0.380423 0.99
- vertex 0.000410654 -3.98797 3.99
- endloop
- endfacet
- facet normal -0.29333 0.575689 0.763243
- outer loop
- vertex 1.23237 -3.79285 3.99
- vertex 1.23274 -3.79266 3.99
- vertex 0.235114 -0.323607 0.99
- endloop
- endfacet
- facet normal -0.29333 0.575689 0.763243
- outer loop
- vertex 0.123607 -0.380423 0.99
- vertex 1.23237 -3.79285 3.99
- vertex 0.235114 -0.323607 0.99
- endloop
- endfacet
- facet normal -0.293328 0.575689 0.763243
- outer loop
- vertex 1.23274 -3.79266 3.99
- vertex 2.34411 -3.22639 3.99
- vertex 0.235114 -0.323607 0.99
- endloop
- endfacet
- facet normal -0.456869 0.456869 0.763243
- outer loop
- vertex 2.34411 -3.22639 3.99
- vertex 3.22639 -2.34411 3.99
- vertex 0.323607 -0.235114 0.99
- endloop
- endfacet
- facet normal -0.456869 0.456869 0.763243
- outer loop
- vertex 0.235114 -0.323607 0.99
- vertex 2.34411 -3.22639 3.99
- vertex 0.323607 -0.235114 0.99
- endloop
- endfacet
- facet normal -0.575688 0.29333 0.763244
- outer loop
- vertex 3.22639 -2.34411 3.99
- vertex 3.22658 -2.34374 3.99
- vertex 0.380423 -0.123607 0.99
- endloop
- endfacet
- facet normal -0.575688 0.29333 0.763244
- outer loop
- vertex 0.323607 -0.235114 0.99
- vertex 3.22639 -2.34411 3.99
- vertex 0.380423 -0.123607 0.99
- endloop
- endfacet
- facet normal -0.575689 0.293328 0.763243
- outer loop
- vertex 3.22658 -2.34374 3.99
- vertex 3.79285 -1.23237 3.99
- vertex 0.380423 -0.123607 0.99
- endloop
- endfacet
- facet normal -0.638157 0.101072 0.763243
- outer loop
- vertex 3.79285 -1.23237 3.99
- vertex 3.79292 -1.23196 3.99
- vertex 0.4 0 0.99
- endloop
- endfacet
- facet normal -0.638157 0.101072 0.763243
- outer loop
- vertex 0.380423 -0.123607 0.99
- vertex 3.79285 -1.23237 3.99
- vertex 0.4 0 0.99
- endloop
- endfacet
- facet normal -0.638156 0.101074 0.763243
- outer loop
- vertex 3.79292 -1.23196 3.99
- vertex 3.98804 0 3.99
- vertex 0.4 0 0.99
- endloop
- endfacet
- facet normal -0.638156 -0.101072 0.763244
- outer loop
- vertex 0.4 0 0.99
- vertex 3.98804 0 3.99
- vertex 3.98797 0.000410654 3.99
- endloop
- endfacet
- facet normal -0.638156 -0.101072 0.763244
- outer loop
- vertex 0.380423 0.123607 0.99
- vertex 0.4 0 0.99
- vertex 3.98797 0.000410654 3.99
- endloop
- endfacet
- facet normal -0.638156 -0.101074 0.763243
- outer loop
- vertex 3.98797 0.000410654 3.99
- vertex 3.79285 1.23237 3.99
- vertex 0.380423 0.123607 0.99
- endloop
- endfacet
- facet normal -0.575689 -0.29333 0.763243
- outer loop
- vertex 0.380423 0.123607 0.99
- vertex 3.79285 1.23237 3.99
- vertex 3.79266 1.23274 3.99
- endloop
- endfacet
- facet normal -0.575689 -0.29333 0.763243
- outer loop
- vertex 0.323607 0.235114 0.99
- vertex 0.380423 0.123607 0.99
- vertex 3.79266 1.23274 3.99
- endloop
- endfacet
- facet normal -0.575689 -0.293328 0.763243
- outer loop
- vertex 3.79266 1.23274 3.99
- vertex 3.22639 2.34411 3.99
- vertex 0.323607 0.235114 0.99
- endloop
- endfacet
- facet normal -0.456869 -0.456869 0.763243
- outer loop
- vertex 0.323607 0.235114 0.99
- vertex 3.22639 2.34411 3.99
- vertex 2.34411 3.22639 3.99
- endloop
- endfacet
- facet normal -0.456869 -0.456869 0.763243
- outer loop
- vertex 0.235114 0.323607 0.99
- vertex 0.323607 0.235114 0.99
- vertex 2.34411 3.22639 3.99
- endloop
- endfacet
- facet normal -0.29333 -0.575688 0.763244
- outer loop
- vertex 0.235114 0.323607 0.99
- vertex 2.34411 3.22639 3.99
- vertex 2.34374 3.22658 3.99
- endloop
- endfacet
- facet normal -0.29333 -0.575688 0.763244
- outer loop
- vertex 0.123607 0.380423 0.99
- vertex 0.235114 0.323607 0.99
- vertex 2.34374 3.22658 3.99
- endloop
- endfacet
- facet normal -0.293328 -0.575689 0.763243
- outer loop
- vertex 2.34374 3.22658 3.99
- vertex 1.23237 3.79285 3.99
- vertex 0.123607 0.380423 0.99
- endloop
- endfacet
- facet normal -0.101072 -0.638157 0.763243
- outer loop
- vertex 0.123607 0.380423 0.99
- vertex 1.23237 3.79285 3.99
- vertex 1.23196 3.79292 3.99
- endloop
- endfacet
- facet normal -0.101072 -0.638157 0.763243
- outer loop
- vertex 0 0.4 0.99
- vertex 0.123607 0.380423 0.99
- vertex 1.23196 3.79292 3.99
- endloop
- endfacet
- facet normal -0.101074 -0.638156 0.763243
- outer loop
- vertex 1.23196 3.79292 3.99
- vertex 0 3.98804 3.99
- vertex 0 0.4 0.99
- endloop
- endfacet
- facet normal 0.101072 -0.638156 0.763244
- outer loop
- vertex 0 0.4 0.99
- vertex 0 3.98804 3.99
- vertex -0.000410654 3.98797 3.99
- endloop
- endfacet
- facet normal 0.101072 -0.638156 0.763244
- outer loop
- vertex -0.123607 0.380423 0.99
- vertex 0 0.4 0.99
- vertex -0.000410654 3.98797 3.99
- endloop
- endfacet
- facet normal 0.101074 -0.638156 0.763243
- outer loop
- vertex -0.123607 0.380423 0.99
- vertex -0.000410654 3.98797 3.99
- vertex -1.23237 3.79285 3.99
- endloop
- endfacet
- facet normal 0.29333 -0.575689 0.763243
- outer loop
- vertex -0.235114 0.323607 0.99
- vertex -0.123607 0.380423 0.99
- vertex -1.23237 3.79285 3.99
- endloop
- endfacet
- facet normal 0.29333 -0.575689 0.763243
- outer loop
- vertex -1.23274 3.79266 3.99
- vertex -0.235114 0.323607 0.99
- vertex -1.23237 3.79285 3.99
- endloop
- endfacet
- facet normal 0.293328 -0.575689 0.763243
- outer loop
- vertex -0.235114 0.323607 0.99
- vertex -1.23274 3.79266 3.99
- vertex -2.34411 3.22639 3.99
- endloop
- endfacet
- facet normal 0.456869 -0.456869 0.763243
- outer loop
- vertex -0.323607 0.235114 0.99
- vertex -0.235114 0.323607 0.99
- vertex -2.34411 3.22639 3.99
- endloop
- endfacet
- facet normal 0.456869 -0.456869 0.763243
- outer loop
- vertex -3.22639 2.34411 3.99
- vertex -0.323607 0.235114 0.99
- vertex -2.34411 3.22639 3.99
- endloop
- endfacet
- facet normal 0.575688 -0.29333 0.763244
- outer loop
- vertex -0.380423 0.123607 0.99
- vertex -0.323607 0.235114 0.99
- vertex -3.22639 2.34411 3.99
- endloop
- endfacet
- facet normal 0.575688 -0.29333 0.763244
- outer loop
- vertex -3.22658 2.34374 3.99
- vertex -0.380423 0.123607 0.99
- vertex -3.22639 2.34411 3.99
- endloop
- endfacet
- facet normal 0.575689 -0.293328 0.763243
- outer loop
- vertex -0.380423 0.123607 0.99
- vertex -3.22658 2.34374 3.99
- vertex -3.79285 1.23237 3.99
- endloop
- endfacet
- facet normal 0.638157 -0.101072 0.763243
- outer loop
- vertex -0.4 0 0.99
- vertex -0.380423 0.123607 0.99
- vertex -3.79285 1.23237 3.99
- endloop
- endfacet
- facet normal 0.638157 -0.101072 0.763243
- outer loop
- vertex -3.79292 1.23196 3.99
- vertex -0.4 0 0.99
- vertex -3.79285 1.23237 3.99
- endloop
- endfacet
- facet normal 0 0 -1
- outer loop
- vertex -0.4 0 0
- vertex -0.380423 0.123607 0
- vertex -0.380423 -0.123607 0
- endloop
- endfacet
- facet normal 0 0 -1
- outer loop
- vertex -0.380423 -0.123607 0
- vertex -0.380423 0.123607 0
- vertex -0.323607 0.235114 0
- endloop
- endfacet
- facet normal 0 0 -1
- outer loop
- vertex -0.380423 -0.123607 0
- vertex -0.323607 0.235114 0
- vertex -0.235114 0.323607 0
- endloop
- endfacet
- facet normal 0 0 -1
- outer loop
- vertex -0.380423 -0.123607 0
- vertex -0.235114 0.323607 0
- vertex -0.123607 0.380423 0
- endloop
- endfacet
- facet normal 0 0 -1
- outer loop
- vertex -0.380423 -0.123607 0
- vertex -0.123607 0.380423 0
- vertex 0 0.4 0
- endloop
- endfacet
- facet normal 0 0 -1
- outer loop
- vertex -0.380423 -0.123607 0
- vertex 0 0.4 0
- vertex 0.123607 0.380423 0
- endloop
- endfacet
- facet normal 0 0 -1
- outer loop
- vertex -0.380423 -0.123607 0
- vertex 0.123607 0.380423 0
- vertex 0.235114 0.323607 0
- endloop
- endfacet
- facet normal 0 0 -1
- outer loop
- vertex -0.380423 -0.123607 0
- vertex 0.235114 0.323607 0
- vertex 0.323607 0.235114 0
- endloop
- endfacet
- facet normal 0 0 -1
- outer loop
- vertex -0.380423 -0.123607 0
- vertex 0.323607 0.235114 0
- vertex 0.380423 0.123607 0
- endloop
- endfacet
- facet normal 0 0 -1
- outer loop
- vertex -0.380423 -0.123607 0
- vertex 0.380423 0.123607 0
- vertex 0.4 0 0
- endloop
- endfacet
- facet normal 0 0 -1
- outer loop
- vertex -0.380423 -0.123607 0
- vertex 0.4 0 0
- vertex 0.380423 -0.123607 0
- endloop
- endfacet
- facet normal 0 0 -1
- outer loop
- vertex -0.380423 -0.123607 0
- vertex 0.380423 -0.123607 0
- vertex 0.323607 -0.235114 0
- endloop
- endfacet
- facet normal 0 0 -1
- outer loop
- vertex -0.380423 -0.123607 0
- vertex 0.323607 -0.235114 0
- vertex 0.235114 -0.323607 0
- endloop
- endfacet
- facet normal 0 0 -1
- outer loop
- vertex -0.380423 -0.123607 0
- vertex 0.235114 -0.323607 0
- vertex 0.123607 -0.380423 0
- endloop
- endfacet
- facet normal 0 0 -1
- outer loop
- vertex -0.380423 -0.123607 0
- vertex 0.123607 -0.380423 0
- vertex 0 -0.4 0
- endloop
- endfacet
- facet normal 0 0 -1
- outer loop
- vertex -0.380423 -0.123607 0
- vertex 0 -0.4 0
- vertex -0.123607 -0.380423 0
- endloop
- endfacet
- facet normal 0 0 -1
- outer loop
- vertex -0.380423 -0.123607 0
- vertex -0.123607 -0.380423 0
- vertex -0.235114 -0.323607 0
- endloop
- endfacet
- facet normal 0 0 -1
- outer loop
- vertex -0.380423 -0.123607 0
- vertex -0.235114 -0.323607 0
- vertex -0.323607 -0.235114 0
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex -0.380423 -0.123607 0.99
- vertex -0.323607 -0.235114 0.99
- vertex -0.235114 -0.323607 0.99
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex 0 -0.4 0.99
- vertex -0.380423 -0.123607 0.99
- vertex -0.123607 -0.380423 0.99
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex -0.123607 -0.380423 0.99
- vertex -0.380423 -0.123607 0.99
- vertex -0.235114 -0.323607 0.99
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex 0.123607 -0.380423 0.99
- vertex -0.380423 -0.123607 0.99
- vertex 0 -0.4 0.99
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex 0.235114 -0.323607 0.99
- vertex -0.380423 -0.123607 0.99
- vertex 0.123607 -0.380423 0.99
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex 0.323607 -0.235114 0.99
- vertex -0.380423 -0.123607 0.99
- vertex 0.235114 -0.323607 0.99
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex 0.380423 -0.123607 0.99
- vertex -0.380423 -0.123607 0.99
- vertex 0.323607 -0.235114 0.99
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex 0.4 0 0.99
- vertex -0.380423 -0.123607 0.99
- vertex 0.380423 -0.123607 0.99
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex 0.380423 0.123607 0.99
- vertex -0.380423 -0.123607 0.99
- vertex 0.4 0 0.99
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex 0.323607 0.235114 0.99
- vertex -0.380423 -0.123607 0.99
- vertex 0.380423 0.123607 0.99
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex 0.235114 0.323607 0.99
- vertex -0.380423 -0.123607 0.99
- vertex 0.323607 0.235114 0.99
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex 0.123607 0.380423 0.99
- vertex -0.380423 -0.123607 0.99
- vertex 0.235114 0.323607 0.99
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex 0 0.4 0.99
- vertex -0.380423 -0.123607 0.99
- vertex 0.123607 0.380423 0.99
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex -0.123607 0.380423 0.99
- vertex -0.380423 -0.123607 0.99
- vertex 0 0.4 0.99
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex -0.235114 0.323607 0.99
- vertex -0.380423 -0.123607 0.99
- vertex -0.123607 0.380423 0.99
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex -0.323607 0.235114 0.99
- vertex -0.380423 -0.123607 0.99
- vertex -0.235114 0.323607 0.99
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex -0.380423 0.123607 0.99
- vertex -0.380423 -0.123607 0.99
- vertex -0.323607 0.235114 0.99
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex -0.4 0 0.99
- vertex -0.380423 -0.123607 0.99
- vertex -0.380423 0.123607 0.99
- endloop
- endfacet
-endsolid OpenSCAD_Model
+++ /dev/null
-
-#if (GLSL_VERSION == 120)
-#extension GL_EXT_gpu_shader4 : enable
-#endif
-
-// References:
-// http://www.geeks3d.com/20110405/fxaa-fast-approximate-anti-aliasing-demo-glsl-opengl-test-radeon-geforce/3/
-// http://jmonkeyengine.googlecode.com/svn-history/r9095/trunk/engine/src/core-data/Common/MatDefs/Post/
-
-uniform sampler2D m_Texture;
-uniform vec2 g_Resolution = vec2(800,600);
-
-//uniform float m_VxOffset;
-uniform float m_SpanMax = 8.0;
-uniform float m_ReduceMul = (1.0/8.0);
-
-varying vec2 texCoord;
-varying vec4 posPos;
-
-#define FxaaTex(t, p) texture2D(t, p)
-#define OffsetVec(a, b) ivec2(a, b)
-#if (GLSL_VERSION == 120)
- #define FxaaTexOff(t, p, o, r) texture2DLodOffset(t, p, 0.0, o)
-#endif
-#if (GLSL_VERSION == 130)
- #define FxaaTexOff(t, p, o, r) textureLodOffset(t, p, 0.0, o)
-#endif
-
-vec3 FxaaPixelShader(
- vec4 posPos, // Output of FxaaVertexShader interpolated across screen.
- sampler2D tex, // Input texture.
- vec2 rcpFrame) // Constant {1.0/frameWidth, 1.0/frameHeight}.
-{
-
- #define FXAA_REDUCE_MIN (1.0/128.0)
- //#define FXAA_REDUCE_MUL (1.0/8.0)
- //#define FXAA_SPAN_MAX 8.0
-
- vec3 rgbNW = FxaaTex(tex, posPos.zw).xyz;
- vec3 rgbNE = FxaaTexOff(tex, posPos.zw, OffsetVec(1,0), rcpFrame.xy).xyz;
- vec3 rgbSW = FxaaTexOff(tex, posPos.zw, OffsetVec(0,1), rcpFrame.xy).xyz;
- vec3 rgbSE = FxaaTexOff(tex, posPos.zw, OffsetVec(1,1), rcpFrame.xy).xyz;
-
- vec3 rgbM = FxaaTex(tex, posPos.xy).xyz;
-
- vec3 luma = vec3(0.299, 0.587, 0.114);
- float lumaNW = dot(rgbNW, luma);
- float lumaNE = dot(rgbNE, luma);
- float lumaSW = dot(rgbSW, luma);
- float lumaSE = dot(rgbSE, luma);
- float lumaM = dot(rgbM, luma);
-
- float lumaMin = min(lumaM, min(min(lumaNW, lumaNE), min(lumaSW, lumaSE)));
- float lumaMax = max(lumaM, max(max(lumaNW, lumaNE), max(lumaSW, lumaSE)));
-
- vec2 dir;
- dir.x = -((lumaNW + lumaNE) - (lumaSW + lumaSE));
- dir.y = ((lumaNW + lumaSW) - (lumaNE + lumaSE));
-
- float dirReduce = max(
- (lumaNW + lumaNE + lumaSW + lumaSE) * (0.25 * m_ReduceMul),
- FXAA_REDUCE_MIN);
- float rcpDirMin = 1.0/(min(abs(dir.x), abs(dir.y)) + dirReduce);
- dir = min(vec2( m_SpanMax, m_SpanMax),
- max(vec2(-m_SpanMax, -m_SpanMax),
- dir * rcpDirMin)) * rcpFrame.xy;
-
- vec3 rgbA = (1.0/2.0) * (
- FxaaTex(tex, posPos.xy + dir * vec2(1.0/3.0 - 0.5)).xyz +
- FxaaTex(tex, posPos.xy + dir * vec2(2.0/3.0 - 0.5)).xyz);
- vec3 rgbB = rgbA * (1.0/2.0) + (1.0/4.0) * (
- FxaaTex(tex, posPos.xy + dir * vec2(0.0/3.0 - 0.5)).xyz +
- FxaaTex(tex, posPos.xy + dir * vec2(3.0/3.0 - 0.5)).xyz);
-
- float lumaB = dot(rgbB, luma);
-
- if ((lumaB < lumaMin) || (lumaB > lumaMax))
- {
- return rgbA;
- }
- else
- {
- return rgbB;
- }
-}
-
-void main()
-{
- vec2 rcpFrame = vec2(1.0) / g_Resolution;
- gl_FragColor = vec4(FxaaPixelShader(posPos, m_Texture, rcpFrame), 1.0);
-// gl_FragColor.g *= 2;
-}
+++ /dev/null
-
-//uniform mat4 g_WorldViewProjectionMatrix;
-uniform vec2 g_Resolution = vec2(800,600);
-uniform float m_SubPixelShift = 1.0 / 4.0;
-
-varying vec2 texCoord;
-varying vec4 posPos;
-
-void main() {
- gl_Position = ftransform();
- gl_TexCoord[0] = gl_MultiTexCoord0;
- texCoord = gl_MultiTexCoord0.xy;
- vec2 rcpFrame = vec2(1.0) / g_Resolution;
- posPos.xy = texCoord;
- posPos.zw = texCoord - (rcpFrame * vec2(0.5 + m_SubPixelShift));
-}
+++ /dev/null
-uniform sampler2DShadow shadowMap ;
-
-// This define the value to move one pixel left or right
-uniform vec2 pixelOffset = vec2(1.0 / 1024.0, 1.0 / 1024.0);
-uniform sampler2D tex0;
-varying vec2 texCoord;
-
-varying vec4 ShadowCoord;
-
-
-float lookup( vec2 offSet)
-{
- // Values are multiplied by ShadowCoord.w because shadow2DProj does a W division for us.
- return shadow2DProj(shadowMap,
- ShadowCoord + vec4(
- offSet.x * pixelOffset.x * ShadowCoord.w,
- offSet.y * pixelOffset.y * ShadowCoord.w,
- 0.05, 0.0) ).w;
-}
-
-void main()
-{
- // Used to lower moiré pattern and self-shadowing
- //shadowCoordinateWdivide.z += ;
-
- float shadow = 0.0;
-
- // Avoid counter shadow
- if (ShadowCoord.w > 1.0) {
- // Simple lookup, no PCF
- //shadow = lookup(vec2(0.0,0.0));
-
- // 8x8 kernel PCF
- /*
- float x,y;
- for (y = -3.5 ; y <=3.5 ; y+=1.0)
- for (x = -3.5 ; x <=3.5 ; x+=1.0)
- shadow += lookup(vec2(x,y));
- shadow /= 64.0 ;
- */
-
- // 8x8 PCF wide kernel (step is 10 instead of 1)
- /*
- float x,y;
- for (y = -30.5 ; y <=30.5 ; y+=10.0)
- for (x = -30.5 ; x <=30.5 ; x+=10.0)
- shadow += lookup(vec2(x,y));
- shadow /= 64.0 ;
- */
-
- // 4x4 kernel PCF
- /*
- float x,y;
- for (y = -1.5 ; y <=1.5 ; y+=1.0)
- for (x = -1.5 ; x <=1.5 ; x+=1.0)
- shadow += lookup(vec2(x,y));
- shadow /= 16.0 ;
- */
- // 4x4 PCF wide kernel (step is 10 instead of 1)
-
- float x,y;
- for (y = -10.5 ; y <=10.5 ; y+=10.0)
- for (x = -10.5 ; x <=10.5 ; x+=10.0)
- shadow += lookup(vec2(x,y));
- shadow /= 16.0 ;
-
-
- // 4x4 PCF dithered
- /*
- // use modulo to vary the sample pattern
- vec2 o = mod(floor(gl_FragCoord.xy), 2.0);
-
- shadow += lookup(vec2(-1.5, 1.5) + o);
- shadow += lookup(vec2( 0.5, 1.5) + o);
- shadow += lookup(vec2(-1.5, -0.5) + o);
- shadow += lookup(vec2( 0.5, -0.5) + o);
- shadow *= 0.25 ;
- */
- }
- vec4 c = (shadow + 0.0) * gl_Color;
- gl_FragColor = mix(texture2D(tex0, texCoord), vec4(0.0,0.0,0.0,0.9), 0.8-shadow);
-}
+++ /dev/null
-// Used for shadow lookup
-uniform mat4 shadowMatrix;
-varying vec4 ShadowCoord;
-varying vec2 texCoord;
-
-void main()
-{
- ShadowCoord= shadowMatrix * gl_Vertex;
-
- gl_Position = ftransform();
- gl_TexCoord[0] = gl_MultiTexCoord0;
- gl_FrontColor = gl_Color;
- texCoord = gl_MultiTexCoord0.xy;
-}
-
+++ /dev/null
-#ifndef __CONFIGURATION_H
-#define __CONFIGURATION_H
-
-// This configurtion file contains the basic settings.
-// Advanced settings can be found in Configuration_adv.h
-// BASIC SETTINGS: select your board type, temperature sensor type, axis scaling, and endstop configuration
-
-//User specified version info of THIS file to display in [Pronterface, etc] terminal window during startup.
-//Implementation of an idea by Prof Braino to inform user that any changes made
-//to THIS file by the user have been successfully uploaded into firmware.
-#define STRING_VERSION_CONFIG_H "2012-02-25" //Personal revision number for changes to THIS file.
-#define STRING_CONFIG_H_AUTHOR "erik" //Who made the changes.
-
-// This determines the communication speed of the printer
-//#define BAUDRATE 250000
-#define BAUDRATE 115200
-
-//// The following define selects which electronics board you have. Please choose the one that matches your setup
-// Gen7 custom (Alfons3 Version) = 10 "https://github.com/Alfons3/Generation_7_Electronics"
-// Gen7 v1.1, v1.2 = 11
-// Gen7 v1.3 = 12
-// Gen7 v1.4 = 13
-// MEGA/RAMPS up to 1.2 = 3
-// RAMPS 1.3 = 33 (Power outputs: Extruder, Bed, Fan)
-// RAMPS 1.3 = 34 (Power outputs: Extruder0, Extruder1, Bed)
-// Gen6 = 5
-// Gen6 deluxe = 51
-// Sanguinololu 1.2 and above = 62
-// Ultimaker = 7
-// Teensylu = 8
-// Gen3+ =9
-
-#ifndef MOTHERBOARD
-#define MOTHERBOARD 7
-#endif
-
-//===========================================================================
-//=============================Thermal Settings ============================
-//===========================================================================
-
-//// Temperature sensor settings:
-// -2 is thermocouple with MAX6675 (only for sensor 0)
-// -1 is thermocouple with AD595
-// 0 is not used
-// 1 is 100k thermistor
-// 2 is 200k thermistor
-// 3 is mendel-parts thermistor
-// 4 is 10k thermistor !! do not use it for a hotend. It gives bad resolution at high temp. !!
-// 5 is ParCan supplied 104GT-2 100K
-// 6 is EPCOS 100k
-// 7 is 100k Honeywell thermistor 135-104LAG-J01
-
-#define TEMP_SENSOR_0 5
-#define TEMP_SENSOR_1 0
-#define TEMP_SENSOR_2 0
-#define TEMP_SENSOR_BED 5
-
-// Actual temperature must be close to target for this long before M109 returns success
-#define TEMP_RESIDENCY_TIME 10 // (seconds)
-#define TEMP_HYSTERESIS 3 // (degC) range of +/- temperatures considered "close" to the target one
-
-// The minimal temperature defines the temperature below which the heater will not be enabled It is used
-// to check that the wiring to the thermistor is not broken.
-// Otherwise this would lead to the heater being powered on all the time.
-#define HEATER_0_MINTEMP 5
-#define HEATER_1_MINTEMP 5
-#define HEATER_2_MINTEMP 5
-//#define BED_MINTEMP 5
-
-// When temperature exceeds max temp, your heater will be switched off.
-// This feature exists to protect your hotend from overheating accidentally, but *NOT* from thermistor short/failure!
-// You should use MINTEMP for thermistor short/failure protection.
-#define HEATER_0_MAXTEMP 275
-#define HEATER_1_MAXTEMP 275
-#define HEATER_2_MAXTEMP 275
-#define BED_MAXTEMP 150
-
-#define CONFIG_STEPPERS_TOSHIBA 1
-
-// PID settings:
-// Comment the following line to disable PID and enable bang-bang.
-//#define PIDTEMP
-#define PID_MAX 255 // limits current to nozzle; 255=full current
-#ifdef PIDTEMP
- //#define PID_DEBUG // Sends debug data to the serial port.
- //#define PID_OPENLOOP 1 // Puts PID in open loop. M104 sets the output power in %
- #define PID_INTEGRAL_DRIVE_MAX 255 //limit for the integral term
- #define K1 0.95 //smoothing factor withing the PID
- #define PID_dT ((16.0 * 8.0)/(F_CPU / 64.0 / 256.0)) //sampling period of the
-
-// If you are using a preconfigured hotend then you can use one of the value sets by uncommenting it
-// Ultimaker
- #define DEFAULT_Kp 22.2
- #define DEFAULT_Ki 1.08
- #define DEFAULT_Kd 114
-
-// Makergear
-// #define DEFAULT_Kp 7.0
-// #define DEFAULT_Ki 0.1
-// #define DEFAULT_Kd 12
-
-// Mendel Parts V9 on 12V
-// #define DEFAULT_Kp 63.0
-// #define DEFAULT_Ki 2.25
-// #define DEFAULT_Kd 440
-#endif // PIDTEMP
-
-/*
- * Use M303 to find suitable values for your hotend.
- *
- */
-#define PIDTEMP
- #define PID_INTEGRAL_DRIVE_MAX 255 //limit for the integral term
- #define K1 0.95 //smoothing factor withing the PID
- #define PID_dT ((16.0 * 8.0)/(F_CPU / 64.0 / 256.0)) //sampling period of the
- #define DEFAULT_Kp 29.03
- #define DEFAULT_Ki 1.83
- #define DEFAULT_Kd 115.24
-
-//this prevents dangerous Extruder moves, i.e. if the temperature is under the limit
-//can be software-disabled for whatever purposes by
-#define PREVENT_DANGEROUS_EXTRUDE
-#define EXTRUDE_MINTEMP 150
-#define EXTRUDE_MAXLENGTH (X_MAX_LENGTH+Y_MAX_LENGTH) //prevent extrusion of very large distances.
-
-//===========================================================================
-//=============================Mechanical Settings===========================
-//===========================================================================
-
-// Endstop Settings
-#define ENDSTOPPULLUPS // Comment this out (using // at the start of the line) to disable the endstop pullup resistors
-
-// The pullups are needed if you directly connect a mechanical endswitch between the signal and ground pins.
-const bool X_ENDSTOPS_INVERTING = true; // set to true to invert the logic of the endstops.
-const bool Y_ENDSTOPS_INVERTING = true; // set to true to invert the logic of the endstops.
-const bool Z_ENDSTOPS_INVERTING = true; // set to true to invert the logic of the endstops.
-#define DISABLE_MAX_ENDSTOPS
-
-// For Inverting Stepper Enable Pins (Active Low) use 0, Non Inverting (Active High) use 1
-#define X_ENABLE_ON 1
-#define Y_ENABLE_ON 1
-#define Z_ENABLE_ON 1
-#define E_ENABLE_ON 1 // For all extruders
-
-// Disables axis when it's not being used.
-#define DISABLE_X false
-#define DISABLE_Y false
-#define DISABLE_Z false
-#define DISABLE_E false // For all extruders
-
-#define INVERT_X_DIR false // for Mendel set to false, for Orca set to true
-#define INVERT_Y_DIR true // for Mendel set to true, for Orca set to false
-#define INVERT_Z_DIR false // for Mendel set to false, for Orca set to true
-#define INVERT_E0_DIR false // for direct drive extruder v9 set to true, for geared extruder set to false
-#define INVERT_E1_DIR false // for direct drive extruder v9 set to true, for geared extruder set to false
-#define INVERT_E2_DIR false // for direct drive extruder v9 set to true, for geared extruder set to false
-
-// ENDSTOP SETTINGS:
-// Sets direction of endstops when homing; 1=MAX, -1=MIN
-#define X_HOME_DIR -1
-#define Y_HOME_DIR -1
-#define Z_HOME_DIR -1
-
-#define min_software_endstops true //If true, axis won't move to coordinates less than HOME_POS.
-#define max_software_endstops true //If true, axis won't move to coordinates greater than the defined lengths below.
-#define X_MAX_LENGTH 205
-#define Y_MAX_LENGTH 205
-#define Z_MAX_LENGTH 120
-
-// The position of the homing switches. Use MAX_LENGTH * -0.5 if the center should be 0, 0, 0
-#define X_HOME_POS 0
-#define Y_HOME_POS 0
-#define Z_HOME_POS 0
-
-//// MOVEMENT SETTINGS
-#define NUM_AXIS 4 // The axis order in all axis related arrays is X, Y, Z, E
-#define HOMING_FEEDRATE {50*60, 50*60, 4*60, 0} // set the homing speeds (mm/min)
-
-// default settings
-//#define //DEFAULT_AXIS_STEPS_PER_UNIT {79.87, 79.87, 2566, 563,78} // Al's TVRR
-//#define DEFAULT_AXIS_STEPS_PER_UNIT {81.26, 80.01, 2561, 599.14} // Michel TVRR old
-#define DEFAULT_AXIS_STEPS_PER_UNIT {80.00, 79.84, 2560, 599.14} // Michel TVRR
-
-#ifndef DEFAULT_AXIS_STEPS_PER_UNIT
-#define DEFAULT_AXIS_STEPS_PER_UNIT {78.7402,78.7402,200*8/3,760*1.1} // default steps per unit for ultimaker
-#endif
-#define DEFAULT_MAX_FEEDRATE {500, 500, 5, 45} // (mm/sec)
-#define DEFAULT_MAX_ACCELERATION {9000,9000,100,10000} // X, Y, Z, E maximum start speed for accelerated moves. E default values are good for skeinforge 40+, for older versions raise them a lot.
-
-/* MICHEL: This has an impact on the "ripples" in print walls */
-#define DEFAULT_ACCELERATION 500 // X, Y, Z and E max acceleration in mm/s^2 for printing moves
-#define DEFAULT_RETRACT_ACCELERATION 3000 // X, Y, Z and E max acceleration in mm/s^2 for r retracts
-
-//
-#define DEFAULT_XYJERK 20.0 // (mm/sec)
-#define DEFAULT_ZJERK 0.4 // (mm/sec)
-#define DEFAULT_EJERK 5.0 // (mm/sec)
-
-//===========================================================================
-//=============================Additional Features===========================
-//===========================================================================
-
-// EEPROM
-// the microcontroller can store settings in the EEPROM, e.g. max velocity...
-// M500 - stores paramters in EEPROM
-// M501 - reads parameters from EEPROM (if you need reset them after you changed them temporarily).
-// M502 - reverts to the default "factory settings". You still need to store them in EEPROM afterwards if you want to.
-//define this to enable eeprom support
-//#define EEPROM_SETTINGS
-//to disable EEPROM Serial responses and decrease program space by ~1700 byte: comment this out:
-// please keep turned on if you can.
-//#define EEPROM_CHITCHAT
-
-//LCD and SD support
-//#define ULTRA_LCD //general lcd support, also 16x2
-//#define SDSUPPORT // Enable SD Card Support in Hardware Console
-
-//#define ULTIPANEL
-#ifdef ULTIPANEL
-// #define NEWPANEL //enable this if you have a click-encoder panel
- #define SDSUPPORT
- #define ULTRA_LCD
- #define LCD_WIDTH 20
- #define LCD_HEIGHT 4
-
-// Preheat Constants
- #define PLA_PREHEAT_HOTEND_TEMP 180
- #define PLA_PREHEAT_HPB_TEMP 70
- #define PLA_PREHEAT_FAN_SPEED 255 // Insert Value between 0 and 255
-
- #define ABS_PREHEAT_HOTEND_TEMP 240
- #define ABS_PREHEAT_HPB_TEMP 100
- #define ABS_PREHEAT_FAN_SPEED 255 // Insert Value between 0 and 255
-
-#else //no panel but just lcd
- #ifdef ULTRA_LCD
- #define LCD_WIDTH 16
- #define LCD_HEIGHT 2
- #endif
-#endif
-
-// M240 Triggers a camera by emulating a Canon RC-1 Remote
-// Data from: http://www.doc-diy.net/photo/rc-1_hacked/
-// #define PHOTOGRAPH_PIN 23
-
-#include "Configuration_adv.h"
-#include "thermistortables.h"
-
-#endif //__CONFIGURATION_H
+++ /dev/null
-#ifndef __CONFIGURATION_ADV_H
-#define __CONFIGURATION_ADV_H
-
-//===========================================================================
-//=============================Thermal Settings ============================
-//===========================================================================
-
-// Select one of these only to define how the bed temp is read.
-//
-//#define BED_LIMIT_SWITCHING
-#ifdef BED_LIMIT_SWITCHING
- #define BED_HYSTERESIS 2 //only disable heating if T>target+BED_HYSTERESIS and enable heating if T>target-BED_HYSTERESIS
-#endif
-#define BED_CHECK_INTERVAL 5000 //ms
-
-//// Heating sanity check:
-// This waits for the watchperiod in milliseconds whenever an M104 or M109 increases the target temperature
-// If the temperature has not increased at the end of that period, the target temperature is set to zero.
-// It can be reset with another M104/M109
-//#define WATCHPERIOD 20000 //20 seconds
-
-// Wait for Cooldown
-// This defines if the M109 call should not block if it is cooling down.
-// example: From a current temp of 220, you set M109 S200.
-// if CooldownNoWait is defined M109 will not wait for the cooldown to finish
-#define CooldownNoWait true
-
-#ifdef PIDTEMP
- // this adds an experimental additional term to the heatingpower, proportional to the extrusion speed.
- // if Kc is choosen well, the additional required power due to increased melting should be compensated.
- #define PID_ADD_EXTRUSION_RATE
- #ifdef PID_ADD_EXTRUSION_RATE
- #define DEFAULT_Kc (1) //heatingpower=Kc*(e_speed)
- #endif
-#endif
-
-
-//automatic temperature: The hot end target temperature is calculated by all the buffered lines of gcode.
-//The maximum buffered steps/sec of the extruder motor are called "se".
-//You enter the autotemp mode by a M109 S<mintemp> T<maxtemp> F<factor>
-// the target temperature is set to mintemp+factor*se[steps/sec] and limited by mintemp and maxtemp
-// you exit the value by any M109 without F*
-// Also, if the temperature is set to a value <mintemp, it is not changed by autotemp.
-// on an ultimaker, some initial testing worked with M109 S215 T260 F0.1 in the start.gcode
-//#define AUTOTEMP
-#ifdef AUTOTEMP
- #define AUTOTEMP_OLDWEIGHT 0.98
-#endif
-
-// extruder run-out prevention.
-//if the machine is idle, and the temperature over MINTEMP, every couple of SECONDS some filament is extruded
-//#define EXTRUDER_RUNOUT_PREVENT
-#define EXTRUDER_RUNOUT_MINTEMP 190
-#define EXTRUDER_RUNOUT_SECONDS 30.
-#define EXTRUDER_RUNOUT_ESTEPS 14. //mm filament
-#define EXTRUDER_RUNOUT_SPEED 1500. //extrusion speed
-#define EXTRUDER_RUNOUT_EXTRUDE 100
-
-//These defines help to calibrate the AD595 sensor in case you get wrong temperature measurements.
-//The measured temperature is defined as "actualTemp = (measuredTemp * TEMP_SENSOR_AD595_GAIN) + TEMP_SENSOR_AD595_OFFSET"
-#define TEMP_SENSOR_AD595_OFFSET 0.0
-#define TEMP_SENSOR_AD595_GAIN 1.0
-
-//This is for controlling a fan to cool down the stepper drivers
-//it will turn on when any driver is enabled
-//and turn off after the set amount of seconds from last driver being disabled again
-//#define CONTROLLERFAN_PIN 23 //Pin used for the fan to cool controller, comment out to disable this function
-#define CONTROLLERFAN_SEC 60 //How many seconds, after all motors were disabled, the fan should run
-
-//===========================================================================
-//=============================Mechanical Settings===========================
-//===========================================================================
-
-// This defines the number of extruders
-#define EXTRUDERS 1
-
-//#define ENDSTOPS_ONLY_FOR_HOMING // If defined the endstops will only be used for homing
-
-//#define Z_LATE_ENABLE // Enable Z the last moment. Needed if your Z driver overheats.
-
-//homing hits the endstop, then retracts by this distance, before it tries to slowly bump again:
-#define X_HOME_RETRACT_MM 5
-#define Y_HOME_RETRACT_MM 5
-#define Z_HOME_RETRACT_MM 1
-#define QUICK_HOME //if this is defined, if both x and y are to be homed, a diagonal move will be performed initially.
-
-#define AXIS_RELATIVE_MODES {false, false, false, false}
-
-#ifdef CONFIG_STEPPERS_TOSHIBA
-#define MAX_STEP_FREQUENCY 10000 // Max step frequency for Toshiba Stepper Controllers
-#else
-#define MAX_STEP_FREQUENCY 40000 // Max step frequency for Ultimaker (5000 pps / half step)
-#endif
-
-//default stepper release if idle
-#define DEFAULT_STEPPER_DEACTIVE_TIME 60
-
-#define DEFAULT_MINIMUMFEEDRATE 0.0 // minimum feedrate
-#define DEFAULT_MINTRAVELFEEDRATE 0.0
-
-// minimum time in microseconds that a movement needs to take if the buffer is emptied. Increase this number if you see blobs while printing high speed & high detail. It will slowdown on the detailed stuff.
-#define DEFAULT_MINSEGMENTTIME 20000 // Obsolete delete this
-
-// If defined the movements slow down when the look ahead buffer is only half full
-#define SLOWDOWN
-
-// Frequency limit
-// See nophead's blog for more info
-// Not working O
-//#define XY_FREQUENCY_LIMIT 15
-
-// Minimum planner junction speed. Sets the default minimum speed the planner plans for at the end
-// of the buffer and all stops. This should not be much greater than zero and should only be changed
-// if unwanted behavior is observed on a user's machine when running at very slow speeds.
-#define MINIMUM_PLANNER_SPEED 0.05// (mm/sec)
-
-//===========================================================================
-//=============================Additional Features===========================
-//===========================================================================
-
-
-#define SD_FINISHED_STEPPERRELEASE true //if sd support and the file is finished: disable steppers?
-#define SD_FINISHED_RELEASECOMMAND "M84 X Y Z E" // no z because of layer shift.
-
-// The hardware watchdog should halt the Microcontroller, in case the firmware gets stuck somewhere. However:
-// the Watchdog is not working well, so please only enable this for testing
-// this enables the watchdog interrupt.
-//#define USE_WATCHDOG
-//#ifdef USE_WATCHDOG
- // you cannot reboot on a mega2560 due to a bug in he bootloader. Hence, you have to reset manually, and this is done hereby:
-//#define RESET_MANUAL
-//#define WATCHDOG_TIMEOUT 4 //seconds
-//#endif
-
-// extruder advance constant (s2/mm3)
-//
-// advance (steps) = STEPS_PER_CUBIC_MM_E * EXTUDER_ADVANCE_K * cubic mm per second ^ 2
-//
-// hooke's law says: force = k * distance
-// bernoulli's priniciple says: v ^ 2 / 2 + g . h + pressure / density = constant
-// so: v ^ 2 is proportional to number of steps we advance the extruder
-//#define ADVANCE
-
-#ifdef ADVANCE
- #define EXTRUDER_ADVANCE_K .0
-
- #define D_FILAMENT 2.85
- #define STEPS_MM_E 836
- #define EXTRUTION_AREA (0.25 * D_FILAMENT * D_FILAMENT * 3.14159)
- #define STEPS_PER_CUBIC_MM_E (axis_steps_per_unit[E_AXIS]/ EXTRUTION_AREA)
-
-#endif // ADVANCE
-
-// A debugging feature to compare calculated vs performed steps, to see if steps are lost by the software.
-//#define DEBUG_STEPS
-
-// Arc interpretation settings:
-#define MM_PER_ARC_SEGMENT 1
-#define N_ARC_CORRECTION 25
-
-const int dropsegments=5; //everything with less than this number of steps will be ignored as move and joined with the next movement
-
-// If you are using a RAMPS board or cheap E-bay purchased boards that do not detect when an SD card is inserted
-// You can get round this by connecting a push button or single throw switch to the pin defined as SDCARDCARDDETECT
-// in the pins.h file. When using a push button pulling the pin to ground this will need inverted. This setting should
-// be commented out otherwise
-#define SDCARDDETECTINVERTED
-
-#ifdef ULTIPANEL
- #undef SDCARDDETECTINVERTED
-#endif
-//===========================================================================
-//=============================Buffers ============================
-//===========================================================================
-
-// The number of linear motions that can be in the plan at any give time.
-// THE BLOCK_BUFFER_SIZE NEEDS TO BE A POWER OF 2, i.g. 8,16,32 because shifts and ors are used to do the ringbuffering.
-#if defined SDSUPPORT
- #define BLOCK_BUFFER_SIZE 16 // SD,LCD,Buttons take more memory, block buffer needs to be smaller
-#else
- #define BLOCK_BUFFER_SIZE 16 // maximize block buffer
-#endif
-
-
-//The ASCII buffer for recieving from the serial:
-#define MAX_CMD_SIZE 96
-#define BUFSIZE 4
-
-//===========================================================================
-//============================= Define Defines ============================
-//===========================================================================
-
-#if TEMP_SENSOR_0 > 0
- #define THERMISTORHEATER_0 TEMP_SENSOR_0
- #define HEATER_0_USES_THERMISTOR
-#endif
-#if TEMP_SENSOR_1 > 0
- #define THERMISTORHEATER_1 TEMP_SENSOR_1
- #define HEATER_1_USES_THERMISTOR
-#endif
-#if TEMP_SENSOR_2 > 0
- #define THERMISTORHEATER_2 TEMP_SENSOR_2
- #define HEATER_2_USES_THERMISTOR
-#endif
-#if TEMP_SENSOR_BED > 0
- #define THERMISTORBED TEMP_SENSOR_BED
- #define BED_USES_THERMISTOR
-#endif
-#if TEMP_SENSOR_0 == -1
- #define HEATER_0_USES_AD595
-#endif
-#if TEMP_SENSOR_1 == -1
- #define HEATER_1_USES_AD595
-#endif
-#if TEMP_SENSOR_2 == -1
- #define HEATER_2_USES_AD595
-#endif
-#if TEMP_SENSOR_BED == -1
- #define BED_USES_AD595
-#endif
-#if TEMP_SENSOR_0 == -2
- #define HEATER_0_USES_MAX6675
-#endif
-#if TEMP_SENSOR_0 == 0
- #undef HEATER_0_MINTEMP
- #undef HEATER_0_MAXTEMP
-#endif
-#if TEMP_SENSOR_1 == 0
- #undef HEATER_1_MINTEMP
- #undef HEATER_1_MAXTEMP
-#endif
-#if TEMP_SENSOR_2 == 0
- #undef HEATER_2_MINTEMP
- #undef HEATER_2_MAXTEMP
-#endif
-#if TEMP_SENSOR_BED == 0
- #undef BED_MINTEMP
- #undef BED_MAXTEMP
-#endif
-
-
-#endif //__CONFIGURATION_ADV_H
+++ /dev/null
-:10000000FCC700000C941A080C941A080C941A08E7\r
-:100010000C941A080C941A080C941A080C941A08D8\r
-:100020000C941A080C941A080C941A080C941A08C8\r
-:100030000C941A080C947F39FDC70000FBC7000020\r
-:10004000F9C700000C949A490C943321F3C70000BF\r
-:100050000C94E122EFC70000EDC70000EBC70000E1\r
-:10006000E9C70000E7C70000E5C70000E3C70000DC\r
-:10007000084AD73B3BCE016E84BCBFFDC12F3D6C0F\r
-:1000800074319ABD56833DDA3D00C77F11BED9E475\r
-:10009000BB4C3E916BAAAABE000000803F05A84C55\r
-:1000A000CDB2D44EB93836A9020C50B99186880821\r
-:1000B0003CA6AAAA2ABE000000803F6563686F3A8A\r
-:1000C00000737461727400506F7765725570002010\r
-:1000D00045787465726E616C20526573657400209A\r
-:1000E00042726F776E206F7574205265736574006D\r
-:1000F000205761746368646F67205265736574008C\r
-:1001000020536F6674776172652052657365740061\r
-:100110004D61726C696E3A2000312E302E302052C3\r
-:10012000433200204C6173742055706461746564BF\r
-:100130003A2000323031322D30352D303200207CE3\r
-:1001400020417574686F723A20006572696B0020F7\r
-:1001500046726565204D656D6F72793A20002020EA\r
-:10016000506C616E6E657242756666657242797436\r
-:1001700065733A20004572726F723A004C696E6581\r
-:10018000204E756D626572206973206E6F74204C0D\r
-:10019000617374204C696E65204E756D6265722BBB\r
-:1001A000312C204C617374204C696E653A00636891\r
-:1001B00065636B73756D206D69736D617463682C15\r
-:1001C000204C617374204C696E653A004E6F204379\r
-:1001D0006865636B73756D2077697468206C696EF0\r
-:1001E00065206E756D6265722C204C617374204CB5\r
-:1001F000696E653A004E6F204C696E65204E756DD4\r
-:10020000626572207769746820636865636B7375D3\r
-:100210006D2C204C617374204C696E653A006F6BD5\r
-:10022000005072696E7465722073746F70706564CB\r
-:100230002064657520746F206572726F72732E2052\r
-:1002400046697820746865206572726F7220616EED\r
-:100250006420757365204D39393920746F207265BB\r
-:100260007374617274212E202854656D70657261FB\r
-:10027000747572652069732072657365742E2053DE\r
-:100280006574206974206265666F7265207265739B\r
-:1002900074617274696E6729006F6B20543A002094\r
-:1002A0002F0020423A00202F0020403A00543A000C\r
-:1002B00020453A0020573A00543A0020453A0020A1\r
-:1002C000423A004649524D574152455F4E414D45D5\r
-:1002D0003A4D61726C696E2056313B2053707269E1\r
-:1002E0006E7465722F6772626C206D6173687570D1\r
-:1002F00020666F722067656E36204649524D574121\r
-:1003000052455F55524C3A687474703A2F2F777784\r
-:10031000772E6D656E64656C2D70617274732E63DB\r
-:100320006F6D2050524F544F434F4C5F56455253C0\r
-:10033000494F4E3A312E30204D414348494E455F9A\r
-:10034000545950453A4D656E64656C204558545279\r
-:10035000554445525F434F554E543A310A00583A7E\r
-:1003600000593A005A3A00453A0020436F756E74BE\r
-:1003700020583A00593A005A3A00785F6D696E3A4F\r
-:1003800000795F6D696E3A007A5F6D696E3A00556B\r
-:100390006E6B6E6F776E20636F6D6D616E643A2267\r
-:1003A000002200526573656E643A006F6B005072F4\r
-:1003B000696E7465722068616C7465642E206B6967\r
-:1003C0006C6C28292063616C6C65642021210050CD\r
-:1003D00072696E7465722073746F707065642064E6\r
-:1003E000657520746F206572726F72732E20466976\r
-:1003F0007820746865206572726F7220616E642067\r
-:10040000757365204D39393920746F2072657374A6\r
-:10041000617274212E202854656D70657261747547\r
-:1004200072652069732072657365742E205365743C\r
-:10043000206974206265666F7265207265737461ED\r
-:100440007274696E6729000000000102000000005C\r
-:100450000000000403070600000000000000000088\r
-:10046000000000000000000102040810204080018C\r
-:1004700002040810204080010204081020408080FF\r
-:1004800040201008040201020202020202020204D9\r
-:100490000404040404040403030303030303030127\r
-:1004A00001010101010101002225282B002124273F\r
-:1004B0002A6563686F3A0020636F6C642065787406\r
-:1004C000727573696F6E2070726576656E7465649F\r
-:1004D0000020746F6F206C6F6E6720657874727582\r
-:1004E00073696F6E2070726576656E746564006501\r
-:1004F00063686F3A00656E6473746F707320686927\r
-:10050000743A200020583A0020593A00205A3A0004\r
-:1005100024F427D3FD204D0FB0119A05160CE902E3\r
-:100520002D09C801650733013206DE005405A70016\r
-:10053000AD0483002A046900C10356006B03480020\r
-:1005400023033D00E6023500B1022D00840228009D\r
-:100550005C0223003902200019021C00FD01190071\r
-:10056000E4011700CD011500B8011300A501110029\r
-:100570009401100084010F0075010E0067010D0049\r
-:100580005A010C004E010B0043010A0039010A0018\r
-:100590002F010900260109001D01080015010700AF\r
-:1005A0000E01080006010700FF000600F900060022\r
-:1005B000F3000600ED000600E7000500E20005007C\r
-:1005C000DD000500D8000500D3000400CF000500C1\r
-:1005D000CA000400C6000400C2000400BE000300FC\r
-:1005E000BB000400B7000300B4000300B100040026\r
-:1005F000AD000300AA000300A7000200A50003004D\r
-:10060000A20003009F0002009D0003009A00020068\r
-:100610009800030095000200930002009100020080\r
-:100620008F0002008D0002008B0002008900020092\r
-:1006300087000200850002008300020081000100A3\r
-:10064000800002007E0002007C0001007B000200AE\r
-:1006500079000100780002007600010075000100B9\r
-:1006600074000200720001007100010070000200BD\r
-:100670006E0001006D0001006C0001006B000200C3\r
-:1006800069000100680001006700010066000100C8\r
-:1006900065000100640001006300010062000100C8\r
-:1006A00061000100600001005F0001005E000100C8\r
-:1006B0005D0001005C0001005B0000005B000100C8\r
-:1006C0005A000100590001005800010057000000C5\r
-:1006D00057000100560001005500010054000000C1\r
-:1006E00054000100530001005200010051000000BD\r
-:1006F00051000100500001004F0000004F000100B8\r
-:100700004E0000004E0001004D0001004C000000B2\r
-:100710004C0001004B0000004B0001004A000100AA\r
-:1007200049000000490001004800000048000100A5\r
-:10073000470000004700010046000000460001009D\r
-:100740004500000045000100440000004400010095\r
-:10075000430000004300010042000000420001008D\r
-:100760004100000041000000410001004000000085\r
-:10077000400001003F0000003F0001003E0000007B\r
-:100780003E0000003E0001003D0000003D00010071\r
-:100790003C0000003C0000003C0001003B00000069\r
-:1007A0003B0000003B0001003A0000003A0000005E\r
-:1007B0003A00010039000000390000003900010052\r
-:1007C0003800000038000000380001003700000049\r
-:1007D000370000003700010036000000360000003E\r
-:1007E0003600010035000000350000003500000033\r
-:1007F0003500010034000000340000003400010026\r
-:10080000330000003300000033000000330001001B\r
-:10081000320000003200000032000000320001000F\r
-:100820003100000031000000310000003100010003\r
-:1008300030000000300000003000000030000100F7\r
-:100840002F0000002F0000002F0000002F000100EB\r
-:100850002E0000002E0000002E0000002E000000E0\r
-:100860002E0001002D0000002D0000002D000000D2\r
-:100870002D0001002C0000002C0000002C000000C6\r
-:100880002C0000002C0001002B0000002B000000B9\r
-:100890002B0000002B0000002B0001002A000000AC\r
-:1008A0002A0000002A0000002A0000002A000000A0\r
-:1008B0002A00010029000000290000002900000092\r
-:1008C0002900000029000000290001002800000084\r
-:1008D0002800000028000000280000002800010077\r
-:1008E000270000002700000027000000270000006C\r
-:1008F000270000002700000027000100260000005C\r
-:10090000260000002600000026000000260000004F\r
-:1009100024F4B12873CB111D62AECC159698F41057\r
-:10092000A287900D127A190BF96E4009B965D307A9\r
-:10093000E65DB5063157D005615116054B4C7D0477\r
-:10094000CE47FD03D14392033F403603093DE90200\r
-:10095000203AA4027C376A0212353602DC320802E1\r
-:10096000D430E101F32EBD01362D9E01982B81017B\r
-:10097000172A6701B028500160273B01252628016E\r
-:10098000FD241601E7230701E022F800E821EB002F\r
-:10099000FD20DE001F20D3004C1FC800841EBF00B6\r
-:1009A000C51DB500101DAD00631CA500BE1B9E003B\r
-:1009B000201B9700891A9100F8198A006E1985008A\r
-:1009C000E9187F006A187B00EF177600791771002D\r
-:1009D00008176D009B166A0031166500CC15620081\r
-:1009E0006A155F000B155B00B014580058145600D0\r
-:1009F00002145200B013500060134E0012134B004B\r
-:100A0000C71249007E12460038124500F311430018\r
-:100A1000B011400070113F0031113D00F4103C0056\r
-:100A2000B8103A007E103800461037000F1035001D\r
-:100A3000DA0F3400A60F3300730F3100420F30007D\r
-:100A4000120F3000E20E2D00B50E2D00880E2C0086\r
-:100A50005C0E2B00310E2A00070E2800DF0D280047\r
-:100A6000B70D2700900D26006A0D2600440D2400C6\r
-:100A7000200D2400FC0C2300D90C2200B70C22000E\r
-:100A8000950C2100740C2000540C1F00350C1F0025\r
-:100A9000160C1F00F70B1E00D90B1D00BC0B1C0011\r
-:100AA000A00B1C00840B1C00680B1B004D0B1B00D3\r
-:100AB000320B1A00180B1900FF0A1900E60A190078\r
-:100AC000CD0A1800B50A18009D0A1800850A1700FB\r
-:100AD0006E0A1600580A1600420A16002C0A160062\r
-:100AE000160A1500010A1500EC091400D8091400B3\r
-:100AF000C4091400B00914009C09130089091300EB\r
-:100B00007609130063091200510912003F0912000F\r
-:100B10002D0911001C0912000A091100F908100022\r
-:100B2000E9081100D8081000C8081000B808100023\r
-:100B3000A808100098080F0089080F007A080F0015\r
-:100B40006B080F005C080F004D080E003F080E00F8\r
-:100B500031080E0023080E0015080E0007080D00CE\r
-:100B6000FA070D00ED070D00E0070D00D3070D009B\r
-:100B7000C6070D00B9070C00AD070C00A1070D005A\r
-:100B800094070B0089070C007D070C0071070C000F\r
-:100B900065070B005A070B004F070B0044070B00BB\r
-:100BA00039070B002E070B0023070B0018070A005C\r
-:100BB0000E070B0003070A00F9060A00EF060A00F9\r
-:100BC000E5060A00DB060A00D1060900C8060A008D\r
-:100BD000BE060900B5060A00AB060900A206090018\r
-:100BE0009906090090060900870609007E0609009B\r
-:100BF000750609006C060800640609005B0608001B\r
-:100C0000530609004A060800420608003A06080092\r
-:100C1000320608002A060800220608001A06080004\r
-:100C2000120607000B06080003060800FB05070074\r
-:100C3000F4050800EC050700E5050700DE050700E0\r
-:100C4000D7050700D0050700C9050700C205070042\r
-:100C5000BB050700B4050700AD050700A6050600A3\r
-:100C6000A005070099050700920506008C050600FF\r
-:100C7000860507007F050600790506007305070055\r
-:100C80006C05060066050600600506005A050600AC\r
-:100C9000540506004E0506004805060042050500FD\r
-:100CA0003D05060037050600310505002C05060048\r
-:100CB00026050500210506001B0505001605060092\r
-:100CC000100505000B0505000605060000050500DA\r
-:100CD000FB040500F6040500F1040500EC04050022\r
-:100CE000E7040500E2040500DD040500D804050062\r
-:100CF000D3040500CE040500C9040500C4040500A2\r
-:100D0000BF040400BB040500B6040500B1040500DF\r
-:100D100020626961733A200020643A2000206D69E6\r
-:100D20006E3A2000206D61783A2000204B753A2001\r
-:100D3000002054753A200020436C61736963205091\r
-:100D400049442000204B703A2000204B693A200093\r
-:100D5000204B643A2000504944204175746F7475EB\r
-:100D60006E65206661696C6564212054656D7065EF\r
-:100D700072617475726520746F2068696768006FAE\r
-:100D80006B20543A0020403A005049442041757489\r
-:100D90006F74756E65206661696C65642120746985\r
-:100DA0006D656F757400504944204175746F74759A\r
-:100DB0006E652066696E6973686564202120506CD9\r
-:100DC00061636520746865204B702C204B6920613D\r
-:100DD0006E64204B6420636F6E7374616E74732055\r
-:100DE000696E2074686520636F6E666967757261ED\r
-:100DF00074696F6E2E68004572726F723A00202D12\r
-:100E000020496E76616C69642065787472756465DA\r
-:100E100072206E756D62657221001000C90220019A\r
-:100E20003C0130020A014003EF005004DD00600580\r
-:100E3000D0007006C5008007BC009008B500A0096E\r
-:100E4000AE00B00AA900C00BA300D00C9F00E00DBB\r
-:100E50009A00F00E96000010930010118F002012DF\r
-:100E60008C003013880040148500501582006016F5\r
-:100E7000800070177D0080187A0090197800A01A01\r
-:100E80007500B01B7300C01C7000D01D6E00E01E0A\r
-:100E90006C00F01F6A00002167001022650020230B\r
-:100EA00063003024610040255F0050265C0060270D\r
-:100EB0005A007028580080295600902A5400A02B10\r
-:100EC0005100B02C4F00C02D4D00D02E4B00E02F14\r
-:100ED0004800F03046000032430010334000203418\r
-:100EE0003D0030353A004036370050373400603826\r
-:100EF000300070392C00803A2800903B2200A03C42\r
-:100F00001C00B03D1400C03E0800D03F0000202D62\r
-:100F100020496E76616C69642065787472756465C9\r
-:100F200072206E756D6265722021003A20457874DA\r
-:100F30007275646572207377697463686564206F85\r
-:100F400066662E204D415854454D50207472696795\r
-:100F500067657265642021003A2045787472756473\r
-:100F60006572207377697463686564206F66662EA6\r
-:100F7000204D494E54454D50207472696767657223\r
-:100F8000656420210054656D7065726174757265C9\r
-:100F90002068656174656420626564207377697494\r
-:100FA00063686564206F66662E204D415854454D38\r
-:100FB0005020747269676765726564202121004959\r
-:100FC0004E46494E4954594E414E000020410000C2\r
-:100FD000C84200401C4620BCBE4CCA1B0E5AAEC5BF\r
-:100FE0009D74CDCCCC3D0AD7233C17B7D13877CCF4\r
-:100FF0002B329595E6241FB14F0A11241FBECFEF67\r
-:10100000D0E1DEBFCDBF12E0A0E0B1E0E8EDFAEA4A\r
-:1010100002C005900D92A038B107D9F71AE0A0E8F8\r
-:10102000B2E001C01D92A13FB107E1F70E942E215D\r
-:101030000C946A550C940000AF92BF92CF92DF924D\r
-:10104000EF92FF920F931F93CF93DF93CDB7DEB74D\r
-:10105000E0970FB6F894DEBF0FBECDBF80E1E7E3A7\r
-:10106000F1E0DE01919601900D928A95E1F780E121\r
-:10107000E7E4F1E0DE01519601900D928A95E1F7E7\r
-:1010800080E1E7E5F1E0DE01119601900D928A958D\r
-:10109000E1F76E0181E2C80ED11C85E2E82E8AE0FC\r
-:1010A000F82E8E010F5E1F4F65E37AE0AE014F5FB1\r
-:1010B0005F4F95E1A92E9AE0B92E20E030E0F601CD\r
-:1010C00081919191A191B1916F01F70181939193D8\r
-:1010D000A193B1937F01F80181919191A191B19177\r
-:1010E0008F01FB0181939193A193B193BF01FA0109\r
-:1010F00081919191A191B191AF01F501819391936A\r
-:10110000A193B1935F012F5F3F4F24303105B9F6B2\r
-:1011100080E090E0AAEFB3E480930D0A90930E0A6A\r
-:10112000A0930F0AB093100A80E090E8ABE3B5E417\r
-:101130008093090A90930A0AA0930B0AB0930C0AB1\r
-:101140001092110A1092120A1092130A1092140AA5\r
-:1011500080E29EE4A0E0B0E08093450A9093460AC6\r
-:10116000A093470AB093480A1092F9091092FA091D\r
-:101170001092FB091092FC0980E090E0A0EAB1E433\r
-:101180008093050A9093060AA093070AB093080A71\r
-:101190008DEC9CECACECBEE38093010A9093020AC8\r
-:1011A000A093030AB093040A80E090E0A0EAB0E4C0\r
-:1011B0008093FD099093FE09A093FF09B093000A64\r
-:1011C000EBEBF0E007C09091C00095FFFCCF80935F\r
-:1011D000C600319684918111F6CFE7E6F1E006C0B2\r
-:1011E0009091C00095FFFCCF8093C6008191811142\r
-:1011F000F7CF8091C00085FFFCCF8AE08093C600C6\r
-:10120000E0960FB6F894DEBF0FBECDBFDF91CF9151\r
-:101210001F910F91FF90EF90DF90CF90BF90AF9014\r
-:101220000895CF93DF9300D0CDB7DEB78091EB0A5E\r
-:101230009091EC0A9E012F5F3F4F009719F4215FB8\r
-:101240003A4002C0281B390B3A83298389819A814D\r
-:101250000F900F90DF91CF910895CF92DF92EF9290\r
-:10126000FF920F931F93CF93DF9300D000D0CDB7A1\r
-:10127000DEB740E052EC61E070E081E894E00E946B\r
-:101280001623E1ECF0E007C09091C00095FFFCCF81\r
-:101290008093C600319684918111F6CF8091C00071\r
-:1012A00085FFFCCF8AE08093C6008BEB90E0FC01C9\r
-:1012B00007C03091C00035FFFCCF2093C6003196A7\r
-:1012C00024912111F6CF24B720FF14C0E7ECF0E001\r
-:1012D00007C04091C00045FFFCCF3093C600319657\r
-:1012E00034913111F6CF3091C00035FFFCCF3AE098\r
-:1012F0003093C60021FF14C0EFECF0E007C040912E\r
-:10130000C00045FFFCCF3093C600319634913111B7\r
-:10131000F6CF3091C00035FFFCCF3AE03093C600E5\r
-:1013200022FF14C0EFEDF0E007C04091C00045FF80\r
-:10133000FCCF3093C600319634913111F6CF309105\r
-:10134000C00035FFFCCF3AE03093C60023FF14C045\r
-:10135000E0EFF0E007C04091C00045FFFCCF3093C4\r
-:10136000C600319634913111F6CF3091C00035FF6F\r
-:10137000FCCF3AE03093C60025FF14C0E0E0F1E076\r
-:1013800007C03091C00035FFFCCF2093C6003196D6\r
-:1013900024912111F6CF2091C00025FFFCCF2AE037\r
-:1013A0002093C60014BEE0E1F1E007C03091C00018\r
-:1013B00035FFFCCF2093C600319624912111F6CF42\r
-:1013C000E9E1F1E007C03091C00035FFFCCF209388\r
-:1013D000C600319624912111F6CF2091C00025FF3F\r
-:1013E000FCCF2AE02093C600FC012491EBEBF0E057\r
-:1013F00008C03091C00035FFFCCF2093C600319665\r
-:1014000024912111F6CFE3E2F1E007C03091C00052\r
-:1014100035FFFCCF2093C600319624912111F6CFE1\r
-:10142000E3E3F1E007C03091C00035FFFCCF20932B\r
-:10143000C600319624912111F6CFEEE3F1E007C00A\r
-:101440003091C00035FFFCCF2093C6003196249127\r
-:101450002111F6CFEAE4F1E007C03091C00035FF7A\r
-:10146000FCCF2093C600319624912111F6CF209114\r
-:10147000C00025FFFCCF2AE02093C600FC01849128\r
-:10148000EBEBF0E008C09091C00095FFFCCF80939B\r
-:10149000C600319684918111F6CFEFE4F1E007C0E8\r
-:1014A0009091C00095FFFCCF8093C6003196849147\r
-:1014B0008111F6CFB6DE4AE050E0BC0181E894E04D\r
-:1014C0000E943C24EEE5F1E007C09091C00095FF3A\r
-:1014D000FCCF8093C600319684918111F6CF4AE00B\r
-:1014E00050E060ED74E081E894E00E943C2480913B\r
-:1014F000C00085FFFCCF8AE08093C60010922A04CA\r
-:1015000010922B0410922C0410922D0480E094DD94\r
-:1015100025E1C22E2AE0D22E35E2E32E3AE0F32E68\r
-:1015200009EE19E0F60161917191819191916F013C\r
-:10153000F70121913191419151917F0129833A83A2\r
-:101540004B835C830E94744C29813A814B815C817E\r
-:101550000E94A94E0E94484CF801619371938193B7\r
-:1015600091938F01F5E2CF16FAE0DF06D9F60E94DB\r
-:101570005E440E94FD2C0F900F900F900F90DF9112\r
-:10158000CF911F910F91FF90EF90DF90CF900C942F\r
-:10159000773F809134049091350460E070E00196CB\r
-:1015A0000C94FE4F80913404909135044AE050E051\r
-:1015B00060E070E001960C944A5140912E045091E5\r
-:1015C0002F0490E6949F9001959F300D1124682F71\r
-:1015D00070E0C90186559D4F0E947C52909335045E\r
-:1015E0008093340421E0892B09F420E0822F0895B0\r
-:1015F0000E94782160933E0470933F0480934004DE\r
-:1016000090934104EBEAF3E007C09091C00095FF8E\r
-:10161000FCCF8093C600319684918111F6CF8091E2\r
-:10162000C00085FFFCCF8AE08093C600089581E862\r
-:1016300094E00E945B23E3EAF3E007C09091C000CE\r
-:1016400095FFFCCF8093C600319684918111F6CF2F\r
-:1016500040913A0450913B0460913C0470913D04E8\r
-:101660004F5F5F4F6F4F7F4F2AE030E081E894E09B\r
-:101670000E9406248091C00085FFFCCF8AE0809301\r
-:10168000C600B6CF4F925F927F928F929F92AF9299\r
-:10169000BF92CF92DF92EF92FF920F931F93CF935F\r
-:1016A000DF9340E6742E54E0452E512CE1E2F2E047\r
-:1016B00084906AE0B62EEEE1F2E0A490992493942F\r
-:1016C0008091020590910305209104053091050554\r
-:1016D000821B930B8F779927892B09F0FEC111C2CA\r
-:1016E0008D3051F08A3321F490913104992321F007\r
-:1016F0002F3531050CF4D4C12115310519F41092A0\r
-:101700003104FFC18091A8029091A902789EE00166\r
-:10171000799ED00D1124FE01E20FF31FE655FD4F17\r
-:101720001082209131042111B6C110923104FC01C4\r
-:10173000E65DFB4F10828E0106551D4F6EE470E092\r
-:10174000C8010E947C52009709F403C190933504AC\r
-:1017500080933404801B910B8C0F9D1F4AE050E056\r
-:1017600060E070E085559D4F0E944A5160933604B9\r
-:10177000709337048093380490933904C0903A04EE\r
-:10178000D0903B04E0903C04F0903D04970186012A\r
-:101790000F5F1F4F2F4F3F4F60177107820793074F\r
-:1017A000C1F12091A8023091A902729EC001739EDE\r
-:1017B000900D11246FE771E086559D4F0E9487526E\r
-:1017C000892B39F5E5E7F1E007C09091C00095FF5E\r
-:1017D000FCCF8093C600319684918111F6CFECE75F\r
-:1017E000F1E007C09091C00095FFFCCF8093C60048\r
-:1017F000319684918111F6CF2AE030E0B701A6013D\r
-:1018000081E894E00E9406248091C00085FFFCCF0F\r
-:101810008AC08091A8029091A902789E8001799E49\r
-:10182000100D1124E801C655DD4F6AE270E0CE01CB\r
-:101830000E947C52009721F450C0F3262F5F02C013\r
-:1018400020E0F12CF801E20FF11DE655FD4F30814B\r
-:101850003A3299F790933504809334048C1B9D0B96\r
-:10186000800F911F60E070E085559D4F0E94FE4FF4\r
-:101870000E94434C2F2D30E02617370709F458C03B\r
-:10188000E5E7F1E007C09091C00095FFFCCF8093A1\r
-:10189000C600319684918111F6CFEEEAF1E007C0DF\r
-:1018A0009091C00095FFFCCF8093C6003196849143\r
-:1018B0008111F6CF40913A0450913B0460913C0471\r
-:1018C00070913D042AE030E081E894E00E94062413\r
-:1018D0008091C00085FFFCCF26C0E5E7F1E007C09E\r
-:1018E0009091C00095FFFCCF8093C6003196849103\r
-:1018F0008111F6CFECECF1E007C09091C00095FFAC\r
-:10190000FCCF8093C600319684918111F6CF2AE0F6\r
-:1019100030E0B701A60181E894E00E94062480919E\r
-:10192000C00085FFFCCF8AE08093C60080DE47C000\r
-:101930008091360490913704A0913804B091390415\r
-:1019400080933A0490933B04A0933C04B0933D04ED\r
-:101950003BC06AE270E0C8010E947C52892BA1F171\r
-:10196000E5E7F1E007C09091C00095FFFCCF8093C0\r
-:10197000C600319684918111F6CFE5EFF1E007C002\r
-:101980009091C00095FFFCCF8093C6003196849162\r
-:101990008111F6CF40913A0450913B0460913C0490\r
-:1019A00070913D042AE030E081E894E00E94062432\r
-:1019B0008091C00085FFFCCF8AE08093C600109222\r
-:1019C0003304109232049DC08091A8029091A90224\r
-:1019D000789EE001799ED00D11248E0106551D4F91\r
-:1019E00067E470E0C8010E947C52009709F43EC091\r
-:1019F0009093350480933404801B910B8C0F9D1FB2\r
-:101A000060E070E085559D4F0E94FE4F0E94434C60\r
-:101A10006430710558F580918002811113C08A2DC0\r
-:101A2000EEE1F2E008C09091C00095FFFCCF8093FA\r
-:101A3000C600319684918111F6CF8091C00085FF58\r
-:101A4000FCCF12C0882DE1E2F2E008C09091C00006\r
-:101A500095FFFCCF8093C600319684918111F6CF1B\r
-:101A60008091C00085FFFCCFB092C6008091A80293\r
-:101A70009091A9020196B2010E948E4F9093A90203\r
-:101A80008093A8028091A6029091A702019690935C\r
-:101A9000A7028093A602109233041092320410CE53\r
-:101AA0008B3311F49092310490913104911108CE4E\r
-:101AB0004091A8025091A902749ED001759EB00D6C\r
-:101AC0001124A20FB31FA655BD4F8C932F5F3F4F1C\r
-:101AD0003093330420933204F3CD8091A602909189\r
-:101AE000A702049774F481E894E00E943F23809356\r
-:101AF000300420913204309133048A3009F0F0CD63\r
-:101B0000FBCDDF91CF911F910F91FF90EF90DF9070\r
-:101B1000CF90BF90AF909F908F907F905F904F90AD\r
-:101B200008958F929F92AF92BF92CF92DF92EF92E1\r
-:101B3000FF920F931F93CF93DF9378E1A72E72E06C\r
-:101B4000B72E0FE812E0C6E4D4E0E2EA8E2EE2E01F\r
-:101B50009E2EF50181915F0130DD882311F119DDA1\r
-:101B60006B017C01F4018081811103C060915604F6\r
-:101B700001C061E070E080E090E00E94764CF801E6\r
-:101B800020813181428153810E94A94E9B01AC0189\r
-:101B9000C701B6010E94FB4A688379838A839B83CD\r
-:101BA00009C0F80180819181A281B38188839983E2\r
-:101BB000AA83BB830C5F1F4F2496FFEF8F1A9F0AE7\r
-:101BC0008CE1A81682E0B80621F686E4F6DC8823CC\r
-:101BD000D1F0DFDC6B017C016093680470936904D1\r
-:101BE00080936A0490936B0420E030E0A9010E9486\r
-:101BF000D74D181644F4C0921401D0921501E0920A\r
-:101C00001601F0921701DF91CF911F910F91FF9074\r
-:101C1000EF90DF90CF90BF90AF909F908F900895FE\r
-:101C200080DF89E4CADC882351F0B3DC60936C0464\r
-:101C300070936D0480936E0490936F0408C01092AB\r
-:101C40006C0410926D0410926E0410926F048AE47A\r
-:101C5000B4DC882351F09DDC6093700470937104B0\r
-:101C600080937204909373040895109270041092FC\r
-:101C7000710410927204109273040895CF92DF924F\r
-:101C8000EF92FF920F931F9320E030E0A901609143\r
-:101C900046047091470480914804909149040E9441\r
-:101CA000D44B87FF08C0109246041092470410924C\r
-:101CB00048041092490420E030E0A90160914A04F0\r
-:101CC00070914B0480914C0490914D040E94D44B30\r
-:101CD00087FF08C010924A0410924B0410924C04E3\r
-:101CE00010924D0420E030E0A90160914E04709103\r
-:101CF0004F0480915004909151040E94D44B87FF6F\r
-:101D000008C010924E0410924F041092500410928A\r
-:101D1000510420E030E04DE453E4609146047091BA\r
-:101D2000470480914804909149040E94D74D1816A9\r
-:101D300064F480E090E0ADE4B3E4809346049093D3\r
-:101D40004704A0934804B093490420E030E04DE4F8\r
-:101D500053E460914A0470914B0480914C0490913B\r
-:101D60004D040E94D74D181664F480E090E0ADE475\r
-:101D7000B3E480934A0490934B04A0934C04B09333\r
-:101D80004D0420E030E040EF52E460914E04709149\r
-:101D90004F0480915004909151040E94D74D181621\r
-:101DA00064F480E090E0A0EFB2E480934E0490935E\r
-:101DB0004F04A0935004B09351040E947821609383\r
-:101DC0003E0470933F0480934004909341046091DB\r
-:101DD000020170910301882777FD8095982F0E945A\r
-:101DE000764C2091140130911501409116015091CB\r
-:101DF00017010E94A94E20E030E040E752E40E9423\r
-:101E0000DB4B20E030E048EC52E40E94DB4BF2E890\r
-:101E1000CF2EF2E0DF2E7B018C0122E534E04EE490\r
-:101E200054E06AE474E086E494E00E947C2D8091A2\r
-:101E3000460490914704A0914804B09149048093CE\r
-:101E40008F0290939002A0939102B093920280919E\r
-:101E50004A0490914B04A0914C04B0914D0480939E\r
-:101E6000930290939402A0939502B093960280916E\r
-:101E70004E0490914F04A0915004B091510480936E\r
-:101E8000970290939802A0939902B0939A0280913E\r
-:101E9000520490915304A0915404B091550480933E\r
-:101EA0009B0290939C02A0939D02B0939E021F916F\r
-:101EB0000F91FF90EF90DF90CF900895AF92BF9277\r
-:101EC000CF92DF92EF92FF920F931F93CF93DF9306\r
-:101ED000182F209170043091710440917204509138\r
-:101EE000730460916C0470916D0480916E04909104\r
-:101EF0006F040E94E44DEB01082FF92E609102015E\r
-:101F000070910301882777FD8095982F0E94764C69\r
-:101F10002091140130911501409116015091170143\r
-:101F20000E94A94E20E030E040E752E40E94DB4BE3\r
-:101F300020E030E048EC52E40E94DB4B209182022A\r
-:101F40002F931F93FF920F93DF93CF935B016C014D\r
-:101F5000A2E0EA2E01E020E04CE654E066E474E002\r
-:101F60008FE892E00E9400258091460490914704FA\r
-:101F7000A0914804B091490480938F0290939002FD\r
-:101F8000A0939102B093920280914A0490914B04E5\r
-:101F9000A0914C04B0914D048093930290939402CD\r
-:101FA000A0939502B093960280914E0490914F04B5\r
-:101FB000A0915004B091510480939702909398029D\r
-:101FC000A0939902B0939A02809152049091530485\r
-:101FD000A0915404B091550480939B0290939C026D\r
-:101FE000A0939D02B0939E020E94782160933E04CC\r
-:101FF00070933F0480934004909341040F900F909E\r
-:102000000F900F900F900F90DF91CF911F910F9134\r
-:10201000FF90EF90DF90CF90BF90AF900895F8942D\r
-:102020000E94BB445A985A985A985A98E5E7F1E0AA\r
-:1020300007C09091C00095FFFCCF8093C6003196F9\r
-:1020400084918111F6CFEEEAF3E007C09091C000D1\r
-:1020500095FFFCCF8093C600319684918111F6CF15\r
-:102060008091C00085FFFCCF8AE08093C600FFCF3F\r
-:10207000CF92DF92EF92FF920F931F930E947821ED\r
-:102080000091600410916104209162043091630416\r
-:10209000C0903E04D0903F04E0904004F090410492\r
-:1020A0006C197D098E099F0906171707280739073C\r
-:1020B00028F4012B022B032B09F0B1DF80911901C9\r
-:1020C00090911A01A0911B01B0911C01892B8A2BC0\r
-:1020D0008B2B09F10E94782100913E0410913F045E\r
-:1020E0002091400430914104601B710B820B930BD3\r
-:1020F0000091190110911A0120911B0130911C01CE\r
-:10210000061717072807390730F4909108058091C2\r
-:102110000705981721F00E94312D1EBA05C05A9864\r
-:102120005A985A985A98F7CF1F910F91FF90EF90B5\r
-:10213000DF90CF9008952F923F924F925F926F92CF\r
-:102140007F928F929F92AF92BF92CF92DF92EF9247\r
-:10215000FF920F931F93CF93DF93CDB7DEB7A69770\r
-:102160000FB6F894DEBF0FBECDBF87E426DA882312\r
-:1021700009F489C20EDA0E94434C64307105B1F152\r
-:1021800044F46230710511F144F577FF17C00C94E7\r
-:10219000501D6A35710509F422C234F46C317105A1\r
-:1021A00011F00C94501D60C06B35710509F41BC211\r
-:1021B0006C35710511F00C94501D1AC2809180028B\r
-:1021C000811104C0AEDC5ADD0C9495208091800210\r
-:1021D000811103C025DD81E006C08091800281115C\r
-:1021E00005C01EDD80E06ADE0C94952080E5E5D90F\r
-:1021F000882331F0CED90E94484C6B017C0103C08A\r
-:10220000C12CD12C760183E5D8D9882359F0C1D9C6\r
-:1022100020E030E04AE754E40E94A94E0E94484C76\r
-:102220006B017C010E94B63F0E9478214B015C014A\r
-:102230008C0C9D1CAE1CBF1C0E94782160933E0438\r
-:1022400070933F04809340049093410404C00E9423\r
-:10225000E24181E00DDF0E947821681579058A0549\r
-:102260009B05A8F30C94501D8091140190911501C9\r
-:10227000A0911601B09117018093420490934304FA\r
-:10228000A0934404B093450480910201909103010E\r
-:102290009093A1028093A00284E690E090930301C2\r
-:1022A000809302010E94782160933E0470933F0462\r
-:1022B000809340049093410481E00E94763980919C\r
-:1022C0008F0290919002A0919102B091920280931E\r
-:1022D000460490934704A0934804B0934904809126\r
-:1022E000930290919402A0919502B09196028093EE\r
-:1022F0004A0490934B04A0934C04B0934D048091F6\r
-:10230000970290919802A0919902B0919A028093BD\r
-:102310004E0490934F04A0935004B09351048091C5\r
-:102320009B0290919C02A0919D02B0919E0280938D\r
-:10233000520490935304A0935404B0935504109204\r
-:10234000140110921501109216011092170188E5E0\r
-:1023500034D9882311F090E008C089E52ED9811185\r
-:10236000FACF8AE52AD991E0982790931801911124\r
-:102370000C94531D88E521D9882309F48EC089E582\r
-:102380001CD981110C94531D88C0C0921401D092A5\r
-:102390001501E0921601F092170120E030E040E7CD\r
-:1023A00052E4609114017091150180911601909191\r
-:1023B00017010E94DB4BE2E8CE2EE2E0DE2E7B012D\r
-:1023C0008C0122E534E04EE454E06AE474E086E4F3\r
-:1023D00094E00E947C2D0E94B63F10928F021092D2\r
-:1023E0009002109291021092920210929302109217\r
-:1023F000940210929502109296022BE932E047E97E\r
-:1024000052E063E972E08FE892E00E94FC3780912D\r
-:102410008F0290919002A0919102B09192028093CC\r
-:10242000460490934704A0934804B09349048091D4\r
-:10243000930290919402A0919502B091960280939C\r
-:102440004A0490934B04A0934C04B0934D0420E0B5\r
-:1024500030E040E752E460911401709115018091E1\r
-:102460001601909117010E94DB4B7B018C0122E544\r
-:1024700034E04EE454E06AE474E086E494E00E94C0\r
-:102480007C2D1092140110921501109216011092D9\r
-:1024900017010E94B63F0E946F3980911801811187\r
-:1024A0000C94A31D88E589D881110C94A31D8091FB\r
-:1024B000180181110C947B1E89E57FD881110C9441\r
-:1024C0007B1E8091180181110C94531F8AE575D8E9\r
-:1024D00081110C94531F88E570D88823C1F062D80D\r
-:1024E000672B682B692B99F054D820918302309187\r
-:1024F000840240918502509186020E94FB4A6093BB\r
-:102500008F0270939002809391029093920289E5DA\r
-:1025100054D88823C1F046D8672B682B692B99F0D3\r
-:1025200038D82091870230918802409189025091D9\r
-:102530008A020E94FB4A60939302709394028093F4\r
-:102540009502909396028AE538D88823C1F02AD85C\r
-:10255000672B682B692B99F01CD820918B02309146\r
-:102560008C0240918D0250918E020E94FB4A609332\r
-:102570009702709398028093990290939A022BE9A4\r
-:1025800032E047E952E063E972E08FE892E00E94AE\r
-:10259000FC378091420490914304A0914404B0918F\r
-:1025A00045048093140190931501A0931601B093F4\r
-:1025B00017018091A0029091A10290930301809352\r
-:1025C00002010E94782160933E0470933F0480933F\r
-:1025D0004004909341040E946F390C94501D109256\r
-:1025E00056040C94501D81E0809356040C94501DA9\r
-:1025F00085E40E94DD0A811102C00E94B63F48E1D5\r
-:10260000C42E42E0D42E53E8E52E52E0F52E0FE81A\r
-:1026100012E0B12CF60181916F010E94DD0A88233E\r
-:1026200039F1F3E0BF120CC00E94C90AF8016083BF\r
-:102630007183828393838BE992E00E94973818C05C\r
-:102640000E94C90AF70120813181428153810E9491\r
-:10265000FB4AF80160837183828393832BE932E024\r
-:1026600047E952E063E972E08FE892E00E94FC37AC\r
-:10267000B394F4E0EF0EF11C0C5F1F4F24E0B21294\r
-:10268000C9CF0C94501D8DE40E94DD0A882311F4FB\r
-:102690000C94A51C0E94C90A0E94434C683771051E\r
-:1026A00009F4D1C60CF053C06C35710509F44FC55F\r
-:1026B00044F56A32710509F406C174F4623171059A\r
-:1026C00009F4F4C46F31710509F4A4C061317105D6\r
-:1026D00011F00C94501D98C06335710509F4E2C4E3\r
-:1026E00034F46235710511F00C94501DD8C4643572\r
-:1026F000710509F4DBC46535710511F00C94501DAA\r
-:1027000010C56B36710509F4C7C464F469367105E8\r
-:1027100009F48FC10CF099C46836710511F00C945E\r
-:10272000501D11C16237710509F4B1C534F46D361D\r
-:10273000710511F00C94501D4DC26337710509F4F9\r
-:1027400098C56737710511F00C94501D82C66C3D19\r
-:10275000710509F4CDC744F5693C710509F4D8C683\r
-:1027600074F46C38710509F450C16E3B710509F4BD\r
-:10277000D0C36937710511F00C94501D66C66C3CCE\r
-:10278000710509F41BC734F46B3C710511F00C940E\r
-:10279000501DF8C66D3C710509F430C76E3C7105DB\r
-:1027A00011F00C94501D88C76F3231E0730711F49B\r
-:1027B0000C94781C74F46D3291E0790709F4B9C770\r
-:1027C00014F00C94741C6D3D710511F00C94501DA7\r
-:1027D000A1C7653FF1E07F0711F40C948A1C3CF41B\r
-:1027E0006039714011F00C94501D0C94871C663FA9\r
-:1027F00081E0780711F40C948C1C673E734011F053\r
-:102800000C94501D0C94901C5A9A5A9A5A9A5A9A9F\r
-:102810000C94501D0E9478216093570470935804C3\r
-:102820008093590490935A0400915B0410915C04C6\r
-:1028300020915D0430915E04601B710B820B930B41\r
-:1028400028EE33E040E050E00E94A14FCA01B901F8\r
-:102850002CE330E040E050E00E94A14F7F936F9363\r
-:102860003F932F938AE891E09F938F93CE01019637\r
-:102870009F938F930E94A152EBEBF0E084910FB6EF\r
-:10288000F894DEBF0FBECDBFEBEBF0E008C0909137\r
-:10289000C00095FFFCCF8093C600319684918111D2\r
-:1028A000F6CFFE01319606C09091C00095FFFCCF97\r
-:1028B0008093C60081918111F7CF8091C00085FF80\r
-:1028C000FCCF0C944D1D83E50E94DD0A882311F492\r
-:1028D0000C94501D0E94C90A6B017C0180E50E9486\r
-:1028E000DD0A882311F40C94501DC701B6010E9423\r
-:1028F000434C7B0177FF02C00C94501D6F3F710564\r
-:1029000009F014F40C942B200C94501D819191919A\r
-:102910008017910711F40C94501D22E0E039F20762\r
-:10292000A9F717FF02C00C94501D61E0802F0E9490\r
-:1029300092226E2D802F0E94AE22B701802F0E941E\r
-:1029400009220C94501D8091820280935F0484E5DB\r
-:102950000E94DD0A882379F10E94C90A0E94484C2E\r
-:1029600060935F04662339F1EBEBF0E007C09091D0\r
-:10297000C00095FFFCCF8093C600319684918111F1\r
-:10298000F6CFE9E9F1E006C09091C00095FFFCCFD9\r
-:102990008093C60081918111F7CF40E050E06091B3\r
-:1029A0005F0481E894E00E9400248091C00085FFCC\r
-:1029B000FCCF0C944D1D83E50E94DD0A882309F1AC\r
-:1029C000B0905F040E94C90A6B017C010B2D10E0DE\r
-:1029D0000E94434CDC01CB016B2D0E944640F80164\r
-:1029E000EE0FFF1FE255F54F91838083F801EE0F44\r
-:1029F000FF1FEE0FFF1FEC55F54FC082D182E28220\r
-:102A0000F3820E94BA440C94501D83E50E94DD0AB3\r
-:102A1000882311F40C94501D0E94C90A0E94434C53\r
-:102A2000CB010E94CA409093AD0A8093AC0A0C94EB\r
-:102A3000501D8091820280935F0484E50E94DD0A2C\r
-:102A4000882371F10E94C90A0E94484C60935F0478\r
-:102A5000662331F1EBEBF0E007C09091C00095FFE9\r
-:102A6000FCCF8093C600319684918111F6CFE0EBC4\r
-:102A7000F1E006C09091C00095FFFCCF8093C600A6\r
-:102A800081918111F7CF40E050E060915F0481E8CF\r
-:102A900094E00E9400248091C00085FFFCCFFDC718\r
-:102AA000E9E9F2E007C09091C00095FFFCCF809368\r
-:102AB000C600319684918111F6CF60915F04E62FB4\r
-:102AC000F0E0EE0FFF1FE655F54F808191810E94E7\r
-:102AD0001641AB01BC0121E030E081E894E00E94A6\r
-:102AE000FF24EFE9F2E007C09091C00095FFFCCF12\r
-:102AF0008093C600319684918111F6CF60915F0476\r
-:102B0000E62FF0E0EE0FFF1FE255F54F8081918137\r
-:102B10000E941641AB01BC0121E030E081E894E065\r
-:102B20000E94FF24E2EAF2E007C09091C00095FF06\r
-:102B3000FCCF8093C600319684918111F6CF8091AD\r
-:102B4000A80A9091A90A0E94C943AB01BC0121E0E7\r
-:102B500030E081E894E00E94FF24E6EAF2E007C05A\r
-:102B60009091C00095FFFCCF8093C6003196849170\r
-:102B70008111F6CF8091AC0A9091AD0A0E94C943B1\r
-:102B8000AB01BC0121E030E081E894E00E94FF2429\r
-:102B9000E9EAF2E007C09091C00095FFFCCF809376\r
-:102BA000C600319684918111F6CF80915F0490E048\r
-:102BB0000E9440404AE050E0BC0181E894E00E945D\r
-:102BC0003C248091C00085FFFCCF8AE08093C60042\r
-:102BD0000C9495208091820280935F0484E50E948A\r
-:102BE000DD0A882371F10E94C90A0E94484C609353\r
-:102BF0005F04662331F1EBEBF0E007C09091C00079\r
-:102C000095FFFCCF8093C600319684918111F6CF59\r
-:102C1000E7ECF1E006C09091C00095FFFCCF8093F7\r
-:102C2000C60081918111F7CF40E050E060915F04D0\r
-:102C300081E894E00E9400248091C00085FFFCCFD1\r
-:102C40002CC783E50E94DD0A882309F1B0905F0458\r
-:102C50000E94C90A6B017C010B2D10E00E94434CBD\r
-:102C6000DC01CB016B2D0E944640F801EE0FFF1FE7\r
-:102C7000E255F54F91838083F801EE0FFF1FEE0FB1\r
-:102C8000FF1FEC55F54FC082D182E282F3820E9491\r
-:102C9000BA440E9478214B015C0180915F0490E06E\r
-:102CA000880F991FFC01E255F54F2081318138A32F\r
-:102CB0002F8FFC01E655F54F808191819EA38DA356\r
-:102CC000CC24CA94DC2C7601EDEAF2E02490E0EB0F\r
-:102CD000F2E03490E4EBF2E0049178EE472E73E0FA\r
-:102CE000572E612C712C1AE00C944C20822DEDEAA9\r
-:102CF000F2E008C09091C00095FFFCCF8093C60021\r
-:102D0000319684918111F6CF60915F04E62FF0E057\r
-:102D1000EE0FFF1FE655F54F808191810E9416410D\r
-:102D2000AB01BC0121E030E081E894E00E94FF2487\r
-:102D3000832DE0EBF2E008C09091C00095FFFCCF3E\r
-:102D40008093C600319684918111F6CF60915F0423\r
-:102D50004AE050E070E081E894E00E943C24802F3B\r
-:102D6000E4EBF2E008C09091C00095FFFCCF8093A7\r
-:102D7000C600319684918111F6CFF7FE03C0EEEDC7\r
-:102D8000F1E027C00E9478214B015C01C701B60128\r
-:102D9000605F784D8F4F9F4F681979098A099B09A9\r
-:102DA000A30192010E94A14F49015A012AE030E09B\r
-:102DB000B501A40181E894E00E94F0238091C00055\r
-:102DC00085FFFCCF0DC09091C00095FFFCCF809394\r
-:102DD000C60081918111F7CF8091C00085FFFCCFA3\r
-:102DE0001093C6000E9478214B015C010E94E241D1\r
-:102DF00081E03ED99FEFC916D906E906F906C1F56B\r
-:102E000060915F04EF8DF8A12DA13EA12E173F0721\r
-:102E100014F00C946820E62FF0E0EE0FFF1FE6554B\r
-:102E2000F54F808191810E94164169A37AA38BA3FB\r
-:102E30009CA360915F04E62FF0E0EE0FFF1FE255C8\r
-:102E4000F54F808191810E94164120E030E040E8FA\r
-:102E50005FE30E94FA4A9B01AC0169A17AA18BA1B0\r
-:102E60009CA10E94D74D87FD02C00C9434203AC02B\r
-:102E7000F7FC38C060915F04E62FF0E0EE0FFF1F13\r
-:102E8000E655F54F808191810E94164169A37AA38E\r
-:102E90008BA39CA360915F04E62FF0E0EE0FFF1F71\r
-:102EA000E255F54F808191810E9416419B01AC0152\r
-:102EB00069A17AA18BA19CA10E94FA4A0E94434C6D\r
-:102EC000AB01BC0177FF07C07095609550954195A7\r
-:102ED0005F4F6F4F7F4F443051056105710514F00E\r
-:102EE0000C9434203FEFC316D306E306F30611F427\r
-:102EF0000C944C20F7FE02C00C9439200E947821DB\r
-:102F00006C197D096031774210F40C944C200C94BC\r
-:102F1000392083E50E94DD0A882359F00E94C90AFE\r
-:102F20000E94434CCB010E94CA409093AD0A80930B\r
-:102F3000AC0A0E9478216B017C01E8EBF2E0A490DE\r
-:102F4000EBEBF2E0B490EFEBF2E014910AE06FC02B\r
-:102F50000E9478216C197D098E099F09693E734092\r
-:102F60008105910508F45FC060918202A62FB0E050\r
-:102F7000AA0FBB1FA655B54F8D919C910E9416417B\r
-:102F8000AB01BC018A2DE8EBF2E008C09091C000D3\r
-:102F900095FFFCCF8093C600319684918111F6CFC6\r
-:102FA00022E030E081E894E00E94FF248B2DEBEBDF\r
-:102FB000F2E008C09091C00095FFFCCF8093C6005E\r
-:102FC000319684918111F6CF609182024AE050E0FF\r
-:102FD00070E081E894E00E943C24812FEFEBF2E066\r
-:102FE00008C09091C00095FFFCCF8093C600319639\r
-:102FF00084918111F6CF8091A80A9091A90A0E942C\r
-:10300000C943AB01BC0121E030E081E894E00E94BB\r
-:10301000FF248091C00085FFFCCF0093C6000E9472\r
-:1030200078216B017C010E94E24181E021D820914E\r
-:10303000AC0A3091AD0A8091A80A9091A90A821732\r
-:1030400093070CF485CF0C94422083E50E94DD0A9F\r
-:103050008823F1F00E94C90A20E030E0A9010E9413\r
-:10306000D44B87FD0FC00E94C90A20E030E04FE733\r
-:1030700053E40E94D74D18163CF00E94C90A0E94E2\r
-:10308000484C03C060E001C06FEF6093810208C547\r
-:103090008FEF8093810204C51092810201C51092C6\r
-:1030A000A502FEC481E08093A502FAC483E50E94D4\r
-:1030B000DD0A882399F00E94C90A20E030E04AE73F\r
-:1030C00054E40E94A94E0E94484C609319017093E9\r
-:1030D0001A0180931B0190931C01E2C488E50E94B1\r
-:1030E000DD0A8111EDC789E50E94DD0A8111E8C77B\r
-:1030F0008AE50E94DD0A8111E3C785E40E94DD0AAA\r
-:103100008111DEC7D7C75A9889E50E94DD0A81116F\r
-:103110005A988AE50E94DD0A882309F4C1C45A98A6\r
-:10312000BFC483E50E94DD0A0E94C90A20E030E0A6\r
-:103130004AE754E40E94A94E0E94484C6093600400\r
-:10314000709361048093620490936304A9C428E19E\r
-:1031500032E03EA32DA3B5E22B2EBAE03B2E85E351\r
-:103160009AE098A38F8F19EE812E19E0912E10E02E\r
-:10317000EDA1FEA18191FEA3EDA30E94DD0A8823AB\r
-:1031800009F466C0133009F05CC00E94C90A6B01E3\r
-:103190007C0120E030E040EA51E40E94D44B87FFFC\r
-:1031A0004AC0A7019601F1016081718182819381FA\r
-:1031B0000E94DB4B762EA72EB82E092F762F272FB5\r
-:1031C0003A2D4B2D502F6091FD097091FE09809191\r
-:1031D000FF099091000A0E94A94E6093FD09709327\r
-:1031E000FE098093FF099093000A272D3A2D4B2D5D\r
-:1031F000502FEF8DF8A160817181828193810E94AF\r
-:10320000A94EEF8DF8A16083718382839383F401CB\r
-:1032100060817181828193810E94744C272D3A2DA7\r
-:103220004B2D502F0E94A94E0E94484CF401608300\r
-:10323000718382839383F101C082D182E282F3821F\r
-:1032400007C00E94C90AF10160837183828393835E\r
-:103250001F5FF4E02F0E311C2F8D38A12C5F3F4FE4\r
-:1032600038A32F8F34E0830E911C143009F080CFE7\r
-:1032700017C4E3ECF2E007C09091C00095FFFCCFCB\r
-:103280008093C600319684918111F6CF09C4EEE592\r
-:10329000F3E007C09091C00095FFFCCF8093C6007B\r
-:1032A000319684918111F6CF40918F025091900216\r
-:1032B000609191027091920222E030E081E894E006\r
-:1032C0000E94FF24E1E6F3E007C09091C00095FF63\r
-:1032D000FCCF8093C600319684918111F6CF409146\r
-:1032E000930250919402609195027091960222E0AF\r
-:1032F00030E081E894E00E94FF24E4E6F3E007C0B8\r
-:103300009091C00095FFFCCF8093C60031968491C8\r
-:103310008111F6CF409197025091980260919902E5\r
-:1033200070919A0222E030E081E894E00E94FF244C\r
-:10333000E7E6F3E007C09091C00095FFFCCF8093D3\r
-:10334000C600319684918111F6CF40919B02509135\r
-:103350009C0260919D0270919E0222E030E081E823\r
-:1033600094E00E94FF24EAE6F3E007C09091C000D9\r
-:1033700095FFFCCF8093C600319684918111F6CFE2\r
-:103380000E940F400E94764C2091250A3091260A17\r
-:103390004091270A5091280A0E94DB4BAB01BC01E7\r
-:1033A00022E030E081E894E00E94FF24E4E7F3E0CB\r
-:1033B00007C09091C00095FFFCCF8093C600319666\r
-:1033C00084918111F6CF81E00E940F400E94764CDB\r
-:1033D0002091290A30912A0A40912B0A50912C0AF7\r
-:1033E0000E94DB4BAB01BC0122E030E081E894E0BD\r
-:1033F0000E94FF24E7E7F3E007C09091C00095FF2B\r
-:10340000FCCF8093C600319684918111F6CF82E083\r
-:103410000E940F400E94764C20912D0A30912E0A76\r
-:1034200040912F0A5091300A0E94DB4BAB01BC0146\r
-:1034300022E030E081E894E00E94FF248091C00007\r
-:1034400085FFFCCF2AC380E001C081E00E9476396D\r
-:1034500027C3EAE7F3E007C09091C00095FFFCCFD7\r
-:103460008093C600319684918111F6CF189903C0DC\r
-:10347000E4E8F1E009C0E7E8F1E006C09091C0009F\r
-:1034800095FFFCCF8093C60081918111F7CFE1E8D1\r
-:10349000F3E007C09091C00095FFFCCF8093C60079\r
-:1034A000319684918111F6CF199903C0E4E8F1E0D7\r
-:1034B00009C0E7E8F1E006C09091C00095FFFCCF9D\r
-:1034C0008093C60081918111F7CFE8E8F3E007C04F\r
-:1034D0009091C00095FFFCCF8093C60031968491F7\r
-:1034E0008111F6CF1A9903C0E4E8F1E009C0E7E8DA\r
-:1034F000F1E006C09091C00095FFFCCF8093C6001C\r
-:1035000081918111F7CF8091C00085FFFCCFC5C2AA\r
-:10351000A8E1EA2EA2E0FA2E00E010E0F701819186\r
-:103520007F010E94DD0A882339F10E94C90AE5E182\r
-:10353000CE2EEAE0DE2EC00ED11E0E94484CF601CF\r
-:1035400060837183828393830E94C90AF9EECF2E30\r
-:10355000F9E0DF2EC00ED11EF801EB5DF54F2081A2\r
-:103560003181428153810E94A94E0E94484CF6014C\r
-:1035700060837183828393830C5F1F4F0031110539\r
-:1035800069F68EC208E112E065E3E62E6AE0F62EE7\r
-:10359000F80181918F010E94DD0A882339F00E9491\r
-:1035A000C90AF7016083718382839383F4E0EF0E8D\r
-:1035B000F11C22E00C31120759F772C283E50E9418\r
-:1035C000DD0A882351F00E94C90A60930D0A7093A6\r
-:1035D0000E0A80930F0A9093100A84E50E94DD0A78\r
-:1035E000882309F45DC20E94C90A6093090A709396\r
-:1035F0000A0A80930B0A90930C0A52C283E50E9438\r
-:10360000DD0A882351F00E94C90A6093110A709361\r
-:10361000120A8093130A9093140A84E50E94DD0A2B\r
-:10362000882351F00E94C90A6093F9097093FA093E\r
-:103630008093FB099093FC0982E40E94DD0A8823B1\r
-:1036400061F00E94C90A0E94484C6093450A709339\r
-:10365000460A8093470A9093480A88E50E94DD0A4B\r
-:10366000882351F00E94C90A6093050A7093060AE4\r
-:103670008093070A9093080A8AE50E94DD0A88234E\r
-:1036800051F00E94C90A6093010A7093020A809364\r
-:10369000030A9093040A85E40E94DD0A882309F452\r
-:1036A000FFC10E94C90A6093FD097093FE098093CF\r
-:1036B000FF099093000AF4C108E112E053E8E52EF7\r
-:1036C00052E0F52EF80181918F010E94DD0A8823D6\r
-:1036D00039F00E94C90AF701608371838283938362\r
-:1036E000F4E0EF0EF11C22E00B31120759F7D8C1BC\r
-:1036F00083E50E94DD0A882309F4D2C10E94C90A29\r
-:103700000E94434C709303016093020181E0809317\r
-:103710009F02C6C183E50E94DD0A882309F4C0C167\r
-:103720000E94C90A0E94434C7093010160930001FA\r
-:10373000B7C180E50E94DD0A882351F00E94C90AC2\r
-:1037400060932E0170932F0180933001909331018B\r
-:1037500089E40E94DD0A882381F00E94C90A25E9D4\r
-:103760003FEB46ED5DE30E94A94E60932A01709302\r
-:103770002B0180932C0190932D0184E40E94DD0A9B\r
-:10378000882381F00E94C90A25E93FEB46ED5DE3FD\r
-:103790000E94DB4B609326017093270180932801E0\r
-:1037A0009093290183E40E94DD0A882351F00E944E\r
-:1037B000C90A60932201709323018093240190939E\r
-:1037C00025010E942940E0EEF1E006C09091C00082\r
-:1037D00095FFFCCF8093C60081918111F7CFE3EE76\r
-:1037E000F1E006C09091C00095FFFCCF8093C60029\r
-:1037F00081918111F7CF40912E0150912F0160915D\r
-:1038000030017091310122E030E081E894E00E94C3\r
-:10381000FF24E7EEF1E006C09091C00095FFFCCFD9\r
-:103820008093C60081918111F7CF25E93FEB46EDEA\r
-:103830005DE360912A0170912B0180912C019091A0\r
-:103840002D010E94DB4BAB01BC0122E030E081E89E\r
-:1038500094E00E94FF24EBEEF1E006C09091C000DE\r
-:1038600095FFFCCF8093C60081918111F7CF25E9A8\r
-:103870003FEB46ED5DE36091260170912701809159\r
-:103880002801909129010E94A94EAB01BC0122E0C0\r
-:1038900030E081E894E00E94FF24EFEEF1E006C002\r
-:1038A0009091C00095FFFCCF8093C600819181115B\r
-:1038B000F7CF25E93FEB46ED5DE360912201709182\r
-:1038C000230180912401909125010E94A94EAB0112\r
-:1038D000BC0122E030E081E894E00E94FF24809166\r
-:1038E000C00085FFFCCFD9C081E00E94B038D8C0AD\r
-:1038F00083E50E94DD0A882319F00E94C90A04C0EA\r
-:1039000060E070E086E193E40E94E744C9C00E9451\r
-:10391000B63FC6C080E001C081E00E941C08C0C064\r
-:10392000109280028091640490916504A0916604D5\r
-:10393000B091670480933A0490933B04A0933C04B5\r
-:10394000B0933D040E94170BABC084E50E94DD0AD2\r
-:10395000882309F461C00E94C90A0E94484C609300\r
-:103960005F04662389F1EBEBF0E007C09091C000A3\r
-:1039700095FFFCCF8093C600319684918111F6CFDC\r
-:10398000E3EFF1E006C09091C00095FFFCCF80937B\r
-:10399000C60081918111F7CF40E050E060915F0453\r
-:1039A00081E894E02DD7E5EFF1E006C09091C000EA\r
-:1039B00095FFFCCF8093C60081918111F7CF809154\r
-:1039C000C00085FFFCCF69C010928202EBEBF0E0F3\r
-:1039D00007C09091C00095FFFCCF8093C600319640\r
-:1039E00084918111F6CFE6E0F2E006C09091C0002C\r
-:1039F00095FFFCCF8093C60081918111F7CF609134\r
-:103A000082024AE050E070E081E894E035D780918E\r
-:103A1000C00085FFFCCF41C0EBEBF0E007C0909108\r
-:103A2000C00095FFFCCF8093C60031968491811130\r
-:103A3000F6CFEFE8F3E007C09091C00095FFFCCF10\r
-:103A40008093C600319684918111F6CF80912E0427\r
-:103A500090912F0420E6289FF001299FF00D11245A\r
-:103A6000E655FD4F06C09091C00095FFFCCF8093B6\r
-:103A7000C60081918111F7CFE1EAF3E007C0909190\r
-:103A8000C00095FFFCCF8093C600319684918111D0\r
-:103A9000F6CF8091C00085FFFCCF8AE08093C600FE\r
-:103AA0000E94F80A42C310928F0210929002109264\r
-:103AB000910210929202109293021092940210922C\r
-:103AC0009502109296022BE932E047E952E063E951\r
-:103AD00072E08FE892E00E94FC3780E090ECA9E968\r
-:103AE000B3EC8093460490934704A0934804B093AA\r
-:103AF000490480934A0490934B04A0934C04B093E0\r
-:103B00004D0420910401309105014091060150912E\r
-:103B1000070120931401309315014093160150932F\r
-:103B20001701C0900801D0900901E0900A01F090BF\r
-:103B30000B01C701B6010E94D44B87FF02C00C9451\r
-:103B4000C5110C94CD1110928F0210929002109218\r
-:103B50009102109292022BE932E047E952E063E9C8\r
-:103B600072E08FE892E00E94FC3780E090ECA9E9D7\r
-:103B7000B3EC8093460490934704A0934804B09319\r
-:103B800049046091040170910501809106019091B2\r
-:103B900007016093140170931501809316019093AF\r
-:103BA000170120E030E040E752E40E94DB4B42E89E\r
-:103BB000C42E42E0D42E7B018C0122E534E04EE499\r
-:103BC00054E06AE474E086E494E00E947C2D0E9454\r
-:103BD000B63F10928F0210929002109291021092B2\r
-:103BE00092022BE932E047E952E063E972E08FE8A4\r
-:103BF00092E00E94FC3780E090E0A0EAB0E480937D\r
-:103C0000460490934704A0934804B093490420E0ED\r
-:103C100030E040E752E46091140170911501809109\r
-:103C20001601909117010E94DB4B7B018C0122E56C\r
-:103C300034E04EE454E06AE474E086E494E00E94E8\r
-:103C40007C2D0E94B63F80E090E0A0E2B1EC809332\r
-:103C5000460490934704A0934804B093490420E09D\r
-:103C600030E040E05FE360910401709105018091D4\r
-:103C70000601909107010E94A94EFB01462F5F2F7C\r
-:103C8000682F792F4093140150931501609316010A\r
-:103C90007093170120E030E040E752E4BF010E943A\r
-:103CA000DB4B7B018C0122E534E04EE454E06AE416\r
-:103CB00074E086E494E00E947C2D0E94B63F10924E\r
-:103CC0008F02109290021092910210929202109222\r
-:103CD000460410924704109248041092490410922E\r
-:103CE00014011092150110921601109217010E94F2\r
-:103CF0006F390C9457121092930210929402109202\r
-:103D00009502109296022BE932E047E952E063E90E\r
-:103D100072E08FE892E00E94FC3780E090ECA9E925\r
-:103D2000B3EC80934A0490934B04A0934C04B0935B\r
-:103D30004D04609108017091090180910A019091F0\r
-:103D40000B016093140170931501809316019093F9\r
-:103D5000170120E030E040E752E40E94DB4B32E8FC\r
-:103D6000C32E32E0D32E7B018C0122E534E04EE4F9\r
-:103D700054E06AE474E086E494E00E947C2D0E94A2\r
-:103D8000B63F1092930210929402109295021092F4\r
-:103D900096022BE932E047E952E063E972E08FE8EE\r
-:103DA00092E00E94FC3780E090E0A0EAB0E48093CB\r
-:103DB0004A0490934B04A0934C04B0934D0420E02C\r
-:103DC00030E040E752E46091140170911501809158\r
-:103DD0001601909117010E94DB4B7B018C0122E5BB\r
-:103DE00034E04EE454E06AE474E086E494E00E9437\r
-:103DF0007C2D0E94B63F80E090E0A0E2B1EC809381\r
-:103E00004A0490934B04A0934C04B0934D0420E0DB\r
-:103E100030E040E05FE3609108017091090180911A\r
-:103E20000A0190910B010E94A94EFB01462F5F2FC2\r
-:103E3000682F792F40931401509315016093160158\r
-:103E40007093170120E030E040E752E4BF010E9488\r
-:103E5000DB4B7B018C0122E534E04EE454E06AE464\r
-:103E600074E086E494E00E947C2D0E94B63F10929C\r
-:103E70009302109294021092950210929602109260\r
-:103E80004A0410924B0410924C0410924D0410926C\r
-:103E900014011092150110921601109217010E9440\r
-:103EA0006F390C946112109297021092980210923E\r
-:103EB000990210929A022BE932E047E952E063E955\r
-:103EC00072E08FE892E00E94FC3780E090E0A4E38B\r
-:103ED000B3EC80934E0490934F04A0935004B0939E\r
-:103EE000510460910C0170910D0180910E0190912F\r
-:103EF0000F01609314017093150180931601909344\r
-:103F0000170120E030E040E752E40E94DB4B22E85A\r
-:103F1000C22E22E0D22E7B018C0122E534E04EE459\r
-:103F200054E06AE474E086E494E00E947C2D0E94F0\r
-:103F3000B63F109297021092980210929902109236\r
-:103F40009A022BE932E047E952E063E972E08FE838\r
-:103F500092E00E94FC3780E090E0A0E8BFE380930D\r
-:103F60004E0490934F04A0935004B093510420E06A\r
-:103F700030E040E752E460911401709115018091A6\r
-:103F80001601909117010E94DB4B7B018C0122E509\r
-:103F900034E04EE454E06AE474E086E494E00E9485\r
-:103FA0007C2D0E94B63F80E090E0A0E0B0EC8093D2\r
-:103FB0004E0490934F04A0935004B093510420E01A\r
-:103FC00030E040E05FE360910C0170910D01809161\r
-:103FD0000E0190910F010E94A94EFB01462F5F2F09\r
-:103FE000682F792F409314015093150160931601A7\r
-:103FF0007093170120E030E040E752E4BF010E94D7\r
-:10400000DB4B7B018C0122E534E04EE454E06AE4B2\r
-:1040100074E086E494E00E947C2D0E94B63F1092EA\r
-:104020009702109298021092990210929A0210929E\r
-:104030004E0410924F0410925004109251041092AA\r
-:1040400014011092150110921601109217010E948E\r
-:104050006F390C946B120E94C90A0E94434C8B0169\r
-:10406000ECE1F2E00C94861443D16B017C010C94DA\r
-:1040700072173ED160935B0470935C0480935D047F\r
-:1040800090935E0435D160933E0470933F04809317\r
-:1040900040049093410404CD2BD1681979098A0911\r
-:1040A0009B09693E73408105910510F00C947616CA\r
-:1040B0000C94F6160E94B63F5A980E942340F0CC0A\r
-:1040C0000E94B63F88E50E94DD0A81111CC81CC809\r
-:1040D000E62FF0E0EE0FFF1FE655F54F808191814E\r
-:1040E0000E94164169A37AA38BA39CA360915F04ED\r
-:1040F000E62FF0E0EE0FFF1FE255F54F8081918132\r
-:104100000E94164120E030E040E85FE30E94FB4A55\r
-:104110009B01AC0169A17AA18BA19CA10E94D44B07\r
-:1041200018160CF0A1CF0C947217A6960FB6F8943F\r
-:10413000DEBF0FBECDBFDF91CF911F910F91FF90DA\r
-:10414000EF90DF90CF90BF90AF909F908F907F9037\r
-:104150006F905F904F903F902F9008958091A602AE\r
-:104160009091A702039714F40E94420B8091A6023B\r
-:104170009091A702892BC1F00E949B108091A6020A\r
-:104180009091A70201979093A7028093A602809135\r
-:104190002E0490912F04019664E070E00E948E4FEF\r
-:1041A00090932F0480932E040E94E24181E00E94AC\r
-:1041B00038100C94B3380E94BB4480918002811166\r
-:1041C00034C081E08093800280913A0490913B0456\r
-:1041D000A0913C04B0913D048093640490936504E5\r
-:1041E000A0936604B0936704E5E7F1E007C09091FF\r
-:1041F000C00095FFFCCF8093C60031968491811159\r
-:10420000F6CFEFECF3E007C09091C00095FFFCCF34\r
-:104210008093C600319684918111F6CF8091C000C1\r
-:1042200085FFFCCF8AE08093C600089580918002CC\r
-:104230000895E82FF0E0E95BFB4FE491E650E230AF\r
-:1042400060F48091B1008C7F8093B1008091B100C7\r
-:1042500067707727862B8093B10008959FD00E94C6\r
-:104260002D097CDFFECF1F920F920FB60F92112403\r
-:104270002F933F938F939F93AF93BF938091780435\r
-:1042800090917904A0917A04B0917B0430918004DC\r
-:10429000232F2A592D3720F02D570196A11DB11D2E\r
-:1042A000209380048093780490937904A0937A04F7\r
-:1042B000B0937B0480917C0490917D04A0917E0456\r
-:1042C000B0917F040196A11DB11D80937C04909351\r
-:1042D0007D04A0937E04B0937F04BF91AF919F9122\r
-:1042E0008F913F912F910F900FBE0F901F901895B7\r
-:1042F0000F931F938FB7F89400917804109179046D\r
-:1043000020917A0430917B048FBFB801C9011F91BD\r
-:104310000F9108959FB7F89440917C0450917D04CB\r
-:1043200060917E0470917F0486B5A89B06C08F3F84\r
-:1043300021F04F5F5F4F6F4F7F4F9FBF2227342F7A\r
-:10434000452F562F280F311D411D511DA3E0B0E010\r
-:104350000C946F4FCF92DF92EF92FF92CF93DF9347\r
-:104360006B017C01D7DFEB010DC0D4DF6C1B7D0B33\r
-:10437000683E734038F081E0C81AD108E108F108BE\r
-:10438000C851DC4FC114D104E104F10471F7DF918D\r
-:10439000CF91FF90EF90DF90CF900895789484B5FF\r
-:1043A000826084BD84B5816084BD85B5826085BD31\r
-:1043B00085B5816085BDEEE6F0E080818160808317\r
-:1043C000E1E8F0E0108280818260808380818160FA\r
-:1043D0008083E0E8F0E0808181608083E1EBF0E0C1\r
-:1043E000808184608083E0EBF0E080818160808365\r
-:1043F000EAE7F0E08081846080838081826080834E\r
-:104400008081816080838081806880831092C10078\r
-:1044100008951F93CF93DF93182FEB0161E082D0B3\r
-:10442000209711F460E004C0CF3FD10531F461E082\r
-:10443000812FDF91CF911F9191C0E12FF0E0E95BD7\r
-:10444000FB4FE491E330B9F028F4E13051F0E23071\r
-:10445000B1F50CC0E63019F1E73049F1E43079F5F7\r
-:1044600014C084B5806884BDC7BD2EC084B5806289\r
-:1044700084BDC8BD29C08091800080688093800081\r
-:10448000D0938900C09388001FC080918000806213\r
-:1044900080938000D0938B00C0938A0015C08091D8\r
-:1044A000B00080688093B000C093B3000DC08091CD\r
-:1044B000B00080628093B000C093B40005C0C038E3\r
-:1044C000D1050CF0B4CFAECFDF91CF911F910895FD\r
-:1044D000833069F028F48130A1F0823011F514C0E6\r
-:1044E0008630B1F08730C1F08430D9F404C08091B7\r
-:1044F00080008F7703C0809180008F7D8093800043\r
-:10450000089584B58F7702C084B58F7D84BD0895EA\r
-:104510008091B0008F7703C08091B0008F7D809331\r
-:10452000B000089590E0FC01E959FB4F2491FC0193\r
-:10453000E957FB4FE491EE2381F0F0E0E455FB4FA7\r
-:10454000A491B0E09FB7F8948C91611103C02095BD\r
-:10455000822301C0822B8C939FBF08950F931F93DA\r
-:10456000CF93DF931F92CDB7DEB7A82FB0E0FD0148\r
-:10457000E95BFB4F8491FD01E959FB4F1491FD016B\r
-:10458000E957FB4F04910023B1F0882319F06983A8\r
-:104590009FDF6981E02FF0E0E955FB4FA491B0E087\r
-:1045A0009FB7F8948C91611103C01095812301C0CD\r
-:1045B000812B8C939FBF0F90DF91CF911F910F9113\r
-:1045C00008951F920F920FB60F9211242F933F93CD\r
-:1045D0004F935F936F938F939F93EF93FF936091AC\r
-:1045E000C6002091020530910305C90101968F771D\r
-:1045F000992740910405509105058417950741F0CE\r
-:10460000F901EE57FB4F60839093030580930205F9\r
-:10461000FF91EF919F918F916F915F914F913F919A\r
-:104620002F910F900FBE0F901F9018959A01AB011C\r
-:1046300082E08093C00060E47BE48CE490E00E9420\r
-:10464000C34F2150310941095109CA01B90122E082\r
-:1046500030E040E050E00E94C34F832F99278093C1\r
-:10466000C5002093C400E1ECF0E08081806180838C\r
-:1046700080818860808380818068808308958091B4\r
-:104680000405909105052091020530910305281736\r
-:10469000390769F0FC01EE57FB4F208101968F77B7\r
-:1046A0009927909305058093040530E002C02FEF11\r
-:1046B0003FEFC901089580910405909105059093FD\r
-:1046C00003058093020508956F927F928F929F92C7\r
-:1046D000AF92BF92CF92DF92EF92FF920F931F9310\r
-:1046E000CF93DF93CDB7DEB7A0970FB6F894DEBFB8\r
-:1046F0000FBECDBF8C014115510561057105C1F497\r
-:1047000040E050E060E3A0960FB6F894DEBF0FBE25\r
-:10471000CDBFDF91CF911F910F91FF90EF90DF9070\r
-:10472000CF90BF90AF909F908F907F906F90ABC0D5\r
-:1047300066246394712C6C0E7D1EC12CD12C7601E5\r
-:10474000822E912CA12CB12CCB01BA01A501940190\r
-:104750000E94A14FFA01D3016D933D01BFEFCB1A27\r
-:10476000DB0AEB0AFB0AA901BF01411551056105EE\r
-:10477000710551F781E0C81AD108E108F10815C0A8\r
-:10478000E1E0F0E0EC0FFD1FEC0DFD1D60816A30F3\r
-:1047900010F4605D01C0695C40E050E0C80173D076\r
-:1047A000A1E0CA1AD108E108F108BFEFCB16DB0679\r
-:1047B000EB06FB0629F7A0960FB6F894DEBF0FBEF6\r
-:1047C000CDBFDF91CF911F910F91FF90EF90DF90C0\r
-:1047D000CF90BF90AF909F908F907F906F900895F3\r
-:1047E0002115310539F48091C00085FFFCCF40933D\r
-:1047F000C600089569CF9A01AB0160E070E0F0CF88\r
-:104800009A01462F50E060E070E0EACFCF92DF924D\r
-:10481000EF92FF92CF93DF93EC016A017B012115A8\r
-:10482000310539F48091C00085FFFCCFC092C600ED\r
-:104830001CC02A30310579F477FF0CC040E050E00D\r
-:104840006DE221D0F094E094D094C094C11CD11CAE\r
-:10485000E11CF11C2AE0B701A601CE01DF91CF9146\r
-:10486000FF90EF90DF90CF902FCFDF91CF91FF900F\r
-:10487000EF90DF90CF9008959A01AB01662757FD26\r
-:104880006095762FC3CF9A01462F50E060E070E02C\r
-:10489000BDCFCF93DF93EC0140E050E06DE0F3DF5C\r
-:1048A00040E050E06AE0CE01DF91CF91ECCFCF93B2\r
-:1048B000DF93EC01A0DFCE01DF91CF91EACF8F92A1\r
-:1048C0009F92AF92BF92CF92DF92EF92FF920F939F\r
-:1048D0001F93CF93DF938C014A015B01C22F20E02D\r
-:1048E00030E0A901C501B4010E94D44B87FF09C083\r
-:1048F00040E050E06DE2C801C6DFB7FAB094B7F807\r
-:10490000B094D0E060E070E080E09FE307C020E07A\r
-:1049100030E040E251E40E94DB4BDF5FDC13F7CF75\r
-:10492000262F372F482F592FC501B4010E94FB4A6B\r
-:10493000D62EE72EF82ED92F0E94484C962EA72E61\r
-:10494000B82EC92E0E94744C9B01AC016D2D7E2D9A\r
-:104950008F2D9D2F0E94FA4AD62FF72EE82ED92EA2\r
-:104960002AE030E0492D5A2D6B2D7C2DC80138DF0F\r
-:10497000CC23B1F1E6E5F2E006C09091C00095FFCE\r
-:10498000FCCF8093C60081918111F7CF29C020E030\r
-:1049900030E040E251E46D2F7F2D8E2D9D2D0E9441\r
-:1049A000A94E6B017C017D2D9F2D0E94434C5B0124\r
-:1049B0004AE050E0C80160DFB501882777FD8095A7\r
-:1049C000982F0E94764C9B01AC016C2D7D2D8E2D75\r
-:1049D0009F2D0E94FA4AD62FF72EE82ED92EC150CD\r
-:1049E000C111D5CFDF91CF911F910F91FF90EF9023\r
-:1049F000DF90CF90BF90AF909F908F9008955FCF42\r
-:104A00002F923F924F925F926F927F928F929F92DE\r
-:104A1000AF92BF92CF92DF92EF92FF920F931F93CC\r
-:104A2000CF93DF93CDB7DEB7CA54D1090FB6F89450\r
-:104A3000DEBF0FBECDBF1C017E8B6D8B3A012BA359\r
-:104A40000EA3E8A6AEAABFAAC8AED9AE34E0239F93\r
-:104A500080011124400F511F5BAB4AABDA018D90EE\r
-:104A60009D90AD90BC90FC01E00FF11F2081318141\r
-:104A700042815381C501B4010E94FB4A6AAF7BAFFA\r
-:104A80008CAF9DAFEEA1B4E0EB9F700111249301B8\r
-:104A90002E0D3F1D3DAB2CABD9014D905D906D901F\r
-:104AA0007C90F101EE0DFF1D208131814281538107\r
-:104AB000C301B2010E94FB4A6EAF7FAF21968FAF58\r
-:104AC000219722969FAF2297E8A5B4E0EB9FC00103\r
-:104AD0001124F101E80FF91F2081318142815381B6\r
-:104AE0002B8F3C8F4D8F5E8FED89FE89E80FF91F6C\r
-:104AF00060817181828193810E94FA4A462F572FEB\r
-:104B0000682F792F498B5A8B6B8B7C8BAD89BE8933\r
-:104B10001C968D919D910D90BC91A02D8AA79BA76D\r
-:104B2000ACA7BDA7D1011C962D913D914D915C91F3\r
-:104B30001F972F8F38A349A35AA3B7FAB094B7F899\r
-:104B4000B09477FA709477F87094ED89FE89E00F4D\r
-:104B5000F11F7AAD6BAD9CAD8DAD272F362F492F50\r
-:104B6000582F60817181828193810E94FA4A6F8BF4\r
-:104B7000788F898F9DA3ED89FE89EE0DFF1D7EAD97\r
-:104B80006FAD21969FAD219722968FAD2297272F4B\r
-:104B9000362F492F582F60817181828193810E9425\r
-:104BA000FA4A162F072F382E292E7F89688D998D66\r
-:104BB0008DA1272F362F492F582FC501B4010E94F0\r
-:104BC000A94E6B017C01B801C101272F362F492F57\r
-:104BD000582FC301B2010E94A94E9B01AC01C7012D\r
-:104BE000B6010E94FB4A6B017C01B801C101272F6D\r
-:104BF000362F492F582FC501B4010E94A94E6EA728\r
-:104C00007FA788AB99AB7F89688D998D8DA1272F60\r
-:104C1000362F492F582FC301B2010E94A94E9B0184\r
-:104C2000AC016EA57FA588A999A90E94FA4AA7019F\r
-:104C300096010E946E4B362E272E182F092F20E04A\r
-:104C400030E0A901D101F8016B2F7A2F8F2F9E2F11\r
-:104C50000E94D44B87FF10C02BED3FE049EC50E49D\r
-:104C6000D101F8016B2F7A2F8F2F9E2F0E94FB4AC4\r
-:104C7000362E272E182F092FA4968FADA4978823A0\r
-:104C800081F02BED3FE049EC50E4D101F8016B2FAE\r
-:104C9000722D8F2F902F0E94FA4A362E272E182F12\r
-:104CA000092FC988DA88EB88FC88E894F7F8A3967E\r
-:104CB0002CAD3DAD4EAD5FADA397D101F8016B2F8B\r
-:104CC000722D8F2F902F0E94A94EA70196010E944E\r
-:104CD000E44D6B017C012FE632E143E85AE30E9488\r
-:104CE000D44B87FD79C2C701B6010E94B14C0E9426\r
-:104CF000484C7A8F698FFB01EF2B21F421E030E0E3\r
-:104D00003A8F298F498D5A8DBA0180E090E00E9438\r
-:104D1000744C6B017C019B01AC01D101F8016B2F3C\r
-:104D2000722D8F2F902F0E94DB4B6F8B788F1C0181\r
-:104D3000A701960169897A898B899C890E94DB4B3E\r
-:104D400024966FAF249725967FAF259726968FAF31\r
-:104D5000269727969FAF27972F8D38A149A15AA153\r
-:104D60006AA57BA58CA59DA50E94FA4AA70196017C\r
-:104D70000E94DB4B28966FAF289729967FAF299723\r
-:104D80002A968FAF2A972B969FAF2B9720E030E083\r
-:104D900040E05FE3BF89A88D6B2F7A2F822D932D82\r
-:104DA0000E94A94EBF89A88D2B2F3A2F422D532D3B\r
-:104DB0000E94A94E9B01AC0160E070E080E89FE397\r
-:104DC0000E94FA4A6DA37AA78EA723969FAF2397D6\r
-:104DD000CE010196FC01A8A554E0A59FE00DF11DB0\r
-:104DE00011242B8D3C8D4D8D5E8D2083318342832C\r
-:104DF00053832F8D38A149A15AA12D873E874F8714\r
-:104E0000588B198A41E050E05C8F4B8F81E090E035\r
-:104E10008C0F9D1FBBA1A4E0BA9F800D911D112492\r
-:104E200099A788A721E030E02C0F3D1F5EA144E048\r
-:104E3000549F200D311D11243FA32EA3FCA3EBA3EF\r
-:104E4000ABC1898989310CF050C07F89688D272FCB\r
-:104E5000362F422D532DC501B4010E94A94E6B017E\r
-:104E60007C017DA16AA59EA523968FAD2397272F50\r
-:104E7000362F492F582FC301B2010E94A94E9B0122\r
-:104E8000AC01C701B6010E94FB4A7B018C017DA1E8\r
-:104E90006AA59EA523968FAD2397272F362F492FDE\r
-:104EA000582FC501B4010E94A94E5B016C017F8996\r
-:104EB000688D272F362F422D532DC301B2010E943A\r
-:104EC000A94E9B01AC016A2D7B2D8C2D9D2D0E943E\r
-:104ED000FA4A862E972EA82EB92E99899F5F998B14\r
-:104EE0004E2C5F2C602E712E72C0AB8DBC8DBD011F\r
-:104EF00080E090E00E94744CBF89A88D2B2F3A2F40\r
-:104F0000422D532D0E94A94E7B018C017F2D802FB5\r
-:104F1000912F0E94D84B2B013C016E2D7F2D802FAD\r
-:104F2000912F0E940C4F698B7A8B8B8B9C8BEAA9FB\r
-:104F3000FBA980819181A281B3819C01AD01505870\r
-:104F40002F8F38A349A35AA3ACA9BDA9CD90DD905A\r
-:104F5000ED90FC90A30192016F8D78A189A19AA197\r
-:104F60000E94A94E4B015C0129893A894B895C89D1\r
-:104F7000C701B6010E94A94E9B01AC01C501B40155\r
-:104F80000E94FB4A862E972EA82EB92E29893A898F\r
-:104F90004B895C896F8D78A189A19AA10E94A94E45\r
-:104FA000698B7A8B8B8B9C8BA3019201C701B60115\r
-:104FB0000E94A94E9B01AC0169897A898B899C89E1\r
-:104FC0000E94FA4A462E572E682E792E198AA5017C\r
-:104FD0009401BAADABADFCADEDAD6B2F7A2F8F2F39\r
-:104FE0009E2F0E94FB4AE8A5F9A560837183828306\r
-:104FF0009383A3019201BEADAFAD2196FFAD219782\r
-:105000002296EFAD22976B2F7A2F8F2F9E2F0E9423\r
-:10501000FB4AAEA1BFA16D937D938D939C93139793\r
-:1050200024967FAD249725966FAD259726969FAD44\r
-:10503000269727968FAD2797272F362F492F582F42\r
-:10504000EBA1FCA160817181828193810E94FB4A66\r
-:10505000ABA1BCA16D937D938D939C9313972896E0\r
-:105060007FAD289729966FAD29972A969FAD2A97ED\r
-:105070002B968FAD2B97272F362F492F582F6D85C5\r
-:105080007E858F8598890E94FB4A6D877E878F87F2\r
-:10509000988B20E030E0A90169817A818B819C8125\r
-:1050A0000E94D44B87FF04C019821A821B821C8283\r
-:1050B00020E030E0A9016D817E818F8198850E947A\r
-:1050C000D44B87FF04C01D821E821F82188620E0F9\r
-:1050D00030E0A90169857A858B859C850E94D44B37\r
-:1050E00087FF04C019861A861B861C8620E030E0E4\r
-:1050F0004DE453E469817A818B819C810E94D74D74\r
-:10510000181644F480E090E0ADE4B3E489839A8318\r
-:10511000AB83BC8320E030E04DE453E46D817E81BD\r
-:105120008F8198850E94D74D181644F480E090E056\r
-:10513000ADE4B3E48D839E83AF83B88720E030E095\r
-:1051400040EF52E469857A858B859C850E94D74D16\r
-:10515000181644F480E090E0A0EFB2E489879A87C3\r
-:10516000AB87BC8794E6C92ED12CCC0EDD1EEEA8F1\r
-:10517000FFA808AD19AD9E01235F3F4FAE01475F09\r
-:105180005F4FBE016B5F7F4FCE010196B5D4EB8DB3\r
-:10519000FC8D3196FC8FEB8F2B8D3C8D498D5A8D7C\r
-:1051A0002417350708F44DCE2D893E89245F3F4FE3\r
-:1051B0004D895E89485F5F4F6D897E896C5F7F4F47\r
-:1051C00084E6C82ED12CCC0EDD1EEEA8FFA808ADBB\r
-:1051D00019AD8D899E8990D4C65BDF4F0FB6F894C8\r
-:1051E000DEBF0FBECDBFDF91CF911F910F91FF901A\r
-:1051F000EF90DF90CF90BF90AF909F908F907F9077\r
-:105200006F905F904F903F902F9008958F5F803107\r
-:1052100009F480E008952F923F924F925F926F922F\r
-:105220007F928F929F92AF92BF92CF92DF92EF9236\r
-:10523000FF920F931F93CF93DF93CDB7DEB768979D\r
-:105240000FB6F894DEBF0FBECDBF1C014A015B0153\r
-:1052500068017901DC01D8966D917D918D919C91C9\r
-:10526000DB970E94744C69837A838B839C83A501AE\r
-:1052700094010E94A94E0E94C14B0E94484C6D832C\r
-:105280007E838F839887A701960169817A818B81BC\r
-:105290009C810E94A94E0E94C14B0E94484C698784\r
-:1052A0007A878B879C872D813E814F81588528374F\r
-:1052B00031054105510540F488E790E0A0E0B0E0F9\r
-:1052C0008D839E83AF83B88729853A854B855C851E\r
-:1052D000283731054105510540F488E790E0A0E00A\r
-:1052E000B0E089879A87AB87BC87F101EC5BFF4F01\r
-:1052F0004080518062807380C301B2010E94764C6D\r
-:105300006B017C01D101DC966D917D918D919C9119\r
-:10531000DF970E94744C6D877E878F87988B20E083\r
-:1053200030E0A901C701B6010E94D44B882339F1AE\r
-:1053300029813A814B815C81CA01B9010E94A94E41\r
-:105340004B015C012D853E854F855889CA01B90105\r
-:105350000E94A94E9B01AC01C501B4010E94FA4A0A\r
-:105360004B015C01A7019601C701B6010E94FB4AEF\r
-:105370009B01AC01C501B4010E94DB4B04C060E09D\r
-:1053800070E080E090E00E94C14B0E94434C4B01D2\r
-:105390005C0166277727CB0164197509860997098F\r
-:1053A0000E94764C2B013C01F101E05CFF4F6081D3\r
-:1053B0007181828193810E94744C698B7A8B8B8B73\r
-:1053C0009C8B20E030E0A901C301B2010E94D44BC4\r
-:1053D000882379F129893A894B895C89CA01B90105\r
-:1053E0000E94A94E6D8B7E8B8F8B988F29813A817D\r
-:1053F0004B815C81CA01B9010E94A94E9B01AC019D\r
-:105400006D897E898F89988D0E94FA4A69837A8393\r
-:105410008B839C83A3019201C301B2010E94FB4ACA\r
-:105420009B01AC0169817A818B819C810E94DB4B5D\r
-:1054300004C060E070E080E090E00E94B14CD101D7\r
-:1054400050962D913D914D915C91539729833A83CC\r
-:105450004B835C8329013A01481859086A087B0884\r
-:105460000E94434C461A570A680A790A77FE6CC0B4\r
-:1054700020E030E0A901C701B6010E94D44B882387\r
-:1054800009F445C0A7019601C701B6010E94FB4A75\r
-:105490002B013C0169817A818B819C810E94744C33\r
-:1054A0009B01AC01C301B2010E94A94E2B013C013A\r
-:1054B0002D853E854F855889CA01B9010E94A94EA4\r
-:1054C0009B01AC01C301B2010E94FA4A2B013C01CD\r
-:1054D00029893A894B895C89CA01B9010E94A94E80\r
-:1054E0009B01AC01C301B2010E94FB4A4B015C016C\r
-:1054F00020E030E040E850E4C701B6010E94A94E28\r
-:105500009B01AC01C501B4010E94DB4B04C060E00B\r
-:1055100070E080E090E00E94C14B0E94434C4B0140\r
-:105520005C01B7FE03C0812C912C540129813A8182\r
-:105530004B815C8182169306A406B50610F04901E2\r
-:105540005A01412C512C32018FB7F894F101E45BE0\r
-:10555000FF4F9081911125C0D10154968D929D925B\r
-:10556000AD92BC925797480C591C6A1C7B1CF101E8\r
-:10557000408E518E628E738E2D813E814F81588573\r
-:10558000DC962D933D934D935C93DF97A05CBF4FCA\r
-:1055900029853A854B855C852D933D934D935C938E\r
-:1055A00013978FBF68960FB6F894DEBF0FBECDBFBE\r
-:1055B000DF91CF911F910F91FF90EF90DF90CF90EF\r
-:1055C000BF90AF909F908F907F906F905F904F9023\r
-:1055D0003F902F900895AF92BF92CF92DF92EF92BB\r
-:1055E000FF920F931F93CF93DF935B017A016115B5\r
-:1055F000710509F475C04115510509F471C0FB012D\r
-:1056000002A513A5D4A5C5A5CE01202F312F492F62\r
-:10561000582F66A177A180A591A50E94D44B88231D\r
-:1056200009F45EC0F50187A981114BC0F701C6A03E\r
-:10563000D7A0E0A4F1A4A7019601DE01602F712F8D\r
-:105640008B2F9A2F0E94D74D1816DCF5A7019601D3\r
-:10565000C701B6010E94A94E6B017C01F50182A928\r
-:1056600093A9A4A9B5A9BC01CD0190589B01AC0197\r
-:105670000E94FB4AF50126A537A540A951A90E9421\r
-:10568000A94E9B01AC01C701B6010E94FA4A0E94D3\r
-:10569000164F6B017C01762F272F3D2D4E2D5F2D50\r
-:1056A000FE01602F712F8F2F9E2F0E94D44B87FFFA\r
-:1056B00003C06801ED2EFC2E5C2D4D2D3E2D2F2DAF\r
-:1056C00003C0502F412F9E01852F942FA32FB22F5F\r
-:1056D000F50186A397A3A0A7B1A781E0F50186AB4A\r
-:1056E000DF91CF911F910F91FF90EF90DF90CF90BE\r
-:1056F000BF90AF900895CF92DF92FF920F931F93C8\r
-:10570000CF93DF931F92CDB7DEB7809108058091CC\r
-:1057100008052091070590E0821B91098F70992759\r
-:1057200004970CF12091080523502F7040E050E0C1\r
-:1057300000E010E08DE4F82E12C0211101C020E13C\r
-:105740002150F29E6001112489E095E0C80ED91E17\r
-:10575000B801C60129833FDFA80186012981809114\r
-:1057600007052813EACF0F90DF91CF911F910F917A\r
-:10577000FF90DF90CF9008952F923F924F925F92CB\r
-:105780006F927F928F929F92AF92BF92CF92DF9251\r
-:10579000EF92FF920F931F93CF93DF93EC011B01C6\r
-:1057A000009709F464C08FA9811161C08EA09FA0E9\r
-:1057B000A8A4B9A4FB01C6A0D7A0E0A4F1A42C2DF5\r
-:1057C0003D2D4E2D5F2DC501B4010E94D44B87FFA6\r
-:1057D0004EC0A5019401C501B4010E94A94E2B0140\r
-:1057E0003C018AA89BA8ACA8BDA8C501B4019058EB\r
-:1057F0009B01AC010E94FB4A2EA53FA548A959A9CF\r
-:105800000E94A94E9B01AC01C301B2010E94FA4A59\r
-:105810000E94164F8B01D82FC92F762FCE01272F2C\r
-:10582000312F492F582F6C2D7D2D8E2D9F2D0E94AD\r
-:10583000D44B87FF03C08601DE2DCF2DCE01202F54\r
-:10584000312F492F5C2F6C2D7D2D8E2D9F2D0E9489\r
-:10585000D44B882361F09E01802F912FA32FBC2F62\r
-:10586000F10186A397A3A0A7B1A781E086ABDF9142\r
-:10587000CF911F910F91FF90EF90DF90CF90BF904D\r
-:10588000AF909F908F907F906F905F904F903F90E0\r
-:105890002F900895EF92FF920F931F93CF93DF9372\r
-:1058A000F0900705C0E0D0E080E090E02DE4E22E2B\r
-:1058B0000DC0EF9C80011124075F1A4FA801BE01A3\r
-:1058C0005BDF8F2DA3DCF82ECE01E80120910805C7\r
-:1058D000F212EFCF40E050E0BE01DF91CF911F9177\r
-:1058E0000F91FF90EF9048CF4F925F926F927F920F\r
-:1058F0008F929F92AF92BF92CF92DF92EF92FF92E0\r
-:105900000F931F93CF93DF9350900705C0E0D0E033\r
-:105910003DE4432E34C0429E3001439E700C11245E\r
-:1059200089E095E0680E791E209729F18EA98111F2\r
-:1059300004C0F30186A98823F1F0CAA0DBA0ECA083\r
-:10594000FDA0A7019601F30166A177A180A591A50D\r
-:105950000E94DB4B4B015C01A70196016EA17FA168\r
-:1059600088A599A50E94DB4BAB01BC019501840180\r
-:10597000CE0151DC1EAA852D49DC582EE301252DD0\r
-:10598000332727FD30958091080590E028173907C7\r
-:1059900009F0C1CF2097E9F0CAA0DBA0ECA0FDA0E0\r
-:1059A000A70196016DEC7CEC8CE49DE30E94DB4B3F\r
-:1059B0004B015C01A70196016EA17FA188A599A565\r
-:1059C0000E94DB4BAB01BC0195018401CE0123DCBD\r
-:1059D0001EAADF91CF911F910F91FF90EF90DF9062\r
-:1059E000CF90BF90AF909F908F907F906F905F907F\r
-:1059F0004F90089580DE4EDF77CF10920805109209\r
-:105A0000070580E1E9EDF9E0DF011D928A95E9F7EC\r
-:105A10001092490A10924A0A10924B0A10924C0AAC\r
-:105A200010924D0A10924E0A10924F0A1092500A8C\r
-:105A30001092510A1092520A1092530A1092540A6C\r
-:105A40001092550A1092560A1092570A1092580A4C\r
-:105A50001092590A10925A0A10925B0A10925C0A2C\r
-:105A60000895CF939091070580910805981709F143\r
-:105A7000209107058DE4289FF0011124EF5AFA4F79\r
-:105A8000C08130E04DE410C0429FF0011124EF5A74\r
-:105A9000FA4F80819181A281B381892B8A2B8B2B34\r
-:105AA00009F03F5F2F5F2F70809108052813ECCF1E\r
-:105AB0000AC060918102662321F070E08EE00E94AE\r
-:105AC0000922C0E030E080918102811107C03111CC\r
-:105AD00005C060E070E08EE00E94092280918102A2\r
-:105AE000882341F0CC2331F06C2F70E08EE0CF9111\r
-:105AF0000C940922CF9108952F923F924F925F927A\r
-:105B00006F927F928F929F92AF92BF92CF92DF92CD\r
-:105B1000EF92FF920F931F93CF93DF93CDB7DEB732\r
-:105B2000CD56D1090FB6F894DEBF0FBECDBF2C0104\r
-:105B30003B014A015901EFA6FBAA0CAB19AFDEAE3F\r
-:105B4000CDAE8091080562DBAA968FAFAA97082F89\r
-:105B5000112707FD109505C00E94E24181E00E94D7\r
-:105B600038108091070590E080179107A9F32091E4\r
-:105B7000250A3091260A4091270A5091280AD2011D\r
-:105B80006D917D918D919C910E94A94E0E94794EBC\r
-:105B900060966FAF609761967FAF619762968FAFA7\r
-:105BA000629763969FAF63972091290A30912A0AE2\r
-:105BB00040912B0A50912C0AF301608171818281FE\r
-:105BC00093810E94A94E0E94794E64966FAF6497AC\r
-:105BD00065967FAF659766968FAF669767969FAF1E\r
-:105BE000679720912D0A30912E0A40912F0A5091EB\r
-:105BF000300AD4016D917D918D919C910E94A94EA6\r
-:105C00000E94794E68966FAF689769967FAF6997E3\r
-:105C10006A968FAF6A976B969FAF6B972091310A08\r
-:105C20003091320A4091330A5091340AF501608173\r
-:105C30007181828193810E94A94E0E94794E2296A1\r
-:105C40006FAF229723967FAF239724968FAF249729\r
-:105C500025969FAF25978091E5099091E609A0913F\r
-:105C6000E709B091E80925962CAD3DAD4EAD5FAD8D\r
-:105C70002597281739074A075B07C1F1609182020F\r
-:105C8000E62FF0E0EE0FFF1FE655F54F8081918182\r
-:105C90000E94164120E030E046E153E40E94D44BDC\r
-:105CA00087FF24C080910605811120C00C94D03755\r
-:105CB0009091C00095FFFCCF8093C60031968491EF\r
-:105CC0008111F6CFE7EBF4E007C09091C00095FF9B\r
-:105CD000FCCF8093C600319684918111F6CF8091DC\r
-:105CE000C00085FFFCCF8AE08093C6008091E50963\r
-:105CF0009091E609A091E709B091E80925962CADAD\r
-:105D00003DAD4EAD5FAD2597281B390B4A0B5B0BA4\r
-:105D1000CA01B90157FF07C09095809570956195AC\r
-:105D20007F4F8F4F9F4F0E94764C4B015C0120E0CC\r
-:105D300030E04DEC53E46091310A7091320A809169\r
-:105D4000330A9091340A0E94A94E9B01AC01C5010F\r
-:105D5000B4010E94D74D18167CF525968CAD9DADEB\r
-:105D6000AEADBFAD25978093E5099093E609A0936A\r
-:105D7000E709B093E809E1EBF4E007C09091C000B7\r
-:105D800095FFFCCF8093C600319684918111F6CFA8\r
-:105D9000E1EDF4E007C09091C00095FFFCCF809347\r
-:105DA000C600319684918111F6CF8091C00085FFA5\r
-:105DB000FCCF8AE08093C600809108059DE4899F0E\r
-:105DC00010011124A9E0B5E02A0E3B1EF101E45BAD\r
-:105DD000FF4F10822091D9093091DA094091DB09F7\r
-:105DE0005091DC092BA33CA34DA35EA363964CAC5E\r
-:105DF0005DAC6EAC7FAC6397421A530A640A750AB5\r
-:105E000077FE08C07094609450944094411C511CDB\r
-:105E1000611C711CD1014D925D926D927C92139721\r
-:105E20002091DD093091DE094091DF095091E009B0\r
-:105E30002FA338A749A75AA767968CAC9DACAEACE8\r
-:105E4000BFAC6797821A930AA40AB50AB7FE08C0C6\r
-:105E5000B094A09490948094811C911CA11CB11CBE\r
-:105E6000D10114968D929D92AD92BC92179720917C\r
-:105E7000E1093091E2094091E3095091E4092BA72F\r
-:105E80003CA74DA75EA76B964CAD5DAD6EAD7FADEB\r
-:105E90006B978BA59CA5ADA5BEA5481B590B6A0B9E\r
-:105EA0007B0B77FF07C070956095509541955F4FCC\r
-:105EB0006F4F7F4F142F052F26966FAF26977DAB20\r
-:105EC000D10118964C93189719965C9319971A96C6\r
-:105ED0006C931A971B967C93C090E509D090E609C5\r
-:105EE000E090E709F090E809A0910001B09101016C\r
-:105EF00025962CAD3DAD4EAD5FAD25972C193D09D6\r
-:105F00004E095F0957FF07C0509540953095219580\r
-:105F10003F4F4F4F5F4F0E94794F24E630E040E003\r
-:105F200050E00E94C34FF101248735874687578789\r
-:105F3000812F902F2696AFAD2697BDA9881599057C\r
-:105F4000AA05BB0514F4D501C40182179307A40761\r
-:105F5000B50714F4DA01C901930182014816590604\r
-:105F60006A067B0614F48C019D01D10150960D93B5\r
-:105F70001D932D933C935397063011052105310550\r
-:105F800010F40C94E237F101E85BFF4F809181023D\r
-:105F900090E0A0E0B0E080839183A283B383639616\r
-:105FA0002CAD3DAD4EAD5FAD63978BA19CA1ADA176\r
-:105FB000BEA1281739074A075B0724F0D101909644\r
-:105FC0001C9203C081E0F10180A367962CAD3DAD2A\r
-:105FD0004EAD5FAD67978FA198A5A9A5BAA5281763\r
-:105FE00039074A075B073CF4D10190968C91909752\r
-:105FF000826090968C936B962CAD3DAD4EAD5FADAF\r
-:106000006B978BA59CA5ADA5BEA5281739074A0798\r
-:106010005B073CF4D10190968C91909784609096A8\r
-:106020008C9325962CAD3DAD4EAD5FAD25972C15CF\r
-:106030003D054E055F053CF4D10190968C919097FB\r
-:10604000886090968C93EDADFEAD8081D1019196E4\r
-:106050008C9345284628472809F05A9AF1018481F3\r
-:106060009581A681B781892B8A2B8B2B09F05A9AAF\r
-:10607000F10180859185A285B385892B8A2B8B2B95\r
-:1060800009F05A9AF10184859585A685B785892BF3\r
-:106090008A2B8B2B09F05A9AD1011C962D913D9198\r
-:1060A0004D915C911F972F962CAF3DAF4EAF5FAFD8\r
-:1060B0002F97232B242B252BE9F44090F90950909E\r
-:1060C000FA096090FB097090FC09242D352D462DAE\r
-:1060D000572DBFA5ABA9FCA9E9AD6B2F7A2F8F2F48\r
-:1060E0009E2F0E94D44B87FD0EC04FA45BA86CA8C6\r
-:1060F00079AC09C04090110A5090120A6090130ABE\r
-:106100007090140AE2CF63966CAD7DAD8EAD9FADFD\r
-:1061100063972BA13CA14DA15EA1621B730B840B65\r
-:10612000950B0E94764C2091250A3091260A4091C9\r
-:10613000270A5091280A0E94DB4B6BA37FA78BABE9\r
-:106140009CAB362F272F982F8CA9432F522F692FC6\r
-:10615000782F498B5A8B6B8B7C8B67966CAD7DADA2\r
-:106160008EAD9FAD67972FA138A549A55AA5621B93\r
-:10617000730B840B950B0E94764C2091290A309169\r
-:106180002A0A40912B0A50912C0A0E94DB4B162FB1\r
-:10619000072F8FA399AF9801982F89AD432F522FC6\r
-:1061A000692F782F4D8B5E8B6F8B788F6B966CADD4\r
-:1061B0007DAD8EAD9FAD6B972BA53CA54DA55EA586\r
-:1061C000621B730B840B950B0E94764C20912D0A59\r
-:1061D00030912E0A40912F0A5091300A0E94DB4BD9\r
-:1061E0006BA77DAF26968FAF26979DAB362F272FB7\r
-:1061F000982F8DA9432F522F692F782F498F5A8FAF\r
-:106200006B8F7C8FA0900001B090010125966CAD42\r
-:106210007DAD8EAD9FAD25976C197D098E099F09C7\r
-:106220000E94764C2091310A3091320A4091330A13\r
-:106230005091340A0E94DB4B6B017C01B501882729\r
-:1062400077FD8095982F0E94764C9B01AC01C70189\r
-:10625000B6010E94A94E20E030E048EC52E40E94D2\r
-:10626000DB4B462F572F682F792FDB01CA014D8F4B\r
-:106270005E8F6F8F78A3F10180809180A280B380C0\r
-:10628000F6E08F169104A104B104DCF4F10144811D\r
-:1062900055816681778146305105610571058CF421\r
-:1062A00040855185628573854630510561057105CC\r
-:1062B00044F4AC01BD017F7746A757A760AB71AB33\r
-:1062C0003CC05BA14FA53BA92CA9652F742F832F40\r
-:1062D000922F0E94544F6B017C01A8013FA129AD70\r
-:1062E000652F702F832F922F0E94544F9B01AC017A\r
-:1062F000C701B6010E94FB4A162F072FF82EE92E80\r
-:106300005BA54DAD26963FAD26972DA9652F742F21\r
-:10631000832F922F0E94544F9B01AC01D801F701AB\r
-:106320006B2F7A2F8F2F9E2F0E94FB4A0E94164FB1\r
-:10633000F10166A777A780AB91ABD1019E962D9115\r
-:106340003D914D915C91D19729962CAF3DAF4EAFC9\r
-:106350005FAF299760E070E080E89FE30E94DB4B2D\r
-:106360009B01AC01642D752D862D972D0E94A94EA1\r
-:106370006FA77BAB8CAB9DAF909108058091070513\r
-:10638000E92FF0E0E81BF109EF70FF27FAAFE9AF62\r
-:10639000762F6BA99CA98DAD272F362F492F582F0B\r
-:1063A00060E074E284E799E40E94DB4B0E94794E3E\r
-:1063B0006BA37FA38C0129AD3AAD223031050CF4DB\r
-:1063C0004BC06901EE24D7FCE094FE2CC701B60156\r
-:1063D0000E94764C20E030E040E051E40E94D44B33\r
-:1063E00087FF3AC04BA05FA038018091450A909189\r
-:1063F000460AA091470AB091480A481659066A060B\r
-:106400007B0650F5BC01CD01641975098609970911\r
-:10641000660F771F881F991FA70196010E94A14F41\r
-:10642000CA01B9010E94744C0E94794EAB01BC01B3\r
-:10643000CB01BA01640D751D861D971D0E94744C19\r
-:106440009B01AC0160E074E284E799E40E94DB4BBD\r
-:106450006FA77BAB8CAB9DAF7FA56BA99CA98DADC6\r
-:10646000272F362F492F582F29966CAD7DAD8EAD35\r
-:106470009FAD29970E94A94EA6966FAFA697A796A3\r
-:106480007FAFA797A8968FAFA897A9969FAFA99718\r
-:10649000362F272F982FA9968FADA997432F522FCC\r
-:1064A000692F782FD10192964D935D936D937C93D4\r
-:1064B000959750966D917D918D919C9153970E94E7\r
-:1064C000744C6B017C017FA56BA99CA98DAD272F16\r
-:1064D000362F492F582FC701B6010E94A94E0E949E\r
-:1064E000C14B0E94484C6F966CAF7DAF8EAF9FAF93\r
-:1064F0006F97F10160AF71AF82AF93AF9E012F5ED6\r
-:106500003F4F3EAB2DABAE014F5F5F4F5CA74BA73C\r
-:1065100085E39AE0A5969FAF8EAFA597DE01919691\r
-:10652000BAA3A9A32B965FAF4EAF2B971BA21FA2B6\r
-:1065300000E81FE3EDA9FEA961917191819191910C\r
-:10654000FEABEDABBFA5ABA9FCA9EDAD2B2F3A2F50\r
-:106550004F2F5E2F0E94A94EAB01BC012B96AEAD12\r
-:10656000BFAD2B974D935D936D937D932B96BFAFEE\r
-:10657000AEAF2B97DB01CA01BF77A3968CAF9DAF5F\r
-:10658000AEAFBFAFA397A596AEADBFADA5974D90EB\r
-:106590005D906D907D90A596BFAFAEAFA597A3011E\r
-:1065A0009201A3966CAD7DAD8EAD9FADA3970E9479\r
-:1065B000D74D18160CF5A3962CAD3DAD4EAD5FAD85\r
-:1065C000A397C301B2010E94DB4B2B01782E692EE9\r
-:1065D000762FC301272F352D492F582FBBA1AFA1EF\r
-:1065E0006B2F7A2F802F912F0E94D44B87FD04C0F0\r
-:1065F0004BA25FA2072D162DEDA9FEA929A13AA154\r
-:10660000E217F30709F096CF20E030E040E85FE3BF\r
-:10661000BBA1AFA16B2F7A2F802F912F0E94D44B5B\r
-:1066200087FF53C03E0131E1630E711C7BA16FA156\r
-:10663000272F362F402F512FABA5BCA56D917D91F3\r
-:106640008D919C910E94A94EEBA5FCA5619371933D\r
-:1066500081939193FCA7EBA7E615F70539F77BA18A\r
-:106660006FA1272F362F402F512FA696BFADA6978B\r
-:10667000A796AFADA797A896FFADA897A996EFAD3F\r
-:10668000A9976B2F7A2F8F2F9E2F0E94A94ED10191\r
-:1066900092966D937D938D939C9395976F966CAD29\r
-:1066A0007DAD8EAD9FAD6F970E94744CBBA1AFA125\r
-:1066B0002B2F3A2F402F512F0E94A94E0E94484C59\r
-:1066C000F10160AF71AF82AF93AF29962CAD3DADB4\r
-:1066D0004EAD5FAD2997C701B6010E94DB4B162F67\r
-:1066E000072F8FA39BA781149104A104B10489F5FE\r
-:1066F000F10184819581A681B781892B8A2B8B2B0F\r
-:1067000041F580859185A285B385892B8A2B8B2BBA\r
-:1067100001F52091090A30910A0A40910B0A509123\r
-:106720000C0AD801FFA1EBA56B2F7A2F8F2F9E2F7C\r
-:106730000E94A94E0E94C14B7101F4E4EF0EF11CBE\r
-:106740000E94484CD7016D937D938D939C93139732\r
-:10675000FDC020910D0A30910E0A40910F0A509110\r
-:10676000100AD801FFA1EBA56B2F702F8F2F9E2F42\r
-:106770000E94A94E0E94C14B0E94484CF101EC5B63\r
-:10678000FF4FFCA3EBA360837183828393834090CC\r
-:10679000E9095090EA096090EB097090EC090E94B9\r
-:1067A000744C6FA778AB89AB9AABC501B4010E945A\r
-:1067B000764C9B01AC016FA578A989A99AA90E9482\r
-:1067C000A94EA70196010E94DB4B4B015C01C3015E\r
-:1067D000B2010E94744C9B01AC01C501B4010E943E\r
-:1067E000D74D181634F4EBA1FCA14082518262828D\r
-:1067F00073824090ED095090EE096090EF0970901F\r
-:10680000F009ABA1BCA16D917D918D919C910E94ED\r
-:10681000744C4B015C01F101648175818681978123\r
-:106820000E94764C9B01AC01C501B4010E94A94EA7\r
-:10683000A70196010E94DB4B4B015C01C301B20131\r
-:106840000E94744C9B01AC01C501B4010E94D74D5C\r
-:1068500018163CF4ABA1BCA14D925D926D927C9256\r
-:1068600013974090F5095090F6096090F7097090E1\r
-:10687000F809F101EC5BFF4FFCA3EBA36081718190\r
-:10688000828193810E94744C4B015C012F966CAD08\r
-:106890007DAD8EAD9FAD2F970E94764C9B01AC01D4\r
-:1068A000C501B4010E94A94EA70196010E94DB4BCD\r
-:1068B0004B015C01C301B2010E94744C9B01AC010D\r
-:1068C000C501B4010E94D74D18163CF4ABA1BCA180\r
-:1068D0004D925D926D927C9213974090F109509089\r
-:1068E000F2096090F3097090F409EBA1FCA16081BA\r
-:1068F0007181828193810E94744C4B015C01D101B2\r
-:1069000018966D917D918D919C911B970E94764C6C\r
-:106910009B01AC01C501B4010E94A94EA7019601DB\r
-:106920000E94DB4B6B017C01C301B2010E94744CDD\r
-:106930009B01AC01C701B6010E94D74D181634F473\r
-:10694000EBA1FCA14082518262827382F101EC5B77\r
-:10695000FF4F60817181828193810E94744C6B0131\r
-:106960007C01B8019FA18BA5272F302F492F582FCD\r
-:10697000C701B6010E94DB4B462F572F682F792F96\r
-:10698000AE964CAF5DAF6EAF7FAFAE97D101D296F2\r
-:106990004D935D936D937C93D5972DEB37E346E054\r
-:1069A00051E4C701B6010E94A94E0E94434CF10177\r
-:1069B000648F758F868F978F4090050A5090060AD6\r
-:1069C0006090070A7090080A29853A854B855C8596\r
-:1069D0006F962CAF3DAF4EAF5FAF6F978090010ABF\r
-:1069E0009090020AA090030AB090040A20E030E0E0\r
-:1069F00040E05FE3C501B4010E94A94E6BA37FA3F1\r
-:106A00008C016F966CAD7DAD8EAD9FAD6F979F770E\r
-:106A1000BBA1AFA12B2F3A2F402F512F0E94D74D52\r
-:106A200018165CF020E030E040E05FE3C301B20103\r
-:106A30000E94A94E6BA37FA38C01D1019296BC91B9\r
-:106A4000BBA7F101F3A1FFA7D1019496BC91BBAB09\r
-:106A5000F101F5A1FCAB7BA56FA5272F362F4B2F9E\r
-:106A60005F2FBBA1AFA16B2F7A2F802F912F0E9498\r
-:106A7000D44B87FD06C02BA52BA33FA53FA30BA995\r
-:106A80001CA98D859E85AF85B889A3968CAF9DAFD7\r
-:106A9000AEAFBFAFA397C090FD09D090FE09E090C4\r
-:106AA000FF09F090000A20E030E040E05FE3C7011A\r
-:106AB000B6010E94A94E6DAF7DAB2A968FAF2A9783\r
-:106AC0002C969FAF2C97A3966CAD7DAD8EAD9FADF0\r
-:106AD000A3979F77BDADADA92A96FFAD2A972C96B7\r
-:106AE000EFAD2C972B2F3A2F4F2F5E2F0E94D74DB3\r
-:106AF000181604F57DAD6DA92A969FAD2A972C96A0\r
-:106B00008FAD2C97272F362F492F582FBBA1AFA120\r
-:106B10006B2F7A2F802F912F0E94D44B87FD0AC0B4\r
-:106B20009DAD9BA3ADA9AFA32A960FAD2A972C9636\r
-:106B30001FAD2C97E9ADFAAD32970CF434C127E1C3\r
-:106B400037EB41ED58E36091590A70915A0A8091F0\r
-:106B50005B0A90915C0A0E94D74D18160CF023C175\r
-:106B60002091490A30914A0A40914B0A50914C0AAF\r
-:106B700029AF3AAF4BAF5CAF69817A818B819C8141\r
-:106B80000E94FA4A6DAB2A967FAF2A972C968FAF58\r
-:106B90002C97A4969FAFA49780914D0A90914E0A8E\r
-:106BA000A0914F0AB091500A21968CAF9DAFAEAF25\r
-:106BB000BFAF21979C01AD016D817E818F8198854A\r
-:106BC0000E94FA4AA6966FAFA697A7967FAFA7979F\r
-:106BD000A8968FAFA897A9969FAFA9977DA92A9647\r
-:106BE0006FAD2A972C969FAD2C97A4968FADA49746\r
-:106BF000272F362F492F582FDB01FC016B2F7A2FBF\r
-:106C00008F2F9E2F0E94A94E6DAB7EAB8FAB98AF9E\r
-:106C1000A6967FADA697A7966FADA797A8969FADAE\r
-:106C2000A897A9968FADA997272F362F492F582FB0\r
-:106C3000DB01FC016B2F7A2F8F2F9E2F0E94A94E14\r
-:106C40009B01AC016DA97EA98FA998AD0E94FB4A5A\r
-:106C50000E94164F6DAB7EAB8FAB98AF69AD7AAD2E\r
-:106C60008BAD9CAD9F7727E137EB41ED58E30E9458\r
-:106C7000D74D181684F021966CAD7DAD8EAD9FADCD\r
-:106C800021979F7727E137EB41ED58E30E94D74DDD\r
-:106C9000181634F00BC09BA59BA3AFA5AFA304C0EF\r
-:106CA000BBA5BBA3EFA5EFA30BA91CA9A301920150\r
-:106CB0006DA97EA98FA998AD0E94D74D1816ACF486\r
-:106CC0002DA93EA94FA958ADC301B2010E94DB4BCB\r
-:106CD0009B01AC01BBA1AFA16B2F7A2F802F912F0D\r
-:106CE0000E94A94E6BA37FA38C012091510A309181\r
-:106CF000520A4091530A5091540A6F966CAD7DAD83\r
-:106D00008EAD9FAD6F970E94FA4A2B013C01E8942B\r
-:106D100077F8A5019401C301B2010E94D74D18165E\r
-:106D20009CF4A3019201C501B4010E94DB4B9B01BD\r
-:106D3000AC01BBA1AFA16B2F7A2F802F912F0E94A6\r
-:106D4000A94E6BA37FA38C012091550A3091560A5E\r
-:106D50004091570A5091580AA3966CAD7DAD8EAD07\r
-:106D60009FADA3970E94FA4A4B015C01E894B7F8E3\r
-:106D7000A7019601C501B4010E94D74D18169CF4D5\r
-:106D8000A5019401C701B6010E94DB4B9B01AC0138\r
-:106D9000BBA1AFA16B2F7A2F802F912F0E94A94EFC\r
-:106DA0006BA37FA38C013BA12FA1432F522F602FF8\r
-:106DB000712FD1019A964D935D936D937C939D971E\r
-:106DC000AE966CAD7DAD8EAD9FADAE9790589B01EC\r
-:106DD000AC010E94FB4A29962CAD3DAD4EAD5FAD96\r
-:106DE00029970E94A94E9B01AC016BE077ED83E2ED\r
-:106DF0009BE30E94FA4A0E94164F6B01F82EE92E7F\r
-:106E0000762FC701272F3D2D492F582FBBA1AFA1AA\r
-:106E10006B2F7A2F802F912F0E94D44B87FD04C0B7\r
-:106E2000CBA2DFA20F2D1E2D3BA12FA1432F522F4E\r
-:106E3000602F712FF10146A357A360A771A7C70167\r
-:106E40002C2D3D2D492F5E2DBBA5AFA5FBA9ECA98F\r
-:106E50006B2F7A2F8F2F9E2F0E94D44B18162CF059\r
-:106E600081E0D101D7968C9302C0F10117AA81E08D\r
-:106E7000D101D6968C9380E1FE013196A9E4BAE067\r
-:106E800001900D928A95E1F73BA52FA59BA98CA9AE\r
-:106E9000432F522F692F782F4093590A50935A0A43\r
-:106EA00060935B0A70935C0A232F352F492F582F6C\r
-:106EB0006DEC7CEC8CE49DE30E94DB4B6B017C0170\r
-:106EC0007BA56FA59BA98CA9272F362F492F582F5B\r
-:106ED000BBA1AFA16B2F7A2F802F912F0E94DB4B8C\r
-:106EE000AB01BC0197018601C1010E940B29AA9642\r
-:106EF000BFADAA97B093080563962CAD3DAD4EADDE\r
-:106F00005FAD63972093D9093093DA094093DB0989\r
-:106F10005093DC0967968CAD9DADAEADBFAD679764\r
-:106F20008093DD099093DE09A093DF09B093E00917\r
-:106F30006B962CAD3DAD4EAD5FAD6B972093E109E7\r
-:106F40003093E2094093E3095093E40925968CAD10\r
-:106F50009DADAEADBFAD25978093E5099093E60951\r
-:106F6000A093E709B093E8090E94FA2CC359DF4FB8\r
-:106F70000FB6F894DEBF0FBECDBFDF91CF911F914A\r
-:106F80000F91FF90EF90DF90CF90BF90AF909F90C8\r
-:106F90008F907F906F905F904F903F902F90A9C1FE\r
-:106FA00025962CAD3DAD4EAD5FAD25972093E509FF\r
-:106FB0003093E6094093E7095093E809E1EBF4E0E8\r
-:106FC0000C945F2EC359DF4F0FB6F894DEBF0FBE8F\r
-:106FD000CDBFDF91CF911F910F91FF90EF90DF9088\r
-:106FE000CF90BF90AF909F908F907F906F905F9069\r
-:106FF0004F903F902F900895EF92FF920F931F9321\r
-:10700000CF93DF937B018A01E9012091250A30911A\r
-:10701000260A4091270A5091280AFC01608171815B\r
-:10702000828193810E94A94E0E94794EE9EDF9E098\r
-:1070300060837183828393832091290A30912A0A85\r
-:1070400040912B0A50912C0AF70160817181828155\r
-:1070500093810E94A94E0E94794EEDEDF9E0608384\r
-:1070600071838283938320912D0A30912E0A40915F\r
-:107070002F0A5091300AF8016081718182819381D9\r
-:107080000E94A94E0E94794EE1EEF9E0608371837F\r
-:10709000828393832091310A3091320A4091330ADE\r
-:1070A0005091340A688179818A819B810E94A94E1E\r
-:1070B0000E94794EE5EEF9E06083718382839383C9\r
-:1070C0009F0141EE59E06DED79E089ED99E05AD7E5\r
-:1070D0001092590A10925A0A10925B0A10925C0A96\r
-:1070E0001092490A10924A0A10924B0A10924C0AC6\r
-:1070F00010924D0A10924E0A10924F0A1092500AA6\r
-:107100001092510A1092520A1092530A1092540A85\r
-:107110001092550A1092560A1092570A1092580A65\r
-:10712000DF91CF911F910F91FF90EF9008952091E3\r
-:10713000310A3091320A4091330A5091340AFC01ED\r
-:1071400060817181828193810E94A94E0E94794E53\r
-:10715000E5EEF9E06083718382839383CF014EC7AC\r
-:1071600080930605089580916F0A8111B5C08091C2\r
-:107170006E0A8111B1C080916D0A8111ADC0089570\r
-:107180009091C00095FFFCCF8093C600319684910A\r
-:107190008111F6CFE5EFF4E007C09091C00095FFB4\r
-:1071A000FCCF8093C600319684918111F6CF8091F7\r
-:1071B0006F0A882349F1E4E0F5E007C09091C00030\r
-:1071C00095FFFCCF8093C600319684918111F6CF54\r
-:1071D0006091700A7091710A8091720A9091730A9D\r
-:1071E0000E94764C2091250A3091260A4091270A68\r
-:1071F0005091280A0E94DB4BAB01BC0122E030E039\r
-:1072000081E894E00E94FF2480916E0A882349F16E\r
-:10721000E8E0F5E007C09091C00095FFFCCF8093B7\r
-:10722000C600319684918111F6CF6091740A7091F5\r
-:10723000750A8091760A9091770A0E94764C209187\r
-:10724000290A30912A0A40912B0A50912C0A0E9457\r
-:10725000DB4BAB01BC0122E030E081E894E00E940E\r
-:10726000FF2480916D0A882349F1ECE0F5E007C026\r
-:107270009091C00095FFFCCF8093C6003196849119\r
-:107280008111F6CF6091780A7091790A80917A0A1B\r
-:1072900090917B0A0E94764C20912D0A30912E0A03\r
-:1072A00040912F0A5091300A0E94DB4BAB01BC0188\r
-:1072B00022E030E081E894E00E94FF248091C00049\r
-:1072C00085FFFCCF8AE08093C60010926F0A10926F\r
-:1072D0006E0A10926D0A0895EFEEF4E058CF109206\r
-:1072E0006F0A10926E0A10926D0A08958093210120\r
-:1072F0000895EFE6F0E080818260808308951F9218\r
-:107300000F920FB60F9211240F931F932F933F9359\r
-:107310004F935F936F937F938F939F93AF93BF939D\r
-:10732000EF93FF938091800A9091810A892B09F055\r
-:1073300056C19091080580910705981771F0E0916A\r
-:1073400007058DE4E89FF0011124E75FFA4FDF01A4\r
-:10735000A45BBF4F81E08C9302C0E0E0F0E0F093CB\r
-:10736000810AE093800A309709F433C1DF01A45BFE\r
-:10737000BF4F81E08C931092820A1092830A109280\r
-:10738000840A1092850A94AD85AD9093860A809305\r
-:10739000870A692F782F613187E2780710F060E162\r
-:1073A00077E281E08093880A6832710510F468E220\r
-:1073B00070E068527109611588E07807E0F0872F66\r
-:1073C0009927880F991F880F991F805F9A4FFC019A\r
-:1073D000329625913491AA27639FA001629F410DA7\r
-:1073E0005A1F06944A1F5A1F1124FC0125913491FB\r
-:1073F000241B350B1EC0CB01969587958C7F805F33\r
-:10740000964FFC01259134910296FC0145915491CF\r
-:10741000FB01E770FF274E9FC0014F9F900D5E9FBD\r
-:10742000900D1124A3E096958795AA95E1F7281B66\r
-:10743000390B24363105A0F4E8E5F2E006C090915E\r
-:10744000C00095FFFCCF8093C60081918111F7CFDA\r
-:107450004AE050E081E894E00E94572424E630E0BE\r
-:10746000C901A0E0B0E08093890A90938A0AA093B2\r
-:107470008B0AB0938C0A3093890020938800E091A6\r
-:10748000800AF091810A60AD71AD613187E27807C1\r
-:1074900010F060E177E281E08093880A683271053C\r
-:1074A00010F468E270E068527109611588E07807AD\r
-:1074B000D0F0872F9927880F991F880F991F805F19\r
-:1074C0009A4FFC01329645915491AA27659F9001ED\r
-:1074D000649F210D3A1F06942A1F3A1F1124FC01B4\r
-:1074E000859194911DC09B01369527952C7F205F37\r
-:1074F000364FF901859194912E5F3F4FF9014591E7\r
-:107500005491FB01E770FF274E9F90014F9F300D74\r
-:107510005E9F300D112443E0369527954A95E1F79B\r
-:10752000821B930B84369105A0F4E8E5F2E006C0D7\r
-:107530009091C00095FFFCCF8093C600819181118E\r
-:10754000F7CF4AE050E081E894E00E94572484E6B7\r
-:1075500090E090938E0A80938D0AE091800AF091DA\r
-:10756000810A80899189A289B389B695A795979553\r
-:107570008795B095A095909581959F4FAF4FBF4F40\r
-:1075800080938F0A9093900AA093910AB093920AE5\r
-:107590008093930A9093940AA093950AB093960AC5\r
-:1075A0008093970A9093980AA093990AB0939A0AA5\r
-:1075B00080939B0A90939C0AA0939D0AB0939E0A85\r
-:1075C00010927C0A10927D0A10927E0A10927F0A15\r
-:1075D00006C080ED97E09093890080938800E09149\r
-:1075E000800AF091810A309709F46EC480A18093DB\r
-:1075F0009F0A80FF3BC016988FEF80931D018091FA\r
-:1076000021018823B9F123B1217031E0232759F1F9\r
-:107610008091A00A882339F180819181A281B38170\r
-:10762000181619061A061B06F4F480915D0A90914B\r
-:107630005E0AA0915F0AB091600A8093700A9093ED\r
-:10764000710AA093720AB093730A30936F0A80890B\r
-:107650009189A289B38980937C0A90937D0AA09333\r
-:107660007E0AB0937F0A2093A00A04C0169A81E094\r
-:1076700080931D0180919F0A81FF40C0149A8FEF73\r
-:1076800080931E01809121018823E1F123B131E033\r
-:1076900026952170232779F18091A10A882359F139\r
-:1076A000E091800AF091810A84819581A681B78159\r
-:1076B000181619061A061B06F4F48091610A9091B7\r
-:1076C000620AA091630AB091640A8093740A90934D\r
-:1076D000750AA093760AB093770A30936E0A808970\r
-:1076E0009189A289B38980937C0A90937D0AA093A3\r
-:1076F0007E0AB0937F0A2093A10A04C0149881E007\r
-:1077000080931E0180919F0A82FF41C046988FEFAF\r
-:1077100080931F01809121018823E9F123B131E099\r
-:1077200022FB222720F9232779F18091A20A8823BE\r
-:1077300059F1E091800AF091810A80859185A285B6\r
-:10774000B385181619061A061B06F4F48091650A0B\r
-:107750009091660AA091670AB091680A8093780AAE\r
-:107760009093790AA0937A0AB0937B0A30936D0ABA\r
-:1077700080899189A289B38980937C0A90937D0A3C\r
-:10778000A0937E0AB0937F0A2093A20A04C0469A6F\r
-:1077900081E080931F0180919F0A83FF03C0459879\r
-:1077A0008FEF02C0459A81E08093200120E030E015\r
-:1077B000BDC18091C00087FF19C0E091C600409113\r
-:1077C000020550910305CA0101968F7799276091B0\r
-:1077D0000405709105058617970741F0DA01AE5749\r
-:1077E000BB4FEC939093030580930205E091800AD0\r
-:1077F000F091810A80918F0A9091900AA091910A4C\r
-:10780000B091920A4081518162817381840F951FEA\r
-:10781000A61FB71F80938F0A9093900AA093910A96\r
-:10782000B093920A181619061A061B060CF4159A3C\r
-:107830008091930A9091940AA091950AB091960A2A\r
-:107840004481558166817781840F951FA61FB71FDC\r
-:107850008093930A9093940AA093950AB093960A02\r
-:10786000181619061A061B060CF4139AE091800AE2\r
-:10787000F091810A8091970A9091980AA091990AB3\r
-:10788000B0919A0A4085518562857385840F951F52\r
-:10789000A61FB71F8093970A9093980AA093990AFE\r
-:1078A000B0939A0A181619061A061B060CF4479A82\r
-:1078B00080919B0A90919C0AA0919D0AB0919E0A8A\r
-:1078C0004485558566857785840F951FA61FB71F4C\r
-:1078D00080939B0A90939C0AA0939D0AB0939E0A62\r
-:1078E000181619061A061B060CF4179A80918F0AAF\r
-:1078F0009091900AA091910AB091920A18161906D7\r
-:107900001A061B065CF5E091800AF091810A408915\r
-:10791000518962897389841B950BA60BB70B8093E1\r
-:107920008F0A9093900AA093910AB093920A409183\r
-:107930001D0180915D0A90915E0AA0915F0AB0914D\r
-:10794000600A840F911DA11DB11D80935D0A909363\r
-:107950005E0AA0935F0AB093600A15988091930A1B\r
-:107960009091940AA091950AB091960A181619065A\r
-:107970001A061B065CF5E091800AF091810A4089A5\r
-:10798000518962897389841B950BA60BB70B809371\r
-:10799000930A9093940AA093950AB093960A409103\r
-:1079A0001E018091610A9091620AA091630AB091D0\r
-:1079B000640A840F911DA11DB11D8093610A9093EB\r
-:1079C000620AA093630AB093640A13988091970A9D\r
-:1079D0009091980AA091990AB0919A0A18161906DE\r
-:1079E0001A061B065CF5E091800AF091810A408935\r
-:1079F000518962897389841B950BA60BB70B809301\r
-:107A0000970A9093980AA093990AB0939A0A409182\r
-:107A10001F018091650A9091660AA091670AB09152\r
-:107A2000680A840F911DA11DB11D8093650A909372\r
-:107A3000660AA093670AB093680A479880919B0AE8\r
-:107A400090919C0AA0919D0AB0919E0A1816190661\r
-:107A50001A061B065CF5E091800AF091810A4089C4\r
-:107A6000518962897389841B950BA60BB70B809390\r
-:107A70009B0A90939C0AA0939D0AB0939E0A409102\r
-:107A800020018091690A90916A0AA0916B0AB091D5\r
-:107A90006C0A840F911DA11DB11D8093690A9093FA\r
-:107AA0006A0AA0936B0AB0936C0A179880917C0ABB\r
-:107AB00090917D0AA0917E0AB0917F0A0196A11D46\r
-:107AC000B11D80937C0A90937D0AA0937E0AB093A7\r
-:107AD0007F0A40917C0A50917D0A60917E0A7091E4\r
-:107AE0007F0A2F5F3F4FE091800AF091810A8089E1\r
-:107AF0009189A289B389481759076A077B07B0F0B3\r
-:107B000040917C0A50917D0A60917E0A70917F0AB3\r
-:107B1000E091800AF091810A84899589A689B789C4\r
-:107B200084179507A607B70748F4CBC08091880A49\r
-:107B300090E0281739070CF43CCEE2CF4091890A37\r
-:107B400050918A0A60918B0A70918C0A048D158D70\r
-:107B5000268D378DAA27419FB12D529FC001629F6C\r
-:107B6000900D619F800D911D429FB00D811D9A1F48\r
-:107B7000519FB00D811D9A1F609FB00D811D9A1FEE\r
-:107B8000509FB10D8A1F9A1FB6958A1F9A1F112404\r
-:107B900044AD55AD480F591F5093870A4093860A4C\r
-:107BA00080AD91ADA2ADB3AD60E070E084179507F4\r
-:107BB000A607B70720F49093870A8093860A6091FE\r
-:107BC000860A7091870A613187E2780710F060E1D8\r
-:107BD00077E281E08093880A6832710510F468E2E8\r
-:107BE00070E068527109611588E07807E0F0872F2E\r
-:107BF0009927880F991F880F991F805F9A4FFC0162\r
-:107C0000329625913491AA27639FA001629F410D6E\r
-:107C10005A1F06944A1F5A1F1124FC0125913491C2\r
-:107C2000241B350B1EC0CB01969587958C7F805FFA\r
-:107C3000964FFC01259134910296FC014591549197\r
-:107C4000FB01E770FF274E9FC0014F9F900D5E9F85\r
-:107C5000900D1124A3E096958795AA95E1F7281B2E\r
-:107C6000390B24363105A0F4E8E5F2E006C0909126\r
-:107C7000C00095FFFCCF8093C60081918111F7CFA2\r
-:107C80004AE050E081E894E00E94572424E630E086\r
-:107C900030938900209388008091890A90918A0A04\r
-:107CA000A0918B0AB0918C0A820F931FA11DB11D68\r
-:107CB0008093890A90938A0AA0938B0AB0938C0AC6\r
-:107CC000DEC040917C0A50917D0A60917E0A7091DD\r
-:107CD0007F0A808D918DA28DB38D84179507A6079D\r
-:107CE000B70708F0C4C04091820A5091830A60919E\r
-:107CF000840A7091850A048D158D268D378DAA27EB\r
-:107D0000419FB12D529FC001629F900D619F800DD8\r
-:107D1000911D429FB00D811D9A1F519FB00D811D75\r
-:107D20009A1F609FB00D811D9A1F509FB10D8A1F31\r
-:107D30009A1FB6958A1F9A1F11242091860A3091A6\r
-:107D4000870AE05CFF4F2817390718F4208131813A\r
-:107D500002C0281B390B80819181A281B381A901C6\r
-:107D600060E070E0481759076A077B0708F49C0138\r
-:107D7000B901213187E2380710F060E177E281E054\r
-:107D80008093880A6832710510F468E270E06852E6\r
-:107D90007109611588E07807E0F0872F9927880F2F\r
-:107DA000991F880F991F805F9A4FFC013296259189\r
-:107DB0003491AA27639FA001629F410D5A1F069428\r
-:107DC0004A1F5A1F1124FC0125913491241B350BA5\r
-:107DD0001EC0CB01969587958C7F805F964FFC01E6\r
-:107DE000259134910296FC0145915491FB01E77075\r
-:107DF000FF274E9FC0014F9F900D5E9F900D112455\r
-:107E000043E0969587954A95E1F7281B390B243670\r
-:107E10003105A0F4E8E5F2E006C09091C00095FFBE\r
-:107E2000FCCF8093C60081918111F7CF4AE050E0EA\r
-:107E300081E894E00E94572424E630E030938900E2\r
-:107E4000209388008091820A9091830AA091840AED\r
-:107E5000B091850A820F931FA11DB11D8093820AE4\r
-:107E60009093830AA093840AB093850A08C08091F6\r
-:107E70008D0A90918E0A909389008093880040919A\r
-:107E80007C0A50917D0A60917E0A70917F0AE09190\r
-:107E9000800AF091810A80899189A289B389481763\r
-:107EA00059076A077B0780F01092810A1092800AB6\r
-:107EB0009091080580910705981731F0809107058A\r
-:107EC0008F5F8F7080930705FF91EF91BF91AF9106\r
-:107ED0009F918F917F916F915F914F913F912F91E2\r
-:107EE0001F910F910F900FBE0F901F9018950E9A33\r
-:107EF0000C9A3E9A3D9A529A529A529A529A2098C5\r
-:107F0000289A2198299A22982A9A0D9A0B9A3F9A90\r
-:107F10000F9AA1E8B0E08C918F7E8C938C91886051\r
-:107F20008C93E0E8F0E080818D7F808380818E7F7C\r
-:107F3000808380818F73808380818F7C80838C910C\r
-:107F4000887F82608C9380E090E490938900809396\r
-:107F500088001092850010928400EFE6F0E08081A6\r
-:107F60008260808381E0C2D9789408959091080559\r
-:107F700080910705981729F025D281E00E943810DA\r
-:107F8000F5CF0895CF93DF93EFB7F894EC01888194\r
-:107F90009981AA81BB8180935D0A90935E0AA09328\r
-:107FA0005F0AB093600AEB0188819981AA81BB8145\r
-:107FB0008093610A9093620AA093630AB093640A63\r
-:107FC000EA0188819981AA81BB818093650A909397\r
-:107FD000660AA093670AB093680AE90188819981CB\r
-:107FE000AA81BB818093690A90936A0AA0936B0A65\r
-:107FF000B0936C0AEFBFDF91CF9108952FB7F8943B\r
-:10800000FC0180819181A281B3818093690A909360\r
-:108010006A0AA0936B0AB0936C0A2FBF08950F935E\r
-:108020001F939FB7F89424E0829FF0011124E35A34\r
-:10803000F54F00811181228133819FBFB801C901B1\r
-:108040001F910F91089592DF5A985A985A985A980A\r
-:10805000089520912A0130912B0140912C015091DB\r
-:108060002D0160E070E08FE793E40E94DB4B6093AA\r
-:10807000B10A7093B20A8093B30A9093B40A089538\r
-:108080008055954FFC01808190E008950F931F93D8\r
-:10809000CF93DF93EC01662309F461C0E7EFFDE0C5\r
-:1080A00007C09091C00095FFFCCF8093C600319629\r
-:1080B00084918111F6CF4AE050E070E081E894E0CD\r
-:1080C0000E943C24EEEFFDE007C09091C00095FFB8\r
-:1080D000FCCF8093C600319684918111F6CF8091B8\r
-:1080E000C00085FFFCCF8AE08093C6000E940F107D\r
-:1080F00036C0C901880F991F880F991FFC01E45EE3\r
-:10810000F14F659174916C177D073CF52150310951\r
-:10811000220F331F220F331FF901E65EF14F059145\r
-:108120001491245E314FF90145915491FC01E65EB2\r
-:10813000F14F25913491C41BD50B201B310BC29FED\r
-:10814000C001C39F900DD29F900D1124641B750B2D\r
-:108150000E948E4F600F711F13C04F5F01C041E03E\r
-:10816000242F30E04D3309F0C4CF2D33310531F4E5\r
-:10817000EAE0FFE085919491BC0102C060E070E00C\r
-:1081800020EF3FE3261B370BC901DF91CF911F91F1\r
-:108190000F910895CF93DF9321E030E0D901AA0F2A\r
-:1081A000BB1FAA0FBB1FFD01E45EF14F65917491E7\r
-:1081B0006817790744F521503109220F331F220F28\r
-:1081C000331FF901E65EF14FC591D491245E314F22\r
-:1081D000F90145915491FD01E65EF14F25913491ED\r
-:1081E000FC01E41BF50B2C1B3D0BE29FC001E39F40\r
-:1081F000900DF29F900D1124641B750B0E948E4F01\r
-:108200006C0F7D1F0BC02F5F3F4F2D33310509F0E1\r
-:10821000C5CFEAE0FFE085919491BC0120EF3FE3F8\r
-:10822000261B370BC901DF91CF9108952F923F9202\r
-:108230004F925F926F927F928F929F92AF92BF9276\r
-:10824000CF92DF92EF92FF920F931F93CF93DF9322\r
-:108250008C01662351F1E7EFFDE007C09091C0006B\r
-:1082600095FFFCCF8093C600319684918111F6CFA3\r
-:108270004AE050E070E081E894E00E943C24EEE0A7\r
-:10828000FFE007C09091C00095FFFCCF8093C6002F\r
-:10829000319684918111F6CF8091C00085FFFCCF8B\r
-:1082A0008AE08093C6000E940F10C0EFDFE3C01B7E\r
-:1082B000D10B41E05EC09C01220F331F220F331F00\r
-:1082C000F901E65EF14F65907490C615D7050CF084\r
-:1082D0004FC00197880F991F880F991FFC01E45E1A\r
-:1082E000F14F25903490865E914FFC0105911491D9\r
-:1082F000F901E45EF14F45905490B101882777FD74\r
-:108300008095982F0E94764C6B017C01BE01601B0A\r
-:10831000710B882777FD8095982F0E94764C4B0132\r
-:108320005C01B20162197309882777FD8095982F47\r
-:108330000E94764C9B01AC01C501B4010E94A94E7C\r
-:108340004B015C01B301601B710B882777FD8095A1\r
-:10835000982F0E94764C9B01AC01C501B4010E948C\r
-:10836000DB4B9B01AC01C701B6010E94FB4A17C061\r
-:108370004F5F842F90E04D3309F09DCFCD9759F496\r
-:10838000ECE0FFE065917491882777FD8095982F48\r
-:108390000E94764C04C060E070E080E090E0DF91E5\r
-:1083A000CF911F910F91FF90EF90DF90CF90BF90F2\r
-:1083B000AF909F908F907F906F905F904F903F9085\r
-:1083C0002F9008952F923F924F925F926F927F92DB\r
-:1083D0008F929F92AF92BF92CF92DF92EF92FF92D5\r
-:1083E0000F931F93CF93DF9300D0CDB7DEB780916B\r
-:1083F000A30A882309F4B8C18FB7F8941092A30A8E\r
-:108400008FBF60E08091AA0A9091AB0A0FDF6B01E9\r
-:108410007C019B01AC016091A40A7091A50A809136\r
-:10842000A60A9091A70A0E94FA4AB62EA72E182FE4\r
-:10843000092FA5019801852F942FA32FB22F809388\r
-:10844000B50A9093B60AA093B70AB093B80A20E091\r
-:1084500030E040E251E4D501F8016B2F7A2F8F2FE5\r
-:108460009E2F0E94D74D18160CF41BC120E030E05F\r
-:1084700040E251ECD501F8016B2F7A2F8F2F9E2F00\r
-:108480000E94D44B87FD09C18091B90A8111FAC0BD\r
-:1084900020912E0130912F014091300150913101F6\r
-:1084A000D501F8016B2F7A2D8F2F902F0E94A94EA6\r
-:1084B000762E672E89839A83A301382F292F852F43\r
-:1084C000942FA32FB22F8093BE0A9093BF0AA0933C\r
-:1084D000C00AB093C10A2091BA0A3091BB0A4091F8\r
-:1084E000BC0A5091BD0AD501F8016B2F7A2D8F2F50\r
-:1084F000902F0E94FB4A8B012C018090C20A909021\r
-:10850000C30AA090C40AB090C50A282D392D4A2D5F\r
-:108510005B2D602F712F842D952D0E94D44B87FFEA\r
-:108520009BC084012501802F912FA42DB52D809310\r
-:10853000BA0A9093BB0AA093BC0AB093BD0A2091DB\r
-:108540002A0130912B0140912C0150912D01602F77\r
-:10855000712F842D952D0E94A94E4B015C01862F11\r
-:10856000992DAA2DBB2D8093C60A9093C70AA0937C\r
-:10857000C80AB093C90A2091CA0A3091CB0A409127\r
-:10858000CC0A5091CD0AC701B6010E94FA4A209147\r
-:1085900026013091270140912801509129010E9424\r
-:1085A000A94E20ED3CEC4CE45DE30E94A94E1B017A\r
-:1085B0002C0123E333E343E75FE36091CE0A70913C\r
-:1085C000CF0A8091D00A9091D10A0E94A94E9B01B6\r
-:1085D000AC01C201B1010E94FB4A8B012C01862F24\r
-:1085E000912FA42DB52D8093CE0A9093CF0AA093FE\r
-:1085F000D00AB093D10AC092CA0AD092CB0AE092B4\r
-:10860000CC0AF092CD0A282D392D4A2D5B2DD301AD\r
-:10861000F980EA806B2F762D8F2D9E2DECD7202FA1\r
-:10862000312F442D552DE6D78B017C0120E030E021\r
-:10863000A901712F9F2D0E94D44B87FD3CC020E0E3\r
-:1086400030E04FE753E4602F712F8E2D9F2D0E9455\r
-:10865000D74D1816A4F528C08090B10A9090B20AA0\r
-:10866000A090B30AB090B40A282D392D4A2D5B2D65\r
-:10867000602F712F842D952D0E94D74D18160CF068\r
-:1086800052CF4FCF1092BA0A1092BB0A1092BC0A76\r
-:108690001092BD0A1092B90AFBCE81E08093B90A0C\r
-:1086A0000AC081E08093B90A00E010E08FE7E82E6D\r
-:1086B00093E4F92E04C000E010E0E12CF12C2091AD\r
-:1086C000AA0A3091AB0A4091D20A5091D30A4217BC\r
-:1086D00053071CF01092B00A11C040913201509122\r
-:1086E000330124173507B4F7602F712F8E2D9F2D7E\r
-:1086F0000E94434C759567956093B00A0E9478215B\r
-:108700000091D40A1091D50A2091D60A3091D70A47\r
-:10871000601B710B820B930B6838734181059105C7\r
-:1087200018F10E9478216093D40A7093D50A80933F\r
-:10873000D60A9093D70A8091A80A9091A90A181690\r
-:1087400019068CF42091340130913501821793077A\r
-:1087500054F42091AC0A3091AD0A821793070CF0C3\r
-:1087600002C02C9A01C02C980F900F90DF91CF91EE\r
-:108770001F910F91FF90EF90DF90CF90BF90AF903F\r
-:108780009F908F907F906F905F904F903F902F9031\r
-:1087900008952F923F924F925F926F927F928F92A5\r
-:1087A0009F92AF92BF92CF92DF92EF92FF920F9380\r
-:1087B0001F93CF93DF93C0EFDFE3C81BD90B81E09A\r
-:1087C00090E09C01220F331F220F331FF901E65E58\r
-:1087D000F14F65907490C615D7050CF04DC0019708\r
-:1087E000880F991F880F991FFC01E45EF14F2590B7\r
-:1087F0003490865E914FFC0105911491F901E45E7D\r
-:10880000F14F45905490B101882777FD8095982FBE\r
-:108810000E94764C6B017C01BE01601B710B8827A6\r
-:1088200077FD8095982F0E94764C4B015C01B20138\r
-:1088300062197309882777FD8095982F0E94764CDE\r
-:108840009B01AC01C501B4010E94A94E4B015C0122\r
-:10885000B301601B710B882777FD8095982F0E94CC\r
-:10886000764C9B01AC01C501B401A5D79B01AC01BD\r
-:10887000C701B601C0D60FC001968D33910509F02E\r
-:10888000A0CFECE0FFE065917491882777FD80959B\r
-:10889000982F0E94764CDF91CF911F910F91FF90FE\r
-:1088A000EF90DF90CF90BF90AF909F908F907F9090\r
-:1088B0006F905F904F903F902F9008951092C20A52\r
-:1088C0001092C30A1092C40A1092C50A20912A017C\r
-:1088D00030912B0140912C0150912D0160E070E00E\r
-:1088E0008FE793E468D76093B10A7093B20A8093DC\r
-:1088F000B30A9093B40A239A249A569A61E070E0DE\r
-:108900008EE00E94192187ED80937A00EEE7F0E077\r
-:1089100010828081816080838081826080838081F9\r
-:108920008460808380818460808380E888BDEEE6F7\r
-:10893000F0E08081846080836AEF70E080E090E006\r
-:108940000E94AA2160E085E090E0A0DB9093D30A2A\r
-:108950008093D20A60E083E191E098DB9093330149\r
-:108960008093320186E990E015DC90933501809385\r
-:1089700034010895089560E080E090E087DB109274\r
-:10898000A40A1092A50A1092A60A1092A70A80E0E3\r
-:1089900090E000DC9093AD0A8093AC0A1092AF0A8D\r
-:1089A0001092AE0A1092B00A2B981092B10A10924F\r
-:1089B000B00A1092B10A1092B30A1092B20A109241\r
-:1089C000B20A1092AD0A1092AC0A2C9808952F9218\r
-:1089D0003F924F925F926F927F928F929F92AF924F\r
-:1089E000BF92CF92DF92EF92FF920F931F93CF939C\r
-:1089F000DF93CDB7DEB7E1970FB6F894DEBF0FBEB9\r
-:108A0000CDBF688B798B8A8B9B8B0E9478216C8B76\r
-:108A10007D8B8E8B9F8BECE6F2E006C09091C000C0\r
-:108A200095FFFCCF8093C60081918111F7CF809193\r
-:108A3000C00085FFFCCF8AE08093C6009CDF8FE7F3\r
-:108A40008093B00A4C885D886E887F884C865D86EE\r
-:108A50006E867F86AFE7CA2ED12CE12CF12CBFE7C2\r
-:108A60008B2E912CA12CB12C8EA69FA6A8AAB9AAB8\r
-:108A700021E02CA31B861A86E0E1FDE084908FA202\r
-:108A8000E8E1FDE0949098A6EDE1FDE0A490A9A6B0\r
-:108A9000E4E2FDE0B490BAA6EBE2FDE084908BA6A0\r
-:108AA000E1E3FDE094909CA68091A30A882309F459\r
-:108AB000A9C28FB7F8941092A30A8FBF60E080918B\r
-:108AC000AA0A9091AB0AB2DB6E837F83888799876D\r
-:108AD000762F6F81982F8985272F362F492F582F72\r
-:108AE000B88DA98DEA8DFB8D6B2F7A2FCF010E9457\r
-:108AF000D74D181644F0AE80A88EBF80B98E8884FA\r
-:108B00008A8E99849B8E7E816F8198858985272F97\r
-:108B1000362F492F582F612F722D832D902F44D639\r
-:108B200087FD04C01E812F8038840985ACA0AA204F\r
-:108B300009F42FC3788969899A898B89272F362F61\r
-:108B4000492F582FBE81AF81E885F9856B2F7A2F89\r
-:108B5000CF010E94D74D18160CF054C20E94782104\r
-:108B6000641975098609970969387341810591056A\r
-:108B700008F448C28EA59FA5A8A9B9A98C199D097A\r
-:108B8000AE09BF09B595A795979587958093B00ACB\r
-:108B90000E9478216C877D878E879F874B015C01BF\r
-:108BA00084189508A608B70888A299A2AAA2BBA211\r
-:108BB0009888988EA988A98EBA88BA8E8B888B8E51\r
-:108BC000E8C20E9478218C849D84AE84BF84681999\r
-:108BD00079098A099B09693873418105910508F46F\r
-:108BE00010C20E9478212B013C018A849B84892831\r
-:108BF00009F4EDC1DC01CB018C849D84AE84BF847B\r
-:108C000088199909AA09BB0988A099A0AAA0BBA0A4\r
-:108C1000880E991EAA1EBB1E28A139A14AA15BA1DC\r
-:108C2000281B390B4A0B5B0BCA01B901A70196013E\r
-:108C30000E947F4FA50194010E94C34F8EA59FA55E\r
-:108C4000A8A9B9A9280F391F4A1F5B1F2431310574\r
-:108C50004105510524F12EA73FA748AB59AB2C3E47\r
-:108C600031054105510544F02BEE30E040E050E085\r
-:108C70002EA73FA748AB59AB8EA59FA5A8A9B9A918\r
-:108C800080389105A105B105C4F0EEEFCE2ED12CB0\r
-:108C9000E12CF12CC81AD90AEA0AFB0A12C024E115\r
-:108CA00030E040E050E02EA73FA748AB59AB74E15D\r
-:108CB000C72ED12CE12CF12C04C0CEA4DFA4E8A84F\r
-:108CC000F9A88FA1E0E1FDE008C09091C00095FFF8\r
-:108CD000FCCF8093C600319684918111F6CF2AE0B3\r
-:108CE00030E04EA55FA568A979A981E894E00E94CB\r
-:108CF000062488A5E8E1FDE008C09091C00095FF3A\r
-:108D0000FCCF8093C600319684918111F6CF2AE082\r
-:108D100030E0B701A60181E894E00E94062489A50D\r
-:108D2000EDE1FDE008C09091C00095FFFCCF80937D\r
-:108D3000C600319684918111F6CF22E030E0412FB8\r
-:108D4000522D632D702F81E894E00E94FF248AA5A4\r
-:108D5000E4E2FDE008C09091C00095FFFCCF809355\r
-:108D6000C600319684918111F6CF22E030E0F88D73\r
-:108D7000E98D9A8D8B8D4F2F5E2F692F782F81E88B\r
-:108D800094E00E94FF248091C00085FFFCCF8AE020\r
-:108D90008093C6004A855B85433051050CF417C1AA\r
-:108DA000C701B601A3D520E030E040E850E4D1D7B8\r
-:108DB0006C8F7D8F8E8F9F8F212F322D432D502FC3\r
-:108DC000B88DA98DEA8D1B8D6B2F7A2F8E2F912F49\r
-:108DD00011D420ED3FE049E450E4BBD720E030E07F\r
-:108DE00040E05FE3B6D79B01AC016C8D7D8D8E8D2D\r
-:108DF0009F8DE1D4362E072F182F9C8FC501B4010B\r
-:108E000075D520E030E04AE754E4D5D4A62E972E5D\r
-:108E1000282E892E8BA5EBE2FDE008C09091C000C2\r
-:108E200095FFFCCF8093C600319684918111F6CFD7\r
-:108E300022E030E08C8D432D502F612F782F81E878\r
-:108E400094E00E94FF248CA5E1E3FDE008C090912E\r
-:108E5000C00095FFFCCF8093C600319684918111AC\r
-:108E6000F6CF22E030E04A2D592D622D782D81E891\r
-:108E700094E00E94FF248091C00085FFFCCF8AE02F\r
-:108E80008093C6002AE939E949E15FE3EC8D632D5F\r
-:108E9000702F812F9E2F5DD7362E072F182FB92EBA\r
-:108EA000762F272F302F412F5B2D632D702F812F91\r
-:108EB0009B2DA1D32A2D392D422D582D7CD46C8F7A\r
-:108EC0007CA38DA39EA32A2D392D422D582D632DD1\r
-:108ED000702F812F9B2D3DD720E030E040E05EE3F6\r
-:108EE00038D7A62E972E282E892EE7E3FDE007C05F\r
-:108EF0009091C00095FFFCCF8093C600319684917D\r
-:108F00008111F6CF8091C00085FFFCCF8AE080936D\r
-:108F1000C600E4E4FDE007C09091C00095FFFCCFDF\r
-:108F20008093C600319684918111F6CF22E030E023\r
-:108F3000432D502F612F7B2D81E894E00E94FF2468\r
-:108F40008091C00085FFFCCF8AE08093C600EAE4F0\r
-:108F5000FDE007C09091C00095FFFCCF8093C60054\r
-:108F6000319684918111F6CF22E030E0FC8DECA1A6\r
-:108F70009DA18EA14F2F5E2F692F782F81E894E05D\r
-:108F80000E94FF248091C00085FFFCCF8AE080937F\r
-:108F9000C600E0E5FDE007C09091C00095FFFCCF62\r
-:108FA0008093C600319684918111F6CF22E030E0A3\r
-:108FB0004A2D592D622D782D81E894E00E94FF24DE\r
-:108FC0008091C00085FFFCCF8AE08093C6008EA50B\r
-:108FD0009FA5A8A9B9A98C0D9D1DAE1DBF1DB59556\r
-:108FE000A795979587958093B00A8A859B8501966A\r
-:108FF0009B878A87188929883A880B8991E09CA3E6\r
-:1090000001C01CA220E030E040EA51E4B889A989FF\r
-:10901000EA89FB896B2F7A2FCF01EDD29B01AC013E\r
-:10902000BE81AF81E885F9856B2F7A2FCF01BFD53F\r
-:10903000181694F4E6E5FDE007C09091C00095FF96\r
-:10904000FCCF8093C600319684918111F6CF809138\r
-:10905000C00085FFFCCF99C00E9478218C889D8834\r
-:10906000AE88BF88681979098A099B09613D7740F4\r
-:109070008105910508F440C00E9478216C8B7D8B9E\r
-:109080008E8B9F8BEFE7FDE007C09091C00095FFAE\r
-:10909000FCCF8093C600319684918111F6CF60E0B9\r
-:1090A0008091AA0A9091AB0AC1D8AB01BC0122E021\r
-:1090B00030E081E894E00E94FF24E5E8FDE007C08D\r
-:1090C0009091C00095FFFCCF8093C60031968491AB\r
-:1090D0008111F6CF80E090E00E9440404AE050E0ED\r
-:1090E000BC0181E894E00E943C248091C00085FF8F\r
-:1090F000FCCF8AE08093C6000E9478216A837B833C\r
-:109100008C839D830E9478218C849D84AE84BF844F\r
-:10911000840C951CA61CB71C2A813B814C815D8167\r
-:10912000281939094A095B09260F371F481F591F9B\r
-:1091300021383F444241510590F0E9E8FDE007C085\r
-:109140009091C00095FFFCCF8093C600319684912A\r
-:109150008111F6CF8091C00085FFFCCF16C0AA8593\r
-:10916000BB8516970CF4A0CCE6EAFDE007C0909111\r
-:10917000C00095FFFCCF8093C60031968491811189\r
-:10918000F6CF8091C00085FFFCCF8AE08093C600B7\r
-:1091900013C0788969899A898B89272F362F492F9F\r
-:1091A000582FBE81AF81E885F9856B2F7A2FCF01CB\r
-:1091B000FBD287FD06CD25CFE1960FB6F894DEBF32\r
-:1091C0000FBECDBFDF91CF911F910F91FF90EF9018\r
-:1091D000DF90CF90BF90AF909F908F907F906F90D7\r
-:1091E0005F904F903F902F900895CF93DF931F9201\r
-:1091F000CDB7DEB78983BFDB0E941621698181115B\r
-:109200002FC0E7EFFDE007C08091C00085FFFCCFD5\r
-:109210009093C600319694919111F6CF4AE050E0B8\r
-:1092200070E081E894E00E943C248091C00085FFBA\r
-:10923000FCCF8AE08093C600EBE2FFE007C090918C\r
-:10924000C00095FFFCCF8093C600319684918111B8\r
-:10925000F6CF8091C00085FFFCCF8AE08093C600E6\r
-:109260000F90DF91CF910895CF93DF931F92CDB7E9\r
-:10927000DEB7898380DB0E941621698181112FC0AE\r
-:10928000E7EFFDE007C08091C00085FFFCCF909321\r
-:10929000C600319694919111F6CF4AE050E070E00B\r
-:1092A00081E894E00E943C248091C00085FFFCCFBF\r
-:1092B0008AE08093C600E8E5FFE007C09091C00017\r
-:1092C00095FFFCCF8093C600319684918111F6CF33\r
-:1092D0008091C00085FFFCCF8AE08093C6000F908C\r
-:1092E000DF91CF9108952C980E941621811121C001\r
-:1092F000E7EFFDE007C09091C00095FFFCCF8093A1\r
-:10930000C600319684918111F6CFE5E8FFE007C0F1\r
-:109310009091C00095FFFCCF8093C6003196849158\r
-:109320008111F6CF8091C00085FFFCCF8AE0809349\r
-:10933000C60008951F920F920FB60F9211242F931B\r
-:109340003F934F935F936F937F938F939F93AF93CD\r
-:10935000BF93EF93FF9380913601811106C08091F6\r
-:10936000B00A8093D80A81112B9A9091D80A8091E3\r
-:109370003601891708F02B988F5F8F77809336011D\r
-:109380008091D90A833009F443C020F48130D1F0B0\r
-:10939000A8F50CC0853009F461C008F453C08630CC\r
-:1093A00009F476C0873009F09EC07EC010927B0021\r
-:1093B00080E480937C0080917A00806480937A00BE\r
-:1093C00081E019C020917800309179008091DA0A0B\r
-:1093D0009091DB0AA091DC0AB091DD0A820F931F05\r
-:1093E000A11DB11D8093DA0A9093DB0AA093DC0AD9\r
-:1093F000B093DD0A82E08093D90A75C082E480933D\r
-:109400007C0080917A00806480937A0083E0F3CFBF\r
-:1094100020917800309179008091DE0A9091DF0AE6\r
-:10942000A091E00AB091E10A820F931FA11DB11D26\r
-:109430008093DE0A9093DF0AA093E00AB093E10ADA\r
-:1094400084E0D9CF10927B0081E480937C008091EE\r
-:109450007A00806480937A0085E0CDCF20917800F7\r
-:10946000309179008091E20A9091E30AA091E40A98\r
-:10947000B091E50A820F931FA11DB11D8093E20AEE\r
-:109480009093E30AA093E40AB093E50A86E0B3CF91\r
-:1094900010927B0082E480937C0080917A0080644B\r
-:1094A00080937A0087E0A7CF2091780030917900EF\r
-:1094B0008091E60A9091E70AA091E80AB091E90A42\r
-:1094C000820F931FA11DB11D8093E60A9093E70AB6\r
-:1094D000A093E80AB093E90A1092D90A8091EA0AA7\r
-:1094E0008F5F8093EA0A8091EA0A803108F471C0A4\r
-:1094F0002FEF3FE38091DA0A9091DB0AA901481B24\r
-:10950000590BCA015093AB0A4093AA0A4091DE0A54\r
-:109510005091DF0A241B350B3093A90A2093A80A27\r
-:1095200021E02093A30A1092EA0A1092DA0A10921C\r
-:10953000DB0A1092DC0A1092DD0A1092E20A109205\r
-:10954000E30A1092E40A1092E50A1092E60A1092D9\r
-:10955000E70A1092E80A1092E90A1092DE0A1092C5\r
-:10956000DF0A1092E00A1092E10A20913201309154\r
-:1095700033018217930744F01092AF0A1092AE0A9B\r
-:1095800080E033DE0E94DB202091AA0A3091AB0AF2\r
-:109590008091D20A9091D30A8217930744F01092D7\r
-:1095A000AF0A1092AE0A80E05FDE0E94DB202091BD\r
-:1095B000A80A3091A90A80913401909135012817A9\r
-:1095C00039073CF01092AD0A1092AC0A8CDE0E9472\r
-:1095D000DB20FF91EF91BF91AF919F918F917F9190\r
-:1095E0006F915F914F913F912F910F900FBE0F9010\r
-:1095F0001F9018955058BB27AA270ED076C23FD28D\r
-:1096000030F044D220F031F49F3F11F41EF40FC229\r
-:109610000EF4E095E7FBDCC1E92F89D280F3BA179D\r
-:10962000620773078407950718F071F49EF5B8C2B6\r
-:109630000EF4E0950B2EBA2FA02D0B01B90190016D\r
-:109640000C01CA01A0011124FF27591B99F0593FB1\r
-:1096500050F4503E68F11A16F040A22F232F342FF9\r
-:109660004427585FF3CF469537952795A795F04047\r
-:109670005395C9F77EF41F16BA0B620B730B840B5C\r
-:10968000BAF09150A1F0FF0FBB1F661F771F881F14\r
-:10969000C2F70EC0BA0F621F731F841F48F487956C\r
-:1096A00077956795B795F7959E3F08F0B3CF93955B\r
-:1096B000880F08F09927EE0F979587950895DFD1C9\r
-:1096C00058F080E891E009F49EEFE0D128F040E8FE\r
-:1096D00051E059F45EEF09C0AAC162C2E92FE078F7\r
-:1096E00026D268F3092E052AC1F326173707480743\r
-:1096F000590738F00E2E07F8E02569F0E025E06400\r
-:109700000AC0EF6307F8009407FADB01B9019D0175\r
-:10971000DC01CA01AD01EF935DD0E7D10AD05F91C2\r
-:10972000552331F02BED3FE049E450FD49EC63CF88\r
-:109730000895DF93DD27B92FBF7740E85FE3161662\r
-:10974000170648075B0710F4D92F96D29F938F9383\r
-:109750007F936F93A9D3E0E7F0E06CD1C6D12F914E\r
-:109760003F914F915F9101D3DD2349F09058A2EAD8\r
-:109770002AED3FE049EC5FE3D0785D274DDFDF91D4\r
-:10978000B4C1F7D180F09F3740F491110EF409C2B3\r
-:1097900060E070E080E89FE3089526F01B16611DED\r
-:1097A000711D811D1BC135C1EFD008F481E0089502\r
-:1097B00075D1E395ABC10CD098C168D140F05FD1B1\r
-:1097C00030F021F45F3F19F003C15111EAC12FC1FC\r
-:1097D000AED198F39923C9F35523B1F3951B550BDB\r
-:1097E000BB27AA2762177307840738F09F5F5F4F74\r
-:1097F000220F331F441FAA1FA9F333D00E2E3AF0B5\r
-:10980000E0E830D091505040E695001CCAF729D0CE\r
-:10981000FE2F27D0660F771F881FBB1F261737071D\r
-:109820004807AB07B0E809F0BB0B802DBF01FF274D\r
-:1098300093585F4F2AF09E3F510568F0C9C0B1C1EF\r
-:109840005F3FECF3983EDCF3869577956795B79587\r
-:10985000F7959F5FC9F7880F911D9695879597F9A2\r
-:109860000895E1E0660F771F881FBB1F621773071B\r
-:109870008407BA0720F0621B730B840BBA0BEE1F30\r
-:1098800088F7E095089504D06894B1118AC10895CD\r
-:1098900056D188F09F5790F0B92F9927B751A0F073\r
-:1098A000D1F0660F771F881F991F1AF0BA95C9F774\r
-:1098B00012C0B13081F074D1B1E0089571C1672F49\r
-:1098C000782F8827B85F39F0B93FCCF38695779524\r
-:1098D0006795B395D9F73EF490958095709561950D\r
-:1098E0007F4F8F4F9F4F0895E89409C097FB3EF438\r
-:1098F00090958095709561957F4F8F4F9F4F9923DD\r
-:10990000A9F0F92F96E9BB279395F695879577955A\r
-:109910006795B795F111F8CFFAF4BB0F11F460FF1A\r
-:109920001BC06F5F7F4F8F4F9F4F16C0882311F072\r
-:1099300096E911C0772321F09EE8872F762F05C086\r
-:10994000662371F096E8862F70E060E02AF09A9521\r
-:10995000660F771F881FDAF7880F9695879597F916\r
-:10996000089507D180F09F3740F491110EF019C18E\r
-:1099700060E070E080E89FEB089526F41B16611DFF\r
-:10998000711D811D2BC045C0990F0008550FAA0BF2\r
-:10999000E0E8FEEF16161706E807F907C0F0121602\r
-:1099A0001306E407F50798F0621B730B840B950B05\r
-:1099B00039F40A2661F0232B242B252B21F408955A\r
-:1099C0000A2609F4A140A6958FEF811D811D0895F7\r
-:1099D00097F99F6780E870E060E00895882371F44C\r
-:1099E000772321F09850872B762F07C0662311F438\r
-:1099F00099270DC09051862B70E060E02AF09A956F\r
-:109A0000660F771F881FDAF7880F9695879597F965\r
-:109A100008959F3F31F0915020F487957795679591\r
-:109A2000B795880F911D9695879597F908959FEFA3\r
-:109A300080EC0895DF93CF931F930F93FF92EF92E3\r
-:109A4000DF927B018C01689405C0DA2EEF018DD185\r
-:109A5000FE01E894A5912591359145915591AEF37C\r
-:109A6000EF01DADDFE019701A801DA9479F7DF90C2\r
-:109A7000EF90FF900F911F91CF91DF9108950024F7\r
-:109A80000A941616170618060906089500240A9463\r
-:109A900012161306140605060895C9CF50D0E8F330\r
-:109AA000E894E0E0BB279F57F0F02AED3FE049EC57\r
-:109AB00006C0EE0FBB0F661F771F881F28F0B23A53\r
-:109AC00062077307840728F0B25A620B730B840B8A\r
-:109AD000E3959A9572F7803830F49A95BB0F661F1C\r
-:109AE000771F881FD2F7904896CF092E0394000C59\r
-:109AF00011F4882352F0BB0F40F4BF2B11F460FF28\r
-:109B000004C06F5F7F4F8F4F9F4F0895EF93E0FF2B\r
-:109B100006C0A2EA2AED3FE049EC5FEB7DDDE5DF20\r
-:109B20000F90039401FC9058EDE9F0E0C7C157FD98\r
-:109B30009058440F551F59F05F3F71F04795880FBB\r
-:109B400097FB991F61F09F3F79F087950895121652\r
-:109B500013061406551FF2CF4695F1DF08C01616FE\r
-:109B600017061806991FF1CF8695710561050894AF\r
-:109B70000895E5DFA0F0BEE7B91788F4BB279F384A\r
-:109B800060F41616B11D672F782F8827985FF7CFDE\r
-:109B9000869577956795B11D93959639C8F3089585\r
-:109BA000E894BB2766277727CB0197F90895ECDE69\r
-:109BB00008F48FEF089563DF19F068DF09F037CFFD\r
-:109BC00007CFB901CA0125CF9F775F77B0DF98F340\r
-:109BD0009923B9F35523B9F3FF27951758F4E52FC7\r
-:109BE000E91BED3070F75E3B10F0F1E41CC09034DF\r
-:109BF000E0F40AC0E92FE51BED3028F79E3B10F09A\r
-:109C0000F1E411C0503488F4F9EA88232AF09A95D7\r
-:109C1000660F771F881FDAF744232AF05A95220F20\r
-:109C2000331F441FDAF79F1B5F1BFF931F930F9394\r
-:109C3000FF92EF9279018A01BB27AB2F9B01AC0108\r
-:109C400096D09701A801BF937B018C01AA27BA2F58\r
-:109C5000B901CA018CD0AF919701A801EF90FF9094\r
-:109C60000F911F91D9DC41DFE1D04F9140FF089562\r
-:109C7000552747FD509509C09B01AC0160E070E09D\r
-:109C800080E89FE398CDA4CEC4CE59DFE8F39923B2\r
-:109C9000D9F3940F511DBBF39150504094F059F0FB\r
-:109CA000882332F0660F771F881F91505040C1F70C\r
-:109CB0009E3F510544F7880F911D9695879597F91A\r
-:109CC00008955F3FACF0983E9CF0BB278695779552\r
-:109CD0006795B79508F4B1609395C1F7BB0F58F736\r
-:109CE00011F460FFE8CF6F5F7F4F8F4F9F4FE3CF3F\r
-:109CF00058CF25DF58F19E5758F19851A0F0E9F060\r
-:109D0000983020F5092E9927660F771F881F991F15\r
-:109D10000A94D1F712C0062E672F782F8827985FF4\r
-:109D200011F4000C07C0993FB4F3869577956795B9\r
-:109D30009395D9F7611D711D811D3EF49095809515\r
-:109D4000709561957F4F8F4F9F4F0895689429CFED\r
-:109D500027CF0BD0CACE93DE28F098DE18F09523DB\r
-:109D600009F036CE64CE11241CCFE1DEA0F3959F1E\r
-:109D7000D1F3950F50E0551F629FF001729FBB27F2\r
-:109D8000F00DB11D639FAA27F00DB11DAA1F649F9E\r
-:109D90006627B00DA11D661F829F2227B00DA11D51\r
-:109DA000621F739FB00DA11D621F839FA00D611DD7\r
-:109DB000221F749F3327A00D611D231F849F600DF8\r
-:109DC000211D822F762F6A2F11249F5750408AF031\r
-:109DD000E1F088234AF0EE0FFF1FBB1F661F771FBD\r
-:109DE000881F91505040A9F79E3F510570F0F0CD6B\r
-:109DF000D8CE5F3FECF3983EDCF386957795679578\r
-:109E0000B795F795E7959F5FC1F7FE2B880F911DDA\r
-:109E10009695879597F908959F9340DE0F9007FCDC\r
-:109E2000EE5F74CE11F40EF402CEF3CD88DED0F3E3\r
-:109E30009923D9F3CEF39F57550B87FF38D00024D1\r
-:109E4000A0E640EA900180585695979528F4805CEA\r
-:109E5000660F771F881F20F026173707480730F452\r
-:109E6000621B730B840B202931294A2BA69517946A\r
-:109E70000794202531254A2758F7660F771F881F3A\r
-:109E800020F026173707480730F4620B730B840B5A\r
-:109E9000200D311D411DA09581F7B901842F9158E6\r
-:109EA000880F9695879508959B01AC0152CF9150EC\r
-:109EB0005040660F771F881FD2F708959F938F93A6\r
-:109EC0007F936F93FF93EF939B01AC0142DFEF9180\r
-:109ED000FF91B0DD2F913F914F915F913ACF6ED0BE\r
-:109EE000A59F900DB49F900DA49F800D911D1124EE\r
-:109EF0000895B7FFF4CFF3DF821B930B0895DB01C6\r
-:109F00008F939F93ECDFBF91AF91A29F800D911D26\r
-:109F1000A39F900DB29F900D1124089597FB072EDB\r
-:109F200016F4009406D077FD08D054D007FC05D075\r
-:109F30003EF4909581959F4F0895709561957F4F60\r
-:109F40000895A1E21A2EAA1BBB1BFD010DC0AA1F7A\r
-:109F5000BB1FEE1FFF1FA217B307E407F50720F092\r
-:109F6000A21BB30BE40BF50B661F771F881F991F0D\r
-:109F70001A9469F760957095809590959B01AC0156\r
-:109F8000BD01CF010895052E97FB16F4009406D06D\r
-:109F900057FD0CD0D6DF07FC09D07EF49095809554\r
-:109FA000709561957F4F8F4F9F4F089550954095C5\r
-:109FB000309521953F4F4F4F5F4F0895A29FB001BD\r
-:109FC000B39FC001A39F01D0B29F700D811D1124CA\r
-:109FD000911D0895AA1BBB1B51E107C0AA1FBB1FFF\r
-:109FE000A617B70710F0A61BB70B881F991F5A9525\r
-:109FF000A9F780959095BC01CD010895A0E0B0E04F\r
-:10A00000E3E0F0E536C58B016115710519F0FB0140\r
-:10A01000808391837C01F701C1907F01EF018C2D3A\r
-:10A0200090E04AD2892BB9F7FDE2CF1204C0C99063\r
-:10A03000DD24D39405C02BE2C21201C0C990D12CFB\r
-:10A040007E0141E0E41AF10843E050E06FEB7FE06D\r
-:10A05000C7013AD2892BE1F47E0182E0E80EF11CBF\r
-:10A0600045E050E062EC7FE0C7012ED2892B21F45D\r
-:10A070007E01E7E0EE0EF11C0115110519F0F80163\r
-:10A08000F182E08210E0D0E0C0E8D110F5C0F9C064\r
-:10A0900043E050E067EC7FE0C70116D2892B49F41A\r
-:10A0A0000115110509F4EAC02296F801D183C08395\r
-:10A0B000E5C060E070E0CB01E12CF12CEC2DE05329\r
-:10A0C000EA3040F5FD2DF2602D2D2870D2FE06C03D\r
-:10A0D000211126C02FEFE21AF20A22C0222319F022\r
-:10A0E00041E0E41AF108A5E0B0E09B01AC01F7DE25\r
-:10A0F000660F771F881F991F6E0F711D811D911D9F\r
-:10A100006839E9E97E078E07E9E19E0748F0FD2DF1\r
-:10A11000F66006C0EE3F39F4D3FC3DC0FD2DF8607B\r
-:10A12000C990DF2ECBCFE53311F0E531A1F5A88141\r
-:10A13000AD3219F4F0E1DF2A06C0AB3221F02196EE\r
-:10A1400021E030E004C0A981229622E030E0A05353\r
-:10A15000AA3018F0C21BD30B1EC0FE0120E030E075\r
-:10A1600020384CE034075CF4A901440F551F440F1C\r
-:10A17000551F240F351F220F331F2A0F311DA191A8\r
-:10A18000A053EF01AA3060F3D4FE03C031952195AE\r
-:10A190003109E20EF31ED1FE07C00115110521F0B1\r
-:10A1A0002197F801D183C0839FDB2D2D23702330AD\r
-:10A1B00029F0162FD72FC82F092F07C0DC01CB019C\r
-:10A1C000B058182FD92FCA2F0B2F20E030E0A9014B\r
-:10A1D000612F7D2F8C2F902FE7DA882309F452C04E\r
-:10A1E000F7FE08C0F194E194F10836EFC32E3FE08A\r
-:10A1F000D32E04C02EEDC22E2FE0D22E4601F8E160\r
-:10A200008F1A910890E2A92EB12C14C0F601459145\r
-:10A21000559165917491242F352F462F572F612F1B\r
-:10A220007D2F8C2F902F95DD162FD72FC82F092F1C\r
-:10A23000EA18FB08EA14FB044CF724E0C21AD10820\r
-:10A24000B594A794C814D904A9F7612F7D2F8C2F3A\r
-:10A25000902F282F220F292F221F2F3F31F020E08F\r
-:10A2600030E0A901A1DA81110DC082E290E0909363\r
-:10A27000F00A8093EF0A06C00FEF04C010E0D0E0B0\r
-:10A28000C0EC0FE7612F7D2F8C2F902FCDB7DEB75D\r
-:10A29000ECE00BC4A0E0B0E0EFE4F1E5E6C32B0195\r
-:10A2A0008A016115710519F0FB0180839183011505\r
-:10A2B000110539F09801225031092332310508F097\r
-:10A2C000E3C07C01F701C1917F013F018C2F90E039\r
-:10A2D000F3D0892BB9F7CD3229F4F701C1913F01B1\r
-:10A2E000D1E006C0CB3219F4F701C1913F01D0E0B3\r
-:10A2F0000115110509F4D6C00031110581F4CEC055\r
-:10A30000F3018081883719F0883509F0C1C0F30165\r
-:10A31000C181F2E06F0E711CD26000E110E00830E4\r
-:10A320001105D9F024F402301105F9F407C00A3000\r
-:10A33000110551F000311105C1F424C0C12CD12CFC\r
-:10A34000E12C30E4F32E23C00AE010E02CECC22E06\r
-:10A35000DC2CEC2C2CE0F22E1AC008E010E0C12C12\r
-:10A36000D12CE12C90E1F92E12C09801442737FD41\r
-:10A370004095542F60E070E080E090E8E2DD6901F4\r
-:10A380007A0105C0C12CD12CE12C88E0F82E40E0E8\r
-:10A3900060E070E0CB014801AA2497FCA094BA2C9D\r
-:10A3A000EC2FE053EA3060F02C2F21542A3110F4C6\r
-:10A3B000E75006C02C2F21562A3120F5EC2FE75507\r
-:10A3C0002E2F30E020173107ECF447FD17C0C616DA\r
-:10A3D000D706E806F90678F09B01AC01C501B40187\r
-:10A3E0008EDD6E0F711D811D911D6130710581051E\r
-:10A3F00020E8920710F04FEF01C041E0F301C19156\r
-:10A400003F01CECF4114510491F0442339F0F1E0E3\r
-:10A410006F1A7108F2017182608209C0D1FF1BC0FE\r
-:10A42000F2E06F1A7108F2017182608214C047FF76\r
-:10A4300012C0D0FF05C060E070E080E090E804C08A\r
-:10A440006FEF7FEF8FEF9FE722E230E03093F00A6B\r
-:10A450002093EF0A16C0D0FF08C0909580957095A4\r
-:10A4600061957F4F8F4F9F4F0CC097FF0AC082E2CC\r
-:10A4700090E09093F00A8093EF0A6FEF7FEF8FEFF9\r
-:10A480009FE76B017C0112C0C12CD12C76010EC05C\r
-:10A49000C0E30115110509F460CF41CFC03309F0C5\r
-:10A4A0003ECF2ECFC03309F04FCF2ACFB601C70120\r
-:10A4B000CDB7DEB7E0E1F5C2911132C2803219F0BA\r
-:10A4C00089508550D0F70895FB01DC014150504080\r
-:10A4D00088F08D9181341CF08B350CF4805E659191\r
-:10A4E00061341CF06B350CF4605E861B611171F3F6\r
-:10A4F000990B0895881BFCCFFC018191861721F0F0\r
-:10A500008823D9F7992708953197CF010895FB0142\r
-:10A5100051915523A9F0BF01DC014D91451741111F\r
-:10A52000E1F759F4CD010190002049F04D9140151B\r
-:10A530004111C9F3FB014111EFCF81E090E0019798\r
-:10A540000895A0E1B0E0E6EAF2E59BC20F89188D1C\r
-:10A5500086E08C831A8309838FEF9FE79E838D8328\r
-:10A56000AE01455E5F4F588B4F87698D7A8DCE0166\r
-:10A57000019608D0EF81F885E00FF11F10826096F8\r
-:10A58000E4E09BC2ACE0B0E0E7ECF2E56CC27C0139\r
-:10A590006B018A01FC0117821682838181FFBAC197\r
-:10A5A00088248394912C8C0E9D1EF7019381F601D3\r
-:10A5B00093FD859193FF81916F01882309F4A6C1D2\r
-:10A5C000853239F493FD859193FF81916F01853236\r
-:10A5D00021F4B70190E0BDD1E8CF712C312C20E0FF\r
-:10A5E0002032A8F48B3261F028F4803251F08332AB\r
-:10A5F00071F40BC08D3239F0803349F4216028C0EA\r
-:10A600002260246025C0286023C0206121C027FD6E\r
-:10A6100027C0382F30533A3078F426FF06C0FAE0CE\r
-:10A620007F9E300D1124732E13C08AE0389E300DAA\r
-:10A630001124332E20620CC08E3221F426FD66C117\r
-:10A64000206406C08C3611F4206802C0883641F4BC\r
-:10A65000F60193FD859193FF81916F018111C0CF28\r
-:10A66000982F9554933018F09052933028F40C5F43\r
-:10A670001F4FFFE3F9830DC0833631F0833771F04C\r
-:10A68000833509F05AC022C0F801808189830E5FAA\r
-:10A690001F4F66246394712C540114C02801F2E00A\r
-:10A6A0004F0E511CF801A080B18026FF03C0672D1A\r
-:10A6B00070E002C06FEF7FEFC5012C873FD13C01F6\r
-:10A6C00082012C856FE7262E222217C02801F2E096\r
-:10A6D0004F0E511CF801A080B18026FF03C0672DEA\r
-:10A6E00070E002C06FEF7FEFC5012C871CD13C01E9\r
-:10A6F0002C8550E8252E222A820123FC1AC005C091\r
-:10A70000B70180E290E025D13A94832D90E068165D\r
-:10A710007906B0F30EC0F50127FC859127FE8191E3\r
-:10A720005F01B70190E015D131103A94F1E06F1A52\r
-:10A7300071086114710479F7E6C0843611F0893626\r
-:10A7400039F5F80127FF07C060817181828193810B\r
-:10A750000C5F1F4F08C060817181882777FD80954D\r
-:10A76000982F0E5F1F4F4FE6642E622297FF09C09D\r
-:10A7700090958095709561957F4F8F4F9F4FF0E832\r
-:10A780006F2A2AE030E0A40110D1A82EA81843C0F7\r
-:10A79000853731F43FEEB32EB2222AE030E024C0F8\r
-:10A7A00099EFB92EB2228F36B9F020F4883509F02E\r
-:10A7B000ADC00DC0803721F0883709F0A7C002C0B6\r
-:10A7C00020E1B22AB4FE0BC084E0B82A08C024FFFE\r
-:10A7D00009C0E6E0BE2A06C028E030E005C020E15E\r
-:10A7E00030E002C020E132E0F801B7FE07C060812E\r
-:10A7F0007181828193810C5F1F4F06C060817181DE\r
-:10A8000080E090E00E5F1F4FA401CFD0A82EA818C3\r
-:10A810008FE7682E6B2066FE0BC0362D3E7FA71497\r
-:10A8200050F464FE0AC062FC08C0362D3E7E05C0AE\r
-:10A83000BA2C362D03C0BA2C01C0B72C34FF0DC082\r
-:10A84000FE01EA0DF11D8081803311F4397E09C0CB\r
-:10A8500032FF06C0B394B39404C0832F867809F006\r
-:10A86000B39433FD13C030FF0EC07A2CB31458F4E8\r
-:10A87000730C7B18B32C07C0B70180E290E03C87D3\r
-:10A8800068D0B3943C85B314B8F304C0B31410F487\r
-:10A890003B1801C0312C34FF11C0B70180E390E0B8\r
-:10A8A0003C8757D03C8532FF1CC031FF03C088E590\r
-:10A8B00090E002C088E790E0B7010CC0832F867853\r
-:10A8C00081F031FD02C080E201C08BE237FD8DE2F4\r
-:10A8D000B70190E03ED005C0B70180E390E039D0E9\r
-:10A8E0007A94A714C8F3AA94F401EA0DF11DB701F4\r
-:10A8F000808190E02ED0A110F6CF05C0B70180E294\r
-:10A9000090E027D03A943110F9CF4FCEF70126814D\r
-:10A91000378102C02FEF3FEFC9012C96E2E1BFC0A3\r
-:10A92000992788270895FC01059061507040011017\r
-:10A93000D8F7809590958E0F9F1F0895FC01615068\r
-:10A94000704001900110D8F7809590958E0F9F1F51\r
-:10A9500008950F931F93CF93DF938C01EB018B81AD\r
-:10A9600081FD03C00FEF1FEF1AC082FF0DC02E81C3\r
-:10A970003F818C819D812817390764F4E881F98132\r
-:10A980000193F983E88306C0E885F985802F09954E\r
-:10A99000892B41F78E819F8101969F838E83C80109\r
-:10A9A000DF91CF911F910F910895FA01AA272830C6\r
-:10A9B00051F1203181F1E8946F936E7F6E5F7F4F8C\r
-:10A9C0008F4F9F4FAF4FB1E03ED0B4E03CD0670F08\r
-:10A9D000781F891F9A1FA11D680F791F8A1F911D5B\r
-:10A9E000A11D6A0F711D811D911DA11D20D009F4AB\r
-:10A9F00068943F912AE0269F11243019305D3193ED\r
-:10AA0000DEF6CF010895462F4770405D4193B3E0D5\r
-:10AA10000FD0C9F7F6CF462F4F70405D4A3318F07C\r
-:10AA2000495D31FD4052419302D0A9F7EACFB4E02D\r
-:10AA3000A6959795879577956795BA95C9F70097E5\r
-:10AA40006105710508959B01AC010A2E0694579586\r
-:10AA5000479537952795BA95C9F7620F731F841FDD\r
-:10AA6000951FA01D08952F923F924F925F926F9273\r
-:10AA70007F928F929F92AF92BF92CF92DF92EF928E\r
-:10AA8000FF920F931F93CF93DF93CDB7DEB7CA1B0F\r
-:10AA9000DB0B0FB6F894DEBF0FBECDBF09942A883A\r
-:10AAA000398848885F846E847D848C849B84AA84E2\r
-:10AAB000B984C884DF80EE80FD800C811B81AA816F\r
-:10AAC000B981CE0FD11D0FB6F894DEBF0FBECDBF3A\r
-:08AAD000ED010895F894FFCF99\r
-:10AAD8006400640000803B4500803B4500007043F3\r
-:10AAE800000000000080BB440160EA000001010191\r
-:10AAF80001010000803F75608944A97E443E713D94\r
-:10AB0800E841FF3FFF3F010000A04214AE9F420012\r
-:10AB1800002045F6C815440000FA430000FA430037\r
-:10AB280000A04000003442282300002823000064CD\r
-:10AB3800000000102700005573696E6720446566A1\r
-:10AB480061756C742073657474696E67733A004D2F\r
-:10AB5800313130004820004C20002569206D696E95\r
-:10AB68002C20256920736563004D31303420496EEF\r
-:10AB780076616C696420657874727564657220000A\r
-:10AB88004D31303520496E76616C69642065787482\r
-:10AB9800727564657220004D31303920496E7661D6\r
-:10ABA8006C696420657874727564657220003F0072\r
-:10ABB8006F6B0020703A0020693A0020643A002048\r
-:10ABC800633A005400496E76616C69642065787454\r
-:10ABD800727564657200416374697665204578749E\r
-:10ABE80072756465723A200058595A450000010090\r
-:10ABF8001A0019000A000000FFFF1C001B000A00D1\r
-:10AC08000100FFFF170016000A000200FFFFFFFF08\r
-:10AC1800FFFF04000E00180015000A0003000000E2\r
-:10AC28000100020002002E005374657072617465A1\r
-:10AC380020746F2068696768203A200050494420D2\r
-:10AC48004175746F74756E65207374617274000059\r
-:00000001FF\r
+++ /dev/null
-#ifndef PINS_H
-#define PINS_H
-
-#if MOTHERBOARD == 99
-#define KNOWN_BOARD 1
-
-#define X_STEP_PIN 2
-#define X_DIR_PIN 3
-#define X_ENABLE_PIN -1
-#define X_MIN_PIN -1
-#define X_MAX_PIN 16
-
-#define Y_STEP_PIN 5
-#define Y_DIR_PIN 6
-#define Y_ENABLE_PIN -1
-#define Y_MIN_PIN 67
-#define Y_MAX_PIN -1
-
-#define Z_STEP_PIN 62
-#define Z_DIR_PIN 63
-#define Z_ENABLE_PIN -1
-#define Z_MIN_PIN 59
-#define Z_MAX_PIN -1
-
-#define E0_STEP_PIN 65
-#define E0_DIR_PIN 66
-#define E0_ENABLE_PIN -1
-
-#define SDPOWER -1
-#define SDSS 53
-#define LED_PIN -1
-#define FAN_PIN -1
-#define PS_ON_PIN 9
-#define KILL_PIN -1
-
-#define HEATER_0_PIN 13
-#define HEATER_1_PIN -1
-#define HEATER_2_PIN -1
-#define TEMP_0_PIN 6 // MUST USE ANALOG INPUT NUMBERING NOT DIGITAL OUTPUT NUMBERING!!!!!!!!!
-#define TEMP_1_PIN -1 // MUST USE ANALOG INPUT NUMBERING NOT DIGITAL OUTPUT NUMBERING!!!!!!!!!
-#define TEMP_2_PIN -1 // MUST USE ANALOG INPUT NUMBERING NOT DIGITAL OUTPUT NUMBERING!!!!!!!!!
-#define HEATER_BED_PIN 4
-#define TEMP_BED_PIN 10
-
-#endif /* 99 */
-
-/****************************************************************************************
-* Gen7 v1.1, v1.2, v1.3, v1.4 pin assignment
-*
-****************************************************************************************/
-
-
-#if MOTHERBOARD == 13
-#define MOTHERBOARD 11
-#define GEN7_VERSION 14 // v1.4
-#endif
-
-#if MOTHERBOARD == 12
-#define MOTHERBOARD 11
-#define GEN7_VERSION 13 // v1.3
-#endif
-
-#if MOTHERBOARD == 11
-#define KNOWN_BOARD
-
-#if !defined(__AVR_ATmega644P__) && !defined(__AVR_ATmega644__) && !defined(__AVR_ATmega1284P__)
-#error Oops! Make sure you have 'Gen7' selected from the 'Tools -> Boards' menu.
-
-#endif
-
-#ifndef GEN7_VERSION
-#define GEN7_VERSION 12 // v1.x
-#endif
-
-//x axis pins
-#define X_STEP_PIN 19
-#define X_DIR_PIN 18
-#define X_ENABLE_PIN 24
-#define X_MIN_PIN 7
-#define X_MAX_PIN -1
-
-//y axis pins
-#define Y_STEP_PIN 23
-#define Y_DIR_PIN 22
-#define Y_ENABLE_PIN 24
-#define Y_MIN_PIN 5
-#define Y_MAX_PIN -1
-
-//z axis pins
-#define Z_STEP_PIN 26
-#define Z_DIR_PIN 25
-#define Z_ENABLE_PIN 24
-#define Z_MIN_PIN 1
-#define Z_MAX_PIN 0
-
-//extruder pins
-#define E0_STEP_PIN 28
-#define E0_DIR_PIN 27
-#define E0_ENABLE_PIN 24
-
-#define TEMP_0_PIN 1
-#define TEMP_1_PIN -1
-#define TEMP_2_PIN -1
-#define TEMP_BED_PIN 2
-
-#define HEATER_0_PIN 4
-#define HEATER_1_PIN -1
-#define HEATER_2_PIN -1
-#define HEATER_BED_PIN 3
-
-
-#define SDPOWER -1
-#define SDSS -1 // SCL pin of I2C header
-#define LED_PIN -1
-
-#if (GEN7_VERSION >= 13)
-// Gen7 v1.3 removed the fan pin
-#define FAN_PIN -1
-#else
-#define FAN_PIN 31
-#endif
-#define PS_ON_PIN 15
-
-#if (GEN7_VERSION < 14)
-// Gen 1.3 and earlier supplied thermistor power via PS_ON
-// Need to ignore the bad thermistor readings on those units
-#define BOGUS_TEMPERATURE_FAILSAFE_OVERRIDE
-#endif
-
-//our pin for debugging.
-#define DEBUG_PIN 0
-
-//our RS485 pins
-#define TX_ENABLE_PIN 12
-#define RX_ENABLE_PIN 13
-
-#endif
-
-/*******************************************************************************
-*********
-* Gen7 Alfons3 pin assignment
-*
-********************************************************************************
-********/
-/* These Pins are assigned for the modified GEN7 Board from Alfons3 Please review the pins and adjust it for your needs*/
-
-#if MOTHERBOARD == 10
-#define KNOWN_BOARD
-
-#if !defined(__AVR_ATmega644P__) && !defined(__AVR_ATmega644__) && !defined(__AVR_ATmega1284P__)
- #error Oops! Make sure you have 'Gen7' selected from the 'Tools -> Boards' menu.
-
-#endif
-
-//x axis pins
- #define X_STEP_PIN 21 //different from stanard GEN7
- #define X_DIR_PIN 20 //different from stanard GEN7
- #define X_ENABLE_PIN 24
- #define X_MIN_PIN 0
- #define X_MAX_PIN -1
-
- //y axis pins
- #define Y_STEP_PIN 23
- #define Y_DIR_PIN 22
- #define Y_ENABLE_PIN 24
- #define Y_MIN_PIN 1
- #define Y_MAX_PIN -1
-
- //z axis pins
- #define Z_STEP_PIN 26
- #define Z_DIR_PIN 25
- #define Z_ENABLE_PIN 24
- #define Z_MIN_PIN 2
- #define Z_MAX_PIN -1
-
- //extruder pins
- #define E0_STEP_PIN 28
- #define E0_DIR_PIN 27
- #define E0_ENABLE_PIN 24
-
- #define TEMP_0_PIN 2
- #define TEMP_1_PIN -1
- #define TEMP_2_PIN -1
- #define TEMP_BED_PIN 1 // MUST USE ANALOG INPUT NUMBERING NOT DIGITAL OUTPUT NUMBERING!!!!!!!!! (pin 34 bed)
-
- #define HEATER_0_PIN 4
- #define HEATER_1_PIN -1
- #define HEATER_2_PIN -1
- #define HEATER_BED_PIN 3 // (bed)
-
- #define SDPOWER -1
- #define SDSS 31 // SCL pin of I2C header || CS Pin for SD Card support
- #define LED_PIN -1
-
- #define FAN_PIN -1
- #define PS_ON_PIN 19
- //our pin for debugging.
-
- #define DEBUG_PIN -1
-
- //our RS485 pins
- //#define TX_ENABLE_PIN 12
- //#define RX_ENABLE_PIN 13
-
- #define BEEPER -1
- #define SDCARDDETECT -1
- #define SUICIDE_PIN -1 //has to be defined; otherwise Power_off doesn't work
-
- //Pins for 4bit LCD Support
- #define LCD_PINS_RS 18
- #define LCD_PINS_ENABLE 17
- #define LCD_PINS_D4 16
- #define LCD_PINS_D5 15
- #define LCD_PINS_D6 13
- #define LCD_PINS_D7 14
-
- //buttons are directly attached
- #define BTN_EN1 11
- #define BTN_EN2 10
- #define BTN_ENC 12 //the click
-
- #define BLEN_C 2
- #define BLEN_B 1
- #define BLEN_A 0
-
- #define encrot0 0
- #define encrot1 2
- #define encrot2 3
- #define encrot3 1
-#endif
-
-/****************************************************************************************
-* Arduino Mega pin assignment
-*
-****************************************************************************************/
-#if MOTHERBOARD == 3 || MOTHERBOARD == 33 || MOTHERBOARD == 34
-#define KNOWN_BOARD 1
-
-//////////////////FIX THIS//////////////
-#ifndef __AVR_ATmega1280__
- #ifndef __AVR_ATmega2560__
- #error Oops! Make sure you have 'Arduino Mega' selected from the 'Tools -> Boards' menu.
- #endif
-#endif
-
-// uncomment one of the following lines for RAMPS v1.3 or v1.0, comment both for v1.2 or 1.1
-// #define RAMPS_V_1_3
-// #define RAMPS_V_1_0
-
-#if MOTHERBOARD == 33 || MOTHERBOARD == 34
-
-#define X_STEP_PIN 54
-#define X_DIR_PIN 55
-#define X_ENABLE_PIN 38
-#define X_MIN_PIN 3
-#define X_MAX_PIN 2 //2 //Max endstops default to disabled "-1", set to commented value to enable.
-
-#define Y_STEP_PIN 60
-#define Y_DIR_PIN 61
-#define Y_ENABLE_PIN 56
-#define Y_MIN_PIN 14
-#define Y_MAX_PIN 15 //15
-
-#define Z_STEP_PIN 46
-#define Z_DIR_PIN 48
-#define Z_ENABLE_PIN 62
-#define Z_MIN_PIN 18
-#define Z_MAX_PIN 19
-
-#define E0_STEP_PIN 26
-#define E0_DIR_PIN 28
-#define E0_ENABLE_PIN 24
-
-#define E1_STEP_PIN 36
-#define E1_DIR_PIN 34
-#define E1_ENABLE_PIN 30
-
-#define SDPOWER -1
-#define SDSS 53
-#define LED_PIN 13
-
-#if MOTHERBOARD == 33
-#define FAN_PIN 9 // (Sprinter config)
-#else
-#define FAN_PIN 4 // IO pin. Buffer needed
-#endif
-#define PS_ON_PIN 12
-#define KILL_PIN -1
-
-#define HEATER_0_PIN 10 // EXTRUDER 1
-#if MOTHERBOARD == 33
-#define HEATER_1_PIN -1
-#else
-#define HEATER_1_PIN 9 // EXTRUDER 2 (FAN On Sprinter)
-#endif
-#define HEATER_2_PIN -1
-#define TEMP_0_PIN 13 // ANALOG NUMBERING
-#define TEMP_1_PIN 15 // ANALOG NUMBERING
-#define TEMP_2_PIN -1 // ANALOG NUMBERING
-#define HEATER_BED_PIN 8 // BED
-#define TEMP_BED_PIN 14 // ANALOG NUMBERING
-
-#ifdef ULTRA_LCD
-
- #ifdef NEWPANEL
- //arduino pin which triggers an piezzo beeper
- #define BEEPER 33 // Beeper on AUX-4
-
- #define LCD_PINS_RS 16
- #define LCD_PINS_ENABLE 17
- #define LCD_PINS_D4 23
- #define LCD_PINS_D5 25
- #define LCD_PINS_D6 27
- #define LCD_PINS_D7 29
-
- //buttons are directly attached using AUX-2
- #define BTN_EN1 37
- #define BTN_EN2 35
- #define BTN_ENC 31 //the click
-
- #define BLEN_C 2
- #define BLEN_B 1
- #define BLEN_A 0
-
- #define SDCARDDETECT -1 // Ramps does not use this port
-
- //encoder rotation values
- #define encrot0 0
- #define encrot1 2
- #define encrot2 3
- #define encrot3 1
-
- #else //old style panel with shift register
- //arduino pin witch triggers an piezzo beeper
- #define BEEPER 33 No Beeper added
-
- //buttons are attached to a shift register
- // Not wired this yet
- //#define SHIFT_CLK 38
- //#define SHIFT_LD 42
- //#define SHIFT_OUT 40
- //#define SHIFT_EN 17
-
- #define LCD_PINS_RS 16
- #define LCD_PINS_ENABLE 17
- #define LCD_PINS_D4 23
- #define LCD_PINS_D5 25
- #define LCD_PINS_D6 27
- #define LCD_PINS_D7 29
-
- //encoder rotation values
- #define encrot0 0
- #define encrot1 2
- #define encrot2 3
- #define encrot3 1
-
-
- //bits in the shift register that carry the buttons for:
- // left up center down right red
- #define BL_LE 7
- #define BL_UP 6
- #define BL_MI 5
- #define BL_DW 4
- #define BL_RI 3
- #define BL_ST 2
-
- #define BLEN_B 1
- #define BLEN_A 0
- #endif
-#endif //ULTRA_LCD
-
-#else // RAMPS_V_1_1 or RAMPS_V_1_2 as default
-
-#define X_STEP_PIN 26
-#define X_DIR_PIN 28
-#define X_ENABLE_PIN 24
-#define X_MIN_PIN 3
-#define X_MAX_PIN -1 //2
-
-#define Y_STEP_PIN 38
-#define Y_DIR_PIN 40
-#define Y_ENABLE_PIN 36
-#define Y_MIN_PIN 16
-#define Y_MAX_PIN -1 //17
-
-#define Z_STEP_PIN 44
-#define Z_DIR_PIN 46
-#define Z_ENABLE_PIN 42
-#define Z_MIN_PIN 18
-#define Z_MAX_PIN -1 //19
-
-#define E0_STEP_PIN 32
-#define E0_DIR_PIN 34
-#define E0_ENABLE_PIN 30
-
-#define SDPOWER 48
-#define SDSS 53
-#define LED_PIN 13
-#define PS_ON_PIN -1
-#define KILL_PIN -1
-
-#ifdef RAMPS_V_1_0 // RAMPS_V_1_0
- #define HEATER_0_PIN 12 // RAMPS 1.0
- #define HEATER_BED_PIN -1 // RAMPS 1.0
- #define FAN_PIN 11 // RAMPS 1.0
-#else // RAMPS_V_1_1 or RAMPS_V_1_2
- #define HEATER_0_PIN 10 // RAMPS 1.1
- #define HEATER_BED_PIN 8 // RAMPS 1.1
- #define FAN_PIN 9 // RAMPS 1.1
-#endif
-#define HEATER_1_PIN -1
-#define HEATER_2_PIN -1
-#define TEMP_0_PIN 2 // MUST USE ANALOG INPUT NUMBERING NOT DIGITAL OUTPUT NUMBERING!!!!!!!!!
-#define TEMP_1_PIN -1
-#define TEMP_2_PIN -1
-#define TEMP_BED_PIN 1 // MUST USE ANALOG INPUT NUMBERING NOT DIGITAL OUTPUT NUMBERING!!!!!!!!!
-#endif
-
-// SPI for Max6675 Thermocouple
-
-#ifndef SDSUPPORT
-// these pins are defined in the SD library if building with SD support
- #define MAX_SCK_PIN 52
- #define MAX_MISO_PIN 50
- #define MAX_MOSI_PIN 51
- #define MAX6675_SS 53
-#else
- #define MAX6675_SS 49
-#endif
-
-#endif
-
-/****************************************************************************************
-* Duemilanove w/ ATMega328P pin assignment
-*
-****************************************************************************************/
-#if MOTHERBOARD == 4
-#define KNOWN_BOARD 1
-
-#ifndef __AVR_ATmega328P__
-#error Oops! Make sure you have 'Arduino Duemilanove w/ ATMega328' selected from the 'Tools -> Boards' menu.
-#endif
-
-#define X_STEP_PIN 19
-#define X_DIR_PIN 18
-#define X_ENABLE_PIN -1
-#define X_MIN_PIN 17
-#define X_MAX_PIN -1
-
-#define Y_STEP_PIN 10
-#define Y_DIR_PIN 7
-#define Y_ENABLE_PIN -1
-#define Y_MIN_PIN 8
-#define Y_MAX_PIN -1
-
-#define Z_STEP_PIN 13
-#define Z_DIR_PIN 3
-#define Z_ENABLE_PIN 2
-#define Z_MIN_PIN 4
-#define Z_MAX_PIN -1
-
-#define E0_STEP_PIN 11
-#define E0_DIR_PIN 12
-#define E0_ENABLE_PIN -1
-
-#define SDPOWER -1
-#define SDSS -1
-#define LED_PIN -1
-#define FAN_PIN 5
-#define PS_ON_PIN -1
-#define KILL_PIN -1
-
-#define HEATER_0_PIN 6
-#define HEATER_1_PIN -1
-#define HEATER_2_PIN -1
-#define TEMP_0_PIN 0 // MUST USE ANALOG INPUT NUMBERING NOT DIGITAL OUTPUT NUMBERING!!!!!!!!!
-#define TEMP_1_PIN -1
-#define TEMP_2_PIN -1
-#define HEATER_BED_PIN -1
-#define TEMP_BED_PIN -1
-
-#endif
-
-/****************************************************************************************
-* Gen6 pin assignment
-*
-****************************************************************************************/
-#if MOTHERBOARD == 5 || MOTHERBOARD == 51
-#define KNOWN_BOARD 1
-
-#ifndef __AVR_ATmega644P__
-#ifndef __AVR_ATmega1284P__
-#error Oops! Make sure you have 'Sanguino' selected from the 'Tools -> Boards' menu.
-#endif
-#endif
-
-//x axis pins
- #define X_STEP_PIN 15
- #define X_DIR_PIN 18
- #define X_ENABLE_PIN 19
- #define X_MIN_PIN 20
- #define X_MAX_PIN -1
-
- //y axis pins
- #define Y_STEP_PIN 23
- #define Y_DIR_PIN 22
- #define Y_ENABLE_PIN 24
- #define Y_MIN_PIN 25
- #define Y_MAX_PIN -1
-
- //z axis pins
- #define Z_STEP_PIN 27
- #define Z_DIR_PIN 28
- #define Z_ENABLE_PIN 29
- #define Z_MIN_PIN 30
- #define Z_MAX_PIN -1
-
- //extruder pins
- #define E0_STEP_PIN 4 //Edited @ EJE Electronics 20100715
- #define E0_DIR_PIN 2 //Edited @ EJE Electronics 20100715
- #define E0_ENABLE_PIN 3 //Added @ EJE Electronics 20100715
- #define TEMP_0_PIN 5 //changed @ rkoeppl 20110410
- #define TEMP_1_PIN -1 //changed @ rkoeppl 20110410
-
-
- #define TEMP_2_PIN -1 //changed @ rkoeppl 20110410
- #define HEATER_0_PIN 14 //changed @ rkoeppl 20110410
- #define HEATER_1_PIN -1
- #define HEATER_2_PIN -1
- #if MOTHERBOARD == 5
- #define HEATER_BED_PIN -1 //changed @ rkoeppl 20110410
- #define TEMP_BED_PIN -1 //changed @ rkoeppl 20110410
- #else
- #define HEATER_BED_PIN 1 //changed @ rkoeppl 20110410
- #define TEMP_BED_PIN 0 //changed @ rkoeppl 20110410
- #endif
- #define SDPOWER -1
- #define SDSS 17
- #define LED_PIN -1 //changed @ rkoeppl 20110410
- #define FAN_PIN -1 //changed @ rkoeppl 20110410
- #define PS_ON_PIN -1 //changed @ rkoeppl 20110410
- //our pin for debugging.
-
- #define DEBUG_PIN 0
-
- //our RS485 pins
- #define TX_ENABLE_PIN 12
- #define RX_ENABLE_PIN 13
-
-
-#endif
-
-/****************************************************************************************
-* Sanguinololu pin assignment
-*
-****************************************************************************************/
-#if MOTHERBOARD == 62
-#undef MOTHERBOARD
-#define MOTHERBOARD 6
-#define SANGUINOLOLU_V_1_2
-#endif
-#if MOTHERBOARD == 6
-#define KNOWN_BOARD 1
-#ifndef __AVR_ATmega644P__
-#ifndef __AVR_ATmega1284P__
-#error Oops! Make sure you have 'Sanguino' selected from the 'Tools -> Boards' menu.
-#endif
-#endif
-
-#define X_STEP_PIN 15
-#define X_DIR_PIN 21
-#define X_MIN_PIN 18
-#define X_MAX_PIN -1
-
-#define Y_STEP_PIN 22
-#define Y_DIR_PIN 23
-#define Y_MIN_PIN 19
-#define Y_MAX_PIN -1
-
-#define Z_STEP_PIN 3
-#define Z_DIR_PIN 2
-#define Z_MIN_PIN 20
-#define Z_MAX_PIN -1
-
-#define E0_STEP_PIN 1
-#define E0_DIR_PIN 0
-
-#define LED_PIN -1
-
-#define FAN_PIN -1
-
-#define PS_ON_PIN -1
-#define KILL_PIN -1
-
-#define HEATER_0_PIN 13 // (extruder)
-#define HEATER_1_PIN -1
-#define HEATER_2_PIN -1
-
-#ifdef SANGUINOLOLU_V_1_2
-
-#define HEATER_BED_PIN 12 // (bed)
-#define X_ENABLE_PIN 14
-#define Y_ENABLE_PIN 14
-#define Z_ENABLE_PIN 26
-#define E0_ENABLE_PIN 14
-
-#else
-
-#define HEATER_BED_PIN 14 // (bed)
-#define X_ENABLE_PIN -1
-#define Y_ENABLE_PIN -1
-#define Z_ENABLE_PIN -1
-#define E0_ENABLE_PIN -1
-
-#endif
-
-#define TEMP_0_PIN 7 // MUST USE ANALOG INPUT NUMBERING NOT DIGITAL OUTPUT NUMBERING!!!!!!!!! (pin 33 extruder)
-#define TEMP_1_PIN -1
-#define TEMP_2_PIN -1
-#define TEMP_BED_PIN 6 // MUST USE ANALOG INPUT NUMBERING NOT DIGITAL OUTPUT NUMBERING!!!!!!!!! (pin 34 bed)
-#define SDPOWER -1
-#define SDSS 31
-
-#endif
-
-
-#if MOTHERBOARD == 7
-#define KNOWN_BOARD
-/*****************************************************************
-* Ultimaker pin assignment
-******************************************************************/
-
-#ifndef __AVR_ATmega1280__
- #ifndef __AVR_ATmega2560__
- #error Oops! Make sure you have 'Arduino Mega' selected from the 'Tools -> Boards' menu.
- #endif
-#endif
-
-#define X_STEP_PIN 25
-#define X_DIR_PIN 23
-#define X_MIN_PIN 22
-#define X_MAX_PIN 24
-#define X_ENABLE_PIN 27
-
-#define Y_STEP_PIN 31
-#define Y_DIR_PIN 33
-#define Y_MIN_PIN 26
-#define Y_MAX_PIN 28
-#define Y_ENABLE_PIN 29
-
-#define Z_STEP_PIN 37
-#define Z_DIR_PIN 39
-#define Z_MIN_PIN 30
-#define Z_MAX_PIN 32
-#define Z_ENABLE_PIN 35
-
-#define HEATER_BED_PIN 4
-#define TEMP_BED_PIN 10
-
-#define HEATER_0_PIN 2
-#define TEMP_0_PIN 8
-
-#define HEATER_1_PIN 3
-#define TEMP_1_PIN 9
-
-#define HEATER_2_PIN -1
-#define TEMP_2_PIN -1
-
-#define E0_STEP_PIN 43
-#define E0_DIR_PIN 45
-#define E0_ENABLE_PIN 41
-
-#define E1_STEP_PIN 49
-#define E1_DIR_PIN 47
-#define E1_ENABLE_PIN 51
-
-#define SDPOWER -1
-#define SDSS 53
-#define LED_PIN 13
-#define FAN_PIN 7
-#define PS_ON_PIN 12
-#define KILL_PIN -1
-#define SUICIDE_PIN 54 //PIN that has to be turned on right after start, to keep power flowing.
-
-#ifdef ULTRA_LCD
-
- #ifdef NEWPANEL
- //arduino pin witch triggers an piezzo beeper
- #define BEEPER 18
-
- #define LCD_PINS_RS 20
- #define LCD_PINS_ENABLE 17
- #define LCD_PINS_D4 16
- #define LCD_PINS_D5 21
- #define LCD_PINS_D6 5
- #define LCD_PINS_D7 6
-
- //buttons are directly attached
- #define BTN_EN1 40
- #define BTN_EN2 42
- #define BTN_ENC 19 //the click
-
- #define BLEN_C 2
- #define BLEN_B 1
- #define BLEN_A 0
-
- #define SDCARDDETECT 38
-
- //encoder rotation values
- #define encrot0 0
- #define encrot1 2
- #define encrot2 3
- #define encrot3 1
- #else //old style panel with shift register
- //arduino pin witch triggers an piezzo beeper
- #define BEEPER 18
-
- //buttons are attached to a shift register
- #define SHIFT_CLK 38
- #define SHIFT_LD 42
- #define SHIFT_OUT 40
- #define SHIFT_EN 17
-
- #define LCD_PINS_RS 16
- #define LCD_PINS_ENABLE 5
- #define LCD_PINS_D4 6
- #define LCD_PINS_D5 21
- #define LCD_PINS_D6 20
- #define LCD_PINS_D7 19
-
- //encoder rotation values
- #define encrot0 0
- #define encrot1 2
- #define encrot2 3
- #define encrot3 1
-
- #define SDCARDDETECT -1
- //bits in the shift register that carry the buttons for:
- // left up center down right red
- #define BL_LE 7
- #define BL_UP 6
- #define BL_MI 5
- #define BL_DW 4
- #define BL_RI 3
- #define BL_ST 2
-
- #define BLEN_B 1
- #define BLEN_A 0
- #endif
-#endif //ULTRA_LCD
-
-#endif
-
-#if MOTHERBOARD == 71
-#define KNOWN_BOARD
-/*****************************************************************
-* Ultimaker pin assignment (Old electronics)
-******************************************************************/
-
-#ifndef __AVR_ATmega1280__
- #ifndef __AVR_ATmega2560__
- #error Oops! Make sure you have 'Arduino Mega' selected from the 'Tools -> Boards' menu.
- #endif
-#endif
-
-#define X_STEP_PIN 25
-#define X_DIR_PIN 23
-#define X_MIN_PIN 15
-#define X_MAX_PIN 14
-#define X_ENABLE_PIN 27
-
-#define Y_STEP_PIN 31
-#define Y_DIR_PIN 33
-#define Y_MIN_PIN 17
-#define Y_MAX_PIN 16
-#define Y_ENABLE_PIN 29
-
-#define Z_STEP_PIN 37
-#define Z_DIR_PIN 39
-#define Z_MIN_PIN 19
-#define Z_MAX_PIN 18
-#define Z_ENABLE_PIN 35
-
-#define HEATER_BED_PIN -1
-#define TEMP_BED_PIN -1
-
-#define HEATER_0_PIN 2
-#define TEMP_0_PIN 8
-
-#define HEATER_1_PIN 1
-#define TEMP_1_PIN 1
-
-#define HEATER_2_PIN -1
-#define TEMP_2_PIN -1
-
-#define E0_STEP_PIN 43
-#define E0_DIR_PIN 45
-#define E0_ENABLE_PIN 41
-
-#define E1_STEP_PIN -1
-#define E1_DIR_PIN -1
-#define E1_ENABLE_PIN -1
-
-#define SDPOWER -1
-#define SDSS -1
-#define LED_PIN -1
-#define FAN_PIN -1
-#define PS_ON_PIN -1
-#define KILL_PIN -1
-#define SUICIDE_PIN -1 //PIN that has to be turned on right after start, to keep power flowing.
-
-#define LCD_PINS_RS 24
-#define LCD_PINS_ENABLE 22
-#define LCD_PINS_D4 36
-#define LCD_PINS_D5 34
-#define LCD_PINS_D6 32
-#define LCD_PINS_D7 30
-
-#endif
-
-/****************************************************************************************
-* Teensylu 0.7 pin assingments (ATMEGA90USB)
-* Requires the Teensyduino software with Teensy2.0++ selected in arduino IDE!
-****************************************************************************************/
-#if MOTHERBOARD == 8
-#define MOTHERBOARD 8
-#define KNOWN_BOARD 1
-
-
-#define X_STEP_PIN 0
-#define X_DIR_PIN 1
-#define X_ENABLE_PIN 39
-#define X_MIN_PIN 13
-#define X_MAX_PIN -1
-
-#define Y_STEP_PIN 2
-#define Y_DIR_PIN 3
-#define Y_ENABLE_PIN 38
-#define Y_MIN_PIN 14
-#define Y_MAX_PIN -1
-
-#define Z_STEP_PIN 4
-#define Z_DIR_PIN 5
-#define Z_ENABLE_PIN 23
-#define Z_MIN_PIN 15
-#define Z_MAX_PIN -1
-
-#define E0_STEP_PIN 6
-#define E0_DIR_PIN 7
-#define E0_ENABLE_PIN 19
-
-
-
-#define HEATER_0_PIN 21 // Extruder
-#define HEATER_1_PIN -1
-#define HEATER_2_PIN -1
-#define HEATER_BED_PIN 20 // Bed
-#define FAN_PIN 22 // Fan
-
-#define TEMP_0_PIN 7 // Extruder
-#define TEMP_1_PIN -1
-#define TEMP_2_PIN -1
-#define TEMP_BED_PIN 6 // Bed
-
-#define SDPOWER -1
-#define SDSS 8
-#define LED_PIN -1
-#define PS_ON_PIN -1
-#define KILL_PIN -1
-#define ALARM_PIN -1
-
-#ifndef SDSUPPORT
-// these pins are defined in the SD library if building with SD support
- #define SCK_PIN 9
- #define MISO_PIN 11
- #define MOSI_PIN 10
-#endif
-#endif
-
-/****************************************************************************************
-* Gen3+ pin assignment
-*
-****************************************************************************************/
-#if MOTHERBOARD == 9
-#define MOTHERBOARD 6
-#define KNOWN_BOARD 1
-#ifndef __AVR_ATmega644P__
-#ifndef __AVR_ATmega1284P__
-#error Oops! Make sure you have 'Sanguino' selected from the 'Tools -> Boards' menu.
-#endif
-#endif
-
-#define X_STEP_PIN 15
-#define X_DIR_PIN 18
-#define X_MIN_PIN 20
-#define X_MAX_PIN -1
-
-#define Y_STEP_PIN 23
-#define Y_DIR_PIN 22
-#define Y_MIN_PIN 25
-#define Y_MAX_PIN -1
-
-#define Z_STEP_PIN 27
-#define Z_DIR_PIN 28
-#define Z_MIN_PIN 30
-#define Z_MAX_PIN -1
-
-#define E_STEP_PIN 17
-#define E_DIR_PIN 21
-
-#define LED_PIN -1
-
-#define FAN_PIN -1
-
-#define PS_ON_PIN 14
-#define KILL_PIN -1
-
-#define HEATER_0_PIN 12 // (extruder)
-
-#define HEATER_1_PIN 16 // (bed)
-#define X_ENABLE_PIN 19
-#define Y_ENABLE_PIN 24
-#define Z_ENABLE_PIN 29
-#define E_ENABLE_PIN 13
-
-#define TEMP_0_PIN 0 // MUST USE ANALOG INPUT NUMBERING NOT DIGITAL OUTPUT NUMBERING!!!!!!!!! (pin 33 extruder)
-#define TEMP_1_PIN 5 // MUST USE ANALOG INPUT NUMBERING NOT DIGITAL OUTPUT NUMBERING!!!!!!!!! (pin 34 bed)
-#define TEMP_2_PIN -1
-#define SDPOWER -1
-#define SDSS 4
-#define HEATER_2_PIN -1
-
-#endif
-
-
-
-/****************************************************************************************
-* Open Motion controller with enable based extruders
-*
-* ATMega644
-*
-* +---\/---+
-* (D 0) PB0 1| |40 PA0 (AI 0 / D31)
-* (D 1) PB1 2| |39 PA1 (AI 1 / D30)
-* INT2 (D 2) PB2 3| |38 PA2 (AI 2 / D29)
-* PWM (D 3) PB3 4| |37 PA3 (AI 3 / D28)
-* PWM (D 4) PB4 5| |36 PA4 (AI 4 / D27)
-* MOSI (D 5) PB5 6| |35 PA5 (AI 5 / D26)
-* MISO (D 6) PB6 7| |34 PA6 (AI 6 / D25)
-* SCK (D 7) PB7 8| |33 PA7 (AI 7 / D24)
-* RST 9| |32 AREF
-* VCC 10| |31 GND
-* GND 11| |30 AVCC
-* XTAL2 12| |29 PC7 (D 23)
-* XTAL1 13| |28 PC6 (D 22)
-* RX0 (D 8) PD0 14| |27 PC5 (D 21) TDI
-* TX0 (D 9) PD1 15| |26 PC4 (D 20) TDO
-* INT0 RX1 (D 10) PD2 16| |25 PC3 (D 19) TMS
-* INT1 TX1 (D 11) PD3 17| |24 PC2 (D 18) TCK
-* PWM (D 12) PD4 18| |23 PC1 (D 17) SDA
-* PWM (D 13) PD5 19| |22 PC0 (D 16) SCL
-* PWM (D 14) PD6 20| |21 PD7 (D 15) PWM
-* +--------+
-*
-****************************************************************************************/
-#if MOTHERBOARD == 90 //Alpha OMCA board
-#define KNOWN_BOARD 1
-
-#ifndef __AVR_ATmega644__
-#error Oops! Make sure you have 'SanguinoA' selected from the 'Tools -> Boards' menu.
-#endif
-
-#define X_STEP_PIN 21
-#define X_DIR_PIN 20
-#define X_ENABLE_PIN 24
-#define X_MIN_PIN 0
-#define X_MAX_PIN -1
-
-#define Y_STEP_PIN 23
-#define Y_DIR_PIN 22
-#define Y_ENABLE_PIN 24
-#define Y_MIN_PIN 1
-#define Y_MAX_PIN -1
-
-#define Z_STEP_PIN 26
-#define Z_DIR_PIN 25
-#define Z_ENABLE_PIN 24
-#define Z_MIN_PIN 2
-#define Z_MAX_PIN -1
-
-#define E0_STEP_PIN 28
-#define E0_DIR_PIN 27
-#define E0_ENABLE_PIN 24
-
-#define E1_STEP_PIN -1 // 19
-#define E1_DIR_PIN -1 // 18
-#define E1_ENABLE_PIN 24
-
-#define E2_STEP_PIN -1 // 17
-#define E2_DIR_PIN -1 // 16
-#define E2_ENABLE_PIN 24
-
-#define SDPOWER -1
-#define SDSS 11
-#define SDCARDDETECT -1 // 10 optional also used as mode pin
-#define LED_PIN -1
-#define FAN_PIN 3
-#define PS_ON_PIN -1
-#define KILL_PIN -1
-
-#define HEATER_0_PIN 4
-#define HEATER_1_PIN -1 // 12
-#define HEATER_2_PIN -1 // 13
-#define TEMP_0_PIN 0 //D27 // MUST USE ANALOG INPUT NUMBERING NOT DIGITAL OUTPUT NUMBERING!!!!!!!!!
-#define TEMP_1_PIN -1 // 1
-#define TEMP_2_PIN -1 // 2
-#define HEATER_BED_PIN -1 // 14/15
-#define TEMP_BED_PIN -1 // 1,2 or I2C
-/* Unused (1) (2) (3) 4 5 6 7 8 9 10 11 12 13 (14) (15) (16) 17 (18) (19) (20) (21) (22) (23) 24 (25) (26) (27) 28 (29) (30) (31) */
-
-#endif
-
-#if MOTHERBOARD == 91 // Final OMCA board -- REF http://sanguino.cc/hardware
-#define KNOWN_BOARD 1
-
-#if !defined(__AVR_ATmega644P__) && !defined(__AVR_ATmega644__)
-#error Oops! Make sure you have 'Sanguino' selected from the 'Tools -> Boards' menu. (Final OMCA board)
-#endif
-
-#define X_STEP_PIN 26
-#define X_DIR_PIN 25
-#define X_ENABLE_PIN 10
-#define X_MIN_PIN 0
-#define X_MAX_PIN -1
-
-#define Y_STEP_PIN 28
-#define Y_DIR_PIN 27
-#define Y_ENABLE_PIN 10
-#define Y_MIN_PIN 1
-#define Y_MAX_PIN -1
-
-#define Z_STEP_PIN 23
-#define Z_DIR_PIN 22
-#define Z_ENABLE_PIN 10
-#define Z_MIN_PIN 2
-#define Z_MAX_PIN -1
-
-#define E0_STEP_PIN 24
-#define E0_DIR_PIN 21
-#define E0_ENABLE_PIN 10
-
-/* future proofing */
-#define __FS 20
-#define __FD 19
-#define __GS 18
-#define __GD 13
-
-#define UNUSED_PWM 14 /* PWM on LEFT connector */
-
-#define E1_STEP_PIN -1 // 21
-#define E1_DIR_PIN -1 // 20
-#define E1_ENABLE_PIN -1 // 19
-
-#define E2_STEP_PIN -1 // 21
-#define E2_DIR_PIN -1 // 20
-#define E2_ENABLE_PIN -1 // 18
-
-#define SDPOWER -1
-#define SDSS 11
-#define SDCARDDETECT -1 // 10 optional also used as mode pin
-#define LED_PIN -1
-#define FAN_PIN 14 /* PWM on MIDDLE connector */
-#define PS_ON_PIN -1
-#define KILL_PIN -1
-
-#define HEATER_0_PIN 3 /*DONE PWM on RIGHT connector */
-#define HEATER_1_PIN -1
-#define HEATER_2_PIN -1
-#define HEATER_1_PIN -1
-#define HEATER_2_PIN -1
-#define TEMP_0_PIN 0 // ANALOG INPUT NUMBERING
-#define TEMP_1_PIN 1 // ANALOG
-#define TEMP_2_PIN 2 // ANALOG -- used for Case fan
-#define HEATER_BED_PIN 4
-#define TEMP_BED_PIN 2 // 1,2 or I2C
-
-#define CONTROLLERFAN_SENSE_PIN 15
-
-#define I2C_SCL 16
-#define I2C_SDA 17
-
-#endif
-
-
-#ifndef KNOWN_BOARD
-#error Unknown MOTHERBOARD value in configuration.h
-#endif
-
-//List of pins which to ignore when asked to change by gcode, 0 and 1 are RX and TX, do not mess with those!
-#define _E0_PINS E0_STEP_PIN, E0_DIR_PIN, E0_ENABLE_PIN, HEATER_0_PIN,
-#if EXTRUDERS > 1
- #define _E1_PINS E1_STEP_PIN, E1_DIR_PIN, E1_ENABLE_PIN, HEATER_1_PIN,
-#else
- #define _E1_PINS
-#endif
-#if EXTRUDERS > 2
- #define _E2_PINS E2_STEP_PIN, E2_DIR_PIN, E2_ENABLE_PIN, HEATER_2_PIN,
-#else
- #define _E2_PINS
-#endif
-
-#ifdef DISABLE_MAX_ENDSTOPS
-#define X_MAX_PIN -1
-#define Y_MAX_PIN -1
-#define Z_MAX_PIN -1
-#endif
-
-#define SENSITIVE_PINS {0, 1, X_STEP_PIN, X_DIR_PIN, X_ENABLE_PIN, X_MIN_PIN, X_MAX_PIN, Y_STEP_PIN, Y_DIR_PIN, Y_ENABLE_PIN, Y_MIN_PIN, Y_MAX_PIN, Z_STEP_PIN, Z_DIR_PIN, Z_ENABLE_PIN, Z_MIN_PIN, Z_MAX_PIN, LED_PIN, PS_ON_PIN, \
- HEATER_BED_PIN, FAN_PIN, \
- _E0_PINS _E1_PINS _E2_PINS \
- TEMP_0_PIN, TEMP_1_PIN, TEMP_2_PIN, TEMP_BED_PIN }
-#endif
+++ /dev/null
-#ifndef THERMISTORTABLES_H_
-#define THERMISTORTABLES_H_
-
-//#include "Marlin.h"
-
-#define OVERSAMPLENR 16
-
-#if (THERMISTORHEATER_0 == 1) || (THERMISTORHEATER_1 == 1) || (THERMISTORHEATER_2 == 1) || (THERMISTORBED == 1) //100k bed thermistor
-
-const short temptable_1[][2] PROGMEM = {
-{ 23*OVERSAMPLENR , 300 },
-{ 25*OVERSAMPLENR , 295 },
-{ 27*OVERSAMPLENR , 290 },
-{ 28*OVERSAMPLENR , 285 },
-{ 31*OVERSAMPLENR , 280 },
-{ 33*OVERSAMPLENR , 275 },
-{ 35*OVERSAMPLENR , 270 },
-{ 38*OVERSAMPLENR , 265 },
-{ 41*OVERSAMPLENR , 260 },
-{ 44*OVERSAMPLENR , 255 },
-{ 48*OVERSAMPLENR , 250 },
-{ 52*OVERSAMPLENR , 245 },
-{ 56*OVERSAMPLENR , 240 },
-{ 61*OVERSAMPLENR , 235 },
-{ 66*OVERSAMPLENR , 230 },
-{ 71*OVERSAMPLENR , 225 },
-{ 78*OVERSAMPLENR , 220 },
-{ 84*OVERSAMPLENR , 215 },
-{ 92*OVERSAMPLENR , 210 },
-{ 100*OVERSAMPLENR , 205 },
-{ 109*OVERSAMPLENR , 200 },
-{ 120*OVERSAMPLENR , 195 },
-{ 131*OVERSAMPLENR , 190 },
-{ 143*OVERSAMPLENR , 185 },
-{ 156*OVERSAMPLENR , 180 },
-{ 171*OVERSAMPLENR , 175 },
-{ 187*OVERSAMPLENR , 170 },
-{ 205*OVERSAMPLENR , 165 },
-{ 224*OVERSAMPLENR , 160 },
-{ 245*OVERSAMPLENR , 155 },
-{ 268*OVERSAMPLENR , 150 },
-{ 293*OVERSAMPLENR , 145 },
-{ 320*OVERSAMPLENR , 140 },
-{ 348*OVERSAMPLENR , 135 },
-{ 379*OVERSAMPLENR , 130 },
-{ 411*OVERSAMPLENR , 125 },
-{ 445*OVERSAMPLENR , 120 },
-{ 480*OVERSAMPLENR , 115 },
-{ 516*OVERSAMPLENR , 110 },
-{ 553*OVERSAMPLENR , 105 },
-{ 591*OVERSAMPLENR , 100 },
-{ 628*OVERSAMPLENR , 95 },
-{ 665*OVERSAMPLENR , 90 },
-{ 702*OVERSAMPLENR , 85 },
-{ 737*OVERSAMPLENR , 80 },
-{ 770*OVERSAMPLENR , 75 },
-{ 801*OVERSAMPLENR , 70 },
-{ 830*OVERSAMPLENR , 65 },
-{ 857*OVERSAMPLENR , 60 },
-{ 881*OVERSAMPLENR , 55 },
-{ 903*OVERSAMPLENR , 50 },
-{ 922*OVERSAMPLENR , 45 },
-{ 939*OVERSAMPLENR , 40 },
-{ 954*OVERSAMPLENR , 35 },
-{ 966*OVERSAMPLENR , 30 },
-{ 977*OVERSAMPLENR , 25 },
-{ 985*OVERSAMPLENR , 20 },
-{ 993*OVERSAMPLENR , 15 },
-{ 999*OVERSAMPLENR , 10 },
-{ 1004*OVERSAMPLENR , 5 },
-{ 1008*OVERSAMPLENR , 0 } //safety
-};
-#endif
-#if (THERMISTORHEATER_0 == 2) || (THERMISTORHEATER_1 == 2) || (THERMISTORHEATER_2 == 2) || (THERMISTORBED == 2) //200k bed thermistor
-const short temptable_2[][2] PROGMEM = {
- {1*OVERSAMPLENR, 848},
- {54*OVERSAMPLENR, 275},
- {107*OVERSAMPLENR, 228},
- {160*OVERSAMPLENR, 202},
- {213*OVERSAMPLENR, 185},
- {266*OVERSAMPLENR, 171},
- {319*OVERSAMPLENR, 160},
- {372*OVERSAMPLENR, 150},
- {425*OVERSAMPLENR, 141},
- {478*OVERSAMPLENR, 133},
- {531*OVERSAMPLENR, 125},
- {584*OVERSAMPLENR, 118},
- {637*OVERSAMPLENR, 110},
- {690*OVERSAMPLENR, 103},
- {743*OVERSAMPLENR, 95},
- {796*OVERSAMPLENR, 86},
- {849*OVERSAMPLENR, 77},
- {902*OVERSAMPLENR, 65},
- {955*OVERSAMPLENR, 49},
- {1008*OVERSAMPLENR, 17},
- {1020*OVERSAMPLENR, 0} //safety
-};
-
-#endif
-#if (THERMISTORHEATER_0 == 3) || (THERMISTORHEATER_1 == 3) || (THERMISTORHEATER_2 == 3) || (THERMISTORBED == 3) //mendel-parts
-const short temptable_3[][2] PROGMEM = {
- {1*OVERSAMPLENR,864},
- {21*OVERSAMPLENR,300},
- {25*OVERSAMPLENR,290},
- {29*OVERSAMPLENR,280},
- {33*OVERSAMPLENR,270},
- {39*OVERSAMPLENR,260},
- {46*OVERSAMPLENR,250},
- {54*OVERSAMPLENR,240},
- {64*OVERSAMPLENR,230},
- {75*OVERSAMPLENR,220},
- {90*OVERSAMPLENR,210},
- {107*OVERSAMPLENR,200},
- {128*OVERSAMPLENR,190},
- {154*OVERSAMPLENR,180},
- {184*OVERSAMPLENR,170},
- {221*OVERSAMPLENR,160},
- {265*OVERSAMPLENR,150},
- {316*OVERSAMPLENR,140},
- {375*OVERSAMPLENR,130},
- {441*OVERSAMPLENR,120},
- {513*OVERSAMPLENR,110},
- {588*OVERSAMPLENR,100},
- {734*OVERSAMPLENR,80},
- {856*OVERSAMPLENR,60},
- {938*OVERSAMPLENR,40},
- {986*OVERSAMPLENR,20},
- {1008*OVERSAMPLENR,0},
- {1018*OVERSAMPLENR,-20}
- };
-
-#endif
-#if (THERMISTORHEATER_0 == 4) || (THERMISTORHEATER_1 == 4) || (THERMISTORHEATER_2 == 4) || (THERMISTORBED == 4) //10k thermistor
-const short temptable_4[][2] PROGMEM = {
- {1*OVERSAMPLENR, 430},
- {54*OVERSAMPLENR, 137},
- {107*OVERSAMPLENR, 107},
- {160*OVERSAMPLENR, 91},
- {213*OVERSAMPLENR, 80},
- {266*OVERSAMPLENR, 71},
- {319*OVERSAMPLENR, 64},
- {372*OVERSAMPLENR, 57},
- {425*OVERSAMPLENR, 51},
- {478*OVERSAMPLENR, 46},
- {531*OVERSAMPLENR, 41},
- {584*OVERSAMPLENR, 35},
- {637*OVERSAMPLENR, 30},
- {690*OVERSAMPLENR, 25},
- {743*OVERSAMPLENR, 20},
- {796*OVERSAMPLENR, 14},
- {849*OVERSAMPLENR, 7},
- {902*OVERSAMPLENR, 0},
- {955*OVERSAMPLENR, -11},
- {1008*OVERSAMPLENR, -35}
-};
-#endif
-
-#if (THERMISTORHEATER_0 == 5) || (THERMISTORHEATER_1 == 5) || (THERMISTORHEATER_2 == 5) || (THERMISTORBED == 5) //100k ParCan thermistor (104GT-2)
-const short temptable_5[][2] PROGMEM = {
-{1*OVERSAMPLENR, 713},
-{18*OVERSAMPLENR, 316},
-{35*OVERSAMPLENR, 266},
-{52*OVERSAMPLENR, 239},
-{69*OVERSAMPLENR, 221},
-{86*OVERSAMPLENR, 208},
-{103*OVERSAMPLENR, 197},
-{120*OVERSAMPLENR, 188},
-{137*OVERSAMPLENR, 181},
-{154*OVERSAMPLENR, 174},
-{171*OVERSAMPLENR, 169},
-{188*OVERSAMPLENR, 163},
-{205*OVERSAMPLENR, 159},
-{222*OVERSAMPLENR, 154},
-{239*OVERSAMPLENR, 150},
-{256*OVERSAMPLENR, 147},
-{273*OVERSAMPLENR, 143},
-{290*OVERSAMPLENR, 140},
-{307*OVERSAMPLENR, 136},
-{324*OVERSAMPLENR, 133},
-{341*OVERSAMPLENR, 130},
-{358*OVERSAMPLENR, 128},
-{375*OVERSAMPLENR, 125},
-{392*OVERSAMPLENR, 122},
-{409*OVERSAMPLENR, 120},
-{426*OVERSAMPLENR, 117},
-{443*OVERSAMPLENR, 115},
-{460*OVERSAMPLENR, 112},
-{477*OVERSAMPLENR, 110},
-{494*OVERSAMPLENR, 108},
-{511*OVERSAMPLENR, 106},
-{528*OVERSAMPLENR, 103},
-{545*OVERSAMPLENR, 101},
-{562*OVERSAMPLENR, 99},
-{579*OVERSAMPLENR, 97},
-{596*OVERSAMPLENR, 95},
-{613*OVERSAMPLENR, 92},
-{630*OVERSAMPLENR, 90},
-{647*OVERSAMPLENR, 88},
-{664*OVERSAMPLENR, 86},
-{681*OVERSAMPLENR, 84},
-{698*OVERSAMPLENR, 81},
-{715*OVERSAMPLENR, 79},
-{732*OVERSAMPLENR, 77},
-{749*OVERSAMPLENR, 75},
-{766*OVERSAMPLENR, 72},
-{783*OVERSAMPLENR, 70},
-{800*OVERSAMPLENR, 67},
-{817*OVERSAMPLENR, 64},
-{834*OVERSAMPLENR, 61},
-{851*OVERSAMPLENR, 58},
-{868*OVERSAMPLENR, 55},
-{885*OVERSAMPLENR, 52},
-{902*OVERSAMPLENR, 48},
-{919*OVERSAMPLENR, 44},
-{936*OVERSAMPLENR, 40},
-{953*OVERSAMPLENR, 34},
-{970*OVERSAMPLENR, 28},
-{987*OVERSAMPLENR, 20},
-{1004*OVERSAMPLENR, 8},
-{1021*OVERSAMPLENR, 0}
-};
-#endif
-
-#if (THERMISTORHEATER_0 == 6) || (THERMISTORHEATER_1 == 6) || (THERMISTORHEATER_2 == 6) || (THERMISTORBED == 6) // 100k Epcos thermistor
-const short temptable_6[][2] PROGMEM = {
- {28*OVERSAMPLENR, 250},
- {31*OVERSAMPLENR, 245},
- {35*OVERSAMPLENR, 240},
- {39*OVERSAMPLENR, 235},
- {42*OVERSAMPLENR, 230},
- {44*OVERSAMPLENR, 225},
- {49*OVERSAMPLENR, 220},
- {53*OVERSAMPLENR, 215},
- {62*OVERSAMPLENR, 210},
- {73*OVERSAMPLENR, 205},
- {72*OVERSAMPLENR, 200},
- {94*OVERSAMPLENR, 190},
- {102*OVERSAMPLENR, 185},
- {116*OVERSAMPLENR, 170},
- {143*OVERSAMPLENR, 160},
- {183*OVERSAMPLENR, 150},
- {223*OVERSAMPLENR, 140},
- {270*OVERSAMPLENR, 130},
- {318*OVERSAMPLENR, 120},
- {383*OVERSAMPLENR, 110},
- {413*OVERSAMPLENR, 105},
- {439*OVERSAMPLENR, 100},
- {484*OVERSAMPLENR, 95},
- {513*OVERSAMPLENR, 90},
- {607*OVERSAMPLENR, 80},
- {664*OVERSAMPLENR, 70},
- {781*OVERSAMPLENR, 60},
- {810*OVERSAMPLENR, 55},
- {849*OVERSAMPLENR, 50},
- {914*OVERSAMPLENR, 45},
- {914*OVERSAMPLENR, 40},
- {935*OVERSAMPLENR, 35},
- {954*OVERSAMPLENR, 30},
- {970*OVERSAMPLENR, 25},
- {978*OVERSAMPLENR, 22},
- {1008*OVERSAMPLENR, 3}
-};
-#endif
-
-#if (THERMISTORHEATER_0 == 7) || (THERMISTORHEATER_1 == 7) || (THERMISTORHEATER_2 == 7) || (THERMISTORBED == 7) // 100k Honeywell 135-104LAG-J01
-const short temptable_7[][2] PROGMEM = {
- {46*OVERSAMPLENR, 270},
- {50*OVERSAMPLENR, 265},
- {54*OVERSAMPLENR, 260},
- {58*OVERSAMPLENR, 255},
- {62*OVERSAMPLENR, 250},
- {67*OVERSAMPLENR, 245},
- {72*OVERSAMPLENR, 240},
- {79*OVERSAMPLENR, 235},
- {85*OVERSAMPLENR, 230},
- {91*OVERSAMPLENR, 225},
- {99*OVERSAMPLENR, 220},
- {107*OVERSAMPLENR, 215},
- {116*OVERSAMPLENR, 210},
- {126*OVERSAMPLENR, 205},
- {136*OVERSAMPLENR, 200},
- {149*OVERSAMPLENR, 195},
- {160*OVERSAMPLENR, 190},
- {175*OVERSAMPLENR, 185},
- {191*OVERSAMPLENR, 180},
- {209*OVERSAMPLENR, 175},
- {224*OVERSAMPLENR, 170},
- {246*OVERSAMPLENR, 165},
- {267*OVERSAMPLENR, 160},
- {293*OVERSAMPLENR, 155},
- {316*OVERSAMPLENR, 150},
- {340*OVERSAMPLENR, 145},
- {364*OVERSAMPLENR, 140},
- {396*OVERSAMPLENR, 135},
- {425*OVERSAMPLENR, 130},
- {460*OVERSAMPLENR, 125},
- {489*OVERSAMPLENR, 120},
- {526*OVERSAMPLENR, 115},
- {558*OVERSAMPLENR, 110},
- {591*OVERSAMPLENR, 105},
- {628*OVERSAMPLENR, 100},
- {660*OVERSAMPLENR, 95},
- {696*OVERSAMPLENR, 90},
- {733*OVERSAMPLENR, 85},
- {761*OVERSAMPLENR, 80},
- {794*OVERSAMPLENR, 75},
- {819*OVERSAMPLENR, 70},
- {847*OVERSAMPLENR, 65},
- {870*OVERSAMPLENR, 60},
- {892*OVERSAMPLENR, 55},
- {911*OVERSAMPLENR, 50},
- {929*OVERSAMPLENR, 45},
- {944*OVERSAMPLENR, 40},
- {959*OVERSAMPLENR, 35},
- {971*OVERSAMPLENR, 30},
- {981*OVERSAMPLENR, 25},
- {989*OVERSAMPLENR, 20},
- {994*OVERSAMPLENR, 15},
- {1001*OVERSAMPLENR, 10},
- {1005*OVERSAMPLENR, 5}
-};
-#endif
-
-#define _TT_NAME(_N) temptable_ ## _N
-#define TT_NAME(_N) _TT_NAME(_N)
-
-#ifdef THERMISTORHEATER_0
- #define heater_0_temptable TT_NAME(THERMISTORHEATER_0)
- #define heater_0_temptable_len (sizeof(heater_0_temptable)/sizeof(*heater_0_temptable))
-#else
-#ifdef HEATER_0_USES_THERMISTOR
- #error No heater 0 thermistor table specified
-#else // HEATER_0_USES_THERMISTOR
- #define heater_0_temptable 0
- #define heater_0_temptable_len 0
-#endif // HEATER_0_USES_THERMISTOR
-#endif
-
-#ifdef THERMISTORHEATER_1
- #define heater_1_temptable TT_NAME(THERMISTORHEATER_1)
- #define heater_1_temptable_len (sizeof(heater_1_temptable)/sizeof(*heater_1_temptable))
-#else
-#ifdef HEATER_1_USES_THERMISTOR
- #error No heater 1 thermistor table specified
-#else // HEATER_1_USES_THERMISTOR
- #define heater_1_temptable 0
- #define heater_1_temptable_len 0
-#endif // HEATER_1_USES_THERMISTOR
-#endif
-
-#ifdef THERMISTORHEATER_2
- #define heater_2_temptable TT_NAME(THERMISTORHEATER_2)
- #define heater_2_temptable_len (sizeof(heater_2_temptable)/sizeof(*heater_2_temptable))
-#else
-#ifdef HEATER_2_USES_THERMISTOR
- #error No heater 2 thermistor table specified
-#else // HEATER_2_USES_THERMISTOR
- #define heater_2_temptable 0
- #define heater_2_temptable_len 0
-#endif // HEATER_2_USES_THERMISTOR
-#endif
-
-#ifdef THERMISTORBED
- #define bedtemptable TT_NAME(THERMISTORBED)
- #define bedtemptable_len (sizeof(bedtemptable)/sizeof(*bedtemptable))
-#else
-#ifdef BED_USES_THERMISTOR
- #error No bed thermistor table specified
-#endif // BED_USES_THERMISTOR
-#endif
-
-#endif //THERMISTORTABLES_H_
-
+++ /dev/null
-/*
- heatpot.c
-
- Copyright 2008-2012 Michel Pollet <buserror@gmail.com>
-
- This file is part of simavr.
-
- simavr 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 3 of the License, or
- (at your option) any later version.
-
- simavr 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 simavr. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <math.h>
-#include "sim_avr.h"
-#include "sim_time.h"
-
-#include "heatpot.h"
-
-static avr_cycle_count_t
-heatpot_evaluate_timer(
- struct avr_t * avr,
- avr_cycle_count_t when,
- void * param)
-{
- heatpot_p p = (heatpot_p) param;
-
- float weight = 0.0;
-
- for (int si = 0; si < 32; si++)
- if (p->tally[si].sid)
- weight += p->tally[si].cost;
-
- float delta = p->current - p->ambiant;
- float noise = (float)((random() % 32) - 16) / 32.0;
- delta += noise;
-
- float cost = ((delta/2) + noise) * -weight;
-
- if (delta < 0) {
- cost = (-delta / 10);
- } else {
- cost = weight > 0 ? 0.1 : -0.1;
- }
- p->current += cost;
-// printf("%s w=%.3f d=%.3f c=%.3f = %.3f\n", p->name, weight, delta, cost, p->current);
-
- avr_raise_irq(p->irq + IRQ_HEATPOT_TEMP_OUT, p->current * 256);
-
- return when + p->cycle;
-}
-
-static void
-heatpot_tally_in_hook(
- struct avr_irq_t * irq,
- uint32_t value,
- void * param)
-{
- heatpot_p p = (heatpot_p)param;
- heatpot_data_t v = {.v = value };
-
- heatpot_tally(p, v.sid, v.cost);
-}
-
-static const char * irq_names[IRQ_HEATPOT_COUNT] = {
- [IRQ_HEATPOT_TALLY] = "8<heatpot.tally",
-};
-
-void
-heatpot_init(
- struct avr_t * avr,
- heatpot_p p,
- const char * name,
- float ambiant )
-{
- memset(p, 0, sizeof(*p));
- p->avr = avr;
- strcpy(p->name, (char*)name);
- p->irq = avr_alloc_irq(&avr->irq_pool, 0, IRQ_HEATPOT_COUNT, irq_names);
- avr_irq_register_notify(p->irq + IRQ_HEATPOT_TALLY, heatpot_tally_in_hook, p);
-
- p->cycle = avr_usec_to_cycles(avr, 100000 / 1 /*1000 */);
- avr_cycle_timer_register_usec(avr, p->cycle, heatpot_evaluate_timer, p);
-
- p->ambiant = p->current = ambiant;
-}
-
-void
-heatpot_tally(
- heatpot_p p,
- int sid,
- float cost )
-{
- int f = -1, ei = -1;
- for (int si = 0; si < 32 && f == -1; si++)
- if (p->tally[si].sid == 0)
- ei = ei == -1 ? si : ei;
- else if (p->tally[si].sid == sid)
- f = si;
- if (f == -1) {
- if (ei == -1) {
- printf("%s(%s) no room for extra tally source id %d\n", __func__, p->name, sid);
- return;
- }
- f = ei;
- }
- p->tally[f].sid = sid;
- p->tally[f].cost = cost;
-}
+++ /dev/null
-/*
- heatpot.h
-
- Copyright 2008-2012 Michel Pollet <buserror@gmail.com>
-
- This file is part of simavr.
-
- simavr 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 3 of the License, or
- (at your option) any later version.
-
- simavr 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 simavr. If not, see <http://www.gnu.org/licenses/>.
- */
-
-
-#ifndef __HEATPOT_H___
-#define __HEATPOT_H___
-
-#include "sim_irq.h"
-
-enum {
- IRQ_HEATPOT_TALLY = 0, // heatpot_data_t
- IRQ_HEATPOT_TEMP_OUT, // Celcius * 256
- IRQ_HEATPOT_COUNT
-};
-
-typedef union {
- int32_t sid : 8, cost;
- uint32_t v;
-} heatpot_data_t;
-
-typedef struct heatpot_t {
- avr_irq_t * irq; // irq list
- struct avr_t * avr;
- char name[32];
-
- struct { int sid; float cost; } tally[32];
-
- float ambiant;
- float current;
-
- avr_cycle_count_t cycle;
-} heatpot_t, *heatpot_p;
-
-void
-heatpot_init(
- struct avr_t * avr,
- heatpot_p p,
- const char * name,
- float ambiant );
-
-void
-heatpot_tally(
- heatpot_p p,
- int sid,
- float cost );
-
-#endif /* __HEATPOT_H___ */
+++ /dev/null
-/*
- simduino.c
-
- Copyright 2008, 2009 Michel Pollet <buserror@gmail.com>
-
- This file is part of simavr.
-
- simavr 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 3 of the License, or
- (at your option) any later version.
-
- simavr 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 simavr. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include <unistd.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <libgen.h>
-#include <pthread.h>
-
-#include "sim_avr.h"
-#include "avr_ioport.h"
-#include "sim_elf.h"
-#include "sim_hex.h"
-#include "sim_gdb.h"
-
-#include "reprap_gl.h"
-
-#include "button.h"
-#include "reprap.h"
-#include "arduidiot_pins.h"
-
-#define __AVR_ATmega644__
-#include "marlin/pins.h"
-
-#include <stdbool.h>
-#define PROGMEM
-#include "marlin/Configuration.h"
-
-/*
- * these are the sources of heat and cold to register to the heatpots
- */
-enum {
- TALLY_AMBIANT = 1,
- TALLY_HOTEND_PWM,
- TALLY_HOTBED,
- TALLY_HOTEND_FAN,
-};
-
-reprap_t reprap;
-
-avr_t * avr = NULL;
-
-// gnu hackery to make sure the parameter is expanded
-#define _TERMISTOR_TABLE(num) \
- temptable_##num
-#define TERMISTOR_TABLE(num) \
- _TERMISTOR_TABLE(num)
-
-/*
- * called when the AVR change any of the pins on port B
- * so lets update our buffer
- */
-static void
-hotbed_change_hook(
- struct avr_irq_t * irq,
- uint32_t value,
- void * param)
-{
-// printf("%s %d\n", __func__, value);
-// pin_state = (pin_state & ~(1 << irq->irq)) | (value << irq->irq);
- heatpot_tally(
- &reprap.hotbed,
- TALLY_HOTEND_PWM,
- value ? 1.0f : 0 );
-}
-static void
-hotend_change_hook(
- struct avr_irq_t * irq,
- uint32_t value,
- void * param)
-{
-// printf("%s %d\n", __func__, value);
-// pin_state = (pin_state & ~(1 << irq->irq)) | (value << irq->irq);
- heatpot_tally(
- &reprap.hotend,
- TALLY_HOTBED,
- value ? 1.0f : 0 );
-}
-static void
-hotend_fan_change_hook(
- struct avr_irq_t * irq,
- uint32_t value,
- void * param)
-{
- printf("%s %d\n", __func__, value);
-// pin_state = (pin_state & ~(1 << irq->irq)) | (value << irq->irq);
- heatpot_tally(
- &reprap.hotend,
- TALLY_HOTEND_FAN,
- value ? -0.05 : 0 );
-}
-
-
-
-char avr_flash_path[1024];
-int avr_flash_fd = 0;
-
-// avr special flash initalization
-// here: open and map a file to enable a persistent storage for the flash memory
-void avr_special_init( avr_t * avr)
-{
- // open the file
- avr_flash_fd = open(avr_flash_path, O_RDWR|O_CREAT, 0644);
- if (avr_flash_fd < 0) {
- perror(avr_flash_path);
- exit(1);
- }
- // resize and map the file the file
- (void)ftruncate(avr_flash_fd, avr->flashend + 1);
- ssize_t r = read(avr_flash_fd, avr->flash, avr->flashend + 1);
- if (r != avr->flashend + 1) {
- fprintf(stderr, "unable to load flash memory\n");
- perror(avr_flash_path);
- exit(1);
- }
-}
-
-// avr special flash deinitalization
-// here: cleanup the persistent storage
-void avr_special_deinit( avr_t* avr)
-{
- puts(__func__);
- lseek(avr_flash_fd, SEEK_SET, 0);
- ssize_t r = write(avr_flash_fd, avr->flash, avr->flashend + 1);
- if (r != avr->flashend + 1) {
- fprintf(stderr, "unable to load flash memory\n");
- perror(avr_flash_path);
- }
- close(avr_flash_fd);
- uart_pty_stop(&reprap.uart_pty);
-}
-
-#define MEGA644_GPIOR0 0x3e
-
-static void
-reprap_relief_callback(
- struct avr_t * avr,
- avr_io_addr_t addr,
- uint8_t v,
- void * param)
-{
-// printf("%s write %x\n", __func__, addr);
- static uint16_t tick = 0;
- if (!(tick++ & 0xf))
- usleep(100);
-}
-
-static void *
-avr_run_thread(
- void * ignore)
-{
- while (1) {
- avr_run(avr);
- }
- return NULL;
-}
-
-void
-reprap_init(
- avr_t * avr,
- reprap_p r)
-{
- r->avr = avr;
- uart_pty_init(avr, &r->uart_pty);
- uart_pty_connect(&r->uart_pty, '0');
-
- thermistor_init(avr, &r->therm_hotend, 0,
- (short*)TERMISTOR_TABLE(TEMP_SENSOR_0),
- sizeof(TERMISTOR_TABLE(TEMP_SENSOR_0)) / sizeof(short) / 2,
- OVERSAMPLENR, 25.0f);
- thermistor_init(avr, &r->therm_hotbed, 2,
- (short*)TERMISTOR_TABLE(TEMP_SENSOR_BED),
- sizeof(TERMISTOR_TABLE(TEMP_SENSOR_BED)) / sizeof(short) / 2,
- OVERSAMPLENR, 30.0f);
- thermistor_init(avr, &r->therm_spare, 1,
- (short*)temptable_5, sizeof(temptable_5) / sizeof(short) / 2,
- OVERSAMPLENR, 10.0f);
-
- heatpot_init(avr, &r->hotend, "hotend", 28.0f);
- heatpot_init(avr, &r->hotbed, "hotbed", 25.0f);
-
- heatpot_tally(&r->hotend, TALLY_AMBIANT, -0.5f);
- heatpot_tally(&r->hotbed, TALLY_AMBIANT, -0.3f);
-
- /* connect heatpot temp output to thermistors */
- avr_connect_irq(r->hotend.irq + IRQ_HEATPOT_TEMP_OUT,
- r->therm_hotend.irq + IRQ_TERM_TEMP_VALUE_IN);
- avr_connect_irq(r->hotbed.irq + IRQ_HEATPOT_TEMP_OUT,
- r->therm_hotbed.irq + IRQ_TERM_TEMP_VALUE_IN);
-
- avr_irq_register_notify(
- get_ardu_irq(avr, HEATER_0_PIN, arduidiot_644),
- hotend_change_hook, NULL);
- avr_irq_register_notify(
- get_ardu_irq(avr, FAN_PIN, arduidiot_644),
- hotend_fan_change_hook, NULL);
- avr_irq_register_notify(
- get_ardu_irq(avr, HEATER_BED_PIN, arduidiot_644),
- hotbed_change_hook, NULL);
-
- //avr_irq_register_notify()
- float axis_pp_per_mm[4] = DEFAULT_AXIS_STEPS_PER_UNIT; // from Marlin!
- {
- avr_irq_t * e = get_ardu_irq(avr, X_ENABLE_PIN, arduidiot_644);
- avr_irq_t * s = get_ardu_irq(avr, X_STEP_PIN, arduidiot_644);
- avr_irq_t * d = get_ardu_irq(avr, X_DIR_PIN, arduidiot_644);
- avr_irq_t * m = get_ardu_irq(avr, X_MIN_PIN, arduidiot_644);
-
- stepper_init(avr, &r->step_x, "X", axis_pp_per_mm[0], 100, 200, 0);
- stepper_connect(&r->step_x, s, d, e, m, stepper_endstop_inverted);
- }
- {
- avr_irq_t * e = get_ardu_irq(avr, Y_ENABLE_PIN, arduidiot_644);
- avr_irq_t * s = get_ardu_irq(avr, Y_STEP_PIN, arduidiot_644);
- avr_irq_t * d = get_ardu_irq(avr, Y_DIR_PIN, arduidiot_644);
- avr_irq_t * m = get_ardu_irq(avr, Y_MIN_PIN, arduidiot_644);
-
- stepper_init(avr, &r->step_y, "Y", axis_pp_per_mm[1], 100, 200, 0);
- stepper_connect(&r->step_y, s, d, e, m, stepper_endstop_inverted);
- }
- {
- avr_irq_t * e = get_ardu_irq(avr, Z_ENABLE_PIN, arduidiot_644);
- avr_irq_t * s = get_ardu_irq(avr, Z_STEP_PIN, arduidiot_644);
- avr_irq_t * d = get_ardu_irq(avr, Z_DIR_PIN, arduidiot_644);
- avr_irq_t * m = get_ardu_irq(avr, Z_MIN_PIN, arduidiot_644);
-
- stepper_init(avr, &r->step_z, "Z", axis_pp_per_mm[2], 20, 130, 0);
- stepper_connect(&r->step_z, s, d, e, m, stepper_endstop_inverted);
- }
- {
- avr_irq_t * e = get_ardu_irq(avr, E0_ENABLE_PIN, arduidiot_644);
- avr_irq_t * s = get_ardu_irq(avr, E0_STEP_PIN, arduidiot_644);
- avr_irq_t * d = get_ardu_irq(avr, E0_DIR_PIN, arduidiot_644);
-
- stepper_init(avr, &r->step_e, "E", axis_pp_per_mm[3], 0, 0, 0);
- stepper_connect(&r->step_e, s, d, e, NULL, 0);
- }
-
-}
-
-int main(int argc, char *argv[])
-{
- char path[256];
- strcpy(path, argv[0]);
- strcpy(path, dirname(path));
- strcpy(path, dirname(path));
- printf("Stripped base directory to '%s'\n", path);
- chdir(path);
-
- int debug = 0;
-
- for (int i = 1; i < argc; i++)
- if (!strcmp(argv[i], "-d"))
- debug++;
- avr = avr_make_mcu_by_name("atmega644");
- if (!avr) {
- fprintf(stderr, "%s: Error creating the AVR core\n", argv[0]);
- exit(1);
- }
-// snprintf(avr_flash_path, sizeof(avr_flash_path), "%s/%s", pwd, "simduino_flash.bin");
- strcpy(avr_flash_path, "reprap_flash.bin");
- // register our own functions
- avr->special_init = avr_special_init;
- avr->special_deinit = avr_special_deinit;
- avr_init(avr);
- avr->frequency = 20000000;
- avr->aref = avr->avcc = avr->vcc = 5 * 1000; // needed for ADC
-
- elf_firmware_t f;
- const char * fname = "/opt/reprap/tvrrug/Marlin/Marlin/applet/Marlin.elf";
- // try to load an ELF file, before trying the .hex
- if (elf_read_firmware(fname, &f) == 0) {
- printf("firmware %s f=%d mmcu=%s\n", fname, (int)f.frequency, f.mmcu);
- avr_load_firmware(avr, &f);
- } else {
- char path[1024];
- uint32_t base, size;
-// snprintf(path, sizeof(path), "%s/%s", pwd, "ATmegaBOOT_168_atmega328.ihex");
- strcpy(path, "marlin/Marlin.hex");
-// strcpy(path, "marlin/bootloader-644-20MHz.hex");
- uint8_t * boot = read_ihex_file(path, &size, &base);
- if (!boot) {
- fprintf(stderr, "%s: Unable to load %s\n", argv[0], path);
- exit(1);
- }
- printf("Firmware %04x(%04x in AVR talk): %d bytes (%d words)\n", base, base/2, size, size/2);
- memcpy(avr->flash + base, boot, size);
- free(boot);
- avr->pc = base;
- avr->codeend = avr->flashend;
- }
- //avr->trace = 1;
-
- // even if not setup at startup, activate gdb if crashing
- avr->gdb_port = 1234;
- if (debug) {
- printf("AVR is stopped, waiting on gdb on port %d. Use 'target remote :%d' in avr-gdb\n",
- avr->gdb_port, avr->gdb_port);
- avr->state = cpu_Stopped;
- avr_gdb_init(avr);
- }
-
- // Marlin doesn't loop, sleep, so we don't know when it's idle
- // I changed Marlin to do a spurious write to the GPIOR0 register so we can trap it
- avr_register_io_write(avr, MEGA644_GPIOR0, reprap_relief_callback, NULL);
-
- reprap_init(avr, &reprap);
-
- gl_init(argc, argv);
- pthread_t run;
- pthread_create(&run, NULL, avr_run_thread, NULL);
-
- gl_runloop();
-
-}
+++ /dev/null
-/*
- reprap.h
-
- Copyright 2008-2012 Michel Pollet <buserror@gmail.com>
-
- This file is part of simavr.
-
- simavr 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 3 of the License, or
- (at your option) any later version.
-
- simavr 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 simavr. If not, see <http://www.gnu.org/licenses/>.
- */
-
-
-#ifndef __REPRAP_H___
-#define __REPRAP_H___
-
-#include "sim_avr.h"
-#include "thermistor.h"
-#include "heatpot.h"
-#include "stepper.h"
-#include "uart_pty.h"
-#include "sim_vcd_file.h"
-
-typedef struct reprap_t {
- struct avr_t * avr;
- thermistor_t therm_hotend;
- thermistor_t therm_hotbed;
- thermistor_t therm_spare;
- heatpot_t hotend;
- heatpot_t hotbed;
-
- stepper_t step_x, step_y, step_z, step_e;
-
- uart_pty_t uart_pty;
- avr_vcd_t vcd_file;
-} reprap_t, *reprap_p;
-
-#endif /* __REPRAP_H___ */
+++ /dev/null
-/*
- reprap_gl.c
-
- Copyright 2008-2012 Michel Pollet <buserror@gmail.com>
-
- This file is part of simavr.
-
- simavr 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 3 of the License, or
- (at your option) any later version.
-
- simavr 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 simavr. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#if __APPLE__
-#define GL_GLEXT_PROTOTYPES
-#include <GLUT/glut.h>
-#include <OpenGL/gl.h>
-#include <OpenGL/glext.h>
-#else
-#define GL_GLEXT_PROTOTYPES
-#include <GL/gl.h>
-#include <GL/glut.h>
-#include <GL/glext.h>
-#endif
-
-#include <stdio.h>
-#include <math.h>
-
-#include "reprap.h"
-#include "reprap_gl.h"
-
-#include "c3.h"
-#include "c3camera.h"
-#include "c3driver_context.h"
-#include "c3stl.h"
-#include "c3lines.h"
-#include "c3sphere.h"
-#include "c3light.h"
-#include "c3program.h"
-#include "c3gl.h"
-#include "c3gl_fbo.h"
-
-#include <cairo/cairo.h>
-
-struct cairo_surface_t;
-
-int _w = 800, _h = 600;
-
-c3context_p c3 = NULL;
-c3context_p hud = NULL;
-
-c3object_p head = NULL; // hotend
-c3texture_p fbo_c3; // frame buffer object texture
-c3program_p fxaa = NULL; // full screen antialias shader
-c3program_p scene = NULL;
-c3gl_fbo_t fbo;
-c3gl_fbo_t shadow;
-
-
-enum {
- uniform_ShadowMap = 0,
- uniform_pixelOffset,
- uniform_tex0,
- uniform_shadowMatrix
-};
-const char *uniforms_scene[] = {
- "shadowMap",
- "pixelOffset",
- "tex0",
- "shadowMatrix",
- NULL
-};
-
-int glsl_version = 110;
-
-extern reprap_t reprap;
-
-static int dumpError(const char * what)
-{
- GLenum e;
- int count = 0;
- while ((e = glGetError()) != GL_NO_ERROR) {
- printf("%s: %s\n", what, gluErrorString(e));
- count++;
- }
- return count;
-}
-
-#define GLCHECK(_w) {_w; dumpError(#_w);}
-
-
-static void
-_gl_reshape_cb(int w, int h)
-{
- _w = w;
- _h = h;
-
- c3vec2 size = c3vec2f(_w, _h);
-
- glBindFramebuffer(GL_FRAMEBUFFER, 0);
- glViewport(0, 0, _w, _h);
- c3gl_fbo_resize(&fbo, size);
- c3texture_resize(fbo_c3, size);
- c3context_view_get_at(c3, 0)->size = size;
-
- if (fxaa) {
- glUseProgram((GLuint)fxaa->pid);
- GLCHECK(glUniform2fv((GLuint)fxaa->params.e[0].pid, 1, size.n));
- glUseProgram(0);
- }
-
- glutPostRedisplay();
-}
-
-static void
-_gl_key_cb(
- unsigned char key,
- int x,
- int y) /* called on key press */
-{
- switch (key) {
- case 'q':
- // avr_vcd_stop(&vcd_file);
- c3context_dispose(c3);
- exit(0);
- break;
- case 'r':
- printf("Starting VCD trace; press 's' to stop\n");
- // avr_vcd_start(&vcd_file);
- break;
- case 's':
- printf("Stopping VCD trace\n");
- // avr_vcd_stop(&vcd_file);
- break;
- case '1':
- if (fbo_c3->geometry.mat.program)
- fbo_c3->geometry.mat.program = NULL;
- else
- fbo_c3->geometry.mat.program = fxaa;
- glutPostRedisplay();
- break;
- }
-}
-
-static void
-_gl_display_cb(void) /* function called whenever redisplay needed */
-{
- int drawIndexes[] = { 1, 0 };
- int drawViewStart = c3->root->dirty ? 0 : 1;
-
- c3vec3 headp = c3vec3f(
- stepper_get_position_mm(&reprap.step_x),
- stepper_get_position_mm(&reprap.step_y),
- stepper_get_position_mm(&reprap.step_z));
- c3mat4 headmove = translation3D(headp);
- c3transform_set(head->transform.e[0], &headmove);
-
- for (int vi = drawViewStart; vi < 2; vi++) {
- c3context_view_set(c3, drawIndexes[vi]);
-
- /*
- * Draw in FBO object
- */
- c3context_view_p view = c3context_view_get(c3);
- glBindFramebuffer(GL_FRAMEBUFFER, (GLuint)view->bid);
- // draw (without glutSwapBuffers)
- dumpError("glBindFramebuffer fbo");
- glViewport(0, 0, view->size.x, view->size.y);
-
- c3context_project(c3);
-
- glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
-
- // Set up projection matrix
- glMatrixMode(GL_PROJECTION); // Select projection matrix
- glLoadMatrixf(view->projection.n);
-
- glEnable(GL_CULL_FACE);
- glDepthMask(GL_TRUE);
- glDepthFunc(GL_LEQUAL);
- glEnable(GL_DEPTH_TEST);
- // glPolygonMode( GL_FRONT_AND_BACK, GL_LINE );
-
- //glEnable(GL_ALPHA_TEST);
- //glAlphaFunc(GL_GREATER, 1.0f / 255.0f);
- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); // Type Of Blending To Use
-
- glMatrixMode(GL_MODELVIEW);
-
-
- if (view->type == C3_CONTEXT_VIEW_EYE) {
- // glShadeModel(GL_SMOOTH);
- // glEnable(GL_LIGHTING);
- glCullFace(GL_BACK);
- glEnable(GL_BLEND); // Enable Blending
-
- c3context_view_p light = c3context_view_get_at(c3, 1);
-
- // This is matrix transform every coordinate x,y,z
- // x = x* 0.5 + 0.5
- // y = y* 0.5 + 0.5
- // z = z* 0.5 + 0.5
- // Moving from unit cube [-1,1] to [0,1]
- const c3f bias[16] = {
- 0.5, 0.0, 0.0, 0.0,
- 0.0, 0.5, 0.0, 0.0,
- 0.0, 0.0, 0.5, 0.0,
- 0.5, 0.5, 0.5, 1.0};
-
- c3mat4 b = c3mat4_mul(&light->projection, (c3mat4p)bias);
- c3mat4 tex = c3mat4_mul(&light->cam.mtx, &b);
-
- GLCHECK(glUseProgram((GLuint)scene->pid));
- glUniformMatrix4fv(
- (GLuint)scene->params.e[uniform_shadowMatrix].pid,
- 1, GL_FALSE, tex.n);
- } else {
- glCullFace(GL_FRONT);
- glShadeModel(GL_FLAT);
- glDisable(GL_LIGHTING);
- glDisable(GL_BLEND); // Disable Blending
- }
-
- c3context_draw(c3);
- }
-
- /*
- * Draw back FBO over the screen
- */
- glBindFramebuffer(GL_FRAMEBUFFER, 0);
- dumpError("glBindFramebuffer 0");
- glViewport(0, 0, _w, _h);
-
- glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
-
- glDisable(GL_DEPTH_TEST);
- glDisable(GL_LIGHTING);
- glDisable(GL_ALPHA_TEST);
- glDisable(GL_CULL_FACE);
-
- glUseProgram(0);
-
- glMatrixMode(GL_PROJECTION); // Select projection matrix
- glLoadIdentity(); // Start with an identity matrix
-
- c3mat4 pro = screen_ortho3D(0, _w, 0, _h, 0, 10);
- glLoadMatrixf(pro.n);
-
- glMatrixMode(GL_MODELVIEW); // Select modelview matrix
-
- if (hud->root->dirty) {
- // printf("reproject head %.2f,%.2f,%.2f\n", headp.x, headp.y,headp.z);
- c3context_project(hud);
- }
- c3context_draw(hud);
-
- glutSwapBuffers();
-}
-
-#if !defined(GLUT_WHEEL_UP)
-# define GLUT_WHEEL_UP 3
-# define GLUT_WHEEL_DOWN 4
-#endif
-
-
-int button;
-c3vec2 move;
-
-static
-void _gl_button_cb(
- int b,
- int s,
- int x,
- int y)
-{
- button = s == GLUT_DOWN ? b : 0;
- move = c3vec2f(x, y);
- c3context_view_p view = c3context_view_get_at(c3, 0);
-// printf("button %d: %.1f,%.1f\n", b, move.x, move.y);
- switch (b) {
- case GLUT_LEFT_BUTTON:
- case GLUT_RIGHT_BUTTON: // call motion
- break;
- case GLUT_WHEEL_UP:
- case GLUT_WHEEL_DOWN:
- if (view->cam.distance > 10) {
- const float d = 0.004;
- c3cam_set_distance(&view->cam,
- view->cam.distance * ((b == GLUT_WHEEL_DOWN) ? (1.0+d) : (1.0-d)));
- c3cam_update_matrix(&view->cam);
- view->dirty = 1; // resort the array
- }
- break;
- }
-}
-
-void
-_gl_motion_cb(
- int x,
- int y)
-{
- c3vec2 m = c3vec2f(x, y);
- c3vec2 delta = c3vec2_sub(move, m);
- c3context_view_p view = c3context_view_get_at(c3, 0);
-
-// printf("%s b%d click %.1f,%.1f now %d,%d delta %.1f,%.1f\n",
-// __func__, button, move.n[0], move.n[1], x, y, delta.x, delta.y);
-
- switch (button) {
- case GLUT_LEFT_BUTTON: {
- c3mat4 rotx = rotation3D(view->cam.side, delta.n[1] / 4);
- c3mat4 roty = rotation3D(c3vec3f(0.0, 0.0, 1.0), delta.n[0] / 4);
- rotx = c3mat4_mul(&rotx, &roty);
- c3cam_rot_about_lookat(&view->cam, &rotx);
- c3cam_update_matrix(&view->cam);
-
- view->dirty = 1; // resort the array
- } break;
- case GLUT_RIGHT_BUTTON: {
- // offset both points, but following the plane
- c3vec3 f = c3vec3_mulf(
- c3vec3f(-view->cam.side.y, view->cam.side.x, 0),
- -delta.n[1] / 4);
- view->cam.eye = c3vec3_add(view->cam.eye, f);
- view->cam.lookat = c3vec3_add(view->cam.lookat, f);
- c3cam_movef(&view->cam, delta.n[0] / 8, 0, 0);
- c3cam_update_matrix(&view->cam);
-
- view->dirty = 1; // resort the array
- } break;
- }
- move = m;
-}
-
-// gl timer. if the lcd is dirty, refresh display
-static void
-_gl_timer_cb(
- int i)
-{
- glutTimerFunc(1000 / 24, _gl_timer_cb, 0);
- glutPostRedisplay();
-}
-
-const c3driver_context_t * c3_driver_list[3] = { NULL, NULL };
-
-int
-gl_init(
- int argc,
- char *argv[] )
-{
- glutInit(&argc, argv); /* initialize GLUT system */
-
- glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH | GLUT_ALPHA);
- glutInitWindowSize(_w, _h); /* width=400pixels height=500pixels */
- /*window =*/ glutCreateWindow("Press 'q' to quit"); /* create window */
-
- glutDisplayFunc(_gl_display_cb); /* set window's display callback */
- glutKeyboardFunc(_gl_key_cb); /* set window's key callback */
- glutTimerFunc(1000 / 24, _gl_timer_cb, 0);
-
- glutMouseFunc(_gl_button_cb);
- glutMotionFunc(_gl_motion_cb);
- glutReshapeFunc(_gl_reshape_cb);
-
- glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
- glHint(GL_GENERATE_MIPMAP_HINT, GL_NICEST);
-
- // enable color tracking
- glEnable(GL_COLOR_MATERIAL);
- // set material properties which will be assigned by glColor
- glColorMaterial(GL_FRONT, GL_AMBIENT_AND_DIFFUSE);
-
- /* setup some lights */
- GLfloat global_ambient[] = { 0.5f, 0.5f, 0.5f, 1.0f };
- glLightModelfv(GL_LIGHT_MODEL_AMBIENT, global_ambient);
-
- if (0) {
- GLfloat specular[] = {1.0f, 1.0f, 1.0f , 0.8f};
- GLfloat position[] = { 250.0f, -50.0f, 100.0f, 1.0f };
- glLightfv(GL_LIGHT1, GL_SPECULAR, specular);
- glLightfv(GL_LIGHT1, GL_POSITION, position);
- glEnable(GL_LIGHT1);
- }
-
- /*
- * Extract the GLSL version as a numeric value for later
- */
- const char * glsl = (const char *)glGetString(GL_SHADING_LANGUAGE_VERSION);
- {
- int M = 0, m = 0;
- if (sscanf(glsl, "%d.%d", &M, &m) == 2)
- glsl_version = (M * 100) + m;
-
- }
- printf("GL_SHADING_LANGUAGE_VERSION %s = %d\n", glsl, glsl_version);
-
- c3gl_fbo_create(&fbo, c3vec2f(_w, _h), (1 << C3GL_FBO_COLOR)|(1 << C3GL_FBO_DEPTH));
- // shadow buffer
-
- c3_driver_list[0] = c3gl_getdriver();
-
- c3 = c3context_new(_w, _h);
- c3->driver = c3_driver_list;
-
- c3cam_p cam = &c3context_view_get_at(c3, 0)->cam;
- cam->lookat = c3vec3f(100.0, 100.0, 0.0);
- cam->eye = c3vec3f(100.0, -100.0, 100.0);
- // associate the framebuffer object with this view
- c3context_view_get_at(c3, 0)->bid = fbo.fbo;
- /*
- * Create a light, attach it to a movable object, and attach a sphere
- * to it too so it's visible.
- */
- {
- c3object_p ligthhook = c3object_new(c3->root);
- c3transform_p pos = c3transform_new(ligthhook);
-
- pos->matrix = translation3D(c3vec3f(-30.0f, -30.0f, 200.0f));
-
- c3light_p light = c3light_new(ligthhook);
- light->geometry.name = str_new("light0");
- light->color.specular = c3vec4f(1.0f, 1.0f, 1.0f , 0.8f);
- light->position = c3vec4f(0, 0, 0, 1.0f );
-
- { // light bulb
- c3geometry_p g = c3sphere_uv(ligthhook, c3vec3f(0, 0, 0), 3, 10, 10);
- g->mat.color = c3vec4f(1.0, 1.0, 0.0, 1.0);
- g->hidden = 0; // hidden from light scenes
- }
- }
- {
- c3vec2 size = c3vec2f(1024, 1024);
- c3gl_fbo_create(&shadow, size, (1 << C3GL_FBO_DEPTH_TEX));
-
- c3context_view_t v = {
- .type = C3_CONTEXT_VIEW_LIGHT,
- .size = size,
- .dirty = 1,
- .index = c3->views.count,
- .bid = shadow.fbo,
- };
- c3cam_init(&v.cam);
- c3vec3 listpos = c3vec3f(-30.0f, -30.0f, 200.0f);
- v.cam.eye = listpos;
- v.cam.lookat = c3vec3f(100.0, 100.0, 0.0);
- c3context_view_array_add(&c3->views, v);
- }
-
- {
- const char *path = "gfx/hb.png";
- cairo_surface_t * image = cairo_image_surface_create_from_png (path);
- printf("image = %p %p\n", image, cairo_image_surface_get_data (image));
- c3texture_p b = c3texture_new(c3->root);
-
- c3pixels_p dst = c3pixels_new(
- cairo_image_surface_get_width (image),
- cairo_image_surface_get_height (image),
- 4, cairo_image_surface_get_stride(image),
- cairo_image_surface_get_data (image));
- dst->name = str_new(path);
- dst->normalize = 1;
- b->geometry.mat.texture = dst;
- b->size = c3vec2f(200, 200);
- b->geometry.mat.color = c3vec4f(1.0, 1.0, 1.0, 1.0);
-// c3transform_new(head);
- }
- c3pixels_p brass_tex = NULL;
- {
- const char *path = "gfx/brass.png";
- cairo_surface_t * image = cairo_image_surface_create_from_png (path);
- printf("image = %p %p\n", image, cairo_image_surface_get_data (image));
-
- c3pixels_p dst = c3pixels_new(
- cairo_image_surface_get_width (image),
- cairo_image_surface_get_height (image),
- 4, cairo_image_surface_get_stride(image),
- cairo_image_surface_get_data (image));
- dst->name = str_new(path);
- dst->normalize = 1;
- c3pixels_array_add(&c3->pixels, dst);
-// c3transform_new(head);
- brass_tex = dst;
- }
- c3pixels_p line_aa_tex = NULL;
- {
- const char *path = "gfx/BlurryCircle.png";
- cairo_surface_t * image = cairo_image_surface_create_from_png (path);
- printf("image = %p %p\n", image, cairo_image_surface_get_data (image));
-
-#if 0
- c3pixels_p dst = &b->pixels;
- c3pixels_init(dst,
- cairo_image_surface_get_width (image),
- cairo_image_surface_get_height (image),
- 1, cairo_image_surface_get_width (image),
- NULL);
- c3pixels_alloc(dst);
- b->size = c3vec2f(32, 32);
- b->normalized = 1;
-
- c3pixels_p src = c3pixels_new(
- cairo_image_surface_get_width (image),
- cairo_image_surface_get_height (image),
- 4, cairo_image_surface_get_stride(image),
- cairo_image_surface_get_data (image));
-
- uint32_t * _s = (uint32_t *)src->base;
- uint8_t * _d = (uint8_t *)dst->base;
- int max = 0;
- for (int i = 0; i < dst->h * dst->w; i++)
- if ((_s[i] & 0xff) > max)
- max = _s[i] & 0xff;
- for (int i = 0; i < dst->h * dst->w; i++)
- *_d++ = ((_s[i] & 0xff) * 255) / max;// + (0xff - max);
- b->pixels.format = C3PIXEL_A;
-#else
- c3pixels_p dst = c3pixels_new(
- cairo_image_surface_get_width (image),
- cairo_image_surface_get_height (image),
- 4, cairo_image_surface_get_stride(image),
- cairo_image_surface_get_data (image));
- dst->format = C3PIXEL_ARGB;
- dst->normalize = 1;
- dst->name = str_new(path);
- uint8_t * line = dst->base;
- for (int y = 0; y < dst->h; y++, line += dst->row) {
- uint32_t *p = (uint32_t *)line;
- for (int x = 0; x < dst->w; x++, p++) {
- uint8_t b = *p;
- *p = ((0xff - b) << 24);//|(b << 16)|(b << 8)|(b);
- }
- }
-#endif
- line_aa_tex = dst;
-#if 0
- c3pixels_p p = dst;
- printf("struct { int w, h, stride, size, format; uint8_t pix[] } img = {\n"
- "%d, %d, %d, %d, %d\n",
- p->w, p->h, (int)p->row, p->psize, cairo_image_surface_get_format(image));
- for (int i = 0; i < 32; i++)
- printf("0x%08x ", ((uint32_t*)p->base)[i]);
- printf("\n");
-#endif
- }
- c3object_p grid = c3object_new(c3->root);
- {
- for (int x = 0; x <= 20; x++) {
- for (int y = 0; y <= 20; y++) {
- c3vec3 p[4] = {
- c3vec3f(-1+x*10,y*10,0.01), c3vec3f(1+x*10,y*10,0.01),
- c3vec3f(x*10,-1+y*10,0.02), c3vec3f(x*10,1+y*10,0.02),
- };
- c3geometry_p g = c3geometry_new(
- c3geometry_type(C3_LINES_TYPE, 0), grid);
- g->mat.color = c3vec4f(0.0, 0.0, 0.0, 0.8);
- g->mat.texture = line_aa_tex;
- c3lines_init(g, p, 4, 0.2);
- }
- }
- }
-
- if (0) {
- c3vec3 p[4] = {
- c3vec3f(-5,-5,1), c3vec3f(205,-5,1),
- };
- c3geometry_p g = c3geometry_new(
- c3geometry_type(C3_LINES_TYPE, 0), grid);
- g->mat.color = c3vec4f(0.0, 0.0, 0.0, 1.0);
- g->mat.texture = line_aa_tex;
- g->line.width = 2;
-
- c3vertex_array_insert(&g->vertice,
- g->vertice.count, p, 2);
-
- }
- head = c3stl_load("gfx/buserror-nozzle-model.stl", c3->root);
- c3transform_new(head);
- if (head->geometry.count > 0) {
- c3geometry_factor(head->geometry.e[0], 0.1, (20 * M_PI) / 180.0);
- head->geometry.e[0]->mat.color = c3vec4f(0.6, 0.5, 0.0, 1.0);
- head->geometry.e[0]->mat.texture = brass_tex;
- }
-
-#if 0
- c3texture_p b = c3texture_new(head);
- c3pixels_init(&b->pixels, 64, 64, 4, 4 * 64, NULL);
- b->geometry.dirty = 1;
- memset(b->pixels.base, 0xff, 10 * b->pixels.row);
-#endif
-
-
- hud = c3context_new(_w, _h);
- hud->driver = c3_driver_list;
-
- /*
- * This is the offscreen framebuffer where the 3D scene is drawn
- */
- {
- /*
- * need to insert a header since there is nothing to detect the version number
- * reliably without it, and __VERSION__ returns idiocy
- */
- char head[128];
- sprintf(head, "#version %d\n#define GLSL_VERSION %d\n", glsl_version, glsl_version);
-
- const char *uniforms[] = { "g_Resolution", NULL };
- fxaa = c3program_new("fxaa", uniforms);
- c3program_array_add(&hud->programs, fxaa);
- c3program_load_shader(fxaa, GL_VERTEX_SHADER, head,
- "gfx/postproc.vs", C3_PROGRAM_LOAD_UNIFORM);
- c3program_load_shader(fxaa, GL_FRAGMENT_SHADER, head,
- "gfx/postproc.fs", C3_PROGRAM_LOAD_UNIFORM);
-
- c3texture_p b = c3texture_new(hud->root);
-
- c3pixels_p dst = c3pixels_new(_w, _h, 4, _w * 4, NULL);
- dst->name = str_new("fbo");
- dst->texture = fbo.buffers[C3GL_FBO_COLOR].bid;
- dst->normalize = 1;
- dst->dirty = 0;
- // dst->trace = 1;
- b->geometry.mat.texture = dst;
- b->geometry.mat.program = fxaa;
- b->size = c3vec2f(_w, _h);
- b->geometry.mat.color = c3vec4f(1.0, 1.0, 1.0, 1.0);
- fbo_c3 = b;
- }
-
- {
- /*
- * need to insert a header since there is nothing to detect the version number
- * reliably without it, and __VERSION__ returns idiocy
- */
- char head[128];
- sprintf(head, "#version %d\n#define GLSL_VERSION %d\n", glsl_version, glsl_version);
-
- scene = c3program_new("scene", uniforms_scene);
- scene->verbose = 1;
- c3program_array_add(&c3->programs, scene);
- c3program_load_shader(scene, GL_VERTEX_SHADER, head,
- "gfx/scene.vs", C3_PROGRAM_LOAD_UNIFORM);
- c3program_load_shader(scene, GL_FRAGMENT_SHADER, head,
- "gfx/scene.fs", C3_PROGRAM_LOAD_UNIFORM);
- c3gl_program_load(scene);
-
- GLCHECK(glUseProgram((GLuint)scene->pid));
- GLCHECK(glUniform1i(
- (GLuint)scene->params.e[uniform_ShadowMap].pid, 7));
- GLCHECK(glUniform1i(
- (GLuint)scene->params.e[uniform_tex0].pid, 0));
- c3vec2 isize = c3vec2f(1.0f / c3->views.e[1].size.x,
- 1.0f / c3->views.e[1].size.y);
- GLCHECK(glUniform2fv(
- (GLuint)scene->params.e[uniform_pixelOffset].pid, 1,
- isize.n));
- glActiveTexture(GL_TEXTURE7);
- GLCHECK(glBindTexture(GL_TEXTURE_2D,
- (GLuint)shadow.buffers[C3GL_FBO_DEPTH_TEX].bid));
- glActiveTexture(GL_TEXTURE0);
- }
- {
- c3vec3 p[4] = {
- c3vec3f(10,10,0), c3vec3f(800-10,10,0),
- };
- c3geometry_p g = c3geometry_new(
- c3geometry_type(C3_LINES_TYPE, 0), hud->root);
- g->mat.color = c3vec4f(0.5, 0.5, 1.0, .3f);
- g->mat.texture = line_aa_tex;
- c3lines_init(g, p, 2, 10);
- }
- return 1;
-}
-
-void
-gl_dispose()
-{
- c3context_dispose(c3);
- c3context_dispose(hud);
- c3gl_fbo_dispose(&fbo);
-}
-
-int
-gl_runloop()
-{
- glutMainLoop();
- gl_dispose();
- return 0;
-}
+++ /dev/null
-/*
- reprap_gl.h
-
- Copyright 2008-2012 Michel Pollet <buserror@gmail.com>
-
- This file is part of simavr.
-
- simavr 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 3 of the License, or
- (at your option) any later version.
-
- simavr 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 simavr. If not, see <http://www.gnu.org/licenses/>.
- */
-
-
-#ifndef __REPRAP_GL_H___
-#define __REPRAP_GL_H___
-
-int
-gl_init(
- int argc,
- char *argv[] );
-
-int
-gl_runloop();
-
-void
-gl_dispose();
-
-#endif /* __REPRAP_GL_H___ */
+++ /dev/null
-/*
- stepper.c
-
- Copyright 2008-2012 Michel Pollet <buserror@gmail.com>
-
- This file is part of simavr.
-
- simavr 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 3 of the License, or
- (at your option) any later version.
-
- simavr 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 simavr. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-
-#include "sim_avr.h"
-#include "sim_time.h"
-#include "stepper.h"
-
-static avr_cycle_count_t
-stepper_update_timer(
- struct avr_t * avr,
- avr_cycle_count_t when,
- void * param)
-{
- stepper_p p = (stepper_p)param;
- union {
- float f;
- uint32_t i;
- } m = { .f = p->position / p->steps_per_mm };
-// printf("%s (%s) %3.4f\n", __func__, p->name, m.f);
- avr_raise_irq(p->irq + IRQ_STEPPER_POSITION_OUT, m.i);
- avr_raise_irq(p->irq + IRQ_STEPPER_ENDSTOP_OUT, p->position == p->endstop);
- return when + p->timer_period;
-}
-
-static void
-stepper_dir_hook(
- struct avr_irq_t * irq,
- uint32_t value,
- void * param )
-{
- stepper_p p = (stepper_p)param;
- printf("%s (%s) %d\n", __func__, p->name, value);
- p->dir = !!value;
-}
-
-static void
-stepper_enable_hook(
- struct avr_irq_t * irq,
- uint32_t value,
- void * param )
-{
- stepper_p p = (stepper_p)param;
- p->enable = !!value;
- printf("%s (%s) %d pos %.4f\n", __func__, p->name,
- p->enable != 0, p->position / p->steps_per_mm);
- avr_raise_irq(p->irq + IRQ_STEPPER_ENDSTOP_OUT, p->position == p->endstop);
-}
-
-static void
-stepper_step_hook(
- struct avr_irq_t * irq,
- uint32_t value,
- void * param )
-{
- stepper_p p = (stepper_p)param;
- if (!p->enable)
- return;
- if (value)
- return;
- p->position += !p->dir && p->position == 0 ? 0 : p->dir ? 1 : -1;
- if (p->endstop && p->position < p->endstop)
- p->position = p->endstop;
- if (p->max_position > 0 && p->position > p->max_position)
- p->position = p->max_position;
-}
-
-static const char * irq_names[IRQ_STEPPER_COUNT] = {
- [IRQ_STEPPER_DIR_IN] = "1<stepper.direction",
- [IRQ_STEPPER_STEP_IN] = "1>stepper.step",
- [IRQ_STEPPER_ENABLE_IN] = "1<stepper.enable",
- [IRQ_STEPPER_POSITION_OUT] = "32<stepper.position",
- [IRQ_STEPPER_ENDSTOP_OUT] = "1<stepper.endstop",
-};
-
-void
-stepper_init(
- struct avr_t * avr,
- stepper_p p,
- char * name,
- float steps_per_mm,
- float start_position,
- float max_position,
- float endstop_position)
-{
- p->avr = avr;
- strcpy(p->name, name);
- p->irq = avr_alloc_irq(&avr->irq_pool, 0, IRQ_STEPPER_COUNT, irq_names);
- avr_irq_register_notify(p->irq + IRQ_STEPPER_DIR_IN, stepper_dir_hook, p);
- avr_irq_register_notify(p->irq + IRQ_STEPPER_STEP_IN, stepper_step_hook, p);
- avr_irq_register_notify(p->irq + IRQ_STEPPER_ENABLE_IN, stepper_enable_hook, p);
-
- p->steps_per_mm = steps_per_mm;
- p->position = start_position * p->steps_per_mm;
- p->max_position = max_position * p->steps_per_mm;
- p->endstop = endstop_position >= 0 ? endstop_position * p->steps_per_mm : 0;
-}
-
-void
-stepper_connect(
- stepper_p p,
- avr_irq_t * step,
- avr_irq_t * dir,
- avr_irq_t * enable,
- avr_irq_t * endstop,
- uint16_t flags)
-{
- avr_connect_irq(step, p->irq + IRQ_STEPPER_STEP_IN);
- avr_connect_irq(dir, p->irq + IRQ_STEPPER_DIR_IN);
- avr_connect_irq(enable, p->irq + IRQ_STEPPER_ENABLE_IN);
- p->irq[IRQ_STEPPER_ENDSTOP_OUT].flags |= IRQ_STEPPER_POSITION_OUT;
- p->irq[IRQ_STEPPER_ENDSTOP_OUT].flags |= IRQ_FLAG_FILTERED;
- if (endstop) {
- avr_connect_irq(p->irq + IRQ_STEPPER_ENDSTOP_OUT, endstop);
- if (flags & stepper_endstop_inverted)
- p->irq[IRQ_STEPPER_ENDSTOP_OUT].flags |= IRQ_FLAG_NOT;
- }
- p->timer_period = avr_usec_to_cycles(p->avr, 100000 / 1000); // 1ms
- avr_cycle_timer_register(p->avr, p->timer_period, stepper_update_timer, p);
-}
-
-float
-stepper_get_position_mm(
- stepper_p p)
-{
- return p->position / p->steps_per_mm;
-}
-
+++ /dev/null
-/*
- stepper.h
-
- Copyright 2008-2012 Michel Pollet <buserror@gmail.com>
-
- This file is part of simavr.
-
- simavr 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 3 of the License, or
- (at your option) any later version.
-
- simavr 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 simavr. If not, see <http://www.gnu.org/licenses/>.
- */
-
-
-#ifndef __STEPPER_H___
-#define __STEPPER_H___
-
-#include "sim_irq.h"
-
-enum {
- IRQ_STEPPER_DIR_IN = 0,
- IRQ_STEPPER_STEP_IN,
- IRQ_STEPPER_ENABLE_IN,
- IRQ_STEPPER_POSITION_OUT,
- IRQ_STEPPER_ENDSTOP_OUT,
- IRQ_STEPPER_COUNT
-};
-
-typedef struct stepper_t {
- avr_irq_t * irq; // irq list
- struct avr_t *avr; // keep it around so we can pause it
- char name[32];
- int enable : 1, dir : 1, trace : 1;
- double steps_per_mm;
- uint64_t position; // in steps
- uint64_t max_position;
- uint64_t endstop;
- avr_cycle_count_t timer_period;
-} stepper_t, *stepper_p;
-
-void
-stepper_init(
- struct avr_t * avr,
- stepper_p p,
- char * name,
- float steps_per_mm,
- float start_position, // mm
- float max_position, // mm
- float endstop_position); // mm
-
-enum {
- stepper_endstop_inverted = (1 << 0),
-};
-void
-stepper_connect(
- stepper_p p,
- avr_irq_t * step,
- avr_irq_t * dir,
- avr_irq_t * enable,
- avr_irq_t * endstop,
- uint16_t flags);
-
-float
-stepper_get_position_mm(
- stepper_p p);
-
-#endif /* __STEPPER_H___ */
+++ /dev/null
-/*
- thermistor.c
-
- Copyright 2008-2012 Michel Pollet <buserror@gmail.com>
-
- This file is part of simavr.
-
- simavr 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 3 of the License, or
- (at your option) any later version.
-
- simavr 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 simavr. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include <stdlib.h>
-#include <pthread.h>
-#include <string.h>
-#include <stdio.h>
-#include <errno.h>
-#include <unistd.h>
-
-#include "avr_adc.h"
-
-#include "thermistor.h"
-
-/*
- * called the ADC could use a new value
- * The value returned is NOT in "ADC" mode, it's in millivolts
- */
-static void thermistor_in_hook(struct avr_irq_t * irq, uint32_t value, void * param)
-{
- thermistor_p p = (thermistor_p)param;
- avr_adc_mux_t v = *((avr_adc_mux_t*)&value);
-
-// printf("%s(%2d/%2d)\n", __func__, p->adc_mux_number, v.src);
-
- if (v.src != p->adc_mux_number)
- return;
-
- short *t = p->table;
- for (int ei = 0; ei < p->table_entries; ei++, t += 2) {
- if (t[1] <= p->current) {
- // printf("%s(%2d) %.2f matches %3dC is %d adc\n", __func__, v.src,
- // p->current, t[1], t[0] / p->oversampling);
- avr_raise_irq(p->irq + IRQ_TERM_ADC_VALUE_OUT,
- ((t[0] / p->oversampling) * 5000) / 0x3ff);
- return;
- }
- }
- printf("%s(%d) temperature out of range (%.2f), we're screwed\n",
- __func__, p->adc_mux_number, p->current);
-}
-
-static void thermistor_value_in_hook(struct avr_irq_t * irq, uint32_t value, void * param)
-{
- thermistor_p p = (thermistor_p)param;
- float fv = ((float)value) / 256;
- p->current = fv;
-
- avr_raise_irq(p->irq + IRQ_TERM_TEMP_VALUE_OUT, value);
-}
-
-static const char * irq_names[IRQ_TERM_COUNT] = {
- [IRQ_TERM_ADC_TRIGGER_IN] = "8<thermistor.trigger",
- [IRQ_TERM_TEMP_VALUE_OUT] = "16>thermistor.out",
- [IRQ_TERM_TEMP_VALUE_IN] = "16<thermistor.in",
-};
-
-void
-thermistor_init(
- struct avr_t * avr,
- thermistor_p p,
- int adc_mux_number,
- short * table,
- int table_entries,
- int oversampling,
- float start_temp )
-{
- p->avr = avr;
- p->irq = avr_alloc_irq(&avr->irq_pool, 0, IRQ_TERM_COUNT, irq_names);
- avr_irq_register_notify(p->irq + IRQ_TERM_ADC_TRIGGER_IN, thermistor_in_hook, p);
- avr_irq_register_notify(p->irq + IRQ_TERM_TEMP_VALUE_IN, thermistor_value_in_hook, p);
-
- p->oversampling = oversampling;
- p->table = table;
- p->table_entries = table_entries;
- p->adc_mux_number = adc_mux_number;
- p->current = start_temp;
-
- avr_irq_t * src = avr_io_getirq(p->avr, AVR_IOCTL_ADC_GETIRQ, ADC_IRQ_OUT_TRIGGER);
- avr_irq_t * dst = avr_io_getirq(p->avr, AVR_IOCTL_ADC_GETIRQ, adc_mux_number);
- if (src && dst) {
- avr_connect_irq(src, p->irq + IRQ_TERM_ADC_TRIGGER_IN);
- avr_connect_irq(p->irq + IRQ_TERM_ADC_VALUE_OUT, dst);
- }
- printf("%s on ADC %d start %.2f\n", __func__, adc_mux_number, p->current);
-}
-
-void
-thermistor_set_temp(
- thermistor_p p,
- float temp )
-{
- uint32_t value = temp * 256;
- p->current = temp;
-
- avr_raise_irq(p->irq + IRQ_TERM_TEMP_VALUE_OUT, value);
-}
+++ /dev/null
-/*
- thermistor.h
-
- Copyright 2008-2012 Michel Pollet <buserror@gmail.com>
-
- This file is part of simavr.
-
- simavr 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 3 of the License, or
- (at your option) any later version.
-
- simavr 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 simavr. If not, see <http://www.gnu.org/licenses/>.
- */
-
-
-#ifndef __THERMISTOR_H___
-#define __THERMISTOR_H___
-
-#include "sim_irq.h"
-
-enum {
- IRQ_TERM_ADC_TRIGGER_IN = 0,
- IRQ_TERM_ADC_VALUE_OUT,
- IRQ_TERM_TEMP_VALUE_OUT, // Celcius * 256
- IRQ_TERM_TEMP_VALUE_IN, // Celcius * 256
- IRQ_TERM_COUNT
-};
-
-typedef struct thermistor_t {
- avr_irq_t * irq; // irq list
- struct avr_t *avr; // keep it around so we can pause it
- uint8_t adc_mux_number;
-
- short * table;
- int table_entries;
- int oversampling;
-
- float current;
-} thermistor_t, *thermistor_p;
-
-void
-thermistor_init(
- struct avr_t * avr,
- thermistor_p t,
- int adc_mux_number,
- short * table,
- int table_entries,
- int oversampling,
- float start_temp );
-
-void
-thermistor_set_temp(
- thermistor_p t,
- float temp );
-
-
-#endif /* __THERMISTOR_H___ */