summaryrefslogtreecommitdiffstats
path: root/kscreensaver/kdesavers
diff options
context:
space:
mode:
authorTimothy Pearson <[email protected]>2013-01-26 13:16:15 -0600
committerTimothy Pearson <[email protected]>2013-01-26 13:16:15 -0600
commit7e09b5c2efae58399621a938de26b9675b8ba621 (patch)
treede2c9535e1f4c48ae91910492d298eba1d593fd5 /kscreensaver/kdesavers
parent159f7e147ac33c924b3ce9050c8f03cbc54916ee (diff)
downloadtdeartwork-7e09b5c2efae58399621a938de26b9675b8ba621.tar.gz
tdeartwork-7e09b5c2efae58399621a938de26b9675b8ba621.zip
Rename a number of libraries and executables to avoid conflicts with KDE4
Diffstat (limited to 'kscreensaver/kdesavers')
-rw-r--r--kscreensaver/kdesavers/CMakeLists.txt145
-rw-r--r--kscreensaver/kdesavers/Euphoria.cpp1084
-rw-r--r--kscreensaver/kdesavers/Euphoria.h158
-rw-r--r--kscreensaver/kdesavers/EuphoriaTexture.h4138
-rw-r--r--kscreensaver/kdesavers/Flux.cpp967
-rw-r--r--kscreensaver/kdesavers/Flux.h150
-rw-r--r--kscreensaver/kdesavers/KBanner.desktop243
-rw-r--r--kscreensaver/kdesavers/KBlob.desktop227
-rw-r--r--kscreensaver/kdesavers/KClock.desktop252
-rw-r--r--kscreensaver/kdesavers/KEuphoria.desktop233
-rw-r--r--kscreensaver/kdesavers/KFiresaver.desktop233
-rw-r--r--kscreensaver/kdesavers/KFlux.desktop224
-rw-r--r--kscreensaver/kdesavers/KFountain.desktop249
-rw-r--r--kscreensaver/kdesavers/KGravity.desktop253
-rw-r--r--kscreensaver/kdesavers/KLines-saver.desktop255
-rw-r--r--kscreensaver/kdesavers/KLorenz.desktop244
-rw-r--r--kscreensaver/kdesavers/KPendulum.desktop221
-rw-r--r--kscreensaver/kdesavers/KPolygon.desktop251
-rw-r--r--kscreensaver/kdesavers/KRotation.desktop221
-rw-r--r--kscreensaver/kdesavers/KScience.desktop254
-rw-r--r--kscreensaver/kdesavers/KSlideshow.desktop251
-rw-r--r--kscreensaver/kdesavers/KSolarWinds.desktop243
-rw-r--r--kscreensaver/kdesavers/KVm.desktop253
-rw-r--r--kscreensaver/kdesavers/KWave.desktop251
-rw-r--r--kscreensaver/kdesavers/Makefile.am109
-rw-r--r--kscreensaver/kdesavers/README3
-rw-r--r--kscreensaver/kdesavers/SolarWinds.cpp778
-rw-r--r--kscreensaver/kdesavers/SolarWinds.h141
-rw-r--r--kscreensaver/kdesavers/banner.cpp509
-rw-r--r--kscreensaver/kdesavers/banner.h114
-rw-r--r--kscreensaver/kdesavers/blob.cpp527
-rw-r--r--kscreensaver/kdesavers/blob.h119
-rw-r--r--kscreensaver/kdesavers/data/CMakeLists.txt17
-rw-r--r--kscreensaver/kdesavers/data/Makefile.am11
-rw-r--r--kscreensaver/kdesavers/data/kfs_debris.oggbin28158 -> 0 bytes
-rw-r--r--kscreensaver/kdesavers/data/kfs_explode.oggbin9864 -> 0 bytes
-rw-r--r--kscreensaver/kdesavers/data/kfs_kde.pngbin9899 -> 0 bytes
-rw-r--r--kscreensaver/kdesavers/data/kfs_letters.desc84
-rw-r--r--kscreensaver/kdesavers/data/kfs_letters1.pngbin28082 -> 0 bytes
-rw-r--r--kscreensaver/kdesavers/data/kfs_letters2.pngbin26885 -> 0 bytes
-rw-r--r--kscreensaver/kdesavers/data/kfs_particle.pngbin890 -> 0 bytes
-rw-r--r--kscreensaver/kdesavers/data/kfs_particle_diastar.pngbin1100 -> 0 bytes
-rw-r--r--kscreensaver/kdesavers/data/kfs_particle_flare.pngbin6041 -> 0 bytes
-rw-r--r--kscreensaver/kdesavers/data/kfs_tux.pngbin4382 -> 0 bytes
-rw-r--r--kscreensaver/kdesavers/firesaver.ChangeLog106
-rw-r--r--kscreensaver/kdesavers/firesaver.cpp1151
-rw-r--r--kscreensaver/kdesavers/firesaver.h170
-rw-r--r--kscreensaver/kdesavers/firesaverparticle.cpp273
-rw-r--r--kscreensaver/kdesavers/firesaverparticle.h105
-rw-r--r--kscreensaver/kdesavers/firesaversetup.ui1855
-rw-r--r--kscreensaver/kdesavers/firesaversetup.ui.h400
-rw-r--r--kscreensaver/kdesavers/firesaverwriter.cpp247
-rw-r--r--kscreensaver/kdesavers/firesaverwriter.h113
-rw-r--r--kscreensaver/kdesavers/fountain.cpp461
-rw-r--r--kscreensaver/kdesavers/fountain.h143
-rw-r--r--kscreensaver/kdesavers/fountaincfg.ui192
-rw-r--r--kscreensaver/kdesavers/gravity.cpp419
-rw-r--r--kscreensaver/kdesavers/gravity.h144
-rw-r--r--kscreensaver/kdesavers/gravitycfg.ui192
-rw-r--r--kscreensaver/kdesavers/image.pngbin86063 -> 0 bytes
-rw-r--r--kscreensaver/kdesavers/kclock.cpp588
-rw-r--r--kscreensaver/kdesavers/kclock.h132
-rw-r--r--kscreensaver/kdesavers/kscience.pngbin10664 -> 0 bytes
-rw-r--r--kscreensaver/kdesavers/kvm.cpp384
-rw-r--r--kscreensaver/kdesavers/kvm.h101
-rw-r--r--kscreensaver/kdesavers/lines.cpp401
-rw-r--r--kscreensaver/kdesavers/lines.h98
-rw-r--r--kscreensaver/kdesavers/lorenz.cpp569
-rw-r--r--kscreensaver/kdesavers/lorenz.h88
-rw-r--r--kscreensaver/kdesavers/particle.pngbin1957 -> 0 bytes
-rw-r--r--kscreensaver/kdesavers/pendulum.cpp881
-rw-r--r--kscreensaver/kdesavers/pendulum.h391
-rw-r--r--kscreensaver/kdesavers/pendulumcfg.ui566
-rw-r--r--kscreensaver/kdesavers/polygon.cpp366
-rw-r--r--kscreensaver/kdesavers/polygon.h81
-rw-r--r--kscreensaver/kdesavers/rkodesolver.cpp252
-rw-r--r--kscreensaver/kdesavers/rkodesolver.h187
-rw-r--r--kscreensaver/kdesavers/rotation.cpp825
-rw-r--r--kscreensaver/kdesavers/rotation.h328
-rw-r--r--kscreensaver/kdesavers/rotationcfg.ui488
-rw-r--r--kscreensaver/kdesavers/science.cpp1151
-rw-r--r--kscreensaver/kdesavers/science.h151
-rw-r--r--kscreensaver/kdesavers/slideshow.cpp1022
-rw-r--r--kscreensaver/kdesavers/slideshow.h152
-rw-r--r--kscreensaver/kdesavers/slideshowcfg.ui176
-rw-r--r--kscreensaver/kdesavers/sspreviewarea.cpp21
-rw-r--r--kscreensaver/kdesavers/sspreviewarea.h58
-rw-r--r--kscreensaver/kdesavers/vec3.cpp105
-rw-r--r--kscreensaver/kdesavers/vec3.h214
-rw-r--r--kscreensaver/kdesavers/vm.c264
-rw-r--r--kscreensaver/kdesavers/vm.h52
-rw-r--r--kscreensaver/kdesavers/vm.xbm191
-rw-r--r--kscreensaver/kdesavers/vm.xpm493
-rw-r--r--kscreensaver/kdesavers/vm_random.c379
-rw-r--r--kscreensaver/kdesavers/vm_random.h31
-rw-r--r--kscreensaver/kdesavers/wave.cpp324
-rw-r--r--kscreensaver/kdesavers/wave.h100
-rw-r--r--kscreensaver/kdesavers/wavecfg.ui191
98 files changed, 0 insertions, 31184 deletions
diff --git a/kscreensaver/kdesavers/CMakeLists.txt b/kscreensaver/kdesavers/CMakeLists.txt
deleted file mode 100644
index 6cfcf03b..00000000
--- a/kscreensaver/kdesavers/CMakeLists.txt
+++ /dev/null
@@ -1,145 +0,0 @@
-#################################################
-#
-# (C) 2011 Golubev Alexander
-# fatzer2 (AT) gmail.com
-#
-# Improvements and feedback are welcome
-#
-# This file is released under GPL >= 2
-#
-#################################################
-
-include_directories(
- ${CMAKE_CURRENT_BINARY_DIR}
- ${CMAKE_CURRENT_SOURCE_DIR}
- ${CMAKE_BINARY_DIR}
- ${TDE_INCLUDE_DIR}
- ${TQT_INCLUDE_DIRS}
-)
-
-link_directories(
- ${TQT_LIBRARY_DIRS}
- ${TDE_LIB_DIR}
-)
-
-# ##### The "normal" screensavers ###############
-
-set( kbanner_SOURCES banner.cpp )
-set( kbanner_DESKTOP KBanner.desktop )
-set( kpolygon_SOURCES polygon.cpp )
-set( kpolygon_DESKTOP KPolygon.desktop )
-set( klines_SOURCES lines.cpp )
-set( klines_DESKTOP KLines-saver.desktop )
-set( klorenz_SOURCES lorenz.cpp )
-set( klorenz_DESKTOP KLorenz.desktop )
-set( kslideshow_SOURCES slideshow.cpp slideshowcfg.ui )
-set( kslideshow_DESKTOP KSlideshow.desktop )
-set( kblob_SOURCES blob.cpp )
-set( kblob_DESKTOP KBlob.desktop )
-set( kvm_SOURCES kvm.cpp vm.c vm_random.c )
-set( kvm_DESKTOP KVm.desktop )
-
-set( kslideshow_LINK kio-shared )
-
-set( NORMAL_SCREENSAVERS
- kbanner kpolygon kslideshow klines klorenz kblob kvm )
-
-##### X11 screensavers ##########################
-
-set( kscience_SOURCES science.cpp )
-set( kscience_DESKTOP KScience.desktop )
-
-set( X11_SCREENSAVERS kscience)
-
-##### The GL screensavers #######################
-
-set( kfountain_SOURCES fountain.cpp fountaincfg.ui )
-set( kfountain_DESKTOP KFountain.desktop )
-set( kwave_SOURCES wave.cpp wavecfg.ui )
-set( kwave_DESKTOP KWave.desktop )
-set( kgravity_SOURCES gravity.cpp gravitycfg.ui )
-set( kgravity_DESKTOP KGravity.desktop )
-set( kflux_SOURCES Flux.cpp )
-set( kflux_DESKTOP KFlux.desktop )
-set( keuphoria_SOURCES Euphoria.cpp )
-set( keuphoria_DESKTOP KEuphoria.desktop )
-set( ksolarwinds_SOURCES SolarWinds.cpp )
-set( ksolarwinds_DESKTOP KSolarWinds.desktop )
-set( krotation_SOURCES rotation.cpp rotationcfg.ui sspreviewarea.cpp
- rkodesolver.cpp vec3.cpp )
-set( krotation_DESKTOP KRotation.desktop )
-set( kpendulum_SOURCES pendulum.cpp pendulumcfg.ui sspreviewarea.cpp
- rkodesolver.cpp )
-set( kpendulum_DESKTOP KPendulum.desktop )
-set( OPENGL_SCREENSAVERS kfountain kwave kgravity kflux keuphoria ksolarwinds
- krotation kpendulum )
-
-##### The GL-Arts screensavers ##################
-
-set( kfiresaver_SOURCES firesaversetup.ui firesaverparticle.cpp
- firesaverwriter.cpp firesaver.cpp )
-set( kfiresaver_DESKTOP KFiresaver.desktop )
-set( kfiresaver_LINK artskde-shared )
-set( GL_ARTS_SCREENSAVERS kfiresaver )
-
-##### The LIBART screensavers ###################
-
-set( kclock_SOURCES kclock.cpp )
-set( kclock_DESKTOP KClock.desktop )
-
-set( LIBART_SCREENSAVERS kclock )
-
-##### LIBART conditions #########################
-
-if( WITH_LIBART )
- list( APPEND SCREENSAVERS ${LIBART_SCREENSAVERS} )
-
- include_directories( ${LIBART_INCLUDE_DIRS} )
- link_directories( ${LIBART_LIBRARY_DIRS} )
- foreach( saver ${LIBART_SCREENSAVERS} )
- list ( APPEND ${saver}_LINK ${LIBART_LIBRARIES} )
- endforeach( saver ${LIBART_SCREENSAVERS} )
-endif( WITH_LIBART )
-
-##### GL conditions #############################
-
-if( WITH_OPENGL )
- if( WITH_ARTS )
- list( APPEND OPENGL_SCREENSAVERS ${GL_ARTS_SCREENSAVERS} )
- endif( WITH_ARTS )
-
- list( APPEND SCREENSAVERS ${OPENGL_SCREENSAVERS} )
-
- include_directories( ${OPENGL_INCLUDE_DIRS} )
- link_directories( ${OPENGL_LIBRARY_DIRS} )
- foreach( saver ${OPENGL_SCREENSAVERS} )
- list ( APPEND ${saver}_LINK ${OPENGL_LIBRARIES} )
- endforeach( saver ${OPENGL_SCREENSAVERS} )
-
-endif( WITH_OPENGL )
-
-##### add normal screensavers ###################
-
-# FIXME: check for X includes/libraries
-# this screensavers will work only in X
-list( APPEND SCREENSAVERS ${X11_SCREENSAVERS} )
-list( APPEND SCREENSAVERS ${NORMAL_SCREENSAVERS} )
-
-##### create install/compile rules ##############
-foreach( saver ${SCREENSAVERS} )
- tde_add_executable( ${saver}.kss AUTOMOC
- SOURCES ${${saver}_SOURCES}
- LINK kscreensaver-shared tdeui-shared ${${saver}_LINK}
- DESTINATION ${BIN_INSTALL_DIR}
- )
- install( FILES ${${saver}_DESKTOP}
- DESTINATION ${APPS_INSTALL_DIR}/System/ScreenSavers )
-endforeach( saver ${SCREENSAVERS} )
-
-##### install various data ######################
-
-install( FILES image.png kscience.png particle.png
- DESTINATION ${DATA_INSTALL_DIR}/kscreensaver )
-
-# Actually the only screensaver tha uses this data is kfiresaver
-add_subdirectory( data )
diff --git a/kscreensaver/kdesavers/Euphoria.cpp b/kscreensaver/kdesavers/Euphoria.cpp
deleted file mode 100644
index 7f69e34e..00000000
--- a/kscreensaver/kdesavers/Euphoria.cpp
+++ /dev/null
@@ -1,1084 +0,0 @@
-//============================================================================
-//
-// Terence Welsh Screensaver - Euphoria
-// http://www.reallyslick.com/
-//
-// Ported to KDE by Karl Robillard
-//
-/*
- * Copyright (C) 2002 Terence M. Welsh
- *
- * Euphoria is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- *
- * Euphoria is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-//============================================================================
-
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <math.h>
-#include <time.h>
-#include <tqtimer.h>
-#include "Euphoria.h"
-#include "Euphoria.moc"
-#include "EuphoriaTexture.h"
-
-
-#define NUMCONSTS 9
-#define PIx2 6.28318530718f
-
-
-//----------------------------------------------------------------------------
-
-
-#include <sys/time.h>
-#include <unistd.h>
-
-
-// Returns the system time, in seconds.
-double timeGetTime()
-{
- struct timeval tp;
- gettimeofday( &tp, 0 );
- return (double)tp.tv_sec + (double)tp.tv_usec / 1000000;
-}
-
-
-//----------------------------------------------------------------------------
-
-
-class rsVec
-{
-public:
-
- float v[3];
-
- rsVec() {}
- rsVec(float xx, float yy, float zz);
-
- void set(float xx, float yy, float zz);
- float normalize();
- float dot(rsVec);
- void cross(rsVec, rsVec);
-
- float & operator [] (int i) {return v[i];}
- const float & operator [] (int i) const {return v[i];}
- rsVec & operator = (const rsVec &vec)
- {v[0]=vec[0];v[1]=vec[1];v[2]=vec[2];return *this;};
- rsVec operator + (const rsVec &vec)
- {return(rsVec(v[0]+vec[0], v[1]+vec[1], v[2]+vec[2]));};
- rsVec operator - (const rsVec &vec)
- {return(rsVec(v[0]-vec[0], v[1]-vec[1], v[2]-vec[2]));};
- rsVec operator * (const float &mul)
- {return(rsVec(v[0]*mul, v[1]*mul, v[2]*mul));};
- rsVec operator / (const float &div)
- {float rec = 1.0f/div; return(rsVec(v[0]*rec, v[1]*rec, v[2]*rec));};
- rsVec & operator += (const rsVec &vec)
- {v[0]+=vec[0];v[1]+=vec[1];v[2]+=vec[2];return *this;};
- rsVec & operator -= (const rsVec &vec)
- {v[0]-=vec[0];v[1]-=vec[1];v[2]-=vec[2];return *this;};
- rsVec & operator *= (const rsVec &vec)
- {v[0]*=vec[0];v[1]*=vec[1];v[2]*=vec[2];return *this;};
- rsVec & operator *= (const float &mul)
- {v[0]*=mul;v[1]*=mul;v[2]*=mul;return *this;};
-};
-
-
-rsVec::rsVec(float xx, float yy, float zz){
- v[0] = xx;
- v[1] = yy;
- v[2] = zz;
-}
-
-
-void rsVec::set(float xx, float yy, float zz){
- v[0] = xx;
- v[1] = yy;
- v[2] = zz;
-}
-
-
-float rsVec::normalize(){
- float length = float(sqrt(v[0] * v[0] + v[1] * v[1] + v[2] * v[2]));
- if(length == 0.0f){
- v[1] = 1.0f;
- return(0.0f);
- }
- float reciprocal = 1.0f / length;
- v[0] *= reciprocal;
- v[1] *= reciprocal;
- v[2] *= reciprocal;
- // Really freakin' stupid compiler bug fix for VC++ 5.0
- /*v[0] /= length;
- v[1] /= length;
- v[2] /= length;*/
- return(length);
-}
-
-
-float rsVec::dot(rsVec vec1){
- return(v[0] * vec1[0] + v[1] * vec1[1] + v[2] * vec1[2]);
-}
-
-
-void rsVec::cross(rsVec vec1, rsVec vec2){
- v[0] = vec1[1] * vec2[2] - vec2[1] * vec1[2];
- v[1] = vec1[2] * vec2[0] - vec2[2] * vec1[0];
- v[2] = vec1[0] * vec2[1] - vec2[0] * vec1[1];
-}
-
-
-//----------------------------------------------------------------------------
-
-
-void hsl2rgb(float h, float s, float l, float &r, float &g, float &b)
-{
- // hue influence
- if(h < 0.166667){ // full red, some green
- r = 1.0;
- g = h * 6.0f;
- b = 0.0;
- }
- else {
- if(h < 0.5){ // full green
- g = 1.0;
- if(h < 0.333333){ // some red
- r = 1.0f - ((h - 0.166667f) * 6.0f);
- b = 0.0;
- }
- else{ // some blue
- b = (h - 0.333333f) * 6.0f;
- r = 0.0;
- }
- }
- else{
- if(h < 0.833333){ // full blue
- b = 1.0;
- if(h < 0.666667){ // some green
- g = 1.0f - ((h - 0.5f) * 6.0f);
- r = 0.0;
- }
- else{ // some red
- r = (h - 0.666667f) * 6.0f;
- g = 0.0;
- }
- }
- else{ // full red, some blue
- r = 1.0;
- b = 1.0f - ((h - 0.833333f) * 6.0f);
- g = 0.0;
- }
- }
- }
-
- // saturation influence
- r = 1.0f - (s * (1.0f - r));
- g = 1.0f - (s * (1.0f - g));
- b = 1.0f - (s * (1.0f - b));
-
- // luminosity influence
- r *= l;
- g *= l;
- b *= l;
-}
-
-
-// Useful random number macros
-// Don't forget to initialize with srand()
-inline int myRandi(int x){
- return((rand() * x) / RAND_MAX);
-}
-inline float myRandf(float x){
- return(float(rand() * x) / float(RAND_MAX));
-}
-
-
-//----------------------------------------------------------------------------
-
-
-// Context pointer to allow many instances.
-static EuphoriaWidget* _ec = 0;
-
-
-class wisp
-{
-public:
-
- wisp();
- ~wisp();
- void update();
- void draw();
- void drawAsBackground();
-
-
- int density;
- float*** vertices;
- float c[NUMCONSTS]; // constants
- float cr[NUMCONSTS]; // constants' radial position
- float cv[NUMCONSTS]; // constants' change velocities
- float hsl[3];
- float rgb[3];
- float hueSpeed;
- float saturationSpeed;
-};
-
-
-wisp::wisp()
-{
- int i, j;
- float recHalfDens = 1.0f / (float(_ec->dDensity) * 0.5f);
-
- density = _ec->dDensity;
- vertices = new float**[density+1];
- for(i=0; i<=density; i++)
- {
- vertices[i] = new float*[density+1];
- for(j=0; j<=density; j++)
- {
- vertices[i][j] = new float[7];
- vertices[i][j][3] = float(i) * recHalfDens - 1.0f; // x position on grid
- vertices[i][j][4] = float(j) * recHalfDens - 1.0f; // y position on grid
- // distance squared from the center
- vertices[i][j][5] = vertices[i][j][3] * vertices[i][j][3]
- + vertices[i][j][4] * vertices[i][j][4];
- vertices[i][j][6] = 0.0f; // intensity
- }
- }
-
- // initialize constants
- for(i=0; i<NUMCONSTS; i++)
- {
- c[i] = myRandf(2.0f) - 1.0f;
- cr[i] = myRandf(PIx2);
- cv[i] = myRandf(_ec->dSpeed * 0.03f) + (_ec->dSpeed * 0.001f);
- }
-
- // pick color
- hsl[0] = myRandf(1.0f);
- hsl[1] = 0.1f + myRandf(0.9f);
- hsl[2] = 1.0f;
- hueSpeed = myRandf(0.1f) - 0.05f;
- saturationSpeed = myRandf(0.04f) + 0.001f;
-}
-
-
-wisp::~wisp()
-{
- int i, j;
-
- for(i=0; i<=density; i++)
- {
- for(j=0; j<=density; j++)
- {
- delete[] vertices[i][j];
- }
- delete[] vertices[i];
- }
- delete[] vertices;
-}
-
-
-void wisp::update()
-{
- int i, j;
- rsVec up, right, crossvec;
- // visibility constants
- static float viscon1 = float(_ec->dVisibility) * 0.01f;
- static float viscon2 = 1.0f / viscon1;
-
- // update constants
- for(i=0; i<NUMCONSTS; i++){
- cr[i] += cv[i] * _ec->elapsedTime;
- if(cr[i] > PIx2)
- cr[i] -= PIx2;
- c[i] = cos(cr[i]);
- }
-
- // update vertex positions
- for(i=0; i<=density; i++){
- for(j=0; j<=density; j++){
- vertices[i][j][0] = vertices[i][j][3] * vertices[i][j][3] * vertices[i][j][4] * c[0]
- + vertices[i][j][5] * c[1] + 0.5f * c[2];
- vertices[i][j][1] = vertices[i][j][4] * vertices[i][j][4] * vertices[i][j][5] * c[3]
- + vertices[i][j][3] * c[4] + 0.5f * c[5];
- vertices[i][j][2] = vertices[i][j][5] * vertices[i][j][5] * vertices[i][j][3] * c[6]
- + vertices[i][j][4] * c[7] + c[8];
- }
- }
-
- // update vertex normals for most of mesh
- for(i=1; i<density; i++){
- for(j=1; j<density; j++){
- up.set(vertices[i][j+1][0] - vertices[i][j-1][0],
- vertices[i][j+1][1] - vertices[i][j-1][1],
- vertices[i][j+1][2] - vertices[i][j-1][2]);
- right.set(vertices[i+1][j][0] - vertices[i-1][j][0],
- vertices[i+1][j][1] - vertices[i-1][j][1],
- vertices[i+1][j][2] - vertices[i-1][j][2]);
- up.normalize();
- right.normalize();
- crossvec.cross(right, up);
- // Use depth component of normal to compute intensity
- // This way only edges of wisp are bright
- if(crossvec[2] < 0.0f)
- crossvec[2] *= -1.0f;
- vertices[i][j][6] = viscon2 * (viscon1 - crossvec[2]);
- if(vertices[i][j][6] > 1.0f)
- vertices[i][j][6] = 1.0f;
- if(vertices[i][j][6] < 0.0f)
- vertices[i][j][6] = 0.0f;
- }
- }
-
- // update color
- hsl[0] += hueSpeed * _ec->elapsedTime;
- if(hsl[0] < 0.0f)
- hsl[0] += 1.0f;
- if(hsl[0] > 1.0f)
- hsl[0] -= 1.0f;
- hsl[1] += saturationSpeed * _ec->elapsedTime;
- if(hsl[1] <= 0.1f){
- hsl[1] = 0.1f;
- saturationSpeed = -saturationSpeed;
- }
- if(hsl[1] >= 1.0f){
- hsl[1] = 1.0f;
- saturationSpeed = -saturationSpeed;
- }
- hsl2rgb(hsl[0], hsl[1], hsl[2], rgb[0], rgb[1], rgb[2]);
-}
-
-
-void wisp::draw()
-{
- int i, j;
-
- glPushMatrix();
-
- if(_ec->dWireframe)
- {
- for(i=1; i<density; i++){
- glBegin(GL_LINE_STRIP);
- for(j=0; j<=density; j++){
- glColor3f(rgb[0] + vertices[i][j][6] - 1.0f, rgb[1] + vertices[i][j][6] - 1.0f, rgb[2] + vertices[i][j][6] - 1.0f);
- glTexCoord2d(vertices[i][j][3] - vertices[i][j][0], vertices[i][j][4] - vertices[i][j][1]);
- glVertex3fv(vertices[i][j]);
- }
- glEnd();
- }
- for(j=1; j<density; j++){
- glBegin(GL_LINE_STRIP);
- for(i=0; i<=density; i++){
- glColor3f(rgb[0] + vertices[i][j][6] - 1.0f, rgb[1] + vertices[i][j][6] - 1.0f, rgb[2] + vertices[i][j][6] - 1.0f);
- glTexCoord2d(vertices[i][j][3] - vertices[i][j][0], vertices[i][j][4] - vertices[i][j][1]);
- glVertex3fv(vertices[i][j]);
- }
- glEnd();
- }
- }
- else
- {
- for(i=0; i<density; i++){
- glBegin(GL_TRIANGLE_STRIP);
- for(j=0; j<=density; j++){
- glColor3f(rgb[0] + vertices[i+1][j][6] - 1.0f, rgb[1] + vertices[i+1][j][6] - 1.0f, rgb[2] + vertices[i+1][j][6] - 1.0f);
- glTexCoord2d(vertices[i+1][j][3] - vertices[i+1][j][0], vertices[i+1][j][4] - vertices[i+1][j][1]);
- glVertex3fv(vertices[i+1][j]);
- glColor3f(rgb[0] + vertices[i][j][6] - 1.0f, rgb[1] + vertices[i][j][6] - 1.0f, rgb[2] + vertices[i][j][6] - 1.0f);
- glTexCoord2d(vertices[i][j][3] - vertices[i][j][0], vertices[i][j][4] - vertices[i][j][1]);
- glVertex3fv(vertices[i][j]);
- }
- glEnd();
- }
- }
-
- glPopMatrix();
-}
-
-
-void wisp::drawAsBackground()
-{
- int i, j;
-
- glPushMatrix();
- glTranslatef(c[0] * 0.2f, c[1] * 0.2f, 1.6f);
-
- if(_ec->dWireframe)
- {
- for(i=1; i<density; i++){
- glBegin(GL_LINE_STRIP);
- for(j=0; j<=density; j++){
- glColor3f(rgb[0] + vertices[i][j][6] - 1.0f, rgb[1] + vertices[i][j][6] - 1.0f, rgb[2] + vertices[i][j][6] - 1.0f);
- glTexCoord2d(vertices[i][j][3] - vertices[i][j][0], vertices[i][j][4] - vertices[i][j][1]);
- glVertex3f(vertices[i][j][3], vertices[i][j][4], vertices[i][j][6]);
- }
- glEnd();
- }
- for(j=1; j<density; j++){
- glBegin(GL_LINE_STRIP);
- for(i=0; i<=density; i++){
- glColor3f(rgb[0] + vertices[i][j][6] - 1.0f, rgb[1] + vertices[i][j][6] - 1.0f, rgb[2] + vertices[i][j][6] - 1.0f);
- glTexCoord2d(vertices[i][j][3] - vertices[i][j][0], vertices[i][j][4] - vertices[i][j][1]);
- glVertex3f(vertices[i][j][3], vertices[i][j][4], vertices[i][j][6]);
- }
- glEnd();
- }
- }
- else
- {
- for(i=0; i<density; i++){
- glBegin(GL_TRIANGLE_STRIP);
- for(j=0; j<=density; j++){
- glColor3f(rgb[0] + vertices[i+1][j][6] - 1.0f, rgb[1] + vertices[i+1][j][6] - 1.0f, rgb[2] + vertices[i+1][j][6] - 1.0f);
- glTexCoord2d(vertices[i+1][j][3] - vertices[i+1][j][0], vertices[i+1][j][4] - vertices[i+1][j][1]);
- glVertex3f(vertices[i+1][j][3], vertices[i+1][j][4], vertices[i+1][j][6]);
- glColor3f(rgb[0] + vertices[i][j][6] - 1.0f, rgb[1] + vertices[i][j][6] - 1.0f, rgb[2] + vertices[i][j][6] - 1.0f);
- glTexCoord2d(vertices[i][j][3] - vertices[i][j][0], vertices[i][j][4] - vertices[i][j][1]);
- glVertex3f(vertices[i][j][3], vertices[i][j][4], vertices[i][j][6]);
- }
- glEnd();
- }
- }
-
- glPopMatrix();
-}
-
-
-//----------------------------------------------------------------------------
-
-
-EuphoriaWidget::EuphoriaWidget( TQWidget* parent, const char* name )
- : TQGLWidget(parent, name), texName(0), _wisps(0), _backwisps(0),
- feedbackmap(0), feedbacktex(0)
-{
- setDefaults( Regular );
-
- _frameTime = 1000 / 60;
- _timer = new TQTimer( this );
- connect( _timer, TQT_SIGNAL(timeout()), this, TQT_SLOT(nextFrame()) );
-}
-
-
-EuphoriaWidget::~EuphoriaWidget()
-{
- // Free memory
- if ( texName )
- glDeleteTextures( 1, &texName );
- if ( feedbacktex )
- glDeleteTextures( 1, &feedbacktex );
- delete[] _wisps;
- delete[] _backwisps;
-}
-
-
-void EuphoriaWidget::paintGL()
-{
- int i;
- static double lastTime = timeGetTime();
-
- // update time
- elapsedTime = timeGetTime() - lastTime;
- lastTime += elapsedTime;
-
- _ec = this;
-
- // Update wisps
- for(i=0; i<dWisps; i++)
- _wisps[i].update();
- for(i=0; i<dBackground; i++)
- _backwisps[i].update();
-
-
- if(dFeedback)
- {
- float feedbackIntensity = float(dFeedback) / 101.0f;
-
- // update feedback variables
- for(i=0; i<4; i++)
- {
- fr[i] += elapsedTime * fv[i];
- if(fr[i] > PIx2)
- fr[i] -= PIx2;
- }
- f[0] = 30.0f * cos(fr[0]);
- f[1] = 0.2f * cos(fr[1]);
- f[2] = 0.2f * cos(fr[2]);
- f[3] = 0.8f * cos(fr[3]);
- for(i=0; i<3; i++)
- {
- lr[i] += elapsedTime * lv[i];
- if(lr[i] > PIx2)
- lr[i] -= PIx2;
- l[i] = cos(lr[i]);
- l[i] = l[i] * l[i];
- }
-
- // Create drawing area for feedback texture
- glViewport(0, 0, feedbacktexsize, feedbacktexsize);
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity();
- gluPerspective(30.0, aspectRatio, 0.01f, 20.0f);
- glMatrixMode(GL_MODELVIEW);
-
- // Draw
- glClear(GL_COLOR_BUFFER_BIT);
- glColor3f(feedbackIntensity, feedbackIntensity, feedbackIntensity);
- glBindTexture(GL_TEXTURE_2D, feedbacktex);
- glPushMatrix();
- glTranslatef(f[1] * l[1], f[2] * l[1], f[3] * l[2]);
- glRotatef(f[0] * l[0], 0, 0, 1);
- glBegin(GL_TRIANGLE_STRIP);
- glTexCoord2f(-0.5f, -0.5f);
- glVertex3f(-aspectRatio*2.0f, -2.0f, 1.25f);
- glTexCoord2f(1.5f, -0.5f);
- glVertex3f(aspectRatio*2.0f, -2.0f, 1.25f);
- glTexCoord2f(-0.5f, 1.5f);
- glVertex3f(-aspectRatio*2.0f, 2.0f, 1.25f);
- glTexCoord2f(1.5f, 1.5f);
- glVertex3f(aspectRatio*2.0f, 2.0f, 1.25f);
- glEnd();
- glPopMatrix();
- glBindTexture(GL_TEXTURE_2D, texName);
- for(i=0; i<dBackground; i++)
- _backwisps[i].drawAsBackground();
- for(i=0; i<dWisps; i++)
- _wisps[i].draw();
-
- // readback feedback texture
- glReadBuffer(GL_BACK);
- glPixelStorei(GL_UNPACK_ROW_LENGTH, feedbacktexsize);
- glBindTexture(GL_TEXTURE_2D, feedbacktex);
- glReadPixels(0, 0, feedbacktexsize, feedbacktexsize, GL_RGB, GL_UNSIGNED_BYTE, feedbackmap);
- glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, feedbacktexsize, feedbacktexsize, GL_RGB, GL_UNSIGNED_BYTE, feedbackmap);
-
- // create regular drawing area
- glViewport(viewport[0], viewport[1], viewport[2], viewport[3]);
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity();
- gluPerspective(20.0, aspectRatio, 0.01f, 20.0f);
- glMatrixMode(GL_MODELVIEW);
-
- // Draw again
- glClear(GL_COLOR_BUFFER_BIT);
- glColor3f(feedbackIntensity, feedbackIntensity, feedbackIntensity);
- glPushMatrix();
- glTranslatef(f[1] * l[1], f[2] * l[1], f[3] * l[2]);
- glRotatef(f[0] * l[0], 0, 0, 1);
- glBegin(GL_TRIANGLE_STRIP);
- glTexCoord2f(-0.5f, -0.5f);
- glVertex3f(-aspectRatio*2.0f, -2.0f, 1.25f);
- glTexCoord2f(1.5f, -0.5f);
- glVertex3f(aspectRatio*2.0f, -2.0f, 1.25f);
- glTexCoord2f(-0.5f, 1.5f);
- glVertex3f(-aspectRatio*2.0f, 2.0f, 1.25f);
- glTexCoord2f(1.5f, 1.5f);
- glVertex3f(aspectRatio*2.0f, 2.0f, 1.25f);
- glEnd();
- glPopMatrix();
-
- glBindTexture(GL_TEXTURE_2D, texName);
- }
- else
- glClear(GL_COLOR_BUFFER_BIT);
-
- //
- for(i=0; i<dBackground; i++)
- _backwisps[i].drawAsBackground();
- for(i=0; i<dWisps; i++)
- _wisps[i].draw();
-
- glFlush();
-}
-
-
-void EuphoriaWidget::resizeGL( int w, int h )
-{
- glViewport(0, 0, w, h );
-
- viewport[0] = 0;
- viewport[1] = 0;
- viewport[2] = w;
- viewport[3] = h;
-
- aspectRatio = (float) w / (float) h;
-
- // setup regular drawing area just in case feedback isn't used
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity();
- gluPerspective(20.0, aspectRatio, 0.01, 20);
- glMatrixMode(GL_MODELVIEW);
- glLoadIdentity();
- glTranslatef(0.0, 0.0, -5.0);
-}
-
-
-// Window initialization
-void EuphoriaWidget::initializeGL()
-{
- // Need to call this to setup viewport[] parameters used in
- // the next updateParameters() call
- resizeGL( width(), height() );
-
- updateParameters();
-
- _timer->start( _frameTime, true );
-}
-
-
-#ifdef UNIT_TEST
-void EuphoriaWidget::keyPressEvent( TQKeyEvent* e )
-{
- if( e->key() == TQt::Key_0 ) { setDefaults( 0 ); updateParameters(); }
- if( e->key() == TQt::Key_1 ) { setDefaults( 1 ); updateParameters(); }
- if( e->key() == TQt::Key_2 ) { setDefaults( 2 ); updateParameters(); }
- if( e->key() == TQt::Key_3 ) { setDefaults( 3 ); updateParameters(); }
- if( e->key() == TQt::Key_4 ) { setDefaults( 4 ); updateParameters(); }
- if( e->key() == TQt::Key_5 ) { setDefaults( 5 ); updateParameters(); }
- if( e->key() == TQt::Key_6 ) { setDefaults( 6 ); updateParameters(); }
- if( e->key() == TQt::Key_7 ) { setDefaults( 7 ); updateParameters(); }
- if( e->key() == TQt::Key_8 ) { setDefaults( 8 ); updateParameters(); }
-}
-#endif
-
-
-void EuphoriaWidget::nextFrame()
-{
- updateGL();
- _timer->start( _frameTime, true );
-}
-
-
-void EuphoriaWidget::updateParameters()
-{
- srand((unsigned)time(NULL));
- rand(); rand(); rand(); rand(); rand();
-
- elapsedTime = 0.0f;
-
- fr[0] = 0.0f;
- fr[1] = 0.0f;
- fr[2] = 0.0f;
- fr[3] = 0.0f;
-
- lr[0] = 0.0f;
- lr[1] = 0.0f;
- lr[2] = 0.0f;
-
- glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
- glClear(GL_COLOR_BUFFER_BIT);
- glEnable(GL_BLEND);
- glBlendFunc(GL_ONE, GL_ONE);
- glLineWidth(2.0f);
-
- // Commented out because smooth lines and textures don't mix on my TNT.
- // It's like it rendering in software mode
- glEnable(GL_LINE_SMOOTH);
- //glHint(GL_LINE_SMOOTH_HINT, GL_NICEST);
-
- if(dTexture)
- {
- int whichtex = dTexture;
- if(whichtex == 4) // random texture
- whichtex = myRandi(3) + 1;
- glEnable(GL_TEXTURE_2D);
- glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
- // Initialize texture
- glGenTextures(1, &texName);
- glBindTexture(GL_TEXTURE_2D, texName);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
- switch(whichtex){
- case 1:
- gluBuild2DMipmaps(GL_TEXTURE_2D, 1, TEXSIZE, TEXSIZE, GL_LUMINANCE, GL_UNSIGNED_BYTE, plasmamap);
- break;
- case 2:
- gluBuild2DMipmaps(GL_TEXTURE_2D, 1, TEXSIZE, TEXSIZE, GL_LUMINANCE, GL_UNSIGNED_BYTE, stringymap);
- break;
- case 3:
- gluBuild2DMipmaps(GL_TEXTURE_2D, 1, TEXSIZE, TEXSIZE, GL_LUMINANCE, GL_UNSIGNED_BYTE, linesmap);
- }
- } else if ( texName ) {
- glDeleteTextures( 1, &texName );
- texName = 0;
- }
-
- if(dFeedback)
- {
- feedbacktexsize = int(pow(2.0, dFeedbacksize));
- while(feedbacktexsize > viewport[2] || feedbacktexsize > viewport[3]){
- dFeedbacksize -= 1;
- feedbacktexsize = int(pow(2.0, dFeedbacksize));
- }
-
- // feedback texture setup
- glEnable(GL_TEXTURE_2D);
- delete [] feedbackmap;
- feedbackmap = new unsigned char[feedbacktexsize*feedbacktexsize*3];
- glGenTextures(1, &feedbacktex);
- glBindTexture(GL_TEXTURE_2D, feedbacktex);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
- glTexImage2D(GL_TEXTURE_2D, 0, 3, feedbacktexsize, feedbacktexsize, 0, GL_RGB, GL_UNSIGNED_BYTE, feedbackmap);
-
- // feedback velocity variable setup
- fv[0] = float(dFeedbackspeed) * (myRandf(0.025f) + 0.025f);
- fv[1] = float(dFeedbackspeed) * (myRandf(0.05f) + 0.05f);
- fv[2] = float(dFeedbackspeed) * (myRandf(0.05f) + 0.05f);
- fv[3] = float(dFeedbackspeed) * (myRandf(0.1f) + 0.1f);
- lv[0] = float(dFeedbackspeed) * (myRandf(0.0025f) + 0.0025f);
- lv[1] = float(dFeedbackspeed) * (myRandf(0.0025f) + 0.0025f);
- lv[2] = float(dFeedbackspeed) * (myRandf(0.0025f) + 0.0025f);
- } else if ( feedbacktex ) {
- glDeleteTextures( 1, &feedbacktex );
- feedbacktex = 0;
- }
-
- // Initialize wisps
- _ec = this;
- delete[] _wisps;
- delete[] _backwisps;
- _wisps = new wisp[dWisps];
- _backwisps = new wisp[dBackground];
-}
-
-
-/**
- May be called at any time - makes no OpenGL calls.
-*/
-void EuphoriaWidget::setDefaults(int which)
-{
- switch(which)
- {
- case Grid:
- dWisps = 4;
- dBackground = 1;
- dDensity = 25;
- dVisibility = 70;
- dSpeed = 15;
- dFeedback = 0;
- dFeedbackspeed = 1;
- dFeedbacksize = 8;
- dWireframe = 1;
- dTexture = 0;
- break;
-
- case Cubism:
- dWisps = 15;
- dBackground = 0;
- dDensity = 4;
- dVisibility = 15;
- dSpeed = 10;
- dFeedback = 0;
- dFeedbackspeed = 1;
- dFeedbacksize = 8;
- dWireframe = 0;
- dTexture = 0;
- break;
-
- case BadMath:
- dWisps = 2;
- dBackground = 2;
- dDensity = 20;
- dVisibility = 40;
- dSpeed = 30;
- dFeedback = 40;
- dFeedbackspeed = 5;
- dFeedbacksize = 8;
- dWireframe = 1;
- dTexture = 2;
- break;
-
- case MTheory:
- dWisps = 3;
- dBackground = 0;
- dDensity = 25;
- dVisibility = 15;
- dSpeed = 20;
- dFeedback = 40;
- dFeedbackspeed = 20;
- dFeedbacksize = 8;
- dWireframe = 0;
- dTexture = 0;
- break;
-
- case UHFTEM:
- dWisps = 0;
- dBackground = 3;
- dDensity = 35;
- dVisibility = 5;
- dSpeed = 50;
- dFeedback = 0;
- dFeedbackspeed = 1;
- dFeedbacksize = 8;
- dWireframe = 0;
- dTexture = 0;
- break;
-
- case Nowhere:
- dWisps = 0;
- dBackground = 3;
- dDensity = 30;
- dVisibility = 40;
- dSpeed = 20;
- dFeedback = 80;
- dFeedbackspeed = 10;
- dFeedbacksize = 8;
- dWireframe = 1;
- dTexture = 3;
- break;
-
- case Echo:
- dWisps = 3;
- dBackground = 0;
- dDensity = 25;
- dVisibility = 30;
- dSpeed = 20;
- dFeedback = 85;
- dFeedbackspeed = 30;
- dFeedbacksize = 8;
- dWireframe = 0;
- dTexture = 1;
- break;
-
- case Kaleidoscope:
- dWisps = 3;
- dBackground = 0;
- dDensity = 25;
- dVisibility = 40;
- dSpeed = 15;
- dFeedback = 90;
- dFeedbackspeed = 3;
- dFeedbacksize = 8;
- dWireframe = 0;
- dTexture = 0;
- break;
-
- case Regular:
- default:
- dWisps = 5;
- dBackground = 0;
- dDensity = 25;
- dVisibility = 35;
- dSpeed = 15;
- dFeedback = 0;
- dFeedbackspeed = 1;
- dFeedbacksize = 8;
- dWireframe = 0;
- dTexture = 2;
- break;
- }
-}
-
-
-//----------------------------------------------------------------------------
-
-
-#ifndef UNIT_TEST
-#include <klocale.h>
-#include <kglobal.h>
-#include <kconfig.h>
-
-
-// libkscreensaver interface
-extern "C"
-{
- KDE_EXPORT const char* kss_applicationName = "keuphoria.kss";
- KDE_EXPORT const char* kss_description = I18N_NOOP( "Euphoria" );
- KDE_EXPORT const char* kss_version = "1.0";
-
- KDE_EXPORT KScreenSaver* kss_create( WId id )
- {
- return new KEuphoriaScreenSaver( id );
- }
-
- KDE_EXPORT TQDialog* kss_setup()
- {
- return new KEuphoriaSetup;
- }
-}
-
-
-//----------------------------------------------------------------------------
-
-
-KEuphoriaScreenSaver::KEuphoriaScreenSaver( WId id ) : KScreenSaver( id )
-{
- _effect = new EuphoriaWidget;
-
- readSettings();
-
- embed( _effect );
- _effect->show();
-}
-
-
-KEuphoriaScreenSaver::~KEuphoriaScreenSaver()
-{
-}
-
-
-static int filterRandom( int n )
-{
- if( (n < 0) || (n >= EuphoriaWidget::DefaultModes) )
- {
- srand((unsigned)time(NULL));
- n = rand() % EuphoriaWidget::DefaultModes;
- }
- return n;
-}
-
-
-void KEuphoriaScreenSaver::readSettings()
-{
- TDEConfig* config = TDEGlobal::config();
- config->setGroup("Settings");
-
- _mode = config->readNumEntry( "Mode", EuphoriaWidget::Regular );
- _effect->setDefaults( filterRandom(_mode) );
-}
-
-
-/**
- Any invalid mode will select one at random.
-*/
-void KEuphoriaScreenSaver::setMode( int id )
-{
- _mode = id;
- _effect->setDefaults( filterRandom(id) );
- _effect->updateParameters();
-}
-
-
-//----------------------------------------------------------------------------
-
-
-#include <tqlayout.h>
-#include <tqlabel.h>
-#include <tqcombobox.h>
-#include <kmessagebox.h>
-
-
-static const char* defaultText[] =
-{
- I18N_NOOP( "Regular" ),
- I18N_NOOP( "Grid" ),
- I18N_NOOP( "Cubism" ),
- I18N_NOOP( "Bad Math" ),
- I18N_NOOP( "M-Theory" ),
- I18N_NOOP( "UHFTEM" ), //"ultra high frequency tunneling electron microscope",
- I18N_NOOP( "Nowhere" ),
- I18N_NOOP( "Echo" ),
- I18N_NOOP( "Kaleidoscope" ),
- I18N_NOOP( "(Random)" ),
- 0
-};
-
-
-KEuphoriaSetup::KEuphoriaSetup( TQWidget* parent, const char* name )
- : KDialogBase( parent, name, true, i18n("Setup Euphoria Screen Saver"),
- Ok|Cancel|Help, Ok, true )
-{
- setButtonText( Help, i18n( "A&bout" ) );
-
- TQWidget *main = makeMainWidget();
-
- TQHBoxLayout* top = new TQHBoxLayout(main, 0, spacingHint());
- TQVBoxLayout* leftCol = new TQVBoxLayout;
- top->addLayout( leftCol );
-
- TQLabel* label = new TQLabel( i18n("Mode:"), main );
- leftCol->addWidget( label );
-
- modeW = new TQComboBox( main );
- int i = 0;
- while (defaultText[i])
- modeW->insertItem( i18n(defaultText[i++]) );
- leftCol->addWidget( modeW );
-
- leftCol->addStretch();
-
- // Preview
- TQWidget* preview;
- preview = new TQWidget( main );
- preview->setFixedSize( 220, 170 );
- preview->setBackgroundColor( black );
- preview->show(); // otherwise saver does not get correct size
- _saver = new KEuphoriaScreenSaver( preview->winId() );
- top->addWidget(preview);
-
- // Now that we have _saver...
- modeW->setCurrentItem( _saver->mode() ); // set before we connect
- connect( modeW, TQT_SIGNAL(activated(int)), _saver, TQT_SLOT(setMode(int)) );
-
- setMinimumSize( sizeHint() );
-}
-
-
-KEuphoriaSetup::~KEuphoriaSetup()
-{
- delete _saver;
-}
-
-
-void KEuphoriaSetup::slotHelp()
-{
- KMessageBox::about(this,
- i18n("<h3>Euphoria 1.0</h3>\n<p>Copyright (c) 2002 Terence M. Welsh<br>\n<a href=\"http://www.reallyslick.com/\">http://www.reallyslick.com/</a></p>\n\n<p>Ported to KDE by Karl Robillard</p>"),
- TQString(), KMessageBox::AllowLink);
-}
-
-
-/**
- Ok pressed - save settings and exit
-*/
-void KEuphoriaSetup::slotOk()
-{
- TDEConfig* config = TDEGlobal::config();
- config->setGroup("Settings");
-
- TQString val;
- val.setNum( modeW->currentItem() );
- config->writeEntry("Mode", val );
-
- config->sync();
- accept();
-}
-#endif
-//----------------------------------------------------------------------------
-
-
-#ifdef UNIT_TEST
-// moc Euphoria.h -o Euphoria.moc
-// g++ -g -DUNIT_TEST Euphoria.cpp -I/usr/lib/qt3/include -lqt -L/usr/lib/qt3/lib -lGLU -lGL
-
-#include <tqapplication.h>
-
-int main( int argc, char** argv )
-{
- TQApplication app( argc, argv );
-
- EuphoriaWidget w;
- w.setDefaults( EuphoriaWidget::UHFTEM );
- app.setMainWidget( &w );
- w.show();
-
- return app.exec();
-}
-#endif
-
-
-//EOF
diff --git a/kscreensaver/kdesavers/Euphoria.h b/kscreensaver/kdesavers/Euphoria.h
deleted file mode 100644
index 40959139..00000000
--- a/kscreensaver/kdesavers/Euphoria.h
+++ /dev/null
@@ -1,158 +0,0 @@
-#ifndef __EUPHORIASS_H__
-#define __EUPHORIASS_H__
-//============================================================================
-//
-// Terence Welsh Screensaver - Euphoria
-// http://www.reallyslick.com/
-//
-// KDE port by Karl Robillard
-//
-//============================================================================
-
-
-#include <tqgl.h>
-
-#include <kdialogbase.h>
-
-class wisp;
-class TQTimer;
-
-class EuphoriaWidget : public TQGLWidget
-{
- Q_OBJECT
-
-
-public:
-
- enum eDefault
- {
- Regular,
- Grid,
- Cubism,
- BadMath,
- MTheory,
- UHFTEM, // ultra high frequency tunneling electron microscope
- Nowhere,
- Echo,
- Kaleidoscope,
- DefaultModes
- };
-
- EuphoriaWidget( TQWidget* parent=0, const char* name=0 );
- ~EuphoriaWidget();
-
- void updateParameters();
- void setDefaults( int which );
-
-protected:
-
- void paintGL();
- void resizeGL( int w, int h );
- void initializeGL();
-#ifdef UNIT_TEST
- void keyPressEvent( TQKeyEvent* );
-#endif
-
-private slots:
-
- void nextFrame();
-
-private:
-
- GLuint texName;
- wisp* _wisps;
- wisp* _backwisps;
- unsigned char* feedbackmap;
- float aspectRatio;
- int viewport[4];
- double elapsedTime;
-
- // feedback texture object
- unsigned int feedbacktex;
- int feedbacktexsize;
- // feedback variables
- float fr[4];
- float fv[4];
- float f[4];
- // feedback limiters
- float lr[3];
- float lv[3];
- float l[3];
-
-
-
- int dWisps;
- int dBackground;
- int dDensity;
- int dVisibility;
- float dSpeed;
- int dFeedback;
- int dFeedbackspeed;
- int dFeedbacksize;
- int dWireframe;
- int dTexture;
- int dPriority;
-
-
- // Using TQTimer rather than timerEvent() to avoid getting locked out of
- // the TQEvent loop on lower-end systems. Ian Geiser <[email protected]>
- // says this is the way to go.
- TQTimer* _timer;
- int _frameTime;
-
- friend class wisp;
-};
-
-
-#ifndef UNIT_TEST
-#include <tqdialog.h>
-#include <kscreensaver.h>
-
-
-class KEuphoriaScreenSaver : public KScreenSaver
-{
- Q_OBJECT
-
-
-public:
-
- KEuphoriaScreenSaver( WId id );
- virtual ~KEuphoriaScreenSaver();
-
- int mode() const { return _mode; }
-
-public slots:
-
- void setMode( int );
-
-private:
-
- void readSettings();
-
- EuphoriaWidget* _effect;
- int _mode;
-};
-
-
-class TQComboBox;
-
-class KEuphoriaSetup : public KDialogBase
-{
- Q_OBJECT
-
-
-public:
- KEuphoriaSetup( TQWidget* parent = 0, const char* name = 0 );
- ~KEuphoriaSetup();
-
-private slots:
- void slotHelp();
- void slotOk();
-
-private:
- TQComboBox* modeW;
- KEuphoriaScreenSaver* _saver;
-};
-#endif
-
-#endif //__EUPHORIASS_H__
diff --git a/kscreensaver/kdesavers/EuphoriaTexture.h b/kscreensaver/kdesavers/EuphoriaTexture.h
deleted file mode 100644
index 5a6962b4..00000000
--- a/kscreensaver/kdesavers/EuphoriaTexture.h
+++ /dev/null
@@ -1,4138 +0,0 @@
-/*
- * Copyright (C) 2002 Terence M. Welsh
- *
- * Euphoria is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- *
- * Euphoria is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-
-#ifndef TEXTURE_H
-#define TEXTURE_H
-
-
-
-#define TEXSIZE 256
-
-
-
-unsigned char plasmamap[TEXSIZE * TEXSIZE] = {
-224,235,221,199,206,186,153,139,173,154,105,108,129,82,34,16,9,12,17,21,21,19,14,5,1,6,21,61,84,114,185,164,183,190,176,161,173,199,191,157,194,193,187,163,150,139,121,114,
-104,84,72,68,63,66,69,66,58,51,44,34,30,28,27,22,17,9,6,9,10,5,0,0,0,6,17,28,37,49,56,64,62,59,64,73,83,88,84,73,75,84,105,130,116,91,97,97,
-109,123,146,189,247,253,178,184,210,186,151,122,84,91,92,90,100,92,88,111,165,219,217,207,204,190,225,252,239,250,255,255,252,252,239,224,191,173,177,165,120,78,66,83,51,50,115,137,
-95,104,150,149,100,86,80,72,75,87,83,58,45,28,24,15,7,2,0,0,1,6,7,3,3,3,8,9,19,36,47,51,45,44,52,71,83,72,61,57,63,86,108,147,191,186,165,172,
-160,147,107,88,95,122,135,157,193,227,241,229,221,229,243,253,255,255,254,252,248,238,229,228,233,245,247,239,246,248,235,226,184,147,98,55,44,36,43,43,34,29,49,59,63,194,255,255,
-255,255,255,255,255,255,255,255,255,242,252,233,213,231,221,228,205,192,193,191,190,175,153,156,173,184,172,127,104,62,24,8,5,9,14,19,23,23,16,6,1,8,30,66,77,114,192,217,
-219,210,177,148,142,149,130,111,147,157,155,162,162,157,154,148,129,100,84,75,68,68,70,63,57,51,45,37,30,28,27,22,16,10,6,7,6,0,0,0,0,1,15,27,35,43,55,62,
-63,58,61,70,88,84,75,73,73,85,111,134,125,101,85,82,107,150,183,186,236,247,133,100,113,107,98,72,63,85,78,83,108,121,116,135,160,163,161,158,155,147,192,246,253,254,254,250,
-253,248,232,233,227,236,224,201,171,149,120,69,83,140,158,130,94,143,142,118,113,120,94,70,62,64,71,55,41,31,29,17,3,0,0,0,0,0,7,7,7,10,14,16,27,45,58,63,
-58,65,78,86,86,77,62,55,59,71,94,130,142,125,114,99,83,84,78,82,92,99,123,169,207,214,224,217,222,233,249,254,252,250,246,226,205,206,210,211,221,245,245,243,248,248,242,226,
-178,99,57,36,28,29,30,30,27,28,64,116,162,235,255,255,255,255,255,255,255,255,255,255,255,255,255,252,203,196,176,203,164,144,121,143,172,180,169,178,163,141,118,85,48,21,6,1,
-1,7,14,20,24,22,15,8,5,10,28,44,71,106,155,208,194,175,140,116,113,98,88,83,88,106,136,158,165,164,153,141,126,109,92,78,70,65,63,63,56,49,43,37,33,28,26,22,
-16,14,8,5,0,0,0,0,0,0,9,22,31,38,49,57,61,59,59,64,92,94,100,80,78,107,136,143,154,121,84,94,165,183,140,158,253,218,84,68,68,73,76,56,52,44,47,88,
-153,162,144,146,149,163,186,172,156,196,227,245,248,238,234,241,247,232,199,211,221,219,191,141,168,175,164,137,153,178,151,112,102,151,144,104,111,123,76,40,33,34,29,27,29,19,19,9,
-0,0,0,0,0,3,7,7,10,15,19,23,35,49,56,61,68,83,92,88,80,70,59,51,50,52,64,98,100,65,51,50,63,70,77,84,80,91,108,168,217,199,194,205,227,243,253,253,
-252,243,224,187,160,163,191,203,215,225,238,241,241,241,239,221,190,106,50,27,23,21,21,28,27,24,62,130,211,255,255,255,255,254,254,255,255,255,255,255,255,255,248,243,224,200,190,182,
-91,79,72,79,73,132,164,172,140,61,22,23,16,6,0,0,0,2,12,20,21,20,17,10,9,14,20,28,65,98,104,147,142,141,123,111,94,87,84,78,78,84,97,123,146,149,126,106,
-111,109,95,84,71,64,63,64,52,44,41,34,30,27,24,23,19,14,9,7,2,0,1,0,0,0,8,19,33,43,49,62,76,75,66,65,86,99,104,73,88,133,149,165,175,132,114,143,
-185,187,123,127,238,203,72,61,54,59,71,48,38,43,85,148,189,183,133,154,157,175,184,177,184,219,238,253,247,222,236,243,234,229,206,194,207,180,141,97,123,132,118,126,142,151,143,122,
-128,147,156,144,109,87,50,20,13,19,10,3,5,2,1,0,0,0,12,16,3,7,13,8,14,16,22,31,41,57,69,72,84,90,90,75,66,59,50,44,40,36,43,57,49,33,30,34,
-42,51,66,77,84,109,115,168,219,204,185,205,240,246,250,252,248,232,215,200,190,190,201,213,213,220,194,210,229,231,235,204,162,102,55,35,26,26,26,28,30,29,45,92,170,239,247,246,
-235,235,254,255,255,255,255,255,255,255,253,253,222,198,183,126,75,57,49,61,61,82,121,134,125,50,13,6,0,0,0,0,0,0,8,17,21,23,20,16,22,22,16,28,44,52,61,77,
-91,106,97,79,69,63,65,70,78,90,118,146,155,136,118,102,104,102,90,82,72,64,61,58,48,40,34,29,27,23,23,21,20,15,14,12,7,5,6,5,2,6,15,23,31,43,56,77,
-114,98,86,76,76,71,70,66,109,151,187,203,170,153,155,193,194,161,116,113,154,134,71,65,51,49,61,44,37,61,113,140,134,119,113,149,191,200,187,198,171,198,208,193,199,176,201,228,
-219,213,175,192,196,155,109,73,72,71,59,50,83,115,120,115,121,107,95,83,61,37,21,8,6,13,8,0,0,0,0,0,1,28,30,15,5,8,10,17,22,23,28,38,47,71,72,65,
-76,78,73,62,52,44,40,35,30,30,31,33,28,27,29,30,40,59,98,109,101,122,155,205,219,218,207,219,245,241,229,248,229,226,218,212,214,210,184,153,168,157,140,139,178,199,207,184,
-134,90,55,42,37,35,33,30,34,41,45,65,109,167,196,208,218,235,255,255,255,255,255,255,255,255,255,255,218,150,133,106,82,51,43,40,50,52,69,88,78,36,10,3,0,0,0,0,
-0,0,8,20,26,26,27,27,35,30,19,22,34,34,37,47,47,57,55,49,45,44,47,61,86,125,148,155,161,128,106,99,92,86,82,76,70,65,61,55,43,35,28,26,23,20,16,15,
-17,16,17,19,15,13,10,8,7,10,16,26,28,41,68,87,92,105,107,73,56,50,64,86,106,130,185,196,182,197,180,193,210,143,99,92,104,85,71,63,49,47,50,44,45,68,93,120,
-111,102,116,155,179,161,168,186,182,162,143,106,120,105,140,180,207,165,128,150,144,109,82,54,27,19,15,17,30,34,58,78,77,55,24,14,19,16,12,7,8,16,14,3,0,1,1,0,
-19,44,28,13,8,14,19,24,30,37,41,41,55,75,66,58,55,57,59,56,45,35,30,26,24,27,23,23,22,23,33,49,63,108,158,123,101,147,193,229,224,224,224,231,238,186,125,142,
-130,180,217,218,210,162,119,80,86,82,83,71,102,151,171,162,112,71,56,41,35,35,31,33,37,45,50,57,72,101,130,158,217,255,255,255,255,255,255,255,255,255,255,255,215,125,115,112,
-97,66,58,43,40,44,34,37,35,23,10,3,0,0,0,0,0,2,16,33,36,38,40,31,27,20,19,23,34,37,33,30,27,35,37,40,34,34,45,68,98,95,78,78,85,79,80,79,
-76,77,75,71,69,65,63,52,42,35,30,26,23,17,14,14,16,19,21,20,19,19,19,16,14,14,21,27,31,45,78,100,91,99,101,70,44,45,68,104,113,149,186,221,249,253,232,208,
-217,129,122,125,78,66,63,51,43,47,51,54,59,79,101,115,87,76,101,127,130,123,153,175,168,122,100,84,95,98,121,141,167,135,137,141,118,106,66,24,9,9,10,12,16,13,15,27,
-23,20,8,13,14,9,7,10,26,30,24,14,10,10,9,10,14,21,23,23,20,22,34,33,34,42,61,62,62,58,58,69,65,51,50,49,40,35,31,26,22,19,22,26,26,35,48,73,
-120,162,187,161,126,180,229,229,224,227,234,228,147,90,54,37,45,115,208,200,146,87,77,77,72,73,82,78,90,102,108,136,113,83,49,29,34,35,34,35,36,37,38,43,51,56,61,111,
-183,248,255,255,255,255,255,255,255,255,255,255,228,136,111,123,109,85,73,52,44,44,30,22,19,12,8,3,2,0,1,2,3,8,34,50,36,44,49,37,23,16,16,31,59,58,31,20,
-16,22,27,28,31,47,65,99,112,57,42,52,61,58,61,65,69,71,69,65,65,61,57,49,38,35,31,26,22,17,13,15,17,21,26,26,24,27,29,27,24,23,27,31,36,54,78,107,
-129,139,119,75,49,45,62,107,171,247,255,253,255,255,255,252,233,156,165,171,76,58,56,43,42,49,51,69,85,95,102,106,87,73,79,78,87,104,128,144,135,98,88,104,108,121,139,133,
-137,113,130,135,95,93,69,21,13,10,10,15,9,3,1,3,0,0,3,19,21,14,15,15,27,37,36,24,20,20,20,20,19,21,21,24,30,59,75,61,61,57,85,84,62,54,63,85,
-78,51,45,48,44,44,36,29,24,21,23,27,43,73,100,132,156,177,172,162,147,187,232,224,219,235,241,194,101,51,28,31,43,116,182,179,148,105,100,120,112,115,128,134,112,97,100,122,
-72,48,37,38,42,43,38,34,33,37,41,43,45,42,52,73,128,178,226,255,255,255,255,255,255,248,225,232,179,123,130,137,84,79,73,64,62,47,31,23,19,13,9,9,8,8,9,9,
-12,20,42,45,30,41,55,51,33,20,22,65,107,73,36,23,21,19,20,22,30,37,56,82,93,66,45,52,61,52,51,59,63,68,65,62,62,56,50,42,35,35,34,28,22,20,17,20,
-24,24,28,31,31,35,36,37,33,31,33,36,41,54,76,121,170,163,142,84,55,49,62,98,144,193,229,255,255,255,254,253,245,176,172,128,63,50,48,41,44,52,66,91,106,116,111,102,
-86,86,72,65,78,92,105,120,119,104,113,136,135,140,126,102,100,112,109,93,62,63,56,23,13,10,16,21,10,1,6,17,2,0,15,30,29,28,22,17,28,40,40,33,28,27,28,30,
-40,37,34,47,73,109,125,112,73,55,80,93,76,69,66,77,68,54,54,57,50,44,38,35,36,40,36,40,86,146,167,175,184,191,186,162,155,194,222,211,192,205,211,162,85,45,30,33,
-31,36,72,148,149,125,126,150,135,126,126,126,106,111,147,119,56,43,50,50,48,49,44,40,38,43,49,54,61,51,54,64,97,123,175,219,247,255,255,255,255,222,178,167,140,115,129,122,
-80,69,69,85,92,62,42,35,30,20,16,16,14,16,19,19,20,29,45,42,36,55,65,65,50,34,66,119,99,62,50,35,31,28,27,35,40,31,37,66,92,92,72,87,72,51,58,65,
-65,65,59,58,55,49,45,38,34,31,33,28,23,23,23,26,28,29,33,36,42,41,41,42,42,37,36,38,47,59,90,136,165,146,154,86,54,57,65,65,73,94,189,255,255,255,255,254,
-254,245,147,80,57,50,49,48,48,56,77,106,121,129,118,98,91,94,78,77,77,79,88,100,111,127,141,162,170,161,121,78,76,105,115,93,77,55,40,21,6,8,14,22,26,12,22,36,
-10,10,31,44,40,22,26,26,37,50,49,47,42,38,41,44,55,42,52,84,108,128,129,118,73,61,91,114,104,65,57,59,65,75,63,54,44,37,33,42,59,93,84,99,171,208,199,196,
-218,217,199,179,184,208,213,185,136,129,141,90,51,38,28,28,29,23,27,64,102,100,115,112,76,94,123,125,143,139,141,100,50,52,56,56,54,50,45,44,43,47,54,66,69,50,50,59,
-93,118,171,189,204,243,255,253,213,156,140,144,126,112,129,108,116,115,112,105,100,75,52,45,37,27,24,24,23,27,30,26,30,31,47,62,93,106,85,75,70,70,112,130,101,82,76,62,
-63,45,28,43,33,30,82,122,119,120,92,85,87,97,101,79,65,58,54,51,48,45,42,38,36,30,33,31,29,27,29,31,34,36,41,44,47,48,47,48,45,41,40,43,49,71,92,123,
-153,121,115,97,75,75,78,66,64,68,108,170,217,211,232,255,255,215,97,69,58,55,51,51,55,66,85,111,127,132,136,134,125,111,106,106,66,56,62,76,94,118,156,170,154,148,130,91,
-125,128,112,102,84,68,40,21,10,7,19,34,27,15,26,30,14,22,43,54,57,34,37,37,42,54,56,55,51,52,52,51,55,48,57,79,102,121,122,107,102,112,111,111,100,66,57,57,
-54,59,50,42,38,36,43,69,115,160,180,217,242,236,225,225,227,191,171,187,217,245,242,192,111,84,68,54,44,33,28,28,22,16,17,23,38,45,51,55,43,42,77,135,178,175,140,94,
-55,50,56,57,54,49,48,44,44,44,55,76,75,44,40,64,80,95,161,189,184,238,254,225,155,92,93,127,118,107,123,137,173,171,158,136,92,80,71,57,33,28,35,37,40,33,37,40,
-41,35,51,80,104,98,79,80,95,129,141,108,90,82,88,83,82,63,56,69,51,68,101,140,136,107,71,70,99,122,107,76,58,51,51,47,43,40,38,35,34,36,35,33,31,33,35,37,
-41,41,45,49,51,54,52,51,49,48,50,50,57,83,94,106,142,123,100,107,98,97,95,82,63,56,61,80,114,139,187,246,241,207,112,88,72,62,55,55,62,77,101,123,140,151,162,172,
-160,121,90,75,47,38,45,57,70,90,162,196,146,149,175,142,148,123,100,102,71,51,33,29,27,24,42,42,22,17,34,35,20,31,43,43,66,75,70,51,51,56,57,55,59,63,57,54,
-58,45,51,65,86,120,126,132,120,109,118,106,92,76,64,57,48,54,42,35,38,54,85,153,201,215,240,255,254,248,247,250,250,194,180,235,253,255,255,193,90,70,57,50,47,42,34,28,
-17,10,13,20,22,23,29,35,36,36,40,69,164,183,135,77,59,49,51,52,48,49,49,47,45,42,58,72,68,45,41,66,76,77,136,189,197,218,214,190,164,119,119,120,111,129,133,173,
-201,205,210,189,128,82,77,63,47,42,44,71,79,55,49,44,38,55,83,82,70,68,58,68,147,163,147,118,84,75,79,79,77,116,146,123,112,104,70,90,137,128,102,114,114,99,95,71,
-50,44,43,41,37,37,36,30,31,35,35,33,33,34,40,43,43,44,50,55,56,56,57,59,57,59,65,63,77,93,105,135,137,139,107,86,85,80,88,80,52,47,55,66,85,100,128,196,
-212,203,167,148,93,65,62,62,73,82,97,121,146,168,180,169,141,107,68,38,26,23,42,64,80,92,164,199,175,165,171,180,142,94,88,98,65,42,35,33,40,36,45,41,27,29,51,47,
-30,40,42,38,55,57,68,68,66,65,70,72,78,70,62,58,48,42,58,78,97,116,132,146,113,118,118,94,63,64,58,48,40,36,34,33,40,72,154,233,255,253,253,255,255,255,255,255,
-252,241,241,255,255,252,254,175,91,90,73,52,48,45,38,29,20,14,10,9,12,15,19,24,30,38,40,48,127,162,136,93,56,44,43,45,48,48,49,44,41,42,52,62,62,48,43,58,
-70,77,126,160,167,176,177,165,157,125,121,115,115,155,172,199,210,211,211,206,170,105,80,65,98,101,101,147,129,102,72,45,38,80,101,100,68,70,65,78,144,153,165,175,148,95,84,80,
-70,119,161,135,136,122,78,86,147,160,150,121,97,86,78,55,40,37,37,36,38,40,37,33,28,31,34,36,38,40,42,44,45,48,55,59,59,62,64,64,65,79,86,79,83,90,118,167,
-175,133,90,48,54,65,78,72,51,42,50,57,70,105,156,165,162,175,176,142,97,71,72,71,83,97,105,100,109,139,162,144,106,79,50,28,21,27,49,104,153,160,175,183,176,167,135,165,
-137,85,88,92,62,42,38,41,49,48,52,40,36,43,61,65,50,62,62,55,51,48,56,68,70,88,76,71,79,84,90,73,58,75,86,92,111,129,137,142,137,146,136,113,75,61,51,45,
-40,30,28,29,45,109,215,255,255,254,255,255,255,255,255,255,254,255,253,254,250,248,248,227,196,179,135,86,61,58,52,44,29,14,6,5,5,6,13,21,28,33,35,42,95,148,136,87,
-48,43,36,40,45,47,48,45,44,45,54,58,62,52,44,52,70,105,133,142,172,183,190,164,137,122,129,150,175,193,200,210,193,203,217,214,194,168,157,150,179,204,213,196,172,157,108,64,
-54,80,115,120,70,73,101,115,135,143,168,196,171,140,114,78,87,136,172,164,149,147,105,93,109,98,90,91,72,54,52,40,30,33,35,37,38,38,33,29,27,29,31,38,41,44,42,44,
-47,51,57,59,63,69,72,73,86,112,104,88,77,79,113,168,179,102,50,35,43,63,66,58,49,42,37,36,55,111,164,147,132,158,167,129,91,77,78,80,90,116,122,100,100,105,125,133,
-95,85,56,34,27,36,51,120,168,204,193,162,130,123,126,150,123,102,93,84,58,43,43,58,76,71,58,49,52,71,71,68,84,100,91,62,63,57,50,61,85,102,76,69,71,85,105,100,
-122,134,98,59,102,154,141,135,142,136,133,108,106,82,59,49,42,31,28,33,66,161,249,255,255,255,255,255,255,255,255,255,255,255,255,255,254,253,249,236,225,197,176,154,118,99,83,79,
-51,9,0,0,0,0,12,24,35,41,35,41,83,125,113,66,71,72,56,50,56,59,57,65,73,80,91,94,92,78,55,59,109,136,150,172,189,196,191,157,127,142,157,183,214,211,214,205,
-177,200,242,239,234,228,227,224,217,225,234,217,208,189,137,141,150,158,194,172,94,123,142,155,161,167,179,180,178,191,148,121,137,179,189,175,155,140,107,63,37,48,59,64,48,41,41,33,
-33,37,41,38,37,37,31,26,30,31,34,38,42,43,42,43,48,52,59,63,68,73,78,85,107,137,129,92,76,79,106,135,112,68,43,38,44,45,43,45,41,45,40,45,83,141,172,146,
-126,125,156,163,121,97,91,95,104,134,137,116,118,114,122,128,90,73,52,36,30,45,48,102,168,208,193,154,136,153,160,132,105,100,87,64,45,45,47,65,76,71,58,69,86,98,97,105,
-111,108,95,72,62,50,45,59,108,108,69,76,79,82,106,141,168,160,90,57,76,146,155,143,130,126,114,107,115,107,71,48,30,30,33,40,90,203,255,255,255,255,255,255,255,255,255,255,
-255,255,255,255,255,254,253,241,215,201,205,184,111,95,84,66,40,10,1,0,0,6,22,33,42,52,47,70,113,120,78,83,118,112,114,111,105,128,113,122,147,164,158,144,125,99,64,70,
-107,139,175,193,191,193,167,137,163,203,205,222,218,212,222,200,220,242,255,248,249,254,253,247,242,242,243,241,241,214,201,231,221,193,196,203,162,170,140,148,148,147,153,168,182,203,193,189,
-205,198,189,177,151,118,85,52,33,30,41,42,38,34,29,30,41,52,49,45,38,35,34,30,34,36,35,40,42,43,43,47,49,52,58,63,71,78,83,90,107,123,113,85,77,86,97,97,
-70,56,51,49,51,43,37,50,54,56,62,75,129,173,190,171,157,156,171,177,147,109,87,99,112,136,139,150,160,157,164,151,121,86,50,29,26,49,55,80,119,170,217,180,170,177,139,107,
-99,86,77,55,38,42,45,51,56,62,83,107,114,102,129,150,118,97,99,85,68,51,52,68,102,105,79,97,104,97,105,154,173,148,129,121,121,141,147,144,134,129,125,132,134,104,58,35,
-23,27,35,43,97,211,255,255,255,255,255,255,255,255,255,255,255,255,255,255,254,254,254,243,228,218,206,189,154,143,100,61,26,9,3,8,19,26,27,41,56,51,44,86,76,34,24,35,
-79,142,169,168,150,156,160,180,201,205,185,165,141,99,77,79,93,133,175,184,193,185,133,149,179,215,240,234,226,218,228,229,249,255,254,254,255,255,255,255,255,255,254,255,254,248,255,250,
-218,183,169,196,176,196,191,142,95,100,156,148,176,200,200,212,212,200,142,149,141,84,51,35,33,37,37,33,34,31,34,36,48,61,52,41,35,30,30,31,36,36,37,41,44,47,47,49,
-51,54,59,68,75,82,86,90,101,120,97,77,75,82,85,80,63,51,58,66,65,65,64,71,77,73,77,114,163,213,232,236,228,225,214,158,170,114,106,132,133,133,130,170,192,182,189,170,
-132,94,55,30,24,33,40,76,84,80,204,199,197,160,82,91,97,68,63,55,41,41,48,54,70,93,132,134,109,94,121,144,142,150,130,82,62,47,49,82,104,93,97,118,150,141,151,176,
-183,165,160,164,163,153,137,132,137,133,130,144,134,71,34,19,21,30,47,69,113,219,255,255,255,255,255,255,255,255,255,255,255,255,255,254,253,253,249,245,239,226,210,182,164,149,101,49,
-20,13,10,27,44,40,30,52,58,45,41,59,33,22,29,38,63,108,173,156,129,136,149,182,205,205,192,182,161,137,129,107,106,128,156,175,215,185,167,190,170,189,239,240,249,246,249,252,
-255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,252,242,236,218,200,186,197,177,135,134,172,169,141,187,191,183,194,201,172,91,105,114,69,49,40,40,47,41,33,31,35,41,38,
-37,42,47,42,31,30,31,33,35,40,43,43,52,57,54,55,56,58,63,71,77,84,92,99,102,114,97,79,76,82,80,70,58,54,71,88,87,86,79,91,95,92,106,143,193,240,255,255,
-255,255,214,129,140,133,167,176,170,157,168,187,205,198,192,160,109,65,34,30,30,26,29,55,78,87,151,192,177,105,77,93,79,57,52,49,44,49,61,94,127,113,118,112,95,98,120,128,
-133,167,128,75,63,43,49,87,112,114,112,128,167,177,182,194,194,161,146,164,173,167,157,155,160,153,148,153,120,42,21,22,38,56,115,189,213,248,255,255,255,255,255,255,255,255,255,254,
-255,255,255,255,255,255,253,248,240,171,121,100,95,97,58,31,22,20,23,42,57,48,54,90,88,68,61,65,57,42,44,62,94,118,154,142,151,171,189,199,207,204,200,199,196,194,179,132,
-125,128,154,173,212,213,178,151,144,192,232,248,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,254,254,246,218,199,213,201,178,173,187,183,184,116,126,176,193,157,168,
-179,151,109,85,71,61,51,45,41,40,38,40,41,41,44,33,24,29,37,36,30,29,31,35,38,48,55,57,59,63,64,61,61,61,65,78,86,95,106,112,119,121,105,83,73,73,70,66,
-61,63,88,115,113,108,102,105,112,130,158,186,214,250,255,255,255,252,236,201,168,168,194,203,179,184,200,204,212,219,192,157,98,49,26,29,35,41,49,50,51,70,113,179,169,94,102,88,
-58,50,48,50,54,66,86,129,164,113,85,90,92,93,121,120,115,154,123,85,77,51,57,85,126,139,147,154,157,185,182,180,183,177,178,184,180,170,171,167,167,160,144,126,68,21,28,62,
-79,123,217,255,255,255,255,255,255,255,255,255,255,254,248,245,255,247,180,197,213,186,212,241,194,91,66,87,102,92,61,29,24,24,34,51,70,72,73,85,121,119,78,92,95,58,64,79,
-120,144,160,167,183,196,217,226,232,227,220,212,206,193,178,128,127,139,154,150,136,183,176,149,179,226,226,245,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,254,
-229,200,187,212,236,228,221,211,185,139,85,128,149,161,118,107,151,156,120,82,80,71,59,49,33,31,41,47,52,56,49,26,19,23,28,31,31,33,37,41,47,55,65,75,69,68,70,71,
-70,66,70,83,100,109,125,141,156,146,132,111,100,83,68,68,77,86,108,136,147,139,136,123,116,157,205,218,224,250,255,255,255,235,232,198,176,175,191,201,177,185,199,220,227,224,197,176,
-99,57,35,41,57,65,63,49,54,76,149,187,200,143,90,68,52,55,59,62,80,100,116,132,129,98,85,90,106,113,139,123,118,119,111,99,85,65,72,104,151,158,169,162,135,151,184,177,
-186,215,221,210,198,177,175,161,161,157,94,37,29,29,44,65,99,176,253,255,255,255,255,255,255,255,255,255,255,252,234,227,231,160,54,52,63,65,95,160,137,66,57,64,90,84,57,31,
-30,41,56,70,82,78,65,83,111,119,115,148,118,64,77,102,143,173,191,206,219,231,246,250,250,247,239,227,212,192,189,134,102,126,133,123,97,151,200,201,224,238,241,252,255,255,255,255,
-255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,254,240,236,247,242,248,241,238,225,167,139,144,165,123,132,136,98,108,107,83,94,98,97,92,82,70,45,50,57,56,65,45,27,
-21,26,28,31,40,44,48,52,59,64,70,75,75,79,83,82,78,72,77,84,102,121,143,167,189,164,156,149,132,101,97,95,102,107,107,135,157,147,160,157,151,186,210,232,249,254,255,255,
-255,227,198,205,183,185,178,185,196,199,197,206,211,207,185,160,106,85,71,84,115,105,85,64,59,93,178,219,218,182,109,88,73,77,86,115,160,168,161,137,121,114,112,120,129,129,141,130,
-120,122,121,88,79,86,102,151,177,156,171,170,108,115,167,190,221,236,234,229,219,187,177,162,168,111,20,7,31,30,35,27,33,100,247,255,235,247,255,255,255,255,255,255,255,252,228,213,
-137,73,45,36,38,45,50,92,107,63,56,51,51,44,33,33,41,66,90,80,70,73,61,61,102,100,153,169,128,92,78,112,144,176,224,238,243,254,255,255,255,254,255,240,208,192,186,130,
-90,102,91,92,90,127,186,224,224,236,249,254,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,253,247,249,253,247,245,241,225,217,221,226,205,153,146,118,95,
-77,70,86,107,105,120,125,132,128,83,68,69,55,54,42,30,24,31,40,44,52,58,61,65,69,72,71,71,73,77,80,83,80,75,80,101,121,135,150,172,196,180,171,172,160,129,109,126,
-132,146,149,148,164,163,168,176,197,222,210,224,250,255,255,255,255,246,220,228,217,189,169,203,218,205,199,198,178,189,182,160,130,112,112,141,176,147,92,84,88,121,190,218,219,215,171,129,
-98,104,142,206,242,241,239,212,170,142,132,137,139,136,141,143,120,137,116,98,115,126,142,190,197,170,176,164,111,112,136,162,211,228,229,226,212,198,184,180,156,62,0,0,12,8,12,14,
-9,35,150,222,211,245,255,255,255,255,255,255,255,250,232,208,122,73,56,49,48,50,50,76,93,72,62,56,43,34,29,33,42,54,79,70,69,85,68,68,106,113,151,142,161,157,115,93,
-123,183,238,250,255,255,255,255,255,255,250,198,173,189,182,148,101,91,78,78,86,109,132,173,220,240,243,254,255,255,253,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-255,255,254,253,250,250,247,245,236,236,233,221,161,114,87,92,79,92,106,120,133,142,156,164,112,72,70,63,63,49,40,33,30,37,49,56,62,66,70,72,70,68,65,69,71,75,75,76,
-78,76,79,120,154,149,149,186,212,190,171,197,192,161,93,82,112,178,197,186,183,182,173,191,226,224,212,222,248,254,255,255,255,253,240,231,208,184,203,234,221,198,205,212,189,187,193,185,
-182,177,196,201,179,182,112,106,119,185,186,189,217,239,222,194,161,154,220,255,255,255,255,238,190,165,157,155,153,151,147,140,127,139,141,133,136,135,167,212,205,197,199,150,126,129,129,155,
-206,226,231,224,206,204,182,178,136,70,24,16,15,24,29,21,9,7,30,115,146,171,234,245,236,253,255,255,255,250,247,236,151,83,65,61,50,43,47,63,77,78,72,57,41,33,29,33,
-41,45,50,49,61,76,78,80,92,135,126,142,176,137,100,112,127,189,239,247,255,255,255,255,255,254,231,170,167,185,183,158,107,98,90,93,105,120,127,141,197,234,240,254,255,255,254,255,
-255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,254,252,248,247,247,234,225,214,190,156,119,102,104,122,137,134,141,137,150,182,185,111,55,52,56,65,51,49,44,
-31,37,47,56,61,62,65,65,64,65,66,70,75,75,76,72,72,73,77,102,148,175,183,196,215,217,198,192,194,146,78,62,90,171,189,158,146,150,142,180,226,210,215,225,229,232,242,252,
-255,255,247,220,199,192,232,248,228,213,213,218,208,204,203,201,212,239,255,245,207,206,178,143,156,211,213,219,242,248,249,245,228,219,240,255,255,255,255,245,219,205,196,220,224,204,200,172,
-146,153,162,160,141,148,177,213,226,235,224,158,125,164,153,167,212,228,231,225,203,200,211,184,128,90,95,137,125,107,66,33,16,12,28,37,41,88,196,225,232,254,255,255,255,254,255,253,
-186,98,70,66,58,49,52,61,71,77,70,52,40,33,30,30,36,38,38,34,43,58,77,76,95,151,160,156,116,101,113,143,172,192,211,228,234,250,255,255,255,255,221,191,192,193,182,146,
-105,120,121,126,139,154,144,130,185,227,242,253,254,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,254,252,248,248,243,236,231,221,192,187,182,170,167,
-175,157,120,126,119,134,169,185,134,73,59,62,68,56,47,38,35,36,37,48,54,56,58,58,59,64,68,75,83,79,79,80,76,72,73,86,122,155,190,191,191,205,196,163,158,161,98,73,
-85,125,158,161,123,113,112,151,194,201,200,201,197,191,207,234,247,234,224,207,190,193,221,233,221,204,208,222,222,232,219,225,229,245,255,255,248,235,255,238,245,247,247,239,254,255,255,253,
-250,249,254,255,255,255,255,255,250,252,248,250,255,252,255,240,225,217,193,191,192,182,187,221,238,243,228,193,165,185,156,185,217,226,227,217,193,158,184,208,162,142,160,192,199,135,86,58,
-35,24,42,56,38,90,173,224,240,255,255,255,255,255,255,255,198,106,71,68,62,55,61,65,75,72,64,50,38,31,34,35,37,36,33,30,36,43,55,61,105,161,143,127,115,116,135,150,
-199,194,197,207,187,226,255,255,255,253,219,203,208,196,167,128,112,132,140,149,161,155,157,154,199,235,247,252,249,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-255,255,255,255,250,242,245,240,238,241,236,231,233,231,220,211,192,162,133,120,100,105,135,155,121,85,87,100,59,49,45,43,57,52,43,47,58,59,61,69,77,92,104,109,125,112,101,99,
-100,90,78,82,93,133,210,221,194,191,197,170,146,191,155,104,125,160,170,164,123,125,118,132,142,147,179,191,182,162,182,212,214,201,197,183,179,185,204,212,199,189,214,232,229,217,218,235,
-235,238,252,255,255,255,255,255,255,255,252,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,252,255,255,255,255,255,249,242,246,250,234,227,242,249,246,239,213,193,200,178,201,
-220,226,224,207,164,127,154,149,177,210,164,153,184,151,121,86,61,41,50,68,68,99,175,214,240,255,255,255,255,255,255,243,165,98,77,69,63,58,62,72,78,68,64,58,48,34,36,41,
-43,38,33,30,31,35,34,42,88,128,109,93,135,154,168,184,189,171,190,172,161,226,254,255,255,248,218,194,206,193,163,143,141,140,160,169,173,167,161,156,194,234,242,249,255,255,255,255,
-255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,247,234,239,235,228,227,233,239,239,232,217,207,194,175,151,116,91,85,108,122,73,69,86,105,63,43,48,66,
-87,92,107,88,106,116,100,122,153,164,162,167,170,164,148,136,119,107,91,95,115,154,194,180,184,193,199,182,167,199,198,167,179,207,205,180,120,115,113,107,123,114,143,164,157,153,167,182,
-187,182,171,157,160,171,192,205,183,176,199,211,203,180,211,239,245,247,245,254,255,255,255,255,255,255,253,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-255,255,255,255,255,255,255,255,253,252,248,236,220,208,196,220,228,233,228,211,163,132,182,148,192,238,168,184,187,149,148,106,73,58,49,51,64,86,160,191,212,255,255,255,255,255,255,217,
-130,91,85,75,68,65,64,82,82,66,63,59,55,41,41,45,47,38,33,31,33,41,47,44,48,59,65,66,93,141,189,211,197,167,142,151,162,194,228,249,238,222,204,193,205,194,156,154,
-176,178,192,208,198,178,176,169,201,228,234,224,243,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,252,246,253,255,255,248,236,238,236,233,226,222,226,229,226,212,203,
-193,176,149,122,91,73,98,94,57,61,65,71,66,41,28,26,68,139,158,137,115,132,143,171,182,185,176,147,139,157,171,171,142,116,94,105,128,137,157,156,136,170,192,189,169,190,207,201,
-197,199,189,179,121,91,91,73,78,82,95,116,115,108,125,139,153,155,136,133,142,160,183,185,178,160,163,155,154,162,199,234,248,252,254,255,255,255,255,255,255,255,255,255,253,255,255,255,
-255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,250,246,242,240,234,233,241,245,246,235,218,176,143,186,207,215,162,142,206,229,177,133,107,
-72,79,93,108,105,100,132,177,196,232,228,239,255,255,255,219,150,111,87,73,66,66,72,86,85,76,79,73,62,47,43,47,47,43,40,35,34,36,41,43,36,36,45,69,85,137,189,158,
-155,141,134,151,168,150,161,189,191,185,175,175,182,182,179,194,203,194,189,201,200,200,192,179,208,228,221,197,220,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,253,248,252,250,
-250,253,253,253,248,240,240,236,232,226,225,222,220,218,208,203,191,173,151,123,92,80,84,73,73,65,58,64,62,57,35,12,8,107,144,51,22,37,57,132,172,170,132,112,136,153,168,177,
-139,128,97,93,109,111,126,168,148,140,158,162,158,171,180,189,190,179,160,156,146,102,64,52,42,44,59,83,83,79,97,104,119,122,116,120,137,154,178,171,168,153,161,142,143,165,198,234,
-252,255,255,255,255,255,255,255,255,255,255,255,255,254,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,254,249,233,203,214,232,229,242,250,252,
-253,252,243,224,180,157,193,218,196,141,133,161,219,233,170,104,68,88,79,82,87,136,165,192,199,163,172,212,252,255,255,234,183,130,79,61,58,59,71,101,109,93,94,85,64,51,57,63,
-65,63,45,42,40,30,33,33,29,35,50,90,98,115,146,120,123,121,126,127,130,127,143,163,170,161,160,164,176,183,201,221,205,199,205,199,193,213,215,204,197,210,192,186,218,249,255,255,
-255,255,255,249,255,255,255,255,255,255,255,255,254,248,250,253,254,254,253,252,248,246,240,243,240,232,234,225,225,219,211,199,170,142,125,108,79,90,80,57,63,61,45,47,38,52,45,15,
-0,54,76,10,14,29,42,95,149,154,144,155,160,164,157,161,156,155,112,86,91,101,106,129,154,154,127,132,144,143,119,146,167,150,134,135,125,75,31,23,22,24,36,55,58,64,76,82,
-95,101,108,114,129,140,153,147,129,140,151,146,156,187,225,243,246,255,255,255,255,255,255,255,255,255,255,255,255,252,255,255,255,255,255,255,254,255,255,255,255,255,255,255,255,255,255,255,
-255,255,255,255,255,255,255,235,182,160,178,214,225,238,247,253,255,255,247,224,176,151,190,206,168,154,137,82,77,151,155,113,66,70,48,29,36,99,189,196,175,154,190,217,239,255,255,250,
-197,115,71,65,64,62,71,111,119,104,99,92,73,72,73,77,90,78,50,43,38,35,34,30,33,54,71,88,86,92,111,90,80,79,92,122,139,119,121,143,142,134,142,165,178,187,211,229,
-217,229,242,229,212,217,225,224,217,200,192,171,214,249,255,255,255,255,245,238,254,255,255,255,255,255,252,246,245,241,252,252,252,254,254,253,247,247,246,243,235,241,243,240,236,218,207,178,
-144,108,86,93,88,82,66,57,49,38,22,21,28,33,35,14,3,12,14,10,16,33,48,90,160,177,176,175,164,155,129,143,172,171,148,106,85,97,106,116,150,158,125,108,108,98,64,93,
-119,113,116,113,76,27,13,10,13,20,34,49,54,57,61,68,84,100,115,125,135,149,153,142,119,126,146,169,190,215,240,245,248,255,255,255,255,255,255,255,255,255,255,255,255,254,254,253,
-250,255,255,249,248,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,238,224,253,247,187,164,177,204,234,240,250,255,255,255,246,225,199,162,180,193,142,93,84,57,42,70,98,87,
-47,33,36,41,80,109,126,165,163,169,199,203,231,242,249,229,170,97,71,76,75,71,78,101,132,139,120,111,99,105,98,90,87,64,44,38,34,36,36,31,31,45,61,66,68,66,79,59,
-54,62,73,122,139,99,92,108,122,148,156,170,186,197,213,221,231,250,252,239,221,222,232,225,219,207,200,170,220,249,254,255,231,220,203,215,247,255,255,255,255,255,240,228,239,245,249,248,
-249,252,254,252,250,252,248,240,236,241,247,241,232,204,199,182,160,108,77,82,84,93,77,59,41,24,13,10,15,16,15,9,5,7,8,15,16,26,40,64,148,180,175,165,149,150,146,144,
-158,165,164,139,100,86,93,115,132,127,108,92,85,80,61,73,79,83,85,82,44,19,7,5,15,28,48,59,61,61,58,64,78,101,118,136,164,183,163,155,153,149,147,182,210,218,221,232,
-245,252,254,255,255,255,255,255,255,255,255,255,255,255,255,253,233,236,238,241,248,255,255,255,255,255,255,255,255,255,255,255,255,255,232,218,199,168,213,249,208,161,175,207,228,242,253,255,
-255,255,243,220,196,182,169,147,111,63,56,40,33,38,62,47,36,28,23,28,71,106,119,155,182,168,173,155,149,139,142,139,100,80,71,76,78,76,80,98,134,162,140,112,102,106,109,101,
-71,48,38,34,33,34,30,27,30,38,52,52,57,52,54,44,54,68,95,137,122,95,100,123,168,182,171,172,182,207,218,229,240,248,253,254,247,233,227,231,240,206,179,172,222,255,255,247,
-172,158,176,200,225,252,254,255,255,255,250,245,236,236,241,236,247,250,255,253,248,233,235,241,246,247,246,238,224,208,191,167,128,107,73,56,78,93,82,57,27,13,12,14,16,13,10,8,
-8,15,17,14,12,15,24,33,70,132,153,130,104,107,134,147,157,149,155,162,125,69,72,86,99,105,93,77,63,62,61,59,61,72,66,55,33,14,5,1,19,47,79,94,84,75,62,68,
-83,104,126,150,171,194,176,168,170,157,146,182,222,228,227,234,241,235,229,248,255,255,255,255,255,255,255,255,255,255,249,246,231,206,221,235,249,255,255,255,255,255,255,255,255,255,255,255,
-255,253,221,208,217,190,165,180,175,162,177,201,228,246,255,255,255,255,241,219,190,184,173,108,58,47,41,33,26,27,29,27,30,33,26,24,36,71,133,184,150,113,106,70,55,52,55,64,
-72,78,76,77,79,79,84,104,143,186,167,118,106,109,121,114,77,52,37,34,33,31,31,31,31,34,44,44,49,51,55,57,62,78,134,139,95,94,114,136,154,163,165,157,163,208,233,242,
-248,246,248,248,253,252,241,246,245,204,175,173,177,212,214,197,122,144,185,214,206,201,247,255,255,254,254,247,226,205,220,234,239,231,243,252,234,194,201,234,242,247,245,241,229,221,173,132,
-88,88,102,112,104,98,77,50,20,16,21,23,22,14,10,10,15,20,19,13,8,10,19,22,31,48,77,101,94,75,104,147,153,125,150,153,90,49,58,73,85,86,86,68,44,40,38,38,
-44,54,48,34,19,6,3,10,44,79,106,101,90,86,63,71,114,139,135,144,176,201,182,170,185,172,155,162,214,234,234,226,232,235,240,240,247,255,255,255,255,254,255,255,255,255,236,232,
-234,213,211,220,234,254,253,255,255,255,255,255,255,255,255,255,255,254,240,215,204,200,200,173,167,184,182,186,220,246,255,255,255,253,235,214,200,199,205,156,76,40,37,31,16,17,23,15,
-22,30,24,27,34,47,104,126,78,42,30,30,29,41,62,82,100,86,82,79,77,79,88,104,142,201,187,129,107,108,133,157,132,76,43,33,34,42,44,43,41,38,42,41,44,68,101,87,
-78,134,164,130,94,98,130,147,156,187,196,197,207,233,249,250,253,248,246,247,248,254,239,229,221,208,179,157,130,133,140,139,105,123,158,189,173,210,255,255,255,254,249,239,229,233,238,231,
-207,213,229,235,225,182,189,215,227,235,231,231,235,231,210,185,164,161,156,161,150,119,73,35,23,28,26,27,28,23,19,19,30,33,16,13,15,16,20,24,30,31,55,93,82,62,85,144,
-149,114,150,107,45,42,51,70,76,71,73,63,38,23,19,23,40,59,44,17,10,7,13,31,65,106,139,135,108,95,73,71,114,161,161,158,191,218,203,177,192,180,149,140,179,221,229,218,
-196,197,234,238,227,243,255,255,255,253,253,255,255,252,221,228,221,214,221,219,234,250,252,255,255,255,255,255,255,255,255,254,252,241,219,220,222,222,217,196,198,205,182,154,187,245,255,255,
-255,252,231,211,208,208,208,178,111,69,47,23,16,16,17,14,20,26,28,29,38,66,76,70,55,22,22,26,45,94,136,162,146,98,85,77,72,73,85,97,114,151,146,127,113,113,141,183,
-189,116,68,38,41,64,69,64,54,51,58,54,57,101,161,139,126,193,204,165,148,146,167,185,197,205,208,222,245,254,254,255,253,249,248,238,235,228,231,210,187,185,171,144,111,106,108,105,
-88,104,153,165,151,217,255,253,252,240,246,246,227,226,247,239,198,196,199,211,184,186,206,208,206,210,180,178,203,215,213,207,208,194,167,157,146,123,87,56,41,34,24,29,36,34,28,34,
-56,49,27,20,23,24,19,22,27,37,48,55,56,48,64,139,158,147,154,71,41,45,51,64,58,54,59,58,40,16,14,27,73,93,42,19,22,27,41,72,94,125,172,163,119,83,71,68,
-83,134,165,183,183,198,212,198,175,173,150,128,154,199,228,197,160,180,193,217,215,224,252,255,241,238,254,255,255,252,238,241,215,218,231,243,253,253,254,255,255,255,255,255,255,255,255,255,
-249,235,219,238,242,233,210,194,206,197,190,182,208,252,254,254,254,247,228,215,208,211,208,178,144,109,56,17,19,20,21,21,26,28,33,37,44,73,82,77,72,54,51,61,77,118,160,162,
-130,84,70,61,65,69,77,91,97,111,119,109,115,121,139,176,173,148,108,64,62,71,86,82,62,56,71,84,92,115,192,240,232,235,233,220,199,193,204,203,207,217,228,245,254,255,255,255,
-252,242,238,220,215,224,219,186,171,199,176,141,109,90,86,88,90,95,135,155,154,180,224,242,233,224,252,242,210,211,238,252,229,198,193,222,183,191,199,189,200,206,172,176,210,224,222,220,
-212,189,184,178,169,143,108,77,52,40,30,26,26,27,24,33,41,35,36,33,31,36,31,29,31,45,54,51,47,49,55,100,150,133,100,54,43,42,44,49,45,44,48,48,37,28,23,76,
-108,66,34,29,41,59,78,113,122,128,163,163,144,97,75,62,63,88,129,198,205,183,189,187,157,148,173,153,157,193,213,179,180,185,168,198,214,211,224,234,231,240,255,255,255,254,252,252,
-247,247,253,255,252,248,250,255,255,255,255,255,255,255,255,255,254,246,245,245,229,214,199,196,196,182,172,200,245,252,254,254,252,241,222,213,205,213,210,204,193,108,56,34,23,27,29,29,
-35,35,38,54,49,87,113,75,73,75,102,129,133,142,158,146,118,70,48,37,58,69,72,80,83,83,86,85,100,119,126,142,149,147,119,102,97,97,102,93,70,65,75,92,121,136,176,253,
-255,248,218,220,210,214,219,219,219,233,246,255,255,255,255,255,253,228,204,182,185,204,219,185,183,204,165,120,111,83,82,93,87,90,129,204,199,192,208,234,235,252,252,203,182,215,246,253,
-254,247,250,246,208,201,204,199,217,219,205,218,222,205,208,232,222,210,206,196,155,123,119,107,59,37,27,26,20,23,24,30,33,33,40,61,70,70,64,44,37,45,55,48,38,38,34,36,
-58,44,33,48,54,37,34,40,47,56,50,44,48,58,64,112,109,73,58,56,73,101,111,147,154,122,119,137,136,119,85,73,78,87,137,221,212,192,189,192,175,165,197,184,175,187,203,205,
-187,167,180,207,217,208,200,205,228,252,255,255,255,255,255,245,246,252,255,255,252,245,250,248,250,253,255,255,255,255,255,255,255,250,249,236,207,189,190,210,211,187,184,207,248,250,255,254,
-248,232,214,207,206,207,207,198,197,123,43,52,38,36,38,35,35,43,59,79,78,69,56,44,49,62,125,146,148,157,164,156,129,75,52,42,56,64,69,70,68,64,66,73,83,105,112,121,
-156,134,114,118,105,105,106,92,83,77,87,126,171,190,229,255,255,235,199,210,211,217,220,222,229,245,255,255,255,255,255,255,247,214,183,170,160,185,215,196,193,184,121,101,102,78,86,93,
-93,118,149,186,194,206,203,240,255,255,227,184,208,225,241,252,252,253,249,249,232,220,215,199,203,232,225,219,211,194,205,222,229,231,227,219,153,135,154,142,80,38,27,23,17,17,29,34,
-28,31,50,82,107,104,93,69,47,42,48,44,34,19,24,20,22,29,33,51,57,36,33,52,65,63,49,50,69,94,132,132,97,76,68,76,98,128,146,165,156,127,111,127,132,130,93,84,
-114,165,179,182,146,144,179,196,185,176,204,204,200,194,196,207,190,179,206,225,227,224,204,208,227,254,255,255,255,255,255,243,242,245,249,255,253,243,228,228,240,242,250,255,255,255,255,255,
-255,254,249,221,184,196,213,222,210,190,198,196,233,252,254,253,246,227,212,217,208,205,211,203,200,165,94,92,78,61,52,49,43,47,79,105,90,58,44,43,38,41,65,108,141,165,154,98,
-66,61,57,51,56,57,62,65,62,57,59,65,72,90,111,146,167,135,134,104,80,83,86,79,82,91,151,218,249,243,250,255,255,246,212,213,219,224,235,247,253,254,255,255,255,255,255,250,
-231,203,178,173,167,184,200,214,198,160,106,104,112,86,82,79,111,111,148,193,176,175,178,220,239,215,157,155,183,238,241,248,248,246,217,200,210,210,204,183,199,215,198,185,200,213,201,197,
-208,224,224,220,170,116,132,127,62,28,26,22,24,22,21,35,43,52,69,83,105,109,109,80,49,40,45,55,51,35,27,38,62,66,63,83,65,42,76,100,97,72,55,45,83,160,160,151,
-115,80,68,76,99,135,180,164,137,106,100,116,105,80,72,75,128,146,130,143,167,121,144,175,177,169,184,196,205,220,217,217,226,189,203,213,199,201,186,197,218,249,255,245,226,226,236,233,
-235,232,229,233,241,233,228,238,252,248,249,255,255,255,255,255,255,255,246,217,207,225,228,225,201,185,206,224,239,248,250,247,240,221,207,206,203,204,211,206,201,194,189,155,122,127,97,73,
-54,59,105,118,73,52,50,43,43,43,31,72,115,137,76,40,52,63,57,55,52,54,55,57,56,55,57,59,64,77,104,143,176,158,161,94,63,69,80,87,104,128,207,255,255,255,255,253,
-254,248,232,219,221,232,250,255,255,255,254,255,255,255,249,228,207,184,163,154,151,165,193,213,157,116,105,119,115,107,93,94,147,140,144,178,151,146,160,171,163,185,207,198,204,249,249,241,
-232,205,168,133,151,165,178,192,205,214,194,155,194,224,212,197,193,194,197,203,161,113,125,112,56,28,21,19,35,34,22,38,69,85,86,84,112,129,118,71,51,38,34,55,50,50,95,140,
-136,112,85,84,90,116,162,154,127,83,82,71,104,163,162,176,177,136,86,82,95,120,172,148,153,120,72,88,77,57,47,51,84,109,118,106,148,147,129,130,143,156,165,168,198,215,204,212,
-228,211,185,171,137,141,130,144,175,211,228,196,141,160,186,215,229,214,217,227,234,227,241,254,255,255,255,255,255,255,255,255,255,255,254,246,240,238,239,232,211,197,224,238,236,246,246,241,
-233,210,201,201,199,204,210,208,210,207,212,191,170,186,144,111,82,87,105,100,79,71,61,55,49,45,45,47,65,58,21,29,48,59,56,50,45,44,49,50,48,48,51,55,58,73,92,132,
-172,169,142,88,64,58,75,118,171,225,246,255,255,255,254,253,249,218,224,217,215,234,253,255,255,255,253,241,240,242,233,204,184,161,149,146,148,165,196,196,148,101,97,108,115,136,142,129,
-189,163,146,154,133,132,164,150,161,213,253,255,255,253,242,225,213,149,115,115,123,142,170,193,192,183,142,115,170,206,210,214,205,177,160,172,139,111,121,99,55,35,23,27,48,34,27,45,
-75,95,80,101,111,122,113,88,59,31,28,62,50,79,180,203,164,123,95,79,98,146,171,168,139,88,98,112,129,146,150,175,198,162,133,108,88,122,167,155,170,144,101,88,70,65,43,49,
-70,94,127,112,112,144,158,118,114,122,121,109,155,182,173,208,231,203,154,132,102,97,90,99,112,140,163,150,111,105,137,184,180,182,205,220,222,220,247,250,249,252,255,255,255,255,255,255,
-255,255,255,254,253,250,245,236,226,215,225,238,246,248,246,243,229,207,197,191,192,203,210,215,215,222,215,203,218,190,155,141,122,113,92,105,122,91,87,85,64,57,51,37,42,36,22,30,
-42,47,48,41,37,36,38,37,40,43,44,48,52,68,93,118,128,133,121,82,58,61,78,120,171,232,245,248,255,255,255,247,234,196,213,218,201,226,250,255,255,255,240,206,192,206,217,203,
-171,150,150,150,144,154,207,224,178,134,115,115,153,164,200,198,206,183,144,134,127,132,164,185,165,217,254,238,192,179,143,134,127,104,108,119,108,126,136,156,160,116,88,88,120,183,207,214,
-196,158,140,136,122,113,127,90,58,48,40,56,68,50,63,99,123,105,99,128,130,134,125,95,52,35,44,62,68,88,146,182,160,153,121,87,134,170,193,214,163,113,143,143,157,151,154,167,
-167,180,183,137,122,147,169,161,164,141,118,102,78,69,62,56,72,98,119,120,126,143,139,113,93,88,86,73,109,139,156,200,210,164,109,83,82,80,70,77,73,77,93,95,82,78,97,105,
-106,136,167,198,219,219,235,242,248,249,254,254,255,254,252,254,255,255,255,255,255,254,247,239,231,222,204,206,229,242,229,224,204,180,172,179,176,196,208,229,231,232,222,225,227,184,182,190,
-183,135,93,100,109,86,86,87,80,70,55,40,31,29,23,29,40,38,37,29,26,27,29,27,31,37,41,44,45,58,87,107,99,107,111,82,59,65,88,120,126,153,189,218,239,245,225,214,
-226,172,183,212,203,211,240,252,253,245,229,211,207,212,220,212,183,161,149,169,178,165,214,246,222,172,157,142,179,197,219,228,246,245,214,194,150,150,179,210,221,243,255,201,149,140,134,144,
-128,95,111,99,104,106,105,149,141,92,75,91,139,196,212,192,135,92,120,140,115,113,134,113,68,59,64,90,85,86,116,165,167,125,127,168,184,160,147,95,68,68,65,50,52,125,170,183,
-191,194,171,177,212,201,199,205,194,165,163,137,141,140,127,147,146,185,203,187,186,191,183,183,176,147,116,91,70,63,71,65,61,71,82,91,102,108,105,90,78,72,77,78,97,118,147,179,
-186,133,80,65,66,57,51,59,57,50,48,52,56,73,93,93,88,105,136,158,206,219,213,226,225,233,250,253,249,247,245,243,253,252,254,254,254,254,253,245,235,219,160,171,225,246,222,206,
-183,155,132,146,172,197,203,229,241,240,240,240,240,235,235,225,220,175,122,104,88,69,63,65,77,58,40,29,28,24,21,23,27,28,21,15,12,15,20,22,27,34,38,45,47,50,68,86,
-95,104,111,84,73,70,84,102,132,156,204,210,190,200,200,217,229,212,208,224,221,186,192,232,236,235,225,224,222,212,185,183,173,148,140,176,221,214,219,238,215,206,194,175,219,249,247,243,
-242,242,210,168,162,136,106,143,235,248,235,169,149,147,168,169,180,154,125,99,111,105,120,139,150,133,105,147,192,206,203,177,130,98,135,154,128,118,107,113,91,69,70,104,100,115,119,170,
-189,169,163,204,164,126,112,105,114,94,65,43,82,208,239,235,250,240,239,255,226,187,179,186,196,176,199,180,120,84,98,153,139,184,201,205,211,207,187,153,165,148,111,80,49,44,48,47,
-48,55,57,64,76,80,84,80,65,54,61,68,77,97,132,161,189,132,93,70,42,36,47,44,43,48,41,41,47,73,122,123,111,122,126,132,172,183,133,141,125,101,149,235,242,236,235,227,
-233,241,247,250,253,254,253,243,240,228,180,196,231,222,205,182,169,149,133,149,184,203,201,236,246,249,250,252,253,253,250,246,240,190,141,114,77,56,49,43,42,36,34,31,29,27,26,26,
-22,16,12,3,0,1,9,14,20,26,33,41,48,51,56,69,85,84,82,77,86,92,94,90,126,167,191,210,193,180,197,220,232,235,227,222,228,175,135,150,165,214,228,225,191,156,156,176,
-169,151,128,162,215,228,220,236,204,234,241,234,249,255,255,253,247,225,169,137,155,143,94,121,189,168,144,113,128,177,200,189,186,153,102,94,112,123,164,161,182,193,179,160,168,179,171,168,
-164,161,180,163,132,140,140,170,158,134,135,128,91,82,92,154,212,212,206,179,136,105,102,112,105,82,61,48,151,246,246,255,255,255,250,250,242,235,231,213,196,187,196,161,126,136,177,156,
-151,194,192,192,204,203,160,108,129,114,82,62,47,41,27,27,30,33,36,47,68,69,63,69,62,44,44,49,59,77,115,136,148,130,98,58,31,24,29,33,37,41,40,38,51,85,157,168,
-119,130,132,130,149,105,64,86,72,44,50,133,218,212,220,210,211,200,208,236,245,250,252,246,235,233,219,213,221,187,170,167,168,167,155,169,192,207,227,247,252,253,255,255,255,255,254,249,
-213,155,130,100,68,55,49,49,40,31,37,40,34,27,29,28,19,10,3,0,0,0,0,5,10,16,24,33,38,44,50,58,61,65,62,64,91,105,115,92,99,137,161,175,191,165,183,212,
-234,239,218,201,252,213,93,83,102,187,224,191,123,97,113,157,204,200,156,168,168,184,204,200,207,239,247,254,254,255,255,253,255,233,184,196,190,184,160,160,148,108,83,84,122,186,183,178,
-154,97,83,94,111,120,175,186,200,213,185,139,146,162,172,161,149,143,158,148,148,165,183,194,186,187,201,192,136,128,132,141,225,225,189,184,177,140,119,104,88,106,129,126,238,255,253,255,
-255,255,253,253,243,207,192,191,210,187,168,168,179,179,163,107,137,186,187,158,180,182,146,114,90,68,57,54,44,36,23,17,15,15,23,34,58,50,45,56,58,44,33,38,56,88,125,123,
-100,85,62,35,23,22,24,31,40,37,34,37,50,68,115,191,146,123,136,149,121,49,45,61,48,34,42,73,173,207,208,206,179,148,163,217,236,239,246,242,221,184,155,192,204,163,156,144,
-128,154,164,196,205,214,247,253,253,255,255,255,255,255,255,250,199,137,101,80,71,64,61,61,49,38,41,44,59,43,31,26,15,8,0,0,0,0,0,0,2,13,20,26,30,35,41,45,
-47,45,51,61,86,86,86,79,84,109,142,160,179,172,184,191,212,233,220,199,245,225,98,82,116,185,206,183,146,118,122,144,171,176,164,162,170,179,199,191,175,200,234,249,254,255,255,254,
-255,250,234,227,205,183,165,142,130,99,78,97,127,146,161,160,112,79,71,82,97,107,167,193,186,186,186,173,187,192,187,153,134,146,160,171,187,190,196,191,183,193,206,212,212,229,221,227,
-252,247,227,238,226,194,135,98,125,214,239,241,250,253,254,255,255,254,254,255,238,144,149,172,212,227,219,218,198,168,108,85,137,150,150,104,123,168,155,115,72,57,48,43,37,33,23,19,
-14,17,29,30,38,34,35,45,54,44,31,40,77,118,118,98,72,66,45,28,26,27,28,33,38,36,34,41,48,58,80,160,163,150,137,156,116,30,24,36,33,23,29,44,90,175,203,167,
-87,79,122,200,235,238,240,235,221,186,141,169,167,133,136,122,128,146,155,210,222,224,238,253,255,255,255,255,255,255,255,253,197,109,85,83,79,76,77,69,59,50,50,51,66,43,23,15,
-8,5,0,0,0,0,0,0,0,6,12,17,24,30,35,36,36,36,43,58,75,72,65,62,70,87,113,144,151,147,140,143,175,220,226,208,242,250,147,121,139,136,168,187,162,161,167,161,
-155,150,136,149,170,185,180,187,207,228,246,255,255,255,255,255,252,246,225,217,182,146,127,127,128,102,86,94,94,113,139,122,72,66,64,65,76,118,165,176,178,176,215,200,187,189,175,142,
-155,177,177,204,205,207,203,165,158,190,231,241,250,248,254,255,255,255,252,249,248,248,219,179,208,255,254,255,250,253,255,255,255,255,255,253,240,182,197,226,224,241,233,233,205,136,116,151,
-156,115,136,129,115,132,115,87,72,57,42,37,35,30,20,15,13,16,20,17,23,27,37,41,40,44,52,62,118,127,92,78,63,56,45,35,34,33,33,34,35,34,36,42,58,102,135,135,
-135,120,112,135,98,27,17,16,17,20,24,34,48,102,151,120,56,52,73,125,199,231,234,231,236,215,171,171,161,133,142,118,118,105,132,190,214,225,235,254,255,255,255,255,255,255,255,241,
-150,91,84,83,83,77,73,69,63,62,54,45,43,28,20,13,5,0,0,0,1,0,0,0,0,3,6,12,19,26,30,30,29,33,45,71,78,73,71,65,68,82,101,130,119,94,99,107,
-147,167,155,182,242,250,190,203,229,210,175,172,155,148,154,140,136,127,116,130,185,238,236,233,239,255,255,255,255,255,255,255,221,183,180,201,179,160,129,116,120,119,113,102,104,122,116,93,
-65,51,61,58,79,123,165,193,215,233,221,189,184,173,130,137,187,218,213,215,199,201,200,165,167,226,252,247,252,255,255,255,255,255,255,255,255,255,255,255,255,255,255,254,254,254,255,255,
-255,255,255,254,254,234,212,234,238,232,231,226,212,197,199,215,179,157,163,154,143,105,76,75,70,54,40,36,31,23,17,13,14,10,3,6,22,37,49,42,48,69,85,108,127,106,84,71,
-63,61,56,42,37,35,35,36,38,40,40,52,70,116,179,139,127,164,155,122,79,47,36,36,34,34,35,31,36,49,58,51,47,48,57,80,143,193,183,178,211,196,162,180,157,128,128,104,
-102,106,119,183,196,197,238,255,255,255,255,255,255,255,255,227,143,93,85,83,75,72,66,64,57,61,48,36,31,24,16,12,5,0,0,0,0,0,0,0,0,1,2,6,15,22,24,24,
-28,38,54,83,91,82,72,70,69,78,104,128,101,88,100,93,153,135,119,168,224,210,217,253,255,246,182,157,147,107,100,112,120,105,118,148,225,255,252,254,253,255,255,255,255,255,255,255,
-203,142,127,167,218,199,156,144,139,161,162,134,118,101,70,57,50,45,57,61,95,136,194,219,221,232,204,186,206,157,149,183,162,199,221,208,226,217,221,224,236,255,254,254,255,255,255,255,
-255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,254,250,246,243,233,228,221,229,215,213,212,196,163,153,163,162,114,88,87,88,62,37,30,22,28,30,15,
-14,7,1,17,45,51,43,40,48,77,129,153,132,88,68,59,58,57,52,47,40,38,38,41,43,47,54,65,107,156,200,173,173,183,160,129,102,99,107,105,83,61,45,37,36,36,31,35,
-41,45,55,83,126,123,123,134,144,149,170,157,128,116,114,108,111,113,132,187,196,211,239,254,255,255,255,255,255,255,253,220,154,106,93,94,84,79,72,69,55,45,43,34,33,27,20,15,
-6,2,0,0,0,0,0,0,0,0,0,6,15,20,21,23,31,45,59,87,94,86,69,72,69,77,112,140,141,112,91,88,118,115,111,146,180,154,172,229,255,240,225,206,134,98,106,127,
-129,107,120,179,234,254,255,255,255,255,255,255,255,255,255,253,224,140,122,149,198,207,180,197,179,160,162,139,108,93,73,51,43,51,65,90,126,148,176,179,169,170,191,210,238,189,179,160,
-146,190,217,226,250,252,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,254,252,246,228,213,219,218,201,214,211,
-192,176,165,170,150,132,118,84,70,51,44,26,35,57,33,19,12,5,17,65,83,73,51,57,54,95,161,146,134,105,76,57,58,54,49,50,43,40,38,41,43,44,54,73,146,204,221,213,
-203,146,147,175,146,149,149,125,83,58,40,33,35,33,24,24,29,38,48,78,134,130,118,118,119,132,156,177,155,123,137,142,112,111,127,182,217,233,242,254,255,255,255,255,255,255,252,226,
-178,153,105,106,104,90,71,65,54,44,38,35,38,31,28,21,12,5,2,0,0,0,0,0,0,0,0,3,13,17,19,24,34,45,64,95,107,76,70,79,80,95,115,146,173,137,90,76,
-79,80,78,92,113,127,168,176,215,219,196,182,127,105,113,140,169,173,197,241,228,247,255,255,255,255,255,255,255,255,255,255,241,136,128,160,201,210,203,189,158,129,140,128,104,86,90,69,
-48,55,71,92,115,137,137,150,148,148,184,171,187,200,156,136,161,208,217,236,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-255,255,255,255,255,255,254,253,246,227,217,221,217,214,221,217,198,203,200,183,153,140,111,58,40,34,48,95,112,82,34,27,17,10,29,72,94,93,63,79,86,104,135,136,132,121,88,62,
-56,50,48,51,48,41,37,40,42,41,44,68,134,208,224,208,205,173,157,200,194,160,157,114,54,43,34,24,30,26,21,20,24,29,42,68,126,129,115,115,122,114,121,162,170,135,167,165,
-109,112,129,180,220,243,254,255,255,255,255,255,255,254,247,228,201,196,137,115,105,75,54,51,51,48,45,38,40,38,33,22,14,10,7,2,0,0,0,0,0,0,0,5,10,16,19,22,
-31,54,78,120,107,52,69,85,90,116,122,128,156,150,107,78,72,68,64,78,99,115,129,126,162,214,162,177,148,109,116,153,199,219,249,255,249,253,255,255,255,255,255,255,255,255,255,255,
-217,136,135,158,224,228,210,154,135,154,163,135,90,90,95,85,55,52,61,73,78,99,119,113,134,165,165,130,104,176,164,140,151,192,196,238,255,255,255,255,255,255,255,255,255,255,255,255,
-255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,254,253,213,191,205,200,210,222,217,217,214,208,185,155,105,65,40,28,24,50,154,149,82,62,55,
-31,37,69,107,155,122,65,98,130,144,132,116,114,100,80,68,52,45,50,54,48,44,41,37,40,38,40,55,104,172,203,197,187,187,162,179,205,180,148,86,45,38,33,30,34,29,23,24,
-27,29,42,66,116,126,111,107,102,94,99,121,127,164,203,161,107,105,141,173,210,249,255,255,255,255,255,255,255,255,252,229,205,204,139,78,72,51,47,49,51,52,47,42,41,41,31,19,
-16,17,14,9,7,2,0,0,0,0,1,7,13,16,19,22,26,50,86,143,75,41,57,71,83,93,119,142,143,165,143,98,78,72,69,77,95,116,121,120,180,229,150,140,132,123,146,178,
-214,249,255,255,255,255,255,255,255,255,255,255,255,255,255,255,200,164,151,168,240,225,192,146,118,146,158,116,79,84,88,82,57,48,54,62,62,71,83,78,121,153,119,94,83,134,160,133,
-116,157,182,215,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,252,254,255,255,253,184,153,192,197,194,178,193,
-219,225,196,161,128,79,43,31,29,37,77,129,157,118,115,98,80,147,172,187,210,169,125,148,132,137,128,111,94,80,73,66,55,47,48,51,49,47,43,41,41,41,42,69,107,143,198,208,
-156,130,126,148,173,206,184,133,86,54,41,43,44,40,34,30,28,31,44,65,93,116,106,95,100,82,79,129,128,177,177,163,151,119,119,140,180,249,255,255,255,255,255,255,255,255,227,191,
-196,191,137,79,64,52,52,51,55,64,55,47,47,43,23,17,21,29,27,20,10,7,2,0,3,7,7,9,14,17,23,22,20,42,95,136,69,42,49,61,76,86,137,183,171,165,123,115,
-109,84,66,75,90,127,157,133,183,207,133,143,153,171,192,204,190,234,250,255,255,255,255,254,255,255,255,255,255,255,255,255,233,201,183,185,192,160,132,132,125,109,100,66,64,63,59,59,
-45,40,49,48,49,48,45,56,80,87,73,65,69,98,121,101,108,147,184,207,234,232,242,255,255,255,255,255,255,255,255,255,255,254,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-255,255,255,254,235,218,249,255,246,186,157,192,210,205,171,168,211,213,173,133,111,72,41,34,38,59,164,198,189,199,190,186,212,208,173,158,176,193,167,163,139,113,91,77,80,69,66,63,
-52,48,48,50,50,50,45,43,42,43,42,64,133,179,191,203,155,125,108,140,176,196,207,197,123,71,57,57,70,54,37,26,26,31,44,58,79,98,105,104,94,86,90,112,143,154,155,194,
-175,130,112,125,191,248,254,255,255,255,255,255,254,236,165,155,184,189,162,99,71,59,68,77,83,99,72,56,48,31,17,22,29,35,30,20,22,26,12,6,8,9,9,13,14,20,20,17,
-23,37,111,125,75,45,49,61,75,102,176,208,190,186,180,162,151,123,87,76,80,119,142,118,148,179,127,143,172,198,199,215,176,205,243,255,255,255,255,254,255,255,255,255,255,255,255,255,
-255,234,193,196,158,130,149,151,111,72,52,44,43,35,31,33,30,34,38,44,48,36,38,57,70,75,77,72,78,93,90,78,104,163,207,214,191,200,226,254,255,255,255,255,255,255,255,254,
-254,254,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,253,249,243,234,226,236,221,206,180,161,172,203,214,199,196,197,165,140,106,99,70,48,38,43,114,220,225,226,235,231,231,
-243,225,199,189,186,186,168,179,146,90,71,78,77,64,65,52,48,52,52,54,52,52,50,48,44,44,41,54,111,143,161,165,153,136,119,146,189,205,201,187,163,109,78,86,78,45,27,24,
-27,33,41,55,76,93,112,109,94,101,101,120,162,154,165,160,128,115,140,150,190,232,239,253,255,255,255,255,255,222,163,165,191,194,170,108,100,90,113,127,141,151,106,72,50,27,23,28,
-35,31,24,23,45,56,22,13,15,14,15,16,16,21,17,17,41,61,95,80,43,37,47,63,98,146,178,170,148,183,239,225,190,151,129,95,75,95,100,104,132,136,118,118,141,168,192,199,
-176,192,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,246,210,210,180,153,137,109,75,65,49,40,30,23,20,19,21,29,41,50,54,50,56,90,111,119,113,108,121,130,102,76,
-115,178,201,211,197,219,238,250,255,255,255,255,254,254,249,247,247,253,255,255,255,255,255,255,253,255,255,255,255,255,255,255,255,249,235,236,241,232,191,135,130,141,146,169,196,227,227,206,
-158,155,140,109,94,75,73,75,78,194,236,231,236,245,240,234,247,247,238,221,200,189,171,148,118,99,88,83,68,64,68,58,56,55,52,52,54,54,50,49,48,47,47,55,82,104,115,108,
-120,129,113,125,158,185,208,225,194,142,87,84,48,34,28,26,29,36,41,55,54,71,99,95,105,115,98,112,164,171,161,122,118,140,161,201,201,199,218,211,239,255,255,255,255,218,194,203,
-197,178,130,97,123,133,134,139,144,161,109,85,54,34,27,30,30,26,26,34,62,68,30,20,26,22,21,17,17,23,24,33,76,105,105,73,50,37,41,56,92,139,164,154,137,148,212,217,
-175,126,116,90,70,90,100,82,111,155,134,135,143,172,200,196,203,236,246,255,255,255,255,255,255,255,255,255,255,255,255,255,255,248,187,176,178,169,122,73,57,64,50,31,24,17,14,15,
-17,29,42,58,92,97,90,128,146,151,143,153,157,143,111,82,127,177,206,212,226,241,235,247,253,254,254,253,252,246,236,245,241,250,254,255,255,255,255,246,248,255,255,255,255,255,255,253,
-248,236,208,213,198,153,112,101,119,129,185,197,198,232,241,210,186,185,156,142,116,114,160,192,191,247,245,246,248,246,242,246,253,238,163,157,167,193,172,143,123,104,78,63,55,64,62,59,
-58,55,52,52,54,52,54,52,51,52,52,66,69,72,93,98,87,87,90,112,132,143,183,215,175,149,118,79,35,36,31,28,28,35,42,51,45,43,42,38,43,52,63,118,165,139,123,144,
-153,160,165,192,184,200,191,171,228,255,255,255,252,214,196,204,191,158,127,111,113,120,118,123,127,135,98,91,55,35,28,24,24,27,42,62,76,76,37,33,36,35,29,27,24,26,47,71,
-109,135,144,116,75,44,34,44,64,97,118,142,160,123,164,180,177,142,87,72,64,108,133,80,107,189,172,161,160,182,207,217,228,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-255,254,242,189,170,151,105,61,45,44,37,28,20,16,12,17,21,29,45,71,123,155,155,189,189,180,190,207,197,157,135,102,127,184,218,219,228,228,228,218,217,214,228,238,247,245,232,236,
-241,252,255,255,247,240,233,226,240,255,255,255,255,255,255,246,235,229,217,204,187,160,165,180,171,187,213,228,234,246,249,220,205,217,212,171,130,164,247,249,255,248,249,252,252,253,248,252,
-253,234,146,170,189,189,183,154,122,88,57,42,45,57,50,48,48,49,47,48,50,54,52,54,51,52,55,63,58,58,65,57,55,54,68,93,114,112,115,139,122,125,154,82,23,28,31,30,
-22,28,37,37,30,23,20,20,29,41,45,69,97,98,94,134,164,185,218,206,168,162,153,157,232,255,255,255,252,224,192,200,187,139,113,121,119,127,143,164,171,141,104,92,58,38,28,23,
-24,28,44,65,71,65,47,41,51,56,50,45,38,48,104,135,146,149,143,126,82,35,31,41,45,62,78,112,148,123,109,109,148,165,94,72,79,113,157,147,171,211,182,149,172,229,248,235,
-246,253,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,247,226,163,94,65,49,34,22,21,15,13,13,17,22,33,57,90,134,171,199,240,243,232,236,232,196,153,134,106,
-142,193,214,231,238,222,214,176,157,175,198,221,241,241,220,222,232,231,229,218,206,210,210,222,231,249,254,255,255,255,255,254,243,232,231,221,215,218,222,235,217,219,227,232,240,253,253,248,
-245,254,255,249,228,242,255,254,254,253,253,255,255,254,255,255,249,245,210,201,213,192,173,142,111,77,50,35,35,40,37,34,38,42,43,44,45,50,50,52,51,52,54,52,47,38,36,31,
-30,24,27,44,65,63,62,101,141,135,114,51,19,23,23,24,16,20,28,28,22,17,14,14,21,35,38,42,51,63,73,95,156,213,201,183,156,129,160,185,183,206,235,234,225,204,210,199,
-164,126,120,136,142,141,176,201,217,200,109,93,63,38,28,27,28,27,34,47,56,52,43,41,58,69,64,62,68,80,100,144,171,167,150,115,92,41,34,41,44,50,62,73,95,104,88,78,
-93,137,97,65,87,104,135,189,245,228,169,169,164,240,255,240,227,248,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,254,248,241,179,148,153,49,20,20,17,12,8,12,16,
-19,31,58,94,135,162,193,224,250,245,239,227,185,143,123,121,170,203,218,235,242,201,186,162,136,143,165,184,196,190,187,186,192,184,180,160,154,182,210,226,231,232,241,255,255,255,255,255,
-248,241,239,239,236,232,229,240,234,228,228,231,242,253,255,255,250,250,255,255,255,255,255,255,255,254,253,255,255,255,255,255,254,255,243,220,212,198,168,137,104,75,52,34,22,21,19,20,
-26,33,36,38,41,41,45,47,48,48,47,47,44,35,27,21,17,13,9,19,45,49,43,83,118,111,95,54,21,30,29,15,8,17,29,33,33,21,15,10,7,14,23,22,27,43,91,116,
-162,217,158,151,139,137,141,158,141,162,189,213,214,218,208,172,149,130,137,121,122,144,156,185,215,190,94,78,52,29,26,28,33,29,37,54,66,59,59,66,75,68,59,79,120,111,90,140,
-183,178,153,134,116,49,37,42,45,51,56,57,66,86,88,76,71,123,129,79,75,84,100,164,252,249,233,226,194,201,255,255,235,242,254,254,255,255,255,255,255,255,255,255,255,255,255,255,
-255,255,255,255,238,186,163,150,70,19,15,17,12,9,10,16,20,29,52,87,122,158,190,201,240,233,205,197,193,178,151,176,219,231,239,242,229,194,173,146,151,139,130,150,155,156,172,171,
-173,163,175,155,153,179,214,225,234,234,248,255,255,255,255,254,253,252,252,249,242,233,235,239,238,227,224,231,242,252,255,254,250,249,255,255,255,255,255,254,255,255,254,255,255,255,255,253,
-254,255,254,247,227,205,171,133,102,76,54,34,21,19,10,10,10,17,22,28,34,37,37,41,42,42,43,43,40,35,24,17,9,6,5,6,23,37,29,55,69,80,113,66,17,19,21,8,
-9,31,49,66,63,31,22,15,7,7,8,12,38,77,130,135,163,207,155,132,111,107,99,88,99,143,189,204,182,192,217,175,142,128,141,99,98,156,169,183,213,190,91,49,38,29,27,36,
-51,52,57,76,77,76,88,114,102,70,64,112,157,154,175,200,193,168,115,92,94,55,47,41,45,52,55,56,57,76,93,84,71,95,108,82,72,76,85,139,219,249,255,254,207,153,215,245,
-255,249,247,252,249,236,250,255,255,255,255,255,255,255,255,255,255,255,255,255,253,177,105,90,78,37,15,16,14,12,10,16,20,27,49,79,122,163,176,169,191,191,200,217,225,208,160,160,
-193,208,219,218,201,180,161,167,196,162,116,139,150,169,207,185,163,141,169,157,163,199,234,242,246,248,254,255,255,255,255,255,254,252,252,254,246,234,236,233,228,212,226,236,240,248,248,250,
-254,255,255,255,255,254,255,255,255,255,255,255,255,255,254,252,250,254,252,248,236,213,176,135,104,78,55,35,21,10,8,7,5,9,12,15,29,37,37,42,45,45,43,40,37,31,24,16,
-9,5,2,3,8,17,21,33,45,47,78,72,33,23,38,34,43,43,59,94,76,35,26,21,19,19,17,24,65,107,139,143,156,198,126,93,84,85,70,59,79,105,147,155,134,154,187,156,
-134,147,162,135,136,192,201,186,193,196,141,66,41,36,33,40,65,77,77,90,101,118,120,125,106,83,86,116,157,189,206,213,201,129,69,54,63,62,51,38,44,52,52,54,55,61,75,82,
-90,95,99,84,86,105,91,111,157,180,221,255,193,163,193,198,235,245,238,224,210,201,242,255,254,255,255,255,255,255,255,255,255,254,254,254,239,172,95,57,36,36,20,14,13,12,10,10,
-15,23,47,78,114,127,113,140,160,156,173,194,179,194,191,187,186,196,196,167,175,196,187,205,213,177,168,185,180,179,210,175,151,161,160,144,176,218,242,246,250,254,255,255,255,255,255,255,
-255,253,252,254,254,243,233,229,232,200,221,231,233,247,249,253,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,254,252,254,254,252,245,215,175,141,111,82,64,43,24,13,10,7,
-6,7,9,16,26,35,37,38,45,44,42,38,35,30,23,20,14,8,7,6,9,14,22,28,26,24,43,76,56,58,62,44,62,65,76,79,54,35,27,24,28,24,23,35,69,123,148,163,
-129,156,99,92,97,73,66,64,90,127,137,130,154,182,139,143,155,165,173,180,192,213,215,191,185,192,170,93,63,56,43,55,85,112,101,112,140,157,151,146,121,107,108,100,111,183,210,218,
-191,119,70,68,62,61,47,36,37,45,49,50,50,56,64,68,76,88,107,101,94,128,140,135,139,136,185,254,221,210,225,199,214,229,233,193,172,190,227,248,249,254,255,255,255,255,255,255,
-255,254,252,250,238,154,83,52,26,23,16,15,15,14,10,10,16,29,49,77,100,90,68,106,147,127,135,158,180,190,192,184,183,173,137,113,139,178,201,205,187,192,215,200,175,186,179,154,
-146,164,143,150,197,224,245,249,255,255,255,255,255,255,255,255,253,252,253,255,255,254,252,252,246,212,222,232,234,241,254,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-253,250,255,255,253,228,164,123,106,77,64,50,26,12,8,8,3,6,7,14,22,26,26,31,44,48,37,37,34,29,24,19,14,12,9,8,12,17,23,24,17,14,27,70,99,64,48,50,
-56,71,64,43,37,33,29,27,26,20,26,45,87,167,169,175,141,139,116,127,132,107,99,82,115,158,161,150,173,147,133,179,191,179,177,205,213,208,208,206,197,176,112,99,83,69,68,82,
-108,132,100,114,141,154,178,175,130,104,120,127,116,172,203,211,197,148,111,75,65,64,50,36,37,40,47,49,49,52,57,55,61,70,88,125,123,151,190,185,143,133,168,252,255,253,248,239,
-224,232,236,184,177,197,206,229,243,254,255,255,255,255,255,255,252,255,253,250,255,164,48,34,16,16,20,16,16,16,14,16,21,33,49,72,94,105,100,118,121,116,146,160,201,206,199,173,
-163,134,105,100,126,165,192,180,186,198,187,165,153,161,129,116,141,169,160,193,232,235,246,249,254,255,255,254,255,255,255,253,252,253,253,254,254,254,254,254,252,234,226,225,220,220,242,255,
-255,255,255,255,255,255,255,255,255,255,255,255,255,254,255,254,253,240,234,252,255,229,157,108,106,92,69,41,23,12,5,2,2,3,3,9,19,26,26,33,45,51,37,35,36,35,30,21,
-14,12,13,15,23,30,27,28,17,12,30,70,118,79,49,62,86,82,41,40,48,42,36,29,21,21,36,52,75,161,168,180,201,168,127,130,139,135,121,86,99,135,172,196,185,157,177,193,
-197,169,185,208,198,185,205,218,207,162,107,116,98,108,108,109,140,137,118,128,149,167,194,185,144,126,142,127,161,201,203,208,204,186,135,93,71,66,56,44,47,43,43,44,44,48,52,52,
-54,50,68,116,143,165,179,197,167,130,137,241,255,254,255,255,248,249,229,191,157,182,218,232,238,253,255,255,255,255,255,254,239,236,243,241,221,205,93,22,10,9,15,16,22,21,21,22,
-21,28,44,66,90,106,106,113,104,114,156,187,210,197,191,180,161,114,77,77,111,175,173,173,160,146,144,182,169,133,137,146,175,206,201,205,199,197,219,236,250,245,252,252,248,245,242,240,
-243,249,253,253,254,253,248,220,208,213,210,201,193,224,241,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,247,241,238,221,206,243,249,224,164,111,109,109,77,41,19,7,1,3,
-15,17,10,16,37,48,55,61,78,58,41,55,57,57,42,23,15,19,16,22,41,44,33,35,28,27,49,93,140,121,82,73,98,77,36,40,37,38,38,30,23,22,43,65,91,149,144,148,
-212,158,142,149,160,136,100,73,71,82,95,183,238,207,187,192,193,155,176,196,142,127,170,185,184,148,122,126,113,125,111,135,163,156,114,104,141,192,198,180,167,153,136,118,156,186,196,179,
-177,172,169,143,84,79,76,65,59,45,40,35,37,47,55,55,50,45,62,92,112,149,175,186,169,142,134,228,252,255,255,255,252,225,201,186,143,150,204,243,234,236,252,254,255,255,255,255,
-182,144,207,234,178,191,134,43,33,14,9,16,30,35,29,24,23,29,48,70,85,95,106,120,132,158,180,200,204,190,185,178,149,100,73,66,80,122,114,129,129,143,133,163,177,144,157,157,
-163,194,197,172,146,165,190,220,220,198,218,225,214,194,232,243,242,247,255,255,254,250,235,200,176,184,203,203,203,224,239,249,255,255,255,255,255,255,255,255,255,255,255,255,255,250,234,219,
-214,229,236,222,180,162,143,107,100,107,92,62,26,12,2,9,30,15,24,86,111,98,95,72,83,91,114,122,90,63,37,27,21,27,24,24,33,37,50,59,52,57,82,130,176,162,92,52,
-52,58,51,35,29,28,28,23,21,23,42,59,87,111,105,147,190,155,201,203,173,120,77,63,62,91,126,171,211,189,192,204,179,148,167,151,95,93,113,146,168,149,116,107,112,151,167,170,
-155,146,97,78,108,176,199,183,182,200,194,170,142,141,154,150,155,171,192,170,116,100,99,80,47,35,34,33,36,43,48,48,47,41,48,62,64,92,130,176,176,114,121,208,242,255,255,254,
-232,193,179,172,151,113,162,238,229,220,253,255,255,255,255,236,201,155,194,225,161,184,160,83,85,50,19,24,51,61,47,30,26,31,49,70,79,92,122,139,171,196,201,205,182,169,176,177,
-143,100,85,73,61,70,91,111,112,97,104,118,144,150,126,139,139,160,163,201,179,180,167,179,164,142,171,193,185,199,239,254,255,255,253,249,246,243,225,211,213,201,193,200,212,207,215,218,
-235,252,255,255,254,249,255,255,255,255,255,255,255,250,225,192,208,222,201,153,106,83,83,85,93,100,99,80,43,26,8,22,48,29,52,101,139,118,87,61,65,101,140,129,90,58,43,34,
-20,20,22,21,35,62,77,71,64,82,107,162,196,149,55,35,34,50,50,34,37,24,17,15,14,16,24,27,48,68,69,122,165,177,229,221,161,106,79,68,69,119,165,184,193,205,222,217,
-189,190,183,111,72,76,128,187,176,144,136,129,133,191,190,172,165,147,100,70,75,142,203,205,201,212,217,151,101,128,176,156,149,167,164,164,142,127,90,54,29,28,29,30,34,36,40,40,
-41,42,41,44,51,57,69,125,137,86,92,134,206,250,254,253,201,197,197,182,171,120,125,203,240,248,255,255,255,254,252,218,228,178,193,210,172,199,198,119,98,71,44,42,72,87,68,41,
-27,35,47,59,71,120,157,171,198,191,201,199,155,139,173,180,143,108,92,79,62,56,86,93,95,84,87,105,116,115,120,142,146,172,182,226,196,163,165,163,146,129,156,187,198,198,242,255,
-236,218,201,194,211,224,218,217,218,194,180,180,200,187,177,187,219,238,248,248,238,240,255,255,255,255,255,253,227,199,185,177,186,169,119,95,78,61,90,129,114,94,95,100,62,33,28,41,
-52,50,47,42,82,109,99,63,58,70,83,88,68,43,44,30,15,9,10,14,30,69,91,87,76,80,104,141,175,144,52,47,45,48,47,34,33,20,13,8,8,3,1,1,8,17,40,83,
-140,211,229,204,137,113,85,61,83,153,168,151,176,233,233,177,189,214,194,129,80,91,156,206,197,183,184,176,164,200,198,165,140,126,98,70,75,123,197,198,198,214,204,134,142,186,177,107,
-146,156,144,155,156,118,62,34,27,28,29,30,31,34,41,43,49,45,37,37,36,38,45,63,93,82,87,100,149,208,253,249,193,193,214,218,205,119,95,154,227,255,255,255,253,252,247,236,
-227,215,212,196,194,191,148,107,88,65,57,54,66,64,63,52,36,38,44,51,83,114,164,189,196,203,204,210,198,191,199,177,147,114,87,75,61,49,61,73,91,93,95,112,105,114,132,132,
-139,212,245,240,219,217,234,220,194,156,172,199,218,235,250,254,217,187,194,215,228,225,218,215,205,203,200,187,194,165,150,168,191,215,232,226,210,198,241,255,255,255,255,250,226,189,162,171,
-163,139,122,140,164,118,135,148,140,130,141,129,76,61,64,51,29,19,14,16,27,69,70,49,49,52,61,61,35,28,26,15,9,7,8,12,28,61,85,82,68,66,78,113,122,141,91,58,
-55,49,41,41,30,17,7,1,0,0,0,0,0,8,40,63,122,201,226,191,128,106,70,56,78,123,141,156,178,225,214,179,187,199,177,136,127,141,163,175,177,171,177,167,170,180,191,171,
-98,91,122,114,128,127,179,206,201,225,205,161,184,184,140,104,149,161,142,147,139,87,66,61,43,34,34,28,33,37,49,54,68,75,49,35,37,44,50,58,70,64,76,83,107,193,245,238,
-214,197,217,210,163,94,83,134,213,248,253,254,247,246,245,240,243,229,193,190,177,163,93,63,58,44,51,55,42,37,44,43,36,41,45,65,91,94,143,189,201,242,243,250,250,240,213,173,
-147,113,82,62,48,41,45,57,77,83,97,109,113,127,126,109,141,231,255,255,214,169,187,191,171,148,125,129,187,247,250,234,211,219,227,236,227,219,208,206,200,210,191,172,155,163,147,147,
-186,213,218,213,205,185,203,231,254,255,254,249,246,205,161,161,172,167,170,180,218,184,165,160,150,162,158,130,113,111,82,47,17,6,1,2,5,16,28,36,64,49,48,69,45,24,20,15,
-9,13,12,14,35,59,51,44,55,43,45,82,77,86,52,27,37,40,50,52,31,14,2,0,0,0,0,0,0,0,13,38,84,130,161,185,147,98,64,52,61,86,127,165,190,221,193,175,
-192,179,141,115,134,133,147,136,144,176,175,163,178,163,162,141,109,102,134,135,153,150,190,220,226,233,221,224,211,187,141,148,153,161,125,88,77,78,65,86,86,61,43,31,30,43,58,66,
-95,114,91,64,58,59,69,71,80,79,71,78,112,191,221,192,164,162,196,189,161,134,97,135,183,194,194,219,231,232,236,235,236,224,176,200,203,165,133,85,73,43,40,42,37,42,47,41,
-34,40,48,61,71,94,151,187,222,255,255,255,255,255,228,178,141,107,77,56,43,38,40,52,72,90,100,104,112,116,104,92,122,203,252,228,173,125,115,127,125,106,91,109,170,214,204,178,
-165,201,222,224,215,194,163,139,153,162,151,160,157,190,191,179,167,180,187,191,203,197,178,212,254,255,254,250,247,234,218,212,208,192,170,182,213,214,197,165,163,170,155,140,127,97,59,29,
-7,2,0,0,0,5,22,35,45,31,35,51,36,21,17,15,13,16,22,26,42,48,31,40,41,14,12,26,24,0,0,5,21,31,45,52,27,3,0,0,0,0,0,0,0,0,5,24,
-87,119,101,99,93,77,52,45,58,91,125,144,179,193,162,162,160,153,120,88,83,104,121,139,172,205,198,182,180,148,120,142,148,118,111,135,156,178,211,226,225,228,231,235,220,172,179,194,
-147,149,112,78,68,95,97,91,95,86,62,38,33,49,77,102,129,149,142,127,127,100,94,83,73,78,88,98,133,183,207,198,182,168,151,150,163,163,128,120,153,156,168,201,221,220,232,234,
-238,222,178,170,186,144,147,115,76,44,45,37,40,52,51,50,54,43,42,56,72,107,160,180,231,255,255,255,255,255,236,190,149,115,84,63,57,49,50,57,78,105,107,99,104,98,91,99,
-146,190,215,167,160,116,105,140,134,99,113,154,185,176,171,162,144,164,201,194,196,155,106,93,105,127,142,180,184,206,211,178,141,160,175,186,191,182,171,235,255,255,255,253,249,245,243,248,
-245,212,189,207,210,213,187,180,213,199,173,140,97,51,30,17,6,0,0,0,5,3,12,35,27,28,21,17,19,16,17,16,14,13,22,30,36,27,22,30,14,0,0,0,0,0,0,0,
-1,15,23,36,28,0,0,0,0,0,0,0,0,0,7,29,57,68,83,92,82,59,42,37,54,76,100,132,146,128,107,100,78,78,73,73,80,86,95,133,189,214,199,178,168,165,161,162,
-165,132,119,146,153,165,203,227,227,235,234,235,224,176,199,198,175,129,82,79,68,111,135,116,116,106,77,47,37,48,83,115,135,179,207,175,169,178,169,130,99,92,106,122,125,156,196,189,
-178,180,155,139,151,149,130,136,153,171,183,211,226,225,227,231,212,206,189,139,133,150,163,135,107,83,70,49,38,45,52,68,75,55,43,64,83,101,143,167,218,255,255,255,255,255,243,210,
-177,141,102,83,75,66,61,61,68,85,93,90,111,164,211,224,250,249,208,144,109,92,90,108,108,94,94,132,154,148,160,173,168,165,169,180,171,128,90,69,88,114,135,182,199,193,192,187,
-184,194,201,193,180,175,189,231,252,254,249,247,253,250,243,242,249,239,214,201,210,233,204,229,247,228,196,135,77,44,28,14,5,0,0,0,0,0,9,20,19,30,23,14,14,15,16,16,
-15,12,14,16,17,12,12,13,0,0,0,0,0,0,0,0,0,1,10,29,31,9,1,0,0,0,0,0,0,0,5,17,22,37,78,79,61,50,41,38,50,64,72,101,114,80,50,43,
-51,63,70,78,75,72,83,114,194,228,211,182,176,210,196,169,163,139,182,207,213,218,233,239,238,239,235,241,231,199,190,179,167,104,84,87,90,118,153,178,193,149,98,55,42,55,80,114,
-154,178,219,201,180,194,184,148,122,144,140,150,141,141,167,175,165,180,176,183,162,123,121,156,153,165,156,190,220,222,234,219,153,179,187,147,101,153,161,149,162,160,99,64,40,45,59,65,
-61,47,43,61,70,88,129,156,191,250,253,255,255,254,253,236,210,163,118,111,120,97,68,62,66,80,90,92,118,176,249,246,239,239,220,171,91,72,65,69,65,69,84,104,126,140,144,146,
-143,146,143,148,123,83,71,71,97,102,136,176,191,184,190,222,204,198,194,178,167,203,213,222,243,250,247,253,253,232,239,250,253,255,252,246,250,255,252,250,245,228,204,158,99,57,36,16,
-8,3,0,0,1,17,52,47,26,36,24,15,14,13,15,17,16,13,9,5,9,20,23,15,0,0,9,2,0,0,0,0,0,2,17,33,38,21,7,7,2,0,0,0,3,3,8,12,
-10,26,45,45,44,42,35,40,50,62,65,76,71,44,29,30,37,45,55,70,66,84,88,111,191,249,246,228,215,225,224,193,162,167,197,228,253,255,255,252,250,248,241,224,206,210,200,197,
-206,178,134,129,122,155,219,232,189,127,102,59,43,71,130,141,143,168,226,220,180,190,206,190,146,116,132,162,186,192,180,184,176,177,193,203,184,125,118,134,123,137,143,191,205,198,221,206,
-134,125,173,185,114,141,162,156,163,163,141,83,58,59,58,52,45,29,33,41,45,66,105,157,187,204,207,229,254,254,252,235,215,189,154,141,179,140,72,63,88,143,168,111,93,113,123,160,
-185,171,158,134,77,59,59,58,63,93,120,116,105,111,122,121,126,136,142,123,106,75,73,99,108,107,144,193,211,226,240,222,197,199,180,146,178,232,242,240,243,250,254,255,242,231,249,255,
-255,255,255,255,255,255,255,253,249,234,198,179,139,79,42,24,17,10,5,3,8,38,45,62,62,35,20,14,14,14,15,15,14,13,8,13,24,48,56,37,19,13,40,33,0,0,0,0,
-0,6,22,35,38,24,14,14,8,5,5,3,6,8,15,17,14,14,21,27,30,31,30,34,40,50,55,55,49,38,36,37,41,49,77,107,88,90,102,156,212,249,250,201,207,219,220,224,
-198,206,214,235,255,255,255,255,255,250,235,229,176,196,217,172,199,200,135,129,139,154,200,227,211,144,101,71,48,69,142,168,160,179,229,236,190,193,214,194,126,80,86,153,207,191,175,178,
-171,161,205,201,173,162,151,120,93,94,144,207,205,203,213,205,160,100,120,164,164,158,175,183,179,156,150,146,118,66,43,42,40,27,27,33,38,56,97,154,184,164,185,221,248,255,240,212,
-190,179,183,198,221,162,95,93,157,165,154,107,98,113,112,141,173,122,108,98,71,52,56,55,78,134,154,129,125,129,155,140,126,121,99,86,82,63,76,90,91,119,170,217,227,239,241,211,
-199,214,167,177,200,199,233,239,239,254,255,255,249,253,255,255,255,255,255,255,255,255,255,253,248,226,205,212,187,120,57,31,17,9,5,1,3,8,20,36,48,34,16,15,16,15,15,14,
-14,13,20,42,70,106,109,84,55,28,51,44,7,0,0,3,3,14,21,42,59,43,20,16,12,12,2,1,3,7,17,26,21,14,13,15,19,20,22,28,35,48,47,44,42,38,43,54,
-64,80,142,148,88,99,142,199,245,252,246,205,205,201,193,193,198,221,238,240,241,255,255,255,255,254,222,191,149,200,232,180,198,183,137,136,156,176,169,227,222,155,90,59,50,54,104,155,
-183,193,197,217,221,190,185,184,121,82,83,120,177,177,143,127,120,130,187,194,184,172,157,119,93,101,162,206,203,193,206,218,156,144,146,157,151,162,183,208,185,129,123,153,169,128,56,36,
-30,23,27,29,35,56,95,137,158,177,208,217,241,247,236,210,175,136,151,186,228,236,212,227,231,153,143,121,143,161,184,167,130,111,132,109,77,58,62,84,128,173,169,178,186,164,168,151,
-125,95,71,58,52,54,73,76,91,126,160,182,187,184,196,213,229,236,190,184,169,185,220,233,245,255,255,255,255,255,255,255,255,255,255,255,255,255,255,254,247,238,238,228,175,128,80,44,
-19,8,3,1,2,5,13,13,16,21,16,21,31,26,23,22,20,29,87,126,137,142,133,113,50,27,56,70,41,16,10,17,28,35,42,61,71,45,21,22,23,14,9,5,3,5,19,31,
-31,22,17,15,15,14,17,23,33,38,41,41,37,48,68,72,108,149,183,179,126,123,211,229,248,252,253,228,194,185,179,171,173,221,250,233,224,253,255,255,255,255,245,198,169,219,236,199,
-213,183,144,133,150,190,146,182,182,167,114,68,47,47,75,109,170,222,196,191,201,185,149,170,170,111,101,121,149,168,151,121,115,118,149,158,169,163,157,111,95,126,187,198,176,168,175,167,
-111,153,187,196,191,194,193,182,155,113,116,120,125,141,80,42,29,26,24,30,37,48,84,133,155,178,194,204,226,231,211,197,167,130,112,127,228,255,255,255,252,239,221,211,204,183,182,142,
-92,114,160,122,79,68,78,125,182,220,211,198,179,167,176,151,122,87,68,55,45,45,51,75,80,100,130,140,167,167,184,208,204,204,197,165,161,196,226,231,250,255,255,255,255,255,255,255,
-255,255,255,255,255,255,254,253,247,240,233,220,198,153,100,66,35,12,15,13,10,12,12,7,15,22,22,28,35,36,30,23,23,64,146,155,151,144,123,100,68,70,83,88,66,24,19,31,
-44,41,61,76,65,37,23,29,36,26,16,9,6,7,19,37,40,29,22,16,13,12,13,21,31,36,37,37,38,57,97,125,160,176,186,167,141,129,224,240,247,250,253,249,233,207,182,139,
-176,229,245,236,246,254,255,255,255,255,254,246,250,249,247,239,213,146,165,160,161,220,160,122,128,139,122,92,63,64,84,106,191,231,205,193,197,198,165,184,203,158,140,184,199,192,150,121,
-132,116,129,116,133,165,162,127,120,151,191,197,176,143,123,129,128,148,187,192,204,207,193,158,113,98,109,99,65,71,58,37,24,22,29,38,41,44,80,143,191,192,196,221,185,157,155,180,
-160,134,132,147,232,250,255,255,248,243,239,186,191,180,126,80,78,104,105,94,80,86,114,146,197,243,233,200,163,184,187,161,130,102,78,66,44,41,44,65,68,72,105,127,143,167,184,173,
-154,135,191,168,161,176,207,213,252,255,255,255,255,255,255,255,255,255,255,255,255,255,254,250,248,242,228,217,213,177,97,66,69,56,37,20,19,22,16,10,16,34,42,44,38,37,31,21,
-51,118,153,148,137,140,116,106,102,104,102,94,70,38,34,51,63,57,76,77,50,30,21,28,41,42,30,13,8,6,17,40,42,30,17,13,8,7,9,19,27,34,35,38,45,66,119,140,
-164,184,199,165,130,140,243,249,240,240,245,235,246,231,173,150,189,227,229,239,254,255,255,255,255,255,254,253,254,252,249,254,177,116,180,177,189,186,156,115,118,126,122,108,72,95,143,183,
-189,178,148,171,196,203,177,187,212,208,199,207,217,208,167,104,115,101,107,109,107,130,136,114,116,134,155,187,170,119,106,135,116,97,154,190,210,198,155,135,111,104,115,97,69,52,40,37,
-35,37,43,52,51,58,101,156,208,234,219,225,191,148,150,160,126,111,134,157,182,171,215,241,254,248,254,203,165,147,101,79,78,94,97,91,94,119,168,175,214,246,227,198,194,211,201,167,
-130,135,150,105,45,45,45,45,65,58,75,90,93,141,154,118,98,112,158,165,133,135,173,194,239,255,255,255,255,255,255,255,255,255,255,255,255,255,253,249,246,243,234,217,205,193,167,132,
-122,104,52,22,20,26,20,12,28,44,56,52,38,33,28,30,108,149,156,149,134,139,125,133,104,94,102,90,76,66,69,95,101,88,86,64,45,29,17,22,50,63,40,15,7,5,13,34,
-37,27,13,7,6,5,9,15,24,35,40,50,66,88,118,114,147,185,175,140,134,178,253,250,236,222,212,211,225,232,175,169,201,217,234,245,255,255,255,255,255,255,255,255,253,252,250,235,
-176,150,179,175,179,133,129,97,107,108,78,73,64,105,154,151,147,178,165,136,177,187,180,179,203,212,212,211,203,192,180,129,105,85,71,65,77,99,120,82,80,98,118,161,154,115,94,112,
-99,114,175,201,217,201,144,113,122,128,134,119,91,61,54,65,65,64,65,77,84,98,135,170,208,222,217,210,187,165,151,128,104,84,90,101,111,133,165,229,255,255,255,236,172,147,125,111,
-84,76,78,107,134,155,183,203,219,205,176,162,205,229,198,140,167,197,182,116,51,51,54,35,49,47,44,51,56,86,93,72,57,77,108,116,95,107,136,178,213,242,241,252,255,255,255,255,
-255,255,255,255,255,254,252,250,245,243,232,215,211,207,210,204,193,130,101,49,38,76,56,44,66,58,58,48,27,27,34,69,114,141,162,155,132,132,126,136,115,129,122,98,57,58,56,88,
-115,91,71,43,22,13,9,24,52,55,33,10,5,1,7,24,28,20,9,2,2,3,10,15,24,40,54,70,83,101,93,90,126,123,126,143,142,190,255,204,183,208,179,211,228,231,196,178,
-201,236,252,252,255,255,255,255,255,255,255,255,253,254,254,246,185,133,150,163,168,139,164,91,71,76,59,50,49,76,116,141,136,150,182,155,147,153,165,178,176,185,212,215,189,184,192,171,
-90,59,55,42,47,69,83,58,70,77,90,116,122,108,100,104,119,158,178,204,219,215,173,142,140,162,168,150,108,84,76,84,79,80,90,98,104,121,148,172,189,193,196,175,151,176,157,126,
-127,116,104,102,136,153,172,242,255,255,255,229,160,176,170,137,108,100,88,132,168,170,182,206,214,180,162,197,225,217,144,108,225,250,168,93,80,84,69,41,34,45,50,44,48,56,78,78,
-58,71,82,76,72,87,125,183,184,177,205,235,255,255,255,255,254,254,255,255,254,253,253,245,240,238,240,227,220,218,210,206,205,172,179,132,87,128,148,136,125,71,45,30,27,42,64,86,
-116,157,162,149,130,144,130,134,143,140,141,114,76,45,51,65,87,80,44,17,7,0,1,17,28,23,10,1,0,0,2,13,14,9,1,0,3,5,13,20,33,58,66,76,85,94,84,84,
-95,87,112,167,199,236,255,197,154,185,204,242,247,239,234,232,213,242,255,255,255,255,255,255,255,255,255,254,255,255,255,249,183,151,162,178,150,161,201,126,86,70,76,64,55,79,113,160,
-175,150,161,203,169,140,146,157,126,126,184,194,186,199,193,121,55,36,29,26,27,44,47,34,41,45,52,77,112,102,72,80,105,151,148,164,201,211,206,189,190,205,192,154,99,90,86,94,
-105,132,150,141,116,114,122,120,121,161,172,143,156,183,150,128,142,155,133,147,185,158,147,214,255,255,243,205,196,201,157,133,121,114,118,130,143,161,201,219,222,191,194,231,222,160,114,144,
-222,210,154,112,93,86,76,38,27,38,55,61,64,70,94,94,85,101,121,91,73,91,112,153,162,172,208,226,246,255,255,255,252,240,242,236,233,239,246,224,226,231,238,234,226,220,214,213,
-212,208,207,196,158,150,136,132,112,62,38,28,36,65,87,122,157,173,167,151,135,150,147,141,130,113,104,68,54,37,49,62,68,57,35,7,0,0,1,10,10,7,2,0,0,0,0,1,
-2,3,0,0,3,9,20,27,55,76,66,57,94,114,80,75,76,83,144,234,255,255,252,206,155,228,252,253,247,249,254,253,241,250,255,255,255,255,255,255,255,255,255,254,254,254,253,234,
-182,176,183,150,132,161,207,150,130,111,106,100,95,106,154,196,215,201,213,220,179,151,132,143,104,101,151,163,178,212,186,79,42,31,21,17,22,29,23,19,20,16,23,45,92,93,66,61,
-79,119,122,113,164,210,218,214,214,224,184,135,102,105,113,118,134,184,199,211,162,130,137,108,84,115,143,147,164,173,154,164,153,141,144,167,162,176,169,186,207,246,241,179,204,191,147,122,
-94,86,95,120,129,158,189,218,219,210,225,233,203,144,133,191,217,198,154,165,153,132,94,28,26,43,62,79,102,113,121,109,122,137,141,92,73,86,108,134,133,176,198,203,238,249,252,248,
-245,236,211,203,225,220,213,212,232,234,233,233,224,215,214,215,215,211,208,192,176,167,116,79,66,51,42,43,79,111,108,149,167,170,165,161,144,135,146,144,105,69,38,28,21,22,36,59,
-64,50,38,21,7,7,12,5,0,0,0,0,0,0,0,0,0,0,0,3,12,20,27,41,64,64,58,64,122,121,76,79,90,106,167,249,245,215,211,182,215,255,252,226,241,255,254,254,
-255,255,255,255,255,255,255,255,255,255,255,255,253,253,246,241,171,126,141,106,109,162,220,156,148,134,130,146,173,151,168,196,215,218,214,213,184,155,136,140,128,133,146,161,192,219,192,94,
-79,50,26,19,20,19,13,9,9,8,9,23,43,58,61,58,69,82,111,148,191,214,225,225,217,200,153,125,120,115,91,118,130,164,198,220,153,115,107,66,63,94,136,178,154,135,169,168,
-129,122,151,169,155,193,207,186,175,234,229,157,170,179,126,86,76,79,92,119,126,163,173,218,228,236,236,199,142,112,111,167,220,214,217,218,212,163,82,28,30,61,80,100,148,125,148,156,
-168,154,143,119,87,78,111,130,156,162,184,192,184,184,185,218,224,221,192,203,212,218,197,210,224,224,221,225,225,222,219,212,210,211,207,197,186,187,173,125,132,135,129,140,165,154,125,148,
-175,173,171,165,150,91,68,97,92,49,24,37,36,28,55,63,58,45,37,27,22,16,5,0,0,0,0,0,0,0,0,0,0,0,3,7,19,36,54,86,92,71,68,94,139,91,64,86,
-105,141,189,235,221,167,162,165,242,255,239,233,252,255,255,255,255,255,255,255,255,255,255,255,255,254,253,253,253,255,240,191,114,78,82,87,100,151,204,214,191,155,123,151,176,194,227,248,
-246,236,213,210,206,177,133,121,136,139,139,175,197,207,189,104,86,55,33,24,17,13,9,5,6,7,2,10,22,43,54,55,58,70,93,151,194,224,225,220,227,203,146,116,121,112,62,107,
-157,167,198,217,153,91,65,37,57,108,165,179,161,150,140,125,120,114,123,139,168,226,234,203,214,210,189,169,177,162,92,61,65,80,100,121,128,157,187,225,217,221,212,161,109,69,75,169,
-198,147,186,219,198,130,71,36,48,88,88,111,193,184,205,218,182,134,122,108,73,88,130,146,190,194,190,184,132,119,149,182,187,190,187,178,191,204,189,193,203,215,229,232,229,227,224,213,
-217,215,207,214,208,205,203,198,198,193,190,186,190,185,177,182,179,175,162,153,146,90,37,54,75,35,17,36,38,43,77,88,75,62,48,28,19,7,0,0,0,0,0,0,0,0,0,0,
-0,3,8,17,43,62,100,139,101,101,112,153,162,86,66,68,116,154,130,161,214,192,162,186,231,245,240,249,255,255,255,255,255,255,255,255,255,255,255,255,255,255,254,250,252,214,123,76,
-87,115,108,101,147,165,177,201,196,161,170,155,151,233,255,255,255,253,225,198,203,192,154,126,123,114,122,129,150,156,127,95,85,50,29,22,15,9,5,2,1,0,0,2,12,28,37,42,
-45,59,84,119,160,203,197,198,200,185,134,126,143,141,107,153,199,189,184,198,176,106,54,42,61,104,168,147,137,111,119,108,126,114,100,121,163,208,224,214,219,213,189,196,179,142,90,61,
-50,69,79,105,135,170,215,200,180,177,179,180,134,142,144,149,175,143,150,201,207,155,86,58,78,107,97,112,178,232,224,224,177,114,108,92,87,122,149,155,215,208,161,158,136,112,129,142,
-129,130,126,108,128,149,169,189,213,228,239,239,229,226,222,220,221,221,217,215,213,212,213,214,208,204,200,193,193,193,191,190,182,164,133,128,142,107,78,90,58,20,13,21,24,34,55,83,
-93,62,35,17,9,0,0,0,0,0,0,0,0,0,0,0,3,9,21,48,90,113,129,140,109,169,190,169,121,79,65,56,106,129,95,137,200,185,185,180,200,220,229,243,255,255,250,255,
-255,255,255,255,255,255,255,255,255,255,254,255,239,127,65,64,116,165,141,130,148,143,148,153,191,183,194,194,170,220,255,255,255,254,220,201,207,194,164,128,108,118,122,119,120,121,139,93,
-85,51,31,21,14,10,2,1,0,0,0,0,7,17,26,35,41,52,77,116,150,167,173,206,177,143,143,150,157,168,175,200,214,201,182,184,182,122,65,71,75,85,105,90,98,92,95,83,
-94,107,109,122,161,185,211,219,208,214,197,184,172,143,122,82,63,80,107,129,156,150,151,146,134,144,194,226,236,240,226,215,222,198,167,153,157,154,109,68,69,79,100,129,144,217,197,164,
-140,154,150,125,161,200,205,219,207,189,165,146,129,142,115,108,106,105,106,90,102,153,178,206,224,225,231,239,236,239,238,238,239,236,234,231,226,225,220,215,212,205,198,197,192,193,191,190,
-184,158,122,142,144,141,150,113,41,10,14,19,23,24,26,69,99,48,15,8,0,0,0,0,0,0,0,0,0,0,1,6,12,22,40,83,135,161,143,119,143,215,214,170,123,114,84,56,
-80,118,133,164,184,178,183,180,204,231,234,235,242,229,211,253,255,255,255,255,255,255,255,255,255,255,255,255,241,147,92,80,102,157,171,168,133,116,130,151,184,192,198,219,218,243,255,255,
-255,255,224,193,197,196,185,144,101,120,123,129,137,147,160,108,79,48,27,21,19,17,8,0,0,0,0,0,6,15,24,31,40,50,72,122,163,164,175,200,161,164,182,182,164,184,207,207,
-203,207,194,186,133,91,73,68,70,59,58,78,84,72,52,62,65,76,88,109,150,172,191,204,191,184,212,204,164,143,135,136,140,144,158,154,172,157,143,134,119,144,196,225,238,212,210,224,
-232,221,197,176,162,168,158,91,49,57,88,105,99,133,139,173,186,217,180,132,141,168,173,176,158,176,158,140,160,186,139,105,107,106,100,91,119,134,164,206,206,219,232,245,250,252,253,252,
-253,250,252,249,246,238,227,219,211,203,198,200,196,184,179,178,163,129,153,168,164,163,150,91,27,23,27,23,23,16,10,40,58,16,0,0,0,0,0,0,0,0,0,0,0,1,6,14,
-22,33,49,80,128,171,173,148,183,235,217,179,139,109,77,54,92,148,178,206,215,193,180,185,213,234,239,226,214,189,180,210,243,250,254,255,255,255,255,255,255,255,255,250,205,127,97,95,
-109,154,148,168,178,137,109,130,134,184,238,243,255,255,255,255,255,255,227,160,161,189,193,170,107,86,69,92,109,126,136,90,63,44,19,10,15,23,21,8,2,1,0,0,7,15,23,29,
-40,47,64,100,149,183,203,199,206,198,193,178,164,196,204,182,189,210,208,180,115,87,66,50,61,48,36,56,66,75,64,54,55,47,47,73,126,158,168,170,157,167,192,208,191,160,158,164,
-173,163,143,144,155,156,155,141,113,141,208,222,205,172,173,200,219,217,197,198,192,169,163,101,40,40,49,50,58,77,95,142,153,161,187,182,175,164,161,140,125,177,167,150,191,194,162,164,
-162,129,95,92,106,120,158,187,184,213,238,250,253,254,255,254,254,254,254,254,254,248,239,226,218,206,200,190,172,148,134,136,130,118,150,169,154,142,121,76,47,27,15,9,8,1,2,8,
-9,0,0,0,0,0,0,0,0,0,0,2,5,7,14,22,30,35,44,59,84,162,204,186,171,144,132,129,100,65,57,56,114,185,197,226,240,192,189,197,219,225,240,227,220,179,169,157,
-184,219,245,255,255,255,255,255,255,255,255,197,132,122,97,99,125,144,173,168,203,193,140,114,129,190,249,255,255,255,255,255,255,255,243,178,161,186,186,155,86,56,47,51,58,62,75,55,
-42,38,26,9,13,21,27,22,12,2,1,1,7,19,24,29,35,41,49,71,83,130,225,236,221,192,191,167,144,193,165,115,140,178,179,161,113,94,63,41,38,35,27,34,48,65,59,55,
-52,40,36,54,101,144,168,163,151,162,185,183,175,179,169,132,151,148,143,139,139,142,141,135,108,118,161,168,163,173,158,170,194,214,204,173,180,179,147,76,30,26,31,36,38,54,59,104,
-141,171,184,182,167,168,163,137,121,143,163,180,173,164,191,199,157,129,104,119,119,123,154,160,185,217,240,253,253,254,255,255,254,255,255,255,254,250,242,234,221,189,167,170,151,142,107,116,
-130,139,147,162,121,88,93,88,58,22,10,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,7,9,15,20,29,37,42,50,62,71,116,164,153,156,118,101,87,63,50,55,59,
-109,156,176,236,248,200,192,190,201,217,221,203,171,141,146,128,154,232,254,255,255,255,255,255,255,255,255,185,113,115,98,99,149,151,194,200,198,187,148,136,161,193,252,255,255,255,255,255,
-255,255,255,240,205,198,192,128,64,51,38,35,35,38,43,35,30,31,31,17,9,13,19,20,16,7,1,3,7,16,26,31,34,37,41,55,92,137,199,214,218,208,190,149,142,165,111,80,
-93,126,155,157,113,91,66,44,34,30,26,26,33,48,50,52,44,38,43,69,121,150,173,191,203,194,217,203,186,200,176,134,158,132,140,132,107,111,116,151,161,150,120,157,155,169,182,178,
-204,207,219,197,169,176,95,38,24,24,27,23,16,27,54,109,153,180,189,178,154,167,141,102,121,141,163,179,151,168,180,160,130,122,104,99,98,114,157,164,210,235,241,247,247,250,254,253,
-254,253,249,250,250,246,240,226,211,185,184,192,179,153,114,98,101,140,169,156,116,75,65,64,47,22,10,1,0,0,0,0,0,0,0,0,0,0,0,0,0,8,8,10,13,16,23,31,
-41,56,64,69,84,105,122,134,156,129,82,61,57,54,57,68,97,147,201,235,248,225,226,205,206,222,185,171,130,98,102,114,196,255,255,255,255,255,255,255,255,255,255,222,135,113,107,119,
-162,169,182,217,199,169,146,144,184,220,247,255,255,255,255,255,255,255,254,249,228,200,198,134,71,63,37,28,27,28,30,27,23,22,24,19,9,9,13,9,12,10,7,8,14,19,23,28,
-35,36,37,55,104,149,182,200,227,234,198,179,189,144,76,65,92,165,187,157,122,106,83,62,45,35,28,26,31,48,59,54,41,44,66,109,151,169,179,199,213,219,220,221,220,191,146,147,
-171,156,125,116,93,86,137,191,180,154,127,184,158,192,220,219,217,221,218,214,196,151,58,34,29,27,21,15,13,27,66,118,141,137,147,167,160,158,116,59,100,162,187,167,160,141,130,141,
-173,142,111,128,126,150,198,189,205,183,194,212,231,236,236,249,240,201,199,229,232,234,233,219,213,208,185,164,137,120,119,104,108,135,150,156,121,65,49,41,36,20,5,0,0,0,0,0,
-0,0,0,0,0,0,0,0,3,14,13,12,14,19,23,29,41,64,72,75,101,108,120,155,139,86,62,62,54,50,62,78,116,184,228,241,247,232,217,199,213,198,176,173,134,91,97,143,
-218,255,255,255,255,255,255,255,255,255,255,242,149,130,127,153,205,201,167,191,184,160,137,134,183,220,240,248,252,255,255,255,255,255,254,245,222,187,178,111,100,94,61,36,28,24,23,22,
-22,22,21,21,10,6,10,10,12,10,13,15,20,24,28,33,37,37,38,58,104,121,140,196,240,215,178,203,205,162,90,77,115,191,208,189,171,148,112,79,55,43,37,34,35,42,57,54,
-45,59,113,169,170,172,185,217,236,238,221,222,226,190,151,144,164,192,170,125,90,79,144,170,186,175,161,234,214,196,214,241,250,245,238,219,134,76,43,34,38,38,38,31,29,61,75,98,
-127,144,150,164,177,125,66,61,90,135,149,127,125,125,133,130,163,169,135,149,134,150,173,142,116,90,113,172,193,176,172,200,191,148,132,185,194,205,199,214,224,226,207,179,156,144,149,165,
-167,160,144,111,85,50,37,29,23,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,17,19,15,20,27,31,35,47,59,59,57,68,97,135,163,123,77,64,70,72,72,88,116,
-139,206,235,252,249,245,221,187,178,150,154,157,137,113,119,176,242,255,255,255,255,255,255,255,254,243,254,214,151,129,146,207,225,186,164,164,156,160,143,129,182,213,224,228,252,255,255,255,
-255,255,255,250,215,147,104,71,79,77,63,47,40,26,20,19,19,21,17,14,9,7,10,12,13,14,17,21,26,30,33,36,41,41,40,55,83,106,140,187,231,204,186,194,189,157,119,135,
-149,173,183,179,183,178,134,86,65,59,56,47,42,42,45,52,59,83,128,158,171,162,163,204,222,224,221,234,228,208,186,142,86,119,158,120,78,61,80,116,206,255,255,246,210,184,225,246,
-255,254,254,226,154,94,75,106,133,121,72,51,55,77,57,82,142,160,120,122,162,156,106,101,109,114,100,102,102,97,86,102,113,148,128,102,115,92,84,75,72,93,120,150,141,122,130,149,
-136,126,133,155,150,169,162,162,194,212,213,212,203,210,187,172,171,165,136,95,68,44,34,28,16,9,0,0,0,5,10,2,0,0,0,0,0,0,0,5,17,24,21,22,26,31,38,43,
-52,50,47,43,51,92,123,113,90,76,75,121,113,101,154,197,169,198,246,255,247,231,235,201,146,115,106,108,109,114,123,198,255,254,255,255,255,255,255,255,253,248,245,200,165,154,180,218,
-200,169,147,142,135,136,126,123,182,179,193,234,254,255,255,255,255,255,255,253,207,123,58,54,61,51,45,34,30,23,22,21,15,15,14,7,6,9,13,16,19,21,24,31,35,41,40,41,
-49,47,43,50,69,98,146,196,222,189,187,190,162,119,123,135,141,143,141,168,203,203,155,91,78,82,84,64,47,43,44,54,62,78,94,113,127,129,146,175,199,168,191,218,210,162,122,108,
-63,70,85,68,48,41,43,77,184,255,255,254,247,250,255,255,255,254,250,247,211,171,170,210,210,192,156,142,119,71,90,151,171,143,112,154,155,126,115,132,121,87,69,83,88,88,83,88,
-101,99,76,85,105,79,59,75,95,127,121,151,160,149,130,127,109,109,132,132,125,139,140,123,156,190,212,213,215,214,184,164,158,161,133,99,71,90,70,51,28,12,7,1,5,10,19,9,
-0,0,0,0,0,0,2,10,24,31,28,28,29,37,43,44,54,49,42,38,49,78,109,84,66,84,77,136,118,105,157,224,226,224,249,255,249,211,199,183,153,106,73,70,71,84,107,198,
-255,246,246,243,255,255,254,243,248,253,252,215,204,206,212,187,193,169,140,155,122,106,94,107,173,194,191,232,254,255,255,255,255,255,255,255,215,97,47,43,44,38,31,24,24,26,33,22,
-17,15,8,6,9,14,17,24,30,35,36,41,43,48,51,55,63,52,47,50,71,94,135,186,187,164,168,156,142,100,84,92,118,130,156,191,213,221,173,116,104,112,115,85,54,47,48,54,
-59,68,72,86,105,116,118,132,147,125,119,140,148,113,75,59,47,50,47,34,27,43,54,56,191,255,255,255,255,255,255,255,255,255,255,255,242,252,229,203,200,144,185,193,180,153,164,186,
-162,127,118,164,160,114,119,140,100,55,45,61,79,97,93,97,104,88,91,102,79,54,63,82,112,182,162,189,199,175,141,123,108,101,109,108,136,144,134,158,199,210,214,214,212,205,200,192,
-177,153,121,98,80,82,71,44,33,27,9,6,6,6,21,19,0,0,0,0,0,0,3,14,29,38,37,35,35,38,45,54,54,45,34,34,48,76,107,91,64,71,72,90,107,133,180,247,
-252,183,196,222,220,204,179,148,171,148,92,95,85,82,104,157,214,212,203,197,179,219,250,234,250,255,255,250,248,235,227,206,194,177,147,148,112,112,99,123,187,210,222,229,254,255,255,255,
-255,255,255,255,235,118,36,33,34,38,26,22,24,27,30,28,28,31,17,13,16,21,24,30,47,55,62,55,55,59,68,77,73,58,48,51,61,84,122,133,118,109,94,79,82,76,78,87,
-94,125,172,203,196,192,175,155,150,196,192,122,70,61,57,57,59,64,73,84,98,94,71,65,72,73,57,64,71,68,50,34,31,29,24,22,22,56,109,157,234,255,255,255,255,255,255,255,
-255,255,255,255,255,255,252,186,158,130,184,189,161,157,171,179,168,149,155,172,186,178,137,115,76,36,30,41,62,80,84,99,100,97,105,92,56,52,75,77,108,190,219,220,212,175,120,104,
-104,101,104,113,141,170,194,205,208,182,163,185,201,204,207,183,146,108,86,79,59,42,38,37,42,37,20,9,2,5,10,7,0,0,0,0,0,0,5,13,31,48,48,45,49,51,54,72,
-65,48,33,34,55,87,115,107,83,66,63,93,141,177,180,234,247,136,112,142,198,192,168,160,183,147,93,114,135,125,135,156,158,156,156,156,141,186,243,252,253,253,249,252,242,205,213,206,
-217,191,134,133,105,100,132,143,201,214,215,238,253,255,255,255,255,255,254,252,243,167,51,20,21,28,23,20,23,20,16,21,30,58,38,26,27,30,35,40,54,66,71,66,71,76,79,80,
-75,62,51,47,47,58,91,94,59,47,49,64,72,78,84,77,87,109,169,213,190,154,155,194,218,238,219,177,98,68,65,61,59,70,85,88,82,68,52,43,38,37,35,35,45,45,27,21,
-17,16,19,14,13,54,125,207,254,255,255,255,254,254,255,255,255,255,255,255,255,248,243,214,162,151,156,143,115,87,125,169,184,176,182,165,146,129,101,65,40,20,20,28,48,72,87,91,
-84,83,80,65,48,45,50,70,100,148,206,191,167,133,102,101,106,112,135,135,120,136,165,153,148,130,112,136,157,165,158,135,98,75,61,47,38,33,26,31,37,56,47,15,14,16,9,3,
-0,0,0,0,0,0,6,16,34,59,65,64,71,70,68,107,107,85,55,50,82,119,128,141,108,69,82,158,176,134,155,252,218,95,104,155,204,169,141,149,153,144,116,163,179,157,149,151,
-163,186,177,168,198,227,243,247,236,231,236,242,210,115,132,171,220,211,154,139,127,108,133,143,177,189,204,245,253,253,254,255,254,254,252,248,240,139,54,40,22,21,17,13,15,9,3,13,
-23,38,33,33,38,41,43,50,56,63,68,73,80,80,80,82,70,59,49,44,38,43,56,48,31,29,36,44,55,71,76,79,105,113,164,218,203,164,155,204,227,226,224,173,92,69,70,71,
-71,86,105,93,83,63,47,36,35,30,24,23,28,29,16,8,10,12,16,16,14,33,80,165,238,247,246,235,236,254,255,255,255,255,255,255,255,253,253,218,170,150,92,65,55,49,69,73,
-139,175,180,149,80,52,52,41,27,14,14,23,43,71,94,80,68,66,55,41,36,29,29,61,88,93,146,140,130,113,108,104,109,121,132,146,134,107,87,84,90,108,100,114,126,127,132,116,
-78,64,58,44,37,36,33,34,29,55,63,22,26,27,10,5,2,5,3,0,0,2,13,27,45,72,86,91,95,90,83,112,139,122,70,73,119,139,157,167,121,104,135,180,184,120,128,238,
-203,87,109,167,170,144,147,139,140,168,178,197,205,162,162,160,176,187,183,193,225,238,253,246,220,233,239,226,212,125,78,118,175,190,144,121,139,151,146,132,151,179,196,211,242,252,253,253,
-254,249,240,239,236,185,88,75,47,22,14,10,6,0,1,9,20,19,22,37,44,44,50,57,68,77,79,88,85,73,70,75,62,57,48,41,36,36,34,28,28,33,36,44,64,102,109,95,
-116,149,196,210,203,168,151,201,221,212,211,111,61,64,73,78,73,85,107,90,69,55,42,35,31,26,21,19,16,14,5,1,2,7,10,14,23,29,52,101,162,193,208,219,236,255,255,255,
-255,255,255,255,255,255,255,215,128,112,100,71,58,47,69,75,95,140,151,141,95,84,62,34,21,14,14,19,34,51,72,65,57,56,48,36,29,15,22,35,40,50,70,86,106,97,85,79,
-98,108,112,146,151,122,98,79,87,98,104,100,107,115,123,97,71,82,70,52,51,52,45,44,36,57,69,59,43,34,21,9,5,5,8,6,5,10,22,31,48,78,100,115,113,113,106,111,
-129,132,82,106,146,184,200,165,147,149,189,193,162,121,115,153,136,82,101,130,133,134,129,136,154,185,186,168,165,154,165,193,200,191,205,183,206,211,194,199,173,192,217,213,200,91,59,86,
-123,200,199,144,130,139,125,107,129,167,190,189,232,243,246,247,245,240,234,232,226,227,158,93,71,43,26,14,13,17,13,13,16,20,30,44,48,49,57,66,86,85,78,85,80,71,69,66,
-61,52,44,40,37,34,30,27,30,38,54,66,112,162,126,100,142,186,220,207,180,154,167,210,169,98,97,57,57,75,80,59,54,73,80,66,56,49,41,37,34,27,21,15,9,6,1,0,
-0,0,2,12,22,30,42,62,95,129,161,219,255,255,255,255,255,255,255,255,255,255,255,214,122,113,121,108,75,58,55,69,75,95,112,112,114,99,64,31,23,20,16,15,29,41,51,51,
-47,43,37,37,28,10,9,15,19,28,38,43,59,56,58,75,93,99,109,127,120,113,108,72,63,70,75,80,100,118,99,70,78,85,68,61,63,64,55,48,42,42,54,63,51,36,24,14,
-5,5,6,6,9,15,24,28,45,86,113,122,133,139,112,100,119,141,119,111,132,186,194,180,197,179,193,210,153,113,99,111,95,83,88,95,102,105,112,142,169,190,183,162,153,156,175,186,
-165,175,196,192,171,150,109,118,97,108,147,201,151,56,57,58,73,175,231,198,178,161,137,119,140,160,189,194,225,235,233,232,227,222,199,204,201,197,136,83,78,72,48,37,43,56,38,22,
-22,30,36,49,54,55,62,75,93,84,76,73,71,73,71,68,63,57,49,44,37,38,37,37,47,57,78,123,164,189,160,127,183,225,213,196,183,186,189,128,90,54,40,44,73,98,83,62,
-64,72,69,68,57,50,41,37,33,28,20,14,9,6,0,0,0,0,0,2,8,13,23,37,51,64,118,187,249,255,255,255,255,255,255,255,255,255,255,228,136,109,125,107,75,64,63,73,
-76,63,77,99,92,70,52,30,24,21,15,14,21,31,36,36,35,29,24,21,15,10,8,10,19,23,22,24,34,40,56,92,83,75,88,87,88,90,91,71,62,69,69,90,119,119,97,88,
-105,97,109,100,87,69,80,70,50,45,55,54,41,26,9,5,3,9,7,9,12,15,23,30,50,93,122,125,133,129,104,94,118,127,141,126,155,191,225,250,253,233,210,218,143,137,142,120,
-112,94,78,87,111,111,126,156,171,177,176,186,163,164,176,180,157,167,189,179,132,104,82,83,71,68,87,133,116,73,64,78,99,186,233,226,221,203,175,169,172,168,186,200,221,220,222,210,
-208,215,149,137,157,149,109,76,90,101,71,70,66,52,43,37,34,37,40,49,56,62,70,88,86,84,92,86,71,71,72,69,72,63,55,49,42,41,41,54,85,108,137,160,179,173,162,148,
-189,226,204,193,211,211,149,82,57,52,45,50,69,76,57,69,65,64,76,77,61,47,41,36,30,26,20,14,9,5,0,0,0,0,0,0,2,10,22,33,43,65,92,143,190,229,255,255,
-255,255,255,255,248,227,233,178,120,127,130,93,72,70,66,78,93,104,98,88,75,52,38,22,20,17,15,12,13,23,29,23,24,23,22,15,9,12,13,16,26,30,16,16,24,31,62,99,
-80,71,78,80,79,71,65,69,70,66,68,92,102,88,94,100,92,111,142,129,90,61,91,75,49,41,41,35,23,13,6,6,5,15,14,14,14,19,27,34,55,86,122,148,156,140,107,97,
-116,120,140,182,247,255,254,255,255,255,252,235,172,183,204,173,148,90,77,108,171,169,147,164,178,170,177,221,198,186,189,186,168,167,183,157,112,91,92,86,68,65,68,76,91,93,95,111,
-161,207,241,248,245,232,203,190,186,186,196,203,205,205,210,204,187,200,179,130,108,88,93,88,94,107,80,68,62,43,36,37,34,33,38,47,58,71,85,92,86,93,108,101,78,73,78,75,
-75,68,63,59,58,54,54,97,153,172,179,187,191,187,164,161,198,222,207,189,189,169,111,63,43,43,41,51,61,47,34,38,34,40,56,58,56,49,41,34,27,23,17,12,7,0,0,0,
-0,0,0,0,0,15,31,51,62,90,111,135,150,186,226,248,255,255,255,255,224,178,165,134,105,119,105,70,69,75,68,77,99,122,92,75,76,47,22,20,19,16,13,10,9,21,30,23,
-20,22,24,17,10,10,17,31,38,36,21,20,31,51,86,108,92,79,87,113,106,72,58,63,56,52,68,84,80,68,70,68,63,79,85,100,104,85,83,57,41,31,30,33,33,20,12,13,
-21,23,23,17,19,23,29,34,51,78,128,178,175,154,112,99,102,113,132,161,201,233,255,255,255,254,252,247,193,206,222,231,189,106,119,148,180,201,183,171,176,168,173,203,229,222,190,164,
-164,179,183,158,129,109,98,75,65,75,70,76,91,106,104,111,186,229,245,248,246,235,207,194,193,190,196,203,200,200,197,204,172,137,165,118,82,66,80,107,100,68,62,52,41,33,30,27,
-29,30,38,45,62,77,94,101,97,97,105,98,85,86,88,82,71,64,69,80,109,98,111,176,213,203,200,219,218,203,187,197,218,220,207,191,176,155,101,62,49,36,33,36,47,45,21,17,
-17,36,54,59,56,55,43,31,29,22,17,14,7,1,0,0,0,0,0,0,0,16,41,56,52,77,99,133,149,184,203,215,247,255,254,217,157,140,140,116,98,113,86,57,68,88,93,104,
-104,100,85,73,64,43,26,31,31,29,20,15,20,37,38,26,35,38,42,30,17,22,38,57,56,45,29,33,61,107,140,133,93,105,151,171,140,98,95,82,55,54,63,71,80,57,54,51,
-58,75,90,97,119,116,65,50,58,49,47,51,58,36,21,24,29,26,21,23,20,23,27,36,51,88,139,170,155,163,114,112,108,109,104,99,113,197,255,255,255,255,254,254,248,224,246,255,
-249,231,219,233,203,197,196,164,172,169,164,193,221,226,169,141,151,171,180,180,171,134,97,76,79,76,69,82,98,94,72,86,170,238,248,253,249,239,218,203,205,198,197,205,200,193,183,162,
-129,104,98,72,68,66,73,108,121,78,57,54,38,29,27,24,28,30,44,54,66,86,100,101,90,87,93,98,105,95,88,79,71,76,93,129,169,186,220,243,238,226,227,228,194,178,199,226,
-247,246,224,204,180,141,108,84,68,42,27,31,40,43,22,16,21,49,62,54,45,45,41,31,27,23,17,13,8,2,0,0,0,0,0,0,0,17,49,61,38,44,77,111,127,173,199,199,
-241,254,229,163,98,94,123,106,85,83,76,65,111,116,116,133,137,102,77,77,79,50,47,50,41,44,35,35,37,54,57,72,84,64,45,28,22,31,57,62,58,59,52,57,84,130,162,123,
-102,156,210,197,170,134,121,114,109,94,75,70,73,58,52,52,70,90,86,73,79,95,59,55,57,55,44,47,44,31,26,22,23,22,22,23,22,24,28,37,63,90,125,156,130,133,129,127,
-123,113,93,88,90,128,183,224,219,236,255,254,238,212,247,255,255,255,255,255,183,167,182,183,200,201,200,205,229,232,179,127,122,129,157,186,184,151,115,95,88,80,75,64,80,90,79,101,
-170,238,252,253,249,238,217,205,211,204,200,203,196,196,150,65,72,63,49,54,64,69,73,93,113,98,65,47,40,33,29,29,33,38,44,54,70,82,92,97,87,87,88,91,98,87,78,76,
-83,109,165,206,219,241,255,254,248,247,252,250,198,190,240,254,255,255,238,213,182,135,127,146,141,61,33,38,26,30,26,6,15,28,29,33,33,33,34,30,26,22,19,14,9,6,2,0,
-0,0,0,0,0,23,51,54,37,40,70,93,98,147,194,204,225,222,198,168,126,121,115,97,99,76,107,126,167,171,187,186,184,139,97,86,69,51,61,61,44,49,50,56,63,62,61,78,
-79,58,38,28,22,23,36,41,48,61,66,99,123,140,144,126,143,204,229,213,169,139,151,172,139,97,78,63,58,63,44,45,56,57,55,51,49,57,61,50,36,35,34,38,35,28,29,28,
-27,27,26,24,27,33,35,47,75,90,108,146,134,120,133,126,122,120,122,109,88,101,128,154,168,207,249,247,239,229,248,255,255,255,255,253,197,177,179,211,239,236,236,224,218,228,213,161,
-107,114,134,146,161,153,139,129,104,95,99,78,75,94,104,128,196,249,250,253,249,235,221,210,204,201,207,205,197,192,113,43,50,42,44,54,61,63,68,77,93,92,78,61,47,40,33,34,
-38,40,47,55,62,78,86,87,83,91,90,85,93,79,70,71,95,165,235,255,253,254,255,255,255,255,255,252,242,243,255,255,253,255,238,221,178,155,196,196,164,83,47,54,34,20,26,1,
-2,5,13,34,35,24,24,27,26,21,19,16,14,9,6,5,2,0,0,0,5,23,42,49,42,41,61,76,85,130,164,175,185,187,175,158,128,120,104,91,120,133,178,190,197,214,232,222,
-185,155,136,107,79,68,73,77,58,58,62,72,85,66,47,41,42,35,23,21,10,12,17,20,26,38,59,93,137,142,121,122,137,203,225,199,168,193,201,183,118,73,76,65,49,61,45,41,
-43,42,54,57,43,34,37,36,30,31,42,49,48,36,31,31,29,30,33,33,37,48,50,68,86,104,139,143,148,122,104,100,99,115,151,151,99,102,120,137,153,175,226,246,250,241,246,255,
-255,255,253,243,242,206,199,210,242,249,247,212,183,185,221,213,156,123,137,116,119,130,120,120,119,114,113,101,86,91,102,129,187,240,252,250,247,239,227,218,213,205,213,210,201,187,113,65,
-40,35,45,55,63,69,68,71,73,72,86,82,64,47,31,33,37,38,44,55,66,75,86,86,84,90,86,83,83,78,69,70,129,220,255,255,254,255,255,255,255,255,255,254,255,253,254,252,
-250,253,252,238,203,210,255,220,143,105,101,88,49,19,20,24,13,3,8,29,40,27,23,24,27,23,21,20,17,14,12,9,9,7,8,9,16,31,41,48,42,41,52,71,109,137,147,178,
-189,194,169,141,126,125,128,144,164,176,190,193,212,224,231,219,167,132,106,127,133,118,143,140,129,123,100,92,76,45,35,22,15,13,14,5,0,7,8,9,13,30,83,122,133,128,107,99,
-155,207,196,135,151,249,236,156,102,98,93,72,49,48,61,61,49,43,49,58,47,31,31,35,36,49,59,55,47,45,37,30,29,35,36,42,61,71,68,75,84,118,169,179,149,112,70,70,
-91,123,167,164,127,108,126,146,171,198,228,254,255,253,250,255,255,255,248,213,221,189,182,196,224,247,246,175,137,142,184,196,208,197,180,135,116,102,102,106,123,127,129,114,100,102,119,127,
-147,196,250,250,250,239,227,220,215,211,212,211,177,137,111,69,35,36,45,56,71,66,61,63,58,61,85,64,48,45,28,30,35,40,45,57,69,76,83,88,90,84,82,80,77,73,68,77,
-172,249,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,254,249,234,220,233,246,213,176,142,135,108,54,15,12,20,19,13,10,22,43,36,26,27,29,29,27,26,23,23,21,22,
-21,22,27,31,37,51,63,66,59,47,58,108,136,151,172,190,198,193,157,129,142,147,164,191,191,194,178,170,196,221,226,215,190,170,156,180,180,189,201,190,198,185,128,93,71,43,27,20,
-19,17,20,9,8,22,9,10,19,37,109,165,141,113,98,147,211,193,125,109,163,233,204,156,116,111,98,79,44,41,55,62,54,42,38,52,56,35,36,43,47,52,55,41,42,42,35,30,
-35,41,44,61,94,91,78,70,76,113,169,182,118,80,59,68,119,170,182,160,140,147,179,215,219,226,246,255,255,255,255,255,255,255,253,208,220,225,198,194,196,227,249,179,112,128,128,129,
-194,217,201,179,150,98,94,108,126,125,140,139,108,118,146,136,130,192,243,253,249,241,227,217,211,213,213,214,189,120,72,61,47,37,43,61,70,59,50,49,49,55,80,84,54,37,28,30,
-36,41,48,62,69,76,83,88,90,83,80,80,75,70,69,92,208,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,250,232,234,246,243,205,192,190,171,134,56,5,8,14,
-19,23,34,41,42,26,28,40,35,30,30,35,35,36,36,42,44,48,55,66,86,101,104,93,77,49,59,99,133,165,187,187,191,164,132,161,198,185,200,192,191,198,161,139,189,242,241,239,
-232,227,222,212,205,206,211,218,206,182,186,151,98,61,36,23,30,43,42,28,49,55,47,36,50,58,106,165,178,141,136,197,218,180,120,143,203,220,194,163,172,162,136,90,38,42,49,49,
-48,48,48,52,41,29,54,50,38,41,38,33,37,37,36,36,41,48,56,83,121,118,79,64,73,102,134,113,79,70,66,85,147,219,219,182,168,199,221,232,240,249,255,255,255,255,255,255,
-255,255,255,240,236,236,205,187,203,227,236,169,126,134,150,111,112,167,178,168,163,119,92,99,136,156,155,136,115,112,135,154,184,226,242,252,248,235,227,222,221,206,205,208,155,83,52,50,
-48,40,45,65,59,55,62,55,50,58,78,128,112,45,38,42,45,44,55,64,73,82,86,90,90,83,82,80,76,72,73,112,217,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-255,255,248,238,235,245,246,241,236,232,206,132,43,12,23,36,38,31,36,55,38,21,40,47,40,35,38,50,54,54,61,70,79,86,102,133,154,143,139,125,82,61,63,78,115,156,177,191,
-182,128,146,167,198,218,201,200,191,194,189,198,241,255,248,250,254,253,247,236,228,224,224,234,201,190,221,213,155,112,61,30,47,77,62,27,30,51,73,84,79,71,106,158,212,215,214,215,
-164,125,109,121,190,224,220,219,221,208,155,84,55,52,57,48,42,36,43,37,22,29,57,51,37,42,40,33,34,37,38,44,48,52,64,86,105,97,68,63,76,90,93,70,62,71,76,98,
-157,208,214,187,206,221,222,233,252,255,255,255,255,255,255,255,255,255,255,252,249,232,217,214,228,241,235,192,205,194,203,160,123,121,130,134,126,114,92,98,129,160,141,122,141,134,123,148,
-193,227,242,245,245,234,231,227,220,201,194,180,129,87,62,56,47,47,55,64,55,58,76,64,54,71,114,160,135,73,59,55,54,56,58,68,73,80,84,88,86,82,76,75,73,71,76,120,
-225,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,252,248,240,235,243,226,213,235,231,179,106,51,29,52,70,51,37,52,52,34,27,41,43,43,47,54,75,75,78,94,105,
-115,134,157,163,169,169,170,147,101,75,76,86,107,142,170,217,182,160,184,146,160,217,206,235,235,239,243,247,255,255,254,255,255,255,255,252,247,240,238,234,215,231,249,229,199,186,102,78,
-107,115,78,16,15,44,56,82,86,82,123,178,218,203,210,186,137,100,70,102,193,192,156,206,220,192,130,87,71,66,62,45,34,28,23,19,14,26,40,37,33,37,41,37,38,43,48,54,
-57,61,65,79,102,79,61,63,71,77,75,59,52,69,84,98,147,179,192,198,206,231,253,255,255,255,255,255,255,255,255,255,255,255,255,255,252,233,233,233,241,247,239,208,207,225,220,232,
-247,178,115,102,83,78,83,101,123,132,112,140,169,143,139,169,206,232,239,240,239,236,235,226,217,207,190,179,173,129,69,58,43,43,57,87,71,59,69,64,66,113,150,156,135,95,71,59,
-61,61,59,66,75,77,76,78,77,73,69,72,73,83,102,136,249,255,255,255,255,255,255,255,255,255,254,255,255,255,255,255,255,253,250,248,217,203,197,175,207,214,197,120,79,63,85,97,
-68,68,98,88,62,51,56,57,54,57,70,99,112,120,128,143,153,169,182,183,180,184,183,163,126,95,86,99,106,143,171,211,210,172,142,130,179,213,225,254,255,255,255,255,255,255,255,255,
-255,255,255,255,254,250,249,234,229,231,234,227,217,210,168,139,150,135,80,16,8,16,24,38,68,92,155,208,179,163,161,175,173,136,154,151,167,182,147,176,211,210,147,98,75,80,80,50,
-36,29,17,10,14,20,19,30,37,37,42,42,43,50,56,61,65,73,80,85,99,83,68,69,77,77,64,55,54,75,98,106,123,144,169,197,208,224,254,255,255,255,255,255,255,255,255,255,
-255,255,255,255,249,239,236,241,238,240,215,170,167,219,190,198,235,196,136,90,65,58,72,95,114,107,94,168,193,135,143,165,203,235,241,243,236,232,231,221,215,194,151,169,182,104,59,50,
-36,42,63,87,88,56,64,77,93,128,161,155,144,106,72,62,62,61,59,69,76,71,69,70,72,70,75,84,93,141,201,221,255,255,255,255,255,255,255,255,255,249,246,255,248,201,212,239,
-241,253,255,249,227,226,226,205,187,168,164,137,97,78,97,104,91,90,93,122,116,75,90,99,68,71,83,125,148,161,168,178,187,205,211,218,213,208,199,186,160,148,104,111,122,146,146,133,
-179,169,141,157,201,207,224,255,255,255,255,255,255,255,255,255,255,255,255,255,255,253,248,239,225,221,229,238,219,199,208,169,157,137,82,36,26,21,38,75,105,123,119,133,127,113,146,203,
-234,238,241,224,221,224,196,173,163,172,154,107,71,77,71,45,38,30,20,14,20,28,30,34,42,48,50,50,48,54,64,70,82,95,102,109,111,95,77,72,72,69,65,59,65,91,116,118,
-119,129,149,176,204,221,250,255,255,255,255,255,255,255,255,255,255,255,254,254,249,245,243,235,234,214,194,189,207,217,157,148,149,173,149,82,66,61,70,76,78,87,92,156,207,162,129,168,
-219,226,238,246,234,226,224,222,211,155,121,160,162,86,52,43,34,38,66,91,78,59,77,83,104,134,146,143,157,137,92,75,65,63,66,83,79,66,66,68,70,78,102,115,151,224,255,255,
-255,255,255,255,255,255,255,255,252,236,232,238,189,108,125,177,217,239,241,227,224,232,234,222,203,180,160,173,141,97,93,101,95,80,84,108,116,114,148,122,75,88,112,149,177,193,206,217,
-229,245,248,246,241,234,222,205,180,176,127,99,122,125,116,92,144,180,151,133,160,180,206,255,255,255,255,255,255,255,255,255,255,255,255,255,255,252,248,241,231,232,228,232,220,184,190,219,
-193,132,88,80,106,108,120,130,142,164,137,126,115,107,153,212,234,238,214,214,229,234,222,200,185,172,176,147,80,50,45,41,40,29,20,22,26,35,47,47,57,68,66,65,55,54,68,86,
-99,116,135,150,141,127,107,102,84,68,68,79,86,107,133,142,135,140,142,156,201,238,249,255,255,255,255,255,255,255,255,255,255,255,250,236,234,241,240,234,234,206,193,215,221,219,167,111,
-97,102,88,70,64,70,84,73,71,97,100,153,210,203,164,203,231,226,228,234,226,219,222,224,215,172,125,153,149,101,65,50,42,41,69,85,61,58,68,87,121,148,160,164,187,193,146,120,
-82,70,83,108,86,58,64,77,78,90,106,134,194,253,255,255,248,255,255,255,255,255,255,255,252,232,219,167,132,107,108,173,224,220,208,196,196,215,226,208,201,196,180,171,164,123,90,78,
-85,68,61,101,104,158,175,137,108,99,127,151,178,224,236,243,255,255,255,255,254,254,239,204,186,176,115,77,93,86,80,83,115,148,136,105,125,149,176,243,249,250,255,255,255,255,255,255,
-255,255,255,255,253,249,248,236,234,228,225,222,224,217,214,221,213,164,121,130,149,155,141,136,140,160,146,139,119,108,170,227,231,214,192,199,213,227,219,207,211,196,173,156,85,37,31,40,
-44,35,34,40,52,54,57,64,84,97,91,76,59,57,66,87,112,136,162,186,161,150,148,132,100,94,93,104,107,106,132,153,140,156,163,171,211,234,248,254,255,255,255,255,255,255,255,255,
-255,246,232,219,215,234,228,226,217,196,191,214,194,207,155,106,100,62,52,55,62,71,90,101,108,122,125,142,186,214,208,233,242,233,215,213,222,218,224,225,217,186,134,127,114,95,78,63,
-48,42,54,62,72,69,65,70,98,130,165,198,212,200,190,173,111,112,133,143,97,54,61,78,79,83,76,79,133,249,255,240,246,255,255,255,255,255,255,255,250,233,215,153,128,119,106,143,
-176,168,184,190,172,193,210,217,187,170,184,170,133,99,73,72,92,71,63,105,122,165,161,176,171,133,111,129,182,238,252,255,255,255,255,255,255,249,193,164,178,170,133,82,68,69,70,78,
-100,106,92,83,98,141,187,192,192,201,249,255,255,255,255,254,255,254,255,255,252,250,243,235,231,222,219,221,218,212,224,221,203,192,171,171,165,171,168,156,136,132,127,123,128,122,161,194,
-200,205,212,203,200,212,225,206,185,191,179,135,69,43,43,51,55,45,45,57,71,79,79,77,84,90,93,83,61,57,80,105,125,144,168,192,176,165,170,155,125,105,121,129,144,146,144,160,
-157,161,175,203,232,232,241,254,255,255,255,255,255,253,252,249,249,241,232,221,204,211,221,206,196,203,185,171,143,155,134,113,119,88,75,65,68,84,102,130,165,175,143,139,182,229,246,253,
-253,250,238,218,225,219,221,226,218,189,141,107,106,105,94,76,52,45,43,51,66,63,58,71,90,115,135,186,191,167,176,183,158,158,172,158,99,52,49,59,59,65,65,57,78,171,228,218,
-175,234,245,234,253,255,255,255,250,247,238,165,135,154,164,133,141,165,165,194,190,200,212,213,213,173,175,149,69,55,51,65,78,73,73,92,144,148,167,193,158,121,133,141,192,239,248,255,
-255,255,255,255,254,227,157,153,177,177,153,97,83,78,82,94,108,107,85,76,97,149,184,155,163,204,240,254,255,255,255,241,243,249,245,246,248,243,211,210,214,218,218,227,226,222,228,240,
-228,227,220,191,194,206,190,165,122,91,94,121,169,182,176,180,210,213,227,210,201,219,219,225,197,179,171,83,51,52,58,58,58,49,52,64,72,85,90,85,83,98,109,90,62,56,98,141,
-137,140,180,210,185,164,192,189,154,86,75,107,176,196,184,180,175,164,186,226,232,231,240,253,255,255,255,255,254,252,248,243,238,239,246,222,186,187,199,190,189,191,153,135,148,120,99,107,
-107,94,80,78,83,106,151,184,194,204,203,191,214,248,255,255,255,255,249,227,227,227,225,225,221,197,136,107,106,111,102,87,70,62,63,68,68,62,55,83,101,99,121,160,169,156,161,175,
-189,172,179,154,99,63,54,57,70,73,65,55,52,69,137,156,86,189,220,229,254,255,255,255,254,255,253,194,168,175,180,137,164,182,173,219,227,220,224,218,218,200,180,100,44,37,35,43,
-52,68,70,107,171,183,178,151,141,147,165,184,197,213,228,236,252,255,255,255,255,219,184,184,189,180,146,101,115,112,111,129,143,128,86,92,112,136,148,155,200,206,228,248,255,255,250,233,
-217,205,214,225,226,214,189,186,196,204,219,224,234,231,236,242,245,242,222,205,198,193,173,128,104,68,79,165,204,206,193,194,225,224,242,235,222,226,226,226,215,199,142,62,52,55,59,55,
-51,48,58,80,93,91,98,119,132,133,115,85,59,61,82,134,163,175,191,212,213,191,187,191,140,70,54,83,169,187,156,141,143,132,177,228,221,233,243,243,245,249,252,255,255,250,236,228,
-219,242,253,231,199,193,192,155,157,148,139,149,184,164,125,120,123,94,90,100,121,154,189,219,229,241,249,239,245,252,255,255,255,255,252,235,236,238,243,245,238,231,179,132,121,106,120,108,
-105,95,97,122,139,109,80,72,76,66,95,121,135,137,143,144,179,211,192,149,111,116,154,146,135,100,72,59,54,61,65,62,65,146,211,236,255,255,255,255,255,255,255,207,167,170,197,162,
-207,234,206,211,232,249,248,239,235,173,94,54,35,37,42,48,51,57,73,134,178,169,162,158,157,167,171,205,200,201,210,192,228,255,255,255,254,219,203,208,194,165,127,108,126,132,137,148,
-137,136,101,95,106,141,137,156,184,190,207,227,220,228,232,224,205,175,210,219,201,185,185,178,175,197,212,215,238,242,245,241,246,242,218,208,206,199,201,171,136,107,136,201,199,212,203,213,
-248,240,239,239,248,250,246,242,208,134,85,61,56,63,66,68,59,62,86,83,88,104,129,148,163,165,108,78,69,68,75,107,147,184,186,186,200,190,155,154,156,92,69,79,118,154,157,116,
-105,105,151,200,217,226,232,224,214,220,240,248,239,229,220,206,208,228,241,227,191,192,194,163,167,175,197,197,184,189,192,182,163,121,101,104,111,167,207,248,255,255,254,253,254,255,255,255,
-255,255,255,253,254,253,254,255,254,255,243,224,201,163,175,180,160,137,135,170,190,154,127,88,57,55,70,87,102,114,112,120,150,193,217,175,153,168,199,206,155,116,90,73,59,55,55,49,
-55,108,186,238,255,255,255,255,255,255,241,165,122,160,247,255,252,232,192,206,239,253,255,254,246,185,118,78,87,121,129,99,65,57,82,118,140,142,150,169,172,185,197,197,179,198,182,172,
-229,254,255,255,249,219,196,206,193,161,137,130,125,142,150,153,144,136,113,95,112,137,160,175,169,197,164,140,135,170,192,194,186,184,192,208,200,170,154,135,160,189,210,219,239,240,241,245,
-248,246,239,233,218,191,205,219,197,177,186,194,198,241,255,254,245,226,228,245,252,255,255,253,215,149,105,113,141,150,132,97,83,92,104,84,108,164,169,154,160,176,158,128,112,95,91,87,
-125,206,219,190,185,192,164,140,187,150,99,118,153,163,158,116,119,114,137,160,175,205,213,201,185,200,226,224,214,210,198,190,185,194,213,200,177,201,214,187,154,184,218,203,182,179,185,175,
-167,120,88,99,105,126,204,254,255,255,255,255,255,255,255,255,255,255,255,255,255,255,254,255,255,255,255,255,249,241,245,250,228,213,220,222,211,173,134,106,71,57,68,71,76,92,90,97,
-132,164,157,177,207,171,164,194,169,141,111,88,71,51,50,50,49,90,161,212,254,255,255,255,255,255,212,121,92,142,233,255,255,249,247,254,255,255,255,252,246,233,185,164,189,214,204,178,
-151,137,99,78,112,134,127,132,162,200,218,203,176,158,168,175,203,233,249,241,226,208,192,203,191,146,134,148,153,160,182,171,154,143,104,98,119,128,144,179,158,161,135,106,114,147,146,140,
-149,141,142,170,171,143,116,102,151,187,204,215,233,235,231,241,245,241,232,221,217,211,214,208,204,192,191,191,199,236,255,255,253,249,253,255,255,255,255,252,245,205,185,201,228,227,207,185,
-179,149,139,175,210,212,198,192,210,191,173,155,150,120,104,105,142,186,175,178,189,193,175,161,197,196,161,173,205,200,173,116,118,120,133,164,162,183,198,191,184,198,211,210,206,197,178,170,
-169,183,196,176,163,182,189,163,127,178,213,211,200,183,162,157,161,111,86,102,106,128,167,233,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-255,255,254,242,240,208,157,136,114,101,80,65,65,78,87,100,136,183,146,186,238,172,192,199,165,160,115,85,73,64,54,48,68,86,150,183,229,224,238,255,255,255,215,146,104,135,247,255,
-255,255,255,255,255,255,255,255,255,248,239,248,204,217,164,165,194,182,147,119,119,114,113,119,163,203,173,169,160,160,171,186,165,167,191,196,193,180,177,178,170,155,157,161,161,161,172,167,
-167,148,109,122,126,125,137,140,121,113,108,90,87,97,99,94,95,87,82,112,137,141,123,112,148,189,199,212,226,231,229,232,233,232,220,217,219,213,211,206,198,192,194,192,193,245,255,255,
-255,255,255,255,255,255,255,255,253,238,250,228,232,227,206,219,226,218,218,225,229,213,177,175,210,205,189,182,165,113,98,112,116,142,144,118,156,185,184,162,184,201,194,190,194,185,178,123,
-105,129,146,168,186,201,199,182,164,176,190,194,194,180,156,160,163,176,184,176,153,140,116,100,99,141,189,203,211,197,157,133,125,99,95,106,100,118,165,215,253,255,255,255,255,255,255,255,
-255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,254,253,252,239,196,155,178,182,155,132,87,84,86,93,108,135,172,196,212,160,150,211,231,178,132,109,77,85,97,98,92,
-119,146,173,185,155,164,204,252,255,255,232,185,165,186,250,255,255,255,255,255,255,255,255,255,255,255,255,255,232,175,153,164,208,173,132,116,108,106,126,129,141,167,144,146,148,154,149,140,
-133,148,160,170,165,162,158,158,155,157,179,160,147,161,161,144,157,142,99,98,98,98,101,100,100,87,78,107,119,82,90,94,95,90,85,122,118,142,143,141,162,208,218,224,232,235,238,232,
-227,227,220,217,217,215,210,203,192,194,204,214,227,253,255,255,255,255,255,255,255,255,255,255,255,255,255,246,211,206,165,212,203,173,203,229,228,203,176,194,213,225,220,178,157,101,73,84,
-85,102,151,127,121,144,150,149,163,175,184,185,177,162,164,157,132,133,160,190,225,222,199,185,171,173,178,183,176,165,150,160,168,176,175,175,151,144,98,77,79,112,182,207,198,155,118,119,
-114,92,95,122,106,121,151,153,224,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,253,231,201,160,126,98,120,183,190,143,101,94,88,99,121,
-140,154,183,187,148,146,171,222,231,156,108,78,88,71,64,76,62,173,176,162,148,185,212,236,254,255,248,198,170,207,253,255,255,255,253,254,255,255,255,255,255,255,255,249,250,200,170,175,
-170,141,98,83,111,119,123,118,125,137,119,112,113,126,141,129,115,122,132,135,132,135,153,149,146,160,189,175,182,203,172,142,128,120,88,64,61,57,59,70,82,76,82,116,121,104,107,112,
-93,78,87,93,94,140,147,154,194,228,234,238,247,249,246,242,239,231,231,227,218,220,208,205,193,196,203,214,240,255,255,255,255,255,255,255,255,255,255,255,255,255,248,249,226,192,167,171,
-158,121,130,205,228,228,219,222,210,193,185,170,156,95,55,58,68,73,101,133,135,107,114,128,130,108,137,161,150,142,153,149,126,125,162,222,254,239,218,207,198,222,226,210,208,186,158,160,
-155,170,163,155,158,153,123,102,113,158,201,206,173,118,79,95,118,101,92,115,115,109,151,127,135,218,255,255,255,255,255,254,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-255,255,204,129,106,85,64,56,84,84,56,66,72,70,86,102,118,136,156,161,160,147,99,92,153,143,100,73,66,45,28,8,28,64,120,147,164,194,196,226,240,247,224,162,128,183,239,247,
-243,231,245,254,255,255,255,255,255,255,255,255,255,215,186,139,85,70,57,63,76,90,102,98,99,106,90,91,99,115,148,143,116,107,104,106,113,129,139,134,140,160,184,191,225,236,186,133,
-109,111,101,78,61,54,45,57,78,83,83,109,118,136,156,141,102,90,106,101,125,137,120,150,203,234,238,243,252,254,252,245,241,240,236,224,227,229,221,207,183,173,160,173,213,248,250,250,
-250,254,255,255,255,255,255,255,255,255,254,255,227,183,148,76,62,52,88,165,183,229,234,229,190,123,128,163,161,130,73,43,57,70,84,128,142,105,86,86,84,55,85,116,121,133,140,127,
-114,140,186,245,255,255,247,250,246,249,255,252,255,243,231,218,189,204,206,173,164,170,168,158,167,191,192,179,165,147,125,127,120,105,95,106,128,121,137,112,88,151,175,205,255,253,218,212,
-254,255,255,255,255,255,255,255,255,255,255,255,255,255,255,250,247,253,239,162,102,76,63,55,48,50,50,55,57,63,72,76,77,100,116,115,94,90,70,57,78,83,73,64,49,48,45,34,
-21,12,100,172,163,168,142,134,122,125,120,82,86,128,184,204,221,225,253,255,255,255,255,255,255,255,255,255,255,190,106,83,55,42,45,56,73,82,85,83,77,79,78,86,105,135,161,136,
-106,98,92,99,106,100,107,116,127,125,136,172,215,239,242,208,165,157,141,115,85,51,44,58,88,101,78,80,109,140,134,109,100,100,113,98,121,129,147,206,221,238,242,247,249,252,249,248,
-246,239,229,224,225,229,221,194,157,173,170,171,168,197,213,228,242,253,255,255,255,255,255,255,255,255,255,255,213,100,77,42,24,30,54,153,187,206,217,210,191,140,127,143,149,146,111,61,
-43,51,80,107,104,86,69,64,71,62,79,90,106,120,130,127,136,165,218,255,255,255,255,255,255,249,255,255,255,255,255,254,247,253,255,227,205,198,190,187,160,150,160,158,153,141,126,129,
-104,92,102,121,146,126,109,104,102,125,104,126,173,197,169,203,253,255,255,255,255,255,255,255,255,255,255,255,255,246,241,245,236,242,250,200,135,94,75,63,50,49,55,54,55,65,57,51,
-48,56,69,73,57,54,50,51,54,57,58,57,45,44,41,37,16,21,128,144,111,99,55,31,21,21,34,45,65,86,126,153,196,245,255,255,255,255,255,255,255,255,255,255,255,173,88,68,
-59,50,54,58,66,73,70,71,71,78,84,87,113,163,158,108,87,80,80,88,94,85,83,94,112,115,121,184,194,213,224,240,246,207,196,169,118,63,52,61,84,90,78,79,97,116,139,118,
-98,95,101,106,147,175,179,219,214,227,222,238,245,253,250,236,201,211,222,226,231,225,205,192,183,177,167,146,142,142,154,193,241,255,255,255,255,255,255,255,255,255,255,255,200,83,56,37,
-26,23,31,71,142,170,165,151,134,127,133,142,129,135,142,94,24,30,49,71,79,69,56,47,63,79,88,94,114,122,134,143,163,187,236,255,255,255,255,255,254,254,255,255,255,255,255,255,
-255,255,255,255,241,211,196,191,175,178,179,179,151,129,120,122,112,109,115,134,143,111,85,90,105,127,107,95,105,177,183,212,255,255,255,255,255,255,255,255,255,255,255,255,253,243,238,252,
-254,242,229,211,178,143,107,86,71,65,68,55,50,56,44,36,36,35,41,42,44,41,43,43,47,48,49,50,47,44,38,34,24,37,83,78,44,28,21,13,10,23,44,72,63,70,76,101,
-162,226,255,255,255,255,255,255,255,255,255,255,255,221,106,73,84,82,73,66,62,66,61,58,82,116,104,99,156,176,142,106,86,71,69,77,84,86,78,79,87,105,107,203,206,205,225,231,
-252,210,179,167,134,83,57,55,62,71,80,72,92,116,162,148,109,129,143,146,187,190,168,139,105,154,193,215,190,210,224,177,115,161,199,204,210,211,213,212,201,156,127,102,114,129,141,175,
-220,255,255,255,255,255,255,255,255,255,255,255,243,115,55,44,49,36,29,21,57,91,111,105,76,93,135,141,105,134,135,57,12,22,36,54,61,66,52,35,51,73,85,106,132,140,154,170,
-196,222,252,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,247,215,199,197,203,205,198,180,147,142,153,140,133,125,118,105,121,126,119,106,106,125,122,102,118,163,167,153,
-232,249,255,255,255,255,255,255,255,255,255,254,255,252,246,255,255,253,241,227,206,153,109,88,87,83,85,63,45,41,36,30,30,31,33,35,36,35,38,38,38,43,40,47,45,44,41,34,
-35,49,64,52,28,23,20,31,76,113,141,122,70,59,66,84,118,175,211,252,255,255,255,255,255,255,255,255,247,193,183,151,129,112,88,73,69,75,68,66,108,167,148,134,196,197,147,126,
-97,72,68,75,82,80,72,69,72,86,94,156,193,211,197,207,200,205,165,137,111,65,59,54,49,59,72,70,75,93,127,122,118,114,121,114,120,107,64,42,52,94,135,114,93,121,137,128,
-88,119,146,162,168,165,194,215,214,198,177,169,171,165,171,176,187,201,241,255,255,255,255,255,255,255,255,252,182,173,149,105,72,36,24,17,38,75,106,85,55,73,137,139,100,137,86,15,
-10,17,36,47,44,56,52,38,43,58,75,128,170,180,193,213,235,253,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,246,210,189,185,203,204,190,157,136,182,193,167,
-148,120,109,107,114,116,133,129,129,153,150,127,146,163,161,149,196,245,255,255,255,255,255,255,255,255,253,250,241,221,228,253,255,255,253,241,220,163,108,70,61,57,55,54,44,36,31,27,
-26,28,29,28,30,29,34,35,36,37,37,45,45,45,42,40,41,68,66,56,54,50,57,71,106,144,142,101,54,45,49,70,98,132,169,224,250,255,255,255,255,255,255,255,252,226,184,184,
-157,127,102,79,70,82,90,95,116,191,239,231,234,224,187,139,98,82,73,76,76,72,66,65,69,87,112,125,144,190,184,190,203,193,132,105,68,48,47,45,43,52,63,56,45,63,80,80,
-80,69,91,92,56,40,30,30,37,59,90,66,41,62,73,73,90,115,107,109,130,107,121,162,191,198,200,212,201,169,156,157,158,158,205,245,255,255,255,255,255,255,255,254,219,177,170,154,
-90,30,22,24,31,48,61,61,44,59,130,147,135,140,43,8,12,21,35,31,30,45,55,47,38,48,71,135,193,227,238,254,255,255,254,255,255,255,255,255,255,255,255,255,255,255,255,255,
-255,255,255,255,249,197,155,167,186,204,170,133,155,164,190,187,153,130,108,106,98,121,160,157,156,176,172,165,170,192,210,220,220,253,255,255,255,255,255,255,255,255,254,248,234,219,238,245,
-243,254,252,231,201,162,105,66,52,47,43,41,40,35,30,28,23,24,22,22,21,21,28,34,37,40,42,47,43,42,43,40,61,91,57,66,73,99,125,128,134,147,126,88,31,19,24,52,
-88,121,168,220,239,252,255,255,255,255,255,255,255,255,231,191,151,128,108,84,75,82,95,123,135,172,253,255,241,172,155,120,98,90,75,72,70,70,66,66,77,104,143,148,116,128,139,148,
-182,199,134,115,73,43,34,35,36,51,61,48,40,57,71,62,52,61,78,68,34,20,24,26,29,50,82,73,49,58,58,56,78,84,82,104,105,98,123,171,198,206,207,211,193,175,163,161,
-155,156,206,232,248,255,255,255,255,255,254,255,255,234,192,127,73,31,23,24,35,50,52,49,47,49,90,140,120,84,21,9,12,17,22,22,28,38,48,50,50,56,106,143,163,169,199,255,
-252,214,212,255,255,255,255,255,255,255,255,255,255,255,254,255,255,255,231,217,247,227,176,168,186,193,160,161,163,140,172,197,172,147,118,109,111,136,192,203,186,179,203,227,236,249,250,232,
-205,235,255,255,255,255,255,255,255,255,255,253,245,242,245,233,222,232,233,207,178,129,82,58,49,44,40,40,37,36,34,29,24,24,20,17,14,16,24,33,40,44,48,52,48,44,48,34,
-59,63,52,54,59,115,139,141,149,153,137,100,36,16,13,44,80,99,147,231,218,236,255,255,255,255,255,255,255,255,246,165,140,121,102,91,82,88,126,169,187,228,255,255,219,118,98,94,
-88,82,69,65,65,72,73,72,85,111,146,157,119,115,109,105,148,183,158,130,101,61,43,36,36,55,57,41,40,55,63,61,64,65,57,34,21,17,19,20,42,62,72,83,68,52,51,56,
-62,61,91,134,129,150,190,197,176,177,197,203,204,192,172,140,116,129,212,221,221,255,255,255,255,254,252,255,255,255,176,122,78,45,35,31,41,56,51,37,35,27,21,44,29,15,19,16,
-10,12,17,28,45,48,51,64,84,97,139,151,151,130,144,180,201,176,208,255,255,255,255,255,255,255,255,255,255,255,255,254,224,201,167,136,200,236,198,173,180,190,196,171,144,161,197,210,
-198,162,126,118,163,189,203,211,205,211,232,238,249,255,254,238,210,242,218,226,250,255,255,255,255,255,255,255,249,248,238,213,200,211,218,213,183,151,101,61,43,36,37,35,36,35,33,28,
-24,22,20,10,8,14,23,35,44,49,48,50,50,51,55,54,64,58,56,50,48,65,104,136,160,142,65,21,14,13,17,41,77,78,114,193,217,228,255,255,255,255,255,255,255,255,207,121,
-104,101,88,88,94,153,217,248,242,250,255,255,232,119,91,84,80,78,68,62,61,71,85,85,95,116,146,151,120,101,97,101,144,172,198,162,123,83,52,48,49,47,40,37,43,43,44,51,
-63,55,36,22,17,13,10,13,31,44,47,62,49,36,51,64,76,86,92,108,170,189,167,151,99,109,150,172,176,150,116,100,79,85,161,207,210,252,255,254,255,255,255,255,255,234,142,113,
-95,75,57,45,45,52,51,35,20,19,7,3,13,14,23,20,12,15,35,51,54,52,65,93,122,155,153,137,149,137,133,133,184,189,226,255,255,255,255,255,255,255,255,255,255,255,255,252,
-211,180,173,148,143,167,172,183,186,187,199,179,171,199,219,222,220,196,162,151,185,184,182,194,205,218,217,219,228,246,254,249,232,192,144,183,233,250,255,255,255,255,255,255,254,250,226,192,
-204,219,221,206,187,186,118,52,45,38,36,36,37,35,27,26,24,21,19,14,9,16,26,37,47,51,54,52,52,55,59,69,64,64,66,66,61,54,95,130,143,75,13,7,17,19,27,40,
-62,66,92,150,204,227,247,248,252,255,255,255,255,255,232,118,79,91,97,109,132,207,255,255,255,255,253,252,235,173,112,84,78,76,70,65,64,73,90,94,102,127,128,125,108,92,94,106,
-140,179,205,140,101,83,65,57,58,47,41,45,36,38,35,33,37,37,24,13,7,5,5,5,14,27,28,33,29,35,57,75,98,120,107,84,83,77,66,73,52,52,80,106,113,98,76,66,
-56,62,115,173,201,227,231,233,255,255,255,255,255,254,170,79,83,91,72,52,50,57,57,42,33,19,13,24,26,23,24,20,21,54,76,73,59,64,72,123,183,178,167,151,153,150,140,144,
-173,196,189,235,249,255,255,255,255,255,255,255,255,252,252,255,234,190,165,160,170,161,163,189,208,208,210,221,180,197,206,191,197,176,163,158,167,149,140,156,172,179,185,191,196,212,221,233,
-215,186,191,229,242,248,255,255,255,255,255,255,255,248,221,213,229,229,219,186,170,191,157,79,52,50,45,43,38,29,26,23,21,20,17,16,15,26,35,43,51,61,65,57,56,61,65,69,
-77,87,92,100,116,137,129,116,90,44,33,35,30,28,31,34,49,73,109,125,170,211,234,254,255,255,255,255,255,255,222,134,84,88,126,173,226,246,255,255,255,254,254,242,169,179,157,95,
-83,80,75,69,70,72,84,85,93,116,104,97,85,88,95,115,148,187,191,144,93,72,78,68,50,47,43,38,35,35,40,30,35,30,19,9,3,1,0,0,3,10,19,26,30,41,52,84,
-87,106,133,102,61,41,37,54,56,51,59,66,79,80,52,48,59,87,105,136,178,192,222,232,252,255,255,255,255,254,192,125,107,93,64,54,49,45,42,41,47,47,65,71,36,30,27,22,
-43,94,109,106,85,99,107,149,190,193,201,208,200,179,158,167,182,196,179,198,245,255,255,255,255,255,255,255,252,240,242,235,206,203,210,206,198,186,192,206,211,194,206,224,199,167,151,118,
-129,106,105,121,133,108,95,116,134,141,150,157,161,183,203,219,201,211,242,249,254,255,255,255,255,255,255,255,255,254,248,241,239,240,227,192,169,203,187,130,98,76,64,43,33,30,28,24,
-21,19,21,20,29,37,47,52,58,66,75,69,62,64,71,73,95,102,123,171,206,210,165,141,118,71,61,57,44,41,36,37,58,102,120,136,175,192,243,255,255,255,255,255,255,243,184,139,
-109,100,128,171,231,243,248,255,255,255,246,228,162,171,179,102,91,90,79,73,75,70,78,82,87,114,109,82,76,97,108,115,139,204,222,176,122,92,80,79,65,55,52,59,55,41,38,35,
-31,26,15,7,5,0,0,0,0,0,12,17,22,33,55,76,90,106,122,95,82,47,26,30,36,37,40,59,70,55,36,57,102,111,112,141,153,178,205,215,226,233,233,249,254,231,194,173,
-140,105,80,54,36,33,33,35,59,144,146,92,65,63,50,42,62,104,141,135,108,125,142,157,190,210,220,231,225,213,199,192,218,234,238,228,253,255,255,255,255,255,255,254,248,239,233,226,
-210,232,236,224,197,184,201,200,193,173,206,229,192,134,112,84,80,68,63,69,82,66,63,72,88,100,105,112,134,161,184,198,192,221,243,247,250,255,255,255,255,255,255,255,255,255,254,254,
-250,245,233,219,204,208,217,204,151,99,83,44,37,33,24,22,22,23,26,29,43,56,54,59,69,72,77,76,77,73,75,86,100,100,118,178,184,177,153,147,186,168,146,102,65,56,49,50,
-59,76,102,146,205,231,249,255,255,255,247,242,239,215,185,137,113,116,128,127,151,186,215,238,245,222,208,220,147,134,132,109,99,97,90,80,77,76,75,73,85,109,132,106,101,114,147,167,
-160,211,245,214,151,128,91,86,72,72,93,144,99,42,37,33,24,22,13,6,6,3,3,3,1,1,7,12,19,44,70,69,76,76,69,63,59,42,20,22,31,41,58,68,61,43,37,54,
-78,98,123,148,157,161,168,180,186,191,207,228,220,221,207,176,164,121,73,43,29,31,35,44,73,147,167,118,111,106,77,116,156,179,213,177,139,167,173,192,210,233,241,233,233,242,245,247,
-254,255,253,233,241,255,255,255,255,255,255,253,245,239,238,234,239,243,225,204,187,186,189,179,160,161,200,208,162,105,73,70,68,52,43,37,45,43,43,47,58,65,50,45,68,87,135,183,
-196,221,236,246,248,254,254,255,254,252,254,255,255,255,255,255,254,247,238,227,218,191,187,180,136,88,82,56,47,34,26,23,22,26,30,43,57,65,64,63,76,83,82,79,78,85,82,85,
-100,95,94,108,119,150,183,171,165,225,247,200,111,100,80,76,55,42,57,123,193,229,249,255,255,233,217,211,206,194,164,127,112,115,115,135,156,204,205,180,192,186,205,214,168,128,119,133,
-118,102,99,85,78,78,66,65,83,101,122,126,114,119,167,219,211,215,234,208,196,177,132,142,120,134,170,208,156,43,40,43,24,21,20,10,8,3,3,6,7,5,8,13,23,48,62,61,
-59,55,52,54,47,34,29,36,42,51,51,50,47,47,47,45,51,78,109,121,132,135,137,143,158,179,207,212,196,196,198,191,170,126,77,50,40,44,54,69,136,179,192,187,190,178,183,214,
-205,205,220,217,193,191,177,219,245,252,252,246,249,254,255,255,255,255,255,247,248,222,225,249,255,255,255,253,246,236,238,241,246,235,203,180,185,205,205,183,177,171,187,191,141,88,66,65,
-50,37,31,29,41,37,29,37,43,41,26,19,24,30,52,141,192,198,218,225,233,250,254,250,249,248,248,253,253,254,254,254,254,253,245,235,215,147,137,147,148,133,112,70,40,35,33,28,
-28,31,35,47,61,68,84,86,85,86,92,97,94,88,99,108,120,99,91,104,133,179,194,200,225,228,233,255,208,201,121,66,45,37,36,71,115,164,185,196,219,190,163,169,179,193,179,147,
-134,122,107,134,169,190,207,186,165,167,196,198,179,140,137,185,168,99,98,88,84,93,70,61,78,127,158,154,140,119,156,211,226,215,233,197,232,238,224,222,201,220,233,220,211,100,47,80,
-56,22,12,10,8,3,6,12,12,7,10,19,30,45,56,63,58,62,62,52,40,23,26,29,29,34,34,38,43,72,83,58,54,64,71,73,85,98,98,111,136,144,190,211,212,217,222,187,
-143,100,83,69,63,66,69,113,218,242,241,254,246,246,255,233,201,192,208,229,221,226,220,245,255,255,255,254,255,255,255,255,255,255,255,253,219,161,178,228,246,253,253,253,250,242,240,245,
-246,219,178,191,210,217,203,191,200,175,172,200,148,108,83,54,42,38,27,27,36,33,30,31,27,29,27,22,13,14,22,100,153,118,127,123,120,180,245,247,249,250,246,245,247,248,252,254,
-254,253,245,240,226,171,157,153,142,149,99,54,35,35,34,34,35,35,36,43,55,56,70,93,102,100,102,118,121,98,114,162,164,107,118,157,167,222,203,224,255,254,204,213,227,228,111,55,
-43,40,36,36,57,78,93,107,123,123,139,162,163,191,182,164,147,144,114,112,142,161,170,185,150,130,151,197,198,141,148,250,215,97,91,87,88,97,78,72,75,98,150,200,196,148,160,161,
-178,197,190,200,238,247,255,250,240,248,248,240,211,115,70,100,105,48,16,13,8,5,8,12,14,13,16,27,41,54,63,68,78,91,57,30,17,13,12,13,15,17,21,40,75,119,116,73,
-66,64,54,52,63,65,65,70,78,101,171,225,233,233,214,173,137,112,99,80,87,90,92,175,249,249,255,255,255,254,252,248,245,239,235,236,240,240,231,249,255,255,255,255,255,255,255,254,
-254,253,252,240,210,196,227,238,245,254,253,252,252,250,248,249,239,206,197,219,222,215,190,180,204,196,168,171,155,120,77,48,37,31,26,27,30,31,29,33,33,36,31,23,13,13,21,45,
-69,73,112,134,122,140,214,247,248,250,243,235,228,232,245,249,252,252,246,236,232,208,149,118,95,83,48,40,42,35,34,34,38,38,41,47,62,68,68,73,86,98,98,122,127,101,93,189,
-192,164,183,235,204,177,173,210,250,255,198,189,193,233,133,63,49,45,40,33,41,55,70,87,91,109,147,168,151,153,144,147,133,121,101,97,116,143,151,160,139,113,115,165,184,163,176,246,
-226,105,91,97,100,101,92,98,97,95,119,151,157,143,146,158,168,190,180,158,187,231,247,253,254,253,253,254,222,130,143,161,154,88,37,29,20,9,8,9,13,14,17,28,41,57,70,71,
-66,59,30,12,2,0,2,7,9,13,20,35,61,85,78,61,57,61,54,51,52,59,61,62,114,135,154,229,231,197,163,163,137,121,107,98,127,154,163,245,255,254,255,255,255,254,255,250,
-238,236,241,252,250,242,242,254,255,255,255,255,255,255,254,252,253,250,249,220,218,241,248,253,252,254,254,254,253,254,254,253,250,238,224,221,231,222,197,182,213,210,185,160,132,99,55,34,
-34,33,34,41,42,31,33,43,49,45,22,16,13,14,15,20,42,59,78,116,135,112,148,222,246,243,236,220,213,225,240,247,246,247,243,224,179,120,73,64,58,54,49,42,41,38,36,37,
-37,40,44,52,69,78,70,62,76,91,90,112,119,94,80,128,182,207,228,250,239,173,182,205,231,248,255,253,200,165,109,65,54,45,38,35,36,44,54,65,80,100,115,116,104,100,108,120,
-108,95,85,82,93,116,140,130,118,118,114,125,153,185,194,241,252,151,127,144,134,126,122,126,140,135,126,125,120,106,128,156,169,163,170,177,155,208,252,255,255,255,255,255,248,221,210,182,
-157,115,69,61,36,21,19,16,10,8,14,22,37,50,61,63,47,22,7,0,0,0,0,0,7,19,24,28,37,54,56,43,42,47,56,54,52,70,112,163,212,211,222,247,242,173,142,148,
-135,116,100,141,221,247,249,255,254,255,255,255,255,255,255,249,222,233,248,255,255,254,254,255,254,248,235,234,241,242,229,238,248,250,240,212,228,243,243,243,250,249,255,253,253,254,254,255,
-253,250,246,239,233,226,220,212,218,222,211,168,125,88,49,38,38,37,35,48,58,36,34,48,54,47,33,20,10,17,17,19,36,48,62,85,101,116,119,171,226,235,215,182,199,218,238,247,
-243,243,240,222,169,88,69,65,62,59,51,42,40,37,37,40,41,45,50,59,59,66,59,56,75,87,86,91,91,88,93,127,134,136,172,201,227,156,165,189,162,210,254,225,122,87,68,63,
-56,47,38,35,33,33,35,43,56,73,80,75,68,75,86,95,93,86,78,75,82,104,133,126,118,132,121,133,130,137,183,242,250,193,206,232,215,180,164,155,165,161,137,115,90,82,104,171,
-234,232,221,214,215,242,255,255,255,255,255,249,242,217,207,161,116,98,94,84,56,36,31,23,14,9,10,15,28,41,44,43,29,8,0,0,0,0,0,0,3,15,24,24,29,41,58,56,
-54,51,50,61,56,75,151,210,218,232,246,254,245,207,199,221,236,206,175,214,255,255,255,254,254,255,255,255,255,255,255,253,240,247,255,255,255,255,255,255,250,245,232,221,207,186,164,172,
-179,210,236,225,232,238,243,243,249,252,252,250,250,253,254,254,254,255,254,250,238,231,228,224,203,197,185,147,100,76,48,45,44,36,34,41,45,31,27,40,54,51,44,29,20,21,26,23,
-30,43,56,85,135,148,161,198,213,220,212,201,214,215,221,232,239,239,233,233,197,114,82,73,69,59,52,48,44,43,42,42,47,57,61,70,57,54,55,57,65,75,80,84,76,76,97,127,
-100,108,118,132,162,125,140,170,125,148,215,215,127,80,62,59,54,44,36,33,30,29,28,31,41,47,54,55,55,59,68,73,84,79,73,70,77,108,137,118,113,128,118,163,142,123,171,225,
-212,219,253,255,247,194,179,187,189,169,132,88,75,87,114,204,255,248,252,253,255,255,255,255,255,255,255,211,162,158,187,149,121,95,79,92,83,64,45,34,22,9,6,9,19,38,36,41,
-29,8,0,1,0,0,0,0,2,13,21,24,36,50,63,65,69,70,54,56,59,66,104,172,231,239,239,253,254,255,254,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-253,250,255,255,255,255,255,253,252,249,253,233,193,153,120,125,108,112,198,232,211,221,219,226,247,252,247,246,245,245,250,250,254,254,255,254,252,242,234,220,165,158,157,139,104,73,47,42,
-40,35,36,37,36,27,24,33,49,49,36,31,30,36,35,31,31,45,63,104,173,162,153,173,180,187,207,214,220,219,201,192,217,200,164,197,183,112,91,79,66,56,56,54,54,54,51,52,
-52,55,62,66,64,56,56,58,56,61,70,76,72,71,75,84,86,104,105,122,134,116,123,112,93,112,137,156,120,71,58,54,48,41,34,33,30,29,27,29,36,41,42,43,47,49,56,64,
-76,77,73,65,77,118,148,150,134,109,104,127,122,114,149,182,160,177,231,255,242,229,222,196,186,165,134,79,63,82,116,198,255,255,255,255,255,255,255,255,255,255,253,190,116,102,144,192,
-163,123,101,91,93,99,79,42,33,19,15,15,22,35,31,31,21,9,1,0,0,0,0,0,10,17,24,42,48,45,50,56,59,66,59,63,64,70,84,137,217,232,240,255,255,255,255,255,
-255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,253,249,252,250,247,233,196,143,113,99,102,82,84,162,197,122,97,76,85,149,235,241,236,235,226,234,242,
-248,253,255,255,253,242,239,229,180,165,150,122,94,62,44,37,36,37,38,36,38,31,26,31,43,44,37,31,30,37,33,31,31,51,75,94,135,151,118,106,118,141,192,204,190,212,198,183,
-187,161,123,128,125,83,57,49,49,49,52,56,58,59,58,57,56,58,64,66,66,61,57,56,55,56,63,71,76,70,66,70,72,80,100,112,129,126,109,82,76,79,84,83,73,62,54,49,
-43,37,33,33,33,29,28,31,34,36,36,35,38,44,47,51,66,84,83,78,95,119,148,179,162,112,91,91,91,88,99,114,130,171,182,219,225,212,207,190,187,157,113,75,58,78,116,178,
-238,255,255,255,255,255,255,255,255,255,255,218,120,93,93,143,171,123,106,109,92,120,95,55,54,58,43,24,30,37,44,38,21,5,0,0,0,0,0,3,19,24,28,43,48,41,43,48,
-48,55,66,73,66,79,84,125,200,225,247,254,254,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,254,254,254,248,240,242,233,226,201,167,139,116,115,113,
-111,108,97,93,58,43,42,38,52,133,218,211,215,206,208,199,212,242,250,253,250,243,234,232,211,158,128,104,79,56,47,41,36,35,37,37,45,41,27,30,34,38,37,33,26,24,24,30,
-33,49,78,102,101,101,100,91,115,147,171,193,191,208,192,197,192,142,118,100,86,65,42,33,38,47,51,56,58,61,62,59,58,57,59,62,62,58,55,54,51,56,62,69,76,66,63,65,
-64,69,86,108,113,100,76,64,68,72,71,68,63,58,52,45,42,35,35,34,33,31,30,30,34,34,33,31,33,36,43,48,61,85,92,92,115,121,130,167,170,125,90,84,80,80,90,98,
-114,133,136,172,222,192,207,198,191,144,91,75,69,78,93,135,219,255,255,255,255,255,255,255,255,255,255,240,115,77,72,95,140,132,114,120,102,119,95,70,66,85,62,27,35,41,50,47,
-27,6,0,0,0,0,0,16,20,20,21,30,37,43,52,54,51,56,65,71,78,88,98,148,224,248,250,252,248,254,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-255,255,254,254,247,239,236,231,222,214,200,171,171,167,153,123,118,99,51,37,31,26,23,27,38,70,170,204,200,201,176,144,167,222,241,241,245,239,219,179,134,105,97,93,77,63,55,50,
-40,35,35,36,42,38,35,34,34,35,33,28,21,20,22,26,34,52,90,115,94,72,75,100,136,167,183,193,200,206,199,211,200,143,109,94,77,58,47,35,37,43,51,55,58,62,61,59,
-56,55,56,56,57,55,50,48,48,51,54,56,56,56,57,61,59,63,69,84,84,75,70,65,64,66,64,62,58,57,52,47,45,40,36,35,35,35,35,31,31,31,31,29,29,34,40,45,
-58,72,80,86,93,118,143,154,176,149,105,87,85,84,88,94,113,122,129,190,236,189,194,206,183,132,84,93,98,93,104,102,179,254,255,255,255,255,255,255,255,255,255,212,108,78,69,78,
-119,116,98,107,134,140,109,71,79,87,71,35,34,38,38,26,6,0,0,0,0,0,6,13,10,12,15,26,38,51,63,59,52,61,70,82,92,92,100,137,225,254,245,248,254,255,255,255,
-255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,235,220,226,197,189,204,201,193,193,186,158,115,80,55,34,24,19,14,14,15,26,42,87,172,199,163,85,76,
-121,201,236,238,239,234,217,168,104,101,100,93,82,72,64,54,43,38,31,33,34,35,29,29,34,34,28,23,19,17,21,24,34,54,88,109,88,68,68,75,94,119,167,198,205,204,204,215,
-203,144,102,97,76,57,43,36,37,42,50,54,55,59,58,57,54,54,52,50,52,48,44,43,45,47,47,43,44,45,50,58,54,58,62,69,73,69,65,62,61,58,59,58,54,54,52,50,
-49,40,35,34,35,34,31,30,27,24,27,27,26,27,31,44,52,58,66,76,86,137,183,175,169,127,121,116,94,79,86,90,121,156,144,193,219,173,197,194,178,155,132,127,143,130,148,133,
-161,227,252,255,255,255,255,255,255,255,255,187,108,97,92,91,97,98,87,77,116,121,80,57,68,75,64,40,31,34,28,10,0,0,0,0,0,0,0,1,3,12,22,33,50,72,70,63,
-62,77,99,100,87,104,135,182,239,247,227,194,240,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,228,211,196,154,133,134,154,183,187,153,118,91,
-56,34,23,20,17,13,12,13,20,33,47,98,149,119,57,52,70,121,196,229,231,227,228,197,127,111,112,106,93,83,66,52,43,40,34,30,33,31,24,24,27,27,22,19,19,19,20,27,
-40,43,52,70,71,63,64,65,79,112,155,199,194,197,200,203,187,150,125,105,77,56,48,44,43,43,47,49,52,55,55,56,55,52,51,50,47,43,38,38,42,42,40,40,42,42,48,54,
-52,55,57,61,68,65,58,55,54,54,57,54,50,50,49,55,55,41,31,30,29,26,26,22,22,21,22,21,23,26,28,40,49,52,62,76,101,175,208,189,184,182,163,154,125,95,84,83,
-120,151,132,163,192,165,192,208,208,197,220,186,182,160,164,169,208,228,247,255,255,255,255,255,255,255,255,219,153,123,115,111,87,76,69,65,71,58,34,40,42,42,44,36,30,35,23,12,
-0,0,0,0,1,0,0,1,14,27,34,54,90,114,108,78,87,113,135,114,104,128,157,199,233,236,190,156,215,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-252,255,255,255,243,199,171,157,125,78,91,121,148,132,98,78,49,27,23,26,17,13,12,14,20,28,35,43,55,50,48,48,51,70,133,185,163,143,191,184,127,118,116,106,93,87,66,56,
-48,38,37,36,34,30,26,26,26,24,21,15,14,17,19,24,35,38,43,52,58,62,70,82,106,142,185,182,144,187,189,189,170,164,146,108,92,77,68,59,48,43,45,48,54,57,56,54,
-51,49,48,45,43,42,35,34,37,38,40,40,38,38,44,49,49,50,49,54,58,57,50,44,44,48,48,47,51,49,48,68,75,41,27,26,22,19,21,20,21,19,17,19,17,20,24,31,
-40,47,61,94,141,172,163,139,177,236,222,186,149,127,94,72,97,107,114,142,155,156,175,201,214,227,239,226,217,192,203,233,252,255,255,255,255,255,255,255,255,255,255,255,226,140,99,93,
-73,59,52,61,48,23,19,23,17,15,21,24,24,26,24,19,0,0,1,14,13,10,15,20,34,34,34,68,125,137,128,107,121,136,168,146,148,177,215,211,198,199,160,179,218,254,255,255,
-255,255,255,255,255,255,255,255,255,255,255,255,255,254,254,254,254,255,254,253,246,212,167,147,109,80,86,91,116,114,80,72,49,33,22,23,22,17,16,20,31,35,31,31,29,34,40,42,
-48,65,106,100,82,82,112,130,102,88,78,77,79,79,70,61,50,44,41,42,38,30,28,28,27,26,21,15,15,16,17,21,28,33,37,45,56,68,73,86,102,111,128,114,94,136,153,161,
-175,184,173,150,143,114,80,65,54,49,49,48,52,56,57,56,50,47,47,43,40,37,33,35,35,34,35,35,35,34,38,44,42,44,42,42,44,41,38,35,30,30,36,42,41,44,56,78,
-82,43,30,24,19,16,19,17,16,14,12,12,9,10,16,21,27,34,45,82,128,153,141,120,133,207,211,167,116,107,79,57,79,94,80,122,176,175,187,210,226,235,228,232,245,240,233,255,
-255,255,255,255,255,255,255,255,255,255,255,254,242,144,71,54,50,47,35,41,47,27,20,15,14,12,14,19,20,24,30,23,6,0,31,51,49,51,57,63,48,24,24,72,135,142,148,128,
-135,158,198,205,190,222,245,235,234,191,182,175,226,252,255,255,255,255,255,254,255,255,255,255,255,255,255,255,254,249,252,255,255,252,249,246,236,213,169,154,125,111,111,104,123,111,78,58,
-42,30,22,20,23,21,24,30,38,35,28,28,24,27,29,31,36,61,115,105,80,71,87,98,93,82,66,71,76,73,66,58,48,42,37,40,37,34,31,30,29,28,22,19,16,14,16,19,
-23,29,31,40,49,56,70,65,63,69,70,64,66,75,105,135,165,184,178,165,151,113,78,64,56,52,51,50,55,57,57,51,45,42,42,38,34,31,34,35,34,33,34,34,34,31,33,36,
-34,35,35,33,34,41,34,26,22,21,22,21,24,44,68,82,80,43,35,30,22,20,21,14,9,8,6,3,1,2,8,14,17,21,26,44,79,98,122,141,100,149,170,167,129,70,56,45,
-94,121,73,123,206,197,197,215,229,239,231,236,255,255,254,255,255,255,255,255,255,255,255,255,255,255,255,255,245,134,57,36,28,20,19,24,43,33,23,30,28,12,15,21,20,21,27,57,
-47,17,44,63,70,69,80,83,45,19,20,71,129,156,175,178,191,180,170,175,184,201,210,215,217,199,194,176,235,249,254,255,255,255,246,250,255,255,255,255,255,255,253,252,250,245,249,238,
-234,239,236,239,219,200,165,127,118,149,155,153,158,133,116,79,49,28,21,22,19,21,24,33,34,27,23,21,19,20,22,22,31,49,99,98,77,66,78,84,86,80,71,71,68,64,58,51,
-44,40,37,36,36,34,33,34,31,27,22,19,14,13,16,19,20,23,24,26,27,34,51,51,45,47,57,61,62,69,83,92,119,141,139,111,88,80,72,63,56,55,54,56,52,54,54,44,
-40,36,35,31,30,30,31,31,33,30,31,33,29,28,30,31,30,30,31,34,36,62,36,14,13,10,10,10,17,35,58,65,61,44,36,35,33,29,17,10,8,7,5,2,0,0,5,8,
-14,16,19,21,36,51,86,128,100,85,88,134,155,76,51,59,99,148,143,177,221,192,177,213,248,253,243,248,253,255,255,255,255,255,255,255,255,255,255,255,255,255,255,254,253,238,154,79,
-31,14,9,19,23,30,47,43,24,9,14,17,21,20,40,88,111,98,104,127,94,95,127,125,62,24,19,70,137,173,168,186,170,141,139,130,139,132,154,210,227,183,179,189,241,255,255,250,
-247,242,219,225,255,255,255,255,255,255,249,234,220,227,212,193,179,208,222,220,217,204,176,133,130,165,175,164,164,129,95,66,43,31,24,22,17,21,27,29,21,14,15,15,16,16,19,22,
-28,43,72,71,56,57,59,66,76,66,58,55,57,54,50,45,42,38,36,33,34,35,36,35,33,27,22,17,15,15,16,17,17,21,21,16,15,20,26,24,22,29,40,48,56,69,80,108,
-136,144,118,92,76,70,63,58,55,54,54,55,48,43,36,30,26,26,22,21,23,24,27,30,34,34,34,34,33,28,28,31,29,27,28,27,22,22,17,7,3,1,6,7,10,20,33,40,
-42,31,22,28,31,31,19,12,12,8,6,3,0,0,2,7,12,14,15,14,20,33,43,66,78,62,54,72,122,78,45,72,92,129,190,245,234,183,184,199,248,255,242,227,248,255,254,255,
-255,255,255,255,255,255,255,255,255,255,255,254,254,255,246,208,111,38,35,28,16,29,55,35,17,14,15,20,28,36,62,93,128,165,190,204,141,112,139,129,65,27,27,84,129,157,170,170,
-133,90,83,88,101,105,162,218,211,167,172,185,207,229,236,234,231,210,176,176,233,253,255,255,255,255,254,222,183,185,164,158,167,196,232,219,214,194,169,171,187,176,185,172,136,109,77,44,
-27,24,21,19,15,16,24,16,9,7,12,20,20,17,17,21,27,40,44,47,44,43,44,50,56,55,47,47,49,47,42,40,37,35,34,33,33,34,33,30,29,30,27,23,19,16,15,15,
-19,24,21,12,9,6,2,0,5,10,22,31,44,69,111,137,140,144,104,77,70,59,54,51,50,48,47,43,37,33,28,21,19,16,12,9,9,15,22,28,34,36,36,34,33,30,30,30,
-29,27,23,20,15,12,10,8,3,3,3,8,14,21,36,50,47,34,21,19,19,19,17,17,20,15,10,5,1,0,6,12,10,14,15,14,17,20,22,33,57,62,52,49,106,115,64,64,
-79,105,175,252,253,240,233,221,227,255,255,232,239,253,252,254,255,255,255,255,255,255,255,255,255,255,255,255,255,254,247,239,162,126,139,28,5,15,23,22,20,19,17,24,31,43,68,104,
-132,150,170,191,155,98,114,109,48,23,41,93,126,158,160,162,120,88,71,66,72,92,137,163,156,165,162,165,180,196,210,212,197,157,151,158,158,194,254,255,255,254,252,226,199,187,193,197,
-189,200,228,225,220,185,164,186,203,203,198,163,123,113,69,43,24,17,19,20,17,19,22,13,6,15,22,28,24,17,16,20,27,34,34,36,45,55,58,57,54,44,41,36,38,38,37,31,
-29,28,29,31,33,29,30,35,42,40,36,33,20,14,10,13,17,28,27,13,6,0,0,0,0,0,9,28,50,80,76,58,50,55,45,42,41,37,37,38,38,36,37,36,34,30,24,21,
-15,12,5,0,1,10,20,27,31,35,36,35,34,30,31,33,33,28,22,17,12,12,14,14,13,13,15,24,28,37,54,57,51,43,19,9,14,17,22,29,33,28,21,9,6,8,13,13,
-14,15,15,14,14,13,16,22,45,70,61,51,78,97,73,71,86,104,169,235,252,255,254,233,197,221,245,255,247,243,250,247,231,249,255,255,255,255,255,255,255,255,255,255,255,255,255,235,
-176,150,137,54,3,6,15,12,14,19,48,63,57,68,85,127,144,130,143,175,130,86,108,91,37,31,54,92,125,148,173,165,105,91,72,59,61,75,100,112,116,154,162,154,164,172,187,194,
-168,120,129,134,121,211,255,255,255,255,248,241,240,241,238,224,213,218,226,229,219,165,162,178,197,208,193,158,139,115,79,59,30,22,26,29,26,27,26,15,20,28,26,28,28,24,22,28,
-42,35,29,36,59,79,79,78,62,38,31,23,23,26,28,27,24,23,27,29,30,33,35,50,56,40,42,41,22,8,5,8,23,51,44,8,1,0,0,0,0,6,26,50,84,100,41,24,
-24,22,21,21,19,21,22,23,26,28,30,31,33,31,27,21,16,8,2,0,0,7,14,24,33,35,37,38,38,34,34,35,33,29,23,17,14,12,10,10,13,14,19,24,30,42,49,61,
-73,52,24,13,19,20,27,40,56,49,33,19,13,15,16,20,19,16,15,14,12,8,12,19,29,49,58,71,78,90,86,99,140,144,169,193,199,228,255,217,186,198,196,232,240,232,214,200,
-191,239,255,255,255,255,255,255,255,255,255,255,255,255,255,253,167,87,72,63,26,16,20,17,31,59,99,113,102,78,83,132,156,136,121,128,100,84,101,61,24,34,57,90,120,149,160,119,
-88,91,91,76,54,47,85,104,135,197,168,142,127,125,164,177,146,120,143,126,130,229,255,252,253,248,250,248,242,241,253,235,215,214,215,228,197,176,184,187,186,171,146,134,130,115,100,70,
-42,36,51,56,47,48,44,36,30,27,22,29,35,33,33,43,64,45,33,40,62,71,79,78,61,43,29,22,19,19,19,26,31,28,34,38,37,41,42,52,45,33,38,43,33,13,6,12,
-57,95,51,10,1,1,0,0,0,12,24,45,68,76,50,28,22,19,16,14,10,13,15,17,19,22,24,28,31,31,29,21,14,6,0,0,0,6,12,21,31,36,37,40,40,38,37,34,
-34,29,26,22,17,13,9,6,6,7,10,17,34,50,55,87,97,52,40,23,24,26,28,43,71,77,55,33,26,23,22,24,24,21,17,10,7,5,7,13,23,37,45,58,75,99,107,120,
-179,199,193,178,156,196,254,233,221,229,198,207,221,226,178,151,177,222,246,247,254,255,255,255,255,255,255,255,254,254,254,236,162,79,41,21,28,27,15,30,66,94,115,116,104,73,91,136,
-150,127,118,115,92,83,99,55,28,37,59,91,123,146,121,98,123,135,127,94,63,50,86,115,149,197,146,113,101,84,105,113,86,93,121,127,134,184,221,242,228,240,255,241,225,224,246,250,
-232,219,221,236,193,187,186,176,186,183,139,132,144,130,120,104,68,52,84,86,83,82,72,54,34,23,24,27,26,28,29,35,41,37,40,45,56,71,68,64,56,48,35,29,22,20,23,29,
-35,33,35,43,43,41,38,38,35,34,38,37,31,24,16,56,109,78,31,16,9,14,13,7,9,8,8,16,36,54,50,29,24,19,14,12,9,10,13,14,14,15,17,23,28,29,28,21,
-12,6,1,0,0,5,13,22,31,37,40,41,42,40,38,35,33,27,24,23,19,10,6,2,1,2,6,14,23,29,50,69,59,36,49,38,33,33,34,42,63,72,57,40,33,30,30,33,
-33,29,20,9,5,2,2,10,22,34,36,45,59,83,129,163,201,217,213,183,158,198,255,255,254,249,239,218,227,231,162,156,186,193,220,239,254,255,255,255,255,255,255,255,254,250,249,236,
-144,70,42,15,19,22,20,35,62,86,106,107,95,104,132,143,132,99,98,118,87,72,70,63,48,49,69,86,83,72,63,84,118,120,123,99,70,82,114,111,153,139,91,91,88,61,59,63,
-72,75,128,197,179,177,205,233,238,255,243,201,197,225,248,254,254,254,254,247,211,206,196,186,196,190,144,137,137,121,141,178,132,90,97,102,92,87,100,80,44,28,23,24,22,24,27,31,
-29,30,40,69,100,99,108,98,52,36,36,31,27,23,27,31,31,27,30,44,45,33,28,31,40,51,48,38,42,52,58,102,118,82,55,44,36,44,31,12,5,0,1,3,14,30,34,26,
-15,8,9,13,10,10,9,7,6,6,10,21,27,33,29,24,16,8,7,6,5,9,17,23,31,38,43,41,43,41,40,37,34,28,23,21,19,14,5,0,2,6,6,5,0,2,21,23,
-13,21,51,54,49,44,43,50,57,54,49,41,36,34,36,40,40,35,24,14,6,2,1,10,24,33,36,42,45,65,119,189,226,206,221,217,180,190,248,254,255,255,255,248,249,226,173,137,
-165,205,221,232,253,255,254,255,255,255,254,253,255,253,249,255,160,42,30,15,19,29,15,26,44,66,102,111,123,121,128,147,146,128,125,111,97,86,69,107,102,79,82,85,76,75,58,57,
-72,78,86,98,86,88,90,87,118,78,58,92,86,59,62,68,91,108,147,180,184,191,199,247,255,255,214,192,218,229,245,252,252,255,255,249,229,217,203,178,191,185,157,164,163,175,186,196,
-197,189,193,187,122,133,151,127,65,34,24,22,17,20,33,30,22,24,49,88,133,129,143,136,78,35,35,41,36,19,22,28,30,34,36,50,52,29,27,48,64,63,47,44,62,86,123,140,
-106,76,62,61,58,61,47,35,21,7,16,9,5,16,19,12,17,28,28,21,13,10,6,0,0,0,3,14,24,33,34,29,21,13,12,10,10,15,17,27,31,38,41,42,42,41,41,37,
-35,31,24,20,17,15,8,3,2,6,1,0,0,0,2,0,5,28,55,66,75,59,49,56,57,40,34,35,36,37,40,43,49,41,30,19,10,5,2,9,24,35,36,49,65,88,120,184,
-224,219,222,218,212,190,234,252,255,255,255,252,221,196,175,123,129,190,238,231,234,252,254,255,255,255,254,240,239,243,241,220,205,100,33,22,22,16,13,37,59,79,100,115,135,113,132,147,
-139,112,114,92,93,114,135,175,164,147,143,119,83,56,42,40,44,54,63,73,63,58,62,64,63,51,61,95,85,73,70,80,93,102,151,190,160,165,176,229,235,203,157,165,203,243,241,250,
-248,249,232,225,213,194,167,151,198,199,184,177,199,211,194,186,200,212,218,205,150,113,137,115,48,27,24,23,23,22,23,30,37,45,65,97,115,116,137,127,78,43,45,62,51,34,31,42,
-68,78,70,82,56,34,71,101,101,72,52,45,66,144,165,156,125,80,64,58,55,56,100,126,87,66,56,26,16,52,45,50,79,75,55,47,26,12,0,0,0,0,0,7,20,29,34,31,
-21,16,14,17,17,17,20,27,35,37,40,42,42,41,40,37,33,30,22,17,14,12,9,6,5,3,0,0,0,0,0,0,0,33,62,84,98,90,76,68,51,30,22,28,33,36,40,45,
-52,47,34,22,16,13,12,14,23,31,40,62,111,158,170,180,194,200,219,203,190,178,214,243,255,255,254,228,187,173,163,141,90,143,232,226,218,253,255,255,255,255,235,183,149,208,235,178,
-193,144,69,77,44,24,50,72,80,95,113,122,134,137,158,160,146,120,119,123,147,161,175,178,167,165,160,132,85,55,41,35,34,40,55,65,56,55,50,44,42,51,64,69,88,123,121,115,
-142,123,146,167,133,137,154,169,162,196,210,198,220,253,248,239,228,213,205,180,153,147,137,149,189,211,182,156,201,218,204,190,186,178,190,193,141,107,128,98,43,24,21,21,38,31,21,33,
-62,80,85,91,116,140,129,85,59,43,36,54,41,56,108,136,143,116,84,90,91,116,156,147,129,83,77,73,91,154,162,172,178,149,90,69,62,43,90,137,112,116,104,54,64,114,122,125,
-97,68,54,42,23,3,0,0,0,0,0,5,17,26,30,29,22,20,20,20,21,20,23,30,35,38,41,42,41,38,38,37,31,26,20,15,15,14,16,13,12,5,0,0,0,0,0,0,
-0,17,56,102,118,113,101,73,47,30,20,23,28,34,41,48,55,52,42,35,29,23,23,20,26,34,43,63,129,172,206,197,164,136,168,178,161,144,157,212,250,254,253,196,193,198,180,162,
-100,106,197,239,247,255,255,255,255,252,217,200,157,199,228,164,187,169,112,133,102,101,116,85,49,88,140,126,128,144,149,150,140,157,153,171,192,192,189,162,149,164,164,128,88,68,50,37,
-35,41,57,65,57,50,49,45,51,61,65,85,129,149,200,177,175,132,137,139,113,132,156,144,168,226,255,255,255,253,241,224,206,164,170,151,113,129,149,162,168,162,132,129,190,212,217,219,
-199,168,163,171,119,107,121,84,45,31,24,30,49,33,23,41,65,94,83,98,120,130,114,91,69,33,37,61,44,78,175,214,168,120,94,86,108,148,160,156,143,93,87,108,125,146,147,165,
-198,172,135,108,61,57,108,154,150,136,136,90,82,98,80,68,56,37,24,9,0,0,0,0,0,0,0,0,12,22,28,28,26,24,24,21,21,22,27,36,38,38,42,43,42,41,40,35,
-37,33,26,19,17,17,21,17,13,8,0,0,0,0,0,0,0,23,73,101,112,105,70,57,44,31,26,26,31,37,47,52,57,63,68,61,52,43,34,29,30,41,61,69,115,170,210,192,
-149,130,155,175,142,125,128,161,207,252,249,186,189,215,218,198,98,76,150,228,255,255,255,253,252,247,235,226,179,205,219,176,203,204,141,141,155,158,144,73,51,69,133,142,135,130,132,127,
-157,187,193,203,187,191,189,140,122,162,171,130,101,85,63,41,36,37,38,44,43,41,51,59,77,82,87,109,165,179,225,191,161,142,125,121,113,130,168,177,167,233,255,224,192,178,154,148,
-151,157,157,116,115,151,157,178,167,127,142,141,171,220,228,226,198,163,150,135,115,114,119,76,55,47,44,63,66,45,52,90,120,112,95,126,136,139,128,95,58,38,50,62,65,77,129,190,
-171,146,125,90,125,167,186,207,182,114,133,141,154,156,151,164,171,172,189,143,111,121,165,178,164,143,126,91,43,19,27,34,34,19,9,0,0,0,0,0,0,0,0,0,8,20,28,30,
-29,26,27,22,21,26,33,44,43,37,40,44,43,43,43,40,43,37,30,26,20,20,22,15,9,6,0,0,0,0,6,3,9,30,64,88,94,85,57,47,40,28,24,26,35,43,45,55,
-69,90,106,93,80,59,37,30,31,48,75,91,116,129,170,214,177,169,176,142,107,111,107,120,192,242,235,208,187,212,204,154,71,59,127,220,252,255,253,247,246,245,239,226,215,220,208,199,
-200,171,141,129,158,169,133,107,100,112,130,133,136,129,128,143,170,203,206,197,198,196,201,190,182,190,167,139,113,95,68,42,30,26,26,33,38,45,54,61,69,76,91,123,212,245,241,218,
-212,228,205,176,130,150,184,208,226,249,249,183,146,146,143,154,153,125,88,58,76,100,158,207,186,147,147,165,201,233,232,206,143,108,134,137,111,113,123,107,66,59,70,97,77,72,104,156,
-170,135,122,163,190,172,146,92,78,72,63,45,44,100,168,182,196,194,171,170,207,207,197,198,204,163,168,137,142,139,133,140,148,172,201,192,187,200,191,179,167,137,99,61,22,6,7,9,
-12,7,0,0,0,0,0,0,0,0,0,2,13,22,30,31,29,29,28,26,29,36,44,51,43,36,40,42,43,43,44,45,45,41,40,42,40,29,26,26,16,9,3,3,7,10,13,17,
-27,36,61,93,97,78,50,41,34,23,24,27,35,41,50,71,100,119,132,129,107,71,41,30,37,56,72,106,143,125,99,204,200,199,163,94,105,102,85,114,189,217,182,148,143,185,184,161,
-126,84,126,186,210,211,228,235,233,236,233,242,233,205,200,190,186,163,143,147,162,168,150,135,142,150,142,123,122,132,141,157,170,193,196,199,240,242,248,249,238,205,163,137,109,85,58,38,
-27,21,26,34,41,48,58,68,72,73,85,139,231,255,255,217,158,175,177,142,123,99,94,163,245,248,218,156,141,147,170,171,184,137,82,55,65,63,125,190,186,140,132,175,211,229,221,191,
-136,116,149,164,134,111,106,114,87,63,77,107,91,106,111,155,187,177,164,201,179,135,111,109,118,91,58,37,56,180,240,233,248,245,235,255,238,194,183,176,194,175,194,189,137,87,88,147,
-141,171,200,200,211,208,193,128,135,126,57,17,0,1,8,6,1,0,0,0,0,0,0,0,0,0,0,2,15,27,33,33,31,31,31,30,35,48,58,56,43,37,40,41,43,44,45,44,
-44,42,48,50,56,45,35,49,34,14,16,24,26,16,15,29,43,64,95,122,101,70,47,35,31,23,27,30,37,44,57,86,135,156,151,148,129,86,50,35,49,79,101,128,158,162,150,194,
-206,192,121,84,101,100,93,126,176,201,189,169,151,142,147,156,161,126,114,160,172,182,220,229,219,232,233,235,228,194,215,217,198,199,177,173,169,163,130,118,149,167,160,146,147,157,157,162,
-178,193,187,219,255,255,255,255,254,221,168,134,102,73,51,40,31,28,31,40,47,57,69,83,84,79,82,123,205,252,229,175,121,102,112,102,91,68,62,135,183,158,130,104,132,182,194,186,
-177,121,51,44,63,78,136,173,194,196,193,185,197,206,197,191,177,179,197,182,150,139,151,172,153,128,137,118,85,77,84,133,204,217,212,193,137,107,105,116,101,77,55,41,114,238,246,254,
-255,255,250,249,246,236,233,217,197,186,196,172,130,128,169,169,143,186,190,180,190,194,162,72,87,93,33,8,2,3,9,2,0,0,0,0,0,0,0,0,0,0,0,5,16,28,35,36,
-37,35,37,40,40,47,51,47,40,37,41,41,45,45,47,47,42,41,42,44,55,59,42,50,57,36,43,62,62,42,28,47,68,85,112,120,86,57,42,33,28,29,31,35,41,48,59,88,
-144,185,194,190,157,104,63,47,59,91,121,143,182,207,182,191,226,218,149,127,106,94,109,111,147,189,182,169,170,148,132,137,137,120,129,163,179,187,227,232,225,227,229,236,227,204,206,220,
-198,198,194,154,140,146,121,134,167,168,161,161,154,156,158,161,168,172,170,226,255,255,255,255,255,233,179,139,109,79,59,55,45,40,38,45,57,71,80,88,88,88,100,149,193,219,175,167,
-121,101,134,126,85,88,119,144,123,88,73,83,134,186,176,171,125,57,30,41,65,90,167,183,206,215,191,170,191,204,201,184,165,161,172,158,161,169,191,194,186,192,201,184,118,109,137,127,
-210,233,205,197,169,139,113,98,80,94,128,115,213,255,253,255,255,255,252,250,248,214,193,189,205,196,170,163,179,176,178,113,123,173,189,148,155,169,139,94,66,35,13,6,6,5,3,0,
-0,0,0,0,0,0,0,0,0,0,0,6,19,30,38,42,42,41,41,43,41,45,49,47,43,42,42,42,43,45,47,45,41,37,37,38,50,70,66,61,71,68,76,114,111,129,101,76,
-86,90,98,97,77,56,43,35,33,35,38,41,47,54,76,105,150,199,231,229,196,128,77,61,79,105,133,164,179,218,206,212,233,235,187,132,136,123,139,132,132,161,170,158,172,167,175,150,
-104,99,149,163,164,157,199,225,225,235,219,215,218,222,197,200,206,198,178,164,136,146,167,163,171,165,161,162,134,127,153,120,85,118,144,208,255,255,255,255,255,240,196,149,118,91,77,71,
-62,54,48,51,59,73,85,108,162,211,225,250,250,213,157,126,102,93,101,101,84,77,95,98,92,73,66,97,122,146,160,143,82,38,21,36,52,98,177,193,191,198,196,193,210,225,212,175,
-156,162,167,185,191,193,196,189,185,197,204,205,199,221,226,222,250,250,240,239,219,185,130,92,104,193,240,238,253,254,255,255,255,254,253,254,252,162,137,168,199,228,221,217,205,176,125,76,
-123,142,149,91,84,141,143,106,50,23,12,3,2,2,8,9,0,0,0,0,0,0,0,0,0,1,5,9,20,34,45,50,49,49,50,52,54,55,56,52,48,45,43,44,45,48,47,45,
-41,36,36,36,43,69,94,94,82,86,104,137,148,153,107,97,93,91,100,82,63,51,44,42,45,44,47,44,49,63,95,127,182,239,248,219,173,134,98,90,123,177,173,163,173,225,226,225,
-242,245,224,147,108,114,154,183,189,179,182,170,170,189,199,178,111,100,125,118,125,135,197,213,198,221,211,176,213,229,200,187,212,179,168,194,199,193,192,179,170,161,155,135,88,92,86,47,
-43,79,116,172,249,252,255,255,254,252,225,184,137,106,104,115,95,66,58,62,77,88,95,125,180,250,247,242,242,225,182,111,91,77,72,69,66,62,52,64,77,68,66,79,85,115,135,102,
-49,35,21,27,55,128,175,185,183,196,224,207,207,213,197,165,178,184,185,210,206,210,197,158,163,205,231,238,249,249,253,255,255,255,253,246,242,248,225,179,190,253,255,255,254,254,255,255,
-255,255,255,254,248,193,184,226,219,239,234,234,219,147,115,136,163,107,116,109,84,111,104,61,41,28,13,8,6,8,13,17,6,0,0,0,0,0,0,0,1,9,12,14,23,34,43,50,
-50,52,58,64,64,62,61,54,49,45,43,44,44,48,48,48,41,37,33,30,43,76,91,90,85,95,123,165,192,161,78,75,77,93,111,82,69,51,47,50,56,56,55,55,66,80,98,148,
-185,222,243,229,184,144,125,123,163,212,206,172,186,232,241,232,240,245,228,142,75,66,146,204,189,173,180,173,157,201,197,171,160,137,104,78,77,140,213,208,203,221,219,184,211,232,222,197,
-201,180,173,187,199,217,206,193,172,120,119,94,59,41,12,13,27,55,118,164,185,190,219,254,253,248,228,208,179,149,140,178,143,79,71,94,150,175,122,109,130,141,172,193,184,175,151,99,
-86,77,72,75,93,86,64,62,58,75,77,79,94,116,106,80,45,29,23,29,66,136,187,207,222,239,220,197,203,184,150,167,207,222,215,213,200,205,199,165,183,241,252,249,254,255,255,255,
-255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,254,243,215,229,239,232,232,227,217,197,197,211,191,135,139,111,102,102,77,42,36,23,14,10,10,14,15,19,
-9,0,0,0,0,0,0,0,2,14,23,21,24,33,41,43,47,55,59,61,64,64,58,55,51,48,48,48,48,50,50,47,42,36,30,30,40,57,76,79,72,90,120,172,204,168,90,69,
-70,97,102,73,62,56,54,58,63,69,80,88,109,128,134,179,208,211,241,239,211,182,151,191,205,192,219,197,205,212,242,241,219,218,235,164,77,66,111,170,170,143,141,133,129,183,191,179,
-172,151,107,85,92,162,212,211,206,220,229,211,214,217,226,227,200,198,201,198,196,220,228,218,183,116,86,61,41,16,21,26,30,57,120,154,129,160,208,242,254,234,200,184,179,190,200,222,
-167,107,108,167,176,169,127,120,133,134,160,186,141,129,121,93,77,76,72,91,127,113,83,91,93,127,105,93,99,79,55,44,33,24,30,49,95,150,213,222,228,231,201,200,211,161,177,191,
-173,218,215,214,227,224,228,232,247,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,253,247,245,234,231,220,227,220,213,214,
-207,170,142,113,108,104,88,59,47,31,17,10,10,9,8,12,7,0,0,0,0,0,0,0,2,17,28,28,28,31,36,40,45,52,57,61,63,61,56,55,54,50,51,50,50,49,50,47,
-37,34,27,30,35,37,49,62,57,59,88,134,176,170,119,88,95,101,86,69,61,65,66,64,69,76,93,119,147,164,167,189,220,213,228,228,222,207,210,255,243,201,200,218,229,219,235,235,
-226,232,240,199,106,88,111,143,169,156,134,125,113,140,148,163,160,156,113,97,126,187,206,199,189,189,187,204,224,228,235,228,196,194,229,212,189,217,233,232,210,160,98,42,20,19,30,33,
-49,70,99,118,148,196,203,229,242,229,200,176,156,168,190,231,238,217,231,235,165,160,142,162,176,196,182,150,129,146,127,95,80,80,88,125,151,125,141,164,134,119,90,87,79,58,35,28,
-26,29,38,76,118,155,184,185,176,185,199,225,233,184,187,163,162,207,219,235,253,254,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-255,255,255,255,255,255,255,253,248,232,215,214,221,213,220,222,211,194,169,128,115,125,134,86,47,29,21,22,10,9,10,6,0,0,0,0,0,0,0,0,0,15,30,30,31,34,36,41,
-49,55,55,57,54,50,49,50,51,51,54,51,51,47,45,44,31,28,27,29,35,40,37,42,36,36,62,104,148,128,97,100,129,112,72,75,76,75,76,76,75,78,101,135,153,190,189,191,
-236,226,221,204,205,207,233,255,255,238,215,255,255,254,250,247,238,234,241,214,151,133,180,206,211,173,140,140,113,121,109,135,168,160,126,128,161,197,208,196,155,137,156,168,224,241,243,236,
-220,212,222,196,196,219,227,224,218,171,61,19,15,22,42,45,48,72,101,109,150,177,185,217,226,203,199,186,168,126,128,228,255,255,255,252,242,227,219,213,196,193,160,113,126,162,129,93,
-84,87,113,154,190,173,175,146,88,64,64,82,65,48,36,31,30,30,44,69,101,137,142,162,155,169,190,177,196,191,154,148,180,217,217,247,255,255,255,255,255,255,255,255,255,255,255,255,
-255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,254,254,249,232,217,218,221,228,228,232,214,204,197,173,155,148,147,97,34,10,19,28,9,16,19,7,
-2,1,0,0,0,0,0,0,0,14,36,40,37,38,42,43,47,51,54,55,52,49,45,49,50,52,52,51,49,45,44,37,29,27,29,29,33,35,40,41,30,31,49,87,132,94,75,87,
-102,108,78,73,82,76,76,79,79,86,114,153,164,200,197,206,214,218,205,189,199,213,227,247,255,255,255,255,255,255,255,254,255,243,227,217,206,201,218,238,235,213,156,149,128,141,150,136,
-151,146,118,118,136,167,197,178,128,127,155,168,210,241,240,243,235,224,217,187,206,221,226,217,199,136,29,14,22,50,59,51,42,71,105,149,171,177,199,163,155,154,183,198,179,132,144,232,
-250,255,255,248,245,241,198,201,192,146,105,97,107,107,100,88,91,108,121,163,225,215,178,105,71,66,75,70,54,41,36,36,31,27,37,54,73,112,126,128,154,176,165,125,119,187,158,149,
-168,200,200,249,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,254,254,227,185,207,214,218,226,227,
-224,217,212,197,170,141,115,79,36,6,17,36,24,26,24,9,3,0,0,0,0,0,0,0,0,15,44,49,43,38,41,42,43,43,48,56,55,51,48,47,49,50,49,50,47,45,38,31,
-28,27,27,28,31,38,42,43,37,40,52,90,106,87,77,76,84,98,99,82,76,73,78,82,88,94,119,150,170,192,191,199,179,189,167,178,201,218,233,229,253,255,255,255,255,255,255,254,
-255,253,224,212,215,233,239,236,229,225,196,186,161,179,153,122,137,129,84,78,100,127,167,161,127,127,137,150,178,233,240,245,242,219,199,183,219,231,232,221,194,118,23,23,35,50,55,48,
-47,82,107,162,213,175,172,135,113,136,161,178,153,128,158,182,172,218,242,254,249,254,211,178,162,125,105,99,108,114,105,105,119,149,129,182,238,211,160,102,79,77,82,62,47,38,36,36,
-31,26,31,48,62,85,99,101,144,154,122,99,108,158,165,133,134,169,180,232,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-255,255,255,255,253,253,255,255,255,205,146,198,203,197,192,193,214,218,206,167,146,125,87,55,35,19,19,30,51,38,26,19,7,0,0,0,0,0,0,0,0,10,40,47,41,38,38,42,
-42,41,43,51,54,52,52,49,50,50,52,49,44,41,36,30,26,21,26,28,31,34,42,48,49,50,72,95,71,71,83,68,83,85,97,113,91,75,77,84,92,99,114,134,140,157,176,185,
-173,200,163,171,203,226,240,249,255,255,255,255,255,255,255,255,255,248,235,212,210,242,238,232,234,227,219,220,206,218,161,107,113,93,62,72,82,99,134,134,121,132,140,162,206,236,234,246,
-247,224,198,211,233,243,245,229,200,125,34,56,71,59,48,52,77,111,150,189,191,151,140,123,115,111,126,132,122,106,112,119,136,165,226,255,255,255,240,184,162,144,133,109,100,101,125,149,
-157,172,169,186,182,143,115,115,94,73,62,43,35,30,29,28,24,19,22,31,43,56,66,80,102,98,85,86,104,128,134,104,109,137,177,214,243,238,249,255,255,255,255,255,255,255,255,255,
-255,254,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,254,254,254,243,218,240,255,252,205,158,187,203,203,173,156,175,187,194,160,157,134,92,30,16,7,7,23,40,35,21,7,
-0,0,0,0,0,0,0,0,0,5,30,42,44,41,38,41,41,41,43,48,52,56,54,51,50,51,52,49,45,43,36,31,23,20,23,24,31,41,37,49,66,72,104,86,48,43,54,49,
-55,64,83,115,105,78,78,82,88,95,102,125,132,144,170,175,192,222,189,189,210,239,252,255,255,255,255,255,255,255,255,255,255,255,250,235,232,241,240,229,241,232,198,208,219,218,167,116,
-105,126,105,73,63,69,99,125,113,102,112,179,234,231,225,242,248,231,224,235,246,252,252,239,207,116,47,109,127,63,35,49,85,120,163,184,164,143,120,116,165,137,105,108,115,107,80,101,
-127,154,240,255,255,255,233,173,185,182,157,129,123,115,151,179,162,149,175,190,144,130,151,140,84,51,37,31,24,20,21,17,17,16,17,26,31,38,49,66,85,100,101,101,121,122,109,93,
-102,147,204,218,213,217,238,255,255,255,255,255,254,255,254,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,253,248,243,233,224,234,227,212,191,165,180,201,196,169,153,
-168,169,179,165,161,149,105,55,9,3,10,26,33,24,12,0,0,0,0,0,0,0,0,0,0,2,22,36,42,40,41,38,35,48,50,52,57,57,57,55,51,52,50,47,45,42,35,29,
-26,22,22,23,43,54,44,69,85,95,121,80,40,44,45,34,35,55,72,86,88,76,76,83,90,100,106,109,108,115,154,164,191,227,207,215,225,227,253,255,255,255,255,255,255,255,255,255,
-255,255,252,253,242,235,238,238,243,239,186,163,191,217,155,156,171,180,146,70,49,44,71,119,123,101,98,178,231,194,190,224,241,243,242,248,254,255,254,246,210,123,68,120,133,49,31,45,
-62,86,112,126,157,142,115,144,180,157,135,125,121,91,72,93,100,118,206,255,255,245,211,204,206,168,149,139,134,137,149,153,136,147,183,208,167,149,134,100,58,37,30,22,15,12,10,12,
-13,15,19,24,34,44,59,73,94,134,120,119,148,154,123,106,121,162,198,214,219,231,243,253,255,255,255,254,250,252,250,248,248,254,255,255,255,255,255,255,254,255,255,255,255,255,255,255,
-255,253,239,232,238,235,201,149,135,150,164,189,211,201,183,173,179,183,182,156,132,109,59,36,9,3,12,26,23,28,10,0,0,0,0,0,0,0,0,0,0,2,16,30,44,47,51,48,
-49,54,52,54,58,58,57,54,54,52,54,49,44,40,35,29,28,26,22,30,56,55,52,92,136,126,101,61,37,49,49,42,40,50,59,63,65,71,80,92,107,120,135,134,119,105,128,142,
-191,236,215,228,234,243,255,255,255,255,255,255,255,255,255,255,255,255,255,255,248,238,234,243,249,247,215,172,163,215,199,210,249,194,123,80,51,43,63,97,127,120,100,171,211,164,161,201,
-236,248,249,253,255,255,255,245,214,176,119,132,147,73,50,66,82,99,95,95,118,113,122,158,176,176,194,173,149,95,78,87,92,95,148,201,246,243,185,205,191,157,141,115,104,111,122,123,
-129,123,140,177,175,158,107,64,42,27,21,15,7,3,3,6,7,14,22,33,44,64,84,106,119,141,126,142,156,163,153,135,148,184,201,204,219,234,245,252,254,255,254,253,249,243,241,247,
-239,247,254,255,255,255,255,249,246,255,255,255,255,255,255,253,249,241,207,210,204,163,122,118,126,126,180,199,196,189,201,203,194,207,197,167,120,63,29,12,6,5,16,31,36,41,21,0,
-0,5,0,0,0,0,0,0,0,6,15,27,41,51,52,54,56,54,52,55,57,56,56,56,55,56,56,52,49,41,34,29,37,35,41,58,78,73,71,106,132,135,128,64,27,40,45,56,
-58,62,64,62,59,66,86,102,129,157,177,158,154,151,142,142,192,232,241,235,232,239,250,254,255,255,255,255,255,255,255,255,255,255,255,255,252,233,236,240,248,249,234,199,208,221,219,222,
-224,160,108,105,84,73,69,85,118,140,119,134,165,162,171,208,234,243,249,254,255,255,255,243,213,180,164,143,116,83,59,69,73,72,52,73,80,111,162,141,129,183,198,175,141,94,80,78,
-83,91,98,133,227,233,158,161,169,141,112,93,88,86,88,105,125,100,92,107,144,133,86,44,27,21,15,9,2,1,0,3,5,15,26,36,59,84,107,154,129,156,176,186,180,197,197,175,
-169,190,217,229,238,242,245,243,242,240,243,243,246,248,239,239,239,246,255,255,250,241,239,227,236,254,255,255,255,255,255,247,236,227,214,208,192,163,170,191,167,161,199,213,199,194,207,213,
-180,176,170,144,92,42,41,31,13,28,34,33,36,35,14,3,0,0,0,0,0,0,0,0,0,2,10,19,28,47,48,47,47,50,49,49,52,55,54,54,54,54,56,56,54,45,43,37,
-61,57,72,100,121,122,133,158,133,126,149,82,28,47,65,87,95,85,77,64,63,71,91,116,143,165,192,187,193,190,167,176,203,231,242,234,228,239,235,235,254,255,255,255,255,255,255,255,
-255,255,255,249,245,232,211,213,232,238,229,180,183,171,192,140,99,120,140,137,130,107,72,76,120,160,136,118,127,122,151,185,219,241,250,255,255,255,255,240,214,179,172,163,92,48,54,57,
-65,48,27,47,86,140,161,147,139,136,146,180,153,85,76,80,85,93,92,115,178,178,139,141,133,106,92,83,83,84,83,95,102,94,83,80,98,87,50,27,20,16,7,2,0,0,0,1,
-5,13,27,45,83,92,120,198,192,213,227,206,185,185,186,173,173,194,226,247,250,250,245,234,225,228,227,229,241,245,226,227,234,224,227,219,215,217,213,220,232,246,254,255,255,255,255,253,
-247,232,231,224,214,219,221,240,225,214,219,213,212,219,213,214,191,136,125,114,54,16,34,29,19,31,34,31,37,26,5,5,2,0,0,0,0,0,3,3,0,0,5,9,16,28,36,33,
-36,43,42,43,44,49,49,49,50,50,52,62,58,61,75,68,91,88,86,109,130,148,192,227,183,149,100,75,40,65,92,109,99,90,86,62,66,105,133,132,142,176,204,206,218,214,197,183,
-175,208,219,232,220,233,243,243,252,255,255,255,255,255,255,255,255,255,255,231,229,234,208,196,207,233,236,175,98,118,132,107,133,184,186,173,161,100,68,75,113,129,134,122,87,88,125,156,
-193,231,249,255,255,255,254,234,210,196,194,200,153,70,41,43,42,21,17,31,64,136,121,119,97,113,116,164,139,82,87,99,105,98,88,102,133,135,135,118,105,102,92,80,83,87,90,99,
-101,88,73,68,66,50,31,21,16,10,2,0,0,0,0,2,7,14,29,57,88,97,126,186,235,231,234,215,189,189,204,206,217,228,242,254,254,249,243,229,213,210,203,199,206,197,191,194,
-198,186,176,158,162,191,210,225,233,232,238,253,255,255,255,255,249,242,240,238,236,233,231,240,243,233,222,206,214,219,221,222,194,140,146,93,35,10,9,14,20,23,33,44,41,14,6,14,
-13,7,0,0,0,0,5,6,5,1,1,2,3,12,17,22,24,31,36,37,37,37,41,43,44,44,44,59,69,76,95,99,119,127,108,121,163,191,204,212,189,128,78,85,70,79,109,137,
-133,107,95,72,70,114,161,164,167,201,224,215,218,231,218,170,135,161,197,220,219,221,239,248,253,255,255,255,255,255,254,254,255,255,250,198,217,217,206,213,214,238,246,169,88,113,136,150,
-207,219,199,167,130,77,66,75,98,97,109,111,79,86,108,111,132,197,247,255,255,255,250,227,205,205,206,206,178,112,71,50,26,14,22,30,34,54,59,76,78,93,106,109,93,87,86,97,
-107,109,94,97,97,102,112,107,113,126,98,82,88,91,91,97,95,80,65,59,52,41,28,21,12,6,0,0,0,0,5,12,15,20,31,51,70,111,147,172,233,222,208,211,225,228,226,235,
-248,254,255,255,255,253,243,226,217,190,176,175,171,163,168,180,183,168,175,155,157,187,217,228,240,238,246,255,255,255,255,254,253,252,250,250,243,233,236,240,243,238,221,213,212,208,227,221,
-203,194,161,79,40,14,9,21,29,22,36,61,33,15,20,16,10,7,1,0,0,17,19,3,6,5,7,5,5,12,12,16,13,15,21,24,29,31,31,34,37,36,36,48,84,111,120,109,
-154,123,102,136,183,199,199,184,144,93,72,88,115,108,123,169,161,116,84,75,75,95,147,179,198,199,211,224,227,206,211,200,146,121,167,190,210,240,246,254,255,255,255,255,255,252,246,254,
-255,255,250,221,224,176,183,194,226,247,240,153,116,129,192,205,198,180,168,113,92,78,63,64,88,94,95,80,76,71,77,106,153,205,253,254,254,254,245,224,212,204,208,206,177,146,112,62,
-24,17,22,31,21,21,58,71,65,58,93,83,78,75,71,78,99,104,87,86,85,93,99,101,113,118,99,85,90,93,88,80,72,68,62,56,44,35,24,19,12,3,0,0,0,5,12,20,
-26,30,36,50,84,136,153,169,212,215,232,240,248,240,234,241,252,255,255,255,255,253,238,224,214,173,148,157,162,160,201,197,165,154,173,156,170,208,239,247,252,252,255,255,255,255,255,255,
-255,252,250,254,249,236,238,234,234,219,218,218,207,213,217,201,193,186,139,80,57,31,23,43,48,36,42,50,31,21,16,7,5,6,1,0,14,44,36,8,2,7,13,7,6,6,10,13,
-8,8,12,14,22,31,31,33,37,37,35,50,113,151,170,180,149,116,99,129,163,191,203,185,112,70,64,79,121,125,127,160,161,144,98,79,79,101,125,158,214,215,198,210,215,207,193,219,
-194,142,139,164,197,248,255,255,255,255,255,255,255,252,249,255,255,255,253,248,236,190,167,177,226,231,228,183,154,182,219,203,139,114,125,99,93,98,83,79,77,70,70,69,62,66,75,109,
-182,242,253,254,254,250,239,219,207,200,210,207,204,193,114,68,42,17,19,28,24,20,49,64,84,83,90,90,68,49,49,70,101,105,85,79,90,92,101,106,106,111,104,87,82,78,72,64,
-59,61,56,44,35,29,23,15,8,6,5,7,8,13,17,23,31,38,43,58,101,142,154,177,206,213,232,239,240,245,247,252,254,255,255,255,255,252,229,224,207,185,185,187,176,165,205,185,
-157,169,162,146,187,226,248,252,255,255,255,255,255,255,255,255,255,253,249,252,254,247,236,227,235,201,205,207,192,208,221,191,176,175,140,108,90,50,22,55,70,69,68,59,42,21,8,0,
-0,0,0,1,16,22,16,12,7,9,15,15,8,5,9,12,10,8,8,14,20,27,31,28,36,36,31,57,125,171,191,200,158,132,126,147,175,201,167,106,70,61,76,91,134,150,119,118,
-134,132,122,98,105,129,132,165,231,220,203,214,215,225,218,215,190,143,155,171,193,252,255,255,255,255,255,255,255,255,255,255,255,255,255,255,171,133,122,163,208,197,192,171,199,220,182,121,
-85,101,116,127,130,100,84,65,45,41,50,41,52,68,73,101,178,247,253,255,254,247,228,208,203,203,205,205,197,197,128,52,57,33,22,23,21,20,38,66,98,95,78,61,42,40,44,69,
-106,120,111,108,111,114,119,119,104,88,83,75,73,66,61,58,55,55,44,34,29,23,20,15,9,8,10,10,13,19,26,34,42,47,51,64,102,109,135,183,210,211,225,234,241,246,252,255,
-255,255,255,255,254,245,229,205,194,207,215,194,172,173,192,155,147,169,143,160,205,231,250,252,255,255,255,255,255,255,255,255,254,250,252,254,254,255,250,252,249,214,208,217,206,213,224,172,
-142,149,136,125,164,127,66,68,83,76,69,83,77,31,8,0,0,0,0,10,23,17,7,5,7,12,22,24,8,0,2,7,6,5,5,9,15,17,20,21,31,38,29,56,92,135,198,207,
-192,194,162,183,205,170,143,87,44,62,92,111,141,144,120,106,123,123,130,108,113,148,190,204,205,175,178,210,222,222,229,222,197,176,177,194,221,247,255,255,255,255,255,255,255,255,255,255,
-255,255,255,255,184,160,149,115,137,139,134,162,208,215,133,90,100,104,129,153,132,72,34,20,21,29,33,36,61,66,47,68,146,233,253,255,254,243,220,205,212,206,201,208,200,200,167,97,
-93,75,44,29,23,20,30,73,109,90,64,49,41,43,64,104,118,115,139,168,160,148,143,143,112,86,72,64,63,59,56,55,48,43,34,27,22,17,13,9,6,6,12,13,20,24,31,42,
-49,54,55,63,85,102,150,196,208,220,232,243,253,255,255,255,255,255,255,255,248,231,224,199,205,208,187,168,153,156,140,114,139,178,162,207,233,236,247,250,254,255,255,255,255,255,255,255,
-252,252,252,252,254,254,255,254,253,234,218,210,207,218,219,176,161,155,169,177,185,187,179,178,189,118,111,140,128,61,14,0,0,0,0,21,29,13,0,0,1,22,31,22,7,0,0,0,
-1,3,0,3,9,17,17,20,30,41,31,40,102,183,205,193,199,153,148,197,186,164,157,115,62,75,97,121,120,120,97,93,108,97,84,88,98,153,175,171,182,196,171,206,224,206,210,218,
-200,191,182,201,224,241,249,253,255,255,255,255,255,255,255,255,249,232,208,220,206,192,163,106,105,105,119,167,208,218,149,105,111,134,132,115,88,34,6,6,14,27,29,49,77,79,57,72,
-168,238,248,252,249,236,213,199,200,200,201,208,205,200,194,189,151,115,113,68,38,28,41,95,119,85,63,52,50,68,108,139,142,132,140,162,180,157,140,133,111,87,66,55,51,52,52,48,
-42,34,27,23,19,14,8,3,1,6,12,19,23,31,38,45,48,56,62,64,73,118,177,199,208,220,235,253,255,255,255,254,255,255,255,247,229,224,211,198,177,161,162,187,161,133,143,142,
-177,214,198,210,190,204,220,239,250,247,253,248,245,247,248,242,243,247,253,252,254,253,250,226,204,210,201,186,184,213,227,203,172,183,205,193,177,183,204,208,210,155,99,118,114,40,2,0,
-0,0,0,9,22,14,2,0,2,40,42,23,3,0,0,0,9,19,9,12,26,41,47,47,68,55,36,71,144,212,226,211,196,150,149,158,133,140,142,123,90,79,87,119,109,141,113,62,
-70,66,59,63,79,115,149,162,150,183,205,206,190,183,192,194,176,183,186,205,221,231,234,252,255,255,255,255,255,255,254,249,207,128,115,149,189,200,160,137,133,118,129,189,218,206,182,141,
-116,118,112,65,42,16,2,3,14,24,27,38,64,84,84,104,178,218,240,245,241,231,199,193,196,196,201,208,206,210,206,212,192,169,179,121,76,52,70,94,97,90,82,68,73,119,172,162,
-144,154,165,176,178,143,125,122,107,82,61,51,48,47,47,41,35,30,23,17,13,9,1,1,2,5,12,22,34,43,49,51,51,56,64,70,75,113,169,173,176,208,236,254,255,255,255,253,
-239,238,240,225,200,194,175,163,158,155,147,172,175,142,158,153,167,192,186,172,139,168,201,218,219,204,218,221,208,198,232,243,243,245,255,255,254,250,236,204,172,178,196,198,192,210,218,197,
-143,179,214,201,182,172,168,170,192,149,94,111,97,30,0,0,0,10,13,8,14,13,7,0,3,27,49,42,6,0,0,0,24,17,12,68,107,93,93,69,71,85,108,137,171,200,214,205,
-148,182,161,120,90,85,88,84,73,73,80,102,102,154,132,77,62,61,63,56,71,98,139,176,158,148,193,205,165,155,160,149,130,155,176,204,197,207,238,254,255,255,255,255,255,255,254,232,
-172,87,72,108,153,143,116,136,144,127,132,204,167,142,146,149,102,64,70,36,13,0,0,0,5,9,20,33,55,59,59,80,133,201,240,243,241,226,197,187,186,189,200,208,214,214,220,215,
-211,221,180,134,116,97,92,82,98,121,100,100,118,144,168,168,139,119,143,143,135,128,123,105,87,75,59,51,44,41,43,38,30,24,19,14,9,5,1,1,2,6,19,36,59,66,65,59,
-58,58,63,65,80,91,122,156,161,186,225,250,255,255,255,241,201,183,199,201,184,168,157,149,135,113,119,125,154,140,125,139,126,150,154,189,191,182,179,172,164,151,167,193,184,194,233,253,
-255,255,254,250,246,246,227,212,213,191,183,193,201,196,173,135,106,161,200,203,208,191,151,139,165,129,93,106,79,21,0,0,0,20,16,12,13,8,3,6,9,26,49,45,13,0,0,0,
-41,27,37,85,129,121,90,56,55,87,133,147,132,150,193,154,109,134,130,115,71,33,24,23,22,31,51,76,82,126,119,88,76,66,65,65,68,92,130,162,169,164,184,203,175,143,153,126,
-101,120,146,192,207,203,234,254,255,255,255,255,255,255,255,224,123,68,58,73,85,85,101,134,149,148,122,140,121,105,88,83,51,28,33,23,3,0,0,0,0,2,10,22,43,35,30,43,
-70,172,229,222,215,191,165,161,172,171,193,207,228,228,231,225,227,226,170,163,177,168,114,77,94,106,93,99,115,125,133,129,119,108,108,100,92,98,97,78,65,59,55,49,41,38,38,35,
-26,19,13,9,3,1,0,0,1,8,28,51,84,85,73,69,68,68,68,70,79,82,100,134,183,189,204,238,252,253,243,229,208,203,205,210,184,161,150,127,118,100,97,112,114,108,127,140,
-130,155,182,211,214,167,173,164,141,134,151,178,201,198,232,254,245,218,207,203,215,226,219,220,217,184,171,172,191,178,119,86,120,136,186,205,207,180,140,128,126,113,98,105,52,15,1,0,
-24,43,26,21,21,17,13,12,22,37,52,55,26,0,1,20,42,44,42,33,63,99,100,61,47,59,72,91,92,113,171,130,130,109,97,128,95,17,13,16,15,17,24,42,57,95,94,72,
-68,59,58,71,72,76,92,107,132,157,168,177,162,130,140,126,129,125,147,200,217,225,231,254,255,255,255,255,255,255,255,235,126,47,57,83,95,86,94,128,147,162,133,105,102,78,54,22,
-7,8,20,17,9,6,1,0,0,0,0,7,17,20,23,27,65,179,228,192,170,157,139,114,134,167,194,200,228,240,239,239,236,236,231,229,218,212,156,101,92,86,76,75,87,101,99,102,
-102,94,82,71,68,68,62,51,51,45,38,41,37,36,34,28,22,16,10,3,1,0,0,0,3,13,31,58,80,77,73,76,77,84,84,100,106,128,160,182,211,205,161,178,227,234,234,225,
-222,220,203,161,142,126,111,104,109,102,104,114,104,114,133,119,122,187,245,242,225,215,233,225,203,160,165,191,218,231,247,255,225,192,199,220,228,227,218,217,205,200,196,178,185,157,111,91,
-115,154,197,210,187,118,72,104,125,104,94,95,65,27,17,23,59,59,33,24,37,33,23,24,40,61,82,93,37,21,40,41,23,10,5,5,10,49,68,44,38,42,50,62,50,77,106,126,
-155,134,127,147,105,22,20,37,36,29,28,30,42,71,83,73,58,43,37,43,49,56,65,71,84,114,130,178,175,132,126,116,119,147,157,210,219,218,236,252,255,255,255,255,255,254,252,245,
-171,66,65,118,123,108,120,127,130,129,102,82,122,100,47,14,6,12,14,21,20,2,0,0,0,1,5,10,13,20,23,28,106,193,182,136,134,148,135,118,139,178,198,198,236,247,249,250,
-252,252,252,248,243,232,163,115,95,71,65,62,63,70,79,88,80,65,61,57,51,48,42,40,40,30,27,27,28,26,24,20,16,14,9,3,1,0,0,1,8,16,31,45,55,61,66,72,
-77,87,99,129,140,172,201,207,203,153,79,108,135,157,211,224,224,191,142,92,76,72,70,75,86,91,105,108,114,128,121,97,119,210,255,255,231,178,179,197,176,147,130,128,169,240,249,242,
-220,224,227,235,221,219,215,212,204,208,185,156,140,149,141,112,144,191,206,204,177,122,76,97,115,100,86,63,76,62,37,30,71,59,44,34,40,31,30,55,76,75,80,82,66,82,68,40,
-10,0,0,0,0,0,15,24,51,49,34,63,57,36,59,158,129,104,120,129,119,43,34,56,52,45,37,31,40,55,72,63,44,34,26,17,28,37,41,45,49,76,112,186,208,163,143,134,
-119,142,154,184,193,204,245,253,253,254,255,254,254,252,249,240,146,78,97,156,165,115,126,128,122,129,73,50,87,63,28,20,13,12,15,29,21,3,0,0,0,7,14,17,20,19,26,52,
-143,186,143,126,143,154,154,142,161,187,204,226,247,252,253,255,255,255,255,254,249,187,102,95,78,68,59,58,65,75,76,78,71,59,51,51,50,41,34,33,24,15,14,14,16,14,14,12,
-12,8,5,3,2,1,6,12,19,21,30,37,44,54,62,69,77,85,95,144,172,182,194,194,148,65,48,61,66,88,182,215,186,118,83,73,65,59,61,69,83,95,100,101,113,116,101,86,
-105,182,246,239,187,141,111,129,123,108,99,109,154,217,204,183,172,198,217,225,212,200,176,151,155,158,141,144,146,175,189,178,157,165,179,173,177,163,127,123,105,93,105,107,154,141,108,106,
-98,51,35,34,48,40,51,91,108,95,87,93,83,71,41,16,0,0,0,0,0,0,3,24,43,34,22,44,50,58,119,183,93,114,113,113,121,69,42,80,77,48,35,27,31,37,55,52,
-35,21,17,13,15,20,24,30,40,65,77,147,194,161,133,142,154,150,151,172,185,194,210,242,250,253,253,254,249,241,239,236,190,107,107,132,189,149,119,129,141,115,41,42,55,40,24,20,
-14,12,20,31,14,1,1,0,1,9,17,23,26,22,36,70,169,186,135,130,119,105,137,153,190,200,212,247,253,253,255,255,255,255,255,255,250,176,88,68,63,70,71,68,87,101,85,80,
-71,77,58,48,44,34,28,22,14,7,5,3,6,6,7,5,3,2,2,1,5,7,12,26,30,26,30,36,45,56,66,78,95,107,118,162,168,167,190,186,107,57,49,51,63,97,170,197,
-178,136,101,104,102,86,83,83,94,109,101,97,102,97,88,91,130,176,218,176,163,132,105,132,142,106,112,149,183,184,178,158,137,150,197,198,197,169,118,98,105,127,127,162,179,197,212,186,
-141,147,164,173,170,155,115,120,116,123,144,165,184,177,175,187,176,106,42,42,57,77,85,102,162,155,128,127,84,26,3,0,0,0,0,0,0,0,0,31,33,34,22,10,23,61,140,140,
-87,97,109,118,126,98,73,98,91,64,43,28,29,38,45,43,29,21,15,10,12,13,17,22,36,49,45,108,205,207,154,133,142,144,148,153,170,189,189,231,242,246,247,243,239,233,231,225,
-227,164,112,111,168,168,149,136,157,115,29,23,35,31,20,15,15,13,15,13,6,1,3,3,8,17,27,34,37,50,79,91,137,133,91,100,91,106,128,142,206,219,222,236,253,255,255,255,
-255,255,255,255,252,187,92,57,68,83,83,72,88,111,92,78,71,82,57,41,33,26,21,13,7,0,0,0,0,0,2,0,0,0,0,0,6,12,20,30,38,34,34,38,47,58,77,92,
-105,109,113,115,122,151,191,173,104,70,56,48,62,68,77,146,190,161,129,133,127,101,90,82,80,90,90,86,104,146,204,217,246,252,224,155,119,94,93,107,112,99,97,134,154,153,170,169,
-157,158,163,180,179,139,92,73,91,114,113,165,199,191,189,190,180,192,197,187,161,147,150,148,160,180,182,186,178,170,183,190,183,147,112,101,119,179,164,179,229,211,175,136,107,33,2,0,
-0,0,0,0,0,0,8,30,26,34,21,7,8,37,88,95,58,76,113,135,151,128,111,106,99,84,62,42,40,47,44,33,29,26,17,10,9,9,20,29,29,38,44,77,178,231,201,185,
-171,178,165,156,164,189,196,225,235,232,231,226,221,196,201,197,194,146,129,154,155,146,127,123,155,112,36,21,23,21,17,15,14,17,16,12,3,3,6,8,14,26,37,50,64,86,100,113,
-135,122,88,111,86,93,82,116,184,212,224,234,254,255,255,255,255,255,255,255,238,128,63,70,86,94,65,55,76,88,80,70,64,58,47,37,28,23,14,7,5,0,0,0,0,0,0,0,
-0,0,0,1,8,17,28,38,54,49,36,38,50,70,85,86,79,70,59,52,68,107,141,108,66,58,56,54,58,58,68,116,150,140,120,126,104,90,87,79,76,83,90,88,109,155,235,253,
-234,246,224,191,107,73,70,70,65,71,91,108,123,142,148,141,142,139,132,146,136,88,75,82,99,88,113,173,189,185,182,219,210,196,194,178,142,160,182,176,198,196,198,192,148,134,176,221,
-218,213,203,212,233,247,243,240,235,212,179,150,136,66,16,0,0,0,0,0,2,15,51,70,43,41,31,16,10,21,44,56,69,87,122,137,136,139,182,161,155,144,127,87,59,65,51,29,
-23,17,13,12,14,24,34,50,43,49,77,108,190,235,231,229,219,206,192,186,176,191,203,221,220,222,207,206,213,143,130,149,149,120,127,191,164,143,176,169,135,93,61,45,44,38,33,30,
-24,27,26,20,12,10,12,13,21,33,44,70,99,101,79,100,144,119,88,99,71,75,82,99,175,190,194,238,255,255,255,255,255,255,255,255,222,121,69,90,113,94,70,66,76,73,80,66,
-55,49,43,34,30,22,14,8,3,0,0,0,0,0,0,0,0,0,0,3,8,21,37,49,65,72,51,48,64,77,78,71,56,41,42,41,42,58,75,71,68,70,72,66,54,63,88,95,
-91,90,76,82,95,97,72,71,88,130,171,125,90,106,119,150,179,182,156,150,87,61,62,58,62,93,132,113,106,112,118,121,125,129,134,129,112,83,82,107,102,92,133,186,206,224,239,229,
-200,199,186,136,139,191,218,207,205,182,184,182,147,146,219,249,241,247,252,255,255,254,252,245,236,220,168,160,154,100,34,16,17,26,22,20,21,43,58,78,85,68,72,62,35,22,42,69,
-144,107,123,146,148,169,226,207,201,201,179,129,106,116,71,41,24,14,22,30,26,33,37,55,78,100,121,162,207,243,249,249,246,225,204,194,193,199,205,206,205,210,201,184,198,176,125,102,
-91,129,168,208,192,183,190,167,130,106,106,112,106,84,57,41,38,42,38,27,20,15,17,20,34,48,56,82,101,85,77,136,136,102,93,90,80,84,90,113,178,189,210,240,255,255,255,255,
-255,255,255,254,217,135,83,98,108,83,88,79,76,79,79,66,51,50,45,36,30,21,14,8,2,0,0,0,0,1,0,0,0,0,3,12,22,37,51,65,82,87,77,69,72,63,56,58,
-48,31,28,29,37,51,63,72,80,79,78,86,100,95,91,86,73,65,63,82,108,113,84,79,139,168,160,118,95,109,111,127,177,136,107,105,78,51,57,55,71,134,163,126,122,127,150,144,
-122,120,105,92,80,69,80,91,80,114,156,206,229,238,242,214,193,220,169,153,180,151,190,214,196,217,206,208,217,233,255,254,253,255,255,255,255,255,255,247,239,218,170,194,193,132,52,23,
-31,43,48,40,33,30,41,69,93,115,144,115,42,34,73,148,183,150,144,161,163,171,206,233,229,196,154,139,147,137,99,82,38,33,54,42,42,36,43,78,127,137,141,191,231,246,250,252,
-246,228,213,204,196,198,204,201,201,198,204,170,132,157,104,65,68,149,213,226,213,200,141,141,169,141,147,148,122,82,52,43,47,55,49,35,26,20,23,30,42,54,63,77,88,85,97,134,
-168,144,107,120,123,87,87,106,171,213,233,243,255,255,255,255,255,255,255,250,221,161,137,102,99,90,79,56,56,62,61,61,56,55,48,41,33,20,14,8,1,0,0,0,3,3,1,0,
-0,6,13,27,59,77,87,88,101,113,79,82,109,78,44,42,35,24,20,22,29,37,55,70,86,82,73,93,123,99,84,88,65,47,57,85,119,153,162,184,234,176,154,125,137,155,180,175,
-142,114,126,121,83,57,64,79,123,175,176,168,187,171,175,150,115,95,77,62,52,58,75,71,79,120,149,178,191,187,194,211,220,242,191,173,148,128,178,212,221,249,250,255,255,254,255,255,
-255,255,255,255,255,255,255,253,245,229,222,218,175,126,78,36,31,35,41,38,42,30,45,71,115,189,224,173,79,97,126,163,176,167,148,162,157,162,198,222,227,165,130,128,139,142,140,128,
-119,112,84,43,48,43,54,91,123,126,133,179,240,250,254,253,247,235,222,217,204,200,206,199,193,183,161,123,91,78,42,27,45,123,214,231,210,199,168,149,194,190,155,156,111,57,47,52,
-59,63,52,40,33,30,30,37,45,56,68,79,93,97,88,101,150,163,121,154,151,86,88,108,172,219,245,254,255,255,255,255,255,255,254,246,224,191,187,129,109,85,50,28,41,58,64,64,
-62,56,49,44,29,19,16,12,5,2,2,6,9,6,1,1,3,10,16,27,52,71,98,107,127,121,68,66,98,85,50,36,30,24,19,19,23,26,41,63,91,86,84,97,105,92,80,77,
-61,48,59,73,133,186,212,247,255,245,236,219,205,190,180,160,102,107,154,135,82,69,79,123,179,219,210,197,191,182,175,139,113,91,70,54,44,48,55,73,70,92,125,140,167,173,177,211,
-200,190,199,160,135,157,206,215,234,255,255,255,255,255,255,255,255,255,255,255,255,255,255,254,247,231,224,203,192,158,93,54,38,15,22,37,43,40,51,102,175,247,255,248,227,215,229,189,
-141,172,175,194,180,189,194,224,226,169,118,106,105,129,157,156,190,168,99,79,78,61,65,107,143,171,161,175,240,254,254,253,245,231,219,217,210,203,204,194,194,147,57,58,38,15,10,12,
-26,86,173,212,201,184,180,153,172,200,178,144,84,44,44,56,62,69,63,49,43,36,37,45,54,71,86,88,90,85,76,83,112,118,156,196,148,85,83,123,169,212,250,255,255,255,255,255,
-255,255,254,252,225,197,196,134,75,54,27,27,54,70,64,54,55,54,48,41,27,21,21,15,9,7,5,8,7,6,3,5,6,14,21,24,30,40,83,113,148,79,55,56,68,69,48,36,
-27,23,21,19,17,19,31,99,109,94,112,134,113,83,83,91,65,59,79,95,163,201,247,255,255,255,255,224,197,189,141,90,80,104,105,94,83,84,113,149,192,241,232,211,179,192,179,153,
-127,101,78,59,41,43,49,63,61,65,97,133,143,160,179,183,160,112,177,170,146,149,189,189,233,255,255,255,255,255,255,255,255,255,255,255,255,255,255,252,247,238,222,214,211,186,95,49,
-65,63,56,51,55,65,71,129,193,247,255,255,255,255,255,160,168,187,215,233,225,227,218,217,228,211,160,101,105,119,128,161,179,191,157,143,122,113,163,189,204,221,207,215,253,253,255,252,
-242,231,217,208,204,206,204,196,192,107,29,30,10,3,5,2,38,87,135,200,213,161,127,116,139,167,204,182,129,84,59,56,71,79,68,50,50,44,42,50,57,73,93,85,82,90,72,72,
-122,118,169,167,149,137,101,108,142,187,250,255,255,255,255,255,255,255,255,240,193,189,186,126,71,50,20,29,41,47,59,52,48,52,51,34,24,26,30,28,19,7,3,5,6,8,10,12,
-10,17,26,33,31,30,61,109,139,64,45,55,68,51,31,33,31,23,22,21,19,24,49,132,158,171,182,185,144,100,93,79,54,58,92,126,165,153,212,248,255,255,255,239,186,154,114,80,
-82,90,98,92,98,113,171,182,201,246,232,211,207,212,192,158,134,142,149,84,43,50,44,47,61,50,71,93,88,128,157,123,104,97,140,157,123,101,142,160,203,255,255,255,255,255,255,255,
-255,255,255,255,255,255,253,249,247,236,229,218,205,200,173,132,127,136,98,70,77,93,133,169,214,247,255,255,255,255,253,178,212,215,222,240,242,248,219,179,185,225,217,158,123,135,127,193,
-219,208,217,210,204,224,222,193,179,196,221,227,250,254,252,249,241,231,220,214,204,210,206,198,184,102,47,13,0,2,2,0,28,111,168,186,201,169,137,112,135,169,191,205,192,119,76,72,
-80,100,80,52,44,43,43,55,63,64,73,71,79,92,82,83,99,129,142,142,185,163,114,99,130,199,248,254,255,255,255,255,255,255,252,206,168,179,191,156,85,62,31,41,52,65,97,71,
-54,49,38,28,29,35,37,30,16,9,7,6,7,10,13,14,19,23,30,30,26,33,48,116,126,71,45,48,56,47,28,30,33,29,24,24,24,37,70,114,153,197,208,185,155,134,108,77,
-56,54,68,91,113,123,179,240,255,255,255,252,194,151,128,114,92,76,76,98,132,154,186,205,213,208,182,171,217,229,184,142,183,196,172,95,47,57,49,33,49,38,43,49,54,86,94,70,
-56,66,94,108,82,79,106,143,178,227,219,234,255,255,255,255,255,255,255,255,255,254,250,250,245,238,226,210,208,215,222,205,201,164,142,126,114,165,212,232,227,239,255,255,255,252,240,242,
-189,210,232,239,250,249,173,130,146,193,201,210,199,184,180,231,233,233,240,238,239,248,234,214,204,205,213,212,234,253,252,250,241,227,218,213,207,206,204,167,120,91,41,0,0,1,2,0,
-9,79,123,147,161,163,136,113,143,184,203,199,184,162,118,95,108,105,77,54,42,42,44,54,61,61,61,58,63,75,84,87,106,151,143,155,146,111,99,135,156,198,235,242,254,255,255,255,
-255,255,247,198,180,201,205,171,95,88,83,101,112,128,150,112,73,51,33,33,36,42,36,26,17,13,9,8,10,12,16,21,26,29,34,30,29,50,69,101,84,43,42,44,41,40,37,37,
-35,35,33,29,30,43,73,120,140,168,175,141,111,92,91,97,90,91,79,97,132,142,170,236,255,255,255,249,175,170,172,147,116,100,90,115,169,183,185,198,215,184,164,203,234,211,127,130,
-247,235,144,86,82,83,62,35,34,47,45,41,45,58,76,72,54,63,78,75,69,73,95,160,184,148,155,199,252,255,255,255,254,252,253,253,253,252,252,247,235,227,226,214,213,225,227,214,
-212,194,204,199,170,215,255,255,248,247,254,255,255,247,205,217,222,218,239,239,241,246,178,107,135,148,151,205,225,213,235,246,236,241,247,246,242,250,250,242,231,224,215,206,225,247,253,249,
-241,225,212,204,205,205,204,173,93,41,28,8,0,2,3,0,8,41,71,91,97,128,143,113,116,150,182,206,224,197,151,106,107,79,66,58,48,48,52,55,55,56,52,50,54,59,76,73,
-98,157,165,150,106,101,133,165,206,208,211,239,247,252,255,255,255,255,241,221,217,210,194,137,80,108,125,126,127,133,154,116,92,55,41,40,40,38,30,26,23,16,14,10,13,20,24,28,
-30,31,36,38,47,85,112,112,79,54,43,41,40,37,40,41,40,38,37,34,36,40,56,83,108,128,125,94,66,50,52,70,106,128,116,148,179,148,139,196,255,255,252,215,193,207,165,135,
-123,116,115,128,149,175,201,210,221,199,206,234,218,148,119,163,232,194,143,102,93,83,68,30,27,40,51,55,61,68,98,94,76,94,119,99,73,78,93,135,154,141,179,210,235,254,255,255,
-252,231,229,231,228,233,245,224,198,199,206,215,229,235,229,225,228,238,248,243,233,246,255,255,255,255,255,255,255,252,199,213,242,229,240,246,239,234,179,133,148,170,160,198,238,236,253,252,
-249,250,248,247,250,254,245,192,185,201,224,227,238,247,253,249,234,218,210,208,190,187,193,126,41,15,16,13,2,5,8,8,26,30,35,69,86,95,140,135,109,125,142,183,217,180,160,136,
-107,72,72,68,57,55,61,59,59,55,47,43,44,45,45,54,108,158,129,113,134,141,158,177,208,206,222,240,236,247,255,255,255,255,239,229,234,224,194,134,87,92,104,104,109,122,134,101,
-90,58,51,40,34,31,28,29,28,21,22,17,20,24,31,34,37,38,41,59,82,116,141,149,119,82,55,41,40,37,40,42,44,43,42,37,40,42,54,75,92,102,97,70,42,30,36,48,
-72,102,137,156,158,177,162,163,201,233,255,189,197,199,150,129,100,87,93,122,130,165,199,211,213,213,234,234,196,135,150,201,217,186,154,165,148,123,76,17,24,42,57,73,100,113,122,106,
-114,143,137,101,70,76,93,128,115,148,190,187,227,246,248,248,239,226,198,180,217,217,206,199,198,196,200,222,246,245,235,233,243,247,248,249,254,255,255,255,255,255,255,255,255,255,239,239,
-247,246,250,253,246,235,213,229,215,218,214,246,250,254,250,253,253,253,253,250,254,254,241,196,205,213,221,234,241,247,246,245,228,214,206,204,179,171,153,82,33,19,21,12,8,12,17,13,
-19,20,20,37,51,100,150,139,105,114,115,121,146,135,141,170,115,71,73,71,66,56,59,63,59,51,45,43,42,44,44,43,64,88,88,85,126,158,186,225,229,222,233,229,212,240,255,255,
-255,255,250,245,247,236,183,116,101,100,114,130,155,165,139,95,80,62,55,41,31,33,29,30,30,28,28,26,27,42,50,45,57,55,66,115,142,151,154,148,130,90,50,42,43,41,43,44,
-47,50,47,41,42,55,70,76,87,90,80,64,41,30,31,42,63,90,147,153,156,198,204,173,161,211,245,172,170,176,132,95,83,79,100,115,123,165,190,221,227,234,235,193,140,111,120,187,
-220,217,215,218,205,143,61,21,29,54,77,88,144,132,137,153,168,164,141,125,92,73,94,126,146,155,170,189,175,175,163,199,210,207,180,182,205,214,194,182,178,170,183,220,241,243,238,242,
-246,247,248,253,255,255,255,255,255,255,255,255,255,255,252,250,248,248,253,254,253,252,255,255,255,252,255,255,255,255,254,254,255,255,254,255,255,252,248,235,227,232,228,234,242,242,241,235,
-222,219,207,199,182,161,143,125,72,24,24,14,12,17,49,30,10,9,3,13,68,112,119,101,69,71,69,76,114,151,151,140,95,71,73,70,66,56,56,58,57,52,48,45,44,45,49,47,
-43,50,61,70,93,158,219,222,221,220,224,220,214,201,214,241,249,242,231,246,246,219,161,123,122,134,134,168,196,212,193,91,77,61,44,34,29,31,33,31,33,36,30,34,41,57,65,64,
-73,84,97,113,153,177,172,157,125,102,58,48,48,47,48,48,49,55,52,44,48,64,61,65,97,92,82,62,40,35,36,36,41,68,102,128,176,233,224,201,205,191,198,176,177,154,91,66,
-72,80,106,120,127,164,200,226,213,222,205,155,102,64,94,189,186,146,201,218,184,114,56,28,45,82,87,92,182,186,199,217,199,143,121,115,80,82,120,140,175,199,180,190,127,94,114,154,
-162,164,172,168,176,199,183,153,135,136,180,211,229,236,241,241,248,254,255,255,255,255,255,255,255,255,255,255,255,255,255,254,248,248,254,255,255,252,253,255,255,255,255,255,255,255,255,254,
-255,255,255,255,255,254,255,250,234,231,228,231,242,241,239,232,220,218,208,196,164,105,128,142,50,15,15,13,15,27,52,59,17,15,16,20,63,93,82,90,56,54,58,61,97,132,132,126,
-98,75,80,79,64,52,57,62,65,65,56,50,45,40,40,40,37,40,54,98,121,168,226,198,200,201,206,217,215,197,212,222,239,239,234,241,238,225,171,154,122,130,150,150,179,212,179,70,
-56,36,19,20,27,33,33,33,36,35,38,50,68,79,76,72,92,133,122,102,148,189,184,162,143,128,70,54,54,52,56,58,55,57,55,50,48,50,55,71,94,90,73,45,31,29,28,24,
-23,37,58,97,160,211,220,214,217,203,187,196,178,128,82,65,55,66,80,111,136,184,219,193,178,177,184,175,130,148,143,157,172,135,167,205,203,133,77,50,72,102,91,101,158,224,226,226,
-196,126,108,100,86,114,146,149,198,214,153,144,120,85,95,118,104,102,108,93,109,135,144,135,109,111,163,200,217,226,238,242,247,255,255,255,255,255,255,255,255,255,255,255,255,255,255,253,
-247,249,253,254,254,253,252,255,255,255,255,255,255,255,255,255,255,255,255,255,253,255,255,255,252,236,231,236,233,233,235,225,217,211,208,191,108,59,121,128,34,3,7,6,12,38,64,50,
-23,34,31,28,40,55,52,65,54,42,54,52,75,91,107,140,106,71,73,73,58,55,69,84,98,93,66,58,52,42,41,38,41,64,94,142,148,175,215,180,171,161,193,225,240,242,247,246,
-249,243,238,238,217,205,183,165,108,108,158,163,178,208,182,65,19,13,8,13,29,42,44,43,49,47,52,72,116,113,83,82,125,163,160,179,203,198,175,127,106,108,73,65,59,59,65,68,
-59,56,52,50,51,59,69,73,69,70,52,31,31,21,19,13,21,38,54,92,148,176,213,215,208,214,187,183,164,127,114,90,65,84,113,135,155,150,156,144,132,160,205,232,236,240,222,218,
-220,187,162,150,161,146,97,58,68,73,82,126,133,200,207,171,144,148,158,128,150,196,205,215,212,178,150,126,100,116,101,85,90,90,94,84,82,126,134,149,128,132,162,201,211,227,236,243,
-248,253,255,255,255,255,255,255,255,255,255,255,255,253,253,250,245,242,248,252,253,255,255,255,255,255,255,255,255,255,255,255,255,255,255,254,252,250,254,254,254,245,240,241,229,222,226,218,
-207,207,201,189,115,41,95,112,51,16,8,9,13,48,62,27,20,28,44,57,41,51,56,76,71,44,50,52,62,73,80,111,111,79,75,85,78,84,84,97,123,105,69,62,59,56,56,52,
-56,91,128,154,161,175,211,162,139,146,186,221,238,234,225,239,245,241,234,235,215,200,212,198,143,134,189,199,180,185,186,125,42,17,14,21,37,61,70,62,68,72,80,101,126,119,95,104,
-129,161,186,205,214,205,140,86,71,78,79,73,62,65,70,68,63,58,54,51,61,68,63,54,41,35,28,22,23,15,9,5,3,20,45,85,135,154,186,201,183,190,213,196,151,130,134,143,
-140,148,155,158,175,151,144,129,123,157,206,231,235,208,212,228,231,215,190,171,160,172,144,75,44,50,78,104,91,122,137,163,185,210,199,143,137,163,168,162,151,155,142,108,120,170,143,92,
-92,95,94,84,99,107,105,150,142,150,186,225,231,240,246,249,253,254,255,255,255,255,255,255,255,255,255,255,254,249,235,238,236,236,248,252,254,255,255,255,255,255,255,255,255,255,255,255,
-255,255,255,255,255,253,254,255,255,252,247,243,228,205,199,208,201,199,198,185,116,21,37,51,41,29,23,14,13,29,33,37,31,29,28,41,45,64,93,83,50,49,50,55,62,56,63,83,
-109,98,99,102,90,102,102,111,112,86,68,62,62,65,61,59,68,95,143,164,177,154,182,151,143,154,190,228,225,210,210,222,232,242,238,225,224,220,218,211,186,187,208,212,184,175,183,164,
-88,57,51,48,68,94,109,85,93,101,114,141,143,128,119,122,116,119,176,201,215,194,129,86,84,77,78,70,62,63,66,68,64,59,56,54,61,62,51,42,33,23,17,14,10,7,1,0,
-0,0,12,51,105,128,150,161,150,167,196,206,177,154,156,168,176,157,142,148,158,155,154,134,115,158,218,220,197,168,179,206,222,210,196,197,186,168,155,82,33,35,50,47,50,72,91,133,
-153,154,187,189,178,160,147,118,87,125,137,115,154,191,156,154,157,134,95,84,95,94,120,142,128,160,207,238,239,248,253,254,254,254,255,255,255,255,255,255,255,255,255,255,243,217,185,193,
-211,232,240,253,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,253,252,255,255,255,250,231,210,203,176,200,197,193,194,180,109,10,10,22,41,38,28,9,5,7,13,21,
-22,19,28,40,54,75,134,108,34,36,42,51,56,47,50,69,107,129,102,91,95,97,107,100,83,75,66,64,62,59,57,61,77,114,180,183,189,162,168,160,170,169,183,200,186,205,221,218,
-225,238,235,219,226,234,222,204,205,208,204,206,201,187,165,108,108,99,87,85,98,120,139,107,106,125,141,179,171,132,113,130,139,126,169,194,208,199,156,123,92,80,80,72,62,61,63,69,
-68,61,57,54,55,58,48,41,33,23,15,10,6,6,0,0,0,0,0,26,72,101,133,132,127,153,180,168,172,182,158,133,155,146,141,139,140,144,140,133,106,130,169,164,165,172,156,178,
-200,215,196,171,183,173,133,62,26,24,34,34,30,52,59,95,134,165,183,186,170,163,148,99,66,84,114,155,162,150,172,200,161,129,100,108,118,106,130,125,132,184,215,242,245,250,254,255,
-254,254,255,255,255,255,255,254,254,246,238,247,240,200,146,156,156,185,200,236,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,254,254,247,247,255,255,250,213,190,208,178,190,
-194,190,185,177,121,12,0,3,26,34,28,12,8,3,6,7,9,13,44,61,50,79,123,116,50,36,42,48,52,49,47,69,108,146,114,91,102,119,116,83,78,83,72,68,64,54,55,66,
-83,104,176,182,192,210,184,168,191,205,189,189,190,190,220,231,239,241,238,241,233,234,210,191,205,193,180,200,214,200,154,106,128,122,133,128,127,157,158,135,136,155,175,201,184,140,127,151,
-137,168,201,201,208,207,192,147,107,86,82,75,66,68,66,69,68,58,56,54,54,52,44,40,33,26,19,13,8,6,5,0,0,0,1,15,52,95,140,142,144,160,208,176,178,200,161,140,
-156,129,140,125,106,112,127,157,163,139,126,162,153,177,178,183,206,210,217,187,171,165,73,35,24,26,27,21,13,27,50,102,148,178,185,186,162,156,112,57,61,90,130,167,148,148,173,161,
-128,114,102,95,98,97,136,142,180,227,228,239,239,248,252,253,253,254,250,252,253,253,252,249,243,235,234,239,229,211,153,130,137,142,167,212,255,255,255,255,255,255,255,255,255,255,255,255,
-255,255,255,248,243,242,238,240,253,255,247,205,171,198,164,172,187,184,184,178,148,52,5,0,2,17,21,20,17,5,6,7,6,9,27,37,24,58,82,83,55,41,45,49,58,61,62,84,
-125,164,149,119,111,128,112,78,78,73,71,66,61,55,56,72,94,118,165,163,165,217,178,193,211,221,189,194,196,186,225,233,245,253,248,245,241,234,179,176,192,133,114,158,176,176,148,136,
-148,137,153,147,163,182,175,132,120,155,200,204,184,161,144,143,129,164,187,198,184,183,179,176,153,95,92,90,83,79,68,65,61,55,56,56,55,49,42,37,34,29,22,15,12,9,7,6,
-3,0,2,15,49,92,125,162,162,173,201,208,210,171,141,156,173,149,119,114,87,94,158,190,182,139,141,185,157,206,221,215,220,219,218,210,190,128,47,34,28,27,19,14,10,33,66,111,
-137,144,151,168,155,140,88,44,58,93,160,156,153,133,121,122,167,150,111,125,129,139,187,186,193,178,169,199,214,235,234,248,249,234,221,236,240,239,245,238,232,233,224,201,200,199,164,121,
-170,153,160,184,235,255,255,255,255,255,254,255,255,255,255,255,255,255,253,240,228,227,242,250,247,240,233,190,156,176,162,151,178,186,182,170,133,85,40,17,3,13,20,20,10,1,3,5,
-5,8,12,14,19,36,52,56,56,41,47,64,79,79,85,109,155,192,182,126,94,92,97,87,73,68,65,58,54,54,57,73,90,114,135,130,164,197,177,226,235,233,197,218,235,211,220,240,
-253,254,250,249,236,199,158,164,149,94,92,111,141,168,164,135,134,146,182,192,194,178,162,120,107,133,187,205,189,182,193,192,178,151,148,161,160,163,179,198,177,127,111,112,98,70,59,61,
-55,54,56,54,49,45,40,37,33,28,22,19,15,13,9,9,7,3,3,16,52,94,111,183,204,211,198,214,214,168,148,149,173,193,156,116,82,91,160,169,192,163,179,236,205,198,221,246,
-250,242,239,203,118,68,38,36,41,38,37,29,33,68,70,93,128,151,156,168,168,106,64,54,61,75,114,101,109,104,126,114,151,169,137,149,140,143,171,142,104,64,70,132,177,169,158,201,
-219,208,177,198,207,217,211,218,228,234,225,204,197,198,186,169,170,168,147,172,198,227,247,255,255,242,231,255,255,255,255,255,255,255,252,232,213,226,238,241,225,200,196,165,140,141,132,141,
-178,184,178,160,101,80,61,40,15,12,15,16,10,1,1,5,5,7,9,10,19,40,41,33,41,47,71,87,88,85,105,132,178,207,170,94,78,75,87,87,72,72,59,48,47,49,51,58,
-59,76,94,98,142,175,189,232,241,250,255,253,235,199,219,248,255,255,255,255,242,213,200,199,168,149,126,140,191,189,160,142,150,171,207,203,191,185,168,130,112,114,164,212,213,205,212,219,
-162,114,141,184,167,160,175,172,172,151,137,106,72,51,50,51,50,51,50,48,43,40,38,36,33,29,26,22,19,15,14,12,10,8,8,20,58,88,118,170,193,199,206,226,218,197,177,127,
-90,139,155,109,71,65,91,133,231,255,253,238,193,186,233,249,255,255,253,213,140,85,80,115,134,112,65,49,62,73,49,86,155,154,116,134,165,144,97,87,85,75,68,79,90,87,73,86,
-102,135,137,105,119,97,75,52,27,26,49,85,107,91,101,143,163,162,153,170,172,192,187,182,204,221,221,219,212,225,210,180,154,161,146,160,176,208,225,229,217,179,211,255,255,255,255,255,
-253,231,207,191,192,198,194,201,203,170,172,182,158,141,130,142,183,185,176,162,123,116,90,58,48,21,14,22,21,6,1,5,6,6,7,9,12,30,33,28,30,44,77,99,98,92,100,127,
-162,187,164,88,86,83,84,82,70,65,51,44,41,43,40,35,34,36,43,63,100,149,213,229,227,241,255,255,250,248,254,255,255,255,255,255,247,235,238,238,232,212,194,205,227,210,190,201,
-201,190,212,210,187,163,153,134,116,122,156,210,206,204,219,213,148,155,193,186,121,156,164,155,164,164,128,78,47,40,41,43,45,47,43,41,38,35,33,33,31,29,29,24,23,21,19,19,
-15,14,15,22,45,66,107,151,175,141,184,208,194,143,118,99,64,83,86,65,50,45,50,99,212,255,255,250,245,252,255,255,255,255,253,246,199,168,178,218,206,187,153,142,107,62,102,163,
-169,134,116,163,147,125,114,116,98,71,49,70,77,77,66,71,86,95,77,80,105,84,40,28,23,27,38,73,101,101,113,134,136,142,158,162,165,178,179,171,184,201,218,219,221,224,196,169,
-171,148,132,135,156,168,167,149,122,125,167,241,255,255,255,255,248,226,200,168,168,146,140,175,206,205,193,201,172,156,161,156,173,180,165,154,140,127,108,78,75,70,48,45,40,19,9,7,
-5,6,7,8,12,19,27,33,31,43,71,91,88,80,86,102,137,144,161,119,91,88,84,73,71,59,45,35,30,29,27,28,27,24,28,57,77,130,207,226,214,248,255,255,255,255,255,255,
-255,255,255,255,253,250,254,236,234,206,208,231,228,215,203,205,193,190,196,205,190,130,123,155,157,170,165,197,214,208,229,217,175,194,193,154,121,161,169,153,156,148,99,71,48,40,36,36,
-37,40,38,35,34,30,30,29,29,33,31,30,28,30,28,24,22,20,26,31,44,59,79,115,130,101,112,137,141,95,72,62,56,59,51,40,38,57,56,82,226,255,255,255,255,255,255,255,
-255,255,255,254,240,253,217,213,186,155,199,204,178,155,178,190,157,123,129,172,149,113,126,127,84,49,36,45,59,76,75,73,90,79,82,100,90,52,27,22,28,37,56,90,130,153,163,182,
-190,178,165,154,171,193,183,192,219,220,221,221,220,214,204,198,155,107,84,79,83,85,90,78,92,133,142,179,214,253,255,254,248,245,205,165,157,142,153,179,211,236,225,210,190,178,186,168,
-154,161,148,142,129,115,106,90,76,78,82,72,61,49,27,15,8,8,12,13,13,20,34,44,40,48,66,58,54,68,61,71,108,106,115,86,62,72,72,79,79,59,45,31,23,19,19,22,
-20,16,15,29,49,94,153,197,233,253,255,255,255,255,255,255,255,255,255,255,255,255,255,239,200,194,200,233,207,187,203,198,184,193,180,179,164,140,134,165,171,185,179,204,228,231,236,227,
-231,217,197,156,160,163,170,136,99,80,78,58,48,48,40,34,33,33,35,31,27,27,26,27,30,35,36,33,34,36,34,29,28,27,33,36,50,56,47,57,66,70,54,70,70,66,54,48,
-45,42,37,34,41,82,127,177,248,255,255,255,255,255,255,255,255,255,255,255,255,255,246,179,157,147,213,201,167,173,191,192,171,151,164,182,190,171,133,109,64,28,20,26,38,56,57,71,
-79,77,91,94,62,34,27,26,34,52,78,104,137,175,197,227,225,197,185,178,190,205,219,225,226,208,187,197,210,211,214,194,129,98,69,43,34,36,33,45,90,128,132,121,182,254,255,253,
-248,246,224,203,191,185,180,172,200,228,232,218,192,196,194,192,178,139,126,135,121,101,86,82,95,114,142,139,112,78,49,24,16,14,16,14,15,26,43,50,45,50,54,38,49,55,36,40,
-57,59,41,30,44,59,65,75,80,59,36,28,22,19,19,19,16,12,8,16,31,95,143,171,219,255,255,255,255,252,254,255,255,255,255,255,255,255,252,252,211,184,196,199,189,189,208,208,
-196,186,157,143,163,163,142,144,168,179,193,218,229,227,231,235,240,226,183,190,201,157,158,123,88,63,58,49,47,50,44,34,28,28,27,27,24,23,23,24,29,33,36,35,35,36,37,34,
-31,33,34,37,38,40,40,40,38,38,40,42,51,51,41,42,37,36,41,34,40,83,153,226,255,255,255,255,255,255,255,255,255,255,255,255,255,248,252,213,169,169,173,157,120,99,164,206,
-213,194,196,167,146,128,93,62,31,13,9,13,23,43,59,68,61,58,64,58,42,26,19,26,40,56,78,102,133,173,225,254,242,222,221,217,231,234,234,234,214,187,164,162,182,186,187,167,
-143,114,85,48,27,19,14,31,70,119,129,129,227,255,255,254,248,245,231,214,220,221,191,186,214,217,213,196,199,205,206,201,184,147,119,125,112,87,76,77,121,185,203,197,171,99,61,38,
-23,23,21,17,22,30,41,51,52,49,36,28,40,31,22,23,30,28,23,23,31,41,49,55,65,57,30,26,23,22,20,17,14,9,7,17,36,65,87,136,201,241,246,243,228,243,253,255,
-255,255,255,255,255,255,255,255,220,197,161,121,141,189,213,194,179,171,164,169,168,167,137,140,173,175,177,208,227,226,236,238,239,228,187,205,204,182,139,95,86,62,56,54,40,38,38,30,
-21,19,19,20,21,19,22,27,26,28,34,36,37,40,38,37,31,29,34,36,36,36,38,38,38,37,36,38,43,44,40,38,37,38,45,43,43,64,112,192,247,247,248,248,253,255,255,255,
-255,255,255,255,255,254,255,229,187,154,84,64,56,61,79,94,196,211,206,141,70,51,55,42,23,7,5,8,19,41,70,62,43,38,33,29,29,21,19,33,43,56,85,114,148,192,247,255,
-255,249,253,252,253,255,250,253,242,233,219,189,205,211,190,173,180,151,116,70,37,30,22,30,58,112,126,130,204,242,249,241,234,250,242,217,206,228,220,190,183,183,201,169,198,196,186,192,
-177,136,116,102,88,76,72,83,150,199,227,224,191,144,100,77,47,33,29,24,27,34,41,45,54,38,22,19,14,14,15,16,17,17,20,23,28,31,34,41,50,49,33,27,24,23,22,19,
-12,10,6,10,23,33,51,107,147,186,203,219,221,252,255,255,255,255,255,255,255,255,255,255,199,125,105,88,111,193,227,204,175,171,205,192,158,129,106,151,204,219,220,235,239,238,240,236,
-243,233,207,198,187,173,114,92,80,65,62,50,33,24,29,24,14,12,14,17,16,15,21,26,28,30,34,35,38,42,41,38,35,33,33,35,36,36,37,37,38,36,37,37,38,37,37,37,
-38,41,42,48,54,58,82,126,179,198,220,236,252,255,255,255,255,255,255,255,255,255,255,218,115,95,69,50,51,54,88,97,144,178,183,146,80,83,69,37,19,10,5,7,15,26,45,44,
-28,26,23,20,27,26,28,44,57,76,102,133,171,221,255,255,255,255,255,255,253,255,255,255,255,255,254,247,253,255,232,206,199,171,132,82,51,47,40,42,54,87,137,142,167,210,240,234,
-247,252,212,196,218,236,247,232,221,228,229,177,190,182,170,185,172,126,97,80,68,68,66,94,190,204,240,253,234,201,169,129,83,50,37,33,35,40,40,38,42,30,17,19,12,8,12,13,
-14,15,20,22,23,27,30,37,42,41,33,27,26,23,22,19,15,14,7,5,10,19,36,65,85,119,143,189,243,255,255,255,255,255,255,255,255,255,255,255,185,107,104,100,113,190,249,245,
-218,200,218,218,175,105,99,151,225,252,255,255,252,250,247,243,225,211,213,205,201,208,182,133,109,82,57,34,28,33,36,20,7,8,10,10,13,16,20,28,30,35,35,36,42,45,44,43,
-40,35,35,34,33,35,33,35,35,35,35,36,36,36,37,37,37,35,41,47,55,56,65,82,113,139,177,234,255,255,255,255,255,255,255,255,255,255,255,206,99,78,76,78,71,63,72,94,
-102,127,139,115,104,104,72,34,21,17,10,5,10,16,23,22,17,15,13,19,35,44,48,63,80,104,128,160,189,238,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,239,
-217,186,161,120,84,58,57,76,82,112,157,169,182,207,241,252,255,238,201,201,221,245,250,248,249,255,240,208,203,196,182,178,161,123,92,73,66,66,69,109,196,219,255,255,250,229,199,156,
-90,54,37,36,38,40,36,33,29,26,19,21,21,16,13,13,15,16,17,20,22,23,29,34,43,37,29,31,29,24,22,22,21,16,8,6,6,9,16,33,47,56,83,148,221,255,255,255,
-255,255,255,255,255,255,255,255,232,136,114,127,170,214,250,249,183,190,210,208,205,134,116,178,235,255,255,255,255,255,250,235,233,183,198,218,175,201,200,126,111,82,37,22,26,35,26,8,
-0,1,3,6,8,15,22,29,35,38,38,42,45,44,47,45,40,36,36,34,33,34,31,33,33,33,33,33,34,34,35,37,35,31,33,35,38,38,47,56,63,76,135,204,254,255,255,255,
-255,255,255,255,255,255,255,245,125,70,77,95,84,68,62,83,88,75,84,95,94,73,56,30,22,20,10,6,6,8,9,8,8,6,5,21,47,58,78,99,116,140,163,194,222,253,255,255,
-255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,247,206,173,169,143,98,45,68,80,80,105,133,144,169,187,245,255,239,190,190,218,236,239,248,246,245,228,227,217,204,186,165,167,
-148,120,101,84,73,64,62,87,106,136,238,255,255,245,207,150,69,40,31,33,33,34,31,29,26,24,22,20,20,17,13,14,16,16,16,20,26,26,31,35,54,63,49,35,34,28,26,20,
-20,16,12,8,6,8,10,20,26,40,58,98,158,200,250,255,255,255,255,255,255,255,255,250,219,198,176,175,212,246,252,246,192,191,191,176,163,128,144,218,239,242,255,255,255,255,254,224,
-198,156,201,231,173,192,163,90,87,50,19,15,20,21,7,1,0,0,0,1,6,15,23,30,35,38,40,44,45,45,45,45,40,38,35,36,31,31,30,30,29,31,31,31,31,29,27,29,
-28,27,21,21,30,33,40,45,50,68,97,154,197,242,255,255,255,255,255,255,255,255,252,182,175,156,123,104,77,72,66,79,97,108,104,88,78,58,41,23,16,15,12,7,3,2,1,0,
-1,2,7,21,41,57,108,147,169,192,212,235,253,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,247,179,119,116,115,107,72,70,58,52,73,119,112,126,153,200,197,
-180,171,169,198,247,241,241,234,219,171,146,157,168,155,150,167,150,120,95,87,76,65,59,59,59,82,135,172,242,243,161,97,50,36,30,30,31,31,33,28,26,23,22,17,15,13,13,14,
-15,19,23,26,29,36,48,50,64,78,57,35,37,34,24,24,23,22,16,12,10,14,14,24,31,38,48,77,111,151,218,249,255,255,255,255,255,255,255,253,241,206,206,234,234,248,250,253,
-224,184,177,170,150,125,178,241,229,221,253,255,255,255,255,245,201,175,220,236,192,204,140,55,37,22,19,17,17,14,7,1,0,0,0,2,7,15,21,28,35,40,41,43,44,44,43,41,
-36,37,34,34,30,29,29,28,27,28,28,30,30,27,23,23,23,22,20,19,27,37,45,55,52,66,95,130,156,208,247,255,255,255,255,255,255,255,254,218,173,169,158,109,73,78,65,54,
-75,118,102,72,75,56,22,15,15,12,8,6,1,0,2,1,2,5,12,21,31,47,91,162,224,238,254,255,255,254,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,248,
-217,142,114,118,118,118,68,49,66,77,100,100,114,140,153,164,215,245,240,247,255,252,235,212,153,112,83,92,120,133,148,160,149,112,91,91,79,68,59,57,57,61,84,108,176,186,106,64,
-44,31,28,30,28,29,29,28,27,26,22,14,10,8,10,13,17,16,24,34,36,41,55,64,71,71,48,35,40,44,35,31,26,22,16,12,9,12,14,23,28,29,40,68,102,156,215,236,
-250,255,255,255,255,255,255,255,255,238,205,234,241,248,250,253,249,231,208,184,130,154,211,240,233,245,254,255,255,255,255,255,246,252,249,247,239,205,99,48,31,26,26,22,21,13,8,3,
-0,0,0,2,8,15,20,28,35,41,42,42,43,44,41,37,36,37,34,31,29,29,29,29,27,26,27,27,26,26,23,17,16,19,16,14,23,36,54,55,43,61,86,125,160,210,236,249,
-255,255,255,255,255,254,255,255,233,190,120,76,59,78,62,50,72,93,82,66,59,47,22,26,24,22,14,8,2,2,8,8,6,10,20,28,35,49,78,144,169,198,255,252,218,220,255,255,
-255,255,255,255,255,255,255,255,255,254,255,255,255,231,214,245,231,180,125,106,85,95,59,47,51,57,78,86,97,129,144,164,220,255,249,229,220,196,176,155,101,86,76,66,92,122,144,137,
-107,88,86,88,82,69,61,55,55,58,68,86,109,93,84,63,42,30,26,24,22,23,21,24,26,23,15,9,7,6,6,10,19,19,27,49,55,48,52,71,71,57,43,36,42,50,54,43,
-23,16,12,7,5,6,9,17,21,16,33,63,83,137,228,215,235,255,255,255,255,255,255,255,255,242,189,245,249,240,241,245,235,247,232,179,151,177,210,225,238,254,255,255,255,255,255,254,
-253,254,252,249,254,168,73,58,40,36,30,24,22,17,9,3,0,0,0,3,12,16,22,31,37,42,43,42,43,44,42,40,36,35,34,33,30,29,28,28,27,23,22,23,22,20,17,14,
-14,13,9,13,19,36,59,54,31,49,79,104,141,217,226,228,255,255,255,255,254,252,255,255,255,155,87,44,68,97,63,69,107,99,64,61,73,50,34,41,28,27,21,14,9,17,16,13,
-15,22,28,41,49,59,98,132,116,133,173,194,183,220,255,255,255,255,255,255,255,255,255,255,255,254,254,226,206,170,130,189,133,136,119,108,82,62,54,42,28,30,50,75,97,128,158,165,
-210,243,192,163,153,114,114,91,70,71,52,64,82,99,144,126,84,80,80,84,82,70,61,54,51,54,59,70,75,70,65,51,37,28,19,16,17,17,16,19,24,20,13,7,3,3,1,7,
-21,41,52,72,97,93,64,71,59,48,42,36,43,64,77,56,30,21,15,12,9,6,7,12,13,13,27,62,63,104,191,217,229,255,255,255,255,255,255,255,255,218,198,253,250,239,225,213,
-211,226,233,178,168,190,203,231,243,255,255,255,255,255,255,255,255,253,252,252,236,168,111,73,47,43,33,24,22,17,9,1,1,0,2,7,16,21,28,33,40,43,43,42,43,42,41,40,
-37,37,33,29,28,26,24,26,24,21,20,20,16,12,9,8,9,7,7,6,13,36,52,47,33,49,83,92,115,179,218,221,253,255,254,255,255,255,255,255,232,109,55,47,83,123,134,148,
-165,133,90,73,66,35,33,43,33,28,29,24,35,42,31,24,26,36,47,54,57,59,88,120,113,108,115,182,205,234,255,255,255,255,255,255,255,255,255,255,255,255,253,213,183,178,140,115,
-139,130,139,115,83,48,37,26,20,30,47,65,80,87,128,173,185,184,153,137,132,135,139,123,101,85,58,70,71,97,134,120,95,86,94,97,88,73,61,54,52,52,58,66,64,56,44,35,
-29,22,16,15,17,17,16,19,20,17,13,7,3,3,5,13,23,43,64,68,95,112,77,59,45,41,38,38,54,82,84,62,49,52,41,33,23,14,8,8,12,15,24,48,52,84,151,208,
-231,248,249,252,255,255,255,255,255,235,212,253,208,189,211,184,212,228,231,194,169,186,233,250,252,255,255,255,255,255,255,255,255,253,254,254,246,182,106,82,63,58,38,29,27,20,13,6,
-2,5,7,9,20,27,33,37,40,43,41,38,41,43,42,36,34,33,29,26,24,21,22,22,22,20,15,13,8,5,5,3,3,3,1,1,9,26,40,42,41,54,78,91,112,157,203,220,
-236,238,236,255,255,255,255,255,254,155,42,54,68,95,140,169,169,147,127,107,68,45,31,38,34,31,36,45,73,66,47,37,37,50,80,78,62,62,88,116,122,108,126,169,198,205,241,252,
-255,255,255,255,255,255,255,255,253,253,255,236,192,169,156,157,177,172,169,141,97,57,40,16,14,26,45,55,34,30,70,114,118,109,100,114,129,142,140,151,127,77,61,70,75,114,134,164,
-144,122,114,102,85,72,64,57,52,55,57,56,55,48,37,28,22,19,17,17,16,17,17,15,15,16,14,10,8,7,8,17,30,40,52,65,73,86,75,50,42,42,44,55,73,88,95,108,
-125,115,82,56,42,31,22,14,15,21,24,40,65,109,140,183,219,238,254,255,255,255,255,255,255,246,245,255,203,164,189,205,243,247,238,232,224,204,241,255,255,255,255,255,255,255,255,255,
-254,255,255,255,250,183,129,116,101,55,35,38,35,22,17,14,8,7,10,14,23,31,40,42,44,44,41,38,37,38,38,34,31,26,22,20,16,17,21,21,19,13,10,6,0,0,0,0,
-0,0,0,0,7,19,27,37,47,59,79,106,143,165,193,219,221,234,239,253,255,255,255,255,254,186,93,69,68,76,100,132,126,101,83,82,87,84,79,70,69,92,84,85,87,61,54,51,
-50,69,97,95,97,99,119,143,144,125,161,194,200,194,215,248,255,255,255,255,255,255,255,255,246,247,242,217,207,211,208,198,180,191,175,155,118,79,52,28,20,22,33,20,16,26,47,55,
-42,38,44,84,115,118,128,120,88,54,56,70,95,160,172,190,180,149,115,101,84,73,65,57,52,55,55,52,49,41,35,29,23,20,16,16,17,16,15,15,13,12,13,13,10,7,7,13,
-27,30,40,62,71,66,62,55,51,48,57,75,83,106,163,201,206,161,127,105,65,51,43,33,26,30,33,57,105,136,161,186,199,246,255,255,255,255,255,255,255,255,255,254,213,167,228,252,
-253,246,248,253,250,239,250,255,255,255,255,255,255,255,255,255,254,254,254,253,236,186,175,170,79,37,38,42,34,24,21,17,14,14,16,20,28,37,43,47,50,47,44,41,35,36,36,33,
-29,23,20,16,10,12,14,16,14,10,7,3,0,0,0,0,0,0,0,2,9,23,35,45,56,70,99,147,171,184,207,221,218,218,226,236,241,241,252,254,235,192,161,115,70,51,62,83,
-80,61,45,48,63,94,125,112,128,162,126,97,90,76,69,75,76,76,82,120,150,149,150,171,172,169,198,233,238,238,234,253,255,255,255,255,255,255,255,253,246,241,235,219,233,235,224,199,
-184,183,168,134,95,69,65,49,17,13,10,0,7,16,16,22,14,12,30,62,86,95,105,82,54,37,45,65,102,183,194,197,191,155,136,128,105,84,71,62,55,52,52,51,48,41,35,31,
-27,21,19,20,20,16,15,14,12,10,9,8,6,0,1,10,19,19,26,44,62,61,52,47,61,59,58,75,73,94,164,171,168,146,142,184,165,137,91,55,47,49,57,70,95,130,165,211,
-234,250,255,255,255,246,242,246,254,250,231,222,197,221,255,252,224,239,254,253,254,255,255,255,255,255,255,255,255,255,255,255,255,253,253,247,242,173,128,136,62,42,43,41,30,26,23,20,
-17,19,19,23,31,42,48,51,52,51,47,44,42,37,36,34,31,26,20,16,9,9,9,12,13,13,8,1,0,0,0,0,0,0,5,13,27,41,49,57,68,79,111,149,171,196,222,217,
-200,193,207,215,213,219,240,242,247,208,155,142,80,31,38,57,58,43,37,44,57,76,105,132,155,143,162,157,133,106,95,87,90,97,119,151,205,214,194,186,212,236,246,255,255,253,239,248,
-255,255,255,255,255,255,255,252,250,248,246,245,242,222,204,187,203,198,173,153,102,69,72,56,23,15,7,0,0,0,1,16,12,5,22,38,57,77,77,52,38,26,33,54,121,185,196,183,
-176,171,158,167,158,127,106,82,66,63,58,59,56,45,38,35,28,22,21,21,21,20,19,16,15,14,9,8,5,2,1,10,16,19,27,41,51,58,55,45,54,78,93,77,66,66,83,100,
-139,178,167,163,224,247,198,108,100,88,94,91,106,120,153,203,236,253,255,255,235,219,222,234,248,236,192,182,182,243,255,236,232,250,255,255,255,255,255,255,255,255,255,255,255,255,254,254,
-253,253,255,240,190,109,64,56,57,48,40,40,33,30,24,23,24,24,27,30,37,47,55,56,54,50,49,49,47,43,37,36,33,27,21,15,12,9,8,10,12,10,2,0,0,0,0,0,
-0,6,16,26,38,42,52,68,83,107,139,171,190,201,204,191,180,180,186,175,186,196,212,226,238,172,121,129,79,30,40,57,64,58,52,51,64,84,108,151,170,153,187,205,185,163,143,106,
-105,130,196,229,245,246,236,234,250,254,255,255,255,255,253,254,239,238,252,255,255,255,255,254,253,253,249,248,234,200,180,184,214,197,179,183,113,64,71,48,21,14,10,2,0,0,2,15,
-16,20,29,36,55,70,64,41,33,26,27,61,134,182,198,194,194,193,176,201,218,192,153,120,90,76,72,78,66,52,45,37,31,24,22,24,23,22,21,19,15,15,14,9,6,5,5,6,
-12,21,37,62,77,77,63,55,54,79,147,99,70,61,79,116,171,189,194,222,227,233,255,210,204,142,111,126,151,116,139,171,213,226,206,220,191,179,199,192,213,236,210,177,186,224,240,233,
-241,252,255,255,255,255,255,255,255,255,255,255,255,255,255,254,253,253,219,134,80,56,43,43,48,55,55,44,38,36,33,31,29,29,30,38,44,51,58,57,56,49,50,50,48,45,42,37,
-33,29,23,17,14,12,12,13,10,6,0,0,0,0,0,0,0,8,16,16,26,37,54,70,100,147,191,183,171,196,194,164,153,154,154,125,151,189,199,225,241,191,135,104,64,51,63,82,
-88,73,68,68,84,98,121,153,157,173,228,234,206,218,199,176,177,185,242,255,254,255,254,255,255,255,255,255,255,255,254,238,201,203,234,248,255,255,254,254,254,253,249,248,219,179,194,210,
-213,183,167,189,155,84,57,44,28,17,13,8,3,17,37,37,37,47,48,49,59,58,52,36,24,24,33,77,147,212,232,228,221,220,214,229,232,210,165,151,130,107,106,106,76,58,50,42,
-36,28,27,28,27,24,24,22,19,17,14,12,7,3,3,7,10,19,30,50,75,82,52,47,43,42,172,144,76,87,139,154,218,197,221,255,254,205,215,231,234,163,142,151,156,126,177,199,
-187,158,135,135,125,155,186,163,199,226,201,187,176,185,203,205,222,255,255,245,254,255,255,255,255,255,255,255,255,255,255,254,255,241,139,78,64,58,47,41,45,65,58,50,44,42,45,47,
-42,37,40,50,54,56,61,59,55,45,43,45,45,43,42,41,36,33,26,22,20,17,19,17,10,0,0,0,0,0,0,0,0,5,8,10,20,29,43,68,102,141,170,140,139,167,172,135,
-139,155,155,129,169,212,207,217,234,227,172,115,88,85,85,100,94,77,73,79,97,113,135,151,149,173,219,232,227,233,232,228,227,221,248,254,255,255,255,254,255,255,254,254,254,254,245,231,
-229,238,245,249,255,255,254,254,254,254,253,245,212,203,225,224,221,192,170,204,186,130,94,64,42,17,13,19,23,31,62,72,56,63,64,65,58,34,33,28,26,29,57,115,162,210,215,214,
-200,194,211,227,215,187,162,173,184,163,153,127,90,73,62,50,43,36,31,31,31,31,29,26,23,22,15,12,9,7,5,8,13,16,20,30,62,76,49,41,34,23,92,175,139,164,231,196,
-167,167,206,250,255,200,194,201,240,199,183,165,142,158,219,219,184,151,150,126,119,160,182,164,183,192,171,162,163,183,204,189,179,210,186,179,253,255,255,255,255,255,255,255,255,255,255,255,
-255,243,157,91,80,77,55,41,44,55,45,51,50,51,47,45,65,61,62,66,58,64,68,61,54,44,41,41,44,45,42,40,35,31,28,24,22,21,20,16,8,0,0,0,0,0,0,0,
-0,0,6,13,19,26,36,59,105,143,140,130,177,157,136,147,157,164,173,180,207,222,214,204,208,210,178,133,116,97,85,91,80,99,107,98,123,143,162,161,162,194,213,227,238,240,250,248,
-239,241,250,253,253,254,253,252,253,254,248,250,250,249,234,242,255,255,255,255,255,255,255,255,255,255,254,254,241,228,227,232,226,218,204,207,208,186,132,76,61,38,34,51,55,37,69,88,
-73,73,70,66,58,42,34,24,30,38,69,118,153,172,190,183,189,189,192,206,194,172,165,189,193,186,164,127,108,98,78,59,48,42,37,37,38,38,33,30,26,24,21,16,15,13,12,14,
-14,15,20,23,44,56,35,30,29,36,88,157,189,220,249,236,163,175,203,232,247,255,254,211,191,182,191,190,165,193,239,220,189,156,134,115,114,143,149,144,160,170,155,153,167,184,194,196,
-146,132,128,164,214,245,250,254,255,255,255,255,255,255,255,255,250,211,147,109,101,88,64,54,56,54,45,42,50,58,58,55,92,94,93,73,54,69,76,59,44,47,42,38,41,42,38,37,
-35,34,30,23,20,19,17,13,5,0,0,0,0,0,0,0,0,0,3,13,22,29,36,55,113,158,154,162,169,128,160,186,186,171,187,210,211,208,214,200,193,150,120,106,92,80,80,85,
-119,150,147,142,134,163,186,205,208,219,218,226,241,248,254,255,254,250,253,252,248,241,233,240,241,239,243,246,246,240,229,247,255,255,253,255,255,255,255,255,255,255,255,255,253,247,240,233,
-231,226,218,191,185,168,120,69,66,62,66,77,69,59,94,92,71,70,64,63,59,49,41,28,27,40,55,85,129,144,167,194,206,208,213,210,199,193,200,214,207,201,170,127,114,101,75,62,
-55,45,43,43,44,44,42,38,35,35,30,27,26,22,19,20,17,20,20,19,24,28,17,12,19,44,84,93,97,148,190,222,146,160,186,163,212,254,229,148,126,127,183,214,198,184,160,146,
-141,113,82,83,94,132,155,125,167,198,146,160,179,196,185,196,137,146,150,175,173,192,219,245,255,255,255,255,255,255,255,255,198,146,147,148,143,119,88,80,70,88,88,59,61,65,66,70,
-84,123,114,62,72,84,70,57,43,43,40,37,37,36,38,40,36,35,30,22,19,16,13,8,3,1,0,0,0,0,0,0,0,0,3,13,23,31,34,48,87,144,182,199,164,165,187,198,
-183,168,198,206,185,192,212,211,183,123,101,83,61,70,84,100,126,129,144,139,127,155,207,231,238,234,226,227,239,250,255,255,255,254,252,249,246,233,219,212,185,179,196,194,219,239,238,250,
-254,254,252,254,254,255,255,254,255,255,255,255,255,254,250,238,242,233,215,153,149,153,132,92,65,54,63,83,87,77,87,80,52,51,50,57,50,38,35,31,35,40,51,66,105,130,154,217,
-214,193,191,189,199,212,215,220,218,190,139,135,127,92,75,64,55,50,48,49,51,51,52,51,48,45,41,38,36,33,26,24,23,22,20,16,13,9,6,7,14,20,33,57,69,84,107,149,
-113,134,169,129,157,220,222,155,123,115,147,182,169,171,135,119,102,77,64,71,78,109,134,122,185,215,142,142,142,143,140,113,123,142,135,158,149,167,233,254,255,255,255,255,255,255,255,255,
-184,130,160,185,172,147,111,95,91,135,142,106,73,73,77,72,95,134,143,93,87,72,58,55,44,40,35,40,40,34,36,41,35,33,27,20,16,13,9,5,3,0,0,0,0,0,0,0,
-0,0,2,13,21,28,30,36,57,76,130,224,227,196,187,197,175,151,196,168,120,143,180,180,163,118,101,76,58,62,91,126,132,153,182,180,191,208,241,250,252,246,235,231,240,252,253,254,
-254,250,249,248,240,241,228,193,148,137,151,151,161,213,236,236,242,241,246,252,254,253,254,253,252,254,254,254,254,255,254,253,242,236,225,173,161,155,130,101,61,65,99,99,72,79,66,62,
-31,30,40,44,41,34,28,26,28,28,40,55,86,107,127,175,184,144,123,135,162,201,206,192,211,189,149,161,142,105,86,68,58,54,54,54,56,56,57,58,57,54,48,43,41,36,30,28,
-24,21,16,10,6,1,0,5,10,15,21,44,65,73,100,122,108,121,115,104,127,156,179,156,123,123,137,147,154,171,147,102,83,75,68,73,80,99,102,101,168,227,151,149,135,100,102,77,
-93,100,104,122,132,201,255,255,255,255,255,255,255,255,255,255,224,155,171,184,169,162,120,101,120,141,153,116,73,73,78,79,113,147,163,126,75,71,61,57,51,44,43,42,38,34,38,37,
-34,27,23,20,17,17,10,5,2,0,0,0,0,0,0,0,0,0,6,14,21,28,29,33,48,90,136,194,201,187,200,198,161,150,169,114,85,99,129,156,161,122,106,105,104,109,135,168,
-182,194,201,212,235,253,255,255,255,253,246,246,243,247,252,255,246,235,243,243,228,210,162,153,132,101,106,119,158,207,226,173,189,179,192,228,249,252,252,252,248,248,252,250,253,255,255,252,
-243,231,229,212,171,143,120,114,116,120,120,94,31,62,91,76,38,24,35,36,36,29,22,13,9,12,23,37,62,95,121,122,121,120,106,134,163,179,198,194,210,185,165,165,121,107,85,71,
-65,62,57,57,56,57,59,61,61,55,49,42,40,35,29,26,23,17,14,7,1,0,0,3,8,12,19,30,47,73,92,118,119,108,85,87,95,109,127,128,121,136,137,144,171,155,111,88,
-85,75,71,79,87,105,132,133,167,211,158,172,140,91,77,73,76,66,83,123,160,222,255,255,255,255,255,255,255,255,255,255,245,168,170,185,175,169,126,111,128,118,135,101,75,72,83,79,
-106,130,133,118,78,72,62,62,52,45,43,40,41,37,41,34,30,28,24,22,29,29,10,3,0,0,0,0,0,0,0,0,1,3,12,21,28,33,34,36,56,105,148,177,191,215,224,201,
-187,193,148,80,70,95,168,189,167,146,136,153,158,169,184,199,203,218,232,240,250,255,255,255,255,254,246,221,204,222,243,252,242,229,224,210,193,184,156,120,109,88,87,141,197,193,171,146,
-192,170,199,225,240,249,249,249,247,245,229,221,243,250,252,250,239,219,191,149,120,121,136,141,150,164,106,47,35,58,87,77,57,44,40,35,33,28,20,8,5,8,19,34,61,104,132,115,
-105,104,122,158,183,192,199,205,211,198,193,179,127,102,90,78,73,72,61,56,56,59,62,62,59,54,45,38,34,28,27,22,17,14,12,6,3,0,0,0,2,9,16,27,41,63,90,101,
-91,75,72,82,92,101,111,111,105,109,127,156,178,144,105,93,97,95,94,102,120,130,169,187,228,222,213,190,118,80,64,63,62,61,87,130,185,245,255,255,255,255,255,255,255,254,245,253,
-222,175,171,192,194,183,128,114,109,100,125,101,62,69,78,86,94,87,104,132,109,72,65,55,42,35,43,57,61,48,41,31,27,31,29,27,31,27,9,2,0,0,0,0,0,0,0,3,
-7,13,23,28,34,37,41,41,64,108,125,141,193,236,205,173,208,210,165,94,80,115,190,208,197,190,178,180,186,194,213,225,234,246,252,254,255,255,255,255,255,249,222,175,190,232,242,236,
-232,227,198,177,155,161,189,165,119,85,79,147,172,189,182,169,235,217,200,220,242,254,253,250,248,213,173,177,224,242,242,246,234,221,184,111,107,153,164,125,120,154,146,92,79,83,90,62,
-49,31,31,33,31,26,17,7,1,7,19,38,71,115,146,136,126,113,121,141,157,182,204,211,210,206,206,190,136,95,97,85,77,71,62,57,57,61,63,61,57,51,45,36,31,27,24,21,
-14,9,9,8,6,1,0,0,1,8,19,28,38,49,68,72,68,69,72,79,91,100,99,95,92,95,125,148,137,116,105,102,142,134,120,162,198,165,180,240,255,241,208,190,129,75,64,59,
-57,64,98,126,200,255,254,255,255,255,255,255,255,254,249,246,212,189,200,213,197,158,125,101,93,91,82,73,71,80,73,83,101,119,128,136,108,50,59,57,40,31,45,65,59,40,30,27,
-22,28,31,23,19,15,8,2,0,0,0,0,1,6,8,13,17,26,33,35,42,44,48,48,65,94,115,143,187,227,196,184,199,192,162,123,139,150,175,186,190,191,196,197,200,208,225,238,
-248,254,255,255,255,255,255,255,254,246,203,173,206,227,235,228,233,233,206,179,133,72,111,155,114,73,57,83,120,207,255,254,246,212,186,227,247,255,255,255,242,182,139,158,224,245,245,241,
-242,240,203,151,175,190,167,133,162,148,114,104,116,98,64,33,17,15,22,26,27,19,13,6,2,7,23,51,77,106,144,135,142,144,153,143,151,175,205,201,204,203,200,182,143,121,111,94,
-85,73,65,63,62,63,64,64,57,51,45,35,31,28,26,22,14,9,8,9,8,3,0,0,0,8,20,26,36,48,58,65,63,64,70,78,84,97,94,86,85,91,112,136,112,97,111,105,
-155,137,122,167,227,226,220,247,255,246,178,143,119,79,65,66,72,77,94,118,201,255,247,247,245,255,255,254,246,249,253,252,225,218,215,210,157,125,107,98,102,82,62,76,77,72,80,104,
-123,143,165,114,62,49,62,61,52,55,54,54,45,28,26,21,14,13,14,12,10,12,7,1,0,0,1,2,9,17,23,26,29,31,38,48,58,58,56,54,62,85,113,155,198,218,183,190,
-193,167,126,129,139,144,146,148,176,208,224,217,212,224,238,249,255,255,255,255,255,254,252,248,245,242,229,224,236,239,224,224,232,212,154,106,92,47,58,78,63,47,42,47,83,187,255,255,
-253,247,250,255,255,255,255,253,252,217,185,191,229,247,249,246
-};
-
-
-unsigned char stringymap[TEXSIZE * TEXSIZE] = {
-79,86,98,116,137,155,173,189,207,226,243,251,247,231,201,157,106,64,37,19,7,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,7,27,49,70,112,175,212,224,233,236,231,225,215,207,209,215,221,232,242,248,251,251,252,251,251,248,246,246,246,246,246,246,246,246,246,246,246,246,246,246,247,248,248,249,240,
-229,227,227,235,249,250,235,225,228,235,238,243,247,248,246,240,225,198,164,135,109,81,54,39,37,39,45,54,64,70,72,73,80,86,93,103,112,117,118,118,118,118,119,116,106,91,78,69,
-57,43,30,17,7,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,4,15,32,49,57,59,59,59,59,58,56,59,67,76,85,93,102,118,145,174,200,222,238,245,246,239,220,186,143,103,62,31,13,5,1,0,0,0,0,3,34,83,117,121,105,
-85,71,63,53,46,41,41,41,41,41,45,54,64,69,70,71,114,133,157,179,200,217,231,240,243,242,230,201,159,121,98,87,86,87,84,76,62,46,32,18,8,2,0,0,0,0,0,0,
-0,0,0,0,0,4,11,18,23,27,34,39,40,39,38,39,47,64,97,140,183,209,219,227,215,184,164,139,113,94,79,68,65,78,99,121,146,170,189,198,202,207,208,207,202,204,211,213,
-212,212,212,212,212,212,212,212,212,212,212,213,213,212,213,200,182,169,153,142,138,137,140,159,188,200,202,187,158,173,203,218,227,238,242,234,228,223,205,162,119,94,82,80,78,76,76,75,
-71,66,63,57,52,50,49,48,47,46,46,48,53,62,69,77,83,85,82,74,60,45,32,20,11,7,4,3,2,2,3,3,3,3,1,2,3,6,13,19,24,27,32,37,39,39,40,41,
-42,42,40,38,31,18,7,1,0,0,0,0,0,1,3,8,15,26,43,60,77,87,88,85,84,84,84,85,87,98,115,122,120,118,118,119,120,124,130,142,158,178,196,214,233,247,250,245,
-232,205,167,131,96,59,29,13,4,0,0,0,10,25,40,54,67,74,80,84,85,85,85,85,85,85,85,83,81,83,91,102,205,223,237,244,244,239,228,211,190,159,113,64,28,14,14,22,
-34,48,62,76,86,91,91,85,75,63,51,42,35,35,40,42,42,38,30,30,40,55,69,78,82,84,86,84,83,91,110,137,177,212,238,243,229,204,184,152,108,74,61,54,51,54,59,70,
-84,104,124,131,118,94,77,68,63,61,61,59,61,72,89,93,90,90,90,90,90,90,90,90,90,90,90,94,100,105,108,111,117,118,105,74,42,18,6,6,21,35,41,28,7,17,36,46,
-54,74,95,93,93,111,156,204,206,179,122,74,45,38,46,51,52,53,52,50,47,46,45,41,34,25,15,7,4,9,19,34,54,70,83,97,109,118,122,124,123,117,111,104,99,100,103,104,
-105,101,96,97,103,111,122,126,123,117,109,102,98,95,92,90,90,87,85,86,84,76,65,53,47,46,46,47,51,56,63,75,90,109,129,135,120,89,60,42,33,30,28,28,31,46,66,71,
-67,66,65,65,64,63,63,63,65,71,81,99,127,163,198,224,241,249,250,242,227,199,161,128,99,77,60,49,44,44,45,45,41,40,48,56,63,69,70,70,71,74,77,84,102,132,162,185,
-251,245,233,218,201,183,164,146,130,111,86,63,48,41,40,41,43,47,53,62,75,90,109,134,149,148,142,131,121,119,123,125,125,115,96,87,88,87,79,68,60,55,52,68,105,159,210,233,
-236,210,167,124,101,102,119,129,126,117,111,111,116,117,114,110,110,115,120,121,110,91,74,59,42,27,13,3,0,0,2,4,4,4,4,4,4,4,4,4,4,4,4,6,8,12,18,30,
-51,79,107,120,113,91,65,41,21,6,0,0,0,0,0,0,0,0,0,0,0,0,18,54,78,125,182,193,177,139,102,105,110,112,114,114,114,114,113,111,105,96,83,82,82,84,106,133,
-156,166,171,178,193,207,220,233,240,242,240,238,236,236,237,237,237,236,233,232,233,234,233,231,224,213,194,177,166,157,145,126,103,84,71,68,76,94,116,129,129,120,113,112,115,117,112,109,
-108,113,119,119,108,90,73,58,42,27,13,4,0,0,2,5,6,7,11,17,24,29,32,33,40,58,79,90,102,127,164,196,216,233,244,249,252,253,249,242,232,220,207,199,195,195,194,186,
-166,152,152,153,154,160,164,165,167,172,182,198,220,240,249,252,174,152,127,111,100,93,89,91,99,108,116,119,118,115,114,114,114,114,114,114,115,119,126,136,140,135,126,117,113,109,105,104,
-104,95,75,58,44,30,16,16,37,67,110,175,220,229,198,150,102,55,37,42,60,87,114,129,126,108,95,92,92,88,75,60,47,37,35,40,51,64,75,84,87,83,73,57,37,20,7,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,34,66,96,114,120,115,102,81,58,42,29,19,13,11,11,11,14,22,33,43,53,65,77,94,121,151,181,166,111,100,
-94,89,88,88,88,88,88,93,100,110,144,202,222,223,236,248,252,253,253,253,253,253,252,250,246,243,242,241,241,240,239,239,239,238,235,234,232,230,229,230,234,239,243,244,241,239,235,223,
-204,183,167,156,150,150,154,156,146,125,111,110,109,105,94,81,69,61,58,62,72,83,93,100,103,100,91,78,63,52,48,56,74,86,99,122,142,154,159,162,171,194,214,219,222,228,235,239,
-239,241,245,248,251,253,255,255,255,255,255,254,254,253,253,253,248,243,243,244,244,246,247,249,250,252,253,253,248,234,215,195,34,23,16,14,13,13,13,17,24,34,50,67,80,87,88,88,
-88,87,87,87,87,86,81,71,58,47,37,33,31,30,26,24,23,18,7,0,4,27,66,123,182,216,229,213,162,102,50,29,34,51,73,86,89,89,89,95,97,92,86,85,84,82,78,71,
-61,47,31,19,14,15,21,34,50,69,86,97,99,91,74,51,32,20,15,13,13,13,13,15,22,32,38,41,41,40,35,28,18,8,3,8,21,43,67,89,108,120,120,115,106,95,86,83,
-82,85,90,100,110,116,120,120,116,107,93,78,63,46,31,23,18,15,14,14,14,14,14,17,23,36,123,239,255,252,240,223,207,197,196,194,187,176,165,149,133,122,116,114,112,112,110,109,
-109,106,100,97,95,94,95,99,109,129,154,171,181,193,208,226,239,247,249,249,245,237,226,215,203,190,185,185,184,183,182,178,173,167,161,158,157,160,164,170,180,190,197,199,199,199,199,204,
-217,224,229,238,243,244,244,244,246,244,238,232,230,222,204,188,180,175,172,172,175,182,191,201,213,222,229,232,233,231,229,225,213,206,207,210,211,211,209,207,204,199,187,169,143,106,71,50,
-0,0,0,0,0,0,0,0,0,0,0,3,8,12,13,13,13,15,17,17,18,22,27,32,38,42,42,42,41,40,39,38,37,40,53,75,121,182,220,230,208,168,128,84,52,46,56,74,
-87,92,86,77,76,81,90,94,85,77,74,74,74,74,75,78,85,88,85,76,63,49,42,43,49,61,78,97,116,133,141,134,114,91,77,73,72,72,73,75,81,86,87,88,88,88,87,84,
-78,66,50,35,22,20,23,27,38,56,76,90,101,111,115,116,116,116,113,107,96,86,74,60,45,33,20,11,4,0,0,0,0,0,0,0,0,0,0,0,0,0,55,167,197,160,114,78,
-57,49,50,49,45,41,42,43,46,47,48,47,46,46,46,46,45,40,30,21,17,17,17,18,21,29,42,58,74,92,115,143,166,184,195,204,217,233,243,248,250,249,249,250,250,249,250,250,
-251,252,252,250,249,246,244,244,246,247,249,251,253,254,255,253,247,240,233,221,208,200,196,194,191,177,158,148,144,134,121,110,102,93,80,67,57,56,58,62,71,88,108,123,134,141,145,143,
-136,131,129,123,113,103,92,80,68,57,43,28,15,4,0,0,0,0,0,0,0,0,0,0,3,4,4,4,8,10,11,13,19,31,38,40,45,55,67,78,84,87,86,84,83,82,88,105,
-129,170,212,233,243,230,194,150,108,84,77,79,87,95,100,98,92,86,82,84,89,89,77,52,28,17,15,15,15,15,15,20,29,43,61,75,85,88,87,87,87,85,85,87,92,101,112,119,
-113,94,78,74,74,75,75,73,66,55,47,44,44,46,50,60,70,81,87,87,81,78,72,53,34,27,28,33,40,49,55,57,56,52,43,30,20,12,8,3,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,3,4,11,41,57,38,20,15,18,29,37,39,43,53,66,76,82,85,86,86,86,86,86,86,86,85,82,75,72,71,71,70,71,72,75,80,87,93,99,99,
-98,99,105,115,129,143,151,155,165,172,174,174,174,173,175,175,178,182,188,194,198,201,201,200,199,196,192,193,193,190,188,182,165,146,128,113,101,96,94,91,82,66,53,47,46,46,49,58,
-67,78,85,84,78,76,70,52,32,26,28,32,40,48,54,55,55,51,42,30,20,12,7,2,0,0,0,0,0,0,0,0,1,4,8,11,12,13,24,41,53,57,58,61,67,71,72,74,
-79,86,87,88,88,87,80,67,52,43,43,56,74,98,146,202,230,236,215,181,149,112,86,81,84,89,88,83,82,88,93,95,96,93,87,75,59,39,19,4,0,0,0,0,0,0,0,0,
-0,0,7,15,26,40,49,53,53,48,42,40,42,44,47,48,47,41,33,30,28,24,20,15,8,3,1,0,0,0,2,5,11,22,37,53,66,74,78,67,54,50,49,48,47,46,46,45,
-44,31,7,0,0,0,0,0,0,0,0,0,0,0,0,0,1,4,8,11,12,13,24,41,53,57,57,58,64,69,71,73,79,85,87,87,87,86,80,68,55,47,44,43,44,44,44,44,
-45,51,63,72,75,76,77,82,89,91,90,84,81,88,93,94,95,91,85,74,58,41,28,22,26,33,34,34,34,34,34,35,35,36,41,47,57,67,75,77,78,72,66,64,65,66,64,60,
-55,45,36,31,27,23,19,14,7,2,0,0,0,0,2,5,11,22,37,53,65,74,78,67,54,49,48,47,46,45,45,45,44,31,7,0,0,0,0,0,0,0,0,0,0,0,0,0,
-34,40,45,48,48,52,68,86,88,86,85,83,80,76,76,74,68,56,46,42,37,29,18,16,31,57,102,156,192,214,230,209,157,105,53,26,17,13,22,47,65,69,67,63,59,59,59,60,
-57,47,32,16,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,29,42,45,45,43,44,46,48,49,49,48,48,47,47,44,39,30,16,3,0,0,0,0,0,0,0,
-0,0,0,3,8,13,16,17,18,25,31,35,37,41,42,42,42,27,4,0,0,0,0,0,0,0,0,0,0,1,9,19,34,40,45,48,48,52,68,86,88,86,85,83,79,76,76,74,
-68,56,47,43,41,33,21,10,3,0,0,0,0,0,0,0,0,2,7,12,15,15,24,48,65,69,67,63,59,59,59,60,57,47,31,16,6,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,7,28,41,44,43,41,42,45,46,47,48,47,47,47,46,43,38,30,16,3,0,0,0,0,0,0,0,0,0,0,3,8,13,16,17,18,25,31,35,37,41,42,42,
-42,27,4,0,0,0,0,0,0,0,0,0,0,1,9,18,51,44,38,34,33,35,41,42,35,29,28,24,18,14,13,12,8,2,5,18,36,53,76,124,179,212,228,219,192,160,115,55,
-13,0,0,0,0,0,5,28,38,34,33,30,23,14,9,6,4,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,33,44,43,42,42,42,38,35,33,33,
-33,33,33,35,39,44,50,51,39,18,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,3,5,6,6,6,3,0,0,0,0,0,0,0,0,0,0,8,28,44,52,
-51,44,38,34,34,35,41,42,35,29,28,25,20,16,15,15,11,5,1,1,3,4,3,3,3,2,0,0,0,0,0,0,0,0,0,0,0,0,5,28,38,34,33,30,23,14,9,6,
-4,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,33,44,43,42,42,41,38,35,33,33,33,33,33,35,39,44,50,51,39,18,4,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,1,3,5,5,6,6,3,0,0,0,0,0,0,0,0,0,0,8,27,44,51,10,4,0,0,0,0,0,0,0,0,0,0,5,14,28,45,
-59,80,122,166,196,214,228,237,223,192,155,103,64,41,27,20,21,23,24,25,24,23,21,17,10,3,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,2,7,9,6,6,6,5,4,2,1,1,1,1,1,2,4,8,17,33,49,51,38,20,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,3,10,23,43,52,42,28,14,7,3,2,1,1,1,0,0,0,0,0,2,7,13,18,23,24,27,33,41,50,56,58,57,52,44,37,31,27,24,23,
-24,24,24,24,24,23,20,16,8,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,7,9,6,6,6,5,4,2,1,1,
-1,1,1,1,2,5,13,29,46,47,35,17,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,20,39,49,38,25,
-25,25,25,25,27,31,32,34,41,58,84,115,137,157,183,206,220,232,245,241,230,220,207,186,159,138,124,115,108,103,102,103,104,105,105,107,106,105,97,77,52,38,35,35,36,34,28,21,
-15,10,5,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,15,34,49,52,38,18,7,4,
-4,5,6,10,14,20,24,25,25,25,25,21,16,10,5,5,5,4,2,1,1,4,9,15,25,36,46,52,47,26,7,0,0,0,0,0,0,0,0,0,6,16,26,40,56,72,85,97,
-103,105,108,115,121,128,130,130,128,125,120,114,109,103,100,100,102,103,104,105,106,105,99,82,62,53,52,54,58,61,57,43,25,10,2,0,0,1,1,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,12,22,27,40,57,70,71,58,41,33,32,32,33,33,36,39,44,46,47,47,47,47,45,40,35,31,30,
-30,30,28,28,28,30,33,39,46,56,66,72,68,50,33,25,182,181,181,181,184,190,193,197,205,220,233,244,247,247,244,236,229,219,201,177,163,154,149,144,142,143,143,144,145,145,147,148,
-150,151,152,153,154,155,154,149,137,128,125,125,125,124,115,105,95,82,68,58,56,57,56,47,40,39,39,38,37,37,38,38,37,33,25,13,3,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,1,12,33,52,58,59,64,68,70,70,73,78,83,83,83,84,84,83,81,75,61,45,41,41,39,34,32,34,39,46,50,51,47,37,25,11,1,0,0,
-0,0,0,2,9,18,29,45,67,90,109,125,139,146,151,153,153,151,149,148,146,143,140,138,137,136,137,137,137,139,140,142,145,147,149,153,159,168,182,194,200,201,204,208,210,213,211,203,
-185,153,125,95,72,61,54,45,39,38,38,38,37,37,38,38,37,33,25,13,3,0,0,0,0,0,0,0,0,0,0,0,5,21,40,68,115,155,177,182,181,183,188,194,199,197,194,195,
-196,197,197,200,202,205,206,206,206,206,206,205,202,197,194,192,192,191,189,189,190,192,195,197,200,199,198,193,187,182,182,181,201,204,208,214,220,224,227,230,231,227,218,206,197,189,178,164,
-154,146,137,128,119,111,103,100,101,107,112,117,122,127,130,131,134,136,137,140,144,151,155,156,156,156,155,155,155,157,157,158,157,154,149,144,142,143,142,137,130,126,126,126,126,128,130,131,
-130,126,115,91,59,43,41,41,41,41,43,46,40,26,13,7,5,5,5,5,5,5,5,5,4,4,5,19,49,86,113,125,125,117,102,90,82,71,63,61,61,61,62,66,70,61,47,43,
-43,46,47,49,48,44,38,31,22,11,3,0,0,0,0,0,7,18,32,50,73,95,113,130,145,154,157,158,158,155,151,146,141,136,132,125,116,106,98,93,94,98,103,108,113,118,122,125,
-128,131,134,137,143,153,163,173,181,186,186,183,180,179,179,187,201,217,224,225,219,204,177,152,136,126,122,121,121,124,127,128,127,123,113,88,56,40,38,38,41,42,51,70,67,54,63,93,
-129,169,201,219,230,220,206,201,201,200,200,203,212,222,229,232,232,229,224,220,217,214,212,211,211,211,212,213,214,212,210,209,209,209,211,211,211,210,206,204,202,201,199,199,199,198,199,198,
-97,118,138,153,162,166,168,169,169,163,152,138,123,107,91,78,68,62,58,51,41,32,25,23,24,29,34,40,47,53,56,57,58,60,61,63,69,87,104,103,92,85,83,83,84,88,96,106,
-117,129,139,143,144,146,149,145,135,130,129,130,134,143,151,156,159,160,160,153,130,116,114,114,114,114,117,120,111,89,73,63,58,58,58,58,58,58,58,58,58,58,60,71,84,93,90,81,
-70,54,37,26,17,11,7,6,6,6,6,9,12,11,7,6,6,8,11,12,12,8,3,0,0,0,0,0,0,7,16,34,65,94,117,134,148,155,158,159,159,155,147,137,123,107,92,78,
-68,62,56,49,39,31,24,22,22,26,31,37,43,49,53,54,57,58,60,62,68,86,103,102,90,83,82,81,83,87,95,104,117,131,145,160,175,197,222,228,222,209,196,187,172,164,168,172,
-173,173,173,167,146,132,136,155,185,187,205,231,226,214,224,236,238,227,207,185,148,113,95,90,90,90,92,101,111,116,113,103,94,81,67,58,52,48,44,44,44,44,44,46,48,47,45,43,
-43,45,47,48,48,45,42,40,39,38,37,37,39,45,56,68,139,149,154,156,156,152,146,135,117,93,72,54,38,25,16,10,6,4,4,3,3,3,3,4,4,4,5,6,8,9,9,9,
-10,10,11,12,14,22,34,39,38,36,36,35,35,37,42,47,53,65,75,80,81,85,88,79,65,56,52,49,52,61,73,87,99,104,102,97,91,88,88,88,87,87,89,89,82,74,77,82,
-85,85,85,85,85,85,85,85,85,85,84,78,62,42,23,11,5,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,14,35,65,89,115,
-141,154,158,159,158,154,147,137,118,94,73,55,38,25,17,11,7,5,4,3,1,0,0,0,0,0,0,1,3,4,4,4,5,4,5,5,7,13,21,20,14,10,10,10,10,12,16,22,
-30,41,53,58,59,65,83,95,105,135,154,167,185,196,200,205,210,212,211,210,207,219,237,247,248,232,243,235,218,207,193,168,143,120,101,90,84,81,80,81,81,81,80,74,59,39,20,8,
-3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,30,61,91,112,159,155,147,135,116,92,72,53,34,18,8,2,0,0,0,2,
-11,21,29,38,49,58,65,69,70,69,69,69,69,69,68,69,69,70,70,74,77,83,101,120,129,131,131,131,131,131,131,131,131,131,132,133,133,133,132,126,116,106,92,77,71,69,65,57,
-47,35,26,19,15,13,12,13,13,14,14,13,11,11,17,24,28,29,29,29,29,29,29,29,29,29,26,18,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,4,14,30,53,84,118,143,154,158,158,156,148,135,116,92,72,53,34,18,9,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,3,3,2,0,0,0,5,12,32,53,56,58,62,63,63,62,61,95,136,122,87,74,96,76,51,42,35,29,
-27,26,26,27,27,28,28,28,28,28,26,18,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,14,29,53,84,117,143,155,158,
-126,101,73,50,32,17,8,1,0,0,0,0,21,52,84,113,136,147,149,159,173,183,190,193,193,193,193,193,194,194,193,193,193,194,195,198,200,205,217,229,232,233,234,234,233,233,233,233,
-232,232,232,233,232,232,231,229,226,220,211,200,194,191,184,168,144,115,88,64,41,22,9,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,5,9,17,31,54,84,112,136,152,158,158,152,139,124,105,76,50,32,17,8,2,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,2,5,9,17,31,54,84,112,136,152,158,159,155,148,39,20,5,0,0,0,0,0,4,23,66,129,184,218,235,243,246,243,242,243,245,247,247,248,248,248,248,247,247,248,248,248,
-248,248,248,247,247,247,247,243,240,239,239,239,238,238,239,239,239,238,239,239,239,238,239,241,243,244,247,247,248,247,246,245,238,225,209,190,160,123,93,67,42,18,4,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,3,4,4,4,4,4,4,4,4,5,7,10,16,22,27,35,49,62,76,94,116,136,152,158,159,157,147,123,90,62,
-41,24,10,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,1,3,3,3,3,3,3,3,3,3,5,9,16,22,26,35,49,62,76,94,116,136,152,158,159,157,149,130,99,72,6,12,20,25,28,34,50,89,133,180,225,250,253,247,238,232,
-229,227,225,222,216,213,209,206,206,206,205,205,205,205,205,205,205,205,204,202,199,196,183,165,153,149,149,149,148,148,149,149,149,148,148,149,149,148,151,156,164,174,187,200,206,207,213,225,
-238,245,248,248,241,227,211,191,157,106,57,25,10,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,14,23,32,44,55,61,62,62,62,62,62,62,62,64,69,80,93,103,
-110,121,134,143,149,155,159,159,157,150,134,110,75,43,20,8,1,0,0,0,0,0,0,0,0,0,1,3,8,16,22,26,25,20,12,6,3,1,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,4,7,16,24,24,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,10,22,28,33,40,48,55,66,75,79,80,80,80,80,80,80,80,80,81,84,93,101,108,120,132,141,148,153,156,157,155,147,131,105,75,46,23,11,
-136,156,173,183,188,197,214,238,252,255,254,241,212,178,149,134,129,125,120,111,103,94,88,86,87,87,86,84,84,84,84,84,84,84,83,79,77,72,61,46,37,34,34,34,34,34,34,34,
-34,34,34,34,34,34,36,39,45,53,64,76,83,87,96,117,148,177,200,219,236,244,248,248,240,215,173,124,83,55,32,15,6,1,0,0,0,0,0,0,0,0,0,9,31,61,87,105,
-118,130,139,142,143,143,143,143,143,143,143,144,147,151,155,157,158,159,160,159,157,154,147,133,109,80,52,28,11,2,0,0,0,0,0,0,0,0,3,13,31,53,71,86,108,133,150,156,
-154,142,120,99,83,70,54,39,26,14,7,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,4,13,29,58,96,117,107,71,22,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,24,49,98,144,176,187,194,201,207,211,216,220,222,222,222,222,222,222,222,223,221,216,207,195,185,
-175,168,167,166,165,162,156,144,120,93,73,71,88,108,117,124,252,255,255,254,250,244,233,219,217,210,181,146,118,90,64,47,38,32,26,20,16,12,10,12,16,17,18,16,13,10,9,8,
-8,8,8,8,7,6,4,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,3,5,7,8,9,12,20,35,55,78,107,143,173,197,219,239,247,242,226,202,177,142,100,
-65,38,19,9,4,1,0,0,0,10,32,67,110,141,153,157,159,160,159,159,159,159,159,159,159,159,159,158,158,157,153,149,146,141,131,118,104,90,71,49,28,11,2,0,0,0,0,0,
-0,0,1,9,27,52,83,119,161,194,211,221,232,241,245,245,245,243,237,229,220,210,195,175,150,121,98,77,47,21,7,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,2,7,31,80,136,171,166,102,35,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,23,73,131,169,203,229,229,225,231,236,237,237,
-238,238,238,239,238,238,238,238,238,238,238,239,244,249,250,247,238,230,226,224,221,216,208,193,176,168,178,204,229,244,248,250,199,194,180,148,119,98,75,55,50,46,32,20,21,22,18,11,
-6,3,1,0,0,0,0,0,2,5,9,9,9,7,6,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,3,7,16,32,51,75,110,158,204,232,245,248,246,235,214,185,151,112,81,61,41,24,22,40,73,113,143,156,158,156,149,142,133,122,115,113,113,112,112,113,113,112,111,108,99,85,73,
-66,57,44,30,21,14,6,1,0,0,0,0,0,0,0,3,16,42,73,111,153,192,218,237,245,242,235,228,216,199,184,180,181,192,208,222,230,236,243,246,244,237,228,214,183,141,105,69,
-34,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,38,94,163,178,135,61,18,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,13,57,122,180,222,229,213,196,174,162,164,169,172,171,166,159,151,141,134,131,131,131,131,131,131,131,132,136,144,158,172,192,206,205,201,200,198,198,198,201,204,210,214,212,206,203,201,
-39,36,27,11,1,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,1,3,5,7,11,13,14,13,13,14,15,17,18,20,21,20,15,10,6,2,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,6,18,45,87,135,175,203,224,240,247,246,237,221,202,185,162,137,130,143,160,164,161,156,140,109,82,
-66,53,41,35,33,32,32,32,32,32,32,32,30,28,31,28,17,11,6,2,0,1,0,0,1,1,1,3,10,26,48,81,130,178,212,233,245,243,233,214,184,149,124,112,98,83,72,70,
-72,80,93,107,119,130,149,170,190,209,224,237,246,243,232,208,166,109,60,32,20,18,19,20,19,15,10,6,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,63,
-131,175,167,125,62,36,36,36,36,34,33,34,32,31,37,64,114,165,199,205,192,171,139,123,133,146,153,156,153,137,105,78,61,48,36,29,27,27,27,27,27,27,27,26,25,21,19,21,
-32,42,41,40,39,38,39,39,41,44,48,49,45,42,41,39,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,5,11,19,
-28,37,47,57,67,77,85,90,91,86,78,67,54,40,30,25,25,25,25,24,21,16,10,7,5,5,5,5,6,6,6,8,14,25,41,53,56,50,40,37,38,39,44,61,85,118,159,193,
-217,235,245,247,248,245,239,233,227,214,199,179,150,117,92,78,73,71,69,69,68,68,68,68,70,72,77,82,88,111,149,158,136,120,109,94,91,88,81,79,79,79,78,85,114,155,188,216,
-239,245,235,218,190,153,120,93,71,57,53,57,61,65,68,70,72,72,71,70,67,65,65,70,78,89,104,129,167,198,221,241,247,232,198,159,127,106,97,94,92,85,76,66,54,40,30,25,
-25,25,25,24,21,16,10,7,5,5,5,5,6,5,3,1,16,62,119,177,197,189,186,184,184,178,171,174,171,167,171,185,187,155,110,82,75,92,120,143,154,157,154,136,103,61,28,11,
-5,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,1,2,2,4,9,18,30,44,61,78,95,110,122,132,139,143,144,141,136,124,114,109,108,108,108,106,102,92,80,70,64,64,64,67,72,75,78,85,
-98,117,133,142,143,139,134,129,127,114,91,70,58,62,80,105,138,176,209,227,239,248,253,255,253,249,238,219,203,194,192,192,192,192,193,193,194,193,193,195,198,203,210,216,221,234,247,249,
-245,241,237,229,227,225,219,217,218,218,217,221,234,245,244,232,204,164,122,91,66,49,44,48,56,67,78,89,98,107,116,120,122,121,118,112,104,95,85,74,63,54,47,45,55,71,98,143,
-196,234,249,247,236,217,198,183,170,160,151,143,135,124,114,108,108,108,108,106,102,92,80,70,64,64,64,67,72,75,78,85,96,111,127,142,162,169,165,163,161,150,132,120,122,122,115,100,
-80,67,73,96,124,147,156,158,153,132,95,56,25,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,4,6,12,21,31,38,51,68,77,79,79,80,83,88,97,107,118,129,139,148,157,162,165,163,161,159,159,158,157,156,
-157,157,157,157,156,155,151,147,144,144,144,146,149,151,152,155,157,159,159,159,159,160,160,160,159,158,154,144,134,128,128,131,141,156,174,186,198,213,225,229,232,238,244,245,245,245,244,245,
-245,245,245,246,246,246,247,248,249,251,252,253,253,252,251,251,251,248,245,237,236,235,229,227,228,228,228,229,222,189,147,111,72,43,29,28,34,44,57,71,87,101,117,132,146,155,157,156,
-155,156,159,160,154,143,127,112,97,82,67,53,41,33,33,46,82,133,182,218,241,251,251,245,235,222,204,189,178,168,161,157,156,157,157,157,156,154,151,147,144,144,144,146,149,151,152,155,
-157,158,159,158,156,156,156,156,154,153,149,140,130,125,123,124,129,138,148,155,159,158,150,128,90,50,21,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,27,45,52,61,75,92,104,122,147,166,175,191,210,217,218,218,218,218,220,
-222,223,224,225,226,227,227,226,225,218,206,198,193,185,174,163,154,147,144,144,147,152,156,157,159,159,159,159,158,158,157,155,152,148,139,126,118,114,117,131,145,151,156,158,160,159,159,159,
-159,159,158,156,150,136,120,111,117,142,174,196,209,218,227,236,243,246,248,248,248,249,250,250,248,243,235,228,225,222,223,215,182,149,130,113,109,107,99,97,96,97,96,97,86,55,28,17,
-14,18,25,36,49,63,80,99,117,137,154,157,133,98,70,53,47,51,65,92,129,159,164,150,131,112,93,76,60,48,41,37,40,51,68,94,130,170,201,226,242,249,248,241,230,215,195,175,
-160,152,148,147,148,151,154,156,158,158,159,158,158,158,157,155,152,148,139,126,118,114,117,131,145,151,156,158,159,159,159,159,160,159,158,153,144,121,85,46,18,3,0,0,0,0,0,0,
-0,0,0,0,0,1,1,1,1,1,1,2,2,2,2,2,2,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,9,21,36,95,176,203,208,
-209,215,226,232,239,244,245,245,242,235,229,228,228,229,229,229,229,229,228,228,228,227,228,229,233,239,243,243,242,236,223,205,181,148,122,109,101,98,101,109,117,122,123,124,124,120,106,88,
-75,66,50,34,25,23,26,44,64,81,98,116,128,132,132,131,127,119,106,86,63,40,26,28,51,89,125,156,189,215,234,244,244,240,233,229,228,225,212,188,162,139,118,104,99,95,92,79,
-48,21,11,7,6,6,5,5,5,5,5,7,6,5,6,10,17,25,35,48,62,80,101,122,144,159,140,76,20,0,0,0,0,0,0,0,13,60,133,168,159,138,117,96,77,63,52,41,
-31,24,18,13,19,33,56,90,127,165,202,228,242,247,240,221,198,176,160,144,128,121,119,118,120,121,121,122,123,119,105,87,75,65,49,33,25,22,26,43,64,81,98,116,128,132,132,132,
-128,121,108,89,64,38,15,2,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,2,2,3,3,3,3,3,2,2,2,2,1,1,1,0,0,0,0,0,0,0,0,0,0,0,
-26,26,26,26,31,47,77,98,112,143,174,195,230,253,253,248,243,231,221,213,201,180,162,151,134,111,99,97,98,98,98,98,97,96,97,96,96,97,98,100,110,131,159,181,201,219,234,242,
-242,227,208,192,170,134,98,73,54,42,38,36,36,32,21,10,3,0,0,0,0,0,0,0,3,8,16,29,39,43,44,44,42,38,37,43,57,82,104,129,167,201,217,227,239,242,229,202,
-165,133,111,102,99,92,73,47,28,18,12,9,8,8,8,5,1,0,0,0,0,0,0,0,0,0,0,1,3,5,9,15,21,29,41,55,72,93,115,140,160,144,63,0,0,0,0,0,
-0,0,0,0,0,0,42,136,172,157,134,111,91,71,54,40,27,19,13,7,3,1,1,3,12,31,60,97,136,176,215,237,244,241,235,225,207,190,169,139,109,83,68,60,51,39,26,15,
-9,6,3,0,0,0,0,0,2,8,17,29,39,43,44,43,40,33,24,14,5,0,0,0,0,0,0,0,0,1,3,4,4,5,4,5,5,5,6,7,7,8,8,8,8,8,7,7,
-6,4,5,11,6,0,0,0,3,17,25,26,26,26,26,26,183,182,183,183,189,206,224,232,232,226,211,192,165,162,163,142,127,103,84,72,58,41,29,22,16,10,6,6,6,6,4,4,
-5,5,5,5,5,4,5,5,8,16,28,41,59,84,116,151,189,219,235,241,245,238,216,188,148,111,89,80,78,77,71,57,40,29,24,24,24,24,24,26,28,29,31,31,31,33,42,59,
-77,92,122,161,193,221,233,240,246,242,230,217,193,153,107,63,31,14,7,5,4,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,3,4,7,11,15,
-21,31,43,58,77,98,122,147,163,122,24,0,0,0,0,0,0,0,0,0,0,0,9,103,171,166,142,118,95,73,54,40,28,20,14,9,6,4,2,0,0,0,0,5,18,41,82,126,
-162,187,203,220,235,243,244,236,218,192,174,158,135,112,99,94,89,87,87,82,66,49,39,32,27,24,22,23,24,26,26,27,29,32,35,38,41,43,44,46,45,42,37,36,43,58,72,81,
-83,83,83,83,84,84,84,85,85,85,86,86,86,85,86,85,81,72,83,105,74,57,85,98,121,165,183,183,183,183,183,182,201,200,201,200,195,177,141,120,106,79,50,33,20,25,29,19,
-12,6,3,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,10,24,51,85,112,135,168,207,231,244,244,235,224,218,217,217,214,200,
-181,164,155,154,154,153,154,158,161,167,179,176,170,170,181,200,216,225,237,245,244,234,220,206,183,154,129,109,82,53,28,13,6,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,1,3,4,7,10,15,21,31,42,57,75,96,120,145,163,139,47,0,0,0,0,0,0,0,0,0,0,0,28,126,174,164,139,115,91,70,53,39,
-28,19,14,9,6,4,2,1,0,0,0,0,0,0,3,15,30,46,62,85,116,143,174,206,230,242,245,245,242,236,231,228,225,223,223,220,206,190,178,168,162,157,154,154,154,155,156,161,
-165,168,172,174,175,175,176,176,177,176,174,174,185,202,213,219,220,219,218,219,220,219,219,219,220,220,220,220,220,220,220,220,217,218,227,235,215,210,227,231,233,218,202,200,200,200,201,200,
-40,39,40,39,35,24,9,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,4,9,17,35,67,104,148,187,210,223,227,227,228,230,237,243,244,243,244,244,243,243,243,243,247,254,255,254,254,254,253,247,239,225,200,171,141,116,87,54,35,34,39,44,47,49,48,
-44,39,35,33,33,32,30,17,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,3,4,6,9,13,19,27,38,52,68,87,108,131,155,164,126,49,4,0,0,0,
-0,0,0,0,0,34,113,169,170,149,126,103,82,63,48,35,25,18,12,8,5,4,2,1,0,0,0,0,0,0,0,0,0,0,0,3,10,20,38,66,102,132,150,168,190,204,213,218,
-221,222,223,226,234,241,243,243,243,244,244,244,245,247,248,249,249,248,247,247,246,246,246,247,247,248,248,249,250,247,241,237,237,236,235,235,235,235,235,234,230,230,231,231,230,231,231,230,
-228,231,227,214,206,180,138,120,107,66,41,39,39,39,40,39,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,23,46,68,86,97,101,107,118,139,162,180,187,189,189,190,190,188,183,186,199,204,209,218,228,236,
-240,236,224,210,199,193,187,160,110,66,36,17,10,12,22,30,38,44,48,49,49,49,46,25,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,3,5,7,11,
-16,22,31,42,56,72,91,110,131,152,166,154,112,68,40,25,20,23,35,60,103,151,175,167,147,126,106,86,68,53,39,28,21,15,10,7,5,3,2,1,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,6,13,22,35,56,75,89,100,107,111,116,124,141,160,173,180,185,189,190,190,190,189,184,180,177,175,175,177,180,187,190,185,178,178,179,178,168,148,133,128,
-131,136,138,139,140,140,138,128,116,116,116,116,116,116,114,113,109,97,81,65,55,35,15,8,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,3,3,4,5,10,19,29,38,45,50,53,58,
-65,73,81,86,90,99,109,114,110,104,100,90,81,81,95,118,150,180,198,207,213,218,218,223,228,219,192,152,97,49,22,7,1,4,9,11,12,13,12,5,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,1,3,4,6,8,12,17,22,31,42,54,69,85,102,119,136,153,166,167,160,152,149,151,161,170,173,165,149,132,115,98,81,65,52,40,29,21,
-15,11,8,6,3,3,1,0,0,0,0,0,0,0,0,0,0,0,1,2,4,5,6,7,11,18,25,33,42,47,50,51,51,53,60,65,73,88,103,113,114,111,105,93,82,74,70,70,
-71,73,79,92,106,113,103,77,59,58,59,60,55,46,41,41,43,48,51,53,54,55,54,49,45,45,46,47,45,44,42,40,37,30,22,17,14,11,10,8,5,3,3,2,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-2,19,29,33,37,39,40,41,45,46,46,42,37,29,21,16,11,10,11,13,18,29,45,63,81,92,94,87,74,64,62,67,74,81,92,103,110,107,97,103,128,162,194,222,230,209,173,132,
-84,39,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,3,4,6,8,11,16,22,28,37,47,59,72,84,97,110,121,132,141,146,
-149,148,146,138,129,118,106,95,82,68,56,45,35,27,20,15,11,8,5,4,2,1,0,0,0,0,0,0,0,0,0,0,6,24,33,36,41,42,42,44,48,50,49,45,39,30,23,18,
-15,15,17,20,24,34,52,71,88,99,101,95,85,78,77,82,84,84,89,100,108,104,90,73,60,49,42,41,42,44,46,48,48,49,50,50,50,50,50,52,53,54,54,53,53,52,49,46,
-42,38,34,28,23,19,15,12,9,6,4,3,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,1,0,0,0,0,0,0,2,4,15,39,70,88,104,122,128,127,125,121,117,110,105,101,97,95,93,86,79,68,50,40,43,52,65,75,76,75,73,64,53,46,43,
-39,32,29,29,30,29,33,43,53,62,71,96,143,183,215,236,232,200,149,102,63,36,18,8,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,3,
-5,7,10,14,18,23,30,37,45,54,62,70,78,85,90,95,96,96,94,90,84,77,69,60,52,44,36,28,21,17,13,10,7,4,3,2,1,0,1,1,1,1,1,0,0,0,0,0,
-10,37,49,50,48,47,46,42,35,25,16,9,4,0,0,0,1,3,5,7,15,26,42,58,73,81,86,88,80,71,69,68,68,66,65,67,69,72,77,87,95,95,86,76,71,73,78,84,
-88,89,90,94,94,89,83,76,71,70,69,67,67,64,62,58,53,47,41,35,28,22,18,14,11,8,5,3,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,25,26,27,35,54,70,90,113,126,135,159,188,202,211,222,231,233,233,233,232,233,232,232,231,231,232,231,
-231,230,225,213,201,197,195,191,179,150,119,93,63,37,18,8,1,0,0,0,0,3,8,22,45,69,81,78,74,78,95,126,167,210,236,239,214,172,122,79,53,40,32,27,25,25,25,25,
-25,25,25,25,21,14,7,1,0,0,0,0,0,0,1,2,3,3,4,6,8,11,15,19,24,29,34,39,44,48,51,53,56,56,55,53,49,45,40,35,30,25,21,16,13,10,8,5,
-4,3,1,2,14,28,30,31,31,31,31,28,21,12,5,0,0,5,10,23,35,39,40,41,46,64,83,107,127,130,130,130,133,136,138,141,147,153,159,160,158,153,150,150,132,92,57,46,
-45,47,50,54,57,61,69,82,102,122,133,131,125,121,118,117,117,116,120,132,139,139,136,126,118,110,105,102,99,97,94,90,84,76,69,62,53,39,27,18,12,8,6,4,3,2,0,0,
-0,3,8,15,22,24,24,24,24,24,24,23,24,21,14,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,21,50,72,103,151,198,217,227,232,232,230,223,
-205,187,175,162,148,142,140,139,138,140,141,143,146,147,147,147,151,157,172,193,211,217,220,223,227,236,235,228,208,176,141,103,73,48,33,27,27,33,37,45,55,62,68,69,60,44,27,18,
-25,51,97,159,210,239,234,199,149,106,86,80,80,82,83,83,83,84,84,84,82,75,63,46,26,7,0,0,0,0,0,0,2,6,11,19,27,30,32,34,36,37,40,42,44,44,40,33,
-29,26,26,25,24,23,21,18,16,13,11,9,8,5,4,3,2,1,0,2,23,44,49,49,49,49,49,53,58,63,66,64,59,54,59,84,116,139,155,163,180,193,191,181,168,167,168,167,
-166,167,168,172,176,180,180,178,176,177,178,181,194,208,185,153,125,97,86,87,91,96,101,110,119,126,133,135,131,124,115,109,107,108,113,122,129,135,146,160,171,177,188,198,198,196,195,194,
-186,177,161,140,129,113,90,62,37,15,3,2,1,0,0,0,50,61,73,88,98,98,97,96,96,96,96,97,97,93,83,66,44,22,8,6,3,0,0,0,0,0,0,0,0,0,3,7,
-12,22,42,65,103,149,188,219,234,221,204,197,184,181,180,171,155,145,137,130,122,117,108,87,64,49,38,28,25,26,26,28,33,42,57,77,89,87,80,76,84,108,136,167,200,223,235,235,
-224,200,173,134,85,56,47,44,33,22,15,13,10,5,1,0,0,0,0,13,47,108,175,222,233,200,150,106,78,64,58,56,58,60,60,62,67,76,84,89,83,58,27,7,2,7,21,35,
-53,66,75,89,99,100,100,101,102,103,104,105,104,103,94,79,59,38,24,17,13,9,5,5,4,3,2,2,1,0,0,0,0,0,0,0,5,11,14,14,13,14,15,26,51,86,126,161,
-184,192,194,193,185,164,144,131,107,72,49,36,32,34,36,39,44,52,63,76,82,79,72,67,66,70,77,82,94,128,166,196,212,212,194,182,179,174,161,149,144,140,139,142,144,143,143,146,
-155,170,184,187,186,191,201,214,218,217,214,205,204,203,201,199,199,203,209,212,210,210,203,182,155,115,62,20,4,5,16,28,116,115,115,110,106,117,129,135,139,140,138,132,129,131,137,145,
-140,118,108,130,129,117,108,105,101,100,103,109,110,118,136,149,161,178,203,221,236,245,246,244,233,214,213,221,223,224,225,226,228,231,232,235,234,234,232,223,207,190,170,135,97,68,57,56,
-53,51,49,43,30,15,6,4,4,6,11,22,43,69,104,143,176,205,227,235,202,136,75,45,31,24,23,25,26,27,27,27,27,26,20,12,6,8,27,72,147,207,229,212,174,135,95,62,
-26,6,4,2,4,11,22,41,68,91,92,73,64,82,106,117,119,117,116,115,116,125,143,161,167,168,168,168,168,169,174,177,173,156,140,129,112,81,51,33,20,21,23,14,10,11,13,12,
-12,9,4,1,0,0,0,0,0,0,0,0,3,8,20,37,57,74,82,83,75,57,45,37,30,26,28,31,34,38,42,50,60,69,73,70,60,51,48,49,53,60,66,72,76,80,88,102,
-125,158,184,195,199,207,215,217,217,217,218,220,220,221,222,223,222,216,207,203,200,194,181,164,150,142,136,130,128,125,120,113,106,101,102,109,104,105,127,161,188,207,205,171,136,122,115,113,
-177,162,157,154,163,199,214,211,210,211,207,187,183,184,190,201,209,212,220,242,251,247,243,242,240,239,239,240,240,245,254,255,255,255,253,251,253,247,229,210,198,195,182,150,132,121,118,118,
-119,120,121,126,131,136,147,171,196,210,225,236,235,220,208,199,171,118,74,46,23,11,8,7,5,4,4,3,3,4,7,14,26,47,84,149,212,237,217,188,156,130,115,105,102,101,102,102,
-102,102,97,87,78,67,49,33,34,64,120,176,209,223,224,209,159,112,91,63,40,35,41,58,91,134,175,187,186,191,197,186,146,130,139,157,178,199,219,229,229,230,230,230,230,230,234,239,
-243,244,245,247,244,229,206,180,151,155,170,141,116,96,79,68,67,64,55,46,36,25,17,12,5,1,0,0,0,1,0,0,0,3,8,18,32,43,52,57,60,62,62,63,65,68,70,70,
-69,64,58,59,69,77,81,84,81,80,83,87,91,97,102,107,110,114,122,133,143,156,175,195,203,205,206,205,205,206,206,204,199,194,187,183,177,171,162,153,144,139,136,134,131,127,121,115,
-106,95,82,68,56,45,40,48,76,121,175,206,217,224,221,205,224,237,228,215,208,185,135,101,92,93,91,78,73,68,65,68,74,83,98,122,147,158,163,168,171,174,173,170,170,172,176,170,
-165,162,161,166,183,177,139,111,93,78,58,32,17,10,5,3,3,3,4,5,6,10,16,27,42,56,75,107,148,182,197,208,229,229,212,191,162,135,121,102,75,55,45,41,31,17,13,14,
-20,30,48,76,119,168,207,235,247,239,222,193,155,129,120,113,107,106,109,114,117,118,116,108,92,74,67,75,90,117,156,199,232,236,231,219,205,202,209,220,231,240,250,254,254,253,254,249,
-226,222,229,226,218,205,177,146,135,134,135,134,133,128,126,126,131,137,143,151,170,200,223,238,246,252,255,250,236,210,167,129,103,87,84,85,85,81,77,70,58,44,30,21,14,9,7,6,
-6,7,7,8,11,16,21,27,34,42,55,66,73,75,82,101,121,127,132,161,193,202,204,201,184,166,159,147,135,133,133,134,140,148,158,169,178,184,187,191,199,202,200,199,200,200,201,201,
-200,201,202,203,202,201,200,195,187,179,172,165,157,149,143,136,129,121,109,99,94,94,99,108,119,129,131,122,114,132,166,197,187,161,135,122,118,109,98,94,94,94,94,94,91,83,71,61,
-57,58,57,53,48,44,42,41,44,47,47,46,46,43,33,24,21,24,31,40,54,63,67,74,82,84,82,76,68,58,47,36,27,21,16,14,11,10,9,10,13,18,20,24,32,43,48,60,
-100,147,176,198,219,227,229,229,219,206,197,194,176,144,131,132,135,128,122,113,99,85,80,101,145,178,204,228,223,200,185,164,137,125,129,143,151,147,153,164,171,176,176,172,168,174,193,215,
-236,247,251,255,255,255,255,251,245,233,221,211,207,208,214,223,220,194,171,154,138,128,113,103,100,99,100,100,97,88,77,68,65,66,64,59,57,65,80,101,140,181,215,241,251,251,242,225,
-196,161,138,136,142,144,147,151,155,151,137,117,99,88,79,68,61,56,54,54,53,52,56,74,102,123,156,184,192,194,202,221,232,234,236,237,226,220,221,225,236,240,241,238,229,224,219,212,
-210,210,205,200,193,186,180,178,181,183,183,182,182,183,183,183,182,182,182,183,183,185,189,194,198,200,199,198,193,188,183,179,178,176,170,164,164,165,166,166,154,124,105,101,112,158,193,195,
-61,68,82,93,100,104,106,105,105,105,105,105,107,114,119,119,119,118,117,113,108,97,84,70,57,45,36,32,28,25,23,21,21,22,23,25,29,33,35,36,44,54,64,74,81,87,90,90,
-87,83,78,74,69,65,64,66,73,79,82,82,78,72,68,66,69,74,78,89,110,128,139,158,182,204,214,222,235,244,245,244,242,232,218,207,195,180,159,135,121,123,142,184,220,240,250,251,
-245,242,242,245,247,238,229,231,233,236,238,240,243,241,233,223,222,222,223,220,213,200,189,181,170,149,124,103,86,72,67,76,90,85,86,94,99,102,104,103,104,104,104,104,106,112,117,118,
-118,118,117,114,109,98,84,72,66,70,93,136,178,213,237,249,250,243,232,228,228,229,229,230,232,234,234,229,222,219,218,214,209,207,205,205,203,202,206,221,237,243,246,237,231,230,228,212,
-193,188,187,174,155,150,155,163,179,196,209,225,236,242,246,250,251,250,245,238,229,217,206,195,190,189,189,189,189,187,182,180,179,177,175,173,169,166,164,165,169,172,176,180,184,185,182,181,
-184,185,181,177,174,171,170,179,182,188,202,199,186,153,96,59,49,43,35,31,30,29,29,28,28,28,28,28,32,42,53,63,68,74,88,107,130,150,153,149,144,133,121,112,103,100,100,99,
-99,100,101,105,107,106,100,87,75,66,58,53,53,58,65,79,95,107,112,110,105,101,98,96,93,88,88,89,91,96,105,109,105,101,101,102,102,101,102,105,111,120,121,115,121,139,145,144,
-151,172,188,196,202,211,221,230,230,228,226,227,231,232,220,208,207,207,208,209,207,169,125,120,120,116,112,112,111,100,82,68,71,76,78,78,77,74,72,76,88,103,113,115,111,97,75,58,
-48,42,35,30,30,29,29,28,28,28,28,28,32,42,54,64,70,76,89,109,133,152,155,152,145,133,122,116,119,138,166,203,237,248,236,208,185,182,182,176,170,168,175,190,203,208,212,219,
-226,230,231,231,230,229,227,214,194,182,171,152,148,153,160,158,153,153,157,161,163,166,170,174,177,181,185,186,189,192,196,203,208,215,226,236,243,248,249,245,240,238,237,236,236,231,218,213,
-211,210,208,206,204,192,178,173,171,169,166,167,168,168,164,160,159,158,155,154,164,188,203,212,206,194,165,141,127,105,80,66,115,101,79,58,43,33,28,26,25,24,24,24,24,26,29,35,
-45,63,86,109,132,149,151,146,141,134,126,117,109,107,110,114,121,130,143,155,158,159,158,156,151,146,137,126,117,106,93,90,100,107,111,111,107,99,89,74,57,42,37,36,39,47,57,64,
-60,58,64,70,71,71,70,70,70,68,59,46,39,37,36,34,37,45,53,58,62,69,83,104,122,130,130,129,127,111,81,59,55,54,54,54,50,30,12,9,9,7,6,5,3,1,0,0,
-0,0,0,1,3,3,4,7,15,31,50,67,88,109,119,118,111,100,79,58,43,33,28,26,25,24,24,24,25,27,31,37,48,66,89,112,134,152,155,151,146,139,132,123,114,112,115,129,
-165,212,244,241,210,180,163,158,157,153,150,147,148,143,135,137,145,151,155,157,156,152,145,129,110,99,96,97,103,111,122,130,132,135,144,152,156,160,164,168,171,174,173,171,171,172,174,177,
-180,183,189,194,202,211,222,233,239,240,241,241,242,247,250,249,249,248,248,249,250,241,228,226,224,223,221,219,219,217,215,212,209,207,203,199,190,168,131,91,61,53,56,70,88,107,118,121,
-91,107,119,120,114,108,104,102,101,100,100,101,100,101,100,103,110,117,119,113,103,91,76,62,50,43,41,45,54,69,87,101,114,129,143,150,148,147,149,151,153,154,155,156,153,139,111,86,
-74,71,73,82,92,100,102,99,87,69,54,43,39,41,44,45,45,45,41,38,39,39,40,41,41,40,40,40,40,40,39,39,38,36,35,34,32,30,30,30,31,30,29,28,26,22,18,16,
-14,13,12,11,10,9,10,9,8,6,6,5,5,4,3,3,3,2,2,1,1,1,0,0,0,0,1,5,15,33,58,80,96,110,119,119,114,108,104,102,101,100,101,101,101,102,101,104,
-112,119,122,117,108,97,84,72,62,55,54,59,68,82,98,111,124,151,190,231,250,239,203,169,160,162,166,168,166,156,135,117,111,110,115,123,133,140,144,144,137,128,121,117,118,122,128,133,
-137,140,142,145,149,154,158,161,165,169,172,174,177,180,182,184,187,188,189,190,190,191,193,197,200,201,201,202,202,208,215,218,217,216,214,212,209,197,180,174,171,168,164,160,158,154,149,143,
-136,126,113,98,76,53,34,23,16,12,11,12,19,33,50,64,16,32,54,72,86,97,103,105,105,105,105,104,104,105,105,104,97,80,60,42,29,19,11,7,9,18,40,67,91,109,119,122,
-120,114,103,89,76,71,72,73,76,77,78,79,76,65,47,30,23,21,23,29,39,51,66,85,100,109,104,88,78,78,79,80,82,79,61,46,47,48,49,50,50,51,51,51,52,51,50,50,
-49,48,47,45,44,43,40,38,36,34,33,31,29,28,27,25,23,22,20,18,16,15,14,13,12,11,9,8,7,7,6,5,5,4,4,3,2,2,2,1,0,0,0,0,0,0,1,7,
-19,34,53,72,86,97,103,105,105,105,105,105,105,106,107,107,101,86,67,51,40,33,27,25,27,37,58,84,107,124,134,136,134,128,121,130,166,219,243,208,155,121,109,111,113,108,97,88,
-86,89,94,102,112,121,133,147,159,166,165,157,153,156,160,163,166,168,162,158,162,165,169,172,174,177,180,183,185,186,188,189,190,191,192,192,192,192,193,192,192,191,191,189,188,186,186,184,
-182,178,173,168,163,156,149,143,138,133,128,124,120,115,108,101,92,82,72,61,51,42,33,26,19,14,9,5,2,0,1,4,0,0,4,17,34,49,57,58,58,54,49,47,48,53,58,58,
-51,41,33,34,39,44,51,58,68,87,111,121,116,100,81,66,54,40,27,17,11,9,9,11,11,12,14,14,15,15,14,15,16,18,20,22,24,27,31,40,54,72,81,76,72,73,75,76,
-79,77,66,57,59,60,61,61,62,62,63,63,62,62,62,61,59,58,57,55,54,52,50,48,46,43,40,38,35,33,33,31,29,26,24,22,20,18,17,16,14,13,11,10,8,8,7,6,
-5,4,4,3,2,2,2,2,2,1,0,0,0,0,0,0,0,0,4,17,34,49,57,58,58,55,50,48,50,56,62,63,58,49,44,47,54,61,68,77,88,106,127,138,134,121,106,93,
-83,72,61,52,55,97,178,232,229,190,125,79,75,81,86,92,97,103,107,112,116,120,125,132,143,155,162,161,161,163,167,170,173,175,171,169,172,175,177,181,182,184,186,187,189,190,190,191,
-191,192,193,192,192,191,191,191,190,188,187,185,184,182,180,177,174,169,164,159,154,148,142,135,130,125,120,114,110,105,99,92,85,76,66,56,47,38,29,22,17,13,9,5,3,2,0,0,
-3,16,38,58,72,81,83,83,83,81,76,74,77,90,101,102,101,100,100,106,113,116,118,120,121,117,101,73,45,25,12,6,4,2,2,3,4,5,6,7,7,9,10,12,14,16,18,19,
-22,25,27,30,32,34,35,37,39,44,48,51,53,56,58,61,63,64,66,67,69,70,72,72,73,74,74,74,73,74,72,72,70,68,67,65,63,61,59,58,55,54,56,56,52,48,44,39,
-34,31,29,27,25,22,19,17,15,14,12,11,10,7,7,6,4,3,3,3,2,3,3,2,2,1,1,1,0,0,0,0,3,17,39,58,72,81,83,83,84,82,77,75,80,94,106,108,
-108,108,110,117,126,131,134,138,140,138,125,102,81,64,55,51,50,51,54,55,56,59,88,147,204,239,226,169,127,109,106,109,115,120,125,131,135,138,141,144,147,151,155,158,161,163,166,169,
-171,174,176,178,181,183,184,186,187,188,189,190,190,190,190,190,191,191,191,189,189,188,187,186,184,183,183,182,180,177,173,169,164,159,153,149,143,136,129,122,117,111,105,98,93,88,82,75,
-68,61,52,44,38,31,23,19,14,10,7,4,3,1,0,0,50,74,88,86,76,67,62,61,63,69,74,75,79,93,104,105,105,104,102,97,91,85,78,70,62,47,26,9,1,0,1,1,
-3,4,5,6,6,7,8,10,11,12,14,16,17,19,21,24,27,30,32,34,37,40,43,45,48,51,54,57,61,64,67,70,74,77,81,88,96,101,103,104,105,105,105,105,105,105,104,103,
-102,100,98,97,92,85,75,69,64,69,86,93,90,85,80,74,62,50,41,35,31,29,27,26,24,26,31,34,36,36,35,33,30,25,19,13,7,3,1,1,1,1,0,0,0,0,0,17,
-53,77,88,86,76,67,62,61,64,70,75,77,83,97,110,113,115,116,115,114,112,109,106,101,96,87,75,70,73,76,78,80,87,104,120,126,127,134,155,178,196,224,248,248,230,204,177,153,
-139,139,143,146,150,153,157,159,162,165,167,169,172,174,175,178,180,182,183,185,186,187,188,189,189,189,190,190,190,190,189,189,188,187,186,184,183,181,179,178,176,176,183,185,183,180,175,170,
-163,153,144,136,129,123,117,111,106,102,102,115,121,117,113,108,102,93,78,61,40,25,17,11,6,2,0,0,0,0,0,10,94,80,54,31,16,9,6,6,7,11,14,15,16,23,27,28,
-28,28,26,21,16,12,9,6,3,1,0,0,1,2,3,3,4,5,6,7,8,9,10,11,13,15,17,18,20,23,26,29,32,34,37,41,44,46,49,53,58,66,77,85,90,94,99,111,
-129,139,146,164,184,192,194,194,194,194,194,195,195,194,194,194,193,192,192,190,186,170,144,118,98,87,88,89,88,87,87,89,88,85,78,70,63,61,62,62,61,63,68,80,91,93,92,90,
-88,85,78,69,56,39,24,13,6,3,2,2,5,14,39,79,89,75,53,31,16,9,6,7,8,13,17,19,24,31,39,43,46,50,52,53,54,55,55,58,70,90,121,154,175,182,183,184,
-192,211,226,229,230,233,242,247,247,247,248,252,255,255,249,230,201,186,179,173,171,169,170,172,174,175,177,179,180,182,184,186,186,187,188,189,189,189,190,190,190,189,189,188,187,187,186,184,
-183,181,179,177,175,173,170,167,165,164,169,169,166,165,164,163,160,156,149,139,131,126,123,119,115,111,119,185,220,217,216,215,213,210,205,195,170,143,132,119,103,72,39,19,6,11,34,65,
-49,17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,3,4,5,5,6,6,6,7,8,9,12,14,16,17,19,21,25,28,31,33,
-36,39,42,46,50,57,69,82,104,137,167,183,187,189,193,207,224,232,235,243,249,249,249,250,250,250,250,250,250,249,250,250,250,249,249,250,249,246,235,217,194,163,129,105,92,83,74,71,
-72,76,79,80,80,78,73,69,66,60,54,61,71,73,72,70,71,75,81,88,92,92,83,71,57,48,44,47,57,73,90,80,45,19,4,0,0,0,0,0,0,1,3,5,7,11,14,18,
-23,28,34,40,48,60,77,105,152,195,226,243,247,248,248,248,249,247,240,238,239,237,230,215,210,210,212,217,229,242,250,254,249,243,236,227,218,207,202,202,199,194,191,189,188,187,188,189,
-190,190,191,190,190,190,190,189,188,187,186,185,184,182,179,177,175,173,171,168,164,162,158,154,151,148,145,141,137,133,130,129,129,130,129,128,124,119,113,107,101,93,89,113,130,128,126,123,
-122,124,132,149,176,189,186,184,185,192,189,177,146,135,127,103,119,73,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,16,26,30,33,34,34,
-35,34,30,23,17,14,13,14,15,17,20,24,27,30,33,37,41,47,54,66,86,120,158,183,207,233,246,249,249,249,250,250,247,242,241,236,225,217,216,216,217,217,217,217,217,217,217,217,
-216,215,214,213,216,228,241,248,250,243,224,201,187,170,144,126,114,95,80,74,64,54,45,39,35,31,25,23,24,21,21,19,18,20,24,31,43,59,74,85,88,90,90,89,87,81,62,30,
-3,0,0,0,0,0,1,2,2,3,5,7,11,15,18,22,29,39,49,66,98,142,179,211,239,250,245,232,217,213,213,214,212,199,180,171,169,166,156,145,142,145,151,157,171,189,210,227,
-239,247,252,253,252,248,245,245,241,233,228,221,211,201,195,193,191,191,190,189,188,188,187,186,184,183,180,178,176,174,171,168,165,162,159,155,151,146,142,138,135,132,128,124,123,124,121,117,
-114,111,108,107,105,101,91,78,66,56,49,44,42,40,37,34,32,31,31,36,48,65,77,86,94,107,128,155,184,190,194,180,145,174,178,129,91,53,14,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,1,1,11,38,52,53,52,53,53,53,55,58,58,55,49,42,35,31,38,47,51,53,57,61,72,91,110,128,157,191,224,243,248,249,242,224,210,208,209,211,207,
-194,183,182,177,167,163,163,165,166,167,167,167,167,166,166,164,162,160,158,155,155,164,178,195,215,234,247,250,249,247,238,230,223,202,182,168,139,105,78,62,56,54,51,44,33,23,17,15,
-11,9,7,5,6,9,16,26,35,43,45,42,34,20,7,0,0,0,0,0,0,0,1,1,2,3,5,8,11,17,30,54,82,105,128,163,204,237,249,249,237,211,187,170,157,153,154,155,
-155,151,147,146,145,143,139,136,135,138,141,147,153,161,171,184,197,208,221,231,240,247,248,249,251,253,253,251,245,234,225,216,208,202,197,194,191,186,182,180,178,176,172,169,166,163,160,156,
-151,147,144,140,138,139,139,145,151,151,148,152,164,174,178,179,181,184,184,185,183,179,168,149,126,103,82,63,44,30,22,20,18,16,13,11,9,11,17,25,33,38,39,37,35,30,43,89,
-5,28,88,144,171,180,152,113,87,63,41,33,28,26,26,26,26,26,26,26,26,31,51,73,80,83,93,98,95,94,95,97,102,106,104,108,116,121,123,124,132,154,169,171,169,171,173,185,
-208,223,232,243,249,245,231,215,207,187,161,151,152,156,157,156,153,152,154,157,159,162,164,166,167,168,169,169,168,167,166,165,162,159,156,153,149,146,144,145,153,170,190,205,211,224,236,239,
-244,249,249,249,239,220,195,176,170,169,167,159,135,105,90,73,54,41,36,29,19,9,4,2,1,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,3,6,10,19,38,71,120,168,
-205,223,233,245,250,238,214,192,164,136,127,127,126,126,127,128,129,131,135,140,146,151,156,159,159,159,159,160,161,165,169,174,179,183,189,197,206,215,220,222,228,235,240,245,251,253,252,248,
-244,236,230,228,222,210,196,185,178,175,171,168,165,161,157,153,152,158,165,172,181,190,200,213,219,218,218,226,235,240,244,245,246,247,246,247,246,245,243,238,229,215,195,169,131,90,58,37,
-21,13,9,6,4,2,0,0,0,0,0,0,0,0,0,0,15,9,17,35,70,127,183,207,215,215,206,195,179,173,174,174,173,173,173,173,174,179,197,216,221,221,221,221,221,221,221,224,
-231,232,221,218,220,222,224,227,235,246,250,250,248,248,248,249,248,244,241,234,222,206,187,177,174,170,168,170,172,174,174,174,173,172,172,173,176,179,180,182,184,184,185,185,184,184,184,182,
-179,177,174,170,166,161,156,149,145,141,141,142,141,148,158,161,171,189,200,214,231,242,247,247,246,246,246,245,239,227,219,206,183,166,159,148,119,87,61,40,30,28,27,27,27,26,26,26,
-25,24,24,25,24,25,30,48,71,82,94,121,157,197,233,247,244,236,231,218,193,160,132,120,115,114,118,121,123,124,126,126,127,129,129,131,134,138,144,152,160,167,172,175,177,178,182,186,
-191,196,200,204,209,213,216,217,218,221,223,228,236,243,248,251,252,252,252,252,251,247,238,226,219,216,215,212,211,207,202,204,214,226,235,240,244,246,247,246,244,243,243,238,227,211,201,196,
-192,187,184,182,180,179,185,203,221,233,237,233,223,212,191,162,129,102,83,63,45,35,30,27,26,25,25,25,25,25,26,24,109,114,129,143,161,187,209,224,234,245,251,253,251,250,251,250,
-250,250,250,250,250,250,246,237,232,232,232,231,231,230,230,229,227,227,227,227,228,228,229,228,226,211,194,192,198,205,212,217,214,208,203,193,181,173,169,168,170,173,177,179,182,185,189,193,
-196,196,195,194,193,191,190,189,189,188,187,188,188,188,189,188,187,187,185,182,180,175,171,165,159,152,145,138,132,126,120,115,114,117,120,128,144,164,184,194,192,188,187,193,213,228,234,239,
-244,246,245,244,235,220,198,171,158,156,156,155,156,155,155,155,155,154,154,154,154,154,162,186,210,219,224,236,244,244,227,194,161,141,136,127,116,109,111,117,123,127,130,132,133,135,136,134,
-132,132,132,132,134,135,136,140,145,151,160,170,179,187,197,206,215,220,221,221,219,218,216,216,214,214,213,212,214,217,221,227,232,236,238,237,238,245,249,250,250,250,250,249,249,248,247,248,
-248,243,237,230,219,207,194,176,160,152,148,137,117,93,77,73,71,71,69,68,67,65,66,80,101,125,152,177,187,196,220,238,240,232,220,203,186,173,163,157,155,156,156,155,153,150,141,125,
-227,232,238,243,245,245,240,233,226,220,204,183,175,178,181,185,190,196,199,200,203,202,188,166,156,154,155,154,153,156,158,151,139,132,126,121,118,119,119,120,117,104,96,106,126,147,165,176,
-176,168,155,143,135,135,137,141,146,152,159,164,170,176,182,187,193,195,196,194,190,183,175,168,161,155,151,151,152,156,160,165,171,176,182,184,185,185,182,178,173,167,161,155,151,146,140,134,
-131,127,122,119,116,116,119,119,114,107,100,94,98,111,120,136,160,175,179,190,217,234,243,246,245,245,245,245,245,245,244,244,245,245,244,245,245,244,246,245,237,230,225,212,191,167,133,106,
-100,108,120,131,141,149,155,160,164,166,168,169,169,172,173,167,158,152,147,143,141,141,142,143,146,152,160,170,183,195,207,215,217,215,208,202,196,193,190,188,187,186,185,183,182,181,182,185,
-190,199,205,208,211,214,220,224,223,219,216,213,212,212,212,211,205,190,170,151,135,116,97,82,67,58,55,55,56,57,54,54,58,61,61,61,60,58,56,56,54,54,60,74,90,89,104,144,
-185,205,210,215,227,239,244,246,246,246,245,245,245,244,239,231,225,220,198,181,176,170,155,125,102,92,92,97,105,114,122,129,135,137,137,136,133,131,126,120,118,118,119,119,124,137,147,148,
-144,138,129,119,113,112,111,112,115,121,131,140,147,150,148,138,124,114,109,109,114,121,129,138,145,153,160,168,173,178,179,178,174,166,155,142,129,117,106,96,89,84,79,77,77,81,88,97,
-109,124,139,154,167,178,184,187,186,185,182,179,175,168,161,154,145,135,125,118,111,104,98,93,91,90,86,71,47,37,36,38,45,49,50,61,87,114,145,168,174,174,174,173,173,173,172,172,
-173,172,172,172,172,172,170,154,122,105,116,125,123,121,122,131,142,151,158,163,167,172,176,179,182,184,185,187,189,196,201,201,198,195,189,183,179,178,177,178,180,185,191,196,200,202,201,195,
-188,181,176,173,172,172,171,170,169,167,165,164,162,159,155,153,152,154,158,164,173,182,188,194,196,191,186,180,172,168,167,164,160,155,147,139,132,123,113,107,102,97,99,102,98,89,80,73,
-64,55,47,44,41,40,40,40,43,47,47,35,17,17,19,27,49,74,87,89,98,119,144,160,170,174,175,175,177,184,196,212,83,85,64,42,37,36,31,17,6,14,64,108,115,110,104,95,
-83,71,62,55,48,47,47,47,47,48,49,51,58,71,85,101,119,135,143,147,151,160,167,170,172,174,176,167,146,126,108,95,91,94,103,113,121,130,139,147,155,163,169,174,176,174,164,147,
-125,100,75,54,38,30,26,28,30,27,26,23,21,20,22,26,32,43,57,76,100,126,149,167,180,187,192,192,189,183,177,170,158,146,132,120,110,102,93,87,83,81,77,69,56,48,42,37,
-31,26,21,18,18,21,30,39,41,40,38,38,38,38,38,37,37,37,36,36,35,35,34,27,15,21,72,116,126,124,123,122,118,115,117,120,122,127,134,138,143,145,147,150,153,160,166,174,
-183,190,195,196,198,202,205,207,208,209,210,205,192,180,169,161,156,156,158,159,160,160,160,159,157,155,153,150,147,145,141,136,132,127,123,122,126,138,156,180,194,193,187,174,156,146,142,138,
-135,132,131,129,130,132,133,132,134,141,151,153,144,129,116,99,78,58,43,32,26,22,21,20,22,27,30,26,15,11,12,10,7,8,11,12,10,11,17,24,30,33,35,36,36,37,44,56,
-1,3,1,0,0,0,0,0,0,4,38,60,51,39,29,21,12,6,1,0,0,0,0,1,2,3,5,6,8,12,17,25,38,51,62,72,83,99,118,137,151,161,167,165,153,139,125,114,
-109,108,113,120,129,137,147,155,163,170,173,171,162,143,117,85,55,30,15,7,4,6,8,10,12,10,7,4,3,2,2,1,1,2,5,11,24,45,74,105,136,160,178,190,192,191,191,190,
-185,179,172,163,155,148,141,135,131,126,122,119,115,112,109,100,88,81,73,63,58,56,54,50,42,31,18,8,2,0,0,1,0,0,0,0,0,0,0,0,0,10,45,69,65,58,57,57,
-58,62,70,78,86,93,101,107,112,115,118,119,120,121,123,127,131,138,143,146,152,160,170,181,190,195,198,197,189,179,169,159,151,148,146,144,144,144,143,142,140,138,136,133,129,126,122,119,
-118,117,118,122,129,143,160,172,169,152,127,104,88,78,73,69,65,61,58,55,55,58,62,63,71,89,111,133,153,161,160,154,141,127,115,104,95,89,85,83,83,83,83,83,83,84,84,76,
-67,61,55,48,45,45,43,41,34,24,13,3,0,0,0,0,0,0,0,0,0,0,0,5,9,14,21,28,28,26,24,24,23,23,23,22,20,14,10,7,5,3,2,3,5,6,8,9,
-11,13,16,21,26,35,45,59,77,93,110,129,147,162,170,171,165,157,150,147,148,152,159,166,171,173,167,153,127,93,58,29,13,6,4,5,6,6,6,4,3,2,0,0,0,0,0,0,
-0,0,0,0,0,3,16,41,76,114,148,176,197,198,189,181,177,176,176,177,175,171,166,161,158,154,150,146,144,142,139,129,117,111,105,100,104,104,100,100,95,82,69,53,34,19,7,2,
-1,2,1,0,0,0,1,7,12,18,28,39,42,45,50,56,64,72,80,88,94,96,99,103,104,105,107,108,109,109,108,107,105,106,105,104,105,108,113,121,131,140,151,163,175,184,189,188,
-181,172,160,150,142,138,135,133,131,127,126,123,120,119,121,128,135,143,151,157,160,160,148,126,101,77,60,50,44,40,35,32,28,24,21,18,14,15,21,34,53,75,94,110,122,126,121,114,
-108,109,116,124,126,123,119,117,117,117,116,116,117,118,118,109,98,93,90,87,93,94,93,93,89,77,64,48,30,15,5,0,0,0,0,0,3,24,51,68,78,84,89,94,98,100,100,100,
-100,101,102,101,96,88,79,70,57,45,35,26,22,21,21,24,26,27,30,32,36,41,46,54,67,81,96,113,134,157,181,194,197,198,196,192,187,186,188,189,186,177,159,129,88,49,22,8,
-5,4,3,3,3,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,10,30,64,103,141,182,214,210,184,161,150,146,143,139,133,125,118,111,105,99,94,88,84,78,70,
-62,57,54,54,58,58,54,56,57,56,60,63,58,51,31,6,0,1,0,0,1,23,51,69,80,86,92,100,107,111,115,120,125,130,135,139,140,139,137,134,128,122,117,111,107,105,104,103,
-102,101,100,99,99,99,100,104,110,119,128,139,153,171,189,199,200,199,195,187,177,171,168,163,157,153,150,149,149,150,155,160,161,158,151,140,125,104,80,60,47,40,37,35,31,28,25,22,
-18,15,14,18,27,42,63,81,90,87,77,64,49,37,27,20,17,20,29,39,45,45,43,42,42,43,43,43,44,44,44,38,33,32,33,36,44,46,43,47,49,49,56,60,55,48,29,5,
-0,0,0,0,11,67,116,124,119,116,114,110,107,105,105,105,105,105,106,107,111,117,120,122,121,117,110,100,93,90,90,92,93,95,97,99,103,107,111,119,129,138,146,152,159,167,174,181,
-185,190,193,197,198,199,199,196,187,169,137,95,52,20,6,3,2,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,7,24,58,100,145,202,237,231,
-201,167,147,133,122,112,102,93,85,77,70,63,55,48,42,36,30,26,22,19,17,15,12,10,9,9,13,20,26,34,28,9,3,4,2,1,11,66,115,123,119,117,115,114,113,114,117,120,
-124,129,134,138,145,152,157,161,162,160,156,150,144,141,140,140,138,138,138,137,136,137,139,143,148,153,157,160,163,168,173,177,179,179,179,179,178,177,176,172,165,160,156,155,153,149,141,129,
-113,98,83,69,58,48,43,40,37,33,28,24,20,17,15,14,18,28,43,61,80,92,92,76,52,31,16,8,3,2,8,18,25,27,28,31,35,37,35,29,22,16,13,10,8,5,3,3,
-3,1,0,0,0,0,0,0,0,2,6,12,19,28,23,4,0,0,0,0,6,47,78,67,51,44,40,34,29,28,28,28,28,28,28,30,36,45,54,65,79,92,103,113,119,122,123,124,
-125,126,128,130,132,134,135,135,134,132,130,131,131,131,131,132,137,144,153,160,168,175,179,177,165,139,99,55,20,4,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
-1,1,1,1,1,0,1,0,0,7,30,69,118,176,230,251,246,228,208,188,169,158,150,144,139,133,126,122,118,111,98,83,68,57,49,44,41,39,37,35,33,34,50,74,82,83,82,82,
-80,80,80,79,84,116,138,130,120,116,113,110,109,109,112,116,119,123,127,132,138,146,153,160,168,175,181,185,187,187,186,187,186,185,185,185,184,184,184,182,180,177,174,172,169,164,160,163,
-170,175,176,174,171,167,164,162,160,161,161,160,156,149,138,131,128,125,124,127,131,136,146,156,162,158,149,140,133,129,130,137,149,161,170,173,174,172,162,143,128,124,127,134,139,141,150,164,
-171,174,175,173,174,177,176,171,163,152,144,136,124,111,99,90,75,52,33,25,20,12,6,0,0,0,0,0,0,0,0,0,26,13,8,7,5,9,13,8,2,0,0,0,0,0,0,0,
-0,0,0,0,0,0,3,6,11,19,28,39,49,54,57,58,60,61,64,67,69,72,73,73,72,72,74,78,83,89,95,103,113,122,132,142,152,161,165,163,147,115,72,31,7,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,2,17,50,99,155,212,246,252,251,250,246,239,235,233,232,231,230,229,228,227,224,216,204,
-189,175,166,163,161,161,160,159,158,161,184,213,219,218,218,218,218,217,218,218,217,218,218,216,216,216,216,216,217,217,218,219,219,220,221,222,222,223,224,224,226,228,230,232,233,234,234,234,
-234,233,233,233,233,233,232,231,229,228,227,226,226,223,221,223,229,234,237,239,239,235,232,231,231,231,231,231,231,228,226,227,229,229,229,227,225,223,222,220,215,201,182,170,169,175,181,184,
-180,171,160,147,127,105,101,116,135,145,163,192,218,231,237,241,244,246,247,247,247,245,242,240,238,238,240,241,240,233,224,210,191,173,155,134,109,84,65,62,74,91,105,110,105,91,67,43,
-154,138,129,123,117,105,95,85,69,48,31,25,22,16,8,2,1,1,0,0,0,7,13,11,8,5,4,4,7,9,12,14,16,18,22,25,28,32,35,41,47,57,68,78,87,95,104,112,
-121,130,140,150,157,165,169,165,146,112,67,27,6,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,13,43,86,136,199,241,
-249,249,247,243,239,240,240,239,238,238,236,236,235,235,239,244,246,247,246,246,246,246,246,245,245,246,247,240,231,229,229,229,228,228,229,228,228,228,228,227,228,228,228,229,229,229,230,230,
-230,231,231,231,231,233,234,233,233,232,232,231,231,232,232,232,232,231,231,230,230,230,230,229,229,230,231,232,233,234,236,238,237,238,238,234,227,218,206,190,174,160,151,146,145,151,156,153,
-145,136,129,122,117,115,113,111,106,100,94,94,92,86,74,58,38,20,10,4,0,0,0,0,1,4,12,32,58,80,97,110,120,130,134,132,153,184,202,208,206,197,193,197,209,225,235,238,
-239,238,237,232,221,207,197,199,211,225,234,235,234,226,207,180,245,242,238,236,235,233,226,213,196,177,162,153,142,126,104,89,83,74,55,32,22,36,49,49,46,38,30,22,16,13,13,15,
-17,19,22,28,36,44,51,62,78,95,111,122,129,135,141,147,154,161,167,173,178,182,183,178,160,126,80,37,11,3,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,
-0,0,0,0,0,0,0,0,0,1,14,45,89,131,187,233,243,240,227,198,175,168,163,157,153,148,142,138,134,132,139,151,163,175,180,180,179,179,177,176,177,176,167,135,106,99,99,100,
-98,98,98,97,96,97,97,96,98,99,98,100,101,101,102,106,107,108,111,111,116,134,144,145,143,141,135,130,125,121,119,118,117,116,117,117,118,122,125,129,137,146,153,157,159,160,164,166,
-166,162,157,146,131,121,111,102,97,93,91,89,88,89,89,88,86,83,81,81,82,85,88,88,86,82,73,62,45,27,14,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
-2,4,5,4,14,40,69,86,95,91,83,78,80,92,108,120,134,144,154,166,182,202,219,233,239,233,228,228,230,236,244,248,194,201,200,197,197,206,222,232,238,242,244,242,239,236,230,226,
-221,210,187,158,130,114,108,108,107,93,71,57,51,46,43,43,45,48,56,70,87,99,106,111,119,124,126,126,130,136,142,148,155,161,167,173,178,183,184,181,167,138,94,49,17,4,1,1,
-1,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,4,22,59,102,145,197,226,219,201,177,149,129,119,110,101,92,84,76,68,61,56,53,53,
-54,57,58,55,51,50,49,46,45,43,37,23,12,9,9,8,7,7,6,5,4,5,5,5,6,6,6,8,9,10,12,14,17,19,21,23,27,45,58,61,66,72,74,74,71,65,60,57,
-56,55,60,70,83,92,95,97,102,102,98,94,92,92,92,92,92,90,87,86,85,85,85,85,86,86,85,84,83,83,82,81,80,80,78,77,74,67,58,50,42,32,21,14,7,3,2,1,
-2,2,4,7,9,9,10,10,10,9,9,8,6,3,1,0,0,0,0,0,0,0,1,4,6,7,6,5,5,5,6,7,12,20,28,31,35,48,71,101,131,141,134,128,127,134,152,176,
-53,73,85,87,81,80,92,111,130,147,163,179,191,200,206,214,225,236,242,243,237,226,218,217,214,195,154,116,93,75,64,60,60,63,75,93,104,107,104,98,92,85,81,81,86,95,103,111,
-120,129,138,148,156,164,170,172,165,144,108,64,27,6,0,0,0,0,0,0,0,0,0,1,1,2,2,3,3,3,3,3,3,3,3,4,4,4,3,3,4,17,46,89,134,182,214,207,
-184,164,148,135,123,113,104,95,87,78,70,62,55,49,43,38,32,29,24,21,17,15,13,11,9,7,5,4,4,3,2,2,1,0,0,0,0,0,0,0,0,0,0,0,1,3,3,5,
-7,10,11,13,14,16,18,20,23,29,36,46,54,58,61,62,61,62,70,85,92,93,87,75,62,49,37,30,27,26,26,26,27,28,28,27,27,26,25,25,25,24,23,22,22,21,20,19,
-18,18,18,17,17,17,22,33,42,47,53,57,59,59,60,60,60,61,66,75,81,83,83,83,83,83,83,80,75,67,59,51,38,24,12,3,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,3,11,23,29,28,25,24,25,35,0,3,6,7,7,9,11,16,22,27,31,36,46,60,71,79,94,121,150,178,202,218,223,224,228,238,237,219,195,164,129,100,
-78,56,44,44,49,50,49,48,50,52,58,65,76,89,99,107,116,125,134,143,152,161,167,171,170,159,136,99,57,23,5,0,0,0,0,0,1,2,3,5,6,8,9,10,12,12,12,13,
-12,12,12,11,11,11,10,11,22,49,89,132,174,205,206,195,188,181,171,156,139,120,104,93,84,76,69,62,55,48,43,38,33,30,26,22,18,16,15,12,10,8,6,6,6,4,4,3,
-2,1,0,0,0,3,7,10,9,6,4,2,1,0,1,3,6,7,9,10,11,12,12,13,13,13,13,15,17,20,25,25,24,24,28,33,33,29,24,17,11,6,5,6,11,16,19,19,
-20,20,20,19,19,18,14,9,5,3,3,3,3,2,4,7,10,12,17,25,40,62,91,116,129,134,136,139,140,140,140,140,140,140,143,145,146,146,146,146,146,146,146,146,145,142,140,136,
-126,109,87,63,38,16,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,14,28,44,60,71,77,75,66,56,44,32,21,15,12,
-19,42,79,115,143,164,173,175,183,209,234,245,248,245,235,221,203,171,122,67,35,29,31,37,44,55,72,91,111,126,135,142,147,153,159,166,171,176,180,182,182,179,167,144,109,69,36,15,
-5,3,3,4,6,7,9,11,12,13,13,13,14,14,15,15,15,15,14,12,10,10,14,28,55,92,130,165,190,195,189,188,189,192,192,188,177,158,134,113,94,79,67,58,52,46,40,36,
-32,28,24,20,17,15,12,11,9,7,6,5,4,2,1,0,2,6,16,31,46,61,73,80,79,71,60,50,38,26,15,6,2,3,5,7,8,8,9,9,9,10,10,9,8,13,25,22,
-11,5,3,3,2,3,2,2,3,9,21,39,57,71,76,76,76,75,75,75,76,74,69,58,48,43,43,43,42,45,57,72,81,87,91,101,119,138,154,159,151,133,119,113,112,112,112,112,
-111,110,107,99,91,89,89,89,89,89,89,92,98,105,112,122,134,145,148,143,124,92,61,36,18,6,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-45,64,87,104,113,115,114,113,116,120,125,123,122,126,129,134,149,170,198,216,222,224,225,227,227,231,235,239,243,247,253,255,255,254,242,201,135,92,65,55,65,86,108,127,134,134,135,140,
-146,151,157,163,169,174,181,187,190,191,189,179,161,132,98,64,36,18,9,6,6,8,9,11,10,6,5,5,5,5,5,5,4,4,3,3,7,18,40,70,106,137,162,178,181,176,170,166,
-164,164,168,175,183,186,180,165,145,123,101,81,64,50,42,36,32,29,25,21,20,18,18,18,16,13,10,9,8,10,21,31,44,63,89,106,116,120,119,118,118,120,120,118,112,102,86,64,
-39,18,6,3,3,4,5,5,5,5,5,5,5,15,42,51,42,28,19,15,13,13,13,18,29,48,69,86,89,83,77,76,75,75,76,75,75,77,81,85,87,87,87,87,86,90,102,114,
-119,115,104,97,96,95,94,92,71,44,30,25,24,24,24,23,23,22,20,15,11,10,10,11,10,11,11,12,15,20,24,33,48,68,92,116,138,146,139,122,97,71,50,30,15,6,2,1,
-1,1,1,1,2,2,5,7,7,4,4,3,3,4,9,19,113,117,115,107,102,103,115,138,164,186,203,208,216,235,245,247,245,233,208,173,145,127,118,117,117,118,118,120,124,133,148,166,
-190,221,248,255,241,216,176,136,114,101,96,96,91,87,91,97,105,113,121,130,138,147,156,166,176,182,186,186,182,172,154,129,99,68,43,25,12,6,2,2,0,0,0,0,0,0,0,1,
-3,8,16,29,51,76,107,135,157,172,180,179,174,167,160,151,143,136,131,131,138,151,163,173,176,173,163,145,124,104,92,86,82,80,78,76,75,77,85,91,87,78,70,67,66,78,97,106,
-111,120,117,104,86,69,57,49,50,58,68,80,93,107,117,121,111,87,59,37,20,10,3,0,0,0,0,0,0,2,15,31,44,50,49,47,47,48,49,52,59,61,57,52,38,24,18,16,
-17,18,17,16,17,17,23,32,41,44,45,45,44,45,49,51,49,42,31,23,18,15,13,13,8,1,0,1,3,5,6,5,5,5,5,4,3,1,0,0,0,0,0,0,0,0,0,0,
-1,7,16,32,59,90,116,135,144,143,133,116,95,76,66,65,66,67,66,65,65,68,76,83,80,70,64,60,59,64,77,93,126,129,138,153,173,198,220,238,248,244,231,223,204,176,156,146,
-144,144,134,117,96,74,51,32,18,11,7,6,7,10,16,25,47,88,150,205,231,245,246,228,192,141,110,92,73,66,72,80,89,97,105,113,122,132,140,148,157,166,173,179,183,185,182,175,
-161,142,120,98,77,60,48,40,35,32,33,37,42,47,53,60,71,85,101,120,140,157,171,180,184,183,180,174,168,160,151,143,135,126,117,108,102,101,104,114,127,141,153,163,168,165,160,158,
-157,156,155,154,155,156,159,161,155,140,130,124,122,120,112,105,95,74,47,26,12,4,0,0,0,2,6,12,20,32,49,73,101,121,128,122,107,89,69,51,40,34,29,27,26,25,23,26,
-34,45,60,81,97,103,103,103,98,92,85,81,77,76,77,77,76,77,77,76,77,77,76,77,79,78,79,80,79,79,79,79,77,77,77,76,77,79,82,87,92,96,101,106,112,115,117,117,
-116,116,117,115,111,105,97,90,85,81,79,79,79,78,79,79,78,77,77,77,81,90,104,121,140,156,170,179,183,181,180,185,190,191,188,180,169,161,160,162,158,147,141,140,143,143,139,134,
-205,219,232,242,247,250,248,231,188,129,89,71,46,22,10,11,25,48,73,96,112,120,117,104,86,71,56,41,27,19,14,12,12,18,36,70,110,164,216,240,245,232,217,197,153,107,83,80,
-86,93,101,109,117,125,134,142,149,157,164,172,179,185,189,192,191,187,182,174,165,155,149,144,140,137,137,139,142,147,153,161,169,178,187,194,200,203,203,201,196,189,181,171,160,151,143,135,
-126,117,109,100,92,84,77,75,78,87,104,128,156,171,171,170,167,163,159,153,142,133,127,118,101,83,74,70,67,62,50,38,21,9,2,0,1,8,17,29,48,67,76,76,77,77,79,86,
-104,142,180,198,203,204,200,192,184,177,171,165,160,157,155,154,154,155,167,193,211,216,216,216,215,215,215,216,216,216,217,217,216,217,217,216,216,216,216,217,216,216,216,217,216,217,217,217,
-217,217,217,219,220,222,226,231,233,234,235,237,238,238,239,239,238,238,238,238,238,237,234,231,228,224,220,219,217,216,217,217,217,217,217,217,215,215,214,215,217,221,225,232,240,243,244,247,
-249,249,247,242,229,213,203,200,198,199,204,212,217,214,205,202,253,250,241,231,222,202,155,91,36,6,0,0,0,0,0,0,0,1,9,22,40,63,86,106,118,121,121,116,103,92,81,75,
-73,71,64,59,64,86,126,172,214,234,243,249,241,211,173,146,132,126,129,135,141,147,152,157,162,166,170,175,182,187,192,196,198,201,203,204,204,204,205,205,203,201,199,198,197,197,198,201,
-202,204,204,204,203,203,202,201,199,196,190,183,173,164,157,149,140,131,124,119,114,110,106,105,110,119,131,142,151,154,146,129,107,91,82,69,53,42,36,29,20,14,13,18,25,30,36,52,
-67,76,78,79,86,111,140,162,188,210,216,217,217,217,217,216,219,230,241,244,246,249,251,253,255,255,254,254,252,251,249,249,249,248,248,246,238,235,233,234,234,233,233,234,234,234,236,237,
-238,238,238,237,238,238,238,238,238,238,237,238,239,240,240,240,240,240,240,241,242,241,243,243,242,240,238,237,235,234,234,234,234,234,234,234,235,238,240,242,245,246,245,243,241,238,238,237,
-235,234,234,234,234,235,235,235,237,239,241,242,244,243,242,239,234,229,228,229,230,231,237,240,242,243,245,246,248,249,250,251,185,144,113,97,83,51,15,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,5,14,31,47,63,79,96,111,118,122,124,125,125,126,124,122,123,127,139,159,177,193,221,246,255,250,236,212,183,168,165,168,171,174,177,179,179,176,176,177,179,183,187,
-191,195,197,198,200,201,202,203,203,203,202,200,200,199,198,198,196,194,191,188,185,182,179,177,177,177,178,180,181,179,175,172,168,164,161,158,158,159,160,166,170,172,169,155,130,104,76,51,
-31,22,17,14,11,11,17,34,60,77,87,111,138,152,166,192,210,216,217,218,222,234,243,245,244,235,229,228,228,228,228,228,226,212,187,174,171,172,175,178,182,187,192,198,205,209,210,212,
-212,213,210,196,178,170,170,170,170,169,170,170,170,170,171,171,171,171,171,170,171,171,171,170,169,166,157,149,145,141,140,140,139,139,138,132,127,121,119,117,114,110,105,103,101,100,100,100,
-99,100,100,100,101,104,108,116,127,138,149,161,168,169,170,170,170,169,169,170,172,176,180,186,191,194,192,182,165,145,128,113,102,96,97,98,98,105,128,158,173,174,171,170,168,175,191,202,
-31,7,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,5,11,21,35,48,60,68,72,76,84,92,98,100,100,101,104,108,114,134,169,207,236,250,
-249,225,192,169,153,140,139,142,145,146,147,147,149,153,158,163,167,171,175,177,180,183,185,187,188,189,189,189,189,188,187,186,183,181,177,173,169,163,158,154,150,148,147,148,151,151,150,148,
-148,146,142,137,134,134,135,143,151,151,143,132,117,98,76,54,35,26,31,50,72,90,121,162,199,216,222,233,243,245,246,243,234,230,228,228,226,214,190,171,145,114,99,97,97,97,97,97,
-93,75,50,37,35,35,35,35,37,39,43,51,61,71,80,86,89,91,95,94,91,90,90,89,88,89,89,89,89,88,81,73,70,70,70,69,69,69,69,69,65,58,48,36,28,22,20,21,
-21,21,18,14,10,8,7,6,6,5,5,5,5,5,5,4,4,4,4,4,3,2,3,5,11,20,33,50,66,76,80,85,92,94,93,92,92,96,103,116,129,133,127,116,102,85,64,43,
-24,11,4,3,4,5,12,24,34,36,35,35,35,42,61,65,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,2,4,8,15,23,31,35,
-36,39,43,48,52,54,50,45,41,40,42,46,59,85,125,179,227,246,241,227,202,165,141,124,115,113,116,120,126,132,139,144,149,153,157,160,164,167,169,171,172,173,174,174,174,172,171,169,
-167,164,160,158,157,156,155,154,153,151,149,147,144,141,138,134,131,126,118,110,101,91,82,77,76,75,71,72,81,92,99,102,107,125,152,182,208,221,234,245,246,235,228,217,194,176,166,141,
-112,99,97,96,92,74,50,33,20,9,5,5,5,5,5,5,4,1,0,0,0,0,0,0,0,0,0,3,9,18,25,28,29,30,33,37,39,39,34,25,18,15,13,12,12,12,8,4,
-3,3,4,6,8,11,12,12,10,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,17,25,34,41,48,54,58,62,65,66,68,
-70,68,63,57,51,43,37,36,42,45,44,49,61,76,84,85,76,59,37,16,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,4,5,4,4,4,4,2,0,0,0,0,0,
-0,0,0,0,0,0,0,0,4,24,36,42,46,49,50,51,52,53,54,55,57,59,59,56,50,44,42,41,42,45,56,85,137,192,228,245,251,241,226,202,172,151,138,131,126,124,126,129,
-133,137,142,145,148,151,154,155,156,158,159,159,159,158,157,156,156,156,159,165,173,178,180,180,178,175,172,167,160,153,145,139,135,131,127,123,119,112,101,87,75,64,56,58,77,101,119,151,
-195,231,248,251,243,231,214,185,150,113,95,78,53,37,29,18,7,3,4,7,8,6,3,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,23,34,38,41,44,47,48,
-48,49,49,49,49,50,49,42,32,23,17,13,11,11,11,13,17,20,23,27,33,38,39,39,36,31,26,20,13,6,0,0,0,0,0,0,1,1,1,1,1,3,4,4,4,5,6,8,
-12,20,34,56,81,100,111,117,119,119,117,113,106,98,92,88,86,86,86,85,84,79,70,58,45,32,16,6,8,18,34,52,71,84,87,75,51,25,10,2,0,0,0,0,0,0,0,0,
-21,28,40,50,56,56,56,55,55,53,46,35,30,25,14,7,6,14,24,26,26,25,25,25,38,61,70,67,64,60,57,58,61,66,69,70,66,59,56,58,62,64,65,68,71,74,76,79,
-89,111,140,174,212,236,248,252,243,229,213,197,177,156,139,134,133,136,141,146,149,150,150,151,154,159,164,165,166,165,166,169,173,179,186,193,195,194,190,185,180,174,168,163,157,148,137,125,
-115,106,102,98,98,104,113,123,138,153,166,178,198,214,219,231,244,239,216,191,170,152,129,95,62,36,24,20,21,24,26,26,21,24,35,47,55,57,57,57,57,56,48,36,30,26,23,27,
-47,78,93,95,95,95,95,94,104,121,122,101,80,63,43,31,30,34,38,40,36,33,37,44,50,51,49,48,48,48,48,49,50,51,50,47,45,40,39,40,47,60,68,71,69,65,61,54,
-42,29,30,36,38,35,32,32,34,45,56,58,58,59,63,72,84,100,121,138,149,150,145,140,133,126,121,117,110,101,89,78,68,61,57,58,61,70,78,84,86,82,67,43,22,9,2,4,
-13,31,55,77,88,83,70,54,37,24,17,17,21,25,28,28,83,84,84,83,82,84,90,97,100,102,103,104,112,121,125,138,145,161,178,182,181,180,179,179,181,185,187,186,188,190,191,193,
-196,199,201,202,196,183,161,129,96,78,68,60,58,60,62,62,60,60,63,74,99,129,167,209,233,245,250,248,240,222,198,183,173,161,153,149,146,146,145,144,147,154,162,165,164,165,166,170,
-173,175,176,170,160,152,143,137,132,129,125,124,124,127,129,129,129,132,138,141,140,152,172,193,218,237,248,252,251,244,237,226,199,155,108,83,87,103,118,127,123,109,97,90,93,100,103,104,
-99,92,89,89,86,85,85,85,84,84,83,90,108,135,167,189,208,226,230,231,230,230,229,229,230,230,229,221,212,199,166,127,99,92,86,73,63,53,47,46,46,45,42,39,39,38,36,32,
-26,21,23,29,35,46,73,97,127,166,187,192,195,200,205,206,187,143,105,83,63,51,48,49,52,67,82,85,85,85,90,99,107,114,119,111,98,85,74,68,66,64,63,67,74,83,88,90,
-87,80,71,64,58,57,57,61,69,83,97,99,89,73,54,38,30,30,37,51,74,99,117,127,123,110,97,91,93,101,104,103,70,61,61,81,117,141,165,185,192,196,198,204,214,228,241,253,
-255,252,249,247,247,247,246,246,246,242,230,221,219,220,221,221,221,219,218,218,222,231,241,244,225,203,179,136,91,68,62,58,57,57,56,52,54,61,79,108,137,169,199,223,241,250,248,240,
-228,207,182,163,158,157,153,146,144,142,137,132,127,123,123,124,123,121,118,112,104,98,93,88,85,81,79,83,92,108,128,151,180,206,226,234,236,242,248,251,249,241,227,213,202,189,179,162,
-136,113,97,87,88,99,114,127,134,130,116,102,94,92,92,92,90,79,62,43,30,28,27,25,26,40,85,156,207,237,250,241,227,201,176,167,165,165,164,162,163,162,168,187,204,220,238,244,
-235,225,205,168,135,116,101,87,80,74,66,55,47,44,39,33,41,71,115,154,177,198,220,230,231,219,208,209,211,214,214,216,229,235,216,185,132,68,22,9,11,19,27,28,29,27,29,33,
-33,33,32,23,15,10,7,5,5,5,5,8,13,22,34,46,60,71,79,83,85,86,84,82,81,85,97,112,125,132,129,116,104,99,93,85,86,97,112,125,133,129,115,100,93,90,89,88,
-99,123,162,205,228,229,219,203,195,198,198,199,203,217,241,250,250,250,246,241,239,239,241,241,243,243,228,191,147,109,82,68,63,60,57,58,65,81,111,158,201,221,238,243,216,171,131,111,
-103,100,93,83,79,81,83,86,92,103,118,136,160,195,227,239,245,248,241,232,230,230,227,220,219,213,196,180,160,145,142,141,140,138,137,136,134,132,130,127,128,134,137,153,175,195,213,226,
-239,245,241,232,228,221,205,191,170,141,120,107,104,104,104,96,88,86,79,66,61,59,57,52,50,47,38,27,20,18,17,16,14,8,2,0,0,0,0,27,80,142,204,229,208,180,139,114,
-130,141,123,92,72,67,71,73,74,74,75,77,75,78,99,138,168,184,212,228,224,212,190,158,135,121,118,120,116,108,115,141,184,225,243,233,218,205,177,152,132,101,84,81,76,68,59,55,
-78,133,178,211,234,207,127,55,17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,6,13,21,28,35,42,51,57,62,66,71,80,90,100,102,95,
-87,85,77,63,57,56,54,50,47,44,35,23,16,17,35,66,228,232,222,188,134,96,69,45,37,39,39,39,41,53,90,114,126,150,168,169,153,134,123,119,122,151,203,228,220,186,132,71,
-27,3,0,0,0,2,7,20,43,63,101,162,215,238,226,200,172,130,85,62,58,60,63,65,67,67,65,62,65,84,117,140,168,200,225,236,236,237,245,254,255,255,251,247,239,232,230,229,
-229,229,229,228,228,228,228,226,230,238,240,244,251,253,254,253,251,245,226,198,173,145,107,75,50,32,24,22,25,26,24,20,17,15,12,8,6,6,4,2,0,0,0,0,0,0,0,0,
-0,0,0,7,24,56,111,178,226,230,193,114,50,22,5,7,36,75,100,93,63,33,16,11,10,10,10,6,1,0,0,5,17,36,82,135,189,236,252,248,240,229,224,226,224,212,219,237,
-234,201,147,98,73,62,49,40,38,35,29,22,14,8,4,3,4,12,28,59,121,198,235,213,166,103,44,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,1,4,7,10,13,18,22,24,23,19,15,15,12,7,5,4,3,0,0,0,0,8,50,102,162,208,134,104,70,32,8,0,0,0,0,0,0,0,0,0,6,12,
-21,44,79,117,126,96,56,26,10,14,48,98,150,200,230,222,181,123,68,27,6,1,2,3,3,4,8,25,65,127,187,215,232,222,163,99,65,58,65,69,70,70,67,66,66,66,61,56,
-66,89,116,132,134,138,163,204,223,218,202,208,225,234,235,236,235,235,235,235,234,234,234,233,237,244,243,236,226,218,212,208,206,210,221,228,226,217,199,174,146,115,79,53,44,39,37,34,
-29,28,28,25,17,8,3,2,1,0,0,0,0,1,9,20,38,62,92,138,178,212,232,211,151,87,37,3,0,0,6,9,18,39,75,114,125,96,59,41,33,27,24,25,31,50,82,101,
-111,142,174,192,218,230,210,201,208,216,221,225,225,206,178,139,89,41,16,8,9,16,27,32,33,34,31,29,28,26,24,22,18,14,10,6,12,50,120,179,223,233,199,131,66,32,9,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,5,8,10,10,8,8,7,7,6,4,0,0,0,0,0,0,0,0,0,0,0,0,0,2,25,71,137,206,233,224,182,
-6,0,0,0,0,0,0,0,0,0,3,17,40,64,77,82,89,98,110,135,155,153,133,104,73,49,30,23,29,53,100,156,208,231,217,174,117,60,17,2,2,4,5,4,5,15,38,66,
-110,181,229,226,204,194,198,201,202,202,202,201,201,195,169,124,86,56,46,49,51,55,66,87,104,99,88,94,112,125,128,129,128,127,126,126,123,123,121,120,122,131,130,121,111,107,103,101,
-104,113,132,154,173,190,208,225,234,237,227,211,203,195,193,189,184,182,182,178,163,138,120,117,110,107,106,102,97,109,144,173,198,219,229,229,207,172,117,54,11,0,0,13,38,62,76,83,
-95,108,126,157,187,199,197,199,197,192,186,185,192,208,224,228,228,221,203,188,166,112,53,39,43,50,54,59,59,43,25,11,4,6,11,18,26,46,69,77,80,81,81,81,80,75,69,60,
-50,40,31,25,17,10,13,32,72,134,201,232,219,189,140,82,38,11,1,0,0,0,0,0,0,0,0,8,21,33,39,44,53,64,72,75,75,75,77,76,75,70,60,44,26,12,4,0,
-0,0,0,0,0,12,51,88,118,173,222,230,187,123,74,29,0,0,0,0,0,0,1,9,20,36,61,90,113,122,119,116,114,108,103,97,94,99,111,122,124,119,111,101,88,71,53,48,
-73,118,172,217,233,211,147,75,29,14,12,19,27,33,39,44,51,78,129,173,201,211,211,210,209,210,212,212,214,220,236,239,218,168,111,71,53,41,39,41,42,41,41,44,47,50,50,49,
-48,48,47,46,47,49,49,49,53,62,77,94,107,114,114,113,110,106,98,91,89,88,92,103,117,141,175,196,203,206,207,209,211,209,206,207,215,224,227,227,227,227,226,227,227,228,223,205,
-181,152,121,82,43,17,3,6,20,44,76,105,129,148,165,183,202,217,225,232,240,242,240,236,231,232,232,230,222,204,168,134,116,84,50,32,18,3,0,0,0,0,1,8,16,25,35,45,
-53,60,67,71,76,89,105,113,119,126,131,135,136,133,128,120,108,92,75,58,43,31,19,11,5,13,50,110,162,202,229,225,194,148,116,90,65,50,44,42,45,55,72,93,111,122,124,127,
-133,149,163,166,165,170,180,186,186,179,167,157,141,119,95,69,49,44,49,69,98,145,204,228,229,216,163,95,35,2,0,0,11,11,12,15,22,32,50,75,96,112,122,119,100,72,52,45,
-40,32,25,19,14,15,25,43,63,83,98,108,114,119,117,105,90,82,87,107,150,202,235,223,183,143,105,91,98,106,114,118,119,117,118,123,129,127,114,96,83,78,77,77,80,92,127,169,
-213,240,233,208,177,118,78,72,72,74,76,83,87,88,88,88,88,86,84,85,90,96,100,108,121,132,140,141,134,122,112,105,95,84,73,66,61,57,53,50,47,45,49,55,62,74,82,91,
-100,104,104,103,113,130,138,136,135,134,127,126,130,131,112,85,65,50,42,43,47,64,102,136,160,190,216,226,226,229,234,234,224,207,193,174,139,108,93,85,90,105,118,125,129,128,121,108,
-94,81,68,51,41,39,41,41,46,56,72,87,99,108,117,124,130,137,144,151,153,155,157,161,168,174,178,179,180,180,178,172,163,151,138,124,110,93,78,67,60,52,50,59,75,99,140,180,
-215,236,238,234,225,216,210,208,208,212,218,222,222,218,215,214,217,230,235,234,234,234,234,233,229,228,230,235,243,243,234,215,196,195,208,225,238,238,206,160,132,95,46,16,8,9,10,11,
-82,82,84,91,100,109,118,121,112,99,78,49,24,7,1,0,0,0,0,0,0,0,0,0,4,11,19,26,36,56,82,104,121,130,131,127,127,142,176,211,234,244,226,184,146,117,100,91,
-90,93,94,99,110,120,124,120,113,108,99,92,92,95,100,112,137,174,216,241,254,235,185,145,133,132,134,134,134,133,133,134,133,131,134,142,151,162,180,202,220,222,216,209,201,195,192,191,
-188,186,185,184,184,183,183,184,181,174,157,124,103,104,111,117,126,135,144,150,154,158,161,161,159,157,154,151,155,176,192,196,198,198,202,209,214,225,242,248,246,238,218,202,189,168,136,100,
-70,45,32,21,7,0,0,0,1,9,19,27,39,57,79,99,110,117,122,120,116,114,114,115,117,121,122,119,115,113,111,111,119,131,146,165,183,192,192,182,163,143,129,123,126,140,160,178,
-189,188,182,177,174,165,153,142,136,130,127,125,121,118,118,124,140,159,173,191,207,217,221,224,224,220,215,208,204,200,198,199,191,161,128,117,117,117,114,110,107,110,128,147,177,222,244,247,
-249,252,255,255,251,229,169,119,102,98,96,89,83,82,82,82,117,117,117,115,110,101,85,60,38,22,10,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,28,62,98,134,162,
-189,202,207,212,213,208,199,190,190,215,242,243,218,175,117,60,27,16,17,25,37,53,76,101,126,141,134,126,125,125,127,131,134,133,138,151,187,231,242,209,171,135,118,112,108,104,103,102,
-106,129,172,208,222,231,236,229,212,204,201,201,201,201,201,201,201,201,202,202,202,201,202,201,203,208,219,231,229,228,228,228,229,230,231,232,233,234,235,239,240,242,243,246,245,240,231,227,
-227,227,226,222,219,210,179,145,120,89,53,37,30,19,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,11,23,35,46,62,78,86,88,88,88,85,75,63,52,44,43,48,57,
-75,98,127,154,176,180,156,110,60,29,15,12,14,25,50,94,144,181,195,192,182,165,145,129,117,108,98,85,75,70,67,66,65,64,66,69,69,68,69,69,66,58,50,43,40,39,39,39,
-33,16,3,1,1,2,2,1,2,2,8,17,26,66,126,143,136,129,133,159,190,223,231,203,167,127,103,105,112,114,116,116,45,45,45,40,32,23,12,2,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,9,28,68,129,186,219,228,226,218,205,197,196,197,199,204,213,223,226,229,235,242,250,252,239,200,143,74,24,4,0,5,11,25,45,61,60,56,55,57,58,63,
-69,65,57,50,53,84,139,201,229,207,189,191,194,191,189,188,196,220,233,211,186,163,127,89,58,50,49,48,48,47,47,46,46,45,45,44,43,44,43,43,44,48,65,100,118,119,119,118,
-118,116,117,116,116,116,116,118,120,122,125,125,119,97,79,73,74,74,73,66,59,47,25,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,3,10,14,15,15,15,13,10,8,9,13,21,34,53,76,107,138,164,170,141,80,22,0,0,0,0,0,0,0,12,64,133,180,190,174,144,113,85,63,45,32,20,12,9,5,5,
-5,4,4,3,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,15,10,3,3,12,31,80,156,209,232,212,145,80,46,41,42,43,
-5,3,4,4,2,1,1,2,3,3,3,3,3,3,3,2,2,2,1,1,7,32,87,143,182,218,231,208,166,124,93,71,52,43,44,44,45,50,64,90,113,121,121,127,144,175,212,244,
-252,226,182,111,41,20,14,12,12,9,7,5,4,5,5,6,8,8,8,7,7,13,44,124,211,247,254,254,246,217,203,202,198,176,123,64,37,25,14,8,6,5,5,4,4,3,2,2,
-2,1,1,1,0,0,0,0,0,0,0,1,2,4,10,16,13,6,4,4,4,4,3,2,1,0,1,0,1,1,2,2,2,2,2,2,0,0,0,0,2,2,3,3,3,3,3,3,
-4,4,4,4,5,5,4,6,6,6,6,7,7,7,8,7,8,9,9,8,8,8,9,9,9,11,14,17,24,32,46,65,90,120,150,172,165,118,46,0,0,0,0,0,0,0,0,0,
-29,103,165,186,174,144,110,79,54,34,21,12,7,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,7,
-5,2,0,0,0,1,19,53,111,193,231,193,118,79,45,16,113,86,67,60,60,59,59,59,59,59,59,59,59,59,60,62,62,64,73,98,138,190,231,239,225,191,143,99,71,59,54,53,
-53,54,54,46,38,36,37,38,41,42,42,44,49,60,92,155,225,254,255,244,199,166,150,143,132,108,83,68,57,49,45,44,45,57,76,89,103,133,175,214,229,219,201,168,121,67,48,48,
-43,30,14,6,5,6,6,7,7,7,7,6,6,5,5,4,4,4,4,3,3,3,3,2,2,2,1,0,0,0,10,31,44,41,39,41,45,49,51,48,42,39,38,39,43,52,59,60,
-60,60,60,60,60,60,61,61,61,61,61,61,61,61,62,62,62,62,63,63,64,64,65,71,70,64,61,61,62,62,63,63,63,65,65,58,51,49,50,50,50,51,53,55,60,66,84,106,
-128,152,175,191,186,149,80,18,0,0,0,0,0,0,0,4,50,122,174,187,170,139,105,76,51,32,19,12,7,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,1,6,16,22,23,24,28,34,38,40,37,41,77,149,220,236,229,204,158,244,227,196,173,173,158,137,131,133,134,135,137,143,154,169,179,
-183,189,208,236,249,238,205,168,138,104,84,81,82,83,84,85,85,86,81,63,46,42,42,42,41,41,41,41,41,43,56,84,123,171,207,217,234,245,247,249,249,243,233,223,216,210,205,204,
-205,216,228,234,235,235,223,188,135,86,56,30,11,3,2,2,2,4,6,6,6,6,6,6,6,6,5,4,5,4,4,3,3,3,3,2,3,2,2,2,2,1,0,0,0,0,9,38,
-65,75,77,83,91,99,105,108,110,110,111,112,115,119,119,118,119,119,119,120,120,121,121,121,121,121,122,122,122,122,123,123,123,123,122,122,122,122,124,127,118,100,90,90,90,92,92,93,
-94,95,91,75,59,56,57,57,57,57,59,61,65,71,91,119,141,160,183,200,206,194,155,96,42,13,3,1,2,9,27,68,124,170,191,186,168,142,114,87,62,42,25,14,6,1,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,12,24,34,41,50,63,74,84,91,95,96,109,144,176,199,229,247,
-172,211,237,245,249,238,216,205,206,210,213,218,225,234,238,238,237,236,226,197,148,104,77,65,53,35,28,28,28,29,29,29,29,28,25,15,7,6,6,6,6,6,6,6,6,7,14,25,
-29,38,58,76,99,117,130,141,154,175,198,211,220,223,227,232,234,224,206,193,185,169,146,122,102,88,74,65,55,38,21,10,6,3,4,5,5,5,5,5,5,5,4,4,3,3,2,3,
-2,3,2,2,1,1,1,1,0,0,0,0,0,0,7,30,52,52,45,46,51,55,59,67,76,84,88,93,97,98,93,91,92,95,100,106,114,120,122,122,122,123,123,124,124,124,126,125,
-122,118,112,104,99,96,97,96,87,72,66,65,62,57,51,48,48,48,46,38,30,30,31,31,31,30,30,33,35,40,51,68,85,104,129,155,175,186,187,173,147,119,99,92,97,114,139,167,
-187,194,189,179,169,160,148,133,119,102,84,70,56,35,16,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,
-16,21,23,27,34,41,48,57,68,76,79,80,82,83,96,128,19,49,93,156,217,244,252,249,236,213,195,182,169,150,123,103,96,87,65,34,9,1,1,2,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,5,6,9,14,23,36,49,61,68,74,84,95,90,77,71,77,86,96,109,123,137,146,145,141,126,101,75,
-52,28,11,3,1,3,3,4,3,3,3,3,3,3,2,2,2,1,1,2,1,0,0,0,0,0,0,0,0,0,6,16,18,11,5,4,6,9,16,26,37,54,78,101,119,136,142,144,
-148,154,162,172,184,191,193,194,194,194,194,195,195,195,196,196,193,186,177,162,149,145,145,145,144,143,143,141,133,116,93,75,61,53,48,44,41,38,36,36,37,36,34,35,35,36,38,41,
-49,59,75,94,115,135,153,166,175,179,178,179,181,184,184,180,173,161,146,133,125,123,123,127,134,145,151,148,141,124,99,72,49,25,6,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,5,5,3,2,3,3,3,6,9,12,13,13,12,8,4,7,0,0,0,14,57,106,161,213,233,216,167,94,38,12,4,2,
-0,0,0,0,1,2,3,1,0,0,1,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,1,1,0,0,0,3,16,27,34,
-40,45,51,59,68,78,89,104,121,139,153,154,150,151,149,140,128,105,70,37,15,4,1,1,1,1,2,2,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,1,2,6,14,21,
-25,27,29,33,46,68,93,114,132,157,188,208,221,231,235,235,236,239,241,243,245,246,246,246,246,245,245,246,246,246,246,246,246,245,244,241,236,234,235,235,236,236,236,236,232,223,206,186,
-167,151,137,123,108,91,78,69,63,57,54,52,50,50,49,49,49,53,57,66,77,89,101,114,125,134,139,142,141,138,132,123,112,101,91,85,83,84,88,99,112,130,144,149,151,154,151,140,
-127,104,69,35,13,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-3,3,4,9,14,23,43,89,149,202,231,214,161,119,123,137,133,125,124,127,127,127,126,117,101,84,72,63,60,59,59,60,60,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,
-61,61,61,61,61,60,59,59,62,70,81,98,133,170,187,193,194,197,203,208,210,210,209,210,210,209,207,195,157,114,91,89,102,123,129,118,95,68,42,16,2,0,0,0,0,0,0,0,
-0,0,0,2,3,5,8,12,20,27,32,39,51,70,91,113,128,136,140,147,165,191,213,225,232,240,247,247,243,238,235,234,233,230,227,223,217,213,212,212,214,216,217,218,219,219,219,221,
-223,229,235,242,246,246,246,246,247,246,246,247,248,251,251,249,245,240,235,227,216,200,184,169,152,136,123,114,108,104,103,101,98,97,97,98,99,102,105,107,110,110,111,108,103,100,101,101,
-99,103,109,114,113,106,97,91,84,76,70,69,72,76,79,86,102,122,127,111,83,54,28,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,59,62,70,83,94,99,98,98,108,132,173,220,243,243,250,255,255,254,249,247,248,247,248,246,240,226,209,187,162,145,133,125,
-121,117,115,116,117,117,118,119,119,119,119,119,119,119,119,118,117,116,116,116,116,121,132,143,167,202,225,239,247,243,237,238,235,234,229,222,214,209,204,201,200,197,200,216,225,199,161,126,
-109,121,148,171,180,174,156,124,88,61,46,35,26,23,22,24,27,29,31,36,49,67,79,94,117,135,145,155,171,192,210,224,232,234,235,238,242,246,247,243,238,231,218,199,180,167,163,165,
-168,164,161,161,159,158,158,158,162,166,169,170,172,173,174,177,181,188,194,203,210,212,213,213,214,214,215,216,222,231,239,245,249,251,254,254,254,253,249,245,235,223,207,190,175,164,157,152,
-149,146,144,142,140,138,137,135,134,131,130,127,126,126,135,141,136,136,130,109,85,66,48,33,21,12,7,4,4,5,6,10,21,46,79,109,123,122,103,68,32,8,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,10,19,28,38,48,121,120,121,118,112,106,104,103,98,90,88,105,131,147,164,179,
-192,196,164,146,147,146,149,160,180,203,222,235,236,227,210,194,178,146,111,90,83,80,74,67,64,64,64,64,64,64,66,68,76,87,95,105,128,171,209,227,238,232,207,183,153,126,120,120,
-106,94,79,61,51,51,56,61,69,81,104,146,201,234,243,239,228,220,222,229,235,240,243,241,230,212,190,163,137,122,119,121,126,131,130,135,158,186,201,212,226,234,238,240,244,247,247,245,
-241,238,236,233,226,211,190,171,162,156,145,135,130,129,131,133,133,131,129,125,118,114,114,114,113,111,110,114,117,120,123,126,129,130,128,132,137,140,142,143,144,145,146,148,153,163,174,188,
-200,209,217,226,235,243,247,250,250,249,243,231,212,190,170,148,129,114,104,98,93,90,87,85,83,81,82,87,95,97,105,106,90,75,59,34,15,7,1,0,0,0,0,0,0,0,0,0,
-0,0,9,32,58,87,114,124,106,73,41,19,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,5,18,37,57,76,94,105,112,118,
-70,67,61,49,37,31,34,43,48,48,45,44,44,43,40,36,36,34,16,7,8,8,9,12,20,38,63,101,145,177,201,216,223,227,210,187,176,169,148,115,100,99,99,100,99,104,110,124,
-153,182,196,207,223,227,204,178,143,86,43,25,16,13,15,14,6,4,9,21,43,75,104,124,139,162,188,210,226,235,242,247,250,251,250,249,247,247,249,254,255,255,252,246,238,231,227,228,
-229,230,229,231,239,246,247,247,244,238,234,231,225,211,192,173,156,146,143,140,132,120,109,107,117,126,127,122,113,103,93,83,71,67,62,52,42,39,45,57,67,71,75,80,85,88,89,88,
-89,90,89,92,95,100,102,103,106,113,124,132,136,145,161,180,187,192,196,204,215,225,233,240,245,248,250,249,244,235,221,198,167,131,96,68,50,38,30,26,22,19,18,19,22,24,25,23,
-15,9,4,2,2,2,2,4,8,11,12,12,12,12,12,12,12,12,9,6,6,16,41,78,111,123,115,92,65,43,23,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,2,7,16,28,43,60,84,105,114,116,111,102,92,83,5,3,1,1,9,25,47,67,78,82,82,82,81,78,72,60,45,30,17,7,1,0,0,1,11,25,38,52,70,86,102,115,
-127,152,180,198,204,208,221,229,229,228,228,229,228,229,229,229,220,202,188,174,151,99,46,23,9,0,0,0,0,0,0,3,22,57,103,141,175,205,226,236,242,247,251,252,248,245,242,238,
-231,224,217,208,197,186,186,196,213,228,235,241,246,248,248,245,241,238,236,232,223,210,200,190,171,151,138,128,115,95,78,68,69,75,83,92,103,111,116,117,111,93,72,53,37,25,17,11,
-5,5,5,8,18,38,61,84,99,108,113,119,124,128,129,127,123,119,116,114,113,116,124,139,164,191,213,222,226,231,239,245,245,244,242,241,242,242,244,246,248,249,251,252,253,253,252,249,
-242,224,191,147,104,67,41,25,16,11,8,6,4,3,2,3,9,18,30,40,44,46,51,66,84,91,95,94,92,87,79,74,72,71,68,60,45,28,15,17,38,69,98,117,121,114,97,71,
-46,30,22,18,13,8,4,2,1,1,1,1,1,3,6,12,21,32,42,55,72,87,99,105,103,88,69,53,37,25,17,11,0,4,16,35,60,80,87,81,70,63,62,63,65,70,80,93,
-102,106,101,83,65,54,50,57,73,85,88,86,81,74,72,74,80,89,94,89,74,63,76,103,116,117,116,117,117,114,106,95,69,42,29,20,10,0,0,0,0,0,0,0,4,18,46,85,
-135,184,222,240,248,252,253,251,251,248,242,231,220,212,202,184,159,138,126,121,117,111,103,96,101,111,121,139,158,180,193,196,192,187,181,172,158,136,118,104,89,77,69,66,63,65,73,89,
-107,120,125,122,111,94,79,65,45,23,8,0,0,0,0,0,1,8,21,42,70,92,102,103,98,99,105,114,123,133,146,159,169,174,173,167,163,171,198,228,245,251,247,242,240,239,231,220,
-219,221,221,218,213,208,204,203,207,216,226,233,236,239,243,248,251,253,250,236,206,164,117,75,47,27,14,8,6,12,27,46,63,78,87,90,90,92,103,125,141,147,147,148,149,146,131,110,
-93,82,80,85,88,85,68,46,28,21,28,50,74,97,114,119,113,101,93,90,82,67,53,45,41,39,36,35,36,41,50,63,78,90,97,99,93,82,70,59,41,21,7,0,0,0,0,0,
-52,63,76,85,85,72,55,39,31,30,37,45,51,56,68,89,112,133,141,128,114,107,100,90,79,61,45,33,23,17,15,17,28,46,69,84,83,67,45,28,14,6,3,2,1,0,0,0,
-0,0,1,1,1,0,0,0,0,5,18,44,81,124,164,201,230,246,250,246,236,218,195,179,172,161,142,123,114,120,126,119,100,75,53,44,47,64,83,94,91,79,67,64,72,88,104,114,
-116,114,112,117,117,108,100,95,93,91,90,91,97,109,123,133,139,143,144,133,113,89,69,52,42,36,30,26,24,24,27,35,50,64,80,94,97,87,74,67,69,79,95,111,123,135,149,166,
-182,199,210,213,218,232,247,245,229,211,195,187,184,183,179,175,179,186,194,200,200,195,188,180,175,174,175,177,178,180,188,199,215,233,246,250,248,238,215,181,144,104,67,48,50,67,84,92,
-89,80,66,53,48,48,56,68,75,77,77,78,86,101,110,106,90,68,50,41,47,63,80,88,81,63,47,45,52,64,82,97,105,108,111,120,123,113,106,104,104,102,98,95,97,99,102,107,
-113,118,122,115,101,83,72,66,61,57,52,44,34,28,31,38,156,149,135,120,104,95,96,101,102,99,96,91,87,85,86,86,85,82,74,60,54,54,50,36,19,7,1,0,0,0,0,0,
-0,2,14,36,60,81,89,84,71,57,48,41,39,39,39,40,46,53,56,57,55,52,50,53,64,90,128,168,202,225,237,246,248,239,215,176,136,97,64,46,38,31,22,13,12,23,42,65,
-84,92,85,65,41,27,30,47,66,80,83,84,91,99,105,108,104,94,81,74,73,73,75,78,80,81,85,99,132,175,200,204,205,207,210,211,211,207,193,167,148,129,112,109,108,102,99,103,
-106,105,100,91,81,75,78,90,105,120,134,144,153,161,169,179,195,218,237,245,248,245,223,196,181,175,173,173,174,174,177,178,179,181,185,192,200,205,207,205,200,194,187,181,176,170,167,165,
-171,188,208,223,236,246,248,244,235,217,189,161,136,116,95,74,54,37,22,13,10,10,12,14,15,15,15,15,18,31,51,73,91,97,91,72,50,40,48,68,88,101,103,106,113,123,134,147,
-158,166,170,173,173,168,167,174,183,186,183,181,182,181,179,178,179,181,186,188,189,189,188,188,190,190,189,178,154,145,152,157,238,231,222,218,215,214,215,212,202,187,161,124,89,65,47,31,
-21,13,6,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,22,42,63,77,85,87,88,88,87,87,86,87,86,90,95,104,121,143,164,183,209,232,243,248,248,244,233,
-204,159,105,59,30,13,4,0,0,0,0,0,0,10,26,46,69,94,116,124,113,85,51,32,40,67,103,140,172,195,201,204,209,208,203,192,185,183,184,185,186,190,197,212,232,236,224,219,
-219,219,220,221,223,227,237,245,243,233,221,219,219,205,178,152,132,123,117,114,115,120,125,131,136,139,144,149,159,176,200,218,235,250,255,248,230,201,183,179,180,182,183,185,185,186,187,188,
-189,189,188,189,191,195,200,204,206,207,205,203,198,193,186,178,169,163,161,168,182,207,231,244,250,252,250,239,211,177,153,134,120,105,88,78,74,73,73,73,72,72,73,72,74,80,91,105,
-122,139,156,163,157,146,139,139,144,150,156,171,196,216,228,238,245,249,249,246,242,239,236,237,238,240,245,247,248,248,248,248,248,248,249,249,250,251,251,251,252,252,252,251,244,241,244,243,
-235,241,245,245,244,244,246,246,245,241,229,204,167,125,80,44,26,18,12,6,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,16,27,36,41,43,46,52,59,
-66,80,104,127,154,186,213,230,240,247,252,251,241,219,186,146,94,45,16,3,0,0,0,0,0,1,10,28,49,68,80,86,88,91,102,127,151,157,152,158,180,202,220,229,219,203,198,198,
-202,207,218,226,229,226,222,221,221,222,223,217,181,132,102,95,97,97,97,98,102,110,129,153,172,202,219,218,222,236,243,227,212,210,209,209,207,207,207,207,207,207,209,214,223,235,247,253,
-254,247,232,209,190,184,187,188,190,190,191,192,192,192,192,193,193,194,194,193,192,193,192,192,193,194,193,191,186,179,169,160,149,142,138,138,159,199,230,244,249,253,254,254,251,245,242,235,
-227,219,206,198,195,195,195,195,195,195,196,200,204,209,213,215,215,217,222,228,236,239,240,240,238,234,232,239,246,248,245,242,239,240,243,241,233,223,212,196,180,181,192,194,192,190,190,191,
-191,191,192,192,193,196,198,199,199,199,200,211,228,236,233,230,107,128,152,171,178,179,182,192,209,226,239,246,241,226,197,160,137,121,101,78,57,38,27,20,13,9,6,5,5,5,5,6,
-6,6,5,5,5,5,4,4,3,4,5,11,26,53,85,115,144,174,201,218,230,240,243,243,241,233,215,188,164,145,122,93,61,36,23,15,13,14,18,24,32,46,67,84,88,80,64,50,
-47,66,105,163,209,225,237,245,241,222,191,153,116,86,77,76,80,91,111,137,148,136,114,100,92,82,71,57,31,15,12,11,11,12,12,12,14,19,24,28,33,48,59,60,64,93,147,190,
-200,201,201,202,203,205,207,210,217,228,243,251,253,253,250,241,221,201,190,187,188,191,192,193,193,193,194,195,194,195,195,195,195,195,195,194,194,194,192,191,189,185,182,177,170,165,167,176,
-189,208,219,223,232,231,215,207,207,211,220,234,245,251,252,249,246,247,247,246,245,247,247,248,248,249,251,252,253,253,251,250,249,248,248,248,250,249,249,248,250,249,245,240,233,223,212,200,
-193,190,184,176,170,153,126,99,83,73,62,54,48,46,45,47,46,46,47,47,48,52,56,57,57,58,58,68,89,105,104,98,49,59,75,92,109,117,117,121,135,155,184,216,236,246,247,240,
-235,228,216,200,179,153,134,117,99,85,75,71,70,70,70,70,70,70,70,70,70,70,70,70,70,71,75,91,128,171,205,228,242,247,251,250,247,239,220,193,164,134,96,59,41,48,65,79,
-88,95,99,97,92,85,81,84,87,89,81,61,39,27,33,56,103,171,218,228,203,179,158,125,106,97,87,82,81,83,83,84,83,82,80,76,64,45,24,11,4,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,8,22,45,70,82,89,97,104,112,123,136,156,193,225,244,242,235,226,214,199,185,183,186,189,192,193,194,195,195,195,195,195,195,195,195,195,
-194,195,195,193,193,193,191,190,187,183,180,182,190,208,229,242,243,232,214,201,174,125,87,71,66,68,81,108,141,168,181,188,199,214,226,228,228,226,224,224,225,224,222,217,212,209,207,206,
-207,206,206,205,198,187,172,166,173,179,180,177,172,166,156,145,134,122,104,86,70,50,28,14,9,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,16,29,39,44,
-129,133,136,137,138,141,143,143,143,146,155,176,200,223,239,244,245,246,248,248,245,239,233,225,216,206,198,194,193,193,193,193,194,194,193,193,193,194,193,193,193,194,197,210,229,243,248,247,
-246,241,233,237,243,243,231,204,154,84,33,9,0,0,3,17,39,68,101,128,143,134,111,96,89,74,58,58,82,126,175,208,228,213,160,98,45,24,12,1,1,9,19,30,44,64,84,101,
-104,98,91,81,73,64,51,38,31,21,12,8,1,0,0,0,0,0,0,2,8,15,29,51,69,78,87,99,112,124,131,134,137,144,158,174,191,210,224,236,250,246,230,213,208,207,206,204,
-203,204,201,199,197,195,194,193,194,194,194,194,194,193,192,192,192,192,190,190,189,187,185,183,182,189,207,228,242,247,233,205,174,140,111,93,72,52,38,29,22,18,16,22,32,42,51,62,
-84,115,147,170,182,177,162,152,147,138,126,115,105,96,90,88,87,87,85,82,75,64,50,42,42,48,55,63,74,88,96,97,92,83,71,59,48,38,22,7,3,4,8,6,2,0,0,0,
-0,0,1,3,8,11,19,28,36,42,55,71,89,107,120,126,126,121,115,112,111,111,111,111,115,122,128,134,144,163,187,205,213,218,226,233,240,242,241,242,245,246,246,247,248,248,247,247,
-248,248,248,248,248,248,247,248,248,248,248,248,246,234,209,178,157,134,107,107,124,141,172,209,232,210,167,130,87,48,33,30,19,12,25,52,83,105,114,120,121,123,153,199,232,241,226,190,
-141,80,30,6,0,1,2,6,11,18,30,55,88,124,165,200,209,208,208,208,210,210,207,202,195,172,147,127,92,66,61,61,63,67,78,94,123,150,179,210,228,234,237,240,240,238,232,228,
-225,225,234,241,243,235,227,225,209,189,186,190,198,206,214,220,224,225,223,221,216,209,202,196,193,190,190,189,190,188,187,187,186,185,184,181,181,182,188,196,210,233,248,243,221,191,158,131,
-112,97,83,70,58,47,38,30,24,19,15,12,10,10,9,9,13,23,42,67,96,113,116,116,115,105,96,91,85,77,64,53,42,33,26,20,16,13,11,11,14,21,33,50,69,84,92,93,
-92,91,94,99,106,112,104,85,73,76,82,77,56,40,37,37,41,46,55,66,78,89,102,115,125,130,138,145,147,144,136,130,38,33,28,25,25,25,25,25,28,35,47,61,77,95,116,143,
-162,174,183,193,204,210,209,207,207,205,205,204,204,205,204,205,205,205,205,205,205,206,206,205,205,206,206,199,179,140,94,56,35,21,9,2,3,7,21,54,118,183,212,231,229,207,196,194,
-166,119,93,101,120,151,189,211,217,227,240,228,188,149,120,100,84,73,67,62,58,58,59,63,69,81,115,173,215,233,238,226,216,219,223,226,230,233,236,237,243,251,252,248,235,220,216,216,
-216,220,225,234,246,250,247,238,239,241,239,237,235,238,245,249,252,253,252,244,231,193,148,124,113,115,133,153,171,186,199,212,221,225,228,228,229,227,222,214,206,196,188,183,181,179,178,177,
-176,174,175,182,199,217,232,242,247,239,212,178,151,134,121,111,99,88,75,63,52,41,33,26,21,16,13,10,8,8,7,7,7,6,7,10,21,41,60,74,79,73,69,70,77,85,90,91,
-89,82,75,68,63,62,62,65,72,80,87,91,87,75,61,57,66,86,108,127,143,155,158,155,152,152,154,152,141,127,124,123,126,130,135,141,143,144,143,138,132,126,117,102,86,68,51,43,
-0,0,0,0,0,0,0,0,4,20,47,73,87,92,95,99,104,110,119,128,140,153,162,170,172,165,149,128,108,94,84,82,82,82,82,81,81,82,82,81,81,82,81,73,55,30,13,4,
-3,2,4,7,9,9,8,7,16,39,66,107,148,181,207,213,220,232,227,226,226,224,214,196,190,176,132,72,33,23,32,44,58,70,77,83,84,84,85,94,117,156,214,239,216,190,161,135,
-132,140,146,149,153,156,159,159,160,175,192,206,223,229,229,228,228,226,219,208,185,158,135,111,105,106,99,88,79,85,104,123,145,178,197,201,215,231,220,195,175,152,151,164,175,182,188,195,
-200,205,209,212,216,219,221,223,221,214,204,194,184,177,177,181,186,191,205,227,243,246,238,224,206,181,158,147,141,134,126,118,109,98,84,71,59,48,40,34,30,26,24,22,20,18,14,12,
-11,9,8,8,7,8,11,16,19,17,15,17,22,32,43,54,65,77,83,88,90,90,90,87,82,75,65,50,37,31,38,58,91,124,143,151,151,144,136,129,120,118,127,133,133,131,131,131,
-129,126,118,109,97,89,82,74,66,59,49,34,19,8,1,0,12,12,12,12,12,13,20,38,65,87,93,84,65,50,41,35,29,27,28,31,39,51,66,87,117,145,155,144,124,93,63,47,
-39,32,29,29,29,29,29,29,29,30,33,38,39,41,48,56,60,63,68,77,82,82,82,82,80,79,78,80,87,97,104,104,116,144,149,147,136,110,72,41,30,21,4,0,0,0,0,0,
-3,8,13,21,34,61,108,166,211,231,222,173,132,127,132,137,140,139,137,136,136,136,132,123,110,100,99,102,112,119,123,123,119,114,104,91,75,67,71,74,73,72,69,60,48,39,34,27,
-26,44,59,66,90,143,197,226,244,244,236,229,222,207,192,181,176,179,181,183,188,194,197,205,217,227,233,232,227,223,228,236,240,244,249,252,246,236,225,216,211,207,206,207,206,203,202,201,
-198,191,180,165,148,131,115,103,95,92,89,88,87,84,74,68,65,58,53,57,53,38,22,11,7,6,7,7,6,7,8,10,14,19,24,30,34,35,35,33,30,29,31,37,51,76,106,133,
-147,141,122,101,83,66,48,36,28,30,41,53,62,73,84,87,86,82,74,67,61,62,69,75,76,75,72,64,52,42,34,23,71,71,73,77,85,93,103,116,122,103,63,27,9,2,0,0,
-0,0,0,0,0,0,11,34,67,107,144,157,158,154,141,127,117,109,104,103,103,103,103,102,102,105,111,118,122,128,137,143,135,123,117,115,113,112,112,112,113,114,115,115,114,114,115,115,
-115,118,124,132,129,112,84,55,34,22,14,7,3,1,0,0,6,20,35,63,119,182,224,232,216,191,165,151,155,158,150,136,118,101,92,90,98,111,124,131,133,128,122,117,114,112,106,100,
-96,92,89,86,86,87,84,77,74,74,76,81,86,88,88,82,73,73,77,83,95,113,140,166,192,208,216,225,232,241,241,233,225,224,225,226,227,230,231,236,244,251,255,255,255,255,255,255,
-255,255,254,253,252,252,251,252,253,253,253,254,254,255,255,255,255,255,253,248,239,227,212,191,170,154,144,137,133,130,128,124,122,122,128,137,135,120,94,65,46,35,25,18,14,12,11,11,
-10,10,10,10,9,12,22,37,55,76,97,116,132,145,146,134,110,82,58,46,38,32,28,29,35,49,63,77,90,99,104,105,105,104,103,102,100,97,91,81,71,68,71,78,85,87,87,82,
-98,104,115,128,141,139,126,103,69,32,5,0,0,0,0,0,0,0,0,2,12,33,56,75,85,92,97,100,104,115,126,132,141,148,149,148,148,147,150,157,169,180,184,184,183,185,188,186,
-171,149,132,123,120,117,105,88,70,55,47,42,42,46,55,61,66,78,97,112,122,137,143,136,124,111,96,84,79,79,84,103,139,177,201,220,238,231,205,181,171,174,179,181,173,147,110,68,
-35,17,9,9,14,29,63,108,147,167,166,153,133,109,90,80,76,72,68,66,62,52,36,22,19,20,27,40,57,69,79,91,100,107,119,135,150,153,143,129,110,98,101,114,132,163,193,216,
-226,226,226,226,227,230,233,234,236,241,244,242,238,243,246,240,235,234,234,233,234,233,233,233,233,232,229,228,226,225,224,222,214,208,214,225,237,245,247,242,230,214,200,190,182,171,161,144,
-125,119,128,136,141,149,152,143,130,116,101,86,76,69,66,66,66,65,66,66,66,75,94,118,137,151,160,167,174,167,148,132,132,138,146,152,154,157,162,168,177,185,189,190,188,184,180,180,
-180,180,181,181,177,166,152,140,122,93,70,62,65,70,77,90,156,164,171,174,168,153,132,106,71,43,30,26,26,26,34,56,79,96,109,121,136,150,154,149,138,127,118,112,112,122,141,163,
-183,192,189,186,187,193,202,217,231,240,240,236,233,233,233,232,229,225,221,218,216,216,212,198,175,147,116,80,53,40,35,37,40,49,61,72,86,115,152,175,185,191,194,201,212,222,230,242,
-251,246,235,222,199,176,162,156,156,161,170,174,160,116,56,11,0,0,0,0,0,0,15,64,122,154,155,136,113,98,94,94,91,87,84,80,74,62,48,41,41,46,57,72,86,93,98,105,
-117,131,141,140,125,97,74,59,50,50,59,69,79,90,103,120,132,140,150,161,171,177,175,166,157,154,160,159,150,157,162,152,146,147,146,146,146,144,142,141,139,136,130,123,117,113,110,102,
-88,77,82,95,119,146,175,205,227,238,241,243,244,241,236,225,206,188,179,173,167,166,170,172,169,167,165,161,157,154,152,152,152,153,152,152,153,159,167,170,171,175,185,202,220,227,226,227,
-235,241,245,246,248,250,251,252,251,249,246,245,243,244,246,248,248,249,249,248,248,245,243,245,245,239,225,207,187,167,156,152,238,238,239,239,236,232,229,223,214,202,192,185,183,185,196,216,
-231,238,243,245,245,242,238,234,231,230,228,226,225,223,220,213,206,203,202,203,206,208,209,211,212,204,173,136,120,119,118,118,117,118,133,162,173,167,167,182,200,211,220,220,213,204,195,193,
-194,197,201,208,213,222,231,237,239,240,240,240,232,219,209,191,165,141,127,121,116,114,106,94,91,102,123,141,139,102,41,2,0,0,0,0,0,1,5,35,89,129,143,139,133,131,124,108,
-93,85,81,80,83,87,89,88,87,88,86,85,88,92,96,104,121,135,142,131,103,74,56,49,49,54,63,71,82,94,105,117,131,149,166,176,175,164,146,133,122,112,104,95,87,83,81,76,
-74,74,72,70,70,68,66,64,62,59,56,52,47,42,38,33,28,24,21,21,23,30,45,71,101,127,148,161,170,184,201,221,236,242,244,243,241,237,233,227,218,212,209,207,208,209,207,206,
-206,206,207,208,211,218,221,220,219,223,228,238,243,243,242,239,228,216,208,203,202,199,191,184,179,176,178,187,196,202,203,199,195,194,194,195,199,207,215,223,227,227,228,233,239,242,239,237,
-151,160,163,164,165,168,175,182,190,198,209,218,223,229,229,218,208,204,203,202,197,190,186,185,185,183,178,170,159,148,131,105,80,66,61,58,56,55,54,54,55,51,32,15,12,16,24,33,
-42,48,52,65,76,76,72,79,99,114,134,162,189,219,237,239,236,234,232,228,223,227,236,239,243,243,240,233,209,165,119,82,53,42,42,47,57,66,66,66,75,89,106,125,130,110,66,21,
-1,0,0,0,0,0,16,60,113,150,164,162,149,122,87,56,37,28,22,21,24,33,41,44,44,40,32,23,20,21,24,30,43,54,69,85,94,97,97,96,95,98,103,109,119,138,153,165,
-174,183,187,186,178,168,159,156,153,148,139,125,110,99,90,81,71,64,59,55,51,47,45,44,43,42,39,36,35,37,40,46,52,56,55,53,50,48,47,48,52,57,62,61,54,55,69,96,
-125,149,164,174,185,199,211,223,234,239,241,242,243,243,243,243,243,243,244,243,239,225,208,204,204,209,209,199,184,165,145,129,114,103,94,85,79,70,62,62,69,81,98,111,110,96,75,56,
-49,48,48,48,56,70,85,94,92,86,89,100,118,127,127,135,10,16,20,25,33,44,59,73,83,87,91,95,102,114,120,112,102,98,97,95,93,92,91,93,95,104,114,122,124,122,120,113,
-101,91,83,73,63,55,51,50,49,49,50,54,61,78,95,108,116,120,120,119,118,118,117,116,116,116,117,117,107,114,138,142,130,123,120,112,102,106,127,142,156,179,200,211,226,233,222,201,
-164,128,98,82,87,96,95,100,110,120,129,138,144,138,119,89,58,36,27,26,35,57,94,134,162,170,161,137,103,68,42,25,16,10,5,2,0,0,0,0,0,0,0,0,0,0,0,0,
-0,2,8,20,36,51,66,81,90,95,98,101,108,123,134,136,133,132,131,130,128,126,125,125,126,131,139,144,145,141,138,131,122,112,104,95,85,77,72,70,67,67,65,64,70,84,100,111,
-119,122,122,121,120,119,119,117,116,115,114,106,85,66,61,64,71,78,83,87,91,97,110,130,153,169,179,188,191,193,197,199,201,202,202,198,187,166,150,148,145,142,134,123,109,89,69,63,
-66,68,70,75,77,78,81,84,85,89,83,64,40,18,3,0,0,0,0,0,0,0,2,3,0,0,1,2,4,3,3,5,0,0,0,0,0,0,2,8,12,13,12,12,13,19,23,21,
-17,16,17,18,20,21,23,24,26,34,47,64,81,94,103,112,122,128,130,131,130,129,128,127,127,127,128,128,131,133,130,122,112,106,103,102,102,101,100,100,99,98,100,102,95,88,87,88,
-85,83,83,84,84,84,86,87,87,91,101,107,125,156,189,218,241,242,219,179,144,121,98,83,81,94,110,123,135,143,146,143,136,125,119,121,130,147,164,171,163,141,111,79,54,38,26,19,
-12,8,5,3,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,2,4,8,14,21,27,33,38,41,45,53,57,58,55,55,56,56,56,56,54,53,53,58,67,80,94,103,110,118,
-126,131,133,134,133,130,128,128,126,126,125,126,128,129,124,115,104,96,94,92,92,92,92,91,90,91,96,98,93,89,87,88,87,87,86,88,89,90,91,94,96,98,102,105,107,108,110,111,
-106,103,103,102,101,93,83,79,78,79,81,83,88,90,94,104,110,111,117,128,140,146,144,123,98,78,48,18,3,1,1,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,5,7,10,11,13,14,16,18,20,24,30,35,40,49,60,69,77,87,96,103,108,109,110,110,111,110,106,93,76,63,
-54,49,46,45,44,43,42,40,38,36,37,37,39,41,42,40,39,38,36,38,43,46,46,41,34,29,27,26,27,29,39,61,102,149,200,230,228,215,196,153,90,58,52,58,72,88,104,117,
-124,128,131,134,138,143,148,149,143,126,104,81,53,28,14,9,6,5,3,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,9,15,14,10,12,17,19,22,24,
-25,26,27,27,27,26,25,25,24,23,24,26,28,32,34,42,51,59,66,76,85,92,96,97,97,97,96,95,90,73,54,38,27,22,19,18,18,18,17,17,16,17,20,24,26,30,32,33,
-33,32,33,36,42,47,47,43,36,33,33,33,33,33,34,32,27,23,21,21,22,18,15,14,15,18,21,24,31,40,52,63,66,63,66,75,86,99,107,110,100,78,58,41,26,12,1,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,4,5,7,10,13,14,14,14,14,14,13,10,6,5,4,5,6,8,10,13,15,17,21,24,27,29,31,31,32,34,35,
-36,38,40,43,47,51,53,54,56,57,57,58,56,52,48,47,47,46,46,45,44,42,41,38,35,34,31,28,26,24,22,20,17,15,13,11,10,10,8,7,4,3,2,1,0,0,0,0,
-0,10,44,93,135,167,198,226,218,182,144,103,74,68,62,59,62,66,70,73,74,75,77,82,93,104,113,117,109,79,46,23,11,4,1,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,4,13,22,33,51,68,84,95,95,75,61,51,46,45,46,47,46,46,46,45,45,45,40,32,23,16,12,9,8,8,8,9,10,11,13,17,20,20,22,21,21,21,20,17,11,5,3,
-2,1,1,1,1,1,1,1,1,1,1,1,2,2,2,3,3,3,3,2,3,4,5,5,5,5,5,5,5,5,5,4,5,5,5,5,5,5,5,6,6,6,6,6,6,5,7,9,
-10,9,9,11,15,21,30,49,72,84,87,86,85,77,54,27,9,3,1,0,0,0,0,0,0,0,0,0,0,1,1,1,77,81,87,96,105,110,111,111,111,111,111,108,99,85,77,71,
-61,50,40,32,28,30,32,33,34,35,35,37,41,46,49,50,52,53,53,53,55,56,57,57,59,60,61,64,66,67,68,69,69,69,69,68,64,61,58,55,51,48,45,42,38,35,33,30,
-27,23,22,25,32,46,58,63,64,63,61,60,58,55,58,62,61,58,57,59,66,77,96,138,189,222,237,232,215,202,175,137,96,66,56,46,38,31,25,20,19,22,30,48,77,97,98,88,
-77,65,57,48,41,37,37,39,43,50,56,65,76,83,84,87,104,123,138,148,156,164,180,196,205,215,220,217,212,207,203,200,197,194,190,187,186,185,186,180,162,139,112,80,55,44,32,17,
-7,2,0,0,1,1,0,0,0,0,1,1,1,2,2,2,2,2,1,1,0,0,1,1,1,2,2,2,3,2,2,2,2,2,3,8,19,36,51,58,60,61,61,61,60,58,61,65,
-65,66,66,66,67,66,66,66,66,67,66,62,56,49,42,31,19,10,5,4,5,5,5,6,11,18,30,49,73,94,103,99,83,70,62,53,45,40,40,40,40,40,44,52,62,67,69,69,
-72,68,65,59,54,52,51,50,48,46,49,56,70,97,137,163,163,158,153,151,155,161,157,142,124,107,97,102,112,118,120,121,123,123,123,124,127,128,132,136,139,141,146,149,150,152,153,153,
-154,154,153,151,147,139,128,117,106,93,84,80,74,67,58,53,52,60,70,83,96,105,103,99,96,95,94,93,94,103,120,126,124,122,122,122,120,119,117,118,127,144,167,197,219,229,241,244,
-230,206,188,164,143,119,90,65,47,35,29,29,38,54,67,77,87,96,100,103,103,108,126,147,172,193,200,205,209,210,209,211,223,231,235,234,233,232,228,222,215,209,205,207,209,212,215,218,
-222,223,224,223,220,215,212,211,218,225,227,221,207,198,179,147,111,70,43,24,9,6,9,16,22,27,35,40,41,42,41,42,43,43,42,39,32,19,9,4,1,1,2,2,3,4,6,11,
-18,30,46,63,80,90,92,89,88,88,89,89,91,102,120,126,125,124,124,124,125,125,124,125,125,124,124,124,122,120,117,106,88,64,38,17,6,4,5,6,6,5,2,3,12,29,43,56,
-72,81,86,89,89,88,88,88,88,88,88,86,81,78,76,76,52,53,52,49,45,44,43,42,47,67,87,108,137,175,214,231,233,235,237,239,235,237,242,242,238,233,229,230,231,229,229,230,
-231,231,230,230,232,234,236,238,239,239,241,242,242,241,242,243,243,243,242,242,241,238,234,227,217,205,197,193,190,181,165,148,140,144,153,154,140,112,85,66,56,51,46,45,45,58,77,80,
-76,74,74,73,73,72,71,70,68,67,69,80,95,108,132,168,206,225,231,233,232,230,224,213,198,188,183,182,181,181,182,184,187,190,194,197,200,208,226,235,231,221,214,210,205,206,209,208,
-196,176,163,156,150,143,124,102,85,69,57,51,47,50,54,61,71,81,92,103,113,117,117,118,124,132,147,171,187,199,214,230,234,222,204,177,146,124,111,98,87,83,82,84,85,86,87,90,
-92,90,88,88,87,78,65,55,49,47,48,49,52,58,64,76,92,112,131,136,121,92,63,45,38,34,33,33,36,51,71,76,72,71,72,71,70,69,69,69,69,69,70,74,81,88,97,109,
-119,121,108,79,47,23,10,4,3,4,5,4,3,3,4,8,14,22,29,36,43,45,44,44,44,45,44,39,34,38,45,51,107,108,109,112,119,126,139,162,193,221,230,229,223,205,170,151,
-152,156,161,163,157,166,190,214,229,238,244,249,252,251,252,251,251,249,248,247,246,246,245,244,243,243,243,243,242,243,244,243,243,243,243,243,245,247,250,253,254,254,254,254,254,253,248,238,
-224,211,195,172,148,124,106,90,75,58,43,32,23,22,23,23,21,20,19,17,18,16,15,14,14,12,12,11,13,15,21,38,67,99,129,153,161,165,174,184,194,199,200,199,198,198,199,198,
-198,197,197,195,197,193,166,132,103,85,85,92,103,116,126,130,125,119,115,114,113,112,110,107,101,92,78,61,47,41,39,40,42,46,52,61,73,88,106,131,145,144,139,134,130,134,147,165,
-187,207,218,232,241,243,235,216,183,139,97,76,60,48,42,42,45,45,45,51,67,92,116,131,131,122,115,114,118,120,115,112,112,116,122,123,112,95,78,63,48,33,19,9,3,3,6,7,
-7,7,9,11,18,27,33,36,36,36,36,38,41,45,51,62,85,111,128,137,130,111,88,67,45,22,8,3,2,0,1,1,0,1,1,1,2,3,5,10,17,26,38,52,67,85,97,104,
-109,116,130,163,198,214,228,241,234,212,189,171,153,134,121,121,123,127,131,135,140,146,156,166,173,175,175,183,196,207,211,210,204,196,186,181,178,175,172,172,173,174,177,179,180,183,185,186,
-188,191,195,200,205,211,217,223,225,225,226,225,226,231,240,247,249,246,236,213,186,159,136,124,120,114,103,87,69,52,38,28,24,23,21,19,18,16,16,14,13,12,12,11,9,7,4,3,
-4,13,35,65,94,114,122,123,120,109,93,80,68,59,54,52,52,52,55,62,72,78,73,73,81,93,104,112,115,111,102,95,89,85,84,84,84,84,85,89,98,107,115,117,116,114,112,113,
-113,113,113,114,115,119,126,136,140,134,125,116,111,106,103,101,103,101,91,95,112,136,162,197,224,227,211,193,166,126,80,40,19,14,22,39,60,87,113,129,125,108,95,91,92,87,75,61,
-48,38,36,41,52,65,77,85,88,84,74,60,46,37,38,46,61,81,93,103,134,164,178,182,182,182,181,181,181,181,180,181,194,201,199,209,219,222,222,215,196,154,111,74,46,26,16,13,
-13,14,17,25,35,44,54,68,80,93,104,112,115,111,105,103,186,202,218,237,243,236,215,168,111,67,54,63,76,87,93,97,101,105,110,114,120,124,125,122,117,114,112,112,118,126,133,136,
-134,128,122,121,121,123,125,128,131,136,141,145,151,155,161,168,176,184,191,195,195,194,193,194,195,193,190,187,186,188,197,207,217,229,243,249,244,227,192,151,128,123,126,130,129,121,105,84,
-66,54,48,45,43,42,40,40,45,51,56,57,56,53,47,38,28,17,11,15,27,47,70,91,108,118,118,113,105,94,85,81,81,82,87,96,106,112,118,119,115,106,93,79,65,48,35,29,
-27,30,34,37,38,38,38,41,47,57,71,86,99,104,103,98,93,90,88,87,85,84,81,71,59,47,38,34,33,31,27,25,24,18,9,2,0,3,14,37,77,128,169,189,211,227,222,197,
-167,145,127,121,118,113,106,102,100,91,87,90,97,97,94,86,74,60,46,34,23,19,24,37,57,82,110,132,152,171,187,199,212,223,229,231,231,219,209,207,209,213,214,215,215,215,213,211,
-217,215,203,199,200,205,210,220,238,249,243,222,192,157,127,107,99,101,105,114,124,129,133,133,132,135,133,128,122,125,138,155,252,250,247,243,238,235,226,202,171,135,95,67,50,36,30,29,
-34,43,52,61,70,80,91,101,111,119,122,125,128,130,133,134,137,136,134,131,132,135,137,142,146,152,157,166,175,182,191,198,204,206,206,202,200,201,202,201,197,191,186,184,180,177,175,176,
-180,189,206,223,237,247,248,231,205,181,165,156,157,163,167,160,143,124,112,108,105,103,102,102,106,109,108,107,105,104,102,97,90,78,62,45,32,29,31,36,45,63,82,95,106,115,119,120,
-119,118,115,108,97,84,73,60,47,42,45,56,73,89,98,105,116,130,145,151,152,152,152,152,152,153,154,156,159,160,155,142,123,104,92,75,54,39,35,36,39,42,42,42,41,41,41,41,
-40,35,26,16,12,11,11,10,11,19,36,56,87,128,174,213,233,240,236,225,217,212,203,189,173,159,155,168,185,189,189,186,182,176,166,145,118,99,96,106,126,151,183,212,234,243,240,229,
-211,189,174,167,150,122,109,108,112,116,116,116,117,117,116,115,116,109,91,77,67,65,66,71,99,141,180,215,236,244,239,227,218,217,218,220,219,217,214,208,208,216,222,226,229,237,247,251,
-141,125,117,114,113,121,149,181,207,224,227,215,193,160,133,102,80,77,78,81,91,107,122,136,145,150,154,157,159,162,163,165,167,169,169,167,167,170,172,176,180,184,190,196,202,207,211,213,
-213,213,212,212,214,213,208,200,190,184,180,176,172,167,164,161,160,163,170,180,193,214,237,250,253,248,237,218,198,182,173,168,158,140,125,121,119,118,116,113,105,93,85,80,76,74,77,82,
-90,97,101,99,92,88,83,64,46,39,39,44,51,57,62,63,61,57,47,36,32,36,44,54,75,112,152,185,208,224,230,234,237,241,244,244,243,243,243,243,243,242,242,242,242,242,242,240,
-233,225,218,205,178,152,137,127,116,107,103,102,102,102,103,103,103,103,99,93,90,89,89,89,90,89,91,98,105,116,138,168,196,221,239,248,253,255,255,252,248,243,241,245,249,250,250,249,
-249,248,246,240,232,230,229,229,227,223,215,200,175,152,138,130,118,98,81,76,75,75,74,73,66,56,49,46,46,47,52,61,70,80,87,87,82,79,74,56,38,36,46,68,102,147,191,224,
-242,251,255,252,249,248,248,248,248,250,250,244,223,206,186,165,8,7,10,12,13,16,36,66,94,126,162,190,217,235,242,239,226,212,188,159,147,145,137,130,127,127,131,134,137,140,142,144,
-147,152,160,167,170,173,178,183,189,195,199,200,204,210,215,217,219,220,220,218,214,209,203,197,193,191,188,184,180,176,172,168,164,161,159,157,159,168,184,205,223,237,247,250,244,231,214,197,
-179,151,129,115,106,97,91,84,76,69,63,59,55,51,46,45,47,53,64,75,84,90,92,81,68,63,62,60,59,59,61,66,71,70,64,78,108,143,172,191,212,233,244,243,235,223,214,210,
-203,193,182,179,178,179,184,190,195,196,196,198,200,201,205,215,227,236,242,249,252,249,242,228,209,188,178,177,177,177,177,177,177,180,185,187,189,189,189,191,193,193,192,193,195,203,218,232,
-242,246,248,246,241,232,228,228,230,232,232,228,219,216,217,219,220,221,221,205,176,156,142,123,107,90,72,55,46,45,46,49,48,41,35,32,31,27,23,19,12,9,6,6,6,6,8,11,
-17,28,42,58,71,78,80,69,54,51,56,75,109,157,202,230,241,227,189,148,126,123,124,125,124,126,125,101,61,40,26,14,30,37,43,46,46,50,66,82,85,83,87,94,105,123,145,177,
-202,222,239,236,225,211,176,138,116,107,104,107,111,115,118,121,124,127,132,137,142,146,155,170,182,188,193,197,201,206,210,214,216,216,214,212,209,208,206,205,203,200,198,195,192,189,186,183,
-179,175,171,166,162,162,167,174,181,192,209,226,240,248,251,250,244,229,212,193,169,146,129,116,102,90,82,77,71,66,60,54,48,44,41,40,42,43,46,48,52,64,76,85,97,116,136,157,
-176,187,197,214,232,243,245,243,236,217,182,144,113,90,83,85,90,86,80,78,79,82,95,110,112,109,108,107,104,101,103,109,115,121,128,149,180,203,219,232,241,243,243,243,243,243,243,243,
-243,243,244,244,245,245,245,247,249,249,249,248,248,248,244,234,217,196,175,155,130,106,99,99,101,101,97,83,68,62,62,65,64,66,64,48,22,18,32,41,43,42,41,42,46,49,50,51,
-51,50,50,49,46,41,33,21,8,3,3,4,5,5,5,5,4,4,5,8,11,17,29,46,65,103,158,206,232,235,213,180,148,93,35,10,3,3,3,3,2,2,0,0,0,0,1,12,
-52,41,33,30,31,34,41,43,36,31,29,28,25,24,30,43,58,82,130,175,199,222,237,228,210,187,157,138,125,115,113,116,119,121,124,127,131,135,145,161,171,176,182,188,194,197,202,206,
-209,211,212,213,213,213,212,210,209,207,205,203,201,198,195,193,191,188,185,181,177,178,182,182,178,176,178,183,193,206,219,229,242,250,252,249,240,225,213,205,190,167,142,124,112,103,97,92,
-87,81,77,74,74,77,91,113,133,153,171,184,198,217,231,240,245,246,243,234,218,191,161,139,117,84,47,24,20,33,46,53,52,46,39,36,35,36,43,45,38,33,31,29,24,21,20,20,
-18,15,16,25,43,65,88,115,145,168,174,174,173,173,173,173,173,173,172,172,173,172,175,182,184,183,182,179,171,160,137,106,76,53,37,26,17,11,9,8,9,8,6,3,0,0,0,0,
-0,0,0,0,0,8,33,44,43,44,44,43,39,35,34,35,35,36,36,37,42,47,53,54,42,22,8,4,4,5,5,5,4,2,1,7,33,80,135,178,205,225,230,200,150,101,55,27,
-19,21,27,27,28,28,28,28,28,29,26,27,33,49,61,61,132,89,60,33,12,0,0,0,0,0,0,4,9,17,26,35,44,53,66,87,109,140,179,211,232,243,241,231,213,179,152,138,
-132,130,132,135,138,142,146,152,155,161,169,178,186,193,200,205,209,212,215,218,220,220,220,219,218,217,215,214,211,208,204,202,199,196,193,192,190,188,187,184,180,178,175,172,169,170,174,180,
-193,210,224,236,246,251,252,251,250,244,232,218,203,196,192,190,187,184,184,186,188,195,212,228,238,244,246,245,243,238,226,207,188,167,145,121,91,62,38,25,18,13,15,26,45,55,45,31,
-17,12,7,7,7,7,7,5,4,3,4,6,9,14,19,25,29,29,32,38,45,54,62,68,76,81,79,73,68,65,63,62,63,64,63,63,63,61,60,57,49,43,42,39,35,29,19,10,
-4,2,2,2,2,3,2,3,3,2,2,3,2,3,2,2,2,2,2,2,2,3,8,9,7,7,7,6,5,4,3,3,3,4,4,4,6,11,20,36,52,54,42,24,8,2,1,1,
-9,24,52,112,183,223,228,209,180,149,98,45,13,1,13,61,115,160,182,184,183,183,183,183,183,183,183,187,193,199,194,175,231,225,215,188,146,92,49,29,23,22,28,43,60,78,94,107,
-117,123,128,137,147,156,164,172,184,200,216,229,243,246,236,222,207,194,187,184,184,186,186,182,178,179,186,194,201,207,211,215,221,228,236,241,244,244,244,244,244,244,243,243,241,237,232,225,
-218,213,207,202,199,196,194,192,190,188,186,183,181,179,178,176,177,179,184,193,207,220,226,229,235,244,250,252,252,250,249,249,248,248,248,248,248,247,244,236,225,213,199,186,172,150,124,99,
-80,63,48,37,28,24,24,26,33,43,52,58,52,31,12,5,4,5,5,6,5,5,6,8,14,23,34,47,63,78,90,102,108,109,112,117,123,128,129,128,126,122,116,111,106,102,100,100,
-102,103,105,106,107,106,100,80,57,44,40,39,40,39,33,26,20,15,9,6,6,7,5,4,2,1,1,1,1,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,1,1,
-1,1,1,1,1,1,1,3,14,33,47,50,38,27,44,79,126,172,206,232,218,170,116,78,54,39,27,23,35,72,145,214,233,218,204,200,201,202,204,206,209,212,214,215,210,204,203,214,
-101,131,165,201,226,228,208,190,177,151,139,143,152,160,166,170,172,174,178,184,195,202,202,202,202,203,206,211,222,236,247,253,254,252,248,246,244,244,243,242,240,239,240,242,244,245,245,246,
-250,252,252,251,250,250,250,250,249,249,249,248,249,251,252,251,249,246,241,231,221,214,208,204,200,199,197,195,194,192,191,190,188,187,186,185,186,188,189,190,193,201,210,220,226,228,228,227,
-227,225,223,220,217,211,199,181,168,157,148,141,132,115,97,88,83,77,69,62,59,61,63,64,63,57,46,33,19,8,7,6,6,6,7,10,17,25,36,52,74,97,115,130,143,150,153,155,
-155,153,150,148,145,142,139,135,133,133,132,133,133,135,138,140,144,147,150,152,155,156,156,152,141,131,129,129,130,126,118,109,102,97,89,83,81,81,79,73,66,65,64,64,62,62,64,64,
-63,59,49,32,11,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,13,28,51,81,115,155,200,230,239,231,211,174,126,94,81,79,81,90,109,140,186,226,239,203,
-143,97,77,72,73,76,81,84,84,80,71,61,50,41,42,60,6,21,46,85,138,191,223,236,245,249,244,237,232,231,231,231,233,234,237,241,245,246,245,245,245,246,246,246,246,247,249,250,
-252,254,254,252,247,243,242,243,244,246,247,248,250,250,252,251,250,247,244,242,241,241,241,240,240,239,239,238,239,241,243,246,248,251,252,253,251,247,242,236,231,225,221,218,216,212,207,203,
-200,200,199,199,196,195,193,191,188,186,184,187,193,201,206,206,203,195,185,174,164,154,142,135,130,128,126,127,128,119,106,99,95,92,89,84,78,70,60,50,37,25,16,10,8,7,8,8,
-14,24,38,57,81,102,119,135,150,159,162,162,162,159,155,150,145,139,134,127,117,108,100,96,95,98,102,106,111,115,120,124,127,130,133,136,142,149,154,156,156,155,155,156,159,167,177,191,
-206,220,226,224,223,223,223,221,217,217,217,217,216,217,217,217,216,215,207,187,144,103,80,66,63,63,65,66,61,49,39,35,35,38,39,39,42,50,79,123,153,177,194,211,229,242,234,208,
-178,144,114,91,77,74,84,103,137,180,218,240,238,198,134,75,48,45,48,50,49,43,37,30,22,12,4,0,0,0,0,0,65,88,111,129,144,155,166,173,187,206,215,223,224,220,217,213,
-207,204,199,189,165,151,150,152,154,157,160,162,165,167,169,169,171,173,171,164,156,160,169,174,175,179,186,194,201,208,216,221,225,230,233,235,236,237,238,237,236,235,235,235,236,237,238,239,
-240,241,243,245,247,250,252,253,254,253,251,249,247,244,239,231,225,220,219,217,216,215,214,212,210,208,206,205,205,203,198,190,181,167,153,141,131,121,114,111,107,105,102,101,101,96,89,84,
-77,71,66,61,53,43,33,25,20,16,13,11,12,18,27,40,64,91,118,139,153,161,163,165,164,159,153,143,130,114,101,88,78,72,66,58,50,42,35,33,33,36,41,46,51,54,57,57,
-62,71,83,91,98,113,129,130,128,135,153,167,183,212,232,243,245,239,234,233,234,234,235,234,231,229,229,229,230,234,236,238,240,241,242,246,250,243,230,218,215,216,217,218,214,208,200,197,
-200,202,203,203,207,214,230,240,232,222,210,200,187,159,121,88,71,59,53,60,88,134,179,208,227,226,193,147,94,42,15,9,11,12,16,17,17,13,7,4,3,2,2,2,3,9,19,31,
-144,154,158,159,158,153,146,135,118,98,85,79,73,66,60,56,53,52,51,46,40,39,42,46,50,53,55,57,59,62,63,64,66,67,69,70,75,84,96,104,110,118,130,142,153,165,175,186,
-195,203,211,215,218,220,222,221,220,219,219,219,220,222,225,228,230,230,230,229,229,231,233,236,240,243,247,249,250,251,253,253,251,247,244,240,235,231,229,227,226,224,220,215,207,196,185,176,
-165,157,147,140,134,129,125,121,118,113,110,106,103,98,93,87,80,73,64,55,48,39,32,26,22,19,20,28,48,75,98,118,138,155,163,164,164,160,154,143,127,103,83,66,49,37,30,26,
-23,23,22,21,21,21,25,31,35,37,37,37,38,46,67,99,134,163,181,187,190,192,197,202,209,219,228,230,230,215,186,153,122,102,94,96,97,100,102,96,86,82,81,81,83,91,101,113,
-123,128,128,134,156,178,201,216,218,217,217,217,215,214,217,218,217,214,214,213,210,202,183,152,127,111,99,87,71,51,40,45,77,124,165,193,217,229,215,180,135,86,42,15,3,1,3,5,
-5,5,4,4,4,5,3,2,2,3,7,18,39,68,96,117,159,156,148,135,116,92,72,53,34,18,9,3,0,0,0,3,6,9,13,17,21,26,29,32,35,36,36,37,37,38,39,40,
-41,43,45,48,53,57,64,73,83,96,109,121,134,146,157,167,175,183,189,194,198,201,204,205,206,207,207,208,209,210,211,212,214,215,215,215,216,217,216,218,219,220,223,224,226,229,233,237,
-238,237,238,240,242,243,243,242,241,241,238,232,225,218,213,208,204,199,196,194,192,192,186,171,153,136,126,118,113,108,102,95,88,80,70,60,52,44,36,34,38,49,68,95,126,149,158,163,
-163,158,152,141,122,100,81,65,48,35,31,35,43,53,65,77,90,101,106,109,120,136,150,157,158,157,155,156,163,180,204,219,219,214,208,205,205,203,201,196,184,164,141,122,106,73,43,26,
-18,15,16,16,16,17,17,15,11,10,9,8,8,10,13,16,21,22,21,21,23,30,43,54,55,55,55,54,52,51,53,56,55,52,54,54,51,43,33,24,22,29,43,65,102,137,165,190,
-215,233,232,202,159,113,63,30,12,2,1,3,5,6,6,6,6,5,4,4,4,4,5,7,17,33,56,86,120,145,156,159,126,101,73,50,32,17,7,1,0,0,0,0,0,0,0,3,
-6,8,12,14,16,19,22,26,33,45,60,67,67,67,67,68,69,70,71,73,77,81,86,87,83,83,90,102,115,128,141,152,161,170,177,182,187,191,194,196,198,200,202,202,204,204,205,206,
-207,209,210,211,212,212,214,215,215,215,215,216,217,217,218,218,218,219,219,220,222,225,228,230,229,228,229,231,233,233,232,231,229,226,222,216,209,197,179,159,143,134,128,122,118,112,107,99,
-92,84,76,68,63,62,67,80,103,126,146,159,165,165,160,144,118,95,78,64,62,53,43,45,66,99,135,164,183,196,207,215,222,227,229,231,232,230,225,221,219,218,218,217,216,209,191,159,
-123,92,73,65,64,63,62,59,54,45,33,26,23,19,19,20,20,19,18,18,16,16,15,14,14,14,14,13,12,11,10,8,8,7,6,6,5,3,2,1,1,0,0,0,0,0,0,8,
-22,28,24,21,20,27,39,58,96,132,156,168,171,166,156,149,139,116,82,45,19,5,0,0,2,3,4,4,5,4,4,4,5,6,7,10,14,22,36,57,86,114,137,153,160,161,157,149,
-41,23,9,2,0,0,3,10,19,30,43,55,70,94,115,122,124,125,126,127,128,130,132,142,155,172,182,184,184,184,184,184,184,185,185,186,187,188,190,190,185,169,157,151,139,124,123,132,
-144,153,162,169,175,179,183,186,190,192,194,195,197,198,199,201,203,205,206,207,209,210,211,212,214,215,215,216,216,217,217,217,218,218,219,219,219,218,217,216,216,214,212,209,207,204,200,195,
-189,184,177,169,160,151,145,141,138,134,132,129,125,122,120,116,112,110,112,113,117,125,138,152,164,168,168,165,157,135,101,76,80,98,111,138,169,164,152,159,179,201,217,224,223,216,203,187,
-163,143,138,140,139,130,112,98,91,89,88,86,86,83,76,64,52,40,33,31,30,30,30,29,29,28,29,28,28,28,27,26,25,24,24,22,22,21,20,18,18,17,16,16,15,14,14,13,
-12,11,11,10,9,8,8,9,10,16,29,48,70,94,121,151,169,170,166,161,161,169,177,176,157,125,88,56,29,12,4,2,2,1,1,3,5,7,8,8,8,9,9,9,11,16,21,26,
-32,40,53,67,79,97,118,138,153,159,161,159,152,133,103,75,0,0,0,0,6,18,41,74,111,141,158,162,158,152,144,141,141,142,143,144,144,145,144,137,122,99,74,68,69,68,69,69,
-70,71,71,72,74,76,79,89,117,153,172,187,202,203,174,141,127,132,144,152,160,165,170,174,178,181,184,186,188,190,192,194,196,198,200,201,203,204,207,208,210,210,211,213,213,214,215,215,
-216,217,217,218,218,217,217,216,215,213,212,208,204,201,198,195,191,189,187,184,180,176,173,170,167,164,161,159,159,160,164,165,165,167,171,173,174,175,175,174,170,162,145,118,93,91,108,145,
-182,181,172,151,110,92,94,97,96,93,89,87,87,85,78,66,50,42,42,42,44,44,43,40,39,38,39,39,38,38,39,39,40,40,40,40,39,39,38,38,37,36,35,34,33,32,32,31,
-30,29,28,26,25,24,23,22,21,21,19,18,17,16,15,15,15,13,12,11,11,10,13,20,36,63,97,127,142,139,124,96,76,78,88,93,91,78,56,37,14,0,0,0,0,4,14,23,
-32,45,56,63,65,65,65,65,65,66,66,67,72,83,96,106,113,124,136,145,151,157,160,161,159,151,136,112,82,51,27,11,0,0,0,1,2,6,9,15,25,32,36,33,24,13,6,4,
-5,6,7,8,9,10,11,12,12,9,9,9,8,8,8,8,8,8,10,11,12,14,19,24,30,41,54,69,93,138,190,213,188,151,126,132,141,148,155,160,165,169,172,174,177,179,182,185,
-187,190,192,193,195,197,200,201,203,204,205,207,208,209,210,211,211,212,213,213,213,214,214,213,212,210,208,207,209,212,214,216,215,216,215,213,211,209,207,205,203,202,200,198,198,199,199,197,
-194,192,189,185,181,175,165,151,128,97,73,94,145,182,179,151,95,54,42,34,28,27,28,29,31,32,34,35,36,38,40,41,42,44,45,45,46,46,47,48,49,50,49,49,48,48,48,48,
-48,47,47,46,46,45,44,44,43,43,42,42,41,40,39,37,36,35,34,32,31,29,28,26,25,24,22,21,19,19,17,17,16,15,14,13,12,12,12,13,17,22,26,29,28,23,15,5,
-0,0,0,0,0,0,0,0,0,0,1,11,32,62,89,106,119,131,140,143,144,144,144,145,145,145,145,146,148,153,157,159,160,161,161,161,159,156,149,135,111,82,54,31,15,6,3,1,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,2,2,3,4,5,9,13,15,14,13,11,9,9,9,8,8,10,11,12,14,16,21,25,30,35,42,49,58,80,129,
-181,213,173,125,120,127,135,143,148,153,158,161,164,167,170,173,176,179,181,183,185,188,190,192,194,196,197,199,199,201,203,203,204,205,206,207,207,207,207,206,206,207,210,215,222,227,228,227,
-225,223,221,218,216,214,212,210,209,208,206,204,203,201,196,191,185,179,167,154,139,123,102,79,54,55,132,190,155,93,51,33,27,29,32,35,37,39,40,42,43,44,45,46,47,49,49,50,
-51,52,53,53,54,55,56,57,57,57,58,58,57,57,57,57,57,56,56,55,54,55,55,55,57,57,58,60,61,62,60,59,57,55,53,48,45,42,40,38,35,32,29,28,26,24,23,22,
-20,19,19,18,17,17,15,15,13,10,8,7,6,6,5,5,6,5,5,4,3,3,2,1,3,13,34,69,111,141,154,158,160,160,160,160,159,159,159,160,160,160,160,160,160,159,155,152,
-148,144,134,120,107,93,75,53,32,15,6,2,2,3,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,2,3,3,3,4,4,5,7,10,10,10,9,8,7,6,
-6,6,5,6,7,9,10,13,16,20,25,31,39,46,53,59,73,127,201,201,173,150,124,122,129,136,141,145,148,151,156,159,162,166,168,170,173,176,178,180,182,184,186,187,189,191,193,193,
-195,196,197,198,198,198,198,201,205,213,222,228,229,229,226,222,217,211,204,197,193,190,187,185,184,182,179,177,172,165,154,141,132,120,104,87,72,58,45,43,85,171,186,94,36,28,31,34,
-37,39,40,42,43,45,46,47,49,51,51,53,54,56,56,58,59,60,61,61,62,63,63,65,66,67,69,70,71,74,77,78,79,79,78,78,78,79,82,86,91,94,101,107,112,113,113,113,
-111,108,102,95,87,80,74,70,64,58,53,50,46,45,44,42,42,40,39,36,35,34,34,33,30,27,23,19,16,13,9,8,7,6,6,4,4,3,4,15,38,74,113,144,157,159,157,151,
-144,135,124,117,115,115,115,115,115,115,115,115,112,104,91,80,71,63,50,37,26,19,12,7,4,2,2,3,4,4,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-1,2,1,1,2,2,3,2,3,4,5,5,5,5,4,5,6,7,8,10,14,18,22,25,26,28,28,29,31,34,40,47,53,58,91,150,183,206,191,131,108,114,121,126,130,134,138,142,
-144,148,151,155,159,160,162,165,168,169,171,173,175,178,178,180,181,182,183,184,186,190,197,208,218,225,227,227,225,218,204,191,181,171,161,153,147,142,138,135,132,129,125,123,118,110,101,92,
-83,75,64,56,62,84,112,155,198,156,64,31,35,39,39,41,42,45,45,47,49,50,52,54,56,57,59,61,62,64,65,66,67,68,70,72,73,74,77,81,85,89,93,99,105,112,120,127,
-132,133,133,136,138,142,147,156,162,168,175,184,187,188,189,188,187,185,179,170,160,152,145,139,130,120,111,105,102,101,99,98,97,96,94,90,86,84,83,81,73,61,46,33,22,15,11,10,
-9,8,6,6,9,20,44,80,119,147,158,160,156,140,108,79,63,51,38,32,30,31,31,31,31,31,31,31,29,24,18,14,10,8,6,5,3,3,4,4,5,4,4,3,3,4,4,3,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,3,3,3,2,2,3,7,12,21,30,42,54,66,77,83,84,81,75,68,59,55,57,
-63,68,71,76,86,115,184,208,163,124,106,108,115,121,123,128,134,143,154,162,166,165,163,164,166,164,160,159,159,162,162,164,166,168,172,177,185,198,211,219,222,222,220,212,198,180,164,152,
-144,137,131,125,120,115,112,109,105,102,98,95,90,85,79,73,71,73,95,133,174,193,186,160,94,44,36,41,43,44,44,46,48,50,52,54,56,58,60,62,64,65,67,69,71,73,74,76,
-79,82,86,90,95,100,107,117,127,136,146,155,164,173,184,194,201,204,207,209,212,216,222,228,233,234,237,240,241,240,239,239,239,238,236,232,227,222,219,215,207,199,192,187,185,183,183,182,
-183,186,187,187,185,183,181,181,177,166,148,124,98,76,58,48,44,42,45,54,72,102,135,160,170,169,164,148,117,75,39,21,13,8,4,3,1,1,1,1,1,2,1,2,2,2,2,3,
-3,3,4,5,4,3,5,5,5,3,3,3,3,4,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,1,1,1,0,2,
-6,15,27,41,59,76,93,109,122,131,137,139,137,131,123,121,125,128,132,133,131,125,130,172,213,216,179,146,141,144,148,154,165,177,187,194,195,195,195,196,198,198,196,194,194,195,196,197,
-199,203,207,213,222,229,231,226,222,212,197,175,155,142,135,129,125,120,116,111,105,100,97,94,91,87,84,84,88,92,106,137,160,180,197,182,140,89,62,48,40,42,44,45,47,48,49,51,
-54,57,59,61,64,65,68,70,72,75,77,79,82,85,88,94,100,110,119,131,140,150,161,176,190,200,209,217,223,228,234,240,241,243,244,245,246,248,251,252,253,253,253,253,253,253,252,252,
-251,251,251,252,251,250,250,248,246,245,242,241,241,240,241,241,242,244,246,246,246,245,245,246,246,246,244,239,229,214,196,178,164,156,160,170,185,199,202,202,200,193,173,147,118,91,72,63,
-57,48,37,28,21,15,12,11,11,11,11,12,13,11,9,6,5,4,5,4,5,4,4,4,4,4,2,2,2,2,3,3,23,17,14,14,11,6,4,1,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,4,8,17,29,42,57,72,87,101,116,129,140,149,155,159,161,163,165,167,169,171,172,172,169,166,175,202,229,231,220,216,217,219,
-221,222,223,224,226,229,233,237,242,247,251,250,249,249,249,249,250,251,252,252,253,253,253,251,244,236,229,218,202,191,186,184,180,175,173,171,162,141,117,108,107,113,135,163,185,193,201,189,
-165,140,101,64,48,46,46,46,48,48,48,50,52,54,56,59,61,64,66,69,72,74,77,80,84,89,94,99,104,110,119,131,145,160,176,190,200,208,218,229,237,242,244,246,248,248,249,251,
-251,251,252,252,252,252,253,253,253,253,253,252,252,251,251,251,251,251,251,252,253,253,253,252,252,252,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,254,254,254,254,252,
-247,243,243,243,243,241,239,236,232,226,220,214,206,194,182,173,165,151,132,116,98,80,70,66,66,66,66,68,71,68,53,38,31,29,30,31,31,30,30,30,31,29,23,22,29,30,27,27,
-121,110,99,94,91,81,69,55,36,22,17,15,12,7,2,0,0,0,0,0,0,0,0,0,0,0,0,1,2,3,5,7,11,17,21,24,29,35,42,49,60,74,90,106,123,136,145,150,
-152,153,155,158,161,167,172,173,174,174,181,199,218,228,234,237,240,246,252,255,255,254,251,248,246,243,239,230,225,224,225,225,225,225,226,224,219,210,202,203,210,215,221,223,214,200,189,182,
-174,167,161,161,176,194,199,196,197,198,190,168,140,122,102,74,58,52,48,49,51,51,50,51,51,52,54,57,58,60,63,66,69,72,75,79,83,87,92,100,108,119,131,140,148,159,172,187,
-201,216,228,236,241,243,245,249,250,250,250,250,250,250,249,248,247,246,247,247,246,245,244,241,239,238,236,233,232,233,234,235,235,235,238,241,243,244,246,247,248,250,250,250,250,250,250,250,
-250,249,249,247,246,246,246,247,249,250,252,253,254,253,253,253,253,254,253,254,254,253,251,248,246,246,247,247,248,246,243,240,237,233,224,214,202,186,176,172,173,172,173,176,183,183,166,145,
-136,134,134,135,136,136,135,135,135,132,120,118,140,143,129,126,221,216,207,199,199,201,198,190,178,167,164,158,145,122,98,81,69,57,43,27,13,11,17,18,10,2,0,0,1,3,4,5,
-5,5,4,3,2,2,3,4,6,10,18,26,39,54,65,70,73,75,77,80,89,102,114,124,133,143,158,178,208,231,240,242,243,243,231,204,180,165,153,145,144,145,150,160,167,170,172,172,
-170,166,158,146,132,116,104,101,105,110,113,110,102,92,86,81,77,73,70,70,77,90,101,104,102,94,74,59,53,51,52,52,52,52,52,53,52,52,53,54,55,57,60,62,65,67,71,74,
-78,84,89,97,104,114,125,139,155,171,187,199,206,214,224,233,241,246,249,250,251,251,250,250,248,246,245,243,240,237,234,227,223,219,219,217,216,213,208,202,196,191,185,180,177,178,180,179,
-179,180,182,188,193,199,205,211,217,221,224,225,225,223,219,214,210,208,204,199,197,196,195,198,201,204,209,220,227,231,233,230,225,219,214,212,212,214,214,216,217,221,224,225,226,228,236,242,
-244,245,246,246,245,242,238,238,237,238,238,240,242,244,242,236,234,234,234,234,234,234,233,234,234,232,226,226,238,237,227,223,248,248,246,244,244,245,246,248,249,249,247,243,233,216,201,190,
-181,168,149,121,100,103,125,131,115,95,77,63,48,30,14,3,0,0,0,0,0,0,0,0,0,0,0,0,0,3,6,8,8,10,12,16,20,29,44,72,113,162,206,231,234,212,185,165,
-150,136,105,73,59,55,52,54,57,63,71,82,90,95,97,96,94,90,84,77,72,68,68,68,68,67,67,66,65,65,63,61,59,58,56,55,53,49,47,47,47,47,48,49,50,51,51,51,
-52,52,53,53,53,55,56,58,60,63,66,69,72,76,82,88,96,108,122,136,150,163,178,195,210,224,234,240,243,245,248,250,251,251,250,249,247,246,244,240,233,226,221,216,211,204,199,191,
-185,181,179,177,176,172,168,161,155,150,144,138,134,130,129,126,124,123,123,124,127,129,133,137,143,147,149,150,148,144,137,131,127,124,121,118,116,114,109,105,104,102,105,113,123,134,142,142,
-131,116,104,97,94,95,100,108,118,127,133,135,140,151,170,184,192,203,215,227,235,241,244,245,245,245,245,245,246,248,250,248,243,239,237,236,236,235,236,237,239,242,246,248,248,248,247,248,
-247,251,252,251,252,251,250,247,245,242,241,241,237,231,229,228,227,226,219,211,211,222,238,244,243,238,231,221,206,183,152,125,105,92,83,81,87,94,96,96,96,96,96,96,95,95,96,96,
-96,97,98,99,101,109,143,189,222,228,204,165,116,69,46,38,34,32,31,31,34,36,37,38,40,40,41,42,44,44,45,47,51,54,57,60,65,68,69,70,71,67,62,58,54,52,50,48,
-47,46,45,45,44,43,42,43,44,45,46,46,47,48,49,50,51,52,53,55,56,58,60,63,66,70,75,80,87,95,105,118,135,156,176,193,206,217,228,238,244,248,250,251,251,251,251,250,
-248,246,241,235,228,225,219,211,203,195,191,186,181,175,171,167,163,161,159,158,156,153,151,147,144,140,136,132,129,125,122,119,116,113,111,108,105,103,100,98,97,96,95,93,90,86,82,80,
-77,73,72,68,66,63,58,54,49,46,44,43,44,49,53,53,48,42,41,39,40,40,43,48,54,56,52,48,50,59,70,78,88,103,122,144,167,189,199,203,205,205,206,209,214,217,209,190,
-167,150,145,144,146,148,153,160,165,174,185,194,198,210,227,240,154,178,201,213,210,201,192,188,189,191,193,196,199,199,194,187,181,177,181,189,194,192,188,187,188,188,183,178,180,196,214,224,
-228,226,223,223,226,229,230,230,229,230,230,230,230,230,230,229,230,230,230,230,231,231,227,203,155,103,57,29,17,15,16,19,20,21,23,24,24,25,26,27,27,28,28,28,29,31,39,51,
-61,69,73,78,79,80,81,82,82,82,80,74,69,64,56,49,45,40,39,37,37,36,38,38,39,40,42,44,45,46,48,49,51,53,55,58,59,62,65,69,75,83,93,106,122,137,152,170,
-191,211,227,237,243,245,248,250,251,251,250,249,247,246,244,240,233,225,217,208,200,196,191,186,181,178,176,173,171,168,167,165,164,163,162,160,158,156,154,152,149,147,143,141,137,135,131,128,
-125,122,118,114,110,107,102,99,95,92,87,84,80,76,73,69,66,61,58,54,52,49,45,42,39,37,33,31,30,31,35,45,52,57,60,61,60,61,60,60,61,59,56,49,45,40,34,30,
-28,31,38,49,66,83,89,92,94,97,103,108,109,102,86,66,49,41,38,37,39,41,46,51,54,60,69,79,84,93,112,132,22,34,51,60,58,53,52,54,56,56,56,55,54,52,47,43,
-40,39,41,44,45,43,40,39,38,33,26,24,29,47,71,94,110,121,130,133,127,120,117,118,117,118,117,118,118,118,118,117,119,118,119,118,120,115,88,50,21,8,6,8,10,12,13,14,
-15,17,18,18,18,19,19,19,20,22,24,30,39,51,62,69,67,62,57,54,51,50,57,57,51,52,60,67,70,73,74,73,70,64,61,59,59,60,60,49,38,39,41,42,44,47,48,51,
-52,55,58,61,64,69,75,84,96,113,134,157,178,195,209,222,234,243,248,250,251,251,251,249,248,246,240,234,230,226,222,214,206,199,193,187,184,182,181,180,179,178,178,177,177,176,175,175,
-174,173,172,171,168,167,165,163,160,158,155,152,149,146,142,139,135,131,128,124,120,115,112,107,102,98,94,90,85,81,77,72,69,66,62,58,54,51,47,44,42,41,40,43,50,58,67,70,
-66,59,52,46,41,40,44,43,34,35,42,48,52,55,55,52,48,43,40,40,43,44,44,31,17,17,20,21,21,16,12,7,5,5,5,5,5,5,5,6,6,8,10,12,15,16,19,21,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,2,3,4,2,2,1,1,1,2,1,1,2,2,2,1,
-2,1,2,2,2,3,2,1,2,4,7,10,16,22,29,34,38,42,47,49,49,52,53,54,54,54,55,58,60,59,52,39,28,22,21,21,29,43,55,40,22,21,24,27,32,38,46,53,
-60,66,69,71,72,74,71,54,37,37,39,42,45,47,49,52,55,59,63,69,78,88,102,118,139,165,192,214,229,239,243,247,249,251,251,249,247,245,243,237,231,224,215,207,202,199,196,193,
-189,187,185,184,184,185,186,187,187,187,187,187,187,187,186,186,185,184,183,182,180,178,176,174,172,169,167,164,160,157,153,149,146,142,138,133,129,125,120,116,111,106,103,99,97,97,98,97,
-96,94,94,92,89,87,86,84,80,78,77,77,77,74,64,50,37,29,24,22,27,40,50,34,12,9,11,14,19,24,30,37,43,48,52,52,53,52,48,27,5,2,2,2,2,2,3,3,
-3,4,3,4,5,4,3,3,3,4,4,3,3,3,3,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,4,7,9,12,17,25,32,40,48,54,56,56,56,57,64,68,73,82,95,100,97,91,82,68,53,42,36,34,
-34,36,44,58,75,84,71,38,15,14,16,17,17,18,19,21,24,29,33,36,38,40,40,37,35,37,40,43,45,48,53,58,64,72,82,95,111,130,152,175,197,219,236,245,249,251,251,251,
-250,248,243,236,228,223,217,211,204,197,192,189,187,187,187,188,189,190,191,192,193,195,196,197,197,198,198,198,198,198,197,196,196,194,194,192,190,188,186,184,182,180,177,174,170,168,164,160,
-155,152,148,145,140,136,132,129,127,127,127,127,127,126,124,120,116,113,113,114,114,119,126,128,124,116,106,92,77,64,56,52,49,49,54,65,79,87,72,38,14,10,9,8,8,7,6,8,
-9,12,16,17,17,17,16,8,3,3,3,3,3,3,4,4,4,4,4,4,5,5,4,4,4,5,4,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,24,33,37,41,44,45,46,50,52,52,48,44,36,29,24,
-21,19,22,24,28,38,54,71,87,99,100,93,81,71,69,73,74,73,77,89,95,89,73,54,37,24,15,12,13,15,16,17,19,20,22,23,24,26,28,32,36,39,43,46,51,57,64,76,
-90,108,127,146,168,191,211,227,238,245,249,251,251,249,246,244,239,230,218,207,199,193,190,188,186,185,185,186,189,191,193,195,197,198,200,202,204,205,205,206,207,207,207,208,207,207,206,206,
-205,204,203,202,200,198,196,194,191,189,186,183,180,177,174,169,168,170,169,167,165,162,158,155,152,149,145,139,132,123,113,106,99,93,90,87,86,90,98,110,119,126,125,117,105,94,90,91,
-91,87,89,97,103,96,77,57,40,24,13,9,8,7,7,7,6,6,5,4,3,2,1,2,2,3,3,3,3,3,3,4,4,4,4,4,5,5,4,4,4,5,4,3,3,3,3,4,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,
-10,37,49,50,49,49,49,46,40,32,23,15,9,4,2,2,3,4,5,6,12,23,37,54,67,74,78,78,70,58,51,47,44,39,36,36,38,37,43,53,61,60,48,34,28,28,34,41,
-46,48,52,58,61,57,51,45,45,47,52,59,68,81,98,120,145,170,190,209,224,236,244,248,250,251,250,246,241,233,224,218,210,199,189,183,180,180,181,183,185,188,191,193,196,198,201,204,
-206,208,209,210,212,213,214,214,215,215,216,216,216,215,215,214,213,213,211,210,209,207,206,203,201,198,196,192,189,186,182,178,179,183,184,180,176,172,168,162,155,147,138,129,120,112,105,100,
-94,90,85,82,81,84,90,100,108,110,111,108,99,86,77,71,65,59,54,51,50,48,50,58,65,62,49,33,24,23,28,33,36,37,38,41,41,35,24,13,7,4,2,2,1,1,2,2,
-2,2,2,2,3,3,3,3,4,4,4,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,1,14,27,30,31,31,31,30,28,22,14,8,4,3,9,15,29,42,44,44,43,40,37,34,30,25,26,26,26,30,34,37,41,49,58,65,65,57,46,38,35,30,23,15,9,
-5,3,3,3,4,7,13,28,52,77,91,89,80,72,67,67,67,68,77,97,109,114,113,107,103,103,108,116,131,148,168,191,212,229,239,245,248,250,250,249,248,244,238,226,212,200,191,185,
-181,177,176,175,178,181,184,188,192,195,199,202,205,207,210,212,214,215,217,218,219,220,221,222,222,222,222,222,222,222,222,222,221,220,219,218,218,219,218,216,214,212,210,207,203,198,193,189,
-185,183,181,180,180,177,172,167,162,156,150,143,136,131,126,121,118,116,113,111,112,115,116,113,104,92,82,76,68,59,50,41,34,29,27,23,22,21,24,36,57,81,93,88,77,68,61,58,
-56,55,61,78,88,88,82,70,57,46,37,30,28,28,28,29,29,29,29,29,25,18,11,5,3,3,5,3,3,3,3,3,0,3,8,15,22,24,24,24,24,24,24,24,24,21,15,6,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,23,43,48,48,49,49,49,50,51,50,45,38,28,17,12,28,46,50,50,50,50,51,51,52,52,54,54,53,
-51,52,55,60,67,72,72,66,59,54,53,52,51,49,45,39,33,29,29,31,35,39,43,51,62,70,79,83,79,70,58,53,53,55,66,89,110,127,145,158,167,177,187,199,210,221,232,241,
-247,251,252,252,251,250,248,241,232,219,205,191,178,171,168,168,171,174,179,184,189,194,198,202,205,208,211,214,216,217,219,219,220,220,221,222,223,223,223,224,224,224,224,224,224,225,225,225,
-225,224,224,223,224,226,226,224,223,222,219,217,215,213,209,204,199,192,187,187,189,186,181,177,173,169,164,160,156,152,148,142,137,133,129,128,128,128,124,117,108,100,95,91,87,83,76,68,
-59,52,49,49,49,50,52,57,64,71,77,77,69,55,37,27,22,20,25,39,51,60,73,84,89,90,89,87,86,86,86,87,87,87,87,86,85,78,66,49,30,11,3,1,2,1,1,1,
-51,61,74,89,99,101,101,101,101,101,101,101,101,98,88,70,48,26,10,4,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,11,13,13,14,14,14,16,23,31,39,46,
-51,50,46,43,38,31,25,21,19,18,18,21,25,28,30,31,34,42,55,68,74,70,62,54,49,48,52,54,56,59,63,67,71,72,72,72,73,72,72,68,61,55,56,62,69,76,82,88,
-93,100,111,128,149,168,184,195,205,216,228,237,243,246,249,250,251,250,249,246,242,236,229,222,212,198,180,167,162,164,171,181,191,197,202,209,214,216,218,220,222,224,225,227,227,228,227,226,
-224,222,220,219,218,218,216,216,215,215,215,215,215,216,217,218,219,220,221,222,223,224,224,223,222,221,220,218,216,215,213,212,209,206,202,198,193,186,180,173,168,162,157,152,149,145,140,135,
-130,129,130,131,130,121,110,98,90,85,84,82,80,79,79,81,81,79,77,75,71,68,65,59,46,33,26,22,19,13,9,6,5,4,3,4,6,9,16,26,37,46,55,62,63,63,63,64,
-64,64,64,65,70,79,87,92,86,61,30,11,5,9,21,33,119,120,120,115,107,105,105,105,105,105,105,105,105,108,117,129,125,103,77,63,56,44,30,22,16,12,11,11,11,13,14,13,
-12,10,5,1,0,0,0,0,0,0,0,0,0,1,4,10,19,30,41,49,51,48,42,35,31,27,26,29,34,39,45,55,67,78,87,93,92,87,84,83,81,82,83,83,84,85,86,92,
-97,100,101,99,98,98,100,104,107,113,123,136,149,162,173,180,184,188,195,206,219,229,234,236,238,242,246,248,249,249,249,247,242,235,224,213,201,189,181,179,184,191,190,184,182,190,202,211,
-214,215,217,218,219,221,223,223,225,226,226,226,226,226,224,224,220,215,208,203,199,194,189,185,182,180,180,180,182,184,187,191,195,199,203,208,211,213,216,219,220,221,220,220,218,217,214,211,
-209,208,207,205,202,197,191,184,178,172,166,160,155,150,146,144,144,142,138,130,115,101,89,81,75,69,65,61,57,54,53,53,55,55,52,48,43,40,41,43,41,36,35,35,36,34,34,33,
-32,30,25,19,14,10,5,3,2,3,6,8,9,9,9,10,10,9,9,9,13,19,30,49,75,96,95,76,63,75,96,109,85,70,56,42,31,28,28,28,28,28,28,28,28,31,46,76,
-100,111,117,118,117,113,105,97,88,83,80,80,82,85,81,72,70,66,56,46,37,26,18,11,5,0,0,0,0,0,0,0,0,0,6,15,27,38,46,51,55,60,67,77,88,100,109,116,
-122,127,133,145,156,164,169,171,170,171,171,171,171,170,171,171,171,171,172,174,177,182,189,198,206,211,218,225,231,237,240,242,242,243,244,246,249,249,250,249,248,247,247,245,242,239,233,222,
-208,191,175,162,154,147,146,152,166,189,208,214,215,218,220,217,209,206,208,209,210,212,214,216,217,217,215,212,207,202,195,191,185,177,168,160,152,145,138,132,128,125,124,125,129,133,138,142,
-149,157,164,173,181,187,196,203,208,213,216,218,219,219,219,217,214,209,206,203,202,200,198,195,191,186,182,178,173,168,163,156,149,138,126,114,103,96,90,85,80,74,69,64,59,54,50,45,
-41,37,36,40,47,58,74,94,109,111,109,109,110,110,109,108,107,105,100,91,82,72,57,40,25,14,7,4,1,0,0,0,0,0,0,1,1,2,7,23,53,98,139,150,147,151,144,122,
-56,36,25,22,23,25,25,24,24,24,24,24,21,16,13,18,29,44,60,69,73,85,97,103,109,112,113,114,115,113,96,78,75,79,84,86,86,83,77,70,58,42,29,18,10,5,1,0,
-0,0,0,0,0,4,11,22,38,61,87,113,137,157,170,177,184,192,203,215,225,230,231,231,231,231,231,231,231,231,232,232,233,234,235,238,239,241,242,243,245,247,249,249,250,251,251,251,
-251,251,252,252,251,250,248,247,245,242,236,228,218,207,194,181,167,155,147,145,148,157,167,180,192,202,208,209,209,213,215,212,206,205,207,209,212,213,214,212,209,204,197,186,173,158,143,129,
-115,102,91,82,73,68,63,60,58,57,57,59,61,64,67,70,77,88,100,113,127,141,155,168,180,191,200,207,213,217,221,224,224,221,214,208,202,197,194,190,187,182,178,173,167,161,154,145,
-135,127,119,113,108,101,95,89,83,78,72,66,61,57,53,53,56,64,76,90,100,107,108,113,126,128,121,115,114,113,113,112,111,111,115,119,123,124,122,113,99,82,67,55,41,30,28,28,
-29,30,30,33,41,54,71,91,110,125,133,128,119,126,124,104,89,85,87,94,99,103,103,101,101,101,101,100,97,89,77,67,63,62,62,55,47,42,39,40,43,46,46,47,46,42,29,18,
-16,21,29,39,49,61,69,78,85,88,84,77,68,58,45,34,24,17,13,11,10,13,24,43,75,117,156,186,206,220,228,231,235,238,242,244,245,246,246,246,246,246,245,246,247,247,247,248,
-249,250,250,250,249,249,248,248,248,248,248,247,246,244,241,240,240,239,238,236,229,222,217,216,217,216,211,206,197,189,181,178,178,180,181,185,192,200,207,212,211,202,192,186,187,193,203,211,
-215,217,218,219,219,217,213,205,194,181,165,145,125,104,84,65,52,39,30,23,18,14,11,10,10,9,10,10,10,10,11,12,16,20,29,39,54,70,87,108,128,148,166,183,195,206,215,224,
-231,235,232,225,221,213,203,196,190,185,180,175,168,161,153,145,139,133,126,119,113,106,100,93,87,82,80,80,82,84,87,96,107,115,115,108,95,80,63,53,56,55,48,43,42,40,40,39,
-37,38,42,50,57,69,85,102,115,121,123,122,115,107,104,106,113,119,121,124,132,142,151,156,149,116,80,51,34,42,65,84,56,72,87,98,103,106,106,105,105,105,105,105,108,114,119,119,
-119,118,117,115,110,100,86,72,59,46,38,33,29,27,25,23,23,23,24,26,30,34,34,34,42,51,61,71,79,84,87,85,83,79,76,76,78,88,108,136,173,207,230,241,246,248,249,249,
-249,249,248,246,243,240,239,239,240,240,241,242,243,243,244,243,243,241,239,237,236,236,236,236,236,235,231,225,219,209,199,193,190,188,185,177,163,148,138,135,138,143,147,152,158,163,164,168,
-180,190,194,199,204,207,210,212,212,206,199,195,195,195,199,204,210,215,217,216,211,204,192,176,155,132,108,84,63,46,32,23,16,11,8,7,5,5,4,3,2,2,1,1,1,0,1,0,
-2,2,3,6,10,17,27,41,60,81,107,132,156,177,194,209,225,237,244,243,242,242,233,221,213,207,203,198,193,186,179,173,168,162,153,145,139,133,128,122,117,115,120,126,128,128,126,123,
-116,99,80,61,46,35,29,25,22,20,17,15,14,13,12,10,9,9,8,8,9,11,17,27,42,57,69,84,98,106,107,112,128,141,144,148,152,154,153,153,146,121,93,69,49,34,30,36,
-51,43,35,31,30,29,29,28,28,28,28,28,32,42,53,63,68,74,88,108,131,151,154,151,145,134,123,113,105,100,100,100,100,101,102,104,106,105,99,85,73,63,55,49,49,53,61,75,
-93,108,120,130,144,164,188,210,230,242,249,250,249,248,246,245,243,239,235,230,221,213,210,208,208,208,207,203,200,197,194,191,188,185,184,184,184,184,184,184,183,178,170,159,147,133,122,114,
-111,110,107,102,92,83,77,75,77,80,84,91,99,107,113,120,132,143,149,157,166,173,178,185,194,204,210,214,215,214,213,212,210,209,205,197,186,169,147,122,95,69,46,28,15,9,5,3,
-2,2,2,3,3,3,3,3,3,3,3,3,2,2,3,4,4,4,5,5,6,7,9,13,19,31,49,72,99,126,153,177,199,220,239,248,250,252,251,244,230,221,213,205,199,195,194,192,
-186,179,176,173,168,163,158,154,150,146,140,130,118,108,95,82,68,54,44,38,35,32,30,28,25,22,20,18,16,15,14,13,12,11,9,8,8,7,5,4,4,6,10,15,23,29,32,34,
-45,55,57,62,69,74,75,80,93,108,119,121,117,105,87,71,115,101,79,58,43,33,28,26,25,24,24,24,24,26,29,35,45,63,86,109,132,149,151,147,142,135,127,118,110,108,111,115,
-121,131,143,154,157,157,157,154,150,144,135,123,113,102,91,93,108,127,149,172,192,213,231,240,244,247,246,240,229,216,204,196,186,176,166,155,141,129,123,120,119,118,112,104,100,98,96,95,
-95,95,96,97,97,98,99,98,97,94,86,78,70,64,58,56,55,56,57,57,56,56,57,60,64,69,73,78,84,89,96,103,110,117,124,131,138,146,154,161,170,182,193,202,210,217,220,220,
-217,211,198,181,159,132,103,73,47,26,12,5,1,1,0,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,2,2,2,3,3,4,4,4,6,6,7,11,19,32,54,80,108,139,
-166,189,215,238,250,253,253,252,243,229,220,206,190,181,177,174,166,159,155,153,147,141,136,129,125,117,105,90,79,70,63,56,52,47,44,41,38,34,31,29,26,23,21,19,17,16,15,13,
-12,11,10,10,9,8,7,6,6,6,5,3,2,3,2,2,3,4,4,4,7,8,8,11,19,34,53,70,89,108,119,122,91,107,119,120,114,108,104,102,101,100,100,101,100,101,100,103,
-110,117,119,113,103,91,76,62,51,43,41,45,54,69,87,100,113,129,142,149,147,146,147,149,151,151,152,154,151,140,120,112,126,153,185,214,232,243,248,250,249,246,235,211,177,147,124,110,
-99,88,71,57,46,38,34,32,32,32,31,31,32,32,33,32,33,34,35,35,35,38,38,38,39,37,35,33,33,33,33,35,36,39,41,45,48,50,55,59,64,69,75,81,87,93,100,106,
-113,119,127,133,140,147,155,161,168,175,182,189,196,202,208,209,207,199,185,162,131,98,65,38,19,8,3,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,1,
-1,1,1,2,1,2,2,2,3,3,5,10,21,39,64,94,125,154,180,207,235,251,254,253,253,248,239,232,217,196,183,175,166,156,145,136,129,122,115,108,102,95,88,82,76,71,66,60,
-57,52,47,43,40,35,32,30,27,24,22,20,18,16,15,14,12,11,11,10,9,9,8,7,7,7,6,6,5,5,5,4,3,3,3,2,3,3,2,1,0,1,3,8,17,33,50,65,
-16,32,54,72,86,97,102,104,104,104,104,104,104,104,105,104,97,80,60,42,29,19,11,7,9,18,40,67,91,109,119,121,120,113,102,86,74,68,69,70,71,73,77,82,89,97,108,131,
-165,198,224,238,245,248,247,244,239,230,206,166,124,98,82,75,71,63,37,16,11,10,9,9,8,9,9,10,10,11,11,11,12,13,13,14,15,16,17,18,19,20,21,22,24,26,27,31,
-33,37,40,43,47,51,56,61,66,71,77,83,90,96,103,109,115,122,130,137,145,151,158,165,172,178,184,190,194,197,198,193,186,172,151,123,91,59,32,14,5,2,1,1,1,1,1,1,
-1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,1,1,0,0,1,1,1,4,12,27,52,83,116,147,174,202,232,250,253,253,254,252,249,245,233,219,208,
-200,189,169,150,142,136,128,121,115,109,103,97,92,88,82,77,71,65,59,52,47,42,37,33,30,26,23,21,18,16,15,14,13,12,10,9,9,8,7,7,6,6,6,6,5,6,4,4,
-4,4,3,4,4,4,3,2,3,3,2,1,1,1,2,6,0,0,3,17,34,49,59,62,62,57,50,48,48,53,59,59,54,44,35,36,40,45,50,58,68,87,111,121,115,99,80,65,
-52,37,24,13,7,5,6,8,11,19,34,57,89,126,164,199,224,238,245,246,245,239,227,204,180,157,128,91,62,49,43,40,40,36,18,6,4,5,5,6,6,6,7,7,7,8,8,8,
-9,10,10,11,12,12,14,16,17,17,18,20,22,25,27,30,34,38,41,45,49,53,57,62,68,73,79,85,91,97,104,111,118,125,132,139,147,154,160,168,174,181,187,191,195,197,193,184,
-169,146,117,85,54,28,11,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,10,26,
-52,84,120,150,176,200,229,247,253,253,253,253,251,247,241,233,224,215,200,185,178,172,165,158,152,147,143,139,134,130,126,121,115,107,97,86,78,68,60,52,45,38,31,27,21,19,18,16,
-15,14,14,13,12,11,10,9,9,8,7,6,5,4,4,4,4,3,3,4,4,4,3,2,3,3,3,3,3,2,1,0,1,15,40,66,87,103,116,124,123,116,106,100,96,101,110,114,
-116,114,112,114,119,120,120,121,121,118,100,72,45,23,11,5,1,0,0,1,3,7,12,21,34,57,89,130,170,202,226,239,245,247,244,237,223,199,165,126,89,61,39,22,11,6,5,4,
-4,5,5,5,5,4,5,6,6,7,7,7,8,8,9,9,9,9,10,11,13,13,14,16,17,19,27,31,33,33,34,34,35,37,40,45,49,53,58,62,68,73,79,86,91,98,104,111,
-118,125,133,140,148,155,162,170,176,182,188,192,195,194,187,175,155,129,98,65,36,15,4,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,12,31,60,95,129,159,183,207,230,248,252,252,252,252,250,248,244,240,234,228,225,224,221,215,210,205,203,201,199,197,195,193,190,
-186,178,167,154,143,131,118,107,94,81,72,62,52,44,41,37,34,32,32,30,30,29,29,27,25,22,19,15,12,9,8,7,5,4,4,6,6,6,5,5,6,6,6,6,5,2,0,0,
-68,97,126,154,173,186,200,210,211,206,202,199,187,175,178,183,185,180,166,148,130,115,100,86,73,56,34,16,9,7,7,8,10,12,16,21,29,40,56,77,104,137,174,206,229,240,245,246,
-244,237,221,194,158,118,81,51,29,17,9,6,4,2,2,2,2,3,5,5,5,4,4,6,6,6,7,8,9,8,8,10,10,10,11,12,13,14,15,16,16,27,53,65,67,66,66,64,
-58,51,48,48,50,55,61,66,73,81,91,101,108,115,122,127,133,137,141,145,150,156,163,170,177,183,189,192,193,190,181,168,149,121,86,50,23,7,2,0,1,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,6,18,43,76,111,145,173,197,220,238,250,252,252,252,251,250,249,
-248,247,247,248,248,247,246,243,242,241,241,240,239,239,238,237,236,233,227,220,213,205,196,186,174,162,155,144,130,122,117,112,104,98,93,89,88,87,87,86,83,78,75,71,65,60,55,50,
-46,42,37,33,29,25,23,23,25,26,26,23,16,11,15,28,194,202,213,229,237,242,245,247,247,246,245,245,242,233,233,235,236,233,219,190,154,127,103,80,62,50,45,44,44,45,45,46,
-49,56,65,78,93,113,139,165,188,211,230,241,246,246,243,235,219,191,155,114,75,45,25,13,6,4,2,3,4,4,3,3,3,3,4,5,5,5,4,5,7,7,7,8,8,9,8,10,
-11,10,11,12,13,14,15,16,17,24,43,53,57,63,68,75,80,82,78,77,76,81,87,94,100,108,118,132,144,151,156,161,165,168,169,171,172,171,172,174,179,184,189,192,193,191,185,172,
-146,109,68,34,12,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,
-12,32,62,99,134,163,188,216,236,246,252,252,252,251,251,251,251,251,251,252,252,252,251,251,250,250,250,250,250,250,250,249,249,248,247,245,244,243,240,237,232,226,218,208,197,192,191,192,
-191,190,188,185,183,182,182,183,180,175,169,166,162,155,147,141,137,135,131,125,116,105,96,91,93,102,109,106,101,111,138,167,248,247,248,248,248,247,247,247,247,247,248,248,248,248,248,248,
-248,248,248,240,221,202,184,163,144,132,127,125,125,125,126,127,132,140,153,166,180,197,215,228,237,243,246,246,242,232,214,186,150,110,73,43,23,11,4,2,1,1,2,3,4,4,4,3,
-3,3,3,4,5,5,6,6,6,7,7,8,8,9,9,10,10,11,12,13,14,15,15,16,18,19,21,24,27,31,36,42,54,66,76,84,89,93,95,97,101,102,105,117,130,138,143,148,
-154,162,171,180,187,191,193,194,194,196,198,201,203,201,192,168,133,93,55,26,9,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,8,27,55,91,127,158,181,206,234,247,251,252,252,251,251,251,251,251,251,251,252,251,249,246,244,243,243,243,242,242,241,241,
-241,243,245,245,246,247,248,248,247,246,243,239,235,234,233,234,235,236,237,238,238,237,237,237,235,232,226,222,219,212,204,198,197,200,203,205,205,203,200,198,204,218,226,226,228,235,245,249,
-247,247,247,247,247,247,247,247,247,247,246,246,247,248,248,249,249,249,249,249,247,243,238,228,218,212,211,213,213,214,213,213,215,220,226,231,235,239,244,246,247,245,242,233,212,181,143,104,
-68,40,22,10,4,1,0,0,0,2,2,3,3,4,4,3,3,4,3,4,5,5,5,6,6,7,8,8,9,9,10,10,10,11,12,13,13,15,16,16,18,20,21,23,24,27,30,32,
-36,40,46,54,60,64,67,70,74,78,82,90,98,103,110,118,124,132,143,153,165,178,189,198,203,207,210,211,209,201,184,157,122,86,53,25,8,2,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,9,26,54,89,126,157,180,197,224,246,251,252,252,251,250,250,
-250,249,248,245,241,235,228,219,214,210,208,206,204,203,201,201,204,209,216,221,226,231,236,239,240,243,246,247,247,247,247,247,246,246,246,247,247,246,246,247,246,245,244,243,242,239,235,233,
-234,236,238,240,241,242,244,245,249,252,252,252,252,252,251,249,248,248,247,247,248,246,245,238,227,211,195,187,187,190,194,198,207,222,235,235,235,238,245,247,247,246,247,248,247,247,247,247,
-247,247,248,249,249,249,246,241,235,226,208,178,139,99,63,36,19,9,3,0,0,0,0,0,0,0,0,1,1,1,2,2,2,3,3,4,5,5,5,6,6,7,8,9,9,9,10,10,
-11,11,11,13,14,15,16,16,18,19,21,24,26,28,31,33,37,39,41,45,49,54,58,64,69,75,81,86,93,99,107,114,120,126,134,141,149,158,168,178,187,194,199,200,198,190,176,154,
-125,91,56,28,10,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,
-10,28,58,94,129,160,182,199,222,245,253,252,251,250,248,244,242,238,232,217,201,191,180,171,162,155,151,147,143,139,136,134,135,141,148,156,165,174,184,193,201,212,224,232,236,236,236,237,
-236,236,236,236,236,236,236,236,237,240,242,245,245,246,246,246,247,247,247,247,247,247,248,248,249,249,250,250,250,249,248,248,216,209,204,202,200,188,172,150,124,97,76,68,67,67,68,73,
-84,110,142,147,142,145,165,193,206,208,213,221,227,233,237,241,242,243,242,239,235,227,214,202,190,174,145,106,66,36,18,8,3,0,0,3,8,13,19,23,24,25,25,25,26,24,20,14,
-8,2,2,2,3,5,5,5,6,7,7,9,9,9,10,11,11,12,12,12,14,15,16,17,18,20,21,24,26,28,30,33,37,40,42,46,50,55,59,64,70,75,80,87,93,100,106,113,
-120,127,134,141,148,155,162,169,176,182,188,191,192,188,178,160,134,101,66,36,14,4,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,14,36,68,104,139,168,190,211,232,250,253,252,249,247,239,231,222,213,195,171,156,148,139,131,122,116,109,104,98,94,89,84,
-83,84,85,88,92,98,106,114,125,140,157,171,181,184,185,186,186,185,184,184,183,184,184,185,190,198,208,217,223,229,234,237,242,247,247,248,248,248,248,248,247,245,238,231,227,226,225,222,
-113,96,86,81,74,63,50,36,23,13,8,7,7,7,8,12,20,35,57,63,55,47,57,77,94,111,130,148,159,162,163,170,180,184,181,172,157,140,129,122,113,104,90,74,56,41,34,35,
-41,48,56,67,77,88,97,100,101,101,101,102,102,100,94,83,66,42,23,11,4,2,3,4,5,6,7,7,9,9,9,10,12,12,12,12,13,15,16,17,18,20,22,23,25,28,30,33,
-35,38,40,45,49,53,57,62,68,73,79,86,92,98,105,111,118,125,132,140,147,154,160,168,175,181,187,190,192,190,183,169,146,116,81,49,23,8,1,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,8,24,51,87,125,159,185,207,228,246,253,252,250,248,242,232,221,
-209,192,170,151,137,129,122,114,107,101,95,88,82,76,71,66,62,59,56,54,53,53,54,57,62,69,80,89,96,99,100,99,99,98,97,95,95,96,96,98,103,114,126,140,152,164,175,183,
-194,208,214,215,215,214,214,210,198,177,151,136,138,146,145,133,26,17,12,8,6,4,3,1,0,0,0,0,0,0,0,2,8,17,29,38,38,32,33,42,55,72,85,87,80,71,64,61,
-63,67,65,60,58,61,63,52,36,29,30,38,50,62,78,100,121,134,135,129,123,118,112,107,105,105,105,105,106,108,114,120,124,115,97,75,52,29,15,10,6,4,4,6,7,7,8,8,
-9,10,10,11,12,13,14,15,16,18,19,22,24,27,31,33,38,45,50,54,59,62,67,70,73,75,79,84,90,96,103,110,117,123,130,137,145,152,159,166,172,180,185,189,193,193,189,178,
-160,134,103,69,40,17,5,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,6,19,
-43,76,114,150,178,200,219,242,251,249,248,243,235,225,219,213,207,199,187,172,155,137,123,112,103,95,89,83,77,71,66,60,55,51,47,43,39,37,34,33,33,34,35,36,39,40,40,40,
-42,44,45,45,45,45,45,44,43,45,51,57,66,76,84,91,98,105,111,112,112,111,108,100,85,65,53,53,62,67,60,43,2,0,0,0,0,0,0,0,0,0,0,3,10,16,23,34,
-48,61,71,79,88,89,90,93,99,106,112,108,99,95,92,77,60,49,40,35,38,46,45,34,21,18,26,43,65,91,117,135,138,126,103,76,57,44,35,29,28,28,28,28,29,31,40,54,
-75,99,114,122,119,104,84,66,51,38,32,29,28,31,33,33,34,34,35,35,34,31,28,27,25,25,28,36,44,52,56,61,67,75,80,84,87,90,94,97,98,98,99,97,91,94,101,108,
-115,121,128,135,142,149,157,163,170,176,182,188,192,194,193,186,175,155,128,96,65,36,16,5,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,2,6,18,40,71,106,140,167,187,206,232,246,241,238,230,215,201,192,187,183,184,188,192,191,187,175,160,144,129,116,105,98,91,87,83,78,
-74,70,67,62,57,51,44,39,35,31,31,35,41,45,46,48,53,56,57,59,59,58,57,56,53,49,46,36,23,22,26,28,29,29,30,30,30,30,27,24,19,15,15,18,20,17,12,6,
-0,0,0,0,0,0,0,0,0,3,27,59,79,91,100,108,116,119,120,119,118,118,118,119,120,122,124,127,130,138,146,145,139,132,122,111,106,104,99,96,93,98,107,115,119,119,111,90,
-64,40,20,8,1,0,0,0,0,0,0,0,0,0,0,3,10,24,41,63,88,109,122,130,133,128,121,114,106,105,107,108,108,109,108,109,108,103,97,94,90,90,95,101,99,93,88,83,
-77,72,70,70,74,77,81,86,94,102,108,104,91,91,98,104,111,117,124,132,139,146,153,160,166,173,179,185,190,194,195,193,186,173,154,128,98,67,39,19,7,1,1,1,0,0,1,1,
-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,3,8,21,43,71,103,135,161,181,196,221,240,233,226,219,202,189,181,174,168,161,
-156,155,156,162,169,176,179,181,179,172,164,155,147,142,140,137,134,132,129,127,123,116,108,102,96,93,96,99,95,85,76,69,60,51,45,42,42,40,40,41,45,50,51,38,13,4,4,4,
-4,4,6,6,6,6,5,3,2,3,4,4,2,1,0,0,0,0,0,0,0,0,0,0,0,11,64,111,119,113,106,97,85,72,64,56,49,46,46,46,47,47,48,50,57,68,80,95,
-114,129,136,139,142,150,156,158,158,158,157,143,112,79,48,20,3,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,7,24,52,89,133,160,163,158,142,121,112,110,111,
-112,112,113,113,117,123,126,127,131,139,151,155,148,134,124,112,94,79,70,64,62,64,67,71,78,86,93,96,95,97,103,108,112,117,124,129,136,142,149,156,162,168,175,181,187,192,195,196,
-194,187,176,158,134,105,76,48,27,12,6,3,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,2,6,14,30,52,80,109,
-138,163,182,196,214,232,230,219,211,199,189,183,177,170,164,156,148,141,134,131,132,142,158,181,195,194,188,174,156,146,141,139,136,134,131,130,131,133,134,134,135,141,151,154,145,129,116,100,
-79,60,46,34,29,25,24,23,27,31,34,29,20,15,14,11,8,8,6,4,3,3,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,39,60,52,39,30,21,
-13,6,2,0,0,0,0,0,0,0,0,0,1,3,7,13,25,38,48,54,62,76,94,111,126,134,140,134,116,92,66,42,24,11,3,0,0,0,0,0,0,0,0,0,0,0,0,0,
-5,11,21,34,53,81,111,132,134,114,85,62,45,37,36,36,38,39,39,40,43,50,57,63,72,92,116,139,159,167,168,163,153,142,134,127,122,120,119,120,124,127,131,135,138,143,147,146,
-145,147,149,150,154,159,164,169,172,174,176,179,183,188,192,196,197,196,190,181,166,145,120,92,66,43,26,14,5,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,1,0,1,2,6,14,27,47,72,100,128,153,173,189,200,212,223,221,212,206,198,190,184,177,172,165,158,152,147,143,141,141,146,156,170,179,176,160,136,114,98,87,81,77,
-73,70,66,64,64,66,69,71,77,94,116,137,156,163,162,157,145,130,119,108,100,93,89,87,86,87,87,86,86,87,87,78,69,65,59,50,48,48,46,44,37,26,15,5,0,0,0,0,
-0,0,0,0,0,0,1,5,9,14,21,28,28,26,24,24,23,23,23,22,18,12,8,4,1,0,0,0,0,0,0,0,0,0,0,2,17,32,47,70,113,141,160,173,182,186,187,180,
-169,157,142,106,68,38,21,14,10,8,9,11,12,17,28,43,60,79,95,109,120,122,110,84,54,28,13,7,7,7,7,8,8,9,10,10,10,13,23,38,58,81,102,118,132,137,134,130,
-125,127,136,144,148,148,146,146,149,151,153,156,160,163,166,164,160,162,164,167,174,178,182,187,188,188,188,187,187,188,190,194,197,199,198,196,189,177,162,140,118,93,69,47,30,17,9,4,
-2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,3,9,18,31,49,71,98,125,152,174,192,203,211,217,221,217,209,204,199,194,188,183,178,172,167,165,166,
-168,171,175,178,179,177,167,146,122,100,84,73,66,61,56,52,48,44,40,36,32,31,36,47,64,84,102,116,128,131,127,120,114,114,122,129,130,128,122,121,120,120,119,118,119,119,119,111,
-100,95,92,89,94,95,93,94,89,77,65,48,30,16,5,0,0,0,0,0,3,24,51,68,78,84,89,94,98,100,100,100,100,101,101,100,95,87,77,68,54,41,29,20,13,9,11,23,
-35,63,98,134,163,170,175,180,178,169,166,170,180,192,206,215,216,216,217,220,216,200,178,154,131,116,103,89,83,88,100,111,117,117,112,101,86,63,37,16,5,2,4,6,7,8,9,9,
-8,8,10,18,30,48,70,89,99,97,89,78,67,57,52,49,49,53,63,75,82,85,87,89,93,96,100,104,109,114,117,118,119,123,128,136,146,152,156,163,169,174,181,187,189,192,191,191,
-194,198,200,201,200,199,194,185,171,153,131,110,88,67,49,35,24,16,11,7,4,4,3,1,1,1,0,0,0,0,1,1,3,5,8,14,21,32,46,64,84,107,130,152,173,191,205,215,
-221,225,228,226,221,218,215,212,209,203,199,197,193,191,192,194,193,188,181,172,158,140,118,100,87,79,74,69,64,60,55,51,47,42,40,41,48,62,80,96,103,99,89,76,62,50,41,34,
-30,33,41,50,55,55,53,52,51,51,50,49,49,48,48,43,37,36,35,38,45,46,44,47,49,49,56,60,55,48,29,5,0,0,0,0,11,67,116,124,119,116,114,110,107,105,105,105,
-105,105,105,107,110,116,118,120,118,112,103,92,84,101,147,185,200,208,200,179,154,137,132,128,116,111,112,116,120,125,130,135,135,136,138,145,155,172,190,204,210,214,215,207,186,163,144,118,
-86,58,34,18,9,1,0,0,0,0,0,0,1,2,3,6,12,25,43,66,85,96,97,85,67,47,35,28,23,22,24,26,28,30,33,37,40,44,47,51,54,59,64,68,73,78,83,89,
-93,98,105,112,119,124,130,137,144,150,158,166,174,182,185,185,189,194,198,200,204,211,215,212,204,194,182,167,150,132,114,96,80,66,53,44,36,30,26,23,21,20,19,19,21,22,26,30,
-36,44,54,66,79,96,114,132,150,168,184,196,206,213,219,223,225,226,225,224,223,222,221,218,214,209,207,203,201,196,188,179,166,152,139,124,113,102,93,87,82,77,71,66,61,56,51,49,
-50,57,69,85,99,107,104,92,71,49,34,23,17,14,11,11,10,9,8,8,8,7,8,7,6,5,4,3,3,3,2,2,1,1,0,1,0,0,0,0,1,3,7,13,21,29,23,4,
-0,0,0,0,8,49,79,68,52,45,40,34,29,28,28,28,28,27,27,28,33,40,47,57,71,92,115,146,187,219,206,172,155,137,120,113,110,110,109,106,103,96,89,84,77,66,56,50,
-50,51,50,48,50,53,56,59,61,68,88,121,154,176,182,180,169,148,112,73,56,50,49,50,50,50,46,43,44,47,57,78,98,109,112,104,87,67,47,30,20,16,17,19,21,24,25,27,
-29,31,32,35,38,42,45,49,52,56,61,65,70,74,80,85,90,95,101,107,113,118,125,131,137,143,149,154,161,167,172,177,183,189,193,197,201,210,215,214,210,208,203,197,189,178,168,156,
-143,131,119,109,99,91,85,81,78,77,78,79,81,85,91,98,106,116,127,138,152,164,176,187,197,204,211,216,218,218,217,216,215,212,210,207,204,202,198,194,188,182,177,173,167,160,149,139,
-128,120,112,105,100,94,89,83,77,72,67,62,60,59,65,76,92,105,111,108,96,77,56,37,25,18,16,15,15,15,14,12,11,10,9,8,8,7,7,6,5,4,3,3,3,3,2,3,
-3,1,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,20,48,109,159,181,187,160,106,59,44,
-43,43,44,45,44,44,41,36,28,21,14,8,3,16,57,96,113,101,69,38,17,6,2,0,0,0,0,0,4,18,31,53,83,109,144,168,174,176,176,178,177,180,183,185,191,197,203,203,
-189,161,124,82,46,25,16,15,16,17,18,20,21,23,25,26,28,31,32,34,37,40,43,47,51,55,58,62,67,71,76,81,85,91,96,102,108,114,119,125,131,137,143,148,154,159,165,170,
-176,181,186,190,195,200,204,206,207,208,209,208,207,204,201,196,190,184,177,171,164,159,155,151,148,146,147,149,151,154,158,163,170,176,183,190,196,202,208,210,214,215,216,216,215,213,210,207,
-203,199,195,191,187,182,177,171,165,160,154,148,142,136,129,123,118,112,106,100,95,89,84,79,76,74,76,82,91,102,112,116,113,101,81,61,43,30,23,21,20,19,18,16,16,15,13,12,
-11,10,10,9,8,8,7,5,5,4,3,3,4,4,3,3,2,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,21,34,37,37,45,53,49,44,42,39,35,33,33,33,34,34,
-49,77,97,112,127,155,171,179,160,110,75,40,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,80,148,174,161,126,88,57,35,22,15,13,12,12,12,12,11,10,9,8,7,
-6,8,19,36,51,65,75,84,93,105,118,126,128,122,109,86,59,37,23,15,12,13,14,14,16,18,18,19,20,22,24,26,28,30,31,33,36,38,41,44,48,51,56,59,63,68,72,77,
-81,86,91,97,102,108,113,119,125,130,136,142,147,152,158,163,169,173,178,183,188,191,195,199,203,205,208,210,211,212,212,212,211,210,208,206,204,202,201,199,198,196,197,197,198,199,201,203,
-205,208,210,213,214,215,217,216,216,215,214,213,211,208,205,203,199,195,191,187,182,177,173,168,163,158,152,147,142,136,131,125,120,115,109,104,100,100,100,102,106,113,119,122,123,117,104,87,
-66,48,36,30,27,24,23,21,19,18,16,16,15,13,12,11,11,10,9,9,8,6,5,5,4,4,4,4,4,3,3,2,1,1,0,0,0,0,0,0,0,0,0,0,0,0,5,11,
-169,175,176,175,191,211,206,204,205,207,209,209,206,196,186,178,172,163,151,140,134,123,111,89,53,31,20,10,5,3,0,0,0,0,0,1,5,8,11,18,30,59,110,174,208,169,120,90,
-74,69,69,71,72,72,72,72,72,73,73,73,73,73,73,72,72,72,71,69,71,75,79,82,83,79,71,59,44,27,13,5,2,3,6,9,10,10,12,12,13,15,16,17,18,20,22,24,
-26,29,31,32,33,36,39,42,45,48,52,56,60,65,68,72,77,81,86,91,96,101,107,113,118,124,129,135,140,145,150,156,161,166,170,175,179,184,188,191,196,199,202,204,207,209,211,212,
-213,215,215,215,216,218,219,219,219,218,218,217,217,217,217,218,218,218,218,219,218,217,217,216,216,217,217,215,214,212,210,208,206,203,201,197,194,191,187,184,180,177,173,169,165,161,158,153,
-149,145,141,138,136,135,135,133,130,124,113,100,84,66,52,43,35,31,29,27,25,22,21,19,16,15,14,14,13,11,11,11,10,10,9,8,7,6,5,5,4,4,5,3,3,3,1,0,
-0,0,0,0,0,0,0,0,0,11,36,69,98,128,147,157,79,58,55,54,63,74,73,75,84,100,128,160,187,209,211,196,152,96,49,28,21,19,21,25,33,41,45,44,39,33,28,27,
-28,28,33,48,66,86,104,123,152,194,204,162,100,68,68,72,74,74,75,75,76,76,76,75,75,76,76,76,76,76,76,75,75,75,74,73,71,64,56,48,40,30,22,15,11,6,6,7,
-9,10,11,15,19,21,21,22,23,24,25,25,25,24,24,24,23,25,28,30,32,34,37,39,42,46,49,53,57,61,65,68,73,76,81,86,91,96,100,106,112,117,122,127,132,137,143,148,
-152,158,162,167,171,175,180,183,187,190,194,197,199,202,204,207,209,211,211,212,214,217,218,219,220,221,221,222,222,221,220,220,219,219,219,219,220,220,220,219,218,216,214,211,208,207,205,203,
-201,198,195,192,189,186,182,179,175,172,169,165,161,157,154,150,146,142,138,133,128,120,110,101,91,79,67,58,50,44,41,38,35,34,33,33,33,31,29,28,26,25,24,22,18,16,13,11,
-8,7,6,6,5,6,5,4,3,2,2,1,0,0,0,0,0,0,0,1,12,31,56,80,123,159,175,173,159,134,110,97,0,0,0,0,0,0,0,0,0,0,0,5,19,50,79,108,
-145,170,172,164,158,133,86,51,38,44,53,65,82,99,119,142,151,153,161,179,200,222,236,243,243,223,164,100,65,45,20,9,10,13,14,14,14,14,13,14,14,14,14,14,14,14,14,14,
-13,14,13,13,13,14,20,31,40,47,53,59,62,63,64,65,65,66,71,80,87,90,91,92,92,93,93,91,87,80,75,68,57,46,38,33,31,31,34,37,40,43,46,50,53,56,61,64,
-68,72,77,80,86,90,95,99,104,110,115,119,125,130,135,139,143,149,153,157,162,166,170,174,178,181,184,187,190,193,196,198,200,202,204,205,207,208,210,210,211,212,213,215,216,216,216,216,
-215,215,215,216,216,216,214,211,207,202,196,192,189,185,182,179,176,172,167,163,159,155,150,146,141,136,132,127,122,117,112,107,102,97,92,87,83,79,79,84,88,89,91,93,92,91,89,86,
-84,83,87,93,96,98,96,96,95,94,92,90,84,76,67,57,43,29,15,7,1,0,0,0,1,4,2,2,0,1,3,11,31,60,95,134,161,175,176,168,140,99,60,27,11,1,0,0,
-0,0,0,0,0,2,7,9,9,5,1,0,0,0,0,0,2,22,61,97,123,165,202,207,207,207,207,207,210,218,218,214,210,205,195,178,161,151,146,142,137,132,139,162,175,175,143,76,
-39,18,8,9,11,10,7,2,0,0,0,0,0,0,1,4,8,11,15,23,39,60,90,116,129,134,136,139,141,142,143,144,143,143,146,149,150,150,150,151,152,152,152,152,152,150,148,146,
-137,123,104,83,63,45,36,34,37,39,42,46,49,52,56,59,64,68,72,77,80,84,89,94,98,102,107,112,117,121,126,131,135,139,143,148,153,158,164,168,171,174,176,178,180,183,186,188,
-191,192,194,196,197,199,199,201,201,202,202,202,203,203,203,203,202,202,202,202,200,197,195,191,187,184,181,178,177,175,173,169,166,162,158,154,149,145,138,131,125,120,115,110,105,100,97,93,
-91,89,87,90,97,109,129,147,155,157,158,159,158,157,156,155,153,153,154,155,155,155,154,154,153,152,154,157,163,170,174,173,162,140,116,96,78,63,62,86,120,132,132,132,132,136,143,159,
-174,176,161,127,94,64,36,20,4,0,0,0,0,0,0,0,0,5,15,30,46,61,73,80,79,71,60,48,35,22,9,7,39,89,141,170,169,175,189,199,183,151,136,115,84,78,76,58,
-43,32,21,10,2,0,0,0,0,5,22,54,87,123,177,204,201,169,114,83,71,69,67,58,49,45,44,44,44,45,56,69,78,83,86,96,113,133,149,154,146,129,116,111,111,112,113,114,
-115,114,111,103,96,94,95,95,96,97,98,101,108,116,122,131,144,155,159,154,138,111,85,64,50,43,41,41,43,48,51,55,58,62,66,70,74,78,81,86,90,95,99,104,108,113,117,121,
-127,133,141,153,163,173,181,185,188,187,185,185,182,181,180,179,181,182,184,186,188,189,190,191,191,192,192,193,192,193,196,195,192,189,187,186,185,183,181,178,176,176,177,181,184,186,185,184,
-181,178,175,173,169,165,160,151,142,135,132,128,124,122,125,132,136,137,136,141,153,166,177,179,171,155,142,135,132,131,129,128,126,124,121,112,104,100,99,99,98,98,98,101,110,128,149,175,
-201,218,226,225,219,208,198,182,154,136,132,130,130,125,115,95,63,33,12,0,0,0,0,0,0,0,0,0,0,0,0,0,45,65,88,106,116,120,119,117,116,116,114,112,115,120,128,158,
-187,170,119,64,51,48,43,38,18,2,0,0,0,3,31,42,33,21,12,9,9,9,10,14,26,45,66,82,83,76,76,96,123,174,206,200,161,104,86,90,94,93,93,91,91,94,111,137,
-151,153,152,154,155,155,151,136,101,66,43,30,23,21,23,25,27,28,27,23,19,18,19,21,21,21,23,26,30,36,42,49,64,84,107,130,151,159,154,138,117,98,81,66,55,51,50,52,
-55,59,63,66,71,75,80,85,89,92,95,98,103,108,115,123,138,154,170,182,189,193,194,194,197,199,201,202,200,198,194,188,183,176,175,176,177,178,179,181,181,182,183,182,182,184,192,193,
-191,186,182,179,178,176,174,174,176,180,186,190,189,185,180,177,174,172,169,166,163,162,160,161,159,156,153,150,147,146,152,158,159,154,144,136,133,129,127,123,104,79,66,59,56,53,51,49,
-47,44,41,35,29,27,27,26,25,24,23,23,25,28,34,43,65,92,118,139,158,167,159,133,98,70,50,30,15,5,0,0,0,0,0,0,1,2,5,7,7,5,4,3,3,4,10,20,
-114,116,110,98,80,63,51,45,54,80,122,166,202,214,213,197,151,96,55,29,12,1,0,0,0,0,0,0,0,1,14,31,45,51,51,48,47,47,48,51,58,61,57,50,37,23,16,14,
-15,26,57,105,159,178,137,88,86,97,96,104,142,167,182,199,195,187,177,175,187,204,205,196,187,179,156,123,85,43,21,9,5,4,4,5,5,3,3,3,5,6,8,9,11,12,14,16,
-17,23,33,49,76,107,132,150,159,158,150,136,119,104,97,97,98,102,105,107,111,117,125,134,134,131,129,130,133,137,145,156,169,180,180,175,168,162,159,158,161,167,174,181,188,195,200,202,
-200,192,184,177,172,170,168,169,170,170,171,171,171,171,174,179,183,184,183,182,180,178,178,176,178,177,173,168,160,151,145,142,139,135,131,128,124,121,121,122,124,123,120,117,114,110,109,108,
-103,95,82,72,64,57,52,49,42,34,31,29,29,28,27,24,22,20,18,16,13,10,8,8,8,9,8,7,6,6,5,4,5,9,17,32,58,86,110,128,139,139,130,112,90,71,60,57,
-58,58,59,59,61,65,73,82,80,71,65,62,61,65,78,94,95,91,87,72,62,60,78,114,147,171,175,151,106,71,59,67,89,109,114,106,89,69,46,26,11,3,0,0,0,0,0,0,
-8,21,30,33,33,32,32,30,25,16,7,3,0,0,1,2,4,9,30,56,86,156,222,214,206,216,213,197,181,156,137,94,72,63,53,47,60,100,135,136,150,184,216,234,232,207,180,149,
-124,107,95,85,77,64,49,32,18,11,8,8,9,10,11,13,14,15,16,17,22,34,52,74,99,120,138,154,163,164,162,163,166,168,169,170,173,176,180,184,180,171,167,165,166,167,168,167,
-160,148,135,127,123,122,123,126,128,132,136,142,148,155,165,176,189,197,200,197,191,184,176,168,164,161,160,159,159,158,157,158,160,163,167,167,165,164,162,159,155,149,142,137,133,130,126,122,
-119,116,112,109,105,101,97,94,91,87,83,80,75,72,67,64,60,58,58,66,79,96,110,115,113,110,111,111,105,103,102,100,99,98,97,95,89,80,66,50,29,10,4,2,3,4,5,6,
-5,4,4,16,40,74,104,119,128,136,148,160,166,163,160,159,160,160,161,161,162,163,163,162,150,132,123,119,117,118,119,114,164,174,176,176,176,174,169,146,110,75,29,1,0,18,43,65,
-97,143,166,168,161,147,136,123,106,91,73,52,28,11,5,2,1,2,3,3,1,1,1,0,0,0,0,0,0,1,7,26,62,115,173,194,197,199,201,196,197,188,177,127,88,73,67,58,
-54,50,48,48,50,63,95,112,114,124,145,170,199,225,239,247,247,242,234,227,221,212,197,172,143,120,107,99,97,98,94,90,90,97,104,107,107,107,108,114,122,130,141,154,168,174,171,172,
-172,172,171,167,161,155,152,149,138,127,123,123,125,126,123,115,104,100,99,101,104,108,112,115,117,120,123,125,127,130,134,138,148,160,173,184,192,196,195,191,183,176,170,163,157,153,150,148,
-147,146,145,143,141,139,138,136,132,129,127,124,122,120,117,115,112,110,107,104,100,97,93,89,85,82,79,76,74,74,72,70,67,67,75,91,118,152,186,205,211,215,217,218,219,220,220,220,
-219,219,219,219,218,217,211,203,178,136,103,63,36,20,8,4,2,2,3,10,39,91,133,153,167,180,194,206,220,228,229,229,229,228,227,225,222,219,217,214,197,174,172,174,174,173,170,167,
-96,72,48,46,44,37,22,3,0,0,24,75,137,171,177,172,166,151,142,158,180,197,206,213,216,217,213,206,180,151,129,102,82,69,56,47,45,43,44,47,55,65,71,76,81,89,120,172,
-207,209,184,165,169,169,159,150,147,142,135,129,132,133,130,126,122,118,116,115,115,115,123,128,121,109,98,88,86,92,108,130,153,175,194,205,215,229,242,247,247,245,241,238,236,234,232,229,
-227,229,232,234,234,235,234,235,236,238,238,235,228,214,188,154,122,104,99,93,84,78,77,76,72,68,70,72,76,78,79,80,82,86,90,93,95,98,102,105,109,112,114,116,119,121,123,124,
-126,128,134,142,151,162,174,183,189,191,190,187,182,176,171,167,165,162,158,154,151,148,147,145,144,142,140,138,135,135,137,139,139,136,134,132,130,127,124,121,119,116,111,109,113,115,113,111,
-110,108,108,111,114,119,131,142,140,134,126,120,117,115,113,112,111,111,110,110,116,124,136,154,183,207,215,210,194,171,138,99,70,52,41,38,42,50,60,73,93,120,140,152,160,162,155,138,
-120,108,102,93,82,75,77,90,118,138,133,129,129,130,123,111,0,0,0,0,0,0,0,3,54,124,173,174,135,77,47,32,21,9,2,9,25,48,63,74,86,97,115,143,177,197,209,216,
-215,207,191,182,184,187,188,195,206,213,215,216,218,220,219,200,176,169,171,181,188,192,194,194,191,186,176,168,162,156,150,145,140,134,127,117,105,91,81,73,62,50,39,29,20,15,12,12,
-15,24,35,44,56,85,115,132,146,159,168,178,184,186,188,192,192,190,187,187,190,194,196,203,209,216,227,232,234,240,232,201,154,104,58,40,41,45,48,51,54,57,60,63,65,67,70,72,
-75,79,82,87,91,99,115,134,145,149,151,152,154,155,157,158,159,160,160,161,162,165,169,177,183,189,194,198,197,192,187,184,183,182,182,181,180,179,178,176,176,175,174,172,171,171,171,170,
-169,167,165,164,163,161,159,157,154,149,137,127,121,115,112,110,109,105,102,94,84,74,69,64,56,47,38,31,26,21,20,18,17,16,15,14,16,21,29,42,62,83,108,138,162,183,205,216,
-213,200,170,140,124,120,122,135,144,149,149,134,109,81,53,27,9,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,26,73,142,186,153,78,25,1,0,0,0,
-0,0,0,0,0,0,0,0,0,1,8,18,35,52,69,92,115,136,164,174,174,171,171,160,143,130,125,125,126,126,117,112,125,145,163,177,185,189,190,188,183,177,167,158,149,141,134,128,
-122,114,105,93,83,73,64,54,47,40,34,28,23,19,15,12,8,4,2,0,0,0,2,5,12,22,36,53,70,81,85,90,97,100,99,98,99,103,110,124,136,145,148,147,151,172,195,218,
-232,220,156,81,47,40,43,47,49,52,53,56,59,63,70,79,95,113,129,139,147,165,196,221,230,231,232,232,232,233,233,233,233,234,233,233,234,234,233,233,234,234,234,234,229,216,199,184,
-175,163,156,155,156,156,156,153,152,151,150,150,148,145,140,132,128,126,124,122,120,118,116,113,109,101,90,79,69,62,58,57,54,53,49,42,36,32,29,27,24,22,20,19,18,18,16,14,
-13,12,11,8,7,6,5,7,12,19,31,47,62,73,84,104,130,154,187,209,204,186,151,126,124,126,121,111,98,79,59,37,19,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,7,37,78,131,173,176,133,55,6,0,0,0,0,0,1,1,1,2,2,2,2,3,3,3,4,6,9,16,24,30,33,34,36,44,50,52,53,48,39,32,31,32,35,42,50,61,79,
-103,130,153,168,179,184,186,184,179,173,167,161,156,150,145,139,133,125,117,108,99,92,83,74,65,57,49,42,36,30,25,21,16,13,10,10,15,23,30,36,43,51,58,62,67,71,73,75,
-78,76,71,67,61,54,49,49,55,59,60,66,79,95,112,133,165,212,239,211,156,95,52,39,41,46,51,62,84,112,138,162,190,212,226,232,236,243,248,243,238,236,237,237,237,237,238,238,
-238,239,239,239,239,239,239,239,239,238,238,241,246,249,243,234,227,207,173,150,134,124,118,110,104,100,95,93,91,89,85,79,78,75,73,72,72,71,70,67,63,57,51,46,44,41,40,38,
-37,34,32,30,29,28,25,25,23,21,19,18,16,15,14,12,11,10,9,11,19,27,35,41,48,54,60,63,65,67,67,67,68,67,74,98,120,153,184,175,136,103,77,60,59,71,82,83,
-75,58,36,16,3,0,0,0,0,0,0,0,0,0,0,0,97,148,176,170,138,83,34,6,0,1,1,0,0,0,0,0,1,2,3,3,3,5,5,5,13,32,44,49,53,57,58,59,
-60,60,60,61,62,63,63,60,53,47,47,48,53,62,78,99,126,151,173,187,197,202,204,202,199,196,191,186,180,174,167,161,154,148,141,134,124,114,104,94,85,77,70,62,55,48,43,40,
-38,41,50,68,90,107,116,121,122,121,119,116,110,103,96,93,93,93,94,93,93,88,81,69,58,45,31,24,27,38,53,70,90,123,176,222,240,221,160,98,71,80,111,147,187,219,235,243,
-247,242,235,231,228,218,196,164,147,145,145,144,145,145,146,148,149,150,150,151,152,153,153,153,156,165,170,176,191,214,237,252,255,252,241,223,199,175,162,154,149,139,123,102,89,84,80,79,
-78,78,78,79,82,84,83,81,78,73,67,59,52,44,37,33,29,28,27,28,28,27,24,23,22,22,22,20,18,18,18,21,24,31,43,63,87,105,116,120,122,121,118,114,107,100,92,88,
-87,86,84,81,78,81,99,141,175,183,177,154,121,101,81,83,92,97,90,72,49,25,10,2,0,0,0,0,1,4,19,54,172,143,95,70,56,51,53,56,57,56,49,37,33,29,17,7,
-2,2,2,3,5,6,6,7,21,46,55,53,49,45,43,44,49,54,59,60,58,56,61,70,78,81,82,85,93,109,132,158,180,194,205,213,220,225,226,226,224,224,222,220,218,215,210,205,
-201,197,194,191,184,170,154,142,135,130,126,117,110,103,101,102,108,119,135,149,156,156,151,145,138,131,125,120,114,105,93,83,73,68,67,67,71,79,88,94,96,93,80,57,38,29,24,26,
-36,51,78,118,167,218,242,228,203,202,221,238,246,241,228,217,195,170,157,154,153,145,129,116,111,110,107,100,98,95,89,82,79,79,81,82,82,83,84,84,93,109,115,114,115,126,152,199,
-230,231,236,247,248,241,235,234,235,232,219,193,167,154,147,140,129,120,114,110,105,102,100,98,98,98,104,110,103,93,85,80,76,74,73,67,59,52,46,44,45,56,66,68,68,68,73,81,
-92,107,125,142,151,152,147,142,135,128,122,117,111,102,89,78,68,61,59,58,61,68,75,80,91,106,117,136,157,168,175,173,174,179,175,168,169,161,150,139,133,134,133,134,141,151,172,186,
-92,83,81,84,84,85,85,85,85,87,88,90,99,108,95,71,49,35,31,32,32,30,26,26,31,40,42,44,49,56,61,68,76,86,93,95,91,84,80,80,83,86,98,130,169,203,225,237,
-241,242,243,244,246,248,248,248,248,248,248,248,248,249,249,249,249,248,248,246,244,236,225,218,211,206,200,188,173,155,143,139,136,137,138,129,115,101,88,81,78,74,72,75,81,88,93,95,
-92,86,78,73,67,67,69,73,81,94,107,109,99,84,69,56,52,61,82,114,153,197,238,255,255,255,254,243,217,188,168,158,145,125,121,120,119,119,120,121,123,125,126,129,136,143,135,117,
-100,91,87,88,87,85,82,82,86,92,92,92,95,99,108,129,152,160,173,200,223,235,239,239,239,241,247,248,242,236,231,226,214,200,191,185,177,175,174,173,174,176,194,213,212,209,210,213,
-213,211,207,184,154,127,105,91,85,86,91,90,89,88,92,103,111,118,123,114,101,88,77,70,68,65,65,68,75,82,88,90,87,80,71,64,58,57,58,62,69,82,95,98,93,91,96,93,
-93,109,138,162,174,187,198,205,206,197,189,185,180,176,159,132,71,59,47,36,30,29,29,29,29,31,38,53,77,106,126,134,132,119,102,93,91,89,87,85,86,87,88,93,100,105,107,108,
-108,108,106,106,109,114,119,126,137,162,202,234,250,254,254,254,254,253,253,253,252,252,252,252,251,251,251,251,252,252,251,251,251,250,249,248,249,251,251,252,251,249,246,240,231,213,190,168,
-142,117,95,73,57,45,36,30,26,23,21,22,26,33,43,54,67,78,86,90,92,94,93,91,91,95,105,119,131,139,142,144,154,175,201,223,236,245,250,244,233,234,247,246,208,158,126,111,
-100,87,78,72,68,68,70,71,72,76,82,94,114,137,153,160,159,148,135,127,124,122,120,119,119,118,119,121,126,130,130,128,126,125,124,131,147,163,173,175,175,179,195,216,230,236,238,240,
-244,246,246,245,245,246,246,246,245,246,250,254,246,226,218,217,215,210,216,228,234,230,219,208,195,174,139,107,88,77,69,57,42,36,32,23,17,13,9,8,8,7,7,10,14,23,34,46,
-60,72,80,84,87,88,87,86,85,90,103,119,132,138,132,117,103,98,94,89,91,101,114,127,133,127,112,98,89,87,87,88,12,6,1,0,0,0,0,0,0,0,0,5,13,29,53,86,
-124,144,131,102,84,82,87,91,94,96,96,95,90,83,77,74,69,65,63,70,94,126,157,183,208,235,239,227,219,216,220,226,232,235,236,236,236,237,237,237,237,237,236,235,233,231,229,226,
-224,222,219,216,217,221,225,227,227,230,235,240,245,249,247,239,224,203,175,149,124,109,94,72,51,36,26,22,20,19,18,18,21,29,36,43,50,57,66,74,81,95,111,130,154,177,200,221,
-237,247,250,243,231,215,189,149,113,103,131,177,221,223,188,138,86,53,37,34,35,35,35,38,41,45,47,51,58,71,90,116,146,162,152,128,113,110,113,114,115,115,113,110,104,97,90,85,
-79,73,67,66,71,78,86,93,100,109,124,141,156,164,169,176,188,198,201,199,199,199,198,198,198,198,198,193,157,100,75,67,61,56,63,88,117,144,170,186,200,219,229,224,214,206,196,166,
-120,69,38,22,7,0,0,0,0,0,0,0,0,0,0,1,6,13,21,28,36,44,53,60,66,71,77,87,99,110,113,104,95,91,80,66,59,57,54,50,48,44,35,25,20,17,16,16,
-0,0,0,0,0,0,0,0,0,0,1,1,1,1,4,17,46,85,110,106,80,56,45,43,46,48,50,49,47,45,47,51,62,88,121,150,194,225,234,233,227,203,165,146,147,153,164,178,
-191,202,209,213,218,222,225,227,227,226,225,222,219,216,215,213,210,208,205,201,198,195,194,191,188,185,185,188,196,210,223,233,244,249,248,242,233,226,216,192,161,133,113,104,100,98,97,98,
-100,106,107,104,103,105,109,115,129,160,190,212,227,235,237,234,225,210,181,140,108,84,61,39,27,22,25,45,107,177,219,233,212,169,114,73,65,80,78,86,102,106,108,111,112,108,109,117,
-135,158,170,164,147,132,126,123,121,113,99,83,71,62,53,50,48,48,47,46,44,42,42,43,45,50,57,67,74,79,84,91,96,100,97,90,85,85,84,82,82,79,75,64,43,23,15,14,
-13,12,12,13,15,21,29,38,47,71,110,146,165,175,190,217,234,221,199,174,136,97,67,44,23,7,1,0,0,0,0,0,0,0,0,0,0,0,1,4,8,11,15,20,25,28,27,21,
-17,16,13,8,6,5,3,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,3,10,16,21,31,54,91,130,140,115,80,58,47,44,46,54,66,79,101,133,
-172,211,235,241,230,199,173,159,148,134,121,121,129,139,149,159,172,183,195,203,210,217,222,225,225,225,224,223,222,219,218,217,216,213,210,208,204,199,195,191,186,179,173,167,163,162,165,171,
-185,201,214,225,234,239,243,248,244,237,231,227,225,224,225,227,231,234,234,232,230,230,230,231,235,243,246,240,224,205,181,154,128,100,68,43,30,25,23,22,22,23,22,21,25,43,81,140,
-196,227,231,212,205,223,221,223,228,223,223,226,227,223,222,222,222,226,232,238,238,233,227,224,221,214,198,178,162,145,123,111,109,109,109,107,100,87,72,61,54,46,38,33,32,32,32,33,
-34,33,31,28,27,30,36,37,35,32,26,21,19,17,16,15,15,14,14,13,12,10,8,6,4,4,6,14,20,25,34,65,115,163,188,211,228,229,220,204,174,138,116,90,56,31,15,7,
-5,5,7,9,9,9,8,9,9,9,6,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,19,43,67,83,90,
-99,108,123,147,166,168,160,153,151,148,149,169,190,206,223,239,241,219,183,164,138,112,107,109,113,119,127,133,141,150,157,166,175,185,195,203,210,217,225,229,229,230,230,229,229,227,225,222,
-220,217,215,213,210,207,204,200,195,190,186,179,172,164,156,150,146,145,146,150,157,159,170,196,214,218,221,224,228,233,239,247,253,254,254,255,255,255,255,255,253,252,248,242,234,223,208,191,
-172,148,120,87,56,39,32,27,23,21,20,21,20,18,18,28,51,92,150,202,219,235,232,232,235,229,230,235,239,240,242,243,243,245,245,247,249,250,249,246,243,243,245,246,244,240,230,223,
-222,222,222,222,218,205,188,171,159,138,105,77,56,42,32,28,25,23,21,19,20,34,55,62,60,59,57,52,48,42,33,24,16,11,9,8,7,7,7,6,5,4,2,1,0,0,0,0,
-4,17,30,52,84,119,152,177,206,224,228,226,212,192,166,146,135,124,112,103,99,96,93,89,85,81,73,58,38,21,10,5,4,11,21,25,26,28,29,27,25,21,8,1,0,0,0,0,
-71,84,96,97,87,63,40,34,40,55,78,105,127,137,137,137,137,135,135,141,165,195,224,242,249,249,249,248,240,231,213,192,164,130,109,103,105,109,115,122,127,134,142,151,161,170,177,186,
-193,200,207,212,216,220,224,228,229,230,230,231,231,230,231,229,227,223,221,218,215,212,210,207,203,200,195,191,186,180,173,166,158,150,142,134,128,123,120,126,138,149,161,171,180,185,190,203,
-219,225,224,223,223,224,228,232,236,239,239,239,239,239,241,245,246,244,234,210,174,139,117,97,71,46,29,21,18,16,16,15,14,16,28,51,66,85,85,98,122,135,152,170,183,182,178,177,
-174,171,168,164,162,165,171,179,184,190,201,212,219,228,234,234,233,231,230,231,233,240,244,245,243,237,221,201,177,150,131,119,110,96,79,65,54,55,62,58,52,53,55,57,59,61,61,57,
-48,36,26,17,13,10,9,9,8,8,8,8,9,7,6,4,3,2,0,0,4,13,23,37,69,106,138,176,208,230,241,247,248,246,240,231,226,221,217,207,195,184,175,170,162,150,138,130,
-132,157,178,182,181,184,188,183,180,171,142,119,110,103,95,79,222,221,227,231,229,221,206,196,193,202,215,222,219,212,206,205,203,202,201,211,230,236,224,203,186,184,189,184,176,175,172,164,
-156,151,147,142,140,143,147,151,158,168,178,188,197,203,208,213,216,221,224,227,228,230,230,228,228,229,229,229,229,229,231,231,232,231,230,228,227,224,222,220,218,215,213,211,208,205,201,197,
-192,186,179,174,172,170,164,160,161,164,168,166,157,144,134,129,129,130,124,118,116,117,122,128,136,143,146,151,155,157,164,179,198,217,235,247,250,243,235,224,203,170,134,97,63,44,35,30,
-27,26,25,29,34,44,61,87,109,125,135,132,115,91,75,69,65,59,54,49,45,47,55,69,86,105,123,136,147,163,175,176,172,165,158,149,149,163,182,195,204,223,240,248,250,246,241,236,
-232,222,206,190,177,168,157,136,113,105,103,103,105,111,116,122,128,129,127,124,120,114,111,109,109,109,111,113,110,98,83,73,69,65,62,63,70,77,79,83,93,105,116,121,120,117,124,135,
-140,153,175,190,200,204,211,220,229,233,236,240,244,247,247,248,249,246,235,227,226,226,226,220,215,220,227,229,231,233,233,230,212,196,183,180,187,206,225,234,235,231,219,208,203,201,201,202,
-203,205,208,205,177,140,109,89,84,89,98,105,113,128,146,160,170,177,182,184,184,185,188,192,195,200,203,205,206,207,208,209,211,215,219,223,229,234,236,237,237,237,237,236,236,236,236,236,
-236,237,238,239,239,238,236,235,234,232,230,229,227,225,223,220,218,214,210,206,203,198,193,187,180,170,155,135,117,102,93,86,80,75,73,71,69,70,71,71,72,74,75,77,80,82,86,93,
-104,122,147,180,208,226,236,244,253,253,244,226,197,172,155,136,117,104,98,99,107,116,125,129,122,109,90,65,42,27,21,20,21,20,20,20,21,21,22,22,26,33,42,49,59,76,97,115,
-124,130,133,132,129,130,135,141,148,164,184,205,224,236,245,249,251,252,252,251,250,250,250,245,236,232,229,229,229,228,229,230,231,234,237,240,241,240,238,237,237,237,238,237,233,222,204,186,
-176,166,154,145,139,129,121,115,108,97,79,54,33,17,10,7,7,10,18,27,34,38,44,57,75,95,112,118,124,132,139,146,150,139,130,132,135,137,141,139,137,142,153,161,166,172,188,212,
-126,119,115,113,112,112,108,94,83,72,57,48,46,50,53,58,62,69,75,78,70,64,68,74,79,83,86,90,93,99,108,119,130,141,153,165,172,175,179,183,184,184,183,181,182,184,187,190,
-193,198,202,207,213,221,227,233,238,241,241,239,240,239,239,240,240,239,238,238,237,234,232,231,230,229,227,223,220,218,215,212,208,205,200,195,188,179,172,163,152,140,127,115,106,100,96,92,
-90,87,86,85,84,84,84,84,83,83,83,81,81,79,76,74,72,72,74,84,99,115,130,149,178,209,233,249,254,252,248,238,221,204,183,157,131,112,93,68,48,33,22,15,13,15,15,16,
-17,17,17,18,19,19,19,18,18,18,17,17,19,21,28,39,49,59,74,89,100,109,122,133,146,159,177,202,222,234,242,246,248,249,248,247,247,249,249,247,245,246,245,244,244,244,243,244,
-245,244,243,241,240,237,235,234,234,234,234,233,237,244,246,241,238,233,222,210,197,174,149,121,98,90,77,54,31,18,18,29,54,83,98,98,98,94,77,48,22,3,0,0,0,0,2,7,
-12,17,28,39,44,48,58,69,79,89,101,111,114,116,129,139,43,44,44,39,31,21,10,1,0,0,0,1,4,8,12,18,25,33,41,49,58,67,74,80,84,88,91,94,97,100,103,107,
-111,116,123,130,137,141,146,151,155,158,162,166,171,175,180,183,189,194,198,202,206,210,215,220,225,230,231,231,231,232,231,232,232,231,228,227,225,223,222,220,219,217,217,214,211,208,206,203,
-199,195,189,184,178,171,163,156,148,140,133,126,120,114,110,106,103,102,99,99,98,97,97,96,96,95,95,94,93,91,89,86,82,76,69,62,56,51,48,48,57,77,108,148,182,203,220,236,
-244,246,239,216,173,129,93,64,44,29,20,16,15,15,15,16,15,15,15,15,16,16,16,17,17,17,16,16,16,15,14,15,19,31,51,80,114,151,184,203,217,230,240,243,237,229,218,202,
-186,176,160,147,144,144,141,130,124,128,127,124,122,123,122,125,128,125,120,117,116,117,127,140,154,161,163,164,174,194,215,226,233,237,241,243,243,240,233,219,209,212,212,202,187,171,167,181,
-200,218,230,226,221,223,225,211,178,124,94,76,47,22,8,0,0,0,0,0,0,0,2,5,10,16,27,38,44,44,44,43,5,5,5,5,2,1,1,3,4,5,7,10,13,17,21,26,
-33,41,49,58,66,72,79,86,91,93,96,99,101,103,107,110,115,119,123,127,131,136,140,145,150,155,161,167,172,176,180,184,189,193,198,202,205,209,212,214,218,220,221,224,224,225,224,225,
-225,224,223,221,220,220,220,219,217,217,216,215,213,210,207,205,202,199,194,190,184,179,172,165,158,152,144,138,132,126,122,118,115,113,111,110,109,109,108,108,107,106,106,105,103,102,100,98,
-94,87,80,73,65,55,48,39,30,24,23,32,47,64,88,118,151,185,217,239,241,229,212,194,174,150,126,108,99,98,98,96,92,90,90,90,90,90,90,91,91,91,91,90,90,90,90,95,
-111,142,175,203,226,240,244,240,231,219,200,170,135,111,92,72,57,48,38,29,24,23,21,17,17,15,12,9,8,11,13,15,21,34,50,73,95,120,157,186,203,214,215,215,217,221,226,231,
-234,237,241,244,246,248,250,252,252,253,254,255,255,255,255,247,225,195,155,109,85,93,125,170,209,230,231,226,209,177,141,101,55,19,3,1,1,1,1,0,0,0,0,0,0,3,5,5,
-58,58,58,58,58,58,58,60,61,63,64,66,69,72,75,79,85,91,97,104,109,114,121,128,132,130,129,131,133,134,137,140,143,147,149,148,148,151,155,159,163,167,171,176,180,184,190,197,
-202,206,210,213,214,216,219,222,224,224,224,225,225,224,225,225,225,224,223,223,220,220,220,219,217,216,215,215,214,212,209,207,205,203,199,194,190,184,178,172,165,158,152,146,140,134,130,127,
-124,122,120,119,119,118,118,117,117,116,115,115,113,111,108,106,104,100,96,92,88,84,81,74,66,58,54,50,51,58,66,72,83,102,134,174,208,228,240,247,248,246,241,235,231,230,230,229,
-227,226,225,225,226,225,226,227,227,226,226,226,226,226,226,228,236,246,250,245,230,210,182,155,135,115,95,74,59,53,56,64,68,70,74,73,67,63,63,65,62,53,47,51,61,79,93,102,
-118,149,179,204,221,232,241,240,233,228,226,226,226,226,226,225,225,225,225,225,225,226,227,229,231,229,219,210,201,187,163,122,76,42,18,3,0,0,5,20,54,98,120,144,180,212,238,238,
-213,164,111,81,70,63,58,51,43,39,38,38,42,51,57,58,140,140,140,140,140,139,137,132,126,122,121,123,125,127,130,132,136,141,145,149,153,156,161,165,162,150,145,146,147,148,150,152,
-154,157,158,150,144,146,150,154,158,161,166,170,174,179,187,198,205,209,215,221,223,224,226,229,232,232,233,233,232,232,233,234,233,232,229,229,228,225,223,222,220,218,216,215,214,212,210,208,
-206,204,201,197,192,188,182,175,169,163,157,151,145,140,137,133,130,128,127,126,125,125,125,124,124,123,123,122,120,118,114,111,109,108,108,106,107,109,111,112,113,112,114,115,117,122,122,120,
-119,120,122,131,145,161,178,193,206,219,231,238,242,243,243,243,245,245,245,245,245,245,245,246,244,241,240,240,240,240,240,240,233,219,194,157,119,91,71,59,52,49,47,46,45,49,64,85,
-96,102,113,123,124,120,121,130,142,153,166,186,207,224,233,236,242,248,249,244,233,221,196,162,132,113,102,98,97,95,95,95,96,96,97,97,97,97,98,100,102,94,75,60,47,30,13,1,
-0,0,0,0,0,0,0,0,0,0,2,10,25,55,128,209,242,252,240,219,203,189,176,158,142,135,133,131,129,131,135,138,199,199,199,199,199,199,193,177,148,117,92,80,76,77,80,83,
-88,93,99,104,110,115,120,122,117,107,103,104,105,107,109,111,114,117,117,115,114,118,122,126,131,136,141,146,150,155,163,171,176,181,189,197,202,206,209,213,217,222,225,228,232,233,235,238,
-239,239,237,236,235,235,233,231,231,228,225,223,220,216,212,208,205,202,200,197,193,187,182,177,171,165,159,154,148,144,141,137,135,133,131,130,130,129,129,129,128,127,126,125,124,121,118,113,
-111,108,102,98,94,89,87,88,91,92,92,92,91,84,75,70,70,70,69,68,69,71,75,80,88,98,110,121,127,130,130,130,133,136,136,135,136,136,136,136,129,119,115,114,114,114,115,113,
-101,81,58,33,17,12,11,10,10,10,10,10,10,11,17,27,34,37,46,61,75,95,127,159,196,226,242,251,254,249,243,240,238,226,206,185,167,155,138,118,105,92,77,66,56,38,21,10,
-5,2,3,4,4,4,4,5,4,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,106,147,162,187,209,223,234,239,233,220,211,208,206,202,198,196,198,
-56,57,56,55,56,55,50,46,40,32,24,18,16,17,20,24,30,36,44,50,57,63,68,72,74,74,74,76,77,78,79,83,85,88,91,94,98,103,106,110,115,119,124,129,134,139,143,148,
-153,157,162,168,173,178,182,188,192,198,202,207,212,217,220,223,227,227,226,226,226,228,229,230,232,235,236,235,234,231,225,219,212,205,199,194,190,185,181,175,169,164,159,153,149,144,141,138,
-136,134,133,132,131,131,130,130,129,128,128,126,125,122,119,115,110,103,95,86,77,66,57,49,44,38,32,28,24,18,13,10,8,8,7,7,7,7,6,7,7,7,9,11,12,13,12,13,
-14,15,15,14,14,15,15,15,12,9,8,8,8,8,8,8,5,1,0,0,0,1,1,1,1,0,0,0,0,2,2,2,2,7,22,53,101,162,210,232,243,238,220,196,166,138,119,115,
-117,106,87,77,79,87,97,109,123,137,145,144,138,122,97,71,47,24,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,22,46,
-42,25,31,50,73,100,109,92,76,68,65,68,84,93,79,62,0,0,0,0,0,0,0,0,0,0,0,3,6,10,14,19,24,32,41,48,53,59,64,67,70,72,73,73,73,74,75,76,
-78,80,83,86,89,92,96,100,104,108,113,118,122,126,130,135,140,144,149,154,158,163,169,174,178,184,188,192,196,200,204,207,210,212,214,217,218,219,221,224,227,230,233,234,233,234,234,231,
-226,220,210,199,190,183,176,171,166,161,155,150,145,142,139,136,134,133,131,130,130,130,129,129,128,127,126,125,124,121,117,113,107,100,92,83,73,63,53,43,34,26,19,15,10,6,4,3,
-1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,2,2,2,2,2,2,3,3,3,4,7,9,9,9,9,9,10,10,11,11,10,13,21,29,32,35,39,47,62,77,83,
-86,100,140,185,221,241,235,216,185,136,89,55,28,13,9,10,15,19,23,34,46,57,70,87,106,126,142,148,151,154,151,139,127,104,69,35,13,2,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,2,9,8,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,6,12,18,22,24,25,31,39,45,47,49,52,56,60,
-65,75,86,92,95,99,102,104,107,109,110,110,111,110,110,111,112,112,114,116,117,120,122,126,128,131,134,137,141,144,147,151,153,157,161,164,169,173,177,181,186,190,193,196,198,201,206,211,
-214,218,221,223,224,223,221,218,217,215,214,212,212,212,212,213,216,221,221,214,204,193,178,167,159,153,149,145,140,137,134,131,130,128,127,127,126,126,125,125,124,124,123,121,120,116,112,108,
-103,96,88,80,70,60,51,42,33,25,19,13,8,5,4,3,5,5,6,12,18,23,26,32,48,72,100,115,117,117,117,117,118,121,116,97,82,80,81,81,81,81,91,112,122,120,118,119,
-119,118,119,118,117,115,125,150,169,175,177,184,194,207,220,224,225,231,244,249,239,211,165,127,100,77,62,51,42,42,50,58,64,76,91,100,101,96,90,85,81,74,70,69,72,76,79,86,
-102,122,127,111,83,54,28,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-59,62,70,83,94,100,101,103,108,115,118,120,121,123,124,125,126,127,129,129,128,129,130,132,136,141,145,148,149,150,150,150,151,150,151,151,152,153,155,157,159,160,162,164,166,168,170,171,
-173,174,177,179,182,185,188,192,195,200,204,207,209,213,219,224,224,225,223,219,213,208,203,199,195,192,190,189,188,186,185,185,187,192,200,207,211,208,198,182,163,148,140,135,131,128,126,124,
-123,122,121,120,120,119,119,118,117,116,116,114,112,109,105,100,95,90,82,74,65,55,47,38,29,22,20,22,27,34,41,50,60,63,68,80,97,123,151,175,203,226,242,246,246,245,246,246,
-246,247,246,236,222,220,220,219,220,220,227,240,244,240,239,239,239,239,239,238,238,236,240,250,254,255,255,255,255,252,248,245,245,242,229,205,178,149,128,119,118,118,118,118,116,118,132,140,
-135,134,127,105,81,61,44,30,20,11,7,4,4,5,6,10,21,46,79,109,123,122,103,68,32,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,3,10,20,29,39,48,121,120,121,118,112,106,106,106,103,98,97,100,103,107,110,113,115,114,113,114,117,119,119,119,118,117,117,116,113,111,107,105,
-104,103,102,102,103,104,106,107,109,112,114,115,118,122,127,133,139,146,153,158,162,165,169,173,173,168,170,178,186,192,198,201,199,198,195,189,186,184,182,180,178,177,175,173,172,172,170,169,
-166,164,166,170,178,186,194,196,186,167,149,134,123,116,114,113,112,111,110,111,110,110,110,109,108,107,107,105,102,100,96,91,87,80,73,65,57,49,43,38,43,54,68,84,98,107,114,118,
-118,117,125,154,194,230,246,242,227,206,179,161,159,158,158,158,157,154,164,197,211,210,210,210,210,210,220,237,240,235,233,232,233,233,234,234,233,227,223,217,199,190,187,180,171,157,141,134,
-132,126,108,87,73,67,66,66,67,67,70,78,85,91,100,101,85,70,52,28,11,4,0,0,0,0,0,0,0,0,0,0,0,0,9,32,58,87,114,124,106,73,41,19,5,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,7,20,41,61,80,97,107,114,119,70,67,61,49,37,32,37,47,56,59,63,69,77,84,90,98,
-108,120,130,139,146,148,147,142,135,124,113,104,95,87,79,70,60,50,44,42,43,44,44,46,49,51,53,57,62,72,89,113,143,170,189,200,203,204,205,208,208,199,193,197,199,197,190,183,
-173,165,163,163,165,167,168,167,168,168,166,164,163,162,160,159,156,152,148,145,140,141,149,164,177,182,175,162,145,130,117,106,101,98,96,96,95,95,95,96,96,95,94,93,91,88,85,80,
-77,71,66,63,63,67,73,82,98,114,120,120,114,104,93,80,83,128,183,227,231,196,146,115,91,72,57,49,49,45,39,30,22,16,15,32,43,44,44,43,43,45,63,98,115,113,112,111,
-107,102,99,98,97,90,82,71,51,42,39,34,28,21,14,12,11,10,7,4,3,4,4,4,4,4,5,9,12,15,18,16,9,3,0,0,0,0,0,3,8,11,12,12,12,12,12,12,
-12,12,9,6,6,16,41,78,111,123,115,93,66,43,23,8,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,4,12,23,38,54,72,95,114,121,121,114,104,93,84,
-5,3,1,2,9,28,51,73,88,96,103,112,119,127,135,142,151,158,158,154,150,151,157,164,168,164,153,144,137,131,124,113,97,77,56,38,30,28,28,29,31,34,36,38,40,44,48,55,
-65,78,89,99,104,108,111,116,126,152,175,183,185,191,203,213,215,205,191,178,170,166,168,174,181,184,183,183,181,178,173,170,172,177,179,176,170,168,168,171,179,189,199,204,203,197,188,177,
-166,155,144,133,118,107,98,91,85,83,82,82,81,79,78,80,84,87,89,96,103,112,116,118,113,97,77,58,40,25,20,59,147,220,226,180,107,63,54,65,75,79,80,80,80,78,73,61,
-46,31,17,6,0,0,0,0,10,25,40,55,68,73,75,73,64,47,28,11,3,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-4,13,26,35,39,41,48,63,81,91,93,93,91,87,79,74,72,71,68,60,45,28,15,17,38,69,98,118,123,115,99,73,49,32,24,20,15,11,5,3,3,3,3,3,4,7,13,25,
-41,56,68,82,99,113,120,121,114,95,73,54,38,25,17,11,0,5,16,37,63,84,93,91,84,85,95,110,126,142,158,165,154,121,83,58,47,47,57,81,118,154,172,172,162,149,136,126,
-121,117,105,82,56,36,24,21,21,24,26,27,29,29,31,33,35,35,38,40,43,48,53,58,63,70,79,87,96,108,131,160,187,209,225,231,227,217,212,210,208,208,209,211,215,221,217,213,
-219,224,227,230,235,240,243,241,238,237,237,240,243,245,247,248,248,246,243,237,225,213,199,176,155,137,117,101,97,98,104,113,123,129,131,127,117,103,88,75,56,33,15,4,4,25,94,191,
-231,181,105,64,61,76,86,81,70,63,62,63,65,70,80,93,102,106,101,83,64,54,50,56,73,85,88,86,81,76,74,77,82,87,80,59,32,12,1,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,7,22,42,60,75,84,87,87,89,100,122,139,144,145,146,148,145,130,111,93,82,80,85,89,85,69,46,28,21,29,50,75,98,116,123,
-118,108,103,102,97,83,69,63,61,61,61,62,66,76,93,113,133,143,145,138,123,103,84,67,47,24,8,0,0,0,0,0,49,61,76,88,89,77,59,49,49,62,83,107,129,149,162,147,
-92,34,8,5,5,6,8,10,29,81,141,168,160,136,111,91,81,82,95,105,101,85,62,43,28,21,19,19,20,20,22,23,27,31,34,36,38,39,42,47,51,58,67,82,101,122,139,147,
-150,149,149,159,177,195,205,218,225,224,224,223,220,214,214,214,199,178,162,159,165,173,183,191,190,183,177,174,175,179,185,189,190,194,201,216,230,236,243,249,247,239,219,185,164,152,137,129,
-129,130,129,120,102,82,66,57,50,44,46,76,125,178,228,224,155,88,73,83,86,72,52,36,28,29,37,46,51,57,68,89,112,133,141,128,114,107,100,90,79,61,45,33,23,17,15,18,
-29,47,72,88,87,72,49,29,13,5,2,0,0,0,0,0,1,3,4,5,4,2,0,0,0,1,7,19,37,60,81,89,87,78,63,50,45,45,52,66,73,74,74,75,84,100,109,106,
-90,68,50,42,48,64,81,89,82,64,48,46,53,67,85,100,106,108,111,123,131,125,120,119,120,119,119,121,126,132,135,141,144,146,144,129,103,77,60,51,44,38,33,28,25,25,27,34,
-106,104,97,86,72,63,62,72,87,103,120,136,151,163,163,124,51,5,2,6,6,7,7,6,6,38,109,157,158,134,106,80,58,43,42,54,73,90,97,92,81,67,58,53,52,52,53,55,
-61,69,73,74,75,71,69,70,75,88,107,120,127,127,119,108,99,92,89,86,88,93,98,109,122,123,119,114,106,100,110,124,134,138,131,113,94,82,82,94,108,119,122,121,119,120,123,127,
-124,115,104,101,108,114,128,151,171,196,228,241,238,230,202,167,149,138,126,119,118,119,119,122,133,153,181,223,244,235,198,144,108,101,98,86,70,59,54,59,68,76,82,86,87,87,87,87,
-85,83,74,60,54,54,50,36,19,7,1,0,0,0,0,0,0,2,14,36,61,81,89,85,73,59,49,43,41,41,41,42,47,54,57,58,56,50,44,42,44,55,73,85,90,86,70,49,
-30,17,7,2,1,1,1,4,5,5,5,5,9,21,42,65,85,93,86,65,41,27,30,47,67,84,88,87,87,88,92,95,93,81,64,55,55,55,60,65,67,69,73,80,88,88,81,75,
-76,83,93,99,102,101,98,96,97,97,96,95,94,95,99,105,116,108,98,92,90,91,93,94,95,98,102,110,126,143,151,129,70,17,0,0,2,2,1,2,12,58,123,158,151,126,99,74,
-53,37,24,17,19,31,49,67,81,90,92,93,93,94,94,94,94,94,94,95,96,100,108,122,129,141,154,143,113,83,62,55,57,61,64,67,68,69,68,66,64,62,59,58,60,67,78,91,
-109,127,143,151,141,117,87,67,60,65,72,73,73,73,76,88,103,112,105,81,59,51,51,54,65,87,125,164,186,211,233,239,238,233,222,212,213,218,221,227,236,244,245,228,187,157,135,124,
-120,115,106,96,88,88,87,85,79,71,62,52,46,44,39,31,22,14,7,2,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,7,22,42,63,77,85,87,88,88,88,88,88,
-88,86,85,85,85,86,94,107,112,122,134,120,83,42,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,27,46,69,94,116,126,115,87,53,30,23,31,41,44,44,44,48,61,
-80,91,84,57,31,20,21,23,30,44,59,71,81,82,79,78,78,80,86,94,102,108,108,107,109,110,116,121,124,127,131,130,77,75,71,64,56,49,44,39,37,40,49,64,86,110,132,143,
-127,88,48,26,17,16,24,43,80,126,152,149,131,105,81,60,43,29,20,14,8,5,6,10,20,31,40,46,48,48,48,48,42,37,35,35,38,45,61,83,90,97,112,120,110,86,62,49,
-44,44,46,48,50,50,50,50,49,51,57,70,86,101,110,113,115,119,129,143,156,154,137,116,91,64,44,36,32,30,29,35,50,73,101,119,118,106,96,89,91,95,94,91,90,100,122,147,
-162,177,200,213,216,214,212,205,191,169,146,121,99,96,95,92,87,81,76,68,55,46,37,29,19,12,6,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,7,18,28,37,42,44,44,44,44,38,32,29,28,28,35,51,78,95,109,125,128,113,85,59,44,38,36,31,22,13,1,0,0,0,0,10,28,49,68,81,86,
-89,94,107,125,141,139,120,97,69,40,19,10,6,3,3,9,26,54,86,106,105,92,81,75,79,87,87,83,77,74,74,74,74,74,74,75,78,84,89,89,90,90,92,94,95,95,91,84,
-18,18,17,14,10,9,9,10,14,20,30,43,60,79,101,121,137,142,135,123,114,115,123,136,148,149,137,119,97,77,58,43,30,20,14,9,6,4,2,0,0,0,1,2,2,3,3,3,
-2,1,2,3,4,5,9,15,19,23,34,57,85,103,103,91,75,62,54,49,48,48,52,57,62,74,92,105,109,102,89,77,69,66,68,74,84,91,100,115,128,116,91,76,69,62,57,56,
-60,73,96,128,142,130,105,89,80,67,51,39,31,27,26,28,30,35,46,55,58,58,57,52,42,33,28,26,27,27,25,21,19,18,18,15,9,6,3,1,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17,105,132,136,156,171,177,182,190,200,206,204,199,
-191,185,179,172,162,134,94,65,47,47,63,78,84,79,67,55,47,45,47,55,67,76,86,104,118,104,77,62,54,46,42,41,45,58,85,120,136,123,97,80,71,57,39,26,18,15,15,15,
-15,15,15,15,17,22,27,27,27,27,27,27,27,26,23,19,44,50,55,59,59,60,62,63,62,60,58,61,69,76,82,88,97,110,121,128,132,134,133,129,119,106,92,77,62,48,36,25,
-17,12,8,5,3,1,0,0,0,0,0,0,0,0,0,0,0,1,1,2,3,3,3,3,5,7,9,13,27,52,76,93,103,110,114,112,108,102,99,101,103,104,97,80,59,40,27,22,
-19,17,17,18,19,20,26,42,71,88,90,91,93,95,97,99,99,97,95,89,78,58,39,27,21,15,10,8,8,10,8,7,5,4,2,0,0,0,0,0,0,0,1,6,13,24,34,38,
-43,48,55,58,59,59,59,58,55,48,41,39,38,36,30,20,11,5,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,22,113,135,125,102,79,58,53,54,62,80,100,115,125,132,140,149,159,181,199,203,197,183,157,111,64,33,6,0,0,0,0,2,4,6,12,31,61,79,82,83,85,88,90,91,
-91,89,87,82,69,50,28,16,9,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,6,13,24,34,39,131,134,138,140,140,140,141,142,140,137,134,132,131,128,119,106,
-94,88,86,85,82,79,76,72,66,59,51,42,33,26,19,14,10,7,5,3,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,2,2,3,4,4,6,6,7,11,19,33,
-53,81,111,137,151,143,122,109,101,88,68,49,33,21,13,11,9,8,7,6,7,7,6,6,10,18,27,37,51,69,86,95,94,87,77,67,56,46,30,16,11,12,15,14,10,6,6,5,
-5,5,6,7,11,14,21,30,38,44,55,72,90,108,120,125,128,133,137,140,140,140,140,140,138,134,128,126,126,124,117,102,85,69,53,35,19,6,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,17,38,65,96,124,138,133,121,124,143,160,178,187,175,156,105,48,
-17,0,0,0,0,0,0,0,2,11,20,30,45,64,81,90,88,81,71,61,51,39,23,8,3,5,8,7,2,0,0,0,0,0,1,3,7,12,19,29,36,43,55,71,89,108,121,127,
-124,120,115,112,112,112,112,112,117,124,130,132,133,134,137,138,131,122,114,105,93,77,60,46,35,27,22,19,16,13,9,7,5,3,2,1,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,1,1,2,2,2,4,4,5,6,6,10,18,36,62,92,110,112,112,110,99,90,86,80,70,58,45,33,22,16,12,10,10,9,10,13,20,32,49,67,83,93,94,
-94,95,98,103,110,116,108,89,77,80,87,81,61,44,41,41,44,48,57,68,79,90,103,116,125,130,138,145,147,144,136,132,129,125,117,112,112,112,112,112,116,123,128,130,131,135,143,151,
-152,146,138,124,102,73,43,21,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,9,26,53,84,103,104,102,100,91,92,111,132,149,180,191,174,137,86,47,27,14,2,2,7,15,28,46,65,81,90,92,91,92,95,100,107,113,106,86,74,76,84,78,58,43,41,42,
-44,49,58,69,80,91,103,116,124,129,136,142,144,141,133,127,44,33,26,23,24,25,25,25,29,36,48,63,78,91,107,126,139,142,141,140,139,132,118,98,74,48,26,12,6,3,3,2,
-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,2,3,3,3,3,3,7,18,39,58,73,77,71,66,68,74,84,89,89,
-87,79,72,65,60,59,59,64,70,78,85,89,85,72,59,55,65,85,108,128,145,156,160,157,154,154,156,154,142,129,125,125,127,131,136,141,144,144,144,138,131,126,117,102,86,68,52,44,
-40,34,28,25,25,25,25,25,28,36,48,61,76,90,106,129,149,157,159,160,160,152,133,106,75,43,19,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,12,33,53,68,73,66,60,60,66,75,92,119,146,176,197,197,189,171,128,91,75,72,78,84,79,67,54,50,
-60,81,105,125,141,153,156,156,155,158,163,166,164,160,161,162,163,167,171,175,178,179,179,177,174,171,163,150,125,97,74,60,106,64,28,9,0,0,0,0,3,20,47,73,88,92,95,98,
-102,107,113,118,125,134,141,146,143,126,97,64,35,14,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,3,5,9,11,11,11,11,11,11,12,12,12,11,8,6,
-5,3,3,3,1,2,4,9,12,10,9,10,15,24,36,47,60,71,77,83,85,85,84,83,78,71,61,47,34,28,34,55,89,122,143,151,151,145,138,130,121,120,128,134,134,131,132,132,
-130,126,118,109,98,89,82,74,66,59,49,34,19,8,1,0,0,0,0,0,0,0,0,0,4,20,47,74,87,92,95,98,103,109,116,123,131,142,150,154,149,129,98,63,33,13,2,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,3,5,9,11,11,11,11,11,11,11,11,11,9,6,3,2,0,0,0,0,0,1,6,9,8,6,7,13,22,33,43,
-54,70,89,113,133,162,196,206,195,157,112,80,67,60,64,80,108,136,155,163,167,168,172,184,195,203,210,221,232,239,242,241,241,240,239,238,236,234,232,229,227,226,223,216,198,175,159,140,
-232,203,164,122,78,49,39,45,65,84,92,83,65,50,42,35,29,28,30,32,39,51,65,85,114,142,153,143,122,88,56,40,31,25,22,21,21,21,21,21,21,23,27,34,38,42,50,58,
-62,64,69,78,82,82,82,82,82,82,82,83,83,79,71,64,60,53,48,51,47,32,14,3,0,0,0,0,0,0,0,0,5,11,16,23,27,28,28,26,23,23,26,32,47,73,104,131,
-146,141,122,100,83,66,50,38,30,30,42,54,64,75,85,89,88,84,77,69,63,64,71,77,77,75,72,64,52,42,34,22,12,12,12,12,12,13,20,38,65,87,93,84,65,50,42,35,
-29,28,28,31,38,51,65,86,116,144,154,144,122,88,57,40,31,25,22,21,21,21,21,21,21,23,27,34,38,42,50,58,62,64,69,78,82,82,82,82,82,82,82,82,82,79,70,63,
-59,51,47,50,46,30,13,1,0,0,0,0,0,0,0,0,4,10,14,19,22,26,41,68,111,160,185,183,187,195,206,216,221,222,222,223,226,229,233,240,244,246,247,248,247,241,236,237,
-237,236,236,235,234,235,237,238,238,238,238,240,244,246,245,242,233,247,250,241,220,198,182,170,153,118,69,27,6,0,0,0,0,0,0,0,0,0,12,35,68,108,145,158,160,156,143,130,
-120,111,107,106,106,106,106,106,107,108,114,122,126,132,141,146,139,126,121,119,117,117,117,117,117,117,117,117,117,118,120,120,120,120,125,132,130,114,87,58,37,24,14,7,2,0,0,0,
-0,0,0,0,1,5,15,30,49,71,93,113,131,144,145,131,103,66,36,18,9,3,0,1,11,27,45,60,76,86,89,90,90,89,88,87,87,88,85,78,74,74,76,82,87,88,88,82,
-72,72,74,78,86,93,104,117,123,103,63,27,9,2,0,0,0,0,0,0,0,0,12,35,68,108,145,158,160,156,143,130,120,111,107,105,105,105,105,105,105,106,112,119,124,130,139,144,
-137,123,118,116,114,114,115,114,115,115,116,116,116,117,119,119,119,120,126,135,132,116,89,60,39,26,16,9,4,2,1,1,1,1,0,0,1,4,12,25,45,78,122,150,162,171,175,177,
-181,193,215,236,247,247,241,224,204,195,193,189,177,161,154,153,152,152,152,150,151,151,147,142,139,139,140,151,172,189,199,212,151,183,214,237,251,255,254,245,220,172,110,56,26,14,6,0,
-0,0,0,0,10,31,56,75,87,94,99,101,105,117,129,134,137,140,141,141,141,141,141,141,141,141,138,134,131,133,136,130,105,76,61,52,47,46,46,46,45,44,42,41,41,46,54,60,
-64,78,107,132,146,160,163,154,141,128,114,102,91,85,83,78,69,61,58,56,57,67,89,115,136,151,158,160,155,125,84,52,24,5,0,0,0,9,25,45,66,82,87,85,76,65,58,59,
-62,63,63,63,61,52,36,22,19,20,27,40,57,68,77,90,98,104,115,129,143,142,130,107,74,36,9,0,0,0,0,0,0,0,0,1,11,32,57,76,88,94,100,101,106,117,129,133,
-135,138,139,140,140,141,142,145,149,150,148,144,142,144,146,142,120,94,82,73,67,67,67,63,59,54,48,45,46,54,62,66,69,81,101,116,127,141,148,140,126,113,96,81,69,62,60,59,
-60,60,60,59,60,69,90,115,134,146,153,158,165,168,181,200,218,233,239,231,206,179,156,129,113,111,110,100,85,69,61,62,65,67,67,66,63,55,40,28,24,26,32,47,69,85,99,119,
-118,137,158,172,179,184,198,220,237,240,226,193,159,132,104,69,45,39,43,56,74,91,91,77,58,42,29,20,19,28,38,46,54,61,65,66,65,65,65,65,64,62,56,47,42,41,42,37,
-21,6,1,0,0,0,0,0,0,6,18,28,36,37,40,62,95,119,161,183,187,197,208,218,222,224,226,225,224,223,223,221,213,201,183,168,163,160,157,147,133,122,125,133,128,100,70,49,
-36,28,30,38,49,67,83,88,81,65,46,33,29,38,54,69,76,78,78,77,72,61,48,41,41,46,57,72,86,94,97,104,115,128,138,135,116,83,52,27,7,0,0,0,0,0,0,0,
-2,12,29,49,73,90,90,76,57,40,26,17,18,28,42,57,76,96,114,129,134,138,148,164,179,184,181,178,175,175,175,173,165,157,155,153,152,152,151,144,134,115,90,76,74,81,85,78,
-62,48,43,42,48,66,94,117,130,139,143,143,141,139,138,138,138,138,137,137,139,145,151,152,154,164,180,200,216,232,244,245,233,213,184,144,110,97,95,90,80,63,44,31,27,36,53,68,
-75,77,77,76,71,60,47,40,40,45,55,70,85,92,96,102,119,131,137,128,105,84,83,105,144,188,226,243,245,241,232,212,194,187,182,176,168,156,140,117,93,87,87,83,79,78,77,78,
-79,80,81,81,81,81,81,79,74,68,58,42,28,23,22,20,16,11,5,1,1,8,26,57,97,145,164,169,172,173,173,173,160,146,108,69,57,56,63,75,85,97,110,120,129,133,135,141,
-156,174,196,206,210,211,200,173,137,98,67,59,71,81,89,91,89,85,85,87,88,82,65,45,27,15,16,31,56,80,89,84,78,75,75,77,81,87,89,88,87,88,86,85,88,92,96,103,
-119,133,139,127,96,61,37,22,13,12,13,14,18,27,36,49,64,89,116,131,129,110,86,68,60,57,58,59,67,81,96,124,159,182,201,216,221,223,229,237,241,242,242,242,242,241,241,241,
-241,241,242,242,242,242,243,242,241,235,226,222,222,222,220,213,197,174,149,127,109,89,74,72,81,94,104,112,119,123,125,126,126,127,131,141,155,171,179,182,194,213,230,242,248,240,219,189,
-156,128,108,94,87,80,64,44,27,15,16,31,56,80,89,84,78,75,75,77,81,87,89,88,87,87,86,85,88,92,96,102,42,52,65,80,87,86,84,82,88,110,145,179,203,222,240,250,
-254,254,251,246,241,237,237,232,223,225,228,228,224,222,219,219,218,216,216,216,215,214,215,215,210,207,199,181,163,157,157,155,153,142,131,129,142,166,186,196,184,144,113,88,69,60,57,40,
-18,9,0,0,0,0,0,0,2,8,14,21,26,30,32,33,37,44,56,66,81,101,122,145,162,162,135,95,64,48,47,54,61,65,62,57,49,37,25,24,33,48,68,85,88,73,48,26,
-17,15,15,16,22,32,41,44,44,40,32,23,20,21,24,29,42,52,65,80,88,88,86,80,75,73,72,75,83,101,118,130,141,153,158,155,146,144,155,167,179,194,204,210,215,224,229,238,
-243,242,235,226,221,219,212,196,178,170,170,170,171,173,177,181,185,189,189,189,189,190,191,195,200,211,226,238,243,245,248,252,252,250,247,242,233,219,199,185,185,186,180,174,170,170,169,169,
-169,172,182,198,216,231,238,242,243,235,221,203,174,131,91,71,65,64,61,55,48,37,25,24,33,48,68,85,88,73,48,26,17,15,15,16,22,32,41,44,44,40,32,23,20,21,24,29,
-0,0,5,15,29,42,56,67,73,74,78,85,99,121,146,170,192,216,237,248,252,254,255,255,251,246,244,244,245,245,244,244,244,241,240,239,237,235,234,234,237,244,249,250,250,252,253,255,
-255,253,252,253,253,246,229,203,177,151,134,117,91,69,59,55,53,53,53,53,47,42,41,46,53,56,57,57,57,57,57,60,66,71,71,72,82,87,83,85,96,106,109,102,87,68,54,54,
-59,63,66,71,75,77,80,84,88,88,81,64,39,16,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,15,29,43,56,68,75,76,75,74,79,94,104,104,
-98,96,93,94,127,194,233,244,249,252,253,252,249,245,240,229,210,188,166,144,130,121,109,92,77,72,71,72,79,94,110,122,129,132,133,133,133,133,134,135,139,146,160,170,167,165,180,205,
-227,240,247,251,253,254,255,255,255,255,254,251,248,247,247,245,245,245,245,244,241,232,217,204,187,163,138,116,93,66,50,50,57,62,66,71,74,77,80,84,88,88,81,64,39,16,2,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,10,14,14,12,11,14,30,62,110,166,210,237,247,241,227,207,182,150,127,119,124,134,142,147,154,
-161,166,168,171,171,171,171,171,174,182,191,202,212,214,211,209,209,217,228,239,245,248,248,247,243,235,223,208,194,183,169,149,129,113,101,95,91,87,84,84,83,82,82,82,82,82,82,81,
-78,74,73,74,77,72,61,57,57,62,68,72,79,83,88,99,106,106,112,124,136,145,142,123,93,60,32,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,4,10,14,15,15,14,15,20,23,20,15,14,12,21,109,224,235,218,200,177,158,149,146,140,138,133,128,124,121,120,119,116,114,112,112,112,112,112,115,118,114,105,
-95,88,86,86,86,86,86,86,86,87,93,97,92,90,95,110,130,150,169,186,199,211,220,226,229,233,242,250,253,254,254,252,248,242,235,224,206,175,136,105,84,74,72,74,80,84,90,101,
-107,107,113,125,137,145,142,124,93,60,32,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,26,63,113,166,211,
-237,240,225,189,140,96,64,39,20,10,6,8,12,17,21,29,40,48,56,66,76,83,87,89,89,90,93,99,99,89,73,63,61,69,86,112,136,157,175,191,209,226,236,240,241,241,238,227,
-213,193,171,158,143,119,99,82,66,57,54,54,52,51,52,51,46,41,41,40,39,36,32,30,31,33,36,41,49,56,61,62,59,54,57,66,77,90,101,103,92,73,53,36,17,3,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,55,125,115,80,57,37,22,17,16,17,19,26,
-34,43,51,62,73,81,85,86,88,88,88,87,82,66,46,31,21,15,14,14,14,14,14,14,14,14,16,19,21,25,26,27,28,32,38,48,61,73,81,86,88,95,117,149,177,195,210,227,
-238,241,241,238,230,212,184,151,115,84,59,41,34,37,45,57,60,57,60,69,82,95,103,104,95,76,56,37,19,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,1,3,6,10,16,25,48,90,149,199,231,245,239,209,159,106,56,21,5,0,0,0,0,0,0,0,0,0,0,0,0,0,3,6,10,12,12,13,13,13,12,10,5,0,0,
-0,0,2,7,15,26,37,53,84,124,161,196,217,229,240,246,248,247,244,242,236,225,212,200,186,171,166,161,150,147,148,148,146,147,147,147,147,147,147,147,148,147,146,154,167,168,157,132,
-114,111,111,114,107,74,49,56,87,122,146,154,140,115,82,54,34,17,6,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,4,4,4,4,4,4,2,0,0,0,0,
-0,0,0,0,7,16,12,2,0,0,0,0,0,0,0,0,0,0,1,3,7,11,13,13,14,14,14,14,11,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,5,18,35,51,71,105,144,173,191,204,219,234,242,240,229,211,181,146,104,62,32,16,9,5,3,4,8,15,25,42,64,87,109,119,98,56,18,1,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-};
-
-
-unsigned char linesmap[TEXSIZE * TEXSIZE] = {
-93,102,35,124,79,0,74,178,178,69,24,168,206,164,100,25,8,34,71,85,11,0,94,248,249,232,251,235,50,0,0,0,0,90,169,68,154,248,248,115,12,0,3,36,19,0,0,0,
-0,0,0,0,16,38,5,0,0,10,79,102,76,26,45,79,48,138,179,138,18,0,0,0,0,18,198,248,216,95,22,0,13,37,37,13,0,0,5,123,124,6,60,79,8,0,0,0,
-0,3,64,209,248,203,26,39,12,88,149,55,19,0,0,0,3,70,71,43,23,38,5,81,243,248,248,249,251,190,30,25,93,102,35,124,79,0,74,178,178,69,24,168,206,164,116,224,
-248,249,250,250,135,0,0,0,52,164,120,65,207,248,149,0,0,90,169,68,2,0,8,39,12,0,3,36,19,0,0,0,0,0,0,0,84,249,248,90,0,10,79,102,76,26,45,79,
-48,138,179,138,18,18,198,248,198,18,0,8,79,83,22,0,13,37,37,13,0,0,5,123,124,6,60,79,8,0,0,0,0,3,50,50,2,0,8,39,12,88,149,55,19,0,0,0,
-3,70,71,43,93,61,5,0,0,0,0,27,179,160,30,25,25,47,2,3,6,73,178,178,74,0,10,48,175,209,162,27,3,42,39,54,82,13,0,127,252,251,241,50,0,0,0,0,
-1,47,121,149,22,94,248,249,155,14,33,19,0,0,0,0,0,0,0,0,0,16,39,3,9,79,102,76,27,32,0,16,84,54,138,179,138,18,0,0,0,0,26,216,250,199,46,22,
-3,43,43,4,0,5,123,124,6,0,0,60,78,8,0,0,1,62,209,248,203,18,0,8,37,14,110,156,22,0,0,3,70,71,5,110,124,21,108,243,248,248,249,250,147,132,123,5,
-25,47,2,3,6,73,178,178,74,0,10,48,175,209,162,51,221,249,249,250,250,133,0,52,164,120,65,207,248,194,18,0,1,47,121,149,22,0,0,34,100,14,33,19,0,0,0,0,
-0,0,0,0,0,104,249,248,96,79,102,76,27,32,0,16,84,54,138,179,138,18,18,198,248,198,26,82,70,6,30,22,3,43,43,4,0,5,123,124,6,0,0,60,78,8,0,0,
-1,47,50,2,0,0,0,8,37,14,110,156,22,0,0,3,70,71,5,156,249,224,62,6,0,0,22,145,97,132,123,5,5,0,0,0,72,178,178,74,0,10,33,39,95,173,202,155,
-57,9,10,33,55,82,64,220,251,249,248,90,11,3,0,0,1,22,4,88,148,19,106,252,250,128,26,0,37,19,0,0,0,0,0,0,0,0,12,40,79,102,76,27,32,3,0,0,
-20,89,56,138,179,138,18,0,0,9,82,84,199,248,198,49,49,9,12,38,11,123,124,6,0,0,0,0,66,79,8,0,19,203,248,203,18,0,0,0,8,58,26,86,141,16,3,70,
-71,3,0,7,122,165,244,249,248,249,250,149,36,7,122,122,5,0,0,0,72,178,178,74,0,10,33,39,95,173,202,155,85,222,248,249,250,250,151,163,120,65,207,248,196,21,0,0,
-1,22,4,88,148,19,19,149,93,58,26,0,37,19,0,0,0,0,0,0,0,0,101,249,250,156,76,27,32,3,0,0,20,89,56,138,179,138,18,18,198,248,216,84,3,0,0,33,
-49,9,12,38,11,123,124,6,0,0,0,0,66,79,8,0,1,22,4,0,0,0,0,0,8,58,26,86,141,16,3,70,71,3,81,243,252,252,224,61,6,22,148,100,36,7,122,122,
-149,13,0,74,178,178,74,0,10,34,40,88,28,22,167,207,158,31,0,13,33,97,230,251,235,122,248,248,101,36,3,0,0,0,0,0,83,140,140,147,249,249,112,62,156,39,0,0,
-0,0,0,0,0,0,8,82,102,77,26,32,3,0,0,8,44,29,87,56,138,179,138,18,9,82,71,2,18,198,248,206,54,21,0,19,143,127,6,0,0,0,0,0,12,84,77,24,
-198,248,203,18,0,0,0,3,34,23,34,12,76,137,86,71,3,0,0,0,85,249,252,248,250,250,149,36,3,0,5,128,149,13,0,74,178,178,74,0,10,34,40,88,28,22,167,207,
-158,67,221,248,249,250,253,178,62,207,248,194,34,36,3,0,0,0,0,0,83,140,140,84,34,23,34,62,156,39,0,0,0,0,0,0,0,0,8,149,251,250,107,32,3,0,0,8,
-44,29,87,56,138,179,138,18,26,216,250,198,18,0,6,34,39,21,0,19,143,127,6,0,0,0,0,0,12,84,77,7,0,0,0,0,0,0,0,3,34,23,34,12,76,137,86,71,
-3,81,243,248,248,252,249,88,55,150,99,36,3,0,5,128,141,113,76,178,178,74,0,10,34,40,88,28,0,6,50,168,203,156,33,0,64,226,251,239,50,0,94,248,248,102,36,3,
-0,0,0,0,18,168,169,52,106,248,249,203,64,0,0,0,0,0,0,0,0,12,79,102,79,48,32,2,0,0,10,57,33,0,19,88,56,138,179,142,94,71,2,0,0,24,206,248,
-198,49,28,123,131,43,6,0,0,0,0,0,0,14,95,216,248,203,18,0,0,0,3,36,19,0,8,36,16,130,177,25,0,0,0,81,243,248,252,252,249,160,36,2,0,0,10,66,
-141,113,76,178,178,74,0,10,34,40,88,28,0,6,50,168,203,156,69,226,249,252,251,250,227,248,194,18,0,19,36,3,0,0,0,0,18,168,169,52,19,0,58,174,64,0,0,0,
-0,0,0,0,0,12,79,102,147,249,245,91,0,0,10,57,33,0,19,88,56,138,179,142,94,84,198,248,198,24,38,13,0,33,28,123,131,43,6,0,0,0,0,0,0,14,83,79,
-14,0,0,0,0,0,3,36,19,0,8,36,16,130,177,25,81,243,248,248,248,243,160,121,140,117,36,2,0,0,10,66,0,142,179,178,74,0,10,33,40,88,28,0,6,38,13,21,
-165,204,150,79,219,251,234,85,82,13,0,94,248,248,102,36,3,0,0,22,147,83,105,154,19,124,252,249,115,13,0,0,0,0,0,3,8,73,102,76,26,38,36,6,0,10,62,36,
-0,0,0,20,88,54,142,203,170,20,0,0,6,38,31,198,248,199,148,136,6,14,35,6,0,0,0,0,0,18,201,250,220,29,0,0,0,3,36,19,0,0,0,8,88,74,89,148,
-22,0,81,243,248,248,249,251,189,41,36,6,0,10,62,37,0,142,179,178,74,0,10,33,40,88,28,0,6,38,13,21,165,204,150,104,245,251,250,250,250,220,18,0,0,0,19,36,
-3,0,0,22,147,83,105,154,19,48,159,59,38,13,0,0,0,0,0,3,8,73,102,76,26,122,249,243,90,10,62,36,0,0,0,20,88,54,142,203,170,20,18,198,248,206,31,0,
-0,6,140,136,6,14,35,6,0,0,0,0,0,0,14,83,85,12,0,0,0,3,36,19,0,0,0,8,88,74,89,182,244,248,248,248,243,81,27,179,158,41,36,6,0,10,62,37,
-72,170,178,74,0,10,33,40,88,28,0,6,38,14,0,0,20,159,204,234,251,231,49,32,55,82,13,0,94,248,248,102,36,3,22,148,90,36,19,81,152,149,125,248,248,114,13,0,
-0,0,0,6,35,46,69,28,32,1,13,34,16,60,37,0,0,0,0,0,17,82,99,168,180,138,18,6,38,14,0,18,199,252,226,53,24,0,13,38,6,0,0,0,18,198,248,206,
-90,84,12,0,3,36,19,0,0,0,3,68,71,36,12,88,148,96,243,248,249,249,250,147,132,121,17,34,16,60,37,0,72,170,178,74,0,10,33,40,88,28,0,6,38,14,0,0,
-20,159,203,194,149,235,248,249,250,250,112,0,0,0,0,19,36,3,22,148,90,36,19,81,152,149,48,0,2,38,13,0,0,0,0,6,35,46,69,28,32,1,107,249,244,129,37,0,
-0,0,0,0,17,82,99,168,180,138,18,24,206,248,198,18,5,123,124,38,24,0,13,38,6,0,0,0,0,0,0,13,78,84,12,0,3,36,19,0,0,0,3,68,71,36,89,247,
-252,249,248,243,106,31,145,97,132,121,17,34,16,60,37,0,178,178,74,0,10,33,40,88,28,0,6,38,14,0,0,0,0,70,235,254,245,66,0,13,33,55,82,13,0,94,248,248,
-102,55,149,89,36,19,0,46,174,152,16,98,249,248,113,14,0,0,0,0,10,33,24,30,3,0,0,20,82,41,0,0,0,0,0,0,6,82,102,56,138,179,141,53,14,0,0,5,
-132,226,248,198,48,24,0,14,38,6,0,18,198,248,203,18,13,78,84,16,32,19,0,0,0,3,70,71,2,5,38,13,141,250,249,248,249,251,152,33,7,122,122,25,73,38,0,74,
-178,178,74,0,10,33,63,100,28,0,6,38,14,0,0,0,0,66,195,209,172,219,248,248,249,250,250,107,0,0,0,0,19,55,149,89,36,19,0,46,174,152,16,7,44,10,36,14,
-0,0,0,0,10,33,24,30,3,0,0,111,250,245,90,0,0,0,0,0,6,82,102,56,138,179,141,53,31,198,248,199,132,124,6,1,33,24,0,14,38,6,0,0,0,0,0,0,
-13,78,84,16,32,19,0,0,0,3,70,71,2,84,245,248,250,252,244,81,32,162,104,33,7,122,122,25,73,38,0,74,178,74,0,10,33,40,88,28,0,6,38,14,0,0,0,0,
-56,223,252,243,211,156,24,0,13,33,54,80,28,0,94,248,249,191,110,34,18,0,53,157,48,81,148,26,138,250,248,113,14,0,0,0,0,28,56,10,0,0,10,59,109,140,11,0,
-0,0,0,9,82,66,24,86,56,140,190,144,18,0,6,122,124,23,198,248,198,47,12,0,14,38,23,198,249,203,18,1,63,133,86,96,27,0,0,0,3,70,71,3,0,0,7,107,
-244,250,252,250,251,156,56,10,0,5,127,153,46,32,78,178,178,74,0,10,33,63,233,204,18,6,38,14,0,0,0,0,52,157,124,176,245,252,211,231,248,249,250,250,112,0,0,0,
-24,155,110,34,18,0,53,157,48,81,148,26,70,68,6,36,14,0,0,0,0,28,56,10,0,0,10,59,166,252,243,90,0,0,0,9,82,66,24,86,56,140,190,144,18,18,199,252,
-225,23,0,0,1,32,12,0,14,38,5,0,22,2,0,1,63,133,86,96,27,0,0,0,3,70,71,3,81,243,248,249,248,247,177,83,170,110,56,10,0,5,127,153,46,32,78,178,
-74,0,10,33,40,88,28,0,6,38,14,0,0,0,0,56,226,251,228,57,163,204,144,17,0,12,30,74,99,16,0,102,252,250,119,45,1,0,55,52,0,0,88,148,25,138,250,248,
-113,14,0,0,24,30,11,38,8,9,62,37,11,129,142,11,0,0,9,82,71,3,0,17,86,78,142,179,137,30,117,124,13,0,18,198,248,198,20,0,0,31,205,249,214,22,0,4,
-131,179,153,90,82,12,0,3,70,71,3,0,0,0,81,243,249,248,252,253,190,44,9,38,8,9,66,140,112,86,190,180,74,0,10,33,40,100,204,248,199,53,14,0,0,0,0,52,
-167,118,64,211,252,243,152,67,230,248,249,250,251,100,0,13,141,89,45,45,1,0,55,52,0,0,88,148,25,70,68,6,36,14,0,0,24,30,11,38,8,9,62,37,11,180,252,243,
-86,0,9,82,71,3,0,17,86,78,142,179,137,30,126,225,248,198,18,0,0,0,2,0,0,14,32,44,53,4,0,4,131,179,153,90,82,12,0,3,70,71,3,81,243,248,248,248,
-245,88,120,209,159,44,9,38,8,9,66,140,112,86,190,180,4,8,33,40,88,28,0,6,38,14,0,0,0,0,56,228,251,229,36,0,19,163,204,144,17,0,48,63,56,82,13,7,
-124,249,248,100,36,3,0,0,0,0,0,88,148,24,138,250,248,113,12,21,33,1,0,8,38,61,35,0,0,5,129,141,6,8,82,71,2,0,0,3,46,90,56,136,179,169,118,16,
-61,16,0,18,198,248,198,18,18,198,249,217,27,0,0,0,24,156,183,137,87,82,18,66,70,3,0,0,0,81,243,248,248,251,251,203,160,22,0,8,38,61,35,0,142,179,175,99,
-4,8,33,40,88,28,18,199,249,201,18,0,0,0,52,167,134,72,207,248,198,170,204,144,67,239,249,250,250,250,98,7,47,36,16,16,36,3,0,0,0,0,0,88,148,24,70,68,
-6,36,12,21,33,1,0,8,38,61,35,0,0,5,180,252,243,92,82,71,2,0,0,3,46,90,56,136,179,169,118,33,212,248,198,18,0,0,0,0,0,0,49,69,10,0,0,0,
-24,156,183,137,87,82,18,66,70,3,81,243,248,248,248,243,83,80,182,179,160,22,0,8,38,61,35,0,142,179,175,99,40,34,39,88,28,0,6,38,14,0,0,0,0,56,227,251,
-230,84,14,1,47,36,162,204,145,56,53,16,31,55,81,17,32,106,248,248,102,36,3,0,0,0,0,0,98,150,24,138,250,248,120,39,0,0,0,8,61,56,7,0,0,0,5,127,
-140,83,70,2,0,0,6,38,10,16,88,62,171,179,134,15,30,64,14,1,62,203,248,202,202,249,214,34,35,6,0,3,36,38,142,179,136,82,100,68,0,0,0,0,81,243,248,248,
-250,252,187,58,87,148,22,8,61,56,7,72,170,179,142,12,40,34,39,88,28,0,6,53,201,248,203,18,0,52,164,118,78,218,248,194,62,36,162,204,145,98,242,248,249,250,247,97,
-32,19,0,0,19,36,3,0,0,0,0,0,98,150,24,70,68,6,47,39,0,0,0,8,61,56,7,0,0,0,5,179,252,247,132,2,0,0,6,38,10,16,88,62,171,179,134,15,
-46,212,248,171,48,22,0,0,0,45,53,17,35,6,0,3,36,38,142,179,136,82,100,68,0,81,243,248,248,248,243,81,59,190,154,58,87,148,22,8,61,56,7,72,170,179,142,12,
-43,58,86,27,0,6,38,14,0,0,0,0,59,227,251,228,31,27,58,53,47,4,18,162,208,168,19,0,13,32,55,95,28,0,94,248,248,102,36,3,0,0,0,0,0,89,148,24,
-136,250,249,111,15,0,10,62,35,9,38,10,0,0,0,10,163,167,12,0,0,6,38,14,0,0,22,165,141,135,179,138,18,28,58,53,46,23,202,248,249,216,21,0,14,36,9,34,
-19,0,20,145,179,163,101,79,11,0,0,81,243,248,248,250,252,187,54,31,14,88,152,79,35,9,101,181,178,76,112,125,43,58,86,27,0,6,38,14,18,198,248,203,66,164,120,64,
-207,249,208,68,47,4,18,162,208,168,73,239,248,249,250,247,100,0,0,0,0,19,36,3,0,0,0,0,0,89,148,24,67,76,30,32,15,0,10,62,35,9,38,10,0,0,0,10,
-200,253,243,86,0,6,38,14,0,0,22,165,141,135,179,138,18,44,190,75,46,6,0,0,46,55,4,0,14,36,9,34,19,0,20,145,179,163,101,79,88,243,248,248,248,243,81,60,
-190,155,54,31,14,88,152,79,35,9,101,181,178,76,112,125,142,93,53,1,5,38,14,0,0,0,0,59,227,251,228,31,0,1,59,76,17,0,1,57,178,170,22,0,0,13,52,62,
-79,13,0,94,248,248,102,36,3,0,0,0,0,0,88,148,42,147,250,248,103,11,62,37,0,0,10,39,10,0,9,75,65,130,140,10,5,38,14,0,0,5,122,131,88,57,138,179,
-138,19,59,76,17,18,202,249,250,203,26,22,0,14,58,21,0,0,0,24,177,199,135,84,85,12,81,243,248,248,250,252,187,52,0,6,22,11,128,163,23,69,181,190,81,0,14,139,
-142,93,53,1,5,38,14,0,0,18,194,249,236,130,65,207,248,194,73,76,17,0,1,57,178,170,22,63,239,248,250,250,247,86,0,0,0,0,19,36,3,0,0,0,0,0,88,148,
-42,84,66,7,20,11,62,37,0,0,10,39,10,0,9,75,65,181,252,243,89,38,14,0,0,5,122,131,88,57,138,179,138,19,59,76,17,0,1,46,54,5,9,22,0,14,58,21,
-0,0,0,24,177,199,135,138,247,248,248,248,243,81,62,190,155,52,0,6,22,11,128,163,23,69,181,190,81,0,14,139,168,136,13,36,36,11,0,0,0,0,59,229,251,228,27,0,
-3,50,44,28,59,16,39,51,19,55,84,12,0,31,28,29,54,82,13,0,94,248,248,102,34,3,0,0,0,0,0,102,160,28,138,250,248,127,36,0,0,0,0,10,33,16,79,68,
-1,5,129,141,41,11,0,0,5,122,122,5,17,87,60,138,180,161,58,28,73,202,249,216,203,248,203,99,31,24,28,32,6,0,3,70,87,149,179,130,82,138,243,248,248,249,251,187,
-52,0,0,0,7,59,36,81,156,173,175,81,35,16,29,44,168,136,13,36,36,11,0,0,0,0,66,233,251,217,210,248,195,64,44,28,59,16,39,51,19,55,84,12,68,241,249,249,
-250,247,82,0,0,0,0,19,34,3,0,0,0,0,0,102,160,28,69,66,12,57,36,0,0,0,0,10,33,16,79,68,1,5,182,252,245,89,0,0,5,122,122,5,17,87,60,138,
-180,161,58,28,59,16,39,52,4,0,22,87,31,24,28,32,6,0,3,70,87,149,203,249,250,250,248,243,81,52,186,155,52,0,0,0,7,59,36,81,156,173,175,81,35,16,29,44,
-32,122,125,46,38,20,23,0,0,59,229,251,225,27,0,4,52,46,1,0,26,73,49,1,0,0,50,82,40,14,0,12,32,55,82,13,0,94,248,248,101,35,3,0,0,0,24,31,
-88,148,23,138,250,249,90,0,0,0,0,0,14,93,73,1,0,0,11,144,142,25,23,5,122,122,5,0,0,17,85,60,159,193,138,34,204,250,213,19,18,198,248,205,112,42,0,13,
-34,11,68,70,3,25,150,179,168,247,250,248,249,248,169,52,0,0,0,10,60,34,0,69,179,179,86,0,16,52,43,86,32,122,125,46,38,20,23,0,0,52,164,130,209,248,248,199,
-66,46,1,0,26,73,49,1,0,0,50,82,40,82,239,248,249,228,107,13,0,0,0,0,18,35,3,0,0,0,24,31,88,148,23,70,94,33,0,0,0,0,0,0,14,93,73,1,
-0,0,11,190,252,244,97,5,122,122,5,0,0,17,85,60,159,193,138,18,26,73,49,1,0,0,0,30,101,42,0,13,34,11,68,70,3,99,250,253,252,250,247,89,40,105,128,52,
-0,0,0,10,60,34,0,69,179,179,86,0,16,52,43,86,0,5,129,127,30,58,8,0,59,230,251,225,27,0,4,53,48,2,0,2,44,59,55,15,0,0,0,70,89,11,0,0,
-13,33,55,82,13,0,94,248,248,102,36,3,0,24,33,1,0,88,152,74,146,250,248,90,0,0,0,9,80,73,35,8,0,0,14,14,135,150,26,119,122,5,0,0,0,0,20,102,
-85,138,184,229,250,215,69,15,0,18,199,249,208,98,30,0,14,88,70,2,0,0,26,184,251,252,250,250,248,151,52,0,0,0,10,62,37,0,74,178,173,123,135,31,31,44,100,34,
-0,5,129,127,30,58,8,0,52,164,120,65,210,248,248,219,62,2,0,2,44,59,55,15,0,0,0,70,89,11,72,243,223,60,55,82,13,0,0,0,0,19,36,3,0,24,33,1,
-0,88,152,74,82,66,2,0,0,0,0,9,80,73,35,8,0,0,14,14,186,253,244,162,122,5,0,0,0,0,20,102,85,138,179,139,59,59,55,15,0,0,3,30,44,86,30,0,
-14,88,70,2,81,243,249,252,253,249,134,89,98,102,52,0,0,0,10,62,37,0,74,178,173,123,135,31,31,44,100,34,10,0,5,131,139,20,36,61,230,251,225,27,0,4,54,47,
-1,0,2,49,51,3,25,64,16,1,35,15,48,84,13,0,0,13,33,55,82,13,0,94,248,248,102,31,24,32,1,0,0,10,129,163,25,138,250,248,90,0,9,82,71,1,8,37,
-7,0,0,17,35,123,178,118,3,0,0,0,0,4,49,53,82,72,229,253,236,36,25,64,16,1,52,202,248,205,99,29,62,73,35,5,0,0,81,244,252,253,252,248,151,58,0,0,
-0,10,62,37,0,74,178,178,72,0,93,162,58,86,35,32,10,0,5,131,139,20,36,54,163,120,65,207,248,198,209,249,207,18,2,49,51,3,25,64,16,1,35,15,48,84,13,68,
-27,13,33,55,82,13,0,0,0,0,18,31,24,32,1,0,0,10,129,163,25,69,70,3,0,0,9,82,71,1,8,37,7,0,0,17,35,180,252,249,83,0,0,0,0,4,49,53,
-82,58,138,193,162,21,25,64,16,1,36,19,0,30,87,29,62,73,35,84,243,248,248,249,250,203,144,106,102,58,0,0,0,10,62,37,0,74,178,178,72,0,93,162,58,86,35,32,
-39,8,17,41,124,113,68,233,251,220,27,0,5,54,46,1,0,4,49,51,3,0,0,26,61,42,15,0,0,50,85,17,0,0,13,33,55,82,13,0,94,248,248,112,53,1,0,0,
-10,62,37,88,148,23,138,250,248,95,82,71,2,0,0,7,37,8,17,36,6,115,170,136,9,0,0,0,5,54,46,0,32,216,251,235,185,138,18,26,61,42,15,18,198,248,206,113,
-75,0,12,38,6,81,243,248,249,252,253,198,90,78,12,0,10,62,37,0,74,178,178,74,0,10,33,114,185,47,0,10,39,8,17,41,124,113,61,172,119,63,207,248,195,68,58,194,
-248,208,67,51,3,0,0,26,61,42,15,0,0,50,85,17,0,0,13,33,55,82,13,0,0,0,0,33,53,1,0,0,10,62,37,88,148,23,70,70,0,8,82,71,2,0,0,7,
-37,8,17,36,6,115,206,252,243,81,0,0,5,54,46,0,15,83,86,159,180,138,18,26,61,42,15,0,0,0,38,102,75,0,89,245,248,248,248,243,101,172,209,171,90,78,12,0,
-10,62,37,0,74,178,178,74,0,10,33,114,185,47,0,10,8,46,38,2,0,138,237,251,224,29,0,5,54,46,0,0,0,43,51,3,0,0,0,0,48,66,15,0,0,0,50,42,
-0,0,0,13,33,55,82,13,0,94,248,250,135,36,32,30,62,37,0,0,112,157,22,136,250,250,135,2,0,0,0,0,7,46,38,7,122,119,18,127,142,11,0,5,54,46,0,18,
-198,249,224,74,138,179,138,18,48,66,15,0,18,201,250,212,94,29,0,14,107,243,248,248,249,248,215,194,117,77,82,23,58,37,0,74,189,185,74,0,10,33,40,88,106,148,22,0,
-8,46,38,2,0,134,182,122,84,207,248,195,66,46,0,14,194,249,217,24,0,0,0,0,48,66,15,0,0,0,50,42,0,0,0,13,33,55,82,13,0,0,21,82,70,36,32,30,
-62,37,0,0,112,157,22,67,67,77,69,2,0,0,0,0,7,46,38,7,122,119,18,180,252,243,81,5,54,46,0,0,0,48,102,61,138,179,138,18,48,66,15,0,0,13,78,65,
-81,101,243,248,249,248,243,81,42,120,196,194,117,77,82,23,58,37,0,74,189,185,74,0,10,33,40,88,106,148,22,0,17,38,36,10,57,229,253,233,41,34,12,54,45,0,0,0,
-0,14,3,0,0,0,3,36,15,24,64,18,0,0,0,0,0,0,0,0,13,33,55,82,12,19,147,251,250,108,96,174,55,0,0,0,24,130,155,31,158,251,248,90,0,0,0,0,
-16,38,40,127,122,5,0,5,129,140,16,54,45,0,18,198,248,205,38,85,62,138,180,154,32,24,64,14,11,96,209,248,204,102,30,81,244,249,248,249,248,151,80,158,168,109,77,102,
-42,0,74,178,185,120,20,8,33,40,88,28,0,88,148,22,17,38,36,10,50,149,173,148,210,249,197,65,45,0,0,0,14,197,248,207,22,0,3,36,15,24,64,18,0,0,0,0,
-0,0,0,0,13,33,55,82,12,19,84,102,89,28,96,174,55,0,0,0,24,130,155,31,102,98,5,0,0,0,0,0,16,38,40,127,122,5,0,5,185,252,243,115,45,0,0,0,
-0,10,21,85,62,138,180,154,32,24,64,14,11,84,50,0,101,247,249,248,248,245,84,41,101,102,80,158,168,109,77,102,42,0,74,178,185,120,20,8,33,40,88,28,0,88,148,22,
-55,1,9,86,234,251,217,137,122,21,69,44,0,0,0,0,0,0,0,31,3,1,34,19,0,0,27,64,18,0,0,0,0,0,0,0,0,13,33,53,82,84,102,152,248,248,132,124,
-148,22,0,0,0,19,127,182,80,135,250,248,90,0,0,15,34,6,126,140,9,0,0,0,5,130,158,49,0,18,198,248,203,18,0,16,85,62,150,184,138,18,23,64,85,48,18,198,
-248,205,150,244,248,248,250,248,151,52,0,36,150,170,142,84,80,82,178,178,74,20,63,43,39,88,28,0,0,0,88,156,55,1,9,76,164,118,66,230,252,199,79,44,0,0,0,0,
-0,14,194,249,207,23,34,19,0,0,27,64,18,0,0,0,0,0,0,0,0,13,33,53,82,84,102,92,21,7,64,124,148,22,0,0,0,19,127,182,80,64,68,3,0,0,0,15,
-34,6,126,140,9,0,0,0,5,186,253,245,77,0,0,0,0,0,0,16,85,62,150,184,138,18,23,64,85,48,0,81,243,249,250,249,243,88,63,100,102,52,0,36,150,170,142,84,
-80,82,178,178,74,20,63,43,39,88,28,0,0,0,88,156,149,19,59,233,251,217,22,5,126,150,53,32,6,0,0,0,0,0,47,102,63,31,16,0,0,0,0,26,63,18,0,0,
-0,0,0,0,0,0,9,43,93,102,90,17,98,250,249,100,111,149,22,0,0,6,84,151,156,22,138,250,248,90,20,35,6,122,122,8,2,0,0,0,8,57,148,139,28,198,248,203,
-18,0,0,0,16,98,71,138,179,143,27,89,86,14,0,18,198,248,247,250,249,249,248,151,54,0,0,0,42,177,189,108,128,204,182,74,0,7,43,73,90,25,0,0,0,0,20,112,
-149,19,48,164,121,64,207,248,224,155,53,32,6,0,0,0,0,0,55,218,250,213,37,0,0,0,0,26,63,18,0,0,0,0,0,0,0,0,9,43,93,102,90,17,6,62,34,15,
-111,149,22,0,0,6,84,151,156,22,70,70,3,0,20,35,6,122,122,8,2,0,0,0,8,57,195,252,243,77,0,0,0,0,0,0,16,98,71,138,179,143,27,89,86,14,81,243,
-248,248,249,247,99,37,101,102,54,0,0,0,42,177,189,108,128,204,182,74,0,7,43,73,90,25,0,0,0,0,20,112,81,157,230,251,217,22,0,0,42,145,122,18,38,6,0,0,
-0,0,27,92,102,70,0,0,0,0,0,0,26,62,18,0,0,0,0,0,0,0,19,85,102,96,78,20,58,117,248,248,102,112,149,22,9,82,67,22,128,156,22,138,250,248,102,8,
-122,122,5,0,0,0,0,0,38,45,5,138,229,248,203,18,0,0,0,3,31,30,82,63,143,137,92,47,22,63,18,0,93,246,248,249,250,248,150,58,30,6,0,10,62,69,155,179,
-183,196,132,10,6,33,39,90,72,17,0,0,0,1,21,3,81,152,153,115,64,207,248,194,54,145,122,18,38,6,0,0,0,0,27,98,218,250,207,27,0,0,0,0,26,62,18,0,
-0,0,0,0,0,0,19,85,102,96,78,20,58,37,0,0,19,112,149,22,9,82,67,22,128,156,22,69,70,3,19,8,122,122,5,0,0,0,0,0,38,45,5,185,252,243,77,0,
-0,0,0,3,31,30,82,63,143,137,92,47,22,124,244,248,248,248,243,99,92,100,102,58,30,6,0,10,62,69,155,179,183,196,132,10,6,33,39,90,72,17,0,0,0,1,21,3,
-62,236,253,219,18,0,0,0,4,5,122,122,19,38,6,0,0,0,0,48,94,102,62,2,0,0,0,11,71,62,62,18,0,0,0,0,0,22,86,102,91,44,56,102,43,0,94,248,
-248,102,109,153,96,71,2,0,22,130,156,22,138,250,248,169,122,5,0,0,0,0,0,0,4,0,18,199,252,232,29,0,0,0,3,36,19,0,15,81,65,82,50,0,0,26,64,93,
-243,248,248,249,248,151,66,0,13,34,16,60,37,0,98,179,179,137,76,84,40,39,87,25,18,64,22,0,0,0,0,0,47,178,186,77,207,248,194,14,4,5,122,122,19,38,6,0,
-0,0,0,48,100,218,250,207,27,0,0,11,71,62,62,18,0,0,0,0,0,22,86,102,91,44,56,102,43,0,0,0,0,19,109,153,96,71,2,0,22,130,156,22,69,70,5,122,
-122,5,0,0,0,0,0,0,4,0,0,5,185,252,243,77,0,0,3,36,19,0,15,81,65,82,50,0,81,244,250,248,248,243,81,39,100,102,66,0,13,34,16,60,37,0,98,179,
-179,137,76,84,40,39,87,25,18,64,22,0,0,0,0,0,232,251,227,156,22,0,0,0,0,0,5,122,122,19,38,6,0,3,36,14,22,92,102,63,2,0,11,80,102,71,26,64,
-19,0,0,0,22,86,102,90,16,16,66,70,78,13,0,94,248,248,104,148,177,24,0,0,0,22,130,156,20,139,253,252,94,0,0,0,0,0,0,0,0,18,198,248,204,139,142,11,
-0,3,36,19,0,0,0,26,102,75,0,0,0,0,99,246,248,248,249,248,151,66,80,29,0,20,73,38,0,70,173,174,168,179,111,83,88,82,25,0,0,22,64,22,0,0,0,52,
-162,116,126,235,249,194,14,0,0,0,5,122,122,19,38,6,0,3,36,14,22,98,216,250,207,27,11,80,102,71,26,64,19,0,0,0,22,86,102,90,16,16,66,70,78,13,0,0,
-0,0,22,148,177,24,0,0,0,22,130,156,20,70,158,124,5,0,0,0,0,0,0,0,0,0,0,0,5,185,252,243,72,3,36,19,0,0,0,26,102,75,0,81,243,248,249,250,
-244,81,42,101,102,66,80,29,0,20,73,38,0,70,173,174,168,179,111,83,88,82,25,0,0,22,64,22,0,0,0,66,251,213,18,88,148,22,0,0,0,0,0,5,122,122,19,36,
-9,34,19,0,0,23,92,102,61,18,80,102,78,9,27,86,64,19,0,22,87,102,90,17,6,59,42,30,55,82,13,0,94,248,250,139,110,149,22,0,0,0,22,128,144,121,192,250,
-248,90,0,0,0,0,0,0,18,198,248,203,18,5,129,141,14,34,19,0,0,0,13,80,55,77,48,0,0,81,243,249,250,250,248,151,52,0,29,87,37,53,42,32,71,168,178,68,
-43,169,188,128,102,86,8,0,0,0,22,64,22,0,52,163,119,65,207,250,229,35,0,0,0,0,0,5,122,122,19,36,9,34,19,0,0,23,98,216,250,210,99,102,78,9,0,25,
-64,19,0,22,87,102,90,17,6,59,42,30,55,82,13,0,0,9,79,76,110,149,22,0,0,0,22,128,144,121,154,71,1,0,0,0,0,0,0,0,0,0,0,0,0,5,187,252,
-243,96,19,0,0,0,13,80,55,77,114,243,248,248,248,244,119,54,100,102,52,0,29,87,37,53,42,32,71,168,178,68,43,169,188,128,102,86,8,0,0,0,22,64,22,0,66,240,
-166,18,0,0,88,148,22,0,0,0,0,0,5,122,122,19,58,21,0,0,0,0,23,90,102,94,102,75,9,39,217,239,90,58,35,85,102,89,16,6,62,37,0,12,33,55,82,11,
-7,146,250,248,101,112,149,22,0,0,0,22,178,185,27,133,250,248,90,0,0,0,0,18,198,248,203,18,0,0,5,129,152,25,0,0,0,13,84,50,0,14,85,48,81,244,248,248,
-250,248,151,50,0,0,0,36,102,55,0,84,180,169,74,0,10,75,181,204,119,74,84,12,0,0,0,22,64,67,162,119,65,207,248,194,98,148,22,0,0,0,0,0,5,122,122,19,
-58,21,0,0,0,0,23,95,216,250,229,94,9,13,4,0,25,58,35,85,102,89,16,6,62,37,0,12,33,55,82,11,7,82,71,1,16,112,149,22,0,0,0,22,178,185,27,62,
-62,2,0,0,0,0,0,0,0,0,0,0,0,0,5,187,253,244,72,0,0,13,84,50,0,90,247,249,248,248,243,81,56,102,102,50,0,0,0,36,102,55,0,84,180,169,74,0,
-10,75,181,204,119,74,84,12,0,0,0,22,64,80,234,251,0,0,0,0,0,88,148,22,0,0,0,0,0,5,124,139,33,34,6,0,0,0,0,34,102,102,97,24,31,223,249,248,
-239,99,97,102,86,16,6,62,37,0,0,0,13,33,53,78,78,68,96,248,248,102,112,150,23,0,5,121,124,128,154,22,136,250,248,90,0,0,18,198,248,203,18,0,0,0,3,37,
-137,140,11,0,13,84,50,0,0,0,22,147,245,248,249,249,248,151,82,16,0,0,10,56,56,84,95,178,173,95,4,8,34,40,120,178,179,100,78,86,12,0,0,0,67,182,121,62,
-207,248,194,14,0,88,148,22,0,0,0,0,0,5,124,139,33,34,6,0,0,0,0,34,107,216,251,216,27,19,36,3,0,38,97,102,86,16,6,62,37,0,0,0,13,33,53,78,
-78,68,2,0,0,19,112,150,23,0,5,121,124,128,154,22,67,69,3,0,0,0,0,0,0,0,0,0,0,0,3,37,191,252,243,72,13,84,50,0,81,243,248,251,249,244,101,43,
-99,102,82,16,0,0,10,56,56,84,95,178,173,95,4,8,34,40,120,178,179,100,78,86,12,0,0,0,81,239,251,213,0,0,0,0,0,0,88,150,31,0,0,0,0,3,40,132,
-122,19,38,6,0,0,13,79,102,100,102,80,83,243,248,249,249,244,143,102,32,6,62,37,0,0,0,0,0,10,36,92,102,15,0,94,248,248,102,102,145,34,121,124,4,22,130,158,
-20,138,250,248,90,18,198,248,203,18,0,0,0,3,36,19,5,129,139,24,83,50,0,0,0,0,82,245,249,248,250,248,151,49,22,63,18,9,62,37,0,95,205,187,71,12,40,34,
-40,88,28,52,170,179,98,66,83,13,0,58,160,121,98,210,248,194,14,0,0,0,88,150,31,0,0,0,0,3,40,132,122,19,38,6,0,0,13,79,102,106,213,250,215,27,18,30,
-24,84,102,102,32,6,62,37,0,0,0,0,0,10,36,92,102,15,0,0,0,0,19,102,145,34,121,124,4,22,130,158,20,70,70,3,0,0,0,0,0,0,0,0,0,3,36,19,
-5,187,252,244,132,50,0,81,243,248,248,249,245,81,53,112,103,49,22,63,18,9,62,37,0,95,205,187,71,12,40,34,40,88,28,52,170,179,98,66,83,13,0,72,234,251,221,35,
-21,0,0,0,0,0,0,86,151,22,0,0,3,36,19,5,122,122,19,38,3,12,83,102,72,30,90,102,83,91,243,249,250,251,244,90,54,62,53,93,13,0,0,0,0,7,82,82,
-54,80,13,0,94,248,248,90,81,175,135,6,0,0,21,134,154,22,138,250,248,216,248,203,18,0,0,0,3,36,19,0,0,5,134,173,55,0,0,0,0,81,243,248,249,250,251,195,
-72,0,0,22,60,62,34,0,74,178,187,138,28,4,39,58,86,26,0,0,53,171,179,88,50,84,63,163,113,62,211,250,199,14,0,0,0,0,0,86,151,22,0,0,3,36,19,5,
-122,122,19,38,3,12,83,102,72,30,96,213,250,214,27,34,94,102,85,36,54,62,53,93,13,0,0,0,0,7,82,82,54,80,13,0,0,0,0,0,81,175,135,6,0,0,21,134,
-154,22,69,70,3,0,0,0,0,0,0,0,3,36,19,0,0,5,190,253,245,72,81,243,248,248,248,243,99,57,173,167,72,0,0,22,60,62,34,0,74,178,187,138,28,4,39,58,
-86,26,0,0,53,171,179,88,50,84,77,235,251,213,35,62,64,22,0,0,0,0,0,0,88,149,22,3,36,19,0,0,5,122,122,15,42,84,102,75,8,0,20,92,102,79,109,247,
-251,251,248,239,107,83,147,179,93,0,0,0,9,82,68,16,32,55,82,13,0,94,248,248,155,155,138,20,0,0,0,18,128,156,22,146,250,248,219,18,0,0,0,3,36,19,0,0,
-0,13,85,152,138,11,0,0,81,243,248,248,249,251,202,55,14,34,2,7,63,70,18,74,178,178,74,28,89,52,38,90,53,2,0,0,0,57,171,179,79,89,188,115,62,207,248,199,
-74,22,0,0,0,0,0,0,88,149,22,3,36,19,0,0,5,122,122,15,42,84,102,75,8,0,20,97,213,250,222,103,102,96,17,5,64,83,147,179,93,0,0,0,9,82,68,16,
-32,55,82,13,0,0,0,0,100,155,138,20,0,0,0,18,128,156,22,69,70,3,0,0,0,0,0,3,36,19,0,0,0,13,85,202,252,242,245,248,248,248,243,81,47,176,176,55,
-14,34,2,7,63,70,18,74,178,178,74,28,89,52,38,90,53,2,0,0,0,57,171,179,79,100,240,251,213,18,0,20,45,61,22,0,0,0,0,0,0,90,148,55,19,0,0,0,
-0,5,122,128,91,102,75,6,0,16,13,18,88,102,101,156,247,249,248,250,242,171,198,148,25,0,0,9,82,71,3,0,13,33,54,82,17,0,94,251,252,99,84,148,22,0,0,0,
-21,130,164,203,250,250,248,90,0,0,3,36,19,0,0,0,13,84,50,5,129,142,11,81,243,248,248,249,251,202,72,14,0,14,19,60,33,22,119,184,178,74,0,6,52,91,90,22,
-9,38,5,4,9,0,58,167,178,170,124,107,209,248,195,70,45,61,22,0,0,0,0,0,0,90,148,55,19,0,0,0,0,5,122,128,91,102,75,6,0,16,13,18,94,213,251,232,
-100,27,14,60,49,148,198,148,25,0,0,9,82,71,3,0,13,33,54,82,17,0,0,110,133,14,84,148,22,0,0,0,21,130,156,22,69,70,3,0,0,0,3,36,19,0,0,0,
-13,84,50,5,209,252,248,248,248,244,90,45,175,176,72,14,0,14,19,60,33,22,119,184,178,74,0,6,52,91,90,22,9,38,5,4,9,0,58,167,184,236,251,223,28,0,3,59,
-4,20,64,22,0,0,0,0,0,3,113,155,22,0,0,0,0,0,19,166,175,80,35,4,0,5,36,9,40,102,102,101,109,243,250,250,252,250,171,78,21,0,9,82,71,2,0,0,
-0,12,34,70,82,22,121,179,248,248,90,88,148,22,0,0,0,38,227,252,208,146,250,248,90,3,36,19,0,0,0,13,84,50,0,0,5,129,177,243,248,248,250,251,202,56,3,34,
-16,7,61,37,0,74,185,198,89,0,10,33,39,90,90,29,14,13,38,37,9,10,23,96,183,203,118,216,250,198,77,71,4,20,64,22,0,0,0,0,0,3,113,155,22,0,0,0,
-0,0,19,166,175,80,35,4,0,5,36,9,40,107,213,251,221,30,61,52,138,179,149,78,21,0,9,82,71,2,0,0,0,12,34,70,82,22,121,135,12,0,0,88,148,22,0,0,
-0,22,130,156,22,69,70,3,0,3,36,19,0,0,0,13,84,50,0,81,243,252,252,248,245,82,66,175,176,56,3,34,16,7,61,37,0,74,185,198,89,0,10,33,39,90,90,29,
-14,13,38,37,9,10,23,107,239,254,225,61,82,19,66,71,0,0,22,64,22,0,0,0,3,36,19,91,147,22,0,0,0,15,86,105,160,125,17,38,6,0,0,45,88,102,102,102,
-79,128,250,252,253,252,235,72,60,26,78,71,2,0,0,0,0,4,42,37,57,166,143,11,94,248,248,90,88,148,22,0,18,198,248,229,164,22,138,250,248,112,19,0,0,0,13,84,
-50,0,0,0,0,85,249,252,248,249,251,202,64,0,0,1,36,65,36,0,74,178,178,90,62,27,29,41,87,24,26,99,153,54,43,40,13,37,62,145,139,193,241,250,206,110,70,1,
-0,0,22,64,22,0,0,0,3,36,19,91,147,22,0,0,0,15,86,105,160,125,17,38,6,0,0,45,88,102,107,210,250,226,71,138,179,138,18,23,60,26,78,71,2,0,0,0,
-0,4,42,37,57,166,143,11,0,0,0,0,88,148,22,0,0,0,22,130,156,22,69,69,8,34,19,0,0,0,13,84,50,0,81,243,248,248,252,252,242,102,174,176,64,0,0,1,
-36,65,36,0,74,178,178,90,62,27,29,41,87,24,26,99,153,54,43,40,13,37,76,230,252,242,184,78,48,102,70,1,0,0,0,22,64,22,0,3,36,19,0,0,91,147,22,0,
-16,86,102,72,11,124,110,16,38,3,22,89,102,85,31,88,102,92,179,253,252,249,248,234,75,101,76,0,0,0,0,0,6,38,12,19,144,161,88,13,0,94,248,248,90,88,150,39,
-198,248,203,38,130,156,22,137,250,248,90,0,0,13,84,50,0,0,0,0,5,217,248,252,252,251,200,57,28,18,0,10,60,37,0,74,178,178,74,0,28,70,52,84,28,0,0,30,
-124,179,59,19,61,65,159,51,26,219,253,237,129,84,78,11,0,0,0,22,64,22,0,3,36,19,0,0,91,147,22,0,16,86,102,72,11,124,110,16,38,3,22,89,102,85,31,93,
-210,251,237,187,138,18,0,0,27,101,76,0,0,0,0,0,6,38,12,19,144,161,88,13,0,0,0,0,0,88,150,22,0,0,0,22,130,156,22,68,86,18,0,0,0,13,84,50,
-0,81,243,248,248,248,243,208,252,250,197,57,28,18,0,10,60,37,0,74,178,178,74,0,28,70,52,84,28,0,0,30,124,179,59,19,61,78,234,249,205,78,175,180,121,84,78,11,
-12,0,0,0,22,63,23,31,19,0,0,0,0,91,147,37,90,102,69,6,0,9,42,1,10,46,89,102,82,37,18,62,106,185,199,182,249,248,248,248,238,114,58,20,0,0,0,4,
-36,14,1,128,141,39,55,82,13,0,94,248,248,90,118,233,249,203,18,0,22,129,157,48,142,250,248,90,13,84,50,0,46,22,0,0,0,27,221,249,253,221,61,0,2,32,24,58,
-37,0,74,178,178,74,0,10,29,53,102,43,0,0,0,0,52,125,169,62,66,172,56,18,207,248,210,200,199,79,63,87,12,0,0,0,22,63,23,31,19,0,0,0,0,91,147,37,
-90,102,69,6,0,9,42,1,10,46,89,102,82,37,18,62,111,235,253,239,42,0,0,9,78,76,58,20,0,0,0,4,36,14,1,128,141,39,55,82,13,0,0,0,0,1,107,156,
-22,0,0,0,22,129,157,48,75,67,3,0,13,84,50,0,112,244,248,248,248,243,81,47,229,254,243,72,2,32,24,58,37,0,74,178,178,74,0,10,29,53,102,43,0,0,0,0,
-52,125,169,62,79,237,249,203,18,0,69,198,199,79,63,87,87,12,0,0,0,22,75,33,0,0,0,0,0,0,103,184,114,93,23,0,0,0,0,0,22,91,102,83,10,8,72,55,
-146,206,185,80,101,248,248,250,250,230,66,64,23,0,0,2,7,2,116,130,8,14,34,55,82,13,0,94,248,248,216,251,234,39,0,0,0,22,137,161,22,138,250,248,143,50,0,0,
-24,64,20,0,0,0,68,243,198,146,135,11,0,11,72,44,0,74,178,178,74,0,10,34,41,83,44,58,23,0,0,2,3,29,118,172,161,56,54,208,248,195,80,121,180,169,22,64,
-87,12,0,0,0,22,75,33,0,0,0,0,0,0,103,184,114,93,23,0,0,0,0,0,22,91,102,83,10,8,72,55,146,208,235,251,221,27,9,82,71,1,20,64,23,0,0,2,
-7,2,116,130,8,14,34,55,82,13,0,0,0,0,4,109,154,22,0,0,0,22,137,161,22,69,66,19,82,50,0,81,244,250,248,248,243,81,46,173,171,200,252,239,68,11,72,44,
-0,74,178,178,74,0,10,34,41,83,44,58,23,0,0,2,3,29,118,178,234,249,211,24,0,3,70,121,180,169,22,64,64,87,12,0,3,30,34,60,22,0,0,0,0,17,88,158,
-175,44,61,19,0,0,0,24,92,102,84,38,13,59,52,152,183,145,102,102,65,114,250,250,248,248,230,64,55,5,0,0,2,117,130,8,0,0,14,33,55,82,13,0,105,248,248,219,
-121,156,22,0,3,30,34,128,156,22,138,251,249,90,0,0,0,23,64,18,0,46,175,178,54,2,130,140,21,59,36,30,87,178,178,74,0,10,34,40,88,28,0,23,55,5,0,0,
-0,0,72,193,170,62,210,249,196,78,71,3,71,60,1,0,64,87,12,0,3,30,34,60,22,0,0,0,0,17,88,158,175,44,61,19,0,0,0,24,92,102,84,38,13,59,52,152,
-183,145,107,208,250,223,98,71,2,0,0,23,55,5,0,0,2,117,130,8,0,0,14,33,55,82,13,0,0,0,0,1,111,156,22,0,3,30,34,128,156,22,69,102,48,0,81,243,
-248,249,250,244,81,46,175,176,54,2,191,252,240,111,36,30,87,178,178,74,0,10,34,40,88,28,0,23,55,5,0,0,0,0,84,241,252,213,31,36,11,68,71,3,71,60,1,0,
-0,64,86,16,31,19,0,22,64,22,0,0,18,89,102,69,96,146,42,64,18,0,12,89,102,81,9,17,73,53,138,180,154,30,16,88,102,96,144,248,248,248,248,230,45,0,0,3,
-118,128,8,0,0,0,0,13,33,55,82,30,198,248,248,248,92,112,155,23,36,19,0,22,127,161,88,146,250,248,90,0,0,0,24,56,57,175,176,55,0,0,5,132,158,40,0,76,
-189,184,74,0,10,34,42,88,28,0,0,0,4,0,0,0,0,55,158,69,128,238,249,197,97,71,2,0,0,0,0,0,0,64,86,16,31,19,0,22,64,22,0,0,18,89,102,69,
-96,146,42,64,18,0,12,89,102,81,9,17,73,53,138,180,154,30,16,94,208,251,230,32,0,0,0,0,4,0,0,3,118,128,8,0,0,0,0,13,33,55,82,13,0,0,0,0,
-3,112,155,23,36,19,0,22,127,161,88,83,64,83,243,248,248,248,244,119,57,175,176,55,0,0,5,193,253,241,68,76,189,184,74,0,10,34,42,88,28,0,0,0,4,0,0,0,
-0,69,233,250,227,175,55,14,88,71,2,0,0,0,0,0,0,0,63,98,26,0,0,0,22,64,18,17,89,102,69,4,0,93,145,43,62,28,76,102,80,9,8,59,58,153,181,138,
-21,36,10,26,102,102,67,110,248,248,248,248,230,41,4,119,127,7,0,0,0,0,0,0,13,33,69,216,248,203,105,248,248,92,110,167,36,0,0,0,31,155,173,24,137,250,248,90,
-0,0,0,60,176,176,45,0,0,0,9,66,166,136,78,178,179,100,16,8,33,42,88,28,0,0,0,0,0,0,0,0,55,159,50,18,213,251,235,113,74,35,5,0,0,0,0,0,
-0,0,63,98,26,0,0,0,22,64,18,17,89,102,69,4,0,93,145,43,62,28,76,102,80,9,8,59,58,153,181,138,21,36,10,26,107,208,250,221,31,0,0,0,0,0,4,119,
-127,7,0,0,0,0,0,0,13,33,55,82,13,0,0,0,0,2,110,167,36,0,0,0,31,155,173,24,128,246,248,248,248,243,81,60,176,176,45,0,0,0,9,66,210,252,244,199,
-179,100,16,8,33,42,88,28,0,0,0,0,0,0,0,0,69,234,249,203,46,121,171,104,74,35,5,0,0,0,0,0,0,2,30,70,84,12,0,0,0,18,67,91,102,68,4,0,
-0,0,93,145,42,87,102,78,9,8,62,52,138,183,156,24,0,1,35,80,69,86,102,68,115,248,248,248,248,231,142,126,6,0,0,0,0,0,0,8,0,30,206,250,220,30,0,94,
-248,248,112,117,154,22,0,13,80,61,125,156,22,138,250,248,90,0,46,174,176,82,12,0,0,10,58,81,102,182,192,179,74,2,38,42,40,88,28,0,0,0,0,0,0,0,0,55,
-159,50,18,207,248,201,138,189,56,12,38,6,0,0,0,0,0,2,30,70,84,12,0,0,0,18,67,91,102,68,4,0,0,0,93,145,42,87,102,78,9,8,62,52,138,183,156,24,
-0,1,35,80,69,91,208,250,221,31,0,0,0,4,121,126,6,0,0,0,0,0,0,8,0,13,33,55,82,13,0,0,0,2,34,117,154,22,0,13,80,61,125,188,244,250,250,248,
-243,81,46,174,176,82,12,0,0,10,58,81,102,218,253,250,122,2,38,42,40,88,28,0,0,0,0,0,0,0,0,69,234,249,203,18,0,30,131,189,56,12,38,6,0,0,0,0,
-3,36,17,0,64,87,12,0,0,18,92,102,75,4,0,0,0,0,0,93,145,45,85,24,6,62,52,138,179,138,31,38,3,7,79,86,14,14,89,102,68,115,248,248,248,252,240,47,
-0,0,0,0,0,0,0,29,40,198,248,210,69,82,13,0,96,249,248,91,111,154,32,84,50,0,21,130,157,24,138,250,248,120,175,176,45,24,59,13,8,62,35,12,128,204,205,105,
-1,8,32,58,92,25,0,0,0,0,0,0,0,0,55,159,50,18,207,248,195,75,76,118,172,57,14,38,6,0,0,0,3,36,17,0,64,87,12,0,0,18,92,102,75,4,0,0,
-0,0,0,93,145,45,85,24,6,62,52,138,179,138,31,38,3,7,79,86,14,14,93,208,250,221,31,0,6,122,124,6,0,0,0,0,0,0,0,29,24,0,13,33,55,82,13,0,
-3,36,18,1,111,154,32,84,50,0,95,249,252,249,250,246,83,45,175,176,45,24,59,13,8,62,35,12,128,204,231,251,239,69,32,58,92,25,0,0,0,0,0,0,0,0,69,234,
-249,203,18,0,3,65,76,118,172,57,14,38,6,0,0,0,36,19,0,0,0,64,87,10,18,90,102,74,49,3,0,0,0,0,0,0,95,145,39,57,60,50,138,179,138,18,0,12,
-36,80,68,8,33,13,15,89,102,69,120,248,252,252,248,221,41,0,0,0,0,0,0,19,205,249,203,42,112,71,82,15,33,106,248,248,90,115,185,66,0,0,0,23,124,149,25,134,
-250,253,204,47,0,0,25,59,60,34,0,74,181,202,146,89,46,30,40,84,52,13,0,0,0,0,0,0,0,53,159,50,18,207,248,195,80,70,1,28,125,173,58,14,38,6,0,3,
-36,19,0,0,0,64,87,10,18,90,102,74,49,3,0,0,0,0,0,0,95,145,39,57,60,50,138,179,138,18,0,12,36,80,68,8,33,13,15,93,208,250,221,40,122,116,6,0,
-0,0,0,0,0,0,0,1,33,24,0,25,112,71,82,15,33,18,0,0,0,115,185,66,0,81,243,249,251,252,244,125,83,173,176,47,0,0,25,59,60,34,0,74,181,202,146,174,
-249,241,93,84,52,13,0,0,0,0,0,0,0,67,234,249,203,18,0,3,70,70,1,28,125,173,58,14,38,6,0,3,19,0,0,0,0,0,60,83,88,102,66,4,2,0,0,0,
-0,0,0,0,0,95,147,76,81,143,179,138,18,0,0,7,83,88,7,0,3,36,13,15,89,102,73,187,252,248,248,248,221,36,0,0,0,0,18,198,248,210,40,93,183,150,66,88,
-24,0,94,248,248,143,134,154,22,0,0,0,4,88,145,71,203,253,249,90,0,0,7,65,70,12,74,178,178,81,78,102,94,63,83,26,0,36,19,0,0,0,0,0,44,148,48,18,
-207,248,195,80,71,3,0,0,29,124,173,58,14,36,9,34,19,0,0,0,0,0,60,83,88,102,66,4,2,0,0,0,0,0,0,0,0,95,147,76,81,143,179,138,18,0,0,7,
-83,88,7,0,3,36,13,15,92,208,250,237,141,1,0,0,0,0,0,0,0,0,0,0,1,33,24,93,183,150,66,88,24,0,0,0,12,82,134,154,96,243,248,248,248,247,180,71,
-172,176,48,0,0,0,7,65,70,12,74,178,178,81,78,102,176,250,244,82,0,36,19,0,0,0,0,0,59,231,249,203,18,0,3,70,71,3,0,0,29,124,173,58,14,36,9,34,
-0,0,0,0,0,0,22,101,102,67,0,0,0,0,0,0,0,0,0,0,0,10,128,150,151,197,144,18,0,0,9,82,68,16,36,6,0,3,36,13,15,92,176,160,131,248,248,248,
-248,221,31,0,0,18,198,248,203,19,33,46,140,183,159,65,75,13,0,102,250,249,91,111,156,22,0,0,0,0,113,209,173,145,250,248,90,10,58,33,28,118,182,178,74,0,18,88,
-102,102,58,0,0,3,36,19,0,0,0,53,148,40,18,207,248,195,80,70,3,0,0,0,0,29,118,168,59,14,58,21,0,0,0,0,0,0,22,101,102,67,0,0,0,0,0,0,
-0,0,0,0,0,10,128,150,151,197,144,18,0,0,9,82,68,16,36,6,0,3,36,13,15,95,230,253,222,36,0,0,0,0,0,0,0,0,0,0,0,1,33,46,140,183,159,65,
-75,13,0,13,84,49,2,157,250,249,248,248,243,81,113,209,173,81,64,2,0,10,58,33,28,118,182,178,74,0,18,88,102,180,250,239,63,3,36,19,0,0,0,68,231,249,203,18,
-0,3,70,70,3,0,0,0,0,29,118,168,59,14,58,21,6,0,0,0,0,22,91,102,87,80,11,0,0,0,0,5,1,0,0,0,10,62,48,162,179,152,73,12,0,9,82,71,
-3,0,14,38,7,0,3,36,18,131,170,106,70,128,248,248,248,248,221,27,18,198,248,203,18,0,1,32,41,153,187,147,62,78,26,80,126,248,248,92,112,156,22,0,0,45,169,190,
-154,23,138,250,248,128,35,0,74,188,197,82,0,10,29,51,102,102,88,44,4,0,3,36,19,0,55,159,48,18,207,248,195,80,69,1,0,0,0,0,0,0,9,73,168,82,28,34,
-6,0,0,0,0,22,91,102,87,80,11,0,0,0,0,5,1,0,0,0,10,62,48,162,179,152,73,12,0,9,82,71,3,0,14,38,7,0,3,36,18,131,171,206,250,222,36,0,
-0,0,0,0,0,0,0,0,0,0,1,32,41,153,187,147,62,78,26,80,50,0,81,243,251,252,249,243,81,45,169,190,154,23,69,67,15,59,35,0,74,188,197,82,0,10,29,51,
-102,102,173,249,239,63,3,36,19,0,69,234,249,203,18,0,3,70,69,1,0,0,0,0,0,0,9,73,168,82,28,34,38,6,0,0,23,92,102,62,7,62,87,12,0,0,19,32,
-2,0,0,10,62,52,138,179,159,134,46,59,20,79,71,2,0,0,0,14,38,6,0,8,142,131,20,88,102,70,132,248,248,248,248,228,206,248,203,18,0,0,0,1,54,54,142,182,
-144,69,102,54,0,94,248,248,92,112,156,20,43,175,175,62,85,148,23,138,251,249,90,53,179,178,97,60,20,30,38,85,36,76,102,90,44,2,0,3,36,70,159,50,18,207,248,196,
-80,68,3,41,14,0,0,0,0,0,0,1,90,172,60,15,38,6,0,0,23,92,102,62,7,62,87,12,0,0,19,32,2,0,0,10,62,52,138,179,159,134,46,59,20,79,71,2,
-0,0,0,14,38,6,0,8,142,131,20,91,205,250,222,36,0,0,2,43,14,0,0,0,0,0,0,1,54,54,142,182,144,69,102,54,0,81,243,248,248,251,250,95,43,175,175,62,
-85,148,23,70,96,36,0,53,179,178,97,60,20,30,38,85,36,76,102,177,249,239,63,3,36,83,234,249,203,18,0,6,70,68,3,41,14,0,0,0,0,0,0,1,90,172,60,15,
-14,38,3,21,96,102,63,2,0,0,64,87,11,15,36,4,0,0,10,62,52,138,179,139,25,92,143,51,99,72,1,0,0,0,0,0,14,38,11,123,126,41,13,15,88,102,70,138,
-248,248,249,249,248,208,18,0,0,0,2,34,20,29,42,145,186,174,84,76,12,0,94,248,248,92,105,160,174,173,62,0,0,88,152,74,146,250,248,100,124,79,0,37,68,44,85,30,
-0,10,79,102,90,43,2,0,57,173,65,18,207,248,194,57,68,2,47,51,6,0,0,0,0,0,2,34,20,69,168,60,14,38,3,21,96,102,63,2,0,0,64,87,11,15,36,4,
-0,0,10,62,52,138,179,139,25,92,143,51,99,72,1,0,0,0,0,0,14,38,11,123,126,41,13,15,91,205,250,222,41,3,50,50,6,0,0,0,0,0,2,34,20,29,42,145,
-186,174,84,76,89,243,248,248,248,243,152,160,174,173,62,0,0,88,152,74,82,66,2,15,124,79,0,37,68,44,85,30,0,10,79,102,177,249,239,58,71,237,249,203,18,0,0,46,
-68,2,47,51,6,0,0,0,0,0,2,34,20,69,168,60,61,14,35,22,87,65,2,0,0,0,0,62,88,40,0,0,0,10,62,52,138,179,138,22,36,7,102,176,93,56,10,0,
-0,0,0,0,0,19,143,127,6,3,36,9,16,88,102,70,140,249,249,248,248,219,27,0,0,2,35,21,0,1,30,48,178,195,142,63,82,13,0,94,248,248,118,193,209,76,0,0,
-0,10,129,163,25,138,250,248,111,8,8,29,57,102,38,0,0,0,10,79,102,90,44,57,159,52,51,210,248,194,14,6,3,48,50,2,0,0,0,0,0,2,35,21,0,1,71,167,
-61,14,35,22,87,65,2,0,0,0,0,62,88,40,0,0,0,10,62,52,138,179,138,22,36,7,102,176,93,56,10,0,0,0,0,0,0,19,143,127,6,3,36,9,16,91,205,250,
-223,81,50,2,0,0,0,0,0,2,35,21,0,1,30,48,178,195,142,124,247,248,248,248,243,81,43,193,209,76,0,0,0,10,129,163,25,69,69,4,33,8,8,29,57,102,38,0,
-0,0,10,79,102,177,249,244,238,249,210,32,0,0,0,6,3,48,50,2,0,0,0,0,0,2,35,21,0,1,71,167,168,62,14,35,15,2,0,0,0,0,0,15,78,84,11,0,
-10,62,52,138,179,138,18,0,8,37,81,140,144,50,58,4,0,0,0,0,5,123,131,43,6,0,2,7,0,16,86,102,100,232,248,248,248,248,212,27,2,35,20,0,0,0,12,86,
-74,147,183,143,63,82,13,0,94,249,253,200,133,151,22,0,10,62,37,88,148,24,138,250,248,115,36,37,83,56,51,4,0,0,0,10,79,102,126,175,52,18,207,248,194,14,0,1,
-49,50,2,0,0,0,0,0,2,35,20,0,0,0,1,71,168,62,14,35,15,2,0,0,0,0,0,15,78,84,11,0,10,62,52,138,179,138,18,0,8,37,81,140,144,50,58,4,
-0,0,0,0,5,123,131,43,6,0,2,7,0,16,90,202,250,227,42,0,0,0,0,0,2,35,20,0,0,0,12,86,74,147,205,250,250,250,248,243,81,46,174,170,133,151,22,0,
-10,62,37,88,148,24,70,68,9,38,36,37,83,56,51,4,0,0,0,10,79,102,198,252,249,214,20,7,0,0,0,1,49,50,2,0,0,0,0,0,2,35,20,0,0,0,1,71,
-70,167,62,14,36,5,0,0,0,0,19,34,4,63,84,23,58,52,138,179,138,18,0,0,8,81,88,11,99,142,31,2,0,0,0,5,123,124,6,15,38,6,0,0,0,0,18,109,
-221,250,229,248,248,248,248,207,59,20,0,0,0,13,84,48,28,45,148,183,141,63,82,13,44,204,253,250,93,110,154,30,62,37,0,0,88,148,24,137,250,249,126,88,28,0,16,2,
-0,0,0,0,10,117,197,123,58,207,248,194,14,0,2,50,50,2,0,0,0,0,0,2,36,20,0,0,0,0,0,1,70,167,62,14,36,5,0,0,0,0,19,34,4,63,84,23,
-58,52,138,179,138,18,0,0,8,81,88,11,99,142,31,2,0,0,0,5,123,124,6,15,38,6,0,0,0,0,18,101,202,250,222,41,0,0,0,2,36,20,0,0,0,13,84,48,
-28,111,250,253,252,250,247,90,44,175,176,60,4,110,154,30,62,37,0,0,88,148,24,68,69,36,56,88,28,0,16,2,0,0,0,0,10,127,242,251,249,240,58,0,0,0,2,50,
-50,2,0,0,0,0,0,2,36,20,0,0,0,0,0,1,1,70,168,63,14,38,6,0,0,19,36,3,0,0,64,102,58,138,179,138,18,0,0,9,82,69,13,36,10,99,141,17,
-0,0,5,123,124,6,0,0,15,38,6,0,0,2,60,210,250,224,84,151,248,248,248,249,211,22,0,0,13,84,48,0,0,33,46,150,183,140,57,89,174,176,133,248,248,91,112,175,
-55,0,0,0,0,88,148,32,146,250,250,125,7,0,0,0,0,0,0,0,55,163,113,113,224,249,194,14,0,2,50,50,2,0,0,0,0,0,3,36,20,0,0,0,0,0,0,0,
-1,70,168,63,14,38,6,0,0,19,36,3,0,0,64,102,58,138,179,138,18,0,0,9,82,69,13,36,10,99,141,17,0,0,5,123,124,6,0,0,15,38,6,0,0,2,45,54,
-88,202,250,227,41,0,3,36,20,0,0,0,13,84,48,0,81,245,249,252,253,250,120,89,174,176,62,0,0,1,112,175,55,0,0,0,0,88,148,32,83,77,80,54,7,0,0,0,
-0,0,0,0,69,235,251,224,183,249,239,58,0,2,50,50,2,0,0,0,0,0,3,36,20,0,0,0,0,0,0,0,0,1,69,166,63,14,38,4,17,36,3,0,0,9,54,82,
-174,183,138,18,0,0,8,82,71,3,0,10,39,11,100,142,14,1,123,124,6,0,0,0,0,15,38,4,1,64,209,248,206,98,102,72,151,248,249,248,248,207,18,13,84,56,9,0,
-0,1,33,47,151,182,151,170,174,66,0,94,248,248,129,112,148,22,0,0,0,0,94,161,58,158,250,248,114,11,0,0,0,0,0,55,159,50,27,222,251,216,55,1,1,50,50,2,
-0,0,0,0,0,3,35,19,0,0,0,0,0,6,13,0,0,1,69,166,63,14,38,4,17,36,3,0,0,9,54,82,174,183,138,18,0,0,8,82,71,3,0,10,39,11,100,142,
-14,1,123,124,6,0,0,0,0,15,38,4,1,50,50,0,15,90,202,250,226,41,35,19,0,0,0,13,84,56,9,81,243,248,249,249,250,205,151,170,174,66,0,0,0,9,60,112,
-148,22,0,0,0,0,94,161,58,102,75,8,36,11,0,0,0,0,0,69,234,249,205,91,102,177,249,239,55,50,50,2,0,0,0,0,0,3,35,19,0,0,0,0,0,6,13,0,
-0,0,1,69,166,65,11,47,36,2,0,0,10,62,52,138,194,177,30,0,0,9,81,71,2,0,0,0,10,39,11,98,130,119,119,6,0,0,0,0,0,0,14,33,63,209,248,203,
-18,16,86,102,72,168,248,248,248,248,209,96,48,9,60,20,0,0,1,32,42,162,209,201,87,75,12,0,101,250,249,90,88,148,22,0,0,10,30,113,184,50,135,250,248,114,11,0,
-0,0,55,159,50,18,207,248,213,110,90,41,45,49,2,0,0,0,0,0,3,36,18,0,0,0,0,0,0,14,62,20,0,0,1,69,166,65,11,47,36,2,0,0,10,62,52,138,
-194,177,30,0,0,9,81,71,2,0,0,0,10,39,11,98,130,119,119,6,0,0,0,0,0,0,14,33,48,49,2,0,0,16,89,199,250,230,54,0,0,0,13,84,48,9,122,244,
-248,248,248,245,111,162,209,201,87,75,12,0,11,62,37,0,88,148,22,0,0,10,30,113,184,50,64,67,9,37,11,0,0,0,69,234,249,203,18,10,79,102,181,249,242,92,2,0,
-0,0,0,0,3,36,18,0,0,0,0,0,0,14,62,20,20,0,0,1,69,165,75,41,36,5,0,7,60,52,138,179,138,65,84,11,7,82,71,2,0,0,0,0,0,9,39,12,
-159,179,20,0,0,0,0,0,0,0,0,68,212,248,203,18,0,0,14,85,102,78,160,248,248,248,250,217,18,0,22,60,16,0,0,0,61,175,207,197,131,59,81,20,56,118,248,248,
-90,88,148,22,10,33,38,88,108,148,24,138,250,248,114,11,0,55,159,50,18,207,248,194,24,78,102,96,65,3,0,0,0,0,0,3,36,19,0,0,0,0,0,0,0,0,23,64,
-20,0,0,1,69,165,75,41,36,5,0,7,60,52,138,179,138,65,84,11,7,82,71,2,0,0,0,0,0,9,39,12,159,179,20,0,0,0,0,0,0,0,0,54,65,6,0,0,
-0,0,14,88,199,250,226,41,0,13,84,50,0,81,244,250,248,248,243,81,61,175,207,197,131,59,81,20,56,37,0,0,0,88,148,22,10,33,38,88,108,148,24,70,67,9,37,11,
-0,69,234,249,203,18,0,0,10,78,102,183,250,239,54,0,0,0,0,3,36,19,0,0,0,0,0,0,0,0,23,64,64,19,0,0,0,76,176,66,13,38,6,4,38,138,179,138,
-18,0,48,79,78,68,2,0,0,0,0,0,0,0,14,141,120,96,137,15,0,0,0,0,0,2,64,209,248,210,21,0,0,0,0,42,88,102,72,160,248,250,249,248,203,18,0,19,
-59,18,0,45,174,172,95,154,183,134,58,87,33,0,94,248,248,90,88,152,53,38,88,30,0,88,148,24,138,250,248,114,64,159,50,18,207,248,194,14,0,12,93,102,88,42,2,0,
-0,0,3,36,19,0,0,0,0,0,0,0,90,122,0,23,64,19,0,0,0,76,176,66,13,38,6,4,38,138,179,138,18,0,48,79,78,68,2,0,0,0,0,0,0,0,14,141,
-120,96,137,15,0,0,0,0,0,2,50,48,16,35,4,0,0,0,0,42,91,199,250,230,50,84,50,0,81,243,248,248,250,244,81,45,174,172,95,154,183,134,58,87,33,0,0,0,
-0,0,88,152,53,38,88,30,0,88,148,24,70,67,9,37,77,234,249,203,18,0,0,0,0,12,93,102,180,249,239,54,0,0,3,36,19,0,0,0,0,0,0,0,0,0,0,23,
-24,64,18,0,18,33,65,166,66,14,38,23,138,179,138,18,0,0,6,94,102,15,0,0,0,0,0,0,0,5,123,129,42,11,102,140,15,0,0,0,2,64,209,248,203,51,74,6,
-0,3,36,15,14,86,102,77,188,249,248,248,248,198,18,0,23,56,57,175,176,60,27,52,157,183,132,58,80,13,0,94,248,248,96,110,164,102,30,0,0,0,88,148,24,138,250,249,
-201,59,18,207,248,194,14,0,2,46,51,77,102,91,43,2,0,3,36,19,0,0,0,0,0,0,0,90,248,248,45,0,24,64,18,0,18,33,65,166,66,14,38,23,138,179,138,18,
-0,0,6,94,102,15,0,0,0,0,0,0,0,5,123,129,42,11,102,140,15,0,0,0,2,49,50,2,0,35,74,6,0,3,36,15,14,89,199,250,238,81,0,81,243,248,248,248,
-244,119,57,175,176,60,27,52,157,183,132,58,80,13,0,0,0,0,10,110,164,102,30,0,0,0,88,148,24,70,68,75,237,249,203,18,0,0,0,0,2,46,51,77,102,181,249,239,
-54,3,36,19,0,0,0,0,0,0,0,0,0,0,0,0,0,25,60,31,32,2,0,67,166,62,29,156,181,138,18,0,0,9,82,66,48,82,13,0,0,0,0,0,5,123,124,6,
-9,39,11,102,140,15,0,2,66,209,248,203,18,6,71,76,10,33,19,0,0,12,84,102,91,164,248,248,248,248,194,18,0,60,176,176,60,0,0,33,53,157,183,131,58,82,13,0,
-94,248,249,114,146,161,22,0,0,0,0,88,148,21,162,253,249,124,209,248,194,14,0,2,50,50,25,121,88,102,91,42,5,34,19,0,0,0,0,0,0,0,90,248,248,94,0,0,
-0,25,60,31,32,2,0,67,166,62,29,156,181,138,18,0,0,9,82,66,48,82,13,0,0,0,0,0,5,123,124,6,9,39,11,102,140,15,0,2,52,50,1,0,0,6,71,76,
-10,33,19,0,0,12,87,197,250,230,108,243,248,248,248,243,81,60,176,176,60,0,0,33,53,157,183,131,58,82,13,0,0,10,34,38,146,161,22,0,0,0,0,88,148,21,116,240,
-249,211,28,0,0,0,0,2,50,50,25,121,88,102,181,249,239,81,19,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,36,75,18,0,0,1,62,154,150,183,156,24,0,0,
-9,82,71,2,0,50,84,13,0,0,0,5,123,124,6,0,0,9,39,12,102,140,17,61,216,250,203,18,0,0,2,70,90,19,0,0,0,10,80,92,102,77,169,248,248,248,248,194,
-56,174,176,87,15,0,0,1,33,54,159,183,130,57,82,12,7,115,249,250,110,88,148,22,0,0,0,0,81,152,150,158,250,248,249,197,14,0,2,50,50,24,148,91,13,79,102,90,
-59,17,0,0,0,0,0,0,0,90,248,248,94,0,0,0,0,0,36,75,18,0,0,1,62,154,150,183,156,24,0,0,9,82,71,2,0,50,84,13,0,0,0,5,123,124,6,0,
-0,9,39,12,102,140,17,46,82,67,2,0,0,0,2,70,90,19,0,0,0,10,80,95,197,250,248,248,248,248,243,81,45,174,176,87,15,0,0,1,33,54,159,183,130,57,82,12,
-7,34,38,88,30,88,148,22,0,0,0,0,81,160,231,251,217,26,37,12,0,0,2,50,50,24,148,91,13,79,102,183,250,235,54,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,18,31,27,62,16,0,0,14,156,186,152,26,38,4,8,82,71,2,0,0,0,51,84,13,0,5,123,124,6,0,0,0,0,9,39,10,103,168,212,248,217,83,3,0,0,2,32,
-76,74,5,0,13,84,47,15,85,102,77,169,248,248,248,249,235,179,59,24,62,16,0,0,1,33,56,160,183,128,56,83,40,36,150,249,248,90,88,148,22,0,0,0,48,174,151,35,
-232,250,248,122,10,1,50,50,24,148,88,0,0,10,78,102,92,40,2,0,0,0,0,0,90,248,248,94,0,0,0,0,0,18,31,27,62,16,0,0,14,156,186,152,26,38,4,8,
-82,71,2,0,0,0,51,84,13,0,5,123,124,6,0,0,0,0,9,39,10,103,162,61,9,68,70,3,0,0,2,32,76,74,5,0,13,84,47,15,141,250,250,248,248,243,81,42,
-172,176,59,24,62,16,0,0,1,33,56,160,183,128,56,83,40,36,88,30,0,0,88,148,22,0,0,0,63,237,252,207,83,68,10,38,10,1,50,50,24,148,88,0,0,10,78,102,
-184,249,234,54,0,0,0,0,0,0,0,0,0,0,0,0,19,36,3,0,27,64,16,18,138,179,156,154,64,12,37,80,70,2,0,0,6,32,0,49,84,17,123,124,6,0,0,0,
-0,0,0,8,34,66,227,252,206,21,70,70,2,1,36,17,1,70,73,21,82,50,0,0,14,84,102,78,173,248,249,253,253,209,9,0,27,64,16,0,0,1,33,58,161,182,131,76,
-86,83,28,94,248,249,93,88,148,22,0,55,157,46,93,235,249,221,248,248,112,52,48,24,148,88,0,0,0,0,38,83,102,91,42,2,0,0,0,90,248,248,94,0,0,0,0,0,
-19,36,3,0,27,64,16,18,138,179,156,154,64,12,37,80,70,2,0,0,6,32,0,49,84,17,123,124,6,0,0,0,0,0,0,8,34,52,132,140,15,3,70,70,2,1,36,17,
-1,70,73,21,82,50,0,81,244,250,251,250,248,111,46,172,173,62,0,0,27,64,16,0,0,1,33,58,161,182,131,76,86,83,28,0,6,33,4,88,148,22,0,69,233,249,219,156,
-26,46,4,6,34,52,48,24,148,88,0,0,0,0,38,83,102,184,249,234,54,0,0,0,0,0,0,0,0,0,0,0,36,3,0,0,0,28,77,146,179,138,15,61,165,74,82,88,
-6,0,0,6,38,15,0,0,55,167,130,6,0,0,0,0,0,0,0,1,64,212,248,224,147,14,3,69,68,33,18,0,0,1,70,102,49,0,0,0,0,14,84,102,75,191,253,253,
-250,248,194,9,0,28,63,18,0,0,1,33,57,166,191,97,95,86,8,3,118,248,248,90,88,136,69,151,50,18,207,250,229,35,94,248,249,132,32,148,88,0,0,0,3,36,16,9,
-79,102,91,42,2,0,90,248,248,94,0,0,0,0,0,18,36,3,0,0,0,28,77,146,179,138,15,61,165,74,82,88,6,0,0,6,38,15,0,0,55,167,130,6,0,0,0,0,
-0,0,0,1,49,65,11,105,139,14,3,69,68,33,18,0,0,1,70,102,49,0,81,243,248,248,250,250,250,235,189,174,59,0,0,0,0,28,63,18,0,0,1,33,57,166,191,97,
-95,86,8,3,38,15,0,0,88,136,82,232,249,203,18,88,148,22,0,1,49,65,32,148,88,0,0,0,3,36,16,9,79,102,184,249,234,54,0,0,0,0,0,0,0,0,0,18,
-3,0,0,0,0,18,151,188,138,18,0,1,63,186,117,15,33,4,4,35,14,0,0,5,123,149,82,11,0,0,0,0,0,0,3,59,209,248,210,27,105,138,14,3,81,68,2,0,
-0,10,70,81,63,5,0,0,0,0,13,80,99,175,230,249,248,248,248,190,9,0,29,32,0,0,0,1,33,80,103,85,50,49,77,40,12,94,248,248,90,114,179,65,18,207,248,194,
-98,148,24,122,249,249,195,94,0,0,0,2,33,18,0,0,9,75,96,85,39,92,248,248,94,0,0,0,0,0,15,35,3,0,0,0,0,18,151,188,138,18,0,1,63,186,117,15,
-33,4,4,35,14,0,0,5,123,149,82,11,0,0,0,0,0,0,3,44,47,10,35,9,105,138,14,3,81,68,2,0,0,10,70,81,63,84,243,248,248,248,244,136,196,253,247,93,
-0,0,0,0,0,0,29,32,0,0,0,1,33,80,103,85,50,49,77,40,12,0,0,0,0,124,238,250,203,18,0,0,88,148,24,44,47,31,163,94,0,0,0,2,33,18,0,0,
-9,75,96,181,249,234,54,0,0,0,0,0,0,0,15,35,0,0,0,0,18,138,179,138,18,0,0,9,77,100,164,71,10,36,36,10,0,0,5,123,124,6,43,81,12,0,0,0,
-0,3,63,208,248,203,24,37,11,105,140,46,17,60,67,0,11,81,43,2,62,74,5,0,0,0,0,51,173,173,95,178,248,248,248,248,185,9,0,0,0,0,0,9,30,52,90,22,
-7,35,62,79,12,0,94,248,249,183,112,146,211,248,194,14,0,90,168,60,108,252,250,114,11,0,3,35,16,0,0,0,0,9,74,96,145,249,248,94,0,0,0,0,0,18,34,2,
-0,0,0,0,18,138,179,138,18,0,0,9,77,100,164,71,10,36,36,10,0,0,5,123,124,6,43,81,12,0,0,0,0,3,48,44,3,0,6,37,11,105,140,46,17,60,67,0,
-11,81,43,2,124,246,248,248,248,243,81,51,173,224,250,231,50,0,0,0,0,0,0,0,0,0,0,9,30,52,90,22,7,35,62,79,12,0,0,0,68,230,251,231,39,0,0,0,
-0,90,168,60,21,148,92,37,11,0,3,35,16,0,0,0,0,9,74,96,184,249,234,54,0,0,0,0,0,18,34,2,0,0,0,18,138,179,138,18,0,0,9,82,69,6,62,164,
-73,42,43,4,0,5,123,124,6,0,0,49,84,12,0,0,1,62,209,248,203,18,0,6,38,14,125,147,13,3,66,69,77,48,0,0,3,70,78,8,0,0,46,175,176,98,102,80,
-182,248,248,248,130,0,0,0,0,0,10,34,38,84,52,17,4,42,40,54,82,13,0,129,252,249,102,224,252,200,14,0,1,47,117,141,140,147,248,248,114,14,33,19,0,0,0,0,
-0,0,10,141,251,250,122,2,0,0,0,0,19,36,3,0,0,0,0,18,138,179,138,18,0,0,9,82,69,6,62,164,73,42,43,4,0,5,123,124,6,0,0,49,84,12,0,0,
-1,47,50,2,0,0,0,6,38,14,125,147,13,3,66,69,77,48,0,81,243,250,250,248,243,81,46,175,176,98,197,250,230,50,0,0,0,0,0,0,0,0,10,34,38,84,52,17,
-4,42,40,54,82,13,0,69,234,249,203,100,148,22,0,0,1,47,117,141,140,83,0,8,37,14,33,19,0,0,0,0,0,0,10,79,102,187,249,230,54,0,0,0,19,36,3,0,
-0,0,20,138,179,138,18,0,0,9,82,71,3,0,0,64,174,78,12,38,11,123,124,6,0,0,0,0,58,86,12,0,19,203,248,203,18,0,24,3,6,58,26,105,140,25,15,102,
-87,0,0,0,0,2,70,64,3,45,175,176,60,17,82,96,77,187,248,126,0,0,0,0,0,10,34,38,88,30,0,33,49,9,10,33,55,82,65,159,126,248,248,248,217,155,22,0,
-1,22,22,168,168,18,94,248,248,128,26,0,0,0,0,0,0,0,90,248,250,158,90,43,2,0,0,19,36,3,0,0,0,0,20,138,179,138,18,0,0,9,82,71,3,0,0,64,
-174,78,12,38,11,123,124,6,0,0,0,0,58,86,12,0,1,22,4,0,0,0,24,3,6,58,26,105,140,25,15,102,87,0,81,243,248,248,250,246,83,45,175,176,60,17,82,192,
-250,231,50,0,0,0,0,0,0,10,34,38,88,30,0,33,49,9,10,33,55,82,79,234,249,203,18,0,95,149,22,0,1,22,22,168,168,18,0,0,8,58,26,0,0,0,0,0,
-0,0,0,10,79,102,187,249,230,54,0,19,36,3,0,0,52,14,131,179,138,18,0,0,9,82,71,2,0,0,6,34,69,163,69,18,141,127,6,0,0,0,0,0,11,78,84,29,
-198,248,203,18,0,1,62,69,31,21,34,12,103,156,97,48,64,69,3,0,0,0,0,16,66,174,176,62,0,0,11,78,96,83,95,0,0,0,0,0,10,34,38,88,30,0,6,34,
-39,21,0,13,33,98,190,61,18,223,248,249,109,111,149,23,0,23,147,81,81,147,22,96,249,249,112,12,0,0,0,0,0,90,248,248,100,79,102,90,43,1,18,36,3,0,0,11,
-52,14,131,179,138,18,0,0,9,82,71,2,0,0,6,34,69,163,69,18,141,127,6,0,0,0,0,0,11,78,84,12,0,0,0,0,0,1,62,69,31,21,34,12,103,156,97,48,
-64,128,243,248,248,248,243,92,66,174,176,62,0,0,11,78,192,250,231,50,0,0,0,0,10,34,38,88,30,0,6,34,39,21,0,13,33,109,241,249,203,18,16,40,17,111,149,23,
-0,23,147,81,81,147,22,3,34,23,34,12,0,0,0,0,0,0,0,0,10,79,102,187,249,230,68,36,3,0,0,11,38,3,64,131,18,0,0,9,82,71,2,0,0,6,38,13,
-0,61,151,140,122,42,6,0,0,0,0,0,0,13,90,217,248,203,18,0,0,0,5,86,76,0,7,34,24,142,169,22,2,70,70,3,0,0,0,43,175,176,63,0,0,0,7,59,
-83,102,76,8,0,0,0,10,34,38,88,30,0,6,38,13,0,33,24,0,65,171,94,94,209,248,228,249,248,102,108,152,54,141,88,0,0,88,149,55,106,248,248,115,13,0,0,0,
-90,248,248,94,0,10,79,102,89,50,32,2,0,0,10,62,38,3,64,131,18,0,0,9,82,71,2,0,0,6,38,13,0,61,151,140,122,42,6,0,0,0,0,0,0,13,78,84,
-12,0,0,0,0,0,5,86,76,0,7,34,24,142,169,22,83,246,250,248,248,243,81,43,175,176,63,0,0,0,7,59,83,194,250,231,54,0,0,10,34,38,88,30,0,6,38,13,
-0,33,24,0,78,237,250,220,28,11,85,50,0,18,108,152,54,141,88,0,0,88,149,55,19,0,8,39,13,0,0,0,0,0,0,0,0,10,79,102,186,249,233,56,0,0,10,62,
-0,0,0,1,0,0,9,82,71,2,0,0,6,38,14,0,0,1,142,186,72,14,35,6,0,0,0,0,0,18,201,250,220,29,0,0,0,3,34,19,67,70,0,16,99,56,88,148,
-22,3,70,71,6,0,46,175,176,66,31,6,0,10,62,35,13,82,102,77,9,0,10,33,38,88,30,0,6,38,14,0,0,1,33,73,159,60,46,217,250,213,58,94,248,248,118,157,
-186,95,0,0,0,3,112,156,22,94,248,248,115,13,0,90,248,248,94,4,6,0,10,77,109,146,49,2,0,10,62,37,0,0,0,1,0,0,9,82,71,2,0,0,6,38,14,0,
-0,1,142,186,72,14,35,6,0,0,0,0,0,0,13,78,84,12,0,0,0,3,34,19,67,70,0,16,99,56,88,182,244,248,250,250,243,81,46,175,176,66,31,6,0,10,62,35,
-13,82,194,250,231,54,10,33,38,88,30,0,6,38,14,0,0,1,33,86,234,249,209,67,79,80,47,0,0,0,43,157,186,95,0,0,0,3,112,156,22,0,0,7,39,13,0,0,
-0,0,0,4,6,0,10,77,109,210,249,230,54,10,62,37,0,0,0,0,0,9,82,71,2,0,0,6,38,14,0,0,5,123,116,69,161,74,13,38,6,0,0,0,18,198,248,206,
-90,84,12,0,3,36,19,0,3,66,69,75,51,32,12,88,148,22,3,70,75,51,175,176,62,0,13,34,16,60,37,0,79,128,92,102,76,19,30,38,88,30,0,6,38,14,0,0,
-0,0,56,171,69,22,209,249,216,103,10,0,94,249,251,191,143,137,22,0,3,36,19,88,148,22,94,248,248,115,98,248,248,94,0,7,38,10,0,25,95,176,169,45,14,60,37,0,
-0,0,0,0,0,9,82,71,2,0,0,6,38,14,0,0,5,123,116,69,161,74,13,38,6,0,0,0,0,0,0,13,78,84,12,0,3,36,19,0,3,66,69,75,51,32,89,247,
-252,249,248,246,132,51,175,176,62,0,13,34,16,60,37,0,79,128,92,191,250,232,77,38,88,30,0,6,38,14,0,0,0,0,69,237,249,203,26,41,94,94,10,0,0,30,101,156,
-143,137,22,0,3,36,19,88,148,22,0,0,7,39,13,0,0,0,0,7,38,10,0,25,95,176,221,249,231,98,37,0,0,0,0,0,9,82,71,2,0,0,6,38,14,0,0,5,
-123,124,6,1,61,165,74,14,38,6,0,18,198,248,203,18,13,78,84,16,32,19,0,0,0,15,102,87,0,5,38,13,88,148,23,0,85,176,176,60,0,0,0,20,73,38,0,74,
-178,179,63,80,102,87,44,84,30,0,6,38,14,0,0,0,0,55,159,51,52,211,248,214,77,53,81,11,27,160,252,250,102,111,149,24,36,19,0,0,88,148,22,94,248,248,249,248,
-94,0,0,0,10,35,24,29,15,82,175,168,74,35,0,0,0,0,0,0,9,82,71,2,0,0,6,38,14,0,0,5,123,124,6,1,61,165,74,14,38,6,0,0,0,0,0,0,
-13,78,84,16,32,19,0,0,0,15,102,87,0,85,245,248,250,252,244,81,85,176,176,60,0,0,0,20,73,38,0,74,178,179,63,80,191,250,234,120,30,0,6,38,14,0,0,0,
-0,69,234,249,210,36,11,85,67,53,81,11,27,105,161,87,19,111,149,24,36,19,0,0,88,148,22,0,0,7,38,13,0,0,0,0,10,35,24,29,15,82,175,220,250,234,50,0,
-0,0,0,9,82,71,2,0,0,6,38,14,0,0,5,123,124,6,0,0,0,60,159,75,14,38,23,198,249,203,18,0,0,12,75,96,27,0,0,0,13,82,48,64,69,2,6,39,
-14,88,145,69,168,176,75,7,0,0,10,59,43,32,78,178,178,74,0,20,90,102,101,36,0,6,38,14,0,0,0,0,55,159,50,22,207,249,216,59,11,32,52,84,103,160,150,248,
-248,101,110,162,38,0,0,0,0,88,148,22,150,248,248,166,12,0,0,0,0,28,57,10,0,8,83,175,170,45,2,0,0,0,0,9,82,71,2,0,0,6,38,14,0,0,5,123,
-124,6,0,0,0,60,159,75,14,38,5,0,22,2,0,0,0,12,75,96,27,0,0,0,13,82,48,64,128,243,248,249,248,247,180,69,168,176,75,7,0,0,10,59,43,32,78,178,
-178,74,0,20,90,191,251,234,54,6,38,14,0,0,0,0,69,234,249,203,18,39,90,47,11,32,52,84,103,160,88,0,0,18,110,162,38,0,0,0,0,88,148,22,0,0,7,38,
-12,0,0,0,0,28,57,10,0,8,83,175,221,249,230,50,122,0,9,82,71,2,0,0,6,38,14,0,0,5,123,126,14,0,0,0,0,0,33,154,76,31,205,249,214,22,0,0,
-0,1,38,81,82,12,0,13,84,50,0,2,70,70,2,6,38,11,112,209,175,52,9,37,8,9,62,37,0,84,190,180,74,0,10,29,46,102,102,73,16,34,14,0,0,0,0,58,
-162,50,22,207,248,214,62,0,0,10,50,113,189,96,0,94,248,248,119,118,148,22,0,0,0,0,88,186,249,248,248,248,116,12,0,0,24,30,11,38,8,6,60,91,175,169,47,2,
-0,0,9,82,71,2,0,0,6,38,14,0,0,5,123,126,14,0,0,0,0,0,33,154,76,14,32,44,53,4,0,0,0,1,38,81,82,12,0,13,84,50,0,83,246,250,248,248,
-245,88,112,209,175,52,9,37,8,9,62,37,0,84,190,180,74,0,10,29,46,102,191,250,235,81,14,0,0,0,0,72,235,249,203,18,12,83,50,0,0,10,50,113,189,96,0,0,
-0,1,45,118,148,22,0,0,0,0,88,148,22,0,0,12,41,12,0,0,24,30,11,38,8,6,60,91,175,221,249,230,248,95,82,70,2,0,0,6,38,14,0,0,5,123,124,21,
-61,15,0,36,72,9,0,30,161,216,249,217,27,0,0,0,3,36,15,10,78,81,26,80,50,0,0,0,3,70,70,1,2,66,168,190,160,20,0,8,38,61,35,0,74,178,182,100,
-2,9,33,38,84,39,76,102,90,20,0,0,0,0,55,165,99,36,207,248,214,62,0,0,0,24,111,178,124,81,13,0,96,249,248,100,111,149,22,0,0,0,90,250,252,105,94,249,
-250,115,10,21,33,1,0,8,38,61,32,11,82,175,169,47,0,8,82,70,2,0,0,6,38,14,0,0,5,123,124,21,61,15,0,36,72,9,0,30,154,77,49,69,10,0,0,0,
-3,36,15,10,78,81,26,80,50,0,81,243,248,250,250,243,82,66,168,190,160,20,0,8,38,61,35,0,74,178,182,100,2,9,33,38,84,39,76,191,250,236,54,0,0,0,69,235,
-251,206,18,13,83,50,0,0,0,24,111,178,124,81,13,0,3,36,16,16,111,149,22,0,0,0,0,86,141,16,0,43,76,39,10,21,33,1,0,8,38,61,32,11,82,175,221,249,
-249,250,134,2,0,0,6,38,14,0,0,5,123,124,6,0,30,63,16,72,102,78,8,18,205,252,227,34,35,6,0,3,36,19,0,0,10,77,102,68,37,0,0,0,0,3,69,64,
-46,174,175,64,86,148,22,8,61,56,7,74,178,178,74,10,38,33,37,88,30,0,16,92,102,77,10,0,0,55,159,48,49,219,248,212,98,16,0,0,0,80,174,98,31,55,81,17,
-32,106,248,248,102,112,149,22,0,90,248,248,142,136,22,98,250,250,121,36,0,0,0,8,61,56,7,0,10,82,175,168,50,77,69,2,0,0,6,38,14,0,0,5,123,124,6,0,
-30,63,16,72,102,78,8,0,30,171,115,17,35,6,0,3,36,19,0,0,10,77,102,68,37,5,217,248,248,248,246,124,46,174,175,64,86,148,22,8,61,56,7,74,178,178,74,10,
-38,33,37,88,30,0,16,92,188,250,235,54,0,69,234,249,209,76,21,76,88,16,0,0,0,80,174,98,31,55,81,17,32,19,0,0,19,112,149,22,0,0,0,0,76,136,22,6,
-67,73,48,36,0,0,0,8,61,56,7,0,10,82,175,215,205,250,248,90,0,6,38,14,0,0,5,123,124,6,0,0,0,28,57,56,90,102,88,200,249,219,162,79,14,36,9,34,
-19,0,0,0,10,81,88,104,159,53,0,0,0,0,0,84,175,174,57,31,14,88,152,79,35,9,101,181,178,74,0,6,37,56,86,29,0,6,34,23,78,102,78,10,55,159,48,22,
-207,249,209,83,43,5,0,0,64,170,90,0,13,32,55,95,28,0,94,248,248,102,112,149,105,248,248,94,0,85,147,22,95,250,250,114,12,0,10,62,35,9,38,10,0,10,80,175,
-175,87,4,0,0,6,38,14,0,0,5,123,124,6,0,0,0,28,57,56,90,102,75,11,43,77,155,79,14,36,9,34,19,0,0,0,10,81,88,104,159,53,27,221,248,243,81,84,
-175,174,57,31,14,88,152,79,35,9,101,181,178,74,0,6,37,56,86,29,0,6,34,23,78,188,250,235,110,234,249,203,18,27,62,73,43,5,0,0,64,170,90,0,13,32,55,95,
-28,0,0,0,0,19,112,149,22,0,0,0,0,85,147,22,1,76,85,37,12,0,10,62,35,9,38,10,0,10,80,175,175,200,249,248,93,38,14,0,0,5,123,124,6,0,0,0,
-0,1,59,73,30,89,221,250,214,21,29,152,79,14,58,21,0,0,0,13,84,48,12,77,120,162,52,0,0,0,45,172,175,90,0,4,22,11,128,163,23,69,181,190,81,0,11,34,
-34,90,55,1,5,38,14,0,11,80,102,117,163,48,22,207,248,194,70,74,17,0,1,64,171,91,0,0,0,13,52,68,81,13,0,94,248,248,102,163,252,249,94,0,0,0,88,148,
-42,113,250,250,105,9,62,37,0,0,10,39,10,0,19,105,175,168,46,1,5,38,14,0,0,5,123,124,6,0,0,0,0,1,59,73,30,76,102,88,53,3,29,152,79,14,58,21,
-0,0,0,13,84,48,12,77,120,162,52,27,217,81,45,172,175,90,0,4,22,11,128,163,23,69,181,190,81,0,11,34,34,90,55,1,5,38,14,0,11,80,188,251,252,249,203,18,
-0,1,59,74,17,0,1,64,171,91,0,0,0,13,52,68,81,13,0,0,0,0,19,112,149,22,0,0,0,0,88,148,42,30,66,76,23,9,62,37,0,0,10,39,10,0,19,105,
-80,175,201,249,249,98,0,0,5,123,124,6,0,0,0,0,3,50,44,28,68,204,250,224,86,5,0,29,153,100,28,32,6,0,13,84,50,0,0,13,77,119,162,53,0,46,175,175,
-56,64,69,0,6,59,36,81,156,173,175,81,35,16,30,33,84,28,8,36,36,11,0,0,0,10,117,197,114,31,207,248,195,61,44,28,59,16,58,170,91,0,0,0,3,31,27,30,
-55,82,13,0,94,248,248,248,251,188,22,0,0,0,0,102,162,22,96,250,250,126,35,0,0,0,0,10,33,16,76,68,80,175,169,47,32,12,0,0,5,123,124,6,0,0,0,0,
-3,50,44,28,54,28,89,102,92,22,0,29,153,100,28,32,6,0,13,84,50,0,0,13,77,119,162,53,5,46,175,175,56,64,69,0,6,59,36,81,156,173,175,81,35,16,30,33,
-84,28,8,36,36,11,0,0,0,10,127,249,251,246,69,0,3,50,44,28,59,16,58,170,91,0,0,0,3,31,27,30,55,82,13,0,0,0,0,19,110,149,22,0,0,0,0,102,
-162,22,2,66,68,55,35,0,0,0,0,10,33,16,76,68,9,82,175,202,249,248,105,5,123,124,6,0,0,0,0,4,52,46,1,18,204,250,214,92,102,72,5,0,61,160,80,13,
-34,20,83,50,0,0,0,0,16,77,118,158,83,169,175,55,0,2,67,70,55,33,0,69,179,179,86,0,16,52,40,81,25,0,6,42,38,20,23,0,0,55,163,114,90,208,248,195,
-63,46,1,0,26,89,169,88,0,0,0,3,36,18,0,12,32,55,82,13,0,150,248,248,157,111,149,22,0,0,24,31,88,148,22,102,251,250,90,0,0,0,0,0,14,93,72,0,
-9,82,175,171,49,17,24,5,123,124,6,0,0,0,0,4,52,46,1,0,26,69,52,99,235,214,22,0,61,160,80,13,34,20,83,50,0,0,0,0,12,77,118,158,83,169,175,55,
-0,2,67,70,55,33,0,69,179,179,86,0,16,52,40,81,25,0,6,42,38,20,23,0,0,69,235,251,236,248,239,57,52,46,1,0,26,89,169,88,0,0,0,3,36,18,0,12,
-32,55,82,13,0,0,0,0,18,111,149,22,0,0,24,31,88,148,22,12,96,82,1,0,0,0,0,0,14,93,72,0,0,10,83,175,201,250,248,169,124,6,0,0,0,0,4,53,
-48,2,18,198,249,215,66,28,81,102,70,34,17,28,152,81,18,94,52,0,0,0,0,81,217,38,73,133,208,182,52,0,0,0,12,96,83,1,74,178,173,123,135,32,31,42,99,35,
-0,0,14,9,26,58,8,0,55,159,48,30,208,248,195,64,48,2,0,2,62,173,124,15,0,0,3,36,19,0,0,0,13,33,55,82,98,248,248,248,248,102,112,150,28,24,33,1,
-0,88,152,76,117,250,250,92,0,0,0,9,80,72,36,9,0,10,83,175,169,61,7,123,124,6,0,0,0,0,4,53,48,2,0,2,44,59,52,44,216,251,214,50,17,28,152,81,
-18,94,52,0,0,0,0,0,0,12,73,133,208,182,52,0,0,0,12,96,83,1,74,178,173,123,135,32,31,42,99,35,0,0,14,9,26,58,8,0,69,234,249,205,22,140,248,242,
-95,2,0,2,62,173,124,15,0,0,3,36,19,0,0,0,13,33,55,82,13,0,0,0,0,19,112,150,28,24,33,1,0,88,152,76,36,66,69,3,0,0,0,9,80,72,36,9,
-10,0,8,87,173,197,252,252,94,0,0,0,0,4,54,47,1,18,198,249,213,21,25,59,30,82,102,75,2,0,28,152,82,32,35,6,0,0,81,243,248,221,88,184,170,168,50,0,
-0,10,60,36,65,123,179,178,72,0,94,162,57,86,37,30,7,0,0,17,33,16,36,60,159,48,22,207,248,195,65,47,1,0,2,66,170,90,25,64,16,1,36,19,0,0,0,0,
-0,13,33,126,250,248,94,94,248,248,102,109,88,32,1,0,0,10,129,164,22,96,250,250,163,95,14,82,70,1,8,39,10,0,8,87,173,163,138,122,6,0,0,0,0,4,54,47,
-1,0,2,49,51,3,25,59,46,216,251,215,20,0,28,152,82,32,35,6,0,0,0,0,0,0,68,184,170,168,50,0,0,10,60,36,65,123,179,178,72,0,94,162,57,86,37,30,
-7,0,0,17,33,16,36,73,234,249,203,18,0,4,164,249,239,58,2,66,170,90,25,64,16,1,36,19,0,0,0,0,0,13,33,55,82,13,0,0,0,0,18,109,88,32,1,0,
-0,10,129,164,22,2,70,72,114,95,14,82,70,1,8,39,39,8,13,38,84,205,221,249,248,90,0,0,5,54,46,1,18,199,249,213,21,0,0,26,57,48,86,102,68,4,0,27,
-152,82,14,38,6,81,243,248,248,250,245,157,87,113,162,52,10,62,37,0,75,199,199,76,0,10,33,113,185,50,0,7,37,8,17,36,3,0,66,173,53,22,207,248,195,65,46,1,
-0,4,67,170,90,0,0,26,61,42,15,0,0,0,0,0,0,0,98,249,250,146,13,0,94,248,248,112,55,2,0,0,10,62,37,88,148,20,96,252,253,199,94,70,2,0,0,10,
-39,8,13,38,84,205,201,51,2,0,0,0,5,54,46,1,0,4,49,51,3,0,0,26,57,63,217,251,213,22,0,27,152,82,14,38,6,0,0,0,0,60,190,154,87,113,162,52,
-10,62,37,0,75,199,199,76,0,10,33,113,185,50,0,7,37,8,17,36,3,0,79,237,249,203,18,0,5,54,46,140,248,239,110,170,90,0,0,26,61,42,15,0,0,0,0,0,
-0,0,13,33,55,82,13,0,0,0,0,35,55,2,0,0,10,62,37,88,148,20,3,150,199,169,94,70,2,0,0,10,8,46,38,5,124,158,170,199,249,248,90,5,54,46,0,18,
-198,249,213,21,0,0,0,0,48,62,32,83,102,67,4,0,27,151,83,14,107,243,248,248,250,252,187,50,14,77,117,167,98,37,0,74,189,185,121,67,14,31,38,88,108,148,22,0,
-7,46,38,2,0,55,159,59,57,208,248,195,66,46,0,0,0,61,170,90,0,0,0,0,48,66,15,0,0,0,0,1,55,94,248,248,115,55,82,13,0,94,249,249,101,35,1,9,
-62,37,0,0,111,145,117,207,253,251,133,1,0,0,0,0,8,46,38,5,124,158,170,167,47,3,0,5,54,46,0,0,0,43,51,3,0,0,0,0,48,62,48,216,251,213,21,0,
-27,151,83,14,38,6,0,0,60,190,155,50,14,77,117,167,98,37,0,74,189,185,121,67,14,31,38,88,108,148,22,0,7,46,38,2,0,69,234,249,211,24,0,5,54,46,0,0,
-135,250,250,128,0,0,0,0,48,66,15,0,0,0,0,1,55,6,0,13,33,55,82,13,0,0,24,29,17,35,1,9,62,37,0,0,111,145,117,179,187,124,66,1,0,0,0,0,
-17,38,40,128,124,12,80,176,201,249,248,125,45,0,18,198,248,206,22,0,0,0,3,36,15,24,59,34,85,102,66,3,0,26,151,138,244,249,248,250,252,187,52,0,0,10,75,133,
-173,48,69,178,185,118,21,69,82,40,86,30,0,88,148,22,16,38,36,10,55,159,48,22,210,249,197,65,45,0,0,0,22,154,91,0,0,0,3,36,15,24,64,18,0,0,0,83,
-206,251,248,94,13,33,55,82,12,20,115,248,248,100,36,58,36,0,0,0,24,173,185,160,158,250,250,91,0,0,0,0,17,38,40,128,124,12,80,176,169,46,9,54,45,0,0,0,
-0,14,4,0,0,0,3,36,15,24,59,49,217,251,213,21,0,26,151,84,14,37,4,59,190,155,52,0,0,10,75,133,173,48,69,178,185,118,21,69,82,40,86,30,0,88,148,22,
-16,38,36,10,69,234,249,203,31,35,12,54,45,0,0,0,22,207,250,239,58,0,3,36,15,24,64,18,0,0,0,83,179,110,3,0,13,33,55,82,12,20,33,1,0,16,36,58,
-36,0,0,0,24,173,185,160,101,93,65,2,0,0,0,0,36,6,127,142,10,0,10,82,175,200,250,249,90,18,198,248,198,18,0,0,0,3,33,19,0,0,27,59,35,86,102,64,
-2,0,99,250,250,248,251,252,187,52,0,0,0,8,58,83,112,166,176,173,73,20,61,43,77,102,31,0,0,0,88,154,52,1,9,83,161,48,22,207,248,198,79,44,0,0,0,22,
-148,88,0,0,0,3,33,19,0,0,27,64,18,0,0,122,252,253,168,3,0,13,33,54,89,39,0,94,248,248,132,54,0,0,0,5,114,185,189,180,77,100,250,250,92,0,0,19,
-36,6,127,142,10,0,10,82,175,168,71,41,0,0,0,0,0,0,0,0,0,3,33,19,0,0,27,59,51,217,251,212,20,0,26,151,84,10,79,190,155,52,0,0,0,8,58,83,
-112,166,176,173,73,20,61,43,77,102,31,0,0,0,88,154,52,1,9,95,234,249,203,18,0,16,69,44,0,0,0,22,148,88,135,248,239,65,33,19,0,0,27,64,18,0,0,48,
-164,185,117,3,0,13,33,54,89,39,0,0,0,8,64,54,0,0,0,5,114,185,189,180,77,10,68,70,3,0,0,19,8,123,124,9,2,0,0,10,84,175,202,249,248,216,248,198,
-18,0,0,0,3,36,18,0,0,0,0,26,59,36,86,102,63,82,243,249,252,252,251,187,54,0,0,0,10,62,34,12,125,201,183,104,0,7,44,71,82,74,64,3,0,0,19,111,
-148,20,51,160,49,22,207,248,196,64,49,32,6,0,22,148,88,0,0,0,3,36,18,0,0,0,0,26,64,18,90,248,249,206,204,117,3,0,10,44,83,170,74,1,100,250,249,100,
-35,3,6,116,179,162,108,146,157,22,96,250,250,91,17,36,8,123,124,9,2,0,0,10,84,175,172,45,2,0,0,0,0,0,0,0,3,36,18,0,0,0,0,26,59,52,217,251,
-212,20,0,25,142,119,183,154,54,0,0,0,10,62,34,12,125,201,183,104,0,7,44,71,82,74,64,3,0,0,19,111,148,20,66,234,249,203,18,0,8,53,49,32,6,0,22,148,
-88,0,0,135,248,241,77,0,0,0,0,26,64,18,0,0,41,179,204,117,3,0,10,44,83,170,74,1,10,62,34,15,35,3,6,116,179,162,108,146,157,22,3,70,70,2,17,36,
-123,124,6,0,0,0,0,0,37,95,175,205,249,248,216,18,0,0,0,3,36,19,0,0,0,0,0,0,26,59,38,87,151,246,248,248,250,253,205,58,30,6,0,10,62,37,0,74,
-182,199,155,147,56,33,38,90,72,21,66,70,3,0,21,3,81,153,148,44,22,207,248,194,50,45,0,13,38,28,148,88,0,0,0,3,36,19,0,0,0,0,0,0,26,132,248,248,
-94,41,180,204,117,4,21,55,154,195,169,27,58,117,248,248,102,41,119,179,162,107,66,22,128,157,22,96,250,250,104,7,123,124,6,0,0,0,0,0,37,95,175,169,48,3,0,0,
-0,0,0,3,36,19,0,0,0,0,0,0,26,59,53,218,251,212,19,0,79,209,181,58,30,6,0,10,62,37,0,74,182,199,155,147,56,33,38,90,72,21,66,70,3,0,21,3,
-81,160,231,249,203,18,0,0,38,45,0,13,38,28,148,88,0,0,0,3,148,248,239,63,0,0,0,0,26,64,18,0,0,41,180,204,117,4,21,55,154,195,169,27,58,37,0,0,
-19,41,119,179,162,107,66,22,128,157,22,3,69,70,21,7,124,6,0,0,0,0,0,0,1,14,95,237,253,249,248,90,0,0,3,36,19,0,0,0,0,0,0,0,0,26,58,108,
-247,251,250,250,251,190,160,85,13,34,16,60,37,0,74,178,178,82,76,118,173,82,87,28,18,61,22,66,70,3,0,0,50,174,150,37,207,248,194,14,4,0,0,0,35,164,92,0,
-0,0,3,36,19,0,0,0,0,0,0,0,90,249,250,106,0,0,41,180,203,125,57,140,183,152,74,102,43,0,94,248,248,173,189,163,104,70,2,0,22,130,157,22,96,250,250,170,
-124,6,0,0,0,0,0,0,1,14,82,175,170,48,4,0,0,0,3,36,19,0,0,0,0,0,0,0,0,26,58,54,218,251,211,74,186,160,160,85,13,34,16,60,37,0,74,178,
-178,82,76,118,173,82,87,28,18,61,22,66,70,3,0,0,64,237,252,207,18,0,0,0,4,0,0,0,35,164,92,0,0,0,3,36,19,130,248,239,63,0,0,0,0,26,64,18,
-0,0,41,180,203,125,57,140,183,152,74,102,43,0,0,0,7,129,189,163,104,70,2,0,22,130,157,22,3,70,72,124,9,0,0,0,0,0,0,0,0,18,200,250,233,183,249,248,
-90,3,36,19,0,0,0,0,0,0,0,0,0,0,98,246,249,250,251,252,186,52,24,150,87,20,73,38,0,74,178,178,74,0,19,83,122,189,73,0,0,22,61,22,66,70,3,55,
-157,44,96,235,249,194,14,0,0,0,0,22,148,97,38,6,0,3,36,19,0,0,0,0,0,0,0,90,248,248,110,64,19,0,0,40,181,207,170,179,134,34,66,70,78,13,0,99,
-252,253,198,114,69,2,0,0,0,22,130,157,20,97,253,253,96,0,0,0,0,0,0,0,0,0,10,85,159,132,41,6,0,3,36,19,0,0,0,0,0,0,0,0,0,0,25,58,
-55,217,251,241,161,52,24,150,87,20,73,38,0,74,178,178,74,0,19,83,122,189,73,0,0,22,61,22,66,70,3,69,233,249,219,156,22,0,0,0,0,0,0,22,148,97,38,6,
-0,3,36,19,0,0,130,248,239,68,0,0,0,0,26,64,19,0,0,40,181,207,170,179,134,34,66,70,78,13,0,8,121,179,165,114,69,2,0,0,0,22,130,157,20,4,159,160,
-70,3,0,0,0,0,0,0,18,198,248,200,27,122,176,249,248,112,19,0,0,0,0,0,0,0,0,0,0,81,243,249,250,251,252,187,81,0,0,24,154,114,43,32,78,178,178,74,
-0,10,30,46,102,121,161,52,0,0,22,61,22,66,109,160,48,22,207,250,229,31,0,0,0,0,22,148,88,0,14,36,9,34,19,0,0,0,0,0,0,0,90,248,248,94,0,25,
-64,19,0,23,79,193,204,168,28,59,42,30,55,82,21,121,207,252,251,139,32,2,0,0,0,0,22,128,145,121,169,250,250,92,0,0,0,0,0,0,0,0,0,8,9,122,130,41,
-9,34,19,0,0,0,0,0,0,0,0,0,0,0,0,25,53,96,241,252,216,18,0,24,154,114,43,32,78,178,178,74,0,10,30,46,102,121,161,52,0,0,22,61,22,66,120,234,
-249,203,18,88,148,22,0,0,0,0,22,148,88,0,14,36,9,34,19,0,0,0,0,130,248,239,68,0,0,0,0,25,64,19,0,23,79,193,204,168,28,59,42,30,55,82,21,121,
-179,160,101,75,32,2,0,0,0,0,22,128,145,121,120,74,70,70,3,0,0,0,0,18,198,248,198,18,0,5,122,176,250,248,90,0,0,0,0,0,0,0,0,0,81,244,248,248,
-250,252,185,96,102,56,0,9,79,64,0,84,190,180,74,0,10,34,39,83,40,74,119,162,52,0,0,22,61,72,183,102,23,207,248,194,95,148,22,0,0,22,148,88,0,0,0,14,
-58,21,0,0,0,0,0,0,0,90,248,248,94,16,4,0,25,60,35,48,139,179,192,203,145,37,0,12,33,62,166,182,158,159,250,248,101,36,3,0,0,0,0,22,178,185,27,96,
-250,250,92,0,0,0,0,0,0,0,0,0,0,5,122,129,62,21,0,0,0,0,0,0,0,0,0,0,0,16,3,0,74,191,160,219,251,211,18,9,79,64,0,84,190,180,74,0,
-10,34,39,83,40,74,119,162,52,0,0,22,61,85,239,251,203,18,0,0,88,148,22,0,0,22,148,88,0,0,0,14,58,21,0,0,0,0,0,0,126,248,239,68,0,16,4,0,
-25,60,35,48,139,179,192,203,145,37,0,12,33,62,166,182,158,104,70,1,16,59,172,18,0,0,0,22,178,185,27,3,3,70,70,3,0,0,18,198,248,198,18,0,0,0,8,139,
-180,249,248,90,0,0,0,0,0,0,11,92,243,248,249,250,252,187,78,45,91,102,59,55,36,0,74,177,182,101,4,8,34,39,87,30,0,13,78,120,163,51,0,0,71,182,66,75,
-219,248,194,9,0,88,147,18,18,147,88,0,0,0,3,32,28,34,6,0,0,0,0,0,90,248,248,104,0,19,36,3,0,38,90,154,179,127,59,191,207,120,5,0,19,139,195,185,
-99,67,96,248,248,102,36,5,0,0,5,120,125,128,154,22,96,250,250,92,0,0,0,0,0,0,0,0,0,0,8,139,136,38,6,0,0,0,0,0,0,0,11,16,0,18,30,62,
-189,155,78,60,218,251,211,69,36,0,74,177,182,101,4,8,34,39,87,30,0,13,78,120,163,51,0,0,85,239,249,215,76,2,0,0,0,88,147,18,18,147,88,0,0,0,3,32,
-28,34,6,0,0,0,0,0,0,126,248,240,68,19,36,3,0,38,90,154,179,127,59,191,207,120,5,0,19,139,195,185,99,67,2,0,0,177,249,199,18,0,5,120,125,128,154,22,
-19,3,70,70,3,18,198,248,198,18,0,0,0,3,36,24,118,168,249,248,90,0,0,0,0,0,85,245,248,248,250,252,185,49,22,57,46,92,102,72,0,66,165,165,71,12,40,34,
-38,87,30,0,0,0,12,66,116,153,38,41,149,64,79,211,250,210,12,0,0,0,84,135,135,84,0,0,0,3,36,19,0,14,38,6,0,0,0,90,248,248,97,36,19,0,18,32,
-24,46,149,190,135,21,61,65,171,197,111,16,108,162,160,109,102,15,0,94,248,248,102,21,0,6,109,120,4,22,128,146,19,96,250,250,92,0,0,0,0,0,0,0,0,3,36,24,
-118,117,43,6,0,0,0,0,0,0,5,36,18,0,68,184,153,49,22,57,60,218,251,214,18,66,165,165,71,12,40,34,38,87,30,0,0,0,12,66,116,153,38,56,232,249,216,38,
-66,69,3,0,0,0,84,135,135,84,0,0,0,3,36,19,0,14,38,6,0,0,0,0,0,0,129,249,240,72,18,32,24,46,149,190,135,21,61,65,171,197,111,16,108,162,160,109,
-102,15,0,0,0,18,202,248,198,23,109,120,4,22,128,146,152,21,3,70,83,199,248,198,18,0,0,0,3,36,19,0,6,109,172,249,248,90,0,0,0,81,243,248,249,250,252,181,
-68,0,0,22,56,69,96,102,109,165,165,66,0,8,39,57,85,28,0,0,0,0,0,0,50,109,157,151,34,22,211,250,198,73,70,3,0,0,21,150,150,21,0,5,110,71,19,0,
-0,0,14,38,6,0,90,248,248,94,0,3,36,18,0,35,74,142,168,133,69,62,34,0,34,169,195,161,154,135,98,81,54,80,13,0,94,248,248,90,5,118,111,6,0,0,22,121,
-152,21,96,250,250,92,0,0,0,0,0,0,3,36,19,0,6,109,125,42,6,0,0,0,0,0,0,3,29,70,186,148,68,0,0,22,56,82,219,251,222,171,165,66,0,8,39,57,
-85,28,0,0,0,0,0,0,50,109,164,232,249,203,38,59,18,66,70,3,0,0,21,150,150,21,0,5,110,71,19,0,0,0,14,38,6,0,0,0,0,0,0,128,249,240,72,35,
-74,142,168,133,69,62,34,0,34,169,195,161,154,135,98,81,54,80,13,0,0,0,18,198,248,224,121,6,0,0,22,121,128,157,22,21,214,250,199,18,0,0,0,3,36,19,0,0,
-0,5,125,176,249,248,90,0,81,243,248,248,250,252,186,49,14,34,2,7,63,66,48,140,209,193,74,0,10,33,41,88,55,2,0,0,0,0,0,0,0,90,191,164,65,207,248,198,
-64,21,66,70,3,27,147,81,81,144,34,119,142,31,0,0,0,0,0,14,38,94,248,248,94,0,0,0,3,32,35,49,157,189,129,19,63,70,18,0,0,48,191,202,172,97,69,16,
-31,56,83,11,0,94,248,248,169,123,6,0,0,0,0,22,128,157,22,96,250,250,92,0,0,0,0,3,36,19,0,0,0,5,125,130,42,6,0,0,0,0,0,0,61,191,154,49,
-14,34,2,7,63,66,63,229,254,241,87,0,10,33,41,88,55,2,0,0,0,0,0,0,0,102,241,252,213,18,0,18,57,21,66,70,3,27,147,81,81,144,34,119,142,31,0,0,
-0,0,0,14,38,6,0,0,0,0,0,0,124,249,241,107,157,189,129,19,63,70,18,0,0,48,191,202,172,97,69,16,31,56,83,11,0,0,0,23,225,252,199,18,0,0,0,22,
-22,130,164,203,248,214,83,3,0,0,3,36,19,0,0,0,3,69,65,122,175,249,248,141,243,248,248,250,252,187,68,14,0,14,19,60,33,21,115,193,206,146,49,10,32,40,88,23,
-10,38,5,4,9,0,0,0,55,158,83,128,237,249,194,9,21,61,22,66,70,118,91,0,0,85,180,141,20,0,0,0,0,0,0,0,99,249,248,94,0,22,56,6,0,23,76,157,
-179,135,30,60,33,22,64,20,13,124,179,193,202,149,9,0,13,35,59,81,17,0,97,252,252,94,0,0,0,0,0,0,22,130,157,22,96,250,250,92,0,0,3,36,19,0,0,0,
-3,69,65,122,129,42,6,0,0,15,14,59,190,155,68,14,0,14,19,60,33,21,115,198,244,252,209,27,32,40,88,23,10,38,5,4,9,0,0,0,69,233,250,226,168,52,0,0,
-21,61,22,66,70,118,91,0,0,85,180,141,20,0,0,0,0,0,0,0,14,38,6,0,0,22,56,6,0,134,250,248,200,135,30,60,33,22,64,20,13,124,179,193,202,149,9,0,
-13,35,59,81,17,0,5,123,134,199,248,198,18,0,0,0,0,38,227,252,203,21,70,70,2,1,36,19,0,0,0,3,70,71,5,5,122,175,249,248,248,248,251,252,187,52,3,34,
-16,7,61,37,0,74,185,196,111,94,102,65,39,87,29,0,0,13,37,37,9,10,23,55,159,48,22,217,251,233,59,0,0,22,61,22,66,81,3,0,4,115,162,144,20,0,0,0,
-0,0,0,90,248,248,116,3,9,80,102,54,18,55,153,189,135,17,61,37,0,0,24,74,142,179,145,116,183,194,122,6,0,11,34,70,82,27,132,173,248,248,90,0,0,0,0,0,
-0,22,130,157,22,96,250,250,91,1,36,19,0,0,0,3,70,71,5,5,122,129,39,6,0,2,79,191,155,52,3,34,16,7,61,37,0,74,185,196,121,219,251,212,54,87,29,0,
-0,13,37,37,9,10,23,69,234,249,203,65,120,163,52,0,0,22,61,22,66,81,3,0,4,115,162,144,20,0,0,0,0,0,0,0,0,14,35,3,9,80,102,54,18,55,202,253,
-249,85,61,37,0,0,24,74,142,179,145,116,183,194,122,6,0,11,34,70,82,27,132,124,6,18,198,248,198,18,0,0,18,198,248,227,164,22,3,69,68,33,17,0,0,0,3,70,
-70,3,0,0,5,165,250,249,248,250,252,187,60,0,0,1,36,65,36,0,74,178,178,90,56,56,96,100,93,26,0,0,0,4,44,40,13,37,64,159,48,22,207,248,206,123,163,52,
-0,0,22,61,22,66,70,7,123,141,26,85,148,22,0,0,0,0,90,248,248,94,10,40,79,102,77,54,65,153,179,127,45,65,36,0,0,0,15,144,197,157,92,76,39,170,204,124,
-6,4,42,37,61,173,135,6,94,248,248,90,0,0,0,0,0,0,22,130,157,22,96,250,250,112,17,0,0,0,3,70,70,3,0,0,5,122,129,42,4,60,190,155,60,0,0,1,
-36,65,36,0,74,178,178,90,56,70,220,251,219,42,0,0,0,4,44,40,13,37,77,234,249,203,18,0,51,119,163,52,0,0,22,61,22,66,70,7,123,141,26,85,148,22,0,0,
-0,0,0,0,0,0,10,40,79,102,77,54,65,153,179,187,249,246,98,0,0,0,15,144,197,157,92,76,39,170,204,124,6,4,42,37,61,173,135,6,0,0,18,198,248,198,18,0,
-198,248,198,38,130,157,22,4,86,76,1,0,0,3,70,71,4,0,0,0,81,243,252,252,251,253,210,52,28,18,0,10,60,37,0,79,178,178,74,0,28,64,73,102,101,43,0,0,
-6,38,11,19,61,65,159,48,22,207,248,194,9,51,119,163,52,0,0,22,61,22,69,159,141,23,0,0,88,148,22,0,1,90,248,248,94,0,8,82,102,78,31,53,167,185,124,19,
-60,37,0,0,0,15,134,179,156,112,80,4,0,35,178,204,128,39,12,23,151,154,85,13,0,94,248,248,90,0,4,0,0,0,0,22,130,157,22,96,250,250,90,0,0,3,70,71,
-4,0,0,0,0,5,122,122,88,188,155,52,28,18,0,10,60,37,0,79,178,178,74,0,28,64,86,221,251,208,18,0,6,38,11,19,61,78,234,249,203,18,0,0,0,51,119,163,
-52,0,0,22,61,22,69,159,141,23,0,0,88,148,22,0,1,0,0,0,0,0,8,82,102,78,31,53,167,185,124,19,154,249,243,72,0,15,134,179,156,112,80,4,0,35,178,204,
-128,39,12,23,151,154,85,13,0,0,0,18,198,248,199,18,248,198,18,0,22,129,158,48,19,67,70,1,1,70,70,4,44,22,0,81,243,248,248,252,253,252,250,90,2,32,24,58,
-37,0,79,202,187,74,0,10,29,52,100,70,94,102,44,1,34,14,0,24,72,172,53,22,207,248,194,9,0,0,62,118,161,52,0,0,22,64,136,166,80,2,0,0,0,88,148,24,
-120,249,248,94,0,10,79,102,80,51,56,154,180,139,34,58,37,0,0,0,15,135,179,148,91,80,60,19,0,0,34,177,208,129,20,132,135,36,55,82,13,0,94,248,248,90,30,19,
-0,0,0,0,22,129,158,48,106,250,250,91,1,70,70,4,44,22,0,0,0,0,1,142,209,153,54,0,2,32,24,58,37,0,79,202,187,74,0,10,29,52,100,83,219,251,208,19,
-34,14,0,24,85,237,249,203,18,0,0,0,0,0,62,118,161,52,0,0,22,64,136,166,80,2,0,0,0,88,148,24,46,22,0,0,0,10,79,102,80,51,56,154,180,139,34,58,
-37,118,248,243,83,135,179,148,91,80,60,19,0,0,34,177,208,129,20,132,135,36,55,82,13,0,0,0,18,198,249,225,241,35,0,0,0,22,137,162,22,3,68,65,65,69,3,0,
-24,64,94,243,248,248,250,251,211,185,249,248,90,11,72,44,0,74,178,188,138,28,6,33,40,84,46,54,58,99,102,46,3,0,0,57,159,60,58,208,248,194,9,0,0,0,1,58,
-114,162,53,0,5,135,161,37,64,62,1,0,0,0,88,186,249,250,107,0,10,79,102,76,31,63,169,181,121,19,72,44,0,0,0,17,136,179,146,94,76,4,20,64,23,0,0,34,
-177,203,166,116,3,14,34,55,82,13,0,94,248,248,92,36,19,0,0,0,0,22,137,162,22,96,250,250,132,69,3,0,24,64,20,0,0,0,59,184,190,144,34,6,0,11,72,44,
-0,74,178,188,138,28,6,33,40,84,46,54,72,220,251,208,21,0,0,71,234,249,211,24,0,0,0,0,0,0,1,58,114,162,53,0,5,135,161,37,64,62,1,0,0,0,88,148,
-44,64,20,0,10,79,102,76,31,63,169,181,121,19,72,44,0,0,118,249,249,202,146,94,76,4,20,64,23,0,0,34,177,203,166,116,3,14,34,55,82,13,0,0,0,102,248,249,
-249,202,18,0,3,30,34,127,157,22,5,98,98,5,0,0,0,97,246,248,248,250,252,185,58,121,175,249,248,128,36,30,87,178,178,74,28,89,52,38,96,111,22,22,49,42,100,101,
-42,2,57,159,48,22,210,249,196,9,0,0,0,0,0,0,62,120,158,53,115,140,39,58,26,21,0,0,0,0,90,250,252,121,60,28,77,102,78,33,58,157,183,139,24,59,36,30,
-18,0,25,138,179,144,93,75,5,0,0,23,55,5,0,0,39,194,204,124,5,0,14,33,55,82,13,0,94,248,248,48,36,19,0,0,3,30,34,127,157,22,97,251,251,93,0,0,
-0,23,64,18,0,60,193,230,152,121,129,39,16,59,36,30,87,178,178,74,28,89,52,38,96,111,22,22,49,58,220,251,207,20,71,234,249,203,31,38,6,0,0,0,0,0,0,0,
-62,120,158,53,115,140,39,58,26,21,0,0,0,0,0,88,148,43,60,28,77,102,78,33,58,157,183,139,24,59,36,30,18,0,25,192,253,249,142,75,5,0,0,23,55,5,0,0,
-39,194,204,124,5,0,14,33,55,82,13,0,90,248,248,217,199,249,202,19,36,19,0,22,128,158,81,66,65,68,3,0,81,243,249,250,250,252,187,50,0,5,122,178,250,249,90,76,
-189,184,74,0,6,52,91,90,109,179,139,18,4,0,39,102,96,67,159,48,22,207,248,197,46,6,0,0,0,0,0,0,0,65,120,184,150,19,0,22,63,18,0,0,0,90,248,248,
-150,148,50,98,102,76,14,53,157,179,119,27,73,38,0,2,36,19,93,179,144,93,74,4,0,0,0,0,4,0,0,5,115,125,171,204,126,7,0,13,33,55,82,13,0,94,126,0,
-3,36,18,1,36,19,0,22,128,158,81,136,250,250,92,0,0,0,24,56,71,194,231,249,248,125,122,133,77,38,0,76,189,184,74,0,6,52,91,90,109,179,139,18,4,0,54,221,
-251,216,235,249,203,18,0,14,38,6,0,0,0,0,0,0,0,65,120,184,150,19,0,22,63,18,0,0,0,0,0,0,88,148,50,98,102,76,14,53,157,179,119,27,73,38,0,2,
-36,19,93,179,195,251,247,80,0,0,0,0,4,0,0,5,115,125,171,204,126,7,0,13,33,55,82,98,248,248,94,18,18,198,249,208,32,0,0,0,22,152,180,22,1,70,70,83,
-243,248,248,250,252,186,40,0,0,0,15,153,185,249,250,205,179,100,16,8,33,38,89,91,49,139,179,138,18,0,0,40,83,159,48,22,207,248,194,9,14,38,6,0,0,0,0,0,
-0,5,149,179,153,50,0,0,22,64,22,0,90,248,248,94,0,94,180,115,97,25,36,159,179,118,16,59,43,32,6,0,3,36,28,97,96,74,4,0,0,0,0,0,0,0,5,123,
-124,1,31,176,204,127,7,0,13,33,55,82,13,0,0,0,0,2,34,45,15,0,0,0,22,152,180,22,95,250,250,92,0,0,0,74,194,231,249,248,248,248,103,153,143,37,75,178,
-179,100,16,8,33,38,89,91,49,139,179,138,18,0,0,56,220,252,249,206,18,0,0,0,14,38,6,0,0,0,0,0,0,5,149,179,153,50,0,0,22,64,22,0,0,0,0,0,
-0,94,180,115,97,25,36,159,179,118,16,59,43,32,6,0,3,36,28,97,96,155,248,243,77,0,0,0,0,0,5,123,124,1,31,176,204,127,7,0,13,33,126,250,248,94,0,0,
-0,20,206,249,201,18,0,3,66,76,126,156,22,3,129,246,248,248,250,252,186,78,12,0,0,10,62,40,112,186,253,253,138,2,38,42,39,87,26,25,90,47,138,179,138,18,0,57,
-159,48,22,207,248,194,9,8,0,14,38,6,0,0,0,0,5,124,139,71,115,162,52,0,0,22,64,104,248,248,94,0,10,79,155,180,50,84,165,179,117,16,62,37,0,14,38,6,
-0,1,34,82,71,4,0,0,0,0,0,0,0,5,123,124,6,0,0,32,176,204,128,11,0,13,33,55,82,13,0,0,0,2,34,45,15,0,0,3,66,76,126,156,22,96,250,250,
-92,0,60,194,231,250,248,248,248,192,69,40,112,146,183,179,74,2,38,42,39,87,26,25,90,47,138,179,138,18,0,71,235,249,248,202,18,0,0,8,0,14,38,6,0,0,0,0,
-5,124,139,71,115,162,52,0,0,22,64,22,0,0,0,0,10,79,155,180,50,84,165,179,117,16,62,37,0,14,38,6,0,1,34,82,71,4,113,248,243,81,0,0,0,5,123,124,
-6,0,0,32,176,204,128,11,0,98,249,250,146,13,0,0,3,36,34,198,249,202,19,70,70,2,20,130,158,96,243,250,250,250,252,187,40,24,59,13,8,62,37,0,74,179,210,251,
-248,95,32,56,92,26,0,0,28,90,47,138,179,133,69,152,48,22,207,248,194,9,0,29,24,0,14,38,6,0,0,5,125,142,23,0,66,120,162,55,1,0,104,250,249,94,0,10,
-79,102,79,88,143,166,197,123,14,62,37,0,0,0,14,38,4,6,78,87,18,0,0,5,0,0,0,0,2,118,123,6,0,0,0,0,32,176,204,143,26,0,13,33,55,82,13,0,
-3,36,18,1,36,16,1,70,70,2,20,130,158,22,96,250,250,131,196,233,249,249,250,248,187,69,37,0,74,179,183,101,4,8,32,56,92,26,0,0,28,90,47,138,179,133,82,232,
-249,206,202,248,198,18,0,29,24,0,14,38,6,0,0,5,125,142,23,0,66,120,162,55,1,0,22,64,23,0,0,10,79,102,79,88,143,166,197,123,14,62,37,0,0,0,14,38,
-4,6,78,87,18,0,0,113,248,243,81,0,2,118,123,6,0,0,0,0,32,176,204,143,107,248,248,115,55,82,13,0,31,19,0,18,198,249,215,81,3,0,0,23,165,250,249,248,
-251,252,187,42,0,0,25,59,60,34,0,74,177,171,140,169,249,249,115,84,52,13,0,0,0,28,90,48,132,179,179,60,22,207,248,194,9,0,0,1,33,24,0,14,38,6,5,123,
-142,24,0,0,0,66,121,145,15,90,248,249,128,1,10,79,102,79,10,36,171,179,132,59,60,34,0,0,0,0,0,12,36,79,70,8,33,19,122,194,9,0,0,4,109,111,5,0,
-0,0,0,0,0,32,176,204,144,26,0,13,33,55,81,17,31,19,0,0,2,33,75,68,3,0,0,23,124,150,23,94,251,253,239,249,248,248,249,201,67,34,0,74,177,171,140,119,
-43,33,38,84,52,13,0,0,0,28,90,48,132,184,238,249,203,18,18,198,248,198,18,1,33,24,0,14,38,6,5,123,142,24,0,0,0,66,121,145,15,0,0,23,55,1,10,79,
-102,79,10,36,171,179,132,59,60,34,0,0,0,0,0,12,36,79,70,8,33,19,0,0,108,248,243,84,109,111,5,0,0,0,0,0,0,32,176,222,252,248,94,13,33,55,81,17,
-27,0,0,0,20,213,250,202,18,0,0,81,243,250,252,250,251,186,42,0,0,0,7,65,70,12,74,178,178,71,6,125,184,250,250,107,0,36,19,0,0,0,27,90,96,179,179,143,
-211,248,194,9,0,0,0,0,1,33,24,0,14,41,126,139,20,0,0,0,0,0,66,94,98,248,248,94,2,10,79,102,79,10,39,161,179,142,138,80,70,12,0,0,0,0,0,7,
-83,88,7,0,3,141,248,248,194,9,5,121,119,2,0,0,0,0,0,0,0,0,32,174,204,145,26,0,13,32,55,95,27,0,0,0,2,69,86,18,0,0,0,0,4,88,141,80,
-214,252,249,248,248,248,182,72,70,12,74,178,178,71,6,125,142,61,86,26,0,36,19,0,0,0,27,90,108,238,253,230,34,0,0,18,198,248,198,18,1,33,24,0,14,41,126,139,
-20,0,0,0,0,0,66,94,13,0,0,0,2,10,79,102,79,10,39,161,179,142,138,80,70,12,0,0,0,0,0,7,83,88,7,0,3,36,19,0,0,108,248,249,162,2,0,0,
-0,0,0,0,0,0,110,252,254,186,26,0,13,32,55,95,79,13,0,3,70,83,200,249,202,18,81,243,248,248,252,253,190,42,0,0,0,10,58,33,28,118,182,178,74,0,10,37,
-142,201,250,248,90,3,36,19,0,0,0,74,189,87,144,241,252,198,9,0,0,0,0,0,0,1,33,24,11,129,152,25,0,0,0,0,0,0,0,133,250,248,94,0,9,79,102,78,
-10,41,162,179,111,16,124,162,48,62,13,0,0,0,9,81,64,16,36,6,99,248,249,248,248,195,128,124,5,0,8,51,11,0,0,0,0,0,0,30,174,204,146,26,0,13,52,62,
-79,13,0,3,70,70,8,33,19,0,0,0,0,0,121,212,236,249,248,248,248,183,65,33,28,118,182,178,74,0,10,37,142,169,57,2,0,3,36,19,0,0,0,86,240,250,230,184,
-138,18,0,0,18,198,248,198,18,1,33,24,11,129,152,25,0,0,0,0,0,0,0,66,84,10,0,0,9,79,102,78,10,41,162,179,111,16,124,162,48,62,13,0,0,0,9,81,
-64,16,36,6,0,3,36,19,0,5,179,252,243,86,8,51,11,0,0,0,0,90,248,249,204,204,146,26,0,13,52,62,55,80,19,66,71,3,18,199,249,217,243,248,248,250,251,203,
-155,22,0,0,10,62,35,0,74,188,197,82,0,10,33,40,91,136,174,249,248,90,3,36,19,0,52,159,74,105,217,252,237,142,18,0,0,0,0,0,0,0,1,32,96,139,32,33,
-3,0,0,0,0,0,90,248,250,147,8,8,79,102,77,14,41,168,179,110,14,62,35,88,148,51,63,12,0,9,82,70,0,0,14,38,15,194,248,249,248,252,223,20,0,0,53,102,
-77,9,0,0,0,0,0,0,30,174,204,145,29,29,27,30,55,80,19,66,71,3,0,3,36,19,0,0,0,60,187,241,252,249,248,248,248,134,35,0,74,188,197,82,0,10,33,40,
-91,136,127,42,7,0,3,36,19,0,66,234,250,221,64,138,179,138,18,0,0,18,198,248,198,18,1,32,96,139,32,33,3,0,0,0,0,0,0,0,66,84,8,8,79,102,77,14,
-41,168,179,110,14,62,35,88,148,51,63,12,0,9,82,70,0,0,14,38,7,0,3,36,23,123,124,112,248,243,121,102,77,9,0,0,90,248,248,94,30,174,204,145,29,29,27,30,
-32,54,102,70,1,0,0,18,214,249,248,248,250,252,187,56,87,148,22,10,62,37,0,74,178,178,97,60,20,30,39,88,28,5,122,176,249,248,90,3,36,67,159,53,22,212,250,206,
-142,179,139,58,14,0,0,0,0,0,0,1,64,40,0,12,35,6,0,0,0,90,248,248,94,64,78,78,102,76,27,28,32,156,114,13,62,37,0,0,88,148,52,59,20,79,71,3,
-0,0,0,14,38,15,190,248,252,252,248,194,14,0,14,80,102,75,13,40,14,0,0,0,0,33,173,203,155,42,0,14,32,54,102,70,1,0,0,0,3,36,18,0,60,196,236,250,
-250,252,249,205,250,249,90,74,178,178,97,60,20,30,39,88,28,5,122,129,43,6,0,3,36,80,234,249,203,42,90,49,138,179,139,58,14,0,18,198,248,198,18,1,64,40,0,12,
-35,6,0,0,0,0,0,0,0,64,78,78,102,76,27,28,32,156,114,13,62,37,0,0,88,148,52,59,20,79,71,3,0,0,0,14,38,6,0,8,142,134,6,0,108,248,244,139,
-102,75,13,116,248,248,94,0,0,29,173,203,155,42,0,14,14,82,86,76,12,0,0,81,243,248,249,250,252,187,57,0,0,88,152,79,37,0,74,178,179,74,0,37,68,46,85,28,
-0,0,5,122,176,249,248,90,54,173,68,22,207,248,200,97,48,138,194,161,23,0,0,0,0,0,2,34,20,29,24,0,14,38,6,0,90,248,248,94,0,11,97,102,76,26,32,4,
-0,19,15,62,37,0,0,2,3,88,148,54,99,72,1,0,0,0,0,0,14,38,20,222,252,249,248,248,194,14,0,11,79,102,90,50,4,0,0,0,86,217,53,180,205,146,28,0,
-14,82,86,76,12,0,0,0,0,3,32,71,195,236,250,248,248,250,223,83,117,248,250,205,179,74,0,37,68,46,85,28,0,0,5,122,130,42,6,0,68,237,249,203,18,0,26,91,
-48,138,194,161,23,0,0,18,198,248,198,50,20,29,24,0,14,38,6,0,0,0,0,0,0,11,97,102,76,26,32,4,0,19,15,62,37,0,0,2,3,88,148,54,99,72,1,0,
-0,0,0,0,14,38,11,123,126,41,19,0,0,104,248,243,138,102,148,249,248,94,0,0,0,0,29,180,205,146,28,0,64,73,34,54,82,13,81,243,248,248,250,253,239,69,0,0,
-0,10,129,163,23,69,178,179,99,8,8,29,58,102,36,0,0,0,0,5,122,176,249,249,193,55,54,210,248,194,9,25,84,79,158,180,138,18,0,0,0,2,35,21,0,1,33,23,
-0,14,38,94,248,248,94,0,10,78,102,93,82,36,1,0,0,10,62,37,0,0,0,4,36,7,93,180,96,56,10,0,0,0,0,0,0,19,143,132,191,248,249,248,248,194,14,0,
-13,95,102,73,6,0,0,86,243,248,225,66,172,204,147,29,64,73,34,54,82,13,0,0,0,0,50,198,236,250,248,248,248,174,132,163,23,138,253,253,154,8,8,29,58,102,36,0,
-0,0,0,5,122,130,39,68,234,249,210,32,0,0,0,25,84,79,158,180,138,18,0,0,18,198,249,203,18,1,33,23,0,14,38,6,0,0,0,0,10,78,102,93,82,36,1,0,
-0,10,62,37,0,0,0,4,36,7,93,180,96,56,10,0,0,0,0,0,0,19,143,127,6,3,36,15,0,0,104,248,244,186,251,250,98,0,0,0,0,2,34,43,172,204,147,29,
-83,0,11,33,55,137,244,248,248,249,250,236,250,201,18,0,10,62,37,81,156,173,175,74,9,41,36,38,82,54,51,4,0,0,0,0,5,113,182,252,249,104,207,248,194,9,0,0,
-61,102,50,138,179,138,18,0,2,35,20,0,0,0,0,30,20,0,99,249,248,94,0,10,79,102,75,28,78,82,9,0,10,62,37,0,0,0,0,0,8,37,81,133,150,54,58,4,
-0,0,0,0,5,123,131,43,15,190,248,248,248,248,194,16,46,52,80,102,74,7,90,243,248,249,248,217,33,172,203,168,83,0,11,33,55,82,13,0,0,22,162,233,250,248,248,248,
-174,66,37,81,156,173,204,250,248,116,36,38,82,54,51,4,0,0,0,0,5,113,147,234,249,203,20,7,0,0,0,0,61,102,50,138,179,138,18,0,2,51,202,248,198,18,0,30,
-20,0,14,38,6,0,0,10,79,102,75,28,78,82,9,0,10,62,37,0,0,0,0,0,8,37,81,133,150,54,58,4,0,0,0,0,5,123,131,43,6,0,2,7,0,0,0,106,
-249,250,250,158,74,7,0,0,2,35,20,0,29,172,203,168,149,27,0,13,104,245,250,248,249,250,149,48,199,249,202,26,62,37,0,69,179,179,86,0,8,36,58,88,26,0,16,2,
-0,0,0,0,0,53,179,183,249,248,248,194,9,0,2,50,44,27,88,50,138,179,138,20,36,20,0,0,0,0,0,0,32,105,248,248,118,3,9,79,102,76,27,30,6,66,80,21,
-58,37,0,0,0,0,0,0,8,81,88,11,88,148,36,2,0,0,0,5,123,124,6,15,38,15,185,248,248,248,248,206,64,0,11,83,102,137,243,248,249,248,243,81,0,27,186,209,
-149,27,0,13,33,55,82,13,22,160,229,249,248,249,248,170,66,37,0,69,179,179,86,94,248,249,127,88,26,0,16,2,0,0,0,0,0,67,238,252,211,24,0,0,0,0,2,50,
-44,27,88,50,138,179,138,20,36,20,18,198,248,198,18,0,32,24,0,14,38,3,9,79,102,76,27,30,6,66,80,21,58,37,0,0,0,0,0,0,8,81,88,11,88,148,36,2,
-0,0,0,5,123,124,6,15,38,6,0,0,0,0,2,122,249,248,245,144,102,72,5,0,36,20,0,0,0,27,186,209,203,148,29,81,244,249,250,251,250,148,36,3,18,198,249,212,
-52,0,74,178,173,123,135,31,33,38,88,54,7,0,0,0,0,0,0,0,52,155,55,124,239,249,248,96,0,2,50,50,2,0,25,90,51,138,180,154,36,0,0,0,0,0,0,0,
-90,249,249,94,11,40,79,102,76,27,32,4,0,0,66,102,41,0,0,0,0,0,0,9,82,69,13,36,10,88,148,22,0,0,5,123,124,6,0,0,15,38,15,185,248,248,249,249,
-194,18,0,13,144,251,250,249,248,243,77,0,3,68,83,171,203,148,29,0,13,33,55,97,164,232,249,248,248,248,175,69,36,0,74,178,173,123,135,31,115,249,250,125,7,0,0,0,
-0,0,0,0,66,232,249,226,139,42,6,0,0,2,50,50,2,0,25,90,51,138,180,154,36,0,0,18,198,248,198,18,0,33,24,0,11,40,79,102,76,27,32,4,0,0,66,102,
-41,0,0,0,0,0,0,9,82,69,13,36,10,88,148,22,0,0,5,123,124,6,0,0,15,38,6,0,0,2,122,249,248,156,248,244,144,102,72,34,17,0,0,0,3,68,83,171,
-171,204,183,245,248,248,250,251,180,41,0,0,0,26,212,249,198,87,178,178,72,0,93,162,58,88,27,6,39,11,0,0,0,0,0,52,159,53,22,208,252,235,249,248,91,50,50,2,
-0,0,0,24,89,52,151,185,138,18,0,0,0,6,13,90,248,248,115,20,8,82,102,77,26,32,3,0,0,9,55,73,76,9,0,0,0,0,8,82,71,3,0,10,39,11,88,148,
-20,1,123,124,6,0,0,0,0,15,38,13,185,249,249,248,248,194,18,94,248,250,251,250,243,77,0,3,69,76,13,27,171,204,149,29,0,13,52,180,238,249,248,248,248,165,64,37,
-0,74,178,178,72,0,93,162,58,149,249,248,115,11,0,0,0,0,0,66,234,249,203,23,122,130,42,4,1,50,50,2,0,0,0,24,89,52,151,185,138,18,0,0,18,199,248,198,
-18,1,33,20,8,82,102,77,26,32,3,0,0,9,55,73,76,9,0,0,0,0,8,82,71,3,0,10,39,11,88,148,20,1,123,124,6,0,0,0,0,15,38,4,1,122,249,248,
-94,0,99,248,244,144,102,77,3,0,0,3,69,76,13,27,27,197,252,252,248,249,250,160,70,80,12,0,11,62,52,198,250,238,184,74,0,10,30,114,185,48,0,0,10,39,11,0,
-0,0,52,159,53,22,207,248,195,127,175,249,249,122,2,0,0,0,0,0,25,101,62,138,179,138,18,0,0,14,130,248,248,94,0,36,84,102,79,48,32,2,0,0,10,62,36,0,
-56,80,10,0,0,9,81,71,2,0,0,0,10,39,11,86,135,121,118,6,0,0,0,0,0,0,14,33,56,198,248,248,248,248,215,248,248,249,250,248,122,3,1,70,68,15,59,20,
-27,170,204,149,26,20,164,237,250,250,248,248,162,66,37,0,74,178,178,74,0,10,30,114,185,48,94,248,248,115,11,0,0,0,66,234,249,203,18,0,5,122,129,37,48,49,2,0,
-0,0,0,0,25,101,62,138,179,138,18,0,0,31,212,248,198,18,0,36,84,102,79,48,32,2,0,0,10,62,36,0,56,80,10,0,0,9,81,71,2,0,0,0,10,39,11,86,
-135,121,118,6,0,0,0,0,0,0,14,33,121,249,248,94,0,0,0,99,248,249,147,102,70,3,1,70,68,15,59,20,94,244,252,254,252,249,145,40,32,54,81,20,56,37,0,87,
-238,253,214,18,10,33,39,88,107,148,22,0,0,9,39,11,0,52,159,53,22,207,248,194,9,5,122,189,250,248,90,0,0,0,0,3,30,39,86,52,138,179,138,18,0,90,249,250,
-105,0,10,78,102,81,25,38,36,5,0,7,60,37,0,0,0,57,81,8,7,82,71,2,0,0,0,0,0,9,39,11,152,179,27,0,0,0,0,0,0,0,0,54,65,15,180,248,
-248,248,248,248,249,248,240,134,102,68,96,150,9,0,23,64,19,26,170,204,152,157,233,249,249,250,250,166,60,37,0,74,178,178,74,0,10,33,39,88,107,148,22,94,248,248,115,11,
-0,66,234,249,203,18,0,0,0,5,122,150,69,6,0,0,0,0,0,3,30,39,86,52,138,179,138,18,0,0,39,212,248,198,27,78,102,81,25,38,36,5,0,7,60,37,0,0,
-0,57,81,8,7,82,71,2,0,0,0,0,0,9,39,11,152,179,27,0,0,0,0,0,0,0,0,125,250,248,94,0,0,0,0,3,121,248,248,146,102,68,96,150,9,0,23,64,
-246,248,249,252,252,200,50,0,12,33,54,87,33,0,74,178,184,214,248,200,49,39,88,28,0,88,148,22,0,0,9,39,61,159,53,22,207,248,194,9,0,2,54,147,176,249,248,90,
-0,0,3,36,19,0,24,90,52,138,179,138,101,248,248,106,56,27,77,102,75,45,45,0,13,38,6,4,22,0,0,0,0,0,55,76,78,68,2,0,0,0,0,0,0,0,14,141,
-119,85,145,22,0,0,0,0,0,2,50,48,16,36,14,180,248,248,248,249,248,241,75,14,83,102,102,128,122,5,0,23,64,18,21,168,210,244,249,248,248,249,178,87,33,0,74,178,
-178,74,0,10,33,39,88,28,0,88,148,22,94,248,248,115,74,234,249,203,18,0,0,0,0,2,54,147,130,40,5,0,0,0,3,36,19,0,24,90,52,138,179,138,18,0,0,36,
-210,249,215,113,75,45,45,0,13,38,6,4,22,0,0,0,0,0,55,76,78,68,2,0,0,0,0,0,0,0,14,141,119,85,145,22,0,0,0,0,0,2,122,249,248,117,5,0,
-0,0,3,36,19,102,248,248,144,102,102,128,122,5,0,97,249,250,249,249,206,207,150,30,0,13,33,54,80,83,178,178,74,18,200,249,207,100,28,0,0,0,88,148,22,0,0,59,
-174,62,22,207,248,194,9,0,2,50,50,7,122,176,249,248,90,3,36,19,0,0,0,23,89,52,138,206,252,249,94,0,30,97,102,74,27,29,31,23,0,14,38,6,0,0,0,0,
-0,0,8,97,102,11,0,0,0,0,0,0,0,5,123,129,42,11,88,148,22,0,0,0,2,50,50,2,0,16,38,112,248,248,249,248,248,225,133,5,70,100,102,69,124,122,5,0,
-24,64,34,157,246,254,252,248,248,159,33,54,80,83,178,178,74,0,10,33,39,88,28,0,0,0,88,148,22,94,248,249,243,249,203,18,0,0,0,0,2,50,50,7,122,130,43,5,
-0,3,36,19,0,0,0,23,89,52,138,179,138,18,0,0,45,220,251,214,43,29,31,23,0,14,38,6,0,0,0,0,0,0,8,97,102,11,0,0,0,0,0,0,0,5,123,129,
-42,11,88,148,22,0,0,0,2,122,249,248,94,16,38,5,0,3,36,19,0,80,172,248,250,127,102,69,124,122,85,243,248,249,251,151,49,170,204,151,31,0,13,33,113,203,182,74,
-0,10,49,207,250,204,18,0,0,0,0,88,148,19,48,159,60,58,209,248,194,9,0,2,50,50,2,0,5,123,176,249,248,112,19,0,0,0,0,0,23,90,124,252,253,181,18,8,
-73,102,94,38,28,2,0,33,24,0,14,38,6,0,0,0,0,9,81,66,54,78,9,0,0,0,0,0,5,123,124,6,9,39,11,88,148,22,0,2,50,50,2,0,0,0,113,249,
-248,249,248,248,248,248,225,166,70,23,88,102,70,124,122,6,0,45,185,235,249,252,254,252,166,0,13,33,113,203,182,74,0,10,33,39,88,28,0,0,0,0,0,88,148,19,133,252,
-249,225,28,0,0,0,0,2,50,50,2,0,5,123,131,43,8,34,19,0,0,0,0,0,23,90,53,138,179,138,18,8,73,113,219,249,204,20,0,33,24,0,14,38,6,0,0,0,
-0,9,81,66,54,78,9,0,0,0,0,0,5,123,124,6,9,39,11,88,148,22,0,2,122,249,248,94,0,0,15,36,8,34,19,0,0,11,124,194,162,23,88,102,70,166,249,248,
-249,250,157,75,17,25,169,204,153,30,0,83,188,194,132,12,7,33,39,100,204,248,198,18,0,0,0,0,81,152,149,48,22,209,249,197,9,0,2,50,50,2,0,0,0,7,81,111,
-250,248,90,0,0,0,0,0,0,104,250,250,181,179,142,87,96,74,42,71,18,0,0,1,33,24,0,14,38,6,0,0,9,82,71,2,0,58,80,8,0,0,0,5,123,124,6,0,
-0,9,39,12,88,148,24,50,50,2,0,0,0,108,248,248,250,248,246,248,248,248,250,233,134,5,18,89,102,69,124,116,34,162,236,250,248,249,252,233,153,30,0,83,188,194,132,12,
-7,33,39,88,28,0,0,0,0,0,0,0,81,159,231,249,248,248,115,12,0,0,2,50,50,2,0,0,0,7,81,26,58,20,0,0,0,0,0,0,0,22,89,53,138,179,142,87,
-96,74,58,214,248,198,18,1,33,24,0,14,38,6,0,0,9,82,71,2,0,58,80,8,0,0,0,5,123,124,6,0,0,9,39,12,88,148,24,122,249,248,94,0,0,0,0,15,
-58,20,0,0,0,3,74,159,124,5,18,89,151,246,252,252,251,147,31,27,62,16,25,169,204,147,93,178,182,98,54,83,40,38,88,28,18,198,248,198,18,0,0,0,46,178,179,45,
-207,248,196,47,10,1,50,50,2,0,0,0,0,0,3,32,113,249,248,90,0,0,0,0,90,248,249,150,51,142,203,182,84,27,27,28,62,16,0,0,1,33,24,0,14,38,4,8,
-82,71,2,0,0,0,59,80,8,0,5,123,124,6,0,0,0,0,9,39,10,88,169,68,2,0,0,0,108,248,248,249,249,241,74,176,248,250,250,248,228,132,5,18,90,102,65,122,
-191,234,249,249,250,248,155,169,204,147,93,178,182,98,54,83,40,38,88,28,0,0,1,0,0,0,0,0,61,238,253,209,105,248,248,115,10,1,50,50,2,0,0,0,0,0,3,32,
-30,34,5,0,0,0,0,0,0,0,22,90,51,142,203,182,84,27,27,44,212,248,198,18,1,33,24,0,14,38,4,8,82,71,2,0,0,0,59,80,8,0,5,123,124,6,0,0,
-0,0,9,39,10,88,200,250,248,94,0,0,0,0,3,32,30,34,5,0,3,70,71,8,122,122,5,93,247,251,250,252,186,131,7,0,27,64,15,23,162,204,192,176,70,11,37,68,
-86,83,26,0,6,49,199,248,198,18,0,52,162,117,128,235,249,194,9,8,34,52,48,2,0,0,0,0,0,3,36,19,0,104,249,248,90,0,0,90,248,248,94,20,82,98,185,201,
-150,48,3,0,27,64,16,0,0,1,33,24,0,12,37,80,70,2,0,0,6,32,2,58,80,13,123,124,6,0,0,0,0,0,0,8,34,52,120,149,22,0,0,113,248,248,249,248,
-239,70,35,18,197,250,248,248,248,228,132,5,20,91,114,179,244,251,248,248,249,172,15,23,162,204,192,176,70,11,37,68,86,83,26,0,6,33,4,0,0,0,0,66,234,251,226,157,
-22,94,248,248,112,52,48,2,0,0,0,0,0,3,36,19,0,16,38,5,0,0,0,0,0,0,0,20,82,98,185,201,150,48,3,0,43,212,248,198,18,1,33,24,0,12,37,80,
-70,2,0,0,6,32,2,58,80,13,123,124,6,0,0,0,0,0,0,8,34,123,251,252,108,0,0,0,0,3,36,19,0,16,35,10,68,71,3,0,5,122,165,243,248,250,251,251,
-83,123,122,5,0,28,64,17,88,194,204,166,25,7,38,56,96,85,8,3,38,15,18,198,248,198,66,164,120,68,207,250,229,31,0,1,50,65,12,0,0,0,0,0,3,36,19,0,
-0,0,104,249,248,90,90,248,248,94,0,7,81,102,97,148,188,139,18,0,0,28,64,18,0,0,1,33,20,6,83,88,7,0,0,6,38,15,0,0,63,164,128,6,0,0,0,0,
-0,0,0,1,50,65,12,88,148,22,118,248,248,249,248,239,58,0,15,87,77,177,248,248,248,248,228,132,1,39,197,245,250,252,252,248,140,28,64,17,88,194,204,166,25,7,38,56,
-96,85,8,3,38,15,0,0,0,0,66,235,251,213,18,88,148,22,94,248,249,132,12,0,0,0,0,0,3,36,19,0,0,0,16,38,5,0,0,0,0,0,0,7,81,102,97,148,
-188,139,18,0,0,44,212,248,198,18,1,33,20,6,83,88,7,0,0,6,38,15,0,0,63,164,128,6,0,0,0,0,0,0,0,1,122,250,248,150,148,22,0,0,3,36,19,0,
-0,0,15,87,70,2,0,0,0,85,249,252,248,249,252,185,102,65,125,122,11,0,30,97,175,172,175,203,155,51,38,88,51,52,81,42,11,0,0,18,198,249,235,130,68,207,248,194,
-95,148,24,50,48,11,37,12,0,0,0,3,36,19,0,0,0,0,0,104,249,248,248,248,94,0,10,79,102,79,85,71,138,179,138,18,0,0,30,32,0,0,0,0,33,86,66,16,
-36,5,5,38,14,0,0,5,123,154,83,8,0,0,0,0,0,0,2,50,48,11,37,12,88,197,249,248,249,248,239,54,0,3,67,75,35,13,176,248,248,248,248,227,130,157,240,251,
-251,250,252,195,11,0,30,97,175,172,175,203,155,51,38,88,51,52,81,42,11,0,0,0,0,66,235,251,213,18,0,0,88,148,24,126,249,248,114,12,0,0,0,3,36,19,0,0,
-0,0,0,16,38,5,0,0,0,0,10,79,102,79,85,71,138,179,138,18,0,0,46,205,248,198,18,0,33,86,66,16,36,5,5,38,14,0,0,5,123,154,83,8,0,0,0,0,
-0,0,2,122,249,248,117,12,88,148,22,3,36,19,0,0,0,3,67,75,35,4,0,0,81,243,248,252,252,249,155,98,93,102,35,124,79,0,74,178,178,69,24,168,206,164,100,25,
-8,34,71,85,11,0,0,0,66,235,251,213,210,248,194,9,0,90,169,68,2,0,8,39,12,0,3,36,19,0,0,0,0,0,0,0,156,249,248,150,0,10,79,102,76,26,60,197,
-69,138,179,138,18,0,0,0,0,0,0,8,79,83,22,0,13,37,37,13,0,0,5,123,124,6,60,79,8,0,0,0,0,3,50,50,2,0,8,39,128,250,252,250,248,234,54,0,
-3,70,71,43,23,38,10,176,248,248,248,249,243,246,249,249,250,251,151,124,79,0,74,178,178,69,24,168,206,164,100,25,8,34,71,85,11,0,0,0,66,235,251,213,18,0,0,0,
-0,90,169,68,96,248,248,115,12,0,3,36,19,0,0,0,0,0,0,0,16,38,5,0,0,10,79,102,76,26,45,79,48,138,179,138,18,0,0,18,198,248,198,26,79,83,22,0,
-13,37,37,13,0,0,5,123,124,6,60,79,8,0,0,0,0,3,122,249,248,94,8,39,12,88,149,55,19,0,0,0,3,70,71,43,23,38,5,81,243,248,248,249,251,190,30,25,
-25,47,2,3,6,73,178,178,74,0,10,48,175,209,162,27,3,42,39,54,82,13,0,52,164,130,213,248,248,198,9,0,1,47,121,149,22,0,0,34,100,14,33,19,0,0,0,0,
-0,0,0,90,248,248,249,248,96,79,102,76,27,48,198,248,202,54,138,179,138,18,0,0,0,0,9,82,70,6,30,22,3,43,43,4,0,5,123,124,6,0,0,60,78,8,0,0,
-1,47,50,2,0,0,0,126,249,248,251,252,236,54,0,3,70,71,5,110,124,21,39,11,176,248,249,252,250,251,252,248,249,153,2,3,6,73,178,178,74,0,10,48,175,209,162,27,
-3,42,39,54,82,13,0,66,235,251,213,18,0,0,0,0,1,47,121,149,22,94,248,249,155,14,33,19,0,0,0,0,0,0,0,0,0,16,39,3,9,79,102,76,27,32,0,16,
-84,54,138,179,138,18,0,0,18,198,248,216,83,6,30,22,3,43,43,4,0,5,123,124,6,0,0,60,78,8,0,0,1,120,249,248,94,0,0,8,37,14,110,156,22,0,0,3,
-70,71,5,110,124,21,108,243,248,248,249,250,147,132,123,5,5,0,0,0,72,178,178,74,0,10,33,39,95,173,202,155,57,9,10,33,55,82,60,163,120,68,210,248,248,201,18,0,
-1,22,4,88,148,19,19,149,93,58,26,0,37,19,0,0,0,0,90,248,248,94,101,249,250,156,76,27,48,199,248,203,36,89,56,138,179,138,18,0,0,9,82,71,3,0,0,33,
-49,9,12,38,11,123,124,6,0,0,0,0,66,79,8,0,1,22,4,0,0,0,126,248,248,250,249,238,165,16,3,70,71,3,0,7,122,122,19,38,11,183,252,250,249,248,252,252,
-132,0,0,0,72,178,178,74,0,10,33,39,95,173,202,155,57,9,10,33,55,82,74,235,251,213,18,0,11,3,0,0,1,22,4,88,148,19,106,252,250,128,26,0,37,19,0,0,
-0,0,0,0,0,0,12,40,79,102,76,27,32,3,0,0,20,89,56,138,179,138,18,0,0,26,216,250,199,18,0,33,49,9,12,38,11,123,124,6,0,0,0,0,66,79,8,0,
-90,248,248,94,0,0,0,0,8,58,26,86,141,16,3,70,71,3,0,7,122,165,244,249,248,249,250,149,36,7,122,122,149,13,0,74,178,178,74,0,10,34,40,88,28,22,167,207,
-158,31,0,13,33,94,189,116,65,207,248,198,204,249,199,18,0,0,0,0,83,140,140,84,34,23,34,62,156,39,0,0,0,90,248,248,94,0,8,146,251,250,107,48,199,248,203,26,
-44,29,87,56,138,179,138,18,9,82,71,2,0,0,6,34,39,21,0,19,143,127,6,0,0,0,0,0,12,84,77,7,0,0,0,0,0,126,248,248,249,249,233,64,76,137,86,71,
-3,0,0,0,5,122,122,15,55,174,247,249,248,248,248,241,159,13,0,74,178,178,74,0,10,34,40,88,28,22,167,207,158,31,0,13,33,105,240,251,213,18,0,0,17,36,3,0,
-0,0,0,0,83,140,140,147,249,249,112,62,156,39,0,0,0,0,0,0,0,0,8,82,102,77,26,32,3,0,0,8,44,29,87,56,138,179,138,18,9,82,84,198,248,198,23,34,
-39,21,0,19,143,127,6,0,0,0,0,0,12,84,77,94,248,248,94,0,0,0,0,3,34,23,34,12,76,137,86,71,3,0,0,0,85,249,252,248,250,250,149,36,3,0,5,128,
-141,113,76,178,178,74,0,10,34,40,88,28,0,6,50,168,203,156,33,0,60,175,127,108,209,248,194,9,18,202,249,199,18,0,0,0,18,168,169,52,19,0,58,174,64,0,0,0,
-90,248,248,94,0,12,79,102,144,249,249,216,248,203,27,57,33,0,19,88,56,138,179,142,94,71,2,0,0,6,38,13,0,33,28,123,131,43,6,0,0,0,0,0,0,14,83,79,
-14,0,0,0,130,248,248,249,248,230,56,36,16,130,177,25,0,0,0,0,0,5,117,121,165,241,249,248,248,248,248,250,233,125,76,178,178,74,0,10,34,40,88,28,0,6,50,168,
-203,156,33,0,74,237,251,222,28,0,0,0,0,19,36,3,0,0,0,0,18,168,169,52,106,248,249,203,64,0,0,0,0,0,0,0,0,12,79,102,79,48,32,2,0,0,10,57,
-33,0,19,88,56,138,179,142,94,71,2,18,198,248,206,30,0,33,28,123,131,43,6,0,0,0,0,0,0,14,144,250,248,94,0,0,0,0,3,36,19,0,8,36,16,130,177,25,
-0,0,0,81,243,248,252,252,249,160,36,2,0,0,10,66,0,142,179,178,74,0,10,33,40,88,28,0,6,38,13,21,165,204,150,75,156,121,82,217,250,197,9,0,0,18,202,249,
-199,18,0,22,147,83,105,154,19,48,159,59,38,13,0,0,126,248,94,3,8,73,102,76,26,127,249,248,219,28,62,36,0,0,0,20,88,54,142,203,170,20,0,0,6,38,14,0,
-0,6,140,136,6,14,35,6,0,0,0,0,0,0,14,83,85,12,0,130,248,248,249,248,230,50,0,8,88,74,89,148,22,0,0,4,6,0,27,195,247,249,249,248,248,248,250,249,
-248,234,186,178,74,0,10,33,40,88,28,0,6,38,13,21,165,204,150,88,233,251,216,67,82,13,0,0,0,0,19,36,3,0,0,22,147,83,105,154,19,124,252,249,115,13,0,0,
-0,0,0,3,8,73,102,76,26,38,36,6,0,10,62,36,0,0,0,20,88,54,142,203,170,20,0,0,24,206,248,198,18,6,140,136,6,14,35,6,0,0,0,0,0,90,248,250,
-148,12,0,0,0,3,36,19,0,0,0,8,88,74,89,148,22,0,81,243,248,248,249,251,189,41,36,6,0,10,62,37,72,170,178,74,0,10,33,40,88,28,0,6,38,14,0,0,
-20,159,203,194,128,64,209,249,207,89,13,0,0,0,18,202,249,199,39,148,90,36,19,81,152,149,48,0,2,38,13,0,0,50,0,6,35,46,69,28,47,198,248,249,248,129,37,0,
-0,0,0,0,17,82,99,168,180,138,18,6,38,14,0,0,5,123,124,38,24,0,13,38,6,0,0,0,0,0,0,13,78,84,136,248,248,249,248,230,45,0,3,68,71,36,12,88,
-148,22,0,6,37,31,168,246,251,252,248,249,128,191,249,248,250,253,241,89,0,10,33,40,88,28,0,6,38,14,0,0,20,159,206,241,251,212,27,32,55,82,13,0,0,0,0,19,
-36,3,22,148,90,36,19,81,152,149,125,248,248,114,13,0,0,0,0,6,35,46,69,28,32,1,13,34,16,60,37,0,0,0,0,0,17,82,99,168,180,138,18,6,38,31,198,248,
-199,132,124,38,24,0,13,38,6,0,0,0,90,248,248,102,78,84,12,0,3,36,19,0,0,0,3,68,71,36,12,88,148,96,243,248,249,249,250,147,132,121,17,34,16,60,37,0,
-178,178,74,0,10,33,40,88,28,0,6,38,14,0,0,0,0,66,195,209,173,213,248,197,41,55,82,13,0,0,0,18,202,250,231,101,36,19,0,46,174,152,16,7,44,10,36,14,
-0,0,0,0,10,33,24,46,199,248,203,117,250,249,90,0,0,0,0,0,6,82,102,56,138,179,141,53,14,0,0,5,123,124,6,1,33,24,0,14,38,6,0,0,0,0,0,0,
-13,172,250,248,249,248,230,45,0,3,70,71,2,5,38,13,88,148,23,0,32,183,246,249,248,252,252,132,73,42,171,250,253,253,250,207,31,33,40,88,28,0,6,38,14,0,0,0,
-0,79,242,254,237,47,0,13,33,55,82,13,0,0,0,0,19,55,149,89,36,19,0,46,174,152,16,98,249,248,113,14,0,0,0,0,10,33,24,30,3,0,0,20,82,41,0,0,
-0,0,0,0,6,82,102,56,138,179,141,53,14,0,18,199,252,226,23,1,33,24,0,14,38,6,0,90,248,248,94,0,13,78,84,16,32,19,0,0,0,3,70,71,2,5,38,13,
-141,250,249,248,249,251,152,33,7,122,122,25,73,38,0,74,178,74,0,10,33,40,88,28,0,6,38,14,0,0,0,0,52,157,124,177,245,252,200,9,13,33,54,80,28,0,0,0,
-40,233,251,206,35,0,53,157,48,81,148,26,70,68,6,36,14,0,0,0,0,28,70,200,248,203,27,59,163,252,248,90,0,0,0,9,82,66,24,86,56,140,190,144,18,0,6,122,
-124,6,0,0,1,32,12,0,14,38,5,0,22,2,0,1,169,252,251,251,249,230,41,0,3,70,71,3,0,0,7,39,13,88,141,83,189,246,250,248,248,248,184,153,46,32,81,229,
-253,250,248,248,213,63,88,28,0,6,38,14,0,0,0,0,66,233,252,238,206,156,24,0,13,33,54,80,28,0,0,0,24,155,110,34,18,0,53,157,48,81,148,26,138,250,248,113,
-14,0,0,0,0,28,56,10,0,0,10,59,109,140,11,0,0,0,0,9,82,66,24,86,56,140,190,144,18,0,6,132,225,248,198,18,1,32,12,0,14,38,93,248,249,96,0,1,
-63,133,86,96,27,0,0,0,3,70,71,3,0,0,7,107,244,250,252,250,251,156,56,10,0,5,127,153,46,32,78,178,74,0,10,33,40,88,28,0,6,38,14,0,0,0,0,52,
-167,118,67,211,252,243,148,17,0,12,30,74,99,16,0,13,141,101,208,249,198,18,55,52,0,0,88,148,25,70,68,6,36,14,0,0,24,46,200,249,205,26,62,37,11,175,252,248,
-90,0,9,82,71,3,0,17,86,78,142,179,137,30,117,124,13,0,0,0,0,0,2,0,0,14,32,44,53,4,0,142,252,253,252,251,235,51,0,3,70,71,3,0,0,0,0,7,
-38,11,120,221,249,249,248,249,248,113,66,140,112,86,190,182,192,248,248,249,249,223,52,0,6,38,14,0,0,0,0,66,236,251,213,36,163,204,144,17,0,12,30,74,99,16,0,13,
-141,89,45,45,1,0,55,52,0,0,88,148,25,138,250,248,113,14,0,0,24,30,11,38,8,9,62,37,11,129,142,11,0,0,9,82,71,3,0,17,86,78,142,179,137,30,117,124,
-30,198,248,198,18,0,2,0,0,99,249,249,128,4,0,4,131,179,153,90,82,12,0,3,70,71,3,0,0,0,81,243,249,248,252,253,190,44,9,38,8,9,66,140,112,86,190,180,
-4,8,33,40,88,28,0,6,38,14,0,0,0,0,52,167,134,75,207,248,198,166,204,144,17,0,48,63,56,82,13,7,47,36,32,202,249,199,18,0,0,0,0,88,148,24,70,68,
-6,36,12,21,48,198,248,205,54,61,35,0,0,5,175,252,248,96,82,71,2,0,0,3,46,90,56,136,179,169,118,16,61,16,0,0,0,0,0,0,0,0,49,69,10,0,144,248,
-249,252,253,241,114,82,18,66,70,3,0,0,0,0,0,0,3,80,201,250,253,249,248,248,130,61,35,0,142,179,175,99,9,170,249,249,250,249,207,32,38,14,0,0,0,0,66,236,
-251,215,18,0,19,163,204,144,17,0,48,63,56,82,13,7,47,36,16,16,36,3,0,0,0,0,0,88,148,24,138,250,248,113,12,21,33,1,0,8,38,61,35,0,0,5,129,141,
-6,8,82,71,2,0,0,3,46,90,56,136,179,169,118,16,61,32,198,248,198,18,0,0,90,248,249,138,10,0,0,0,24,156,183,137,87,82,18,66,70,3,0,0,0,81,243,248,
-248,251,251,203,160,22,0,8,38,61,35,0,142,179,175,99,40,34,39,88,28,0,6,38,14,0,0,0,0,52,164,118,82,218,248,194,55,36,162,204,145,56,53,16,31,55,81,17,
-32,19,0,18,202,249,199,18,0,0,0,0,98,150,24,70,68,6,47,54,198,248,203,26,61,56,7,0,0,0,5,174,252,250,135,2,0,0,6,38,10,16,88,62,171,179,134,15,
-30,64,14,1,48,22,0,0,0,45,53,17,35,147,248,248,249,249,240,191,136,82,100,68,0,0,0,0,0,0,0,0,59,207,249,250,250,252,249,109,61,56,7,72,170,179,142,12,
-40,38,181,250,249,248,248,214,39,0,0,0,0,66,235,251,216,70,14,1,47,36,162,204,145,56,53,16,31,55,81,17,32,19,0,0,19,36,3,0,0,0,0,0,98,150,24,138,
-250,248,120,39,0,0,0,8,61,56,7,0,0,0,5,127,140,83,70,2,0,0,6,38,10,16,88,62,171,179,134,15,30,64,31,198,249,203,18,90,248,249,127,17,35,6,0,3,
-36,38,142,179,136,82,100,68,0,0,0,0,81,243,248,248,250,252,187,58,87,148,22,8,61,56,7,72,170,179,142,12,43,58,86,27,0,6,38,14,0,0,0,0,52,164,120,68,
-207,249,208,60,47,4,18,162,208,168,19,0,13,32,55,95,28,0,0,0,18,202,249,199,18,0,0,0,0,89,148,24,67,76,46,205,248,203,27,62,35,9,38,10,0,0,0,10,
-197,253,248,90,0,6,38,14,0,0,22,165,141,135,179,138,18,28,58,53,46,6,0,0,46,55,4,0,155,249,248,249,248,221,58,145,179,163,101,79,11,0,0,0,0,0,0,60,
-208,249,250,249,248,250,194,79,35,9,101,181,178,76,112,125,43,58,89,172,248,248,249,248,212,27,0,0,66,235,251,213,18,27,58,53,47,4,18,162,208,168,19,0,13,32,55,95,
-28,0,0,0,0,19,36,3,0,0,0,0,0,89,148,24,136,250,249,111,15,0,10,62,35,9,38,10,0,0,0,10,163,167,12,0,0,6,38,14,0,0,22,165,141,135,179,138,
-18,28,58,68,208,248,216,248,249,128,4,0,14,36,9,34,19,0,20,145,179,163,101,79,11,0,0,81,243,248,248,250,252,187,54,31,14,88,152,79,35,9,101,181,178,76,112,125,
-142,93,53,1,5,38,14,0,0,0,0,52,164,120,68,207,248,194,66,76,17,0,1,57,178,170,22,0,0,13,52,62,79,13,0,0,0,18,202,249,199,18,0,0,0,0,88,148,
-42,96,213,248,207,28,62,37,0,0,10,39,10,0,9,75,65,176,252,248,93,38,14,0,0,5,122,131,88,57,138,179,138,19,59,76,17,0,1,46,54,5,9,158,248,248,250,248,
-221,36,0,24,177,199,135,84,85,12,0,0,0,0,62,208,249,250,248,248,248,106,128,163,23,69,181,190,81,0,14,139,142,93,53,6,164,249,248,248,248,212,27,66,235,251,213,18,
-0,1,59,76,17,0,1,57,178,170,22,0,0,13,52,62,79,13,0,0,0,0,19,36,3,0,0,0,0,0,88,148,42,147,250,248,103,11,62,37,0,0,10,39,10,0,9,75,
-65,130,140,10,5,38,14,0,0,5,122,131,88,57,138,179,138,19,59,76,34,216,248,249,137,5,9,22,0,14,58,21,0,0,0,24,177,199,135,84,85,12,81,243,248,248,250,252,
-187,52,0,6,22,11,128,163,23,69,181,190,81,0,14,139,168,136,13,36,36,11,0,0,0,0,52,164,120,72,207,248,195,57,44,28,59,16,39,51,19,55,84,12,0,31,28,29,
-54,82,13,0,0,0,18,202,249,199,18,0,0,0,0,102,168,204,250,217,29,57,36,0,0,0,0,10,33,16,79,68,1,5,175,252,249,97,0,0,5,122,122,5,17,87,60,138,
-180,161,58,28,59,16,39,52,4,0,162,250,249,249,249,225,41,0,3,70,87,149,179,130,82,84,12,0,0,52,205,249,250,248,248,248,103,59,36,81,156,173,175,81,35,16,29,44,
-168,136,13,36,41,166,248,248,248,248,223,236,251,213,18,0,3,50,44,28,59,16,39,51,19,55,84,12,0,31,28,29,54,82,13,0,0,0,0,19,34,3,0,0,0,0,0,102,
-160,28,138,250,248,127,36,0,0,0,0,10,33,16,79,68,1,5,129,141,41,11,0,0,5,122,122,5,17,87,60,138,180,161,58,28,128,248,249,250,199,18,22,87,31,24,28,32,
-6,0,3,70,87,149,179,130,82,138,243,248,248,249,251,187,52,0,0,0,7,59,36,81,156,173,175,81,35,16,29,44,32,122,125,46,38,20,23,0,0,52,164,120,72,207,248,195,
-59,46,1,0,26,73,49,1,0,0,50,82,40,14,0,12,32,55,82,13,0,0,0,18,202,249,199,18,0,0,24,47,218,252,208,83,94,33,0,0,0,0,0,0,14,93,73,1,
-0,0,11,185,252,248,105,5,122,122,5,0,0,17,85,60,159,193,138,18,26,73,49,1,0,154,248,249,251,249,221,42,34,11,68,70,3,25,150,179,127,82,84,12,40,151,249,250,
-248,248,248,100,60,34,0,69,179,179,86,0,16,52,43,86,32,122,125,46,38,25,170,248,248,249,252,251,217,18,0,4,52,46,1,0,26,73,49,1,0,0,50,82,40,14,0,12,
-32,55,82,13,0,0,0,0,18,35,3,0,0,0,24,31,88,148,23,138,250,249,90,0,0,0,0,0,14,93,73,1,0,0,11,144,142,25,23,5,122,122,5,0,0,17,85,60,
-159,193,138,101,249,250,134,198,248,198,18,30,101,42,0,13,34,11,68,70,3,25,150,179,168,247,250,248,249,248,169,52,0,0,0,10,60,34,0,69,179,179,86,0,16,52,43,86,
-0,5,129,127,30,58,8,0,52,164,120,72,207,248,195,60,48,2,0,2,44,59,55,15,0,0,0,70,89,11,0,0,13,33,55,82,13,0,0,0,18,202,249,199,18,24,48,198,
-248,221,160,74,82,66,2,0,0,0,0,9,80,73,35,8,0,0,14,14,179,253,249,167,122,5,0,0,0,0,20,102,85,138,179,139,59,59,55,15,158,248,248,249,249,233,57,0,
-14,88,70,2,0,0,26,152,179,126,78,89,145,248,250,248,248,248,96,62,37,0,74,178,173,123,135,31,31,44,100,34,0,5,129,127,30,58,13,162,249,252,251,249,219,27,4,53,
-48,2,0,2,44,59,55,15,0,0,0,70,89,11,0,0,13,33,55,82,13,0,0,0,0,19,36,3,0,24,33,1,0,88,152,74,146,250,248,90,0,0,0,9,80,73,35,8,
-0,0,14,14,135,150,26,119,122,5,0,0,0,0,20,102,85,138,206,252,250,131,55,32,198,248,199,46,44,86,30,0,14,88,70,2,0,0,26,184,251,252,250,250,248,151,52,0,
-0,0,10,62,37,0,74,178,181,163,135,31,31,44,100,34,10,0,5,131,139,20,36,54,163,120,72,207,248,195,61,47,1,0,2,49,51,3,25,64,16,1,35,15,48,84,13,0,
-0,13,33,55,82,13,0,0,0,18,202,249,203,62,198,248,203,27,129,163,25,69,70,3,0,0,9,82,71,1,8,37,7,0,0,17,35,172,252,252,92,0,0,0,0,4,49,53,
-82,58,138,193,162,21,29,182,248,248,249,248,221,53,87,29,62,73,35,5,0,0,0,27,153,179,144,153,248,250,248,248,243,96,62,37,0,74,178,178,72,0,93,162,58,86,35,32,
-10,0,5,131,139,20,36,72,245,251,249,248,248,218,75,47,1,0,2,49,51,3,25,64,16,1,35,15,48,84,13,0,0,13,33,55,82,13,0,0,0,0,18,31,24,32,1,0,
-0,10,129,163,25,138,250,248,90,0,9,82,71,1,8,37,7,0,0,17,35,123,178,118,3,0,0,0,0,4,49,53,82,127,252,253,196,21,25,64,33,198,249,202,18,30,87,29,
-62,73,35,5,0,0,81,244,252,253,252,248,151,58,0,0,0,10,62,37,0,74,178,186,231,243,145,162,58,86,35,32,39,8,17,41,124,113,61,172,119,71,207,248,195,61,46,1,
-0,4,49,51,3,0,0,26,61,42,15,0,0,50,85,17,0,0,13,33,55,82,13,0,0,0,18,206,250,238,248,203,27,62,37,88,148,23,70,70,0,8,82,71,2,0,0,7,
-37,8,17,36,6,115,201,252,248,90,0,0,5,54,46,0,15,83,86,159,180,140,165,249,250,249,248,217,27,0,38,102,75,0,12,38,6,0,0,0,30,172,223,251,250,250,248,243,
-97,62,37,0,74,178,178,74,0,10,33,114,185,47,0,10,39,8,17,41,124,113,76,236,251,236,248,248,248,250,224,28,0,4,49,51,3,0,0,26,61,42,15,0,0,50,85,17,
-0,0,13,33,55,82,13,0,0,0,0,33,53,1,0,0,10,62,37,88,148,23,138,250,248,95,82,71,2,0,0,7,37,8,17,36,6,115,170,136,9,0,0,0,5,54,46,0,
-100,250,251,194,180,138,18,26,61,57,201,248,198,18,38,102,75,0,12,38,6,81,243,248,249,252,253,198,90,78,12,0,10,62,37,0,74,178,186,231,248,248,245,159,185,47,0,10,
-8,46,38,2,0,134,182,122,91,207,248,195,61,46,0,0,0,43,51,3,0,0,0,0,48,66,15,0,0,0,50,42,0,0,0,13,33,55,82,13,0,0,21,105,243,249,241,62,
-62,37,0,0,112,157,22,67,67,77,69,2,0,0,0,0,7,46,38,7,122,119,18,174,252,248,90,5,54,46,0,0,0,48,102,61,140,227,252,249,249,250,219,27,0,13,78,65,
-81,29,0,14,38,6,0,0,42,120,202,247,251,250,247,101,58,37,0,74,189,185,74,0,10,33,40,88,106,148,22,0,8,46,38,2,0,143,239,251,217,25,158,248,250,249,248,217,
-27,43,51,3,0,0,0,0,48,66,15,0,0,0,50,42,0,0,0,13,33,55,82,13,0,0,21,82,70,36,32,30,62,37,0,0,112,157,22,136,250,250,135,2,0,0,0,0,
-7,46,38,7,122,119,18,127,142,11,0,5,54,46,0,90,248,249,158,61,138,179,138,18,48,66,32,198,248,201,90,65,81,29,0,14,107,243,248,248,249,248,215,194,117,77,82,23,
-58,37,0,74,189,185,128,243,248,249,249,247,153,148,22,0,17,38,36,10,50,149,173,152,210,249,197,61,45,0,0,0,0,14,3,0,0,0,3,36,15,24,64,18,0,0,0,0,
-0,0,0,0,13,33,55,82,12,19,96,221,250,241,251,237,69,0,0,0,24,130,155,31,102,98,5,0,0,0,0,0,16,38,40,127,122,5,0,5,176,252,248,125,45,0,0,0,
-0,10,21,88,184,252,253,252,249,216,84,14,11,84,50,0,29,90,30,0,14,37,4,41,101,102,80,168,243,248,137,102,42,0,74,178,185,120,20,8,33,40,88,28,0,88,148,22,
-17,38,36,10,64,231,253,232,33,34,16,178,249,248,248,248,217,39,3,0,0,0,3,36,15,24,64,18,0,0,0,0,0,0,0,0,13,33,55,82,12,19,84,102,89,28,96,174,
-55,0,0,0,24,130,155,31,158,251,248,90,0,0,0,0,16,38,40,127,122,5,0,5,129,140,16,54,45,0,90,248,248,100,21,85,62,138,180,154,32,24,64,31,200,250,209,18,
-29,90,30,81,244,249,248,249,248,151,80,158,168,109,77,102,42,0,74,178,185,120,20,87,245,249,250,249,243,141,148,22,55,1,9,76,164,118,73,230,252,199,75,44,0,0,0,0,
-0,0,0,31,3,1,34,19,0,0,27,64,18,0,0,0,0,0,0,0,0,13,33,53,82,96,221,250,207,41,212,251,231,39,0,0,0,19,127,182,80,64,68,3,0,0,0,15,
-34,6,126,140,9,0,0,0,5,177,253,249,90,0,0,0,0,0,5,172,250,250,252,253,235,43,23,64,85,48,0,0,0,30,90,30,0,10,63,100,102,52,0,36,161,196,142,84,
-80,82,178,178,74,20,63,43,39,88,28,0,0,0,88,156,55,1,9,89,235,251,213,132,122,21,69,44,158,248,248,248,248,221,27,31,3,1,34,19,0,0,27,64,18,0,0,0,
-0,0,0,0,0,13,33,53,82,84,102,92,21,7,64,124,148,22,0,0,0,19,127,182,80,135,250,248,90,0,0,15,34,6,126,140,9,0,0,0,5,130,158,49,0,90,248,248,
-94,0,0,16,85,62,150,184,138,18,23,64,97,209,248,198,18,30,143,244,248,248,250,248,151,52,0,36,150,170,142,84,80,82,178,178,74,20,63,43,107,247,249,248,248,243,141,156,
-149,19,48,164,121,72,207,248,224,154,53,32,6,0,0,0,0,0,47,102,63,31,16,0,0,0,0,26,63,18,0,0,0,0,0,0,0,0,9,43,104,221,250,207,24,62,50,201,
-251,231,39,0,0,6,84,151,156,22,70,70,3,0,20,35,6,122,122,8,2,0,0,0,8,57,187,252,248,90,0,0,0,5,167,248,248,251,250,233,187,143,27,89,86,14,0,0,
-0,0,30,89,27,37,101,102,54,0,0,0,42,177,189,108,128,204,182,74,0,7,43,73,90,25,0,0,0,0,20,112,149,19,62,234,251,213,18,5,126,150,53,32,6,158,248,248,
-248,248,227,118,63,31,16,0,0,0,0,26,63,18,0,0,0,0,0,0,0,0,9,43,93,102,90,17,6,62,34,15,111,149,22,0,0,6,84,151,156,22,138,250,248,90,20,35,
-6,122,122,8,2,0,0,0,8,57,148,139,98,248,248,94,0,0,0,0,16,98,71,138,179,143,27,89,86,31,198,248,198,93,244,250,249,249,248,151,54,0,0,0,42,177,189,108,
-128,204,182,74,0,7,43,73,90,98,243,248,248,248,244,157,136,152,153,115,72,207,248,194,50,145,122,18,38,6,0,0,0,0,27,92,102,70,0,0,0,0,0,0,26,62,18,0,
-0,0,0,0,0,0,19,97,221,251,219,36,58,37,0,18,202,251,231,39,9,82,67,22,128,156,22,69,70,3,19,8,122,122,5,0,0,0,0,0,38,45,5,175,252,248,90,0,
-5,171,248,248,249,249,223,82,143,137,92,47,22,63,18,0,0,0,0,26,92,100,102,58,30,6,0,10,62,69,155,179,183,196,132,10,6,33,39,90,72,17,0,0,0,1,21,3,
-81,159,232,251,213,18,0,0,42,145,122,18,38,6,158,248,248,248,249,233,118,70,0,0,0,0,0,0,26,62,18,0,0,0,0,0,0,0,19,85,102,96,78,20,58,37,0,0,
-19,112,149,22,9,82,67,22,128,156,22,138,250,248,102,8,122,122,5,0,0,0,0,0,38,45,5,173,252,248,94,0,0,0,0,3,31,30,82,63,143,137,92,47,22,63,35,198,
-248,247,248,249,250,248,150,58,30,6,0,10,62,69,155,179,183,196,132,10,6,33,39,90,72,17,81,243,248,248,248,243,245,203,186,84,207,248,194,9,4,5,122,122,19,38,6,0,
-0,0,0,48,94,102,62,2,0,0,0,11,71,62,62,18,0,0,0,0,0,22,98,221,250,212,70,102,43,0,0,0,18,202,251,232,107,71,2,0,22,130,156,22,69,70,5,122,
-122,5,0,0,0,0,0,0,4,0,0,5,176,252,248,93,171,248,248,249,248,207,36,81,65,82,50,0,0,26,64,18,0,0,0,39,100,102,66,0,13,34,16,60,37,0,98,179,
-179,137,76,84,40,39,87,25,18,64,22,0,0,0,0,0,62,238,253,217,18,0,0,0,4,5,122,122,19,38,6,154,248,248,248,249,233,121,62,2,0,0,0,11,71,62,62,18,
-0,0,0,0,0,22,86,102,91,44,56,102,43,0,0,0,0,19,109,153,96,71,2,0,22,130,156,22,138,250,248,169,122,5,0,0,0,0,0,0,4,0,90,248,252,183,11,0,
-0,0,3,36,19,0,15,81,65,82,50,0,0,26,64,105,247,248,248,249,248,151,66,0,13,34,16,60,37,0,98,179,179,137,76,84,40,39,87,25,18,64,22,81,243,248,248,248,
-252,248,170,235,249,194,9,0,0,0,5,122,122,19,38,6,0,3,36,14,22,92,102,63,2,0,11,80,102,71,26,64,19,0,0,0,22,98,221,250,206,32,66,70,78,13,0,0,
-0,18,203,252,237,40,0,0,0,22,130,156,20,70,158,124,5,0,0,0,0,0,0,0,0,0,0,0,5,176,252,248,248,248,249,248,207,22,0,26,102,75,0,0,0,0,26,64,
-18,0,42,101,102,66,80,29,0,20,73,38,0,70,173,174,168,179,111,83,88,82,25,0,0,22,64,22,0,0,0,66,234,251,227,156,22,0,0,0,0,0,5,122,122,19,38,6,
-154,248,249,248,249,233,121,63,2,0,11,80,102,71,26,64,19,0,0,0,22,86,102,90,16,16,66,70,78,13,0,0,0,0,22,148,177,24,0,0,0,22,130,156,20,139,253,252,
-94,0,0,0,0,0,0,0,0,90,248,248,97,129,142,11,0,3,36,19,0,0,0,26,102,75,0,0,0,0,99,246,248,248,249,250,158,66,80,29,0,20,73,38,0,70,173,174,
-168,179,111,83,88,82,25,0,0,22,64,22,81,243,248,249,251,249,247,250,229,31,0,0,0,0,0,5,122,122,19,36,9,34,19,0,0,23,92,102,61,18,80,102,78,9,0,25,
-64,19,0,22,99,221,250,207,24,59,42,30,55,82,13,0,0,9,91,215,251,231,39,0,0,0,22,128,144,121,154,71,1,0,0,0,0,0,0,0,0,0,0,0,0,14,230,252,
-248,249,248,207,18,0,13,80,55,77,48,0,0,0,0,25,56,54,100,102,52,0,29,87,37,53,42,32,71,168,178,68,43,169,188,128,102,86,8,0,0,0,22,64,22,0,66,234,
-251,213,18,88,148,22,0,0,0,0,0,5,122,122,19,36,9,168,248,248,248,249,233,121,61,18,80,102,78,9,0,25,64,19,0,22,87,102,90,17,6,59,42,30,55,82,13,0,
-0,9,79,76,110,149,22,0,0,0,22,128,144,121,192,250,248,90,0,0,0,0,0,0,90,248,248,94,0,5,129,141,14,34,19,0,0,0,13,80,55,77,48,0,0,81,243,249,
-250,250,250,251,210,18,29,87,37,53,42,32,71,168,178,68,43,169,188,128,102,86,8,0,0,0,22,64,22,81,245,252,249,248,248,247,145,148,22,0,0,0,0,0,5,122,122,19,
-58,21,0,0,0,0,23,90,102,94,102,75,9,13,4,0,25,58,35,97,221,250,206,24,62,37,0,12,33,55,82,11,7,82,71,19,202,236,161,22,0,0,0,22,178,185,27,62,
-62,2,0,0,0,0,0,0,0,0,0,0,9,176,248,252,253,248,219,18,0,13,84,50,0,14,85,48,0,15,3,0,56,102,102,50,0,0,0,36,102,55,0,84,180,169,74,0,
-10,75,181,204,119,74,84,12,0,0,0,22,64,80,234,251,213,18,0,0,88,148,22,0,0,0,0,0,5,122,122,19,58,21,154,248,248,248,249,233,121,94,102,75,9,13,4,0,
-25,58,35,85,102,89,16,6,62,37,0,12,33,55,82,11,7,82,71,1,16,112,149,22,0,0,0,22,178,185,27,133,250,248,90,0,0,0,0,90,248,248,94,0,0,0,5,129,
-152,25,0,0,0,13,84,50,0,14,85,48,81,244,248,248,250,248,158,209,248,198,18,36,102,55,0,84,180,169,74,0,10,75,181,204,119,74,84,12,0,0,0,22,64,67,192,248,
-247,248,248,248,243,141,148,22,0,0,0,0,0,5,124,139,33,34,6,0,0,0,0,34,102,102,97,24,0,19,36,3,0,38,108,221,250,202,24,62,37,0,0,0,13,33,53,78,
-78,68,2,0,18,44,112,150,23,0,5,121,124,128,154,22,67,69,3,0,0,0,0,0,0,0,0,9,180,248,248,249,252,252,248,90,13,84,50,0,0,0,22,96,36,15,29,43,
-99,102,82,16,0,0,10,56,56,84,95,178,173,95,4,8,34,40,120,178,179,100,78,86,12,0,0,0,81,239,251,213,18,0,0,0,0,88,148,22,0,0,0,0,0,5,124,139,
-33,34,6,154,248,248,248,249,235,124,97,24,0,19,36,3,0,38,97,102,86,16,6,62,37,0,0,0,13,33,53,78,78,68,2,0,0,19,112,150,23,0,5,121,124,128,154,22,
-136,250,248,90,0,0,90,248,248,94,0,0,0,0,3,37,137,140,11,0,13,84,50,0,0,0,22,147,245,248,249,249,248,151,82,33,198,248,200,70,56,84,95,178,173,95,4,8,
-34,40,120,178,179,100,78,86,12,0,0,0,67,182,121,137,248,247,248,248,248,243,141,150,31,0,0,0,0,3,40,132,122,19,38,6,0,0,13,79,102,100,102,80,16,0,18,30,
-24,96,221,251,205,23,62,37,0,0,0,0,0,10,36,92,102,15,0,0,0,0,19,102,145,34,121,124,4,22,130,158,20,70,70,3,0,0,0,0,0,0,9,180,248,248,249,248,
-199,181,252,248,144,50,0,0,0,0,1,44,35,0,53,112,103,49,22,63,18,9,62,37,0,95,205,187,71,12,40,34,40,88,28,52,170,179,98,66,83,13,0,72,234,251,221,35,
-0,0,0,0,0,0,88,150,31,0,0,0,0,3,40,132,122,19,38,6,149,248,248,250,251,234,124,80,16,0,18,30,24,84,102,102,32,6,62,37,0,0,0,0,0,10,36,92,
-102,15,0,0,0,0,19,102,145,34,121,124,4,22,130,158,20,138,250,248,90,90,248,248,94,0,0,0,0,3,36,19,5,129,139,24,83,50,0,0,0,0,82,245,249,248,250,248,
-151,49,22,63,34,200,250,206,18,95,205,187,71,12,40,34,40,88,28,52,170,179,98,66,83,13,0,58,160,121,106,241,199,87,243,248,248,248,243,139,151,22,0,0,3,36,19,5,
-122,122,19,38,3,12,83,102,72,30,90,102,83,15,0,34,105,221,250,206,68,62,53,93,13,0,0,0,0,7,82,82,54,80,13,0,0,0,0,0,81,175,135,6,0,0,21,134,
-154,22,69,70,3,0,0,0,0,9,185,248,248,249,248,198,18,5,179,253,250,90,0,0,0,0,0,1,27,57,173,167,72,0,0,22,60,62,34,0,74,178,187,138,28,4,39,58,
-86,26,0,0,53,171,179,88,50,84,77,235,251,213,35,62,21,0,0,0,0,0,0,86,151,22,0,0,3,36,19,5,122,122,19,38,3,154,250,251,250,249,233,124,83,15,0,34,
-94,102,85,36,54,62,53,93,13,0,0,0,0,7,82,82,54,80,13,0,0,0,0,0,81,175,135,6,0,0,21,134,154,22,138,250,248,248,248,94,0,0,0,0,3,36,19,0,
-0,5,134,173,55,0,0,0,0,81,243,248,249,250,251,195,72,0,0,22,60,75,206,248,214,184,187,138,28,4,39,58,86,26,0,0,53,171,179,88,50,84,63,163,113,62,202,250,
-67,22,81,243,248,248,248,243,141,149,22,3,36,19,0,0,5,122,122,15,42,84,102,75,8,0,20,92,102,79,35,96,221,251,202,22,64,83,147,179,93,0,0,0,9,82,68,16,
-32,55,82,13,0,0,0,0,100,155,138,20,0,0,0,18,128,156,22,69,70,3,0,0,9,185,248,248,249,248,194,18,0,13,85,190,252,248,90,0,0,0,0,0,47,176,176,55,
-14,34,2,7,63,70,18,74,178,178,74,28,89,52,38,90,53,2,0,0,0,57,171,179,79,100,240,251,213,18,0,20,64,22,0,0,0,0,0,0,88,149,22,3,36,19,0,0,
-5,122,122,15,42,84,191,250,248,248,248,233,124,79,35,84,102,96,17,5,64,83,147,179,93,0,0,0,9,82,68,16,32,55,82,13,0,0,0,0,100,155,138,20,0,0,0,18,
-128,156,22,178,250,248,150,0,0,0,0,3,36,19,0,0,0,13,85,152,138,11,0,0,81,243,248,248,249,251,202,55,14,34,2,7,63,70,34,214,253,238,87,28,89,52,38,90,
-53,2,0,0,0,57,171,179,79,89,188,115,62,198,248,207,45,61,22,81,243,248,248,248,243,142,148,55,19,0,0,0,0,5,122,128,91,102,75,6,0,16,13,18,88,102,112,221,
-250,204,31,60,49,148,198,148,25,0,0,9,82,71,3,0,13,33,54,82,17,0,0,110,133,14,84,148,22,0,0,0,21,130,156,22,69,70,3,9,190,248,248,249,248,194,18,0,
-13,84,50,5,175,252,248,90,0,15,14,45,175,176,72,14,0,14,19,60,33,22,119,184,178,74,0,6,52,91,90,22,9,38,5,4,9,0,58,167,184,236,251,223,28,0,3,59,
-45,61,22,0,0,0,0,0,0,90,148,55,19,0,0,0,0,5,122,128,91,102,75,151,248,248,248,248,233,124,101,102,82,27,14,60,49,148,198,148,25,0,0,9,82,71,3,0,
-13,33,54,82,17,0,0,110,133,14,84,148,22,0,0,0,21,130,191,249,250,250,248,90,0,0,3,36,19,0,0,0,13,84,50,5,129,142,11,81,243,248,248,249,251,202,72,14,
-0,14,19,60,33,22,119,190,238,250,198,24,52,91,90,22,9,38,5,4,9,0,58,167,178,170,124,107,200,248,204,73,4,20,64,22,81,243,248,248,248,243,158,155,22,0,0,0,
-0,0,19,166,175,80,35,4,0,5,36,9,40,102,118,235,204,21,61,52,138,179,149,78,21,0,9,82,71,2,0,0,0,12,34,70,82,22,121,135,12,0,0,88,148,22,0,0,
-0,22,130,156,22,69,73,191,248,248,249,248,194,14,0,13,84,50,0,0,5,175,252,248,90,2,66,175,176,56,3,34,16,7,61,37,0,74,185,198,89,0,10,33,39,90,90,29,
-14,13,38,37,9,10,23,107,239,254,225,61,82,19,66,71,4,20,64,22,0,0,0,0,0,3,113,155,22,0,0,0,0,0,19,166,175,80,35,4,144,248,249,248,249,235,127,101,
-29,4,61,52,138,179,149,78,21,0,9,82,71,2,0,0,0,12,34,70,82,22,121,135,12,0,0,88,148,22,0,0,0,104,251,252,108,138,250,248,90,3,36,19,0,0,0,13,
-84,50,0,0,5,129,177,243,248,248,250,251,202,56,3,34,16,7,61,37,0,74,185,198,101,198,248,206,54,90,90,29,14,13,38,37,9,10,23,96,183,203,118,208,250,207,80,71,
-0,0,22,64,22,81,243,248,248,249,244,143,147,22,0,0,0,15,86,105,160,125,17,38,6,0,0,45,88,102,102,118,91,59,50,138,179,138,18,23,60,26,78,71,2,0,0,0,
-0,4,42,37,57,166,143,11,0,0,0,0,88,148,22,0,0,0,22,130,156,22,69,161,248,249,248,194,14,0,13,84,50,0,0,0,0,5,175,252,248,117,174,176,64,0,0,1,
-36,65,36,0,74,178,178,90,62,27,29,41,87,24,26,99,153,54,43,40,13,37,76,230,252,242,184,78,48,102,70,1,0,0,22,64,22,0,0,0,3,36,19,91,147,22,0,0,
-0,15,86,105,160,125,17,38,6,144,248,249,250,251,235,127,79,59,50,138,179,138,18,23,60,26,78,71,2,0,0,0,0,4,42,37,57,166,143,11,0,0,0,0,88,148,22,0,
-90,248,248,176,156,22,138,250,248,112,19,0,0,0,13,84,50,0,0,0,0,85,249,252,248,249,251,202,64,0,0,1,36,65,36,0,74,178,178,90,62,43,204,249,218,41,26,99,
-153,54,43,40,13,37,62,145,139,193,238,250,213,113,70,1,0,0,0,22,64,22,81,243,249,248,248,243,143,147,22,0,16,86,102,72,11,124,110,16,38,3,22,89,102,85,31,88,
-102,92,138,179,138,18,0,0,27,101,76,0,0,0,0,0,6,38,12,19,144,161,88,13,0,0,0,0,0,88,150,22,0,0,0,22,130,156,22,68,170,248,194,9,0,13,84,50,
-0,0,0,0,0,0,5,172,252,253,203,57,28,18,0,10,60,37,0,74,178,178,74,0,28,70,52,84,28,0,0,30,124,179,59,19,61,78,234,249,205,78,175,180,121,84,78,11,
-0,0,0,22,64,22,0,3,36,19,0,0,91,147,22,0,16,86,102,72,11,124,110,16,38,3,154,250,251,250,249,233,127,92,138,179,138,18,0,0,27,101,76,0,0,0,0,0,
-6,38,12,19,144,161,88,13,0,0,0,0,0,88,150,105,248,248,94,22,130,156,22,137,250,248,90,0,0,13,84,50,0,0,0,0,81,243,248,252,252,251,200,57,28,18,0,10,
-60,37,0,74,178,178,74,0,28,70,66,217,249,198,18,30,124,179,59,19,61,65,159,51,26,213,253,240,130,84,78,11,12,0,0,0,22,63,23,102,244,248,248,248,243,143,147,37,
-90,102,69,6,0,9,42,1,10,46,89,102,82,37,18,62,106,185,199,140,18,0,0,9,78,76,58,20,0,0,0,4,36,14,1,128,141,39,55,82,13,0,0,0,0,1,107,156,
-22,0,0,0,22,129,157,48,75,140,12,0,13,84,50,0,46,22,0,0,0,0,0,47,223,254,250,90,2,32,24,58,37,0,74,178,178,74,0,10,29,53,102,43,0,0,0,0,
-52,125,169,62,79,237,249,203,18,0,69,198,199,79,63,87,12,0,0,0,22,63,23,31,19,0,0,0,0,91,147,37,90,102,69,6,0,9,42,1,10,46,89,188,250,249,248,250,
-235,196,199,140,18,0,0,9,78,76,58,20,0,0,0,4,36,14,1,128,141,39,55,82,13,0,0,0,0,1,160,252,249,94,0,0,22,129,157,48,142,250,248,90,13,84,50,0,
-46,22,0,81,243,248,248,249,253,221,61,0,2,32,24,58,37,0,74,178,178,74,0,10,29,53,102,58,198,248,198,18,52,125,169,62,66,172,56,18,198,248,217,202,199,79,63,87,
-87,12,0,0,0,22,75,33,81,243,248,248,248,243,150,184,114,93,23,0,0,0,0,0,22,91,102,83,10,8,72,55,146,206,185,80,4,0,9,82,71,1,20,64,23,0,0,2,
-7,2,116,130,8,14,34,55,82,13,0,0,0,0,4,109,154,22,0,0,0,22,137,161,22,69,66,19,82,50,0,0,24,64,20,0,0,0,46,173,171,186,252,248,90,11,72,44,
-0,74,178,178,74,0,10,34,41,83,44,58,23,0,0,2,3,29,118,178,234,249,211,24,0,3,70,121,180,169,22,64,87,12,0,0,0,22,75,33,0,0,0,0,0,0,103,184,
-114,93,23,0,0,0,0,0,22,91,102,83,144,248,250,250,252,249,196,80,4,0,9,82,71,1,20,64,23,0,0,2,7,2,116,130,8,14,34,55,82,13,0,0,0,90,248,251,
-191,22,0,0,0,22,137,161,22,138,250,248,143,50,0,0,24,64,94,243,248,248,249,251,198,146,135,11,0,11,72,44,0,74,178,178,74,0,10,34,41,83,44,58,39,198,248,198,
-21,29,118,172,161,56,54,200,248,203,83,121,180,169,22,64,64,87,12,0,3,30,34,60,22,81,243,248,248,248,247,188,175,44,61,19,0,0,0,24,92,102,84,38,13,59,52,152,
-183,145,102,102,65,17,80,71,2,0,0,23,55,5,0,0,2,117,130,8,0,0,14,33,55,82,13,0,0,0,0,1,111,156,22,0,3,30,34,128,156,22,69,102,48,0,0,0,
-0,23,64,18,0,46,175,176,54,2,175,252,248,128,36,30,87,178,178,74,0,10,34,40,88,28,0,23,55,5,0,0,0,0,84,241,252,213,31,36,11,68,71,3,71,60,1,0,
-64,87,12,0,3,30,34,60,22,0,0,0,0,17,88,158,175,44,61,19,0,0,0,24,92,102,84,38,13,167,250,252,253,252,238,127,65,17,80,71,2,0,0,23,55,5,0,0,
-2,117,130,8,0,0,14,33,55,82,13,0,90,248,248,94,111,156,22,0,3,30,34,128,156,22,138,251,249,90,0,0,0,97,246,248,248,249,251,202,54,2,130,140,21,59,36,30,
-87,178,178,74,0,10,34,40,88,28,0,23,55,22,198,248,198,18,72,193,170,62,201,249,205,81,71,3,71,60,1,0,0,64,86,16,31,19,0,22,64,22,81,243,248,250,251,246,
-146,146,42,64,18,0,12,89,102,81,9,17,73,53,138,180,154,30,16,88,102,96,67,1,0,0,0,0,4,0,0,3,118,128,8,0,0,0,0,13,33,55,82,13,0,0,0,0,
-3,112,155,23,36,19,0,22,127,161,88,83,64,2,0,0,0,0,24,56,57,175,176,55,0,0,5,177,253,249,90,76,189,184,74,0,10,34,42,88,28,0,0,0,4,0,0,0,
-0,69,233,250,227,175,55,14,88,71,2,0,0,0,0,0,0,64,86,16,31,19,0,22,64,22,0,0,18,89,102,69,96,146,42,64,18,0,12,89,102,81,9,17,73,53,202,253,
-252,249,248,236,127,96,67,1,0,0,0,0,4,0,0,3,118,128,8,0,0,0,0,13,33,55,82,98,248,248,94,0,3,112,155,23,36,19,0,22,127,161,88,146,250,248,90,0,
-81,243,249,250,250,251,202,55,0,0,5,132,158,40,0,76,189,184,74,0,10,34,42,88,28,0,0,0,4,0,18,198,248,210,165,69,128,235,249,206,100,71,2,0,0,0,0,0,
-0,0,63,98,26,0,0,0,22,64,18,93,247,251,250,248,243,145,145,43,62,28,76,102,80,9,8,59,58,153,181,138,21,36,10,26,102,102,67,3,0,0,0,0,0,0,4,119,
-127,7,0,0,0,0,0,0,13,33,55,82,13,0,0,0,0,2,110,167,36,0,0,0,31,155,173,24,68,70,3,0,0,0,0,60,176,176,45,0,0,0,9,66,199,252,250,205,
-179,100,16,8,33,42,88,28,0,0,0,0,0,0,0,0,69,234,249,203,46,121,171,104,74,35,5,0,0,0,0,0,0,0,63,98,26,0,0,0,22,64,18,17,89,102,69,4,
-0,93,145,43,62,28,76,102,80,9,8,59,58,153,181,202,249,249,248,249,238,127,67,3,0,0,0,0,0,0,4,119,127,7,0,0,0,0,0,0,13,33,126,250,248,94,0,0,
-0,2,110,167,36,0,0,0,31,155,173,24,137,250,248,141,243,248,248,250,251,201,45,0,0,0,9,66,166,136,78,178,179,100,16,8,33,42,88,28,0,0,0,0,0,0,0,18,
-210,252,209,35,205,251,237,114,74,35,5,0,0,0,0,0,0,2,30,70,84,12,0,0,0,18,67,91,151,246,248,248,248,243,145,145,42,87,102,78,9,8,62,52,138,183,156,24,
-0,1,35,80,69,86,102,68,4,0,0,0,0,4,121,126,6,0,0,0,0,0,0,8,0,13,33,55,82,13,0,0,0,2,34,117,154,22,0,13,80,61,125,156,22,69,70,3,
-0,0,46,174,176,82,12,0,0,10,58,81,102,209,253,253,138,2,38,42,40,88,28,0,0,0,0,0,0,0,0,69,234,249,203,18,0,30,131,189,56,12,38,6,0,0,0,0,
-0,2,30,70,84,12,0,0,0,18,67,91,102,68,4,0,0,0,93,145,42,87,102,78,9,8,62,52,138,183,156,24,140,248,249,250,250,238,127,68,4,0,0,0,0,4,121,126,
-6,0,0,0,0,0,0,8,0,98,249,250,146,13,0,0,0,2,34,117,154,22,0,13,80,61,125,156,22,138,250,248,248,248,249,251,201,82,12,0,0,10,58,81,102,182,192,179,
-74,2,38,42,40,88,28,0,0,0,0,0,0,0,0,55,165,209,248,238,248,209,140,189,56,12,38,6,0,0,0,0,3,36,17,0,64,87,12,0,0,18,92,102,75,84,243,248,
-248,248,243,145,145,45,85,24,6,62,52,138,179,138,31,38,3,7,79,86,14,14,89,102,68,4,0,0,6,122,124,6,0,0,0,0,0,0,0,29,24,0,13,33,55,82,13,0,
-3,36,18,1,111,154,32,84,50,0,21,130,157,24,70,69,4,45,175,176,45,24,59,13,8,62,35,12,128,204,223,251,248,95,32,58,92,25,0,0,0,0,0,0,0,0,69,234,
-249,203,18,0,3,65,76,118,172,57,14,38,6,0,0,0,3,36,17,0,64,87,12,0,0,18,92,102,75,4,0,0,0,0,0,93,145,45,85,24,6,62,52,138,179,138,31,38,
-3,138,250,250,248,248,239,127,68,4,0,0,6,122,124,6,0,0,0,0,0,0,0,29,106,248,248,115,55,82,13,0,3,36,18,1,111,154,32,84,50,0,21,130,157,98,248,250,
-248,249,251,202,45,24,59,13,8,62,35,12,128,204,205,105,1,8,32,58,92,25,0,0,0,0,0,0,0,0,55,159,50,35,238,248,239,91,76,118,172,57,14,38,6,0,0,0,
-36,19,0,0,0,64,87,10,18,90,102,74,49,3,81,243,248,248,248,243,146,145,39,57,60,50,138,179,138,18,0,12,36,80,68,8,33,13,15,89,102,69,4,5,122,116,6,0,
-0,0,0,0,0,0,0,1,33,24,0,25,112,71,82,15,33,18,0,0,0,115,185,66,0,0,0,23,124,149,25,64,83,173,176,47,0,0,25,59,60,34,0,74,181,202,146,150,
-249,249,116,84,52,13,0,0,0,0,0,0,0,67,234,249,203,18,0,3,70,70,1,28,125,173,58,14,38,6,0,3,36,19,0,0,0,64,87,10,18,90,102,74,49,3,0,0,
-0,0,0,0,95,145,39,57,60,50,138,179,138,18,0,12,36,80,167,248,249,248,248,239,127,69,4,5,122,116,6,0,0,0,0,0,0,0,0,91,249,249,94,25,112,71,82,15,
-33,18,0,0,0,115,185,66,0,0,0,23,165,250,249,250,250,253,219,47,0,0,25,59,60,34,0,74,181,202,146,89,46,30,40,84,52,13,0,0,0,0,0,0,0,53,159,50,
-18,198,248,239,250,214,19,28,125,173,58,14,38,6,0,3,19,0,0,0,0,0,60,83,88,102,66,4,2,0,0,81,243,248,248,248,243,146,147,76,81,143,179,138,18,0,0,7,
-83,88,7,0,3,36,13,15,89,102,73,125,122,1,0,0,0,0,0,0,0,0,0,0,1,33,24,93,183,150,66,88,24,0,0,0,12,82,134,154,22,0,0,0,4,88,145,71,
-172,176,48,0,0,0,7,65,70,12,74,178,178,81,78,102,153,250,250,106,0,36,19,0,0,0,0,0,59,231,249,203,18,0,3,70,71,3,0,0,29,124,173,58,14,36,9,34,
-19,0,0,0,0,0,60,83,88,102,66,4,2,0,0,0,0,0,0,0,0,95,147,76,81,143,179,138,18,0,0,7,83,88,7,135,248,249,248,248,239,127,73,125,122,1,0,0,
-0,0,0,0,0,0,90,248,248,115,24,93,183,150,66,88,24,0,0,0,12,82,134,154,22,0,0,81,243,250,252,250,252,253,249,90,0,0,7,65,70,12,74,178,178,81,78,102,
-94,63,83,26,0,36,19,0,0,0,0,0,44,148,48,18,198,248,203,95,214,248,198,18,29,124,173,58,14,36,9,34,0,0,0,0,0,0,22,101,102,67,0,0,0,0,0,0,
-81,243,248,248,248,243,169,150,151,197,144,18,0,0,9,82,68,16,36,6,0,3,36,13,15,92,176,160,10,0,0,0,0,0,0,0,0,0,0,0,0,1,33,46,140,183,159,65,
-75,13,0,13,84,49,2,111,156,22,0,0,0,0,113,209,173,81,64,2,0,10,58,33,28,118,182,178,74,0,18,88,102,158,250,248,90,3,36,19,0,0,0,68,231,249,203,18,
-0,3,70,70,3,0,0,0,0,29,118,168,59,14,58,21,0,0,0,0,0,0,22,101,102,67,0,0,0,0,0,0,0,0,0,0,0,10,128,150,151,197,144,18,0,0,9,82,
-68,16,36,6,130,248,249,248,248,239,190,160,10,0,0,0,0,0,0,0,0,90,248,248,94,1,33,46,140,183,159,65,75,13,0,13,84,49,2,111,156,22,81,243,248,248,251,253,
-199,145,250,248,90,10,58,33,28,118,182,178,74,0,18,88,102,102,58,0,0,3,36,19,0,0,0,53,148,40,18,198,248,203,83,70,21,198,248,198,18,29,118,168,59,14,58,21,
-6,0,0,0,0,22,91,102,87,80,11,0,0,0,0,5,1,81,243,248,248,250,246,192,179,152,73,12,0,9,82,71,3,0,14,38,7,0,3,36,18,131,170,106,70,5,0,0,
-0,0,0,0,0,0,0,0,0,0,1,32,41,153,187,147,62,78,26,80,50,0,0,3,112,156,22,0,0,45,169,190,154,23,69,67,15,59,35,0,74,188,197,82,0,10,29,51,
-102,102,149,249,248,90,3,36,19,0,69,234,249,203,18,0,3,70,69,1,0,0,0,0,0,0,9,73,168,82,28,34,6,0,0,0,0,22,91,102,87,80,11,0,0,0,0,5,
-1,0,0,0,10,62,48,162,179,152,73,12,0,9,82,71,3,0,14,38,7,130,248,249,248,252,246,132,70,5,0,0,0,0,0,0,90,248,248,94,0,0,1,32,41,153,187,147,
-62,78,26,80,50,0,0,3,112,187,244,248,248,249,251,211,154,23,138,250,248,128,35,0,74,188,197,82,0,10,29,51,102,102,88,44,4,0,3,36,19,0,55,159,48,18,198,248,
-203,83,69,1,0,18,198,248,198,18,9,73,168,82,28,34,38,6,0,0,23,92,102,62,7,62,87,12,0,0,19,32,2,0,81,243,250,250,252,251,190,134,46,59,20,79,71,2,
-0,0,0,14,38,6,0,8,142,131,20,88,102,70,5,0,0,0,2,43,14,0,0,0,0,0,0,1,54,54,142,182,144,69,102,54,0,0,0,0,3,112,156,20,43,175,175,62,
-85,148,23,70,96,36,0,53,179,178,97,60,20,30,38,85,36,76,102,151,249,248,90,3,36,83,234,249,203,18,0,6,70,68,3,41,14,0,0,0,0,0,0,1,90,172,60,15,
-38,6,0,0,23,92,102,62,7,62,87,12,0,0,19,32,2,0,0,10,62,52,138,179,159,134,46,59,20,79,71,2,0,0,0,14,38,6,130,248,252,252,248,239,129,70,5,0,
-0,0,2,118,248,248,94,0,0,0,0,1,54,54,142,182,144,69,102,54,0,0,0,0,83,248,252,249,249,251,201,62,85,148,23,138,251,249,90,53,179,178,97,60,20,30,38,85,
-36,76,102,90,44,2,0,3,36,70,159,50,18,198,248,204,83,68,3,41,14,0,18,198,248,198,18,1,90,172,60,15,14,38,3,21,96,102,63,2,0,0,64,87,11,15,36,4,
-0,0,10,123,246,252,253,252,244,143,143,51,99,72,1,0,0,0,0,0,14,38,11,123,126,41,13,15,88,102,70,6,0,3,50,50,6,0,0,0,0,0,2,34,20,29,42,145,
-186,174,84,76,12,0,0,0,0,3,105,160,174,173,62,0,0,88,152,74,82,66,2,15,124,79,0,37,68,44,85,30,0,10,79,102,151,249,248,90,71,237,249,203,18,0,0,46,
-68,2,47,51,6,0,0,0,0,0,2,34,20,69,168,60,14,38,3,21,96,102,63,2,0,0,64,87,11,15,36,4,0,0,10,62,52,138,179,139,25,92,143,51,99,72,1,0,
-0,0,0,0,14,38,11,190,252,249,248,248,238,129,70,6,0,3,122,249,248,94,0,0,0,0,2,34,20,29,42,145,186,174,84,76,12,0,0,81,243,248,250,253,251,199,62,0,
-0,88,152,74,146,250,248,100,124,79,0,37,68,44,85,30,0,10,79,102,90,43,2,0,57,173,65,18,198,248,203,60,68,2,47,51,6,0,0,18,198,248,198,50,20,69,168,60,
-61,14,35,22,87,65,2,0,0,0,0,62,88,40,0,0,0,10,62,52,175,251,252,249,249,243,151,176,93,56,10,0,0,0,0,0,0,19,143,127,6,3,36,9,16,88,102,70,
-11,47,50,2,0,0,0,0,0,2,35,21,0,1,30,48,178,195,142,63,82,13,0,0,0,0,43,193,209,76,0,0,0,10,129,163,25,69,69,4,33,8,8,29,57,102,38,0,
-0,0,10,79,102,151,249,249,241,249,210,32,0,0,0,6,3,48,50,2,0,0,0,0,0,2,35,21,0,1,71,167,61,14,35,22,87,65,2,0,0,0,0,62,88,40,0,0,
-0,10,62,52,138,179,138,22,36,7,102,176,93,56,10,0,0,0,0,0,0,19,143,127,129,248,249,248,248,238,132,70,11,120,249,248,94,0,0,0,0,2,35,21,0,1,30,48,
-178,195,142,63,82,13,81,243,248,248,249,252,224,76,0,0,0,10,129,163,25,138,250,248,111,8,8,29,57,102,38,0,0,0,10,79,102,90,44,57,159,52,51,201,248,203,18,6,
-3,48,50,2,0,0,0,0,18,198,249,203,18,1,71,167,168,62,14,35,15,2,0,0,0,0,0,15,78,84,11,0,10,62,52,138,179,175,244,248,248,249,247,177,144,50,58,4,
-0,0,0,0,5,123,131,43,6,0,2,7,0,16,86,102,88,48,1,0,0,0,0,0,2,35,20,0,0,0,12,86,74,147,183,143,63,82,13,0,0,46,174,170,133,151,22,0,
-10,62,37,88,148,24,70,68,9,38,36,37,83,56,51,4,0,0,0,10,79,102,179,252,249,219,20,7,0,0,0,1,49,50,2,0,0,0,0,0,2,35,20,0,0,0,1,71,
-168,62,14,35,15,2,0,0,0,0,0,15,78,84,11,0,10,62,52,138,179,138,18,0,8,37,81,152,218,64,58,4,0,0,0,0,5,123,131,43,6,126,248,248,248,248,238,132,
-147,249,248,94,0,0,0,0,2,35,20,0,0,0,12,86,74,147,183,143,63,137,244,248,248,249,251,197,133,151,22,0,10,62,37,88,148,24,138,250,248,115,36,37,83,56,51,4,
-0,0,0,10,79,102,126,175,52,18,198,248,203,18,0,1,49,50,2,0,0,0,0,0,2,51,202,248,198,18,1,71,70,167,62,14,36,5,0,0,0,0,19,34,4,63,84,23,
-58,52,138,179,138,18,81,243,248,250,250,243,148,142,31,2,0,0,0,5,123,124,6,15,38,6,0,0,0,0,18,98,102,70,5,0,0,0,0,2,36,20,0,0,0,13,84,48,
-28,45,148,183,141,63,82,13,44,175,176,60,4,110,154,30,62,37,0,0,88,148,24,68,69,36,56,88,28,0,16,2,0,0,0,0,10,127,242,251,249,248,90,0,0,0,2,50,
-50,2,0,0,0,0,0,2,36,20,0,0,0,0,0,1,70,167,62,14,36,5,0,0,0,0,19,34,4,63,84,23,58,52,138,179,138,18,0,0,8,81,88,175,251,230,47,2,
-0,0,0,5,123,124,6,15,38,6,126,248,248,248,248,243,251,250,97,0,0,0,0,2,36,20,0,0,0,13,84,48,28,45,148,183,178,246,250,248,249,251,202,60,4,110,154,30,
-62,37,0,0,88,148,24,137,250,249,126,88,28,0,16,2,0,0,0,0,10,117,197,123,58,198,248,203,18,0,2,50,50,2,0,0,0,0,0,2,36,20,18,198,248,198,18,1,
-1,70,168,63,14,38,6,0,0,19,36,3,0,0,64,102,58,138,179,138,18,0,0,87,247,250,248,249,243,148,141,17,0,0,5,123,124,6,0,0,15,38,6,0,0,2,45,54,
-85,102,72,6,0,0,3,36,20,0,0,0,13,84,48,0,0,33,46,150,183,140,57,89,174,176,62,0,0,1,112,175,55,0,0,0,0,88,148,32,83,77,80,54,7,0,0,0,
-0,0,0,0,69,235,251,224,158,249,248,90,0,2,50,50,2,0,0,0,0,0,3,36,20,0,0,0,0,0,0,0,1,70,168,63,14,38,6,0,0,19,36,3,0,0,64,102,
-58,138,179,138,18,0,0,9,82,69,13,52,200,251,230,33,0,0,5,123,124,6,0,0,15,38,6,126,248,248,249,250,250,177,72,6,0,0,3,36,20,0,0,0,13,84,48,0,
-0,33,46,183,251,252,250,250,251,202,62,0,0,1,112,175,55,0,0,0,0,88,148,32,146,250,250,125,7,0,0,0,0,0,0,0,55,163,113,113,218,249,203,18,0,2,50,50,
-2,0,0,0,0,0,3,36,20,0,0,18,198,248,198,18,18,1,69,166,63,14,38,4,17,36,3,0,0,9,54,82,174,183,138,18,0,0,8,82,129,243,248,248,249,243,149,142,
-14,1,123,124,6,0,0,0,0,15,38,4,1,50,50,0,15,86,102,72,5,0,35,19,0,0,0,13,84,56,9,0,0,1,33,47,151,182,151,170,174,66,0,0,0,9,60,112,
-148,22,0,0,0,0,94,161,58,102,75,8,36,11,0,0,0,0,0,69,234,249,205,91,102,151,249,248,91,50,50,2,0,0,0,0,0,3,35,19,0,0,0,0,0,6,13,0,
-0,1,69,166,63,14,38,4,17,36,3,0,0,9,54,82,174,190,146,18,0,0,8,82,71,3,0,10,54,200,251,230,31,1,123,124,6,0,0,0,0,15,38,4,127,249,249,248,
-248,238,132,72,5,0,35,19,0,0,0,13,84,56,9,0,0,1,103,245,252,253,253,251,200,66,0,0,0,9,60,112,148,22,0,0,0,0,94,161,58,158,250,248,114,11,0,0,
-0,0,0,55,159,50,27,216,251,221,58,1,1,50,50,2,0,0,0,0,0,3,35,19,0,0,0,0,18,199,248,198,198,18,1,69,166,65,11,47,36,2,0,0,10,62,52,138,
-194,177,30,0,0,9,81,71,2,81,243,248,248,249,243,148,130,119,119,6,0,0,0,0,0,0,14,33,48,49,2,0,0,16,86,102,72,35,16,0,0,0,13,84,48,9,60,20,
-0,0,1,32,42,162,209,201,87,75,12,0,11,62,37,0,88,148,22,0,0,10,30,113,184,50,64,67,9,37,11,0,0,0,69,234,249,203,18,10,79,102,151,249,249,122,2,0,
-0,0,0,0,3,36,18,0,0,0,0,0,0,14,62,20,0,0,1,69,166,65,11,47,36,2,0,0,10,62,52,138,200,244,205,18,0,9,81,71,2,0,0,0,10,54,200,251,
-227,128,119,6,0,0,0,0,0,0,14,33,121,249,248,248,248,248,238,134,72,35,16,0,0,0,13,84,48,9,60,20,0,81,243,249,249,252,253,218,87,75,12,0,11,62,37,0,
-88,148,22,0,0,10,30,113,184,50,135,250,248,114,11,0,0,0,55,159,50,18,198,248,219,113,90,41,45,49,2,0,0,0,0,0,3,36,18,0,0,0,0,0,0,31,212,248,
-248,198,18,1,69,165,75,41,36,5,0,7,60,52,138,179,138,65,84,11,7,82,71,2,0,0,81,243,248,248,249,243,190,179,20,0,0,0,0,0,0,0,0,54,65,6,0,0,
-0,0,14,85,102,78,4,0,0,13,84,50,0,0,22,60,16,0,0,0,61,175,207,197,131,59,81,20,56,37,0,0,0,88,148,22,10,33,38,88,108,148,24,70,67,9,37,11,
-0,69,234,249,203,18,0,0,10,78,102,155,250,248,90,0,0,0,0,3,36,19,0,0,0,0,0,0,0,0,23,64,20,0,0,1,69,165,75,41,36,5,0,7,60,52,138,179,
-146,212,250,200,24,82,71,2,0,0,0,0,0,9,54,200,252,238,36,0,0,0,0,0,0,0,0,125,250,248,169,248,248,248,248,238,134,78,4,0,0,13,84,50,0,0,22,60,
-92,243,248,248,250,251,222,197,131,59,81,20,56,37,0,0,0,88,148,22,10,33,38,88,108,148,24,138,250,248,114,11,0,55,159,50,18,198,248,203,27,78,102,96,65,3,0,0,
-0,0,0,3,36,19,0,0,0,0,0,0,0,0,39,212,212,248,198,18,0,76,176,66,13,38,6,4,38,138,179,138,18,0,48,79,78,68,2,0,0,0,0,81,243,248,248,252,
-249,146,137,15,0,0,0,0,0,2,50,48,16,35,4,0,0,0,0,42,88,102,72,4,11,84,50,0,0,0,0,19,59,18,0,45,174,172,95,154,183,134,58,87,33,0,0,0,
-0,0,88,152,53,38,88,30,0,88,148,24,70,67,9,37,77,234,249,203,18,0,0,0,0,12,93,102,150,249,248,90,0,0,3,36,19,0,0,0,0,0,0,0,0,0,0,23,
-64,19,0,0,0,76,176,66,13,38,6,4,38,138,179,138,18,18,209,250,216,81,2,0,0,0,0,0,0,0,14,149,225,251,229,32,0,0,0,0,0,2,122,249,248,116,4,122,
-248,248,248,249,238,134,72,4,11,84,50,0,0,0,0,94,246,248,248,249,251,198,95,154,183,134,58,87,33,0,0,0,0,0,88,152,53,38,88,30,0,88,148,24,138,250,248,114,
-64,159,50,18,198,248,203,18,0,12,93,102,88,42,2,0,0,0,3,36,19,0,0,0,0,0,0,0,0,0,0,40,40,212,248,198,35,33,65,166,66,14,38,23,138,179,138,18,
-0,0,6,94,102,15,0,0,0,0,0,0,81,243,252,252,249,243,150,140,15,0,0,0,2,49,50,2,0,35,74,6,0,3,36,15,14,86,102,74,78,48,0,0,0,0,0,0,
-23,56,57,175,176,60,27,52,157,183,132,58,80,13,0,0,0,0,10,110,164,102,30,0,0,0,88,148,24,70,68,75,237,249,203,18,0,0,0,0,2,46,51,77,102,151,249,248,
-90,3,36,19,0,0,0,0,0,0,0,0,0,0,0,0,24,64,18,0,18,33,65,166,66,14,38,23,138,179,138,18,0,0,24,219,251,201,18,0,0,0,0,0,0,5,123,129,
-58,200,251,230,32,0,0,0,2,122,249,248,94,35,74,6,122,248,249,248,248,238,134,74,78,48,0,0,0,0,81,243,249,250,250,251,202,60,27,52,157,183,132,58,80,13,0,0,
-0,0,10,110,164,102,30,0,0,0,88,148,24,138,250,249,201,59,18,198,248,203,18,0,2,46,51,77,102,91,43,2,0,3,36,19,0,0,0,0,0,0,0,0,0,0,0,0,
-0,41,212,225,55,2,0,67,166,62,29,156,181,138,18,0,0,9,82,66,48,82,13,0,0,0,0,0,5,165,249,248,248,249,243,150,140,15,0,2,52,50,1,0,0,6,71,76,
-10,33,19,0,0,12,84,102,87,4,0,0,0,0,0,0,0,60,176,176,60,0,0,33,53,157,183,131,58,82,13,0,0,10,34,38,146,161,22,0,0,0,0,88,148,21,116,240,
-249,211,28,0,0,0,0,2,50,50,25,121,88,102,151,249,248,112,19,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25,60,31,32,2,0,67,166,62,29,156,181,138,18,0,
-0,9,82,79,209,250,201,18,0,0,0,0,5,123,124,6,9,54,200,251,229,32,0,2,124,249,248,94,0,6,71,76,10,136,248,248,248,248,241,134,87,4,0,0,0,81,243,248,
-248,250,251,202,60,0,0,33,53,157,183,131,58,82,13,0,0,10,34,38,146,161,22,0,0,0,0,88,148,21,162,253,249,124,200,248,203,18,0,2,50,50,25,121,88,102,91,42,
-5,34,19,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,51,94,18,0,0,1,62,154,150,183,156,24,0,0,9,82,71,2,0,50,84,13,0,0,0,5,123,124,85,243,
-248,248,249,243,151,140,17,46,82,67,2,0,0,0,2,70,90,19,0,0,0,10,80,92,102,73,7,0,0,0,0,0,45,174,176,87,15,0,0,1,33,54,159,183,130,57,82,12,
-7,34,38,88,30,88,148,22,0,0,0,0,81,160,231,251,217,26,37,12,0,0,2,50,50,24,148,91,13,79,102,150,250,248,90,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,36,75,18,0,0,1,62,154,150,183,156,24,0,0,9,82,71,2,18,209,250,201,18,0,0,5,123,124,6,0,0,9,54,200,251,229,34,120,250,250,95,0,0,0,2,70,
-90,19,118,248,248,248,250,242,134,73,7,0,81,243,248,248,249,251,202,87,15,0,0,1,33,54,159,183,130,57,82,12,7,34,38,88,30,88,148,22,0,0,0,0,81,152,150,158,
-250,248,249,205,18,0,2,50,50,24,148,91,13,79,102,90,59,17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,31,27,62,16,0,0,14,156,186,152,26,38,4,8,
-82,71,2,0,0,0,51,84,13,0,5,123,124,6,0,81,243,248,248,249,243,151,162,61,9,68,70,3,0,0,2,32,76,74,5,0,13,84,47,15,85,102,74,7,0,0,0,42,
-172,176,59,24,62,16,0,0,1,33,56,160,183,128,56,83,40,36,88,30,0,0,88,148,22,0,0,0,63,237,252,207,83,68,10,38,10,1,50,50,24,148,88,0,0,10,78,102,
-152,249,248,90,0,0,0,0,0,0,0,0,0,0,0,0,0,18,31,27,62,16,0,0,14,156,186,152,26,38,4,8,82,71,2,0,0,18,209,250,201,18,5,123,124,6,0,0,
-0,0,9,54,200,251,241,250,248,137,70,3,0,0,2,32,76,74,5,118,248,250,249,248,241,134,74,86,243,248,248,249,251,202,59,24,62,16,0,0,1,33,56,160,183,128,56,83,
-40,36,88,30,0,0,88,148,22,0,0,0,48,174,151,35,227,250,248,125,10,1,50,50,24,148,88,0,0,10,78,102,92,40,2,0,0,0,0,0,0,0,0,0,0,0,0,0,
-19,36,3,0,27,64,16,18,138,179,156,154,64,12,37,80,70,2,0,0,6,32,0,49,84,17,123,124,6,0,0,0,81,243,248,248,249,245,171,140,15,3,70,70,2,1,36,17,
-1,70,73,21,82,50,0,0,14,84,102,74,7,0,46,172,173,62,0,0,27,64,16,0,0,1,33,58,161,182,131,76,86,83,28,0,6,33,4,88,148,22,0,69,233,249,219,156,
-26,46,4,6,34,52,48,24,148,88,0,0,0,0,38,83,102,152,249,248,90,0,0,0,0,0,0,0,0,0,0,0,19,36,3,0,27,64,16,18,138,179,156,154,64,12,37,80,
-70,2,0,0,6,32,18,209,250,202,132,124,6,0,0,0,0,0,0,8,50,224,252,252,113,3,70,70,2,1,36,17,1,70,73,21,162,249,248,248,248,241,173,247,248,248,249,251,
-200,62,0,0,27,64,16,0,0,1,33,58,161,182,131,76,86,83,28,0,6,33,4,88,148,22,0,55,157,46,93,231,249,226,248,248,112,52,48,24,148,88,0,0,0,0,38,83,
-102,91,42,2,0,0,0,0,0,0,0,0,0,0,0,0,36,3,0,0,0,28,77,146,179,138,15,61,165,74,82,88,6,0,0,6,38,15,0,0,55,167,130,6,0,0,0,0,
-0,81,243,248,249,250,243,153,139,14,3,69,68,33,18,0,0,1,70,102,49,0,0,0,0,14,84,102,71,50,175,174,59,0,0,0,0,28,63,18,0,0,1,33,57,166,191,97,
-95,86,8,3,38,15,0,0,88,136,82,232,249,203,18,88,148,22,0,1,49,65,32,148,88,0,0,0,3,36,16,9,79,102,152,249,248,90,0,0,0,0,0,0,0,0,0,18,
-36,3,0,0,0,28,77,146,179,138,15,61,165,74,82,88,6,0,0,6,38,15,0,18,210,253,228,23,0,0,0,0,0,0,0,1,122,250,248,251,229,31,3,69,68,33,18,0,
-0,1,70,102,49,113,248,248,248,248,250,251,250,249,251,200,59,0,0,0,0,28,63,18,0,0,1,33,57,166,191,97,95,86,8,3,38,15,0,0,88,136,69,151,50,18,198,250,
-233,39,94,248,249,132,32,148,88,0,0,0,3,36,16,9,79,102,91,42,2,0,0,0,0,0,0,0,0,0,0,18,3,0,0,0,0,18,151,188,138,18,0,1,63,186,117,15,
-33,4,4,35,14,0,0,5,123,149,82,11,0,0,0,0,0,0,83,245,249,248,249,243,153,138,14,3,81,68,2,0,0,10,70,81,63,5,0,0,0,0,13,80,99,173,173,58,
-0,0,0,0,0,0,29,32,0,0,0,1,33,80,103,85,50,49,77,40,12,0,0,0,0,124,238,250,203,18,0,0,88,148,24,44,47,31,163,94,0,0,0,2,33,18,0,0,
-9,75,96,148,249,248,90,0,0,0,0,0,0,0,15,35,3,0,0,0,0,18,151,188,138,18,0,1,63,186,117,15,33,4,4,35,14,0,0,5,132,232,250,200,18,0,0,0,
-0,0,3,119,249,248,126,200,251,229,31,3,81,68,2,0,0,10,70,81,63,5,113,248,248,248,248,250,251,251,200,58,0,0,0,0,0,0,29,32,0,0,0,1,33,80,103,85,
-50,49,77,40,12,0,0,0,0,114,179,65,18,198,248,203,100,148,24,122,249,249,195,94,0,0,0,2,33,18,0,0,9,75,96,85,39,2,0,0,0,0,0,0,0,0,15,35,
-0,0,0,0,18,138,179,138,18,0,0,9,77,100,164,71,10,36,36,10,0,0,5,123,124,6,43,81,12,0,0,0,0,3,48,111,243,248,248,249,243,153,140,46,17,60,67,0,
-11,81,43,2,62,74,5,0,0,0,0,51,173,173,89,8,0,0,0,0,0,0,0,0,0,0,0,9,30,52,90,22,7,35,62,79,12,0,0,0,68,230,251,231,39,0,0,0,
-0,90,168,60,21,148,92,37,11,0,3,35,16,0,0,0,0,9,74,96,147,249,248,90,0,0,0,0,0,18,34,2,0,0,0,0,18,138,179,138,18,0,0,9,77,100,164,71,
-10,36,36,10,0,0,5,123,124,23,208,250,201,18,0,0,0,3,121,249,248,94,6,52,201,251,229,61,17,60,67,0,11,81,43,2,62,74,5,157,248,248,248,249,253,211,89,8,
-0,0,0,0,0,0,0,0,0,0,0,9,30,52,90,22,7,35,62,79,12,0,0,0,53,143,112,146,203,248,203,18,0,90,168,60,108,252,250,114,11,0,3,35,16,0,0,0,
-0,9,74,96,85,41,1,0,0,0,0,0,0,18,34,2,0,0,0,18,138,179,138,18,0,0,9,82,69,6,62,164,73,42,43,4,0,5,123,124,6,0,0,49,84,12,0,0,
-1,47,50,2,81,243,248,248,249,244,166,147,13,3,66,69,77,48,0,0,3,70,78,8,0,0,46,175,176,98,102,74,6,0,0,0,0,0,0,0,0,0,10,34,38,84,52,17,
-4,42,40,54,82,13,0,69,234,249,203,100,148,22,0,0,1,47,117,141,140,83,0,8,37,14,33,19,0,0,0,0,0,0,10,79,102,151,249,248,90,0,0,0,19,36,3,0,
-0,0,0,18,138,179,138,18,0,0,9,82,69,6,62,164,73,42,43,4,0,5,123,124,6,0,18,209,250,201,18,0,1,120,249,248,94,0,0,6,53,201,251,231,30,3,66,69,
-77,48,0,0,3,70,134,243,248,248,249,253,253,246,134,74,6,0,0,0,0,0,0,0,0,0,10,34,38,84,52,17,4,42,40,54,82,13,0,55,159,49,18,218,252,208,18,0,
-1,47,117,141,140,147,248,248,114,14,33,19,0,0,0,0,0,0,10,79,102,90,44,2,0,0,0,0,19,36,3,0,0,0,20,138,179,138,18,0,0,9,82,71,3,0,0,64,
-174,78,12,38,11,123,124,6,0,0,0,0,58,86,12,0,1,22,4,0,0,81,244,248,248,250,244,153,140,25,15,102,87,0,0,0,0,2,70,64,3,45,175,176,60,17,82,96,
-70,8,0,0,0,0,0,0,0,10,34,38,88,30,0,33,49,9,10,33,55,82,79,234,249,203,18,0,95,149,22,0,1,22,22,168,168,18,0,0,8,58,26,0,0,0,0,0,
-0,0,0,10,79,102,151,249,248,90,0,19,36,3,0,0,0,0,20,138,179,138,18,0,0,9,82,71,3,0,0,64,174,78,12,38,11,123,124,6,0,0,0,18,211,250,201,18,
-90,248,248,94,0,0,24,3,6,72,204,251,230,41,15,102,87,0,0,0,0,83,246,250,248,249,253,253,250,248,244,132,70,8,0,0,0,0,0,0,0,10,34,38,88,30,0,33,
-49,9,10,33,55,82,65,159,50,18,198,248,223,157,22,0,1,22,22,168,168,18,94,248,248,128,26,0,0,0,0,0,0,0,0,10,79,102,90,43,2,0,0,19,36,3,0,0,
-52,14,131,179,138,18,0,0,9,82,71,2,0,0,6,34,69,163,69,18,141,127,6,0,0,0,0,0,11,78,84,12,0,0,0,0,0,1,123,246,249,248,249,243,151,156,97,48,
-64,69,3,0,0,0,0,16,66,174,176,62,0,0,11,78,96,76,8,0,0,0,0,0,10,34,38,88,30,0,6,34,39,21,0,13,33,109,241,249,203,18,16,40,17,111,149,23,
-0,23,147,81,81,147,22,3,34,23,34,12,0,0,0,0,0,0,0,0,10,79,102,151,249,248,101,36,3,0,0,11,52,14,131,179,138,18,0,0,9,82,71,2,0,0,6,34,
-69,163,69,18,141,127,6,0,0,0,0,0,28,216,250,218,248,248,94,0,0,1,62,69,31,21,50,201,251,233,109,48,64,69,3,0,81,243,248,248,250,251,224,250,248,248,248,244,
-132,76,8,0,0,0,0,0,10,34,38,88,30,0,6,34,39,21,0,13,33,98,190,61,18,198,248,211,34,111,149,23,0,23,147,81,81,147,22,96,249,249,112,12,0,0,0,0,
-0,0,0,0,10,79,102,90,43,1,18,36,3,0,0,11,38,3,64,131,18,0,0,9,82,71,2,0,0,6,38,13,0,61,151,140,122,42,6,0,0,0,0,0,0,13,78,84,
-12,0,0,0,0,0,5,140,247,248,248,249,244,177,169,22,2,70,70,3,0,0,0,43,175,176,63,0,0,0,7,59,83,102,76,8,0,0,0,10,34,38,88,30,0,6,38,13,
-0,33,24,0,78,237,250,220,28,11,85,50,0,18,108,152,54,141,88,0,0,88,149,55,19,0,8,39,13,0,0,0,0,0,0,0,0,10,79,102,150,249,249,92,0,0,10,62,
-38,3,64,131,18,0,0,9,82,71,2,0,0,6,38,13,0,61,151,140,122,42,6,0,0,0,0,0,0,30,228,250,248,105,0,0,0,0,5,86,76,0,7,50,204,252,236,39,
-2,70,70,83,243,248,248,249,251,202,63,108,248,248,248,250,244,137,76,8,0,0,0,10,34,38,88,30,0,6,38,13,0,33,24,0,65,171,94,94,200,248,220,65,0,18,108,152,
-54,141,88,0,0,88,149,55,106,248,248,115,13,0,0,0,0,0,0,0,0,10,79,102,89,50,32,2,0,0,10,62,0,0,0,1,0,0,9,82,71,2,0,0,6,38,14,0,
-0,1,142,186,72,14,35,6,0,0,0,0,0,0,13,78,84,12,0,0,0,3,34,19,127,246,248,248,251,246,141,148,22,3,70,71,6,0,46,175,176,66,31,6,0,10,62,35,
-13,82,102,77,9,0,10,33,38,88,30,0,6,38,14,0,0,1,33,86,234,249,209,67,79,80,47,0,0,0,43,157,186,95,0,0,0,3,112,156,22,0,0,7,39,13,0,0,
-0,0,0,4,6,0,10,77,109,186,249,248,90,10,62,37,0,0,0,1,0,0,9,82,71,2,0,0,32,183,31,0,0,1,142,186,72,14,35,6,0,0,0,0,0,90,248,250,
-250,201,18,0,0,3,34,19,67,70,0,16,110,210,233,160,22,3,129,246,248,248,249,251,202,66,31,6,108,248,250,249,248,244,137,77,9,0,10,33,38,88,30,0,6,38,14,0,
-0,1,33,73,159,60,46,210,250,219,62,0,0,0,43,157,186,95,0,0,0,3,112,156,22,94,248,248,115,13,0,0,0,0,0,4,6,0,10,77,109,146,49,2,0,10,62,37,
-0,0,0,0,0,9,82,71,2,0,0,6,38,14,0,0,5,123,116,69,161,74,13,38,6,0,0,0,0,0,0,13,78,84,12,0,3,36,19,0,3,126,246,250,249,249,243,141,
-148,22,3,70,75,51,175,176,62,0,13,34,16,60,37,0,79,128,92,102,76,19,30,38,88,30,0,6,38,14,0,0,0,0,69,237,249,203,26,41,94,94,10,0,0,30,101,156,
-143,137,22,0,3,36,19,88,148,22,0,0,7,39,13,0,0,0,0,7,38,10,0,25,95,176,201,249,248,129,37,0,0,0,0,0,0,9,82,71,2,0,0,6,183,248,198,18,
-5,123,116,69,161,74,13,38,6,0,0,0,90,248,248,113,216,250,201,18,3,36,19,0,3,66,69,75,51,48,38,88,148,96,243,250,250,249,251,202,62,0,13,34,16,140,249,248,
-250,252,245,140,76,19,30,38,88,30,0,6,38,14,0,0,0,0,56,171,69,18,200,249,222,106,10,0,0,30,101,156,143,137,22,0,3,36,19,88,148,22,94,248,248,115,13,0,
-0,0,0,7,38,10,45,25,95,176,169,45,14,60,37,0,0,0,0,0,9,82,71,2,0,0,6,38,14,0,0,5,123,124,6,1,61,165,74,14,38,6,0,0,0,0,0,0,
-13,78,84,16,32,19,0,0,0,15,151,247,248,248,249,244,141,148,23,0,85,176,176,60,0,0,0,20,73,38,0,74,178,179,63,80,102,87,44,84,30,0,6,38,14,0,0,0,
-0,69,234,249,210,36,11,85,67,53,81,11,27,105,161,87,19,111,149,24,36,19,0,0,88,148,22,0,0,7,38,13,0,0,0,0,10,35,24,29,15,82,175,200,250,249,90,0,
-0,0,0,0,9,82,71,2,0,0,6,38,31,198,248,199,132,124,6,1,61,165,74,14,38,6,0,90,248,248,94,0,30,216,250,202,47,19,0,0,0,15,102,87,0,5,38,13,
-141,250,249,248,250,251,202,60,0,0,0,20,73,38,104,250,253,253,249,244,140,87,44,84,30,0,6,38,14,0,0,0,0,55,159,51,48,202,248,220,80,53,81,11,27,105,161,87,
-19,111,149,24,36,19,0,0,88,148,22,94,248,248,115,13,0,0,0,0,10,112,249,137,15,82,175,168,74,35,0,0,0,0,0,9,82,71,2,0,0,6,38,14,0,0,5,123,
-124,6,0,0,0,60,159,75,14,38,5,0,22,2,0,0,0,12,75,96,27,0,0,0,13,82,48,124,246,248,248,249,244,141,145,69,168,176,75,7,0,0,10,59,43,32,78,178,
-178,74,0,20,90,102,101,36,0,6,38,14,0,0,0,0,69,234,249,203,18,39,90,47,11,32,52,84,103,160,88,0,0,18,110,162,38,0,0,0,0,88,148,22,0,0,7,38,
-12,0,0,0,0,28,57,10,0,8,83,175,201,249,248,90,0,0,0,9,82,71,2,0,0,6,38,14,0,18,199,252,226,23,0,0,0,60,159,75,14,38,93,248,249,96,0,0,
-0,29,215,251,204,18,0,0,13,82,48,64,69,2,6,107,244,250,252,250,251,201,75,7,0,0,10,59,43,32,78,209,253,250,248,248,245,140,101,36,0,6,38,14,0,0,0,0,
-55,159,50,18,198,249,221,62,11,32,52,84,103,160,88,0,0,18,110,162,38,0,0,0,0,88,148,22,94,248,248,114,12,0,0,0,90,249,250,100,0,8,83,175,170,45,2,0,
-27,0,9,82,71,2,0,0,6,38,14,0,0,5,123,126,14,0,0,0,0,0,33,154,76,14,32,44,53,4,0,0,0,1,38,81,82,12,0,13,84,50,0,2,129,246,248,248,
-249,243,157,209,175,52,9,37,8,9,62,37,0,84,190,180,74,0,10,29,46,102,102,73,16,34,14,0,0,0,0,72,235,249,203,18,12,83,50,0,0,10,50,113,189,96,0,0,
-0,1,45,118,148,22,0,0,0,0,88,148,22,0,0,12,41,12,0,0,24,30,11,38,8,6,60,91,175,201,249,248,90,0,9,82,71,2,0,0,6,38,14,0,0,5,132,226,
-248,198,18,0,0,0,33,154,76,99,249,249,128,4,0,0,0,1,53,216,250,201,18,13,84,50,0,2,70,70,82,243,249,248,251,253,200,52,9,37,8,9,62,37,0,84,190,180,
-148,248,248,249,249,245,140,73,16,34,14,0,0,0,0,58,162,50,18,198,248,220,65,0,0,10,50,113,189,96,0,0,0,1,45,118,148,22,0,0,0,0,88,148,22,94,248,248,
-116,12,0,90,249,249,101,38,8,6,60,91,175,169,62,172,176,8,82,70,2,0,0,6,38,14,0,0,5,123,124,21,61,15,0,36,72,9,0,30,154,77,49,69,10,0,0,0,
-3,36,15,10,78,81,26,80,50,0,0,0,3,129,246,248,248,250,251,211,160,20,0,8,38,61,35,0,74,178,182,100,2,9,33,38,84,39,76,102,90,20,0,0,0,0,69,235,
-251,206,18,13,83,50,0,0,0,24,111,178,124,81,13,0,3,36,16,16,111,149,22,0,0,0,0,86,141,16,0,43,76,39,10,21,33,1,0,8,38,61,32,11,82,175,201,249,
-248,95,82,70,2,0,0,6,38,14,0,0,5,123,124,37,212,248,198,51,72,9,0,30,190,250,249,138,10,0,0,0,3,36,15,28,216,250,204,93,50,0,0,0,3,129,246,248,
-248,250,251,211,160,20,0,8,38,61,35,0,74,178,182,100,2,110,249,249,250,249,244,143,90,20,0,0,0,0,55,165,99,32,198,248,220,65,0,0,0,24,111,178,124,81,13,0,
-3,36,16,16,111,149,22,0,0,0,0,86,141,16,94,249,250,115,96,248,249,94,0,8,38,61,32,11,82,181,235,249,65,77,69,2,0,0,6,38,14,0,0,5,123,124,6,0,
-30,63,16,72,102,78,8,0,30,171,115,17,35,6,0,3,36,19,0,0,10,77,102,68,37,0,0,0,0,3,128,246,249,253,253,246,139,148,22,8,61,56,7,74,178,178,74,10,
-38,33,37,88,30,0,16,92,102,77,10,0,0,69,234,249,209,76,21,76,88,16,0,0,0,80,174,98,31,55,81,17,32,19,0,0,19,112,149,22,0,0,0,0,76,136,22,6,
-67,73,48,36,0,0,0,8,61,56,7,0,10,82,175,200,249,250,134,2,0,0,6,38,14,0,0,5,123,124,6,0,46,212,248,214,113,78,8,90,249,252,166,17,35,6,0,3,
-36,19,0,0,27,215,251,213,52,0,0,0,81,243,250,250,249,251,200,64,86,148,22,8,61,56,7,74,178,178,74,10,38,33,122,250,249,248,248,245,143,77,10,0,0,55,159,48,
-46,212,248,219,100,16,0,0,0,80,174,98,31,55,81,17,32,19,0,0,19,112,149,22,0,0,0,0,76,136,22,98,250,250,249,249,94,0,0,8,61,56,7,0,27,216,253,238,
-175,87,4,0,0,6,38,14,0,0,5,123,124,6,0,0,0,28,57,56,90,102,75,11,43,77,155,79,14,36,9,34,19,0,0,0,10,81,88,104,159,53,0,0,0,0,0,139,
-251,253,250,249,244,141,152,79,35,9,101,181,178,74,0,6,37,56,86,29,0,6,34,23,78,102,78,10,69,234,249,203,18,27,62,73,43,5,0,0,64,170,90,0,13,32,55,95,
-28,0,0,0,0,19,112,149,22,0,0,0,0,85,147,22,1,76,85,37,12,0,10,62,35,9,38,10,0,10,80,175,205,250,248,90,0,6,38,14,0,0,5,123,124,6,0,0,
-0,44,211,250,218,113,138,248,249,143,155,79,14,36,9,34,19,0,0,0,10,94,218,251,233,67,0,81,243,248,248,250,251,200,57,31,14,88,152,79,35,9,101,181,178,74,0,6,
-37,56,86,117,248,248,249,249,244,143,78,10,55,159,48,18,198,249,216,86,43,5,0,0,64,170,90,0,13,32,55,95,28,0,0,0,0,19,112,149,22,0,0,0,0,85,147,22,
-150,250,250,165,12,0,10,62,35,9,38,27,198,248,219,181,175,168,46,1,5,38,14,0,0,5,123,124,6,0,0,0,0,1,59,73,30,76,102,88,53,3,29,152,79,14,58,21,
-0,0,0,13,84,48,12,77,120,162,52,0,0,0,45,172,201,247,248,248,249,243,169,163,23,69,181,190,81,0,11,34,34,90,55,1,5,38,14,0,11,80,102,126,235,249,203,18,
-0,1,59,74,17,0,1,64,171,91,0,0,0,13,52,68,81,13,0,0,0,0,19,112,149,22,0,0,0,0,88,148,42,30,66,76,23,9,62,37,0,0,10,39,10,0,19,105,
-175,200,249,248,93,38,14,0,0,5,123,124,6,0,0,0,0,1,73,214,249,228,251,250,127,3,29,152,79,14,58,21,0,0,0,13,84,48,30,215,251,234,126,243,248,248,249,251,
-201,90,0,4,22,11,128,163,23,69,181,190,81,0,11,34,34,90,55,1,102,249,248,248,248,244,143,117,163,48,18,198,248,203,73,74,17,0,1,64,171,91,0,0,0,13,52,68,
-81,13,0,0,0,0,19,112,149,22,0,0,0,0,88,186,249,249,250,250,105,9,62,37,0,0,27,207,248,203,36,105,80,175,169,47,32,12,0,0,5,123,124,6,0,0,0,0,
-3,50,44,28,54,28,89,102,73,5,0,29,153,100,28,32,6,0,13,84,50,0,0,13,77,119,162,53,0,46,175,175,56,125,246,248,248,250,245,136,156,173,175,81,35,16,30,33,
-84,28,8,36,36,11,0,0,0,10,127,242,251,205,18,0,3,50,44,28,59,16,58,170,91,0,0,0,3,31,27,30,55,82,13,0,0,0,0,19,110,149,22,0,0,0,0,102,
-162,22,2,66,68,55,35,0,0,0,0,10,33,16,76,68,80,175,201,249,249,98,0,0,5,123,124,6,0,0,0,0,3,50,44,44,224,249,250,165,73,5,0,29,153,100,28,32,
-6,0,13,84,50,0,0,30,215,251,252,249,248,249,251,201,56,64,69,0,6,59,36,81,156,173,175,81,35,16,30,33,84,28,8,36,36,106,248,248,248,248,247,213,114,27,198,248,
-204,64,44,28,59,16,58,170,91,0,0,0,3,31,27,30,55,82,13,0,0,0,0,19,110,149,22,0,0,0,90,250,252,108,96,250,250,126,35,0,0,18,198,248,210,33,76,68,
-9,82,175,171,49,17,24,5,123,124,6,0,0,0,0,4,52,46,1,0,26,69,52,80,102,72,5,0,61,160,80,13,34,20,83,50,0,0,0,0,12,77,118,158,83,169,175,55,
-0,2,127,246,250,249,248,247,203,179,86,0,16,52,40,81,25,0,6,42,38,20,23,0,0,69,235,251,218,24,0,4,52,46,1,0,26,89,169,88,0,0,0,3,36,18,0,12,
-32,55,82,13,0,0,0,0,18,111,149,22,0,0,24,31,88,148,22,12,96,82,1,0,0,0,0,0,14,93,72,0,9,82,175,202,249,248,105,5,123,124,6,0,0,0,0,4,
-52,46,1,90,249,250,250,216,113,72,5,0,61,160,80,13,34,20,83,50,0,0,0,0,100,249,251,252,250,251,201,55,0,2,67,70,55,33,0,69,179,179,86,0,16,52,40,81,
-25,0,6,42,38,20,109,248,248,249,252,246,135,200,248,204,66,46,1,0,26,89,169,88,0,0,0,3,36,18,0,12,32,55,82,13,0,0,0,0,18,111,149,22,0,90,249,249,
-150,148,22,102,251,250,90,0,18,198,248,203,31,93,72,0,0,10,83,175,169,61,7,123,124,6,0,0,0,0,4,53,48,2,0,2,44,59,52,28,81,102,70,34,17,28,152,81,
-18,94,52,0,0,0,0,0,0,12,73,133,208,182,52,0,0,0,12,147,247,248,250,253,251,165,135,32,31,42,99,35,0,0,14,9,26,58,8,0,69,234,249,205,22,0,4,53,
-48,2,0,2,62,173,124,15,0,0,3,36,19,0,0,0,13,33,55,82,13,0,0,0,0,19,112,150,28,24,33,1,0,88,152,76,36,66,69,3,0,0,0,9,80,72,36,9,
-0,10,83,175,201,250,248,169,124,6,0,0,0,0,4,53,48,2,90,248,249,140,210,249,216,113,70,34,17,28,152,81,18,94,52,0,0,0,0,81,243,248,250,252,253,205,52,0,
-0,0,12,96,83,1,74,178,173,123,135,32,31,42,99,35,0,0,14,9,26,58,8,94,249,252,249,248,246,248,204,67,48,2,0,2,62,173,124,15,0,0,3,36,19,0,0,0,
-13,33,55,82,13,0,0,0,0,19,112,150,108,249,249,94,0,88,152,76,117,250,250,104,198,248,203,26,80,72,36,9,10,0,8,87,173,163,138,122,6,0,0,0,0,4,54,47,
-1,0,2,49,51,3,25,59,30,82,102,75,2,0,28,152,82,32,35,6,0,0,0,0,0,0,68,184,170,168,50,0,0,10,60,36,125,249,253,253,250,243,146,162,57,86,37,30,
-7,0,0,17,33,16,36,73,234,249,203,18,0,4,54,47,1,0,2,66,170,90,25,64,16,1,36,19,0,0,0,0,0,13,33,55,82,13,0,0,0,0,18,109,88,32,1,0,
-0,10,129,164,22,2,70,72,114,95,14,82,70,1,8,39,10,0,8,87,173,197,252,252,94,0,0,0,0,4,54,47,1,90,248,249,126,3,42,211,249,216,113,75,2,0,28,152,
-82,32,35,6,0,0,81,243,248,248,250,252,197,168,50,0,0,10,60,36,65,123,179,178,72,0,94,162,57,86,37,30,7,0,0,17,33,16,36,60,194,249,248,248,248,246,121,47,
-1,0,2,66,170,90,25,64,16,1,36,19,0,0,0,0,0,13,33,55,82,13,0,0,0,0,18,161,250,249,94,0,0,10,129,164,22,96,250,250,251,223,31,82,70,1,8,39,
-39,8,13,38,84,205,201,51,2,0,0,0,5,54,46,1,0,4,49,51,3,0,0,26,57,48,86,102,68,4,0,27,152,82,14,38,6,0,0,0,0,60,190,154,87,113,162,52,
-10,62,37,0,75,216,252,250,248,248,245,158,185,50,0,7,37,8,17,36,3,0,79,237,249,203,18,0,5,54,46,1,0,4,67,170,90,0,0,26,61,42,15,0,0,0,0,0,
-0,0,13,33,55,82,13,0,0,0,0,35,55,2,0,0,10,62,37,88,148,20,3,150,199,169,94,70,2,0,0,10,39,8,13,38,84,205,221,249,248,90,0,0,5,54,46,1,
-90,248,249,126,3,0,0,42,211,249,217,113,68,4,0,27,152,82,14,38,6,81,243,248,248,250,252,187,87,113,162,52,10,62,37,0,75,199,199,76,0,10,33,113,185,50,0,7,
-37,8,17,36,3,0,66,173,53,105,248,248,248,250,242,72,0,4,67,170,90,0,0,26,61,42,15,0,0,0,0,0,0,0,13,33,55,82,13,0,0,0,90,249,250,95,0,0,
-10,62,37,88,148,37,217,252,253,204,94,70,2,0,0,10,8,46,38,5,124,158,170,167,47,3,0,5,54,46,0,0,0,43,51,3,0,0,0,0,48,62,32,83,102,67,4,27,
-43,151,83,14,38,6,0,0,60,190,155,50,14,77,117,167,98,37,0,74,189,185,164,246,248,249,249,247,155,148,22,0,7,46,38,2,0,69,234,249,211,24,0,5,54,46,0,0,
-0,61,170,90,0,0,0,0,48,66,15,0,0,0,0,1,55,6,0,13,33,55,82,13,0,0,24,29,17,35,1,9,62,37,0,0,111,145,117,179,187,124,66,1,0,0,0,0,
-8,46,38,5,124,158,170,199,249,248,90,5,54,46,0,90,248,249,126,3,0,0,0,0,63,212,249,216,113,67,4,0,27,151,83,14,107,243,248,248,250,252,187,50,14,77,117,167,
-98,37,0,74,189,185,121,67,14,31,38,88,108,148,22,0,7,46,38,2,0,55,159,59,53,200,248,248,250,249,248,243,72,61,170,90,0,0,0,0,48,66,15,0,0,0,0,1,
-55,6,0,13,33,55,82,13,0,90,249,249,105,35,1,9,62,37,0,0,120,230,252,245,253,251,133,1,0,0,0,0,17,38,40,128,124,12,80,176,169,46,9,54,45,0,0,0,
-0,14,4,0,0,0,3,36,15,24,59,34,85,102,86,221,198,42,151,84,14,37,4,59,190,155,52,0,0,10,75,133,173,48,69,178,185,118,21,128,247,249,250,249,243,141,148,22,
-16,38,36,10,69,234,249,203,31,35,12,54,45,0,0,0,22,154,91,0,0,0,3,36,15,24,64,18,0,0,0,83,179,110,3,0,13,33,55,100,209,86,33,1,0,16,36,58,
-36,0,0,0,24,173,185,160,101,93,65,2,0,0,0,0,17,38,40,128,124,12,80,176,201,249,248,125,45,0,90,248,248,103,4,0,0,0,3,36,15,41,211,249,217,113,66,3,
-0,26,151,138,244,249,248,250,252,187,52,0,0,10,75,133,173,48,69,178,185,118,21,69,82,40,86,30,0,88,148,22,16,38,36,10,55,159,48,18,201,249,205,134,249,248,248,248,
-244,182,91,0,0,0,3,36,15,24,64,18,0,0,0,83,179,110,3,0,13,33,55,82,98,248,249,94,0,16,36,58,36,0,0,18,203,253,241,166,158,250,250,91,0,0,0,0,
-36,6,127,142,10,0,10,82,175,168,71,41,0,0,0,0,0,0,0,0,0,3,33,19,0,0,27,59,35,86,113,212,248,198,42,151,84,10,79,190,155,52,0,0,0,8,58,83,
-112,166,176,173,73,20,61,43,133,248,249,248,248,243,141,154,52,1,9,95,234,249,198,18,0,16,69,44,0,0,0,22,148,88,0,0,0,3,33,19,0,0,27,64,18,0,0,48,
-164,185,117,3,0,13,56,225,250,241,72,0,0,8,64,54,0,0,0,5,114,185,189,180,77,10,68,70,3,0,0,19,36,6,127,142,10,0,10,82,175,200,250,249,90,90,248,248,
-94,0,0,0,0,3,33,19,0,0,43,211,249,217,113,64,2,0,99,250,250,248,251,252,187,52,0,0,0,8,58,83,112,166,176,173,73,20,61,43,77,102,31,0,0,0,88,154,
-52,1,9,83,161,48,18,198,248,206,82,44,90,248,248,249,252,247,72,0,0,3,33,19,0,0,27,64,18,0,0,48,164,185,117,3,0,13,33,125,250,249,94,0,0,8,64,54,
-0,0,18,199,251,239,193,180,77,100,250,250,92,0,0,19,8,123,124,9,2,0,0,10,84,175,172,45,2,0,0,0,0,0,0,0,3,36,18,0,0,0,0,26,59,36,86,113,
-212,248,198,41,142,119,183,154,54,0,0,0,10,62,34,12,125,201,183,104,0,7,44,71,82,131,246,248,248,248,244,156,148,20,66,234,249,198,18,0,8,53,49,32,6,0,22,148,
-88,0,0,0,3,36,18,0,0,0,0,26,64,18,0,0,41,179,204,117,3,5,219,249,251,253,244,69,10,62,34,15,35,3,6,116,179,162,108,146,157,22,3,70,70,2,17,36,
-8,123,124,9,2,0,0,10,84,175,202,249,248,248,248,94,0,0,0,0,3,36,18,0,0,0,0,42,211,249,217,113,63,82,243,249,252,252,251,187,54,0,0,0,10,62,34,12,
-125,201,183,104,0,7,44,71,82,74,64,3,0,0,19,111,148,20,51,160,49,18,198,248,205,68,49,32,6,90,249,252,250,248,243,77,3,36,18,0,0,0,0,26,64,18,0,0,
-41,179,204,117,3,0,97,249,251,202,74,1,10,62,34,15,35,3,33,236,238,169,108,146,157,22,96,250,250,91,17,36,123,124,6,0,0,0,0,0,37,95,175,169,48,3,0,0,
-0,0,0,3,36,19,0,0,0,0,0,0,26,59,38,87,113,212,248,198,91,209,181,58,30,6,0,10,62,37,0,74,182,199,155,147,56,33,38,90,72,21,126,246,248,248,248,243,
-136,160,231,249,198,18,0,0,38,45,0,13,38,28,148,88,0,0,0,3,36,19,0,0,0,0,0,0,26,64,18,0,0,41,180,204,117,4,95,246,252,253,253,241,103,37,0,0,
-19,41,119,179,162,107,66,22,128,157,22,3,69,70,21,7,123,124,6,0,0,0,0,0,37,95,175,220,249,248,150,0,0,0,0,3,36,19,0,0,0,0,0,0,42,211,249,218,
-158,246,248,248,250,253,205,58,30,6,0,10,62,37,0,74,182,199,155,147,56,33,38,90,72,21,66,70,3,0,21,3,81,153,148,44,18,198,248,203,53,45,0,13,38,28,186,247,
-248,248,248,243,102,19,0,0,0,0,0,0,26,64,18,0,0,41,180,204,117,49,248,250,191,195,169,27,58,37,0,0,19,41,119,187,168,107,66,22,128,157,22,96,250,250,104,7,
-124,6,0,0,0,0,0,0,1,14,82,175,170,48,4,0,0,0,3,36,19,0,0,0,0,0,0,0,0,26,58,39,88,113,211,250,240,167,160,85,13,34,16,60,37,0,74,178,
-178,82,76,118,173,82,87,28,18,61,22,126,246,248,248,248,245,242,252,202,18,0,0,0,4,0,0,0,35,164,92,0,0,0,3,36,19,0,0,0,0,0,0,0,0,26,64,18,
-0,0,41,180,203,125,57,179,251,252,250,251,242,54,0,0,7,129,189,163,104,70,2,0,22,130,157,22,3,70,72,124,124,6,0,0,0,0,0,0,1,14,144,253,253,249,248,90,
-0,0,3,36,19,0,0,0,0,0,0,0,0,42,211,249,250,251,250,250,251,190,160,85,13,34,16,60,37,0,74,178,178,82,76,118,173,82,87,28,18,61,22,66,70,3,0,0,
-50,174,150,33,198,248,203,18,4,0,0,0,35,164,92,90,243,248,248,249,244,77,0,0,0,0,0,0,0,26,64,18,0,0,41,180,203,125,155,182,183,152,74,102,43,0,0,0,
-7,129,189,163,104,70,2,0,22,130,157,22,96,250,250,170,96,0,0,0,0,0,0,0,0,0,10,85,159,132,41,6,0,3,36,19,0,0,0,0,0,0,0,0,0,0,25,58,
-40,86,125,241,252,210,40,150,87,20,73,38,0,74,178,178,74,0,19,83,122,189,73,0,0,22,61,22,126,246,248,249,252,249,227,156,22,0,0,0,0,0,0,22,148,97,38,6,
-0,3,36,19,0,0,0,0,0,0,0,0,0,0,26,64,19,0,0,40,181,207,170,179,177,245,250,250,250,240,54,8,121,179,165,114,69,2,0,0,0,22,130,157,20,4,159,160,
-9,0,0,0,0,0,0,0,0,90,248,250,195,177,249,248,90,3,36,19,0,0,0,0,0,0,0,0,0,0,109,249,249,250,251,252,186,52,24,150,87,20,73,38,0,74,178,178,
-74,0,19,83,122,189,73,0,0,22,61,22,66,70,3,55,157,44,93,231,249,203,18,0,0,0,0,22,148,97,38,6,90,243,249,248,248,243,77,0,0,0,0,0,0,0,26,64,
-19,0,0,40,181,207,170,179,134,34,66,70,78,13,0,8,121,179,165,114,69,2,0,0,0,22,130,157,20,97,253,253,250,92,0,0,0,0,0,0,0,0,0,8,9,122,130,41,
-9,34,19,0,0,0,0,0,0,0,0,0,0,0,0,25,53,84,191,162,216,248,198,40,154,114,43,32,78,178,178,74,0,10,30,46,102,121,161,52,0,0,22,61,22,126,248,252,
-249,248,243,141,148,22,0,0,0,0,22,148,88,0,14,36,9,34,19,0,0,0,0,0,0,0,0,0,0,0,0,25,64,19,0,23,79,193,204,168,28,128,249,249,250,250,236,149,
-179,160,101,75,32,2,0,0,0,0,22,128,145,121,120,74,70,3,0,0,0,0,0,0,90,248,248,99,9,122,176,249,248,112,19,0,0,0,0,0,0,0,0,0,0,81,243,249,
-250,251,253,191,81,0,0,24,154,114,43,32,78,178,178,74,0,10,30,46,102,121,161,52,0,0,22,61,22,66,109,160,48,18,198,250,233,39,0,0,0,0,22,148,88,0,14,36,
-9,112,244,248,248,248,243,77,0,0,0,0,0,0,0,25,64,19,0,23,79,193,204,168,28,59,42,30,55,82,21,121,179,160,101,75,32,2,0,0,0,0,22,128,145,121,177,250,
-250,250,92,0,0,0,0,0,0,0,0,0,0,5,122,129,62,21,0,0,0,0,0,0,0,0,0,0,0,16,3,0,74,191,153,96,113,211,248,200,92,64,0,84,190,180,74,0,
-10,34,39,83,40,74,119,162,52,0,0,22,61,85,243,251,248,248,248,243,141,148,22,0,0,22,148,88,0,0,0,14,58,21,0,0,0,0,0,0,0,0,0,0,0,16,4,0,
-25,60,35,48,139,179,192,203,145,37,90,248,249,250,253,248,178,104,70,1,16,36,3,0,0,0,0,22,178,185,27,3,70,70,3,0,0,0,0,90,248,248,94,0,0,5,122,176,
-250,248,90,0,0,0,0,0,0,0,0,0,81,244,248,248,250,253,252,219,113,56,0,9,79,64,0,84,190,180,74,0,10,34,39,83,40,74,119,162,52,0,0,22,61,72,183,102,
-19,198,248,203,100,148,22,0,0,22,148,88,0,0,0,14,58,21,86,243,248,248,248,243,81,0,0,0,0,16,4,0,25,60,35,48,139,179,192,203,145,37,0,12,33,62,166,182,
-158,104,70,1,16,36,3,0,0,0,0,22,178,185,27,154,96,250,250,92,0,0,0,0,0,0,0,0,0,0,8,139,136,38,6,0,0,0,0,0,0,0,11,16,0,18,30,62,
-189,155,78,45,91,113,211,250,206,18,74,177,182,101,4,8,34,39,87,30,0,13,78,120,163,51,0,0,85,239,249,223,246,248,248,248,243,141,147,18,18,147,88,0,0,0,3,32,
-28,34,6,0,0,0,0,0,0,0,11,16,0,19,36,3,0,38,90,154,179,127,59,191,207,120,5,94,248,251,253,253,240,104,2,0,0,19,36,5,0,0,5,120,125,128,154,22,
-3,70,70,3,0,0,90,248,248,94,0,0,0,0,8,139,180,249,248,90,0,0,0,0,0,0,11,92,243,248,249,250,252,191,216,249,218,113,59,55,36,0,74,177,182,101,4,8,
-34,39,87,30,0,13,78,120,163,51,0,0,71,182,66,72,212,248,203,18,0,88,147,18,18,147,88,0,0,0,3,32,28,34,6,86,243,248,248,248,243,81,11,16,0,19,36,3,
-0,38,90,154,179,127,59,191,207,120,5,0,19,139,195,185,99,67,2,0,0,19,36,5,0,0,5,120,125,128,154,22,19,96,250,250,92,0,0,0,0,0,0,0,0,3,36,24,
-118,117,43,6,0,0,0,0,0,0,5,36,18,0,68,184,153,49,22,57,46,92,113,214,248,212,172,165,71,12,40,34,38,87,30,0,0,0,12,66,116,153,38,56,232,249,212,38,
-126,246,248,248,248,243,138,135,135,84,0,0,0,3,36,19,0,14,38,6,0,0,0,0,0,0,5,36,19,0,18,32,24,46,149,190,135,21,61,65,171,197,111,16,165,252,252,251,
-251,232,45,0,0,0,19,21,0,6,109,120,4,22,128,146,19,3,70,70,3,90,248,248,94,0,0,0,0,3,36,24,118,168,249,248,90,0,0,0,0,0,85,245,248,248,250,252,
-185,49,38,211,249,218,113,72,0,66,165,165,71,12,40,34,38,87,30,0,0,0,12,66,116,153,38,41,149,64,76,203,250,217,21,0,0,0,84,135,135,84,0,0,0,3,36,19,
-0,14,38,6,86,243,248,248,248,243,81,36,19,0,18,32,24,46,149,190,135,21,61,65,171,197,111,16,108,162,160,109,102,15,0,0,0,0,19,21,0,6,109,120,4,22,128,146,
-152,21,96,250,250,92,0,0,0,0,0,0,3,36,19,0,6,109,125,42,6,0,0,0,0,0,0,3,29,70,186,148,68,0,0,22,56,69,96,113,222,253,235,79,0,8,39,57,
-85,28,0,0,0,0,0,0,50,109,164,232,249,198,38,59,18,126,246,248,248,248,244,184,150,21,0,5,110,71,19,0,0,0,14,38,6,0,0,0,0,0,0,3,36,18,0,35,
-74,142,168,133,69,62,34,0,34,169,195,161,154,183,251,250,250,250,231,41,0,0,0,0,5,118,111,6,0,0,22,121,152,21,3,70,135,248,248,94,0,0,0,0,3,36,19,0,
-6,109,172,249,248,90,0,0,0,81,243,248,249,250,252,181,68,0,0,38,210,250,219,113,109,165,165,66,0,8,39,57,85,28,0,0,0,0,0,0,50,109,157,151,34,18,203,250,
-207,80,70,3,0,0,21,150,150,21,0,5,110,71,19,0,0,0,14,38,6,86,243,248,248,221,27,3,36,18,0,35,74,142,168,133,69,62,34,0,34,169,195,161,154,135,98,81,
-54,80,13,0,0,0,0,0,5,118,111,6,0,0,22,121,128,157,22,96,250,250,92,0,0,0,0,3,36,19,0,0,0,5,125,130,42,6,0,0,0,0,0,0,61,191,154,49,
-14,34,2,7,63,66,48,140,212,241,250,198,27,33,41,88,55,2,0,0,0,0,0,0,0,102,241,252,209,18,0,18,57,21,126,246,248,249,252,247,136,144,34,119,142,31,0,0,
-0,0,0,14,38,6,0,0,0,0,0,0,3,32,35,49,157,189,129,19,63,70,18,0,0,48,191,202,172,97,151,248,249,250,250,231,41,0,0,5,123,123,6,0,0,0,0,22,
-128,157,22,92,250,250,96,0,0,0,0,3,36,19,0,0,0,5,125,176,249,248,90,0,81,243,248,248,250,252,186,49,14,34,2,7,76,213,249,229,212,193,74,0,10,33,41,88,
-55,2,0,0,0,0,0,0,0,90,191,164,62,198,248,207,71,21,66,70,3,27,147,81,81,144,34,119,142,31,0,0,0,0,0,14,38,6,81,243,221,27,0,0,3,32,35,49,
-157,189,129,19,63,70,18,0,0,48,191,202,172,97,69,16,31,56,83,11,0,0,0,5,123,123,6,0,0,0,0,22,22,130,157,22,96,250,250,92,0,0,3,36,19,0,0,0,
-3,69,65,122,129,42,6,0,0,15,14,59,190,155,68,14,0,14,19,60,33,21,115,193,206,154,209,248,205,55,88,23,10,38,5,4,9,0,0,0,69,233,250,225,168,52,0,0,
-21,61,22,126,246,252,251,248,243,139,180,141,20,0,0,0,0,0,0,0,14,38,6,0,0,22,56,6,0,23,76,157,179,135,30,60,33,22,64,20,13,124,179,193,202,149,9,113,
-248,249,250,250,223,41,5,123,124,6,0,0,0,0,0,0,22,130,192,249,248,138,70,3,0,0,3,36,19,0,0,0,3,69,65,122,175,249,248,141,243,248,248,250,252,187,68,14,
-0,14,19,60,33,38,223,253,244,154,49,10,32,40,88,23,10,38,5,4,9,0,0,0,55,158,83,127,234,249,203,18,21,61,22,66,70,118,91,0,0,85,180,141,20,0,0,0,
-0,0,0,0,14,38,6,77,27,22,56,6,0,23,76,157,179,135,30,60,33,22,64,20,13,124,179,193,202,149,9,0,13,35,59,81,17,0,5,123,124,6,0,0,0,0,0,0,
-0,22,130,157,22,96,250,250,91,1,36,19,0,0,0,3,70,71,5,5,122,129,39,6,0,2,79,191,155,52,3,34,16,7,61,37,0,74,185,196,111,94,113,212,249,218,45,0,
-0,13,37,37,9,10,23,69,234,249,198,65,120,163,52,0,0,22,61,22,126,247,248,248,248,249,191,144,20,0,0,0,0,0,0,0,0,14,35,3,9,80,102,54,18,55,153,189,
-135,17,61,37,0,0,24,74,142,179,145,116,183,194,122,6,118,248,249,250,250,225,149,124,6,0,0,0,0,0,0,0,0,63,251,252,108,3,70,70,2,1,36,19,0,0,0,3,
-70,71,5,5,122,175,249,248,248,248,251,252,187,52,3,34,16,7,61,37,0,74,190,242,251,219,113,65,39,87,29,0,0,13,37,37,9,10,23,55,159,48,18,209,251,236,66,0,
-0,22,61,22,66,81,3,0,4,115,162,144,20,0,0,0,0,0,0,0,0,14,35,3,9,80,102,54,18,55,153,189,135,17,61,37,0,0,24,74,142,179,145,116,183,194,122,6,
-0,11,34,70,82,27,132,124,6,0,0,0,0,0,0,0,0,0,22,130,157,22,96,250,250,112,17,0,0,0,3,70,70,3,0,0,5,122,129,42,4,60,190,155,60,0,0,1,
-36,65,36,0,74,178,178,90,56,56,96,111,219,249,198,18,0,4,44,40,13,37,77,234,249,198,18,0,51,119,163,52,0,0,22,61,22,126,246,248,252,252,245,139,148,22,0,0,
-0,0,0,0,0,0,10,40,79,102,77,54,65,153,179,127,45,65,36,0,0,0,15,144,197,157,92,76,39,170,204,124,6,124,249,249,250,253,240,36,0,0,0,0,0,0,0,0,
-0,0,137,176,157,22,3,69,68,33,17,0,0,0,3,70,70,3,0,0,5,165,250,249,248,250,252,187,60,0,0,1,36,65,36,0,74,178,178,102,211,250,220,111,93,26,0,0,
-0,4,44,40,13,37,64,159,48,18,198,248,213,128,163,52,0,0,22,61,22,66,70,7,123,141,26,85,148,22,0,0,0,0,0,0,0,0,10,40,79,102,77,54,65,153,179,127,
-45,65,36,0,0,0,15,144,197,157,92,76,39,170,204,124,6,4,42,37,61,173,135,6,0,0,0,0,0,0,0,0,0,0,0,22,130,157,22,96,250,250,90,0,0,3,70,71,
-4,0,0,0,0,5,122,122,88,188,155,52,28,18,0,10,60,37,0,79,178,178,74,0,28,64,73,102,112,208,248,198,24,38,11,19,61,78,234,249,198,18,0,0,0,51,119,163,
-52,0,0,22,61,22,128,251,252,248,248,243,141,148,22,0,1,0,0,0,0,0,8,82,102,78,31,53,167,185,124,19,60,37,0,0,0,15,134,179,156,112,80,4,0,35,178,204,
-128,39,132,248,253,253,250,223,27,0,0,0,0,0,4,0,0,0,0,22,130,157,22,4,86,76,1,0,0,3,70,71,4,0,0,0,81,243,252,252,251,253,210,52,28,18,0,10,
-60,37,0,79,178,178,74,0,44,212,250,221,112,43,0,0,6,38,11,19,61,65,159,48,18,198,248,203,18,51,119,163,52,0,0,22,61,22,69,159,141,23,0,0,88,148,22,0,
-1,0,0,0,0,0,8,82,102,78,31,53,167,185,124,19,60,37,0,0,0,15,134,179,156,112,80,4,0,35,178,204,128,39,12,23,151,154,85,13,0,0,0,0,0,0,4,0,
-0,0,0,0,22,129,158,48,106,250,250,91,1,70,70,4,44,22,0,0,0,0,1,142,209,153,54,0,2,32,24,58,37,0,79,202,187,74,0,10,29,52,100,70,94,113,208,248,
-206,31,0,24,85,237,249,198,18,0,0,0,0,0,62,118,161,52,0,0,22,64,136,194,247,248,248,248,243,141,148,24,46,22,0,0,0,10,79,102,80,51,56,154,180,139,34,58,
-37,0,0,0,15,135,179,148,91,80,60,19,0,0,34,177,208,129,20,194,252,249,250,250,223,27,0,0,0,1,30,19,0,0,0,0,22,129,158,48,19,67,70,1,1,70,70,4,
-44,22,0,81,243,248,248,252,253,252,250,90,2,32,24,58,37,0,79,202,187,74,0,10,29,66,220,250,219,113,44,1,34,14,0,24,72,172,53,18,198,248,203,18,0,0,62,118,
-161,52,0,0,22,64,136,166,80,2,0,0,0,88,148,24,46,22,0,0,0,10,79,102,80,51,56,154,180,139,34,58,37,0,0,0,15,135,179,148,91,80,60,19,0,0,34,177,
-208,129,20,132,135,36,55,82,13,0,0,0,0,1,30,19,19,0,0,0,0,22,137,162,22,96,250,250,132,69,3,0,24,64,20,0,0,0,59,183,190,144,34,6,0,11,72,44,
-0,74,178,188,138,28,6,33,40,84,46,54,58,99,113,208,248,198,18,71,234,249,207,24,0,0,0,0,0,0,1,58,114,162,53,0,5,135,161,37,125,246,248,248,248,243,141,148,
-44,64,20,0,10,79,102,76,31,63,169,181,121,19,72,44,0,0,0,17,136,179,146,94,76,4,20,64,23,0,0,34,177,203,166,116,136,248,249,250,250,219,27,0,0,0,4,36,
-19,0,0,0,0,22,137,162,22,3,68,65,65,69,3,0,24,64,94,243,248,248,250,251,211,185,249,248,90,11,72,44,0,74,178,188,138,28,6,33,40,84,60,210,250,220,113,46,
-3,0,0,57,159,60,54,199,248,203,18,0,0,0,1,58,114,162,53,0,5,135,161,37,64,62,1,0,0,0,88,148,44,64,20,0,10,79,102,76,31,63,169,181,121,19,72,44,
-0,0,0,17,136,179,146,94,76,4,20,64,23,0,0,34,177,203,166,116,3,14,34,55,82,13,0,0,0,0,4,36,36,19,0,0,3,30,34,127,157,22,97,251,251,93,0,0,
-0,23,64,18,0,60,191,154,58,121,129,39,16,59,36,30,87,178,178,74,28,89,52,38,96,111,22,22,49,42,100,112,207,248,214,235,249,198,31,38,6,0,0,0,0,0,0,0,
-62,120,158,53,115,140,39,58,26,95,243,248,248,248,243,141,148,43,60,28,77,102,78,33,58,157,183,139,24,59,36,30,18,0,25,138,179,144,93,75,5,0,0,23,55,5,0,0,
-39,194,204,124,5,135,248,249,250,250,214,27,0,0,0,3,36,19,0,0,3,30,34,127,157,22,5,98,98,5,0,0,0,97,246,248,248,250,252,185,58,121,175,249,248,128,36,30,
-87,178,178,74,28,89,52,38,96,111,22,39,209,249,220,112,42,2,57,159,48,18,201,249,204,18,0,0,0,0,0,0,62,120,158,53,115,140,39,58,26,21,0,0,0,0,0,88,
-148,43,60,28,77,102,78,33,58,157,183,139,24,59,36,30,18,0,25,138,179,144,93,75,5,0,0,23,55,5,0,0,39,194,204,124,5,0,14,33,55,82,13,0,0,0,0,3,
-3,36,18,1,36,19,0,22,128,158,81,136,250,250,92,0,0,0,24,56,71,190,155,50,0,5,122,133,77,38,0,76,189,184,74,0,6,52,91,90,109,179,139,18,4,0,39,102,
-108,216,252,249,202,18,0,14,38,6,0,0,0,0,0,0,0,65,120,184,150,19,0,22,63,18,81,243,248,248,248,243,141,148,50,98,102,76,14,53,157,179,119,27,73,38,0,2,
-36,19,93,179,144,93,74,4,0,0,0,0,4,0,0,5,115,125,171,204,126,7,140,248,249,250,250,209,27,0,0,0,3,36,18,1,36,19,0,22,128,158,81,66,65,68,3,0,
-81,243,249,250,250,252,187,50,0,5,122,178,250,249,90,76,189,184,74,0,6,52,91,90,109,179,139,18,21,198,249,221,108,67,159,48,18,198,248,206,53,6,0,0,0,0,0,0,
-0,65,120,184,150,19,0,22,63,18,0,0,0,0,0,0,88,148,50,98,102,76,14,53,157,179,119,27,73,38,0,2,36,19,93,179,144,93,74,4,0,0,0,0,4,0,0,5,
-115,125,171,204,126,7,0,13,33,55,82,13,0,0,0,0,0,2,34,45,15,0,0,0,22,152,180,22,95,250,250,92,0,0,0,74,191,154,40,0,0,0,15,153,143,37,75,178,
-179,100,16,8,33,38,89,91,49,139,179,138,18,0,0,40,95,235,249,248,202,18,0,0,14,38,6,0,0,0,0,0,0,5,149,179,153,50,0,0,22,64,22,81,243,248,248,248,
-243,145,180,115,97,25,36,159,179,118,16,59,43,32,6,0,3,36,28,97,96,74,4,0,0,0,0,0,0,0,5,123,124,1,31,176,204,127,7,149,248,249,250,250,209,18,0,0,
-0,2,34,45,15,0,0,0,22,152,180,22,1,70,70,83,243,248,248,250,252,186,40,0,0,0,15,153,185,249,250,205,179,100,16,8,33,38,89,91,49,139,179,138,18,18,198,249,
-217,165,48,18,198,248,203,18,14,38,6,0,0,0,0,0,0,5,149,179,153,50,0,0,22,64,22,0,0,0,0,0,0,94,180,115,97,25,36,159,179,118,16,59,43,32,6,0,
-3,36,28,97,96,74,4,0,0,0,0,0,0,0,5,123,124,1,31,176,204,127,7,0,13,33,55,82,13,0,0,0,0,2,34,45,15,0,0,3,66,76,126,156,22,96,250,250,
-92,0,60,190,154,78,12,0,0,10,62,40,112,146,183,179,74,2,38,42,39,87,26,25,90,47,138,179,138,18,0,71,234,249,202,202,248,198,18,8,0,14,38,6,0,0,0,0,
-5,124,139,71,115,162,52,0,0,22,64,22,81,243,248,248,248,247,187,180,50,84,165,179,117,16,62,37,0,14,38,6,0,1,34,82,71,4,0,0,0,0,0,0,0,5,123,124,
-6,0,0,32,176,204,128,11,154,248,249,250,250,209,18,0,0,2,34,45,15,0,0,3,66,76,126,156,22,3,129,246,248,248,250,252,186,78,12,0,0,10,62,40,112,186,253,253,
-138,2,38,42,39,87,26,25,90,47,138,179,138,18,18,211,252,209,35,198,248,203,18,8,0,14,38,6,0,0,0,0,5,124,139,71,115,162,52,0,0,22,64,22,0,0,0,0,
-10,79,155,180,50,84,165,179,117,16,62,37,0,14,38,6,0,1,34,82,71,4,0,0,0,0,0,0,0,5,123,124,6,0,0,32,176,204,128,11,0,13,33,55,82,13,0,0,
-3,36,18,1,36,16,1,70,70,2,20,130,158,22,96,250,250,131,191,154,40,24,59,13,8,62,37,0,74,179,183,101,4,8,32,56,92,26,0,0,28,90,47,138,179,133,82,232,
-249,198,18,18,198,248,198,45,24,0,14,38,6,0,0,5,125,142,23,0,66,120,162,55,1,0,22,64,23,81,243,248,250,251,247,141,143,166,197,123,14,62,37,0,0,0,14,38,
-4,6,78,87,18,0,0,0,0,0,0,0,2,118,123,6,0,0,0,0,32,176,204,143,26,158,248,249,250,250,206,18,3,36,18,1,36,16,1,70,70,2,20,130,158,96,243,250,
-250,250,252,187,40,24,59,13,8,62,37,0,74,179,210,251,248,95,32,56,92,26,0,0,28,90,47,138,179,133,69,160,209,248,238,248,203,18,0,29,24,0,14,38,6,0,0,5,
-125,142,23,0,66,120,162,55,1,0,22,64,23,0,0,10,79,102,79,88,143,166,197,123,14,62,37,0,0,0,14,38,4,6,78,87,18,0,0,0,0,0,0,0,2,118,123,6,
-0,0,0,0,32,176,204,143,26,0,13,33,55,82,13,0,31,19,0,122,91,33,75,68,3,0,0,23,124,150,23,94,251,253,191,42,0,0,25,59,60,34,0,74,177,171,140,119,
-43,33,38,84,52,13,0,0,0,28,90,48,132,184,238,249,198,18,0,0,18,198,248,198,48,24,0,14,38,6,5,123,142,24,0,0,0,66,121,145,15,0,0,23,55,1,87,247,
-251,250,248,244,198,179,132,59,60,34,0,0,0,0,0,12,36,79,70,8,33,19,0,0,0,0,0,4,109,111,5,0,0,0,0,0,0,32,176,204,144,26,158,248,249,250,250,202,
-47,19,0,0,2,33,75,68,3,0,0,23,165,250,249,248,251,252,187,42,0,0,25,59,60,34,0,74,177,171,140,169,249,249,115,84,52,13,0,0,0,28,90,48,132,179,179,60,
-35,238,248,239,35,0,0,1,33,24,0,14,38,6,5,123,142,24,0,0,0,66,121,145,15,0,0,23,55,1,10,79,102,79,10,36,171,179,132,59,60,34,0,0,0,0,0,12,
-36,79,70,8,33,19,0,0,0,0,0,4,109,111,5,0,0,0,0,0,0,32,176,204,144,26,0,13,33,55,81,17,27,0,45,248,248,134,86,18,0,0,0,0,4,88,141,80,
-210,252,249,90,0,0,7,65,70,12,74,178,178,71,6,125,142,61,86,26,0,36,19,0,0,0,27,90,108,238,253,227,34,0,0,0,0,18,198,248,198,48,24,0,14,41,126,139,
-20,0,0,0,0,0,66,94,13,0,0,0,2,10,79,151,247,248,249,252,251,178,138,80,70,12,0,0,0,0,0,7,83,88,7,0,3,36,19,0,0,0,5,121,119,2,0,0,
-0,0,0,0,0,0,32,174,204,145,31,158,248,249,250,251,200,18,0,0,2,69,86,18,0,0,0,81,243,250,252,250,251,186,42,0,0,0,7,65,70,12,74,178,178,71,6,125,
-184,250,250,107,0,36,19,0,0,0,27,90,96,179,179,141,202,248,239,248,198,18,0,0,1,33,24,0,14,41,126,139,20,0,0,0,0,0,66,94,13,0,0,0,2,10,79,102,
-79,10,39,161,179,142,138,80,70,12,0,0,0,0,0,7,83,88,7,0,3,36,19,0,0,0,5,121,119,2,0,0,0,0,0,0,0,0,32,174,204,145,26,0,13,32,55,95,
-79,13,0,96,250,250,95,33,19,0,0,0,0,0,121,209,159,120,248,248,90,10,58,33,28,118,182,178,74,0,10,37,142,169,57,2,0,3,36,19,0,0,0,86,240,250,227,184,
-138,18,0,0,0,0,18,198,248,198,48,24,11,129,152,25,0,0,0,0,0,0,0,66,84,10,0,0,9,79,102,78,88,245,252,253,251,243,165,162,48,62,13,0,0,0,9,81,
-64,16,36,6,0,3,36,19,0,5,123,124,5,0,8,51,11,0,0,0,0,0,0,30,174,204,146,31,162,248,250,250,250,197,14,3,70,70,8,33,19,0,81,243,248,248,252,253,
-190,42,0,0,0,10,58,33,28,118,182,178,74,0,10,37,142,201,250,248,90,3,36,19,0,0,0,74,189,87,142,238,252,207,35,198,248,198,18,0,0,1,33,24,11,129,152,25,
-0,0,0,0,0,0,0,66,84,10,0,0,9,79,102,78,10,41,162,179,111,16,124,162,48,62,13,0,0,0,9,81,64,16,36,6,0,3,36,19,0,5,123,124,5,0,8,51,
-11,0,0,0,0,0,0,30,174,204,146,26,0,13,52,62,55,80,19,66,139,248,248,92,36,19,0,0,0,60,183,179,155,22,94,248,248,130,35,0,74,188,197,82,0,10,33,40,
-91,136,127,42,7,0,3,36,19,0,66,234,250,218,64,138,179,138,18,0,0,0,0,18,198,248,198,48,96,139,32,33,3,0,0,0,0,0,0,0,66,84,8,8,79,102,77,14,
-41,195,251,251,248,250,245,141,148,51,63,12,0,9,82,70,0,0,14,38,7,0,3,36,23,123,124,6,0,0,53,102,77,9,0,0,0,0,0,0,30,174,204,145,34,177,249,249,
-250,250,198,73,71,3,0,3,36,94,243,248,248,250,251,203,155,22,0,0,10,62,35,0,74,188,197,82,0,10,33,40,91,136,174,249,248,90,3,36,19,0,52,159,74,102,209,252,
-238,146,18,18,198,248,198,18,0,0,1,32,96,139,32,33,3,0,0,0,0,0,0,0,66,84,8,8,79,102,77,14,41,168,179,110,14,62,35,88,148,51,63,12,0,9,82,70,
-0,0,14,38,7,0,3,36,23,123,124,6,0,0,53,102,77,9,0,0,0,0,0,0,30,174,204,145,29,29,27,30,32,54,102,70,1,94,248,248,92,36,18,0,60,190,154,56,
-87,148,22,100,250,249,90,74,178,178,97,60,20,30,39,88,28,5,122,129,43,6,0,3,36,80,234,249,198,42,90,49,138,179,139,58,14,0,0,0,18,198,248,198,77,40,0,12,
-35,6,0,0,0,0,0,0,0,64,78,78,102,76,27,28,32,156,159,243,250,249,248,243,141,148,52,59,20,79,71,3,0,0,0,14,38,6,0,8,142,134,6,0,0,0,14,80,
-102,75,13,40,14,0,0,0,0,29,173,203,155,46,171,248,249,250,251,211,10,0,0,0,83,245,248,248,250,252,187,56,87,148,22,10,62,37,0,74,178,178,97,60,20,30,39,88,
-28,5,122,176,249,248,90,3,36,67,159,53,18,204,250,209,146,179,139,58,31,198,248,198,18,0,0,1,64,40,0,12,35,6,0,0,0,0,0,0,0,64,78,78,102,76,27,28,
-32,156,114,13,62,37,0,0,88,148,52,59,20,79,71,3,0,0,0,14,38,6,0,8,142,134,6,0,0,0,14,80,102,75,13,40,14,0,0,0,0,29,173,203,155,42,0,14,
-14,82,86,76,12,0,94,248,248,92,32,71,190,155,57,0,0,88,152,79,117,248,250,205,179,74,0,37,68,46,85,28,0,0,5,122,130,42,6,0,68,237,249,198,18,0,26,91,
-48,138,194,161,23,0,0,0,0,18,198,249,202,45,24,0,14,38,6,0,0,0,0,0,0,11,97,102,76,26,32,4,0,19,15,123,245,248,248,248,243,141,148,54,99,72,1,0,
-0,0,0,0,14,38,11,123,126,41,19,0,0,0,0,11,79,102,90,50,4,0,0,0,0,0,29,180,205,146,33,176,248,250,250,250,193,9,0,81,243,248,249,250,252,187,57,0,
-0,88,152,79,37,0,74,178,179,74,0,37,68,46,85,28,0,0,5,122,176,249,248,90,54,173,68,18,198,248,204,102,48,138,194,161,23,18,198,248,198,18,2,34,20,29,24,0,
-14,38,6,0,0,0,0,0,0,11,97,102,76,26,32,4,0,19,15,62,37,0,0,2,3,88,148,54,99,72,1,0,0,0,0,0,14,38,11,123,126,41,19,0,0,0,0,11,
-79,102,90,50,4,0,0,0,0,0,29,180,205,146,28,0,64,73,34,54,82,13,0,94,248,248,123,191,155,55,0,0,0,10,129,163,23,138,253,253,154,8,8,29,58,102,36,0,
-0,0,0,5,122,130,39,68,234,249,206,32,0,0,0,25,84,79,158,180,138,18,0,0,0,2,51,203,248,198,48,23,0,14,38,6,0,0,0,0,10,78,102,93,82,36,1,0,
-0,10,62,37,81,243,248,248,249,243,142,180,96,56,10,0,0,0,0,0,0,19,143,127,6,3,36,15,0,0,0,0,13,95,102,73,6,0,0,0,0,2,34,43,172,204,147,37,
-196,250,249,250,250,184,87,243,248,248,250,252,187,55,0,0,0,10,129,163,23,69,178,179,99,8,8,29,58,102,36,0,0,0,0,5,122,176,249,249,193,55,51,201,248,198,18,25,
-84,79,158,180,138,18,18,198,248,198,51,21,0,1,33,23,0,14,38,6,0,0,0,0,10,78,102,93,82,36,1,0,0,10,62,37,0,0,0,4,36,7,93,180,96,56,10,0,
-0,0,0,0,0,19,143,127,6,3,36,15,0,0,0,0,13,95,102,73,6,0,0,0,0,2,34,43,172,204,147,29,83,0,11,33,55,82,13,0,94,249,252,179,75,15,0,0,
-10,62,37,81,156,173,204,250,248,116,36,38,82,54,51,4,0,0,0,0,5,113,147,234,249,198,20,7,0,0,0,0,61,102,50,138,179,138,18,0,2,35,20,18,198,248,198,45,
-20,0,14,38,6,0,0,10,79,102,75,28,78,82,9,0,10,62,37,0,0,81,243,248,248,226,99,133,150,54,58,4,0,0,0,0,5,123,131,43,6,0,2,7,0,0,0,2,
-46,52,80,102,74,7,0,0,2,35,20,0,29,172,203,168,89,180,248,249,250,250,247,248,248,249,250,174,75,15,0,0,10,62,37,81,156,173,175,74,9,41,36,38,82,54,51,4,
-0,0,0,0,5,113,182,252,249,102,198,248,198,18,0,0,61,102,50,138,179,138,18,18,198,249,202,18,0,0,0,30,20,0,14,38,6,0,0,10,79,102,75,28,78,82,9,0,
-10,62,37,0,0,0,0,0,8,37,81,133,150,54,58,4,0,0,0,0,5,123,131,43,6,0,2,7,0,0,0,2,46,52,80,102,74,7,0,0,2,35,20,0,29,172,203,168,
-149,27,0,13,33,55,82,13,22,187,250,249,94,34,16,9,62,37,0,69,179,179,86,94,248,249,127,88,26,0,16,2,0,0,0,0,0,67,238,252,206,24,0,0,0,0,2,50,
-44,27,88,50,138,179,138,20,36,20,0,0,18,198,248,198,48,24,0,14,38,3,9,79,102,76,27,30,6,66,80,21,58,37,0,0,0,0,81,243,222,100,88,11,88,148,36,2,
-0,0,0,5,123,124,6,15,38,6,0,0,0,0,2,50,50,0,11,83,102,72,5,0,36,20,0,0,0,27,186,209,149,35,185,248,249,250,250,248,249,250,149,33,6,34,16,9,
-62,37,0,69,179,179,86,0,8,36,58,88,26,0,16,2,0,0,0,0,0,53,179,183,249,248,248,198,18,0,2,50,44,27,88,50,138,179,138,20,51,202,248,198,18,0,0,0,
-32,24,0,14,38,3,9,79,102,76,27,30,6,66,80,21,58,37,0,0,0,0,0,0,8,81,88,11,88,148,36,2,0,0,0,5,123,124,6,15,38,6,0,0,0,0,2,50,
-50,0,11,83,102,72,5,0,36,20,0,0,0,27,186,209,203,148,29,0,13,33,55,97,153,98,117,248,248,91,36,65,36,0,74,178,173,123,135,31,115,249,250,125,7,0,0,0,
-0,0,0,0,66,232,249,223,139,42,6,0,0,2,50,50,2,0,25,90,51,138,180,154,36,0,0,0,0,18,198,248,198,49,24,0,11,40,79,102,76,27,32,4,0,0,66,102,
-41,0,0,0,0,0,0,83,101,69,13,36,10,88,148,22,0,0,5,123,124,6,0,0,15,38,6,0,0,2,50,50,2,0,0,13,84,102,72,34,17,0,0,0,3,68,83,171,
-203,148,37,209,248,249,250,251,252,150,36,3,0,1,36,65,36,0,74,178,173,123,135,31,33,38,88,54,7,0,0,0,0,0,0,0,52,155,55,123,236,249,248,102,0,2,50,50,
-2,0,25,90,51,138,180,154,36,18,198,248,198,18,0,0,0,33,24,0,11,40,79,102,76,27,32,4,0,0,66,102,41,0,0,0,0,0,0,9,82,69,13,36,10,88,148,22,
-0,0,5,123,124,6,0,0,15,38,6,0,0,2,50,50,2,0,0,13,84,102,72,34,17,0,0,0,3,68,83,171,171,204,149,29,0,13,52,171,145,41,0,94,248,248,129,37,
-0,74,178,178,72,0,93,162,58,149,249,248,115,11,0,0,0,0,0,66,234,249,198,23,122,130,42,4,1,50,50,2,0,0,0,24,89,52,151,185,138,18,0,0,0,6,30,198,
-248,198,48,20,8,82,102,77,26,32,3,0,0,9,55,73,76,9,0,0,0,0,8,82,71,3,0,10,39,11,88,148,20,1,123,124,6,0,0,0,0,15,38,4,1,50,50,2,
-0,0,0,0,13,83,102,77,3,0,0,3,69,76,13,27,171,204,183,245,248,248,250,253,252,185,5,0,0,9,60,37,0,74,178,178,72,0,93,162,58,88,27,6,39,11,0,0,
-0,0,0,52,159,53,18,199,252,236,249,248,91,50,50,2,0,0,0,24,89,52,151,185,138,18,18,198,248,199,30,0,0,1,33,20,8,82,102,77,26,32,3,0,0,9,55,73,
-76,9,0,0,0,0,8,82,71,3,0,10,39,11,88,148,20,1,123,124,6,0,0,0,0,15,38,4,1,50,50,2,0,0,0,0,13,83,102,77,3,0,0,3,69,76,13,27,
-27,170,204,149,26,20,152,116,70,80,12,0,101,250,249,90,74,178,178,74,0,10,30,114,185,48,94,248,248,115,11,0,0,0,66,234,249,198,18,0,5,122,129,37,48,49,2,0,
-0,0,0,0,25,101,62,138,179,138,18,0,0,14,62,36,198,248,198,52,84,102,79,48,32,2,0,0,10,62,36,0,56,80,10,0,0,9,81,71,2,0,0,0,10,39,11,86,
-135,121,118,6,0,0,0,0,0,0,14,33,48,49,2,0,0,0,0,0,0,42,88,102,70,3,1,70,68,15,59,20,27,197,252,252,248,249,252,251,250,250,171,5,11,62,37,0,
-74,178,178,74,0,10,30,114,185,48,0,0,10,39,11,0,0,0,52,159,53,18,198,248,199,132,175,249,249,122,2,0,0,0,0,0,25,101,62,138,179,138,18,18,198,248,212,36,
-0,0,0,36,84,102,79,48,32,2,0,0,10,62,36,0,56,80,10,0,0,9,81,71,2,0,0,0,10,39,11,86,135,121,118,6,0,0,0,0,0,0,14,33,48,49,2,0,
-0,0,0,0,0,42,88,102,70,3,1,70,68,15,59,20,19,26,170,204,152,144,92,40,32,54,81,20,56,118,248,250,205,178,74,0,10,33,39,88,107,148,22,94,248,248,115,11,
-0,66,234,249,198,18,0,0,0,5,122,150,69,6,0,0,0,0,0,3,30,39,86,52,138,179,138,18,0,0,22,60,33,198,248,215,113,81,25,38,36,5,0,7,60,37,0,0,
-0,57,81,8,7,82,71,2,0,0,0,0,0,9,39,11,152,179,27,0,0,0,0,0,0,0,0,54,65,6,0,0,0,0,0,3,36,15,14,86,102,68,96,150,9,0,23,64,
-94,244,252,254,252,249,228,249,249,250,250,169,60,37,0,74,178,178,74,0,10,33,39,88,107,148,22,0,0,9,39,11,0,52,159,53,18,198,248,198,18,5,122,189,250,248,90,0,
-0,0,0,3,30,39,86,52,138,179,138,18,18,198,249,212,33,0,10,78,102,81,25,38,36,5,0,7,60,37,0,0,0,57,81,8,7,82,71,2,0,0,0,0,0,9,39,11,
-152,179,27,0,0,0,0,0,0,0,0,54,65,6,0,0,0,0,0,3,36,15,14,86,102,68,96,150,9,0,23,64,64,18,21,168,203,173,50,0,12,33,54,87,33,0,140,253,
-253,138,0,10,33,39,88,28,0,88,148,22,94,248,248,115,74,234,249,198,18,0,0,0,0,2,54,147,130,40,5,0,0,0,3,36,19,0,24,90,52,138,179,138,18,0,0,19,
-56,43,215,251,215,60,45,0,13,38,6,4,22,0,0,0,0,0,55,76,78,68,2,0,0,0,0,0,0,0,14,141,119,85,145,22,0,0,0,0,0,2,50,48,16,36,5,0,
-0,0,3,36,19,12,4,14,83,102,102,128,122,5,0,97,246,248,249,252,252,200,64,194,248,249,250,250,171,5,74,178,178,74,0,10,33,39,88,28,0,88,148,22,0,0,9,39,
-61,159,53,18,198,248,198,18,0,2,54,147,176,249,248,90,0,0,3,36,19,0,24,90,52,138,179,138,18,18,198,248,210,43,77,102,75,45,45,0,13,38,6,4,22,0,0,0,
-0,0,55,76,78,68,2,0,0,0,0,0,0,0,14,141,119,85,145,22,0,0,0,0,0,2,50,48,16,36,5,0,0,0,3,36,19,12,4,14,83,102,102,128,122,5,0,23,
-24,64,34,140,184,207,150,30,0,13,33,54,80,83,178,206,250,248,96,33,39,88,28,0,0,0,88,148,22,94,248,249,243,249,198,18,0,0,0,0,2,50,50,7,122,130,43,5,
-0,3,36,19,0,0,0,23,89,52,138,179,138,18,0,0,30,97,113,214,249,204,47,23,0,14,38,6,0,0,0,0,0,0,8,97,102,11,0,0,0,0,0,0,0,5,123,129,
-42,11,88,148,22,0,0,0,2,50,50,2,0,16,38,5,0,3,36,19,0,80,124,5,70,100,102,69,124,122,85,243,249,250,249,249,206,207,150,45,203,248,249,250,250,190,178,178,
-74,0,10,33,39,88,28,0,0,0,88,148,22,0,0,59,174,62,18,198,248,198,18,0,2,50,50,7,122,176,249,248,90,3,36,19,0,0,0,23,89,52,138,179,138,18,18,198,
-249,220,113,74,27,29,31,23,0,14,38,6,0,0,0,0,0,0,8,97,102,11,0,0,0,0,0,0,0,5,123,129,42,11,88,148,22,0,0,0,2,50,50,2,0,16,38,5,
-0,3,36,19,0,80,124,5,70,100,102,69,124,122,5,0,0,45,173,102,49,170,204,151,31,0,13,33,113,203,182,74,94,248,249,115,88,28,0,0,0,0,0,88,148,19,133,252,
-249,222,28,0,0,0,0,2,50,50,2,0,5,123,131,43,8,34,19,0,0,0,0,0,23,90,53,138,179,138,18,8,73,102,94,53,204,248,198,49,24,0,14,38,6,0,0,0,
-0,9,81,66,54,78,9,0,0,0,0,0,5,123,124,6,9,39,11,88,148,22,0,2,50,50,2,0,0,0,15,36,8,34,19,0,0,11,124,158,70,23,88,102,70,166,249,248,
-248,249,251,151,49,170,204,151,47,207,248,249,251,254,227,74,0,10,33,39,88,28,0,0,0,0,0,88,148,19,48,159,60,54,200,248,198,18,0,2,50,50,2,0,5,123,176,249,
-248,112,19,0,0,0,0,0,23,90,53,138,179,138,18,26,214,251,219,53,28,2,0,33,24,0,14,38,6,0,0,0,0,9,81,66,54,78,9,0,0,0,0,0,5,123,124,6,
-9,39,11,88,148,22,0,2,50,50,2,0,0,0,15,36,8,34,19,0,0,11,124,158,70,23,88,102,70,124,122,6,34,145,111,75,17,25,169,204,153,30,0,83,188,194,132,12,
-7,115,249,250,108,0,0,0,0,0,0,0,81,159,231,249,248,248,115,12,0,0,2,50,50,2,0,0,0,7,81,26,58,20,0,0,0,0,0,0,0,22,89,53,138,179,142,87,
-96,74,42,71,35,198,248,198,48,24,0,14,38,6,0,0,9,82,71,2,0,58,80,8,0,0,0,5,123,124,6,0,0,9,39,12,88,148,24,50,50,2,0,0,0,0,0,15,
-58,20,0,0,0,3,74,159,124,5,18,89,151,246,252,252,249,250,157,75,17,25,169,204,153,46,207,250,253,253,252,154,7,33,39,88,28,0,0,0,0,0,0,0,81,152,149,48,
-18,200,249,200,18,0,2,50,50,2,0,0,0,7,81,111,250,248,90,0,0,0,0,0,0,22,89,53,138,179,142,87,107,215,249,214,35,0,0,1,33,24,0,14,38,6,0,0,
-9,82,71,2,0,58,80,8,0,0,0,5,123,124,6,0,0,9,39,12,88,148,24,50,50,2,0,0,0,0,0,15,58,20,0,0,0,3,74,159,124,5,18,89,102,69,124,116,
-179,97,31,27,62,16,25,169,204,147,93,178,182,98,54,83,40,38,149,249,248,90,1,0,0,0,0,0,61,238,253,204,105,248,248,115,10,1,50,50,2,0,0,0,0,0,3,32,
-30,34,5,0,0,0,0,0,0,0,22,90,51,142,203,182,84,27,27,28,62,33,198,248,198,48,24,0,14,38,4,8,82,71,2,0,0,0,59,80,8,0,5,123,124,6,0,0,
-0,0,9,39,10,88,169,68,2,0,0,0,0,0,3,32,30,34,5,0,3,70,71,8,122,122,5,93,247,251,250,252,251,147,31,27,62,16,25,169,204,147,107,241,253,251,250,250,
-162,38,88,28,0,0,1,0,0,0,0,0,46,178,179,41,198,248,200,54,10,1,50,50,2,0,0,0,0,0,3,32,113,249,248,90,0,0,0,0,0,0,22,90,51,142,203,182,
-84,43,204,249,212,33,0,0,1,33,24,0,14,38,4,8,82,71,2,0,0,0,59,80,8,0,5,123,124,6,0,0,0,0,9,39,10,88,169,68,2,0,0,0,0,0,3,32,
-30,34,5,0,3,70,71,8,122,122,5,18,90,102,65,122,154,131,7,0,27,64,15,23,162,204,192,176,70,11,37,68,86,83,26,94,248,249,93,0,0,0,0,66,234,251,224,157,
-22,94,248,248,112,52,48,2,0,0,0,0,0,3,36,19,0,16,38,5,0,0,0,0,0,0,0,20,82,98,185,201,150,48,3,0,27,64,32,198,248,198,48,24,0,12,37,80,
-70,2,0,0,6,32,2,58,80,13,123,124,6,0,0,0,0,0,0,8,34,52,120,149,22,0,0,0,0,3,36,19,0,16,35,10,68,71,3,0,5,122,165,243,248,250,251,251,
-186,131,7,0,27,64,15,23,162,204,192,185,220,248,249,250,250,178,26,0,6,33,4,0,0,0,0,52,162,117,126,231,249,198,18,8,34,52,48,2,0,0,0,0,0,3,36,19,
-0,104,249,248,90,0,0,0,0,0,0,20,82,98,185,201,150,48,21,198,249,212,32,0,0,1,33,24,0,12,37,80,70,2,0,0,6,32,2,58,80,13,123,124,6,0,0,0,
-0,0,0,8,34,52,120,149,22,0,0,0,0,3,36,19,0,16,35,10,68,71,3,0,5,122,122,5,20,91,114,164,83,123,122,5,0,28,64,17,88,194,204,166,25,7,38,56,
-96,85,8,3,118,248,248,90,0,0,66,236,251,209,18,88,148,22,94,248,249,132,12,0,0,0,0,0,3,36,19,0,0,0,16,38,5,0,0,0,0,0,0,7,81,102,97,148,
-188,139,18,0,0,28,64,34,198,248,198,48,20,6,83,88,7,0,0,6,38,15,0,0,63,164,128,6,0,0,0,0,0,0,0,1,50,65,12,88,148,22,0,0,3,36,19,0,
-0,0,15,87,70,2,0,0,0,85,249,252,248,249,252,185,83,123,122,5,0,28,64,17,88,194,204,166,49,213,249,250,251,250,139,3,38,15,0,0,0,0,52,164,120,65,198,250,
-231,39,0,1,50,65,12,0,0,0,0,0,3,36,19,0,0,0,104,249,248,90,0,0,0,0,0,7,81,102,97,148,188,139,18,18,198,249,212,34,0,0,1,33,20,6,83,88,
-7,0,0,6,38,15,0,0,63,164,128,6,0,0,0,0,0,0,0,1,50,65,12,88,148,22,0,0,3,36,19,0,0,0,15,87,70,2,0,0,0,5,122,122,1,39,186,154,
-102,65,125,122,11,0,30,97,175,172,175,203,155,51,38,88,51,52,81,42,11,94,248,248,90,66,245,251,213,18,0,0,88,148,24,126,249,248,98,12,0,0,0,3,36,19,0,0,
-0,0,0,16,38,5,0,0,0,0,10,79,102,79,85,71,138,179,138,18,0,0,30,32,18,198,248,198,49,86,66,16,36,5,5,38,14,0,0,5,123,154,83,8,0,0,0,0,
-0,0,2,50,48,11,37,12,88,148,22,3,36,19,0,0,0,3,67,75,35,4,0,0,81,243,248,252,252,249,155,98,102,65,125,122,11,0,30,97,175,172,175,203,155,73,223,250,
-250,250,250,155,11,0,0,0,0,52,164,120,79,229,248,198,100,148,24,50,48,11,37,12,0,0,0,3,36,19,0,0,0,0,0,104,249,248,148,0,0,0,10,79,102,79,85,71,
-138,179,138,18,18,198,249,205,18,0,0,0,33,86,66,16,36,5,5,38,14,0,0,5,123,154,83,8,0,0,0,0,0,0,2,50,48,11,37,12,88,148,22,3,36,19,0,0,
-0,3,67,75,35,4,0,0,0,0,5,117,121,135,110,98
-};
-
-
-#endif
diff --git a/kscreensaver/kdesavers/Flux.cpp b/kscreensaver/kdesavers/Flux.cpp
deleted file mode 100644
index d401b782..00000000
--- a/kscreensaver/kdesavers/Flux.cpp
+++ /dev/null
@@ -1,967 +0,0 @@
-//============================================================================
-//
-// Terence Welsh Screensaver - Flux
-// http://www.reallyslick.com/
-//
-// Ported to KDE by Karl Robillard
-//
-/*
- * Copyright (C) 2002 Terence M. Welsh
- *
- * Flux is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- *
- * Flux is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-//============================================================================
-
-
-/*
- TODO
-
- [ ] Regular and others are messed up after Sparkler.
- Insane seems to reset them.
-*/
-
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <math.h>
-#include <time.h>
-#include <tqtimer.h>
-#include "Flux.h"
-#include "Flux.moc"
-
-
-#define NUMCONSTS 8
-#define PIx2 6.28318530718f
-#define DEG2RAD 0.0174532925f
-
-
-void hsl2rgb(float h, float s, float l, float &r, float &g, float &b)
-{
- // hue influence
- if(h < 0.166667){ // full red, some green
- r = 1.0;
- g = h * 6.0f;
- b = 0.0;
- }
- else {
- if(h < 0.5){ // full green
- g = 1.0;
- if(h < 0.333333){ // some red
- r = 1.0f - ((h - 0.166667f) * 6.0f);
- b = 0.0;
- }
- else{ // some blue
- b = (h - 0.333333f) * 6.0f;
- r = 0.0;
- }
- }
- else{
- if(h < 0.833333){ // full blue
- b = 1.0;
- if(h < 0.666667){ // some green
- g = 1.0f - ((h - 0.5f) * 6.0f);
- r = 0.0;
- }
- else{ // some red
- r = (h - 0.666667f) * 6.0f;
- g = 0.0;
- }
- }
- else{ // full red, some blue
- r = 1.0;
- b = 1.0f - ((h - 0.833333f) * 6.0f);
- g = 0.0;
- }
- }
- }
-
- // saturation influence
- r = 1.0f - (s * (1.0f - r));
- g = 1.0f - (s * (1.0f - g));
- b = 1.0f - (s * (1.0f - b));
-
- // luminosity influence
- r *= l;
- g *= l;
- b *= l;
-}
-
-
-// Useful random number macros
-// Don't forget to initialize with srand()
-inline int myRandi(int x){
- return((rand() * x) / RAND_MAX);
-}
-inline float myRandf(float x){
- return(float(rand() * x) / float(RAND_MAX));
-}
-
-
-//----------------------------------------------------------------------------
-
-
-// Flux context to allow many instances.
-static FluxWidget* _fc = 0;
-
-static int whichparticle;
-
-
-// This class is poorly named. It's actually a whole trail of particles.
-class particle
-{
-public:
-
- particle();
- ~particle();
- float update(float *c);
-
-private:
-
- float** vertices;
- short trails;
- short counter;
- float offset[3];
-};
-
-
-particle::particle()
-{
- // Offsets are somewhat like default positions for the head of each
- // particle trail. Offsets spread out the particle trails and keep
- // them from all overlapping.
- offset[0] = cos(PIx2 * float(whichparticle) / float(_fc->dParticles));
- offset[1] = float(whichparticle) / float(_fc->dParticles) - 0.5f;
- offset[2] = sin(PIx2 * float(whichparticle) / float(_fc->dParticles));
- whichparticle++;
-
- // Initialize memory and set initial positions out of view of the camera
- trails = _fc->dTrail;
- vertices = new float*[ trails ];
-
- int i;
- for(i=0; i<trails; i++)
- {
- vertices[i] = new float[5]; // 0,1,2 = position, 3 = hue, 4 = saturation
- vertices[i][0] = 0.0f;
- vertices[i][1] = 3.0f;
- vertices[i][2] = 0.0f;
- vertices[i][3] = 0.0f;
- vertices[i][4] = 0.0f;
- }
-
- counter = 0;
-}
-
-
-particle::~particle()
-{
- for(int i=0; i<trails; i++)
- delete[] vertices[i];
- delete[] vertices;
-}
-
-
-float particle::update(float *c)
-{
- int i, p, growth;
- float rgb[3];
- float cx, cy, cz; // Containment variables
- float luminosity;
- static float expander = 1.0f + 0.0005f * float(_fc->dExpansion);
- static float blower = 0.001f * float(_fc->dWind);
- //static float otherxyz[3];
- float depth = 0;
-
- // Record old position
- int oldc = counter;
- float oldpos[3];
- oldpos[0] = vertices[oldc][0];
- oldpos[1] = vertices[oldc][1];
- oldpos[2] = vertices[oldc][2];
-
- counter ++;
- if(counter >= _fc->dTrail)
- counter = 0;
-
- // Here's the iterative math for calculating new vertex positions
- // first calculate limiting terms which keep vertices from constantly
- // flying off to infinity
- cx = vertices[oldc][0] * (1.0f - 1.0f / (vertices[oldc][0] * vertices[oldc][0] + 1.0f));
- cy = vertices[oldc][1] * (1.0f - 1.0f / (vertices[oldc][1] * vertices[oldc][1] + 1.0f));
- cz = vertices[oldc][2] * (1.0f - 1.0f / (vertices[oldc][2] * vertices[oldc][2] + 1.0f));
- // then calculate new positions
- vertices[counter][0] = vertices[oldc][0] + c[6] * offset[0] - cx
- + c[2] * vertices[oldc][1]
- + c[5] * vertices[oldc][2];
- vertices[counter][1] = vertices[oldc][1] + c[6] * offset[1] - cy
- + c[1] * vertices[oldc][2]
- + c[4] * vertices[oldc][0];
- vertices[counter][2] = vertices[oldc][2] + c[6] * offset[2] - cz
- + c[0] * vertices[oldc][0]
- + c[3] * vertices[oldc][1];
-
- // Pick a hue
- vertices[counter][3] = cx * cx + cy * cy + cz * cz;
- if(vertices[counter][3] > 1.0f)
- vertices[counter][3] = 1.0f;
- vertices[counter][3] += c[7];
- // Limit the hue (0 - 1)
- if(vertices[counter][3] > 1.0f)
- vertices[counter][3] -= 1.0f;
- if(vertices[counter][3] < 0.0f)
- vertices[counter][3] += 1.0f;
- // Pick a saturation
- vertices[counter][4] = c[0] + vertices[counter][3];
- // Limit the saturation (0 - 1)
- if(vertices[counter][4] < 0.0f)
- vertices[counter][4] = -vertices[counter][4];
- vertices[counter][4] -= float(int(vertices[counter][4]));
- vertices[counter][4] = 1.0f - (vertices[counter][4] * vertices[counter][4]);
-
- // Bring particles back if they escape
- if(!counter){
- if((vertices[0][0] > 1000000000.0f) || (vertices[0][0] < -1000000000.0f)
- || (vertices[0][1] > 1000000000.0f) || (vertices[0][1] < -1000000000.0f)
- || (vertices[2][2] > 1000000000.0f) || (vertices[0][2] < -1000000000.0f)){
- vertices[0][0] = myRandf(2.0f) - 1.0f;
- vertices[0][1] = myRandf(2.0f) - 1.0f;
- vertices[0][2] = myRandf(2.0f) - 1.0f;
- }
- }
-
- // Draw every vertex in particle trail
- p = counter;
- growth = 0;
- luminosity = _fc->lumdiff;
- for(i=0; i<_fc->dTrail; i++){
- p ++;
- if(p >= _fc->dTrail)
- p = 0;
- growth++;
-
- // assign color to particle
- hsl2rgb(vertices[p][3], vertices[p][4], luminosity, rgb[0], rgb[1], rgb[2]);
- glColor3fv(rgb);
-
- glPushMatrix();
- if(_fc->dGeometry == 1) // Spheres
- glTranslatef(vertices[p][0], vertices[p][1], vertices[p][2]);
- else{ // Points or lights
- depth = _fc->cosCameraAngle * vertices[p][2] - _fc->sinCameraAngle * vertices[p][0];
- glTranslatef(_fc->cosCameraAngle * vertices[p][0] + _fc->sinCameraAngle
- * vertices[p][2], vertices[p][1], depth);
- }
- if(_fc->dGeometry){ // Spheres or lights
- switch(_fc->dTrail - growth){
- case 0:
- glScalef(0.259f, 0.259f, 0.259f);
- break;
- case 1:
- glScalef(0.5f, 0.5f, 0.5f);
- break;
- case 2:
- glScalef(0.707f, 0.707f, 0.707f);
- break;
- case 3:
- glScalef(0.866f, 0.866f, 0.866f);
- break;
- case 4:
- glScalef(0.966f, 0.966f, 0.966f);
- }
- }
- switch(_fc->dGeometry){
- case 0: // Points
- switch(_fc->dTrail - growth){
- case 0:
- glPointSize(float(_fc->dSize * (depth + 200.0f) * 0.001036f));
- break;
- case 1:
- glPointSize(float(_fc->dSize * (depth + 200.0f) * 0.002f));
- break;
- case 2:
- glPointSize(float(_fc->dSize * (depth + 200.0f) * 0.002828f));
- break;
- case 3:
- glPointSize(float(_fc->dSize * (depth + 200.0f) * 0.003464f));
- break;
- case 4:
- glPointSize(float(_fc->dSize * (depth + 200.0f) * 0.003864f));
- break;
- default:
- glPointSize(float(_fc->dSize * (depth + 200.0f) * 0.004f));
- }
- glBegin(GL_POINTS);
- glVertex3f(0.0f,0.0f,0.0f);
- glEnd();
- break;
- case 1: // Spheres
- case 2: // Lights
- glCallList(1);
- }
- glPopMatrix();
- vertices[p][0] *= expander;
- vertices[p][1] *= expander;
- vertices[p][2] *= expander;
- vertices[p][2] += blower;
- luminosity += _fc->lumdiff;
- }
-
- // Find distance between new position and old position and return it
- oldpos[0] -= vertices[counter][0];
- oldpos[1] -= vertices[counter][1];
- oldpos[2] -= vertices[counter][2];
- return(float(sqrt(oldpos[0] * oldpos[0] + oldpos[1] * oldpos[1] + oldpos[2] * oldpos[2])));
-}
-
-
-// This class is a set of particle trails and constants that enter
-// into their equations of motion.
-class flux
-{
-public:
-
- flux();
- ~flux();
- void update();
-
- particle *particles;
- int randomize;
- float c[NUMCONSTS]; // constants
- float cv[NUMCONSTS]; // constants' change velocities
- int currentSmartConstant;
- float oldDistance;
-};
-
-
-flux::flux()
-{
- whichparticle = 0;
-
- particles = new particle[_fc->dParticles];
- randomize = 1;
-
- float instability = _fc->dInstability;
- int i;
- for(i=0; i<NUMCONSTS; i++)
- {
- c[i] = myRandf(2.0f) - 1.0f;
- cv[i] = myRandf(0.000005f * instability * instability)
- + 0.000001f * instability * instability;
- }
-
- currentSmartConstant = 0;
- oldDistance = 0.0f;
-}
-
-
-flux::~flux()
-{
- delete[] particles;
-}
-
-
-void flux::update()
-{
- int i;
-
- // randomize constants
- if(_fc->dRandomize){
- randomize --;
- if(randomize <= 0){
- for(i=0; i<NUMCONSTS; i++)
- c[i] = myRandf(2.0f) - 1.0f;
- int temp = 101 - _fc->dRandomize;
- temp = temp * temp;
- randomize = temp + myRandi(temp);
- }
- }
-
- // update constants
- for(i=0; i<NUMCONSTS; i++){
- c[i] += cv[i];
- if(c[i] >= 1.0f){
- c[i] = 1.0f;
- cv[i] = -cv[i];
- }
- if(c[i] <= -1.0f){
- c[i] = -1.0f;
- cv[i] = -cv[i];
- }
- }
-
- // update all particles in this flux field
- float dist;
- for(i=0; i<_fc->dParticles; i++)
- dist = particles[i].update(c);
-
- // use dist from last particle to activate smart constants
- _fc->dSmart = 0;
- if(_fc->dSmart){
- const float upper = 0.4f;
- const float lower = 0.2f;
- int beSmart = 0;
- if(dist > upper && dist > oldDistance)
- beSmart = 1;
- if(dist < lower && dist < oldDistance)
- beSmart = 1;
- if(beSmart){
- cv[currentSmartConstant] = -cv[currentSmartConstant];
- currentSmartConstant ++;
- if(currentSmartConstant >= _fc->dSmart)
- currentSmartConstant = 0;
- }
- oldDistance = dist;
- }
-}
-
-
-//----------------------------------------------------------------------------
-
-
-FluxWidget::FluxWidget( TQWidget* parent, const char* name )
- : TQGLWidget(parent, name), _fluxes(0)
-{
- setDefaults( Regular );
-
- _frameTime = 1000 / 60;
- _timer = new TQTimer( this );
- connect( _timer, TQT_SIGNAL(timeout()), this, TQT_SLOT(nextFrame()) );
-}
-
-
-FluxWidget::~FluxWidget()
-{
- // Free memory
- delete[] _fluxes;
-}
-
-
-void FluxWidget::paintGL()
-{
- // clear the screen
- glLoadIdentity();
-
- if(dBlur) // partially
- {
- int viewport[4];
- glGetIntegerv(GL_VIEWPORT, viewport);
- float viewRatio = float(viewport[2]) / float(viewport[3]);
-
- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
- glEnable(GL_BLEND);
- glDisable(GL_DEPTH_TEST);
- glColor4f(0.0f, 0.0f, 0.0f, 0.5f - (float(sqrt(sqrt(double(dBlur)))) * 0.15495f));
- glBegin(GL_TRIANGLE_STRIP);
- glVertex3f(-3.0f * viewRatio, -3.0f, 0.0f);
- glVertex3f(3.0f * viewRatio, -3.0f, 0.0f);
- glVertex3f(-3.0f * viewRatio, 3.0f, 0.0f);
- glVertex3f(3.0f * viewRatio, 3.0f, 0.0f);
- glEnd();
- }
- else // completely
- {
- glClear(GL_COLOR_BUFFER_BIT);
- }
-
- cameraAngle += 0.01f * float(dRotation);
- if(cameraAngle >= 360.0f)
- cameraAngle -= 360.0f;
- if(dGeometry == 1) // Only rotate for spheres
- glRotatef(cameraAngle, 0.0f, 1.0f, 0.0f);
- else
- {
- cosCameraAngle = cos(cameraAngle * DEG2RAD);
- sinCameraAngle = sin(cameraAngle * DEG2RAD);
- }
-
- // set up blend modes for rendering particles
- switch(dGeometry)
- {
- case 0: // Blending for points
- glBlendFunc(GL_SRC_ALPHA, GL_ONE);
- glEnable(GL_BLEND);
- glEnable(GL_POINT_SMOOTH);
- glHint(GL_POINT_SMOOTH_HINT, GL_NICEST);
- break;
-
- case 1: // No blending for spheres, but we need z-buffering
- glDisable(GL_BLEND);
- glEnable(GL_DEPTH_TEST);
- glClear(GL_DEPTH_BUFFER_BIT);
- break;
-
- case 2: // Blending for lights
- glBlendFunc(GL_ONE, GL_ONE);
- glEnable(GL_BLEND);
- }
-
- // Update particles
- if( _fluxes )
- {
- _fc = this;
- int i;
- for(i=0; i<dFluxes; i++)
- _fluxes[i].update();
- }
-
- glFlush();
-}
-
-
-void FluxWidget::resizeGL( int w, int h )
-{
- glViewport(0, 0, w, h );
-
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity();
- gluPerspective(100.0, (float) w / (float) h, 0.01, 200);
- glTranslatef(0.0, 0.0, -2.5);
- glMatrixMode(GL_MODELVIEW);
- glLoadIdentity();
-}
-
-
-// Window initialization
-void FluxWidget::initializeGL()
-{
- //resizeGL( width(), height() );
-
- updateParameters();
-
- _timer->start( _frameTime, true );
-}
-
-
-#ifdef UNIT_TEST
-void FluxWidget::keyPressEvent( TQKeyEvent* e )
-{
- if( e->key() == TQt::Key_0 ) { setDefaults( 0 ); updateParameters(); }
- if( e->key() == TQt::Key_1 ) { setDefaults( 1 ); updateParameters(); }
- if( e->key() == TQt::Key_2 ) { setDefaults( 2 ); updateParameters(); }
- if( e->key() == TQt::Key_3 ) { setDefaults( 3 ); updateParameters(); }
- if( e->key() == TQt::Key_4 ) { setDefaults( 4 ); updateParameters(); }
- if( e->key() == TQt::Key_5 ) { setDefaults( 5 ); updateParameters(); }
-}
-#endif
-
-
-void FluxWidget::nextFrame()
-{
- updateGL();
- _timer->start( _frameTime, true );
-}
-
-
-/**
- May be called at any time - makes no OpenGL calls.
-*/
-void FluxWidget::setDefaults( int which )
-{
- switch(which)
- {
- case Hypnotic:
- dFluxes = 2;
- dParticles = 10;
- dTrail = 40;
- dGeometry = 2;
- dSize = 15;
- dRandomize = 80;
- dExpansion = 20;
- dRotation = 0;
- dWind = 40;
- dInstability = 10;
- dBlur = 30;
- break;
-
- case Insane:
- dFluxes = 4;
- dParticles = 30;
- dTrail = 8;
- dGeometry = 2;
- dSize = 25;
- dRandomize = 0;
- dExpansion = 80;
- dRotation = 60;
- dWind = 40;
- dInstability = 100;
- dBlur = 10;
- break;
-
- case Sparklers:
- dFluxes = 3;
- dParticles = 20;
- dTrail = 6;
- dGeometry = 1;
- dSize = 20;
- dComplexity = 3;
- dRandomize = 85;
- dExpansion = 60;
- dRotation = 30;
- dWind = 20;
- dInstability = 30;
- dBlur = 0;
- break;
-
- case Paradigm:
- dFluxes = 1;
- dParticles = 40;
- dTrail = 40;
- dGeometry = 2;
- dSize = 5;
- dRandomize = 90;
- dExpansion = 30;
- dRotation = 20;
- dWind = 10;
- dInstability = 5;
- dBlur = 10;
- break;
-
- case Galactic:
- dFluxes = 1;
- dParticles = 2;
- dTrail = 1500;
- dGeometry = 2;
- dSize = 10;
- dRandomize = 0;
- dExpansion = 5;
- dRotation = 25;
- dWind = 0;
- dInstability = 5;
- dBlur = 0;
- break;
-
- case Regular:
- default:
- dFluxes = 1;
- dParticles = 20;
- dTrail = 40;
- dGeometry = 2;
- dSize = 15;
- dRandomize = 0;
- dExpansion = 40;
- dRotation = 30;
- dWind = 20;
- dInstability = 20;
- dBlur = 0;
- break;
- }
-}
-
-
-/**
- Called after dGeometry, dTrail, or dFluxes is changed
- (such as with setDefaults).
-*/
-void FluxWidget::updateParameters()
-{
- int i, j;
- float x, y, temp;
-
- srand((unsigned)time(NULL));
- rand(); rand(); rand(); rand(); rand();
-
- cameraAngle = 0.0f;
-
- glFrontFace(GL_CCW);
- glEnable(GL_CULL_FACE);
- glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
-
- if(dGeometry == 0)
- {
- glDisable(GL_LIGHTING);
- glDisable(GL_COLOR_MATERIAL);
- glDisable(GL_TEXTURE_2D);
-
- glEnable(GL_POINT_SMOOTH);
- //glHint(GL_POINT_SMOOTH_HINT, GL_NICEST);
- }
- else if(dGeometry == 1) // Spheres and their lighting
- {
- glNewList(1, GL_COMPILE);
- GLUquadricObj* qobj = gluNewQuadric();
- gluSphere(qobj, 0.005f * dSize, dComplexity + 2, dComplexity + 1);
- gluDeleteQuadric(qobj);
- glEndList();
-
- glDisable(GL_TEXTURE_2D);
- glEnable(GL_LIGHTING);
- glEnable(GL_LIGHT0);
-
- float ambient[4] = {0.0f, 0.0f, 0.0f, 0.0f};
- float diffuse[4] = {1.0f, 1.0f, 1.0f, 0.0f};
- float specular[4] = {1.0f, 1.0f, 1.0f, 0.0f};
- float position[4] = {500.0f, 500.0f, 500.0f, 0.0f};
-
- glLightfv(GL_LIGHT0, GL_AMBIENT, ambient);
- glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuse);
- glLightfv(GL_LIGHT0, GL_SPECULAR, specular);
- glLightfv(GL_LIGHT0, GL_POSITION, position);
- glEnable(GL_COLOR_MATERIAL);
- glColorMaterial(GL_FRONT, GL_AMBIENT_AND_DIFFUSE);
- }
- else if(dGeometry == 2) // Init lights
- {
- for(i=0; i<LIGHTSIZE; i++)
- {
- for(j=0; j<LIGHTSIZE; j++)
- {
- x = float(i - LIGHTSIZE / 2) / float(LIGHTSIZE / 2);
- y = float(j - LIGHTSIZE / 2) / float(LIGHTSIZE / 2);
- temp = 1.0f - float(sqrt((x * x) + (y * y)));
- if(temp > 1.0f)
- temp = 1.0f;
- if(temp < 0.0f)
- temp = 0.0f;
- lightTexture[i][j] = (unsigned char) (255.0f * temp * temp);
- }
- }
-
- glDisable(GL_LIGHTING);
- glDisable(GL_COLOR_MATERIAL);
-
- glEnable(GL_TEXTURE_2D);
- glBindTexture(GL_TEXTURE_2D, 1);
- glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
- glTexImage2D(GL_TEXTURE_2D, 0, 1, LIGHTSIZE, LIGHTSIZE, 0,
- GL_LUMINANCE, GL_UNSIGNED_BYTE, lightTexture);
-
- temp = float(dSize) * 0.005f;
- glNewList(1, GL_COMPILE);
- glBindTexture(GL_TEXTURE_2D, 1);
- glBegin(GL_TRIANGLES);
- glTexCoord2f(0.0f, 0.0f);
- glVertex3f(-temp, -temp, 0.0f);
- glTexCoord2f(1.0f, 0.0f);
- glVertex3f(temp, -temp, 0.0f);
- glTexCoord2f(1.0f, 1.0f);
- glVertex3f(temp, temp, 0.0f);
- glTexCoord2f(0.0f, 0.0f);
- glVertex3f(-temp, -temp, 0.0f);
- glTexCoord2f(1.0f, 1.0f);
- glVertex3f(temp, temp, 0.0f);
- glTexCoord2f(0.0f, 1.0f);
- glVertex3f(-temp, temp, 0.0f);
- glEnd();
- glEndList();
- }
-
- // Initialize luminosity difference
- lumdiff = 1.0f / float(dTrail);
-
- _fc = this;
- delete[] _fluxes;
- _fluxes = new flux[dFluxes];
-}
-
-
-//----------------------------------------------------------------------------
-
-
-#ifndef UNIT_TEST
-#include <klocale.h>
-#include <kglobal.h>
-#include <kconfig.h>
-
-
-// libkscreensaver interface
-extern "C"
-{
- KDE_EXPORT const char* kss_applicationName = "kflux.kss";
- KDE_EXPORT const char* kss_description = I18N_NOOP( "Flux" );
- KDE_EXPORT const char* kss_version = "1.0";
-
- KDE_EXPORT KScreenSaver* kss_create( WId id )
- {
- return new KFluxScreenSaver( id );
- }
-
- KDE_EXPORT TQDialog* kss_setup()
- {
- return new KFluxSetup;
- }
-}
-
-
-//----------------------------------------------------------------------------
-
-
-KFluxScreenSaver::KFluxScreenSaver( WId id ) : KScreenSaver( id )
-{
- _flux = new FluxWidget;
-
- readSettings();
-
- embed( _flux );
- _flux->show();
-}
-
-
-KFluxScreenSaver::~KFluxScreenSaver()
-{
-}
-
-
-static int filterRandom( int n )
-{
- if( (n < 0) || (n >= FluxWidget::DefaultModes) )
- {
- srand((unsigned)time(NULL));
- n = rand() % FluxWidget::DefaultModes;
- }
- return n;
-}
-
-
-void KFluxScreenSaver::readSettings()
-{
- TDEConfig* config = TDEGlobal::config();
- config->setGroup("Settings");
-
- _mode = config->readNumEntry( "Mode", FluxWidget::Regular );
- _flux->setDefaults( filterRandom(_mode) );
-}
-
-
-/**
- Any invalid mode will select one at random.
-*/
-void KFluxScreenSaver::setMode( int id )
-{
- _mode = id;
- _flux->setDefaults( filterRandom(id) );
- _flux->updateParameters();
-}
-
-
-//----------------------------------------------------------------------------
-
-
-#include <tqlayout.h>
-#include <tqpushbutton.h>
-#include <tqlabel.h>
-#include <tqcombobox.h>
-#include <kbuttonbox.h>
-#include <kmessagebox.h>
-
-
-static const char* defaultText[] =
-{
- I18N_NOOP( "Regular" ),
- I18N_NOOP( "Hypnotic" ),
- I18N_NOOP( "Insane" ),
- I18N_NOOP( "Sparklers" ),
- I18N_NOOP( "Paradigm" ),
- I18N_NOOP( "Galactic" ),
- I18N_NOOP( "(Random)" ),
- 0
-};
-
-
-KFluxSetup::KFluxSetup( TQWidget* parent, const char* name )
- : KDialogBase( parent, name, true, i18n( "Setup Flux Screen Saver" ),
- Ok|Cancel|Help, Ok, true )
-{
- setButtonText( Help, i18n( "A&bout" ) );
- TQWidget *main = makeMainWidget();
-
- TQHBoxLayout* top = new TQHBoxLayout( main, 0, spacingHint() );
- TQVBoxLayout* leftCol = new TQVBoxLayout;
- top->addLayout( leftCol );
-
- // Parameters
- TQLabel* label = new TQLabel( i18n("Mode:"), main );
- leftCol->addWidget( label );
-
- modeW = new TQComboBox( main );
- int i = 0;
- while (defaultText[i])
- modeW->insertItem( i18n(defaultText[i++]) );
- leftCol->addWidget( modeW );
-
- leftCol->addStretch();
-
- // Preview
- TQWidget* preview;
- preview = new TQWidget( main );
- preview->setFixedSize( 220, 165 );
- preview->setBackgroundColor( black );
- preview->show(); // otherwise saver does not get correct size
- _saver = new KFluxScreenSaver( preview->winId() );
- top->addWidget(preview);
-
- // Now that we have _saver...
- modeW->setCurrentItem( _saver->mode() ); // set before we connect
- connect( modeW, TQT_SIGNAL(activated(int)), _saver, TQT_SLOT(setMode(int)) );
-}
-
-
-KFluxSetup::~KFluxSetup()
-{
- delete _saver;
-}
-
-
-void KFluxSetup::slotHelp()
-{
- KMessageBox::about(this,
- i18n("<h3>Flux 1.0</h3>\n<p>Copyright (c) 2002 Terence M. Welsh<br>\n<a href=\"http://www.reallyslick.com/\">http://www.reallyslick.com/</a></p>\n\n<p>Ported to KDE by Karl Robillard</p>"),
- TQString(), KMessageBox::AllowLink);
-}
-
-
-/**
- Ok pressed - save settings and exit
-*/
-void KFluxSetup::slotOk()
-{
- TDEConfig* config = TDEGlobal::config();
- config->setGroup("Settings");
-
- TQString val;
- val.setNum( modeW->currentItem() );
- config->writeEntry("Mode", val );
-
- config->sync();
- accept();
-}
-#endif
-
-
-//----------------------------------------------------------------------------
-
-
-#ifdef UNIT_TEST
-// moc Flux.h -o Flux.moc
-// g++ -g -DUNIT_TEST Flux.cpp -I/usr/lib/qt3/include -lqt -L/usr/lib/qt3/lib -lGLU -lGL
-
-#include <tqapplication.h>
-
-int main( int argc, char** argv )
-{
- TQApplication app( argc, argv );
-
- FluxWidget w;
- w.setDefaults( FluxWidget::Sparklers );
- app.setMainWidget( &w );
- w.show();
-
- return app.exec();
-}
-#endif
-
-
-//EOF
diff --git a/kscreensaver/kdesavers/Flux.h b/kscreensaver/kdesavers/Flux.h
deleted file mode 100644
index bd7fd32e..00000000
--- a/kscreensaver/kdesavers/Flux.h
+++ /dev/null
@@ -1,150 +0,0 @@
-#ifndef __FLUXSS_H__
-#define __FLUXSS_H__
-//============================================================================
-//
-// Terence Welsh Screensaver - Flux
-// http://www.reallyslick.com/
-//
-// Ported to KDE by Karl Robillard
-//
-//============================================================================
-
-
-#include <tqgl.h>
-
-
-#define LIGHTSIZE 64
-
-
-class flux;
-class particle;
-class TQTimer;
-
-class FluxWidget : public TQGLWidget
-{
- Q_OBJECT
-
-
-public:
-
- enum eDefault
- {
- Regular,
- Hypnotic,
- Insane,
- Sparklers,
- Paradigm,
- Galactic,
- DefaultModes
- };
-
- FluxWidget( TQWidget* parent=0, const char* name=0 );
- ~FluxWidget();
-
- void setDefaults( int which );
- void updateParameters();
-
-protected:
-
- void paintGL();
- void resizeGL( int w, int h );
- void initializeGL();
-#ifdef UNIT_TEST
- void keyPressEvent( TQKeyEvent* );
-#endif
-
-private slots:
-
- void nextFrame();
-
-private:
-
- float lumdiff;
- float cameraAngle;
- float cosCameraAngle, sinCameraAngle;
- unsigned char lightTexture[LIGHTSIZE][LIGHTSIZE];
-
- int dFluxes;
- int dParticles;
- int dTrail;
- int dGeometry;
- float dSize;
- int dComplexity;
- int dRandomize;
- int dExpansion;
- int dRotation;
- int dWind;
- float dInstability;
- int dBlur;
- int dSmart;
- int dPriority;
-
- flux* _fluxes;
-
- // Using TQTimer rather than timerEvent() to avoid getting locked out of
- // the TQEvent loop on lower-end systems. Ian Geiser <[email protected]>
- // says this is the way to go.
- TQTimer* _timer;
- int _frameTime;
-
- friend class flux;
- friend class particle;
-};
-
-
-#ifndef UNIT_TEST
-#include <kdialogbase.h>
-#include <kscreensaver.h>
-
-
-class KFluxScreenSaver : public KScreenSaver
-{
- Q_OBJECT
-
-
-public:
-
- KFluxScreenSaver( WId id );
- virtual ~KFluxScreenSaver();
-
- int mode() const { return _mode; }
-
-public slots:
-
- void setMode( int );
-
-private:
-
- void readSettings();
-
- FluxWidget* _flux;
- int _mode;
-};
-
-
-class TQComboBox;
-
-class KFluxSetup : public KDialogBase
-{
- Q_OBJECT
-
-
-public:
-
- KFluxSetup( TQWidget* parent = 0, const char* name = 0 );
- ~KFluxSetup();
-
-private slots:
-
- void slotHelp();
- void slotOk();
-
-private:
-
- TQComboBox* modeW;
- KFluxScreenSaver* _saver;
-};
-#endif
-
-
-#endif //__FLUXSS_H__
diff --git a/kscreensaver/kdesavers/KBanner.desktop b/kscreensaver/kdesavers/KBanner.desktop
deleted file mode 100644
index 29f6bbad..00000000
--- a/kscreensaver/kdesavers/KBanner.desktop
+++ /dev/null
@@ -1,243 +0,0 @@
-[Desktop Entry]
-Exec=kbanner.kss
-Icon=kscreensaver
-Type=Application
-Actions=Setup;InWindow;Root;
-X-TDE-Category=Banners & Pictures
-Name=Banner
-Name[af]=Bannier
-Name[bg]=Банер
-Name[br]=Lugan
-Name[ca]=Rètol
-Name[cs]=Běžící text
-Name[cy]=Baner
-Name[de]=Lauftext
-Name[el]=Τίτλος
-Name[eo]=Standardo
-Name[es]=Pancarta
-Name[et]=Tekstiriba
-Name[eu]=Titularra
-Name[fa]=بنر
-Name[fi]=Viesti
-Name[fr]=Bannière
-Name[fy]=Ljochtkrante
-Name[ga]=Meirge
-Name[gl]=Pancarta
-Name[he]=כתובית
-Name[hi]=बैनर
-Name[hu]=Felirat
-Name[is]=Borði
-Name[it]=Testo scorrevole
-Name[ja]=バナー
-Name[ka]=აბრა
-Name[lt]=Plakatas
-Name[lv]=Banners
-Name[mk]=Транспарент
-Name[ms]=Kain Rentang
-Name[nds]=Looptext
-Name[ne]=ब्यानर
-Name[nl]=Lichtkrant
-Name[nn]=Fane
-Name[pa]=ਬੈਨਰ
-Name[pt]=Cartaz
-Name[ru]=Бегущая строка
-Name[sl]=Napis
-Name[sr]=Застава
-Name[sr@Latn]=Zastava
-Name[sv]=Rubrik
-Name[ta]=பேனர்
-Name[tg]=Давида истодаи рах
-Name[th]=แบนเนอร์
-Name[tr]=Afiş
-Name[uk]=Транспарант
-Name[ven]=Muvhala
-Name[vi]=Biểu ngữ
-Name[xh]=Isiqwentshu selaphu
-Name[zh_CN]=横幅
-Name[zh_TW]=標誌
-Name[zu]=Ibhodi elinomyalezo
-
-[Desktop Action Setup]
-Exec=kbanner.kss -setup
-Name=Setup...
-Name[af]=Opstelling...
-Name[bg]=Настройки...
-Name[br]=Kefluniadur ...
-Name[bs]=Postavke...
-Name[ca]=Arranjament...
-Name[cs]=Nastavení...
-Name[cy]=Gosod ...
-Name[da]=Opsætning...
-Name[de]=Einrichtung ...
-Name[el]=Ρύθμιση...
-Name[eo]=Agordo...
-Name[es]=Configuración...
-Name[et]=Seadistamine...
-Name[eu]=Konfiguratu...
-Name[fa]=برپایی...
-Name[fi]=Asetukset...
-Name[fo]=Uppseting...
-Name[fr]=Configuration...
-Name[fy]=Opset...
-Name[ga]=Cumraigh...
-Name[gl]=Configuración...
-Name[he]=הגדרות...
-Name[hi]=सेटअप...
-Name[hu]=Beállítás...
-Name[is]=Stillingar...
-Name[it]=Impostazioni...
-Name[ja]=設定...
-Name[ka]=გამართვა...
-Name[lt]=Sąranka ...
-Name[lv]=Uzstādīšana...
-Name[mk]=Поставување...
-Name[ms]=Setkan...
-Name[mt]=Konfigurazzjoni...
-Name[nb]=Innstillinger …
-Name[nds]=Instellen...
-Name[ne]=सेटअप...
-Name[nl]=Instellingen...
-Name[nn]=Oppsett …
-Name[nso]=Beakanya...
-Name[pa]=ਸੈਟਅੱਪ...
-Name[pl]=Ustawienia...
-Name[pt]=Configurar...
-Name[pt_BR]=Configurar...
-Name[ro]=Setează...
-Name[ru]=Настройка...
-Name[rw]=Iboneza...
-Name[sk]=Nastavenie...
-Name[sl]=Nastavi ...
-Name[sr]=Подеси...
-Name[sr@Latn]=Podesi...
-Name[sv]=Inställningar...
-Name[ta]=அமைப்பு...
-Name[tg]=Барпосозӣ...
-Name[th]=ติดตั้ง...
-Name[tr]=Kurulum...
-Name[uk]=Встановити...
-Name[uz]=Oʻrnatish
-Name[uz@cyrillic]=Ўрнатиш
-Name[ven]=Vhekanya...
-Name[vi]=Thiết lập...
-Name[xh]=Iyacwangciswa...
-Name[zh_CN]=设置...
-Name[zh_TW]=設定...
-Name[zu]=Iyalungiselela...
-Icon=kscreensaver
-
-[Desktop Action InWindow]
-Exec=kbanner.kss -window-id %w
-Name=Display in Specified Window
-Name[bg]=Стартиране в избран прозорец
-Name[br]=Diskwel er prenestr spisaet
-Name[bs]=Prikaži u navedenom prozoru
-Name[ca]=Mostra a la finestra especificada
-Name[cs]=Zobrazit v určeném okně
-Name[cy]=Dangos mewn Ffenestr Benodol
-Name[da]=Visning i angivet vindue
-Name[de]=In bestimmten Fenster anzeigen
-Name[el]=Προβολή στο καθορισμένο παράθυρο
-Name[eo]=Montri en indikita fenestro
-Name[es]=Mostrar en la ventana especificada
-Name[et]=Määratud aknas näitamine
-Name[eu]=Bistaratu zehaztutako lehioan
-Name[fa]=نمایش در پنجرۀ مشخص‌شده
-Name[fi]=Näytä määrätyssä ikkunassa
-Name[fr]=Affichage dans la fenêtre spécifiée
-Name[fy]=Werjefte yn in definiearre finster
-Name[ga]=Taispeáin san Fhuinneog Sonraithe
-Name[gl]=Mostrar na fiestra indicada
-Name[he]=הצג בחלון המצוין
-Name[hi]=निर्दिष्ट विंडो में प्रदर्शित करें
-Name[hu]=Megjelenítés a megadott ablakban
-Name[is]=Birta í völdum glugga
-Name[it]=Mostra nella finestra specificata
-Name[ja]=特定のウィンドウで表示
-Name[ka]=ჩვენება მითითებულ ფანჯარაში
-Name[lt]=Rodyti nurodytame lange
-Name[mk]=Прикажи во наведениот прозорец
-Name[ms]=Papar dalam Tetingkap Yang Dinyatakan
-Name[nb]=Vis i angitt vindu
-Name[nds]=In utsöcht Finster wiesen
-Name[ne]=निर्दिष्ट सञ्झ्यालमा प्रदर्शन
-Name[nl]=Weergeven in een opgegeven venster
-Name[nn]=Vis i oppgjeve vindauge
-Name[pa]=ਦੱਸੇ ਝਰੋਖੇ ਵਿੱਚ ਵੇਖਾਓ
-Name[pl]=Wyświetl w zadanym oknie
-Name[pt]=Mostrar na Janela Indicada
-Name[pt_BR]=Mostrar em janela especificada
-Name[ro]=Afişează în fereastra specificată
-Name[ru]=Показывать в указанном окне
-Name[rw]=Kwerekana mu Idirishya Ryihariye
-Name[sk]=Zobraziť v zadanom okne
-Name[sl]=Prikaz v določenemu oknu
-Name[sr]=Прикажи у наведеном прозору
-Name[sr@Latn]=Prikaži u navedenom prozoru
-Name[sv]=Visa i angivet fönster
-Name[ta]=குறித்த சாளரத்தில் காட்டு
-Name[tg]=Дар тирезаи нишондода намоиш намоед
-Name[tr]=Belirtilen Pencerede Göster
-Name[uk]=Відобразити у вказаному вікні
-Name[vi]=Hiển thị trong Cửa sổ Đã định
-Name[zh_CN]=在指定的窗口中显示
-Name[zh_TW]=在指定的視窗中顯示
-NoDisplay=true
-
-[Desktop Action Root]
-Exec=kbanner.kss -root
-Name=Display in Root Window
-Name[bg]=Стартиране в главния прозорец
-Name[br]=Diskwel er prenestr gwrizienn
-Name[bs]=Prikaži u korijenskom prozoru
-Name[ca]=Mostra a la finestra arrel
-Name[cs]=Zobrazit na pozadí plochy
-Name[cy]=Dangos mewn Ffenestr Wraidd
-Name[da]=Visning i root-vindue
-Name[de]=In Hintergrundfenster anzeigen
-Name[el]=Προβολή στο βασικό παράθυρο
-Name[eo]=Montri en radika fenestro
-Name[es]=Mostrar en la ventana raíz
-Name[et]=Juuraknas näitamine
-Name[eu]=Bistaratu erro lehioan
-Name[fa]=نمایش در پنجرۀ ریشه
-Name[fi]=Näytä juuri-ikkunassa
-Name[fr]=Affichage dans la fenêtre racine
-Name[fy]=Werjefte yn haadfinster
-Name[ga]=Taispeáin sa bhFréamhfhuinneog
-Name[gl]=Mostrar na fiestra raiz
-Name[he]=הצג בחלון השורש
-Name[hi]=रूट विंडो में प्रदर्शित करें
-Name[hu]=Megjelenítés a gyökérablakban
-Name[is]=Birta í rótarglugganum
-Name[it]=Mostra sullo sfondo
-Name[ja]=ルートウィンドウで表示
-Name[ka]=ჩვენება ძირითად ფანჯარაში
-Name[lt]=Rodyti root lange
-Name[mk]=Прикажи во коренскиот прозорец
-Name[ms]=Papar dalam Tetingkap Root
-Name[nb]=Vis i root-vindu
-Name[nds]=In Hööftfinster wiesen
-Name[ne]=मूल सञ्झ्यालमा प्रदर्शन
-Name[nl]=Weergeven in hoofdvenster
-Name[nn]=Vis i rotvindauget
-Name[pa]=Root ਝਰੋਖੇ ਵਿੱਚ ਵੇਖਾਓ
-Name[pl]=Wyświetl w oknie głównym
-Name[pt]=Mostrar na Janela de Fundo
-Name[pt_BR]=Mostrar na janela raiz
-Name[ro]=Afişează în fereastra rădăcină
-Name[ru]=Показывать в корневом окне
-Name[rw]=Kwerekana mu Idirishya Umuzi
-Name[sk]=Zobraziť v koreňovom okne
-Name[sl]=Prikaz v korenskem oknu
-Name[sr]=Прикажи у главном (root) прозору
-Name[sr@Latn]=Prikaži u glavnom (root) prozoru
-Name[sv]=Visa i rotfönstret
-Name[ta]=ஆரம்ப சாளரத்தில் காட்டு
-Name[tg]=Дар тирезаи решагӣ намоиш намоед
-Name[tr]=Kök Pencerede Göster
-Name[uk]=Відобразити в кореневому вікні
-Name[vi]=Hiển thị trong Cửa sổ Gốc
-Name[zh_CN]=在根窗口中显示
-Name[zh_TW]=在根視窗中顯示
-NoDisplay=true
diff --git a/kscreensaver/kdesavers/KBlob.desktop b/kscreensaver/kdesavers/KBlob.desktop
deleted file mode 100644
index f5127a90..00000000
--- a/kscreensaver/kdesavers/KBlob.desktop
+++ /dev/null
@@ -1,227 +0,0 @@
-[Desktop Entry]
-Exec=kblob.kss
-Icon=kscreensaver
-Type=Application
-Actions=Setup;InWindow;Root;
-X-TDE-Category=Visit to Flatland
-Name=Blob
-Name[bg]=Петно
-Name[br]=Pokard
-Name[cs]=Kaňka
-Name[cy]=Smotyn
-Name[da]=Dråbe
-Name[de]=Blob 
-Name[eo]=Gutoj
-Name[et]=Piisk
-Name[eu]=Tanta
-Name[fi]=Kuplat
-Name[he]=כתמים
-Name[hi]=ब्लॉब
-Name[ja]=斑点
-Name[ka]=წვეთები
-Name[lt]=Rutuliukas
-Name[mk]=Дамка
-Name[nb]=Fargeflekk
-Name[ne]=ब्लब
-Name[nn]=Klattar
-Name[pl]=Bąbel
-Name[ro]=Bule
-Name[ru]=Геометрические построения
-Name[sl]=Kepica
-Name[sr]=Блоб
-Name[sv]=Färgfläck
-Name[ta]=தொழிற்பொருள்
-Name[tg]=Асос гузории геометрӣ
-Name[th]=รอยเปื้อน
-Name[tr]=Damlacık
-Name[uk]=Геометричні візерунки
-Name[ven]=Tshileme
-Name[vi]=Giọt nước
-Name[xh]=Ichaphaza elincinane
-Name[zh_CN]=光线
-Name[zh_TW]=斑點
-
-[Desktop Action Setup]
-Exec=kblob.kss -setup
-Name=Setup...
-Name[af]=Opstelling...
-Name[bg]=Настройки...
-Name[br]=Kefluniadur ...
-Name[bs]=Postavke...
-Name[ca]=Arranjament...
-Name[cs]=Nastavení...
-Name[cy]=Gosod ...
-Name[da]=Opsætning...
-Name[de]=Einrichtung ...
-Name[el]=Ρύθμιση...
-Name[eo]=Agordo...
-Name[es]=Configuración...
-Name[et]=Seadistamine...
-Name[eu]=Konfiguratu...
-Name[fa]=برپایی...
-Name[fi]=Asetukset...
-Name[fo]=Uppseting...
-Name[fr]=Configuration...
-Name[fy]=Opset...
-Name[ga]=Cumraigh...
-Name[gl]=Configuración...
-Name[he]=הגדרות...
-Name[hi]=सेटअप...
-Name[hu]=Beállítás...
-Name[is]=Stillingar...
-Name[it]=Impostazioni...
-Name[ja]=設定...
-Name[ka]=გამართვა...
-Name[lt]=Sąranka ...
-Name[lv]=Uzstādīšana...
-Name[mk]=Поставување...
-Name[ms]=Setkan...
-Name[mt]=Konfigurazzjoni...
-Name[nb]=Innstillinger …
-Name[nds]=Instellen...
-Name[ne]=सेटअप...
-Name[nl]=Instellingen...
-Name[nn]=Oppsett …
-Name[nso]=Beakanya...
-Name[pa]=ਸੈਟਅੱਪ...
-Name[pl]=Ustawienia...
-Name[pt]=Configurar...
-Name[pt_BR]=Configurar...
-Name[ro]=Setează...
-Name[ru]=Настройка...
-Name[rw]=Iboneza...
-Name[sk]=Nastavenie...
-Name[sl]=Nastavi ...
-Name[sr]=Подеси...
-Name[sr@Latn]=Podesi...
-Name[sv]=Inställningar...
-Name[ta]=அமைப்பு...
-Name[tg]=Барпосозӣ...
-Name[th]=ติดตั้ง...
-Name[tr]=Kurulum...
-Name[uk]=Встановити...
-Name[uz]=Oʻrnatish
-Name[uz@cyrillic]=Ўрнатиш
-Name[ven]=Vhekanya...
-Name[vi]=Thiết lập...
-Name[xh]=Iyacwangciswa...
-Name[zh_CN]=设置...
-Name[zh_TW]=設定...
-Name[zu]=Iyalungiselela...
-Icon=kscreensaver
-
-[Desktop Action InWindow]
-Exec=kblob.kss -window-id %w
-Name=Display in Specified Window
-Name[bg]=Стартиране в избран прозорец
-Name[br]=Diskwel er prenestr spisaet
-Name[bs]=Prikaži u navedenom prozoru
-Name[ca]=Mostra a la finestra especificada
-Name[cs]=Zobrazit v určeném okně
-Name[cy]=Dangos mewn Ffenestr Benodol
-Name[da]=Visning i angivet vindue
-Name[de]=In bestimmten Fenster anzeigen
-Name[el]=Προβολή στο καθορισμένο παράθυρο
-Name[eo]=Montri en indikita fenestro
-Name[es]=Mostrar en la ventana especificada
-Name[et]=Määratud aknas näitamine
-Name[eu]=Bistaratu zehaztutako lehioan
-Name[fa]=نمایش در پنجرۀ مشخص‌شده
-Name[fi]=Näytä määrätyssä ikkunassa
-Name[fr]=Affichage dans la fenêtre spécifiée
-Name[fy]=Werjefte yn in definiearre finster
-Name[ga]=Taispeáin san Fhuinneog Sonraithe
-Name[gl]=Mostrar na fiestra indicada
-Name[he]=הצג בחלון המצוין
-Name[hi]=निर्दिष्ट विंडो में प्रदर्शित करें
-Name[hu]=Megjelenítés a megadott ablakban
-Name[is]=Birta í völdum glugga
-Name[it]=Mostra nella finestra specificata
-Name[ja]=特定のウィンドウで表示
-Name[ka]=ჩვენება მითითებულ ფანჯარაში
-Name[lt]=Rodyti nurodytame lange
-Name[mk]=Прикажи во наведениот прозорец
-Name[ms]=Papar dalam Tetingkap Yang Dinyatakan
-Name[nb]=Vis i angitt vindu
-Name[nds]=In utsöcht Finster wiesen
-Name[ne]=निर्दिष्ट सञ्झ्यालमा प्रदर्शन
-Name[nl]=Weergeven in een opgegeven venster
-Name[nn]=Vis i oppgjeve vindauge
-Name[pa]=ਦੱਸੇ ਝਰੋਖੇ ਵਿੱਚ ਵੇਖਾਓ
-Name[pl]=Wyświetl w zadanym oknie
-Name[pt]=Mostrar na Janela Indicada
-Name[pt_BR]=Mostrar em janela especificada
-Name[ro]=Afişează în fereastra specificată
-Name[ru]=Показывать в указанном окне
-Name[rw]=Kwerekana mu Idirishya Ryihariye
-Name[sk]=Zobraziť v zadanom okne
-Name[sl]=Prikaz v določenemu oknu
-Name[sr]=Прикажи у наведеном прозору
-Name[sr@Latn]=Prikaži u navedenom prozoru
-Name[sv]=Visa i angivet fönster
-Name[ta]=குறித்த சாளரத்தில் காட்டு
-Name[tg]=Дар тирезаи нишондода намоиш намоед
-Name[tr]=Belirtilen Pencerede Göster
-Name[uk]=Відобразити у вказаному вікні
-Name[vi]=Hiển thị trong Cửa sổ Đã định
-Name[zh_CN]=在指定的窗口中显示
-Name[zh_TW]=在指定的視窗中顯示
-NoDisplay=true
-
-[Desktop Action Root]
-Exec=kblob.kss -root
-Name=Display in Root Window
-Name[bg]=Стартиране в главния прозорец
-Name[br]=Diskwel er prenestr gwrizienn
-Name[bs]=Prikaži u korijenskom prozoru
-Name[ca]=Mostra a la finestra arrel
-Name[cs]=Zobrazit na pozadí plochy
-Name[cy]=Dangos mewn Ffenestr Wraidd
-Name[da]=Visning i root-vindue
-Name[de]=In Hintergrundfenster anzeigen
-Name[el]=Προβολή στο βασικό παράθυρο
-Name[eo]=Montri en radika fenestro
-Name[es]=Mostrar en la ventana raíz
-Name[et]=Juuraknas näitamine
-Name[eu]=Bistaratu erro lehioan
-Name[fa]=نمایش در پنجرۀ ریشه
-Name[fi]=Näytä juuri-ikkunassa
-Name[fr]=Affichage dans la fenêtre racine
-Name[fy]=Werjefte yn haadfinster
-Name[ga]=Taispeáin sa bhFréamhfhuinneog
-Name[gl]=Mostrar na fiestra raiz
-Name[he]=הצג בחלון השורש
-Name[hi]=रूट विंडो में प्रदर्शित करें
-Name[hu]=Megjelenítés a gyökérablakban
-Name[is]=Birta í rótarglugganum
-Name[it]=Mostra sullo sfondo
-Name[ja]=ルートウィンドウで表示
-Name[ka]=ჩვენება ძირითად ფანჯარაში
-Name[lt]=Rodyti root lange
-Name[mk]=Прикажи во коренскиот прозорец
-Name[ms]=Papar dalam Tetingkap Root
-Name[nb]=Vis i root-vindu
-Name[nds]=In Hööftfinster wiesen
-Name[ne]=मूल सञ्झ्यालमा प्रदर्शन
-Name[nl]=Weergeven in hoofdvenster
-Name[nn]=Vis i rotvindauget
-Name[pa]=Root ਝਰੋਖੇ ਵਿੱਚ ਵੇਖਾਓ
-Name[pl]=Wyświetl w oknie głównym
-Name[pt]=Mostrar na Janela de Fundo
-Name[pt_BR]=Mostrar na janela raiz
-Name[ro]=Afişează în fereastra rădăcină
-Name[ru]=Показывать в корневом окне
-Name[rw]=Kwerekana mu Idirishya Umuzi
-Name[sk]=Zobraziť v koreňovom okne
-Name[sl]=Prikaz v korenskem oknu
-Name[sr]=Прикажи у главном (root) прозору
-Name[sr@Latn]=Prikaži u glavnom (root) prozoru
-Name[sv]=Visa i rotfönstret
-Name[ta]=ஆரம்ப சாளரத்தில் காட்டு
-Name[tg]=Дар тирезаи решагӣ намоиш намоед
-Name[tr]=Kök Pencerede Göster
-Name[uk]=Відобразити в кореневому вікні
-Name[vi]=Hiển thị trong Cửa sổ Gốc
-Name[zh_CN]=在根窗口中显示
-Name[zh_TW]=在根視窗中顯示
-NoDisplay=true
diff --git a/kscreensaver/kdesavers/KClock.desktop b/kscreensaver/kdesavers/KClock.desktop
deleted file mode 100644
index b6c35887..00000000
--- a/kscreensaver/kdesavers/KClock.desktop
+++ /dev/null
@@ -1,252 +0,0 @@
-[Desktop Entry]
-Exec=kclock.kss
-Icon=kscreensaver
-Type=Application
-Actions=Setup;InWindow;Root;
-X-TDE-Category=Miscellaneous
-Name=Clock
-Name[bg]=Часовник
-Name[br]=Eurier
-Name[bs]=Sat
-Name[ca]=Rellotge
-Name[cs]=Hodiny
-Name[cy]=Cloc
-Name[da]=Ur
-Name[de]=Uhr
-Name[el]=Ρολόι
-Name[eo]=Horloĝo
-Name[es]=Reloj
-Name[et]=Kell
-Name[eu]=Erlojua
-Name[fa]=ساعت
-Name[fi]=Kello
-Name[fr]=Horloge
-Name[fy]=Klok
-Name[ga]=Clog
-Name[gl]=Reloxio
-Name[he]=שעון
-Name[hi]=घड़ी
-Name[hu]=Óra
-Name[is]=Klukka
-Name[it]=Orologio
-Name[ja]=時計
-Name[ka]=საათი
-Name[lt]=Laikrodis
-Name[lv]=Pulkstenis
-Name[mk]=Часовник
-Name[ms]=Jam
-Name[nb]=Klokke
-Name[nds]=Klock
-Name[ne]=घडी
-Name[nl]=Klok
-Name[nn]=Klokke
-Name[pa]=ਘੜੀ
-Name[pl]=Zegar
-Name[pt]=Relógio
-Name[pt_BR]=Relógio
-Name[ro]=Ceas
-Name[ru]=Часы
-Name[rw]=Isaha
-Name[sk]=Hodiny
-Name[sl]=Ura
-Name[sr]=Часовник
-Name[sr@Latn]=Časovnik
-Name[sv]=Klocka
-Name[ta]=கடிகாரம்
-Name[tg]=Соат
-Name[th]=นาฬิกา
-Name[tr]=Saat
-Name[uk]=Годинник
-Name[uz]=Soat
-Name[uz@cyrillic]=Соат
-Name[ven]=Tshifhinga
-Name[vi]=Đồng hồ
-Name[xh]=Ikloko
-Name[zh_CN]=时钟
-Name[zh_TW]=時鐘
-Name[zu]=Iwashi
-
-[Desktop Action Setup]
-Exec=kclock.kss -setup
-Name=Setup...
-Name[af]=Opstelling...
-Name[bg]=Настройки...
-Name[br]=Kefluniadur ...
-Name[bs]=Postavke...
-Name[ca]=Arranjament...
-Name[cs]=Nastavení...
-Name[cy]=Gosod ...
-Name[da]=Opsætning...
-Name[de]=Einrichtung ...
-Name[el]=Ρύθμιση...
-Name[eo]=Agordo...
-Name[es]=Configuración...
-Name[et]=Seadistamine...
-Name[eu]=Konfiguratu...
-Name[fa]=برپایی...
-Name[fi]=Asetukset...
-Name[fo]=Uppseting...
-Name[fr]=Configuration...
-Name[fy]=Opset...
-Name[ga]=Cumraigh...
-Name[gl]=Configuración...
-Name[he]=הגדרות...
-Name[hi]=सेटअप...
-Name[hu]=Beállítás...
-Name[is]=Stillingar...
-Name[it]=Impostazioni...
-Name[ja]=設定...
-Name[ka]=გამართვა...
-Name[lt]=Sąranka ...
-Name[lv]=Uzstādīšana...
-Name[mk]=Поставување...
-Name[ms]=Setkan...
-Name[mt]=Konfigurazzjoni...
-Name[nb]=Innstillinger …
-Name[nds]=Instellen...
-Name[ne]=सेटअप...
-Name[nl]=Instellingen...
-Name[nn]=Oppsett …
-Name[nso]=Beakanya...
-Name[pa]=ਸੈਟਅੱਪ...
-Name[pl]=Ustawienia...
-Name[pt]=Configurar...
-Name[pt_BR]=Configurar...
-Name[ro]=Setează...
-Name[ru]=Настройка...
-Name[rw]=Iboneza...
-Name[sk]=Nastavenie...
-Name[sl]=Nastavi ...
-Name[sr]=Подеси...
-Name[sr@Latn]=Podesi...
-Name[sv]=Inställningar...
-Name[ta]=அமைப்பு...
-Name[tg]=Барпосозӣ...
-Name[th]=ติดตั้ง...
-Name[tr]=Kurulum...
-Name[uk]=Встановити...
-Name[uz]=Oʻrnatish
-Name[uz@cyrillic]=Ўрнатиш
-Name[ven]=Vhekanya...
-Name[vi]=Thiết lập...
-Name[xh]=Iyacwangciswa...
-Name[zh_CN]=设置...
-Name[zh_TW]=設定...
-Name[zu]=Iyalungiselela...
-Icon=kscreensaver
-
-[Desktop Action InWindow]
-Exec=kclock.kss -window-id %w
-Name=Display in Specified Window
-Name[bg]=Стартиране в избран прозорец
-Name[br]=Diskwel er prenestr spisaet
-Name[bs]=Prikaži u navedenom prozoru
-Name[ca]=Mostra a la finestra especificada
-Name[cs]=Zobrazit v určeném okně
-Name[cy]=Dangos mewn Ffenestr Benodol
-Name[da]=Visning i angivet vindue
-Name[de]=In bestimmten Fenster anzeigen
-Name[el]=Προβολή στο καθορισμένο παράθυρο
-Name[eo]=Montri en indikita fenestro
-Name[es]=Mostrar en la ventana especificada
-Name[et]=Määratud aknas näitamine
-Name[eu]=Bistaratu zehaztutako lehioan
-Name[fa]=نمایش در پنجرۀ مشخص‌شده
-Name[fi]=Näytä määrätyssä ikkunassa
-Name[fr]=Affichage dans la fenêtre spécifiée
-Name[fy]=Werjefte yn in definiearre finster
-Name[ga]=Taispeáin san Fhuinneog Sonraithe
-Name[gl]=Mostrar na fiestra indicada
-Name[he]=הצג בחלון המצוין
-Name[hi]=निर्दिष्ट विंडो में प्रदर्शित करें
-Name[hu]=Megjelenítés a megadott ablakban
-Name[is]=Birta í völdum glugga
-Name[it]=Mostra nella finestra specificata
-Name[ja]=特定のウィンドウで表示
-Name[ka]=ჩვენება მითითებულ ფანჯარაში
-Name[lt]=Rodyti nurodytame lange
-Name[mk]=Прикажи во наведениот прозорец
-Name[ms]=Papar dalam Tetingkap Yang Dinyatakan
-Name[nb]=Vis i angitt vindu
-Name[nds]=In utsöcht Finster wiesen
-Name[ne]=निर्दिष्ट सञ्झ्यालमा प्रदर्शन
-Name[nl]=Weergeven in een opgegeven venster
-Name[nn]=Vis i oppgjeve vindauge
-Name[pa]=ਦੱਸੇ ਝਰੋਖੇ ਵਿੱਚ ਵੇਖਾਓ
-Name[pl]=Wyświetl w zadanym oknie
-Name[pt]=Mostrar na Janela Indicada
-Name[pt_BR]=Mostrar em janela especificada
-Name[ro]=Afişează în fereastra specificată
-Name[ru]=Показывать в указанном окне
-Name[rw]=Kwerekana mu Idirishya Ryihariye
-Name[sk]=Zobraziť v zadanom okne
-Name[sl]=Prikaz v določenemu oknu
-Name[sr]=Прикажи у наведеном прозору
-Name[sr@Latn]=Prikaži u navedenom prozoru
-Name[sv]=Visa i angivet fönster
-Name[ta]=குறித்த சாளரத்தில் காட்டு
-Name[tg]=Дар тирезаи нишондода намоиш намоед
-Name[tr]=Belirtilen Pencerede Göster
-Name[uk]=Відобразити у вказаному вікні
-Name[vi]=Hiển thị trong Cửa sổ Đã định
-Name[zh_CN]=在指定的窗口中显示
-Name[zh_TW]=在指定的視窗中顯示
-NoDisplay=true
-
-[Desktop Action Root]
-Exec=kclock.kss -root
-Name=Display in Root Window
-Name[bg]=Стартиране в главния прозорец
-Name[br]=Diskwel er prenestr gwrizienn
-Name[bs]=Prikaži u korijenskom prozoru
-Name[ca]=Mostra a la finestra arrel
-Name[cs]=Zobrazit na pozadí plochy
-Name[cy]=Dangos mewn Ffenestr Wraidd
-Name[da]=Visning i root-vindue
-Name[de]=In Hintergrundfenster anzeigen
-Name[el]=Προβολή στο βασικό παράθυρο
-Name[eo]=Montri en radika fenestro
-Name[es]=Mostrar en la ventana raíz
-Name[et]=Juuraknas näitamine
-Name[eu]=Bistaratu erro lehioan
-Name[fa]=نمایش در پنجرۀ ریشه
-Name[fi]=Näytä juuri-ikkunassa
-Name[fr]=Affichage dans la fenêtre racine
-Name[fy]=Werjefte yn haadfinster
-Name[ga]=Taispeáin sa bhFréamhfhuinneog
-Name[gl]=Mostrar na fiestra raiz
-Name[he]=הצג בחלון השורש
-Name[hi]=रूट विंडो में प्रदर्शित करें
-Name[hu]=Megjelenítés a gyökérablakban
-Name[is]=Birta í rótarglugganum
-Name[it]=Mostra sullo sfondo
-Name[ja]=ルートウィンドウで表示
-Name[ka]=ჩვენება ძირითად ფანჯარაში
-Name[lt]=Rodyti root lange
-Name[mk]=Прикажи во коренскиот прозорец
-Name[ms]=Papar dalam Tetingkap Root
-Name[nb]=Vis i root-vindu
-Name[nds]=In Hööftfinster wiesen
-Name[ne]=मूल सञ्झ्यालमा प्रदर्शन
-Name[nl]=Weergeven in hoofdvenster
-Name[nn]=Vis i rotvindauget
-Name[pa]=Root ਝਰੋਖੇ ਵਿੱਚ ਵੇਖਾਓ
-Name[pl]=Wyświetl w oknie głównym
-Name[pt]=Mostrar na Janela de Fundo
-Name[pt_BR]=Mostrar na janela raiz
-Name[ro]=Afişează în fereastra rădăcină
-Name[ru]=Показывать в корневом окне
-Name[rw]=Kwerekana mu Idirishya Umuzi
-Name[sk]=Zobraziť v koreňovom okne
-Name[sl]=Prikaz v korenskem oknu
-Name[sr]=Прикажи у главном (root) прозору
-Name[sr@Latn]=Prikaži u glavnom (root) prozoru
-Name[sv]=Visa i rotfönstret
-Name[ta]=ஆரம்ப சாளரத்தில் காட்டு
-Name[tg]=Дар тирезаи решагӣ намоиш намоед
-Name[tr]=Kök Pencerede Göster
-Name[uk]=Відобразити в кореневому вікні
-Name[vi]=Hiển thị trong Cửa sổ Gốc
-Name[zh_CN]=在根窗口中显示
-Name[zh_TW]=在根視窗中顯示
-NoDisplay=true
diff --git a/kscreensaver/kdesavers/KEuphoria.desktop b/kscreensaver/kdesavers/KEuphoria.desktop
deleted file mode 100644
index e01fac37..00000000
--- a/kscreensaver/kdesavers/KEuphoria.desktop
+++ /dev/null
@@ -1,233 +0,0 @@
-[Desktop Entry]
-Exec=keuphoria.kss
-Icon=kscreensaver
-Type=Application
-Actions=Setup;InWindow;Root;
-X-TDE-Category=OpenGL Screen Savers
-X-TDE-Type=OpenGL
-Name=Euphoria (GL)
-Name[bg]=Еуфория
-Name[ca]=Eufòria (GL)
-Name[cy]=Iwfforia (GL)
-Name[da]=Eufori (GL)
-Name[de]=Euphorie
-Name[el]=Ευφορία (GL)
-Name[es]=Euforia (GL)
-Name[et]=Eufooria (GL)
-Name[eu]=Euforia (GL)
-Name[fa]=شادی (GL)
-Name[fr]=Euphorie (GL)
-Name[he]=אופוריה (GL)
-Name[hi]=परम आनंद (जीएल)
-Name[hu]=Euphoria (OpenGL)
-Name[it]=Euforia (GL)
-Name[ja]=幸福 (GL)
-Name[ka]=ეიფორია (GL)
-Name[mk]=Еуфорија (GL)
-Name[mt]=Ewforija (GL)
-Name[nb]=Eufori (GL)
-Name[nds]=Euphorie (GL)
-Name[ne]=यूफोरिया (GL)
-Name[nn]=Rom (GL)
-Name[pl]=Euforia (GL)
-Name[pt]=Euforia (GL)
-Name[pt_BR]=Euforia (GL)
-Name[ro]=Euforia (GL)
-Name[ru]=Эйфория (GL)
-Name[sl]=Evforija (GL)
-Name[sr]=Еуфорија (GL)
-Name[sr@Latn]=Euforija (GL)
-Name[sv]=Eufori (GL)
-Name[ta]=மகிழ்ச்சி(GL)
-Name[tg]=Кайфчоқӣ (GL)
-Name[th]=ยูโฟเรีย (GL)
-Name[uk]=Ейфорія (GL)
-Name[uz]=Eyforiya (GL)
-Name[uz@cyrillic]=Эйфория (GL)
-Name[vi]=Trạng thái phởn phơ (GL)
-Name[zh_CN]=陶醉(GL)
-
-[Desktop Action Setup]
-Exec=keuphoria.kss -setup
-Name=Setup...
-Name[af]=Opstelling...
-Name[bg]=Настройки...
-Name[br]=Kefluniadur ...
-Name[bs]=Postavke...
-Name[ca]=Arranjament...
-Name[cs]=Nastavení...
-Name[cy]=Gosod ...
-Name[da]=Opsætning...
-Name[de]=Einrichtung ...
-Name[el]=Ρύθμιση...
-Name[eo]=Agordo...
-Name[es]=Configuración...
-Name[et]=Seadistamine...
-Name[eu]=Konfiguratu...
-Name[fa]=برپایی...
-Name[fi]=Asetukset...
-Name[fo]=Uppseting...
-Name[fr]=Configuration...
-Name[fy]=Opset...
-Name[ga]=Cumraigh...
-Name[gl]=Configuración...
-Name[he]=הגדרות...
-Name[hi]=सेटअप...
-Name[hu]=Beállítás...
-Name[is]=Stillingar...
-Name[it]=Impostazioni...
-Name[ja]=設定...
-Name[ka]=გამართვა...
-Name[lt]=Sąranka ...
-Name[lv]=Uzstādīšana...
-Name[mk]=Поставување...
-Name[ms]=Setkan...
-Name[mt]=Konfigurazzjoni...
-Name[nb]=Innstillinger …
-Name[nds]=Instellen...
-Name[ne]=सेटअप...
-Name[nl]=Instellingen...
-Name[nn]=Oppsett …
-Name[nso]=Beakanya...
-Name[pa]=ਸੈਟਅੱਪ...
-Name[pl]=Ustawienia...
-Name[pt]=Configurar...
-Name[pt_BR]=Configurar...
-Name[ro]=Setează...
-Name[ru]=Настройка...
-Name[rw]=Iboneza...
-Name[sk]=Nastavenie...
-Name[sl]=Nastavi ...
-Name[sr]=Подеси...
-Name[sr@Latn]=Podesi...
-Name[sv]=Inställningar...
-Name[ta]=அமைப்பு...
-Name[tg]=Барпосозӣ...
-Name[th]=ติดตั้ง...
-Name[tr]=Kurulum...
-Name[uk]=Встановити...
-Name[uz]=Oʻrnatish
-Name[uz@cyrillic]=Ўрнатиш
-Name[ven]=Vhekanya...
-Name[vi]=Thiết lập...
-Name[xh]=Iyacwangciswa...
-Name[zh_CN]=设置...
-Name[zh_TW]=設定...
-Name[zu]=Iyalungiselela...
-Icon=kscreensaver
-
-[Desktop Action InWindow]
-Exec=keuphoria.kss -window-id %w
-Name=Display in Specified Window
-Name[bg]=Стартиране в избран прозорец
-Name[br]=Diskwel er prenestr spisaet
-Name[bs]=Prikaži u navedenom prozoru
-Name[ca]=Mostra a la finestra especificada
-Name[cs]=Zobrazit v určeném okně
-Name[cy]=Dangos mewn Ffenestr Benodol
-Name[da]=Visning i angivet vindue
-Name[de]=In bestimmten Fenster anzeigen
-Name[el]=Προβολή στο καθορισμένο παράθυρο
-Name[eo]=Montri en indikita fenestro
-Name[es]=Mostrar en la ventana especificada
-Name[et]=Määratud aknas näitamine
-Name[eu]=Bistaratu zehaztutako lehioan
-Name[fa]=نمایش در پنجرۀ مشخص‌شده
-Name[fi]=Näytä määrätyssä ikkunassa
-Name[fr]=Affichage dans la fenêtre spécifiée
-Name[fy]=Werjefte yn in definiearre finster
-Name[ga]=Taispeáin san Fhuinneog Sonraithe
-Name[gl]=Mostrar na fiestra indicada
-Name[he]=הצג בחלון המצוין
-Name[hi]=निर्दिष्ट विंडो में प्रदर्शित करें
-Name[hu]=Megjelenítés a megadott ablakban
-Name[is]=Birta í völdum glugga
-Name[it]=Mostra nella finestra specificata
-Name[ja]=特定のウィンドウで表示
-Name[ka]=ჩვენება მითითებულ ფანჯარაში
-Name[lt]=Rodyti nurodytame lange
-Name[mk]=Прикажи во наведениот прозорец
-Name[ms]=Papar dalam Tetingkap Yang Dinyatakan
-Name[nb]=Vis i angitt vindu
-Name[nds]=In utsöcht Finster wiesen
-Name[ne]=निर्दिष्ट सञ्झ्यालमा प्रदर्शन
-Name[nl]=Weergeven in een opgegeven venster
-Name[nn]=Vis i oppgjeve vindauge
-Name[pa]=ਦੱਸੇ ਝਰੋਖੇ ਵਿੱਚ ਵੇਖਾਓ
-Name[pl]=Wyświetl w zadanym oknie
-Name[pt]=Mostrar na Janela Indicada
-Name[pt_BR]=Mostrar em janela especificada
-Name[ro]=Afişează în fereastra specificată
-Name[ru]=Показывать в указанном окне
-Name[rw]=Kwerekana mu Idirishya Ryihariye
-Name[sk]=Zobraziť v zadanom okne
-Name[sl]=Prikaz v določenemu oknu
-Name[sr]=Прикажи у наведеном прозору
-Name[sr@Latn]=Prikaži u navedenom prozoru
-Name[sv]=Visa i angivet fönster
-Name[ta]=குறித்த சாளரத்தில் காட்டு
-Name[tg]=Дар тирезаи нишондода намоиш намоед
-Name[tr]=Belirtilen Pencerede Göster
-Name[uk]=Відобразити у вказаному вікні
-Name[vi]=Hiển thị trong Cửa sổ Đã định
-Name[zh_CN]=在指定的窗口中显示
-Name[zh_TW]=在指定的視窗中顯示
-NoDisplay=true
-
-[Desktop Action Root]
-Exec=keuphoria.kss -root
-Name=Display in Root Window
-Name[bg]=Стартиране в главния прозорец
-Name[br]=Diskwel er prenestr gwrizienn
-Name[bs]=Prikaži u korijenskom prozoru
-Name[ca]=Mostra a la finestra arrel
-Name[cs]=Zobrazit na pozadí plochy
-Name[cy]=Dangos mewn Ffenestr Wraidd
-Name[da]=Visning i root-vindue
-Name[de]=In Hintergrundfenster anzeigen
-Name[el]=Προβολή στο βασικό παράθυρο
-Name[eo]=Montri en radika fenestro
-Name[es]=Mostrar en la ventana raíz
-Name[et]=Juuraknas näitamine
-Name[eu]=Bistaratu erro lehioan
-Name[fa]=نمایش در پنجرۀ ریشه
-Name[fi]=Näytä juuri-ikkunassa
-Name[fr]=Affichage dans la fenêtre racine
-Name[fy]=Werjefte yn haadfinster
-Name[ga]=Taispeáin sa bhFréamhfhuinneog
-Name[gl]=Mostrar na fiestra raiz
-Name[he]=הצג בחלון השורש
-Name[hi]=रूट विंडो में प्रदर्शित करें
-Name[hu]=Megjelenítés a gyökérablakban
-Name[is]=Birta í rótarglugganum
-Name[it]=Mostra sullo sfondo
-Name[ja]=ルートウィンドウで表示
-Name[ka]=ჩვენება ძირითად ფანჯარაში
-Name[lt]=Rodyti root lange
-Name[mk]=Прикажи во коренскиот прозорец
-Name[ms]=Papar dalam Tetingkap Root
-Name[nb]=Vis i root-vindu
-Name[nds]=In Hööftfinster wiesen
-Name[ne]=मूल सञ्झ्यालमा प्रदर्शन
-Name[nl]=Weergeven in hoofdvenster
-Name[nn]=Vis i rotvindauget
-Name[pa]=Root ਝਰੋਖੇ ਵਿੱਚ ਵੇਖਾਓ
-Name[pl]=Wyświetl w oknie głównym
-Name[pt]=Mostrar na Janela de Fundo
-Name[pt_BR]=Mostrar na janela raiz
-Name[ro]=Afişează în fereastra rădăcină
-Name[ru]=Показывать в корневом окне
-Name[rw]=Kwerekana mu Idirishya Umuzi
-Name[sk]=Zobraziť v koreňovom okne
-Name[sl]=Prikaz v korenskem oknu
-Name[sr]=Прикажи у главном (root) прозору
-Name[sr@Latn]=Prikaži u glavnom (root) prozoru
-Name[sv]=Visa i rotfönstret
-Name[ta]=ஆரம்ப சாளரத்தில் காட்டு
-Name[tg]=Дар тирезаи решагӣ намоиш намоед
-Name[tr]=Kök Pencerede Göster
-Name[uk]=Відобразити в кореневому вікні
-Name[vi]=Hiển thị trong Cửa sổ Gốc
-Name[zh_CN]=在根窗口中显示
-Name[zh_TW]=在根視窗中顯示
-NoDisplay=true
diff --git a/kscreensaver/kdesavers/KFiresaver.desktop b/kscreensaver/kdesavers/KFiresaver.desktop
deleted file mode 100644
index 783b195b..00000000
--- a/kscreensaver/kdesavers/KFiresaver.desktop
+++ /dev/null
@@ -1,233 +0,0 @@
-[Desktop Entry]
-Exec=kfiresaver.kss
-Icon=kscreensaver
-Type=Application
-Actions=Setup;InWindow;Root;
-X-TDE-Category=OpenGL Screen Savers
-X-TDE-Type=OpenGL
-Name=Fireworks 3D (GL)
-Name[bg]=Фойерверки
-Name[ca]=Focs d'artifici 3D (GL)
-Name[cs]=Ohňostroj (GL)
-Name[de]=Feuerwerk
-Name[el]=Βεγγαλικά (GL)
-Name[es]=Fuegos artificiales 3D (GL)
-Name[et]=Tulevärk 3D (GL)
-Name[eu]=Su artifizialak 3D (GL)
-Name[fa]=آتش‌بازیهای سه بعدی (GL)
-Name[fi]=Ilotulitus 3D (GL)
-Name[fr]=Feux d'artifices 3D (GL)
-Name[fy]=Fjoerwurk 3D (GL)
-Name[ga]=Fireworks 3T (GL)
-Name[gl]=Fogos de artifício 3D (GL)
-Name[he]=זיקוקי דינור (GL)
-Name[hi]=आतिशबाज़ी 3डी (जीएल)
-Name[hu]=Tűzijáték 3D (OpenGL)
-Name[is]=Flugeldar 3D (GL)
-Name[it]=Fuochi d'artificio 3D (GL)
-Name[ja]=花火 3D (GL)
-Name[ka]=ფეიერვერკი (GL)
-Name[mk]=Огномет 3Д (GL)
-Name[nb]=Fyrverkeri 3D (GL)
-Name[nds]=Füerwark (GL)
-Name[ne]=त्रि-आयामिक फाएरवर्क्स (GL)
-Name[nn]=Fyrverkeri 3D (GL)
-Name[pl]=Sztuczne ognie 3D (GL)
-Name[pt]=Fogo de Artifício 3D (GL)
-Name[ro]=Focuri de artificii 3D (GL)
-Name[ru]=Фейерверк (GL)
-Name[sl]=Ognjemet 3D (GL)
-Name[sr]=Ватромети 3Д (GL)
-Name[sr@Latn]=Vatrometi 3D (GL)
-Name[sv]=Fyrverkeri 3D (GL)
-Name[tg]=Оташи тарф (GL)
-Name[tr]=3B Havai Fişekler (GL)
-Name[uk]=Феєрверк 3D (GL)
-Name[vi]=Pháo hoa 3 chiều (GL)
-Name[zh_CN]=三维烟花(GL)
-Name[zh_TW]=3D 煙火秀 (GL)
-
-[Desktop Action Setup]
-Exec=kfiresaver.kss -setup
-Name=Setup...
-Name[af]=Opstelling...
-Name[bg]=Настройки...
-Name[br]=Kefluniadur ...
-Name[bs]=Postavke...
-Name[ca]=Arranjament...
-Name[cs]=Nastavení...
-Name[cy]=Gosod ...
-Name[da]=Opsætning...
-Name[de]=Einrichtung ...
-Name[el]=Ρύθμιση...
-Name[eo]=Agordo...
-Name[es]=Configuración...
-Name[et]=Seadistamine...
-Name[eu]=Konfiguratu...
-Name[fa]=برپایی...
-Name[fi]=Asetukset...
-Name[fo]=Uppseting...
-Name[fr]=Configuration...
-Name[fy]=Opset...
-Name[ga]=Cumraigh...
-Name[gl]=Configuración...
-Name[he]=הגדרות...
-Name[hi]=सेटअप...
-Name[hu]=Beállítás...
-Name[is]=Stillingar...
-Name[it]=Impostazioni...
-Name[ja]=設定...
-Name[ka]=გამართვა...
-Name[lt]=Sąranka ...
-Name[lv]=Uzstādīšana...
-Name[mk]=Поставување...
-Name[ms]=Setkan...
-Name[mt]=Konfigurazzjoni...
-Name[nb]=Innstillinger …
-Name[nds]=Instellen...
-Name[ne]=सेटअप...
-Name[nl]=Instellingen...
-Name[nn]=Oppsett …
-Name[nso]=Beakanya...
-Name[pa]=ਸੈਟਅੱਪ...
-Name[pl]=Ustawienia...
-Name[pt]=Configurar...
-Name[pt_BR]=Configurar...
-Name[ro]=Setează...
-Name[ru]=Настройка...
-Name[rw]=Iboneza...
-Name[sk]=Nastavenie...
-Name[sl]=Nastavi ...
-Name[sr]=Подеси...
-Name[sr@Latn]=Podesi...
-Name[sv]=Inställningar...
-Name[ta]=அமைப்பு...
-Name[tg]=Барпосозӣ...
-Name[th]=ติดตั้ง...
-Name[tr]=Kurulum...
-Name[uk]=Встановити...
-Name[uz]=Oʻrnatish
-Name[uz@cyrillic]=Ўрнатиш
-Name[ven]=Vhekanya...
-Name[vi]=Thiết lập...
-Name[xh]=Iyacwangciswa...
-Name[zh_CN]=设置...
-Name[zh_TW]=設定...
-Name[zu]=Iyalungiselela...
-Icon=kscreensaver
-
-[Desktop Action InWindow]
-Exec=kfiresaver.kss -window-id %w
-Name=Display in Specified Window
-Name[bg]=Стартиране в избран прозорец
-Name[br]=Diskwel er prenestr spisaet
-Name[bs]=Prikaži u navedenom prozoru
-Name[ca]=Mostra a la finestra especificada
-Name[cs]=Zobrazit v určeném okně
-Name[cy]=Dangos mewn Ffenestr Benodol
-Name[da]=Visning i angivet vindue
-Name[de]=In bestimmten Fenster anzeigen
-Name[el]=Προβολή στο καθορισμένο παράθυρο
-Name[eo]=Montri en indikita fenestro
-Name[es]=Mostrar en la ventana especificada
-Name[et]=Määratud aknas näitamine
-Name[eu]=Bistaratu zehaztutako lehioan
-Name[fa]=نمایش در پنجرۀ مشخص‌شده
-Name[fi]=Näytä määrätyssä ikkunassa
-Name[fr]=Affichage dans la fenêtre spécifiée
-Name[fy]=Werjefte yn in definiearre finster
-Name[ga]=Taispeáin san Fhuinneog Sonraithe
-Name[gl]=Mostrar na fiestra indicada
-Name[he]=הצג בחלון המצוין
-Name[hi]=निर्दिष्ट विंडो में प्रदर्शित करें
-Name[hu]=Megjelenítés a megadott ablakban
-Name[is]=Birta í völdum glugga
-Name[it]=Mostra nella finestra specificata
-Name[ja]=特定のウィンドウで表示
-Name[ka]=ჩვენება მითითებულ ფანჯარაში
-Name[lt]=Rodyti nurodytame lange
-Name[mk]=Прикажи во наведениот прозорец
-Name[ms]=Papar dalam Tetingkap Yang Dinyatakan
-Name[nb]=Vis i angitt vindu
-Name[nds]=In utsöcht Finster wiesen
-Name[ne]=निर्दिष्ट सञ्झ्यालमा प्रदर्शन
-Name[nl]=Weergeven in een opgegeven venster
-Name[nn]=Vis i oppgjeve vindauge
-Name[pa]=ਦੱਸੇ ਝਰੋਖੇ ਵਿੱਚ ਵੇਖਾਓ
-Name[pl]=Wyświetl w zadanym oknie
-Name[pt]=Mostrar na Janela Indicada
-Name[pt_BR]=Mostrar em janela especificada
-Name[ro]=Afişează în fereastra specificată
-Name[ru]=Показывать в указанном окне
-Name[rw]=Kwerekana mu Idirishya Ryihariye
-Name[sk]=Zobraziť v zadanom okne
-Name[sl]=Prikaz v določenemu oknu
-Name[sr]=Прикажи у наведеном прозору
-Name[sr@Latn]=Prikaži u navedenom prozoru
-Name[sv]=Visa i angivet fönster
-Name[ta]=குறித்த சாளரத்தில் காட்டு
-Name[tg]=Дар тирезаи нишондода намоиш намоед
-Name[tr]=Belirtilen Pencerede Göster
-Name[uk]=Відобразити у вказаному вікні
-Name[vi]=Hiển thị trong Cửa sổ Đã định
-Name[zh_CN]=在指定的窗口中显示
-Name[zh_TW]=在指定的視窗中顯示
-NoDisplay=true
-
-[Desktop Action Root]
-Exec=kfiresaver.kss -root
-Name=Display in Root Window
-Name[bg]=Стартиране в главния прозорец
-Name[br]=Diskwel er prenestr gwrizienn
-Name[bs]=Prikaži u korijenskom prozoru
-Name[ca]=Mostra a la finestra arrel
-Name[cs]=Zobrazit na pozadí plochy
-Name[cy]=Dangos mewn Ffenestr Wraidd
-Name[da]=Visning i root-vindue
-Name[de]=In Hintergrundfenster anzeigen
-Name[el]=Προβολή στο βασικό παράθυρο
-Name[eo]=Montri en radika fenestro
-Name[es]=Mostrar en la ventana raíz
-Name[et]=Juuraknas näitamine
-Name[eu]=Bistaratu erro lehioan
-Name[fa]=نمایش در پنجرۀ ریشه
-Name[fi]=Näytä juuri-ikkunassa
-Name[fr]=Affichage dans la fenêtre racine
-Name[fy]=Werjefte yn haadfinster
-Name[ga]=Taispeáin sa bhFréamhfhuinneog
-Name[gl]=Mostrar na fiestra raiz
-Name[he]=הצג בחלון השורש
-Name[hi]=रूट विंडो में प्रदर्शित करें
-Name[hu]=Megjelenítés a gyökérablakban
-Name[is]=Birta í rótarglugganum
-Name[it]=Mostra sullo sfondo
-Name[ja]=ルートウィンドウで表示
-Name[ka]=ჩვენება ძირითად ფანჯარაში
-Name[lt]=Rodyti root lange
-Name[mk]=Прикажи во коренскиот прозорец
-Name[ms]=Papar dalam Tetingkap Root
-Name[nb]=Vis i root-vindu
-Name[nds]=In Hööftfinster wiesen
-Name[ne]=मूल सञ्झ्यालमा प्रदर्शन
-Name[nl]=Weergeven in hoofdvenster
-Name[nn]=Vis i rotvindauget
-Name[pa]=Root ਝਰੋਖੇ ਵਿੱਚ ਵੇਖਾਓ
-Name[pl]=Wyświetl w oknie głównym
-Name[pt]=Mostrar na Janela de Fundo
-Name[pt_BR]=Mostrar na janela raiz
-Name[ro]=Afişează în fereastra rădăcină
-Name[ru]=Показывать в корневом окне
-Name[rw]=Kwerekana mu Idirishya Umuzi
-Name[sk]=Zobraziť v koreňovom okne
-Name[sl]=Prikaz v korenskem oknu
-Name[sr]=Прикажи у главном (root) прозору
-Name[sr@Latn]=Prikaži u glavnom (root) prozoru
-Name[sv]=Visa i rotfönstret
-Name[ta]=ஆரம்ப சாளரத்தில் காட்டு
-Name[tg]=Дар тирезаи решагӣ намоиш намоед
-Name[tr]=Kök Pencerede Göster
-Name[uk]=Відобразити в кореневому вікні
-Name[vi]=Hiển thị trong Cửa sổ Gốc
-Name[zh_CN]=在根窗口中显示
-Name[zh_TW]=在根視窗中顯示
-NoDisplay=true
diff --git a/kscreensaver/kdesavers/KFlux.desktop b/kscreensaver/kdesavers/KFlux.desktop
deleted file mode 100644
index 2464ad8b..00000000
--- a/kscreensaver/kdesavers/KFlux.desktop
+++ /dev/null
@@ -1,224 +0,0 @@
-[Desktop Entry]
-Exec=kflux.kss
-Icon=kscreensaver
-Type=Application
-Actions=Setup;InWindow;Root;
-X-TDE-Category=OpenGL Screen Savers
-X-TDE-Type=OpenGL
-Name=Flux (GL)
-Name[bg]=Прилив
-Name[cy]=Dylif (GL)
-Name[de]=Flux
-Name[el]=Ροή (GL)
-Name[es]=Flujo (GL)
-Name[fa]=شار (GL)
-Name[fy]=Fluks (GL)
-Name[gl]=Fluxo (GL)
-Name[he]=שטף (GL)
-Name[hi]=लहर-लहर (जीएल)
-Name[hu]=Flux (OpenGL)
-Name[it]=Flusso (GL)
-Name[ja]=流れ (GL)
-Name[ka]=ფლუქტუაცია (GL)
-Name[mk]=Флукс (GL)
-Name[nb]=Fluks (GL)
-Name[ne]=फ्लक्स (GL)
-Name[nn]=Pulsar (GL)
-Name[pt]=Fluxo (GL)
-Name[pt_BR]=Fluxo (GL)
-Name[ru]=Флуктуации (GL)
-Name[sl]=Pretok (GL)
-Name[sr]=Флукс (GL)
-Name[sr@Latn]=Fluks (GL)
-Name[ta]=மாற்றம்(GL)
-Name[tg]=Флуктуатсияи (GL)
-Name[uk]=Флюксія (GL)
-Name[uz]=Oqim (GL)
-Name[uz@cyrillic]=Оқим (GL)
-Name[vi]=Dòng chảy (GL)
-Name[zh_CN]=流动(GL)
-
-[Desktop Action Setup]
-Exec=kflux.kss -setup
-Name=Setup...
-Name[af]=Opstelling...
-Name[bg]=Настройки...
-Name[br]=Kefluniadur ...
-Name[bs]=Postavke...
-Name[ca]=Arranjament...
-Name[cs]=Nastavení...
-Name[cy]=Gosod ...
-Name[da]=Opsætning...
-Name[de]=Einrichtung ...
-Name[el]=Ρύθμιση...
-Name[eo]=Agordo...
-Name[es]=Configuración...
-Name[et]=Seadistamine...
-Name[eu]=Konfiguratu...
-Name[fa]=برپایی...
-Name[fi]=Asetukset...
-Name[fo]=Uppseting...
-Name[fr]=Configuration...
-Name[fy]=Opset...
-Name[ga]=Cumraigh...
-Name[gl]=Configuración...
-Name[he]=הגדרות...
-Name[hi]=सेटअप...
-Name[hu]=Beállítás...
-Name[is]=Stillingar...
-Name[it]=Impostazioni...
-Name[ja]=設定...
-Name[ka]=გამართვა...
-Name[lt]=Sąranka ...
-Name[lv]=Uzstādīšana...
-Name[mk]=Поставување...
-Name[ms]=Setkan...
-Name[mt]=Konfigurazzjoni...
-Name[nb]=Innstillinger …
-Name[nds]=Instellen...
-Name[ne]=सेटअप...
-Name[nl]=Instellingen...
-Name[nn]=Oppsett …
-Name[nso]=Beakanya...
-Name[pa]=ਸੈਟਅੱਪ...
-Name[pl]=Ustawienia...
-Name[pt]=Configurar...
-Name[pt_BR]=Configurar...
-Name[ro]=Setează...
-Name[ru]=Настройка...
-Name[rw]=Iboneza...
-Name[sk]=Nastavenie...
-Name[sl]=Nastavi ...
-Name[sr]=Подеси...
-Name[sr@Latn]=Podesi...
-Name[sv]=Inställningar...
-Name[ta]=அமைப்பு...
-Name[tg]=Барпосозӣ...
-Name[th]=ติดตั้ง...
-Name[tr]=Kurulum...
-Name[uk]=Встановити...
-Name[uz]=Oʻrnatish
-Name[uz@cyrillic]=Ўрнатиш
-Name[ven]=Vhekanya...
-Name[vi]=Thiết lập...
-Name[xh]=Iyacwangciswa...
-Name[zh_CN]=设置...
-Name[zh_TW]=設定...
-Name[zu]=Iyalungiselela...
-Icon=kscreensaver
-
-[Desktop Action InWindow]
-Exec=kflux.kss -window-id %w
-Name=Display in Specified Window
-Name[bg]=Стартиране в избран прозорец
-Name[br]=Diskwel er prenestr spisaet
-Name[bs]=Prikaži u navedenom prozoru
-Name[ca]=Mostra a la finestra especificada
-Name[cs]=Zobrazit v určeném okně
-Name[cy]=Dangos mewn Ffenestr Benodol
-Name[da]=Visning i angivet vindue
-Name[de]=In bestimmten Fenster anzeigen
-Name[el]=Προβολή στο καθορισμένο παράθυρο
-Name[eo]=Montri en indikita fenestro
-Name[es]=Mostrar en la ventana especificada
-Name[et]=Määratud aknas näitamine
-Name[eu]=Bistaratu zehaztutako lehioan
-Name[fa]=نمایش در پنجرۀ مشخص‌شده
-Name[fi]=Näytä määrätyssä ikkunassa
-Name[fr]=Affichage dans la fenêtre spécifiée
-Name[fy]=Werjefte yn in definiearre finster
-Name[ga]=Taispeáin san Fhuinneog Sonraithe
-Name[gl]=Mostrar na fiestra indicada
-Name[he]=הצג בחלון המצוין
-Name[hi]=निर्दिष्ट विंडो में प्रदर्शित करें
-Name[hu]=Megjelenítés a megadott ablakban
-Name[is]=Birta í völdum glugga
-Name[it]=Mostra nella finestra specificata
-Name[ja]=特定のウィンドウで表示
-Name[ka]=ჩვენება მითითებულ ფანჯარაში
-Name[lt]=Rodyti nurodytame lange
-Name[mk]=Прикажи во наведениот прозорец
-Name[ms]=Papar dalam Tetingkap Yang Dinyatakan
-Name[nb]=Vis i angitt vindu
-Name[nds]=In utsöcht Finster wiesen
-Name[ne]=निर्दिष्ट सञ्झ्यालमा प्रदर्शन
-Name[nl]=Weergeven in een opgegeven venster
-Name[nn]=Vis i oppgjeve vindauge
-Name[pa]=ਦੱਸੇ ਝਰੋਖੇ ਵਿੱਚ ਵੇਖਾਓ
-Name[pl]=Wyświetl w zadanym oknie
-Name[pt]=Mostrar na Janela Indicada
-Name[pt_BR]=Mostrar em janela especificada
-Name[ro]=Afişează în fereastra specificată
-Name[ru]=Показывать в указанном окне
-Name[rw]=Kwerekana mu Idirishya Ryihariye
-Name[sk]=Zobraziť v zadanom okne
-Name[sl]=Prikaz v določenemu oknu
-Name[sr]=Прикажи у наведеном прозору
-Name[sr@Latn]=Prikaži u navedenom prozoru
-Name[sv]=Visa i angivet fönster
-Name[ta]=குறித்த சாளரத்தில் காட்டு
-Name[tg]=Дар тирезаи нишондода намоиш намоед
-Name[tr]=Belirtilen Pencerede Göster
-Name[uk]=Відобразити у вказаному вікні
-Name[vi]=Hiển thị trong Cửa sổ Đã định
-Name[zh_CN]=在指定的窗口中显示
-Name[zh_TW]=在指定的視窗中顯示
-NoDisplay=true
-
-[Desktop Action Root]
-Exec=kflux.kss -root
-Name=Display in Root Window
-Name[bg]=Стартиране в главния прозорец
-Name[br]=Diskwel er prenestr gwrizienn
-Name[bs]=Prikaži u korijenskom prozoru
-Name[ca]=Mostra a la finestra arrel
-Name[cs]=Zobrazit na pozadí plochy
-Name[cy]=Dangos mewn Ffenestr Wraidd
-Name[da]=Visning i root-vindue
-Name[de]=In Hintergrundfenster anzeigen
-Name[el]=Προβολή στο βασικό παράθυρο
-Name[eo]=Montri en radika fenestro
-Name[es]=Mostrar en la ventana raíz
-Name[et]=Juuraknas näitamine
-Name[eu]=Bistaratu erro lehioan
-Name[fa]=نمایش در پنجرۀ ریشه
-Name[fi]=Näytä juuri-ikkunassa
-Name[fr]=Affichage dans la fenêtre racine
-Name[fy]=Werjefte yn haadfinster
-Name[ga]=Taispeáin sa bhFréamhfhuinneog
-Name[gl]=Mostrar na fiestra raiz
-Name[he]=הצג בחלון השורש
-Name[hi]=रूट विंडो में प्रदर्शित करें
-Name[hu]=Megjelenítés a gyökérablakban
-Name[is]=Birta í rótarglugganum
-Name[it]=Mostra sullo sfondo
-Name[ja]=ルートウィンドウで表示
-Name[ka]=ჩვენება ძირითად ფანჯარაში
-Name[lt]=Rodyti root lange
-Name[mk]=Прикажи во коренскиот прозорец
-Name[ms]=Papar dalam Tetingkap Root
-Name[nb]=Vis i root-vindu
-Name[nds]=In Hööftfinster wiesen
-Name[ne]=मूल सञ्झ्यालमा प्रदर्शन
-Name[nl]=Weergeven in hoofdvenster
-Name[nn]=Vis i rotvindauget
-Name[pa]=Root ਝਰੋਖੇ ਵਿੱਚ ਵੇਖਾਓ
-Name[pl]=Wyświetl w oknie głównym
-Name[pt]=Mostrar na Janela de Fundo
-Name[pt_BR]=Mostrar na janela raiz
-Name[ro]=Afişează în fereastra rădăcină
-Name[ru]=Показывать в корневом окне
-Name[rw]=Kwerekana mu Idirishya Umuzi
-Name[sk]=Zobraziť v koreňovom okne
-Name[sl]=Prikaz v korenskem oknu
-Name[sr]=Прикажи у главном (root) прозору
-Name[sr@Latn]=Prikaži u glavnom (root) prozoru
-Name[sv]=Visa i rotfönstret
-Name[ta]=ஆரம்ப சாளரத்தில் காட்டு
-Name[tg]=Дар тирезаи решагӣ намоиш намоед
-Name[tr]=Kök Pencerede Göster
-Name[uk]=Відобразити в кореневому вікні
-Name[vi]=Hiển thị trong Cửa sổ Gốc
-Name[zh_CN]=在根窗口中显示
-Name[zh_TW]=在根視窗中顯示
-NoDisplay=true
diff --git a/kscreensaver/kdesavers/KFountain.desktop b/kscreensaver/kdesavers/KFountain.desktop
deleted file mode 100644
index 32291090..00000000
--- a/kscreensaver/kdesavers/KFountain.desktop
+++ /dev/null
@@ -1,249 +0,0 @@
-[Desktop Entry]
-Exec=kfountain.kss
-Icon=kscreensaver
-Type=Application
-Actions=Setup;InWindow;Root;
-X-TDE-Category=OpenGL Screen Savers
-X-TDE-Type=OpenGL
-Name=Particle Fountain (GL)
-Name[af]=Deeltjie Fontein (Gl)
-Name[bg]=Източник на частици
-Name[ca]=Font de partícules (GL)
-Name[cs]=Částicová fontána (GL)
-Name[cy]=Ffynnon Gronyn (GL)
-Name[da]=Partikelbrønd (GL)
-Name[de]=Partikelfontäne
-Name[el]=Σιντριβάνι σωματιδίων (GL)
-Name[eo]=Erofontano
-Name[es]=Fuente de partículas (GL)
-Name[et]=Osakeste Fontään (GL)
-Name[eu]=Partikula iturria (GL)
-Name[fa]=منشأ ذره (GL)
-Name[fi]=Hiukkaslähde (GL)
-Name[fr]=Fontaine de particules (GL)
-Name[fy]=Dieltsjesfontein (GL)
-Name[gl]=Fonte de partículas (GL)
-Name[he]=מזרקת חלקיקים (GL)
-Name[hi]=अणु निर्झर (जीएल)
-Name[hu]=Szökőkút (OpenGL)
-Name[is]=Eindagosbrunnur (GL)
-Name[it]=Fontana di particelle (GL)
-Name[ja]=粒子の泉 (GL)
-Name[ka]=შადრევანი (GL)
-Name[lt]=Dalelių fontanas (GL)
-Name[lv]=Kripatiņu Strūklaka (GL)
-Name[mk]=Фонтана од честички (GL)
-Name[mt]=Funtana ta' partiċelli (GL)
-Name[nb]=Partikkelfontene (GL)
-Name[nds]=Deeltjeblaser (GL)
-Name[ne]=पार्टिकल फाउन्टेन (GL)
-Name[nl]=Deeltjes-fontijn (GL)
-Name[nn]=Partikkelfontene (GL)
-Name[pl]=Fontanna cząstek (GL)
-Name[pt]=Fonte de Partículas (GL)
-Name[pt_BR]=Fonte de Partículas (GL)
-Name[ro]=Fîntînă de particule (GL)
-Name[ru]=Фонтан частиц (GL)
-Name[sk]=Fontána častíc (GL)
-Name[sl]=Vodnjak delcev (GL)
-Name[sr]=Фонтана честица (GL)
-Name[sr@Latn]=Fontana čestica (GL)
-Name[sv]=Partikelfontän (GL)
-Name[ta]=பொருள் ஊற்று (GL)
-Name[tg]=Қисми фаввораи (GL)
-Name[th]=ละอองน้ำ (GL)
-Name[tr]=Parçacık Şelalesi (GL)
-Name[uk]=Фонтан частинок (GL)
-Name[uz]=Zarrachalar favvorasi (GL)
-Name[uz@cyrillic]=Заррачалар фаввораси (GL)
-Name[ven]=Tshisima tsha Zwithu nyana (GL)
-Name[vi]=Đài phun Hạt (GL)
-Name[xh]=Umthombo Womhlaba (GL)
-Name[zh_CN]=粒子喷泉(GL)
-Name[zh_TW]=粒子噴泉 (GL)
-Name[zu]=Ingxenye encane yomfudlana (GL)
-
-[Desktop Action Setup]
-Exec=kfountain.kss -setup
-Name=Setup...
-Name[af]=Opstelling...
-Name[bg]=Настройки...
-Name[br]=Kefluniadur ...
-Name[bs]=Postavke...
-Name[ca]=Arranjament...
-Name[cs]=Nastavení...
-Name[cy]=Gosod ...
-Name[da]=Opsætning...
-Name[de]=Einrichtung ...
-Name[el]=Ρύθμιση...
-Name[eo]=Agordo...
-Name[es]=Configuración...
-Name[et]=Seadistamine...
-Name[eu]=Konfiguratu...
-Name[fa]=برپایی...
-Name[fi]=Asetukset...
-Name[fo]=Uppseting...
-Name[fr]=Configuration...
-Name[fy]=Opset...
-Name[ga]=Cumraigh...
-Name[gl]=Configuración...
-Name[he]=הגדרות...
-Name[hi]=सेटअप...
-Name[hu]=Beállítás...
-Name[is]=Stillingar...
-Name[it]=Impostazioni...
-Name[ja]=設定...
-Name[ka]=გამართვა...
-Name[lt]=Sąranka ...
-Name[lv]=Uzstādīšana...
-Name[mk]=Поставување...
-Name[ms]=Setkan...
-Name[mt]=Konfigurazzjoni...
-Name[nb]=Innstillinger …
-Name[nds]=Instellen...
-Name[ne]=सेटअप...
-Name[nl]=Instellingen...
-Name[nn]=Oppsett …
-Name[nso]=Beakanya...
-Name[pa]=ਸੈਟਅੱਪ...
-Name[pl]=Ustawienia...
-Name[pt]=Configurar...
-Name[pt_BR]=Configurar...
-Name[ro]=Setează...
-Name[ru]=Настройка...
-Name[rw]=Iboneza...
-Name[sk]=Nastavenie...
-Name[sl]=Nastavi ...
-Name[sr]=Подеси...
-Name[sr@Latn]=Podesi...
-Name[sv]=Inställningar...
-Name[ta]=அமைப்பு...
-Name[tg]=Барпосозӣ...
-Name[th]=ติดตั้ง...
-Name[tr]=Kurulum...
-Name[uk]=Встановити...
-Name[uz]=Oʻrnatish
-Name[uz@cyrillic]=Ўрнатиш
-Name[ven]=Vhekanya...
-Name[vi]=Thiết lập...
-Name[xh]=Iyacwangciswa...
-Name[zh_CN]=设置...
-Name[zh_TW]=設定...
-Name[zu]=Iyalungiselela...
-Icon=kscreensaver
-
-[Desktop Action InWindow]
-Exec=kfountain.kss -window-id %w
-Name=Display in Specified Window
-Name[bg]=Стартиране в избран прозорец
-Name[br]=Diskwel er prenestr spisaet
-Name[bs]=Prikaži u navedenom prozoru
-Name[ca]=Mostra a la finestra especificada
-Name[cs]=Zobrazit v určeném okně
-Name[cy]=Dangos mewn Ffenestr Benodol
-Name[da]=Visning i angivet vindue
-Name[de]=In bestimmten Fenster anzeigen
-Name[el]=Προβολή στο καθορισμένο παράθυρο
-Name[eo]=Montri en indikita fenestro
-Name[es]=Mostrar en la ventana especificada
-Name[et]=Määratud aknas näitamine
-Name[eu]=Bistaratu zehaztutako lehioan
-Name[fa]=نمایش در پنجرۀ مشخص‌شده
-Name[fi]=Näytä määrätyssä ikkunassa
-Name[fr]=Affichage dans la fenêtre spécifiée
-Name[fy]=Werjefte yn in definiearre finster
-Name[ga]=Taispeáin san Fhuinneog Sonraithe
-Name[gl]=Mostrar na fiestra indicada
-Name[he]=הצג בחלון המצוין
-Name[hi]=निर्दिष्ट विंडो में प्रदर्शित करें
-Name[hu]=Megjelenítés a megadott ablakban
-Name[is]=Birta í völdum glugga
-Name[it]=Mostra nella finestra specificata
-Name[ja]=特定のウィンドウで表示
-Name[ka]=ჩვენება მითითებულ ფანჯარაში
-Name[lt]=Rodyti nurodytame lange
-Name[mk]=Прикажи во наведениот прозорец
-Name[ms]=Papar dalam Tetingkap Yang Dinyatakan
-Name[nb]=Vis i angitt vindu
-Name[nds]=In utsöcht Finster wiesen
-Name[ne]=निर्दिष्ट सञ्झ्यालमा प्रदर्शन
-Name[nl]=Weergeven in een opgegeven venster
-Name[nn]=Vis i oppgjeve vindauge
-Name[pa]=ਦੱਸੇ ਝਰੋਖੇ ਵਿੱਚ ਵੇਖਾਓ
-Name[pl]=Wyświetl w zadanym oknie
-Name[pt]=Mostrar na Janela Indicada
-Name[pt_BR]=Mostrar em janela especificada
-Name[ro]=Afişează în fereastra specificată
-Name[ru]=Показывать в указанном окне
-Name[rw]=Kwerekana mu Idirishya Ryihariye
-Name[sk]=Zobraziť v zadanom okne
-Name[sl]=Prikaz v določenemu oknu
-Name[sr]=Прикажи у наведеном прозору
-Name[sr@Latn]=Prikaži u navedenom prozoru
-Name[sv]=Visa i angivet fönster
-Name[ta]=குறித்த சாளரத்தில் காட்டு
-Name[tg]=Дар тирезаи нишондода намоиш намоед
-Name[tr]=Belirtilen Pencerede Göster
-Name[uk]=Відобразити у вказаному вікні
-Name[vi]=Hiển thị trong Cửa sổ Đã định
-Name[zh_CN]=在指定的窗口中显示
-Name[zh_TW]=在指定的視窗中顯示
-NoDisplay=true
-
-[Desktop Action Root]
-Exec=kfountain.kss -root
-Name=Display in Root Window
-Name[bg]=Стартиране в главния прозорец
-Name[br]=Diskwel er prenestr gwrizienn
-Name[bs]=Prikaži u korijenskom prozoru
-Name[ca]=Mostra a la finestra arrel
-Name[cs]=Zobrazit na pozadí plochy
-Name[cy]=Dangos mewn Ffenestr Wraidd
-Name[da]=Visning i root-vindue
-Name[de]=In Hintergrundfenster anzeigen
-Name[el]=Προβολή στο βασικό παράθυρο
-Name[eo]=Montri en radika fenestro
-Name[es]=Mostrar en la ventana raíz
-Name[et]=Juuraknas näitamine
-Name[eu]=Bistaratu erro lehioan
-Name[fa]=نمایش در پنجرۀ ریشه
-Name[fi]=Näytä juuri-ikkunassa
-Name[fr]=Affichage dans la fenêtre racine
-Name[fy]=Werjefte yn haadfinster
-Name[ga]=Taispeáin sa bhFréamhfhuinneog
-Name[gl]=Mostrar na fiestra raiz
-Name[he]=הצג בחלון השורש
-Name[hi]=रूट विंडो में प्रदर्शित करें
-Name[hu]=Megjelenítés a gyökérablakban
-Name[is]=Birta í rótarglugganum
-Name[it]=Mostra sullo sfondo
-Name[ja]=ルートウィンドウで表示
-Name[ka]=ჩვენება ძირითად ფანჯარაში
-Name[lt]=Rodyti root lange
-Name[mk]=Прикажи во коренскиот прозорец
-Name[ms]=Papar dalam Tetingkap Root
-Name[nb]=Vis i root-vindu
-Name[nds]=In Hööftfinster wiesen
-Name[ne]=मूल सञ्झ्यालमा प्रदर्शन
-Name[nl]=Weergeven in hoofdvenster
-Name[nn]=Vis i rotvindauget
-Name[pa]=Root ਝਰੋਖੇ ਵਿੱਚ ਵੇਖਾਓ
-Name[pl]=Wyświetl w oknie głównym
-Name[pt]=Mostrar na Janela de Fundo
-Name[pt_BR]=Mostrar na janela raiz
-Name[ro]=Afişează în fereastra rădăcină
-Name[ru]=Показывать в корневом окне
-Name[rw]=Kwerekana mu Idirishya Umuzi
-Name[sk]=Zobraziť v koreňovom okne
-Name[sl]=Prikaz v korenskem oknu
-Name[sr]=Прикажи у главном (root) прозору
-Name[sr@Latn]=Prikaži u glavnom (root) prozoru
-Name[sv]=Visa i rotfönstret
-Name[ta]=ஆரம்ப சாளரத்தில் காட்டு
-Name[tg]=Дар тирезаи решагӣ намоиш намоед
-Name[tr]=Kök Pencerede Göster
-Name[uk]=Відобразити в кореневому вікні
-Name[vi]=Hiển thị trong Cửa sổ Gốc
-Name[zh_CN]=在根窗口中显示
-Name[zh_TW]=在根視窗中顯示
-NoDisplay=true
diff --git a/kscreensaver/kdesavers/KGravity.desktop b/kscreensaver/kdesavers/KGravity.desktop
deleted file mode 100644
index 6865b4fa..00000000
--- a/kscreensaver/kdesavers/KGravity.desktop
+++ /dev/null
@@ -1,253 +0,0 @@
-[Desktop Entry]
-Exec=kgravity.kss
-Icon=kscreensaver
-Type=Application
-Actions=Setup;InWindow;Root;
-X-TDE-Category=OpenGL Screen Savers
-X-TDE-Type=OpenGL
-Name=Gravity (GL)
-Name[af]=Gravitasie (Gl)
-Name[bg]=Гравитация
-Name[br]=Dedennerezh (GL)
-Name[ca]=Gravetat (GL)
-Name[cs]=Gravitace (GL)
-Name[cy]=Disgyrchiant (GL)
-Name[da]=Tyngdekraft (GL)
-Name[de]=Schwerkraft
-Name[el]=Βαρύτητα (GL)
-Name[eo]=Gravito
-Name[es]=Gravedad (GL)
-Name[et]=Raskusjõud (GL)
-Name[eu]=Grabitatea (GL)
-Name[fa]=جاذبه (GL)
-Name[fi]=Gravitaatio (GL)
-Name[fo]=Tyngd (GL)
-Name[fr]=Gravité (GL)
-Name[fy]=Swiertekrêft (GL)
-Name[gl]=Gravidade (GL)
-Name[he]=חלקיקים (GL)
-Name[hi]=गुरूत्व (जीएल)
-Name[hu]=Gravitáció (OpenGL)
-Name[is]=Þyngdarafl (GL)
-Name[it]=Gravità (GL)
-Name[ja]=重力 (GL)
-Name[ka]=მიზიდულობა (GL)
-Name[lt]=Trauka (GL)
-Name[lv]=Gravitācija (GL)
-Name[mk]=Гравитација (GL)
-Name[ms]=Graviti (GL)
-Name[mt]=Gravità (GL)
-Name[nb]=Gravitasjon (GL)
-Name[nds]=Swoorkraft (GL)
-Name[ne]=गुरुत्व (GL)
-Name[nl]=Zwaartekracht (GL)
-Name[nn]=Tyngdekraft (GL)
-Name[pl]=Grawitacja (GL)
-Name[pt]=Gravidade (GL)
-Name[pt_BR]=Gravidade (GL)
-Name[ro]=Gravitaţie (GL)
-Name[ru]=Гравитация (GL)
-Name[sk]=Gravitácia (GL)
-Name[sl]=Gravitacija (GL)
-Name[sr]=Гравитација (GL)
-Name[sr@Latn]=Gravitacija (GL)
-Name[sv]=Gravitation (GL)
-Name[ta]=புவியிர்ப்பு(GL)
-Name[tg]=Ҷозибаи (GL)
-Name[th]=แรงดึงดูด (GL)
-Name[tr]=Yerçekimi (GL)
-Name[uk]=Гравітація (GL)
-Name[uz]=Gravitatsiya (GL)
-Name[uz@cyrillic]=Гравитация (GL)
-Name[ven]=Fhasi Mavuni (GL)
-Name[vi]=Trọng trường (GL)
-Name[xh]=Umoya otsala izinto kumbindi womhlaba (GL)
-Name[zh_CN]=重力(GL)
-Name[zh_TW]=重力 (GL)
-Name[zu]=Amandla adonsela emhlabeni (GL)
-
-
-[Desktop Action Setup]
-Exec=kgravity.kss -setup
-Name=Setup...
-Name[af]=Opstelling...
-Name[bg]=Настройки...
-Name[br]=Kefluniadur ...
-Name[bs]=Postavke...
-Name[ca]=Arranjament...
-Name[cs]=Nastavení...
-Name[cy]=Gosod ...
-Name[da]=Opsætning...
-Name[de]=Einrichtung ...
-Name[el]=Ρύθμιση...
-Name[eo]=Agordo...
-Name[es]=Configuración...
-Name[et]=Seadistamine...
-Name[eu]=Konfiguratu...
-Name[fa]=برپایی...
-Name[fi]=Asetukset...
-Name[fo]=Uppseting...
-Name[fr]=Configuration...
-Name[fy]=Opset...
-Name[ga]=Cumraigh...
-Name[gl]=Configuración...
-Name[he]=הגדרות...
-Name[hi]=सेटअप...
-Name[hu]=Beállítás...
-Name[is]=Stillingar...
-Name[it]=Impostazioni...
-Name[ja]=設定...
-Name[ka]=გამართვა...
-Name[lt]=Sąranka ...
-Name[lv]=Uzstādīšana...
-Name[mk]=Поставување...
-Name[ms]=Setkan...
-Name[mt]=Konfigurazzjoni...
-Name[nb]=Innstillinger …
-Name[nds]=Instellen...
-Name[ne]=सेटअप...
-Name[nl]=Instellingen...
-Name[nn]=Oppsett …
-Name[nso]=Beakanya...
-Name[pa]=ਸੈਟਅੱਪ...
-Name[pl]=Ustawienia...
-Name[pt]=Configurar...
-Name[pt_BR]=Configurar...
-Name[ro]=Setează...
-Name[ru]=Настройка...
-Name[rw]=Iboneza...
-Name[sk]=Nastavenie...
-Name[sl]=Nastavi ...
-Name[sr]=Подеси...
-Name[sr@Latn]=Podesi...
-Name[sv]=Inställningar...
-Name[ta]=அமைப்பு...
-Name[tg]=Барпосозӣ...
-Name[th]=ติดตั้ง...
-Name[tr]=Kurulum...
-Name[uk]=Встановити...
-Name[uz]=Oʻrnatish
-Name[uz@cyrillic]=Ўрнатиш
-Name[ven]=Vhekanya...
-Name[vi]=Thiết lập...
-Name[xh]=Iyacwangciswa...
-Name[zh_CN]=设置...
-Name[zh_TW]=設定...
-Name[zu]=Iyalungiselela...
-Icon=kscreensaver
-
-[Desktop Action InWindow]
-Exec=kgravity.kss -window-id %w
-Name=Display in Specified Window
-Name[bg]=Стартиране в избран прозорец
-Name[br]=Diskwel er prenestr spisaet
-Name[bs]=Prikaži u navedenom prozoru
-Name[ca]=Mostra a la finestra especificada
-Name[cs]=Zobrazit v určeném okně
-Name[cy]=Dangos mewn Ffenestr Benodol
-Name[da]=Visning i angivet vindue
-Name[de]=In bestimmten Fenster anzeigen
-Name[el]=Προβολή στο καθορισμένο παράθυρο
-Name[eo]=Montri en indikita fenestro
-Name[es]=Mostrar en la ventana especificada
-Name[et]=Määratud aknas näitamine
-Name[eu]=Bistaratu zehaztutako lehioan
-Name[fa]=نمایش در پنجرۀ مشخص‌شده
-Name[fi]=Näytä määrätyssä ikkunassa
-Name[fr]=Affichage dans la fenêtre spécifiée
-Name[fy]=Werjefte yn in definiearre finster
-Name[ga]=Taispeáin san Fhuinneog Sonraithe
-Name[gl]=Mostrar na fiestra indicada
-Name[he]=הצג בחלון המצוין
-Name[hi]=निर्दिष्ट विंडो में प्रदर्शित करें
-Name[hu]=Megjelenítés a megadott ablakban
-Name[is]=Birta í völdum glugga
-Name[it]=Mostra nella finestra specificata
-Name[ja]=特定のウィンドウで表示
-Name[ka]=ჩვენება მითითებულ ფანჯარაში
-Name[lt]=Rodyti nurodytame lange
-Name[mk]=Прикажи во наведениот прозорец
-Name[ms]=Papar dalam Tetingkap Yang Dinyatakan
-Name[nb]=Vis i angitt vindu
-Name[nds]=In utsöcht Finster wiesen
-Name[ne]=निर्दिष्ट सञ्झ्यालमा प्रदर्शन
-Name[nl]=Weergeven in een opgegeven venster
-Name[nn]=Vis i oppgjeve vindauge
-Name[pa]=ਦੱਸੇ ਝਰੋਖੇ ਵਿੱਚ ਵੇਖਾਓ
-Name[pl]=Wyświetl w zadanym oknie
-Name[pt]=Mostrar na Janela Indicada
-Name[pt_BR]=Mostrar em janela especificada
-Name[ro]=Afişează în fereastra specificată
-Name[ru]=Показывать в указанном окне
-Name[rw]=Kwerekana mu Idirishya Ryihariye
-Name[sk]=Zobraziť v zadanom okne
-Name[sl]=Prikaz v določenemu oknu
-Name[sr]=Прикажи у наведеном прозору
-Name[sr@Latn]=Prikaži u navedenom prozoru
-Name[sv]=Visa i angivet fönster
-Name[ta]=குறித்த சாளரத்தில் காட்டு
-Name[tg]=Дар тирезаи нишондода намоиш намоед
-Name[tr]=Belirtilen Pencerede Göster
-Name[uk]=Відобразити у вказаному вікні
-Name[vi]=Hiển thị trong Cửa sổ Đã định
-Name[zh_CN]=在指定的窗口中显示
-Name[zh_TW]=在指定的視窗中顯示
-NoDisplay=true
-
-[Desktop Action Root]
-Exec=kgravity.kss -root
-Name=Display in Root Window
-Name[bg]=Стартиране в главния прозорец
-Name[br]=Diskwel er prenestr gwrizienn
-Name[bs]=Prikaži u korijenskom prozoru
-Name[ca]=Mostra a la finestra arrel
-Name[cs]=Zobrazit na pozadí plochy
-Name[cy]=Dangos mewn Ffenestr Wraidd
-Name[da]=Visning i root-vindue
-Name[de]=In Hintergrundfenster anzeigen
-Name[el]=Προβολή στο βασικό παράθυρο
-Name[eo]=Montri en radika fenestro
-Name[es]=Mostrar en la ventana raíz
-Name[et]=Juuraknas näitamine
-Name[eu]=Bistaratu erro lehioan
-Name[fa]=نمایش در پنجرۀ ریشه
-Name[fi]=Näytä juuri-ikkunassa
-Name[fr]=Affichage dans la fenêtre racine
-Name[fy]=Werjefte yn haadfinster
-Name[ga]=Taispeáin sa bhFréamhfhuinneog
-Name[gl]=Mostrar na fiestra raiz
-Name[he]=הצג בחלון השורש
-Name[hi]=रूट विंडो में प्रदर्शित करें
-Name[hu]=Megjelenítés a gyökérablakban
-Name[is]=Birta í rótarglugganum
-Name[it]=Mostra sullo sfondo
-Name[ja]=ルートウィンドウで表示
-Name[ka]=ჩვენება ძირითად ფანჯარაში
-Name[lt]=Rodyti root lange
-Name[mk]=Прикажи во коренскиот прозорец
-Name[ms]=Papar dalam Tetingkap Root
-Name[nb]=Vis i root-vindu
-Name[nds]=In Hööftfinster wiesen
-Name[ne]=मूल सञ्झ्यालमा प्रदर्शन
-Name[nl]=Weergeven in hoofdvenster
-Name[nn]=Vis i rotvindauget
-Name[pa]=Root ਝਰੋਖੇ ਵਿੱਚ ਵੇਖਾਓ
-Name[pl]=Wyświetl w oknie głównym
-Name[pt]=Mostrar na Janela de Fundo
-Name[pt_BR]=Mostrar na janela raiz
-Name[ro]=Afişează în fereastra rădăcină
-Name[ru]=Показывать в корневом окне
-Name[rw]=Kwerekana mu Idirishya Umuzi
-Name[sk]=Zobraziť v koreňovom okne
-Name[sl]=Prikaz v korenskem oknu
-Name[sr]=Прикажи у главном (root) прозору
-Name[sr@Latn]=Prikaži u glavnom (root) prozoru
-Name[sv]=Visa i rotfönstret
-Name[ta]=ஆரம்ப சாளரத்தில் காட்டு
-Name[tg]=Дар тирезаи решагӣ намоиш намоед
-Name[tr]=Kök Pencerede Göster
-Name[uk]=Відобразити в кореневому вікні
-Name[vi]=Hiển thị trong Cửa sổ Gốc
-Name[zh_CN]=在根窗口中显示
-Name[zh_TW]=在根視窗中顯示
-NoDisplay=true
diff --git a/kscreensaver/kdesavers/KLines-saver.desktop b/kscreensaver/kdesavers/KLines-saver.desktop
deleted file mode 100644
index d0d945e1..00000000
--- a/kscreensaver/kdesavers/KLines-saver.desktop
+++ /dev/null
@@ -1,255 +0,0 @@
-[Desktop Entry]
-Exec=klines.kss
-Icon=kscreensaver
-Type=Application
-Actions=Setup;InWindow;Root;
-X-TDE-Category=Flying Things
-Name=Lines
-Name[af]=Lyne
-Name[bg]=Линии
-Name[br]=Linennoù
-Name[ca]=Línies
-Name[cs]=Linie
-Name[cy]=Llinellau
-Name[da]=Linjer
-Name[de]=Linien
-Name[el]=Γραμμές
-Name[eo]=Linioj
-Name[es]=Líneas
-Name[et]=Jooned
-Name[eu]=Lerroak
-Name[fa]=خطوط
-Name[fi]=Viivat
-Name[fo]=Reglur
-Name[fr]=Lignes
-Name[fy]=Linen
-Name[ga]=Línte
-Name[gl]=Liñas
-Name[he]=קווים
-Name[hi]= लकीरें
-Name[hu]=Vonalak
-Name[is]=Línur
-Name[it]=Linee
-Name[ja]=線
-Name[ka]=წრფეები
-Name[lt]=Linijos
-Name[lv]=Līnijas
-Name[mk]=Прави
-Name[ms]=Baris
-Name[mt]=Linji
-Name[nb]=Linjer
-Name[nds]=Lienen
-Name[ne]=पङ्क्ति
-Name[nl]=Lijnen
-Name[nn]=Linjer
-Name[nso]=Methalo
-Name[pa]=ਰੇਖਾਵਾਂ
-Name[pl]=Linie
-Name[pt]=Linhas
-Name[pt_BR]=Linhas
-Name[ro]=Linii
-Name[ru]=Линии
-Name[sk]=Čiary
-Name[sl]=Črte
-Name[sr]=Линије
-Name[sr@Latn]=Linije
-Name[sv]=Linjer
-Name[ta]=கம்பிகள்
-Name[tg]=Рахҳо
-Name[th]=เส้น
-Name[tr]=Çizgiler
-Name[uk]=Лінії
-Name[uz]=Chiziqlar
-Name[uz@cyrillic]=Чизиқлар
-Name[ven]=Mitalo
-Name[vi]=Dòng kẻ
-Name[xh]=Iilayini
-Name[zh_CN]=线条
-Name[zh_TW]=線條
-Name[zu]=Olayini
-
-[Desktop Action Setup]
-Exec=klines.kss -setup
-Name=Setup...
-Name[af]=Opstelling...
-Name[bg]=Настройки...
-Name[br]=Kefluniadur ...
-Name[bs]=Postavke...
-Name[ca]=Arranjament...
-Name[cs]=Nastavení...
-Name[cy]=Gosod ...
-Name[da]=Opsætning...
-Name[de]=Einrichtung ...
-Name[el]=Ρύθμιση...
-Name[eo]=Agordo...
-Name[es]=Configuración...
-Name[et]=Seadistamine...
-Name[eu]=Konfiguratu...
-Name[fa]=برپایی...
-Name[fi]=Asetukset...
-Name[fo]=Uppseting...
-Name[fr]=Configuration...
-Name[fy]=Opset...
-Name[ga]=Cumraigh...
-Name[gl]=Configuración...
-Name[he]=הגדרות...
-Name[hi]=सेटअप...
-Name[hu]=Beállítás...
-Name[is]=Stillingar...
-Name[it]=Impostazioni...
-Name[ja]=設定...
-Name[ka]=გამართვა...
-Name[lt]=Sąranka ...
-Name[lv]=Uzstādīšana...
-Name[mk]=Поставување...
-Name[ms]=Setkan...
-Name[mt]=Konfigurazzjoni...
-Name[nb]=Innstillinger …
-Name[nds]=Instellen...
-Name[ne]=सेटअप...
-Name[nl]=Instellingen...
-Name[nn]=Oppsett …
-Name[nso]=Beakanya...
-Name[pa]=ਸੈਟਅੱਪ...
-Name[pl]=Ustawienia...
-Name[pt]=Configurar...
-Name[pt_BR]=Configurar...
-Name[ro]=Setează...
-Name[ru]=Настройка...
-Name[rw]=Iboneza...
-Name[sk]=Nastavenie...
-Name[sl]=Nastavi ...
-Name[sr]=Подеси...
-Name[sr@Latn]=Podesi...
-Name[sv]=Inställningar...
-Name[ta]=அமைப்பு...
-Name[tg]=Барпосозӣ...
-Name[th]=ติดตั้ง...
-Name[tr]=Kurulum...
-Name[uk]=Встановити...
-Name[uz]=Oʻrnatish
-Name[uz@cyrillic]=Ўрнатиш
-Name[ven]=Vhekanya...
-Name[vi]=Thiết lập...
-Name[xh]=Iyacwangciswa...
-Name[zh_CN]=设置...
-Name[zh_TW]=設定...
-Name[zu]=Iyalungiselela...
-Icon=kscreensaver
-
-[Desktop Action InWindow]
-Exec=klines.kss -window-id %w
-Name=Display in Specified Window
-Name[bg]=Стартиране в избран прозорец
-Name[br]=Diskwel er prenestr spisaet
-Name[bs]=Prikaži u navedenom prozoru
-Name[ca]=Mostra a la finestra especificada
-Name[cs]=Zobrazit v určeném okně
-Name[cy]=Dangos mewn Ffenestr Benodol
-Name[da]=Visning i angivet vindue
-Name[de]=In bestimmten Fenster anzeigen
-Name[el]=Προβολή στο καθορισμένο παράθυρο
-Name[eo]=Montri en indikita fenestro
-Name[es]=Mostrar en la ventana especificada
-Name[et]=Määratud aknas näitamine
-Name[eu]=Bistaratu zehaztutako lehioan
-Name[fa]=نمایش در پنجرۀ مشخص‌شده
-Name[fi]=Näytä määrätyssä ikkunassa
-Name[fr]=Affichage dans la fenêtre spécifiée
-Name[fy]=Werjefte yn in definiearre finster
-Name[ga]=Taispeáin san Fhuinneog Sonraithe
-Name[gl]=Mostrar na fiestra indicada
-Name[he]=הצג בחלון המצוין
-Name[hi]=निर्दिष्ट विंडो में प्रदर्शित करें
-Name[hu]=Megjelenítés a megadott ablakban
-Name[is]=Birta í völdum glugga
-Name[it]=Mostra nella finestra specificata
-Name[ja]=特定のウィンドウで表示
-Name[ka]=ჩვენება მითითებულ ფანჯარაში
-Name[lt]=Rodyti nurodytame lange
-Name[mk]=Прикажи во наведениот прозорец
-Name[ms]=Papar dalam Tetingkap Yang Dinyatakan
-Name[nb]=Vis i angitt vindu
-Name[nds]=In utsöcht Finster wiesen
-Name[ne]=निर्दिष्ट सञ्झ्यालमा प्रदर्शन
-Name[nl]=Weergeven in een opgegeven venster
-Name[nn]=Vis i oppgjeve vindauge
-Name[pa]=ਦੱਸੇ ਝਰੋਖੇ ਵਿੱਚ ਵੇਖਾਓ
-Name[pl]=Wyświetl w zadanym oknie
-Name[pt]=Mostrar na Janela Indicada
-Name[pt_BR]=Mostrar em janela especificada
-Name[ro]=Afişează în fereastra specificată
-Name[ru]=Показывать в указанном окне
-Name[rw]=Kwerekana mu Idirishya Ryihariye
-Name[sk]=Zobraziť v zadanom okne
-Name[sl]=Prikaz v določenemu oknu
-Name[sr]=Прикажи у наведеном прозору
-Name[sr@Latn]=Prikaži u navedenom prozoru
-Name[sv]=Visa i angivet fönster
-Name[ta]=குறித்த சாளரத்தில் காட்டு
-Name[tg]=Дар тирезаи нишондода намоиш намоед
-Name[tr]=Belirtilen Pencerede Göster
-Name[uk]=Відобразити у вказаному вікні
-Name[vi]=Hiển thị trong Cửa sổ Đã định
-Name[zh_CN]=在指定的窗口中显示
-Name[zh_TW]=在指定的視窗中顯示
-NoDisplay=true
-
-[Desktop Action Root]
-Exec=klines.kss -root
-Name=Display in Root Window
-Name[bg]=Стартиране в главния прозорец
-Name[br]=Diskwel er prenestr gwrizienn
-Name[bs]=Prikaži u korijenskom prozoru
-Name[ca]=Mostra a la finestra arrel
-Name[cs]=Zobrazit na pozadí plochy
-Name[cy]=Dangos mewn Ffenestr Wraidd
-Name[da]=Visning i root-vindue
-Name[de]=In Hintergrundfenster anzeigen
-Name[el]=Προβολή στο βασικό παράθυρο
-Name[eo]=Montri en radika fenestro
-Name[es]=Mostrar en la ventana raíz
-Name[et]=Juuraknas näitamine
-Name[eu]=Bistaratu erro lehioan
-Name[fa]=نمایش در پنجرۀ ریشه
-Name[fi]=Näytä juuri-ikkunassa
-Name[fr]=Affichage dans la fenêtre racine
-Name[fy]=Werjefte yn haadfinster
-Name[ga]=Taispeáin sa bhFréamhfhuinneog
-Name[gl]=Mostrar na fiestra raiz
-Name[he]=הצג בחלון השורש
-Name[hi]=रूट विंडो में प्रदर्शित करें
-Name[hu]=Megjelenítés a gyökérablakban
-Name[is]=Birta í rótarglugganum
-Name[it]=Mostra sullo sfondo
-Name[ja]=ルートウィンドウで表示
-Name[ka]=ჩვენება ძირითად ფანჯარაში
-Name[lt]=Rodyti root lange
-Name[mk]=Прикажи во коренскиот прозорец
-Name[ms]=Papar dalam Tetingkap Root
-Name[nb]=Vis i root-vindu
-Name[nds]=In Hööftfinster wiesen
-Name[ne]=मूल सञ्झ्यालमा प्रदर्शन
-Name[nl]=Weergeven in hoofdvenster
-Name[nn]=Vis i rotvindauget
-Name[pa]=Root ਝਰੋਖੇ ਵਿੱਚ ਵੇਖਾਓ
-Name[pl]=Wyświetl w oknie głównym
-Name[pt]=Mostrar na Janela de Fundo
-Name[pt_BR]=Mostrar na janela raiz
-Name[ro]=Afişează în fereastra rădăcină
-Name[ru]=Показывать в корневом окне
-Name[rw]=Kwerekana mu Idirishya Umuzi
-Name[sk]=Zobraziť v koreňovom okne
-Name[sl]=Prikaz v korenskem oknu
-Name[sr]=Прикажи у главном (root) прозору
-Name[sr@Latn]=Prikaži u glavnom (root) prozoru
-Name[sv]=Visa i rotfönstret
-Name[ta]=ஆரம்ப சாளரத்தில் காட்டு
-Name[tg]=Дар тирезаи решагӣ намоиш намоед
-Name[tr]=Kök Pencerede Göster
-Name[uk]=Відобразити в кореневому вікні
-Name[vi]=Hiển thị trong Cửa sổ Gốc
-Name[zh_CN]=在根窗口中显示
-Name[zh_TW]=在根視窗中顯示
-NoDisplay=true
-X-DCOP-ServiceType=Multi
diff --git a/kscreensaver/kdesavers/KLorenz.desktop b/kscreensaver/kdesavers/KLorenz.desktop
deleted file mode 100644
index 2e506edc..00000000
--- a/kscreensaver/kdesavers/KLorenz.desktop
+++ /dev/null
@@ -1,244 +0,0 @@
-[Desktop Entry]
-Exec=klorenz.kss
-Icon=kscreensaver
-Type=Application
-Actions=Setup;InWindow;Root;
-X-TDE-Category=Gadgets & Simulations
-Name=Lorenz Attractor
-Name[af]=Lorenz Aantrekker
-Name[bg]=Лоренцо
-Name[br]=Dedenner Lorenz
-Name[cs]=Lorenzův atraktor
-Name[cy]=Attynydd Lorenz
-Name[da]=Lorenz-attraktor
-Name[de]=Lorenz-Attraktor
-Name[el]=Ελκυστής Lorenz
-Name[eo]=Lorenza atraktoro
-Name[es]=Atractor de Lorenz
-Name[et]=Lorenzi atraktor
-Name[eu]=Lorenz erakarlea
-Name[fa]=ربایندۀ Lorenz
-Name[fi]=Lorentz attraktori
-Name[fo]=Lorenz attractor
-Name[fr]=Attracteur de Lorentz
-Name[fy]=Lorenz Oanlûker
-Name[gl]=Atractor Caótico de Lorenz
-Name[he]=מושך לורנץ
-Name[hi]=आठ एकम आठ
-Name[hu]=Lorenz-féle képernyővédő
-Name[is]=Lorenz aðdráttur
-Name[it]=Attrattore di Lorenz
-Name[ja]=ローレンツアトラクタ
-Name[ka]=ლორენცის მიზიდულობა
-Name[lv]=Lorensa Attraktors
-Name[mk]=Лоренцов атрактор
-Name[mt]=Attrattur Lorenz
-Name[nb]=Lorenz-attraktor
-Name[nds]=Lorenz-Antrecker
-Name[ne]=लरेन्ज आकर्षक
-Name[nn]=Lorenz-tiltrekking
-Name[pl]=Atraktor Lorenza
-Name[pt]=Força de Lorenz
-Name[pt_BR]=Atração Lorenz
-Name[ro]=Atracţie Lorenz
-Name[ru]=Странный аттрактор Лоренца
-Name[sl]=Lorenzov atraktor
-Name[sr]=Лоренцов атрактор
-Name[sr@Latn]=Lorencov atraktor
-Name[sv]=Lorenz attraktor
-Name[ta]=லோரன்ஸ் கவர்பவர்
-Name[tg]=Аттракти аҷоиби Лоренс
-Name[th]=สิ่งที่น่าดึงดูดของลอเรนซ์
-Name[tr]=Cazibe
-Name[uk]=Притягнення Лоренца
-Name[ven]=Tshikokodzi tsha Lorenz
-Name[vi]=Điểm hút Lorenz
-Name[xh]=Umtsali we Lorenz
-Name[zh_CN]=洛仑兹吸引子
-Name[zh_TW]=Lorenz 吸引者
-Name[zu]=Umhehi we-Lorenz
-
-[Desktop Action Setup]
-Exec=klorenz.kss -setup
-Name=Setup...
-Name[af]=Opstelling...
-Name[bg]=Настройки...
-Name[br]=Kefluniadur ...
-Name[bs]=Postavke...
-Name[ca]=Arranjament...
-Name[cs]=Nastavení...
-Name[cy]=Gosod ...
-Name[da]=Opsætning...
-Name[de]=Einrichtung ...
-Name[el]=Ρύθμιση...
-Name[eo]=Agordo...
-Name[es]=Configuración...
-Name[et]=Seadistamine...
-Name[eu]=Konfiguratu...
-Name[fa]=برپایی...
-Name[fi]=Asetukset...
-Name[fo]=Uppseting...
-Name[fr]=Configuration...
-Name[fy]=Opset...
-Name[ga]=Cumraigh...
-Name[gl]=Configuración...
-Name[he]=הגדרות...
-Name[hi]=सेटअप...
-Name[hu]=Beállítás...
-Name[is]=Stillingar...
-Name[it]=Impostazioni...
-Name[ja]=設定...
-Name[ka]=გამართვა...
-Name[lt]=Sąranka ...
-Name[lv]=Uzstādīšana...
-Name[mk]=Поставување...
-Name[ms]=Setkan...
-Name[mt]=Konfigurazzjoni...
-Name[nb]=Innstillinger …
-Name[nds]=Instellen...
-Name[ne]=सेटअप...
-Name[nl]=Instellingen...
-Name[nn]=Oppsett …
-Name[nso]=Beakanya...
-Name[pa]=ਸੈਟਅੱਪ...
-Name[pl]=Ustawienia...
-Name[pt]=Configurar...
-Name[pt_BR]=Configurar...
-Name[ro]=Setează...
-Name[ru]=Настройка...
-Name[rw]=Iboneza...
-Name[sk]=Nastavenie...
-Name[sl]=Nastavi ...
-Name[sr]=Подеси...
-Name[sr@Latn]=Podesi...
-Name[sv]=Inställningar...
-Name[ta]=அமைப்பு...
-Name[tg]=Барпосозӣ...
-Name[th]=ติดตั้ง...
-Name[tr]=Kurulum...
-Name[uk]=Встановити...
-Name[uz]=Oʻrnatish
-Name[uz@cyrillic]=Ўрнатиш
-Name[ven]=Vhekanya...
-Name[vi]=Thiết lập...
-Name[xh]=Iyacwangciswa...
-Name[zh_CN]=设置...
-Name[zh_TW]=設定...
-Name[zu]=Iyalungiselela...
-Icon=kscreensaver
-
-[Desktop Action InWindow]
-Exec=klorenz.kss -window-id %w
-Name=Display in Specified Window
-Name[bg]=Стартиране в избран прозорец
-Name[br]=Diskwel er prenestr spisaet
-Name[bs]=Prikaži u navedenom prozoru
-Name[ca]=Mostra a la finestra especificada
-Name[cs]=Zobrazit v určeném okně
-Name[cy]=Dangos mewn Ffenestr Benodol
-Name[da]=Visning i angivet vindue
-Name[de]=In bestimmten Fenster anzeigen
-Name[el]=Προβολή στο καθορισμένο παράθυρο
-Name[eo]=Montri en indikita fenestro
-Name[es]=Mostrar en la ventana especificada
-Name[et]=Määratud aknas näitamine
-Name[eu]=Bistaratu zehaztutako lehioan
-Name[fa]=نمایش در پنجرۀ مشخص‌شده
-Name[fi]=Näytä määrätyssä ikkunassa
-Name[fr]=Affichage dans la fenêtre spécifiée
-Name[fy]=Werjefte yn in definiearre finster
-Name[ga]=Taispeáin san Fhuinneog Sonraithe
-Name[gl]=Mostrar na fiestra indicada
-Name[he]=הצג בחלון המצוין
-Name[hi]=निर्दिष्ट विंडो में प्रदर्शित करें
-Name[hu]=Megjelenítés a megadott ablakban
-Name[is]=Birta í völdum glugga
-Name[it]=Mostra nella finestra specificata
-Name[ja]=特定のウィンドウで表示
-Name[ka]=ჩვენება მითითებულ ფანჯარაში
-Name[lt]=Rodyti nurodytame lange
-Name[mk]=Прикажи во наведениот прозорец
-Name[ms]=Papar dalam Tetingkap Yang Dinyatakan
-Name[nb]=Vis i angitt vindu
-Name[nds]=In utsöcht Finster wiesen
-Name[ne]=निर्दिष्ट सञ्झ्यालमा प्रदर्शन
-Name[nl]=Weergeven in een opgegeven venster
-Name[nn]=Vis i oppgjeve vindauge
-Name[pa]=ਦੱਸੇ ਝਰੋਖੇ ਵਿੱਚ ਵੇਖਾਓ
-Name[pl]=Wyświetl w zadanym oknie
-Name[pt]=Mostrar na Janela Indicada
-Name[pt_BR]=Mostrar em janela especificada
-Name[ro]=Afişează în fereastra specificată
-Name[ru]=Показывать в указанном окне
-Name[rw]=Kwerekana mu Idirishya Ryihariye
-Name[sk]=Zobraziť v zadanom okne
-Name[sl]=Prikaz v določenemu oknu
-Name[sr]=Прикажи у наведеном прозору
-Name[sr@Latn]=Prikaži u navedenom prozoru
-Name[sv]=Visa i angivet fönster
-Name[ta]=குறித்த சாளரத்தில் காட்டு
-Name[tg]=Дар тирезаи нишондода намоиш намоед
-Name[tr]=Belirtilen Pencerede Göster
-Name[uk]=Відобразити у вказаному вікні
-Name[vi]=Hiển thị trong Cửa sổ Đã định
-Name[zh_CN]=在指定的窗口中显示
-Name[zh_TW]=在指定的視窗中顯示
-NoDisplay=true
-
-[Desktop Action Root]
-Exec=klorenz.kss -root
-Name=Display in Root Window
-Name[bg]=Стартиране в главния прозорец
-Name[br]=Diskwel er prenestr gwrizienn
-Name[bs]=Prikaži u korijenskom prozoru
-Name[ca]=Mostra a la finestra arrel
-Name[cs]=Zobrazit na pozadí plochy
-Name[cy]=Dangos mewn Ffenestr Wraidd
-Name[da]=Visning i root-vindue
-Name[de]=In Hintergrundfenster anzeigen
-Name[el]=Προβολή στο βασικό παράθυρο
-Name[eo]=Montri en radika fenestro
-Name[es]=Mostrar en la ventana raíz
-Name[et]=Juuraknas näitamine
-Name[eu]=Bistaratu erro lehioan
-Name[fa]=نمایش در پنجرۀ ریشه
-Name[fi]=Näytä juuri-ikkunassa
-Name[fr]=Affichage dans la fenêtre racine
-Name[fy]=Werjefte yn haadfinster
-Name[ga]=Taispeáin sa bhFréamhfhuinneog
-Name[gl]=Mostrar na fiestra raiz
-Name[he]=הצג בחלון השורש
-Name[hi]=रूट विंडो में प्रदर्शित करें
-Name[hu]=Megjelenítés a gyökérablakban
-Name[is]=Birta í rótarglugganum
-Name[it]=Mostra sullo sfondo
-Name[ja]=ルートウィンドウで表示
-Name[ka]=ჩვენება ძირითად ფანჯარაში
-Name[lt]=Rodyti root lange
-Name[mk]=Прикажи во коренскиот прозорец
-Name[ms]=Papar dalam Tetingkap Root
-Name[nb]=Vis i root-vindu
-Name[nds]=In Hööftfinster wiesen
-Name[ne]=मूल सञ्झ्यालमा प्रदर्शन
-Name[nl]=Weergeven in hoofdvenster
-Name[nn]=Vis i rotvindauget
-Name[pa]=Root ਝਰੋਖੇ ਵਿੱਚ ਵੇਖਾਓ
-Name[pl]=Wyświetl w oknie głównym
-Name[pt]=Mostrar na Janela de Fundo
-Name[pt_BR]=Mostrar na janela raiz
-Name[ro]=Afişează în fereastra rădăcină
-Name[ru]=Показывать в корневом окне
-Name[rw]=Kwerekana mu Idirishya Umuzi
-Name[sk]=Zobraziť v koreňovom okne
-Name[sl]=Prikaz v korenskem oknu
-Name[sr]=Прикажи у главном (root) прозору
-Name[sr@Latn]=Prikaži u glavnom (root) prozoru
-Name[sv]=Visa i rotfönstret
-Name[ta]=ஆரம்ப சாளரத்தில் காட்டு
-Name[tg]=Дар тирезаи решагӣ намоиш намоед
-Name[tr]=Kök Pencerede Göster
-Name[uk]=Відобразити в кореневому вікні
-Name[vi]=Hiển thị trong Cửa sổ Gốc
-Name[zh_CN]=在根窗口中显示
-Name[zh_TW]=在根視窗中顯示
-NoDisplay=true
diff --git a/kscreensaver/kdesavers/KPendulum.desktop b/kscreensaver/kdesavers/KPendulum.desktop
deleted file mode 100644
index ac3107e8..00000000
--- a/kscreensaver/kdesavers/KPendulum.desktop
+++ /dev/null
@@ -1,221 +0,0 @@
-[Desktop Entry]
-Exec=kpendulum.kss
-Icon=kscreensaver
-Type=Application
-Actions=Setup;InWindow;Root;
-X-TDE-Category=OpenGL Screen Savers
-X-TDE-Type=OpenGL
-Name=KPendulum (GL)
-Name[bg]=Махало
-Name[cs]=Kyvadlo
-Name[de]=KPendulum
-Name[el]=Εκκρεμές (GL)
-Name[fr]=Pendule (GL)
-Name[hi]=के-पेंडुलम (जीएल)
-Name[hu]=KPendulum (OpenGL)
-Name[is]=Pendúlar (GL)
-Name[it]=KPendolo (GL)
-Name[ja]=振り子 (GL)
-Name[ka]=ქანქარა (GL)
-Name[mk]=КНишало (GL)
-Name[nb]=KPendel (GL)
-Name[nds]=Pennel (GL)
-Name[ne]=केडीई पेन्डुलम (GL)
-Name[nn]=KPendel (GL)
-Name[pt]=KPêndulo (GL)
-Name[ro]=Pendul (GL)
-Name[ru]=Маятник (GL)
-Name[sl]=KNihalo (GL)
-Name[sr]=К-клатно (GL)
-Name[sr@Latn]=K-klatno (GL)
-Name[sv]=Pendel (GL)
-Name[ta]=KPendulum(GL)
-Name[tg]=Раққосак (GL)
-Name[tr]=Sarkaç (GL)
-Name[uk]=Маятник (GL)
-Name[vi]=Con lắc (GL)
-
-[Desktop Action Setup]
-Exec=kpendulum.kss -setup
-Name=Setup...
-Name[af]=Opstelling...
-Name[bg]=Настройки...
-Name[br]=Kefluniadur ...
-Name[bs]=Postavke...
-Name[ca]=Arranjament...
-Name[cs]=Nastavení...
-Name[cy]=Gosod ...
-Name[da]=Opsætning...
-Name[de]=Einrichtung ...
-Name[el]=Ρύθμιση...
-Name[eo]=Agordo...
-Name[es]=Configuración...
-Name[et]=Seadistamine...
-Name[eu]=Konfiguratu...
-Name[fa]=برپایی...
-Name[fi]=Asetukset...
-Name[fo]=Uppseting...
-Name[fr]=Configuration...
-Name[fy]=Opset...
-Name[ga]=Cumraigh...
-Name[gl]=Configuración...
-Name[he]=הגדרות...
-Name[hi]=सेटअप...
-Name[hu]=Beállítás...
-Name[is]=Stillingar...
-Name[it]=Impostazioni...
-Name[ja]=設定...
-Name[ka]=გამართვა...
-Name[lt]=Sąranka ...
-Name[lv]=Uzstādīšana...
-Name[mk]=Поставување...
-Name[ms]=Setkan...
-Name[mt]=Konfigurazzjoni...
-Name[nb]=Innstillinger …
-Name[nds]=Instellen...
-Name[ne]=सेटअप...
-Name[nl]=Instellingen...
-Name[nn]=Oppsett …
-Name[nso]=Beakanya...
-Name[pa]=ਸੈਟਅੱਪ...
-Name[pl]=Ustawienia...
-Name[pt]=Configurar...
-Name[pt_BR]=Configurar...
-Name[ro]=Setează...
-Name[ru]=Настройка...
-Name[rw]=Iboneza...
-Name[sk]=Nastavenie...
-Name[sl]=Nastavi ...
-Name[sr]=Подеси...
-Name[sr@Latn]=Podesi...
-Name[sv]=Inställningar...
-Name[ta]=அமைப்பு...
-Name[tg]=Барпосозӣ...
-Name[th]=ติดตั้ง...
-Name[tr]=Kurulum...
-Name[uk]=Встановити...
-Name[uz]=Oʻrnatish
-Name[uz@cyrillic]=Ўрнатиш
-Name[ven]=Vhekanya...
-Name[vi]=Thiết lập...
-Name[xh]=Iyacwangciswa...
-Name[zh_CN]=设置...
-Name[zh_TW]=設定...
-Name[zu]=Iyalungiselela...
-Icon=kscreensaver
-
-[Desktop Action InWindow]
-Exec=kpendulum.kss -window-id %w
-Name=Display in Specified Window
-Name[bg]=Стартиране в избран прозорец
-Name[br]=Diskwel er prenestr spisaet
-Name[bs]=Prikaži u navedenom prozoru
-Name[ca]=Mostra a la finestra especificada
-Name[cs]=Zobrazit v určeném okně
-Name[cy]=Dangos mewn Ffenestr Benodol
-Name[da]=Visning i angivet vindue
-Name[de]=In bestimmten Fenster anzeigen
-Name[el]=Προβολή στο καθορισμένο παράθυρο
-Name[eo]=Montri en indikita fenestro
-Name[es]=Mostrar en la ventana especificada
-Name[et]=Määratud aknas näitamine
-Name[eu]=Bistaratu zehaztutako lehioan
-Name[fa]=نمایش در پنجرۀ مشخص‌شده
-Name[fi]=Näytä määrätyssä ikkunassa
-Name[fr]=Affichage dans la fenêtre spécifiée
-Name[fy]=Werjefte yn in definiearre finster
-Name[ga]=Taispeáin san Fhuinneog Sonraithe
-Name[gl]=Mostrar na fiestra indicada
-Name[he]=הצג בחלון המצוין
-Name[hi]=निर्दिष्ट विंडो में प्रदर्शित करें
-Name[hu]=Megjelenítés a megadott ablakban
-Name[is]=Birta í völdum glugga
-Name[it]=Mostra nella finestra specificata
-Name[ja]=特定のウィンドウで表示
-Name[ka]=ჩვენება მითითებულ ფანჯარაში
-Name[lt]=Rodyti nurodytame lange
-Name[mk]=Прикажи во наведениот прозорец
-Name[ms]=Papar dalam Tetingkap Yang Dinyatakan
-Name[nb]=Vis i angitt vindu
-Name[nds]=In utsöcht Finster wiesen
-Name[ne]=निर्दिष्ट सञ्झ्यालमा प्रदर्शन
-Name[nl]=Weergeven in een opgegeven venster
-Name[nn]=Vis i oppgjeve vindauge
-Name[pa]=ਦੱਸੇ ਝਰੋਖੇ ਵਿੱਚ ਵੇਖਾਓ
-Name[pl]=Wyświetl w zadanym oknie
-Name[pt]=Mostrar na Janela Indicada
-Name[pt_BR]=Mostrar em janela especificada
-Name[ro]=Afişează în fereastra specificată
-Name[ru]=Показывать в указанном окне
-Name[rw]=Kwerekana mu Idirishya Ryihariye
-Name[sk]=Zobraziť v zadanom okne
-Name[sl]=Prikaz v določenemu oknu
-Name[sr]=Прикажи у наведеном прозору
-Name[sr@Latn]=Prikaži u navedenom prozoru
-Name[sv]=Visa i angivet fönster
-Name[ta]=குறித்த சாளரத்தில் காட்டு
-Name[tg]=Дар тирезаи нишондода намоиш намоед
-Name[tr]=Belirtilen Pencerede Göster
-Name[uk]=Відобразити у вказаному вікні
-Name[vi]=Hiển thị trong Cửa sổ Đã định
-Name[zh_CN]=在指定的窗口中显示
-Name[zh_TW]=在指定的視窗中顯示
-NoDisplay=true
-
-[Desktop Action Root]
-Exec=kpendulum.kss -root
-Name=Display in Root Window
-Name[bg]=Стартиране в главния прозорец
-Name[br]=Diskwel er prenestr gwrizienn
-Name[bs]=Prikaži u korijenskom prozoru
-Name[ca]=Mostra a la finestra arrel
-Name[cs]=Zobrazit na pozadí plochy
-Name[cy]=Dangos mewn Ffenestr Wraidd
-Name[da]=Visning i root-vindue
-Name[de]=In Hintergrundfenster anzeigen
-Name[el]=Προβολή στο βασικό παράθυρο
-Name[eo]=Montri en radika fenestro
-Name[es]=Mostrar en la ventana raíz
-Name[et]=Juuraknas näitamine
-Name[eu]=Bistaratu erro lehioan
-Name[fa]=نمایش در پنجرۀ ریشه
-Name[fi]=Näytä juuri-ikkunassa
-Name[fr]=Affichage dans la fenêtre racine
-Name[fy]=Werjefte yn haadfinster
-Name[ga]=Taispeáin sa bhFréamhfhuinneog
-Name[gl]=Mostrar na fiestra raiz
-Name[he]=הצג בחלון השורש
-Name[hi]=रूट विंडो में प्रदर्शित करें
-Name[hu]=Megjelenítés a gyökérablakban
-Name[is]=Birta í rótarglugganum
-Name[it]=Mostra sullo sfondo
-Name[ja]=ルートウィンドウで表示
-Name[ka]=ჩვენება ძირითად ფანჯარაში
-Name[lt]=Rodyti root lange
-Name[mk]=Прикажи во коренскиот прозорец
-Name[ms]=Papar dalam Tetingkap Root
-Name[nb]=Vis i root-vindu
-Name[nds]=In Hööftfinster wiesen
-Name[ne]=मूल सञ्झ्यालमा प्रदर्शन
-Name[nl]=Weergeven in hoofdvenster
-Name[nn]=Vis i rotvindauget
-Name[pa]=Root ਝਰੋਖੇ ਵਿੱਚ ਵੇਖਾਓ
-Name[pl]=Wyświetl w oknie głównym
-Name[pt]=Mostrar na Janela de Fundo
-Name[pt_BR]=Mostrar na janela raiz
-Name[ro]=Afişează în fereastra rădăcină
-Name[ru]=Показывать в корневом окне
-Name[rw]=Kwerekana mu Idirishya Umuzi
-Name[sk]=Zobraziť v koreňovom okne
-Name[sl]=Prikaz v korenskem oknu
-Name[sr]=Прикажи у главном (root) прозору
-Name[sr@Latn]=Prikaži u glavnom (root) prozoru
-Name[sv]=Visa i rotfönstret
-Name[ta]=ஆரம்ப சாளரத்தில் காட்டு
-Name[tg]=Дар тирезаи решагӣ намоиш намоед
-Name[tr]=Kök Pencerede Göster
-Name[uk]=Відобразити в кореневому вікні
-Name[vi]=Hiển thị trong Cửa sổ Gốc
-Name[zh_CN]=在根窗口中显示
-Name[zh_TW]=在根視窗中顯示
-NoDisplay=true
diff --git a/kscreensaver/kdesavers/KPolygon.desktop b/kscreensaver/kdesavers/KPolygon.desktop
deleted file mode 100644
index 76375316..00000000
--- a/kscreensaver/kdesavers/KPolygon.desktop
+++ /dev/null
@@ -1,251 +0,0 @@
-[Desktop Entry]
-Exec=kpolygon.kss
-Icon=kscreensaver
-Type=Application
-Actions=Setup;InWindow;Root;
-X-TDE-Category=Rapid Motion
-Name=Polygons
-Name[af]=Poligone
-Name[bg]=Полигон
-Name[br]=Lieskognegoù
-Name[ca]=Polígons
-Name[cs]=Polygony
-Name[cy]=Polygonau
-Name[da]=Polygoner
-Name[de]=Polygon
-Name[el]=Πολύγωνα
-Name[eo]=Poligonoj
-Name[es]=Polígonos
-Name[et]=Polügoonid
-Name[eu]=Poligonoak
-Name[fa]=چند ضلعیها
-Name[fi]=Polygonit
-Name[fo]=Fleirhyrntir
-Name[fr]=Polygones
-Name[fy]=Polygoanen
-Name[ga]=Polagáin
-Name[gl]=Polígonos
-Name[he]=מצולעים
-Name[hi]=बहुभुज
-Name[hu]=Poligonok
-Name[is]=Marghyrningar
-Name[it]=Poligoni
-Name[ja]=ポリゴン
-Name[ka]=მრავალკუთხედები
-Name[lt]=Daugiakampiai
-Name[lv]=Poligoni
-Name[mk]=Полигони
-Name[ms]=Poligon
-Name[mt]=Poligoni
-Name[nb]=Polygoner
-Name[nds]=Veelecks
-Name[ne]=बहुभुज
-Name[nl]=Polygonen
-Name[nn]=Polygon
-Name[pa]=ਬਹੁਭੁਜ
-Name[pl]=Wielokąty
-Name[pt]=Polígonos
-Name[pt_BR]=Polígonos
-Name[ro]=Poligoane
-Name[ru]=Многоугольники
-Name[sk]=Polygóny
-Name[sl]=Mnogokotniki
-Name[sr]=Полигони
-Name[sr@Latn]=Poligoni
-Name[sv]=Polygoner
-Name[ta]=பலகோணவடிவங்கள்
-Name[tg]=Бисёркунҷа
-Name[th]=รูปหลายเหลี่ยม
-Name[tr]=Poligonlar
-Name[uk]=Багатокутники
-Name[uz]=Koʻpburchaklar
-Name[uz@cyrillic]=Кўпбурчаклар
-Name[vi]=Đa giác
-Name[xh]=Iziqu ezinekona namacala amaninzi
-Name[zh_CN]=多边形
-Name[zh_TW]=多邊形
-
-[Desktop Action Setup]
-Exec=kpolygon.kss -setup
-Name=Setup...
-Name[af]=Opstelling...
-Name[bg]=Настройки...
-Name[br]=Kefluniadur ...
-Name[bs]=Postavke...
-Name[ca]=Arranjament...
-Name[cs]=Nastavení...
-Name[cy]=Gosod ...
-Name[da]=Opsætning...
-Name[de]=Einrichtung ...
-Name[el]=Ρύθμιση...
-Name[eo]=Agordo...
-Name[es]=Configuración...
-Name[et]=Seadistamine...
-Name[eu]=Konfiguratu...
-Name[fa]=برپایی...
-Name[fi]=Asetukset...
-Name[fo]=Uppseting...
-Name[fr]=Configuration...
-Name[fy]=Opset...
-Name[ga]=Cumraigh...
-Name[gl]=Configuración...
-Name[he]=הגדרות...
-Name[hi]=सेटअप...
-Name[hu]=Beállítás...
-Name[is]=Stillingar...
-Name[it]=Impostazioni...
-Name[ja]=設定...
-Name[ka]=გამართვა...
-Name[lt]=Sąranka ...
-Name[lv]=Uzstādīšana...
-Name[mk]=Поставување...
-Name[ms]=Setkan...
-Name[mt]=Konfigurazzjoni...
-Name[nb]=Innstillinger …
-Name[nds]=Instellen...
-Name[ne]=सेटअप...
-Name[nl]=Instellingen...
-Name[nn]=Oppsett …
-Name[nso]=Beakanya...
-Name[pa]=ਸੈਟਅੱਪ...
-Name[pl]=Ustawienia...
-Name[pt]=Configurar...
-Name[pt_BR]=Configurar...
-Name[ro]=Setează...
-Name[ru]=Настройка...
-Name[rw]=Iboneza...
-Name[sk]=Nastavenie...
-Name[sl]=Nastavi ...
-Name[sr]=Подеси...
-Name[sr@Latn]=Podesi...
-Name[sv]=Inställningar...
-Name[ta]=அமைப்பு...
-Name[tg]=Барпосозӣ...
-Name[th]=ติดตั้ง...
-Name[tr]=Kurulum...
-Name[uk]=Встановити...
-Name[uz]=Oʻrnatish
-Name[uz@cyrillic]=Ўрнатиш
-Name[ven]=Vhekanya...
-Name[vi]=Thiết lập...
-Name[xh]=Iyacwangciswa...
-Name[zh_CN]=设置...
-Name[zh_TW]=設定...
-Name[zu]=Iyalungiselela...
-Icon=kscreensaver
-
-[Desktop Action InWindow]
-Exec=kpolygon.kss -window-id %w
-Name=Display in Specified Window
-Name[bg]=Стартиране в избран прозорец
-Name[br]=Diskwel er prenestr spisaet
-Name[bs]=Prikaži u navedenom prozoru
-Name[ca]=Mostra a la finestra especificada
-Name[cs]=Zobrazit v určeném okně
-Name[cy]=Dangos mewn Ffenestr Benodol
-Name[da]=Visning i angivet vindue
-Name[de]=In bestimmten Fenster anzeigen
-Name[el]=Προβολή στο καθορισμένο παράθυρο
-Name[eo]=Montri en indikita fenestro
-Name[es]=Mostrar en la ventana especificada
-Name[et]=Määratud aknas näitamine
-Name[eu]=Bistaratu zehaztutako lehioan
-Name[fa]=نمایش در پنجرۀ مشخص‌شده
-Name[fi]=Näytä määrätyssä ikkunassa
-Name[fr]=Affichage dans la fenêtre spécifiée
-Name[fy]=Werjefte yn in definiearre finster
-Name[ga]=Taispeáin san Fhuinneog Sonraithe
-Name[gl]=Mostrar na fiestra indicada
-Name[he]=הצג בחלון המצוין
-Name[hi]=निर्दिष्ट विंडो में प्रदर्शित करें
-Name[hu]=Megjelenítés a megadott ablakban
-Name[is]=Birta í völdum glugga
-Name[it]=Mostra nella finestra specificata
-Name[ja]=特定のウィンドウで表示
-Name[ka]=ჩვენება მითითებულ ფანჯარაში
-Name[lt]=Rodyti nurodytame lange
-Name[mk]=Прикажи во наведениот прозорец
-Name[ms]=Papar dalam Tetingkap Yang Dinyatakan
-Name[nb]=Vis i angitt vindu
-Name[nds]=In utsöcht Finster wiesen
-Name[ne]=निर्दिष्ट सञ्झ्यालमा प्रदर्शन
-Name[nl]=Weergeven in een opgegeven venster
-Name[nn]=Vis i oppgjeve vindauge
-Name[pa]=ਦੱਸੇ ਝਰੋਖੇ ਵਿੱਚ ਵੇਖਾਓ
-Name[pl]=Wyświetl w zadanym oknie
-Name[pt]=Mostrar na Janela Indicada
-Name[pt_BR]=Mostrar em janela especificada
-Name[ro]=Afişează în fereastra specificată
-Name[ru]=Показывать в указанном окне
-Name[rw]=Kwerekana mu Idirishya Ryihariye
-Name[sk]=Zobraziť v zadanom okne
-Name[sl]=Prikaz v določenemu oknu
-Name[sr]=Прикажи у наведеном прозору
-Name[sr@Latn]=Prikaži u navedenom prozoru
-Name[sv]=Visa i angivet fönster
-Name[ta]=குறித்த சாளரத்தில் காட்டு
-Name[tg]=Дар тирезаи нишондода намоиш намоед
-Name[tr]=Belirtilen Pencerede Göster
-Name[uk]=Відобразити у вказаному вікні
-Name[vi]=Hiển thị trong Cửa sổ Đã định
-Name[zh_CN]=在指定的窗口中显示
-Name[zh_TW]=在指定的視窗中顯示
-NoDisplay=true
-
-[Desktop Action Root]
-Exec=kpolygon.kss -root
-Name=Display in Root Window
-Name[bg]=Стартиране в главния прозорец
-Name[br]=Diskwel er prenestr gwrizienn
-Name[bs]=Prikaži u korijenskom prozoru
-Name[ca]=Mostra a la finestra arrel
-Name[cs]=Zobrazit na pozadí plochy
-Name[cy]=Dangos mewn Ffenestr Wraidd
-Name[da]=Visning i root-vindue
-Name[de]=In Hintergrundfenster anzeigen
-Name[el]=Προβολή στο βασικό παράθυρο
-Name[eo]=Montri en radika fenestro
-Name[es]=Mostrar en la ventana raíz
-Name[et]=Juuraknas näitamine
-Name[eu]=Bistaratu erro lehioan
-Name[fa]=نمایش در پنجرۀ ریشه
-Name[fi]=Näytä juuri-ikkunassa
-Name[fr]=Affichage dans la fenêtre racine
-Name[fy]=Werjefte yn haadfinster
-Name[ga]=Taispeáin sa bhFréamhfhuinneog
-Name[gl]=Mostrar na fiestra raiz
-Name[he]=הצג בחלון השורש
-Name[hi]=रूट विंडो में प्रदर्शित करें
-Name[hu]=Megjelenítés a gyökérablakban
-Name[is]=Birta í rótarglugganum
-Name[it]=Mostra sullo sfondo
-Name[ja]=ルートウィンドウで表示
-Name[ka]=ჩვენება ძირითად ფანჯარაში
-Name[lt]=Rodyti root lange
-Name[mk]=Прикажи во коренскиот прозорец
-Name[ms]=Papar dalam Tetingkap Root
-Name[nb]=Vis i root-vindu
-Name[nds]=In Hööftfinster wiesen
-Name[ne]=मूल सञ्झ्यालमा प्रदर्शन
-Name[nl]=Weergeven in hoofdvenster
-Name[nn]=Vis i rotvindauget
-Name[pa]=Root ਝਰੋਖੇ ਵਿੱਚ ਵੇਖਾਓ
-Name[pl]=Wyświetl w oknie głównym
-Name[pt]=Mostrar na Janela de Fundo
-Name[pt_BR]=Mostrar na janela raiz
-Name[ro]=Afişează în fereastra rădăcină
-Name[ru]=Показывать в корневом окне
-Name[rw]=Kwerekana mu Idirishya Umuzi
-Name[sk]=Zobraziť v koreňovom okne
-Name[sl]=Prikaz v korenskem oknu
-Name[sr]=Прикажи у главном (root) прозору
-Name[sr@Latn]=Prikaži u glavnom (root) prozoru
-Name[sv]=Visa i rotfönstret
-Name[ta]=ஆரம்ப சாளரத்தில் காட்டு
-Name[tg]=Дар тирезаи решагӣ намоиш намоед
-Name[tr]=Kök Pencerede Göster
-Name[uk]=Відобразити в кореневому вікні
-Name[vi]=Hiển thị trong Cửa sổ Gốc
-Name[zh_CN]=在根窗口中显示
-Name[zh_TW]=在根視窗中顯示
-NoDisplay=true
diff --git a/kscreensaver/kdesavers/KRotation.desktop b/kscreensaver/kdesavers/KRotation.desktop
deleted file mode 100644
index fb447461..00000000
--- a/kscreensaver/kdesavers/KRotation.desktop
+++ /dev/null
@@ -1,221 +0,0 @@
-[Desktop Entry]
-Exec=krotation.kss
-Icon=kscreensaver
-Type=Application
-Actions=Setup;InWindow;Root;
-X-TDE-Category=OpenGL Screen Savers
-X-TDE-Type=OpenGL
-Name=KRotation (GL)
-Name[bg]=Ротация
-Name[cs]=Rotace
-Name[de]=KRotation
-Name[el]=Ατλαντίδα (GL)
-Name[fr]=Rotation (GL)
-Name[fy]=KRotaasje (GL)
-Name[he]= KRotation(GL)
-Name[hi]=के-रोटेशन (जीएल)
-Name[hu]=KRotation (OpenGL)
-Name[is]=Ksnúningur (GL)
-Name[it]=KRotazione (GL)
-Name[ja]=回転 (GL)
-Name[ka]=დატრიალება (GL)
-Name[mk]=КРотација (GL)
-Name[nb]=KRotasjon (GL)
-Name[ne]=केडीई परिक्रमण (GL)
-Name[nn]=KRotasjon (GL)
-Name[pt]=KRotação (GL)
-Name[ro]=Rotire (GL)
-Name[ru]=Вращение (GL)
-Name[sl]=KRotacija (GL)
-Name[sr]=К-ротација (GL)
-Name[sr@Latn]=K-rotacija (GL)
-Name[sv]=Rotation (GL)
-Name[tg]=Тобхурӣ (GL)
-Name[tr]=Döndürme (GL)
-Name[uk]=Обертання (GL)
-Name[vi]=Xoay (GL)
-
-[Desktop Action Setup]
-Exec=krotation.kss -setup
-Name=Setup...
-Name[af]=Opstelling...
-Name[bg]=Настройки...
-Name[br]=Kefluniadur ...
-Name[bs]=Postavke...
-Name[ca]=Arranjament...
-Name[cs]=Nastavení...
-Name[cy]=Gosod ...
-Name[da]=Opsætning...
-Name[de]=Einrichtung ...
-Name[el]=Ρύθμιση...
-Name[eo]=Agordo...
-Name[es]=Configuración...
-Name[et]=Seadistamine...
-Name[eu]=Konfiguratu...
-Name[fa]=برپایی...
-Name[fi]=Asetukset...
-Name[fo]=Uppseting...
-Name[fr]=Configuration...
-Name[fy]=Opset...
-Name[ga]=Cumraigh...
-Name[gl]=Configuración...
-Name[he]=הגדרות...
-Name[hi]=सेटअप...
-Name[hu]=Beállítás...
-Name[is]=Stillingar...
-Name[it]=Impostazioni...
-Name[ja]=設定...
-Name[ka]=გამართვა...
-Name[lt]=Sąranka ...
-Name[lv]=Uzstādīšana...
-Name[mk]=Поставување...
-Name[ms]=Setkan...
-Name[mt]=Konfigurazzjoni...
-Name[nb]=Innstillinger …
-Name[nds]=Instellen...
-Name[ne]=सेटअप...
-Name[nl]=Instellingen...
-Name[nn]=Oppsett …
-Name[nso]=Beakanya...
-Name[pa]=ਸੈਟਅੱਪ...
-Name[pl]=Ustawienia...
-Name[pt]=Configurar...
-Name[pt_BR]=Configurar...
-Name[ro]=Setează...
-Name[ru]=Настройка...
-Name[rw]=Iboneza...
-Name[sk]=Nastavenie...
-Name[sl]=Nastavi ...
-Name[sr]=Подеси...
-Name[sr@Latn]=Podesi...
-Name[sv]=Inställningar...
-Name[ta]=அமைப்பு...
-Name[tg]=Барпосозӣ...
-Name[th]=ติดตั้ง...
-Name[tr]=Kurulum...
-Name[uk]=Встановити...
-Name[uz]=Oʻrnatish
-Name[uz@cyrillic]=Ўрнатиш
-Name[ven]=Vhekanya...
-Name[vi]=Thiết lập...
-Name[xh]=Iyacwangciswa...
-Name[zh_CN]=设置...
-Name[zh_TW]=設定...
-Name[zu]=Iyalungiselela...
-Icon=kscreensaver
-
-[Desktop Action InWindow]
-Exec=krotation.kss -window-id %w
-Name=Display in Specified Window
-Name[bg]=Стартиране в избран прозорец
-Name[br]=Diskwel er prenestr spisaet
-Name[bs]=Prikaži u navedenom prozoru
-Name[ca]=Mostra a la finestra especificada
-Name[cs]=Zobrazit v určeném okně
-Name[cy]=Dangos mewn Ffenestr Benodol
-Name[da]=Visning i angivet vindue
-Name[de]=In bestimmten Fenster anzeigen
-Name[el]=Προβολή στο καθορισμένο παράθυρο
-Name[eo]=Montri en indikita fenestro
-Name[es]=Mostrar en la ventana especificada
-Name[et]=Määratud aknas näitamine
-Name[eu]=Bistaratu zehaztutako lehioan
-Name[fa]=نمایش در پنجرۀ مشخص‌شده
-Name[fi]=Näytä määrätyssä ikkunassa
-Name[fr]=Affichage dans la fenêtre spécifiée
-Name[fy]=Werjefte yn in definiearre finster
-Name[ga]=Taispeáin san Fhuinneog Sonraithe
-Name[gl]=Mostrar na fiestra indicada
-Name[he]=הצג בחלון המצוין
-Name[hi]=निर्दिष्ट विंडो में प्रदर्शित करें
-Name[hu]=Megjelenítés a megadott ablakban
-Name[is]=Birta í völdum glugga
-Name[it]=Mostra nella finestra specificata
-Name[ja]=特定のウィンドウで表示
-Name[ka]=ჩვენება მითითებულ ფანჯარაში
-Name[lt]=Rodyti nurodytame lange
-Name[mk]=Прикажи во наведениот прозорец
-Name[ms]=Papar dalam Tetingkap Yang Dinyatakan
-Name[nb]=Vis i angitt vindu
-Name[nds]=In utsöcht Finster wiesen
-Name[ne]=निर्दिष्ट सञ्झ्यालमा प्रदर्शन
-Name[nl]=Weergeven in een opgegeven venster
-Name[nn]=Vis i oppgjeve vindauge
-Name[pa]=ਦੱਸੇ ਝਰੋਖੇ ਵਿੱਚ ਵੇਖਾਓ
-Name[pl]=Wyświetl w zadanym oknie
-Name[pt]=Mostrar na Janela Indicada
-Name[pt_BR]=Mostrar em janela especificada
-Name[ro]=Afişează în fereastra specificată
-Name[ru]=Показывать в указанном окне
-Name[rw]=Kwerekana mu Idirishya Ryihariye
-Name[sk]=Zobraziť v zadanom okne
-Name[sl]=Prikaz v določenemu oknu
-Name[sr]=Прикажи у наведеном прозору
-Name[sr@Latn]=Prikaži u navedenom prozoru
-Name[sv]=Visa i angivet fönster
-Name[ta]=குறித்த சாளரத்தில் காட்டு
-Name[tg]=Дар тирезаи нишондода намоиш намоед
-Name[tr]=Belirtilen Pencerede Göster
-Name[uk]=Відобразити у вказаному вікні
-Name[vi]=Hiển thị trong Cửa sổ Đã định
-Name[zh_CN]=在指定的窗口中显示
-Name[zh_TW]=在指定的視窗中顯示
-NoDisplay=true
-
-[Desktop Action Root]
-Exec=krotation.kss -root
-Name=Display in Root Window
-Name[bg]=Стартиране в главния прозорец
-Name[br]=Diskwel er prenestr gwrizienn
-Name[bs]=Prikaži u korijenskom prozoru
-Name[ca]=Mostra a la finestra arrel
-Name[cs]=Zobrazit na pozadí plochy
-Name[cy]=Dangos mewn Ffenestr Wraidd
-Name[da]=Visning i root-vindue
-Name[de]=In Hintergrundfenster anzeigen
-Name[el]=Προβολή στο βασικό παράθυρο
-Name[eo]=Montri en radika fenestro
-Name[es]=Mostrar en la ventana raíz
-Name[et]=Juuraknas näitamine
-Name[eu]=Bistaratu erro lehioan
-Name[fa]=نمایش در پنجرۀ ریشه
-Name[fi]=Näytä juuri-ikkunassa
-Name[fr]=Affichage dans la fenêtre racine
-Name[fy]=Werjefte yn haadfinster
-Name[ga]=Taispeáin sa bhFréamhfhuinneog
-Name[gl]=Mostrar na fiestra raiz
-Name[he]=הצג בחלון השורש
-Name[hi]=रूट विंडो में प्रदर्शित करें
-Name[hu]=Megjelenítés a gyökérablakban
-Name[is]=Birta í rótarglugganum
-Name[it]=Mostra sullo sfondo
-Name[ja]=ルートウィンドウで表示
-Name[ka]=ჩვენება ძირითად ფანჯარაში
-Name[lt]=Rodyti root lange
-Name[mk]=Прикажи во коренскиот прозорец
-Name[ms]=Papar dalam Tetingkap Root
-Name[nb]=Vis i root-vindu
-Name[nds]=In Hööftfinster wiesen
-Name[ne]=मूल सञ्झ्यालमा प्रदर्शन
-Name[nl]=Weergeven in hoofdvenster
-Name[nn]=Vis i rotvindauget
-Name[pa]=Root ਝਰੋਖੇ ਵਿੱਚ ਵੇਖਾਓ
-Name[pl]=Wyświetl w oknie głównym
-Name[pt]=Mostrar na Janela de Fundo
-Name[pt_BR]=Mostrar na janela raiz
-Name[ro]=Afişează în fereastra rădăcină
-Name[ru]=Показывать в корневом окне
-Name[rw]=Kwerekana mu Idirishya Umuzi
-Name[sk]=Zobraziť v koreňovom okne
-Name[sl]=Prikaz v korenskem oknu
-Name[sr]=Прикажи у главном (root) прозору
-Name[sr@Latn]=Prikaži u glavnom (root) prozoru
-Name[sv]=Visa i rotfönstret
-Name[ta]=ஆரம்ப சாளரத்தில் காட்டு
-Name[tg]=Дар тирезаи решагӣ намоиш намоед
-Name[tr]=Kök Pencerede Göster
-Name[uk]=Відобразити в кореневому вікні
-Name[vi]=Hiển thị trong Cửa sổ Gốc
-Name[zh_CN]=在根窗口中显示
-Name[zh_TW]=在根視窗中顯示
-NoDisplay=true
diff --git a/kscreensaver/kdesavers/KScience.desktop b/kscreensaver/kdesavers/KScience.desktop
deleted file mode 100644
index f5d81f9b..00000000
--- a/kscreensaver/kdesavers/KScience.desktop
+++ /dev/null
@@ -1,254 +0,0 @@
-[Desktop Entry]
-Exec=kscience.kss
-Icon=kscreensaver
-Type=Application
-Actions=Setup;InWindow;Root;
-X-TDE-Category=Desktop Distortions
-X-TDE-Type=ManipulateScreen
-Name=Science
-Name[af]=Wetenskap
-Name[bg]=Наука
-Name[br]=Skiantoù
-Name[ca]=Ciència
-Name[cs]=Věda
-Name[cy]=Gwyddoniaeth
-Name[da]=Videnskab
-Name[de]=Wissenschaft
-Name[el]=Επιστήμη
-Name[eo]=Scienco
-Name[es]=Ciencia
-Name[et]=Teadus
-Name[eu]=Zientzia
-Name[fa]=علم
-Name[fi]=Linssi
-Name[fo]=Náttúruvísind
-Name[fy]=Wittenskiplik
-Name[ga]=Eolaíocht
-Name[gl]=Ciéncia
-Name[he]=מדע
-Name[hi]=विज्ञान
-Name[hu]=Tudomány
-Name[is]=Vísindi
-Name[it]=Scienza
-Name[ja]=サイエンス
-Name[ka]=მეცნიერება
-Name[lt]=Mokslas
-Name[lv]=Zinātne
-Name[mk]=Наука
-Name[ms]=Sains
-Name[mt]=Xjenza
-Name[nb]=Vitenskap
-Name[nds]=Wetenschap
-Name[ne]=बिज्ञान
-Name[nl]=Wetenschappelijk
-Name[nn]=Vitskap
-Name[nso]=Mahlale
-Name[pa]=ਵਿਗਿਆਨ
-Name[pl]=Nauka
-Name[pt]=Ciência
-Name[pt_BR]=Ciência
-Name[ro]=Ştiinţă
-Name[ru]=Наука
-Name[sk]=Vedecký
-Name[sl]=Znanost
-Name[sr]=Наука
-Name[sr@Latn]=Nauka
-Name[sv]=Vetenskap
-Name[ta]=அறிவியல்
-Name[tg]=Илм
-Name[th]=วิทยาศาสตร์
-Name[tr]=Bilim
-Name[uk]=Наука
-Name[uz]=Fan
-Name[uz@cyrillic]=Фан
-Name[ven]=Vhutsila
-Name[vi]=Khoa học
-Name[xh]=Inzulu lwazi
-Name[zh_CN]=科学
-Name[zh_TW]=科學
-Name[zu]=Ubuchwepheshe bezesayensi
-
-[Desktop Action Setup]
-Exec=kscience.kss -setup
-Name=Setup...
-Name[af]=Opstelling...
-Name[bg]=Настройки...
-Name[br]=Kefluniadur ...
-Name[bs]=Postavke...
-Name[ca]=Arranjament...
-Name[cs]=Nastavení...
-Name[cy]=Gosod ...
-Name[da]=Opsætning...
-Name[de]=Einrichtung ...
-Name[el]=Ρύθμιση...
-Name[eo]=Agordo...
-Name[es]=Configuración...
-Name[et]=Seadistamine...
-Name[eu]=Konfiguratu...
-Name[fa]=برپایی...
-Name[fi]=Asetukset...
-Name[fo]=Uppseting...
-Name[fr]=Configuration...
-Name[fy]=Opset...
-Name[ga]=Cumraigh...
-Name[gl]=Configuración...
-Name[he]=הגדרות...
-Name[hi]=सेटअप...
-Name[hu]=Beállítás...
-Name[is]=Stillingar...
-Name[it]=Impostazioni...
-Name[ja]=設定...
-Name[ka]=გამართვა...
-Name[lt]=Sąranka ...
-Name[lv]=Uzstādīšana...
-Name[mk]=Поставување...
-Name[ms]=Setkan...
-Name[mt]=Konfigurazzjoni...
-Name[nb]=Innstillinger …
-Name[nds]=Instellen...
-Name[ne]=सेटअप...
-Name[nl]=Instellingen...
-Name[nn]=Oppsett …
-Name[nso]=Beakanya...
-Name[pa]=ਸੈਟਅੱਪ...
-Name[pl]=Ustawienia...
-Name[pt]=Configurar...
-Name[pt_BR]=Configurar...
-Name[ro]=Setează...
-Name[ru]=Настройка...
-Name[rw]=Iboneza...
-Name[sk]=Nastavenie...
-Name[sl]=Nastavi ...
-Name[sr]=Подеси...
-Name[sr@Latn]=Podesi...
-Name[sv]=Inställningar...
-Name[ta]=அமைப்பு...
-Name[tg]=Барпосозӣ...
-Name[th]=ติดตั้ง...
-Name[tr]=Kurulum...
-Name[uk]=Встановити...
-Name[uz]=Oʻrnatish
-Name[uz@cyrillic]=Ўрнатиш
-Name[ven]=Vhekanya...
-Name[vi]=Thiết lập...
-Name[xh]=Iyacwangciswa...
-Name[zh_CN]=设置...
-Name[zh_TW]=設定...
-Name[zu]=Iyalungiselela...
-Icon=kscreensaver
-
-[Desktop Action InWindow]
-Exec=kscience.kss -window-id %w
-Name=Display in Specified Window
-Name[bg]=Стартиране в избран прозорец
-Name[br]=Diskwel er prenestr spisaet
-Name[bs]=Prikaži u navedenom prozoru
-Name[ca]=Mostra a la finestra especificada
-Name[cs]=Zobrazit v určeném okně
-Name[cy]=Dangos mewn Ffenestr Benodol
-Name[da]=Visning i angivet vindue
-Name[de]=In bestimmten Fenster anzeigen
-Name[el]=Προβολή στο καθορισμένο παράθυρο
-Name[eo]=Montri en indikita fenestro
-Name[es]=Mostrar en la ventana especificada
-Name[et]=Määratud aknas näitamine
-Name[eu]=Bistaratu zehaztutako lehioan
-Name[fa]=نمایش در پنجرۀ مشخص‌شده
-Name[fi]=Näytä määrätyssä ikkunassa
-Name[fr]=Affichage dans la fenêtre spécifiée
-Name[fy]=Werjefte yn in definiearre finster
-Name[ga]=Taispeáin san Fhuinneog Sonraithe
-Name[gl]=Mostrar na fiestra indicada
-Name[he]=הצג בחלון המצוין
-Name[hi]=निर्दिष्ट विंडो में प्रदर्शित करें
-Name[hu]=Megjelenítés a megadott ablakban
-Name[is]=Birta í völdum glugga
-Name[it]=Mostra nella finestra specificata
-Name[ja]=特定のウィンドウで表示
-Name[ka]=ჩვენება მითითებულ ფანჯარაში
-Name[lt]=Rodyti nurodytame lange
-Name[mk]=Прикажи во наведениот прозорец
-Name[ms]=Papar dalam Tetingkap Yang Dinyatakan
-Name[nb]=Vis i angitt vindu
-Name[nds]=In utsöcht Finster wiesen
-Name[ne]=निर्दिष्ट सञ्झ्यालमा प्रदर्शन
-Name[nl]=Weergeven in een opgegeven venster
-Name[nn]=Vis i oppgjeve vindauge
-Name[pa]=ਦੱਸੇ ਝਰੋਖੇ ਵਿੱਚ ਵੇਖਾਓ
-Name[pl]=Wyświetl w zadanym oknie
-Name[pt]=Mostrar na Janela Indicada
-Name[pt_BR]=Mostrar em janela especificada
-Name[ro]=Afişează în fereastra specificată
-Name[ru]=Показывать в указанном окне
-Name[rw]=Kwerekana mu Idirishya Ryihariye
-Name[sk]=Zobraziť v zadanom okne
-Name[sl]=Prikaz v določenemu oknu
-Name[sr]=Прикажи у наведеном прозору
-Name[sr@Latn]=Prikaži u navedenom prozoru
-Name[sv]=Visa i angivet fönster
-Name[ta]=குறித்த சாளரத்தில் காட்டு
-Name[tg]=Дар тирезаи нишондода намоиш намоед
-Name[tr]=Belirtilen Pencerede Göster
-Name[uk]=Відобразити у вказаному вікні
-Name[vi]=Hiển thị trong Cửa sổ Đã định
-Name[zh_CN]=在指定的窗口中显示
-Name[zh_TW]=在指定的視窗中顯示
-NoDisplay=true
-
-[Desktop Action Root]
-Exec=kscience.kss -root
-Name=Display in Root Window
-Name[bg]=Стартиране в главния прозорец
-Name[br]=Diskwel er prenestr gwrizienn
-Name[bs]=Prikaži u korijenskom prozoru
-Name[ca]=Mostra a la finestra arrel
-Name[cs]=Zobrazit na pozadí plochy
-Name[cy]=Dangos mewn Ffenestr Wraidd
-Name[da]=Visning i root-vindue
-Name[de]=In Hintergrundfenster anzeigen
-Name[el]=Προβολή στο βασικό παράθυρο
-Name[eo]=Montri en radika fenestro
-Name[es]=Mostrar en la ventana raíz
-Name[et]=Juuraknas näitamine
-Name[eu]=Bistaratu erro lehioan
-Name[fa]=نمایش در پنجرۀ ریشه
-Name[fi]=Näytä juuri-ikkunassa
-Name[fr]=Affichage dans la fenêtre racine
-Name[fy]=Werjefte yn haadfinster
-Name[ga]=Taispeáin sa bhFréamhfhuinneog
-Name[gl]=Mostrar na fiestra raiz
-Name[he]=הצג בחלון השורש
-Name[hi]=रूट विंडो में प्रदर्शित करें
-Name[hu]=Megjelenítés a gyökérablakban
-Name[is]=Birta í rótarglugganum
-Name[it]=Mostra sullo sfondo
-Name[ja]=ルートウィンドウで表示
-Name[ka]=ჩვენება ძირითად ფანჯარაში
-Name[lt]=Rodyti root lange
-Name[mk]=Прикажи во коренскиот прозорец
-Name[ms]=Papar dalam Tetingkap Root
-Name[nb]=Vis i root-vindu
-Name[nds]=In Hööftfinster wiesen
-Name[ne]=मूल सञ्झ्यालमा प्रदर्शन
-Name[nl]=Weergeven in hoofdvenster
-Name[nn]=Vis i rotvindauget
-Name[pa]=Root ਝਰੋਖੇ ਵਿੱਚ ਵੇਖਾਓ
-Name[pl]=Wyświetl w oknie głównym
-Name[pt]=Mostrar na Janela de Fundo
-Name[pt_BR]=Mostrar na janela raiz
-Name[ro]=Afişează în fereastra rădăcină
-Name[ru]=Показывать в корневом окне
-Name[rw]=Kwerekana mu Idirishya Umuzi
-Name[sk]=Zobraziť v koreňovom okne
-Name[sl]=Prikaz v korenskem oknu
-Name[sr]=Прикажи у главном (root) прозору
-Name[sr@Latn]=Prikaži u glavnom (root) prozoru
-Name[sv]=Visa i rotfönstret
-Name[ta]=ஆரம்ப சாளரத்தில் காட்டு
-Name[tg]=Дар тирезаи решагӣ намоиш намоед
-Name[tr]=Kök Pencerede Göster
-Name[uk]=Відобразити в кореневому вікні
-Name[vi]=Hiển thị trong Cửa sổ Gốc
-Name[zh_CN]=在根窗口中显示
-Name[zh_TW]=在根視窗中顯示
-NoDisplay=true
diff --git a/kscreensaver/kdesavers/KSlideshow.desktop b/kscreensaver/kdesavers/KSlideshow.desktop
deleted file mode 100644
index 59670bc6..00000000
--- a/kscreensaver/kdesavers/KSlideshow.desktop
+++ /dev/null
@@ -1,251 +0,0 @@
-[Desktop Entry]
-Exec=kslideshow.kss
-Icon=kscreensaver
-Type=Application
-Actions=Setup;InWindow;Root;
-X-TDE-Category=Banners & Pictures
-Name=Slide Show
-Name[af]=Skuif Vertoon
-Name[bg]=Слайдшоу
-Name[br]=Diskouezadur skeudennoù
-Name[ca]=Diapositives
-Name[cs]=Promítání
-Name[cy]=Sioe Tryloywder
-Name[da]=Diasshow
-Name[de]=Dia-Schau
-Name[el]=Προβολή σλάιντς
-Name[eo]=Lumbildoj
-Name[es]=Presentación
-Name[et]=Slaidishow
-Name[eu]=Diapositiba erakusketa
-Name[fa]=نمایش اسلاید
-Name[fi]=Diaesitys
-Name[fo]=Framløga
-Name[fr]=Diaporama
-Name[fy]=Diafoarstelling
-Name[ga]=Taispeántas Sleamhnán
-Name[gl]=Apresentación
-Name[he]=מצגת שקופיות
-Name[hi]=झलक तमाशा
-Name[hu]=Diavetítés
-Name[is]=Skyggnusýning
-Name[it]=Immagini in sequenza
-Name[ja]=スライドショー
-Name[ka]=სლაიდების ჩვენება
-Name[lt]=Skaidrių šou
-Name[lv]=Slīdrāde
-Name[mk]=Слајд-шоу
-Name[ms]=Tayangan Slaid
-Name[nb]=Lysbildeshow
-Name[nds]=Diaschau
-Name[ne]=स्लाइड प्रदर्शन
-Name[nl]=Diavoorstelling
-Name[nn]=Framvising
-Name[pl]=Sekwencja slajdów
-Name[pt]=Slides
-Name[pt_BR]=Show de slides
-Name[ro]=Succesiune de imagini
-Name[ru]=Слайд-шоу
-Name[sl]=Diapozitivi
-Name[sr]=Слајд шоу
-Name[sr@Latn]=Slajd šou
-Name[sv]=Bildspel
-Name[ta]=ஸ்லைடு காட்சி
-Name[tg]=Намоиши слайд
-Name[th]=แสดงภาพนิ่ง
-Name[tr]=Saydam Gösterisi
-Name[uk]=Слайди
-Name[uz]=Slayd shou
-Name[uz@cyrillic]=Слайд шоу
-Name[ven]=Musumbedzo wo peamaho
-Name[vi]=Trình bày
-Name[xh]=Isiboniso esihamba thambileyo
-Name[zh_CN]=幻灯播放
-Name[zh_TW]=幻燈片放映
-Name[zu]=Isiboniso esihamba ngokuthambile
-
-[Desktop Action Setup]
-Exec=kslideshow.kss -setup
-Name=Setup...
-Name[af]=Opstelling...
-Name[bg]=Настройки...
-Name[br]=Kefluniadur ...
-Name[bs]=Postavke...
-Name[ca]=Arranjament...
-Name[cs]=Nastavení...
-Name[cy]=Gosod ...
-Name[da]=Opsætning...
-Name[de]=Einrichtung ...
-Name[el]=Ρύθμιση...
-Name[eo]=Agordo...
-Name[es]=Configuración...
-Name[et]=Seadistamine...
-Name[eu]=Konfiguratu...
-Name[fa]=برپایی...
-Name[fi]=Asetukset...
-Name[fo]=Uppseting...
-Name[fr]=Configuration...
-Name[fy]=Opset...
-Name[ga]=Cumraigh...
-Name[gl]=Configuración...
-Name[he]=הגדרות...
-Name[hi]=सेटअप...
-Name[hu]=Beállítás...
-Name[is]=Stillingar...
-Name[it]=Impostazioni...
-Name[ja]=設定...
-Name[ka]=გამართვა...
-Name[lt]=Sąranka ...
-Name[lv]=Uzstādīšana...
-Name[mk]=Поставување...
-Name[ms]=Setkan...
-Name[mt]=Konfigurazzjoni...
-Name[nb]=Innstillinger …
-Name[nds]=Instellen...
-Name[ne]=सेटअप...
-Name[nl]=Instellingen...
-Name[nn]=Oppsett …
-Name[nso]=Beakanya...
-Name[pa]=ਸੈਟਅੱਪ...
-Name[pl]=Ustawienia...
-Name[pt]=Configurar...
-Name[pt_BR]=Configurar...
-Name[ro]=Setează...
-Name[ru]=Настройка...
-Name[rw]=Iboneza...
-Name[sk]=Nastavenie...
-Name[sl]=Nastavi ...
-Name[sr]=Подеси...
-Name[sr@Latn]=Podesi...
-Name[sv]=Inställningar...
-Name[ta]=அமைப்பு...
-Name[tg]=Барпосозӣ...
-Name[th]=ติดตั้ง...
-Name[tr]=Kurulum...
-Name[uk]=Встановити...
-Name[uz]=Oʻrnatish
-Name[uz@cyrillic]=Ўрнатиш
-Name[ven]=Vhekanya...
-Name[vi]=Thiết lập...
-Name[xh]=Iyacwangciswa...
-Name[zh_CN]=设置...
-Name[zh_TW]=設定...
-Name[zu]=Iyalungiselela...
-Icon=kscreensaver
-
-[Desktop Action InWindow]
-Exec=kslideshow.kss -window-id %w
-Name=Display in Specified Window
-Name[bg]=Стартиране в избран прозорец
-Name[br]=Diskwel er prenestr spisaet
-Name[bs]=Prikaži u navedenom prozoru
-Name[ca]=Mostra a la finestra especificada
-Name[cs]=Zobrazit v určeném okně
-Name[cy]=Dangos mewn Ffenestr Benodol
-Name[da]=Visning i angivet vindue
-Name[de]=In bestimmten Fenster anzeigen
-Name[el]=Προβολή στο καθορισμένο παράθυρο
-Name[eo]=Montri en indikita fenestro
-Name[es]=Mostrar en la ventana especificada
-Name[et]=Määratud aknas näitamine
-Name[eu]=Bistaratu zehaztutako lehioan
-Name[fa]=نمایش در پنجرۀ مشخص‌شده
-Name[fi]=Näytä määrätyssä ikkunassa
-Name[fr]=Affichage dans la fenêtre spécifiée
-Name[fy]=Werjefte yn in definiearre finster
-Name[ga]=Taispeáin san Fhuinneog Sonraithe
-Name[gl]=Mostrar na fiestra indicada
-Name[he]=הצג בחלון המצוין
-Name[hi]=निर्दिष्ट विंडो में प्रदर्शित करें
-Name[hu]=Megjelenítés a megadott ablakban
-Name[is]=Birta í völdum glugga
-Name[it]=Mostra nella finestra specificata
-Name[ja]=特定のウィンドウで表示
-Name[ka]=ჩვენება მითითებულ ფანჯარაში
-Name[lt]=Rodyti nurodytame lange
-Name[mk]=Прикажи во наведениот прозорец
-Name[ms]=Papar dalam Tetingkap Yang Dinyatakan
-Name[nb]=Vis i angitt vindu
-Name[nds]=In utsöcht Finster wiesen
-Name[ne]=निर्दिष्ट सञ्झ्यालमा प्रदर्शन
-Name[nl]=Weergeven in een opgegeven venster
-Name[nn]=Vis i oppgjeve vindauge
-Name[pa]=ਦੱਸੇ ਝਰੋਖੇ ਵਿੱਚ ਵੇਖਾਓ
-Name[pl]=Wyświetl w zadanym oknie
-Name[pt]=Mostrar na Janela Indicada
-Name[pt_BR]=Mostrar em janela especificada
-Name[ro]=Afişează în fereastra specificată
-Name[ru]=Показывать в указанном окне
-Name[rw]=Kwerekana mu Idirishya Ryihariye
-Name[sk]=Zobraziť v zadanom okne
-Name[sl]=Prikaz v določenemu oknu
-Name[sr]=Прикажи у наведеном прозору
-Name[sr@Latn]=Prikaži u navedenom prozoru
-Name[sv]=Visa i angivet fönster
-Name[ta]=குறித்த சாளரத்தில் காட்டு
-Name[tg]=Дар тирезаи нишондода намоиш намоед
-Name[tr]=Belirtilen Pencerede Göster
-Name[uk]=Відобразити у вказаному вікні
-Name[vi]=Hiển thị trong Cửa sổ Đã định
-Name[zh_CN]=在指定的窗口中显示
-Name[zh_TW]=在指定的視窗中顯示
-NoDisplay=true
-
-[Desktop Action Root]
-Exec=kslideshow.kss -root
-Name=Display in Root Window
-Name[bg]=Стартиране в главния прозорец
-Name[br]=Diskwel er prenestr gwrizienn
-Name[bs]=Prikaži u korijenskom prozoru
-Name[ca]=Mostra a la finestra arrel
-Name[cs]=Zobrazit na pozadí plochy
-Name[cy]=Dangos mewn Ffenestr Wraidd
-Name[da]=Visning i root-vindue
-Name[de]=In Hintergrundfenster anzeigen
-Name[el]=Προβολή στο βασικό παράθυρο
-Name[eo]=Montri en radika fenestro
-Name[es]=Mostrar en la ventana raíz
-Name[et]=Juuraknas näitamine
-Name[eu]=Bistaratu erro lehioan
-Name[fa]=نمایش در پنجرۀ ریشه
-Name[fi]=Näytä juuri-ikkunassa
-Name[fr]=Affichage dans la fenêtre racine
-Name[fy]=Werjefte yn haadfinster
-Name[ga]=Taispeáin sa bhFréamhfhuinneog
-Name[gl]=Mostrar na fiestra raiz
-Name[he]=הצג בחלון השורש
-Name[hi]=रूट विंडो में प्रदर्शित करें
-Name[hu]=Megjelenítés a gyökérablakban
-Name[is]=Birta í rótarglugganum
-Name[it]=Mostra sullo sfondo
-Name[ja]=ルートウィンドウで表示
-Name[ka]=ჩვენება ძირითად ფანჯარაში
-Name[lt]=Rodyti root lange
-Name[mk]=Прикажи во коренскиот прозорец
-Name[ms]=Papar dalam Tetingkap Root
-Name[nb]=Vis i root-vindu
-Name[nds]=In Hööftfinster wiesen
-Name[ne]=मूल सञ्झ्यालमा प्रदर्शन
-Name[nl]=Weergeven in hoofdvenster
-Name[nn]=Vis i rotvindauget
-Name[pa]=Root ਝਰੋਖੇ ਵਿੱਚ ਵੇਖਾਓ
-Name[pl]=Wyświetl w oknie głównym
-Name[pt]=Mostrar na Janela de Fundo
-Name[pt_BR]=Mostrar na janela raiz
-Name[ro]=Afişează în fereastra rădăcină
-Name[ru]=Показывать в корневом окне
-Name[rw]=Kwerekana mu Idirishya Umuzi
-Name[sk]=Zobraziť v koreňovom okne
-Name[sl]=Prikaz v korenskem oknu
-Name[sr]=Прикажи у главном (root) прозору
-Name[sr@Latn]=Prikaži u glavnom (root) prozoru
-Name[sv]=Visa i rotfönstret
-Name[ta]=ஆரம்ப சாளரத்தில் காட்டு
-Name[tg]=Дар тирезаи решагӣ намоиш намоед
-Name[tr]=Kök Pencerede Göster
-Name[uk]=Відобразити в кореневому вікні
-Name[vi]=Hiển thị trong Cửa sổ Gốc
-Name[zh_CN]=在根窗口中显示
-Name[zh_TW]=在根視窗中顯示
-NoDisplay=true
-
diff --git a/kscreensaver/kdesavers/KSolarWinds.desktop b/kscreensaver/kdesavers/KSolarWinds.desktop
deleted file mode 100644
index a642fd07..00000000
--- a/kscreensaver/kdesavers/KSolarWinds.desktop
+++ /dev/null
@@ -1,243 +0,0 @@
-[Desktop Entry]
-Exec=ksolarwinds.kss
-Icon=kscreensaver
-Type=Application
-Actions=Setup;InWindow;Root;
-X-TDE-Category=OpenGL Screen Savers
-X-TDE-Type=OpenGL
-Name=Solar Winds (GL)
-Name[bg]=Слънчев вятър
-Name[br]=Avelioù an Heol (GL)
-Name[ca]=Vent solar (GL)
-Name[cy]=Gwyntoedd o'r Haul (GL)
-Name[da]=Solvinde (GL)
-Name[de]=Sonnenwind
-Name[el]=Αστρικοί Άνεμοι (GL)
-Name[es]=Viento solar (GL)
-Name[et]=Päikesetuul (GL)
-Name[eu]=Eguzki-haizeak (GL)
-Name[fa]=پیچشهای خورشیدی (GL)
-Name[fi]=Aurinkotuuli (GL)
-Name[fo]=Sólvind (GL)
-Name[fr]=Vents solaires (GL)
-Name[fy]=Sinnewyn (GL)
-Name[gl]=Vento solar (GL)
-Name[he]=רוחות סולאריות (GL)
-Name[hi]=सौर तूफ़ान (जीएल)
-Name[hu]=Napszél (OpenGL)
-Name[is]=Sólvindar (GL)
-Name[it]=Venti Solari (GL)
-Name[ja]=太陽風 (GL)
-Name[ka]=მზის ქარი (GL)
-Name[mk]=Соларни ветрови (GL)
-Name[mt]=Irjieħ solari (GL)
-Name[nb]=Solvind (GL)
-Name[nds]=Sünnwind
-Name[ne]=सौर्य हावा (GL)
-Name[nl]=Zonnewind (GL)
-Name[nn]=Solvind (GL)
-Name[pl]=Wiatry słoneczne (GL)
-Name[pt]=Ventos Solares (GL)
-Name[pt_BR]=Ventos Solares (GL)
-Name[ro]=Vînturi solare (GL)
-Name[ru]=Солнечный ветер (GL)
-Name[sl]=Solarni vetrovi (GL)
-Name[sr]=Соларни ветрови (GL)
-Name[sr@Latn]=Solarni vetrovi (GL)
-Name[sv]=Solvindar (GL)
-Name[ta]=சூரிய காற்றுக்கள்(GL)
-Name[tg]=Шамоли офтобӣ (GL)
-Name[th]=สายลมสุริยะ (GL)
-Name[tr]=Güneş Rüzgarı (GL)
-Name[uk]=Сонячні вітри (GL)
-Name[uz]=Quyosh shamollari (GL)
-Name[uz@cyrillic]=Қуёш шамоллари (GL)
-Name[ven]=Mimuya yau solar (GL)
-Name[vi]=Gió Mặt Trời (GL)
-Name[zh_CN]=太阳风(GL)
-Name[zu]=Imimoya Yelanga (GL)
-
-[Desktop Action Setup]
-Exec=ksolarwinds.kss -setup
-Name=Setup...
-Name[af]=Opstelling...
-Name[bg]=Настройки...
-Name[br]=Kefluniadur ...
-Name[bs]=Postavke...
-Name[ca]=Arranjament...
-Name[cs]=Nastavení...
-Name[cy]=Gosod ...
-Name[da]=Opsætning...
-Name[de]=Einrichtung ...
-Name[el]=Ρύθμιση...
-Name[eo]=Agordo...
-Name[es]=Configuración...
-Name[et]=Seadistamine...
-Name[eu]=Konfiguratu...
-Name[fa]=برپایی...
-Name[fi]=Asetukset...
-Name[fo]=Uppseting...
-Name[fr]=Configuration...
-Name[fy]=Opset...
-Name[ga]=Cumraigh...
-Name[gl]=Configuración...
-Name[he]=הגדרות...
-Name[hi]=सेटअप...
-Name[hu]=Beállítás...
-Name[is]=Stillingar...
-Name[it]=Impostazioni...
-Name[ja]=設定...
-Name[ka]=გამართვა...
-Name[lt]=Sąranka ...
-Name[lv]=Uzstādīšana...
-Name[mk]=Поставување...
-Name[ms]=Setkan...
-Name[mt]=Konfigurazzjoni...
-Name[nb]=Innstillinger …
-Name[nds]=Instellen...
-Name[ne]=सेटअप...
-Name[nl]=Instellingen...
-Name[nn]=Oppsett …
-Name[nso]=Beakanya...
-Name[pa]=ਸੈਟਅੱਪ...
-Name[pl]=Ustawienia...
-Name[pt]=Configurar...
-Name[pt_BR]=Configurar...
-Name[ro]=Setează...
-Name[ru]=Настройка...
-Name[rw]=Iboneza...
-Name[sk]=Nastavenie...
-Name[sl]=Nastavi ...
-Name[sr]=Подеси...
-Name[sr@Latn]=Podesi...
-Name[sv]=Inställningar...
-Name[ta]=அமைப்பு...
-Name[tg]=Барпосозӣ...
-Name[th]=ติดตั้ง...
-Name[tr]=Kurulum...
-Name[uk]=Встановити...
-Name[uz]=Oʻrnatish
-Name[uz@cyrillic]=Ўрнатиш
-Name[ven]=Vhekanya...
-Name[vi]=Thiết lập...
-Name[xh]=Iyacwangciswa...
-Name[zh_CN]=设置...
-Name[zh_TW]=設定...
-Name[zu]=Iyalungiselela...
-Icon=kscreensaver
-
-[Desktop Action InWindow]
-Exec=ksolarwinds.kss -window-id %w
-Name=Display in Specified Window
-Name[bg]=Стартиране в избран прозорец
-Name[br]=Diskwel er prenestr spisaet
-Name[bs]=Prikaži u navedenom prozoru
-Name[ca]=Mostra a la finestra especificada
-Name[cs]=Zobrazit v určeném okně
-Name[cy]=Dangos mewn Ffenestr Benodol
-Name[da]=Visning i angivet vindue
-Name[de]=In bestimmten Fenster anzeigen
-Name[el]=Προβολή στο καθορισμένο παράθυρο
-Name[eo]=Montri en indikita fenestro
-Name[es]=Mostrar en la ventana especificada
-Name[et]=Määratud aknas näitamine
-Name[eu]=Bistaratu zehaztutako lehioan
-Name[fa]=نمایش در پنجرۀ مشخص‌شده
-Name[fi]=Näytä määrätyssä ikkunassa
-Name[fr]=Affichage dans la fenêtre spécifiée
-Name[fy]=Werjefte yn in definiearre finster
-Name[ga]=Taispeáin san Fhuinneog Sonraithe
-Name[gl]=Mostrar na fiestra indicada
-Name[he]=הצג בחלון המצוין
-Name[hi]=निर्दिष्ट विंडो में प्रदर्शित करें
-Name[hu]=Megjelenítés a megadott ablakban
-Name[is]=Birta í völdum glugga
-Name[it]=Mostra nella finestra specificata
-Name[ja]=特定のウィンドウで表示
-Name[ka]=ჩვენება მითითებულ ფანჯარაში
-Name[lt]=Rodyti nurodytame lange
-Name[mk]=Прикажи во наведениот прозорец
-Name[ms]=Papar dalam Tetingkap Yang Dinyatakan
-Name[nb]=Vis i angitt vindu
-Name[nds]=In utsöcht Finster wiesen
-Name[ne]=निर्दिष्ट सञ्झ्यालमा प्रदर्शन
-Name[nl]=Weergeven in een opgegeven venster
-Name[nn]=Vis i oppgjeve vindauge
-Name[pa]=ਦੱਸੇ ਝਰੋਖੇ ਵਿੱਚ ਵੇਖਾਓ
-Name[pl]=Wyświetl w zadanym oknie
-Name[pt]=Mostrar na Janela Indicada
-Name[pt_BR]=Mostrar em janela especificada
-Name[ro]=Afişează în fereastra specificată
-Name[ru]=Показывать в указанном окне
-Name[rw]=Kwerekana mu Idirishya Ryihariye
-Name[sk]=Zobraziť v zadanom okne
-Name[sl]=Prikaz v določenemu oknu
-Name[sr]=Прикажи у наведеном прозору
-Name[sr@Latn]=Prikaži u navedenom prozoru
-Name[sv]=Visa i angivet fönster
-Name[ta]=குறித்த சாளரத்தில் காட்டு
-Name[tg]=Дар тирезаи нишондода намоиш намоед
-Name[tr]=Belirtilen Pencerede Göster
-Name[uk]=Відобразити у вказаному вікні
-Name[vi]=Hiển thị trong Cửa sổ Đã định
-Name[zh_CN]=在指定的窗口中显示
-Name[zh_TW]=在指定的視窗中顯示
-NoDisplay=true
-
-[Desktop Action Root]
-Exec=ksolarwinds.kss -root
-Name=Display in Root Window
-Name[bg]=Стартиране в главния прозорец
-Name[br]=Diskwel er prenestr gwrizienn
-Name[bs]=Prikaži u korijenskom prozoru
-Name[ca]=Mostra a la finestra arrel
-Name[cs]=Zobrazit na pozadí plochy
-Name[cy]=Dangos mewn Ffenestr Wraidd
-Name[da]=Visning i root-vindue
-Name[de]=In Hintergrundfenster anzeigen
-Name[el]=Προβολή στο βασικό παράθυρο
-Name[eo]=Montri en radika fenestro
-Name[es]=Mostrar en la ventana raíz
-Name[et]=Juuraknas näitamine
-Name[eu]=Bistaratu erro lehioan
-Name[fa]=نمایش در پنجرۀ ریشه
-Name[fi]=Näytä juuri-ikkunassa
-Name[fr]=Affichage dans la fenêtre racine
-Name[fy]=Werjefte yn haadfinster
-Name[ga]=Taispeáin sa bhFréamhfhuinneog
-Name[gl]=Mostrar na fiestra raiz
-Name[he]=הצג בחלון השורש
-Name[hi]=रूट विंडो में प्रदर्शित करें
-Name[hu]=Megjelenítés a gyökérablakban
-Name[is]=Birta í rótarglugganum
-Name[it]=Mostra sullo sfondo
-Name[ja]=ルートウィンドウで表示
-Name[ka]=ჩვენება ძირითად ფანჯარაში
-Name[lt]=Rodyti root lange
-Name[mk]=Прикажи во коренскиот прозорец
-Name[ms]=Papar dalam Tetingkap Root
-Name[nb]=Vis i root-vindu
-Name[nds]=In Hööftfinster wiesen
-Name[ne]=मूल सञ्झ्यालमा प्रदर्शन
-Name[nl]=Weergeven in hoofdvenster
-Name[nn]=Vis i rotvindauget
-Name[pa]=Root ਝਰੋਖੇ ਵਿੱਚ ਵੇਖਾਓ
-Name[pl]=Wyświetl w oknie głównym
-Name[pt]=Mostrar na Janela de Fundo
-Name[pt_BR]=Mostrar na janela raiz
-Name[ro]=Afişează în fereastra rădăcină
-Name[ru]=Показывать в корневом окне
-Name[rw]=Kwerekana mu Idirishya Umuzi
-Name[sk]=Zobraziť v koreňovom okne
-Name[sl]=Prikaz v korenskem oknu
-Name[sr]=Прикажи у главном (root) прозору
-Name[sr@Latn]=Prikaži u glavnom (root) prozoru
-Name[sv]=Visa i rotfönstret
-Name[ta]=ஆரம்ப சாளரத்தில் காட்டு
-Name[tg]=Дар тирезаи решагӣ намоиш намоед
-Name[tr]=Kök Pencerede Göster
-Name[uk]=Відобразити в кореневому вікні
-Name[vi]=Hiển thị trong Cửa sổ Gốc
-Name[zh_CN]=在根窗口中显示
-Name[zh_TW]=在根視窗中顯示
-NoDisplay=true
diff --git a/kscreensaver/kdesavers/KVm.desktop b/kscreensaver/kdesavers/KVm.desktop
deleted file mode 100644
index 65abfd4c..00000000
--- a/kscreensaver/kdesavers/KVm.desktop
+++ /dev/null
@@ -1,253 +0,0 @@
-[Desktop Entry]
-Exec=kvm.kss
-Icon=kscreensaver
-Type=Application
-Actions=Setup;InWindow;Root;
-X-TDE-Category=Gadgets & Simulations
-Name=Virtual Machine
-Name[af]=Virtuele Masjien
-Name[bg]=Виртуална машина
-Name[br]=Ardivink galloudel
-Name[ca]=Màquina virtual
-Name[cs]=Virtuální stroj
-Name[cy]=Peiriant Rhith
-Name[da]=Virtuel maskine
-Name[de]=Virtuelle Maschine
-Name[el]=Εικονική μηχανή
-Name[eo]=Virtuala Maŝino
-Name[es]=Máquina virtual
-Name[et]=Virtuaalne Masin
-Name[eu]=Makina birtuala
-Name[fa]=ماشین مجازی
-Name[fi]=Virtuaalikone
-Name[fo]=Tyknismaskina
-Name[fr]=Machine virtuelle
-Name[fy]=Firtuele masine
-Name[ga]=Meaisín Fíorúil
-Name[gl]=Máquina virtual
-Name[he]=מכונה וירטואלית
-Name[hi]=आभासी यंत्र
-Name[hu]=Virtuális gép
-Name[is]=Sýndarvél
-Name[it]=Macchina virtuale
-Name[ja]=仮想マシン
-Name[ka]=ვირტუალური მანქანა
-Name[lt]=Virtuali Mašina
-Name[lv]=Virtuālā mašīna
-Name[mk]=Виртуелна машина
-Name[ms]=Mesin Maya
-Name[mt]=Magna Virtwali
-Name[nb]=Virtuell maskin
-Name[nds]=Virtuell Maschien
-Name[ne]=अवास्तविक मेशिन
-Name[nl]=Virtuele machine
-Name[nn]=Virtuell maskin
-Name[nso]=Motshene o Maatla
-Name[pl]=Maszyna wirtualna
-Name[pt]=Máquina Virtual
-Name[pt_BR]=Máquina virtual
-Name[ro]=Maşină virtuală
-Name[ru]=Виртуальная машина
-Name[sk]=Virtuálny stroj
-Name[sl]=Navidezni stroj
-Name[sr]=Виртуелна машина
-Name[sr@Latn]=Virtuelna mašina
-Name[sv]=Virtuell maskin
-Name[ta]=கற்பனை வாகனம்
-Name[tg]=Мошини уфуқӣ
-Name[th]=เครื่องจำลอง
-Name[tr]=Sanal Makine
-Name[uk]=Віртуальна машина
-Name[uz]=Virtual kompyuter
-Name[uz@cyrillic]=Виртуал компьютер
-Name[ven]=Mutshini usa vhonali
-Name[vi]=Máy Ảo
-Name[xh]=Umatshini onesiqhamo
-Name[zh_CN]=虚拟机
-Name[zh_TW]=虛擬機器
-Name[zu]=Ushini Obonakalayo
-
-[Desktop Action Setup]
-Exec=kvm.kss -setup
-Name=Setup...
-Name[af]=Opstelling...
-Name[bg]=Настройки...
-Name[br]=Kefluniadur ...
-Name[bs]=Postavke...
-Name[ca]=Arranjament...
-Name[cs]=Nastavení...
-Name[cy]=Gosod ...
-Name[da]=Opsætning...
-Name[de]=Einrichtung ...
-Name[el]=Ρύθμιση...
-Name[eo]=Agordo...
-Name[es]=Configuración...
-Name[et]=Seadistamine...
-Name[eu]=Konfiguratu...
-Name[fa]=برپایی...
-Name[fi]=Asetukset...
-Name[fo]=Uppseting...
-Name[fr]=Configuration...
-Name[fy]=Opset...
-Name[ga]=Cumraigh...
-Name[gl]=Configuración...
-Name[he]=הגדרות...
-Name[hi]=सेटअप...
-Name[hu]=Beállítás...
-Name[is]=Stillingar...
-Name[it]=Impostazioni...
-Name[ja]=設定...
-Name[ka]=გამართვა...
-Name[lt]=Sąranka ...
-Name[lv]=Uzstādīšana...
-Name[mk]=Поставување...
-Name[ms]=Setkan...
-Name[mt]=Konfigurazzjoni...
-Name[nb]=Innstillinger …
-Name[nds]=Instellen...
-Name[ne]=सेटअप...
-Name[nl]=Instellingen...
-Name[nn]=Oppsett …
-Name[nso]=Beakanya...
-Name[pa]=ਸੈਟਅੱਪ...
-Name[pl]=Ustawienia...
-Name[pt]=Configurar...
-Name[pt_BR]=Configurar...
-Name[ro]=Setează...
-Name[ru]=Настройка...
-Name[rw]=Iboneza...
-Name[sk]=Nastavenie...
-Name[sl]=Nastavi ...
-Name[sr]=Подеси...
-Name[sr@Latn]=Podesi...
-Name[sv]=Inställningar...
-Name[ta]=அமைப்பு...
-Name[tg]=Барпосозӣ...
-Name[th]=ติดตั้ง...
-Name[tr]=Kurulum...
-Name[uk]=Встановити...
-Name[uz]=Oʻrnatish
-Name[uz@cyrillic]=Ўрнатиш
-Name[ven]=Vhekanya...
-Name[vi]=Thiết lập...
-Name[xh]=Iyacwangciswa...
-Name[zh_CN]=设置...
-Name[zh_TW]=設定...
-Name[zu]=Iyalungiselela...
-Icon=kscreensaver
-
-[Desktop Action InWindow]
-Exec=kvm.kss -window-id %w
-Name=Display in Specified Window
-Name[bg]=Стартиране в избран прозорец
-Name[br]=Diskwel er prenestr spisaet
-Name[bs]=Prikaži u navedenom prozoru
-Name[ca]=Mostra a la finestra especificada
-Name[cs]=Zobrazit v určeném okně
-Name[cy]=Dangos mewn Ffenestr Benodol
-Name[da]=Visning i angivet vindue
-Name[de]=In bestimmten Fenster anzeigen
-Name[el]=Προβολή στο καθορισμένο παράθυρο
-Name[eo]=Montri en indikita fenestro
-Name[es]=Mostrar en la ventana especificada
-Name[et]=Määratud aknas näitamine
-Name[eu]=Bistaratu zehaztutako lehioan
-Name[fa]=نمایش در پنجرۀ مشخص‌شده
-Name[fi]=Näytä määrätyssä ikkunassa
-Name[fr]=Affichage dans la fenêtre spécifiée
-Name[fy]=Werjefte yn in definiearre finster
-Name[ga]=Taispeáin san Fhuinneog Sonraithe
-Name[gl]=Mostrar na fiestra indicada
-Name[he]=הצג בחלון המצוין
-Name[hi]=निर्दिष्ट विंडो में प्रदर्शित करें
-Name[hu]=Megjelenítés a megadott ablakban
-Name[is]=Birta í völdum glugga
-Name[it]=Mostra nella finestra specificata
-Name[ja]=特定のウィンドウで表示
-Name[ka]=ჩვენება მითითებულ ფანჯარაში
-Name[lt]=Rodyti nurodytame lange
-Name[mk]=Прикажи во наведениот прозорец
-Name[ms]=Papar dalam Tetingkap Yang Dinyatakan
-Name[nb]=Vis i angitt vindu
-Name[nds]=In utsöcht Finster wiesen
-Name[ne]=निर्दिष्ट सञ्झ्यालमा प्रदर्शन
-Name[nl]=Weergeven in een opgegeven venster
-Name[nn]=Vis i oppgjeve vindauge
-Name[pa]=ਦੱਸੇ ਝਰੋਖੇ ਵਿੱਚ ਵੇਖਾਓ
-Name[pl]=Wyświetl w zadanym oknie
-Name[pt]=Mostrar na Janela Indicada
-Name[pt_BR]=Mostrar em janela especificada
-Name[ro]=Afişează în fereastra specificată
-Name[ru]=Показывать в указанном окне
-Name[rw]=Kwerekana mu Idirishya Ryihariye
-Name[sk]=Zobraziť v zadanom okne
-Name[sl]=Prikaz v določenemu oknu
-Name[sr]=Прикажи у наведеном прозору
-Name[sr@Latn]=Prikaži u navedenom prozoru
-Name[sv]=Visa i angivet fönster
-Name[ta]=குறித்த சாளரத்தில் காட்டு
-Name[tg]=Дар тирезаи нишондода намоиш намоед
-Name[tr]=Belirtilen Pencerede Göster
-Name[uk]=Відобразити у вказаному вікні
-Name[vi]=Hiển thị trong Cửa sổ Đã định
-Name[zh_CN]=在指定的窗口中显示
-Name[zh_TW]=在指定的視窗中顯示
-NoDisplay=true
-
-[Desktop Action Root]
-Exec=kvm.kss -root
-Name=Display in Root Window
-Name[bg]=Стартиране в главния прозорец
-Name[br]=Diskwel er prenestr gwrizienn
-Name[bs]=Prikaži u korijenskom prozoru
-Name[ca]=Mostra a la finestra arrel
-Name[cs]=Zobrazit na pozadí plochy
-Name[cy]=Dangos mewn Ffenestr Wraidd
-Name[da]=Visning i root-vindue
-Name[de]=In Hintergrundfenster anzeigen
-Name[el]=Προβολή στο βασικό παράθυρο
-Name[eo]=Montri en radika fenestro
-Name[es]=Mostrar en la ventana raíz
-Name[et]=Juuraknas näitamine
-Name[eu]=Bistaratu erro lehioan
-Name[fa]=نمایش در پنجرۀ ریشه
-Name[fi]=Näytä juuri-ikkunassa
-Name[fr]=Affichage dans la fenêtre racine
-Name[fy]=Werjefte yn haadfinster
-Name[ga]=Taispeáin sa bhFréamhfhuinneog
-Name[gl]=Mostrar na fiestra raiz
-Name[he]=הצג בחלון השורש
-Name[hi]=रूट विंडो में प्रदर्शित करें
-Name[hu]=Megjelenítés a gyökérablakban
-Name[is]=Birta í rótarglugganum
-Name[it]=Mostra sullo sfondo
-Name[ja]=ルートウィンドウで表示
-Name[ka]=ჩვენება ძირითად ფანჯარაში
-Name[lt]=Rodyti root lange
-Name[mk]=Прикажи во коренскиот прозорец
-Name[ms]=Papar dalam Tetingkap Root
-Name[nb]=Vis i root-vindu
-Name[nds]=In Hööftfinster wiesen
-Name[ne]=मूल सञ्झ्यालमा प्रदर्शन
-Name[nl]=Weergeven in hoofdvenster
-Name[nn]=Vis i rotvindauget
-Name[pa]=Root ਝਰੋਖੇ ਵਿੱਚ ਵੇਖਾਓ
-Name[pl]=Wyświetl w oknie głównym
-Name[pt]=Mostrar na Janela de Fundo
-Name[pt_BR]=Mostrar na janela raiz
-Name[ro]=Afişează în fereastra rădăcină
-Name[ru]=Показывать в корневом окне
-Name[rw]=Kwerekana mu Idirishya Umuzi
-Name[sk]=Zobraziť v koreňovom okne
-Name[sl]=Prikaz v korenskem oknu
-Name[sr]=Прикажи у главном (root) прозору
-Name[sr@Latn]=Prikaži u glavnom (root) prozoru
-Name[sv]=Visa i rotfönstret
-Name[ta]=ஆரம்ப சாளரத்தில் காட்டு
-Name[tg]=Дар тирезаи решагӣ намоиш намоед
-Name[tr]=Kök Pencerede Göster
-Name[uk]=Відобразити в кореневому вікні
-Name[vi]=Hiển thị trong Cửa sổ Gốc
-Name[zh_CN]=在根窗口中显示
-Name[zh_TW]=在根視窗中顯示
-NoDisplay=true
diff --git a/kscreensaver/kdesavers/KWave.desktop b/kscreensaver/kdesavers/KWave.desktop
deleted file mode 100644
index 1049ac44..00000000
--- a/kscreensaver/kdesavers/KWave.desktop
+++ /dev/null
@@ -1,251 +0,0 @@
-[Desktop Entry]
-Exec=kwave.kss
-Icon=kscreensaver
-Type=Application
-Actions=Setup;InWindow;Root;
-X-TDE-Category=OpenGL Screen Savers
-X-TDE-Type=OpenGL
-Name=Bitmap Flag (GL)
-Name[af]=Biskaart Vlag (Gl)
-Name[bg]=Развяващ се флаг
-Name[ca]=Bandera de mapa de bits (GL)
-Name[cs]=Vlajka (GL)
-Name[cy]=Baner Didfap (GL)
-Name[da]=Bitmapflag (GL)
-Name[de]=Bildflagge
-Name[el]=Σημαία bitmap (GL)
-Name[eo]=Bildflago
-Name[es]=Bandera de mapa de bits (GL)
-Name[et]=Pildilipp (GL)
-Name[eu]=Bitmap Bandera (GL)
-Name[fa]=پرچم نگاشت بیت(GL)
-Name[fi]=Bittikarttalippu (GL)
-Name[fo]=Flagg (GL)
-Name[fr]=Drapeau (GL)
-Name[fy]=Bitmap flagge (GL)
-Name[gl]=Bandeira de mapa de bits (GL)
-Name[he]=דגל (GL)
-Name[hi]=झंडियाँ (जीएल)
-Name[hu]=Zászló (OpenGL)
-Name[is]=Myndafáni (GL)
-Name[it]=Bandiera bitmap (GL)
-Name[ja]=ビットマップフラッグ (GL)
-Name[ka]=რასტრული ალამი (GL)
-Name[lt]=Taškinės grafikos (bitmap) vėliava (GL)
-Name[lv]=Bitmapa Karogs (GL)
-Name[mk]=Битмапирано знаме (GL)
-Name[mt]=Bandiera bi stampa (GL)
-Name[nb]=Bittmap-flagg (GL)
-Name[nds]=Weihen Flagg (GL)
-Name[ne]=बिटम्याप झण्डा(GL)
-Name[nl]=Bitmap vlag (GL)
-Name[nn]=Flagg (GL)
-Name[pl]=Bitmapowa flaga (GL)
-Name[pt]=Imagem Ondulante (GL)
-Name[pt_BR]=Bitmap (GL)
-Name[ro]=Steag imagine (GL)
-Name[ru]=Растровый флаг (GL)
-Name[sk]=alajka (GL)
-Name[sl]=Bitna zastava (GL)
-Name[sr]=Битмапирана застава (GL)
-Name[sr@Latn]=Bitmapirana zastava (GL)
-Name[sv]=Bitmappsflagga (GL)
-Name[ta]=பிட்வரைப்பட குறி
-Name[tg]=Байрақи растрӣ (GL)
-Name[th]=ธงภาพบิตแมพ (GL)
-Name[tr]=Bayrak (GL)
-Name[uk]=Растровий прапор (GL)
-Name[uz]=Bayroq (GL)
-Name[uz@cyrillic]=Байроқ (GL)
-Name[ven]=Fulaga ya Bitmap (GL)
-Name[vi]=Cờ Mảng ảnh (GL)
-Name[xh]=Indwe ye Bitmap (GL)
-Name[zh_CN]=位图旗帜(GL)
-Name[zh_TW]=點陣圖旗幟 (GL)
-Name[zu]=Bitmap Flap (GL)
-
-
-[Desktop Action Setup]
-Exec=kwave.kss -setup
-Name=Setup...
-Name[af]=Opstelling...
-Name[bg]=Настройки...
-Name[br]=Kefluniadur ...
-Name[bs]=Postavke...
-Name[ca]=Arranjament...
-Name[cs]=Nastavení...
-Name[cy]=Gosod ...
-Name[da]=Opsætning...
-Name[de]=Einrichtung ...
-Name[el]=Ρύθμιση...
-Name[eo]=Agordo...
-Name[es]=Configuración...
-Name[et]=Seadistamine...
-Name[eu]=Konfiguratu...
-Name[fa]=برپایی...
-Name[fi]=Asetukset...
-Name[fo]=Uppseting...
-Name[fr]=Configuration...
-Name[fy]=Opset...
-Name[ga]=Cumraigh...
-Name[gl]=Configuración...
-Name[he]=הגדרות...
-Name[hi]=सेटअप...
-Name[hu]=Beállítás...
-Name[is]=Stillingar...
-Name[it]=Impostazioni...
-Name[ja]=設定...
-Name[ka]=გამართვა...
-Name[lt]=Sąranka ...
-Name[lv]=Uzstādīšana...
-Name[mk]=Поставување...
-Name[ms]=Setkan...
-Name[mt]=Konfigurazzjoni...
-Name[nb]=Innstillinger …
-Name[nds]=Instellen...
-Name[ne]=सेटअप...
-Name[nl]=Instellingen...
-Name[nn]=Oppsett …
-Name[nso]=Beakanya...
-Name[pa]=ਸੈਟਅੱਪ...
-Name[pl]=Ustawienia...
-Name[pt]=Configurar...
-Name[pt_BR]=Configurar...
-Name[ro]=Setează...
-Name[ru]=Настройка...
-Name[rw]=Iboneza...
-Name[sk]=Nastavenie...
-Name[sl]=Nastavi ...
-Name[sr]=Подеси...
-Name[sr@Latn]=Podesi...
-Name[sv]=Inställningar...
-Name[ta]=அமைப்பு...
-Name[tg]=Барпосозӣ...
-Name[th]=ติดตั้ง...
-Name[tr]=Kurulum...
-Name[uk]=Встановити...
-Name[uz]=Oʻrnatish
-Name[uz@cyrillic]=Ўрнатиш
-Name[ven]=Vhekanya...
-Name[vi]=Thiết lập...
-Name[xh]=Iyacwangciswa...
-Name[zh_CN]=设置...
-Name[zh_TW]=設定...
-Name[zu]=Iyalungiselela...
-Icon=kscreensaver
-
-[Desktop Action InWindow]
-Exec=kwave.kss -window-id %w
-Name=Display in Specified Window
-Name[bg]=Стартиране в избран прозорец
-Name[br]=Diskwel er prenestr spisaet
-Name[bs]=Prikaži u navedenom prozoru
-Name[ca]=Mostra a la finestra especificada
-Name[cs]=Zobrazit v určeném okně
-Name[cy]=Dangos mewn Ffenestr Benodol
-Name[da]=Visning i angivet vindue
-Name[de]=In bestimmten Fenster anzeigen
-Name[el]=Προβολή στο καθορισμένο παράθυρο
-Name[eo]=Montri en indikita fenestro
-Name[es]=Mostrar en la ventana especificada
-Name[et]=Määratud aknas näitamine
-Name[eu]=Bistaratu zehaztutako lehioan
-Name[fa]=نمایش در پنجرۀ مشخص‌شده
-Name[fi]=Näytä määrätyssä ikkunassa
-Name[fr]=Affichage dans la fenêtre spécifiée
-Name[fy]=Werjefte yn in definiearre finster
-Name[ga]=Taispeáin san Fhuinneog Sonraithe
-Name[gl]=Mostrar na fiestra indicada
-Name[he]=הצג בחלון המצוין
-Name[hi]=निर्दिष्ट विंडो में प्रदर्शित करें
-Name[hu]=Megjelenítés a megadott ablakban
-Name[is]=Birta í völdum glugga
-Name[it]=Mostra nella finestra specificata
-Name[ja]=特定のウィンドウで表示
-Name[ka]=ჩვენება მითითებულ ფანჯარაში
-Name[lt]=Rodyti nurodytame lange
-Name[mk]=Прикажи во наведениот прозорец
-Name[ms]=Papar dalam Tetingkap Yang Dinyatakan
-Name[nb]=Vis i angitt vindu
-Name[nds]=In utsöcht Finster wiesen
-Name[ne]=निर्दिष्ट सञ्झ्यालमा प्रदर्शन
-Name[nl]=Weergeven in een opgegeven venster
-Name[nn]=Vis i oppgjeve vindauge
-Name[pa]=ਦੱਸੇ ਝਰੋਖੇ ਵਿੱਚ ਵੇਖਾਓ
-Name[pl]=Wyświetl w zadanym oknie
-Name[pt]=Mostrar na Janela Indicada
-Name[pt_BR]=Mostrar em janela especificada
-Name[ro]=Afişează în fereastra specificată
-Name[ru]=Показывать в указанном окне
-Name[rw]=Kwerekana mu Idirishya Ryihariye
-Name[sk]=Zobraziť v zadanom okne
-Name[sl]=Prikaz v določenemu oknu
-Name[sr]=Прикажи у наведеном прозору
-Name[sr@Latn]=Prikaži u navedenom prozoru
-Name[sv]=Visa i angivet fönster
-Name[ta]=குறித்த சாளரத்தில் காட்டு
-Name[tg]=Дар тирезаи нишондода намоиш намоед
-Name[tr]=Belirtilen Pencerede Göster
-Name[uk]=Відобразити у вказаному вікні
-Name[vi]=Hiển thị trong Cửa sổ Đã định
-Name[zh_CN]=在指定的窗口中显示
-Name[zh_TW]=在指定的視窗中顯示
-NoDisplay=true
-
-[Desktop Action Root]
-Exec=kwave.kss -root
-Name=Display in Root Window
-Name[bg]=Стартиране в главния прозорец
-Name[br]=Diskwel er prenestr gwrizienn
-Name[bs]=Prikaži u korijenskom prozoru
-Name[ca]=Mostra a la finestra arrel
-Name[cs]=Zobrazit na pozadí plochy
-Name[cy]=Dangos mewn Ffenestr Wraidd
-Name[da]=Visning i root-vindue
-Name[de]=In Hintergrundfenster anzeigen
-Name[el]=Προβολή στο βασικό παράθυρο
-Name[eo]=Montri en radika fenestro
-Name[es]=Mostrar en la ventana raíz
-Name[et]=Juuraknas näitamine
-Name[eu]=Bistaratu erro lehioan
-Name[fa]=نمایش در پنجرۀ ریشه
-Name[fi]=Näytä juuri-ikkunassa
-Name[fr]=Affichage dans la fenêtre racine
-Name[fy]=Werjefte yn haadfinster
-Name[ga]=Taispeáin sa bhFréamhfhuinneog
-Name[gl]=Mostrar na fiestra raiz
-Name[he]=הצג בחלון השורש
-Name[hi]=रूट विंडो में प्रदर्शित करें
-Name[hu]=Megjelenítés a gyökérablakban
-Name[is]=Birta í rótarglugganum
-Name[it]=Mostra sullo sfondo
-Name[ja]=ルートウィンドウで表示
-Name[ka]=ჩვენება ძირითად ფანჯარაში
-Name[lt]=Rodyti root lange
-Name[mk]=Прикажи во коренскиот прозорец
-Name[ms]=Papar dalam Tetingkap Root
-Name[nb]=Vis i root-vindu
-Name[nds]=In Hööftfinster wiesen
-Name[ne]=मूल सञ्झ्यालमा प्रदर्शन
-Name[nl]=Weergeven in hoofdvenster
-Name[nn]=Vis i rotvindauget
-Name[pa]=Root ਝਰੋਖੇ ਵਿੱਚ ਵੇਖਾਓ
-Name[pl]=Wyświetl w oknie głównym
-Name[pt]=Mostrar na Janela de Fundo
-Name[pt_BR]=Mostrar na janela raiz
-Name[ro]=Afişează în fereastra rădăcină
-Name[ru]=Показывать в корневом окне
-Name[rw]=Kwerekana mu Idirishya Umuzi
-Name[sk]=Zobraziť v koreňovom okne
-Name[sl]=Prikaz v korenskem oknu
-Name[sr]=Прикажи у главном (root) прозору
-Name[sr@Latn]=Prikaži u glavnom (root) prozoru
-Name[sv]=Visa i rotfönstret
-Name[ta]=ஆரம்ப சாளரத்தில் காட்டு
-Name[tg]=Дар тирезаи решагӣ намоиш намоед
-Name[tr]=Kök Pencerede Göster
-Name[uk]=Відобразити в кореневому вікні
-Name[vi]=Hiển thị trong Cửa sổ Gốc
-Name[zh_CN]=在根窗口中显示
-Name[zh_TW]=在根視窗中顯示
-NoDisplay=true
diff --git a/kscreensaver/kdesavers/Makefile.am b/kscreensaver/kdesavers/Makefile.am
deleted file mode 100644
index f5901663..00000000
--- a/kscreensaver/kdesavers/Makefile.am
+++ /dev/null
@@ -1,109 +0,0 @@
-# $Id$
-# Makefile.am for kscreensaver.
-#
-
-SUBDIRS = . data
-
-AM_CPPFLAGS = -UQT_NO_ASCII_CAST
-
-INCLUDES = $(all_includes) $(GLINC) $(LIBART_CFLAGS)
-AM_LDFLAGS = $(all_libraries) $(KDE_RPATH) $(LIB_QT) -lDCOP $(LIB_TDECORE) $(LIB_TDEUI) -ltdefx $(LIB_KIO) -lktexteditor
-AM_LDADD = $(LIB_TDEUI) -lkscreensaver
-
-if COMPILE_X11_KSAVERS
-X11_KSAVERS = kscience.kss
-X11_DESKTOP_FILES = KScience.desktop
-endif
-
-if COMPILE_LIBART_KSAVERS
-LIBART_KSAVERS = kclock.kss
-LIBART_DESKTOP_FILES = KClock.desktop
-endif
-LIBART_KSAVERS_LDADD = $(AM_LDADD) $(LIBART_LIBS)
-
-if COMPILE_ARTS_GL_KSAVERS
-ARTS_GL_KSAVERS = kfiresaver.kss
-ARTS_GL_DESKTOP_FILES = KFiresaver.desktop
-endif
-
-if COMPILE_GL_KSAVERS
-GL_KSAVERS=kfountain.kss kwave.kss kgravity.kss kflux.kss keuphoria.kss ksolarwinds.kss krotation.kss kpendulum.kss
-GL_DESKTOP_FILES=KGravity.desktop KWave.desktop KFountain.desktop KFlux.desktop KEuphoria.desktop KSolarWinds.desktop KRotation.desktop KPendulum.desktop
-endif
-GL_KSAVERS_LDADD = $(AM_LDADD) $(GLLIB)
-
-bin_PROGRAMS = kbanner.kss kpolygon.kss kslideshow.kss \
- klines.kss klorenz.kss kblob.kss kvm.kss \
- $(X11_KSAVERS) $(LIBART_KSAVERS) $(ARTS_GL_KSAVERS) $(GL_KSAVERS)
-
-# The "normal" screensavers
-kbanner_kss_SOURCES = banner.cpp
-kbanner_kss_LDADD = $(AM_LDADD)
-kpolygon_kss_SOURCES = polygon.cpp
-kpolygon_kss_LDADD = $(AM_LDADD)
-kslideshow_kss_SOURCES = slideshow.cpp slideshowcfg.ui
-kslideshow_kss_LDADD = $(LIB_KFILE) $(AM_LDADD) $(LIB_KSYCOCA) -lm
-klines_kss_SOURCES = lines.cpp
-klines_kss_LDADD = $(AM_LDADD)
-klorenz_kss_SOURCES = lorenz.cpp
-klorenz_kss_LDADD = $(AM_LDADD) -lm
-kblob_kss_SOURCES = blob.cpp
-kblob_kss_LDADD = $(AM_LDADD) -lm
-kvm_kss_SOURCES = kvm.cpp vm.c vm_random.c
-kvm_kss_LDADD = $(AM_LDADD)
-kscience_kss_SOURCES = science.cpp
-kscience_kss_LDADD = $(AM_LDADD) -lm
-
-# The GL screensavers
-kfountain_kss_SOURCES = fountain.cpp fountaincfg.ui
-kfountain_kss_LDADD = $(GL_KSAVERS_LDADD) -lm
-kwave_kss_SOURCES = wave.cpp wavecfg.ui
-kwave_kss_LDADD = $(GL_KSAVERS_LDADD) -lm
-kgravity_kss_SOURCES = gravity.cpp gravitycfg.ui
-kgravity_kss_LDADD = $(GL_KSAVERS_LDADD) -lm
-kflux_kss_SOURCES = Flux.cpp
-kflux_kss_LDADD = $(GL_KSAVERS_LDADD) -lm
-keuphoria_kss_SOURCES = Euphoria.cpp
-keuphoria_kss_LDADD = $(GL_KSAVERS_LDADD) -lm
-ksolarwinds_kss_SOURCES = SolarWinds.cpp
-ksolarwinds_kss_LDADD = $(GL_KSAVERS_LDADD) -lm
-krotation_kss_SOURCES = rotation.cpp rotationcfg.ui sspreviewarea.cpp rkodesolver.cpp vec3.cpp
-krotation_kss_LDADD = $(GL_KSAVERS_LDADD) -lm
-kpendulum_kss_SOURCES = pendulum.cpp pendulumcfg.ui sspreviewarea.cpp rkodesolver.cpp
-kpendulum_kss_LDADD = $(GL_KSAVERS_LDADD) -lm
-kfiresaver_kss_SOURCES = firesaversetup.ui firesaverparticle.cpp firesaverwriter.cpp firesaver.cpp
-kfiresaver_kss_LDADD = $(GL_KSAVERS_LDADD) -lartskde -lm
-
-# The LIBART screensavers
-kclock_kss_SOURCES = kclock.cpp
-kclock_kss_LDADD = $(LIBART_KSAVERS_LDADD)
-
-METASOURCES = AUTO
-
-noinst_HEADERS = banner.h polygon.h slideshow.h lines.h\
- lorenz.h blob.h kvm.h vm.h vm_random.h science.h \
- fountain.h wave.h gravity.h kclock.h\
- rotation.h pendulum.h sspreviewarea.h rkodesolver.h vec3.h\
- firesaver.h firesaverparticle.h firesaversetup.ui.h\
- firesaverwriter.h
-
-########## Meta objects ##########
-
-pics_DATA = kscience.png particle.png image.png
-picsdir = $(kde_datadir)/kscreensaver
-
-if COMPILE_LIBART_KSAVERS
-desktop_DATA = KBanner.desktop KPolygon.desktop \
- KSlideshow.desktop KLines-saver.desktop KLorenz.desktop \
- KBlob.desktop KVm.desktop \
- $(X11_DESKTOP_FILES) $(GL_DESKTOP_FILES) $(LIBART_DESKTOP_FILES) $(ARTS_GL_DESKTOP_FILES)
-else
-desktop_DATA = KBanner.desktop KPolygon.desktop \
- KSlideshow.desktop KLines-saver.desktop KLorenz.desktop \
- KBlob.desktop KVm.desktop \
- KClock.desktop $(X11_DESKTOP_FILES) $(GL_DESKTOP_FILES) $(LIBART_DESKTOP_FILES) $(ARTS_GL_DESKTOP_FILES)
-endif
-
-desktopdir = $(kde_appsdir)/System/ScreenSavers
-
-EXTRA_DIST = $(desktop_DATA) vm.xpm vm.xbm kscience.png particle.png image.png
diff --git a/kscreensaver/kdesavers/README b/kscreensaver/kdesavers/README
deleted file mode 100644
index 694adefd..00000000
--- a/kscreensaver/kdesavers/README
+++ /dev/null
@@ -1,3 +0,0 @@
-These are native KDE screensavers using the libkscreensaver library.
-If you are writing a screensaver for KDE use these as references rather
-than the ported savers.
diff --git a/kscreensaver/kdesavers/SolarWinds.cpp b/kscreensaver/kdesavers/SolarWinds.cpp
deleted file mode 100644
index b464a8de..00000000
--- a/kscreensaver/kdesavers/SolarWinds.cpp
+++ /dev/null
@@ -1,778 +0,0 @@
-//============================================================================
-//
-// Terence Welsh Screensaver - Solar Winds
-// http://www.reallyslick.com/
-//
-// Ported to KDE by Karl Robillard
-//
-/*
- * Copyright (C) 2002 Terence M. Welsh
- *
- * Solar Winds is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- *
- * Solar Winds is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-//============================================================================
-
-
-#include <stdio.h>
-#include <math.h>
-#include <stdlib.h>
-#include <time.h>
-#include <tqtimer.h>
-#include "SolarWinds.h"
-#include "SolarWinds.moc"
-
-
-#define NUMCONSTS 9
-#define PIx2 6.28318530718f
-#define DEG2RAD 0.0174532925f
-
-
-// Useful random number macro
-// Don't forget to initialize with srand()
-
-// This is the original myRandf() which does not work on Linux.
-// I grabed the inline version from Flux.cpp.
-//#define myRandf(x) (float(rand()) * (x * 0.0000305185095f))
-
-inline float myRandf(float x){
- return(float(rand() * x) / float(RAND_MAX));
-}
-
-
-// Context pointer to allow many instances.
-static SWindsWidget* _ec = 0;
-
-
-struct Emitter
-{
- float x, y, z;
-};
-
-
-struct Particle
-{
- float x, y, z;
- float r, g, b;
-};
-
-
-class wind
-{
-public:
-
- wind();
- ~wind();
- void update();
-
- Emitter* emitters;
- Particle* particles;
- int** linelist;
- int* lastparticle;
- int whichparticle;
- int partCount;
- int emitCount;
- bool useLines;
- float c[NUMCONSTS];
- float ct[NUMCONSTS];
- float cv[NUMCONSTS];
-};
-
-
-wind::wind()
-{
- int i;
-
- partCount = _ec->dParticles;
- emitCount = _ec->dEmitters;
- useLines = (_ec->dGeometry == 2);
-
- emitters = new Emitter[emitCount];
- for(i=0; i<emitCount; i++)
- {
- emitters[i].x = myRandf(60.0f) - 30.0f;
- emitters[i].y = myRandf(60.0f) - 30.0f;
- emitters[i].z = myRandf(30.0f) - 15.0f;
- }
-
- particles = new Particle[partCount];
- for(i=0; i<partCount; i++)
- {
- particles[i].x = 0.0f;
- particles[i].y = 0.0f;
- particles[i].z = 100.0f; // start particles behind viewer
- }
-
- whichparticle = 0;
-
- if( useLines )
- {
- linelist = new int*[partCount];
- for(i=0; i<partCount; i++)
- {
- linelist[i] = new int[2];
- linelist[i][0] = -1;
- linelist[i][1] = -1;
- }
- lastparticle = new int[emitCount];
- for(i=0; i<emitCount; i++)
- lastparticle[i] = i;
- }
-
- float windspeed = (float) (_ec->dWindspeed);
- for(i=0; i<NUMCONSTS; i++)
- {
- ct[i] = myRandf(PIx2);
- cv[i] = myRandf(0.00005f * windspeed * windspeed)
- + 0.00001f * windspeed * windspeed;
- //printf( "KR ct %g cv %g\n", ct[i], cv[i] );
- }
-}
-
-
-wind::~wind()
-{
- delete[] emitters;
- delete[] particles;
-
- if( useLines )
- {
- int i;
- for(i=0; i<partCount; i++)
- delete[] linelist[i];
- delete[] linelist;
- delete[] lastparticle;
- }
-}
-
-
-void wind::update()
-{
- int i;
- float x, y, z;
- float temp;
- float particleSpeed = (float) _ec->dParticlespeed;
-
- float evel = float(_ec->dEmitterspeed) * 0.01f;
- float pvel = particleSpeed * 0.01f;
- float pointsize = 0.04f * _ec->dSize;
- float linesize = 0.005f * _ec->dSize;
-
- // update constants
- for(i=0; i<NUMCONSTS; i++)
- {
- ct[i] += cv[i];
- if(ct[i] > PIx2)
- ct[i] -= PIx2;
- c[i] = cos(ct[i]);
- }
-
- // calculate emissions
- for(i=0; i<emitCount; i++)
- {
- emitters[i].z += evel; // emitter moves toward viewer
- if(emitters[i].z > 15.0f)
- {
- // reset emitter
- emitters[i].x = myRandf(60.0f) - 30.0f;
- emitters[i].y = myRandf(60.0f) - 30.0f;
- emitters[i].z = -15.0f;
- }
-
- particles[whichparticle].x = emitters[i].x;
- particles[whichparticle].y = emitters[i].y;
- particles[whichparticle].z = emitters[i].z;
-
- if( useLines )
- {
- // link particles to form lines
- if(linelist[whichparticle][0] >= 0)
- linelist[linelist[whichparticle][0]][1] = -1;
- linelist[whichparticle][0] = -1;
- if(emitters[i].z == -15.0f)
- linelist[whichparticle][1] = -1;
- else
- linelist[whichparticle][1] = lastparticle[i];
- linelist[lastparticle[i]][0] = whichparticle;
- lastparticle[i] = whichparticle;
- }
-
- whichparticle++;
- if(whichparticle >= partCount)
- whichparticle = 0;
- }
-
- // calculate particle positions and colors
- // first modify constants that affect colors
- c[6] *= 9.0f / particleSpeed;
- c[7] *= 9.0f / particleSpeed;
- c[8] *= 9.0f / particleSpeed;
- // then update each particle
- for(i=0; i<partCount; i++)
- {
- Particle* part = particles + i;
-
- // store old positions
- x = part->x;
- y = part->y;
- z = part->z;
-
- // make new positins
- part->x = x + (c[0] * y + c[1] * z) * pvel;
- part->y = y + (c[2] * z + c[3] * x) * pvel;
- part->z = z + (c[4] * x + c[5] * y) * pvel;
-
- // calculate colors
- part->r = fabs((part->x - x) * c[6]);
- part->g = fabs((part->y - y) * c[7]);
- part->b = fabs((part->z - z) * c[8]);
-
- // clamp colors
- if( part->r > 1.0f )
- part->r = 1.0f;
- if( part->g > 1.0f )
- part->g = 1.0f;
- if( part->b > 1.0f )
- part->b = 1.0f;
- }
-
- // draw particles
- switch(_ec->dGeometry)
- {
- case 0: // lights
- for(i=0; i<partCount; i++)
- {
- glColor3fv(&particles[i].r);
- glPushMatrix();
- glTranslatef(particles[i].x, particles[i].y, particles[i].z);
- glCallList(1);
- glPopMatrix();
-#if 0
- if( i == 0 )
- printf( "KR %d %g %g %g\n", i,
- particles[i].x, particles[i].y, particles[i].z);
-#endif
- }
- break;
-
- case 1: // points
- for(i=0; i<partCount; i++)
- {
- temp = particles[i].z + 40.0f;
- if(temp < 0.01f)
- temp = 0.01f;
- glPointSize(pointsize * temp);
-
- glBegin(GL_POINTS);
- glColor3fv(&particles[i].r);
- glVertex3fv(&particles[i].x);
- glEnd();
- }
- break;
-
- case 2: // lines
- for(i=0; i<partCount; i++)
- {
- temp = particles[i].z + 40.0f;
- if(temp < 0.01f)
- temp = 0.01f;
- glLineWidth(linesize * temp);
-
- glBegin(GL_LINES);
- if(linelist[i][1] >= 0)
- {
- glColor3fv(&particles[i].r);
- if(linelist[i][0] == -1)
- glColor3f(0.0f, 0.0f, 0.0f);
- glVertex3fv(&particles[i].x);
-
- glColor3fv(&particles[linelist[i][1]].r);
- if(linelist[linelist[i][1]][1] == -1)
- glColor3f(0.0f, 0.0f, 0.0f);
- glVertex3fv(&particles[linelist[i][1]].x);
- }
- glEnd();
- }
- }
-}
-
-
-//----------------------------------------------------------------------------
-
-
-SWindsWidget::SWindsWidget( TQWidget* parent, const char* name )
- : TQGLWidget(parent, name), _winds(0)
-{
- setDefaults( Regular );
-
- _frameTime = 1000 / 60;
- _timer = new TQTimer( this );
- connect( _timer, TQT_SIGNAL(timeout()), this, TQT_SLOT(nextFrame()) );
-}
-
-
-SWindsWidget::~SWindsWidget()
-{
- // Free memory
- delete[] _winds;
-}
-
-
-void SWindsWidget::paintGL()
-{
- glLoadIdentity();
-
- if( ! dBlur )
- {
- glClear(GL_COLOR_BUFFER_BIT);
- }
- else
- {
- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
- glColor4f(0.0f, 0.0f, 0.0f, 0.5f - (float(dBlur) * 0.0049f));
-
- glBegin(GL_QUADS);
- glVertex3f(-40.0f, -17.0f, 0.0f);
- glVertex3f(40.0f, -17.0f, 0.0f);
- glVertex3f(40.0f, 17.0f, 0.0f);
- glVertex3f(-40.0f, 17.0f, 0.0f);
- glEnd();
-
- if(!dGeometry)
- glBlendFunc(GL_ONE, GL_ONE);
- else
- glBlendFunc(GL_SRC_ALPHA, GL_ONE); // Necessary for point and line smoothing (I don't know why)
- // Maybe it's just my video card...
- }
-
- // You should need to draw twice if using blur, once to each buffer.
- // But wglSwapLayerBuffers appears to copy the back to the
- // front instead of just switching the pointers to them. It turns
- // out that both NVidia and 3dfx prefer to use PFD_SWAP_COPY instead
- // of PFD_SWAP_EXCHANGE in the PIXELFORMATDESCRIPTOR. I don't know why...
- // So this may not work right on other platforms or all video cards.
-
- // Update surfaces
- if( _winds )
- {
- _ec = this;
- int i;
- for(i=0; i<dWinds; i++)
- _winds[i].update();
- }
-
- glFlush();
-}
-
-
-void SWindsWidget::resizeGL( int w, int h )
-{
- glViewport(0, 0, w, h );
-
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity();
- gluPerspective(90.0, (float) w / (float) h, 1.0, 10000);
- glTranslatef(0.0, 0.0, -15.0);
- glMatrixMode(GL_MODELVIEW);
- glLoadIdentity();
-}
-
-
-// Window initialization
-void SWindsWidget::initializeGL()
-{
- updateParameters();
- _timer->start( _frameTime, true );
-}
-
-
-#ifdef UNIT_TEST
-void SWindsWidget::keyPressEvent( TQKeyEvent* e )
-{
- if( e->key() == TQt::Key_0 ) { setDefaults( 0 ); updateParameters(); }
- if( e->key() == TQt::Key_1 ) { setDefaults( 1 ); updateParameters(); }
- if( e->key() == TQt::Key_2 ) { setDefaults( 2 ); updateParameters(); }
- if( e->key() == TQt::Key_3 ) { setDefaults( 3 ); updateParameters(); }
- if( e->key() == TQt::Key_4 ) { setDefaults( 4 ); updateParameters(); }
- if( e->key() == TQt::Key_5 ) { setDefaults( 5 ); updateParameters(); }
-}
-#endif
-
-
-void SWindsWidget::nextFrame()
-{
- updateGL();
- _timer->start( _frameTime, true );
-}
-
-
-void SWindsWidget::updateParameters()
-{
- int i, j;
- float x, y, temp;
-
- srand((unsigned)time(NULL));
- rand(); rand(); rand(); rand(); rand();
-
- glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
- glClear(GL_COLOR_BUFFER_BIT);
-
- if(!dGeometry)
- glBlendFunc(GL_ONE, GL_ONE);
- else
- glBlendFunc(GL_SRC_ALPHA, GL_ONE); // Necessary for point and line smoothing (I don't know why)
- glEnable(GL_BLEND);
-
- if( ! dGeometry )
- {
- // Init lights
- for(i=0; i<LIGHTSIZE; i++)
- {
- for(j=0; j<LIGHTSIZE; j++)
- {
- x = float(i - LIGHTSIZE / 2) / float(LIGHTSIZE / 2);
- y = float(j - LIGHTSIZE / 2) / float(LIGHTSIZE / 2);
- temp = 1.0f - float(sqrt((x * x) + (y * y)));
- if(temp > 1.0f)
- temp = 1.0f;
- if(temp < 0.0f)
- temp = 0.0f;
- lightTexture[i][j] = (unsigned char) (255.0f * temp);
- }
- }
-
- glEnable(GL_TEXTURE_2D);
- glBindTexture(GL_TEXTURE_2D, 1);
- glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
- glTexImage2D(GL_TEXTURE_2D, 0, 1, LIGHTSIZE, LIGHTSIZE, 0,
- GL_LUMINANCE, GL_UNSIGNED_BYTE, lightTexture);
-
- temp = 0.02f * dSize;
- glNewList(1, GL_COMPILE);
- glBindTexture(GL_TEXTURE_2D, 1);
- glBegin(GL_TRIANGLE_STRIP);
- glTexCoord2f(0.0f, 0.0f);
- glVertex3f(-temp, -temp, 0.0f);
- glTexCoord2f(1.0f, 0.0f);
- glVertex3f(temp, -temp, 0.0f);
- glTexCoord2f(0.0f, 1.0f);
- glVertex3f(-temp, temp, 0.0f);
- glTexCoord2f(1.0f, 1.0f);
- glVertex3f(temp, temp, 0.0f);
- glEnd();
- glEndList();
- }
- else if(dGeometry == 1)
- {
- // init point smoothing
- glEnable(GL_POINT_SMOOTH);
- glHint(GL_POINT_SMOOTH_HINT, GL_NICEST);
-
- glDisable(GL_TEXTURE_2D);
- }
- else if(dGeometry == 2)
- {
- // init line smoothing
- glEnable(GL_LINE_SMOOTH);
- glHint(GL_LINE_SMOOTH_HINT, GL_NICEST);
-
- glDisable(GL_TEXTURE_2D);
- }
-
-
- // Initialize surfaces
- _ec = this;
- delete[] _winds;
- _winds = new wind[dWinds];
-}
-
-
-/**
- May be called at any time - makes no OpenGL calls.
-*/
-void SWindsWidget::setDefaults(int which)
-{
- switch(which)
- {
- case CosmicStrings:
- dWinds = 1;
- dEmitters = 50;
- dParticles = 3000;
- dGeometry = 2;
- dSize = 20;
- dWindspeed = 10;
- dEmitterspeed = 10;
- dParticlespeed = 10;
- dBlur = 10;
- break;
-
- case ColdPricklies:
- dWinds = 1;
- dEmitters = 300;
- dParticles = 3000;
- dGeometry = 2;
- dSize = 5;
- dWindspeed = 20;
- dEmitterspeed = 100;
- dParticlespeed = 15;
- dBlur = 70;
- break;
-
- case SpaceFur:
- dWinds = 2;
- dEmitters = 400;
- dParticles = 1600;
- dGeometry = 2;
- dSize = 15;
- dWindspeed = 20;
- dEmitterspeed = 15;
- dParticlespeed = 10;
- dBlur = 0;
- break;
-
- case Jiggly:
- dWinds = 1;
- dEmitters = 40;
- dParticles = 1200;
- dGeometry = 1;
- dSize = 20;
- dWindspeed = 100;
- dEmitterspeed = 20;
- dParticlespeed = 4;
- dBlur = 50;
- break;
-
- case Undertow:
- dWinds = 1;
- dEmitters = 400;
- dParticles = 1200;
- dGeometry = 0;
- dSize = 40;
- dWindspeed = 20;
- dEmitterspeed = 1;
- dParticlespeed = 100;
- dBlur = 50;
- break;
-
- case Regular:
- default:
- dWinds = 1;
- dEmitters = 30;
- dParticles = 2000;
- dGeometry = 0;
- dSize = 50;
- dWindspeed = 20;
- dEmitterspeed = 15;
- dParticlespeed = 10;
- dBlur = 40;
- break;
- }
-}
-
-
-//----------------------------------------------------------------------------
-
-
-#ifndef UNIT_TEST
-#include <klocale.h>
-#include <kglobal.h>
-#include <kconfig.h>
-
-
-// libkscreensaver interface
-extern "C"
-{
- KDE_EXPORT const char* kss_applicationName = "ksolarwinds.kss";
- KDE_EXPORT const char* kss_description = I18N_NOOP( "Solar Winds" );
- KDE_EXPORT const char* kss_version = "1.0";
-
- KDE_EXPORT KScreenSaver* kss_create( WId id )
- {
- return new KSWindsScreenSaver( id );
- }
-
- KDE_EXPORT TQDialog* kss_setup()
- {
- return new KSWindsSetup;
- }
-}
-
-
-//----------------------------------------------------------------------------
-
-
-KSWindsScreenSaver::KSWindsScreenSaver( WId id ) : KScreenSaver( id )
-{
- _flux = new SWindsWidget;
-
- readSettings();
-
- embed( _flux );
- _flux->show();
-}
-
-
-KSWindsScreenSaver::~KSWindsScreenSaver()
-{
-}
-
-
-static int filterRandom( int n )
-{
- if( (n < 0) || (n >= SWindsWidget::DefaultModes) )
- {
- srand((unsigned)time(NULL));
- n = rand() % SWindsWidget::DefaultModes;
- }
- return n;
-}
-
-
-void KSWindsScreenSaver::readSettings()
-{
- TDEConfig* config = TDEGlobal::config();
- config->setGroup("Settings");
-
- _mode = config->readNumEntry( "Mode", SWindsWidget::Regular );
- _flux->setDefaults( filterRandom(_mode) );
-}
-
-
-/**
- Any invalid mode will select one at random.
-*/
-void KSWindsScreenSaver::setMode( int id )
-{
- _mode = id;
- _flux->setDefaults( filterRandom(id) );
- _flux->updateParameters();
-}
-
-
-//----------------------------------------------------------------------------
-
-
-#include <tqlayout.h>
-#include <tqlabel.h>
-#include <tqcombobox.h>
-#include <kmessagebox.h>
-
-
-static const char* defaultText[] =
-{
- I18N_NOOP( "Regular" ),
- I18N_NOOP( "Cosmic Strings" ),
- I18N_NOOP( "Cold Pricklies" ),
- I18N_NOOP( "Space Fur" ),
- I18N_NOOP( "Jiggly" ),
- I18N_NOOP( "Undertow" ),
- I18N_NOOP( "(Random)" ),
- 0
-};
-
-
-KSWindsSetup::KSWindsSetup( TQWidget* parent, const char* name )
- : KDialogBase( parent, name, true, i18n( "Setup Solar Wind" ),
- Ok|Cancel|Help, Ok, true )
-{
- setButtonText( Help, i18n( "A&bout" ) );
- TQWidget *main = makeMainWidget();
-
- TQHBoxLayout* top = new TQHBoxLayout( main, 0, spacingHint() );
-
- TQVBoxLayout* leftCol = new TQVBoxLayout;
- top->addLayout( leftCol );
-
- TQLabel* label = new TQLabel( i18n("Mode:"), main );
- leftCol->addWidget( label );
-
- modeW = new TQComboBox( main );
- int i = 0;
- while (defaultText[i])
- modeW->insertItem( i18n(defaultText[i++]) );
- leftCol->addWidget( modeW );
-
- leftCol->addStretch();
-
- // Preview
- TQWidget* preview;
- preview = new TQWidget( main );
- preview->setFixedSize( 220, 165 );
- preview->setBackgroundColor( black );
- preview->show(); // otherwise saver does not get correct size
- _saver = new KSWindsScreenSaver( preview->winId() );
- top->addWidget(preview);
-
- // Now that we have _saver...
- modeW->setCurrentItem( _saver->mode() ); // set before we connect
- connect( modeW, TQT_SIGNAL(activated(int)), _saver, TQT_SLOT(setMode(int)) );
-}
-
-
-KSWindsSetup::~KSWindsSetup()
-{
- delete _saver;
-}
-
-
-void KSWindsSetup::slotHelp()
-{
- KMessageBox::about(this,
- i18n("<h3>Solar Winds 1.0</h3>\n<p>Copyright (c) 2002 Terence M. Welsh<br>\n<a href=\"http://www.reallyslick.com/\">http://www.reallyslick.com/</a></p>\n\n<p>Ported to KDE by Karl Robillard</p>"),
- TQString(), KMessageBox::AllowLink);
-}
-
-
-/**
- Ok pressed - save settings and exit
-*/
-void KSWindsSetup::slotOk()
-{
- TDEConfig* config = TDEGlobal::config();
- config->setGroup("Settings");
-
- TQString val;
- val.setNum( modeW->currentItem() );
- config->writeEntry("Mode", val );
-
- config->sync();
- accept();
-}
-#endif
-
-
-//----------------------------------------------------------------------------
-
-
-#ifdef UNIT_TEST
-// moc SolarWinds.h -o SolarWinds.moc
-// g++ -g -DUNIT_TEST SolarWinds.cpp -I/usr/lib/qt3/include -lqt -L/usr/lib/qt3/lib -lGLU -lGL
-
-#include <tqapplication.h>
-
-int main( int argc, char** argv )
-{
- TQApplication app( argc, argv );
-
- SWindsWidget w;
- app.setMainWidget( &w );
- w.show();
-
- return app.exec();
-}
-#endif
-
-
-//EOF
diff --git a/kscreensaver/kdesavers/SolarWinds.h b/kscreensaver/kdesavers/SolarWinds.h
deleted file mode 100644
index 1ad445d4..00000000
--- a/kscreensaver/kdesavers/SolarWinds.h
+++ /dev/null
@@ -1,141 +0,0 @@
-#ifndef __SOLARWINDS_H__
-#define __SOLARWINDS_H__
-//============================================================================
-//
-// Terence Welsh Screensaver - Solar Winds
-// http://www.reallyslick.com/
-//
-// Ported to KDE by Karl Robillard
-//
-//============================================================================
-
-
-#include <tqgl.h>
-
-
-#define LIGHTSIZE 64
-
-
-class wind;
-class TQTimer;
-
-class SWindsWidget : public TQGLWidget
-{
- Q_OBJECT
-
-
-public:
-
- enum eDefault
- {
- Regular,
- CosmicStrings,
- ColdPricklies,
- SpaceFur,
- Jiggly,
- Undertow,
-
- DefaultModes
- };
-
- SWindsWidget( TQWidget* parent=0, const char* name=0 );
- ~SWindsWidget();
-
- void updateParameters();
- void setDefaults( int which );
-
-protected:
-
- void paintGL();
- void resizeGL( int w, int h );
- void initializeGL();
-#ifdef UNIT_TEST
- void keyPressEvent( TQKeyEvent* );
-#endif
-
-private slots:
-
- void nextFrame();
-
-private:
-
- wind* _winds;
- unsigned char lightTexture[LIGHTSIZE][LIGHTSIZE];
-
- int dWinds;
- int dEmitters;
- int dParticles;
- int dGeometry;
- float dSize;
- int dParticlespeed;
- int dEmitterspeed;
- int dWindspeed;
- int dBlur;
-
-
- // Using TQTimer rather than timerEvent() to avoid getting locked out of
- // the TQEvent loop on lower-end systems. Ian Geiser <[email protected]>
- // says this is the way to go.
- TQTimer* _timer;
- int _frameTime;
-
- friend class wind;
-};
-
-
-#ifndef UNIT_TEST
-#include <kdialogbase.h>
-#include <kscreensaver.h>
-
-
-class KSWindsScreenSaver : public KScreenSaver
-{
- Q_OBJECT
-
-
-public:
-
- KSWindsScreenSaver( WId id );
- virtual ~KSWindsScreenSaver();
-
- int mode() const { return _mode; }
-
-public slots:
-
- void setMode( int );
-
-private:
-
- void readSettings();
-
- SWindsWidget* _flux;
- int _mode;
-};
-
-
-class TQComboBox;
-
-class KSWindsSetup : public KDialogBase
-{
- Q_OBJECT
-
-
-public:
-
- KSWindsSetup( TQWidget* parent = 0, const char* name = 0 );
- ~KSWindsSetup();
-
-private slots:
-
- void slotHelp();
- void slotOk();
-
-private:
-
- TQComboBox* modeW;
- KSWindsScreenSaver* _saver;
-};
-#endif
-
-
-#endif //__SOLARWINDS_H__
diff --git a/kscreensaver/kdesavers/banner.cpp b/kscreensaver/kdesavers/banner.cpp
deleted file mode 100644
index a1672b27..00000000
--- a/kscreensaver/kdesavers/banner.cpp
+++ /dev/null
@@ -1,509 +0,0 @@
-//-----------------------------------------------------------------------------
-//
-// kbanner - Basic screen saver for KDE
-//
-// Copyright (c) Martin R. Jones 1996
-//
-// layout management added 1998/04/19 by Mario Weilguni <[email protected]>
-// clock function and color cycling added 2000/01/09 by Alexander Neundorf <[email protected]>
-// 2001/03/04 Converted to use libkscreensaver by Martin R. Jones
-// 2002/04/07 Added random vertical position of text,
-// changed horizontal step size to reduce jerkyness,
-// text will return to right margin immediately (and not be drawn half a screen width off-screen)
-// Harald H.-J. Bongartz <[email protected]>
-// 2003/09/06 Converted to use KDialogBase - Nadeem Hasan <[email protected]>
-#include <stdlib.h>
-
-#include <tqlabel.h>
-#include <tqlineedit.h>
-#include <tqcombobox.h>
-#include <tqcheckbox.h>
-#include <tqgroupbox.h>
-#include <tqslider.h>
-#include <tqlayout.h>
-#include <tqdatetime.h>
-#include <tqfontdatabase.h>
-#include <tqpainter.h>
-
-#include <kapplication.h>
-#include <krandomsequence.h>
-#include <kglobal.h>
-#include <klocale.h>
-#include <kconfig.h>
-#include <kmessagebox.h>
-#include <kcolorbutton.h>
-#include <kfontcombo.h>
-
-#include "banner.h"
-#include "banner.moc"
-
-// libkscreensaver interface
-extern "C"
-{
- KDE_EXPORT const char *kss_applicationName = "kbanner.kss";
- KDE_EXPORT const char *kss_description = I18N_NOOP( "KBanner" );
- KDE_EXPORT const char *kss_version = "2.2.0";
-
- KDE_EXPORT KScreenSaver *kss_create( WId id )
- {
- return new KBannerSaver( id );
- }
-
- KDE_EXPORT TQDialog *kss_setup()
- {
- return new KBannerSetup();
- }
-}
-
-//-----------------------------------------------------------------------------
-
-KBannerSetup::KBannerSetup( TQWidget *parent, const char *name )
- : KDialogBase( parent, name, true, i18n( "Setup Banner Screen Saver" ),
- Ok|Cancel|Help, Ok, true ), saver( 0 ), ed(0), speed( 50 )
-{
- setButtonText( Help, i18n( "A&bout" ) );
- readSettings();
-
- TQWidget *main = makeMainWidget();
-
- TQLabel *label;
-
- TQVBoxLayout *tl = new TQVBoxLayout(main, 0, spacingHint());
- TQHBoxLayout *tl1 = new TQHBoxLayout( 0, 0, spacingHint() );
- tl->addLayout(tl1);
- TQVBoxLayout *tl11 = new TQVBoxLayout( 0, 0, spacingHint() );
- tl1->addLayout(tl11);
-
- TQGroupBox *group = new TQGroupBox( 0,Qt::Vertical, i18n("Font"), main );
- TQGridLayout *gl = new TQGridLayout(group->layout(), 6, 2, spacingHint() );
-
- label = new TQLabel( i18n("Family:"), group );
- gl->addWidget(label, 1, 0);
-
- KFontCombo* comboFonts = new KFontCombo( TQFontDatabase().families(), group );
- comboFonts->setCurrentFont( fontFamily );
- gl->addWidget(comboFonts, 1, 1);
- connect( comboFonts, TQT_SIGNAL( activated( const TQString& ) ),
- TQT_SLOT( slotFamily( const TQString& ) ) );
-
- label = new TQLabel( i18n("Size:"), group );
- gl->addWidget(label, 2, 0);
-
- comboSizes = new TQComboBox( TRUE, group );
- fillFontSizes();
- gl->addWidget(comboSizes, 2, 1);
- connect( comboSizes, TQT_SIGNAL( activated( int ) ), TQT_SLOT( slotSize( int ) ) );
- connect( comboSizes, TQT_SIGNAL( textChanged( const TQString & ) ),
- TQT_SLOT( slotSizeEdit( const TQString & ) ) );
-
- TQCheckBox *cb = new TQCheckBox( i18n("Bold"),
- group );
- cb->setChecked( bold );
- connect( cb, TQT_SIGNAL( toggled( bool ) ), TQT_SLOT( slotBold( bool ) ) );
- gl->addWidget(cb, 3, 0);
-
- cb = new TQCheckBox( i18n("Italic"), group );
- cb->setChecked( italic );
- gl->addWidget(cb, 3, 1);
- connect( cb, TQT_SIGNAL( toggled( bool ) ), TQT_SLOT( slotItalic( bool ) ) );
-
- label = new TQLabel( i18n("Color:"), group );
- gl->addWidget(label, 4, 0);
-
- colorPush = new KColorButton( fontColor, group );
- gl->addWidget(colorPush, 4, 1);
- connect( colorPush, TQT_SIGNAL( changed(const TQColor &) ),
- TQT_SLOT( slotColor(const TQColor &) ) );
-
- TQCheckBox *cyclingColorCb=new TQCheckBox(i18n("Cycling color"),group);
- cyclingColorCb->setMinimumSize(cyclingColorCb->sizeHint());
- gl->addMultiCellWidget(cyclingColorCb,5,5,0,1);
- connect(cyclingColorCb,TQT_SIGNAL(toggled(bool)),this,TQT_SLOT(slotCyclingColor(bool)));
- cyclingColorCb->setChecked(cyclingColor);
-
- preview = new TQWidget( main );
- preview->setFixedSize( 220, 170 );
- preview->setBackgroundColor( black );
- preview->show(); // otherwise saver does not get correct size
- saver = new KBannerSaver( preview->winId() );
- tl1->addWidget(preview);
-
- tl11->addWidget(group);
-
- label = new TQLabel( i18n("Speed:"), main );
- tl11->addStretch(1);
- tl11->addWidget(label);
-
- TQSlider *sb = new TQSlider(0, 100, 10, speed, Qt::Horizontal, main );
- sb->setMinimumWidth( 180);
- sb->setFixedHeight(20);
- sb->setTickmarks(TQSlider::Below);
- sb->setTickInterval(10);
- tl11->addWidget(sb);
- connect( sb, TQT_SIGNAL( valueChanged( int ) ), TQT_SLOT( slotSpeed( int ) ) );
-
- TQHBoxLayout *tl2 = new TQHBoxLayout;
- tl->addLayout(tl2);
-
- label = new TQLabel( i18n("Message:"), main );
- tl2->addWidget(label);
-
- ed = new TQLineEdit( main );
- tl2->addWidget(ed);
- ed->setText( message );
- connect( ed, TQT_SIGNAL( textChanged( const TQString & ) ),
- TQT_SLOT( slotMessage( const TQString & ) ) );
-
- TQCheckBox *timeCb=new TQCheckBox( i18n("Show current time"), main);
- timeCb->setFixedSize(timeCb->sizeHint());
- tl->addWidget(timeCb,0,TQt::AlignLeft);
- connect(timeCb,TQT_SIGNAL(toggled(bool)),this,TQT_SLOT(slotTimeToggled(bool)));
- timeCb->setChecked(showTime);
-
- tl->addStretch();
-}
-
-// read settings from config file
-void KBannerSetup::readSettings()
-{
- TDEConfig *config = TDEGlobal::config();
- config->setGroup( "Settings" );
-
- speed=config->readNumEntry("Speed",50);
-/* if ( speed > 100 )
- speed = 100;
- else if ( speed < 50 )
- speed = 50;*/
-
- message=config->readEntry("Message","KDE");
- showTime=config->readBoolEntry("ShowTime",FALSE);
- fontFamily=config->readEntry("FontFamily",(TQApplication::font()).family());
- fontSize=config->readNumEntry("FontSize",48);
- fontColor.setNamedColor(config->readEntry("FontColor","red"));
- cyclingColor=config->readBoolEntry("CyclingColor",FALSE);
- bold=config->readBoolEntry("FontBold",FALSE);
- italic=config->readBoolEntry("FontItalic",FALSE);
-}
-
-void KBannerSetup::fillFontSizes()
-{
- bool block = comboSizes->signalsBlocked();
- comboSizes->blockSignals( true );
- comboSizes->clear();
- int i = 0;
- sizes = TQFontDatabase().pointSizes( fontFamily );
- sizes << 96 << 128 << 156 << 0;
- int current = 0;
- while ( sizes[i] )
- {
- TQString num;
- num.setNum( sizes[i] );
- comboSizes->insertItem( num, i );
- if ( fontSize == sizes[i] ) // fontsize equals one of the defined ones
- {
- current = i;
- comboSizes->setCurrentItem( current );
- slotSize( current );
- }
- i++;
- }
- if ( current == 0 ) // fontsize seems to be entered by hand
- {
- TQString fsize;
- fsize.setNum( fontSize );
- comboSizes->setEditText(fsize);
- slotSizeEdit( fsize );
- }
- comboSizes->blockSignals( block );
-}
-
-void KBannerSetup::slotFamily( const TQString& fam )
-{
- fontFamily = fam;
- fillFontSizes(); // different font, different sizes
- if ( saver )
- saver->setFont( fontFamily, fontSize, fontColor, bold, italic );
-}
-
-void KBannerSetup::slotSize( int indx )
-{
- fontSize = sizes[indx];
- if ( saver )
- saver->setFont( fontFamily, fontSize, fontColor, bold, italic );
-}
-
-void KBannerSetup::slotSizeEdit( const TQString& fs )
-{
- bool ok;
- fontSize = fs.toInt( &ok, 10 );
- if ( ok )
- if ( saver )
- saver->setFont( fontFamily, fontSize, fontColor, bold, italic );
-}
-
-void KBannerSetup::slotColor( const TQColor &col )
-{
- fontColor = col;
- if ( saver )
- saver->setColor(fontColor);
-}
-
-void KBannerSetup::slotCyclingColor(bool on)
-{
- colorPush->setEnabled(!on);
- cyclingColor=on;
-
- if ( saver )
- {
- saver->setCyclingColor( on );
- if ( !on )
- saver->setColor( fontColor );
- }
-}
-
-void KBannerSetup::slotBold( bool state )
-{
- bold = state;
- if ( saver )
- saver->setFont( fontFamily, fontSize, fontColor, bold, italic );
-}
-
-void KBannerSetup::slotItalic( bool state )
-{
- italic = state;
- if ( saver )
- saver->setFont( fontFamily, fontSize, fontColor, bold, italic );
-}
-
-void KBannerSetup::slotSpeed( int num )
-{
- speed = num;
- if ( saver )
- saver->setSpeed( speed );
-}
-
-void KBannerSetup::slotMessage( const TQString &msg )
-{
- message = msg;
- if ( saver )
- saver->setMessage( message );
-}
-
-void KBannerSetup::slotTimeToggled( bool on )
-{
- ed->setEnabled(!on);
- showTime=on;
- if (saver)
- {
- if (showTime)
- saver->setTimeDisplay();
- else
- {
- message=ed->text();
- saver->setMessage(message);
- };
- };
-}
-
-// Ok pressed - save settings and exit
-void KBannerSetup::slotOk()
-{
- TDEConfig *config = TDEGlobal::config();
- config->setGroup( "Settings" );
-
- config->writeEntry( "Speed", speed );
- config->writeEntry( "Message", message );
- config->writeEntry( "ShowTime", showTime );
- config->writeEntry( "FontFamily", fontFamily );
-
- TQString fsize;
- if (fontSize == 0) // an non-number was entered in the font size combo
- {
- fontSize = 48;
- }
- fsize.setNum( fontSize );
- config->writeEntry( "FontSize", fsize );
-
- TQString colName;
- colName.sprintf( "#%02x%02x%02x", fontColor.red(), fontColor.green(),
- fontColor.blue() );
- config->writeEntry( "FontColor", colName );
- config->writeEntry( "CyclingColor", cyclingColor );
- config->writeEntry( "FontBold", bold );
- config->writeEntry( "FontItalic", italic );
-
- config->sync();
-
- accept();
-}
-
-void KBannerSetup::slotHelp()
-{
- KMessageBox::about(this,
- i18n("Banner Version 2.2.1\n\nWritten by Martin R. Jones 1996\[email protected]\nExtended by Alexander Neundorf 2000\[email protected]\n"));
-}
-
-//-----------------------------------------------------------------------------
-
-KBannerSaver::KBannerSaver( WId id ) : KScreenSaver( id )
-{
- krnd = new KRandomSequence();
- readSettings();
- initialize();
- colorContext = TQColor::enterAllocContext();
- needBlank = TRUE;
- timer.start( speed );
- connect( &timer, TQT_SIGNAL( timeout() ), TQT_SLOT( slotTimeout() ) );
-}
-
-KBannerSaver::~KBannerSaver()
-{
- timer.stop();
- TQColor::leaveAllocContext();
- TQColor::destroyAllocContext( colorContext );
- delete krnd;
-}
-
-void KBannerSaver::setSpeed( int spd )
-{
- timer.stop();
- int inv = 100 - spd;
- speed = 1 + ((inv * inv) / 100);
- timer.start( speed );
-}
-
-void KBannerSaver::setFont( const TQString& family, int size, const TQColor &color,
- bool b, bool i )
-{
- fontFamily = family;
- fontSize = size;
- fontColor = color;
- bold = b;
- italic = i;
-
- initialize();
-}
-
-void KBannerSaver::setColor(TQColor &color)
-{
- fontColor = color;
- cyclingColor = FALSE;
- needUpdate = TRUE;
-}
-
-void KBannerSaver::setCyclingColor( bool on )
-{
- cyclingColor = on;
- needUpdate = TRUE;
-}
-
-void KBannerSaver::setMessage( const TQString &msg )
-{
- showTime = FALSE;
- message = msg;
- pixmapSize = TQSize();
- needBlank = TRUE;
-}
-
-void KBannerSaver::setTimeDisplay()
-{
- showTime = TRUE;
- pixmapSize = TQSize();
- needBlank = TRUE;
-}
-
-// read settings from config file
-void KBannerSaver::readSettings()
-{
- TDEConfig *config = TDEGlobal::config();
- config->setGroup( "Settings" );
-
- setSpeed( config->readNumEntry("Speed",50) );
-
- message=config->readEntry("Message","KDE");
-
- showTime=config->readBoolEntry("ShowTime",FALSE);
-
- fontFamily=config->readEntry("FontFamily",(TQApplication::font()).family());
-
- fontSize=config->readNumEntry("FontSize",48);
-
- fontColor.setNamedColor(config->readEntry("FontColor","red"));
-
- cyclingColor=config->readBoolEntry("CyclingColor",FALSE);
-
- bold=config->readBoolEntry("FontBold",FALSE);
- italic=config->readBoolEntry("FontItalic",FALSE);
-
- if ( cyclingColor )
- {
- currentHue=0;
- fontColor.setHsv(0,SATURATION,VALUE);
- }
-}
-
-// initialize font
-void KBannerSaver::initialize()
-{
- fsize = fontSize * height() / TQApplication::desktop()->height();
-
- font = TQFont( fontFamily, fsize, bold ? TQFont::Bold : TQFont::Normal, italic );
-
- pixmapSize = TQSize();
- needBlank = TRUE;
-
- xpos = width();
- ypos = fsize + (int) ((double)(height()-fsize)*krnd->getDouble());
- step = 2 * width() / TQApplication::desktop()->width(); // 6 -> 2 -hhjb-
- if ( step == 0 )
- step = 1;
-}
-
-// erase old text and draw in new position
-void KBannerSaver::slotTimeout()
-{
- if (cyclingColor)
- {
- int hueStep = speed/10;
- currentHue=(currentHue+hueStep)%360;
- fontColor.setHsv(currentHue,SATURATION,VALUE);
- }
- if (showTime)
- {
- TQString new_message = TDEGlobal::locale()->formatTime(TQTime::currentTime(), true);
- if( new_message != message )
- needUpdate = TRUE;
- message = new_message;
- }
- if ( !pixmapSize.isValid() || cyclingColor || needUpdate || needBlank )
- {
- TQRect rect = TQFontMetrics( font ).boundingRect( message );
- rect.setWidth( rect.width() + step );
- if ( rect.width() > pixmapSize.width() )
- pixmapSize.setWidth( rect.width() );
- if ( rect.height() > pixmapSize.height() )
- pixmapSize.setHeight( rect.height() );
- pixmap = TQPixmap( pixmapSize );
- pixmap.fill( black );
- TQPainter p( &pixmap );
- p.setFont( font );
- p.setPen( fontColor );
- p.drawText( -rect.x(), -rect.y(), message );
- needUpdate = FALSE;
- }
- xpos -= step;
- if ( xpos < -pixmapSize.width() ) {
- TQPainter p( this );
- p.fillRect( xpos + step, ypos, pixmapSize.width(), pixmapSize.height(), black );
- xpos = width();
- ypos = fsize + (int) ((double)(height()-2.0*fsize)*krnd->getDouble());
- }
-
- if ( needBlank )
- {
- setBackgroundColor( black );
- erase();
- needBlank = FALSE;
- }
- bitBlt( this, xpos, ypos, &pixmap, 0, 0, pixmapSize.width(), pixmapSize.height());
-}
diff --git a/kscreensaver/kdesavers/banner.h b/kscreensaver/kdesavers/banner.h
deleted file mode 100644
index 37f10aba..00000000
--- a/kscreensaver/kdesavers/banner.h
+++ /dev/null
@@ -1,114 +0,0 @@
-//-----------------------------------------------------------------------------
-//
-// kbanner - Basic screen saver for KDE
-//
-// Copyright (c) Martin R. Jones 1996
-//
-
-#ifndef __BANNER_H__
-#define __BANNER_H__
-
-#include <tqtimer.h>
-
-#include <kscreensaver.h>
-#include <kdialogbase.h>
-
-#define SATURATION 150
-#define VALUE 255
-
-class TQLineEdit;
-class KColorButton;
-class KRandomSequence;
-
-class KBannerSaver : public KScreenSaver
-{
- Q_OBJECT
-
-public:
- KBannerSaver( WId id );
- virtual ~KBannerSaver();
-
- void setSpeed( int spd );
- void setFont( const TQString &family, int size, const TQColor &color,
- bool b, bool i );
- void setMessage( const TQString &msg );
- void setTimeDisplay();
- void setCyclingColor(bool on);
- void setColor( TQColor &color);
-
-private:
- void readSettings();
- void initialize();
-
-protected slots:
- void slotTimeout();
-
-protected:
- TQFont font;
- TQTimer timer;
- TQString fontFamily;
- int fontSize;
- bool bold;
- bool italic;
- TQColor fontColor;
- bool cyclingColor;
- int currentHue;
- bool needUpdate;
- bool needBlank;
- TQString message;
- bool showTime;
- int xpos, ypos, step, fsize;
- KRandomSequence *krnd;
- int speed;
- int colorContext;
- TQPixmap pixmap;
- TQSize pixmapSize;
-};
-
-
-class KBannerSetup : public KDialogBase
-{
- Q_OBJECT
-
-public:
- KBannerSetup( TQWidget *parent = NULL, const char *name = NULL );
-
-protected:
- void readSettings();
- void fillFontSizes();
-
-private slots:
- void slotFamily( const TQString & );
- void slotSize( int );
- void slotSizeEdit(const TQString &);
- void slotColor(const TQColor &);
- void slotCyclingColor(bool on);
- void slotBold( bool );
- void slotItalic( bool );
- void slotSpeed( int );
- void slotMessage( const TQString & );
- void slotOk();
- void slotHelp();
- void slotTimeToggled(bool on);
-
-private:
- TQWidget *preview;
- KColorButton *colorPush;
- KBannerSaver *saver;
- TQLineEdit *ed;
- TQComboBox* comboSizes;
-
- TQString message;
- bool showTime;
- TQString fontFamily;
- int fontSize;
- TQColor fontColor;
- bool cyclingColor;
- bool bold;
- bool italic;
- int speed;
- TQValueList<int> sizes;
-};
-
-#endif
-
diff --git a/kscreensaver/kdesavers/blob.cpp b/kscreensaver/kdesavers/blob.cpp
deleted file mode 100644
index 4b116744..00000000
--- a/kscreensaver/kdesavers/blob.cpp
+++ /dev/null
@@ -1,527 +0,0 @@
-//-----------------------------------------------------------------------------
-//
-// kblob - Basic screen saver for KDE
-//
-// Copyright (c) Tiaan Wessels, 1997
-//
-// To add new alg :
-// - add blob_alg enum in blob.h before ALG_LAST
-// - choose 2 letter prefix for alg and add vars needed to private vars
-// in KBlobSaver in blob.h
-// - add xxSetup and xxNextFrame method definitions in blob.h
-// - implement methods in this file. xxSetup to init vars mentioned
-// in step 2. xxNextFrame to advance blob painter ( calc tx,ty and
-// use box() method to position painter
-// - add descriptive string in alg_str array in this file before "Random"
-// - add to Algs array in KBlobSaver constructor in this file
-// - test by setup saver and choosing alg from list
-
-#include <config.h>
-#include <stdlib.h>
-#include <time.h>
-#include <limits.h>
-#include <math.h>
-
-#include <tqcolor.h>
-#include <tqlabel.h>
-#include <tqlistbox.h>
-#include <tqlayout.h>
-#include <tqpainter.h>
-#include <tqpixmap.h>
-#include <tqimage.h>
-
-#include <kapplication.h>
-#include <kconfig.h>
-#include <kmessagebox.h>
-#include <knuminput.h>
-#include <klocale.h>
-#include <kglobal.h>
-#include <krandomsequence.h>
-
-#include "blob.moc"
-#include "blob.h"
-
-#define SMALLRAND(a) (int)(rnd->getLong(a)+1)
-
-
-// libkscreensaver interface
-extern "C"
-{
- KDE_EXPORT const char *kss_applicationName = "kblob.kss";
- KDE_EXPORT const char *kss_description = I18N_NOOP( "KBlob" );
- KDE_EXPORT const char *kss_version = "2.2.0";
-
- KDE_EXPORT KScreenSaver *kss_create( WId id )
- {
- return new KBlobSaver( id );
- }
-
- KDE_EXPORT TQDialog *kss_setup()
- {
- return new KBlobSetup();
- }
-}
-
-static KRandomSequence *rnd = 0;
-
-TQString alg_str[5];
-void initAlg()
-{
- alg_str[0] = i18n("Random Linear");
- alg_str[1] = i18n("Horizontal Sine");
- alg_str[2] = i18n("Circular Bounce");
- alg_str[3] = i18n("Polar Coordinates");
- alg_str[4] = i18n("Random");
-}
-
-//-----------------------------------------------------------------------------
-// the blob screensaver's code
-
-KBlobSaver::KBlobSaver ( WId id)
- : KScreenSaver( id )
-{
- rnd = new KRandomSequence();
- initAlg();
- TQColor color;
- float ramp = (256.0-64.0)/(float)RAMP;
- TQString msg =
- i18n("This screen saver requires a color display.");
-
- blank();
-
- // needs colors to work this one
- if (TQPixmap::defaultDepth() < 8)
- {
- TQPainter p(this);
- p.setPen( white );
- p.drawText( width()/2, height()/2, msg );
- return;
- }
-
- colorContext = TQColor::enterAllocContext();
-
- // if 8-bit, create lookup table for color ramping further down
- if (TQPixmap::defaultDepth() == 8)
- {
- memset(lookup, 0, 256*sizeof(uint));
- int i;
- for (i = 0; i < RAMP; i++)
- {
- color.setRgb(64+(int)(ramp*(float)i), 0, 0);
- colors[i] = color.alloc();
- }
- memset(lookup, black.pixel(), sizeof(uint)*256);
- for (i = 0; i < RAMP-1; i++)
- lookup[colors[i]] = colors[i+1];
- lookup[black.pixel()] = lookup[colors[RAMP-1]] = colors[0];
- }
- else
- {
- // make special provision for preview mode
- if (height() < 400)
- {
- if (TQPixmap::defaultDepth() > 8 )
- setColorInc(7);
- else
- setColorInc(4);
- }
- else
- {
- if (TQPixmap::defaultDepth() > 8 )
- setColorInc(3);
- else
- setColorInc(2);
- }
- }
-
- // the dimensions of the blob painter
- dim = height()/70+1;
-
- // record starting time to know when to change frames
- start = time(NULL);
-
- // init some parameters used by all algorithms
- xhalf = width()/2;
- yhalf = height()/2;
-
- // means a new algorithm should be set at entrance of timer
- newalg = newalgp = 1;
-
- // init algorithm space
- Algs[0].Name = alg_str[0];
- Algs[0].Init = &KBlobSaver::lnSetup;
- Algs[0].NextFrame = &KBlobSaver::lnNextFrame;
-
- Algs[1].Name = alg_str[1];
- Algs[1].Init = &KBlobSaver::hsSetup;
- Algs[1].NextFrame = &KBlobSaver::hsNextFrame;
-
- Algs[2].Name = alg_str[2];
- Algs[2].Init = &KBlobSaver::cbSetup;
- Algs[2].NextFrame = &KBlobSaver::cbNextFrame;
-
- Algs[3].Name = alg_str[3];
- Algs[3].Init = &KBlobSaver::pcSetup;
- Algs[3].NextFrame = &KBlobSaver::pcNextFrame;
-
- // get setup from kde registry
- readSettings();
-
- // start timer which will update blob painter
- timer.start(SPEED);
- connect(&timer, TQT_SIGNAL(timeout()), TQT_SLOT(slotTimeout()));
-}
-
-KBlobSaver::~KBlobSaver()
-{
- timer.stop();
-
- TQColor::leaveAllocContext();
- TQColor::destroyAllocContext(colorContext);
- delete rnd; rnd = 0;
-}
-
-void KBlobSaver::setAlgorithm(int a)
-{
- newalg = newalgp = ((a == ALG_RANDOM) ? 1 : 2);
- alg = a;
-}
-
-void KBlobSaver::lnSetup()
-{
- // initialize the blob movement dictators with random vals
- // incrementals on axis
- ln_xinc = SMALLRAND(3);
- ln_yinc = SMALLRAND(2);
-
- // start position
- tx = SMALLRAND(width()-dim-ln_xinc*2);
- ty = SMALLRAND(height()-dim-ln_yinc*2);
-}
-
-void KBlobSaver::hsSetup()
-{
- hs_per = SMALLRAND(7);
- hs_radians = 0.0;
- hs_rinc = (hs_per*M_PI)/(hs_per*90*4);
- hs_flip = 1.0;
-}
-
-void KBlobSaver::cbSetup()
-{
- cb_radians = 0.0;
- cb_rinc = (2.0*M_PI)/360.0;
- cb_sradians = 0.0;
- cb_deviate = SMALLRAND(height()/20)+(height()/15);
- cb_radius = height()/2-cb_deviate*2-2*dim;
- cb_devradinc = (rnd->getDouble()*10.0*2.0*M_PI)/360.0;
-}
-
-void KBlobSaver::pcSetup()
-{
- pc_angle = 0.0;
- pc_radius = 0.0;
- pc_inc = (2.0*M_PI)/720.0;
- pc_crot = 0.0;
- pc_div = SMALLRAND(4)-1;
-}
-
-// render next frame ( or change algorithms )
-void KBlobSaver::slotTimeout()
-{
- time_t now = time(NULL);
-
- // should algorithm be changed
- if (now-start > showlen)
- newalg = newalgp;
-
- // set new algorithm
- if (newalg)
- {
- blank();
- if (newalg == 1)
- alg = SMALLRAND(ALG_LAST)-1;
- (this->*Algs[alg].Init)();
- newalg = 0;
- start = time(NULL);
- }
-
- // gen next fram for current algorithm
- (this->*Algs[alg].NextFrame)();
-}
-
-void KBlobSaver::lnNextFrame()
-{
- int dir;
-
- // depending on the algorithm to use, move the blob painter to
- // a new location
- // check for wall hit to change direction
- if (tx+dim+ln_xinc > (int)width()-1 || tx+ln_xinc < 0)
- {
- if (ln_xinc > 0)
- dir = -1;
- else
- dir = 1;
- ln_xinc = SMALLRAND(3)*dir;
- }
- if (ty+dim+ln_yinc > (int)height()-1 || ty+ln_yinc < 0)
- {
- if (ln_yinc > 0)
- dir = -1;
- else
- dir = 1;
- ln_yinc = SMALLRAND(2)*dir;
- }
-
- // move box to new position
- tx += ln_xinc;
- ty += ln_yinc;
-
- // draw new box
- box(tx, ty);
-}
-
-void KBlobSaver::hsNextFrame()
-{
- static int xlen = width()-(4*dim);
- static int ylen = height()-(4*dim);
-
- // calc x as offset on angle line and y as vertical offset
- // on interval -1..1 sine of angle
- tx = (int)((hs_radians/(hs_per*M_PI))*(float)xlen);
- ty = (int)((float)(ylen/4)*(hs_flip*sin(hs_radians)))+yhalf;
-
- // draw new box
- box(tx, ty);
-
- // set new radians
- hs_radians += hs_rinc;
- if (hs_radians > hs_per*M_PI)
- {
- hs_rinc *= -1.0;
- hs_radians += hs_rinc;
- hs_flip *= -1.0;
- }
- else if (hs_radians < 0.0)
- hsSetup();
-}
-
-void KBlobSaver::cbNextFrame()
-{
- int deviate;
-
- // calculate deviation of circle main radius
- deviate = (int)(sin(cb_sradians)*cb_deviate);
-
- // calculate topleft of box as a circle with a sine perturbed radius
- tx = (int)(cos(cb_radians)*(cb_radius+deviate))+xhalf;
- ty = (int)(sin(cb_radians)*(cb_radius+deviate))+yhalf;
-
- // draw the box
- box(tx, ty);
-
- // increase greater circle render angle
- cb_radians += cb_rinc;
- if (cb_radians > 2.0*M_PI)
- cb_radians -= 2.0*M_PI;
-
- // increase radius deviation offset on sine wave
- cb_sradians += cb_devradinc;
-}
-
-void KBlobSaver::pcNextFrame()
-{
- static float scale = (float)height()/3.0 - 4.0*dim;
-
- // simple polar coordinate equation
- if (pc_div < 1.0)
- pc_radius = cos(2.0*pc_angle);
- else
- pc_radius = 1.0/pc_div + cos(2.0*pc_angle);
-
- tx = (int)(scale*pc_radius*cos(pc_angle+pc_crot))+xhalf;
- ty = (int)(scale*pc_radius*sin(pc_angle+pc_crot))+yhalf;
-
- // advance blob painter
- box(tx, ty);
-
- // new movement parameters
- pc_angle += pc_inc;
- if (pc_angle > 2.0*M_PI)
- {
- pc_angle -= 2.0*M_PI;
- pc_crot += M_PI/45.0;
- }
-}
-
-void KBlobSaver::box ( int x, int y )
-{
- // for bad behaving algorithms that wants to cause an X trap
- // confine to the valid region before using potentially fatal XGetImage
- if ((x+dim) >= width())
- x = width()-dim-1;
- else if (x < 0)
- x = 0;
- if ((y+dim) > height())
- y = height()-dim-1;
- else if (y < 0)
- y = 0;
-
- // get the box region from the display to upgrade
- TQImage img = TQPixmap(TQPixmap::grabWindow(winId(), x, y, dim, dim)).convertToImage();
-
- // depending on the depth of the display, use either lookup table for
- // next rgb val ( 8-bit ) or ramp the color directly for other displays
- if ( img.depth() == 8)
- {
- // manipulate image by upgrading each pixel with 1 using a lookup
- // table as the color allocation could have resulted in a spread out
- // configuration of the color ramp
- for (int j = 0; j < img.height(); j++)
- {
- for (int i = 0; i < img.width(); i++)
- {
- img.scanLine(j)[i] = lookup[img.scanLine(j)[i]];
- }
- }
- }
- else
- {
- for (int j = 0; j < img.height(); j++)
- {
- for (int i = 0; i < img.width(); i++)
- {
- TQRgb p = img.pixel( i, j );
- p += (colorInc<<18);
- img.setPixel( i, j, p );
- }
- }
- }
-
- // put the image back onto the screen
- TQPainter p(this);
- p.drawImage( x, y, img );
-}
-
-void KBlobSaver::blank()
-{
- setBackgroundColor( black );
- erase();
-}
-
-void KBlobSaver::readSettings()
-{
- TDEConfig *config = TDEGlobal::config();
- config->setGroup("Settings");
-
- // number of seconds to spend on a frame
- showlen = config->readNumEntry("Showtime", 3*60);
-
- // algorithm to use. if not set then use random
- alg = config->readNumEntry("Algorithm", ALG_RANDOM);
- if (alg == ALG_RANDOM)
- newalg = 1;
- else
- newalg = 2;
- newalgp = newalg;
-}
-
-//-----------------------------------------------------------------------------
-// dialog to setup screen saver parameters
-//
-KBlobSetup::KBlobSetup
-(
- TQWidget *parent,
- const char *name
-)
-: KDialogBase( parent, name, true, i18n( "Setup Blob Screen Saver" ),
- Ok|Cancel|Help, Ok, true )
-{
-
- initAlg();
-
- // get saver configuration from kde registry
- readSettings();
-
- setButtonText( Help, i18n( "A&bout" ) );
- TQWidget *main = makeMainWidget();
-
- TQHBoxLayout *tl = new TQHBoxLayout( main, 0, spacingHint() );
-
- TQVBoxLayout *vbox = new TQVBoxLayout;
- tl->addLayout(vbox);
-
- // seconds to generate on a frame
- TQLabel *label = new TQLabel(i18n("Frame duration:"), main);
- stime = new KIntNumInput( showtime, main );
- stime->setSuffix( i18n( " sec" ) );
- vbox->addWidget(label);
- vbox->addWidget(stime);
-
- // available algorithms
- label = new TQLabel(i18n("Algorithm:"), main);
- algs = new TQListBox(main);
- algs->setMinimumSize(150, 105);
- for (int i = 0; i <= ALG_RANDOM; i++)
- algs->insertItem(alg_str[i]);
- algs->setCurrentItem(alg);
- vbox->addWidget(label);
- vbox->addWidget(algs);
-
- // preview window
- TQWidget *preview = new TQWidget( main );
- preview->setFixedSize(220, 170);
- preview->setBackgroundColor(black);
- preview->show();
- tl->addWidget(preview);
- saver = new KBlobSaver(preview->winId());
- saver->setDimension(3);
- if (TQPixmap::defaultDepth() > 8)
- saver->setColorInc(7);
- else
- saver->setColorInc(4);
-
- tl->addStretch();
-
- // so selecting an algorithm will start previewing that alg
- connect(algs, TQT_SIGNAL(highlighted(int)), saver,
- TQT_SLOT(setAlgorithm(int)));
-}
-
-void KBlobSetup::readSettings()
-{
- TDEConfig *config = TDEGlobal::config();
- config->setGroup("Settings");
-
- // number of seconds to spend on a frame
- showtime = config->readNumEntry("Showtime", 3*60);
-
- // algorithm to use. if not set then use random
- alg = config->readNumEntry("Algorithm", ALG_LAST);
-}
-
-// Ok pressed - save settings and exit
-void KBlobSetup::slotOk()
-{
- TDEConfig *config = TDEGlobal::config();
-
- config->setGroup("Settings");
-
- config->writeEntry("Showtime", stime->value());
- config->writeEntry("Algorithm", algs->currentItem());
-
- config->sync();
-
- accept();
-}
-
-void KBlobSetup::slotHelp()
-{
- KMessageBox::about(this,
- i18n("Blobsaver Version 0.1\n\nWritten by Tiaan Wessels 1997\[email protected]"));
- if (saver)
- saver->setAlgorithm(algs->currentItem());
-}
-
-
diff --git a/kscreensaver/kdesavers/blob.h b/kscreensaver/kdesavers/blob.h
deleted file mode 100644
index 5e5fb97c..00000000
--- a/kscreensaver/kdesavers/blob.h
+++ /dev/null
@@ -1,119 +0,0 @@
-//-----------------------------------------------------------------------------
-//
-// kblob - Basic screen saver for KDE
-//
-// Copyright (c) Tiaan Wessels, 1997
-//
-
-#ifndef __BLOB_H__
-#define __BLOB_H__
-
-#include <tqtimer.h>
-#include <tqptrlist.h>
-
-#include <kdialogbase.h>
-#include <kscreensaver.h>
-
-#define RAMP 64
-#define SPEED 10
-
-enum blob_alg {
- ALG_LINEAR,
- ALG_HSINE,
- ALG_CIRB,
- ALG_POLARC,
- ALG_LAST,
- ALG_RANDOM = ALG_LAST };
-
-class KBlobSaver : public KScreenSaver
-{
- Q_OBJECT
-
-
-public:
- KBlobSaver( WId id );
- virtual ~KBlobSaver();
-
- void setDimension(int d)
- { dim = d; }
- void setShowlen(time_t s)
- { showlen = s; }
- void setColorInc(int c)
- { colorInc = c; }
-
-public slots:
- void setAlgorithm(int);
-
-public:
- typedef void (KBlobSaver::*AlgFunc)();
- struct KBSAlg
- {
- TQString Name;
- AlgFunc Init;
- AlgFunc NextFrame;
- };
-private:
-
- TQTimer timer;
- uint colors[RAMP];
- uint lookup[256];
- int colorContext, colorInc;
- int tx, ty;
- int dim;
- int xhalf, yhalf;
- int alg, newalg, newalgp;
- time_t showlen, start;
- KBSAlg Algs[ALG_LAST];
- int ln_xinc, ln_yinc;
- float hs_radians, hs_rinc, hs_flip, hs_per;
- float cb_radians, cb_rinc, cb_sradians, cb_radius, cb_devradinc;
- float cb_deviate;
- float pc_angle, pc_radius, pc_inc, pc_crot, pc_div;
-
- void lnSetup();
- void hsSetup();
- void cbSetup();
- void pcSetup();
-
- void lnNextFrame();
- void hsNextFrame();
- void cbNextFrame();
- void pcNextFrame();
-
- void blank();
- void box(int, int);
- void readSettings();
-
-protected slots:
- void slotTimeout();
-};
-
-class TQListBox;
-class KIntNumInput;
-
-class KBlobSetup : public KDialogBase
-{
- Q_OBJECT
-
-
- int showtime;
- int alg;
- TQListBox *algs;
- KIntNumInput *stime;
-
-public:
- KBlobSetup( TQWidget *parent = NULL, const char *name = NULL );
-
-protected:
- void readSettings();
-
-private slots:
- void slotOk();
- void slotHelp();
-
-private:
- KBlobSaver *saver;
-};
-
-#endif
-
diff --git a/kscreensaver/kdesavers/data/CMakeLists.txt b/kscreensaver/kdesavers/data/CMakeLists.txt
deleted file mode 100644
index c9718d9a..00000000
--- a/kscreensaver/kdesavers/data/CMakeLists.txt
+++ /dev/null
@@ -1,17 +0,0 @@
-#################################################
-#
-# (C) 2011 Golubev Alexander
-# fatzer2 (AT) gmail.com
-#
-# Improvements and feedback are welcome
-#
-# This file is released under GPL >= 2
-#
-#################################################
-
-install( FILES
- kfs_particle.png kfs_particle_flare.png
- kfs_particle_diastar.png kfs_kde.png
- kfs_tux.png kfs_letters1.png kfs_letters2.png
- kfs_letters.desc kfs_explode.ogg kfs_debris.ogg
- DESTINATION ${DATA_INSTALL_DIR}/kfiresaver )
diff --git a/kscreensaver/kdesavers/data/Makefile.am b/kscreensaver/kdesavers/data/Makefile.am
deleted file mode 100644
index 2882f34c..00000000
--- a/kscreensaver/kdesavers/data/Makefile.am
+++ /dev/null
@@ -1,11 +0,0 @@
-# Makefile.am for screensavers data
-
-METASOURCES = AUTO
-
-if COMPILE_GL_KSAVERS
-kfiresaver_DATA = kfs_particle.png kfs_particle_flare.png kfs_particle_diastar.png\
- kfs_kde.png kfs_tux.png\
- kfs_letters1.png kfs_letters2.png kfs_letters.desc\
- kfs_explode.ogg kfs_debris.ogg
-kfiresaverdir = $(kde_datadir)/kfiresaver
-endif
diff --git a/kscreensaver/kdesavers/data/kfs_debris.ogg b/kscreensaver/kdesavers/data/kfs_debris.ogg
deleted file mode 100644
index f1265ec2..00000000
--- a/kscreensaver/kdesavers/data/kfs_debris.ogg
+++ /dev/null
Binary files differ
diff --git a/kscreensaver/kdesavers/data/kfs_explode.ogg b/kscreensaver/kdesavers/data/kfs_explode.ogg
deleted file mode 100644
index 3eda0ef0..00000000
--- a/kscreensaver/kdesavers/data/kfs_explode.ogg
+++ /dev/null
Binary files differ
diff --git a/kscreensaver/kdesavers/data/kfs_kde.png b/kscreensaver/kdesavers/data/kfs_kde.png
deleted file mode 100644
index 33f53b33..00000000
--- a/kscreensaver/kdesavers/data/kfs_kde.png
+++ /dev/null
Binary files differ
diff --git a/kscreensaver/kdesavers/data/kfs_letters.desc b/kscreensaver/kdesavers/data/kfs_letters.desc
deleted file mode 100644
index 186a1b8d..00000000
--- a/kscreensaver/kdesavers/data/kfs_letters.desc
+++ /dev/null
@@ -1,84 +0,0 @@
-#first map and its coordinates
-#note that capitals are used for lowercase also
-
-"kfs_letters1.png"
-
-A 0 0 48 63
-a 0 0 48 63
-B 48 0 87 63
-b 48 0 87 63
-C 87 0 132 63
-c 87 0 132 63
-D 132 0 178 63
-d 132 0 178 63
-E 179 0 222 63
-e 179 0 222 63
-
-F 0 64 40 127
-f 0 64 40 127
-G 41 64 89 127
-g 41 64 89 127
-H 89 64 142 127
-h 89 64 142 127
-I 142 64 180 127
-i 142 64 180 127
-J 180 64 227 127
-j 180 64 227 127
-
-K 0 128 40 191
-k 0 128 40 191
-L 41 128 80 191
-l 41 128 80 191
-M 80 128 142 191
-m 80 128 142 191
-N 142 128 196 191
-n 142 128 196 191
-O 196 128 252 191
-o 196 128 252 191
-
-P 0 192 36 255
-p 0 192 36 255
-Q 36 192 97 255
-q 36 192 97 255
-R 97 192 142 255
-r 97 192 142 255
-S 142 192 189 255
-s 142 192 189 255
-T 189 192 244 255
-t 189 192 244 255
-
-
-"kfs_letters2.png"
-
-U 0 0 50 63
-u 0 0 50 63
-V 50 0 97 63
-v 50 0 97 63
-W 97 0 169 63
-w 97 0 169 63
-X 169 0 220 63
-x 169 0 220 63
-, 220 0 239 63
-. 239 0 254 63
-
-Y 0 64 48 127
-y 0 64 48 127
-Z 48 64 99 127
-z 48 64 99 127
-! 99 64 119 127
-? 119 64 157 127
-- 157 64 188 127
-: 188 64 205 127
-; 205 64 226 127
-
-0 0 128 45 191
-1 45 128 75 191
-2 75 128 118 191
-3 118 128 158 191
-4 158 128 203 191
-5 203 128 245 191
-
-6 0 192 41 255
-7 41 192 86 255
-8 86 192 127 255
-9 127 192 169 255
diff --git a/kscreensaver/kdesavers/data/kfs_letters1.png b/kscreensaver/kdesavers/data/kfs_letters1.png
deleted file mode 100644
index 2f6678ba..00000000
--- a/kscreensaver/kdesavers/data/kfs_letters1.png
+++ /dev/null
Binary files differ
diff --git a/kscreensaver/kdesavers/data/kfs_letters2.png b/kscreensaver/kdesavers/data/kfs_letters2.png
deleted file mode 100644
index 8d0442ac..00000000
--- a/kscreensaver/kdesavers/data/kfs_letters2.png
+++ /dev/null
Binary files differ
diff --git a/kscreensaver/kdesavers/data/kfs_particle.png b/kscreensaver/kdesavers/data/kfs_particle.png
deleted file mode 100644
index d6294dc3..00000000
--- a/kscreensaver/kdesavers/data/kfs_particle.png
+++ /dev/null
Binary files differ
diff --git a/kscreensaver/kdesavers/data/kfs_particle_diastar.png b/kscreensaver/kdesavers/data/kfs_particle_diastar.png
deleted file mode 100644
index 6f645ddb..00000000
--- a/kscreensaver/kdesavers/data/kfs_particle_diastar.png
+++ /dev/null
Binary files differ
diff --git a/kscreensaver/kdesavers/data/kfs_particle_flare.png b/kscreensaver/kdesavers/data/kfs_particle_flare.png
deleted file mode 100644
index 4a4fdcb5..00000000
--- a/kscreensaver/kdesavers/data/kfs_particle_flare.png
+++ /dev/null
Binary files differ
diff --git a/kscreensaver/kdesavers/data/kfs_tux.png b/kscreensaver/kdesavers/data/kfs_tux.png
deleted file mode 100644
index 99f3465e..00000000
--- a/kscreensaver/kdesavers/data/kfs_tux.png
+++ /dev/null
Binary files differ
diff --git a/kscreensaver/kdesavers/firesaver.ChangeLog b/kscreensaver/kdesavers/firesaver.ChangeLog
deleted file mode 100644
index 24c41b2d..00000000
--- a/kscreensaver/kdesavers/firesaver.ChangeLog
+++ /dev/null
@@ -1,106 +0,0 @@
-2004-06-29 Enrico Ros <[email protected]>
-
- * general : added support for 'per particle' texture with
- smart binding. added 2 textures (explosion light / toxxic)
-
- * firesaverparticle : finished TurningParticle class. moved
- some code from the header to the cpp.
-
- * firesaver : added 'Toxic spirals' fireworks, disabled
- supernova in .ui since after 3.3. fixed monochrome<->monotype
- bug.
-
- * firesaverwriter : bugfix on word's color (blinking on start).
-
-2004-05-30 Enrico Ros <[email protected]>
-
- * this file : renamed Changelog to firesaver.ChangeLog
-
- * general : moved / renamed files and chaged stuff to get ready
- to be imported into tdeartwork.
-
- * general : all images are .png, all sounds are .ogg.
-
-2004-02-07 Enrico Ros <[email protected]>
-
- * firesaver.cpp : implemented trail and alpha on explosions.
-
- * firesaver : damn dirty bug! reordered projection lines. Looks
- way cooler now. trimmed defaults.
-
- * firesaversetup : config dialog redone from scratch. Now it is
- more usable and ready for translation into different languages.
- Also added many new features.
-
- * firesaver : adapted to setup dialog changes (also embeds the
- setup widget into a KDialogBase). Implemented some new features
- added in the setup dialog.
-
-2004-02-06 Enrico Ros <[email protected]>
-
- * all : optimized logic and math.. tdecachegrind rules.
-
- * firesaverparticle : inheritance test on particle class.
- Implemented a "funny phisics" on the TurningParticle class. This
- will lead to strange fireworks (spirals, fountains... )
-
-2004-01-31 Enrico Ros <[email protected]>
-
- * all : leak checked and fixed uninitialized values. optimized
- the code for less cpu consumption (reduced 7% over the 19% of
- internal code cpu consumption (the remaining 81% of cpu time is
- spent into GL libraries!!..) seems there's a limit to the code
- optimization!).
-
- * firesaver : added KDE icons as exploding elements and checked
- the explode logo routine.
-
- * fw_letters* : added support for overlay writings. cleaned api.
-
- * firesaver.cpp/.h : implemented texture loader. some fixes and
- a major speedup. again more changes to the graphical pipeline.
-
-2004-01-30 Enrico Ros <[email protected]>
-
- * firesaverparticle.cpp/.h: cleaned a lot; changed the interface.
- It's not completely decoupled from the 'firework' entity yet.
-
- * fw_debris.ogg: added a second sound (used only on logo explosion
- for now).
-
- * firesaver.cpp: reworked the generation of image logos (new
- default: 64x64 pixel for hi-res).
-
-2004-01-29 Enrico Ros <[email protected]>
-
- * firesaver.cpp: fix: screen blink. add: particle size not
- dependant from screen size.
-
- * firesaver.cpp: optimized the rendering core for particles.
- Computation takes now less than half of the time than before.
- Set a capacity of 20000 simultaneous particles; more will be
- dropped (but a progressive 'resize' is done..)
-
- * fw_explode.ogg: converted sound file to ogg format.
-
- * firesaver.cpp/.h: redone the audio engine (limited by default
- to 4 mixer channels).
-
- * firesaver.cpp: use the .mp3 sound that is "auto-mixed" by the
- sound system. The old Wav was played sequentially (a boom is heard
- after the previous one terminates). The Ogg format has the same
- problem as the wave one (plus it goes on playing many booms after
- the program is exited).
-
-2004-01-28 Enrico Ros <[email protected]>
-
- * firesaverparticle.cpp: keep a particle independent from the
- 'shape' of the firework it belongs to. Added depth (level) of
- explosion (normal particles reach level 1, splitters reach 2).
-
- * name syntax: converted filenames to match the style of the ones
- in tdeartwork/kscreensaver/kdesavers.
-
- * merging: merged some file's content to lower the number of files
- before initial import.
-
diff --git a/kscreensaver/kdesavers/firesaver.cpp b/kscreensaver/kdesavers/firesaver.cpp
deleted file mode 100644
index ad6b83ac..00000000
--- a/kscreensaver/kdesavers/firesaver.cpp
+++ /dev/null
@@ -1,1151 +0,0 @@
-// This file is part of KFireSaver3D.
-
-// KFireSaver3D is free software; you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation; either version 2 of the License, or
-// (at your option) any later version.
-
-// KFireSaver3D 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 KFireSaver3D; if not, write to the Free Software
-// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-
-
-// Author: Enrico Ros, based on the great work of David Sansome (kfiresaver)
-
-#include <math.h>
-#include <sys/time.h>
-#include <stdlib.h>
-#include <kconfig.h>
-#include <kdebug.h>
-#include <kstandarddirs.h>
-#include <klocale.h>
-#include <kurl.h>
-#include <kiconloader.h>
-#include <kmessagebox.h>
-#include <arts/kmedia2.h>
-#include <arts/kplayobject.h>
-#include <arts/kplayobjectfactory.h>
-
-#include "firesaversetup.h"
-#include "firesaverparticle.h"
-#include "firesaverwriter.h"
-#include "firesaver.h"
-
-
-/* Factory code for KScreensaver begins *here* *\
-\* */
-
-#include <kscreensaver.h>
-#include <kdialogbase.h>
-
-class KFireSaverKSS : public KScreenSaver
-{
- public:
- KFireSaverKSS( WId id )
- : KScreenSaver( id )
- {
- setBackgroundColor( black );
- erase();
- saver = new KFireSaver;
- embed(saver);
- saver->show();
- }
-
- ~KFireSaverKSS()
- {
- delete saver;
- }
-
- private:
- KFireSaver* saver;
-};
-
-class KFireSaverSetupKDB : public KDialogBase
-{
- public:
- KFireSaverSetupKDB( TQWidget* parent = 0, const char* name = 0 )
- : KDialogBase( parent, name, true, i18n("Setup Screen Saver"),
- Ok | Cancel | Help, Ok, true )
- {
- setup = new KFireSaverSetup( this );
- setMainWidget( setup );
- setButtonText( KDialogBase::Help, i18n( "A&bout" ) );
- }
-
- private slots:
- void slotHelp()
- {
- KMessageBox::about(this, i18n("<h3>KFireSaver 3D 1.0</h3>\n<p>TEST Koral - Enrico Ros::2004</p>") );
- }
- void slotOk()
- {
- setup->writeConfig();
- accept();
- }
-
- private:
- KFireSaverSetup * setup;
-};
-
-extern "C"
-{
- KDE_EXPORT const char *kss_applicationName = "kfiresaver.kss";
- KDE_EXPORT const char *kss_description = I18N_NOOP( "Fireworks 3D (GL)" );
- KDE_EXPORT const char *kss_version = "0.7";
-
- KDE_EXPORT KScreenSaver *kss_create( WId id )
- {
- return new KFireSaverKSS( id );
- }
-
- KDE_EXPORT TQDialog *kss_setup()
- {
- return new KFireSaverSetupKDB;
- }
-}
-
-/* *\
-\* Factory code for KScreensaver ends *here* */
-
-
-KFireSaver :: KFireSaver( TQWidget *parent, const char *name )
- : TQGLWidget( parent, name )
-{
- // set random seed to initialize drand48() calls
- timeval tv;
- gettimeofday(&tv,NULL);
- srand48( (long)tv.tv_usec );
-
- readConfig();
-
- particleList.setAutoDelete(true);
- starList.setAutoDelete(true);
- imageList.setAutoDelete(true);
- playObjectList.setAutoDelete(true);
-
- //initialize openGL context before managing GL calls
- makeCurrent();
- loadTexture( locate("data","kfiresaver/kfs_particle.png"), particleTexture );
- loadTexture( locate("data","kfiresaver/kfs_particle_flare.png"), flareTexture );
- loadTexture( locate("data","kfiresaver/kfs_particle_diastar.png"), diastarTexture );
- starTexture = particleTexture;
-
- //generate stars
- if (parameters.enableStars) {
- int number = parameters.starsNumber + 1;
- number *= 10 * number;
- for (int i=0 ; i<number ; i++)
- {
- Particle * star = new Particle( Particle::StarParticle );
- star->initializeValues();
- star->texture = starTexture;
- if (parameters.enableStarGradient)
- {
- GLfloat red = star->colour[0],
- green = star->colour[1],
- blue = star->colour[2],
- tint = 0.5 + star->ypos / FIELDWIDTH,
- merge = 0.3 + DRAND*0.7,
- mergen = 1 - merge;
- star->colour[0] = red * merge + (1.0-tint) * mergen;
- star->colour[1] = green * merge + tint * mergen;
- star->colour[2] = blue * merge + tint * mergen;
- }
- starList.append( star );
- }
- }
-
- //generate bottom fire
- if (parameters.enableBottomFire) {
- float cRed = (float)parameters.bottomFireColor.red() / 255.0,
- cGreen = (float)parameters.bottomFireColor.green() / 255.0,
- cBlue = (float)parameters.bottomFireColor.blue() / 255.0;
- for (int i=0 ; i<NUMBER_OF_FIREPARTICLES ; i++)
- {
- Particle* particle = new Particle( Particle::FireParticle );
- particle->initializeValues();
- particle->texture = particleTexture;
- particle->zspeed *= 4.0;
- particle->colour[0] = cRed * (0.6 + 0.4*DRAND);
- particle->colour[1] = cGreen * (0.6 + 0.4*DRAND);
- particle->colour[2] = cBlue * (0.6 + 0.4*DRAND);
- particleList.append(particle);
- }
- }
-
- //get sound files
- if (parameters.enableSound) {
- sound_explosion = locate("data","kfiresaver/kfs_explode.ogg");
- sound_debris = locate("data","kfiresaver/kfs_debris.ogg");
- }
-
- //create the writer class that manages flying writings.
- if ( parameters.enableWritings )
- writer = new Writer("kfs_letters.desc");
-
- showp.forceBicolour =
- showp.forceColour =
- showp.forcePower =
- showp.forceType = false;
- showp.timeStamp = 0.0;
- startTimer(MSECPERIOD);
-
- //force initialization of "show" variables for the first time
- timerEvent(NULL);
-}
-
-
-KFireSaver :: ~KFireSaver()
-{
- freeTexture( particleTexture );
- freeTexture( starTexture );
- particleList.clear();
- starList.clear();
- imageList.clear();
- playObjectList.clear();
- if ( parameters.enableWritings )
- delete writer;
-}
-
-
-void KFireSaver :: initializeGL()
-{
- glDisable(GL_DEPTH_TEST);
- glEnable(GL_BLEND);
- glBlendFunc(GL_SRC_ALPHA,GL_ONE);
- glShadeModel( GL_SMOOTH );
-
- resizeGL( 640, 480 );
-}
-
-
-void KFireSaver :: resizeGL( int width, int height )
-{
- glViewport( 0, 0, width, height );
-
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity();
- glOrtho( -FIELDW_2, FIELDW_2, -FIELDW_2, FIELDW_2, 5.0, 60.0 );
-
- glMatrixMode(GL_MODELVIEW);
- glLoadIdentity();
-
- float ratio = (float)width / (float)height,
- numH = 750 - 90 * parameters.particleSize,
- numW = 1000 - 120 * parameters.particleSize;
- if ( ratio >= (4.0/3.0) ) {
- unitX = FIELDWIDTH / (numH * ratio);
- unitY = FIELDWIDTH / numH;
- } else {
- unitX = FIELDWIDTH / numW;
- unitY = FIELDWIDTH / (numW / ratio);
- }
-
- timeval tv;
- gettimeofday(&tv,NULL);
- timeStampFrame = (double)tv.tv_sec + (double)tv.tv_usec/1000000.0;
-
- firstGLFrame = true;
-}
-
-
-void KFireSaver :: paintGL ()
-/* Main procedure. It does the following:
- - calculate time diff between current and previous frame
- - clear the color buffer
- - simple render of stars
- - advanced render of particles
- - render
- - update physics based on time difference
- - check die/change conditions
- - call to explode_firework if a leader dies
- - if random -> start a new firework
- - if random -> explode a penquin or kde logo
-*/
-{
- /* calculate TIME ELAPSED between current and previous frame */
-
- timeval tv;
- gettimeofday(&tv,NULL);
- double timeCurrent = (double)tv.tv_sec + (double)tv.tv_usec/1000000.0;
- double timeDiff = (MSECPERIOD / 1000.0);
- if (parameters.enableRealtime)
- {
- timeDiff = timeCurrent - timeStampFrame;
- timeStampFrame = timeCurrent;
- timeDiff = (timeDiff > 0.5) ? 0.5 : (timeDiff < 0.005) ? 0.005 : timeDiff;
- }
-
- /* CLEAR SCREEN: to do it there are 2 ways */
-
- glLoadIdentity();
- glTranslatef( 0, 0, -50.0 );
- glDisable( GL_TEXTURE_2D );
-
- if ( !parameters.enableFade || firstGLFrame )
- { // quick - clear the OpenGL color buffer
- glClearColor( 0.0, 0.0, 0.0, 1.0 );
- glClear( GL_COLOR_BUFFER_BIT );
- firstGLFrame = false;
- }
- else
- { // good looking
- /* superpose a semi-transparent black rectangle so we
- can see a sort of 'tail' for each particle drawn. */
- const GLfloat conv_tab[10] = {
- 0.50, 0.33, 0.22, 0.15, 0.10,
- 0.07, 0.05, 0.03, 0.02, 0.01 };
- glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
- glColor4f(0.0,0.0,0.0, conv_tab[parameters.fadeAmount]);
- glBegin( GL_TRIANGLE_STRIP );
- glVertex2f( FIELDW_2, FIELDW_2 );
- glVertex2f( -FIELDW_2, FIELDW_2 );
- glVertex2f( FIELDW_2, -FIELDW_2 );
- glVertex2f( -FIELDW_2, -FIELDW_2 );
- glEnd();
- glBlendFunc(GL_SRC_ALPHA,GL_ONE);
- }
-
- /* render STARS */
-
- if (parameters.enableStars) {
- if ( starTexture ) {
- glEnable( GL_TEXTURE_2D );
- glBindTexture( GL_TEXTURE_2D, currentTexture = starTexture );
- } else
- glDisable( GL_TEXTURE_2D );
-
- glBegin( GL_QUADS );
- bool flickers = parameters.enableStarFlickering;
- float alpha = flickers ? 0.5 : 1.0;
- Particle * star = starList.first();
- for (; star; star = starList.next())
- {
- if (flickers && DRAND<0.6)
- continue;
-
- GLfloat sizeX = star->pixelSize * unitX,
- sizeY = star->pixelSize * unitY,
- pLeft = star->xpos - sizeX,
- pRight = star->xpos + sizeX,
- pTop = star->ypos + sizeY,
- pBottom = star->ypos - sizeY;
- glColor4f(star->colour[0], star->colour[1], star->colour[2], alpha);
- glTexCoord2f( 0, 0 ); // Bottom Left
- glVertex2f( pLeft, pBottom );
- glTexCoord2f( 0, 1 ); // Top Left
- glVertex2f( pLeft, pTop );
- glTexCoord2f( 1, 1 ); // Top Right
- glVertex2f( pRight, pTop );
- glTexCoord2f( 1, 0 ); // Bottom Right
- glVertex2f( pRight, pBottom );
- }
- glEnd();
- }
-
- /* render FIREWORKS */
-
- glBegin( GL_QUADS );
- bool playedExplodeSound = false;
- bool flashedScreen = false;
- Particle * particle = particleList.first();
- for (; particle; particle = particleList.next())
- {
- //bind the texture for current particle (if not already bound)
- if ( !particle->texture ) {
- glEnd();
- glDisable( GL_TEXTURE_2D );
- glBegin( GL_QUADS );
- currentTexture = 0;
- } else if ( particle->texture != currentTexture ) {
- glEnd();
- glEnable( GL_TEXTURE_2D );
- glBindTexture( GL_TEXTURE_2D, currentTexture = particle->texture );
- glBegin( GL_QUADS );
- }
-
- //perspective projection (done by hand to make it funnier than opengl's :-)
- float mfactor = PERSP_MAG_FACTOR * particle->ypos;
- if ( mfactor < -246.0 ) {
- particleList.remove();
- particleList.prev();
- continue;
- }
- float sfactor = 256.0 / (256.0 + mfactor),
- posx = sfactor * particle->xpos,
- posy = sfactor * particle->zpos - 4.0;
- //size computation (magnify if enableMegaFlares is set)
- if ( parameters.enableMegaFlares ) {
- mfactor = parameters.megaFlares*particle->ypos;
- if ( mfactor < -255.0 || mfactor > 512.0 ) {
- particleList.remove();
- particleList.prev();
- continue;
- }
- sfactor = 256.0 / (256.0 + mfactor);
- if ( sfactor > 64 )
- sfactor = 76.8 - sfactor / 5.0;
- }
- float size = sfactor * particle->pixelSize,
- sizeX = size * unitX,
- sizeY = size * unitY;
-
- //determine brightness (alpha component) for the particle
- if ( particle->useLife ) {
- float life = particle->life,
- startLife = particle->startLife;
- //bright changes with the following curve: "2*k - k^2" (or "k(2-k)")
- if ( life > startLife )
- particle->colour[3] = startLife + 1 - life;
- else
- particle->colour[3] = life / startLife;
- //apply flickering if enabled
- if (particle->flicker < 0) {
- particle->colour[3] = 0.2;
- if (++particle->flicker >= 0)
- particle->flicker = FLICKER_FRAMES_DELAY;
- } else if (particle->flicker > 0) {
- if ( life <= startLife )
- particle->colour[3] = 1.0;
- if (--particle->flicker <= 0)
- particle->flicker = -FLICKER_FRAMES_DELAY;
- }
- glColor4fv( particle->colour );
- } else
- glColor3fv( particle->colour );
-
- //draw particle
- float pLeft = posx - sizeX,
- pTop = posy + sizeY,
- pRight = posx + sizeX,
- pBottom = posy - sizeY;
- glTexCoord2f( 0, 0 ); // Bottom Left
- glVertex2f( pLeft, pBottom );
- glTexCoord2f( 0, 1 ); // Top Left
- glVertex2f( pLeft, pTop );
- glTexCoord2f( 1, 1 ); // Top Right
- glVertex2f( pRight, pTop );
- glTexCoord2f( 1, 0 ); // Bottom Right
- glVertex2f( pRight, pBottom );
-
- //phisically update parameters of the particle
- particle->updateParameters( timeDiff );
-
- //check for particle death / explosion
- switch (particle->particleType)
- {
- //a Fireparticle is restarted when in right conditions
- case Particle::FireParticle:
- if ( posx < -FIELDW_2 || posx > FIELDW_2 ||
- (particle->zpos < -10.0 && posy < -FIELDW_2) )
- {
- particle->initializeValues();
- if ( DRAND > 0.9995 )
- particle->zspeed *= 4;
- }
- break;
-
- //a leader explodes when his z speed drops to zero
- //or, if it uses life, at death
- case Particle::FireWorkLeaderParticle:
- if ((particle->zspeed <= 0.0f && !particle->useLife) ||
- (particle->useLife && particle->life <= 0.0) )
- {
- // play sound if enabled (and once per frame)
- if (parameters.enableSound && !playedExplodeSound)
- {
- playSound(sound_explosion);
- playedExplodeSound = true;
- }
- // flash screen if enabled
- if (parameters.enableFlash && !flashedScreen) {
- glEnd();
- glDisable( GL_TEXTURE_2D );
- glColor4f( 1,1,1, parameters.flashOpacity / 10.0 );
- glBegin( GL_TRIANGLE_STRIP );
- glVertex2f( FIELDW_2, FIELDW_2 );
- glVertex2f( -FIELDW_2, FIELDW_2 );
- glVertex2f( FIELDW_2, -FIELDW_2 );
- glVertex2f( -FIELDW_2, -FIELDW_2 );
- glEnd();
- if ( particleTexture )
- glEnable( GL_TEXTURE_2D );
- glBegin( GL_QUADS );
- flashedScreen = true;
- }
- // generating children and removing parent
- int elementIndex = particleList.at();
- explodeFirework(particle);
- particleList.remove(elementIndex);
- particleList.prev();
- } else if ( parameters.enableTrails && DRAND < 0.4 ) {
- // leave trail behind the particle (it'a small and slow red debris)
- Particle * p = new Particle( Particle::FireWorkDebrisParticle );
- p->initializeValues( 0, particle, 1, 1 );
- p->texture = particleTexture;
- p->xspeed /= 4;
- p->yspeed /= 4;
- p->zspeed /= 8;
- p->zacc /= 4;
- p->pixelSize = 2;
- p->colour[0] /= 2;
- int elementIndex = particleList.at();
- particleList.append( p );
- particleList.at( elementIndex );
- }
- break;
-
- //remove if dead or outside field
- default:
- if (particle->life <= 0.0 || posx<-FIELDW_2 || posx>FIELDW_2 || posy<-FIELDW_2) {
- particleList.remove();
- particleList.prev();
- }
- break;
- }
- }
- glEnd();
-
- /* render WRITINGS */
-
- if ( parameters.enableWritings )
- {
- int chance = (int) (1000.0 * DRAND);
- if ( !chance ) {
- static const TQString someStrings[] = {
- i18n("www.kde.org"),
- i18n("My TDE, please!"),
- i18n("KoNqUeR the World"),
- i18n("KFIRESAVER 3D"),
- i18n("Gimme your eyes..."),
- i18n("Thank you for using TDE"),
- i18n("Going insane tonight"),
- };
- int n = (int)(6.0 * DRAND);
- writer->spawnWords( someStrings[n], Writer::Fun1 );
- }
- writer->render( timeDiff );
- }
-
- /* generate a new FIREWORK_LEADER */
-
- int random = (int) ((float)parameters.fireworksFrequency * DRAND);
- if (showp.ShowType == Show)
- {
- //double the chances ('frequency') to raise a new leaderParticle
- //but envelop it under a sine function
- float step = (showp.timeStamp - timeCurrent) / showp.timeGap;
- if (DRAND > sin(M_PI*step))
- random = -1;
- if (showp.type == AngelHairs && DRAND < 0.5)
- random = -1;
- }
- if ( !random )
- {
- Particle * particle = new Particle( Particle::FireWorkLeaderParticle );
- particle->initializeValues();
- particle->texture = flareTexture;
- particleList.append( particle );
- }
-
- /* explode a logo */
-
- int logoImages = imageList.count();
- if ( logoImages > 0 ) {
- random = (int) (parameters.logoFrequency * logoImages * 200.0 * DRAND);
- if ( random < logoImages )
- {
- if (parameters.enableFlash && !flashedScreen) {
- glDisable( GL_TEXTURE_2D );
- glColor4f( 1,1,1, parameters.flashOpacity / 10.0 );
- glBegin( GL_TRIANGLE_STRIP );
- glVertex2f( FIELDW_2, FIELDW_2 );
- glVertex2f( -FIELDW_2, FIELDW_2 );
- glVertex2f( FIELDW_2, -FIELDW_2 );
- glVertex2f( -FIELDW_2, -FIELDW_2 );
- glEnd();
- }
- burnLogo( imageList.at(random) );
- }
- }
-}
-
-
-int KFireSaver :: pickColour()
-{
- int color = (int) (DRAND * parameters.colorsCount);
- return parameters.colorsT[ color ];
-}
-
-
-KFireSaver :: enumFireworkType KFireSaver :: pickType()
-{
- int type = (int) (DRAND * parameters.typesCount);
- return parameters.typesT[ type ];
-}
-
-
-void KFireSaver :: explodeFirework(Particle* leaderParticle)
-{
- GLfloat displace[3] = {0.0,0.0,0.0};
- float tmp1 = 0.0, tmp2 = 0.0, tmp3 = 0.0, tmp4 = 0.0, tmp5 = 0.0;
-
- // color of exploded particles
- bool bicolor = parameters.enableCombos && (showp.forceBicolour || DRAND > 0.95),
- flickers = false;
- int cscheme = showp.forceColour ? showp.colour : pickColour(),
- cscheme2 = showp.forceColour ? showp.colourSec : pickColour();
-
- // randomize type of exploding firework
- enumFireworkType fwType =
- showp.forceType ? (enumFireworkType) showp.type : pickType();
-
- // other options for generated particles
- int number = (int) ((DRAND + DRAND) * 150.0);
- float power = showp.forcePower ?
- showp.powerEnvelop * (0.8 + 0.3*DRAND) :
- DRAND * 11.0 + 2.0,
- powermin = DRAND * power;
-
- // now some rules ...
- //a splitter can't split up more than 2 times
- if (fwType == Splitter && leaderParticle->explosionsDepth > 1) {
- if (parameters.typesCount == 1)
- return;
- if (showp.forceType)
- fwType = showp.typeSec;
- if (fwType == Splitter)
- while ( (fwType = pickType()) == Splitter );
- }
-
- // PRE-ADJUST parameters for the firework we're creating
- switch ( fwType )
- {
- //no need to handle this. it's the default configuration.
- case Sphere:
- break;
-
- //explosion whithout emitting particles, only a flash
- case NoFW:
- number = 1;
- power = powermin = 0;
- break;
-
- //splits up into 'number' orange pieces. tmp1 holds base_life
- case Splitter:
- cscheme = showp.forceColour ? showp.colour : 1;
- bicolor = false;
- number = 3 + (int) (DRAND * 4);
- power /= 2.0;
- powermin = power / 2.0;
- tmp1 = 0.4 + DRAND * 1.5;
- break;
-
- //randomize a couple of angles (phi - theta) for exploding circle
- case BiCircle:
- number *= 2;
- case Circle:
- power = DRAND * 5.0 + 4.0;
- tmp1 = DRAND * M_PI;
- tmp2 = DRAND * M_PI;
- tmp4 = cos(tmp2); //c2
- tmp3 = sin(tmp2); //s2
- tmp2 = cos(tmp1); //c1
- tmp1 = sin(tmp1); //s1
- break;
-
- //cascade of flickering orange particles
- case AngelHairs:
- cscheme = showp.forceColour ? showp.colour : 1;
- bicolor = false;
- flickers = true;
- power = 0.8 + DRAND * 1.9;
- powermin = DRAND*0.5;
- number = 100 + (int)(DRAND * 150);
- displace[0] = -leaderParticle->xspeed/2;
- displace[1] = -leaderParticle->yspeed/2;
- displace[2] = power;
- break;
-
- //behave as a standard spherical firework
- case Spirals:
- break;
-
- //not yet implemented, suppressing particles
- case SuperNova:
- case NoRender:
- number = 0;
- break;
- }
-
- //limit number of particles as we are getting to the capacity saturation
- float currentParticles = (float) particleList.count();
- const float particleCapacity = 15000;
- const float particleGap = 8000;
- if ( number > 10 && currentParticles > (particleCapacity - particleGap) )
- {
- //NoFW, Splitter and NoRender aren't limited.
- number = (int)( (float)number * (particleCapacity - currentParticles) / particleGap );
- if ( number < 10 )
- number = 0;
- }
-
- int newExplosionsDepth = leaderParticle->explosionsDepth + 1;
- for (int i=0 ; i<number ; i++)
- {
- Particle * particle;
- if ( fwType == Spirals )
- particle = new TurningParticle( Particle::FireWorkDebrisParticle );
- else
- particle = new Particle( Particle::FireWorkDebrisParticle );
-
- particle->initializeValues (
- bicolor && (i>number/2) ? cscheme2 : cscheme,
- leaderParticle, powermin, power,
- flickers, displace );
- particle->texture = particleTexture;
- particle->explosionsDepth = newExplosionsDepth;
-
- // POST-ADJUST particle coefficients adapting to current FireworkType
- switch ( fwType )
- {
- //create a big, white particle, simulating explosion
- case NoFW:
- if (parameters.enableFade)
- particle->startLife = particle->life = 0.030;
- else
- particle->startLife = particle->life = 0.075;
- particle->texture = flareTexture;
- particle->colour[0]=
- particle->colour[1]=
- particle->colour[2]=1.0;
- particle->pixelSize = 50.0 + 75.0 * DRAND;
- particle->zacc = 0;
- break;
-
- //default. no need to change parameters, only create the
- //'sphere light' as the first big particle if set.
- case Sphere:
- if (i==0 && parameters.enableSphereLight && number > 40) {
- particle->texture = flareTexture;
- particle->xspeed = leaderParticle->xspeed;
- particle->yspeed = leaderParticle->yspeed;
- particle->zspeed = 0.0;
- particle->colour[0] /= 2.0;
- particle->colour[1] /= 2.0;
- particle->colour[2] /= 2.0;
- float impression = power * (float)number/5.0;
- particle->pixelSize = 25.0 * DRAND + impression;
- if (parameters.enableFade) {
- particle->startLife = particle->life = 0.040;
- } else {
- particle->startLife = 1.3;
- particle->life = 1.8;
- }
- }
- break;
-
- //
- case Splitter:
- particle->particleType = Particle::FireWorkLeaderParticle;
- particle->pixelSize *= 3.0;
- particle->startLife = particle->life = tmp1 * (0.75 + DRAND/3.0);
- if (particle->zspeed < 0)
- particle->zspeed = -particle->zspeed;
- break;
-
- case Circle:
- case BiCircle:
- tmp5 = 2 * M_PI * DRAND;
- //MMX can be useful.. if you know how to use it :-)
- if ( fwType == BiCircle && i > number/2 ) {
- GLfloat ey = cos(tmp5),
- ez = sin(tmp5);
- particle->xspeed = power * ( tmp3*ez );
- particle->yspeed = power * ( tmp2*ey - tmp1*tmp4*ez );
- particle->zspeed = power * ( tmp1*ey + tmp2*tmp4*ez );
- } else {
- GLfloat ex = sin(tmp5),
- ey = cos(tmp5);
- particle->xspeed = power * ( tmp4*ex );
- particle->yspeed = power * ( tmp1*tmp3*ex + tmp2*ey );
- particle->zspeed = power * ( -tmp2*tmp3*ex + tmp1*ey );
- }
- break;
-
- case AngelHairs:
- particle->zacc = -9.807 * (0.05 + DRAND*0.20);
- particle->life = 2.0 + DRAND*2.5;
- particle->startLife = particle->life - 1;
- if (particle->zspeed < 0)
- particle->zspeed *= -1;
- //particle->pixelSize = 5.0;
- break;
-
- case Spirals:
- particle->texture = diastarTexture;
- break;
-
- //discard cases
- case SuperNova:
- case NoRender:
- break;
- }
- particleList.append(particle);
- }
-}
-
-void KFireSaver :: timerEvent(TQTimerEvent*)
-{
- timeval tv;
- gettimeofday(&tv,NULL);
- double currentTime = (double)tv.tv_sec + (double)tv.tv_usec/1000000.0;
-
- bool chooseType = false,
- chooseColor = false,
- chooseOthers = false,
- updateTimings = false;
- bool firstTime = showp.timeStamp == 0.0;
- bool endOfScene = currentTime >= showp.timeStamp;
-
- if (firstTime)
- switch (showp.ShowType)
- {
- case Monotype:
- /* first time choose the type, color and attributes will
- be choosed randomly for every firework which explodes*/
- showp.forceType = true;
- chooseType = true;
- break;
-
- case Monochrome:
- /* first time choose the color, type and attributes will
- be choosed randomly for every firework which explodes*/
- showp.forceColour = true;
- chooseColor =
- chooseOthers = true;
- break;
-
- default: break;
- }
-
- if (endOfScene || firstTime)
- switch (showp.ShowType)
- {
- case Show:
- /* if a scene ended, randomize global parameters for the
- whole next scene */
- showp.forceType = true;
- showp.forceColour = true;
- showp.forcePower = true;
- chooseOthers =
- chooseColor =
- chooseType = true;
- updateTimings = true;
- break;
-
- default: break;
- }
-
- if ( chooseType )
- {
- showp.type = pickType();
- if (parameters.typesCount < 2)
- showp.typeSec = NoRender;
- else
- while ((showp.typeSec = pickType()) == showp.type);
- }
- if ( chooseColor ) {
- showp.colour = pickColour();
- showp.colourSec = pickColour();
- }
- if ( chooseOthers )
- {
- showp.powerEnvelop = DRAND * 8.0 + 3.0;
- if (DRAND > 0.9)
- {
- showp.forceBicolour = true;
- showp.colourSec = pickColour();
- } else
- showp.forceBicolour = false;
- }
- if ( firstTime || updateTimings )
- {
- if (DRAND < 0.2)
- showp.timeGap = 1.0 + DRAND * 2.0;
- else
- showp.timeGap = 3.0 + DRAND * 10.0;
- showp.timeStamp = currentTime + showp.timeGap;
- showp.timeGap /= 1.5; //hack to introduce delay in sine func
- }
-
- updateGL();
-}
-
-void KFireSaver :: burnLogo(TQImage * image)
-{
- if (!image || image->isNull())
- return;
- int step = parameters.enableReduceLogo ? 2 : 1,
- imageW = image->width(),
- imageH = image->height(),
- offsetX = imageW / 2,
- offsetY = imageH / 2;
- float speed = FIELDW_4 / (imageW > imageH ? imageW : imageH),
- speedXOffs = 5 * (DRAND - DRAND),
- speedYOffs = DRAND + DRAND + 1;
- //if image is too big, lower sample points
- while ((imageW/step)>96 || (imageH/step)>96)
- step *= 2;
- for (int y=0 ; y<imageH ; y+=step)
- {
- for (int x=0 ; x<imageW ; x+=step)
- {
- TQRgb pixel = image->pixel(x,y);
- if ( tqAlpha(pixel) < 250 )
- continue;
- //if ( DRAND > 0.9 )
- // continue;
-
- Particle* particle = new Particle( Particle::LogoParticle );
- particle->initializeValues();
- particle->texture = particleTexture;
-
- float xI = (x - offsetX) ,
- yI = (offsetY - y) ;
- particle->xpos = xI * speed * 0.5;
- particle->zpos = yI * speed * 0.5 + 5;
- particle->xspeed = xI * speed + speedXOffs;
- particle->zspeed = yI * speed + speedYOffs;
-
- particle->colour[0] = tqRed(pixel) / 255.0f;
- particle->colour[1] = tqGreen(pixel) / 255.0f;
- particle->colour[2] = tqBlue(pixel) / 255.0f;
-
- particleList.append(particle);
- }
- }
- if (parameters.enableSound)
- playSound(sound_debris);
-}
-
-void KFireSaver :: playSound(TQString file)
-{
- //flush inactive players
- KPlayObject * playObject = playObjectList.first();
- while ( playObject )
- {
- if ( playObject->state() != Arts::posPlaying )
- {
- playObjectList.remove();
- playObject = playObjectList.current();
- } else
- playObject = playObjectList.next();
- }
-
- //discart this sound if the player queue is already full (4 channels playing)
- if ( playObjectList.count() >= 6 )
- return;
-
- // not needed when all of the files are in the distribution
- //if (!TQFile::exists(file))
- //return;
-
- KPlayObjectFactory factory(artsServer.server());
- playObject = factory.createPlayObject(KURL(file), true);
-
- if (playObject && !playObject->isNull())
- {
- playObject->play();
- playObjectList.append(playObject);
- }
-}
-
-bool KFireSaver :: loadTexture( TQString fileName, unsigned int & textureID )
-{
- //reset texture ID to the default EMPTY value
- textureID = 0;
-
- //load image
- TQImage tmp;
- if ( !tmp.load( fileName ) )
- return false;
-
- //convert it to suitable format (flipped RGBA)
- TQImage texture = TQGLWidget::convertToGLFormat( tmp );
- if ( texture.isNull() )
- return false;
-
- //get texture number and bind loaded image to that texture
- glGenTextures( 1, &textureID );
- glBindTexture( GL_TEXTURE_2D, textureID );
- glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
- glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
- glTexImage2D( GL_TEXTURE_2D, 0, 4 /* 3 ??? */, texture.width(), texture.height(),
- 0, GL_RGBA, GL_UNSIGNED_BYTE, texture.bits() );
- return true;
-}
-
-void KFireSaver :: freeTexture( unsigned int & textureID )
-{
- if ( textureID > 0 )
- glDeleteTextures( 1, &textureID );
- textureID = 0;
-}
-
-void KFireSaver :: readConfig ()
-{
- TDEConfig config("kfiresaverrc",true,false);
-
- // show
- config.setGroup( "Show" );
- showp.ShowType = (enum enumShowType)config.readNumEntry( "ShowType", 1 );
- parameters.fireworksFrequency = 11 - config.readNumEntry( "FireworksFrequency", 7 );
- if ( parameters.fireworksFrequency < 1 )
- parameters.fireworksFrequency = 1;
- if ( parameters.fireworksFrequency > 11 )
- parameters.fireworksFrequency = 11;
- parameters.fireworksFrequency *= (parameters.fireworksFrequency + 1); //*karl gauss's sum*
- parameters.particleSize = config.readNumEntry( "ParticlesSize", 0 );
- if ( parameters.particleSize < -5 )
- parameters.particleSize = -5;
- if ( parameters.particleSize > 5 )
- parameters.particleSize = 5;
- if ( parameters.enableBottomFire = config.readBoolEntry( "enable-BottomFire", true ) )
- {
- TQColor blue = TQt::darkBlue;
- parameters.bottomFireColor = config.readColorEntry( "BottomFireColor", &blue );
- }
- parameters.enableSound = config.readBoolEntry( "enable-Sounds", false );
- parameters.enableNoOverhead = config.readBoolEntry( "enable-NoOverhead", true );
- parameters.enableRealtime = config.readBoolEntry( "enable-FrameSkip", true );
-
- // fireworks
- config.setGroup( "Fireworks" );
- parameters.typesCount = 0;
- if ( config.readBoolEntry( "use-Classic", true ) )
- parameters.typesT[parameters.typesCount++] = Sphere;
- if ( config.readBoolEntry( "use-Explosion", false ) )
- parameters.typesT[parameters.typesCount++] = NoFW;
- if ( config.readBoolEntry( "use-FlameRing", false ) )
- parameters.typesT[parameters.typesCount++] = Circle;
- if ( config.readBoolEntry( "use-FlameWorld", false ) )
- parameters.typesT[parameters.typesCount++] = BiCircle;
- if ( config.readBoolEntry( "use-Fall", false ) )
- parameters.typesT[parameters.typesCount++] = AngelHairs;
- if ( config.readBoolEntry( "use-Splitter", false ) )
- parameters.typesT[parameters.typesCount++] = Splitter;
- if ( config.readBoolEntry( "use-Spirals", false ) )
- parameters.typesT[parameters.typesCount++] = Spirals;
- if ( config.readBoolEntry( "use-SuperNova", false ) )
- parameters.typesT[parameters.typesCount++] = SuperNova;
- if ( !parameters.typesCount ) {
- kdWarning() << "KFireSaver3D: Warning, no fireworks enabled in config file" << endl;
- kdWarning() << " enabling 'Classic Spherical'" << endl;
- parameters.typesCount = 1;
- parameters.typesT[0] = Sphere;
- }
- parameters.typesT[ parameters.typesCount ] =
- parameters.typesT[ parameters.typesCount-1 ];
- parameters.colorsCount = 0;
- if ( config.readBoolEntry( "use-Red", false ) )
- parameters.colorsT[parameters.colorsCount++] = 0;
- if ( config.readBoolEntry( "use-Orange", true ) )
- parameters.colorsT[parameters.colorsCount++] = 1;
- if ( config.readBoolEntry( "use-Green", false ) )
- parameters.colorsT[parameters.colorsCount++] = 2;
- if ( config.readBoolEntry( "use-Blue", false ) )
- parameters.colorsT[parameters.colorsCount++] = 3;
- if ( config.readBoolEntry( "use-White", true ) )
- parameters.colorsT[parameters.colorsCount++] = 4;
- if ( config.readBoolEntry( "use-Purple", false ) )
- parameters.colorsT[parameters.colorsCount++] = 5;
- if ( config.readBoolEntry( "use-DeepGreen", true ) )
- parameters.colorsT[parameters.colorsCount++] = 6;
- if ( !parameters.colorsCount )
- {
- kdWarning() << "KFireSaver3D: Warning enable at least one color" << endl;
- kdWarning() << " enabling 'Blinding White'" << endl;
- parameters.colorsCount = 1;
- parameters.colorsT[0] = 4;
- }
- parameters.colorsT[ parameters.colorsCount ] =
- parameters.colorsT[ parameters.colorsCount-1 ];
- parameters.enableCombos = config.readBoolEntry( "use-Multicolor", true );
-
- // specials
- config.setGroup( "Specials" );
- if ( parameters.enableLogos = config.readBoolEntry( "enable-Logos", true ) )
- {
- TQImage tempImage;
- tempImage.setAlphaBuffer( true );
- if ( config.readBoolEntry( "LogosTux", true ) )
- if ( tempImage.load(locate("data","kfiresaver/kfs_tux.png")) )
- imageList.append( new TQImage(tempImage) );
- if ( config.readBoolEntry( "LogosKonqui", true ) )
- if ( tempImage.load(locate("data","kfiresaver/kfs_kde.png")) )
- imageList.append( new TQImage(tempImage) );
- if ( config.readBoolEntry( "LogosKDEIcons", true ) ) {
- const TQString icons[] = {
- "3floppy_unmount", "cdrom_unmount", "hdd_mount", "kmix",
- "network", "my-computer", "folder_home", "konqueror",
- "kmail", "penguin", "personal" };
- for ( int i = 0; i < 11; i++ )
- imageList.append( new TQImage(DesktopIcon(icons[i],64).convertToImage()) );
- }
- parameters.enableReduceLogo = config.readBoolEntry( "LogosReduceDetail", true );
- parameters.logoFrequency = 11 - config.readNumEntry( "LogosFrequency", 4 );
- if ( parameters.logoFrequency < 1 )
- parameters.logoFrequency = 1;
- if ( parameters.logoFrequency > 11 )
- parameters.logoFrequency = 11;
- }
- if ( parameters.enableStars = config.readBoolEntry( "enable-Stars", true ) )
- {
- parameters.enableStarFlickering = config.readBoolEntry( "StarsFlicker", false );
- parameters.enableStarGradient = config.readBoolEntry( "StarsGradient", true );
- parameters.starsNumber = config.readNumEntry( "StarsNumber", 4 );
- if ( parameters.starsNumber < 0 )
- parameters.starsNumber = 0;
- if ( parameters.starsNumber > 10 )
- parameters.starsNumber = 10;
- }
- parameters.enableWritings = config.readBoolEntry( "enable-Writings", true );
-
- // effects
- config.setGroup( "Effects" );
- parameters.enableSphereLight = config.readBoolEntry( "enable-SphericalLight", true );
- if ( parameters.enableFlash = config.readBoolEntry( "enable-Flash", false ) )
- {
- parameters.flashOpacity = config.readNumEntry( "FlashOpacity", 5 );
- if ( parameters.flashOpacity < 0 )
- parameters.flashOpacity = 0;
- if ( parameters.flashOpacity > 10 )
- parameters.flashOpacity = 10;
- }
- if ( parameters.enableFade = config.readBoolEntry( "enable-Fade", false ) )
- {
- parameters.fadeAmount = config.readNumEntry( "FadeIntensity", 3 );
- if ( parameters.fadeAmount < 0 )
- parameters.fadeAmount = 0;
- if ( parameters.fadeAmount > 9 )
- parameters.fadeAmount = 9;
- }
- if ( parameters.enableMegaFlares = config.readBoolEntry( "enable-Flares", true ) )
- {
- parameters.megaFlares = config.readNumEntry( "FlaresDimension", 5 );
- if ( parameters.megaFlares < 0 )
- parameters.megaFlares = 0;
- if ( parameters.megaFlares > 10 )
- parameters.megaFlares = 10;
- parameters.megaFlares += 4;
- parameters.megaFlares *= 2;
- }
- parameters.enableTrails = config.readBoolEntry( "enable-Trail", false );
-}
diff --git a/kscreensaver/kdesavers/firesaver.h b/kscreensaver/kdesavers/firesaver.h
deleted file mode 100644
index 8a34c5e9..00000000
--- a/kscreensaver/kdesavers/firesaver.h
+++ /dev/null
@@ -1,170 +0,0 @@
-// This file is part of KFireSaver3D.
-
-// KFireSaver3D is free software; you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation; either version 2 of the License, or
-// (at your option) any later version.
-
-// KFireSaver3D 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 KFireSaver3D; if not, write to the Free Software
-// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-
-
-// Author: Enrico Ros, based on the great work of David Sansome (kfiresaver)
-
-#ifndef KFIRESAVER_H
-#define KFIRESAVER_H
-
-#define PERSP_MAG_FACTOR 8.0
-#define NUMBER_OF_FIREPARTICLES 180
-
-#define MSECPERIOD 17 // 1000ms / 60fps = 16.6667 ~= 17 [ms/frame]
-
-#define FIELDWIDTH 30.0
-#define FIELDW_2 (FIELDWIDTH/2.0)
-#define FIELDW_4 (FIELDWIDTH/4.0)
-
-#include <tqgl.h>
-#include <tqptrlist.h>
-#include <tqimage.h>
-#include <tqstring.h>
-#include <tqcolor.h>
-
-#include <arts/kplayobject.h>
-#include <arts/kartsserver.h>
-#include <arts/kartsdispatcher.h>
-
-class Particle;
-class Writer;
-
-class KFireSaver : public TQGLWidget
-{
- public:
- KFireSaver( TQWidget *parent=0, const char *name=0 );
- ~KFireSaver();
-
- protected:
- void initializeGL();
- void resizeGL( int, int );
- void paintGL();
- void timerEvent( class TQTimerEvent * );
-
- private:
- enum enumFireworkType
- {
- Sphere = 0,
- NoFW = 1,
- Circle = 2,
- BiCircle = 3,
- AngelHairs = 4,
- Splitter = 5,
- Spirals = 6,
- SuperNova = 7,
- NoRender = 8
- };
-
- inline enumFireworkType pickType();
- inline int pickColour();
- void explodeFirework(Particle* fireWorkLeaderParticle);
- void burnLogo(TQImage * image);
- void playSound(TQString file);
- bool loadTexture(TQString file, unsigned int & textureID);
- void freeTexture(unsigned int & textureID);
- void readConfig();
-
- //list of particles and stars
- TQPtrList<Particle>
- particleList,
- starList;
-
- //stuff for 'exploding' pixmaps (kde, tux, icons..)
- TQPtrList<TQImage>
- imageList;
-
- //texture stuff
- unsigned int
- currentTexture,
- particleTexture,
- starTexture,
- flareTexture,
- diastarTexture; // (to add) novaTexture cometTexture
-
- //sound stuff
- KArtsDispatcher artsDispatcher;
- KArtsServer artsServer;
- TQPtrList<KPlayObject> playObjectList;
- TQString sound_explosion,
- sound_debris;
-
- //other stuff
- class Writer * writer;
- float unitX,
- unitY;
- double timeStampFrame;
- bool firstGLFrame;
-
- struct {
- bool enableBottomFire, //show
- enableSound,
- enableNoOverhead,
- enableRealtime,
- enableCombos, //fireworks
- enableLogos, //specials
- enableReduceLogo,
- enableStars,
- enableStarFlickering,
- enableStarGradient,
- enableWritings,
- enableSphereLight, //effects
- enableFlash,
- enableFade,
- enableMegaFlares,
- enableTrails;
- int fireworksFrequency, //show
- particleSize,
- logoFrequency, //specials
- starsNumber,
- flashOpacity, //effects
- fadeAmount,
- megaFlares;
- TQColor
- bottomFireColor;
- int colorsCount,
- colorsT[8],
- typesCount;
- enumFireworkType
- typesT[9];
- } parameters;
-
-
- enum enumShowType {
- Show = 0,
- Random = 1,
- Monotype = 2,
- Monochrome = 3
- };
-
- struct {
- enum enumShowType ShowType;
- int colour,
- colourSec;
- enumFireworkType
- type,
- typeSec;
- bool forceBicolour,
- forceColour,
- forcePower,
- forceType;
- float powerEnvelop;
- double timeStamp,
- timeGap;
- } showp;
-};
-
-#endif
diff --git a/kscreensaver/kdesavers/firesaverparticle.cpp b/kscreensaver/kdesavers/firesaverparticle.cpp
deleted file mode 100644
index 421115a7..00000000
--- a/kscreensaver/kdesavers/firesaverparticle.cpp
+++ /dev/null
@@ -1,273 +0,0 @@
-// This file is part of KFireSaver3D.
-
-// KFireSaver3D is free software; you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation; either version 2 of the License, or
-// (at your option) any later version.
-
-// KFireSaver3D 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 KFireSaver3D; if not, write to the Free Software
-// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-
-
-// Author: Enrico Ros, based on the great work of David Sansome (kfiresaver)
-
-#include <math.h>
-#include <stdlib.h>
-
-#include "firesaverparticle.h"
-#include "firesaver.h"
-
-//current color scheme : red orng grn blue w m c
-static const GLfloat c_red_min[7] = { 0.4, 0.9, 0, 0, 1, 0, 0 };
-static const GLfloat c_red_max[7] = { 1, 1, 0, 0, 1, 1, 0 };
-static const GLfloat c_green_min[7] = { 0, 0.4, 0.4, 0, 1, 0, 0 };
-static const GLfloat c_green_max[7] = { 0, 0.5, 1, 0.5, 1, 0, 1 };
-static const GLfloat c_blue_min[7] = { 0, 0.1, 0, 0.5, 1, 0, 0 };
-static const GLfloat c_blue_max[7] = { 0, 0.2, 0, 1, 1, 1, 1 };
-
-
-//default initialization (good for Leader / Fire)
-Particle :: Particle( ParticleType pT )
- : particleType( pT ), explosionsDepth( 0 ), texture( 0 ),
- xpos( 0.0 ), ypos( 0.0 ), zpos( -9.9 ),
- xspeed( 0.0 ), yspeed( 0.0 ), zspeed( 0.0 ), zacc( -9.807 ),
- life( 0.0 ), startLife( 0.0 ),
- pixelSize( 5.0 ), useLife( true ), flicker( 0 )
-{
- colour[0] = 0;
- colour[1] = 0;
- colour[2] = 0;
- colour[3] = 1;
-}
-
-
-void Particle :: initializeValues (
- int cs,
- Particle* debrisParent,
- GLfloat powermin, GLfloat powermax,
- bool flickers,
- GLfloat *displace )
-//note: this function is called when a particle needs a set of default parameters.
-// these depends on the ParticleType.
-{
- switch (particleType)
- {
-// -- FireParticle (params: [cs])
-// born in a rectangle centered in { 0, 0, -9.9 }
-// speed 3-6 [m/s] blue/cyan colored
-// this is only done at the beginning or when a particle dies
- case FireParticle:
- xpos = DRAND * FIELDWIDTH - FIELDW_2;
- ypos = DRAND - 2.0;
-
- xspeed = DRAND * 4.0 - 2.0;
- yspeed = DRAND * 2.0;
- zspeed = DRAND * 3.0 + 3.0;
-
- useLife = false;
- pixelSize = 2.0 + DRAND * 2.0;
- break;
-
-// -- FireWorkLeaderParticle (params: none)
-// they start in a rectangle at the same height but
-// with different power and the same 'orange' colour
- case FireWorkLeaderParticle:
- xpos = DRAND * 14.0 - 7.0;
- ypos = DRAND * 2.0 - 1.0;
-
- xspeed = DRAND * 8.0 - 4.0 - (xpos / 2.0)*DRAND;
- yspeed = DRAND * 8.0 - 4.0;
- zspeed = DRAND * 6.5 + 18.0;
-
- colour[0] = 0.6;
- colour[1] = DRAND * 0.4;
- colour[2] = 0.0;
-
- useLife = false;
- break;
-
-// -- LogoParticle (params: none)
-// they start in the middle of the screen.
-// little g-force, constant life, weavy-y
- case LogoParticle:
- yspeed = 3*(DRAND - DRAND);
- zacc = -9.807f / 5.0f;
-
- startLife = 0.7f;
- life = 1.7f;
- break;
-
-// -- StarParticle (params: none)
-// spherically distributed. xpos and ypos are the
-// transformed screen positions of the star.
- case StarParticle:
- colour[0] = DRAND * 0.2 + 0.5;
- colour[1] = DRAND * 0.2 + 0.5;
- colour[2] = DRAND * 0.2 + 0.5;
-
- {bool accepted = false;
- while (!accepted) {
- float module = 30,
- theta = DRAND * M_PI * 2.0,
- u = DRAND * 2.0 - 1.0,
- root = sqrt( 1 - u*u );
- xpos = module * root * cos(theta);
- ypos = fabs(module * root * sin(theta)) - 10.0;
- zpos = fabs(module * u);
-
- float sfactor = 256.0 / (256.0 + PERSP_MAG_FACTOR*ypos);
- xpos *= sfactor;
- ypos = sfactor * zpos - FIELDW_2;
-
- pixelSize = sfactor * (2.0 + 3.0*DRAND);
-
- accepted = xpos > -FIELDW_2 && xpos < FIELDW_2 &&
- ypos > -FIELDW_2 && ypos < FIELDW_2;
- }}
- break;
-
-// -- FireWorkDebrisParticle (params: cs, parent, [powerm], [powerM], [flickers], [displace])
-// parameters are randomized for a 'spherical' explosion.
-// power{min,max}, flickers and displace applies only for that
-// kind of ParticleType.
- case FireWorkDebrisParticle:
-
- //same origin of the dead leader
- xpos = debrisParent->xpos;
- ypos = debrisParent->ypos;
- zpos = debrisParent->zpos;
-
- //true spherical randomization
- float module = powermin + DRAND * (powermax - powermin),
- theta = DRAND * M_PI * 2.0,
- u = DRAND * 2.0 - 1.0,
- root = sqrt( 1 - u*u );
- xspeed = debrisParent->xspeed + module * root * cos(theta) * (1.0 + DRAND/3.0);
- yspeed = debrisParent->yspeed + module * root * sin(theta) * (1.0 + DRAND/3.0);
- zspeed = module * u * (1.0 + DRAND/3.0); //was 0.9 + DRAND/3
-
- //if set add a displace to speed
- if ( displace ) {
- xspeed += displace[0];
- yspeed += displace[1];
- zspeed += displace[2];
- }
-
- //randomize the color choosing on current palette
- colour[0] = c_red_min[cs] + (c_red_max[cs]-c_red_min[cs]) * DRAND;
- colour[1] = c_green_min[cs] + (c_green_max[cs]-c_green_min[cs]) * DRAND;
- colour[2] = c_blue_min[cs] + (c_blue_max[cs]-c_blue_min[cs]) * DRAND;
-
- pixelSize = DRAND * 2.0 + 2.0;
- zacc = -9.807 / (6.0 - pixelSize);
-
- life = startLife = pixelSize / 2.0;
-
- //if flickers is set the current visible delay is randomized
- if ( flickers )
- flicker = (int) ((DRAND * 2.0 - 1.0) * (float)FLICKER_FRAMES_DELAY);
- break;
- }
-}
-
-
-void Particle :: updateParameters( float dT )
-//note: this procedure uses a reduced set of parameters
-// x and y axis acceleration is no more used
-// the only external iterations are:
-// - the g force
-// - a sort of air friction that limits speed in x,y and
-// acceleration on z
-{
- xpos += xspeed * dT;
- ypos += yspeed * dT;
- zpos += (zspeed + zacc*dT/2) * dT;
-
- zspeed += zacc * dT;
-
- xspeed *= 0.998;
- yspeed *= 0.998;
- zspeed *= 0.999;
-
- if (useLife)
- life -= dT;
-}
-
-
-// BEGIN TurningParticle class
-
-TurningParticle :: TurningParticle( ParticleType pT )
- : Particle( pT ) {}
-
-void TurningParticle :: initializeValues (
- int cs,
- Particle* leader,
- GLfloat powermin,
- GLfloat powermax,
- bool /*flickers*/,
- GLfloat * /*displace*/ )
-{
- //same origin of the parent
- xpos = leader->xpos;
- ypos = leader->ypos;
- zpos = leader->zpos;
-
- //velocity : true spherical randomization
- float module = powermin + (powermax - powermin) * DRAND * 0.6,
- theta = DRAND * M_PI * 2.0,
- u = DRAND * 2.0 - 1.0,
- root = sqrt( 1 - u*u );
- xspeed = -module * root * cos(theta);
- yspeed = -module * root * sin(theta);
- zspeed = module * u;
-
- //spin axis : in quadrature with velocity
- module = (1 + DRAND) / 40;
- u = DRAND * 2.0 - 1.0;
- root = sqrt( 1 - u*u );
- // axis to spin around
- wx = module * root * cos(theta + M_PI_2);
- wy = module * root * sin(theta + M_PI_2);
- wz = module * u;
-
- //randomize the color choosing on current palette
- colour[0] = c_red_min[cs] + (c_red_max[cs]-c_red_min[cs]) * DRAND;
- colour[1] = c_green_min[cs] + (c_green_max[cs]-c_green_min[cs]) * DRAND;
- colour[2] = c_blue_min[cs] + (c_blue_max[cs]-c_blue_min[cs]) * DRAND;
-
- pixelSize = DRAND * 2.0 + 2.0;
- zacc = -9.807 / 5.0;
- life = startLife = pixelSize / 2.0;
-}
-
-
-void TurningParticle :: updateParameters ( float dT )
-{
- //update position
- xpos += xspeed * dT;
- ypos += yspeed * dT;
- zpos += zspeed * dT;
-
- //tan vector = velocity vector (vect producted by) spin axis
- float vx = yspeed * wz - zspeed * wy,
- vy = zspeed * wx - xspeed * wz,
- vz = xspeed * wy - yspeed * wx;
-
- //update velocity adding a tangential component (aka infinitesimally
- //rotating the vector)
- xspeed += vx;
- yspeed += vy;
- zspeed += vz + zacc * dT;
-
- if (useLife)
- life -= dT;
-}
-
-//END TurningParticle
diff --git a/kscreensaver/kdesavers/firesaverparticle.h b/kscreensaver/kdesavers/firesaverparticle.h
deleted file mode 100644
index e539adec..00000000
--- a/kscreensaver/kdesavers/firesaverparticle.h
+++ /dev/null
@@ -1,105 +0,0 @@
-// This file is part of KFireSaver3D.
-
-// KFireSaver3D is free software; you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation; either version 2 of the License, or
-// (at your option) any later version.
-
-// KFireSaver3D 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 KFireSaver3D; if not, write to the Free Software
-// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-
-
-// Author: Enrico Ros, based on the great work of David Sansome (kfiresaver)
-
-#ifndef KFIRESAVER_PARTICLE_H
-#define KFIRESAVER_PARTICLE_H
-
-#include <tqgl.h>
-
-#define FLICKER_FRAMES_DELAY 8
-#define DRAND ((float)rand() / (float)RAND_MAX) /*random float between 0 and 1*/
-
-/* -- Particle class.
- * Sets initial parameters and takes care of updating physics for a single
- * fireworks particle. The physics model is the Newtonian one.
- */
-class Particle
-{
- public:
- //enum definitions for type of particle
- enum ParticleType
- {
- FireParticle,
- FireWorkLeaderParticle,
- FireWorkDebrisParticle,
- LogoParticle,
- StarParticle
- };
-
- Particle( ParticleType pT );
-
- //public methods for initializing default parameters and update them
- virtual void initializeValues (
- int color_scheme = 0,
- Particle* leader = 0L,
- GLfloat powermin = 5.0,
- GLfloat powermax = 10.0,
- bool flickers = false,
- GLfloat *displace = 0L );
-
- virtual void updateParameters ( float timeGap );
-
- //public accessible variables of the class
- ParticleType particleType;
- int explosionsDepth;
- unsigned int texture;
-
- GLfloat xpos, ypos, zpos,
- xspeed, yspeed, zspeed,
- zacc;
-
- GLfloat colour[4],
- life, startLife,
- pixelSize;
-
- bool useLife;
- int flicker;
-
- private:
- Particle();
-};
-
-
-/* -- TurningParticle class.
- * Randomize initial parameters similar to a standard 'spherical' particle
- * and takes care of updating physics. The physics model is a funny 'bees'
- * (vectorial-product) one.
- */
-class TurningParticle : public Particle
-{
- public:
- TurningParticle( ParticleType pT );
-
- virtual void initializeValues (
- int color_scheme = 0,
- Particle* leader = 0L,
- GLfloat powermin = 5.0,
- GLfloat powermax = 10.0,
- bool flickers = false,
- GLfloat *displace = 0L );
-
- virtual void updateParameters ( float dT );
-
- private:
- float wx, wy, wz;
- TurningParticle();
-};
-
-#endif
diff --git a/kscreensaver/kdesavers/firesaversetup.ui b/kscreensaver/kdesavers/firesaversetup.ui
deleted file mode 100644
index 3a3f3536..00000000
--- a/kscreensaver/kdesavers/firesaversetup.ui
+++ /dev/null
@@ -1,1855 +0,0 @@
-<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
-<class>KFireSaverSetup</class>
-<widget class="TQWidget">
- <property name="name">
- <cstring>KFireSaverSetup</cstring>
- </property>
- <property name="geometry">
- <rect>
- <x>0</x>
- <y>0</y>
- <width>375</width>
- <height>344</height>
- </rect>
- </property>
- <property name="sizePolicy">
- <sizepolicy>
- <hsizetype>1</hsizetype>
- <vsizetype>1</vsizetype>
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="caption">
- <string>KFireSaver Setup</string>
- </property>
- <grid>
- <property name="name">
- <cstring>unnamed</cstring>
- </property>
- <property name="margin">
- <number>0</number>
- </property>
- <widget class="TQPushButton" row="0" column="2">
- <property name="name">
- <cstring>useButton</cstring>
- </property>
- <property name="text">
- <string>&amp;Load</string>
- </property>
- </widget>
- <widget class="TQComboBox" row="0" column="1">
- <item>
- <property name="text">
- <string>KDE (default)</string>
- </property>
- </item>
- <item>
- <property name="text">
- <string>Elegant White</string>
- </property>
- </item>
- <item>
- <property name="text">
- <string>Quick Simple</string>
- </property>
- </item>
- <item>
- <property name="text">
- <string>Enhanced Reality</string>
- </property>
- </item>
- <item>
- <property name="text">
- <string>Hypnotic Illusions</string>
- </property>
- </item>
- <property name="name">
- <cstring>presetCombo</cstring>
- </property>
- <property name="sizePolicy">
- <sizepolicy>
- <hsizetype>3</hsizetype>
- <vsizetype>0</vsizetype>
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- </widget>
- <widget class="TQLabel" row="0" column="0">
- <property name="name">
- <cstring>presetLabel</cstring>
- </property>
- <property name="text">
- <string>Preset:</string>
- </property>
- </widget>
- <spacer row="0" column="3">
- <property name="name">
- <cstring>spacer1</cstring>
- </property>
- <property name="orientation">
- <enum>Horizontal</enum>
- </property>
- <property name="sizeType">
- <enum>Expanding</enum>
- </property>
- <property name="sizeHint">
- <size>
- <width>201</width>
- <height>31</height>
- </size>
- </property>
- </spacer>
- <widget class="TQTabWidget" row="1" column="0" rowspan="1" colspan="4">
- <property name="name">
- <cstring>tabWidget</cstring>
- </property>
- <property name="tabShape">
- <enum>Rounded</enum>
- </property>
- <widget class="TQWidget">
- <property name="name">
- <cstring>tab</cstring>
- </property>
- <attribute name="title">
- <string>Preview</string>
- </attribute>
- <grid>
- <property name="name">
- <cstring>unnamed</cstring>
- </property>
- <spacer row="1" column="2">
- <property name="name">
- <cstring>spacer162</cstring>
- </property>
- <property name="orientation">
- <enum>Horizontal</enum>
- </property>
- <property name="sizeType">
- <enum>Expanding</enum>
- </property>
- <property name="sizeHint">
- <size>
- <width>30</width>
- <height>220</height>
- </size>
- </property>
- </spacer>
- <spacer row="1" column="0">
- <property name="name">
- <cstring>spacer161</cstring>
- </property>
- <property name="orientation">
- <enum>Horizontal</enum>
- </property>
- <property name="sizeType">
- <enum>Expanding</enum>
- </property>
- <property name="sizeHint">
- <size>
- <width>30</width>
- <height>210</height>
- </size>
- </property>
- </spacer>
- <widget class="TQLayoutWidget" row="1" column="1">
- <property name="name">
- <cstring>layout118</cstring>
- </property>
- <grid>
- <property name="name">
- <cstring>unnamed</cstring>
- </property>
- <spacer row="1" column="2">
- <property name="name">
- <cstring>spacer162_2</cstring>
- </property>
- <property name="orientation">
- <enum>Horizontal</enum>
- </property>
- <property name="sizeType">
- <enum>Expanding</enum>
- </property>
- <property name="sizeHint">
- <size>
- <width>43</width>
- <height>180</height>
- </size>
- </property>
- </spacer>
- <widget class="TQFrame" row="1" column="1">
- <property name="name">
- <cstring>previewFrame</cstring>
- </property>
- <property name="minimumSize">
- <size>
- <width>240</width>
- <height>180</height>
- </size>
- </property>
- <property name="maximumSize">
- <size>
- <width>240</width>
- <height>180</height>
- </size>
- </property>
- <property name="frameShape">
- <enum>StyledPanel</enum>
- </property>
- <property name="frameShadow">
- <enum>Sunken</enum>
- </property>
- <property name="toolTip" stdset="0">
- <string>preview window</string>
- </property>
- <property name="whatsThis" stdset="0">
- <string>Here is the preview (if it is not detached)</string>
- </property>
- <grid>
- <property name="name">
- <cstring>unnamed</cstring>
- </property>
- <widget class="TQLabel" row="0" column="0">
- <property name="name">
- <cstring>previewLabel</cstring>
- </property>
- <property name="enabled">
- <bool>false</bool>
- </property>
- <property name="text">
- <string>P R E V I E W</string>
- </property>
- <property name="alignment">
- <set>AlignCenter</set>
- </property>
- </widget>
- </grid>
- </widget>
- <spacer row="1" column="0">
- <property name="name">
- <cstring>spacer161_2</cstring>
- </property>
- <property name="orientation">
- <enum>Horizontal</enum>
- </property>
- <property name="sizeType">
- <enum>Expanding</enum>
- </property>
- <property name="sizeHint">
- <size>
- <width>30</width>
- <height>180</height>
- </size>
- </property>
- </spacer>
- <widget class="TQCheckBox" row="0" column="0" rowspan="1" colspan="3">
- <property name="name">
- <cstring>detachBox</cstring>
- </property>
- <property name="text">
- <string>&amp;Show in separate window</string>
- </property>
- </widget>
- <widget class="TQPushButton" row="2" column="0" rowspan="1" colspan="3">
- <property name="name">
- <cstring>applyButton</cstring>
- </property>
- <property name="text">
- <string>&amp;Apply &amp;&amp; Update</string>
- </property>
- </widget>
- </grid>
- </widget>
- </grid>
- </widget>
- <widget class="TQWidget">
- <property name="name">
- <cstring>tab</cstring>
- </property>
- <attribute name="title">
- <string>Show</string>
- </attribute>
- <vbox>
- <property name="name">
- <cstring>unnamed</cstring>
- </property>
- <widget class="TQLayoutWidget">
- <property name="name">
- <cstring>layS1</cstring>
- </property>
- <hbox>
- <property name="name">
- <cstring>unnamed</cstring>
- </property>
- <widget class="TQLabel">
- <property name="name">
- <cstring>showLabel1</cstring>
- </property>
- <property name="sizePolicy">
- <sizepolicy>
- <hsizetype>1</hsizetype>
- <vsizetype>5</vsizetype>
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="text">
- <string>Show type:</string>
- </property>
- </widget>
- <widget class="TQComboBox">
- <item>
- <property name="text">
- <string>Simple Show</string>
- </property>
- </item>
- <item>
- <property name="text">
- <string>Completely Random</string>
- </property>
- </item>
- <item>
- <property name="text">
- <string>Only Change Color</string>
- </property>
- </item>
- <item>
- <property name="text">
- <string>Only Change Fireworks</string>
- </property>
- </item>
- <property name="name">
- <cstring>showCombo</cstring>
- </property>
- </widget>
- <spacer>
- <property name="name">
- <cstring>spacer25</cstring>
- </property>
- <property name="orientation">
- <enum>Horizontal</enum>
- </property>
- <property name="sizeType">
- <enum>Expanding</enum>
- </property>
- <property name="sizeHint">
- <size>
- <width>260</width>
- <height>21</height>
- </size>
- </property>
- </spacer>
- </hbox>
- </widget>
- <widget class="TQLayoutWidget">
- <property name="name">
- <cstring>layS2</cstring>
- </property>
- <hbox>
- <property name="name">
- <cstring>unnamed</cstring>
- </property>
- <widget class="TQLabel">
- <property name="name">
- <cstring>showLabel2</cstring>
- </property>
- <property name="text">
- <string>Number of fireworks:</string>
- </property>
- </widget>
- <widget class="TQLabel">
- <property name="name">
- <cstring>showLabel3</cstring>
- </property>
- <property name="text">
- <string>few</string>
- </property>
- </widget>
- <widget class="TQSlider">
- <property name="name">
- <cstring>fireworksSlider</cstring>
- </property>
- <property name="sizePolicy">
- <sizepolicy>
- <hsizetype>3</hsizetype>
- <vsizetype>0</vsizetype>
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="minValue">
- <number>0</number>
- </property>
- <property name="maxValue">
- <number>10</number>
- </property>
- <property name="pageStep">
- <number>1</number>
- </property>
- <property name="value">
- <number>4</number>
- </property>
- <property name="orientation">
- <enum>Horizontal</enum>
- </property>
- </widget>
- <widget class="TQLabel">
- <property name="name">
- <cstring>showLabel4</cstring>
- </property>
- <property name="text">
- <string>more</string>
- </property>
- </widget>
- <spacer>
- <property name="name">
- <cstring>spacer6_2</cstring>
- </property>
- <property name="orientation">
- <enum>Horizontal</enum>
- </property>
- <property name="sizeType">
- <enum>Expanding</enum>
- </property>
- <property name="sizeHint">
- <size>
- <width>125</width>
- <height>21</height>
- </size>
- </property>
- </spacer>
- </hbox>
- </widget>
- <widget class="TQLayoutWidget">
- <property name="name">
- <cstring>layS2_2</cstring>
- </property>
- <hbox>
- <property name="name">
- <cstring>unnamed</cstring>
- </property>
- <widget class="TQLabel">
- <property name="name">
- <cstring>particlesLabel1</cstring>
- </property>
- <property name="text">
- <string>Size of particles:</string>
- </property>
- </widget>
- <widget class="TQLabel">
- <property name="name">
- <cstring>particlesLabel2</cstring>
- </property>
- <property name="text">
- <string>small</string>
- </property>
- </widget>
- <widget class="TQSlider">
- <property name="name">
- <cstring>particlesSlider</cstring>
- </property>
- <property name="sizePolicy">
- <sizepolicy>
- <hsizetype>3</hsizetype>
- <vsizetype>0</vsizetype>
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="minValue">
- <number>-5</number>
- </property>
- <property name="maxValue">
- <number>5</number>
- </property>
- <property name="pageStep">
- <number>1</number>
- </property>
- <property name="orientation">
- <enum>Horizontal</enum>
- </property>
- </widget>
- <widget class="TQLabel">
- <property name="name">
- <cstring>particlesLabel3</cstring>
- </property>
- <property name="text">
- <string>big</string>
- </property>
- </widget>
- <spacer>
- <property name="name">
- <cstring>spacer6_2_2</cstring>
- </property>
- <property name="orientation">
- <enum>Horizontal</enum>
- </property>
- <property name="sizeType">
- <enum>Expanding</enum>
- </property>
- <property name="sizeHint">
- <size>
- <width>125</width>
- <height>21</height>
- </size>
- </property>
- </spacer>
- </hbox>
- </widget>
- <widget class="TQCheckBox">
- <property name="name">
- <cstring>bottomfireBox</cstring>
- </property>
- <property name="text">
- <string>Use bottom fire</string>
- </property>
- <property name="checked">
- <bool>true</bool>
- </property>
- </widget>
- <widget class="TQLayoutWidget">
- <property name="name">
- <cstring>layS3</cstring>
- </property>
- <hbox>
- <property name="name">
- <cstring>unnamed</cstring>
- </property>
- <spacer>
- <property name="name">
- <cstring>spacer7</cstring>
- </property>
- <property name="orientation">
- <enum>Horizontal</enum>
- </property>
- <property name="sizeType">
- <enum>Fixed</enum>
- </property>
- <property name="sizeHint">
- <size>
- <width>16</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- <widget class="TQLabel">
- <property name="name">
- <cstring>bottomfireLabel1</cstring>
- </property>
- <property name="text">
- <string>Color:</string>
- </property>
- </widget>
- <widget class="KColorButton">
- <property name="name">
- <cstring>bottomfireColorButton</cstring>
- </property>
- <property name="text">
- <string></string>
- </property>
- <property name="toolTip" stdset="0">
- <string>Select the color</string>
- </property>
- </widget>
- <spacer>
- <property name="name">
- <cstring>spacer4</cstring>
- </property>
- <property name="orientation">
- <enum>Horizontal</enum>
- </property>
- <property name="sizeType">
- <enum>Expanding</enum>
- </property>
- <property name="sizeHint">
- <size>
- <width>309</width>
- <height>21</height>
- </size>
- </property>
- </spacer>
- </hbox>
- </widget>
- <widget class="TQCheckBox">
- <property name="name">
- <cstring>soundsBox</cstring>
- </property>
- <property name="text">
- <string>Enable sounds</string>
- </property>
- </widget>
- <widget class="TQCheckBox">
- <property name="name">
- <cstring>overheadBox</cstring>
- </property>
- <property name="text">
- <string>Limit overload (recommended)</string>
- </property>
- </widget>
- <widget class="TQCheckBox">
- <property name="name">
- <cstring>frameskipBox</cstring>
- </property>
- <property name="text">
- <string>Realtime fps adjust (recommended)</string>
- </property>
- </widget>
- <spacer>
- <property name="name">
- <cstring>spacerT2</cstring>
- </property>
- <property name="orientation">
- <enum>Vertical</enum>
- </property>
- <property name="sizeType">
- <enum>Expanding</enum>
- </property>
- <property name="sizeHint">
- <size>
- <width>31</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </vbox>
- </widget>
- <widget class="TQWidget">
- <property name="name">
- <cstring>TabPage</cstring>
- </property>
- <attribute name="title">
- <string>Fireworks</string>
- </attribute>
- <grid>
- <property name="name">
- <cstring>unnamed</cstring>
- </property>
- <spacer row="4" column="0">
- <property name="name">
- <cstring>spacerT3</cstring>
- </property>
- <property name="orientation">
- <enum>Vertical</enum>
- </property>
- <property name="sizeType">
- <enum>Expanding</enum>
- </property>
- <property name="sizeHint">
- <size>
- <width>21</width>
- <height>0</height>
- </size>
- </property>
- </spacer>
- <widget class="TQLayoutWidget" row="3" column="0">
- <property name="name">
- <cstring>layF2</cstring>
- </property>
- <grid>
- <property name="name">
- <cstring>unnamed</cstring>
- </property>
- <widget class="TQCheckBox" row="0" column="1">
- <property name="name">
- <cstring>whiteBox</cstring>
- </property>
- <property name="text">
- <string>Blinding white</string>
- </property>
- </widget>
- <widget class="TQCheckBox" row="3" column="1">
- <property name="name">
- <cstring>purpleBox</cstring>
- </property>
- <property name="text">
- <string>Velvet purple</string>
- </property>
- </widget>
- <widget class="TQCheckBox" row="2" column="1">
- <property name="name">
- <cstring>seagreenBox</cstring>
- </property>
- <property name="text">
- <string>Deep-sea green</string>
- </property>
- </widget>
- <widget class="TQCheckBox" row="1" column="2">
- <property name="name">
- <cstring>redBox</cstring>
- </property>
- <property name="text">
- <string>Deep red</string>
- </property>
- </widget>
- <widget class="TQCheckBox" row="3" column="2">
- <property name="name">
- <cstring>combosBox</cstring>
- </property>
- <property name="text">
- <string>Multicolor</string>
- </property>
- <property name="toolTip" stdset="0">
- <string>try bi-color fireworks</string>
- </property>
- <property name="whatsThis" stdset="0">
- <string>This allow a random creation of fireworks that explodes in 2 colors</string>
- </property>
- </widget>
- <widget class="TQCheckBox" row="1" column="1">
- <property name="name">
- <cstring>blueBox</cstring>
- </property>
- <property name="text">
- <string>Boring blue</string>
- </property>
- </widget>
- <spacer row="0" column="0" rowspan="4" colspan="1">
- <property name="name">
- <cstring>spacer7_2_5_2_2</cstring>
- </property>
- <property name="orientation">
- <enum>Horizontal</enum>
- </property>
- <property name="sizeType">
- <enum>Fixed</enum>
- </property>
- <property name="sizeHint">
- <size>
- <width>16</width>
- <height>80</height>
- </size>
- </property>
- </spacer>
- <widget class="TQCheckBox" row="0" column="2">
- <property name="name">
- <cstring>orangeBox</cstring>
- </property>
- <property name="text">
- <string>Hot orange</string>
- </property>
- </widget>
- <widget class="TQCheckBox" row="2" column="2">
- <property name="name">
- <cstring>greenBox</cstring>
- </property>
- <property name="text">
- <string>Purest green</string>
- </property>
- </widget>
- </grid>
- </widget>
- <widget class="TQLabel" row="2" column="0">
- <property name="name">
- <cstring>colorsLabel1</cstring>
- </property>
- <property name="text">
- <string>Colors</string>
- </property>
- </widget>
- <widget class="TQLabel" row="0" column="0">
- <property name="name">
- <cstring>fireworksLabel1</cstring>
- </property>
- <property name="text">
- <string>Fireworks</string>
- </property>
- </widget>
- <widget class="TQLayoutWidget" row="1" column="0">
- <property name="name">
- <cstring>layF1</cstring>
- </property>
- <grid>
- <property name="name">
- <cstring>unnamed</cstring>
- </property>
- <widget class="TQCheckBox" row="2" column="1">
- <property name="name">
- <cstring>fire3Box</cstring>
- </property>
- <property name="text">
- <string>Flames ring</string>
- </property>
- <property name="toolTip" stdset="0">
- <string>try me</string>
- </property>
- </widget>
- <widget class="TQCheckBox" row="1" column="2">
- <property name="name">
- <cstring>fire6Box</cstring>
- </property>
- <property name="text">
- <string>Atomic splitter</string>
- </property>
- <property name="toolTip" stdset="0">
- <string>try me</string>
- </property>
- </widget>
- <widget class="TQCheckBox" row="0" column="2">
- <property name="name">
- <cstring>fire5Box</cstring>
- </property>
- <property name="text">
- <string>Sparkling fall</string>
- </property>
- <property name="toolTip" stdset="0">
- <string>try me</string>
- </property>
- </widget>
- <widget class="TQCheckBox" row="0" column="1">
- <property name="name">
- <cstring>fire1Box</cstring>
- </property>
- <property name="text">
- <string>Classic</string>
- </property>
- <property name="toolTip" stdset="0">
- <string>try me</string>
- </property>
- </widget>
- <widget class="TQCheckBox" row="1" column="1">
- <property name="name">
- <cstring>fire2Box</cstring>
- </property>
- <property name="text">
- <string>Only explosion</string>
- </property>
- <property name="toolTip" stdset="0">
- <string>try me</string>
- </property>
- </widget>
- <spacer row="0" column="0" rowspan="4" colspan="1">
- <property name="name">
- <cstring>spacer7_2_5_2</cstring>
- </property>
- <property name="orientation">
- <enum>Horizontal</enum>
- </property>
- <property name="sizeType">
- <enum>Fixed</enum>
- </property>
- <property name="sizeHint">
- <size>
- <width>16</width>
- <height>80</height>
- </size>
- </property>
- </spacer>
- <widget class="TQCheckBox" row="3" column="2">
- <property name="name">
- <cstring>fire8Box</cstring>
- </property>
- <property name="enabled">
- <bool>false</bool>
- </property>
- <property name="paletteForegroundColor">
- <color>
- <red>255</red>
- <green>0</green>
- <blue>0</blue>
- </color>
- </property>
- <property name="text">
- <string>SuperNova</string>
- </property>
- <property name="toolTip" stdset="0">
- <string>try me</string>
- </property>
- </widget>
- <widget class="TQCheckBox" row="2" column="2">
- <property name="name">
- <cstring>fire7Box</cstring>
- </property>
- <property name="text">
- <string>Toxic spirals</string>
- </property>
- <property name="toolTip" stdset="0">
- <string>try me</string>
- </property>
- </widget>
- <widget class="TQCheckBox" row="3" column="1">
- <property name="name">
- <cstring>fire4Box</cstring>
- </property>
- <property name="text">
- <string>Flames world</string>
- </property>
- <property name="toolTip" stdset="0">
- <string>try me</string>
- </property>
- </widget>
- </grid>
- </widget>
- </grid>
- </widget>
- <widget class="TQWidget">
- <property name="name">
- <cstring>TabPage</cstring>
- </property>
- <attribute name="title">
- <string>Specials</string>
- </attribute>
- <grid>
- <property name="name">
- <cstring>unnamed</cstring>
- </property>
- <spacer row="5" column="0">
- <property name="name">
- <cstring>spacerT4</cstring>
- </property>
- <property name="orientation">
- <enum>Vertical</enum>
- </property>
- <property name="sizeType">
- <enum>MinimumExpanding</enum>
- </property>
- <property name="sizeHint">
- <size>
- <width>41</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- <widget class="TQCheckBox" row="0" column="0">
- <property name="name">
- <cstring>logosBox</cstring>
- </property>
- <property name="text">
- <string>Logos</string>
- </property>
- <property name="checked">
- <bool>true</bool>
- </property>
- <property name="toolTip" stdset="0">
- <string>Watch exploding images</string>
- </property>
- <property name="whatsThis" stdset="0">
- <string>Enable images explosion.</string>
- </property>
- </widget>
- <widget class="TQFrame" row="1" column="0">
- <property name="name">
- <cstring>logosFrame</cstring>
- </property>
- <property name="frameShape">
- <enum>NoFrame</enum>
- </property>
- <property name="frameShadow">
- <enum>Plain</enum>
- </property>
- <grid>
- <property name="name">
- <cstring>unnamed</cstring>
- </property>
- <property name="margin">
- <number>0</number>
- </property>
- <spacer row="0" column="0" rowspan="2" colspan="1">
- <property name="name">
- <cstring>spacer46</cstring>
- </property>
- <property name="orientation">
- <enum>Horizontal</enum>
- </property>
- <property name="sizeType">
- <enum>Fixed</enum>
- </property>
- <property name="sizeHint">
- <size>
- <width>16</width>
- <height>70</height>
- </size>
- </property>
- </spacer>
- <widget class="TQLayoutWidget" row="0" column="1">
- <property name="name">
- <cstring>layP1</cstring>
- </property>
- <grid>
- <property name="name">
- <cstring>unnamed</cstring>
- </property>
- <widget class="TQCheckBox" row="1" column="0">
- <property name="name">
- <cstring>logosIconsBox</cstring>
- </property>
- <property name="text">
- <string>KDE icons</string>
- </property>
- <property name="toolTip" stdset="0">
- <string>Enables KDE Icons</string>
- </property>
- <property name="whatsThis" stdset="0">
- <string>Enables random KDE Icons explosions.</string>
- </property>
- </widget>
- <widget class="TQCheckBox" row="0" column="1">
- <property name="name">
- <cstring>logosTuxBox</cstring>
- </property>
- <property name="text">
- <string>Tux</string>
- </property>
- <property name="checked">
- <bool>false</bool>
- </property>
- <property name="toolTip" stdset="0">
- <string>Enables Tux</string>
- </property>
- <property name="whatsThis" stdset="0">
- <string>Enables random Tux explosions.</string>
- </property>
- </widget>
- <widget class="TQCheckBox" row="1" column="1">
- <property name="name">
- <cstring>logosDetailBox</cstring>
- </property>
- <property name="text">
- <string>Reduce detail</string>
- </property>
- <property name="toolTip" stdset="0">
- <string>useful for increasing speed</string>
- </property>
- <property name="whatsThis" stdset="0">
- <string>When enabled speeds up logo explosion but reduces quality.</string>
- </property>
- </widget>
- <widget class="TQCheckBox" row="0" column="0">
- <property name="name">
- <cstring>logosKonquiBox</cstring>
- </property>
- <property name="text">
- <string>Konqui</string>
- </property>
- <property name="toolTip" stdset="0">
- <string>Enables Konqui</string>
- </property>
- <property name="whatsThis" stdset="0">
- <string>Enables random Konqui explosions.</string>
- </property>
- </widget>
- </grid>
- </widget>
- <widget class="TQLayoutWidget" row="1" column="1">
- <property name="name">
- <cstring>layP2</cstring>
- </property>
- <hbox>
- <property name="name">
- <cstring>unnamed</cstring>
- </property>
- <widget class="TQLabel">
- <property name="name">
- <cstring>frequencyLabel</cstring>
- </property>
- <property name="text">
- <string>Frequency:</string>
- </property>
- </widget>
- <widget class="TQLabel">
- <property name="name">
- <cstring>neverLabel</cstring>
- </property>
- <property name="text">
- <string>sometimes</string>
- </property>
- </widget>
- <widget class="TQSlider">
- <property name="name">
- <cstring>logosSlider</cstring>
- </property>
- <property name="sizePolicy">
- <sizepolicy>
- <hsizetype>3</hsizetype>
- <vsizetype>0</vsizetype>
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="maxValue">
- <number>10</number>
- </property>
- <property name="pageStep">
- <number>1</number>
- </property>
- <property name="value">
- <number>5</number>
- </property>
- <property name="orientation">
- <enum>Horizontal</enum>
- </property>
- </widget>
- <widget class="TQLabel">
- <property name="name">
- <cstring>oftenLabel</cstring>
- </property>
- <property name="text">
- <string>often</string>
- </property>
- </widget>
- <spacer>
- <property name="name">
- <cstring>spacer18</cstring>
- </property>
- <property name="orientation">
- <enum>Horizontal</enum>
- </property>
- <property name="sizeType">
- <enum>Expanding</enum>
- </property>
- <property name="sizeHint">
- <size>
- <width>91</width>
- <height>21</height>
- </size>
- </property>
- </spacer>
- </hbox>
- </widget>
- </grid>
- </widget>
- <widget class="TQFrame" row="3" column="0">
- <property name="name">
- <cstring>starsFrame</cstring>
- </property>
- <property name="frameShape">
- <enum>NoFrame</enum>
- </property>
- <property name="frameShadow">
- <enum>Raised</enum>
- </property>
- <grid>
- <property name="name">
- <cstring>unnamed</cstring>
- </property>
- <property name="margin">
- <number>0</number>
- </property>
- <spacer row="0" column="0" rowspan="2" colspan="1">
- <property name="name">
- <cstring>spacer7_2_5</cstring>
- </property>
- <property name="orientation">
- <enum>Horizontal</enum>
- </property>
- <property name="sizeType">
- <enum>Fixed</enum>
- </property>
- <property name="sizeHint">
- <size>
- <width>16</width>
- <height>50</height>
- </size>
- </property>
- </spacer>
- <widget class="TQLayoutWidget" row="0" column="1">
- <property name="name">
- <cstring>layP3</cstring>
- </property>
- <hbox>
- <property name="name">
- <cstring>unnamed</cstring>
- </property>
- <widget class="TQCheckBox">
- <property name="name">
- <cstring>starsFlickerBox</cstring>
- </property>
- <property name="text">
- <string>Flickering</string>
- </property>
- <property name="toolTip" stdset="0">
- <string>enables a natural 'flicker' effect</string>
- </property>
- <property name="whatsThis" stdset="0">
- <string>This option produces a sort of vibration in the lightness of the star.</string>
- </property>
- </widget>
- <widget class="TQCheckBox">
- <property name="name">
- <cstring>starsGradientBox</cstring>
- </property>
- <property name="text">
- <string>Red-blue gradient</string>
- </property>
- <property name="toolTip" stdset="0">
- <string>emulate horizon coloring</string>
- </property>
- <property name="whatsThis" stdset="0">
- <string>Gives lower stars a reddish tint.</string>
- </property>
- </widget>
- </hbox>
- </widget>
- <widget class="TQLayoutWidget" row="1" column="1">
- <property name="name">
- <cstring>layP4</cstring>
- </property>
- <hbox>
- <property name="name">
- <cstring>unnamed</cstring>
- </property>
- <widget class="TQLabel">
- <property name="name">
- <cstring>textLabel4_5</cstring>
- </property>
- <property name="text">
- <string>Number:</string>
- </property>
- </widget>
- <widget class="TQLabel">
- <property name="name">
- <cstring>textLabel3_2_6</cstring>
- </property>
- <property name="text">
- <string>less</string>
- </property>
- </widget>
- <widget class="TQSlider">
- <property name="name">
- <cstring>starsSlider</cstring>
- </property>
- <property name="sizePolicy">
- <sizepolicy>
- <hsizetype>3</hsizetype>
- <vsizetype>0</vsizetype>
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="maxValue">
- <number>10</number>
- </property>
- <property name="pageStep">
- <number>1</number>
- </property>
- <property name="value">
- <number>5</number>
- </property>
- <property name="orientation">
- <enum>Horizontal</enum>
- </property>
- </widget>
- <widget class="TQLabel">
- <property name="name">
- <cstring>textLabel3_2_2_5</cstring>
- </property>
- <property name="text">
- <string>more</string>
- </property>
- </widget>
- <spacer>
- <property name="name">
- <cstring>spacer6_5</cstring>
- </property>
- <property name="orientation">
- <enum>Horizontal</enum>
- </property>
- <property name="sizeType">
- <enum>Expanding</enum>
- </property>
- <property name="sizeHint">
- <size>
- <width>149</width>
- <height>21</height>
- </size>
- </property>
- </spacer>
- </hbox>
- </widget>
- </grid>
- </widget>
- <widget class="TQCheckBox" row="2" column="0">
- <property name="name">
- <cstring>starsBox</cstring>
- </property>
- <property name="text">
- <string>Stars</string>
- </property>
- <property name="checked">
- <bool>true</bool>
- </property>
- <property name="toolTip" stdset="0">
- <string>Watch the stars</string>
- </property>
- <property name="whatsThis" stdset="0">
- <string>Enable stars in the sky.</string>
- </property>
- </widget>
- <widget class="TQCheckBox" row="4" column="0">
- <property name="name">
- <cstring>writingsBox</cstring>
- </property>
- <property name="text">
- <string>Writings</string>
- </property>
- <property name="checked">
- <bool>true</bool>
- </property>
- <property name="toolTip" stdset="0">
- <string>Watch the stars</string>
- </property>
- <property name="whatsThis" stdset="0">
- <string>Enable stars in the sky.</string>
- </property>
- </widget>
- </grid>
- </widget>
- <widget class="TQWidget">
- <property name="name">
- <cstring>TabPage</cstring>
- </property>
- <attribute name="title">
- <string>Effects</string>
- </attribute>
- <grid>
- <property name="name">
- <cstring>unnamed</cstring>
- </property>
- <widget class="TQCheckBox" row="1" column="0">
- <property name="name">
- <cstring>flashBox</cstring>
- </property>
- <property name="text">
- <string>Flash screen on explosions</string>
- </property>
- <property name="checked">
- <bool>true</bool>
- </property>
- </widget>
- <widget class="TQLayoutWidget" row="4" column="0">
- <property name="name">
- <cstring>layE2</cstring>
- </property>
- <hbox>
- <property name="name">
- <cstring>unnamed</cstring>
- </property>
- <spacer>
- <property name="name">
- <cstring>spacer7_2_3</cstring>
- </property>
- <property name="orientation">
- <enum>Horizontal</enum>
- </property>
- <property name="sizeType">
- <enum>Fixed</enum>
- </property>
- <property name="sizeHint">
- <size>
- <width>16</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- <widget class="TQLabel">
- <property name="name">
- <cstring>fadeLabel1</cstring>
- </property>
- <property name="text">
- <string>Intensity:</string>
- </property>
- </widget>
- <widget class="TQLabel">
- <property name="name">
- <cstring>fadeLabel2</cstring>
- </property>
- <property name="text">
- <string>small</string>
- </property>
- </widget>
- <widget class="TQSlider">
- <property name="name">
- <cstring>fadeSlider</cstring>
- </property>
- <property name="sizePolicy">
- <sizepolicy>
- <hsizetype>3</hsizetype>
- <vsizetype>0</vsizetype>
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="maxValue">
- <number>9</number>
- </property>
- <property name="pageStep">
- <number>1</number>
- </property>
- <property name="value">
- <number>3</number>
- </property>
- <property name="orientation">
- <enum>Horizontal</enum>
- </property>
- </widget>
- <widget class="TQLabel">
- <property name="name">
- <cstring>fadeLabel3</cstring>
- </property>
- <property name="text">
- <string>hypnotic</string>
- </property>
- </widget>
- <spacer>
- <property name="name">
- <cstring>spacer6_3</cstring>
- </property>
- <property name="orientation">
- <enum>Horizontal</enum>
- </property>
- <property name="sizeType">
- <enum>Expanding</enum>
- </property>
- <property name="sizeHint">
- <size>
- <width>131</width>
- <height>21</height>
- </size>
- </property>
- </spacer>
- </hbox>
- </widget>
- <widget class="TQCheckBox" row="5" column="0">
- <property name="name">
- <cstring>flaresBox</cstring>
- </property>
- <property name="text">
- <string>Mega flares</string>
- </property>
- <property name="checked">
- <bool>true</bool>
- </property>
- </widget>
- <widget class="TQLayoutWidget" row="6" column="0">
- <property name="name">
- <cstring>layE3</cstring>
- </property>
- <hbox>
- <property name="name">
- <cstring>unnamed</cstring>
- </property>
- <spacer>
- <property name="name">
- <cstring>spacer7_2_4</cstring>
- </property>
- <property name="orientation">
- <enum>Horizontal</enum>
- </property>
- <property name="sizeType">
- <enum>Fixed</enum>
- </property>
- <property name="sizeHint">
- <size>
- <width>16</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- <widget class="TQLabel">
- <property name="name">
- <cstring>flaresLabel1</cstring>
- </property>
- <property name="text">
- <string>Dimension:</string>
- </property>
- </widget>
- <widget class="TQLabel">
- <property name="name">
- <cstring>flaresLabel2</cstring>
- </property>
- <property name="text">
- <string>small</string>
- </property>
- </widget>
- <widget class="TQSlider">
- <property name="name">
- <cstring>flaresSlider</cstring>
- </property>
- <property name="sizePolicy">
- <sizepolicy>
- <hsizetype>3</hsizetype>
- <vsizetype>0</vsizetype>
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="maxValue">
- <number>10</number>
- </property>
- <property name="pageStep">
- <number>1</number>
- </property>
- <property name="value">
- <number>5</number>
- </property>
- <property name="orientation">
- <enum>Horizontal</enum>
- </property>
- </widget>
- <widget class="TQLabel">
- <property name="name">
- <cstring>flaresLabel3</cstring>
- </property>
- <property name="text">
- <string>big</string>
- </property>
- </widget>
- <spacer>
- <property name="name">
- <cstring>spacer6_4</cstring>
- </property>
- <property name="orientation">
- <enum>Horizontal</enum>
- </property>
- <property name="sizeType">
- <enum>Expanding</enum>
- </property>
- <property name="sizeHint">
- <size>
- <width>117</width>
- <height>21</height>
- </size>
- </property>
- </spacer>
- </hbox>
- </widget>
- <widget class="TQCheckBox" row="7" column="0">
- <property name="name">
- <cstring>trailBox</cstring>
- </property>
- <property name="text">
- <string>Fireworks leave a particle trail</string>
- </property>
- <property name="toolTip" stdset="0">
- <string>not yet ported</string>
- </property>
- <property name="whatsThis" stdset="0">
- <string>not yet ported</string>
- </property>
- </widget>
- <widget class="TQLayoutWidget" row="2" column="0">
- <property name="name">
- <cstring>layE1</cstring>
- </property>
- <hbox>
- <property name="name">
- <cstring>unnamed</cstring>
- </property>
- <spacer>
- <property name="name">
- <cstring>spacer7_2</cstring>
- </property>
- <property name="orientation">
- <enum>Horizontal</enum>
- </property>
- <property name="sizeType">
- <enum>Fixed</enum>
- </property>
- <property name="sizeHint">
- <size>
- <width>16</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- <widget class="TQLabel">
- <property name="name">
- <cstring>flashLabel1</cstring>
- </property>
- <property name="text">
- <string>Flash opacity:</string>
- </property>
- </widget>
- <widget class="TQLabel">
- <property name="name">
- <cstring>flashLabel2</cstring>
- </property>
- <property name="text">
- <string>min</string>
- </property>
- </widget>
- <widget class="TQSlider">
- <property name="name">
- <cstring>flashSlider</cstring>
- </property>
- <property name="sizePolicy">
- <sizepolicy>
- <hsizetype>3</hsizetype>
- <vsizetype>0</vsizetype>
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="maxValue">
- <number>10</number>
- </property>
- <property name="pageStep">
- <number>1</number>
- </property>
- <property name="value">
- <number>5</number>
- </property>
- <property name="orientation">
- <enum>Horizontal</enum>
- </property>
- </widget>
- <widget class="TQLabel">
- <property name="name">
- <cstring>flashLabel3</cstring>
- </property>
- <property name="text">
- <string>max</string>
- </property>
- </widget>
- <spacer>
- <property name="name">
- <cstring>spacer6</cstring>
- </property>
- <property name="orientation">
- <enum>Horizontal</enum>
- </property>
- <property name="sizeType">
- <enum>Expanding</enum>
- </property>
- <property name="sizeHint">
- <size>
- <width>110</width>
- <height>21</height>
- </size>
- </property>
- </spacer>
- </hbox>
- </widget>
- <widget class="TQCheckBox" row="3" column="0">
- <property name="name">
- <cstring>fadeBox</cstring>
- </property>
- <property name="text">
- <string>Fade effect</string>
- </property>
- <property name="checked">
- <bool>true</bool>
- </property>
- </widget>
- <widget class="TQCheckBox" row="0" column="0">
- <property name="name">
- <cstring>lightBox</cstring>
- </property>
- <property name="text">
- <string>Spherical light after explosion</string>
- </property>
- <property name="toolTip" stdset="0">
- <string>warning, this can shock your mind :-)</string>
- </property>
- <property name="whatsThis" stdset="0">
- <string>Multiplies the scale factor for particles near you, resulting in a colorful experience.</string>
- </property>
- </widget>
- <spacer row="8" column="0">
- <property name="name">
- <cstring>spacerT5</cstring>
- </property>
- <property name="orientation">
- <enum>Vertical</enum>
- </property>
- <property name="sizeType">
- <enum>Expanding</enum>
- </property>
- <property name="sizeHint">
- <size>
- <width>31</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </grid>
- </widget>
- </widget>
- </grid>
-</widget>
-<connections>
- <connection>
- <sender>logosBox</sender>
- <signal>toggled(bool)</signal>
- <receiver>logosFrame</receiver>
- <slot>setEnabled(bool)</slot>
- </connection>
- <connection>
- <sender>starsBox</sender>
- <signal>toggled(bool)</signal>
- <receiver>starsFrame</receiver>
- <slot>setEnabled(bool)</slot>
- </connection>
- <connection>
- <sender>bottomfireBox</sender>
- <signal>toggled(bool)</signal>
- <receiver>bottomfireLabel1</receiver>
- <slot>setEnabled(bool)</slot>
- </connection>
- <connection>
- <sender>bottomfireBox</sender>
- <signal>toggled(bool)</signal>
- <receiver>bottomfireColorButton</receiver>
- <slot>setEnabled(bool)</slot>
- </connection>
- <connection>
- <sender>flashBox</sender>
- <signal>toggled(bool)</signal>
- <receiver>flashLabel1</receiver>
- <slot>setEnabled(bool)</slot>
- </connection>
- <connection>
- <sender>flashBox</sender>
- <signal>toggled(bool)</signal>
- <receiver>flashLabel2</receiver>
- <slot>setEnabled(bool)</slot>
- </connection>
- <connection>
- <sender>flashBox</sender>
- <signal>toggled(bool)</signal>
- <receiver>flashLabel3</receiver>
- <slot>setEnabled(bool)</slot>
- </connection>
- <connection>
- <sender>flashBox</sender>
- <signal>toggled(bool)</signal>
- <receiver>flashSlider</receiver>
- <slot>setEnabled(bool)</slot>
- </connection>
- <connection>
- <sender>fadeBox</sender>
- <signal>toggled(bool)</signal>
- <receiver>fadeLabel1</receiver>
- <slot>setEnabled(bool)</slot>
- </connection>
- <connection>
- <sender>fadeBox</sender>
- <signal>toggled(bool)</signal>
- <receiver>fadeLabel2</receiver>
- <slot>setEnabled(bool)</slot>
- </connection>
- <connection>
- <sender>fadeBox</sender>
- <signal>toggled(bool)</signal>
- <receiver>fadeLabel3</receiver>
- <slot>setEnabled(bool)</slot>
- </connection>
- <connection>
- <sender>fadeBox</sender>
- <signal>toggled(bool)</signal>
- <receiver>fadeSlider</receiver>
- <slot>setEnabled(bool)</slot>
- </connection>
- <connection>
- <sender>flaresBox</sender>
- <signal>toggled(bool)</signal>
- <receiver>flaresLabel1</receiver>
- <slot>setEnabled(bool)</slot>
- </connection>
- <connection>
- <sender>flaresBox</sender>
- <signal>toggled(bool)</signal>
- <receiver>flaresLabel2</receiver>
- <slot>setEnabled(bool)</slot>
- </connection>
- <connection>
- <sender>flaresBox</sender>
- <signal>toggled(bool)</signal>
- <receiver>flaresLabel3</receiver>
- <slot>setEnabled(bool)</slot>
- </connection>
- <connection>
- <sender>flaresBox</sender>
- <signal>toggled(bool)</signal>
- <receiver>flaresSlider</receiver>
- <slot>setEnabled(bool)</slot>
- </connection>
- <connection>
- <sender>useButton</sender>
- <signal>clicked()</signal>
- <receiver>KFireSaverSetup</receiver>
- <slot>useButton_clicked()</slot>
- </connection>
- <connection>
- <sender>applyButton</sender>
- <signal>clicked()</signal>
- <receiver>KFireSaverSetup</receiver>
- <slot>applyButton_clicked()</slot>
- </connection>
- <connection>
- <sender>detachBox</sender>
- <signal>clicked()</signal>
- <receiver>KFireSaverSetup</receiver>
- <slot>updatePreview()</slot>
- </connection>
-</connections>
-<tabstops>
- <tabstop>presetCombo</tabstop>
- <tabstop>useButton</tabstop>
- <tabstop>tabWidget</tabstop>
- <tabstop>showCombo</tabstop>
- <tabstop>fireworksSlider</tabstop>
- <tabstop>particlesSlider</tabstop>
- <tabstop>bottomfireBox</tabstop>
- <tabstop>bottomfireColorButton</tabstop>
- <tabstop>soundsBox</tabstop>
- <tabstop>overheadBox</tabstop>
- <tabstop>frameskipBox</tabstop>
- <tabstop>fire1Box</tabstop>
- <tabstop>fire2Box</tabstop>
- <tabstop>fire3Box</tabstop>
- <tabstop>fire4Box</tabstop>
- <tabstop>fire5Box</tabstop>
- <tabstop>fire6Box</tabstop>
- <tabstop>fire7Box</tabstop>
- <tabstop>fire8Box</tabstop>
- <tabstop>whiteBox</tabstop>
- <tabstop>blueBox</tabstop>
- <tabstop>seagreenBox</tabstop>
- <tabstop>purpleBox</tabstop>
- <tabstop>orangeBox</tabstop>
- <tabstop>redBox</tabstop>
- <tabstop>greenBox</tabstop>
- <tabstop>combosBox</tabstop>
- <tabstop>logosBox</tabstop>
- <tabstop>logosKonquiBox</tabstop>
- <tabstop>logosTuxBox</tabstop>
- <tabstop>logosIconsBox</tabstop>
- <tabstop>logosDetailBox</tabstop>
- <tabstop>logosSlider</tabstop>
- <tabstop>starsBox</tabstop>
- <tabstop>starsFlickerBox</tabstop>
- <tabstop>starsGradientBox</tabstop>
- <tabstop>starsSlider</tabstop>
- <tabstop>lightBox</tabstop>
- <tabstop>flashBox</tabstop>
- <tabstop>flashSlider</tabstop>
- <tabstop>fadeBox</tabstop>
- <tabstop>fadeSlider</tabstop>
- <tabstop>flaresBox</tabstop>
- <tabstop>flaresSlider</tabstop>
- <tabstop>trailBox</tabstop>
-</tabstops>
-<includes>
- <include location="local" impldecl="in declaration">firesaver.h</include>
- <include location="local" impldecl="in implementation">firesaversetup.ui.h</include>
-</includes>
-<variables>
- <variable access="private">KFireSaver * fireSaverWidget;</variable>
-</variables>
-<Q_SLOTS>
- <slot>applyButton_clicked()</slot>
- <slot>updatePreview()</slot>
- <slot>writeConfig()</slot>
- <slot>readConfig()</slot>
- <slot>useButton_clicked()</slot>
-</Q_SLOTS>
-<functions>
- <function access="private" specifier="non virtual">init()</function>
- <function access="private">destroy()</function>
-</functions>
-<layoutdefaults spacing="6" margin="11"/>
-<includehints>
- <includehint>kcolorbutton.h</includehint>
-</includehints>
-</UI>
diff --git a/kscreensaver/kdesavers/firesaversetup.ui.h b/kscreensaver/kdesavers/firesaversetup.ui.h
deleted file mode 100644
index da8ed42a..00000000
--- a/kscreensaver/kdesavers/firesaversetup.ui.h
+++ /dev/null
@@ -1,400 +0,0 @@
-/****************************************************************************
-** ui.h extension file, included from the uic-generated form implementation.
-**
-** If you wish to add, delete or rename functions or slots use
-** TQt Designer which will update this file, preserving your code. Create an
-** init() function in place of a constructor, and a destroy() function in
-** place of a destructor.
-*****************************************************************************/
-
-
-#ifndef KFIRESAVER_SETUP_H
-#define KFIRESAVER_SETUP_H
-
-#include <tqcolor.h>
-#include <tqtimer.h>
-#include <kconfig.h>
-
-
-void KFireSaverSetup::init()
-{
- readConfig();
- fireSaverWidget = NULL;
- updatePreview();
-}
-
-void KFireSaverSetup::destroy()
-{
- if ( fireSaverWidget )
- delete fireSaverWidget;
-}
-
-
-void KFireSaverSetup::applyButton_clicked()
-{
- writeConfig();
- updatePreview();
-}
-
-void KFireSaverSetup::updatePreview()
-{
- if ( fireSaverWidget )
- delete fireSaverWidget;
- if ( detachBox->isChecked() ) {
- previewLabel->show();
- fireSaverWidget = new KFireSaver;
- fireSaverWidget->resize(640,480);
- } else {
- previewLabel->hide();
- fireSaverWidget = new KFireSaver( previewFrame );
- fireSaverWidget->move(1,1);
- fireSaverWidget->resize(
- previewFrame->width() - 2,
- previewFrame->height() - 2 );
- }
- fireSaverWidget->show();
-}
-
-
-void KFireSaverSetup::writeConfig()
-{
- TDEConfig config("kfiresaverrc",false,false);
-
- // show
- config.setGroup( "Show" );
- config.writeEntry( "ShowType", showCombo->currentItem() );
- config.writeEntry( "FireworksFrequency", fireworksSlider->value() );
- config.writeEntry( "ParticlesSize", particlesSlider->value() );
- config.writeEntry( "enable-BottomFire", bottomfireBox->isChecked() );
- config.writeEntry( "BottomFireColor", bottomfireColorButton->color() );
- config.writeEntry( "enable-Sounds", soundsBox->isChecked() );
- config.writeEntry( "enable-NoOverhead", overheadBox->isChecked() );
- config.writeEntry( "enable-FrameSkip", frameskipBox->isChecked() );
-
- // fireworks
- config.setGroup( "Fireworks" );
- if (!fire1Box->isChecked() && !fire2Box->isChecked() &&
- !fire3Box->isChecked() && !fire4Box->isChecked() &&
- !fire5Box->isChecked() && !fire6Box->isChecked() &&
- !fire7Box->isChecked() && !fire8Box->isChecked())
- fire1Box->setChecked(true);
- config.writeEntry( "use-Classic", fire1Box->isChecked() );
- config.writeEntry( "use-Explosion", fire2Box->isChecked() );
- config.writeEntry( "use-FlameRing", fire3Box->isChecked() );
- config.writeEntry( "use-FlameWorld", fire4Box->isChecked() );
- config.writeEntry( "use-Fall", fire5Box->isChecked() );
- config.writeEntry( "use-Splitter", fire6Box->isChecked() );
- config.writeEntry( "use-Spirals", fire7Box->isChecked() );
- config.writeEntry( "use-SuperNova", fire8Box->isChecked() );
- if (!redBox->isChecked() && !orangeBox->isChecked() &&
- !greenBox->isChecked() && !blueBox->isChecked() &&
- !whiteBox->isChecked() && !purpleBox->isChecked() &&
- !seagreenBox->isChecked())
- whiteBox->setChecked(true);
- config.writeEntry( "use-White", whiteBox->isChecked() );
- config.writeEntry( "use-Blue", blueBox->isChecked() );
- config.writeEntry( "use-DeepGreen", seagreenBox->isChecked() );
- config.writeEntry( "use-Purple", purpleBox->isChecked() );
- config.writeEntry( "use-Orange", orangeBox->isChecked() );
- config.writeEntry( "use-Red", redBox->isChecked() );
- config.writeEntry( "use-Green", greenBox->isChecked() );
- config.writeEntry( "use-Multicolor", combosBox->isChecked() );
-
- // specials
- config.setGroup( "Specials" );
- config.writeEntry( "enable-Logos", logosBox->isChecked() );
- config.writeEntry( "LogosKonqui", logosKonquiBox->isChecked() );
- config.writeEntry( "LogosTux", logosTuxBox->isChecked() );
- config.writeEntry( "LogosKDEIcons", logosIconsBox->isChecked() );
- config.writeEntry( "LogosReduceDetail", logosDetailBox->isChecked() );
- config.writeEntry( "LogosFrequency", logosSlider->value() );
- config.writeEntry( "enable-Stars", starsBox->isChecked() );
- config.writeEntry( "StarsFlicker", starsFlickerBox->isChecked() );
- config.writeEntry( "StarsGradient", starsGradientBox->isChecked() );
- config.writeEntry( "StarsNumber", starsSlider->value() );
- config.writeEntry( "enable-Writings", writingsBox->isChecked() );
-
- // effects
- config.setGroup( "Effects" );
- config.writeEntry( "enable-SphericalLight", lightBox->isChecked() );
- config.writeEntry( "enable-Flash", flashBox->isChecked() );
- config.writeEntry( "FlashOpacity", flashSlider->value() );
- config.writeEntry( "enable-Fade", fadeBox->isChecked() );
- config.writeEntry( "FadeIntensity", fadeSlider->value() );
- config.writeEntry( "enable-Flares", flaresBox->isChecked() );
- config.writeEntry( "FlaresDimension", flaresSlider->value() );
- config.writeEntry( "enable-Trail", trailBox->isChecked() );
-}
-
-
-void KFireSaverSetup::readConfig()
-{
- TDEConfig config("kfiresaverrc",true,false);
-
- // show
- config.setGroup( "Show" );
- showCombo->setCurrentItem(config.readNumEntry( "ShowType", 1 ));
- fireworksSlider->setValue(config.readNumEntry( "FireworksFrequency", 7 ));
- particlesSlider->setValue(config.readNumEntry( "ParticlesSize", 0 ));
- bottomfireBox->setChecked(config.readBoolEntry( "enable-BottomFire", true ));
- TQColor blue = TQt::darkBlue;
- bottomfireColorButton->setColor(config.readColorEntry( "BottomFireColor", &blue ));
- soundsBox->setChecked(config.readBoolEntry( "enable-Sounds", false ));
- overheadBox->setChecked(config.readBoolEntry( "enable-NoOverhead", true ));
- frameskipBox->setChecked(config.readBoolEntry( "enable-FrameSkip", true ));
-
- // fireworks
- config.setGroup( "Fireworks" );
- fire1Box->setChecked(config.readBoolEntry( "use-Classic", true ));
- fire2Box->setChecked(config.readBoolEntry( "use-Explosion", false ));
- fire3Box->setChecked(config.readBoolEntry( "use-FlameRing", false ));
- fire4Box->setChecked(config.readBoolEntry( "use-FlameWorld", false ));
- fire5Box->setChecked(config.readBoolEntry( "use-Fall", false ));
- fire6Box->setChecked(config.readBoolEntry( "use-Splitter", false ));
- fire7Box->setChecked(config.readBoolEntry( "use-Spirals", false ));
- fire8Box->setChecked(config.readBoolEntry( "use-SuperNova", false ));
- whiteBox->setChecked(config.readBoolEntry( "use-White", true ));
- blueBox->setChecked(config.readBoolEntry( "use-Blue", false ));
- seagreenBox->setChecked(config.readBoolEntry( "use-DeepGreen", true ));
- purpleBox->setChecked(config.readBoolEntry( "use-Purple", false ));
- orangeBox->setChecked(config.readBoolEntry( "use-Orange", true ));
- redBox->setChecked(config.readBoolEntry( "use-Red", false ));
- greenBox->setChecked(config.readBoolEntry( "use-Green", false ));
- combosBox->setChecked(config.readBoolEntry( "use-Multicolor", true ));
-
- // specials
- config.setGroup( "Specials" );
- logosBox->setChecked(config.readBoolEntry( "enable-Logos", true ));
- logosKonquiBox->setChecked(config.readBoolEntry( "LogosKonqui", true ));
- logosTuxBox->setChecked(config.readBoolEntry( "LogosTux", true ));
- logosIconsBox->setChecked(config.readBoolEntry( "LogosKDEIcons", true ));
- logosDetailBox->setChecked(config.readBoolEntry( "LogosReduceDetail", true ));
- logosSlider->setValue(config.readNumEntry( "LogosFrequency", 4 ));
- starsBox->setChecked(config.readBoolEntry( "enable-Stars", true ));
- starsFlickerBox->setChecked(config.readBoolEntry( "StarsFlicker", false ));
- starsGradientBox->setChecked(config.readBoolEntry( "StarsGradient", true ));
- starsSlider->setValue(config.readNumEntry( "StarsNumber", 4 ));
- writingsBox->setChecked(config.readBoolEntry( "enable-Writings", true ));
-
- // effects
- config.setGroup( "Effects" );
- lightBox->setChecked(config.readBoolEntry( "enable-SphericalLight", true ));
- flashBox->setChecked(config.readBoolEntry( "enable-Flash", false ));
- flashSlider->setValue(config.readNumEntry( "FlashOpacity", 5 ));
- fadeBox->setChecked(config.readBoolEntry( "enable-Fade", false ));
- fadeSlider->setValue(config.readNumEntry( "FadeIntensity", 3 ));
- flaresBox->setChecked(config.readBoolEntry( "enable-Flares", true ));
- flaresSlider->setValue(config.readNumEntry( "FlaresDimension", 5 ));
- trailBox->setChecked(config.readBoolEntry( "enable-Trail", false ));
-}
-
-void KFireSaverSetup::useButton_clicked()
-{
- int ci = presetCombo->currentItem();
-
- showCombo->setCurrentItem( 0 );
- particlesSlider->setValue( 0 );
- overheadBox->setChecked( true );
- flashBox->setChecked( false );
- //flashSlider->setValue( );
- //soundsBox->setChecked( );
- //logosDetailBox->setChecked( );
-
- switch (ci){
- case 0: // KDE default
- showCombo->setCurrentItem( 1 );
- fireworksSlider->setValue( 7 );
- bottomfireBox->setChecked( true );
- bottomfireColorButton->setColor( TQt::darkBlue );
- frameskipBox->setChecked( true );
- fire1Box->setChecked( true );
- fire2Box->setChecked( false );
- fire3Box->setChecked( false );
- fire4Box->setChecked( false );
- fire5Box->setChecked( false );
- fire6Box->setChecked( false );
- fire7Box->setChecked( false );
- fire8Box->setChecked( false );
- whiteBox->setChecked( true );
- blueBox->setChecked( false );
- seagreenBox->setChecked( true );
- purpleBox->setChecked( false );
- orangeBox->setChecked( true );
- redBox->setChecked( false );
- greenBox->setChecked( false );
- combosBox->setChecked( true );
- logosBox->setChecked( true );
- logosKonquiBox->setChecked( true );
- logosTuxBox->setChecked( true );
- logosIconsBox->setChecked( true );
- logosSlider->setValue( 4 );
- starsBox->setChecked( true );
- starsFlickerBox->setChecked( false );
- starsGradientBox->setChecked( true );
- starsSlider->setValue( 4 );
- writingsBox->setChecked( true );
- lightBox->setChecked( true );
- fadeBox->setChecked( false );
- //fadeSlider->setValue( );
- flaresBox->setChecked( true );
- flaresSlider->setValue( 5 );
- trailBox->setChecked( false );
- break;
- case 1: // Elegant white
- fireworksSlider->setValue( 7 );
- bottomfireBox->setChecked( true );
- bottomfireColorButton->setColor( TQt::blue );
- frameskipBox->setChecked( true );
- fire1Box->setChecked( true );
- fire2Box->setChecked( false );
- fire3Box->setChecked( false );
- fire4Box->setChecked( false );
- fire5Box->setChecked( true );
- fire6Box->setChecked( true );
- fire7Box->setChecked( false );
- fire8Box->setChecked( false );
- whiteBox->setChecked( true );
- blueBox->setChecked( true );
- seagreenBox->setChecked( false );
- purpleBox->setChecked( false );
- orangeBox->setChecked( false );
- redBox->setChecked( false );
- greenBox->setChecked( false );
- combosBox->setChecked( true );
- logosBox->setChecked( true );
- logosKonquiBox->setChecked( true );
- logosTuxBox->setChecked( false );
- logosIconsBox->setChecked( false );
- logosSlider->setValue( 3 );
- starsBox->setChecked( true );
- starsFlickerBox->setChecked( true );
- starsGradientBox->setChecked( false );
- starsSlider->setValue( 4 );
- writingsBox->setChecked( true );
- lightBox->setChecked( true );
- fadeBox->setChecked( true );
- fadeSlider->setValue( 3 );
- flaresBox->setChecked( true );
- flaresSlider->setValue( 6 );
- trailBox->setChecked( true );
- break;
- case 2: // Quick simple
- showCombo->setCurrentItem(1);
- fireworksSlider->setValue( 4 );
- bottomfireBox->setChecked( false );
- //bottomfireColorButton->setColor( );
- frameskipBox->setChecked( false );
- fire1Box->setChecked( true );
- fire2Box->setChecked( true );
- fire3Box->setChecked( false );
- fire4Box->setChecked( false );
- fire5Box->setChecked( false );
- fire6Box->setChecked( false );
- fire7Box->setChecked( false );
- fire8Box->setChecked( false );
- whiteBox->setChecked( true );
- blueBox->setChecked( true );
- seagreenBox->setChecked( false );
- purpleBox->setChecked( false );
- orangeBox->setChecked( false );
- redBox->setChecked( true );
- greenBox->setChecked( true );
- combosBox->setChecked( false );
- logosBox->setChecked( true );
- logosKonquiBox->setChecked( true );
- logosTuxBox->setChecked( true );
- logosIconsBox->setChecked( true );
- logosSlider->setValue( 2 );
- starsBox->setChecked( false );
- //starsFlickerBox->setChecked( );
- //starsGradientBox->setChecked( );
- //starsSlider->setValue( );
- writingsBox->setChecked( false );
- lightBox->setChecked( false );
- fadeBox->setChecked( false );
- //fadeSlider->setValue( );
- flaresBox->setChecked( false );
- //flaresSlider->setValue( );
- trailBox->setChecked( false );
- break;
- case 3: //Enhanced reality
- fireworksSlider->setValue( 8 );
- bottomfireBox->setChecked( true );
- bottomfireColorButton->setColor( TQt::magenta );
- frameskipBox->setChecked( true );
- fire1Box->setChecked( true );
- fire2Box->setChecked( true );
- fire3Box->setChecked( true );
- fire4Box->setChecked( true );
- fire5Box->setChecked( true );
- fire6Box->setChecked( true );
- fire7Box->setChecked( false );
- fire8Box->setChecked( false );
- whiteBox->setChecked( true );
- blueBox->setChecked( true );
- seagreenBox->setChecked( true );
- purpleBox->setChecked( true );
- orangeBox->setChecked( true );
- redBox->setChecked( true );
- greenBox->setChecked( true );
- combosBox->setChecked( true );
- logosBox->setChecked( true );
- logosKonquiBox->setChecked( false );
- logosTuxBox->setChecked( true );
- logosIconsBox->setChecked( false );
- logosSlider->setValue( 2 );
- starsBox->setChecked( true );
- starsFlickerBox->setChecked( true );
- starsGradientBox->setChecked( true );
- starsSlider->setValue( 5 );
- writingsBox->setChecked( true );
- lightBox->setChecked( false );
- fadeBox->setChecked( true );
- fadeSlider->setValue( 3 );
- flaresBox->setChecked( false );
- //flaresSlider->setValue( );
- trailBox->setChecked( true );
- break;
- case 4: //Hypnotic illusions
- fireworksSlider->setValue( 9 );
- bottomfireBox->setChecked( true );
- bottomfireColorButton->setColor( TQt::red );
- frameskipBox->setChecked( true );
- fire1Box->setChecked( true );
- fire2Box->setChecked( true );
- fire3Box->setChecked( true );
- fire4Box->setChecked( true );
- fire5Box->setChecked( true );
- fire6Box->setChecked( true );
- fire7Box->setChecked( false );
- fire8Box->setChecked( false );
- whiteBox->setChecked( true );
- blueBox->setChecked( true );
- seagreenBox->setChecked( true );
- purpleBox->setChecked( true );
- orangeBox->setChecked( true );
- redBox->setChecked( true );
- greenBox->setChecked( true );
- combosBox->setChecked( true );
- logosBox->setChecked( false );
- //logosKonquiBox->setChecked( true );
- //logosTuxBox->setChecked( true );
- //logosIconsBox->setChecked( true );
- //logosSlider->setValue( 5 );
- starsBox->setChecked( true );
- starsFlickerBox->setChecked( true );
- starsGradientBox->setChecked( true );
- starsSlider->setValue( 8 );
- writingsBox->setChecked( false );
- lightBox->setChecked( false );
- fadeBox->setChecked( true );
- fadeSlider->setValue( 7 );
- flaresBox->setChecked( true );
- flaresSlider->setValue( 8 );
- trailBox->setChecked( false );
- break;
- }
- //applyButton_clicked();
-}
-
-#endif
diff --git a/kscreensaver/kdesavers/firesaverwriter.cpp b/kscreensaver/kdesavers/firesaverwriter.cpp
deleted file mode 100644
index ff78fc5e..00000000
--- a/kscreensaver/kdesavers/firesaverwriter.cpp
+++ /dev/null
@@ -1,247 +0,0 @@
-/***************************************************************************
- * Copyright (C) 2004 by E.Ros *
- * *
- * This program is free software; you can redistribute it and/or modify *
- * it under the terms of the GNU General Public License as published by *
- * the Free Software Foundation; either version 2 of the License, or *
- * (at your option) any later version. *
- * *
- ***************************************************************************/
-
-#include <math.h>
-#include <stdlib.h>
-#include <tqimage.h>
-#include <tqgl.h>
-#include <tqfile.h>
-#include <tqstring.h>
-#include <kdebug.h>
-#include <kstandarddirs.h>
-#include <tdeversion.h>
-#include <klocale.h>
-#include "firesaverwriter.h"
-
-
-/* Word: SINGLE WORD */
-
-Word::Word( const char * _text, TQMap<char, Symbol *> * sMap, float _scale )
- : width(0), scale(_scale), cX(0), cY(0), vScale(0), vX(0), vY(0),
- activateTime(0.0), lifeTime(2), currentTime(0)
-{
- for ( ; *_text != 0 && *_text != ' '; _text++ )
- {
- char c = *_text;
- if ( !sMap->contains(c) ) //search for a symbol in the map
- continue;
- Symbol * symbol = (*sMap)[c]; //get the symbol*
- width += symbol->scale; //increase word's half-width
- symbolList.append( symbol ); //insert it to the list
- }
- color[0] = 0;
- color[1] = 0.8 * drand48();
- color[2] = 0.2 + 0.8 * drand48();
- color[3] = 1;
-}
-
-inline void Word::renderWord( double dT )
-{
- if ( (currentTime += dT) < activateTime )
- return;
-
- //update coloring
- if ( activateTime >= 0 ) {
- if ( currentTime < activateTime + 0.4 )
- color[3] = (currentTime - activateTime) / 0.4;
- else
- color[3] = 1 - (currentTime - activateTime - 0.4) / (lifeTime - 0.4);
- } else
- color[3] = 1 - currentTime / lifeTime;
-
- //word's global transforms
- glPushMatrix();
- glTranslatef( cX - scale * width, cY, 0 );
- glScalef( scale, scale, 1 );
- glColor4fv( color );
-
- //for each symbol draw it!
- Symbol * symbol = symbolList.first();
- for( ; symbol; symbol = symbolList.next() )
- symbol->renderSymbol();
- glPopMatrix();
-
- //physical update to position and scale
- cX += vX * dT;
- cY += vY * dT;
- scale += scale * vScale * dT;
-}
-
-inline bool Word::isDead()
-{
- if ( activateTime > 0 )
- return (currentTime - activateTime) >= lifeTime;
- return currentTime >= lifeTime;
-}
-
-
-
-/* Writer: engine that spawns and manages words */
-
-Writer::Writer( TQString descFileName )
- : numTextures(0)
-{
- wordList.setAutoDelete( true );
-
- if ( !loadMap( descFileName ) )
- return;
-
- TQString welcomeString = i18n("Welcome to KDE %1.%2.%3")
- .arg(TDE_VERSION_MAJOR)
- .arg(TDE_VERSION_MINOR)
- .arg(TDE_VERSION_RELEASE);
- spawnWords(welcomeString, Fun1);
-}
-
-Writer::~ Writer()
-{
- glDeleteTextures( numTextures, texArray );
- wordList.clear();
- TQMap<char, Symbol *>::Iterator it = symbolMap.begin();
- for ( ; it != symbolMap.end(); ++it )
- delete (Symbol *)it.data();
-}
-
-void Writer::spawnWords( TQString phrase, effectType fX )
-{
- int wordCount = 0;
- float xCenter = 0,
- yCenter = drand48()*40 - 20,
- wordsWidth = 0;
- TQPtrList<Word> localWords;
- while ( phrase.length() > 0 )
- {
- TQString letters = phrase.section(" ",0,0);
- Word * word = new Word( letters.latin1(), &symbolMap );
- wordList.append( word );
- localWords.append( word );
- word->cX = xCenter;
- word->cY = yCenter;
- switch ( fX ) {
- case Fun1:{
- float angle = 2*M_PI * drand48(),
- module = 0.25 * (drand48() + drand48());
- word->vX = module * cos( angle );
- word->vY = module * sin( angle );
- word->vScale = 0.6;
- word->scale = 0.7 + 0.3*(drand48() + drand48());}
- word->activateTime = 0.3 * wordCount;
- //fall to the case below for word spacing
- default:
- case NoEffect:
- wordsWidth += word->width;
- word->cX += wordsWidth;
- wordsWidth += word->width + 1;
- break;
- case Sequence:
- word->lifeTime = 1.2;
- word->activateTime = 0.6 + 0.9 * wordCount;
-// word->vY = -5;
- break;
- }
- wordCount ++;
- phrase.remove(0, letters.length() + 1);
- }
- if ( localWords.count() < 1 )
- return;
- //some computations to 'center' the string
- float displace = -(wordsWidth - 1) / 2;
- Word * word = localWords.first();
- for( ; word; word = localWords.next() )
- word->cX += displace;
-}
-
-void Writer::render( double dT )
-{
- if ( !numTextures )
- return;
-
- glEnable( GL_TEXTURE_2D );
-
- glPushMatrix();
- glScalef( 0.6, 0.6, 1.0 );
- Word * word = wordList.first();
- while( word ) {
- word->renderWord( dT );
- if ( word->isDead() ) {
- wordList.remove();
- word = wordList.current();
- } else
- word = wordList.next();
- }
- glPopMatrix();
-}
-
-/* loadMap()
- * parses the description file to create the internal symbols map.
- * This map is then used when building words.
- **/
-bool Writer::loadMap( TQString descFile )
-{
- TQFile desc( locate("data","kfiresaver/"+descFile) );
- if ( !desc.open( IO_ReadOnly ) )
- return false;
-
- unsigned int currentNumber;
- float xres = 0, yres = 0;
- bool generatedFirst = false;
-
- while ( !desc.atEnd() )
- {
- TQString line;
- int count = desc.readLine( line, 100 );
- //skip comments / invalid lines
- if ( count < 6 || line.at(0) == '#')
- continue;
- //load texture maps
- if ( line.at(0) == '"' && numTextures < 15 )
- {
- //load and generate texture
- TQString fileName = line.section("\"", 1,1 );
- TQImage tmp;
- if ( !tmp.load( locate("data","kfiresaver/"+fileName) ) ) {
- kdWarning() << "can't load filename:" << fileName << endl;
- generatedFirst = false;
- continue;
- }
- glGenTextures( 1, &currentNumber );
- texArray[ numTextures++ ] = currentNumber;
- glBindTexture(GL_TEXTURE_2D, currentNumber);
- glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
- glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
- TQImage texture = TQGLWidget::convertToGLFormat( tmp );
- xres = (float)texture.width();
- yres = (float)texture.height();
- glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, (int)xres, (int)yres, 0,
- GL_RGBA, GL_UNSIGNED_BYTE, texture.bits());
- generatedFirst = true;
- continue;
- }
- if ( !generatedFirst )
- continue;
- if ( line.contains(' ') != 4 ) {
- kdWarning() << "wrong line on symbols.desc (4 spaces expected):" << endl;
- kdWarning() << " '" << line << "'" << endl;
- continue;
- }
- //parse the line describing a symbol and create it
- char p = *(line.latin1());
- if ( symbolMap.contains(p) )
- continue;
- float left = (float)(line.section(" ",1,1).toInt())/xres,
- top = (float)(line.section(" ",2,2).toInt())/yres,
- right = (float)(line.section(" ",3,3).toInt() + 1)/xres,
- bottom = (float)(line.section(" ",4,4).toInt() + 1)/yres;
- symbolMap[p] = new Symbol( currentNumber, left,top,right,bottom );
- }
-
- return symbolMap.size() > 0;
-}
diff --git a/kscreensaver/kdesavers/firesaverwriter.h b/kscreensaver/kdesavers/firesaverwriter.h
deleted file mode 100644
index e93f65be..00000000
--- a/kscreensaver/kdesavers/firesaverwriter.h
+++ /dev/null
@@ -1,113 +0,0 @@
-/***************************************************************************
- * Copyright (C) 2004 by E.Ros *
- * *
- * This program is free software; you can redistribute it and/or modify *
- * it under the terms of the GNU General Public License as published by *
- * the Free Software Foundation; either version 2 of the License, or *
- * (at your option) any later version. *
- * *
- ***************************************************************************/
-
-#ifndef FIRESAVER_WRITER_H
-#define FIRESAVER_WRITER_H
-
-#include <tqgl.h>
-#include <tqptrlist.h>
-#include <tqmap.h>
-#include <tqstring.h>
-
-class Symbol
-{
- public:
- Symbol( unsigned int textureNumber, float l, float t, float r, float b )
- : scale((r - l) / (b - t)), texNum(textureNumber), L(l), T(1-t), R(r), B(1-b)
- {
- v1[0] = -scale; v1[1] = 1;
- v2[0] = -scale; v2[1] = -1;
- v3[0] = scale; v3[1] = 1;
- v4[0] = scale; v4[1] = -1;
- }
-
- float scale;
-
- inline void renderSymbol()
- {
- //draw the symbol and update "cursor"'s position
- glBindTexture( GL_TEXTURE_2D, texNum );
- glTranslatef( scale, 0, 0 );
- glBegin( GL_TRIANGLE_STRIP );
- glTexCoord2f( L, T );
- glVertex2fv( v1 );
- glTexCoord2f( L, B );
- glVertex2fv( v2 );
- glTexCoord2f( R, T );
- glVertex2fv( v3 );
- glTexCoord2f( R, B );
- glVertex2fv( v4 );
- glEnd();
- glTranslatef( scale, 0, 0 );
- }
-
- private:
- float v1[2], v2[2], v3[2], v4[2];
- unsigned int texNum; //number of texture to activate
- float L, T, R, B; //coordinates for mapping
-};
-
-
-class Word
-{
- friend class Writer;
- public:
- Word( const char * text, TQMap<char, Symbol *> * map, float scale = 1.0 );
-
- inline void renderWord( double dT );
- inline bool isDead();
-
- private:
- float width, scale, cX, cY;
- float vScale, vX, vY;
- float activateTime, lifeTime, currentTime;
- float color[4];
- TQPtrList<Symbol> symbolList;
-};
-
-
-/*
- *
- **/
-class Writer
-{
- public:
- Writer( TQString descFileName );
- ~Writer();
-
- //types of effects implemented
- enum effectType { NoEffect = 0, Sequence, Fun1, Fun2 };
-
- //call this function to add a sentence to the renderer
- void spawnWords( TQString phrase, effectType fx = NoEffect );
-
- //called to get the words on screen using OpenGL
- //Note: the context must be set up. Words are drawn on XY plane
- //inside a rectangle with 10 units's side.
- void render( double dT );
-
- private:
- //misc utility functions
- bool loadMap( TQString );
-
- //texture 'references' used by GL to delete allocated textures
- int numTextures;
- unsigned int texArray[16];
-
- //list of words and map of symbols
- TQPtrList<Word> wordList;
- TQMap<char, Symbol *> symbolMap;
-
- //disables standard constructor
- Writer();
-};
-
-#endif
diff --git a/kscreensaver/kdesavers/fountain.cpp b/kscreensaver/kdesavers/fountain.cpp
deleted file mode 100644
index 125be143..00000000
--- a/kscreensaver/kdesavers/fountain.cpp
+++ /dev/null
@@ -1,461 +0,0 @@
-//-----------------------------------------------------------------------------
-//
-// kfountain - Partical Fountain Screen Saver for KDE 2
-//
-// Copyright (c) Ian Reinhart Geiser 2001
-//
-// TDEConfig code and KScreenSaver "Setup..." improvements by
-// Nick Betcher <[email protected]> 2001
-//
-#include <stdlib.h>
-#include <tqlabel.h>
-#include <tqlayout.h>
-#include <kapplication.h>
-#include <klocale.h>
-#include <kconfig.h>
-#include <kcolordialog.h>
-#include <kbuttonbox.h>
-#include <kcolorbutton.h>
-#include <kglobal.h>
-#include "fountain.h"
-#include "fountain.moc"
-#ifdef TQ_WS_MACX
-#include <OpenGL/gl.h>
-#include <OpenGL/glu.h>
-#else
-#include <GL/glu.h>
-#include <GL/gl.h>
-#endif
-#include <tqimage.h>
-#include <kdebug.h>
-#include <tqpainter.h>
-#include <tqradiobutton.h>
-#include <tqspinbox.h>
-#include <kstandarddirs.h>
-#include <math.h>
-#include <kmessagebox.h>
-// libkscreensaver interface
-extern "C"
-{
- KDE_EXPORT const char *kss_applicationName = "kfountain.kss";
- KDE_EXPORT const char *kss_description = I18N_NOOP( "Particle Fountain Screen Saver" );
- KDE_EXPORT const char *kss_version = "2.2.0";
-
- KDE_EXPORT KScreenSaver *kss_create( WId id )
- {
- return new KFountainSaver( id );
- }
-
- KDE_EXPORT TQDialog *kss_setup()
- {
- return new KFountainSetup();
- }
-}
-
-//-----------------------------------------------------------------------------
-// dialog to setup screen saver parameters
-//
-KFountainSetup::KFountainSetup( TQWidget *parent, const char *name )
- : SetupUi( parent, name, TRUE )
-{
- readSettings();
-
- //TQLabel *label;
- //TQPushButton *button;
-
- //setCaption( i18n("Setup Particle Fountain") );
-
- //TQVBoxLayout *tl = new TQVBoxLayout(this, 10);
- //TQHBoxLayout *tl1 = new TQHBoxLayout;
- //tl->addLayout(tl1);
-
- //TQVBoxLayout *tl11 = new TQVBoxLayout(5);
- //tl1->addLayout(tl11);
-
- //label = new TQLabel( i18n("No options here yet...:"), this );
- ///tl11->addWidget(label);;
-
- //preview = new TQWidget( this );
- preview->setFixedSize( 220, 170 );
- preview->setBackgroundColor( black );
- preview->show(); // otherwise saver does not get correct size
- saver = new KFountainSaver( preview->winId() );
- //tl1->addWidget(preview);
-
- //KButtonBox *bbox = new KButtonBox(this);
- //bbox->addStretch(1);
-;
- connect( PushButton1, TQT_SIGNAL( clicked() ), TQT_SLOT( slotOkPressed() ) );
- connect( PushButton2, TQT_SIGNAL( clicked() ), TQT_SLOT( reject() ) );
- connect( PushButton3, TQT_SIGNAL( clicked() ), TQT_SLOT( aboutPressed() ) );
- connect( SpinBox1, TQT_SIGNAL( valueChanged(int)), saver, TQT_SLOT( updateSize(int)));
- connect( RadioButton1, TQT_SIGNAL( toggled(bool)), saver, TQT_SLOT( doStars(bool)));
-
-}
-
-// read settings from config file
-void KFountainSetup::readSettings()
-{
- TDEConfig config("kssfountainrc", false, false);
-
- config.setGroup( "Settings" );
- TQString boolval = config.readEntry( "Stars", "false" );
- if (boolval == "true") {
- RadioButton1->setDown(true);
- RadioButton1_2->setDown(false);
- } else {
- if (boolval == "false")
- {
- RadioButton1->setDown(false);
- RadioButton1_2->setDown(true);
- }
- }
-
- TQString starammount = config.readEntry("StarSize", "75");
- SpinBox1->setValue(starammount.toInt());
-
-}
-
-// Ok pressed - save settings and exit
-void KFountainSetup::slotOkPressed()
-{
- TDEConfig config("kssfountainrc", false, false);
- config.setGroup( "Settings" );
-
- if (RadioButton1->isOn() == true)
- {
- config.writeEntry( "Stars", "true" );
- } else {
- if (RadioButton1_2->isOn() == true)
- {
- config.writeEntry( "Stars", "false" );
- }
- }
- config.writeEntry( "StarSize", TQString::number(SpinBox1->value()) );
-
- config.sync();
-
- accept();
-}
-
-void KFountainSetup::aboutPressed()
-{
- KMessageBox::about(this,
- i18n("<h3>Particle Fountain</h3>\n<p>Particle Fountain Screen Saver for TDE</p>\nCopyright (c) Ian Reinhart Geiser 2001<br>\n\n<p>TDEConfig code and KScreenSaver \"Setup...\" improvements by Nick Betcher <[email protected]> 2001</p>"));
-}
-//-----------------------------------------------------------------------------
-
-
-KFountainSaver::KFountainSaver( WId id ) : KScreenSaver( id )
-{
-
- kdDebug() << "Blank" << endl;
-
- timer = new TQTimer( this );
- timer->start( 25, TRUE );
- setBackgroundColor( black );
- erase();
- fountain = new Fountain();
- embed(fountain);
- fountain->show();
- connect( timer, TQT_SIGNAL(timeout()), this, TQT_SLOT(blank()) );
-}
-
-KFountainSaver::~KFountainSaver()
-{
-
-}
-
-// read configuration settings from config file
-void KFountainSaver::readSettings()
-{
-// Please remove me
-
-}
-
-void KFountainSaver::blank()
-{
- // Play fountain
-
- fountain->updateGL();
- timer->start( 25, TRUE );
-
-}
-Fountain::Fountain( TQWidget * parent, const char * name) : TQGLWidget (parent,name)
-{
- rainbow=true;
- slowdown=2.0f;
- zoom=-40.0f;
- index=0;
- size = 0.75f;
- obj = gluNewQuadric();
-
-// This has to be here because you can't update the fountain until 'fountain' is created!
- TDEConfig config("kssfountainrc", false, false);
- config.setGroup( "Settings" );
- TQString boolval = config.readEntry( "Stars", "false" );
- if (boolval == "true") {
- setStars(true);
- } else {
- if (boolval == "false")
- {
- setStars(false);
- }
- }
-
- TQString starammount = config.readEntry("StarSize", "75");
- float passvalue = (starammount.toInt() / 100.0);
- setSize(passvalue);
-
-}
-
-Fountain::~Fountain()
-{
- glDeleteTextures( 1, &texture[0] );
- gluDeleteQuadric(obj);
-}
-
-/** load the particle file */
-bool Fountain::loadParticle()
-{
- /* Status indicator */
- bool Status = TRUE;
- TQImage buf;
-
- kdDebug() << "Loading: " << locate("data", "kscreensaver/particle.png") << endl;
- if (buf.load( locate("data", "kscreensaver/particle.png") ) )
-
- {
- tex = convertToGLFormat(buf); // flipped 32bit RGBA
- kdDebug() << "Texture loaded: " << tex.numBytes () << endl;
- }
- else
- {
- TQImage dummy( 32, 32, 32 );
- dummy.fill( TQt::white.rgb() );
- buf = dummy;
- tex = convertToGLFormat( buf );
- }
-
- /* Set the status to true */
- //Status = TRUE;
- glGenTextures(1, &texture[0]); /* create three textures */
- glBindTexture(GL_TEXTURE_2D, texture[0]);
- /* use linear filtering */
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
- /* actually generate the texture */
- glTexImage2D(GL_TEXTURE_2D, 0, 4, tex.width(), tex.height(), 0,
- GL_RGBA, GL_UNSIGNED_BYTE, tex.bits());
-
-
-
- return Status;
-}
-/** setup the GL enviroment */
-void Fountain::initializeGL ()
-{
-
- kdDebug() << "InitGL" << endl;
- GLfloat colors[12][3]=
- {{1.0f,0.5f,0.5f},{1.0f,0.75f,0.5f},{1.0f,1.0f,0.5f},{0.75f,1.0f,0.5f},
- {0.5f,1.0f,0.5f},{0.5f,1.0f,0.75f},{0.5f,1.0f,1.0f},{0.5f,0.75f,1.0f},
- {0.5f,0.5f,1.0f},{0.75f,0.5f,1.0f},{1.0f,0.5f,1.0f},{1.0f,0.5f,0.75f}};
-
- if (loadParticle()) // Jump To Texture Loading Routine
- {
- /* Enable smooth shading */
- glShadeModel( GL_SMOOTH );
-
- /* Set the background black */
- glClearColor( 0.0f, 0.0f, 0.0f, 0.0f );
-
- /* Depth buffer setup */
- glClearDepth( 1.0f );
-
- /* Enables Depth Testing */
- glDisable( GL_DEPTH_TEST );
-
- /* Enable Blending */
- glEnable( GL_BLEND );
- /* Type Of Blending To Perform */
- glBlendFunc( GL_SRC_ALPHA, GL_ONE );
-
-
- /* Really Nice Perspective Calculations */
- glHint( GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST );
- /* Really Nice Point Smoothing */
- glHint( GL_POINT_SMOOTH_HINT, GL_NICEST );
-
- /* Enable Texture Mapping */
- glEnable( GL_TEXTURE_2D );
- /* Select Our Texture */
- glBindTexture( GL_TEXTURE_2D, texture[0] );
-
- for (loop=0;loop<MAX_PARTICLES;loop++) // Initials All The Textures
- {
- particle[loop].active=true; // Make All The Particles Active
- particle[loop].life=1.0f; // Give All The Particles Full Life
- particle[loop].fade=float(TDEApplication::random()%100)/1000.0f+0.003f; // Random Fade Speed
- particle[loop].r=colors[(loop+1)/(MAX_PARTICLES/12)][0]; // Select Red Rainbow Color
- particle[loop].g=colors[(loop+1)/(MAX_PARTICLES/12)][1]; // Select Green Rainbow Color
- particle[loop].b=colors[(loop+1)/(MAX_PARTICLES/12)][2]; // Select Blue Rainbow Color
- particle[loop].xi=float((TDEApplication::random()%50)-26.0f)*10.0f; // Random Speed On X Axis
- particle[loop].yi=float((TDEApplication::random()%50)-25.0f)*10.0f; // Random Speed On Y Axis
- particle[loop].zi=float((TDEApplication::random()%50)-25.0f)*10.0f; // Random Speed On Z Axis
- particle[loop].xg=0.0f; // SetQt::Horizontal Pull To Zero
- particle[loop].yg=-0.8f; // SetQt::Vertical Pull Downward
- particle[loop].zg=0.0f; // Set Pull On Z Axis To Zero
- particle[loop].size=size; // Set particle size.
- }
- }
- else
- exit(0);
-}
-/** resize the gl view */
-void Fountain::resizeGL ( int width, int height )
-{
- kdDebug() << "ResizeGL " << width << "," <<height<< endl;
- if (height==0) // Prevent A Divide By Zero By
- {
- height=1; // Making Height Equal One
- }
-
- glViewport(0,0,width,height); // Reset The Current Viewport
-
- glMatrixMode(GL_PROJECTION); // Select The Projection Matrix
- glLoadIdentity(); // Reset The Projection Matrix
-
- // Calculate The Aspect Ratio Of The Window
- gluPerspective(45.0f,(GLfloat)width/(GLfloat)height,0.1f,200.0f);
-
- glMatrixMode(GL_MODELVIEW); // Select The Modelview Matrix
- glLoadIdentity();
-}
-/** paint the GL view */
-void Fountain::paintGL ()
-{
- //kdDebug() << "PaintGL" << endl;
-
- GLfloat colors[12][3]=
- {{1.0f,0.5f,0.5f},{1.0f,0.75f,0.5f},{1.0f,1.0f,0.5f},{0.75f,1.0f,0.5f},
- {0.5f,1.0f,0.5f},{0.5f,1.0f,0.75f},{0.5f,1.0f,1.0f},{0.5f,0.75f,1.0f},
- {0.5f,0.5f,1.0f},{0.75f,0.5f,1.0f},{1.0f,0.5f,1.0f},{1.0f,0.5f,0.75f}};
- col = ( ++col ) % 12;
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // Clear Screen And Depth Buffer
-
- glLoadIdentity();
- // Reset The ModelView Matrix
- transIndex++;
- glTranslatef( GLfloat(5.0*sin(4*3.14*transIndex/360)), GLfloat(4.0*cos(2*3.14*transIndex/360)), 0.0 );
- xspeed = GLfloat(100.0*cos(3*3.14*transIndex/360)+100);
- yspeed = GLfloat(100.0*sin(3*3.14*transIndex/360)+100);
- //slowdown = GLfloat(4.0*sin(2*3.14*transIndex/360)+4.01);
-
- for (loop=0;loop<MAX_PARTICLES;loop++) // Loop Through All The Particles
- {
- if (particle[loop].active) // If The Particle Is Active
- {
- float x=particle[loop].x; // Grab Our Particle X Position
- float y=particle[loop].y; // Grab Our Particle Y Position
- float z=particle[loop].z+zoom; // Particle Z Pos + Zoom
- /* Select Our Texture */
-
- /* Draw The Particle Using Our RGB Values,
- * Fade The Particle Based On It's Life
- */
-
- glColor4f( particle[loop].r,
- particle[loop].g,
- particle[loop].b,
- particle[loop].life );
-
- /* Build Quad From A Triangle Strip */
- if( !stars )
- glBegin( GL_TRIANGLE_STRIP );
- else
- glBegin( GL_TRIANGLE_FAN );
- /* Top Right */
- glTexCoord2d( 1, 1 );
- glVertex3f( x + particle[loop].size, y + particle[loop].size, z );
- /* Top Left */
- glTexCoord2d( 0, 1 );
- glVertex3f( x - particle[loop].size, y + particle[loop].size, z );
- /* Bottom Right */
- glTexCoord2d( 1, 0 );
- glVertex3f( x + particle[loop].size, y - particle[loop].size, z );
- /* Bottom Left */
- glTexCoord2d( 0, 0 );
- glVertex3f( x - particle[loop].size, y - particle[loop].size, z );
- glEnd( );
-
- particle[loop].x+=particle[loop].xi/(slowdown*1000);// Move On The X Axis By X Speed
- particle[loop].y+=particle[loop].yi/(slowdown*1000);// Move On The Y Axis By Y Speed
- particle[loop].z+=particle[loop].zi/(slowdown*1000);// Move On The Z Axis By Z Speed
-
- particle[loop].xi+=particle[loop].xg; // Take Pull On X Axis Into Account
- particle[loop].yi+=particle[loop].yg; // Take Pull On Y Axis Into Account
- particle[loop].zi+=particle[loop].zg; // Take Pull On Z Axis Into Account
- particle[loop].life-=particle[loop].fade; // Reduce Particles Life By 'Fade'
-
- if (particle[loop].life<0.0f) // If Particle Is Burned Out
- {
- particle[loop].life=2.0f; // Give It New Life
- particle[loop].fade=float(TDEApplication::random()%100)/1000.0f+0.003f; // Random Fade Value
- particle[loop].x=0.0f; // Center On X Axis
- particle[loop].y=0.0f; // Center On Y Axis
- particle[loop].z=0.0f; // Center On Z Axis
- particle[loop].xi=xspeed+float((TDEApplication::random()%60)-32.0f); // X Axis Speed And Direction
- particle[loop].yi=yspeed+float((TDEApplication::random()%60)-30.0f); // Y Axis Speed And Direction
- particle[loop].zi=float((TDEApplication::random()%60)-30.0f); // Z Axis Speed And Direction
- particle[loop].r=colors[col][0]; // Select Red From Color Table
- particle[loop].g=colors[col][1]; // Select Green From Color Table
- particle[loop].b=colors[col][2]; // Select Blue From Color Table
- particle[loop].size=size;
- if ((1+(random()%20)) == 10)
- {
- // Explode
- particle[loop].active=true; // Make All The Particles Active
- particle[loop].life=1.0f; // Give All The Particles Full Life
- particle[loop].fade=float(TDEApplication::random()%100)/1000.0f+0.003f; // Random Fade Speed
- particle[loop].r=colors[(loop+1)/(MAX_PARTICLES/12)][0]; // Select Red Rainbow Color
- particle[loop].g=colors[(loop+1)/(MAX_PARTICLES/12)][1]; // Select Green Rainbow Color
- particle[loop].b=colors[(loop+1)/(MAX_PARTICLES/12)][2]; // Select Blue Rainbow Color
- particle[loop].xi=float((TDEApplication::random()%50)-26.0f)*10.0f; // Random Speed On X Axis
- particle[loop].yi=float((TDEApplication::random()%50)-25.0f)*10.0f; // Random Speed On Y Axis
- particle[loop].zi=float((TDEApplication::random()%50)-25.0f)*10.0f; // Random Speed On Z Axis
- particle[loop].xg=0.0f; // SetQt::Horizontal Pull To Zero
- particle[loop].yg=-0.8f; // SetQt::Vertical Pull Downward
- particle[loop].zg=0.0f; // Set Pull On Z Axis To Zero
- particle[loop].size=size; // Set particle size.
- }
- }
- // Lets stir some things up
- index += 0.001;
- particle[loop].yg =2.0*sin(2*3.14*transIndex/360);
- particle[loop].xg =2.0*cos(2*3.14*transIndex/360);
- particle[loop].zg =4.0+(4.0*cos(2*3.14*transIndex/360));
-
- }
- }
-
- glFlush();
-}
-void Fountain::setSize( float newSize )
-{
- size = newSize;
-}
-void Fountain::setStars( bool doStars )
-{
- stars = doStars;
-}
-
-void KFountainSaver::updateSize(int newSize)
-{
- fountain->setSize(newSize/100);
-}
-void KFountainSaver::doStars(bool starState)
-{
- fountain->setStars(starState);
-}
-
diff --git a/kscreensaver/kdesavers/fountain.h b/kscreensaver/kdesavers/fountain.h
deleted file mode 100644
index 8ddd3821..00000000
--- a/kscreensaver/kdesavers/fountain.h
+++ /dev/null
@@ -1,143 +0,0 @@
-//-----------------------------------------------------------------------------
-//
-// kfountain - Partical Fountain Screen Saver for KDE 2
-//
-// Copyright (c) Ian Reinhart Geiser 2001
-//
-/////
-//NOTE:
-// The base particle engine did not come from me, it was designed by Jeff Molofee <[email protected]>
-// I did some extensive modifications to make it work with QT's OpenGL but the base principal is about
-// the same.
-////
-
-#ifndef __FOUNTAIN_H__
-#define __FOUNTAIN_H__
-
-#include <tqdialog.h>
-#include <tqgl.h>
-#ifdef TQ_WS_MACX
-#include <OpenGL/gl.h>
-#include <OpenGL/glu.h>
-#else
-#include <GL/glu.h>
-#include <GL/gl.h>
-#endif
-#include <kscreensaver.h>
-#include <tqtimer.h>
-#include <tqimage.h>
-#include "fountaincfg.h"
-#include <kinstance.h>
-#include <tqfile.h>
-#include <tqtextstream.h>
-
-#define MAX_PARTICLES 1000
-
-
-class Fountain : public TQGLWidget
-{
-Q_OBJECT
-
- class particles // Create A Structure For Particle
- {
- public:
- bool active; // Active (Yes/No)
- float life; // Particle Life
- float fade; // Fade Speed
- float r; // Red Value
- float g; // Green Value
- float b; // Blue Value
- float x; // X Position
- float y; // Y Position
- float z; // Z Position
- float xi; // X Direction
- float yi; // Y Direction
- float zi; // Z Direction
- float xg; // X Gravity
- float yg; // Y Gravity
- float zg; // Z Gravity
- float size; // Particle Size
- };
-
-public:
- Fountain( TQWidget * parent=0, const char * name=0 );
- ~Fountain();
- void setSize( float newSize );
- void setStars( bool doStars );
-protected:
- /** paint the GL view */
- void paintGL ();
- /** resize the gl view */
- void resizeGL ( int w, int h );
- /** setup the GL enviroment */
- void initializeGL ();
-
-
-private:
- /** load the partical file */
- bool loadParticle();
-
- particles particle[MAX_PARTICLES];
-
-
- bool rainbow; // Rainbow Mode?
- bool sp; // Spacebar Pressed?
- bool rp; // Enter Key Pressed?
-
- float slowdown; // Slow Down Particles
- float xspeed; // Base X Speed (To Allow Keyboard Direction Of Tail)
- float yspeed; // Base Y Speed (To Allow Keyboard Direction Of Tail)
- float zoom; // Used To Zoom Out
- float size;
- float stars;
- GLuint loop; // Misc Loop Variable
- GLuint col; // Current Color Selection
- GLuint delay; // Rainbow Effect Delay
- GLuint texture[1];
- TQImage tex;
- float index;
- float transIndex;
- GLfloat scale;
- GLUquadricObj *obj;
-};
-
-class KFountainSaver : public KScreenSaver
-{
-Q_OBJECT
-
-public:
- KFountainSaver( WId drawable );
- virtual ~KFountainSaver();
- void readSettings();
-public slots:
- void blank();
- void updateSize(int newSize);
- void doStars(bool starState);
-// void loadTextures(bool textures);
-private:
- Fountain *fountain;
- TQTimer *timer;
-};
-
-class KFountainSetup : public SetupUi
-{
- Q_OBJECT
-
-public:
- KFountainSetup( TQWidget *parent = NULL, const char *name = NULL );
-
-protected:
- void readSettings();
-
-private slots:
- void slotOkPressed();
- void aboutPressed();
-private:
- KFountainSaver *saver;
- float size;
- float stars;
-};
-
-#endif
-
-
diff --git a/kscreensaver/kdesavers/fountaincfg.ui b/kscreensaver/kdesavers/fountaincfg.ui
deleted file mode 100644
index 3b5eacd7..00000000
--- a/kscreensaver/kdesavers/fountaincfg.ui
+++ /dev/null
@@ -1,192 +0,0 @@
-<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
-<class>SetupUi</class>
-<widget class="TQDialog">
- <property name="name">
- <cstring>SetupUi</cstring>
- </property>
- <property name="geometry">
- <rect>
- <x>0</x>
- <y>0</y>
- <width>400</width>
- <height>209</height>
- </rect>
- </property>
- <property name="minimumSize">
- <size>
- <width>400</width>
- <height>209</height>
- </size>
- </property>
- <property name="baseSize">
- <size>
- <width>400</width>
- <height>250</height>
- </size>
- </property>
- <property name="caption">
- <string>Particle Fountain Setup</string>
- </property>
- <grid>
- <property name="name">
- <cstring>unnamed</cstring>
- </property>
- <property name="margin">
- <number>11</number>
- </property>
- <property name="spacing">
- <number>6</number>
- </property>
- <widget class="TQLayoutWidget" row="0" column="0">
- <property name="name">
- <cstring>Layout4</cstring>
- </property>
- <grid>
- <property name="name">
- <cstring>unnamed</cstring>
- </property>
- <property name="margin">
- <number>0</number>
- </property>
- <property name="spacing">
- <number>6</number>
- </property>
- <widget class="TQCheckBox" row="3" column="0">
- <property name="name">
- <cstring>CheckBox1</cstring>
- </property>
- <property name="text">
- <string>Use textures</string>
- </property>
- </widget>
- <widget class="TQPushButton" row="4" column="2">
- <property name="name">
- <cstring>PushButton3</cstring>
- </property>
- <property name="text">
- <string>&amp;About</string>
- </property>
- </widget>
- <widget class="TQSpinBox" row="1" column="0">
- <property name="name">
- <cstring>SpinBox1</cstring>
- </property>
- <property name="maxValue">
- <number>500</number>
- </property>
- <property name="minValue">
- <number>25</number>
- </property>
- <property name="lineStep">
- <number>10</number>
- </property>
- <property name="value">
- <number>75</number>
- </property>
- </widget>
- <widget class="TQPushButton" row="4" column="1">
- <property name="name">
- <cstring>PushButton2</cstring>
- </property>
- <property name="text">
- <string>&amp;Cancel</string>
- </property>
- </widget>
- <widget class="TQPushButton" row="4" column="0">
- <property name="name">
- <cstring>PushButton1</cstring>
- </property>
- <property name="text">
- <string>&amp;OK</string>
- </property>
- <property name="default">
- <bool>true</bool>
- </property>
- </widget>
- <widget class="TQGroupBox" row="2" column="0">
- <property name="name">
- <cstring>GroupBox1</cstring>
- </property>
- <property name="title">
- <string>Shapes</string>
- </property>
- <grid>
- <property name="name">
- <cstring>unnamed</cstring>
- </property>
- <property name="margin">
- <number>11</number>
- </property>
- <property name="spacing">
- <number>6</number>
- </property>
- <widget class="TQLayoutWidget" row="0" column="0">
- <property name="name">
- <cstring>Layout3</cstring>
- </property>
- <vbox>
- <property name="name">
- <cstring>unnamed</cstring>
- </property>
- <property name="margin">
- <number>0</number>
- </property>
- <property name="spacing">
- <number>6</number>
- </property>
- <widget class="TQRadioButton">
- <property name="name">
- <cstring>RadioButton1</cstring>
- </property>
- <property name="text">
- <string>Stars</string>
- </property>
- <property name="checked">
- <bool>true</bool>
- </property>
- </widget>
- <widget class="TQRadioButton">
- <property name="name">
- <cstring>RadioButton1_2</cstring>
- </property>
- <property name="text">
- <string>Flares</string>
- </property>
- </widget>
- </vbox>
- </widget>
- </grid>
- </widget>
- <widget class="TQWidget" row="0" column="1" rowspan="4" colspan="2">
- <property name="name">
- <cstring>preview</cstring>
- </property>
- </widget>
- <widget class="TQLabel" row="0" column="0">
- <property name="name">
- <cstring>TextLabel1</cstring>
- </property>
- <property name="text">
- <string>Particle size:</string>
- </property>
- </widget>
- </grid>
- </widget>
- </grid>
-</widget>
-<connections>
- <connection>
- <sender>RadioButton1_2</sender>
- <signal>pressed()</signal>
- <receiver>RadioButton1</receiver>
- <slot>toggle()</slot>
- </connection>
- <connection>
- <sender>RadioButton1</sender>
- <signal>pressed()</signal>
- <receiver>RadioButton1_2</receiver>
- <slot>toggle()</slot>
- </connection>
-</connections>
-<layoutdefaults spacing="6" margin="11"/>
-</UI>
diff --git a/kscreensaver/kdesavers/gravity.cpp b/kscreensaver/kdesavers/gravity.cpp
deleted file mode 100644
index 1f51a5a7..00000000
--- a/kscreensaver/kdesavers/gravity.cpp
+++ /dev/null
@@ -1,419 +0,0 @@
-//-----------------------------------------------------------------------------
-//
-// kgravity - Partical Gravity Screen Saver for KDE 2
-//
-// Copyright (c) Ian Reinhart Geiser 2001
-//
-// TDEConfig code and KScreenSaver "Setup..." improvements by
-// Nick Betcher <[email protected]> 2001
-//
-#include <stdlib.h>
-#include <tqlabel.h>
-#include <tqlayout.h>
-#include <kapplication.h>
-#include <klocale.h>
-#include <kconfig.h>
-#include <kcolordialog.h>
-#include <kbuttonbox.h>
-#include <kcolorbutton.h>
-#include "gravity.h"
-#include "gravity.moc"
-#ifdef TQ_WS_MACX
-#include <OpenGL/glu.h>
-#include <OpenGL/gl.h>
-#else
-#include <GL/glu.h>
-#include <GL/gl.h>
-#endif
-#include <tqimage.h>
-#include <kdebug.h>
-#include <tqpainter.h>
-#include <tqradiobutton.h>
-#include <tqspinbox.h>
-#include <kstandarddirs.h>
-#include <math.h>
-#include <kmessagebox.h>
-// libkscreensaver interface
-extern "C"
-{
- KDE_EXPORT const char *kss_applicationName = "kgravity.kss";
- KDE_EXPORT const char *kss_description = I18N_NOOP( "Particle Gravity Screen Saver" );
- KDE_EXPORT const char *kss_version = "2.2.0";
-
- KDE_EXPORT KScreenSaver *kss_create( WId id )
- {
- return new KGravitySaver( id );
- }
-
- KDE_EXPORT TQDialog *kss_setup()
- {
- return new KGravitySetup();
- }
-}
-
-//-----------------------------------------------------------------------------
-// dialog to setup screen saver parameters
-//
-KGravitySetup::KGravitySetup( TQWidget *parent, const char *name )
- : SetupUi( parent, name, TRUE )
-{
- readSettings();
-
- preview->setFixedSize( 220, 170 );
- preview->setBackgroundColor( black );
-#ifdef TQ_WS_X11
- preview->show(); // otherwise saver does not get correct size
-#endif
- saver = new KGravitySaver( preview->winId() );
-;
- connect( PushButton1, TQT_SIGNAL( clicked() ), TQT_SLOT( slotOkPressed() ) );
- connect( PushButton2, TQT_SIGNAL( clicked() ), TQT_SLOT( reject() ) );
- connect( PushButton3, TQT_SIGNAL( clicked() ), TQT_SLOT( aboutPressed() ) );
- connect( SpinBox1, TQT_SIGNAL( valueChanged(int)), saver, TQT_SLOT( updateSize(int)));
- connect( RadioButton1, TQT_SIGNAL( toggled(bool)), saver, TQT_SLOT( doStars(bool)));
-
-}
-
-KGravitySetup::~KGravitySetup()
-{
- delete saver;
-}
-
-// read settings from config file
-void KGravitySetup::readSettings()
-{
- TDEConfig config("kssgravityrc", false, false);
-
- config.setGroup( "Settings" );
- TQString boolval = config.readEntry( "Stars", "false" );
- if (boolval == "true") {
- RadioButton1->setDown(true);
- RadioButton1_2->setDown(false);
- } else {
- if (boolval == "false")
- {
- RadioButton1->setDown(false);
- RadioButton1_2->setDown(true);
- }
- }
-
- TQString starammount = config.readEntry("StarSize", "75");
- SpinBox1->setValue(starammount.toInt());
-
-}
-
-// Ok pressed - save settings and exit
-void KGravitySetup::slotOkPressed()
-{
- TDEConfig config("kssgravityrc", false, false);
- config.setGroup( "Settings" );
-
- if (RadioButton1->isOn() == true)
- {
- config.writeEntry( "Stars", "true" );
- } else {
- if (RadioButton1_2->isOn() == true)
- {
- config.writeEntry( "Stars", "false" );
- }
- }
- config.writeEntry( "StarSize", TQString::number(SpinBox1->value()) );
-
- config.sync();
-
- accept();
-}
-
-void KGravitySetup::aboutPressed()
-{
- KMessageBox::about(this,
- i18n("<h3>Gravity</h3>\n<p>Particle Gravity Screen Saver for TDE</p>\nCopyright (c) Ian Reinhart Geiser 2001<br>\n\n<p>TDEConfig code and KScreenSaver \"Setup...\" improvements by Nick Betcher <[email protected]> 2001</p>"));
-}
-//-----------------------------------------------------------------------------
-
-
-KGravitySaver::KGravitySaver( WId id ) : KScreenSaver( id )
-{
-
- kdDebug() << "Blank" << endl;
-
- timer = new TQTimer( this );
- timer->start( 25, TRUE );
- setBackgroundColor( black );
- erase();
- gravity = new Gravity();
- embed(gravity);
-#ifdef TQ_WS_X11
- gravity->show();
-#endif
- connect( timer, TQT_SIGNAL(timeout()), this, TQT_SLOT(blank()) );
-}
-
-KGravitySaver::~KGravitySaver()
-{
-
-}
-
-// read configuration settings from config file
-void KGravitySaver::readSettings()
-{
-// Please remove me
-
-}
-
-void KGravitySaver::blank()
-{
- // Play gravity
-
- gravity->updateGL();
- timer->start( 25, TRUE );
-
-}
-Gravity::Gravity( TQWidget * parent, const char * name) : TQGLWidget (parent,name)
-{
- rainbow=true;
- slowdown=2.0f;
- zoom=-50.0f;
- index=0;
- size = 3.95f;
-// obj = gluNewQuadric();
-
-// This has to be here because you can't update the gravity until 'gravity' is created!
- TDEConfig config("kssgravityrc", false, false);
- config.setGroup( "Settings" );
- TQString boolval = config.readEntry( "Stars", "false" );
- if (boolval == "true") {
- setStars(true);
- } else {
- if (boolval == "false")
- {
- setStars(false);
- }
- }
-
- TQString starammount = config.readEntry("StarSize", "75");
- float passvalue = (starammount.toInt() / 100.0);
- setSize(passvalue);
-
-}
-
-Gravity::~Gravity()
-{
- glDeleteTextures( 1, &texture[0] );
- gluDeleteQuadric(obj);
-}
-
-/** load the particle file */
-bool Gravity::loadParticle()
-{
- /* Status indicator */
- bool Status = TRUE;
- TQImage buf;
-
- kdDebug() << "Loading: " << locate("data", "kscreensaver/particle.png") << endl;
- if (buf.load( locate("data", "kscreensaver/particle.png") ) )
-
- {
- tex = convertToGLFormat(buf); // flipped 32bit RGBA
- kdDebug() << "Texture loaded: " << tex.numBytes () << endl;
- }
- else
- {
- TQImage dummy( 32, 32, 32 );
- dummy.fill( TQt::white.rgb() );
- buf = dummy;
- tex = convertToGLFormat( buf );
- }
-
- /* Set the status to true */
- //Status = TRUE;
- glGenTextures(1, &texture[0]); /* create three textures */
- glBindTexture(GL_TEXTURE_2D, texture[0]);
- /* use linear filtering */
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
- /* actually generate the texture */
- glTexImage2D(GL_TEXTURE_2D, 0, 4, tex.width(), tex.height(), 0,
- GL_RGBA, GL_UNSIGNED_BYTE, tex.bits());
-
-
-
- return Status;
-}
-/** setup the GL enviroment */
-void Gravity::initializeGL ()
-{
-
- kdDebug() << "InitGL" << endl;
-
- if (loadParticle()) // Jump To Texture Loading Routine
- {
- /* Enable smooth shading */
- glShadeModel( GL_SMOOTH );
-
- /* Set the background black */
- glClearColor( 0.0f, 0.0f, 0.0f, 0.0f );
-
- /* Depth buffer setup */
- glClearDepth( 1.0f );
-
- /* Enables Depth Testing */
- glDisable( GL_DEPTH_TEST );
-
- /* Enable Blending */
- glEnable( GL_BLEND );
- /* Type Of Blending To Perform */
- glBlendFunc( GL_SRC_ALPHA, GL_ONE );
-
-
- /* Really Nice Perspective Calculations */
- glHint( GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST );
- /* Really Nice Point Smoothing */
- glHint( GL_POINT_SMOOTH_HINT, GL_NICEST );
-
- /* Enable Texture Mapping */
- glEnable( GL_TEXTURE_2D );
- /* Select Our Texture */
- glBindTexture( GL_TEXTURE_2D, texture[0] );
-
- for (loop=0;loop<MAX_PARTICLES;loop++) // Initials All The Textures
- {
- buildParticle(loop);
- }
- }
- else
- exit(0);
-}
-/** resize the gl view */
-void Gravity::resizeGL ( int width, int height )
-{
- kdDebug() << "ResizeGL " << width << "," <<height<< endl;
- if (height==0) // Prevent A Divide By Zero By
- {
- height=1; // Making Height Equal One
- }
-
- glViewport(0,0,width,height); // Reset The Current Viewport
-
- glMatrixMode(GL_PROJECTION); // Select The Projection Matrix
- glLoadIdentity(); // Reset The Projection Matrix
-
- // Calculate The Aspect Ratio Of The Window
- gluPerspective(45.0f,(GLfloat)width/(GLfloat)height,0.1f,100.0f);
-
- glMatrixMode(GL_MODELVIEW); // Select The Modelview Matrix
- glLoadIdentity();
-}
-/** paint the GL view */
-void Gravity::paintGL ()
-{
- //kdDebug() << "PaintGL" << endl;
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // Clear Screen And Depth Buffer
- glLoadIdentity();
- // Reset The ModelView Matrix
- transIndex++;
- //glRotatef(transIndex, 1,0,0);
- //glRotatef(transIndex, 0,1,0);
- //glRotatef(transIndex, 0,0,1);
- float xmax = 5.0;
- float ymax = 5.0;
- glTranslatef( GLfloat(xmax*sin(3.14*transIndex/360)-xmax),
- GLfloat(ymax*cos(3.14*transIndex/360)-ymax),
- 0.0 );
- //glRotatef(transIndex, 0,GLfloat(zmax*cos(3.14*transIndex/360000)), GLfloat(zmax*cos(3.14*transIndex/360000)));
-
- for (loop=0;loop<MAX_PARTICLES;loop++) // Loop Through All The Particles
- {
- if (particle[loop].active) // If The Particle Is Active
- {
- float x=particle[loop].x; // Grab Our Particle X Position
- float y=particle[loop].y; // Grab Our Particle Y Position
- float z=particle[loop].z+zoom; // Particle Z Pos + Zoom
- /* Select Our Texture */
-
- /* Draw The Particle Using Our RGB Values,
- * Fade The Particle Based On It's Life
- */
- particle[loop].life=(particle[loop].index/particle[loop].indexo)*2.0f;
- glColor4f( particle[loop].r,
- particle[loop].g,
- particle[loop].b,
- particle[loop].life );
-
- /* Build Quad From A Triangle Strip */
- if( !stars )
- glBegin( GL_TRIANGLE_STRIP );
- else
- glBegin( GL_TRIANGLE_FAN );
- /* Top Right */
- glTexCoord2d( 1, 1 );
- glVertex3f( x + particle[loop].size, y + particle[loop].size, z );
- /* Top Left */
- glTexCoord2d( 0, 1 );
- glVertex3f( x - particle[loop].size, y + particle[loop].size, z );
- /* Bottom Right */
- glTexCoord2d( 1, 0 );
- glVertex3f( x + particle[loop].size, y - particle[loop].size, z );
- /* Bottom Left */
- glTexCoord2d( 0, 0 );
- glVertex3f( x - particle[loop].size, y - particle[loop].size, z );
- glEnd( );
- particle[loop].x=(particle[loop].xo*sin(particle[loop].index))*pow((double) particle[loop].index/particle[loop].indexo,(double) 8.0);
- particle[loop].y=(particle[loop].yo*sin(particle[loop].index))*pow((double) particle[loop].index/particle[loop].indexo,(double) 8.0);
- particle[loop].z=(particle[loop].zo*sin(particle[loop].index))*pow((double) particle[loop].index/particle[loop].indexo,(double) 8.0);
- particle[loop].index-=0.05;
- if (particle[loop].index<0.0f ) // If Particle Is Burned Out
- {
- buildParticle(loop);
- }
- // Lets stir some things up
- }
- }
-
- glFlush();
-}
-void Gravity::setSize( float newSize )
-{
- size = newSize;
-}
-void Gravity::setStars( bool doStars )
-{
- stars = doStars;
-}
-
-void KGravitySaver::updateSize(int newSize)
-{
- gravity->setSize(newSize/100);
-}
-void KGravitySaver::doStars(bool starState)
-{
- gravity->setStars(starState);
-}
-
-void Gravity::buildParticle(int loop)
-{
- GLfloat colors[12][3]=
- {{1.0f,0.5f,0.5f},{1.0f,0.75f,0.5f},{1.0f,1.0f,0.5f},{0.75f,1.0f,0.5f},
- {0.5f,1.0f,0.5f},{0.5f,1.0f,0.75f},{0.5f,1.0f,1.0f},{0.5f,0.75f,1.0f},
- {0.5f,0.5f,1.0f},{0.75f,0.5f,1.0f},{1.0f,0.5f,1.0f},{1.0f,0.5f,0.75f}};
- col = ( ++col ) % 12;
- particle[loop].active=true;
- particle[loop].index=TDEApplication::random()%100;
- particle[loop].indexo=particle[loop].index;
- particle[loop].fade=float(TDEApplication::random()%100)/1000.0f+0.003f; // Random Fade Value
- particle[loop].r=colors[col][0]; // Select Red From Color Table
- particle[loop].g=colors[col][1]; // Select Green From Color Table
- particle[loop].b=colors[col][2]; // Select Blue From Color Table
- particle[loop].size=size;
- particle[loop].x = float(TDEApplication::random()%100-50)*4.0;
- particle[loop].y = float(TDEApplication::random()%20-10)*4.0;
- particle[loop].z = float(TDEApplication::random()%100-50)*4.0;
- particle[loop].xo = particle[loop].x;
- if ((1+(TDEApplication::random() % 10) > 5))
- particle[loop].yo = particle[loop].y;
- else
- particle[loop].yo = 0.0;
- particle[loop].zo = particle[loop].z;
-
-}
-
diff --git a/kscreensaver/kdesavers/gravity.h b/kscreensaver/kdesavers/gravity.h
deleted file mode 100644
index 0a1130bb..00000000
--- a/kscreensaver/kdesavers/gravity.h
+++ /dev/null
@@ -1,144 +0,0 @@
-///-----------------------------------------------------------------------------
-//
-// kgravity - Partical gravity Screen Saver for KDE 2
-//
-// Copyright (c) Ian Reinhart Geiser 2001
-//
-/////
-//NOTE:
-// The base particle engine did not come from me, it was designed by Jeff Molofee <[email protected]>
-// I did some extensive modifications to make it work with QT's OpenGL but the base principal is about
-// the same.
-////
-
-#ifndef __GRAVITY_H__
-#define __GRAVITY_H__
-
-#include <tqdialog.h>
-#include <tqgl.h>
-#ifdef TQ_WS_MACX
-#include <OpenGL/glu.h>
-#include <OpenGL/gl.h>
-#else
-#include <GL/glu.h>
-#include <GL/gl.h>
-#endif
-#include <kscreensaver.h>
-#include <tqtimer.h>
-#include <tqimage.h>
-#include "gravitycfg.h"
-#include <kinstance.h>
-#include <tqfile.h>
-#include <tqtextstream.h>
-
-#define MAX_PARTICLES 100
-
-
-class Gravity : public TQGLWidget
-{
-Q_OBJECT
-
- class particles // Create A Structure For Particle
- {
- public:
- bool active; // Active (Yes/No)
- float life; // Particle Life
- float fade; // Fade Speed
- float r; // Red Value
- float g; // Green Value
- float b; // Blue Value
- float x; // X Position
- float y; // Y Position
- float z; // Z Position
- float xo; // X Position
- float yo; // Y Position
- float zo; // Z Position
- float index; // Index
- float indexo;
- float size; // Particle Size
- };
-
-public:
- Gravity( TQWidget * parent=0, const char * name=0 );
- ~Gravity();
- void setSize( float newSize );
- void setStars( bool doStars );
-protected:
- /** paint the GL view */
- void paintGL ();
- /** resize the gl view */
- void resizeGL ( int w, int h );
- /** setup the GL enviroment */
- void initializeGL ();
- void buildParticle(int loop);
-
-private:
- /** load the partical file */
- bool loadParticle();
-
- particles particle[MAX_PARTICLES];
-
-
- bool rainbow; // Rainbow Mode?
- bool sp; // Spacebar Pressed?
- bool rp; // Enter Key Pressed?
- float slowdown; // Slow Down Particles
- float xspeed; // Base X Speed (To Allow Keyboard Direction Of Tail)
- float yspeed; // Base Y Speed (To Allow Keyboard Direction Of Tail)
- float zoom; // Used To Zoom Out
- float size;
- float stars;
- GLuint loop; // Misc Loop Variable
- GLuint col; // Current Color Selection
- GLuint delay; // Rainbow Effect Delay
- GLuint texture[1];
- TQImage tex;
- float index;
- float transIndex;
- GLfloat scale;
- GLUquadricObj *obj;
-};
-
-class KGravitySaver : public KScreenSaver
-{
-Q_OBJECT
-
-public:
- KGravitySaver( WId drawable );
- virtual ~KGravitySaver();
- void readSettings();
-public slots:
- void blank();
- void updateSize(int newSize);
- void doStars(bool starState);
-// void loadTextures(bool textures);
-private:
- Gravity *gravity;
- TQTimer *timer;
-};
-
-class KGravitySetup : public SetupUi
-{
- Q_OBJECT
-
-public:
- KGravitySetup( TQWidget *parent = NULL, const char *name = NULL );
- ~KGravitySetup();
-
-protected:
- void readSettings();
-
-private slots:
- void slotOkPressed();
- void aboutPressed();
-private:
- KGravitySaver *saver;
- float size;
- float stars;
- float zoom;
- float speed;
-};
-
-#endif
-
-
diff --git a/kscreensaver/kdesavers/gravitycfg.ui b/kscreensaver/kdesavers/gravitycfg.ui
deleted file mode 100644
index 2d809c1f..00000000
--- a/kscreensaver/kdesavers/gravitycfg.ui
+++ /dev/null
@@ -1,192 +0,0 @@
-<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
-<class>SetupUi</class>
-<widget class="TQDialog">
- <property name="name">
- <cstring>SetupUi</cstring>
- </property>
- <property name="geometry">
- <rect>
- <x>0</x>
- <y>0</y>
- <width>400</width>
- <height>209</height>
- </rect>
- </property>
- <property name="minimumSize">
- <size>
- <width>400</width>
- <height>209</height>
- </size>
- </property>
- <property name="baseSize">
- <size>
- <width>400</width>
- <height>250</height>
- </size>
- </property>
- <property name="caption">
- <string>Gravity Setup</string>
- </property>
- <grid>
- <property name="name">
- <cstring>unnamed</cstring>
- </property>
- <property name="margin">
- <number>11</number>
- </property>
- <property name="spacing">
- <number>6</number>
- </property>
- <widget class="TQLayoutWidget" row="0" column="0">
- <property name="name">
- <cstring>Layout4</cstring>
- </property>
- <grid>
- <property name="name">
- <cstring>unnamed</cstring>
- </property>
- <property name="margin">
- <number>0</number>
- </property>
- <property name="spacing">
- <number>6</number>
- </property>
- <widget class="TQCheckBox" row="3" column="0">
- <property name="name">
- <cstring>CheckBox1</cstring>
- </property>
- <property name="text">
- <string>Use textures</string>
- </property>
- </widget>
- <widget class="TQPushButton" row="4" column="2">
- <property name="name">
- <cstring>PushButton3</cstring>
- </property>
- <property name="text">
- <string>&amp;About</string>
- </property>
- </widget>
- <widget class="TQSpinBox" row="1" column="0">
- <property name="name">
- <cstring>SpinBox1</cstring>
- </property>
- <property name="maxValue">
- <number>500</number>
- </property>
- <property name="minValue">
- <number>25</number>
- </property>
- <property name="lineStep">
- <number>10</number>
- </property>
- <property name="value">
- <number>75</number>
- </property>
- </widget>
- <widget class="TQPushButton" row="4" column="1">
- <property name="name">
- <cstring>PushButton2</cstring>
- </property>
- <property name="text">
- <string>&amp;Cancel</string>
- </property>
- </widget>
- <widget class="TQPushButton" row="4" column="0">
- <property name="name">
- <cstring>PushButton1</cstring>
- </property>
- <property name="text">
- <string>&amp;OK</string>
- </property>
- <property name="default">
- <bool>true</bool>
- </property>
- </widget>
- <widget class="TQGroupBox" row="2" column="0">
- <property name="name">
- <cstring>GroupBox1</cstring>
- </property>
- <property name="title">
- <string>Shapes</string>
- </property>
- <grid>
- <property name="name">
- <cstring>unnamed</cstring>
- </property>
- <property name="margin">
- <number>11</number>
- </property>
- <property name="spacing">
- <number>6</number>
- </property>
- <widget class="TQLayoutWidget" row="0" column="0">
- <property name="name">
- <cstring>Layout3</cstring>
- </property>
- <vbox>
- <property name="name">
- <cstring>unnamed</cstring>
- </property>
- <property name="margin">
- <number>0</number>
- </property>
- <property name="spacing">
- <number>6</number>
- </property>
- <widget class="TQRadioButton">
- <property name="name">
- <cstring>RadioButton1</cstring>
- </property>
- <property name="text">
- <string>Stars</string>
- </property>
- <property name="checked">
- <bool>true</bool>
- </property>
- </widget>
- <widget class="TQRadioButton">
- <property name="name">
- <cstring>RadioButton1_2</cstring>
- </property>
- <property name="text">
- <string>Flares</string>
- </property>
- </widget>
- </vbox>
- </widget>
- </grid>
- </widget>
- <widget class="TQWidget" row="0" column="1" rowspan="4" colspan="2">
- <property name="name">
- <cstring>preview</cstring>
- </property>
- </widget>
- <widget class="TQLabel" row="0" column="0">
- <property name="name">
- <cstring>TextLabel1</cstring>
- </property>
- <property name="text">
- <string>Particle size:</string>
- </property>
- </widget>
- </grid>
- </widget>
- </grid>
-</widget>
-<connections>
- <connection>
- <sender>RadioButton1_2</sender>
- <signal>pressed()</signal>
- <receiver>RadioButton1</receiver>
- <slot>toggle()</slot>
- </connection>
- <connection>
- <sender>RadioButton1</sender>
- <signal>pressed()</signal>
- <receiver>RadioButton1_2</receiver>
- <slot>toggle()</slot>
- </connection>
-</connections>
-<layoutdefaults spacing="6" margin="11"/>
-</UI>
diff --git a/kscreensaver/kdesavers/image.png b/kscreensaver/kdesavers/image.png
deleted file mode 100644
index 859645da..00000000
--- a/kscreensaver/kdesavers/image.png
+++ /dev/null
Binary files differ
diff --git a/kscreensaver/kdesavers/kclock.cpp b/kscreensaver/kdesavers/kclock.cpp
deleted file mode 100644
index 5201f222..00000000
--- a/kscreensaver/kdesavers/kclock.cpp
+++ /dev/null
@@ -1,588 +0,0 @@
-// $Id$
-//
-// kclock - Clock screen saver for KDE
-// Copyright (c) 2003 Melchior FRANZ
-//
-// License: GPL v2
-// Author: Melchior FRANZ <[email protected]>
-// Dependencies: libart_lgpl_2 http://www.levien.com/libart/
-//
-#include <stdlib.h>
-#include <string.h>
-
-#include <tqcheckbox.h>
-#include <tqcolor.h>
-#include <tqdatetime.h>
-#include <tqgroupbox.h>
-#include <tqhbox.h>
-#include <tqimage.h>
-#include <tqlabel.h>
-#include <tqlayout.h>
-#include <tqpainter.h>
-#include <tqslider.h>
-
-#include <kapplication.h>
-#include <kcolorbutton.h>
-#include <kconfig.h>
-#include <kglobal.h>
-#include <klocale.h>
-#include <kmessagebox.h>
-
-#include <libart_lgpl/art_affine.h>
-#include <libart_lgpl/art_misc.h>
-#include <libart_lgpl/art_rgb.h>
-#include <libart_lgpl/art_rgb_svp.h>
-#include <libart_lgpl/art_svp_vpath.h>
-#include <libart_lgpl/art_svp_vpath_stroke.h>
-#include <libart_lgpl/art_vpath.h>
-
-#include "kclock.h"
-#include "kclock.moc"
-
-
-const int COLOR_BUTTON_WIDTH = 80;
-const int TIMER_INTERVALL = 100;
-const int MAX_CLOCK_SIZE = 10;
-const int DEFAULT_CLOCK_SIZE = 3;
-const bool DEFAULT_KEEP_CENTERED = false;
-
-
-
-
-extern "C" {
- KDE_EXPORT const char *kss_applicationName = "kclock.kss";
- KDE_EXPORT const char *kss_description = I18N_NOOP("Clock");
- KDE_EXPORT const char *kss_version = "1.0";
-
- KDE_EXPORT KScreenSaver *kss_create(WId id) {
- return new KClockSaver(id);
- }
-
- KDE_EXPORT TQDialog *kss_setup() {
- return new KClockSetup();
- }
-}
-
-
-
-
-//-----------------------------------------------------------------------------
-
-KClockSetup::KClockSetup(TQWidget *parent, const char *name)
- : KDialogBase(parent, name, true, i18n( "Setup Clock Screen Saver" ),
- Ok|Cancel|Help, Ok, true),
- m_saver(0)
-{
- readSettings();
-
- setButtonText( Help, i18n( "A&bout" ) );
- TQWidget *main = makeMainWidget();
-
- TQVBoxLayout *top = new TQVBoxLayout(main, 0, spacingHint());
-
- TQHBoxLayout *hbox = new TQHBoxLayout;
- top->addLayout( hbox );
-
- TQGroupBox *colgroup = new TQGroupBox(i18n("Colors"), main);
- colgroup->setColumnLayout( 0,Qt::Horizontal );
- TQGridLayout *grid = new TQGridLayout( colgroup->layout(),
- 5, 2, spacingHint() );
-
- TQLabel *label = new TQLabel(i18n("&Hour-hand:"), colgroup);
- KColorButton *colorButton = new KColorButton(m_hourColor, colgroup);
- colorButton->setFixedWidth(COLOR_BUTTON_WIDTH);
- label->setBuddy(colorButton);
- connect(colorButton, TQT_SIGNAL(changed(const TQColor &)),
- TQT_SLOT(slotHourColor(const TQColor &)));
- grid->addWidget( label, 1, 1 );
- grid->addWidget( colorButton, 1, 2 );
-
- label = new TQLabel(i18n("&Minute-hand:"), colgroup);
- colorButton = new KColorButton(m_minColor, colgroup);
- colorButton->setFixedWidth(COLOR_BUTTON_WIDTH);
- label->setBuddy(colorButton);
- connect(colorButton, TQT_SIGNAL(changed(const TQColor &)),
- TQT_SLOT(slotMinColor(const TQColor &)));
- grid->addWidget( label, 2, 1 );
- grid->addWidget( colorButton, 2, 2 );
-
- label = new TQLabel(i18n("&Second-hand:"), colgroup);
- colorButton = new KColorButton(m_secColor, colgroup);
- colorButton->setFixedWidth(COLOR_BUTTON_WIDTH);
- label->setBuddy(colorButton);
- connect(colorButton, TQT_SIGNAL(changed(const TQColor &)),
- TQT_SLOT(slotSecColor(const TQColor &)));
- grid->addWidget( label, 3, 1 );
- grid->addWidget( colorButton, 3, 2 );
-
- label = new TQLabel(i18n("Scal&e:"), colgroup);
- colorButton = new KColorButton(m_scaleColor, colgroup);
- colorButton->setFixedWidth(COLOR_BUTTON_WIDTH);
- label->setBuddy(colorButton);
- connect(colorButton, TQT_SIGNAL(changed(const TQColor &)),
- TQT_SLOT(slotScaleColor(const TQColor &)));
- grid->addWidget( label, 4, 1 );
- grid->addWidget( colorButton, 4, 2 );
-
- label = new TQLabel(i18n("&Background:"), colgroup);
- colorButton = new KColorButton(m_bgndColor, colgroup);
- colorButton->setFixedWidth(COLOR_BUTTON_WIDTH);
- label->setBuddy(colorButton);
- connect(colorButton, TQT_SIGNAL(changed(const TQColor &)),
- TQT_SLOT(slotBgndColor(const TQColor &)));
- grid->addWidget( label, 5, 1 );
- grid->addWidget( colorButton, 5, 2 );
-
- hbox->addWidget(colgroup);
-
- TQWidget *m_preview = new TQWidget(main);
- m_preview->setFixedSize(220, 165);
- m_preview->show();
- m_saver = new KClockSaver(m_preview->winId());
- hbox->addWidget(m_preview);
-
- label = new TQLabel( i18n( "Si&ze:" ), main );
- top->addWidget( label );
- TQSlider *qs = new TQSlider(0, MAX_CLOCK_SIZE, 1, m_size,Qt::Horizontal, main);
- label->setBuddy( qs );
- qs->setTickInterval(1);
- qs->setTickmarks(TQSlider::Below);
- connect(qs, TQT_SIGNAL(valueChanged(int)), this, TQT_SLOT(slotSliderMoved(int)));
- top->addWidget( qs );
-
- bool rtl = kapp->reverseLayout();
- TQHBox *qsscale = new TQHBox(main);
- label = new TQLabel(i18n("Small"), qsscale);
- label->setAlignment(rtl ? AlignRight : AlignLeft);
- label = new TQLabel(i18n("Medium"), qsscale);
- label->setAlignment(AlignHCenter);
- label = new TQLabel(i18n("Big"), qsscale);
- label->setAlignment(rtl ? AlignLeft : AlignRight);
- top->addWidget(qsscale);
-
- TQCheckBox *keepCentered = new TQCheckBox(i18n("&Keep clock centered"), main);
- keepCentered->setChecked(m_keepCentered);
- connect(keepCentered, TQT_SIGNAL(stateChanged(int)), TQT_SLOT(slotKeepCenteredChanged(int)));
- top->addWidget(keepCentered);
- top->addStretch();
-}
-
-KClockSetup::~KClockSetup()
-{
- delete m_saver;
-}
-
-void KClockSetup::readSettings()
-{
- TDEConfig *config = TDEGlobal::config();
-
- config->setGroup("Settings");
- m_keepCentered = config->readBoolEntry("KeepCentered", DEFAULT_KEEP_CENTERED);
- m_size = config->readUnsignedNumEntry("Size", DEFAULT_CLOCK_SIZE);
- if (m_size > MAX_CLOCK_SIZE)
- m_size = MAX_CLOCK_SIZE;
-
- config->setGroup("Colors");
- TQColor c = TQt::black;
- m_bgndColor = config->readColorEntry("Background", &c);
-
- c = TQt::white;
- m_scaleColor = config->readColorEntry("Scale", &c);
- m_hourColor = config->readColorEntry("HourHand", &c);
- m_minColor = config->readColorEntry("MinuteHand", &c);
-
- c = TQt::red;
- m_secColor = config->readColorEntry("SecondHand", &c);
-
- if (m_saver) {
- m_saver->setBgndColor(m_bgndColor);
- m_saver->setScaleColor(m_scaleColor);
- m_saver->setHourColor(m_hourColor);
- m_saver->setMinColor(m_minColor);
- m_saver->setSecColor(m_secColor);
- }
-}
-
-
-void KClockSetup::slotOk()
-{
- TDEConfig *config = TDEGlobal::config();
- config->setGroup("Settings");
- config->writeEntry("Size", m_size);
- config->writeEntry("KeepCentered", m_keepCentered);
-
- config->setGroup("Colors");
- config->writeEntry("Background", m_bgndColor);
- config->writeEntry("Scale", m_scaleColor);
- config->writeEntry("HourHand", m_hourColor);
- config->writeEntry("MinuteHand", m_minColor);
- config->writeEntry("SecondHand", m_secColor);
- config->sync();
- accept();
-}
-
-
-void KClockSetup::slotHelp()
-{
- KMessageBox::about(this, "<qt>" + i18n(
- "Clock Screen Saver<br>"
- "Version 1.0<br>"
- "<nobr>Melchior FRANZ (c) 2003</nobr>") +
- "<br><a href=\"mailto:[email protected]\">[email protected]</a>"
- "</qt>", TQString(), KMessageBox::AllowLink);
-}
-
-
-void KClockSetup::slotBgndColor(const TQColor &color)
-{
- m_bgndColor = color;
- if (m_saver)
- m_saver->setBgndColor(m_bgndColor);
-}
-
-
-void KClockSetup::slotScaleColor(const TQColor &color)
-{
- m_scaleColor = color;
- if (m_saver)
- m_saver->setScaleColor(m_scaleColor);
-}
-
-
-void KClockSetup::slotHourColor(const TQColor &color)
-{
- m_hourColor = color;
- if (m_saver)
- m_saver->setHourColor(m_hourColor);
-}
-
-
-void KClockSetup::slotMinColor(const TQColor &color)
-{
- m_minColor = color;
- if (m_saver)
- m_saver->setMinColor(m_minColor);
-}
-
-
-void KClockSetup::slotSecColor(const TQColor &color)
-{
- m_secColor = color;
- if (m_saver)
- m_saver->setSecColor(m_secColor);
-}
-
-
-void KClockSetup::slotSliderMoved(int v)
-{
- if (m_saver)
- m_saver->restart(m_size = v);
-}
-
-
-void KClockSetup::slotKeepCenteredChanged(int c)
-{
- if (m_saver)
- m_saver->setKeepCentered(m_keepCentered = c);
-}
-
-
-
-
-
-//-----------------------------------------------------------------------------
-
-KClockPainter::KClockPainter(int width, int height)
- : m_width(width),
- m_height(height)
-{
- m_buf = new TQ_UINT8[m_width * m_height * 3];
- // build Cartesian coordinate system ranging from -1000 to +1000;
- // points with positive x and y are in the top right quarter
- m_matrix[0] = m_width / 2000.0;
- m_matrix[1] = 0;
- m_matrix[2] = 0;
- m_matrix[3] = m_height / -2000.0;
- m_matrix[4] = m_width / 2.0;
- m_matrix[5] = m_height / 2.0;
-}
-
-
-KClockPainter::~KClockPainter()
-{
- delete[] m_buf;
-}
-
-
-void KClockPainter::copy(KClockPainter *p)
-{
- memcpy(m_buf, p->image(), m_width * m_height * 3);
-}
-
-
-void KClockPainter::drawToImage(TQImage *q, int xoffs = 0, int yoffs = 0)
-{
- unsigned char *src = (unsigned char *)image();
- for (int y = 0; y < m_height; y++) {
- TQRgb *dest = reinterpret_cast<TQRgb *>(q->scanLine(y + yoffs)) + xoffs;
- for (int x = 0; x < m_width; x++, src += 3)
- *dest++ = tqRgba(src[0], src[1], src[2], 255);
- }
-}
-
-
-void KClockPainter::setColor(const TQColor &c)
-{
- m_color = (c.red() << 24) | (c.green() << 16) | (c.blue() << 8) | 255;
-}
-
-
-void KClockPainter::setShadowColor(const TQColor &c)
-{
- m_shadow = (c.red() << 24) | (c.green() << 16) | (c.blue() << 8) | 255;
-}
-
-
-void KClockPainter::fill(const TQColor &c)
-{
- art_rgb_fill_run(m_buf, c.red(), c.green(), c.blue(), m_width * m_height);
-}
-
-
-void KClockPainter::drawRadial(double alpha, double r0, double r1, double width)
-{
- ArtVpath *vx, *v = art_new(ArtVpath, 3);
- v[0].code = ART_MOVETO_OPEN;
- v[0].x = r0;
- v[0].y = 0;
- v[1].code = ART_LINETO;
- v[1].x = r1;
- v[1].y = 0;
- v[2].code = ART_END;
-
- double m[6] = {0, 0, 0, 0, 0, 0};
- art_affine_rotate(m, 90 - alpha);
- vx = art_vpath_affine_transform(v, m);
- art_free(v);
- v = art_vpath_affine_transform(vx, m_matrix);
- art_free(vx);
-
- double w = width * m_matrix[0];
- if (w < 1.0)
- w = 1.0;
-
- ArtSVP *path = art_svp_vpath_stroke(v, ART_PATH_STROKE_JOIN_MITER,
- ART_PATH_STROKE_CAP_BUTT, w, 4, .5);
- art_rgb_svp_alpha(path, 0, 0, m_width, m_height, m_color, m_buf, 3 * m_width, 0);
- art_svp_free(path);
- art_free(v);
-}
-
-
-void KClockPainter::drawDisc(double r)
-{
- ArtVpath *v, *vx = art_vpath_new_circle(0, 0, r);
- v = art_vpath_affine_transform(vx, m_matrix);
- art_free(vx);
-
- ArtSVP *path = art_svp_from_vpath(v);
- art_rgb_svp_alpha(path, 0, 0, m_width, m_height, m_color, m_buf, 3 * m_width, 0);
- art_svp_free(path);
-
- path = art_svp_vpath_stroke(v, ART_PATH_STROKE_JOIN_MITER,
- ART_PATH_STROKE_CAP_BUTT, 2, 4, .5);
- art_free(v);
-
- art_rgb_svp_alpha(path, 0, 0, m_width, m_height, m_color, m_buf, 3 * m_width, 0);
- art_svp_free(path);
-}
-
-
-void KClockPainter::drawHand(const TQColor &c, double angle, double length,
- double width, bool disc = true)
-{
- const double shadow_width = 1.0;
- setColor(m_shadow);
- if (disc)
- drawDisc(width * 1.3 + shadow_width);
- drawRadial(angle, .75 * width, length + shadow_width, width + shadow_width);
-
- setColor(c);
- if (disc)
- drawDisc(width * 1.3);
- drawRadial(angle, .75 * width, length, width);
-}
-
-
-
-
-
-
-//-----------------------------------------------------------------------------
-
-KClockSaver::KClockSaver(WId id)
- : KScreenSaver(id),
- m_showSecond(true)
-{
- readSettings();
- setBackgroundColor(m_bgndColor);
- connect(&m_timer, TQT_SIGNAL(timeout()), TQT_SLOT(slotTimeout()));
- start(m_size);
- m_timer.start(TIMER_INTERVALL);
-}
-
-
-KClockSaver::~KClockSaver()
-{
- m_timer.stop();
- stop();
-}
-
-
-void KClockSaver::start(int size)
-{
- m_diameter = int(TQMIN(width(), height()) * (size + 4) / 14.0);
- m_x = (width() - m_diameter) / 2;
- m_y = (height() - m_diameter) / 2;
-
- m_image = new TQImage(m_diameter, m_diameter, 32);
- m_scale = new KClockPainter(m_diameter, m_diameter);
- m_clock = new KClockPainter(m_diameter, m_diameter);
-
- m_clock->setShadowColor(tqRgb((m_bgndColor.red() + m_scaleColor.red()) / 2,
- (m_bgndColor.green() + m_scaleColor.green()) / 2,
- (m_bgndColor.blue() + m_scaleColor.blue()) / 2));
- drawScale();
- forceRedraw();
-}
-
-
-void KClockSaver::stop()
-{
- delete m_clock;
- delete m_scale;
- delete m_image;
-}
-
-
-void KClockSaver::restart(int size)
-{
- m_timer.stop();
- stop();
- start(size);
- drawScale();
- m_timer.start(TIMER_INTERVALL);
-}
-
-
-void KClockSaver::setKeepCentered(bool b)
-{
- m_keepCentered = b;
- if (b) {
- m_x = (width() - m_diameter) / 2;
- m_y = (height() - m_diameter) / 2;
- }
- forceRedraw();
-}
-
-
-void KClockSaver::readSettings()
-{
- TDEConfig *config = TDEGlobal::config();
-
- config->setGroup("Settings");
- m_keepCentered = config->readBoolEntry("KeepCentered", DEFAULT_KEEP_CENTERED);
- m_size = config->readUnsignedNumEntry("Size", DEFAULT_CLOCK_SIZE);
- if (m_size > MAX_CLOCK_SIZE)
- m_size = MAX_CLOCK_SIZE;
-
- config->setGroup("Colors");
- TQColor c = TQt::black;
- m_bgndColor = config->readColorEntry("Background", &c);
-
- c = TQt::white;
- m_scaleColor = config->readColorEntry("Scale", &c);
- m_hourColor = config->readColorEntry("HourHand", &c);
- m_minColor = config->readColorEntry("MinuteHand", &c);
-
- c = TQt::red;
- m_secColor = config->readColorEntry("SecondHand", &c);
-}
-
-
-void KClockSaver::drawScale()
-{
- m_scale->fill(m_bgndColor);
- m_scale->setColor(m_scaleColor);
-
- for (int i = 0; i < 360; i += 6)
- if (i % 30)
- m_scale->drawRadial(i, 920, 980, 15);
- else
- m_scale->drawRadial(i, 825, 980, 40);
-
- forceRedraw();
-}
-
-
-void KClockSaver::drawClock()
-{
- double hour_angle = m_hour * 30.0 + m_minute * .5;
- double minute_angle = m_minute * 6.0 + m_second * .1;
- double second_angle = m_second * 6.0;
-
- m_clock->copy(m_scale);
- m_clock->drawHand(m_hourColor, hour_angle, 600, 55, false);
- m_clock->drawHand(m_minColor, minute_angle, 900, 40);
-
- if (m_showSecond)
- m_clock->drawHand(m_secColor, second_angle, 900, 30);
-}
-
-
-void KClockSaver::slotTimeout()
-{
- TQTime t = TQTime::currentTime();
- int s = t.second();
- if (s == m_second)
- return;
-
- m_second = m_showSecond ? s : 0;
- m_hour = t.hour();
- m_minute = t.minute();
-
- drawClock();
- TQPainter p(this);
-
- if (width() < 256) {
- // intended for the control module preview: always fill the whole area
- TQImage *img = new TQImage(width(), height(), 32);
- img->fill(tqRgb(m_bgndColor.red(), m_bgndColor.green(), m_bgndColor.blue()));
- m_clock->drawToImage(img, m_x, m_y);
- p.drawImage(0, 0, *img);
- delete img;
- } else {
- m_clock->drawToImage(m_image);
- p.drawImage(m_x, m_y, *m_image);
- }
-
- if (!m_keepCentered) {
- static int xstep = 1;
- static int ystep = -1;
- int i;
-
- m_x += xstep;
- if (m_x <= 0)
- m_x = 0, xstep = 1;
- else if (m_x >= (i = width() - m_diameter))
- m_x = i, xstep = -1;
-
- m_y += ystep;
- if (m_y <= 0)
- m_y = 0, ystep = 1;
- else if (m_y >= (i = height() - m_diameter))
- m_y = i, ystep = -1;
- }
-}
-
-
diff --git a/kscreensaver/kdesavers/kclock.h b/kscreensaver/kdesavers/kclock.h
deleted file mode 100644
index 1ec0103d..00000000
--- a/kscreensaver/kdesavers/kclock.h
+++ /dev/null
@@ -1,132 +0,0 @@
-// $Id$
-//
-// kclock - Clock screen saver for KDE
-// Copyright (c) 2003 Melchior FRANZ
-//
-// License: GPL v2
-// Author: Melchior FRANZ <[email protected]>
-// Dependencies: libart_lgpl_2 http://www.levien.com/libart/
-//
-#ifndef __KCLOCK_H__
-#define __KCLOCK_H__
-
-#include <tqtimer.h>
-#include <kdialogbase.h>
-#include <kscreensaver.h>
-
-
-class KClockPainter
-{
- int m_width;
- int m_height;
- TQ_UINT8 *m_buf;
- double m_matrix[6];
- TQ_UINT32 m_color;
- TQ_UINT32 m_shadow;
-
- public:
- KClockPainter(int width, int height);
- ~KClockPainter();
- void copy(KClockPainter *p);
- void drawToImage(TQImage *q, int x, int y);
- inline int width() { return m_width; }
- inline int height() { return m_height; }
- inline void *image() { return (void *)m_buf; }
- void setColor(const TQColor &color);
- void setShadowColor(const TQColor &color);
- void fill(const TQColor &color);
- void drawRadial(double alpha, double r0, double r1, double width);
- void drawDisc(double radius);
- void drawHand(const TQColor &color, double angle, double length,
- double width, bool disc);
-};
-
-
-class KClockSaver : public KScreenSaver
-{
- Q_OBJECT
-
- public:
- KClockSaver(WId id);
- virtual ~KClockSaver();
- inline void setBgndColor(const TQColor &c) { m_bgndColor = c; drawScale(); setBackgroundColor(c); };
- inline void setScaleColor(const TQColor &c) { m_scaleColor = c; drawScale(); };
- inline void setHourColor(const TQColor &c) { m_hourColor = c; forceRedraw(); };
- inline void setMinColor(const TQColor &c) { m_minColor = c; forceRedraw(); };
- inline void setSecColor(const TQColor &c) { m_secColor = c; forceRedraw(); };
- void setKeepCentered(bool b);
- void restart(int siz);
- inline void forceRedraw() { m_second = -1; }
-
- private:
- void readSettings();
- void drawScale();
- void drawClock();
- void start(int size);
- void stop();
-
- protected slots:
- void slotTimeout();
-
- protected:
- TQTimer m_timer;
- TQImage *m_image;
- KClockPainter *m_scale;
- KClockPainter *m_clock;
-
- int m_x;
- int m_y;
- int m_diameter;
- int m_size;
- bool m_showSecond;
- bool m_keepCentered;
- int m_hour;
- int m_minute;
- int m_second;
-
- TQColor m_bgndColor;
- TQColor m_scaleColor;
- TQColor m_hourColor;
- TQColor m_minColor;
- TQColor m_secColor;
-};
-
-
-class KClockSetup : public KDialogBase
-{
- Q_OBJECT
-
- public:
- KClockSetup(TQWidget *parent = 0, const char *name = 0);
- ~KClockSetup();
- protected:
- void readSettings();
-
- private slots:
- void slotOk();
- void slotHelp();
-
- void slotBgndColor(const TQColor &);
- void slotScaleColor(const TQColor &);
- void slotHourColor(const TQColor &);
- void slotMinColor(const TQColor &);
- void slotSecColor(const TQColor &);
- void slotSliderMoved(int);
- void slotKeepCenteredChanged(int);
-
- private:
- KClockSaver *m_saver;
-
- TQColor m_bgndColor;
- TQColor m_scaleColor;
- TQColor m_hourColor;
- TQColor m_minColor;
- TQColor m_secColor;
-
- int m_size;
- bool m_keepCentered;
-};
-
-#endif
-
-
diff --git a/kscreensaver/kdesavers/kscience.png b/kscreensaver/kdesavers/kscience.png
deleted file mode 100644
index 19de5909..00000000
--- a/kscreensaver/kdesavers/kscience.png
+++ /dev/null
Binary files differ
diff --git a/kscreensaver/kdesavers/kvm.cpp b/kscreensaver/kdesavers/kvm.cpp
deleted file mode 100644
index fbbfdd31..00000000
--- a/kscreensaver/kdesavers/kvm.cpp
+++ /dev/null
@@ -1,384 +0,0 @@
-/*-
- * kvm.cpp - The Vm screensaver for KDE
- * Copyright (c) 2000 by Artur Rataj
- * This file is distributed under the terms of the GNU General Public License
- *
- * This file is partially based on kmatrix screen saver -- original copyright follows:
- * kmatrix.c - The Matrix screensaver for KDE
- * by Eric Plante Copyright (c) 1999
- * Distributed under the Gnu Public License
- *
- * Much of this code taken from xmatrix.c from xscreensaver;
- * original copyright follows:
- * xscreensaver, Copyright (c) 1999 Jamie Zawinski <[email protected]>
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation. No representations are made about the suitability of this
- * software for any purpose. It is provided "as is" without express or
- * implied warranty.
- *
- */
-// layout management added 1998/04/19 by Mario Weilguni <[email protected]>
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdio.h>
-#include <stdlib.h>
-
-/* for AIX at least */
-#include <time.h>
-
-#include <tqcolor.h>
-#include <tqlabel.h>
-#include <tqlayout.h>
-#include <tqslider.h>
-#include <tqpainter.h>
-#include <tqbitmap.h>
-
-#include <kapplication.h>
-#include <kconfig.h>
-#include <klocale.h>
-#include <kglobal.h>
-#include <kmessagebox.h>
-
-#ifdef DEBUG_MEM
-#include <mcheck.h>
-#endif
-
-#include "kvm.h"
-
-#include "vm.xpm"
-#include "vm.xbm"
-
-#define CHAR_HEIGHT 22
-
-
-// libkscreensaver interface
-extern "C"
-{
- KDE_EXPORT const char *kss_applicationName = "kvm.kss";
- KDE_EXPORT const char *kss_description = I18N_NOOP( "Virtual Machine" );
- KDE_EXPORT const char *kss_version = "2.2.0";
-
- KDE_EXPORT KScreenSaver *kss_create( WId id )
- {
- return new kVmSaver( id );
- }
-
- KDE_EXPORT TQDialog *kss_setup()
- {
- return new kVmSetup();
- }
-}
-
-
-
-static void
-load_images (m_state *state)
-{
- if ( TQPixmap::defaultDepth() > 1 )
- {
- state->images = TQPixmap( vm );
- }
- else
- {
- state->images = TQBitmap( vm_width, vm_height, vm_bits );
- }
- state->image_width = state->images.width();
- state->image_height = state->images.height();
- state->nglyphs = state->image_height / CHAR_HEIGHT;
-}
-
-
-static m_state *
-init_pool ( TQWidget *w )
-{
- m_state *state = new m_state;
- state->w = w;
-
- load_images (state);
-
- state->char_width = state->image_width / 4;
- state->char_height = CHAR_HEIGHT;
-
- state->grid_width = w->width() / state->char_width;
- state->grid_height = w->height() / state->char_height;
- state->grid_margin_x = w->width()%state->char_width/2;
- state->grid_margin_y = w->height()%state->char_height/2;
- state->show_threads = 1;
- vm_init_pool( &(state->pool), state->grid_width*state->grid_height,
- THREAD_MAX_STACK_SIZE, MAX_THREADS_NUM );
- //vm_enable_reverse( state->pool, 1 );
- state->modified = new char[state->grid_height*state->grid_width];
- for( int x = 0; x < state->grid_width*state->grid_height; ++x )
- state->modified[x] = 1;
- return state;
-}
-
-static void
-draw_pool (m_state *state)
-{
- int x, y;
- struct tvm_process* curr_thread;
-
- if( state->show_threads ) {
- curr_thread = state->pool->processes;
- while( curr_thread ) {
- state->modified[curr_thread->position] = 2;
- curr_thread = curr_thread->next;
- }
- }
- for (y = 0; y < state->grid_height; y++)
- for (x = 0; x < state->grid_width; x++) {
- int index = state->grid_width * y + x;
- if( state->modified[index] )
- {
- int op = state->pool->area[index];
- int pos_y;
- int pos_x = 0;
- switch( op ) {
- case VM_OP_STOP:
- pos_y = 14;
- break;
-
- case VM_OP_EXEC:
- pos_y = 15;
- break;
-
- case VM_OP_COPY:
- pos_y = 12;
- break;
-
- default:
- pos_y = op - VM_OP_PUSH;
- if( pos_y < 0 ) {
- pos_y = -pos_y;
- pos_x = 1;
- }
- break;
- }
- if( state->show_threads )
- if( state->modified[index] == 1 )
- pos_x += 2;
- TQPainter p(state->w);
- p.setPen( TQt::green );
- p.setBrush( TQt::black );
- p.drawPixmap( state->grid_margin_x + x*state->char_width,
- state->grid_margin_y + y*state->char_height,
- state->images, pos_x*state->char_width,
- pos_y*state->char_height,
- state->char_width, state->char_height );
- --state->modified[index];
- }
- }
-}
-
-//-----------------------------------------------------------------------------
-
-kVmSaver::kVmSaver( WId id ) : KScreenSaver( id )
-{
- readSettings();
-
- colorContext = TQColor::enterAllocContext();
-
- blank();
- setSpeed( speed );
- setRefreshTimeout( refreshTimeout );
-
- refreshStep = 0;
-
- pool_state = init_pool( this );
- vm_default_initstate( time(0), &(pool_state->pool->vm_random_data) );
- connect( &timer, TQT_SIGNAL( timeout() ), TQT_SLOT( slotTimeout() ) );
- timer.start( 100 - speed );
-}
-
-kVmSaver::~kVmSaver()
-{
- timer.stop();
- vm_done_pool( pool_state->pool );
- delete[] pool_state->modified;
- TQColor::leaveAllocContext();
- TQColor::destroyAllocContext( colorContext );
-}
-
-void kVmSaver::blank()
-{
- setBackgroundColor( black );
- erase();
-}
-
-void kVmSaver::setSpeed( int spd )
-{
- speed = spd;
-// timer.changeInterval( (100 - speed)*(100 - speed)*(100 - speed)/10000 );
- timer.changeInterval( (100 - speed) );
-}
-void kVmSaver::setRefreshTimeout( const int refreshTimeout )
-{
- this->refreshTimeout = refreshTimeout;
-}
-
-void kVmSaver::readSettings()
-{
- TDEConfig *config = TDEGlobal::config();
- config->setGroup( "Settings" );
-
- speed = config->readNumEntry( "Speed", 50 );
- refreshTimeout = config->readNumEntry( "DisplayRefreshTimeout", 0 );
-}
-int kVmSaver::getRandom( const int max_value ) {
- return (int)( vm_random(&(pool_state->pool->vm_random_data))*1.0*(max_value + 1.0)/
- (VM_RAND_MAX + 1.0) );
-// return (int)( rand()*1.0*(max_value + 1.0)/
-// (RAND_MAX + 1.0) );
-}
-void kVmSaver::modifyArea( const int op ) {
- int position;
-
- vm_modify( pool_state->pool, position =
- getRandom(pool_state->pool->area_size - 1), op );
- pool_state->modified[position] = 1;
-}
-
-void kVmSaver::slotTimeout()
-{
- for( int i = 0; i < 1; ++i ) {
- if( getRandom(2) == 0 )
- modifyArea( VM_OP_PUSH + getRandom(11) - getRandom(11) );
- if( getRandom(8) == 0 )
- modifyArea( VM_OP_STOP );
- if( getRandom(8) == 0 )
- modifyArea( VM_OP_COPY );
- if( getRandom(8) == 0 )
- modifyArea( VM_OP_EXEC );
-// if( getRandom(5) == 0 )
-// modifyArea( VM_OP_WAIT );
- }
- if( getRandom(0) == 0 )
- vm_exec( pool_state->pool, getRandom(pool_state->pool->area_size - 1), 0,
- vm_get_reverse( pool_state->pool ) );
- vm_iterate( pool_state->pool, pool_state->modified );
-// if( refreshStep++ >= refreshTimeout*refreshTimeout*refreshTimeout ) {
- if( refreshStep++ >= refreshTimeout ) {
- draw_pool( pool_state );
- refreshStep = 0;
- }
-}
-
-//-----------------------------------------------------------------------------
-
-kVmSetup::kVmSetup( TQWidget *parent, const char *name )
- : KDialogBase( parent, name, true, i18n( "Setup Virtual Machine" ),
- Ok|Cancel|Help, Ok, true )
-{
- readSettings();
-
- setButtonText( Help, i18n( "A&bout" ) );
- TQWidget *main = makeMainWidget();
-
- TQHBoxLayout *tl = new TQHBoxLayout( main, 0, spacingHint() );
- TQVBoxLayout *tl1 = new TQVBoxLayout();
- tl->addLayout(tl1);
-
- TQLabel *label = new TQLabel( i18n("Virtual machine speed:"), main );
- tl1->addWidget(label);
-
- TQSlider *slider = new TQSlider( Qt::Horizontal, main );
- slider->setMinimumSize( 120, 20 );
- slider->setRange( 0, 100 );
- slider->setSteps( 10, 20 );
- slider->setTickmarks( TQSlider::Below );
- slider->setTickInterval( 10 );
- slider->setValue( speed );
- connect( slider, TQT_SIGNAL( valueChanged( int ) ),
- TQT_SLOT( slotSpeed( int ) ) );
- tl1->addWidget(slider);
-
- label = new TQLabel( i18n("Display update speed:"), main );
- tl1->addWidget(label);
-
- slider = new TQSlider( Qt::Horizontal, main );
- slider->setMinimumSize( 120, 20 );
- slider->setRange( 0, MAX_REFRESH_TIMEOUT );
- slider->setSteps( MAX_REFRESH_TIMEOUT/10, MAX_REFRESH_TIMEOUT/5 );
- slider->setTickmarks( TQSlider::Below );
- slider->setTickInterval( MAX_REFRESH_TIMEOUT/10 );
- slider->setValue( MAX_REFRESH_TIMEOUT - refreshTimeout );
- connect( slider, TQT_SIGNAL( valueChanged( int ) ),
- TQT_SLOT( slotRefreshTimeout( int ) ) );
- tl1->addWidget(slider);
- tl1->addStretch();
-
- preview = new TQWidget( main );
- preview->setFixedSize( 220, 165 );
- preview->show(); // otherwise saver does not get correct size
- saver = new kVmSaver( preview->winId() );
- tl->addWidget(preview);
-}
-
-kVmSetup::~kVmSetup()
-{
- delete saver;
-}
-
-void kVmSetup::readSettings()
-{
- TDEConfig *config = TDEGlobal::config();
- config->setGroup( "Settings" );
-
- speed = config->readNumEntry( "Speed", 50 );
- if ( speed > 100 )
- speed = 100;
- else if ( speed < 0 )
- speed = 0;
- refreshTimeout = config->readNumEntry( "DisplayRefreshTimeout", 0 );
- if ( refreshTimeout > MAX_REFRESH_TIMEOUT )
- refreshTimeout = MAX_REFRESH_TIMEOUT;
- else if ( refreshTimeout < 0 )
- refreshTimeout = 0;
-}
-
-void kVmSetup::slotSpeed( int num )
-{
- speed = num;
- if ( saver )
- saver->setSpeed( num );
-}
-void kVmSetup::slotRefreshTimeout( int num )
-{
- refreshTimeout = MAX_REFRESH_TIMEOUT - num;
- if ( saver )
- saver->setRefreshTimeout( refreshTimeout );
-}
-
-void kVmSetup::slotOk()
-{
- TDEConfig *config = TDEGlobal::config();
- config->setGroup( "Settings" );
-
- TQString sspeed;
- sspeed.setNum( speed );
- config->writeEntry( "Speed", sspeed );
- sspeed.setNum( refreshTimeout );
- config->writeEntry( "DisplayRefreshTimeout", sspeed );
-
- config->sync();
- accept();
-}
-
-void kVmSetup::slotHelp()
-{
- KMessageBox::about(this,
- i18n("Virtual Machine Version 0.1\n\nCopyright (c) 2000 Artur Rataj <[email protected]>\n"),
- i18n("About Virtual Machine")
- );
-}
-
-#include "kvm.moc"
-
diff --git a/kscreensaver/kdesavers/kvm.h b/kscreensaver/kdesavers/kvm.h
deleted file mode 100644
index 7ab58577..00000000
--- a/kscreensaver/kdesavers/kvm.h
+++ /dev/null
@@ -1,101 +0,0 @@
-//-----------------------------------------------------------------------------
-//
-// kvm screensaver
-//
-
-#ifndef __KVM_H__
-#define __KVM_H__
-
-#include <tqtimer.h>
-#include <tqptrlist.h>
-
-#include <kdialogbase.h>
-#include <kscreensaver.h>
-
-extern "C" {
-#include "vm.h"
-#include "vm_random.h"
-}
-
-#define THREAD_MAX_STACK_SIZE 10
-#define MAX_THREADS_NUM 20
-
-#define MAX_REFRESH_TIMEOUT 40
-
-typedef struct {
- TQWidget *w;
- int grid_width, grid_height;
- int grid_margin_x;
- int grid_margin_y;
- int char_width, char_height;
- bool insert_top_p, insert_bottom_p;
- int density;
- struct tvm_pool* pool;
- char* modified;
- int show_threads;
-
- TQPixmap images;
- int image_width, image_height;
- int nglyphs;
-
-} m_state;
-
-
-class kVmSaver : public KScreenSaver
-{
- Q_OBJECT
-
-public:
- kVmSaver( WId id );
- virtual ~kVmSaver();
-
- void setSpeed( int spd );
- void setRefreshTimeout( const int refreshTimeout );
-
-protected:
- void blank();
- void readSettings();
- int getRandom( const int max_value );
- void modifyArea( const int op );
-
-protected slots:
- void slotTimeout();
-
-protected:
- TQTimer timer;
- int colorContext;
-
- int speed;
- m_state* pool_state;
- int refreshStep;
- int refreshTimeout;
-};
-
-
-class kVmSetup : public KDialogBase
-{
- Q_OBJECT
-
-public:
- kVmSetup( TQWidget *parent = NULL, const char *name = NULL );
- ~kVmSetup();
-protected:
- void readSettings();
-
-private slots:
- void slotSpeed( int );
- void slotRefreshTimeout( int num );
- void slotOk();
- void slotHelp();
-
-private:
- TQWidget *preview;
- kVmSaver *saver;
-
- int speed;
- int refreshTimeout;
-};
-
-
-#endif
-
diff --git a/kscreensaver/kdesavers/lines.cpp b/kscreensaver/kdesavers/lines.cpp
deleted file mode 100644
index d66f5a43..00000000
--- a/kscreensaver/kdesavers/lines.cpp
+++ /dev/null
@@ -1,401 +0,0 @@
-//-----------------------------------------------------------------------------
-//
-// klines 0.1.1 - Basic screen saver for KDE
-// by Dirk Staneker 1997
-// based on kpolygon from Martin R. Jones 1996
-//
-// layout management added 1998/04/19 by Mario Weilguni <[email protected]>
-// 2001/03/04 Converted to libkscreensaver by Martin R. Jones
-
-#include <config.h>
-#include <stdlib.h>
-#include <time.h>
-#include <tqcolor.h>
-#include <tqlabel.h>
-#include <tqslider.h>
-#include <kconfig.h>
-#include <kapplication.h>
-#include <kmessagebox.h>
-#include <kcolorbutton.h>
-
-#include "kcolordialog.h"
-#include "lines.h"
-#include "lines.moc"
-
-#include <tqlayout.h>
-#include <klocale.h>
-#include <kglobal.h>
-#include <tqpainter.h>
-
-#define MAXLENGTH 256
-
-// libkscreensaver interface
-extern "C"
-{
- KDE_EXPORT const char *kss_applicationName = "klines.kss";
- KDE_EXPORT const char *kss_description = I18N_NOOP( "KLines" );
- KDE_EXPORT const char *kss_version = "2.2.0";
-
- KDE_EXPORT KScreenSaver *kss_create( WId id )
- {
- return new kLinesSaver( id );
- }
-
- KDE_EXPORT TQDialog *kss_setup()
- {
- return new kLinesSetup();
- }
-}
-
-// Methods of the Lines-class
-Lines::Lines(int x){
- uint i;
- numLn=x;
- offx1=12;
- offy1=16;
- offx2=9;
- offy2=10;
- start=new Ln;
- end=start;
- for(i=1; i<numLn; i++){
- end->next=new Ln;
- end=end->next;
- }
- end->next=start;
- akt=start;
-}
-
-Lines::~Lines(){
- uint i;
- for(i=0; i<numLn; i++){
- end=start->next;
- delete start;
- start=end;
- }
-}
-
-inline void Lines::reset(){ akt=start; }
-
-inline void Lines::getKoord(int& a, int& b, int& c, int& d){
- a=akt->x1; b=akt->y1;
- c=akt->x2; d=akt->y2;
- akt=akt->next;
-}
-
-inline void Lines::setKoord(const int& a, const int& b, const int& c, const int& d){
- akt->x1=a; akt->y1=b;
- akt->x2=c; akt->y2=d;
-}
-
-inline void Lines::next(void){ akt=akt->next; }
-
-void Lines::turn(const int& w, const int& h){
- start->x1=end->x1+offx1;
- start->y1=end->y1+offy1;
- start->x2=end->x2+offx2;
- start->y2=end->y2+offy2;
- if(start->x1>=w) offx1=-8;
- if(start->x1<=0) offx1=7;
- if(start->y1>=h) offy1=-11;
- if(start->y1<=0) offy1=13;
- if(start->x2>=w) offx2=-17;
- if(start->x2<=0) offx2=15;
- if(start->y2>=h) offy2=-10;
- if(start->y2<=0) offy2=13;
- end->next=start;
- start=start->next;
- end=end->next;
-}
-
-
-//-----------------------------------------------------------------------------
-// dialog to setup screen saver parameters
-//
-kLinesSetup::kLinesSetup(TQWidget *parent, const char *name)
- : KDialogBase(parent, name, true, i18n( "Setup Lines Screen Saver" ),
- Ok|Cancel|Help, Ok, true ), saver( 0 ), length( 10 ), speed( 50 )
-{
- readSettings();
-
- setButtonText( Help, i18n( "A&bout" ) );
- TQWidget *main = makeMainWidget();
-
- TQHBoxLayout *tl = new TQHBoxLayout(main, 0, spacingHint());
- TQVBoxLayout *tl1 = new TQVBoxLayout;
- tl->addLayout(tl1);
-
- TQLabel *label=new TQLabel(i18n("Length:"), main);
- tl1->addWidget(label);
-
- TQSlider *sb= new TQSlider(1, MAXLENGTH+1, 16, length, Qt::Horizontal,
- main);
- sb->setMinimumSize(120, 20);
- sb->setTickmarks(TQSlider::Below);
- sb->setTickInterval(32);
- connect(sb, TQT_SIGNAL(valueChanged(int)), TQT_SLOT(slotLength(int)));
- tl1->addWidget(sb);
-
- label=new TQLabel(i18n("Speed:"), main);
- tl1->addWidget(label);
-
- sb = new TQSlider(0, 100, 10, speed, Qt::Horizontal, main);
- sb->setMinimumSize(120, 20);
- sb->setTickmarks(TQSlider::Below);
- sb->setTickInterval(10);
- connect( sb, TQT_SIGNAL( valueChanged( int ) ), TQT_SLOT( slotSpeed( int ) ) );
- tl1->addWidget(sb);
-
- label=new TQLabel(i18n("Beginning:"), main);
- tl1->addWidget(label);
-
- colorPush0=new KColorButton(colstart, main);
- connect(colorPush0, TQT_SIGNAL(changed(const TQColor &)),
- TQT_SLOT(slotColstart(const TQColor &)));
- tl1->addWidget(colorPush0);
-
- label=new TQLabel(i18n("Middle:"), main);
- tl1->addWidget(label);
-
- colorPush1=new KColorButton(colmid, main);
- connect(colorPush1, TQT_SIGNAL(changed(const TQColor &)),
- TQT_SLOT(slotColmid(const TQColor &)));
- tl1->addWidget(colorPush1);
-
- label=new TQLabel(i18n("End:"), main);
- tl1->addWidget(label);
-
- colorPush2=new KColorButton(colend, main);
- connect(colorPush2, TQT_SIGNAL(changed(const TQColor &)),
- TQT_SLOT(slotColend(const TQColor &)));
- tl1->addWidget(colorPush2);
- tl1->addStretch();
-
- preview = new TQWidget( main );
- preview->setFixedSize( 220, 170 );
- preview->setBackgroundColor( black );
- preview->show(); // otherwise saver does not get correct size
- saver=new kLinesSaver(preview->winId());
- tl->addWidget(preview);
-}
-
-kLinesSetup::~kLinesSetup()
-{
- delete saver;
-}
-
-// read settings from config file
-void kLinesSetup::readSettings(){
- TDEConfig *config = TDEGlobal::config();
- config->setGroup( "Settings" );
-
- TQString str;
-
- length = config->readNumEntry("Length", length);
- if(length>MAXLENGTH) length=MAXLENGTH;
- else if(length<1) length=1;
-
- speed = config->readNumEntry("Speed", speed);
- if(speed>100) speed=100;
- else if(speed<50) speed=50;
-
- str=config->readEntry("StartColor");
- if(!str.isNull()) colstart.setNamedColor(str);
- else colstart=white;
- str=config->readEntry("MidColor");
- if(!str.isNull()) colmid.setNamedColor(str);
- else colmid=blue;
- str=config->readEntry("EndColor");
- if(!str.isNull()) colend.setNamedColor(str);
- else colend=black;
-}
-
-void kLinesSetup::slotLength(int len){
- length=len;
- if(saver) saver->setLines(length);
-}
-
-void kLinesSetup::slotSpeed(int num){
- speed=num;
- if(saver) saver->setSpeed(speed);
-}
-
-void kLinesSetup::slotColstart(const TQColor &col){
- colstart = col;
- if(saver) saver->setColor(colstart, colmid, colend);
-}
-
-void kLinesSetup::slotColmid(const TQColor &col){
- colmid = col;
- if(saver) saver->setColor(colstart, colmid, colend);
-}
-
-void kLinesSetup::slotColend(const TQColor &col){
- colend = col;
- if(saver) saver->setColor(colstart, colmid, colend);
-}
-
-void kLinesSetup::slotHelp(){
- KMessageBox::about(this,
- i18n("Lines Version 2.2.0\n\n"
- "Written by Dirk Staneker 1997\n"
-}
-
-// Ok pressed - save settings and exit
-void kLinesSetup::slotOk(){
- TDEConfig *config = TDEGlobal::config();
- config->setGroup("Settings");
-
- TQString slength;
- slength.setNum(length);
- config->writeEntry("Length", slength);
-
- TQString sspeed;
- sspeed.setNum( speed );
- config->writeEntry( "Speed", sspeed );
-
- TQString colName0, colName1, colName2;
- colName0.sprintf("#%02x%02x%02x", colstart.red(),
- colstart.green(), colstart.blue() );
- config->writeEntry( "StartColor", colName0 );
-
- colName1.sprintf("#%02x%02x%02x", colmid.red(),
- colmid.green(), colmid.blue() );
- config->writeEntry( "MidColor", colName1 );
-
- colName2.sprintf("#%02x%02x%02x", colend.red(),
- colend.green(), colend.blue() );
- config->writeEntry( "EndColor", colName2 );
-
- config->sync();
- accept();
-}
-
-//-----------------------------------------------------------------------------
-
-
-kLinesSaver::kLinesSaver( WId id ) : KScreenSaver( id ){
- readSettings();
- lines=new Lines(numLines);
- colorContext=TQColor::enterAllocContext();
- blank();
- initialiseColor();
- initialiseLines();
- timer.start(speed);
- connect(&timer, TQT_SIGNAL(timeout()), TQT_SLOT(slotTimeout()));
-}
-
-kLinesSaver::~kLinesSaver(){
- timer.stop();
- TQColor::leaveAllocContext();
- TQColor::destroyAllocContext(colorContext);
- delete lines;
-}
-
-// set lines properties
-void kLinesSaver::setLines(int len){
- timer.stop();
- numLines=len;
- initialiseLines();
- initialiseColor();
- blank();
- timer.start(speed);
-}
-
-// set the speed
-void kLinesSaver::setSpeed(int spd){
- timer.stop();
- speed=100-spd;
- timer.start(speed);
-}
-
-void kLinesSaver::setColor(const TQColor& cs, const TQColor& cm, const TQColor& ce){
- colstart=cs;
- colmid=cm;
- colend=ce;
- initialiseColor();
-}
-
-// read configuration settings from config file
-void kLinesSaver::readSettings(){
- TDEConfig *config=TDEGlobal::config();
- config->setGroup("Settings");
-
- numLines=config->readNumEntry("Length", 10);
- speed = 100- config->readNumEntry("Speed", 50);
- if(numLines>MAXLENGTH) numLines=MAXLENGTH;
- else if(numLines<1) numLines = 1;
-
- colstart=config->readColorEntry("StartColor", &white);
- colmid=config->readColorEntry("MidColor", &blue);
- colend=config->readColorEntry("EndColor", &black);
-}
-
-// draw next lines and erase tail
-void kLinesSaver::slotTimeout(){
- uint i;
- int x1,y1,x2,y2;
- int col=0;
-
- lines->reset();
- TQPainter p( this );
- p.setPen( black );
-
- for(i=0; i<numLines; i++){
- lines->getKoord(x1,y1,x2,y2);
- p.drawLine( x1, y1, x2, y2 );
- p.setPen( colors[col] );
- col=(int)(i*colscale);
- if(col>63) col=0;
- }
- lines->turn(width(), height());
-}
-
-void kLinesSaver::blank(){
- setBackgroundColor( black );
- erase();
-}
-
-// initialise the lines
-void kLinesSaver::initialiseLines(){
- uint i;
- int x1,y1,x2,y2;
- delete lines;
- lines=new Lines(numLines);
- lines->reset();
- x1=rnd.getLong(width());
- y1=rnd.getLong(height());
- x2=rnd.getLong(width());
- y2=rnd.getLong(height());
- for(i=0; i<numLines; i++){
- lines->setKoord(x1,y1,x2,y2);
- lines->next();
- }
-}
-
-// create a color table of 64 colors
-void kLinesSaver::initialiseColor(){
- int i;
- double mr, mg, mb;
- double cr, cg, cb;
- mr=(double)(colmid.red()-colstart.red())/32;
- mg=(double)(colmid.green()-colstart.green())/32;
- mb=(double)(colmid.blue()-colstart.blue())/32;
- cr=colstart.red();
- cg=colstart.green();
- cb=colstart.blue();
- for(i=0; i<32; i++){
- colors[63-i].setRgb((int)(mr*i+cr), (int)(mg*i+cg), (int)(mb*i+cb));
- }
- mr=(double)(colend.red()-colmid.red())/32;
- mg=(double)(colend.green()-colmid.green())/32;
- mb=(double)(colend.blue()-colmid.blue())/32;
- cr=colmid.red();
- cg=colmid.green();
- cb=colmid.blue();
- for(i=0; i<32; i++){
- colors[31-1].setRgb((int)(mr*i+cr), (int)(mg*i+cg), (int)(mb*i+cb));
- }
- colscale=64.0/(double)numLines;
-}
diff --git a/kscreensaver/kdesavers/lines.h b/kscreensaver/kdesavers/lines.h
deleted file mode 100644
index 7dd11200..00000000
--- a/kscreensaver/kdesavers/lines.h
+++ /dev/null
@@ -1,98 +0,0 @@
-//-----------------------------------------------------------------------------
-//
-// klines 0.1.1 - Basic screen saver for KDE
-// by Dirk Staneker 1997
-// based on kpolygon 0.3 by Martin R. Jones 1996
-//
-
-#ifndef __LINES_H__
-#define __LINES_H__
-
-#include <tqtimer.h>
-#include <tqptrlist.h>
-
-#include <kdialogbase.h>
-#include <krandomsequence.h>
-#include <kscreensaver.h>
-
-class KColorButton;
-
-class Lines{
- private:
- struct Ln{
- Ln* next;
- int x1, y1, x2, y2;
- };
- Ln *start, *end, *akt;
- int offx1, offy1, offx2, offy2;
- uint numLn;
- public:
- Lines(int);
- ~Lines();
- inline void reset();
- inline void getKoord(int&, int&, int&, int&);
- inline void setKoord(const int&, const int&, const int&, const int&);
- inline void next(void);
- void turn(const int&, const int&);
-};
-
-class kLinesSaver:public KScreenSaver{
- Q_OBJECT
-
- public:
- kLinesSaver( WId id );
- virtual ~kLinesSaver();
-
- void setLines(int len);
- void setSpeed(int spd);
- void setColor(const TQColor&, const TQColor&, const TQColor&);
-
- private:
- void readSettings();
- void blank();
- void initialiseLines();
- void initialiseColor();
-
- protected slots:
- void slotTimeout();
-
- protected:
- KRandomSequence rnd;
- TQTimer timer;
- unsigned numLines;
- int colorContext, speed;
- TQColor colors[64];
- TQColor colstart, colmid, colend;
- double colscale;
- Lines* lines;
-};
-
-class kLinesSetup : public KDialogBase{
- Q_OBJECT
-
- public:
- kLinesSetup(TQWidget *parent=NULL, const char *name=NULL);
- ~kLinesSetup();
-
- protected:
- void readSettings();
-
- private slots:
- void slotLength(int);
- void slotSpeed(int);
- void slotColstart(const TQColor &);
- void slotColmid(const TQColor &);
- void slotColend(const TQColor &);
- void slotOk();
- void slotHelp();
-
- private:
- KColorButton *colorPush0, *colorPush1, *colorPush2;
- TQWidget *preview;
- kLinesSaver *saver;
- int length, speed;
- TQColor colstart, colmid, colend;
-};
-
-#endif
-
diff --git a/kscreensaver/kdesavers/lorenz.cpp b/kscreensaver/kdesavers/lorenz.cpp
deleted file mode 100644
index e4e5f63c..00000000
--- a/kscreensaver/kdesavers/lorenz.cpp
+++ /dev/null
@@ -1,569 +0,0 @@
-//-----------------------------------------------------------------------------
-//
-// Lorenz - Lorenz Attractor screen saver
-// Nicolas Brodu, [email protected], 2000
-//
-// Portions of code from kblankscrn and khop.
-// See authors there.
-//
-// I release my code as GPL, but see the other headers and the README
-
-#include <math.h>
-#include <stdlib.h>
-
-#include <tqpainter.h>
-#include <tqslider.h>
-#include <tqlayout.h>
-#include <tqcolor.h>
-#include <tqlabel.h>
-
-#include <kapplication.h>
-#include <klocale.h>
-#include <kglobal.h>
-#include <kconfig.h>
-#include <kmessagebox.h>
-
-#include "lorenz.h"
-#include "lorenz.moc"
-
-// libkscreensaver interface
-extern "C"
-{
- KDE_EXPORT const char *kss_applicationName = "klorenz.kss";
- KDE_EXPORT const char *kss_description = I18N_NOOP( "KLorenz" );
- KDE_EXPORT const char *kss_version = "2.2.0";
-
- KDE_EXPORT KScreenSaver *kss_create( WId id )
- {
- return new KLorenzSaver( id );
- }
-
- KDE_EXPORT TQDialog *kss_setup()
- {
- return new KLorenzSetup();
- }
-}
-
-#define MINSPEED 1
-#define MAXSPEED 1500
-#define DEFSPEED 150
-#define MINZROT -180
-#define MAXZROT 180
-#define DEFZROT 104 //100
-#define MINYROT -180
-#define MAXYROT 180
-#define DEFYROT -19 //80
-#define MINXROT -180
-#define MAXXROT 180
-#define DEFXROT 25 //20
-#define MINEPOCH 1
-#define MAXEPOCH 30000
-#define DEFEPOCH 5800
-#define MINCOLOR 1
-#define MAXCOLOR 100
-#define DEFCOLOR 20
-
-//-----------------------------------------------------------------------------
-// dialog to setup screen saver parameters
-//
-KLorenzSetup::KLorenzSetup( TQWidget *parent, const char *name )
- : KDialogBase( parent, name, true, i18n( "Setup Lorenz Attractor" ),
- Ok|Cancel|Default|Help, Ok, true )
-{
- readSettings();
-
- setButtonText( Help, i18n( "A&bout" ) );
- TQWidget *main = makeMainWidget();
-
- TQHBoxLayout *tl = new TQHBoxLayout( main, 0, spacingHint() );
- TQVBoxLayout *tl1 = new TQVBoxLayout;
- tl->addLayout(tl1);
-
- TQLabel *label = new TQLabel( i18n("Speed:"), main );
- tl1->addWidget(label);
-
- sps = new TQSlider(MINSPEED, MAXSPEED, 10, speed, Qt::Horizontal, main);
- sps->setMinimumSize( 120, 20 );
- sps->setTickmarks(TQSlider::Below);
- sps->setTickInterval(150);
- connect( sps, TQT_SIGNAL( valueChanged( int ) ), TQT_SLOT( slotSpeed( int ) ) );
- tl1->addWidget(sps);
-
- label = new TQLabel( i18n("Epoch:"), main );
- tl1->addWidget(label);
-
- eps = new TQSlider(MINEPOCH, MAXEPOCH, 100, epoch, Qt::Horizontal, main);
- eps->setMinimumSize( 120, 20 );
- eps->setTickmarks(TQSlider::Below);
- eps->setTickInterval(3000);
- connect( eps, TQT_SIGNAL( valueChanged( int ) ), TQT_SLOT( slotEpoch( int ) ) );
- tl1->addWidget(eps);
-
- label = new TQLabel( i18n("Color rate:"), main );
- tl1->addWidget(label);
-
- crs = new TQSlider(MINCOLOR, MAXCOLOR, 5, crate, Qt::Horizontal, main);
- crs->setMinimumSize( 120, 20 );
- crs->setTickmarks(TQSlider::Below);
- crs->setTickInterval(10);
- connect( crs, TQT_SIGNAL( valueChanged( int ) ), TQT_SLOT( slotCRate( int ) ) );
- tl1->addWidget(crs);
-
- label = new TQLabel( i18n("Rotation Z:"), main );
- tl1->addWidget(label);
-
- zrs = new TQSlider(MINZROT, MAXZROT, 18, zrot, Qt::Horizontal, main);
- zrs->setMinimumSize( 120, 20 );
- zrs->setTickmarks(TQSlider::Below);
- zrs->setTickInterval(36);
- connect( zrs, TQT_SIGNAL( valueChanged( int ) ), TQT_SLOT( slotZRot( int ) ) );
- tl1->addWidget(zrs);
-
- label = new TQLabel( i18n("Rotation Y:"), main );
- tl1->addWidget(label);
-
- yrs = new TQSlider(MINYROT, MAXYROT, 18, yrot, Qt::Horizontal, main);
- yrs->setMinimumSize( 120, 20 );
- yrs->setTickmarks(TQSlider::Below);
- yrs->setTickInterval(36);
- connect( yrs, TQT_SIGNAL( valueChanged( int ) ), TQT_SLOT( slotYRot( int ) ) );
- tl1->addWidget(yrs);
-
- label = new TQLabel( i18n("Rotation X:"), main );
- tl1->addWidget(label);
-
- xrs = new TQSlider(MINXROT, MAXXROT, 18, xrot, Qt::Horizontal, main);
- xrs->setMinimumSize( 120, 20 );
- xrs->setTickmarks(TQSlider::Below);
- xrs->setTickInterval(36);
- connect( xrs, TQT_SIGNAL( valueChanged( int ) ), TQT_SLOT( slotXRot( int ) ) );
- tl1->addWidget(xrs);
-
- preview = new TQWidget( main );
- preview->setFixedSize( 220, 165 );
- preview->setBackgroundColor( black );
- preview->show(); // otherwise saver does not get correct size
- saver = new KLorenzSaver( preview->winId() );
- tl->addWidget(preview);
-}
-
-KLorenzSetup::~KLorenzSetup()
-{
- delete saver;
-}
-
-// read settings from config file
-void KLorenzSetup::readSettings()
-{
- TDEConfig *config = TDEGlobal::config();
- config->setGroup( "Settings" );
-
- speed = config->readNumEntry( "Speed", DEFSPEED );
- epoch = config->readNumEntry( "Epoch", DEFEPOCH );
- crate = config->readNumEntry( "Color Rate", DEFCOLOR );
- zrot = config->readNumEntry( "ZRot", DEFZROT );
- yrot = config->readNumEntry( "YRot", DEFZROT );
- xrot = config->readNumEntry( "XRot", DEFZROT );
-}
-
-
-void KLorenzSetup::slotSpeed(int num)
-{
- speed = num;
- if (saver) saver->setSpeed(speed);
-}
-
-void KLorenzSetup::slotEpoch(int num)
-{
- epoch = num;
- if (saver) saver->setEpoch(epoch);
-}
-
-void KLorenzSetup::slotCRate(int num)
-{
- crate = num;
- if (saver) saver->setCRate(crate);
-}
-
-void KLorenzSetup::slotZRot(int num)
-{
- zrot = num;
- if (saver) {
- saver->setZRot(zrot);
- saver->updateMatrix();
- saver->newEpoch();
- }
-}
-
-void KLorenzSetup::slotYRot(int num)
-{
- yrot = num;
- if (saver) {
- saver->setYRot(yrot);
- saver->updateMatrix();
- saver->newEpoch();
- }
-}
-
-void KLorenzSetup::slotXRot(int num)
-{
- xrot = num;
- if (saver) {
- saver->setXRot(xrot);
- saver->updateMatrix();
- saver->newEpoch();
- }
-}
-
-void KLorenzSetup::slotHelp()
-{
- KMessageBox::about(this,i18n("Lorenz Attractor screen saver for TDE\n\nCopyright (c) 2000 Nicolas Brodu"));
-}
-
-// Ok pressed - save settings and exit
-void KLorenzSetup::slotOk()
-{
- TDEConfig *config = TDEGlobal::config();
- config->setGroup( "Settings" );
-
- config->writeEntry( "Speed", speed );
- config->writeEntry( "Epoch", epoch );
- config->writeEntry( "Color Rate", crate );
- config->writeEntry( "ZRot", zrot );
- config->writeEntry( "YRot", yrot );
- config->writeEntry( "XRot", xrot );
-
- config->sync();
-
- accept();
-}
-
-void KLorenzSetup::slotDefault()
-{
- speed = DEFSPEED;
- epoch = DEFEPOCH;
- crate = DEFCOLOR;
- zrot = DEFZROT;
- yrot = DEFYROT;
- xrot = DEFXROT;
- if (saver) {
- saver->setSpeed(speed);
- saver->setEpoch(epoch);
- saver->setCRate(crate);
- saver->setZRot(zrot);
- saver->setYRot(yrot);
- saver->setXRot(xrot);
- saver->updateMatrix();
- saver->newEpoch();
- }
- sps->setValue(speed);
- eps->setValue(epoch);
- crs->setValue(crate);
- zrs->setValue(zrot);
- yrs->setValue(yrot);
- xrs->setValue(xrot);
-
-/* // User can cancel, or save defaults?
-
- TDEConfig *config = TDEGlobal::config();
- config->setGroup( "Settings" );
-
- config->writeEntry( "Speed", speed );
- config->writeEntry( "Epoch", epoch );
- config->writeEntry( "Color Rate", crate );
- config->writeEntry( "ZRot", zrot );
- config->writeEntry( "YRot", yrot );
- config->writeEntry( "XRot", xrot );
-
- config->sync();
-*/
-}
-
-//-----------------------------------------------------------------------------
-
-
-#ifndef M_PI
-#define M_PI 3.14159265358979323846
-#endif
-const double pi = M_PI;
-
-// Homogeneous coordinate transform matrix
-// I initially wrote it for a Java applet, it is inspired from a
-// Matrix class in the JDK.
-// Nicolas Brodu, 1998-2000
-class Matrix3D
-{
- // All coefficients
- double xx, xy, xz, xo;
- double yx, yy, yz, yo;
- double zx, zy, zz, zo;
- // 0, 0, 0, 1 are implicit
-public:
-
- void unit()
- {
- xx=1.0; xy=0.0; xz=0.0; xo=0.0;
- yx=0.0; yy=1.0; yz=0.0; yo=0.0;
- zx=0.0; zy=0.0; zz=1.0; zo=0.0;
- }
-
- Matrix3D ()
- {
- unit();
- }
-
- // Translation
- void translate(double x, double y, double z)
- {
- xo += x;
- yo += y;
- zo += z;
- }
-
- // Rotation, in degrees, around the Y axis
- void rotY(double theta)
- {
- theta *= pi / 180;
- double ct = cos(theta);
- double st = sin(theta);
-
- double Nxx = xx * ct + zx * st;
- double Nxy = xy * ct + zy * st;
- double Nxz = xz * ct + zz * st;
- double Nxo = xo * ct + zo * st;
-
- double Nzx = zx * ct - xx * st;
- double Nzy = zy * ct - xy * st;
- double Nzz = zz * ct - xz * st;
- double Nzo = zo * ct - xo * st;
-
- xo = Nxo;
- xx = Nxx;
- xy = Nxy;
- xz = Nxz;
- zo = Nzo;
- zx = Nzx;
- zy = Nzy;
- zz = Nzz;
- }
-
-
- // Rotation, in degrees, around the X axis
- void rotX(double theta)
- {
- theta *= pi / 180;
- double ct = cos(theta);
- double st = sin(theta);
-
- double Nyx = yx * ct + zx * st;
- double Nyy = yy * ct + zy * st;
- double Nyz = yz * ct + zz * st;
- double Nyo = yo * ct + zo * st;
-
- double Nzx = zx * ct - yx * st;
- double Nzy = zy * ct - yy * st;
- double Nzz = zz * ct - yz * st;
- double Nzo = zo * ct - yo * st;
-
- yo = Nyo;
- yx = Nyx;
- yy = Nyy;
- yz = Nyz;
- zo = Nzo;
- zx = Nzx;
- zy = Nzy;
- zz = Nzz;
- }
-
-
- // Rotation, in degrees, around the Z axis
- void rotZ(double theta)
- {
- theta *= pi / 180;
- double ct = cos(theta);
- double st = sin(theta);
-
- double Nyx = yx * ct + xx * st;
- double Nyy = yy * ct + xy * st;
- double Nyz = yz * ct + xz * st;
- double Nyo = yo * ct + xo * st;
-
- double Nxx = xx * ct - yx * st;
- double Nxy = xy * ct - yy * st;
- double Nxz = xz * ct - yz * st;
- double Nxo = xo * ct - yo * st;
-
- yo = Nyo;
- yx = Nyx;
- yy = Nyy;
- yz = Nyz;
- xo = Nxo;
- xx = Nxx;
- xy = Nxy;
- xz = Nxz;
- }
-
- // Multiply by a projection matrix, with camera f
- // f 0 0 0 x f*x
- // 0 f 0 0 * y = f*y
- // 0 0 1 f z z+f
- // 0 0 0 1 1 1
- // So, it it easy to find the 2D coordinates after the transform
- // u = f*x / (z+f)
- // v = f*y / (z+f)
- void proj(double f)
- {
- xx*=f;
- xy*=f;
- xz*=f;
- xo*=f;
- yx*=f;
- yy*=f;
- yz*=f;
- yo*=f;
- zo+=f;
- }
-
- // Apply the transformation 3D => 2D
- void transform(double x, double y, double z, double &u, double& v, double& w)
- {
- u = x * xx + y * xy + z * xz + xo;
- v = x * yx + y * yy + z * yz + yo;
- w = x * zx + y * zy + z * zz + zo;
- }
-};
-
-KLorenzSaver::KLorenzSaver( WId id ) : KScreenSaver( id )
-{
- readSettings();
-
- // Create a transform matrix with the parameters
- mat = new Matrix3D();
- updateMatrix();
-
- colorContext = TQColor::enterAllocContext();
- setBackgroundColor( black );
- newEpoch();
-
- timer.start( 10 );
- connect( &timer, TQT_SIGNAL( timeout() ), TQT_SLOT( drawOnce() ) );
-}
-
-KLorenzSaver::~KLorenzSaver()
-{
- delete mat;
- mat=0;
- timer.stop();
- TQColor::leaveAllocContext();
- TQColor::destroyAllocContext( colorContext );
-}
-
-// read configuration settings from config file
-void KLorenzSaver::readSettings()
-{
- TDEConfig *config = TDEGlobal::config();
- config->setGroup( "Settings" );
-
- speed = config->readNumEntry( "Speed", DEFSPEED );
- epoch = config->readNumEntry( "Epoch", DEFEPOCH );
- zrot = config->readNumEntry( "ZRot", DEFZROT );
- yrot = config->readNumEntry( "YRot", DEFZROT );
- xrot = config->readNumEntry( "XRot", DEFZROT );
-
- int crate_num = config->readNumEntry( "Color Rate", DEFCOLOR );
- crate = (double)crate_num / (double)MAXCOLOR;
-}
-
-void KLorenzSaver::setSpeed(int num)
-{
- speed = num;
-}
-
-void KLorenzSaver::setEpoch(int num)
-{
- epoch = num;
-}
-
-void KLorenzSaver::setZRot(int num)
-{
- zrot = num;
-}
-
-void KLorenzSaver::setYRot(int num)
-{
- yrot = num;
-}
-
-void KLorenzSaver::setXRot(int num)
-{
- xrot = num;
-}
-
-void KLorenzSaver::setCRate(int num)
-{
- crate = (double)num / (double)MAXCOLOR;
-}
-
-void KLorenzSaver::updateMatrix()
-{
- // reset matrix
- mat->unit();
- // Remove the mean before the rotations...
- mat->translate(-0.95413, -0.96740, -23.60065);
- mat->rotZ(zrot);
- mat->rotY(yrot);
- mat->rotX(xrot);
- mat->translate(0, 0, 100);
- mat->proj(1);
-}
-
-void KLorenzSaver::newEpoch()
-{
- // Start at a random position, somewhere around the mean
- x = 0.95-25.0+50.0*kapp->random() / (RAND_MAX+1.0);
- y = 0.97-25.0+50.0*kapp->random() / (RAND_MAX+1.0);
- z = 23.6-25.0+50.0*kapp->random() / (RAND_MAX+1.0);
- // start at some random 'time' as well to have different colors
- t = 10000.0*kapp->random() / (RAND_MAX+1.0);
- erase();
- e=0; // reset epoch counter
-}
-
-// Computes the derivatives using Lorenz equations
-static void lorenz(double x, double y, double z, double& dx, double& dy, double& dz)
-{
- dx = 10*(y-x);
- dy = 28*x - y - x*z;
- dz = x*y - z*8.0/3.0;
-}
-
-// Use a simple Runge-Kutta formula to draw a few points
-// No need to go beyond 2nd order for a screensaver!
-void KLorenzSaver::drawOnce()
-{
- double kx, ky, kz, dx, dy, dz;
- const double h = 0.0001;
- const double tqh = h * 3.0 / 4.0;
- TQPainter p(this);
-
- for (int i=0; i<speed; i++) {
- // Runge-Kutta formula
- lorenz(x,y,z,dx,dy,dz);
- lorenz(x + tqh*dx, y + tqh*dy, z + tqh*dz, kx, ky, kz);
- x += h*(dx/3.0+2*kx/3.0);
- y += h*(dy/3.0+2*ky/3.0);
- z += h*(dz/3.0+2*kz/3.0);
- // Apply transform
- mat->transform(x,y,z,kx,ky,kz);
- // Choose a color
- p.setPen(
- TQColor((int)(sin(t*crate/pi)*127+128),
- (int)(sin(t*crate/(pi-1))*127+128),
- (int)(sin(t*crate/(pi-2))*127+128)).pixel() );
- // Draw a point
- p.drawPoint( (int)(kx*width()*1.5/kz)+(int)(width()/2),
- (int)(ky*height()*1.5/kz)+(int)(height()/2));
- t+=h;
- }
- if (++e>=epoch) newEpoch();
-}
diff --git a/kscreensaver/kdesavers/lorenz.h b/kscreensaver/kdesavers/lorenz.h
deleted file mode 100644
index 5dfa6388..00000000
--- a/kscreensaver/kdesavers/lorenz.h
+++ /dev/null
@@ -1,88 +0,0 @@
-//-----------------------------------------------------------------------------
-//
-// Lorenz - Lorenz Attractor screen saver
-// Nicolas Brodu, [email protected], 2000
-//
-// Portions of code from kblankscrn and khop.
-// See authors there.
-//
-// I release my code as GPL, but see the other headers and the README
-
-#ifndef __LORENZKSCRN_H__
-#define __LORENZKSCRN_H__
-
-#include <tqtimer.h>
-#include <tqcolor.h>
-#include <kscreensaver.h>
-#include <kdialogbase.h>
-
-// See lorenz.cpp for this private class
-class Matrix3D;
-
-class KLorenzSaver : public KScreenSaver
-{
- Q_OBJECT
-
-public:
- KLorenzSaver( WId id );
- virtual ~KLorenzSaver();
- void setSpeed(int num);
- void setEpoch(int num);
- void setCRate(int num);
- void setZRot(int num);
- void setYRot(int num);
- void setXRot(int num);
- void updateMatrix();
- void newEpoch();
-
-protected slots:
- void drawOnce();
-
-protected:
- TQTimer timer;
- int colorContext;
-
-private:
- void readSettings();
-
-private:
- double x, y, z, t;
- double speed, epoch, zrot, yrot, xrot, crate;
- int e;
- Matrix3D *mat;
-};
-
-class TQSlider;
-
-class KLorenzSetup : public KDialogBase
-{
- Q_OBJECT
-
-public:
- KLorenzSetup(TQWidget *parent = 0, const char *name = 0 );
- ~KLorenzSetup();
-
-protected:
- void readSettings();
-
-private slots:
- void slotSpeed(int num);
- void slotEpoch(int num);
- void slotCRate(int num);
- void slotZRot(int num);
- void slotYRot(int num);
- void slotXRot(int num);
-
- void slotOk();
- void slotHelp();
- void slotDefault();
-
-private:
- TQWidget *preview;
- TQSlider *sps, *eps, *zrs, *yrs, *xrs, *crs;
- KLorenzSaver *saver;
- int speed, epoch, zrot, yrot, xrot, crate;
-};
-
-#endif
-
diff --git a/kscreensaver/kdesavers/particle.png b/kscreensaver/kdesavers/particle.png
deleted file mode 100644
index a777c822..00000000
--- a/kscreensaver/kdesavers/particle.png
+++ /dev/null
Binary files differ
diff --git a/kscreensaver/kdesavers/pendulum.cpp b/kscreensaver/kdesavers/pendulum.cpp
deleted file mode 100644
index a355e029..00000000
--- a/kscreensaver/kdesavers/pendulum.cpp
+++ /dev/null
@@ -1,881 +0,0 @@
-//============================================================================
-//
-// KPendulum screen saver for KDE
-//
-// The screen saver displays a physically realistic simulation of a two-part
-// pendulum.
-//
-// Developed by Georg Drenkhahn, [email protected]
-//
-// $Id$
-//
-/*
- * Copyright (C) 2004 Georg Drenkhahn
- *
- * KRotation is free software; you can redistribute it and/or modify it under
- * the terms of the GNU General Public License version 2 as published by the
- * Free Software Foundation.
- *
- * KRotation is distributed in the hope that it will be useful, but WITHOUT ANY
- * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
- * A PARTICULAR PURPOSE. See the GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc., 59 Temple
- * Place, Suite 330, Boston, MA 02110-1301 USA
- */
-//============================================================================
-
-// std. C++ headers
-#include <cstdlib>
-
-// TQt headers
-#include <tqlineedit.h>
-#include <tqspinbox.h>
-#include <tqvalidator.h>
-#include <tqcolordialog.h>
-#include <tqpushbutton.h>
-#include <tqtooltip.h>
-// KDE headers
-#include <klocale.h>
-#include <kconfig.h>
-#include <kdebug.h>
-#include <kmessagebox.h>
-
-#include "sspreviewarea.h"
-
-// pendulum.moc includes pendulum.h
-#include "pendulum.moc"
-
-#define KPENDULUM_VERSION "1.1"
-
-// libkscreensaver interface
-extern "C"
-{
- /// application name for libkscreensaver interface
- KDE_EXPORT const char *kss_applicationName = "kpendulum.kss";
- /// application description for libkscreensaver interface
- KDE_EXPORT const char *kss_description = I18N_NOOP("Simulation of\
- a two-part pendulum");
- /// application version for libkscreensaver interface
- KDE_EXPORT const char *kss_version = KPENDULUM_VERSION;
-
- /// function to create screen saver object
- KDE_EXPORT KScreenSaver* kss_create(WId id)
- {
- return new KPendulumSaver(id);
- }
-
- /// function to create setup dialog for screen saver
- KDE_EXPORT TQDialog* kss_setup()
- {
- return new KPendulumSetup();
- }
-}
-
-//-----------------------------------------------------------------------------
-// PendulumOdeSolver
-//-----------------------------------------------------------------------------
-
-PendulumOdeSolver::PendulumOdeSolver(
- const double &_t,
- const double &_dt,
- std::valarray<double> &_y,
- const double &_eps,
- const double &_m1,
- const double &_m2,
- const double &_l1,
- const double &_l2,
- const double &_g)
- : RkOdeSolver<double>(_t,_y,_dt,_eps),
- A(1.0/(_m2*_l1*_l1)),
- B1(_m2*_l1*_l2), // constants for faster numeric calculation
- B(1.0/B1), // derived from m1,m2,l1,l2,g
- C((_m1+_m2)/(_m2*_m2*_l2*_l2)),
- D(_g*(_m1+_m2)*_l1),
- E(_g*_m2*_l2),
- M((_m1+_m2)/_m2)
-{
-}
-
-std::valarray<double> PendulumOdeSolver::f(
- const double &x,
- const std::valarray<double> &y) const
-{
- (void)x; // unused
-
- const double& q1 = y[0];
- const double& q2 = y[1];
- const double& p1 = y[2];
- const double& p2 = y[3];
-
- const double cosDq = std::cos(q1-q2);
- const double iden = 1.0/(M - cosDq*cosDq); // invers denominator
- const double dq1dt = (A*p1 - B*cosDq*p2)*iden;
- const double dq2dt = (C*p2 - B*cosDq*p1)*iden;
-
- std::valarray<double> ypr(y.size());
- ypr[0] = dq1dt;
- ypr[1] = dq2dt;
-
- const double K = B1 * dq1dt*dq2dt * std::sin(q1-q2);
- ypr[2] = -K - D * std::sin(q1);
- ypr[3] = K - E * std::sin(q2);
-
- return ypr;
-}
-
-//-----------------------------------------------------------------------------
-// Rotation: screen saver widget
-//-----------------------------------------------------------------------------
-
-PendulumGLWidget::PendulumGLWidget(TQWidget* parent, const char* name)
- : TQGLWidget(parent, name),
- eyeR(30), // eye coordinates (polar)
- eyeTheta(M_PI*0.45),
- eyePhi(0),
- lightR(eyeR), // light coordinates (polar)
- lightTheta(M_PI*0.25),
- lightPhi(M_PI*0.25),
- quadM1(gluNewQuadric()),
- m_barColor(KPendulumSaver::barColorDefault),
- m_m1Color(KPendulumSaver::m1ColorDefault),
- m_m2Color(KPendulumSaver::m2ColorDefault)
-{
-}
-
-PendulumGLWidget::~PendulumGLWidget(void)
-{
- gluDeleteQuadric(quadM1);
-}
-
-void PendulumGLWidget::setEyePhi(double phi)
-{
- eyePhi = phi;
- while (eyePhi < 0) eyePhi += 2.*M_PI;
- while (eyePhi > 2*M_PI) eyePhi -= 2.*M_PI;
-
- // get the view port
- static GLint vp[4];
- glGetIntegerv(GL_VIEWPORT, vp);
- // calc new perspective, a resize event is simulated here
- resizeGL(static_cast<int>(vp[2]), static_cast<int>(vp[3]));
-}
-
-void PendulumGLWidget::setAngles(const double& q1, const double& q2)
-{
- ang1 = static_cast<GLfloat>(q1*180./M_PI);
- ang2 = static_cast<GLfloat>(q2*180./M_PI);
-}
-
-void PendulumGLWidget::setMasses(const double& m1, const double& m2)
-{
- sqrtm1 = static_cast<GLfloat>(sqrt(m1));
- sqrtm2 = static_cast<GLfloat>(sqrt(m2));
-}
-
-void PendulumGLWidget::setLengths(const double& _l1, const double& _l2)
-{
- l1 = static_cast<GLfloat>(_l1);
- l2 = static_cast<GLfloat>(_l2);
-}
-
-void PendulumGLWidget::setBarColor(const TQColor& c)
-{
- if (c.isValid())
- {
- m_barColor = c;
- }
-}
-
-void PendulumGLWidget::setM1Color(const TQColor& c)
-{
- if (c.isValid())
- {
- m_m1Color = c;
- }
-}
-void PendulumGLWidget::setM2Color(const TQColor& c)
-{
- if (c.isValid())
- {
- m_m2Color = c;
- }
-}
-
-/* --------- protected methods ----------- */
-
-void PendulumGLWidget::initializeGL(void)
-{
- qglClearColor(TQColor(black)); // set color to clear the background
-
- glClearDepth(1); // depth buffer setup
- glEnable(GL_DEPTH_TEST); // depth testing
- glDepthFunc(GL_LEQUAL); // type of depth test
-
- glShadeModel(GL_SMOOTH); // smooth color shading in poygons
-
- // nice perspective calculation
- glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
-
- // set up the light
- glEnable(GL_LIGHTING);
- glEnable(GL_LIGHT0);
- glEnable(GL_LIGHT1);
-
- glMatrixMode(GL_MODELVIEW); // select modelview matrix
- glLoadIdentity();
- // set positon of light0
- GLfloat lightPos[4]=
- {lightR * sin(lightTheta) * sin(lightPhi),
- lightR * sin(lightTheta) * cos(lightPhi),
- lightR * cos(lightTheta),
- 0};
- glLightfv(GL_LIGHT0, GL_POSITION, lightPos);
- // set positon of light1
- lightPos[0] = lightR * sin(lightTheta) * sin(lightPhi+M_PI);
- lightPos[1] = lightR * sin(lightTheta) * cos(lightPhi+M_PI);
- glLightfv(GL_LIGHT1, GL_POSITION, lightPos);
-
- // only for lights #>0
- GLfloat spec[]={1,1,1,1};
- glLightfv(GL_LIGHT1, GL_SPECULAR, spec);
- glLightfv(GL_LIGHT1, GL_DIFFUSE, spec);
-
- // enable setting the material colour by glColor()
- glEnable(GL_COLOR_MATERIAL);
-
- GLfloat emi[4] = {.13, .13, .13, 1};
- glMaterialfv(GL_FRONT, GL_EMISSION, emi);
-}
-
-void PendulumGLWidget::paintGL(void)
-{
- // clear color and depth buffer
- glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
-
- glMatrixMode(GL_MODELVIEW); // select modelview matrix
-
- glLoadIdentity();
-
- static const GLfloat width = 2.0;
- static const GLfloat masswidth = 1.0;
- static const int noOfSlices = 20;
-
- // top axis, left (x>0)
- glTranslatef(0.5*width, 0, 0);
- glRotatef(90, 0, 1, 0);
- qglColor(m_barColor);
- gluCylinder(quadM1, 0.2, 0.2, 5, 10, 1);
- gluSphere(quadM1, 0.2, 10, 10);
- // top axis, right
- glLoadIdentity();
- glTranslatef(-0.5*width, 0, 0);
- glRotatef(-90, 0, 1, 0);
- gluCylinder(quadM1, 0.2, 0.2, 5, 10, 1);
- gluSphere(quadM1, 0.2, 10, 10);
- // 1. part, left
- glLoadIdentity();
- glRotatef(ang1, 1, 0, 0);
- glPushMatrix();
- glTranslatef(0.5*width, 0, -l1);
- gluCylinder(quadM1, 0.2, 0.2, l1, 10, 1);
- glPopMatrix();
-
- // 1. part, right
- glPushMatrix();
- glTranslatef(-0.5*width, 0, -l1);
- gluCylinder(quadM1, 0.2, 0.2, l1, 10, 1);
- // 1. part, bottom
- glRotatef(90, 0, 1, 0);
- gluSphere(quadM1, 0.2, 10, 10); // bottom corner 1
- gluCylinder(quadM1, 0.2, 0.2, width, 10, 1); // connection
- glTranslatef(0, 0, 0.5*(width-masswidth));
- qglColor(m_m1Color);
- gluCylinder(quadM1, sqrtm1, sqrtm1, masswidth, noOfSlices, 1); // mass 1
- gluQuadricOrientation(quadM1, GLU_INSIDE);
- gluDisk(quadM1, 0, sqrtm1, noOfSlices,1); // bottom of mass
- gluQuadricOrientation(quadM1, GLU_OUTSIDE);
- glTranslatef(0, 0, masswidth);
- gluDisk(quadM1, 0, sqrtm1, noOfSlices,1); // top of mass
-
- glTranslatef(0, 0, 0.5*(width-masswidth));
- qglColor(m_barColor);
- gluSphere(quadM1, 0.2, 10, 10); // bottom corner 2
- glPopMatrix();
-
- // 2. pendulum bar
- glLoadIdentity();
- glTranslatef(0, l1*std::sin(ang1*M_PI/180.), -l1*std::cos(ang1*M_PI/180.));
- glRotatef(ang2, 1, 0, 0);
- glTranslatef(0, 0, -l2);
- qglColor(m_barColor);
- gluCylinder(quadM1, 0.2, 0.2, l2, 10, 1);
-
- // mass 2
- glRotatef(90, 0, 1, 0);
- glTranslatef(0, 0, -0.5*masswidth);
- qglColor(m_m2Color);
- gluCylinder(quadM1, sqrtm2, sqrtm2, masswidth, noOfSlices, 1);
- gluQuadricOrientation(quadM1, GLU_INSIDE);
- gluDisk(quadM1, 0, sqrtm2, noOfSlices,1); // bottom of mass
- gluQuadricOrientation(quadM1, GLU_OUTSIDE);
- glTranslatef(0, 0, masswidth);
- gluDisk(quadM1, 0, sqrtm2, noOfSlices,1); // top of mass
-
- glFlush();
-}
-
-void PendulumGLWidget::resizeGL(int w, int h)
-{
- // Prevent a divide by zero
- if (h == 0) h = 1;
-
- // set the new view port
- glViewport(0, 0, static_cast<GLint>(w), static_cast<GLint>(h));
-
- // set up projection matrix
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity();
- // Perspective view
- gluPerspective(40.0f,
- static_cast<GLdouble>(w)/static_cast<GLdouble>(h),
- 1.0, 100.0f);
-
- // Viewing transformation, position for better view
- // Theta is polar angle 0<Theta<Pi
- gluLookAt(
- eyeR * sin(eyeTheta) * sin(eyePhi),
- eyeR * sin(eyeTheta) * cos(eyePhi),
- eyeR * cos(eyeTheta),
- 0,0,0,
- 0,0,1);
-}
-
-//-----------------------------------------------------------------------------
-// KPendulumSaver: screen saver class
-//-----------------------------------------------------------------------------
-
-KPendulumSaver::KPendulumSaver(WId id) :
- KScreenSaver(id),
- solver(0),
- m_massRatio(massRatioDefault),
- m_lengthRatio(lengthRatioDefault),
- m_g(gDefault),
- m_E(EDefault),
- m_persChangeInterval(persChangeIntervalDefault)
-{
- setEraseColor(black);
- erase(); // erase area
- glArea = new PendulumGLWidget(this); // create gl widget
- glArea->setEyePhi(eyePhiDefault);
-
- readSettings(); // read global settings into pars
- initData(); // init solver and glArea with read settings
-
- embed(glArea); // embed gl widget and resize it
- glArea->show(); // show gl widget
-
- // set up and start cyclic timer
- timer = new TQTimer(this);
- timer->start(deltaT, TRUE);
- connect(timer, TQT_SIGNAL(timeout()), this, TQT_SLOT(doTimeStep()));
-}
-
-KPendulumSaver::~KPendulumSaver()
-{
- // time, rotation are automatically deleted with parent KPendulumSaver
- delete solver;
-}
-
-
-void KPendulumSaver::readSettings()
-{
- // read configuration settings from config file
- TDEConfig *config = TDEGlobal::config();
- config->setGroup("Settings");
-
- // internal saver parameters are set to stored values or left at their
- // default values if stored values are out of range
- setMassRatio(
- config->readDoubleNumEntry(
- "mass ratio",
- KPendulumSaver::massRatioDefault));
- setLengthRatio(
- config->readDoubleNumEntry(
- "length ratio",
- KPendulumSaver::lengthRatioDefault));
- setG(
- config->readDoubleNumEntry(
- "g",
- KPendulumSaver::gDefault));
- setE(
- config->readDoubleNumEntry(
- "E",
- KPendulumSaver::EDefault));
- setPersChangeInterval(
- config->readUnsignedNumEntry(
- "perspective change interval",
- KPendulumSaver::persChangeIntervalDefault));
-
- // set the colours
- setBarColor(config->readColorEntry("bar color", &barColorDefault));
- setM1Color( config->readColorEntry("m1 color", &m1ColorDefault));
- setM2Color( config->readColorEntry("m2 color", &m2ColorDefault));
-}
-
-void KPendulumSaver::initData()
-{
- const double m1plusm2 = 2; // m1+m2
- const double m2 = m_massRatio * m1plusm2;
- const double m1 = m1plusm2 - m2;
- glArea->setMasses(m1, m2);
- glArea->setAngles(0, 0);
-
- const double l1plusl2 = 9; // l1+l2
- const double l2 = m_lengthRatio * l1plusl2;
- const double l1 = l1plusl2 - l2;
- glArea->setLengths(l1, l2);
-
- // kinetic energy of m2 and m1
- const double kin_energy = m_E * m_g * (l1*m1 + (m1+m2)*(l1+l2));
- // angular velocity for 1. and 2. pendulum
- const double qp = sqrt(2.*kin_energy/((m1+m2)*l1*l1 + m2*l2*l2 + m2*l1*l2));
-
- // assemble initial y for solver
- std::valarray<double> y(4);
- y[0] = 0; // q1
- y[1] = 0; // q2
- y[2] = (m1+m2)*l1*l1*qp + 0.5*m2*l1*l2*qp; // p1
- y[3] = m2*l2*l2*qp + 0.5*m2*l1*l2*qp; // p2
-
- // delete old solver
- if (solver!=0) delete solver;
- // init new solver
- solver = new PendulumOdeSolver(
- 0.0, // t
- 0.01, // first dt step size estimation
- y,
- 1e-5, // eps
- m1,
- m2,
- l1,
- l2,
- m_g);
-}
-
-
-void KPendulumSaver::setBarColor(const TQColor& c)
-{
- glArea->setBarColor(c);
-}
-TQColor KPendulumSaver::barColor(void) const
-{
- return glArea->barColor();
-}
-
-const TQColor KPendulumSaver::barColorDefault(255, 255, 127);
-
-void KPendulumSaver::setM1Color(const TQColor& c)
-{
- glArea->setM1Color(c);
-}
-TQColor KPendulumSaver::m1Color(void) const
-{
- return glArea->m1Color();
-}
-
-const TQColor KPendulumSaver::m1ColorDefault(170, 0, 127);
-
-void KPendulumSaver::setM2Color(const TQColor& c)
-{
- glArea->setM2Color(c);
-}
-TQColor KPendulumSaver::m2Color(void) const
-{
- return glArea->m2Color();
-}
-
-const TQColor KPendulumSaver::m2ColorDefault( 85, 170, 127);
-
-
-void KPendulumSaver::setMassRatio(const double& massRatio)
-{
- // range check is not neccessary in normal operation because validators check
- // the values at input. But the validators do not check for corrupted
- // settings read from disk.
- if (massRatio >= massRatioLimitLower
- && massRatio <= massRatioLimitUpper
- && m_massRatio != massRatio)
- {
- m_massRatio = massRatio;
- if (timer!=0)
- {
- initData();
- }
- }
-}
-
-const double KPendulumSaver::massRatioLimitLower = 0.01;
-const double KPendulumSaver::massRatioLimitUpper = 0.99;
-const double KPendulumSaver::massRatioDefault = 0.5;
-
-void KPendulumSaver::setLengthRatio(const double& lengthRatio)
-{
- if (lengthRatio >= lengthRatioLimitLower
- && lengthRatio <= lengthRatioLimitUpper
- && m_lengthRatio != lengthRatio)
- {
- m_lengthRatio = lengthRatio;
- if (timer!=0)
- {
- initData();
- }
- }
-}
-
-const double KPendulumSaver::lengthRatioLimitLower = 0.01;
-const double KPendulumSaver::lengthRatioLimitUpper = 0.99;
-const double KPendulumSaver::lengthRatioDefault = 0.5;
-
-void KPendulumSaver::setG(const double& g)
-{
- if (g >= gLimitLower
- && g <= gLimitUpper
- && m_g != g)
- {
- m_g = g;
- if (timer!=0)
- {
- initData();
- }
- }
-}
-
-const double KPendulumSaver::gLimitLower = 0.1;
-const double KPendulumSaver::gLimitUpper = 300.0;
-const double KPendulumSaver::gDefault = 40.0;
-
-void KPendulumSaver::setE(const double& E)
-{
- if (E >= ELimitLower
- && E <= ELimitUpper
- && m_E != E)
- {
- m_E = E;
- if (timer!=0)
- {
- initData();
- }
- }
-}
-
-const double KPendulumSaver::ELimitLower = 0.0;
-const double KPendulumSaver::ELimitUpper = 5.0;
-const double KPendulumSaver::EDefault = 1.2;
-
-void KPendulumSaver::setPersChangeInterval(
- const unsigned int& persChangeInterval)
-{
- if (persChangeInterval >= persChangeIntervalLimitLower
- && persChangeInterval <= persChangeIntervalLimitUpper
- && m_persChangeInterval != persChangeInterval)
- {
- m_persChangeInterval = persChangeInterval;
- // do not restart simulation here
- }
-}
-
-const double KPendulumSaver::eyePhiDefault = 0.25*M_PI;
-
-
-void KPendulumSaver::doTimeStep()
-{
- /* time (in seconds) of perspective change.
- * - t<0: no change yet
- * - t=0: change starts
- * - 0<t<moving time: change takes place
- * - t=moving time: end of the change */
- static double persChangeTime = -5;
-
- // integrate a step ahead
- solver->integrate(0.001*deltaT);
-
- // read new y from solver
- const std::valarray<double> y = solver->Y();
-
- // tell glArea the new coordinates/angles of the pendulum
- glArea->setAngles(y[0], y[1]);
-
- // handle perspective change
- persChangeTime += 0.001*deltaT;
- if (persChangeTime > 0)
- {
- // phi value at the start of a perspective change
- static double eyePhi0 = eyePhiDefault;
- // phi value at the end of a perspective change
- static double eyePhi1 = 0.75*M_PI;
- static double deltaEyePhi = eyePhi1-eyePhi0;
-
- // movement acceleration/deceleration
- const double a = 3;
- // duration of the change period
- const double movingTime = 2.*sqrt(fabs(deltaEyePhi)/a);
-
- // new current phi of eye
- double eyePhi = persChangeTime < 0.5*movingTime ?
- // accelerating phase
- eyePhi0 + (deltaEyePhi>0?1:-1)
- * 0.5*a*persChangeTime*persChangeTime:
- // decellerating phase
- eyePhi1 - (deltaEyePhi>0?1:-1)
- * 0.5*a*(movingTime-persChangeTime)*(movingTime-persChangeTime);
-
- if (persChangeTime>movingTime)
- { // perspective change has finished
- // set new time till next change
- persChangeTime = -double(m_persChangeInterval);
- eyePhi0 = eyePhi = eyePhi1;
- // find new phi value with angleLimit < phi < Pi-angleLimit or
- // Pi+angleLimit < phi < 2*Pi-angleLimit
- const double angleLimit = M_PI*0.2;
- for (eyePhi1 = 0;
- eyePhi1<angleLimit
- || (eyePhi1<M_PI+angleLimit && eyePhi1>M_PI-angleLimit)
- || eyePhi1>2*M_PI-angleLimit;
- eyePhi1 = double(rand())/RAND_MAX * 2*M_PI)
- {}
- // new delta phi for next change
- deltaEyePhi = eyePhi1 - eyePhi0;
- // find shortest perspective change
- if (deltaEyePhi < -M_PI) deltaEyePhi += 2*M_PI;
- }
-
- glArea->setEyePhi(eyePhi); // set new perspective
- }
-
- glArea->updateGL(); // repaint scenery
- timer->start(deltaT, TRUE); // restart timer
-}
-
-// public slot of KPendulumSaver, forward resize event to public slot of glArea
-// to allow the resizing of the gl area withing the setup dialog
-void KPendulumSaver::resizeGlArea(TQResizeEvent* e)
-{
- glArea->resize(e->size());
-}
-
-//-----------------------------------------------------------------------------
-// KPendulumSetup: dialog to setup screen saver parameters
-//-----------------------------------------------------------------------------
-
-KPendulumSetup::KPendulumSetup(TQWidget* parent, const char* name)
- : KPendulumSetupUi(parent, name),
- // create saver and give it the WinID of the preview area
- saver(new KPendulumSaver(preview->winId()))
-{
- // the dialog should block, no other control center input should be possible
- // until the dialog is closed
- setModal(TRUE);
-
- // create input validators
- mEdit->setValidator(new TQDoubleValidator(
- KPendulumSaver::massRatioLimitLower,
- KPendulumSaver::massRatioLimitUpper,
- 5, mEdit));
- lEdit->setValidator(new TQDoubleValidator(
- KPendulumSaver::lengthRatioLimitLower,
- KPendulumSaver::lengthRatioLimitUpper,
- 5, lEdit));
- gEdit->setValidator(new TQDoubleValidator(
- KPendulumSaver::gLimitLower,
- KPendulumSaver::gLimitUpper,
- 5, gEdit));
- eEdit->setValidator(new TQDoubleValidator(
- KPendulumSaver::ELimitLower,
- KPendulumSaver::ELimitUpper,
- 5, eEdit));
-
- // set input limits for the perspective change interval time
- persSpinBox->setMinValue(KPendulumSaver::persChangeIntervalLimitLower);
- persSpinBox->setMaxValue(KPendulumSaver::persChangeIntervalLimitUpper);
-
- // set tool tips of editable fields
- TQToolTip::add(
- mEdit,
- i18n("Ratio of 2nd mass to sum of both masses.\nValid values from %1 to %2.")
- .arg(KPendulumSaver::massRatioLimitLower, 0, 'f', 2)
- .arg(KPendulumSaver::massRatioLimitUpper, 0, 'f', 2));
- TQToolTip::add(
- lEdit,
- i18n("Ratio of 2nd pendulum part length to the sum of both part lengths.\nValid values from %1 to %2.")
- .arg(KPendulumSaver::lengthRatioLimitLower, 0, 'f', 2)
- .arg(KPendulumSaver::lengthRatioLimitUpper, 0, 'f', 2));
- TQToolTip::add(
- gEdit,
- i18n("Gravitational constant in arbitrary units.\nValid values from %1 to %2.")
- .arg(KPendulumSaver::gLimitLower, 0, 'f', 2)
- .arg(KPendulumSaver::gLimitUpper, 0, 'f', 2));
- TQToolTip::add(
- eEdit,
- i18n("Energy in units of the maximum potential energy of the given configuration.\nValid values from %1 to %2.")
- .arg(KPendulumSaver::ELimitLower, 0, 'f', 2)
- .arg(KPendulumSaver::ELimitUpper, 0, 'f', 2));
- TQToolTip::add(
- persSpinBox,
- i18n("Time in seconds after which a random perspective change occurs.\nValid values from %1 to %2.")
- .arg(KPendulumSaver::persChangeIntervalLimitLower)
- .arg(KPendulumSaver::persChangeIntervalLimitUpper));
-
- // init preview area
- preview->setBackgroundColor(black);
- preview->show(); // otherwise saver does not get correct size
-
- // read settings from saver and update GUI elements with these values, saver
- // has read settings in its constructor
-
- // set editable fields with stored values as defaults
- TQString text;
- text.setNum(saver->massRatio());
- mEdit->setText(text);
- text.setNum(saver->lengthRatio());
- lEdit->setText(text);
- text.setNum(saver->g());
- gEdit->setText(text);
- text.setNum(saver->E());
- eEdit->setText(text);
-
- persSpinBox->setValue(saver->persChangeInterval());
-
- barColorButton->setPaletteBackgroundColor(saver->barColor());
- m1ColorButton->setPaletteBackgroundColor(saver->m1Color());
- m2ColorButton->setPaletteBackgroundColor(saver->m2Color());
-
- // if the preview area is resized it emmits the resized() event which is
- // caught by the saver. The embedded GlArea is resized to fit into the
- // preview area.
- connect(preview, TQT_SIGNAL(resized(TQResizeEvent*)),
- saver, TQT_SLOT(resizeGlArea(TQResizeEvent*)));
-}
-
-KPendulumSetup::~KPendulumSetup()
-{
- delete saver;
-}
-
-// Ok pressed - save settings and exit
-void KPendulumSetup::okButtonClickedSlot()
-{
- TDEConfig* config = TDEGlobal::config();
- config->setGroup("Settings");
-
- config->writeEntry("mass ratio", saver->massRatio());
- config->writeEntry("length ratio", saver->lengthRatio());
- config->writeEntry("g", saver->g());
- config->writeEntry("E", saver->E());
- config->writeEntry("perspective change interval",
- saver->persChangeInterval());
- config->writeEntry("bar color", saver->barColor());
- config->writeEntry("m1 color", saver->m1Color());
- config->writeEntry("m2 color", saver->m2Color());
-
- config->sync();
- accept();
-}
-
-void KPendulumSetup::aboutButtonClickedSlot()
-{
- KMessageBox::about(this, i18n("\
-<h3>KPendulum Screen Saver for KDE</h3>\
-<p>Simulation of a two-part pendulum</p>\
-<p>Copyright (c) Georg&nbsp;Drenkhahn 2004</p>\
-<p><tt>[email protected]</tt></p>"));
-}
-
-void KPendulumSetup::mEditLostFocusSlot(void)
-{
- if (mEdit->hasAcceptableInput())
- {
- saver->setMassRatio(mEdit->text().toDouble());
- }
- else
- { // write current setting back into input field
- TQString text;
- text.setNum(saver->massRatio());
- mEdit->setText(text);
- }
-}
-void KPendulumSetup::lEditLostFocusSlot(void)
-{
- if (lEdit->hasAcceptableInput())
- {
- saver->setLengthRatio(lEdit->text().toDouble());
- }
- else
- { // write current setting back into input field
- TQString text;
- text.setNum(saver->lengthRatio());
- lEdit->setText(text);
- }
-}
-void KPendulumSetup::gEditLostFocusSlot(void)
-{
- if (gEdit->hasAcceptableInput())
- {
- saver->setG(gEdit->text().toDouble());
- }
- else
- { // write current setting back into input field
- TQString text;
- text.setNum(saver->g());
- gEdit->setText(text);
- }
-}
-void KPendulumSetup::eEditLostFocusSlot(void)
-{
- if (eEdit->hasAcceptableInput())
- {
- saver->setE(eEdit->text().toDouble());
- }
- else
- { // write current setting back into input field
- TQString text;
- text.setNum(saver->E());
- eEdit->setText(text);
- }
-}
-void KPendulumSetup::persChangeEnteredSlot(int t)
-{
- saver->setPersChangeInterval(t);
-}
-
-void KPendulumSetup::barColorButtonClickedSlot(void)
-{
- TQColor color = TQColorDialog::getColor(
- saver->barColor(), this, "bar color dialog");
- if (color.isValid())
- {
- saver->setBarColor(color);
- barColorButton->setPaletteBackgroundColor(color);
- }
-}
-void KPendulumSetup::m1ColorButtonClickedSlot(void)
-{
- TQColor color = TQColorDialog::getColor(
- saver->m1Color(), this, "mass 1 color dialog");
- if (color.isValid())
- {
- saver->setM1Color(color);
- m1ColorButton->setPaletteBackgroundColor(color);
- }
-}
-void KPendulumSetup::m2ColorButtonClickedSlot(void)
-{
- TQColor color = TQColorDialog::getColor(
- saver->m2Color(), this, "mass 2 color dialog");
- if (color.isValid())
- {
- saver->setM2Color(color);
- m2ColorButton->setPaletteBackgroundColor(color);
- }
-}
diff --git a/kscreensaver/kdesavers/pendulum.h b/kscreensaver/kdesavers/pendulum.h
deleted file mode 100644
index 05998d9f..00000000
--- a/kscreensaver/kdesavers/pendulum.h
+++ /dev/null
@@ -1,391 +0,0 @@
-//============================================================================
-//
-// KPendulum screen saver for KDE
-// $Id$
-// Copyright (C) 2004 Georg Drenkhahn
-//
-// This file is free software; you can redistribute it and/or modify it under
-// the terms of the GNU General Public License version 2 as published by the
-// Free Software Foundation.
-//
-//============================================================================
-
-#ifndef __PENDULUM_H__
-#define __PENDULUM_H__
-
-// STL headers
-#include <valarray>
-// TQt headers
-#include <tqwidget.h>
-#include <tqtimer.h>
-#include <tqgl.h>
-// GL headers
-#include <GL/glu.h>
-#include <GL/gl.h>
-// KDE headers
-#include <kscreensaver.h>
-
-#include "vec3.h"
-#include "rkodesolver.h"
-
-// KPendulumSetupUi
-#include "pendulumcfg.h"
-
-//--------------------------------------------------------------------
-
-/** @brief ODE solver for the Pendulum equations */
-class PendulumOdeSolver : public RkOdeSolver<double>
-{
- public:
- /** @brief Constuctor for the RK solver of the pendulum equation of motion
- * @param t initial time in seconds
- * @param dt initial time increment in seconds, just a hint for solver
- * @param y generalized coordinates of pendulum system
- * @param eps relative precision
- * @param m1 mass of upper pendulum
- * @param m2 mass of lower pendulum
- * @param l1 length of upper pendulum
- * @param l2 length of lower pendulum
- * @param g gravitational constant */
- PendulumOdeSolver(
- const double &t,
- const double &dt,
- std::valarray<double> &y,
- const double &eps,
- const double &m1,
- const double &m2,
- const double &l1,
- const double &l2,
- const double &g
- );
-
- protected:
- /** @brief ODE function for the pendulum equation of motion system
- * @param x time
- * @param y generalized coordinates of pendulum system
- * @return derivation dy/dx */
- std::valarray<double>
- f(const double &x, const std::valarray<double> &y) const;
-
- private:
- /** These private variables contain constants for faster numeric calculation.
- * They are derived from the constructor arguments m1,m2,l1,l2,g. */
- const double A, B1, B, C, D, E, M;
-};
-
-
-//--------------------------------------------------------------------
-
-/** @brief GL widget class for the KPendulum screen saver
- *
- * Class implements TQGLWidget to display the KPendulum screen saver. */
-class PendulumGLWidget : public TQGLWidget
-{
- Q_OBJECT
-
-
- public:
- /** @brief Constructor of KPendulum's GL widget
- * @param parent parent widget, passed to TQGLWidget's constructor
- * @param name name of widget, passed to TQGLWidget's constructor */
- PendulumGLWidget(TQWidget* parent=0, const char* name=0);
- /** @brief Destructor of KPendulum's GL widget */
- ~PendulumGLWidget(void);
-
- /** @brief Set phi angle of viewpoint
- * @param phi angle in sterad */
- void setEyePhi(double phi);
- /** @brief Set angles of pendulum configuration
- * @param q1 angle of 1. pendulum in sterad
- * @param q2 angle of 2. pendulum in sterad */
- void setAngles(const double& q1, const double& q2);
- /** @brief Set masses of pendulum configuration
- * @param m1 mass of 1. pendulum
- * @param m2 mass of 2. pendulum */
- void setMasses(const double& m1, const double& m2);
- /** @brief Set lengths of pendulum configuration
- * @param l1 length of 1. pendulum
- * @param l2 length of 2. pendulum */
- void setLengths(const double& l1, const double& l2);
-
- /* accessors for colour settings */
-
- /** @brief set color of the bars
- * @param c color */
- void setBarColor(const TQColor& c);
- /** @brief get color of the bars
- * @return color */
- inline TQColor barColor(void) const {return m_barColor;}
- /** @brief set color of mass 1
- * @param c color */
- void setM1Color(const TQColor& c);
- /** @brief get color of mass 1
- * @return color */
- inline TQColor m1Color(void) const {return m_m1Color;}
- /** @brief set color of mass 2
- * @param c color */
- void setM2Color(const TQColor& c);
- /** @brief get color of mass 2
- * @return color */
- inline TQColor m2Color(void) const {return m_m2Color;}
-
- protected:
- /** paint the GL view */
- virtual void paintGL();
- /** resize the gl view */
- virtual void resizeGL(int w, int h);
- /** setup the GL enviroment */
- virtual void initializeGL();
-
- private: // Private attributes
- /** Eye position distance from coordinate zero point */
- GLfloat eyeR;
- /** Eye position theta angle from z axis in sterad */
- double eyeTheta;
- /** Eye position phi angle (longitude) in sterad */
- double eyePhi;
- /** Light position distance from coordinate zero point */
- GLfloat lightR;
- /** Light position theta angle from z axis in sterad */
- double lightTheta;
- /** Light position phi angle (longitude) in sterad */
- double lightPhi;
-
- /** 1. pendulum's angle, degree */
- GLfloat ang1;
- /** 2. pendulum's angle, degree */
- GLfloat ang2;
-
- /** 1. pendulum's square root of mass */
- GLfloat sqrtm1;
- /** 2. pendulum's square root of mass */
- GLfloat sqrtm2;
-
- /** 1. pendulum's length */
- GLfloat l1;
- /** 2. pendulum's length */
- GLfloat l2;
-
- /** Pointer to a quadric object used in the rendering function paintGL() */
- GLUquadricObj* const quadM1;
-
- /** color of the pendulum bars */
- TQColor m_barColor;
- /** color of the 1. mass */
- TQColor m_m1Color;
- /** color of the 2. mass */
- TQColor m_m2Color;
-};
-
-//--------------------------------------------------------------------
-
-/** @brief Main class of the KPendulum screen saver
- *
- * This class implements KScreenSaver for the KPendulum screen saver. */
-class KPendulumSaver : public KScreenSaver
-{
- Q_OBJECT
-
-
- public:
- /** @brief Constructor of the KPendulum screen saver object
- * @param drawable Id of the window in which the screen saver is drawed
- *
- * Initial settings are read from disk, the GL widget is set up and displayed
- * and the eq. of motion solver is started. */
- KPendulumSaver(WId drawable);
- /** @brief Destructor of the KPendulum screen saver object
- *
- * Only KPendulumSaver::solver is destoyed. */
- ~KPendulumSaver();
- /** read the saved settings from disk */
- void readSettings();
- /** init physical quantities, set up the GL area and (re)start the ode
- * solver. Called if new parameters are specified in the setup dialog and at
- * startup. */
- void initData();
-
- /* accessors for PendulumGLWidget member variables */
-
- /** Set the displayed bar color of the pendulum */
- void setBarColor(const TQColor& c);
- /** Get the displayed bar color of the pendulum */
- TQColor barColor(void) const;
-
- static const TQColor barColorDefault;
-
- /** Set the displayed color of the 1. pendulum mass */
- void setM1Color(const TQColor& c);
- /** Get the displayed color of the 1. pendulum mass */
- TQColor m1Color(void) const;
-
- static const TQColor m1ColorDefault;
-
- /** Set the displayed color of the 2. pendulum mass */
- void setM2Color(const TQColor& c);
- /** Get the displayed color of the 2. pendulum mass */
- TQColor m2Color(void) const;
-
- static const TQColor m2ColorDefault;
-
- /* accessors for own member variables */
-
- /** Set the mass ratio of the pendulum system. @sa
- * KPendulumSaver::m_massRatio */
- void setMassRatio(const double& massRatio);
- /** Get the mass ratio of the pendulum system. @sa
- * KPendulumSaver::m_massRatio */
- inline double massRatio(void) const {return m_massRatio;}
-
- // lower, upper limits (inclusive) and default values for the setup
- // parameters
- static const double massRatioLimitUpper;
- static const double massRatioLimitLower;
- static const double massRatioDefault;
-
- /** Set the length ratio of the pendulum system. @sa
- * KPendulumSaver::m_lengthRatio */
- void setLengthRatio(const double& lengthRatio);
- /** Get the length ratio of the pendulum system. @sa
- * KPendulumSaver::m_lengthRatio */
- inline double lengthRatio(void) const {return m_lengthRatio;}
-
- static const double lengthRatioLimitLower;
- static const double lengthRatioLimitUpper;
- static const double lengthRatioDefault;
-
- /** Set the gravitational constant. @sa KPendulumSaver::m_g */
- void setG(const double& g);
- /** Get the gravitational constant. @sa KPendulumSaver::m_g */
- inline double g(void) const {return m_g;}
-
- static const double gLimitLower;
- static const double gLimitUpper;
- static const double gDefault;
-
- /** Set the total energy. @sa KPendulumSaver::m_E */
- void setE(const double& E);
- /** Get the total energy. @sa KPendulumSaver::m_E */
- inline double E(void) const {return m_E;}
-
- static const double ELimitLower;
- static const double ELimitUpper;
- static const double EDefault;
-
- /** Set the time interval for the periodic perspective change. @sa
- * KPendulumSaver::m_persChangeInterval */
- void setPersChangeInterval(const unsigned int& persChangeInterval);
- /** Get the time interval for the periodic perspective change. @sa
- * KPendulumSaver::m_persChangeInterval */
- inline unsigned int persChangeInterval(void) const
- {return m_persChangeInterval;}
-
- static const unsigned int persChangeIntervalLimitLower = 5;
- static const unsigned int persChangeIntervalLimitUpper = 600;
- static const unsigned int persChangeIntervalDefault = 15;
-
- public slots:
- /** slot is called if integration should proceed by ::deltaT */
- void doTimeStep();
- /** slot is called if setup dialog changes in size and the GL are should be
- * adjusted */
- void resizeGlArea(TQResizeEvent* e);
-
- private:
- /** The ode solver which is used to integrate the equations of motion */
- PendulumOdeSolver* solver;
- /** Gl widget of simulation */
- PendulumGLWidget* glArea;
- /** Timer for the real time integration of the eqs. of motion */
- TQTimer* timer;
-
- /** Time step size for the integration in milliseconds. 20 ms corresponds to
- * a frame rate of 50 fps. */
- static const unsigned int deltaT = 20;
- static const double eyePhiDefault;
-
- // saved settings
-
- /** Mass ratio m2/(m1+m2) of the pendulum masses. Value is determined by the
- * setup dialog. Variable is accessed by setMassRatio() and massRatio(). */
- double m_massRatio;
- /** Length ratio l2/(l1+l2) of the pendulums. Value is determined by the
- * setup dialog. Variable is accessed by setLengthRatio() and
- * lengthRatio(). */
- double m_lengthRatio;
- /** Gravitational constant (in arbitrary units). Value is determined by the
- * setup dialog. Variable is accessed by setG() and g(). */
- double m_g;
- /** Total energy of the system in units of the maximum possible potential
- * energy. Value is determined by the setup dialog. Variable is accessed by
- * setE() and E(). */
- double m_E;
- /** Time interval after which a new perspective changed happens. Value is
- * determined by the setup dialog. Variable is accessed by
- * setPersChangeInterval() and persChangeInterval(). */
- unsigned int m_persChangeInterval;
-};
-
-//--------------------------------------------------------------------
-
-/** @brief KPendulum screen saver setup dialog.
- *
- * This class handles the KPendulum screen saver setup dialog. */
-class KPendulumSetup : public KPendulumSetupUi
-{
- Q_OBJECT
-
-
- public:
- /** @brief Constructor for the KPendulum screen saver setup dialog
- * @param parent Pointer to the parent widget, passed to KPendulumSetupUi
- * @param name Widget name
- *
- * The dialog box is set up and the screen saver object KPendulumSetup::saver
- * is instantiated. */
- KPendulumSetup(TQWidget* parent = 0, const char* name = 0);
- /** @brief Destructor of the KPendulum screen saver setup dialog
- *
- * Only KPendulumSetup::saver is deleted. */
- ~KPendulumSetup(void);
-
- public slots:
- /** slot for the "OK" button: save settings and exit */
- void okButtonClickedSlot(void);
- /** slot for the "About" button: show the About dialog */
- void aboutButtonClickedSlot(void);
-
- /** slot is called if the mass ratio edit field looses its focus. If the
- * input is acceptable KPendulumSaver::setMassRatio() is called. */
- void mEditLostFocusSlot(void);
- /** slot is called if the length ratio edit field looses its focus. If the
- * input is acceptable KPendulumSaver::setLengthRatio() is called. */
- void lEditLostFocusSlot(void);
- /** slot is called if the gravitational constant edit field looses its focus.
- * If the input is acceptable KPendulumSaver::setG() is called. */
- void gEditLostFocusSlot(void);
- /** slot is called if the energy edit field looses its focus. If the input
- * is acceptable KPendulumSaver::setE() is called. */
- void eEditLostFocusSlot(void);
- /** slot is called if the perspective change interval spin box changed. If
- * the input is acceptable KPendulumSaver::setPersChangeInterval() is
- * called. */
- void persChangeEnteredSlot(int t);
-
- /** slot is called if the bar color button was clicked. A color dialog is
- * opened and the result is given to KPendulumSaver::setBarColor(). */
- void barColorButtonClickedSlot(void);
- /** slot is called if the mass 1 color button was clicked. A color dialog is
- * opened and the result is given to KPendulumSaver::setM1Color(). */
- void m1ColorButtonClickedSlot(void);
- /** slot is called if the mass 2 color button was clicked. A color dialog is
- * opened and the result is given to KPendulumSaver::setM2Color(). */
- void m2ColorButtonClickedSlot(void);
-
- private:
- /** Pointer to the screen saver object. Its member KPendulumSaver::glArea is
- * displayed in the preview area */
- KPendulumSaver* saver;
-};
-
-#endif
diff --git a/kscreensaver/kdesavers/pendulumcfg.ui b/kscreensaver/kdesavers/pendulumcfg.ui
deleted file mode 100644
index 4fa13d4f..00000000
--- a/kscreensaver/kdesavers/pendulumcfg.ui
+++ /dev/null
@@ -1,566 +0,0 @@
-<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
-<class>KPendulumSetupUi</class>
-<widget class="TQDialog">
- <property name="name">
- <cstring>KPendulumSetupUi</cstring>
- </property>
- <property name="geometry">
- <rect>
- <x>0</x>
- <y>0</y>
- <width>474</width>
- <height>349</height>
- </rect>
- </property>
- <property name="sizePolicy">
- <sizepolicy>
- <hsizetype>3</hsizetype>
- <vsizetype>3</vsizetype>
- <horstretch>2</horstretch>
- <verstretch>2</verstretch>
- </sizepolicy>
- </property>
- <property name="minimumSize">
- <size>
- <width>0</width>
- <height>0</height>
- </size>
- </property>
- <property name="maximumSize">
- <size>
- <width>1200</width>
- <height>900</height>
- </size>
- </property>
- <property name="baseSize">
- <size>
- <width>400</width>
- <height>250</height>
- </size>
- </property>
- <property name="caption">
- <string>KPendulum Setup</string>
- </property>
- <vbox>
- <property name="name">
- <cstring>unnamed</cstring>
- </property>
- <property name="resizeMode">
- <enum>Minimum</enum>
- </property>
- <widget class="TQLayoutWidget">
- <property name="name">
- <cstring>layout18</cstring>
- </property>
- <hbox>
- <property name="name">
- <cstring>unnamed</cstring>
- </property>
- <widget class="TQLayoutWidget">
- <property name="name">
- <cstring>layout16</cstring>
- </property>
- <vbox>
- <property name="name">
- <cstring>unnamed</cstring>
- </property>
- <widget class="TQLayoutWidget">
- <property name="name">
- <cstring>layout15</cstring>
- </property>
- <hbox>
- <property name="name">
- <cstring>unnamed</cstring>
- </property>
- <widget class="TQLabel">
- <property name="name">
- <cstring>textLabel1</cstring>
- </property>
- <property name="frameShape">
- <enum>NoFrame</enum>
- </property>
- <property name="frameShadow">
- <enum>Plain</enum>
- </property>
- <property name="text">
- <string>&lt;p align="center"&gt;
-m&lt;sub&gt;2&lt;/sub&gt;&lt;br&gt;
------------&lt;br&gt;
-m&lt;sub&gt;1&lt;/sub&gt;+m&lt;sub&gt;2&lt;/sub&gt;
-&lt;/p&gt;</string>
- </property>
- </widget>
- <widget class="TQLineEdit">
- <property name="name">
- <cstring>mEdit</cstring>
- </property>
- <property name="sizePolicy">
- <sizepolicy>
- <hsizetype>0</hsizetype>
- <vsizetype>0</vsizetype>
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="maximumSize">
- <size>
- <width>60</width>
- <height>32767</height>
- </size>
- </property>
- <property name="maxLength">
- <number>5</number>
- </property>
- </widget>
- </hbox>
- </widget>
- <widget class="TQLayoutWidget">
- <property name="name">
- <cstring>layout14</cstring>
- </property>
- <hbox>
- <property name="name">
- <cstring>unnamed</cstring>
- </property>
- <widget class="TQLabel">
- <property name="name">
- <cstring>textLabel2</cstring>
- </property>
- <property name="text">
- <string>&lt;p align="center"&gt;
-l&lt;sub&gt;2&lt;/sub&gt;&lt;br&gt;
-------&lt;br&gt;
-l&lt;sub&gt;1&lt;/sub&gt;+l&lt;sub&gt;2&lt;/sub&gt;
-&lt;/p&gt;</string>
- </property>
- </widget>
- <widget class="TQLineEdit">
- <property name="name">
- <cstring>lEdit</cstring>
- </property>
- <property name="sizePolicy">
- <sizepolicy>
- <hsizetype>0</hsizetype>
- <vsizetype>0</vsizetype>
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="maximumSize">
- <size>
- <width>60</width>
- <height>32767</height>
- </size>
- </property>
- <property name="maxLength">
- <number>5</number>
- </property>
- </widget>
- </hbox>
- </widget>
- <widget class="TQLayoutWidget">
- <property name="name">
- <cstring>layout13</cstring>
- </property>
- <hbox>
- <property name="name">
- <cstring>unnamed</cstring>
- </property>
- <widget class="TQLabel">
- <property name="name">
- <cstring>textLabel3</cstring>
- </property>
- <property name="text">
- <string>g</string>
- </property>
- <property name="alignment">
- <set>WordBreak|AlignCenter</set>
- </property>
- </widget>
- <widget class="TQLineEdit">
- <property name="name">
- <cstring>gEdit</cstring>
- </property>
- <property name="sizePolicy">
- <sizepolicy>
- <hsizetype>0</hsizetype>
- <vsizetype>0</vsizetype>
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="maximumSize">
- <size>
- <width>60</width>
- <height>32767</height>
- </size>
- </property>
- <property name="maxLength">
- <number>5</number>
- </property>
- </widget>
- </hbox>
- </widget>
- <widget class="TQLayoutWidget">
- <property name="name">
- <cstring>layout13_2</cstring>
- </property>
- <hbox>
- <property name="name">
- <cstring>unnamed</cstring>
- </property>
- <widget class="TQLabel">
- <property name="name">
- <cstring>textLabel4</cstring>
- </property>
- <property name="text">
- <string>E</string>
- </property>
- <property name="alignment">
- <set>WordBreak|AlignCenter</set>
- </property>
- </widget>
- <widget class="TQLineEdit">
- <property name="name">
- <cstring>eEdit</cstring>
- </property>
- <property name="sizePolicy">
- <sizepolicy>
- <hsizetype>0</hsizetype>
- <vsizetype>0</vsizetype>
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="maximumSize">
- <size>
- <width>60</width>
- <height>32767</height>
- </size>
- </property>
- <property name="maxLength">
- <number>5</number>
- </property>
- </widget>
- </hbox>
- </widget>
- <widget class="TQLayoutWidget">
- <property name="name">
- <cstring>layout18</cstring>
- </property>
- <hbox>
- <property name="name">
- <cstring>unnamed</cstring>
- </property>
- <widget class="TQLabel">
- <property name="name">
- <cstring>textLabel2_2</cstring>
- </property>
- <property name="text">
- <string>Perspective&lt;br&gt;
-Change [s]</string>
- </property>
- <property name="toolTip" stdset="0">
- <string>specify the time in seconds after which a random perspective change occurs</string>
- </property>
- </widget>
- <widget class="TQSpinBox">
- <property name="name">
- <cstring>persSpinBox</cstring>
- </property>
- <property name="sizePolicy">
- <sizepolicy>
- <hsizetype>0</hsizetype>
- <vsizetype>0</vsizetype>
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="minimumSize">
- <size>
- <width>60</width>
- <height>0</height>
- </size>
- </property>
- <property name="maximumSize">
- <size>
- <width>60</width>
- <height>32767</height>
- </size>
- </property>
- </widget>
- </hbox>
- </widget>
- <widget class="TQLayoutWidget">
- <property name="name">
- <cstring>layout15</cstring>
- </property>
- <hbox>
- <property name="name">
- <cstring>unnamed</cstring>
- </property>
- <widget class="TQPushButton">
- <property name="name">
- <cstring>barColorButton</cstring>
- </property>
- <property name="maximumSize">
- <size>
- <width>40</width>
- <height>32767</height>
- </size>
- </property>
- <property name="text">
- <string>Bars</string>
- </property>
- </widget>
- <widget class="TQPushButton">
- <property name="name">
- <cstring>m1ColorButton</cstring>
- </property>
- <property name="maximumSize">
- <size>
- <width>40</width>
- <height>32767</height>
- </size>
- </property>
- <property name="text">
- <string>M1</string>
- </property>
- </widget>
- <widget class="TQPushButton">
- <property name="name">
- <cstring>m2ColorButton</cstring>
- </property>
- <property name="maximumSize">
- <size>
- <width>40</width>
- <height>32767</height>
- </size>
- </property>
- <property name="text">
- <string>M2</string>
- </property>
- </widget>
- </hbox>
- </widget>
- <spacer>
- <property name="name">
- <cstring>spacer4</cstring>
- </property>
- <property name="orientation">
- <enum>Vertical</enum>
- </property>
- <property name="sizeType">
- <enum>MinimumExpanding</enum>
- </property>
- <property name="sizeHint">
- <size>
- <width>20</width>
- <height>0</height>
- </size>
- </property>
- </spacer>
- </vbox>
- </widget>
- <widget class="SsPreviewArea">
- <property name="name">
- <cstring>preview</cstring>
- </property>
- <property name="sizePolicy">
- <sizepolicy>
- <hsizetype>7</hsizetype>
- <vsizetype>7</vsizetype>
- <horstretch>2</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="minimumSize">
- <size>
- <width>200</width>
- <height>150</height>
- </size>
- </property>
- </widget>
- </hbox>
- </widget>
- <widget class="TQLayoutWidget">
- <property name="name">
- <cstring>layout19</cstring>
- </property>
- <hbox>
- <property name="name">
- <cstring>unnamed</cstring>
- </property>
- <spacer>
- <property name="name">
- <cstring>spacer2</cstring>
- </property>
- <property name="orientation">
- <enum>Horizontal</enum>
- </property>
- <property name="sizeType">
- <enum>Expanding</enum>
- </property>
- <property name="sizeHint">
- <size>
- <width>66</width>
- <height>31</height>
- </size>
- </property>
- </spacer>
- <widget class="TQPushButton">
- <property name="name">
- <cstring>OkButton</cstring>
- </property>
- <property name="text">
- <string>&amp;OK</string>
- </property>
- <property name="default">
- <bool>true</bool>
- </property>
- </widget>
- <widget class="TQPushButton">
- <property name="name">
- <cstring>CancelButton</cstring>
- </property>
- <property name="text">
- <string>&amp;Cancel</string>
- </property>
- </widget>
- <widget class="TQPushButton">
- <property name="name">
- <cstring>AboutButton</cstring>
- </property>
- <property name="text">
- <string>&amp;About</string>
- </property>
- </widget>
- <spacer>
- <property name="name">
- <cstring>spacer3</cstring>
- </property>
- <property name="orientation">
- <enum>Horizontal</enum>
- </property>
- <property name="sizeType">
- <enum>Expanding</enum>
- </property>
- <property name="sizeHint">
- <size>
- <width>65</width>
- <height>31</height>
- </size>
- </property>
- </spacer>
- </hbox>
- </widget>
- </vbox>
-</widget>
-<customwidgets>
- <customwidget>
- <class>SsPreviewArea</class>
- <header location="global">sspreviewarea.h</header>
- <sizehint>
- <width>-1</width>
- <height>1</height>
- </sizehint>
- <container>0</container>
- <sizepolicy>
- <hordata>5</hordata>
- <verdata>5</verdata>
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- <pixmap>image0</pixmap>
- </customwidget>
-</customwidgets>
-<images>
- <image name="image0">
- <data format="PNG" length="1002">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b000003b149444154388dad945f4c5b551cc73fe7dc4b7b4bcba0762d45c43114323599ee6192609c51d883892ce083f1718b3ebb185f8dc91e972cf39d2d2a2f1af664b6f1e0fe3863a0718969700eb0c52142da0242a1bd6d696f7bcff101585203ceb8fd9ece39f99dcff9fe7edf939f88c562ec465f5f9fe609442c161362173c3e3eae7b7a7ac8e7f36432196cdbfe4f907c3e4f2291201e8fe338cec3737357e9e8e828aded1e229d650e1f2d51754b082110124c13a4dc5ea341eb9dc284c0558a853f3ce8cb0677ef500fde7d39d2596679e326597b8e9abb85d7a770ab16ab6983ec5a05b487a70e36f0f4e10afe408d6a558310980108478dba4a1e8233990c5d474b64ed39aa3a8fe5f3317fbf81dbd70bccfeb205947632fd74f6589c1c6ea2f70d03a58ba0c1f2c9bdc1b66de3b8256a6e11cbe7e3ee1d181b590124fe2693aeee08d223c82c3a2c24b7b874bec8f26288774f7bd054504aef0dde6e99c0eb83f9fb266323cb80a27fb0958141836044605a2ee5523393371cc646fee2da37195aa35d0c0c5b4859ac03d7e91712dcaac5adab3650a3ff9d08ef7dd8404bb48869e5d958b5b87dadc4c9a1464e9f0d0326df7ebd86bd2e310cb1bf62d384d59441f2d70a070e1c60e09489929b988681bdd9cc97170bcc4c65595f71f8e0e3301337fc24a7732467831875a47f289652b0be5e4151e6d07316c1b0c0340d8ab92023e76d66a6b2840e36d2fb7a13fee632475e6edc367ea98a90fb98b7dd6310ca0328a44761582e1bab41befabcc0ec940d28bc5e93b68e064cab84e1d9beaeb48934eac1f53b01c1b000fca496aa54b61a99fcde61662a4b4b4b23d1680be9d426173e4df3602a48ea411989a4fd590f52a8fd156b05ed9d350e3defe3cfdf4b4c7ce770ea7d3fb9f520afbe1620daeee5c26735d20b9b9cfb6811a754a439e4e5c5639a4caa1e5caf586bfc0197b78702005cb9b4cae4cd3267ce8638fe964bd72b393e39d74928d242617303a756a37f284447770dcdbffc6384a05a85de1306e9a52057c7527c7131c3c42d3f475eb2303c82d4fc3276d6811db37efeb148723082d9b08f79f97c1e5729109a9a28307cc622d2d6cdf52b2b24efe548dedb00142009862cfa879ee1a71f6cec928353511472fbf4389148b0b0e0c108081412458dfe21c9f11351e67e7358595468246d1d1e5e38a6e9e851bc39d84ab502a669331dafec0d8ec7e3e8cb06e1a881d727d1ae40180a434a8c9db129a54126ad48a7358c2b4c5352c8c374bcccdab2bb37d8719cba79fab8211f9df218e0582c261e95f8bfc04f1a1e8bc5c4dfe0a190172af6a9690000000049454e44ae426082</data>
- </image>
-</images>
-<connections>
- <connection>
- <sender>OkButton</sender>
- <signal>clicked()</signal>
- <receiver>KPendulumSetupUi</receiver>
- <slot>okButtonClickedSlot()</slot>
- </connection>
- <connection>
- <sender>CancelButton</sender>
- <signal>clicked()</signal>
- <receiver>KPendulumSetupUi</receiver>
- <slot>close()</slot>
- </connection>
- <connection>
- <sender>AboutButton</sender>
- <signal>clicked()</signal>
- <receiver>KPendulumSetupUi</receiver>
- <slot>aboutButtonClickedSlot()</slot>
- </connection>
- <connection>
- <sender>lEdit</sender>
- <signal>lostFocus()</signal>
- <receiver>KPendulumSetupUi</receiver>
- <slot>lEditLostFocusSlot()</slot>
- </connection>
- <connection>
- <sender>gEdit</sender>
- <signal>lostFocus()</signal>
- <receiver>KPendulumSetupUi</receiver>
- <slot>gEditLostFocusSlot()</slot>
- </connection>
- <connection>
- <sender>eEdit</sender>
- <signal>lostFocus()</signal>
- <receiver>KPendulumSetupUi</receiver>
- <slot>eEditLostFocusSlot()</slot>
- </connection>
- <connection>
- <sender>persSpinBox</sender>
- <signal>valueChanged(int)</signal>
- <receiver>KPendulumSetupUi</receiver>
- <slot>persChangeEnteredSlot(int)</slot>
- </connection>
- <connection>
- <sender>mEdit</sender>
- <signal>lostFocus()</signal>
- <receiver>KPendulumSetupUi</receiver>
- <slot>mEditLostFocusSlot()</slot>
- </connection>
- <connection>
- <sender>barColorButton</sender>
- <signal>clicked()</signal>
- <receiver>KPendulumSetupUi</receiver>
- <slot>barColorButtonClickedSlot()</slot>
- </connection>
- <connection>
- <sender>m1ColorButton</sender>
- <signal>clicked()</signal>
- <receiver>KPendulumSetupUi</receiver>
- <slot>m1ColorButtonClickedSlot()</slot>
- </connection>
- <connection>
- <sender>m2ColorButton</sender>
- <signal>clicked()</signal>
- <receiver>KPendulumSetupUi</receiver>
- <slot>m2ColorButtonClickedSlot()</slot>
- </connection>
-</connections>
-<Q_SLOTS>
- <slot>okButtonClickedSlot()</slot>
- <slot>aboutButtonClickedSlot()</slot>
- <slot>mEditLostFocusSlot(void)</slot>
- <slot>lEditLostFocusSlot(void)</slot>
- <slot>gEditLostFocusSlot(void)</slot>
- <slot>eEditLostFocusSlot(void)</slot>
- <slot>persChangeEnteredSlot(int)</slot>
- <slot>barColorButtonClickedSlot(void)</slot>
- <slot>m1ColorButtonClickedSlot(void)</slot>
- <slot>m2ColorButtonClickedSlot(void)</slot>
-</Q_SLOTS>
-<layoutdefaults spacing="6" margin="11"/>
-<includehints>
- <includehint>sspreviewarea.h</includehint>
-</includehints>
-</UI>
diff --git a/kscreensaver/kdesavers/polygon.cpp b/kscreensaver/kdesavers/polygon.cpp
deleted file mode 100644
index 2358f90a..00000000
--- a/kscreensaver/kdesavers/polygon.cpp
+++ /dev/null
@@ -1,366 +0,0 @@
-//-----------------------------------------------------------------------------
-//
-// kpolygon - Basic screen saver for KDE
-//
-// Copyright (c) Martin R. Jones 1996
-//
-// layout management added 1998/04/19 by Mario Weilguni <[email protected]>
-// 2001/03/04 Converted to libkscreensaver by Martin R. Jones
-
-#include <config.h>
-#include <stdlib.h>
-#include <time.h>
-#include <tqcolor.h>
-#include <tqlabel.h>
-#include <tqslider.h>
-#include <tqlayout.h>
-#include <klocale.h>
-#include <kconfig.h>
-#include <kglobal.h>
-#include <kmessagebox.h>
-
-#include "polygon.h"
-#include <tqpainter.h>
-
-#include "polygon.moc"
-
-
-#define MAXLENGTH 65
-#define MAXVERTICES 19
-
-// libkscreensaver interface
-extern "C"
-{
- KDE_EXPORT const char *kss_applicationName = "kpolygon.kss";
- KDE_EXPORT const char *kss_description = I18N_NOOP( "KPolygon" );
- KDE_EXPORT const char *kss_version = "2.2.0";
-
- KDE_EXPORT KScreenSaver *kss_create( WId id )
- {
- return new kPolygonSaver( id );
- }
-
- KDE_EXPORT TQDialog *kss_setup()
- {
- return new kPolygonSetup();
- }
-}
-
-//-----------------------------------------------------------------------------
-// dialog to setup screen saver parameters
-//
-kPolygonSetup::kPolygonSetup( TQWidget *parent, const char *name )
- : KDialogBase( parent, name, true, i18n( "Setup Polygon Screen Saver" ),
- Ok|Cancel|Help, Ok, true ), saver( 0 ), length( 10 ), vertices( 3 ),
- speed( 50 )
-{
- readSettings();
-
- TQWidget *main = makeMainWidget();
- setButtonText( Help, i18n( "A&bout" ) );
-
- TQHBoxLayout *tl = new TQHBoxLayout(main, 0, spacingHint());
- TQVBoxLayout *tl1 = new TQVBoxLayout;
- tl->addLayout(tl1);
-
- TQLabel *label = new TQLabel( i18n("Length:"), main );
- tl1->addWidget(label);
-
- TQSlider *sb = new TQSlider(1, MAXLENGTH, 10, length, Qt::Horizontal,
- main );
- sb->setMinimumSize( 90, 20 );
- sb->setTickmarks(TQSlider::Below);
- sb->setTickInterval(10);
- connect( sb, TQT_SIGNAL( valueChanged( int ) ), TQT_SLOT( slotLength( int ) ) );
- tl1->addWidget(sb);
-
- label = new TQLabel( i18n("Vertices:"), main );
- tl1->addWidget(label);
-
- sb = new TQSlider(3, MAXVERTICES, 2, vertices, Qt::Horizontal, main);
- sb->setMinimumSize( 90, 20 );
- sb->setTickmarks(TQSlider::Below);
- sb->setTickInterval(2);
- connect( sb, TQT_SIGNAL( valueChanged( int ) ), TQT_SLOT( slotVertices( int ) ) );
- tl1->addWidget(sb);
-
- label = new TQLabel( i18n("Speed:"), main );
- tl1->addWidget(label);
-
- sb = new TQSlider(0, 100, 10, speed, Qt::Horizontal, main);
- sb->setMinimumSize( 90, 20 );
- sb->setTickmarks(TQSlider::Below);
- sb->setTickInterval(10);
- connect( sb, TQT_SIGNAL( valueChanged( int ) ), TQT_SLOT( slotSpeed( int ) ) );
- tl1->addWidget(sb);
- tl1->addStretch();
-
- preview = new TQWidget( main );
- preview->setFixedSize( 220, 170 );
- preview->setBackgroundColor( black );
- preview->show(); // otherwise saver does not get correct size
- saver = new kPolygonSaver( preview->winId() );
- tl->addWidget(preview);
-
- setMinimumSize( sizeHint() );
-}
-
-kPolygonSetup::~kPolygonSetup()
-{
- delete saver;
-}
-
-// read settings from config file
-void kPolygonSetup::readSettings()
-{
- TDEConfig *config = TDEGlobal::config();
- config->setGroup( "Settings" );
-
- length = config->readNumEntry( "Length", length );
- if ( length > MAXLENGTH )
- length = MAXLENGTH;
- else if ( length < 1 )
- length = 1;
-
- vertices = config->readNumEntry( "Vertices", vertices );
- if ( vertices > MAXVERTICES )
- vertices = MAXVERTICES;
- else if ( vertices < 3 )
- vertices = 3;
-
- speed = config->readNumEntry( "Speed", speed );
- if ( speed > 100 )
- speed = 100;
- else if ( speed < 50 )
- speed = 50;
-}
-
-void kPolygonSetup::slotLength( int len )
-{
- length = len;
- if ( saver )
- saver->setPolygon( length, vertices );
-}
-
-void kPolygonSetup::slotVertices( int num )
-{
- vertices = num;
- if ( saver )
- saver->setPolygon( length, vertices );
-}
-
-void kPolygonSetup::slotSpeed( int num )
-{
- speed = num;
- if ( saver )
- saver->setSpeed( speed );
-}
-
-// Ok pressed - save settings and exit
-void kPolygonSetup::slotOk()
-{
- TDEConfig *config = TDEGlobal::config();
- config->setGroup( "Settings" );
-
- TQString slength;
- slength.setNum( length );
- config->writeEntry( "Length", slength );
-
- TQString svertices;
- svertices.setNum( vertices );
- config->writeEntry( "Vertices", svertices );
-
- TQString sspeed;
- sspeed.setNum( speed );
- config->writeEntry( "Speed", sspeed );
-
- config->sync();
-
- accept();
-}
-
-void kPolygonSetup::slotHelp()
-{
- KMessageBox::information(this,
- i18n("Polygon Version 2.2.0\n\n"\
- "Written by Martin R. Jones 1996\n"\
-}
-
-//-----------------------------------------------------------------------------
-
-
-kPolygonSaver::kPolygonSaver( WId id ) : KScreenSaver( id )
-{
- polygons.setAutoDelete( TRUE );
-
- readSettings();
-
- directions.resize( numVertices );
- colorContext = TQColor::enterAllocContext();
-
- blank();
-
- initialiseColor();
- initialisePolygons();
-
- timer.start( speed );
- connect( &timer, TQT_SIGNAL( timeout() ), TQT_SLOT( slotTimeout() ) );
-}
-
-kPolygonSaver::~kPolygonSaver()
-{
- timer.stop();
- TQColor::leaveAllocContext();
- TQColor::destroyAllocContext( colorContext );
-}
-
-// set polygon properties
-void kPolygonSaver::setPolygon( int len, int ver )
-{
- timer.stop();
- numLines = len;
- numVertices = ver;
-
- directions.resize( numVertices );
- polygons.clear();
- initialisePolygons();
- blank();
-
- timer.start( speed );
-}
-
-// set the speed
-void kPolygonSaver::setSpeed( int spd )
-{
- timer.stop();
- speed = 100-spd;
- timer.start( speed );
-}
-
-// read configuration settings from config file
-void kPolygonSaver::readSettings()
-{
- TDEConfig *config = TDEGlobal::config();
- config->setGroup( "Settings" );
-
- numLines = config->readNumEntry( "Length", 10 );
- if ( numLines > 50 )
- numLines = 50;
- else if ( numLines < 1 )
- numLines = 1;
-
- numVertices = config->readNumEntry( "Vertices", 3 );
- if ( numVertices > 20 )
- numVertices = 20;
- else if ( numVertices < 3 )
- numVertices = 3;
-
- speed = 100 - config->readNumEntry( "Speed", 50 );
-}
-
-// draw next polygon and erase tail
-void kPolygonSaver::slotTimeout()
-{
- TQPainter p( this );
- if ( polygons.count() > numLines )
- {
- p.setPen( black );
- p.drawPolyline( *polygons.first() );
- }
-
- nextColor();
- p.setPen( colors[currentColor] );
- p.drawPolyline( *polygons.last() );
-
- if ( polygons.count() > numLines )
- polygons.removeFirst();
-
- polygons.append( new TQPointArray( polygons.last()->copy() ) );
- moveVertices();
-}
-
-void kPolygonSaver::blank()
-{
- setBackgroundColor( black );
- erase();
-}
-
-// initialise the polygon
-void kPolygonSaver::initialisePolygons()
-{
- int i;
-
- polygons.append( new TQPointArray( numVertices + 1 ) );
-
- TQPointArray &poly = *polygons.last();
-
- for ( i = 0; i < numVertices; i++ )
- {
- poly.setPoint( i, rnd.getLong(width()), rnd.getLong(height()) );
- directions[i].setX( 16 - rnd.getLong(8) * 4 );
- if ( directions[i].x() == 0 )
- directions[i].setX( 1 );
- directions[i].setY( 16 - rnd.getLong(8) * 4 );
- if ( directions[i].y() == 0 )
- directions[i].setY( 1 );
- }
-
- poly.setPoint( i, poly.point(0) );
-}
-
-// move polygon in current direction and change direction if a border is hit
-void kPolygonSaver::moveVertices()
-{
- int i;
- TQPointArray &poly = *polygons.last();
-
- for ( i = 0; i < numVertices; i++ )
- {
- poly.setPoint( i, poly.point(i) + directions[i] );
- if ( poly[i].x() >= (int)width() )
- {
- directions[i].setX( -(rnd.getLong(4) + 1) * 4 );
- poly[i].setX( (int)width() );
- }
- else if ( poly[i].x() < 0 )
- {
- directions[i].setX( (rnd.getLong(4) + 1) * 4 );
- poly[i].setX( 0 );
- }
-
- if ( poly[i].y() >= (int)height() )
- {
- directions[i].setY( -(rnd.getLong(4) + 1) * 4 );
- poly[i].setY( height() );
- }
- else if ( poly[i].y() < 0 )
- {
- directions[i].setY( (rnd.getLong(4) + 1) * 4 );
- poly[i].setY( 0 );
- }
- }
-
- poly.setPoint( i, poly.point(0) );
-}
-
-// create a color table of 64 colors
-void kPolygonSaver::initialiseColor()
-{
- for ( int i = 0; i < 64; i++ )
- {
- colors[i].setHsv( i * 360 / 64, 255, 255 );
- }
-
- currentColor = 0;
-}
-
-// set foreground color to next in the table
-void kPolygonSaver::nextColor()
-{
- currentColor++;
-
- if ( currentColor > 63 )
- currentColor = 0;
-}
-
diff --git a/kscreensaver/kdesavers/polygon.h b/kscreensaver/kdesavers/polygon.h
deleted file mode 100644
index cd6889ce..00000000
--- a/kscreensaver/kdesavers/polygon.h
+++ /dev/null
@@ -1,81 +0,0 @@
-//-----------------------------------------------------------------------------
-//
-// kpolygon - Basic screen saver for KDE
-//
-// Copyright (c) Martin R. Jones 1996
-//
-
-#ifndef __POLYGON_H__
-#define __POLYGON_H__
-
-#include <tqtimer.h>
-#include <tqptrlist.h>
-
-#include <kdialogbase.h>
-#include <kscreensaver.h>
-#include <krandomsequence.h>
-
-class kPolygonSaver : public KScreenSaver
-{
- Q_OBJECT
-
-public:
- kPolygonSaver( WId id );
- virtual ~kPolygonSaver();
-
- void setPolygon( int len, int ver );
- void setSpeed( int spd );
-
-private:
- void readSettings();
- void blank();
- void initialisePolygons();
- void moveVertices();
- void initialiseColor();
- void nextColor();
-
-protected slots:
- void slotTimeout();
-
-protected:
- TQTimer timer;
- unsigned numLines;
- int numVertices;
- int colorContext;
- int speed;
- TQColor colors[64];
- int currentColor;
- TQPtrList<TQPointArray> polygons;
- TQMemArray<TQPoint> directions;
- KRandomSequence rnd;
-};
-
-class kPolygonSetup : public KDialogBase
-{
- Q_OBJECT
-
-public:
- kPolygonSetup( TQWidget *parent = 0, const char *name = 0 );
- ~kPolygonSetup();
-
-protected:
- void readSettings();
-
-private slots:
- void slotLength( int );
- void slotVertices( int );
- void slotSpeed( int );
- void slotOk();
- void slotHelp();
-
-private:
- TQWidget *preview;
- kPolygonSaver *saver;
-
- int length;
- int vertices;
- int speed;
-};
-
-#endif
-
diff --git a/kscreensaver/kdesavers/rkodesolver.cpp b/kscreensaver/kdesavers/rkodesolver.cpp
deleted file mode 100644
index 2127a110..00000000
--- a/kscreensaver/kdesavers/rkodesolver.cpp
+++ /dev/null
@@ -1,252 +0,0 @@
-//============================================================================
-//
-// Ordinary differential equation solver using the Runge-Kutta method.
-// $Id$
-// Copyright (C) 2004 Georg Drenkhahn
-//
-// This file is free software; you can redistribute it and/or modify it under
-// the terms of the GNU General Public License version 2 as published by the
-// Free Software Foundation.
-//
-//============================================================================
-
-#include <kdebug.h>
-#include "rkodesolver.h"
-
-template<typename T>
-RkOdeSolver<T>::RkOdeSolver(const T &x,
- const std::valarray<T>& y,
- const T &dx,
- const T &eps)
- : mX(x)
-{
- Y(y);
- dX(dx);
- Eps(eps);
-}
-
-// virtual dtor
-template<typename T>
-RkOdeSolver<T>::~RkOdeSolver(void)
-{}
-
-// accessors
-
-template<typename T>
-void
-RkOdeSolver<T>::dX(const T &a)
-{
- if (a < 0.0)
- {
- kdDebug() << "RkOdeSolver: dx was negative, made it positive" << endl;
- mStep = -a;
- }
- else if (a == 0.0)
- {
- mStep = 0.001; // a very arbitrary value
- kdDebug() << "RkOdeSolver: dx == 0, set it to " << mStep << endl;
- }
- else
- {
- mStep = a;
- }
-}
-
-template<typename T>
-void
-RkOdeSolver<T>::Eps(const T &a)
-{
- if (a < 0.0)
- {
- kdDebug() << "RkOdeSolver: eps was negative, made it positive" << endl;
- mEps = -a;
- }
- else if (a == 0.0)
- {
- mEps = 1e-5; // a very arbitrary value
- kdDebug() << "RkOdeSolver: eps == 0, set it to 1e-5" << endl;
- }
- else
- {
- mEps = a;
- }
-}
-
-template<typename T>
-void
-RkOdeSolver<T>::Y(const std::valarray<T> &a)
-{
- mY.resize(a.size());
- mY = a;
-}
-
-
-// public member functions
-
-template<typename T>
-void
-RkOdeSolver<T>::integrate(const T &deltaX)
-{
- if (deltaX == 0)
- {
- return; // nothing to integrate
- }
-
- // init dydx if uninitialised
- if (mDydx.size() != mY.size())
- {
- mDydx.resize(mY.size());
- mDydx = f(mX,mY);
- }
-
- static const unsigned int maxiter = 10000;
- const T x2 = mX + deltaX;
-
- unsigned int iter;
- for (iter=0;
- iter<maxiter && rkStepCheck(x2-mX) == false;
- ++iter)
- {}
-
- if (iter>maxiter)
- {
- kdDebug() << "RkOdeSolver: More than " << maxiter
- << " iterations in RkOdeSolver::integrate" << endl;
- // TODO throw exeption here
- }
-}
-
-
-// private member functions
-
-template<typename T>
-bool
-RkOdeSolver<T>::rkStepCheck(const T& dx_requested)
-{
- static const T safety = 0.9;
- static const T pshrnk = -0.25;
- static const T pgrow = -0.2;
-
- // reduce step size by no more than a factor 10
- static const T shrinkLimit = 0.1;
- // enlarge step size by no more than a factor 5
- static const T growthLimit = 5.0;
- // errmax_sl = 6561.0
- static const T errmax_sl = pow(shrinkLimit/safety, 1.0/pshrnk);
- // errmax_gl = 1.89e-4
- static const T errmax_gl = pow(growthLimit/safety, 1.0/pgrow);
-
- static const unsigned int maxiter = 100;
-
- if (dx_requested == 0)
- {
- return true; // integration done
- }
-
- std::valarray<T> ytmp(mY.size());
- std::valarray<T> yerr(mY.size());
- std::valarray<T> t(mY.size());
-
- bool stepSizeWasMaximal;
- T dx;
- if (std::abs(dx_requested) > mStep)
- {
- stepSizeWasMaximal = true;
- dx = dx_requested>0 ? mStep : -mStep;
- }
- else
- {
- stepSizeWasMaximal = false;
- dx = dx_requested;
- }
-
- // generic scaling factor
- std::valarray<T> yscal = std::abs(mY) + std::abs(dx*mDydx) + 1e-15;
-
- unsigned int iter = 0;
- T errmax = 0;
- do
- {
- if (errmax >= 1.0)
- {
- // reduce step size
- dx *= errmax<errmax_sl ? safety * pow(errmax, pshrnk) : shrinkLimit;
- stepSizeWasMaximal = true;
- if (mX == mX + dx)
- {
- // stepsize below numerical resolution
- kdDebug() << "RkOdeSolver: stepsize underflow in rkStepCheck"
- << endl;
- // TODO throw exeption here
- exit(0);
- }
- // new dx -> update scaling vector
- yscal = std::abs(mY) + std::abs(dx*mDydx) + 1e-15;
- }
-
- ytmp = rkStep(dx, yerr); // try to make a step forward
- t = std::abs(yerr/yscal); // calc the error vector
- errmax = t.max()/mEps; // calc the rel. maximal error
- ++iter;
- } while (iter < maxiter && errmax >= 1.0);
-
- if (iter >= maxiter)
- {
- kdDebug() << "RkOdeSolver: too many iterations in rkStepCheck" << endl;
- // TODO throw exeption here
- exit(0);
- }
-
- if (stepSizeWasMaximal == true)
- {
- // estimate next step size if used step size was maximal
- mStep =
- std::abs(dx)
- * (errmax>errmax_gl ? safety * pow(errmax, pgrow) : growthLimit);
- }
- mX += dx; // make step forward
- mY = ytmp; // save new function values
- mDydx = f(mX,mY); // and update derivatives
-
- return std::abs(dx) < std::abs(dx_requested);
-}
-
-template<typename T>
-std::valarray<T>
-RkOdeSolver<T>::rkStep(const T& dx, std::valarray<T>& yerr) const
-{
- static const T
- a2=0.2, a3=0.3, a4=0.6, a5=1.0, a6=0.875,
- b21=0.2,
- b31=3.0/40.0, b32=9.0/40.0,
- b41=0.3, b42=-0.9, b43=1.2,
- b51=-11.0/54.0, b52=2.5, b53=-70.0/27.0, b54=35.0/27.0,
- b61=1631.0/55296.0, b62=175.0/512.0, b63=575.0/13824.0,
- b64=44275.0/110592.0, b65=253.0/4096.0,
- c1=37.0/378.0, c3=250.0/621.0, c4=125.0/594.0, c6=512.0/1771.0,
- dc1=c1-2825.0/27648.0, dc3=c3-18575.0/48384.0,
- dc4=c4-13525.0/55296.0, dc5=-277.0/14336.0, dc6=c6-0.25;
-
- std::valarray<T> ak2 = f(mX + a2*dx,
- mY + dx*b21*mDydx); // 2. step
- std::valarray<T> ak3 = f(mX + a3*dx,
- mY + dx*(b31*mDydx + b32*ak2)); // 3.step
- std::valarray<T> ak4 = f(mX + a4*dx,
- mY + dx*(b41*mDydx + b42*ak2
- + b43*ak3)); // 4.step
- std::valarray<T> ak5 = f(mX + a5*dx,
- mY + dx*(b51*mDydx + b52*ak2
- + b53*ak3 + b54*ak4)); // 5.step
- std::valarray<T> ak6 = f(mX + a6*dx,
- mY + dx*(b61*mDydx + b62*ak2
- + b63*ak3 + b64*ak4
- + b65*ak5)); // 6.step
- yerr = dx*(dc1*mDydx + dc3*ak3 + dc4*ak4 + dc5*ak5 + dc6*ak6);
- return mY + dx*( c1*mDydx + c3*ak3 + c4*ak4 + c6*ak6);
-}
-
-
-// explicite instantiations
-//template RkOdeSolver<long double>;
-template class RkOdeSolver<double>;
-//template RkOdeSolver<float>;
diff --git a/kscreensaver/kdesavers/rkodesolver.h b/kscreensaver/kdesavers/rkodesolver.h
deleted file mode 100644
index d1f9d556..00000000
--- a/kscreensaver/kdesavers/rkodesolver.h
+++ /dev/null
@@ -1,187 +0,0 @@
-//============================================================================
-//
-// Ordinary differential equation solver using the Runge-Kutta method.
-// $Id$
-// Copyright (C) 2004 Georg Drenkhahn
-//
-// This file is free software; you can redistribute it and/or modify it under
-// the terms of the GNU General Public License version 2 as published by the
-// Free Software Foundation.
-//
-//============================================================================
-
-#ifndef RKODESOLVER_H
-#define RKODESOLVER_H
-
-// STL headers
-#include <valarray>
-
-/** @brief Solver class to integrate a first-order ordinary differential
- * equation (ODE) by means of a 6. order Runge-Kutta method.
- *
- * The ODE system must be given as the derivative
- * dy/dx = f(x,y)
- * with x in R and y in R^n.
- *
- * Within this class the function f() is a pure virtual function, which must be
- * reimplemented in a derived class.
- *
- * No other special data type for vectors or matrices are needed besides the STL
- * class std::valarray. */
-template<typename T>
-class RkOdeSolver
-{
- public:
- /** @brief Constructor
- * @param x Initial integration parameter
- * @param y Initial function values of function to integrate
- * @param dx Initial guess for step size. Will be automatically adjusted to
- * guarantee required precision.
- * @param eps Relative precision
- *
- * Initialises the solver with start conditions. */
- RkOdeSolver(const T& x=0.0,
- const std::valarray<T>& y=std::valarray<T>(0),
- const T& dx=0,
- const T& eps=1e-6);
- /** @brief Destructor */
- virtual ~RkOdeSolver(void);
-
- /** @brief Integrates the ordinary differential equation from the current x
- * value to x+@a dx.
- * @param dx x-interval size to integrate over starting from x. dx may be
- * negative.
- *
- * The integration is performed by calling rkStepCheck() repeatedly until the
- * desired x value is reached. */
- void integrate(const T& dx);
-
- // Accessors
-
- // get/set x value
- /** @brief Get current x value.
- * @return Reference of x value. */
- const T& X(void) const;
- /** @brief Set current x value.
- * @param a The value to be set. */
- void X(const T& a);
-
- // get/set y value
- /** @brief Get current y value.
- * @return Reference of y vector. */
- const std::valarray<T>& Y(void) const;
- /** @brief Set current y values.
- * @param a The vector to be set. */
- void Y(const std::valarray<T>& a);
-
- /** @brief Get current dy/dx value.
- * @return Reference of dy/dx vector. */
- const std::valarray<T>& dYdX(void) const;
-
- // get/set dx value
- /** @brief Get current estimated step size dX.
- * @return Reference of dX value. */
- const T& dX(void) const;
- /** @brief Set estimated step size dX.
- * @param a The value to be set. */
- void dX(const T& a);
-
- // get/set eps value
- /** @brief Get current presision.
- * @return Reference of precision value. */
- const T& Eps(void) const;
- /** @brief Set estimated presision.
- * @param a The value to be set. */
- void Eps(const T& a);
-
- protected:
- // purely virtual function which is integrated
- /** @brief ODE function
- * @param x Integration value
- * @param y Function value
- * @return Derivation
- *
- * This purely virtual function returns the value of dy/dx for the given
- * parameter values of x and y. */
- virtual std::valarray<T>
- f(const T& x, const std::valarray<T>& y) const = 0;
-
- private:
- /** @brief Perform one integration step with a tolerable relative error given
- * by ::mErr.
- * @param dx Maximal step size, may be positive or negative depending on
- * integration direction.
- * @return Flag indicating if made absolute integration step was equal |@a dx
- * | (true) less than |@a dx | (false).
- *
- * A new estimate for the maximum next step size is saved to ::mStep. The
- * new values for x, y and f are saved in ::mX, ::mY and ::mDydx. */
- bool rkStepCheck(const T& dx);
- /** @brief Perform one Runge-Kutta integration step forward with step size
- * ::mStep
- * @param dx Step size relative to current x value.
- * @param yerr Reference to vector in which the estimated error made in y is
- * returned.
- * @return The y value after the step at x+@a dx.
- *
- * Stored current x,y values are not adjusted. */
- std::valarray<T> rkStep(const T& dx, std::valarray<T>& yerr) const;
-
- /** current x value */
- T mX;
- /** current y value */
- std::valarray<T> mY;
- /** current value of dy/dx */
- std::valarray<T> mDydx;
-
- /** allowed relative error */
- T mEps;
- /** estimated step size for next Runge-Kutta step */
- T mStep;
-};
-
-// inline accessors
-
-template<typename T>
-inline const T&
-RkOdeSolver<T>::X(void) const
-{
- return mX;
-}
-
-template<typename T>
-inline void
-RkOdeSolver<T>::X(const T &a)
-{
- mX = a;
-}
-
-template<typename T>
-inline const std::valarray<T>&
-RkOdeSolver<T>::Y(void) const
-{
- return mY;
-}
-
-template<typename T>
-inline const std::valarray<T>&
-RkOdeSolver<T>::dYdX(void) const
-{
- return mDydx;
-}
-
-template<typename T>
-inline const T&
-RkOdeSolver<T>::dX(void) const
-{
- return mStep;
-}
-
-template<typename T>
-inline const T&
-RkOdeSolver<T>::Eps(void) const
-{
- return mEps;
-}
-
-#endif
diff --git a/kscreensaver/kdesavers/rotation.cpp b/kscreensaver/kdesavers/rotation.cpp
deleted file mode 100644
index 9958bd81..00000000
--- a/kscreensaver/kdesavers/rotation.cpp
+++ /dev/null
@@ -1,825 +0,0 @@
-//============================================================================
-//
-// KRotation screen saver for KDE
-//
-// The screen saver displays a physically realistic simulation of a force free
-// rotating asymmetric body. The equations of motion for such a rotation, the
-// Euler equations, are integrated numerically by the Runge-Kutta method.
-//
-// Developed by Georg Drenkhahn, [email protected]
-//
-// $Id$
-//
-/*
- * Copyright (C) 2004 Georg Drenkhahn
- *
- * KRotation is free software; you can redistribute it and/or modify it under
- * the terms of the GNU General Public License version 2 as published by the
- * Free Software Foundation.
- *
- * KRotation is distributed in the hope that it will be useful, but WITHOUT ANY
- * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
- * A PARTICULAR PURPOSE. See the GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc., 59 Temple
- * Place, Suite 330, Boston, MA 02110-1301 USA
- */
-//============================================================================
-
-// std. C++ headers
-#include <cstdlib>
-// STL
-#include <deque>
-// TQt headers
-#include <tqcheckbox.h>
-#include <tqlineedit.h>
-#include <tqvalidator.h>
-#include <tqtooltip.h>
-// KDE headers
-#include <klocale.h>
-#include <kconfig.h>
-#include <kdebug.h>
-#include <kmessagebox.h>
-
-#include "sspreviewarea.h"
-
-// rotation.moc includes rotation.h
-#include "rotation.moc"
-
-/** Version number of this screen saver */
-#define KROTATION_VERSION "1.1"
-
-// libkscreensaver interface
-extern "C"
-{
- /** application name for the libkscreensaver interface */
- KDE_EXPORT const char *kss_applicationName = "krotation.kss";
- /** application description for the libkscreensaver interface */
- KDE_EXPORT const char *kss_description =
- I18N_NOOP("Simulation of a force free rotating asymmetric body");
- /** application version for the libkscreensaver interface */
- KDE_EXPORT const char *kss_version = KROTATION_VERSION;
-
- /** function to create screen saver object */
- KDE_EXPORT KScreenSaver* kss_create(WId id)
- {
- return new KRotationSaver(id);
- }
-
- /** function to create setup dialog for screen saver */
- KDE_EXPORT TQDialog* kss_setup()
- {
- return new KRotationSetup();
- }
-}
-
-//-----------------------------------------------------------------------------
-// EulerOdeSolver implementation
-//-----------------------------------------------------------------------------
-
-EulerOdeSolver::EulerOdeSolver(
- const double &t_,
- const double &dt_,
- const double &A_,
- const double &B_,
- const double &C_,
- std::valarray<double> &y_,
- const double &eps_)
- : RkOdeSolver<double>(t_,y_,dt_,eps_),
- A(A_), B(B_), C(C_)
-{
-}
-
-std::valarray<double> EulerOdeSolver::f(
- const double &x,
- const std::valarray<double> &y) const
-{
- // unused
- (void)x;
-
- // vec omega in body coor. sys.: omega_body = (p, q, r)
- const vec3<double> omega_body(y[std::slice(0,3,1)]);
- // body unit vectors in fixed frame coordinates
- const vec3<double> e1(y[std::slice(3,3,1)]);
- const vec3<double> e2(y[std::slice(6,3,1)]);
- const vec3<double> e3(y[std::slice(9,3,1)]);
-
- // don't use "const vec3<double>&" here because slice_array must be
- // value-copied to vec3<double>.
-
- // vec omega in global fixed coor. sys.
- vec3<double> omega(
- omega_body[0] * e1
- + omega_body[1] * e2
- + omega_body[2] * e3);
-
- // return vector y'
- std::valarray<double> ypr(y.size());
-
- // omega_body'
- ypr[0] = -(C-B)/A * omega_body[1] * omega_body[2]; // p'
- ypr[1] = -(A-C)/B * omega_body[2] * omega_body[0]; // q'
- ypr[2] = -(B-A)/C * omega_body[0] * omega_body[1]; // r'
-
- // e1', e2', e3'
- ypr[std::slice(3,3,1)] = vec3<double>::crossprod(omega, e1);
- ypr[std::slice(6,3,1)] = vec3<double>::crossprod(omega, e2);
- ypr[std::slice(9,3,1)] = vec3<double>::crossprod(omega, e3);
-
- return ypr;
-}
-//-----------------------------------------------------------------------------
-
-
-//-----------------------------------------------------------------------------
-// Rotation: screen saver widget
-//-----------------------------------------------------------------------------
-
-RotationGLWidget::RotationGLWidget(
- TQWidget* parent, const char* name,
- const vec3<double>& _omega,
- const std::deque<vec3<double> >& e1_,
- const std::deque<vec3<double> >& e2_,
- const std::deque<vec3<double> >& e3_,
- const vec3<double>& J)
- : TQGLWidget(parent, name),
- eyeR(25), eyeTheta(1), eyePhi(M_PI*0.25),
- boxSize(1,1,1),
- fixedAxses(0),
- bodyAxses(0),
- lightR(10), lightTheta(M_PI/4), lightPhi(0),
- bodyAxsesLength(6),
- fixedAxsesLength(8),
- omega(_omega),
- e1(e1_),
- e2(e2_),
- e3(e3_)
-{
- // set up initial rotation matrix as unit matrix, only non-constant elements
- // are set later on
- for (int i=0; i<16; i++)
- rotmat[i] = ((i%5)==0) ? 1:0;
-
- // Set the box sizes from the momenta of inertia. J is the 3 vector with
- // momenta of inertia with respect to the 3 figure axes.
-
- // the default values must be valid so that w,h,d are real!
- GLfloat
- x2 = 6.0*(-J[0] + J[1] + J[2]),
- y2 = 6.0*( J[0] - J[1] + J[2]),
- z2 = 6.0*( J[0] + J[1] - J[2]);
-
- if (x2>=0 && y2>=0 && z2>=0)
- {
- boxSize = vec3<double>(sqrt(x2), sqrt(y2), sqrt(z2));
- }
- else
- {
- kdDebug() << "parameter error" << endl;
- boxSize = vec3<double>(1, 1, 1);
- }
-}
-
-/* --------- protected methods ----------- */
-
-void RotationGLWidget::initializeGL(void)
-{
- qglClearColor(TQColor(black)); // set color to clear the background
-
- glClearDepth(1); // depth buffer setup
- glEnable(GL_DEPTH_TEST); // depth testing
- glDepthFunc(GL_LEQUAL); // type of depth test
-
- glShadeModel(GL_SMOOTH); // smooth color shading in poygons
-
- // nice perspective calculation
- glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
-
- // set up the light
- glEnable(GL_LIGHTING);
- glEnable(GL_LIGHT0);
- // set positon of light0
- GLfloat lightPos[4]=
- {lightR * sin(lightTheta) * sin(lightPhi),
- lightR * sin(lightTheta) * cos(lightPhi),
- lightR * cos(lightTheta), 1.};
- glLightfv(GL_LIGHT0, GL_POSITION, lightPos);
-
- // enable setting the material colour by glColor()
- glEnable(GL_COLOR_MATERIAL);
-
- // set up display lists
-
- if (fixedAxses == 0)
- fixedAxses = glGenLists(1); // list to be returned
- glNewList(fixedAxses, GL_COMPILE);
-
- // fixed coordinate system axes
-
- glPushMatrix();
- glLoadIdentity();
-
- // z-axis, blue
- qglColor(TQColor(blue));
- myGlArrow(fixedAxsesLength, 0.5f, 0.03f, 0.1f);
-
- // x-axis, red
- qglColor(TQColor(red));
- glRotatef(90, 0, 1, 0);
-
- myGlArrow(fixedAxsesLength, 0.5f, 0.03f, 0.1f);
-
- // y-axis, green
- qglColor(TQColor(green));
- glLoadIdentity();
- glRotatef(-90, 1, 0, 0);
- myGlArrow(fixedAxsesLength, 0.5f, 0.03f, 0.1f);
-
- glPopMatrix();
- glEndList();
- // end of axes object list
-
-
- // box and box-axses
- if (bodyAxses == 0)
- bodyAxses = glGenLists(1); // list to be returned
- glNewList(bodyAxses, GL_COMPILE);
-
- // z-axis, blue
- qglColor(TQColor(blue));
- myGlArrow(bodyAxsesLength, 0.5f, 0.03f, 0.1f);
-
- // x-axis, red
- qglColor(TQColor(red));
- glPushMatrix();
- glRotatef(90, 0, 1, 0);
- myGlArrow(bodyAxsesLength, 0.5f, 0.03f, 0.1f);
- glPopMatrix();
-
- // y-axis, green
- qglColor(TQColor(green));
- glPushMatrix();
- glRotatef(-90, 1, 0, 0);
- myGlArrow(bodyAxsesLength, 0.5f, 0.03f, 0.1f);
- glPopMatrix();
-
- glEndList();
-}
-
-void RotationGLWidget::draw_traces(void)
-{
- if (e1.size()==0 && e2.size()==0 && e3.size()==0)
- return;
-
- glPushMatrix();
- glScalef(bodyAxsesLength, bodyAxsesLength, bodyAxsesLength);
-
- glEnable(GL_BLEND);
- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
-
- for (int j=0; j<3; ++j)
- {
- const std::deque<vec3<double> >& e =
- j==0 ? e1 : j==1 ? e2 : e3;
-
- // trace must contain at least 2 elements
- if (e.size() > 1)
- {
- // emission colour
- GLfloat em[4] = {0,0,0,1};
- em[j] = 1; // set either red, green, blue emission colour
-
- glMaterialfv(GL_FRONT_AND_BACK, GL_EMISSION, em);
- glColor4fv(em);
-
- // set iterator of the tail part
- std::deque<vec3<double> >::const_iterator eit = e.begin();
- std::deque<vec3<double> >::const_iterator tail =
- e.begin() +
- static_cast<std::deque<vec3<double> >::difference_type>
- (0.9*e.size());
-
- glBegin(GL_LINES);
- for (; eit < e.end()-1; ++eit)
- {
- glVertex3f((*eit)[0], (*eit)[1], (*eit)[2]);
- // decrease transparency for tail section
- if (eit > tail)
- em[3] =
- static_cast<GLfloat>
- (1.0 - double(eit-tail)/(0.1*e.size()));
- glColor4fv(em);
- glMaterialfv(GL_FRONT_AND_BACK, GL_EMISSION, em);
- glVertex3f((*(eit+1))[0], (*(eit+1))[1], (*(eit+1))[2]);
- }
- glEnd();
- }
- }
-
- glDisable(GL_BLEND);
-
- glPopMatrix();
-}
-
-void RotationGLWidget::paintGL(void)
-{
- // clear color and depth buffer
- glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
-
- glMatrixMode(GL_MODELVIEW); // select modelview matrix
-
- glLoadIdentity();
- GLfloat const em[] = {0,0,0,1};
- glMaterialfv(GL_FRONT_AND_BACK, GL_EMISSION, em);
-
- // omega vector
- vec3<double> rotvec =
- vec3<double>::crossprod(vec3<double>(0,0,1), omega).normalize();
- GLfloat rotdeg =
- 180./M_PI * vec3<double>::angle(vec3<double>(0,0,1), omega);
- glPushMatrix();
- glRotatef(rotdeg, rotvec[0], rotvec[1], rotvec[2]);
- qglColor(TQColor(white));
- myGlArrow(7, .5f, .1f, 0.2f);
- glPopMatrix();
-
- // fixed axes
- glCallList(fixedAxses);
-
- glPushMatrix();
-
- // set up variable part of rotation matrix for body
- // set gl body rotation matrix from e1,e2,e3
- const vec3<double>& e1b = e1.front();
- const vec3<double>& e2b = e2.front();
- const vec3<double>& e3b = e3.front();
-
- rotmat[0] = e1b[0];
- rotmat[1] = e1b[1];
- rotmat[2] = e1b[2];
- rotmat[4] = e2b[0];
- rotmat[5] = e2b[1];
- rotmat[6] = e2b[2];
- rotmat[8] = e3b[0];
- rotmat[9] = e3b[1];
- rotmat[10] = e3b[2];
-
- glMultMatrixf(rotmat);
-
- glCallList(bodyAxses);
-
- glScalef(boxSize[0]/2, boxSize[1]/2, boxSize[2]/2);
-
- // paint box
- glBegin(GL_QUADS);
- // front (z)
- qglColor(TQColor(blue));
- glNormal3f( 0,0,1);
- glVertex3f( 1, 1, 1);
- glVertex3f(-1, 1, 1);
- glVertex3f(-1, -1, 1);
- glVertex3f( 1, -1, 1);
- // back (-z)
- glNormal3f( 0,0,-1);
- glVertex3f( 1, 1, -1);
- glVertex3f(-1, 1, -1);
- glVertex3f(-1, -1, -1);
- glVertex3f( 1, -1, -1);
- // top (y)
- qglColor(TQColor(green));
- glNormal3f( 0,1,0);
- glVertex3f( 1, 1, 1);
- glVertex3f( 1, 1, -1);
- glVertex3f(-1, 1, -1);
- glVertex3f(-1, 1, 1);
- // bottom (-y)
- glNormal3f( 0,-1,0);
- glVertex3f( 1, -1, 1);
-
- glVertex3f( 1, -1, -1);
- glVertex3f(-1, -1, -1);
- glVertex3f(-1, -1, 1);
- // left (-x)
- qglColor(TQColor(red));
- glNormal3f( -1,0,0);
- glVertex3f(-1, 1, 1);
- glVertex3f(-1, 1, -1);
- glVertex3f(-1, -1, -1);
- glVertex3f(-1, -1, 1);
- // right (x)
- glNormal3f( 1,0,0);
- glVertex3f( 1, 1, 1);
- glVertex3f( 1, 1, -1);
- glVertex3f( 1, -1, -1);
- glVertex3f( 1, -1, 1);
- glEnd();
-
- // traces
- glPopMatrix();
- draw_traces ();
-
- glFlush();
-}
-
-void RotationGLWidget::resizeGL(int w, int h)
-{
- // Prevent a divide by zero
- if (h == 0) h = 1;
-
- // set the new view port
- glViewport(0, 0, (GLint)w, (GLint)h);
-
- // set up projection matrix
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity();
- // Perspective view
- gluPerspective(40.0f, (GLdouble)w/(GLdouble)h, 1.0, 100.0f);
-
- // Viewing transformation, position for better view
- // Theta is polar angle 0<Theta<Pi
- gluLookAt(
- eyeR * sin(eyeTheta) * sin(eyePhi),
- eyeR * sin(eyeTheta) * cos(eyePhi),
- eyeR * cos(eyeTheta),
- 0,0,0,
- 0,0,1);
-}
-
-/* --------- privat methods ----------- */
-
-void RotationGLWidget::myGlArrow(
- GLfloat total_length, GLfloat head_length,
- GLfloat base_width, GLfloat head_width)
-{
- GLUquadricObj* quadAx = gluNewQuadric();
- glPushMatrix();
- gluCylinder(quadAx, base_width, base_width,
- total_length-head_length, 10, 1);
- glTranslatef(0, 0, total_length-head_length);
- gluCylinder(quadAx, head_width, 0, head_length, 10, 1);
- glPopMatrix();
- gluDeleteQuadric(quadAx);
-}
-
-
-//-----------------------------------------------------------------------------
-// KRotationSaver: screen saver class
-//-----------------------------------------------------------------------------
-
-KRotationSaver::KRotationSaver(WId id)
- : KScreenSaver(id),
- J(4,2,3), // fixed box sizes!
- initEulerPhi(0),
- initEulerPsi(0),
- solver(0),
- glArea(0),
- timer(0),
- m_traceLengthSeconds(traceLengthSecondsDefault),
- m_Lz(LzDefault),
- m_initEulerTheta(initEulerThetaDefault)
-{
- readSettings(); // read global settings
- initData(); // init e1,e2,e3,omega,solver
-
- setEraseColor(black);
- erase(); // erase area
- glArea = new RotationGLWidget(
- this, 0, omega, e1, e2, e3, J); // create gl widget
- embed(glArea); // embed gl widget and resize it
- glArea->show(); // show gl widget
-
- timer = new TQTimer(this);
- timer->start(deltaT, TRUE);
- connect(timer, TQT_SIGNAL(timeout()), this, TQT_SLOT(doTimeStep()));
-}
-
-KRotationSaver::~KRotationSaver()
-{
- // time, rotation are automatically deleted with parent KRotationSaver
- delete solver;
-}
-
-void KRotationSaver::initData()
-{
- // reset coordiante system
- vec3<double> e1t(1,0,0), e2t(0,1,0), e3t(0,0,1);
- // rotation by phi around z = zhat axis
- e1t.rotate(initEulerPhi*e3t);
- e2t.rotate(initEulerPhi*e3t);
- // rotation by theta around new x axis
- e2t.rotate(m_initEulerTheta*e1t);
- e3t.rotate(m_initEulerTheta*e1t);
- // rotation by psi around new z axis
- e1t.rotate(initEulerPsi*e3t);
- e2t.rotate(initEulerPsi*e3t);
- // set first vector in deque
- e1.clear(); e1.push_front(e1t);
- e2.clear(); e2.push_front(e2t);
- e3.clear(); e3.push_front(e3t);
-
- // calc L in body frame: 1. determine z-axis of fixed frame in body
- // coordinates, undo the transformations for unit z vector of the body frame
-
- // calc omega_body from ...
- vec3<double> e1_body(1,0,0), e3_body(0,0,1);
- // rotation by -psi along z axis
- e1_body.rotate(-initEulerPsi*e3_body);
- // rotation by -theta along new x axis
- e3_body.rotate(-m_initEulerTheta*e1_body);
- // omega_body = L_body * J_body^(-1)
- vec3<double> omega_body = e3_body * m_Lz;
- omega_body /= J;
-
- // assemble initial y for solver
- std::valarray<double> y(12);
- y[std::slice(0,3,1)] = omega_body;
- // 3 basis vectors of body system in fixed coordinates
- y[std::slice(3,3,1)] = e1t;
- y[std::slice(6,3,1)] = e2t;
- y[std::slice(9,3,1)] = e3t;
-
- // initial rotation vector
- omega
- = omega_body[0]*e1t
- + omega_body[1]*e2t
- + omega_body[2]*e3t;
-
- if (solver!=0) delete solver;
- // init solver
- solver = new EulerOdeSolver(
- 0.0, // t
- 0.01, // first dt step size estimation
- J[0], J[1], J[2], // A,B,C
- y, // omega_body,e1,e2,e3
- 1e-5); // eps
-}
-
-void KRotationSaver::readSettings()
-{
- // read configuration settings from config file
- TDEConfig *config = TDEGlobal::config();
- config->setGroup("Settings");
-
- // internal saver parameters are set to stored values or left at their
- // default values if stored values are out of range
- setTraceFlag(0, config->readBoolEntry("x trace", traceFlagDefault[0]));
- setTraceFlag(1, config->readBoolEntry("y trace", traceFlagDefault[1]));
- setTraceFlag(2, config->readBoolEntry("z trace", traceFlagDefault[2]));
- setRandomTraces(config->readBoolEntry("random traces", randomTracesDefault));
- setTraceLengthSeconds(
- config->readDoubleNumEntry("length", traceLengthSecondsDefault));
- setLz(
- config->readDoubleNumEntry("Lz", LzDefault));
- setInitEulerTheta(
- config->readDoubleNumEntry("theta", initEulerThetaDefault));
-}
-
-void KRotationSaver::setTraceLengthSeconds(const double& t)
-{
- if (t >= traceLengthSecondsLimitLower
- && t <= traceLengthSecondsLimitUpper)
- {
- m_traceLengthSeconds = t;
- }
-}
-
-const double KRotationSaver::traceLengthSecondsLimitLower = 0.0;
-const double KRotationSaver::traceLengthSecondsLimitUpper = 99.0;
-const double KRotationSaver::traceLengthSecondsDefault = 3.0;
-
-const bool KRotationSaver::traceFlagDefault[3] = {false, false, true};
-
-void KRotationSaver::setLz(const double& Lz)
-{
- if (Lz >= LzLimitLower && Lz <= LzLimitUpper)
- {
- m_Lz = Lz;
- }
-}
-
-const double KRotationSaver::LzLimitLower = 0.0;
-const double KRotationSaver::LzLimitUpper = 500.0;
-const double KRotationSaver::LzDefault = 10.0;
-
-void KRotationSaver::setInitEulerTheta(const double& theta)
-{
- if (theta >= initEulerThetaLimitLower
- && theta <= initEulerThetaLimitUpper)
- {
- m_initEulerTheta = theta;
- }
-}
-
-const double KRotationSaver::initEulerThetaLimitLower = 0.0;
-const double KRotationSaver::initEulerThetaLimitUpper = 180.0;
-const double KRotationSaver::initEulerThetaDefault = 0.03;
-
-// public slots
-
-void KRotationSaver::doTimeStep()
-{
- // integrate a step ahead
- solver->integrate(0.001*deltaT);
-
- // read new y
- std::valarray<double> y = solver->Y();
-
- std::deque<vec3<double> >::size_type
- max_vec_length =
- static_cast<std::deque<vec3<double> >::size_type>
- ( m_traceLengthSeconds/(0.001*deltaT) );
-
- for (int j=0; j<3; ++j)
- {
- std::deque<vec3<double> >& e =
- j==0 ? e1 :
- j==1 ? e2 : e3;
-
- // read out new body coordinate system
- if (m_traceFlag[j] == true
- && max_vec_length > 0)
- {
- e.push_front(y[std::slice(3*j+3, 3, 1)]);
- while (e.size() > max_vec_length)
- {
- e.pop_back();
- }
- }
- else
- {
- // only set the 1. element
- e.front() = y[std::slice(3*j+3, 3, 1)];
- // and delete all other emements
- if (e.size() > 1)
- e.resize(1);
- }
- }
-
- // current rotation vector omega
- omega = y[0]*e1.front() + y[1]*e2.front() + y[2]*e3.front();
-
- // set new random traces every 10 seconds
- if (m_randomTraces==true)
- {
- static unsigned int counter=0;
- ++counter;
- if (counter > unsigned(10.0/(0.001*deltaT)))
- {
- counter=0;
- for (int i=0; i<3; ++i)
- m_traceFlag[i] = rand()%2==1 ? true : false;
- }
- }
-
- glArea->updateGL();
- timer->start(deltaT, TRUE); // restart timer
-}
-
-// public slot of KRotationSaver, forward resize event to public slot of glArea
-// to allow the resizing of the gl area withing the setup dialog
-void KRotationSaver::resizeGlArea(TQResizeEvent* e)
-{
- glArea->resize(e->size());
-}
-
-//-----------------------------------------------------------------------------
-// KRotationSetup: dialog to setup screen saver parameters
-//-----------------------------------------------------------------------------
-
-KRotationSetup::KRotationSetup(TQWidget* parent, const char* name)
- : KRotationSetupUi(parent, name),
- // create ssaver and give it the WinID of the preview area
- saver(new KRotationSaver(preview->winId()))
-{
- // the dialog should block, no other control center input should be possible
- // until the dialog is closed
- setModal(TRUE);
-
- lengthEdit->setValidator(
- new TQDoubleValidator(
- KRotationSaver::traceLengthSecondsLimitLower,
- KRotationSaver::traceLengthSecondsLimitUpper,
- 3, lengthEdit));
- LzEdit->setValidator(
- new TQDoubleValidator(
- KRotationSaver::LzLimitLower,
- KRotationSaver::LzLimitUpper,
- 3, LzEdit));
- thetaEdit->setValidator(
- new TQDoubleValidator(
- KRotationSaver::initEulerThetaLimitLower,
- KRotationSaver::initEulerThetaLimitUpper,
- 3, thetaEdit));
-
- // set tool tips of editable fields
- TQToolTip::add(
- lengthEdit,
- i18n("Length of traces in seconds of visibility.\nValid values from %1 to %2.")
- .arg(KRotationSaver::traceLengthSecondsLimitLower, 0, 'f', 2)
- .arg(KRotationSaver::traceLengthSecondsLimitUpper, 0, 'f', 2));
- TQToolTip::add(
- LzEdit,
- i18n("Angular momentum in z direction in arbitrary units.\nValid values from %1 to %2.")
- .arg(KRotationSaver::LzLimitLower, 0, 'f', 2)
- .arg(KRotationSaver::LzLimitUpper, 0, 'f', 2));
- TQToolTip::add(
- thetaEdit,
- i18n("Gravitational constant in arbitrary units.\nValid values from %1 to %2.")
- .arg(KRotationSaver::initEulerThetaLimitLower, 0, 'f', 2)
- .arg(KRotationSaver::initEulerThetaLimitUpper, 0, 'f', 2));
-
- // init preview area
- preview->setBackgroundColor(black);
- preview->show(); // otherwise saver does not get correct size
-
- // read settings from saver and update GUI elements with these values, saver
- // has read settings in its constructor
-
- // set editable fields with stored values as defaults
- xTrace->setChecked(saver->traceFlag(0));
- yTrace->setChecked(saver->traceFlag(1));
- zTrace->setChecked(saver->traceFlag(2));
- randTraces->setChecked(saver->randomTraces());
- TQString text;
- text.setNum(saver->traceLengthSeconds());
- lengthEdit->validateAndSet(text,0,0,0);
- text.setNum(saver->Lz());
- LzEdit->validateAndSet(text,0,0,0);
- text.setNum(saver->initEulerTheta());
- thetaEdit->validateAndSet(text,0,0,0);
-
- // if the preview area is resized it emmits the resized() event which is
- // caught by the saver. The embedded GlArea is resized to fit into the
- // preview area.
- connect(preview, TQT_SIGNAL(resized(TQResizeEvent*)),
- saver, TQT_SLOT(resizeGlArea(TQResizeEvent*)));
-}
-
-KRotationSetup::~KRotationSetup()
-{
- delete saver;
-}
-
-// Ok pressed - save settings and exit
-void KRotationSetup::okButtonClickedSlot(void)
-{
- TDEConfig* config = TDEGlobal::config();
- config->setGroup("Settings");
- config->writeEntry("x trace", saver->traceFlag(0));
- config->writeEntry("y trace", saver->traceFlag(1));
- config->writeEntry("z trace", saver->traceFlag(2));
- config->writeEntry("random traces", saver->randomTraces());
- config->writeEntry("length", saver->traceLengthSeconds());
- config->writeEntry("Lz", saver->Lz());
- config->writeEntry("theta", saver->initEulerTheta());
- config->sync();
- accept();
-}
-
-void KRotationSetup::aboutButtonClickedSlot(void)
-{
- KMessageBox::about(this, i18n("\
-<h3>KRotation Screen Saver for KDE</h3>\
-<p>Simulation of a force free rotating asymmetric body</p>\
-<p>Copyright (c) Georg&nbsp;Drenkhahn 2004</p>\
-<p><tt>[email protected]</tt></p>"));
-}
-
-void KRotationSetup::xTraceToggled(bool state)
-{
- saver->setTraceFlag(0, state);
-}
-void KRotationSetup::yTraceToggled(bool state)
-{
- saver->setTraceFlag(1, state);
-}
-void KRotationSetup::zTraceToggled(bool state)
-{
- saver->setTraceFlag(2, state);
-}
-void KRotationSetup::randomTracesToggled(bool state)
-{
- saver->setRandomTraces(state);
- if (state==false)
- {
- // restore settings from gui if random traces are turned off
- saver->setTraceFlag(0, xTrace->isChecked());
- saver->setTraceFlag(1, yTrace->isChecked());
- saver->setTraceFlag(2, zTrace->isChecked());
- }
-}
-void KRotationSetup::lengthEnteredSlot(const TQString& s)
-{
- saver->setTraceLengthSeconds(s.toDouble());
-}
-void KRotationSetup::LzEnteredSlot(const TQString& s)
-{
- saver->setLz(s.toDouble());
- if (saver!=0) saver->initData();
-}
-void KRotationSetup::thetaEnteredSlot(const TQString& s)
-{
- saver->setInitEulerTheta(s.toDouble());
- if (saver!=0) saver->initData();
-}
diff --git a/kscreensaver/kdesavers/rotation.h b/kscreensaver/kdesavers/rotation.h
deleted file mode 100644
index 0ae46469..00000000
--- a/kscreensaver/kdesavers/rotation.h
+++ /dev/null
@@ -1,328 +0,0 @@
-//============================================================================
-//
-// KRotation screen saver for KDE
-// Copyright (C) 2004 Georg Drenkhahn
-// $Id$
-//
-//============================================================================
-
-#ifndef __ROTATION_H__
-#define __ROTATION_H__
-
-#include <math.h>
-// STL headers
-#include <valarray>
-// TQt headers
-#include <tqwidget.h>
-#include <tqtimer.h>
-#include <tqgl.h>
-// GL headers
-#include <GL/glu.h>
-#include <GL/gl.h>
-// KDE headers
-#include <kscreensaver.h>
-
-#include "vec3.h"
-#include "rkodesolver.h"
-
-// KRotationSetupUi
-#include "rotationcfg.h"
-
-//--------------------------------------------------------------------
-
-/** @brief ODE solver for the Euler equations.
- *
- * Class implements RkOdeSolver<double> to solve the Euler equations of motion
- * tor the rotating object. */
-class EulerOdeSolver : public RkOdeSolver<double>
-{
- public:
- /** @brief Constructor for the ODE solver for the Euler equations.
- * @param t Time in seconds, integration variable
- * @param dt Initial time increment in seconds for integration, auto adjusted
- * later to guarantee precision
- * @param _A Moment of inertia along 1. figure axis
- * @param _B Moment of inertia along 2. figure axis
- * @param _C Moment of inertia along 3. figure axis
- * @param _y Vector of 12 elements containing the initial rotation vector
- * omega (elements 0 to 2), and the initial rotating systems coordinate
- * vectors e1, e2, e3 (elements 3 to 5, 6 to 8, and 9 to 11).
- * @param eps Relative precision per integration step, see
- * RkOdeSolver::RkOdeSolver(). */
- EulerOdeSolver(
- const double &t_,
- const double &dt_,
- const double &A_,
- const double &B_,
- const double &C_,
- std::valarray<double> &y_,
- const double &eps);
-
- protected:
- /** @brief ODE function for the Euler equation system
- * @param x time in seconds
- * @param y Vector of 12 elements containing the rotation vector omega
- * (elements 0 to 2), and the rotating systems coordinate vectors e1, e2, e3
- * (elements 3 to 5, 6 to 8, and 9 to 11).
- * @return derivation dy/dx */
- std::valarray<double>
- f(const double &x, const std::valarray<double> &y) const;
-
- private:
- /** Moments of inertia along the three figure axes */
- double A, B, C;
-};
-
-
-//--------------------------------------------------------------------
-
-/** @brief GL widget class for the KRotation screen saver
- *
- * Class implements TQGLWidget to display the KRotation screen saver. */
-class RotationGLWidget : public TQGLWidget
-{
- Q_OBJECT
-
-
- public:
- /** @brief Constructor of KRotation's GL widget
- * @param parent parent widget, passed to TQGLWidget's constructor
- * @param name name of widget, passed to TQGLWidget's constructor
- * @param omega current rotation vector
- * @param e1 x trace data
- * @param e2 y trace data
- * @param e3 z trace data
- * @param J 3 vector with momenta of inertia with respect to the 3 figure
- * axes. */
- RotationGLWidget(TQWidget* parent, const char* name,
- const vec3<double>& omega,
- const std::deque<vec3<double> >& e1,
- const std::deque<vec3<double> >& e2,
- const std::deque<vec3<double> >& e3,
- const vec3<double>& J);
-
- protected:
- /** Called if scenery (GL view) must be updated */
- virtual void paintGL();
- /** Called if gl widget was resized. Method makes adjustments for new
- * perspective */
- virtual void resizeGL(int w, int h);
- /** Setup the GL enviroment */
- virtual void initializeGL();
-
- private:
- /** @brief Draw 3D arrow
- * @param total_length total length of arrow
- * @param head_length length of arrow head (cone)
- * @param base_width width of arrow base
- * @param head_width width of arrow head (cone)
- *
- * The arrow is drawn from the coordinates zero point along th z direction.
- * The cone's tip is located at (0,0,@a total_length). */
- void myGlArrow(GLfloat total_length, GLfloat head_length,
- GLfloat base_width, GLfloat head_width);
- /** Draw the traces in the GL area */
- void draw_traces (void);
-
- private: // Private attributes
- /** Eye position distance from coordinate zero point */
- GLfloat eyeR;
- /** Eye position theta angle from z axis */
- GLfloat eyeTheta;
- /** Eye position phi angle (longitude) */
- GLfloat eyePhi;
- /** Box size */
- vec3<double> boxSize;
- /** GL object list of fixed coordinate systems axses */
- GLuint fixedAxses;
- /** GL object list of rotating coordinate systems axses */
- GLuint bodyAxses;
- /** Light position distance from coordinate zero point */
- GLfloat lightR;
- /** Light position theta angle from z axis */
- GLfloat lightTheta;
- /** Light position phi angle (longitude) */
- GLfloat lightPhi;
-
- /** stores position where the mouse button was pressed down */
- TQPoint mouse_press_pos;
-
- /** Length of the rotating coordinate system axses */
- GLfloat bodyAxsesLength;
- /** Length of the fixed coordinate system axses */
- GLfloat fixedAxsesLength;
-
- /** The openGL rotation matrix for the box. */
- GLfloat rotmat[16];
-
- /** reference to current rotation vector */
- const vec3<double>& omega;
- /** reference to x trace values */
- const std::deque<vec3<double> >& e1;
- /** reference to y trace values */
- const std::deque<vec3<double> >& e2;
- /** reference to z trace values */
- const std::deque<vec3<double> >& e3;
-};
-
-//--------------------------------------------------------------------
-
-/** @brief Main class of the KRotation screen saver
- *
- * This class implements KScreenSaver for the KRotation screen saver. */
-class KRotationSaver : public KScreenSaver
-{
- Q_OBJECT
-
-
- public:
- /** @brief Constructor of the KRotation screen saver object
- * @param drawable Id of the window in which the screen saver is drawed
- *
- * Initial settings are read from disk, the GL widget is set up and displayed
- * and the eq. of motion solver is started. */
- KRotationSaver(WId drawable);
- /** @brief Destructor of the KPendulum screen saver object
- *
- * Only KPendulumSaver::solver is destoyed. */
- ~KRotationSaver();
- /** read the saved settings from disk */
- void readSettings();
- /** init physical quantities and set up the ode solver */
- void initData();
-
- /** Returns length of traces in seconds of visibility, parameter from setup
- * dialog */
- inline double traceLengthSeconds(void) const {return m_traceLengthSeconds;}
- /** Sets the length of traces in seconds of visibility. */
- void setTraceLengthSeconds(const double& t);
- /** Lower argument limit for setTraceLengthSeconds() */
- static const double traceLengthSecondsLimitLower;
- /** Upper argument limit for setTraceLengthSeconds() */
- static const double traceLengthSecondsLimitUpper;
- /** Default value of KRotationSaver::m_traceLengthSeconds */
- static const double traceLengthSecondsDefault;
-
- /** Flags indicating if the traces for x,y,z are shown. Only relevant if
- * ::randomTraces is not set to true. Parameter from setup dialog */
- inline bool traceFlag(unsigned int n) const {return m_traceFlag[n];}
- /** (Un)Sets the x,y,z traces flags. */
- inline void setTraceFlag(unsigned int n, const bool& flag)
- {m_traceFlag[n] = flag;}
- /** Default values for KRotationSaver::m_traceFlag */
- static const bool traceFlagDefault[3];
-
- /** If flag is set to true the traces will be (de)activated randomly all 10
- * seconds. Parameter from setup dialog */
- inline bool randomTraces(void) const {return m_randomTraces;}
- /** (Un)Sets the random trace flag. */
- inline void setRandomTraces(const bool& flag) {m_randomTraces = flag;}
- /** Default value for KRotationSaver::m_randomTraces */
- static const bool randomTracesDefault = true;
-
- /** Returns the angular momentum. */
- inline double Lz(void) const {return m_Lz;}
- /** Sets the angular momentum. */
- void setLz(const double& Lz);
- /** Lower argument limit for setLz() */
- static const double LzLimitLower;
- /** Upper argument limit for setLz() */
- static const double LzLimitUpper;
- /** Default value for KRotationSaver::m_Lz */
- static const double LzDefault;
-
- /** Returns initial eulerian angle theta of the top body at t=0 sec. */
- inline double initEulerTheta(void) const {return m_initEulerTheta;}
- /** Set the initial eulerian angle theta of the top body at t=0 sec. */
- void setInitEulerTheta(const double& theta);
- /** Lower argument limit for setInitEulerTheta() */
- static const double initEulerThetaLimitLower;
- /** Upper argument limit for setInitEulerTheta() */
- static const double initEulerThetaLimitUpper;
- /** Default value for KRotationSaver::m_initEulerTheta */
- static const double initEulerThetaDefault;
-
- public slots:
- /** slot is called if integration should proceed by ::deltaT */
- void doTimeStep();
- /** slot is called if setup dialog changes in size and the GL area should be
- * adjusted */
- void resizeGlArea(TQResizeEvent* e);
-
- private:
- /** Momentum of inertia along figure axes */
- vec3<double> J;
- /** Initial eulerian angles phi of the top body at t=0s */
- double initEulerPhi;
- /** Initial eulerian angles psi of the top body at t=0s */
- double initEulerPsi;
-
- /** The ode solver which is used to integrate the equations of motion */
- EulerOdeSolver* solver;
- /** Gl widget of simulation */
- RotationGLWidget* glArea;
- /** Timer for the real time integration of the Euler equations */
- TQTimer* timer;
-
- /** current rotation vector */
- vec3<double> omega;
- /** deque of unit vectors of e1 figure axes in fixed frame coordinates */
- std::deque<vec3<double> > e1;
- /** deque of unit vectors of e2 figure axes in fixed frame coordinates */
- std::deque<vec3<double> > e2;
- /** deque of unit vectors of e3 figure axes in fixed frame coordinates */
- std::deque<vec3<double> > e3;
-
- /** Time step size for the integration in milliseconds. Used in
- * ::KRotationSaver and ::RotationGLWidget. */
- static const unsigned int deltaT = 20;
-
- /** Length of traces in seconds of visibility, parameter from setup dialog */
- double m_traceLengthSeconds;
- /** Flags indicating if the traces for x,y,z are shown. Only relevant if
- * ::randomTraces is not set to true. Parameter from setup dialog */
- bool m_traceFlag[3];
- /** If flag is set to true the traces will be (de)activated randomly all 10
- * seconds. Parameter from setup dialog */
- bool m_randomTraces;
- /** Angular momentum. This is a constant of motion and points always into
- * positive z direction. Parameter from setup dialog */
- double m_Lz;
- /** Initial eulerian angles theta of the top body at t=0 sec. Parameter from
- * setup dialog */
- double m_initEulerTheta;
-};
-
-//--------------------------------------------------------------------
-
-/** @brief KRotation screen saver setup dialog.
- *
- * This class handles the KRotation screen saver setup dialog. */
-class KRotationSetup : public KRotationSetupUi
-{
- Q_OBJECT
-
-
- public:
- KRotationSetup(TQWidget* parent = NULL, const char* name = NULL);
- ~KRotationSetup();
-
- public slots:
- /// slot for the OK Button: save settings and exit
- void okButtonClickedSlot(void);
- /// slot for the About Button: show the About dialog
- void aboutButtonClickedSlot(void);
- void randomTracesToggled(bool state);
- void xTraceToggled(bool state);
- void yTraceToggled(bool state);
- void zTraceToggled(bool state);
- void lengthEnteredSlot(const TQString& s);
- void LzEnteredSlot(const TQString& s);
- void thetaEnteredSlot(const TQString& s);
-
- private:
- /// the screen saver widget which is displayed in the preview area
- KRotationSaver* saver;
-};
-
-#endif
diff --git a/kscreensaver/kdesavers/rotationcfg.ui b/kscreensaver/kdesavers/rotationcfg.ui
deleted file mode 100644
index 7bfca1aa..00000000
--- a/kscreensaver/kdesavers/rotationcfg.ui
+++ /dev/null
@@ -1,488 +0,0 @@
-<!DOCTYPE UI><UI version="3.2" stdsetdef="1">
-<class>KRotationSetupUi</class>
-<widget class="TQDialog">
- <property name="name">
- <cstring>KRotationSetupUi</cstring>
- </property>
- <property name="geometry">
- <rect>
- <x>0</x>
- <y>0</y>
- <width>401</width>
- <height>265</height>
- </rect>
- </property>
- <property name="sizePolicy">
- <sizepolicy>
- <hsizetype>3</hsizetype>
- <vsizetype>3</vsizetype>
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="minimumSize">
- <size>
- <width>0</width>
- <height>0</height>
- </size>
- </property>
- <property name="maximumSize">
- <size>
- <width>1200</width>
- <height>900</height>
- </size>
- </property>
- <property name="baseSize">
- <size>
- <width>400</width>
- <height>250</height>
- </size>
- </property>
- <property name="caption">
- <string>KRotation Setup</string>
- </property>
- <vbox>
- <property name="name">
- <cstring>unnamed</cstring>
- </property>
- <property name="resizeMode">
- <enum>Minimum</enum>
- </property>
- <widget class="TQLayoutWidget">
- <property name="name">
- <cstring>layout17</cstring>
- </property>
- <hbox>
- <property name="name">
- <cstring>unnamed</cstring>
- </property>
- <widget class="TQLayoutWidget">
- <property name="name">
- <cstring>layout6</cstring>
- </property>
- <vbox>
- <property name="name">
- <cstring>unnamed</cstring>
- </property>
- <widget class="TQButtonGroup">
- <property name="name">
- <cstring>buttonGroup1</cstring>
- </property>
- <property name="sizePolicy">
- <sizepolicy>
- <hsizetype>0</hsizetype>
- <vsizetype>0</vsizetype>
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="title">
- <string>Traces</string>
- </property>
- <grid>
- <property name="name">
- <cstring>unnamed</cstring>
- </property>
- <widget class="TQLayoutWidget" row="0" column="0" rowspan="1" colspan="2">
- <property name="name">
- <cstring>layout5</cstring>
- </property>
- <grid>
- <property name="name">
- <cstring>unnamed</cstring>
- </property>
- <widget class="TQCheckBox" row="0" column="0">
- <property name="name">
- <cstring>xTrace</cstring>
- </property>
- <property name="enabled">
- <bool>true</bool>
- </property>
- <property name="text">
- <string>x</string>
- </property>
- </widget>
- <widget class="TQCheckBox" row="1" column="0" rowspan="1" colspan="3">
- <property name="name">
- <cstring>randTraces</cstring>
- </property>
- <property name="text">
- <string>Random</string>
- </property>
- </widget>
- <widget class="TQCheckBox" row="0" column="1">
- <property name="name">
- <cstring>yTrace</cstring>
- </property>
- <property name="text">
- <string>y</string>
- </property>
- </widget>
- <widget class="TQCheckBox" row="0" column="2">
- <property name="name">
- <cstring>zTrace</cstring>
- </property>
- <property name="text">
- <string>z</string>
- </property>
- </widget>
- </grid>
- </widget>
- <widget class="TQLabel" row="1" column="0">
- <property name="name">
- <cstring>textLabel1</cstring>
- </property>
- <property name="text">
- <string>Length:</string>
- </property>
- </widget>
- <widget class="TQLineEdit" row="1" column="1">
- <property name="name">
- <cstring>lengthEdit</cstring>
- </property>
- <property name="sizePolicy">
- <sizepolicy>
- <hsizetype>1</hsizetype>
- <vsizetype>0</vsizetype>
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="maximumSize">
- <size>
- <width>40</width>
- <height>32767</height>
- </size>
- </property>
- <property name="font">
- <font>
- <family>Helvetica</family>
- <pointsize>11</pointsize>
- </font>
- </property>
- <property name="maxLength">
- <number>2</number>
- </property>
- </widget>
- </grid>
- </widget>
- <widget class="TQLayoutWidget">
- <property name="name">
- <cstring>layout10</cstring>
- </property>
- <grid>
- <property name="name">
- <cstring>unnamed</cstring>
- </property>
- <widget class="TQLineEdit" row="0" column="1">
- <property name="name">
- <cstring>LzEdit</cstring>
- </property>
- <property name="sizePolicy">
- <sizepolicy>
- <hsizetype>0</hsizetype>
- <vsizetype>0</vsizetype>
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="maximumSize">
- <size>
- <width>50</width>
- <height>32767</height>
- </size>
- </property>
- <property name="maxLength">
- <number>5</number>
- </property>
- </widget>
- <widget class="TQLabel" row="1" column="0">
- <property name="name">
- <cstring>textLabel3</cstring>
- </property>
- <property name="sizePolicy">
- <sizepolicy>
- <hsizetype>1</hsizetype>
- <vsizetype>0</vsizetype>
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="text">
- <string>Theta:</string>
- </property>
- </widget>
- <widget class="TQLabel" row="0" column="0">
- <property name="name">
- <cstring>textLabel2</cstring>
- </property>
- <property name="sizePolicy">
- <sizepolicy>
- <hsizetype>0</hsizetype>
- <vsizetype>0</vsizetype>
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="text">
- <string>Lz:</string>
- </property>
- </widget>
- <widget class="TQLineEdit" row="1" column="1">
- <property name="name">
- <cstring>thetaEdit</cstring>
- </property>
- <property name="sizePolicy">
- <sizepolicy>
- <hsizetype>0</hsizetype>
- <vsizetype>0</vsizetype>
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="maximumSize">
- <size>
- <width>50</width>
- <height>32767</height>
- </size>
- </property>
- <property name="maxLength">
- <number>5</number>
- </property>
- </widget>
- </grid>
- </widget>
- <spacer>
- <property name="name">
- <cstring>spacer1</cstring>
- </property>
- <property name="orientation">
- <enum>Vertical</enum>
- </property>
- <property name="sizeType">
- <enum>Expanding</enum>
- </property>
- <property name="sizeHint">
- <size>
- <width>31</width>
- <height>51</height>
- </size>
- </property>
- </spacer>
- </vbox>
- </widget>
- <widget class="SsPreviewArea">
- <property name="name">
- <cstring>preview</cstring>
- </property>
- <property name="minimumSize">
- <size>
- <width>200</width>
- <height>150</height>
- </size>
- </property>
- </widget>
- </hbox>
- </widget>
- <widget class="TQLayoutWidget">
- <property name="name">
- <cstring>layout9</cstring>
- </property>
- <hbox>
- <property name="name">
- <cstring>unnamed</cstring>
- </property>
- <spacer>
- <property name="name">
- <cstring>spacer2</cstring>
- </property>
- <property name="orientation">
- <enum>Horizontal</enum>
- </property>
- <property name="sizeType">
- <enum>Expanding</enum>
- </property>
- <property name="sizeHint">
- <size>
- <width>51</width>
- <height>31</height>
- </size>
- </property>
- </spacer>
- <widget class="TQLayoutWidget">
- <property name="name">
- <cstring>layout4</cstring>
- </property>
- <hbox>
- <property name="name">
- <cstring>unnamed</cstring>
- </property>
- <widget class="TQPushButton">
- <property name="name">
- <cstring>OkButton</cstring>
- </property>
- <property name="text">
- <string>&amp;OK</string>
- </property>
- <property name="default">
- <bool>true</bool>
- </property>
- </widget>
- <widget class="TQPushButton">
- <property name="name">
- <cstring>CancelButton</cstring>
- </property>
- <property name="text">
- <string>&amp;Cancel</string>
- </property>
- </widget>
- <widget class="TQPushButton">
- <property name="name">
- <cstring>AboutButton</cstring>
- </property>
- <property name="text">
- <string>&amp;About</string>
- </property>
- </widget>
- </hbox>
- </widget>
- <spacer>
- <property name="name">
- <cstring>spacer3</cstring>
- </property>
- <property name="orientation">
- <enum>Horizontal</enum>
- </property>
- <property name="sizeType">
- <enum>Expanding</enum>
- </property>
- <property name="sizeHint">
- <size>
- <width>61</width>
- <height>31</height>
- </size>
- </property>
- </spacer>
- </hbox>
- </widget>
- </vbox>
-</widget>
-<customwidgets>
- <customwidget>
- <class>SsPreviewArea</class>
- <header location="global">sspreviewarea.h</header>
- <sizehint>
- <width>-1</width>
- <height>1</height>
- </sizehint>
- <container>0</container>
- <sizepolicy>
- <hordata>5</hordata>
- <verdata>5</verdata>
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- <pixmap>image0</pixmap>
- </customwidget>
-</customwidgets>
-<images>
- <image name="image0">
- <data format="XPM.GZ" length="4462">789c9d97c76e24490e86effd1442f3d65870d2451a0ce6206f5adeb4cc620f8c34f2553225b5a4c1befb46927fe6a1d4c0ccac4287fa8a0c26834193f5dbb785b3fd9d856fbf7d799ec9ecba5ea8afe469e15bf3727ffffeeffffcf1e797af49b2d0ffc7d142f2f55f5fbe1ecc16ea85dde9a4ed81290045faa77ca49cf4ab67ba1e3953969173651ab9d4fdf1c8a27c3872ad7c3c72d3b32c2a67c3f3444636fbef23eb7e590267e68fcc4656395d8dacf6d938ef97eaef289781cddebdb2846fccff44b989ba58e3411f3dc75158e6df1d3889539517ca49bf54fe43398d1dec4f46567f685fd9c539f43fc025f80c1c3ce8d93f28e77185f8bf0c6cfae4c0b5f9c3c6e5c0542a4b5876fe13708df39d2bd7716372aa8c93c4e4723bb2f977aadc26ceec4bdb7310e6b0bfab9c2445ecd49f1370694cebca65d260ffa6711a41aef14d24e94cee6be3348e0ae5e9c8765f07ca3e8db17f0f9c825794eb3489351fe9bb7217e4969f29388bd51ee9fda5715a19730696b852fea95c6471647ca95cf64bcf43e0cef4657b647bfe6acf213d6bb32f9a9f5992b5a64f9a8f990b6cf9ecc15d6cf9acf6b2da55a8a75cb973dee4b2d1b38b5c05de02434e87e01aacfb351df5bebddea74b5c67f9c795711ea15e357e2ecde358fb87efc0a867df8cac728a074e62e527706afb59f3cf6583be5c28bb3c35f693812d1fbdc6dbe57966fec932d899ffa4f7e38adca17e34beaeca4b9c271a18f1d5fc739257b0d70d9c68be7bed7fcee7827ab91cd8e4740cf6b19d4ffb87ab07b9bf516e72d4a3ac821b9cef6e60d84f47367ded2fae1d9f7704f6163f79000ffde27660f387ed3c5dbf54dfeebb0bf6acbe6b706bfa5ef32f8f8b18f5bf0f463f20edb77956a4e68fbc80b3c4facd163847be6bfde72ec86dbeac82715fbc0286be683cf3bc081d44f7df80d344fb0b6b7de64581fb916765297263d6fccd9b7ee97e566e8b06cfdb1f59cf2bda2f8bbc2c11df0c5c41aefdb328ca22b1feb0012eedbce24736f91b18fb796d64eb87cb60817dcdafb07d906bfd14d22f659d8785ef97b2f6d7b2df6ef1d6fb2babaac6f92e8c25b27ecc1f239b7f3a5fca5a8678ea7c2d9bc0e6ef1238b3fca2c7814d5f4cbf9334b5f833384bed3c7a5f5514f4adbe2ec07962e7590457f06f6f649b977afe2a16f42f5e070bfc591e18f7a5f1a812a9e0df39d827da4fbd8c6ccfd7785569bf945f953371a9d5a3de67950bfa2d75c63eb2fb15bdcfaaf011e6c7263846bf8f4636f91618f3c7d3c0f047fb69550efab2074e12bd6fd27957553ec33c5b043bcc7f9d0795f818fdb501a3df8ae673e507ff69021eea37063bc45ffb73550736ff36c0a84f3e0317a86f8b5f139e6ffe1f821de6d9127898ff3be00a7c3ab2cd03e3d697560ff40016e47b3bb2e96bbd559d8f32bbff4b7065f193042c98873acf240af6adbf3c83c5f2954bb0c7bcd77c107d81d2fdebc63e33ff640aaecc9e1c8151df5c803dfaadc64b52dfa03ed64636ffb4ff4b2867f453ede7227586fcd3f9264ded91fffafe236d5da37fe83c91ceb7b9e5b7f6731ff92ed7f747d6fbf7e185cf58347e3e6932e47b3430fa893edf87d795c2fc3f003b67f5f902cec17abfde0dfa3c053b3c5ffb832fc2eb8fddcf233887fc195c801f46b6f3cdc02558fba72f7d2d1a7f7e321ee58fe0cad86bbff24dd3e2fe74fef836b0c6eb60d62fa6bf5e07b3419f853dd7dc70fb8bd5f1255fd90ed30f9f3c5ff30ddff21ddff384a7fcc08ffcc4cf61cdf8855ff9e79c7e1db4dff89d3f7891977899577895d7789d377893b7f83b6fcfe937bc13b477798ff7f9800ff928ac633ee11f7cca6761d7f99c7e1b3cb908da11c7413be1943376e153cc39175c72f549ff9e17c31744429e6a6aa8a58e2ee98aaee9866e7f617fc24b7417a4f734a1293dd0233dd133cd8285177aa5f9f3b63ca5377aa78f607b919668995682e62aadd17ab0b1419b9ff41f682b48bed336edd02eed05ed7d5ea3033a0cdf1ed1f127fd273ae123fa41a774a6b685cee982228a837e42e927fd47caf8985c38651eb40b2ac38e4a5842658a97fab33fd248cb87d2c9a55cc9b5dcc82d1fc99ddccb44a6f230af2f8ff224cf417f262ff22a3fe54ddee543166549966545567f617f4dd66523dc6b2c9bb225df655b7682f692ecca9eeccfe97772c09b722847722c27c1f3eb70f66bf9116c9fca999ccbc59cfe25bf4a143a5ef8992561324a78bd92522acf9ebc78efe7cf7b153276db37bef59dbff457fedadff85b7f27abfede4ffcd4cf9ff76faeff4fffefeff8c7f5fedfdfbffc0fa355c495</data>
- </image>
-</images>
-<connections>
- <connection>
- <sender>OkButton</sender>
- <signal>clicked()</signal>
- <receiver>KRotationSetupUi</receiver>
- <slot>okButtonClickedSlot()</slot>
- </connection>
- <connection>
- <sender>CancelButton</sender>
- <signal>clicked()</signal>
- <receiver>KRotationSetupUi</receiver>
- <slot>close()</slot>
- </connection>
- <connection>
- <sender>AboutButton</sender>
- <signal>clicked()</signal>
- <receiver>KRotationSetupUi</receiver>
- <slot>aboutButtonClickedSlot()</slot>
- </connection>
- <connection>
- <sender>randTraces</sender>
- <signal>toggled(bool)</signal>
- <receiver>xTrace</receiver>
- <slot>setDisabled(bool)</slot>
- </connection>
- <connection>
- <sender>xTrace</sender>
- <signal>toggled(bool)</signal>
- <receiver>KRotationSetupUi</receiver>
- <slot>xTraceToggled(bool)</slot>
- </connection>
- <connection>
- <sender>randTraces</sender>
- <signal>toggled(bool)</signal>
- <receiver>yTrace</receiver>
- <slot>setDisabled(bool)</slot>
- </connection>
- <connection>
- <sender>randTraces</sender>
- <signal>toggled(bool)</signal>
- <receiver>zTrace</receiver>
- <slot>setDisabled(bool)</slot>
- </connection>
- <connection>
- <sender>randTraces</sender>
- <signal>toggled(bool)</signal>
- <receiver>KRotationSetupUi</receiver>
- <slot>randomTracesToggled(bool)</slot>
- </connection>
- <connection>
- <sender>yTrace</sender>
- <signal>toggled(bool)</signal>
- <receiver>KRotationSetupUi</receiver>
- <slot>yTraceToggled(bool)</slot>
- </connection>
- <connection>
- <sender>zTrace</sender>
- <signal>toggled(bool)</signal>
- <receiver>KRotationSetupUi</receiver>
- <slot>zTraceToggled(bool)</slot>
- </connection>
- <connection>
- <sender>lengthEdit</sender>
- <signal>textChanged(const TQString&amp;)</signal>
- <receiver>KRotationSetupUi</receiver>
- <slot>lengthEnteredSlot(const TQString&amp;)</slot>
- </connection>
- <connection>
- <sender>LzEdit</sender>
- <signal>textChanged(const TQString&amp;)</signal>
- <receiver>KRotationSetupUi</receiver>
- <slot>LzEnteredSlot(const TQString&amp;)</slot>
- </connection>
- <connection>
- <sender>thetaEdit</sender>
- <signal>textChanged(const TQString&amp;)</signal>
- <receiver>KRotationSetupUi</receiver>
- <slot>thetaEnteredSlot(const TQString&amp;)</slot>
- </connection>
-</connections>
-<Q_SLOTS>
- <slot>okButtonClickedSlot()</slot>
- <slot>aboutButtonClickedSlot()</slot>
- <slot>randomTracesToggled(bool)</slot>
- <slot>xTraceToggled(bool)</slot>
- <slot>yTraceToggled(bool)</slot>
- <slot>zTraceToggled(bool)</slot>
- <slot>lengthEnteredSlot(const TQString&amp;)</slot>
- <slot>LzEnteredSlot(const TQString&amp;)</slot>
- <slot>thetaEnteredSlot(const TQString&amp;)</slot>
-</Q_SLOTS>
-<layoutdefaults spacing="6" margin="11"/>
-<includehints>
- <includehint>sspreviewarea.h</includehint>
-</includehints>
-</UI>
diff --git a/kscreensaver/kdesavers/science.cpp b/kscreensaver/kdesavers/science.cpp
deleted file mode 100644
index efa860d9..00000000
--- a/kscreensaver/kdesavers/science.cpp
+++ /dev/null
@@ -1,1151 +0,0 @@
-//-----------------------------------------------------------------------------
-//
-// kscience - screen saver for KDE
-//
-// Copyright (c) Rene Beutler 1998
-//
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <math.h>
-#include <sys/types.h>
-#include <time.h>
-
-#include <tqpainter.h>
-#include <tqpixmap.h>
-#include <tqlabel.h>
-#include <tqlistbox.h>
-#include <tqcheckbox.h>
-#include <tqslider.h>
-#include <tqlayout.h>
-
-#include <kapplication.h>
-#include <kglobal.h>
-#include <kmessagebox.h>
-#include <klocale.h>
-#include <kconfig.h>
-#include <kstandarddirs.h>
-#include <krandomsequence.h>
-
-#include "science.h"
-#include "science.moc"
-
-#if defined Q_WS_X11 && !defined K_WS_TQTONLY
-#include <X11/Xlib.h>
-#include <X11/Xutil.h>
-#endif
-
-#define SCI_DEFAULT_MODE 0
-#define SCI_DEFAULT_MOVEX 6
-#define SCI_DEFAULT_MOVEY 8
-#define SCI_DEFAULT_SIZE 15
-#define SCI_DEFAULT_INTENSITY 4
-#define SCI_DEFAULT_SPEED 70
-#define SCI_DEFAULT_INVERSE false
-#define SCI_DEFAULT_GRAVITY false
-#define SCI_DEFAULT_HIDE false
-#define SCI_MAX_SPEED 100
-#define SCI_MAX_MOVE 20
-
-#undef Below
-
-
-// libkscreensaver interface
-extern "C"
-{
- KDE_EXPORT const char *kss_applicationName = "kscience.kss";
- KDE_EXPORT const char *kss_description = I18N_NOOP( "Science Screen Saver" );
- KDE_EXPORT const char *kss_version = "2.2.0";
-
- KDE_EXPORT KScreenSaver *kss_create( WId id )
- {
- return new KScienceSaver( id );
- }
-
- KDE_EXPORT TQDialog *kss_setup()
- {
- return new KScienceSetup();
- }
-}
-
-static struct {
- TQString name;
- bool inverseEnable;
- } modeInfo[MAX_MODES];
-
-enum { MODE_WHIRL=0, MODE_CURVATURE, MODE_SPHERE, MODE_WAVE, MODE_EXPONENTIAL, MODE_CONTRACTION };
-
-void initModeInfo()
-{
- modeInfo[MODE_WHIRL].name = i18n( "Whirl" );
- modeInfo[MODE_WHIRL].inverseEnable = true;
-
- modeInfo[MODE_SPHERE].name = i18n( "Sphere" );
- modeInfo[MODE_SPHERE].inverseEnable = true;
-
- modeInfo[MODE_EXPONENTIAL].name = i18n( "Exponential" );
- modeInfo[MODE_EXPONENTIAL].inverseEnable = false;
-
- modeInfo[MODE_CONTRACTION].name = i18n( "Contraction" );
- modeInfo[MODE_CONTRACTION].inverseEnable = false;
-
- modeInfo[MODE_WAVE].name = i18n( "Wave" );
- modeInfo[MODE_WAVE].inverseEnable = false;
-
- modeInfo[MODE_CURVATURE].name = i18n( "Curvature" );
- modeInfo[MODE_CURVATURE].inverseEnable = true;
-}
-
-//-----------------------------------------------------------------------------
-// KPreviewWidget
-//
-
-KPreviewWidget::KPreviewWidget( TQWidget *parent ) :
- TQWidget ( parent ) { }
-
-void KPreviewWidget::paintEvent( TQPaintEvent *event )
-{
- if( saver != 0 )
- saver->do_refresh( event->rect() );
-}
-
-void KPreviewWidget::notifySaver( KScienceSaver *s )
-{
- saver = s;
-}
-
-//-----------------------------------------------------------------------------
-// Screen Saver
-//
-
-struct KScienceData
-{
- T32bit **offset;
- XImage *buffer;
- XImage *xRootWin;
- GC gc;
-};
-
-KScienceSaver::KScienceSaver( WId id, bool s, bool gP )
- : KScreenSaver( id )
-{
- d = new KScienceData;
- d->gc = XCreateGC(tqt_xdisplay(), id, 0, 0);
- d->xRootWin = 0;
- d->buffer = 0;
-
- moveOn = true;
- grabPixmap = gP;
- setup = s;
-
- vx = vy = 0.0;
- readSettings();
-
- if( !grabPixmap )
- {
- grabRootWindow();
- initialize();
- do_refresh( TQRect ( 0, 0, width(), height() ) );
- }
-
- connect( &timer, TQT_SIGNAL( timeout() ), TQT_SLOT( slotTimeout() ) );
- timer.start( SCI_MAX_SPEED - speed[mode] );
-}
-
-KScienceSaver::~KScienceSaver()
-{
- timer.stop();
- releaseLens();
- if ( d->xRootWin )
- XDestroyImage( d->xRootWin );
- XFreeGC(tqt_xdisplay(), d->gc );
- delete d;
-}
-
-void KScienceSaver::myAssert( bool term, const char *eMsg )
-{
- if( !term ) {
- fprintf(stderr, "Error in KScreensaver - mode Science: %s\n", eMsg);
- releaseLens();
- exit(-1);
- }
-}
-
-void KScienceSaver::initialize()
-{
- KRandomSequence rnd;
- initLens();
- signed int ws = (signed int) (width() - diam);
- signed int hs = (signed int) (height() - diam);
-
- x = (ws > 0) ? (rnd.getDouble() * ws ) : 0.0;
- y = (hs > 0) ? (rnd.getDouble() * hs ) : 0.0;
-
- xcoord = (int) x;
- ycoord = (int) y;
-
- switch( bpp ) {
- case 1 : applyLens = &KScienceSaver::applyLens8bpp; break;
- case 2 : applyLens = &KScienceSaver::applyLens16bpp; break;
- case 3 : applyLens = &KScienceSaver::applyLens24bpp; break;
- case 4 : applyLens = &KScienceSaver::applyLens32bpp; break;
- default: myAssert( false, "unsupported colordepth "\
- "(only 8, 16, 24, 32 bpp supported)" );
- }
-}
-
-void KScienceSaver::initWhirlLens()
-{
- double dx, dy, r, phi, intens;
- T32bit *off;
- T32bit xo, yo;
-
- intens = double( intensity[mode] + 1) / 5.0;
- if( inverse[mode] )
- intens = -intens;
-
- for(int y = side-1; y >= 0; y--)
- {
- dy = y - origin;
- off = d->offset[y] = (T32bit *) malloc(sizeof(T32bit) * side);
- myAssert( off != 0, "too few memory" );
- for(int x = side-1; x >= 0; x--)
- {
- dx = x - origin;
- r = sqrt( dx*dx + dy*dy );
-
- if( r < radius )
- {
- if ( dx == 0.0 )
- phi = (dy > 0.0) ? M_PI_2 :-(M_PI_2);
- else
- phi = atan2( dy, dx );
- phi += intens * ( radius - r ) / ( r+7.0 );
- xo = (T32bit) ( origin + r*cos( phi ) - x );
- yo = (T32bit) ( origin + r*sin( phi ) - y );
- off[x] = xo*bpp + yo*imgnext;
- }
- else
- if( hideBG[mode] )
- off[x] = (border-y)*imgnext + (border-x)*bpp;
- else
- off[x] = 0;
- }
- }
-}
-
-void KScienceSaver::initSphereLens()
-{
- double dx, dy, r, xr, yr, phi, intens;
- T32bit *off;
- T32bit xo, yo;
-
- intens = 1.0 - double( intensity[mode] ) / 20.0;
-
- if( inverse[mode] )
- intens = -intens;
-
- for(int y = side-1; y >= 0; y--)
- {
- dy = y - origin;
- off = d->offset[y] = (T32bit *) malloc(sizeof(T32bit) * side);
- myAssert( off != 0, "too few memory" );
- for(int x = side-1; x >= 0; x--)
- {
- dx = x - origin;
- r = sqrt( dx*dx + dy*dy );
-
- if( r < radius )
- {
- xr = (double) radius*cos(asin(dy/radius));
- yr = (double) radius*cos(asin(dx/radius));
- phi = (xr != 0.0) ? asin(dx/xr) : 0.0;
- xo = (T32bit) (origin + intens*2.0*phi*xr / M_PI - x);
- phi = (yr != 0.0) ? asin(dy/yr) : 0.0;
- yo = (T32bit) (origin + intens*2.0*phi*yr / M_PI - y);
- off[x] = xo*bpp + yo*imgnext;
- }
- else
- if( hideBG[mode] )
- off[x] = (border-y)*imgnext + (border-x)*bpp;
- else
- off[x] = 0;
- }
- }
-}
-
-void KScienceSaver::initExponentialLens()
-{
- double dx, dy, r, rnew, f, intens;
- T32bit *off;
- T32bit xo, yo;
-
- if( mode == MODE_EXPONENTIAL )
- intens = - (0.1 + 0.8 * double( intensity[mode] + 2) / 10.0);
- else
- intens = 0.9 - 0.8 * double( intensity[mode] ) / 10.0;
-
- for(int y = side-1; y >= 0; y--)
- {
- dy = y - origin;
- off = d->offset[y] = (T32bit *) malloc(sizeof(T32bit) * side);
- myAssert( off != 0, "too few memory" );
- for(int x = side-1; x >= 0; x--)
- {
- dx = x - origin;
- r = sqrt( dx*dx + dy*dy );
-
- if( r < radius )
- {
- if( r == 0.0 )
- f = 0.0;
- else
- {
- rnew = radius*(pow(r, intens) / pow(radius, intens));
- f = double ((int)rnew % radius) / r;
- }
- xo = (T32bit) ( origin + f*dx - x );
- yo = (T32bit) ( origin + f*dy - y );
- off[x] = xo*bpp + yo*imgnext;
- }
- else
- if( hideBG[mode] )
- off[x] = (border-y)*imgnext + (border-x)*bpp;
- else
- off[x] = 0;
- }
- }
-}
-
-void KScienceSaver::initCurvatureLens()
-{
- double dx, dy, r, f, intens;
- T32bit *off;
- T32bit xo, yo;
-
- intens = (double) radius*intensity[mode] / 20.0;
- if( inverse[mode] ) intens = -intens;
-
- for(int y = side-1; y >= 0; y--)
- {
- dy = y - origin;
- off = d->offset[y] = (T32bit *) malloc(sizeof(T32bit) * side);
- myAssert( off != 0, "too few memory" );
- for(int x = side-1; x >= 0; x--)
- {
- dx = x - origin;
- r = sqrt( dx*dx + dy*dy );
-
- if( r < radius )
- {
- if( r == 0.0 )
- f = 0.0;
- else
- f = (r - intens * sin(M_PI * r/(double)radius)) / r;
- xo = (T32bit) ( origin + f*dx - x );
- yo = (T32bit) ( origin + f*dy - y );
- off[x] = xo*bpp + yo*imgnext;
- }
- else
- if( hideBG[mode] )
- off[x] = (border-y)*imgnext + (border-x)*bpp;
- else
- off[x] = 0;
- }
- }
-}
-
-void KScienceSaver::initWaveLens()
-{
- double dx, dy, r, rnew, f, intens, k;
- T32bit *off;
- T32bit xo, yo;
-
- intens = (double) intensity[mode] + 1.0;
- k = (intensity[mode] % 2) ? -12.0 : 12.0;
-
- for(int y = side-1; y >= 0; y--)
- {
- dy = y - origin;
- off = d->offset[y] = (T32bit *) malloc(sizeof(T32bit) * side);
- myAssert( off != 0, "too few memory" );
- for(int x = side-1; x >= 0; x--)
- {
- dx = x - origin;
- r = sqrt( dx*dx + dy*dy );
-
- if( r < radius )
- {
- if( r == 0.0 )
- f = 0.0;
- else
- {
- rnew = r - k * sin( M_PI * intens * r/(double)radius);
- f = double ((int)rnew % radius) / r;
- }
- xo = (T32bit) ( origin + f*dx - x );
- yo = (T32bit) ( origin + f*dy - y );
- off[x] = xo*bpp + yo*imgnext;
- }
- else
- if( hideBG[mode] )
- off[x] = (border-y)*imgnext + (border-x)*bpp;
- else
- off[x] = 0;
- }
- }
-}
-
-void KScienceSaver::initLens()
-{
- int min = (width() < height()) ? width() : height();
- border = 1 + SCI_MAX_MOVE;
-
- radius = (size[mode] * min) / 100;
- if( radius<<1 == min ) radius--;
- diam = radius << 1;
- myAssert( diam < min, "assertion violated: diam < min" );
- origin = radius + border;
- side = origin << 1;
-
- d->buffer = XSubImage( d->xRootWin, 0, 0, side, side );
- myAssert( d->buffer != 0, "can't allocate pixmap" );
-
- d->offset = (T32bit **) malloc( sizeof(T32bit *) * side );
- myAssert( d->offset != 0, "too few memory" );
-
- switch( mode ) {
- case MODE_WHIRL: initWhirlLens(); break;
- case MODE_SPHERE: initSphereLens(); break;
- case MODE_EXPONENTIAL:
- case MODE_CONTRACTION: initExponentialLens(); break;
- case MODE_CURVATURE: initCurvatureLens(); break;
- case MODE_WAVE: initWaveLens(); break;
- default: myAssert( false, "internal error (wrong mode in initLens() )" );
- }
-}
-
-void KScienceSaver::releaseLens()
-{
- if( d->offset != 0 ) {
- for(int i=0; i<side; i++)
- if( d->offset[i] != 0 ) free( d->offset[i] );
- free( d->offset );
- d->offset = 0;
- }
- if( d->buffer != 0 ) {
- XDestroyImage( d->buffer );
- d->buffer = 0;
- }
-}
-
-void KScienceSaver::setMode( int m )
-{
- timer.stop();
-
- releaseLens();
- int old = mode;
- mode = m;
- vx = copysign( moveX[mode], vx );
- vy = copysign( moveY[mode], vy );
- int dm = diam;
- initLens();
- if( hideBG[old] ^ hideBG[m] )
- do_refresh( TQRect( 0, 0, width(), height() ) );
- else
- if( diam < dm )
- {
- do_refresh( TQRect( (int) x+diam, (int) y, dm-diam, diam ) );
- do_refresh( TQRect( (int) x, (int) y+diam, dm, dm-diam ) );
- }
-
- timer.start( SCI_MAX_SPEED - speed[mode] );
-}
-
-void KScienceSaver::setMoveX( int s )
-{
- timer.stop();
-
- moveX[mode] = s;
- vx = copysign( moveX[mode], vx );
-
- timer.start( SCI_MAX_SPEED - speed[mode] );
-}
-
-void KScienceSaver::setMoveY( int s )
-{
- timer.stop();
-
- moveY[mode] = s;
- vy = copysign( moveY[mode], vy );
-
- timer.start( SCI_MAX_SPEED - speed[mode] );
-}
-
-void KScienceSaver::setMove( bool s )
-{
- moveOn = s;
-}
-
-void KScienceSaver::setSize( int s )
-{
- timer.stop();
-
- releaseLens();
- int dm = diam;
- size[mode] = s;
- initLens();
- if( diam < dm )
- {
- do_refresh( TQRect( (int) x+diam, (int) y, dm-diam, diam ) );
- do_refresh( TQRect( (int) x, (int) y+diam, dm, dm-diam ) );
- }
-
- timer.start( SCI_MAX_SPEED - speed[mode] );
-}
-
-void KScienceSaver::setSpeed( int s )
-{
- speed[mode] = s;
-
- timer.changeInterval( SCI_MAX_SPEED - speed[mode] );
-}
-
-void KScienceSaver::setIntensity( int i )
-{
- timer.stop();
-
- releaseLens();
- intensity[mode] = i;
- initLens();
-
- timer.start( SCI_MAX_SPEED - speed[mode]);
-}
-
-void KScienceSaver::setInverse( bool b )
-{
- timer.stop();
-
- releaseLens();
- inverse[mode] = b;
- initLens();
-
- timer.start( SCI_MAX_SPEED - speed[mode]);
-}
-
-void KScienceSaver::setGravity( bool b )
-{
- timer.stop();
-
- releaseLens();
- gravity[mode] = b;
- vy = copysign( moveY[mode], vy );
- initLens();
-
- timer.start( SCI_MAX_SPEED - speed[mode]);
-}
-
-void KScienceSaver::setHideBG( bool b )
-{
- timer.stop();
-
- releaseLens();
- hideBG[mode] = b;
- initLens();
- do_refresh( TQRect( 0, 0, width(), height() ) );
-
- timer.start( SCI_MAX_SPEED - speed[mode]);
-}
-
-void KScienceSaver::readSettings()
-{
- TDEConfig *config = TDEGlobal::config();
- TQString sMode;
-
- config->setGroup( "Settings" );
- mode = config->readNumEntry( "ModeNr", SCI_DEFAULT_MODE );
-
- for(int i=0; i < MAX_MODES; i++)
- {
- sMode.setNum( i );
- config->setGroup( "Mode" + sMode );
- moveX[i] = config->readNumEntry( "MoveX", SCI_DEFAULT_MOVEX);
- moveY[i] = config->readNumEntry( "MoveY", SCI_DEFAULT_MOVEY);
- size[i] = config->readNumEntry( "Size", SCI_DEFAULT_SIZE);
- speed[i] = config->readNumEntry( "Speed", SCI_DEFAULT_SPEED);
- intensity[i] = config->readNumEntry( "Intensity", SCI_DEFAULT_INTENSITY);
- inverse[i] = config->readBoolEntry( "Inverse", SCI_DEFAULT_INVERSE);
- gravity[i] = config->readBoolEntry( "Gravity", SCI_DEFAULT_GRAVITY);
- hideBG[i] = config->readBoolEntry( "HideBG", SCI_DEFAULT_HIDE);
- }
-
- vx = copysign( moveX[mode], vx );
- vy = copysign( moveY[mode], vy );
-}
-
-void KScienceSaver::do_refresh( const TQRect & rect )
-{
- if( grabPixmap )
- return;
- rect.normalize();
-
- if( hideBG[mode] )
- {
- XSetWindowBackground( tqt_xdisplay(), winId(), black.pixel() );
- XClearArea( tqt_xdisplay(), winId(), rect.left(), rect.top(),
- rect.width(), rect.height(), false );
- }
- else
- {
- myAssert( d->xRootWin != 0, "root window not grabbed" );
- XPutImage( tqt_xdisplay(), winId(), d->gc, d->xRootWin,
- rect.left(), rect.top(),
- rect.left(), rect.top(),
- rect.width(), rect.height() );
- }
-}
-
-void KScienceSaver::slotTimeout()
-{
- if( grabPixmap ) {
- if( !TQWidget::find(winId())->isActiveWindow() )
- return;
- grabPreviewWidget();
- grabPixmap = false;
- initialize();
- if( hideBG[mode] )
- do_refresh( TQRect ( 0, 0, width(), height() ) );
- }
-
- signed int oldx = xcoord, oldy = ycoord;
-
- if( gravity[mode] ) {
- double h = double(y+1.0) / double(height()-diam);
- if( h > 1.0 ) h = 1.0;
- vy = sqrt( h ) * ( (vy > 0.0) ? moveY[mode] : -moveY[mode] );
- }
- myAssert( abs((int)rint(vy)) <= border, "assertion violated: vy <= border" );
-
- if( moveOn )
- {
- x += vx;
- y += vy;
- }
-
- if( x <= 0.0 ) {
- vx = -vx;
- x = 0.0;
- }
- if( int(x) + diam >= width()) {
- vx = -vx;
- myAssert( width()-diam > 0, "assertion violated: width-diam > 0" );
- x = (double) (width() - diam - 1);
- }
- if( y <= 0.0 ) {
- vy = -vy;
- y = 0.0;
- }
- if( int(y) + diam >= height() ) {
- vy = -vy;
- myAssert( height() - diam > 0, "assertion violated: height-diam > 0" );
- y = (double) (height() - diam - 1);
- }
-
- xcoord = (int) x ;
- ycoord = (int) y ;
- signed int dx = (signed int) xcoord - oldx;
- signed int dy = (signed int) ycoord - oldy;
- signed int xs, ys, xd, yd, w, h;
-
- if( dx > 0 ) {
- w = diam+dx;
- xd = oldx;
- xs = border-dx;
- if( dy > 0 ) {
- h = diam+dy;
- yd = oldy;
- ys = border-dy;
- }
- else {
- h = diam-dy;
- yd = ycoord;
- ys = border;
- }
- }
- else {
- w = diam-dx;
- xd = xcoord;
- xs = border;
- if( dy > 0 ) {
- h = diam+dy;
- yd = oldy;
- ys = border-dy;
- } else {
- h = diam-dy;
- yd = ycoord;
- ys = border;
- }
- }
-
- if( xd + w >= width() ) w = width() - xd - 1;
- if( yd + h >= height() ) h = height() - yd - 1;
-
-//printf("%d: (dx: %3d, dy: %3d), diam: %3d, (xc: %3d, yc: %3d), (xs: %3d, ys: %3d), (xd: %3d, yd: %3d), (w: %3d, h: %3d)\n", mode, dx, dy, diam, xcoord, ycoord, xs, ys, xd, yd, w, h);
- myAssert( dx <= border && dy <=border, "assertion violated: dx or dy <= border");
- myAssert( xcoord >= 0 && ycoord >= 0, "assertion violated: xcoord, ycoord >= 0 ");
- myAssert( xd+w < width(), "assertion violated: xd+w < width" );
- myAssert( yd+h < height(), "assertion violated: yd+h < height" );
-
- if( hideBG[mode] )
- blackPixel( xcoord, ycoord );
- (this->*applyLens)(xs, ys, xd, yd, w, h);
- XPutImage( tqt_xdisplay(), winId(), d->gc, d->buffer, 0, 0, xd, yd, w, h );
- if( hideBG[mode] )
- blackPixelUndo( xcoord, ycoord );
-}
-
-void KScienceSaver::grabRootWindow()
-{
- Display *dsp = tqt_xdisplay();
- Window rootwin = RootWindow( dsp, tqt_xscreen() );
-
- // grab contents of root window
- if( d->xRootWin )
- XDestroyImage( d->xRootWin );
-
- d->xRootWin = XGetImage( dsp, rootwin, 0, 0, width(),
- height(), AllPlanes, ZPixmap);
- myAssert( d->xRootWin, "unable to grab root window\n" );
-
- imgnext = d->xRootWin->bytes_per_line;
- bpp = ( d->xRootWin->bits_per_pixel ) >> 3;
-}
-
-void KScienceSaver::grabPreviewWidget()
-{
- myAssert( TQWidget::find(winId())->isActiveWindow(), "can't grab preview widget: dialog not active()" );
-
- if( d->xRootWin )
- XDestroyImage( d->xRootWin );
-
- Display *dsp = tqt_xdisplay();
- d->xRootWin = XGetImage( dsp, winId(), 0, 0, width(), height(), AllPlanes, ZPixmap);
- myAssert( d->xRootWin, "unable to grab preview window\n" );
-
- imgnext = d->xRootWin->bytes_per_line;
- bpp = ( d->xRootWin->bits_per_pixel ) >> 3;
-}
-
-void KScienceSaver::blackPixel( int x, int y )
-{
- unsigned char black = (char) BlackPixel( tqt_xdisplay(), tqt_xscreen() );
- unsigned int adr = x*bpp + y*imgnext;
-
- for(int i=0; i<bpp; i++) {
- blackRestore[i] = d->xRootWin->data[adr];
- d->xRootWin->data[adr++] = black;
- }
-}
-
-void KScienceSaver::blackPixelUndo( int x, int y )
-{
- unsigned int adr = x*bpp + y*imgnext;
- for(int i=0; i<bpp; i++)
- d->xRootWin->data[adr++] = blackRestore[i];
-}
-
-// hm....
-
-void KScienceSaver::applyLens8bpp(int xs, int ys, int xd, int yd, int w, int h)
-{
- T32bit *off;
- char *img1, *img2, *data;
- signed int ix, iy, datanext = d->buffer->bytes_per_line - w;
-
- img1 = d->xRootWin->data + xd + yd*imgnext;
- data = d->buffer->data;
- for(iy = ys; iy < ys+h; iy++)
- {
- off = d->offset[iy] + xs;
- img2 = img1;
- for(ix = w; ix > 0; ix--)
- *data++ = img2++[*off++];
- img1 += imgnext;
- data += datanext;
- }
-
-}
-
-void KScienceSaver::applyLens16bpp(int xs, int ys, int xd, int yd, int w, int h)
-{
- T32bit *off;
- char *img1, *img2, *data;
- int ix, iy, datanext = d->buffer->bytes_per_line - (w << 1);
-
- img1 = d->xRootWin->data + (xd << 1) + yd*imgnext;
- data = d->buffer->data;
- for(iy = ys; iy < ys+h; iy++)
- {
- off = d->offset[iy] + xs;
- img2 = img1;
- for(ix = w; ix > 0; ix--) {
- *data++ = img2++[*off];
- *data++ = img2++[*off++];
- }
- img1 += imgnext;
- data += datanext;
- }
-}
-
-void KScienceSaver::applyLens24bpp(int xs, int ys, int xd, int yd, int w, int h)
-{
- T32bit *off;
- char *img1, *img2, *data;
- signed int ix, iy, datanext = d->buffer->bytes_per_line - 3*w;
-
- img1 = d->xRootWin->data + 3*xd + yd*imgnext;
- data = d->buffer->data;
- for(iy = ys; iy < ys+h; iy++)
- {
- off = d->offset[iy] + xs;
- img2 = img1;
- for(ix = w; ix > 0; ix--) {
- *data++ = img2++[*off];
- *data++ = img2++[*off];
- *data++ = img2++[*off++];
- }
- img1 += imgnext;
- data += datanext;
- }
-}
-
-void KScienceSaver::applyLens32bpp(int xs, int ys, int xd, int yd, int w, int h)
-{
- T32bit *off;
- char *img1, *img2, *data;
- signed int ix, iy, datanext = d->buffer->bytes_per_line - (w << 2);
-
- img1 = d->xRootWin->data + (xd << 2) + yd*imgnext;
- data = d->buffer->data;
- for(iy = ys; iy < ys+h; iy++)
- {
- off = d->offset[iy] + xs;
- img2 = img1;
- for(ix = w; ix > 0; ix--) {
- *data++ = img2++[*off];
- *data++ = img2++[*off];
- *data++ = img2++[*off];
- *data++ = img2++[*off++];
- }
- img1 += imgnext;
- data += datanext;
- }
-}
-
-
-//-----------------------------------------------------------------------------
-
-KScienceSetup::KScienceSetup( TQWidget *parent, const char *name )
- : KDialogBase( parent, name, true, i18n( "Setup Science Screen Saver" ),
- Ok|Cancel|Help, Ok, true ), saver( 0 )
-{
- readSettings();
- initModeInfo();
-
- TQWidget *main = makeMainWidget();
-
- TQHBoxLayout *lt = new TQHBoxLayout( main, 0, spacingHint());
- TQVBoxLayout *ltm = new TQVBoxLayout;
- lt->addLayout( ltm );
- TQVBoxLayout *ltc = new TQVBoxLayout;
- lt->addLayout( ltc );
-
- // mode
- TQLabel *label = new TQLabel( i18n("Mode:"), main );
- ltm->addWidget( label );
-
- TQListBox *c = new TQListBox( main );
- for(int i = 0; i<MAX_MODES; i++)
- c->insertItem( modeInfo[i].name );
- c->setCurrentItem( mode );
- c->setFixedHeight( 5 * c->fontMetrics().height() );
- connect( c, TQT_SIGNAL( highlighted( int ) ), TQT_SLOT( slotMode( int ) ) );
- ltm->addWidget( c );
-
- // inverse
- TQCheckBox *cbox = checkInverse = new TQCheckBox( i18n("Inverse"), main );
- cbox->setEnabled( modeInfo[mode].inverseEnable );
- cbox->setChecked( inverse[mode] );
- connect( cbox, TQT_SIGNAL( clicked() ), TQT_SLOT( slotInverse() ) );
- ltm->addWidget( cbox );
-
- // gravity
- cbox = checkGravity = new TQCheckBox( i18n("Gravity"), main );
- cbox->setChecked( gravity[mode] );
- connect( cbox, TQT_SIGNAL( clicked() ), TQT_SLOT( slotGravity() ) );
- ltm->addWidget( cbox );
-
- // hide background
- cbox = checkHideBG = new TQCheckBox( i18n("Hide background"), main );
- cbox->setChecked( hideBG[mode] );
- connect( cbox, TQT_SIGNAL( clicked() ), TQT_SLOT( slotHideBG() ) );
- ltm->addWidget( cbox );
- ltm->addStretch();
-
- // size
- label = new TQLabel( i18n("Size:"), main );
- ltc->addWidget( label );
-
- slideSize = new TQSlider(9, 50, 5, size[mode], Qt::Horizontal,
- main );
- slideSize->setMinimumSize( 90, 20 );
- slideSize->setTickmarks(TQSlider::Below);
- slideSize->setTickInterval(5);
- connect( slideSize, TQT_SIGNAL( sliderMoved( int ) ),
- TQT_SLOT( slotSize( int ) ) );
- connect( slideSize, TQT_SIGNAL( sliderPressed() ),
- TQT_SLOT( slotSliderPressed() ) );
- connect( slideSize, TQT_SIGNAL( sliderReleased() ),
- TQT_SLOT( slotSliderReleased() ) );
-
- ltc->addWidget( slideSize );
-
- // intensity
- label = new TQLabel( i18n("Intensity:"), main );
- ltc->addWidget( label );
-
- slideIntensity = new TQSlider(0, 10, 1, intensity[mode],
- Qt::Horizontal, main );
- slideIntensity->setMinimumSize( 90, 20 );
- slideIntensity->setTickmarks(TQSlider::Below);
- slideIntensity->setTickInterval(1);
- connect( slideIntensity, TQT_SIGNAL( sliderMoved( int ) ),
- TQT_SLOT( slotIntensity( int )) );
- connect( slideIntensity, TQT_SIGNAL( sliderPressed() ),
- TQT_SLOT( slotSliderPressed() ) );
- connect( slideIntensity, TQT_SIGNAL( sliderReleased() ),
- TQT_SLOT( slotSliderReleased() ) );
- ltc->addWidget( slideIntensity );
-
- // speed
- label = new TQLabel( i18n("Speed:"), main );
- ltc->addWidget( label );
-
- slideSpeed = new TQSlider(0, SCI_MAX_SPEED, 10, speed[mode],
- Qt::Horizontal, main );
- slideSpeed->setMinimumSize( 90, 20 );
- slideSpeed->setTickmarks(TQSlider::Below);
- slideSpeed->setTickInterval(10);
- connect( slideSpeed, TQT_SIGNAL( sliderMoved( int ) ),
- TQT_SLOT( slotSpeed( int ) ) );
- ltc->addWidget( slideSpeed );
-
- // motion
- label = new TQLabel( i18n("Motion:"), main );
- ltc->addWidget( label );
-
- TQHBoxLayout *ltcm = new TQHBoxLayout;
- ltc->addLayout( ltcm );
-
- slideMoveX = new TQSlider(0, SCI_MAX_MOVE, 5, moveX[mode],
- Qt::Horizontal, main );
- slideMoveX->setMinimumSize( 40, 20 );
- slideMoveX->setTickmarks(TQSlider::Below);
- slideMoveX->setTickInterval(5);
- connect( slideMoveX, TQT_SIGNAL( sliderMoved( int ) ),
- TQT_SLOT( slotMoveX( int ) ) );
- ltcm->addWidget( slideMoveX );
-
- slideMoveY = new TQSlider(0, SCI_MAX_MOVE, 5, moveY[mode],
- Qt::Horizontal, main );
- slideMoveY->setMinimumSize( 40, 20 );
- slideMoveY->setTickmarks(TQSlider::Below);
- slideMoveY->setTickInterval(5);
- connect( slideMoveY, TQT_SIGNAL( sliderMoved( int ) ),
- TQT_SLOT( slotMoveY( int ) ) );
- ltcm->addWidget( slideMoveY );
-
- ltc->addStretch();
-
- // preview
- preview = new KPreviewWidget( main );
- preview->setFixedSize( 220, 170 );
- TQPixmap p( locate("data", "kscreensaver/pics/kscience.png") );
- if( p.isNull() )
- preview->setBackgroundColor( black );
- else
- preview->setBackgroundPixmap( p );
- preview->show(); // otherwise saver does not get correct size
- lt->addWidget( preview );
-
- // let the preview window display before creating the saver
- kapp->processEvents();
-
- saver = new KScienceSaver( preview->winId(), true, !p.isNull() );
- preview->notifySaver( saver );
-}
-
-KScienceSetup::~KScienceSetup()
-{
- delete saver; // be sure to delete this first
-}
-
-void KScienceSetup::updateSettings()
-{
- // update dialog
- slideMoveX ->setValue( moveX[mode] );
- slideMoveY ->setValue( moveY[mode] );
- slideSize ->setValue( size[mode] );
- slideSpeed ->setValue( speed[mode] );
- slideIntensity->setValue( intensity[mode] );
- checkInverse ->setEnabled( modeInfo[mode].inverseEnable );
- checkInverse ->setChecked( inverse[mode] );
- checkGravity ->setChecked( gravity[mode] );
- checkHideBG ->setChecked( hideBG[mode] );
-}
-
-// read settings from config file
-void KScienceSetup::readSettings()
-{
- TDEConfig *config = TDEGlobal::config();
- TQString sMode;
-
- config->setGroup( "Settings" );
- mode = config->readNumEntry( "ModeNr", SCI_DEFAULT_MODE );
-
- for(int i=0; i < MAX_MODES; i++)
- {
- sMode.setNum( i );
- config->setGroup( "Mode" + sMode );
- moveX[i] = config->readNumEntry( "MoveX", SCI_DEFAULT_MOVEX);
- moveY[i] = config->readNumEntry( "MoveY", SCI_DEFAULT_MOVEY);
- size[i] = config->readNumEntry( "Size", SCI_DEFAULT_SIZE);
- speed[i] = config->readNumEntry( "Speed", SCI_DEFAULT_SPEED);
- intensity[i] = config->readNumEntry( "Intensity", SCI_DEFAULT_INTENSITY);
- inverse[i] = config->readBoolEntry( "Inverse", SCI_DEFAULT_INVERSE);
- gravity[i] = config->readBoolEntry( "Gravity", SCI_DEFAULT_GRAVITY);
- hideBG[i] = config->readBoolEntry( "HideBG", SCI_DEFAULT_HIDE);
- }
-}
-
-void KScienceSetup::slotMode( int m )
-{
- mode = m;
-
- if( saver )
- saver->setMode( mode );
-
- updateSettings();
-}
-
-void KScienceSetup::slotInverse( )
-{
- inverse[mode] = checkInverse->isChecked();
-
- if( saver )
- saver->setInverse( inverse[mode] );
-}
-
-void KScienceSetup::slotGravity( )
-{
- gravity[mode] = checkGravity->isChecked();
-
- if( saver )
- saver->setGravity( gravity[mode] );
-}
-
-void KScienceSetup::slotHideBG( )
-{
- hideBG[mode] = checkHideBG->isChecked();
-
- if( saver )
- saver->setHideBG( hideBG[mode] );
-}
-
-void KScienceSetup::slotMoveX( int x )
-{
- moveX[mode] = x;
-
- if( saver )
- saver->setMoveX( x );
-}
-
-void KScienceSetup::slotMoveY( int y )
-{
- moveY[mode] = y;
-
- if( saver )
- saver->setMoveY( y );
-}
-
-void KScienceSetup::slotSize( int s )
-{
- size[mode] = s;
-
- if( saver )
- saver->setSize( s );
-}
-
-void KScienceSetup::slotSpeed( int s )
-{
- speed[mode] = s;
-
- if( saver )
- saver->setSpeed( s );
-}
-
-void KScienceSetup::slotIntensity( int i )
-{
- intensity[mode] = i;
-
- if( saver )
- saver->setIntensity( i );
-}
-
-void KScienceSetup::slotSliderPressed()
-{
- if( saver )
- saver->setMove( false );
-}
-
-void KScienceSetup::slotSliderReleased()
-{
- if( saver )
- saver->setMove( true );
-}
-
-// Ok pressed - save settings and exit
-void KScienceSetup::slotOk()
-{
- TDEConfig *config = TDEGlobal::config();
- TQString sSize, sSpeed, sIntensity, sMode;
-
- config->setGroup( "Settings" );
- config->writeEntry( "ModeNr", mode );
-
- for(int i=0; i<MAX_MODES; i++)
- {
- sMode.setNum( i );
- config->setGroup( "Mode" + sMode );
- config->writeEntry( "MoveX", moveX[i] );
- config->writeEntry( "MoveY", moveY[i] );
- config->writeEntry( "Size", size[i] );
- config->writeEntry( "Speed", speed[i] );
- config->writeEntry( "Intensity", intensity[i] );
- config->writeEntry( "Inverse", inverse[i] );
- config->writeEntry( "Gravity", gravity[i] );
- config->writeEntry( "HideBG", hideBG[i] );
- }
-
- config->sync();
-
- accept();
-}
-
-void KScienceSetup::slotHelp()
-{
- TQString about = i18n("Science Version 0.26.5\n\nWritten by Rene Beutler (1998)\[email protected]");
- KMessageBox::about(this,
- about);
-}
diff --git a/kscreensaver/kdesavers/science.h b/kscreensaver/kdesavers/science.h
deleted file mode 100644
index d0a050dd..00000000
--- a/kscreensaver/kdesavers/science.h
+++ /dev/null
@@ -1,151 +0,0 @@
-// ----------------------------------------------------------------
-//
-// kscience - screen saver for KDE
-//
-// copyright (c) Rene Beutler 1998
-//
-
-#ifndef __SCIENCE_H__
-#define __SCIENCE_H__
-
-#include <tqrect.h>
-#include <tqtimer.h>
-#include <kdialogbase.h>
-#include <kscreensaver.h>
-
-class TQSlider;
-class TQCheckBox;
-
-#define MAX_MODES 6
-
-typedef signed int T32bit;
-
-class KScienceSaver;
-
-class KPreviewWidget : public TQWidget
-{
- Q_OBJECT
-
-public:
- KPreviewWidget( TQWidget *parent );
- void paintEvent( TQPaintEvent *event );
- void notifySaver( KScienceSaver *s = 0 );
-private:
- KScienceSaver *saver;
-};
-
-struct KScienceData;
-
-class KScienceSaver : public KScreenSaver
-{
- Q_OBJECT
-
-public:
- KScienceSaver( WId id, bool setup=false, bool gP=false);
- virtual ~KScienceSaver();
-
- void do_refresh( const TQRect & rect );
- void setMode ( int mode );
- void setMoveX ( signed int s );
- void setMoveY ( signed int s );
- void setMove ( bool s );
- void setSize ( signed int s );
- void setIntensity ( signed int s );
- void setSpeed ( signed int s );
- void setInverse ( bool b );
- void setGravity ( bool b );
- void setHideBG ( bool b );
-
- void myAssert( bool term, const char *sMsg );
-
-private:
- void readSettings();
- void initLens();
- void initialize();
- void releaseLens();
- void (KScienceSaver::*applyLens)(int xs, int ys, int xd, int yd, int w, int h);
-
-protected slots:
- void slotTimeout();
-
-protected:
- void grabRootWindow();
- void grabPreviewWidget();
- void initWhirlLens();
- void initSphereLens();
- void initExponentialLens();
- void initWaveLens();
- void initCurvatureLens();
- void blackPixel( int x, int y );
- void blackPixelUndo( int x, int y);
- void applyLens8bpp( int xs, int ys, int xd, int yd, int w, int h);
- void applyLens16bpp(int xs, int ys, int xd, int yd, int w, int h);
- void applyLens24bpp(int xs, int ys, int xd, int yd, int w, int h);
- void applyLens32bpp(int xs, int ys, int xd, int yd, int w, int h);
- TQTimer timer;
- bool moveOn;
- bool setup;
- bool grabPixmap;
- int mode;
- bool inverse[MAX_MODES];
- bool gravity[MAX_MODES];
- bool hideBG[MAX_MODES];
- signed int size[MAX_MODES];
- signed int moveX[MAX_MODES];
- signed int moveY[MAX_MODES];
- signed int speed[MAX_MODES];
- signed int intensity[MAX_MODES];
- int xcoord, ycoord;
- double x, y, vx, vy;
- signed int bpp, side;
- int border, radius, diam, origin;
- int imgnext;
- char blackRestore[4];
- KScienceData *d;
-};
-
-
-class KScienceSetup : public KDialogBase
-{
- Q_OBJECT
-
-public:
- KScienceSetup(TQWidget *parent=0, const char *name=0);
- ~KScienceSetup();
-protected:
- void updateSettings();
- void readSettings();
-
-private slots:
- void slotMode( int );
- void slotInverse();
- void slotGravity();
- void slotHideBG();
- void slotMoveX( int );
- void slotMoveY( int );
- void slotSize( int );
- void slotIntensity( int );
- void slotSliderPressed();
- void slotSliderReleased();
- void slotSpeed( int );
- void slotOk();
- void slotHelp();
-
-private:
- KPreviewWidget *preview;
- KScienceSaver *saver;
- TQSlider *slideSize, *slideSpeed, *slideIntensity;
- TQSlider *slideMoveX, *slideMoveY;
- TQCheckBox *checkInverse, *checkGravity, *checkHideBG;
-
- int mode;
- bool inverse [MAX_MODES];
- bool gravity [MAX_MODES];
- bool hideBG [MAX_MODES];
- int moveX [MAX_MODES];
- int moveY [MAX_MODES];
- int size [MAX_MODES];
- int intensity[MAX_MODES];
- int speed [MAX_MODES];
-};
-#endif
diff --git a/kscreensaver/kdesavers/slideshow.cpp b/kscreensaver/kdesavers/slideshow.cpp
deleted file mode 100644
index a3179b5f..00000000
--- a/kscreensaver/kdesavers/slideshow.cpp
+++ /dev/null
@@ -1,1022 +0,0 @@
-/* Slide Show Screen Saver
- * (C) 1999 Stefan Taferner <[email protected]>
- * (C) 2001 Martin R. Jones <[email protected]>
- * (C) 2003 Chris Howells <[email protected]>
- * (C) 2003 Sven Leiber <[email protected]>
- *
- * This code is under GPL
- *
- * 2001/03/04 Converted to libkscreensaver by Martin R. Jones.
- */
-
-
-#include <tqdir.h>
-#include <tqcolor.h>
-#include <tqlabel.h>
-#include <tqlayout.h>
-#include <tqfile.h>
-#include <tqpaintdevicemetrics.h>
-#include <tqcheckbox.h>
-#include <tqcombobox.h>
-#include <tqspinbox.h>
-#include <tqframe.h>
-#include <tqdesktopwidget.h>
-
-#include <kconfig.h>
-#include <kglobal.h>
-#include <kapplication.h>
-#include <klocale.h>
-#include <kmessagebox.h>
-#include <kimageio.h>
-#include <kfiledialog.h>
-#include <kstandarddirs.h>
-#include <kurlrequester.h>
-#include <kaboutdata.h>
-#include <kaboutapplication.h>
-#include <kdebug.h>
-
-#include <stdlib.h>
-#include <assert.h>
-#include <math.h>
-#include <time.h>
-
-#include "slideshow.h"
-#include "slideshow.moc"
-#include "slideshowcfg.h"
-
-
-#define SLIDESHOW_VERSION "2.3.0"
-static const char version[] = SLIDESHOW_VERSION;
-static const char description[] = I18N_NOOP("KSlideshow");
-
-
-// libkscreensaver interface
-extern "C"
-{
- KDE_EXPORT const char *kss_applicationName = "kslideshow.kss";
- KDE_EXPORT const char *kss_description = I18N_NOOP( "KSlideshow" );
- KDE_EXPORT const char *kss_version = SLIDESHOW_VERSION;
-
- KDE_EXPORT KScreenSaver *kss_create( WId id )
- {
- return new kSlideShowSaver( id );
- }
-
- KDE_EXPORT TQDialog *kss_setup()
- {
- return new kSlideShowSetup();
- }
-}
-
-
-//=============================================================================
-// Class kSlideShowSaver
-//=============================================================================
-kSlideShowSaver::kSlideShowSaver( WId id ): KScreenSaver(id)
-{
- KImageIO::registerFormats();
-
- blank();
-
- mEffect = NULL;
- mNumEffects = 0;
- mIntArray = NULL;
- registerEffects();
-
- readConfig();
- initNextScreen();
-
- mFileIdx = 0;
- mColorContext = TQColor::enterAllocContext();
-
- mEffectRunning = false;
-
- mTimer.start(10, true);
- connect(&mTimer, TQT_SIGNAL(timeout()), TQT_SLOT(slotTimeout()));
-
- TQDesktopWidget *d = TQApplication::desktop();
- if( geometry() == d->geometry() && d->numScreens() > 1)
- {
- for(int i = 0; i < d->numScreens(); ++i)
- {
- TQRect s = d->screenGeometry(i);
- mGeoList.append(new mScreenGeo(s.width(), s.height(), s.topLeft().x(), s.topLeft().y()));
- }
- }
- else
- {
- mGeoList.append(new mScreenGeo(width(), height(), 0, 0 ));
- }
- createNextScreen();
-}
-
-
-//----------------------------------------------------------------------------
-kSlideShowSaver::~kSlideShowSaver()
-{
- delete [] mIntArray;
- delete [] mEffectList;
-
- mTimer.stop();
- if (mPainter.isActive()) mPainter.end();
- TQColor::leaveAllocContext();
- TQColor::destroyAllocContext(mColorContext);
-}
-
-
-//-----------------------------------------------------------------------------
-void kSlideShowSaver::initNextScreen()
-{
- TQPaintDeviceMetrics metric(this);
- int w, h;
-
- w = width();
- h = height();
- mNextScreen = TQPixmap(w, h, metric.depth());
-}
-
-
-//-----------------------------------------------------------------------------
-void kSlideShowSaver::readConfig()
-{
- TDEConfig *config = TDEGlobal::config();
- config->setGroup("Settings");
- mShowRandom = config->readBoolEntry("ShowRandom", true);
- mZoomImages = config->readBoolEntry("ZoomImages", false);
- mPrintName = config->readBoolEntry("PrintName", true);
- mDirectory = config->readPathEntry("Directory", TDEGlobal::dirs()->findDirs("wallpaper", "").last());
- mDelay = config->readNumEntry("Delay", 10) * 1000;
- mSubdirectory = config->readBoolEntry("SubDirectory", false);
- mRandomPosition = config->readBoolEntry("RandomPosition", false);
-
- loadDirectory();
-}
-
-
-//----------------------------------------------------------------------------
-void kSlideShowSaver::registerEffects()
-{
- int i = 0;
-
- mEffectList = new EffectMethod[64];
- mEffectList[i++] = &kSlideShowSaver::effectChessboard;
- mEffectList[i++] = &kSlideShowSaver::effectMultiCircleOut;
- mEffectList[i++] = &kSlideShowSaver::effectSpiralIn;
- mEffectList[i++] = &kSlideShowSaver::effectSweep;
- mEffectList[i++] = &kSlideShowSaver::effectMeltdown;
- mEffectList[i++] = &kSlideShowSaver::effectCircleOut;
- mEffectList[i++] = &kSlideShowSaver::effectBlobs;
- mEffectList[i++] = &kSlideShowSaver::effectHorizLines;
- mEffectList[i++] = &kSlideShowSaver::effectVertLines;
- mEffectList[i++] = &kSlideShowSaver::effectRandom;
- mEffectList[i++] = &kSlideShowSaver::effectGrowing;
- mEffectList[i++] = &kSlideShowSaver::effectIncomingEdges;
-
- mNumEffects = i;
- // mNumEffects = 1; //...for testing
-}
-
-
-//----------------------------------------------------------------------------
-int kSlideShowSaver::effectMultiCircleOut(bool aInit)
-{
- int x, y, i;
- double alpha;
- static TQPointArray pa(4);
-
- if (aInit)
- {
- startPainter();
- mw = width();
- mh = height();
- mx = mw;
- my = mh>>1;
- pa.setPoint(0, mw>>1, mh>>1);
- pa.setPoint(3, mw>>1, mh>>1);
- mfy = sqrt((double)mw*mw + mh*mh) / 2;
- mi = TDEApplication::random()%15 + 2;
- mfd = M_PI*2/mi;
- mAlpha = mfd;
- mwait = 10 * mi;
- mfx = M_PI/32; // divisor must be powers of 8
- }
-
- if (mAlpha < 0)
- {
- mPainter.end();
- showNextScreen();
- return -1;
- }
-
- for (alpha=mAlpha, i=mi; i>=0; i--, alpha+=mfd)
- {
- x = (mw>>1) + (int)(mfy * cos(-alpha));
- y = (mh>>1) + (int)(mfy * sin(-alpha));
-
- mx = (mw>>1) + (int)(mfy * cos(-alpha + mfx));
- my = (mh>>1) + (int)(mfy * sin(-alpha + mfx));
-
- pa.setPoint(1, x, y);
- pa.setPoint(2, mx, my);
-
- mPainter.drawPolygon(pa);
- }
- mAlpha -= mfx;
-
- return mwait;
-}
-
-
-//----------------------------------------------------------------------------
-int kSlideShowSaver::effectSpiralIn(bool aInit)
-{
- if (aInit)
- {
- startPainter();
- mw = width();
- mh = height();
- mix = mw / 8;
- miy = mh / 8;
- mx0 = 0;
- mx1 = mw - mix;
- my0 = miy;
- my1 = mh - miy;
- mdx = mix;
- mdy = 0;
- mi = 0;
- mj = 16 * 16;
- mx = 0;
- my = 0;
- }
-
- if (mi==0 && mx0>=mx1)
- {
- mPainter.end();
- showNextScreen();
- return -1;
- }
-
- if (mi==0 && mx>=mx1) // switch to: down on right side
- {
- mi = 1;
- mdx = 0;
- mdy = miy;
- mx1 -= mix;
- }
- else if (mi==1 && my>=my1) // switch to: right to left on bottom side
- {
- mi = 2;
- mdx = -mix;
- mdy = 0;
- my1 -= miy;
- }
- else if (mi==2 && mx<=mx0) // switch to: up on left side
- {
- mi = 3;
- mdx = 0;
- mdy = -miy;
- mx0 += mix;
- }
- else if (mi==3 && my<=my0) // switch to: left to right on top side
- {
- mi = 0;
- mdx = mix;
- mdy = 0;
- my0 += miy;
- }
-
- bitBlt(TQT_TQPAINTDEVICE(this), mx, my, TQT_TQPAINTDEVICE(&mNextScreen), mx, my, mix, miy, CopyROP, true);
-
- mx += mdx;
- my += mdy;
- mj--;
-
- return 8;
-}
-
-
-//----------------------------------------------------------------------------
-int kSlideShowSaver::effectMeltdown(bool aInit)
-{
- int i, x, y;
- bool done;
-
- if (aInit)
- {
- delete [] mIntArray;
- mw = width();
- mh = height();
- mdx = 4;
- mdy = 16;
- mix = mw / mdx;
- mIntArray = new int[mix];
- for (i=mix-1; i>=0; i--)
- mIntArray[i] = 0;
- }
-
- done = true;
- for (i=0,x=0; i<mix; i++,x+=mdx)
- {
- y = mIntArray[i];
- if (y >= mh) continue;
- done = false;
- if ((TDEApplication::random()&15) < 6) continue;
- bitBlt(TQT_TQPAINTDEVICE(this), x, y+mdy, TQT_TQPAINTDEVICE(this), x, y, mdx, mh-y-mdy, CopyROP, true);
- bitBlt(TQT_TQPAINTDEVICE(this), x, y, TQT_TQPAINTDEVICE(&mNextScreen), x, y, mdx, mdy, CopyROP, true);
- mIntArray[i] += mdy;
- }
-
- if (done)
- {
- delete [] mIntArray;
- mIntArray = NULL;
- return -1;
- }
-
- return 15;
-}
-
-
-//----------------------------------------------------------------------------
-int kSlideShowSaver::effectCircleOut(bool aInit)
-{
- int x, y;
- static TQPointArray pa(4);
-
- if (aInit)
- {
- startPainter();
- mw = width();
- mh = height();
- mx = mw;
- my = mh>>1;
- mAlpha = 2*M_PI;
- pa.setPoint(0, mw>>1, mh>>1);
- pa.setPoint(3, mw>>1, mh>>1);
- mfx = M_PI/16; // divisor must be powers of 8
- mfy = sqrt((double)mw*mw + mh*mh) / 2;
- }
-
- if (mAlpha < 0)
- {
- mPainter.end();
- showNextScreen();
- return -1;
- }
-
- x = mx;
- y = my;
- mx = (mw>>1) + (int)(mfy * cos(mAlpha));
- my = (mh>>1) + (int)(mfy * sin(mAlpha));
- mAlpha -= mfx;
-
- pa.setPoint(1, x, y);
- pa.setPoint(2, mx, my);
-
- mPainter.drawPolygon(pa);
-
- return 20;
-}
-
-
-//----------------------------------------------------------------------------
-int kSlideShowSaver::effectSweep(bool aInit)
-{
- int w, h, x, y, i;
-
- if (aInit)
- {
- // subtype: 0=sweep right to left, 1=sweep left to right
- // 2=sweep bottom to top, 3=sweep top to bottom
- mSubType = TDEApplication::random() % 4;
- mw = width();
- mh = height();
- mdx = (mSubType==1 ? 16 : -16);
- mdy = (mSubType==3 ? 16 : -16);
- mx = (mSubType==1 ? 0 : mw);
- my = (mSubType==3 ? 0 : mh);
- }
-
- if (mSubType==0 || mSubType==1)
- {
- // horizontal sweep
- if ((mSubType==0 && mx < -64) ||
- (mSubType==1 && mx > mw+64))
- {
- return -1;
- }
- for (w=2,i=4,x=mx; i>0; i--, w<<=1, x-=mdx)
- {
- bitBlt(TQT_TQPAINTDEVICE(this), x, 0, TQT_TQPAINTDEVICE(&mNextScreen), x, 0, w, mh, CopyROP, true);
- }
- mx += mdx;
- }
- else
- {
- // vertical sweep
- if ((mSubType==2 && my < -64) ||
- (mSubType==3 && my > mh+64))
- {
- return -1;
- }
- for (h=2,i=4,y=my; i>0; i--, h<<=1, y-=mdy)
- {
- bitBlt(TQT_TQPAINTDEVICE(this), 0, y, TQT_TQPAINTDEVICE(&mNextScreen), 0, y, mw, h, CopyROP, true);
- }
- my += mdy;
- }
-
- return 20;
-}
-
-
-//----------------------------------------------------------------------------
-int kSlideShowSaver::effectBlobs(bool aInit)
-{
- int r;
-
- if (aInit)
- {
- startPainter();
- mAlpha = M_PI * 2;
- mw = width();
- mh = height();
- mi = 150;
- }
-
- if (mi <= 0)
- {
- mPainter.end();
- showNextScreen();
- return -1;
- }
-
- mx = TDEApplication::random() % mw;
- my = TDEApplication::random() % mh;
- r = (TDEApplication::random() % 200) + 50;
-
- mPainter.drawEllipse(mx-r, my-r, r, r);
- mi--;
-
- return 10;
-}
-
-
-//----------------------------------------------------------------------------
-int kSlideShowSaver::effectRandom(bool /*aInit*/)
-{
- int x, y, i, w, h, fact, sz;
-
- fact = (TDEApplication::random() % 3) + 1;
-
- w = width() >> fact;
- h = height() >> fact;
- sz = 1 << fact;
-
- for (i = (w*h)<<1; i > 0; i--)
- {
- x = (TDEApplication::random() % w) << fact;
- y = (TDEApplication::random() % h) << fact;
- bitBlt(TQT_TQPAINTDEVICE(this), x, y, TQT_TQPAINTDEVICE(&mNextScreen), x, y, sz, sz, CopyROP, true);
- }
- showNextScreen();
-
- return -1;
-}
-
-
-//----------------------------------------------------------------------------
-int kSlideShowSaver::effectGrowing(bool aInit)
-{
- if (aInit)
- {
- mw = width();
- mh = height();
- mx = mw >> 1;
- my = mh >> 1;
- mi = 0;
- mfx = mx / 100.0;
- mfy = my / 100.0;
- }
-
- mx = (mw>>1) - (int)(mi * mfx);
- my = (mh>>1) - (int)(mi * mfy);
- mi++;
-
- if (mx<0 || my<0)
- {
- showNextScreen();
- return -1;
- }
-
- bitBlt(TQT_TQPAINTDEVICE(this), mx, my, TQT_TQPAINTDEVICE(&mNextScreen), mx, my,
- mw - (mx<<1), mh - (my<<1), CopyROP, true);
-
- return 20;
-}
-
-
-//----------------------------------------------------------------------------
-int kSlideShowSaver::effectChessboard(bool aInit)
-{
- int y;
-
- if (aInit)
- {
- mw = width();
- mh = height();
- mdx = 8; // width of one tile
- mdy = 8; // height of one tile
- mj = (mw+mdx-1)/mdx; // number of tiles
- mx = mj*mdx; // shrinking x-offset from screen border
- mix = 0; // growing x-offset from screen border
- miy = 0; // 0 or mdy for growing tiling effect
- my = mj&1 ? 0 : mdy; // 0 or mdy for shrinking tiling effect
- mwait = 800 / mj; // timeout between effects
- }
-
- if (mix >= mw)
- {
- showNextScreen();
- return -1;
- }
-
- mix += mdx;
- mx -= mdx;
- miy = miy ? 0 : mdy;
- my = my ? 0 : mdy;
-
- for (y=0; y<mw; y+=(mdy<<1))
- {
- bitBlt(TQT_TQPAINTDEVICE(this), mix, y+miy, TQT_TQPAINTDEVICE(&mNextScreen), mix, y+miy,
- mdx, mdy, CopyROP, true);
- bitBlt(TQT_TQPAINTDEVICE(this), mx, y+my, TQT_TQPAINTDEVICE(&mNextScreen), mx, y+my,
- mdx, mdy, CopyROP, true);
- }
-
- return mwait;
-}
-
-
-//----------------------------------------------------------------------------
-int kSlideShowSaver::effectIncomingEdges(bool aInit)
-{
- int x1, y1;
-
- if (aInit)
- {
- mw = width();
- mh = height();
- mix = mw >> 1;
- miy = mh >> 1;
- mfx = mix / 100.0;
- mfy = miy / 100.0;
- mi = 0;
- mSubType = TDEApplication::random() & 1;
- }
-
- mx = (int)(mfx * mi);
- my = (int)(mfy * mi);
-
- if (mx>mix || my>miy)
- {
- showNextScreen();
- return -1;
- }
-
- x1 = mw - mx;
- y1 = mh - my;
- mi++;
-
- if (mSubType)
- {
- // moving image edges
- bitBlt(TQT_TQPAINTDEVICE(this), 0, 0, TQT_TQPAINTDEVICE(&mNextScreen), mix-mx, miy-my, mx, my, CopyROP, true);
- bitBlt(TQT_TQPAINTDEVICE(this), x1, 0, TQT_TQPAINTDEVICE(&mNextScreen), mix, miy-my, mx, my, CopyROP, true);
- bitBlt(TQT_TQPAINTDEVICE(this), 0, y1, TQT_TQPAINTDEVICE(&mNextScreen), mix-mx, miy, mx, my, CopyROP, true);
- bitBlt(TQT_TQPAINTDEVICE(this), x1, y1, TQT_TQPAINTDEVICE(&mNextScreen), mix, miy, mx, my, CopyROP, true);
- }
- else
- {
- // fixed image edges
- bitBlt(TQT_TQPAINTDEVICE(this), 0, 0, TQT_TQPAINTDEVICE(&mNextScreen), 0, 0, mx, my, CopyROP, true);
- bitBlt(TQT_TQPAINTDEVICE(this), x1, 0, TQT_TQPAINTDEVICE(&mNextScreen), x1, 0, mx, my, CopyROP, true);
- bitBlt(TQT_TQPAINTDEVICE(this), 0, y1, TQT_TQPAINTDEVICE(&mNextScreen), 0, y1, mx, my, CopyROP, true);
- bitBlt(TQT_TQPAINTDEVICE(this), x1, y1, TQT_TQPAINTDEVICE(&mNextScreen), x1, y1, mx, my, CopyROP, true);
- }
- return 20;
-}
-
-
-//----------------------------------------------------------------------------
-int kSlideShowSaver::effectHorizLines(bool aInit)
-{
- static int iyPos[] = { 0, 4, 2, 6, 1, 5, 3, 7, -1 };
- int y;
-
- if (aInit)
- {
- mw = width();
- mh = height();
- mi = 0;
- }
-
- if (iyPos[mi] < 0) return -1;
-
- for (y=iyPos[mi]; y<mh; y+=8)
- {
- bitBlt(TQT_TQPAINTDEVICE(this), 0, y, TQT_TQPAINTDEVICE(&mNextScreen), 0, y, mw, 1, CopyROP, true);
- }
-
- mi++;
- if (iyPos[mi] >= 0) return 160;
- return -1;
-}
-
-
-//----------------------------------------------------------------------------
-int kSlideShowSaver::effectVertLines(bool aInit)
-{
- static int ixPos[] = { 0, 4, 2, 6, 1, 5, 3, 7, -1 };
- int x;
-
- if (aInit)
- {
- mw = width();
- mh = height();
- mi = 0;
- }
-
- if (ixPos[mi] < 0) return -1;
-
- for (x=ixPos[mi]; x<mw; x+=8)
- {
- bitBlt(TQT_TQPAINTDEVICE(this), x, 0, TQT_TQPAINTDEVICE(&mNextScreen), x, 0, 1, mh, CopyROP, true);
- }
-
- mi++;
- if (ixPos[mi] >= 0) return 160;
- return -1;
-}
-
-
-//-----------------------------------------------------------------------------
-void kSlideShowSaver::startPainter(TQt::PenStyle aPen)
-{
- TQBrush brush;
- brush.setPixmap(mNextScreen);
- if (mPainter.isActive()) mPainter.end();
- mPainter.begin(this);
- mPainter.setBrush(brush);
- mPainter.setPen(aPen);
-}
-
-
-//-----------------------------------------------------------------------------
-void kSlideShowSaver::restart()
-{
- mEffectRunning = false;
- mEffect = NULL;
- blank();
- slotTimeout();
-}
-
-
-//-----------------------------------------------------------------------------
-void kSlideShowSaver::slotTimeout()
-{
- int tmout = -1;
- int i;
-
- if (mEffectRunning)
- {
- tmout = (this->*mEffect)(false);
- }
- else
- {
- loadNextImage();
- createNextScreen();
-
- if (mNumEffects > 1) i = TDEApplication::random() % mNumEffects;
- else i = 0;
-
- mEffect = mEffectList[i];
- mEffectRunning = true;
- tmout = (this->*mEffect)(true);
- }
- if (tmout <= 0)
- {
- tmout = mDelay;
- mEffectRunning = false;
- }
- mTimer.start(tmout, true);
-}
-
-
-//----------------------------------------------------------------------------
-void kSlideShowSaver::showNextScreen()
-{
- bitBlt(TQT_TQPAINTDEVICE(this), 0, 0, TQT_TQPAINTDEVICE(&mNextScreen), 0, 0,
- mNextScreen.width(), mNextScreen.height(), CopyROP, true);
-}
-
-
-//----------------------------------------------------------------------------
-void kSlideShowSaver::createNextScreen()
-{
- TQPainter p;
- int ww, wh, iw, ih, x, y;
- double fx, fy;
-
- if (mNextScreen.size() != size())
- mNextScreen.resize(size());
-
- mNextScreen.fill(black);
-
- p.begin(&mNextScreen);
-
- mScreenGeo *geoptr = 0;
- for(geoptr = mGeoList.first(); geoptr; geoptr = mGeoList.next())
- {
- loadNextImage();
-
- iw = mImage.width();
- ih = mImage.height();
- ww = geoptr->mW;
- wh = geoptr->mH;
-
- if (mFileList.isEmpty())
- {
- p.setPen(TQColor("white"));
- p.drawText(20 + (TDEApplication::random() % (ww>>1)), 20 + (TDEApplication::random() % (wh>>1)),
- i18n("No images found"));
- }
- else
- {
- if (mZoomImages)
- {
- fx = (double)ww / iw;
- fy = (double)wh / ih;
- if (fx > fy) fx = fy;
- if (fx > 2) fx = 2;
- iw = (int)(iw * fx);
- ih = (int)(ih * fx);
- TQImage scaledImg = mImage.smoothScale(iw, ih);
-
- x = ((ww - iw) >> 1) + geoptr->mXorg;
- y = ((wh - ih) >> 1) + geoptr->mYorg;
-
- p.drawImage(x, y, scaledImg);
- }
- else
- {
- if(iw >= ww || ih >= wh)
- {
- fx = (double)ww / iw;
- fy = (double)wh / ih;
- if (fx > fy) fx = fy;
- if (fx > 2) fx = 2;
- iw = (int)(iw * fx);
- ih = (int)(ih * fx);
- TQImage scaledImg = mImage.smoothScale(iw, ih);
-
- x = ((ww - iw) >> 1) + geoptr->mXorg;
- y = ((wh - ih) >> 1) + geoptr->mYorg;
-
- p.drawImage(x, y, scaledImg);
- }
- else
- {
- if(mRandomPosition)
- {
- x = (TDEApplication::random() % (ww - iw)) + geoptr->mXorg;
- y = (TDEApplication::random() % (wh - ih)) + geoptr->mYorg;
- }
- else
- {
- x = ((ww - iw) >> 1) + geoptr->mXorg;
- y = ((wh - ih) >> 1) + geoptr->mYorg;
- }
-
- // bitBlt(TQT_TQPAINTDEVICE(&mNextScreen), x, y, TQT_TQPAINTDEVICE(&mImage), 0, 0, iw, ih, CopyROP, false);
- p.drawImage(x, y, mImage);
- }
- }
-
- if (mPrintName)
- {
- p.setPen(TQColor("black"));
- for (x=9; x<=11; x++)
- for (y=21; y>=19; y--)
- p.drawText(x + geoptr->mXorg, wh-y+geoptr->mYorg, mImageName);
- p.setPen(TQColor("white"));
- p.drawText(10 + geoptr->mXorg, wh-20 + geoptr->mYorg, mImageName);
- }
- }
- }
- p.end();
-}
-
-
-//----------------------------------------------------------------------------
-void kSlideShowSaver::loadNextImage()
-{
- TQString fname;
- int num;
-
- num = mFileList.count();
- if (num <= 0) //no files in the directory
- {
- return;
- }
-
- if (mShowRandom)
- {
- mFileIdx = TDEApplication::random() % num;
- fname = mFileList[mFileIdx];
- mFileList.remove(fname);
- if (num == 1) //we're about to run out of images
- {
- mFileList = mRandomList;
- }
- }
- else
- {
- if (mFileIdx >= num) mFileIdx = 0;
- fname = mFileList[mFileIdx];
- }
-
- if (!mImage.load(fname))
- {
- kdDebug() << "Failed to load image " << fname << endl;
- mFileList.remove(fname);
- mRandomList.remove(fname);
- if (!mFileList.isEmpty())
- loadNextImage();
- return;
- }
- mFileIdx++;
-
- int i, j;
- i = fname.findRev('.');
- if (i < 0) i = 32767;
- j = fname.findRev('/') + 1;
- if (j < 0) j = 0;
- mImageName = fname.mid(j, i-j);
-}
-
-
-//----------------------------------------------------------------------------
-void kSlideShowSaver::loadDirectory()
-{
- mFileIdx = 0;
- mFileList.clear();
- traverseDirectory(mDirectory);
- mRandomList = mFileList;
-}
-
-void kSlideShowSaver::traverseDirectory(const TQString &dirName)
-{
- TQDir dir(dirName);
- if (!dir.exists())
- {
- return ;
- }
- dir.setFilter(TQDir::Dirs | TQDir::Files);
-
- const TQFileInfoList *fileinfolist = dir.entryInfoList();
- TQFileInfoListIterator it(*fileinfolist);
- TQFileInfo *fi;
- while ((fi = it.current()))
- {
- if (fi->fileName() == "." || fi->fileName() == "..")
- {
- ++it;
- continue;
- }
- if (fi->isDir() && fi->isReadable() && mSubdirectory)
- {
- traverseDirectory(fi->filePath());
- }
- else
- {
- if (!fi->isDir())
- {
- mFileList.append(fi->filePath());
- }
- }
- ++it;
- }
-}
-
-
-//-----------------------------------------------------------------------------
-void kSlideShowSaver::blank()
-{
- erase();
-}
-
-
-//=============================================================================
-// Class kSlideShowSetup
-//=============================================================================
-kSlideShowSetup::kSlideShowSetup(TQWidget *aParent, const char *aName)
- : KDialogBase(aParent, aName, true, i18n( "Setup Slide Show Screen Saver" ),
- Ok|Cancel|Help, Ok, true )
-{
- setButtonText( Help, i18n( "A&bout" ) );
-
- TQWidget *main = makeMainWidget();
- TQVBoxLayout *top = new TQVBoxLayout( main, 0, spacingHint() );
-
- cfg = new SlideShowCfg( main, "SlideShowCfg" );
- top->addWidget( cfg );
- top->addStretch();
-
- cfg->mPreview->setFixedSize(220, 170);
- cfg->mPreview->setBackgroundColor(black);
- cfg->mPreview->show(); // otherwise saver does not get correct size
- mSaver = new kSlideShowSaver(cfg->mPreview->winId());
-
- cfg->mDirChooser->setMode(KFile::Directory | KFile::ExistingOnly);
- connect(cfg->mDirChooser, TQT_SIGNAL(returnPressed(const TQString &)),
- TQT_SLOT(slotDirSelected(const TQString &)));
- connect(cfg->mDirChooser, TQT_SIGNAL(urlSelected(const TQString &)),
- TQT_SLOT(slotDirSelected(const TQString &)));
-
- readSettings();
-}
-
-kSlideShowSetup::~kSlideShowSetup()
-{
- delete mSaver;
-}
-
-//-----------------------------------------------------------------------------
-void kSlideShowSetup::readSettings()
-{
- TDEConfig *config = TDEGlobal::config();
-
- config->setGroup("Settings");
- cfg->mCbxRandom->setChecked(config->readBoolEntry("ShowRandom", true));
- cfg->mCbxZoom->setChecked(config->readBoolEntry("ZoomImages", false));
- cfg->mCbxShowName->setChecked(config->readBoolEntry("PrintName", true));
- cfg->mDelay->setValue(config->readNumEntry("Delay", 20));
- cfg->mDirChooser->setURL(config->readPathEntry("Directory"));
- cfg->mCbxSubdirectory->setChecked(config->readBoolEntry("SubDirectory", false));
- cfg->mCbxRandomPosition->setChecked(config->readBoolEntry("RandomPosition", false));
-}
-
-
-//-----------------------------------------------------------------------------
-void kSlideShowSetup::writeSettings()
-{
- TDEConfig *config = TDEGlobal::config();
-
- config->setGroup("Settings");
- config->writeEntry("ShowRandom", cfg->mCbxRandom->isChecked());
- config->writeEntry("ZoomImages", cfg->mCbxZoom->isChecked());
- config->writeEntry("PrintName", cfg->mCbxShowName->isChecked());
- config->writeEntry("Delay", cfg->mDelay->value());
- config->writePathEntry("Directory", cfg->mDirChooser->url());
- config->writeEntry("SubDirectory", cfg->mCbxSubdirectory->isChecked());
- config->writeEntry("RandomPosition", cfg->mCbxRandomPosition->isChecked());
-
- config->sync();
-
- if (mSaver)
- {
- mSaver->readConfig();
- mSaver->restart();
- }
-}
-
-
-//-----------------------------------------------------------------------------
-void kSlideShowSetup::slotDirSelected(const TQString &)
-{
- writeSettings();
-}
-
-
-//-----------------------------------------------------------------------------
-void kSlideShowSetup::slotOk()
-{
- writeSettings();
- accept();
-}
-
-
-//-----------------------------------------------------------------------------
-void kSlideShowSetup::slotHelp()
-{
- TDEAboutData aboutData( "kslideshow.kss", I18N_NOOP("SlideShow"),
- version, description, TDEAboutData::License_GPL,
- "(c) 1999-2003, The KDE Team" );
- aboutData.addAuthor("Stefan Taferner", 0, "[email protected]");
- aboutData.addAuthor("Chris Howells", 0, "[email protected]");
- aboutData.addAuthor("Sven Leiber", 0, "[email protected]");
-
- KAboutApplication mAbout(&aboutData, this, 0);
- mAbout.exec();
-}
diff --git a/kscreensaver/kdesavers/slideshow.h b/kscreensaver/kdesavers/slideshow.h
deleted file mode 100644
index 208f83bc..00000000
--- a/kscreensaver/kdesavers/slideshow.h
+++ /dev/null
@@ -1,152 +0,0 @@
-/* Slide Show Screen Saver
- * (C) 1999 Stefan Taferner <[email protected]>
- * (C) 2003 Sven Leiber <[email protected]>
- */
-
-
-#ifndef SLIDESHOW_H
-#define SLIDESHOW_H
-
-#include <tqtimer.h>
-#include <tqptrlist.h>
-#include <tqstringlist.h>
-#include <tqpixmap.h>
-#include <tqpainter.h>
-#include <tqimage.h>
-
-#include <kscreensaver.h>
-#include <kdialogbase.h>
-
-#include "slideshowcfg.h"
-
-class SlideShowCfg;
-
-//-----------------------------------------------------------------------------
-class kSlideShowSaver: public KScreenSaver
-{
- Q_OBJECT
-
-public:
- kSlideShowSaver( WId id );
- virtual ~kSlideShowSaver();
-
- typedef int (kSlideShowSaver::*EffectMethod)(bool);
-
- void readConfig();
-
- void restart();
-
-protected slots:
- void slotTimeout();
-
-protected:
- void blank();
-
- /** Load list of images from directory */
- virtual void loadDirectory();
-
- /** Helper for loadDirectory() */
- virtual void traverseDirectory(const TQString &dirName);
-
- /** Load next image from list. If the file cannot be read
- it is automatically removed from the file list.
- mImage contains the image after loading. */
- virtual void loadNextImage();
-
- /** Show next screen, completely, without transition. */
- virtual void showNextScreen();
-
- /** Set loaded image to next-screen buffer. */
- virtual void createNextScreen();
-
- /** Initialize next-screen buffer. */
- virtual void initNextScreen();
-
- /** Register effect methods in effect list. */
- virtual void registerEffects();
-
- /** Various effects. If adding one, do not forget to manually
- add the effect to the list in the registerEffects() method. */
- int effectHorizLines(bool doInit);
- int effectVertLines(bool doInit);
- int effectRandom(bool doInit);
- int effectGrowing(bool doInit);
- int effectChessboard(bool doInit);
- int effectIncomingEdges(bool doInit);
- int effectBlobs(bool doInit);
- int effectCircleOut(bool doInit);
- int effectSweep(bool doInit);
- int effectMeltdown(bool doInit);
- int effectSpiralIn(bool doInit);
- int effectMultiCircleOut(bool doInit);
-
-protected:
- /** Init mPainter with next-screen's pixmap and call
- mPainter.begin(&mWidget) */
- void startPainter(TQt::PenStyle penStyle=NoPen);
-
-protected:
- struct mScreenGeo {
- mScreenGeo(int w, int h, int x, int y) : mW(w), mH(h), mXorg(x), mYorg(y) {};
- int mW;
- int mH;
- int mXorg;
- int mYorg;
- };
- TQPtrList<mScreenGeo> mGeoList;
- bool mEffectRunning;
- TQTimer mTimer;
- int mColorContext;
- TQStringList mFileList;
- TQStringList mRandomList;
- int mFileIdx;
- TQImage mImage;
- TQPixmap mNextScreen;
- EffectMethod* mEffectList;
- EffectMethod mEffect;
- int mNumEffects;
- TQPainter mPainter;
- TQString mImageName;
-
- // config settings:
- bool mShowRandom;
- bool mZoomImages;
- bool mPrintName;
- bool mSubdirectory;
- bool mRandomPosition;
- int mDelay;
- TQString mDirectory;
-
- // values for state of various effects:
- int mx, my, mw, mh, mdx, mdy, mix, miy, mi, mj, mSubType;
- int mx0, my0, mx1, my1, mwait;
- double mfx, mfy, mAlpha, mfd;
- int* mIntArray;
-};
-
-
-//-----------------------------------------------------------------------------
-class kSlideShowSetup : public KDialogBase
-{
- Q_OBJECT
-
-public:
- kSlideShowSetup(TQWidget *parent=NULL, const char *name=NULL);
- ~kSlideShowSetup();
-
-protected:
- void readSettings();
-
-protected slots:
- void slotOk();
- void slotHelp();
- void writeSettings();
- void slotDirSelected(const TQString &where);
-
-private:
- kSlideShowSaver *mSaver;
- SlideShowCfg *cfg;
-};
-
-#endif /*SLIDESHOW_H*/
-
diff --git a/kscreensaver/kdesavers/slideshowcfg.ui b/kscreensaver/kdesavers/slideshowcfg.ui
deleted file mode 100644
index e63dbd55..00000000
--- a/kscreensaver/kdesavers/slideshowcfg.ui
+++ /dev/null
@@ -1,176 +0,0 @@
-<!DOCTYPE UI><UI version="3.2" stdsetdef="1">
-<class>SlideShowCfg</class>
-<widget class="TQWidget">
- <property name="name">
- <cstring>Form1</cstring>
- </property>
- <property name="geometry">
- <rect>
- <x>0</x>
- <y>0</y>
- <width>400</width>
- <height>243</height>
- </rect>
- </property>
- <grid>
- <property name="name">
- <cstring>unnamed</cstring>
- </property>
- <property name="margin">
- <number>0</number>
- </property>
- <widget class="TQCheckBox" row="7" column="0" rowspan="1" colspan="4">
- <property name="name">
- <cstring>mCbxSubdirectory</cstring>
- </property>
- <property name="text">
- <string>&amp;Include images from sub-folders</string>
- </property>
- </widget>
- <widget class="TQCheckBox" row="1" column="0" rowspan="1" colspan="3">
- <property name="name">
- <cstring>mCbxRandom</cstring>
- </property>
- <property name="text">
- <string>&amp;Random order</string>
- </property>
- </widget>
- <widget class="KURLRequester" row="6" column="2" rowspan="1" colspan="3">
- <property name="name">
- <cstring>mDirChooser</cstring>
- </property>
- </widget>
- <widget class="TQCheckBox" row="0" column="0" rowspan="1" colspan="3">
- <property name="name">
- <cstring>mCbxZoom</cstring>
- </property>
- <property name="text">
- <string>Resi&amp;ze images</string>
- </property>
- </widget>
- <spacer row="7" column="4">
- <property name="name">
- <cstring>spacer9</cstring>
- </property>
- <property name="orientation">
- <enum>Horizontal</enum>
- </property>
- <property name="sizeType">
- <enum>Expanding</enum>
- </property>
- <property name="sizeHint">
- <size>
- <width>161</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- <widget class="TQLabel" row="6" column="0" rowspan="1" colspan="2">
- <property name="name">
- <cstring>textLabel1</cstring>
- </property>
- <property name="text">
- <string>I&amp;mage folder:</string>
- </property>
- <property name="buddy" stdset="0">
- <cstring>mDirChooser</cstring>
- </property>
- </widget>
- <widget class="TQCheckBox" row="2" column="0" rowspan="1" colspan="3">
- <property name="name">
- <cstring>mCbxShowName</cstring>
- </property>
- <property name="text">
- <string>Show &amp;names</string>
- </property>
- </widget>
- <spacer row="5" column="1">
- <property name="name">
- <cstring>spacer11</cstring>
- </property>
- <property name="orientation">
- <enum>Vertical</enum>
- </property>
- <property name="sizeType">
- <enum>Expanding</enum>
- </property>
- <property name="sizeHint">
- <size>
- <width>20</width>
- <height>19</height>
- </size>
- </property>
- </spacer>
- <widget class="TQSpinBox" row="4" column="1" rowspan="1" colspan="2">
- <property name="name">
- <cstring>mDelay</cstring>
- </property>
- <property name="suffix">
- <string> sec</string>
- </property>
- <property name="specialValueText">
- <string></string>
- </property>
- <property name="maxValue">
- <number>240</number>
- </property>
- <property name="minValue">
- <number>1</number>
- </property>
- </widget>
- <widget class="TQLabel" row="4" column="0">
- <property name="name">
- <cstring>textLabel1_2</cstring>
- </property>
- <property name="text">
- <string>&amp;Delay:</string>
- </property>
- <property name="buddy" stdset="0">
- <cstring>mDelay</cstring>
- </property>
- </widget>
- <widget class="TQCheckBox" row="3" column="0" rowspan="1" colspan="3">
- <property name="name">
- <cstring>mCbxRandomPosition</cstring>
- </property>
- <property name="text">
- <string>Random &amp;position</string>
- </property>
- </widget>
- <widget class="TQFrame" row="0" column="3" rowspan="6" colspan="2">
- <property name="name">
- <cstring>mPreview</cstring>
- </property>
- <property name="sizePolicy">
- <sizepolicy>
- <hsizetype>7</hsizetype>
- <vsizetype>7</vsizetype>
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="frameShape">
- <enum>NoFrame</enum>
- </property>
- <property name="frameShadow">
- <enum>Plain</enum>
- </property>
- </widget>
- </grid>
-</widget>
-<customwidgets>
-</customwidgets>
-<connections>
- <connection>
- <sender>mCbxZoom</sender>
- <signal>toggled(bool)</signal>
- <receiver>mCbxRandomPosition</receiver>
- <slot>setDisabled(bool)</slot>
- </connection>
-</connections>
-<layoutdefaults spacing="6" margin="11"/>
-<includehints>
- <includehint>klineedit.h</includehint>
- <includehint>kpushbutton.h</includehint>
-</includehints>
-</UI>
diff --git a/kscreensaver/kdesavers/sspreviewarea.cpp b/kscreensaver/kdesavers/sspreviewarea.cpp
deleted file mode 100644
index 2b8b3c65..00000000
--- a/kscreensaver/kdesavers/sspreviewarea.cpp
+++ /dev/null
@@ -1,21 +0,0 @@
-//============================================================================
-//
-// KRotation screen saver for KDE
-// Copyright (C) 2004 Georg Drenkhahn
-// $Id$
-//
-//============================================================================
-
-#include "sspreviewarea.h"
-#include "sspreviewarea.moc"
-
-SsPreviewArea::SsPreviewArea(TQWidget* parent, const char* name)
- : TQWidget(parent, name)
-{
-}
-
-void SsPreviewArea::resizeEvent(TQResizeEvent* e)
-{
- emit resized(e);
-}
-
diff --git a/kscreensaver/kdesavers/sspreviewarea.h b/kscreensaver/kdesavers/sspreviewarea.h
deleted file mode 100644
index ab36c4b8..00000000
--- a/kscreensaver/kdesavers/sspreviewarea.h
+++ /dev/null
@@ -1,58 +0,0 @@
-//============================================================================
-//
-// KRotation screen saver for KDE
-// Copyright (C) 2004 Georg Drenkhahn
-// $Id$
-//
-//============================================================================
-
-#ifndef SSPREVIEWAREA_H
-#define SSPREVIEWAREA_H
-
-#include <tqwidget.h>
-
-/** @brief Reimplementation of TQWidget emitting a signal if resized.
- *
- * This class is equalt to TQWidget except for the fact that the signal resized()
- * is emitted if the widget gets resized. By this signaling mechanism it is
- * possible to resize the embedded GL area object within the screen saver setup
- * dialog.
- *
- * In the constructor of the dialog widget (KPendulumSetup::KPendulumSetup(),
- * KRotationSetup::KRotationSetup()) the signal SsPreviewArea::resized() is
- * connected with a slot of the screensaver class
- * (KPendulumSaver::resizeGlArea(), KRotationSaver::resizeGlArea()). This slot
- * function calls the reimplemented TQGLWidget::resizeGL() method of the GL
- * widgets (PendulumGLWidget::resizeGL(), RotationGLWidget::resizeGL()) which
- * really resizes the GL scenery. */
-class SsPreviewArea : public TQWidget
-{
- Q_OBJECT
-
-
- public:
- /** @brief Constructor for SsPreviewArea
- * @param parent Pointer tp parent widget, forwarded to the TQWidget
- * constructor
- * @param name Pointer to widget name, forwarded to the TQWidget constructor
- *
- * The constructor just calls TQWidget::TQWidget() with the given arguments.
- */
- SsPreviewArea(TQWidget* parent = NULL, const char* name = NULL);
-
- protected:
- /** @brief Called if widget gets resized.
- * @param e Pointer to the corresponding TQResizeEvent object containing the
- * resize information
- *
- * Reimplemented event handler from TQWidget. Only the signal resized() is
- * emitted. */
- virtual void resizeEvent(TQResizeEvent* e);
-
- signals:
- /** @brief Signal which is emitted in the resizeEvent() method.
- * @param e Pointer to the corresponding TQResizeEvent object */
- void resized(TQResizeEvent* e);
-};
-
-#endif
diff --git a/kscreensaver/kdesavers/vec3.cpp b/kscreensaver/kdesavers/vec3.cpp
deleted file mode 100644
index c66730e5..00000000
--- a/kscreensaver/kdesavers/vec3.cpp
+++ /dev/null
@@ -1,105 +0,0 @@
-//============================================================================
-//
-// 3-dim real vector class
-// $Id$
-// Copyright (C) 2004 Georg Drenkhahn
-//
-// This file is free software; you can redistribute it and/or modify it under
-// the terms of the GNU General Public License version 2 as published by the
-// Free Software Foundation.
-//
-//============================================================================
-
-#include <math.h>
-#if !defined(NAN)
-static inline double nan__()
-{
- static const unsigned int one = 1;
- static const bool BigEndian = (*((unsigned char *) &one) == 0);
-
- static const unsigned char be_nan_bytes[] = { 0x7f, 0xf8, 0, 0, 0, 0, 0, 0 };
- static const unsigned char le_nan_bytes[] = { 0, 0, 0, 0, 0, 0, 0xf8, 0x7f };
-
- return *( ( const double * )( BigEndian ? be_nan_bytes : le_nan_bytes ) );
-}
-# define NAN (::nan__())
-#endif
-
-#include <config.h>
-
-#ifdef HAVE_NUMERIC_LIMITS
-#include <limits>
-#endif
-
-#include <cerrno>
-#include "vec3.h"
-
-template<typename T>
-vec3<T>& vec3<T>::normalize()
-{
- T n = norm(*this);
- if (n != 0)
- {
- (*this) /= n;
- }
- else
- {
- errno = EDOM; // indicate domain error
- // TODO: throw an exception?
- }
- return *this;
-}
-
-template<typename T>
-vec3<T>& vec3<T>::rotate(const vec3<T>& r)
-{
- T phi = norm(r);
- if (phi != 0)
- {
- // part of vector which is parallel to r
- vec3<T> par(r*(*this)/(r*r) * r);
- // part of vector which is perpendicular to r
- vec3<T> perp(*this - par);
- // rotation direction, size of perp
- vec3<T> rotdir(norm(perp) * normalized(crossprod(r,perp)));
- *this = par + cos(phi)*perp + sin(phi)*rotdir;
- }
- return *this;
-}
-
-/*--- static member functions ---*/
-
-template<typename T>
-T vec3<T>::cos_angle(const vec3<T>& a, const vec3<T>& b)
-{
- T den = norm(a) * norm(b);
- T ret = 0;
- // if |a|=0 or |b|=0 then angle is not defined. We return NAN in this case.
- if (den != 0.0)
- {
- ret = a*b/den;
- }
- else
- {
- errno = EDOM; // indicate domain error
-#ifdef HAVE_NUMERIC_LIMITS
- // TODO test
- ret = std::numeric_limits<T>::quiet_NaN();
-#else
- ret = NAN; // return NAN from ISO C99
-#endif
- }
- return ret;
-}
-
-template<typename T>
-T vec3<T>::angle(const vec3<T>& a, const vec3<T>& b, const vec3<T>& c)
-{
- // if |a|=0 or |b|=0 then angle is not defined. We return NAN in this case.
- T ang = vec3<T>::angle(a,b);
- return (crossprod(a,b)*c<0) ?
- T(2.*M_PI)-ang : ang;
-}
-
-// explicite instantiation
-template class vec3<double>;
diff --git a/kscreensaver/kdesavers/vec3.h b/kscreensaver/kdesavers/vec3.h
deleted file mode 100644
index 62aeb8ed..00000000
--- a/kscreensaver/kdesavers/vec3.h
+++ /dev/null
@@ -1,214 +0,0 @@
-//============================================================================
-//
-// 3-dim real vector class
-// $Id$
-// Copyright (C) 2004 Georg Drenkhahn
-//
-// This file is free software; you can redistribute it and/or modify it under
-// the terms of the GNU General Public License version 2 as published by the
-// Free Software Foundation.
-//
-//============================================================================
-
-#ifndef VEC3_H
-#define VEC3_H
-
-#include <valarray>
-
-/** @brief 3-dimensional real vector
- *
- * Implements regular 3 dimensional (space) vectors including the common inner
- * scalar product (2 norm) and the cross product. @a T may be any integer or
- * float data type which is an acceptable template argument of std::valarray. */
-template<typename T>
-class vec3 : public std::valarray<T>
-{
- public:
- /** Default constructor */
- vec3();
- /** Constructor with initial element values */
- vec3(const T&, const T&, const T&);
- /** Copy constructor */
- vec3(const std::valarray<T>&);
- /** Copy constructor */
- vec3(const std::slice_array<T>&);
-
- /** Normalize the vector to have a norm of 1. @return Normalized vector if
- * length is non-zero and otherwise the zero vector. */
- vec3& normalize();
-
- /** Rotate the vector (*this) in positive mathematical direction around the
- * direction given by @a r. The norm of @a r specifies the rotation angle in
- * radians.
- * @param r Rotation vector.
- * @return Rotated vector. */
- vec3& rotate(const vec3& r);
-
- /*--- static funcions ---*/
-
- /** @param a first vector
- * @param b second vector
- * @return Cosine of the angle between @a a and @a b. If norm(@a a)==0 or
- * norm(@a b)==0 the global variable errno is set to EDOM and NAN (or
- * std::numeric_limits<T>::quiet_NaN()) is returned. */
- static T cos_angle(const vec3& a, const vec3& b);
-
- /** @brief Returns the angle between vectors @c a and @a b but with respect
- * to a preferred rotation direction @a c.
- *
- * @param a First vector for angle. Must be | @a a |>0 otherwises NAN is
- * returned.
- * @param b Second vector for angle. Must be | @a b |>0 otherwises NAN is
- * returned.
- * @param c Indicates the rotation direction. @a c can be any vector which is
- * not part of the plane spanned by @a a and @a b. If | @a c | = 0 the
- * smalest possible angle angle is returned.
- * @return Angle in radians between 0 and 2*Pi or NAN if | @a a |=0 or | @a b
- * |=0.
- *
- * For @a a not parallel to @a b and @a a not antiparallel to @a b the 2
- * vectors @a a,@a b span a unique plane in the 3-dimensional space. Let @b
- * n<sub>1</sub> and @b n<sub>2</sub> be the two possible normal vectors for
- * this plane with |@b n<sub>i</sub> |=1, i={1,2} and @b n<sub>1</sub> = -@b
- * n<sub>2</sub> .
- *
- * Let further @a a and @a b enclose an angle alpha in [0,Pi], then there is
- * one i in {1,2} so that (alpha*@b n<sub>i</sub> x @a a) * @a b = 0. This
- * means @a a rotated by the rotation vector alpha*@b n<sub>i</sub> is
- * parallel to @a b. One could also rotate @a a by (2*Pi-alpha)*(-@b
- * n<sub>i</sub>) to acomplish the same transformation with
- * ((2*Pi-alpha)*(-@b n<sub>i</sub>) x @a a) * @a b = 0
- *
- * The vector @a c defines the direction of the normal vector to take as
- * reference. If @a c * @b n<sub>i</sub> > 0 alpha is returned and otherwise
- * 2*Pi-alpha. If @a a parallel to @a b or @a a parallel to @a b the choice
- * of @a c does not matter. */
- static T angle(const vec3& a, const vec3& b, const vec3& c);
-
- /*--- static inline funcions ---*/
-
- /** Norm of argument vector.
- * @param a vector.
- * @return | @a a | */
- static T norm(const vec3& a);
-
- /** Angle between @a a and @a b.
- * @param a fist vector. Must be | @a a | > 0 otherwises NAN is returned.
- * @param b second vector. Must be | @a b | > 0 otherwises NAN is returned.
- * @return Angle in radians between 0 and Pi or NAN if | @a a | = 0 or | @a b
- * | = 0. */
- static T angle(const vec3& a, const vec3& b);
-
- /** Cross product of @a a and @a b.
- * @param a fist vector.
- * @param b second vector.
- * @return Cross product of argument vectors @a a x @a b. */
- static vec3 crossprod(const vec3& a, const vec3& b);
-
- /** Normalized version of argument vector.
- * @param a vector.
- * @return @a a / | @a a | for | @a a | > 0 and otherwise the zero vector
- * (=@a a). In the latter case the global variable errno is set to EDOM. */
- static vec3 normalized(vec3 a);
-};
-
-/*--- inline member functions ---*/
-
-template<typename T>
-inline vec3<T>::vec3()
- : std::valarray<T>(3)
-{}
-
-template<typename T>
-inline vec3<T>::vec3(const T& a, const T& b, const T& c)
- : std::valarray<T>(3)
-{
- (*this)[0] = a;
- (*this)[1] = b;
- (*this)[2] = c;
-}
-
-template<typename T>
-inline vec3<T>::vec3(const std::valarray<T>& a)
- : std::valarray<T>(a)
-{
-}
-
-template<typename T>
-inline vec3<T>::vec3(const std::slice_array<T>& a)
- : std::valarray<T>(a)
-{
-}
-
-/*--- inline non-member operators ---*/
-
-/** @param a first vector summand
- * @param b second vector summand
- * @return Sum vector of vectors @a a and @a b. */
-template<typename T>
-inline vec3<T> operator+(vec3<T> a, const vec3<T>& b)
-{
- a += b; /* valarray<T>::operator+=(const valarray<T>&) */
- return a;
-}
-
-/** @param a first vector multiplicant
- * @param b second vector multiplicant
- * @return Scalar product of vectors @a a and @a b. */
-template<typename T>
-inline T operator*(vec3<T> a, const vec3<T>& b)
-{
- a *= b; /* valarray<T>::operator*=(const T&) */
- return a.sum();
-}
-
-/** @param a scalar multiplicant
- * @param b vector operand
- * @return Product vector of scalar @a a and vector @a b. */
-template<typename T>
-inline vec3<T> operator*(const T& a, vec3<T> b)
-{
- b *= a; /* valarray<T>::operator*=(const T&) */
- return b;
-}
-
-/** @param a vector operand
- * @param b scalar multiplicant
- * @return Product vector of scalar @a b and vector @a a. */
-template<typename T>
-inline vec3<T> operator*(vec3<T> a, const T& b)
-{
- return b*a; /* vec3<T>::operator*(const T&, vec3<T>) */
-}
-
-/*--- static inline funcions ---*/
-
-template<typename T>
-inline T vec3<T>::norm(const vec3<T>& a)
-{
- return sqrt(a*a);
-}
-
-template<typename T>
-inline T vec3<T>::angle(const vec3<T>& a, const vec3<T>& b)
-{
- // returns NAN if cos_angle() returns NAN (TODO: test this case)
- return acos(cos_angle(a,b));
-}
-
-template<typename T>
-inline vec3<T> vec3<T>::crossprod(const vec3<T>& a, const vec3<T>& b)
-{
- return vec3<T>(
- a[1]*b[2] - a[2]*b[1],
- a[2]*b[0] - a[0]*b[2],
- a[0]*b[1] - a[1]*b[0]);
-}
-
-template<typename T>
-inline vec3<T> vec3<T>::normalized(vec3<T> a)
-{
- return a.normalize();
-}
-
-#endif
diff --git a/kscreensaver/kdesavers/vm.c b/kscreensaver/kdesavers/vm.c
deleted file mode 100644
index 6d4a1af2..00000000
--- a/kscreensaver/kdesavers/vm.c
+++ /dev/null
@@ -1,264 +0,0 @@
-/*
- * vm.c
- *
- * Copyright (c) 2000 Artur Rataj
- * Distributed under the terms of the GNU General Public License
- *
- */
-
-#include "vm.h"
-
-#define ERROR_VALUE INT_MAX
-
-int vm_init_pool( struct tvm_pool** pool,
- int area_size,
- int max_stack_size,
- int max_threads_num ) {
- int position;
-
- ( *pool ) = (struct tvm_pool*)malloc( sizeof(struct tvm_pool) );
- ( *pool )->area_size = area_size;
- ( *pool )->area = (int*)malloc( (*pool)->area_size*sizeof(int) );
- ( *pool )->processes = NULL;
- ( *pool )->max_stack_size = max_stack_size;
- ( *pool )->max_threads_num = max_threads_num;
- vm_enable_reverse( *pool, 0 );
- for( position = 0; position < (*pool)->area_size; ++position )
- ( *pool )->area[position] = VM_OP_STOP;
- return 1;
-}
-
-void vm_done_pool( struct tvm_pool* pool ) {
- struct tvm_process* curr_process;
- free( pool->area );
- curr_process = pool->processes;
- while( curr_process ) {
- struct tvm_process* tmp_process;
-
- tmp_process = curr_process;
- curr_process = curr_process->next;
- free( tmp_process->stack );
- free( tmp_process );
- }
- free( pool );
-}
-
-static int push( struct tvm_pool* pool,
- struct tvm_process* process,
- int value ) {
- if( process->stack_top == pool->max_stack_size )
- return ERROR_VALUE;
- else
- process->stack[process->stack_top++] = value;
- return 1;
-}
-
-static int pop( struct tvm_pool* pool,
- struct tvm_process* process ) {
- if( process->stack_top == 0 )
- return ERROR_VALUE;
- else
-{
- return process->stack[--process->stack_top];
-}
-}
-
-void vm_modify( struct tvm_pool* pool,
- int position,
- int op ) {
- pool->area[position] = op;
-}
-
-void vm_exec( struct tvm_pool* pool,
- int position,
- int age,
- int reverse ) {
- struct tvm_process* new_process;
-
- new_process = (struct tvm_process*)malloc( sizeof(struct tvm_process) );
- new_process->position = position;
- new_process->stack = (int*)malloc( pool->max_stack_size*sizeof(int) );
- new_process->stack_top = 0;
- new_process->age = age;
- new_process->reverse = reverse;
- new_process->next = pool->processes;
- pool->processes = new_process;
-}
-
-void vm_enable_reverse( struct tvm_pool* pool,
- const int enabled ) {
- pool->reverse_enabled = enabled;
-}
-
-int vm_get_reverse( struct tvm_pool* pool ) {
- if( pool->reverse_enabled )
- return (int)( vm_random(&(pool->vm_random_data))*2.0/
- ( VM_RAND_MAX + 1.0 ) );
- else
- return 0;
-}
-
-void vm_iterate( struct tvm_pool* pool,
- char* modified ) {
- struct tvm_process* prev_process;
- struct tvm_process* curr_process;
- struct tvm_process* next_process;
- int processes_num;
-
- processes_num = 0;
- prev_process = NULL;
- curr_process = pool->processes;
- while( curr_process ) {
- int op;
- int arg;
- int arg_2;
- int arg_3;
-
- ++curr_process->age;
- next_process = curr_process->next;
- op = pool->area[curr_process->position];
- if( curr_process->reverse )
- --curr_process->position;
- else
- ++curr_process->position;
- curr_process->position = ( curr_process->position + pool->area_size )%
- pool->area_size;
- switch( op ) {
- case VM_OP_WAIT:
- break;
-
- case VM_OP_STOP:
- if( !prev_process )
- pool->processes = curr_process->next;
- else
- prev_process->next = curr_process->next;
- free( curr_process->stack );
- free( curr_process );
- curr_process = prev_process;
- --processes_num;
- break;
-
- case VM_OP_EXEC:
- if( (arg = pop( pool, curr_process )) == ERROR_VALUE ) {
- if( !prev_process )
- pool->processes = curr_process->next;
- else
- prev_process->next = curr_process->next;
- free( curr_process->stack );
- free( curr_process );
- curr_process = prev_process;
- --processes_num;
- } else {
- arg = curr_process->position + arg;
- if( arg < 0 )
- arg += pool->area_size;
- if( arg >= pool->area_size )
- arg -= pool->area_size;
- vm_exec( pool, arg, curr_process->age, vm_get_reverse(pool) );
- }
- break;
-
- case VM_OP_COPY:
- if( (arg = pop( pool, curr_process )) == ERROR_VALUE ) {
- if( !prev_process )
- pool->processes = curr_process->next;
- else
- prev_process->next = curr_process->next;
- free( curr_process->stack );
- free( curr_process );
- curr_process = prev_process;
- --processes_num;
- } else if( (arg_2 = pop( pool, curr_process )) == ERROR_VALUE ) {
- if( !prev_process )
- pool->processes = curr_process->next;
- else
- prev_process->next = curr_process->next;
- free( curr_process->stack );
- free( curr_process );
- curr_process = prev_process;
- --processes_num;
- } else if( 1 && (arg_3 = pop( pool, curr_process )) == ERROR_VALUE ) {
- if( !prev_process )
- pool->processes = curr_process->next;
- else
- prev_process->next = curr_process->next;
- free( curr_process->stack );
- free( curr_process );
- curr_process = prev_process;
- --processes_num;
- } else {
- int count;
- int direction;
-
- arg = curr_process->position + arg;
- if( arg < 0 )
- arg += pool->area_size;
- if( arg >= pool->area_size )
- arg -= pool->area_size;
- arg_2 = curr_process->position + arg_2;
- if( arg_2 < 0 )
- arg_2 += pool->area_size;
- if( arg_2 >= pool->area_size )
- arg_2 -= pool->area_size;
- if( curr_process->reverse )
- direction = -1;
- else
- direction = 1;
- for( count = 0; count < arg_3; ++count ) {
- int i, j;
- int offset;
-
- offset = count*direction + pool->area_size;
- i = pool->area[( arg_2 + offset )%pool->area_size];
- j = pool->area[( arg_2 + offset )%pool->area_size] = pool->area[( arg + offset )%pool->area_size];
- if( modified && i != j )
- modified[( arg_2 + offset )%pool->area_size] = 1;
- }
- }
- break;
-
- default: /* >= VM_OP_PUSH */
- arg = op - VM_OP_PUSH;
- if( push(pool, curr_process, arg) == ERROR_VALUE ) {
- if( !prev_process )
- pool->processes = curr_process->next;
- else
- prev_process->next = curr_process->next;
- free( curr_process->stack );
- free( curr_process );
- curr_process = prev_process;
- --processes_num;
- }
- break;
- }
- prev_process = curr_process;
- curr_process = next_process;
- ++processes_num;
- }
- while( processes_num > pool->max_threads_num ) {
- int process_num;
- int curr_process_num;
-
- process_num = (int)( vm_random(&(pool->vm_random_data))*1.0*processes_num/
- ( VM_RAND_MAX + 1.0 ) );
-/*
- process_num = (int)( rand()*1.0*processes_num/
- ( RAND_MAX + 1.0 ) );
- */
- curr_process_num = 0;
- curr_process = pool->processes;
- prev_process = NULL;
- while( curr_process_num != process_num ) {
- prev_process = curr_process;
- curr_process = curr_process->next;
- ++curr_process_num;
- }
- if( prev_process )
- prev_process->next = curr_process->next;
- else
- pool->processes = curr_process->next;
- free( curr_process->stack );
- free( curr_process );
- --processes_num;
- }
-}
diff --git a/kscreensaver/kdesavers/vm.h b/kscreensaver/kdesavers/vm.h
deleted file mode 100644
index dc64d241..00000000
--- a/kscreensaver/kdesavers/vm.h
+++ /dev/null
@@ -1,52 +0,0 @@
-#ifndef __VM_H__
-#define __VM_H__
-
-#include <stdlib.h>
-#include <stdio.h> /* !!! */
-#include <limits.h>
-#include "vm_random.h"
-
-#define VM_OP_STOP 1
-#define VM_OP_COPY 2
-#define VM_OP_EXEC 3
-#define VM_OP_WAIT 4
-#define VM_OP_PUSH (INT_MAX/2)
-
-struct tvm_process {
- int position;
- int* stack;
- int stack_top;
- int age;
- int reverse;
- struct tvm_process* next;
-};
-
-struct tvm_pool {
- int* area;
- int area_size;
- struct tvm_process* processes;
- int max_stack_size;
- int max_threads_num;
- int reverse_enabled;
- struct vm_random_data vm_random_data;
-};
-
-int vm_init_pool( struct tvm_pool** pool,
- int area_size,
- int max_stack_size,
- int max_threads_num );
-void vm_modify( struct tvm_pool* pool,
- int position,
- int op );
-void vm_exec( struct tvm_pool* pool,
- int position,
- int age,
- int reverse );
-void vm_enable_reverse( struct tvm_pool* pool,
- const int enabled );
-int vm_get_reverse( struct tvm_pool* pool );
-void vm_iterate( struct tvm_pool* pool,
- char* modified );
-void vm_done_pool( struct tvm_pool* pool );
-
-#endif /* !defined( __VM_H__ ) */
diff --git a/kscreensaver/kdesavers/vm.xbm b/kscreensaver/kdesavers/vm.xbm
deleted file mode 100644
index 3d6e84cd..00000000
--- a/kscreensaver/kdesavers/vm.xbm
+++ /dev/null
@@ -1,191 +0,0 @@
-/* Created with The GIMP */
-#define vm_width 44
-#define vm_height 374
-static unsigned char vm_bits[] = {
- 0x6d, 0xdb, 0xf6, 0xff, 0xff, 0x0f, 0xdb, 0xb6, 0x55, 0xdb, 0xb6, 0x0d,
- 0x6d, 0x0b, 0xd0, 0xff, 0x07, 0x06, 0x5b, 0x1d, 0xd0, 0xdb, 0xee, 0x0c,
- 0xf6, 0xf6, 0x77, 0xff, 0xbf, 0x0f, 0x8d, 0x4a, 0xd4, 0xd6, 0xba, 0x0d,
- 0x05, 0x37, 0xe8, 0xd3, 0x4f, 0x0e, 0x27, 0x2c, 0xd1, 0x9a, 0xce, 0x0c,
- 0x62, 0x1a, 0xd3, 0xdd, 0xeb, 0x0c, 0x52, 0x94, 0xa2, 0x39, 0xcf, 0x09,
- 0x73, 0x9a, 0xd2, 0xde, 0xeb, 0x0e, 0xd2, 0x94, 0xd3, 0x39, 0xef, 0x09,
- 0x53, 0x8a, 0x62, 0xdd, 0xa5, 0x0e, 0x62, 0x1c, 0xe3, 0x9a, 0xef, 0x0c,
- 0x03, 0x16, 0xd0, 0xd5, 0x46, 0x0d, 0x0e, 0x75, 0xd8, 0xcb, 0x1f, 0x0d,
- 0xdb, 0xae, 0x6a, 0x77, 0xff, 0x07, 0xd6, 0xaa, 0xed, 0xfe, 0xb6, 0x0e,
- 0x5d, 0x5f, 0xdb, 0xf7, 0xff, 0x0f, 0x75, 0xf5, 0xd6, 0xbe, 0xb5, 0x0d,
- 0xab, 0x95, 0xfa, 0xeb, 0xff, 0x07, 0x7a, 0xb7, 0xab, 0x7f, 0xb7, 0x0e,
- 0xd7, 0x5a, 0xd5, 0xef, 0xfd, 0x0f, 0xad, 0x76, 0x77, 0xdd, 0xb7, 0x0d,
- 0xf5, 0x0d, 0xd0, 0x7f, 0x47, 0x0c, 0x57, 0x1b, 0xd0, 0xf7, 0x5e, 0x0d,
- 0x5a, 0xf5, 0xdb, 0xfe, 0xfb, 0x07, 0x6b, 0x97, 0xda, 0xad, 0xaf, 0x0e,
- 0x85, 0x1a, 0xf4, 0xe5, 0x56, 0x0f, 0x87, 0x36, 0xa8, 0xe9, 0x1f, 0x0d,
- 0x9a, 0xed, 0xec, 0xb7, 0x75, 0x0f, 0x16, 0x9b, 0xa8, 0xe7, 0x6f, 0x0d,
- 0x8d, 0x76, 0xdc, 0xb7, 0x3f, 0x0f, 0x9d, 0xd5, 0xd4, 0xe6, 0x76, 0x0d,
- 0x8b, 0xb6, 0xfc, 0xef, 0x5f, 0x0f, 0x9d, 0xad, 0xa4, 0xad, 0x5d, 0x0d,
- 0x03, 0x34, 0xd0, 0xa5, 0x17, 0x0d, 0x06, 0x14, 0xc0, 0x91, 0x5e, 0x08,
- 0xfd, 0xef, 0x7e, 0xff, 0xfb, 0x0f, 0xab, 0xaa, 0xe5, 0x77, 0xd7, 0x0f,
- 0x6a, 0x5d, 0xdd, 0xdf, 0x7f, 0x0d, 0xde, 0xd5, 0x55, 0xfd, 0xf6, 0x0f,
- 0x55, 0xb7, 0xf6, 0xef, 0xdf, 0x0a, 0xdb, 0xb6, 0xd6, 0x7d, 0xfb, 0x0f,
- 0xb6, 0xea, 0xda, 0xef, 0x6f, 0x07, 0xb6, 0xaf, 0xb6, 0xbd, 0xfd, 0x0e,
- 0x6d, 0x15, 0xd0, 0xef, 0x07, 0x0d, 0x5b, 0x1b, 0xd0, 0xfd, 0xae, 0x0c,
- 0x76, 0xed, 0xdb, 0xef, 0xfb, 0x07, 0x8d, 0x5b, 0x5a, 0x5b, 0x5f, 0x0f,
- 0x05, 0x16, 0xf0, 0xe5, 0x8b, 0x0e, 0x23, 0x14, 0xd1, 0x4c, 0x6f, 0x0c,
- 0x72, 0x9e, 0xd2, 0x9e, 0xb3, 0x0d, 0x56, 0xd4, 0xf2, 0xbd, 0xff, 0x0c,
- 0x1b, 0xbb, 0xd0, 0xc7, 0x36, 0x0d, 0x1b, 0xd6, 0x50, 0xdf, 0x7f, 0x0e,
- 0xc6, 0x35, 0xfe, 0xf1, 0x96, 0x0b, 0x42, 0x16, 0xc2, 0xab, 0xaf, 0x0d,
- 0x01, 0x0a, 0x70, 0x94, 0x45, 0x0e, 0x03, 0x1e, 0xd0, 0xa9, 0x4b, 0x0c,
- 0xfd, 0xd2, 0xeb, 0xfe, 0xff, 0x07, 0xab, 0x5e, 0xdd, 0x6f, 0xdd, 0x0e,
- 0xed, 0xb5, 0xd5, 0xfd, 0xf7, 0x0f, 0x5b, 0xab, 0xb6, 0x6f, 0xbf, 0x0d,
- 0xd6, 0x76, 0xdb, 0xfd, 0xed, 0x07, 0xb5, 0xd6, 0xd6, 0xdb, 0xdf, 0x0e,
- 0xef, 0x5a, 0xdd, 0x7f, 0xfb, 0x0f, 0xaa, 0xb7, 0xd5, 0xee, 0xbf, 0x0d,
- 0x5d, 0x15, 0xf0, 0x7b, 0x03, 0x0c, 0xeb, 0x16, 0x50, 0xff, 0xb7, 0x0d,
- 0x5d, 0xfb, 0xeb, 0x6b, 0xff, 0x0e, 0x55, 0x4b, 0x5c, 0xef, 0xad, 0x0d,
- 0x03, 0x1d, 0xf0, 0xd1, 0x4f, 0x0e, 0x22, 0x14, 0xd1, 0x9d, 0xd6, 0x0c,
- 0x57, 0x6e, 0xd3, 0xb6, 0xef, 0x0c, 0x3a, 0xda, 0xd0, 0x97, 0xbd, 0x0d,
- 0x07, 0x55, 0xe8, 0xeb, 0x2f, 0x06, 0x2d, 0x5e, 0x51, 0x97, 0xfd, 0x0c,
- 0x5d, 0xb4, 0xe2, 0x5f, 0xb7, 0x0d, 0x75, 0xea, 0xa3, 0x5d, 0xff, 0x09,
- 0x03, 0x1a, 0xd0, 0xd6, 0x25, 0x0e, 0x02, 0x16, 0xf0, 0x88, 0xa7, 0x0c,
- 0xef, 0xb5, 0xce, 0xf7, 0xdf, 0x0f, 0xad, 0xd6, 0xda, 0x7f, 0xbd, 0x0d,
- 0xb5, 0xad, 0x6d, 0xef, 0xf7, 0x07, 0xb7, 0x6d, 0xeb, 0xdd, 0xdf, 0x0e,
- 0xda, 0x5a, 0xdd, 0x7f, 0xfd, 0x0f, 0x56, 0xb7, 0xd5, 0xf6, 0xaf, 0x0d,
- 0xfb, 0x6a, 0xdb, 0xdf, 0xfd, 0x0e, 0x56, 0xdb, 0xda, 0xfd, 0xed, 0x0d,
- 0xb5, 0x0d, 0xd0, 0xb7, 0x07, 0x06, 0x6d, 0x1b, 0xd0, 0xfe, 0xdf, 0x0c,
- 0xdb, 0xf6, 0xdb, 0xb7, 0xf6, 0x0f, 0xb6, 0x95, 0xda, 0xfe, 0xbf, 0x0d,
- 0x0d, 0x7b, 0xe8, 0xc7, 0x36, 0x0f, 0x1b, 0xd6, 0xd8, 0xd6, 0x3f, 0x0c,
- 0x06, 0x2b, 0xe8, 0xd3, 0x56, 0x0f, 0x25, 0x3a, 0xa8, 0xcb, 0x5f, 0x0d,
- 0x23, 0x17, 0xe9, 0x6c, 0x4d, 0x0e, 0x23, 0x1a, 0xd9, 0xcd, 0x6b, 0x0d,
- 0x02, 0x0b, 0xd0, 0xd4, 0x27, 0x0d, 0x02, 0x1a, 0xd0, 0x92, 0x26, 0x0d,
- 0x2f, 0x76, 0xf0, 0xe7, 0x5f, 0x0e, 0x0a, 0x6a, 0xd0, 0x8e, 0x5d, 0x0c,
- 0xfd, 0xad, 0xd7, 0xfb, 0xff, 0x07, 0x95, 0xb5, 0xb6, 0xff, 0xb5, 0x0f,
- 0x7b, 0xd7, 0xda, 0xad, 0xff, 0x0e, 0x56, 0xbd, 0xb6, 0xff, 0xdb, 0x0d,
- 0x75, 0xeb, 0xea, 0x5d, 0xff, 0x07, 0xd7, 0xaa, 0xae, 0xfb, 0xb6, 0x0e,
- 0x5a, 0xd7, 0xf5, 0xff, 0xff, 0x0f, 0x76, 0x5d, 0xad, 0x6d, 0xab, 0x0d,
- 0xad, 0x15, 0xd0, 0xff, 0x17, 0x0c, 0x6d, 0x17, 0x70, 0xdb, 0xd6, 0x0d,
- 0xdb, 0xfa, 0xeb, 0xff, 0x7f, 0x07, 0xda, 0x96, 0xd6, 0xb6, 0xed, 0x0f,
- 0x03, 0x2a, 0xd0, 0xc9, 0x17, 0x0c, 0x05, 0x1a, 0xd0, 0xa9, 0x4e, 0x0d,
- 0xf3, 0x97, 0x6f, 0xfd, 0xeb, 0x0f, 0x02, 0x1a, 0xe8, 0xc5, 0x0f, 0x0d,
- 0x03, 0x16, 0xd0, 0xaa, 0xad, 0x0c, 0x76, 0xb4, 0xd3, 0x9d, 0xff, 0x09,
- 0x5b, 0x6e, 0xe1, 0xbf, 0x6a, 0x0d, 0x76, 0x58, 0x47, 0xb7, 0xff, 0x0d,
- 0x01, 0x86, 0xf0, 0xcc, 0x26, 0x0c, 0x03, 0x1d, 0xd0, 0xc9, 0x4d, 0x0d,
- 0xdd, 0x56, 0xed, 0xf7, 0xf7, 0x0f, 0xb5, 0x6d, 0xad, 0x7e, 0xbf, 0x0d,
- 0xd7, 0xda, 0xda, 0xf7, 0xed, 0x07, 0xbd, 0xab, 0xdb, 0xaf, 0xbf, 0x0e,
- 0x55, 0x5d, 0x75, 0xff, 0xed, 0x0f, 0xed, 0x75, 0xd7, 0xba, 0xff, 0x0d,
- 0x5b, 0xab, 0xda, 0xff, 0x5a, 0x0f, 0xb6, 0x6e, 0xdb, 0xed, 0xff, 0x0d,
- 0x6d, 0x1b, 0x70, 0xbf, 0x05, 0x06, 0x6b, 0x15, 0xd0, 0xf7, 0xaf, 0x0c,
- 0xae, 0xdb, 0xeb, 0xbe, 0xfb, 0x0f, 0x5a, 0xb6, 0xda, 0x6f, 0x7f, 0x0d,
- 0x05, 0x2a, 0xd0, 0xd2, 0x15, 0x0d, 0x47, 0x3e, 0xd0, 0xab, 0xaf, 0x0d,
- 0xb1, 0x85, 0xef, 0xfc, 0xeb, 0x0e, 0x83, 0x1d, 0xd8, 0x65, 0x97, 0x0d,
- 0x01, 0x0b, 0x68, 0xd4, 0x23, 0x0e, 0x23, 0x0a, 0xd1, 0x99, 0xe7, 0x0c,
- 0x38, 0x8e, 0x71, 0xde, 0xf6, 0x06, 0x63, 0x1a, 0xe3, 0x9c, 0xc7, 0x0c,
- 0x21, 0x16, 0xe8, 0xea, 0xad, 0x0e, 0x07, 0x35, 0xd8, 0xa3, 0x1f, 0x0d,
- 0xad, 0xd7, 0xea, 0xfe, 0xfa, 0x0f, 0xb5, 0xb6, 0xd6, 0xef, 0xb7, 0x0d,
- 0xdb, 0xda, 0x6d, 0x7b, 0xff, 0x07, 0xb6, 0xab, 0xda, 0xef, 0xad, 0x0e,
- 0x6d, 0xdd, 0x76, 0xff, 0xff, 0x0f, 0xab, 0xd5, 0xea, 0xb6, 0xb5, 0x0d,
- 0xdd, 0xae, 0xed, 0xff, 0xff, 0x07, 0xdb, 0xba, 0x55, 0xdb, 0xb6, 0x0e,
- 0xb6, 0x15, 0xd0, 0xff, 0x47, 0x0c, 0x6d, 0x17, 0x70, 0xdb, 0xae, 0x0d,
- 0xd5, 0xfa, 0xd7, 0xff, 0xff, 0x0e, 0xbd, 0x26, 0x6d, 0xdb, 0xda, 0x0d,
- 0x03, 0x1c, 0xe0, 0xa1, 0x27, 0x0a, 0x02, 0x2a, 0x50, 0x97, 0xcf, 0x0c,
- 0x77, 0x9a, 0xf3, 0x5d, 0xef, 0x0e, 0x6a, 0xb6, 0xa2, 0xbf, 0xdd, 0x0c,
- 0x17, 0x6a, 0xf1, 0xca, 0x7f, 0x0d, 0x7d, 0xae, 0xd1, 0x5f, 0xeb, 0x0e,
- 0x15, 0x5b, 0xe9, 0xef, 0x3f, 0x06, 0x37, 0x75, 0x59, 0x4d, 0xfb, 0x0e,
- 0x9a, 0xd6, 0xd4, 0xf7, 0x2f, 0x0f, 0x96, 0xad, 0xd8, 0xe7, 0x7d, 0x0d,
- 0x6d, 0xdb, 0x76, 0xbf, 0xff, 0x07, 0xdb, 0xb6, 0xd6, 0xfd, 0xd5, 0x0e,
- 0xb6, 0xd5, 0xed, 0xb7, 0xff, 0x0f, 0xad, 0xb6, 0xda, 0xfe, 0xae, 0x0d,
- 0x75, 0xdb, 0xd6, 0xdb, 0xfb, 0x07, 0x6f, 0xab, 0xb5, 0xff, 0xbf, 0x0e,
- 0xaa, 0x5d, 0xdb, 0xad, 0xf5, 0x0f, 0xba, 0xd5, 0xd6, 0xff, 0xbf, 0x0d,
- 0xd7, 0x0e, 0x70, 0xbb, 0x43, 0x0c, 0xb5, 0x1a, 0xd0, 0x77, 0x57, 0x0d,
- 0xef, 0xed, 0xeb, 0xfe, 0xff, 0x07, 0x0a, 0x5b, 0xdc, 0xd7, 0xad, 0x0e,
- 0x05, 0x15, 0xd0, 0x68, 0x8f, 0x0e, 0x23, 0x1e, 0xd1, 0x95, 0xad, 0x0c,
- 0x79, 0x94, 0xf2, 0xde, 0xf7, 0x0c, 0x43, 0x96, 0xd2, 0x59, 0xc7, 0x0d,
- 0x05, 0x2d, 0xd0, 0xca, 0x1d, 0x06, 0x05, 0x2a, 0xd8, 0xd3, 0x57, 0x0e,
- 0x73, 0x8e, 0xd3, 0x9c, 0xe7, 0x0c, 0x52, 0x9a, 0xd2, 0xbd, 0xee, 0x0d,
- 0x21, 0x16, 0x70, 0x95, 0xa3, 0x0c, 0x07, 0x2d, 0xd0, 0xd3, 0x1f, 0x0d,
- 0x55, 0xdb, 0x76, 0xef, 0xf7, 0x0f, 0xdd, 0x56, 0xd5, 0xbd, 0xbe, 0x0d,
- 0x6b, 0xdd, 0x76, 0xff, 0xeb, 0x07, 0xad, 0xd5, 0xd6, 0xdb, 0xbf, 0x0e,
- 0x7b, 0xbb, 0xed, 0x7e, 0xef, 0x0f, 0x56, 0xab, 0xda, 0xf7, 0xfd, 0x0d,
- 0x75, 0x6d, 0xeb, 0xde, 0x57, 0x0f, 0xd7, 0xdb, 0xda, 0xfd, 0xfe, 0x0d,
- 0x5a, 0x15, 0xe0, 0xb7, 0x07, 0x06, 0x76, 0x17, 0x50, 0xff, 0xb7, 0x0c,
- 0xad, 0xfa, 0xef, 0x6d, 0xfd, 0x0f, 0xcb, 0x27, 0xda, 0xfb, 0xaf, 0x0d,
- 0x05, 0x1a, 0xe8, 0xa4, 0x0b, 0x0f, 0x22, 0x96, 0xd0, 0x55, 0x77, 0x0c,
- 0x19, 0x8d, 0x69, 0xee, 0x73, 0x07, 0x71, 0x14, 0xe1, 0x9c, 0xe7, 0x0c,
- 0x03, 0x8e, 0xf0, 0xc6, 0x16, 0x0e, 0x05, 0x1a, 0xc0, 0x95, 0xaf, 0x0c,
- 0x2b, 0x6d, 0x79, 0xdb, 0xdd, 0x06, 0x3d, 0x5b, 0xd1, 0xdf, 0x7b, 0x0e,
- 0x01, 0x15, 0xd8, 0x62, 0x97, 0x0e, 0x43, 0x17, 0xda, 0xea, 0x97, 0x0d,
- 0xb5, 0xad, 0xf5, 0x7e, 0xeb, 0x0f, 0xad, 0xba, 0xd6, 0xed, 0xbf, 0x0d,
- 0x7b, 0x6b, 0xed, 0xbf, 0xff, 0x07, 0xd6, 0xd6, 0x55, 0x7b, 0xb5, 0x0e,
- 0xb5, 0xad, 0xee, 0xff, 0xff, 0x0f, 0x6d, 0xdb, 0x5a, 0xeb, 0xb6, 0x0d,
- 0xdb, 0xb6, 0xf5, 0xbf, 0xff, 0x07, 0xb6, 0xad, 0x56, 0xfb, 0xb5, 0x0e,
- 0x55, 0xdb, 0xed, 0xef, 0xff, 0x0f, 0xee, 0x16, 0xd0, 0xbe, 0x06, 0x0c,
- 0xb5, 0x1a, 0xf0, 0xf7, 0x57, 0x0d, 0xd7, 0xd6, 0xcf, 0xfe, 0xfe, 0x0f,
- 0xaa, 0x2d, 0xf8, 0xd5, 0xab, 0x0a, 0x03, 0x1b, 0xa0, 0xa5, 0x17, 0x0f,
- 0x06, 0x35, 0xd8, 0xd5, 0xaf, 0x06, 0x0d, 0x6e, 0xd0, 0xab, 0x3d, 0x0e,
- 0x25, 0x2a, 0x79, 0xdb, 0xd7, 0x0c, 0x67, 0x3a, 0xd3, 0x99, 0xce, 0x0d,
- 0x02, 0x14, 0xe0, 0xa2, 0x17, 0x04, 0x03, 0x14, 0xc0, 0x2d, 0x57, 0x09,
- 0x70, 0x08, 0x43, 0x5a, 0xea, 0x0a, 0x41, 0x08, 0xc2, 0x98, 0xc2, 0x01,
- 0xf7, 0x7b, 0xdb, 0xff, 0x7f, 0x0f, 0xad, 0x56, 0xdb, 0xf7, 0xef, 0x0f,
- 0xb5, 0x75, 0x75, 0x5f, 0xbd, 0x0e, 0xb7, 0x56, 0xd7, 0xfd, 0xf7, 0x0d,
- 0xea, 0xed, 0xda, 0xf7, 0xbe, 0x07, 0x5e, 0xab, 0xd6, 0xde, 0x77, 0x0f,
- 0xd5, 0x6e, 0xdd, 0xff, 0xfe, 0x0d, 0xb5, 0xda, 0xb5, 0xdb, 0xb7, 0x0f,
- 0xef, 0x56, 0xeb, 0x7e, 0xfb, 0x06, 0xd5, 0x1a, 0xd0, 0xf7, 0x07, 0x0c,
- 0xad, 0x0b, 0xd0, 0xde, 0xee, 0x0e, 0x7b, 0xfb, 0xf7, 0xfd, 0xdd, 0x0d,
- 0x05, 0x0d, 0xa8, 0xeb, 0xb7, 0x0e, 0x03, 0x1a, 0x60, 0x09, 0x87, 0x08,
- 0xa2, 0x14, 0xe5, 0xb5, 0x6f, 0x0d, 0xa7, 0x3c, 0xa5, 0x3b, 0xcd, 0x09,
- 0x46, 0x14, 0xe2, 0xac, 0x6f, 0x0d, 0x05, 0x34, 0xc0, 0x91, 0x4e, 0x08,
- 0xa5, 0x18, 0xc2, 0x6d, 0xab, 0x0b, 0xa7, 0x31, 0xce, 0x79, 0xce, 0x03,
- 0x02, 0x0c, 0xc0, 0x4a, 0x17, 0x0a, 0x02, 0x18, 0xc0, 0x49, 0x57, 0x0a,
- 0xfb, 0xf7, 0x7f, 0xff, 0xfd, 0x0f, 0x56, 0xad, 0xd4, 0xbf, 0xb7, 0x0d,
- 0xad, 0x55, 0xeb, 0xfa, 0xfd, 0x0f, 0x7b, 0x77, 0xdd, 0xdf, 0x6f, 0x0d,
- 0x55, 0xad, 0xeb, 0x76, 0xfb, 0x07, 0x6e, 0x6b, 0xd5, 0xff, 0x6f, 0x0f,
- 0xb5, 0xfd, 0xff, 0xb6, 0xff, 0x0f, 0xb6, 0xfd, 0xff, 0x7f, 0xff, 0x0f,
- 0x6d, 0xfb, 0x7f, 0xfb, 0xff, 0x0f, 0xdb, 0xfe, 0xff, 0x6f, 0xff, 0x0f,
- 0xb6, 0xfd, 0x7f, 0xfb, 0xff, 0x0f, 0x55, 0xfb, 0xff, 0x7f, 0xff, 0x0f,
- 0x07, 0x7e, 0x70, 0xa3, 0x1f, 0x0e, 0x05, 0x18, 0xe0, 0x25, 0x07, 0x08,
- 0x71, 0x9c, 0x63, 0x9c, 0xe7, 0x08, 0xd1, 0x8c, 0xe7, 0x3d, 0xe3, 0x09,
- 0x69, 0xcb, 0x7f, 0xfe, 0xf3, 0x0f, 0xd9, 0xce, 0xff, 0xec, 0xf3, 0x0f,
- 0xa9, 0xcd, 0x7f, 0xbf, 0xf3, 0x0f, 0x71, 0x8d, 0x6f, 0x7a, 0xe3, 0x0f,
- 0x01, 0x1c, 0xe0, 0x94, 0x47, 0x09, 0x07, 0x38, 0xe0, 0x23, 0x0f, 0x0c,
- 0xad, 0xff, 0xfc, 0xfd, 0x7f, 0x0f, 0x6d, 0xfd, 0xbf, 0xdf, 0xff, 0x0f,
- 0xb5, 0xfd, 0xff, 0x7d, 0xff, 0x0f, 0x6f, 0xfb, 0xff, 0xeb, 0xff, 0x0f,
- 0xda, 0xfe, 0x7f, 0x7f, 0xff, 0x0f, 0xab, 0xfd, 0xff, 0xff, 0xff, 0x0f,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f,
- 0x83, 0x1f, 0xfc, 0xe4, 0x57, 0x0f, 0x01, 0x0e, 0xf0, 0x80, 0x07, 0x0c,
- 0x03, 0x1c, 0xe0, 0x08, 0x47, 0x08, 0xe7, 0x1c, 0xe7, 0x3d, 0xef, 0x09,
- 0xe3, 0x9c, 0xe7, 0x38, 0xc7, 0x09, 0x03, 0x1e, 0xe0, 0x81, 0x0f, 0x0c,
- 0x03, 0x1f, 0xf8, 0xc1, 0x0f, 0x0e, 0xe3, 0x1f, 0xff, 0xfd, 0xef, 0x0f,
- 0x83, 0x1f, 0xfc, 0xe0, 0x07, 0x0f, 0x83, 0x1f, 0xfc, 0xe0, 0x07, 0x0f,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f,
- 0x0f, 0x3f, 0xf8, 0xe3, 0x1f, 0x0f, 0x03, 0x1e, 0xf0, 0x81, 0x07, 0x0c,
- 0x73, 0x9e, 0xf3, 0x9c, 0xe7, 0x0c, 0x73, 0x9e, 0xf3, 0xbc, 0xe7, 0x0d,
- 0xc3, 0x1f, 0xfc, 0xf8, 0x87, 0x0f, 0x07, 0x3e, 0xf0, 0x81, 0x0f, 0x0c,
- 0x3f, 0xfe, 0xf1, 0x9f, 0x7f, 0x0c, 0x7b, 0x9c, 0xe3, 0xbe, 0xf7, 0x0d,
- 0x21, 0x0e, 0xf0, 0x88, 0x43, 0x0c, 0x03, 0x1e, 0xf0, 0xc0, 0x07, 0x0c,
- 0xdf, 0xff, 0xfc, 0xff, 0x7f, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f,
- 0xb5, 0xfa, 0xff, 0xff, 0xff, 0x0f, 0x6e, 0xff, 0x7f, 0x55, 0xff, 0x0f,
- 0xd5, 0xfa, 0xff, 0xff, 0xff, 0x0f, 0xbb, 0xfe, 0xbf, 0x7b, 0xff, 0x0f,
- 0xd6, 0xfd, 0xff, 0xef, 0xff, 0x0f, 0xb5, 0xfa, 0x7f, 0x7d, 0xff, 0x0f,
- 0x55, 0x8e, 0xf3, 0xd7, 0xf7, 0x0e, 0x41, 0x0c, 0x61, 0x18, 0xc3, 0x08,
- 0x21, 0x1c, 0xf3, 0x9e, 0xc7, 0x0c, 0x27, 0x3a, 0xf0, 0x51, 0x0f, 0x0e,
- 0x8a, 0x7b, 0xb8, 0xe3, 0x1f, 0x0f, 0x0b, 0x7e, 0x7c, 0xaf, 0x1f, 0x0f,
- 0x06, 0x3b, 0xf8, 0xe1, 0x0e, 0x0e, 0x22, 0x1e, 0xf1, 0x9d, 0x4f, 0x0c,
- 0x21, 0x08, 0xa1, 0xa8, 0xc2, 0x08, 0x21, 0x08, 0x61, 0x1a, 0x43, 0x08,
- 0xdd, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x5b, 0xfd, 0xff, 0xeb, 0xff, 0x0f,
- 0x6a, 0xfb, 0xbf, 0xbf, 0xff, 0x0f, 0xdd, 0xfe, 0x7f, 0x7d, 0xff, 0x0f,
- 0xab, 0xfd, 0xff, 0xf7, 0xff, 0x0f, 0xba, 0xfa, 0xff, 0xbf, 0xff, 0x0f,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x01, 0x0c, 0x60, 0x80, 0x03, 0x0c,
- 0x01, 0x0e, 0x70, 0x80, 0x03, 0x0c, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f };
diff --git a/kscreensaver/kdesavers/vm.xpm b/kscreensaver/kdesavers/vm.xpm
deleted file mode 100644
index 8d00a5b3..00000000
--- a/kscreensaver/kdesavers/vm.xpm
+++ /dev/null
@@ -1,493 +0,0 @@
-/* XPM */
-static const char *vm[] = {
-/* columns rows colors chars-per-pixel */
-"44 374 113 2",
-" c #005e00",
-". c #003c63",
-"X c #003b00",
-"o c #00263e",
-"O c #00b3ed",
-"+ c #00c3ff",
-"@ c #007095",
-"# c #007ba0",
-"$ c #0086b9",
-"% c #0095cb",
-"& c #005474",
-"* c #005e80",
-"= c #006d00",
-"- c #008d00",
-"; c #004a74",
-": c #006997",
-"> c #004500",
-", c #005900",
-"< c #002f49",
-"1 c #00425f",
-"2 c #00ec00",
-"3 c #00dc00",
-"4 c #009400",
-"5 c #008a00",
-"6 c #009c00",
-"7 c #00cc00",
-"8 c #0077a8",
-"9 c #00a5dc",
-"0 c #006200",
-"q c #008000",
-"w c #004b6a",
-"e c #00688a",
-"r c #00bc00",
-"t c #007600",
-"y c #007d00",
-"u c #005985",
-"i c #004f00",
-"p c #003854",
-"a c #00ac00",
-"s c #006c00",
-"d c #5d5e00",
-"f c Gray0",
-"g c #3b3b00",
-"h c #6f7000",
-"j c #b7b700",
-"k c #c9c900",
-"l c #a5a600",
-"z c #939400",
-"x c Gray11",
-"c c #8d8d8d",
-"v c #aaaaaa",
-"b c #717171",
-"n c #555555",
-"m c #464600",
-"M c #737300",
-"N c #7e7e00",
-"B c #686800",
-"V c #5c5d00",
-"C c Gray7",
-"Z c Gray35",
-"A c Gray42",
-"S c Gray28",
-"D c Gray21",
-"F c Yellow",
-"G c Gray100",
-"H c #a0a000",
-"J c #a0a0a0",
-"K c #eded00",
-"L c #818200",
-"P c #e2e2e2",
-"I c Gray22",
-"U c #959500",
-"Y c #515200",
-"T c #8e8e8e",
-"R c #232323",
-"E c #dbdb00",
-"W c #c6c6c6",
-"Q c #8a8a00",
-"! c #7c7c7c",
-"~ c #2a2a2a",
-"^ c #6a6a6a",
-"/ c #808080",
-"( c Gray25",
-") c #1b1b1b",
-"_ c #434343",
-"` c #515151",
-"' c #282828",
-"] c #c0c0c0",
-"[ c #797979",
-"{ c #151515",
-"} c Gray5",
-"| c #959595",
-" . c Gray37",
-".. c #610000",
-"X. c #3d0000",
-"o. c #840000",
-"O. c #960000",
-"+. c #730000",
-"@. c #530000",
-"#. c #5e0000",
-"$. c #480000",
-"%. c #dc0000",
-"&. c Red",
-"*. c #ca0000",
-"=. c #8a0000",
-"-. c #a00000",
-";. c #7f0000",
-":. c #a70000",
-">. c #ed0000",
-",. c #690000",
-"<. c #950000",
-"1. c #b80000",
-"2. c #740000",
-/* pixels */
-" . . . . . . . . . . . X X X X X X X X X X X o o o o o o o o o o o ",
-" . . . . . . . . . . . X X X X X X X X X X X o o o o o o o o o o o ",
-" . . O + + + + + + . . X X X X X X X X X X X o o @ # # # # # # o o ",
-" . . $ % % % % % % . . X X X X X X X X X X X o o & * * * * * * o o ",
-" . . . . . . . . . . . X X X X X X X X X X X o o o o o o o o o o o ",
-" = - - . . . . ; : : . . . . X X X X > , , X X X X o o o o < 1 1 o o o o ",
-" - 2 2 2 3 = . . . : + + + O ; . . X X X , 4 4 4 5 > X X o o o 1 # # # @ < o o ",
-" = 2 3 - 6 2 7 . . ; + O : 8 + 9 . . X X > 4 5 , 0 4 q X X o o < # @ 1 w # e o o ",
-" 6 2 - r 2 = . . 8 + : . . % + ; . X X 0 4 , X X t 4 > X o o w # 1 o o * # < o ",
-" r 2 - 2 - . . % + . . . : + : . X X t 4 X X X , 4 , X o o * # o o o 1 # 1 o ",
-" r 2 - 2 - . . % + . . . : + : . X X t 4 X X X , 4 , X o o * # o o o 1 # 1 o ",
-" r 2 - 2 - . . % + . . . : + : . X X t 4 X X X , 4 , X o o * # o o o 1 # 1 o ",
-" r 2 - 2 - . . % + . . . : + : . X X t 4 X X X , 4 , X o o * # o o o 1 # 1 o ",
-" 6 2 - r 2 = . . 8 + : . . % + ; . X X 0 4 , X X t 4 > X o o w # 1 o o * # < o ",
-" = 2 3 - 6 2 7 . . ; + O : 8 + 9 . . X X > 4 5 , 0 4 q X X o o < # @ 1 w # e o o ",
-" - 2 2 2 3 = . . . : + + + O ; . . X X X , 4 4 4 5 > X X o o o 1 # # # @ < o o ",
-" = - - . . . . ; : : . . . . X X X X > , , X X X X o o o o < 1 1 o o o o ",
-" . . . . . . . . . . . X X X X X X X X X X X o o o o o o o o o o o ",
-" . . . . . . . . . . . X X X X X X X X X X X o o o o o o o o o o o ",
-" . . . . . . . . . . . X X X X X X X X X X X o o o o o o o o o o o ",
-" . . . . . . . . . . . X X X X X X X X X X X o o o o o o o o o o o ",
-" . . . . . . . . . . . X X X X X X X X X X X o o o o o o o o o o o ",
-" . . . . . . . . . . . X X X X X X X X X X X o o o o o o o o o o o ",
-" . . . . . . . . . . . X X X X X X X X X X X o o o o o o o o o o o ",
-" . . O + + + + + + . . X X X X X X X X X X X o o @ # # # # # # o o ",
-" . . $ % % % % % % . . X X X X X X X X X X X o o & * * * * * * o o ",
-" . . . . . . . . . . . X X X X X X X X X X X o o o o o o o o o o o ",
-" y . . . . . . u . . . . X X X X X X i X X X X o o o o o o p o o o o ",
-" = a r 2 2 . . ; $ % + + . . . . X X > s t 4 4 X X X X o o < & * # # o o o o ",
-" y 2 3 3 2 . . u + O O + . . . . X X i 4 5 5 4 X X X X o o p # @ @ # o o o o ",
-" r 2 . . . . . % + . . . . X X X X X t 4 X X X X o o o o o * # o o o o ",
-" r 2 . . . . . % + . . . . X X X X X t 4 X X X X o o o o o * # o o o o ",
-" r 2 . . . . . % + . . . . X X X X X t 4 X X X X o o o o o * # o o o o ",
-" r 2 . . . . . % + . . . . X X X X X t 4 X X X X o o o o o * # o o o o ",
-" r 2 . . . . . % + . . . . X X X X X t 4 X X X X o o o o o * # o o o o ",
-" r 2 . . . . . % + . . . . X X X X X t 4 X X X X o o o o o * # o o o o ",
-" = r r 3 2 r r - . . ; % % O + % % : . X X > t t 5 4 t t , X o o < * * @ # * * 1 o ",
-" y 2 2 2 2 2 2 a . . u + + + + + + $ . X X i 4 4 4 4 4 4 s X o o p # # # # # # & o ",
-" . . . . . . . . . . . X X X X X X X X X X X o o o o o o o o o o o ",
-" . . . . . . . . . . . X X X X X X X X X X X o o o o o o o o o o o ",
-" . . . . . . . . . . . X X X X X X X X X X X o o o o o o o o o o o ",
-" . . . . . . . . . . . X X X X X X X X X X X o o o o o o o o o o o ",
-" . . . . . . . . . . . X X X X X X X X X X X o o o o o o o o o o o ",
-" . . . . . . . . . . . X X X X X X X X X X X o o o o o o o o o o o ",
-" . . . . . . . . . . . X X X X X X X X X X X o o o o o o o o o o o ",
-" . . . . . . . . . . . X X X X X X X X X X X o o o o o o o o o o o ",
-" . . O + + + + + + . . X X X X X X X X X X X o o @ # # # # # # o o ",
-" . . $ % % % % % % . . X X X X X X X X X X X o o & * * * * * * o o ",
-" . . . . . . . . . . . X X X X X X X X X X X o o o o o o o o o o o ",
-" y - y . . . . u : u . . . . X X X X i , i X X X X o o o o p 1 p o o o o ",
-" = 7 2 2 2 7 = . . ; 9 + + + 9 ; . . X X > q 4 4 4 q > X X o o < e # # # e < o o ",
-" 7 2 a - a 2 7 . . 9 + $ : $ + 9 . . X X q 4 s , s 4 q X X o o e # & 1 & # e o o ",
-" 3 a r 2 . . O $ . . . % + . . X X 5 s X X X t 4 X X o o @ & o o o * # o o ",
-" = 3 3 . . . . . . ; O O . . X X X X X X > 5 5 X X o o o o o o < @ @ o o ",
-" = 3 2 - . . . . . ; O + : . . X X X X X > 5 4 , X X o o o o o < @ # 1 o o ",
-" = 3 2 a . . . . ; O + $ . . . X X X X > 5 4 s X X X o o o o < @ # & o o o ",
-" - 3 2 - . . . : O + : . . . . X X X , 5 4 , X X X X o o o 1 @ # 1 o o o o ",
-" - 2 3 y - a . . : + O u . : $ . . X X , 4 5 i X , s X X o o 1 # @ p o 1 & o o ",
-" - 2 2 7 r r 3 2 . : + + 9 % % O + . . X , 4 4 q t t 5 4 X X o 1 # # e * * @ # o o ",
-" - 2 2 2 2 2 2 2 . : + + + + + + + . . X , 4 4 4 4 4 4 4 X X o 1 # # # # # # # o o ",
-" . . . . . . . . . . . X X X X X X X X X X X o o o o o o o o o o o ",
-" . . . . . . . . . . . X X X X X X X X X X X o o o o o o o o o o o ",
-" . . . . . . . . . . . X X X X X X X X X X X o o o o o o o o o o o ",
-" . . . . . . . . . . . X X X X X X X X X X X o o o o o o o o o o o ",
-" . . . . . . . . . . . X X X X X X X X X X X o o o o o o o o o o o ",
-" . . . . . . . . . . . X X X X X X X X X X X o o o o o o o o o o o ",
-" . . . . . . . . . . . X X X X X X X X X X X o o o o o o o o o o o ",
-" . . . . . . . . . . . X X X X X X X X X X X o o o o o o o o o o o ",
-" . . O + + + + + + . . X X X X X X X X X X X o o @ # # # # # # o o ",
-" . . $ % % % % % % . . X X X X X X X X X X X o o & * * * * * * o o ",
-" . . . . . . . . . . . X X X X X X X X X X X o o o o o o o o o o o ",
-" y - - . . . . u : : . . . . X X X X i , , X X X X o o o o p 1 1 o o o o ",
-" = 3 2 2 2 3 = . . ; O + + + O ; . . X X > 5 4 4 4 5 > X X o o < @ # # # @ < o o ",
-" r 2 6 - 6 2 7 . . % + 8 : 8 + 9 . . X X t 4 0 , 0 4 q X X o o * # w 1 w # e o o ",
-" = y r 2 . . ; u . . . % + . . X X > i X X X t 4 X X o o < p o o o * # o o ",
-" = - 6 2 7 . . . . ; : 8 + 9 . . X X X X > , 0 4 q X X o o o o < 1 w # e o o ",
-" r 2 2 2 = . . . . % + + + ; . . X X X X t 4 4 4 > X X o o o o * # # # < o o ",
-" = - a 2 r . . . . ; : $ + % . . X X X X > , s 4 t X X o o o o < 1 & # * o o ",
-" 6 2 y . . . . . . . 8 + u . X X X X X X X 0 4 i X o o o o o o o w # p o ",
-" 6 2 - . . . . . . . 8 + : . X X X X X X X 0 4 , X o o o o o o o w # 1 o ",
-" a 6 - - a 2 2 = . . $ 8 : : $ + + ; . X X s 0 , , s 4 4 > X o o & w 1 1 & # # < o ",
-" 7 2 2 2 2 3 - . . 9 + + + + O : . . X X q 4 4 4 4 5 , X X o o e # # # # @ 1 o o ",
-" y - - y . . . u : : u . . . . X X X i , , i X X X X o o o p 1 1 p o o o o ",
-" . . . . . . . . . . . X X X X X X X X X X X o o o o o o o o o o o ",
-" . . . . . . . . . . . X X X X X X X X X X X o o o o o o o o o o o ",
-" . . . . . . . . . . . X X X X X X X X X X X o o o o o o o o o o o ",
-" . . . . . . . . . . . X X X X X X X X X X X o o o o o o o o o o o ",
-" . . . . . . . . . . . X X X X X X X X X X X o o o o o o o o o o o ",
-" . . . . . . . . . . . X X X X X X X X X X X o o o o o o o o o o o ",
-" . . . . . . . . . . . X X X X X X X X X X X o o o o o o o o o o o ",
-" . . O + + + + + + . . X X X X X X X X X X X o o @ # # # # # # o o ",
-" . . $ % % % % % % . . X X X X X X X X X X X o o & * * * * * * o o ",
-" . . . . . . . . . . . X X X X X X X X X X X o o o o o o o o o o o ",
-" . . . . . . . . . . . X X X X X X X X X X X o o o o o o o o o o o ",
-" 7 2 r . . . . . 9 + % . . . X X X X X q 4 t X X X o o o o o e # * o o o ",
-" - 2 2 r . . . . : + + % . . . X X X X , 4 4 t X X X o o o o 1 # # * o o o ",
-" 3 3 2 r . . . . O O + % . . . X X X X 5 5 4 t X X X o o o o @ @ # * o o o ",
-" a 2 - 2 r . . . $ + : + % . . . X X X s 4 , 4 t X X X o o o & # 1 # * o o o ",
-" = 2 7 2 r . . ; + 9 . + % . . . X X > 4 q X 4 t X X X o o < # e o # * o o o ",
-" 7 2 y 2 r . . 9 + u . + % . . . X X q 4 i X 4 t X X X o o e # p o # * o o o ",
-" y 2 3 r r 2 3 - . u + O % % + O : . . X i 4 5 t t 4 5 , X X o p # @ * * # @ 1 o o ",
-" - 2 2 2 2 2 2 a . : + + + + + + $ . . X , 4 4 4 4 4 4 s X X o 1 # # # # # # & o o ",
-" - r 2 3 - . . . . : % + O : . . X X X X , t 4 5 , X X o o o o 1 * # @ 1 o o ",
-" a 2 2 2 a . . . . $ + + + $ . . X X X X s 4 4 4 s X X o o o o & # # # & o o ",
-" . . . . . . . . . . . X X X X X X X X X X X o o o o o o o o o o o ",
-" . . . . . . . . . . . X X X X X X X X X X X o o o o o o o o o o o ",
-" . . . . . . . . . . . X X X X X X X X X X X o o o o o o o o o o o ",
-" . . . . . . . . . . . X X X X X X X X X X X o o o o o o o o o o o ",
-" . . . . . . . . . . . X X X X X X X X X X X o o o o o o o o o o o ",
-" . . . . . . . . . . . X X X X X X X X X X X o o o o o o o o o o o ",
-" . . . . . . . . . . . X X X X X X X X X X X o o o o o o o o o o o ",
-" . . . . . . . . . . . X X X X X X X X X X X o o o o o o o o o o o ",
-" . . O + + + + + + . . X X X X X X X X X X X o o @ # # # # # # o o ",
-" . . $ % % % % % % . . X X X X X X X X X X X o o & * * * * * * o o ",
-" . . . . . . . . . . . X X X X X X X X X X X o o o o o o o o o o o ",
-" . . . . . . . . . . . X X X X X X X X X X X o o o o o o o o o o o ",
-" - 2 2 2 2 2 a . . : + + + + + $ . . X X , 4 4 4 4 4 s X X o o 1 # # # # # & o o ",
-" - 2 7 r r r - . . : + 9 % % % : . . X X , 4 q t t t , X X o o 1 # e * * * 1 o o ",
-" - 2 - . . : + : . . . . . . X X , 4 , X X X X X X o o 1 # 1 o o o o o o ",
-" - 2 7 2 2 a . . : + 9 + + $ . . . X X , 4 q 4 4 s X X X o o 1 # e # # & o o o ",
-" - 2 3 r 7 2 r . . : + O % 9 + % . . X X , 4 5 t q 4 t X X o o 1 # @ * e # * o o ",
-" - r 2 y . . . : . . . % + u . X X X , X X X t 4 i X o o o 1 o o o * # p o ",
-" - 2 - . . . . . . . : + : . X X X X X X X , 4 , X o o o o o o o 1 # 1 o ",
-" 6 2 - . . . . . . . 8 + : . X X X X X X X 0 4 , X o o o o o o o w # 1 o ",
-" y 2 a - - a 2 3 . u + $ : : $ + O . . X i 4 s , , s 4 5 X X o p # & 1 1 & # @ o o ",
-" = 7 2 2 2 2 3 = . ; 9 + + + + O ; . . X > q 4 4 4 4 5 > X X o < e # # # # @ < o o ",
-" = - - y . . . ; : : u . . . . X X X > , , i X X X X o o o < 1 1 p o o o o ",
-" . . . . . . . . . . . X X X X X X X X X X X o o o o o o o o o o o ",
-" . . . . . . . . . . . X X X X X X X X X X X o o o o o o o o o o o ",
-" . . . . . . . . . . . X X X X X X X X X X X o o o o o o o o o o o ",
-" . . . . . . . . . . . X X X X X X X X X X X o o o o o o o o o o o ",
-" . . . . . . . . . . . X X X X X X X X X X X o o o o o o o o o o o ",
-" . . . . . . . . . . . X X X X X X X X X X X o o o o o o o o o o o ",
-" . . . . . . . . . . . X X X X X X X X X X X o o o o o o o o o o o ",
-" . . O + + + + + + . . X X X X X X X X X X X o o @ # # # # # # o o ",
-" . . $ % % % % % % . . X X X X X X X X X X X o o & * * * * * * o o ",
-" . . . . . . . . . . . X X X X X X X X X X X o o o o o o o o o o o ",
-" = - - . . . . . ; : : . . . X X X X X > , , X X X o o o o o < 1 1 o o o ",
-" = 7 2 2 2 a . . . ; 9 + + + $ . . X X X > q 4 4 4 s X X o o o < e # # # & o o ",
-" = 3 2 r - a - . . ; O + % : $ : . . X X > 5 4 t , s , X X o o < @ # * 1 & 1 o o ",
-" a 2 - . . $ + : . . . . . . X X s 4 , X X X X X X o o & # 1 o o o o o o ",
-" 2 a 6 r 6 . . + $ 8 % 8 . . . . X X 4 s 0 t 0 X X X X o o # & w * w o o o o ",
-" - 2 3 2 2 2 3 . : + O + + + O . . . X , 4 5 4 4 4 5 X X X o 1 # @ # # # @ o o o ",
-" - 2 2 6 a 2 6 . : + + 8 . $ + 8 . . X , 4 4 0 X s 4 0 X X o 1 # # w o & # w o o ",
-" - 2 7 2 r . : + 9 . . . + % . . X , 4 q X X X 4 t X X o 1 # e o o o # * o o ",
-" 2 3 = 2 r . . + O . . ; + % . . X X 4 5 X X > 4 t X X o o # @ o o < # * o o ",
-" r 2 r - r 2 y . . % + % : % + u . . X X t 4 t , t 4 i X X o o * # * 1 * # p o o ",
-" = 7 2 2 2 r . . ; 9 + + + % . . . X X > q 4 4 4 t X X X o o < e # # # * o o o ",
-" y - = . . . . u : ; . . . . X X X X i , > X X X X o o o o p 1 < o o o o ",
-" . . . . . . . . . . . X X X X X X X X X X X o o o o o o o o o o o ",
-" . . . . . . . . . . . X X X X X X X X X X X o o o o o o o o o o o ",
-" . . . . . . . . . . . X X X X X X X X X X X o o o o o o o o o o o ",
-" . . . . . . . . . . . X X X X X X X X X X X o o o o o o o o o o o ",
-" . . . . . . . . . . . X X X X X X X X X X X o o o o o o o o o o o ",
-" . . . . . . . . . . . X X X X X X X X X X X o o o o o o o o o o o ",
-" . . . . . . . . . . . X X X X X X X X X X X o o o o o o o o o o o ",
-" . . O + + + + + + . . X X X X X X X X X X X o o @ # # # # # # o o ",
-" . . $ % % % % % % . . X X X X X X X X X X X o o & * * * * * * o o ",
-" . . . . . . . . . . . X X X X X X X X X X X o o o o o o o o o o o ",
-" . . . . . . . . . . . X X X X X X X X X X X o o o o o o o o o o o ",
-" - 2 2 2 2 2 2 - . . : + + + + + + : . X X , 4 4 4 4 4 4 , X o o 1 # # # # # # 1 o ",
-" - 2 7 r r 7 2 . . : + 9 % % 9 + . . X X , 4 q t t q 4 X X o o 1 # e * * e # o o ",
-" = r = r 3 . . ; % ; . . % O . . X X > t > X X t 5 X X o o < * < o o * @ o o ",
-" 2 r . . . . . . . + % . . X X X X X X X 4 t X X o o o o o o o # * o o ",
-" - 2 - . . . . . . : + : . . X X X X X X , 4 , X X o o o o o o 1 # 1 o o ",
-" a 2 . . . . . . $ + . . . X X X X X X s 4 X X X o o o o o o & # o o o ",
-" 3 7 . . . . . . O 9 . . . X X X X X X 5 q X X X o o o o o o @ e o o o ",
-" y 2 6 . . . . . u + 8 . . . X X X X X i 4 0 X X X o o o o o p # w o o o ",
-" a 2 = . . . . . $ + ; . . . X X X X X s 4 > X X X o o o o o & # < o o o ",
-" a 3 . . . . . $ O . . . . X X X X X s 5 X X X X o o o o o & @ o o o o ",
-" . . . . . . . . . . . X X X X X X X X X X X o o o o o o o o o o o ",
-" . . . . . . . . . . . X X X X X X X X X X X o o o o o o o o o o o ",
-" . . . . . . . . . . . X X X X X X X X X X X o o o o o o o o o o o ",
-" . . . . . . . . . . . X X X X X X X X X X X o o o o o o o o o o o ",
-" . . . . . . . . . . . X X X X X X X X X X X o o o o o o o o o o o ",
-" . . . . . . . . . . . X X X X X X X X X X X o o o o o o o o o o o ",
-" . . . . . . . . . . . X X X X X X X X X X X o o o o o o o o o o o ",
-" . . . . . . . . . . . X X X X X X X X X X X o o o o o o o o o o o ",
-" . . O + + + + + + . . X X X X X X X X X X X o o @ # # # # # # o o ",
-" . . $ % % % % % % . . X X X X X X X X X X X o o & * * * * * * o o ",
-" . . . . . . . . . . . X X X X X X X X X X X o o o o o o o o o o o ",
-" y - y . . . . u : u . . . . X X X X i , i X X X X o o o o p 1 p o o o o ",
-" = 7 2 2 2 7 = . . ; 9 + + + 9 ; . . X X > q 4 4 4 q > X X o o < e # # # e < o o ",
-" 7 2 a - a 2 7 . . 9 + $ : $ + 9 . . X X q 4 s , s 4 q X X o o e # & 1 & # e o o ",
-" 2 r r 2 . . + % . . . % + . . X X 4 t X X X t 4 X X o o # * o o o * # o o ",
-" 7 3 y y 3 7 . . 9 O u . u O 9 . . X X q 5 i X i 5 q X X o o e @ p o p @ e o o ",
-" = 7 2 2 2 7 = . . ; 9 + + + 9 ; . . X X > q 4 4 4 q > X X o o < e # # # e < o o ",
-" = 3 3 r 3 3 = . . ; O O % O O ; . . X X > 5 5 t 5 5 > X X o o < @ @ * @ @ < o o ",
-" 3 3 3 7 . . O O . . . O 9 . . X X 5 5 X X X 5 q X X o o @ @ o o o @ e o o ",
-" 2 r r 2 . . + % . . . % + . . X X 4 t X X X t 4 X X o o # * o o o * # o o ",
-" 7 2 a - a 2 7 . . 9 + $ : $ + 9 . . X X q 4 s , s 4 q X X o o e # & 1 & # e o o ",
-" = 3 2 2 2 3 = . . ; O + + + O ; . . X X > 5 4 4 4 5 > X X o o < @ # # # @ < o o ",
-" y - y . . . . u : u . . . . X X X X i , i X X X X o o o o p 1 p o o o o ",
-" . . . . . . . . . . . X X X X X X X X X X X o o o o o o o o o o o ",
-" . . . . . . . . . . . X X X X X X X X X X X o o o o o o o o o o o ",
-" . . . . . . . . . . . X X X X X X X X X X X o o o o o o o o o o o ",
-" . . . . . . . . . . . X X X X X X X X X X X o o o o o o o o o o o ",
-" . . . . . . . . . . . X X X X X X X X X X X o o o o o o o o o o o ",
-" . . . . . . . . . . . X X X X X X X X X X X o o o o o o o o o o o ",
-" . . . . . . . . . . . X X X X X X X X X X X o o o o o o o o o o o ",
-" . . O + + + + + + . . X X X X X X X X X X X o o @ # # # # # # o o ",
-" . . $ % % % % % % . . X X X X X X X X X X X o o & * * * * * * o o ",
-" . . . . . . . . . . . X X X X X X X X X X X o o o o o o o o o o o ",
-" = - - . . . ; : : . . . . . X X X > , , X X X X X o o o < 1 1 o o o o o ",
-" - 2 2 2 3 - . . : + + + O : . . . X X , 4 4 4 5 , X X X o o 1 # # # @ 1 o o o ",
-" 2 3 - 6 2 3 = . . + O : 8 + O ; . . X X 4 5 , 0 4 5 > X X o o # @ 1 w # @ < o o ",
-" - 2 - a 2 - . : + : . . $ + : . . X , 4 , X X s 4 , X X o 1 # 1 o o & # 1 o o ",
-" - 2 6 6 2 r . : + 8 . . 8 + % . . X , 4 0 X X 0 4 t X X o 1 # w o o w # * o o ",
-" 3 3 - a 2 2 r . . O O : $ + + % . . X X 5 5 , s 4 4 t X X o o @ @ 1 & # # * o o ",
-" - 2 2 2 r 2 r . . : + + + % + % . . X X , 4 4 4 t 4 t X X o o 1 # # # * # * o o ",
-" = - y 6 2 - . . . ; : u 8 + : . . X X X > , i 0 4 , X X o o o < 1 p w # 1 o o ",
-" = 3 3 . . . . . ; O O . . . X X X X X > 5 5 X X X o o o o o < @ @ o o o ",
-" = r - a 2 2 - . ; % : $ + + : . . . X > t , s 4 4 , X X X o < * 1 & # # 1 o o o ",
-" y 2 2 2 3 - . u + + + O : . . . . X i 4 4 4 5 , X X X X o p # # # @ 1 o o o o ",
-" = - y . . ; : u . . . . . . X X > , i X X X X X X o o < 1 p o o o o o o ",
-" . . . . . . . . . . . X X X X X X X X X X X o o o o o o o o o o o ",
-" . . . . . . . . . . . X X X X X X X X X X X o o o o o o o o o o o ",
-" . . . . . . . . . . . X X X X X X X X X X X o o o o o o o o o o o ",
-" . . . . . . . . . . . X X X X X X X X X X X o o o o o o o o o o o ",
-" . . . . . . . . . . . X X X X X X X X X X X o o o o o o o o o o o ",
-" . . . . . . . . . . . X X X X X X X X X X X o o o o o o o o o o o ",
-" . . . . . . . . . . . X X X X X X X X X X X o o o o o o o o o o o ",
-" . . . . . . . . . . . X X X X X X X X X X X o o o o o o o o o o o ",
-" . . O + + + + + + . . X X X X X X X X X X X o o @ # # # # # # o o ",
-" . . $ % % % % % % . . X X X X X X X X X X X o o & * * * * * * o o ",
-" . . . . . . . . . . . X X X X X X X X X X X o o o o o o o o o o o ",
-" = - - - - . . ; : : : : . . . . X X > , , , , X X X X o o < 1 1 1 1 o o o o ",
-" 6 2 2 2 2 - . . 8 + + + + : . . . X X 0 4 4 4 4 , X X X o o w # # # # 1 o o o ",
-" = - 7 2 2 7 . . ; : 9 + + 9 . . . X X > , q 4 4 q X X X o o < 1 e # # e o o o ",
-" 3 3 7 2 = . . . . O O 9 + ; . . X X X X 5 5 q 4 > X X o o o o @ @ e # < o o ",
-" - 2 6 y 2 a . . . : + 8 u + $ . . X X X , 4 0 i 4 s X X o o o 1 # w p # & o o ",
-" 7 2 3 2 . . . 9 + . . O + . . X X X q 4 X X 5 4 X X o o o e # o o @ # o o ",
-" y 2 2 2 2 2 2 6 . . u + + + + + + 8 . X X i 4 4 4 4 4 4 0 X o o p # # # # # # w o ",
-" a 2 r r r r 2 7 . . $ + % % % % + 9 . X X s 4 t t t t 4 q X o o & # * * * * # e o ",
-" a 2 2 r = a 3 2 r . $ + + % ; . $ O + % X s 4 4 t > X s 5 4 t o & # # * < o & @ # * ",
-" 3 2 2 2 y 3 2 2 2 . O + + + u . O + + + X 5 4 4 4 i X 5 4 4 4 o @ # # # p o @ # # # ",
-" . . . . . . . . . . . X X X X X X X X X X X o o o o o o o o o o o ",
-" . . . . . . . . . . . X X X X X X X X X X X o o o o o o o o o o o ",
-" . . . . . . . . . . . X X X X X X X X X X X o o o o o o o o o o o ",
-" . . . . . . . . . . . X X X X X X X X X X X o o o o o o o o o o o ",
-" . . . . . . . . . . . X X X X X X X X X X X o o o o o o o o o o o ",
-" . . . . . . . . . . . X X X X X X X X X X X o o o o o o o o o o o ",
-" . . . . . . . . . . . X X X X X X X X X X X o o o o o o o o o o o ",
-" . . . . . . . . . . . X X X X X X X X X X X o o o o o o o o o o o ",
-" . . . . . . . . . . . X X X X X X X X X X X o o o o o o o o o o o ",
-" . . O + + + + + + . . X X X X X X X X X X X o o @ # # # # # # o o ",
-" . . $ % % % % % % . . X X X X X X X X X X X o o & * * * * * * o o ",
-" . . . . . . . . . . . X X X X X X X X X X X o o o o o o o o o o o ",
-" y - - - - - . . u : : : : : . . . X X i , , , , , X X X o o p 1 1 1 1 1 o o o ",
-" 2 2 2 2 2 2 3 - . . + + + + + + O : . X X 4 4 4 4 4 4 5 , X o o # # # # # # @ 1 o ",
-" y 2 7 - - 6 2 3 . . u + 9 : : 8 + O . X X i 4 q , , 0 4 5 X o o p # e 1 1 w # @ o ",
-" 2 r r 2 . . . + % . . . % + . X X X 4 t X X X t 4 X o o o # * o o o * # o ",
-" 2 7 - - a 2 a . . . + 9 : : $ + $ . X X X 4 q , , s 4 s X o o o # e 1 1 & # & o ",
-" 2 2 2 2 2 2 a . . . + + + + + + $ . X X X 4 4 4 4 4 4 s X o o o # # # # # # & o ",
-" 2 7 - - - 7 2 6 . . . + 9 : : : 9 + 8 X X X 4 q , , , q 4 0 o o o # e 1 1 1 e # w ",
-" 2 r 2 r . . . + % . . . . + % X X X 4 t X X X X 4 t o o o # * o o o o # * ",
-" a 2 3 r r r 7 2 6 . . $ + O % % % 9 + 8 X X s 4 5 t t t q 4 0 o o & # @ * * * e # w ",
-" 3 2 2 2 2 2 3 a . . O + + + + + O $ . X X 5 4 4 4 4 4 5 s X o o @ # # # # # @ & o ",
-" . . . . . . . . . . . X X X X X X X X X X X o o o o o o o o o o o ",
-" . . . . . . . . . . . X X X X X X X X X X X o o o o o o o o o o o ",
-" . . . . . . . . . . . X X X X X X X X X X X o o o o o o o o o o o ",
-" . . . . . . . . . . . X X X X X X X X X X X o o o o o o o o o o o ",
-" . . . . . . . . . . . X X X X X X X X X X X o o o o o o o o o o o ",
-" . . . . . . . . . . . X X X X X X X X X X X o o o o o o o o o o o ",
-"d d d d d d d d d d d f f f f f f f f f f f g g g g g g g g g g g f f f f f f f f f f f ",
-"d d d d d d d d d d d f f f f f f f f f f f g g g g g g g g g g g f f f f f f f f f f f ",
-"d d d d d d d d d d d f f f f f f f f f f f g g g g g g g g g g g f f f f f f f f f f f ",
-"d d d d d d d d d d d f f f f f f f f f f f g g g g g g g g g g g f f f f f f f f f f f ",
-"d d d d d d d d d d d f f f f f f f f f f f g g g g g g g g g g g f f f f f f f f f f f ",
-"d d d d d d d d d d d f f f f f f f f f f f g g g g g g g g g g g f f f f f f f f f f f ",
-"d d d h j k k l z h d f f f x c v v b n x f g g g m M N N B V m g f f f C Z A A S D C f ",
-"d d z F F F F F F k d f f n G G G G G G v f g g V H H H H H H N g f f D J J J J J J A f ",
-"d h F K L d h j F k d f x G P I f x c G v f g m H U Y g m M H N g f C J T R f C Z J A f ",
-"d l F l d d d d E j d f b G b f f f f W c f g B H B g g g g Q M g f S J S f f f f ! Z f ",
-"d k F d d d d d d d d f v G f f f f f f f f g N H g g g g g g g g f A J f f f f f f f f ",
-"d k F d d d d d d d d f v G f f f f f f f f g N H g g g g g g g g f A J f f f f f f f f ",
-"d k F d d d d d d d d f v G f f f f f f f f g N H g g g g g g g g f A J f f f f f f f f ",
-"d l F l d d d d h L d f b G b f f f f x I f g B H B g g g g m Y g f S J S f f f f C R f ",
-"d d K F E z z l K F d f f P G W n n b P G f g g U H Q V V B U H g f f T J ! D D S T J f ",
-"d d h k F F F F K z d f f x v G G G G P n f g g m N H H H H U V g f f C A J J J J T D f ",
-"d d d d h z z L d d d f f f f x n n I f f f g g g g m V V Y g g g f f f f C D D R f f f ",
-"d d d d d d d d d d d f f f f f f f f f f f g g g g g g g g g g g f f f f f f f f f f f ",
-"d d d d d d d d d d d f f f f f f f f f f f g g g g g g g g g g g f f f f f f f f f f f ",
-"d d d d d d d d d d d f f f f f f f f f f f g g g g g g g g g g g f f f f f f f f f f f ",
-"d d d d d d d d d d d f f f f f f f f f f f g g g g g g g g g g g f f f f f f f f f f f ",
-"d d d d d d d d d d d f f f f f f f f f f f g g g g g g g g g g g f f f f f f f f f f f ",
-"f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f ",
-"f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f ",
-"f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f ",
-"f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f ",
-"f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f ",
-"f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f ",
-"f f n n n n n x f f f f f n n n n n x f f f f f D D D D D C f f f f f D D D D D C f f f ",
-"f n G G G G G G v f f f n G G G G G G v f f f D J J J J J J A f f f D J J J J J J A f f ",
-"f f c G c n n W G b f f f c G c n n W G b f f f Z J Z D D ! J S f f f Z J Z D D ! J S f ",
-"f f n G n f f f G v f f f n G n f f f G v f f f D J D f f f J A f f f D J D f f f J A f ",
-"f f n G n f f x G v f f f n G n f f x G v f f f D J D f f C J A f f f D J D f f C J A f ",
-"f f n G W v v G G I f f f n G W v v G G I f f f D J ! A A J J R f f f D J ! A A J J R f ",
-"f f n G G G G W I f f f f n G G G G W I f f f f D J J J J ! R f f f f D J J J J ! R f f ",
-"f f n G n f f f f f f f f n G n f f f f f f f f D J D f f f f f f f f D J D f f f f f f ",
-"f x W G W v c f f f f f x W G W v c f f f f f C ! J ! A Z f f f f f C ! J ! A Z f f f f ",
-"f I G G G G P f f f f f I G G G G P f f f f f R J J J J T f f f f f R J J J J T f f f f ",
-"f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f ",
-"f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f ",
-"f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f ",
-"f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f ",
-"f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f ",
-"f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f ",
-"f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f ",
-"f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f ",
-"f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f ",
-"f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f ",
-"f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f ",
-"f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f ",
-"f f f ~ ^ / / ( ~ f f f f f I c v v n I f f f f f ) _ ` ` ' ) f f f f f R Z A A D R f f ",
-"f f ( ] ] ] ] ] ] f f f f n G G G G G G f f f f ' [ [ [ [ [ [ f f f f D J J J J J J f f ",
-"f f v v ~ f { v ] f f f f P P I f x P G f f f f A A ) f } A [ f f f f T T R f C T J f f ",
-"f f ] | f f f ( ^ f f f f G W f f f n c f f f f [ .f f f ' _ f f f f J ! f f f D Z f f ",
-"f f | ] | ^ ( f f f f f f W G W c n f f f f f f .[ ._ ' f f f f f f ! J ! Z D f f f f ",
-"f f f ^ v ] ] ] ^ f f f f f c P G G G c f f f f f _ A [ [ [ _ f f f f f Z T J J J Z f f ",
-"f f f f f ~ n v ] ~ f f f f f f I b P G I f f f f f f ) D A [ ) f f f f f f R S T J R f ",
-"f ~ ] ~ f f f ( ] ( f f I G I f f f n G n f f ) [ ) f f f ' [ ' f f R J R f f f D J D f ",
-"f ( ] v n ( n v ] { f f n G P b n b P G x f f ' [ A D ' D A [ } f f D J T S D S T J C f ",
-"f ~ ] v ] ] ] ] ( f f f I G P G G G G n f f f ) [ A [ [ [ [ ' f f f R J T J J J J D f f ",
-"f f f f ~ ( ( f f f f f f f f I n n f f f f f f f f ) ' ' f f f f f f f f R D D f f f f ",
-"f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f ",
-"f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f ",
-"f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f ",
-"f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f ",
-"f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f ",
-"......................f f f f f f f f f f f X.X.X.X.X.X.X.X.X.X.X.f f f f f f f f f f f ",
-"......................f f f f f f f f f f f X.X.X.X.X.X.X.X.X.X.X.f f f f f f f f f f f ",
-"......................f f f f f f f f f f f X.X.X.X.X.X.X.X.X.X.X.f f f f f f f f f f f ",
-"......................f f f f f f f f f f f X.X.X.X.X.X.X.X.X.X.X.f f f f f f f f f f f ",
-"......................f f f f f f f f f f f X.X.X.X.X.X.X.X.X.X.X.f f f f f f f f f f f ",
-"......................f f f f f f f f f f f X.X.X.X.X.X.X.X.X.X.X.f f f f f f f f f f f ",
-"..o.O.O.+...+.O.O.o...f I n n x f x n n I f X.@.#.#.$.X.$.#.#[email protected] R D D C f C D D R f ",
-"..%.&.&.*...O.&.&.&...f W G G v f n G G G f X.=.-.-.;.X.#.-.-.-.X.f ! J J A f D J J J f ",
-"..o.%.&.:...+.&.>.o...f I W G b f x G P I f X.@.=.-.,.X.$.-.<[email protected] R ! J S f C J T R f ",
-"....+.>.&.:.>.&.o.....f f x P G b P G I f f X.X.$.<.-.,.<[email protected] f C T J S T J R f f ",
-"......+.>.&.&.O.......f f f x P G G n f f f X.X.X.$.<.-.-.#.X.X.X.f f f C T J J D f f f ",
-"........*.&.>.+.......f f f f v G P x f f f X.X.X.X.;.-.<.$.X.X.X.f f f f A J T C f f f ",
-"......*.&.%.&.%.......f f f v G W G W f f f X.X.X.;.-.=.-.=.X.X.X.f f f A J ! J ! f f f ",
-"....O.&.*...:.&.*.....f f n G v f b G v f f X.X.#.-.;.X.,.-.;.X.X.f f D J A f S J A f f ",
-"..1.&.&.*...O.&.&.%.+.f c G G v f n G G W x X.2.-.-.;.X.#.-.-.=.$.f Z J J A f D J J ! C ",
-"..>.&.&.>...1.&.&.&.o.f P G G P f c G G G I X.<.-.-.<[email protected] T J J T f Z J J J R ",
-"......................f f f f f f f f f f f X.X.X.X.X.X.X.X.X.X.X.f f f f f f f f f f f ",
-"......................f f f f f f f f f f f X.X.X.X.X.X.X.X.X.X.X.f f f f f f f f f f f ",
-"......................f f f f f f f f f f f X.X.X.X.X.X.X.X.X.X.X.f f f f f f f f f f f ",
-"......................f f f f f f f f f f f X.X.X.X.X.X.X.X.X.X.X.f f f f f f f f f f f ",
-"......................f f f f f f f f f f f X.X.X.X.X.X.X.X.X.X.X.f f f f f f f f f f f ",
-"......................f f f f f f f f f f f X.X.X.X.X.X.X.X.X.X.X.f f f f f f f f f f f ",
-"f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f ",
-"f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f ",
-"f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f ",
-"f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f ",
-"f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f ",
-"f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f ",
-"f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f ",
-"f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f ",
-"f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f ",
-"f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f ",
-"f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f ",
-"f P G G G G G G G I f f P G G G G G G G I f f T J J J J J J J R f f T J J J J J J J R f ",
-"f c v v v v v v v x f f c v v v v v v v x f f Z A A A A A A A C f f Z A A A A A A A C f ",
-"f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f ",
-"f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f ",
-"f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f ",
-"f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f ",
-"f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f ",
-"f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f ",
-"f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f ",
-"f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f ",
-"f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f "
-};
diff --git a/kscreensaver/kdesavers/vm_random.c b/kscreensaver/kdesavers/vm_random.c
deleted file mode 100644
index ea0cd96a..00000000
--- a/kscreensaver/kdesavers/vm_random.c
+++ /dev/null
@@ -1,379 +0,0 @@
-/*
- * Copyright (c) 1983 Regents of the University of California.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms are permitted
- * provided that the above copyright notice and this paragraph are
- * duplicated in all such forms and that any documentation,
- * advertising materials, and other materials related to such
- * distribution and use acknowledge that the software was developed
- * by the University of California, Berkeley. The name of the
- * University may not be used to endorse or promote products derived
- * from this software without specific prior written permission.
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
- * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
- */
-
-/*
- * Please note that as of July 22, 1999, the licensees and distributors
- * are no longer required to include the above mentioned acknowledgement
- * within advertising materials. For full details see
- * ftp://ftp.cs.berkeley.edu/pub/4bsd/README.Impt.License.Change
- */
-
-/*
- * This is derived from the Berkeley source:
- * @(#)random.c 5.5 (Berkeley) 7/6/88
- * It was reworked for the GNU C Library by Roland McGrath.
- * Rewritten to be reentrant by Ulrich Drepper, 1995
- */
-
-#include <limits.h>
-#include <stdlib.h>
-#include "vm_random.h"
-
-/* An improved random number generation package. In addition to the standard
- rand()/srand() like interface, this package also has a special state info
- interface. The initstate() routine is called with a seed, an array of
- bytes, and a count of how many bytes are being passed in; this array is
- then initialized to contain information for random number generation with
- that much state information. Good sizes for the amount of state
- information are 32, 64, 128, and 256 bytes. The state can be switched by
- calling the setstate() function with the same array as was initialized
- with initstate(). By default, the package runs with 128 bytes of state
- information and generates far better random numbers than a linear
- congruential generator. If the amount of state information is less than
- 32 bytes, a simple linear congruential R.N.G. is used. Internally, the
- state information is treated as an array of longs; the zeroth element of
- the array is the type of R.N.G. being used (small integer); the remainder
- of the array is the state information for the R.N.G. Thus, 32 bytes of
- state information will give 7 longs worth of state information, which will
- allow a degree seven polynomial. (Note: The zeroth word of state
- information also has some other information stored in it; see setstate
- for details). The random number generation technique is a linear feedback
- shift register approach, employing trinomials (since there are fewer terms
- to sum up that way). In this approach, the least significant bit of all
- the numbers in the state table will act as a linear feedback shift register,
- and will have period 2^deg - 1 (where deg is the degree of the polynomial
- being used, assuming that the polynomial is irreducible and primitive).
- The higher order bits will have longer periods, since their values are
- also influenced by pseudo-random carries out of the lower bits. The
- total period of the generator is approximately deg*(2**deg - 1); thus
- doubling the amount of state information has a vast influence on the
- period of the generator. Note: The deg*(2**deg - 1) is an approximation
- only good for large deg, when the period of the shift register is the
- dominant factor. With deg equal to seven, the period is actually much
- longer than the 7*(2**7 - 1) predicted by this formula. */
-
-
-
-/* For each of the currently supported random number generators, we have a
- break value on the amount of state information (you need at least this many
- bytes of state info to support this random number generator), a degree for
- the polynomial (actually a trinomial) that the R.N.G. is based on, and
- separation between the two lower order coefficients of the trinomial. */
-
-/* Linear congruential. */
-#define TYPE_0 0
-#define BREAK_0 8
-#define DEG_0 0
-#define SEP_0 0
-
-/* x**7 + x**3 + 1. */
-#define TYPE_1 1
-#define BREAK_1 32
-#define DEG_1 7
-#define SEP_1 3
-
-/* x**15 + x + 1. */
-#define TYPE_2 2
-#define BREAK_2 64
-#define DEG_2 15
-#define SEP_2 1
-
-/* x**31 + x**3 + 1. */
-#define TYPE_3 3
-#define BREAK_3 128
-#define DEG_3 31
-#define SEP_3 3
-
-/* x**63 + x + 1. */
-#define TYPE_4 4
-#define BREAK_4 256
-#define DEG_4 63
-#define SEP_4 1
-
-
-/* Array versions of the above information to make code run faster.
- Relies on fact that TYPE_i == i. */
-
-#define MAX_TYPES 5 /* Max number of types above. */
-
-struct vm_random_poly_info
-{
- int seps[MAX_TYPES];
- int degrees[MAX_TYPES];
-};
-
-static struct vm_random_poly_info vm_random_poly_info =
-{
- { SEP_0, SEP_1, SEP_2, SEP_3, SEP_4 },
- { DEG_0, DEG_1, DEG_2, DEG_3, DEG_4 }
-};
-
-static int32_t vm_randtbl[DEG_3 + 1] =
- {
- TYPE_3,
-
- -1726662223, 379960547, 1735697613, 1040273694, 1313901226,
- 1627687941, -179304937, -2073333483, 1780058412, -1989503057,
- -615974602, 344556628, 939512070, -1249116260, 1507946756,
- -812545463, 154635395, 1388815473, -1926676823, 525320961,
- -1009028674, 968117788, -123449607, 1284210865, 435012392,
- -2017506339, -911064859, -370259173, 1132637927, 1398500161,
- -205601318,
- };
-
-/* Initialize the random number generator based on the given seed. If the
- type is the trivial no-state-information type, just remember the seed.
- Otherwise, initializes state[] based on the given "seed" via a linear
- congruential generator. Then, the pointers are set to known locations
- that are exactly rand_sep places apart. Lastly, it cycles the state
- information a given number of times to get rid of any initial dependencies
- introduced by the L.C.R.N.G. Note that the initialization of randtbl[]
- for default usage relies on values produced by this routine. */
-int vm_srandom (unsigned int seed,
- struct vm_random_data* buf)
-{
- int type;
- int32_t *state;
- long int i;
- long int word;
- int32_t *dst;
- int kc;
-
- if (buf == NULL)
- goto fail;
- type = buf->vm_rand_type;
- if ((unsigned int) type >= MAX_TYPES)
- goto fail;
-
- state = buf->state;
- /* We must make sure the seed is not 0. Take arbitrarily 1 in this case. */
- if (seed == 0)
- seed = 1;
- state[0] = seed;
- if (type == TYPE_0)
- goto done;
-
- dst = state;
- word = seed;
- kc = buf->vm_rand_deg;
- for (i = 1; i < kc; ++i)
- {
- /* This does:
- state[i] = (16807 * state[i - 1]) % 2147483647;
- but avoids overflowing 31 bits. */
- long int hi = word / 127773;
- long int lo = word % 127773;
- word = 16807 * lo - 2836 * hi;
- if (word < 0)
- word += 2147483647;
- *++dst = word;
- }
-
- buf->fptr = &state[buf->vm_rand_sep];
- buf->rptr = &state[0];
- kc *= 10;
- while (--kc >= 0)
- {
- vm_random (buf);
- }
-
- done:
- return 0;
-
- fail:
- return -1;
-}
-
-/* Initialize the state information in the given array of N bytes for
- future random number generation. Based on the number of bytes we
- are given, and the break values for the different R.N.G.'s, we choose
- the best (largest) one we can and set things up for it. srandom is
- then called to initialize the state information. Note that on return
- from srandom, we set state[-1] to be the type multiplexed with the current
- value of the rear pointer; this is so successive calls to initstate won't
- lose this information and will be able to restart with setstate.
- Note: The first thing we do is save the current state, if any, just like
- setstate so that it doesn't matter when initstate is called.
- Returns a pointer to the old state. */
-int vm_initstate (unsigned int seed,
- void* arg_state,
- size_t n,
- struct vm_random_data* buf)
-{
- int type;
- int degree;
- int separation;
- int32_t *state;
-
- if (buf == NULL)
- goto fail;
-
- if (n >= BREAK_3)
- type = n < BREAK_4 ? TYPE_3 : TYPE_4;
- else if (n < BREAK_1)
- {
- if (n < BREAK_0)
- {
- goto fail;
- }
- type = TYPE_0;
- }
- else
- type = n < BREAK_2 ? TYPE_1 : TYPE_2;
-
- degree = vm_random_poly_info.degrees[type];
- separation = vm_random_poly_info.seps[type];
-
- buf->vm_rand_type = type;
- buf->vm_rand_sep = separation;
- buf->vm_rand_deg = degree;
- state = &((int32_t *) arg_state)[1]; /* First location. */
- /* Must set END_PTR before srandom. */
- buf->end_ptr = &state[degree];
-
- buf->state = state;
-
- vm_srandom (seed, buf);
-
- state[-1] = TYPE_0;
- if (type != TYPE_0)
- state[-1] = (buf->rptr - state) * MAX_TYPES + type;
-
- return 0;
-
- fail:
- return -1;
-}
-
-/* Restore the state from the given state array.
- Note: It is important that we also remember the locations of the pointers
- in the current state information, and restore the locations of the pointers
- from the old state information. This is done by multiplexing the pointer
- location into the zeroth word of the state information. Note that due
- to the order in which things are done, it is OK to call setstate with the
- same state as the current state
- Returns a pointer to the old state information. */
-int vm_setstate (void* arg_state,
- struct vm_random_data* buf)
-{
- int32_t *new_state = (int32_t *) arg_state;
- int type;
- int old_type;
- int32_t *old_state;
- int degree;
- int separation;
-
- if (buf == NULL)
- goto fail;
-
- old_type = buf->vm_rand_type;
- old_state = buf->state;
- if (old_type == TYPE_0)
- old_state[-1] = TYPE_0;
- else
- old_state[-1] = (MAX_TYPES * (buf->rptr - old_state)) + old_type;
-
- type = new_state[0] % MAX_TYPES;
- if (type < TYPE_0 || type >= TYPE_4)
- goto fail;
-
- buf->vm_rand_deg = degree = vm_random_poly_info.degrees[type];
- buf->vm_rand_sep = separation = vm_random_poly_info.seps[type];
- buf->vm_rand_type = type;
-
- if (type != TYPE_0)
- {
- int rear = new_state[0] / MAX_TYPES;
- buf->rptr = &new_state[rear];
- buf->fptr = &new_state[(rear + separation) % degree];
- }
- buf->state = &new_state[1];
- /* Set end_ptr too. */
- buf->end_ptr = &new_state[degree];
-
- return 0;
-
- fail:
- return -1;
-}
-
-/* If we are using the trivial TYPE_0 R.N.G., just do the old linear
- congruential bit. Otherwise, we do our fancy trinomial stuff, which is the
- same in all the other cases due to all the global variables that have been
- set up. The basic operation is to add the number at the rear pointer into
- the one at the front pointer. Then both pointers are advanced to the next
- location cyclically in the table. The value returned is the sum generated,
- reduced to 31 bits by throwing away the "least random" low bit.
- Note: The code takes advantage of the fact that both the front and
- rear pointers can't wrap on the same call by not testing the rear
- pointer if the front one has wrapped. Returns a 31-bit random number. */
-
-int32_t vm_random (struct vm_random_data* buf)
-{
- int32_t *state;
- int32_t result;
-
- if (buf == NULL)
- goto fail;
-
- state = buf->state;
-
- if (buf->vm_rand_type == TYPE_0)
- {
- int32_t val = state[0];
- val = ((state[0] * 1103515245) + 12345) & 0x7fffffff;
- state[0] = val;
- result = val;
- }
- else
- {
- int32_t *fptr = buf->fptr;
- int32_t *rptr = buf->rptr;
- int32_t *end_ptr = buf->end_ptr;
- int32_t val;
-
- val = *fptr += *rptr;
- /* Chucking least random bit. */
- result = (val >> 1) & 0x7fffffff;
- ++fptr;
- if (fptr >= end_ptr)
- {
- fptr = state;
- ++rptr;
- }
- else
- {
- ++rptr;
- if (rptr >= end_ptr)
- rptr = state;
- }
- buf->fptr = fptr;
- buf->rptr = rptr;
- }
- return result;
-
- fail:
- return -1;
-}
-
-void vm_default_initstate( int seed,
- struct vm_random_data* buf ) {
- vm_initstate( seed,
- vm_randtbl,
- 128,
- buf );
-}
diff --git a/kscreensaver/kdesavers/vm_random.h b/kscreensaver/kdesavers/vm_random.h
deleted file mode 100644
index 1aa5e937..00000000
--- a/kscreensaver/kdesavers/vm_random.h
+++ /dev/null
@@ -1,31 +0,0 @@
-#ifndef __VM_RANDOM_H__
-#define __VM_RANDOM_H__
-
-#define VM_RAND_MAX 2147483647
-
-#define int32_t int
-
-struct vm_random_data
-{
- int32_t *fptr; /* Front pointer. */
- int32_t *rptr; /* Rear pointer. */
- int32_t *state; /* Array of state values. */
- int vm_rand_type; /* Type of random number generator. */
- int vm_rand_deg; /* Degree of random number generator. */
- int vm_rand_sep; /* Distance between front and rear. */
- int32_t *end_ptr; /* Pointer behind state table. */
-};
-
-int vm_initstate (unsigned int seed,
- void* arg_state,
- size_t n,
- struct vm_random_data* buf);
-int vm_setstate (void* arg_state,
- struct vm_random_data* buf);
-void vm_default_initstate( int seed,
- struct vm_random_data* buf );
-int vm_srandom (unsigned int seed,
- struct vm_random_data* buf);
-int32_t vm_random (struct vm_random_data* buf);
-
-#endif /* !defined( __VM_RANDOM_H__ ) */
diff --git a/kscreensaver/kdesavers/wave.cpp b/kscreensaver/kdesavers/wave.cpp
deleted file mode 100644
index f2f03544..00000000
--- a/kscreensaver/kdesavers/wave.cpp
+++ /dev/null
@@ -1,324 +0,0 @@
-//-----------------------------------------------------------------------------
-//
-// kwave - Waveing Flag Screen Saver for KDE 2
-//
-// Copyright (c) Ian Reinhart Geiser 2001
-//
-#include <stdlib.h>
-#include <tqlabel.h>
-#include <tqlayout.h>
-#include <kapplication.h>
-#include <klocale.h>
-#include <kconfig.h>
-#include <kcolordialog.h>
-#include <kbuttonbox.h>
-#include <kcolorbutton.h>
-#include <kglobal.h>
-#include "wave.h"
-#include "wave.moc"
-#ifdef TQ_WS_MACX
-#include <OpenGL/glu.h>
-#include <OpenGL/gl.h>
-#else
-#include <GL/glu.h>
-#include <GL/gl.h>
-#endif
-#include <tqimage.h>
-#include <kdebug.h>
-#include <tqpainter.h>
-#include <tqradiobutton.h>
-#include <tqspinbox.h>
-#include <kstandarddirs.h>
-#include <math.h>
-#include <kmessagebox.h>
-#ifndef GLU_NURBS_TEXTURE_COORD
-#define GLU_NURBS_TEXTURE_COORD 100168
-#endif
-// libkscreensaver interface
-
-extern "C"
-{
- KDE_EXPORT const char *kss_applicationName = "kwave.kss";
- KDE_EXPORT const char *kss_description = I18N_NOOP( "Bitmap Wave Screen Saver" );
- KDE_EXPORT const char *kss_version = "2.2.0";
-
- KDE_EXPORT KScreenSaver *kss_create( WId id )
- {
- return new KWaveSaver( id );
- }
-
- KDE_EXPORT TQDialog *kss_setup()
- {
- return new KWaveSetup();
- }
-}
-
-//-----------------------------------------------------------------------------
-// dialog to setup screen saver parameters
-//
-KWaveSetup::KWaveSetup( TQWidget *parent, const char *name )
- : SetupUi( parent, name, TRUE )
-{
- readSettings();
-
- preview->setFixedSize( 220, 170 );
- preview->setBackgroundColor( black );
- preview->show(); // otherwise saver does not get correct size
- saver = new KWaveSaver( preview->winId() );
-
- connect( PushButton1, TQT_SIGNAL( clicked() ), TQT_SLOT( slotOkPressed() ) );
- connect( PushButton2, TQT_SIGNAL( clicked() ), TQT_SLOT( reject() ) );
- connect( PushButton3, TQT_SIGNAL( clicked() ), TQT_SLOT( aboutPressed() ) );
- connect( SpinBox1, TQT_SIGNAL( valueChanged(int)), saver, TQT_SLOT( updateSize(int)));
- connect( RadioButton1, TQT_SIGNAL( toggled(bool)), saver, TQT_SLOT( doStars(bool)));
-
-}
-
-KWaveSetup::~KWaveSetup( )
-{
- delete saver;
-}
-
-
-// read settings from config file
-void KWaveSetup::readSettings()
-{
- TDEConfig *config = TDEGlobal::config();
- config->setGroup( "Settings" );
-
-// color = config->readColorEntry( "Color", &black );
-}
-
-// Ok pressed - save settings and exit
-void KWaveSetup::slotOkPressed()
-{
- TDEConfig *config = TDEGlobal::config();
- config->setGroup( "Settings" );
-
-// config->writeEntry( "Color", color );
-
- config->sync();
-
- accept();
-}
-
-void KWaveSetup::aboutPressed()
-{
- KMessageBox::about(this,
- i18n("<h3>Bitmap Flag Screen Saver</h3>\n<p>Waving Flag Screen Saver for TDE</p>\nCopyright (c) Ian Reinhart Geiser 2001"));
-}
-//-----------------------------------------------------------------------------
-
-
-KWaveSaver::KWaveSaver( WId id ) : KScreenSaver( id )
-{
- kdDebug() << "Blank" << endl;
- readSettings();
-
- timer = new TQTimer( this );
- timer->start( 50, TRUE );
- setBackgroundColor( black );
- erase();
- wave = new Wave();
- embed(wave);
- wave->show();
- connect( timer, TQT_SIGNAL(timeout()), this, TQT_SLOT(blank()) );;
-}
-
-KWaveSaver::~KWaveSaver()
-{
-
-}
-
-// read configuration settings from config file
-void KWaveSaver::readSettings()
-{
- TDEConfig *config = TDEGlobal::config();
- config->setGroup( "Settings" );
-
-// color = config->readColorEntry( "Color", &black );
-}
-
-void KWaveSaver::blank()
-{
- // Play wave
-
- wave->updateGL();
- timer->start( 100, TRUE );
-
-}
-Wave::Wave( TQWidget * parent, const char * name) : TQGLWidget (parent,name)
-{
- pNurb = 0;
-
- nNumPoints = 4;
- index = 0;
-}
-
-Wave::~Wave()
-{
- glDeleteTextures( 1, &texture[0] );
- gluDeleteNurbsRenderer(pNurb);
-}
-
-/** setup the GL enviroment */
-void Wave::initializeGL ()
-{
-
- kdDebug() << "InitGL" << endl;
-
- /* Load in the texture */
- if ( !LoadGLTextures( ) )
- exit(0);
-
- /* Enable Texture Mapping ( NEW ) */
- glEnable( GL_TEXTURE_2D );
-
- /* Enable smooth shading */
- glShadeModel( GL_SMOOTH );
- // Light values and coordinates
- GLfloat specular[] = { 0.7f, 0.0f, 0.0f, 1.0f};
- GLfloat shine[] = { 75.0f };
-
- glClearColor(0.0f, 0.0f, 0.0f, 0.0f );
-
- glEnable(GL_LIGHTING);
- glEnable(GL_LIGHT0);
-
- glEnable(GL_COLOR_MATERIAL);
-
- glColorMaterial(GL_FRONT, GL_AMBIENT_AND_DIFFUSE);
- glMaterialfv(GL_FRONT, GL_SPECULAR, specular);
- glMaterialfv(GL_FRONT, GL_SHININESS, shine);
-
- glEnable(GL_AUTO_NORMAL);
-
-
- pNurb = gluNewNurbsRenderer();
-
- gluNurbsProperty(pNurb, GLU_SAMPLING_TOLERANCE, 25.0f);
- // Uncomment the next line and comment the one following to produce a
- // wire frame mesh.
- //gluNurbsProperty(pNurb, GLU_DISPLAY_MODE, GLU_OUTLINE_POLYGON);
- gluNurbsProperty(pNurb, GLU_DISPLAY_MODE, (GLfloat)GLU_FILL);
- glEnable(GL_MAP2_TEXTURE_COORD_3);
- glEnable(GL_MAP2_VERTEX_3);
- glEnable(GL_BLEND);
-
-}
-/** resize the gl view */
-void Wave::resizeGL ( int w, int h)
-{
- kdDebug() << "ResizeGL " << w << "," <<h<< endl;
- // Prevent a divide by zero
- if(h == 0)
- h = 1;
-
- // Set Viewport to window dimensions
- glViewport(0, 0, w, h);
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity();
-
- // Perspective view
- gluPerspective (45.0f, (GLdouble)w/(GLdouble)h, 1.0, 40.0f);
-
- // Modelview matrix reset
- glMatrixMode(GL_MODELVIEW);
- glLoadIdentity();
-
- // Viewing transformation, position for better view
- glTranslatef (0.0f, 0.0f, -20.0f);
-
-}
-/** paint the GL view */
-void Wave::paintGL ()
-{
-
- float ctrlPoints[4][4][3];
-
- index++;
- float Z[16];
- for( int i = 0; i < 16; i++)
- {
- Z[i] = 3.0 * sin(16*(3.141592654 * 2.0f) * (index+(i))/360);
- }
-
-// kdDebug() << "-----" << endl;
- int counter =15;
- for( int i = 0; i < 4; i++)
- for( int j = 0; j < 4;j++)
- {
- ctrlPoints[i][j][0] = float((5*i)-10);
- ctrlPoints[i][j][1] = float((3*j)-6);
- ctrlPoints[i][j][2] = Z[counter--];
-// kdDebug() << Z[counter] << endl;
- }
- // Knot sequence for the NURB
- float knots[8] = { 0, 0, 0, 0, 1, 1, 1, 1 };
- // Draw in Blu
- //glColor3ub(0,0,220);
-
- // Clear the window with current clearing color
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
-
- // Save the modelview matrix stack
- glMatrixMode(GL_MODELVIEW);
- glPushMatrix();
-
- // Rotate the mesh around to make it easier to see
- glRotatef(index/2, 1.0f,0.0f,0.0f);
- glRotatef(index/5, 0.0f,1.0f,0.0f);
- glRotatef(index/6, 0.0f,0.0f,1.0f);
-
- // Render the NURB
- gluBeginSurface( pNurb );
- gluNurbsSurface( pNurb, 8, knots, 8, knots,
- 4*3, 3, &ctrlPoints[0][0][0], 4, 4, GL_MAP2_TEXTURE_COORD_3);
- //gluNurbsSurface( pNurb, 8, knots, 8, knots,
- //4*3, 3, &ctrlPoints[0][0][0], 4, 4, GL_MAP2_NORMAL );
- gluNurbsSurface( pNurb, 8, knots, 8, knots,
- 4*3, 3, &ctrlPoints[0][0][0], 4, 4, GL_MAP2_VERTEX_3 );
- gluEndSurface( pNurb );
-
- // Restore the modelview matrix
- glPopMatrix();
-
- glFlush();
-}
-
-bool Wave::LoadGLTextures()
-{
- /* Status indicator */
- bool Status = TRUE;
-
- TQImage buf; // = TQPixmap::grabWindow ( 0 ).convertToImage();
- kdDebug() << "Loading: " << locate("data", "kscreensaver/image.png") << endl;
- if (buf.load( locate("data", "kscreensaver/image.png") ) )
-
- {
- tex = convertToGLFormat(buf); // flipped 32bit RGBA
- kdDebug() << "Texture loaded: " << tex.numBytes () << endl;
- }
- else
- {
- TQImage dummy( 64, 64, 64 );
- dummy.fill( TQt::white.rgb() );
- buf = dummy;
- tex = convertToGLFormat( buf );
- }
- /* Set the status to true */
- //Status = TRUE;
- glGenTextures(1, &texture[0]); /* create three textures */
- glBindTexture(GL_TEXTURE_2D, texture[0]);
- /* use linear filtering */
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
- //glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
- /* actually generate the texture */
- glTexImage2D(GL_TEXTURE_2D, 0, 4, tex.width(), tex.height(), 0,
- GL_RGBA, GL_UNSIGNED_BYTE, tex.bits());
- kdDebug() << "Texture Loaded: " << tex.width() << "," << tex.height() << endl;
-
-
- return Status;
-}
diff --git a/kscreensaver/kdesavers/wave.h b/kscreensaver/kdesavers/wave.h
deleted file mode 100644
index 7d1c2e1a..00000000
--- a/kscreensaver/kdesavers/wave.h
+++ /dev/null
@@ -1,100 +0,0 @@
-//-----------------------------------------------------------------------------
-//
-// kwave - Partical Wave Screen Saver for KDE 2
-//
-// Copyright (c) Ian Reinhart Geiser 2001
-//
-/////
-//NOTE:
-// The base particle engine did not come from me, it was designed by Jeff Molofee <[email protected]>
-// I did some extensive modifications to make it work with QT's OpenGL but the base principal is about
-// the same.
-////
-
-#ifndef __WAVE_H__
-#define __WAVE_H__
-
-#include <tqdialog.h>
-#include <tqgl.h>
-#ifdef TQ_WS_MACX
-#include <OpenGL/glu.h>
-#include <OpenGL/gl.h>
-#else
-#include <GL/glu.h>
-#include <GL/gl.h>
-#endif
-#include <kscreensaver.h>
-#include <tqtimer.h>
-#include <tqimage.h>
-#include "wavecfg.h"
-
-
-class Wave : public TQGLWidget
-{
-Q_OBJECT
-
-
-public:
- Wave( TQWidget * parent=0, const char * name=0 );
- ~Wave();
-
-protected:
- /** paint the GL view */
- void paintGL ();
- /** resize the gl view */
- void resizeGL ( int w, int h );
- /** setup the GL enviroment */
- void initializeGL ();
-
-
-private:
-//
- GLUnurbsObj *pNurb;
- GLint nNumPoints;
-// float ctrlPoints[4][4][3];
-// float knots[8];
- int index;
- bool LoadGLTextures();
- GLuint texture[1];
- TQImage tex;
-
-};
-
-class KWaveSaver : public KScreenSaver
-{
-Q_OBJECT
-
-public:
- KWaveSaver( WId drawable );
- virtual ~KWaveSaver();
- void readSettings();
-public slots:
- void blank();
-
-private:
- Wave *wave;
- TQTimer *timer;
-};
-
-class KWaveSetup : public SetupUi
-{
- Q_OBJECT
-
-public:
- KWaveSetup( TQWidget *parent = NULL, const char *name = NULL );
- ~KWaveSetup( );
-protected:
- void readSettings();
-
-private slots:
- void slotOkPressed();
- void aboutPressed();
-private:
- KWaveSaver *saver;
- float size;
- float stars;
-};
-
-#endif
-
-
diff --git a/kscreensaver/kdesavers/wavecfg.ui b/kscreensaver/kdesavers/wavecfg.ui
deleted file mode 100644
index 9ad24416..00000000
--- a/kscreensaver/kdesavers/wavecfg.ui
+++ /dev/null
@@ -1,191 +0,0 @@
-<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
-<class>SetupUi</class>
-<widget class="TQDialog">
- <property name="name">
- <cstring>SetupUi</cstring>
- </property>
- <property name="geometry">
- <rect>
- <x>0</x>
- <y>0</y>
- <width>400</width>
- <height>209</height>
- </rect>
- </property>
- <property name="sizePolicy">
- <sizepolicy>
- <hsizetype>0</hsizetype>
- <vsizetype>0</vsizetype>
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="minimumSize">
- <size>
- <width>400</width>
- <height>209</height>
- </size>
- </property>
- <property name="baseSize">
- <size>
- <width>400</width>
- <height>250</height>
- </size>
- </property>
- <property name="caption">
- <string>Bitmap Flag Setup</string>
- </property>
- <widget class="TQLayoutWidget">
- <property name="name">
- <cstring>Layout4</cstring>
- </property>
- <property name="geometry">
- <rect>
- <x>1</x>
- <y>1</y>
- <width>398</width>
- <height>206</height>
- </rect>
- </property>
- <grid>
- <property name="name">
- <cstring>unnamed</cstring>
- </property>
- <property name="margin">
- <number>0</number>
- </property>
- <property name="spacing">
- <number>6</number>
- </property>
- <widget class="TQCheckBox" row="3" column="0">
- <property name="name">
- <cstring>CheckBox1</cstring>
- </property>
- <property name="text">
- <string>Use textures</string>
- </property>
- </widget>
- <widget class="TQPushButton" row="4" column="2">
- <property name="name">
- <cstring>PushButton3</cstring>
- </property>
- <property name="text">
- <string>&amp;About</string>
- </property>
- </widget>
- <widget class="TQSpinBox" row="1" column="0">
- <property name="name">
- <cstring>SpinBox1</cstring>
- </property>
- <property name="maxValue">
- <number>500</number>
- </property>
- <property name="minValue">
- <number>10</number>
- </property>
- <property name="lineStep">
- <number>10</number>
- </property>
- </widget>
- <widget class="TQPushButton" row="4" column="1">
- <property name="name">
- <cstring>PushButton2</cstring>
- </property>
- <property name="text">
- <string>&amp;Cancel</string>
- </property>
- </widget>
- <widget class="TQPushButton" row="4" column="0">
- <property name="name">
- <cstring>PushButton1</cstring>
- </property>
- <property name="text">
- <string>&amp;OK</string>
- </property>
- <property name="default">
- <bool>true</bool>
- </property>
- </widget>
- <widget class="TQGroupBox" row="2" column="0">
- <property name="name">
- <cstring>GroupBox1</cstring>
- </property>
- <property name="title">
- <string>Shapes</string>
- </property>
- <widget class="TQLayoutWidget">
- <property name="name">
- <cstring>Layout3</cstring>
- </property>
- <property name="geometry">
- <rect>
- <x>10</x>
- <y>20</y>
- <width>130</width>
- <height>50</height>
- </rect>
- </property>
- <vbox>
- <property name="name">
- <cstring>unnamed</cstring>
- </property>
- <property name="margin">
- <number>0</number>
- </property>
- <property name="spacing">
- <number>6</number>
- </property>
- <widget class="TQRadioButton">
- <property name="name">
- <cstring>RadioButton1</cstring>
- </property>
- <property name="text">
- <string>Stars</string>
- </property>
- <property name="checked">
- <bool>true</bool>
- </property>
- </widget>
- <widget class="TQRadioButton">
- <property name="name">
- <cstring>RadioButton1_2</cstring>
- </property>
- <property name="text">
- <string>Flares</string>
- </property>
- </widget>
- </vbox>
- </widget>
- </widget>
- <widget class="TQWidget" row="0" column="1" rowspan="4" colspan="2">
- <property name="name">
- <cstring>preview</cstring>
- </property>
- </widget>
- <widget class="TQLabel" row="0" column="0">
- <property name="name">
- <cstring>TextLabel1</cstring>
- </property>
- <property name="text">
- <string>Particle size:</string>
- </property>
- </widget>
- </grid>
- </widget>
-</widget>
-<connections>
- <connection>
- <sender>RadioButton1_2</sender>
- <signal>pressed()</signal>
- <receiver>RadioButton1</receiver>
- <slot>toggle()</slot>
- </connection>
- <connection>
- <sender>RadioButton1</sender>
- <signal>pressed()</signal>
- <receiver>RadioButton1_2</receiver>
- <slot>toggle()</slot>
- </connection>
-</connections>
-<layoutdefaults spacing="6" margin="11"/>
-</UI>