diff --git a/samples/graphics/rsx_Basic_Wallpaper/Makefile b/samples/graphics/rsx_Basic_Wallpaper/Makefile new file mode 100644 index 00000000..b39db6f6 --- /dev/null +++ b/samples/graphics/rsx_Basic_Wallpaper/Makefile @@ -0,0 +1,164 @@ +#--------------------------------------------------------------------------------- +# Clear the implicit built in rules +#--------------------------------------------------------------------------------- +.SUFFIXES: +#--------------------------------------------------------------------------------- +ifeq ($(strip $(PSL1GHT)),) +$(error "Please set PSL1GHT in your environment. export PSL1GHT=") +endif + +include $(PSL1GHT)/ppu_rules + +#--------------------------------------------------------------------------------- +# TARGET is the name of the output +# BUILD is the directory where object files & intermediate files will be placed +# SOURCES is a list of directories containing source code +# INCLUDES is a list of directories containing extra header files +#--------------------------------------------------------------------------------- +TARGET := $(notdir $(CURDIR)) +BUILD := build +SOURCES := source ../debugfont_renderer/source +DATA := data +SHADERS := shaders ../debugfont_renderer/shaders +INCLUDES := include ../debugfont_renderer/include + +TITLE := RSX Test - PSL1GHT +APPID := RSX00003 +CONTENTID := UP0001-$(APPID)_00-0000000000000000 + +#--------------------------------------------------------------------------------- +# options for code generation +#--------------------------------------------------------------------------------- + +CFLAGS = -Wall -mcpu=cell $(MACHDEP) $(INCLUDE) +CXXFLAGS = $(CFLAGS) + +LDFLAGS = $(MACHDEP) -Wl,-Map,$(notdir $@).map + +#--------------------------------------------------------------------------------- +# any extra libraries we wish to link with the project +#--------------------------------------------------------------------------------- +LIBS := -lsimdmath -lrsx -lgcm_sys -lio -lsysutil -lrt -llv2 -lm -lsysmodule -lpngdec + +#--------------------------------------------------------------------------------- +# list of directories containing libraries, this must be the top level containing +# include and lib +#--------------------------------------------------------------------------------- +LIBDIRS := + +#--------------------------------------------------------------------------------- +# no real need to edit anything past this point unless you need to add additional +# rules for different file extensions +#--------------------------------------------------------------------------------- +ifneq ($(BUILD),$(notdir $(CURDIR))) +#--------------------------------------------------------------------------------- + +export OUTPUT := $(CURDIR)/$(TARGET) + +export VPATH := $(foreach dir,$(SOURCES),$(CURDIR)/$(dir)) \ + $(foreach dir,$(DATA),$(CURDIR)/$(dir)) \ + $(foreach dir,$(SHADERS),$(CURDIR)/$(dir)) + +export DEPSDIR := $(CURDIR)/$(BUILD) + +export BUILDDIR := $(CURDIR)/$(BUILD) + +#--------------------------------------------------------------------------------- +# automatically build a list of object files for our project +#--------------------------------------------------------------------------------- +CFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c))) +CPPFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp))) +sFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s))) +SFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.S))) +BINFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.*))) +VCGFILES := $(foreach dir,$(SHADERS),$(notdir $(wildcard $(dir)/*.vcg))) +FCGFILES := $(foreach dir,$(SHADERS),$(notdir $(wildcard $(dir)/*.fcg))) + +VPOFILES := $(VCGFILES:.vcg=.vpo) +FPOFILES := $(FCGFILES:.fcg=.fpo) + +#--------------------------------------------------------------------------------- +# use CXX for linking C++ projects, CC for standard C +#--------------------------------------------------------------------------------- +ifeq ($(strip $(CPPFILES)),) + export LD := $(CC) +else + export LD := $(CXX) +endif + +export OFILES := $(addsuffix .o,$(BINFILES)) \ + $(addsuffix .o,$(VPOFILES)) \ + $(addsuffix .o,$(FPOFILES)) \ + $(CPPFILES:.cpp=.o) $(CFILES:.c=.o) \ + $(sFILES:.s=.o) $(SFILES:.S=.o) + +#--------------------------------------------------------------------------------- +# build a list of include paths +#--------------------------------------------------------------------------------- +export INCLUDE := $(foreach dir,$(INCLUDES), -I$(CURDIR)/$(dir)) \ + $(foreach dir,$(LIBDIRS),-I$(dir)/include) \ + $(LIBPSL1GHT_INC) \ + -I$(CURDIR)/$(BUILD) + +#--------------------------------------------------------------------------------- +# build a list of library paths +#--------------------------------------------------------------------------------- +export LIBPATHS := $(foreach dir,$(LIBDIRS),-L$(dir)/lib) \ + $(LIBPSL1GHT_LIB) + +export OUTPUT := $(CURDIR)/$(TARGET) +.PHONY: $(BUILD) clean + +#--------------------------------------------------------------------------------- +$(BUILD): + @[ -d $@ ] || mkdir -p $@ + @$(MAKE) --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile + +#--------------------------------------------------------------------------------- +clean: + @echo clean ... + @rm -fr $(BUILD) $(OUTPUT).elf $(OUTPUT).self $(OUTPUT).fake.self + +#--------------------------------------------------------------------------------- +run: + ps3load $(OUTPUT).self + +#--------------------------------------------------------------------------------- +pkg: $(BUILD) $(OUTPUT).pkg + +#--------------------------------------------------------------------------------- +else + +DEPENDS := $(OFILES:.o=.d) + +#--------------------------------------------------------------------------------- +# main targets +#--------------------------------------------------------------------------------- +$(OUTPUT).self: $(OUTPUT).elf +$(OUTPUT).elf: $(OFILES) + +#--------------------------------------------------------------------------------- +# This rule links in binary data with the .bin extension +#--------------------------------------------------------------------------------- +%.bin.o : %.bin +#--------------------------------------------------------------------------------- + @echo $(notdir $<) + @$(bin2o) + +#--------------------------------------------------------------------------------- +%.vpo.o : %.vpo +#--------------------------------------------------------------------------------- + @echo $(notdir $<) + @$(bin2o) + +#--------------------------------------------------------------------------------- +%.fpo.o : %.fpo +#--------------------------------------------------------------------------------- + @echo $(notdir $<) + @$(bin2o) + +-include $(DEPENDS) + +#--------------------------------------------------------------------------------- +endif +#--------------------------------------------------------------------------------- diff --git a/samples/graphics/rsx_Basic_Wallpaper/Readme.md b/samples/graphics/rsx_Basic_Wallpaper/Readme.md new file mode 100644 index 00000000..dd89dc2f --- /dev/null +++ b/samples/graphics/rsx_Basic_Wallpaper/Readme.md @@ -0,0 +1,3 @@ +A basic background wallpaper using vertex, fragment and texture with a scanline shader. + +![RSX basic cube example](rsx_basic_wallpaper.png?raw=true) diff --git a/samples/graphics/rsx_Basic_Wallpaper/data/wall1_png.bin b/samples/graphics/rsx_Basic_Wallpaper/data/wall1_png.bin new file mode 100644 index 00000000..53dff376 Binary files /dev/null and b/samples/graphics/rsx_Basic_Wallpaper/data/wall1_png.bin differ diff --git a/samples/graphics/rsx_Basic_Wallpaper/include/acid.h b/samples/graphics/rsx_Basic_Wallpaper/include/acid.h new file mode 100644 index 00000000..cdc9bd26 --- /dev/null +++ b/samples/graphics/rsx_Basic_Wallpaper/include/acid.h @@ -0,0 +1,2939 @@ +/* GIMP RGBA C-Source image dump (acid.c) */ + +static const struct { + unsigned int width; + unsigned int height; + unsigned int bytes_per_pixel; /* 3:RGB, 4:RGBA */ + unsigned char pixel_data[128 * 128 * 4 + 1]; +} acid = { + 128, 128, 4, + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\335\335\335\0\265\265\265\0\221\221\221\0qqq\0UUU\0===\0)))\0\31\31" + "\31\0\15\15\15\0\5\5\5\0\1\1\1\0\1\1\1\0\5\5\5\0\15\15\15\0\31\31\31\0))" + ")\0===\0UUU\0qqq\0\221\221\221\0\265\265\265\0\335\335\335\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\345\345\345\0\251\251\251\0qqq\0===\0\15\15\15\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\15\15\15\0===\0qqq\0\251\251\251\0\345\345\345\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\271\271\271\0qqq\0---\0\0\0\0" + "\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\7\0\0\0\15\0\0\0" + "\23\0\0\0\30\0\0\0\35\0\0\0!\0\0\0$\0\0\0&\0\0\0(\0\0\0(\0\0\0'\0\0\0$\0" + "\0\0!\0\0\0\35\0\0\0\31\0\0\0\23\0\0\0\15\0\0\0\7\0\0\0\2\0\0\0\1\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0---\0qqq\0\271\271\271\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\265\265\265\0aaa\0\21\21\21\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\1\0\0\0\6\0\0\0\17\0\0\0\30\0\0\0\40\0\0\0+\0\0\0B\0" + "\0\0\\\0\0\0t\0\0\0\211\0\0\0\234\0\0\0\254\0\0\0\271\0\0\0\304\0\0\0\313" + "\0\0\0\313\0\0\0\304\0\0\0\271\0\0\0\254\0\0\0\234\0\0\0\211\0\0\0t\0\0\0" + "\\\0\0\0B\0\0\0+\0\0\0!\0\0\0\30\0\0\0\17\0\0\0\6\0\0\0\1\0\0\0\1\0\0\0\0" + "\0\0\0\0\0\0\0\0\21\21\21\0aaa\0\265\265\265\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\331\331\331\0yyy\0\35\35\35\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\2\0\0\0\14\0\0\0\30\0\0\0&\0\0\0?\0\0\0d\0\0\0\211\0\0\0\254\0\0\0\311" + "\0\0\0\331\0\0\0\341\0\0\0\347\0\0\0\354\0\0\0\361\0\0\0\365\0\0\0\370\0" + "\0\0\373\0\0\0\375\0\0\0\375\0\0\0\373\0\0\0\371\0\0\0\365\0\0\0\361\0\0" + "\0\355\0\0\0\347\0\0\0\341\0\0\0\331\0\0\0\312\0\0\0\254\0\0\0\211\0\0\0" + "d\0\0\0?\0\0\0&\0\0\0\30\0\0\0\15\0\0\0\3\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0" + "\35\35\35\0yyy\0\331\331\331\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\271\271" + "\271\0QQQ\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\0\0\0\16\0\0\0\33\0\0" + "\0.\0\0\0Y\0\0\0\211\0\0\0\265\0\0\0\325\0\0\0\343\0\0\0\354\0\0\0\365\0" + "\0\0\374\40!\0\377FH\0\377hk\0\377\206\213\0\377\240\246\0\377\267\275\0" + "\377\311\321\0\377\330\341\0\377\344\354\0\377\344\354\0\377\330\341\0\377" + "\311\321\0\377\267\275\0\377\240\246\0\377\206\213\0\377hk\0\377FH\0\377" + "\40!\0\377\0\0\0\375\0\0\0\365\0\0\0\355\0\0\0\343\0\0\0\326\0\0\0\266\0" + "\0\0\211\0\0\0Z\0\0\0/\0\0\0\33\0\0\0\16\0\0\0\3\0\0\0\1\0\0\0\0\0\0\0\0" + "\0\0\0\0QQQ\0\271\271\271\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\255\255\255\0===\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\2\0\0\0\11\0\0\0" + "\27\0\0\0-\0\0\0]\0\0\0\224\0\0\0\304\0\0\0\336\0\0\0\354\0\0\0\367\30\31" + "\0\376QT\0\377\206\213\0\377\267\275\0\377\344\354\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\344\354\0\377\267\275\0\377\206\213\0\377QT\0\377\30\31\0" + "\376\0\0\0\367\0\0\0\354\0\0\0\337\0\0\0\305\0\0\0\224\0\0\0]\0\0\0-\0\0" + "\0\30\0\0\0\11\0\0\0\2\0\0\0\1\0\0\0\0\0\0\0\0===\0\255\255\255\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\265\265\265" + "\0===\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\2\0\0\0\15\0\0\0!\0\0\0H\0\0\0\204" + "\0\0\0\274\0\0\0\336\0\0\0\357\0\0\0\373BD\0\377\206\213\0\377\306\315\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\306\315\0\377\206\213\0\377BD\0\377\0\0\0\373" + "\0\0\0\357\0\0\0\337\0\0\0\275\0\0\0\204\0\0\0I\0\0\0!\0\0\0\15\0\0\0\3\0" + "\0\0\1\0\0\0\0\0\0\0\0===\0\265\265\265\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\321\321\321\0QQ" + "Q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\0\0\0\17\0\0\0'\0\0\0[\0\0\0\236\0\0" + "\0\324\0\0\0\353\0\0\0\371FH\0\377\225\232\0\377\340\350\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\340\350\0\377\225\232\0\377FH\0\377\0\0\0\371\0" + "\0\0\353\0\0\0\324\0\0\0\236\0\0\0\\\0\0\0'\0\0\0\17\0\0\0\3\0\0\0\1\0\0" + "\0\0\0\0\0\0QQQ\0\321\321\321\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0yyy\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\0\0\0\16\0\0\0(\0\0\0c\0\0\0\250" + "\0\0\0\332\0\0\0\361$%\0\375~\203\0\377\325\335\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\325\335\0\377~\203\0\377$%\0\375\0\0\0\361\0\0\0" + "\333\0\0\0\251\0\0\0c\0\0\0(\0\0\0\17\0\0\0\3\0\0\0\1\0\0\0\0\0\0\0\0yyy" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\265\265\265\0)))\0\0\0\0\0\0\0\0\0\0\0\0\2\0\0\0\13\0\0\0$\0\0\0_" + "\0\0\0\250\0\0\0\334\0\0\0\364BD\0\376\244\252\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\244\252\0\377BD\0\376\0\0\0\364\0\0\0" + "\335\0\0\0\250\0\0\0`\0\0\0%\0\0\0\13\0\0\0\2\0\0\0\1\0\0\0\0)))\0\265\265" + "\265\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0qqq\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\4\0\0\0\34\0\0\0O\0\0\0\234\0\0\0\332\0\0\0\364FH\0\376\267\275\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\267\275\0\377FH\0\376\0\0\0\364\0" + "\0\0\332\0\0\0\234\0\0\0P\0\0\0\34\0\0\0\4\0\0\0\1\0\0\0\0\0\0\0\0qqq\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\315\315\315" + "\0""555\0\0\0\0\0\0\0\0\0\0\0\0\3\0\0\0\17\0\0\0""0\0\0\0\203\0\0\0\321\0" + "\0\0\360+-\0\375\244\252\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\244\252\0\377+-\0\375" + "\0\0\0\360\0\0\0\322\0\0\0\203\0\0\0""1\0\0\0\17\0\0\0\3\0\0\0\1\0\0\0\0" + """555\0\315\315\315\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\235\235\235\0\1\1\1\0\0\0\0" + "\0\0\0\0\0\0\0\0\4\0\0\0\40\0\0\0`\0\0\0\262\0\0\0\346\0\0\0\374~\203\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377~\203\0\377\0\0\0\374\0\0\0\347\0\0\0\263\0\0\0a\0\0\0\40\0\0\0\5\0\0" + "\0\1\0\0\0\0\1\1\1\0\235\235\235\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0uuu\0\0\0\0\0\0\0\0\0\0\0\0\2\0\0\0\14\0\0" + "\0/\0\0\0\207\0\0\0\326\0\0\0\366FH\0\376\311\321\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\311\321\0\377FH\0\376\0\0\0\366\0\0\0\327\0\0\0\207\0\0\0" + """0\0\0\0\14\0\0\0\2\0\0\0\1\0\0\0\0uuu\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\375" + "\375\375\0UUU\0\0\0\0\0\0\0\0\0\0\0\0\3\0\0\0\30\0\0\0S\0\0\0\252\0\0\0\345" + "\0\0\0\374\206\213\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\206\213\0\377\0\0\0\374\0\0\0\346" + "\0\0\0\253\0\0\0T\0\0\0\31\0\0\0\4\0\0\0\1\0\0\0\0UUU\0\375\375\375\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\351\351\351\0==" + "=\0\0\0\0\0\0\0\0\0\0\0\0\4\0\0\0\"\0\0\0q\0\0\0\316\0\0\0\363/1\0\376\276" + "\305\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\276\305\0\377/1\0\376" + "\0\0\0\364\0\0\0\316\0\0\0q\0\0\0\"\0\0\0\5\0\0\0\1\0\0\0\0===\0\351\351" + "\351\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\335\335\335\0---\0\0\0\0\0\0\0\0\1" + "\0\0\0\6\0\0\0*\0\0\0\205\0\0\0\332\0\0\0\373\\`\0\377\357\370\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\357\370" + "\0\377\\`\0\377\0\0\0\373\0\0\0\332\0\0\0\206\0\0\0+\0\0\0\6\0\0\0\1\0\0" + "\0\1---\0\335\335\335\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\331\331\331\0%%%\0\0\0\0\0\0\0\0\1\0\0\0\11" + "\0\0\0""2\0\0\0\225\0\0\0\342\0\0\0\374\202\207\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\202\207\0\377\0\0\0\374\0\0\0\342\0\0\0" + "\226\0\0\0""2\0\0\0\11\0\0\0\1\0\0\0\1%%%\0\331\331\331\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\335\335\335\0%%%\0\0\0\0\0\0\0\0\1\0\0\0\15" + "\0\0\0?\0\0\0\243\0\0\0\350\2\2\0\375\240\246\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\240\246\0\377" + "\2\2\0\375\0\0\0\350\0\0\0\244\0\0\0@\0\0\0\15\0\0\0\2\0\0\0\1%%%\0\335\335" + "\335\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\351\351\351\0---\0\0\0\0\0\0\0\0\1\0\0\0\16" + "\0\0\0H\0\0\0\257\0\0\0\355\25\25\0\376\267\275\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\267\275\0\377\25\25\0\376\0\0\0\355\0\0\0\257\0\0\0H\0\0\0" + "\17\0\0\0\2\0\0\0\1---\0\351\351\351\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\375\375\375\0===\0\0\0\0\0\0\0\0\1\0\0\0\15" + "\0\0\0H\0\0\0\264\0\0\0\360\40!\0\376\306\315\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\306\315\0\377\40!\0\376\0\0\0" + "\360\0\0\0\265\0\0\0I\0\0\0\15\0\0\0\1\0\0\0\1===\0\375\375\375\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0UUU\0\0\0\0\0\0\0\0\1\0\0\0\11" + "\0\0\0?\0\0\0\257\0\0\0\360$%\0\376\315\325\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\315\325" + "\0\377$%\0\377\0\0\0\360\0\0\0\257\0\0\0@\0\0\0\11\0\0\0\1\0\0\0\1UUU\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0uuu\0\0\0\0\0\0\0\0\0\0\0\0\5\0\0\0""2" + "\0\0\0\244\0\0\0\355\40!\0\376\315\325\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\315\325\0\377\40!\0\376\0\0\0\355\0\0\0\244\0\0\0""2\0" + "\0\0\6\0\0\0\1\0\0\0\0uuu\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\235\235\235\0\0\0\0\0\0\0\0\0\0\0" + "\0\4\0\0\0*\0\0\0\225\0\0\0\350\25\25\0\376\306\315\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\306\315\0\377\25" + "\25\0\376\0\0\0\350\0\0\0\226\0\0\0*\0\0\0\5\0\0\0\1\0\0\0\0\235\235\235" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\315\315\315\0" + "\1\1\1\0\0\0\0\0\0\0\0\3\0\0\0\"\0\0\0\205\0\0\0\342\2\2\0\375\267\275\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\267\275\0\377\2\2\0\375\0\0\0\342\0\0\0" + "\206\0\0\0#\0\0\0\4\0\0\0\1\1\1\1\0\315\315\315\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0""555\0\0\0\0\0\0\0\0\2\0\0\0\30\0\0\0q\0\0\0\332\0\0\0\374" + "\240\246\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\350\361\0\377\254\263\0\377.0\0\377\13\14\0\377UX\0\377" + "\317\327\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\240\246\0\377\0" + "\0\0\374\0\0\0\333\0\0\0r\0\0\0\31\0\0\0\2\0\0\0\1""555\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0qqq\0\0\0\0\0\0\0\0\0\0\0\0\14\0\0\0S\0\0\0\316\0\0\0\373\202\207" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\310\317\0\3779<\0\377\0\0\0\3779<\0\377\310\317\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\306\315\0\377!\"\0\377\0\0\0\377\0\0\0\377\4\4\0\377PT\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\202\207\0\377\0\0\0\373" + "\0\0\0\316\0\0\0S\0\0\0\14\0\0\0\1\0\0\0\0qqq\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\265\265\265\0\0\0\0\0\0" + "\0\0\0\0\0\0\4\0\0\0/\0\0\0\253\0\0\0\364\\`\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377/2\0\377\0\0\0\377\0\0\0\377\0\0\0\377/2\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\237\245\0\377" + "\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\20\20\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\\`\0\377\0\0\0\364\0\0\0" + "\253\0\0\0""0\0\0\0\5\0\0\0\1\0\0\0\0\265\265\265\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0)))\0\0\0\0\0\0\0\0\3\0\0\0\40\0\0" + "\0\207\0\0\0\345/1\0\376\357\370\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\0\0\0" + "\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\207\215\0\377\0\0\0" + "\377\0\0\0\377\0\0\0\377\0\0\0\377\6\6\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\357\370\0\377/1\0\376\0\0\0\346" + "\0\0\0\207\0\0\0\40\0\0\0\3\0\0\0\1)))\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0yyy\0\0\0\0\0\0\0\0\0\0\0\0\17\0\0\0`\0\0\0\326\0\0\0\374\276" + "\305\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\0\0\0\377\0\0\0\377" + "\0\0\0\377\0\0\0\377\0\0\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\202\207\0\377\0\0\0\377\0\0\0\377" + "\0\0\0\377\0\0\0\377\5\5\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\276\305\0\377\0\0\0\374\0\0\0" + "\327\0\0\0a\0\0\0\17\0\0\0\1\0\0\0\0yyy\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\321\321\321\0" + "\0\0\0\0\0\0\0\0\0\0\0\4\0\0\0""1\0\0\0\263\0\0\0\365\206\213\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\0\0\0\377\0\0\0\377\0\0" + "\0\377\0\0\0\377\0\0\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\203\210\0\377\0\0\0\377\0\0\0\377\0\0" + "\0\377\0\0\0\377\6\6\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\206\213\0\377\0\0\0" + "\366\0\0\0\263\0\0\0""1\0\0\0\5\0\0\0\1\0\0\0\0\321\321\321\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0QQQ\0\0" + "\0\0\0\0\0\0\2\0\0\0\34\0\0\0\203\0\0\0\346FH\0\376\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\0\0\0\377\0\0\0\377\0\0" + "\0\377\0\0\0\377\0\0\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\203\210\0\377\0\0\0\377\0\0\0\377\0\0" + "\0\377\0\0\0\377\6\6\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377FH\0\376" + "\0\0\0\347\0\0\0\204\0\0\0\34\0\0\0\2\0\0\0\1QQQ\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\265\265\265\0\0\0\0\0\0\0\0\0" + "\0\0\0\12\0\0\0O\0\0\0\321\0\0\0\374\311\321\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\0\0\0\377\0\0\0\377\0\0" + "\0\377\0\0\0\377\0\0\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\203\210\0\377\0\0\0\377\0\0\0\377\0\0" + "\0\377\0\0\0\377\6\6\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\311\321" + "\0\377\0\0\0\374\0\0\0\322\0\0\0P\0\0\0\13\0\0\0\1\0\0\0\0\265\265\265\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0===\0\0\0\0\0\0\0\0\3\0\0" + "\0%\0\0\0\234\0\0\0\360~\203\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\0\0\0\377\0\0\0\377\0\0\0" + "\377\0\0\0\377\0\0\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\203\210\0\377\0\0\0\377\0\0\0\377\0\0\0" + "\377\0\0\0\377\6\6\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377~\203\0\377\0\0\0\361\0\0\0\234\0\0\0%\0\0\0\3\0\0\0\1===\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\255\255\255\0\0\0\0\0\0\0\0\0\0\0\0\16\0\0\0_\0" + "\0\0\332+-\0\375\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\0\0\0\377\0\0\0\377\0\0\0\377" + "\0\0\0\377\0\0\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\203\210\0\377\0\0\0\377\0\0\0\377\0\0\0\377" + "\0\0\0\377\6\6\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377+-\0\375\0\0\0\332\0\0\0`\0\0\0\17\0\0\0\1\0\0\0\0\255\255" + "\255\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0===\0\0\0\0\0\0\0\0\3\0\0\0(\0\0\0\250\0\0\0" + "\363\244\252\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\0\0\0\377\0\0\0\377\0\0\0\377" + "\0\0\0\377\0\0\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\203\210\0\377\0\0\0\377\0\0\0\377\0\0\0\377" + "\0\0\0\377\6\6\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\244\252\0\377\0\0\0\364\0\0\0\250\0\0\0)\0\0\0\3\0\0\0\1=" + "==\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\271\271\271\0\0\0\0\0\0\0\0\0\0\0\0\17\0\0\0c\0\0\0\334FH" + "\0\375\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\0\0\0\377\0\0\0\377\0\0\0" + "\377\0\0\0\377\0\0\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\203\210\0\377\0\0\0\377\0\0\0\377\0\0\0" + "\377\0\0\0\377\6\6\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377FH\0\376\0\0\0\335\0\0\0d\0\0\0\17\0\0\0" + "\1\0\0\0\0\271\271\271\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0QQQ\0\0\0\0\0\0\0\0\2\0\0\0'\0\0\0\251\0\0\0\363\267\275" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\0\0\0\377\0\0\0\377\0\0\0" + "\377\0\0\0\377\0\0\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\203\210\0\377\0\0\0\377\0\0\0\377\0\0\0" + "\377\0\0\0\377\6\6\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\267\275\0\377\0\0\0\364\0\0\0\251\0\0\0" + "(\0\0\0\3\0\0\0\1QQQ\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\331\331\331\0\0\0\0\0\0\0\0\0\0\0\0\15\0\0\0\\\0\0\0\333BD\0\375\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\0\0\0\377\0\0\0\377\0\0\0" + "\377\0\0\0\377\0\0\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\203\210\0\377\0\0\0\377\0\0\0\377\0\0\0" + "\377\0\0\0\377\6\6\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377BD\0\376\0\0\0\333\0\0\0\\" + "\0\0\0\16\0\0\0\1\0\0\0\0\331\331\331\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0yyy\0\0\0\0\0\0\0\0\2\0\0\0!\0\0\0\235\0\0\0\361\244\252\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\0\0\0\377\0\0\0\377\0\0\0" + "\377\0\0\0\377\0\0\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\203\210\0\377\0\0\0\377\0\0\0\377\0\0\0" + "\377\0\0\0\377\6\6\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\244\252\0\377\0\0\0\361\0" + "\0\0\236\0\0\0\"\0\0\0\2\0\0\0\1yyy\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\35\35\35\0\0\0\0\0\0\0\0\10\0\0\0H\0\0\0\324$%\0\375\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\0\0\0\377\0\0\0\377\0\0" + "\0\377\0\0\0\377\0\0\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\203\210\0\377\0\0\0\377\0\0\0\377\0\0" + "\0\377\0\0\0\377\6\6\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377$%\0\375\0" + "\0\0\325\0\0\0I\0\0\0\11\0\0\0\1\35\35\35\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\265\265" + "\265\0\0\0\0\0\0\0\0\0\0\0\0\26\0\0\0\203\0\0\0\353~\203\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\0\0\0\377\0\0\0" + "\377\0\0\0\377\0\0\0\377\0\0\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\203\210\0\377\0\0\0\377\0\0\0" + "\377\0\0\0\377\0\0\0\377\6\6\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377~\203" + "\0\377\0\0\0\353\0\0\0\204\0\0\0\27\0\0\0\1\0\0\0\0\265\265\265\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0aaa\0\0\0\0\0\0\0\0\3\0\0\0-\0\0\0\275\0\0\0\370\325\335\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\0\0\0\377\0" + "\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\203\210\0\377\0\0\0\377\0" + "\0\0\377\0\0\0\377\0\0\0\377\6\6\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\325\335\0\377\0\0\0\371\0\0\0\276\0\0\0-\0\0\0\3\0\0\0\1aaa\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\21\21\21\0\0\0\0\0\0\0\0\15\0\0\0\\\0\0\0\336FH\0\376\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\0\0\0\377" + "\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\203\210\0\377\0\0\0\377" + "\0\0\0\377\0\0\0\377\0\0\0\377\6\6\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377FH\0\377\0\0\0\337\0\0\0]\0\0\0\16\0\0\0\1\21\21\21\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\271\271" + "\271\0\0\0\0\0\0\0\0\0\0\0\0\32\0\0\0\223\0\0\0\357\225\232\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\203\210\0\377" + "\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\6\6\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\225\232\0\377\0\0\0\357\0\0\0\224\0\0\0\33\0" + "\0\0\1\0\0\0\0\271\271\271\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0qqq\0\0\0\0\0\0\0\0\2\0\0\0.\0\0\0\305\0\0\0\372\340\350\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\203\210\0" + "\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\6\6\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\340\350\0\377\0\0\0\373\0\0\0\305\0\0\0" + "/\0\0\0\3\0\0\0\1qqq\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0---\0\0\0\0\0\0\0\0\14\0\0\0Y\0\0\0\336BD\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\203\210\0\377" + "\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\6\6\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377BD\0\377\0\0\0\337\0\0\0Z\0\0\0" + "\15\0\0\0\1---\0\377\377\377\0\377\377\377\0\377\377\377\0\345\345\345\0" + "\0\0\0\0\0\0\0\0\0\0\0\30\0\0\0\211\0\0\0\354\206\213\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\203\210\0" + "\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\6\6\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\206\213\0\377\0\0\0\355\0" + "\0\0\211\0\0\0\30\0\0\0\1\0\0\0\0\345\345\345\0\377\377\377\0\377\377\377" + "\0\251\251\251\0\0\0\0\0\0\0\0\1\0\0\0&\0\0\0\265\0\0\0\367\306\315\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\203\210\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\6\6\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\306\315\0\377" + "\0\0\0\367\0\0\0\266\0\0\0&\0\0\0\2\0\0\0\1\251\251\251\0\377\377\377\0\377" + "\377\377\0qqq\0\0\0\0\0\0\0\0\6\0\0\0?\0\0\0\325\30\31\0\376\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\203\210\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\6\6\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\30\31\0\376\0\0\0\326\0\0\0?\0\0\0\6\0\0\0\1qqq\0\377\377\377\0\377\377" + "\377\0===\0\0\0\0\0\0\0\0\17\0\0\0d\0\0\0\343QT\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\203\210\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\6\6\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377QT" + "\0\377\0\0\0\344\0\0\0e\0\0\0\17\0\0\0\1===\0\377\377\377\0\377\377\377\0" + "\15\15\15\0\0\0\0\0\0\0\0\30\0\0\0\211\0\0\0\354\206\213\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\203\210\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\6\6\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\206\213\0\377\0\0\0\355\0\0\0\212\0\0\0\31\0\0\0\1\15\15\15\0\377\377\377" + "\0\335\335\335\0\0\0\0\0\0\0\0\0\0\0\0\40\0\0\0\254\0\0\0\365\267\275\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377" + "\0\0\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\203\210\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377" + "\6\6\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\267\275\0\377\0\0\0\365\0\0\0\255\0\0\0!\0\0\0\1\0\0\0\0\335" + "\335\335\0\265\265\265\0\0\0\0\0\0\0\0\1\0\0\0+\0\0\0\311\0\0\0\374\344\354" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\0\0\0\377\0\0\0\377\0\0\0\377" + "\0\0\0\377\0\0\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\210\215\0\377\0\0\0\377\0\0\0\377\0\0\0\377" + "\0\0\0\377\7\7\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\344\354\0\377\0\0\0\374\0\0\0\312\0\0\0,\0\0\0\2" + "\0\0\0\1\265\265\265\0\221\221\221\0\0\0\0\0\0\0\0\6\0\0\0B\0\0\0\331\40" + "!\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\0\0\0\377\0\0\0" + "\377\0\0\0\377\0\0\0\377\0\0\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\237\245\0\377\0\0\0\377\0\0\0" + "\377\0\0\0\377\0\0\0\377\20\21\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\40!\0\377\0\0\0" + "\332\0\0\0B\0\0\0\7\0\0\0\1\221\221\221\0qqq\0\0\0\0\0\0\0\0\15\0\0\0\\\0" + "\0\0\341FH\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\37702\0\377" + "\0\0\0\377\0\0\0\377\0\0\0\37702\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\306\315\0\377!\"\0\377\0\0" + "\0\377\0\0\0\377\4\4\0\377PS\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377FH\0\377\0\0\0\342\0" + "\0\0]\0\0\0\15\0\0\0\1qqq\0UUU\0\0\0\0\0\0\0\0\23\0\0\0t\0\0\0\347hk\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\310\317\0\3779<\0\377\0" + "\0\0\3779<\0\377\310\317\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\350\361\0\377\254\263\0\377.0\0\377" + "\13\14\0\377UX\0\377\317\327\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377hk\0\377\0\0\0\350\0" + "\0\0u\0\0\0\23\0\0\0\1UUU\0===\0\0\0\0\0\0\0\0\30\0\0\0\211\0\0\0\354\206" + "\213\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\206\213\0\377\0\0\0\355\0\0\0\212\0\0\0\31\0\0\0\1===" + "\0)))\0\0\0\0\0\0\0\0\35\0\0\0\234\0\0\0\361\240\246\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\240\246" + "\0\377\0\0\0\361\0\0\0\235\0\0\0\35\0\0\0\1)))\0\31\31\31\0\0\0\0\0\0\0\0" + "\40\0\0\0\254\0\0\0\365\267\275\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\267\275\0\377\0\0\0\365\0" + "\0\0\255\0\0\0!\0\0\0\1\31\31\31\0\15\15\15\0\0\0\0\0\0\0\0$\0\0\0\271\0" + "\0\0\370\311\321\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\311\321\0\377\0\0\0\371\0\0\0\272\0\0\0" + "$\0\0\0\1\15\15\15\0\5\5\5\0\0\0\0\0\0\0\0&\0\0\0\304\0\0\0\373\330\341\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\330\341\0\377\0\0\0\373\0\0\0\305\0\0\0'\0\0\0\1\5\5\5\0\1\1\1" + "\0\0\0\0\0\0\0\0(\0\0\0\313\0\0\0\374\344\354\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\344\354\0\377" + "\0\0\0\375\0\0\0\313\0\0\0)\0\0\0\1\1\1\1\0\1\1\1\0\0\0\0\0\0\0\0(\0\0\0" + "\313\0\0\0\374\344\354\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\344\354\0\377\0\0\0\375\0\0\0\313\0\0" + "\0)\0\0\0\1\1\1\1\0\5\5\5\0\0\0\0\0\0\0\0&\0\0\0\304\0\0\0\373\330\341\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\330\341\0\377\0\0\0\373\0\0\0\305\0\0\0'\0\0\0\1\5\5\5\0\15\15" + "\15\0\0\0\0\0\0\0\0$\0\0\0\271\0\0\0\370\311\321\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\311\321\0" + "\377\0\0\0\371\0\0\0\272\0\0\0$\0\0\0\1\15\15\15\0\31\31\31\0\0\0\0\0\0\0" + "\0\40\0\0\0\254\0\0\0\365\267\275\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\267\275\0\377\0\0\0\365\0" + "\0\0\255\0\0\0!\0\0\0\1\31\31\31\0)))\0\0\0\0\0\0\0\0\35\0\0\0\234\0\0\0" + "\361\240\246\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\240\246\0\377\0\0\0\361\0\0\0\235\0\0\0\35\0\0\0" + "\1)))\0===\0\0\0\0\0\0\0\0\30\0\0\0\211\0\0\0\354\206\213\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\206" + "\213\0\377\0\0\0\355\0\0\0\212\0\0\0\31\0\0\0\1===\0UUU\0\0\0\0\0\0\0\0\23" + "\0\0\0t\0\0\0\347hk\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377hk\0\377\0\0\0\350\0\0\0u\0\0\0\23\0\0\0" + "\1UUU\0qqq\0\0\0\0\0\0\0\0\15\0\0\0\\\0\0\0\341FH\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377FH\0\377\0" + "\0\0\342\0\0\0]\0\0\0\15\0\0\0\1qqq\0\221\221\221\0\0\0\0\0\0\0\0\6\0\0\0" + "B\0\0\0\331\40!\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\40!\0\377\0\0\0\332\0\0\0C\0\0\0\7\0\0\0\1\221" + "\221\221\0\265\265\265\0\0\0\0\0\0\0\0\1\0\0\0,\0\0\0\312\0\0\0\374\344\354" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\344\354\0\377" + "\0\0\0\375\0\0\0\312\0\0\0,\0\0\0\2\0\0\0\1\265\265\265\0\335\335\335\0\0" + "\0\0\0\0\0\0\1\0\0\0!\0\0\0\254\0\0\0\365\267\275\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\267\275\0\377\0\0\0\365\0\0\0\255\0\0" + "\0\"\0\0\0\1\0\0\0\1\335\335\335\0\377\377\377\0\15\15\15\0\0\0\0\0\0\0\0" + "\30\0\0\0\211\0\0\0\354\206\213\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\206\213\0\377\0\0\0\355\0\0\0\212\0\0\0\31\0\0\0\1\15" + "\15\15\0\377\377\377\0\377\377\377\0===\0\0\0\0\0\0\0\0\17\0\0\0d\0\0\0\343" + "QT\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377QT\0\377\0" + "\0\0\344\0\0\0e\0\0\0\17\0\0\0\1===\0\377\377\377\0\377\377\377\0qqq\0\0" + "\0\0\0\0\0\0\6\0\0\0?\0\0\0\325\30\31\0\376\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\30\31\0\376\0\0\0\326\0\0\0?\0\0\0\6\0\0\0\1qqq\0\377" + "\377\377\0\377\377\377\0\251\251\251\0\0\0\0\0\0\0\0\1\0\0\0&\0\0\0\266\0" + "\0\0\367\306\315\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\335\345\0\377\261\270\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\306\315\0\377\0\0\0\370" + "\0\0\0\266\0\0\0'\0\0\0\2\0\0\0\1\251\251\251\0\377\377\377\0\377\377\377" + "\0\345\345\345\0\0\0\0\0\0\0\0\1\0\0\0\31\0\0\0\212\0\0\0\354\206\213\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\322\332\0\377\36" + "\37\0\377\10\10\0\377\265\273\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\316\326\0\377\230\235\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\206\213\0\377\0\0\0\355\0\0\0\212\0\0\0\31\0\0\0\1\0" + "\0\0\1\345\345\345\0\377\377\377\0\377\377\377\0\377\377\377\0---\0\0\0\0" + "\0\0\0\0\14\0\0\0Z\0\0\0\337BD\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\322\332\0\377\36\37\0\377\0\0\0\377\0\0\0\377\1\1\0\377\201\206\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\265\273\0\377\17" + "\20\0\377\2\2\0\377\224\231\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377BD\0\377\0\0\0\340\0\0\0Z\0\0\0" + "\15\0\0\0\1---\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "qqq\0\0\0\0\0\0\0\0\2\0\0\0.\0\0\0\305\0\0\0\372\340\350\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\322\332\0\377\36\37\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0" + "\0\0\377SV\0\377\353\364\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377w{\0\377\1\1\0\377\0\0\0\377\0" + "\0\0\377\0\0\0\377;>\0\377<>\0\377<>\0\377\303\312\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\340" + "\350\0\377\0\0\0\373\0\0\0\305\0\0\0/\0\0\0\3\0\0\0\1qqq\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\271\271\271\0\0\0\0\0\0\0\0\1" + "\0\0\0\33\0\0\0\224\0\0\0\357\225\232\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\356\367\0\377\26\26\0\377\0\0" + "\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377.0\0\377" + "\330\340\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\345\355\0\377?A" + "\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0" + "\377\1\1\0\377\310\320\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\225\232\0\377\0\0\0\360\0\0\0" + "\225\0\0\0\34\0\0\0\1\0\0\0\1\271\271\271\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\21\21\21\0\0\0\0\0\0\0\0\15\0\0\0" + "]\0\0\0\337FH\0\376\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\257\266\0\377\4\4\0\377\0\0\0\377\0\0\0" + "\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\16\17\0\377\265\273" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\277\306\0\377\23\24\0\377\0\0\0\377\0\0\0\377\0\0\0" + "\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\2\2\0\377\226\233\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377FH\0\377\0\0\0\337\0\0\0^\0\0\0\16\0\0\0\1\21\21" + "\21\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0aaa\0\0\0\0\0\0\0\0\3\0\0\0-\0\0\0\275\0\0\0\370\325\335" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\300\307\0\377\30\31\0\377\0\0\0\377\0\0\0\377\0\0\0" + "\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\1\1\0\377z\177\0\377\355\366" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\356\367\0\377pt\0\377\2\2\0\377\0" + "\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\2\2" + "\0\377\235\243\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\325\335\0\377\0\0\0\371" + "\0\0\0\276\0\0\0-\0\0\0\3\0\0\0\1aaa\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\265\265\265\0\0\0\0\0\0" + "\0\0\1\0\0\0\27\0\0\0\204\0\0\0\353~\203\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\330\341\0\377&'\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377" + "\0\0\0\377\0\0\0\377\0\0\0\377\25\25\0\377\277\306\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\310\317\0\377" + "-/\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0" + "\0\377\0\0\0\377\25\25\0\377\267\275\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377~\203\0\377\0\0\0\354\0\0\0\205\0\0\0\30\0\0\0\1\0\0\0\1\265\265" + "\265\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\35\35\35\0\0\0\0\0\0\0\0\11\0\0\0I\0\0\0\324" + "$%\0\375\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\350\360\0\377EG\0\377" + "\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0" + "\0\0\377\2\2\0\377mq\0\377\352\363\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\342\352\0" + "\377fi\0\377\2\2\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377" + "\0\0\0\377\0\0\0\377\0\0\0\377*,\0\377\333\344\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377$%\0\375\0\0\0\325\0\0\0J\0\0\0\11\0\0" + "\0\1\35\35\35\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0yyy\0\0\0\0\0\0\0\0\2" + "\0\0\0!\0\0\0\236\0\0\0\361\244\252\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\357\370\0\377tx\0\377\1\1\0\377\0\0\0\377\0\0\0\377\0\0\0\377" + "\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\35\36\0\377\235\243\0" + "\377\357\370\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\356\367\0\377\220" + "\225\0\377\15\16\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377" + "\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377gj\0\377\353\364\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\244\252\0\377\0\0\0\362\0" + "\0\0\237\0\0\0\"\0\0\0\2\0\0\0\1yyy\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\331\331\331\0\0\0\0\0\0\0\0\1\0\0\0\16\0\0\0\\\0\0\0\333BD\0\375\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\265\273\0" + "\377\13\14\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0" + "\377\0\0\0\377\0\0\0\377\0\0\0\377-/\0\377\273\302\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\355\366\0\377\177\204" + "\0\377\15\16\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0" + "\0\377\0\0\0\377\0\0\0\377\0\0\0\377\11\12\0\377\246\254\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "BD\0\376\0\0\0\333\0\0\0]\0\0\0\17\0\0\0\1\0\0\0\1\331\331\331\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0QQQ\0\0\0\0\0\0\0\0\2\0\0\0'" + "\0\0\0\251\0\0\0\363\267\275\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\346\356\0\377HK\0\377\0\0\0\377\0\0\0\377" + "\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0" + "\0\0\377=?\0\377\247\255\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\344\354\0\377\206\213\0\377" + "\34\35\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377" + "\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377/1\0\377\325\335\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\267\275\0\377\0\0\0\364\0\0\0\251\0\0\0(\0\0\0\3\0\0\0\1QQQ\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\271\271\271\0\0" + "\0\0\0\0\0\0\1\0\0\0\20\0\0\0d\0\0\0\335FH\0\375\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\211\217\0\377\10\11\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0" + "\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\14\15\0\377qu\0\377" + "\343\353\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\356\367\0\377\254\263\0\377hl\0\377\5\5\0\377\0\0\0\377" + "\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0" + "\0\0\377\0\0\0\377\16\17\0\377\231\237\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377FH\0\376\0\0\0\335\0\0\0d\0\0\0\20\0\0\0\1\0\0\0\1\271\271\271" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0===\0\0\0\0\0\0\0\0\3\0\0\0)\0\0\0\251\0\0\0\363\244\252\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\346\356\0\377fi\0\377\0\0\0\377\0\0\0\377\0\0\0" + "\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377" + "\0\0\0\377\4\4\0\377BD\0\377\206\213\0\377\301\310\0\377\354\365\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\340\350\0\377\230\235\0" + "\377^b\0\377\25\25\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377" + "\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\1\1\0\377Z^" + "\0\377\335\345\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\244\252\0\377" + "\0\0\0\364\0\0\0\251\0\0\0*\0\0\0\3\0\0\0\1===\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\255" + "\255\255\0\0\0\0\0\0\0\0\1\0\0\0\17\0\0\0`\0\0\0\332+-\0\375\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\254\263\0\377\25\25\0\377\0\0\0\377" + "\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0" + "\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\12\13\0\377;>\0\377UX\0" + "\377lp\0\377x|\0\377x|\0\377x|\0\377bf\0\377HK\0\377\6\6\0\377\0\0\0\377" + "\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0" + "\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\37713\0\377\275\304" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "+-\0\375\0\0\0\332\0\0\0a\0\0\0\17\0\0\0\1\0\0\0\1\255\255\255\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0===\0\0\0\0\0\0\0\0\3\0\0\0%\0\0\0\234\0\0\0" + "\360~\203\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\357\370" + "\0\377\216\223\0\377\16\17\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377" + "\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0" + "\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0" + "\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0" + "\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377" + ",.\0\377\247\255\0\377\357\370\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377~\203\0\377\0\0\0\361\0\0\0\235\0\0\0%\0" + "\0\0\3\0\0\0\1===\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\265" + "\265\265\0\0\0\0\0\0\0\0\1\0\0\0\13\0\0\0P\0\0\0\322\0\0\0\374\311\321\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\355" + "\366\0\377\213\221\0\377\17\20\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0" + "\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377" + "\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0" + "\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0" + "\0\377\0\0\0\377\0\0\0\377\0\0\0\37724\0\377\246\254\0\377\357\370\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\311\321\0\377\0\0\0\374\0\0\0\323\0\0\0Q\0\0\0\14\0\0\0\1\0\0\0\1" + "\265\265\265\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0QQQ\0\0\0\0\0\0\0\0\2\0\0\0\34\0\0\0\204\0\0\0\347FH\0\376\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\356\367\0\377\235\243\0\377(*\0\377\0\0\0\377\0\0\0\377\0\0\0\377" + "\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0" + "\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0" + "\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\5\5\0" + "\377hl\0\377\270\276\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377FH\0\377\0\0\0\347\0\0\0\204\0\0\0\35\0\0\0\2\0\0\0\1QQQ\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\321\321" + "\321\0\0\0\0\0\0\0\0\1\0\0\0\5\0\0\0""1\0\0\0\263\0\0\0\365\206\213\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\320\330\0\377\\`\0\377\7" + "\7\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0" + "\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0" + "\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\1\1\0\3778:\0\377\226\233\0" + "\377\344\354\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\206\213\0\377\0\0\0\366\0\0\0\263\0\0\0""1\0\0\0\5\0\0\0\1\0\0\0\1" + "\321\321\321\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0yyy\0\0\0\0\0\0\0\0\1\0\0\0\17\0\0\0a\0\0\0" + "\327\0\0\0\374\276\305\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\357\370\0\377\245\253\0\377w{\0\377:=\0\377\3\3\0\377" + "\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0" + "\0\0\377\0\0\0\377\0\0\0\377\1\1\0\377*,\0\377dh\0\377\217\224\0\377\350" + "\361\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\276\305\0\377\0\0\0\375\0\0\0\330\0\0\0b\0\0" + "\0\20\0\0\0\1\0\0\0\1yyy\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + ")))\0\0\0\0\0\0\0\0\3\0\0\0\40\0\0\0\207\0\0\0\346/1\0\376\357\370\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\357\370\0\377\305\314\0\377\247\255\0\377" + "\212\220\0\377x}\0\377x}\0\377x}\0\377x}\0\377{\200\0\377\240\246\0\377\270" + "\276\0\377\357\370\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\357\370\0\377/1\0\376\0\0\0\347\0\0\0\210\0\0\0!\0\0\0\3\0\0\0" + "\1)))\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\265\265" + "\265\0\0\0\0\0\0\0\0\1\0\0\0\5\0\0\0""0\0\0\0\253\0\0\0\364\\`\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\\`\0\377\0\0\0\364\0\0\0\254\0\0\0""1" + "\0\0\0\6\0\0\0\1\0\0\0\1\265\265\265\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0qqq\0\0\0\0\0\0\0\0\1\0\0\0\14\0\0" + "\0T\0\0\0\317\0\0\0\373\202\207\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\202\207\0\377\0\0\0\373" + "\0\0\0\317\0\0\0T\0\0\0\15\0\0\0\1\0\0\0\1qqq\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0""555\0\0\0\0\0\0\0\0\2\0\0\0\30\0\0\0q\0\0\0\332\0\0\0\374\240\246\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\240\246\0\377\0" + "\0\0\374\0\0\0\333\0\0\0r\0\0\0\31\0\0\0\2\0\0\0\1""555\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\315\315\315\0\1\1\1\0\0\0\0\1\0\0\0\4\0\0\0\"\0" + "\0\0\205\0\0\0\342\2\2\0\375\267\275\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\267" + "\275\0\377\2\2\0\375\0\0\0\342\0\0\0\206\0\0\0#\0\0\0\4\0\0\0\1\1\1\1\1\315" + "\315\315\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\235\235" + "\235\0\0\0\0\0\0\0\0\1\0\0\0\5\0\0\0+\0\0\0\226\0\0\0\350\25\25\0\376\306" + "\315\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\306\315\0\377\25\25\0\376\0\0\0\351\0\0\0\226\0\0\0+\0\0\0\6\0" + "\0\0\1\0\0\0\1\235\235\235\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0uuu\0\0\0\0\0\0\0\0\1\0\0\0\6\0\0\0" + """2\0\0\0\244\0\0\0\355\40!\0\376\315\325\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\315\325\0\377\40!\0\376\0\0\0\356\0\0\0\245\0\0\0""3\0" + "\0\0\7\0\0\0\1\0\0\0\1uuu\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0UUU\0\0" + "\0\0\0\0\0\0\1\0\0\0\11\0\0\0@\0\0\0\260\0\0\0\360$%\0\376\315\325\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\315\325\0\377$%\0\377\0\0\0\361\0\0\0\260\0\0\0A\0\0\0" + "\12\0\0\0\1\0\0\0\1UUU\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\375\375\375\0===\0\0\0\0\1\0\0\0\2\0\0\0\16\0\0\0H\0\0\0\264\0\0\0\360" + "\40!\0\376\306\315\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\306\315\0\377\40!\0\376\0\0\0\361\0\0\0\265\0\0\0I\0\0\0\16" + "\0\0\0\2\0\0\0\1===\1\375\375\375\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\351\351\351\0---\0\0\0\0\1\0\0\0\2\0\0\0\17" + "\0\0\0I\0\0\0\260\0\0\0\355\25\25\0\376\267\275\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\267\275\0\377\25\25\0\376\0\0\0\356\0\0\0\260\0\0\0I\0\0\0" + "\20\0\0\0\2\0\0\0\1---\1\351\351\351\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\335\335\335\0" + "%%%\0\0\0\0\1\0\0\0\2\0\0\0\16\0\0\0@\0\0\0\244\0\0\0\350\2\2\0\375\240\246" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\240\246\0\377\2\2\0\375\0\0\0\351\0\0\0\245\0\0\0@\0\0\0\16" + "\0\0\0\2\0\0\0\1%%%\1\335\335\335\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\331\331\331\0%%%\0\0\0\0\1\0\0\0\2\0\0\0\12\0\0\0""2\0\0\0\226" + "\0\0\0\342\0\0\0\374\202\207\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\202\207\0\377\0\0\0\374\0\0\0\343\0\0\0\226\0\0\0""3\0\0\0" + "\12\0\0\0\2\0\0\0\1%%%\1\331\331\331\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\335\335\335\0---\0\0\0\0\1\0\0" + "\0\1\0\0\0\6\0\0\0*\0\0\0\205\0\0\0\332\0\0\0\373\\`\0\377\357\370\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\357" + "\370\0\377\\`\0\377\0\0\0\373\0\0\0\333\0\0\0\206\0\0\0+\0\0\0\6\0\0\0\1" + "\0\0\0\1---\1\335\335\335\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\351\351\351\0" + "===\0\0\0\0\1\0\0\0\1\0\0\0\5\0\0\0#\0\0\0r\0\0\0\317\0\0\0\364/1\0\376\276" + "\305\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\276\305\0\377/1\0\376" + "\0\0\0\365\0\0\0\317\0\0\0r\0\0\0#\0\0\0\6\0\0\0\1\0\0\0\1===\1\351\351\351" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\375\375\375" + "\0UUU\0\0\0\0\0\0\0\0\1\0\0\0\4\0\0\0\31\0\0\0S\0\0\0\253\0\0\0\346\0\0\0" + "\374\206\213\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\206\213\0\377\0\0\0\375\0\0\0\347\0\0\0" + "\254\0\0\0T\0\0\0\31\0\0\0\4\0\0\0\1\0\0\0\1UUU\0\375\375\375\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0uuu\0\0\0\0\0\0\0\0\1\0\0\0\3\0\0\0\14\0\0\0/\0\0\0\210\0" + "\0\0\327\0\0\0\366FH\0\376\311\321\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\311\321\0\377FH\0\377\0\0\0\367\0\0\0\330\0\0\0\210\0\0\0""0\0\0\0\15\0" + "\0\0\3\0\0\0\1\0\0\0\1uuu\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\235\235\235\0\1\1\1\0\0\0\0\1\0\0\0\1\0\0\0\5\0" + "\0\0!\0\0\0a\0\0\0\263\0\0\0\347\0\0\0\374~\203\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377~\203\0\377\0\0\0" + "\374\0\0\0\347\0\0\0\264\0\0\0b\0\0\0!\0\0\0\6\0\0\0\1\0\0\0\1\1\1\1\1\235" + "\235\235\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\315\315\315\0""555\0\0\0\0\0\0\0\0\1\0" + "\0\0\3\0\0\0\17\0\0\0""1\0\0\0\204\0\0\0\322\0\0\0\361+-\0\375\244\252\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\244\252\0\377+-\0\375\0\0\0\361\0\0\0\323\0\0\0" + "\204\0\0\0""1\0\0\0\20\0\0\0\3\0\0\0\1\0\0\0\1""555\0\315\315\315\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0qqq\0\0\0\0\0\0" + "\0\0\1\0\0\0\1\0\0\0\5\0\0\0\34\0\0\0P\0\0\0\234\0\0\0\332\0\0\0\364FH\0" + "\376\267\275\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\267\275\0\377FH" + "\0\376\0\0\0\364\0\0\0\333\0\0\0\235\0\0\0Q\0\0\0\35\0\0\0\5\0\0\0\1\0\0" + "\0\1\0\0\0\1qqq\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\265\265\265\0)))\0\0" + "\0\0\0\0\0\0\1\0\0\0\3\0\0\0\14\0\0\0%\0\0\0`\0\0\0\251\0\0\0\335\0\0\0\364" + "BD\0\376\244\252\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\244\252\0\377BD\0\376\0\0\0\364\0\0\0\336\0\0\0\251\0\0\0a\0\0\0&" + "\0\0\0\14\0\0\0\3\0\0\0\1\0\0\0\1)))\0\265\265\265\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0yyy\0\0\0\0\0\0\0" + "\0\1\0\0\0\1\0\0\0\3\0\0\0\17\0\0\0)\0\0\0d\0\0\0\251\0\0\0\333\0\0\0\362" + "$%\0\375~\203\0\377\325\335\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\325\335\0\377~\203\0\377$%\0\375\0\0\0\362\0\0\0\334\0\0\0\252\0\0\0" + "d\0\0\0)\0\0\0\17\0\0\0\4\0\0\0\1\0\0\0\1\0\0\0\1yyy\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\321\321\321\0QQQ\0\0\0\0\0\0\0\0\1\0\0\0\1\0" + "\0\0\4\0\0\0\20\0\0\0(\0\0\0\\\0\0\0\236\0\0\0\325\0\0\0\354\0\0\0\372FH" + "\0\377\225\232\0\377\340\350\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\340" + "\350\0\377\225\232\0\377FH\0\377\0\0\0\372\0\0\0\354\0\0\0\325\0\0\0\236" + "\0\0\0]\0\0\0(\0\0\0\20\0\0\0\4\0\0\0\1\0\0\0\1\0\0\0\1QQQ\0\321\321\321" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\265\265\265\0===\0\0\0\0\0\0\0\0\1\0\0\0\1\0\0\0\3\0\0\0" + "\16\0\0\0\"\0\0\0I\0\0\0\205\0\0\0\275\0\0\0\337\0\0\0\360\0\0\0\374BD\0" + "\377\206\213\0\377\306\315\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\306\315\0\377\206" + "\213\0\377BD\0\377\0\0\0\374\0\0\0\360\0\0\0\340\0\0\0\276\0\0\0\205\0\0" + "\0J\0\0\0\"\0\0\0\16\0\0\0\4\0\0\0\1\0\0\0\1\0\0\0\1===\0\265\265\265\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\255\255" + "\255\0===\0\0\0\0\0\0\0\0\1\0\0\0\1\0\0\0\2\0\0\0\11\0\0\0\27\0\0\0-\0\0" + "\0]\0\0\0\225\0\0\0\305\0\0\0\337\0\0\0\355\0\0\0\370\30\31\0\376QT\0\377" + "\206\213\0\377\267\275\0\377\344\354\0\377\360\371\0\377\360\371\0\377\360" + "\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371" + "\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0" + "\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377\360\371\0\377" + "\344\354\0\377\267\275\0\377\206\213\0\377QT\0\377\30\31\0\376\0\0\0\370" + "\0\0\0\355\0\0\0\340\0\0\0\306\0\0\0\225\0\0\0^\0\0\0-\0\0\0\30\0\0\0\11" + "\0\0\0\3\0\0\0\1\0\0\0\1\0\0\0\1===\0\255\255\255\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\271\271\271\0QQQ\0\0\0\0\0\0\0\0\1\0\0\0\1" + "\0\0\0\1\0\0\0\3\0\0\0\16\0\0\0\33\0\0\0/\0\0\0Z\0\0\0\212\0\0\0\266\0\0" + "\0\326\0\0\0\344\0\0\0\355\0\0\0\365\0\0\0\374\40!\0\377FH\0\377hk\0\377" + "\206\213\0\377\240\246\0\377\267\275\0\377\311\321\0\377\330\341\0\377\344" + "\354\0\377\344\354\0\377\330\341\0\377\311\321\0\377\267\275\0\377\240\246" + "\0\377\206\213\0\377hk\0\377FH\0\377\40!\0\377\0\0\0\375\0\0\0\366\0\0\0" + "\355\0\0\0\344\0\0\0\326\0\0\0\266\0\0\0\212\0\0\0Z\0\0\0/\0\0\0\33\0\0\0" + "\16\0\0\0\4\0\0\0\2\0\0\0\1\0\0\0\1\0\0\0\1QQQ\0\271\271\271\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\331\331\331\0yyy\0\35\35\35\0\0\0\0\0\0\0\0\1\0" + "\0\0\1\0\0\0\1\0\0\0\3\0\0\0\15\0\0\0\31\0\0\0'\0\0\0@\0\0\0e\0\0\0\212\0" + "\0\0\255\0\0\0\312\0\0\0\332\0\0\0\342\0\0\0\350\0\0\0\355\0\0\0\361\0\0" + "\0\365\0\0\0\371\0\0\0\373\0\0\0\375\0\0\0\375\0\0\0\374\0\0\0\371\0\0\0" + "\366\0\0\0\362\0\0\0\355\0\0\0\350\0\0\0\342\0\0\0\332\0\0\0\313\0\0\0\255" + "\0\0\0\212\0\0\0e\0\0\0@\0\0\0'\0\0\0\31\0\0\0\16\0\0\0\4\0\0\0\2\0\0\0\1" + "\0\0\0\1\0\0\0\1\35\35\35\0yyy\0\331\331\331\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\265\265\265\0aaa\0\21\21\21\0\0\0\0\0\0\0\0\1\0\0\0\1\0\0\0\1\0\0" + "\0\2\0\0\0\6\0\0\0\17\0\0\0\31\0\0\0!\0\0\0,\0\0\0C\0\0\0]\0\0\0u\0\0\0\212" + "\0\0\0\235\0\0\0\255\0\0\0\272\0\0\0\305\0\0\0\314\0\0\0\314\0\0\0\305\0" + "\0\0\272\0\0\0\255\0\0\0\235\0\0\0\212\0\0\0u\0\0\0]\0\0\0C\0\0\0,\0\0\0" + "\"\0\0\0\31\0\0\0\20\0\0\0\7\0\0\0\2\0\0\0\2\0\0\0\1\0\0\0\1\0\0\0\1\21\21" + "\21\0aaa\0\265\265\265\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\271\271" + "\271\0qqq\0---\0\0\0\0\0\0\0\0\1\0\0\0\1\0\0\0\1\0\0\0\1\0\0\0\1\0\0\0\2" + "\0\0\0\7\0\0\0\15\0\0\0\23\0\0\0\31\0\0\0\35\0\0\0!\0\0\0$\0\0\0'\0\0\0)" + "\0\0\0)\0\0\0'\0\0\0%\0\0\0!\0\0\0\36\0\0\0\31\0\0\0\24\0\0\0\16\0\0\0\10" + "\0\0\0\3\0\0\0\2\0\0\0\1\0\0\0\1\0\0\0\1\0\0\0\1\0\0\0\1---\0qqq\0\271\271" + "\271\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\345\345\345\0" + "\251\251\251\0qqq\0===\0\15\15\15\0\0\0\0\0\0\0\0\1\0\0\0\1\0\0\0\1\0\0\0" + "\1\0\0\0\1\0\0\0\1\0\0\0\1\0\0\0\1\0\0\0\1\0\0\0\1\0\0\0\1\0\0\0\1\0\0\0" + "\1\0\0\0\1\0\0\0\1\0\0\0\1\0\0\0\1\0\0\0\1\0\0\0\1\0\0\0\1\0\0\0\1\15\15" + "\15\0===\0qqq\0\251\251\251\0\345\345\345\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\335\335\335\0" + "\265\265\265\0\221\221\221\0qqq\0UUU\0===\0)))\0\31\31\31\0\15\15\15\0\5" + "\5\5\0\1\1\1\0\1\1\1\0\5\5\5\0\15\15\15\0\31\31\31\0)))\0===\0UUU\0qqq\0" + "\221\221\221\0\265\265\265\0\335\335\335\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0", +}; + diff --git a/samples/graphics/rsx_Basic_Wallpaper/include/geometry.h b/samples/graphics/rsx_Basic_Wallpaper/include/geometry.h new file mode 100644 index 00000000..0fc8921b --- /dev/null +++ b/samples/graphics/rsx_Basic_Wallpaper/include/geometry.h @@ -0,0 +1,12 @@ +#ifndef __GEOMETRY_H__ +#define __GEOMETRY_H__ + +#include "mesh.h" + +SMeshBuffer* createCube(f32 size); +SMeshBuffer* createDonut(f32 outerRadius,f32 innerRadius,u32 polyCntX,u32 polyCntY); +SMeshBuffer* createSphere(f32 radius,u32 polyCntX,u32 polyCntY); +SMeshBuffer* createQuad(f32 size, float z); +SMeshBuffer* createQuad(Point3 P1, Point3 P2, Point3 P3, Point3 P4); + +#endif diff --git a/samples/graphics/rsx_Basic_Wallpaper/include/irrallocator.h b/samples/graphics/rsx_Basic_Wallpaper/include/irrallocator.h new file mode 100644 index 00000000..777acd6f --- /dev/null +++ b/samples/graphics/rsx_Basic_Wallpaper/include/irrallocator.h @@ -0,0 +1,73 @@ +#ifndef __IRRALLOCATOR_H__ +#define __IRRALLOCATOR_H__ + +#include + +namespace irr +{ + namespace core + { + template< typename T > + class allocator + { + public: + T* allocate(u32 cnt) + { + return (T*)operator new(cnt*sizeof(T)); + } + + void deallocate(T *ptr) + { + operator delete(ptr); + } + + void construct(T *ptr,const T& elem) + { + new ((void*)ptr) T(elem); + } + + void destruct(T *ptr) + { + ptr->~T(); + } + }; + + template< typename T > + class allocatorRSX + { + public: + T* allocate(u32 cnt) + { + return (T*)operator new(cnt*sizeof(T)); + } + + void deallocate(T *ptr) + { + operator delete(ptr); + } + + void construct(T *ptr,const T& elem) + { + new ((void*)ptr) T(elem); + } + + void destruct(T *ptr) + { + ptr->~T(); + } + + protected: + void* operator new(size_t size) + { + return rsxMemalign(64,size); + } + + void operator delete(void *ptr) + { + rsxFree(ptr); + } + }; + } +} + +#endif diff --git a/samples/graphics/rsx_Basic_Wallpaper/include/irrarray.h b/samples/graphics/rsx_Basic_Wallpaper/include/irrarray.h new file mode 100644 index 00000000..f5ae8499 --- /dev/null +++ b/samples/graphics/rsx_Basic_Wallpaper/include/irrarray.h @@ -0,0 +1,162 @@ +#ifndef __IRRARRAY_H__ +#define __IRRARRAY_H__ + +#include "irrallocator.h" + +namespace irr +{ + namespace core + { + template< class T, typename TAlloc = allocator > + class array + { + public: + array() : data(NULL),used(0),allocated(0),free_it(true),is_sorted(true) {}; + array(u32 start_cnt) : data(NULL),used(0),allocated(0),free_it(true),is_sorted(true) + { + reallocate(start_cnt); + } + array(const array& other) : data(NULL) + { + *this = other; + } + + ~array() + { + u32 i; + + if(free_it==true) { + for(i=0;iallocated) { + T e(elem); + u32 newAlloc; + + newAlloc = used + 1 + (allocated<500 ? (allocated<5 ? 5 : used) : used>>2); + + reallocate(newAlloc); + allocator.construct(&data[used++],e); + } else + allocator.construct(&data[used++],elem); + + is_sorted = false; + } + + void push_front(const T& elem) + { + insert(elem); + } + + void insert(const T& elem,u32 index = 0) + { + u32 i; + + if(index>used) return; + if((used + 1)>allocated) reallocate(used + 1); + + for(i=used;i>index;i--) { + if(iindex) allocator.destruct(&data[index]); + + allocator.construct(&data[index],elem); + is_sorted = false; + used++; + } + + void erase(u32 index) + { + u32 i; + + for(i=index+1;iused) reallocate(new_cnt); + used = new_cnt; + } + + void clear() + { + u32 i; + + for(i=0;i +#include + +#include + +#include "irrarray.h" + +using namespace irr; +using namespace Vectormath::Aos; + +template< class T > +inline const T& min_(const T& a,const T& b) +{ + return a +inline const T& max_(const T& a,const T& b) +{ + return a +inline const T clamp(const T& val,const T& low,const T& high) +{ + return min_(max_(val,low),high); +} + +class SColor +{ +public: + SColor() : color(0) {}; + SColor(u32 c) : color(c) {}; + SColor(u8 a,u8 r,u8 g,u8 b) : R(r),G(g),B(b),A(a) {}; + SColor(const SColor& other) : color(other.color) {}; + + u8 getRed() const { return R; } + u8 getGreen() const { return G; } + u8 getBlue() const { return B; } + u8 getAlpha() const { return A; } + + union { + u32 color; + struct { + u8 R,G,B,A; + }; + }; +}; + +struct S3DVertex +{ + S3DVertex() {}; + S3DVertex(f32 x,f32 y,f32 z,f32 nx,f32 ny,f32 nz,SColor c,f32 tu,f32 tv) + : pos(x,y,z),nrm(nx,ny,nz),col(c),u(tu),v(tv) {}; + S3DVertex(const Vector3& _pos,const Vector3& _nrm,const SColor& c,f32 tu,f32 tv) + : pos(_pos),nrm(_nrm),col(c),u(tu),v(tv) {}; + + inline S3DVertex& operator=(const S3DVertex& other) + { + pos = other.pos; + nrm = other.nrm; + col = other.col; + u = other.u; + v = other.v; + return *this; + } + + Vector3 pos; + Vector3 nrm; + SColor col; + + f32 u,v; +}; + + +class SMeshBuffer +{ +public: + SMeshBuffer() : pos_off(0),nrm_off(0),col_off(0),uv_off(0),ind_off(0) {}; + virtual ~SMeshBuffer() + { + } + + virtual const void* getVertices() const + { + return vertices.const_pointer(); + } + + virtual void* getVertices() + { + return vertices.pointer(); + } + + virtual u32 getVertexCount() const + { + return vertices.size(); + } + + virtual const u32* getIndices() const + { + return indices.const_pointer(); + } + + virtual u32* getIndices() + { + return indices.pointer(); + } + + virtual u32 getIndexCount() const + { + return indices.size(); + } + + core::array< u32, core::allocatorRSX< u32 > > indices; + core::array< S3DVertex, core::allocatorRSX< S3DVertex > > vertices; + + u32 pos_off; + u32 nrm_off; + u32 col_off; + u32 uv_off; + + u32 ind_off; +}; + +#endif diff --git a/samples/graphics/rsx_Basic_Wallpaper/include/rsxutil.h b/samples/graphics/rsx_Basic_Wallpaper/include/rsxutil.h new file mode 100644 index 00000000..209684ec --- /dev/null +++ b/samples/graphics/rsx_Basic_Wallpaper/include/rsxutil.h @@ -0,0 +1,40 @@ +#ifndef __RSXUTIL_H__ +#define __RSXUTIL_H__ + +#include +#include + +#include + + +#define DEFUALT_CB_SIZE 0x80000 // 512Kb default command buffer size +#define HOST_STATE_CB_SIZE 0x10000 // 64Kb state command buffer size (used for resetting certain default states) +#define HOST_ADDR_ALIGNMENT (1024*1024) +#define HOSTBUFFER_SIZE (128*1024*1024) +#define CB_SIZE 0x100000 + +#define FRAME_BUFFER_COUNT 2 + +extern gcmContextData *context; + +extern u32 curr_fb; + +extern u32 display_width; +extern u32 display_height; + +extern u32 depth_pitch; +extern u32 depth_offset; +extern u32 *depth_buffer; + +extern u32 color_pitch; +extern u32 color_offset[FRAME_BUFFER_COUNT]; +extern u32 *color_buffer[FRAME_BUFFER_COUNT]; + +extern f32 aspect_ratio; + +void setRenderTarget(u32 index); +void init_screen(void *host_addr,u32 size); +void waitflip(); +void flip(); + +#endif diff --git a/samples/graphics/rsx_Basic_Wallpaper/rsx_basic_wallpaper.png b/samples/graphics/rsx_Basic_Wallpaper/rsx_basic_wallpaper.png new file mode 100644 index 00000000..0488089d Binary files /dev/null and b/samples/graphics/rsx_Basic_Wallpaper/rsx_basic_wallpaper.png differ diff --git a/samples/graphics/rsx_Basic_Wallpaper/shaders/diffuse_specular_shader.vcg b/samples/graphics/rsx_Basic_Wallpaper/shaders/diffuse_specular_shader.vcg new file mode 100644 index 00000000..7671ff26 --- /dev/null +++ b/samples/graphics/rsx_Basic_Wallpaper/shaders/diffuse_specular_shader.vcg @@ -0,0 +1,16 @@ +void main(float4 position : POSITION, + float4 color : COLOR0, + float2 texcoord : TEXCOORD0, + + uniform float4x4 modelViewProj, + + out float4 oPosition : POSITION, + out float4 oColor : COLOR0, + out float2 oTexCoord : TEXCOORD0 + ) + { + oPosition = mul(modelViewProj, position); + oColor = color; + oTexCoord = texcoord; + } + \ No newline at end of file diff --git a/samples/graphics/rsx_Basic_Wallpaper/shaders/scanlines.fcg b/samples/graphics/rsx_Basic_Wallpaper/shaders/scanlines.fcg new file mode 100644 index 00000000..be391409 --- /dev/null +++ b/samples/graphics/rsx_Basic_Wallpaper/shaders/scanlines.fcg @@ -0,0 +1,44 @@ +void main +( + float4 position : TEXCOORD0, + float3 normal : TEXCOORD1, + float2 texcoord : TEXCOORD0, + + uniform float4 scanline, + uniform sampler2D texture, + + out float4 oColor +) +{ + //Scanline parameters + //------------------------------------------------- + //scanline.x => scanline density, values 100 - 200 + //scanline.y => scanline depth / contrast, values 2 - 10 + //scanline.z => scanline brightnes, value 0 - 1 + //scanline.w => scanline type horizontal (value 1.0f), vertical (value 2.0f), none (val 0.0f) + + float dark = scanline.z; + + //pos Absolute from [0,1] to [-1,1] + float posxAbs = position.x * 2.0 - 1.0; + float posyAbs = position.y * 2.0 - 1.0; + + //vertical scanline + if (scanline.w > 0.19) { + dark += (sin(3.1415926f * posxAbs * scanline.x) / scanline.y); + } + else + //horizontal scanline + if (scanline.w > 0.09) { + dark += (sin(3.1415926f * posyAbs * scanline.x) / scanline.y); + + } + //no scanline + else + dark = 1.0f; + + float4 texel = tex2D(texture,texcoord); + float3 color = texel.xyz * dark; + + oColor = float4(color, texel.w); +} diff --git a/samples/graphics/rsx_Basic_Wallpaper/source/geometry.cpp b/samples/graphics/rsx_Basic_Wallpaper/source/geometry.cpp new file mode 100644 index 00000000..9b884b28 --- /dev/null +++ b/samples/graphics/rsx_Basic_Wallpaper/source/geometry.cpp @@ -0,0 +1,302 @@ +#include + +#include "geometry.h" + + +SMeshBuffer* createQuad(Point3 P1, Point3 P2, Point3 P3, Point3 P4) +{ + u32 i; + SColor col(255, 255, 255, 255); + SMeshBuffer* buffer = new SMeshBuffer(); + const u16 u[6] = { 0,1,2, 0,3,1 }; + + buffer->indices.set_used(6); + + for (i = 0; i < 6; i++) buffer->indices[i] = u[i]; + + buffer->vertices.set_used(4); + + // position, normal, texture + buffer->vertices[0] = S3DVertex(P1.getX(), P1.getY(), P1.getZ(), -1, -1, -1, col, 0, 1); + buffer->vertices[1] = S3DVertex(P2.getX(), P2.getY(), P2.getZ(), 1, -1, -1, col, 1, 0); + buffer->vertices[2] = S3DVertex(P3.getX(), P3.getY(), P3.getZ(), 1, 1, -1, col, 0, 0); + buffer->vertices[3] = S3DVertex(P4.getX(), P4.getY(), P4.getZ(), -1, 1, -1, col, 1, 1); + + + rsxAddressToOffset(&buffer->vertices[0].pos, &buffer->pos_off); + rsxAddressToOffset(&buffer->vertices[0].nrm, &buffer->nrm_off); + rsxAddressToOffset(&buffer->vertices[0].col, &buffer->col_off); + rsxAddressToOffset(&buffer->vertices[0].u, &buffer->uv_off); + rsxAddressToOffset(&buffer->indices[0], &buffer->ind_off); + + return buffer; +} + +SMeshBuffer* createQuad(f32 size, float z) +{ + u32 i; + SColor col(255, 255, 255, 255); + SMeshBuffer* buffer = new SMeshBuffer(); + const u16 u[6] = { 0,1,2, 0,3,1 }; + + buffer->indices.set_used(6); + + for (i = 0; i < 6; i++) buffer->indices[i] = u[i]; + + buffer->vertices.set_used(4); + + // position, normal, texture + buffer->vertices[0] = S3DVertex(-1.0, -1.0, z, -1, -1, -1, col, 0, 1); + buffer->vertices[1] = S3DVertex( 1.0, 1.0, z, 1, -1, -1, col, 1, 0); + buffer->vertices[2] = S3DVertex(-1.0, 1.0, z, 1, 1, -1, col, 0, 0); + buffer->vertices[3] = S3DVertex( 1.0, -1.0, z, -1, 1, -1, col, 1, 1); + + //centre and resize + //for (i = 0; i < 4; i++) { + // //center + // buffer->vertices[i].pos += Vector3(-0.5f, 0.5f, 0.0f); + // //resize + // buffer->vertices[i].pos *= size; + //} + + rsxAddressToOffset(&buffer->vertices[0].pos, &buffer->pos_off); + rsxAddressToOffset(&buffer->vertices[0].nrm, &buffer->nrm_off); + rsxAddressToOffset(&buffer->vertices[0].col, &buffer->col_off); + rsxAddressToOffset(&buffer->vertices[0].u, &buffer->uv_off); + rsxAddressToOffset(&buffer->indices[0], &buffer->ind_off); + + return buffer; +} + +SMeshBuffer* createCube(f32 size) +{ + u32 i; + SColor col(255,255,255,255); + SMeshBuffer *buffer = new SMeshBuffer(); + const u16 u[36] = { 0,1,2, 0,2,3, 1,4,5, 1,5,2, 4,7,6, 4,6,5, + 7,0,3, 7,3,6, 9,2,5, 9,5,8, 0,10,11, 0,7,10}; + + buffer->indices.set_used(36); + for(i=0;i<36;i++) buffer->indices[i] = u[i]; + + buffer->vertices.set_used(12); + + buffer->vertices[0] = S3DVertex(0,0,0, -1,-1,-1, col, 1, 0); + buffer->vertices[1] = S3DVertex(1,0,0, 1,-1,-1, col, 1, 1); + buffer->vertices[2] = S3DVertex(1,1,0, 1, 1,-1, col, 0, 1); + buffer->vertices[3] = S3DVertex(0,1,0, -1, 1,-1, col, 0, 0); + buffer->vertices[4] = S3DVertex(1,0,1, 1,-1, 1, col, 1, 0); + buffer->vertices[5] = S3DVertex(1,1,1, 1, 1, 1, col, 0, 0); + buffer->vertices[6] = S3DVertex(0,1,1, -1, 1, 1, col, 0, 1); + buffer->vertices[7] = S3DVertex(0,0,1, -1,-1, 1, col, 1, 1); + buffer->vertices[8] = S3DVertex(0,1,1, -1, 1, 1, col, 1, 0); + buffer->vertices[9] = S3DVertex(0,1,0, -1, 1,-1, col, 1, 1); + buffer->vertices[10] = S3DVertex(1,0,1, 1,-1, 1, col, 0, 1); + buffer->vertices[11] = S3DVertex(1,0,0, 1,-1,-1, col, 0, 0); + + for(i=0;i<12;i++) { + buffer->vertices[i].pos -= Vector3(0.5f,0.5f,0.5f); + buffer->vertices[i].pos *= size; + } + + rsxAddressToOffset(&buffer->vertices[0].pos,&buffer->pos_off); + rsxAddressToOffset(&buffer->vertices[0].nrm,&buffer->nrm_off); + rsxAddressToOffset(&buffer->vertices[0].col,&buffer->col_off); + rsxAddressToOffset(&buffer->vertices[0].u,&buffer->uv_off); + rsxAddressToOffset(&buffer->indices[0],&buffer->ind_off); + + return buffer; +} + +SMeshBuffer* createDonut(f32 outerRadius,f32 innerRadius,u32 polyCntX,u32 polyCntY) +{ + u32 i,x,y,level; + SColor col(100,255,255,255); + SMeshBuffer *buffer = new SMeshBuffer(); + + if(polyCntX<2) polyCntX = 2; + if(polyCntY<2) polyCntY = 2; + while(polyCntX*polyCntY>32767) { + polyCntX /= 2; + polyCntY /= 2; + } + + f32 ay = 0; + const f32 angleX = 2*M_PI/polyCntX; + const f32 angleY = 2*M_PI/polyCntY; + const u32 polyCntXpitch = polyCntX +1; + const u32 polyCntYpitch = polyCntY + 1; + + buffer->vertices.set_used(polyCntYpitch*polyCntXpitch); + buffer->indices.set_used(polyCntY*polyCntX*6); + + rsxAddressToOffset(&buffer->vertices[0].pos,&buffer->pos_off); + rsxAddressToOffset(&buffer->vertices[0].nrm,&buffer->nrm_off); + rsxAddressToOffset(&buffer->vertices[0].col,&buffer->col_off); + rsxAddressToOffset(&buffer->vertices[0].u,&buffer->uv_off); + rsxAddressToOffset(&buffer->indices[0],&buffer->ind_off); + + i = 0; + for(y=0;y<=polyCntY;y++) { + f32 axz = 0; + + const f32 sinay = sinf(ay); + const f32 cosay = cosf(ay); + const f32 tu = (f32)y/(f32)polyCntY; + for(x=0;x<=polyCntX;x++) { + const Vector3 pos(static_cast((outerRadius - (innerRadius*cosf(axz)))*cosay), + static_cast((outerRadius - (innerRadius*cosf(axz)))*sinay), + static_cast(innerRadius*sinf(axz))); + + const Vector3 nrm(static_cast(-cosf(axz)*cosay), + static_cast(-cosf(axz)*sinay), + static_cast(sinf(axz))); + + buffer->vertices[i] = S3DVertex(pos,nrm,col,tu,(f32)x/(f32)polyCntX); + + axz += angleX; + i++; + } + ay += angleY; + } + + i = 0; + level = 0; + for(y=0;yindices[i++] = curr; + buffer->indices[i++] = curr + polyCntXpitch; + buffer->indices[i++] = curr + 1 + polyCntXpitch; + + buffer->indices[i++] = curr; + buffer->indices[i++] = curr + 1 + polyCntXpitch; + buffer->indices[i++] = curr + 1; + } + + buffer->indices[i++] = level + polyCntX; + buffer->indices[i++] = level + polyCntX - 1; + buffer->indices[i++] = level + polyCntX - 1 + polyCntXpitch; + + buffer->indices[i++] = level + polyCntX; + buffer->indices[i++] = level + polyCntX - 1 + polyCntXpitch; + buffer->indices[i++] = level + polyCntX + polyCntXpitch; + + level += polyCntXpitch; + } + + return buffer; +} + +SMeshBuffer* createSphere(f32 radius,u32 polyCntX,u32 polyCntY) +{ + u32 i,p1,p2,level; + u32 x,y,polyCntXpitch; + const f32 RECIPROCAL_PI = 1.0f/M_PI; + SMeshBuffer *buffer = new SMeshBuffer(); + + if(polyCntX<2) polyCntX = 2; + if(polyCntY<2) polyCntY = 2; + if(polyCntX*polyCntY>32767) { + if(polyCntX>polyCntY) + polyCntX = 32767/polyCntY-1; + else + polyCntY = 32767/(polyCntX+1); + } + polyCntXpitch = polyCntX+1; + + buffer->vertices.set_used((polyCntXpitch*polyCntY) + 2); + buffer->indices.set_used((polyCntX*polyCntY)*6); + + rsxAddressToOffset(&buffer->vertices[0].pos,&buffer->pos_off); + rsxAddressToOffset(&buffer->vertices[0].nrm,&buffer->nrm_off); + rsxAddressToOffset(&buffer->vertices[0].col,&buffer->col_off); + rsxAddressToOffset(&buffer->vertices[0].u,&buffer->uv_off); + rsxAddressToOffset(&buffer->indices[0],&buffer->ind_off); + + i = 0; + level = 0; + for(p1=0;p1indices[i++] = curr; + buffer->indices[i++] = curr + polyCntXpitch; + buffer->indices[i++] = curr + 1 + polyCntXpitch; + + buffer->indices[i++] = curr; + buffer->indices[i++] = curr + 1 + polyCntXpitch; + buffer->indices[i++] = curr + 1; + } + + buffer->indices[i++] = level + polyCntX; + buffer->indices[i++] = level + polyCntX - 1; + buffer->indices[i++] = level + polyCntX - 1 + polyCntXpitch; + + buffer->indices[i++] = level + polyCntX; + buffer->indices[i++] = level + polyCntX - 1 + polyCntXpitch; + buffer->indices[i++] = level + polyCntX + polyCntXpitch; + + level += polyCntXpitch; + } + + const u32 polyCntSq = polyCntXpitch*polyCntY; + const u32 polyCntSq1 = polyCntSq+1; + const u32 polyCntSqM1 = (polyCntY-1)*polyCntXpitch; + + for(p2=0;p2indices[i++] = polyCntSq; + buffer->indices[i++] = p2; + buffer->indices[i++] = p2+1; + + buffer->indices[i++] = polyCntSq1; + buffer->indices[i++] = polyCntSqM1+p2; + buffer->indices[i++] = polyCntSqM1+p2+1; + } + + buffer->indices[i++] = polyCntSq; + buffer->indices[i++] = polyCntX-1; + buffer->indices[i++] = polyCntX; + + buffer->indices[i++] = polyCntSq1; + buffer->indices[i++] = polyCntSqM1; + buffer->indices[i++] = polyCntSqM1+polyCntX-1; + + f32 axz; + f32 ay = 0; + SColor col(100,255,255,255); + const f32 angelX = 2*M_PI/polyCntX; + const f32 angelY = M_PI/polyCntY; + + i = 0; + for(y=0;y(radius*cosf(axz)*sinay), static_cast(radius*cosf(ay)), static_cast(radius*sinf(axz)*sinay)); + + Vector3 normal = normalize(pos); + + f32 tu = 0.5F; + if(y==0) { + if(normal.getY()!=-1.0F && normal.getY()!=1.0F) + tu = static_cast(acosf(clamp(normal.getX()/sinay,-1.0f,1.0f))*0.5F*RECIPROCAL_PI); + if(normal.getZ()<0.0F) + tu = 1-tu; + } else + tu = buffer->vertices[i - polyCntXpitch].u; + + buffer->vertices[i] = S3DVertex(pos,normal,col,tu,static_cast(ay*RECIPROCAL_PI)); + axz += angelX; + i++; + } + buffer->vertices[i] = S3DVertex(buffer->vertices[i-polyCntX]); + buffer->vertices[i].u = 1.0F; + i++; + } + + buffer->vertices[i++] = S3DVertex(0.0F,radius,0.0F,0.0F,1.0F,0.0F,col,0.5F,0.0F); + buffer->vertices[i] = S3DVertex(0.0F,-radius,0.0F,0.0F,-1.0F,0.0F,col,0.5F,1.0F); + + return buffer; +} diff --git a/samples/graphics/rsx_Basic_Wallpaper/source/main.cpp b/samples/graphics/rsx_Basic_Wallpaper/source/main.cpp new file mode 100644 index 00000000..d18e803f --- /dev/null +++ b/samples/graphics/rsx_Basic_Wallpaper/source/main.cpp @@ -0,0 +1,343 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "wall1_png_bin.h" + +#include + +#include +#include +#include + +#include "acid.h" +#include "mesh.h" +#include "geometry.h" +#include "rsxutil.h" + +#include "diffuse_specular_shader_vpo.h" +#include "scanlines_fpo.h" + +typedef struct +{ + float x, y, z; + u32 rgba; +} Vertex_t; + +Vertex_t* vertex_buffer; +u32 VertexBufferOffset; + +u32 running = 0; + +u32 fp_offset; +u32 *fp_buffer; + +u32* texture_buffer; +u32 texture_offset; + +pngData* png; + + +SMeshBuffer* quad = NULL; + +// vertex shader +rsxProgramConst *projMatrix; + +rsxProgramAttrib* mPosIndex = NULL; + +rsxProgramAttrib* mColIndex = NULL; + +// fragment shader +rsxProgramConst* scanlines; +rsxProgramAttrib* textureUnit; + +u32 color_index; +u32 position_index; + + +void *vp_ucode = NULL; +rsxVertexProgram *vpo = (rsxVertexProgram*)diffuse_specular_shader_vpo; + +void *fp_ucode = NULL; +rsxFragmentProgram *fpo = (rsxFragmentProgram*)scanlines_fpo; + +// setting default scanline parameters +Vector4 scanlineParams(200.0f, 2.0f, 0.7f, 0.0f); + +SYS_PROCESS_PARAM(1001, 0x100000); + +extern "C" { +static void program_exit_callback() +{ + gcmSetWaitFlip(context); + rsxFinish(context,1); +} + +static void sysutil_exit_callback(u64 status,u64 param,void *usrdata) +{ + switch(status) { + case SYSUTIL_EXIT_GAME: + running = 0; + break; + case SYSUTIL_DRAW_BEGIN: + case SYSUTIL_DRAW_END: + break; + default: + break; + } +} +} + +static void init_texture() +{ + + u32 i; + u8* buffer; + + //Init png texture + const u8* data = (u8*)png->bmp_out; + texture_buffer = (u32*)rsxMemalign(128, (png->height * png->pitch)); + + if (!texture_buffer) return; + + rsxAddressToOffset(texture_buffer, &texture_offset); + + buffer = (u8*)texture_buffer; + for (i = 0; i < png->height * png->pitch; i += 4) { + buffer[i + 0] = *data++; + buffer[i + 1] = *data++; + buffer[i + 2] = *data++; + buffer[i + 3] = *data++; + } +} + + +static void setTexture(u8 textureUnit) +{ + u32 width = png->width; + u32 height = png->height; + u32 pitch = png->pitch; + gcmTexture texture; + + if (!texture_buffer) return; + + rsxInvalidateTextureCache(context, GCM_INVALIDATE_TEXTURE); + + texture.format = (GCM_TEXTURE_FORMAT_A8R8G8B8 | GCM_TEXTURE_FORMAT_LIN); + texture.mipmap = 1; + texture.dimension = GCM_TEXTURE_DIMS_2D; + texture.cubemap = GCM_FALSE; + texture.remap = ((GCM_TEXTURE_REMAP_TYPE_REMAP << GCM_TEXTURE_REMAP_TYPE_B_SHIFT) | + (GCM_TEXTURE_REMAP_TYPE_REMAP << GCM_TEXTURE_REMAP_TYPE_G_SHIFT) | + (GCM_TEXTURE_REMAP_TYPE_REMAP << GCM_TEXTURE_REMAP_TYPE_R_SHIFT) | + (GCM_TEXTURE_REMAP_TYPE_REMAP << GCM_TEXTURE_REMAP_TYPE_A_SHIFT) | + (GCM_TEXTURE_REMAP_COLOR_B << GCM_TEXTURE_REMAP_COLOR_B_SHIFT) | + (GCM_TEXTURE_REMAP_COLOR_G << GCM_TEXTURE_REMAP_COLOR_G_SHIFT) | + (GCM_TEXTURE_REMAP_COLOR_R << GCM_TEXTURE_REMAP_COLOR_R_SHIFT) | + (GCM_TEXTURE_REMAP_COLOR_A << GCM_TEXTURE_REMAP_COLOR_A_SHIFT)); + texture.width = width; + texture.height = height; + texture.depth = 1; + texture.location = GCM_LOCATION_RSX; + texture.pitch = pitch; + texture.offset = texture_offset; + rsxLoadTexture(context, textureUnit, &texture); + rsxTextureControl(context, textureUnit, GCM_TRUE, 0 << 8, 12 << 8, GCM_TEXTURE_MAX_ANISO_1); + rsxTextureFilter(context, textureUnit, 0, GCM_TEXTURE_LINEAR, GCM_TEXTURE_LINEAR, GCM_TEXTURE_CONVOLUTION_QUINCUNX); + rsxTextureWrapMode(context, textureUnit, GCM_TEXTURE_CLAMP_TO_EDGE, GCM_TEXTURE_CLAMP_TO_EDGE, GCM_TEXTURE_CLAMP_TO_EDGE, 0, GCM_TEXTURE_ZFUNC_LESS, 0); +} + + +static void setDrawEnv() +{ + rsxSetColorMask(context,GCM_COLOR_MASK_B | + GCM_COLOR_MASK_G | + GCM_COLOR_MASK_R | + GCM_COLOR_MASK_A); + + rsxSetColorMaskMrt(context,0); + + u16 x,y,w,h; + f32 min, max; + f32 scale[4],offset[4]; + + x = 0; + y = 0; + w = display_width; + h = display_height; + min = 0.0f; + max = 1.0f; + scale[0] = w*0.5f; + scale[1] = h*-0.5f; + scale[2] = (max - min)*0.5f; + scale[3] = 0.0f; + offset[0] = x + w*0.5f; + offset[1] = y + h*0.5f; + offset[2] = (max + min)*0.5f; + offset[3] = 0.0f; + + rsxSetViewport(context,x, y, w, h, min, max, scale, offset); + rsxSetScissor(context,x,y,w,h); + + rsxSetDepthTestEnable(context, GCM_FALSE); + rsxSetDepthFunc(context,GCM_LESS); + rsxSetShadeModel(context,GCM_SHADE_MODEL_SMOOTH); + rsxSetDepthWriteEnable(context,1); + rsxSetFrontFace(context,GCM_FRONTFACE_CCW); + rsxSetBlendEnable(context, GCM_TRUE); + rsxSetBlendFunc(context, GCM_SRC_ALPHA, GCM_ONE_MINUS_SRC_ALPHA, GCM_SRC_COLOR, GCM_DST_COLOR); + rsxSetBlendEquation(context, GCM_FUNC_ADD, GCM_FUNC_ADD); +} + +void init_shader() +{ + u32 fpsize = 0; + u32 vpsize = 0; + + rsxVertexProgramGetUCode(vpo, &vp_ucode, &vpsize); + + projMatrix = rsxVertexProgramGetConst(vpo, "modelViewProj"); + + mPosIndex = rsxVertexProgramGetAttrib(vpo, "position"); + + mColIndex = rsxVertexProgramGetAttrib(vpo, "color"); + + rsxFragmentProgramGetUCode(fpo, &fp_ucode, &fpsize); + + fp_buffer = (u32*)rsxMemalign(64,fpsize); + memcpy(fp_buffer,fp_ucode,fpsize); + + rsxAddressToOffset(fp_buffer,&fp_offset); + scanlines = rsxFragmentProgramGetConst(fpo, "scanline"); + textureUnit = rsxFragmentProgramGetAttrib(fpo, "texture"); + if (textureUnit) + printf("textureUnit OK\n"); + +} + + +void drawFrame() +{ + u32 i, offset; + SMeshBuffer* mesh = NULL; + + setDrawEnv(); + + + rsxSetClearColor(context,0); + rsxSetClearDepthStencil(context,0xffffff00); + rsxClearSurface(context,GCM_CLEAR_R | + GCM_CLEAR_G | + GCM_CLEAR_B | + GCM_CLEAR_A | + GCM_CLEAR_S | + GCM_CLEAR_Z); + + rsxSetZControl(context,0,1,1); + + for(i=0;i<8;i++) + rsxSetViewportClip(context,i,display_width,display_height); + + Matrix4 tempMatrix = transpose(Matrix4::identity()); + + mesh = quad; + setTexture(textureUnit->index); + + rsxBindVertexArrayAttrib(context, GCM_VERTEX_ATTRIB_POS, 0, mesh->pos_off, sizeof(S3DVertex), 3, GCM_VERTEX_DATA_TYPE_F32, GCM_LOCATION_RSX); + rsxBindVertexArrayAttrib(context, GCM_VERTEX_ATTRIB_NORMAL, 0, mesh->nrm_off, sizeof(S3DVertex), 3, GCM_VERTEX_DATA_TYPE_F32, GCM_LOCATION_RSX); + rsxBindVertexArrayAttrib(context, GCM_VERTEX_ATTRIB_TEX0, 0, mesh->uv_off, sizeof(S3DVertex), 2, GCM_VERTEX_DATA_TYPE_F32, GCM_LOCATION_RSX); + + rsxLoadVertexProgram(context, vpo, vp_ucode); + rsxSetVertexProgramParameter(context, vpo, projMatrix, (float*)&tempMatrix); + + rsxSetFragmentProgramParameter(context, fpo, scanlines, (float*)&scanlineParams, fp_offset, GCM_LOCATION_RSX); + rsxLoadFragmentProgramLocation(context, fpo, fp_offset, GCM_LOCATION_RSX); + rsxAddressToOffset(&mesh->indices[0], &offset); + rsxDrawIndexArray(context, GCM_TYPE_TRIANGLES, mesh->ind_off, mesh->getIndexCount(), GCM_INDEX_TYPE_32B, GCM_LOCATION_RSX); + + +} + +int main(int argc,const char *argv[]) +{ + padInfo padinfo; + padData paddata; + void *host_addr = memalign(HOST_ADDR_ALIGNMENT,HOSTBUFFER_SIZE); + + printf("rsxtest started...\n"); + + init_screen(host_addr,HOSTBUFFER_SIZE); + ioPadInit(7); + + //Init background Image + png = new pngData; + pngLoadFromBuffer(wall1_png_bin, wall1_png_bin_size, png); + + //Create quad + quad = createQuad(Point3(-1.0, -1.0, 0), Point3(1.0, 1.0, 0), Point3(-1.0, 1.0, 0), Point3(1.0, -1.0, 0)); + + + init_shader(); + init_texture(); + + DebugFont::init(); + DebugFont::setScreenRes(display_width, display_height); + + atexit(program_exit_callback); + sysUtilRegisterCallback(0,sysutil_exit_callback,NULL); + + setDrawEnv(); + setRenderTarget(curr_fb); + + running = 1; + while(running) { + sysUtilCheckCallback(); + + ioPadGetInfo(&padinfo); + for(int i=0; i < MAX_PADS; i++){ + if(padinfo.status[i]){ + ioPadGetData(i, &paddata); + + if(paddata.BTN_CIRCLE) + goto done; + if (paddata.BTN_CROSS) + scanlineParams.setW(0.1f); + if (paddata.BTN_SQUARE) + scanlineParams.setW(0.2f); + if (paddata.BTN_TRIANGLE) + scanlineParams.setW(0.0f); + } + + } + + drawFrame(); + int ypos = 53; + int xpos = 10; + DebugFont::setPosition(xpos, ypos); + DebugFont::setColor(0.5f, 1.0f, 0.5f, 1.0f); + + DebugFont::print("CROSS Button to enable horizontal scanlines"); + ypos += 12; + DebugFont::setPosition(xpos, ypos); + DebugFont::print("SQUARE Button to enable vertical scanlines"); + ypos += 12; + DebugFont::setPosition(xpos, ypos); + DebugFont::print("TRIANGLE Button to disable scanlines"); + ypos += 12; + DebugFont::setPosition(xpos, ypos); + DebugFont::print("CIRCLE Button to exit"); + + flip(); + } + +done: + printf("rsxtest done...\n"); + DebugFont::shutdown(); + program_exit_callback(); + return 0; +} diff --git a/samples/graphics/rsx_Basic_Wallpaper/source/rsxutil.cpp b/samples/graphics/rsx_Basic_Wallpaper/source/rsxutil.cpp new file mode 100644 index 00000000..0f8a6e60 --- /dev/null +++ b/samples/graphics/rsx_Basic_Wallpaper/source/rsxutil.cpp @@ -0,0 +1,208 @@ +#include +#include +#include +#include +#include +#include + +#include + +#include +#include "rsxutil.h" + +#define GCM_LABEL_INDEX 255 + +videoResolution vResolution; +gcmContextData *context = NULL; + +u32 curr_fb = 0; +u32 first_fb = 1; + +u32 display_width; +u32 display_height; + +u32 depth_pitch; +u32 depth_offset; +u32 *depth_buffer; + +u32 color_pitch; +u32 color_offset[FRAME_BUFFER_COUNT]; +u32 *color_buffer[FRAME_BUFFER_COUNT]; + +f32 aspect_ratio; + +static u32 sResolutionIds[] = { + VIDEO_RESOLUTION_1080, + VIDEO_RESOLUTION_720, + VIDEO_RESOLUTION_480, + VIDEO_RESOLUTION_576 +}; +static size_t RESOLUTION_ID_COUNT = sizeof(sResolutionIds)/sizeof(u32); + +static u32 sLabelVal = 1; + +extern void dbg_printf(const char *fmt,...); + +static RSXDebugFontRenderer* debugFontRenderer; + +static void waitFinish() +{ + rsxSetWriteBackendLabel(context,GCM_LABEL_INDEX,sLabelVal); + + rsxFlushBuffer(context); + + while(*(vu32*)gcmGetLabelAddress(GCM_LABEL_INDEX)!=sLabelVal) + usleep(30); + + ++sLabelVal; +} + +static void waitRSXIdle() +{ + rsxSetWriteBackendLabel(context,GCM_LABEL_INDEX,sLabelVal); + rsxSetWaitLabel(context,GCM_LABEL_INDEX,sLabelVal); + + ++sLabelVal; + + waitFinish(); +} + +void initVideoConfiguration() +{ + s32 rval = 0; + s32 resId = 0; + + for (size_t i=0;i < RESOLUTION_ID_COUNT;i++) { + rval = videoGetResolutionAvailability(VIDEO_PRIMARY, sResolutionIds[i], VIDEO_ASPECT_AUTO, 0); + if (rval != 1) continue; + + resId = sResolutionIds[i]; + rval = videoGetResolution(resId, &vResolution); + if(!rval) break; + } + + if(rval) { + printf("Error: videoGetResolutionAvailability failed. No usable resolution.\n"); + exit(1); + } + + videoConfiguration config = { + (u8)resId, + VIDEO_BUFFER_FORMAT_XRGB, + VIDEO_ASPECT_AUTO, + {0,0,0,0,0,0,0,0,0}, + (u32)vResolution.width*4 + }; + + rval = videoConfigure(VIDEO_PRIMARY, &config, NULL, 0); + if(rval) { + printf("Error: videoConfigure failed.\n"); + exit(1); + } + + videoState state; + + rval = videoGetState(VIDEO_PRIMARY, 0, &state); + switch(state.displayMode.aspect) { + case VIDEO_ASPECT_4_3: + aspect_ratio = 4.0f/3.0f; + break; + case VIDEO_ASPECT_16_9: + aspect_ratio = 16.0f/9.0f; + break; + default: + printf("unknown aspect ratio %x\n", state.displayMode.aspect); + aspect_ratio = 16.0f/9.0f; + break; + } + + display_height = vResolution.height; + display_width = vResolution.width; +} + +void setRenderTarget(u32 index) +{ + gcmSurface sf; + + sf.colorFormat = GCM_SURFACE_X8R8G8B8; + sf.colorTarget = GCM_SURFACE_TARGET_0; + sf.colorLocation[0] = GCM_LOCATION_RSX; + sf.colorOffset[0] = color_offset[index]; + sf.colorPitch[0] = color_pitch; + + sf.colorLocation[1] = GCM_LOCATION_RSX; + sf.colorLocation[2] = GCM_LOCATION_RSX; + sf.colorLocation[3] = GCM_LOCATION_RSX; + sf.colorOffset[1] = 0; + sf.colorOffset[2] = 0; + sf.colorOffset[3] = 0; + sf.colorPitch[1] = 64; + sf.colorPitch[2] = 64; + sf.colorPitch[3] = 64; + + sf.depthFormat = GCM_SURFACE_ZETA_Z16; + sf.depthLocation = GCM_LOCATION_RSX; + sf.depthOffset = depth_offset; + sf.depthPitch = depth_pitch; + + sf.type = GCM_SURFACE_TYPE_LINEAR; + sf.antiAlias = GCM_SURFACE_CENTER_1; + + sf.width = display_width; + sf.height = display_height; + sf.x = 0; + sf.y = 0; + + rsxSetSurface(context,&sf); +} + +void init_screen(void *host_addr,u32 size) +{ + u32 zs_depth = 4; + u32 color_depth = 4; + + rsxInit(&context,CB_SIZE,size,host_addr); + + initVideoConfiguration(); + + waitRSXIdle(); + + gcmSetFlipMode(GCM_FLIP_VSYNC); + + color_pitch = display_width*color_depth; + depth_pitch = display_width*zs_depth; + + for (u32 i=0;i < FRAME_BUFFER_COUNT;i++) { + color_buffer[i] = (u32*)rsxMemalign(64,(display_height*color_pitch)); + rsxAddressToOffset(color_buffer[i],&color_offset[i]); + gcmSetDisplayBuffer(i,color_offset[i],color_pitch,display_width,display_height); + } + + depth_buffer = (u32*)rsxMemalign(64,(display_height*depth_pitch)*2); + rsxAddressToOffset(depth_buffer,&depth_offset); + + debugFontRenderer = new RSXDebugFontRenderer(context); +} + +void waitflip() +{ + while(gcmGetFlipStatus()!=0) + usleep(200); + gcmResetFlipStatus(); +} + +void flip() +{ + if(!first_fb) waitflip(); + else gcmResetFlipStatus(); + + gcmSetFlip(context,curr_fb); + rsxFlushBuffer(context); + + gcmSetWaitFlip(context); + + curr_fb ^= 1; + setRenderTarget(curr_fb); + + first_fb = 0; +}