From: Michel Pollet Date: Sat, 16 Jun 2012 08:40:08 +0000 (+0100) Subject: reprap: Deleted example board X-Git-Tag: v1.0~64 X-Git-Url: https://git.htl-mechatronik.at/public/?a=commitdiff_plain;h=802a8e0987509f538ca1d47c2474381759eae523;p=sx%2Fsimavr.git reprap: Deleted example board This as become a project in itself, it moves to: https://github.com/buserror-uk/simreprap.git Signed-off-by: Michel Pollet --- diff --git a/examples/board_reprap/.gitignore b/examples/board_reprap/.gitignore deleted file mode 100644 index a8a0dce..0000000 --- a/examples/board_reprap/.gitignore +++ /dev/null @@ -1 +0,0 @@ -*.bin diff --git a/examples/board_reprap/Makefile b/examples/board_reprap/Makefile deleted file mode 100644 index 8fbfc0e..0000000 --- a/examples/board_reprap/Makefile +++ /dev/null @@ -1,78 +0,0 @@ -# -# Copyright 2008, 2009 Michel Pollet -# -# 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 . - -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 - - diff --git a/examples/board_reprap/gfx/BlurryCircle.png b/examples/board_reprap/gfx/BlurryCircle.png deleted file mode 100644 index a8a316b..0000000 Binary files a/examples/board_reprap/gfx/BlurryCircle.png and /dev/null differ diff --git a/examples/board_reprap/gfx/BlurryCircle16.png b/examples/board_reprap/gfx/BlurryCircle16.png deleted file mode 100644 index d619bc1..0000000 Binary files a/examples/board_reprap/gfx/BlurryCircle16.png and /dev/null differ diff --git a/examples/board_reprap/gfx/BlurryCircle4.png b/examples/board_reprap/gfx/BlurryCircle4.png deleted file mode 100644 index 82b48d8..0000000 Binary files a/examples/board_reprap/gfx/BlurryCircle4.png and /dev/null differ diff --git a/examples/board_reprap/gfx/BlurryCircle8.png b/examples/board_reprap/gfx/BlurryCircle8.png deleted file mode 100644 index 64ff0a7..0000000 Binary files a/examples/board_reprap/gfx/BlurryCircle8.png and /dev/null differ diff --git a/examples/board_reprap/gfx/Fxaa3_11.h b/examples/board_reprap/gfx/Fxaa3_11.h deleted file mode 100644 index a2abfec..0000000 --- a/examples/board_reprap/gfx/Fxaa3_11.h +++ /dev/null @@ -1,2047 +0,0 @@ -/*============================================================================ - - - NVIDIA FXAA 3.11 by TIMOTHY LOTTES - - ------------------------------------------------------------------------------- -COPYRIGHT (C) 2010, 2011 NVIDIA CORPORATION. ALL RIGHTS RESERVED. ------------------------------------------------------------------------------- -TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THIS SOFTWARE IS PROVIDED -*AS IS* AND NVIDIA AND ITS SUPPLIERS DISCLAIM ALL WARRANTIES, EITHER EXPRESS -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL NVIDIA -OR ITS SUPPLIERS BE LIABLE FOR ANY SPECIAL, INCIDENTAL, INDIRECT, OR -CONSEQUENTIAL DAMAGES WHATSOEVER (INCLUDING, WITHOUT LIMITATION, DAMAGES FOR -LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, LOSS OF BUSINESS INFORMATION, -OR ANY OTHER PECUNIARY LOSS) ARISING OUT OF THE USE OF OR INABILITY TO USE -THIS SOFTWARE, EVEN IF NVIDIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGES. - ------------------------------------------------------------------------------- - INTEGRATION CHECKLIST ------------------------------------------------------------------------------- -(1.) -In the shader source, setup defines for the desired configuration. -When providing multiple shaders (for different presets), -simply setup the defines differently in multiple files. -Example, - - #define FXAA_PC 1 - #define FXAA_HLSL_5 1 - #define FXAA_QUALITY__PRESET 12 - -Or, - - #define FXAA_360 1 - -Or, - - #define FXAA_PS3 1 - -Etc. - -(2.) -Then include this file, - - #include "Fxaa3_11.h" - -(3.) -Then call the FXAA pixel shader from within your desired shader. -Look at the FXAA Quality FxaaPixelShader() for docs on inputs. -As for FXAA 3.11 all inputs for all shaders are the same -to enable easy porting between platforms. - - return FxaaPixelShader(...); - -(4.) -Insure pass prior to FXAA outputs RGBL (see next section). -Or use, - - #define FXAA_GREEN_AS_LUMA 1 - -(5.) -Setup engine to provide the following constants -which are used in the FxaaPixelShader() inputs, - - FxaaFloat2 fxaaQualityRcpFrame, - FxaaFloat4 fxaaConsoleRcpFrameOpt, - FxaaFloat4 fxaaConsoleRcpFrameOpt2, - FxaaFloat4 fxaaConsole360RcpFrameOpt2, - FxaaFloat fxaaQualitySubpix, - FxaaFloat fxaaQualityEdgeThreshold, - FxaaFloat fxaaQualityEdgeThresholdMin, - FxaaFloat fxaaConsoleEdgeSharpness, - FxaaFloat fxaaConsoleEdgeThreshold, - FxaaFloat fxaaConsoleEdgeThresholdMin, - FxaaFloat4 fxaaConsole360ConstDir - -Look at the FXAA Quality FxaaPixelShader() for docs on inputs. - -(6.) -Have FXAA vertex shader run as a full screen triangle, -and output "pos" and "fxaaConsolePosPos" -such that inputs in the pixel shader provide, - - // {xy} = center of pixel - FxaaFloat2 pos, - - // {xy__} = upper left of pixel - // {__zw} = lower right of pixel - FxaaFloat4 fxaaConsolePosPos, - -(7.) -Insure the texture sampler(s) used by FXAA are set to bilinear filtering. - - ------------------------------------------------------------------------------- - INTEGRATION - RGBL AND COLORSPACE ------------------------------------------------------------------------------- -FXAA3 requires RGBL as input unless the following is set, - - #define FXAA_GREEN_AS_LUMA 1 - -In which case the engine uses green in place of luma, -and requires RGB input is in a non-linear colorspace. - -RGB should be LDR (low dynamic range). -Specifically do FXAA after tonemapping. - -RGB data as returned by a texture fetch can be non-linear, -or linear when FXAA_GREEN_AS_LUMA is not set. -Note an "sRGB format" texture counts as linear, -because the result of a texture fetch is linear data. -Regular "RGBA8" textures in the sRGB colorspace are non-linear. - -If FXAA_GREEN_AS_LUMA is not set, -luma must be stored in the alpha channel prior to running FXAA. -This luma should be in a perceptual space (could be gamma 2.0). -Example pass before FXAA where output is gamma 2.0 encoded, - - color.rgb = ToneMap(color.rgb); // linear color output - color.rgb = sqrt(color.rgb); // gamma 2.0 color output - return color; - -To use FXAA, - - color.rgb = ToneMap(color.rgb); // linear color output - color.rgb = sqrt(color.rgb); // gamma 2.0 color output - color.a = dot(color.rgb, FxaaFloat3(0.299, 0.587, 0.114)); // compute luma - return color; - -Another example where output is linear encoded, -say for instance writing to an sRGB formated render target, -where the render target does the conversion back to sRGB after blending, - - color.rgb = ToneMap(color.rgb); // linear color output - return color; - -To use FXAA, - - color.rgb = ToneMap(color.rgb); // linear color output - color.a = sqrt(dot(color.rgb, FxaaFloat3(0.299, 0.587, 0.114))); // compute luma - return color; - -Getting luma correct is required for the algorithm to work correctly. - - ------------------------------------------------------------------------------- - BEING LINEARLY CORRECT? ------------------------------------------------------------------------------- -Applying FXAA to a framebuffer with linear RGB color will look worse. -This is very counter intuitive, but happends to be true in this case. -The reason is because dithering artifacts will be more visiable -in a linear colorspace. - - ------------------------------------------------------------------------------- - COMPLEX INTEGRATION ------------------------------------------------------------------------------- -Q. What if the engine is blending into RGB before wanting to run FXAA? - -A. In the last opaque pass prior to FXAA, - have the pass write out luma into alpha. - Then blend into RGB only. - FXAA should be able to run ok - assuming the blending pass did not any add aliasing. - This should be the common case for particles and common blending passes. - -A. Or use FXAA_GREEN_AS_LUMA. - -============================================================================*/ - -/*============================================================================ - - INTEGRATION KNOBS - -============================================================================*/ -// -// FXAA_PS3 and FXAA_360 choose the console algorithm (FXAA3 CONSOLE). -// FXAA_360_OPT is a prototype for the new optimized 360 version. -// -// 1 = Use API. -// 0 = Don't use API. -// -/*--------------------------------------------------------------------------*/ -#ifndef FXAA_PS3 - #define FXAA_PS3 0 -#endif -/*--------------------------------------------------------------------------*/ -#ifndef FXAA_360 - #define FXAA_360 0 -#endif -/*--------------------------------------------------------------------------*/ -#ifndef FXAA_360_OPT - #define FXAA_360_OPT 0 -#endif -/*==========================================================================*/ -#ifndef FXAA_PC - // - // FXAA Quality - // The high quality PC algorithm. - // - #define FXAA_PC 0 -#endif -/*--------------------------------------------------------------------------*/ -#ifndef FXAA_PC_CONSOLE - // - // The console algorithm for PC is included - // for developers targeting really low spec machines. - // Likely better to just run FXAA_PC, and use a really low preset. - // - #define FXAA_PC_CONSOLE 0 -#endif -/*--------------------------------------------------------------------------*/ -#ifndef FXAA_GLSL_120 - #define FXAA_GLSL_120 0 -#endif -/*--------------------------------------------------------------------------*/ -#ifndef FXAA_GLSL_130 - #define FXAA_GLSL_130 0 -#endif -/*--------------------------------------------------------------------------*/ -#ifndef FXAA_HLSL_3 - #define FXAA_HLSL_3 0 -#endif -/*--------------------------------------------------------------------------*/ -#ifndef FXAA_HLSL_4 - #define FXAA_HLSL_4 0 -#endif -/*--------------------------------------------------------------------------*/ -#ifndef FXAA_HLSL_5 - #define FXAA_HLSL_5 0 -#endif -/*==========================================================================*/ -#ifndef FXAA_GREEN_AS_LUMA - // - // For those using non-linear color, - // and either not able to get luma in alpha, or not wanting to, - // this enables FXAA to run using green as a proxy for luma. - // So with this enabled, no need to pack luma in alpha. - // - // This will turn off AA on anything which lacks some amount of green. - // Pure red and blue or combination of only R and B, will get no AA. - // - // Might want to lower the settings for both, - // fxaaConsoleEdgeThresholdMin - // fxaaQualityEdgeThresholdMin - // In order to insure AA does not get turned off on colors - // which contain a minor amount of green. - // - // 1 = On. - // 0 = Off. - // - #define FXAA_GREEN_AS_LUMA 0 -#endif -/*--------------------------------------------------------------------------*/ -#ifndef FXAA_EARLY_EXIT - // - // Controls algorithm's early exit path. - // On PS3 turning this ON adds 2 cycles to the shader. - // On 360 turning this OFF adds 10ths of a millisecond to the shader. - // Turning this off on console will result in a more blurry image. - // So this defaults to on. - // - // 1 = On. - // 0 = Off. - // - #define FXAA_EARLY_EXIT 1 -#endif -/*--------------------------------------------------------------------------*/ -#ifndef FXAA_DISCARD - // - // Only valid for PC OpenGL currently. - // Probably will not work when FXAA_GREEN_AS_LUMA = 1. - // - // 1 = Use discard on pixels which don't need AA. - // For APIs which enable concurrent TEX+ROP from same surface. - // 0 = Return unchanged color on pixels which don't need AA. - // - #define FXAA_DISCARD 0 -#endif -/*--------------------------------------------------------------------------*/ -#ifndef FXAA_FAST_PIXEL_OFFSET - // - // Used for GLSL 120 only. - // - // 1 = GL API supports fast pixel offsets - // 0 = do not use fast pixel offsets - // - #ifdef GL_EXT_gpu_shader4 - #define FXAA_FAST_PIXEL_OFFSET 1 - #endif - #ifdef GL_NV_gpu_shader5 - #define FXAA_FAST_PIXEL_OFFSET 1 - #endif - #ifdef GL_ARB_gpu_shader5 - #define FXAA_FAST_PIXEL_OFFSET 1 - #endif - #ifndef FXAA_FAST_PIXEL_OFFSET - #define FXAA_FAST_PIXEL_OFFSET 0 - #endif -#endif -/*--------------------------------------------------------------------------*/ -#ifndef FXAA_GATHER4_ALPHA - // - // 1 = API supports gather4 on alpha channel. - // 0 = API does not support gather4 on alpha channel. - // - #if (FXAA_HLSL_5 == 1) - #define FXAA_GATHER4_ALPHA 1 - #endif - #ifdef GL_ARB_gpu_shader5 - #define FXAA_GATHER4_ALPHA 1 - #endif - #ifdef GL_NV_gpu_shader5 - #define FXAA_GATHER4_ALPHA 1 - #endif - #ifndef FXAA_GATHER4_ALPHA - #define FXAA_GATHER4_ALPHA 0 - #endif -#endif - -/*============================================================================ - FXAA CONSOLE PS3 - TUNING KNOBS -============================================================================*/ -#ifndef FXAA_CONSOLE__PS3_EDGE_SHARPNESS - // - // Consoles the sharpness of edges on PS3 only. - // Non-PS3 tuning is done with shader input. - // - // Due to the PS3 being ALU bound, - // there are only two safe values here: 4 and 8. - // These options use the shaders ability to a free *|/ by 2|4|8. - // - // 8.0 is sharper - // 4.0 is softer - // 2.0 is really soft (good for vector graphics inputs) - // - #if 1 - #define FXAA_CONSOLE__PS3_EDGE_SHARPNESS 8.0 - #endif - #if 0 - #define FXAA_CONSOLE__PS3_EDGE_SHARPNESS 4.0 - #endif - #if 0 - #define FXAA_CONSOLE__PS3_EDGE_SHARPNESS 2.0 - #endif -#endif -/*--------------------------------------------------------------------------*/ -#ifndef FXAA_CONSOLE__PS3_EDGE_THRESHOLD - // - // Only effects PS3. - // Non-PS3 tuning is done with shader input. - // - // The minimum amount of local contrast required to apply algorithm. - // The console setting has a different mapping than the quality setting. - // - // This only applies when FXAA_EARLY_EXIT is 1. - // - // Due to the PS3 being ALU bound, - // there are only two safe values here: 0.25 and 0.125. - // These options use the shaders ability to a free *|/ by 2|4|8. - // - // 0.125 leaves less aliasing, but is softer - // 0.25 leaves more aliasing, and is sharper - // - #if 1 - #define FXAA_CONSOLE__PS3_EDGE_THRESHOLD 0.125 - #else - #define FXAA_CONSOLE__PS3_EDGE_THRESHOLD 0.25 - #endif -#endif - -/*============================================================================ - FXAA QUALITY - TUNING KNOBS ------------------------------------------------------------------------------- -NOTE the other tuning knobs are now in the shader function inputs! -============================================================================*/ -#ifndef FXAA_QUALITY__PRESET - // - // Choose the quality preset. - // This needs to be compiled into the shader as it effects code. - // Best option to include multiple presets is to - // in each shader define the preset, then include this file. - // - // OPTIONS - // ----------------------------------------------------------------------- - // 10 to 15 - default medium dither (10=fastest, 15=highest quality) - // 20 to 29 - less dither, more expensive (20=fastest, 29=highest quality) - // 39 - no dither, very expensive - // - // NOTES - // ----------------------------------------------------------------------- - // 12 = slightly faster then FXAA 3.9 and higher edge quality (default) - // 13 = about same speed as FXAA 3.9 and better than 12 - // 23 = closest to FXAA 3.9 visually and performance wise - // _ = the lowest digit is directly related to performance - // _ = the highest digit is directly related to style - // - #define FXAA_QUALITY__PRESET 12 -#endif - - -/*============================================================================ - - FXAA QUALITY - PRESETS - -============================================================================*/ - -/*============================================================================ - FXAA QUALITY - MEDIUM DITHER PRESETS -============================================================================*/ -#if (FXAA_QUALITY__PRESET == 10) - #define FXAA_QUALITY__PS 3 - #define FXAA_QUALITY__P0 1.5 - #define FXAA_QUALITY__P1 3.0 - #define FXAA_QUALITY__P2 12.0 -#endif -/*--------------------------------------------------------------------------*/ -#if (FXAA_QUALITY__PRESET == 11) - #define FXAA_QUALITY__PS 4 - #define FXAA_QUALITY__P0 1.0 - #define FXAA_QUALITY__P1 1.5 - #define FXAA_QUALITY__P2 3.0 - #define FXAA_QUALITY__P3 12.0 -#endif -/*--------------------------------------------------------------------------*/ -#if (FXAA_QUALITY__PRESET == 12) - #define FXAA_QUALITY__PS 5 - #define FXAA_QUALITY__P0 1.0 - #define FXAA_QUALITY__P1 1.5 - #define FXAA_QUALITY__P2 2.0 - #define FXAA_QUALITY__P3 4.0 - #define FXAA_QUALITY__P4 12.0 -#endif -/*--------------------------------------------------------------------------*/ -#if (FXAA_QUALITY__PRESET == 13) - #define FXAA_QUALITY__PS 6 - #define FXAA_QUALITY__P0 1.0 - #define FXAA_QUALITY__P1 1.5 - #define FXAA_QUALITY__P2 2.0 - #define FXAA_QUALITY__P3 2.0 - #define FXAA_QUALITY__P4 4.0 - #define FXAA_QUALITY__P5 12.0 -#endif -/*--------------------------------------------------------------------------*/ -#if (FXAA_QUALITY__PRESET == 14) - #define FXAA_QUALITY__PS 7 - #define FXAA_QUALITY__P0 1.0 - #define FXAA_QUALITY__P1 1.5 - #define FXAA_QUALITY__P2 2.0 - #define FXAA_QUALITY__P3 2.0 - #define FXAA_QUALITY__P4 2.0 - #define FXAA_QUALITY__P5 4.0 - #define FXAA_QUALITY__P6 12.0 -#endif -/*--------------------------------------------------------------------------*/ -#if (FXAA_QUALITY__PRESET == 15) - #define FXAA_QUALITY__PS 8 - #define FXAA_QUALITY__P0 1.0 - #define FXAA_QUALITY__P1 1.5 - #define FXAA_QUALITY__P2 2.0 - #define FXAA_QUALITY__P3 2.0 - #define FXAA_QUALITY__P4 2.0 - #define FXAA_QUALITY__P5 2.0 - #define FXAA_QUALITY__P6 4.0 - #define FXAA_QUALITY__P7 12.0 -#endif - -/*============================================================================ - FXAA QUALITY - LOW DITHER PRESETS -============================================================================*/ -#if (FXAA_QUALITY__PRESET == 20) - #define FXAA_QUALITY__PS 3 - #define FXAA_QUALITY__P0 1.5 - #define FXAA_QUALITY__P1 2.0 - #define FXAA_QUALITY__P2 8.0 -#endif -/*--------------------------------------------------------------------------*/ -#if (FXAA_QUALITY__PRESET == 21) - #define FXAA_QUALITY__PS 4 - #define FXAA_QUALITY__P0 1.0 - #define FXAA_QUALITY__P1 1.5 - #define FXAA_QUALITY__P2 2.0 - #define FXAA_QUALITY__P3 8.0 -#endif -/*--------------------------------------------------------------------------*/ -#if (FXAA_QUALITY__PRESET == 22) - #define FXAA_QUALITY__PS 5 - #define FXAA_QUALITY__P0 1.0 - #define FXAA_QUALITY__P1 1.5 - #define FXAA_QUALITY__P2 2.0 - #define FXAA_QUALITY__P3 2.0 - #define FXAA_QUALITY__P4 8.0 -#endif -/*--------------------------------------------------------------------------*/ -#if (FXAA_QUALITY__PRESET == 23) - #define FXAA_QUALITY__PS 6 - #define FXAA_QUALITY__P0 1.0 - #define FXAA_QUALITY__P1 1.5 - #define FXAA_QUALITY__P2 2.0 - #define FXAA_QUALITY__P3 2.0 - #define FXAA_QUALITY__P4 2.0 - #define FXAA_QUALITY__P5 8.0 -#endif -/*--------------------------------------------------------------------------*/ -#if (FXAA_QUALITY__PRESET == 24) - #define FXAA_QUALITY__PS 7 - #define FXAA_QUALITY__P0 1.0 - #define FXAA_QUALITY__P1 1.5 - #define FXAA_QUALITY__P2 2.0 - #define FXAA_QUALITY__P3 2.0 - #define FXAA_QUALITY__P4 2.0 - #define FXAA_QUALITY__P5 3.0 - #define FXAA_QUALITY__P6 8.0 -#endif -/*--------------------------------------------------------------------------*/ -#if (FXAA_QUALITY__PRESET == 25) - #define FXAA_QUALITY__PS 8 - #define FXAA_QUALITY__P0 1.0 - #define FXAA_QUALITY__P1 1.5 - #define FXAA_QUALITY__P2 2.0 - #define FXAA_QUALITY__P3 2.0 - #define FXAA_QUALITY__P4 2.0 - #define FXAA_QUALITY__P5 2.0 - #define FXAA_QUALITY__P6 4.0 - #define FXAA_QUALITY__P7 8.0 -#endif -/*--------------------------------------------------------------------------*/ -#if (FXAA_QUALITY__PRESET == 26) - #define FXAA_QUALITY__PS 9 - #define FXAA_QUALITY__P0 1.0 - #define FXAA_QUALITY__P1 1.5 - #define FXAA_QUALITY__P2 2.0 - #define FXAA_QUALITY__P3 2.0 - #define FXAA_QUALITY__P4 2.0 - #define FXAA_QUALITY__P5 2.0 - #define FXAA_QUALITY__P6 2.0 - #define FXAA_QUALITY__P7 4.0 - #define FXAA_QUALITY__P8 8.0 -#endif -/*--------------------------------------------------------------------------*/ -#if (FXAA_QUALITY__PRESET == 27) - #define FXAA_QUALITY__PS 10 - #define FXAA_QUALITY__P0 1.0 - #define FXAA_QUALITY__P1 1.5 - #define FXAA_QUALITY__P2 2.0 - #define FXAA_QUALITY__P3 2.0 - #define FXAA_QUALITY__P4 2.0 - #define FXAA_QUALITY__P5 2.0 - #define FXAA_QUALITY__P6 2.0 - #define FXAA_QUALITY__P7 2.0 - #define FXAA_QUALITY__P8 4.0 - #define FXAA_QUALITY__P9 8.0 -#endif -/*--------------------------------------------------------------------------*/ -#if (FXAA_QUALITY__PRESET == 28) - #define FXAA_QUALITY__PS 11 - #define FXAA_QUALITY__P0 1.0 - #define FXAA_QUALITY__P1 1.5 - #define FXAA_QUALITY__P2 2.0 - #define FXAA_QUALITY__P3 2.0 - #define FXAA_QUALITY__P4 2.0 - #define FXAA_QUALITY__P5 2.0 - #define FXAA_QUALITY__P6 2.0 - #define FXAA_QUALITY__P7 2.0 - #define FXAA_QUALITY__P8 2.0 - #define FXAA_QUALITY__P9 4.0 - #define FXAA_QUALITY__P10 8.0 -#endif -/*--------------------------------------------------------------------------*/ -#if (FXAA_QUALITY__PRESET == 29) - #define FXAA_QUALITY__PS 12 - #define FXAA_QUALITY__P0 1.0 - #define FXAA_QUALITY__P1 1.5 - #define FXAA_QUALITY__P2 2.0 - #define FXAA_QUALITY__P3 2.0 - #define FXAA_QUALITY__P4 2.0 - #define FXAA_QUALITY__P5 2.0 - #define FXAA_QUALITY__P6 2.0 - #define FXAA_QUALITY__P7 2.0 - #define FXAA_QUALITY__P8 2.0 - #define FXAA_QUALITY__P9 2.0 - #define FXAA_QUALITY__P10 4.0 - #define FXAA_QUALITY__P11 8.0 -#endif - -/*============================================================================ - FXAA QUALITY - EXTREME QUALITY -============================================================================*/ -#if (FXAA_QUALITY__PRESET == 39) - #define FXAA_QUALITY__PS 12 - #define FXAA_QUALITY__P0 1.0 - #define FXAA_QUALITY__P1 1.0 - #define FXAA_QUALITY__P2 1.0 - #define FXAA_QUALITY__P3 1.0 - #define FXAA_QUALITY__P4 1.0 - #define FXAA_QUALITY__P5 1.5 - #define FXAA_QUALITY__P6 2.0 - #define FXAA_QUALITY__P7 2.0 - #define FXAA_QUALITY__P8 2.0 - #define FXAA_QUALITY__P9 2.0 - #define FXAA_QUALITY__P10 4.0 - #define FXAA_QUALITY__P11 8.0 -#endif - - - -/*============================================================================ - - API PORTING - -============================================================================*/ -#if (FXAA_GLSL_120 == 1) || (FXAA_GLSL_130 == 1) - #define FxaaBool bool - #define FxaaDiscard discard - #define FxaaFloat float - #define FxaaFloat2 vec2 - #define FxaaFloat3 vec3 - #define FxaaFloat4 vec4 - #define FxaaHalf float - #define FxaaHalf2 vec2 - #define FxaaHalf3 vec3 - #define FxaaHalf4 vec4 - #define FxaaInt2 ivec2 - #define FxaaSat(x) clamp(x, 0.0, 1.0) - #define FxaaTex sampler2D -#else - #define FxaaBool bool - #define FxaaDiscard clip(-1) - #define FxaaFloat float - #define FxaaFloat2 float2 - #define FxaaFloat3 float3 - #define FxaaFloat4 float4 - #define FxaaHalf half - #define FxaaHalf2 half2 - #define FxaaHalf3 half3 - #define FxaaHalf4 half4 - #define FxaaSat(x) saturate(x) -#endif -/*--------------------------------------------------------------------------*/ -#if (FXAA_GLSL_120 == 1) - // Requires, - // #version 120 - // And at least, - // #extension GL_EXT_gpu_shader4 : enable - // (or set FXAA_FAST_PIXEL_OFFSET 1 to work like DX9) - #define FxaaTexTop(t, p) texture2DLod(t, p, 0.0) - #if (FXAA_FAST_PIXEL_OFFSET == 1) - #define FxaaTexOff(t, p, o, r) texture2DLodOffset(t, p, 0.0, o) - #else - #define FxaaTexOff(t, p, o, r) texture2DLod(t, p + (o * r), 0.0) - #endif - #if (FXAA_GATHER4_ALPHA == 1) - // use #extension GL_ARB_gpu_shader5 : enable - #define FxaaTexAlpha4(t, p) textureGather(t, p, 3) - #define FxaaTexOffAlpha4(t, p, o) textureGatherOffset(t, p, o, 3) - #define FxaaTexGreen4(t, p) textureGather(t, p, 1) - #define FxaaTexOffGreen4(t, p, o) textureGatherOffset(t, p, o, 1) - #endif -#endif -/*--------------------------------------------------------------------------*/ -#if (FXAA_GLSL_130 == 1) - // Requires "#version 130" or better - #define FxaaTexTop(t, p) textureLod(t, p, 0.0) - #define FxaaTexOff(t, p, o, r) textureLodOffset(t, p, 0.0, o) - #if (FXAA_GATHER4_ALPHA == 1) - // use #extension GL_ARB_gpu_shader5 : enable - #define FxaaTexAlpha4(t, p) textureGather(t, p, 3) - #define FxaaTexOffAlpha4(t, p, o) textureGatherOffset(t, p, o, 3) - #define FxaaTexGreen4(t, p) textureGather(t, p, 1) - #define FxaaTexOffGreen4(t, p, o) textureGatherOffset(t, p, o, 1) - #endif -#endif -/*--------------------------------------------------------------------------*/ -#if (FXAA_HLSL_3 == 1) || (FXAA_360 == 1) || (FXAA_PS3 == 1) - #define FxaaInt2 float2 - #define FxaaTex sampler2D - #define FxaaTexTop(t, p) tex2Dlod(t, float4(p, 0.0, 0.0)) - #define FxaaTexOff(t, p, o, r) tex2Dlod(t, float4(p + (o * r), 0, 0)) -#endif -/*--------------------------------------------------------------------------*/ -#if (FXAA_HLSL_4 == 1) - #define FxaaInt2 int2 - struct FxaaTex { SamplerState smpl; Texture2D tex; }; - #define FxaaTexTop(t, p) t.tex.SampleLevel(t.smpl, p, 0.0) - #define FxaaTexOff(t, p, o, r) t.tex.SampleLevel(t.smpl, p, 0.0, o) -#endif -/*--------------------------------------------------------------------------*/ -#if (FXAA_HLSL_5 == 1) - #define FxaaInt2 int2 - struct FxaaTex { SamplerState smpl; Texture2D tex; }; - #define FxaaTexTop(t, p) t.tex.SampleLevel(t.smpl, p, 0.0) - #define FxaaTexOff(t, p, o, r) t.tex.SampleLevel(t.smpl, p, 0.0, o) - #define FxaaTexAlpha4(t, p) t.tex.GatherAlpha(t.smpl, p) - #define FxaaTexOffAlpha4(t, p, o) t.tex.GatherAlpha(t.smpl, p, o) - #define FxaaTexGreen4(t, p) t.tex.GatherGreen(t.smpl, p) - #define FxaaTexOffGreen4(t, p, o) t.tex.GatherGreen(t.smpl, p, o) -#endif - - -/*============================================================================ - GREEN AS LUMA OPTION SUPPORT FUNCTION -============================================================================*/ -#if (FXAA_GREEN_AS_LUMA == 0) - FxaaFloat FxaaLuma(FxaaFloat4 rgba) { return rgba.w; } -#else - FxaaFloat FxaaLuma(FxaaFloat4 rgba) { return rgba.y; } -#endif - - - - -/*============================================================================ - - FXAA3 QUALITY - PC - -============================================================================*/ -#if (FXAA_PC == 1) -/*--------------------------------------------------------------------------*/ -FxaaFloat4 FxaaPixelShader( - // - // Use noperspective interpolation here (turn off perspective interpolation). - // {xy} = center of pixel - FxaaFloat2 pos, - // - // Used only for FXAA Console, and not used on the 360 version. - // Use noperspective interpolation here (turn off perspective interpolation). - // {xy__} = upper left of pixel - // {__zw} = lower right of pixel - FxaaFloat4 fxaaConsolePosPos, - // - // Input color texture. - // {rgb_} = color in linear or perceptual color space - // if (FXAA_GREEN_AS_LUMA == 0) - // {___a} = luma in perceptual color space (not linear) - FxaaTex tex, - // - // Only used on the optimized 360 version of FXAA Console. - // For everything but 360, just use the same input here as for "tex". - // For 360, same texture, just alias with a 2nd sampler. - // This sampler needs to have an exponent bias of -1. - FxaaTex fxaaConsole360TexExpBiasNegOne, - // - // Only used on the optimized 360 version of FXAA Console. - // For everything but 360, just use the same input here as for "tex". - // For 360, same texture, just alias with a 3nd sampler. - // This sampler needs to have an exponent bias of -2. - FxaaTex fxaaConsole360TexExpBiasNegTwo, - // - // Only used on FXAA Quality. - // This must be from a constant/uniform. - // {x_} = 1.0/screenWidthInPixels - // {_y} = 1.0/screenHeightInPixels - FxaaFloat2 fxaaQualityRcpFrame, - // - // Only used on FXAA Console. - // This must be from a constant/uniform. - // This effects sub-pixel AA quality and inversely sharpness. - // Where N ranges between, - // N = 0.50 (default) - // N = 0.33 (sharper) - // {x___} = -N/screenWidthInPixels - // {_y__} = -N/screenHeightInPixels - // {__z_} = N/screenWidthInPixels - // {___w} = N/screenHeightInPixels - FxaaFloat4 fxaaConsoleRcpFrameOpt, - // - // Only used on FXAA Console. - // Not used on 360, but used on PS3 and PC. - // This must be from a constant/uniform. - // {x___} = -2.0/screenWidthInPixels - // {_y__} = -2.0/screenHeightInPixels - // {__z_} = 2.0/screenWidthInPixels - // {___w} = 2.0/screenHeightInPixels - FxaaFloat4 fxaaConsoleRcpFrameOpt2, - // - // Only used on FXAA Console. - // Only used on 360 in place of fxaaConsoleRcpFrameOpt2. - // This must be from a constant/uniform. - // {x___} = 8.0/screenWidthInPixels - // {_y__} = 8.0/screenHeightInPixels - // {__z_} = -4.0/screenWidthInPixels - // {___w} = -4.0/screenHeightInPixels - FxaaFloat4 fxaaConsole360RcpFrameOpt2, - // - // Only used on FXAA Quality. - // This used to be the FXAA_QUALITY__SUBPIX define. - // It is here now to allow easier tuning. - // Choose the amount of sub-pixel aliasing removal. - // This can effect sharpness. - // 1.00 - upper limit (softer) - // 0.75 - default amount of filtering - // 0.50 - lower limit (sharper, less sub-pixel aliasing removal) - // 0.25 - almost off - // 0.00 - completely off - FxaaFloat fxaaQualitySubpix, - // - // Only used on FXAA Quality. - // This used to be the FXAA_QUALITY__EDGE_THRESHOLD define. - // It is here now to allow easier tuning. - // The minimum amount of local contrast required to apply algorithm. - // 0.333 - too little (faster) - // 0.250 - low quality - // 0.166 - default - // 0.125 - high quality - // 0.063 - overkill (slower) - FxaaFloat fxaaQualityEdgeThreshold, - // - // Only used on FXAA Quality. - // This used to be the FXAA_QUALITY__EDGE_THRESHOLD_MIN define. - // It is here now to allow easier tuning. - // Trims the algorithm from processing darks. - // 0.0833 - upper limit (default, the start of visible unfiltered edges) - // 0.0625 - high quality (faster) - // 0.0312 - visible limit (slower) - // Special notes when using FXAA_GREEN_AS_LUMA, - // Likely want to set this to zero. - // As colors that are mostly not-green - // will appear very dark in the green channel! - // Tune by looking at mostly non-green content, - // then start at zero and increase until aliasing is a problem. - FxaaFloat fxaaQualityEdgeThresholdMin, - // - // Only used on FXAA Console. - // This used to be the FXAA_CONSOLE__EDGE_SHARPNESS define. - // It is here now to allow easier tuning. - // This does not effect PS3, as this needs to be compiled in. - // Use FXAA_CONSOLE__PS3_EDGE_SHARPNESS for PS3. - // Due to the PS3 being ALU bound, - // there are only three safe values here: 2 and 4 and 8. - // These options use the shaders ability to a free *|/ by 2|4|8. - // For all other platforms can be a non-power of two. - // 8.0 is sharper (default!!!) - // 4.0 is softer - // 2.0 is really soft (good only for vector graphics inputs) - FxaaFloat fxaaConsoleEdgeSharpness, - // - // Only used on FXAA Console. - // This used to be the FXAA_CONSOLE__EDGE_THRESHOLD define. - // It is here now to allow easier tuning. - // This does not effect PS3, as this needs to be compiled in. - // Use FXAA_CONSOLE__PS3_EDGE_THRESHOLD for PS3. - // Due to the PS3 being ALU bound, - // there are only two safe values here: 1/4 and 1/8. - // These options use the shaders ability to a free *|/ by 2|4|8. - // The console setting has a different mapping than the quality setting. - // Other platforms can use other values. - // 0.125 leaves less aliasing, but is softer (default!!!) - // 0.25 leaves more aliasing, and is sharper - FxaaFloat fxaaConsoleEdgeThreshold, - // - // Only used on FXAA Console. - // This used to be the FXAA_CONSOLE__EDGE_THRESHOLD_MIN define. - // It is here now to allow easier tuning. - // Trims the algorithm from processing darks. - // The console setting has a different mapping than the quality setting. - // This only applies when FXAA_EARLY_EXIT is 1. - // This does not apply to PS3, - // PS3 was simplified to avoid more shader instructions. - // 0.06 - faster but more aliasing in darks - // 0.05 - default - // 0.04 - slower and less aliasing in darks - // Special notes when using FXAA_GREEN_AS_LUMA, - // Likely want to set this to zero. - // As colors that are mostly not-green - // will appear very dark in the green channel! - // Tune by looking at mostly non-green content, - // then start at zero and increase until aliasing is a problem. - FxaaFloat fxaaConsoleEdgeThresholdMin, - // - // Extra constants for 360 FXAA Console only. - // Use zeros or anything else for other platforms. - // These must be in physical constant registers and NOT immedates. - // Immedates will result in compiler un-optimizing. - // {xyzw} = float4(1.0, -1.0, 0.25, -0.25) - FxaaFloat4 fxaaConsole360ConstDir -) { -/*--------------------------------------------------------------------------*/ - FxaaFloat2 posM; - posM.x = pos.x; - posM.y = pos.y; - #if (FXAA_GATHER4_ALPHA == 1) - #if (FXAA_DISCARD == 0) - FxaaFloat4 rgbyM = FxaaTexTop(tex, posM); - #if (FXAA_GREEN_AS_LUMA == 0) - #define lumaM rgbyM.w - #else - #define lumaM rgbyM.y - #endif - #endif - #if (FXAA_GREEN_AS_LUMA == 0) - FxaaFloat4 luma4A = FxaaTexAlpha4(tex, posM); - FxaaFloat4 luma4B = FxaaTexOffAlpha4(tex, posM, FxaaInt2(-1, -1)); - #else - FxaaFloat4 luma4A = FxaaTexGreen4(tex, posM); - FxaaFloat4 luma4B = FxaaTexOffGreen4(tex, posM, FxaaInt2(-1, -1)); - #endif - #if (FXAA_DISCARD == 1) - #define lumaM luma4A.w - #endif - #define lumaE luma4A.z - #define lumaS luma4A.x - #define lumaSE luma4A.y - #define lumaNW luma4B.w - #define lumaN luma4B.z - #define lumaW luma4B.x - #else - FxaaFloat4 rgbyM = FxaaTexTop(tex, posM); - #if (FXAA_GREEN_AS_LUMA == 0) - #define lumaM rgbyM.w - #else - #define lumaM rgbyM.y - #endif - FxaaFloat lumaS = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2( 0, 1), fxaaQualityRcpFrame.xy)); - FxaaFloat lumaE = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2( 1, 0), fxaaQualityRcpFrame.xy)); - FxaaFloat lumaN = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2( 0,-1), fxaaQualityRcpFrame.xy)); - FxaaFloat lumaW = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2(-1, 0), fxaaQualityRcpFrame.xy)); - #endif -/*--------------------------------------------------------------------------*/ - FxaaFloat maxSM = max(lumaS, lumaM); - FxaaFloat minSM = min(lumaS, lumaM); - FxaaFloat maxESM = max(lumaE, maxSM); - FxaaFloat minESM = min(lumaE, minSM); - FxaaFloat maxWN = max(lumaN, lumaW); - FxaaFloat minWN = min(lumaN, lumaW); - FxaaFloat rangeMax = max(maxWN, maxESM); - FxaaFloat rangeMin = min(minWN, minESM); - FxaaFloat rangeMaxScaled = rangeMax * fxaaQualityEdgeThreshold; - FxaaFloat range = rangeMax - rangeMin; - FxaaFloat rangeMaxClamped = max(fxaaQualityEdgeThresholdMin, rangeMaxScaled); - FxaaBool earlyExit = range < rangeMaxClamped; -/*--------------------------------------------------------------------------*/ - if(earlyExit) - #if (FXAA_DISCARD == 1) - FxaaDiscard; - #else - return rgbyM; - #endif -/*--------------------------------------------------------------------------*/ - #if (FXAA_GATHER4_ALPHA == 0) - FxaaFloat lumaNW = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2(-1,-1), fxaaQualityRcpFrame.xy)); - FxaaFloat lumaSE = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2( 1, 1), fxaaQualityRcpFrame.xy)); - FxaaFloat lumaNE = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2( 1,-1), fxaaQualityRcpFrame.xy)); - FxaaFloat lumaSW = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2(-1, 1), fxaaQualityRcpFrame.xy)); - #else - FxaaFloat lumaNE = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2(1, -1), fxaaQualityRcpFrame.xy)); - FxaaFloat lumaSW = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2(-1, 1), fxaaQualityRcpFrame.xy)); - #endif -/*--------------------------------------------------------------------------*/ - FxaaFloat lumaNS = lumaN + lumaS; - FxaaFloat lumaWE = lumaW + lumaE; - FxaaFloat subpixRcpRange = 1.0/range; - FxaaFloat subpixNSWE = lumaNS + lumaWE; - FxaaFloat edgeHorz1 = (-2.0 * lumaM) + lumaNS; - FxaaFloat edgeVert1 = (-2.0 * lumaM) + lumaWE; -/*--------------------------------------------------------------------------*/ - FxaaFloat lumaNESE = lumaNE + lumaSE; - FxaaFloat lumaNWNE = lumaNW + lumaNE; - FxaaFloat edgeHorz2 = (-2.0 * lumaE) + lumaNESE; - FxaaFloat edgeVert2 = (-2.0 * lumaN) + lumaNWNE; -/*--------------------------------------------------------------------------*/ - FxaaFloat lumaNWSW = lumaNW + lumaSW; - FxaaFloat lumaSWSE = lumaSW + lumaSE; - FxaaFloat edgeHorz4 = (abs(edgeHorz1) * 2.0) + abs(edgeHorz2); - FxaaFloat edgeVert4 = (abs(edgeVert1) * 2.0) + abs(edgeVert2); - FxaaFloat edgeHorz3 = (-2.0 * lumaW) + lumaNWSW; - FxaaFloat edgeVert3 = (-2.0 * lumaS) + lumaSWSE; - FxaaFloat edgeHorz = abs(edgeHorz3) + edgeHorz4; - FxaaFloat edgeVert = abs(edgeVert3) + edgeVert4; -/*--------------------------------------------------------------------------*/ - FxaaFloat subpixNWSWNESE = lumaNWSW + lumaNESE; - FxaaFloat lengthSign = fxaaQualityRcpFrame.x; - FxaaBool horzSpan = edgeHorz >= edgeVert; - FxaaFloat subpixA = subpixNSWE * 2.0 + subpixNWSWNESE; -/*--------------------------------------------------------------------------*/ - if(!horzSpan) lumaN = lumaW; - if(!horzSpan) lumaS = lumaE; - if(horzSpan) lengthSign = fxaaQualityRcpFrame.y; - FxaaFloat subpixB = (subpixA * (1.0/12.0)) - lumaM; -/*--------------------------------------------------------------------------*/ - FxaaFloat gradientN = lumaN - lumaM; - FxaaFloat gradientS = lumaS - lumaM; - FxaaFloat lumaNN = lumaN + lumaM; - FxaaFloat lumaSS = lumaS + lumaM; - FxaaBool pairN = abs(gradientN) >= abs(gradientS); - FxaaFloat gradient = max(abs(gradientN), abs(gradientS)); - if(pairN) lengthSign = -lengthSign; - FxaaFloat subpixC = FxaaSat(abs(subpixB) * subpixRcpRange); -/*--------------------------------------------------------------------------*/ - FxaaFloat2 posB; - posB.x = posM.x; - posB.y = posM.y; - FxaaFloat2 offNP; - offNP.x = (!horzSpan) ? 0.0 : fxaaQualityRcpFrame.x; - offNP.y = ( horzSpan) ? 0.0 : fxaaQualityRcpFrame.y; - if(!horzSpan) posB.x += lengthSign * 0.5; - if( horzSpan) posB.y += lengthSign * 0.5; -/*--------------------------------------------------------------------------*/ - FxaaFloat2 posN; - posN.x = posB.x - offNP.x * FXAA_QUALITY__P0; - posN.y = posB.y - offNP.y * FXAA_QUALITY__P0; - FxaaFloat2 posP; - posP.x = posB.x + offNP.x * FXAA_QUALITY__P0; - posP.y = posB.y + offNP.y * FXAA_QUALITY__P0; - FxaaFloat subpixD = ((-2.0)*subpixC) + 3.0; - FxaaFloat lumaEndN = FxaaLuma(FxaaTexTop(tex, posN)); - FxaaFloat subpixE = subpixC * subpixC; - FxaaFloat lumaEndP = FxaaLuma(FxaaTexTop(tex, posP)); -/*--------------------------------------------------------------------------*/ - if(!pairN) lumaNN = lumaSS; - FxaaFloat gradientScaled = gradient * 1.0/4.0; - FxaaFloat lumaMM = lumaM - lumaNN * 0.5; - FxaaFloat subpixF = subpixD * subpixE; - FxaaBool lumaMLTZero = lumaMM < 0.0; -/*--------------------------------------------------------------------------*/ - lumaEndN -= lumaNN * 0.5; - lumaEndP -= lumaNN * 0.5; - FxaaBool doneN = abs(lumaEndN) >= gradientScaled; - FxaaBool doneP = abs(lumaEndP) >= gradientScaled; - if(!doneN) posN.x -= offNP.x * FXAA_QUALITY__P1; - if(!doneN) posN.y -= offNP.y * FXAA_QUALITY__P1; - FxaaBool doneNP = (!doneN) || (!doneP); - if(!doneP) posP.x += offNP.x * FXAA_QUALITY__P1; - if(!doneP) posP.y += offNP.y * FXAA_QUALITY__P1; -/*--------------------------------------------------------------------------*/ - if(doneNP) { - if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy)); - if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy)); - if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5; - if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5; - doneN = abs(lumaEndN) >= gradientScaled; - doneP = abs(lumaEndP) >= gradientScaled; - if(!doneN) posN.x -= offNP.x * FXAA_QUALITY__P2; - if(!doneN) posN.y -= offNP.y * FXAA_QUALITY__P2; - doneNP = (!doneN) || (!doneP); - if(!doneP) posP.x += offNP.x * FXAA_QUALITY__P2; - if(!doneP) posP.y += offNP.y * FXAA_QUALITY__P2; -/*--------------------------------------------------------------------------*/ - #if (FXAA_QUALITY__PS > 3) - if(doneNP) { - if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy)); - if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy)); - if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5; - if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5; - doneN = abs(lumaEndN) >= gradientScaled; - doneP = abs(lumaEndP) >= gradientScaled; - if(!doneN) posN.x -= offNP.x * FXAA_QUALITY__P3; - if(!doneN) posN.y -= offNP.y * FXAA_QUALITY__P3; - doneNP = (!doneN) || (!doneP); - if(!doneP) posP.x += offNP.x * FXAA_QUALITY__P3; - if(!doneP) posP.y += offNP.y * FXAA_QUALITY__P3; -/*--------------------------------------------------------------------------*/ - #if (FXAA_QUALITY__PS > 4) - if(doneNP) { - if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy)); - if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy)); - if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5; - if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5; - doneN = abs(lumaEndN) >= gradientScaled; - doneP = abs(lumaEndP) >= gradientScaled; - if(!doneN) posN.x -= offNP.x * FXAA_QUALITY__P4; - if(!doneN) posN.y -= offNP.y * FXAA_QUALITY__P4; - doneNP = (!doneN) || (!doneP); - if(!doneP) posP.x += offNP.x * FXAA_QUALITY__P4; - if(!doneP) posP.y += offNP.y * FXAA_QUALITY__P4; -/*--------------------------------------------------------------------------*/ - #if (FXAA_QUALITY__PS > 5) - if(doneNP) { - if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy)); - if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy)); - if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5; - if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5; - doneN = abs(lumaEndN) >= gradientScaled; - doneP = abs(lumaEndP) >= gradientScaled; - if(!doneN) posN.x -= offNP.x * FXAA_QUALITY__P5; - if(!doneN) posN.y -= offNP.y * FXAA_QUALITY__P5; - doneNP = (!doneN) || (!doneP); - if(!doneP) posP.x += offNP.x * FXAA_QUALITY__P5; - if(!doneP) posP.y += offNP.y * FXAA_QUALITY__P5; -/*--------------------------------------------------------------------------*/ - #if (FXAA_QUALITY__PS > 6) - if(doneNP) { - if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy)); - if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy)); - if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5; - if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5; - doneN = abs(lumaEndN) >= gradientScaled; - doneP = abs(lumaEndP) >= gradientScaled; - if(!doneN) posN.x -= offNP.x * FXAA_QUALITY__P6; - if(!doneN) posN.y -= offNP.y * FXAA_QUALITY__P6; - doneNP = (!doneN) || (!doneP); - if(!doneP) posP.x += offNP.x * FXAA_QUALITY__P6; - if(!doneP) posP.y += offNP.y * FXAA_QUALITY__P6; -/*--------------------------------------------------------------------------*/ - #if (FXAA_QUALITY__PS > 7) - if(doneNP) { - if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy)); - if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy)); - if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5; - if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5; - doneN = abs(lumaEndN) >= gradientScaled; - doneP = abs(lumaEndP) >= gradientScaled; - if(!doneN) posN.x -= offNP.x * FXAA_QUALITY__P7; - if(!doneN) posN.y -= offNP.y * FXAA_QUALITY__P7; - doneNP = (!doneN) || (!doneP); - if(!doneP) posP.x += offNP.x * FXAA_QUALITY__P7; - if(!doneP) posP.y += offNP.y * FXAA_QUALITY__P7; -/*--------------------------------------------------------------------------*/ - #if (FXAA_QUALITY__PS > 8) - if(doneNP) { - if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy)); - if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy)); - if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5; - if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5; - doneN = abs(lumaEndN) >= gradientScaled; - doneP = abs(lumaEndP) >= gradientScaled; - if(!doneN) posN.x -= offNP.x * FXAA_QUALITY__P8; - if(!doneN) posN.y -= offNP.y * FXAA_QUALITY__P8; - doneNP = (!doneN) || (!doneP); - if(!doneP) posP.x += offNP.x * FXAA_QUALITY__P8; - if(!doneP) posP.y += offNP.y * FXAA_QUALITY__P8; -/*--------------------------------------------------------------------------*/ - #if (FXAA_QUALITY__PS > 9) - if(doneNP) { - if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy)); - if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy)); - if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5; - if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5; - doneN = abs(lumaEndN) >= gradientScaled; - doneP = abs(lumaEndP) >= gradientScaled; - if(!doneN) posN.x -= offNP.x * FXAA_QUALITY__P9; - if(!doneN) posN.y -= offNP.y * FXAA_QUALITY__P9; - doneNP = (!doneN) || (!doneP); - if(!doneP) posP.x += offNP.x * FXAA_QUALITY__P9; - if(!doneP) posP.y += offNP.y * FXAA_QUALITY__P9; -/*--------------------------------------------------------------------------*/ - #if (FXAA_QUALITY__PS > 10) - if(doneNP) { - if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy)); - if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy)); - if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5; - if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5; - doneN = abs(lumaEndN) >= gradientScaled; - doneP = abs(lumaEndP) >= gradientScaled; - if(!doneN) posN.x -= offNP.x * FXAA_QUALITY__P10; - if(!doneN) posN.y -= offNP.y * FXAA_QUALITY__P10; - doneNP = (!doneN) || (!doneP); - if(!doneP) posP.x += offNP.x * FXAA_QUALITY__P10; - if(!doneP) posP.y += offNP.y * FXAA_QUALITY__P10; -/*--------------------------------------------------------------------------*/ - #if (FXAA_QUALITY__PS > 11) - if(doneNP) { - if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy)); - if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy)); - if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5; - if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5; - doneN = abs(lumaEndN) >= gradientScaled; - doneP = abs(lumaEndP) >= gradientScaled; - if(!doneN) posN.x -= offNP.x * FXAA_QUALITY__P11; - if(!doneN) posN.y -= offNP.y * FXAA_QUALITY__P11; - doneNP = (!doneN) || (!doneP); - if(!doneP) posP.x += offNP.x * FXAA_QUALITY__P11; - if(!doneP) posP.y += offNP.y * FXAA_QUALITY__P11; -/*--------------------------------------------------------------------------*/ - #if (FXAA_QUALITY__PS > 12) - if(doneNP) { - if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy)); - if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy)); - if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5; - if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5; - doneN = abs(lumaEndN) >= gradientScaled; - doneP = abs(lumaEndP) >= gradientScaled; - if(!doneN) posN.x -= offNP.x * FXAA_QUALITY__P12; - if(!doneN) posN.y -= offNP.y * FXAA_QUALITY__P12; - doneNP = (!doneN) || (!doneP); - if(!doneP) posP.x += offNP.x * FXAA_QUALITY__P12; - if(!doneP) posP.y += offNP.y * FXAA_QUALITY__P12; -/*--------------------------------------------------------------------------*/ - } - #endif -/*--------------------------------------------------------------------------*/ - } - #endif -/*--------------------------------------------------------------------------*/ - } - #endif -/*--------------------------------------------------------------------------*/ - } - #endif -/*--------------------------------------------------------------------------*/ - } - #endif -/*--------------------------------------------------------------------------*/ - } - #endif -/*--------------------------------------------------------------------------*/ - } - #endif -/*--------------------------------------------------------------------------*/ - } - #endif -/*--------------------------------------------------------------------------*/ - } - #endif -/*--------------------------------------------------------------------------*/ - } - #endif -/*--------------------------------------------------------------------------*/ - } -/*--------------------------------------------------------------------------*/ - FxaaFloat dstN = posM.x - posN.x; - FxaaFloat dstP = posP.x - posM.x; - if(!horzSpan) dstN = posM.y - posN.y; - if(!horzSpan) dstP = posP.y - posM.y; -/*--------------------------------------------------------------------------*/ - FxaaBool goodSpanN = (lumaEndN < 0.0) != lumaMLTZero; - FxaaFloat spanLength = (dstP + dstN); - FxaaBool goodSpanP = (lumaEndP < 0.0) != lumaMLTZero; - FxaaFloat spanLengthRcp = 1.0/spanLength; -/*--------------------------------------------------------------------------*/ - FxaaBool directionN = dstN < dstP; - FxaaFloat dst = min(dstN, dstP); - FxaaBool goodSpan = directionN ? goodSpanN : goodSpanP; - FxaaFloat subpixG = subpixF * subpixF; - FxaaFloat pixelOffset = (dst * (-spanLengthRcp)) + 0.5; - FxaaFloat subpixH = subpixG * fxaaQualitySubpix; -/*--------------------------------------------------------------------------*/ - FxaaFloat pixelOffsetGood = goodSpan ? pixelOffset : 0.0; - FxaaFloat pixelOffsetSubpix = max(pixelOffsetGood, subpixH); - if(!horzSpan) posM.x += pixelOffsetSubpix * lengthSign; - if( horzSpan) posM.y += pixelOffsetSubpix * lengthSign; - #if (FXAA_DISCARD == 1) - return FxaaTexTop(tex, posM); - #else - return FxaaFloat4(FxaaTexTop(tex, posM).xyz, lumaM); - #endif -} -/*==========================================================================*/ -#endif - - - - -/*============================================================================ - - FXAA3 CONSOLE - PC VERSION - ------------------------------------------------------------------------------- -Instead of using this on PC, I'd suggest just using FXAA Quality with - #define FXAA_QUALITY__PRESET 10 -Or - #define FXAA_QUALITY__PRESET 20 -Either are higher qualilty and almost as fast as this on modern PC GPUs. -============================================================================*/ -#if (FXAA_PC_CONSOLE == 1) -/*--------------------------------------------------------------------------*/ -FxaaFloat4 FxaaPixelShader( - // See FXAA Quality FxaaPixelShader() source for docs on Inputs! - FxaaFloat2 pos, - FxaaFloat4 fxaaConsolePosPos, - FxaaTex tex, - FxaaTex fxaaConsole360TexExpBiasNegOne, - FxaaTex fxaaConsole360TexExpBiasNegTwo, - FxaaFloat2 fxaaQualityRcpFrame, - FxaaFloat4 fxaaConsoleRcpFrameOpt, - FxaaFloat4 fxaaConsoleRcpFrameOpt2, - FxaaFloat4 fxaaConsole360RcpFrameOpt2, - FxaaFloat fxaaQualitySubpix, - FxaaFloat fxaaQualityEdgeThreshold, - FxaaFloat fxaaQualityEdgeThresholdMin, - FxaaFloat fxaaConsoleEdgeSharpness, - FxaaFloat fxaaConsoleEdgeThreshold, - FxaaFloat fxaaConsoleEdgeThresholdMin, - FxaaFloat4 fxaaConsole360ConstDir -) { -/*--------------------------------------------------------------------------*/ - FxaaFloat lumaNw = FxaaLuma(FxaaTexTop(tex, fxaaConsolePosPos.xy)); - FxaaFloat lumaSw = FxaaLuma(FxaaTexTop(tex, fxaaConsolePosPos.xw)); - FxaaFloat lumaNe = FxaaLuma(FxaaTexTop(tex, fxaaConsolePosPos.zy)); - FxaaFloat lumaSe = FxaaLuma(FxaaTexTop(tex, fxaaConsolePosPos.zw)); -/*--------------------------------------------------------------------------*/ - FxaaFloat4 rgbyM = FxaaTexTop(tex, pos.xy); - #if (FXAA_GREEN_AS_LUMA == 0) - FxaaFloat lumaM = rgbyM.w; - #else - FxaaFloat lumaM = rgbyM.y; - #endif -/*--------------------------------------------------------------------------*/ - FxaaFloat lumaMaxNwSw = max(lumaNw, lumaSw); - lumaNe += 1.0/384.0; - FxaaFloat lumaMinNwSw = min(lumaNw, lumaSw); -/*--------------------------------------------------------------------------*/ - FxaaFloat lumaMaxNeSe = max(lumaNe, lumaSe); - FxaaFloat lumaMinNeSe = min(lumaNe, lumaSe); -/*--------------------------------------------------------------------------*/ - FxaaFloat lumaMax = max(lumaMaxNeSe, lumaMaxNwSw); - FxaaFloat lumaMin = min(lumaMinNeSe, lumaMinNwSw); -/*--------------------------------------------------------------------------*/ - FxaaFloat lumaMaxScaled = lumaMax * fxaaConsoleEdgeThreshold; -/*--------------------------------------------------------------------------*/ - FxaaFloat lumaMinM = min(lumaMin, lumaM); - FxaaFloat lumaMaxScaledClamped = max(fxaaConsoleEdgeThresholdMin, lumaMaxScaled); - FxaaFloat lumaMaxM = max(lumaMax, lumaM); - FxaaFloat dirSwMinusNe = lumaSw - lumaNe; - FxaaFloat lumaMaxSubMinM = lumaMaxM - lumaMinM; - FxaaFloat dirSeMinusNw = lumaSe - lumaNw; - if(lumaMaxSubMinM < lumaMaxScaledClamped) return rgbyM; -/*--------------------------------------------------------------------------*/ - FxaaFloat2 dir; - dir.x = dirSwMinusNe + dirSeMinusNw; - dir.y = dirSwMinusNe - dirSeMinusNw; -/*--------------------------------------------------------------------------*/ - FxaaFloat2 dir1 = normalize(dir.xy); - FxaaFloat4 rgbyN1 = FxaaTexTop(tex, pos.xy - dir1 * fxaaConsoleRcpFrameOpt.zw); - FxaaFloat4 rgbyP1 = FxaaTexTop(tex, pos.xy + dir1 * fxaaConsoleRcpFrameOpt.zw); -/*--------------------------------------------------------------------------*/ - FxaaFloat dirAbsMinTimesC = min(abs(dir1.x), abs(dir1.y)) * fxaaConsoleEdgeSharpness; - FxaaFloat2 dir2 = clamp(dir1.xy / dirAbsMinTimesC, -2.0, 2.0); -/*--------------------------------------------------------------------------*/ - FxaaFloat4 rgbyN2 = FxaaTexTop(tex, pos.xy - dir2 * fxaaConsoleRcpFrameOpt2.zw); - FxaaFloat4 rgbyP2 = FxaaTexTop(tex, pos.xy + dir2 * fxaaConsoleRcpFrameOpt2.zw); -/*--------------------------------------------------------------------------*/ - FxaaFloat4 rgbyA = rgbyN1 + rgbyP1; - FxaaFloat4 rgbyB = ((rgbyN2 + rgbyP2) * 0.25) + (rgbyA * 0.25); -/*--------------------------------------------------------------------------*/ - #if (FXAA_GREEN_AS_LUMA == 0) - FxaaBool twoTap = (rgbyB.w < lumaMin) || (rgbyB.w > lumaMax); - #else - FxaaBool twoTap = (rgbyB.y < lumaMin) || (rgbyB.y > lumaMax); - #endif - if(twoTap) rgbyB.xyz = rgbyA.xyz * 0.5; - return rgbyB; } -/*==========================================================================*/ -#endif - - - -/*============================================================================ - - FXAA3 CONSOLE - 360 PIXEL SHADER - ------------------------------------------------------------------------------- -This optimized version thanks to suggestions from Andy Luedke. -Should be fully tex bound in all cases. -As of the FXAA 3.11 release, I have still not tested this code, -however I fixed a bug which was in both FXAA 3.9 and FXAA 3.10. -And note this is replacing the old unoptimized version. -If it does not work, please let me know so I can fix it. -============================================================================*/ -#if (FXAA_360 == 1) -/*--------------------------------------------------------------------------*/ -[reduceTempRegUsage(4)] -float4 FxaaPixelShader( - // See FXAA Quality FxaaPixelShader() source for docs on Inputs! - FxaaFloat2 pos, - FxaaFloat4 fxaaConsolePosPos, - FxaaTex tex, - FxaaTex fxaaConsole360TexExpBiasNegOne, - FxaaTex fxaaConsole360TexExpBiasNegTwo, - FxaaFloat2 fxaaQualityRcpFrame, - FxaaFloat4 fxaaConsoleRcpFrameOpt, - FxaaFloat4 fxaaConsoleRcpFrameOpt2, - FxaaFloat4 fxaaConsole360RcpFrameOpt2, - FxaaFloat fxaaQualitySubpix, - FxaaFloat fxaaQualityEdgeThreshold, - FxaaFloat fxaaQualityEdgeThresholdMin, - FxaaFloat fxaaConsoleEdgeSharpness, - FxaaFloat fxaaConsoleEdgeThreshold, - FxaaFloat fxaaConsoleEdgeThresholdMin, - FxaaFloat4 fxaaConsole360ConstDir -) { -/*--------------------------------------------------------------------------*/ - float4 lumaNwNeSwSe; - #if (FXAA_GREEN_AS_LUMA == 0) - asm { - tfetch2D lumaNwNeSwSe.w___, tex, pos.xy, OffsetX = -0.5, OffsetY = -0.5, UseComputedLOD=false - tfetch2D lumaNwNeSwSe._w__, tex, pos.xy, OffsetX = 0.5, OffsetY = -0.5, UseComputedLOD=false - tfetch2D lumaNwNeSwSe.__w_, tex, pos.xy, OffsetX = -0.5, OffsetY = 0.5, UseComputedLOD=false - tfetch2D lumaNwNeSwSe.___w, tex, pos.xy, OffsetX = 0.5, OffsetY = 0.5, UseComputedLOD=false - }; - #else - asm { - tfetch2D lumaNwNeSwSe.y___, tex, pos.xy, OffsetX = -0.5, OffsetY = -0.5, UseComputedLOD=false - tfetch2D lumaNwNeSwSe._y__, tex, pos.xy, OffsetX = 0.5, OffsetY = -0.5, UseComputedLOD=false - tfetch2D lumaNwNeSwSe.__y_, tex, pos.xy, OffsetX = -0.5, OffsetY = 0.5, UseComputedLOD=false - tfetch2D lumaNwNeSwSe.___y, tex, pos.xy, OffsetX = 0.5, OffsetY = 0.5, UseComputedLOD=false - }; - #endif -/*--------------------------------------------------------------------------*/ - lumaNwNeSwSe.y += 1.0/384.0; - float2 lumaMinTemp = min(lumaNwNeSwSe.xy, lumaNwNeSwSe.zw); - float2 lumaMaxTemp = max(lumaNwNeSwSe.xy, lumaNwNeSwSe.zw); - float lumaMin = min(lumaMinTemp.x, lumaMinTemp.y); - float lumaMax = max(lumaMaxTemp.x, lumaMaxTemp.y); -/*--------------------------------------------------------------------------*/ - float4 rgbyM = tex2Dlod(tex, float4(pos.xy, 0.0, 0.0)); - #if (FXAA_GREEN_AS_LUMA == 0) - float lumaMinM = min(lumaMin, rgbyM.w); - float lumaMaxM = max(lumaMax, rgbyM.w); - #else - float lumaMinM = min(lumaMin, rgbyM.y); - float lumaMaxM = max(lumaMax, rgbyM.y); - #endif - if((lumaMaxM - lumaMinM) < max(fxaaConsoleEdgeThresholdMin, lumaMax * fxaaConsoleEdgeThreshold)) return rgbyM; -/*--------------------------------------------------------------------------*/ - float2 dir; - dir.x = dot(lumaNwNeSwSe, fxaaConsole360ConstDir.yyxx); - dir.y = dot(lumaNwNeSwSe, fxaaConsole360ConstDir.xyxy); - dir = normalize(dir); -/*--------------------------------------------------------------------------*/ - float4 dir1 = dir.xyxy * fxaaConsoleRcpFrameOpt.xyzw; -/*--------------------------------------------------------------------------*/ - float4 dir2; - float dirAbsMinTimesC = min(abs(dir.x), abs(dir.y)) * fxaaConsoleEdgeSharpness; - dir2 = saturate(fxaaConsole360ConstDir.zzww * dir.xyxy / dirAbsMinTimesC + 0.5); - dir2 = dir2 * fxaaConsole360RcpFrameOpt2.xyxy + fxaaConsole360RcpFrameOpt2.zwzw; -/*--------------------------------------------------------------------------*/ - float4 rgbyN1 = tex2Dlod(fxaaConsole360TexExpBiasNegOne, float4(pos.xy + dir1.xy, 0.0, 0.0)); - float4 rgbyP1 = tex2Dlod(fxaaConsole360TexExpBiasNegOne, float4(pos.xy + dir1.zw, 0.0, 0.0)); - float4 rgbyN2 = tex2Dlod(fxaaConsole360TexExpBiasNegTwo, float4(pos.xy + dir2.xy, 0.0, 0.0)); - float4 rgbyP2 = tex2Dlod(fxaaConsole360TexExpBiasNegTwo, float4(pos.xy + dir2.zw, 0.0, 0.0)); -/*--------------------------------------------------------------------------*/ - float4 rgbyA = rgbyN1 + rgbyP1; - float4 rgbyB = rgbyN2 + rgbyP2 + rgbyA * 0.5; -/*--------------------------------------------------------------------------*/ - float4 rgbyR = ((FxaaLuma(rgbyB) - lumaMax) > 0.0) ? rgbyA : rgbyB; - rgbyR = ((FxaaLuma(rgbyB) - lumaMin) > 0.0) ? rgbyR : rgbyA; - return rgbyR; } -/*==========================================================================*/ -#endif - - - -/*============================================================================ - - FXAA3 CONSOLE - OPTIMIZED PS3 PIXEL SHADER (NO EARLY EXIT) - -============================================================================== -The code below does not exactly match the assembly. -I have a feeling that 12 cycles is possible, but was not able to get there. -Might have to increase register count to get full performance. -Note this shader does not use perspective interpolation. - -Use the following cgc options, - - --fenable-bx2 --fastmath --fastprecision --nofloatbindings - ------------------------------------------------------------------------------- - NVSHADERPERF OUTPUT ------------------------------------------------------------------------------- -For reference and to aid in debug, output of NVShaderPerf should match this, - -Shader to schedule: - 0: texpkb h0.w(TRUE), v5.zyxx, #0 - 2: addh h2.z(TRUE), h0.w, constant(0.001953, 0.000000, 0.000000, 0.000000).x - 4: texpkb h0.w(TRUE), v5.xwxx, #0 - 6: addh h0.z(TRUE), -h2, h0.w - 7: texpkb h1.w(TRUE), v5, #0 - 9: addh h0.x(TRUE), h0.z, -h1.w - 10: addh h3.w(TRUE), h0.z, h1 - 11: texpkb h2.w(TRUE), v5.zwzz, #0 - 13: addh h0.z(TRUE), h3.w, -h2.w - 14: addh h0.x(TRUE), h2.w, h0 - 15: nrmh h1.xz(TRUE), h0_n - 16: minh_m8 h0.x(TRUE), |h1|, |h1.z| - 17: maxh h4.w(TRUE), h0, h1 - 18: divx h2.xy(TRUE), h1_n.xzzw, h0_n - 19: movr r1.zw(TRUE), v4.xxxy - 20: madr r2.xz(TRUE), -h1, constant(cConst5.x, cConst5.y, cConst5.z, cConst5.w).zzww, r1.zzww - 22: minh h5.w(TRUE), h0, h1 - 23: texpkb h0(TRUE), r2.xzxx, #0 - 25: madr r0.zw(TRUE), h1.xzxz, constant(cConst5.x, cConst5.y, cConst5.z, cConst5.w), r1 - 27: maxh h4.x(TRUE), h2.z, h2.w - 28: texpkb h1(TRUE), r0.zwzz, #0 - 30: addh_d2 h1(TRUE), h0, h1 - 31: madr r0.xy(TRUE), -h2, constant(cConst5.x, cConst5.y, cConst5.z, cConst5.w).xyxx, r1.zwzz - 33: texpkb h0(TRUE), r0, #0 - 35: minh h4.z(TRUE), h2, h2.w - 36: fenct TRUE - 37: madr r1.xy(TRUE), h2, constant(cConst5.x, cConst5.y, cConst5.z, cConst5.w).xyxx, r1.zwzz - 39: texpkb h2(TRUE), r1, #0 - 41: addh_d2 h0(TRUE), h0, h2 - 42: maxh h2.w(TRUE), h4, h4.x - 43: minh h2.x(TRUE), h5.w, h4.z - 44: addh_d2 h0(TRUE), h0, h1 - 45: slth h2.x(TRUE), h0.w, h2 - 46: sgth h2.w(TRUE), h0, h2 - 47: movh h0(TRUE), h0 - 48: addx.c0 rc(TRUE), h2, h2.w - 49: movh h0(c0.NE.x), h1 - -IPU0 ------ Simplified schedule: -------- -Pass | Unit | uOp | PC: Op ------+--------+------+------------------------- - 1 | SCT0/1 | mov | 0: TXLr h0.w, g[TEX1].zyxx, const.xxxx, TEX0; - | TEX | txl | 0: TXLr h0.w, g[TEX1].zyxx, const.xxxx, TEX0; - | SCB1 | add | 2: ADDh h2.z, h0.--w-, const.--x-; - | | | - 2 | SCT0/1 | mov | 4: TXLr h0.w, g[TEX1].xwxx, const.xxxx, TEX0; - | TEX | txl | 4: TXLr h0.w, g[TEX1].xwxx, const.xxxx, TEX0; - | SCB1 | add | 6: ADDh h0.z,-h2, h0.--w-; - | | | - 3 | SCT0/1 | mov | 7: TXLr h1.w, g[TEX1], const.xxxx, TEX0; - | TEX | txl | 7: TXLr h1.w, g[TEX1], const.xxxx, TEX0; - | SCB0 | add | 9: ADDh h0.x, h0.z---,-h1.w---; - | SCB1 | add | 10: ADDh h3.w, h0.---z, h1; - | | | - 4 | SCT0/1 | mov | 11: TXLr h2.w, g[TEX1].zwzz, const.xxxx, TEX0; - | TEX | txl | 11: TXLr h2.w, g[TEX1].zwzz, const.xxxx, TEX0; - | SCB0 | add | 14: ADDh h0.x, h2.w---, h0; - | SCB1 | add | 13: ADDh h0.z, h3.--w-,-h2.--w-; - | | | - 5 | SCT1 | mov | 15: NRMh h1.xz, h0; - | SRB | nrm | 15: NRMh h1.xz, h0; - | SCB0 | min | 16: MINh*8 h0.x, |h1|, |h1.z---|; - | SCB1 | max | 17: MAXh h4.w, h0, h1; - | | | - 6 | SCT0 | div | 18: DIVx h2.xy, h1.xz--, h0; - | SCT1 | mov | 19: MOVr r1.zw, g[TEX0].--xy; - | SCB0 | mad | 20: MADr r2.xz,-h1, const.z-w-, r1.z-w-; - | SCB1 | min | 22: MINh h5.w, h0, h1; - | | | - 7 | SCT0/1 | mov | 23: TXLr h0, r2.xzxx, const.xxxx, TEX0; - | TEX | txl | 23: TXLr h0, r2.xzxx, const.xxxx, TEX0; - | SCB0 | max | 27: MAXh h4.x, h2.z---, h2.w---; - | SCB1 | mad | 25: MADr r0.zw, h1.--xz, const, r1; - | | | - 8 | SCT0/1 | mov | 28: TXLr h1, r0.zwzz, const.xxxx, TEX0; - | TEX | txl | 28: TXLr h1, r0.zwzz, const.xxxx, TEX0; - | SCB0/1 | add | 30: ADDh/2 h1, h0, h1; - | | | - 9 | SCT0 | mad | 31: MADr r0.xy,-h2, const.xy--, r1.zw--; - | SCT1 | mov | 33: TXLr h0, r0, const.zzzz, TEX0; - | TEX | txl | 33: TXLr h0, r0, const.zzzz, TEX0; - | SCB1 | min | 35: MINh h4.z, h2, h2.--w-; - | | | - 10 | SCT0 | mad | 37: MADr r1.xy, h2, const.xy--, r1.zw--; - | SCT1 | mov | 39: TXLr h2, r1, const.zzzz, TEX0; - | TEX | txl | 39: TXLr h2, r1, const.zzzz, TEX0; - | SCB0/1 | add | 41: ADDh/2 h0, h0, h2; - | | | - 11 | SCT0 | min | 43: MINh h2.x, h5.w---, h4.z---; - | SCT1 | max | 42: MAXh h2.w, h4, h4.---x; - | SCB0/1 | add | 44: ADDh/2 h0, h0, h1; - | | | - 12 | SCT0 | set | 45: SLTh h2.x, h0.w---, h2; - | SCT1 | set | 46: SGTh h2.w, h0, h2; - | SCB0/1 | mul | 47: MOVh h0, h0; - | | | - 13 | SCT0 | mad | 48: ADDxc0_s rc, h2, h2.w---; - | SCB0/1 | mul | 49: MOVh h0(NE0.xxxx), h1; - -Pass SCT TEX SCB - 1: 0% 100% 25% - 2: 0% 100% 25% - 3: 0% 100% 50% - 4: 0% 100% 50% - 5: 0% 0% 50% - 6: 100% 0% 75% - 7: 0% 100% 75% - 8: 0% 100% 100% - 9: 0% 100% 25% - 10: 0% 100% 100% - 11: 50% 0% 100% - 12: 50% 0% 100% - 13: 25% 0% 100% - -MEAN: 17% 61% 67% - -Pass SCT0 SCT1 TEX SCB0 SCB1 - 1: 0% 0% 100% 0% 100% - 2: 0% 0% 100% 0% 100% - 3: 0% 0% 100% 100% 100% - 4: 0% 0% 100% 100% 100% - 5: 0% 0% 0% 100% 100% - 6: 100% 100% 0% 100% 100% - 7: 0% 0% 100% 100% 100% - 8: 0% 0% 100% 100% 100% - 9: 0% 0% 100% 0% 100% - 10: 0% 0% 100% 100% 100% - 11: 100% 100% 0% 100% 100% - 12: 100% 100% 0% 100% 100% - 13: 100% 0% 0% 100% 100% - -MEAN: 30% 23% 61% 76% 100% -Fragment Performance Setup: Driver RSX Compiler, GPU RSX, Flags 0x5 -Results 13 cycles, 3 r regs, 923,076,923 pixels/s -============================================================================*/ -#if (FXAA_PS3 == 1) && (FXAA_EARLY_EXIT == 0) -/*--------------------------------------------------------------------------*/ -#pragma regcount 7 -#pragma disablepc all -#pragma option O3 -#pragma option OutColorPrec=fp16 -#pragma texformat default RGBA8 -/*==========================================================================*/ -half4 FxaaPixelShader( - // See FXAA Quality FxaaPixelShader() source for docs on Inputs! - FxaaFloat2 pos, - FxaaFloat4 fxaaConsolePosPos, - FxaaTex tex, - FxaaTex fxaaConsole360TexExpBiasNegOne, - FxaaTex fxaaConsole360TexExpBiasNegTwo, - FxaaFloat2 fxaaQualityRcpFrame, - FxaaFloat4 fxaaConsoleRcpFrameOpt, - FxaaFloat4 fxaaConsoleRcpFrameOpt2, - FxaaFloat4 fxaaConsole360RcpFrameOpt2, - FxaaFloat fxaaQualitySubpix, - FxaaFloat fxaaQualityEdgeThreshold, - FxaaFloat fxaaQualityEdgeThresholdMin, - FxaaFloat fxaaConsoleEdgeSharpness, - FxaaFloat fxaaConsoleEdgeThreshold, - FxaaFloat fxaaConsoleEdgeThresholdMin, - FxaaFloat4 fxaaConsole360ConstDir -) { -/*--------------------------------------------------------------------------*/ -// (1) - half4 dir; - half4 lumaNe = h4tex2Dlod(tex, half4(fxaaConsolePosPos.zy, 0, 0)); - #if (FXAA_GREEN_AS_LUMA == 0) - lumaNe.w += half(1.0/512.0); - dir.x = -lumaNe.w; - dir.z = -lumaNe.w; - #else - lumaNe.y += half(1.0/512.0); - dir.x = -lumaNe.y; - dir.z = -lumaNe.y; - #endif -/*--------------------------------------------------------------------------*/ -// (2) - half4 lumaSw = h4tex2Dlod(tex, half4(fxaaConsolePosPos.xw, 0, 0)); - #if (FXAA_GREEN_AS_LUMA == 0) - dir.x += lumaSw.w; - dir.z += lumaSw.w; - #else - dir.x += lumaSw.y; - dir.z += lumaSw.y; - #endif -/*--------------------------------------------------------------------------*/ -// (3) - half4 lumaNw = h4tex2Dlod(tex, half4(fxaaConsolePosPos.xy, 0, 0)); - #if (FXAA_GREEN_AS_LUMA == 0) - dir.x -= lumaNw.w; - dir.z += lumaNw.w; - #else - dir.x -= lumaNw.y; - dir.z += lumaNw.y; - #endif -/*--------------------------------------------------------------------------*/ -// (4) - half4 lumaSe = h4tex2Dlod(tex, half4(fxaaConsolePosPos.zw, 0, 0)); - #if (FXAA_GREEN_AS_LUMA == 0) - dir.x += lumaSe.w; - dir.z -= lumaSe.w; - #else - dir.x += lumaSe.y; - dir.z -= lumaSe.y; - #endif -/*--------------------------------------------------------------------------*/ -// (5) - half4 dir1_pos; - dir1_pos.xy = normalize(dir.xyz).xz; - half dirAbsMinTimesC = min(abs(dir1_pos.x), abs(dir1_pos.y)) * half(FXAA_CONSOLE__PS3_EDGE_SHARPNESS); -/*--------------------------------------------------------------------------*/ -// (6) - half4 dir2_pos; - dir2_pos.xy = clamp(dir1_pos.xy / dirAbsMinTimesC, half(-2.0), half(2.0)); - dir1_pos.zw = pos.xy; - dir2_pos.zw = pos.xy; - half4 temp1N; - temp1N.xy = dir1_pos.zw - dir1_pos.xy * fxaaConsoleRcpFrameOpt.zw; -/*--------------------------------------------------------------------------*/ -// (7) - temp1N = h4tex2Dlod(tex, half4(temp1N.xy, 0.0, 0.0)); - half4 rgby1; - rgby1.xy = dir1_pos.zw + dir1_pos.xy * fxaaConsoleRcpFrameOpt.zw; -/*--------------------------------------------------------------------------*/ -// (8) - rgby1 = h4tex2Dlod(tex, half4(rgby1.xy, 0.0, 0.0)); - rgby1 = (temp1N + rgby1) * 0.5; -/*--------------------------------------------------------------------------*/ -// (9) - half4 temp2N; - temp2N.xy = dir2_pos.zw - dir2_pos.xy * fxaaConsoleRcpFrameOpt2.zw; - temp2N = h4tex2Dlod(tex, half4(temp2N.xy, 0.0, 0.0)); -/*--------------------------------------------------------------------------*/ -// (10) - half4 rgby2; - rgby2.xy = dir2_pos.zw + dir2_pos.xy * fxaaConsoleRcpFrameOpt2.zw; - rgby2 = h4tex2Dlod(tex, half4(rgby2.xy, 0.0, 0.0)); - rgby2 = (temp2N + rgby2) * 0.5; -/*--------------------------------------------------------------------------*/ -// (11) - // compilier moves these scalar ops up to other cycles - #if (FXAA_GREEN_AS_LUMA == 0) - half lumaMin = min(min(lumaNw.w, lumaSw.w), min(lumaNe.w, lumaSe.w)); - half lumaMax = max(max(lumaNw.w, lumaSw.w), max(lumaNe.w, lumaSe.w)); - #else - half lumaMin = min(min(lumaNw.y, lumaSw.y), min(lumaNe.y, lumaSe.y)); - half lumaMax = max(max(lumaNw.y, lumaSw.y), max(lumaNe.y, lumaSe.y)); - #endif - rgby2 = (rgby2 + rgby1) * 0.5; -/*--------------------------------------------------------------------------*/ -// (12) - #if (FXAA_GREEN_AS_LUMA == 0) - bool twoTapLt = rgby2.w < lumaMin; - bool twoTapGt = rgby2.w > lumaMax; - #else - bool twoTapLt = rgby2.y < lumaMin; - bool twoTapGt = rgby2.y > lumaMax; - #endif -/*--------------------------------------------------------------------------*/ -// (13) - if(twoTapLt || twoTapGt) rgby2 = rgby1; -/*--------------------------------------------------------------------------*/ - return rgby2; } -/*==========================================================================*/ -#endif - - - -/*============================================================================ - - FXAA3 CONSOLE - OPTIMIZED PS3 PIXEL SHADER (WITH EARLY EXIT) - -============================================================================== -The code mostly matches the assembly. -I have a feeling that 14 cycles is possible, but was not able to get there. -Might have to increase register count to get full performance. -Note this shader does not use perspective interpolation. - -Use the following cgc options, - - --fenable-bx2 --fastmath --fastprecision --nofloatbindings - -Use of FXAA_GREEN_AS_LUMA currently adds a cycle (16 clks). -Will look at fixing this for FXAA 3.12. ------------------------------------------------------------------------------- - NVSHADERPERF OUTPUT ------------------------------------------------------------------------------- -For reference and to aid in debug, output of NVShaderPerf should match this, - -Shader to schedule: - 0: texpkb h0.w(TRUE), v5.zyxx, #0 - 2: addh h2.y(TRUE), h0.w, constant(0.001953, 0.000000, 0.000000, 0.000000).x - 4: texpkb h1.w(TRUE), v5.xwxx, #0 - 6: addh h0.x(TRUE), h1.w, -h2.y - 7: texpkb h2.w(TRUE), v5.zwzz, #0 - 9: minh h4.w(TRUE), h2.y, h2 - 10: maxh h5.x(TRUE), h2.y, h2.w - 11: texpkb h0.w(TRUE), v5, #0 - 13: addh h3.w(TRUE), -h0, h0.x - 14: addh h0.x(TRUE), h0.w, h0 - 15: addh h0.z(TRUE), -h2.w, h0.x - 16: addh h0.x(TRUE), h2.w, h3.w - 17: minh h5.y(TRUE), h0.w, h1.w - 18: nrmh h2.xz(TRUE), h0_n - 19: minh_m8 h2.w(TRUE), |h2.x|, |h2.z| - 20: divx h4.xy(TRUE), h2_n.xzzw, h2_n.w - 21: movr r1.zw(TRUE), v4.xxxy - 22: maxh h2.w(TRUE), h0, h1 - 23: fenct TRUE - 24: madr r0.xy(TRUE), -h2.xzzw, constant(cConst5.x, cConst5.y, cConst5.z, cConst5.w).zwzz, r1.zwzz - 26: texpkb h0(TRUE), r0, #0 - 28: maxh h5.x(TRUE), h2.w, h5 - 29: minh h5.w(TRUE), h5.y, h4 - 30: madr r1.xy(TRUE), h2.xzzw, constant(cConst5.x, cConst5.y, cConst5.z, cConst5.w).zwzz, r1.zwzz - 32: texpkb h2(TRUE), r1, #0 - 34: addh_d2 h2(TRUE), h0, h2 - 35: texpkb h1(TRUE), v4, #0 - 37: maxh h5.y(TRUE), h5.x, h1.w - 38: minh h4.w(TRUE), h1, h5 - 39: madr r0.xy(TRUE), -h4, constant(cConst5.x, cConst5.y, cConst5.z, cConst5.w).xyxx, r1.zwzz - 41: texpkb h0(TRUE), r0, #0 - 43: addh_m8 h5.z(TRUE), h5.y, -h4.w - 44: madr r2.xy(TRUE), h4, constant(cConst5.x, cConst5.y, cConst5.z, cConst5.w).xyxx, r1.zwzz - 46: texpkb h3(TRUE), r2, #0 - 48: addh_d2 h0(TRUE), h0, h3 - 49: addh_d2 h3(TRUE), h0, h2 - 50: movh h0(TRUE), h3 - 51: slth h3.x(TRUE), h3.w, h5.w - 52: sgth h3.w(TRUE), h3, h5.x - 53: addx.c0 rc(TRUE), h3.x, h3 - 54: slth.c0 rc(TRUE), h5.z, h5 - 55: movh h0(c0.NE.w), h2 - 56: movh h0(c0.NE.x), h1 - -IPU0 ------ Simplified schedule: -------- -Pass | Unit | uOp | PC: Op ------+--------+------+------------------------- - 1 | SCT0/1 | mov | 0: TXLr h0.w, g[TEX1].zyxx, const.xxxx, TEX0; - | TEX | txl | 0: TXLr h0.w, g[TEX1].zyxx, const.xxxx, TEX0; - | SCB0 | add | 2: ADDh h2.y, h0.-w--, const.-x--; - | | | - 2 | SCT0/1 | mov | 4: TXLr h1.w, g[TEX1].xwxx, const.xxxx, TEX0; - | TEX | txl | 4: TXLr h1.w, g[TEX1].xwxx, const.xxxx, TEX0; - | SCB0 | add | 6: ADDh h0.x, h1.w---,-h2.y---; - | | | - 3 | SCT0/1 | mov | 7: TXLr h2.w, g[TEX1].zwzz, const.xxxx, TEX0; - | TEX | txl | 7: TXLr h2.w, g[TEX1].zwzz, const.xxxx, TEX0; - | SCB0 | max | 10: MAXh h5.x, h2.y---, h2.w---; - | SCB1 | min | 9: MINh h4.w, h2.---y, h2; - | | | - 4 | SCT0/1 | mov | 11: TXLr h0.w, g[TEX1], const.xxxx, TEX0; - | TEX | txl | 11: TXLr h0.w, g[TEX1], const.xxxx, TEX0; - | SCB0 | add | 14: ADDh h0.x, h0.w---, h0; - | SCB1 | add | 13: ADDh h3.w,-h0, h0.---x; - | | | - 5 | SCT0 | mad | 16: ADDh h0.x, h2.w---, h3.w---; - | SCT1 | mad | 15: ADDh h0.z,-h2.--w-, h0.--x-; - | SCB0 | min | 17: MINh h5.y, h0.-w--, h1.-w--; - | | | - 6 | SCT1 | mov | 18: NRMh h2.xz, h0; - | SRB | nrm | 18: NRMh h2.xz, h0; - | SCB1 | min | 19: MINh*8 h2.w, |h2.---x|, |h2.---z|; - | | | - 7 | SCT0 | div | 20: DIVx h4.xy, h2.xz--, h2.ww--; - | SCT1 | mov | 21: MOVr r1.zw, g[TEX0].--xy; - | SCB1 | max | 22: MAXh h2.w, h0, h1; - | | | - 8 | SCT0 | mad | 24: MADr r0.xy,-h2.xz--, const.zw--, r1.zw--; - | SCT1 | mov | 26: TXLr h0, r0, const.xxxx, TEX0; - | TEX | txl | 26: TXLr h0, r0, const.xxxx, TEX0; - | SCB0 | max | 28: MAXh h5.x, h2.w---, h5; - | SCB1 | min | 29: MINh h5.w, h5.---y, h4; - | | | - 9 | SCT0 | mad | 30: MADr r1.xy, h2.xz--, const.zw--, r1.zw--; - | SCT1 | mov | 32: TXLr h2, r1, const.xxxx, TEX0; - | TEX | txl | 32: TXLr h2, r1, const.xxxx, TEX0; - | SCB0/1 | add | 34: ADDh/2 h2, h0, h2; - | | | - 10 | SCT0/1 | mov | 35: TXLr h1, g[TEX0], const.xxxx, TEX0; - | TEX | txl | 35: TXLr h1, g[TEX0], const.xxxx, TEX0; - | SCB0 | max | 37: MAXh h5.y, h5.-x--, h1.-w--; - | SCB1 | min | 38: MINh h4.w, h1, h5; - | | | - 11 | SCT0 | mad | 39: MADr r0.xy,-h4, const.xy--, r1.zw--; - | SCT1 | mov | 41: TXLr h0, r0, const.zzzz, TEX0; - | TEX | txl | 41: TXLr h0, r0, const.zzzz, TEX0; - | SCB0 | mad | 44: MADr r2.xy, h4, const.xy--, r1.zw--; - | SCB1 | add | 43: ADDh*8 h5.z, h5.--y-,-h4.--w-; - | | | - 12 | SCT0/1 | mov | 46: TXLr h3, r2, const.xxxx, TEX0; - | TEX | txl | 46: TXLr h3, r2, const.xxxx, TEX0; - | SCB0/1 | add | 48: ADDh/2 h0, h0, h3; - | | | - 13 | SCT0/1 | mad | 49: ADDh/2 h3, h0, h2; - | SCB0/1 | mul | 50: MOVh h0, h3; - | | | - 14 | SCT0 | set | 51: SLTh h3.x, h3.w---, h5.w---; - | SCT1 | set | 52: SGTh h3.w, h3, h5.---x; - | SCB0 | set | 54: SLThc0 rc, h5.z---, h5; - | SCB1 | add | 53: ADDxc0_s rc, h3.---x, h3; - | | | - 15 | SCT0/1 | mul | 55: MOVh h0(NE0.wwww), h2; - | SCB0/1 | mul | 56: MOVh h0(NE0.xxxx), h1; - -Pass SCT TEX SCB - 1: 0% 100% 25% - 2: 0% 100% 25% - 3: 0% 100% 50% - 4: 0% 100% 50% - 5: 50% 0% 25% - 6: 0% 0% 25% - 7: 100% 0% 25% - 8: 0% 100% 50% - 9: 0% 100% 100% - 10: 0% 100% 50% - 11: 0% 100% 75% - 12: 0% 100% 100% - 13: 100% 0% 100% - 14: 50% 0% 50% - 15: 100% 0% 100% - -MEAN: 26% 60% 56% - -Pass SCT0 SCT1 TEX SCB0 SCB1 - 1: 0% 0% 100% 100% 0% - 2: 0% 0% 100% 100% 0% - 3: 0% 0% 100% 100% 100% - 4: 0% 0% 100% 100% 100% - 5: 100% 100% 0% 100% 0% - 6: 0% 0% 0% 0% 100% - 7: 100% 100% 0% 0% 100% - 8: 0% 0% 100% 100% 100% - 9: 0% 0% 100% 100% 100% - 10: 0% 0% 100% 100% 100% - 11: 0% 0% 100% 100% 100% - 12: 0% 0% 100% 100% 100% - 13: 100% 100% 0% 100% 100% - 14: 100% 100% 0% 100% 100% - 15: 100% 100% 0% 100% 100% - -MEAN: 33% 33% 60% 86% 80% -Fragment Performance Setup: Driver RSX Compiler, GPU RSX, Flags 0x5 -Results 15 cycles, 3 r regs, 800,000,000 pixels/s -============================================================================*/ -#if (FXAA_PS3 == 1) && (FXAA_EARLY_EXIT == 1) -/*--------------------------------------------------------------------------*/ -#pragma regcount 7 -#pragma disablepc all -#pragma option O2 -#pragma option OutColorPrec=fp16 -#pragma texformat default RGBA8 -/*==========================================================================*/ -half4 FxaaPixelShader( - // See FXAA Quality FxaaPixelShader() source for docs on Inputs! - FxaaFloat2 pos, - FxaaFloat4 fxaaConsolePosPos, - FxaaTex tex, - FxaaTex fxaaConsole360TexExpBiasNegOne, - FxaaTex fxaaConsole360TexExpBiasNegTwo, - FxaaFloat2 fxaaQualityRcpFrame, - FxaaFloat4 fxaaConsoleRcpFrameOpt, - FxaaFloat4 fxaaConsoleRcpFrameOpt2, - FxaaFloat4 fxaaConsole360RcpFrameOpt2, - FxaaFloat fxaaQualitySubpix, - FxaaFloat fxaaQualityEdgeThreshold, - FxaaFloat fxaaQualityEdgeThresholdMin, - FxaaFloat fxaaConsoleEdgeSharpness, - FxaaFloat fxaaConsoleEdgeThreshold, - FxaaFloat fxaaConsoleEdgeThresholdMin, - FxaaFloat4 fxaaConsole360ConstDir -) { -/*--------------------------------------------------------------------------*/ -// (1) - half4 rgbyNe = h4tex2Dlod(tex, half4(fxaaConsolePosPos.zy, 0, 0)); - #if (FXAA_GREEN_AS_LUMA == 0) - half lumaNe = rgbyNe.w + half(1.0/512.0); - #else - half lumaNe = rgbyNe.y + half(1.0/512.0); - #endif -/*--------------------------------------------------------------------------*/ -// (2) - half4 lumaSw = h4tex2Dlod(tex, half4(fxaaConsolePosPos.xw, 0, 0)); - #if (FXAA_GREEN_AS_LUMA == 0) - half lumaSwNegNe = lumaSw.w - lumaNe; - #else - half lumaSwNegNe = lumaSw.y - lumaNe; - #endif -/*--------------------------------------------------------------------------*/ -// (3) - half4 lumaNw = h4tex2Dlod(tex, half4(fxaaConsolePosPos.xy, 0, 0)); - #if (FXAA_GREEN_AS_LUMA == 0) - half lumaMaxNwSw = max(lumaNw.w, lumaSw.w); - half lumaMinNwSw = min(lumaNw.w, lumaSw.w); - #else - half lumaMaxNwSw = max(lumaNw.y, lumaSw.y); - half lumaMinNwSw = min(lumaNw.y, lumaSw.y); - #endif -/*--------------------------------------------------------------------------*/ -// (4) - half4 lumaSe = h4tex2Dlod(tex, half4(fxaaConsolePosPos.zw, 0, 0)); - #if (FXAA_GREEN_AS_LUMA == 0) - half dirZ = lumaNw.w + lumaSwNegNe; - half dirX = -lumaNw.w + lumaSwNegNe; - #else - half dirZ = lumaNw.y + lumaSwNegNe; - half dirX = -lumaNw.y + lumaSwNegNe; - #endif -/*--------------------------------------------------------------------------*/ -// (5) - half3 dir; - dir.y = 0.0; - #if (FXAA_GREEN_AS_LUMA == 0) - dir.x = lumaSe.w + dirX; - dir.z = -lumaSe.w + dirZ; - half lumaMinNeSe = min(lumaNe, lumaSe.w); - #else - dir.x = lumaSe.y + dirX; - dir.z = -lumaSe.y + dirZ; - half lumaMinNeSe = min(lumaNe, lumaSe.y); - #endif -/*--------------------------------------------------------------------------*/ -// (6) - half4 dir1_pos; - dir1_pos.xy = normalize(dir).xz; - half dirAbsMinTimes8 = min(abs(dir1_pos.x), abs(dir1_pos.y)) * half(FXAA_CONSOLE__PS3_EDGE_SHARPNESS); -/*--------------------------------------------------------------------------*/ -// (7) - half4 dir2_pos; - dir2_pos.xy = clamp(dir1_pos.xy / dirAbsMinTimes8, half(-2.0), half(2.0)); - dir1_pos.zw = pos.xy; - dir2_pos.zw = pos.xy; - #if (FXAA_GREEN_AS_LUMA == 0) - half lumaMaxNeSe = max(lumaNe, lumaSe.w); - #else - half lumaMaxNeSe = max(lumaNe, lumaSe.y); - #endif -/*--------------------------------------------------------------------------*/ -// (8) - half4 temp1N; - temp1N.xy = dir1_pos.zw - dir1_pos.xy * fxaaConsoleRcpFrameOpt.zw; - temp1N = h4tex2Dlod(tex, half4(temp1N.xy, 0.0, 0.0)); - half lumaMax = max(lumaMaxNwSw, lumaMaxNeSe); - half lumaMin = min(lumaMinNwSw, lumaMinNeSe); -/*--------------------------------------------------------------------------*/ -// (9) - half4 rgby1; - rgby1.xy = dir1_pos.zw + dir1_pos.xy * fxaaConsoleRcpFrameOpt.zw; - rgby1 = h4tex2Dlod(tex, half4(rgby1.xy, 0.0, 0.0)); - rgby1 = (temp1N + rgby1) * 0.5; -/*--------------------------------------------------------------------------*/ -// (10) - half4 rgbyM = h4tex2Dlod(tex, half4(pos.xy, 0.0, 0.0)); - #if (FXAA_GREEN_AS_LUMA == 0) - half lumaMaxM = max(lumaMax, rgbyM.w); - half lumaMinM = min(lumaMin, rgbyM.w); - #else - half lumaMaxM = max(lumaMax, rgbyM.y); - half lumaMinM = min(lumaMin, rgbyM.y); - #endif -/*--------------------------------------------------------------------------*/ -// (11) - half4 temp2N; - temp2N.xy = dir2_pos.zw - dir2_pos.xy * fxaaConsoleRcpFrameOpt2.zw; - temp2N = h4tex2Dlod(tex, half4(temp2N.xy, 0.0, 0.0)); - half4 rgby2; - rgby2.xy = dir2_pos.zw + dir2_pos.xy * fxaaConsoleRcpFrameOpt2.zw; - half lumaRangeM = (lumaMaxM - lumaMinM) / FXAA_CONSOLE__PS3_EDGE_THRESHOLD; -/*--------------------------------------------------------------------------*/ -// (12) - rgby2 = h4tex2Dlod(tex, half4(rgby2.xy, 0.0, 0.0)); - rgby2 = (temp2N + rgby2) * 0.5; -/*--------------------------------------------------------------------------*/ -// (13) - rgby2 = (rgby2 + rgby1) * 0.5; -/*--------------------------------------------------------------------------*/ -// (14) - #if (FXAA_GREEN_AS_LUMA == 0) - bool twoTapLt = rgby2.w < lumaMin; - bool twoTapGt = rgby2.w > lumaMax; - #else - bool twoTapLt = rgby2.y < lumaMin; - bool twoTapGt = rgby2.y > lumaMax; - #endif - bool earlyExit = lumaRangeM < lumaMax; - bool twoTap = twoTapLt || twoTapGt; -/*--------------------------------------------------------------------------*/ -// (15) - if(twoTap) rgby2 = rgby1; - if(earlyExit) rgby2 = rgbyM; -/*--------------------------------------------------------------------------*/ - return rgby2; } -/*==========================================================================*/ -#endif diff --git a/examples/board_reprap/gfx/brass.png b/examples/board_reprap/gfx/brass.png deleted file mode 100644 index 56e73c3..0000000 Binary files a/examples/board_reprap/gfx/brass.png and /dev/null differ diff --git a/examples/board_reprap/gfx/buserror-nozzle-model.stl b/examples/board_reprap/gfx/buserror-nozzle-model.stl deleted file mode 100644 index c99e0a3..0000000 --- a/examples/board_reprap/gfx/buserror-nozzle-model.stl +++ /dev/null @@ -1,4202 +0,0 @@ -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 diff --git a/examples/board_reprap/gfx/hb.jpg b/examples/board_reprap/gfx/hb.jpg deleted file mode 100644 index 6065a30..0000000 Binary files a/examples/board_reprap/gfx/hb.jpg and /dev/null differ diff --git a/examples/board_reprap/gfx/hb.png b/examples/board_reprap/gfx/hb.png deleted file mode 100644 index 3ca05c7..0000000 Binary files a/examples/board_reprap/gfx/hb.png and /dev/null differ diff --git a/examples/board_reprap/gfx/postproc.fs b/examples/board_reprap/gfx/postproc.fs deleted file mode 100644 index f74ab7c..0000000 --- a/examples/board_reprap/gfx/postproc.fs +++ /dev/null @@ -1,92 +0,0 @@ - -#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; -} diff --git a/examples/board_reprap/gfx/postproc.vs b/examples/board_reprap/gfx/postproc.vs deleted file mode 100644 index fb69cfd..0000000 --- a/examples/board_reprap/gfx/postproc.vs +++ /dev/null @@ -1,16 +0,0 @@ - -//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)); -} diff --git a/examples/board_reprap/gfx/scene.fs b/examples/board_reprap/gfx/scene.fs deleted file mode 100644 index 5ff1baa..0000000 --- a/examples/board_reprap/gfx/scene.fs +++ /dev/null @@ -1,82 +0,0 @@ -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); -} diff --git a/examples/board_reprap/gfx/scene.vs b/examples/board_reprap/gfx/scene.vs deleted file mode 100644 index f11edb2..0000000 --- a/examples/board_reprap/gfx/scene.vs +++ /dev/null @@ -1,15 +0,0 @@ -// 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; -} - diff --git a/examples/board_reprap/marlin/Configuration.h b/examples/board_reprap/marlin/Configuration.h deleted file mode 100644 index a84c46e..0000000 --- a/examples/board_reprap/marlin/Configuration.h +++ /dev/null @@ -1,249 +0,0 @@ -#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 diff --git a/examples/board_reprap/marlin/Configuration_adv.h b/examples/board_reprap/marlin/Configuration_adv.h deleted file mode 100644 index 8697194..0000000 --- a/examples/board_reprap/marlin/Configuration_adv.h +++ /dev/null @@ -1,242 +0,0 @@ -#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 T F -// 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 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 diff --git a/examples/board_reprap/marlin/Marlin.hex b/examples/board_reprap/marlin/Marlin.hex deleted file mode 100644 index 4eb3b1c..0000000 --- a/examples/board_reprap/marlin/Marlin.hex +++ /dev/null @@ -1,2759 +0,0 @@ -:10000000FCC700000C941A080C941A080C941A08E7 -:100010000C941A080C941A080C941A080C941A08D8 -:100020000C941A080C941A080C941A080C941A08C8 -:100030000C941A080C947F39FDC70000FBC7000020 -:10004000F9C700000C949A490C943321F3C70000BF -:100050000C94E122EFC70000EDC70000EBC70000E1 -:10006000E9C70000E7C70000E5C70000E3C70000DC -:10007000084AD73B3BCE016E84BCBFFDC12F3D6C0F -:1000800074319ABD56833DDA3D00C77F11BED9E475 -:10009000BB4C3E916BAAAABE000000803F05A84C55 -:1000A000CDB2D44EB93836A9020C50B99186880821 -:1000B0003CA6AAAA2ABE000000803F6563686F3A8A -:1000C00000737461727400506F7765725570002010 -:1000D00045787465726E616C20526573657400209A -:1000E00042726F776E206F7574205265736574006D -:1000F000205761746368646F67205265736574008C -:1001000020536F6674776172652052657365740061 -:100110004D61726C696E3A2000312E302E302052C3 -:10012000433200204C6173742055706461746564BF -:100130003A2000323031322D30352D303200207CE3 -:1001400020417574686F723A20006572696B0020F7 -:1001500046726565204D656D6F72793A20002020EA -:10016000506C616E6E657242756666657242797436 -:1001700065733A20004572726F723A004C696E6581 -:10018000204E756D626572206973206E6F74204C0D -:10019000617374204C696E65204E756D6265722BBB -:1001A000312C204C617374204C696E653A00636891 -:1001B00065636B73756D206D69736D617463682C15 -:1001C000204C617374204C696E653A004E6F204379 -:1001D0006865636B73756D2077697468206C696EF0 -:1001E00065206E756D6265722C204C617374204CB5 -:1001F000696E653A004E6F204C696E65204E756DD4 -:10020000626572207769746820636865636B7375D3 -:100210006D2C204C617374204C696E653A006F6BD5 -:10022000005072696E7465722073746F70706564CB -:100230002064657520746F206572726F72732E2052 -:1002400046697820746865206572726F7220616EED -:100250006420757365204D39393920746F207265BB -:100260007374617274212E202854656D70657261FB -:10027000747572652069732072657365742E2053DE -:100280006574206974206265666F7265207265739B -:1002900074617274696E6729006F6B20543A002094 -:1002A0002F0020423A00202F0020403A00543A000C -:1002B00020453A0020573A00543A0020453A0020A1 -:1002C000423A004649524D574152455F4E414D45D5 -:1002D0003A4D61726C696E2056313B2053707269E1 -:1002E0006E7465722F6772626C206D6173687570D1 -:1002F00020666F722067656E36204649524D574121 -:1003000052455F55524C3A687474703A2F2F777784 -:10031000772E6D656E64656C2D70617274732E63DB -:100320006F6D2050524F544F434F4C5F56455253C0 -:10033000494F4E3A312E30204D414348494E455F9A -:10034000545950453A4D656E64656C204558545279 -:10035000554445525F434F554E543A310A00583A7E -:1003600000593A005A3A00453A0020436F756E74BE -:1003700020583A00593A005A3A00785F6D696E3A4F -:1003800000795F6D696E3A007A5F6D696E3A00556B -:100390006E6B6E6F776E20636F6D6D616E643A2267 -:1003A000002200526573656E643A006F6B005072F4 -:1003B000696E7465722068616C7465642E206B6967 -:1003C0006C6C28292063616C6C65642021210050CD -:1003D00072696E7465722073746F707065642064E6 -:1003E000657520746F206572726F72732E20466976 -:1003F0007820746865206572726F7220616E642067 -:10040000757365204D39393920746F2072657374A6 -:10041000617274212E202854656D70657261747547 -:1004200072652069732072657365742E205365743C -:10043000206974206265666F7265207265737461ED -:100440007274696E6729000000000102000000005C -:100450000000000403070600000000000000000088 -:10046000000000000000000102040810204080018C -:1004700002040810204080010204081020408080FF -:1004800040201008040201020202020202020204D9 -:100490000404040404040403030303030303030127 -:1004A00001010101010101002225282B002124273F -:1004B0002A6563686F3A0020636F6C642065787406 -:1004C000727573696F6E2070726576656E7465649F -:1004D0000020746F6F206C6F6E6720657874727582 -:1004E00073696F6E2070726576656E746564006501 -:1004F00063686F3A00656E6473746F707320686927 -:10050000743A200020583A0020593A00205A3A0004 -:1005100024F427D3FD204D0FB0119A05160CE902E3 -:100520002D09C801650733013206DE005405A70016 -:10053000AD0483002A046900C10356006B03480020 -:1005400023033D00E6023500B1022D00840228009D -:100550005C0223003902200019021C00FD01190071 -:10056000E4011700CD011500B8011300A501110029 -:100570009401100084010F0075010E0067010D0049 -:100580005A010C004E010B0043010A0039010A0018 -:100590002F010900260109001D01080015010700AF -:1005A0000E01080006010700FF000600F900060022 -:1005B000F3000600ED000600E7000500E20005007C -:1005C000DD000500D8000500D3000400CF000500C1 -:1005D000CA000400C6000400C2000400BE000300FC -:1005E000BB000400B7000300B4000300B100040026 -:1005F000AD000300AA000300A7000200A50003004D -:10060000A20003009F0002009D0003009A00020068 -:100610009800030095000200930002009100020080 -:100620008F0002008D0002008B0002008900020092 -:1006300087000200850002008300020081000100A3 -:10064000800002007E0002007C0001007B000200AE -:1006500079000100780002007600010075000100B9 -:1006600074000200720001007100010070000200BD -:100670006E0001006D0001006C0001006B000200C3 -:1006800069000100680001006700010066000100C8 -:1006900065000100640001006300010062000100C8 -:1006A00061000100600001005F0001005E000100C8 -:1006B0005D0001005C0001005B0000005B000100C8 -:1006C0005A000100590001005800010057000000C5 -:1006D00057000100560001005500010054000000C1 -:1006E00054000100530001005200010051000000BD -:1006F00051000100500001004F0000004F000100B8 -:100700004E0000004E0001004D0001004C000000B2 -:100710004C0001004B0000004B0001004A000100AA -:1007200049000000490001004800000048000100A5 -:10073000470000004700010046000000460001009D -:100740004500000045000100440000004400010095 -:10075000430000004300010042000000420001008D -:100760004100000041000000410001004000000085 -:10077000400001003F0000003F0001003E0000007B -:100780003E0000003E0001003D0000003D00010071 -:100790003C0000003C0000003C0001003B00000069 -:1007A0003B0000003B0001003A0000003A0000005E -:1007B0003A00010039000000390000003900010052 -:1007C0003800000038000000380001003700000049 -:1007D000370000003700010036000000360000003E -:1007E0003600010035000000350000003500000033 -:1007F0003500010034000000340000003400010026 -:10080000330000003300000033000000330001001B -:10081000320000003200000032000000320001000F -:100820003100000031000000310000003100010003 -:1008300030000000300000003000000030000100F7 -:100840002F0000002F0000002F0000002F000100EB -:100850002E0000002E0000002E0000002E000000E0 -:100860002E0001002D0000002D0000002D000000D2 -:100870002D0001002C0000002C0000002C000000C6 -:100880002C0000002C0001002B0000002B000000B9 -:100890002B0000002B0000002B0001002A000000AC -:1008A0002A0000002A0000002A0000002A000000A0 -:1008B0002A00010029000000290000002900000092 -:1008C0002900000029000000290001002800000084 -:1008D0002800000028000000280000002800010077 -:1008E000270000002700000027000000270000006C -:1008F000270000002700000027000100260000005C -:10090000260000002600000026000000260000004F -:1009100024F4B12873CB111D62AECC159698F41057 -:10092000A287900D127A190BF96E4009B965D307A9 -:10093000E65DB5063157D005615116054B4C7D0477 -:10094000CE47FD03D14392033F403603093DE90200 -:10095000203AA4027C376A0212353602DC320802E1 -:10096000D430E101F32EBD01362D9E01982B81017B -:10097000172A6701B028500160273B01252628016E -:10098000FD241601E7230701E022F800E821EB002F -:10099000FD20DE001F20D3004C1FC800841EBF00B6 -:1009A000C51DB500101DAD00631CA500BE1B9E003B -:1009B000201B9700891A9100F8198A006E1985008A -:1009C000E9187F006A187B00EF177600791771002D -:1009D00008176D009B166A0031166500CC15620081 -:1009E0006A155F000B155B00B014580058145600D0 -:1009F00002145200B013500060134E0012134B004B -:100A0000C71249007E12460038124500F311430018 -:100A1000B011400070113F0031113D00F4103C0056 -:100A2000B8103A007E103800461037000F1035001D -:100A3000DA0F3400A60F3300730F3100420F30007D -:100A4000120F3000E20E2D00B50E2D00880E2C0086 -:100A50005C0E2B00310E2A00070E2800DF0D280047 -:100A6000B70D2700900D26006A0D2600440D2400C6 -:100A7000200D2400FC0C2300D90C2200B70C22000E -:100A8000950C2100740C2000540C1F00350C1F0025 -:100A9000160C1F00F70B1E00D90B1D00BC0B1C0011 -:100AA000A00B1C00840B1C00680B1B004D0B1B00D3 -:100AB000320B1A00180B1900FF0A1900E60A190078 -:100AC000CD0A1800B50A18009D0A1800850A1700FB -:100AD0006E0A1600580A1600420A16002C0A160062 -:100AE000160A1500010A1500EC091400D8091400B3 -:100AF000C4091400B00914009C09130089091300EB -:100B00007609130063091200510912003F0912000F -:100B10002D0911001C0912000A091100F908100022 -:100B2000E9081100D8081000C8081000B808100023 -:100B3000A808100098080F0089080F007A080F0015 -:100B40006B080F005C080F004D080E003F080E00F8 -:100B500031080E0023080E0015080E0007080D00CE -:100B6000FA070D00ED070D00E0070D00D3070D009B -:100B7000C6070D00B9070C00AD070C00A1070D005A -:100B800094070B0089070C007D070C0071070C000F -:100B900065070B005A070B004F070B0044070B00BB -:100BA00039070B002E070B0023070B0018070A005C -:100BB0000E070B0003070A00F9060A00EF060A00F9 -:100BC000E5060A00DB060A00D1060900C8060A008D -:100BD000BE060900B5060A00AB060900A206090018 -:100BE0009906090090060900870609007E0609009B -:100BF000750609006C060800640609005B0608001B -:100C0000530609004A060800420608003A06080092 -:100C1000320608002A060800220608001A06080004 -:100C2000120607000B06080003060800FB05070074 -:100C3000F4050800EC050700E5050700DE050700E0 -:100C4000D7050700D0050700C9050700C205070042 -:100C5000BB050700B4050700AD050700A6050600A3 -:100C6000A005070099050700920506008C050600FF -:100C7000860507007F050600790506007305070055 -:100C80006C05060066050600600506005A050600AC -:100C9000540506004E0506004805060042050500FD -:100CA0003D05060037050600310505002C05060048 -:100CB00026050500210506001B0505001605060092 -:100CC000100505000B0505000605060000050500DA -:100CD000FB040500F6040500F1040500EC04050022 -:100CE000E7040500E2040500DD040500D804050062 -:100CF000D3040500CE040500C9040500C4040500A2 -:100D0000BF040400BB040500B6040500B1040500DF -:100D100020626961733A200020643A2000206D69E6 -:100D20006E3A2000206D61783A2000204B753A2001 -:100D3000002054753A200020436C61736963205091 -:100D400049442000204B703A2000204B693A200093 -:100D5000204B643A2000504944204175746F7475EB -:100D60006E65206661696C6564212054656D7065EF -:100D700072617475726520746F2068696768006FAE -:100D80006B20543A0020403A005049442041757489 -:100D90006F74756E65206661696C65642120746985 -:100DA0006D656F757400504944204175746F74759A -:100DB0006E652066696E6973686564202120506CD9 -:100DC00061636520746865204B702C204B6920613D -:100DD0006E64204B6420636F6E7374616E74732055 -:100DE000696E2074686520636F6E666967757261ED -:100DF00074696F6E2E68004572726F723A00202D12 -:100E000020496E76616C69642065787472756465DA -:100E100072206E756D62657221001000C90220019A -:100E20003C0130020A014003EF005004DD00600580 -:100E3000D0007006C5008007BC009008B500A0096E -:100E4000AE00B00AA900C00BA300D00C9F00E00DBB -:100E50009A00F00E96000010930010118F002012DF -:100E60008C003013880040148500501582006016F5 -:100E7000800070177D0080187A0090197800A01A01 -:100E80007500B01B7300C01C7000D01D6E00E01E0A -:100E90006C00F01F6A00002167001022650020230B -:100EA00063003024610040255F0050265C0060270D -:100EB0005A007028580080295600902A5400A02B10 -:100EC0005100B02C4F00C02D4D00D02E4B00E02F14 -:100ED0004800F03046000032430010334000203418 -:100EE0003D0030353A004036370050373400603826 -:100EF000300070392C00803A2800903B2200A03C42 -:100F00001C00B03D1400C03E0800D03F0000202D62 -:100F100020496E76616C69642065787472756465C9 -:100F200072206E756D6265722021003A20457874DA -:100F30007275646572207377697463686564206F85 -:100F400066662E204D415854454D50207472696795 -:100F500067657265642021003A2045787472756473 -:100F60006572207377697463686564206F66662EA6 -:100F7000204D494E54454D50207472696767657223 -:100F8000656420210054656D7065726174757265C9 -:100F90002068656174656420626564207377697494 -:100FA00063686564206F66662E204D415854454D38 -:100FB0005020747269676765726564202121004959 -:100FC0004E46494E4954594E414E000020410000C2 -:100FD000C84200401C4620BCBE4CCA1B0E5AAEC5BF -:100FE0009D74CDCCCC3D0AD7233C17B7D13877CCF4 -:100FF0002B329595E6241FB14F0A11241FBECFEF67 -:10100000D0E1DEBFCDBF12E0A0E0B1E0E8EDFAEA4A -:1010100002C005900D92A038B107D9F71AE0A0E8F8 -:10102000B2E001C01D92A13FB107E1F70E942E215D -:101030000C946A550C940000AF92BF92CF92DF924D -:10104000EF92FF920F931F93CF93DF93CDB7DEB74D -:10105000E0970FB6F894DEBF0FBECDBF80E1E7E3A7 -:10106000F1E0DE01919601900D928A95E1F780E121 -:10107000E7E4F1E0DE01519601900D928A95E1F7E7 -:1010800080E1E7E5F1E0DE01119601900D928A958D -:10109000E1F76E0181E2C80ED11C85E2E82E8AE0FC -:1010A000F82E8E010F5E1F4F65E37AE0AE014F5FB1 -:1010B0005F4F95E1A92E9AE0B92E20E030E0F601CD -:1010C00081919191A191B1916F01F70181939193D8 -:1010D000A193B1937F01F80181919191A191B19177 -:1010E0008F01FB0181939193A193B193BF01FA0109 -:1010F00081919191A191B191AF01F501819391936A -:10110000A193B1935F012F5F3F4F24303105B9F6B2 -:1011100080E090E0AAEFB3E480930D0A90930E0A6A -:10112000A0930F0AB093100A80E090E8ABE3B5E417 -:101130008093090A90930A0AA0930B0AB0930C0AB1 -:101140001092110A1092120A1092130A1092140AA5 -:1011500080E29EE4A0E0B0E08093450A9093460AC6 -:10116000A093470AB093480A1092F9091092FA091D -:101170001092FB091092FC0980E090E0A0EAB1E433 -:101180008093050A9093060AA093070AB093080A71 -:101190008DEC9CECACECBEE38093010A9093020AC8 -:1011A000A093030AB093040A80E090E0A0EAB0E4C0 -:1011B0008093FD099093FE09A093FF09B093000A64 -:1011C000EBEBF0E007C09091C00095FFFCCF80935F -:1011D000C600319684918111F6CFE7E6F1E006C0B2 -:1011E0009091C00095FFFCCF8093C6008191811142 -:1011F000F7CF8091C00085FFFCCF8AE08093C600C6 -:10120000E0960FB6F894DEBF0FBECDBFDF91CF9151 -:101210001F910F91FF90EF90DF90CF90BF90AF9014 -:101220000895CF93DF9300D0CDB7DEB78091EB0A5E -:101230009091EC0A9E012F5F3F4F009719F4215FB8 -:101240003A4002C0281B390B3A83298389819A814D -:101250000F900F90DF91CF910895CF92DF92EF9290 -:10126000FF920F931F93CF93DF9300D000D0CDB7A1 -:10127000DEB740E052EC61E070E081E894E00E946B -:101280001623E1ECF0E007C09091C00095FFFCCF81 -:101290008093C600319684918111F6CF8091C00071 -:1012A00085FFFCCF8AE08093C6008BEB90E0FC01C9 -:1012B00007C03091C00035FFFCCF2093C6003196A7 -:1012C00024912111F6CF24B720FF14C0E7ECF0E001 -:1012D00007C04091C00045FFFCCF3093C600319657 -:1012E00034913111F6CF3091C00035FFFCCF3AE098 -:1012F0003093C60021FF14C0EFECF0E007C040912E -:10130000C00045FFFCCF3093C600319634913111B7 -:10131000F6CF3091C00035FFFCCF3AE03093C600E5 -:1013200022FF14C0EFEDF0E007C04091C00045FF80 -:10133000FCCF3093C600319634913111F6CF309105 -:10134000C00035FFFCCF3AE03093C60023FF14C045 -:10135000E0EFF0E007C04091C00045FFFCCF3093C4 -:10136000C600319634913111F6CF3091C00035FF6F -:10137000FCCF3AE03093C60025FF14C0E0E0F1E076 -:1013800007C03091C00035FFFCCF2093C6003196D6 -:1013900024912111F6CF2091C00025FFFCCF2AE037 -:1013A0002093C60014BEE0E1F1E007C03091C00018 -:1013B00035FFFCCF2093C600319624912111F6CF42 -:1013C000E9E1F1E007C03091C00035FFFCCF209388 -:1013D000C600319624912111F6CF2091C00025FF3F -:1013E000FCCF2AE02093C600FC012491EBEBF0E057 -:1013F00008C03091C00035FFFCCF2093C600319665 -:1014000024912111F6CFE3E2F1E007C03091C00052 -:1014100035FFFCCF2093C600319624912111F6CFE1 -:10142000E3E3F1E007C03091C00035FFFCCF20932B -:10143000C600319624912111F6CFEEE3F1E007C00A -:101440003091C00035FFFCCF2093C6003196249127 -:101450002111F6CFEAE4F1E007C03091C00035FF7A -:10146000FCCF2093C600319624912111F6CF209114 -:10147000C00025FFFCCF2AE02093C600FC01849128 -:10148000EBEBF0E008C09091C00095FFFCCF80939B -:10149000C600319684918111F6CFEFE4F1E007C0E8 -:1014A0009091C00095FFFCCF8093C6003196849147 -:1014B0008111F6CFB6DE4AE050E0BC0181E894E04D -:1014C0000E943C24EEE5F1E007C09091C00095FF3A -:1014D000FCCF8093C600319684918111F6CF4AE00B -:1014E00050E060ED74E081E894E00E943C2480913B -:1014F000C00085FFFCCF8AE08093C60010922A04CA -:1015000010922B0410922C0410922D0480E094DD94 -:1015100025E1C22E2AE0D22E35E2E32E3AE0F32E68 -:1015200009EE19E0F60161917191819191916F013C -:10153000F70121913191419151917F0129833A83A2 -:101540004B835C830E94744C29813A814B815C817E -:101550000E94A94E0E94484CF801619371938193B7 -:1015600091938F01F5E2CF16FAE0DF06D9F60E94DB -:101570005E440E94FD2C0F900F900F900F90DF9112 -:10158000CF911F910F91FF90EF90DF90CF900C942F -:10159000773F809134049091350460E070E00196CB -:1015A0000C94FE4F80913404909135044AE050E051 -:1015B00060E070E001960C944A5140912E045091E5 -:1015C0002F0490E6949F9001959F300D1124682F71 -:1015D00070E0C90186559D4F0E947C52909335045E -:1015E0008093340421E0892B09F420E0822F0895B0 -:1015F0000E94782160933E0470933F0480934004DE -:1016000090934104EBEAF3E007C09091C00095FF8E -:10161000FCCF8093C600319684918111F6CF8091E2 -:10162000C00085FFFCCF8AE08093C600089581E862 -:1016300094E00E945B23E3EAF3E007C09091C000CE -:1016400095FFFCCF8093C600319684918111F6CF2F -:1016500040913A0450913B0460913C0470913D04E8 -:101660004F5F5F4F6F4F7F4F2AE030E081E894E09B -:101670000E9406248091C00085FFFCCF8AE0809301 -:10168000C600B6CF4F925F927F928F929F92AF9299 -:10169000BF92CF92DF92EF92FF920F931F93CF935F -:1016A000DF9340E6742E54E0452E512CE1E2F2E047 -:1016B00084906AE0B62EEEE1F2E0A490992493942F -:1016C0008091020590910305209104053091050554 -:1016D000821B930B8F779927892B09F0FEC111C2CA -:1016E0008D3051F08A3321F490913104992321F007 -:1016F0002F3531050CF4D4C12115310519F41092A0 -:101700003104FFC18091A8029091A902789EE00166 -:10171000799ED00D1124FE01E20FF31FE655FD4F17 -:101720001082209131042111B6C110923104FC01C4 -:10173000E65DFB4F10828E0106551D4F6EE470E092 -:10174000C8010E947C52009709F403C190933504AC -:1017500080933404801B910B8C0F9D1F4AE050E056 -:1017600060E070E085559D4F0E944A5160933604B9 -:10177000709337048093380490933904C0903A04EE -:10178000D0903B04E0903C04F0903D04970186012A -:101790000F5F1F4F2F4F3F4F60177107820793074F -:1017A000C1F12091A8023091A902729EC001739EDE -:1017B000900D11246FE771E086559D4F0E9487526E -:1017C000892B39F5E5E7F1E007C09091C00095FF5E -:1017D000FCCF8093C600319684918111F6CFECE75F -:1017E000F1E007C09091C00095FFFCCF8093C60048 -:1017F000319684918111F6CF2AE030E0B701A6013D -:1018000081E894E00E9406248091C00085FFFCCF0F -:101810008AC08091A8029091A902789E8001799E49 -:10182000100D1124E801C655DD4F6AE270E0CE01CB -:101830000E947C52009721F450C0F3262F5F02C013 -:1018400020E0F12CF801E20FF11DE655FD4F30814B -:101850003A3299F790933504809334048C1B9D0B96 -:10186000800F911F60E070E085559D4F0E94FE4FF4 -:101870000E94434C2F2D30E02617370709F458C03B -:10188000E5E7F1E007C09091C00095FFFCCF8093A1 -:10189000C600319684918111F6CFEEEAF1E007C0DF -:1018A0009091C00095FFFCCF8093C6003196849143 -:1018B0008111F6CF40913A0450913B0460913C0471 -:1018C00070913D042AE030E081E894E00E94062413 -:1018D0008091C00085FFFCCF26C0E5E7F1E007C09E -:1018E0009091C00095FFFCCF8093C6003196849103 -:1018F0008111F6CFECECF1E007C09091C00095FFAC -:10190000FCCF8093C600319684918111F6CF2AE0F6 -:1019100030E0B701A60181E894E00E94062480919E -:10192000C00085FFFCCF8AE08093C60080DE47C000 -:101930008091360490913704A0913804B091390415 -:1019400080933A0490933B04A0933C04B0933D04ED -:101950003BC06AE270E0C8010E947C52892BA1F171 -:10196000E5E7F1E007C09091C00095FFFCCF8093C0 -:10197000C600319684918111F6CFE5EFF1E007C002 -:101980009091C00095FFFCCF8093C6003196849162 -:101990008111F6CF40913A0450913B0460913C0490 -:1019A00070913D042AE030E081E894E00E94062432 -:1019B0008091C00085FFFCCF8AE08093C600109222 -:1019C0003304109232049DC08091A8029091A90224 -:1019D000789EE001799ED00D11248E0106551D4F91 -:1019E00067E470E0C8010E947C52009709F43EC091 -:1019F0009093350480933404801B910B8C0F9D1FB2 -:101A000060E070E085559D4F0E94FE4F0E94434C60 -:101A10006430710558F580918002811113C08A2DC0 -:101A2000EEE1F2E008C09091C00095FFFCCF8093FA -:101A3000C600319684918111F6CF8091C00085FF58 -:101A4000FCCF12C0882DE1E2F2E008C09091C00006 -:101A500095FFFCCF8093C600319684918111F6CF1B -:101A60008091C00085FFFCCFB092C6008091A80293 -:101A70009091A9020196B2010E948E4F9093A90203 -:101A80008093A8028091A6029091A702019690935C -:101A9000A7028093A602109233041092320410CE53 -:101AA0008B3311F49092310490913104911108CE4E -:101AB0004091A8025091A902749ED001759EB00D6C -:101AC0001124A20FB31FA655BD4F8C932F5F3F4F1C -:101AD0003093330420933204F3CD8091A602909189 -:101AE000A702049774F481E894E00E943F23809356 -:101AF000300420913204309133048A3009F0F0CD63 -:101B0000FBCDDF91CF911F910F91FF90EF90DF9070 -:101B1000CF90BF90AF909F908F907F905F904F90AD -:101B200008958F929F92AF92BF92CF92DF92EF92E1 -:101B3000FF920F931F93CF93DF9378E1A72E72E06C -:101B4000B72E0FE812E0C6E4D4E0E2EA8E2EE2E01F -:101B50009E2EF50181915F0130DD882311F119DDA1 -:101B60006B017C01F4018081811103C060915604F6 -:101B700001C061E070E080E090E00E94764CF801E6 -:101B800020813181428153810E94A94E9B01AC0189 -:101B9000C701B6010E94FB4A688379838A839B83CD -:101BA00009C0F80180819181A281B38188839983E2 -:101BB000AA83BB830C5F1F4F2496FFEF8F1A9F0AE7 -:101BC0008CE1A81682E0B80621F686E4F6DC8823CC -:101BD000D1F0DFDC6B017C016093680470936904D1 -:101BE00080936A0490936B0420E030E0A9010E9486 -:101BF000D74D181644F4C0921401D0921501E0920A -:101C00001601F0921701DF91CF911F910F91FF9074 -:101C1000EF90DF90CF90BF90AF909F908F900895FE -:101C200080DF89E4CADC882351F0B3DC60936C0464 -:101C300070936D0480936E0490936F0408C01092AB -:101C40006C0410926D0410926E0410926F048AE47A -:101C5000B4DC882351F09DDC6093700470937104B0 -:101C600080937204909373040895109270041092FC -:101C7000710410927204109273040895CF92DF924F -:101C8000EF92FF920F931F9320E030E0A901609143 -:101C900046047091470480914804909149040E9441 -:101CA000D44B87FF08C0109246041092470410924C -:101CB00048041092490420E030E0A90160914A04F0 -:101CC00070914B0480914C0490914D040E94D44B30 -:101CD00087FF08C010924A0410924B0410924C04E3 -:101CE00010924D0420E030E0A90160914E04709103 -:101CF0004F0480915004909151040E94D44B87FF6F -:101D000008C010924E0410924F041092500410928A -:101D1000510420E030E04DE453E4609146047091BA -:101D2000470480914804909149040E94D74D1816A9 -:101D300064F480E090E0ADE4B3E4809346049093D3 -:101D40004704A0934804B093490420E030E04DE4F8 -:101D500053E460914A0470914B0480914C0490913B -:101D60004D040E94D74D181664F480E090E0ADE475 -:101D7000B3E480934A0490934B04A0934C04B09333 -:101D80004D0420E030E040EF52E460914E04709149 -:101D90004F0480915004909151040E94D74D181621 -:101DA00064F480E090E0A0EFB2E480934E0490935E -:101DB0004F04A0935004B09351040E947821609383 -:101DC0003E0470933F0480934004909341046091DB -:101DD000020170910301882777FD8095982F0E945A -:101DE000764C2091140130911501409116015091CB -:101DF00017010E94A94E20E030E040E752E40E9423 -:101E0000DB4B20E030E048EC52E40E94DB4BF2E890 -:101E1000CF2EF2E0DF2E7B018C0122E534E04EE490 -:101E200054E06AE474E086E494E00E947C2D8091A2 -:101E3000460490914704A0914804B09149048093CE -:101E40008F0290939002A0939102B093920280919E -:101E50004A0490914B04A0914C04B0914D0480939E -:101E6000930290939402A0939502B093960280916E -:101E70004E0490914F04A0915004B091510480936E -:101E8000970290939802A0939902B0939A0280913E -:101E9000520490915304A0915404B091550480933E -:101EA0009B0290939C02A0939D02B0939E021F916F -:101EB0000F91FF90EF90DF90CF900895AF92BF9277 -:101EC000CF92DF92EF92FF920F931F93CF93DF9306 -:101ED000182F209170043091710440917204509138 -:101EE000730460916C0470916D0480916E04909104 -:101EF0006F040E94E44DEB01082FF92E609102015E -:101F000070910301882777FD8095982F0E94764C69 -:101F10002091140130911501409116015091170143 -:101F20000E94A94E20E030E040E752E40E94DB4BE3 -:101F300020E030E048EC52E40E94DB4B209182022A -:101F40002F931F93FF920F93DF93CF935B016C014D -:101F5000A2E0EA2E01E020E04CE654E066E474E002 -:101F60008FE892E00E9400258091460490914704FA -:101F7000A0914804B091490480938F0290939002FD -:101F8000A0939102B093920280914A0490914B04E5 -:101F9000A0914C04B0914D048093930290939402CD -:101FA000A0939502B093960280914E0490914F04B5 -:101FB000A0915004B091510480939702909398029D -:101FC000A0939902B0939A02809152049091530485 -:101FD000A0915404B091550480939B0290939C026D -:101FE000A0939D02B0939E020E94782160933E04CC -:101FF00070933F0480934004909341040F900F909E -:102000000F900F900F900F90DF91CF911F910F9134 -:10201000FF90EF90DF90CF90BF90AF900895F8942D -:102020000E94BB445A985A985A985A98E5E7F1E0AA -:1020300007C09091C00095FFFCCF8093C6003196F9 -:1020400084918111F6CFEEEAF3E007C09091C000D1 -:1020500095FFFCCF8093C600319684918111F6CF15 -:102060008091C00085FFFCCF8AE08093C600FFCF3F -:10207000CF92DF92EF92FF920F931F930E947821ED -:102080000091600410916104209162043091630416 -:10209000C0903E04D0903F04E0904004F090410492 -:1020A0006C197D098E099F0906171707280739073C -:1020B00028F4012B022B032B09F0B1DF80911901C9 -:1020C00090911A01A0911B01B0911C01892B8A2BC0 -:1020D0008B2B09F10E94782100913E0410913F045E -:1020E0002091400430914104601B710B820B930BD3 -:1020F0000091190110911A0120911B0130911C01CE -:10210000061717072807390730F4909108058091C2 -:102110000705981721F00E94312D1EBA05C05A9864 -:102120005A985A985A98F7CF1F910F91FF90EF90B5 -:10213000DF90CF9008952F923F924F925F926F92CF -:102140007F928F929F92AF92BF92CF92DF92EF9247 -:10215000FF920F931F93CF93DF93CDB7DEB7A69770 -:102160000FB6F894DEBF0FBECDBF87E426DA882312 -:1021700009F489C20EDA0E94434C64307105B1F152 -:1021800044F46230710511F144F577FF17C00C94E7 -:10219000501D6A35710509F422C234F46C317105A1 -:1021A00011F00C94501D60C06B35710509F41BC211 -:1021B0006C35710511F00C94501D1AC2809180028B -:1021C000811104C0AEDC5ADD0C9495208091800210 -:1021D000811103C025DD81E006C08091800281115C -:1021E00005C01EDD80E06ADE0C94952080E5E5D90F -:1021F000882331F0CED90E94484C6B017C0103C08A -:10220000C12CD12C760183E5D8D9882359F0C1D9C6 -:1022100020E030E04AE754E40E94A94E0E94484C76 -:102220006B017C010E94B63F0E9478214B015C014A -:102230008C0C9D1CAE1CBF1C0E94782160933E0438 -:1022400070933F04809340049093410404C00E9423 -:10225000E24181E00DDF0E947821681579058A0549 -:102260009B05A8F30C94501D8091140190911501C9 -:10227000A0911601B09117018093420490934304FA -:10228000A0934404B093450480910201909103010E -:102290009093A1028093A00284E690E090930301C2 -:1022A000809302010E94782160933E0470933F0462 -:1022B000809340049093410481E00E94763980919C -:1022C0008F0290919002A0919102B091920280931E -:1022D000460490934704A0934804B0934904809126 -:1022E000930290919402A0919502B09196028093EE -:1022F0004A0490934B04A0934C04B0934D048091F6 -:10230000970290919802A0919902B0919A028093BD -:102310004E0490934F04A0935004B09351048091C5 -:102320009B0290919C02A0919D02B0919E0280938D -:10233000520490935304A0935404B0935504109204 -:10234000140110921501109216011092170188E5E0 -:1023500034D9882311F090E008C089E52ED9811185 -:10236000FACF8AE52AD991E0982790931801911124 -:102370000C94531D88E521D9882309F48EC089E582 -:102380001CD981110C94531D88C0C0921401D092A5 -:102390001501E0921601F092170120E030E040E7CD -:1023A00052E4609114017091150180911601909191 -:1023B00017010E94DB4BE2E8CE2EE2E0DE2E7B012D -:1023C0008C0122E534E04EE454E06AE474E086E4F3 -:1023D00094E00E947C2D0E94B63F10928F021092D2 -:1023E0009002109291021092920210929302109217 -:1023F000940210929502109296022BE932E047E97E -:1024000052E063E972E08FE892E00E94FC3780912D -:102410008F0290919002A0919102B09192028093CC -:10242000460490934704A0934804B09349048091D4 -:10243000930290919402A0919502B091960280939C -:102440004A0490934B04A0934C04B0934D0420E0B5 -:1024500030E040E752E460911401709115018091E1 -:102460001601909117010E94DB4B7B018C0122E544 -:1024700034E04EE454E06AE474E086E494E00E94C0 -:102480007C2D1092140110921501109216011092D9 -:1024900017010E94B63F0E946F3980911801811187 -:1024A0000C94A31D88E589D881110C94A31D8091FB -:1024B000180181110C947B1E89E57FD881110C9441 -:1024C0007B1E8091180181110C94531F8AE575D8E9 -:1024D00081110C94531F88E570D88823C1F062D80D -:1024E000672B682B692B99F054D820918302309187 -:1024F000840240918502509186020E94FB4A6093BB -:102500008F0270939002809391029093920289E5DA -:1025100054D88823C1F046D8672B682B692B99F0D3 -:1025200038D82091870230918802409189025091D9 -:102530008A020E94FB4A60939302709394028093F4 -:102540009502909396028AE538D88823C1F02AD85C -:10255000672B682B692B99F01CD820918B02309146 -:102560008C0240918D0250918E020E94FB4A609332 -:102570009702709398028093990290939A022BE9A4 -:1025800032E047E952E063E972E08FE892E00E94AE -:10259000FC378091420490914304A0914404B0918F -:1025A00045048093140190931501A0931601B093F4 -:1025B00017018091A0029091A10290930301809352 -:1025C00002010E94782160933E0470933F0480933F -:1025D0004004909341040E946F390C94501D109256 -:1025E00056040C94501D81E0809356040C94501DA9 -:1025F00085E40E94DD0A811102C00E94B63F48E1D5 -:10260000C42E42E0D42E53E8E52E52E0F52E0FE81A -:1026100012E0B12CF60181916F010E94DD0A88233E -:1026200039F1F3E0BF120CC00E94C90AF8016083BF -:102630007183828393838BE992E00E94973818C05C -:102640000E94C90AF70120813181428153810E9491 -:10265000FB4AF80160837183828393832BE932E024 -:1026600047E952E063E972E08FE892E00E94FC37AC -:10267000B394F4E0EF0EF11C0C5F1F4F24E0B21294 -:10268000C9CF0C94501D8DE40E94DD0A882311F4FB -:102690000C94A51C0E94C90A0E94434C683771051E -:1026A00009F4D1C60CF053C06C35710509F44FC55F -:1026B00044F56A32710509F406C174F4623171059A -:1026C00009F4F4C46F31710509F4A4C061317105D6 -:1026D00011F00C94501D98C06335710509F4E2C4E3 -:1026E00034F46235710511F00C94501DD8C4643572 -:1026F000710509F4DBC46535710511F00C94501DAA -:1027000010C56B36710509F4C7C464F469367105E8 -:1027100009F48FC10CF099C46836710511F00C945E -:10272000501D11C16237710509F4B1C534F46D361D -:10273000710511F00C94501D4DC26337710509F4F9 -:1027400098C56737710511F00C94501D82C66C3D19 -:10275000710509F4CDC744F5693C710509F4D8C683 -:1027600074F46C38710509F450C16E3B710509F4BD -:10277000D0C36937710511F00C94501D66C66C3CCE -:10278000710509F41BC734F46B3C710511F00C940E -:10279000501DF8C66D3C710509F430C76E3C7105DB -:1027A00011F00C94501D88C76F3231E0730711F49B -:1027B0000C94781C74F46D3291E0790709F4B9C770 -:1027C00014F00C94741C6D3D710511F00C94501DA7 -:1027D000A1C7653FF1E07F0711F40C948A1C3CF41B -:1027E0006039714011F00C94501D0C94871C663FA9 -:1027F00081E0780711F40C948C1C673E734011F053 -:102800000C94501D0C94901C5A9A5A9A5A9A5A9A9F -:102810000C94501D0E9478216093570470935804C3 -:102820008093590490935A0400915B0410915C04C6 -:1028300020915D0430915E04601B710B820B930B41 -:1028400028EE33E040E050E00E94A14FCA01B901F8 -:102850002CE330E040E050E00E94A14F7F936F9363 -:102860003F932F938AE891E09F938F93CE01019637 -:102870009F938F930E94A152EBEBF0E084910FB6EF -:10288000F894DEBF0FBECDBFEBEBF0E008C0909137 -:10289000C00095FFFCCF8093C600319684918111D2 -:1028A000F6CFFE01319606C09091C00095FFFCCF97 -:1028B0008093C60081918111F7CF8091C00085FF80 -:1028C000FCCF0C944D1D83E50E94DD0A882311F492 -:1028D0000C94501D0E94C90A6B017C0180E50E9486 -:1028E000DD0A882311F40C94501DC701B6010E9423 -:1028F000434C7B0177FF02C00C94501D6F3F710564 -:1029000009F014F40C942B200C94501D819191919A -:102910008017910711F40C94501D22E0E039F20762 -:10292000A9F717FF02C00C94501D61E0802F0E9490 -:1029300092226E2D802F0E94AE22B701802F0E941E -:1029400009220C94501D8091820280935F0484E5DB -:102950000E94DD0A882379F10E94C90A0E94484C2E -:1029600060935F04662339F1EBEBF0E007C09091D0 -:10297000C00095FFFCCF8093C600319684918111F1 -:10298000F6CFE9E9F1E006C09091C00095FFFCCFD9 -:102990008093C60081918111F7CF40E050E06091B3 -:1029A0005F0481E894E00E9400248091C00085FFCC -:1029B000FCCF0C944D1D83E50E94DD0A882309F1AC -:1029C000B0905F040E94C90A6B017C010B2D10E0DE -:1029D0000E94434CDC01CB016B2D0E944640F80164 -:1029E000EE0FFF1FE255F54F91838083F801EE0F44 -:1029F000FF1FEE0FFF1FEC55F54FC082D182E28220 -:102A0000F3820E94BA440C94501D83E50E94DD0AB3 -:102A1000882311F40C94501D0E94C90A0E94434C53 -:102A2000CB010E94CA409093AD0A8093AC0A0C94EB -:102A3000501D8091820280935F0484E50E94DD0A2C -:102A4000882371F10E94C90A0E94484C60935F0478 -:102A5000662331F1EBEBF0E007C09091C00095FFE9 -:102A6000FCCF8093C600319684918111F6CFE0EBC4 -:102A7000F1E006C09091C00095FFFCCF8093C600A6 -:102A800081918111F7CF40E050E060915F0481E8CF -:102A900094E00E9400248091C00085FFFCCFFDC718 -:102AA000E9E9F2E007C09091C00095FFFCCF809368 -:102AB000C600319684918111F6CF60915F04E62FB4 -:102AC000F0E0EE0FFF1FE655F54F808191810E94E7 -:102AD0001641AB01BC0121E030E081E894E00E94A6 -:102AE000FF24EFE9F2E007C09091C00095FFFCCF12 -:102AF0008093C600319684918111F6CF60915F0476 -:102B0000E62FF0E0EE0FFF1FE255F54F8081918137 -:102B10000E941641AB01BC0121E030E081E894E065 -:102B20000E94FF24E2EAF2E007C09091C00095FF06 -:102B3000FCCF8093C600319684918111F6CF8091AD -:102B4000A80A9091A90A0E94C943AB01BC0121E0E7 -:102B500030E081E894E00E94FF24E6EAF2E007C05A -:102B60009091C00095FFFCCF8093C6003196849170 -:102B70008111F6CF8091AC0A9091AD0A0E94C943B1 -:102B8000AB01BC0121E030E081E894E00E94FF2429 -:102B9000E9EAF2E007C09091C00095FFFCCF809376 -:102BA000C600319684918111F6CF80915F0490E048 -:102BB0000E9440404AE050E0BC0181E894E00E945D -:102BC0003C248091C00085FFFCCF8AE08093C60042 -:102BD0000C9495208091820280935F0484E50E948A -:102BE000DD0A882371F10E94C90A0E94484C609353 -:102BF0005F04662331F1EBEBF0E007C09091C00079 -:102C000095FFFCCF8093C600319684918111F6CF59 -:102C1000E7ECF1E006C09091C00095FFFCCF8093F7 -:102C2000C60081918111F7CF40E050E060915F04D0 -:102C300081E894E00E9400248091C00085FFFCCFD1 -:102C40002CC783E50E94DD0A882309F1B0905F0458 -:102C50000E94C90A6B017C010B2D10E00E94434CBD -:102C6000DC01CB016B2D0E944640F801EE0FFF1FE7 -:102C7000E255F54F91838083F801EE0FFF1FEE0FB1 -:102C8000FF1FEC55F54FC082D182E282F3820E9491 -:102C9000BA440E9478214B015C0180915F0490E06E -:102CA000880F991FFC01E255F54F2081318138A32F -:102CB0002F8FFC01E655F54F808191819EA38DA356 -:102CC000CC24CA94DC2C7601EDEAF2E02490E0EB0F -:102CD000F2E03490E4EBF2E0049178EE472E73E0FA -:102CE000572E612C712C1AE00C944C20822DEDEAA9 -:102CF000F2E008C09091C00095FFFCCF8093C60021 -:102D0000319684918111F6CF60915F04E62FF0E057 -:102D1000EE0FFF1FE655F54F808191810E9416410D -:102D2000AB01BC0121E030E081E894E00E94FF2487 -:102D3000832DE0EBF2E008C09091C00095FFFCCF3E -:102D40008093C600319684918111F6CF60915F0423 -:102D50004AE050E070E081E894E00E943C24802F3B -:102D6000E4EBF2E008C09091C00095FFFCCF8093A7 -:102D7000C600319684918111F6CFF7FE03C0EEEDC7 -:102D8000F1E027C00E9478214B015C01C701B60128 -:102D9000605F784D8F4F9F4F681979098A099B09A9 -:102DA000A30192010E94A14F49015A012AE030E09B -:102DB000B501A40181E894E00E94F0238091C00055 -:102DC00085FFFCCF0DC09091C00095FFFCCF809394 -:102DD000C60081918111F7CF8091C00085FFFCCFA3 -:102DE0001093C6000E9478214B015C010E94E241D1 -:102DF00081E03ED99FEFC916D906E906F906C1F56B -:102E000060915F04EF8DF8A12DA13EA12E173F0721 -:102E100014F00C946820E62FF0E0EE0FFF1FE6554B -:102E2000F54F808191810E94164169A37AA38BA3FB -:102E30009CA360915F04E62FF0E0EE0FFF1FE255C8 -:102E4000F54F808191810E94164120E030E040E8FA -:102E50005FE30E94FA4A9B01AC0169A17AA18BA1B0 -:102E60009CA10E94D74D87FD02C00C9434203AC02B -:102E7000F7FC38C060915F04E62FF0E0EE0FFF1F13 -:102E8000E655F54F808191810E94164169A37AA38E -:102E90008BA39CA360915F04E62FF0E0EE0FFF1F71 -:102EA000E255F54F808191810E9416419B01AC0152 -:102EB00069A17AA18BA19CA10E94FA4A0E94434C6D -:102EC000AB01BC0177FF07C07095609550954195A7 -:102ED0005F4F6F4F7F4F443051056105710514F00E -:102EE0000C9434203FEFC316D306E306F30611F427 -:102EF0000C944C20F7FE02C00C9439200E947821DB -:102F00006C197D096031774210F40C944C200C94BC -:102F1000392083E50E94DD0A882359F00E94C90AFE -:102F20000E94434CCB010E94CA409093AD0A80930B -:102F3000AC0A0E9478216B017C01E8EBF2E0A490DE -:102F4000EBEBF2E0B490EFEBF2E014910AE06FC02B -:102F50000E9478216C197D098E099F09693E734092 -:102F60008105910508F45FC060918202A62FB0E050 -:102F7000AA0FBB1FA655B54F8D919C910E9416417B -:102F8000AB01BC018A2DE8EBF2E008C09091C000D3 -:102F900095FFFCCF8093C600319684918111F6CFC6 -:102FA00022E030E081E894E00E94FF248B2DEBEBDF -:102FB000F2E008C09091C00095FFFCCF8093C6005E -:102FC000319684918111F6CF609182024AE050E0FF -:102FD00070E081E894E00E943C24812FEFEBF2E066 -:102FE00008C09091C00095FFFCCF8093C600319639 -:102FF00084918111F6CF8091A80A9091A90A0E942C -:10300000C943AB01BC0121E030E081E894E00E94BB -:10301000FF248091C00085FFFCCF0093C6000E9472 -:1030200078216B017C010E94E24181E021D820914E -:10303000AC0A3091AD0A8091A80A9091A90A821732 -:1030400093070CF485CF0C94422083E50E94DD0A9F -:103050008823F1F00E94C90A20E030E0A9010E9413 -:10306000D44B87FD0FC00E94C90A20E030E04FE733 -:1030700053E40E94D74D18163CF00E94C90A0E94E2 -:10308000484C03C060E001C06FEF6093810208C547 -:103090008FEF8093810204C51092810201C51092C6 -:1030A000A502FEC481E08093A502FAC483E50E94D4 -:1030B000DD0A882399F00E94C90A20E030E04AE73F -:1030C00054E40E94A94E0E94484C609319017093E9 -:1030D0001A0180931B0190931C01E2C488E50E94B1 -:1030E000DD0A8111EDC789E50E94DD0A8111E8C77B -:1030F0008AE50E94DD0A8111E3C785E40E94DD0AAA -:103100008111DEC7D7C75A9889E50E94DD0A81116F -:103110005A988AE50E94DD0A882309F4C1C45A98A6 -:10312000BFC483E50E94DD0A0E94C90A20E030E0A6 -:103130004AE754E40E94A94E0E94484C6093600400 -:10314000709361048093620490936304A9C428E19E -:1031500032E03EA32DA3B5E22B2EBAE03B2E85E351 -:103160009AE098A38F8F19EE812E19E0912E10E02E -:10317000EDA1FEA18191FEA3EDA30E94DD0A8823AB -:1031800009F466C0133009F05CC00E94C90A6B01E3 -:103190007C0120E030E040EA51E40E94D44B87FFFC -:1031A0004AC0A7019601F1016081718182819381FA -:1031B0000E94DB4B762EA72EB82E092F762F272FB5 -:1031C0003A2D4B2D502F6091FD097091FE09809191 -:1031D000FF099091000A0E94A94E6093FD09709327 -:1031E000FE098093FF099093000A272D3A2D4B2D5D -:1031F000502FEF8DF8A160817181828193810E94AF -:10320000A94EEF8DF8A16083718382839383F401CB -:1032100060817181828193810E94744C272D3A2DA7 -:103220004B2D502F0E94A94E0E94484CF401608300 -:10323000718382839383F101C082D182E282F3821F -:1032400007C00E94C90AF10160837183828393835E -:103250001F5FF4E02F0E311C2F8D38A12C5F3F4FE4 -:1032600038A32F8F34E0830E911C143009F080CFE7 -:1032700017C4E3ECF2E007C09091C00095FFFCCFCB -:103280008093C600319684918111F6CF09C4EEE592 -:10329000F3E007C09091C00095FFFCCF8093C6007B -:1032A000319684918111F6CF40918F025091900216 -:1032B000609191027091920222E030E081E894E006 -:1032C0000E94FF24E1E6F3E007C09091C00095FF63 -:1032D000FCCF8093C600319684918111F6CF409146 -:1032E000930250919402609195027091960222E0AF -:1032F00030E081E894E00E94FF24E4E6F3E007C0B8 -:103300009091C00095FFFCCF8093C60031968491C8 -:103310008111F6CF409197025091980260919902E5 -:1033200070919A0222E030E081E894E00E94FF244C -:10333000E7E6F3E007C09091C00095FFFCCF8093D3 -:10334000C600319684918111F6CF40919B02509135 -:103350009C0260919D0270919E0222E030E081E823 -:1033600094E00E94FF24EAE6F3E007C09091C000D9 -:1033700095FFFCCF8093C600319684918111F6CFE2 -:103380000E940F400E94764C2091250A3091260A17 -:103390004091270A5091280A0E94DB4BAB01BC01E7 -:1033A00022E030E081E894E00E94FF24E4E7F3E0CB -:1033B00007C09091C00095FFFCCF8093C600319666 -:1033C00084918111F6CF81E00E940F400E94764CDB -:1033D0002091290A30912A0A40912B0A50912C0AF7 -:1033E0000E94DB4BAB01BC0122E030E081E894E0BD -:1033F0000E94FF24E7E7F3E007C09091C00095FF2B -:10340000FCCF8093C600319684918111F6CF82E083 -:103410000E940F400E94764C20912D0A30912E0A76 -:1034200040912F0A5091300A0E94DB4BAB01BC0146 -:1034300022E030E081E894E00E94FF248091C00007 -:1034400085FFFCCF2AC380E001C081E00E9476396D -:1034500027C3EAE7F3E007C09091C00095FFFCCFD7 -:103460008093C600319684918111F6CF189903C0DC -:10347000E4E8F1E009C0E7E8F1E006C09091C0009F -:1034800095FFFCCF8093C60081918111F7CFE1E8D1 -:10349000F3E007C09091C00095FFFCCF8093C60079 -:1034A000319684918111F6CF199903C0E4E8F1E0D7 -:1034B00009C0E7E8F1E006C09091C00095FFFCCF9D -:1034C0008093C60081918111F7CFE8E8F3E007C04F -:1034D0009091C00095FFFCCF8093C60031968491F7 -:1034E0008111F6CF1A9903C0E4E8F1E009C0E7E8DA -:1034F000F1E006C09091C00095FFFCCF8093C6001C -:1035000081918111F7CF8091C00085FFFCCFC5C2AA -:10351000A8E1EA2EA2E0FA2E00E010E0F701819186 -:103520007F010E94DD0A882339F10E94C90AE5E182 -:10353000CE2EEAE0DE2EC00ED11E0E94484CF601CF -:1035400060837183828393830E94C90AF9EECF2E30 -:10355000F9E0DF2EC00ED11EF801EB5DF54F2081A2 -:103560003181428153810E94A94E0E94484CF6014C -:1035700060837183828393830C5F1F4F0031110539 -:1035800069F68EC208E112E065E3E62E6AE0F62EE7 -:10359000F80181918F010E94DD0A882339F00E9491 -:1035A000C90AF7016083718382839383F4E0EF0E8D -:1035B000F11C22E00C31120759F772C283E50E9418 -:1035C000DD0A882351F00E94C90A60930D0A7093A6 -:1035D0000E0A80930F0A9093100A84E50E94DD0A78 -:1035E000882309F45DC20E94C90A6093090A709396 -:1035F0000A0A80930B0A90930C0A52C283E50E9438 -:10360000DD0A882351F00E94C90A6093110A709361 -:10361000120A8093130A9093140A84E50E94DD0A2B -:10362000882351F00E94C90A6093F9097093FA093E -:103630008093FB099093FC0982E40E94DD0A8823B1 -:1036400061F00E94C90A0E94484C6093450A709339 -:10365000460A8093470A9093480A88E50E94DD0A4B -:10366000882351F00E94C90A6093050A7093060AE4 -:103670008093070A9093080A8AE50E94DD0A88234E -:1036800051F00E94C90A6093010A7093020A809364 -:10369000030A9093040A85E40E94DD0A882309F452 -:1036A000FFC10E94C90A6093FD097093FE098093CF -:1036B000FF099093000AF4C108E112E053E8E52EF7 -:1036C00052E0F52EF80181918F010E94DD0A8823D6 -:1036D00039F00E94C90AF701608371838283938362 -:1036E000F4E0EF0EF11C22E00B31120759F7D8C1BC -:1036F00083E50E94DD0A882309F4D2C10E94C90A29 -:103700000E94434C709303016093020181E0809317 -:103710009F02C6C183E50E94DD0A882309F4C0C167 -:103720000E94C90A0E94434C7093010160930001FA -:10373000B7C180E50E94DD0A882351F00E94C90AC2 -:1037400060932E0170932F0180933001909331018B -:1037500089E40E94DD0A882381F00E94C90A25E9D4 -:103760003FEB46ED5DE30E94A94E60932A01709302 -:103770002B0180932C0190932D0184E40E94DD0A9B -:10378000882381F00E94C90A25E93FEB46ED5DE3FD -:103790000E94DB4B609326017093270180932801E0 -:1037A0009093290183E40E94DD0A882351F00E944E -:1037B000C90A60932201709323018093240190939E -:1037C00025010E942940E0EEF1E006C09091C00082 -:1037D00095FFFCCF8093C60081918111F7CFE3EE76 -:1037E000F1E006C09091C00095FFFCCF8093C60029 -:1037F00081918111F7CF40912E0150912F0160915D -:1038000030017091310122E030E081E894E00E94C3 -:10381000FF24E7EEF1E006C09091C00095FFFCCFD9 -:103820008093C60081918111F7CF25E93FEB46EDEA -:103830005DE360912A0170912B0180912C019091A0 -:103840002D010E94DB4BAB01BC0122E030E081E89E -:1038500094E00E94FF24EBEEF1E006C09091C000DE -:1038600095FFFCCF8093C60081918111F7CF25E9A8 -:103870003FEB46ED5DE36091260170912701809159 -:103880002801909129010E94A94EAB01BC0122E0C0 -:1038900030E081E894E00E94FF24EFEEF1E006C002 -:1038A0009091C00095FFFCCF8093C600819181115B -:1038B000F7CF25E93FEB46ED5DE360912201709182 -:1038C000230180912401909125010E94A94EAB0112 -:1038D000BC0122E030E081E894E00E94FF24809166 -:1038E000C00085FFFCCFD9C081E00E94B038D8C0AD -:1038F00083E50E94DD0A882319F00E94C90A04C0EA -:1039000060E070E086E193E40E94E744C9C00E9451 -:10391000B63FC6C080E001C081E00E941C08C0C064 -:10392000109280028091640490916504A0916604D5 -:10393000B091670480933A0490933B04A0933C04B5 -:10394000B0933D040E94170BABC084E50E94DD0AD2 -:10395000882309F461C00E94C90A0E94484C609300 -:103960005F04662389F1EBEBF0E007C09091C000A3 -:1039700095FFFCCF8093C600319684918111F6CFDC -:10398000E3EFF1E006C09091C00095FFFCCF80937B -:10399000C60081918111F7CF40E050E060915F0453 -:1039A00081E894E02DD7E5EFF1E006C09091C000EA -:1039B00095FFFCCF8093C60081918111F7CF809154 -:1039C000C00085FFFCCF69C010928202EBEBF0E0F3 -:1039D00007C09091C00095FFFCCF8093C600319640 -:1039E00084918111F6CFE6E0F2E006C09091C0002C -:1039F00095FFFCCF8093C60081918111F7CF609134 -:103A000082024AE050E070E081E894E035D780918E -:103A1000C00085FFFCCF41C0EBEBF0E007C0909108 -:103A2000C00095FFFCCF8093C60031968491811130 -:103A3000F6CFEFE8F3E007C09091C00095FFFCCF10 -:103A40008093C600319684918111F6CF80912E0427 -:103A500090912F0420E6289FF001299FF00D11245A -:103A6000E655FD4F06C09091C00095FFFCCF8093B6 -:103A7000C60081918111F7CFE1EAF3E007C0909190 -:103A8000C00095FFFCCF8093C600319684918111D0 -:103A9000F6CF8091C00085FFFCCF8AE08093C600FE -:103AA0000E94F80A42C310928F0210929002109264 -:103AB000910210929202109293021092940210922C -:103AC0009502109296022BE932E047E952E063E951 -:103AD00072E08FE892E00E94FC3780E090ECA9E968 -:103AE000B3EC8093460490934704A0934804B093AA -:103AF000490480934A0490934B04A0934C04B093E0 -:103B00004D0420910401309105014091060150912E -:103B1000070120931401309315014093160150932F -:103B20001701C0900801D0900901E0900A01F090BF -:103B30000B01C701B6010E94D44B87FF02C00C9451 -:103B4000C5110C94CD1110928F0210929002109218 -:103B50009102109292022BE932E047E952E063E9C8 -:103B600072E08FE892E00E94FC3780E090ECA9E9D7 -:103B7000B3EC8093460490934704A0934804B09319 -:103B800049046091040170910501809106019091B2 -:103B900007016093140170931501809316019093AF -:103BA000170120E030E040E752E40E94DB4B42E89E -:103BB000C42E42E0D42E7B018C0122E534E04EE499 -:103BC00054E06AE474E086E494E00E947C2D0E9454 -:103BD000B63F10928F0210929002109291021092B2 -:103BE00092022BE932E047E952E063E972E08FE8A4 -:103BF00092E00E94FC3780E090E0A0EAB0E480937D -:103C0000460490934704A0934804B093490420E0ED -:103C100030E040E752E46091140170911501809109 -:103C20001601909117010E94DB4B7B018C0122E56C -:103C300034E04EE454E06AE474E086E494E00E94E8 -:103C40007C2D0E94B63F80E090E0A0E2B1EC809332 -:103C5000460490934704A0934804B093490420E09D -:103C600030E040E05FE360910401709105018091D4 -:103C70000601909107010E94A94EFB01462F5F2F7C -:103C8000682F792F4093140150931501609316010A -:103C90007093170120E030E040E752E4BF010E943A -:103CA000DB4B7B018C0122E534E04EE454E06AE416 -:103CB00074E086E494E00E947C2D0E94B63F10924E -:103CC0008F02109290021092910210929202109222 -:103CD000460410924704109248041092490410922E -:103CE00014011092150110921601109217010E94F2 -:103CF0006F390C9457121092930210929402109202 -:103D00009502109296022BE932E047E952E063E90E -:103D100072E08FE892E00E94FC3780E090ECA9E925 -:103D2000B3EC80934A0490934B04A0934C04B0935B -:103D30004D04609108017091090180910A019091F0 -:103D40000B016093140170931501809316019093F9 -:103D5000170120E030E040E752E40E94DB4B32E8FC -:103D6000C32E32E0D32E7B018C0122E534E04EE4F9 -:103D700054E06AE474E086E494E00E947C2D0E94A2 -:103D8000B63F1092930210929402109295021092F4 -:103D900096022BE932E047E952E063E972E08FE8EE -:103DA00092E00E94FC3780E090E0A0EAB0E48093CB -:103DB0004A0490934B04A0934C04B0934D0420E02C -:103DC00030E040E752E46091140170911501809158 -:103DD0001601909117010E94DB4B7B018C0122E5BB -:103DE00034E04EE454E06AE474E086E494E00E9437 -:103DF0007C2D0E94B63F80E090E0A0E2B1EC809381 -:103E00004A0490934B04A0934C04B0934D0420E0DB -:103E100030E040E05FE3609108017091090180911A -:103E20000A0190910B010E94A94EFB01462F5F2FC2 -:103E3000682F792F40931401509315016093160158 -:103E40007093170120E030E040E752E4BF010E9488 -:103E5000DB4B7B018C0122E534E04EE454E06AE464 -:103E600074E086E494E00E947C2D0E94B63F10929C -:103E70009302109294021092950210929602109260 -:103E80004A0410924B0410924C0410924D0410926C -:103E900014011092150110921601109217010E9440 -:103EA0006F390C946112109297021092980210923E -:103EB000990210929A022BE932E047E952E063E955 -:103EC00072E08FE892E00E94FC3780E090E0A4E38B -:103ED000B3EC80934E0490934F04A0935004B0939E -:103EE000510460910C0170910D0180910E0190912F -:103EF0000F01609314017093150180931601909344 -:103F0000170120E030E040E752E40E94DB4B22E85A -:103F1000C22E22E0D22E7B018C0122E534E04EE459 -:103F200054E06AE474E086E494E00E947C2D0E94F0 -:103F3000B63F109297021092980210929902109236 -:103F40009A022BE932E047E952E063E972E08FE838 -:103F500092E00E94FC3780E090E0A0E8BFE380930D -:103F60004E0490934F04A0935004B093510420E06A -:103F700030E040E752E460911401709115018091A6 -:103F80001601909117010E94DB4B7B018C0122E509 -:103F900034E04EE454E06AE474E086E494E00E9485 -:103FA0007C2D0E94B63F80E090E0A0E0B0EC8093D2 -:103FB0004E0490934F04A0935004B093510420E01A -:103FC00030E040E05FE360910C0170910D01809161 -:103FD0000E0190910F010E94A94EFB01462F5F2F09 -:103FE000682F792F409314015093150160931601A7 -:103FF0007093170120E030E040E752E4BF010E94D7 -:10400000DB4B7B018C0122E534E04EE454E06AE4B2 -:1040100074E086E494E00E947C2D0E94B63F1092EA -:104020009702109298021092990210929A0210929E -:104030004E0410924F0410925004109251041092AA -:1040400014011092150110921601109217010E948E -:104050006F390C946B120E94C90A0E94434C8B0169 -:10406000ECE1F2E00C94861443D16B017C010C94DA -:1040700072173ED160935B0470935C0480935D047F -:1040800090935E0435D160933E0470933F04809317 -:1040900040049093410404CD2BD1681979098A0911 -:1040A0009B09693E73408105910510F00C947616CA -:1040B0000C94F6160E94B63F5A980E942340F0CC0A -:1040C0000E94B63F88E50E94DD0A81111CC81CC809 -:1040D000E62FF0E0EE0FFF1FE655F54F808191814E -:1040E0000E94164169A37AA38BA39CA360915F04ED -:1040F000E62FF0E0EE0FFF1FE255F54F8081918132 -:104100000E94164120E030E040E85FE30E94FB4A55 -:104110009B01AC0169A17AA18BA19CA10E94D44B07 -:1041200018160CF0A1CF0C947217A6960FB6F8943F -:10413000DEBF0FBECDBFDF91CF911F910F91FF90DA -:10414000EF90DF90CF90BF90AF909F908F907F9037 -:104150006F905F904F903F902F9008958091A602AE -:104160009091A702039714F40E94420B8091A6023B -:104170009091A702892BC1F00E949B108091A6020A -:104180009091A70201979093A7028093A602809135 -:104190002E0490912F04019664E070E00E948E4FEF -:1041A00090932F0480932E040E94E24181E00E94AC -:1041B00038100C94B3380E94BB4480918002811166 -:1041C00034C081E08093800280913A0490913B0456 -:1041D000A0913C04B0913D048093640490936504E5 -:1041E000A0936604B0936704E5E7F1E007C09091FF -:1041F000C00095FFFCCF8093C60031968491811159 -:10420000F6CFEFECF3E007C09091C00095FFFCCF34 -:104210008093C600319684918111F6CF8091C000C1 -:1042200085FFFCCF8AE08093C600089580918002CC -:104230000895E82FF0E0E95BFB4FE491E650E230AF -:1042400060F48091B1008C7F8093B1008091B100C7 -:1042500067707727862B8093B10008959FD00E94C6 -:104260002D097CDFFECF1F920F920FB60F92112403 -:104270002F933F938F939F93AF93BF938091780435 -:1042800090917904A0917A04B0917B0430918004DC -:10429000232F2A592D3720F02D570196A11DB11D2E -:1042A000209380048093780490937904A0937A04F7 -:1042B000B0937B0480917C0490917D04A0917E0456 -:1042C000B0917F040196A11DB11D80937C04909351 -:1042D0007D04A0937E04B0937F04BF91AF919F9122 -:1042E0008F913F912F910F900FBE0F901F901895B7 -:1042F0000F931F938FB7F89400917804109179046D -:1043000020917A0430917B048FBFB801C9011F91BD -:104310000F9108959FB7F89440917C0450917D04CB -:1043200060917E0470917F0486B5A89B06C08F3F84 -:1043300021F04F5F5F4F6F4F7F4F9FBF2227342F7A -:10434000452F562F280F311D411D511DA3E0B0E010 -:104350000C946F4FCF92DF92EF92FF92CF93DF9347 -:104360006B017C01D7DFEB010DC0D4DF6C1B7D0B33 -:10437000683E734038F081E0C81AD108E108F108BE -:10438000C851DC4FC114D104E104F10471F7DF918D -:10439000CF91FF90EF90DF90CF900895789484B5FF -:1043A000826084BD84B5816084BD85B5826085BD31 -:1043B00085B5816085BDEEE6F0E080818160808317 -:1043C000E1E8F0E0108280818260808380818160FA -:1043D0008083E0E8F0E0808181608083E1EBF0E0C1 -:1043E000808184608083E0EBF0E080818160808365 -:1043F000EAE7F0E08081846080838081826080834E -:104400008081816080838081806880831092C10078 -:1044100008951F93CF93DF93182FEB0161E082D0B3 -:10442000209711F460E004C0CF3FD10531F461E082 -:10443000812FDF91CF911F9191C0E12FF0E0E95BD7 -:10444000FB4FE491E330B9F028F4E13051F0E23071 -:10445000B1F50CC0E63019F1E73049F1E43079F5F7 -:1044600014C084B5806884BDC7BD2EC084B5806289 -:1044700084BDC8BD29C08091800080688093800081 -:10448000D0938900C09388001FC080918000806213 -:1044900080938000D0938B00C0938A0015C08091D8 -:1044A000B00080688093B000C093B3000DC08091CD -:1044B000B00080628093B000C093B40005C0C038E3 -:1044C000D1050CF0B4CFAECFDF91CF911F910895FD -:1044D000833069F028F48130A1F0823011F514C0E6 -:1044E0008630B1F08730C1F08430D9F404C08091B7 -:1044F00080008F7703C0809180008F7D8093800043 -:10450000089584B58F7702C084B58F7D84BD0895EA -:104510008091B0008F7703C08091B0008F7D809331 -:10452000B000089590E0FC01E959FB4F2491FC0193 -:10453000E957FB4FE491EE2381F0F0E0E455FB4FA7 -:10454000A491B0E09FB7F8948C91611103C02095BD -:10455000822301C0822B8C939FBF08950F931F93DA -:10456000CF93DF931F92CDB7DEB7A82FB0E0FD0148 -:10457000E95BFB4F8491FD01E959FB4F1491FD016B -:10458000E957FB4F04910023B1F0882319F06983A8 -:104590009FDF6981E02FF0E0E955FB4FA491B0E087 -:1045A0009FB7F8948C91611103C01095812301C0CD -:1045B000812B8C939FBF0F90DF91CF911F910F9113 -:1045C00008951F920F920FB60F9211242F933F93CD -:1045D0004F935F936F938F939F93EF93FF936091AC -:1045E000C6002091020530910305C90101968F771D -:1045F000992740910405509105058417950741F0CE -:10460000F901EE57FB4F60839093030580930205F9 -:10461000FF91EF919F918F916F915F914F913F919A -:104620002F910F900FBE0F901F9018959A01AB011C -:1046300082E08093C00060E47BE48CE490E00E9420 -:10464000C34F2150310941095109CA01B90122E082 -:1046500030E040E050E00E94C34F832F99278093C1 -:10466000C5002093C400E1ECF0E08081806180838C -:1046700080818860808380818068808308958091B4 -:104680000405909105052091020530910305281736 -:10469000390769F0FC01EE57FB4F208101968F77B7 -:1046A0009927909305058093040530E002C02FEF11 -:1046B0003FEFC901089580910405909105059093FD -:1046C00003058093020508956F927F928F929F92C7 -:1046D000AF92BF92CF92DF92EF92FF920F931F9310 -:1046E000CF93DF93CDB7DEB7A0970FB6F894DEBFB8 -:1046F0000FBECDBF8C014115510561057105C1F497 -:1047000040E050E060E3A0960FB6F894DEBF0FBE25 -:10471000CDBFDF91CF911F910F91FF90EF90DF9070 -:10472000CF90BF90AF909F908F907F906F90ABC0D5 -:1047300066246394712C6C0E7D1EC12CD12C7601E5 -:10474000822E912CA12CB12CCB01BA01A501940190 -:104750000E94A14FFA01D3016D933D01BFEFCB1A27 -:10476000DB0AEB0AFB0AA901BF01411551056105EE -:10477000710551F781E0C81AD108E108F10815C0A8 -:10478000E1E0F0E0EC0FFD1FEC0DFD1D60816A30F3 -:1047900010F4605D01C0695C40E050E0C80173D076 -:1047A000A1E0CA1AD108E108F108BFEFCB16DB0679 -:1047B000EB06FB0629F7A0960FB6F894DEBF0FBEF6 -:1047C000CDBFDF91CF911F910F91FF90EF90DF90C0 -:1047D000CF90BF90AF909F908F907F906F900895F3 -:1047E0002115310539F48091C00085FFFCCF40933D -:1047F000C600089569CF9A01AB0160E070E0F0CF88 -:104800009A01462F50E060E070E0EACFCF92DF924D -:10481000EF92FF92CF93DF93EC016A017B012115A8 -:10482000310539F48091C00085FFFCCFC092C600ED -:104830001CC02A30310579F477FF0CC040E050E00D -:104840006DE221D0F094E094D094C094C11CD11CAE -:10485000E11CF11C2AE0B701A601CE01DF91CF9146 -:10486000FF90EF90DF90CF902FCFDF91CF91FF900F -:10487000EF90DF90CF9008959A01AB01662757FD26 -:104880006095762FC3CF9A01462F50E060E070E02C -:10489000BDCFCF93DF93EC0140E050E06DE0F3DF5C -:1048A00040E050E06AE0CE01DF91CF91ECCFCF93B2 -:1048B000DF93EC01A0DFCE01DF91CF91EACF8F92A1 -:1048C0009F92AF92BF92CF92DF92EF92FF920F939F -:1048D0001F93CF93DF938C014A015B01C22F20E02D -:1048E00030E0A901C501B4010E94D44B87FF09C083 -:1048F00040E050E06DE2C801C6DFB7FAB094B7F807 -:10490000B094D0E060E070E080E09FE307C020E07A -:1049100030E040E251E40E94DB4BDF5FDC13F7CF75 -:10492000262F372F482F592FC501B4010E94FB4A6B -:10493000D62EE72EF82ED92F0E94484C962EA72E61 -:10494000B82EC92E0E94744C9B01AC016D2D7E2D9A -:104950008F2D9D2F0E94FA4AD62FF72EE82ED92EA2 -:104960002AE030E0492D5A2D6B2D7C2DC80138DF0F -:10497000CC23B1F1E6E5F2E006C09091C00095FFCE -:10498000FCCF8093C60081918111F7CF29C020E030 -:1049900030E040E251E46D2F7F2D8E2D9D2D0E9441 -:1049A000A94E6B017C017D2D9F2D0E94434C5B0124 -:1049B0004AE050E0C80160DFB501882777FD8095A7 -:1049C000982F0E94764C9B01AC016C2D7D2D8E2D75 -:1049D0009F2D0E94FA4AD62FF72EE82ED92EC150CD -:1049E000C111D5CFDF91CF911F910F91FF90EF9023 -:1049F000DF90CF90BF90AF909F908F9008955FCF42 -:104A00002F923F924F925F926F927F928F929F92DE -:104A1000AF92BF92CF92DF92EF92FF920F931F93CC -:104A2000CF93DF93CDB7DEB7CA54D1090FB6F89450 -:104A3000DEBF0FBECDBF1C017E8B6D8B3A012BA359 -:104A40000EA3E8A6AEAABFAAC8AED9AE34E0239F93 -:104A500080011124400F511F5BAB4AABDA018D90EE -:104A60009D90AD90BC90FC01E00FF11F2081318141 -:104A700042815381C501B4010E94FB4A6AAF7BAFFA -:104A80008CAF9DAFEEA1B4E0EB9F700111249301B8 -:104A90002E0D3F1D3DAB2CABD9014D905D906D901F -:104AA0007C90F101EE0DFF1D208131814281538107 -:104AB000C301B2010E94FB4A6EAF7FAF21968FAF58 -:104AC000219722969FAF2297E8A5B4E0EB9FC00103 -:104AD0001124F101E80FF91F2081318142815381B6 -:104AE0002B8F3C8F4D8F5E8FED89FE89E80FF91F6C -:104AF00060817181828193810E94FA4A462F572FEB -:104B0000682F792F498B5A8B6B8B7C8BAD89BE8933 -:104B10001C968D919D910D90BC91A02D8AA79BA76D -:104B2000ACA7BDA7D1011C962D913D914D915C91F3 -:104B30001F972F8F38A349A35AA3B7FAB094B7F899 -:104B4000B09477FA709477F87094ED89FE89E00F4D -:104B5000F11F7AAD6BAD9CAD8DAD272F362F492F50 -:104B6000582F60817181828193810E94FA4A6F8BF4 -:104B7000788F898F9DA3ED89FE89EE0DFF1D7EAD97 -:104B80006FAD21969FAD219722968FAD2297272F4B -:104B9000362F492F582F60817181828193810E9425 -:104BA000FA4A162F072F382E292E7F89688D998D66 -:104BB0008DA1272F362F492F582FC501B4010E94F0 -:104BC000A94E6B017C01B801C101272F362F492F57 -:104BD000582FC301B2010E94A94E9B01AC01C7012D -:104BE000B6010E94FB4A6B017C01B801C101272F6D -:104BF000362F492F582FC501B4010E94A94E6EA728 -:104C00007FA788AB99AB7F89688D998D8DA1272F60 -:104C1000362F492F582FC301B2010E94A94E9B0184 -:104C2000AC016EA57FA588A999A90E94FA4AA7019F -:104C300096010E946E4B362E272E182F092F20E04A -:104C400030E0A901D101F8016B2F7A2F8F2F9E2F11 -:104C50000E94D44B87FF10C02BED3FE049EC50E49D -:104C6000D101F8016B2F7A2F8F2F9E2F0E94FB4AC4 -:104C7000362E272E182F092FA4968FADA4978823A0 -:104C800081F02BED3FE049EC50E4D101F8016B2FAE -:104C9000722D8F2F902F0E94FA4A362E272E182F12 -:104CA000092FC988DA88EB88FC88E894F7F8A3967E -:104CB0002CAD3DAD4EAD5FADA397D101F8016B2F8B -:104CC000722D8F2F902F0E94A94EA70196010E944E -:104CD000E44D6B017C012FE632E143E85AE30E9488 -:104CE000D44B87FD79C2C701B6010E94B14C0E9426 -:104CF000484C7A8F698FFB01EF2B21F421E030E0E3 -:104D00003A8F298F498D5A8DBA0180E090E00E9438 -:104D1000744C6B017C019B01AC01D101F8016B2F3C -:104D2000722D8F2F902F0E94DB4B6F8B788F1C0181 -:104D3000A701960169897A898B899C890E94DB4B3E -:104D400024966FAF249725967FAF259726968FAF31 -:104D5000269727969FAF27972F8D38A149A15AA153 -:104D60006AA57BA58CA59DA50E94FA4AA70196017C -:104D70000E94DB4B28966FAF289729967FAF299723 -:104D80002A968FAF2A972B969FAF2B9720E030E083 -:104D900040E05FE3BF89A88D6B2F7A2F822D932D82 -:104DA0000E94A94EBF89A88D2B2F3A2F422D532D3B -:104DB0000E94A94E9B01AC0160E070E080E89FE397 -:104DC0000E94FA4A6DA37AA78EA723969FAF2397D6 -:104DD000CE010196FC01A8A554E0A59FE00DF11DB0 -:104DE00011242B8D3C8D4D8D5E8D2083318342832C -:104DF00053832F8D38A149A15AA12D873E874F8714 -:104E0000588B198A41E050E05C8F4B8F81E090E035 -:104E10008C0F9D1FBBA1A4E0BA9F800D911D112492 -:104E200099A788A721E030E02C0F3D1F5EA144E048 -:104E3000549F200D311D11243FA32EA3FCA3EBA3EF -:104E4000ABC1898989310CF050C07F89688D272FCB -:104E5000362F422D532DC501B4010E94A94E6B017E -:104E60007C017DA16AA59EA523968FAD2397272F50 -:104E7000362F492F582FC301B2010E94A94E9B0122 -:104E8000AC01C701B6010E94FB4A7B018C017DA1E8 -:104E90006AA59EA523968FAD2397272F362F492FDE -:104EA000582FC501B4010E94A94E5B016C017F8996 -:104EB000688D272F362F422D532DC301B2010E943A -:104EC000A94E9B01AC016A2D7B2D8C2D9D2D0E943E -:104ED000FA4A862E972EA82EB92E99899F5F998B14 -:104EE0004E2C5F2C602E712E72C0AB8DBC8DBD011F -:104EF00080E090E00E94744CBF89A88D2B2F3A2F40 -:104F0000422D532D0E94A94E7B018C017F2D802FB5 -:104F1000912F0E94D84B2B013C016E2D7F2D802FAD -:104F2000912F0E940C4F698B7A8B8B8B9C8BEAA9FB -:104F3000FBA980819181A281B3819C01AD01505870 -:104F40002F8F38A349A35AA3ACA9BDA9CD90DD905A -:104F5000ED90FC90A30192016F8D78A189A19AA197 -:104F60000E94A94E4B015C0129893A894B895C89D1 -:104F7000C701B6010E94A94E9B01AC01C501B40155 -:104F80000E94FB4A862E972EA82EB92E29893A898F -:104F90004B895C896F8D78A189A19AA10E94A94E45 -:104FA000698B7A8B8B8B9C8BA3019201C701B60115 -:104FB0000E94A94E9B01AC0169897A898B899C89E1 -:104FC0000E94FA4A462E572E682E792E198AA5017C -:104FD0009401BAADABADFCADEDAD6B2F7A2F8F2F39 -:104FE0009E2F0E94FB4AE8A5F9A560837183828306 -:104FF0009383A3019201BEADAFAD2196FFAD219782 -:105000002296EFAD22976B2F7A2F8F2F9E2F0E9423 -:10501000FB4AAEA1BFA16D937D938D939C93139793 -:1050200024967FAD249725966FAD259726969FAD44 -:10503000269727968FAD2797272F362F492F582F42 -:10504000EBA1FCA160817181828193810E94FB4A66 -:10505000ABA1BCA16D937D938D939C9313972896E0 -:105060007FAD289729966FAD29972A969FAD2A97ED -:105070002B968FAD2B97272F362F492F582F6D85C5 -:105080007E858F8598890E94FB4A6D877E878F87F2 -:10509000988B20E030E0A90169817A818B819C8125 -:1050A0000E94D44B87FF04C019821A821B821C8283 -:1050B00020E030E0A9016D817E818F8198850E947A -:1050C000D44B87FF04C01D821E821F82188620E0F9 -:1050D00030E0A90169857A858B859C850E94D44B37 -:1050E00087FF04C019861A861B861C8620E030E0E4 -:1050F0004DE453E469817A818B819C810E94D74D74 -:10510000181644F480E090E0ADE4B3E489839A8318 -:10511000AB83BC8320E030E04DE453E46D817E81BD -:105120008F8198850E94D74D181644F480E090E056 -:10513000ADE4B3E48D839E83AF83B88720E030E095 -:1051400040EF52E469857A858B859C850E94D74D16 -:10515000181644F480E090E0A0EFB2E489879A87C3 -:10516000AB87BC8794E6C92ED12CCC0EDD1EEEA8F1 -:10517000FFA808AD19AD9E01235F3F4FAE01475F09 -:105180005F4FBE016B5F7F4FCE010196B5D4EB8DB3 -:10519000FC8D3196FC8FEB8F2B8D3C8D498D5A8D7C -:1051A0002417350708F44DCE2D893E89245F3F4FE3 -:1051B0004D895E89485F5F4F6D897E896C5F7F4F47 -:1051C00084E6C82ED12CCC0EDD1EEEA8FFA808ADBB -:1051D00019AD8D899E8990D4C65BDF4F0FB6F894C8 -:1051E000DEBF0FBECDBFDF91CF911F910F91FF901A -:1051F000EF90DF90CF90BF90AF909F908F907F9077 -:105200006F905F904F903F902F9008958F5F803107 -:1052100009F480E008952F923F924F925F926F922F -:105220007F928F929F92AF92BF92CF92DF92EF9236 -:10523000FF920F931F93CF93DF93CDB7DEB768979D -:105240000FB6F894DEBF0FBECDBF1C014A015B0153 -:1052500068017901DC01D8966D917D918D919C91C9 -:10526000DB970E94744C69837A838B839C83A501AE -:1052700094010E94A94E0E94C14B0E94484C6D832C -:105280007E838F839887A701960169817A818B81BC -:105290009C810E94A94E0E94C14B0E94484C698784 -:1052A0007A878B879C872D813E814F81588528374F -:1052B00031054105510540F488E790E0A0E0B0E0F9 -:1052C0008D839E83AF83B88729853A854B855C851E -:1052D000283731054105510540F488E790E0A0E00A -:1052E000B0E089879A87AB87BC87F101EC5BFF4F01 -:1052F0004080518062807380C301B2010E94764C6D -:105300006B017C01D101DC966D917D918D919C9119 -:10531000DF970E94744C6D877E878F87988B20E083 -:1053200030E0A901C701B6010E94D44B882339F1AE -:1053300029813A814B815C81CA01B9010E94A94E41 -:105340004B015C012D853E854F855889CA01B90105 -:105350000E94A94E9B01AC01C501B4010E94FA4A0A -:105360004B015C01A7019601C701B6010E94FB4AEF -:105370009B01AC01C501B4010E94DB4B04C060E09D -:1053800070E080E090E00E94C14B0E94434C4B01D2 -:105390005C0166277727CB0164197509860997098F -:1053A0000E94764C2B013C01F101E05CFF4F6081D3 -:1053B0007181828193810E94744C698B7A8B8B8B73 -:1053C0009C8B20E030E0A901C301B2010E94D44BC4 -:1053D000882379F129893A894B895C89CA01B90105 -:1053E0000E94A94E6D8B7E8B8F8B988F29813A817D -:1053F0004B815C81CA01B9010E94A94E9B01AC019D -:105400006D897E898F89988D0E94FA4A69837A8393 -:105410008B839C83A3019201C301B2010E94FB4ACA -:105420009B01AC0169817A818B819C810E94DB4B5D -:1054300004C060E070E080E090E00E94B14CD101D7 -:1054400050962D913D914D915C91539729833A83CC -:105450004B835C8329013A01481859086A087B0884 -:105460000E94434C461A570A680A790A77FE6CC0B4 -:1054700020E030E0A901C701B6010E94D44B882387 -:1054800009F445C0A7019601C701B6010E94FB4A75 -:105490002B013C0169817A818B819C810E94744C33 -:1054A0009B01AC01C301B2010E94A94E2B013C013A -:1054B0002D853E854F855889CA01B9010E94A94EA4 -:1054C0009B01AC01C301B2010E94FA4A2B013C01CD -:1054D00029893A894B895C89CA01B9010E94A94E80 -:1054E0009B01AC01C301B2010E94FB4A4B015C016C -:1054F00020E030E040E850E4C701B6010E94A94E28 -:105500009B01AC01C501B4010E94DB4B04C060E00B -:1055100070E080E090E00E94C14B0E94434C4B0140 -:105520005C01B7FE03C0812C912C540129813A8182 -:105530004B815C8182169306A406B50610F04901E2 -:105540005A01412C512C32018FB7F894F101E45BE0 -:10555000FF4F9081911125C0D10154968D929D925B -:10556000AD92BC925797480C591C6A1C7B1CF101E8 -:10557000408E518E628E738E2D813E814F81588573 -:10558000DC962D933D934D935C93DF97A05CBF4FCA -:1055900029853A854B855C852D933D934D935C938E -:1055A00013978FBF68960FB6F894DEBF0FBECDBFBE -:1055B000DF91CF911F910F91FF90EF90DF90CF90EF -:1055C000BF90AF909F908F907F906F905F904F9023 -:1055D0003F902F900895AF92BF92CF92DF92EF92BB -:1055E000FF920F931F93CF93DF935B017A016115B5 -:1055F000710509F475C04115510509F471C0FB012D -:1056000002A513A5D4A5C5A5CE01202F312F492F62 -:10561000582F66A177A180A591A50E94D44B88231D -:1056200009F45EC0F50187A981114BC0F701C6A03E -:10563000D7A0E0A4F1A4A7019601DE01602F712F8D -:105640008B2F9A2F0E94D74D1816DCF5A7019601D3 -:10565000C701B6010E94A94E6B017C01F50182A928 -:1056600093A9A4A9B5A9BC01CD0190589B01AC0197 -:105670000E94FB4AF50126A537A540A951A90E9421 -:10568000A94E9B01AC01C701B6010E94FA4A0E94D3 -:10569000164F6B017C01762F272F3D2D4E2D5F2D50 -:1056A000FE01602F712F8F2F9E2F0E94D44B87FFFA -:1056B00003C06801ED2EFC2E5C2D4D2D3E2D2F2DAF -:1056C00003C0502F412F9E01852F942FA32FB22F5F -:1056D000F50186A397A3A0A7B1A781E0F50186AB4A -:1056E000DF91CF911F910F91FF90EF90DF90CF90BE -:1056F000BF90AF900895CF92DF92FF920F931F93C8 -:10570000CF93DF931F92CDB7DEB7809108058091CC -:1057100008052091070590E0821B91098F70992759 -:1057200004970CF12091080523502F7040E050E0C1 -:1057300000E010E08DE4F82E12C0211101C020E13C -:105740002150F29E6001112489E095E0C80ED91E17 -:10575000B801C60129833FDFA80186012981809114 -:1057600007052813EACF0F90DF91CF911F910F917A -:10577000FF90DF90CF9008952F923F924F925F92CB -:105780006F927F928F929F92AF92BF92CF92DF9251 -:10579000EF92FF920F931F93CF93DF93EC011B01C6 -:1057A000009709F464C08FA9811161C08EA09FA0E9 -:1057B000A8A4B9A4FB01C6A0D7A0E0A4F1A42C2DF5 -:1057C0003D2D4E2D5F2DC501B4010E94D44B87FFA6 -:1057D0004EC0A5019401C501B4010E94A94E2B0140 -:1057E0003C018AA89BA8ACA8BDA8C501B4019058EB -:1057F0009B01AC010E94FB4A2EA53FA548A959A9CF -:105800000E94A94E9B01AC01C301B2010E94FA4A59 -:105810000E94164F8B01D82FC92F762FCE01272F2C -:10582000312F492F582F6C2D7D2D8E2D9F2D0E94AD -:10583000D44B87FF03C08601DE2DCF2DCE01202F54 -:10584000312F492F5C2F6C2D7D2D8E2D9F2D0E9489 -:10585000D44B882361F09E01802F912FA32FBC2F62 -:10586000F10186A397A3A0A7B1A781E086ABDF9142 -:10587000CF911F910F91FF90EF90DF90CF90BF904D -:10588000AF909F908F907F906F905F904F903F90E0 -:105890002F900895EF92FF920F931F93CF93DF9372 -:1058A000F0900705C0E0D0E080E090E02DE4E22E2B -:1058B0000DC0EF9C80011124075F1A4FA801BE01A3 -:1058C0005BDF8F2DA3DCF82ECE01E80120910805C7 -:1058D000F212EFCF40E050E0BE01DF91CF911F9177 -:1058E0000F91FF90EF9048CF4F925F926F927F920F -:1058F0008F929F92AF92BF92CF92DF92EF92FF92E0 -:105900000F931F93CF93DF9350900705C0E0D0E033 -:105910003DE4432E34C0429E3001439E700C11245E -:1059200089E095E0680E791E209729F18EA98111F2 -:1059300004C0F30186A98823F1F0CAA0DBA0ECA083 -:10594000FDA0A7019601F30166A177A180A591A50D -:105950000E94DB4B4B015C01A70196016EA17FA168 -:1059600088A599A50E94DB4BAB01BC019501840180 -:10597000CE0151DC1EAA852D49DC582EE301252DD0 -:10598000332727FD30958091080590E028173907C7 -:1059900009F0C1CF2097E9F0CAA0DBA0ECA0FDA0E0 -:1059A000A70196016DEC7CEC8CE49DE30E94DB4B3F -:1059B0004B015C01A70196016EA17FA188A599A565 -:1059C0000E94DB4BAB01BC0195018401CE0123DCBD -:1059D0001EAADF91CF911F910F91FF90EF90DF9062 -:1059E000CF90BF90AF909F908F907F906F905F907F -:1059F0004F90089580DE4EDF77CF10920805109209 -:105A0000070580E1E9EDF9E0DF011D928A95E9F7EC -:105A10001092490A10924A0A10924B0A10924C0AAC -:105A200010924D0A10924E0A10924F0A1092500A8C -:105A30001092510A1092520A1092530A1092540A6C -:105A40001092550A1092560A1092570A1092580A4C -:105A50001092590A10925A0A10925B0A10925C0A2C -:105A60000895CF939091070580910805981709F143 -:105A7000209107058DE4289FF0011124EF5AFA4F79 -:105A8000C08130E04DE410C0429FF0011124EF5A74 -:105A9000FA4F80819181A281B381892B8A2B8B2B34 -:105AA00009F03F5F2F5F2F70809108052813ECCF1E -:105AB0000AC060918102662321F070E08EE00E94AE -:105AC0000922C0E030E080918102811107C03111CC -:105AD00005C060E070E08EE00E94092280918102A2 -:105AE000882341F0CC2331F06C2F70E08EE0CF9111 -:105AF0000C940922CF9108952F923F924F925F927A -:105B00006F927F928F929F92AF92BF92CF92DF92CD -:105B1000EF92FF920F931F93CF93DF93CDB7DEB732 -:105B2000CD56D1090FB6F894DEBF0FBECDBF2C0104 -:105B30003B014A015901EFA6FBAA0CAB19AFDEAE3F -:105B4000CDAE8091080562DBAA968FAFAA97082F89 -:105B5000112707FD109505C00E94E24181E00E94D7 -:105B600038108091070590E080179107A9F32091E4 -:105B7000250A3091260A4091270A5091280AD2011D -:105B80006D917D918D919C910E94A94E0E94794EBC -:105B900060966FAF609761967FAF619762968FAFA7 -:105BA000629763969FAF63972091290A30912A0AE2 -:105BB00040912B0A50912C0AF301608171818281FE -:105BC00093810E94A94E0E94794E64966FAF6497AC -:105BD00065967FAF659766968FAF669767969FAF1E -:105BE000679720912D0A30912E0A40912F0A5091EB -:105BF000300AD4016D917D918D919C910E94A94EA6 -:105C00000E94794E68966FAF689769967FAF6997E3 -:105C10006A968FAF6A976B969FAF6B972091310A08 -:105C20003091320A4091330A5091340AF501608173 -:105C30007181828193810E94A94E0E94794E2296A1 -:105C40006FAF229723967FAF239724968FAF249729 -:105C500025969FAF25978091E5099091E609A0913F -:105C6000E709B091E80925962CAD3DAD4EAD5FAD8D -:105C70002597281739074A075B07C1F1609182020F -:105C8000E62FF0E0EE0FFF1FE655F54F8081918182 -:105C90000E94164120E030E046E153E40E94D44BDC -:105CA00087FF24C080910605811120C00C94D03755 -:105CB0009091C00095FFFCCF8093C60031968491EF -:105CC0008111F6CFE7EBF4E007C09091C00095FF9B -:105CD000FCCF8093C600319684918111F6CF8091DC -:105CE000C00085FFFCCF8AE08093C6008091E50963 -:105CF0009091E609A091E709B091E80925962CADAD -:105D00003DAD4EAD5FAD2597281B390B4A0B5B0BA4 -:105D1000CA01B90157FF07C09095809570956195AC -:105D20007F4F8F4F9F4F0E94764C4B015C0120E0CC -:105D300030E04DEC53E46091310A7091320A809169 -:105D4000330A9091340A0E94A94E9B01AC01C5010F -:105D5000B4010E94D74D18167CF525968CAD9DADEB -:105D6000AEADBFAD25978093E5099093E609A0936A -:105D7000E709B093E809E1EBF4E007C09091C000B7 -:105D800095FFFCCF8093C600319684918111F6CFA8 -:105D9000E1EDF4E007C09091C00095FFFCCF809347 -:105DA000C600319684918111F6CF8091C00085FFA5 -:105DB000FCCF8AE08093C600809108059DE4899F0E -:105DC00010011124A9E0B5E02A0E3B1EF101E45BAD -:105DD000FF4F10822091D9093091DA094091DB09F7 -:105DE0005091DC092BA33CA34DA35EA363964CAC5E -:105DF0005DAC6EAC7FAC6397421A530A640A750AB5 -:105E000077FE08C07094609450944094411C511CDB -:105E1000611C711CD1014D925D926D927C92139721 -:105E20002091DD093091DE094091DF095091E009B0 -:105E30002FA338A749A75AA767968CAC9DACAEACE8 -:105E4000BFAC6797821A930AA40AB50AB7FE08C0C6 -:105E5000B094A09490948094811C911CA11CB11CBE -:105E6000D10114968D929D92AD92BC92179720917C -:105E7000E1093091E2094091E3095091E4092BA72F -:105E80003CA74DA75EA76B964CAD5DAD6EAD7FADEB -:105E90006B978BA59CA5ADA5BEA5481B590B6A0B9E -:105EA0007B0B77FF07C070956095509541955F4FCC -:105EB0006F4F7F4F142F052F26966FAF26977DAB20 -:105EC000D10118964C93189719965C9319971A96C6 -:105ED0006C931A971B967C93C090E509D090E609C5 -:105EE000E090E709F090E809A0910001B09101016C -:105EF00025962CAD3DAD4EAD5FAD25972C193D09D6 -:105F00004E095F0957FF07C0509540953095219580 -:105F10003F4F4F4F5F4F0E94794F24E630E040E003 -:105F200050E00E94C34FF101248735874687578789 -:105F3000812F902F2696AFAD2697BDA9881599057C -:105F4000AA05BB0514F4D501C40182179307A40761 -:105F5000B50714F4DA01C901930182014816590604 -:105F60006A067B0614F48C019D01D10150960D93B5 -:105F70001D932D933C935397063011052105310550 -:105F800010F40C94E237F101E85BFF4F809181023D -:105F900090E0A0E0B0E080839183A283B383639616 -:105FA0002CAD3DAD4EAD5FAD63978BA19CA1ADA176 -:105FB000BEA1281739074A075B0724F0D101909644 -:105FC0001C9203C081E0F10180A367962CAD3DAD2A -:105FD0004EAD5FAD67978FA198A5A9A5BAA5281763 -:105FE00039074A075B073CF4D10190968C91909752 -:105FF000826090968C936B962CAD3DAD4EAD5FADAF -:106000006B978BA59CA5ADA5BEA5281739074A0798 -:106010005B073CF4D10190968C91909784609096A8 -:106020008C9325962CAD3DAD4EAD5FAD25972C15CF -:106030003D054E055F053CF4D10190968C919097FB -:10604000886090968C93EDADFEAD8081D1019196E4 -:106050008C9345284628472809F05A9AF1018481F3 -:106060009581A681B781892B8A2B8B2B09F05A9AAF -:10607000F10180859185A285B385892B8A2B8B2B95 -:1060800009F05A9AF10184859585A685B785892BF3 -:106090008A2B8B2B09F05A9AD1011C962D913D9198 -:1060A0004D915C911F972F962CAF3DAF4EAF5FAFD8 -:1060B0002F97232B242B252BE9F44090F90950909E -:1060C000FA096090FB097090FC09242D352D462DAE -:1060D000572DBFA5ABA9FCA9E9AD6B2F7A2F8F2F48 -:1060E0009E2F0E94D44B87FD0EC04FA45BA86CA8C6 -:1060F00079AC09C04090110A5090120A6090130ABE -:106100007090140AE2CF63966CAD7DAD8EAD9FADFD -:1061100063972BA13CA14DA15EA1621B730B840B65 -:10612000950B0E94764C2091250A3091260A4091C9 -:10613000270A5091280A0E94DB4B6BA37FA78BABE9 -:106140009CAB362F272F982F8CA9432F522F692FC6 -:10615000782F498B5A8B6B8B7C8B67966CAD7DADA2 -:106160008EAD9FAD67972FA138A549A55AA5621B93 -:10617000730B840B950B0E94764C2091290A309169 -:106180002A0A40912B0A50912C0A0E94DB4B162FB1 -:10619000072F8FA399AF9801982F89AD432F522FC6 -:1061A000692F782F4D8B5E8B6F8B788F6B966CADD4 -:1061B0007DAD8EAD9FAD6B972BA53CA54DA55EA586 -:1061C000621B730B840B950B0E94764C20912D0A59 -:1061D00030912E0A40912F0A5091300A0E94DB4BD9 -:1061E0006BA77DAF26968FAF26979DAB362F272FB7 -:1061F000982F8DA9432F522F692F782F498F5A8FAF -:106200006B8F7C8FA0900001B090010125966CAD42 -:106210007DAD8EAD9FAD25976C197D098E099F09C7 -:106220000E94764C2091310A3091320A4091330A13 -:106230005091340A0E94DB4B6B017C01B501882729 -:1062400077FD8095982F0E94764C9B01AC01C70189 -:10625000B6010E94A94E20E030E048EC52E40E94D2 -:10626000DB4B462F572F682F792FDB01CA014D8F4B -:106270005E8F6F8F78A3F10180809180A280B380C0 -:10628000F6E08F169104A104B104DCF4F10144811D -:1062900055816681778146305105610571058CF421 -:1062A00040855185628573854630510561057105CC -:1062B00044F4AC01BD017F7746A757A760AB71AB33 -:1062C0003CC05BA14FA53BA92CA9652F742F832F40 -:1062D000922F0E94544F6B017C01A8013FA129AD70 -:1062E000652F702F832F922F0E94544F9B01AC017A -:1062F000C701B6010E94FB4A162F072FF82EE92E80 -:106300005BA54DAD26963FAD26972DA9652F742F21 -:10631000832F922F0E94544F9B01AC01D801F701AB -:106320006B2F7A2F8F2F9E2F0E94FB4A0E94164FB1 -:10633000F10166A777A780AB91ABD1019E962D9115 -:106340003D914D915C91D19729962CAF3DAF4EAFC9 -:106350005FAF299760E070E080E89FE30E94DB4B2D -:106360009B01AC01642D752D862D972D0E94A94EA1 -:106370006FA77BAB8CAB9DAF909108058091070513 -:10638000E92FF0E0E81BF109EF70FF27FAAFE9AF62 -:10639000762F6BA99CA98DAD272F362F492F582F0B -:1063A00060E074E284E799E40E94DB4B0E94794E3E -:1063B0006BA37FA38C0129AD3AAD223031050CF4DB -:1063C0004BC06901EE24D7FCE094FE2CC701B60156 -:1063D0000E94764C20E030E040E051E40E94D44B33 -:1063E00087FF3AC04BA05FA038018091450A909189 -:1063F000460AA091470AB091480A481659066A060B -:106400007B0650F5BC01CD01641975098609970911 -:10641000660F771F881F991FA70196010E94A14F41 -:10642000CA01B9010E94744C0E94794EAB01BC01B3 -:10643000CB01BA01640D751D861D971D0E94744C19 -:106440009B01AC0160E074E284E799E40E94DB4BBD -:106450006FA77BAB8CAB9DAF7FA56BA99CA98DADC6 -:10646000272F362F492F582F29966CAD7DAD8EAD35 -:106470009FAD29970E94A94EA6966FAFA697A796A3 -:106480007FAFA797A8968FAFA897A9969FAFA99718 -:10649000362F272F982FA9968FADA997432F522FCC -:1064A000692F782FD10192964D935D936D937C93D4 -:1064B000959750966D917D918D919C9153970E94E7 -:1064C000744C6B017C017FA56BA99CA98DAD272F16 -:1064D000362F492F582FC701B6010E94A94E0E949E -:1064E000C14B0E94484C6F966CAF7DAF8EAF9FAF93 -:1064F0006F97F10160AF71AF82AF93AF9E012F5ED6 -:106500003F4F3EAB2DABAE014F5F5F4F5CA74BA73C -:1065100085E39AE0A5969FAF8EAFA597DE01919691 -:10652000BAA3A9A32B965FAF4EAF2B971BA21FA2B6 -:1065300000E81FE3EDA9FEA961917191819191910C -:10654000FEABEDABBFA5ABA9FCA9EDAD2B2F3A2F50 -:106550004F2F5E2F0E94A94EAB01BC012B96AEAD12 -:10656000BFAD2B974D935D936D937D932B96BFAFEE -:10657000AEAF2B97DB01CA01BF77A3968CAF9DAF5F -:10658000AEAFBFAFA397A596AEADBFADA5974D90EB -:106590005D906D907D90A596BFAFAEAFA597A3011E -:1065A0009201A3966CAD7DAD8EAD9FADA3970E9479 -:1065B000D74D18160CF5A3962CAD3DAD4EAD5FAD85 -:1065C000A397C301B2010E94DB4B2B01782E692EE9 -:1065D000762FC301272F352D492F582FBBA1AFA1EF -:1065E0006B2F7A2F802F912F0E94D44B87FD04C0F0 -:1065F0004BA25FA2072D162DEDA9FEA929A13AA154 -:10660000E217F30709F096CF20E030E040E85FE3BF -:10661000BBA1AFA16B2F7A2F802F912F0E94D44B5B -:1066200087FF53C03E0131E1630E711C7BA16FA156 -:10663000272F362F402F512FABA5BCA56D917D91F3 -:106640008D919C910E94A94EEBA5FCA5619371933D -:1066500081939193FCA7EBA7E615F70539F77BA18A -:106660006FA1272F362F402F512FA696BFADA6978B -:10667000A796AFADA797A896FFADA897A996EFAD3F -:10668000A9976B2F7A2F8F2F9E2F0E94A94ED10191 -:1066900092966D937D938D939C9395976F966CAD29 -:1066A0007DAD8EAD9FAD6F970E94744CBBA1AFA125 -:1066B0002B2F3A2F402F512F0E94A94E0E94484C59 -:1066C000F10160AF71AF82AF93AF29962CAD3DADB4 -:1066D0004EAD5FAD2997C701B6010E94DB4B162F67 -:1066E000072F8FA39BA781149104A104B10489F5FE -:1066F000F10184819581A681B781892B8A2B8B2B0F -:1067000041F580859185A285B385892B8A2B8B2BBA -:1067100001F52091090A30910A0A40910B0A509123 -:106720000C0AD801FFA1EBA56B2F7A2F8F2F9E2F7C -:106730000E94A94E0E94C14B7101F4E4EF0EF11CBE -:106740000E94484CD7016D937D938D939C93139732 -:10675000FDC020910D0A30910E0A40910F0A509110 -:10676000100AD801FFA1EBA56B2F702F8F2F9E2F42 -:106770000E94A94E0E94C14B0E94484CF101EC5B63 -:10678000FF4FFCA3EBA360837183828393834090CC -:10679000E9095090EA096090EB097090EC090E94B9 -:1067A000744C6FA778AB89AB9AABC501B4010E945A -:1067B000764C9B01AC016FA578A989A99AA90E9482 -:1067C000A94EA70196010E94DB4B4B015C01C3015E -:1067D000B2010E94744C9B01AC01C501B4010E943E -:1067E000D74D181634F4EBA1FCA14082518262828D -:1067F00073824090ED095090EE096090EF0970901F -:10680000F009ABA1BCA16D917D918D919C910E94ED -:10681000744C4B015C01F101648175818681978123 -:106820000E94764C9B01AC01C501B4010E94A94EA7 -:10683000A70196010E94DB4B4B015C01C301B20131 -:106840000E94744C9B01AC01C501B4010E94D74D5C -:1068500018163CF4ABA1BCA14D925D926D927C9256 -:1068600013974090F5095090F6096090F7097090E1 -:10687000F809F101EC5BFF4FFCA3EBA36081718190 -:10688000828193810E94744C4B015C012F966CAD08 -:106890007DAD8EAD9FAD2F970E94764C9B01AC01D4 -:1068A000C501B4010E94A94EA70196010E94DB4BCD -:1068B0004B015C01C301B2010E94744C9B01AC010D -:1068C000C501B4010E94D74D18163CF4ABA1BCA180 -:1068D0004D925D926D927C9213974090F109509089 -:1068E000F2096090F3097090F409EBA1FCA16081BA -:1068F0007181828193810E94744C4B015C01D101B2 -:1069000018966D917D918D919C911B970E94764C6C -:106910009B01AC01C501B4010E94A94EA7019601DB -:106920000E94DB4B6B017C01C301B2010E94744CDD -:106930009B01AC01C701B6010E94D74D181634F473 -:10694000EBA1FCA14082518262827382F101EC5B77 -:10695000FF4F60817181828193810E94744C6B0131 -:106960007C01B8019FA18BA5272F302F492F582FCD -:10697000C701B6010E94DB4B462F572F682F792F96 -:10698000AE964CAF5DAF6EAF7FAFAE97D101D296F2 -:106990004D935D936D937C93D5972DEB37E346E054 -:1069A00051E4C701B6010E94A94E0E94434CF10177 -:1069B000648F758F868F978F4090050A5090060AD6 -:1069C0006090070A7090080A29853A854B855C8596 -:1069D0006F962CAF3DAF4EAF5FAF6F978090010ABF -:1069E0009090020AA090030AB090040A20E030E0E0 -:1069F00040E05FE3C501B4010E94A94E6BA37FA3F1 -:106A00008C016F966CAD7DAD8EAD9FAD6F979F770E -:106A1000BBA1AFA12B2F3A2F402F512F0E94D74D52 -:106A200018165CF020E030E040E05FE3C301B20103 -:106A30000E94A94E6BA37FA38C01D1019296BC91B9 -:106A4000BBA7F101F3A1FFA7D1019496BC91BBAB09 -:106A5000F101F5A1FCAB7BA56FA5272F362F4B2F9E -:106A60005F2FBBA1AFA16B2F7A2F802F912F0E9498 -:106A7000D44B87FD06C02BA52BA33FA53FA30BA995 -:106A80001CA98D859E85AF85B889A3968CAF9DAFD7 -:106A9000AEAFBFAFA397C090FD09D090FE09E090C4 -:106AA000FF09F090000A20E030E040E05FE3C7011A -:106AB000B6010E94A94E6DAF7DAB2A968FAF2A9783 -:106AC0002C969FAF2C97A3966CAD7DAD8EAD9FADF0 -:106AD000A3979F77BDADADA92A96FFAD2A972C96B7 -:106AE000EFAD2C972B2F3A2F4F2F5E2F0E94D74DB3 -:106AF000181604F57DAD6DA92A969FAD2A972C96A0 -:106B00008FAD2C97272F362F492F582FBBA1AFA120 -:106B10006B2F7A2F802F912F0E94D44B87FD0AC0B4 -:106B20009DAD9BA3ADA9AFA32A960FAD2A972C9636 -:106B30001FAD2C97E9ADFAAD32970CF434C127E1C3 -:106B400037EB41ED58E36091590A70915A0A8091F0 -:106B50005B0A90915C0A0E94D74D18160CF023C175 -:106B60002091490A30914A0A40914B0A50914C0AAF -:106B700029AF3AAF4BAF5CAF69817A818B819C8141 -:106B80000E94FA4A6DAB2A967FAF2A972C968FAF58 -:106B90002C97A4969FAFA49780914D0A90914E0A8E -:106BA000A0914F0AB091500A21968CAF9DAFAEAF25 -:106BB000BFAF21979C01AD016D817E818F8198854A -:106BC0000E94FA4AA6966FAFA697A7967FAFA7979F -:106BD000A8968FAFA897A9969FAFA9977DA92A9647 -:106BE0006FAD2A972C969FAD2C97A4968FADA49746 -:106BF000272F362F492F582FDB01FC016B2F7A2FBF -:106C00008F2F9E2F0E94A94E6DAB7EAB8FAB98AF9E -:106C1000A6967FADA697A7966FADA797A8969FADAE -:106C2000A897A9968FADA997272F362F492F582FB0 -:106C3000DB01FC016B2F7A2F8F2F9E2F0E94A94E14 -:106C40009B01AC016DA97EA98FA998AD0E94FB4A5A -:106C50000E94164F6DAB7EAB8FAB98AF69AD7AAD2E -:106C60008BAD9CAD9F7727E137EB41ED58E30E9458 -:106C7000D74D181684F021966CAD7DAD8EAD9FADCD -:106C800021979F7727E137EB41ED58E30E94D74DDD -:106C9000181634F00BC09BA59BA3AFA5AFA304C0EF -:106CA000BBA5BBA3EFA5EFA30BA91CA9A301920150 -:106CB0006DA97EA98FA998AD0E94D74D1816ACF486 -:106CC0002DA93EA94FA958ADC301B2010E94DB4BCB -:106CD0009B01AC01BBA1AFA16B2F7A2F802F912F0D -:106CE0000E94A94E6BA37FA38C012091510A309181 -:106CF000520A4091530A5091540A6F966CAD7DAD83 -:106D00008EAD9FAD6F970E94FA4A2B013C01E8942B -:106D100077F8A5019401C301B2010E94D74D18165E -:106D20009CF4A3019201C501B4010E94DB4B9B01BD -:106D3000AC01BBA1AFA16B2F7A2F802F912F0E94A6 -:106D4000A94E6BA37FA38C012091550A3091560A5E -:106D50004091570A5091580AA3966CAD7DAD8EAD07 -:106D60009FADA3970E94FA4A4B015C01E894B7F8E3 -:106D7000A7019601C501B4010E94D74D18169CF4D5 -:106D8000A5019401C701B6010E94DB4B9B01AC0138 -:106D9000BBA1AFA16B2F7A2F802F912F0E94A94EFC -:106DA0006BA37FA38C013BA12FA1432F522F602FF8 -:106DB000712FD1019A964D935D936D937C939D971E -:106DC000AE966CAD7DAD8EAD9FADAE9790589B01EC -:106DD000AC010E94FB4A29962CAD3DAD4EAD5FAD96 -:106DE00029970E94A94E9B01AC016BE077ED83E2ED -:106DF0009BE30E94FA4A0E94164F6B01F82EE92E7F -:106E0000762FC701272F3D2D492F582FBBA1AFA1AA -:106E10006B2F7A2F802F912F0E94D44B87FD04C0B7 -:106E2000CBA2DFA20F2D1E2D3BA12FA1432F522F4E -:106E3000602F712FF10146A357A360A771A7C70167 -:106E40002C2D3D2D492F5E2DBBA5AFA5FBA9ECA98F -:106E50006B2F7A2F8F2F9E2F0E94D44B18162CF059 -:106E600081E0D101D7968C9302C0F10117AA81E08D -:106E7000D101D6968C9380E1FE013196A9E4BAE067 -:106E800001900D928A95E1F73BA52FA59BA98CA9AE -:106E9000432F522F692F782F4093590A50935A0A43 -:106EA00060935B0A70935C0A232F352F492F582F6C -:106EB0006DEC7CEC8CE49DE30E94DB4B6B017C0170 -:106EC0007BA56FA59BA98CA9272F362F492F582F5B -:106ED000BBA1AFA16B2F7A2F802F912F0E94DB4B8C -:106EE000AB01BC0197018601C1010E940B29AA9642 -:106EF000BFADAA97B093080563962CAD3DAD4EADDE -:106F00005FAD63972093D9093093DA094093DB0989 -:106F10005093DC0967968CAD9DADAEADBFAD679764 -:106F20008093DD099093DE09A093DF09B093E00917 -:106F30006B962CAD3DAD4EAD5FAD6B972093E109E7 -:106F40003093E2094093E3095093E40925968CAD10 -:106F50009DADAEADBFAD25978093E5099093E60951 -:106F6000A093E709B093E8090E94FA2CC359DF4FB8 -:106F70000FB6F894DEBF0FBECDBFDF91CF911F914A -:106F80000F91FF90EF90DF90CF90BF90AF909F90C8 -:106F90008F907F906F905F904F903F902F90A9C1FE -:106FA00025962CAD3DAD4EAD5FAD25972093E509FF -:106FB0003093E6094093E7095093E809E1EBF4E0E8 -:106FC0000C945F2EC359DF4F0FB6F894DEBF0FBE8F -:106FD000CDBFDF91CF911F910F91FF90EF90DF9088 -:106FE000CF90BF90AF909F908F907F906F905F9069 -:106FF0004F903F902F900895EF92FF920F931F9321 -:10700000CF93DF937B018A01E9012091250A30911A -:10701000260A4091270A5091280AFC01608171815B -:10702000828193810E94A94E0E94794EE9EDF9E098 -:1070300060837183828393832091290A30912A0A85 -:1070400040912B0A50912C0AF70160817181828155 -:1070500093810E94A94E0E94794EEDEDF9E0608384 -:1070600071838283938320912D0A30912E0A40915F -:107070002F0A5091300AF8016081718182819381D9 -:107080000E94A94E0E94794EE1EEF9E0608371837F -:10709000828393832091310A3091320A4091330ADE -:1070A0005091340A688179818A819B810E94A94E1E -:1070B0000E94794EE5EEF9E06083718382839383C9 -:1070C0009F0141EE59E06DED79E089ED99E05AD7E5 -:1070D0001092590A10925A0A10925B0A10925C0A96 -:1070E0001092490A10924A0A10924B0A10924C0AC6 -:1070F00010924D0A10924E0A10924F0A1092500AA6 -:107100001092510A1092520A1092530A1092540A85 -:107110001092550A1092560A1092570A1092580A65 -:10712000DF91CF911F910F91FF90EF9008952091E3 -:10713000310A3091320A4091330A5091340AFC01ED -:1071400060817181828193810E94A94E0E94794E53 -:10715000E5EEF9E06083718382839383CF014EC7AC -:1071600080930605089580916F0A8111B5C08091C2 -:107170006E0A8111B1C080916D0A8111ADC0089570 -:107180009091C00095FFFCCF8093C600319684910A -:107190008111F6CFE5EFF4E007C09091C00095FFB4 -:1071A000FCCF8093C600319684918111F6CF8091F7 -:1071B0006F0A882349F1E4E0F5E007C09091C00030 -:1071C00095FFFCCF8093C600319684918111F6CF54 -:1071D0006091700A7091710A8091720A9091730A9D -:1071E0000E94764C2091250A3091260A4091270A68 -:1071F0005091280A0E94DB4BAB01BC0122E030E039 -:1072000081E894E00E94FF2480916E0A882349F16E -:10721000E8E0F5E007C09091C00095FFFCCF8093B7 -:10722000C600319684918111F6CF6091740A7091F5 -:10723000750A8091760A9091770A0E94764C209187 -:10724000290A30912A0A40912B0A50912C0A0E9457 -:10725000DB4BAB01BC0122E030E081E894E00E940E -:10726000FF2480916D0A882349F1ECE0F5E007C026 -:107270009091C00095FFFCCF8093C6003196849119 -:107280008111F6CF6091780A7091790A80917A0A1B -:1072900090917B0A0E94764C20912D0A30912E0A03 -:1072A00040912F0A5091300A0E94DB4BAB01BC0188 -:1072B00022E030E081E894E00E94FF248091C00049 -:1072C00085FFFCCF8AE08093C60010926F0A10926F -:1072D0006E0A10926D0A0895EFEEF4E058CF109206 -:1072E0006F0A10926E0A10926D0A08958093210120 -:1072F0000895EFE6F0E080818260808308951F9218 -:107300000F920FB60F9211240F931F932F933F9359 -:107310004F935F936F937F938F939F93AF93BF939D -:10732000EF93FF938091800A9091810A892B09F055 -:1073300056C19091080580910705981771F0E0916A -:1073400007058DE4E89FF0011124E75FFA4FDF01A4 -:10735000A45BBF4F81E08C9302C0E0E0F0E0F093CB -:10736000810AE093800A309709F433C1DF01A45BFE -:10737000BF4F81E08C931092820A1092830A109280 -:10738000840A1092850A94AD85AD9093860A809305 -:10739000870A692F782F613187E2780710F060E162 -:1073A00077E281E08093880A6832710510F468E220 -:1073B00070E068527109611588E07807E0F0872F66 -:1073C0009927880F991F880F991F805F9A4FFC019A -:1073D000329625913491AA27639FA001629F410DA7 -:1073E0005A1F06944A1F5A1F1124FC0125913491FB -:1073F000241B350B1EC0CB01969587958C7F805F33 -:10740000964FFC01259134910296FC0145915491CF -:10741000FB01E770FF274E9FC0014F9F900D5E9FBD -:10742000900D1124A3E096958795AA95E1F7281B66 -:10743000390B24363105A0F4E8E5F2E006C090915E -:10744000C00095FFFCCF8093C60081918111F7CFDA -:107450004AE050E081E894E00E94572424E630E0BE -:10746000C901A0E0B0E08093890A90938A0AA093B2 -:107470008B0AB0938C0A3093890020938800E091A6 -:10748000800AF091810A60AD71AD613187E27807C1 -:1074900010F060E177E281E08093880A683271053C -:1074A00010F468E270E068527109611588E07807AD -:1074B000D0F0872F9927880F991F880F991F805F19 -:1074C0009A4FFC01329645915491AA27659F9001ED -:1074D000649F210D3A1F06942A1F3A1F1124FC01B4 -:1074E000859194911DC09B01369527952C7F205F37 -:1074F000364FF901859194912E5F3F4FF9014591E7 -:107500005491FB01E770FF274E9F90014F9F300D74 -:107510005E9F300D112443E0369527954A95E1F79B -:10752000821B930B84369105A0F4E8E5F2E006C0D7 -:107530009091C00095FFFCCF8093C600819181118E -:10754000F7CF4AE050E081E894E00E94572484E6B7 -:1075500090E090938E0A80938D0AE091800AF091DA -:10756000810A80899189A289B389B695A795979553 -:107570008795B095A095909581959F4FAF4FBF4F40 -:1075800080938F0A9093900AA093910AB093920AE5 -:107590008093930A9093940AA093950AB093960AC5 -:1075A0008093970A9093980AA093990AB0939A0AA5 -:1075B00080939B0A90939C0AA0939D0AB0939E0A85 -:1075C00010927C0A10927D0A10927E0A10927F0A15 -:1075D00006C080ED97E09093890080938800E09149 -:1075E000800AF091810A309709F46EC480A18093DB -:1075F0009F0A80FF3BC016988FEF80931D018091FA -:1076000021018823B9F123B1217031E0232759F1F9 -:107610008091A00A882339F180819181A281B38170 -:10762000181619061A061B06F4F480915D0A90914B -:107630005E0AA0915F0AB091600A8093700A9093ED -:10764000710AA093720AB093730A30936F0A80890B -:107650009189A289B38980937C0A90937D0AA09333 -:107660007E0AB0937F0A2093A00A04C0169A81E094 -:1076700080931D0180919F0A81FF40C0149A8FEF73 -:1076800080931E01809121018823E1F123B131E033 -:1076900026952170232779F18091A10A882359F139 -:1076A000E091800AF091810A84819581A681B78159 -:1076B000181619061A061B06F4F48091610A9091B7 -:1076C000620AA091630AB091640A8093740A90934D -:1076D000750AA093760AB093770A30936E0A808970 -:1076E0009189A289B38980937C0A90937D0AA093A3 -:1076F0007E0AB0937F0A2093A10A04C0149881E007 -:1077000080931E0180919F0A82FF41C046988FEFAF -:1077100080931F01809121018823E9F123B131E099 -:1077200022FB222720F9232779F18091A20A8823BE -:1077300059F1E091800AF091810A80859185A285B6 -:10774000B385181619061A061B06F4F48091650A0B -:107750009091660AA091670AB091680A8093780AAE -:107760009093790AA0937A0AB0937B0A30936D0ABA -:1077700080899189A289B38980937C0A90937D0A3C -:10778000A0937E0AB0937F0A2093A20A04C0469A6F -:1077900081E080931F0180919F0A83FF03C0459879 -:1077A0008FEF02C0459A81E08093200120E030E015 -:1077B000BDC18091C00087FF19C0E091C600409113 -:1077C000020550910305CA0101968F7799276091B0 -:1077D0000405709105058617970741F0DA01AE5749 -:1077E000BB4FEC939093030580930205E091800AD0 -:1077F000F091810A80918F0A9091900AA091910A4C -:10780000B091920A4081518162817381840F951FEA -:10781000A61FB71F80938F0A9093900AA093910A96 -:10782000B093920A181619061A061B060CF4159A3C -:107830008091930A9091940AA091950AB091960A2A -:107840004481558166817781840F951FA61FB71FDC -:107850008093930A9093940AA093950AB093960A02 -:10786000181619061A061B060CF4139AE091800AE2 -:10787000F091810A8091970A9091980AA091990AB3 -:10788000B0919A0A4085518562857385840F951F52 -:10789000A61FB71F8093970A9093980AA093990AFE -:1078A000B0939A0A181619061A061B060CF4479A82 -:1078B00080919B0A90919C0AA0919D0AB0919E0A8A -:1078C0004485558566857785840F951FA61FB71F4C -:1078D00080939B0A90939C0AA0939D0AB0939E0A62 -:1078E000181619061A061B060CF4179A80918F0AAF -:1078F0009091900AA091910AB091920A18161906D7 -:107900001A061B065CF5E091800AF091810A408915 -:10791000518962897389841B950BA60BB70B8093E1 -:107920008F0A9093900AA093910AB093920A409183 -:107930001D0180915D0A90915E0AA0915F0AB0914D -:10794000600A840F911DA11DB11D80935D0A909363 -:107950005E0AA0935F0AB093600A15988091930A1B -:107960009091940AA091950AB091960A181619065A -:107970001A061B065CF5E091800AF091810A4089A5 -:10798000518962897389841B950BA60BB70B809371 -:10799000930A9093940AA093950AB093960A409103 -:1079A0001E018091610A9091620AA091630AB091D0 -:1079B000640A840F911DA11DB11D8093610A9093EB -:1079C000620AA093630AB093640A13988091970A9D -:1079D0009091980AA091990AB0919A0A18161906DE -:1079E0001A061B065CF5E091800AF091810A408935 -:1079F000518962897389841B950BA60BB70B809301 -:107A0000970A9093980AA093990AB0939A0A409182 -:107A10001F018091650A9091660AA091670AB09152 -:107A2000680A840F911DA11DB11D8093650A909372 -:107A3000660AA093670AB093680A479880919B0AE8 -:107A400090919C0AA0919D0AB0919E0A1816190661 -:107A50001A061B065CF5E091800AF091810A4089C4 -:107A6000518962897389841B950BA60BB70B809390 -:107A70009B0A90939C0AA0939D0AB0939E0A409102 -:107A800020018091690A90916A0AA0916B0AB091D5 -:107A90006C0A840F911DA11DB11D8093690A9093FA -:107AA0006A0AA0936B0AB0936C0A179880917C0ABB -:107AB00090917D0AA0917E0AB0917F0A0196A11D46 -:107AC000B11D80937C0A90937D0AA0937E0AB093A7 -:107AD0007F0A40917C0A50917D0A60917E0A7091E4 -:107AE0007F0A2F5F3F4FE091800AF091810A8089E1 -:107AF0009189A289B389481759076A077B07B0F0B3 -:107B000040917C0A50917D0A60917E0A70917F0AB3 -:107B1000E091800AF091810A84899589A689B789C4 -:107B200084179507A607B70748F4CBC08091880A49 -:107B300090E0281739070CF43CCEE2CF4091890A37 -:107B400050918A0A60918B0A70918C0A048D158D70 -:107B5000268D378DAA27419FB12D529FC001629F6C -:107B6000900D619F800D911D429FB00D811D9A1F48 -:107B7000519FB00D811D9A1F609FB00D811D9A1FEE -:107B8000509FB10D8A1F9A1FB6958A1F9A1F112404 -:107B900044AD55AD480F591F5093870A4093860A4C -:107BA00080AD91ADA2ADB3AD60E070E084179507F4 -:107BB000A607B70720F49093870A8093860A6091FE -:107BC000860A7091870A613187E2780710F060E1D8 -:107BD00077E281E08093880A6832710510F468E2E8 -:107BE00070E068527109611588E07807E0F0872F2E -:107BF0009927880F991F880F991F805F9A4FFC0162 -:107C0000329625913491AA27639FA001629F410D6E -:107C10005A1F06944A1F5A1F1124FC0125913491C2 -:107C2000241B350B1EC0CB01969587958C7F805FFA -:107C3000964FFC01259134910296FC014591549197 -:107C4000FB01E770FF274E9FC0014F9F900D5E9F85 -:107C5000900D1124A3E096958795AA95E1F7281B2E -:107C6000390B24363105A0F4E8E5F2E006C0909126 -:107C7000C00095FFFCCF8093C60081918111F7CFA2 -:107C80004AE050E081E894E00E94572424E630E086 -:107C900030938900209388008091890A90918A0A04 -:107CA000A0918B0AB0918C0A820F931FA11DB11D68 -:107CB0008093890A90938A0AA0938B0AB0938C0AC6 -:107CC000DEC040917C0A50917D0A60917E0A7091DD -:107CD0007F0A808D918DA28DB38D84179507A6079D -:107CE000B70708F0C4C04091820A5091830A60919E -:107CF000840A7091850A048D158D268D378DAA27EB -:107D0000419FB12D529FC001629F900D619F800DD8 -:107D1000911D429FB00D811D9A1F519FB00D811D75 -:107D20009A1F609FB00D811D9A1F509FB10D8A1F31 -:107D30009A1FB6958A1F9A1F11242091860A3091A6 -:107D4000870AE05CFF4F2817390718F4208131813A -:107D500002C0281B390B80819181A281B381A901C6 -:107D600060E070E0481759076A077B0708F49C0138 -:107D7000B901213187E2380710F060E177E281E054 -:107D80008093880A6832710510F468E270E06852E6 -:107D90007109611588E07807E0F0872F9927880F2F -:107DA000991F880F991F805F9A4FFC013296259189 -:107DB0003491AA27639FA001629F410D5A1F069428 -:107DC0004A1F5A1F1124FC0125913491241B350BA5 -:107DD0001EC0CB01969587958C7F805F964FFC01E6 -:107DE000259134910296FC0145915491FB01E77075 -:107DF000FF274E9FC0014F9F900D5E9F900D112455 -:107E000043E0969587954A95E1F7281B390B243670 -:107E10003105A0F4E8E5F2E006C09091C00095FFBE -:107E2000FCCF8093C60081918111F7CF4AE050E0EA -:107E300081E894E00E94572424E630E030938900E2 -:107E4000209388008091820A9091830AA091840AED -:107E5000B091850A820F931FA11DB11D8093820AE4 -:107E60009093830AA093840AB093850A08C08091F6 -:107E70008D0A90918E0A909389008093880040919A -:107E80007C0A50917D0A60917E0A70917F0AE09190 -:107E9000800AF091810A80899189A289B389481763 -:107EA00059076A077B0780F01092810A1092800AB6 -:107EB0009091080580910705981731F0809107058A -:107EC0008F5F8F7080930705FF91EF91BF91AF9106 -:107ED0009F918F917F916F915F914F913F912F91E2 -:107EE0001F910F910F900FBE0F901F9018950E9A33 -:107EF0000C9A3E9A3D9A529A529A529A529A2098C5 -:107F0000289A2198299A22982A9A0D9A0B9A3F9A90 -:107F10000F9AA1E8B0E08C918F7E8C938C91886051 -:107F20008C93E0E8F0E080818D7F808380818E7F7C -:107F3000808380818F73808380818F7C80838C910C -:107F4000887F82608C9380E090E490938900809396 -:107F500088001092850010928400EFE6F0E08081A6 -:107F60008260808381E0C2D9789408959091080559 -:107F700080910705981729F025D281E00E943810DA -:107F8000F5CF0895CF93DF93EFB7F894EC01888194 -:107F90009981AA81BB8180935D0A90935E0AA09328 -:107FA0005F0AB093600AEB0188819981AA81BB8145 -:107FB0008093610A9093620AA093630AB093640A63 -:107FC000EA0188819981AA81BB818093650A909397 -:107FD000660AA093670AB093680AE90188819981CB -:107FE000AA81BB818093690A90936A0AA0936B0A65 -:107FF000B0936C0AEFBFDF91CF9108952FB7F8943B -:10800000FC0180819181A281B3818093690A909360 -:108010006A0AA0936B0AB0936C0A2FBF08950F935E -:108020001F939FB7F89424E0829FF0011124E35A34 -:10803000F54F00811181228133819FBFB801C901B1 -:108040001F910F91089592DF5A985A985A985A980A -:10805000089520912A0130912B0140912C015091DB -:108060002D0160E070E08FE793E40E94DB4B6093AA -:10807000B10A7093B20A8093B30A9093B40A089538 -:108080008055954FFC01808190E008950F931F93D8 -:10809000CF93DF93EC01662309F461C0E7EFFDE0C5 -:1080A00007C09091C00095FFFCCF8093C600319629 -:1080B00084918111F6CF4AE050E070E081E894E0CD -:1080C0000E943C24EEEFFDE007C09091C00095FFB8 -:1080D000FCCF8093C600319684918111F6CF8091B8 -:1080E000C00085FFFCCF8AE08093C6000E940F107D -:1080F00036C0C901880F991F880F991FFC01E45EE3 -:10810000F14F659174916C177D073CF52150310951 -:10811000220F331F220F331FF901E65EF14F059145 -:108120001491245E314FF90145915491FC01E65EB2 -:10813000F14F25913491C41BD50B201B310BC29FED -:10814000C001C39F900DD29F900D1124641B750B2D -:108150000E948E4F600F711F13C04F5F01C041E03E -:10816000242F30E04D3309F0C4CF2D33310531F4E5 -:10817000EAE0FFE085919491BC0102C060E070E00C -:1081800020EF3FE3261B370BC901DF91CF911F91F1 -:108190000F910895CF93DF9321E030E0D901AA0F2A -:1081A000BB1FAA0FBB1FFD01E45EF14F65917491E7 -:1081B0006817790744F521503109220F331F220F28 -:1081C000331FF901E65EF14FC591D491245E314F22 -:1081D000F90145915491FD01E65EF14F25913491ED -:1081E000FC01E41BF50B2C1B3D0BE29FC001E39F40 -:1081F000900DF29F900D1124641B750B0E948E4F01 -:108200006C0F7D1F0BC02F5F3F4F2D33310509F0E1 -:10821000C5CFEAE0FFE085919491BC0120EF3FE3F8 -:10822000261B370BC901DF91CF9108952F923F9202 -:108230004F925F926F927F928F929F92AF92BF9276 -:10824000CF92DF92EF92FF920F931F93CF93DF9322 -:108250008C01662351F1E7EFFDE007C09091C0006B -:1082600095FFFCCF8093C600319684918111F6CFA3 -:108270004AE050E070E081E894E00E943C24EEE0A7 -:10828000FFE007C09091C00095FFFCCF8093C6002F -:10829000319684918111F6CF8091C00085FFFCCF8B -:1082A0008AE08093C6000E940F10C0EFDFE3C01B7E -:1082B000D10B41E05EC09C01220F331F220F331F00 -:1082C000F901E65EF14F65907490C615D7050CF084 -:1082D0004FC00197880F991F880F991FFC01E45E1A -:1082E000F14F25903490865E914FFC0105911491D9 -:1082F000F901E45EF14F45905490B101882777FD74 -:108300008095982F0E94764C6B017C01BE01601B0A -:10831000710B882777FD8095982F0E94764C4B0132 -:108320005C01B20162197309882777FD8095982F47 -:108330000E94764C9B01AC01C501B4010E94A94E7C -:108340004B015C01B301601B710B882777FD8095A1 -:10835000982F0E94764C9B01AC01C501B4010E948C -:10836000DB4B9B01AC01C701B6010E94FB4A17C061 -:108370004F5F842F90E04D3309F09DCFCD9759F496 -:10838000ECE0FFE065917491882777FD8095982F48 -:108390000E94764C04C060E070E080E090E0DF91E5 -:1083A000CF911F910F91FF90EF90DF90CF90BF90F2 -:1083B000AF909F908F907F906F905F904F903F9085 -:1083C0002F9008952F923F924F925F926F927F92DB -:1083D0008F929F92AF92BF92CF92DF92EF92FF92D5 -:1083E0000F931F93CF93DF9300D0CDB7DEB780916B -:1083F000A30A882309F4B8C18FB7F8941092A30A8E -:108400008FBF60E08091AA0A9091AB0A0FDF6B01E9 -:108410007C019B01AC016091A40A7091A50A809136 -:10842000A60A9091A70A0E94FA4AB62EA72E182FE4 -:10843000092FA5019801852F942FA32FB22F809388 -:10844000B50A9093B60AA093B70AB093B80A20E091 -:1084500030E040E251E4D501F8016B2F7A2F8F2FE5 -:108460009E2F0E94D74D18160CF41BC120E030E05F -:1084700040E251ECD501F8016B2F7A2F8F2F9E2F00 -:108480000E94D44B87FD09C18091B90A8111FAC0BD -:1084900020912E0130912F014091300150913101F6 -:1084A000D501F8016B2F7A2D8F2F902F0E94A94EA6 -:1084B000762E672E89839A83A301382F292F852F43 -:1084C000942FA32FB22F8093BE0A9093BF0AA0933C -:1084D000C00AB093C10A2091BA0A3091BB0A4091F8 -:1084E000BC0A5091BD0AD501F8016B2F7A2D8F2F50 -:1084F000902F0E94FB4A8B012C018090C20A909021 -:10850000C30AA090C40AB090C50A282D392D4A2D5F -:108510005B2D602F712F842D952D0E94D44B87FFEA -:108520009BC084012501802F912FA42DB52D809310 -:10853000BA0A9093BB0AA093BC0AB093BD0A2091DB -:108540002A0130912B0140912C0150912D01602F77 -:10855000712F842D952D0E94A94E4B015C01862F11 -:10856000992DAA2DBB2D8093C60A9093C70AA0937C -:10857000C80AB093C90A2091CA0A3091CB0A409127 -:10858000CC0A5091CD0AC701B6010E94FA4A209147 -:1085900026013091270140912801509129010E9424 -:1085A000A94E20ED3CEC4CE45DE30E94A94E1B017A -:1085B0002C0123E333E343E75FE36091CE0A70913C -:1085C000CF0A8091D00A9091D10A0E94A94E9B01B6 -:1085D000AC01C201B1010E94FB4A8B012C01862F24 -:1085E000912FA42DB52D8093CE0A9093CF0AA093FE -:1085F000D00AB093D10AC092CA0AD092CB0AE092B4 -:10860000CC0AF092CD0A282D392D4A2D5B2DD301AD -:10861000F980EA806B2F762D8F2D9E2DECD7202FA1 -:10862000312F442D552DE6D78B017C0120E030E021 -:10863000A901712F9F2D0E94D44B87FD3CC020E0E3 -:1086400030E04FE753E4602F712F8E2D9F2D0E9455 -:10865000D74D1816A4F528C08090B10A9090B20AA0 -:10866000A090B30AB090B40A282D392D4A2D5B2D65 -:10867000602F712F842D952D0E94D74D18160CF068 -:1086800052CF4FCF1092BA0A1092BB0A1092BC0A76 -:108690001092BD0A1092B90AFBCE81E08093B90A0C -:1086A0000AC081E08093B90A00E010E08FE7E82E6D -:1086B00093E4F92E04C000E010E0E12CF12C2091AD -:1086C000AA0A3091AB0A4091D20A5091D30A4217BC -:1086D00053071CF01092B00A11C040913201509122 -:1086E000330124173507B4F7602F712F8E2D9F2D7E -:1086F0000E94434C759567956093B00A0E9478215B -:108700000091D40A1091D50A2091D60A3091D70A47 -:10871000601B710B820B930B6838734181059105C7 -:1087200018F10E9478216093D40A7093D50A80933F -:10873000D60A9093D70A8091A80A9091A90A181690 -:1087400019068CF42091340130913501821793077A -:1087500054F42091AC0A3091AD0A821793070CF0C3 -:1087600002C02C9A01C02C980F900F90DF91CF91EE -:108770001F910F91FF90EF90DF90CF90BF90AF903F -:108780009F908F907F906F905F904F903F902F9031 -:1087900008952F923F924F925F926F927F928F92A5 -:1087A0009F92AF92BF92CF92DF92EF92FF920F9380 -:1087B0001F93CF93DF93C0EFDFE3C81BD90B81E09A -:1087C00090E09C01220F331F220F331FF901E65E58 -:1087D000F14F65907490C615D7050CF04DC0019708 -:1087E000880F991F880F991FFC01E45EF14F2590B7 -:1087F0003490865E914FFC0105911491F901E45E7D -:10880000F14F45905490B101882777FD8095982FBE -:108810000E94764C6B017C01BE01601B710B8827A6 -:1088200077FD8095982F0E94764C4B015C01B20138 -:1088300062197309882777FD8095982F0E94764CDE -:108840009B01AC01C501B4010E94A94E4B015C0122 -:10885000B301601B710B882777FD8095982F0E94CC -:10886000764C9B01AC01C501B401A5D79B01AC01BD -:10887000C701B601C0D60FC001968D33910509F02E -:10888000A0CFECE0FFE065917491882777FD80959B -:10889000982F0E94764CDF91CF911F910F91FF90FE -:1088A000EF90DF90CF90BF90AF909F908F907F9090 -:1088B0006F905F904F903F902F9008951092C20A52 -:1088C0001092C30A1092C40A1092C50A20912A017C -:1088D00030912B0140912C0150912D0160E070E00E -:1088E0008FE793E468D76093B10A7093B20A8093DC -:1088F000B30A9093B40A239A249A569A61E070E0DE -:108900008EE00E94192187ED80937A00EEE7F0E077 -:1089100010828081816080838081826080838081F9 -:108920008460808380818460808380E888BDEEE6F7 -:10893000F0E08081846080836AEF70E080E090E006 -:108940000E94AA2160E085E090E0A0DB9093D30A2A -:108950008093D20A60E083E191E098DB9093330149 -:108960008093320186E990E015DC90933501809385 -:1089700034010895089560E080E090E087DB109274 -:10898000A40A1092A50A1092A60A1092A70A80E0E3 -:1089900090E000DC9093AD0A8093AC0A1092AF0A8D -:1089A0001092AE0A1092B00A2B981092B10A10924F -:1089B000B00A1092B10A1092B30A1092B20A109241 -:1089C000B20A1092AD0A1092AC0A2C9808952F9218 -:1089D0003F924F925F926F927F928F929F92AF924F -:1089E000BF92CF92DF92EF92FF920F931F93CF939C -:1089F000DF93CDB7DEB7E1970FB6F894DEBF0FBEB9 -:108A0000CDBF688B798B8A8B9B8B0E9478216C8B76 -:108A10007D8B8E8B9F8BECE6F2E006C09091C000C0 -:108A200095FFFCCF8093C60081918111F7CF809193 -:108A3000C00085FFFCCF8AE08093C6009CDF8FE7F3 -:108A40008093B00A4C885D886E887F884C865D86EE -:108A50006E867F86AFE7CA2ED12CE12CF12CBFE7C2 -:108A60008B2E912CA12CB12C8EA69FA6A8AAB9AAB8 -:108A700021E02CA31B861A86E0E1FDE084908FA202 -:108A8000E8E1FDE0949098A6EDE1FDE0A490A9A6B0 -:108A9000E4E2FDE0B490BAA6EBE2FDE084908BA6A0 -:108AA000E1E3FDE094909CA68091A30A882309F459 -:108AB000A9C28FB7F8941092A30A8FBF60E080918B -:108AC000AA0A9091AB0AB2DB6E837F83888799876D -:108AD000762F6F81982F8985272F362F492F582F72 -:108AE000B88DA98DEA8DFB8D6B2F7A2FCF010E9457 -:108AF000D74D181644F0AE80A88EBF80B98E8884FA -:108B00008A8E99849B8E7E816F8198858985272F97 -:108B1000362F492F582F612F722D832D902F44D639 -:108B200087FD04C01E812F8038840985ACA0AA204F -:108B300009F42FC3788969899A898B89272F362F61 -:108B4000492F582FBE81AF81E885F9856B2F7A2F89 -:108B5000CF010E94D74D18160CF054C20E94782104 -:108B6000641975098609970969387341810591056A -:108B700008F448C28EA59FA5A8A9B9A98C199D097A -:108B8000AE09BF09B595A795979587958093B00ACB -:108B90000E9478216C877D878E879F874B015C01BF -:108BA00084189508A608B70888A299A2AAA2BBA211 -:108BB0009888988EA988A98EBA88BA8E8B888B8E51 -:108BC000E8C20E9478218C849D84AE84BF84681999 -:108BD00079098A099B09693873418105910508F46F -:108BE00010C20E9478212B013C018A849B84892831 -:108BF00009F4EDC1DC01CB018C849D84AE84BF847B -:108C000088199909AA09BB0988A099A0AAA0BBA0A4 -:108C1000880E991EAA1EBB1E28A139A14AA15BA1DC -:108C2000281B390B4A0B5B0BCA01B901A70196013E -:108C30000E947F4FA50194010E94C34F8EA59FA55E -:108C4000A8A9B9A9280F391F4A1F5B1F2431310574 -:108C50004105510524F12EA73FA748AB59AB2C3E47 -:108C600031054105510544F02BEE30E040E050E085 -:108C70002EA73FA748AB59AB8EA59FA5A8A9B9A918 -:108C800080389105A105B105C4F0EEEFCE2ED12CB0 -:108C9000E12CF12CC81AD90AEA0AFB0A12C024E115 -:108CA00030E040E050E02EA73FA748AB59AB74E15D -:108CB000C72ED12CE12CF12C04C0CEA4DFA4E8A84F -:108CC000F9A88FA1E0E1FDE008C09091C00095FFF8 -:108CD000FCCF8093C600319684918111F6CF2AE0B3 -:108CE00030E04EA55FA568A979A981E894E00E94CB -:108CF000062488A5E8E1FDE008C09091C00095FF3A -:108D0000FCCF8093C600319684918111F6CF2AE082 -:108D100030E0B701A60181E894E00E94062489A50D -:108D2000EDE1FDE008C09091C00095FFFCCF80937D -:108D3000C600319684918111F6CF22E030E0412FB8 -:108D4000522D632D702F81E894E00E94FF248AA5A4 -:108D5000E4E2FDE008C09091C00095FFFCCF809355 -:108D6000C600319684918111F6CF22E030E0F88D73 -:108D7000E98D9A8D8B8D4F2F5E2F692F782F81E88B -:108D800094E00E94FF248091C00085FFFCCF8AE020 -:108D90008093C6004A855B85433051050CF417C1AA -:108DA000C701B601A3D520E030E040E850E4D1D7B8 -:108DB0006C8F7D8F8E8F9F8F212F322D432D502FC3 -:108DC000B88DA98DEA8D1B8D6B2F7A2F8E2F912F49 -:108DD00011D420ED3FE049E450E4BBD720E030E07F -:108DE00040E05FE3B6D79B01AC016C8D7D8D8E8D2D -:108DF0009F8DE1D4362E072F182F9C8FC501B4010B -:108E000075D520E030E04AE754E4D5D4A62E972E5D -:108E1000282E892E8BA5EBE2FDE008C09091C000C2 -:108E200095FFFCCF8093C600319684918111F6CFD7 -:108E300022E030E08C8D432D502F612F782F81E878 -:108E400094E00E94FF248CA5E1E3FDE008C090912E -:108E5000C00095FFFCCF8093C600319684918111AC -:108E6000F6CF22E030E04A2D592D622D782D81E891 -:108E700094E00E94FF248091C00085FFFCCF8AE02F -:108E80008093C6002AE939E949E15FE3EC8D632D5F -:108E9000702F812F9E2F5DD7362E072F182FB92EBA -:108EA000762F272F302F412F5B2D632D702F812F91 -:108EB0009B2DA1D32A2D392D422D582D7CD46C8F7A -:108EC0007CA38DA39EA32A2D392D422D582D632DD1 -:108ED000702F812F9B2D3DD720E030E040E05EE3F6 -:108EE00038D7A62E972E282E892EE7E3FDE007C05F -:108EF0009091C00095FFFCCF8093C600319684917D -:108F00008111F6CF8091C00085FFFCCF8AE080936D -:108F1000C600E4E4FDE007C09091C00095FFFCCFDF -:108F20008093C600319684918111F6CF22E030E023 -:108F3000432D502F612F7B2D81E894E00E94FF2468 -:108F40008091C00085FFFCCF8AE08093C600EAE4F0 -:108F5000FDE007C09091C00095FFFCCF8093C60054 -:108F6000319684918111F6CF22E030E0FC8DECA1A6 -:108F70009DA18EA14F2F5E2F692F782F81E894E05D -:108F80000E94FF248091C00085FFFCCF8AE080937F -:108F9000C600E0E5FDE007C09091C00095FFFCCF62 -:108FA0008093C600319684918111F6CF22E030E0A3 -:108FB0004A2D592D622D782D81E894E00E94FF24DE -:108FC0008091C00085FFFCCF8AE08093C6008EA50B -:108FD0009FA5A8A9B9A98C0D9D1DAE1DBF1DB59556 -:108FE000A795979587958093B00A8A859B8501966A -:108FF0009B878A87188929883A880B8991E09CA3E6 -:1090000001C01CA220E030E040EA51E4B889A989FF -:10901000EA89FB896B2F7A2FCF01EDD29B01AC013E -:10902000BE81AF81E885F9856B2F7A2FCF01BFD53F -:10903000181694F4E6E5FDE007C09091C00095FF96 -:10904000FCCF8093C600319684918111F6CF809138 -:10905000C00085FFFCCF99C00E9478218C889D8834 -:10906000AE88BF88681979098A099B09613D7740F4 -:109070008105910508F440C00E9478216C8B7D8B9E -:109080008E8B9F8BEFE7FDE007C09091C00095FFAE -:10909000FCCF8093C600319684918111F6CF60E0B9 -:1090A0008091AA0A9091AB0AC1D8AB01BC0122E021 -:1090B00030E081E894E00E94FF24E5E8FDE007C08D -:1090C0009091C00095FFFCCF8093C60031968491AB -:1090D0008111F6CF80E090E00E9440404AE050E0ED -:1090E000BC0181E894E00E943C248091C00085FF8F -:1090F000FCCF8AE08093C6000E9478216A837B833C -:109100008C839D830E9478218C849D84AE84BF844F -:10911000840C951CA61CB71C2A813B814C815D8167 -:10912000281939094A095B09260F371F481F591F9B -:1091300021383F444241510590F0E9E8FDE007C085 -:109140009091C00095FFFCCF8093C600319684912A -:109150008111F6CF8091C00085FFFCCF16C0AA8593 -:10916000BB8516970CF4A0CCE6EAFDE007C0909111 -:10917000C00095FFFCCF8093C60031968491811189 -:10918000F6CF8091C00085FFFCCF8AE08093C600B7 -:1091900013C0788969899A898B89272F362F492F9F -:1091A000582FBE81AF81E885F9856B2F7A2FCF01CB -:1091B000FBD287FD06CD25CFE1960FB6F894DEBF32 -:1091C0000FBECDBFDF91CF911F910F91FF90EF9018 -:1091D000DF90CF90BF90AF909F908F907F906F90D7 -:1091E0005F904F903F902F900895CF93DF931F9201 -:1091F000CDB7DEB78983BFDB0E941621698181115B -:109200002FC0E7EFFDE007C08091C00085FFFCCFD5 -:109210009093C600319694919111F6CF4AE050E0B8 -:1092200070E081E894E00E943C248091C00085FFBA -:10923000FCCF8AE08093C600EBE2FFE007C090918C -:10924000C00095FFFCCF8093C600319684918111B8 -:10925000F6CF8091C00085FFFCCF8AE08093C600E6 -:109260000F90DF91CF910895CF93DF931F92CDB7E9 -:10927000DEB7898380DB0E941621698181112FC0AE -:10928000E7EFFDE007C08091C00085FFFCCF909321 -:10929000C600319694919111F6CF4AE050E070E00B -:1092A00081E894E00E943C248091C00085FFFCCFBF -:1092B0008AE08093C600E8E5FFE007C09091C00017 -:1092C00095FFFCCF8093C600319684918111F6CF33 -:1092D0008091C00085FFFCCF8AE08093C6000F908C -:1092E000DF91CF9108952C980E941621811121C001 -:1092F000E7EFFDE007C09091C00095FFFCCF8093A1 -:10930000C600319684918111F6CFE5E8FFE007C0F1 -:109310009091C00095FFFCCF8093C6003196849158 -:109320008111F6CF8091C00085FFFCCF8AE0809349 -:10933000C60008951F920F920FB60F9211242F931B -:109340003F934F935F936F937F938F939F93AF93CD -:10935000BF93EF93FF9380913601811106C08091F6 -:10936000B00A8093D80A81112B9A9091D80A8091E3 -:109370003601891708F02B988F5F8F77809336011D -:109380008091D90A833009F443C020F48130D1F0B0 -:10939000A8F50CC0853009F461C008F453C08630CC -:1093A00009F476C0873009F09EC07EC010927B0021 -:1093B00080E480937C0080917A00806480937A00BE -:1093C00081E019C020917800309179008091DA0A0B -:1093D0009091DB0AA091DC0AB091DD0A820F931F05 -:1093E000A11DB11D8093DA0A9093DB0AA093DC0AD9 -:1093F000B093DD0A82E08093D90A75C082E480933D -:109400007C0080917A00806480937A0083E0F3CFBF -:1094100020917800309179008091DE0A9091DF0AE6 -:10942000A091E00AB091E10A820F931FA11DB11D26 -:109430008093DE0A9093DF0AA093E00AB093E10ADA -:1094400084E0D9CF10927B0081E480937C008091EE -:109450007A00806480937A0085E0CDCF20917800F7 -:10946000309179008091E20A9091E30AA091E40A98 -:10947000B091E50A820F931FA11DB11D8093E20AEE -:109480009093E30AA093E40AB093E50A86E0B3CF91 -:1094900010927B0082E480937C0080917A0080644B -:1094A00080937A0087E0A7CF2091780030917900EF -:1094B0008091E60A9091E70AA091E80AB091E90A42 -:1094C000820F931FA11DB11D8093E60A9093E70AB6 -:1094D000A093E80AB093E90A1092D90A8091EA0AA7 -:1094E0008F5F8093EA0A8091EA0A803108F471C0A4 -:1094F0002FEF3FE38091DA0A9091DB0AA901481B24 -:10950000590BCA015093AB0A4093AA0A4091DE0A54 -:109510005091DF0A241B350B3093A90A2093A80A27 -:1095200021E02093A30A1092EA0A1092DA0A10921C -:10953000DB0A1092DC0A1092DD0A1092E20A109205 -:10954000E30A1092E40A1092E50A1092E60A1092D9 -:10955000E70A1092E80A1092E90A1092DE0A1092C5 -:10956000DF0A1092E00A1092E10A20913201309154 -:1095700033018217930744F01092AF0A1092AE0A9B -:1095800080E033DE0E94DB202091AA0A3091AB0AF2 -:109590008091D20A9091D30A8217930744F01092D7 -:1095A000AF0A1092AE0A80E05FDE0E94DB202091BD -:1095B000A80A3091A90A80913401909135012817A9 -:1095C00039073CF01092AD0A1092AC0A8CDE0E9472 -:1095D000DB20FF91EF91BF91AF919F918F917F9190 -:1095E0006F915F914F913F912F910F900FBE0F9010 -:1095F0001F9018955058BB27AA270ED076C23FD28D -:1096000030F044D220F031F49F3F11F41EF40FC229 -:109610000EF4E095E7FBDCC1E92F89D280F3BA179D -:10962000620773078407950718F071F49EF5B8C2B6 -:109630000EF4E0950B2EBA2FA02D0B01B90190016D -:109640000C01CA01A0011124FF27591B99F0593FB1 -:1096500050F4503E68F11A16F040A22F232F342FF9 -:109660004427585FF3CF469537952795A795F04047 -:109670005395C9F77EF41F16BA0B620B730B840B5C -:10968000BAF09150A1F0FF0FBB1F661F771F881F14 -:10969000C2F70EC0BA0F621F731F841F48F487956C -:1096A00077956795B795F7959E3F08F0B3CF93955B -:1096B000880F08F09927EE0F979587950895DFD1C9 -:1096C00058F080E891E009F49EEFE0D128F040E8FE -:1096D00051E059F45EEF09C0AAC162C2E92FE078F7 -:1096E00026D268F3092E052AC1F326173707480743 -:1096F000590738F00E2E07F8E02569F0E025E06400 -:109700000AC0EF6307F8009407FADB01B9019D0175 -:10971000DC01CA01AD01EF935DD0E7D10AD05F91C2 -:10972000552331F02BED3FE049E450FD49EC63CF88 -:109730000895DF93DD27B92FBF7740E85FE3161662 -:10974000170648075B0710F4D92F96D29F938F9383 -:109750007F936F93A9D3E0E7F0E06CD1C6D12F914E -:109760003F914F915F9101D3DD2349F09058A2EAD8 -:109770002AED3FE049EC5FE3D0785D274DDFDF91D4 -:10978000B4C1F7D180F09F3740F491110EF409C2B3 -:1097900060E070E080E89FE3089526F01B16611DED -:1097A000711D811D1BC135C1EFD008F481E0089502 -:1097B00075D1E395ABC10CD098C168D140F05FD1B1 -:1097C00030F021F45F3F19F003C15111EAC12FC1FC -:1097D000AED198F39923C9F35523B1F3951B550BDB -:1097E000BB27AA2762177307840738F09F5F5F4F74 -:1097F000220F331F441FAA1FA9F333D00E2E3AF0B5 -:10980000E0E830D091505040E695001CCAF729D0CE -:10981000FE2F27D0660F771F881FBB1F261737071D -:109820004807AB07B0E809F0BB0B802DBF01FF274D -:1098300093585F4F2AF09E3F510568F0C9C0B1C1EF -:109840005F3FECF3983EDCF3869577956795B79587 -:10985000F7959F5FC9F7880F911D9695879597F9A2 -:109860000895E1E0660F771F881FBB1F621773071B -:109870008407BA0720F0621B730B840BBA0BEE1F30 -:1098800088F7E095089504D06894B1118AC10895CD -:1098900056D188F09F5790F0B92F9927B751A0F073 -:1098A000D1F0660F771F881F991F1AF0BA95C9F774 -:1098B00012C0B13081F074D1B1E0089571C1672F49 -:1098C000782F8827B85F39F0B93FCCF38695779524 -:1098D0006795B395D9F73EF490958095709561950D -:1098E0007F4F8F4F9F4F0895E89409C097FB3EF438 -:1098F00090958095709561957F4F8F4F9F4F9923DD -:10990000A9F0F92F96E9BB279395F695879577955A -:109910006795B795F111F8CFFAF4BB0F11F460FF1A -:109920001BC06F5F7F4F8F4F9F4F16C0882311F072 -:1099300096E911C0772321F09EE8872F762F05C086 -:10994000662371F096E8862F70E060E02AF09A9521 -:10995000660F771F881FDAF7880F9695879597F916 -:10996000089507D180F09F3740F491110EF019C18E -:1099700060E070E080E89FEB089526F41B16611DFF -:10998000711D811D2BC045C0990F0008550FAA0BF2 -:10999000E0E8FEEF16161706E807F907C0F0121602 -:1099A0001306E407F50798F0621B730B840B950B05 -:1099B00039F40A2661F0232B242B252B21F408955A -:1099C0000A2609F4A140A6958FEF811D811D0895F7 -:1099D00097F99F6780E870E060E00895882371F44C -:1099E000772321F09850872B762F07C0662311F438 -:1099F00099270DC09051862B70E060E02AF09A956F -:109A0000660F771F881FDAF7880F9695879597F965 -:109A100008959F3F31F0915020F487957795679591 -:109A2000B795880F911D9695879597F908959FEFA3 -:109A300080EC0895DF93CF931F930F93FF92EF92E3 -:109A4000DF927B018C01689405C0DA2EEF018DD185 -:109A5000FE01E894A5912591359145915591AEF37C -:109A6000EF01DADDFE019701A801DA9479F7DF90C2 -:109A7000EF90FF900F911F91CF91DF9108950024F7 -:109A80000A941616170618060906089500240A9463 -:109A900012161306140605060895C9CF50D0E8F330 -:109AA000E894E0E0BB279F57F0F02AED3FE049EC57 -:109AB00006C0EE0FBB0F661F771F881F28F0B23A53 -:109AC00062077307840728F0B25A620B730B840B8A -:109AD000E3959A9572F7803830F49A95BB0F661F1C -:109AE000771F881FD2F7904896CF092E0394000C59 -:109AF00011F4882352F0BB0F40F4BF2B11F460FF28 -:109B000004C06F5F7F4F8F4F9F4F0895EF93E0FF2B -:109B100006C0A2EA2AED3FE049EC5FEB7DDDE5DF20 -:109B20000F90039401FC9058EDE9F0E0C7C157FD98 -:109B30009058440F551F59F05F3F71F04795880FBB -:109B400097FB991F61F09F3F79F087950895121652 -:109B500013061406551FF2CF4695F1DF08C01616FE -:109B600017061806991FF1CF8695710561050894AF -:109B70000895E5DFA0F0BEE7B91788F4BB279F384A -:109B800060F41616B11D672F782F8827985FF7CFDE -:109B9000869577956795B11D93959639C8F3089585 -:109BA000E894BB2766277727CB0197F90895ECDE69 -:109BB00008F48FEF089563DF19F068DF09F037CFFD -:109BC00007CFB901CA0125CF9F775F77B0DF98F340 -:109BD0009923B9F35523B9F3FF27951758F4E52FC7 -:109BE000E91BED3070F75E3B10F0F1E41CC09034DF -:109BF000E0F40AC0E92FE51BED3028F79E3B10F09A -:109C0000F1E411C0503488F4F9EA88232AF09A95D7 -:109C1000660F771F881FDAF744232AF05A95220F20 -:109C2000331F441FDAF79F1B5F1BFF931F930F9394 -:109C3000FF92EF9279018A01BB27AB2F9B01AC0108 -:109C400096D09701A801BF937B018C01AA27BA2F58 -:109C5000B901CA018CD0AF919701A801EF90FF9094 -:109C60000F911F91D9DC41DFE1D04F9140FF089562 -:109C7000552747FD509509C09B01AC0160E070E09D -:109C800080E89FE398CDA4CEC4CE59DFE8F39923B2 -:109C9000D9F3940F511DBBF39150504094F059F0FB -:109CA000882332F0660F771F881F91505040C1F70C -:109CB0009E3F510544F7880F911D9695879597F91A -:109CC00008955F3FACF0983E9CF0BB278695779552 -:109CD0006795B79508F4B1609395C1F7BB0F58F736 -:109CE00011F460FFE8CF6F5F7F4F8F4F9F4FE3CF3F -:109CF00058CF25DF58F19E5758F19851A0F0E9F060 -:109D0000983020F5092E9927660F771F881F991F15 -:109D10000A94D1F712C0062E672F782F8827985FF4 -:109D200011F4000C07C0993FB4F3869577956795B9 -:109D30009395D9F7611D711D811D3EF49095809515 -:109D4000709561957F4F8F4F9F4F0895689429CFED -:109D500027CF0BD0CACE93DE28F098DE18F09523DB -:109D600009F036CE64CE11241CCFE1DEA0F3959F1E -:109D7000D1F3950F50E0551F629FF001729FBB27F2 -:109D8000F00DB11D639FAA27F00DB11DAA1F649F9E -:109D90006627B00DA11D661F829F2227B00DA11D51 -:109DA000621F739FB00DA11D621F839FA00D611DD7 -:109DB000221F749F3327A00D611D231F849F600DF8 -:109DC000211D822F762F6A2F11249F5750408AF031 -:109DD000E1F088234AF0EE0FFF1FBB1F661F771FBD -:109DE000881F91505040A9F79E3F510570F0F0CD6B -:109DF000D8CE5F3FECF3983EDCF386957795679578 -:109E0000B795F795E7959F5FC1F7FE2B880F911DDA -:109E10009695879597F908959F9340DE0F9007FCDC -:109E2000EE5F74CE11F40EF402CEF3CD88DED0F3E3 -:109E30009923D9F3CEF39F57550B87FF38D00024D1 -:109E4000A0E640EA900180585695979528F4805CEA -:109E5000660F771F881F20F026173707480730F452 -:109E6000621B730B840B202931294A2BA69517946A -:109E70000794202531254A2758F7660F771F881F3A -:109E800020F026173707480730F4620B730B840B5A -:109E9000200D311D411DA09581F7B901842F9158E6 -:109EA000880F9695879508959B01AC0152CF9150EC -:109EB0005040660F771F881FD2F708959F938F93A6 -:109EC0007F936F93FF93EF939B01AC0142DFEF9180 -:109ED000FF91B0DD2F913F914F915F913ACF6ED0BE -:109EE000A59F900DB49F900DA49F800D911D1124EE -:109EF0000895B7FFF4CFF3DF821B930B0895DB01C6 -:109F00008F939F93ECDFBF91AF91A29F800D911D26 -:109F1000A39F900DB29F900D1124089597FB072EDB -:109F200016F4009406D077FD08D054D007FC05D075 -:109F30003EF4909581959F4F0895709561957F4F60 -:109F40000895A1E21A2EAA1BBB1BFD010DC0AA1F7A -:109F5000BB1FEE1FFF1FA217B307E407F50720F092 -:109F6000A21BB30BE40BF50B661F771F881F991F0D -:109F70001A9469F760957095809590959B01AC0156 -:109F8000BD01CF010895052E97FB16F4009406D06D -:109F900057FD0CD0D6DF07FC09D07EF49095809554 -:109FA000709561957F4F8F4F9F4F089550954095C5 -:109FB000309521953F4F4F4F5F4F0895A29FB001BD -:109FC000B39FC001A39F01D0B29F700D811D1124CA -:109FD000911D0895AA1BBB1B51E107C0AA1FBB1FFF -:109FE000A617B70710F0A61BB70B881F991F5A9525 -:109FF000A9F780959095BC01CD010895A0E0B0E04F -:10A00000E3E0F0E536C58B016115710519F0FB0140 -:10A01000808391837C01F701C1907F01EF018C2D3A -:10A0200090E04AD2892BB9F7FDE2CF1204C0C99063 -:10A03000DD24D39405C02BE2C21201C0C990D12CFB -:10A040007E0141E0E41AF10843E050E06FEB7FE06D -:10A05000C7013AD2892BE1F47E0182E0E80EF11CBF -:10A0600045E050E062EC7FE0C7012ED2892B21F45D -:10A070007E01E7E0EE0EF11C0115110519F0F80163 -:10A08000F182E08210E0D0E0C0E8D110F5C0F9C064 -:10A0900043E050E067EC7FE0C70116D2892B49F41A -:10A0A0000115110509F4EAC02296F801D183C08395 -:10A0B000E5C060E070E0CB01E12CF12CEC2DE05329 -:10A0C000EA3040F5FD2DF2602D2D2870D2FE06C03D -:10A0D000211126C02FEFE21AF20A22C0222319F022 -:10A0E00041E0E41AF108A5E0B0E09B01AC01F7DE25 -:10A0F000660F771F881F991F6E0F711D811D911D9F -:10A100006839E9E97E078E07E9E19E0748F0FD2DF1 -:10A11000F66006C0EE3F39F4D3FC3DC0FD2DF8607B -:10A12000C990DF2ECBCFE53311F0E531A1F5A88141 -:10A13000AD3219F4F0E1DF2A06C0AB3221F02196EE -:10A1400021E030E004C0A981229622E030E0A05353 -:10A15000AA3018F0C21BD30B1EC0FE0120E030E075 -:10A1600020384CE034075CF4A901440F551F440F1C -:10A17000551F240F351F220F331F2A0F311DA191A8 -:10A18000A053EF01AA3060F3D4FE03C031952195AE -:10A190003109E20EF31ED1FE07C00115110521F0B1 -:10A1A0002197F801D183C0839FDB2D2D23702330AD -:10A1B00029F0162FD72FC82F092F07C0DC01CB019C -:10A1C000B058182FD92FCA2F0B2F20E030E0A9014B -:10A1D000612F7D2F8C2F902FE7DA882309F452C04E -:10A1E000F7FE08C0F194E194F10836EFC32E3FE08A -:10A1F000D32E04C02EEDC22E2FE0D22E4601F8E160 -:10A200008F1A910890E2A92EB12C14C0F601459145 -:10A21000559165917491242F352F462F572F612F1B -:10A220007D2F8C2F902F95DD162FD72FC82F092F1C -:10A23000EA18FB08EA14FB044CF724E0C21AD10820 -:10A24000B594A794C814D904A9F7612F7D2F8C2F3A -:10A25000902F282F220F292F221F2F3F31F020E08F -:10A2600030E0A901A1DA81110DC082E290E0909363 -:10A27000F00A8093EF0A06C00FEF04C010E0D0E0B0 -:10A28000C0EC0FE7612F7D2F8C2F902FCDB7DEB75D -:10A29000ECE00BC4A0E0B0E0EFE4F1E5E6C32B0195 -:10A2A0008A016115710519F0FB0180839183011505 -:10A2B000110539F09801225031092332310508F097 -:10A2C000E3C07C01F701C1917F013F018C2F90E039 -:10A2D000F3D0892BB9F7CD3229F4F701C1913F01B1 -:10A2E000D1E006C0CB3219F4F701C1913F01D0E0B3 -:10A2F0000115110509F4D6C00031110581F4CEC055 -:10A30000F3018081883719F0883509F0C1C0F30165 -:10A31000C181F2E06F0E711CD26000E110E00830E4 -:10A320001105D9F024F402301105F9F407C00A3000 -:10A33000110551F000311105C1F424C0C12CD12CFC -:10A34000E12C30E4F32E23C00AE010E02CECC22E06 -:10A35000DC2CEC2C2CE0F22E1AC008E010E0C12C12 -:10A36000D12CE12C90E1F92E12C09801442737FD41 -:10A370004095542F60E070E080E090E8E2DD6901F4 -:10A380007A0105C0C12CD12CE12C88E0F82E40E0E8 -:10A3900060E070E0CB014801AA2497FCA094BA2C9D -:10A3A000EC2FE053EA3060F02C2F21542A3110F4C6 -:10A3B000E75006C02C2F21562A3120F5EC2FE75507 -:10A3C0002E2F30E020173107ECF447FD17C0C616DA -:10A3D000D706E806F90678F09B01AC01C501B40187 -:10A3E0008EDD6E0F711D811D911D6130710581051E -:10A3F00020E8920710F04FEF01C041E0F301C19156 -:10A400003F01CECF4114510491F0442339F0F1E0E3 -:10A410006F1A7108F2017182608209C0D1FF1BC0FE -:10A42000F2E06F1A7108F2017182608214C047FF76 -:10A4300012C0D0FF05C060E070E080E090E804C08A -:10A440006FEF7FEF8FEF9FE722E230E03093F00A6B -:10A450002093EF0A16C0D0FF08C0909580957095A4 -:10A4600061957F4F8F4F9F4F0CC097FF0AC082E2CC -:10A4700090E09093F00A8093EF0A6FEF7FEF8FEFF9 -:10A480009FE76B017C0112C0C12CD12C76010EC05C -:10A49000C0E30115110509F460CF41CFC03309F0C5 -:10A4A0003ECF2ECFC03309F04FCF2ACFB601C70120 -:10A4B000CDB7DEB7E0E1F5C2911132C2803219F0BA -:10A4C00089508550D0F70895FB01DC014150504080 -:10A4D00088F08D9181341CF08B350CF4805E659191 -:10A4E00061341CF06B350CF4605E861B611171F3F6 -:10A4F000990B0895881BFCCFFC018191861721F0F0 -:10A500008823D9F7992708953197CF010895FB0142 -:10A5100051915523A9F0BF01DC014D91451741111F -:10A52000E1F759F4CD010190002049F04D9140151B -:10A530004111C9F3FB014111EFCF81E090E0019798 -:10A540000895A0E1B0E0E6EAF2E59BC20F89188D1C -:10A5500086E08C831A8309838FEF9FE79E838D8328 -:10A56000AE01455E5F4F588B4F87698D7A8DCE0166 -:10A57000019608D0EF81F885E00FF11F10826096F8 -:10A58000E4E09BC2ACE0B0E0E7ECF2E56CC27C0139 -:10A590006B018A01FC0117821682838181FFBAC197 -:10A5A00088248394912C8C0E9D1EF7019381F601D3 -:10A5B00093FD859193FF81916F01882309F4A6C1D2 -:10A5C000853239F493FD859193FF81916F01853236 -:10A5D00021F4B70190E0BDD1E8CF712C312C20E0FF -:10A5E0002032A8F48B3261F028F4803251F08332AB -:10A5F00071F40BC08D3239F0803349F4216028C0EA -:10A600002260246025C0286023C0206121C027FD6E -:10A6100027C0382F30533A3078F426FF06C0FAE0CE -:10A620007F9E300D1124732E13C08AE0389E300DAA -:10A630001124332E20620CC08E3221F426FD66C117 -:10A64000206406C08C3611F4206802C0883641F4BC -:10A65000F60193FD859193FF81916F018111C0CF28 -:10A66000982F9554933018F09052933028F40C5F43 -:10A670001F4FFFE3F9830DC0833631F0833771F04C -:10A68000833509F05AC022C0F801808189830E5FAA -:10A690001F4F66246394712C540114C02801F2E00A -:10A6A0004F0E511CF801A080B18026FF03C0672D1A -:10A6B00070E002C06FEF7FEFC5012C873FD13C01F6 -:10A6C00082012C856FE7262E222217C02801F2E096 -:10A6D0004F0E511CF801A080B18026FF03C0672DEA -:10A6E00070E002C06FEF7FEFC5012C871CD13C01E9 -:10A6F0002C8550E8252E222A820123FC1AC005C091 -:10A70000B70180E290E025D13A94832D90E068165D -:10A710007906B0F30EC0F50127FC859127FE8191E3 -:10A720005F01B70190E015D131103A94F1E06F1A52 -:10A7300071086114710479F7E6C0843611F0893626 -:10A7400039F5F80127FF07C060817181828193810B -:10A750000C5F1F4F08C060817181882777FD80954D -:10A76000982F0E5F1F4F4FE6642E622297FF09C09D -:10A7700090958095709561957F4F8F4F9F4FF0E832 -:10A780006F2A2AE030E0A40110D1A82EA81843C0F7 -:10A79000853731F43FEEB32EB2222AE030E024C0F8 -:10A7A00099EFB92EB2228F36B9F020F4883509F02E -:10A7B000ADC00DC0803721F0883709F0A7C002C0B6 -:10A7C00020E1B22AB4FE0BC084E0B82A08C024FFFE -:10A7D00009C0E6E0BE2A06C028E030E005C020E15E -:10A7E00030E002C020E132E0F801B7FE07C060812E -:10A7F0007181828193810C5F1F4F06C060817181DE -:10A8000080E090E00E5F1F4FA401CFD0A82EA818C3 -:10A810008FE7682E6B2066FE0BC0362D3E7FA71497 -:10A8200050F464FE0AC062FC08C0362D3E7E05C0AE -:10A83000BA2C362D03C0BA2C01C0B72C34FF0DC082 -:10A84000FE01EA0DF11D8081803311F4397E09C0CB -:10A8500032FF06C0B394B39404C0832F867809F006 -:10A86000B39433FD13C030FF0EC07A2CB31458F4E8 -:10A87000730C7B18B32C07C0B70180E290E03C87D3 -:10A8800068D0B3943C85B314B8F304C0B31410F487 -:10A890003B1801C0312C34FF11C0B70180E390E0B8 -:10A8A0003C8757D03C8532FF1CC031FF03C088E590 -:10A8B00090E002C088E790E0B7010CC0832F867853 -:10A8C00081F031FD02C080E201C08BE237FD8DE2F4 -:10A8D000B70190E03ED005C0B70180E390E039D0E9 -:10A8E0007A94A714C8F3AA94F401EA0DF11DB701F4 -:10A8F000808190E02ED0A110F6CF05C0B70180E294 -:10A9000090E027D03A943110F9CF4FCEF70126814D -:10A91000378102C02FEF3FEFC9012C96E2E1BFC0A3 -:10A92000992788270895FC01059061507040011017 -:10A93000D8F7809590958E0F9F1F0895FC01615068 -:10A94000704001900110D8F7809590958E0F9F1F51 -:10A9500008950F931F93CF93DF938C01EB018B81AD -:10A9600081FD03C00FEF1FEF1AC082FF0DC02E81C3 -:10A970003F818C819D812817390764F4E881F98132 -:10A980000193F983E88306C0E885F985802F09954E -:10A99000892B41F78E819F8101969F838E83C80109 -:10A9A000DF91CF911F910F910895FA01AA272830C6 -:10A9B00051F1203181F1E8946F936E7F6E5F7F4F8C -:10A9C0008F4F9F4FAF4FB1E03ED0B4E03CD0670F08 -:10A9D000781F891F9A1FA11D680F791F8A1F911D5B -:10A9E000A11D6A0F711D811D911DA11D20D009F4AB -:10A9F00068943F912AE0269F11243019305D3193ED -:10AA0000DEF6CF010895462F4770405D4193B3E0D5 -:10AA10000FD0C9F7F6CF462F4F70405D4A3318F07C -:10AA2000495D31FD4052419302D0A9F7EACFB4E02D -:10AA3000A6959795879577956795BA95C9F70097E5 -:10AA40006105710508959B01AC010A2E0694579586 -:10AA5000479537952795BA95C9F7620F731F841FDD -:10AA6000951FA01D08952F923F924F925F926F9273 -:10AA70007F928F929F92AF92BF92CF92DF92EF928E -:10AA8000FF920F931F93CF93DF93CDB7DEB7CA1B0F -:10AA9000DB0B0FB6F894DEBF0FBECDBF09942A883A -:10AAA000398848885F846E847D848C849B84AA84E2 -:10AAB000B984C884DF80EE80FD800C811B81AA816F -:10AAC000B981CE0FD11D0FB6F894DEBF0FBECDBF3A -:08AAD000ED010895F894FFCF99 -:10AAD8006400640000803B4500803B4500007043F3 -:10AAE800000000000080BB440160EA000001010191 -:10AAF80001010000803F75608944A97E443E713D94 -:10AB0800E841FF3FFF3F010000A04214AE9F420012 -:10AB1800002045F6C815440000FA430000FA430037 -:10AB280000A04000003442282300002823000064CD -:10AB3800000000102700005573696E6720446566A1 -:10AB480061756C742073657474696E67733A004D2F -:10AB5800313130004820004C20002569206D696E95 -:10AB68002C20256920736563004D31303420496EEF -:10AB780076616C696420657874727564657220000A -:10AB88004D31303520496E76616C69642065787482 -:10AB9800727564657220004D31303920496E7661D6 -:10ABA8006C696420657874727564657220003F0072 -:10ABB8006F6B0020703A0020693A0020643A002048 -:10ABC800633A005400496E76616C69642065787454 -:10ABD800727564657200416374697665204578749E -:10ABE80072756465723A200058595A450000010090 -:10ABF8001A0019000A000000FFFF1C001B000A00D1 -:10AC08000100FFFF170016000A000200FFFFFFFF08 -:10AC1800FFFF04000E00180015000A0003000000E2 -:10AC28000100020002002E005374657072617465A1 -:10AC380020746F2068696768203A200050494420D2 -:10AC48004175746F74756E65207374617274000059 -:00000001FF diff --git a/examples/board_reprap/marlin/pins.h b/examples/board_reprap/marlin/pins.h deleted file mode 100644 index 126ef34..0000000 --- a/examples/board_reprap/marlin/pins.h +++ /dev/null @@ -1,1122 +0,0 @@ -#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 diff --git a/examples/board_reprap/marlin/thermistortables.h b/examples/board_reprap/marlin/thermistortables.h deleted file mode 100644 index 2723d86..0000000 --- a/examples/board_reprap/marlin/thermistortables.h +++ /dev/null @@ -1,373 +0,0 @@ -#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_ - diff --git a/examples/board_reprap/src/heatpot.c b/examples/board_reprap/src/heatpot.c deleted file mode 100644 index a866a90..0000000 --- a/examples/board_reprap/src/heatpot.c +++ /dev/null @@ -1,120 +0,0 @@ -/* - heatpot.c - - Copyright 2008-2012 Michel Pollet - - 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 . - */ - -#include -#include -#include -#include -#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] = "8avr = 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; -} diff --git a/examples/board_reprap/src/heatpot.h b/examples/board_reprap/src/heatpot.h deleted file mode 100644 index 9b51d0a..0000000 --- a/examples/board_reprap/src/heatpot.h +++ /dev/null @@ -1,65 +0,0 @@ -/* - heatpot.h - - Copyright 2008-2012 Michel Pollet - - 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 . - */ - - -#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___ */ diff --git a/examples/board_reprap/src/reprap.c b/examples/board_reprap/src/reprap.c deleted file mode 100644 index 4bfc2e6..0000000 --- a/examples/board_reprap/src/reprap.c +++ /dev/null @@ -1,336 +0,0 @@ -/* - simduino.c - - Copyright 2008, 2009 Michel Pollet - - 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 . - */ - -#include -#include -#include -#include -#include -#include -#include -#include - -#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 -#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(); - -} diff --git a/examples/board_reprap/src/reprap.h b/examples/board_reprap/src/reprap.h deleted file mode 100644 index 567c493..0000000 --- a/examples/board_reprap/src/reprap.h +++ /dev/null @@ -1,47 +0,0 @@ -/* - reprap.h - - Copyright 2008-2012 Michel Pollet - - 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 . - */ - - -#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___ */ diff --git a/examples/board_reprap/src/reprap_gl.c b/examples/board_reprap/src/reprap_gl.c deleted file mode 100644 index 74df728..0000000 --- a/examples/board_reprap/src/reprap_gl.c +++ /dev/null @@ -1,698 +0,0 @@ -/* - reprap_gl.c - - Copyright 2008-2012 Michel Pollet - - 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 . - */ - -#if __APPLE__ -#define GL_GLEXT_PROTOTYPES -#include -#include -#include -#else -#define GL_GLEXT_PROTOTYPES -#include -#include -#include -#endif - -#include -#include - -#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 - -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; -} diff --git a/examples/board_reprap/src/reprap_gl.h b/examples/board_reprap/src/reprap_gl.h deleted file mode 100644 index 20ef0aa..0000000 --- a/examples/board_reprap/src/reprap_gl.h +++ /dev/null @@ -1,37 +0,0 @@ -/* - reprap_gl.h - - Copyright 2008-2012 Michel Pollet - - 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 . - */ - - -#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___ */ diff --git a/examples/board_reprap/src/stepper.c b/examples/board_reprap/src/stepper.c deleted file mode 100644 index 81acda6..0000000 --- a/examples/board_reprap/src/stepper.c +++ /dev/null @@ -1,149 +0,0 @@ -/* - stepper.c - - Copyright 2008-2012 Michel Pollet - - 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 . - */ - -#include -#include -#include - -#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] = "1avr = 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; -} - diff --git a/examples/board_reprap/src/stepper.h b/examples/board_reprap/src/stepper.h deleted file mode 100644 index 9f450ac..0000000 --- a/examples/board_reprap/src/stepper.h +++ /dev/null @@ -1,75 +0,0 @@ -/* - stepper.h - - Copyright 2008-2012 Michel Pollet - - 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 . - */ - - -#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___ */ diff --git a/examples/board_reprap/src/thermistor.c b/examples/board_reprap/src/thermistor.c deleted file mode 100644 index 613196c..0000000 --- a/examples/board_reprap/src/thermistor.c +++ /dev/null @@ -1,115 +0,0 @@ -/* - thermistor.c - - Copyright 2008-2012 Michel Pollet - - 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 . - */ - -#include -#include -#include -#include -#include -#include - -#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] = "8avr = 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); -} diff --git a/examples/board_reprap/src/thermistor.h b/examples/board_reprap/src/thermistor.h deleted file mode 100644 index a8d91e4..0000000 --- a/examples/board_reprap/src/thermistor.h +++ /dev/null @@ -1,64 +0,0 @@ -/* - thermistor.h - - Copyright 2008-2012 Michel Pollet - - 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 . - */ - - -#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___ */